@twobirds/microcomponents 0.0.56 → 0.0.58

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 (93) hide show
  1. package/.vscode/settings.json +3 -0
  2. package/README.md +6 -2
  3. package/assets/documentation/observables.md +105 -0
  4. package/assets/test.html +1 -1
  5. package/dist/MC.d.ts.map +1 -1
  6. package/dist/MC.min.js +1 -2
  7. package/dist/MC.ts +1 -5
  8. package/dist/formValues.d.ts +1 -3
  9. package/dist/formValues.d.ts.map +1 -1
  10. package/dist/formValues.ts +24 -25
  11. package/dist/formvValues.min.js +1 -1
  12. package/dist/microcomponents.min.js +1 -1
  13. package/dist/observables.d.ts.map +1 -1
  14. package/dist/observables.min.js +1 -1
  15. package/dist/observables.ts +5 -6
  16. package/dist/test.ts +1 -1
  17. package/package.json +2 -2
  18. package/public/MC.js +1 -2
  19. package/public/MC.js.map +1 -1
  20. package/public/MC.min.js +1 -2
  21. package/public/documentation/observables.md +105 -0
  22. package/public/formValues.js +16 -18
  23. package/public/formValues.js.map +1 -1
  24. package/public/formvValues.min.js +1 -1
  25. package/public/microcomponents.min.js +1 -1
  26. package/public/observables.js +1 -2
  27. package/public/observables.js.map +1 -1
  28. package/public/observables.min.js +1 -1
  29. package/public/src/MC.ts +1 -5
  30. package/public/src/autoloader.ts +55 -55
  31. package/public/src/formValues.ts +24 -25
  32. package/public/src/observables.ts +5 -6
  33. package/public/src/test.ts +1 -1
  34. package/public/test/grandparent.js +1 -0
  35. package/public/test/testform.js +1 -0
  36. package/public/test.html +1 -1
  37. package/public/test.js +1 -1
  38. package/public/test.js.map +1 -1
  39. package/src/MC.ts +1 -5
  40. package/src/formValues.ts +24 -25
  41. package/src/observables.ts +5 -6
  42. package/src/test/{Child.ts → child.ts} +3 -3
  43. package/src/test/{Grandchild.ts → grandchild.ts} +3 -3
  44. package/src/test/{Grandparent.ts → grandparent.ts} +3 -3
  45. package/src/test/{Greatgrandchild.ts → greatgrandchild.ts} +1 -1
  46. package/src/test/{Parent.ts → parent.ts} +4 -4
  47. package/src/test/{Testform.ts → testform.ts} +5 -11
  48. package/src/test.ts +1 -1
  49. package/webpack.config.js +5 -5
  50. package/dist/autoloader.d.ts +0 -2
  51. package/dist/autoloader.d.ts.map +0 -1
  52. package/dist/autoloader.ts +0 -98
  53. package/public/assets/highlight.css +0 -99
  54. package/public/assets/main.js +0 -58
  55. package/public/assets/search.js +0 -1
  56. package/public/assets/style.css +0 -1280
  57. package/public/autoloader.js +0 -53
  58. package/public/autoloader.js.map +0 -1
  59. package/public/classes/MC.DC.html +0 -228
  60. package/public/classes/MC.MC.html +0 -171
  61. package/public/classes/MC.McBase.html +0 -117
  62. package/public/classes/MC.McEvent.html +0 -187
  63. package/public/classes/formValues.FormValues.html +0 -86
  64. package/public/functions/MC.addListener.html +0 -77
  65. package/public/functions/MC.autoload.html +0 -69
  66. package/public/functions/MC.removeListener.html +0 -73
  67. package/public/functions/elements.defineCE.html +0 -78
  68. package/public/functions/elements.getCE.html +0 -63
  69. package/public/functions/observables.observe.html +0 -65
  70. package/public/functions/selectors._d.html +0 -69
  71. package/public/functions/selectors._t.html +0 -69
  72. package/public/index.html +0 -126
  73. package/public/interfaces/MC.HTMLMcElement.html +0 -3608
  74. package/public/interfaces/selectors.DSelector.html +0 -1013
  75. package/public/interfaces/selectors.TSelector.html +0 -712
  76. package/public/modules/MC.html +0 -80
  77. package/public/modules/elements.html +0 -62
  78. package/public/modules/formValues.html +0 -60
  79. package/public/modules/observables.html +0 -65
  80. package/public/modules/selectors.html +0 -76
  81. package/public/modules.html +0 -54
  82. package/public/test/Grandparent.js +0 -1
  83. package/public/test/Testform.js +0 -1
  84. package/public/types/observables.Observable.html +0 -91
  85. package/public/types/selectors.selection.html +0 -58
  86. package/public/types/selectors.singleSelector.html +0 -58
  87. package/src/autoloader.ts +0 -98
  88. /package/assets/{Grandparent.css → grandparent.css} +0 -0
  89. /package/public/{Grandparent.css → grandparent.css} +0 -0
  90. /package/src/test/{Grandparent.css → grandparent.css} +0 -0
  91. /package/src/test/{Testform.css → testform.css} +0 -0
  92. /package/src/test/{Testform.html → testform.html} +0 -0
  93. /package/src/test/{Testform.json → testform.json} +0 -0
@@ -1,94 +1,94 @@
1
- "use strict";
1
+ 'use strict';
2
2
 
3
- import { getCE } from './elements.js'
3
+ import { getCE } from './elements.js';
4
4
 
5
5
  // set of currently loading scripts
6
6
  const loadingScripts: Set<string> = new Set();
7
7
 
