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,105 +1,105 @@
1
- import { isNumber } from "../../util/isNumber";
2
- import { isArray } from "../../util/isArray";
3
-
4
- type RectMargin = string | Rect | Array<string | number>;
5
-
6
- export interface IRect {
7
- l: number;
8
- r: number;
9
- t: number;
10
- b: number;
11
- }
12
-
13
- export class Rect implements IRect {
14
- isRect: boolean = true;
15
- l: number = 0; //left;
16
- r: number = 0; //right
17
- t: number = 0; //top
18
- b: number = 0; //bottom
19
-
20
- constructor(config?: { t?: number; r?: number; b?: number; l?: number }) {
21
- Object.assign(this, config);
22
- }
23
-
24
- width(): number {
25
- return this.r - this.l;
26
- }
27
-
28
- height(): number {
29
- return this.b - this.t;
30
- }
31
-
32
- valid(): boolean {
33
- return this.r > this.l && this.b > this.t;
34
- }
35
-
36
- makeValid(): Rect {
37
- return new Rect({
38
- l: Math.min(this.l, this.r),
39
- r: Math.max(this.l, this.r),
40
- t: Math.min(this.t, this.b),
41
- b: Math.max(this.t, this.b),
42
- });
43
- }
44
-
45
- isEqual(r?: Rect): boolean {
46
- if (!r || !r.isRect) return false;
47
-
48
- return r.l == this.l && r.r == this.r && r.t == this.t && r.b == this.b;
49
- }
50
-
51
- static add(a: Rect, b: Rect): Rect {
52
- return new Rect({
53
- l: a.l + b.l,
54
- t: a.t + b.t,
55
- r: a.r + b.r,
56
- b: a.b + b.b,
57
- });
58
- }
59
-
60
- static multiply(a: Rect, b: Rect): Rect {
61
- return new Rect({
62
- l: a.l + (a.r - a.l) * b.l,
63
- r: a.l + (a.r - a.l) * b.r,
64
- t: a.t + (a.b - a.t) * b.t,
65
- b: a.t + (a.b - a.t) * b.b,
66
- });
67
- }
68
-
69
- static margin(r: Rect, m?: RectMargin): Rect {
70
- var mr = Rect.convertMargin(m);
71
- return Rect.add(r, mr);
72
- }
73
-
74
- static convertMargin(m?: RectMargin): Rect {
75
- if (!m) return new Rect();
76
-
77
- if ((m as any).isRect) return m as Rect;
78
-
79
- if (isNumber(m)) return new Rect({ l: m as number, t: m as number, r: -(m as number), b: -(m as number) });
80
-
81
- var mr = Rect.convert(m);
82
- mr.b = -mr.b;
83
- mr.r = -mr.r;
84
- return mr;
85
- }
86
-
87
- static convert(r?: RectMargin | number): Rect {
88
- if (!r) return new Rect({ l: 0, r: 0, t: 0, b: 0 });
89
-
90
- if ((r as any).isRect) return r as Rect;
91
-
92
- if (typeof r === "string") r = r.split(" ");
93
-
94
- if (isArray(r)) {
95
- return new Rect({
96
- t: parseFloat(r[0] as any),
97
- r: parseFloat(r[1] as any),
98
- b: parseFloat(r[2] as any),
99
- l: parseFloat(r[3] as any),
100
- });
101
- }
102
-
103
- return new Rect(r as any);
104
- }
105
- }
1
+ import { isNumber } from "../../util/isNumber";
2
+ import { isArray } from "../../util/isArray";
3
+
4
+ type RectMargin = string | Rect | Array<string | number>;
5
+
6
+ export interface IRect {
7
+ l: number;
8
+ r: number;
9
+ t: number;
10
+ b: number;
11
+ }
12
+
13
+ export class Rect implements IRect {
14
+ isRect: boolean = true;
15
+ l: number = 0; //left;
16
+ r: number = 0; //right
17
+ t: number = 0; //top
18
+ b: number = 0; //bottom
19
+
20
+ constructor(config?: { t?: number; r?: number; b?: number; l?: number }) {
21
+ Object.assign(this, config);
22
+ }
23
+
24
+ width(): number {
25
+ return this.r - this.l;
26
+ }
27
+
28
+ height(): number {
29
+ return this.b - this.t;
30
+ }
31
+
32
+ valid(): boolean {
33
+ return this.r > this.l && this.b > this.t;
34
+ }
35
+
36
+ makeValid(): Rect {
37
+ return new Rect({
38
+ l: Math.min(this.l, this.r),
39
+ r: Math.max(this.l, this.r),
40
+ t: Math.min(this.t, this.b),
41
+ b: Math.max(this.t, this.b),
42
+ });
43
+ }
44
+
45
+ isEqual(r?: Rect): boolean {
46
+ if (!r || !r.isRect) return false;
47
+
48
+ return r.l == this.l && r.r == this.r && r.t == this.t && r.b == this.b;
49
+ }
50
+
51
+ static add(a: Rect, b: Rect): Rect {
52
+ return new Rect({
53
+ l: a.l + b.l,
54
+ t: a.t + b.t,
55
+ r: a.r + b.r,
56
+ b: a.b + b.b,
57
+ });
58
+ }
59
+
60
+ static multiply(a: Rect, b: Rect): Rect {
61
+ return new Rect({
62
+ l: a.l + (a.r - a.l) * b.l,
63
+ r: a.l + (a.r - a.l) * b.r,
64
+ t: a.t + (a.b - a.t) * b.t,
65
+ b: a.t + (a.b - a.t) * b.b,
66
+ });
67
+ }
68
+
69
+ static margin(r: Rect, m?: RectMargin): Rect {
70
+ var mr = Rect.convertMargin(m);
71
+ return Rect.add(r, mr);
72
+ }
73
+
74
+ static convertMargin(m?: RectMargin): Rect {
75
+ if (!m) return new Rect();
76
+
77
+ if ((m as any).isRect) return m as Rect;
78
+
79
+ if (isNumber(m)) return new Rect({ l: m as number, t: m as number, r: -(m as number), b: -(m as number) });
80
+
81
+ var mr = Rect.convert(m);
82
+ mr.b = -mr.b;
83
+ mr.r = -mr.r;
84
+ return mr;
85
+ }
86
+
87
+ static convert(r?: RectMargin | number): Rect {
88
+ if (!r) return new Rect({ l: 0, r: 0, t: 0, b: 0 });
89
+
90
+ if ((r as any).isRect) return r as Rect;
91
+
92
+ if (typeof r === "string") r = r.split(" ");
93
+
94
+ if (isArray(r)) {
95
+ return new Rect({
96
+ t: parseFloat(r[0] as any),
97
+ r: parseFloat(r[1] as any),
98
+ b: parseFloat(r[2] as any),
99
+ l: parseFloat(r[3] as any),
100
+ });
101
+ }
102
+
103
+ return new Rect(r as any);
104
+ }
105
+ }
package/src/ui/CSS.ts CHANGED
@@ -1,87 +1,87 @@
1
- import { CSSHelper } from "./CSSHelper";
2
- import { parseStyle } from "../util/parseStyle";
3
- import { isArray } from "../util/isArray";
4
-
5
- function push(list: any[] | undefined, item: any): any[] {
6
- if (!item) return list || [];
7
- if (!list) list = [];
8
- list.push(item);
9
- return list;
10
- }
11
-
12
- function pushMore(list: any[] | undefined, itemArray: any[]): any[] {
13
- if (!itemArray || itemArray.length == 0) return list || [];
14
- if (!list) list = [];
15
- list.push.apply(list, itemArray);
16
- return list;
17
- }
18
-
19
- function pushMap(list: any[] | undefined, itemArray: any[] | undefined, mapF: (item: any) => any): any[] | undefined {
20
- return itemArray ? pushMore(list, itemArray.map(mapF)) : list;
21
- }
22
-
23
- function join(list: any[] | undefined): string | undefined {
24
- return list ? list.join(" ") : undefined;
25
- }
26
-
27
- export class CSS {
28
- public static classPrefix: string;
29
-
30
- static resolve(...args: any[]): any[] {
31
- let list: any[] | undefined = undefined,
32
- type: string,
33
- arg: any,
34
- i: number,
35
- key: string;
36
-
37
- for (i = 0; i < args.length; i++) {
38
- arg = args[i];
39
- if (arg) {
40
- type = typeof arg;
41
- if (type == "string") list = push(list, arg);
42
- else if (type == "object") {
43
- if (isArray(arg)) list = pushMore(list, this.resolve(...arg));
44
- else for (key in arg) if (arg[key]) list = push(list, key);
45
- }
46
- }
47
- }
48
- return list || [];
49
- }
50
-
51
- static block(baseClass: string, styleModifiers?: any, stateModifiers?: any): string;
52
- static block(baseClass?: string, styleModifiers?: any, stateModifiers?: any): string | undefined {
53
- let list: any[] | undefined;
54
- if (baseClass) list = push(list, this.classPrefix + "b-" + baseClass);
55
- list = pushMap(list, this.resolve(styleModifiers), (m) => this.classPrefix + "m-" + m);
56
- list = pushMap(list, this.resolve(stateModifiers), (m) => this.classPrefix + "s-" + m);
57
- return join(list);
58
- }
59
-
60
- static element(baseClass: string, elementClass: string, stateModifiers?: any): string;
61
- static element(baseClass?: string, elementClass?: string, stateModifiers?: any): string | undefined {
62
- let list: any[] | undefined;
63
- if (baseClass && elementClass) list = push(list, this.classPrefix + "e-" + baseClass + "-" + elementClass);
64
- list = pushMap(list, this.resolve(stateModifiers), (m) => this.classPrefix + "s-" + m);
65
- return join(list);
66
- }
67
-
68
- static state(stateModifiers: any): string | undefined {
69
- return join(pushMap(undefined, this.resolve(stateModifiers), (m) => this.classPrefix + "s-" + m));
70
- }
71
-
72
- static mod(mods: any): string | undefined {
73
- return join(pushMap(undefined, this.resolve(mods), (m) => this.classPrefix + "m-" + m));
74
- }
75
-
76
- static expand(...args: any[]): string | undefined {
77
- return join(this.resolve(...args));
78
- }
79
-
80
- static parseStyle(str: any): any {
81
- return parseStyle(str);
82
- }
83
- }
84
-
85
- CSS.classPrefix = "cx";
86
-
87
- CSSHelper.alias("cx", CSS);
1
+ import { CSSHelper } from "./CSSHelper";
2
+ import { parseStyle } from "../util/parseStyle";
3
+ import { isArray } from "../util/isArray";
4
+
5
+ function push(list: any[] | undefined, item: any): any[] {
6
+ if (!item) return list || [];
7
+ if (!list) list = [];
8
+ list.push(item);
9
+ return list;
10
+ }
11
+
12
+ function pushMore(list: any[] | undefined, itemArray: any[]): any[] {
13
+ if (!itemArray || itemArray.length == 0) return list || [];
14
+ if (!list) list = [];
15
+ list.push.apply(list, itemArray);
16
+ return list;
17
+ }
18
+
19
+ function pushMap(list: any[] | undefined, itemArray: any[] | undefined, mapF: (item: any) => any): any[] | undefined {
20
+ return itemArray ? pushMore(list, itemArray.map(mapF)) : list;
21
+ }
22
+
23
+ function join(list: any[] | undefined): string | undefined {
24
+ return list ? list.join(" ") : undefined;
25
+ }
26
+
27
+ export class CSS {
28
+ public static classPrefix: string;
29
+
30
+ static resolve(...args: any[]): any[] {
31
+ let list: any[] | undefined = undefined,
32
+ type: string,
33
+ arg: any,
34
+ i: number,
35
+ key: string;
36
+
37
+ for (i = 0; i < args.length; i++) {
38
+ arg = args[i];
39
+ if (arg) {
40
+ type = typeof arg;
41
+ if (type == "string") list = push(list, arg);
42
+ else if (type == "object") {
43
+ if (isArray(arg)) list = pushMore(list, this.resolve(...arg));
44
+ else for (key in arg) if (arg[key]) list = push(list, key);
45
+ }
46
+ }
47
+ }
48
+ return list || [];
49
+ }
50
+
51
+ static block(baseClass: string, styleModifiers?: any, stateModifiers?: any): string;
52
+ static block(baseClass?: string, styleModifiers?: any, stateModifiers?: any): string | undefined {
53
+ let list: any[] | undefined;
54
+ if (baseClass) list = push(list, this.classPrefix + "b-" + baseClass);
55
+ list = pushMap(list, this.resolve(styleModifiers), (m) => this.classPrefix + "m-" + m);
56
+ list = pushMap(list, this.resolve(stateModifiers), (m) => this.classPrefix + "s-" + m);
57
+ return join(list);
58
+ }
59
+
60
+ static element(baseClass: string, elementClass: string, stateModifiers?: any): string;
61
+ static element(baseClass?: string, elementClass?: string, stateModifiers?: any): string | undefined {
62
+ let list: any[] | undefined;
63
+ if (baseClass && elementClass) list = push(list, this.classPrefix + "e-" + baseClass + "-" + elementClass);
64
+ list = pushMap(list, this.resolve(stateModifiers), (m) => this.classPrefix + "s-" + m);
65
+ return join(list);
66
+ }
67
+
68
+ static state(stateModifiers: any): string | undefined {
69
+ return join(pushMap(undefined, this.resolve(stateModifiers), (m) => this.classPrefix + "s-" + m));
70
+ }
71
+
72
+ static mod(mods: any): string | undefined {
73
+ return join(pushMap(undefined, this.resolve(mods), (m) => this.classPrefix + "m-" + m));
74
+ }
75
+
76
+ static expand(...args: any[]): string | undefined {
77
+ return join(this.resolve(...args));
78
+ }
79
+
80
+ static parseStyle(str: any): any {
81
+ return parseStyle(str);
82
+ }
83
+ }
84
+
85
+ CSS.classPrefix = "cx";
86
+
87
+ CSSHelper.alias("cx", CSS);
@@ -1,17 +1,17 @@
1
- var cssHelperCache: { [key: string]: any } = {};
2
-
3
- export class CSSHelper {
4
- static get(code: string): any {
5
- var helper = cssHelperCache[code];
6
- if (!helper) throw new Error(`Unknown CSS helper '${code}'.`);
7
- return helper;
8
- }
9
-
10
- static register(code: string, helper: any): void {
11
- cssHelperCache[code] = helper;
12
- }
13
-
14
- static alias(code: string, helper: any): void {
15
- cssHelperCache[code] = helper;
16
- }
17
- }
1
+ var cssHelperCache: { [key: string]: any } = {};
2
+
3
+ export class CSSHelper {
4
+ static get(code: string): any {
5
+ var helper = cssHelperCache[code];
6
+ if (!helper) throw new Error(`Unknown CSS helper '${code}'.`);
7
+ return helper;
8
+ }
9
+
10
+ static register(code: string, helper: any): void {
11
+ cssHelperCache[code] = helper;
12
+ }
13
+
14
+ static alias(code: string, helper: any): void {
15
+ cssHelperCache[code] = helper;
16
+ }
17
+ }
@@ -1,6 +1,6 @@
1
1
  import { ContentResolver } from "./ContentResolver";
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 { bind } from "./bind";
6
6
  import { createAccessorModelProxy } from "../data/createAccessorModelProxy";
