cx 26.0.11 → 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 (366) 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/ui/selection/KeySelection.d.ts +0 -8
  120. package/build/ui/selection/Selection.d.ts +9 -3
  121. package/build/util/Console.d.ts +1 -0
  122. package/build/util/Console.js +7 -3
  123. package/build/util/Format.spec.d.ts +1 -0
  124. package/build/util/Format.spec.js +58 -0
  125. package/build/util/TraversalStack.spec.d.ts +1 -0
  126. package/build/util/TraversalStack.spec.js +43 -0
  127. package/build/util/date/upperBoundCheck.spec.d.ts +1 -0
  128. package/build/util/date/upperBoundCheck.spec.js +22 -0
  129. package/build/util/getSearchQueryPredicate.spec.d.ts +1 -0
  130. package/build/util/getSearchQueryPredicate.spec.js +33 -0
  131. package/build/util/isValidIdentifierName.spec.d.ts +1 -0
  132. package/build/util/isValidIdentifierName.spec.js +28 -0
  133. package/build/util/routeAppend.spec.d.ts +1 -0
  134. package/build/util/routeAppend.spec.js +14 -0
  135. package/build/widgets/AccessorBindings.spec.d.ts +1 -0
  136. package/build/widgets/AccessorBindings.spec.js +40 -0
  137. package/build/widgets/Button.d.ts +3 -6
  138. package/build/widgets/Button.js +1 -1
  139. package/build/widgets/DocumentTitle.d.ts +2 -0
  140. package/build/widgets/Heading.d.ts +2 -2
  141. package/build/widgets/HtmlElement.d.ts +33 -8
  142. package/build/widgets/HtmlElement.js +7 -9
  143. package/build/widgets/HtmlElement.spec.d.ts +1 -0
  144. package/build/widgets/HtmlElement.spec.js +38 -0
  145. package/build/widgets/Icon.d.ts +3 -13
  146. package/build/widgets/List.d.ts +4 -0
  147. package/build/widgets/ReactElementWrapper.d.ts +29 -0
  148. package/build/widgets/ReactElementWrapper.js +59 -0
  149. package/build/widgets/drag-drop/DragSource.d.ts +3 -3
  150. package/build/widgets/drag-drop/DragSource.js +2 -3
  151. package/build/widgets/drag-drop/DropZone.d.ts +3 -3
  152. package/build/widgets/drag-drop/DropZone.js +2 -3
  153. package/build/widgets/form/Checkbox.d.ts +2 -0
  154. package/build/widgets/form/ColorField.d.ts +2 -0
  155. package/build/widgets/form/DateTimeField.d.ts +2 -0
  156. package/build/widgets/form/Field.d.ts +0 -2
  157. package/build/widgets/form/LabeledContainer.d.ts +9 -8
  158. package/build/widgets/form/LabeledContainer.js +9 -9
  159. package/build/widgets/form/LookupField.d.ts +57 -9
  160. package/build/widgets/form/MonthField.d.ts +2 -0
  161. package/build/widgets/form/NumberField.d.ts +2 -0
  162. package/build/widgets/form/Radio.d.ts +2 -0
  163. package/build/widgets/form/Select.d.ts +2 -0
  164. package/build/widgets/form/Slider.d.ts +3 -0
  165. package/build/widgets/form/Switch.d.ts +2 -0
  166. package/build/widgets/form/TextField.d.ts +34 -0
  167. package/build/widgets/form/TimeList.d.ts +16 -1
  168. package/build/widgets/form/TimeList.js +34 -62
  169. package/build/widgets/form/UploadButton.d.ts +34 -2
  170. package/build/widgets/form/UploadButton.js +3 -1
  171. package/build/widgets/form/ValidationGroup.spec.d.ts +1 -0
  172. package/build/widgets/form/ValidationGroup.spec.js +62 -0
  173. package/build/widgets/form/Validator.d.ts +33 -2
  174. package/build/widgets/form/Validator.js +3 -0
  175. package/build/widgets/grid/Grid.d.ts +9 -9
  176. package/build/widgets/grid/TreeNode.d.ts +6 -0
  177. package/build/widgets/index.d.ts +1 -0
  178. package/build/widgets/index.js +1 -0
  179. package/build/widgets/nav/MenuItem.d.ts +3 -2
  180. package/build/widgets/nav/Route.spec.d.ts +1 -0
  181. package/build/widgets/nav/Route.spec.js +15 -0
  182. package/build/widgets/nav/Scroller.d.ts +4 -6
  183. package/build/widgets/nav/Scroller.js +6 -3
  184. package/build/widgets/nav/Tab.d.ts +2 -2
  185. package/build/widgets/overlay/ContextMenu.d.ts +3 -3
  186. package/build/widgets/overlay/Overlay.d.ts +2 -1
  187. package/build/widgets/overlay/Overlay.js +1 -1
  188. package/build.js +133 -133
  189. package/dist/data.js +2 -2
  190. package/dist/jsx-runtime.js +6 -1
  191. package/dist/manifest.d.ts +1443 -0
  192. package/dist/manifest.js +852 -804
  193. package/dist/ui.js +91 -5
  194. package/dist/util.js +3 -0
  195. package/dist/widgets.js +520 -161
  196. package/package.json +46 -20
  197. package/src/charts/Chart.ts +108 -108
  198. package/src/charts/ScatterGraph.tsx +6 -6
  199. package/src/data/ArrayElementView.ts +90 -90
  200. package/src/data/AugmentedViewBase.ts +88 -88
  201. package/src/data/Binding.ts +104 -104
  202. package/src/data/ExposedRecordView.ts +95 -95
  203. package/src/data/ExposedValueView.ts +89 -89
  204. package/src/data/Expression.spec.ts +229 -229
  205. package/src/data/Expression.ts +233 -233
  206. package/src/data/Grouper.spec.ts +57 -57
  207. package/src/data/Grouper.ts +158 -158
  208. package/src/data/NestedDataView.ts +43 -43
  209. package/src/data/ReadOnlyDataView.ts +39 -39
  210. package/src/data/Ref.ts +104 -104
  211. package/src/data/Selector.ts +10 -10
  212. package/src/data/Store.ts +52 -52
  213. package/src/data/StoreProxy.ts +19 -19
  214. package/src/data/StoreRef.ts +66 -66
  215. package/src/data/StringTemplate.spec.ts +132 -132
  216. package/src/data/StringTemplate.ts +93 -93
  217. package/src/data/StructuredSelector.spec.ts +113 -113
  218. package/src/data/StructuredSelector.ts +146 -146
  219. package/src/data/SubscribableView.ts +63 -63
  220. package/src/data/ZoomIntoPropertyView.spec.ts +64 -64
  221. package/src/data/ZoomIntoPropertyView.ts +45 -45
  222. package/src/data/computable.spec.ts +87 -62
  223. package/src/data/computable.ts +3 -6
  224. package/src/data/createAccessorModelProxy.spec.tsx +102 -1
  225. package/src/data/createAccessorModelProxy.ts +9 -3
  226. package/src/data/createStructuredSelector.ts +62 -62
  227. package/src/data/getAccessor.spec.ts +11 -11
  228. package/src/data/getAccessor.ts +74 -74
  229. package/src/data/getSelector.spec.ts +43 -43
  230. package/src/data/getSelector.ts +66 -66
  231. package/src/data/ops/filter.spec.ts +35 -35
  232. package/src/data/ops/filter.ts +9 -9
  233. package/src/data/ops/findTreeNode.ts +1 -5
  234. package/src/data/ops/findTreePath.ts +1 -1
  235. package/src/data/ops/merge.ts +13 -13
  236. package/src/data/ops/removeTreeNodes.spec.ts +37 -37
  237. package/src/data/ops/removeTreeNodes.ts +2 -2
  238. package/src/data/ops/updateArray.spec.ts +69 -69
  239. package/src/data/ops/updateArray.ts +31 -31
  240. package/src/data/ops/updateTree.ts +1 -1
  241. package/src/data/test-types.ts +7 -7
  242. package/src/hooks/resolveCallback.spec.tsx +30 -7
  243. package/src/hooks/useTrigger.ts +26 -26
  244. package/src/index.scss +6 -6
  245. package/src/jsx-dev-runtime.ts +4 -4
  246. package/src/jsx-runtime.spec.tsx +402 -0
  247. package/src/jsx-runtime.ts +26 -22
  248. package/src/svg/BoundedObject.ts +101 -101
  249. package/src/svg/util/Rect.ts +105 -105
  250. package/src/ui/CSSHelper.ts +17 -17
  251. package/src/ui/ContentResolver.spec.tsx +172 -19
  252. package/src/ui/ContentResolver.ts +16 -8
  253. package/src/ui/Controller.ts +15 -2
  254. package/src/ui/Culture.ts +159 -159
  255. package/src/ui/DataProxy.ts +55 -55
  256. package/src/ui/FocusManager.ts +171 -171
  257. package/src/ui/Instance.ts +866 -868
  258. package/src/ui/Prop.ts +140 -112
  259. package/src/ui/RenderingContext.ts +99 -99
  260. package/src/ui/Repeater.ts +3 -12
  261. package/src/ui/Rescope.ts +49 -49
  262. package/src/ui/StructuredInstanceDataAccessor.ts +32 -32
  263. package/src/ui/Text.ts +21 -2
  264. package/src/ui/VDOM.ts +34 -34
  265. package/src/ui/adapter/ArrayAdapter.spec.ts +55 -55
  266. package/src/ui/adapter/ArrayAdapter.ts +4 -1
  267. package/src/ui/adapter/TreeAdapter.spec.ts +76 -76
  268. package/src/ui/adapter/TreeAdapter.ts +185 -185
  269. package/src/ui/app/History.ts +133 -133
  270. package/src/ui/app/Url.spec.ts +50 -50
  271. package/src/ui/app/startHotAppLoop.ts +41 -41
  272. package/src/ui/createFunctionalComponent.spec.tsx +53 -0
  273. package/src/ui/createFunctionalComponent.ts +86 -65
  274. package/src/ui/expr.ts +4 -1
  275. package/src/ui/exprHelpers.spec.ts +379 -0
  276. package/src/ui/exprHelpers.ts +78 -0
  277. package/src/ui/index.ts +47 -46
  278. package/src/ui/layout/Content.ts +30 -30
  279. package/src/ui/layout/FirstVisibleChildLayout.spec.tsx +1 -1
  280. package/src/ui/layout/FirstVisibleChildLayout.ts +60 -60
  281. package/src/ui/selection/KeySelection.ts +0 -12
  282. package/src/ui/selection/PropertySelection.ts +87 -87
  283. package/src/ui/selection/Selection.ts +13 -3
  284. package/src/util/Console.ts +13 -11
  285. package/src/util/Format.ts +267 -267
  286. package/src/util/addEventListenerWithOptions.ts +41 -41
  287. package/src/util/browserSupportsPassiveEventHandlers.ts +20 -20
  288. package/src/util/color/rgbToHsl.ts +35 -35
  289. package/src/util/getActiveElement.ts +4 -4
  290. package/src/util/hasKey.ts +18 -18
  291. package/src/util/index.ts +55 -55
  292. package/src/util/innerTextTrim.ts +10 -10
  293. package/src/util/isArray.ts +3 -3
  294. package/src/util/isDataRecord.ts +5 -5
  295. package/src/util/isDefined.ts +3 -3
  296. package/src/util/isString.ts +3 -3
  297. package/src/widgets/AccessorBindings.spec.tsx +26 -0
  298. package/src/widgets/Button.tsx +5 -17
  299. package/src/widgets/DocumentTitle.ts +95 -92
  300. package/src/widgets/Heading.ts +2 -2
  301. package/src/widgets/HtmlElement.spec.helpers.tsx +108 -0
  302. package/src/widgets/HtmlElement.spec.tsx +20 -12
  303. package/src/widgets/HtmlElement.tsx +82 -24
  304. package/src/widgets/Icon.ts +3 -17
  305. package/src/widgets/List.tsx +6 -0
  306. package/src/widgets/ReactElementWrapper.spec.tsx +452 -0
  307. package/src/widgets/ReactElementWrapper.tsx +108 -0
  308. package/src/widgets/Sandbox.ts +103 -103
  309. package/src/widgets/autoFocus.ts +9 -9
  310. package/src/widgets/cx.ts +63 -63
  311. package/src/widgets/drag-drop/DragSource.tsx +3 -4
  312. package/src/widgets/drag-drop/DropZone.tsx +3 -4
  313. package/src/widgets/form/Checkbox.tsx +3 -0
  314. package/src/widgets/form/ColorField.tsx +3 -0
  315. package/src/widgets/form/DateTimeField.tsx +5 -0
  316. package/src/widgets/form/Field.tsx +0 -3
  317. package/src/widgets/form/Label.tsx +1 -0
  318. package/src/widgets/form/LabeledContainer.ts +22 -26
  319. package/src/widgets/form/LookupField.spec.tsx +93 -0
  320. package/src/widgets/form/LookupField.tsx +104 -9
  321. package/src/widgets/form/MonthField.tsx +5 -0
  322. package/src/widgets/form/NumberField.tsx +3 -0
  323. package/src/widgets/form/Radio.tsx +5 -0
  324. package/src/widgets/form/Select.tsx +5 -0
  325. package/src/widgets/form/Slider.tsx +4 -0
  326. package/src/widgets/form/Switch.tsx +3 -0
  327. package/src/widgets/form/TextField.tsx +62 -0
  328. package/src/widgets/form/TimeList.tsx +84 -73
  329. package/src/widgets/form/UploadButton.tsx +53 -2
  330. package/src/widgets/form/Validator.ts +40 -3
  331. package/src/widgets/grid/Grid.tsx +9 -12
  332. package/src/widgets/grid/GridCell.ts +143 -143
  333. package/src/widgets/grid/TreeNode.tsx +9 -0
  334. package/src/widgets/icons/calendar.tsx +17 -17
  335. package/src/widgets/icons/check.tsx +13 -13
  336. package/src/widgets/icons/clear.tsx +15 -15
  337. package/src/widgets/icons/close.tsx +20 -20
  338. package/src/widgets/icons/cx.tsx +38 -38
  339. package/src/widgets/icons/drop-down.tsx +15 -15
  340. package/src/widgets/icons/file.tsx +13 -13
  341. package/src/widgets/icons/folder-open.tsx +15 -15
  342. package/src/widgets/icons/folder.tsx +13 -13
  343. package/src/widgets/icons/forward.tsx +22 -22
  344. package/src/widgets/icons/loading.tsx +24 -24
  345. package/src/widgets/icons/menu.tsx +17 -17
  346. package/src/widgets/icons/pixel-picker.tsx +18 -18
  347. package/src/widgets/icons/search.tsx +13 -13
  348. package/src/widgets/icons/sort-asc.tsx +14 -14
  349. package/src/widgets/icons/square.tsx +18 -18
  350. package/src/widgets/index.ts +1 -0
  351. package/src/widgets/nav/MenuItem.tsx +3 -2
  352. package/src/widgets/nav/Route.ts +142 -142
  353. package/src/widgets/nav/Scroller.tsx +8 -9
  354. package/src/widgets/nav/Tab.ts +2 -2
  355. package/src/widgets/overlay/ContextMenu.ts +42 -42
  356. package/src/widgets/overlay/Dropdown.tsx +762 -762
  357. package/src/widgets/overlay/MsgBox.tsx +141 -141
  358. package/src/widgets/overlay/Overlay.tsx +5 -4
  359. package/src/widgets/overlay/Toast.ts +111 -111
  360. package/src/widgets/overlay/Window.tsx +299 -299
  361. package/src/widgets/overlay/alerts.ts +46 -46
  362. package/src/widgets/overlay/captureMouse.ts +195 -195
  363. package/src/widgets/overlay/createHotPromiseWindowFactory.ts +72 -72
  364. package/src/widgets/overlay/index.d.ts +11 -11
  365. package/src/widgets/overlay/index.ts +11 -11
  366. package/src/widgets/overlay/tooltip-ops.ts +173 -173
