j-templates 6.1.12 → 7.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/DOM/createAssignment.js +4 -5
  2. package/DOM/createAttributeAssignment.d.ts +1 -0
  3. package/DOM/createAttributeAssignment.js +16 -0
  4. package/DOM/createPropertyAssignment.d.ts +1 -0
  5. package/DOM/createPropertyAssignment.js +7 -0
  6. package/DOM/domNodeConfig.js +40 -0
  7. package/DOM/elements.d.ts +80 -26
  8. package/DOM/elements.js +12 -101
  9. package/DOM/index.d.ts +0 -1
  10. package/DOM/index.js +0 -1
  11. package/DOM/svgElements.d.ts +0 -4
  12. package/DOM/svgElements.js +0 -16
  13. package/Node/component.d.ts +19 -16
  14. package/Node/component.js +25 -31
  15. package/Node/component.types.d.ts +5 -0
  16. package/Node/nodeConfig.d.ts +7 -0
  17. package/Node/vNode.d.ts +20 -0
  18. package/Node/vNode.js +296 -0
  19. package/Node/vNode.types.d.ts +45 -0
  20. package/Store/Tree/observableNode.js +1 -2
  21. package/Store/Tree/observableScope.d.ts +2 -0
  22. package/Store/Tree/observableScope.js +29 -8
  23. package/Utils/avlTree.js +5 -6
  24. package/Utils/decorators.d.ts +4 -25
  25. package/Utils/decorators.js +3 -61
  26. package/Utils/distinctArray.d.ts +1 -1
  27. package/Utils/distinctArray.js +2 -2
  28. package/Utils/list.js +4 -37
  29. package/index.d.ts +1 -2
  30. package/package.json +1 -1
  31. package/Node/boundNode.d.ts +0 -4
  32. package/Node/boundNode.js +0 -115
  33. package/Node/boundNode.types.d.ts +0 -57
  34. package/Node/componentNode.d.ts +0 -7
  35. package/Node/componentNode.js +0 -123
  36. package/Node/componentNode.types.d.ts +0 -37
  37. package/Node/elementNode.d.ts +0 -5
  38. package/Node/elementNode.js +0 -176
  39. package/Node/elementNode.types.d.ts +0 -40
  40. package/Node/elementNode.types.js +0 -2
  41. package/Node/nodeRef.d.ts +0 -26
  42. package/Node/nodeRef.js +0 -253
  43. package/Node/nodeRef.types.d.ts +0 -21
  44. package/Node/nodeRef.types.js +0 -2
  45. package/Node/textNode.types.d.ts +0 -7
  46. package/Node/textNode.types.js +0 -2
  47. /package/Node/{boundNode.types.js → component.types.js} +0 -0
  48. /package/Node/{componentNode.types.js → vNode.types.js} +0 -0
@@ -3,19 +3,18 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.CreateAssignment = CreateAssignment;
4
4
  function CreateAssignment(target, createAssignment) {
5
5
  let last;
6
- let writeTo;
6
+ let writeTo = {};
7
7
  return function AssignNext(next) {
8
8
  if (next === last)
9
9
  return;
10
10
  last = next;
11
- writeTo ??= {};
12
11
  const nextKeys = next && Object.keys(next);
13
12
  for (let x = 0; nextKeys && x < nextKeys.length; x++) {
14
13
  const key = nextKeys[x];
15
14
  writeTo[key] ??= createAssignment(target, key);
16
15
  }
17
- const writeKeys = Object.keys(writeTo);
18
- for (let x = 0; x < writeKeys.length; x++)
19
- writeTo[writeKeys[x]](next);
16
+ const writeFunctions = Object.values(writeTo);
17
+ for (let x = 0; x < writeFunctions.length; x++)
18
+ writeFunctions[x](next);
20
19
  };
21
20
  }
