dothtml 5.2.12 → 6.0.0-beta.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (130) hide show
  1. package/build_module/constants.d.ts +1 -0
  2. package/build_module/constants.js +2 -0
  3. package/build_module/constants.js.map +1 -0
  4. package/build_module/decoration/component.d.ts +25 -0
  5. package/build_module/decoration/component.js +32 -0
  6. package/build_module/decoration/component.js.map +1 -0
  7. package/build_module/decoration/style.d.ts +0 -0
  8. package/build_module/decoration/style.js +1 -0
  9. package/build_module/decoration/style.js.map +1 -0
  10. package/build_module/dot.d.ts +3 -0
  11. package/build_module/dot.js +514 -0
  12. package/build_module/dot.js.map +1 -0
  13. package/build_module/helpers.d.ts +2 -0
  14. package/build_module/helpers.js +49 -0
  15. package/build_module/helpers.js.map +1 -0
  16. package/build_module/index.d.ts +7 -0
  17. package/build_module/index.js +5 -0
  18. package/build_module/index.js.map +1 -0
  19. package/build_module/reactive.d.ts +37 -0
  20. package/build_module/reactive.js +120 -0
  21. package/build_module/reactive.js.map +1 -0
  22. package/build_module/v-dom-node.d.ts +0 -0
  23. package/build_module/v-dom-node.js +1 -0
  24. package/build_module/v-dom-node.js.map +1 -0
  25. package/build_module/vdom-nodes/collection-vdom.d.ts +24 -0
  26. package/build_module/vdom-nodes/collection-vdom.js +154 -0
  27. package/build_module/vdom-nodes/collection-vdom.js.map +1 -0
  28. package/build_module/vdom-nodes/component-vdom.d.ts +14 -0
  29. package/build_module/vdom-nodes/component-vdom.js +60 -0
  30. package/build_module/vdom-nodes/component-vdom.js.map +1 -0
  31. package/build_module/vdom-nodes/conditional-vdom.d.ts +14 -0
  32. package/build_module/vdom-nodes/conditional-vdom.js +97 -0
  33. package/build_module/vdom-nodes/conditional-vdom.js.map +1 -0
  34. package/build_module/vdom-nodes/container-vdom.d.ts +23 -0
  35. package/build_module/vdom-nodes/container-vdom.js +85 -0
  36. package/build_module/vdom-nodes/container-vdom.js.map +1 -0
  37. package/build_module/vdom-nodes/element-vdom.d.ts +18 -0
  38. package/build_module/vdom-nodes/element-vdom.js +88 -0
  39. package/build_module/vdom-nodes/element-vdom.js.map +1 -0
  40. package/build_module/vdom-nodes/html-vdom.d.ts +13 -0
  41. package/build_module/vdom-nodes/html-vdom.js +53 -0
  42. package/build_module/vdom-nodes/html-vdom.js.map +1 -0
  43. package/build_module/vdom-nodes/text-vdom.d.ts +11 -0
  44. package/build_module/vdom-nodes/text-vdom.js +37 -0
  45. package/build_module/vdom-nodes/text-vdom.js.map +1 -0
  46. package/build_module/vdom-nodes/vdom.d.ts +7 -0
  47. package/build_module/vdom-nodes/vdom.js +28 -0
  48. package/build_module/vdom-nodes/vdom.js.map +1 -0
  49. package/package.json +26 -19
  50. package/lib/arg-callback-obj.d.ts +0 -29
  51. package/lib/arg-callback-obj.js +0 -64
  52. package/lib/arg-callback-obj.js.map +0 -1
  53. package/lib/built-in-components/nav-link.d.ts +0 -8
  54. package/lib/built-in-components/nav-link.js +0 -24
  55. package/lib/built-in-components/nav-link.js.map +0 -1
  56. package/lib/built-in-components/router.d.ts +0 -57
  57. package/lib/built-in-components/router.js +0 -282
  58. package/lib/built-in-components/router.js.map +0 -1
  59. package/lib/component.d.ts +0 -93
  60. package/lib/component.js +0 -354
  61. package/lib/component.js.map +0 -1
  62. package/lib/dot-util.d.ts +0 -26
  63. package/lib/dot-util.js +0 -62
  64. package/lib/dot-util.js.map +0 -1
  65. package/lib/dot.d.ts +0 -5
  66. package/lib/dot.js +0 -1129
  67. package/lib/dot.js.map +0 -1
  68. package/lib/dothtml.d.ts +0 -29
  69. package/lib/dothtml.js +0 -15
  70. package/lib/dothtml.js.map +0 -1
  71. package/lib/err.d.ts +0 -2
  72. package/lib/err.js +0 -26
  73. package/lib/err.js.map +0 -1
  74. package/lib/event-bus.d.ts +0 -10
  75. package/lib/event-bus.js +0 -37
  76. package/lib/event-bus.js.map +0 -1
  77. package/lib/i-dot.d.ts +0 -689
  78. package/lib/i-dot.js +0 -3
  79. package/lib/i-dot.js.map +0 -1
  80. package/lib/node-polyfill.d.ts +0 -2
  81. package/lib/node-polyfill.js +0 -14
  82. package/lib/node-polyfill.js.map +0 -1
  83. package/lib/observable-array.d.ts +0 -49
  84. package/lib/observable-array.js +0 -274
  85. package/lib/observable-array.js.map +0 -1
  86. package/lib/pages/home-page.d.ts +0 -9
  87. package/lib/pages/home-page.js +0 -24
  88. package/lib/pages/home-page.js.map +0 -1
  89. package/lib/styling/css-types.ts/css-angle.d.ts +0 -7
  90. package/lib/styling/css-types.ts/css-angle.js +0 -22
  91. package/lib/styling/css-types.ts/css-angle.js.map +0 -1
  92. package/lib/styling/css-types.ts/css-color.d.ts +0 -9
  93. package/lib/styling/css-types.ts/css-color.js +0 -824
  94. package/lib/styling/css-types.ts/css-color.js.map +0 -1
  95. package/lib/styling/css-types.ts/css-complex.d.ts +0 -7
  96. package/lib/styling/css-types.ts/css-complex.js +0 -23
  97. package/lib/styling/css-types.ts/css-complex.js.map +0 -1
  98. package/lib/styling/css-types.ts/css-data-type.d.ts +0 -5
  99. package/lib/styling/css-types.ts/css-data-type.js +0 -9
  100. package/lib/styling/css-types.ts/css-data-type.js.map +0 -1
  101. package/lib/styling/css-types.ts/css-filter.d.ts +0 -22
  102. package/lib/styling/css-types.ts/css-filter.js +0 -121
  103. package/lib/styling/css-types.ts/css-filter.js.map +0 -1
  104. package/lib/styling/css-types.ts/css-length.d.ts +0 -7
  105. package/lib/styling/css-types.ts/css-length.js +0 -24
  106. package/lib/styling/css-types.ts/css-length.js.map +0 -1
  107. package/lib/styling/css-types.ts/css-number.d.ts +0 -6
  108. package/lib/styling/css-types.ts/css-number.js +0 -17
  109. package/lib/styling/css-types.ts/css-number.js.map +0 -1
  110. package/lib/styling/css-types.ts/css-percentage.d.ts +0 -5
  111. package/lib/styling/css-types.ts/css-percentage.js +0 -13
  112. package/lib/styling/css-types.ts/css-percentage.js.map +0 -1
  113. package/lib/styling/css-types.ts/css-transform.d.ts +0 -38
  114. package/lib/styling/css-types.ts/css-transform.js +0 -183
  115. package/lib/styling/css-types.ts/css-transform.js.map +0 -1
  116. package/lib/styling/css-types.ts/css-unknown.d.ts +0 -6
  117. package/lib/styling/css-types.ts/css-unknown.js +0 -17
  118. package/lib/styling/css-types.ts/css-unknown.js.map +0 -1
  119. package/lib/styling/css-types.ts/css-url.d.ts +0 -6
  120. package/lib/styling/css-types.ts/css-url.js +0 -45
  121. package/lib/styling/css-types.ts/css-url.js.map +0 -1
  122. package/lib/styling/i-dotcss.d.ts +0 -1085
  123. package/lib/styling/i-dotcss.js +0 -3
  124. package/lib/styling/i-dotcss.js.map +0 -1
  125. package/lib/styling/style-builder.d.ts +0 -24
  126. package/lib/styling/style-builder.js +0 -815
  127. package/lib/styling/style-builder.js.map +0 -1
  128. package/lib/styling/unit-function-tables.d.ts +0 -10
  129. package/lib/styling/unit-function-tables.js +0 -27
  130. package/lib/styling/unit-function-tables.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,GAAG,MAAM,OAAO,CAAC;AACxB,GAAG,CAAC,OAAO,GAAG,OAAO,CAAC;AAUtB,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC;AAEjB,OAAO,EAAE,GAAG,EAAE,CAAC"}
