cx 26.0.12 → 26.0.14

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 (365) hide show
  1. package/build/charts/ScatterGraph.d.ts +4 -4
  2. package/build/charts/ScatterGraph.js +2 -2
  3. package/build/data/ArrayElementView.spec.d.ts +1 -0
  4. package/build/data/ArrayElementView.spec.js +81 -0
  5. package/build/data/Binding.spec.d.ts +1 -0
  6. package/build/data/Binding.spec.js +61 -0
  7. package/build/data/Expression.spec.d.ts +1 -0
  8. package/build/data/Expression.spec.js +196 -0
  9. package/build/data/Grouper.spec.d.ts +1 -0
  10. package/build/data/Grouper.spec.js +48 -0
  11. package/build/data/Ref.spec.d.ts +1 -0
  12. package/build/data/Ref.spec.js +72 -0
  13. package/build/data/Selector.d.ts +1 -1
  14. package/build/data/Store.spec.d.ts +1 -0
  15. package/build/data/Store.spec.js +19 -0
  16. package/build/data/StoreRef.spec.d.ts +1 -0
  17. package/build/data/StoreRef.spec.js +22 -0
  18. package/build/data/StringTemplate.spec.d.ts +1 -0
  19. package/build/data/StringTemplate.spec.js +112 -0
  20. package/build/data/StructuredSelector.spec.d.ts +1 -0
  21. package/build/data/StructuredSelector.spec.js +102 -0
  22. package/build/data/View.spec.d.ts +1 -0
  23. package/build/data/View.spec.js +44 -0
  24. package/build/data/ZoomIntoPropertyView.spec.d.ts +1 -0
  25. package/build/data/ZoomIntoPropertyView.spec.js +54 -0
  26. package/build/data/comparer.spec.d.ts +1 -0
  27. package/build/data/comparer.spec.js +50 -0
  28. package/build/data/computable.d.ts +3 -6
  29. package/build/data/computable.spec.d.ts +1 -0
  30. package/build/data/computable.spec.js +56 -0
  31. package/build/data/createAccessorModelProxy.d.ts +5 -3
  32. package/build/data/createAccessorModelProxy.spec.d.ts +1 -0
  33. package/build/data/createAccessorModelProxy.spec.js +30 -0
  34. package/build/data/createStructuredSelector.spec.d.ts +1 -0
  35. package/build/data/createStructuredSelector.spec.js +42 -0
  36. package/build/data/diff/diffs.spec.d.ts +1 -0
  37. package/build/data/diff/diffs.spec.js +45 -0
  38. package/build/data/getAccessor.spec.d.ts +1 -0
  39. package/build/data/getAccessor.spec.js +10 -0
  40. package/build/data/getSelector.spec.d.ts +1 -0
  41. package/build/data/getSelector.spec.js +36 -0
  42. package/build/data/ops/append.spec.d.ts +1 -0
  43. package/build/data/ops/append.spec.js +24 -0
  44. package/build/data/ops/filter.spec.d.ts +1 -0
  45. package/build/data/ops/filter.spec.js +25 -0
  46. package/build/data/ops/findTreeNode.d.ts +1 -1
  47. package/build/data/ops/findTreeNode.js +1 -1
  48. package/build/data/ops/findTreeNode.spec.d.ts +1 -0
  49. package/build/data/ops/findTreeNode.spec.js +20 -0
  50. package/build/data/ops/findTreePath.d.ts +1 -1
  51. package/build/data/ops/merge.spec.d.ts +1 -0
  52. package/build/data/ops/merge.spec.js +23 -0
  53. package/build/data/ops/removeTreeNodes.d.ts +1 -1
  54. package/build/data/ops/removeTreeNodes.js +1 -1
  55. package/build/data/ops/removeTreeNodes.spec.d.ts +1 -0
  56. package/build/data/ops/removeTreeNodes.spec.js +35 -0
  57. package/build/data/ops/updateArray.spec.d.ts +1 -0
  58. package/build/data/ops/updateArray.spec.js +33 -0
  59. package/build/data/ops/updateTree.d.ts +1 -1
  60. package/build/data/ops/updateTree.spec.d.ts +1 -0
  61. package/build/data/ops/updateTree.spec.js +44 -0
  62. package/build/hooks/invokeCallback.spec.d.ts +1 -0
  63. package/build/hooks/invokeCallback.spec.js +44 -0
  64. package/build/hooks/resolveCallback.spec.d.ts +1 -0
  65. package/build/hooks/resolveCallback.spec.js +35 -0
  66. package/build/hooks/store.spec.d.ts +1 -0
  67. package/build/hooks/store.spec.js +48 -0
  68. package/build/hooks/useTrigger.spec.d.ts +1 -0
  69. package/build/hooks/useTrigger.spec.js +59 -0
  70. package/build/jsx-runtime.d.ts +10 -10
  71. package/build/jsx-runtime.js +6 -0
  72. package/build/svg/util/Rect.d.ts +1 -1
  73. package/build/ui/ContentResolver.d.ts +16 -6
  74. package/build/ui/Controller.d.ts +7 -0
  75. package/build/ui/Controller.js +2 -1
  76. package/build/ui/Controller.spec.d.ts +1 -0
  77. package/build/ui/Controller.spec.js +247 -0
  78. package/build/ui/Cx.spec.d.ts +1 -0
  79. package/build/ui/Cx.spec.js +153 -0
  80. package/build/ui/DataProxy.spec.d.ts +1 -0
  81. package/build/ui/DataProxy.spec.js +208 -0
  82. package/build/ui/Instance.d.ts +1 -1
  83. package/build/ui/Instance.js +10 -10
  84. package/build/ui/IsolatedScope.spec.d.ts +1 -0
  85. package/build/ui/IsolatedScope.spec.js +42 -0
  86. package/build/ui/Prop.d.ts +12 -1
  87. package/build/ui/PureContainer.spec.d.ts +1 -0
  88. package/build/ui/PureContainer.spec.js +149 -0
  89. package/build/ui/Repeater.d.ts +3 -3
  90. package/build/ui/Repeater.spec.d.ts +1 -0
  91. package/build/ui/Repeater.spec.js +109 -0
  92. package/build/ui/Rescope.spec.d.ts +1 -0
  93. package/build/ui/Rescope.spec.js +134 -0
  94. package/build/ui/Restate.spec.d.ts +1 -0
  95. package/build/ui/Restate.spec.js +257 -0
  96. package/build/ui/Text.d.ts +14 -2
  97. package/build/ui/Text.js +3 -0
  98. package/build/ui/adapter/ArrayAdapter.js +4 -1
  99. package/build/ui/adapter/ArrayAdapter.spec.d.ts +1 -0
  100. package/build/ui/adapter/ArrayAdapter.spec.js +44 -0
  101. package/build/ui/adapter/TreeAdapter.spec.d.ts +1 -0
  102. package/build/ui/adapter/TreeAdapter.spec.js +71 -0
  103. package/build/ui/app/Url.spec.d.ts +1 -0
  104. package/build/ui/app/Url.spec.js +43 -0
  105. package/build/ui/app/startHotAppLoop.js +1 -1
  106. package/build/ui/createFunctionalComponent.d.ts +14 -1
  107. package/build/ui/createFunctionalComponent.js +7 -4
  108. package/build/ui/createFunctionalComponent.spec.d.ts +1 -0
  109. package/build/ui/createFunctionalComponent.spec.js +272 -0
  110. package/build/ui/expr.d.ts +3 -1
  111. package/build/ui/exprHelpers.d.ts +32 -0
  112. package/build/ui/exprHelpers.js +61 -0
  113. package/build/ui/index.d.ts +1 -0
  114. package/build/ui/index.js +1 -0
  115. package/build/ui/layout/ContentPlaceholder.spec.d.ts +1 -0
  116. package/build/ui/layout/ContentPlaceholder.spec.js +333 -0
  117. package/build/ui/layout/FirstVisibleChildLayout.spec.d.ts +1 -0
  118. package/build/ui/layout/FirstVisibleChildLayout.spec.js +101 -0
  119. package/build/util/Console.d.ts +1 -0
  120. package/build/util/Console.js +7 -3
  121. package/build/util/Format.spec.d.ts +1 -0
  122. package/build/util/Format.spec.js +58 -0
  123. package/build/util/TraversalStack.spec.d.ts +1 -0
  124. package/build/util/TraversalStack.spec.js +43 -0
  125. package/build/util/date/upperBoundCheck.spec.d.ts +1 -0
  126. package/build/util/date/upperBoundCheck.spec.js +22 -0
  127. package/build/util/getSearchQueryPredicate.spec.d.ts +1 -0
  128. package/build/util/getSearchQueryPredicate.spec.js +33 -0
  129. package/build/util/isValidIdentifierName.spec.d.ts +1 -0
  130. package/build/util/isValidIdentifierName.spec.js +28 -0
  131. package/build/util/routeAppend.spec.d.ts +1 -0
  132. package/build/util/routeAppend.spec.js +14 -0
  133. package/build/widgets/AccessorBindings.spec.d.ts +1 -0
  134. package/build/widgets/AccessorBindings.spec.js +40 -0
  135. package/build/widgets/Button.d.ts +3 -6
  136. package/build/widgets/Button.js +1 -1
  137. package/build/widgets/DocumentTitle.d.ts +2 -0
  138. package/build/widgets/Heading.d.ts +2 -2
  139. package/build/widgets/HtmlElement.d.ts +31 -8
  140. package/build/widgets/HtmlElement.js +7 -9
  141. package/build/widgets/HtmlElement.spec.d.ts +1 -0
  142. package/build/widgets/HtmlElement.spec.js +38 -0
  143. package/build/widgets/Icon.d.ts +3 -13
  144. package/build/widgets/List.d.ts +4 -0
  145. package/build/widgets/ReactElementWrapper.d.ts +29 -0
  146. package/build/widgets/ReactElementWrapper.js +59 -0
  147. package/build/widgets/drag-drop/DragSource.d.ts +3 -3
  148. package/build/widgets/drag-drop/DragSource.js +2 -3
  149. package/build/widgets/drag-drop/DropZone.d.ts +3 -3
  150. package/build/widgets/drag-drop/DropZone.js +2 -3
  151. package/build/widgets/form/Checkbox.d.ts +2 -0
  152. package/build/widgets/form/ColorField.d.ts +2 -0
  153. package/build/widgets/form/DateTimeField.d.ts +2 -0
  154. package/build/widgets/form/Field.d.ts +0 -2
  155. package/build/widgets/form/LabeledContainer.d.ts +9 -8
  156. package/build/widgets/form/LabeledContainer.js +9 -9
  157. package/build/widgets/form/LookupField.d.ts +57 -9
  158. package/build/widgets/form/MonthField.d.ts +2 -0
  159. package/build/widgets/form/NumberField.d.ts +2 -0
  160. package/build/widgets/form/Radio.d.ts +2 -0
  161. package/build/widgets/form/Select.d.ts +2 -0
  162. package/build/widgets/form/Slider.d.ts +3 -0
  163. package/build/widgets/form/Switch.d.ts +2 -0
  164. package/build/widgets/form/TextField.d.ts +34 -0
  165. package/build/widgets/form/TimeList.d.ts +16 -1
  166. package/build/widgets/form/TimeList.js +34 -62
  167. package/build/widgets/form/UploadButton.d.ts +34 -2
  168. package/build/widgets/form/UploadButton.js +3 -1
  169. package/build/widgets/form/ValidationGroup.spec.d.ts +1 -0
  170. package/build/widgets/form/ValidationGroup.spec.js +62 -0
  171. package/build/widgets/form/Validator.d.ts +33 -2
  172. package/build/widgets/form/Validator.js +3 -0
  173. package/build/widgets/grid/Grid.d.ts +9 -9
  174. package/build/widgets/grid/TreeNode.d.ts +6 -0
  175. package/build/widgets/index.d.ts +1 -0
  176. package/build/widgets/index.js +1 -0
  177. package/build/widgets/nav/MenuItem.d.ts +3 -2
  178. package/build/widgets/nav/Route.spec.d.ts +1 -0
  179. package/build/widgets/nav/Route.spec.js +15 -0
  180. package/build/widgets/nav/Scroller.d.ts +4 -6
  181. package/build/widgets/nav/Scroller.js +6 -3
  182. package/build/widgets/nav/Tab.d.ts +2 -2
  183. package/build/widgets/overlay/ContextMenu.d.ts +3 -3
  184. package/build/widgets/overlay/Overlay.d.ts +2 -1
  185. package/build/widgets/overlay/Overlay.js +1 -1
  186. package/build/widgets/overlay/createHotPromiseWindowFactory.js +0 -1
  187. package/build.js +133 -133
  188. package/dist/data.js +2 -2
  189. package/dist/jsx-runtime.js +6 -1
  190. package/dist/manifest.d.ts +1443 -0
  191. package/dist/manifest.js +761 -713
  192. package/dist/ui.js +91 -5
  193. package/dist/util.js +3 -0
  194. package/dist/widgets.js +520 -162
  195. package/package.json +46 -20
  196. package/src/charts/Chart.ts +108 -108
  197. package/src/charts/ScatterGraph.tsx +6 -6
  198. package/src/data/ArrayElementView.ts +90 -90
  199. package/src/data/AugmentedViewBase.ts +88 -88
  200. package/src/data/Binding.ts +104 -104
  201. package/src/data/ExposedRecordView.ts +95 -95
  202. package/src/data/ExposedValueView.ts +89 -89
  203. package/src/data/Expression.spec.ts +229 -229
  204. package/src/data/Expression.ts +233 -233
  205. package/src/data/Grouper.spec.ts +57 -57
  206. package/src/data/Grouper.ts +158 -158
  207. package/src/data/NestedDataView.ts +43 -43
  208. package/src/data/ReadOnlyDataView.ts +39 -39
  209. package/src/data/Ref.ts +104 -104
  210. package/src/data/Selector.ts +10 -10
  211. package/src/data/Store.ts +52 -52
  212. package/src/data/StoreProxy.ts +19 -19
  213. package/src/data/StoreRef.ts +66 -66
  214. package/src/data/StringTemplate.spec.ts +132 -132
  215. package/src/data/StringTemplate.ts +93 -93
  216. package/src/data/StructuredSelector.spec.ts +113 -113
  217. package/src/data/StructuredSelector.ts +146 -146
  218. package/src/data/SubscribableView.ts +63 -63
  219. package/src/data/ZoomIntoPropertyView.spec.ts +64 -64
  220. package/src/data/ZoomIntoPropertyView.ts +45 -45
  221. package/src/data/computable.spec.ts +87 -62
  222. package/src/data/computable.ts +3 -6
  223. package/src/data/createAccessorModelProxy.spec.tsx +102 -1
  224. package/src/data/createAccessorModelProxy.ts +9 -3
  225. package/src/data/createStructuredSelector.ts +62 -62
  226. package/src/data/getAccessor.spec.ts +11 -11
  227. package/src/data/getAccessor.ts +74 -74
  228. package/src/data/getSelector.spec.ts +43 -43
  229. package/src/data/getSelector.ts +66 -66
  230. package/src/data/ops/filter.spec.ts +35 -35
  231. package/src/data/ops/filter.ts +9 -9
  232. package/src/data/ops/findTreeNode.ts +1 -5
  233. package/src/data/ops/findTreePath.ts +1 -1
  234. package/src/data/ops/merge.ts +13 -13
  235. package/src/data/ops/removeTreeNodes.spec.ts +37 -37
  236. package/src/data/ops/removeTreeNodes.ts +2 -2
  237. package/src/data/ops/updateArray.spec.ts +69 -69
  238. package/src/data/ops/updateArray.ts +31 -31
  239. package/src/data/ops/updateTree.ts +1 -1
  240. package/src/data/test-types.ts +7 -7
  241. package/src/hooks/resolveCallback.spec.tsx +30 -7
  242. package/src/hooks/useTrigger.ts +26 -26
  243. package/src/index.scss +6 -6
  244. package/src/jsx-dev-runtime.ts +4 -4
  245. package/src/jsx-runtime.spec.tsx +431 -0
  246. package/src/jsx-runtime.ts +26 -22
  247. package/src/svg/BoundedObject.ts +101 -101
  248. package/src/svg/util/Rect.ts +105 -105
  249. package/src/ui/CSSHelper.ts +17 -17
  250. package/src/ui/ContentResolver.spec.tsx +172 -19
  251. package/src/ui/ContentResolver.ts +16 -8
  252. package/src/ui/Controller.ts +15 -2
  253. package/src/ui/Culture.ts +159 -159
  254. package/src/ui/DataProxy.ts +55 -55
  255. package/src/ui/FocusManager.ts +171 -171
  256. package/src/ui/Instance.ts +866 -868
  257. package/src/ui/Prop.ts +140 -112
  258. package/src/ui/RenderingContext.ts +99 -99
  259. package/src/ui/Repeater.ts +3 -12
  260. package/src/ui/Rescope.ts +49 -49
  261. package/src/ui/StructuredInstanceDataAccessor.ts +32 -32
  262. package/src/ui/Text.ts +21 -2
  263. package/src/ui/VDOM.ts +34 -34
  264. package/src/ui/adapter/ArrayAdapter.spec.ts +55 -55
  265. package/src/ui/adapter/ArrayAdapter.ts +4 -1
  266. package/src/ui/adapter/TreeAdapter.spec.ts +76 -76
  267. package/src/ui/adapter/TreeAdapter.ts +185 -185
  268. package/src/ui/app/History.ts +133 -133
  269. package/src/ui/app/Url.spec.ts +50 -50
  270. package/src/ui/app/startHotAppLoop.ts +41 -41
  271. package/src/ui/createFunctionalComponent.spec.tsx +53 -0
  272. package/src/ui/createFunctionalComponent.ts +86 -65
  273. package/src/ui/expr.ts +4 -1
  274. package/src/ui/exprHelpers.spec.ts +379 -0
  275. package/src/ui/exprHelpers.ts +78 -0
  276. package/src/ui/index.ts +47 -46
  277. package/src/ui/layout/Content.ts +30 -30
  278. package/src/ui/layout/FirstVisibleChildLayout.spec.tsx +1 -1
  279. package/src/ui/layout/FirstVisibleChildLayout.ts +60 -60
  280. package/src/ui/selection/KeySelection.ts +153 -153
  281. package/src/ui/selection/Selection.ts +128 -128
  282. package/src/util/Console.ts +13 -11
  283. package/src/util/Format.spec.ts +41 -41
  284. package/src/util/Format.ts +267 -267
  285. package/src/util/addEventListenerWithOptions.ts +41 -41
  286. package/src/util/browserSupportsPassiveEventHandlers.ts +20 -20
  287. package/src/util/color/rgbToHsl.ts +35 -35
  288. package/src/util/getActiveElement.ts +4 -4
  289. package/src/util/hasKey.ts +18 -18
  290. package/src/util/index.ts +55 -55
  291. package/src/util/innerTextTrim.ts +10 -10
  292. package/src/util/isArray.ts +3 -3
  293. package/src/util/isDataRecord.ts +5 -5
  294. package/src/util/isDefined.ts +3 -3
  295. package/src/util/isString.ts +3 -3
  296. package/src/widgets/AccessorBindings.spec.tsx +26 -0
  297. package/src/widgets/Button.tsx +5 -17
  298. package/src/widgets/DocumentTitle.ts +95 -92
  299. package/src/widgets/Heading.ts +2 -2
  300. package/src/widgets/HtmlElement.spec.helpers.tsx +108 -0
  301. package/src/widgets/HtmlElement.spec.tsx +20 -12
  302. package/src/widgets/HtmlElement.tsx +77 -23
  303. package/src/widgets/Icon.ts +3 -17
  304. package/src/widgets/List.tsx +6 -0
  305. package/src/widgets/ReactElementWrapper.spec.tsx +452 -0
  306. package/src/widgets/ReactElementWrapper.tsx +108 -0
  307. package/src/widgets/Sandbox.ts +103 -103
  308. package/src/widgets/autoFocus.ts +9 -9
  309. package/src/widgets/cx.ts +63 -63
  310. package/src/widgets/drag-drop/DragSource.tsx +3 -4
  311. package/src/widgets/drag-drop/DropZone.tsx +3 -4
  312. package/src/widgets/form/Checkbox.tsx +3 -0
  313. package/src/widgets/form/ColorField.tsx +3 -0
  314. package/src/widgets/form/DateTimeField.tsx +5 -0
  315. package/src/widgets/form/Field.tsx +0 -3
  316. package/src/widgets/form/Label.tsx +1 -0
  317. package/src/widgets/form/LabeledContainer.ts +22 -26
  318. package/src/widgets/form/LookupField.spec.tsx +93 -0
  319. package/src/widgets/form/LookupField.tsx +104 -9
  320. package/src/widgets/form/MonthField.tsx +5 -0
  321. package/src/widgets/form/NumberField.tsx +3 -0
  322. package/src/widgets/form/Radio.tsx +5 -0
  323. package/src/widgets/form/Select.tsx +5 -0
  324. package/src/widgets/form/Slider.tsx +4 -0
  325. package/src/widgets/form/Switch.tsx +3 -0
  326. package/src/widgets/form/TextField.tsx +62 -0
  327. package/src/widgets/form/TimeList.tsx +84 -73
  328. package/src/widgets/form/UploadButton.tsx +53 -2
  329. package/src/widgets/form/Validator.ts +40 -3
  330. package/src/widgets/grid/Grid.tsx +9 -12
  331. package/src/widgets/grid/GridCell.ts +143 -143
  332. package/src/widgets/grid/TreeNode.tsx +9 -0
  333. package/src/widgets/icons/calendar.tsx +17 -17
  334. package/src/widgets/icons/check.tsx +13 -13
  335. package/src/widgets/icons/clear.tsx +15 -15
  336. package/src/widgets/icons/close.tsx +20 -20
  337. package/src/widgets/icons/cx.tsx +38 -38
  338. package/src/widgets/icons/drop-down.tsx +15 -15
  339. package/src/widgets/icons/file.tsx +13 -13
  340. package/src/widgets/icons/folder-open.tsx +15 -15
  341. package/src/widgets/icons/folder.tsx +13 -13
  342. package/src/widgets/icons/forward.tsx +22 -22
  343. package/src/widgets/icons/loading.tsx +24 -24
  344. package/src/widgets/icons/menu.tsx +17 -17
  345. package/src/widgets/icons/pixel-picker.tsx +18 -18
  346. package/src/widgets/icons/search.tsx +13 -13
  347. package/src/widgets/icons/sort-asc.tsx +14 -14
  348. package/src/widgets/icons/square.tsx +18 -18
  349. package/src/widgets/index.ts +1 -0
  350. package/src/widgets/nav/MenuItem.tsx +3 -2
  351. package/src/widgets/nav/Route.ts +142 -142
  352. package/src/widgets/nav/Scroller.tsx +8 -9
  353. package/src/widgets/nav/Tab.ts +2 -2
  354. package/src/widgets/overlay/ContextMenu.ts +42 -42
  355. package/src/widgets/overlay/Dropdown.tsx +762 -762
  356. package/src/widgets/overlay/MsgBox.tsx +141 -141
  357. package/src/widgets/overlay/Overlay.tsx +5 -4
  358. package/src/widgets/overlay/Toast.ts +111 -111
  359. package/src/widgets/overlay/Window.tsx +299 -299
  360. package/src/widgets/overlay/alerts.ts +46 -46
  361. package/src/widgets/overlay/captureMouse.ts +195 -195
  362. package/src/widgets/overlay/createHotPromiseWindowFactory.ts +0 -1
  363. package/src/widgets/overlay/index.d.ts +11 -11
  364. package/src/widgets/overlay/index.ts +11 -11
  365. package/src/widgets/overlay/tooltip-ops.ts +173 -173