@@ -1,36 +1,36 @@
1
- /**
2
- *
3
- * @param r
4
- * @param g
5
- * @param b
6
- * @returns {array}
7
- */
8
- export function rgbToHsl(r: number, g: number, b: number): [number, number, number] {
9
- r /= 255;
10
- g /= 255;
11
- b /= 255;
12
- let max = Math.max(r, g, b), min = Math.min(r, g, b);
13
- let h: number, s: number, l = (max + min) / 2;
14
-
15
- if (max == min) {
16
- h = s = 0; // achromatic
17
- } else {
18
- let d = max - min;
19
- s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
20
- switch (max) {
21
- case r:
22
- h = (g - b) / d + (g < b ? 6 : 0);
23
- break;
24
- case g:
25
- h = (b - r) / d + 2;
26
- break;
27
- case b:
28
- default:
29
- h = (r - g) / d + 4;
30
- break;
31
- }
32
- h /= 6;
33
- }
34
-
35
- return [h * 360, s * 100, l * 100]
1
+ /**
2
+ *
3
+ * @param r
4
+ * @param g
5
+ * @param b
6
+ * @returns {array}
7
+ */
8
+ export function rgbToHsl(r: number, g: number, b: number): [number, number, number] {
9
+ r /= 255;
10
+ g /= 255;
11
+ b /= 255;
12
+ let max = Math.max(r, g, b), min = Math.min(r, g, b);
13
+ let h: number, s: number, l = (max + min) / 2;
14
+
15
+ if (max == min) {
16
+ h = s = 0; // achromatic
17
+ } else {
18
+ let d = max - min;
19
+ s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
20
+ switch (max) {
21
+ case r:
22
+ h = (g - b) / d + (g < b ? 6 : 0);
23
+ break;
24
+ case g:
25
+ h = (b - r) / d + 2;
26
+ break;
27
+ case b:
28
+ default:
29
+ h = (r - g) / d + 4;
30
+ break;
31
+ }
32
+ h /= 6;
33
+ }
34
+
35
+ return [h * 360, s * 100, l * 100]
36
36
  }
@@ -1,4 +1,4 @@
1
- //IE sometimes returns null while other browsers always return document.body.
2
- export function getActiveElement(): Element {
3
- return document.activeElement ?? document.body;
4
- }
1
+ //IE sometimes returns null while other browsers always return document.body.
2
+ export function getActiveElement(): Element {
3
+ return document.activeElement ?? document.body;
4
+ }
@@ -1,18 +1,18 @@
1
- import { isFunction } from "./isFunction";
2
- import { isString } from "./isString";
3
-
4
- export function hasKey<K extends string>(obj: object, key: K): obj is Record<K, unknown> {
5
- return key in obj;
6
- }
7
-
8
- export function hasStringAtKey<K extends string>(obj: object, key: K): obj is Record<K, string> {
9
- return hasKey(obj, key) && isString(obj[key]);
10
- }
11
-
12
- export function hasValueAtKey<K extends string>(obj: object, key: K, value: unknown): obj is Record<K, unknown> {
13
- return hasKey(obj, key) && obj[key] === value;
14
- }
15
-
16
- export function hasFunctionAtKey<K extends string>(obj: object, key: K): obj is Record<K, (...args: any[]) => any> {
17
- return hasKey(obj, key) && isFunction(obj[key]);
18
- }
1
+ import { isFunction } from "./isFunction";
2
+ import { isString } from "./isString";
3
+
4
+ export function hasKey<K extends string>(obj: object, key: K): obj is Record<K, unknown> {
5
+ return key in obj;
6
+ }
7
+
8
+ export function hasStringAtKey<K extends string>(obj: object, key: K): obj is Record<K, string> {
9
+ return hasKey(obj, key) && isString(obj[key]);
10
+ }
11
+
12
+ export function hasValueAtKey<K extends string>(obj: object, key: K, value: unknown): obj is Record<K, unknown> {
13
+ return hasKey(obj, key) && obj[key] === value;
14
+ }
15
+
16
+ export function hasFunctionAtKey<K extends string>(obj: object, key: K): obj is Record<K, (...args: any[]) => any> {
17
+ return hasKey(obj, key) && isFunction(obj[key]);
18
+ }
package/src/util/index.ts CHANGED
@@ -1,55 +1,55 @@
1
- export * from "./Console";
2
- export * from "./Debug";
3
- export * from "./DOM";
4
- export * from "./Format";
5
- export * from "./expandFatArrows";
6
- export * from "./GlobalCacheIdentifier";
7
- export * from "./innerTextTrim";
8
- export * from "./isDigit";
9
- export * from "./isPromise";
10
- export * from "./isTouchDevice";
11
- export * from "./KeyCode";
12
- export * from "./parseStyle";
13
- export * from "./quote";
14
- export * from "./scrollElementIntoView";
15
- export * from "./shallowEquals";
16
- export * from "./Timing";
17
- export * from "./date/index";
18
- export * from "./color/index";
19
- export * from "./getVendorPrefix";
20
- export * from "./eventCallbacks";
21
- export * from "./getSearchQueryPredicate";
22
- export * from "./escapeSpecialRegexCharacters";
23
- export * from "./browserSupportsPassiveEventHandlers";
24
- export * from "./isTouchEvent";
25
- export * from "./debounce";
26
- export * from "./throttle";
27
- export * from "./SubscriberList";
28
- export * from "./findScrollableParent";
29
- export * from "./getScrollerBoundingClientRect";
30
- export * from "./isNonEmptyArray";
31
- export * from "./isArray";
32
- export * from "./isObject";
33
- export * from "./isNumber";
34
- export * from "./isFunction";
35
- export * from "./isString";
36
- export * from "./isUndefined";
37
- export * from "./isDefined";
38
- export * from "./routeAppend";
39
- export * from "./reverseSlice";
40
- export * from "./getTopLevelBoundingClientRect";
41
- export * from "./getParentFrameBoundingClientRect";
42
- export * from "./getActiveElement";
43
- export * from "./Component";
44
- export * from "./onIdleCallback";
45
- export * from "./validatedDebounce";
46
- export * from "./addEventListenerWithOptions";
47
- export * from "./coalesce";
48
- export * from "./dummyCallback";
49
- export * from "./calculateNaturalElementHeight";
50
- export * from "./isTextInputElement";
51
- export * from "./capitalize";
52
- export * from "./isValidIdentifierName";
53
- export * from "./isDataRecord";
54
- export * from "./TraversalStack";
55
- export * from "./hasKey"
1
+ export * from "./Console";
2
+ export * from "./Debug";
3
+ export * from "./DOM";
4
+ export * from "./Format";
5
+ export * from "./expandFatArrows";
6
+ export * from "./GlobalCacheIdentifier";
7
+ export * from "./innerTextTrim";
8
+ export * from "./isDigit";
9
+ export * from "./isPromise";
10
+ export * from "./isTouchDevice";
11
+ export * from "./KeyCode";
12
+ export * from "./parseStyle";
13
+ export * from "./quote";
14
+ export * from "./scrollElementIntoView";
15
+ export * from "./shallowEquals";
16
+ export * from "./Timing";
17
+ export * from "./date/index";
18
+ export * from "./color/index";
19
+ export * from "./getVendorPrefix";
20
+ export * from "./eventCallbacks";
21
+ export * from "./getSearchQueryPredicate";
22
+ export * from "./escapeSpecialRegexCharacters";
23
+ export * from "./browserSupportsPassiveEventHandlers";
24
+ export * from "./isTouchEvent";
25
+ export * from "./debounce";
26
+ export * from "./throttle";
27
+ export * from "./SubscriberList";
28
+ export * from "./findScrollableParent";
29
+ export * from "./getScrollerBoundingClientRect";
30
+ export * from "./isNonEmptyArray";
31
+ export * from "./isArray";
32
+ export * from "./isObject";
33
+ export * from "./isNumber";
34
+ export * from "./isFunction";
35
+ export * from "./isString";
36
+ export * from "./isUndefined";
37
+ export * from "./isDefined";
38
+ export * from "./routeAppend";
39
+ export * from "./reverseSlice";
40
+ export * from "./getTopLevelBoundingClientRect";
41
+ export * from "./getParentFrameBoundingClientRect";
42
+ export * from "./getActiveElement";
43
+ export * from "./Component";
44
+ export * from "./onIdleCallback";
45
+ export * from "./validatedDebounce";
46
+ export * from "./addEventListenerWithOptions";
47
+ export * from "./coalesce";
48
+ export * from "./dummyCallback";
49
+ export * from "./calculateNaturalElementHeight";
50
+ export * from "./isTextInputElement";
51
+ export * from "./capitalize";
52
+ export * from "./isValidIdentifierName";
53
+ export * from "./isDataRecord";
54
+ export * from "./TraversalStack";
55
+ export * from "./hasKey"
@@ -1,10 +1,10 @@
1
- /**
2
- *
3
- * @param str
4
- * @return {string}
5
- */
6
- export function innerTextTrim(str: string): string {
7
- str = str.replace(/\t/g, "");
8
- str = str.replace(/(\s*[\r\n]\s*)/g, " ");
9
- return str;
10
- }
1
+ /**
2
+ *
3
+ * @param str
4
+ * @return {string}
5
+ */
6
+ export function innerTextTrim(str: string): string {
7
+ str = str.replace(/\t/g, "");
8
+ str = str.replace(/(\s*[\r\n]\s*)/g, " ");
9
+ return str;
10
+ }
@@ -1,3 +1,3 @@
1
- export function isArray<T = unknown>(x: unknown): x is T[] {
2
- return Array.isArray(x);
3
- }
1
+ export function isArray<T = unknown>(x: unknown): x is T[] {
2
+ return Array.isArray(x);
3
+ }
@@ -1,5 +1,5 @@
1
- import { isObject } from "./isObject";
2
-
3
- export function isDataRecord(v: unknown): v is Record<string, any> {
4
- return isObject(v);
5
- }
1
+ import { isObject } from "./isObject";
2
+
3
+ export function isDataRecord(v: unknown): v is Record<string, any> {
4
+ return isObject(v);
5
+ }
@@ -1,3 +1,3 @@
1
- export function isDefined<T>(x: T | undefined): x is T {
2
- return x !== undefined;
3
- }
1
+ export function isDefined<T>(x: T | undefined): x is T {
2
+ return x !== undefined;
3
+ }
@@ -1,3 +1,3 @@
1
- export function isString(x: unknown): x is string {
2
- return typeof x === "string";
3
- }
1
+ export function isString(x: unknown): x is string {
2
+ return typeof x === "string";
3
+ }
@@ -61,4 +61,30 @@ describe("Accessors", () => {
61
61
  assert(tree.type === "div");
62
62
  assert.deepStrictEqual(tree.children, ["4"]);
63
63
  });
64
+
65
+ it("expr infers correct types from accessor chains", () => {
66
+ let selector = expr($page.a, $page.b, (a, b) => {
67
+ // a and b should be inferred as number | undefined
68
+ const typedA: number | undefined = a;
69
+ const typedB: number | undefined = b;
70
+ // @ts-expect-error - a should not be string
71
+ const wrongA: string = a;
72
+ // @ts-expect-error - b should not be string
73
+ const wrongB: string = b;
74
+ return (typedA ?? 0) + (typedB ?? 0);
75
+ });
76
+ assert.ok(selector);
77
+ });
78
+
79
+ it("expr resolves AccessorChain<any> and nested properties to any", () => {
80
+ let m = createAccessorModelProxy<{ data: any }>();
81
+ let selector = expr(m.data.nested.value, (value) => {
82
+ // value should be any, so all assignments should work
83
+ const asString: string = value;
84
+ const asNumber: number = value;
85
+ const asBoolean: boolean = value;
86
+ return value;
87
+ });
88
+ assert.ok(selector);
89
+ });
64
90
  });
