cx 26.0.14 → 26.1.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 (263) hide show
  1. package/build/ui/VDOM.d.ts +1 -20
  2. package/build/ui/VDOM.js +1 -3
  3. package/build/ui/Widget.d.ts +1 -1
  4. package/build/ui/Widget.js +0 -5
  5. package/build/ui/app/startAppLoop.js +2 -10
  6. package/build/util/Component.js +5 -0
  7. package/build/util/test/createTestRenderer.d.ts +3 -1
  8. package/build/util/test/createTestRenderer.js +8 -2
  9. package/build/widgets/form/Checkbox.d.ts +0 -1
  10. package/build/widgets/form/Checkbox.js +1 -0
  11. package/build/widgets/form/ColorField.d.ts +0 -1
  12. package/build/widgets/form/ColorField.js +2 -2
  13. package/build/widgets/form/DateTimeField.d.ts +0 -2
  14. package/build/widgets/form/DateTimeField.js +1 -0
  15. package/build/widgets/form/DateTimePicker.d.ts +0 -2
  16. package/build/widgets/form/DateTimePicker.js +1 -0
  17. package/build/widgets/form/Radio.d.ts +0 -1
  18. package/build/widgets/form/Slider.js +9 -1
  19. package/build/widgets/form/Switch.d.ts +0 -1
  20. package/build/widgets/form/Switch.js +1 -1
  21. package/build/widgets/form/Wheel.d.ts +0 -1
  22. package/build/widgets/grid/Grid.d.ts +0 -2
  23. package/build/widgets/grid/GridCellEditor.js +3 -1
  24. package/build/widgets/icons/calendar.js +4 -3
  25. package/build/widgets/icons/check.js +2 -2
  26. package/build/widgets/icons/clear.js +2 -2
  27. package/build/widgets/icons/close.js +2 -2
  28. package/build/widgets/icons/cx.js +2 -2
  29. package/build/widgets/icons/drop-down.js +2 -2
  30. package/build/widgets/icons/file.js +2 -2
  31. package/build/widgets/icons/folder-open.js +2 -2
  32. package/build/widgets/icons/folder.js +2 -2
  33. package/build/widgets/icons/forward.js +2 -2
  34. package/build/widgets/icons/loading.js +2 -2
  35. package/build/widgets/icons/menu.js +2 -2
  36. package/build/widgets/icons/pixel-picker.js +2 -2
  37. package/build/widgets/icons/search.js +2 -2
  38. package/build/widgets/icons/sort-asc.js +2 -2
  39. package/build/widgets/icons/square.js +2 -2
  40. package/build/widgets/overlay/Overlay.d.ts +3 -0
  41. package/build/widgets/overlay/Overlay.js +3 -2
  42. package/dist/manifest.js +867 -867
  43. package/dist/ui.js +4 -18
  44. package/dist/util.js +4 -0
  45. package/dist/widgets.js +395 -319
  46. package/package.json +11 -8
  47. package/src/charts/Chart.ts +108 -108
  48. package/src/core.d.ts +182 -182
  49. package/src/data/Expression.spec.ts +229 -229
  50. package/src/data/Expression.ts +233 -233
  51. package/src/data/Grouper.ts +158 -158
  52. package/src/data/Selector.ts +10 -10
  53. package/src/data/StringTemplate.spec.ts +132 -132
  54. package/src/data/StructuredSelector.ts +146 -146
  55. package/src/data/ZoomIntoPropertyView.spec.ts +64 -64
  56. package/src/data/comparer.ts +78 -78
  57. package/src/data/computable.spec.ts +87 -87
  58. package/src/data/createStructuredSelector.ts +62 -62
  59. package/src/data/getAccessor.spec.ts +11 -11
  60. package/src/data/getAccessor.ts +74 -74
  61. package/src/data/getSelector.spec.ts +43 -43
  62. package/src/data/getSelector.ts +66 -66
  63. package/src/data/ops/filter.spec.ts +35 -35
  64. package/src/data/ops/filter.ts +9 -9
  65. package/src/data/ops/merge.ts +13 -13
  66. package/src/data/ops/removeTreeNodes.spec.ts +37 -37
  67. package/src/data/ops/updateArray.spec.ts +69 -69
  68. package/src/data/ops/updateArray.ts +31 -31
  69. package/src/data/test-types.ts +7 -7
  70. package/src/hooks/invokeCallback.spec.tsx +4 -4
  71. package/src/hooks/resolveCallback.spec.tsx +4 -4
  72. package/src/hooks/store.spec.tsx +15 -15
  73. package/src/hooks/useTrigger.spec.tsx +16 -10
  74. package/src/hooks/useTrigger.ts +26 -26
  75. package/src/index.scss +6 -6
  76. package/src/jsx-runtime.ts +79 -79
  77. package/src/svg/BoundedObject.ts +101 -101
  78. package/src/svg/util/Rect.ts +105 -105
  79. package/src/ui/CSS.ts +87 -87
  80. package/src/ui/CSSHelper.ts +17 -17
  81. package/src/ui/ContentResolver.spec.tsx +31 -29
  82. package/src/ui/Controller.spec.tsx +47 -39
  83. package/src/ui/Culture.ts +159 -159
  84. package/src/ui/Cx.spec.tsx +10 -8
  85. package/src/ui/DataProxy.spec.tsx +18 -18
  86. package/src/ui/Instance.ts +866 -866
  87. package/src/ui/IsolatedScope.spec.tsx +16 -9
  88. package/src/ui/Prop.ts +140 -140
  89. package/src/ui/PureContainer.spec.tsx +20 -18
  90. package/src/ui/RenderingContext.ts +99 -99
  91. package/src/ui/Repeater.spec.tsx +8 -6
  92. package/src/ui/Rescope.spec.tsx +13 -13
  93. package/src/ui/Restate.spec.tsx +31 -27
  94. package/src/ui/StructuredInstanceDataAccessor.ts +32 -32
  95. package/src/ui/VDOM.ts +1 -34
  96. package/src/ui/Widget.tsx +0 -7
  97. package/src/ui/adapter/TreeAdapter.spec.ts +76 -76
  98. package/src/ui/adapter/TreeAdapter.ts +185 -185
  99. package/src/ui/app/History.ts +133 -133
  100. package/src/ui/app/Url.spec.ts +50 -50
  101. package/src/ui/app/startAppLoop.tsx +5 -9
  102. package/src/ui/app/startHotAppLoop.ts +41 -41
  103. package/src/ui/createFunctionalComponent.spec.tsx +20 -18
  104. package/src/ui/layout/ContentPlaceholder.spec.tsx +46 -34
  105. package/src/ui/layout/FirstVisibleChildLayout.spec.tsx +31 -19
  106. package/src/ui/layout/FirstVisibleChildLayout.ts +60 -60
  107. package/src/ui/selection/PropertySelection.ts +87 -87
  108. package/src/util/Component.spec.ts +30 -0
  109. package/src/util/Component.ts +301 -296
  110. package/src/util/Console.ts +13 -13
  111. package/src/util/DOM.ts +88 -88
  112. package/src/util/hasKey.ts +18 -18
  113. package/src/util/index.ts +55 -55
  114. package/src/util/isArray.ts +3 -3
  115. package/src/util/isDefined.ts +3 -3
  116. package/src/util/isString.ts +3 -3
  117. package/src/util/test/createTestRenderer.tsx +9 -2
  118. package/src/widgets/AccessorBindings.spec.tsx +4 -4
  119. package/src/widgets/DocumentTitle.ts +95 -95
  120. package/src/widgets/HtmlElement.spec.tsx +6 -6
  121. package/src/widgets/ReactElementWrapper.spec.tsx +37 -37
  122. package/src/widgets/autoFocus.ts +9 -9
  123. package/src/widgets/cx.ts +63 -63
  124. package/src/widgets/form/Checkbox.tsx +0 -1
  125. package/src/widgets/form/ColorField.tsx +15 -12
  126. package/src/widgets/form/DateTimeField.tsx +0 -2
  127. package/src/widgets/form/DateTimePicker.tsx +0 -2
  128. package/src/widgets/form/Radio.tsx +0 -1
  129. package/src/widgets/form/Slider.tsx +12 -4
  130. package/src/widgets/form/Switch.tsx +2 -3
  131. package/src/widgets/form/ValidationGroup.spec.tsx +12 -12
  132. package/src/widgets/form/Wheel.tsx +0 -1
  133. package/src/widgets/grid/Grid.tsx +0 -1
  134. package/src/widgets/grid/GridCellEditor.tsx +7 -1
  135. package/src/widgets/icons/calendar.tsx +20 -15
  136. package/src/widgets/icons/check.tsx +2 -1
  137. package/src/widgets/icons/clear.tsx +2 -1
  138. package/src/widgets/icons/close.tsx +2 -2
  139. package/src/widgets/icons/cx.tsx +2 -1
  140. package/src/widgets/icons/drop-down.tsx +2 -1
  141. package/src/widgets/icons/file.tsx +2 -1
  142. package/src/widgets/icons/folder-open.tsx +2 -1
  143. package/src/widgets/icons/folder.tsx +2 -1
  144. package/src/widgets/icons/forward.tsx +2 -1
  145. package/src/widgets/icons/loading.tsx +2 -1
  146. package/src/widgets/icons/menu.tsx +2 -1
  147. package/src/widgets/icons/pixel-picker.tsx +2 -2
  148. package/src/widgets/icons/search.tsx +2 -1
  149. package/src/widgets/icons/sort-asc.tsx +2 -1
  150. package/src/widgets/icons/square.tsx +2 -1
  151. package/src/widgets/nav/Route.spec.tsx +2 -2
  152. package/src/widgets/overlay/Overlay.tsx +5 -1
  153. package/src/widgets/overlay/captureMouse.ts +195 -195
  154. package/src/widgets/overlay/createHotPromiseWindowFactory.ts +71 -71
  155. package/src/widgets/overlay/index.d.ts +11 -11
  156. package/src/widgets/overlay/tooltip-ops.ts +173 -173
  157. package/build/data/ArrayElementView.spec.d.ts +0 -1
  158. package/build/data/ArrayElementView.spec.js +0 -81
  159. package/build/data/Binding.spec.d.ts +0 -1
  160. package/build/data/Binding.spec.js +0 -61
  161. package/build/data/Expression.spec.d.ts +0 -1
  162. package/build/data/Expression.spec.js +0 -196
  163. package/build/data/Grouper.spec.d.ts +0 -1
  164. package/build/data/Grouper.spec.js +0 -48
  165. package/build/data/Ref.spec.d.ts +0 -1
  166. package/build/data/Ref.spec.js +0 -72
  167. package/build/data/Store.spec.d.ts +0 -1
  168. package/build/data/Store.spec.js +0 -19
  169. package/build/data/StoreRef.spec.d.ts +0 -1
  170. package/build/data/StoreRef.spec.js +0 -22
  171. package/build/data/StringTemplate.spec.d.ts +0 -1
  172. package/build/data/StringTemplate.spec.js +0 -112
  173. package/build/data/StructuredSelector.spec.d.ts +0 -1
  174. package/build/data/StructuredSelector.spec.js +0 -102
  175. package/build/data/View.spec.d.ts +0 -1
  176. package/build/data/View.spec.js +0 -44
  177. package/build/data/ZoomIntoPropertyView.spec.d.ts +0 -1
  178. package/build/data/ZoomIntoPropertyView.spec.js +0 -54
  179. package/build/data/comparer.spec.d.ts +0 -1
  180. package/build/data/comparer.spec.js +0 -50
  181. package/build/data/computable.spec.d.ts +0 -1
  182. package/build/data/computable.spec.js +0 -56
  183. package/build/data/createAccessorModelProxy.spec.d.ts +0 -1
  184. package/build/data/createAccessorModelProxy.spec.js +0 -30
  185. package/build/data/createStructuredSelector.spec.d.ts +0 -1
  186. package/build/data/createStructuredSelector.spec.js +0 -42
  187. package/build/data/diff/diffs.spec.d.ts +0 -1
  188. package/build/data/diff/diffs.spec.js +0 -45
  189. package/build/data/getAccessor.spec.d.ts +0 -1
  190. package/build/data/getAccessor.spec.js +0 -10
  191. package/build/data/getSelector.spec.d.ts +0 -1
  192. package/build/data/getSelector.spec.js +0 -36
  193. package/build/data/ops/append.spec.d.ts +0 -1
  194. package/build/data/ops/append.spec.js +0 -24
  195. package/build/data/ops/filter.spec.d.ts +0 -1
  196. package/build/data/ops/filter.spec.js +0 -25
  197. package/build/data/ops/findTreeNode.spec.d.ts +0 -1
  198. package/build/data/ops/findTreeNode.spec.js +0 -20
  199. package/build/data/ops/merge.spec.d.ts +0 -1
  200. package/build/data/ops/merge.spec.js +0 -23
  201. package/build/data/ops/removeTreeNodes.spec.d.ts +0 -1
  202. package/build/data/ops/removeTreeNodes.spec.js +0 -35
  203. package/build/data/ops/updateArray.spec.d.ts +0 -1
  204. package/build/data/ops/updateArray.spec.js +0 -33
  205. package/build/data/ops/updateTree.spec.d.ts +0 -1
  206. package/build/data/ops/updateTree.spec.js +0 -44
  207. package/build/hooks/invokeCallback.spec.d.ts +0 -1
  208. package/build/hooks/invokeCallback.spec.js +0 -44
  209. package/build/hooks/resolveCallback.spec.d.ts +0 -1
  210. package/build/hooks/resolveCallback.spec.js +0 -35
  211. package/build/hooks/store.spec.d.ts +0 -1
  212. package/build/hooks/store.spec.js +0 -48
  213. package/build/hooks/useTrigger.spec.d.ts +0 -1
  214. package/build/hooks/useTrigger.spec.js +0 -59
  215. package/build/ui/Controller.spec.d.ts +0 -1
  216. package/build/ui/Controller.spec.js +0 -247
  217. package/build/ui/Cx.spec.d.ts +0 -1
  218. package/build/ui/Cx.spec.js +0 -153
  219. package/build/ui/DataProxy.spec.d.ts +0 -1
  220. package/build/ui/DataProxy.spec.js +0 -208
  221. package/build/ui/IsolatedScope.spec.d.ts +0 -1
  222. package/build/ui/IsolatedScope.spec.js +0 -42
  223. package/build/ui/PureContainer.spec.d.ts +0 -1
  224. package/build/ui/PureContainer.spec.js +0 -149
  225. package/build/ui/Repeater.spec.d.ts +0 -1
  226. package/build/ui/Repeater.spec.js +0 -109
  227. package/build/ui/Rescope.spec.d.ts +0 -1
  228. package/build/ui/Rescope.spec.js +0 -134
  229. package/build/ui/Restate.spec.d.ts +0 -1
  230. package/build/ui/Restate.spec.js +0 -257
  231. package/build/ui/adapter/ArrayAdapter.spec.d.ts +0 -1
  232. package/build/ui/adapter/ArrayAdapter.spec.js +0 -44
  233. package/build/ui/adapter/TreeAdapter.spec.d.ts +0 -1
  234. package/build/ui/adapter/TreeAdapter.spec.js +0 -71
  235. package/build/ui/app/Url.spec.d.ts +0 -1
  236. package/build/ui/app/Url.spec.js +0 -43
  237. package/build/ui/createFunctionalComponent.spec.d.ts +0 -1
  238. package/build/ui/createFunctionalComponent.spec.js +0 -272
  239. package/build/ui/layout/ContentPlaceholder.spec.d.ts +0 -1
  240. package/build/ui/layout/ContentPlaceholder.spec.js +0 -333
  241. package/build/ui/layout/FirstVisibleChildLayout.spec.d.ts +0 -1
  242. package/build/ui/layout/FirstVisibleChildLayout.spec.js +0 -101
  243. package/build/util/Format.spec.d.ts +0 -1
  244. package/build/util/Format.spec.js +0 -58
  245. package/build/util/TraversalStack.spec.d.ts +0 -1
  246. package/build/util/TraversalStack.spec.js +0 -43
  247. package/build/util/date/upperBoundCheck.spec.d.ts +0 -1
  248. package/build/util/date/upperBoundCheck.spec.js +0 -22
  249. package/build/util/getSearchQueryPredicate.spec.d.ts +0 -1
  250. package/build/util/getSearchQueryPredicate.spec.js +0 -33
  251. package/build/util/isValidIdentifierName.spec.d.ts +0 -1
  252. package/build/util/isValidIdentifierName.spec.js +0 -28
  253. package/build/util/routeAppend.spec.d.ts +0 -1
  254. package/build/util/routeAppend.spec.js +0 -14
  255. package/build/widgets/AccessorBindings.spec.d.ts +0 -1
  256. package/build/widgets/AccessorBindings.spec.js +0 -40
  257. package/build/widgets/HtmlElement.spec.d.ts +0 -1
  258. package/build/widgets/HtmlElement.spec.js +0 -38
  259. package/build/widgets/form/ValidationGroup.spec.d.ts +0 -1
  260. package/build/widgets/form/ValidationGroup.spec.js +0 -62
  261. package/build/widgets/nav/Route.spec.d.ts +0 -1
  262. package/build/widgets/nav/Route.spec.js +0 -15
  263. package/dist/manifest.d.ts +0 -1443
