@twobirds/microcomponents 0.0.82 → 0.0.83
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/assets/documentation/MC.md +0 -1
- package/dist/MC.d.ts +3 -3
- package/dist/MC.d.ts.map +1 -1
- package/dist/MC.js +43 -74
- package/dist/MC.min.js +43 -74
- package/dist/MC.ts +67 -143
- package/dist/elements.d.ts +1 -1
- package/dist/elements.d.ts.map +1 -1
- package/dist/elements.js +16 -2
- package/dist/elements.min.js +1 -1
- package/dist/elements.ts +33 -3
- package/dist/formValues.min.js +1 -1
- package/dist/microcomponents.min.js +1 -1
- package/dist/observables.d.ts.map +1 -1
- package/dist/observables.js +40 -47
- package/dist/observables.min.js +1 -1
- package/dist/observables.ts +54 -59
- package/dist/selectors.d.ts +2 -4
- package/dist/selectors.d.ts.map +1 -1
- package/dist/selectors.js +2 -214
- package/dist/selectors.min.js +1 -1
- package/dist/selectors.ts +2 -367
- package/package.json +6 -5
- package/public/MC.d.ts +3 -3
- package/public/MC.d.ts.map +1 -1
- package/public/MC.js +43 -74
- package/public/MC.js.map +1 -1
- package/public/MC.min.js +43 -74
- package/public/MC.ts +67 -143
- package/public/documentation/MC.md +0 -1
- package/public/elements.d.ts +1 -1
- package/public/elements.d.ts.map +1 -1
- package/public/elements.js +16 -2
- package/public/elements.js.map +1 -1
- package/public/elements.min.js +1 -1
- package/public/elements.ts +33 -3
- package/public/formValues.min.js +1 -1
- package/public/microcomponents.min.js +1 -1
- package/public/observables.d.ts.map +1 -1
- package/public/observables.js +40 -47
- package/public/observables.js.map +1 -1
- package/public/observables.min.js +1 -1
- package/public/observables.ts +54 -59
- package/public/selectors.d.ts +2 -4
- package/public/selectors.d.ts.map +1 -1
- package/public/selectors.js +2 -214
- package/public/selectors.js.map +1 -1
- package/public/selectors.min.js +1 -1
- package/public/selectors.ts +2 -367
- package/public/src/MC.d.ts +36 -0
- package/public/src/MC.d.ts.map +1 -0
- package/public/src/MC.js +348 -0
- package/public/src/MC.js.map +1 -0
- package/public/src/MC.ts +67 -143
- package/public/src/McEvent.d.ts +15 -0
- package/public/src/McEvent.d.ts.map +1 -0
- package/public/src/McEvent.js +71 -0
- package/public/src/elements.d.ts +5 -0
- package/public/src/elements.d.ts.map +1 -0
- package/public/src/elements.js +62 -0
- package/public/src/elements.js.map +1 -0
- package/public/src/elements.ts +33 -3
- package/public/src/formValues.d.ts +3 -0
- package/public/src/formValues.d.ts.map +1 -0
- package/public/src/formValues.js +162 -0
- package/public/src/helpers.d.ts +14 -0
- package/public/src/helpers.d.ts.map +1 -0
- package/public/src/helpers.js +113 -0
- package/public/src/microcomponents.d.ts +7 -0
- package/public/src/microcomponents.d.ts.map +1 -0
- package/public/src/microcomponents.js +8 -0
- package/public/src/observables.d.ts +11 -0
- package/public/src/observables.d.ts.map +1 -0
- package/public/src/observables.js +242 -0
- package/public/src/observables.js.map +1 -0
- package/public/src/observables.ts +54 -59
- package/public/src/selectors.d.ts +106 -0
- package/public/src/selectors.d.ts.map +1 -0
- package/public/src/selectors.js +759 -0
- package/public/src/selectors.js.map +1 -0
- package/public/src/selectors.ts +2 -367
- package/public/src/test/grandparent.css +11 -0
- package/public/src/test/test/child.d.ts +2 -0
- package/public/src/test/test/child.d.ts.map +1 -0
- package/public/src/test/test/child.js +15 -0
- package/public/src/test/test/child.js.map +1 -0
- package/public/src/test/test/child.ts +21 -0
- package/public/src/test/test/grandchild.d.ts +2 -0
- package/public/src/test/test/grandchild.d.ts.map +1 -0
- package/public/src/test/test/grandchild.js +15 -0
- package/public/src/test/test/grandchild.js.map +1 -0
- package/public/src/test/test/grandchild.ts +21 -0
- package/public/src/test/test/grandparent.d.ts +2 -0
- package/public/src/test/test/grandparent.d.ts.map +1 -0
- package/public/src/test/test/grandparent.js +1 -0
- package/public/src/test/test/grandparent.js.map +1 -0
- package/public/src/test/test/grandparent.ts +21 -0
- package/public/src/test/test/greatgrandchild.d.ts +2 -0
- package/public/src/test/test/greatgrandchild.d.ts.map +1 -0
- package/public/src/test/test/greatgrandchild.js +29 -0
- package/public/src/test/test/greatgrandchild.js.map +1 -0
- package/public/src/test/test/greatgrandchild.ts +42 -0
- package/public/src/test/test/parent.d.ts +2 -0
- package/public/src/test/test/parent.d.ts.map +1 -0
- package/public/src/test/test/parent.js +15 -0
- package/public/src/test/test/parent.js.map +1 -0
- package/public/src/test/test/parent.ts +21 -0
- package/public/src/test/test/testform.d.ts +2 -0
- package/public/src/test/test/testform.d.ts.map +1 -0
- package/public/src/test/test/testform.js +1 -0
- package/public/src/test/test/testform.js.map +1 -0
- package/public/src/test/test/testform.ts +155 -0
- package/public/src/test/test/testfunction.d.ts +3 -0
- package/public/src/test/test/testfunction.d.ts.map +1 -0
- package/public/src/test/test/testfunction.js +7 -0
- package/public/src/test/test/testfunction.js.map +1 -0
- package/public/src/test/test/testfunction.ts +12 -0
- package/public/src/test/test/testmc.d.ts +3 -0
- package/public/src/test/test/testmc.d.ts.map +1 -0
- package/public/src/test/test/testmc.js +10 -0
- package/public/src/test/test/testmc.js.map +1 -0
- package/public/src/test/test/testmc.ts +16 -0
- package/public/src/test/test/testsimpleclass.d.ts +3 -0
- package/public/src/test/test/testsimpleclass.d.ts.map +1 -0
- package/public/src/test/test/testsimpleclass.js +9 -0
- package/public/src/test/test/testsimpleclass.js.map +1 -0
- package/public/src/test/test/testsimpleclass.ts +15 -0
- package/public/src/test/test.d.ts +2 -0
- package/public/src/test/test.d.ts.map +1 -0
- package/public/src/test/test.js +79 -0
- package/public/src/test/test.js.map +1 -0
- package/public/src/test/test.ts +188 -0
- package/public/src/test/testform.css +47 -0
- package/public/src/test/testform.html +56 -0
- package/public/src/test/testform.json +27 -0
- package/public/test/MC.d.ts +3 -3
- package/public/test/MC.d.ts.map +1 -1
- package/public/test/MC.js +43 -74
- package/public/test/MC.min.js +485 -0
- package/public/test/MC.ts +67 -143
- package/public/test/elements.d.ts +1 -1
- package/public/test/elements.d.ts.map +1 -1
- package/public/test/elements.js +16 -2
- package/public/test/elements.min.js +1 -0
- package/public/test/elements.ts +33 -3
- package/public/test/formValues.min.js +1 -0
- package/public/test/grandparent.css +1 -3
- package/public/test/microcomponents.min.js +1 -1
- package/public/test/observables.d.ts.map +1 -1
- package/public/test/observables.js +40 -47
- package/public/test/observables.min.js +1 -0
- package/public/test/observables.ts +54 -59
- package/public/test/selectors.d.ts +2 -4
- package/public/test/selectors.d.ts.map +1 -1
- package/public/test/selectors.js +2 -214
- package/public/test/selectors.min.js +1 -0
- package/public/test/selectors.ts +2 -367
- package/public/test/test/child.ts +21 -0
- package/public/test/test/grandchild.ts +21 -0
- package/public/test/test/grandparent.js +1 -1
- package/public/test/test/grandparent.ts +21 -0
- package/public/test/test/greatgrandchild.ts +42 -0
- package/public/test/test/parent.ts +21 -0
- package/public/test/test/testform.js +1 -1
- package/public/test/test/testform.js.map +1 -1
- package/public/test/test/testform.ts +155 -0
- package/public/test/test/testfunction.d.ts +3 -0
- package/public/test/test/testfunction.d.ts.map +1 -0
- package/public/test/test/testfunction.js +7 -0
- package/public/test/test/testfunction.js.map +1 -0
- package/public/test/test/testfunction.ts +12 -0
- package/public/test/test/testmc.d.ts +2 -5
- package/public/test/test/testmc.d.ts.map +1 -1
- package/public/test/test/testmc.js +4 -4
- package/public/test/test/testmc.js.map +1 -1
- package/public/test/test/testmc.ts +16 -0
- package/public/test/test/testsimpleclass.d.ts +3 -0
- package/public/test/test/testsimpleclass.d.ts.map +1 -0
- package/public/test/test/testsimpleclass.js +9 -0
- package/public/test/test/testsimpleclass.js.map +1 -0
- package/public/test/test/testsimpleclass.ts +15 -0
- package/public/test/test.js +0 -2
- package/public/test/test.js.map +1 -1
- package/public/test/test.ts +188 -0
- package/public/test/testform.css +47 -0
- package/public/test/testform.html +56 -0
- package/public/test/testform.json +3 -3
- package/public/typedoc/assets/navigation.js +1 -1
- package/public/typedoc/assets/search.js +1 -1
- package/public/typedoc/classes/MC.DC.html +5 -5
- package/public/typedoc/classes/MC.MC.html +5 -5
- package/public/typedoc/classes/MC.McBase.html +4 -3
- package/public/typedoc/classes/MC.McEvent.html +2 -2
- package/public/typedoc/functions/MC.addListener.html +1 -1
- package/public/typedoc/functions/MC.autoload.html +1 -1
- package/public/typedoc/functions/MC.removeListener.html +1 -1
- package/public/typedoc/functions/elements.defineCE.html +1 -1
- package/public/typedoc/functions/elements.getCE.html +1 -1
- package/public/typedoc/functions/formValues.formValues.html +1 -1
- package/public/typedoc/functions/observables.observe.html +1 -1
- package/public/typedoc/functions/selectors._d.html +1 -0
- package/public/typedoc/functions/selectors._t.html +1 -0
- package/public/typedoc/interfaces/MC.HTMLMcElement.html +2 -2
- package/public/typedoc/interfaces/selectors.DSelector.html +48 -0
- package/public/typedoc/interfaces/selectors.TSelector.html +34 -0
- package/public/typedoc/modules/MC.html +1 -1
- package/public/typedoc/modules/elements.html +1 -1
- package/public/typedoc/modules/formValues.html +1 -1
- package/public/typedoc/modules/observables.html +1 -1
- package/public/typedoc/modules/selectors.html +7 -0
- package/public/typedoc/modules.html +1 -0
- package/public/typedoc/types/observables.Observable.html +1 -1
- package/public/typedoc/types/selectors.selection.html +1 -0
- package/public/typedoc/types/selectors.singleSelector.html +1 -0
- package/src/MC.ts +67 -143
- package/src/elements.ts +33 -3
- package/src/observables.ts +54 -59
- package/src/selectors.ts +2 -367
- package/src/test/test/testform.ts +7 -3
- package/src/test/test/testfunction.ts +12 -0
- package/src/test/test/testmc.ts +13 -9
- package/src/test/test/testsimpleclass.ts +15 -0
- package/src/test/test.ts +0 -12
- package/tasks.md +36 -0
- package/typedoc.json +1 -1
- package/public/test/MC.js.map +0 -1
- package/public/test/elements.js.map +0 -1
- package/public/test/observables.js.map +0 -1
- package/public/test/selectors.js.map +0 -1
- /package/public/{test → src}/McEvent.js.map +0 -0
- /package/public/{test → src}/formValues.js.map +0 -0
- /package/public/{test → src}/helpers.js.map +0 -0
- /package/public/{test → src}/microcomponents.js.map +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MC.d.ts","sourceRoot":"","sources":["../src/MC.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAevC,MAAM,WAAW,aAAc,SAAQ,WAAW;IACjD,GAAG,EAAE,WAAW,CAAC;CACjB;AA8CD,iBAAS,WAAW,CACnB,OAAO,EAAE,IAAI,EACb,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,kCAAkC,GAAG,IAAI,EAClD,OAAO,GAAE,OAAe,EACxB,IAAI,GAAE,OAAe,QAarB;AAED,iBAAS,cAAc,CACtB,OAAO,EAAE,IAAI,EACb,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,kCAAkC,GAAG,IAAI,QAGlD;AAmDD,iBAAS,OAAO,CACf,MAAM,EAAE,WAAW,EACnB,EAAE,EAAE,OAAO,GAAG,MAAM,EACpB,IAAI,GAAE,GAAQ,EACd,MAAM,GAAE,MAAY,QAwBpB;AAiGD,cAAM,MAAM;IACX,OAAO,CAAC,OAAO,CAAe;IAC9B,OAAO,CAAC,IAAI,CAAmB;gBAEnB,MAAM,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,EAAE,KAAK,GAAE,OAAe;IAWnE,IAAI,MAAM,IAAI,GAAG,CAEhB;IAED,IAAI,GAAG,IAAI,GAAG,CAEb;CACD;AAED,cAAM,EAAG,SAAQ,MAAM;gBACV,MAAM,CAAC,EAAE,GAAG;IAIxB,MAAM,CAAC,OAAO,iBAAW;IAEzB,OAAO,CAAC,EAAE,EAAE,OAAO,GAAG,MAAM,EAAE,IAAI,GAAE,GAAQ,EAAE,MAAM,GAAE,MAAY;CAmElE;AAED,cAAM,EAAG,SAAQ,MAAM;gBACV,MAAM,EAAE,WAAW,EAAE,KAAK,GAAE,OAAe;IAIvD,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAO;IAC3B,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAU;IACjC,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAW;IAEnC,OAAO,CAAC,EAAE,EAAE,OAAO,GAAG,MAAM,EAAE,IAAI,GAAE,GAAQ,EAAE,MAAM,CAAC,EAAE,MAAM;IAI7D,MAAM,CAAC,MAAM,GAAE,MAAW,GAAG,GAAG,EAAE;IAMlC,SAAS,CAAC,MAAM,GAAE,MAAW,GAAG,GAAG,EAAE;IAMrC,QAAQ,CAAC,MAAM,GAAE,MAAW,GAAG,GAAG,EAAE;IAYpC,WAAW,CAAC,MAAM,GAAE,MAAW,GAAG,GAAG,EAAE;CAMvC;AAgGD,iBAAS,QAAQ,CAAC,MAAM,GAAE,OAAc,GAAG,OAAO,CAmBjD;AAID,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC"}
|
package/public/src/MC.js
ADDED
|
@@ -0,0 +1,348 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
import { McEvent } from './McEvent.js';
|
|
3
|
+
var isBrowser = new Function('try {return this===window;}catch(e){ return false;}');
|
|
4
|
+
let nativeEventNames = new Set();
|
|
5
|
+
if (isBrowser()) {
|
|
6
|
+
Object.keys(HTMLElement.prototype)
|
|
7
|
+
.filter((key) => /^on/.test(key))
|
|
8
|
+
.forEach((eventName) => nativeEventNames.add(eventName));
|
|
9
|
+
}
|
|
10
|
+
function getMicroComponents(elements, search) {
|
|
11
|
+
let mcValues = [];
|
|
12
|
+
elements.forEach((e) => {
|
|
13
|
+
if (e) {
|
|
14
|
+
if (e instanceof HTMLElement) {
|
|
15
|
+
const _mc = e?._mc;
|
|
16
|
+
if (!search && _mc) {
|
|
17
|
+
mcValues = mcValues.concat(Object.values(e._mc));
|
|
18
|
+
}
|
|
19
|
+
else if (search && _mc && _mc[search]) {
|
|
20
|
+
mcValues.push(_mc[search]);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
return mcValues;
|
|
26
|
+
}
|
|
27
|
+
function traverseNodes(node, search, firstonly = true) {
|
|
28
|
+
let mcValues = [];
|
|
29
|
+
while (node) {
|
|
30
|
+
if (node._mc) {
|
|
31
|
+
if (!search) {
|
|
32
|
+
mcValues = mcValues.concat(Object.values(node._mc));
|
|
33
|
+
}
|
|
34
|
+
else if (search && node._mc[search]) {
|
|
35
|
+
mcValues.push(node._mc[search]);
|
|
36
|
+
}
|
|
37
|
+
if (firstonly)
|
|
38
|
+
return mcValues;
|
|
39
|
+
}
|
|
40
|
+
node = node.parentNode;
|
|
41
|
+
}
|
|
42
|
+
return mcValues;
|
|
43
|
+
}
|
|
44
|
+
function isDOM(element) {
|
|
45
|
+
return element && element instanceof HTMLElement;
|
|
46
|
+
}
|
|
47
|
+
function addListener(domNode, eventName, handler, capture = false, once = false) {
|
|
48
|
+
let options = { once: false };
|
|
49
|
+
if (capture) {
|
|
50
|
+
options.capture = capture;
|
|
51
|
+
}
|
|
52
|
+
if (once) {
|
|
53
|
+
options.once = once;
|
|
54
|
+
}
|
|
55
|
+
domNode.addEventListener(eventName, handler, options);
|
|
56
|
+
}
|
|
57
|
+
function removeListener(domNode, eventName, handler) {
|
|
58
|
+
domNode.removeEventListener(eventName, handler);
|
|
59
|
+
}
|
|
60
|
+
function add(target, key, element = {}) {
|
|
61
|
+
let node = target;
|
|
62
|
+
if (!node._mc) {
|
|
63
|
+
let debug = DC?.debug;
|
|
64
|
+
DC.debug = false;
|
|
65
|
+
node._mc = new DC(target);
|
|
66
|
+
DC.debug = debug;
|
|
67
|
+
delete node._mc._mc;
|
|
68
|
+
}
|
|
69
|
+
const _mc = node._mc;
|
|
70
|
+
if (key.length && !_mc[key]) {
|
|
71
|
+
_mc[key] = element;
|
|
72
|
+
if (target instanceof HTMLElement && !target.getAttribute('_mc')) {
|
|
73
|
+
target.setAttribute('_mc', '');
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return element;
|
|
77
|
+
}
|
|
78
|
+
function remove(target, key) {
|
|
79
|
+
if (!key)
|
|
80
|
+
return;
|
|
81
|
+
const _mc = target?._mc || {};
|
|
82
|
+
if (_mc && _mc[key]) {
|
|
83
|
+
delete _mc[key];
|
|
84
|
+
}
|
|
85
|
+
if (!Object.keys(_mc).length &&
|
|
86
|
+
target instanceof HTMLElement &&
|
|
87
|
+
target.hasAttribute('_mc')) {
|
|
88
|
+
target.removeAttribute('_mc');
|
|
89
|
+
}
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
function trigger(target, ev, data = {}, bubble = 'l') {
|
|
93
|
+
let _mc = target?._mc;
|
|
94
|
+
if (!_mc)
|
|
95
|
+
return;
|
|
96
|
+
let event = ev instanceof McEvent
|
|
97
|
+
? new McEvent(ev.type, ev.data, 'l')
|
|
98
|
+
: new McEvent(ev, data, 'l'), mcEvent = typeof ev !== 'string' ? ev : new McEvent(ev, data, bubble);
|
|
99
|
+
[...Object.values(_mc)].forEach((mc) => {
|
|
100
|
+
if (mc?.trigger && typeof mc?.trigger === 'function') {
|
|
101
|
+
mc?.trigger(event);
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
if (/[ud]/.test(mcEvent.bubble)) {
|
|
105
|
+
bubbleEvent(target, mcEvent);
|
|
106
|
+
}
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
function init(element) {
|
|
110
|
+
if (element.constructor === DC)
|
|
111
|
+
return;
|
|
112
|
+
setTimeout(() => {
|
|
113
|
+
element.trigger('Init');
|
|
114
|
+
}, 0);
|
|
115
|
+
}
|
|
116
|
+
function autoAttachListeners(element) {
|
|
117
|
+
if (!isBrowser() || element.constructor === DC)
|
|
118
|
+
return;
|
|
119
|
+
const target = element.target;
|
|
120
|
+
if (target instanceof HTMLElement) {
|
|
121
|
+
let that = element;
|
|
122
|
+
Object.getOwnPropertyNames(that.constructor.prototype)
|
|
123
|
+
.filter((key) => /^on[A-Z]|one[A-Z]/.test(key) &&
|
|
124
|
+
typeof that.constructor.prototype[key] === 'function')
|
|
125
|
+
.forEach((key) => {
|
|
126
|
+
let once = /^one/.test(key), withoutOnOne = key.replace(/^on[e]{0,1}/, ''), nativeEventName = withoutOnOne.toLowerCase(), listener = (ev) => {
|
|
127
|
+
that.trigger(withoutOnOne, ev);
|
|
128
|
+
};
|
|
129
|
+
if (once) {
|
|
130
|
+
Object.defineProperty(element, 'on' + withoutOnOne, {
|
|
131
|
+
configurable: true,
|
|
132
|
+
enumerable: false,
|
|
133
|
+
writable: true,
|
|
134
|
+
value: (ev) => {
|
|
135
|
+
that.constructor.prototype[key].bind(that)(ev);
|
|
136
|
+
},
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
if (nativeEventNames.has('on' + nativeEventName)) {
|
|
140
|
+
addListener(target, nativeEventName, listener, false, once);
|
|
141
|
+
}
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
function bubbleEvent(target, ev) {
|
|
146
|
+
if (/[ud]/.test(ev.bubble)) {
|
|
147
|
+
setTimeout(() => {
|
|
148
|
+
if (ev.bubble.indexOf('l') === -1) {
|
|
149
|
+
ev.bubble += 'l';
|
|
150
|
+
}
|
|
151
|
+
if (ev.bubble.indexOf('u') > -1) {
|
|
152
|
+
let parent = traverseNodes(target, '', true)?.[0].target;
|
|
153
|
+
if (parent)
|
|
154
|
+
DC.trigger(parent, ev);
|
|
155
|
+
}
|
|
156
|
+
if (ev.bubble.indexOf('d') > -1) {
|
|
157
|
+
let targets = new Set(target._mc
|
|
158
|
+
.children()
|
|
159
|
+
.map((c) => c?.target));
|
|
160
|
+
targets.forEach((target) => {
|
|
161
|
+
if (target)
|
|
162
|
+
DC.trigger(target, ev);
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
}, 0);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
class McBase {
|
|
169
|
+
_target;
|
|
170
|
+
__mc = {};
|
|
171
|
+
constructor(target, debug = false) {
|
|
172
|
+
let that = this, element = that;
|
|
173
|
+
this._target = new WeakRef(target || {});
|
|
174
|
+
init(element);
|
|
175
|
+
autoAttachListeners(element);
|
|
176
|
+
}
|
|
177
|
+
get target() {
|
|
178
|
+
return this._target.deref();
|
|
179
|
+
}
|
|
180
|
+
get _mc() {
|
|
181
|
+
return this.__mc;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
class MC extends McBase {
|
|
185
|
+
constructor(target) {
|
|
186
|
+
super(target);
|
|
187
|
+
}
|
|
188
|
+
static trigger = trigger;
|
|
189
|
+
trigger(ev, data = {}, bubble = 'l') {
|
|
190
|
+
let that = this;
|
|
191
|
+
if (that.constructor === MC || that.constructor === DC) {
|
|
192
|
+
let event = ev instanceof McEvent
|
|
193
|
+
? new McEvent(ev.type, ev.data, 'l')
|
|
194
|
+
: new McEvent(ev, data, 'l'), mcEvent = typeof ev !== 'string'
|
|
195
|
+
? ev
|
|
196
|
+
: new McEvent(ev, data, bubble);
|
|
197
|
+
[...Object.getOwnPropertyNames(that)].forEach((mc) => {
|
|
198
|
+
if (that[mc]?.trigger &&
|
|
199
|
+
typeof that[mc]?.trigger === 'function') {
|
|
200
|
+
that[mc]?.trigger(event);
|
|
201
|
+
}
|
|
202
|
+
});
|
|
203
|
+
if (/[ud]/.test(mcEvent.bubble)) {
|
|
204
|
+
bubbleEvent(that.target, mcEvent);
|
|
205
|
+
}
|
|
206
|
+
return;
|
|
207
|
+
}
|
|
208
|
+
if (that instanceof MC || that instanceof DC) {
|
|
209
|
+
const that = this, mcEvent = typeof ev !== 'string'
|
|
210
|
+
? ev
|
|
211
|
+
: new McEvent(ev, data, bubble), handlerName = 'on' + mcEvent.type[0].toUpperCase() + mcEvent.type.slice(1);
|
|
212
|
+
if (mcEvent.bubble.indexOf('l') > -1) {
|
|
213
|
+
if (!mcEvent.immediateStopped &&
|
|
214
|
+
typeof that[handlerName] === 'function') {
|
|
215
|
+
that[handlerName](mcEvent);
|
|
216
|
+
if (that.hasOwnProperty(handlerName)) {
|
|
217
|
+
delete that[handlerName];
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
if (mcEvent.stopped || mcEvent.bubble === 'l') {
|
|
222
|
+
return that;
|
|
223
|
+
}
|
|
224
|
+
if (/[ud]/.test(mcEvent.bubble)) {
|
|
225
|
+
bubbleEvent(that.target, mcEvent);
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
class DC extends McBase {
|
|
231
|
+
constructor(target, debug = false) {
|
|
232
|
+
super(target);
|
|
233
|
+
}
|
|
234
|
+
static add = add;
|
|
235
|
+
static remove = remove;
|
|
236
|
+
static trigger = trigger;
|
|
237
|
+
trigger(ev, data = {}, bubble) {
|
|
238
|
+
MC.prototype.trigger.call(this, ev, data, bubble);
|
|
239
|
+
}
|
|
240
|
+
parent(search = '') {
|
|
241
|
+
let target = this.target;
|
|
242
|
+
if (!isDOM(target))
|
|
243
|
+
return [];
|
|
244
|
+
return traverseNodes(target.parentNode, search, true);
|
|
245
|
+
}
|
|
246
|
+
ancestors(search = '') {
|
|
247
|
+
let target = this?.target;
|
|
248
|
+
if (!isDOM(target))
|
|
249
|
+
return [];
|
|
250
|
+
return traverseNodes(this.target.parentNode, search, false);
|
|
251
|
+
}
|
|
252
|
+
children(search = '') {
|
|
253
|
+
let target = this?.target;
|
|
254
|
+
if (!isDOM(target))
|
|
255
|
+
return [];
|
|
256
|
+
const id = Math.random().toString().replace('.', '');
|
|
257
|
+
const selector = '[_mc]:not([temp_id="' + id + '"] [_mc] [_mc])';
|
|
258
|
+
target.setAttribute('temp_id', id);
|
|
259
|
+
const myDomElements = target.querySelectorAll(selector);
|
|
260
|
+
const mcValues = getMicroComponents([...myDomElements], search);
|
|
261
|
+
target.removeAttribute('temp_id');
|
|
262
|
+
return mcValues;
|
|
263
|
+
}
|
|
264
|
+
descendants(search = '') {
|
|
265
|
+
let target = this?.target;
|
|
266
|
+
if (!isDOM(target))
|
|
267
|
+
return [];
|
|
268
|
+
const myDomElements = target.querySelectorAll('*[_mc]');
|
|
269
|
+
return getMicroComponents([...myDomElements], search);
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
const loadingMCs = new Set();
|
|
273
|
+
function makeLoadScript(element) {
|
|
274
|
+
if (loadingMCs.has(element))
|
|
275
|
+
return;
|
|
276
|
+
loadingMCs.add(element);
|
|
277
|
+
const fileName = './' + element.split('-').join('/') + '.js';
|
|
278
|
+
const se = document.createElement('script');
|
|
279
|
+
se.setAttribute('src', fileName);
|
|
280
|
+
se.setAttribute('blocking', 'render');
|
|
281
|
+
se.async = true;
|
|
282
|
+
se.setAttribute('type', 'module');
|
|
283
|
+
se.setAttribute('data-name', element);
|
|
284
|
+
se.setAttribute('loading', '');
|
|
285
|
+
const loadedPromise = customElements.whenDefined(element);
|
|
286
|
+
loadedPromise.then(() => {
|
|
287
|
+
const elements = Array
|
|
288
|
+
.from(document.querySelectorAll(`[_mc*="${element}"]`))
|
|
289
|
+
.filter(element => element instanceof HTMLElement);
|
|
290
|
+
if (elements.length === 0)
|
|
291
|
+
return;
|
|
292
|
+
const klass = customElements.get(element);
|
|
293
|
+
elements.forEach((node) => {
|
|
294
|
+
DC.add(node, klass.name, new klass(node));
|
|
295
|
+
const new_mc = node
|
|
296
|
+
.getAttribute('_mc')
|
|
297
|
+
.split(' ')
|
|
298
|
+
.filter((name) => name !== element && name !== '')
|
|
299
|
+
.join(' ');
|
|
300
|
+
node.setAttribute('_mc', new_mc);
|
|
301
|
+
});
|
|
302
|
+
document.head.querySelector('script[data-name="${elementName}]"')?.remove();
|
|
303
|
+
});
|
|
304
|
+
addListener(se, 'load', (ev) => {
|
|
305
|
+
loadingMCs.delete(element);
|
|
306
|
+
});
|
|
307
|
+
addListener(se, 'error', (ev) => {
|
|
308
|
+
console.error('could not load MC code from', fileName);
|
|
309
|
+
});
|
|
310
|
+
document.head.append(se);
|
|
311
|
+
}
|
|
312
|
+
function loadUndefinedMCs() {
|
|
313
|
+
[...document.querySelectorAll(':not(:defined)')]
|
|
314
|
+
.filter((element) => !!element
|
|
315
|
+
&& !customElements.get(element.tagName.toLowerCase())
|
|
316
|
+
&& !loadingMCs.has(element.tagName.toLowerCase()))
|
|
317
|
+
.forEach((el) => {
|
|
318
|
+
makeLoadScript(el.tagName.toLowerCase());
|
|
319
|
+
});
|
|
320
|
+
[...document.querySelectorAll('[_mc]:not([_mc=""]')]
|
|
321
|
+
.filter((element) => !!element)
|
|
322
|
+
.forEach((el) => {
|
|
323
|
+
const _mc = el.getAttribute('_mc')?.split(' ').filter(name => name !== '');
|
|
324
|
+
_mc?.forEach(dc => {
|
|
325
|
+
makeLoadScript(dc);
|
|
326
|
+
});
|
|
327
|
+
});
|
|
328
|
+
}
|
|
329
|
+
let autoloadEnabled = false;
|
|
330
|
+
let observer = null;
|
|
331
|
+
function autoload(enable = true) {
|
|
332
|
+
if (!enable) {
|
|
333
|
+
observer?.disconnect();
|
|
334
|
+
observer = null;
|
|
335
|
+
return autoloadEnabled;
|
|
336
|
+
}
|
|
337
|
+
autoloadEnabled = enable;
|
|
338
|
+
observer = new MutationObserver(loadUndefinedMCs);
|
|
339
|
+
setTimeout(() => {
|
|
340
|
+
observer.observe(document.body, { childList: true, subtree: true });
|
|
341
|
+
loadUndefinedMCs();
|
|
342
|
+
}, 5);
|
|
343
|
+
window.autoload = window.autoload || autoload;
|
|
344
|
+
return autoloadEnabled;
|
|
345
|
+
}
|
|
346
|
+
autoload.state = { loadingMCs };
|
|
347
|
+
export { addListener, removeListener, McBase, MC, DC, McEvent, autoload };
|
|
348
|
+
//# sourceMappingURL=MC.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MC.js","sourceRoot":"","sources":["../src/MC.ts"],"names":[],"mappings":"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"}
|
package/public/src/MC.ts
CHANGED
|
@@ -267,13 +267,14 @@ function bubbleEvent(target: HTMLElement, ev: McEvent) {
|
|
|
267
267
|
}
|
|
268
268
|
|
|
269
269
|
class McBase {
|
|
270
|
-
|
|
270
|
+
private _target: WeakRef<any>; // avoid circular reference
|
|
271
|
+
private __mc: LooseObject = {};
|
|
271
272
|
|
|
272
273
|
constructor(target?: { [key: string]: any }, debug: boolean = false) {
|
|
273
274
|
let that: unknown = this,
|
|
274
275
|
element = that as MC | DC;
|
|
275
276
|
|
|
276
|
-
this
|
|
277
|
+
this._target = new WeakRef(target || {});
|
|
277
278
|
|
|
278
279
|
init(element); // async lifecycle event
|
|
279
280
|
|
|
@@ -281,13 +282,15 @@ class McBase {
|
|
|
281
282
|
}
|
|
282
283
|
|
|
283
284
|
get target(): any {
|
|
284
|
-
return this
|
|
285
|
+
return this._target.deref();
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
get _mc(): any {
|
|
289
|
+
return this.__mc;
|
|
285
290
|
}
|
|
286
291
|
}
|
|
287
292
|
|
|
288
293
|
class MC extends McBase {
|
|
289
|
-
_mc?: LooseObject = {};
|
|
290
|
-
|
|
291
294
|
constructor(target?: any) {
|
|
292
295
|
super(target);
|
|
293
296
|
}
|
|
@@ -364,8 +367,6 @@ class MC extends McBase {
|
|
|
364
367
|
}
|
|
365
368
|
|
|
366
369
|
class DC extends McBase {
|
|
367
|
-
_mc?: LooseObject = {};
|
|
368
|
-
|
|
369
370
|
constructor(target: HTMLElement, debug: boolean = false) {
|
|
370
371
|
super(target);
|
|
371
372
|
}
|
|
@@ -410,45 +411,15 @@ class DC extends McBase {
|
|
|
410
411
|
}
|
|
411
412
|
}
|
|
412
413
|
|
|
413
|
-
|
|
414
|
-
unresolvedCEs (code below this comment):
|
|
415
|
-
|
|
416
|
-
a repository (a hashmap) of undefined custom elements:
|
|
417
|
-
the name is the tagname of the micro component (like "my-custom-component")
|
|
418
|
-
if they are loading, the value is a script element
|
|
419
|
-
if they are loaded, the entry is deleted and the browser instanciates it automatically
|
|
420
|
-
if they cannot be loaded, the browser will throw an error
|
|
414
|
+
const loadingMCs = new Set<string>();
|
|
421
415
|
|
|
422
|
-
|
|
423
|
-
The file name is assumed to be "/my/custom/component.js"
|
|
424
|
-
The file must define a custom element via the defineCE() function included in the "elements" module.
|
|
425
|
-
This function is a wrapper for customElementRegistry.define(), which you can also use directly in the imported code.
|
|
416
|
+
function makeLoadScript( element: string ) {
|
|
426
417
|
|
|
427
|
-
|
|
428
|
-
The only difference is that the micro component is loaded only when needed, and not on page load.
|
|
429
|
-
*/
|
|
418
|
+
if ( loadingMCs.has( element ) ) return; // already loading
|
|
430
419
|
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
/*
|
|
434
|
-
loadedMCs (code below this comment):
|
|
435
|
-
a repository (a hashmap) of micro components:
|
|
436
|
-
the name is the name of the micro component (like "my-mc")
|
|
437
|
-
if they are loading, the value is a script element
|
|
438
|
-
if they are loaded, the value is the micro component class itself
|
|
439
|
-
|
|
440
|
-
This is mostly used for old style progressive enhancement:
|
|
441
|
-
If the micro component ( defined in the HTMLElements "_mc" attribute, like "my-mc") is not defined, it will be on-demand loaded:
|
|
442
|
-
The file name is assumed to be "/my/mc.js"
|
|
443
|
-
The file needs to have a default export, and it should be a class that extends the DC class ( since it is in a HTMLElements attribute )
|
|
444
|
-
|
|
445
|
-
In general this behaves like a custom runtime import for classes in the browser.
|
|
446
|
-
The only difference is that the micro component is loaded only when needed, and not on page load.
|
|
447
|
-
*/
|
|
448
|
-
const MCs = new Map();
|
|
449
|
-
|
|
450
|
-
function makeLoadScript( element: string ): HTMLScriptElement {
|
|
420
|
+
loadingMCs.add( element );
|
|
451
421
|
|
|
422
|
+
//console.log( 'makeLoadScript:', element);
|
|
452
423
|
const fileName: string = './' + element.split('-').join('/')+'.js';
|
|
453
424
|
|
|
454
425
|
const se: HTMLScriptElement = document.createElement('script');
|
|
@@ -457,123 +428,76 @@ function makeLoadScript( element: string ): HTMLScriptElement {
|
|
|
457
428
|
se.setAttribute('blocking', 'render');
|
|
458
429
|
se.async = true;
|
|
459
430
|
se.setAttribute('type', 'module');
|
|
460
|
-
se.setAttribute( 'name', element);
|
|
431
|
+
se.setAttribute( 'data-name', element);
|
|
461
432
|
se.setAttribute( 'loading', '');
|
|
462
433
|
|
|
463
|
-
|
|
464
|
-
// console.info('loaded MC', elementName);
|
|
465
|
-
se.removeAttribute( 'loading' );
|
|
466
|
-
se.setAttribute( 'loaded', '');
|
|
467
|
-
});
|
|
434
|
+
const loadedPromise = customElements.whenDefined( element );
|
|
468
435
|
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
436
|
+
loadedPromise.then( () => {
|
|
437
|
+
const elements: HTMLElement[] = Array
|
|
438
|
+
.from(document.querySelectorAll(`[_mc*="${element}"]`))
|
|
439
|
+
.filter( element => element instanceof HTMLElement );
|
|
472
440
|
|
|
473
|
-
|
|
474
|
-
}
|
|
441
|
+
if ( elements.length === 0 ) return;
|
|
475
442
|
|
|
476
|
-
|
|
477
|
-
// create callback script tag
|
|
478
|
-
// it is essential to do this in a timeout and via another script tag,
|
|
479
|
-
// to force it to be a top level module allowing for the use of "import"
|
|
480
|
-
setTimeout( function(){
|
|
481
|
-
// create callback script tag
|
|
482
|
-
const importFileName = script.getAttribute('src');
|
|
483
|
-
const elementName = script.getAttribute('name');
|
|
484
|
-
|
|
485
|
-
const se: HTMLScriptElement = document.createElement('script');
|
|
486
|
-
|
|
487
|
-
se.async = true;
|
|
488
|
-
se.setAttribute( 'type', 'module');
|
|
489
|
-
|
|
490
|
-
// --- autoload script
|
|
491
|
-
const code = /*javascript*/`
|
|
492
|
-
|
|
493
|
-
import _ from "${importFileName}";
|
|
494
|
-
import { DC } from "./microcomponents.js";
|
|
495
|
-
|
|
496
|
-
const elements = Array.from(document.querySelectorAll('[_mc*="${elementName}"]')).filter( element => element instanceof HTMLElement );
|
|
497
|
-
|
|
498
|
-
elements.forEach((element) => {
|
|
499
|
-
// add class to MCs repository
|
|
500
|
-
autoload.state.MCs.set( '${elementName}', _ );
|
|
501
|
-
// add instance to HTMLElement
|
|
502
|
-
DC.add(element, _.name, new _(element));
|
|
503
|
-
// remove instance name from elements "_mc" attribute
|
|
504
|
-
element.setAttribute('_mc', element.getAttribute('_mc').replace('${elementName}', '').replace( /\w\w/g, ' ').trim());
|
|
505
|
-
});
|
|
443
|
+
//console.log( 'loadedPromise elements', elements );
|
|
506
444
|
|
|
507
|
-
|
|
508
|
-
document.body.querySelector('script[name="${elementName}]"')?.remove();
|
|
509
|
-
},0);
|
|
445
|
+
const klass = customElements.get( element );
|
|
510
446
|
|
|
511
|
-
|
|
512
|
-
|
|
447
|
+
elements.forEach((node: HTMLElement) => {
|
|
448
|
+
//console.log( 'add', klass!.name, 'to', node );
|
|
449
|
+
DC.add(node, klass!.name, new klass!(node));
|
|
513
450
|
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
451
|
+
//@ts-ignore
|
|
452
|
+
const new_mc = node
|
|
453
|
+
.getAttribute( '_mc' )
|
|
454
|
+
.split(' ')
|
|
455
|
+
.filter( (name) => name !== element && name !== '' )
|
|
456
|
+
.join(' ');
|
|
457
|
+
|
|
458
|
+
//@ts-ignore
|
|
459
|
+
node.setAttribute(
|
|
460
|
+
'_mc',
|
|
461
|
+
//@ts-ignore
|
|
462
|
+
new_mc
|
|
463
|
+
)
|
|
464
|
+
});
|
|
465
|
+
|
|
466
|
+
document.head.querySelector('script[data-name="${elementName}]"')?.remove();
|
|
467
|
+
});
|
|
468
|
+
|
|
469
|
+
addListener( se, 'load', (ev) => {
|
|
470
|
+
loadingMCs.delete( element );
|
|
471
|
+
});
|
|
472
|
+
|
|
473
|
+
addListener( se, 'error', (ev) => {
|
|
474
|
+
console.error('could not load MC code from', fileName);
|
|
475
|
+
});
|
|
476
|
+
|
|
477
|
+
document.head.append(se);
|
|
517
478
|
}
|
|
518
479
|
|
|
519
|
-
function
|
|
480
|
+
function loadUndefinedMCs() {
|
|
520
481
|
|
|
521
|
-
// load unresolved custom
|
|
522
|
-
[ ...document.querySelectorAll(':not(:defined)') ]
|
|
482
|
+
// load unresolved custom elements
|
|
483
|
+
[ ...document.querySelectorAll(':not(:defined)') ]
|
|
523
484
|
.filter( (element) => !!element
|
|
524
485
|
&& !customElements.get(element.tagName.toLowerCase()) // not in CustomElementsRegistry
|
|
525
|
-
&& !
|
|
486
|
+
&& !loadingMCs.has(element.tagName.toLowerCase()) // not in loading list
|
|
526
487
|
)
|
|
527
488
|
.forEach((el) => {
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
const se: HTMLScriptElement = makeLoadScript( elementName );
|
|
532
|
-
|
|
533
|
-
addListener( se, 'load', () => {
|
|
534
|
-
CEs.set( elementName, customElements.get(el.tagName.toLowerCase()) );
|
|
535
|
-
});
|
|
536
|
-
|
|
537
|
-
CEs.set( elementName, 'loading');
|
|
538
|
-
document.head.append(se);
|
|
539
|
-
|
|
540
|
-
// instanciation of the micro component will be handled by the browser automatically
|
|
541
|
-
// module code must define the micro component class and add it to the customElementRegistry
|
|
489
|
+
//console.log( 'detected CE', el.tagName.toLowerCase() );
|
|
490
|
+
makeLoadScript( el.tagName.toLowerCase() );
|
|
542
491
|
});
|
|
543
492
|
|
|
544
|
-
|
|
493
|
+
// load unresolved MCs defined in _mc attribute
|
|
494
|
+
[ ...document.querySelectorAll('[_mc]:not([_mc=""]') ]
|
|
545
495
|
.filter( (element) => !!element )
|
|
546
496
|
.forEach((el) => {
|
|
547
|
-
const
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
elementsToBeLoaded?.forEach( elementName => {
|
|
552
|
-
const se: HTMLScriptElement = makeLoadScript( elementName );
|
|
553
|
-
|
|
554
|
-
addListener( se, 'load', () => onLoadCallback( document.head.querySelector(`script[name="${elementName}"]`) as HTMLScriptElement) );
|
|
555
|
-
|
|
556
|
-
MCs.set( elementName, 'loading');
|
|
557
|
-
|
|
558
|
-
document.head.append(se);
|
|
559
|
-
});
|
|
560
|
-
|
|
561
|
-
// loading MC components already have callbacks attached
|
|
562
|
-
const elementsAlreadyLoaded = elements.filter( m => MCs.has( m ) && !MCs.get( m )!.length);
|
|
563
|
-
|
|
564
|
-
// MCs that are already loaded will trigger the onLoadCallback manually
|
|
565
|
-
elementsAlreadyLoaded?.forEach( elementName => {
|
|
566
|
-
setTimeout( ()=>{
|
|
567
|
-
//console.log('attaching', elementName, (autoload as any).state.MCs.get(elementName));
|
|
568
|
-
DC.add(el, elementName, new ( (autoload as any).state.MCs.get(elementName) as any)(el)); // add instance to DOM
|
|
569
|
-
|
|
570
|
-
const newAttribute = (el as any).getAttribute('_mc')
|
|
571
|
-
.replace('${elementName}', '')
|
|
572
|
-
.replace( /\w\w/g, ' ')
|
|
573
|
-
.trim() || '_mc';
|
|
574
|
-
|
|
575
|
-
(el as any).setAttribute('_mc', ); // set new "_mc" attribute
|
|
576
|
-
}, 5);
|
|
497
|
+
const _mc = el.getAttribute('_mc')?.split(' ').filter( name => name !== '' );
|
|
498
|
+
_mc?.forEach( dc => {
|
|
499
|
+
//console.log( 'detected DC', dc );
|
|
500
|
+
makeLoadScript( dc );
|
|
577
501
|
});
|
|
578
502
|
});
|
|
579
503
|
}
|
|
@@ -590,11 +514,11 @@ function autoload(enable: boolean = true): boolean {
|
|
|
590
514
|
}
|
|
591
515
|
|
|
592
516
|
autoloadEnabled = enable;
|
|
593
|
-
observer = new MutationObserver(
|
|
517
|
+
observer = new MutationObserver(loadUndefinedMCs);
|
|
594
518
|
|
|
595
519
|
setTimeout(() => {
|
|
596
520
|
observer!.observe(document.body, { childList: true, subtree: true });
|
|
597
|
-
|
|
521
|
+
loadUndefinedMCs();
|
|
598
522
|
}, 5);
|
|
599
523
|
|
|
600
524
|
(window as any).autoload = (window as any).autoload || autoload;
|
|
@@ -602,7 +526,7 @@ function autoload(enable: boolean = true): boolean {
|
|
|
602
526
|
return autoloadEnabled;
|
|
603
527
|
}
|
|
604
528
|
|
|
605
|
-
(autoload as LooseObject).state = {
|
|
529
|
+
(autoload as LooseObject).state = { loadingMCs };
|
|
606
530
|
|
|
607
531
|
export { addListener, removeListener, McBase, MC, DC, McEvent, autoload };
|
|
608
532
|
|