@@ -0,0 +1,37 @@
1
+ import { IReactive } from "dothtml-interfaces";
2
+ import ElementVdom from "./vdom-nodes/element-vdom";
3
+ import { TextVdom } from "./vdom-nodes/text-vdom";
4
+ import { HtmlVdom } from "./vdom-nodes/html-vdom";
5
+ import { ConditionalVdom } from "./vdom-nodes/conditional-vdom";
6
+ import CollectionVdom from "./vdom-nodes/collection-vdom";
7
+ export default class Reactive<Ti = any, To = Ti> implements IReactive<Ti, To> {
8
+ _value: Ti;
9
+ private _cachedLastValue;
10
+ key: string;
11
+ observingTextNodes: Record<number, TextVdom>;
12
+ observingHtmlNodes: Record<number, HtmlVdom>;
13
+ observingAttributes: Record<number, {
14
+ element: ElementVdom;
15
+ attribute: string;
16
+ }>;
17
+ observingCollections: Record<number, {
18
+ collection: CollectionVdom;
19
+ key?: string;
20
+ }>;
21
+ observingConditionals: Record<number, ConditionalVdom>;
22
+ observingCallbacks: Record<number, (value: To) => void>;
23
+ constructor();
24
+ getValue(): To;
25
+ setValue(v: Ti): void;
26
+ private updater;
27
+ transformer?: (input: Ti) => To;
28
+ nextId: number;
29
+ subscribeText(node: TextVdom): number;
30
+ subscribeHtml(node: HtmlVdom): number;
31
+ subscribeAttr(node: ElementVdom, attributeName: string): number;
32
+ subscribeCollection(node: CollectionVdom): number;
33
+ subscribeCond(node: ConditionalVdom): number;
34
+ subscribeCallback(callback: (value: To) => void): number;
35
+ detachBinding(id: number): void;
36
+ updateObservers(): void;
37
+ }
@@ -0,0 +1,120 @@
1
+ const TEXT_OFFSET = 0;
2
+ const HTML_OFFSET = 1;
3
+ const ATTR_OFFSET = 2;
4
+ const COND_OFFSET = 3;
5
+ const ARRAY_OFFSET = 4;
6
+ const CB_OFFSET = 5;
7
+ const CATEGORIES = CB_OFFSET + 1;
8
+ export default class Reactive {
9
+ constructor() {
10
+ this.observingTextNodes = {};
11
+ this.observingHtmlNodes = {};
12
+ this.observingAttributes = {};
13
+ this.observingCollections = {};
14
+ this.observingConditionals = {};
15
+ this.observingCallbacks = {};
16
+ this.nextId = 1;
17
+ }
18
+ getValue() {
19
+ return this.transformer ? this.transformer(this._value) : this._value;
20
+ }
21
+ setValue(v) {
22
+ this._value = v;
23
+ let newValue = this.getValue();
24
+ if (this._cachedLastValue != newValue) {
25
+ this._cachedLastValue = newValue;
26
+ this.updater(newValue);
27
+ }
28
+ }
29
+ updater(value) {
30
+ for (let o in this.observingTextNodes) {
31
+ let n = this.observingTextNodes[o];
32
+ n.textNode.textContent = value ?? "";
33
+ }
34
+ for (let o in this.observingHtmlNodes) {
35
+ let n = this.observingHtmlNodes[o];
36
+ n.updateHtml(value);
37
+ }
38
+ for (let o in this.observingAttributes) {
39
+ let a = this.observingAttributes[o];
40
+ a.element.setAttr(a.attribute, this);
41
+ }
42
+ for (let o in this.observingCollections) {
43
+ let c = this.observingCollections[o];
44
+ c.collection.updateList();
45
+ }
46
+ for (let o in this.observingConditionals) {
47
+ let a = this.observingConditionals[o];
48
+ a.updateConditions();
49
+ }
50
+ for (let o in this.observingCallbacks) {
51
+ let cb = this.observingCallbacks[o];
52
+ cb(value);
53
+ }
54
+ }
55
+ subscribeText(node) {
56
+ let id = TEXT_OFFSET + CATEGORIES * this.nextId++;
57
+ this.observingTextNodes[id] = node;
58
+ return id;
59
+ }
60
+ subscribeHtml(node) {
61
+ let id = HTML_OFFSET + CATEGORIES * this.nextId++;
62
+ this.observingHtmlNodes[id] = node;
63
+ return id;
64
+ }
65
+ subscribeAttr(node, attributeName) {
66
+ let id = ATTR_OFFSET + CATEGORIES * this.nextId++;
67
+ this.observingAttributes[id] = { element: node, attribute: attributeName };
68
+ return id;
69
+ }
70
+ subscribeCollection(node) {
71
+ let id = ARRAY_OFFSET + CATEGORIES * this.nextId++;
72
+ this.observingCollections[id] = { collection: node, key: null };
73
+ return id;
74
+ }
75
+ subscribeCond(node) {
76
+ let id = COND_OFFSET + CATEGORIES * this.nextId++;
77
+ this.observingConditionals[id] = node;
78
+ return id;
79
+ }
80
+ subscribeCallback(callback) {
81
+ let id = CB_OFFSET + CATEGORIES * this.nextId++;
82
+ this.observingCallbacks[id] = callback;
83
+ return id;
84
+ }
85
+ detachBinding(id) {
86
+ let category = id % CATEGORIES;
87
+ switch (category) {
88
+ case TEXT_OFFSET: {
89
+ delete this.observingTextNodes[id];
90
+ break;
91
+ }
92
+ case ATTR_OFFSET: {
93
+ delete this.observingAttributes[id];
94
+ break;
95
+ }
96
+ case HTML_OFFSET: {
97
+ delete this.observingHtmlNodes[id];
98
+ break;
99
+ }
100
+ case ARRAY_OFFSET: {
101
+ delete this.observingCollections[id];
102
+ break;
103
+ }
104
+ case COND_OFFSET: {
105
+ delete this.observingConditionals[id];
106
+ break;
107
+ }
108
+ case CB_OFFSET: {
109
+ delete this.observingCallbacks[id];
110
+ break;
111
+ }
112
+ }
113
+ }
114
+ updateObservers() {
115
+ let updatedValue = this.getValue();
116
+ this._cachedLastValue = updatedValue;
117
+ this.updater(updatedValue);
118
+ }
119
+ }
120
+ //# sourceMappingURL=reactive.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reactive.js","sourceRoot":"","sources":["../src/reactive.ts"],"names":[],"mappings":"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"}
File without changes
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=v-dom-node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"v-dom-node.js","sourceRoot":"","sources":["../src/v-dom-node.ts"],"names":[],"mappings":""}
@@ -0,0 +1,24 @@
1
+ import Reactive from "../reactive";
2
+ import { Vdom } from "./vdom";
3
+ import { ObservableCollection } from "./vdom-types";
4
+ type DatumMap = {
5
+ vdom: Vdom;
6
+ value: any;
7
+ keyValue: any;
8
+ afterNode: Node;
9
+ observableIndex: Reactive<number>;
10
+ };
11
+ export default class CollectionVdom extends Vdom {
12
+ value: ObservableCollection;
13
+ renderCallback: (x: any, i: number | string | Reactive, k: string) => Vdom;
14
+ startNode: Node;
15
+ endNode: Node;
16
+ observerId: number;
17
+ mappedItems: Array<DatumMap>;
18
+ constructor(value: ObservableCollection, renderCallback: (x: any, i: number | string, k: string) => Vdom);
19
+ _render(target: HTMLElement): void;
20
+ _unrender(): void;
21
+ private removeItem;
22
+ updateList(): void;
23
+ }
24
+ export {};
@@ -0,0 +1,154 @@
1
+ import { deepEqual } from "../helpers";
2
+ import Reactive from "../reactive";
3
+ import { TextVdom } from "./text-vdom";
4
+ import { Vdom } from "./vdom";
5
+ export default class CollectionVdom extends Vdom {
6
+ constructor(value, renderCallback) {
7
+ super();
8
+ this.observerId = 0;
9
+ this.mappedItems = [];
10
+ this.value = value;
11
+ this.renderCallback = renderCallback;
12
+ }
13
+ _render(target) {
14
+ if (this.value instanceof Reactive) {
15
+ this.observerId = this.value.subscribeCollection(this);
16
+ }
17
+ this.startNode = target.ownerDocument.createTextNode("");
18
+ this.endNode = target.ownerDocument.createTextNode("");
19
+ target.appendChild(this.startNode);
20
+ target.appendChild(this.endNode);
21
+ this.updateList();
22
+ }
23
+ _unrender() {
24
+ if (this.observerId && this.value instanceof Reactive) {
25
+ this.value.detachBinding(this.observerId);
26
+ this.observerId = null;
27
+ }
28
+ for (let i = 0; i < this.mappedItems.length; i++) {
29
+ let I = this.mappedItems[i];
30
+ I.vdom._unrender();
31
+ I.afterNode.parentElement.removeChild(I.afterNode);
32
+ }
33
+ this.mappedItems.length = 0;
34
+ this.startNode.parentElement.removeChild(this.startNode);
35
+ this.endNode.parentElement.removeChild(this.endNode);
36
+ this.startNode = null;
37
+ this.endNode = null;
38
+ }
39
+ removeItem(item) {
40
+ item.vdom._unrender();
41
+ item.afterNode.parentElement.removeChild(item.afterNode);
42
+ }
43
+ updateList() {
44
+ let key = null;
45
+ let mappedData;
46
+ {
47
+ let unmappedCollection = null;
48
+ if (this.value instanceof Reactive) {
49
+ unmappedCollection = this.value.getValue();
50
+ key = this.value.key ?? null;
51
+ }
52
+ else {
53
+ unmappedCollection = this.value;
54
+ }
55
+ if (unmappedCollection instanceof Array) {
56
+ mappedData = unmappedCollection.map((v, i) => {
57
+ let kv = !!key ? v[key] : null;
58
+ return {
59
+ vdom: null,
60
+ value: v,
61
+ keyValue: kv,
62
+ afterNode: null,
63
+ observableIndex: new Reactive()
64
+ };
65
+ });
66
+ }
67
+ else {
68
+ mappedData = [];
69
+ for (let k in unmappedCollection) {
70
+ let v = unmappedCollection[k];
71
+ let kv = !!key ? v[key] : k;
72
+ mappedData.push({
73
+ vdom: null,
74
+ value: v,
75
+ keyValue: kv,
76
+ afterNode: null,
77
+ observableIndex: new Reactive()
78
+ });
79
+ }
80
+ }
81
+ }
82
+ {
83
+ let oi = 0;
84
+ let ns = 0;
85
+ let ni = 0;
86
+ while (oi < this.mappedItems.length) {
87
+ let existing = this.mappedItems[oi];
88
+ let candidate = mappedData[ni];
89
+ if (!candidate) {
90
+ this.removeItem(existing);
91
+ this.mappedItems.splice(oi, 1);
92
+ ni = ns;
93
+ continue;
94
+ }
95
+ else if ((candidate == existing) || (key && candidate.keyValue == existing.keyValue)) {
96
+ ns++;
97
+ oi++;
98
+ ni = ns;
99
+ continue;
100
+ }
101
+ else {
102
+ ni++;
103
+ }
104
+ }
105
+ }
106
+ {
107
+ let oi = 0;
108
+ let ni = 0;
109
+ let afterTarget = this.startNode;
110
+ while (ni < mappedData.length) {
111
+ let existing = this.mappedItems[oi];
112
+ let candidate = mappedData[ni];
113
+ if (existing && ((candidate == existing) || (key && candidate.keyValue == existing.keyValue))) {
114
+ if (!deepEqual(existing.value, candidate.value)) {
115
+ existing.vdom._unrender();
116
+ existing.vdom = this.renderCallback(candidate.value, this.value instanceof Reactive ? existing.observableIndex : ni, candidate.keyValue);
117
+ existing.value = candidate.value;
118
+ existing.vdom._renderBefore(existing.afterNode);
119
+ }
120
+ else {
121
+ existing.observableIndex.setValue(ni);
122
+ }
123
+ afterTarget = existing.afterNode;
124
+ ni++;
125
+ oi++;
126
+ continue;
127
+ }
128
+ else {
129
+ let beforeTarget = afterTarget.ownerDocument.createTextNode("");
130
+ let ns = afterTarget.parentElement.nextSibling;
131
+ if (ns) {
132
+ this.startNode.parentElement.insertBefore(beforeTarget, ns);
133
+ }
134
+ else {
135
+ this.startNode.parentElement.appendChild(beforeTarget);
136
+ }
137
+ candidate.afterNode = beforeTarget;
138
+ candidate.observableIndex._value = ni;
139
+ let content = this.renderCallback(candidate.value, this.value instanceof Reactive ? candidate.observableIndex : ni, candidate.keyValue);
140
+ if (content instanceof Vdom) {
141
+ candidate.vdom = content;
142
+ }
143
+ else {
144
+ candidate.vdom = new TextVdom(content);
145
+ }
146
+ candidate.vdom._renderBefore(candidate.afterNode);
147
+ this.mappedItems.splice(ni, 0, candidate);
148
+ ni++;
149
+ }
150
+ }
151
+ }
152
+ }
153
+ }
154
+ //# sourceMappingURL=collection-vdom.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collection-vdom.js","sourceRoot":"","sources":["../../src/vdom-nodes/collection-vdom.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAsB,MAAM,YAAY,CAAC;AAC3D,OAAO,QAAQ,MAAM,aAAa,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAc9B,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,IAAI;IAU/C,YAAY,KAA2B,EAAE,cAA2D;QACnG,KAAK,EAAE,CAAC;QALT,eAAU,GAAG,CAAC,CAAC;QAEf,gBAAW,GAAoB,EAAE,CAAC;QAIjC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;IACtC,CAAC;IAED,OAAO,CAAC,MAAmB;QAE1B,IAAG,IAAI,CAAC,KAAK,YAAY,QAAQ,EAAC;YACjC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;SACvD;QAED,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,aAAa,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;QACzD,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,aAAa,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;QACvD,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACnC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACjC,IAAI,CAAC,UAAU,EAAE,CAAC;IACnB,CAAC;IAED,SAAS;QACR,IAAG,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,KAAK,YAAY,QAAQ,EAAC;YACpD,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC1C,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;SACvB;QAED,KAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAC;YAC/C,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;YAC5B,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;SACnD;QACD,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;QAE5B,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACzD,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACrD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;IACrB,CAAC;IAKO,UAAU,CAAC,IAAc;QAChC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QACtB,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC1D,CAAC;IAED,UAAU;QACT,IAAI,GAAG,GAAW,IAAI,CAAC;QACvB,IAAI,UAA2B,CAAC;QAEhC;YAEC,IAAI,kBAAkB,GAAG,IAA6C,CAAC;YACvE,IAAG,IAAI,CAAC,KAAK,YAAY,QAAQ,EAAC;gBACjC,kBAAkB,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAS,CAAC;gBAClD,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC;aAC7B;iBACG;gBACH,kBAAkB,GAAG,IAAI,CAAC,KAAK,CAAC;aAChC;YAED,IAAG,kBAAkB,YAAY,KAAK,EAAC;gBACtC,UAAU,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;oBAC5C,IAAI,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;oBAC/B,OAAO;wBACN,IAAI,EAAE,IAAI;wBACV,KAAK,EAAE,CAAC;wBACR,QAAQ,EAAE,EAAE;wBACZ,SAAS,EAAE,IAAI;wBACf,eAAe,EAAE,IAAI,QAAQ,EAAE;qBACnB,CAAC;gBACf,CAAC,CAAC,CAAC;aACH;iBACI;gBACJ,UAAU,GAAG,EAAE,CAAC;gBAChB,KAAI,IAAI,CAAC,IAAI,kBAAkB,EAAC;oBAC/B,IAAI,CAAC,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAC;oBAC9B,IAAI,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC5B,UAAU,CAAC,IAAI,CAAC;wBACf,IAAI,EAAE,IAAI;wBACV,KAAK,EAAE,CAAC;wBACR,QAAQ,EAAE,EAAE;wBACZ,SAAS,EAAE,IAAI;wBACf,eAAe,EAAE,IAAI,QAAQ,EAAE;qBACnB,CAAC,CAAC;iBACf;aACD;SACD;QAED;YACC,IAAI,EAAE,GAAG,CAAC,CAAC;YACX,IAAI,EAAE,GAAG,CAAC,CAAC;YACX,IAAI,EAAE,GAAG,CAAC,CAAC;YACX,OAAM,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAC;gBAClC,IAAI,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;gBACpC,IAAI,SAAS,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC;gBAC/B,IAAG,CAAC,SAAS,EAAC;oBACb,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;oBAC1B,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;oBAC/B,EAAE,GAAG,EAAE,CAAC;oBACR,SAAS;iBACT;qBACI,IAAG,CAAC,SAAS,IAAI,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,SAAS,CAAC,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAC,EAAC;oBACnF,EAAE,EAAE,CAAC;oBACL,EAAE,EAAE,CAAC;oBACL,EAAE,GAAG,EAAE,CAAC;oBACR,SAAS;iBACT;qBACG;oBACH,EAAE,EAAE,CAAC;iBACL;aACD;SACD;QAED;YACC,IAAI,EAAE,GAAG,CAAC,CAAC;YACX,IAAI,EAAE,GAAG,CAAC,CAAC;YACX,IAAI,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC;YACjC,OAAM,EAAE,GAAG,UAAU,CAAC,MAAM,EAAC;gBAC5B,IAAI,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;gBACpC,IAAI,SAAS,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC;gBAE/B,IAAG,QAAQ,IAAI,CAAC,CAAC,SAAS,IAAI,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,SAAS,CAAC,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAAC;oBAI5F,IAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,KAAK,CAAC,EAAC;wBAC9C,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;wBAC1B,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,YAAY,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC;wBACzI,QAAQ,CAAC,KAAK,GAAG,SAAS,CAAC,KAAK,CAAA;wBAChC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;qBAChD;yBACG;wBAEH,QAAQ,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;qBACtC;oBAED,WAAW,GAAG,QAAQ,CAAC,SAAS,CAAC;oBACjC,EAAE,EAAE,CAAC;oBACL,EAAE,EAAE,CAAC;oBAGL,SAAS;iBACT;qBACG;oBACH,IAAI,YAAY,GAAG,WAAW,CAAC,aAAa,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;oBAChE,IAAI,EAAE,GAAG,WAAW,CAAC,aAAa,CAAC,WAAW,CAAC;oBAC/C,IAAG,EAAE,EAAC;wBACL,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,YAAY,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;qBAC5D;yBACG;wBACH,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;qBACvD;oBACD,SAAS,CAAC,SAAS,GAAG,YAAY,CAAC;oBAEnC,SAAS,CAAC,eAAe,CAAC,MAAM,GAAG,EAAE,CAAC;oBACtC,IAAI,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,YAAY,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC;oBAExI,IAAG,OAAO,YAAY,IAAI,EAAC;wBAC1B,SAAS,CAAC,IAAI,GAAG,OAAO,CAAC;qBACzB;yBACG;wBACH,SAAS,CAAC,IAAI,GAAG,IAAI,QAAQ,CAAC,OAAO,CAAC,CAAC;qBACvC;oBACD,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;oBAElD,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;oBAC1C,EAAE,EAAE,CAAC;iBACL;aACD;SACD;IACF,CAAC;CACD"}
@@ -0,0 +1,14 @@
1
+ import { IComponent } from "dothtml-interfaces";
2
+ import { Vdom } from "./vdom";
3
+ import { ContainerVdom } from "./container-vdom";
4
+ export declare class ComponentVdom extends Vdom {
5
+ component: IComponent;
6
+ shadowEl: HTMLElement;
7
+ childShadowVdom: ContainerVdom;
8
+ sharedStyles: CSSStyleSheet;
9
+ constructor(component: IComponent);
10
+ private setupCustomElement;
11
+ _render(node: HTMLElement): void;
12
+ _unrender(): void;
13
+ toString(): string;
14
+ }
@@ -0,0 +1,60 @@
1
+ import { Vdom } from "./vdom";
2
+ export class ComponentVdom extends Vdom {
3
+ constructor(component) {
4
+ super();
5
+ this.component = component;
6
+ this.component.creating && this.component.creating();
7
+ this.childShadowVdom = this.component.build && this.component.build(...component._._meta.args);
8
+ this.component.built && this.component.built();
9
+ }
10
+ setupCustomElement(component, document) {
11
+ let cvdom = this;
12
+ let customElementConstructor = document.defaultView.customElements.get(component._._meta.tagName);
13
+ if (customElementConstructor == undefined) {
14
+ customElementConstructor = class extends HTMLElement {
15
+ set component(value) {
16
+ this._component = value;
17
+ this._renderComponent();
18
+ }
19
+ _renderComponent() {
20
+ if (cvdom instanceof Vdom) {
21
+ let shadow = this.attachShadow({ mode: 'open' });
22
+ this._component._.root = shadow;
23
+ cvdom.childShadowVdom._render(shadow);
24
+ }
25
+ else {
26
+ throw new Error("Component build function returned invalid object.");
27
+ }
28
+ }
29
+ };
30
+ document.defaultView.customElements.define(component._._meta.tagName, customElementConstructor);
31
+ }
32
+ }
33
+ _render(node) {
34
+ if (!this.component._)
35
+ throw new Error("Invalid component. Ensure components are created through the component factory or through decoration.");
36
+ if (this.component._?._meta?.isRendered)
37
+ throw new Error("Individual component instances cannot be rendered twice at once.");
38
+ if (!this.component._._meta)
39
+ this.component._._meta = {};
40
+ this.component._._meta.isRendered = true;
41
+ let document = node.ownerDocument;
42
+ this.setupCustomElement(this.component, document);
43
+ this.shadowEl = document.createElement(this.component._._meta.tagName);
44
+ this.shadowEl["component"] = this.component;
45
+ node.appendChild(this.shadowEl);
46
+ }
47
+ _unrender() {
48
+ this.component.deleting && this.component.deleting();
49
+ this.childShadowVdom._unrender();
50
+ this.childShadowVdom = null;
51
+ this.shadowEl.remove();
52
+ this.shadowEl = null;
53
+ this.component._._meta.isRendered = false;
54
+ this.component.deleted && this.component.deleted();
55
+ }
56
+ toString() {
57
+ return `<${this.component._._meta.tagName}></${this.component._._meta.tagName}>`;
58
+ }
59
+ }
60
+ //# sourceMappingURL=component-vdom.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"component-vdom.js","sourceRoot":"","sources":["../../src/vdom-nodes/component-vdom.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import Reactive from "../reactive";
2
+ import { ContainerVdom } from "./container-vdom";
3
+ import { Vdom } from "./vdom";
4
+ import { ConditionalNodeItem } from "./vdom-types";
5
+ export declare class ConditionalVdom extends Vdom {
6
+ private conditions;
7
+ private sealed;
8
+ private renderedIndex;
9
+ addCondition(condition: Reactive | boolean, vNode: ContainerVdom, seal?: boolean): void;
10
+ addAnchor(C: ConditionalNodeItem, node: HTMLElement): void;
11
+ _render(node: HTMLElement): void;
12
+ _unrender(): void;
13
+ updateConditions(): void;
14
+ }
@@ -0,0 +1,97 @@
1
+ import Reactive from "../reactive";
2
+ import { Vdom } from "./vdom";
3
+ export class ConditionalVdom extends Vdom {
4
+ constructor() {
5
+ super(...arguments);
6
+ this.conditions = [];
7
+ this.sealed = false;
8
+ this.renderedIndex = -1;
9
+ }
10
+ addCondition(condition, vNode, seal = false) {
11
+ if (this.sealed) {
12
+ throw new Error("Cannot add additional conditions to a sealed block.");
13
+ }
14
+ this.sealed = seal;
15
+ let C = {
16
+ condition,
17
+ vNode,
18
+ startAnchor: null,
19
+ endAnchor: null,
20
+ observerId: 0
21
+ };
22
+ this.conditions.push(C);
23
+ if (this.conditions[0].startAnchor) {
24
+ this.addAnchor(C, this.conditions[0].startAnchor.parentElement);
25
+ if (condition instanceof Reactive) {
26
+ C.observerId = condition.subscribeCond(this);
27
+ }
28
+ this.updateConditions();
29
+ }
30
+ }
31
+ addAnchor(C, node) {
32
+ C.startAnchor = node.ownerDocument.createTextNode("");
33
+ C.endAnchor = node.ownerDocument.createTextNode("");
34
+ node.appendChild(C.startAnchor);
35
+ node.appendChild(C.endAnchor);
36
+ }
37
+ _render(node) {
38
+ for (let c = 0; c < this.conditions.length; c++) {
39
+ let C = this.conditions[c];
40
+ if (C.startAnchor) {
41
+ throw new Error("Item is already rendered.");
42
+ }
43
+ this.addAnchor(C, node);
44
+ if (C.condition instanceof Reactive) {
45
+ C.observerId = C.condition.subscribeCond(this);
46
+ }
47
+ }
48
+ if (this.conditions.length)
49
+ this.updateConditions();
50
+ }
51
+ _unrender() {
52
+ if (this.conditions[0].startAnchor) {
53
+ for (let i = 0; i < this.conditions.length; i++) {
54
+ let C = this.conditions[i];
55
+ let start = C.startAnchor;
56
+ let end = C.endAnchor;
57
+ C.vNode._unrender();
58
+ start.parentElement.removeChild(start);
59
+ end.parentElement.removeChild(end);
60
+ C.startAnchor = null;
61
+ C.endAnchor = null;
62
+ if (C.condition instanceof Reactive) {
63
+ C.condition.detachBinding(C.observerId);
64
+ C.observerId = 0;
65
+ }
66
+ }
67
+ this.renderedIndex = -1;
68
+ }
69
+ }
70
+ updateConditions() {
71
+ let node = this.conditions[0].startAnchor.parentElement;
72
+ let newIndex = -1;
73
+ for (let c = 0; c < this.conditions.length; c++) {
74
+ let C = this.conditions[c];
75
+ if (C.condition instanceof Reactive ? C.condition.getValue() : C.condition) {
76
+ newIndex = c;
77
+ break;
78
+ }
79
+ }
80
+ if (newIndex != this.renderedIndex) {
81
+ {
82
+ if (this.renderedIndex != -1) {
83
+ let C = this.conditions[this.renderedIndex];
84
+ C.vNode._unrender();
85
+ }
86
+ }
87
+ {
88
+ this.renderedIndex = newIndex;
89
+ if (newIndex != -1) {
90
+ let C = this.conditions[newIndex];
91
+ C.vNode._renderBefore(C.endAnchor);
92
+ }
93
+ }
94
+ }
95
+ }
96
+ }
97
+ //# sourceMappingURL=conditional-vdom.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conditional-vdom.js","sourceRoot":"","sources":["../../src/vdom-nodes/conditional-vdom.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import { IComponent } from "dothtml-interfaces";
2
+ import Reactive from "../reactive";
3
+ import { ConditionalVdom } from "./conditional-vdom";
4
+ import ElementVdom from "./element-vdom";
5
+ import { Vdom } from "./vdom";
6
+ import { ObservableCollection } from "./vdom-types";
7
+ type ParentVdom = ContainerVdom | ConditionalVdom | ElementVdom;
8
+ export declare class ContainerVdom extends Vdom {
9
+ _children: Array<Vdom>;
10
+ _parent: ParentVdom;
11
+ constructor();
12
+ _addChild(content: Vdom): this;
13
+ _render(node: HTMLElement): void;
14
+ _unrender(): void;
15
+ html(c: string | Reactive): this;
16
+ text(c: string | Reactive): this;
17
+ mount(c: IComponent): this;
18
+ when(condition: Reactive | boolean, then: ContainerVdom | string | boolean | number): this;
19
+ otherwiseWhen(condition: Reactive | boolean, then: ContainerVdom | string | boolean | number, seal?: boolean): this;
20
+ otherwise(then: ContainerVdom | string | boolean | number): this;
21
+ each(collection: ObservableCollection, callback: () => Vdom): this;
22
+ }
23
+ export {};