@twobirds/microcomponents 0.1.6 → 0.1.10
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.
- package/README.md +4 -0
- package/dist/MC.d.ts.map +1 -1
- package/dist/MC.js +22 -21
- package/dist/MC.min.js +22 -21
- package/dist/MC.ts +373 -359
- package/dist/elements.d.ts.map +1 -1
- package/dist/elements.js +3 -3
- package/dist/elements.ts +91 -100
- package/dist/formValues.d.ts.map +1 -1
- package/dist/formValues.js +4 -6
- package/dist/formValues.min.js +1 -1
- package/dist/formValues.ts +173 -179
- package/dist/helpers.d.ts +1 -1
- package/dist/helpers.d.ts.map +1 -1
- package/dist/helpers.js +2 -4
- package/dist/helpers.ts +101 -113
- package/dist/microcomponents.d.ts.map +1 -1
- package/dist/microcomponents.js +1 -1
- package/dist/microcomponents.min.js +1 -1
- package/dist/microcomponents.ts +1 -3
- package/dist/observables.d.ts.map +1 -1
- package/dist/observables.js +17 -23
- package/dist/observables.min.js +1 -1
- package/dist/observables.ts +344 -378
- package/package.json +15 -4
package/README.md
CHANGED
|
@@ -18,10 +18,14 @@ The distinguishing feature - compared to other frameworks - is its **minimalism*
|
|
|
18
18
|
|
|
19
19
|
## Status
|
|
20
20
|
|
|
21
|
+
For a quick glance try [this](https://gitlab.com/twoBirds/mc_template_webcomponents)...
|
|
22
|
+
|
|
21
23
|
In [manual testing](https://twobirds.gitlab.io/microcomponents/test/test.html) ( also a speed test).
|
|
22
24
|
|
|
23
25
|
Check the [typedoc API reference](https://twobirds.gitlab.io/microcomponents/typedoc/index.html) if you want to drill into the source code.
|
|
24
26
|
|
|
27
|
+
The progress of coding is being streamed on [twitch](https://twitch.tv/frankieth) and [youtube](https://www.youtube.com/@FrankieThu).
|
|
28
|
+
|
|
25
29
|
## Simple Usage Examples
|
|
26
30
|
|
|
27
31
|
### **Micro Components**
|
package/dist/MC.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MC.d.ts","sourceRoot":"","sources":["../src/MC.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"MC.d.ts","sourceRoot":"","sources":["../src/MC.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAI3C,MAAM,WAAW,aAAc,SAAQ,WAAW;IAC9C,GAAG,EAAE,WAAW,CAAC;CACpB;AAmED,iBAAS,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,kCAAkC,QAEzF;AAED,iBAAS,EAAE,CACP,OAAO,EAAE,IAAI,EACb,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,kCAAkC,EAC3C,IAAI,GAAE,OAAe,GACtB,kCAAkC,CAGpC;AAED,iBAAS,GAAG,CACR,OAAO,EAAE,IAAI,EACb,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,kCAAkC,GAC5C,kCAAkC,CAGpC;AAED,cAAM,gBAAgB;IAClB,OAAO,UAAS;;IAEhB,IAAI;CAGP;AAGD,iBAAS,OAAO,CACZ,OAAO,EAAE,WAAW,EACpB,KAAK,EAAE,MAAM,EACb,IAAI,GAAE,GAAQ,EACd,MAAM,GAAE,MAAY,EACpB,UAAU,CAAC,EAAE,gBAAgB,QA8ChC;AAkDD,cAAM,MAAM;IACR,OAAO,CAAC,OAAO,CAAe;gBAElB,MAAM,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE;IAU3C,IAAI,MAAM,IAAI,GAAG,CAEhB;CACJ;AAED,cAAM,EAAG,SAAQ,MAAM;gBACP,MAAM,CAAC,EAAE,GAAG;CAG3B;AAED,cAAM,EAAG,SAAQ,MAAM;gBACP,MAAM,EAAE,WAAW;IAI/B,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,GAAQ,GAAG,aAAa;IAI9E,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM;IAK9C,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,kCAAkC;IAIlE,EAAE,CACE,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,kCAAkC,GAC5C,kCAAkC;IAIrC,GAAG,CACC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,kCAAkC,GAC5C,kCAAkC;IAIrC,OAAO,CACH,SAAS,EAAE,MAAM,EACjB,IAAI,GAAE,GAAQ,EACd,MAAM,GAAE,MAAY,EACpB,UAAU,CAAC,EAAE,gBAAgB;IAMjC,SAAS,IAAI,EAAE,EAAE,GAAG,IAAI;IAexB,OAAO,IAAI,EAAE,GAAG,IAAI;IAMpB,QAAQ,IAAI,EAAE,EAAE,GAAG,IAAI;IAMvB,WAAW,IAAI,EAAE,EAAE,GAAG,IAAI;CAQ7B;AA8HD,iBAAS,QAAQ,CAAC,MAAM,GAAE,OAAc,GAAG,OAAO,CAkBjD;AAID,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC"}
|
package/dist/MC.js
CHANGED
|
@@ -54,14 +54,16 @@ function one(domNode, eventName, handler) {
|
|
|
54
54
|
}
|
|
55
55
|
class BubbleController {
|
|
56
56
|
stopped = false;
|
|
57
|
-
constructor() {
|
|
58
|
-
}
|
|
57
|
+
constructor() { }
|
|
59
58
|
stop() {
|
|
60
59
|
this.stopped = true;
|
|
61
60
|
}
|
|
62
61
|
}
|
|
63
62
|
function trigger(domNode, event, data = {}, bubble = 'l', controller) {
|
|
64
|
-
const eventName = /^_mc/.test(event) ? event : getMcEventName(event), bubbleController =
|
|
63
|
+
const eventName = /^_mc/.test(event) ? event : getMcEventName(event), bubbleController = controller ? controller : new BubbleController(), ev = new CustomEvent(eventName, {
|
|
64
|
+
detail: { data, control: bubbleController },
|
|
65
|
+
bubbles: false,
|
|
66
|
+
});
|
|
65
67
|
if (bubbleController.stopped)
|
|
66
68
|
return;
|
|
67
69
|
if (/l/.test(bubble)) {
|
|
@@ -77,13 +79,13 @@ function trigger(domNode, event, data = {}, bubble = 'l', controller) {
|
|
|
77
79
|
setTimeout(() => {
|
|
78
80
|
if (bubble.indexOf('u') > -1) {
|
|
79
81
|
let parentMc = domNode.parentElement?.closest('[data-mc]');
|
|
80
|
-
if (
|
|
82
|
+
if (parentMc) {
|
|
81
83
|
parentMc?._mc.trigger(eventName, data, bubble, bubbleController);
|
|
82
84
|
}
|
|
83
85
|
}
|
|
84
86
|
if (bubble.indexOf('d') > -1) {
|
|
85
87
|
let childNodes = domNode._mc.children();
|
|
86
|
-
if (
|
|
88
|
+
if (childNodes) {
|
|
87
89
|
childNodes.forEach((_mc) => _mc.trigger(eventName, data, bubble));
|
|
88
90
|
}
|
|
89
91
|
}
|
|
@@ -101,7 +103,7 @@ function autoAttachListeners(element) {
|
|
|
101
103
|
typeof that.constructor.prototype[key] === 'function')
|
|
102
104
|
.forEach((key) => {
|
|
103
105
|
let once = /^one/.test(key), withoutOnOne = key.replace(/^on[e]{0,1}/, ''), nativeEventName = withoutOnOne.toLowerCase();
|
|
104
|
-
if (
|
|
106
|
+
if ('on' + nativeEventName in target) {
|
|
105
107
|
let listener = (ev) => {
|
|
106
108
|
that[key](ev);
|
|
107
109
|
};
|
|
@@ -122,7 +124,7 @@ function getMcChildNodes(domNode) {
|
|
|
122
124
|
domNode.setAttribute('temp_id', id);
|
|
123
125
|
const mcArray = [...domNode.querySelectorAll(selector)]
|
|
124
126
|
.filter((e) => !!e._mc)
|
|
125
|
-
.map(e => e._mc);
|
|
127
|
+
.map((e) => e._mc);
|
|
126
128
|
domNode.removeAttribute('temp_id');
|
|
127
129
|
return mcArray.length ? mcArray : null;
|
|
128
130
|
}
|
|
@@ -150,7 +152,6 @@ class DC extends McBase {
|
|
|
150
152
|
static add(target, key, element = {}) {
|
|
151
153
|
return add(target, key, element);
|
|
152
154
|
}
|
|
153
|
-
;
|
|
154
155
|
static remove(target, key) {
|
|
155
156
|
remove(target, key);
|
|
156
157
|
}
|
|
@@ -170,7 +171,7 @@ class DC extends McBase {
|
|
|
170
171
|
let currentNode = this?.target, result = [];
|
|
171
172
|
if (!isDOM(currentNode))
|
|
172
173
|
return [];
|
|
173
|
-
while (currentNode =
|
|
174
|
+
while ((currentNode = currentNode.closest('[data-mc]'))) {
|
|
174
175
|
if (currentNode?._mc) {
|
|
175
176
|
result.push(currentNode?._mc);
|
|
176
177
|
}
|
|
@@ -195,16 +196,14 @@ class DC extends McBase {
|
|
|
195
196
|
return [];
|
|
196
197
|
const mcArray = [...target.querySelectorAll('[data-mc]')]
|
|
197
198
|
.filter((e) => !!e._mc)
|
|
198
|
-
.map(e => e._mc);
|
|
199
|
+
.map((e) => e._mc);
|
|
199
200
|
return mcArray.length ? mcArray : null;
|
|
200
201
|
}
|
|
201
202
|
}
|
|
202
203
|
const loadingDCs = new Set();
|
|
203
204
|
function attachDC(element) {
|
|
204
205
|
return () => {
|
|
205
|
-
const elements = Array
|
|
206
|
-
.from(document.querySelectorAll(`[data-mc*="${element}"]`))
|
|
207
|
-
.filter(element => element instanceof HTMLElement);
|
|
206
|
+
const elements = Array.from(document.querySelectorAll(`[data-mc*="${element}"]`)).filter((element) => element instanceof HTMLElement);
|
|
208
207
|
if (elements.length === 0)
|
|
209
208
|
return;
|
|
210
209
|
const Klass = customElements.get(element);
|
|
@@ -213,14 +212,14 @@ function attachDC(element) {
|
|
|
213
212
|
DC.add(node, Klass.name, new Klass(node));
|
|
214
213
|
}
|
|
215
214
|
catch (error) {
|
|
216
|
-
if (
|
|
215
|
+
if (Klass['create']) {
|
|
217
216
|
let element = Klass.create(node);
|
|
218
217
|
element.setAttribute('data-mc', node.getAttribute('data-mc'));
|
|
219
218
|
node.replaceWith(element);
|
|
220
219
|
node = element;
|
|
221
220
|
}
|
|
222
221
|
else {
|
|
223
|
-
throw
|
|
222
|
+
throw `Class ${Klass.name} doesn't have a callable constructor AND class doesn't have a static .create() method.`;
|
|
224
223
|
}
|
|
225
224
|
}
|
|
226
225
|
const new_mc = node
|
|
@@ -233,7 +232,6 @@ function attachDC(element) {
|
|
|
233
232
|
});
|
|
234
233
|
};
|
|
235
234
|
}
|
|
236
|
-
;
|
|
237
235
|
function makeLoadScript(element) {
|
|
238
236
|
if (loadingDCs.has(element))
|
|
239
237
|
return;
|
|
@@ -259,17 +257,20 @@ function makeLoadScript(element) {
|
|
|
259
257
|
}
|
|
260
258
|
function loadUndefinedMCs() {
|
|
261
259
|
[...document.querySelectorAll(':not(:defined)')]
|
|
262
|
-
.filter((element) => !!element
|
|
263
|
-
|
|
264
|
-
|
|
260
|
+
.filter((element) => !!element &&
|
|
261
|
+
!customElements.get(element.tagName.toLowerCase()) &&
|
|
262
|
+
!loadingDCs.has(element.tagName.toLowerCase()))
|
|
265
263
|
.forEach((el) => {
|
|
266
264
|
makeLoadScript(el.tagName.toLowerCase());
|
|
267
265
|
});
|
|
268
266
|
[...document.querySelectorAll('[data-mc]:not([data-mc=""]')]
|
|
269
267
|
.filter((element) => !!element)
|
|
270
268
|
.forEach((el) => {
|
|
271
|
-
const _mc = el
|
|
272
|
-
|
|
269
|
+
const _mc = el
|
|
270
|
+
.getAttribute('data-mc')
|
|
271
|
+
?.split(' ')
|
|
272
|
+
.filter((name) => name !== '');
|
|
273
|
+
_mc?.forEach((element) => {
|
|
273
274
|
const isDefined = customElements.get(element);
|
|
274
275
|
if (!loadingDCs.has(element) && !isDefined) {
|
|
275
276
|
makeLoadScript(element);
|
package/dist/MC.min.js
CHANGED
|
@@ -87,14 +87,16 @@ function one(domNode, eventName, handler) {
|
|
|
87
87
|
}
|
|
88
88
|
class BubbleController {
|
|
89
89
|
stopped = false;
|
|
90
|
-
constructor() {
|
|
91
|
-
}
|
|
90
|
+
constructor() { }
|
|
92
91
|
stop() {
|
|
93
92
|
this.stopped = true;
|
|
94
93
|
}
|
|
95
94
|
}
|
|
96
95
|
function trigger(domNode, event, data = {}, bubble = 'l', controller) {
|
|
97
|
-
const eventName = /^_mc/.test(event) ? event : getMcEventName(event), bubbleController =
|
|
96
|
+
const eventName = /^_mc/.test(event) ? event : getMcEventName(event), bubbleController = controller ? controller : new BubbleController(), ev = new CustomEvent(eventName, {
|
|
97
|
+
detail: { data, control: bubbleController },
|
|
98
|
+
bubbles: false,
|
|
99
|
+
});
|
|
98
100
|
if (bubbleController.stopped)
|
|
99
101
|
return;
|
|
100
102
|
if (/l/.test(bubble)) {
|
|
@@ -110,13 +112,13 @@ function trigger(domNode, event, data = {}, bubble = 'l', controller) {
|
|
|
110
112
|
setTimeout(() => {
|
|
111
113
|
if (bubble.indexOf('u') > -1) {
|
|
112
114
|
let parentMc = domNode.parentElement?.closest('[data-mc]');
|
|
113
|
-
if (
|
|
115
|
+
if (parentMc) {
|
|
114
116
|
parentMc?._mc.trigger(eventName, data, bubble, bubbleController);
|
|
115
117
|
}
|
|
116
118
|
}
|
|
117
119
|
if (bubble.indexOf('d') > -1) {
|
|
118
120
|
let childNodes = domNode._mc.children();
|
|
119
|
-
if (
|
|
121
|
+
if (childNodes) {
|
|
120
122
|
childNodes.forEach((_mc) => _mc.trigger(eventName, data, bubble));
|
|
121
123
|
}
|
|
122
124
|
}
|
|
@@ -134,7 +136,7 @@ function autoAttachListeners(element) {
|
|
|
134
136
|
typeof that.constructor.prototype[key] === 'function')
|
|
135
137
|
.forEach((key) => {
|
|
136
138
|
let once = /^one/.test(key), withoutOnOne = key.replace(/^on[e]{0,1}/, ''), nativeEventName = withoutOnOne.toLowerCase();
|
|
137
|
-
if (
|
|
139
|
+
if ('on' + nativeEventName in target) {
|
|
138
140
|
let listener = (ev) => {
|
|
139
141
|
that[key](ev);
|
|
140
142
|
};
|
|
@@ -155,7 +157,7 @@ function getMcChildNodes(domNode) {
|
|
|
155
157
|
domNode.setAttribute('temp_id', id);
|
|
156
158
|
const mcArray = [...domNode.querySelectorAll(selector)]
|
|
157
159
|
.filter((e) => !!e._mc)
|
|
158
|
-
.map(e => e._mc);
|
|
160
|
+
.map((e) => e._mc);
|
|
159
161
|
domNode.removeAttribute('temp_id');
|
|
160
162
|
return mcArray.length ? mcArray : null;
|
|
161
163
|
}
|
|
@@ -183,7 +185,6 @@ class DC extends McBase {
|
|
|
183
185
|
static add(target, key, element = {}) {
|
|
184
186
|
return add(target, key, element);
|
|
185
187
|
}
|
|
186
|
-
;
|
|
187
188
|
static remove(target, key) {
|
|
188
189
|
remove(target, key);
|
|
189
190
|
}
|
|
@@ -203,7 +204,7 @@ class DC extends McBase {
|
|
|
203
204
|
let currentNode = this?.target, result = [];
|
|
204
205
|
if (!isDOM(currentNode))
|
|
205
206
|
return [];
|
|
206
|
-
while (currentNode =
|
|
207
|
+
while ((currentNode = currentNode.closest('[data-mc]'))) {
|
|
207
208
|
if (currentNode?._mc) {
|
|
208
209
|
result.push(currentNode?._mc);
|
|
209
210
|
}
|
|
@@ -228,16 +229,14 @@ class DC extends McBase {
|
|
|
228
229
|
return [];
|
|
229
230
|
const mcArray = [...target.querySelectorAll('[data-mc]')]
|
|
230
231
|
.filter((e) => !!e._mc)
|
|
231
|
-
.map(e => e._mc);
|
|
232
|
+
.map((e) => e._mc);
|
|
232
233
|
return mcArray.length ? mcArray : null;
|
|
233
234
|
}
|
|
234
235
|
}
|
|
235
236
|
const loadingDCs = new Set();
|
|
236
237
|
function attachDC(element) {
|
|
237
238
|
return () => {
|
|
238
|
-
const elements = Array
|
|
239
|
-
.from(document.querySelectorAll(`[data-mc*="${element}"]`))
|
|
240
|
-
.filter(element => element instanceof HTMLElement);
|
|
239
|
+
const elements = Array.from(document.querySelectorAll(`[data-mc*="${element}"]`)).filter((element) => element instanceof HTMLElement);
|
|
241
240
|
if (elements.length === 0)
|
|
242
241
|
return;
|
|
243
242
|
const Klass = customElements.get(element);
|
|
@@ -246,14 +245,14 @@ function attachDC(element) {
|
|
|
246
245
|
DC.add(node, Klass.name, new Klass(node));
|
|
247
246
|
}
|
|
248
247
|
catch (error) {
|
|
249
|
-
if (
|
|
248
|
+
if (Klass['create']) {
|
|
250
249
|
let element = Klass.create(node);
|
|
251
250
|
element.setAttribute('data-mc', node.getAttribute('data-mc'));
|
|
252
251
|
node.replaceWith(element);
|
|
253
252
|
node = element;
|
|
254
253
|
}
|
|
255
254
|
else {
|
|
256
|
-
throw
|
|
255
|
+
throw `Class ${Klass.name} doesn't have a callable constructor AND class doesn't have a static .create() method.`;
|
|
257
256
|
}
|
|
258
257
|
}
|
|
259
258
|
const new_mc = node
|
|
@@ -266,7 +265,6 @@ function attachDC(element) {
|
|
|
266
265
|
});
|
|
267
266
|
};
|
|
268
267
|
}
|
|
269
|
-
;
|
|
270
268
|
function makeLoadScript(element) {
|
|
271
269
|
if (loadingDCs.has(element))
|
|
272
270
|
return;
|
|
@@ -292,17 +290,20 @@ function makeLoadScript(element) {
|
|
|
292
290
|
}
|
|
293
291
|
function loadUndefinedMCs() {
|
|
294
292
|
[...document.querySelectorAll(':not(:defined)')]
|
|
295
|
-
.filter((element) => !!element
|
|
296
|
-
|
|
297
|
-
|
|
293
|
+
.filter((element) => !!element &&
|
|
294
|
+
!customElements.get(element.tagName.toLowerCase()) &&
|
|
295
|
+
!loadingDCs.has(element.tagName.toLowerCase()))
|
|
298
296
|
.forEach((el) => {
|
|
299
297
|
makeLoadScript(el.tagName.toLowerCase());
|
|
300
298
|
});
|
|
301
299
|
[...document.querySelectorAll('[data-mc]:not([data-mc=""]')]
|
|
302
300
|
.filter((element) => !!element)
|
|
303
301
|
.forEach((el) => {
|
|
304
|
-
const _mc = el
|
|
305
|
-
|
|
302
|
+
const _mc = el
|
|
303
|
+
.getAttribute('data-mc')
|
|
304
|
+
?.split(' ')
|
|
305
|
+
.filter((name) => name !== '');
|
|
306
|
+
_mc?.forEach((element) => {
|
|
306
307
|
const isDefined = customElements.get(element);
|
|
307
308
|
if (!loadingDCs.has(element) && !isDefined) {
|
|
308
309
|
makeLoadScript(element);
|