@twobirds/microcomponents 0.0.48 → 0.0.51

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 (130) hide show
  1. package/assets/Grandparent.css +13 -0
  2. package/assets/documentation/MC.md +380 -166
  3. package/assets/test.html +5 -1
  4. package/dist/MC.d.ts +1 -0
  5. package/dist/MC.d.ts.map +1 -1
  6. package/dist/MC.min.js +44 -0
  7. package/dist/MC.ts +65 -0
  8. package/dist/elements.min.js +1 -1
  9. package/dist/elements.ts +10 -10
  10. package/dist/formValues.d.ts +3 -2
  11. package/dist/formValues.d.ts.map +1 -1
  12. package/dist/formValues.ts +205 -203
  13. package/dist/formvValues.min.js +1 -1
  14. package/dist/helpers.d.ts +1 -0
  15. package/dist/helpers.d.ts.map +1 -1
  16. package/dist/helpers.ts +9 -0
  17. package/dist/microcomponents.min.js +1 -1
  18. package/dist/observables.d.ts +1 -1
  19. package/dist/observables.d.ts.map +1 -1
  20. package/dist/observables.min.js +1 -1
  21. package/dist/observables.ts +64 -31
  22. package/dist/selectors.min.js +1 -1
  23. package/dist/test.ts +8 -5
  24. package/package.json +1 -1
  25. package/public/assets/search.js +1 -1
  26. package/public/classes/MC.DC.html +13 -13
  27. package/public/classes/MC.MC.html +7 -7
  28. package/public/classes/MC.McBase.html +4 -4
  29. package/public/classes/MC.McEvent.html +13 -13
  30. package/public/classes/formValues.FormValues.html +86 -0
  31. package/public/functions/MC.addListener.html +2 -1
  32. package/public/functions/{formValues.formValues.html → MC.autoload.html} +18 -17
  33. package/public/functions/MC.removeListener.html +2 -1
  34. package/public/functions/elements.defineCE.html +1 -1
  35. package/public/functions/elements.getCE.html +1 -1
  36. package/public/functions/observables.observe.html +3 -3
  37. package/public/functions/selectors._d.html +1 -1
  38. package/public/functions/selectors._t.html +1 -1
  39. package/public/interfaces/MC.HTMLMcElement.html +2 -2
  40. package/public/interfaces/selectors.DSelector.html +55 -55
  41. package/public/interfaces/selectors.TSelector.html +37 -37
  42. package/public/modules/MC.html +3 -1
  43. package/public/modules/elements.html +1 -1
  44. package/public/modules/formValues.html +4 -4
  45. package/public/modules/observables.html +1 -1
  46. package/public/modules/selectors.html +1 -1
  47. package/public/types/observables.Observable.html +1 -1
  48. package/public/types/selectors.selection.html +1 -1
  49. package/public/types/selectors.singleSelector.html +1 -1
  50. package/src/MC.ts +65 -0
  51. package/src/elements.ts +10 -10
  52. package/src/formValues.ts +205 -203
  53. package/src/helpers.ts +9 -0
  54. package/src/observables.ts +64 -31
  55. package/src/test/Child.ts +21 -0
  56. package/src/test/Grandchild.ts +21 -0
  57. package/src/test/Grandparent.css +11 -0
  58. package/src/test/Grandparent.ts +21 -0
  59. package/src/test/Greatgrandchild.ts +42 -0
  60. package/src/test/Parent.ts +21 -0
  61. package/src/test/Testform.css +47 -0
  62. package/src/test/Testform.html +56 -0
  63. package/src/test/Testform.json +27 -0
  64. package/src/test/Testform.ts +159 -0
  65. package/src/test.ts +8 -5
  66. package/webpack.config.js +135 -61
  67. package/public/3d.html +0 -42
  68. package/public/MC.js +0 -271
  69. package/public/MC.js.map +0 -1
  70. package/public/MC.min.js +0 -407
  71. package/public/McEvent.js +0 -71
  72. package/public/McEvent.js.map +0 -1
  73. package/public/MicroComponents.svg +0 -15
  74. package/public/autoloader.js +0 -53
  75. package/public/autoloader.js.map +0 -1
  76. package/public/documentation/MC.md +0 -256
  77. package/public/documentation/ajaxian-1.png +0 -0
  78. package/public/documentation/ajaxian-2.png +0 -0
  79. package/public/documentation/ajaxian-3.png +0 -0
  80. package/public/documentation/comparision.md +0 -0
  81. package/public/documentation/elements.md +0 -276
  82. package/public/documentation/functional_requirements.md +0 -8
  83. package/public/documentation/history.md +0 -436
  84. package/public/documentation/how_tos.md +0 -0
  85. package/public/documentation/introduction.md +0 -0
  86. package/public/documentation/magic.md +0 -29
  87. package/public/documentation/proposal_draft.md +0 -37
  88. package/public/documentation/rnd0023-1.jpg +0 -0
  89. package/public/documentation/rnd0023-2.jpg +0 -0
  90. package/public/documentation/rnd0023-3.jpg +0 -0
  91. package/public/documentation/tB_react.md +0 -207
  92. package/public/documentation/usage.md +0 -142
  93. package/public/documentation/why.md +0 -25
  94. package/public/elements.js +0 -48
  95. package/public/elements.js.map +0 -1
  96. package/public/elements.min.js +0 -1
  97. package/public/fiddle/MicroComponents.svg +0 -15
  98. package/public/fiddle/fiddle.css +0 -0
  99. package/public/fiddle/fiddle.js +0 -0
  100. package/public/fiddle/index.html +0 -0
  101. package/public/formValues.js +0 -196
  102. package/public/formValues.js.map +0 -1
  103. package/public/formvValues.min.js +0 -1
  104. package/public/helpers.js +0 -105
  105. package/public/helpers.js.map +0 -1
  106. package/public/microcomponents.es3.js +0 -303
  107. package/public/microcomponents.es3.js.map +0 -1
  108. package/public/microcomponents.js +0 -9
  109. package/public/microcomponents.js.map +0 -1
  110. package/public/microcomponents.min.js +0 -1
  111. package/public/my-tag.css +0 -19
  112. package/public/observables.js +0 -239
  113. package/public/observables.js.map +0 -1
  114. package/public/observables.min.js +0 -1
  115. package/public/selectors.js +0 -971
  116. package/public/selectors.js.map +0 -1
  117. package/public/selectors.min.js +0 -1
  118. package/public/src/MC.ts +0 -413
  119. package/public/src/McEvent.ts +0 -96
  120. package/public/src/autoloader.ts +0 -98
  121. package/public/src/elements.ts +0 -76
  122. package/public/src/formValues.ts +0 -275
  123. package/public/src/helpers.ts +0 -140
  124. package/public/src/microcomponents.ts +0 -8
  125. package/public/src/observables.ts +0 -372
  126. package/public/src/selectors.ts +0 -1634
  127. package/public/src/test.ts +0 -174
  128. package/public/test.html +0 -23
  129. package/public/test.js +0 -79
  130. package/public/test.js.map +0 -1