@@ -16,7 +16,7 @@ interface TestModel {
16
16
  }
17
17
 
18
18
  describe("ContentResolver", () => {
19
- it("resolves content based on params", () => {
19
+ it("resolves content based on params", async () => {
20
20
  let widget = (
21
21
  <cx>
22
22
  <div>
@@ -31,7 +31,7 @@ describe("ContentResolver", () => {
31
31
  },
32
32
  });
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, {
@@ -47,7 +47,7 @@ describe("ContentResolver", () => {
47
47
  });
48
48
  });
49
49
 
50
- it("re-resolves when params change", () => {
50
+ it("re-resolves when params change", async () => {
51
51
  let resolveCount = 0;
52
52
 
53
53
  let widget = (
@@ -70,7 +70,7 @@ describe("ContentResolver", () => {
70
70
  },
71
71
  });
72
72
 
73
- const component = createTestRenderer(store, widget);
73
+ const component = await createTestRenderer(store, widget);
74
74
 
75
75
  let tree = component.toJSON();
76
76
  assert.deepEqual(tree, {
@@ -86,7 +86,9 @@ describe("ContentResolver", () => {
86
86
  });
87
87
  assert.equal(resolveCount, 1);
88
88
 
89
- store.set("value", 2);
89
+ await act(async () => {
90
+ store.set("value", 2);
91
+ });
90
92
  tree = component.toJSON();
91
93
  assert.deepEqual(tree, {
92
94
  type: "div",
@@ -102,7 +104,7 @@ describe("ContentResolver", () => {
102
104
  assert.equal(resolveCount, 2);
103
105
  });
104
106
 
105
- it("does not re-resolve if params are unchanged", () => {
107
+ it("does not re-resolve if params are unchanged", async () => {
106
108
  let resolveCount = 0;
107
109
 
108
110
  let widget = (
@@ -126,7 +128,7 @@ describe("ContentResolver", () => {
126
128
  },
127
129
  });
128
130
 
129
- const component = createTestRenderer(store, widget);
131
+ const component = await createTestRenderer(store, widget);
130
132
  assert.equal(resolveCount, 1);
131
133
 
132
134
  // Change unrelated data
@@ -135,7 +137,7 @@ describe("ContentResolver", () => {
135
137
  assert.equal(resolveCount, 1);
136
138
  });
137
139
 
138
- it("supports literal values in params", () => {
140
+ it("supports literal values in params", async () => {
139
141
  let receivedParams: any = null;
140
142
 
141
143
  let widget = (
@@ -154,7 +156,7 @@ describe("ContentResolver", () => {
154
156
 
155
157
  let store = new Store();
156
158
 
157
- const component = createTestRenderer(store, widget);
159
+ const component = await createTestRenderer(store, widget);
158
160
 
159
161
  let tree = component.toJSON();
160
162
  assert.deepEqual(tree, {
@@ -172,7 +174,7 @@ describe("ContentResolver", () => {
172
174
  assert.equal(receivedParams.name, "test");
173
175
  });
174
176
 
175
- it("supports mode=prepend", () => {
177
+ it("supports mode=prepend", async () => {
176
178
  let widget = (
177
179
  <cx>
178
180
  <div>
@@ -185,7 +187,7 @@ describe("ContentResolver", () => {
185
187
 
186
188
  let store = new Store();
187
189
 
188
- const component = createTestRenderer(store, widget);
190
+ const component = await createTestRenderer(store, widget);
189
191
 
190
192
  let tree = component.toJSON();
191
193
  assert.deepEqual(tree, {
@@ -206,7 +208,7 @@ describe("ContentResolver", () => {
206
208
  });
207
209
  });
208
210
 
209
- it("supports mode=append", () => {
211
+ it("supports mode=append", async () => {
210
212
  let widget = (
211
213
  <cx>
212
214
  <div>
@@ -219,7 +221,7 @@ describe("ContentResolver", () => {
219
221
 
220
222
  let store = new Store();
221
223
 
222
- const component = createTestRenderer(store, widget);
224
+ const component = await createTestRenderer(store, widget);
223
225
 
224
226
  let tree = component.toJSON();
225
227
  assert.deepEqual(tree, {
@@ -240,7 +242,7 @@ describe("ContentResolver", () => {
240
242
  });
241
243
  });
242
244
 
243
- it("supports mode=replace (default)", () => {
245
+ it("supports mode=replace (default)", async () => {
244
246
  let widget = (
245
247
  <cx>
246
248
  <div>
@@ -253,7 +255,7 @@ describe("ContentResolver", () => {
253
255
 
254
256
  let store = new Store();
255
257
 
256
- const component = createTestRenderer(store, widget);
258
+ const component = await createTestRenderer(store, widget);
257
259
 
258
260
  let tree = component.toJSON();
259
261
  assert.deepEqual(tree, {
@@ -295,7 +297,7 @@ describe("ContentResolver", () => {
295
297
  },
296
298
  });
297
299
 
298
- const component = createTestRenderer(store, widget);
300
+ const component = await createTestRenderer(store, widget);
299
301
 
300
302
  // Initially loading should be true
301
303
  assert.equal(store.get("loading"), true);
@@ -323,7 +325,7 @@ describe("ContentResolver", () => {
323
325
  });
324
326
  });
325
327
 
326
- it("supports typed params with accessor chains", () => {
328
+ it("supports typed params with accessor chains", async () => {
327
329
  const model = createAccessorModelProxy<TestModel>();
328
330
 
329
331
  // This test verifies type inference works correctly.
@@ -362,7 +364,7 @@ describe("ContentResolver", () => {
362
364
  },
363
365
  });
364
366
 
365
- const component = createTestRenderer(store, widget);
367
+ const component = await createTestRenderer(store, widget);
366
368
 
367
369
  let tree = component.toJSON();
368
370
  assert.deepEqual(tree, {
@@ -378,7 +380,7 @@ describe("ContentResolver", () => {
378
380
  });
379
381
  });
380
382
 
381
- it("infers types from literal params", () => {
383
+ it("infers types from literal params", async () => {
382
384
  // When using literal values, TypeScript can infer their types
383
385
  let widget = (
384
386
  <cx>
@@ -399,7 +401,7 @@ describe("ContentResolver", () => {
399
401
 
400
402
  let store = new Store();
401
403
 
402
- const component = createTestRenderer(store, widget);
404
+ const component = await createTestRenderer(store, widget);
403
405
 
404
406
  let tree = component.toJSON();
405
407
  assert.deepEqual(tree, {
@@ -415,7 +417,7 @@ describe("ContentResolver", () => {
415
417
  });
416
418
  });
417
419
 
418
- it("supports simple Prop params (non-structured)", () => {
420
+ it("supports simple Prop params (non-structured)", async () => {
419
421
  const model = createAccessorModelProxy<TestModel>();
420
422
 
421
423
  // Test using a single AccessorChain as params instead of an object
@@ -444,7 +446,7 @@ describe("ContentResolver", () => {
444
446
  },
445
447
  });
446
448
 
447
- const component = createTestRenderer(store, widget);
449
+ const component = await createTestRenderer(store, widget);
448
450
 
449
451
  let tree = component.toJSON();
450
452
  assert.deepEqual(tree, {
@@ -460,7 +462,7 @@ describe("ContentResolver", () => {
460
462
  });
461
463
  });
462
464
 
463
- it("supports simple bind() as params", () => {
465
+ it("supports simple bind() as params", async () => {
464
466
  let widget = (
465
467
  <cx>
466
468
  <div>
@@ -480,7 +482,7 @@ describe("ContentResolver", () => {
480
482
  },
481
483
  });
482
484
 
483
- const component = createTestRenderer(store, widget);
485
+ const component = await createTestRenderer(store, widget);
484
486
 
485
487
  let tree = component.toJSON();
486
488
  assert.deepEqual(tree, {
@@ -496,7 +498,7 @@ describe("ContentResolver", () => {
496
498
  });
497
499
  });
498
500
 
499
- it("resolves Selector<string> | null to string | null", () => {
501
+ it("resolves Selector<string> | null to string | null", async () => {
500
502
  const text: string | null = "Hello {user.name}";
501
503
 
502
504
  let widget = (
@@ -524,7 +526,7 @@ describe("ContentResolver", () => {
524
526
  },
525
527
  });
526
528
 
527
- const component = createTestRenderer(store, widget);
529
+ const component = await createTestRenderer(store, widget);
528
530
  let tree = component.toJSON();
529
531
  assert.deepEqual(tree, {
530
532
  type: "div",
@@ -533,7 +535,7 @@ describe("ContentResolver", () => {
533
535
  });
534
536
  });
535
537
 
536
- it("resolves Prop<string> to string (not any)", () => {
538
+ it("resolves Prop<string> to string (not any)", async () => {
537
539
  const model = createAccessorModelProxy<TestModel>();
538
540
 
539
541
  // When params is typed as Prop<string>, onResolve should receive string (not any)
@@ -565,7 +567,7 @@ describe("ContentResolver", () => {
565
567
  },
566
568
  });
567
569
 
568
- const component = createTestRenderer(store, widget);
570
+ const component = await createTestRenderer(store, widget);
569
571
 
570
572
  let tree = component.toJSON();
571
573
  assert.deepEqual(tree, {