@twobirds/microcomponents 0.0.83 → 0.0.85

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