j-templates 7.0.77 → 7.0.79

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.
@@ -48,6 +48,16 @@ function wrapPriorityUpdates(callback) {
48
48
  highPriority = currentPriority;
49
49
  };
50
50
  }
51
+ function getHTMLNode(from, current) {
52
+ if (typeof from === "string") {
53
+ if (current?.nodeType === Node.TEXT_NODE) {
54
+ exports.DOMNodeConfig.setText(current, from);
55
+ return current;
56
+ }
57
+ return exports.DOMNodeConfig.createTextNode(from);
58
+ }
59
+ return from;
60
+ }
51
61
  exports.DOMNodeConfig = {
52
62
  createNode(type, namespace) {
53
63
  if (type === "text")
@@ -136,8 +146,10 @@ exports.DOMNodeConfig = {
136
146
  },
137
147
  reconcileChildren(target, children) {
138
148
  if (!target.firstChild) {
139
- for (let x = 0; x < children.length; x++)
140
- target.appendChild(children[x]);
149
+ for (let x = 0; x < children.length; x++) {
150
+ const child = getHTMLNode(children[x]);
151
+ target.appendChild(child);
152
+ }
141
153
  return;
142
154
  }
143
155
  if (children.length === 0) {
@@ -148,7 +160,8 @@ exports.DOMNodeConfig = {
148
160
  let x = 0;
149
161
  let removed = false;
150
162
  for (; actualNode && x < children.length; x++) {
151
- const expectedNode = children[x];
163
+ const child = children[x];
164
+ let expectedNode = getHTMLNode(child, actualNode);
152
165
  if (!removed && actualNode !== expectedNode) {
153
166
  const remove = actualNode;
154
167
  actualNode = actualNode.nextSibling;
@@ -165,14 +178,17 @@ exports.DOMNodeConfig = {
165
178
  }
166
179
  while (target.lastChild !== children[x - 1])
167
180
  target.removeChild(target.lastChild);
168
- for (; x < children.length; x++)
169
- target.appendChild(children[x]);
181
+ for (; x < children.length; x++) {
182
+ const child = getHTMLNode(children[x]);
183
+ target.appendChild(child);
184
+ }
170
185
  },
171
186
  reconcileChild(target, child) {
172
- if (target.firstChild === child)
187
+ const newChild = getHTMLNode(child, target.firstChild);
188
+ if (target.firstChild === newChild)
173
189
  return;
174
- target.appendChild(child);
175
- while (target.firstChild !== child)
190
+ target.appendChild(newChild);
191
+ while (target.firstChild !== newChild)
176
192
  target.removeChild(target.firstChild);
177
193
  },
178
194
  };
package/DOM/elements.d.ts CHANGED
@@ -5,7 +5,7 @@ export declare const div: <T>(config: {
5
5
  }>;
6
6
  on?: import("../Node/vNode.types").FunctionOr<import("../Node/vNode.types").vNodeEvents<HTMLElementEventMap>>;
7
7
  data?: () => T | T[] | Promise<T[]> | Promise<T>;
8
- }, children?: import("../Node/vNode.types").vNode[] | import("../Node/vNode.types").vNodeChildrenFunction<T>) => import("../Node/vNode.types").vNode;
8
+ }, children?: import("../Node/vNode.types").vNode[] | import("../Node/vNode.types").vNodeChildrenFunction<T>) => import("../Node/vNode.types").vElementNode;
9
9
  export declare const a: <T>(config: {
10
10
  props?: import("../Node/vNode.types").FunctionOr<import("../Utils/utils.types").RecursivePartial<HTMLElement>>;
11
11
  attrs?: import("../Node/vNode.types").FunctionOr<{
@@ -13,7 +13,7 @@ export declare const a: <T>(config: {
13
13
  }>;
14
14
  on?: import("../Node/vNode.types").FunctionOr<import("../Node/vNode.types").vNodeEvents<HTMLElementEventMap>>;
15
15
  data?: () => T | T[] | Promise<T[]> | Promise<T>;
16
- }, children?: import("../Node/vNode.types").vNode[] | import("../Node/vNode.types").vNodeChildrenFunction<T>) => import("../Node/vNode.types").vNode;
16
+ }, children?: import("../Node/vNode.types").vNode[] | import("../Node/vNode.types").vNodeChildrenFunction<T>) => import("../Node/vNode.types").vElementNode;
17
17
  export declare const b: <T>(config: {
18
18
  props?: import("../Node/vNode.types").FunctionOr<import("../Utils/utils.types").RecursivePartial<HTMLElement>>;
19
19
  attrs?: import("../Node/vNode.types").FunctionOr<{
@@ -21,7 +21,7 @@ export declare const b: <T>(config: {
21
21
  }>;
22
22
  on?: import("../Node/vNode.types").FunctionOr<import("../Node/vNode.types").vNodeEvents<HTMLElementEventMap>>;
23
23
  data?: () => T | T[] | Promise<T[]> | Promise<T>;
24
- }, children?: import("../Node/vNode.types").vNode[] | import("../Node/vNode.types").vNodeChildrenFunction<T>) => import("../Node/vNode.types").vNode;
24
+ }, children?: import("../Node/vNode.types").vNode[] | import("../Node/vNode.types").vNodeChildrenFunction<T>) => import("../Node/vNode.types").vElementNode;
25
25
  export declare const button: <T>(config: {
26
26
  props?: import("../Node/vNode.types").FunctionOr<import("../Utils/utils.types").RecursivePartial<HTMLButtonElement>>;
27
27
  attrs?: import("../Node/vNode.types").FunctionOr<{
@@ -29,7 +29,7 @@ export declare const button: <T>(config: {
29
29
  }>;
30
30
  on?: import("../Node/vNode.types").FunctionOr<import("../Node/vNode.types").vNodeEvents<HTMLElementEventMap>>;
31
31
  data?: () => T | T[] | Promise<T[]> | Promise<T>;
32
- }, children?: import("../Node/vNode.types").vNode[] | import("../Node/vNode.types").vNodeChildrenFunction<T>) => import("../Node/vNode.types").vNode;
32
+ }, children?: import("../Node/vNode.types").vNode[] | import("../Node/vNode.types").vNodeChildrenFunction<T>) => import("../Node/vNode.types").vElementNode;
33
33
  export declare const h1: <T>(config: {
34
34
  props?: import("../Node/vNode.types").FunctionOr<import("../Utils/utils.types").RecursivePartial<HTMLElement>>;
35
35
  attrs?: import("../Node/vNode.types").FunctionOr<{
@@ -37,7 +37,7 @@ export declare const h1: <T>(config: {
37
37
  }>;
38
38
  on?: import("../Node/vNode.types").FunctionOr<import("../Node/vNode.types").vNodeEvents<HTMLElementEventMap>>;
39
39
  data?: () => T | T[] | Promise<T[]> | Promise<T>;
40
- }, children?: import("../Node/vNode.types").vNode[] | import("../Node/vNode.types").vNodeChildrenFunction<T>) => import("../Node/vNode.types").vNode;
40
+ }, children?: import("../Node/vNode.types").vNode[] | import("../Node/vNode.types").vNodeChildrenFunction<T>) => import("../Node/vNode.types").vElementNode;
41
41
  export declare const h2: <T>(config: {
42
42
  props?: import("../Node/vNode.types").FunctionOr<import("../Utils/utils.types").RecursivePartial<HTMLElement>>;
43
43
  attrs?: import("../Node/vNode.types").FunctionOr<{
@@ -45,7 +45,7 @@ export declare const h2: <T>(config: {
45
45
  }>;
46
46
  on?: import("../Node/vNode.types").FunctionOr<import("../Node/vNode.types").vNodeEvents<HTMLElementEventMap>>;
47
47
  data?: () => T | T[] | Promise<T[]> | Promise<T>;
48
- }, children?: import("../Node/vNode.types").vNode[] | import("../Node/vNode.types").vNodeChildrenFunction<T>) => import("../Node/vNode.types").vNode;
48
+ }, children?: import("../Node/vNode.types").vNode[] | import("../Node/vNode.types").vNodeChildrenFunction<T>) => import("../Node/vNode.types").vElementNode;
49
49
  export declare const h3: <T>(config: {
50
50
  props?: import("../Node/vNode.types").FunctionOr<import("../Utils/utils.types").RecursivePartial<HTMLElement>>;
51
51
  attrs?: import("../Node/vNode.types").FunctionOr<{
@@ -53,7 +53,7 @@ export declare const h3: <T>(config: {
53
53
  }>;
54
54
  on?: import("../Node/vNode.types").FunctionOr<import("../Node/vNode.types").vNodeEvents<HTMLElementEventMap>>;
55
55
  data?: () => T | T[] | Promise<T[]> | Promise<T>;
56
- }, children?: import("../Node/vNode.types").vNode[] | import("../Node/vNode.types").vNodeChildrenFunction<T>) => import("../Node/vNode.types").vNode;
56
+ }, children?: import("../Node/vNode.types").vNode[] | import("../Node/vNode.types").vNodeChildrenFunction<T>) => import("../Node/vNode.types").vElementNode;
57
57
  export declare const input: <T>(config: {
58
58
  props?: import("../Node/vNode.types").FunctionOr<import("../Utils/utils.types").RecursivePartial<HTMLInputElement>>;
59
59
  attrs?: import("../Node/vNode.types").FunctionOr<{
@@ -61,7 +61,7 @@ export declare const input: <T>(config: {
61
61
  }>;
62
62
  on?: import("../Node/vNode.types").FunctionOr<import("../Node/vNode.types").vNodeEvents<HTMLElementEventMap>>;
63
63
  data?: () => T | T[] | Promise<T[]> | Promise<T>;
64
- }, children?: import("../Node/vNode.types").vNode[] | import("../Node/vNode.types").vNodeChildrenFunction<T>) => import("../Node/vNode.types").vNode;
64
+ }, children?: import("../Node/vNode.types").vNode[] | import("../Node/vNode.types").vNodeChildrenFunction<T>) => import("../Node/vNode.types").vElementNode;
65
65
  export declare const textarea: <T>(config: {
66
66
  props?: import("../Node/vNode.types").FunctionOr<import("../Utils/utils.types").RecursivePartial<HTMLTextAreaElement>>;
67
67
  attrs?: import("../Node/vNode.types").FunctionOr<{
@@ -69,7 +69,7 @@ export declare const textarea: <T>(config: {
69
69
  }>;
70
70
  on?: import("../Node/vNode.types").FunctionOr<import("../Node/vNode.types").vNodeEvents<HTMLElementEventMap>>;
71
71
  data?: () => T | T[] | Promise<T[]> | Promise<T>;
72
- }, children?: import("../Node/vNode.types").vNode[] | import("../Node/vNode.types").vNodeChildrenFunction<T>) => import("../Node/vNode.types").vNode;
72
+ }, children?: import("../Node/vNode.types").vNode[] | import("../Node/vNode.types").vNodeChildrenFunction<T>) => import("../Node/vNode.types").vElementNode;
73
73
  export declare const span: <T>(config: {
74
74
  props?: import("../Node/vNode.types").FunctionOr<import("../Utils/utils.types").RecursivePartial<HTMLElement>>;
75
75
  attrs?: import("../Node/vNode.types").FunctionOr<{
@@ -77,7 +77,7 @@ export declare const span: <T>(config: {
77
77
  }>;
78
78
  on?: import("../Node/vNode.types").FunctionOr<import("../Node/vNode.types").vNodeEvents<HTMLElementEventMap>>;
79
79
  data?: () => T | T[] | Promise<T[]> | Promise<T>;
80
- }, children?: import("../Node/vNode.types").vNode[] | import("../Node/vNode.types").vNodeChildrenFunction<T>) => import("../Node/vNode.types").vNode;
80
+ }, children?: import("../Node/vNode.types").vNode[] | import("../Node/vNode.types").vNodeChildrenFunction<T>) => import("../Node/vNode.types").vElementNode;
81
81
  export declare const table: <T>(config: {
82
82
  props?: import("../Node/vNode.types").FunctionOr<import("../Utils/utils.types").RecursivePartial<HTMLElement>>;
83
83
  attrs?: import("../Node/vNode.types").FunctionOr<{
@@ -85,7 +85,7 @@ export declare const table: <T>(config: {
85
85
  }>;
86
86
  on?: import("../Node/vNode.types").FunctionOr<import("../Node/vNode.types").vNodeEvents<HTMLElementEventMap>>;
87
87
  data?: () => T | T[] | Promise<T[]> | Promise<T>;
88
- }, children?: import("../Node/vNode.types").vNode[] | import("../Node/vNode.types").vNodeChildrenFunction<T>) => import("../Node/vNode.types").vNode;
88
+ }, children?: import("../Node/vNode.types").vNode[] | import("../Node/vNode.types").vNodeChildrenFunction<T>) => import("../Node/vNode.types").vElementNode;
89
89
  export declare const thead: <T>(config: {
90
90
  props?: import("../Node/vNode.types").FunctionOr<import("../Utils/utils.types").RecursivePartial<HTMLElement>>;
91
91
  attrs?: import("../Node/vNode.types").FunctionOr<{
@@ -93,7 +93,7 @@ export declare const thead: <T>(config: {
93
93
  }>;
94
94
  on?: import("../Node/vNode.types").FunctionOr<import("../Node/vNode.types").vNodeEvents<HTMLElementEventMap>>;
95
95
  data?: () => T | T[] | Promise<T[]> | Promise<T>;
96
- }, children?: import("../Node/vNode.types").vNode[] | import("../Node/vNode.types").vNodeChildrenFunction<T>) => import("../Node/vNode.types").vNode;
96
+ }, children?: import("../Node/vNode.types").vNode[] | import("../Node/vNode.types").vNodeChildrenFunction<T>) => import("../Node/vNode.types").vElementNode;
97
97
  export declare const th: <T>(config: {
98
98
  props?: import("../Node/vNode.types").FunctionOr<import("../Utils/utils.types").RecursivePartial<HTMLElement>>;
99
99
  attrs?: import("../Node/vNode.types").FunctionOr<{
@@ -101,7 +101,7 @@ export declare const th: <T>(config: {
101
101
  }>;
102
102
  on?: import("../Node/vNode.types").FunctionOr<import("../Node/vNode.types").vNodeEvents<HTMLElementEventMap>>;
103
103
  data?: () => T | T[] | Promise<T[]> | Promise<T>;
104
- }, children?: import("../Node/vNode.types").vNode[] | import("../Node/vNode.types").vNodeChildrenFunction<T>) => import("../Node/vNode.types").vNode;
104
+ }, children?: import("../Node/vNode.types").vNode[] | import("../Node/vNode.types").vNodeChildrenFunction<T>) => import("../Node/vNode.types").vElementNode;
105
105
  export declare const tbody: <T>(config: {
106
106
  props?: import("../Node/vNode.types").FunctionOr<import("../Utils/utils.types").RecursivePartial<HTMLElement>>;
107
107
  attrs?: import("../Node/vNode.types").FunctionOr<{
@@ -109,7 +109,7 @@ export declare const tbody: <T>(config: {
109
109
  }>;
110
110
  on?: import("../Node/vNode.types").FunctionOr<import("../Node/vNode.types").vNodeEvents<HTMLElementEventMap>>;
111
111
  data?: () => T | T[] | Promise<T[]> | Promise<T>;
112
- }, children?: import("../Node/vNode.types").vNode[] | import("../Node/vNode.types").vNodeChildrenFunction<T>) => import("../Node/vNode.types").vNode;
112
+ }, children?: import("../Node/vNode.types").vNode[] | import("../Node/vNode.types").vNodeChildrenFunction<T>) => import("../Node/vNode.types").vElementNode;
113
113
  export declare const tr: <T>(config: {
114
114
  props?: import("../Node/vNode.types").FunctionOr<import("../Utils/utils.types").RecursivePartial<HTMLElement>>;
115
115
  attrs?: import("../Node/vNode.types").FunctionOr<{
@@ -117,7 +117,7 @@ export declare const tr: <T>(config: {
117
117
  }>;
118
118
  on?: import("../Node/vNode.types").FunctionOr<import("../Node/vNode.types").vNodeEvents<HTMLElementEventMap>>;
119
119
  data?: () => T | T[] | Promise<T[]> | Promise<T>;
120
- }, children?: import("../Node/vNode.types").vNode[] | import("../Node/vNode.types").vNodeChildrenFunction<T>) => import("../Node/vNode.types").vNode;
120
+ }, children?: import("../Node/vNode.types").vNode[] | import("../Node/vNode.types").vNodeChildrenFunction<T>) => import("../Node/vNode.types").vElementNode;
121
121
  export declare const td: <T>(config: {
122
122
  props?: import("../Node/vNode.types").FunctionOr<import("../Utils/utils.types").RecursivePartial<HTMLElement>>;
123
123
  attrs?: import("../Node/vNode.types").FunctionOr<{
@@ -125,7 +125,7 @@ export declare const td: <T>(config: {
125
125
  }>;
126
126
  on?: import("../Node/vNode.types").FunctionOr<import("../Node/vNode.types").vNodeEvents<HTMLElementEventMap>>;
127
127
  data?: () => T | T[] | Promise<T[]> | Promise<T>;
128
- }, children?: import("../Node/vNode.types").vNode[] | import("../Node/vNode.types").vNodeChildrenFunction<T>) => import("../Node/vNode.types").vNode;
128
+ }, children?: import("../Node/vNode.types").vNode[] | import("../Node/vNode.types").vNodeChildrenFunction<T>) => import("../Node/vNode.types").vElementNode;
129
129
  export declare const img: <T>(config: {
130
130
  props?: import("../Node/vNode.types").FunctionOr<import("../Utils/utils.types").RecursivePartial<HTMLImageElement>>;
131
131
  attrs?: import("../Node/vNode.types").FunctionOr<{
@@ -133,7 +133,7 @@ export declare const img: <T>(config: {
133
133
  }>;
134
134
  on?: import("../Node/vNode.types").FunctionOr<import("../Node/vNode.types").vNodeEvents<HTMLElementEventMap>>;
135
135
  data?: () => T | T[] | Promise<T[]> | Promise<T>;
136
- }, children?: import("../Node/vNode.types").vNode[] | import("../Node/vNode.types").vNodeChildrenFunction<T>) => import("../Node/vNode.types").vNode;
136
+ }, children?: import("../Node/vNode.types").vNode[] | import("../Node/vNode.types").vNodeChildrenFunction<T>) => import("../Node/vNode.types").vElementNode;
137
137
  export declare const video: <T>(config: {
138
138
  props?: import("../Node/vNode.types").FunctionOr<import("../Utils/utils.types").RecursivePartial<HTMLVideoElement>>;
139
139
  attrs?: import("../Node/vNode.types").FunctionOr<{
@@ -141,7 +141,7 @@ export declare const video: <T>(config: {
141
141
  }>;
142
142
  on?: import("../Node/vNode.types").FunctionOr<import("../Node/vNode.types").vNodeEvents<HTMLElementEventMap>>;
143
143
  data?: () => T | T[] | Promise<T[]> | Promise<T>;
144
- }, children?: import("../Node/vNode.types").vNode[] | import("../Node/vNode.types").vNodeChildrenFunction<T>) => import("../Node/vNode.types").vNode;
144
+ }, children?: import("../Node/vNode.types").vNode[] | import("../Node/vNode.types").vNodeChildrenFunction<T>) => import("../Node/vNode.types").vElementNode;
145
145
  export declare const select: <T>(config: {
146
146
  props?: import("../Node/vNode.types").FunctionOr<import("../Utils/utils.types").RecursivePartial<HTMLSelectElement>>;
147
147
  attrs?: import("../Node/vNode.types").FunctionOr<{
@@ -149,7 +149,7 @@ export declare const select: <T>(config: {
149
149
  }>;
150
150
  on?: import("../Node/vNode.types").FunctionOr<import("../Node/vNode.types").vNodeEvents<HTMLElementEventMap>>;
151
151
  data?: () => T | T[] | Promise<T[]> | Promise<T>;
152
- }, children?: import("../Node/vNode.types").vNode[] | import("../Node/vNode.types").vNodeChildrenFunction<T>) => import("../Node/vNode.types").vNode;
152
+ }, children?: import("../Node/vNode.types").vNode[] | import("../Node/vNode.types").vNodeChildrenFunction<T>) => import("../Node/vNode.types").vElementNode;
153
153
  export declare const option: <T>(config: {
154
154
  props?: import("../Node/vNode.types").FunctionOr<import("../Utils/utils.types").RecursivePartial<HTMLOptionElement>>;
155
155
  attrs?: import("../Node/vNode.types").FunctionOr<{
@@ -157,7 +157,7 @@ export declare const option: <T>(config: {
157
157
  }>;
158
158
  on?: import("../Node/vNode.types").FunctionOr<import("../Node/vNode.types").vNodeEvents<HTMLElementEventMap>>;
159
159
  data?: () => T | T[] | Promise<T[]> | Promise<T>;
160
- }, children?: import("../Node/vNode.types").vNode[] | import("../Node/vNode.types").vNodeChildrenFunction<T>) => import("../Node/vNode.types").vNode;
160
+ }, children?: import("../Node/vNode.types").vNode[] | import("../Node/vNode.types").vNodeChildrenFunction<T>) => import("../Node/vNode.types").vElementNode;
161
161
  export declare const aside: <T>(config: {
162
162
  props?: import("../Node/vNode.types").FunctionOr<import("../Utils/utils.types").RecursivePartial<HTMLElement>>;
163
163
  attrs?: import("../Node/vNode.types").FunctionOr<{
@@ -165,7 +165,7 @@ export declare const aside: <T>(config: {
165
165
  }>;
166
166
  on?: import("../Node/vNode.types").FunctionOr<import("../Node/vNode.types").vNodeEvents<HTMLElementEventMap>>;
167
167
  data?: () => T | T[] | Promise<T[]> | Promise<T>;
168
- }, children?: import("../Node/vNode.types").vNode[] | import("../Node/vNode.types").vNodeChildrenFunction<T>) => import("../Node/vNode.types").vNode;
168
+ }, children?: import("../Node/vNode.types").vNode[] | import("../Node/vNode.types").vNodeChildrenFunction<T>) => import("../Node/vNode.types").vElementNode;
169
169
  export declare const p: <T>(config: {
170
170
  props?: import("../Node/vNode.types").FunctionOr<import("../Utils/utils.types").RecursivePartial<HTMLElement>>;
171
171
  attrs?: import("../Node/vNode.types").FunctionOr<{
@@ -173,7 +173,7 @@ export declare const p: <T>(config: {
173
173
  }>;
174
174
  on?: import("../Node/vNode.types").FunctionOr<import("../Node/vNode.types").vNodeEvents<HTMLElementEventMap>>;
175
175
  data?: () => T | T[] | Promise<T[]> | Promise<T>;
176
- }, children?: import("../Node/vNode.types").vNode[] | import("../Node/vNode.types").vNodeChildrenFunction<T>) => import("../Node/vNode.types").vNode;
176
+ }, children?: import("../Node/vNode.types").vNode[] | import("../Node/vNode.types").vNodeChildrenFunction<T>) => import("../Node/vNode.types").vElementNode;
177
177
  export declare const label: <T>(config: {
178
178
  props?: import("../Node/vNode.types").FunctionOr<import("../Utils/utils.types").RecursivePartial<HTMLElement>>;
179
179
  attrs?: import("../Node/vNode.types").FunctionOr<{
@@ -181,7 +181,7 @@ export declare const label: <T>(config: {
181
181
  }>;
182
182
  on?: import("../Node/vNode.types").FunctionOr<import("../Node/vNode.types").vNodeEvents<HTMLElementEventMap>>;
183
183
  data?: () => T | T[] | Promise<T[]> | Promise<T>;
184
- }, children?: import("../Node/vNode.types").vNode[] | import("../Node/vNode.types").vNodeChildrenFunction<T>) => import("../Node/vNode.types").vNode;
184
+ }, children?: import("../Node/vNode.types").vNode[] | import("../Node/vNode.types").vNodeChildrenFunction<T>) => import("../Node/vNode.types").vElementNode;
185
185
  export declare const pre: <T>(config: {
186
186
  props?: import("../Node/vNode.types").FunctionOr<import("../Utils/utils.types").RecursivePartial<HTMLElement>>;
187
187
  attrs?: import("../Node/vNode.types").FunctionOr<{
@@ -189,5 +189,29 @@ export declare const pre: <T>(config: {
189
189
  }>;
190
190
  on?: import("../Node/vNode.types").FunctionOr<import("../Node/vNode.types").vNodeEvents<HTMLElementEventMap>>;
191
191
  data?: () => T | T[] | Promise<T[]> | Promise<T>;
192
- }, children?: import("../Node/vNode.types").vNode[] | import("../Node/vNode.types").vNodeChildrenFunction<T>) => import("../Node/vNode.types").vNode;
193
- export declare const text: (callback: () => string) => import("../Node/vNode.types").vNode;
192
+ }, children?: import("../Node/vNode.types").vNode[] | import("../Node/vNode.types").vNodeChildrenFunction<T>) => import("../Node/vNode.types").vElementNode;
193
+ export declare const ul: <T>(config: {
194
+ props?: import("../Node/vNode.types").FunctionOr<import("../Utils/utils.types").RecursivePartial<HTMLElement>>;
195
+ attrs?: import("../Node/vNode.types").FunctionOr<{
196
+ [name: string]: string;
197
+ }>;
198
+ on?: import("../Node/vNode.types").FunctionOr<import("../Node/vNode.types").vNodeEvents<HTMLElementEventMap>>;
199
+ data?: () => T | T[] | Promise<T[]> | Promise<T>;
200
+ }, children?: import("../Node/vNode.types").vNode[] | import("../Node/vNode.types").vNodeChildrenFunction<T>) => import("../Node/vNode.types").vElementNode;
201
+ export declare const ol: <T>(config: {
202
+ props?: import("../Node/vNode.types").FunctionOr<import("../Utils/utils.types").RecursivePartial<HTMLElement>>;
203
+ attrs?: import("../Node/vNode.types").FunctionOr<{
204
+ [name: string]: string;
205
+ }>;
206
+ on?: import("../Node/vNode.types").FunctionOr<import("../Node/vNode.types").vNodeEvents<HTMLElementEventMap>>;
207
+ data?: () => T | T[] | Promise<T[]> | Promise<T>;
208
+ }, children?: import("../Node/vNode.types").vNode[] | import("../Node/vNode.types").vNodeChildrenFunction<T>) => import("../Node/vNode.types").vElementNode;
209
+ export declare const li: <T>(config: {
210
+ props?: import("../Node/vNode.types").FunctionOr<import("../Utils/utils.types").RecursivePartial<HTMLElement>>;
211
+ attrs?: import("../Node/vNode.types").FunctionOr<{
212
+ [name: string]: string;
213
+ }>;
214
+ on?: import("../Node/vNode.types").FunctionOr<import("../Node/vNode.types").vNodeEvents<HTMLElementEventMap>>;
215
+ data?: () => T | T[] | Promise<T[]> | Promise<T>;
216
+ }, children?: import("../Node/vNode.types").vNode[] | import("../Node/vNode.types").vNodeChildrenFunction<T>) => import("../Node/vNode.types").vElementNode;
217
+ export declare const text: (callback: () => string) => import("../Node/vNode.types").vElementNode;
package/DOM/elements.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.text = exports.pre = exports.label = exports.p = exports.aside = exports.option = exports.select = exports.video = exports.img = exports.td = exports.tr = exports.tbody = exports.th = exports.thead = exports.table = exports.span = exports.textarea = exports.input = exports.h3 = exports.h2 = exports.h1 = exports.button = exports.b = exports.a = exports.div = void 0;
3
+ exports.text = exports.li = exports.ol = exports.ul = exports.pre = exports.label = exports.p = exports.aside = exports.option = exports.select = exports.video = exports.img = exports.td = exports.tr = exports.tbody = exports.th = exports.thead = exports.table = exports.span = exports.textarea = exports.input = exports.h3 = exports.h2 = exports.h1 = exports.button = exports.b = exports.a = exports.div = void 0;
4
4
  const vNode_1 = require("../Node/vNode");
5
5
  exports.div = vNode_1.vNode.ToFunction("div");
6
6
  exports.a = vNode_1.vNode.ToFunction("a");
@@ -26,6 +26,9 @@ exports.aside = vNode_1.vNode.ToFunction("aside");
26
26
  exports.p = vNode_1.vNode.ToFunction("p");
27
27
  exports.label = vNode_1.vNode.ToFunction("label");
28
28
  exports.pre = vNode_1.vNode.ToFunction("pre");
29
+ exports.ul = vNode_1.vNode.ToFunction("ul");
30
+ exports.ol = vNode_1.vNode.ToFunction("ol");
31
+ exports.li = vNode_1.vNode.ToFunction("li");
29
32
  const textElement = vNode_1.vNode.ToFunction("text");
30
33
  const text = function (callback) {
31
34
  return textElement({ props: () => ({ nodeValue: callback() }) });
@@ -1,5 +1,5 @@
1
1
  import { ComponentEvents } from "./component.types";
2
- import { FunctionOr, vNode as vNodeType } from "./vNode.types";
2
+ import { FunctionOr, vNode as vNodeType, vElementNode } from "./vNode.types";
3
3
  import { RecursivePartial } from "../Utils/utils.types";
4
4
  import { IObservableScope } from "../Store/Tree/observableScope";
5
5
  /**
@@ -33,12 +33,12 @@ export declare class Component<D = void, T = void, E = {}> {
33
33
  /**
34
34
  * Accessor for the component's virtual node.
35
35
  */
36
- protected get VNode(): vNodeType;
36
+ protected get VNode(): vElementNode;
37
37
  /**
38
38
  * Accessor for the component's template collection.
39
39
  */
40
40
  protected get Templates(): T;
41
- constructor(vNode: vNodeType, config: vComponentConfig<D, E>, templates: T);
41
+ constructor(vNode: vElementNode, config: vComponentConfig<D, E>, templates: T);
42
42
  /**
43
43
  * Returns the component's rendered vNode(s).
44
44
  * Override to provide custom rendering logic.
@@ -73,7 +73,7 @@ export declare namespace Component {
73
73
  * Function wraps the Component as a function that can be used to create vNode objects
74
74
  * and generate templates.
75
75
  */
76
- function ToFunction<D, T, E, P = HTMLElement>(type: string, constructor: typeof Component<D, T, E>, namespace?: string): (config: vComponentConfig<D, E, P>, templates?: T) => vNodeType;
76
+ function ToFunction<D, T, E, P = HTMLElement>(type: string, constructor: typeof Component<D, T, E>, namespace?: string): (config: vComponentConfig<D, E, P>, templates?: T) => vElementNode;
77
77
  /**
78
78
  * Function registers the Component as a WebComponent as the provided name.
79
79
  */
package/Node/vNode.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { RecursivePartial } from "../Utils/utils.types";
2
- import { vNode as vNodeType, vNodeDefinition, FunctionOr, vNodeEvents, vNodeChildrenFunction } from "./vNode.types";
2
+ import { vNode as vNodeType, vNodeDefinition, FunctionOr, vNodeEvents, vNodeChildrenFunction, vElementNode } from "./vNode.types";
3
3
  type vNodeConfig<P = HTMLElement, E = HTMLElementEventMap, T = never> = {
4
4
  props?: FunctionOr<RecursivePartial<P>>;
5
5
  attrs?: FunctionOr<{
@@ -9,13 +9,13 @@ type vNodeConfig<P = HTMLElement, E = HTMLElementEventMap, T = never> = {
9
9
  data?: () => T | Array<T> | Promise<Array<T>> | Promise<T>;
10
10
  };
11
11
  export declare namespace vNode {
12
- function Create<P = HTMLElement, E = HTMLElementEventMap, T = never>(definition: vNodeDefinition<P, E, T>): vNodeType;
12
+ function Create<P = HTMLElement, E = HTMLElementEventMap, T = never>(definition: vNodeDefinition<P, E, T>): vElementNode;
13
13
  function CreateText(text: string): vNodeType;
14
14
  function Init(vnode: vNodeType): void;
15
15
  function InitAll(vnodes: vNodeType[]): void;
16
16
  function Destroy(vnode: vNodeType): void;
17
17
  function DestroyAll(vnodes: vNodeType[]): void;
18
- function ToFunction<P = HTMLElement, E = HTMLElementEventMap>(type: string, namespace?: string): <T>(config: vNodeConfig<P, E, T>, children?: vNodeType[] | vNodeChildrenFunction<T>) => vNodeType;
18
+ function ToFunction<P = HTMLElement, E = HTMLElementEventMap>(type: string, namespace?: string): <T>(config: vNodeConfig<P, E, T>, children?: vNodeType[] | vNodeChildrenFunction<T>) => vElementNode;
19
19
  function Attach(node: any, vnode: vNodeType): vNodeType;
20
20
  }
21
21
  export {};
package/Node/vNode.js CHANGED
@@ -8,6 +8,7 @@ const functions_1 = require("../Utils/functions");
8
8
  const injector_1 = require("../Utils/injector");
9
9
  const thread_1 = require("../Utils/thread");
10
10
  const nodeConfig_1 = require("./nodeConfig");
11
+ const vNode_types_1 = require("./vNode.types");
11
12
  var vNode;
12
13
  (function (vNode) {
13
14
  function Create(definition) {
@@ -43,7 +44,7 @@ var vNode;
43
44
  }
44
45
  vNode.CreateText = CreateText;
45
46
  function Init(vnode) {
46
- if (vnode.definition === null)
47
+ if ((0, vNode_types_1.isStringNode)(vnode) || vnode.definition === null)
47
48
  return;
48
49
  InitNode(vnode);
49
50
  }
@@ -54,7 +55,7 @@ var vNode;
54
55
  }
55
56
  vNode.InitAll = InitAll;
56
57
  function Destroy(vnode) {
57
- if (vnode.destroyed)
58
+ if ((0, vNode_types_1.isStringNode)(vnode) || vnode.destroyed)
58
59
  return;
59
60
  vnode.destroyed = true;
60
61
  vnode.component?.Destroy();
@@ -181,22 +182,28 @@ function CreateChildrenScope(vnode, children, data = DefaultData) {
181
182
  return Store_1.ObservableScope.Create(WrapChildren(vnode.injector, children, data));
182
183
  }
183
184
  function WrapChildren(injector, children, data) {
184
- let nodeArray = [];
185
+ let nodeArray;
185
186
  return function () {
186
- const nextData = ToArray(data());
187
+ const nextData = data === DefaultData ? data() : ToArray(data());
187
188
  switch (nextData.length) {
188
189
  case 0: {
189
- for (let x = 0; x < nodeArray.length; x++) {
190
- vNode.DestroyAll(nodeArray[x][1]);
191
- Store_1.ObservableScope.Destroy(nodeArray[x][2]);
190
+ if (nodeArray !== undefined) {
191
+ for (let x = 0; x < nodeArray.length; x++) {
192
+ vNode.DestroyAll(nodeArray[x][1]);
193
+ Store_1.ObservableScope.Destroy(nodeArray[x][2]);
194
+ }
195
+ nodeArray = [];
192
196
  }
193
- nodeArray.splice(0);
197
+ break;
194
198
  }
195
199
  default: {
196
- if (nodeArray.length < 21)
200
+ if (nodeArray === undefined)
201
+ nodeArray = InitializeNextNodes(injector, children, nextData);
202
+ else if (nodeArray.length < 11)
197
203
  nodeArray = EvaluateNextNodesSmall(injector, children, nextData, nodeArray);
198
204
  else
199
205
  nodeArray = EvaluateNextNodesLarge(injector, children, nextData, nodeArray);
206
+ break;
200
207
  }
201
208
  }
202
209
  return nodeArray;
@@ -209,54 +216,61 @@ function ToArray(result) {
209
216
  return result;
210
217
  return [result];
211
218
  }
212
- function EvaluateNextNodesSmall(injector, getNextChildren, nextData, nodeArray) {
213
- if (nextData === DEFAULT_DATA) {
214
- const nextChildren = injector_1.Injector.Scope(injector, getNextChildren, nextData[0]);
215
- const children = CreateNodeArray(nextChildren, nodeArray[0]?.[1]);
216
- for (let x = 0; x < nodeArray.length; x++) {
217
- vNode.DestroyAll(nodeArray[x][1]);
218
- Store_1.ObservableScope.Destroy(nodeArray[x][2]);
219
- }
220
- return [
221
- [undefined, children, null],
222
- ];
223
- }
219
+ function GetNextNodeRow(data, injector, getNextChildren, scope) {
220
+ scope ??=
221
+ data === undefined
222
+ ? null
223
+ : Store_1.ObservableScope.Create(function () {
224
+ const children = injector_1.Injector.Scope(injector, getNextChildren, data);
225
+ return CreateNodeArray(children);
226
+ });
227
+ const children = scope === null
228
+ ? CreateNodeArray(injector_1.Injector.Scope(injector, getNextChildren, undefined))
229
+ : Store_1.ObservableScope.Value(scope);
230
+ return [data, children, scope];
231
+ }
232
+ function InitializeNextNodes(injector, getNextChildren, nextData) {
224
233
  const nextNodes = new Array(nextData.length);
225
234
  for (let x = 0; x < nextData.length; x++) {
226
235
  const data = nextData[x];
227
- let i = 0;
228
- for (; i < nodeArray.length &&
229
- (nodeArray[i] === null || nodeArray[i][0] !== data); i++) { }
230
- if (i !== nodeArray.length) {
231
- if (nodeArray[i][2]) {
232
- const scope = nodeArray[i][2];
233
- const value = scope.value;
234
- const updatedValue = Store_1.ObservableScope.Value(scope);
235
- if (value !== updatedValue)
236
- nodeArray[i][1] = CreateNodeArray(updatedValue);
237
- }
238
- nextNodes[x] = nodeArray[i];
239
- nodeArray[i] = null;
240
- }
241
- else {
242
- const scope = Store_1.ObservableScope.Create(function () {
243
- return injector_1.Injector.Scope(injector, getNextChildren, data);
244
- });
245
- nextNodes[x] = [
246
- data,
247
- CreateNodeArray(Store_1.ObservableScope.Value(scope)),
248
- scope,
249
- ];
250
- }
251
- }
252
- for (let x = 0; x < nodeArray.length; x++) {
253
- if (nodeArray[x] !== null) {
254
- vNode.DestroyAll(nodeArray[x][1]);
255
- Store_1.ObservableScope.Destroy(nodeArray[x][2]);
256
- }
236
+ nextNodes[x] = GetNextNodeRow(data, injector, getNextChildren);
257
237
  }
258
238
  return nextNodes;
259
239
  }
240
+ function GetNextNodeRowSmall(injector, getNextChildren, nodeArray, data) {
241
+ let i = 0;
242
+ for (; i < nodeArray.length && (nodeArray[i] === null || nodeArray[i][0] !== data); i++) { }
243
+ if (i === nodeArray.length)
244
+ return GetNextNodeRow(data, injector, getNextChildren);
245
+ const nextNodeRow = GetNextNodeRow(data, injector, getNextChildren, nodeArray[i][2]);
246
+ if (nodeArray[i][1] !== nextNodeRow[1])
247
+ vNode.DestroyAll(nodeArray[i][1]);
248
+ nodeArray[i] = null;
249
+ return nextNodeRow;
250
+ }
251
+ function EvaluateNextNodesSmall(injector, getNextChildren, nextData, nodeArray) {
252
+ const nextNodes = new Array(nextData.length);
253
+ for (let x = 0; x < nextData.length; x++)
254
+ nextNodes[x] = GetNextNodeRowSmall(injector, getNextChildren, nodeArray, nextData[x]);
255
+ return nextNodes;
256
+ }
257
+ function GetNextNodeRowLarge(injector, getNextChildren, nodeRowMap, data) {
258
+ const currentChildren = nodeRowMap.get(data);
259
+ let currentChildIndex = currentChildren ? currentChildren.length - 1 : -1;
260
+ for (; currentChildIndex >= 0 && currentChildren[currentChildIndex] === null; currentChildIndex--) { }
261
+ if (currentChildIndex >= 0) {
262
+ const nodeRow = currentChildren[currentChildIndex];
263
+ if (currentChildIndex === 0)
264
+ nodeRowMap.delete(data);
265
+ else
266
+ currentChildren[currentChildIndex] = null;
267
+ const nextNodeRow = GetNextNodeRow(data, injector, getNextChildren, nodeRow[2]);
268
+ if (nodeRow[1] !== nextNodeRow[1])
269
+ vNode.DestroyAll(nodeRow[1]);
270
+ return nextNodeRow;
271
+ }
272
+ return GetNextNodeRow(data, injector, getNextChildren);
273
+ }
260
274
  function EvaluateNextNodesLarge(injector, getNextChildren, nextData, nodeArray) {
261
275
  const nextNodes = new Array(nextData.length);
262
276
  const dataMap = new Map();
@@ -266,34 +280,7 @@ function EvaluateNextNodesLarge(injector, getNextChildren, nextData, nodeArray)
266
280
  dataMap.set(nodeArray[x][0], arr);
267
281
  }
268
282
  for (let x = 0; x < nextData.length; x++) {
269
- const data = nextData[x];
270
- const currentChildren = dataMap.get(data);
271
- let currentChildIndex = currentChildren ? currentChildren.length - 1 : -1;
272
- for (; currentChildIndex >= 0 && currentChildren[currentChildIndex] === null; currentChildIndex--) { }
273
- if (currentChildIndex !== -1) {
274
- const currentChild = currentChildren[currentChildIndex];
275
- currentChildren[currentChildIndex] = null;
276
- const scope = currentChild[2];
277
- const value = scope.value;
278
- const updatedValue = Store_1.ObservableScope.Value(scope);
279
- if (value !== updatedValue) {
280
- vNode.DestroyAll(currentChild[1]);
281
- currentChild[1] = CreateNodeArray(updatedValue);
282
- }
283
- nextNodes[x] = currentChild;
284
- if (currentChildIndex === 0)
285
- dataMap.delete(data);
286
- }
287
- else {
288
- const scope = Store_1.ObservableScope.Create(function () {
289
- return injector_1.Injector.Scope(injector, getNextChildren, data);
290
- });
291
- nextNodes[x] = [
292
- data,
293
- CreateNodeArray(Store_1.ObservableScope.Value(scope)),
294
- scope,
295
- ];
296
- }
283
+ nextNodes[x] = GetNextNodeRowLarge(injector, getNextChildren, dataMap, nextData[x]);
297
284
  }
298
285
  for (const value of dataMap.values()) {
299
286
  for (let x = 0; x < value.length; x++) {
@@ -304,22 +291,13 @@ function EvaluateNextNodesLarge(injector, getNextChildren, nextData, nodeArray)
304
291
  }
305
292
  return nextNodes;
306
293
  }
307
- function CreateNodeArray(children, previousChildren) {
308
- if (Array.isArray(children))
309
- return children;
310
- if (typeof children === "string") {
311
- const firstPrevChild = previousChildren?.[0];
312
- if (firstPrevChild &&
313
- firstPrevChild.node &&
314
- firstPrevChild.type === "text") {
315
- nodeConfig_1.NodeConfig.setText(firstPrevChild.node, children);
316
- return previousChildren.length === 1
317
- ? previousChildren
318
- : [firstPrevChild];
319
- }
320
- return [vNode.CreateText(children)];
294
+ function CreateNodeArray(children) {
295
+ if (!Array.isArray(children)) {
296
+ return typeof children === "string"
297
+ ? [{ type: "string", node: children }]
298
+ : [children];
321
299
  }
322
- return [children];
300
+ return children;
323
301
  }
324
302
  function UpdateChildren(vnode, init = false, skipInit = false) {
325
303
  if (!vnode.children)
@@ -335,15 +313,16 @@ function UpdateChildren(vnode, init = false, skipInit = false) {
335
313
  if (vnode.destroyed || children !== vnode.children)
336
314
  return;
337
315
  for (let x = 0; !skipInit && x < children.length; x++)
338
- for (let y = 0; y < children[x][1].length; y++)
339
- if (children[x][1][y].definition) {
340
- const childNode = children[x][1][y];
316
+ for (let y = 0; y < children[x][1].length; y++) {
317
+ const childNode = children[x][1][y];
318
+ if (!(0, vNode_types_1.isStringNode)(childNode) && childNode.definition) {
341
319
  (0, thread_1.Schedule)(function () {
342
320
  if (vnode.destroyed || children !== vnode.children)
343
321
  return;
344
322
  vNode.Init(childNode);
345
323
  });
346
324
  }
325
+ }
347
326
  (0, thread_1.Thread)(function (async) {
348
327
  if (vnode.destroyed || children !== vnode.children)
349
328
  return;
@@ -14,17 +14,27 @@ export type vNodeEvents<E extends {
14
14
  };
15
15
  };
16
16
  export type vNodeChildrenFunction<T> = ((data: T) => vNode | vNode[]) | ((data: T) => string);
17
- export type vNode = {
17
+ export type vStringNode = {
18
+ type: "string";
19
+ node: string;
20
+ };
21
+ export type vElementNode = {
18
22
  type: string;
19
23
  definition: vNodeDefinition<any, any, any>;
20
24
  injector: Injector;
21
25
  node: Node | null;
22
- children: [any, vNode[], IObservableScope<string | vNode | vNode[]> | null][] | null;
26
+ children: (readonly [
27
+ any,
28
+ vNode[],
29
+ IObservableScope<string | vNode | vNode[]> | null
30
+ ])[] | null;
23
31
  destroyed: boolean;
24
32
  onDestroyed: Emitter | null;
25
33
  scopes: IObservableScope<unknown>[];
26
34
  component: Component;
27
35
  };
36
+ export type vNode = vStringNode | vElementNode;
37
+ export declare function isStringNode(vnode: vNode): vnode is vStringNode;
28
38
  export type vNodeDefinition<P = HTMLElement, E = HTMLElementEventMap, T = never> = {
29
39
  type: string;
30
40
  node?: Node;
@@ -1,2 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isStringNode = isStringNode;
4
+ function isStringNode(vnode) {
5
+ return vnode.type === "string";
6
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "j-templates",
3
- "version": "7.0.77",
3
+ "version": "7.0.79",
4
4
  "description": "j-templates",
5
5
  "license": "MIT",
6
6
  "repository": "https://github.com/TypesInCode/jTemplates",