cx 24.9.3 → 24.10.0

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 (729) hide show
  1. package/LICENSE-THIRD-PARTY.md +91 -91
  2. package/LICENSE.md +7 -7
  3. package/README.md +46 -46
  4. package/dist/charts.css +19 -16
  5. package/dist/charts.js +102 -72
  6. package/dist/data.js +5 -4
  7. package/dist/manifest.js +866 -863
  8. package/dist/util.js +7 -0
  9. package/index.js +17 -17
  10. package/locale/de-de.js +74 -74
  11. package/locale/en-us.js +74 -74
  12. package/locale/es-es.js +74 -74
  13. package/locale/fr-fr.js +74 -74
  14. package/locale/nl-nl.js +74 -74
  15. package/locale/pt-pt.js +74 -74
  16. package/locale/sr-latn-ba.js +74 -74
  17. package/package.json +1 -1
  18. package/src/charts/Bar.js +89 -89
  19. package/src/charts/Bar.scss +26 -26
  20. package/src/charts/BarGraph.d.ts +15 -15
  21. package/src/charts/BarGraph.js +112 -112
  22. package/src/charts/BarGraph.scss +27 -27
  23. package/src/charts/BubbleGraph.js +92 -92
  24. package/src/charts/BubbleGraph.scss +29 -29
  25. package/src/charts/Chart.d.ts +12 -12
  26. package/src/charts/Chart.js +75 -75
  27. package/src/charts/ColorMap.d.ts +21 -21
  28. package/src/charts/ColorMap.js +96 -96
  29. package/src/charts/Column.scss +26 -26
  30. package/src/charts/ColumnBarBase.d.ts +64 -64
  31. package/src/charts/ColumnBarGraphBase.d.ts +73 -73
  32. package/src/charts/ColumnBarGraphBase.js +114 -114
  33. package/src/charts/ColumnGraph.d.ts +18 -18
  34. package/src/charts/ColumnGraph.scss +27 -27
  35. package/src/charts/Grid.js +5 -5
  36. package/src/charts/Gridlines.d.ts +24 -24
  37. package/src/charts/Gridlines.js +48 -48
  38. package/src/charts/Gridlines.scss +22 -22
  39. package/src/charts/Legend.d.ts +27 -27
  40. package/src/charts/Legend.js +49 -33
  41. package/src/charts/Legend.scss +17 -19
  42. package/src/charts/LegendEntry.js +120 -121
  43. package/src/charts/LegendEntry.scss +8 -12
  44. package/src/charts/LineGraph.d.ts +92 -92
  45. package/src/charts/LineGraph.scss +23 -23
  46. package/src/charts/Marker.scss +41 -41
  47. package/src/charts/MarkerLine.d.ts +57 -57
  48. package/src/charts/MarkerLine.js +128 -128
  49. package/src/charts/MarkerLine.scss +17 -17
  50. package/src/charts/MouseTracker.d.ts +16 -16
  51. package/src/charts/MouseTracker.js +80 -80
  52. package/src/charts/Pie.js +8 -8
  53. package/src/charts/PieChart.d.ts +89 -89
  54. package/src/charts/PieChart.js +527 -527
  55. package/src/charts/PieChart.scss +26 -26
  56. package/src/charts/PieLabel.d.ts +26 -26
  57. package/src/charts/PieLabelsContainer.d.ts +6 -6
  58. package/src/charts/PieLabelsContainer.js +55 -55
  59. package/src/charts/Range.d.ts +74 -74
  60. package/src/charts/Range.js +205 -205
  61. package/src/charts/Range.scss +18 -18
  62. package/src/charts/RangeMarker.d.ts +35 -35
  63. package/src/charts/RangeMarker.js +155 -155
  64. package/src/charts/RangeMarker.scss +15 -15
  65. package/src/charts/ScatterGraph.d.ts +64 -64
  66. package/src/charts/ScatterGraph.scss +21 -21
  67. package/src/charts/Swimlane.d.ts +24 -24
  68. package/src/charts/Swimlane.js +140 -140
  69. package/src/charts/Swimlane.scss +14 -14
  70. package/src/charts/Swimlanes.d.ts +41 -41
  71. package/src/charts/Swimlanes.js +114 -114
  72. package/src/charts/Swimlanes.scss +14 -14
  73. package/src/charts/axis/Axis.scss +22 -22
  74. package/src/charts/axis/CategoryAxis.d.ts +24 -24
  75. package/src/charts/axis/CategoryAxis.js +212 -212
  76. package/src/charts/axis/CategoryAxis.scss +32 -32
  77. package/src/charts/axis/NumericAxis.d.ts +46 -46
  78. package/src/charts/axis/NumericAxis.scss +32 -32
  79. package/src/charts/axis/Stack.d.ts +10 -10
  80. package/src/charts/axis/TimeAxis.d.ts +23 -23
  81. package/src/charts/axis/TimeAxis.js +510 -510
  82. package/src/charts/axis/TimeAxis.scss +32 -32
  83. package/src/charts/axis/index.d.ts +3 -3
  84. package/src/charts/axis/index.js +3 -3
  85. package/src/charts/axis/index.scss +5 -5
  86. package/src/charts/axis/variables.scss +2 -2
  87. package/src/charts/helpers/MinMaxFinder.js +36 -36
  88. package/src/charts/helpers/PointReducer.d.ts +15 -15
  89. package/src/charts/helpers/index.d.ts +4 -4
  90. package/src/charts/helpers/index.js +4 -4
  91. package/src/charts/index.d.ts +27 -27
  92. package/src/charts/index.js +34 -34
  93. package/src/charts/index.scss +22 -22
  94. package/src/charts/palette.scss +95 -95
  95. package/src/charts/shapes.d.ts +22 -22
  96. package/src/charts/shapes.js +79 -79
  97. package/src/charts/variables.scss +21 -21
  98. package/src/core.d.ts +271 -271
  99. package/src/data/AggregateFunction.d.ts +20 -20
  100. package/src/data/AggregateFunction.js +145 -145
  101. package/src/data/ArrayElementView.d.ts +13 -13
  102. package/src/data/ArrayRef.d.ts +14 -14
  103. package/src/data/ArrayRef.js +34 -34
  104. package/src/data/AugmentedViewBase.d.ts +18 -18
  105. package/src/data/Binding.d.ts +19 -19
  106. package/src/data/Binding.js +76 -76
  107. package/src/data/ExposedRecordView.d.ts +14 -14
  108. package/src/data/ExposedRecordView.js +69 -69
  109. package/src/data/ExposedValueView.d.ts +19 -19
  110. package/src/data/ExposedValueView.js +72 -72
  111. package/src/data/Expression.d.ts +17 -17
  112. package/src/data/Expression.js +221 -220
  113. package/src/data/Expression.spec.js +184 -174
  114. package/src/data/Grouper.d.ts +21 -21
  115. package/src/data/Grouper.js +144 -144
  116. package/src/data/Grouper.spec.js +57 -57
  117. package/src/data/NestedDataView.d.ts +19 -19
  118. package/src/data/NestedDataView.js +22 -22
  119. package/src/data/ReadOnlyDataView.d.ts +14 -14
  120. package/src/data/ReadOnlyDataView.js +26 -26
  121. package/src/data/Ref.d.ts +24 -24
  122. package/src/data/Ref.js +79 -79
  123. package/src/data/Ref.spec.js +79 -79
  124. package/src/data/Store.d.ts +14 -14
  125. package/src/data/Store.js +46 -46
  126. package/src/data/Store.spec.js +22 -22
  127. package/src/data/StoreProxy.d.ts +4 -4
  128. package/src/data/StoreProxy.js +16 -16
  129. package/src/data/StoreRef.js +54 -54
  130. package/src/data/StoreRef.spec.js +24 -24
  131. package/src/data/StringTemplate.d.ts +15 -15
  132. package/src/data/StringTemplate.js +92 -92
  133. package/src/data/StringTemplate.spec.js +105 -105
  134. package/src/data/StructuredDataAccessor.d.ts +7 -7
  135. package/src/data/StructuredSelector.d.ts +17 -17
  136. package/src/data/StructuredSelector.js +131 -131
  137. package/src/data/StructuredSelector.spec.js +113 -113
  138. package/src/data/SubscribableView.d.ts +11 -11
  139. package/src/data/SubscribableView.js +54 -54
  140. package/src/data/View.d.ts +131 -131
  141. package/src/data/View.js +182 -182
  142. package/src/data/View.spec.js +60 -60
  143. package/src/data/ZoomIntoPropertyView.d.ts +11 -11
  144. package/src/data/ZoomIntoPropertyView.js +33 -33
  145. package/src/data/ZoomIntoPropertyView.spec.js +65 -65
  146. package/src/data/comparer.d.ts +7 -7
  147. package/src/data/comparer.js +54 -54
  148. package/src/data/comparer.spec.js +60 -60
  149. package/src/data/computable.d.ts +125 -125
  150. package/src/data/computable.js +56 -56
  151. package/src/data/computable.spec.js +55 -55
  152. package/src/data/createAccessorModelProxy.d.ts +6 -6
  153. package/src/data/createAccessorModelProxy.js +43 -43
  154. package/src/data/createAccessorModelProxy.spec.tsx +44 -44
  155. package/src/data/createStructuredSelector.d.ts +2 -2
  156. package/src/data/createStructuredSelector.js +43 -43
  157. package/src/data/createStructuredSelector.spec.js +46 -46
  158. package/src/data/defaultCompare.js +14 -14
  159. package/src/data/diff/diffArrays.d.ts +15 -15
  160. package/src/data/diff/diffArrays.js +41 -41
  161. package/src/data/diff/diffs.spec.js +49 -49
  162. package/src/data/diff/index.d.ts +1 -1
  163. package/src/data/diff/index.js +1 -1
  164. package/src/data/enableFatArrowExpansion.d.ts +1 -1
  165. package/src/data/enableFatArrowExpansion.js +6 -6
  166. package/src/data/getAccessor.d.ts +8 -8
  167. package/src/data/getAccessor.js +61 -61
  168. package/src/data/getAccessor.spec.js +11 -11
  169. package/src/data/getSelector.d.ts +3 -3
  170. package/src/data/getSelector.js +48 -48
  171. package/src/data/getSelector.spec.js +43 -43
  172. package/src/data/index.d.ts +30 -30
  173. package/src/data/index.js +28 -28
  174. package/src/data/isSelector.d.ts +1 -1
  175. package/src/data/isSelector.js +26 -26
  176. package/src/data/ops/append.d.ts +1 -1
  177. package/src/data/ops/append.js +7 -7
  178. package/src/data/ops/append.spec.js +28 -28
  179. package/src/data/ops/filter.d.ts +1 -1
  180. package/src/data/ops/filter.js +8 -8
  181. package/src/data/ops/filter.spec.js +29 -29
  182. package/src/data/ops/findTreeNode.d.ts +1 -1
  183. package/src/data/ops/findTreeNode.js +15 -15
  184. package/src/data/ops/findTreeNode.spec.js +24 -24
  185. package/src/data/ops/findTreePath.d.ts +6 -6
  186. package/src/data/ops/findTreePath.js +16 -16
  187. package/src/data/ops/index.d.ts +10 -10
  188. package/src/data/ops/index.js +11 -11
  189. package/src/data/ops/insertElement.d.ts +1 -1
  190. package/src/data/ops/insertElement.js +2 -2
  191. package/src/data/ops/merge.d.ts +3 -3
  192. package/src/data/ops/merge.js +9 -9
  193. package/src/data/ops/merge.spec.js +27 -27
  194. package/src/data/ops/moveElement.d.ts +1 -1
  195. package/src/data/ops/moveElement.js +13 -13
  196. package/src/data/ops/removeTreeNodes.d.ts +5 -5
  197. package/src/data/ops/removeTreeNodes.js +5 -5
  198. package/src/data/ops/removeTreeNodes.spec.js +28 -28
  199. package/src/data/ops/updateArray.d.ts +5 -5
  200. package/src/data/ops/updateArray.js +24 -24
  201. package/src/data/ops/updateArray.spec.js +38 -38
  202. package/src/data/ops/updateTree.d.ts +7 -7
  203. package/src/data/ops/updateTree.js +25 -25
  204. package/src/data/ops/updateTree.spec.js +36 -36
  205. package/src/global.scss +13 -13
  206. package/src/hooks/createLocalStorageRef.d.ts +2 -2
  207. package/src/hooks/createLocalStorageRef.js +22 -22
  208. package/src/hooks/index.d.ts +8 -8
  209. package/src/hooks/index.js +7 -7
  210. package/src/hooks/invokeCallback.d.ts +5 -5
  211. package/src/hooks/invokeCallback.js +6 -6
  212. package/src/hooks/invokeCallback.spec.js +53 -53
  213. package/src/hooks/resolveCallback.d.ts +3 -3
  214. package/src/hooks/resolveCallback.js +11 -11
  215. package/src/hooks/resolveCallback.spec.js +54 -54
  216. package/src/hooks/store.d.ts +7 -7
  217. package/src/hooks/store.js +32 -32
  218. package/src/hooks/store.spec.js +73 -73
  219. package/src/hooks/useEffect.d.ts +2 -2
  220. package/src/hooks/useEffect.js +14 -14
  221. package/src/hooks/useInterval.js +7 -7
  222. package/src/hooks/useState.d.ts +2 -2
  223. package/src/hooks/useState.js +15 -15
  224. package/src/hooks/useTrigger.d.ts +4 -4
  225. package/src/hooks/useTrigger.js +20 -20
  226. package/src/hooks/useTrigger.spec.js +102 -102
  227. package/src/index.js +7 -7
  228. package/src/svg/BoundedObject.d.ts +22 -22
  229. package/src/svg/BoundedObject.js +59 -59
  230. package/src/svg/ClipRect.d.ts +4 -4
  231. package/src/svg/ClipRect.js +23 -23
  232. package/src/svg/Ellipse.d.ts +23 -23
  233. package/src/svg/Ellipse.js +36 -36
  234. package/src/svg/Line.d.ts +20 -20
  235. package/src/svg/Line.js +32 -32
  236. package/src/svg/NonOverlappingRect.d.ts +5 -5
  237. package/src/svg/NonOverlappingRect.js +14 -14
  238. package/src/svg/NonOverlappingRectGroup.d.ts +3 -3
  239. package/src/svg/NonOverlappingRectGroup.js +36 -36
  240. package/src/svg/Svg.d.ts +32 -32
  241. package/src/svg/Svg.js +177 -177
  242. package/src/svg/Svg.scss +26 -26
  243. package/src/svg/Text.js +78 -78
  244. package/src/svg/TextualBoundedObject.d.ts +6 -6
  245. package/src/svg/TextualBoundedObject.js +28 -28
  246. package/src/svg/index.d.ts +11 -11
  247. package/src/svg/index.js +17 -17
  248. package/src/svg/index.scss +8 -8
  249. package/src/svg/util/Rect.d.ts +40 -40
  250. package/src/svg/util/Rect.js +108 -108
  251. package/src/ui/CSS.d.ts +19 -19
  252. package/src/ui/CSS.js +79 -79
  253. package/src/ui/CSSHelper.d.ts +10 -10
  254. package/src/ui/CSSHelper.js +17 -17
  255. package/src/ui/Container.d.ts +18 -18
  256. package/src/ui/Container.js +183 -183
  257. package/src/ui/ContentResolver.d.ts +12 -12
  258. package/src/ui/ContentResolver.js +78 -78
  259. package/src/ui/Controller.js +114 -114
  260. package/src/ui/Controller.spec.js +414 -414
  261. package/src/ui/Cx.d.ts +18 -18
  262. package/src/ui/Cx.spec.js +193 -193
  263. package/src/ui/DataProxy.d.ts +12 -12
  264. package/src/ui/DataProxy.js +44 -44
  265. package/src/ui/DetachedScope.d.ts +21 -21
  266. package/src/ui/DetachedScope.js +93 -93
  267. package/src/ui/FocusManager.d.ts +29 -29
  268. package/src/ui/FocusManager.js +171 -171
  269. package/src/ui/Format.d.ts +2 -2
  270. package/src/ui/Format.js +107 -107
  271. package/src/ui/HoverSync.d.ts +13 -13
  272. package/src/ui/HoverSync.js +147 -147
  273. package/src/ui/Instance.d.ts +72 -72
  274. package/src/ui/Instance.js +610 -610
  275. package/src/ui/IsolatedScope.d.ts +16 -16
  276. package/src/ui/IsolatedScope.js +29 -29
  277. package/src/ui/IsolatedScope.spec.js +62 -62
  278. package/src/ui/Localization.d.ts +17 -17
  279. package/src/ui/Localization.js +70 -70
  280. package/src/ui/PureContainer.d.ts +16 -16
  281. package/src/ui/PureContainer.js +7 -7
  282. package/src/ui/RenderingContext.d.ts +9 -9
  283. package/src/ui/RenderingContext.js +88 -88
  284. package/src/ui/Repeater.d.ts +60 -60
  285. package/src/ui/Repeater.js +102 -102
  286. package/src/ui/Repeater.spec.js +143 -143
  287. package/src/ui/Rescope.d.ts +10 -10
  288. package/src/ui/Rescope.js +31 -31
  289. package/src/ui/Rescope.spec.js +195 -195
  290. package/src/ui/ResizeManager.d.ts +9 -9
  291. package/src/ui/ResizeManager.js +30 -30
  292. package/src/ui/Restate.d.ts +21 -21
  293. package/src/ui/Restate.js +163 -163
  294. package/src/ui/Restate.spec.js +422 -422
  295. package/src/ui/StaticText.d.ts +8 -8
  296. package/src/ui/StaticText.js +9 -9
  297. package/src/ui/StructuredInstanceDataAccessor.d.ts +16 -16
  298. package/src/ui/StructuredInstanceDataAccessor.js +26 -26
  299. package/src/ui/Text.d.ts +10 -10
  300. package/src/ui/Text.js +25 -25
  301. package/src/ui/VDOM.d.ts +12 -12
  302. package/src/ui/VDOM.js +2 -2
  303. package/src/ui/Widget.d.ts +14 -14
  304. package/src/ui/Widget.js +200 -200
  305. package/src/ui/ZIndexManager.d.ts +7 -7
  306. package/src/ui/ZIndexManager.js +11 -11
  307. package/src/ui/adapter/ArrayAdapter.d.ts +17 -17
  308. package/src/ui/adapter/ArrayAdapter.js +142 -142
  309. package/src/ui/adapter/ArrayAdapter.spec.js +55 -55
  310. package/src/ui/adapter/DataAdapter.js +15 -15
  311. package/src/ui/adapter/GroupAdapter.d.ts +23 -23
  312. package/src/ui/adapter/TreeAdapter.d.ts +24 -24
  313. package/src/ui/adapter/TreeAdapter.js +100 -100
  314. package/src/ui/adapter/TreeAdapter.spec.js +67 -67
  315. package/src/ui/adapter/index.d.ts +4 -4
  316. package/src/ui/adapter/index.js +4 -4
  317. package/src/ui/app/History.d.ts +17 -17
  318. package/src/ui/app/History.js +114 -114
  319. package/src/ui/app/Url.js +103 -103
  320. package/src/ui/app/Url.spec.js +51 -51
  321. package/src/ui/app/index.d.ts +4 -4
  322. package/src/ui/app/index.js +5 -5
  323. package/src/ui/app/startAppLoop.d.ts +3 -3
  324. package/src/ui/app/startAppLoop.js +58 -58
  325. package/src/ui/app/startHotAppLoop.d.ts +6 -6
  326. package/src/ui/app/startHotAppLoop.js +25 -25
  327. package/src/ui/batchUpdates.d.ts +10 -10
  328. package/src/ui/batchUpdates.js +67 -67
  329. package/src/ui/bind.d.ts +4 -4
  330. package/src/ui/bind.js +7 -7
  331. package/src/ui/createFunctionalComponent.d.ts +1 -1
  332. package/src/ui/createFunctionalComponent.js +68 -68
  333. package/src/ui/createFunctionalComponent.spec.js +400 -400
  334. package/src/ui/expr.d.ts +24 -24
  335. package/src/ui/expr.js +17 -17
  336. package/src/ui/flattenProps.js +21 -21
  337. package/src/ui/index.d.ts +42 -42
  338. package/src/ui/index.js +44 -44
  339. package/src/ui/index.scss +2 -2
  340. package/src/ui/keyboardShortcuts.d.ts +4 -4
  341. package/src/ui/keyboardShortcuts.js +31 -31
  342. package/src/ui/layout/Content.d.ts +14 -14
  343. package/src/ui/layout/Content.js +16 -16
  344. package/src/ui/layout/ContentPlaceholder.d.ts +17 -17
  345. package/src/ui/layout/ContentPlaceholder.js +79 -79
  346. package/src/ui/layout/ContentPlaceholder.spec.js +368 -368
  347. package/src/ui/layout/FirstVisibleChildLayout.d.ts +4 -4
  348. package/src/ui/layout/FirstVisibleChildLayout.js +65 -65
  349. package/src/ui/layout/FirstVisibleChildLayout.spec.js +196 -196
  350. package/src/ui/layout/LabelsLeftLayout.d.ts +11 -11
  351. package/src/ui/layout/LabelsLeftLayout.js +59 -59
  352. package/src/ui/layout/LabelsLeftLayout.scss +44 -44
  353. package/src/ui/layout/LabelsTopLayout.d.ts +15 -15
  354. package/src/ui/layout/LabelsTopLayout.js +134 -134
  355. package/src/ui/layout/LabelsTopLayout.scss +63 -63
  356. package/src/ui/layout/UseParentLayout.d.ts +4 -4
  357. package/src/ui/layout/UseParentLayout.js +6 -6
  358. package/src/ui/layout/exploreChildren.d.ts +14 -14
  359. package/src/ui/layout/exploreChildren.js +40 -40
  360. package/src/ui/layout/index.d.ts +10 -10
  361. package/src/ui/layout/index.js +10 -10
  362. package/src/ui/layout/index.scss +3 -3
  363. package/src/ui/layout/variables.scss +2 -2
  364. package/src/ui/selection/KeySelection.d.ts +17 -17
  365. package/src/ui/selection/KeySelection.js +129 -129
  366. package/src/ui/selection/PropertySelection.d.ts +17 -17
  367. package/src/ui/selection/Selection.d.ts +27 -27
  368. package/src/ui/selection/Selection.js +93 -93
  369. package/src/ui/selection/index.d.ts +3 -3
  370. package/src/ui/selection/index.js +3 -3
  371. package/src/ui/tpl.d.ts +2 -2
  372. package/src/ui/tpl.js +4 -4
  373. package/src/ui/variables.scss +1 -1
  374. package/src/util/Component.d.ts +41 -41
  375. package/src/util/Component.js +107 -107
  376. package/src/util/Console.js +11 -11
  377. package/src/util/DOM.d.ts +33 -33
  378. package/src/util/DOM.js +72 -72
  379. package/src/util/Debug.d.ts +10 -10
  380. package/src/util/Debug.js +45 -45
  381. package/src/util/Format.d.ts +18 -18
  382. package/src/util/Format.spec.js +69 -69
  383. package/src/util/GlobalCacheIdentifier.js +11 -11
  384. package/src/util/GlobalCacheldentifier.d.ts +6 -6
  385. package/src/util/KeyCode.d.ts +21 -21
  386. package/src/util/KeyCode.js +21 -21
  387. package/src/util/SubscriberList.d.ts +41 -41
  388. package/src/util/SubscriberList.js +57 -57
  389. package/src/util/Timing.d.ts +13 -13
  390. package/src/util/Timing.js +57 -57
  391. package/src/util/TraversalStack.js +42 -42
  392. package/src/util/TraversalStack.spec.js +46 -46
  393. package/src/util/addEventListenerWithOptions.d.ts +6 -6
  394. package/src/util/addEventListenerWithOptions.js +9 -9
  395. package/src/util/browserSupportsPassiveEventHandlers.d.ts +4 -4
  396. package/src/util/browserSupportsPassiveEventHandlers.js +18 -18
  397. package/src/util/calculateNaturalElementHeight.d.ts +1 -1
  398. package/src/util/calculateNaturalElementHeight.js +22 -22
  399. package/src/util/call-once.scss +6 -6
  400. package/src/util/coalesce.d.ts +1 -1
  401. package/src/util/coalesce.js +6 -6
  402. package/src/util/color/hslToRgb.d.ts +8 -8
  403. package/src/util/color/hslToRgb.js +27 -27
  404. package/src/util/color/index.d.ts +3 -3
  405. package/src/util/color/index.js +4 -4
  406. package/src/util/color/parseColor.d.ts +59 -59
  407. package/src/util/color/parseColor.js +119 -119
  408. package/src/util/color/rgbToHex.d.ts +8 -8
  409. package/src/util/color/rgbToHex.js +7 -7
  410. package/src/util/color/rgbToHsl.d.ts +8 -8
  411. package/src/util/color/rgbToHsl.js +27 -27
  412. package/src/util/date/dateDiff.d.ts +7 -7
  413. package/src/util/date/dateDiff.js +3 -3
  414. package/src/util/date/diff.d.ts +7 -7
  415. package/src/util/date/diff.js +7 -7
  416. package/src/util/date/encodeDateWithTimezoneOffset.js +18 -18
  417. package/src/util/date/index.d.ts +8 -8
  418. package/src/util/date/index.js +9 -9
  419. package/src/util/date/lowerBoundCheck.d.ts +7 -7
  420. package/src/util/date/lowerBoundCheck.js +6 -6
  421. package/src/util/date/maxDate.d.ts +5 -5
  422. package/src/util/date/maxDate.js +9 -9
  423. package/src/util/date/minDate.d.ts +5 -5
  424. package/src/util/date/minDate.js +9 -9
  425. package/src/util/date/monthStart.d.ts +5 -5
  426. package/src/util/date/monthStart.js +3 -3
  427. package/src/util/date/sameDate.d.ts +6 -6
  428. package/src/util/date/sameDate.js +5 -5
  429. package/src/util/date/upperBoundCheck.d.ts +7 -7
  430. package/src/util/date/upperBoundCheck.js +6 -6
  431. package/src/util/date/upperBoundCheck.spec.js +30 -30
  432. package/src/util/date/zeroTime.d.ts +6 -6
  433. package/src/util/date/zeroTime.js +3 -3
  434. package/src/util/debounce.d.ts +9 -9
  435. package/src/util/debounce.js +18 -18
  436. package/src/util/dummyCallback.d.ts +1 -1
  437. package/src/util/dummyCallback.js +1 -1
  438. package/src/util/escapeSpecialRegexCharacters.d.ts +6 -6
  439. package/src/util/escapeSpecialRegexCharacters.js +3 -3
  440. package/src/util/eventCallbacks.d.ts +4 -4
  441. package/src/util/eventCallbacks.js +2 -2
  442. package/src/util/expandFatArrows.js +118 -118
  443. package/src/util/findScrollableParent.js +16 -16
  444. package/src/util/getActiveElement.js +3 -3
  445. package/src/util/getParentFrameBoundingClientRect.js +21 -21
  446. package/src/util/getScrollerBoundingClientRect.js +21 -21
  447. package/src/util/getSearchQueryPredicate.js +58 -58
  448. package/src/util/getSearchQueryPredicate.spec.js +40 -40
  449. package/src/util/getTopLevelBoundingClientRect.js +13 -13
  450. package/src/util/getVendorPrefix.js +26 -26
  451. package/src/util/index.d.ts +51 -50
  452. package/src/util/index.js +1 -0
  453. package/src/util/index.scss +10 -10
  454. package/src/util/innerTextTrim.d.ts +6 -6
  455. package/src/util/innerTextTrim.js +5 -5
  456. package/src/util/isArray.d.ts +1 -1
  457. package/src/util/isArray.js +3 -3
  458. package/src/util/isDefined.js +3 -3
  459. package/src/util/isDigit.d.ts +6 -6
  460. package/src/util/isDigit.js +3 -3
  461. package/src/util/isFunction.d.ts +1 -1
  462. package/src/util/isFunction.js +3 -3
  463. package/src/util/isNonEmptyArray.d.ts +1 -1
  464. package/src/util/isNonEmptyArray.js +3 -3
  465. package/src/util/isNumber.d.ts +1 -1
  466. package/src/util/isNumber.js +3 -3
  467. package/src/util/isObject.d.ts +1 -1
  468. package/src/util/isObject.js +3 -3
  469. package/src/util/isPromise.d.ts +1 -1
  470. package/src/util/isPromise.js +6 -6
  471. package/src/util/isString.d.ts +1 -1
  472. package/src/util/isString.js +3 -3
  473. package/src/util/isTextInputElement.d.ts +1 -1
  474. package/src/util/isTextInputElement.js +2 -2
  475. package/src/util/isTouchDevice.d.ts +1 -1
  476. package/src/util/isTouchDevice.js +7 -7
  477. package/src/util/isTouchEvent.d.ts +3 -3
  478. package/src/util/isTouchEvent.js +64 -64
  479. package/src/util/isUndefined.d.ts +1 -1
  480. package/src/util/isUndefined.js +3 -3
  481. package/src/util/isValidIdentifierName.d.ts +1 -0
  482. package/src/util/isValidIdentifierName.js +5 -0
  483. package/src/util/isValidIdentifierName.spec.js +33 -0
  484. package/src/util/onIdleCallback.js +13 -13
  485. package/src/util/parseStyle.d.ts +3 -3
  486. package/src/util/parseStyle.js +27 -27
  487. package/src/util/quote.d.ts +2 -2
  488. package/src/util/quote.js +4 -4
  489. package/src/util/reverseSlice.js +9 -9
  490. package/src/util/routeAppend.js +15 -15
  491. package/src/util/routeAppend.spec.js +19 -19
  492. package/src/util/scrollElementIntoView.d.ts +7 -7
  493. package/src/util/scrollElementIntoView.js +34 -34
  494. package/src/util/scss/calc.scss +40 -40
  495. package/src/util/scss/call-once.scss +10 -10
  496. package/src/util/scss/clockwise.scss +47 -47
  497. package/src/util/scss/colors.scss +7 -7
  498. package/src/util/scss/deep-get.scss +9 -9
  499. package/src/util/scss/deep-merge.scss +18 -18
  500. package/src/util/scss/include.scss +47 -47
  501. package/src/util/scss/index.scss +9 -9
  502. package/src/util/shallowEquals.js +43 -43
  503. package/src/util/throttle.d.ts +8 -8
  504. package/src/util/throttle.js +14 -14
  505. package/src/util/validatedDebounce.js +19 -19
  506. package/src/variables.scss +217 -217
  507. package/src/widgets/AccessorBindings.spec.tsx +66 -66
  508. package/src/widgets/Button.d.ts +58 -58
  509. package/src/widgets/Button.js +118 -118
  510. package/src/widgets/Button.scss +117 -117
  511. package/src/widgets/CxCredit.d.ts +12 -12
  512. package/src/widgets/CxCredit.js +31 -31
  513. package/src/widgets/DocumentTitle.d.ts +11 -11
  514. package/src/widgets/DocumentTitle.js +68 -68
  515. package/src/widgets/FlexBox.d.ts +69 -69
  516. package/src/widgets/FlexBox.js +92 -92
  517. package/src/widgets/FlexBox.scss +146 -146
  518. package/src/widgets/Heading.d.ts +16 -16
  519. package/src/widgets/Heading.js +32 -32
  520. package/src/widgets/Heading.scss +38 -38
  521. package/src/widgets/HighlightedSearchText.d.ts +9 -9
  522. package/src/widgets/HtmlElement.d.ts +26 -26
  523. package/src/widgets/HtmlElement.spec.js +57 -57
  524. package/src/widgets/Icon.d.ts +34 -34
  525. package/src/widgets/Icon.js +50 -50
  526. package/src/widgets/Icon.scss +20 -20
  527. package/src/widgets/List.d.ts +96 -96
  528. package/src/widgets/List.js +587 -587
  529. package/src/widgets/ProgressBar.d.ts +17 -17
  530. package/src/widgets/ProgressBar.js +46 -46
  531. package/src/widgets/ProgressBar.scss +49 -49
  532. package/src/widgets/Resizer.d.ts +27 -27
  533. package/src/widgets/Resizer.js +151 -151
  534. package/src/widgets/Resizer.scss +42 -42
  535. package/src/widgets/Sandbox.d.ts +16 -16
  536. package/src/widgets/Sandbox.js +62 -62
  537. package/src/widgets/Section.d.ts +52 -52
  538. package/src/widgets/Section.js +139 -139
  539. package/src/widgets/Section.scss +54 -54
  540. package/src/widgets/animations.scss +10 -10
  541. package/src/widgets/autoFocus.d.ts +1 -1
  542. package/src/widgets/autoFocus.js +9 -9
  543. package/src/widgets/cx.d.ts +1 -1
  544. package/src/widgets/cx.js +71 -71
  545. package/src/widgets/drag-drop/DragClone.scss +33 -33
  546. package/src/widgets/drag-drop/DragHandle.d.ts +10 -10
  547. package/src/widgets/drag-drop/DragHandle.js +37 -37
  548. package/src/widgets/drag-drop/DragHandle.scss +16 -16
  549. package/src/widgets/drag-drop/DragSource.d.ts +45 -45
  550. package/src/widgets/drag-drop/DragSource.js +160 -160
  551. package/src/widgets/drag-drop/DragSource.scss +24 -24
  552. package/src/widgets/drag-drop/DropZone.d.ts +98 -98
  553. package/src/widgets/drag-drop/DropZone.js +214 -214
  554. package/src/widgets/drag-drop/DropZone.scss +74 -74
  555. package/src/widgets/drag-drop/index.d.ts +4 -4
  556. package/src/widgets/drag-drop/index.js +4 -4
  557. package/src/widgets/drag-drop/index.scss +3 -3
  558. package/src/widgets/drag-drop/ops.d.ts +56 -56
  559. package/src/widgets/drag-drop/ops.js +344 -344
  560. package/src/widgets/drag-drop/variables.scss +11 -11
  561. package/src/widgets/enableAllInternalDependencies.d.ts +1 -1
  562. package/src/widgets/enableAllInternalDependencies.js +11 -11
  563. package/src/widgets/form/Calendar.d.ts +86 -86
  564. package/src/widgets/form/Calendar.variables.scss +63 -63
  565. package/src/widgets/form/Checkbox.d.ts +43 -43
  566. package/src/widgets/form/Checkbox.js +200 -200
  567. package/src/widgets/form/Checkbox.scss +127 -127
  568. package/src/widgets/form/Checkbox.variables.scss +39 -39
  569. package/src/widgets/form/ColorField.scss +96 -96
  570. package/src/widgets/form/ColorPicker.d.ts +23 -23
  571. package/src/widgets/form/ColorPicker.js +480 -480
  572. package/src/widgets/form/ColorPicker.variables.scss +22 -22
  573. package/src/widgets/form/DateField.d.ts +6 -6
  574. package/src/widgets/form/DateField.js +12 -12
  575. package/src/widgets/form/DateTimeField.scss +90 -90
  576. package/src/widgets/form/DateTimePicker.js +391 -391
  577. package/src/widgets/form/DateTimePicker.scss +44 -44
  578. package/src/widgets/form/Field.d.ts +112 -112
  579. package/src/widgets/form/Field.scss +162 -162
  580. package/src/widgets/form/FieldGroup.d.ts +6 -6
  581. package/src/widgets/form/FieldGroup.js +5 -5
  582. package/src/widgets/form/FieldIcon.js +42 -42
  583. package/src/widgets/form/HelpText.d.ts +10 -10
  584. package/src/widgets/form/HelpText.js +9 -9
  585. package/src/widgets/form/HelpText.scss +23 -23
  586. package/src/widgets/form/Label.d.ts +23 -23
  587. package/src/widgets/form/Label.js +89 -89
  588. package/src/widgets/form/Label.scss +36 -36
  589. package/src/widgets/form/LabeledContainer.d.ts +9 -9
  590. package/src/widgets/form/LabeledContainer.js +59 -59
  591. package/src/widgets/form/LookupField.scss +219 -219
  592. package/src/widgets/form/MonthField.scss +99 -99
  593. package/src/widgets/form/MonthPicker.d.ts +74 -74
  594. package/src/widgets/form/MonthPicker.js +632 -632
  595. package/src/widgets/form/NumberField.d.ts +96 -96
  596. package/src/widgets/form/Radio.d.ts +37 -37
  597. package/src/widgets/form/Radio.js +188 -188
  598. package/src/widgets/form/Radio.scss +121 -121
  599. package/src/widgets/form/Radio.variables.scss +45 -45
  600. package/src/widgets/form/Select.d.ts +69 -69
  601. package/src/widgets/form/Select.js +269 -269
  602. package/src/widgets/form/Slider.d.ts +65 -65
  603. package/src/widgets/form/Slider.js +351 -351
  604. package/src/widgets/form/Switch.d.ts +38 -38
  605. package/src/widgets/form/Switch.js +118 -118
  606. package/src/widgets/form/TextArea.d.ts +17 -17
  607. package/src/widgets/form/TextArea.js +186 -186
  608. package/src/widgets/form/TextField.d.ts +78 -78
  609. package/src/widgets/form/TimeField.d.ts +6 -6
  610. package/src/widgets/form/TimeField.js +11 -11
  611. package/src/widgets/form/TimeList.js +84 -84
  612. package/src/widgets/form/UploadButton.d.ts +34 -34
  613. package/src/widgets/form/UploadButton.js +213 -213
  614. package/src/widgets/form/UploadButton.scss +47 -47
  615. package/src/widgets/form/ValidationError.d.ts +10 -10
  616. package/src/widgets/form/ValidationError.js +44 -44
  617. package/src/widgets/form/ValidationError.scss +21 -21
  618. package/src/widgets/form/ValidationGroup.d.ts +41 -41
  619. package/src/widgets/form/ValidationGroup.js +68 -68
  620. package/src/widgets/form/ValidationGroup.spec.js +148 -148
  621. package/src/widgets/form/Validator.d.ts +8 -8
  622. package/src/widgets/form/Validator.js +21 -21
  623. package/src/widgets/form/Wheel.js +261 -261
  624. package/src/widgets/form/Wheel.scss +150 -150
  625. package/src/widgets/form/index.d.ts +26 -26
  626. package/src/widgets/form/index.js +28 -28
  627. package/src/widgets/form/index.scss +24 -24
  628. package/src/widgets/grid/Grid.scss +680 -680
  629. package/src/widgets/grid/GridCell.d.ts +38 -38
  630. package/src/widgets/grid/GridCell.js +71 -71
  631. package/src/widgets/grid/GridCellEditor.js +41 -41
  632. package/src/widgets/grid/GridRow.js +228 -228
  633. package/src/widgets/grid/GridRowLine.js +24 -24
  634. package/src/widgets/grid/Pagination.d.ts +14 -14
  635. package/src/widgets/grid/Pagination.js +94 -94
  636. package/src/widgets/grid/Pagination.scss +113 -113
  637. package/src/widgets/grid/TreeNode.d.ts +25 -25
  638. package/src/widgets/grid/TreeNode.js +102 -102
  639. package/src/widgets/grid/index.d.ts +3 -3
  640. package/src/widgets/grid/index.js +14 -14
  641. package/src/widgets/grid/index.scss +3 -3
  642. package/src/widgets/grid/variables.scss +88 -88
  643. package/src/widgets/icons/arrow-down.svg +3 -3
  644. package/src/widgets/icons/arrow-right.svg +2 -2
  645. package/src/widgets/icons/base.svg +104 -104
  646. package/src/widgets/icons/calendar-old.svg +169 -169
  647. package/src/widgets/icons/calendar.js +16 -16
  648. package/src/widgets/icons/calendar.svg +187 -187
  649. package/src/widgets/icons/check.js +12 -12
  650. package/src/widgets/icons/clear.js +14 -14
  651. package/src/widgets/icons/clear.svg +74 -74
  652. package/src/widgets/icons/close.js +19 -19
  653. package/src/widgets/icons/close.svg +74 -74
  654. package/src/widgets/icons/cx.js +37 -37
  655. package/src/widgets/icons/drop-down.js +14 -14
  656. package/src/widgets/icons/dropdown-arrow.svg +61 -61
  657. package/src/widgets/icons/file.js +12 -12
  658. package/src/widgets/icons/file.svg +4 -4
  659. package/src/widgets/icons/folder-open.js +14 -14
  660. package/src/widgets/icons/folder-open.svg +5 -5
  661. package/src/widgets/icons/folder.js +12 -12
  662. package/src/widgets/icons/folder.svg +58 -58
  663. package/src/widgets/icons/forward.js +21 -21
  664. package/src/widgets/icons/forward.svg +67 -67
  665. package/src/widgets/icons/index.js +14 -14
  666. package/src/widgets/icons/loading.js +23 -23
  667. package/src/widgets/icons/loading.svg +4 -4
  668. package/src/widgets/icons/menu.js +16 -16
  669. package/src/widgets/icons/pixel-picker.js +17 -17
  670. package/src/widgets/icons/registry.js +53 -53
  671. package/src/widgets/icons/search.js +12 -12
  672. package/src/widgets/icons/search.svg +107 -107
  673. package/src/widgets/icons/sort-asc.js +13 -13
  674. package/src/widgets/icons/sort-asc.svg +3 -3
  675. package/src/widgets/icons/square.js +17 -17
  676. package/src/widgets/index.d.ts +55 -55
  677. package/src/widgets/index.js +57 -57
  678. package/src/widgets/index.scss +16 -16
  679. package/src/widgets/nav/Link.d.ts +26 -26
  680. package/src/widgets/nav/Link.js +7 -7
  681. package/src/widgets/nav/Link.scss +18 -18
  682. package/src/widgets/nav/Menu.d.ts +27 -27
  683. package/src/widgets/nav/Menu.js +406 -406
  684. package/src/widgets/nav/MenuItem.d.ts +31 -31
  685. package/src/widgets/nav/MenuItem.js +445 -445
  686. package/src/widgets/nav/MenuSpacer.d.ts +5 -5
  687. package/src/widgets/nav/MenuSpacer.js +12 -12
  688. package/src/widgets/nav/RedirectRoute.d.ts +9 -9
  689. package/src/widgets/nav/RedirectRoute.js +40 -40
  690. package/src/widgets/nav/Route.d.ts +21 -21
  691. package/src/widgets/nav/Route.js +105 -105
  692. package/src/widgets/nav/Route.spec.js +27 -27
  693. package/src/widgets/nav/Scroller.d.ts +17 -17
  694. package/src/widgets/nav/Scroller.js +214 -214
  695. package/src/widgets/nav/Scroller.scss +146 -146
  696. package/src/widgets/nav/Submenu.d.ts +6 -6
  697. package/src/widgets/nav/Submenu.js +6 -6
  698. package/src/widgets/nav/Tab.d.ts +33 -33
  699. package/src/widgets/nav/Tab.js +82 -82
  700. package/src/widgets/nav/Tab.scss +81 -81
  701. package/src/widgets/nav/cover.scss +21 -21
  702. package/src/widgets/nav/index.d.ts +10 -10
  703. package/src/widgets/nav/index.js +10 -10
  704. package/src/widgets/nav/index.scss +5 -5
  705. package/src/widgets/nav/variables.scss +25 -25
  706. package/src/widgets/overlay/ContextMenu.d.ts +10 -10
  707. package/src/widgets/overlay/ContextMenu.js +29 -29
  708. package/src/widgets/overlay/Dropdown.d.ts +32 -32
  709. package/src/widgets/overlay/Dropdown.scss +184 -184
  710. package/src/widgets/overlay/FlyweightTooltipTracker.d.ts +8 -8
  711. package/src/widgets/overlay/MsgBox.d.ts +16 -16
  712. package/src/widgets/overlay/MsgBox.js +116 -116
  713. package/src/widgets/overlay/Overlay.d.ts +69 -69
  714. package/src/widgets/overlay/Overlay.js +747 -747
  715. package/src/widgets/overlay/Overlay.scss +66 -66
  716. package/src/widgets/overlay/Toast.d.ts +30 -30
  717. package/src/widgets/overlay/Toast.js +92 -92
  718. package/src/widgets/overlay/Toast.scss +162 -162
  719. package/src/widgets/overlay/Tooltip.d.ts +50 -50
  720. package/src/widgets/overlay/Tooltip.scss +175 -175
  721. package/src/widgets/overlay/Window.js +196 -196
  722. package/src/widgets/overlay/alerts.d.ts +7 -7
  723. package/src/widgets/overlay/alerts.js +39 -39
  724. package/src/widgets/overlay/captureMouse.d.ts +53 -53
  725. package/src/widgets/overlay/captureMouse.scss +13 -13
  726. package/src/widgets/overlay/index.d.ts +10 -10
  727. package/src/widgets/overlay/index.js +10 -10
  728. package/src/widgets/overlay/index.scss +15 -15
  729. package/src/widgets/overlay/variables.scss +83 -83
