@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
@@ -0,0 +1,188 @@
1
+ import {
2
+ LooseObject,
3
+ DC,
4
+ McEvent,
5
+ defineCE,
6
+ getCE,
7
+ observe,
8
+ Observable,
9
+ } from '../microcomponents.js';
10
+
11
+ class Translator extends DC {
12
+ #translations: LooseObject = {};
13
+
14
+ Language: unknown = 'en';
15
+ Translation: unknown = {};
16
+
17
+ constructor(
18
+ target: HTMLElement | ShadowRoot | DocumentFragment,
19
+ translations: LooseObject,
20
+ translationTargetObject: HTMLElement
21
+ ) {
22
+ super(target as HTMLElement);
23
+ let that = this; // minifier help
24
+
25
+ // state
26
+ that.Language = 'en';
27
+ that.Translation = {};
28
+
29
+ observe(that);
30
+
31
+ // setup
32
+ that.#translations = translations;
33
+
34
+ // on language change switch translation object
35
+ (that.Language as Observable).observe((lang) => {
36
+ if (that.#translations.hasOwnProperty(lang)) {
37
+ that.Translation = { lang: that.#translations[lang] }; // set translation
38
+ }
39
+ });
40
+
41
+ (that.Translation as Observable).bind(translationTargetObject);
42
+
43
+ that.target.setAttribute('language', 'en');
44
+
45
+ (that.Language as Observable).notify();
46
+ }
47
+
48
+ onAttributeChanged(ev: McEvent) {
49
+ if (!ev.data.newValue) return;
50
+ switch (ev.data.name) {
51
+ case 'language':
52
+ this.Language = ev.data.newValue;
53
+ break;
54
+ }
55
+ }
56
+ }
57
+
58
+ defineCE(
59
+ // equivalent to custom element registry .define()
60
+ 'my-tag',
61
+ class MyTag extends DC {
62
+ #template: string = '<button>{lang.click} {counter}</button>';
63
+
64
+ #languages = {
65
+ en: {
66
+ click: 'click me',
67
+ },
68
+ de: {
69
+ click: 'klick mich',
70
+ },
71
+ };
72
+
73
+ Dom: LooseObject = {};
74
+
75
+ constructor(target: HTMLElement) {
76
+ super(target);
77
+
78
+ let that = this; // minifier help
79
+
80
+ // render
81
+ target.innerHTML = this.#template;
82
+
83
+ // add translator
84
+ DC.add(
85
+ target,
86
+ 'translator',
87
+ new Translator(target, that.#languages, target)
88
+ );
89
+ }
90
+
91
+ oneInit(ev: McEvent) {
92
+ let that = this;
93
+
94
+ // state
95
+ that.Dom = { counter: 0 };
96
+
97
+ // state: convert all props defined so far into observables
98
+ observe(that);
99
+
100
+ // bind Dom to target
101
+ (that.Dom as Observable).bind(that.target);
102
+ }
103
+
104
+ onClick(ev: McEvent) {
105
+ const that = this,
106
+ c = that.Dom.counter++;
107
+ (ev.data as PointerEvent).stopPropagation();
108
+ (that.target as HTMLElement).classList.remove('clicked');
109
+ (that.target as HTMLElement).classList.add(
110
+ that.Dom.counter > 9 ? 'overClicked' : 'clicked'
111
+ );
112
+ }
113
+ },
114
+ ['language']
115
+ );
116
+
117
+ let MyTag: CustomElementConstructor = getCE('my-tag')!,
118
+ fragment = new DocumentFragment();
119
+
120
+ /*
121
+ stress test
122
+ */
123
+
124
+ let start = new Date().getTime(),
125
+ max = 1000;
126
+
127
+ // create 1000 elements
128
+ for (let x = 0; x < max; x++) {
129
+ fragment.append(new MyTag());
130
+ }
131
+
132
+ let end = new Date().getTime();
133
+
134
+ // and put them into the DOM
135
+ document.body.appendChild(fragment);
136
+
137
+ //document.querySelectorAll('my-tag').forEach((e) => e.remove());
138
+
139
+ /*
140
+ console test
141
+ */
142
+
143
+ setTimeout(() => {
144
+ // console.clear();
145
+
146
+ console.log(
147
+ '%c \n\nStress Test:\n\n %cInstancing %s web components (%s classes): %c %s ms.',
148
+ 'font-weight: bold; color: black;',
149
+ 'font-weight: normal;',
150
+ max,
151
+ max * 3,
152
+ 'font-weight: bold; color: blue;',
153
+ end - start
154
+ );
155
+
156
+ //document.body.appendChild(new MyTag());
157
+
158
+ let element = document.querySelector('my-tag');
159
+
160
+ console.log(
161
+ "\n\n%cInspect this tag:%c \n( ...to see the inner structure in the '._mc' property )\n\n %O %c %s",
162
+ 'font-weight: bold;',
163
+ 'font-weight: normal;',
164
+ element,
165
+ 'font-weight: bold;',
166
+ '\n\nLook up code in the debugger: test.js\n'
167
+ );
168
+
169
+ let form = ( document.querySelector('test-testform') as any);
170
+ let formInstance = form._mc.TestTestform;
171
+
172
+ (window as any).form = formInstance;
173
+ console.log(
174
+ "\n\n%cAttached a global variable 'form':%c \n\n %O %c %s %c %s %c %s",
175
+ 'font-weight: bold;',
176
+ 'font-weight: normal;',
177
+ formInstance,
178
+ 'font-weight: bold;',
179
+ '\n\nYou can use it to change input values, e.g. \n\n',
180
+ 'font-weight: normal;',
181
+ ' form.data.textInput="other value"',
182
+ 'font-weight: bold;',
183
+ '\n\nChanges will be reflected in the form contents, same as vice versa.\n'
184
+ );
185
+
186
+ // will trigger the event on all micro components contained in <my-tag>
187
+ DC.trigger(element, 'doSomething');
188
+ }, 1000);
@@ -0,0 +1,47 @@
1
+ legend {
2
+ display: inherit;
3
+ margin: inherit;
4
+ vertical-align: inherit;
5
+ }
6
+
7
+ label {
8
+ display: inline;
9
+ margin-top: 5px;
10
+ margin-left: 5px;
11
+ vertical-align: top;
12
+ width: 10em;
13
+ text-align: right;
14
+ }
15
+
16
+ label::before {
17
+ content: ' ';
18
+ display: block;
19
+ }
20
+
21
+ form input,
22
+ form select,
23
+ form textarea {
24
+ margin-left: 5px;
25
+ margin-top: 0px;
26
+ display: inline;
27
+ }
28
+
29
+ form label + textarea {
30
+ display: inline-block;
31
+ margin-top: 3px;
32
+ }
33
+
34
+ form input + label {
35
+ width: inherit;
36
+ margin-top: 3px;
37
+ text-align: left;
38
+ }
39
+
40
+ body > form {
41
+ display: block;
42
+ }
43
+
44
+ form fieldset {
45
+ border: 1px solid darkslategrey;
46
+ border-radius: 3px;
47
+ }
@@ -0,0 +1,56 @@
1
+ <!-- test form -->
2
+ <fieldset>
3
+ <legend>Inputs</legend>
4
+ <label>text</label><input type="text" name="textInput" value="" />&nbsp;<strong>2wB:&nbsp;</strong>{textInput}
5
+ <label>color</label><input type="color" name="colorInput" value="" />
6
+ <label>date</label><input type="date" name="dateInput" value="" />
7
+ <label>datetime-local</label><input type="datetime-local" name="dtlInput" value="" />
8
+ <label>email</label><input type="email" name="email" value="" />
9
+ <label>file</label><input type="file" name="fileInput" value="" />
10
+ <label>hidden</label><input type="hidden" name="hiddenInput" value="hiddenVal" />
11
+ <label>month</label><input type="month" name="month" value="" />
12
+ <label>number</label><input type="number" name="number" value="" />
13
+ <label>password</label><input type="password" name="passInput" value="" />
14
+ <label>range</label><input type="range" name="rangeInput" value="" />
15
+ <label>search</label><input type="search" name="searchInput" value="" />
16
+ <label>tel</label><input type="tel" name="telInput" value="" />
17
+ <label>time</label><input type="time" name="timeInput" value="" />
18
+ <label>url</label><input type="url" name="urlInput" value="" />
19
+ <label>week</label><input type="week" name="weekInput" value="" />
20
+ </fieldset>
21
+ <fieldset>
22
+ <legend>Selects</legend>
23
+ <label>singleSelect</label>
24
+ <select name="singleSelect">
25
+ <option disabled selected value> -- select -- </option>
26
+ <option value="1">Option 1</option>
27
+ <option value="2">Option 2</option>
28
+ <option value="3">Option 3</option>
29
+ <option value="4">Option 4</option>
30
+ </select>
31
+ <label>multiSelect</label>
32
+ <select name="multiSelect" multiple="multiple" type="select-multiple">
33
+ <option value="1">Option 1</option>
34
+ <option value="2" selected=true>Option 2</option>
35
+ <option value="3">Option 3</option>
36
+ <option value="4" selected=true>Option 4</option>
37
+ </select>
38
+ </fieldset>
39
+ <fieldset>
40
+ <legend>Radiobuttons&nbsp;<strong>2wB:&nbsp;</strong>{myRadio}</legend>
41
+ <label>radio1</label><input type="radio" name="myRadio" value="radio1">
42
+ <label>radio2</label><input type="radio" name="myRadio" value="radio2">
43
+ <label>radio3</label><input type="radio" name="myRadio" value="radio3">
44
+ </fieldset>
45
+ <fieldset>
46
+ <legend>Checkboxes</legend>
47
+ <label>cb1</label><input type="checkbox" name="cb1">
48
+ <label>cb2</label><input type="checkbox" name="cb2">
49
+ <label>cb3</label><input type="checkbox" name="cb3">
50
+ <label>cb4</label><input type="checkbox" name="cb4">
51
+ <label>cb5</label><input type="checkbox" name="cb5">
52
+ </fieldset>
53
+ <fieldset>
54
+ <legend>TextArea</legend>
55
+ <label>textArea</label><textarea name="textArea"></textarea>
56
+ </fieldset>
@@ -0,0 +1,27 @@
1
+ {
2
+ "textInput":"Hallo Welt",
3
+ "colorInput":"#eaf8f8",
4
+ "dateInput":"",
5
+ "dtlInput":"",
6
+ "email":"",
7
+ "hiddenInput":"",
8
+ "hiddenVal":"",
9
+ "month":"",
10
+ "number":"",
11
+ "passInput":"",
12
+ "rangeInput":"30",
13
+ "searchInput":"",
14
+ "telInput":"",
15
+ "timeInput":"",
16
+ "urlInput":"",
17
+ "weekInput":"",
18
+ "myRadio":"radio3",
19
+ "cb1":true,
20
+ "cb2":false,
21
+ "cb3":true,
22
+ "cb4":false,
23
+ "cb5":false,
24
+ "singleSelect":"",
25
+ "multiSelect":["2","4"],
26
+ "textArea":"This is some example\rtext..."
27
+ }
@@ -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;
@@ -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/public/test/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