@@ -1,11 +1,11 @@
1
1
  /** @jsxImportSource react */
2
- import { Widget, WidgetConfig } from "../ui/Widget";
3
- import { Selection } from "../ui/selection/Selection";
4
2
  import { Instance } from "../ui/Instance";
3
+ import { BooleanProp, NumberProp, RecordsProp, StringProp } from "../ui/Prop";
5
4
  import { RenderingContext } from "../ui/RenderingContext";
6
- import { BooleanProp, NumberProp, StringProp, RecordsProp } from "../ui/Prop";
5
+ import { Widget, WidgetConfig, WidgetStyleConfig } from "../ui/Widget";
6
+ import { Selection } from "../ui/selection/Selection";
7
7
  import type { ChartRenderingContext } from "./Chart";
8
- export interface ScatterGraphConfig extends WidgetConfig {
8
+ export interface ScatterGraphConfig extends WidgetConfig, WidgetStyleConfig {
9
9
  /** Data for the graph. Each entry should be an object with at least two properties
10
10
  * whose names should match the `xField` and `yField` values.
11
11
  */
@@ -1,10 +1,10 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  /** @jsxImportSource react */
3
+ import { CSS } from "../ui/CSS";
3
4
  import { Widget } from "../ui/Widget";
4
5
  import { Selection } from "../ui/selection/Selection";
5
- import { CSS } from "../ui/CSS";
6
- import { getShape } from "./shapes";
7
6
  import { isArray } from "../util/isArray";
7
+ import { getShape } from "./shapes";
8
8
  export class ScatterGraph extends Widget {
9
9
  constructor(config) {
10
10
  super(config);
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,81 @@
1
+ //@ts-nocheck
2
+ import assert from "assert";
3
+ import { ArrayElementView } from "./ArrayElementView";
4
+ import { getAccessor } from "./getAccessor";
5
+ import { Store } from "./Store";
6
+ describe("ArrayElementView", function () {
7
+ it("exposes the element as under the $record alias", function () {
8
+ let letters = [{ letter: "A" }, { letter: "B" }];
9
+ let store = new Store({ data: { letters } });
10
+ let elementView = new ArrayElementView({ store, itemIndex: 1, arrayAccessor: getAccessor({ bind: "letters" }) });
11
+ let record = elementView.get("$record");
12
+ assert.equal(record, letters[1]);
13
+ });
14
+ it("changes of the $record are propagated", function () {
15
+ let letters = [{ letter: "A" }, { letter: "B" }];
16
+ let store = new Store({ data: { letters } });
17
+ let elementView = new ArrayElementView({ store, itemIndex: 1, arrayAccessor: getAccessor({ bind: "letters" }) });
18
+ elementView.set("$record.letter", "C");
19
+ assert.deepEqual(store.get("letters"), [letters[0], { letter: "C" }]);
20
+ });
21
+ it("removes the element if the $record is deleted", function () {
22
+ let letters = [{ letter: "A" }, { letter: "B" }];
23
+ let store = new Store({ data: { letters } });
24
+ let elementView = new ArrayElementView({ store, itemIndex: 1, arrayAccessor: getAccessor({ bind: "letters" }) });
25
+ elementView.delete("$record");
26
+ assert.deepEqual(store.get("letters"), [letters[0]]);
27
+ });
28
+ it("exposes the element as under the given alias", function () {
29
+ let letters = [{ letter: "A" }, { letter: "B" }];
30
+ let store = new Store({ data: { letters } });
31
+ let elementView = new ArrayElementView({
32
+ store,
33
+ itemIndex: 1,
34
+ arrayAccessor: getAccessor({ bind: "letters" }),
35
+ recordAlias: "$letter",
36
+ });
37
+ let record = elementView.get("$letter");
38
+ assert.equal(record, letters[1]);
39
+ });
40
+ it("aliases allow nesting", function () {
41
+ let letters = [{ letter: "A" }, { letter: "B" }];
42
+ let store = new Store({ data: { letters } });
43
+ let elementView = new ArrayElementView({
44
+ store,
45
+ itemIndex: 1,
46
+ arrayAccessor: getAccessor({ bind: "letters" }),
47
+ recordAlias: "$iter.letter",
48
+ indexAlias: "$iter.index.letter",
49
+ });
50
+ let record = elementView.get("$iter.letter");
51
+ assert.equal(record, letters[1]);
52
+ assert.equal(elementView.get("$iter.index.letter"), 1);
53
+ elementView.set("$iter.letter.letter", "C");
54
+ assert.equal(store.get("letters.1.letter"), "C");
55
+ });
56
+ it("when immutable preserves the parent data object", function () {
57
+ let letters = [{ letter: "A" }, { letter: "B" }];
58
+ let store = new Store({ data: { letters } });
59
+ let elementView = new ArrayElementView({
60
+ store,
61
+ itemIndex: 1,
62
+ arrayAccessor: getAccessor({ bind: "letters" }),
63
+ immutable: true,
64
+ });
65
+ let record = elementView.get("$record");
66
+ assert.equal(record, letters[1]);
67
+ assert(!store.getData().hasOwnProperty("$record"));
68
+ });
69
+ it("respects the parent's store sealed flag", function () {
70
+ let letters = [{ letter: "A" }, { letter: "B" }];
71
+ let store = new Store({ data: { letters }, sealed: true });
72
+ let elementView = new ArrayElementView({
73
+ store,
74
+ itemIndex: 1,
75
+ arrayAccessor: getAccessor({ bind: "letters" }),
76
+ });
77
+ let record = elementView.get("$record");
78
+ assert.equal(record, letters[1]);
79
+ assert(!store.getData().hasOwnProperty("$record"));
80
+ });
81
+ });
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,61 @@
1
+ import { Binding } from "./Binding";
2
+ import assert from "assert";
3
+ import { createAccessorModelProxy } from "./createAccessorModelProxy";
4
+ describe("Binding", function () {
5
+ describe("#get()", function () {
6
+ it("should get value if value is defined", function () {
7
+ var state = { person: { name: "Joe" } };
8
+ var b = Binding.get("person.name");
9
+ assert.equal(b.value(state), "Joe");
10
+ });
11
+ it("allows non-standard property identifiers", function () {
12
+ var state = { person: { "@schema": "Person" } };
13
+ var b = Binding.get("person.@schema");
14
+ assert.equal(b.path, "person.@schema");
15
+ assert.equal(b.value(state), "Person");
16
+ });
17
+ it("properly resolves accessor models", function () {
18
+ var state = { person: { schema: "Person" } };
19
+ var b = Binding.get(createAccessorModelProxy("person.schema"));
20
+ assert.equal(b.value(state), "Person");
21
+ });
22
+ });
23
+ describe("#set()", function () {
24
+ it("produces new objects along the binding path", function () {
25
+ var state = { person: { name: "Joe" } };
26
+ var b = Binding.get("person.name");
27
+ var ns = b.set(state, "Jack");
28
+ assert.equal(ns.person.name, "Jack");
29
+ assert.notEqual(state, ns);
30
+ assert.notEqual(state.person, ns.person);
31
+ assert.notEqual(state.person.name, ns.person.name);
32
+ });
33
+ it("returns same state object if value does not change", function () {
34
+ var state = { person: { name: "Joe" } };
35
+ var b = Binding.get("person.name");
36
+ var ns = b.set(state, "Joe");
37
+ assert.equal(state, ns);
38
+ });
39
+ it("allows non-standard property identifiers", function () {
40
+ var state = { person: { "@schema": "Person" } };
41
+ var b = Binding.get("person.@schema");
42
+ var ns = b.set(state, "Test");
43
+ assert.equal(ns.person["@schema"], "Test");
44
+ });
45
+ });
46
+ describe(".delete()", function () {
47
+ it("correctly removes pointed properties", function () {
48
+ var state = { person: { name: "Joe" } };
49
+ var b = Binding.get("person.name");
50
+ var ns = b.delete(state);
51
+ assert("person" in ns);
52
+ assert(!("name" in ns.person));
53
+ });
54
+ it("does not change state if property is non-existent", function () {
55
+ var state = { person: { name: "Joe" } };
56
+ var b = Binding.get("person.name2");
57
+ var ns = b.delete(state);
58
+ assert(ns == state);
59
+ });
60
+ });
61
+ });
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,196 @@
1
+ import { Expression } from "./Expression";
2
+ import assert from "assert";
3
+ import { StringTemplate } from "./StringTemplate";
4
+ describe("Expression", function () {
5
+ describe("#compile()", function () {
6
+ it("returns a selector", function () {
7
+ let e = Expression.compile("{person.name}");
8
+ let state = {
9
+ person: {
10
+ name: "Jim",
11
+ },
12
+ };
13
+ assert.equal(e(state), "Jim");
14
+ });
15
+ it("ignores bindings in strings", function () {
16
+ let e = Expression.compile('"{person.name}"');
17
+ let state = {
18
+ person: {
19
+ name: "Jim",
20
+ },
21
+ };
22
+ assert.equal(e(state), "{person.name}");
23
+ });
24
+ it("allows mixed curly braces in strings", () => {
25
+ let e = Expression.compile('"Hello {" + "person.name}"');
26
+ assert.equal(e({}), "Hello {person.name}");
27
+ });
28
+ it("properly encodes quotes #1", function () {
29
+ let e = Expression.compile('"\'"');
30
+ let state = {};
31
+ assert.equal(e(state), "'");
32
+ });
33
+ it("properly encodes quotes #2", function () {
34
+ let e = Expression.compile('"\\""');
35
+ let state = {};
36
+ assert.equal(e(state), '"');
37
+ });
38
+ it("properly encodes quotes #3", function () {
39
+ let e = Expression.compile('"\\\\\\""');
40
+ let state = {};
41
+ assert.equal(e(state), '\\"');
42
+ });
43
+ it("properly encodes quotes #4", function () {
44
+ let e = Expression.compile('"\\\\"');
45
+ let state = {};
46
+ assert.equal(e(state), "\\");
47
+ });
48
+ });
49
+ describe("allow subexpressions", function () {
50
+ it("in square brackets", function () {
51
+ let e = Expression.compile("{[{person.name}]}");
52
+ let state = {
53
+ person: {
54
+ name: "Jim",
55
+ },
56
+ };
57
+ assert.equal(e(state), "Jim");
58
+ });
59
+ it("in square brackets", function () {
60
+ let e = Expression.compile("{[{person.alias} || {person.name}]}");
61
+ let state = {
62
+ person: {
63
+ name: "Jim",
64
+ alias: "J",
65
+ },
66
+ };
67
+ assert.equal(e(state), "J");
68
+ });
69
+ it("prefixed with % sign", function () {
70
+ let e = Expression.compile("%{1+1}");
71
+ assert.equal(e({}), "2");
72
+ });
73
+ it("can be formatted", function () {
74
+ let e = Expression.compile("{[1+1]:f;2}");
75
+ assert.equal(e({}), "2.00");
76
+ });
77
+ it("n level deep", function () {
78
+ let e = Expression.compile("{[{[{[1+1]}]}]:f;2}");
79
+ assert.equal(e({}), "2.00");
80
+ });
81
+ it("with complex math inside", function () {
82
+ let e = Expression.compile("%{{data}.reduce((a,b)=>a+b, 0):f;2}");
83
+ let state = {
84
+ data: [1, 2, 3],
85
+ };
86
+ assert.equal(e(state), "6.00");
87
+ });
88
+ it("with a conditional operator inside", function () {
89
+ let e = Expression.compile('{[true ? "T" : "F"]}');
90
+ assert.equal(e({}), "T");
91
+ });
92
+ it("with string interpolation inside", function () {
93
+ let e = Expression.compile("{[`${{test}}`]}");
94
+ assert.equal(e({ test: "T" }), "T");
95
+ });
96
+ });
97
+ describe("are working", function () {
98
+ it("function expressions with get", function () {
99
+ let e = Expression.get((get) => get("a") + get("b"));
100
+ assert.equal(e({ a: 1, b: 2 }), 3);
101
+ });
102
+ it("are properly memoized", function () {
103
+ let inv = 0;
104
+ let e = Expression.get((get) => {
105
+ inv++;
106
+ return get("a") + get("b");
107
+ }).memoize();
108
+ assert.equal(e({ a: 1, b: 1 }), 2);
109
+ assert.equal(inv, 1);
110
+ assert.equal(e({ a: 1, b: 1 }), 2);
111
+ assert.equal(inv, 1);
112
+ assert.equal(e({ a: 1, b: 2 }), 3);
113
+ assert.equal(inv, 2);
114
+ assert.equal(e({ a: 1, b: 2 }), 3);
115
+ assert.equal(inv, 2);
116
+ assert.equal(e({ a: 2, b: 2 }), 4);
117
+ assert.equal(inv, 3);
118
+ });
119
+ it("formatting can be used inside bindings", function () {
120
+ let e = Expression.get((get) => get("name:prefix;Hello "));
121
+ assert(e({ name: "CxJS" }), "Hello CxJS");
122
+ });
123
+ it("allows using the fmt function inside", function () {
124
+ let e = Expression.compile('{[fmt({text}, "prefix;Hello ")]}');
125
+ assert.equal(e({ text: "CxJS" }), "Hello CxJS");
126
+ });
127
+ it("allows using dashes inside names", function () {
128
+ let e = Expression.compile("{framework-name}");
129
+ assert.equal(e({ "framework-name": "CxJS" }), "CxJS");
130
+ });
131
+ it("allows using spaces and other characters inside names", function () {
132
+ let e = Expression.compile("{1nv@lid js ident1fier}");
133
+ assert.equal(e({ "1nv@lid js ident1fier": "CxJS" }), "CxJS");
134
+ });
135
+ it("allows strings in subexpressions", () => {
136
+ let e = Expression.compile("{['1']}");
137
+ assert.equal(e({}), "1");
138
+ let e2 = Expression.compile('%{"1"}');
139
+ assert.equal(e({}), "1");
140
+ });
141
+ it("allows string templates in nested expressions", () => {
142
+ Expression.registerHelper("tpl", StringTemplate.format);
143
+ let e = Expression.compile("tpl('{0:n;2} {1:p;2:wrap;(;)}', {value}, {percentage})");
144
+ assert.equal(e({ value: 1, percentage: 0.02 }), "1.00 (2.00%)");
145
+ let e2 = Expression.compile("{[tpl('{0:n;2} {1:p;2:wrap;(;)}', {value}, {percentage})]}");
146
+ assert.equal(e2({ value: 1, percentage: 0.02 }), "1.00 (2.00%)");
147
+ // we're going to need a better parser for this
148
+ // let e3 = Expression.compile("%{tpl('{0:n;2} {1:p;2:wrap;(;)}', {value}, {percentage})}");
149
+ // assert.equal(e3({ value: 1, percentage: 0.02 }), "1.00 (2.00%)");
150
+ });
151
+ it("string templates can be in the data", () => {
152
+ Expression.registerHelper("tpl", StringTemplate.format);
153
+ let e = Expression.compile("tpl({template}, {value}, {percentage})");
154
+ assert.equal(e({ value: 1, percentage: 0.02, template: "{0:n;2} {1:p;2:wrap;(;)}" }), "1.00 (2.00%)");
155
+ });
156
+ // it('are properly memoized with proxies', function () {
157
+ // let inv = 0;
158
+ // let e = Expression.get(d => { inv++; return d.a + d.b}).memoize();
159
+ //
160
+ // assert.equal(e({ a: 1, b: 1 }), 2);
161
+ // assert.equal(inv, 1);
162
+ //
163
+ // assert.equal(e({ a: 1, b: 1 }), 2);
164
+ // assert.equal(inv, 1);
165
+ //
166
+ // assert.equal(e({ a: 1, b: 2 }), 3);
167
+ // assert.equal(inv, 2);
168
+ //
169
+ // assert.equal(e({ a: 1, b: 2 }), 3);
170
+ // assert.equal(inv, 2);
171
+ //
172
+ // assert.equal(e({ a: 2, b: 2 }), 4);
173
+ // assert.equal(inv, 3);
174
+ // });
175
+ //
176
+ // it('are properly memoized with proxies and deep data', function () {
177
+ // let inv = 0;
178
+ // let e = Expression.get(d => { inv++; return d.v.a + d.v.b}).memoize();
179
+ //
180
+ // assert.equal(e({ v: { a: 1, b: 1 }}), 2);
181
+ // assert.equal(inv, 1);
182
+ //
183
+ // assert.equal(e({ v: { a: 1, b: 1 }}), 2);
184
+ // assert.equal(inv, 1);
185
+ //
186
+ // assert.equal(e({ v: { a: 1, b: 2 }}), 3);
187
+ // assert.equal(inv, 2);
188
+ //
189
+ // assert.equal(e({ v: { a: 1, b: 2 }}), 3);
190
+ // assert.equal(inv, 2);
191
+ //
192
+ // assert.equal(e({ v: { a: 2, b: 2 }}), 4);
193
+ // assert.equal(inv, 3);
194
+ // });
195
+ });
196
+ });
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,48 @@
1
+ import { Grouper } from "./Grouper";
2
+ import assert from "assert";
3
+ describe("Grouper", function () {
4
+ describe("single grouping", function () {
5
+ it("should work", function () {
6
+ let data = [
7
+ { name: "John", age: 12 },
8
+ { name: "Jane", age: 12 },
9
+ ];
10
+ let grouper = new Grouper({ name: { bind: "name" } });
11
+ grouper.processAll(data);
12
+ let results = grouper.getResults();
13
+ // console.log(results);
14
+ assert.equal(results.length, 2);
15
+ });
16
+ it("keys can have nested properties", function () {
17
+ let data = [
18
+ { name: "John", age: 12 },
19
+ { name: "Jane", age: 12 },
20
+ ];
21
+ let grouper = new Grouper({ "person.name": { bind: "name" } });
22
+ grouper.processAll(data);
23
+ let results = grouper.getResults();
24
+ assert.equal(results.length, 2);
25
+ assert.equal(results[0].key.person?.name, "John");
26
+ assert.equal(results[1].key.person?.name, "Jane");
27
+ });
28
+ });
29
+ describe("multi grouping", function () {
30
+ it("should work", function () {
31
+ let data = [
32
+ { name: "John", age: 12 },
33
+ { name: "John", age: 12 },
34
+ { name: "John", age: 13 },
35
+ { name: "John", age: 14 },
36
+ { name: "Jane", age: 12 },
37
+ { name: "Jane", age: 13 },
38
+ { name: "Jane", age: 14 },
39
+ ];
40
+ let grouper = new Grouper({ name: { bind: "name" }, age: { bind: "age" } });
41
+ grouper.processAll(data);
42
+ let results = grouper.getResults();
43
+ // console.log(results);
44
+ assert.equal(results.length, 6);
45
+ assert.equal(results[0].records.length, 2);
46
+ });
47
+ });
48
+ });
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,72 @@
1
+ //@ts-nocheck
2
+ import assert from "assert";
3
+ import { Store } from "./Store";
4
+ import { Ref } from "./Ref";
5
+ import { append } from "./ops/append";
6
+ import { StoreRef } from "./StoreRef";
7
+ const getStore = () => {
8
+ return new Store({
9
+ data: {
10
+ a: 3,
11
+ item: {
12
+ firstName: "Jack",
13
+ },
14
+ array: [],
15
+ },
16
+ });
17
+ };
18
+ describe("Ref", () => {
19
+ it("can init data", () => {
20
+ let store = getStore();
21
+ let b = store.ref("b", 1);
22
+ assert.equal(store.get("b"), 1);
23
+ });
24
+ it("can set data", () => {
25
+ let store = getStore();
26
+ let b = store.ref("b", 1);
27
+ b.set(2);
28
+ assert.equal(store.get("b"), 2);
29
+ });
30
+ it("can delete data", () => {
31
+ let store = getStore();
32
+ let b = store.ref("item");
33
+ b.delete();
34
+ assert.equal(store.get("item"), undefined);
35
+ });
36
+ it("can cast itself to a ref of another type", () => {
37
+ class ArrayRef extends StoreRef {
38
+ append(...args) {
39
+ this.update(append, ...args);
40
+ }
41
+ }
42
+ let store = getStore();
43
+ let array = store.ref("array").as(ArrayRef);
44
+ array.append(1, 2, 3);
45
+ assert.deepEqual(array.get(), [1, 2, 3]);
46
+ });
47
+ it("can extend itself in a functional way", () => {
48
+ let store = getStore();
49
+ let array = store.ref("array").as(({ update, set, path }) => ({
50
+ append(...args) {
51
+ update(path, append, ...args);
52
+ },
53
+ clear() {
54
+ set(path, []);
55
+ },
56
+ }));
57
+ array.append(1, 2, 3);
58
+ assert.deepEqual(array.get(), [1, 2, 3]);
59
+ array.clear();
60
+ assert.deepEqual(array.get(), []);
61
+ });
62
+ it("can get subrefs", () => {
63
+ let store = getStore();
64
+ let person = new Ref({
65
+ get: () => store.get("person"),
66
+ set: (value) => store.set("person", value),
67
+ });
68
+ let name = person.ref("name");
69
+ name.set("John");
70
+ assert.equal(name.get(), "John");
71
+ });
72
+ });
@@ -5,4 +5,4 @@ export interface Selector<T = any> {
5
5
  export interface CanMemoize<T = any> {
6
6
  memoize(warmupData?: unknown): Selector<T>;
7
7
  }
8
- export type MemoSelector<T = any> = Selector<T> & CanMemoize<Selector<T>>;
8
+ export type MemoSelector<T = any> = Selector<T> & CanMemoize<T>;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,19 @@
1
+ import assert from 'assert';
2
+ import { Store } from './Store';
3
+ describe('Store', () => {
4
+ const getStore = () => {
5
+ return new Store({
6
+ data: {
7
+ a: 3,
8
+ item: {
9
+ firstName: 'Jack'
10
+ }
11
+ }
12
+ });
13
+ };
14
+ it('changes version on each update', () => {
15
+ let store = getStore();
16
+ store.set('a', 4);
17
+ assert.equal(store.getMeta().version, 1);
18
+ });
19
+ });
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,22 @@
1
+ //@ts-nocheck
2
+ import assert from "assert";
3
+ import { Store } from "./Store";
4
+ const getStore = () => {
5
+ return new Store({
6
+ data: {
7
+ person: {
8
+ name: "Jack",
9
+ },
10
+ },
11
+ });
12
+ };
13
+ describe("StoreRef", () => {
14
+ it("can access child refs", () => {
15
+ let store = getStore();
16
+ let person = store.ref("person");
17
+ let name = person.ref("name");
18
+ assert.equal(name.get("person"), "Jack");
19
+ name.set("John");
20
+ assert.equal(name.get("person"), "John");
21
+ });
22
+ });
@@ -0,0 +1 @@
1
+ export {};