@@ -1,415 +1,415 @@
1
- import { Cx } from './Cx';
2
- import { VDOM } from './Widget';
3
- import { HtmlElement } from '../widgets/HtmlElement';
4
- import { Store } from '../data/Store';
5
- import { Controller } from './Controller';
6
-
7
- import renderer from 'react-test-renderer';
8
- import assert from 'assert';
9
-
10
- describe('Controller', () => {
11
-
12
- it('invokes lifetime methods', () => {
13
-
14
- let init = 0,
15
- prepare = 0,
16
- explore = 0,
17
- cleanup = 0;
18
-
19
- class TestController extends Controller {
20
- onInit() {
21
- init++;
22
- }
23
-
24
- onExplore() {
25
- explore++;
26
- }
27
-
28
- onPrepare() {
29
- prepare++;
30
- }
31
-
32
- onCleanup() {
33
- cleanup++;
34
- }
35
- }
36
-
37
- let widget = <cx>
38
- <div controller={TestController}/>
39
- </cx>;
40
-
41
- let store = new Store();
42
-
43
- const component = renderer.create(
44
- <Cx widget={widget} store={store} subscribe immediate/>
45
- );
46
-
47
- let tree = component.toJSON();
48
- assert.equal(init, 1);
49
- assert.equal(explore, 1);
50
- assert.equal(prepare, 1);
51
- assert.equal(cleanup, 1);
52
- });
53
-
54
- it('widgets invoke controller methods specified as strings', () => {
55
-
56
- let callback = 0;
57
-
58
- class TestController extends Controller {
59
- callback() {
60
- ++callback;
61
- }
62
- }
63
-
64
- class Cmp extends VDOM.Component {
65
- render() {
66
- return <div/>
67
- }
68
-
69
- componentDidMount() {
70
- this.props.instance.invoke("onTest");
71
- }
72
- }
73
-
74
- let store = new Store();
75
-
76
- const component = renderer.create(
77
- <Cx store={store} subscribe immediate>
78
- <Cmp controller={TestController} onTest="callback"/>
79
- </Cx>
80
- );
81
-
82
- let tree = component.toJSON();
83
- assert.equal(callback, 1);
84
- });
85
-
86
- it('widgets can access controller methods specified in ancestor controllers', () => {
87
-
88
- let callback1 = 0;
89
- let callback2 = 0;
90
-
91
- class TestController1 extends Controller {
92
- callback1() {
93
- ++callback1;
94
- }
95
- }
96
-
97
- class TestController2 extends Controller {
98
- callback2() {
99
- ++callback2;
100
- }
101
- }
102
-
103
- class Cmp extends VDOM.Component {
104
- render() {
105
- return <div/>
106
- }
107
-
108
- componentDidMount() {
109
- this.props.instance.invoke("onTest");
110
- }
111
- }
112
-
113
- let store = new Store();
114
-
115
- const component = renderer.create(
116
- <Cx store={store} subscribe immediate>
117
- <div controller={TestController1}>
118
- <Cmp controller={TestController2} onTest="callback1"/>
119
- </div>
120
- </Cx>
121
- );
122
-
123
- let tree = component.toJSON();
124
- assert.equal(callback1, 1);
125
- assert.equal(callback2, 0);
126
- });
127
-
128
- it('ancestor controllers are initialized first', () => {
129
-
130
- let order = [];
131
-
132
- class TestController1 extends Controller {
133
- onInit() {
134
- order.push("1");
135
- }
136
- }
137
-
138
- class TestController2 extends Controller {
139
- onInit() {
140
- order.push("2");
141
- }
142
- }
143
-
144
- let store = new Store();
145
-
146
- const component = renderer.create(
147
- <Cx store={store} subscribe immediate>
148
- <div controller={TestController1}>
149
- <div controller={TestController2}/>
150
- </div>
151
- </Cx>
152
- );
153
-
154
- let tree = component.toJSON();
155
- assert.deepEqual(order, ["1", "2"]);
156
- });
157
-
158
- it('controllers on invisible elements are not initialized', () => {
159
-
160
- let order = [];
161
-
162
- class TestController1 extends Controller {
163
- onInit() {
164
- order.push("1");
165
- }
166
- }
167
-
168
- class TestController2 extends Controller {
169
- onInit() {
170
- order.push("2");
171
- }
172
- }
173
-
174
- let store = new Store();
175
-
176
- const component = renderer.create(
177
- <Cx store={store} subscribe immediate>
178
- <div controller={TestController1}>
179
- <div visible={false} controller={TestController2}/>
180
- </div>
181
- </Cx>
182
- );
183
-
184
- let tree = component.toJSON();
185
- assert.deepEqual(order, ["1"]);
186
- });
187
-
188
- it('invokes triggers and computables in order of definition', () => {
189
- let log = [];
190
-
191
- class TestController extends Controller {
192
- onInit() {
193
- this.addTrigger('t1', [], () => {
194
- log.push('t1');
195
- }, true);
196
-
197
- this.addComputable('c1', [], () => {
198
- log.push('c1');
199
- return null;
200
- });
201
-
202
- this.addTrigger('t2', [], () => {
203
- log.push('t2');
204
- }, true)
205
- }
206
- }
207
-
208
- let widget = <cx>
209
- <div controller={TestController}/>
210
- </cx>;
211
-
212
- let store = new Store();
213
-
214
- const component = renderer.create(
215
- <Cx widget={widget} store={store} subscribe immediate/>
216
- );
217
-
218
- let tree = component.toJSON();
219
- assert.deepEqual(log, ["t1", "c1", "t2"]);
220
- });
221
-
222
- it('is recreated if a component is hidden and shown', () => {
223
- let initCount = 0;
224
-
225
- class TestController extends Controller {
226
- onInit() {
227
- initCount++;
228
- }
229
- }
230
-
231
- let store = new Store();
232
- store.set('visible', true);
233
-
234
- const component = renderer.create(
235
- <Cx store={store} subscribe immediate>
236
- <div visible:bind="visible" controller={TestController}/>
237
- </Cx>
238
- );
239
-
240
- let tree1 = component.toJSON();
241
- assert.equal(initCount, 1);
242
-
243
- store.set('visible', false);
244
- let tree2 = component.toJSON();
245
- assert.equal(tree2, null);
246
-
247
- store.set('visible', true);
248
- let tree3 = component.toJSON();
249
- assert.equal(initCount, 2);
250
- });
251
-
252
- it('allows creation through a factory', () => {
253
- let store = new Store({ data: { x: 0}});
254
-
255
- const controllerFactory = ({store}) => {
256
- return {
257
- increment() {
258
- store.update("x", x => x + 1);
259
- }
260
- }
261
- };
262
-
263
- let c = Controller.create(controllerFactory, {store});
264
-
265
- c.increment();
266
- assert.equal(store.get("x"), 1);
267
- });
268
-
269
- it('lifetime methods of a functional controller are properly invoked', () => {
270
- let initCount = 0,
271
- destroyCount = 0;
272
-
273
- const testController = () => ({
274
- onInit() {
275
- initCount++;
276
- },
277
-
278
- onDestroy() {
279
- destroyCount++;
280
- }
281
- });
282
-
283
- let store = new Store();
284
- store.set('visible', true);
285
-
286
- const component = renderer.create(
287
- <Cx store={store} subscribe immediate>
288
- <div visible:bind="visible" controller={testController}/>
289
- </Cx>
290
- );
291
-
292
- let tree1 = component.toJSON();
293
- assert.equal(initCount, 1);
294
-
295
- store.set('visible', false);
296
- let tree2 = component.toJSON();
297
- assert.equal(destroyCount, 1);
298
-
299
- store.set('visible', true);
300
- let tree3 = component.toJSON();
301
- assert.equal(initCount, 2);
302
- });
303
-
304
- it('widgets can easily define controller methods', () => {
305
- let store = new Store({ data: { x: 0}});
306
-
307
- const component = renderer.create(
308
- <Cx store={store} subscribe immediate>
309
- <div
310
- controller={{
311
- increment(count) {
312
- this.store.update("x", x => x + count);
313
- }
314
- }}
315
- >
316
- <div
317
- controller={{
318
- onInit() {
319
- this.invokeParentMethod("increment", 1);
320
- }
321
- }}
322
- />
323
- </div>
324
-
325
-
326
- </Cx>
327
- );
328
-
329
- let tree1 = component.toJSON();
330
- assert.equal(store.get("x"), 1);
331
- });
332
-
333
- it('functional controllers get store methods through configuration', () => {
334
- let store = new Store({ data: { x: 0}});
335
-
336
- const component = renderer.create(
337
- <Cx store={store} subscribe immediate>
338
- <div
339
- controller={({update}) => ({
340
- increment(count) {
341
- update("x", x => x + count);
342
- }
343
- })}
344
- >
345
- <div
346
- controller={{
347
- onInit() {
348
- this.invokeParentMethod("increment", 1);
349
- }
350
- }}
351
- />
352
- </div>
353
- </Cx>
354
- );
355
-
356
- let tree1 = component.toJSON();
357
- assert.equal(store.get("x"), 1);
358
- });
359
-
360
- it('addComputable accepts refs', () => {
361
- let store = new Store({data: {x: 0}});
362
-
363
- const component = renderer.create(
364
- <Cx store={store} subscribe immediate>
365
- <div
366
- controller={({ref}) => {
367
- let x = ref("x");
368
- return {
369
- onInit() {
370
- this.addComputable("y", [x], x => x + 1);
371
- }
372
- }
373
- }}
374
- />
375
- </Cx>
376
- );
377
-
378
- let tree1 = component.toJSON();
379
- assert.equal(store.get("y"), 1);
380
- });
381
-
382
- it('invokeParentMethod is invoked on parent instance', () => {
383
-
384
- let testValid = [];
385
-
386
- const TestController1 = {
387
- onInit() {
388
- this.test();
389
- },
390
- test() {
391
- testValid.push(1);
392
- this.invokeParentMethod('test', 2);
393
- }
394
- }
395
-
396
- const TestController2 = {
397
- test(val) {
398
- testValid.push(val)
399
- }
400
- }
401
-
402
- let store = new Store();
403
-
404
- const component = renderer.create(
405
- <Cx store={store} subscribe immediate>
406
- <div controller={TestController2}>
407
- <div controller={TestController1}/>
408
- </div>
409
- </Cx>
410
- );
411
-
412
- // let tree = component.toJSON();
413
- assert.deepStrictEqual(testValid, [1, 2]);
414
- });
1
+ import { Cx } from './Cx';
2
+ import { VDOM } from './Widget';
3
+ import { HtmlElement } from '../widgets/HtmlElement';
4
+ import { Store } from '../data/Store';
5
+ import { Controller } from './Controller';
6
+
7
+ import renderer from 'react-test-renderer';
8
+ import assert from 'assert';
9
+
10
+ describe('Controller', () => {
11
+
12
+ it('invokes lifetime methods', () => {
13
+
14
+ let init = 0,
15
+ prepare = 0,
16
+ explore = 0,
17
+ cleanup = 0;
18
+
19
+ class TestController extends Controller {
20
+ onInit() {
21
+ init++;
22
+ }
23
+
24
+ onExplore() {
25
+ explore++;
26
+ }
27
+
28
+ onPrepare() {
29
+ prepare++;
30
+ }
31
+
32
+ onCleanup() {
33
+ cleanup++;
34
+ }
35
+ }
36
+
37
+ let widget = <cx>
38
+ <div controller={TestController}/>
39
+ </cx>;
40
+
41
+ let store = new Store();
42
+
43
+ const component = renderer.create(
44
+ <Cx widget={widget} store={store} subscribe immediate/>
45
+ );
46
+
47
+ let tree = component.toJSON();
48
+ assert.equal(init, 1);
49
+ assert.equal(explore, 1);
50
+ assert.equal(prepare, 1);
51
+ assert.equal(cleanup, 1);
52
+ });
53
+
54
+ it('widgets invoke controller methods specified as strings', () => {
55
+
56
+ let callback = 0;
57
+
58
+ class TestController extends Controller {
59
+ callback() {
60
+ ++callback;
61
+ }
62
+ }
63
+
64
+ class Cmp extends VDOM.Component {
65
+ render() {
66
+ return <div/>
67
+ }
68
+
69
+ componentDidMount() {
70
+ this.props.instance.invoke("onTest");
71
+ }
72
+ }
73
+
74
+ let store = new Store();
75
+
76
+ const component = renderer.create(
77
+ <Cx store={store} subscribe immediate>
78
+ <Cmp controller={TestController} onTest="callback"/>
79
+ </Cx>
80
+ );
81
+
82
+ let tree = component.toJSON();
83
+ assert.equal(callback, 1);
84
+ });
85
+
86
+ it('widgets can access controller methods specified in ancestor controllers', () => {
87
+
88
+ let callback1 = 0;
89
+ let callback2 = 0;
90
+
91
+ class TestController1 extends Controller {
92
+ callback1() {
93
+ ++callback1;
94
+ }
95
+ }
96
+
97
+ class TestController2 extends Controller {
98
+ callback2() {
99
+ ++callback2;
100
+ }
101
+ }
102
+
103
+ class Cmp extends VDOM.Component {
104
+ render() {
105
+ return <div/>
106
+ }
107
+
108
+ componentDidMount() {
109
+ this.props.instance.invoke("onTest");
110
+ }
111
+ }
112
+
113
+ let store = new Store();
114
+
115
+ const component = renderer.create(
116
+ <Cx store={store} subscribe immediate>
117
+ <div controller={TestController1}>
118
+ <Cmp controller={TestController2} onTest="callback1"/>
119
+ </div>
120
+ </Cx>
121
+ );
122
+
123
+ let tree = component.toJSON();
124
+ assert.equal(callback1, 1);
125
+ assert.equal(callback2, 0);
126
+ });
127
+
128
+ it('ancestor controllers are initialized first', () => {
129
+
130
+ let order = [];
131
+
132
+ class TestController1 extends Controller {
133
+ onInit() {
134
+ order.push("1");
135
+ }
136
+ }
137
+
138
+ class TestController2 extends Controller {
139
+ onInit() {
140
+ order.push("2");
141
+ }
142
+ }
143
+
144
+ let store = new Store();
145
+
146
+ const component = renderer.create(
147
+ <Cx store={store} subscribe immediate>
148
+ <div controller={TestController1}>
149
+ <div controller={TestController2}/>
150
+ </div>
151
+ </Cx>
152
+ );
153
+
154
+ let tree = component.toJSON();
155
+ assert.deepEqual(order, ["1", "2"]);
156
+ });
157
+
158
+ it('controllers on invisible elements are not initialized', () => {
159
+
160
+ let order = [];
161
+
162
+ class TestController1 extends Controller {
163
+ onInit() {
164
+ order.push("1");
165
+ }
166
+ }
167
+
168
+ class TestController2 extends Controller {
169
+ onInit() {
170
+ order.push("2");
171
+ }
172
+ }
173
+
174
+ let store = new Store();
175
+
176
+ const component = renderer.create(
177
+ <Cx store={store} subscribe immediate>
178
+ <div controller={TestController1}>
179
+ <div visible={false} controller={TestController2}/>
180
+ </div>
181
+ </Cx>
182
+ );
183
+
184
+ let tree = component.toJSON();
185
+ assert.deepEqual(order, ["1"]);
186
+ });
187
+
188
+ it('invokes triggers and computables in order of definition', () => {
189
+ let log = [];
190
+
191
+ class TestController extends Controller {
192
+ onInit() {
193
+ this.addTrigger('t1', [], () => {
194
+ log.push('t1');
195
+ }, true);
196
+
197
+ this.addComputable('c1', [], () => {
198
+ log.push('c1');
199
+ return null;
200
+ });
201
+
202
+ this.addTrigger('t2', [], () => {
203
+ log.push('t2');
204
+ }, true)
205
+ }
206
+ }
207
+
208
+ let widget = <cx>
209
+ <div controller={TestController}/>
210
+ </cx>;
211
+
212
+ let store = new Store();
213
+
214
+ const component = renderer.create(
215
+ <Cx widget={widget} store={store} subscribe immediate/>
216
+ );
217
+
218
+ let tree = component.toJSON();
219
+ assert.deepEqual(log, ["t1", "c1", "t2"]);
220
+ });
221
+
222
+ it('is recreated if a component is hidden and shown', () => {
223
+ let initCount = 0;
224
+
225
+ class TestController extends Controller {
226
+ onInit() {
227
+ initCount++;
228
+ }
229
+ }
230
+
231
+ let store = new Store();
232
+ store.set('visible', true);
233
+
234
+ const component = renderer.create(
235
+ <Cx store={store} subscribe immediate>
236
+ <div visible:bind="visible" controller={TestController}/>
237
+ </Cx>
238
+ );
239
+
240
+ let tree1 = component.toJSON();
241
+ assert.equal(initCount, 1);
242
+
243
+ store.set('visible', false);
244
+ let tree2 = component.toJSON();
245
+ assert.equal(tree2, null);
246
+
247
+ store.set('visible', true);
248
+ let tree3 = component.toJSON();
249
+ assert.equal(initCount, 2);
250
+ });
251
+
252
+ it('allows creation through a factory', () => {
253
+ let store = new Store({ data: { x: 0}});
254
+
255
+ const controllerFactory = ({store}) => {
256
+ return {
257
+ increment() {
258
+ store.update("x", x => x + 1);
259
+ }
260
+ }
261
+ };
262
+
263
+ let c = Controller.create(controllerFactory, {store});
264
+
265
+ c.increment();
266
+ assert.equal(store.get("x"), 1);
267
+ });
268
+
269
+ it('lifetime methods of a functional controller are properly invoked', () => {
270
+ let initCount = 0,
271
+ destroyCount = 0;
272
+
273
+ const testController = () => ({
274
+ onInit() {
275
+ initCount++;
276
+ },
277
+
278
+ onDestroy() {
279
+ destroyCount++;
280
+ }
281
+ });
282
+
283
+ let store = new Store();
284
+ store.set('visible', true);
285
+
286
+ const component = renderer.create(
287
+ <Cx store={store} subscribe immediate>
288
+ <div visible:bind="visible" controller={testController}/>
289
+ </Cx>
290
+ );
291
+
292
+ let tree1 = component.toJSON();
293
+ assert.equal(initCount, 1);
294
+
295
+ store.set('visible', false);
296
+ let tree2 = component.toJSON();
297
+ assert.equal(destroyCount, 1);
298
+
299
+ store.set('visible', true);
300
+ let tree3 = component.toJSON();
301
+ assert.equal(initCount, 2);
302
+ });
303
+
304
+ it('widgets can easily define controller methods', () => {
305
+ let store = new Store({ data: { x: 0}});
306
+
307
+ const component = renderer.create(
308
+ <Cx store={store} subscribe immediate>
309
+ <div
310
+ controller={{
311
+ increment(count) {
312
+ this.store.update("x", x => x + count);
313
+ }
314
+ }}
315
+ >
316
+ <div
317
+ controller={{
318
+ onInit() {
319
+ this.invokeParentMethod("increment", 1);
320
+ }
321
+ }}
322
+ />
323
+ </div>
324
+
325
+
326
+ </Cx>
327
+ );
328
+
329
+ let tree1 = component.toJSON();
330
+ assert.equal(store.get("x"), 1);
331
+ });
332
+
333
+ it('functional controllers get store methods through configuration', () => {
334
+ let store = new Store({ data: { x: 0}});
335
+
336
+ const component = renderer.create(
337
+ <Cx store={store} subscribe immediate>
338
+ <div
339
+ controller={({update}) => ({
340
+ increment(count) {
341
+ update("x", x => x + count);
342
+ }
343
+ })}
344
+ >
345
+ <div
346
+ controller={{
347
+ onInit() {
348
+ this.invokeParentMethod("increment", 1);
349
+ }
350
+ }}
351
+ />
352
+ </div>
353
+ </Cx>
354
+ );
355
+
356
+ let tree1 = component.toJSON();
357
+ assert.equal(store.get("x"), 1);
358
+ });
359
+
360
+ it('addComputable accepts refs', () => {
361
+ let store = new Store({data: {x: 0}});
362
+
363
+ const component = renderer.create(
364
+ <Cx store={store} subscribe immediate>
365
+ <div
366
+ controller={({ref}) => {
367
+ let x = ref("x");
368
+ return {
369
+ onInit() {
370
+ this.addComputable("y", [x], x => x + 1);
371
+ }
372
+ }
373
+ }}
374
+ />
375
+ </Cx>
376
+ );
377
+
378
+ let tree1 = component.toJSON();
379
+ assert.equal(store.get("y"), 1);
380
+ });
381
+
382
+ it('invokeParentMethod is invoked on parent instance', () => {
383
+
384
+ let testValid = [];
385
+
386
+ const TestController1 = {
387
+ onInit() {
388
+ this.test();
389
+ },
390
+ test() {
391
+ testValid.push(1);
392
+ this.invokeParentMethod('test', 2);
393
+ }
394
+ }
395
+
396
+ const TestController2 = {
397
+ test(val) {
398
+ testValid.push(val)
399
+ }
400
+ }
401
+
402
+ let store = new Store();
403
+
404
+ const component = renderer.create(
405
+ <Cx store={store} subscribe immediate>
406
+ <div controller={TestController2}>
407
+ <div controller={TestController1}/>
408
+ </div>
409
+ </Cx>
410
+ );
411
+
412
+ // let tree = component.toJSON();
413
+ assert.deepStrictEqual(testValid, [1, 2]);
414
+ });
415
415
  });