@@ -1,98 +0,0 @@
1
- "use strict";
2
-
3
- import { getCE } from './elements.js'
4
-
5
- // set of currently loading scripts
6
- const loadingScripts: Set<string> = new Set();
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,
39
- head = document.head,
40
- allPromises: Array<any> = [],
41
- e: HTMLElement;
42
- ;
43
-
44
- if ( element instanceof HTMLTemplateElement === false ){
45
- // if node itself is undefined
46
- let data: any = _makeLoadData(element);
47
-
48
- if ( data && !data[0].matches( data[1] ) ){
49
- undefinedSet.add( data );
50
- }
51
- }
52
-
53
- // if some of the childNodes are undefined
54
- Array.from( element.childNodes ).forEach(( node )=>{
55
- let data: any = _makeLoadData(node as HTMLElement);
56
-
57
- if ( data && !data[0].matches( data[1] ) ){
58
- undefinedSet.add( data );
59
- }
60
- });
61
-
62
- if ( !!undefinedSet.size ){ // there are requirements
63
-
64
- undefinedSet.forEach( (data) => {
65
- if ( !getCE( data[3] ) && !loadingScripts.has( data[2]) ){
66
-
67
- loadingScripts.add( data[2] );
68
-
69
- const se: HTMLScriptElement = document.createElement('script');
70
-
71
- se.setAttribute( 'src', data[2] );
72
- se.setAttribute( 'blocking', 'render' );
73
- se.setAttribute( 'type', 'module' );
74
- let s = (data as any)[2];
75
- se.onload = () => {
76
- // console.info('loaded', s);
77
- loadingScripts.delete( s );
78
- };
79
-
80
- head.append( se );
81
-
82
- let e = (data as Array<any>)[0];
83
- } else {
84
- return ;
85
- }
86
- });
87
-
88
- }
89
-
90
- return Promise.all( allPromises );
91
- }
92
-
93
- /*
94
- TBD
95
- if ( template.content.childNodes.length ){
96
- _loadRequirements(template);
97
- }
98
- */
@@ -1,76 +0,0 @@
1
- "use strict";
2
-
3
- import { DC } from "./MC.js";
4
- import { kebabToPascal } from "./helpers.js";
5
-
6
- class CeBaseClass extends HTMLElement {
7
- constructor() {
8
- super();
9
- }
10
-
11
- connectedCallback() {
12
- (DC as any).trigger(this, "Connected");
13
- }
14
-
15
- disconnectedCallback() {
16
- (DC as any).trigger(this, "Disconnected");
17
- }
18
-
19
- adoptedCallback() {
20
- (DC as any).trigger(this, "Adopted");
21
- }
22
-
23
- attributeChangedCallback(name: string, oldValue: any, newValue: any) {
24
- (DC as any).trigger(this, "AttributeChanged", { name, oldValue, newValue });
25
- }
26
- }
27
-
28
- function createNamedClass(
29
- name: string,
30
- ClassBody: { new (...args: any[]): any }
31
- ) {
32
- return Object.defineProperty(ClassBody, "name", { value: name });
33
- }
34
-
35
- export function defineCE(
36
- tagName: string,
37
- DefinitionClass: { new (...args: any[]): any },
38
- observedAttributes: string[] = []
39
- ) {
40
- if (customElements.get(tagName)) {
41
- console.warn(`IGNORED: Custom element "${tagName}" is already defined!`);
42
- return;
43
- }
44
-
45
- if (!tagName.includes("-")) {
46
- throw new Error(
47
- 'createCustomElement: tagName must contain at least one hyphen ("-").'
48
- );
49
- }
50
-
51
- let name = kebabToPascal(tagName);
52
-
53
- customElements.define(
54
- tagName,
55
- createNamedClass(
56
- name,
57
- class extends CeBaseClass {
58
- instance: any;
59
-
60
- constructor(data?: any) {
61
- super();
62
- let instance = new DefinitionClass(this, data);
63
- (DC as any).add(this, name, instance);
64
- }
65
-
66
- static get observedAttributes() {
67
- return observedAttributes;
68
- }
69
- }
70
- )
71
- );
72
- }
73
-
74
- export function getCE(tagName: string): CustomElementConstructor | undefined {
75
- return customElements.get(tagName);
76
- }
@@ -1,275 +0,0 @@
1
- "use strict";
2
-
3
- import { LooseObject } from './helpers.js'
4
- import { MC, addListener } from './MC.js'
5
-
6
- type inputTypes = HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;
7
-
8
- const getInputName = ( e: HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement ): string => {
9
-
10
- let ret = e instanceof HTMLInputElement
11
- ? 'input'
12
- : e instanceof HTMLSelectElement
13
- ? 'select'
14
- : e instanceof HTMLTextAreaElement
15
- ? 'textarea'
16
- : ''
17
- ;
18
-
19
- return ret;
20
- }
21
-
22
- abstract class InputBase{
23
- constructor( e: any ){
24
- }
25
-
26
- abstract get val(): any;
27
-
28
- abstract set val( value: any );
29
-
30
- }
31
-
32
- const getInputHandlers = ( e: HTMLElement | ShadowRoot ): LooseObject => {
33
-
34
- let
35
- //inputList = ( Array.from( e.querySelectorAll('*') ) as HTMLElement[] ).filter( i => isInputElement(i) ),
36
- inputList = [ ...( e || document).querySelectorAll('input,select,textarea') ],
37
- handlers: LooseObject = {};
38
-
39
- inputList.forEach( (i) => {
40
- const
41
- name: string = ( i as inputTypes ).getAttribute('name') || 'undefined';
42
-
43
- if ( name ){
44
- let h: InputBase;
45
- switch ( getInputName( i as inputTypes ) ){
46
- case 'input':
47
- //console.log( i, 'is HTMLInputElement');
48
- h = new InputHandler( i as HTMLInputElement, e ); // e = element to search radios in = radioBase
49
- Object.defineProperty( handlers, name, {
50
- enumerable: true,
51
- configurable: true,
52
- get: (): any => { return h.val },
53
- set: ( value: any ) => { h.val = value }
54
- });
55
- break;
56
- case 'select':
57
- //console.log( i, 'is HTMLSelectElement');
58
- h = new SelectHandler( i as HTMLSelectElement );
59
- Object.defineProperty( handlers, name, {
60
- enumerable: true,
61
- configurable: true,
62
- get: (): any => { return h.val },
63
- set: ( value: any ) => { h.val = value }
64
- });
65
- break;
66
- case 'textarea':
67
- //console.log( i, 'is HTMLTextAreaElement');
68
- h = new TextAreaHandler( i as HTMLTextAreaElement );
69
- Object.defineProperty( handlers, name, {
70
- enumerable: true,
71
- configurable: true,
72
- get: (): any => { return h.val },
73
- set: ( value: any ) => { h.val = value }
74
- });
75
- break;
76
- default:
77
- console.warn('handler missing:', name, 'for', i);
78
- break;
79
- }
80
- }
81
- });
82
-
83
- return handlers;
84
- }
85
-
86
- class InputHandler extends InputBase {
87
-
88
- #e: HTMLInputElement;
89
- #type: string;
90
- #radioBase: any;
91
-
92
- constructor( e: HTMLInputElement, radioBase?: HTMLElement | ShadowRoot ){
93
- super( e );
94
- this.#e = e;
95
- this.#type = e.type;
96
- this.#radioBase = radioBase;
97
- }
98
-
99
- get val(): any{
100
- let that = this,
101
- type = that.#type,
102
- ret: any;
103
-
104
- switch (type){
105
- case 'radio':
106
- const check = [ ...(this.#radioBase || document).querySelectorAll( `input[type="radio"][name="${ this.#e.getAttribute('name') }"]` ) ]
107
- .filter( e => e.checked );
108
- if ( !check.length ) return '';
109
- ret = check?.[0];
110
- return ret.value;
111
- case 'checkbox':
112
- return that.#e.checked;
113
- default:
114
- return that.#e.value;
115
- break;
116
- }
117
-
118
- return '';
119
- }
120
-
121
- set val( value: any ){
122
- let that = this,
123
- type = that.#type,
124
- ret: any;
125
-
126
- switch (type){
127
- case 'radio':
128
- const
129
- radios = [ ...(this.#radioBase || document).querySelectorAll( `input[type="radio"][name="${ this.#e.getAttribute('name') }"]` ) ];
130
-
131
- // console.log('set radios', selection, this.#radioBase, radios.array );
132
-
133
- if ( !radios.length ) return;
134
-
135
- if ( value === '' ){ // uncheck all
136
- radios.forEach( r => { if (r.checked) r.checked = false } );
137
- //console.log('unset all radios', radios.array );
138
- return;
139
- }
140
-
141
- const setRadioElement = radios.filter( r => r.getAttribute('value') === value );
142
-
143
- if ( !setRadioElement.length ) return;
144
-
145
- // console.log('set this radio', setRadioElement.array );
146
-
147
- (setRadioElement?.[0] as HTMLInputElement).checked = true;
148
-
149
- // console.log('done', setRadioElement.array );
150
- return;
151
- break;
152
- case 'checkbox':
153
- that.#e.checked = value;
154
- break;
155
- default:
156
- that.#e.value = value;
157
- break;
158
- }
159
-
160
- return;
161
- }
162
-
163
- }
164
-
165
- class SelectHandler extends InputBase {
166
-
167
- #e: HTMLSelectElement;
168
- #multi: boolean = false;
169
-
170
- constructor( e: HTMLSelectElement ){
171
- super( e );
172
- this.#e = e;
173
- this.#multi = e.type === 'select-multiple';
174
- }
175
-
176
- get val(): string[] | string{
177
- const
178
- that = this,
179
- ret: string[] = [];
180
-
181
- // get all options
182
- const options = [ ...that.#e.querySelectorAll('option') ]
183
- .filter( o => o.selected )
184
- .forEach( o => { if ( o.selected ) ret.push( o.value ) } );
185
-
186
- if ( this.#multi ) return ret;
187
- return ret.length ? ret[0] : '';
188
- }
189
-
190
- set val( value: string[] | string ){
191
- const
192
- that = this;
193
-
194
- value = typeof value === 'string' ? [ value ] : value;
195
-
196
- //console.log('set values', value );
197
-
198
- // set all options
199
- const options = [ ...that.#e.querySelectorAll('option') ]
200
- .forEach( o => {
201
- if ( value.indexOf( o.value ) > -1 ) {
202
- o.setAttribute( 'selected', 'selected' )
203
- o.selected = true;
204
- } else {
205
- o.removeAttribute( 'selected' )
206
- o.selected = false;
207
- }
208
- });
209
-
210
- return;
211
- }
212
-
213
- }
214
-
215
- class TextAreaHandler extends InputBase {
216
- #e: HTMLTextAreaElement
217
- constructor( e: HTMLTextAreaElement ){
218
- super(e);
219
- this.#e = e;
220
- }
221
-
222
- get val(): string{
223
- return this.#e.value;
224
- }
225
-
226
- set val( value: string ){
227
- this.#e.value = value;
228
- return;
229
- }
230
-
231
- }
232
-
233
- export const formValues = ( target: HTMLElement | ShadowRoot, values: Object = {}, mc?: typeof MC, observable?: string ): LooseObject => {
234
-
235
- //console.log( 'values(', target, ',', values, ',', observable, ')' );
236
-
237
- //console.log( 'values()', values );
238
- let handlers = getInputHandlers( target );
239
-
240
- function updateForm( values: Object ){
241
- Object
242
- .keys( values )
243
- .forEach( (key) => {
244
- if ( handlers.hasOwnProperty(key) && values.hasOwnProperty(key) ) {
245
- //console.log( 'set value', key, values[key] );
246
- handlers[key] = (values as LooseObject)[key];
247
- }
248
- });
249
- }
250
-
251
- if ( Object.keys(values).length > 0 ){
252
- updateForm( values );
253
- }
254
-
255
- //console.log( 'set observable on form change', observable );
256
- if ( observable !== undefined ){
257
- let obs = ( mc as LooseObject )[observable];
258
- if ( !obs.constructor?.hasFormHandler ){
259
- obs.constructor.hasFormHandler = true;
260
- obs.observe( updateForm );
261
- }
262
-
263
- ( mc as any)[observable].observe( () => { } );
264
-
265
- [ ...target.querySelectorAll('input, textarea, select') ].forEach( ( e ) => {
266
- addListener( (e as HTMLElement), 'keyup', () => { ( mc as any)[observable] = structuredClone( Object.assign( handlers ) ) } );
267
- addListener( (e as HTMLElement), 'change', () => { ( mc as any)[observable] = structuredClone( Object.assign( handlers ) ) } );
268
- if ( (e as HTMLElement) instanceof HTMLSelectElement ){
269
- addListener( (e as HTMLElement), 'select', () => { ( mc as any)[observable] = structuredClone( Object.assign( handlers ) ) } );
270
- };
271
- });
272
- }
273
-
274
- return observable ? ( mc as any)[observable] : Object.assign( {}, handlers );
275
- }
@@ -1,140 +0,0 @@
1
- 'use strict';
2
-
3
- export interface LooseObject {
4
- [key: string | symbol]: any;
5
- }
6
-
7
- export function isNativeObject(value: any): boolean {
8
- return value && value['constructor'] && value.constructor === Object;
9
- }
10
-
11
- export function sortObject(o: LooseObject): LooseObject {
12
- let result: LooseObject = {},
13
- keys = [...Object.keys(o)].sort();
14
-
15
- keys.forEach((key) => {
16
- if (isNativeObject(o[key])) {
17
- result[key] = sortObject(o[key]);
18
- } else {
19
- result[key] = o[key];
20
- }
21
- });
22
-
23
- return result;
24
- }
25
-
26
- export function flattenObject(
27
- o: LooseObject,
28
- doSort: boolean = true
29
- ): LooseObject {
30
- let result: LooseObject = {};
31
-
32
- [...Object.getOwnPropertyNames(o)].forEach((propName) => {
33
- if (
34
- o[propName] &&
35
- o[propName]['constructor'] &&
36
- o[propName].constructor === Object
37
- ) {
38
- const temp = flattenObject(o[propName], false);
39
- for (const j in temp) {
40
- result[propName + '.' + j] = temp[j];
41
- }
42
- } else {
43
- result[propName] = o[propName];
44
- }
45
- });
46
-
47
- return doSort ? sortObject(result) : result;
48
- }
49
-
50
- export function deepEqual(o1: LooseObject, o2: LooseObject): boolean {
51
- return (
52
- JSON.stringify(flattenObject(o1)) === JSON.stringify(flattenObject(o2))
53
- );
54
- }
55
-
56
- export function nameSpace(ns: string | string[], obj: LooseObject = {}): any {
57
- let nsa = ns.constructor === String ? ns.split('.') : ns;
58
-
59
- if (!obj || !nsa[0] || !obj[nsa[0]]) {
60
- console.warn('ns', nsa[0], 'not in', obj);
61
- return;
62
- }
63
- if (obj[nsa[0]].constructor === Object && nsa.length > 1) {
64
- return nameSpace((nsa as string[]).splice(1), obj[nsa[0]]);
65
- }
66
- return obj[nsa[0]];
67
- }
68
-
69
- export function parse(what: string | Object | any[], parseThis: Object) {
70
- var args = Array.from(arguments);
71
-
72
- if (args.length > 2) {
73
- while (args.length > 1) {
74
- args[0] = parse(args[0], args[1]);
75
- args.splice(1, 1);
76
- }
77
- return args[0];
78
- }
79
-
80
- if (typeof what === 'string') {
81
- what.match(/\{[^\{\}]*\}/g)?.forEach(function (pPropname) {
82
- var propname = pPropname.substring(1, pPropname.length - 1),
83
- value = nameSpace(propname, parseThis);
84
- //console.log(propname, value);
85
- if (typeof value !== 'undefined') {
86
- what = (what as string).replace(pPropname, value);
87
- }
88
- });
89
- } else if (isNativeObject(what)) {
90
- switch (what.constructor) {
91
- case Object:
92
- Object.keys(what).forEach(function (pKey) {
93
- if (what.hasOwnProperty(pKey)) {
94
- (what as LooseObject)[pKey] = parse(
95
- (what as LooseObject)[pKey],
96
- parseThis
97
- );
98
- }
99
- });
100
- break;
101
- case Array:
102
- (what as Array<any>).forEach(function (pValue, pKey, original) {
103
- original[pKey] = parse((what as any)[pKey], parseThis);
104
- });
105
- break;
106
- }
107
- }
108
-
109
- return what;
110
- }
111
-
112
- export function kebabToPascal(str: string) {
113
- return str
114
- .split('-') // Split by hyphens
115
- .map((word) => word.charAt(0).toUpperCase() + word.slice(1)) // Capitalize each part
116
- .join(''); // Join without spaces
117
- }
118
-
119
- export function debounce(func: Function, milliseconds: number): Function {
120
- let timeout: any;
121
- return () => {
122
- clearTimeout(timeout);
123
-
124
- timeout = setTimeout(function () {
125
- func(...arguments);
126
- }, milliseconds);
127
- };
128
- }
129
-
130
- export function htmlToElements(html: string): HTMLElement[] {
131
- let template = document.createElement('template');
132
-
133
- html = html.replace(/<([A-Za-z0-9\-]*)([^>\/]*)(\/>)/gi, '<$1$2></$1>'); // replace XHTML closing tags by full closing tags
134
-
135
- template.innerHTML = html;
136
-
137
- template.content.normalize();
138
-
139
- return Array.from(template.content.childNodes) as HTMLElement[];
140
- }
@@ -1,8 +0,0 @@
1
- "use strict";
2
- export * from './helpers.js';
3
- export * from './MC.js';
4
- export * from './McEvent.js';
5
- export * from './elements.js';
6
- export * from './observables.js';
7
- export * from './selectors.js';
8
- export * from './formValues.js';