cx 26.0.12 → 26.0.13

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 (363) 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.js +133 -133
  187. package/dist/data.js +2 -2
  188. package/dist/jsx-runtime.js +6 -1
  189. package/dist/manifest.d.ts +1443 -0
  190. package/dist/manifest.js +855 -807
  191. package/dist/ui.js +91 -5
  192. package/dist/util.js +3 -0
  193. package/dist/widgets.js +520 -161
  194. package/package.json +46 -20
  195. package/src/charts/Chart.ts +108 -108
  196. package/src/charts/ScatterGraph.tsx +6 -6
  197. package/src/data/ArrayElementView.ts +90 -90
  198. package/src/data/AugmentedViewBase.ts +88 -88
  199. package/src/data/Binding.ts +104 -104
  200. package/src/data/ExposedRecordView.ts +95 -95
  201. package/src/data/ExposedValueView.ts +89 -89
  202. package/src/data/Expression.spec.ts +229 -229
  203. package/src/data/Expression.ts +233 -233
  204. package/src/data/Grouper.spec.ts +57 -57
  205. package/src/data/Grouper.ts +158 -158
  206. package/src/data/NestedDataView.ts +43 -43
  207. package/src/data/ReadOnlyDataView.ts +39 -39
  208. package/src/data/Ref.ts +104 -104
  209. package/src/data/Selector.ts +10 -10
  210. package/src/data/Store.ts +52 -52
  211. package/src/data/StoreProxy.ts +19 -19
  212. package/src/data/StoreRef.ts +66 -66
  213. package/src/data/StringTemplate.spec.ts +132 -132
  214. package/src/data/StringTemplate.ts +93 -93
  215. package/src/data/StructuredSelector.spec.ts +113 -113
  216. package/src/data/StructuredSelector.ts +146 -146
  217. package/src/data/SubscribableView.ts +63 -63
  218. package/src/data/ZoomIntoPropertyView.spec.ts +64 -64
  219. package/src/data/ZoomIntoPropertyView.ts +45 -45
  220. package/src/data/computable.spec.ts +87 -62
  221. package/src/data/computable.ts +3 -6
  222. package/src/data/createAccessorModelProxy.spec.tsx +102 -1
  223. package/src/data/createAccessorModelProxy.ts +9 -3
  224. package/src/data/createStructuredSelector.ts +62 -62
  225. package/src/data/getAccessor.spec.ts +11 -11
  226. package/src/data/getAccessor.ts +74 -74
  227. package/src/data/getSelector.spec.ts +43 -43
  228. package/src/data/getSelector.ts +66 -66
  229. package/src/data/ops/filter.spec.ts +35 -35
  230. package/src/data/ops/filter.ts +9 -9
  231. package/src/data/ops/findTreeNode.ts +1 -5
  232. package/src/data/ops/findTreePath.ts +1 -1
  233. package/src/data/ops/merge.ts +13 -13
  234. package/src/data/ops/removeTreeNodes.spec.ts +37 -37
  235. package/src/data/ops/removeTreeNodes.ts +2 -2
  236. package/src/data/ops/updateArray.spec.ts +69 -69
  237. package/src/data/ops/updateArray.ts +31 -31
  238. package/src/data/ops/updateTree.ts +1 -1
  239. package/src/data/test-types.ts +7 -7
  240. package/src/hooks/resolveCallback.spec.tsx +30 -7
  241. package/src/hooks/useTrigger.ts +26 -26
  242. package/src/index.scss +6 -6
  243. package/src/jsx-dev-runtime.ts +4 -4
  244. package/src/jsx-runtime.spec.tsx +402 -0
  245. package/src/jsx-runtime.ts +26 -22
  246. package/src/svg/BoundedObject.ts +101 -101
  247. package/src/svg/util/Rect.ts +105 -105
  248. package/src/ui/CSSHelper.ts +17 -17
  249. package/src/ui/ContentResolver.spec.tsx +172 -19
  250. package/src/ui/ContentResolver.ts +16 -8
  251. package/src/ui/Controller.ts +15 -2
  252. package/src/ui/Culture.ts +159 -159
  253. package/src/ui/DataProxy.ts +55 -55
  254. package/src/ui/FocusManager.ts +171 -171
  255. package/src/ui/Instance.ts +866 -868
  256. package/src/ui/Prop.ts +140 -112
  257. package/src/ui/RenderingContext.ts +99 -99
  258. package/src/ui/Repeater.ts +3 -12
  259. package/src/ui/Rescope.ts +49 -49
  260. package/src/ui/StructuredInstanceDataAccessor.ts +32 -32
  261. package/src/ui/Text.ts +21 -2
  262. package/src/ui/VDOM.ts +34 -34
  263. package/src/ui/adapter/ArrayAdapter.spec.ts +55 -55
  264. package/src/ui/adapter/ArrayAdapter.ts +4 -1
  265. package/src/ui/adapter/TreeAdapter.spec.ts +76 -76
  266. package/src/ui/adapter/TreeAdapter.ts +185 -185
  267. package/src/ui/app/History.ts +133 -133
  268. package/src/ui/app/Url.spec.ts +50 -50
  269. package/src/ui/app/startHotAppLoop.ts +41 -41
  270. package/src/ui/createFunctionalComponent.spec.tsx +53 -0
  271. package/src/ui/createFunctionalComponent.ts +86 -65
  272. package/src/ui/expr.ts +4 -1
  273. package/src/ui/exprHelpers.spec.ts +379 -0
  274. package/src/ui/exprHelpers.ts +78 -0
  275. package/src/ui/index.ts +47 -46
  276. package/src/ui/layout/Content.ts +30 -30
  277. package/src/ui/layout/FirstVisibleChildLayout.spec.tsx +1 -1
  278. package/src/ui/layout/FirstVisibleChildLayout.ts +60 -60
  279. package/src/ui/selection/KeySelection.ts +153 -153
  280. package/src/ui/selection/Selection.ts +128 -128
  281. package/src/util/Console.ts +13 -11
  282. package/src/util/Format.ts +267 -267
  283. package/src/util/addEventListenerWithOptions.ts +41 -41
  284. package/src/util/browserSupportsPassiveEventHandlers.ts +20 -20
  285. package/src/util/color/rgbToHsl.ts +35 -35
  286. package/src/util/getActiveElement.ts +4 -4
  287. package/src/util/hasKey.ts +18 -18
  288. package/src/util/index.ts +55 -55
  289. package/src/util/innerTextTrim.ts +10 -10
  290. package/src/util/isArray.ts +3 -3
  291. package/src/util/isDataRecord.ts +5 -5
  292. package/src/util/isDefined.ts +3 -3
  293. package/src/util/isString.ts +3 -3
  294. package/src/widgets/AccessorBindings.spec.tsx +26 -0
  295. package/src/widgets/Button.tsx +5 -17
  296. package/src/widgets/DocumentTitle.ts +95 -92
  297. package/src/widgets/Heading.ts +2 -2
  298. package/src/widgets/HtmlElement.spec.helpers.tsx +108 -0
  299. package/src/widgets/HtmlElement.spec.tsx +20 -12
  300. package/src/widgets/HtmlElement.tsx +77 -23
  301. package/src/widgets/Icon.ts +3 -17
  302. package/src/widgets/List.tsx +6 -0
  303. package/src/widgets/ReactElementWrapper.spec.tsx +452 -0
  304. package/src/widgets/ReactElementWrapper.tsx +108 -0
  305. package/src/widgets/Sandbox.ts +103 -103
  306. package/src/widgets/autoFocus.ts +9 -9
  307. package/src/widgets/cx.ts +63 -63
  308. package/src/widgets/drag-drop/DragSource.tsx +3 -4
  309. package/src/widgets/drag-drop/DropZone.tsx +3 -4
  310. package/src/widgets/form/Checkbox.tsx +3 -0
  311. package/src/widgets/form/ColorField.tsx +3 -0
  312. package/src/widgets/form/DateTimeField.tsx +5 -0
  313. package/src/widgets/form/Field.tsx +0 -3
  314. package/src/widgets/form/Label.tsx +1 -0
  315. package/src/widgets/form/LabeledContainer.ts +22 -26
  316. package/src/widgets/form/LookupField.spec.tsx +93 -0
  317. package/src/widgets/form/LookupField.tsx +104 -9
  318. package/src/widgets/form/MonthField.tsx +5 -0
  319. package/src/widgets/form/NumberField.tsx +3 -0
  320. package/src/widgets/form/Radio.tsx +5 -0
  321. package/src/widgets/form/Select.tsx +5 -0
  322. package/src/widgets/form/Slider.tsx +4 -0
  323. package/src/widgets/form/Switch.tsx +3 -0
  324. package/src/widgets/form/TextField.tsx +62 -0
  325. package/src/widgets/form/TimeList.tsx +84 -73
  326. package/src/widgets/form/UploadButton.tsx +53 -2
  327. package/src/widgets/form/Validator.ts +40 -3
  328. package/src/widgets/grid/Grid.tsx +9 -12
  329. package/src/widgets/grid/GridCell.ts +143 -143
  330. package/src/widgets/grid/TreeNode.tsx +9 -0
  331. package/src/widgets/icons/calendar.tsx +17 -17
  332. package/src/widgets/icons/check.tsx +13 -13
  333. package/src/widgets/icons/clear.tsx +15 -15
  334. package/src/widgets/icons/close.tsx +20 -20
  335. package/src/widgets/icons/cx.tsx +38 -38
  336. package/src/widgets/icons/drop-down.tsx +15 -15
  337. package/src/widgets/icons/file.tsx +13 -13
  338. package/src/widgets/icons/folder-open.tsx +15 -15
  339. package/src/widgets/icons/folder.tsx +13 -13
  340. package/src/widgets/icons/forward.tsx +22 -22
  341. package/src/widgets/icons/loading.tsx +24 -24
  342. package/src/widgets/icons/menu.tsx +17 -17
  343. package/src/widgets/icons/pixel-picker.tsx +18 -18
  344. package/src/widgets/icons/search.tsx +13 -13
  345. package/src/widgets/icons/sort-asc.tsx +14 -14
  346. package/src/widgets/icons/square.tsx +18 -18
  347. package/src/widgets/index.ts +1 -0
  348. package/src/widgets/nav/MenuItem.tsx +3 -2
  349. package/src/widgets/nav/Route.ts +142 -142
  350. package/src/widgets/nav/Scroller.tsx +8 -9
  351. package/src/widgets/nav/Tab.ts +2 -2
  352. package/src/widgets/overlay/ContextMenu.ts +42 -42
  353. package/src/widgets/overlay/Dropdown.tsx +762 -762
  354. package/src/widgets/overlay/MsgBox.tsx +141 -141
  355. package/src/widgets/overlay/Overlay.tsx +5 -4
  356. package/src/widgets/overlay/Toast.ts +111 -111
  357. package/src/widgets/overlay/Window.tsx +299 -299
  358. package/src/widgets/overlay/alerts.ts +46 -46
  359. package/src/widgets/overlay/captureMouse.ts +195 -195
  360. package/src/widgets/overlay/createHotPromiseWindowFactory.ts +72 -72
  361. package/src/widgets/overlay/index.d.ts +11 -11
  362. package/src/widgets/overlay/index.ts +11 -11
  363. 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 {};