@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
package/public/test/MC.js CHANGED
@@ -1,79 +1,30 @@
1
1
  'use strict';
2
- import { McEvent } from './McEvent.js';
3
- var isBrowser = new Function('try {return this===window;}catch(e){ return false;}');
4
- let nativeEventNames = new Set();
5
- if (isBrowser()) {
6
- Object.keys(HTMLElement.prototype)
7
- .filter((key) => /^on/.test(key))
8
- .forEach((eventName) => nativeEventNames.add(eventName));
9
- }
10
- function getMicroComponents(elements, search) {
11
- let mcValues = [];
12
- elements.forEach((e) => {
13
- if (e) {
14
- if (e instanceof HTMLElement) {
15
- const _mc = e?._mc;
16
- if (!search && _mc) {
17
- mcValues = mcValues.concat(Object.values(e._mc));
18
- }
19
- else if (search && _mc && _mc[search]) {
20
- mcValues.push(_mc[search]);
21
- }
22
- }
23
- }
24
- });
25
- return mcValues;
26
- }
27
- function traverseNodes(node, search, firstonly = true) {
28
- let mcValues = [];
29
- while (node) {
30
- if (node._mc) {
31
- if (!search) {
32
- mcValues = mcValues.concat(Object.values(node._mc));
33
- }
34
- else if (search && node._mc[search]) {
35
- mcValues.push(node._mc[search]);
36
- }
37
- if (firstonly)
38
- return mcValues;
39
- }
40
- node = node.parentNode;
2
+ const isBrowser = new Function('try {return this===window;}catch(e){ return false;}');
3
+ function getNativeEventNames(domNode) {
4
+ let nativeEventNames = [];
5
+ if (isBrowser()) {
6
+ Object.keys(HTMLElement.prototype)
7
+ .filter((key) => /^on/.test(key))
8
+ .forEach((eventName) => nativeEventNames.push(eventName));
41
9
  }
42
- return mcValues;
10
+ return nativeEventNames;
43
11
  }
44
12
  function isDOM(element) {
45
13
  return element && element instanceof HTMLElement;
46
14
  }
47
- function addListener(domNode, eventName, handler, capture = false, once = false) {
48
- let options = { once: false };
49
- if (capture) {
50
- options.capture = capture;
51
- }
52
- if (once) {
53
- options.once = once;
54
- }
55
- domNode.addEventListener(eventName, handler, options);
56
- }
57
- function removeListener(domNode, eventName, handler) {
58
- domNode.removeEventListener(eventName, handler);
59
- }
60
15
  function add(target, key, element = {}) {
61
16
  let node = target;
62
17
  if (!node._mc) {
63
- let debug = DC?.debug;
64
- DC.debug = false;
65
18
  node._mc = new DC(target);
66
- DC.debug = debug;
67
- delete node._mc._mc;
68
19
  }
69
20
  const _mc = node._mc;
70
21
  if (key.length && !_mc[key]) {
71
22
  _mc[key] = element;
72
- if (target instanceof HTMLElement && !target.getAttribute('_mc')) {
73
- target.setAttribute('_mc', '');
23
+ if (target instanceof HTMLElement && !target.getAttribute('data-mc')) {
24
+ target.setAttribute('data-mc', '');
74
25
  }
75
26
  }
76
- return element;
27
+ return node;
77
28
  }
78
29
  function remove(target, key) {
79
30
  if (!key)
@@ -84,35 +35,60 @@ function remove(target, key) {
84
35
  }
85
36
  if (!Object.keys(_mc).length &&
86
37
  target instanceof HTMLElement &&
87
- target.hasAttribute('_mc')) {
88
- target.removeAttribute('_mc');
89
- }
90
- return;
91
- }
92
- function trigger(target, ev, data = {}, bubble = 'l') {
93
- let _mc = target?._mc;
94
- if (!_mc)
95
- return;
96
- let event = ev instanceof McEvent
97
- ? new McEvent(ev.type, ev.data, 'l')
98
- : new McEvent(ev, data, 'l'), mcEvent = typeof ev !== 'string' ? ev : new McEvent(ev, data, bubble);
99
- [...Object.values(_mc)].forEach((mc) => {
100
- if (mc?.trigger && typeof mc?.trigger === 'function') {
101
- mc?.trigger(event);
102
- }
103
- });
104
- if (/[ud]/.test(mcEvent.bubble)) {
105
- bubbleEvent(target, mcEvent);
38
+ target.hasAttribute('data-mc')) {
39
+ target.removeAttribute('data-mc');
106
40
  }
107
41
  return;
108
42
  }
109
43
  function init(element) {
110
- if (element.constructor === DC)
111
- return;
112
44
  setTimeout(() => {
45
+ if (element.constructor === DC)
46
+ return;
113
47
  element.trigger('Init');
114
48
  }, 0);
115
49
  }
50
+ function getMcEventName(eventName) {
51
+ return '_mc' + eventName[0].toUpperCase() + eventName.substring(1);
52
+ }
53
+ function off(domNode, eventName, handler) {
54
+ domNode.removeEventListener(getMcEventName(eventName), handler);
55
+ }
56
+ function on(domNode, eventName, handler, once = false) {
57
+ domNode.addEventListener(getMcEventName(eventName), handler, { capture: false, once });
58
+ }
59
+ function one(domNode, eventName, handler) {
60
+ on(domNode, eventName, handler, true);
61
+ }
62
+ function trigger(domNode, event, data = {}, bubble = 'l') {
63
+ const ev = typeof event === 'string'
64
+ ? new CustomEvent(getMcEventName(event), { detail: { data, bubble } })
65
+ : event;
66
+ if (bubble.length && bubble.indexOf('l') > -1) {
67
+ domNode.dispatchEvent(ev);
68
+ }
69
+ if (/[u|d]/.test(bubble)) {
70
+ bubbleEvent(domNode, ev);
71
+ }
72
+ }
73
+ function bubbleEvent(domNode, ev) {
74
+ setTimeout(() => {
75
+ if (ev.detail.bubble.indexOf('l') === -1) {
76
+ ev.detail.bubble += 'l';
77
+ }
78
+ if (ev.detail.bubble.indexOf('u') > -1) {
79
+ domNode.closest('[data-mc]')?.dispatchEvent(ev);
80
+ }
81
+ if (ev.detail.bubble.indexOf('d') > -1) {
82
+ let targets = new Set(domNode._mc
83
+ .children()
84
+ .map((c) => c?.target));
85
+ targets.forEach((target) => {
86
+ if (target)
87
+ target._mc.trigger(target, ev);
88
+ });
89
+ }
90
+ }, 0);
91
+ }
116
92
  function autoAttachListeners(element) {
117
93
  if (!isBrowser() || element.constructor === DC)
118
94
  return;
@@ -123,53 +99,33 @@ function autoAttachListeners(element) {
123
99
  .filter((key) => /^on[A-Z]|one[A-Z]/.test(key) &&
124
100
  typeof that.constructor.prototype[key] === 'function')
125
101
  .forEach((key) => {
126
- let once = /^one/.test(key), withoutOnOne = key.replace(/^on[e]{0,1}/, ''), nativeEventName = withoutOnOne.toLowerCase(), listener = (ev) => {
127
- that.trigger(withoutOnOne, ev);
102
+ let once = /^one/.test(key), withoutOnOne = key.replace(/^on[e]{0,1}/, ''), nativeEventName = withoutOnOne.toLowerCase();
103
+ let listener = (ev) => {
104
+ that[key](ev);
128
105
  };
129
- if (once) {
130
- Object.defineProperty(element, 'on' + withoutOnOne, {
131
- configurable: true,
132
- enumerable: false,
133
- writable: true,
134
- value: (ev) => {
135
- that.constructor.prototype[key].bind(that)(ev);
136
- },
137
- });
106
+ if (!!target['on' + nativeEventName]) {
107
+ target.addEventListener(nativeEventName, listener);
138
108
  }
139
- if (nativeEventNames.has('on' + nativeEventName)) {
140
- addListener(target, nativeEventName, listener, false, once);
109
+ else {
110
+ on(target, withoutOnOne, listener, once);
141
111
  }
142
112
  });
143
113
  }
144
114
  }
145
- function bubbleEvent(target, ev) {
146
- if (/[ud]/.test(ev.bubble)) {
147
- setTimeout(() => {
148
- if (ev.bubble.indexOf('l') === -1) {
149
- ev.bubble += 'l';
150
- }
151
- if (ev.bubble.indexOf('u') > -1) {
152
- let parent = traverseNodes(target, '', true)?.[0].target;
153
- if (parent)
154
- DC.trigger(parent, ev);
155
- }
156
- if (ev.bubble.indexOf('d') > -1) {
157
- let targets = new Set(target._mc
158
- .children()
159
- .map((c) => c?.target));
160
- targets.forEach((target) => {
161
- if (target)
162
- DC.trigger(target, ev);
163
- });
164
- }
165
- }, 0);
166
- }
115
+ function getMcChildNodes(domNode) {
116
+ const id = Math.random().toString().replace('.', '');
117
+ const selector = '[data-mc]:not([temp_id="' + id + '"] [data-mc] [data-mc])';
118
+ domNode.setAttribute('temp_id', id);
119
+ const mcArray = [...domNode.querySelectorAll(selector)]
120
+ .filter((e) => !!e._mc)
121
+ .map(e => e._mc);
122
+ domNode.removeAttribute('temp_id');
123
+ return mcArray.length ? mcArray : null;
167
124
  }
168
125
  class McBase {
169
126
  _target;
170
- __mc = {};
171
- constructor(target, debug = false) {
172
- let that = this, element = that;
127
+ constructor(target) {
128
+ let element = this;
173
129
  this._target = new WeakRef(target || {});
174
130
  init(element);
175
131
  autoAttachListeners(element);
@@ -177,55 +133,11 @@ class McBase {
177
133
  get target() {
178
134
  return this._target.deref();
179
135
  }
180
- get _mc() {
181
- return this.__mc;
182
- }
183
136
  }
184
137
  class MC extends McBase {
185
138
  constructor(target) {
186
139
  super(target);
187
140
  }
188
- static trigger = trigger;
189
- trigger(ev, data = {}, bubble = 'l') {
190
- let that = this;
191
- if (that.constructor === MC || that.constructor === DC) {
192
- let event = ev instanceof McEvent
193
- ? new McEvent(ev.type, ev.data, 'l')
194
- : new McEvent(ev, data, 'l'), mcEvent = typeof ev !== 'string'
195
- ? ev
196
- : new McEvent(ev, data, bubble);
197
- [...Object.getOwnPropertyNames(that)].forEach((mc) => {
198
- if (that[mc]?.trigger &&
199
- typeof that[mc]?.trigger === 'function') {
200
- that[mc]?.trigger(event);
201
- }
202
- });
203
- if (/[ud]/.test(mcEvent.bubble)) {
204
- bubbleEvent(that.target, mcEvent);
205
- }
206
- return;
207
- }
208
- if (that instanceof MC || that instanceof DC) {
209
- const that = this, mcEvent = typeof ev !== 'string'
210
- ? ev
211
- : new McEvent(ev, data, bubble), handlerName = 'on' + mcEvent.type[0].toUpperCase() + mcEvent.type.slice(1);
212
- if (mcEvent.bubble.indexOf('l') > -1) {
213
- if (!mcEvent.immediateStopped &&
214
- typeof that[handlerName] === 'function') {
215
- that[handlerName](mcEvent);
216
- if (that.hasOwnProperty(handlerName)) {
217
- delete that[handlerName];
218
- }
219
- }
220
- }
221
- if (mcEvent.stopped || mcEvent.bubble === 'l') {
222
- return that;
223
- }
224
- if (/[ud]/.test(mcEvent.bubble)) {
225
- bubbleEvent(that.target, mcEvent);
226
- }
227
- }
228
- }
229
141
  }
230
142
  class DC extends McBase {
231
143
  constructor(target, debug = false) {
@@ -233,59 +145,56 @@ class DC extends McBase {
233
145
  }
234
146
  static add = add;
235
147
  static remove = remove;
236
- static trigger = trigger;
237
- trigger(ev, data = {}, bubble) {
238
- MC.prototype.trigger.call(this, ev, data, bubble);
148
+ off(eventName, handler) {
149
+ off(this.target, eventName, handler);
150
+ }
151
+ on(eventName, handler) {
152
+ on(this.target, eventName, handler);
153
+ }
154
+ one(eventName, handler) {
155
+ one(this.target, eventName, handler);
239
156
  }
240
- parent(search = '') {
157
+ trigger(eventName, data = {}, bubble = 'l') {
158
+ trigger(this.target, eventName, data, bubble);
159
+ }
160
+ parent() {
241
161
  let target = this.target;
242
162
  if (!isDOM(target))
243
- return [];
244
- return traverseNodes(target.parentNode, search, true);
163
+ return null;
164
+ return target.closest('[data-mc]')?._mc || null;
245
165
  }
246
- ancestors(search = '') {
247
- let target = this?.target;
248
- if (!isDOM(target))
166
+ ancestors() {
167
+ let currentNode = this?.target, result = [];
168
+ if (!isDOM(currentNode))
249
169
  return [];
250
- return traverseNodes(this.target.parentNode, search, false);
170
+ while (currentNode = (currentNode.closest('[data-mc]'))) {
171
+ if (currentNode?._mc) {
172
+ result.push(currentNode?._mc);
173
+ }
174
+ }
175
+ return result.length ? result : null;
251
176
  }
252
- children(search = '') {
177
+ children() {
253
178
  let target = this?.target;
254
179
  if (!isDOM(target))
255
- return [];
256
- const id = Math.random().toString().replace('.', '');
257
- const selector = '[_mc]:not([temp_id="' + id + '"] [_mc] [_mc])';
258
- target.setAttribute('temp_id', id);
259
- const myDomElements = target.querySelectorAll(selector);
260
- const mcValues = getMicroComponents([...myDomElements], search);
261
- target.removeAttribute('temp_id');
262
- return mcValues;
180
+ return null;
181
+ return getMcChildNodes(target);
263
182
  }
264
- descendants(search = '') {
265
- let target = this?.target;
183
+ descendants() {
184
+ const target = this?.target;
266
185
  if (!isDOM(target))
267
186
  return [];
268
- const myDomElements = target.querySelectorAll('*[_mc]');
269
- return getMicroComponents([...myDomElements], search);
187
+ const mcArray = [...target.querySelectorAll('[data-mc]')]
188
+ .filter((e) => !!e._mc)
189
+ .map(e => e._mc);
190
+ return mcArray.length ? mcArray : null;
270
191
  }
271
192
  }
272
- const loadingMCs = new Set();
273
- function makeLoadScript(element) {
274
- if (loadingMCs.has(element))
275
- return;
276
- loadingMCs.add(element);
277
- const fileName = './' + element.split('-').join('/') + '.js';
278
- const se = document.createElement('script');
279
- se.setAttribute('src', fileName);
280
- se.setAttribute('blocking', 'render');
281
- se.async = true;
282
- se.setAttribute('type', 'module');
283
- se.setAttribute('data-name', element);
284
- se.setAttribute('loading', '');
285
- const loadedPromise = customElements.whenDefined(element);
286
- loadedPromise.then(() => {
193
+ const loadingDCs = new Set();
194
+ function attachDC(element) {
195
+ return () => {
287
196
  const elements = Array
288
- .from(document.querySelectorAll(`[_mc*="${element}"]`))
197
+ .from(document.querySelectorAll(`[data-mc*="${element}"]`))
289
198
  .filter(element => element instanceof HTMLElement);
290
199
  if (elements.length === 0)
291
200
  return;
@@ -293,19 +202,36 @@ function makeLoadScript(element) {
293
202
  elements.forEach((node) => {
294
203
  DC.add(node, klass.name, new klass(node));
295
204
  const new_mc = node
296
- .getAttribute('_mc')
205
+ .getAttribute('data-mc')
297
206
  .split(' ')
298
207
  .filter((name) => name !== element && name !== '')
299
- .join(' ');
300
- node.setAttribute('_mc', new_mc);
208
+ .join(' ')
209
+ .trim();
210
+ node.setAttribute('data-mc', new_mc);
301
211
  });
302
- document.head.querySelector('script[data-name="${elementName}]"')?.remove();
303
- });
304
- addListener(se, 'load', (ev) => {
305
- loadingMCs.delete(element);
212
+ };
213
+ }
214
+ ;
215
+ function makeLoadScript(element) {
216
+ if (loadingDCs.has(element))
217
+ return;
218
+ loadingDCs.add(element);
219
+ const fileName = './' + element.split('-').join('/') + '.js';
220
+ const se = document.createElement('script');
221
+ se.setAttribute('src', fileName);
222
+ se.setAttribute('blocking', 'render');
223
+ se.async = true;
224
+ se.setAttribute('type', 'module');
225
+ se.setAttribute('data-name', element);
226
+ se.setAttribute('loading', '');
227
+ const loadedPromise = customElements.whenDefined(element);
228
+ loadedPromise.then(attachDC(element));
229
+ se.addEventListener('load', (ev) => {
230
+ loadingDCs.delete(element);
231
+ document.head.querySelector(`script[data-name="${element}"]`)?.remove();
306
232
  });
307
- addListener(se, 'error', (ev) => {
308
- console.error('could not load MC code from', fileName);
233
+ se.addEventListener('error', (ev) => {
234
+ console.error('could not load DC code from', fileName);
309
235
  });
310
236
  document.head.append(se);
311
237
  }
@@ -313,16 +239,22 @@ function loadUndefinedMCs() {
313
239
  [...document.querySelectorAll(':not(:defined)')]
314
240
  .filter((element) => !!element
315
241
  && !customElements.get(element.tagName.toLowerCase())
316
- && !loadingMCs.has(element.tagName.toLowerCase()))
242
+ && !loadingDCs.has(element.tagName.toLowerCase()))
317
243
  .forEach((el) => {
318
244
  makeLoadScript(el.tagName.toLowerCase());
319
245
  });
320
- [...document.querySelectorAll('[_mc]:not([_mc=""]')]
246
+ [...document.querySelectorAll('[data-mc]:not([data-mc=""]')]
321
247
  .filter((element) => !!element)
322
248
  .forEach((el) => {
323
- const _mc = el.getAttribute('_mc')?.split(' ').filter(name => name !== '');
324
- _mc?.forEach(dc => {
325
- makeLoadScript(dc);
249
+ const _mc = el.getAttribute('data-mc')?.split(' ').filter(name => name !== '');
250
+ _mc?.forEach(element => {
251
+ const isDefined = customElements.get(element);
252
+ if (!loadingDCs.has(element) && !isDefined) {
253
+ makeLoadScript(element);
254
+ }
255
+ else if (isDefined) {
256
+ attachDC(element)();
257
+ }
326
258
  });
327
259
  });
328
260
  }
@@ -343,6 +275,6 @@ function autoload(enable = true) {
343
275
  window.autoload = window.autoload || autoload;
344
276
  return autoloadEnabled;
345
277
  }
346
- autoload.state = { loadingMCs };
347
- export { addListener, removeListener, McBase, MC, DC, McEvent, autoload };
278
+ autoload.state = loadingDCs;
279
+ export { McBase, MC, DC, autoload, on, one, off, trigger };
348
280
  //# sourceMappingURL=MC.js.map