@@ -1,99 +1,99 @@
1
- import { TraversalStack } from "../util/TraversalStack";
2
- import { reverseSlice } from "../util/reverseSlice";
3
- import { Widget } from "./Widget";
4
-
5
- export type CxChild = Record<string, any> | React.ReactElement | Widget | CxChild[] | null | undefined;
6
-
7
- export class RenderingContext {
8
- options: any;
9
- exploreStack: any;
10
- prepareList: any[];
11
- cleanupList: any[];
12
- stacks: any;
13
- renderList: any;
14
-
15
- [key: string]: any;
16
-
17
- constructor(options?: any) {
18
- this.options = options || {};
19
- this.exploreStack = new TraversalStack();
20
- this.prepareList = [];
21
- this.cleanupList = [];
22
- this.stacks = {};
23
- this.renderList = new LinkedListsNode();
24
- }
25
-
26
- getStack(key: string) {
27
- let stack = this.stacks[key];
28
- if (!stack) stack = this.stacks[key] = [];
29
- return stack;
30
- }
31
-
32
- push(key: string, value: any) {
33
- let stack = this.getStack(key);
34
- stack.push(this[key]);
35
- return (this[key] = value);
36
- }
37
-
38
- pop(key: string) {
39
- let stack = this.getStack(key);
40
- return (this[key] = stack.pop());
41
- }
42
-
43
- pushNamedValue(key: string, name: string, value: any) {
44
- let stack = this.getStack(`${key}:${name}`);
45
- if (!this[key]) this[key] = {};
46
- stack.push(this[key][name]);
47
- return (this[key][name] = value);
48
- }
49
-
50
- popNamedValue(key: string, name: string) {
51
- let stack = this.getStack(`${key}:${name}`);
52
- return (this[key][name] = stack.pop());
53
- }
54
-
55
- get(key: string) {
56
- return this[key];
57
- }
58
-
59
- getRootRenderList() {
60
- let rl = this.renderList;
61
- while (rl.left) rl = rl.left;
62
- return rl;
63
- }
64
- }
65
-
66
- class LinkedListsNode {
67
- left?: LinkedListsNode;
68
- right?: LinkedListsNode;
69
- data: any[];
70
- reverseIndex?: number;
71
-
72
- constructor(left?: LinkedListsNode, right?: LinkedListsNode) {
73
- this.left = left;
74
- this.right = right;
75
- this.data = [];
76
- }
77
-
78
- insertLeft() {
79
- let node = new LinkedListsNode(this.left, this);
80
- if (this.left) this.left.right = node;
81
- this.left = node;
82
- return node;
83
- }
84
-
85
- insertRight() {
86
- let node = new LinkedListsNode(this, this.right);
87
- if (this.right) this.right.left = node;
88
- this.right = node;
89
- return node;
90
- }
91
-
92
- markReverseIndex() {
93
- this.reverseIndex = this.data.length;
94
- }
95
-
96
- reverse() {
97
- reverseSlice(this.data, this.reverseIndex!);
98
- }
99
- }
1
+ import { TraversalStack } from "../util/TraversalStack";
2
+ import { reverseSlice } from "../util/reverseSlice";
3
+ import { Widget } from "./Widget";
4
+
5
+ export type CxChild = Record<string, any> | React.ReactElement | Widget | CxChild[] | null | undefined;
6
+
7
+ export class RenderingContext {
8
+ options: any;
9
+ exploreStack: any;
10
+ prepareList: any[];
11
+ cleanupList: any[];
12
+ stacks: any;
13
+ renderList: any;
14
+
15
+ [key: string]: any;
16
+
17
+ constructor(options?: any) {
18
+ this.options = options || {};
19
+ this.exploreStack = new TraversalStack();
20
+ this.prepareList = [];
21
+ this.cleanupList = [];
22
+ this.stacks = {};
23
+ this.renderList = new LinkedListsNode();
24
+ }
25
+
26
+ getStack(key: string) {
27
+ let stack = this.stacks[key];
28
+ if (!stack) stack = this.stacks[key] = [];
29
+ return stack;
30
+ }
31
+
32
+ push(key: string, value: any) {
33
+ let stack = this.getStack(key);
34
+ stack.push(this[key]);
35
+ return (this[key] = value);
36
+ }
37
+
38
+ pop(key: string) {
39
+ let stack = this.getStack(key);
40
+ return (this[key] = stack.pop());
41
+ }
42
+
43
+ pushNamedValue(key: string, name: string, value: any) {
44
+ let stack = this.getStack(`${key}:${name}`);
45
+ if (!this[key]) this[key] = {};
46
+ stack.push(this[key][name]);
47
+ return (this[key][name] = value);
48
+ }
49
+
50
+ popNamedValue(key: string, name: string) {
51
+ let stack = this.getStack(`${key}:${name}`);
52
+ return (this[key][name] = stack.pop());
53
+ }
54
+
55
+ get(key: string) {
56
+ return this[key];
57
+ }
58
+
59
+ getRootRenderList() {
60
+ let rl = this.renderList;
61
+ while (rl.left) rl = rl.left;
62
+ return rl;
63
+ }
64
+ }
65
+
66
+ class LinkedListsNode {
67
+ left?: LinkedListsNode;
68
+ right?: LinkedListsNode;
69
+ data: any[];
70
+ reverseIndex?: number;
71
+
72
+ constructor(left?: LinkedListsNode, right?: LinkedListsNode) {
73
+ this.left = left;
74
+ this.right = right;
75
+ this.data = [];
76
+ }
77
+
78
+ insertLeft() {
79
+ let node = new LinkedListsNode(this.left, this);
80
+ if (this.left) this.left.right = node;
81
+ this.left = node;
82
+ return node;
83
+ }
84
+
85
+ insertRight() {
86
+ let node = new LinkedListsNode(this, this.right);
87
+ if (this.right) this.right.left = node;
88
+ this.right = node;
89
+ return node;
90
+ }
91
+
92
+ markReverseIndex() {
93
+ this.reverseIndex = this.data.length;
94
+ }
95
+
96
+ reverse() {
97
+ reverseSlice(this.data, this.reverseIndex!);
98
+ }
99
+ }
@@ -1,12 +1,12 @@
1
1
  import { Store } from "../data/Store";
