@twobirds/microcomponents 0.0.82 → 0.0.84

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 (268) hide show
  1. package/assets/documentation/MC.md +0 -1
  2. package/assets/test/test.html +1 -1
  3. package/dist/MC.d.ts +11 -10
  4. package/dist/MC.d.ts.map +1 -1
  5. package/dist/MC.js +137 -200
  6. package/dist/MC.min.js +157 -296
  7. package/dist/MC.ts +202 -337
  8. package/dist/elements.d.ts +1 -1
  9. package/dist/elements.d.ts.map +1 -1
  10. package/dist/elements.js +26 -6
  11. package/dist/elements.min.js +1 -1
  12. package/dist/elements.ts +50 -7
  13. package/dist/formValues.js +2 -2
  14. package/dist/formValues.min.js +1 -1
  15. package/dist/formValues.ts +3 -3
  16. package/dist/microcomponents.d.ts +0 -1
  17. package/dist/microcomponents.d.ts.map +1 -1
  18. package/dist/microcomponents.js +0 -1
  19. package/dist/microcomponents.min.js +1 -1
  20. package/dist/microcomponents.ts +1 -1
  21. package/dist/observables.d.ts.map +1 -1
  22. package/dist/observables.js +52 -57
  23. package/dist/observables.min.js +1 -1
  24. package/dist/observables.ts +68 -73
  25. package/package.json +6 -5
  26. package/public/MC.d.ts +11 -10
  27. package/public/MC.d.ts.map +1 -1
  28. package/public/MC.js +137 -200
  29. package/public/MC.js.map +1 -1
  30. package/public/MC.min.js +157 -296
  31. package/public/MC.ts +202 -337
  32. package/public/documentation/MC.md +0 -1
  33. package/public/elements.d.ts +1 -1
  34. package/public/elements.d.ts.map +1 -1
  35. package/public/elements.js +26 -6
  36. package/public/elements.js.map +1 -1
  37. package/public/elements.min.js +1 -1
  38. package/public/elements.ts +50 -7
  39. package/public/formValues.js +2 -2
  40. package/public/formValues.js.map +1 -1
  41. package/public/formValues.min.js +1 -1
  42. package/public/formValues.ts +3 -3
  43. package/public/microcomponents.d.ts +0 -1
  44. package/public/microcomponents.d.ts.map +1 -1
  45. package/public/microcomponents.js +0 -1
  46. package/public/microcomponents.js.map +1 -1
  47. package/public/microcomponents.min.js +1 -1
  48. package/public/microcomponents.ts +1 -1
  49. package/public/observables.d.ts.map +1 -1
  50. package/public/observables.js +52 -57
  51. package/public/observables.js.map +1 -1
  52. package/public/observables.min.js +1 -1
  53. package/public/observables.ts +68 -73
  54. package/public/{test/selectors.ts → selectors._ts} +2 -367
  55. package/public/src/MC.d.ts +37 -0
  56. package/public/src/MC.d.ts.map +1 -0
  57. package/public/src/MC.js +316 -0
  58. package/public/src/MC.js.map +1 -0
  59. package/public/src/MC.ts +202 -337
  60. package/public/src/elements.d.ts +5 -0
  61. package/public/src/elements.d.ts.map +1 -0
  62. package/public/src/elements.js +68 -0
  63. package/public/src/elements.js.map +1 -0
  64. package/public/src/elements.ts +50 -7
  65. package/public/src/formValues.d.ts +3 -0
  66. package/public/src/formValues.d.ts.map +1 -0
  67. package/public/src/formValues.js +162 -0
  68. package/public/src/formValues.js.map +1 -0
  69. package/public/src/formValues.ts +3 -3
  70. package/public/src/helpers.d.ts +14 -0
  71. package/public/src/helpers.d.ts.map +1 -0
  72. package/public/src/helpers.js +113 -0
  73. package/public/src/microcomponents.d.ts +6 -0
  74. package/public/src/microcomponents.d.ts.map +1 -0
  75. package/public/src/microcomponents.js +7 -0
  76. package/public/src/microcomponents.js.map +1 -0
  77. package/public/src/microcomponents.ts +1 -1
  78. package/public/src/observables.d.ts +11 -0
  79. package/public/src/observables.d.ts.map +1 -0
  80. package/public/src/observables.js +244 -0
  81. package/public/src/observables.js.map +1 -0
  82. package/public/src/observables.ts +68 -73
  83. package/public/{selectors.ts → src/selectors._ts} +2 -367
  84. package/public/src/test/grandparent.css +11 -0
  85. package/public/src/test/test/child.d.ts +2 -0
  86. package/public/src/test/test/child.d.ts.map +1 -0
  87. package/public/src/test/test/child.js +15 -0
  88. package/public/src/test/test/child.js.map +1 -0
  89. package/public/src/test/test/child.ts +21 -0
  90. package/public/src/test/test/grandchild.d.ts +2 -0
  91. package/public/src/test/test/grandchild.d.ts.map +1 -0
  92. package/public/src/test/test/grandchild.js +15 -0
  93. package/public/src/test/test/grandchild.js.map +1 -0
  94. package/public/src/test/test/grandchild.ts +21 -0
  95. package/public/src/test/test/grandparent.d.ts +2 -0
  96. package/public/src/test/test/grandparent.d.ts.map +1 -0
  97. package/public/src/test/test/grandparent.js +1 -0
  98. package/public/src/test/test/grandparent.js.map +1 -0
  99. package/public/src/test/test/grandparent.ts +29 -0
  100. package/public/src/test/test/greatgrandchild.d.ts +2 -0
  101. package/public/src/test/test/greatgrandchild.d.ts.map +1 -0
  102. package/public/src/test/test/greatgrandchild.js +29 -0
  103. package/public/src/test/test/greatgrandchild.js.map +1 -0
  104. package/public/src/test/test/greatgrandchild.ts +42 -0
  105. package/public/src/test/test/parent.d.ts +2 -0
  106. package/public/src/test/test/parent.d.ts.map +1 -0
  107. package/public/src/test/test/parent.js +15 -0
  108. package/public/src/test/test/parent.js.map +1 -0
  109. package/public/src/test/test/parent.ts +21 -0
  110. package/public/src/test/test/testform.d.ts +2 -0
  111. package/public/src/test/test/testform.d.ts.map +1 -0
  112. package/public/src/test/test/testform.js +1 -0
  113. package/public/src/test/test/testform.js.map +1 -0
  114. package/public/src/test/test/testform.ts +153 -0
  115. package/public/src/test/test/testfunction.d.ts +3 -0
  116. package/public/src/test/test/testfunction.d.ts.map +1 -0
  117. package/public/src/test/test/testfunction.js +7 -0
  118. package/public/src/test/test/testfunction.js.map +1 -0
  119. package/public/src/test/test/testfunction.ts +12 -0
  120. package/public/src/test/test/testmc.d.ts +3 -0
  121. package/public/src/test/test/testmc.d.ts.map +1 -0
  122. package/public/src/test/test/testmc.js +10 -0
  123. package/public/src/test/test/testmc.js.map +1 -0
  124. package/public/src/test/test/testmc.ts +16 -0
  125. package/public/src/test/test/testsimpleclass.d.ts +3 -0
  126. package/public/src/test/test/testsimpleclass.d.ts.map +1 -0
  127. package/public/src/test/test/testsimpleclass.js +9 -0
  128. package/public/src/test/test/testsimpleclass.js.map +1 -0
  129. package/public/src/test/test/testsimpleclass.ts +15 -0
  130. package/public/src/test/test.d.ts +2 -0
  131. package/public/src/test/test.d.ts.map +1 -0
  132. package/public/src/test/test.js +80 -0
  133. package/public/src/test/test.js.map +1 -0
  134. package/public/src/test/test.ts +188 -0
  135. package/public/src/test/testform.css +47 -0
  136. package/public/src/test/testform.html +56 -0
  137. package/public/src/test/testform.json +27 -0
  138. package/public/test/MC.d.ts +11 -10
  139. package/public/test/MC.d.ts.map +1 -1
  140. package/public/test/MC.js +137 -200
  141. package/public/test/MC.min.js +377 -0
  142. package/public/test/MC.ts +202 -337
  143. package/public/test/elements.d.ts +1 -1
  144. package/public/test/elements.d.ts.map +1 -1
  145. package/public/test/elements.js +26 -6
  146. package/public/test/elements.min.js +1 -0
  147. package/public/test/elements.ts +50 -7
  148. package/public/test/formValues.js +2 -2
  149. package/public/test/formValues.min.js +1 -0
  150. package/public/test/formValues.ts +3 -3
  151. package/public/test/grandparent.css +1 -3
  152. package/public/test/microcomponents.d.ts +0 -1
  153. package/public/test/microcomponents.d.ts.map +1 -1
  154. package/public/test/microcomponents.js +0 -1
  155. package/public/test/microcomponents.min.js +1 -1
  156. package/public/test/microcomponents.ts +1 -1
  157. package/public/test/observables.d.ts.map +1 -1
  158. package/public/test/observables.js +52 -57
  159. package/public/test/observables.min.js +1 -0
  160. package/public/test/observables.ts +68 -73
  161. package/public/test/test/child.ts +21 -0
  162. package/public/test/test/grandchild.ts +21 -0
  163. package/public/test/test/grandparent.d.ts.map +1 -1
  164. package/public/test/test/grandparent.js +1 -1
  165. package/public/test/test/grandparent.js.map +1 -1
  166. package/public/test/test/grandparent.ts +29 -0
  167. package/public/test/test/greatgrandchild.ts +42 -0
  168. package/public/test/test/parent.ts +21 -0
  169. package/public/test/test/testform.js +1 -1
  170. package/public/test/test/testform.js.map +1 -1
  171. package/public/test/test/testform.ts +153 -0
  172. package/public/test/test/testfunction.d.ts +3 -0
  173. package/public/test/test/testfunction.d.ts.map +1 -0
  174. package/public/test/test/testfunction.js +7 -0
  175. package/public/test/test/testfunction.js.map +1 -0
  176. package/public/test/test/testfunction.ts +12 -0
  177. package/public/test/test/testmc.d.ts +2 -5
  178. package/public/test/test/testmc.d.ts.map +1 -1
  179. package/public/test/test/testmc.js +4 -4
  180. package/public/test/test/testmc.js.map +1 -1
  181. package/public/test/test/testmc.ts +16 -0
  182. package/public/test/test/testsimpleclass.d.ts +3 -0
  183. package/public/test/test/testsimpleclass.d.ts.map +1 -0
  184. package/public/test/test/testsimpleclass.js +9 -0
  185. package/public/test/test/testsimpleclass.js.map +1 -0
  186. package/public/test/test/testsimpleclass.ts +15 -0
  187. package/public/test/test.html +1 -1
  188. package/public/test/test.js +5 -6
  189. package/public/test/test.js.map +1 -1
  190. package/public/test/test.ts +188 -0
  191. package/public/test/testform.css +47 -0
  192. package/public/test/testform.html +56 -0
  193. package/public/test/testform.json +3 -3
  194. package/public/typedoc/assets/navigation.js +1 -1
  195. package/public/typedoc/assets/search.js +1 -1
  196. package/public/typedoc/classes/MC.DC.html +6 -4
  197. package/public/typedoc/classes/MC.MC.html +3 -4
  198. package/public/typedoc/classes/MC.McBase.html +2 -2
  199. package/public/typedoc/functions/MC.autoload.html +1 -1
  200. package/public/typedoc/functions/MC.off.html +1 -0
  201. package/public/typedoc/functions/MC.on.html +1 -0
  202. package/public/typedoc/functions/MC.one.html +1 -0
  203. package/public/typedoc/functions/elements.defineCE.html +1 -1
  204. package/public/typedoc/functions/elements.getCE.html +1 -1
  205. package/public/typedoc/functions/formValues.formValues.html +1 -1
  206. package/public/typedoc/functions/observables.observe.html +1 -1
  207. package/public/typedoc/interfaces/MC.HTMLMcElement.html +2 -2
  208. package/public/typedoc/modules/MC.html +7 -6
  209. package/public/typedoc/modules/elements.html +1 -1
  210. package/public/typedoc/modules/formValues.html +1 -1
  211. package/public/typedoc/modules/observables.html +1 -1
  212. package/public/typedoc/types/observables.Observable.html +1 -1
  213. package/src/MC.ts +202 -337
  214. package/src/elements.ts +50 -7
  215. package/src/formValues.ts +3 -3
  216. package/src/microcomponents.ts +1 -1
  217. package/src/observables.ts +68 -73
  218. package/{dist/selectors.ts → src/selectors._ts} +2 -367
  219. package/src/test/test/grandparent.ts +12 -4
  220. package/src/test/test/testform.ts +13 -11
  221. package/src/test/test/testfunction.ts +12 -0
  222. package/src/test/test/testmc.ts +13 -9
  223. package/src/test/test/testsimpleclass.ts +15 -0
  224. package/src/test/test.ts +8 -20
  225. package/tasks.md +36 -0
  226. package/tsconfig.json +2 -2
  227. package/typedoc.json +1 -1
  228. package/webpack.config.js +2 -2
  229. package/dist/McEvent.d.ts +0 -15
  230. package/dist/McEvent.d.ts.map +0 -1
  231. package/dist/McEvent.js +0 -71
  232. package/dist/selectors.d.ts +0 -108
  233. package/dist/selectors.d.ts.map +0 -1
  234. package/dist/selectors.js +0 -971
  235. package/dist/selectors.min.js +0 -1
  236. package/public/McEvent.d.ts +0 -15
  237. package/public/McEvent.d.ts.map +0 -1
  238. package/public/McEvent.js +0 -71
  239. package/public/McEvent.js.map +0 -1
  240. package/public/selectors.d.ts +0 -108
  241. package/public/selectors.d.ts.map +0 -1
  242. package/public/selectors.js +0 -971
  243. package/public/selectors.js.map +0 -1
  244. package/public/selectors.min.js +0 -1
  245. package/public/src/selectors.ts +0 -1634
  246. package/public/test/MC.js.map +0 -1
  247. package/public/test/McEvent.d.ts +0 -15
  248. package/public/test/McEvent.d.ts.map +0 -1
  249. package/public/test/McEvent.js +0 -71
  250. package/public/test/McEvent.js.map +0 -1
  251. package/public/test/McEvent.ts +0 -96
  252. package/public/test/elements.js.map +0 -1
  253. package/public/test/formValues.js.map +0 -1
  254. package/public/test/microcomponents.js.map +0 -1
  255. package/public/test/observables.js.map +0 -1
  256. package/public/test/selectors.d.ts +0 -108
  257. package/public/test/selectors.d.ts.map +0 -1
  258. package/public/test/selectors.js +0 -971
  259. package/public/test/selectors.js.map +0 -1
  260. package/public/typedoc/classes/MC.McEvent.html +0 -9
  261. package/public/typedoc/functions/MC.addListener.html +0 -1
  262. package/public/typedoc/functions/MC.removeListener.html +0 -1
  263. package/src/McEvent.ts +0 -96
  264. package/src/selectors.ts +0 -1634
  265. /package/{dist/McEvent.ts → public/McEvent._ts} +0 -0
  266. /package/public/{McEvent.ts → src/McEvent._ts} +0 -0
  267. /package/public/{test → src}/helpers.js.map +0 -0
  268. /package/{public/src/McEvent.ts → src/McEvent._ts} +0 -0