@@ -0,0 +1 @@
1
+ export declare function CreateAttributeAssignment(target: HTMLElement, attribute: string): (next: any) => void;
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CreateAttributeAssignment = CreateAttributeAssignment;
4
+ function CreateAttributeAssignment(target, attribute) {
5
+ let lastValue;
6
+ return function (next) {
7
+ const nextValue = next && next[attribute];
8
+ if (nextValue === lastValue)
9
+ return;
10
+ if (nextValue === undefined)
11
+ target.removeAttribute(attribute);
12
+ else
13
+ target.setAttribute(attribute, nextValue);
14
+ lastValue = nextValue;
15
+ };
16
+ }
@@ -2,3 +2,4 @@ export declare function CreateNodeValueAssignment(target: HTMLElement): (value:
2
2
  export declare function CreatePropertyAssignment(target: any): (next: {
3
3
  [prop: string]: any;
4
4
  }) => void;
5
+ export declare function AssignProperties(target: any, next: any): void;
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.CreateNodeValueAssignment = CreateNodeValueAssignment;
4
4
  exports.CreatePropertyAssignment = CreatePropertyAssignment;
5
+ exports.AssignProperties = AssignProperties;
5
6
  const json_1 = require("../Utils/json");
6
7
  function CreateNodeValueAssignment(target) {
7
8
  let lastValue = target.nodeValue;
@@ -77,3 +78,9 @@ function CreatePropertyAssignment(target) {
77
78
  last.splice(endIndex);
78
79
  };
79
80
  }
81
+ function AssignProperties(target, next) {
82
+ WalkValue(next, function (path, value) {
83
+ const assignment = GetAssignmentFunction(path);
84
+ assignment(target, value);
85
+ });
86
+ }
@@ -7,6 +7,7 @@ const createPropertyAssignment_1 = require("./createPropertyAssignment");
7
7
  const createEventAssignment_1 = require("./createEventAssignment");
8
8
  const createAssignment_1 = require("./createAssignment");
9
9
  const createPropertyAssignment_2 = require("./createPropertyAssignment");
10
+ const createAttributeAssignment_1 = require("./createAttributeAssignment");
10
11
  let pendingUpdates = list_1.List.Create();
11
12
  let updateScheduled = false;
12
13
  const frameTime = 16;
@@ -50,6 +51,8 @@ function wrapPriorityUpdates(callback) {
50
51
  }
51
52
  exports.DOMNodeConfig = {
52
53
  createNode(type, namespace) {
54
+ if (type === 'text')
55
+ return window_1.wndw.document.createTextNode('');
53
56
  return namespace ?
54
57
  window_1.wndw.document.createElementNS(namespace, type) :
55
58
  window_1.wndw.document.createElement(type);
@@ -110,9 +113,15 @@ exports.DOMNodeConfig = {
110
113
  createPropertyAssignment(target) {
111
114
  return (0, createPropertyAssignment_2.CreatePropertyAssignment)(target);
112
115
  },
116
+ assignProperties(target, next) {
117
+ (0, createPropertyAssignment_1.AssignProperties)(target, next);
118
+ },
113
119
  createEventAssignment(target) {
114
120
  return (0, createAssignment_1.CreateAssignment)(target, createEventAssignment_1.CreateEventAssignment);
115
121
  },
122
+ createAttributeAssignment(target) {
123
+ return (0, createAssignment_1.CreateAssignment)(target, createAttributeAssignment_1.CreateAttributeAssignment);
124
+ },
116
125
  fireEvent(target, event, data) {
117
126
  var cEvent = new CustomEvent(event, data);
118
127
  target.dispatchEvent(cEvent);
@@ -129,4 +138,35 @@ exports.DOMNodeConfig = {
129
138
  replaceChildren(target, children) {
130
139
  target.replaceChildren(...children);
131
140
  },
141
+ reconcileChildren(target, children) {
142
+ if (children.length === 0 && !target.firstChild)
143
+ return;
144
+ if (children.length === 0 || !target.firstChild) {
145
+ target.replaceChildren(...children);
146
+ return;
147
+ }
148
+ let actualNode = target.firstChild;
149
+ let x = 0;
150
+ let removed = false;
151
+ for (; actualNode && x < children.length; x++) {
152
+ const expectedNode = children[x];
153
+ if (!removed && actualNode !== expectedNode) {
154
+ const remove = actualNode;
155
+ actualNode = actualNode.nextSibling;
156
+ target.removeChild(remove);
157
+ removed = true;
158
+ }
159
+ if (actualNode !== expectedNode) {
160
+ target.insertBefore(expectedNode, actualNode);
161
+ }
162
+ else {
163
+ actualNode = actualNode.nextSibling;
164
+ removed = false;
165
+ }
166
+ }
167
+ while (target.lastChild !== children[x - 1])
168
+ target.removeChild(target.lastChild);
169
+ for (; x < children.length; x++)
170
+ target.appendChild(children[x]);
171
+ }
132
172
  };
package/DOM/elements.d.ts CHANGED
@@ -1,26 +1,80 @@
1
- import { ElementNodeFunctionParam, ElementChildrenFunctionParam } from "../Node/elementNode.types";
2
- export declare function div<T>(nodeDef: ElementNodeFunctionParam<T>, children?: ElementChildrenFunctionParam<T>): import("../Node/elementNode.types").IElementNode<T>;
3
- export declare function a<T>(nodeDef: ElementNodeFunctionParam<T>, children?: ElementChildrenFunctionParam<T>): import("../Node/elementNode.types").IElementNode<T>;
4
- export declare function ul<T>(nodeDef: ElementNodeFunctionParam<T>, children?: ElementChildrenFunctionParam<T>): import("../Node/elementNode.types").IElementNode<T>;
5
- export declare function li<T>(nodeDef: ElementNodeFunctionParam<T>, children?: ElementChildrenFunctionParam<T>): import("../Node/elementNode.types").IElementNode<T>;
6
- export declare function br<T>(nodeDef: ElementNodeFunctionParam<T>): import("../Node/elementNode.types").IElementNode<T>;
7
- export declare function b<T>(nodeDef: ElementNodeFunctionParam<T>, children?: ElementChildrenFunctionParam<T>): import("../Node/elementNode.types").IElementNode<T>;
8
- export declare function span<T>(nodeDef: ElementNodeFunctionParam<T>, children?: ElementChildrenFunctionParam<T>): import("../Node/elementNode.types").IElementNode<T>;
9
- export declare function img<T>(nodeDef: ElementNodeFunctionParam<T>): import("../Node/elementNode.types").IElementNode<T>;
10
- export declare function video<T>(nodeDef: ElementNodeFunctionParam<T, HTMLVideoElement, HTMLVideoElementEventMap>, children?: ElementChildrenFunctionParam<T>): import("../Node/elementNode.types").IElementNode<T>;
11
- export declare function source<T>(nodeDef: ElementNodeFunctionParam<T>): import("../Node/elementNode.types").IElementNode<T>;
12
- export declare function input<T>(nodeDef: ElementNodeFunctionParam<T, HTMLInputElement>): import("../Node/elementNode.types").IElementNode<T>;
13
- export declare function textarea<T>(nodeDef: ElementNodeFunctionParam<T>): import("../Node/elementNode.types").IElementNode<T>;
14
- export declare function select<T>(nodeDef: ElementNodeFunctionParam<T, HTMLSelectElement>, children?: ElementChildrenFunctionParam<T>): import("../Node/elementNode.types").IElementNode<T>;
15
- export declare function option<T>(nodeDef: ElementNodeFunctionParam<T, HTMLOptionElement>, children?: ElementChildrenFunctionParam<T>): import("../Node/elementNode.types").IElementNode<T>;
16
- export declare function h1<T>(nodeDef: ElementNodeFunctionParam<T>, children?: ElementChildrenFunctionParam<T>): import("../Node/elementNode.types").IElementNode<T>;
17
- export declare function h2<T>(nodeDef: ElementNodeFunctionParam<T>, children?: ElementChildrenFunctionParam<T>): import("../Node/elementNode.types").IElementNode<T>;
18
- export declare function h3<T>(nodeDef: ElementNodeFunctionParam<T>, children?: ElementChildrenFunctionParam<T>): import("../Node/elementNode.types").IElementNode<T>;
19
- export declare function p<T>(nodeDef: ElementNodeFunctionParam<T>, children?: ElementChildrenFunctionParam<T>): import("../Node/elementNode.types").IElementNode<T>;
20
- export declare function style<T>(nodeDef: ElementNodeFunctionParam<T, HTMLStyleElement>, children?: ElementChildrenFunctionParam<T>): import("../Node/elementNode.types").IElementNode<T>;
21
- export declare function button<T>(nodeDef: ElementNodeFunctionParam<T, HTMLButtonElement>, children?: ElementChildrenFunctionParam<T>): import("../Node/elementNode.types").IElementNode<T>;
22
- export declare function table<T>(nodeDef: ElementNodeFunctionParam<T>, children?: ElementChildrenFunctionParam<T>): import("../Node/elementNode.types").IElementNode<T>;
23
- export declare function tbody<T>(nodeDef: ElementNodeFunctionParam<T>, children?: ElementChildrenFunctionParam<T>): import("../Node/elementNode.types").IElementNode<T>;
24
- export declare function th<T>(nodeDef: ElementNodeFunctionParam<T>, children?: ElementChildrenFunctionParam<T>): import("../Node/elementNode.types").IElementNode<T>;
25
- export declare function tr<T>(nodeDef: ElementNodeFunctionParam<T>, children?: ElementChildrenFunctionParam<T>): import("../Node/elementNode.types").IElementNode<T>;
26
- export declare function td<T>(nodeDef: ElementNodeFunctionParam<T>, children?: ElementChildrenFunctionParam<T>): import("../Node/elementNode.types").IElementNode<T>;
1
+ export declare const div: <T>(config: {
2
+ props?: import("../Node/vNode.types").FunctionOr<import("../Utils/utils.types").RecursivePartial<HTMLElement>>;
3
+ attrs?: import("../Node/vNode.types").FunctionOr<{
4
+ [name: string]: string;
5
+ }>;
6
+ on?: import("../Node/vNode.types").FunctionOr<import("../Node/vNode.types").vNodeEvents<HTMLElementEventMap>>;
7
+ data?: () => T | Array<T> | Promise<Array<T>> | Promise<T>;
8
+ }, children?: import("../Node/vNode.types").vNode[] | ((data: T) => string | import("../Node/vNode.types").vNode | import("../Node/vNode.types").vNode[])) => import("../Node/vNode.types").vNode;
9
+ export declare const a: <T>(config: {
10
+ props?: import("../Node/vNode.types").FunctionOr<import("../Utils/utils.types").RecursivePartial<HTMLElement>>;
11
+ attrs?: import("../Node/vNode.types").FunctionOr<{
12
+ [name: string]: string;
13
+ }>;
14
+ on?: import("../Node/vNode.types").FunctionOr<import("../Node/vNode.types").vNodeEvents<HTMLElementEventMap>>;
15
+ data?: () => T | Array<T> | Promise<Array<T>> | Promise<T>;
16
+ }, children?: import("../Node/vNode.types").vNode[] | ((data: T) => string | import("../Node/vNode.types").vNode | import("../Node/vNode.types").vNode[])) => import("../Node/vNode.types").vNode;
17
+ export declare const button: <T>(config: {
18
+ props?: import("../Node/vNode.types").FunctionOr<import("../Utils/utils.types").RecursivePartial<HTMLButtonElement>>;
19
+ attrs?: import("../Node/vNode.types").FunctionOr<{
20
+ [name: string]: string;
21
+ }>;
22
+ on?: import("../Node/vNode.types").FunctionOr<import("../Node/vNode.types").vNodeEvents<HTMLElementEventMap>>;
23
+ data?: () => T | Array<T> | Promise<Array<T>> | Promise<T>;
24
+ }, children?: import("../Node/vNode.types").vNode[] | ((data: T) => string | import("../Node/vNode.types").vNode | import("../Node/vNode.types").vNode[])) => import("../Node/vNode.types").vNode;
25
+ export declare const h1: <T>(config: {
26
+ props?: import("../Node/vNode.types").FunctionOr<import("../Utils/utils.types").RecursivePartial<HTMLElement>>;
27
+ attrs?: import("../Node/vNode.types").FunctionOr<{
28
+ [name: string]: string;
29
+ }>;
30
+ on?: import("../Node/vNode.types").FunctionOr<import("../Node/vNode.types").vNodeEvents<HTMLElementEventMap>>;
31
+ data?: () => T | Array<T> | Promise<Array<T>> | Promise<T>;
32
+ }, children?: import("../Node/vNode.types").vNode[] | ((data: T) => string | import("../Node/vNode.types").vNode | import("../Node/vNode.types").vNode[])) => import("../Node/vNode.types").vNode;
33
+ export declare const input: <T>(config: {
34
+ props?: import("../Node/vNode.types").FunctionOr<import("../Utils/utils.types").RecursivePartial<HTMLInputElement>>;
35
+ attrs?: import("../Node/vNode.types").FunctionOr<{
36
+ [name: string]: string;
37
+ }>;
38
+ on?: import("../Node/vNode.types").FunctionOr<import("../Node/vNode.types").vNodeEvents<HTMLElementEventMap>>;
39
+ data?: () => T | Array<T> | Promise<Array<T>> | Promise<T>;
40
+ }, children?: import("../Node/vNode.types").vNode[] | ((data: T) => string | import("../Node/vNode.types").vNode | import("../Node/vNode.types").vNode[])) => import("../Node/vNode.types").vNode;
41
+ export declare const span: <T>(config: {
42
+ props?: import("../Node/vNode.types").FunctionOr<import("../Utils/utils.types").RecursivePartial<HTMLElement>>;
43
+ attrs?: import("../Node/vNode.types").FunctionOr<{
44
+ [name: string]: string;
45
+ }>;
46
+ on?: import("../Node/vNode.types").FunctionOr<import("../Node/vNode.types").vNodeEvents<HTMLElementEventMap>>;
47
+ data?: () => T | Array<T> | Promise<Array<T>> | Promise<T>;
48
+ }, children?: import("../Node/vNode.types").vNode[] | ((data: T) => string | import("../Node/vNode.types").vNode | import("../Node/vNode.types").vNode[])) => import("../Node/vNode.types").vNode;
49
+ export declare const table: <T>(config: {
50
+ props?: import("../Node/vNode.types").FunctionOr<import("../Utils/utils.types").RecursivePartial<HTMLElement>>;
51
+ attrs?: import("../Node/vNode.types").FunctionOr<{
52
+ [name: string]: string;
53
+ }>;
54
+ on?: import("../Node/vNode.types").FunctionOr<import("../Node/vNode.types").vNodeEvents<HTMLElementEventMap>>;
55
+ data?: () => T | Array<T> | Promise<Array<T>> | Promise<T>;
56
+ }, children?: import("../Node/vNode.types").vNode[] | ((data: T) => string | import("../Node/vNode.types").vNode | import("../Node/vNode.types").vNode[])) => import("../Node/vNode.types").vNode;
57
+ export declare const tbody: <T>(config: {
58
+ props?: import("../Node/vNode.types").FunctionOr<import("../Utils/utils.types").RecursivePartial<HTMLElement>>;
59
+ attrs?: import("../Node/vNode.types").FunctionOr<{
60
+ [name: string]: string;
61
+ }>;
62
+ on?: import("../Node/vNode.types").FunctionOr<import("../Node/vNode.types").vNodeEvents<HTMLElementEventMap>>;
63
+ data?: () => T | Array<T> | Promise<Array<T>> | Promise<T>;
64
+ }, children?: import("../Node/vNode.types").vNode[] | ((data: T) => string | import("../Node/vNode.types").vNode | import("../Node/vNode.types").vNode[])) => import("../Node/vNode.types").vNode;
65
+ export declare const tr: <T>(config: {
66
+ props?: import("../Node/vNode.types").FunctionOr<import("../Utils/utils.types").RecursivePartial<HTMLElement>>;
67
+ attrs?: import("../Node/vNode.types").FunctionOr<{
68
+ [name: string]: string;
69
+ }>;
70
+ on?: import("../Node/vNode.types").FunctionOr<import("../Node/vNode.types").vNodeEvents<HTMLElementEventMap>>;
71
+ data?: () => T | Array<T> | Promise<Array<T>> | Promise<T>;
72
+ }, children?: import("../Node/vNode.types").vNode[] | ((data: T) => string | import("../Node/vNode.types").vNode | import("../Node/vNode.types").vNode[])) => import("../Node/vNode.types").vNode;
73
+ export declare const td: <T>(config: {
74
+ props?: import("../Node/vNode.types").FunctionOr<import("../Utils/utils.types").RecursivePartial<HTMLElement>>;
75
+ attrs?: import("../Node/vNode.types").FunctionOr<{
76
+ [name: string]: string;
77
+ }>;
78
+ on?: import("../Node/vNode.types").FunctionOr<import("../Node/vNode.types").vNodeEvents<HTMLElementEventMap>>;
79
+ data?: () => T | Array<T> | Promise<Array<T>> | Promise<T>;
80
+ }, children?: import("../Node/vNode.types").vNode[] | ((data: T) => string | import("../Node/vNode.types").vNode | import("../Node/vNode.types").vNode[])) => import("../Node/vNode.types").vNode;
package/DOM/elements.js CHANGED
@@ -1,103 +1,14 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.div = div;
4
- exports.a = a;
5
- exports.ul = ul;
6
- exports.li = li;
7
- exports.br = br;
8
- exports.b = b;
9
- exports.span = span;
10
- exports.img = img;
11
- exports.video = video;
12
- exports.source = source;
13
- exports.input = input;
14
- exports.textarea = textarea;
15
- exports.select = select;
16
- exports.option = option;
17
- exports.h1 = h1;
18
- exports.h2 = h2;
19
- exports.h3 = h3;
20
- exports.p = p;
21
- exports.style = style;
22
- exports.button = button;
23
- exports.table = table;
24
- exports.tbody = tbody;
25
- exports.th = th;
26
- exports.tr = tr;
27
- exports.td = td;
28
- const elementNode_1 = require("../Node/elementNode");
29
- function div(nodeDef, children) {
30
- return elementNode_1.ElementNode.Create("div", null, nodeDef, children);
31
- }
32
- function a(nodeDef, children) {
33
- return elementNode_1.ElementNode.Create("a", null, nodeDef, children);
34
- }
35
- function ul(nodeDef, children) {
36
- return elementNode_1.ElementNode.Create("ul", null, nodeDef, children);
37
- }
38
- function li(nodeDef, children) {
39
- return elementNode_1.ElementNode.Create("li", null, nodeDef, children);
40
- }
41
- function br(nodeDef) {
42
- return elementNode_1.ElementNode.Create("br", null, nodeDef, null);
43
- }
44
- function b(nodeDef, children) {
45
- return elementNode_1.ElementNode.Create("b", null, nodeDef, children);
46
- }
47
- function span(nodeDef, children) {
48
- return elementNode_1.ElementNode.Create("span", null, nodeDef, children);
49
- }
50
- function img(nodeDef) {
51
- return elementNode_1.ElementNode.Create("img", null, nodeDef, null);
52
- }
53
- function video(nodeDef, children) {
54
- return elementNode_1.ElementNode.Create("video", null, nodeDef, children);
55
- }
56
- function source(nodeDef) {
57
- return elementNode_1.ElementNode.Create("source", null, nodeDef, null);
58
- }
59
- function input(nodeDef) {
60
- return elementNode_1.ElementNode.Create("input", null, nodeDef, null);
61
- }
62
- function textarea(nodeDef) {
63
- return elementNode_1.ElementNode.Create("textarea", null, nodeDef, null);
64
- }
65
- function select(nodeDef, children) {
66
- return elementNode_1.ElementNode.Create("select", null, nodeDef, children);
67
- }
68
- function option(nodeDef, children) {
69
- return elementNode_1.ElementNode.Create("option", null, nodeDef, children);
70
- }
71
- function h1(nodeDef, children) {
72
- return elementNode_1.ElementNode.Create("h1", null, nodeDef, children);
73
- }
74
- function h2(nodeDef, children) {
75
- return elementNode_1.ElementNode.Create("h2", null, nodeDef, children);
76
- }
77
- function h3(nodeDef, children) {
78
- return elementNode_1.ElementNode.Create("h3", null, nodeDef, children);
79
- }
80
- function p(nodeDef, children) {
81
- return elementNode_1.ElementNode.Create("p", null, nodeDef, children);
82
- }
83
- function style(nodeDef, children) {
84
- return elementNode_1.ElementNode.Create("style", null, nodeDef, children);
85
- }
86
- function button(nodeDef, children) {
87
- return elementNode_1.ElementNode.Create("button", null, nodeDef, children);
88
- }
89
- function table(nodeDef, children) {
90
- return elementNode_1.ElementNode.Create("table", null, nodeDef, children);
91
- }
92
- function tbody(nodeDef, children) {
93
- return elementNode_1.ElementNode.Create("tbody", null, nodeDef, children);
94
- }
95
- function th(nodeDef, children) {
96
- return elementNode_1.ElementNode.Create("th", null, nodeDef, children);
97
- }
98
- function tr(nodeDef, children) {
99
- return elementNode_1.ElementNode.Create("tr", null, nodeDef, children);
100
- }
101
- function td(nodeDef, children) {
102
- return elementNode_1.ElementNode.Create("td", null, nodeDef, children);
103
- }
3
+ exports.td = exports.tr = exports.tbody = exports.table = exports.span = exports.input = exports.h1 = exports.button = exports.a = exports.div = void 0;
4
+ const vNode_1 = require("../Node/vNode");
5
+ exports.div = vNode_1.vNode.ToFunction('div');
6
+ exports.a = vNode_1.vNode.ToFunction('a');
7
+ exports.button = vNode_1.vNode.ToFunction('button');
8
+ exports.h1 = vNode_1.vNode.ToFunction('h1');
9
+ exports.input = vNode_1.vNode.ToFunction('input');
10
+ exports.span = vNode_1.vNode.ToFunction('span');
11
+ exports.table = vNode_1.vNode.ToFunction('table');
12
+ exports.tbody = vNode_1.vNode.ToFunction('tbody');
13
+ exports.tr = vNode_1.vNode.ToFunction('tr');
14
+ exports.td = vNode_1.vNode.ToFunction('td');
package/DOM/index.d.ts CHANGED
@@ -1,4 +1,3 @@
1
1
  export * from "./elements";
2
- export * from "./svgElements";
3
2
  export * from "./createPropertyAssignment";
4
3
  export * from "./createEventAssignment";
package/DOM/index.js CHANGED
@@ -15,6 +15,5 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./elements"), exports);
18
- __exportStar(require("./svgElements"), exports);
19
18
  __exportStar(require("./createPropertyAssignment"), exports);
20
19
  __exportStar(require("./createEventAssignment"), exports);
@@ -1,4 +0,0 @@
1
- import { ElementChildrenFunction, ElementNodeFunctionParam } from "../Node/elementNode.types";
2
- export declare function svg<T>(nodeDef: ElementNodeFunctionParam<T>, children?: ElementChildrenFunction<T>): import("../Node/elementNode.types").IElementNode<T>;
3
- export declare function g<T>(nodeDef: ElementNodeFunctionParam<T>, children?: ElementChildrenFunction<T>): import("../Node/elementNode.types").IElementNode<T>;
4
- export declare function circle<T>(nodeDef: ElementNodeFunctionParam<T>, children?: ElementChildrenFunction<T>): import("../Node/elementNode.types").IElementNode<T>;
@@ -1,16 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.svg = svg;
4
- exports.g = g;
5
- exports.circle = circle;
6
- const elementNode_1 = require("../Node/elementNode");
7
- const svgNs = "http://www.w3.org/2000/svg";
8
- function svg(nodeDef, children) {
9
- return elementNode_1.ElementNode.Create("svg", svgNs, nodeDef, children);
10
- }
11
- function g(nodeDef, children) {
12
- return elementNode_1.ElementNode.Create("g", svgNs, nodeDef, children);
13
- }
14
- function circle(nodeDef, children) {
15
- return elementNode_1.ElementNode.Create("circle", svgNs, nodeDef, children);
16
- }
@@ -1,8 +1,9 @@
1
- import { ComponentNodeEvents, ComponentNodeFunction } from "./componentNode.types";
1
+ import { ComponentEvents } from "./component.types";
2
2
  import { ObservableScope } from "../Store/Tree/observableScope";
3
- import { INodeRefBase, ElementNodeRefTypes } from "./nodeRef.types";
4
- export declare class Component<D = void, T = void, E = void> {
5
- private nodeRef;
3
+ import { FunctionOr, vNode as vNodeType } from "./vNode.types";
4
+ import { RecursivePartial } from "../Utils/utils.types";
5
+ export declare class Component<D = void, T = void, E = {}> {
6
+ private vNode;
6
7
  private componentEvents;
7
8
  private scope;
8
9
  private templates;
@@ -10,22 +11,24 @@ export declare class Component<D = void, T = void, E = void> {
10
11
  get Destroyed(): boolean;
11
12
  protected get Scope(): ObservableScope<D>;
12
13
  protected get Data(): D;
13
- protected get NodeRef(): INodeRefBase;
14
+ protected get VNode(): vNodeType;
14
15
  protected get Templates(): T;
15
- constructor(data: D | (() => (D | Promise<D>)), templates: T, nodeRef: INodeRefBase, componentEvents: ComponentNodeEvents<E>);
16
- Template(): ElementNodeRefTypes | ElementNodeRefTypes[];
16
+ constructor(data: D | (() => (D | Promise<D>)), templates: T, vNode: vNodeType, componentEvents: ComponentEvents<E>);
17
+ Template(): vNodeType | vNodeType[];
17
18
  Bound(): void;
18
19
  Fire<P extends keyof E>(event: P, data?: E[P]): void;
19
20
  Destroy(): void;
20
21
  }
22
+ type vComponentConfig<D, E, P = HTMLElement> = {
23
+ data?: () => D | undefined;
24
+ props?: FunctionOr<RecursivePartial<P>> | undefined;
25
+ on?: ComponentEvents<E> | undefined;
26
+ };
27
+ type ComponentConstructor<D, T, E> = {
28
+ new (data: D | (() => (D | Promise<D>)), templates: T, vNode: vNodeType, componentEvents: ComponentEvents<E>): Component<D, T, E>;
29
+ };
21
30
  export declare namespace Component {
22
- function ToFunction<D = void, T = void, E = void>(type: string, constructor: ComponentConstructor<D, T, E>): ComponentNodeFunction<D, T, E>;
23
- function ToFunction<D = void, T = void, E = void>(type: string, namespace: string, constructor: ComponentConstructor<D, T, E>): ComponentNodeFunction<D, T, E>;
24
- function Register<D = void, T = void, E = void>(name: string, constructor: ComponentConstructor<D, T, E>): void;
25
- function Attach(node: Node, nodeRef: ElementNodeRefTypes): void;
31
+ function ToFunction<D, T, E, P = HTMLElement>(type: string, constructor: ComponentConstructor<D, T, E>, namespace?: string): (config: vComponentConfig<D, E, P>, templates?: T) => vNodeType;
32
+ function Attach(node: any, vnode: vNodeType): vNodeType;
26
33
  }
27
- export type ComponentConstructor<D, T, E> = {
28
- new (data: {
29
- (): D | Promise<D>;
30
- }, templates: T, nodeRef: INodeRefBase, componentEvents: ComponentNodeEvents<E>): Component<D, T, E>;
31
- };
34
+ export {};
package/Node/component.js CHANGED
@@ -1,16 +1,15 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Component = void 0;
4
- const nodeRef_1 = require("./nodeRef");
5
- const componentNode_1 = require("./componentNode");
6
4
  const decorators_1 = require("../Utils/decorators");
7
5
  const observableScope_1 = require("../Store/Tree/observableScope");
6
+ const vNode_1 = require("./vNode");
8
7
  class Component {
9
8
  get Injector() {
10
- return this.nodeRef.injector;
9
+ return this.vNode.injector;
11
10
  }
12
11
  get Destroyed() {
13
- return this.nodeRef.destroyed;
12
+ return this.vNode.destroyed;
14
13
  }
15
14
  get Scope() {
16
15
  return this.scope;
@@ -18,14 +17,14 @@ class Component {
18
17
  get Data() {
19
18
  return this.scope.Value;
20
19
  }
21
- get NodeRef() {
22
- return this.nodeRef;
20
+ get VNode() {
21
+ return this.vNode;
23
22
  }
24
23
  get Templates() {
25
24
  return this.templates;
26
25
  }
27
- constructor(data, templates, nodeRef, componentEvents) {
28
- this.nodeRef = nodeRef;
26
+ constructor(data, templates, vNode, componentEvents) {
27
+ this.vNode = vNode;
29
28
  this.componentEvents = componentEvents;
30
29
  if (typeof data === 'function')
31
30
  this.scope = new observableScope_1.ObservableScope(data);
@@ -48,31 +47,26 @@ class Component {
48
47
  }
49
48
  exports.Component = Component;
50
49
  (function (Component) {
51
- function ToFunction(type, namespace, constructor) {
52
- if (constructor === undefined) {
53
- constructor = namespace;
54
- namespace = undefined;
55
- }
56
- return componentNode_1.ComponentNode.ToFunction(type, namespace, constructor);
57
- }
58
- Component.ToFunction = ToFunction;
59
- function Register(name, constructor) {
60
- const componentFunction = ToFunction(`${name}-component`, undefined, constructor);
61
- class WebComponent extends HTMLElement {
62
- constructor() {
63
- super();
64
- const shadowRoot = this.attachShadow({ mode: "open" });
65
- const node = componentFunction({});
66
- Attach(shadowRoot, node);
50
+ function ToFunction(type, constructor, namespace) {
51
+ return function (config, templates) {
52
+ const { data, on, props } = config;
53
+ class ConcreteComponent extends constructor {
54
+ constructor(vnode) {
55
+ super(data, templates, vnode, on);
56
+ }
67
57
  }
68
- }
69
- customElements.define(name, WebComponent);
58
+ const definition = {
59
+ type,
60
+ namespace: namespace ?? null,
61
+ props,
62
+ componentConstructor: ConcreteComponent
63
+ };
64
+ return vNode_1.vNode.Create(definition);
65
+ };
70
66
  }
71
- Component.Register = Register;
72
- function Attach(node, nodeRef) {
73
- nodeRef_1.NodeRef.Init(nodeRef);
74
- var rootRef = nodeRef_1.NodeRef.Wrap(node);
75
- nodeRef_1.NodeRef.AddChild(rootRef, nodeRef);
67
+ Component.ToFunction = ToFunction;
68
+ function Attach(node, vnode) {
69
+ return vNode_1.vNode.Attach(node, vnode);
76
70
  }
77
71
  Component.Attach = Attach;
78
72
  })(Component || (exports.Component = Component = {}));
@@ -0,0 +1,5 @@
1
+ export type ComponentEvents<E = void> = E extends void ? void : {
2
+ [P in keyof E]?: {
3
+ (data: E[P]): void;
4
+ };
5
+ };
@@ -26,14 +26,21 @@ export interface INodeConfig {
26
26
  createPropertyAssignment(target: any): {
27
27
  (next: any): void;
28
28
  };
29
+ assignProperties(target: any, next: any): void;
29
30
  createEventAssignment(target: any): {
30
31
  (next: {
31
32
  [event: string]: (event: Event) => void;
32
33
  }): void;
33
34
  };
35
+ createAttributeAssignment(target: any): {
36
+ (next: {
37
+ [attribute: string]: string;
38
+ }): void;
39
+ };
34
40
  getFirstChild(target: any): any;
35
41
  getLastChild(target: any): any;
36
42
  getNextSibling(target: any): any;
37
43
  replaceChildren(target: any, children: any[]): void;
44
+ reconcileChildren(target: any, children: any[]): void;
38
45
  }
39
46
  export declare const NodeConfig: INodeConfig;
@@ -0,0 +1,20 @@
1
+ import { RecursivePartial } from "../Utils/utils.types";
2
+ import { vNode as vNodeType, vNodeDefinition, FunctionOr, vNodeEvents } from "./vNode.types";
3
+ type vNodeConfig<P = HTMLElement, E = HTMLElementEventMap, T = never> = {
4
+ props?: FunctionOr<RecursivePartial<P>>;
5
+ attrs?: FunctionOr<{
6
+ [name: string]: string;
7
+ }>;
8
+ on?: FunctionOr<vNodeEvents<E>>;
9
+ data?: () => T | Array<T> | Promise<Array<T>> | Promise<T>;
10
+ };
11
+ export declare namespace vNode {
12
+ function Create<P = HTMLElement, E = HTMLElementEventMap, T = never>(definition: vNodeDefinition<P, E, T>): vNodeType;
13
+ function Init(vnode: vNodeType): void;
14
+ function InitAll(vnodes: vNodeType[]): void;
15
+ function Destroy(vnode: vNodeType): void;
16
+ function DestroyAll(vnodes: vNodeType[]): void;
17
+ function ToFunction<P = HTMLElement, E = HTMLElementEventMap>(type: string, namespace?: string): <T>(config: vNodeConfig<P, E, T>, children?: vNodeType[] | ((data: T) => string | vNodeType | vNodeType[])) => vNodeType;
18
+ function Attach(node: any, vnode: vNodeType): vNodeType;
19
+ }
20
+ export {};