@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.
Files changed (233) hide show
  1. package/assets/documentation/MC.md +0 -1
  2. package/dist/MC.d.ts +3 -3
  3. package/dist/MC.d.ts.map +1 -1
  4. package/dist/MC.js +43 -74
  5. package/dist/MC.min.js +43 -74
  6. package/dist/MC.ts +67 -143
  7. package/dist/elements.d.ts +1 -1
  8. package/dist/elements.d.ts.map +1 -1
  9. package/dist/elements.js +16 -2
  10. package/dist/elements.min.js +1 -1
  11. package/dist/elements.ts +33 -3
  12. package/dist/formValues.min.js +1 -1
  13. package/dist/microcomponents.min.js +1 -1
  14. package/dist/observables.d.ts.map +1 -1
  15. package/dist/observables.js +40 -47
  16. package/dist/observables.min.js +1 -1
  17. package/dist/observables.ts +54 -59
  18. package/dist/selectors.d.ts +2 -4
  19. package/dist/selectors.d.ts.map +1 -1
  20. package/dist/selectors.js +2 -214
  21. package/dist/selectors.min.js +1 -1
  22. package/dist/selectors.ts +2 -367
  23. package/package.json +6 -5
  24. package/public/MC.d.ts +3 -3
  25. package/public/MC.d.ts.map +1 -1
  26. package/public/MC.js +43 -74
  27. package/public/MC.js.map +1 -1
  28. package/public/MC.min.js +43 -74
  29. package/public/MC.ts +67 -143
  30. package/public/documentation/MC.md +0 -1
  31. package/public/elements.d.ts +1 -1
  32. package/public/elements.d.ts.map +1 -1
  33. package/public/elements.js +16 -2
  34. package/public/elements.js.map +1 -1
  35. package/public/elements.min.js +1 -1
  36. package/public/elements.ts +33 -3
  37. package/public/formValues.min.js +1 -1
  38. package/public/microcomponents.min.js +1 -1
  39. package/public/observables.d.ts.map +1 -1
  40. package/public/observables.js +40 -47
  41. package/public/observables.js.map +1 -1
  42. package/public/observables.min.js +1 -1
  43. package/public/observables.ts +54 -59
  44. package/public/selectors.d.ts +2 -4
  45. package/public/selectors.d.ts.map +1 -1
  46. package/public/selectors.js +2 -214
  47. package/public/selectors.js.map +1 -1
  48. package/public/selectors.min.js +1 -1
  49. package/public/selectors.ts +2 -367
  50. package/public/src/MC.d.ts +36 -0
  51. package/public/src/MC.d.ts.map +1 -0
  52. package/public/src/MC.js +348 -0
  53. package/public/src/MC.js.map +1 -0
  54. package/public/src/MC.ts +67 -143
  55. package/public/src/McEvent.d.ts +15 -0
  56. package/public/src/McEvent.d.ts.map +1 -0
  57. package/public/src/McEvent.js +71 -0
  58. package/public/src/elements.d.ts +5 -0
  59. package/public/src/elements.d.ts.map +1 -0
  60. package/public/src/elements.js +62 -0
  61. package/public/src/elements.js.map +1 -0
  62. package/public/src/elements.ts +33 -3
  63. package/public/src/formValues.d.ts +3 -0
  64. package/public/src/formValues.d.ts.map +1 -0
  65. package/public/src/formValues.js +162 -0
  66. package/public/src/helpers.d.ts +14 -0
  67. package/public/src/helpers.d.ts.map +1 -0
  68. package/public/src/helpers.js +113 -0
  69. package/public/src/microcomponents.d.ts +7 -0
  70. package/public/src/microcomponents.d.ts.map +1 -0
  71. package/public/src/microcomponents.js +8 -0
  72. package/public/src/observables.d.ts +11 -0
  73. package/public/src/observables.d.ts.map +1 -0
  74. package/public/src/observables.js +242 -0
  75. package/public/src/observables.js.map +1 -0
  76. package/public/src/observables.ts +54 -59
  77. package/public/src/selectors.d.ts +106 -0
  78. package/public/src/selectors.d.ts.map +1 -0
  79. package/public/src/selectors.js +759 -0
  80. package/public/src/selectors.js.map +1 -0
  81. package/public/src/selectors.ts +2 -367
  82. package/public/src/test/grandparent.css +11 -0
  83. package/public/src/test/test/child.d.ts +2 -0
  84. package/public/src/test/test/child.d.ts.map +1 -0
  85. package/public/src/test/test/child.js +15 -0
  86. package/public/src/test/test/child.js.map +1 -0
  87. package/public/src/test/test/child.ts +21 -0
  88. package/public/src/test/test/grandchild.d.ts +2 -0
  89. package/public/src/test/test/grandchild.d.ts.map +1 -0
  90. package/public/src/test/test/grandchild.js +15 -0
  91. package/public/src/test/test/grandchild.js.map +1 -0
  92. package/public/src/test/test/grandchild.ts +21 -0
  93. package/public/src/test/test/grandparent.d.ts +2 -0
  94. package/public/src/test/test/grandparent.d.ts.map +1 -0
  95. package/public/src/test/test/grandparent.js +1 -0
  96. package/public/src/test/test/grandparent.js.map +1 -0
  97. package/public/src/test/test/grandparent.ts +21 -0
  98. package/public/src/test/test/greatgrandchild.d.ts +2 -0
  99. package/public/src/test/test/greatgrandchild.d.ts.map +1 -0
  100. package/public/src/test/test/greatgrandchild.js +29 -0
  101. package/public/src/test/test/greatgrandchild.js.map +1 -0
  102. package/public/src/test/test/greatgrandchild.ts +42 -0
  103. package/public/src/test/test/parent.d.ts +2 -0
  104. package/public/src/test/test/parent.d.ts.map +1 -0
  105. package/public/src/test/test/parent.js +15 -0
  106. package/public/src/test/test/parent.js.map +1 -0
  107. package/public/src/test/test/parent.ts +21 -0
  108. package/public/src/test/test/testform.d.ts +2 -0
  109. package/public/src/test/test/testform.d.ts.map +1 -0
  110. package/public/src/test/test/testform.js +1 -0
  111. package/public/src/test/test/testform.js.map +1 -0
  112. package/public/src/test/test/testform.ts +155 -0
  113. package/public/src/test/test/testfunction.d.ts +3 -0
  114. package/public/src/test/test/testfunction.d.ts.map +1 -0
  115. package/public/src/test/test/testfunction.js +7 -0
  116. package/public/src/test/test/testfunction.js.map +1 -0
  117. package/public/src/test/test/testfunction.ts +12 -0
  118. package/public/src/test/test/testmc.d.ts +3 -0
  119. package/public/src/test/test/testmc.d.ts.map +1 -0
  120. package/public/src/test/test/testmc.js +10 -0
  121. package/public/src/test/test/testmc.js.map +1 -0
  122. package/public/src/test/test/testmc.ts +16 -0
  123. package/public/src/test/test/testsimpleclass.d.ts +3 -0
  124. package/public/src/test/test/testsimpleclass.d.ts.map +1 -0
  125. package/public/src/test/test/testsimpleclass.js +9 -0
  126. package/public/src/test/test/testsimpleclass.js.map +1 -0
  127. package/public/src/test/test/testsimpleclass.ts +15 -0
  128. package/public/src/test/test.d.ts +2 -0
  129. package/public/src/test/test.d.ts.map +1 -0
  130. package/public/src/test/test.js +79 -0
  131. package/public/src/test/test.js.map +1 -0
  132. package/public/src/test/test.ts +188 -0
  133. package/public/src/test/testform.css +47 -0
  134. package/public/src/test/testform.html +56 -0
  135. package/public/src/test/testform.json +27 -0
  136. package/public/test/MC.d.ts +3 -3
  137. package/public/test/MC.d.ts.map +1 -1
  138. package/public/test/MC.js +43 -74
  139. package/public/test/MC.min.js +485 -0
  140. package/public/test/MC.ts +67 -143
  141. package/public/test/elements.d.ts +1 -1
  142. package/public/test/elements.d.ts.map +1 -1
  143. package/public/test/elements.js +16 -2
  144. package/public/test/elements.min.js +1 -0
  145. package/public/test/elements.ts +33 -3
  146. package/public/test/formValues.min.js +1 -0
  147. package/public/test/grandparent.css +1 -3
  148. package/public/test/microcomponents.min.js +1 -1
  149. package/public/test/observables.d.ts.map +1 -1
  150. package/public/test/observables.js +40 -47
  151. package/public/test/observables.min.js +1 -0
  152. package/public/test/observables.ts +54 -59
  153. package/public/test/selectors.d.ts +2 -4
  154. package/public/test/selectors.d.ts.map +1 -1
  155. package/public/test/selectors.js +2 -214
  156. package/public/test/selectors.min.js +1 -0
  157. package/public/test/selectors.ts +2 -367
  158. package/public/test/test/child.ts +21 -0
  159. package/public/test/test/grandchild.ts +21 -0
  160. package/public/test/test/grandparent.js +1 -1
  161. package/public/test/test/grandparent.ts +21 -0
  162. package/public/test/test/greatgrandchild.ts +42 -0
  163. package/public/test/test/parent.ts +21 -0
  164. package/public/test/test/testform.js +1 -1
  165. package/public/test/test/testform.js.map +1 -1
  166. package/public/test/test/testform.ts +155 -0
  167. package/public/test/test/testfunction.d.ts +3 -0
  168. package/public/test/test/testfunction.d.ts.map +1 -0
  169. package/public/test/test/testfunction.js +7 -0
  170. package/public/test/test/testfunction.js.map +1 -0
  171. package/public/test/test/testfunction.ts +12 -0
  172. package/public/test/test/testmc.d.ts +2 -5
  173. package/public/test/test/testmc.d.ts.map +1 -1
  174. package/public/test/test/testmc.js +4 -4
  175. package/public/test/test/testmc.js.map +1 -1
  176. package/public/test/test/testmc.ts +16 -0
  177. package/public/test/test/testsimpleclass.d.ts +3 -0
  178. package/public/test/test/testsimpleclass.d.ts.map +1 -0
  179. package/public/test/test/testsimpleclass.js +9 -0
  180. package/public/test/test/testsimpleclass.js.map +1 -0
  181. package/public/test/test/testsimpleclass.ts +15 -0
  182. package/public/test/test.js +0 -2
  183. package/public/test/test.js.map +1 -1
  184. package/public/test/test.ts +188 -0
  185. package/public/test/testform.css +47 -0
  186. package/public/test/testform.html +56 -0
  187. package/public/test/testform.json +3 -3
  188. package/public/typedoc/assets/navigation.js +1 -1
  189. package/public/typedoc/assets/search.js +1 -1
  190. package/public/typedoc/classes/MC.DC.html +5 -5
  191. package/public/typedoc/classes/MC.MC.html +5 -5
  192. package/public/typedoc/classes/MC.McBase.html +4 -3
  193. package/public/typedoc/classes/MC.McEvent.html +2 -2
  194. package/public/typedoc/functions/MC.addListener.html +1 -1
  195. package/public/typedoc/functions/MC.autoload.html +1 -1
  196. package/public/typedoc/functions/MC.removeListener.html +1 -1
  197. package/public/typedoc/functions/elements.defineCE.html +1 -1
  198. package/public/typedoc/functions/elements.getCE.html +1 -1
  199. package/public/typedoc/functions/formValues.formValues.html +1 -1
  200. package/public/typedoc/functions/observables.observe.html +1 -1
  201. package/public/typedoc/functions/selectors._d.html +1 -0
  202. package/public/typedoc/functions/selectors._t.html +1 -0
  203. package/public/typedoc/interfaces/MC.HTMLMcElement.html +2 -2
  204. package/public/typedoc/interfaces/selectors.DSelector.html +48 -0
  205. package/public/typedoc/interfaces/selectors.TSelector.html +34 -0
  206. package/public/typedoc/modules/MC.html +1 -1
  207. package/public/typedoc/modules/elements.html +1 -1
  208. package/public/typedoc/modules/formValues.html +1 -1
  209. package/public/typedoc/modules/observables.html +1 -1
  210. package/public/typedoc/modules/selectors.html +7 -0
  211. package/public/typedoc/modules.html +1 -0
  212. package/public/typedoc/types/observables.Observable.html +1 -1
  213. package/public/typedoc/types/selectors.selection.html +1 -0
  214. package/public/typedoc/types/selectors.singleSelector.html +1 -0
  215. package/src/MC.ts +67 -143
  216. package/src/elements.ts +33 -3
  217. package/src/observables.ts +54 -59
  218. package/src/selectors.ts +2 -367
  219. package/src/test/test/testform.ts +7 -3
  220. package/src/test/test/testfunction.ts +12 -0
  221. package/src/test/test/testmc.ts +13 -9
  222. package/src/test/test/testsimpleclass.ts +15 -0
  223. package/src/test/test.ts +0 -12
  224. package/tasks.md +36 -0
  225. package/typedoc.json +1 -1
  226. package/public/test/MC.js.map +0 -1
  227. package/public/test/elements.js.map +0 -1
  228. package/public/test/observables.js.map +0 -1
  229. package/public/test/selectors.js.map +0 -1
  230. /package/public/{test → src}/McEvent.js.map +0 -0
  231. /package/public/{test → src}/formValues.js.map +0 -0
  232. /package/public/{test → src}/helpers.js.map +0 -0
  233. /package/public/{test → src}/microcomponents.js.map +0 -0