8
- const _makeLoadData = ( e: HTMLElement ): Array<any> | false => {
9
-
10
- let
11
- tagName = e?.localName ?? '',
12
- isAttribute = e.getAttribute?.('is') || '',
13
- isUBE = isAttribute ? true : false,
14
- isCE = tagName.indexOf('-') !== -1 ? true : false,
15
- ubeSelector = isUBE ? `${tagName}[is=\"${isAttribute}\"]:defined` : '',
16
- ceSelector = isCE ? tagName + ':defined' : '',
17
- fileBaseName = isUBE
18
- ? isAttribute
19
- : isCE
20
- ? tagName
21
- : '',
22
- fileName = fileBaseName.length ? '/' + fileBaseName.split('-').join('/') + '.js' : '',
23
- selector = isUBE
24
- ? ubeSelector
25
- : isCE
26
- ? ceSelector
27
- : ''
28
- ;
29
-
30
- //console.log( 'makeLoadData()', tagName, isUBE, isCE, ubeSelector, ceSelector, fileBaseName, ' => ', (isUBE || isCE) ? [ e, selector, fileName ] : false );
31
- return (isUBE || isCE) ? [ e, selector, fileName, fileBaseName ] : false;
32
- }
33
-
34
- const _loadRequirements = ( node: HTMLTemplateElement | HTMLElement ): Promise<any> => {
35
-
36
- let
37
- undefinedSet: Set<any> = new Set(),
38
- element: any = node instanceof HTMLTemplateElement ? (node as HTMLTemplateElement).content : node,
8
+ const _makeLoadData = (e: HTMLElement): Array<any> | false => {
9
+ let tagName = e?.localName ?? '',
10
+ isAttribute = e.getAttribute?.('is') || '',
11
+ isUBE = isAttribute ? true : false,
12
+ isCE = tagName.indexOf('-') !== -1 ? true : false,
13
+ ubeSelector = isUBE ? `${tagName}[is=\"${isAttribute}\"]:defined` : '',
14
+ ceSelector = isCE ? tagName + ':defined' : '',
15
+ fileBaseName = isUBE ? isAttribute : isCE ? tagName : '',
16
+ fileName = fileBaseName.length
17
+ ? '/' + fileBaseName.split('-').join('/') + '.js'
18
+ : '',
19
+ selector = isUBE ? ubeSelector : isCE ? ceSelector : '';
20
+ // console.log(
21
+ // 'makeLoadData()',
22
+ // tagName,
23
+ // isUBE,
24
+ // isCE,
25
+ // ubeSelector,
26
+ // ceSelector,
27
+ // fileBaseName,
28
+ // ' => ',
29
+ // isUBE || isCE ? [e, selector, fileName] : false
30
+ // );
31
+ return isUBE || isCE ? [e, selector, fileName, fileBaseName] : false;
32
+ };
33
+
34
+ const _loadRequirements = (
35
+ node: HTMLTemplateElement | HTMLElement
36
+ ): Promise<any> => {
37
+ let undefinedSet: Set<any> = new Set(),
38
+ element: any =
39
+ node instanceof HTMLTemplateElement
40
+ ? (node as HTMLTemplateElement).content
41
+ : node,
39
42
  head = document.head,
40
43
  allPromises: Array<any> = [],
41
44
  e: HTMLElement;
42
- ;
43
-
44
- if ( element instanceof HTMLTemplateElement === false ){
45
+ if (element instanceof HTMLTemplateElement === false) {
45
46
  // if node itself is undefined
46
47
  let data: any = _makeLoadData(element);
47
48
 
48
- if ( data && !data[0].matches( data[1] ) ){
49
- undefinedSet.add( data );
49
+ if (data && !data[0].matches(data[1])) {
50
+ undefinedSet.add(data);
50
51
  }
51
52
  }
52
53
 
53
54
  // if some of the childNodes are undefined
54
- Array.from( element.childNodes ).forEach(( node )=>{
55
+ Array.from(element.childNodes).forEach((node) => {
55
56
  let data: any = _makeLoadData(node as HTMLElement);
56
57
 
57
- if ( data && !data[0].matches( data[1] ) ){
58
- undefinedSet.add( data );
58
+ if (data && !data[0].matches(data[1])) {
59
+ undefinedSet.add(data);
59
60
  }
60
61
  });
61
62
 
62
- if ( !!undefinedSet.size ){ // there are requirements
63
-
64
- undefinedSet.forEach( (data) => {
65
- if ( !getCE( data[3] ) && !loadingScripts.has( data[2]) ){
63
+ if (!!undefinedSet.size) {
64
+ // there are requirements
66
65
 
67
- loadingScripts.add( data[2] );
66
+ undefinedSet.forEach((data) => {
67
+ if (!getCE(data[3]) && !loadingScripts.has(data[2])) {
68
+ loadingScripts.add(data[2]);
68
69
 
69
70
  const se: HTMLScriptElement = document.createElement('script');
70
71
 
71
- se.setAttribute( 'src', data[2] );
72
- se.setAttribute( 'blocking', 'render' );
73
- se.setAttribute( 'type', 'module' );
72
+ se.setAttribute('src', data[2]);
73
+ se.setAttribute('blocking', 'render');
74
+ se.setAttribute('type', 'module');
74
75
  let s = (data as any)[2];
75
76
  se.onload = () => {
76
77
  // console.info('loaded', s);
77
- loadingScripts.delete( s );
78
+ loadingScripts.delete(s);
78
79
  };
79
80
 
80
- head.append( se );
81
+ head.append(se);
81
82
 
82
83
  let e = (data as Array<any>)[0];
83
84
  } else {
84
- return ;
85
+ return;
85
86
  }
86
87
  });
87
-
88
88
  }
89
89
 
90
- return Promise.all( allPromises );
91
- }
90
+ return Promise.all(allPromises);
91
+ };
92
92
 
93
93
  /*
94
94
  TBD
@@ -38,7 +38,7 @@ class RadioHandler extends InputBase {
38
38
  set val(value: string) {
39
39
  let arr = [
40
40
  ...(this.#e.form as HTMLFormElement).querySelectorAll(
41
- `input[type="radio][name="${this.#e.name}"]`
41
+ `input[type="radio"][name="${this.#e.name}"]`
42
42
  ),
43
43
  ] as HTMLInputElement[];
44
44
 
@@ -202,33 +202,32 @@ const getInputHandlers = (e: HTMLElement | ShadowRoot): LooseObject => {
202
202
  return handlers;
203
203
  };
204
204
 
205
- export class FormValues {
206
- constructor(
207
- targetObject: LooseObject,
208
- propertyName: string,
209
- dom: HTMLElement | ShadowRoot
210
- ) {
211
- let handlers = getInputHandlers(dom);
205
+ export function formValues(
206
+ targetObject: LooseObject,
207
+ propertyName: string,
208
+ dom: HTMLElement | ShadowRoot
209
+ ) {
210
+ let handlers = getInputHandlers(dom);
212
211
 
213
- targetObject[propertyName] = Object.assign({}, handlers);
212
+ targetObject[propertyName] = Object.assign({}, handlers);
214
213
 
215
- observe(targetObject, propertyName);
214
+ observe(targetObject, propertyName);
216
215
 
217
- copyGettersSetters(handlers, targetObject[propertyName]);
216
+ copyGettersSetters(handlers, targetObject[propertyName]);
218
217
 
219
- [...dom.querySelectorAll('input, textarea, select')].forEach((input) => {
220
- addListener(input as inputTypes, 'keyup', (ev: Event) => {
221
- //console.log('keyup', ev);
222
- targetObject[propertyName].notify();
223
- });
224
- addListener(input as HTMLElement, 'change', (ev: Event) => {
225
- //console.log('change', ev);
226
- targetObject[propertyName].notify();
227
- });
228
- addListener(input as inputTypes, 'select', (ev: Event) => {
229
- //console.log('select', ev);
230
- targetObject[propertyName].notify();
231
- });
218
+ [...dom.querySelectorAll('input, textarea, select')].forEach((input) => {
219
+ addListener(input as inputTypes, 'keyup', (ev: Event) => {
220
+ //console.log('keyup', ev);
221
+ targetObject[propertyName].notify();
232
222
  });
233
- }
223
+ addListener(input as HTMLElement, 'change', (ev: Event) => {
224
+ //console.log('change', ev);
225
+ targetObject[propertyName].notify();
226
+ });
227
+ addListener(input as inputTypes, 'select', (ev: Event) => {
228
+ //console.log('select', ev);
229
+ targetObject[propertyName].notify();
230
+ });
231
+ });
234
232
  }
233
+
@@ -48,14 +48,13 @@ function getPlaceholders(target: HTMLElement): string[] {
48
48
  });
49
49
  });
50
50
 
51
- // extract {}
52
- let result: string[] = [...placeholders].map((placeholder) =>
53
- placeholder.replace(/[\{\}]/g, '')
54
- );
55
-
51
+
56
52
  //console.log('getPlaceholders()', target, result);
57
53
 
58
- return [...placeholders];
54
+ // extract {} and return result
55
+ return [...placeholders].map((placeholder) =>
56
+ placeholder.replace(/[\{\}]/g, '')
57
+ );
59
58
  }
60
59
 
61
60
  const inputs = [HTMLInputElement, HTMLSelectElement, HTMLTextAreaElement];
@@ -128,7 +128,7 @@ stress test
128
128
  */
129
129
 
130
130
  let start = new Date().getTime(),
131
- max = 100;
131
+ max = 1000;
132
132
 
133
133
  // create 1000 elements
134
134
  for (let x = 0; x < max; x++) {
@@ -0,0 +1 @@
1
+ !function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.grandparent=e():t.grandparent=e()}(self,(()=>(()=>{"use strict";var t={d:(e,r)=>{for(var n in r)t.o(r,n)&&!t.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:r[n]})},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},e={};t.r(e),t.d(e,{GrandParent:()=>S});var r=new Function("try {return this===window;}catch(e){ return false;}");let n=new Set;r()&&Object.keys(HTMLElement.prototype).filter((t=>/^on/.test(t))).forEach((t=>n.add(t)));class o{#t;#e=!1;#r=!1;constructor(t,e={},r="l"){this.#t=t,this.data=e,this.bubble=r}get type(){return this.#t}get stopped(){return this.#e}get immediateStopped(){return this.#r}stopPropagation(){this.#e=!0}stopImmediatePropagation(){this.stopPropagation(),this.#r=!0}}var s=new Function("try {return this===window;}catch(e){ return false;}");let c=new Set;function i(t,e){let r=[];return t.forEach((t=>{if(t&&t instanceof HTMLElement){const n=t?._mc;!e&&n?r=r.concat(Object.values(t._mc)):e&&n&&n[e]&&r.push(n[e])}})),r}function a(t,e,r=!0){let n=[];for(;t;){if(t._mc&&(e?e&&t._mc[e]&&n.push(t._mc[e]):n=n.concat(Object.values(t._mc)),r))return n;t=t.parentNode}return n}function l(t){return t&&t instanceof HTMLElement}function u(t,e,r={}){let n=t;if(!n._mc){let e=b?.debug;b.debug=!1,n._mc=new b(t),b.debug=e,delete n._mc._mc}const o=n._mc;return e.length&&!o[e]&&(o[e]=r,t instanceof HTMLElement&&t.setAttribute("_mc","")),r}function d(t,e){if(!e)return;const r=t?._mc||{};r&&r[e]&&delete r[e],!Object.keys(r).length&&t instanceof HTMLElement&&t.hasAttribute("_mc")&&t.removeAttribute("_mc")}function p(t,e,r={},n="l"){let s=t?._mc;if(!s)return;let c=e instanceof o?new o(e.type,e.data,"l"):new o(e,r,"l"),i="string"!=typeof e?e:new o(e,r,n);[...Object.values(s)].forEach((t=>{t?.trigger&&"function"==typeof t?.trigger&&t?.trigger(c)})),/[ud]/.test(i.bubble)&&g(t,i)}function g(t,e){/[ud]/.test(e.bubble)&&setTimeout((()=>{if(-1===e.bubble.indexOf("l")&&(e.bubble+="l"),e.bubble.indexOf("u")>-1){let r=a(t,"",!0)?.[0].target;r&&b.trigger(r,e)}e.bubble.indexOf("d")>-1&&new Set(t._mc.children().map((t=>t?.target))).forEach((t=>{t&&b.trigger(t,e)}))}),0)}s()&&Object.keys(HTMLElement.prototype).filter((t=>/^on/.test(t))).forEach((t=>c.add(t)));class f{#n;constructor(t,e=!1){var r;this.#n=new WeakRef(t||{}),(r=this).constructor!==b&&setTimeout((()=>{r.trigger("Init")}),0),function(t){if(!s()||t.constructor===b)return;const e=t.target;if(e instanceof HTMLElement){let r=t;Object.getOwnPropertyNames(r.constructor.prototype).filter((t=>/^on[A-Z]|one[A-Z]/.test(t)&&"function"==typeof r.constructor.prototype[t])).forEach((n=>{let o=/^one/.test(n),s=n.replace(/^on[e]{0,1}/,""),i=s.toLowerCase();o&&Object.defineProperty(t,"on"+s,{configurable:!0,enumerable:!1,writable:!0,value:t=>{r.constructor.prototype[n].bind(r)(t)}}),c.has("on"+i)&&function(t,e,r,n=!1,o=!1){let s={once:!1};n&&(s.capture=n),o&&(s.once=o),t.addEventListener(e,r,s)}(e,i,(t=>{r.trigger(s,t)}),!1,o)}))}}(this)}get target(){return this.#n.deref()}}class m extends f{_mc={};constructor(t){super(t)}static trigger=p;trigger(t,e={},r="l"){let n=this;if(n.constructor===m||n.constructor===b){let s=t instanceof o?new o(t.type,t.data,"l"):new o(t,e,"l"),c="string"!=typeof t?t:new o(t,e,r);return[...Object.getOwnPropertyNames(n)].forEach((t=>{n[t]?.trigger&&"function"==typeof n[t]?.trigger&&n[t]?.trigger(s)})),void(/[ud]/.test(c.bubble)&&g(n.target,c))}if(n instanceof m||n instanceof b){const n=this,s="string"!=typeof t?t:new o(t,e,r),c="on"+s.type[0].toUpperCase()+s.type.slice(1);if(s.bubble.indexOf("l")>-1&&(s.immediateStopped||"function"!=typeof n[c]||(n[c](s),n.hasOwnProperty(c)&&delete n[c])),s.stopped||"l"===s.bubble)return n;/[ud]/.test(s.bubble)&&g(n.target,s)}}}class b extends f{_mc={};constructor(t,e=!1){super(t)}static add=u;static remove=d;static trigger=p;trigger(t,e={},r){m.prototype.trigger.call(this,t,e,r)}parent(t=""){let e=this.target;return l(e)?a(e.parentNode,t,!0):[]}ancestors(t=""){let e=this?.target;return l(e)?a(this.target.parentNode,t,!1):[]}children(t=""){let e=this?.target;if(!l(e))return[];const r=Math.random().toString().replace(".",""),n='[_mc]:not([temp_id="'+r+'"] [_mc] [_mc])';e.setAttribute("temp_id",r);const o=i([...e.querySelectorAll(n)],t);return e.removeAttribute("temp_id"),o}descendants(t=""){let e=this?.target;return l(e)?i([...e.querySelectorAll("*[_mc]")],t):[]}}new Map;class h extends HTMLElement{constructor(){super()}connectedCallback(){b.trigger(this,"Connected")}disconnectedCallback(){b.trigger(this,"Disconnected")}adoptedCallback(){b.trigger(this,"Adopted")}attributeChangedCallback(t,e,r){b.trigger(this,"AttributeChanged",{name:t,oldValue:e,newValue:r})}}function y(t,e,r=[]){if(customElements.get(t))return void console.warn(`IGNORED: Custom element "${t}" is already defined!`);if(!t.includes("-"))throw new Error('createCustomElement: tagName must contain at least one hyphen ("-").');let n=t.split("-").map((t=>t.charAt(0).toUpperCase()+t.slice(1))).join("");customElements.define(t,function(t,e){return Object.defineProperty(e,"name",{value:t})}(n,class extends h{instance;constructor(t){super();let r=new e(this,t);b.add(this,n,r)}static get observedAttributes(){return r}}))}function w(t){return customElements.get(t)}function _(t,e){return Math.floor(Math.random()*(e-t+1)+t)}y("test-greatgrandchild",class extends b{constructor(t){super(t)}onConnected(){this.updateStyle()}updateStyle(){this.target.setAttribute("style","border-color:rgb("+_(0,255)+","+_(0,255)+","+_(0,255)+")")}});const O=w("test-greatgrandchild");y("test-grandchild",class extends b{constructor(t){super(t)}onConnected(){let t=this;for(let e=0;e<2;e++)t.target.append(new O)}});const E=w("test-grandchild");y("test-child",class extends b{constructor(t){super(t)}onConnected(){let t=this;for(let e=0;e<10;e++)t.target.append(new E)}});const v=w("test-child");y("test-parent",class extends b{constructor(t){super(t)}onConnected(){let t=this;for(let e=0;e<5;e++)t.target.append(new v)}});const j=w("test-parent");y("test-grandparent",class extends b{constructor(t){super(t)}onConnected(){let t=this;for(let e=0;e<5;e++)t.target.append(new j)}});const S=w("test-grandparent");return e})()));
@@ -0,0 +1 @@
1
+ !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.TestTestform=t():e.TestTestform=t()}(self,(()=>(()=>{"use strict";var e=new Function("try {return this===window;}catch(e){ return false;}");let t=new Set;e()&&Object.keys(HTMLElement.prototype).filter((e=>/^on/.test(e))).forEach((e=>t.add(e)));class n{#e;#t=!1;#n=!1;constructor(e,t={},n="l"){this.#e=e,this.data=t,this.bubble=n}get type(){return this.#e}get stopped(){return this.#t}get immediateStopped(){return this.#n}stopPropagation(){this.#t=!0}stopImmediatePropagation(){this.stopPropagation(),this.#n=!0}}var a=new Function("try {return this===window;}catch(e){ return false;}");let l=new Set;function r(e,t){let n=[];return e.forEach((e=>{if(e&&e instanceof HTMLElement){const a=e?._mc;!t&&a?n=n.concat(Object.values(e._mc)):t&&a&&a[t]&&n.push(a[t])}})),n}function o(e,t,n=!0){let a=[];for(;e;){if(e._mc&&(t?t&&e._mc[t]&&a.push(e._mc[t]):a=a.concat(Object.values(e._mc)),n))return a;e=e.parentNode}return a}function i(e){return e&&e instanceof HTMLElement}function s(e,t,n,a=!1,l=!1){let r={once:!1};a&&(r.capture=a),l&&(r.once=l),e.addEventListener(t,n,r)}function c(e,t,n={}){let a=e;if(!a._mc){let t=m?.debug;m.debug=!1,a._mc=new m(e),m.debug=t,delete a._mc._mc}const l=a._mc;return t.length&&!l[t]&&(l[t]=n,e instanceof HTMLElement&&e.setAttribute("_mc","")),n}function u(e,t){if(!t)return;const n=e?._mc||{};n&&n[t]&&delete n[t],!Object.keys(n).length&&e instanceof HTMLElement&&e.hasAttribute("_mc")&&e.removeAttribute("_mc")}function p(e,t,a={},l="l"){let r=e?._mc;if(!r)return;let o=t instanceof n?new n(t.type,t.data,"l"):new n(t,a,"l"),i="string"!=typeof t?t:new n(t,a,l);[...Object.values(r)].forEach((e=>{e?.trigger&&"function"==typeof e?.trigger&&e?.trigger(o)})),/[ud]/.test(i.bubble)&&d(e,i)}function d(e,t){/[ud]/.test(t.bubble)&&setTimeout((()=>{if(-1===t.bubble.indexOf("l")&&(t.bubble+="l"),t.bubble.indexOf("u")>-1){let n=o(e,"",!0)?.[0].target;n&&m.trigger(n,t)}t.bubble.indexOf("d")>-1&&new Set(e._mc.children().map((e=>e?.target))).forEach((e=>{e&&m.trigger(e,t)}))}),0)}a()&&Object.keys(HTMLElement.prototype).filter((e=>/^on/.test(e))).forEach((e=>l.add(e)));class b{#a;constructor(e,t=!1){var n;this.#a=new WeakRef(e||{}),(n=this).constructor!==m&&setTimeout((()=>{n.trigger("Init")}),0),function(e){if(!a()||e.constructor===m)return;const t=e.target;if(t instanceof HTMLElement){let n=e;Object.getOwnPropertyNames(n.constructor.prototype).filter((e=>/^on[A-Z]|one[A-Z]/.test(e)&&"function"==typeof n.constructor.prototype[e])).forEach((a=>{let r=/^one/.test(a),o=a.replace(/^on[e]{0,1}/,""),i=o.toLowerCase();r&&Object.defineProperty(e,"on"+o,{configurable:!0,enumerable:!1,writable:!0,value:e=>{n.constructor.prototype[a].bind(n)(e)}}),l.has("on"+i)&&s(t,i,(e=>{n.trigger(o,e)}),!1,r)}))}}(this)}get target(){return this.#a.deref()}}class f extends b{_mc={};constructor(e){super(e)}static trigger=p;trigger(e,t={},a="l"){let l=this;if(l.constructor===f||l.constructor===m){let r=e instanceof n?new n(e.type,e.data,"l"):new n(e,t,"l"),o="string"!=typeof e?e:new n(e,t,a);return[...Object.getOwnPropertyNames(l)].forEach((e=>{l[e]?.trigger&&"function"==typeof l[e]?.trigger&&l[e]?.trigger(r)})),void(/[ud]/.test(o.bubble)&&d(l.target,o))}if(l instanceof f||l instanceof m){const l=this,r="string"!=typeof e?e:new n(e,t,a),o="on"+r.type[0].toUpperCase()+r.type.slice(1);if(r.bubble.indexOf("l")>-1&&(r.immediateStopped||"function"!=typeof l[o]||(l[o](r),l.hasOwnProperty(o)&&delete l[o])),r.stopped||"l"===r.bubble)return l;/[ud]/.test(r.bubble)&&d(l.target,r)}}}class m extends b{_mc={};constructor(e,t=!1){super(e)}static add=c;static remove=u;static trigger=p;trigger(e,t={},n){f.prototype.trigger.call(this,e,t,n)}parent(e=""){let t=this.target;return i(t)?o(t.parentNode,e,!0):[]}ancestors(e=""){let t=this?.target;return i(t)?o(this.target.parentNode,e,!1):[]}children(e=""){let t=this?.target;if(!i(t))return[];const n=Math.random().toString().replace(".",""),a='[_mc]:not([temp_id="'+n+'"] [_mc] [_mc])';t.setAttribute("temp_id",n);const l=r([...t.querySelectorAll(a)],e);return t.removeAttribute("temp_id"),l}descendants(e=""){let t=this?.target;return i(t)?r([...t.querySelectorAll("*[_mc]")],e):[]}}function g(e){let t={};return[...Object.keys(e)].sort().forEach((n=>{var a;(a=e[n])&&a.constructor&&a.constructor===Object?t[n]=g(e[n]):t[n]=e[n]})),t}function h(e,t=!0){let n={};return[...Object.getOwnPropertyNames(e)].forEach((t=>{if(e[t]&&e[t].constructor&&e[t].constructor===Object){const a=h(e[t],!1);for(const e in a)n[t+"."+e]=a[e]}else n[t]=e[t]})),t?g(n):n}function y(e,t){return JSON.stringify(h(e))===JSON.stringify(h(t))}function v(e,t){let n;return()=>{clearTimeout(n),n=setTimeout((function(){e(...arguments)}),t)}}function O(e,t){const n=Object.getOwnPropertyDescriptors(e);for(const[e,a]of Object.entries(n))("get"in a||"set"in a)&&Object.defineProperty(t,e,a)}new Map;class w extends HTMLElement{constructor(){super()}connectedCallback(){m.trigger(this,"Connected")}disconnectedCallback(){m.trigger(this,"Disconnected")}adoptedCallback(){m.trigger(this,"Adopted")}attributeChangedCallback(e,t,n){m.trigger(this,"AttributeChanged",{name:e,oldValue:t,newValue:n})}}function x(e){return null!=e&&"object"==typeof e}function E(e){let t=new Set,n=/\{[^\{\}]*\}/g;return e.getAttributeNames().filter((t=>e.getAttribute(t)?.match(n))).forEach((a=>{new Set(e.getAttribute(a)?.match(n)).forEach((e=>t.add(e.replace(/[\{\}]/g,""))))})),[...e.childNodes].filter((e=>3===e.nodeType&&(e.nodeValue||"").match(n))).forEach((e=>{(e.nodeValue||"").match(n).forEach((e=>{t.add(e.replace(/[\{\}]/g,""))}))})),[...t].map((e=>e.replace(/[\{\}]/g,"")))}const k=[HTMLInputElement,HTMLSelectElement,HTMLTextAreaElement];class A extends m{data={};oldDisplay="";constructor(e){super(e);let t=this;E(e).forEach((e=>t.data[e]="")),j(t),t.#l(),delete t._mc}#l(){let e=this,t=e.target,n=!1;t.getAttributeNames().filter((e=>t.getAttribute(e)?.match(/\{[^\{\}]*\}/g))).forEach((n=>{let a=new Set(t.getAttribute(n)?.match(/\{[^\{\}]*\}/g));var l;e.data.observe((l=t.getAttribute(n),e=>{let r=l;a.forEach((t=>{r=r.replace(t,e[t.replace(/[\{\}]/g,"")])})),t.setAttribute(n,r)}))})),[...t.childNodes].filter((e=>3===e.nodeType&&(e.nodeValue||"").match(/\{[^\{\}]*\}/g))).forEach((a=>{n=!0;let l=new Set(a.nodeValue.match(/\{[^\{\}]*\}/g));var r;e.data.observe((r=a.nodeValue,n=>{let o=r;l.forEach((e=>{o=o.replace(e,n[e.replace(/[\{\}]/g,"")])})),Object.keys(n).some((e=>!!n[e]))&&(e.oldDisplay?t.style=e.oldDisplay:t.removeAttribute("style"),delete e.oldDisplay),a.nodeValue=o})),e.oldDisplay=t.getAttribute("style)")||"",n&&!k.includes(t.constructor)&&"FIELDSET"!==t.tagName&&(t.style.display="none")}))}onData(e){let t=this,n={};Object.keys(e.data).forEach((a=>{t.data.hasOwnProperty(a)&&(n[a]=e.data[a])})),JSON.stringify(n)!==JSON.stringify(t.data)&&Object.assign(t.data,n)}}const j=(e,t)=>((t?[t]:[...Object.getOwnPropertyNames(e)]).forEach((t=>{if("_"===t[0]||void 0===e?.[t])return e;let n,a=e[t];if(!a.prototype)switch(typeof a){case"string":n=String;break;case"number":n=Number;break;case"boolean":n=Boolean;break;case"object":n=a instanceof Array?Array:Object;break;default:return}let l=class extends n{#r=!0;constructor(e){super(e),this.constructor.callbacks=[],x(e)&&Object.getOwnPropertyNames(e).forEach((t=>{this[t]=e[t]}))}observe(e){return this.constructor.callbacks.push(e),this}bind(e){const t=this;if(x(t.valueOf())){!function(e){var t;(t=e,(t instanceof HTMLElement?[t]:[]).concat([...t.querySelectorAll("*")]).filter((e=>!!E(e).length)).filter((e=>"STYLE"!==e.tagName))).forEach((e=>{e?._mc?._placeholders||m.add(e,"_placeholders",new A(e))}))}(e);const n=[...e.querySelectorAll("[_mc]")].filter((e=>!!e?._mc?._placeholders)),a=function(e){let t=h(e);n.forEach((e=>{e&&e._mc.trigger("data",t)}))};t.constructor.callbacks.push(a),t.notify()}else console.warn("IGNORED - cannot bind a non-Object to the dom, IS:",typeof t.valueOf(),t);return this}notify(e){let t=this,n=x(t.valueOf())&&t.valueOf()instanceof Array==0?structuredClone(Object.assign({},t)):t.valueOf();return void 0!==e&&(t.#r=e),t.constructor.callbacks.forEach((e=>{e(n)})),t}},r=new l(a);Object.defineProperty(e,t,{enumerable:!0,get(){if(x(r.valueOf())){let e=structuredClone(Object.assign({},r));setTimeout(v((function(){y(structuredClone(Object.assign({},r)),e)||r.notify()}),0),0)}return r},set(e){if(typeof e==typeof r.valueOf())if(x(r.valueOf())&&r.valueOf()instanceof Array==0){let t=structuredClone(Object.assign({},r));r instanceof l==0&&(r=new l(structuredClone(Object.assign({},e))),O(e,r),r.seal()),Object.assign(r,e),setTimeout(v((function(){y(structuredClone(Object.assign({},r)),t)||r.notify()}),0),0)}else{let t=r.valueOf(),n=r.constructor.callbacks;r=new l(e),r.constructor.callbacks=n,e!==t&&r.notify()}else console.warn("IGNORED - cannot change observable types, IS:",typeof r.valueOf(),r,"- CANNOT BECOME:",typeof e)}}),e[t]=a})),e);class S{constructor(e){}}class _ extends S{#o;constructor(e){super(e),this.#o=e}get val(){return new FormData(this.#o.form).get(this.#o.name)}set val(e){[...this.#o.form.querySelectorAll(`input[type="radio"][name="${this.#o.name}"]`)].filter((t=>t.getAttribute("value")===e)).shift().checked=!0}}class T extends S{#o;constructor(e){super(e),this.#o=e}get val(){return this.#o.checked}set val(e){this.#o.checked=e}}class N extends S{#o;constructor(e){super(e),this.#o=e}get val(){return this.#o.value}set val(e){this.#o.value=e}}class C extends S{#o;#i=!1;constructor(e){super(e),this.#o=e,this.#i=e.multiple}get val(){const e=[];return[...this.#o.querySelectorAll("option")].filter((e=>e.selected)).forEach((t=>{e.push(t.value)})),this.#i?e:e.length?e[0]:""}set val(e){e="string"==typeof e?[e]:e,[...this.#o.querySelectorAll("option")].forEach((t=>{e.indexOf(t.value)>-1?t.selected=!0:t.selected=!1}))}}class I extends S{#o;constructor(e){super(e),this.#o=e}get val(){return this.#o.value||""}set val(e){this.#o.value=e}}return function(e,t,n=[]){if(customElements.get(e))return void console.warn(`IGNORED: Custom element "${e}" is already defined!`);if(!e.includes("-"))throw new Error('createCustomElement: tagName must contain at least one hyphen ("-").');let a=e.split("-").map((e=>e.charAt(0).toUpperCase()+e.slice(1))).join("");customElements.define(e,function(e,t){return Object.defineProperty(t,"name",{value:e})}(a,class extends w{instance;constructor(e){super();let n=new t(this,e);m.add(this,a,n)}static get observedAttributes(){return n}}))}("test-testform",class extends m{data;constructor(e){super(e);const t=this;delete t._mc;let n=t.target.attachShadow({mode:"open"});n.innerHTML=`<style>${t.css}</style>${t.template}`,function(e,t,n){let a=(e=>{let t=[...(e||document).querySelectorAll("input,select,textarea")],n={};return t.forEach((e=>{const t=e.getAttribute("name");if(t){let a=!1;switch((e=>e.tagName.toLowerCase())(e)){case"input":switch(e.type){case"radio":a=new _(e);break;case"checkbox":a=new T(e);break;default:a=new N(e)}break;case"select":a=new C(e);break;case"textarea":a=new I(e);break;default:console.warn("handler missing:",t,"for",e.tagName.toLowerCase(),e)}a&&(m.add(e,t,a),Object.defineProperty(n,t,{enumerable:!0,configurable:!0,get:()=>a.val,set:e=>{a.val!==e&&(a.val=e)}}))}})),n})(n);e[t]=Object.assign({},a),j(e,t),O(a,e[t]),[...n.querySelectorAll("input, textarea, select")].forEach((n=>{s(n,"keyup",(n=>{e[t].notify()})),s(n,"change",(n=>{e[t].notify()})),s(n,"select",(n=>{e[t].notify()}))}))}(t,"data",n),t.data.bind(n)}get template(){return'\n <form>\n \x3c!-- sample form to start with --\x3e\n <fieldset>\n <legend>Inputs</legend>\n <label>text</label><input type="text" name="textInput" value="Hallo" />&nbsp;<strong>2wB:&nbsp;</strong>{textInput}\n <label>color</label><input type="color" name="colorInput" value="" />\n <label>date</label><input type="date" name="dateInput" value="" />\n <label>datetime-local</label><input type="datetime-local" name="dtlInput" value="" />\n <label>email</label><input type="email" name="email" value="" />\n <label>file</label><input type="file" name="fileInput" value="" />\n <label>hidden</label><input type="hidden" name="hiddenInput" value="hiddenVal" />\n <label>month</label><input type="month" name="month" value="" />\n <label>number</label><input type="number" name="number" value="" />\n <label>password</label><input type="password" name="passInput" value="" />\n <label>range</label><input type="range" name="rangeInput" value="" />\n <label>search</label><input type="search" name="searchInput" value="" />\n <label>tel</label><input type="tel" name="telInput" value="" />\n <label>time</label><input type="time" name="timeInput" value="" />\n <label>url</label><input type="url" name="urlInput" value="" />\n <label>week</label><input type="week" name="weekInput" value="" />\n </fieldset>\n\n <fieldset>\n <legend>Selects</legend>\n\n <label>singleSelect</label>\n <select name="singleSelect">\n <option disabled selected value> -- select -- </option>\n <option value="1">Option 1</option>\n <option value="2">Option 2</option>\n <option value="3">Option 3</option>\n <option value="4">Option 4</option>\n </select>\n\n <label>multiSelect</label>\n <select name="multiSelect" multiple="multiple" type="select-multiple">\n <option value="1">Option 1</option>\n <option value="2" selected=true>Option 2</option>\n <option value="3">Option 3</option>\n <option value="4" selected=true>Option 4</option>\n </select>\n\n </fieldset>\n\n <fieldset>\n <legend>Radiobuttons&nbsp;<strong>2wB:&nbsp;</strong><span>{myRadio}</span></legend>\n\n <label>radio1</label><input type="radio" name="myRadio" value="radio1">\n <label>radio2</label><input type="radio" name="myRadio" value="radio2">\n <label>radio3</label><input type="radio" name="myRadio" value="radio3">\n\n </fieldset>\n\n <fieldset>\n <legend>Checkboxes</legend>\n <label>cb1</label><input type="checkbox" name="cb1">\n <label>cb2</label><input type="checkbox" name="cb2">\n <label>cb3</label><input type="checkbox" name="cb3">\n <label>cb4</label><input type="checkbox" name="cb4">\n <label>cb5</label><input type="checkbox" name="cb5">\n\n </fieldset>\n\n <fieldset>\n <legend>TextArea</legend>\n <label>textArea</label>\n <textarea name="textArea">abc</textarea>\n </fieldset>\n\n </form>\n '}get css(){return"\nlegend {\n display: inherit;\n margin: inherit;\n vertical-align: inherit;\n}\n\nlabel {\n display: inline;\n margin-top: 5px;\n margin-left: 5px;\n vertical-align: top;\n width: 10em;\n text-align: right;\n}\n\nlabel::before {\n content: ' ';\n display: block;\n}\n\nform input,\nform select,\nform textarea {\n margin-left: 5px;\n margin-top: 0px;\n display: inline;\n}\n\nform label + textarea {\n display: inline-block;\n margin-top: 3px;\n}\n\nform input + label {\n width: inherit;\n margin-top: 3px;\n text-align: left;\n}\n\nbody > form {\n display: block;\n}\n\nform fieldset {\n border: 1px solid darkslategrey;\n border-radius: 3px;\n margin: 0.5em 0;\n}\n "}}),{}})()));
package/public/test.html CHANGED
@@ -11,7 +11,7 @@
11
11
  href="MicroComponents.svg"
12
12
  />
13
13
  <link href="./my-tag.css" rel="stylesheet" />
14
- <link href="./Grandparent.css" rel="stylesheet" />
14
+ <link href="./grandparent.css" rel="stylesheet" />
15
15
  <script src="./microcomponents.min.js"></script>
16
16
  <script>
17
17
  Object.assign(window, microcomponents); // make system global, for debugging
package/public/test.js CHANGED
@@ -63,7 +63,7 @@ defineCE('my-tag', class MyTag extends DC {
63
63
  }
64
64
  }, ['language']);
65
65
  let MyTag = getCE('my-tag'), fragment = new DocumentFragment();
66
- let start = new Date().getTime(), max = 100;
66
+ let start = new Date().getTime(), max = 1000;
67
67
  for (let x = 0; x < max; x++) {
68
68
  fragment.append(new MyTag());
69
69
  }
@@ -1 +1 @@
1
- {"version":3,"file":"test.js","sourceRoot":"","sources":["../src/test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"test.js","sourceRoot":"","sources":["../src/test.ts"],"names":[],"mappings":"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"}
package/src/MC.ts CHANGED
@@ -424,11 +424,7 @@ function loadit() {
424
424
  : el.getAttribute('_mc')!.trim().split(' ');
425
425
 
426
426
  load.forEach((elementName) => {
427
- let fileName: any = elementName.toLowerCase().split('-'), // intentional any
428
- lastElement = fileName[fileName.length - 1],
429
- renameLastElement =
430
- lastElement[0].toUpperCase() + lastElement.slice(1);
431
- fileName[fileName.length - 1] = renameLastElement;
427
+ let fileName: any = elementName.toLowerCase().split('-');
432
428
  fileName = fileName.join('/') + '.js';
433
429
 
434
430
  // autoload web components
package/src/formValues.ts CHANGED
@@ -38,7 +38,7 @@ class RadioHandler extends InputBase {
38
38
  set val(value: string) {
39
39
  let arr = [
40
40
  ...(this.#e.form as HTMLFormElement).querySelectorAll(
41
- `input[type="radio][name="${this.#e.name}"]`
41
+ `input[type="radio"][name="${this.#e.name}"]`
42
42
  ),
43
43
  ] as HTMLInputElement[];
44
44
 
@@ -202,33 +202,32 @@ const getInputHandlers = (e: HTMLElement | ShadowRoot): LooseObject => {
202
202
  return handlers;
203
203
  };
204
204
 
205
- export class FormValues {
206
- constructor(
207
- targetObject: LooseObject,
208
- propertyName: string,
209
- dom: HTMLElement | ShadowRoot
210
- ) {
211
- let handlers = getInputHandlers(dom);
205
+ export function formValues(
206
+ targetObject: LooseObject,
207
+ propertyName: string,
208
+ dom: HTMLElement | ShadowRoot
209
+ ) {
210
+ let handlers = getInputHandlers(dom);
212
211
 
213
- targetObject[propertyName] = Object.assign({}, handlers);
212
+ targetObject[propertyName] = Object.assign({}, handlers);
214
213
 
215
- observe(targetObject, propertyName);
214
+ observe(targetObject, propertyName);
216
215
 
217
- copyGettersSetters(handlers, targetObject[propertyName]);
216
+ copyGettersSetters(handlers, targetObject[propertyName]);
218
217
 
219
- [...dom.querySelectorAll('input, textarea, select')].forEach((input) => {
220
- addListener(input as inputTypes, 'keyup', (ev: Event) => {
221
- //console.log('keyup', ev);
222
- targetObject[propertyName].notify();
223
- });
224
- addListener(input as HTMLElement, 'change', (ev: Event) => {
225
- //console.log('change', ev);
226
- targetObject[propertyName].notify();
227
- });
228
- addListener(input as inputTypes, 'select', (ev: Event) => {
229
- //console.log('select', ev);
230
- targetObject[propertyName].notify();
231
- });
218
+ [...dom.querySelectorAll('input, textarea, select')].forEach((input) => {
219
+ addListener(input as inputTypes, 'keyup', (ev: Event) => {
220
+ //console.log('keyup', ev);
221
+ targetObject[propertyName].notify();
232
222
  });
233
- }
223
+ addListener(input as HTMLElement, 'change', (ev: Event) => {
224
+ //console.log('change', ev);
225
+ targetObject[propertyName].notify();
226
+ });
227
+ addListener(input as inputTypes, 'select', (ev: Event) => {
228
+ //console.log('select', ev);
229
+ targetObject[propertyName].notify();
230
+ });
231
+ });
234
232
  }
233
+
@@ -48,14 +48,13 @@ function getPlaceholders(target: HTMLElement): string[] {
48
48
  });
49
49
  });
50
50
 
51
- // extract {}
52
- let result: string[] = [...placeholders].map((placeholder) =>
53
- placeholder.replace(/[\{\}]/g, '')
54
- );
55
-
51
+
56
52
  //console.log('getPlaceholders()', target, result);
57
53
 
58
- return [...placeholders];
54
+ // extract {} and return result
55
+ return [...placeholders].map((placeholder) =>
56
+ placeholder.replace(/[\{\}]/g, '')
57
+ );
59
58
  }
60
59
 
61
60
  const inputs = [HTMLInputElement, HTMLSelectElement, HTMLTextAreaElement];
@@ -1,5 +1,5 @@
1
1
  import { DC, defineCE, getCE } from '.././microcomponents.js';
2
- import { TestGrandchild } from './Grandchild.js';
2
+ import { Grandchild } from './grandchild.js';
3
3
  defineCE(
4
4
  'test-child',
5
5
 
@@ -12,10 +12,10 @@ defineCE(
12
12
  let that = this;
13
13
 
14
14
  for (let x = 0; x < 10; x++) {
15
- that.target.append(new TestGrandchild!());
15
+ that.target.append(new Grandchild!());
16
16
  }
17
17
  }
18
18
  }
19
19
  );
20
20
 
21
- export const TestChild = getCE('test-child');
21
+ export const Child = getCE('test-child');
@@ -1,5 +1,5 @@
1
1
  import { DC, defineCE, getCE } from '.././microcomponents.js';
2
- import { TestGreatgrandchild } from './Greatgrandchild.js';
2
+ import { Greatgrandchild } from './greatgrandchild.js';
3
3
  defineCE(
4
4
  'test-grandchild',
5
5
 
@@ -12,10 +12,10 @@ defineCE(
12
12
  let that = this;
13
13
 
14
14
  for (let x = 0; x < 2; x++) {
15
- that.target.append(new TestGreatgrandchild!());
15
+ that.target.append(new Greatgrandchild!());
16
16
  }
17
17
  }
18
18
  }
19
19
  );
20
20
 
21
- export const TestGrandchild = getCE('test-grandchild');
21
+ export const Grandchild = getCE('test-grandchild');
@@ -1,5 +1,5 @@
1
1
  import { DC, defineCE, getCE } from '.././microcomponents.js';
2
- import { TestParent } from './Parent.js';
2
+ import { Parent } from './parent.js';
3
3
  defineCE(
4
4
  'test-grandparent',
5
5
 
@@ -12,10 +12,10 @@ defineCE(
12
12
  let that = this;
13
13
 
14
14
  for (let x = 0; x < 5; x++) {
15
- that.target.append(new TestParent!());
15
+ that.target.append(new Parent!());
16
16
  }
17
17
  }
18
18
  }
19
19
  );
20
20
 
21
- export const TestGrandparent = getCE('test-grandparent');
21
+ export const GrandParent = getCE('test-grandparent');
@@ -39,4 +39,4 @@ defineCE(
39
39
  }
40
40
  );
41
41
 
42
- export const TestGreatgrandchild = getCE('test-greatgrandchild');
42
+ export const Greatgrandchild = getCE('test-greatgrandchild');
@@ -1,9 +1,9 @@
1
1
  import { DC, defineCE, getCE } from '.././microcomponents.js';
2
- import { TestChild } from './Child.js';
2
+ import { Child } from './child.js';
3
3
  defineCE(
4
4
  'test-parent',
5
5
 
6
- class TestParent extends DC {
6
+ class Parent extends DC {
7
7
  constructor(target: HTMLElement) {
8
8
  super(target);
9
9
  }
@@ -12,10 +12,10 @@ defineCE(
12
12
  let that = this;
13
13
 
14
14
  for (let x = 0; x < 5; x++) {
15
- that.target.append(new TestChild!());
15
+ that.target.append(new Child!());
16
16
  }
17
17
  }
18
18
  }
19
19
  );
20
20
 
21
- export const TestParent = getCE('test-parent');
21
+ export const Parent = getCE('test-parent');
@@ -1,5 +1,5 @@
1
1
  'use strict';
2
- import { DC, defineCE, Observable, FormValues } from '.././microcomponents.js';
2
+ import { DC, defineCE, Observable, formValues } from '.././microcomponents.js';
3
3
 
4
4
  defineCE(
5
5
  'test-testform',
@@ -12,20 +12,14 @@ defineCE(
12
12
 
13
13
  const that = this;
14
14
 
15
- delete this._mc;
15
+ delete that._mc; // not needed
16
16
 
17
17
  let shadow = (that as DC).target.attachShadow({ mode: 'open' });
18
- shadow.innerHTML = `<style>${this.css}</style>${this.template}`;
18
+ shadow.innerHTML = `<style>${that.css}</style>${that.template}`;
19
19
 
20
- new FormValues(that, 'data', shadow);
20
+ formValues(that, 'data', shadow); // create this.data formdata observable
21
21
 
22
- (that.data as Observable).bind(shadow);
23
- }
24
-
25
- onConnected() {}
26
-
27
- oneInit() {
28
- let that = this;
22
+ (that.data as Observable).bind(shadow); // 1 way bind formdata to the form DOM
29
23
  }
30
24
 
31
25
  get template() {
package/src/test.ts CHANGED
@@ -128,7 +128,7 @@ stress test
128
128
  */
129
129
 
130
130
  let start = new Date().getTime(),
131
- max = 100;
131
+ max = 1000;
132
132
 
133
133
  // create 1000 elements
134
134
  for (let x = 0; x < max; x++) {
package/webpack.config.js CHANGED
@@ -231,13 +231,13 @@ module.exports = [
231
231
  },
232
232
  },
233
233
  {
234
- entry: './build/test/Grandparent.js',
234
+ entry: './build/test/grandparent.js',
235
235
  mode: 'production',
236
236
  output: {
237
237
  path: path.resolve(__dirname, 'public/test'),
238
- filename: 'Grandparent.js',
238
+ filename: 'grandparent.js',
239
239
  libraryTarget: 'umd',
240
- library: 'TestGrandparent',
240
+ library: 'grandparent',
241
241
  },
242
242
  module: {
243
243
  rules: [
@@ -268,11 +268,11 @@ module.exports = [
268
268
  },
269
269
  },
270
270
  {
271
- entry: './build/test/Testform.js',
271
+ entry: './build/test/testform.js',
272
272
  mode: 'production',
273
273
  output: {
274
274
  path: path.resolve(__dirname, 'public/test'),
275
- filename: 'Testform.js',
275
+ filename: 'testform.js',
276
276
  libraryTarget: 'umd',
277
277
  library: 'TestTestform',
278
278
  },
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=autoloader.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"autoloader.d.ts","sourceRoot":"","sources":["../src/autoloader.ts"],"names":[],"mappings":""}