@twobirds/microcomponents 0.0.48 → 0.0.50
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/assets/Grandparent.css +13 -0
- package/assets/documentation/MC.md +380 -166
- package/assets/test.html +5 -1
- package/dist/MC.d.ts +1 -0
- package/dist/MC.d.ts.map +1 -1
- package/dist/MC.min.js +44 -0
- package/dist/MC.ts +65 -0
- package/dist/elements.min.js +1 -1
- package/dist/elements.ts +10 -10
- package/dist/formValues.d.ts +3 -2
- package/dist/formValues.d.ts.map +1 -1
- package/dist/formValues.ts +206 -203
- package/dist/formvValues.min.js +1 -1
- package/dist/helpers.d.ts +1 -0
- package/dist/helpers.d.ts.map +1 -1
- package/dist/helpers.ts +9 -0
- package/dist/microcomponents.min.js +1 -1
- package/dist/observables.d.ts +1 -1
- package/dist/observables.d.ts.map +1 -1
- package/dist/observables.min.js +1 -1
- package/dist/observables.ts +64 -31
- package/dist/selectors.min.js +1 -1
- package/dist/test.ts +8 -5
- package/package.json +1 -1
- package/public/Grandparent.css +13 -0
- package/public/Grandparent.js +338 -0
- package/public/MC.js +43 -0
- package/public/MC.js.map +1 -1
- package/public/MC.min.js +44 -0
- package/public/TestForm.css +47 -0
- package/public/TestForm.html +56 -0
- package/public/TestForm.js +56 -0
- package/public/TestForm.json +27 -0
- package/public/Testform.js +149 -0
- package/public/classes/MC.DC.html +13 -13
- package/public/classes/MC.MC.html +7 -7
- package/public/classes/MC.McBase.html +4 -4
- package/public/classes/MC.McEvent.html +13 -13
- package/public/documentation/MC.md +380 -166
- package/public/documentation/observe.md +317 -0
- package/public/elements.js +9 -9
- package/public/elements.js.map +1 -1
- package/public/elements.min.js +1 -1
- package/public/formValues.js +142 -133
- package/public/formValues.js.map +1 -1
- package/public/formvValues.min.js +1 -1
- package/public/functions/MC.addListener.html +1 -1
- package/public/functions/MC.removeListener.html +1 -1
- package/public/functions/elements.defineCE.html +1 -1
- package/public/functions/elements.getCE.html +1 -1
- package/public/functions/formValues.formValues.html +1 -1
- package/public/functions/observables.observe.html +1 -1
- package/public/functions/selectors._d.html +1 -1
- package/public/functions/selectors._t.html +1 -1
- package/public/helpers.js +8 -0
- package/public/helpers.js.map +1 -1
- package/public/interfaces/MC.HTMLMcElement.html +2 -2
- package/public/interfaces/selectors.DSelector.html +55 -55
- package/public/interfaces/selectors.TSelector.html +37 -37
- package/public/microcomponents.min.js +1 -1
- package/public/modules/MC.html +1 -1
- package/public/modules/elements.html +1 -1
- package/public/modules/formValues.html +1 -1
- package/public/modules/observables.html +1 -1
- package/public/modules/selectors.html +1 -1
- package/public/observables.js +31 -19
- package/public/observables.js.map +1 -1
- package/public/observables.min.js +1 -1
- package/public/selectors.min.js +1 -1
- package/public/src/MC.ts +65 -0
- package/public/src/elements.ts +10 -10
- package/public/src/formValues.ts +206 -203
- package/public/src/helpers.ts +9 -0
- package/public/src/observables.ts +64 -31
- package/public/src/test.ts +8 -5
- package/public/test/Grandparent.js +1 -0
- package/public/test/Testform.js +1 -0
- package/public/test.html +5 -1
- package/public/test.js +3 -4
- package/public/test.js.map +1 -1
- package/public/types/observables.Observable.html +1 -1
- package/public/types/selectors.selection.html +1 -1
- package/public/types/selectors.singleSelector.html +1 -1
- package/src/MC.ts +65 -0
- package/src/elements.ts +10 -10
- package/src/formValues.ts +206 -203
- package/src/helpers.ts +9 -0
- package/src/observables.ts +64 -31
- package/src/test/Child.ts +21 -0
- package/src/test/Grandchild.ts +21 -0
- package/src/test/Grandparent.css +11 -0
- package/src/test/Grandparent.ts +21 -0
- package/src/test/Greatgrandchild.ts +42 -0
- package/src/test/Parent.ts +21 -0
- package/src/test/Testform.css +47 -0
- package/src/test/Testform.html +56 -0
- package/src/test/Testform.json +27 -0
- package/src/test/Testform.ts +159 -0
- package/src/test.ts +8 -5
- package/webpack.config.js +135 -61
package/dist/formValues.ts
CHANGED
|
@@ -1,275 +1,278 @@
|
|
|
1
|
-
|
|
1
|
+
'use strict';
|
|
2
2
|
|
|
3
|
-
import { LooseObject } from './helpers.js'
|
|
4
|
-
import {
|
|
3
|
+
import { LooseObject, copyGettersSetters } from './helpers.js';
|
|
4
|
+
import { DC, HTMLMcElement, addListener } from './MC.js';
|
|
5
|
+
import { Observable, observe } from './observables.js';
|
|
5
6
|
|
|
6
7
|
type inputTypes = HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;
|
|
7
8
|
|
|
8
|
-
const getInputName = (
|
|
9
|
+
const getInputName = (
|
|
10
|
+
e: HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement
|
|
11
|
+
): string => {
|
|
12
|
+
return e.tagName.toLowerCase();
|
|
13
|
+
};
|
|
9
14
|
|
|
10
|
-
|
|
11
|
-
|
|
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
|
-
}
|
|
15
|
+
abstract class InputBase {
|
|
16
|
+
constructor(e: inputTypes) {}
|
|
25
17
|
|
|
26
18
|
abstract get val(): any;
|
|
27
19
|
|
|
28
|
-
abstract set val(
|
|
29
|
-
|
|
20
|
+
abstract set val(value: any);
|
|
30
21
|
}
|
|
31
22
|
|
|
32
|
-
|
|
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
|
-
|
|
23
|
+
class RadioHandler extends InputBase {
|
|
88
24
|
#e: HTMLInputElement;
|
|
89
|
-
#
|
|
90
|
-
#radioBase: any;
|
|
25
|
+
#form: HTMLFormElement;
|
|
91
26
|
|
|
92
|
-
constructor(
|
|
93
|
-
super(
|
|
27
|
+
constructor(e: HTMLInputElement, form: HTMLFormElement) {
|
|
28
|
+
super(e);
|
|
94
29
|
this.#e = e;
|
|
95
|
-
this.#
|
|
96
|
-
this.#radioBase = radioBase;
|
|
30
|
+
this.#form = form;
|
|
97
31
|
}
|
|
98
32
|
|
|
99
|
-
get val():
|
|
100
|
-
let
|
|
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
|
-
}
|
|
33
|
+
get val(): string {
|
|
34
|
+
let ret = new FormData(this.#form).get(this.#e.name);
|
|
117
35
|
|
|
118
|
-
|
|
36
|
+
//console.log('radio[', this.#e.name, '] = "' + ret + '"');
|
|
37
|
+
return ret as string;
|
|
119
38
|
}
|
|
120
39
|
|
|
121
|
-
set val(
|
|
122
|
-
let
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
40
|
+
set val(value: string) {
|
|
41
|
+
let arr = [
|
|
42
|
+
...this.#form.querySelectorAll(
|
|
43
|
+
`input[type="radio][name="${this.#e.name}"]`
|
|
44
|
+
),
|
|
45
|
+
] as HTMLInputElement[];
|
|
46
|
+
|
|
47
|
+
(
|
|
48
|
+
arr
|
|
49
|
+
.filter((e) => e.getAttribute('value') === value)
|
|
50
|
+
.shift() as HTMLInputElement
|
|
51
|
+
).checked = true;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
134
54
|
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
//console.log('unset all radios', radios.array );
|
|
138
|
-
return;
|
|
139
|
-
}
|
|
55
|
+
class CheckboxHandler extends InputBase {
|
|
56
|
+
#e: HTMLInputElement;
|
|
140
57
|
|
|
141
|
-
|
|
58
|
+
constructor(e: HTMLInputElement) {
|
|
59
|
+
super(e);
|
|
60
|
+
this.#e = e;
|
|
61
|
+
}
|
|
142
62
|
|
|
143
|
-
|
|
63
|
+
get val(): boolean {
|
|
64
|
+
return this.#e.checked;
|
|
65
|
+
}
|
|
144
66
|
|
|
145
|
-
|
|
67
|
+
set val(value: boolean) {
|
|
68
|
+
this.#e.checked = value;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
146
71
|
|
|
147
|
-
|
|
72
|
+
class InputHandler extends InputBase {
|
|
73
|
+
#e: HTMLInputElement;
|
|
148
74
|
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
that.#e.checked = value;
|
|
154
|
-
break;
|
|
155
|
-
default:
|
|
156
|
-
that.#e.value = value;
|
|
157
|
-
break;
|
|
158
|
-
}
|
|
75
|
+
constructor(e: HTMLInputElement) {
|
|
76
|
+
super(e);
|
|
77
|
+
this.#e = e;
|
|
78
|
+
}
|
|
159
79
|
|
|
160
|
-
|
|
80
|
+
get val(): string {
|
|
81
|
+
return this.#e.value;
|
|
161
82
|
}
|
|
162
83
|
|
|
84
|
+
set val(value: string) {
|
|
85
|
+
this.#e.value = value;
|
|
86
|
+
}
|
|
163
87
|
}
|
|
164
88
|
|
|
165
89
|
class SelectHandler extends InputBase {
|
|
166
|
-
|
|
167
90
|
#e: HTMLSelectElement;
|
|
168
91
|
#multi: boolean = false;
|
|
169
92
|
|
|
170
|
-
constructor(
|
|
171
|
-
super(
|
|
93
|
+
constructor(e: HTMLSelectElement) {
|
|
94
|
+
super(e);
|
|
172
95
|
this.#e = e;
|
|
173
|
-
this.#multi = e.
|
|
96
|
+
this.#multi = e.multiple;
|
|
174
97
|
}
|
|
175
98
|
|
|
176
|
-
get val(): string[] | string{
|
|
177
|
-
const
|
|
178
|
-
that = this,
|
|
99
|
+
get val(): string[] | string {
|
|
100
|
+
const that = this,
|
|
179
101
|
ret: string[] = [];
|
|
180
102
|
|
|
181
103
|
// get all options
|
|
182
|
-
const options = [
|
|
183
|
-
.filter(
|
|
184
|
-
.forEach(
|
|
104
|
+
const options = [...that.#e.querySelectorAll('option')]
|
|
105
|
+
.filter((o) => o.selected)
|
|
106
|
+
.forEach((o) => {
|
|
107
|
+
if (o.selected) ret.push(o.value);
|
|
108
|
+
});
|
|
185
109
|
|
|
186
|
-
if (
|
|
110
|
+
if (this.#multi) return ret;
|
|
187
111
|
return ret.length ? ret[0] : '';
|
|
188
112
|
}
|
|
189
113
|
|
|
190
|
-
set val(
|
|
191
|
-
const
|
|
192
|
-
that = this;
|
|
193
|
-
|
|
194
|
-
value = typeof value === 'string' ? [ value ] : value;
|
|
114
|
+
set val(value: string[] | string) {
|
|
115
|
+
const that = this;
|
|
195
116
|
|
|
196
|
-
|
|
117
|
+
value = typeof value === 'string' ? [value] : value;
|
|
197
118
|
|
|
198
119
|
// set all options
|
|
199
|
-
const options =
|
|
200
|
-
.
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
});
|
|
120
|
+
const options = [...that.#e.querySelectorAll('option')].forEach((o) => {
|
|
121
|
+
if (value.indexOf(o.value) > -1) {
|
|
122
|
+
o.setAttribute('selected', 'selected');
|
|
123
|
+
o.selected = true;
|
|
124
|
+
} else {
|
|
125
|
+
o.removeAttribute('selected');
|
|
126
|
+
o.selected = false;
|
|
127
|
+
}
|
|
128
|
+
});
|
|
209
129
|
|
|
210
130
|
return;
|
|
211
131
|
}
|
|
212
|
-
|
|
213
132
|
}
|
|
214
133
|
|
|
215
134
|
class TextAreaHandler extends InputBase {
|
|
216
|
-
#e: HTMLTextAreaElement
|
|
217
|
-
constructor(
|
|
135
|
+
#e: HTMLTextAreaElement;
|
|
136
|
+
constructor(e: HTMLTextAreaElement) {
|
|
218
137
|
super(e);
|
|
219
138
|
this.#e = e;
|
|
220
139
|
}
|
|
221
140
|
|
|
222
|
-
get val(): string{
|
|
223
|
-
return this.#e.value;
|
|
141
|
+
get val(): string {
|
|
142
|
+
return this.#e.value || '';
|
|
224
143
|
}
|
|
225
144
|
|
|
226
|
-
set val(
|
|
145
|
+
set val(value: string) {
|
|
227
146
|
this.#e.value = value;
|
|
228
147
|
return;
|
|
229
148
|
}
|
|
230
|
-
|
|
231
149
|
}
|
|
232
150
|
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
151
|
+
const getInputHandlers = (e: HTMLElement | ShadowRoot): LooseObject => {
|
|
152
|
+
let inputList = [
|
|
153
|
+
...(e || document).querySelectorAll('input,select,textarea'),
|
|
154
|
+
],
|
|
155
|
+
handlers: LooseObject = {};
|
|
156
|
+
|
|
157
|
+
inputList.forEach((i) => {
|
|
158
|
+
const name: string = (i as inputTypes).getAttribute('name') || 'undefined';
|
|
159
|
+
// console.log(name);
|
|
160
|
+
if (name) {
|
|
161
|
+
let h: InputBase,
|
|
162
|
+
type = (i as HTMLInputElement).type,
|
|
163
|
+
handler: any,
|
|
164
|
+
setter: DC;
|
|
165
|
+
switch (getInputName(i as inputTypes)) {
|
|
166
|
+
case 'input':
|
|
167
|
+
switch (type) {
|
|
168
|
+
case 'radio':
|
|
169
|
+
handler = new RadioHandler(
|
|
170
|
+
i as HTMLInputElement,
|
|
171
|
+
(e.constructor === HTMLFormElement
|
|
172
|
+
? e
|
|
173
|
+
: e.querySelector('form')) as HTMLFormElement
|
|
174
|
+
);
|
|
175
|
+
setter = DC.add(i, name, handler);
|
|
176
|
+
break;
|
|
177
|
+
case 'checkbox':
|
|
178
|
+
handler = new CheckboxHandler(i as HTMLInputElement);
|
|
179
|
+
setter = DC.add(i, name, handler);
|
|
180
|
+
break;
|
|
181
|
+
default:
|
|
182
|
+
handler = new InputHandler(i as HTMLInputElement);
|
|
183
|
+
setter = DC.add(i, name, handler);
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
Object.defineProperty(handlers, name, {
|
|
187
|
+
enumerable: true,
|
|
188
|
+
configurable: true,
|
|
189
|
+
get: (): any => {
|
|
190
|
+
return (setter as unknown as SelectHandler).val;
|
|
191
|
+
},
|
|
192
|
+
set: (value: any) => {
|
|
193
|
+
if ((setter as unknown as InputHandler).val !== value) {
|
|
194
|
+
(setter as unknown as InputHandler).val = value;
|
|
195
|
+
}
|
|
196
|
+
},
|
|
197
|
+
});
|
|
198
|
+
|
|
199
|
+
break;
|
|
200
|
+
case 'select':
|
|
201
|
+
handler = new SelectHandler(i as HTMLSelectElement);
|
|
202
|
+
setter = DC.add(i, name, handler);
|
|
203
|
+
Object.defineProperty(handlers, name, {
|
|
204
|
+
enumerable: true,
|
|
205
|
+
configurable: true,
|
|
206
|
+
get: (): any => {
|
|
207
|
+
return (setter as unknown as SelectHandler).val;
|
|
208
|
+
},
|
|
209
|
+
set: (value: any) => {
|
|
210
|
+
if ((setter as unknown as SelectHandler).val !== value) {
|
|
211
|
+
(setter as unknown as SelectHandler).val = value;
|
|
212
|
+
}
|
|
213
|
+
},
|
|
214
|
+
});
|
|
215
|
+
break;
|
|
216
|
+
case 'textarea':
|
|
217
|
+
handler = new TextAreaHandler(i as HTMLTextAreaElement);
|
|
218
|
+
setter = DC.add(i, name, handler);
|
|
219
|
+
Object.defineProperty(handlers, name, {
|
|
220
|
+
enumerable: true,
|
|
221
|
+
configurable: true,
|
|
222
|
+
get: (): any => {
|
|
223
|
+
return (setter as unknown as TextAreaHandler).val;
|
|
224
|
+
},
|
|
225
|
+
set: (value: any) => {
|
|
226
|
+
if ((setter as unknown as TextAreaHandler).val !== value) {
|
|
227
|
+
(setter as unknown as TextAreaHandler).val = value;
|
|
228
|
+
}
|
|
229
|
+
},
|
|
230
|
+
});
|
|
231
|
+
break;
|
|
232
|
+
default:
|
|
233
|
+
console.warn(
|
|
234
|
+
'handler missing:',
|
|
235
|
+
name,
|
|
236
|
+
'for',
|
|
237
|
+
i.tagName.toLowerCase(),
|
|
238
|
+
i
|
|
239
|
+
);
|
|
240
|
+
break;
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
});
|
|
236
244
|
|
|
237
|
-
|
|
238
|
-
|
|
245
|
+
return handlers;
|
|
246
|
+
};
|
|
239
247
|
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
});
|
|
249
|
-
}
|
|
248
|
+
export class FormValues {
|
|
249
|
+
constructor(
|
|
250
|
+
targetObject: LooseObject,
|
|
251
|
+
propertyName: string,
|
|
252
|
+
dom: HTMLElement | ShadowRoot
|
|
253
|
+
) {
|
|
254
|
+
let that = this,
|
|
255
|
+
handlers = getInputHandlers(dom);
|
|
250
256
|
|
|
251
|
-
|
|
252
|
-
updateForm( values );
|
|
253
|
-
}
|
|
257
|
+
targetObject[propertyName] = Object.assign({}, handlers);
|
|
254
258
|
|
|
255
|
-
|
|
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
|
-
}
|
|
259
|
+
observe(targetObject, propertyName);
|
|
262
260
|
|
|
263
|
-
(
|
|
261
|
+
copyGettersSetters(handlers, targetObject[propertyName]);
|
|
264
262
|
|
|
265
|
-
[
|
|
266
|
-
addListener(
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
263
|
+
[...dom.querySelectorAll('input, textarea, select')].forEach((input) => {
|
|
264
|
+
addListener(input as inputTypes, 'keyup', (ev: Event) => {
|
|
265
|
+
//console.log('keyup', ev);
|
|
266
|
+
targetObject[propertyName].notify();
|
|
267
|
+
});
|
|
268
|
+
addListener(input as HTMLElement, 'change', (ev: Event) => {
|
|
269
|
+
//console.log('change', ev);
|
|
270
|
+
targetObject[propertyName].notify();
|
|
271
|
+
});
|
|
272
|
+
addListener(input as inputTypes, 'select', (ev: Event) => {
|
|
273
|
+
//console.log('select', ev);
|
|
274
|
+
targetObject[propertyName].notify();
|
|
275
|
+
});
|
|
271
276
|
});
|
|
272
277
|
}
|
|
273
|
-
|
|
274
|
-
return observable ? ( mc as any)[observable] : Object.assign( {}, handlers );
|
|
275
278
|
}
|
package/dist/formvValues.min.js
CHANGED
|
@@ -1 +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.formValues=t():e.formValues=t()}(this,(()=>(()=>{"use strict";var e={d:(t,r)=>{for(var n in r)e.o(r,n)&&!e.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:r[n]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};e.r(t),e.d(t,{formValues:()=>d});var r=new Function("try {return this===window;}catch(e){ return false;}");let n=new Set;r()&&Object.keys(HTMLElement.prototype).filter((e=>/^on/.test(e))).forEach((e=>n.add(e)));var o=new Function("try {return this===window;}catch(e){ return false;}");let s=new Set;function c(e,t,r,n=!1,o=!1){let s={once:!1};n&&(s.capture=n),o&&(s.once=o),e.addEventListener(t,r,s)}o()&&Object.keys(HTMLElement.prototype).filter((e=>/^on/.test(e))).forEach((e=>s.add(e)));class l{constructor(e){}}class a extends l{#e;#t;#r;constructor(e,t){super(e),this.#e=e,this.#t=e.type,this.#r=t}get val(){let e,t=this;switch(t.#t){case"radio":const r=[...(this.#r||document).querySelectorAll(`input[type="radio"][name="${this.#e.getAttribute("name")}"]`)].filter((e=>e.checked));return r.length?(e=r?.[0],e.value):"";case"checkbox":return t.#e.checked;default:return t.#e.value}return""}set val(e){let t=this;switch(t.#t){case"radio":const r=[...(this.#r||document).querySelectorAll(`input[type="radio"][name="${this.#e.getAttribute("name")}"]`)];if(!r.length)return;if(""===e)return void r.forEach((e=>{e.checked&&(e.checked=!1)}));const n=r.filter((t=>t.getAttribute("value")===e));if(!n.length)return;return void((n?.[0]).checked=!0);case"checkbox":t.#e.checked=e;break;default:t.#e.value=e}}}class i extends l{#e;#n=!1;constructor(e){super(e),this.#e=e,this.#n="select-multiple"===e.type}get val(){const e=[];return[...this.#e.querySelectorAll("option")].filter((e=>e.selected)).forEach((t=>{t.selected&&e.push(t.value)})),this.#n?e:e.length?e[0]:""}set val(e){e="string"==typeof e?[e]:e,[...this.#e.querySelectorAll("option")].forEach((t=>{e.indexOf(t.value)>-1?(t.setAttribute("selected","selected"),t.selected=!0):(t.removeAttribute("selected"),t.selected=!1)}))}}class u extends l{#e;constructor(e){super(e),this.#e=e}get val(){return this.#e.value}set val(e){this.#e.value=e}}const d=(e,t={},r,n)=>{let o=(e=>{let t=[...(e||document).querySelectorAll("input,select,textarea")],r={};return t.forEach((t=>{const n=t.getAttribute("name")||"undefined";if(n){let o;switch((e=>e instanceof HTMLInputElement?"input":e instanceof HTMLSelectElement?"select":e instanceof HTMLTextAreaElement?"textarea":"")(t)){case"input":o=new a(t,e),Object.defineProperty(r,n,{enumerable:!0,configurable:!0,get:()=>o.val,set:e=>{o.val=e}});break;case"select":o=new i(t),Object.defineProperty(r,n,{enumerable:!0,configurable:!0,get:()=>o.val,set:e=>{o.val=e}});break;case"textarea":o=new u(t),Object.defineProperty(r,n,{enumerable:!0,configurable:!0,get:()=>o.val,set:e=>{o.val=e}});break;default:console.warn("handler missing:",n,"for",t)}}})),r})(e);function s(e){Object.keys(e).forEach((t=>{o.hasOwnProperty(t)&&e.hasOwnProperty(t)&&(o[t]=e[t])}))}if(Object.keys(t).length>0&&s(t),void 0!==n){let t=r[n];t.constructor?.hasFormHandler||(t.constructor.hasFormHandler=!0,t.observe(s)),r[n].observe((()=>{})),[...e.querySelectorAll("input, textarea, select")].forEach((e=>{c(e,"keyup",(()=>{r[n]=structuredClone(Object.assign(o))})),c(e,"change",(()=>{r[n]=structuredClone(Object.assign(o))})),e instanceof HTMLSelectElement&&c(e,"select",(()=>{r[n]=structuredClone(Object.assign(o))}))}))}return n?r[n]:Object.assign({},o)};return t})()));
|
|
1
|
+
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.formValues=t():e.formValues=t()}(this,(()=>(()=>{"use strict";var e={d:(t,r)=>{for(var n in r)e.o(r,n)&&!e.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:r[n]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};function r(e){let t={};return[...Object.keys(e)].sort().forEach((n=>{var o;(o=e[n])&&o.constructor&&o.constructor===Object?t[n]=r(e[n]):t[n]=e[n]})),t}function n(e,t=!0){let o={};return[...Object.getOwnPropertyNames(e)].forEach((t=>{if(e[t]&&e[t].constructor&&e[t].constructor===Object){const r=n(e[t],!1);for(const e in r)o[t+"."+e]=r[e]}else o[t]=e[t]})),t?r(o):o}function o(e,t){return JSON.stringify(n(e))===JSON.stringify(n(t))}function c(e,t){let r;return()=>{clearTimeout(r),r=setTimeout((function(){e(...arguments)}),t)}}function a(e,t){const r=Object.getOwnPropertyDescriptors(e);for(const[e,n]of Object.entries(r))("get"in n||"set"in n)&&Object.defineProperty(t,e,n)}e.r(t),e.d(t,{FormValues:()=>C});var s=new Function("try {return this===window;}catch(e){ return false;}");let l=new Set;s()&&Object.keys(HTMLElement.prototype).filter((e=>/^on/.test(e))).forEach((e=>l.add(e)));class i{#e;#t=!1;#r=!1;constructor(e,t={},r="l"){this.#e=e,this.data=t,this.bubble=r}get type(){return this.#e}get stopped(){return this.#t}get immediateStopped(){return this.#r}stopPropagation(){this.#t=!0}stopImmediatePropagation(){this.stopPropagation(),this.#r=!0}}var u=new Function("try {return this===window;}catch(e){ return false;}");let f=new Set;function d(e,t){let r=[];return e.forEach((e=>{if(e&&e instanceof HTMLElement){const n=e?._mc;!t&&n?r=r.concat(Object.values(e._mc)):t&&n&&n[t]&&r.push(n[t])}})),r}function p(e,t,r=!0){let n=[];for(;e;){if(e._mc&&(t?t&&e._mc[t]&&n.push(e._mc[t]):n=n.concat(Object.values(e._mc)),r))return n;e=e.parentNode}return n}function b(e){return e&&e instanceof HTMLElement}function g(e,t,r,n=!1,o=!1){let c={once:!1};n&&(c.capture=n),o&&(c.once=o),e.addEventListener(t,r,c)}function h(e,t,r={}){let n=e;if(!n._mc){let t=E?.debug;E.debug=!1,n._mc=new E(e),E.debug=t,delete n._mc._mc}const o=n._mc;return t.length&&!o[t]&&(o[t]=r,e instanceof HTMLElement&&e.setAttribute("_mc","")),r}function m(e,t){if(!t)return;const r=e?._mc||{};r&&r[t]&&delete r[t],!Object.keys(r).length&&e instanceof HTMLElement&&e.hasAttribute("_mc")&&e.removeAttribute("_mc")}function y(e,t,r={},n="l"){let o=e?._mc;if(!o)return;let c=t instanceof i?new i(t.type,t.data,"l"):new i(t,r,"l"),a="string"!=typeof t?t:new i(t,r,n);[...Object.values(o)].forEach((e=>{e?.trigger&&"function"==typeof e?.trigger&&e?.trigger(c)})),/[ud]/.test(a.bubble)&&O(e,a)}function O(e,t){/[ud]/.test(t.bubble)&&setTimeout((()=>{if(-1===t.bubble.indexOf("l")&&(t.bubble+="l"),t.bubble.indexOf("u")>-1){let r=p(e,"",!0)?.[0].target;r&&E.trigger(r,t)}t.bubble.indexOf("d")>-1&&new Set(e._mc.children().map((e=>e?.target))).forEach((e=>{e&&E.trigger(e,t)}))}),0)}u()&&Object.keys(HTMLElement.prototype).filter((e=>/^on/.test(e))).forEach((e=>f.add(e)));class v{#n;constructor(e,t=!1){var r;this.#n=new WeakRef(e||{}),(r=this).constructor!==E&&setTimeout((()=>{r.trigger("Init")}),0),function(e){if(!u()||e.constructor===E)return;const t=e.target;if(t instanceof HTMLElement){let r=e;Object.getOwnPropertyNames(r.constructor.prototype).filter((e=>/^on[A-Z]|one[A-Z]/.test(e)&&"function"==typeof r.constructor.prototype[e])).forEach((n=>{let o=/^one/.test(n),c=n.replace(/^on[e]{0,1}/,""),a=c.toLowerCase();o&&Object.defineProperty(e,"on"+c,{configurable:!0,enumerable:!1,writable:!0,value:e=>{r.constructor.prototype[n].bind(r)(e)}}),f.has("on"+a)&&g(t,a,(e=>{r.trigger(c,e)}),!1,o)}))}}(this)}get target(){return this.#n.deref()}}class w extends v{_mc={};constructor(e){super(e)}static trigger=y;trigger(e,t={},r="l"){let n=this;if(n.constructor===w||n.constructor===E){let o=e instanceof i?new i(e.type,e.data,"l"):new i(e,t,"l"),c="string"!=typeof e?e:new i(e,t,r);return[...Object.getOwnPropertyNames(n)].forEach((e=>{n[e]?.trigger&&"function"==typeof n[e]?.trigger&&n[e]?.trigger(o)})),void(/[ud]/.test(c.bubble)&&O(n.target,c))}if(n instanceof w||n instanceof E){const n=this,o="string"!=typeof e?e:new i(e,t,r),c="on"+o.type[0].toUpperCase()+o.type.slice(1);if(o.bubble.indexOf("l")>-1&&(o.immediateStopped||"function"!=typeof n[c]||(n[c](o),n.hasOwnProperty(c)&&delete n[c])),o.stopped||"l"===o.bubble)return n;/[ud]/.test(o.bubble)&&O(n.target,o)}}}class E extends v{_mc={};constructor(e,t=!1){super(e)}static add=h;static remove=m;static trigger=y;trigger(e,t={},r){w.prototype.trigger.call(this,e,t,r)}parent(e=""){let t=this.target;return b(t)?p(t.parentNode,e,!0):[]}ancestors(e=""){let t=this?.target;return b(t)?p(this.target.parentNode,e,!1):[]}children(e=""){let t=this?.target;if(!b(t))return[];const r=Math.random().toString().replace(".",""),n='[_mc]:not([temp_id="'+r+'"] [_mc] [_mc])';t.setAttribute("temp_id",r);const o=d([...t.querySelectorAll(n)],e);return t.removeAttribute("temp_id"),o}descendants(e=""){let t=this?.target;return b(t)?d([...t.querySelectorAll("*[_mc]")],e):[]}}function j(e){return null!=e&&"object"==typeof e}function S(e){let t=new Set,r=/\{[^\{\}]*\}/g;return e.getAttributeNames().filter((t=>e.getAttribute(t)?.match(r))).forEach((n=>{new Set(e.getAttribute(n)?.match(r)).forEach((e=>t.add(e.replace(/[\{\}]/g,""))))})),[...e.childNodes].filter((e=>3===e.nodeType&&(e.nodeValue||"").match(r))).forEach((e=>{(e.nodeValue||"").match(r).forEach((e=>{t.add(e.replace(/[\{\}]/g,""))}))})),[...t].map((e=>e.replace(/[\{\}]/g,""))),[...t]}new Map;const _=[HTMLInputElement,HTMLSelectElement,HTMLTextAreaElement];class A extends E{data={};oldDisplay="";constructor(e){super(e);let t=this;S(e).forEach((e=>t.data[e]="")),k(t),t.#o(),delete t._mc}#o(){let e=this,t=e.target,r=!1;t.getAttributeNames().filter((e=>t.getAttribute(e)?.match(/\{[^\{\}]*\}/g))).forEach((r=>{let n=new Set(t.getAttribute(r)?.match(/\{[^\{\}]*\}/g));var o;e.data.observe((o=t.getAttribute(r),e=>{let c=o;n.forEach((t=>{c=c.replace(t,e[t.replace(/[\{\}]/g,"")])})),t.setAttribute(r,c)}))})),[...t.childNodes].filter((e=>3===e.nodeType&&(e.nodeValue||"").match(/\{[^\{\}]*\}/g))).forEach((n=>{r=!0;let o=new Set(n.nodeValue.match(/\{[^\{\}]*\}/g));var c;e.data.observe((c=n.nodeValue,r=>{let a=c;o.forEach((e=>{a=a.replace(e,r[e.replace(/[\{\}]/g,"")])})),Object.keys(r).some((e=>!!r[e]))&&(e.oldDisplay?t.style=e.oldDisplay:t.removeAttribute("style"),delete e.oldDisplay),n.nodeValue=a})),e.oldDisplay=t.getAttribute("style)")||"",r&&!_.includes(t.constructor)&&"FIELDSET"!==t.tagName&&(t.style.display="none")}))}onData(e){let t=this,r={};Object.keys(e.data).forEach((n=>{t.data.hasOwnProperty(n)&&(r[n]=e.data[n])})),JSON.stringify(r)!==JSON.stringify(t.data)&&Object.assign(t.data,r)}}const k=(e,t)=>((t?[t]:[...Object.getOwnPropertyNames(e)]).forEach((t=>{if("_"===t[0]||void 0===e?.[t])return e;let r,s=e[t];if(!s.prototype)switch(typeof s){case"string":r=String;break;case"number":r=Number;break;case"boolean":r=Boolean;break;case"object":r=s instanceof Array?Array:Object;break;default:return}let l=class extends r{#c=!0;constructor(e){super(e),this.constructor.callbacks=[],j(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(j(t.valueOf())){!function(e){var t;(t=e,(t instanceof HTMLElement?[t]:[]).concat([...t.querySelectorAll("*")]).filter((e=>!!S(e).length)).filter((e=>"STYLE"!==e.tagName))).forEach((e=>{e?._mc?._placeholders||E.add(e,"_placeholders",new A(e))}))}(e);const r=[...e.querySelectorAll("[_mc]")].filter((e=>!!e?._mc?._placeholders)),o=function(e){let t=n(e);r.forEach((e=>{e&&e._mc.trigger("data",t)}))};t.constructor.callbacks.push(o),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,r=j(t.valueOf())&&t.valueOf()instanceof Array==0?structuredClone(Object.assign({},t)):t.valueOf();return void 0!==e&&(t.#c=e),t.constructor.callbacks.forEach((e=>{e(r)})),t}},i=new l(s);Object.defineProperty(e,t,{enumerable:!0,get(){if(j(i.valueOf())){let e=structuredClone(Object.assign({},i));setTimeout(c((function(){o(structuredClone(Object.assign({},i)),e)||i.notify()}),0),0)}return i},set(e){if(typeof e==typeof i.valueOf())if(j(i.valueOf())&&i.valueOf()instanceof Array==0){let t=structuredClone(Object.assign({},i));i instanceof l==0&&(i=new l(structuredClone(Object.assign({},e))),a(e,i),i.seal()),Object.assign(i,e),setTimeout(c((function(){o(structuredClone(Object.assign({},i)),t)||i.notify()}),0),0)}else{let t=i.valueOf(),r=i.constructor.callbacks;i=new l(e),i.constructor.callbacks=r,e!==t&&i.notify()}else console.warn("IGNORED - cannot change observable types, IS:",typeof i.valueOf(),i,"- CANNOT BECOME:",typeof e)}}),e[t]=s})),e);class T{constructor(e){}}class N extends T{#a;#s;constructor(e,t){super(e),this.#a=e,this.#s=t}get val(){return new FormData(this.#s).get(this.#a.name)}set val(e){[...this.#s.querySelectorAll(`input[type="radio][name="${this.#a.name}"]`)].filter((t=>t.getAttribute("value")===e)).shift().checked=!0}}class x extends T{#a;constructor(e){super(e),this.#a=e}get val(){return this.#a.checked}set val(e){this.#a.checked=e}}class P extends T{#a;constructor(e){super(e),this.#a=e}get val(){return this.#a.value}set val(e){this.#a.value=e}}class L extends T{#a;#l=!1;constructor(e){super(e),this.#a=e,this.#l=e.multiple}get val(){const e=[];return[...this.#a.querySelectorAll("option")].filter((e=>e.selected)).forEach((t=>{t.selected&&e.push(t.value)})),this.#l?e:e.length?e[0]:""}set val(e){e="string"==typeof e?[e]:e,[...this.#a.querySelectorAll("option")].forEach((t=>{e.indexOf(t.value)>-1?(t.setAttribute("selected","selected"),t.selected=!0):(t.removeAttribute("selected"),t.selected=!1)}))}}class M extends T{#a;constructor(e){super(e),this.#a=e}get val(){return this.#a.value||""}set val(e){this.#a.value=e}}class C{constructor(e,t,r){let n=(e=>{let t=[...(e||document).querySelectorAll("input,select,textarea")],r={};return t.forEach((t=>{const n=t.getAttribute("name")||"undefined";if(n){let o,c,a=t.type;switch((e=>e.tagName.toLowerCase())(t)){case"input":switch(a){case"radio":o=new N(t,e.constructor===HTMLFormElement?e:e.querySelector("form")),c=E.add(t,n,o);break;case"checkbox":o=new x(t),c=E.add(t,n,o);break;default:o=new P(t),c=E.add(t,n,o)}Object.defineProperty(r,n,{enumerable:!0,configurable:!0,get:()=>c.val,set:e=>{c.val!==e&&(c.val=e)}});break;case"select":o=new L(t),c=E.add(t,n,o),Object.defineProperty(r,n,{enumerable:!0,configurable:!0,get:()=>c.val,set:e=>{c.val!==e&&(c.val=e)}});break;case"textarea":o=new M(t),c=E.add(t,n,o),Object.defineProperty(r,n,{enumerable:!0,configurable:!0,get:()=>c.val,set:e=>{c.val!==e&&(c.val=e)}});break;default:console.warn("handler missing:",n,"for",t.tagName.toLowerCase(),t)}}})),r})(r);e[t]=Object.assign({},n),k(e,t),a(n,e[t]),[...r.querySelectorAll("input, textarea, select")].forEach((r=>{g(r,"keyup",(r=>{e[t].notify()})),g(r,"change",(r=>{e[t].notify()})),g(r,"select",(r=>{e[t].notify()}))}))}}return t})()));
|
package/dist/helpers.d.ts
CHANGED
|
@@ -10,4 +10,5 @@ export declare function parse(what: string | Object | any[], parseThis: Object):
|
|
|
10
10
|
export declare function kebabToPascal(str: string): string;
|
|
11
11
|
export declare function debounce(func: Function, milliseconds: number): Function;
|
|
12
12
|
export declare function htmlToElements(html: string): HTMLElement[];
|
|
13
|
+
export declare function copyGettersSetters(source: LooseObject, target: LooseObject): void;
|
|
13
14
|
//# sourceMappingURL=helpers.d.ts.map
|
package/dist/helpers.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,WAAW;IAC3B,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,GAAG,CAAC;CAC5B;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO,CAElD;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,WAAW,GAAG,WAAW,CAatD;AAED,wBAAgB,aAAa,CAC5B,CAAC,EAAE,WAAW,EACd,MAAM,GAAE,OAAc,GACpB,WAAW,CAmBb;AAED,wBAAgB,SAAS,CAAC,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,WAAW,GAAG,OAAO,CAInE;AAED,wBAAgB,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,GAAG,GAAE,WAAgB,GAAG,GAAG,CAW3E;AAED,wBAAgB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,GAAG,EAAE,EAAE,SAAS,EAAE,MAAM,OAyCrE;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,UAKxC;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,GAAG,QAAQ,CASvE;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,EAAE,CAU1D"}
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,WAAW;IAC3B,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,GAAG,CAAC;CAC5B;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO,CAElD;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,WAAW,GAAG,WAAW,CAatD;AAED,wBAAgB,aAAa,CAC5B,CAAC,EAAE,WAAW,EACd,MAAM,GAAE,OAAc,GACpB,WAAW,CAmBb;AAED,wBAAgB,SAAS,CAAC,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,WAAW,GAAG,OAAO,CAInE;AAED,wBAAgB,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,GAAG,GAAE,WAAgB,GAAG,GAAG,CAW3E;AAED,wBAAgB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,GAAG,EAAE,EAAE,SAAS,EAAE,MAAM,OAyCrE;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,UAKxC;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,GAAG,QAAQ,CASvE;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,EAAE,CAU1D;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,QAO1E"}
|
package/dist/helpers.ts
CHANGED
|
@@ -138,3 +138,12 @@ export function htmlToElements(html: string): HTMLElement[] {
|
|
|
138
138
|
|
|
139
139
|
return Array.from(template.content.childNodes) as HTMLElement[];
|
|
140
140
|
}
|
|
141
|
+
|
|
142
|
+
export function copyGettersSetters(source: LooseObject, target: LooseObject) {
|
|
143
|
+
const descriptors = Object.getOwnPropertyDescriptors(source);
|
|
144
|
+
for (const [key, descriptor] of Object.entries(descriptors)) {
|
|
145
|
+
if ('get' in descriptor || 'set' in descriptor) {
|
|
146
|
+
Object.defineProperty(target, key, descriptor);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|