2
2
  import { Repeater } from "./Repeater";
3
3
  import { bind } from "./bind";
4
- import { createTestRenderer } from "../util/test/createTestRenderer";
4
+ import { createTestRenderer, act } from "../util/test/createTestRenderer";
5
5
 
6
6
  import assert from "assert";
7
7
 
8
8
  describe("Repeater", () => {
9
- it("allows sorting", () => {
9
+ it("allows sorting", async () => {
10
10
  let data = [
11
11
  {
12
12
  value: "C",
@@ -31,7 +31,7 @@ describe("Repeater", () => {
31
31
 
32
32
  let store = new Store();
33
33
 
34
- const component = createTestRenderer(store, widget);
34
+ const component = await createTestRenderer(store, widget);
35
35
 
36
36
  let tree = component.toJSON();
37
37
  assert.deepEqual(tree, {
@@ -57,7 +57,7 @@ describe("Repeater", () => {
57
57
  });
58
58
  });
59
59
 
60
- it("changes are properly updated", () => {
60
+ it("changes are properly updated", async () => {
61
61
  let divInstances: any[] = [];
62
62
  let widget = (
63
63
  <cx>
@@ -87,7 +87,7 @@ describe("Repeater", () => {
87
87
  },
88
88
  });
89
89
 
90
- const component = createTestRenderer(store, widget);
90
+ const component = await createTestRenderer(store, widget);
91
91
 
92
92
  let tree = component.toJSON();
93
93
  assert.deepEqual(tree, {
@@ -109,7 +109,9 @@ describe("Repeater", () => {
109
109
 
110
110
  divInstances = [];
111
111
 
112
- store.update("data", (data) => [{ value: "A" }, ...data]);
112
+ await act(async () => {
113
+ store.update("data", (data) => [{ value: "A" }, ...data]);
114
+ });
113
115
 
114
116
  assert.deepEqual(component.toJSON(), {
115
117
  type: "div",
@@ -8,7 +8,7 @@ import assert from "assert";
8
8
  import { PureContainer } from "./PureContainer";
9
9
 
10
10
  describe("Rescope", () => {
11
- it("allows simple access to nested data", () => {
11
+ it("allows simple access to nested data", async () => {
12
12
  let store = new Store({
13
13
  data: {
14
14
  $page: {
@@ -27,7 +27,7 @@ describe("Rescope", () => {
27
27
  </cx>
28
28
  );
29
29
 
30
- const component = createTestRenderer(store, widget);
30
+ const component = await createTestRenderer(store, widget);
31
31
 
32
32
  let tree = component.toJSON();
33
33
  assert.deepEqual(tree, {
@@ -37,7 +37,7 @@ describe("Rescope", () => {
37
37
  });
38
38
  });
39
39
 
40
- it("allows parent access through $root", () => {
40
+ it("allows parent access through $root", async () => {
41
41
  let store = new Store({
42
42
  data: {
43
43
  layout: {
@@ -59,7 +59,7 @@ describe("Rescope", () => {
59
59
  </cx>
60
60
  );
61
61
 
62
- const component = createTestRenderer(store, widget);
62
+ const component = await createTestRenderer(store, widget);
63
63
 
64
64
  let tree = component.toJSON();
65
65
  assert.deepEqual(tree, {
@@ -69,7 +69,7 @@ describe("Rescope", () => {
69
69
  });
70
70
  });
71
71
 
72
- it("allows nested data access through data", () => {
72
+ it("allows nested data access through data", async () => {
73
73
  let store = new Store({
74
74
  data: {
75
75
  layout: {
@@ -86,7 +86,7 @@ describe("Rescope", () => {
86
86
  </cx>
87
87
  );
88
88
 
89
- const component = createTestRenderer(store, widget);
89
+ const component = await createTestRenderer(store, widget);
90
90
 
91
91
  let tree = component.toJSON();
92
92
  assert.deepEqual(tree, {
@@ -96,7 +96,7 @@ describe("Rescope", () => {
96
96
  });
97
97
  });
98
98
 
99
- it("nested data mutations are correctly propagated to the parent store", () => {
99
+ it("nested data mutations are correctly propagated to the parent store", async () => {
100
100
  let store = new Store({
101
101
  data: {
102
102
  item: {
@@ -108,7 +108,7 @@ describe("Rescope", () => {
108
108
  let widget = (
109
109
  <cx>
110
110
  <Rescope bind="$page" data={{ $value: { bind: "item.value" } }}>
111
- <PureContainer
111
+ <PureContainer
112
112
  controller={{
113
113
  onInit() {
114
114
  this.store.set("$value", 2);
@@ -120,7 +120,7 @@ describe("Rescope", () => {
120
120
  </cx>
121
121
  );
122
122
 
123
- const component = createTestRenderer(store, widget);
123
+ const component = await createTestRenderer(store, widget);
124
124
 
125
125
  let tree = component.toJSON();
126
126
  assert.deepEqual(tree, {
@@ -130,7 +130,7 @@ describe("Rescope", () => {
130
130
  });
131
131
  });
132
132
 
133
- it("visible is calculated based on the inner scope", () => {
133
+ it("visible is calculated based on the inner scope", async () => {
134
134
  let store = new Store({
135
135
  data: {
136
136
  layout: {
@@ -153,7 +153,7 @@ describe("Rescope", () => {
153
153
  </cx>
154
154
  );
155
155
 
156
- const component = createTestRenderer(store, widget);
156
+ const component = await createTestRenderer(store, widget);
157
157
 
158
158
  let tree = component.toJSON();
159
159
  assert.deepEqual(tree, {
@@ -163,7 +163,7 @@ describe("Rescope", () => {
163
163
  });
164
164
  });
165
165
 
166
- it("controllers see inner scope", () => {
166
+ it("controllers see inner scope", async () => {
167
167
  let store = new Store({
168
168
  data: {
169
169
  $page: {
@@ -191,7 +191,7 @@ describe("Rescope", () => {
191
191
  </cx>
192
192
  );
193
193
 
194
- const component = createTestRenderer(store, widget);
194
+ const component = await createTestRenderer(store, widget);
195
195
 
196
196
  component.toJSON();
197
197
  assert.equal(testName, "John");
@@ -1,13 +1,13 @@
1
1
  import { Restate } from "./Restate";
2
2
  import { Store } from "../data/Store";
3
- import { createTestRenderer } from "../util/test/createTestRenderer";
3
+ import { createTestRenderer, act } from "../util/test/createTestRenderer";
4
4
  import assert from "assert";
5
5
  import { Controller } from "./Controller";
6
6
  import { bind } from "./bind";
7
7
  import { FirstVisibleChildLayout } from "./layout/FirstVisibleChildLayout";
8
8
 
9
9
  describe("Restate", () => {
10
- it("provides a blank slate", () => {
10
+ it("provides a blank slate", async () => {
11
11
  let widget = (
12
12
  <cx>
13
13
  <div>
@@ -30,7 +30,7 @@ describe("Restate", () => {
30
30
  },
31
31
  });
32
32
 
33
- const component = createTestRenderer(store, widget);
33
+ const component = await createTestRenderer(store, widget);
34
34
 
35
35
  let tree = component.toJSON();
36
36
  assert.deepEqual(tree, {
@@ -51,7 +51,7 @@ describe("Restate", () => {
51
51
  });
52
52
  });
53
53
 
54
- it("wires declared data", () => {
54
+ it("wires declared data", async () => {
55
55
  let widget = (
56
56
  <cx>
57
57
  <div>
@@ -80,7 +80,7 @@ describe("Restate", () => {
80
80
  changed = true;
81
81
  });
82
82
 
83
- const component = createTestRenderer(store, widget);
83
+ const component = await createTestRenderer(store, widget);
84
84
 
85
85
  let tree = component.toJSON();
86
86
 
@@ -89,7 +89,7 @@ describe("Restate", () => {
89
89
  assert(changed);
90
90
  });
91
91
 
92
- it("causes a global update if internal data changes", () => {
92
+ it("causes a global update if internal data changes", async () => {
93
93
  let controller: TestController | undefined;
94
94
 
95
95
  class TestController extends Controller {
@@ -122,7 +122,7 @@ describe("Restate", () => {
122
122
  changed = true;
123
123
  });
124
124
 
125
- const component = createTestRenderer(store, widget);
125
+ const component = await createTestRenderer(store, widget);
126
126
 
127
127
  let tree = component.toJSON();
128
128
  assert.deepEqual(tree, {
@@ -137,7 +137,9 @@ describe("Restate", () => {
137
137
  ],
138
138
  });
139
139
 
140
- controller!.setNickname("Sale");
140
+ await act(async () => {
141
+ controller!.setNickname("Sale");
142
+ });
141
143
 
142
144
  let tree2 = component.toJSON();
143
145
  assert.deepEqual(tree2, {
@@ -153,7 +155,7 @@ describe("Restate", () => {
153
155
  });
154
156
  });
155
157
 
156
- it("doesn't notify parent if not necessary in detached mode", () => {
158
+ it("doesn't notify parent if not necessary in detached mode", async () => {
157
159
  class TestController extends Controller {
158
160
  onInit() {
159
161
  this.store.init("nickname", "Sale");
@@ -181,13 +183,13 @@ describe("Restate", () => {
181
183
  changed = true;
182
184
  });
183
185
 
184
- const component = createTestRenderer(store, widget);
186
+ const component = await createTestRenderer(store, widget);
185
187
 
186
188
  let tree = component.toJSON();
187
189
  assert(!changed);
188
190
  });
189
191
 
190
- it("shared state can be used across components inside and outside Restate", () => {
192
+ it("shared state can be used across components inside and outside Restate", async () => {
191
193
  let widget = (
192
194
  <cx>
193
195
  <div>
@@ -213,7 +215,7 @@ describe("Restate", () => {
213
215
  //console.log(store.getData());
214
216
  });
215
217
 
216
- const component = createTestRenderer(store, widget);
218
+ const component = await createTestRenderer(store, widget);
217
219
 
218
220
  let tree = component.toJSON();
219
221
  assert.deepEqual(store.getData(), {
@@ -226,8 +228,8 @@ describe("Restate", () => {
226
228
  });
227
229
  });
228
230
 
229
- it("updates if shared state is changed from outside", () => {
230
- [true, false].forEach((detached) => {
231
+ it("updates if shared state is changed from outside", async () => {
232
+ for (const detached of [true, false]) {
231
233
  let widget = (
232
234
  <cx>
233
235
  <div>
@@ -246,7 +248,7 @@ describe("Restate", () => {
246
248
 
247
249
  let store = new Store();
248
250
 
249
- const component = createTestRenderer(store, widget);
251
+ const component = await createTestRenderer(store, widget);
250
252
 
251
253
  let tree = component.toJSON();
252
254
  assert.deepEqual(tree, {
@@ -265,7 +267,9 @@ describe("Restate", () => {
265
267
  },
266
268
  ],
267
269
  });
268
- store.set("person.firstName", "Jack");
270
+ await act(async () => {
271
+ store.set("person.firstName", "Jack");
272
+ });
269
273
 
270
274
  tree = component.toJSON();
271
275
  assert.deepEqual(tree, {
@@ -284,11 +288,11 @@ describe("Restate", () => {
284
288
  },
285
289
  ],
286
290
  });
287
- });
291
+ }
288
292
  });
289
293
 
290
- it("allows field initialization in data declaration", () => {
291
- [true, false].forEach((detached) => {
294
+ it("allows field initialization in data declaration", async () => {
295
+ for (const detached of [true, false]) {
292
296
  let widget = (
293
297
  <cx>
294
298
  <div>
@@ -306,7 +310,7 @@ describe("Restate", () => {
306
310
 
307
311
  let store = new Store();
308
312
 
309
- const component = createTestRenderer(store, widget);
313
+ const component = await createTestRenderer(store, widget);
310
314
 
311
315
  let tree = component.toJSON();
312
316
  assert.deepEqual(tree, {
@@ -320,10 +324,10 @@ describe("Restate", () => {
320
324
  },
321
325
  ],
322
326
  });
323
- });
327
+ }
324
328
  });
325
329
 
326
- it("updates if internal data changes", () => {
330
+ it("updates if internal data changes", async () => {
327
331
  class TestController extends Controller {
328
332
  onInit() {
329
333
  this.store.init("nickname", "Sale");
@@ -348,7 +352,7 @@ describe("Restate", () => {
348
352
  changed = true;
349
353
  });
350
354
 
351
- const component = createTestRenderer(store, widget);
355
+ const component = await createTestRenderer(store, widget);
352
356
 
353
357
  let tree = component.toJSON();
354
358
  assert.deepEqual(tree, {
@@ -364,7 +368,7 @@ describe("Restate", () => {
364
368
  });
365
369
  });
366
370
 
367
- it("works with FirstVisibleChildLayout", () => {
371
+ it("works with FirstVisibleChildLayout", async () => {
368
372
  let widget = (
369
373
  <cx>
370
374
  <div>
@@ -380,7 +384,7 @@ describe("Restate", () => {
380
384
 
381
385
  let store = new Store();
382
386
 
383
- const component = createTestRenderer(store, widget);
387
+ const component = await createTestRenderer(store, widget);
384
388
 
385
389
  let tree = component.toJSON();
386
390
  assert.deepEqual(tree, {
@@ -390,7 +394,7 @@ describe("Restate", () => {
390
394
  });
391
395
  });
392
396
 
393
- it("is transparent to FirstVisibleChildLayout", () => {
397
+ it("is transparent to FirstVisibleChildLayout", async () => {
394
398
  let widget = (
395
399
  <cx>
396
400
  <div>
@@ -406,7 +410,7 @@ describe("Restate", () => {
406
410
 
407
411
  let store = new Store();
408
412
 
409
- const component = createTestRenderer(store, widget);
413
+ const component = await createTestRenderer(store, widget);
410
414
 
411
415
  let tree = component.toJSON();
412
416
  assert.deepEqual(tree, {
@@ -1,32 +1,32 @@
1
- import { getSelector } from "../data/getSelector";
2
- import { StructuredDataAccessor } from "../data/NestedDataView";
3
-
4
- export class StructuredInstanceDataAccessor implements StructuredDataAccessor {
5
- instance: any;
6
- dataConfig: any;
7
- useParentStore: any;
8
- dataSelector: any;
9
-
10
- constructor(config: any) {
11
- this.instance = config.instance;
12
- this.dataConfig = config.data;
13
- this.useParentStore = config.useParentStore;
14
- this.dataSelector = getSelector(config.data);
15
- if (this.dataSelector.memoize) this.dataSelector = this.dataSelector.memoize();
16
- }
17
- getSelector() {
18
- return this.dataSelector;
19
- }
20
- get() {
21
- return this.dataSelector.get(this.instance.store.getData());
22
- }
23
- setItem(key: string, value: any): boolean {
24
- return this.instance.nestedDataSet(key, value, this.dataConfig, this.useParentStore);
25
- }
26
- containsKey(key: string) {
27
- return this.dataConfig.hasOwnProperty(key);
28
- }
29
- getKeys() {
30
- return Object.keys(this.dataConfig);
31
- }
32
- }
1
+ import { getSelector } from "../data/getSelector";
2
+ import { StructuredDataAccessor } from "../data/NestedDataView";
3
+
4
+ export class StructuredInstanceDataAccessor implements StructuredDataAccessor {
5
+ instance: any;
6
+ dataConfig: any;
7
+ useParentStore: any;
8
+ dataSelector: any;
9
+
10
+ constructor(config: any) {
11
+ this.instance = config.instance;
12
+ this.dataConfig = config.data;
13
+ this.useParentStore = config.useParentStore;
14
+ this.dataSelector = getSelector(config.data);
15
+ if (this.dataSelector.memoize) this.dataSelector = this.dataSelector.memoize();
16
+ }
17
+ getSelector() {
18
+ return this.dataSelector;
19
+ }
20
+ get() {
21
+ return this.dataSelector.get(this.instance.store.getData());
22
+ }
23
+ setItem(key: string, value: any): boolean {
24
+ return this.instance.nestedDataSet(key, value, this.dataConfig, this.useParentStore);
25
+ }
26
+ containsKey(key: string) {
27
+ return this.dataConfig.hasOwnProperty(key);
28
+ }
29
+ getKeys() {
30
+ return Object.keys(this.dataConfig);
31
+ }
32
+ }
package/src/ui/VDOM.ts CHANGED
@@ -1,34 +1 @@
1
- // @ts-expect-error
2
- import { VDOM as vdom } from "cx-react";
3
-
4
- import type * as React from "react";
5
- import type { Component } from "react";
6
- import type {
7
- unstable_batchedUpdates,
8
- render,
9
- findDOMNode,
10
- createPortal,
11
- unstable_renderSubtreeIntoContainer,
12
- hydrate,
13
- unmountComponentAtNode,
14
- } from "react-dom";
15
- import type { createRoot, hydrateRoot, Root } from "react-dom/client";
16
-
17
- export interface VDOMType extends Omit<typeof React, "default"> {
18
- allowRenderOutputCaching?: boolean;
19
- Component: typeof Component;
20
-
21
- DOM: {
22
- unstable_batchedUpdates: typeof unstable_batchedUpdates;
23
- render: typeof render;
24
- findDOMNode: typeof findDOMNode;
25
- createPortal: typeof createPortal;
26
- createRoot: typeof createRoot;
27
- hydrateRoot: typeof hydrateRoot;
28
- hydrate: typeof hydrate;
29
- unmountComponentAtNode: typeof unmountComponentAtNode;
30
- unstable_renderSubtreeIntoContainer: typeof unstable_renderSubtreeIntoContainer;
31
- };
32
- }
33
-
34
- export const VDOM = vdom as VDOMType;
1
+ export { VDOM } from "cx-react";
package/src/ui/Widget.tsx CHANGED
@@ -152,13 +152,6 @@ export abstract class Widget<
152
152
  if (this.styles) this.style = this.styles;
153
153
 
154
154
  if (this.styled) this.style = parseStyle(this.style);
155
- else if (this.style) {
156
- Console.warn(
157
- "Components that allow use of the style attribute should set styled = true on their prototype. This will be an error in future versions.",
158
- );
159
- this.style = parseStyle(this.style);
160
- this.styled = true;
161
- }
162
155
 
163
156
  if (typeof this.if !== "undefined") this.visible = this.if;
164
157