@@ -8,21 +8,14 @@ import { isFunction } from "../util/isFunction";
8
8
  import { isDefined } from "../util/isDefined";
9
9
  import { coalesce } from "../util/coalesce";
10
10
  import type { RenderingContext } from "../ui/RenderingContext";
11
- import type { Instance, WidgetData, RenderProps } from "../ui/Instance";
11
+ import type { Instance, RenderProps } from "../ui/Instance";
12
12
  import { YesNoResult } from "../ui/Instance";
13
13
  import { BooleanProp, StringProp, Prop, ModProp } from "../ui/Prop";
14
14
  import type { FormRenderingContext } from "./form/ValidationGroup";
15
15
 
16
- interface ButtonData extends WidgetData {
17
- pressed?: boolean;
18
- icon?: string | boolean;
19
- disabled?: boolean;
20
- enabled?: boolean;
21
- }
22
-
23
- export interface ButtonConfig extends HtmlElementConfig {
16
+ export interface ButtonConfig extends Omit<HtmlElementConfig<"button">, "disabled" | "type" | "form"> {
24
17
  /** Confirmation text or configuration object. See MsgBox.yesNo for more details. */
25
- confirm?: Prop<string | Record<string, unknown>>;
18
+ confirm?: Prop<string | Record<string, unknown> | false>;
26
19
 
27
20
  /** If true button appears in pressed state. Useful for implementing toggle buttons. */
28
21
  pressed?: BooleanProp;
@@ -30,9 +23,6 @@ export interface ButtonConfig extends HtmlElementConfig {
30
23
  /** Name of the icon to be put on the left side of the button. */
31
24
  icon?: StringProp;
32
25
 
33
- /** HTML tag to be used. Default is `button`. */
34
- tag?: string;
35
-
36
26
  /** Base CSS class to be applied to the element. Default is 'button'. */
37
27
  baseClass?: string;
38
28
 
@@ -57,9 +47,7 @@ export interface ButtonConfig extends HtmlElementConfig {
57
47
  * @param e - Event.
58
48
  * @param instance - Cx widget instance that fired the event.
59
49
  */
60
- onClick?: string | ((e: MouseEvent, instance: Instance) => void);
61
-
62
- onMouseDown?: string | ((e: MouseEvent, instance: Instance) => void);
50
+ onClick?: string | ((e: React.MouseEvent, instance: Instance) => void);
63
51
 
64
52
  /** Button type. */
65
53
  type?: "submit" | "button";
@@ -121,7 +109,7 @@ export class Button extends HtmlElement<ButtonConfig, HtmlElementInstance> {
121
109
 
122
110
  if (!this.focusOnMouseDown) {
123
111
  props.onMouseDown = (e: React.MouseEvent) => {
124
- if (this.onMouseDown && instance.invoke("onMouseDown", e.nativeEvent, instance) === false) return;
112
+ if (this.onMouseDown && instance.invoke("onMouseDown", e, instance) === false) return;
125
113
  preventFocus(e);
126
114
  };
127
115
  }
@@ -1,92 +1,95 @@
1
- import { Widget, WidgetConfig } from "../ui/Widget";
2
- import { RenderingContext } from "../ui/RenderingContext";
3
- import { Instance } from "../ui/Instance";
4
- import { StringProp } from "../ui/Prop";
5
-
6
- export interface DocumentTitleConfig extends WidgetConfig {
7
- /** Text value to be used for the document title. */
8
- value?: StringProp;
9
-
10
- /** Deprecated. Use `action: "append"` instead. */
11
- append?: boolean;
12
-
13
- /** How to combine the title with existing document title. Default is `append`. */
14
- action?: "append" | "replace" | "prepend";
15
-
16
- /** Separator used when appending or prepending to the title. Default is empty string. */
17
- separator?: StringProp;
18
- }
19
-
20
- export class DocumentTitle extends Widget<DocumentTitleConfig> {
21
- declare value?: StringProp;
22
- declare text?: StringProp;
23
- declare append?: boolean;
24
- declare action?: "append" | "replace" | "prepend";
25
- declare separator?: StringProp;
26
-
27
- constructor(config?: DocumentTitleConfig) {
28
- super(config);
29
- }
30
-
31
- init(): void {
32
- if (this.value) this.text = this.value;
33
-
34
- if (this.append) this.action = "append";
35
-
36
- super.init();
37
- }
38
-
39
- declareData(...args: Record<string, unknown>[]): void {
40
- super.declareData(...args, {
41
- value: undefined,
42
- text: undefined,
43
- action: undefined,
44
- separator: undefined,
45
- });
46
- }
47
-
48
- explore(context: RenderingContext, instance: Instance): void {
49
- if (!(context as any).documentTitle) {
50
- (context as any).documentTitle = {
51
- activeInstance: instance,
52
- title: "",
53
- };
54
- }
55
-
56
- let { data } = instance;
57
-
58
- if (data.text) {
59
- switch (data.action) {
60
- case "append":
61
- if ((context as any).documentTitle.title) (context as any).documentTitle.title += data.separator;
62
- (context as any).documentTitle.title += data.text;
63
- break;
64
-
65
- case "prepend":
66
- (context as any).documentTitle.title = data.text + data.separator + (context as any).documentTitle.title;
67
- break;
68
-
69
- default:
70
- case "replace":
71
- (context as any).documentTitle.title = data.text;
72
- break;
73
- }
74
- }
75
-
76
- super.explore(context, instance);
77
- }
78
-
79
- prepare(context: RenderingContext, instance: Instance): void {
80
- if ((context as any).documentTitle.activeInstance == instance)
81
- document.title = (context as any).documentTitle.title;
82
- }
83
-
84
- render(): null {
85
- return null;
86
- }
87
- }
88
-
89
- DocumentTitle.prototype.action = "append";
90
- DocumentTitle.prototype.separator = "";
91
-
92
- Widget.alias("document-title", DocumentTitle);
1
+ import { Widget, WidgetConfig } from "../ui/Widget";
2
+ import { RenderingContext } from "../ui/RenderingContext";
3
+ import { Instance } from "../ui/Instance";
4
+ import { StringProp } from "../ui/Prop";
5
+
6
+ export interface DocumentTitleConfig extends WidgetConfig {
7
+ /** Text value to be used for the document title. */
8
+ value?: StringProp;
9
+
10
+ /** Text value to be used for the document title. */
11
+ text?: StringProp;
12
+
13
+ /** Deprecated. Use `action: "append"` instead. */
14
+ append?: boolean;
15
+
16
+ /** How to combine the title with existing document title. Default is `append`. */
17
+ action?: "append" | "replace" | "prepend";
18
+
19
+ /** Separator used when appending or prepending to the title. Default is empty string. */
20
+ separator?: StringProp;
21
+ }
22
+
23
+ export class DocumentTitle extends Widget<DocumentTitleConfig> {
24
+ declare value?: StringProp;
25
+ declare text?: StringProp;
26
+ declare append?: boolean;
27
+ declare action?: "append" | "replace" | "prepend";
28
+ declare separator?: StringProp;
29
+
30
+ constructor(config?: DocumentTitleConfig) {
31
+ super(config);
32
+ }
33
+
34
+ init(): void {
35
+ if (this.value) this.text = this.value;
36
+
37
+ if (this.append) this.action = "append";
38
+
39
+ super.init();
40
+ }
41
+
42
+ declareData(...args: Record<string, unknown>[]): void {
43
+ super.declareData(...args, {
44
+ value: undefined,
45
+ text: undefined,
46
+ action: undefined,
47
+ separator: undefined,
48
+ });
49
+ }
50
+
51
+ explore(context: RenderingContext, instance: Instance): void {
52
+ if (!(context as any).documentTitle) {
53
+ (context as any).documentTitle = {
54
+ activeInstance: instance,
55
+ title: "",
56
+ };
57
+ }
58
+
59
+ let { data } = instance;
60
+
61
+ if (data.text) {
62
+ switch (data.action) {
63
+ case "append":
64
+ if ((context as any).documentTitle.title) (context as any).documentTitle.title += data.separator;
65
+ (context as any).documentTitle.title += data.text;
66
+ break;
67
+
68
+ case "prepend":
69
+ (context as any).documentTitle.title = data.text + data.separator + (context as any).documentTitle.title;
70
+ break;
71
+
72
+ default:
73
+ case "replace":
74
+ (context as any).documentTitle.title = data.text;
75
+ break;
76
+ }
77
+ }
78
+
79
+ super.explore(context, instance);
80
+ }
81
+
82
+ prepare(context: RenderingContext, instance: Instance): void {
83
+ if ((context as any).documentTitle.activeInstance == instance)
84
+ document.title = (context as any).documentTitle.title;
85
+ }
86
+
87
+ render(): null {
88
+ return null;
89
+ }
90
+ }
91
+
92
+ DocumentTitle.prototype.action = "append";
93
+ DocumentTitle.prototype.separator = "";
94
+
95
+ Widget.alias("document-title", DocumentTitle);
@@ -1,7 +1,7 @@
1
- import { HtmlElement, HtmlElementConfig, HtmlElementInstance } from "./HtmlElement";
1
+ import { HtmlElement, HtmlElementConfigBase, HtmlElementInstance } from "./HtmlElement";
2
2
  import { RenderingContext } from "../ui/RenderingContext";
3
3
 
4
- export interface HeadingConfig extends HtmlElementConfig {
4
+ export interface HeadingConfig extends HtmlElementConfigBase {
5
5
  /** Name of the HTML element to be rendered. Default is `div`. */
6
6
  tag?: string;
7
7