package/public/MC.min.js CHANGED
@@ -44,103 +44,29 @@ return /******/ (() => { // webpackBootstrap
44
44
  /******/
45
45
  /************************************************************************/
46
46
  var __webpack_exports__ = {};
47
- // ESM COMPAT FLAG
48
47
  __webpack_require__.r(__webpack_exports__);
48
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
49
+ /* harmony export */ DC: () => (/* binding */ DC),
50
+ /* harmony export */ MC: () => (/* binding */ MC),
51
+ /* harmony export */ McBase: () => (/* binding */ McBase),
52
+ /* harmony export */ autoload: () => (/* binding */ autoload),
53
+ /* harmony export */ off: () => (/* binding */ off),
54
+ /* harmony export */ on: () => (/* binding */ on),
55
+ /* harmony export */ one: () => (/* binding */ one),
56
+ /* harmony export */ trigger: () => (/* binding */ trigger)
57
+ /* harmony export */ });
49
58
 
50
- // EXPORTS
51
- __webpack_require__.d(__webpack_exports__, {
52
- DC: () => (/* binding */ DC),
53
- MC: () => (/* binding */ MC),
54
- McBase: () => (/* binding */ McBase),
55
- McEvent: () => (/* reexport */ McEvent),
56
- addListener: () => (/* binding */ addListener),
57
- autoload: () => (/* binding */ autoload),
58
- removeListener: () => (/* binding */ removeListener)
59
- });
60
-
61
- ;// ./build/McEvent.js
62
-
63
- var isBrowser = new Function("try {return this===window;}catch(e){ return false;}");
64
- let nativeEventNames = new Set();
65
- if (isBrowser()) {
66
- Object.keys(HTMLElement.prototype).filter(key => /^on/.test(key)).forEach(eventName => nativeEventNames.add(eventName));
67
- }
68
- function isDOM(element) {
69
- return element && element instanceof HTMLElement;
70
- }
71
- class McEvent {
72
- #type;
73
- #stopped = false;
74
- #immediateStopped = false;
75
- constructor(type, data = {}, bubble = 'l') {
76
- this.#type = type;
77
- this.data = data;
78
- this.bubble = bubble;
79
- }
80
- get type() {
81
- return this.#type;
82
- }
83
- get stopped() {
84
- return this.#stopped;
85
- }
86
- get immediateStopped() {
87
- return this.#immediateStopped;
88
- }
89
- stopPropagation() {
90
- this.#stopped = true;
91
- }
92
- stopImmediatePropagation() {
93
- this.stopPropagation();
94
- this.#immediateStopped = true;
59
+ var isBrowser = new Function('try {return this===window;}catch(e){ return false;}');
60
+ function getNativeEventNames(domNode) {
61
+ let nativeEventNames = [];
62
+ if (isBrowser()) {
63
+ Object.keys(HTMLElement.prototype)
64
+ .filter((key) => /^on/.test(key))
65
+ .forEach((eventName) => nativeEventNames.push(eventName));
95
66
  }
67
+ return nativeEventNames;
96
68
  }
97
69
  function getMicroComponents(elements, search) {
98
- let mcValues = [];
99
- elements.forEach(e => {
100
- if (e) {
101
- if (e instanceof HTMLElement) {
102
- const _mc = e?._mc;
103
- if (!search && _mc) {
104
- mcValues = mcValues.concat(Object.values(e._mc));
105
- }
106
- else if (search && _mc && _mc[search]) {
107
- mcValues.push(_mc[search]);
108
- }
109
- }
110
- }
111
- });
112
- return mcValues;
113
- }
114
- function traverseNodes(node, search, firstonly = true) {
115
- let mcValues = [];
116
- while (node) {
117
- if (node._mc) {
118
- if (!search) {
119
- mcValues = mcValues.concat(Object.values(node._mc));
120
- }
121
- else if (search && node._mc[search]) {
122
- mcValues.push(node._mc[search]);
123
- }
124
- if (firstonly)
125
- return mcValues;
126
- }
127
- node = node.parentNode;
128
- }
129
- return mcValues;
130
- }
131
-
132
-
133
- ;// ./build/MC.js
134
-
135
-
136
- var MC_isBrowser = new Function('try {return this===window;}catch(e){ return false;}');
137
- let MC_nativeEventNames = new Set();
138
- if (MC_isBrowser()) {
139
- Object.keys(HTMLElement.prototype)
140
- .filter((key) => /^on/.test(key))
141
- .forEach((eventName) => MC_nativeEventNames.add(eventName));
142
- }
143
- function MC_getMicroComponents(elements, search) {
144
70
  let mcValues = [];
145
71
  elements.forEach((e) => {
146
72
  if (e) {
@@ -157,7 +83,7 @@ function MC_getMicroComponents(elements, search) {
157
83
  });
158
84
  return mcValues;
159
85
  }
160
- function MC_traverseNodes(node, search, firstonly = true) {
86
+ function traverseNodes(node, search, firstonly = true) {
161
87
  let mcValues = [];
162
88
  while (node) {
163
89
  if (node._mc) {
@@ -174,22 +100,9 @@ function MC_traverseNodes(node, search, firstonly = true) {
174
100
  }
175
101
  return mcValues;
176
102
  }
177
- function MC_isDOM(element) {
103
+ function isDOM(element) {
178
104
  return element && element instanceof HTMLElement;
179
105
  }
180
- function addListener(domNode, eventName, handler, capture = false, once = false) {
181
- let options = { once: false };
182
- if (capture) {
183
- options.capture = capture;
184
- }
185
- if (once) {
186
- options.once = once;
187
- }
188
- domNode.addEventListener(eventName, handler, options);
189
- }
190
- function removeListener(domNode, eventName, handler) {
191
- domNode.removeEventListener(eventName, handler);
192
- }
193
106
  function add(target, key, element = {}) {
194
107
  let node = target;
195
108
  if (!node._mc) {
@@ -202,8 +115,8 @@ function add(target, key, element = {}) {
202
115
  const _mc = node._mc;
203
116
  if (key.length && !_mc[key]) {
204
117
  _mc[key] = element;
205
- if (target instanceof HTMLElement && !target.getAttribute('_mc')) {
206
- target.setAttribute('_mc', '');
118
+ if (target instanceof HTMLElement && !target.getAttribute('data-mc')) {
119
+ target.setAttribute('data-mc', '');
207
120
  }
208
121
  }
209
122
  return element;
@@ -217,25 +130,8 @@ function remove(target, key) {
217
130
  }
218
131
  if (!Object.keys(_mc).length &&
219
132
  target instanceof HTMLElement &&
220
- target.hasAttribute('_mc')) {
221
- target.removeAttribute('_mc');
222
- }
223
- return;
224
- }
225
- function trigger(target, ev, data = {}, bubble = 'l') {
226
- let _mc = target?._mc;
227
- if (!_mc)
228
- return;
229
- let event = ev instanceof McEvent
230
- ? new McEvent(ev.type, ev.data, 'l')
231
- : new McEvent(ev, data, 'l'), mcEvent = typeof ev !== 'string' ? ev : new McEvent(ev, data, bubble);
232
- [...Object.values(_mc)].forEach((mc) => {
233
- if (mc?.trigger && typeof mc?.trigger === 'function') {
234
- mc?.trigger(event);
235
- }
236
- });
237
- if (/[ud]/.test(mcEvent.bubble)) {
238
- bubbleEvent(target, mcEvent);
133
+ target.hasAttribute('data-mc')) {
134
+ target.removeAttribute('data-mc');
239
135
  }
240
136
  return;
241
137
  }
@@ -246,8 +142,50 @@ function init(element) {
246
142
  element.trigger('Init');
247
143
  }, 0);
248
144
  }
145
+ function getMcEventName(eventName) {
146
+ return '_mc' + eventName[0].toUpperCase() + eventName.substring(1);
147
+ }
148
+ function off(domNode, eventName, handler) {
149
+ domNode.removeEventListener(getMcEventName(eventName), handler);
150
+ }
151
+ function on(domNode, eventName, handler, once = false) {
152
+ domNode.addEventListener(getMcEventName(eventName), handler, { capture: false, once });
153
+ }
154
+ function one(domNode, eventName, handler) {
155
+ on(domNode, eventName, handler, true);
156
+ }
157
+ function trigger(domNode, event, data = {}, bubble = 'l') {
158
+ const ev = typeof event === 'string'
159
+ ? new CustomEvent(getMcEventName(event), { detail: { data, bubble } })
160
+ : event;
161
+ if (bubble.length && bubble.indexOf('l') > -1) {
162
+ domNode.dispatchEvent(ev);
163
+ }
164
+ if (/[u|d]/.test(bubble)) {
165
+ bubbleEvent(domNode, ev);
166
+ }
167
+ }
168
+ function bubbleEvent(domNode, ev) {
169
+ setTimeout(() => {
170
+ if (ev.detail.bubble.indexOf('l') === -1) {
171
+ ev.detail.bubble += 'l';
172
+ }
173
+ if (ev.detail.bubble.indexOf('u') > -1) {
174
+ domNode.closest('[data-mc]')?.dispatchEvent(ev);
175
+ }
176
+ if (ev.detail.bubble.indexOf('d') > -1) {
177
+ let targets = new Set(domNode._mc
178
+ .children()
179
+ .map((c) => c?.target));
180
+ targets.forEach((target) => {
181
+ if (target)
182
+ DC.trigger(target, ev);
183
+ });
184
+ }
185
+ }, 0);
186
+ }
249
187
  function autoAttachListeners(element) {
250
- if (!MC_isBrowser() || element.constructor === DC)
188
+ if (!isBrowser() || element.constructor === DC)
251
189
  return;
252
190
  const target = element.target;
253
191
  if (target instanceof HTMLElement) {
@@ -256,237 +194,160 @@ function autoAttachListeners(element) {
256
194
  .filter((key) => /^on[A-Z]|one[A-Z]/.test(key) &&
257
195
  typeof that.constructor.prototype[key] === 'function')
258
196
  .forEach((key) => {
259
- let once = /^one/.test(key), withoutOnOne = key.replace(/^on[e]{0,1}/, ''), nativeEventName = withoutOnOne.toLowerCase(), listener = (ev) => {
260
- that.trigger(withoutOnOne, ev);
197
+ let once = /^one/.test(key), withoutOnOne = key.replace(/^on[e]{0,1}/, ''), nativeEventName = withoutOnOne.toLowerCase();
198
+ let listener = (ev) => {
199
+ that[key](ev);
261
200
  };
262
- if (once) {
263
- Object.defineProperty(element, 'on' + withoutOnOne, {
264
- configurable: true,
265
- enumerable: false,
266
- writable: true,
267
- value: (ev) => {
268
- that.constructor.prototype[key].bind(that)(ev);
269
- },
270
- });
201
+ if (!!target['on' + nativeEventName]) {
202
+ target.addEventListener(nativeEventName, listener);
271
203
  }
272
- if (MC_nativeEventNames.has('on' + nativeEventName)) {
273
- addListener(target, nativeEventName, listener, false, once);
204
+ else {
205
+ on(target, withoutOnOne, listener, once);
274
206
  }
275
207
  });
276
208
  }
277
209
  }
278
- function bubbleEvent(target, ev) {
279
- if (/[ud]/.test(ev.bubble)) {
280
- setTimeout(() => {
281
- if (ev.bubble.indexOf('l') === -1) {
282
- ev.bubble += 'l';
283
- }
284
- if (ev.bubble.indexOf('u') > -1) {
285
- let parent = MC_traverseNodes(target, '', true)?.[0].target;
286
- if (parent)
287
- DC.trigger(parent, ev);
288
- }
289
- if (ev.bubble.indexOf('d') > -1) {
290
- let targets = new Set(target._mc
291
- .children()
292
- .map((c) => c?.target));
293
- targets.forEach((target) => {
294
- if (target)
295
- DC.trigger(target, ev);
296
- });
297
- }
298
- }, 0);
299
- }
210
+ function getMcChildNodes(domNode) {
211
+ const id = Math.random().toString().replace('.', '');
212
+ const selector = '[data-mc]:not([temp_id="' + id + '"] [data-mc] [data-mc])';
213
+ domNode.setAttribute('temp_id', id);
214
+ const myDomElements = domNode.querySelectorAll(selector);
215
+ domNode.removeAttribute('temp_id');
216
+ return myDomElements;
300
217
  }
301
218
  class McBase {
302
- #target;
219
+ _target;
303
220
  constructor(target, debug = false) {
304
- let that = this, element = that;
305
- this.#target = new WeakRef(target || {});
221
+ let element = this;
222
+ this._target = new WeakRef(target || {});
306
223
  init(element);
307
224
  autoAttachListeners(element);
308
225
  }
309
226
  get target() {
310
- return this.#target.deref();
227
+ return this._target.deref();
311
228
  }
312
229
  }
313
230
  class MC extends McBase {
314
- _mc = {};
315
231
  constructor(target) {
316
232
  super(target);
317
233
  }
318
234
  static trigger = trigger;
319
235
  trigger(ev, data = {}, bubble = 'l') {
320
- let that = this;
321
- if (that.constructor === MC || that.constructor === DC) {
322
- let event = ev instanceof McEvent
323
- ? new McEvent(ev.type, ev.data, 'l')
324
- : new McEvent(ev, data, 'l'), mcEvent = typeof ev !== 'string'
325
- ? ev
326
- : new McEvent(ev, data, bubble);
327
- [...Object.getOwnPropertyNames(that)].forEach((mc) => {
328
- if (that[mc]?.trigger &&
329
- typeof that[mc]?.trigger === 'function') {
330
- that[mc]?.trigger(event);
331
- }
332
- });
333
- if (/[ud]/.test(mcEvent.bubble)) {
334
- bubbleEvent(that.target, mcEvent);
335
- }
336
- return;
337
- }
338
- if (that instanceof MC || that instanceof DC) {
339
- const that = this, mcEvent = typeof ev !== 'string'
340
- ? ev
341
- : new McEvent(ev, data, bubble), handlerName = 'on' + mcEvent.type[0].toUpperCase() + mcEvent.type.slice(1);
342
- if (mcEvent.bubble.indexOf('l') > -1) {
343
- if (!mcEvent.immediateStopped &&
344
- typeof that[handlerName] === 'function') {
345
- that[handlerName](mcEvent);
346
- if (that.hasOwnProperty(handlerName)) {
347
- delete that[handlerName];
348
- }
349
- }
350
- }
351
- if (mcEvent.stopped || mcEvent.bubble === 'l') {
352
- return that;
353
- }
354
- if (/[ud]/.test(mcEvent.bubble)) {
355
- bubbleEvent(that.target, mcEvent);
356
- }
357
- }
358
236
  }
359
237
  }
360
238
  class DC extends McBase {
361
- _mc = {};
362
239
  constructor(target, debug = false) {
363
240
  super(target);
364
241
  }
365
242
  static add = add;
366
243
  static remove = remove;
367
244
  static trigger = trigger;
368
- trigger(ev, data = {}, bubble) {
369
- MC.prototype.trigger.call(this, ev, data, bubble);
245
+ off(eventName, handler) {
246
+ off(this.target, eventName, handler);
247
+ }
248
+ on(eventName, handler) {
249
+ on(this.target, eventName, handler);
250
+ }
251
+ one(eventName, handler) {
252
+ one(this.target, eventName, handler);
253
+ }
254
+ trigger(ev, data = {}, bubble = 'l') {
255
+ if (typeof ev === 'string') {
256
+ }
370
257
  }
371
258
  parent(search = '') {
372
259
  let target = this.target;
373
- if (!MC_isDOM(target))
260
+ if (!isDOM(target))
374
261
  return [];
375
- return MC_traverseNodes(target.parentNode, search, true);
262
+ return traverseNodes(target.parentNode, search, true);
376
263
  }
377
264
  ancestors(search = '') {
378
265
  let target = this?.target;
379
- if (!MC_isDOM(target))
266
+ if (!isDOM(target))
380
267
  return [];
381
- return MC_traverseNodes(this.target.parentNode, search, false);
268
+ return traverseNodes(this.target.parentNode, search, false);
382
269
  }
383
270
  children(search = '') {
384
271
  let target = this?.target;
385
- if (!MC_isDOM(target))
272
+ if (!isDOM(target))
386
273
  return [];
387
- const id = Math.random().toString().replace('.', '');
388
- const selector = '[_mc]:not([temp_id="' + id + '"] [_mc] [_mc])';
389
- target.setAttribute('temp_id', id);
390
- const myDomElements = target.querySelectorAll(selector);
391
- const mcValues = MC_getMicroComponents([...myDomElements], search);
392
- target.removeAttribute('temp_id');
274
+ const myDomElements = getMcChildNodes(target);
275
+ const mcValues = getMicroComponents([...myDomElements], search);
393
276
  return mcValues;
394
277
  }
395
278
  descendants(search = '') {
396
279
  let target = this?.target;
397
- if (!MC_isDOM(target))
280
+ if (!isDOM(target))
398
281
  return [];
399
- const myDomElements = target.querySelectorAll('*[_mc]');
400
- return MC_getMicroComponents([...myDomElements], search);
282
+ const myDomElements = target.querySelectorAll('*[data-mc]');
283
+ return getMicroComponents([...myDomElements], search);
401
284
  }
402
285
  }
403
- const CEs = new Map();
404
- const MCs = new Map();
286
+ const loadingDCs = new Set();
287
+ function attachDC(element) {
288
+ return () => {
289
+ const elements = Array
290
+ .from(document.querySelectorAll(`[data-mc*="${element}"]`))
291
+ .filter(element => element instanceof HTMLElement);
292
+ if (elements.length === 0)
293
+ return;
294
+ const klass = customElements.get(element);
295
+ elements.forEach((node) => {
296
+ DC.add(node, klass.name, new klass(node));
297
+ const new_mc = node
298
+ .getAttribute('data-mc')
299
+ .split(' ')
300
+ .filter((name) => name !== element && name !== '')
301
+ .join(' ')
302
+ .trim();
303
+ node.setAttribute('data-mc', new_mc);
304
+ });
305
+ };
306
+ }
307
+ ;
405
308
  function makeLoadScript(element) {
309
+ if (loadingDCs.has(element))
310
+ return;
311
+ loadingDCs.add(element);
406
312
  const fileName = './' + element.split('-').join('/') + '.js';
407
313
  const se = document.createElement('script');
408
314
  se.setAttribute('src', fileName);
409
315
  se.setAttribute('blocking', 'render');
410
316
  se.async = true;
411
317
  se.setAttribute('type', 'module');
412
- se.setAttribute('name', element);
318
+ se.setAttribute('data-name', element);
413
319
  se.setAttribute('loading', '');
414
- addListener(se, 'load', (ev) => {
415
- se.removeAttribute('loading');
416
- se.setAttribute('loaded', '');
320
+ const loadedPromise = customElements.whenDefined(element);
321
+ loadedPromise.then(attachDC(element));
322
+ se.addEventListener('load', (ev) => {
323
+ loadingDCs.delete(element);
324
+ document.head.querySelector(`script[data-name="${element}"]`)?.remove();
417
325
  });
418
- addListener(se, 'error', (ev) => {
419
- console.error('could not load Custom Element code from', fileName);
326
+ se.addEventListener('error', (ev) => {
327
+ console.error('could not load DC code from', fileName);
420
328
  });
421
- return se;
329
+ document.head.append(se);
422
330
  }
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);
454
- }
455
- function loadUndefinedMicroComponents() {
331
+ function loadUndefinedMCs() {
456
332
  [...document.querySelectorAll(':not(:defined)')]
457
333
  .filter((element) => !!element
458
334
  && !customElements.get(element.tagName.toLowerCase())
459
- && !CEs.has(element.tagName.toLowerCase()))
335
+ && !loadingDCs.has(element.tagName.toLowerCase()))
460
336
  .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);
337
+ makeLoadScript(el.tagName.toLowerCase());
468
338
  });
469
- [...document.querySelectorAll('[_mc]:not([_mc=""]')]
339
+ [...document.querySelectorAll('[data-mc]:not([data-mc=""]')]
470
340
  .filter((element) => !!element)
471
341
  .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);
342
+ const _mc = el.getAttribute('data-mc')?.split(' ').filter(name => name !== '');
343
+ _mc?.forEach(element => {
344
+ const isDefined = customElements.get(element);
345
+ if (!loadingDCs.has(element) && !isDefined) {
346
+ makeLoadScript(element);
347
+ }
348
+ else if (isDefined) {
349
+ attachDC(element)();
350
+ }
490
351
  });
491
352
  });
492
353
  }
@@ -499,15 +360,15 @@ function autoload(enable = true) {
499
360
  return autoloadEnabled;
500
361
  }
501
362
  autoloadEnabled = enable;
502
- observer = new MutationObserver(loadUndefinedMicroComponents);
363
+ observer = new MutationObserver(loadUndefinedMCs);
503
364
  setTimeout(() => {
504
365
  observer.observe(document.body, { childList: true, subtree: true });
505
- loadUndefinedMicroComponents();
366
+ loadUndefinedMCs();
506
367
  }, 5);
507
368
  window.autoload = window.autoload || autoload;
508
369
  return autoloadEnabled;
509
370
  }
510
- autoload.state = { CEs, MCs };
371
+ autoload.state = loadingDCs;
511
372
 
512
373
 
513
374
  /******/ return __webpack_exports__;