@lvce-editor/virtual-dom 0.3.2

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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2024-present, Lvce Editor
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
package/README.md ADDED
@@ -0,0 +1 @@
1
+ # virtual dom
@@ -0,0 +1,5 @@
1
+
2
+
3
+ export const render: (elements: any[], eventMap: any) => void
4
+
5
+ export const renderInto: ($Parent: HTMLElement, elements: any[], eventMap: any) => void
package/dist/index.js ADDED
@@ -0,0 +1,358 @@
1
+ // src/parts/ClearNode/ClearNode.ts
2
+ var clearNode = ($Node) => {
3
+ $Node.textContent = "";
4
+ };
5
+
6
+ // src/parts/ElementTags/ElementTags.ts
7
+ var Audio = "audio";
8
+ var Button = "button";
9
+ var Col = "col";
10
+ var ColGroup = "colgroup";
11
+ var Del = "del";
12
+ var Div = "div";
13
+ var H1 = "h1";
14
+ var H2 = "h2";
15
+ var H3 = "h3";
16
+ var H4 = "h4";
17
+ var H5 = "h5";
18
+ var H6 = "h6";
19
+ var I = "i";
20
+ var Img = "img";
21
+ var Input = "input";
22
+ var Ins = "ins";
23
+ var Kbd = "kbd";
24
+ var Span = "span";
25
+ var Table = "table";
26
+ var TBody = "tbody";
27
+ var Td = "td";
28
+ var Th = "th";
29
+ var THead = "thead";
30
+ var Tr = "tr";
31
+ var Article = "article";
32
+ var Aside = "aside";
33
+ var Footer = "footer";
34
+ var Header = "header";
35
+ var Nav = "nav";
36
+ var Section = "section";
37
+ var Search = "search";
38
+ var Dd = "dd";
39
+ var Dl = "dl";
40
+ var Figcaption = "figcaption";
41
+ var Figure = "figure";
42
+ var Hr = "hr";
43
+ var Li = "li";
44
+ var Ol = "ol";
45
+ var P = "p";
46
+ var Pre = "pre";
47
+ var A = "a";
48
+ var Br = "br";
49
+ var Cite = "cite";
50
+ var Data = "data";
51
+ var Time = "time";
52
+ var Tfoot = "tfoot";
53
+ var Ul = "ul";
54
+ var Video = "video";
55
+ var TextArea = "textarea";
56
+ var Select = "select";
57
+ var Option = "option";
58
+
59
+ // src/parts/VirtualDomElements/VirtualDomElements.ts
60
+ var Audio2 = 0;
61
+ var Button2 = 1;
62
+ var Col2 = 2;
63
+ var ColGroup2 = 3;
64
+ var Div2 = 4;
65
+ var H12 = 5;
66
+ var Input2 = 6;
67
+ var Kbd2 = 7;
68
+ var Span2 = 8;
69
+ var Table2 = 9;
70
+ var TBody2 = 10;
71
+ var Td2 = 11;
72
+ var Text = 12;
73
+ var Th2 = 13;
74
+ var THead2 = 14;
75
+ var Tr2 = 15;
76
+ var I2 = 16;
77
+ var Img2 = 17;
78
+ var Ins2 = 20;
79
+ var Del2 = 21;
80
+ var H22 = 22;
81
+ var H32 = 23;
82
+ var H42 = 24;
83
+ var H52 = 25;
84
+ var H62 = 26;
85
+ var Article2 = 27;
86
+ var Aside2 = 28;
87
+ var Footer2 = 29;
88
+ var Header2 = 30;
89
+ var Nav2 = 40;
90
+ var Section2 = 41;
91
+ var Search2 = 42;
92
+ var Dd2 = 43;
93
+ var Dl2 = 44;
94
+ var Figcaption2 = 45;
95
+ var Figure2 = 46;
96
+ var Hr2 = 47;
97
+ var Li2 = 48;
98
+ var Ol2 = 49;
99
+ var P2 = 50;
100
+ var Pre2 = 51;
101
+ var A2 = 53;
102
+ var Br2 = 55;
103
+ var Cite2 = 56;
104
+ var Data2 = 57;
105
+ var Time2 = 58;
106
+ var Tfoot2 = 59;
107
+ var Ul2 = 60;
108
+ var Video2 = 61;
109
+ var TextArea2 = 62;
110
+ var Select2 = 63;
111
+ var Option2 = 64;
112
+
113
+ // src/parts/ElementTagMap/ElementTagMap.ts
114
+ var getElementTag = (type) => {
115
+ switch (type) {
116
+ case Audio2:
117
+ return Audio;
118
+ case H12:
119
+ return H1;
120
+ case H22:
121
+ return H2;
122
+ case H32:
123
+ return H3;
124
+ case H42:
125
+ return H4;
126
+ case H52:
127
+ return H5;
128
+ case H62:
129
+ return H6;
130
+ case Div2:
131
+ return Div;
132
+ case Kbd2:
133
+ return Kbd;
134
+ case Table2:
135
+ return Table;
136
+ case TBody2:
137
+ return TBody;
138
+ case Th2:
139
+ return Th;
140
+ case Td2:
141
+ return Td;
142
+ case THead2:
143
+ return THead;
144
+ case Tr2:
145
+ return Tr;
146
+ case Input2:
147
+ return Input;
148
+ case ColGroup2:
149
+ return ColGroup;
150
+ case Col2:
151
+ return Col;
152
+ case Button2:
153
+ return Button;
154
+ case Span2:
155
+ return Span;
156
+ case I2:
157
+ return I;
158
+ case Img2:
159
+ return Img;
160
+ case Ins2:
161
+ return Ins;
162
+ case Del2:
163
+ return Del;
164
+ case Article2:
165
+ return Article;
166
+ case Aside2:
167
+ return Aside;
168
+ case Footer2:
169
+ return Footer;
170
+ case Header2:
171
+ return Header;
172
+ case Nav2:
173
+ return Nav;
174
+ case Section2:
175
+ return Section;
176
+ case Search2:
177
+ return Search;
178
+ case Dd2:
179
+ return Dd;
180
+ case Dl2:
181
+ return Dl;
182
+ case Figcaption2:
183
+ return Figcaption;
184
+ case Figure2:
185
+ return Figure;
186
+ case Hr2:
187
+ return Hr;
188
+ case Li2:
189
+ return Li;
190
+ case Ol2:
191
+ return Ol;
192
+ case P2:
193
+ return P;
194
+ case Pre2:
195
+ return Pre;
196
+ case A2:
197
+ return A;
198
+ case Br2:
199
+ return Br;
200
+ case Cite2:
201
+ return Cite;
202
+ case Data2:
203
+ return Data;
204
+ case Time2:
205
+ return Time;
206
+ case Tfoot2:
207
+ return Tfoot;
208
+ case Ul2:
209
+ return Ul;
210
+ case Video2:
211
+ return Video;
212
+ case TextArea2:
213
+ return TextArea;
214
+ case Select2:
215
+ return Select;
216
+ case Option2:
217
+ return Option;
218
+ default:
219
+ throw new Error(`element tag not found ${type}`);
220
+ }
221
+ };
222
+
223
+ // src/parts/AttachEvent/AttachEvent.ts
224
+ var attachEvent = ($Node, eventMap, key, value) => {
225
+ };
226
+
227
+ // src/parts/VirtualDomElementProp/VirtualDomElementProp.ts
228
+ var setProp = ($Element, key, value, eventMap) => {
229
+ switch (key) {
230
+ case "maskImage":
231
+ $Element.style.maskImage = `url('${value}')`;
232
+ $Element.style.webkitMaskImage = `url('${value}')`;
233
+ break;
234
+ case "paddingLeft":
235
+ case "paddingRight":
236
+ case "top":
237
+ case "left":
238
+ case "marginTop":
239
+ $Element.style[key] = typeof value === "number" ? `${value}px` : value;
240
+ break;
241
+ case "translate":
242
+ $Element.style[key] = value;
243
+ break;
244
+ case "width":
245
+ case "height":
246
+ if ($Element instanceof HTMLImageElement) {
247
+ $Element[key] = value;
248
+ } else if (typeof value === "number") {
249
+ $Element.style[key] = `${value}px`;
250
+ } else {
251
+ $Element.style[key] = value;
252
+ }
253
+ break;
254
+ case "style":
255
+ throw new Error("style property is not supported");
256
+ case "childCount":
257
+ case "type":
258
+ break;
259
+ case "ariaOwns":
260
+ if (value) {
261
+ $Element.setAttribute("aria-owns", value);
262
+ } else {
263
+ $Element.removeAttribute("aria-owns");
264
+ }
265
+ break;
266
+ case "inputType":
267
+ $Element.type = value;
268
+ break;
269
+ case "ariaLabelledBy":
270
+ $Element.setAttribute("aria-labelledby", value);
271
+ break;
272
+ case "onBlur":
273
+ case "onChange":
274
+ case "onClick":
275
+ case "onContextMenu":
276
+ case "onDblClick":
277
+ case "onFocus":
278
+ case "onFocusIn":
279
+ case "onFocusIn":
280
+ case "onFocusOut":
281
+ case "onInput":
282
+ case "onKeyDown":
283
+ case "onMouseDown":
284
+ case "onPointerDown":
285
+ case "onPointerOut":
286
+ case "onPointerOver":
287
+ case "onWheel":
288
+ const eventName = key.slice(2).toLowerCase();
289
+ if (!eventMap || !value) {
290
+ return;
291
+ }
292
+ attachEvent($Element, eventMap, eventName, value);
293
+ break;
294
+ default:
295
+ if (key.startsWith("data-")) {
296
+ $Element.dataset[key.slice("data-".length)] = value;
297
+ } else {
298
+ $Element[key] = value;
299
+ }
300
+ }
301
+ };
302
+
303
+ // src/parts/VirtualDomElementProps/VirtualDomElementProps.ts
304
+ var setProps = ($Element, props, eventMap) => {
305
+ for (const key in props) {
306
+ setProp($Element, key, props[key], eventMap);
307
+ }
308
+ };
309
+
310
+ // src/parts/VirtualDomElement/VirtualDomElement.ts
311
+ var renderDomTextNode = (element) => {
312
+ return document.createTextNode(element.text);
313
+ };
314
+ var renderDomElement = (element, eventMap) => {
315
+ const tag = getElementTag(element.type);
316
+ const $Element = document.createElement(tag);
317
+ setProps($Element, element, eventMap);
318
+ return $Element;
319
+ };
320
+ var render = (element, eventMap) => {
321
+ switch (element.type) {
322
+ case Text:
323
+ return renderDomTextNode(element);
324
+ default:
325
+ return renderDomElement(element, eventMap);
326
+ }
327
+ };
328
+
329
+ // src/parts/RenderInternal/RenderInternal.ts
330
+ var renderInternal2 = ($Parent, elements, eventMap) => {
331
+ const max = elements.length - 1;
332
+ let stack = [];
333
+ for (let i = max; i >= 0; i--) {
334
+ const element = elements[i];
335
+ const $Element = render(element, eventMap);
336
+ if (element.childCount > 0) {
337
+ $Element.append(...stack.slice(0, element.childCount));
338
+ stack = stack.slice(element.childCount);
339
+ }
340
+ stack.unshift($Element);
341
+ }
342
+ $Parent.append(...stack);
343
+ };
344
+
345
+ // src/parts/VirtualDom/VirtualDom.ts
346
+ var renderInto = ($Parent, dom, eventMap = {}) => {
347
+ clearNode($Parent);
348
+ renderInternal2($Parent, dom, eventMap);
349
+ };
350
+ var render2 = (elements, eventMap = {}) => {
351
+ const $Root = document.createElement("div");
352
+ renderInternal2($Root, elements, eventMap);
353
+ return $Root;
354
+ };
355
+ export {
356
+ render2 as render,
357
+ renderInto
358
+ };
package/package.json ADDED
@@ -0,0 +1,11 @@
1
+ {
2
+ "name": "@lvce-editor/virtual-dom",
3
+ "version": "0.3.2",
4
+ "main": "dist/index.js",
5
+ "type": "module",
6
+ "keywords": [],
7
+ "author": "",
8
+ "license": "MIT",
9
+ "description": "",
10
+ "types": "dist/index.d.ts"
11
+ }
package/src/index.ts ADDED
@@ -0,0 +1 @@
1
+ export * from './parts/Main/Main.ts'
@@ -0,0 +1,3 @@
1
+ export const attachEvent = ($Node, eventMap, key, value) => {
2
+ // TODO
3
+ }
@@ -0,0 +1,3 @@
1
+ export const clearNode = ($Node) => {
2
+ $Node.textContent = ''
3
+ }
@@ -0,0 +1,111 @@
1
+ import * as ElementTag from '../ElementTags/ElementTags.ts'
2
+ import * as VirtualDomElements from '../VirtualDomElements/VirtualDomElements.ts'
3
+
4
+ export const getElementTag = (type) => {
5
+ switch (type) {
6
+ case VirtualDomElements.Audio:
7
+ return ElementTag.Audio
8
+ case VirtualDomElements.H1:
9
+ return ElementTag.H1
10
+ case VirtualDomElements.H2:
11
+ return ElementTag.H2
12
+ case VirtualDomElements.H3:
13
+ return ElementTag.H3
14
+ case VirtualDomElements.H4:
15
+ return ElementTag.H4
16
+ case VirtualDomElements.H5:
17
+ return ElementTag.H5
18
+ case VirtualDomElements.H6:
19
+ return ElementTag.H6
20
+ case VirtualDomElements.Div:
21
+ return ElementTag.Div
22
+ case VirtualDomElements.Kbd:
23
+ return ElementTag.Kbd
24
+ case VirtualDomElements.Table:
25
+ return ElementTag.Table
26
+ case VirtualDomElements.TBody:
27
+ return ElementTag.TBody
28
+ case VirtualDomElements.Th:
29
+ return ElementTag.Th
30
+ case VirtualDomElements.Td:
31
+ return ElementTag.Td
32
+ case VirtualDomElements.THead:
33
+ return ElementTag.THead
34
+ case VirtualDomElements.Tr:
35
+ return ElementTag.Tr
36
+ case VirtualDomElements.Input:
37
+ return ElementTag.Input
38
+ case VirtualDomElements.ColGroup:
39
+ return ElementTag.ColGroup
40
+ case VirtualDomElements.Col:
41
+ return ElementTag.Col
42
+ case VirtualDomElements.Button:
43
+ return ElementTag.Button
44
+ case VirtualDomElements.Span:
45
+ return ElementTag.Span
46
+ case VirtualDomElements.I:
47
+ return ElementTag.I
48
+ case VirtualDomElements.Img:
49
+ return ElementTag.Img
50
+ case VirtualDomElements.Ins:
51
+ return ElementTag.Ins
52
+ case VirtualDomElements.Del:
53
+ return ElementTag.Del
54
+ case VirtualDomElements.Article:
55
+ return ElementTag.Article
56
+ case VirtualDomElements.Aside:
57
+ return ElementTag.Aside
58
+ case VirtualDomElements.Footer:
59
+ return ElementTag.Footer
60
+ case VirtualDomElements.Header:
61
+ return ElementTag.Header
62
+ case VirtualDomElements.Nav:
63
+ return ElementTag.Nav
64
+ case VirtualDomElements.Section:
65
+ return ElementTag.Section
66
+ case VirtualDomElements.Search:
67
+ return ElementTag.Search
68
+ case VirtualDomElements.Dd:
69
+ return ElementTag.Dd
70
+ case VirtualDomElements.Dl:
71
+ return ElementTag.Dl
72
+ case VirtualDomElements.Figcaption:
73
+ return ElementTag.Figcaption
74
+ case VirtualDomElements.Figure:
75
+ return ElementTag.Figure
76
+ case VirtualDomElements.Hr:
77
+ return ElementTag.Hr
78
+ case VirtualDomElements.Li:
79
+ return ElementTag.Li
80
+ case VirtualDomElements.Ol:
81
+ return ElementTag.Ol
82
+ case VirtualDomElements.P:
83
+ return ElementTag.P
84
+ case VirtualDomElements.Pre:
85
+ return ElementTag.Pre
86
+ case VirtualDomElements.A:
87
+ return ElementTag.A
88
+ case VirtualDomElements.Br:
89
+ return ElementTag.Br
90
+ case VirtualDomElements.Cite:
91
+ return ElementTag.Cite
92
+ case VirtualDomElements.Data:
93
+ return ElementTag.Data
94
+ case VirtualDomElements.Time:
95
+ return ElementTag.Time
96
+ case VirtualDomElements.Tfoot:
97
+ return ElementTag.Tfoot
98
+ case VirtualDomElements.Ul:
99
+ return ElementTag.Ul
100
+ case VirtualDomElements.Video:
101
+ return ElementTag.Video
102
+ case VirtualDomElements.TextArea:
103
+ return ElementTag.TextArea
104
+ case VirtualDomElements.Select:
105
+ return ElementTag.Select
106
+ case VirtualDomElements.Option:
107
+ return ElementTag.Option
108
+ default:
109
+ throw new Error(`element tag not found ${type}`)
110
+ }
111
+ }
@@ -0,0 +1,52 @@
1
+ export const Audio = 'audio'
2
+ export const Button = 'button'
3
+ export const Col = 'col'
4
+ export const ColGroup = 'colgroup'
5
+ export const Del = 'del'
6
+ export const Div = 'div'
7
+ export const H1 = 'h1'
8
+ export const H2 = 'h2'
9
+ export const H3 = 'h3'
10
+ export const H4 = 'h4'
11
+ export const H5 = 'h5'
12
+ export const H6 = 'h6'
13
+ export const I = 'i'
14
+ export const Img = 'img'
15
+ export const Input = 'input'
16
+ export const Ins = 'ins'
17
+ export const Kbd = 'kbd'
18
+ export const Span = 'span'
19
+ export const Table = 'table'
20
+ export const TBody = 'tbody'
21
+ export const Td = 'td'
22
+ export const Th = 'th'
23
+ export const THead = 'thead'
24
+ export const Tr = 'tr'
25
+ export const Article = 'article'
26
+ export const Aside = 'aside'
27
+ export const Footer = 'footer'
28
+ export const Header = 'header'
29
+ export const Nav = 'nav'
30
+ export const Section = 'section'
31
+ export const Search = 'search'
32
+ export const Dd = 'dd'
33
+ export const Dl = 'dl'
34
+ export const Figcaption = 'figcaption'
35
+ export const Figure = 'figure'
36
+ export const Hr = 'hr'
37
+ export const Li = 'li'
38
+ export const Ol = 'ol'
39
+ export const P = 'p'
40
+ export const Pre = 'pre'
41
+ export const A = 'a'
42
+ export const Abbr = 'abbr'
43
+ export const Br = 'br'
44
+ export const Cite = 'cite'
45
+ export const Data = 'data'
46
+ export const Time = 'time'
47
+ export const Tfoot = 'tfoot'
48
+ export const Ul = 'ul'
49
+ export const Video = 'video'
50
+ export const TextArea = 'textarea'
51
+ export const Select = 'select'
52
+ export const Option = 'option'
@@ -0,0 +1 @@
1
+ export { render, renderInto } from '../VirtualDom/VirtualDom.ts'
@@ -0,0 +1,22 @@
1
+ import * as VirtualDomElement from '../VirtualDomElement/VirtualDomElement.ts'
2
+
3
+ export const renderInternal = (
4
+ $Parent: HTMLElement,
5
+ elements: any[],
6
+ eventMap: any,
7
+ ) => {
8
+ const max = elements.length - 1
9
+ let stack = []
10
+ for (let i = max; i >= 0; i--) {
11
+ const element = elements[i]
12
+ const $Element = VirtualDomElement.render(element, eventMap)
13
+ if (element.childCount > 0) {
14
+ // @ts-expect-error
15
+ $Element.append(...stack.slice(0, element.childCount))
16
+ stack = stack.slice(element.childCount)
17
+ }
18
+ // @ts-expect-error
19
+ stack.unshift($Element)
20
+ }
21
+ $Parent.append(...stack)
22
+ }
@@ -0,0 +1,46 @@
1
+ import * as ClearNode from '../ClearNode/ClearNode.ts'
2
+ import * as RenderInternal from '../RenderInternal/RenderInternal.ts'
3
+
4
+ export const renderInto = ($Parent, dom, eventMap = {}) => {
5
+ ClearNode.clearNode($Parent)
6
+ RenderInternal.renderInternal($Parent, dom, eventMap)
7
+ }
8
+
9
+ export const renderIncremental = ($Parent, dom) => {
10
+ if ($Parent.textContent === '') {
11
+ // @ts-expect-error
12
+ renderInternal($Parent, dom)
13
+ return
14
+ }
15
+ // TODO
16
+ const $Node = $Parent
17
+ for (let i = 0; i < dom.length; i++) {
18
+ const node = dom[i]
19
+ if (!$Node) {
20
+ $Parent.append
21
+ }
22
+ console.log({ $Node, node })
23
+ console.log($Node.nodeValue, node.text)
24
+
25
+ if ($Node.nodeValue !== node.props.text && node.props.text) {
26
+ $Node.nodeValue = node.props.text
27
+ }
28
+ if ($Node.title !== node.props.title && node.props.title) {
29
+ $Node.title = node.props.title
30
+ }
31
+ }
32
+ // const newCount = dom
33
+ // const $Root = render(dom)
34
+ // $Parent.replaceChildren(...$Root.children)
35
+ }
36
+
37
+ /**
38
+ *
39
+ * @param {any[]} elements
40
+ * @returns
41
+ */
42
+ export const render = (elements, eventMap = {}) => {
43
+ const $Root = document.createElement('div')
44
+ RenderInternal.renderInternal($Root, elements, eventMap)
45
+ return $Root
46
+ }
@@ -0,0 +1,23 @@
1
+ import * as ElementTagMap from '../ElementTagMap/ElementTagMap.ts'
2
+ import * as VirtualDomElementProps from '../VirtualDomElementProps/VirtualDomElementProps.ts'
3
+ import * as VirtualDomElements from '../VirtualDomElements/VirtualDomElements.ts'
4
+
5
+ const renderDomTextNode = (element) => {
6
+ return document.createTextNode(element.text)
7
+ }
8
+
9
+ const renderDomElement = (element, eventMap) => {
10
+ const tag = ElementTagMap.getElementTag(element.type)
11
+ const $Element = document.createElement(tag)
12
+ VirtualDomElementProps.setProps($Element, element, eventMap)
13
+ return $Element
14
+ }
15
+
16
+ export const render = (element, eventMap) => {
17
+ switch (element.type) {
18
+ case VirtualDomElements.Text:
19
+ return renderDomTextNode(element)
20
+ default:
21
+ return renderDomElement(element, eventMap)
22
+ }
23
+ }
@@ -0,0 +1,77 @@
1
+ import * as AttachEvent from '../AttachEvent/AttachEvent.ts'
2
+
3
+ export const setProp = ($Element: HTMLElement, key: string, value: any, eventMap: any) => {
4
+ switch (key) {
5
+ case 'maskImage':
6
+ $Element.style.maskImage = `url('${value}')`
7
+ $Element.style.webkitMaskImage = `url('${value}')`
8
+ break
9
+ case 'paddingLeft':
10
+ case 'paddingRight':
11
+ case 'top':
12
+ case 'left':
13
+ case 'marginTop':
14
+ $Element.style[key] = typeof value === 'number' ? `${value}px` : value
15
+ break
16
+ case 'translate':
17
+ $Element.style[key] = value
18
+ break
19
+ case 'width':
20
+ case 'height':
21
+ if ($Element instanceof HTMLImageElement) {
22
+ $Element[key] = value
23
+ } else if (typeof value === 'number') {
24
+ $Element.style[key] = `${value}px`
25
+ } else {
26
+ $Element.style[key] = value
27
+ }
28
+ break
29
+ case 'style':
30
+ throw new Error('style property is not supported')
31
+ case 'childCount':
32
+ case 'type':
33
+ break
34
+ case 'ariaOwns': // TODO remove this once idl is supported
35
+ if (value) {
36
+ $Element.setAttribute('aria-owns', value)
37
+ } else {
38
+ $Element.removeAttribute('aria-owns')
39
+ }
40
+ break
41
+ case 'inputType':
42
+ // @ts-ignore
43
+ $Element.type = value
44
+ break
45
+ case 'ariaLabelledBy':
46
+ $Element.setAttribute('aria-labelledby', value)
47
+ break
48
+ case 'onBlur':
49
+ case 'onChange':
50
+ case 'onClick':
51
+ case 'onContextMenu':
52
+ case 'onDblClick':
53
+ case 'onFocus':
54
+ case 'onFocusIn':
55
+ case 'onFocusIn':
56
+ case 'onFocusOut':
57
+ case 'onInput':
58
+ case 'onKeyDown':
59
+ case 'onMouseDown':
60
+ case 'onPointerDown':
61
+ case 'onPointerOut':
62
+ case 'onPointerOver':
63
+ case 'onWheel':
64
+ const eventName = key.slice(2).toLowerCase()
65
+ if (!eventMap || !value) {
66
+ return
67
+ }
68
+ AttachEvent.attachEvent($Element, eventMap, eventName, value)
69
+ break
70
+ default:
71
+ if (key.startsWith('data-')) {
72
+ $Element.dataset[key.slice('data-'.length)] = value
73
+ } else {
74
+ $Element[key] = value
75
+ }
76
+ }
77
+ }
@@ -0,0 +1,7 @@
1
+ import * as VirtualDomElementProp from '../VirtualDomElementProp/VirtualDomElementProp.ts'
2
+
3
+ export const setProps = ($Element, props, eventMap) => {
4
+ for (const key in props) {
5
+ VirtualDomElementProp.setProp($Element, key, props[key], eventMap)
6
+ }
7
+ }
@@ -0,0 +1,54 @@
1
+ export const Audio = 0
2
+ export const Button = 1
3
+ export const Col = 2
4
+ export const ColGroup = 3
5
+ export const Div = 4
6
+ export const H1 = 5
7
+ export const Input = 6
8
+ export const Kbd = 7
9
+ export const Span = 8
10
+ export const Table = 9
11
+ export const TBody = 10
12
+ export const Td = 11
13
+ export const Text = 12
14
+ export const Th = 13
15
+ export const THead = 14
16
+ export const Tr = 15
17
+ export const I = 16
18
+ export const Img = 17
19
+ export const Root = 0
20
+ export const Ins = 20
21
+ export const Del = 21
22
+ export const H2 = 22
23
+ export const H3 = 23
24
+ export const H4 = 24
25
+ export const H5 = 25
26
+ export const H6 = 26
27
+ export const Article = 27
28
+ export const Aside = 28
29
+ export const Footer = 29
30
+ export const Header = 30
31
+ export const Nav = 40
32
+ export const Section = 41
33
+ export const Search = 42
34
+ export const Dd = 43
35
+ export const Dl = 44
36
+ export const Figcaption = 45
37
+ export const Figure = 46
38
+ export const Hr = 47
39
+ export const Li = 48
40
+ export const Ol = 49
41
+ export const P = 50
42
+ export const Pre = 51
43
+ export const A = 53
44
+ export const Abbr = 54
45
+ export const Br = 55
46
+ export const Cite = 56
47
+ export const Data = 57
48
+ export const Time = 58
49
+ export const Tfoot = 59
50
+ export const Ul = 60
51
+ export const Video = 61
52
+ export const TextArea = 62
53
+ export const Select = 63
54
+ export const Option = 64