@@ -480,7 +480,6 @@ import { DC, LooseObject } from '../microcomponents.js';
480
480
  export default class myMC extends DC {
481
481
  constructor(target: HTMLElement) {
482
482
  super(target);
483
- delete this._mc; // not needed
484
483
  }
485
484
 
486
485
  oneInit() {
package/dist/MC.d.ts CHANGED
@@ -7,20 +7,20 @@ declare function addListener(domNode: Node, eventName: string, handler: EventLis
7
7
  declare function removeListener(domNode: Node, eventName: string, handler: EventListenerOrEventListenerObject | null): void;
8
8
  declare function trigger(target: HTMLElement, ev: McEvent | string, data?: any, bubble?: string): void;
9
9
  declare class McBase {
10
- #private;
10
+ private _target;
11
+ private __mc;
11
12
  constructor(target?: {
12
13
  [key: string]: any;
13
14
  }, debug?: boolean);
14
15
  get target(): any;
16
+ get _mc(): any;
15
17
  }
16
18
  declare class MC extends McBase {
17
- _mc?: LooseObject;
18
19
  constructor(target?: any);
19
20
  static trigger: typeof trigger;
20
21
  trigger(ev: McEvent | string, data?: any, bubble?: string): this | undefined;
21
22
  }
22
23
  declare class DC extends McBase {
23
- _mc?: LooseObject;
24
24
  constructor(target: HTMLElement, debug?: boolean);
25
25
  static add: Function;
26
26
  static remove: Function;
package/dist/MC.d.ts.map CHANGED
@@ -1 +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;;gBAGC,MAAM,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,EAAE,KAAK,GAAE,OAAe;IAWnE,IAAI,MAAM,IAAI,GAAG,CAEhB;CACD;AAED,cAAM,EAAG,SAAQ,MAAM;IACtB,GAAG,CAAC,EAAE,WAAW,CAAM;gBAEX,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;IACtB,GAAG,CAAC,EAAE,WAAW,CAAM;gBAEX,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;AA6KD,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"}
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/dist/MC.js CHANGED
@@ -166,19 +166,22 @@ function bubbleEvent(target, ev) {
166
166
  }
167
167
  }
168
168
  class McBase {
169
- #target;
169
+ _target;
170
+ __mc = {};
170
171
  constructor(target, debug = false) {
171
172
  let that = this, element = that;
172
- this.#target = new WeakRef(target || {});
173
+ this._target = new WeakRef(target || {});
173
174
  init(element);
174
175
  autoAttachListeners(element);
175
176
  }
176
177
  get target() {
177
- return this.#target.deref();
178
+ return this._target.deref();
179
+ }
180
+ get _mc() {
181
+ return this.__mc;
178
182
  }
179
183
  }
180
184
  class MC extends McBase {
181
- _mc = {};
182
185
  constructor(target) {
183
186
  super(target);
184
187
  }
@@ -225,7 +228,6 @@ class MC extends McBase {
225
228
  }
226
229
  }
227
230
  class DC extends McBase {
228
- _mc = {};
229
231
  constructor(target, debug = false) {
230
232
  super(target);
231
233
  }
@@ -267,93 +269,60 @@ class DC extends McBase {
267
269
  return getMicroComponents([...myDomElements], search);
268
270
  }
269
271
  }
270
- const CEs = new Map();
271
- const MCs = new Map();
272
+ const loadingMCs = new Set();
272
273
  function makeLoadScript(element) {
274
+ if (loadingMCs.has(element))
275
+ return;
276
+ loadingMCs.add(element);
273
277
  const fileName = './' + element.split('-').join('/') + '.js';
274
278
  const se = document.createElement('script');
275
279
  se.setAttribute('src', fileName);
276
280
  se.setAttribute('blocking', 'render');
277
281
  se.async = true;
278
282
  se.setAttribute('type', 'module');
279
- se.setAttribute('name', element);
283
+ se.setAttribute('data-name', element);
280
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
+ });
281
304
  addListener(se, 'load', (ev) => {
282
- se.removeAttribute('loading');
283
- se.setAttribute('loaded', '');
305
+ loadingMCs.delete(element);
284
306
  });
285
307
  addListener(se, 'error', (ev) => {
286
- console.error('could not load Custom Element code from', fileName);
308
+ console.error('could not load MC code from', fileName);
287
309
  });
288
- return se;
310
+ document.head.append(se);
289
311
  }
290
- function onLoadCallback(script) {
291
- setTimeout(function () {
292
- const importFileName = script.getAttribute('src');
293
- const elementName = script.getAttribute('name');
294
- const se = document.createElement('script');
295
- se.async = true;
296
- se.setAttribute('type', 'module');
297
- const code = `
298
-
299
- import _ from "${importFileName}";
300
- import { DC } from "./microcomponents.js";
301
-
302
- const elements = Array.from(document.querySelectorAll('[_mc*="${elementName}"]')).filter( element => element instanceof HTMLElement );
303
-
304
- elements.forEach((element) => {
305
- // add class to MCs repository
306
- autoload.state.MCs.set( '${elementName}', _ );
307
- // add instance to HTMLElement
308
- DC.add(element, _.name, new _(element));
309
- // remove instance name from elements "_mc" attribute
310
- element.setAttribute('_mc', element.getAttribute('_mc').replace('${elementName}', '').replace( /\w\w/g, ' ').trim());
311
- });
312
-
313
- setTimeout( () => {
314
- document.body.querySelector('script[name="${elementName}]"')?.remove();
315
- },0);
316
-
317
- `;
318
- se.innerHTML = code;
319
- document.body.append(se);
320
- }, 0);
321
- }
322
- function loadUndefinedMicroComponents() {
312
+ function loadUndefinedMCs() {
323
313
  [...document.querySelectorAll(':not(:defined)')]
324
314
  .filter((element) => !!element
325
315
  && !customElements.get(element.tagName.toLowerCase())
326
- && !CEs.has(element.tagName.toLowerCase()))
316
+ && !loadingMCs.has(element.tagName.toLowerCase()))
327
317
  .forEach((el) => {
328
- const elementName = el.tagName.toLowerCase(), fileName = './' + elementName.split('-').join('/') + '.js';
329
- const se = makeLoadScript(elementName);
330
- addListener(se, 'load', () => {
331
- CEs.set(elementName, customElements.get(el.tagName.toLowerCase()));
332
- });
333
- CEs.set(elementName, 'loading');
334
- document.head.append(se);
318
+ makeLoadScript(el.tagName.toLowerCase());
335
319
  });
336
320
  [...document.querySelectorAll('[_mc]:not([_mc=""]')]
337
321
  .filter((element) => !!element)
338
322
  .forEach((el) => {
339
- const elements = el.getAttribute('_mc')?.split(' ').filter(m => !!m) || [];
340
- const elementsToBeLoaded = elements.filter(m => !MCs.has(m));
341
- elementsToBeLoaded?.forEach(elementName => {
342
- const se = makeLoadScript(elementName);
343
- addListener(se, 'load', () => onLoadCallback(document.head.querySelector(`script[name="${elementName}"]`)));
344
- MCs.set(elementName, 'loading');
345
- document.head.append(se);
346
- });
347
- const elementsAlreadyLoaded = elements.filter(m => MCs.has(m) && !MCs.get(m).length);
348
- elementsAlreadyLoaded?.forEach(elementName => {
349
- setTimeout(() => {
350
- DC.add(el, elementName, new (autoload.state.MCs.get(elementName))(el));
351
- const newAttribute = el.getAttribute('_mc')
352
- .replace('${elementName}', '')
353
- .replace(/\w\w/g, ' ')
354
- .trim() || '_mc';
355
- el.setAttribute('_mc');
356
- }, 5);
323
+ const _mc = el.getAttribute('_mc')?.split(' ').filter(name => name !== '');
324
+ _mc?.forEach(dc => {
325
+ makeLoadScript(dc);
357
326
  });
358
327
  });
359
328
  }
@@ -366,14 +335,14 @@ function autoload(enable = true) {
366
335
  return autoloadEnabled;
367
336
  }
368
337
  autoloadEnabled = enable;
369
- observer = new MutationObserver(loadUndefinedMicroComponents);
338
+ observer = new MutationObserver(loadUndefinedMCs);
370
339
  setTimeout(() => {
371
340
  observer.observe(document.body, { childList: true, subtree: true });
372
- loadUndefinedMicroComponents();
341
+ loadUndefinedMCs();
373
342
  }, 5);
374
343
  window.autoload = window.autoload || autoload;
375
344
  return autoloadEnabled;
376
345
  }
377
- autoload.state = { CEs, MCs };
346
+ autoload.state = { loadingMCs };
378
347
  export { addListener, removeListener, McBase, MC, DC, McEvent, autoload };
379
348
  //# sourceMappingURL=MC.js.map
package/dist/MC.min.js CHANGED
@@ -299,19 +299,22 @@ function bubbleEvent(target, ev) {
299
299
  }
300
300
  }
301
301
  class McBase {
302
- #target;
302
+ _target;
303
+ __mc = {};
303
304
  constructor(target, debug = false) {
304
305
  let that = this, element = that;
305
- this.#target = new WeakRef(target || {});
306
+ this._target = new WeakRef(target || {});
306
307
  init(element);
307
308
  autoAttachListeners(element);
308
309
  }
309
310
  get target() {
310
- return this.#target.deref();
311
+ return this._target.deref();
312
+ }
313
+ get _mc() {
314
+ return this.__mc;
311
315
  }
312
316
  }
313
317
  class MC extends McBase {
314
- _mc = {};
315
318
  constructor(target) {
316
319
  super(target);
317
320
  }
@@ -358,7 +361,6 @@ class MC extends McBase {
358
361
  }
359
362
  }
360
363
  class DC extends McBase {
361
- _mc = {};
362
364
  constructor(target, debug = false) {
363
365
  super(target);
364
366
  }
@@ -400,93 +402,60 @@ class DC extends McBase {
400
402
  return MC_getMicroComponents([...myDomElements], search);
401
403
  }
402
404
  }
403
- const CEs = new Map();
404
- const MCs = new Map();
405
+ const loadingMCs = new Set();
405
406
  function makeLoadScript(element) {
407
+ if (loadingMCs.has(element))
408
+ return;
409
+ loadingMCs.add(element);
406
410
  const fileName = './' + element.split('-').join('/') + '.js';
407
411
  const se = document.createElement('script');
408
412
  se.setAttribute('src', fileName);
409
413
  se.setAttribute('blocking', 'render');
410
414
  se.async = true;
411
415
  se.setAttribute('type', 'module');
412
- se.setAttribute('name', element);
416
+ se.setAttribute('data-name', element);
413
417
  se.setAttribute('loading', '');
418
+ const loadedPromise = customElements.whenDefined(element);
419
+ loadedPromise.then(() => {
420
+ const elements = Array
421
+ .from(document.querySelectorAll(`[_mc*="${element}"]`))
422
+ .filter(element => element instanceof HTMLElement);
423
+ if (elements.length === 0)
424
+ return;
425
+ const klass = customElements.get(element);
426
+ elements.forEach((node) => {
427
+ DC.add(node, klass.name, new klass(node));
428
+ const new_mc = node
429
+ .getAttribute('_mc')
430
+ .split(' ')
431
+ .filter((name) => name !== element && name !== '')
432
+ .join(' ');
433
+ node.setAttribute('_mc', new_mc);
434
+ });
435
+ document.head.querySelector('script[data-name="${elementName}]"')?.remove();
436
+ });
414
437
  addListener(se, 'load', (ev) => {
415
- se.removeAttribute('loading');
416
- se.setAttribute('loaded', '');
438
+ loadingMCs.delete(element);
417
439
  });
418
440
  addListener(se, 'error', (ev) => {
419
- console.error('could not load Custom Element code from', fileName);
441
+ console.error('could not load MC code from', fileName);
420
442
  });
421
- return se;
422
- }
423
- function onLoadCallback(script) {
424
- setTimeout(function () {
425
- const importFileName = script.getAttribute('src');
426
- const elementName = script.getAttribute('name');
427
- const se = document.createElement('script');
428
- se.async = true;
429
- se.setAttribute('type', 'module');
430
- const code = `
431
-
432
- import _ from "${importFileName}";
433
- import { DC } from "./microcomponents.js";
434
-
435
- const elements = Array.from(document.querySelectorAll('[_mc*="${elementName}"]')).filter( element => element instanceof HTMLElement );
436
-
437
- elements.forEach((element) => {
438
- // add class to MCs repository
439
- autoload.state.MCs.set( '${elementName}', _ );
440
- // add instance to HTMLElement
441
- DC.add(element, _.name, new _(element));
442
- // remove instance name from elements "_mc" attribute
443
- element.setAttribute('_mc', element.getAttribute('_mc').replace('${elementName}', '').replace( /\w\w/g, ' ').trim());
444
- });
445
-
446
- setTimeout( () => {
447
- document.body.querySelector('script[name="${elementName}]"')?.remove();
448
- },0);
449
-
450
- `;
451
- se.innerHTML = code;
452
- document.body.append(se);
453
- }, 0);
443
+ document.head.append(se);
454
444
  }
455
- function loadUndefinedMicroComponents() {
445
+ function loadUndefinedMCs() {
456
446
  [...document.querySelectorAll(':not(:defined)')]
457
447
  .filter((element) => !!element
458
448
  && !customElements.get(element.tagName.toLowerCase())
459
- && !CEs.has(element.tagName.toLowerCase()))
449
+ && !loadingMCs.has(element.tagName.toLowerCase()))
460
450
  .forEach((el) => {
461
- const elementName = el.tagName.toLowerCase(), fileName = './' + elementName.split('-').join('/') + '.js';
462
- const se = makeLoadScript(elementName);
463
- addListener(se, 'load', () => {
464
- CEs.set(elementName, customElements.get(el.tagName.toLowerCase()));
465
- });
466
- CEs.set(elementName, 'loading');
467
- document.head.append(se);
451
+ makeLoadScript(el.tagName.toLowerCase());
468
452
  });
469
453
  [...document.querySelectorAll('[_mc]:not([_mc=""]')]
470
454
  .filter((element) => !!element)
471
455
  .forEach((el) => {
472
- const elements = el.getAttribute('_mc')?.split(' ').filter(m => !!m) || [];
473
- const elementsToBeLoaded = elements.filter(m => !MCs.has(m));
474
- elementsToBeLoaded?.forEach(elementName => {
475
- const se = makeLoadScript(elementName);
476
- addListener(se, 'load', () => onLoadCallback(document.head.querySelector(`script[name="${elementName}"]`)));
477
- MCs.set(elementName, 'loading');
478
- document.head.append(se);
479
- });
480
- const elementsAlreadyLoaded = elements.filter(m => MCs.has(m) && !MCs.get(m).length);
481
- elementsAlreadyLoaded?.forEach(elementName => {
482
- setTimeout(() => {
483
- DC.add(el, elementName, new (autoload.state.MCs.get(elementName))(el));
484
- const newAttribute = el.getAttribute('_mc')
485
- .replace('${elementName}', '')
486
- .replace(/\w\w/g, ' ')
487
- .trim() || '_mc';
488
- el.setAttribute('_mc');
489
- }, 5);
456
+ const _mc = el.getAttribute('_mc')?.split(' ').filter(name => name !== '');
457
+ _mc?.forEach(dc => {
458
+ makeLoadScript(dc);
490
459
  });
491
460
  });
492
461
  }
@@ -499,15 +468,15 @@ function autoload(enable = true) {
499
468
  return autoloadEnabled;
500
469
  }
501
470
  autoloadEnabled = enable;
502
- observer = new MutationObserver(loadUndefinedMicroComponents);
471
+ observer = new MutationObserver(loadUndefinedMCs);
503
472
  setTimeout(() => {
504
473
  observer.observe(document.body, { childList: true, subtree: true });
505
- loadUndefinedMicroComponents();
474
+ loadUndefinedMCs();
506
475
  }, 5);
507
476
  window.autoload = window.autoload || autoload;
508
477
  return autoloadEnabled;
509
478
  }
510
- autoload.state = { CEs, MCs };
479
+ autoload.state = { loadingMCs };
511
480
 
512
481
 
513
482
  /******/ return __webpack_exports__;