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,103 +1,103 @@
1
- import { Widget } from "../ui/Widget";
2
- import { PureContainerBase, PureContainerConfig } from "../ui/PureContainer";
3
- import { Binding, BindingInput } from "../data/Binding";
4
- import { ExposedValueView, ExposedValueViewConfig } from "../data/ExposedValueView";
5
- import { RenderingContext } from "../ui/RenderingContext";
6
- import { Instance } from "../ui/Instance";
7
- import { StringProp, WritableProp } from "../ui/Prop";
8
-
9
- export interface SandboxConfig extends PureContainerConfig {
10
- /** Binding to the object that holds sandbox data. */
11
- storage: WritableProp<Record<string, any>>;
12
-
13
- /** Key used to identify the sandbox instance within the storage. */
14
- key?: StringProp;
15
-
16
- /** Alias for `key`. */
17
- accessKey?: StringProp;
18
-
19
- /** Alias used to expose sandbox data. Default is `$page`. */
20
- recordName?: string;
21
-
22
- /** Alias for `recordName`. */
23
- recordAlias?: string;
24
-
25
- /** Indicate that parent store data should not be mutated. */
26
- immutable?: boolean;
27
-
28
- /** Indicate that sandbox store data should not be mutated. */
29
- sealed?: boolean;
30
- }
31
-
32
- export interface SandboxInstance extends Instance {
33
- store: ExposedValueView;
34
- }
35
-
36
- export class Sandbox extends PureContainerBase<SandboxConfig, SandboxInstance> {
37
- declare storage: WritableProp<Record<string, any>>;
38
- declare key?: StringProp;
39
- declare recordName?: string;
40
- declare recordAlias?: string;
41
- declare accessKey?: StringProp;
42
- declare immutable?: boolean;
43
- declare sealed?: boolean;
44
- declare storageBinding: Binding;
45
- init(): void {
46
- if (this.recordAlias) this.recordName = this.recordAlias;
47
-
48
- if (this.accessKey) this.key = this.accessKey;
49
-
50
- this.storageBinding = Binding.get(this.storage);
51
-
52
- super.init();
53
- }
54
-
55
- initInstance(context: RenderingContext, instance: SandboxInstance): void {
56
- instance.store = new ExposedValueView({
57
- store: instance.parentStore,
58
- containerBinding: this.storageBinding,
59
- key: null,
60
- recordName: this.recordName,
61
- immutable: this.immutable,
62
- });
63
- super.initInstance(context, instance);
64
- }
65
-
66
- applyParentStore(instance: SandboxInstance): void {
67
- instance.store.setStore(instance.parentStore);
68
- }
69
-
70
- declareData(...args: Record<string, unknown>[]): void {
71
- super.declareData(
72
- {
73
- storage: undefined,
74
- key: undefined,
75
- },
76
- ...args,
77
- );
78
- }
79
-
80
- prepareData(context: RenderingContext, instance: SandboxInstance): void {
81
- var { store, data } = instance;
82
- if (store.getKey() !== data.key) {
83
- //when navigating to a page using the same widget tree as the previous page
84
- //everything needs to be reinstantiated, e.g. user/1 => user/2
85
- instance.store = new ExposedValueView({
86
- store: store,
87
- containerBinding: this.storageBinding,
88
- key: data.key,
89
- recordName: this.recordName,
90
- immutable: this.immutable,
91
- sealed: this.sealed,
92
- });
93
- instance.clearChildrenCache();
94
- }
95
- super.prepareData(context, instance);
96
- }
97
- }
98
-
99
- Sandbox.prototype.recordName = "$page";
100
- Sandbox.prototype.immutable = false;
101
- Sandbox.prototype.sealed = false;
102
-
103
- Widget.alias("sandbox", Sandbox);
1
+ import { Widget } from "../ui/Widget";
2
+ import { PureContainerBase, PureContainerConfig } from "../ui/PureContainer";
3
+ import { Binding, BindingInput } from "../data/Binding";
4
+ import { ExposedValueView, ExposedValueViewConfig } from "../data/ExposedValueView";
5
+ import { RenderingContext } from "../ui/RenderingContext";
6
+ import { Instance } from "../ui/Instance";
7
+ import { StringProp, WritableProp } from "../ui/Prop";
8
+
9
+ export interface SandboxConfig extends PureContainerConfig {
10
+ /** Binding to the object that holds sandbox data. */
11
+ storage: WritableProp<Record<string, any>>;
12
+
13
+ /** Key used to identify the sandbox instance within the storage. */
14
+ key?: StringProp;
15
+
16
+ /** Alias for `key`. */
17
+ accessKey?: StringProp;
18
+
19
+ /** Alias used to expose sandbox data. Default is `$page`. */
20
+ recordName?: string;
21
+
22
+ /** Alias for `recordName`. */
23
+ recordAlias?: string;
24
+
25
+ /** Indicate that parent store data should not be mutated. */
26
+ immutable?: boolean;
27
+
28
+ /** Indicate that sandbox store data should not be mutated. */
29
+ sealed?: boolean;
30
+ }
31
+
32
+ export interface SandboxInstance extends Instance {
33
+ store: ExposedValueView;
34
+ }
35
+
36
+ export class Sandbox extends PureContainerBase<SandboxConfig, SandboxInstance> {
37
+ declare storage: WritableProp<Record<string, any>>;
38
+ declare key?: StringProp;
39
+ declare recordName?: string;
40
+ declare recordAlias?: string;
41
+ declare accessKey?: StringProp;
42
+ declare immutable?: boolean;
43
+ declare sealed?: boolean;
44
+ declare storageBinding: Binding;
45
+ init(): void {
46
+ if (this.recordAlias) this.recordName = this.recordAlias;
47
+
48
+ if (this.accessKey) this.key = this.accessKey;
49
+
50
+ this.storageBinding = Binding.get(this.storage);
51
+
52
+ super.init();
53
+ }
54
+
55
+ initInstance(context: RenderingContext, instance: SandboxInstance): void {
56
+ instance.store = new ExposedValueView({
57
+ store: instance.parentStore,
58
+ containerBinding: this.storageBinding,
59
+ key: null,
60
+ recordName: this.recordName,
61
+ immutable: this.immutable,
62
+ });
63
+ super.initInstance(context, instance);
64
+ }
65
+
66
+ applyParentStore(instance: SandboxInstance): void {
67
+ instance.store.setStore(instance.parentStore);
68
+ }
69
+
70
+ declareData(...args: Record<string, unknown>[]): void {
71
+ super.declareData(
72
+ {
73
+ storage: undefined,
74
+ key: undefined,
75
+ },
76
+ ...args,
77
+ );
78
+ }
79
+
80
+ prepareData(context: RenderingContext, instance: SandboxInstance): void {
81
+ var { store, data } = instance;
82
+ if (store.getKey() !== data.key) {
83
+ //when navigating to a page using the same widget tree as the previous page
84
+ //everything needs to be reinstantiated, e.g. user/1 => user/2
85
+ instance.store = new ExposedValueView({
86
+ store: store,
87
+ containerBinding: this.storageBinding,
88
+ key: data.key,
89
+ recordName: this.recordName,
90
+ immutable: this.immutable,
91
+ sealed: this.sealed,
92
+ });
93
+ instance.clearChildrenCache();
94
+ }
95
+ super.prepareData(context, instance);
96
+ }
97
+ }
98
+
99
+ Sandbox.prototype.recordName = "$page";
100
+ Sandbox.prototype.immutable = false;
101
+ Sandbox.prototype.sealed = false;
102
+
103
+ Widget.alias("sandbox", Sandbox);
@@ -1,9 +1,9 @@
1
- import { FocusManager } from "../ui/FocusManager";
2
- import { isTouchEvent } from "../util/isTouchEvent";
3
-
4
- export function autoFocus(el: HTMLElement | undefined | null, component: any): void {
5
- let data = component.props.data || component.props.instance.data;
6
- let autoFocusValue = el && data.autoFocus;
7
- if (autoFocusValue && autoFocusValue != component.autoFocusValue && !isTouchEvent()) FocusManager.focus(el!);
8
- component.autoFocusValue = autoFocusValue;
9
- }
1
+ import { FocusManager } from "../ui/FocusManager";
2
+ import { isTouchEvent } from "../util/isTouchEvent";
3
+
4
+ export function autoFocus(el: HTMLElement | undefined | null, component: any): void {
5
+ let data = component.props.data || component.props.instance.data;
6
+ let autoFocusValue = el && data.autoFocus;
7
+ if (autoFocusValue && autoFocusValue != component.autoFocusValue && !isTouchEvent()) FocusManager.focus(el!);
8
+ component.autoFocusValue = autoFocusValue;
9
+ }
package/src/widgets/cx.ts CHANGED
@@ -1,63 +1,63 @@
1
- import { HtmlElement } from "./HtmlElement";
2
- import { VDOM } from "../ui/Widget";
3
- import { createComponentFactory, isComponentFactory } from "../util/Component";
4
- import { createFunctionalComponent } from "../ui/createFunctionalComponent";
5
- import { isString } from "../util/isString";
6
- import { isNumber } from "../util/isNumber";
7
- import { isFunction } from "../util/isFunction";
8
- import { isUndefined } from "../util/isUndefined";
9
- import { isArray } from "../util/isArray";
10
-
11
- import { flattenProps } from "../ui/flattenProps";
12
-
13
- let htmlFactoryCache: Record<string, any> = {};
14
-
15
- function getHtmlElementFactory(tagName: string): any {
16
- let factory = htmlFactoryCache[tagName];
17
- if (factory) return factory;
18
- return (htmlFactoryCache[tagName] = createComponentFactory(
19
- () => {},
20
- (config: any) => HtmlElement.create(HtmlElement, { tag: tagName }, flattenProps(config)),
21
- { tag: tagName },
22
- ));
23
- }
24
-
25
- export function cx(typeName: any, props?: any, ...children: any[]): any {
26
- if (isArray(typeName)) return typeName;
27
-
28
- if (isFunction(typeName) && isUndefined(props))
29
- return createFunctionalComponent((config: any) => typeName(flattenProps(config)));
30
-
31
- if (typeName.type || typeName.$type) return typeName;
32
-
33
- if (children && children.length == 0) children = [];
34
-
35
- if (children && children.length == 1) children = children[0];
36
-
37
- if (typeName == "cx") return children;
38
-
39
- if (typeName == "react") return react(children);
40
-
41
- if (isString(typeName) && typeName[0] == typeName[0].toLowerCase()) typeName = getHtmlElementFactory(typeName);
42
-
43
- return {
44
- $type: typeName,
45
- $props: props,
46
- jsxAttributes: props && Object.keys(props),
47
- children,
48
- };
49
- }
50
-
51
- export function react(config: any): any {
52
- if (!config || isString(config) || isNumber(config) || VDOM.isValidElement(config)) return config;
53
-
54
- if (isArray(config)) return config.map(react);
55
-
56
- let type = config.$type;
57
-
58
- if (isComponentFactory(type) && type.$meta && type.$meta.tag) type = type.$meta.tag;
59
-
60
- if (isArray(config.children)) return VDOM.createElement(type, config.$props, ...config.children.map(react));
61
-
62
- return VDOM.createElement(type, config.$props, react(config.children));
63
- }
1
+ import { HtmlElement } from "./HtmlElement";
2
+ import { VDOM } from "../ui/Widget";
3
+ import { createComponentFactory, isComponentFactory } from "../util/Component";
4
+ import { createFunctionalComponent } from "../ui/createFunctionalComponent";
5
+ import { isString } from "../util/isString";
6
+ import { isNumber } from "../util/isNumber";
7
+ import { isFunction } from "../util/isFunction";
8
+ import { isUndefined } from "../util/isUndefined";
9
+ import { isArray } from "../util/isArray";
10
+
11
+ import { flattenProps } from "../ui/flattenProps";
12
+
13
+ let htmlFactoryCache: Record<string, any> = {};
14
+
15
+ function getHtmlElementFactory(tagName: string): any {
16
+ let factory = htmlFactoryCache[tagName];
17
+ if (factory) return factory;
18
+ return (htmlFactoryCache[tagName] = createComponentFactory(
19
+ () => {},
20
+ (config: any) => HtmlElement.create(HtmlElement, { tag: tagName }, flattenProps(config)),
21
+ { tag: tagName },
22
+ ));
23
+ }
24
+
25
+ export function cx(typeName: any, props?: any, ...children: any[]): any {
26
+ if (isArray(typeName)) return typeName;
27
+
28
+ if (isFunction(typeName) && isUndefined(props))
29
+ return createFunctionalComponent((config: any) => typeName(flattenProps(config)));
30
+
31
+ if (typeName.type || typeName.$type) return typeName;
32
+
33
+ if (children && children.length == 0) children = [];
34
+
35
+ if (children && children.length == 1) children = children[0];
36
+
37
+ if (typeName == "cx") return children;
38
+
39
+ if (typeName == "react") return react(children);
40
+
41
+ if (isString(typeName) && typeName[0] == typeName[0].toLowerCase()) typeName = getHtmlElementFactory(typeName);
42
+
43
+ return {
44
+ $type: typeName,
45
+ $props: props,
46
+ jsxAttributes: props && Object.keys(props),
47
+ children,
48
+ };
49
+ }
50
+
51
+ export function react(config: any): any {
52
+ if (!config || isString(config) || isNumber(config) || VDOM.isValidElement(config)) return config;
53
+
54
+ if (isArray(config)) return config.map(react);
55
+
56
+ let type = config.$type;
57
+
58
+ if (isComponentFactory(type) && type.$meta && type.$meta.tag) type = type.$meta.tag;
59
+
60
+ if (isArray(config.children)) return VDOM.createElement(type, config.$props, ...config.children.map(react));
61
+
62
+ return VDOM.createElement(type, config.$props, react(config.children));
63
+ }
@@ -1,7 +1,7 @@
1
1
  /** @jsxImportSource react */
2
2
 
3
3
  import { Widget, VDOM } from "../../ui/Widget";
4
- import { ContainerBase, ContainerConfig } from "../../ui/Container";
4
+ import { ContainerBase, ContainerConfig, StyledContainerBase, StyledContainerConfig } from "../../ui/Container";
5
5
  import { ddMouseDown, ddDetect, ddMouseUp, initiateDragDrop, isDragHandleEvent } from "./ops";
6
6
  import { preventFocus } from "../../ui/FocusManager";
7
7
  import { parseStyle } from "../../util/parseStyle";
@@ -9,7 +9,7 @@ import { Instance } from "../../ui/Instance";
9
9
  import { StringProp, StyleProp, ClassProp, Config } from "../../ui/Prop";
10
10
  import { RenderingContext } from "../../ui/RenderingContext";
11
11
 
12
- export interface DragSourceConfig extends ContainerConfig {
12
+ export interface DragSourceConfig extends StyledContainerConfig {
13
13
  /**
14
14
  * Data about the drag source that can be used by drop zones to test if
15
15
  * drag source is acceptable and to perform drop operations.
@@ -54,7 +54,7 @@ export interface DragSourceInstance extends Instance<DragSource> {
54
54
  dragHandles: any[];
55
55
  }
56
56
 
57
- export class DragSource extends ContainerBase<DragSourceConfig, DragSourceInstance> {
57
+ export class DragSource extends StyledContainerBase<DragSourceConfig, DragSourceInstance> {
58
58
  declare styled: boolean;
59
59
  declare baseClass: string;
60
60
  declare hideOnDrag: boolean;
@@ -105,7 +105,6 @@ export class DragSource extends ContainerBase<DragSourceConfig, DragSourceInstan
105
105
  }
106
106
  }
107
107
 
108
- DragSource.prototype.styled = true;
109
108
  DragSource.prototype.baseClass = "dragsource";
110
109
  DragSource.prototype.hideOnDrag = false;
111
110
  DragSource.prototype.handled = false;
@@ -1,7 +1,7 @@
1
1
  /** @jsxImportSource react */
2
2
 
3
3
  import { Widget, VDOM } from "../../ui/Widget";
4
- import { ContainerBase, ContainerConfig } from "../../ui/Container";
4
+ import { ContainerBase, ContainerConfig, StyledContainerBase, StyledContainerConfig } from "../../ui/Container";
5
5
  import { parseStyle } from "../../util/parseStyle";
6
6
  import { registerDropZone, DragDropContext, DragEvent } from "./ops";
7
7
  import { findScrollableParent } from "../../util/findScrollableParent";
@@ -11,7 +11,7 @@ import { Instance } from "../../ui/Instance";
11
11
  import { StyleProp, ClassProp, StructuredProp } from "../../ui/Prop";
12
12
  import { RenderingContext } from "../../ui/RenderingContext";
13
13
 
14
- export interface DropZoneConfig extends ContainerConfig {
14
+ export interface DropZoneConfig extends StyledContainerConfig {
15
15
  /** CSS styles to be applied when drag cursor is over the drop zone. */
16
16
  overStyle?: StyleProp;
17
17
 
@@ -105,7 +105,7 @@ export interface DropZoneConfig extends ContainerConfig {
105
105
 
106
106
  export interface DropZoneInstance extends Instance<DropZone> {}
107
107
 
108
- export class DropZone extends ContainerBase<DropZoneConfig, DropZoneInstance> {
108
+ export class DropZone extends StyledContainerBase<DropZoneConfig, DropZoneInstance> {
109
109
  declare styled: boolean;
110
110
  declare nearDistance: number;
111
111
  declare hinflate: number;
@@ -166,7 +166,6 @@ export class DropZone extends ContainerBase<DropZoneConfig, DropZoneInstance> {
166
166
  }
167
167
  }
168
168
 
169
- DropZone.prototype.styled = true;
170
169
  DropZone.prototype.nearDistance = 0;
171
170
  DropZone.prototype.hinflate = 0;
172
171
  DropZone.prototype.vinflate = 0;
@@ -40,6 +40,9 @@ export interface CheckboxConfig extends FieldConfig {
40
40
 
41
41
  /** View mode text. */
42
42
  viewText?: StringProp;
43
+
44
+ /** Custom validation function. */
45
+ onValidate?: string | ((value: boolean, instance: Instance, validationParams: Record<string, unknown>) => unknown);
43
46
  }
44
47
 
45
48
  export class Checkbox extends Field<CheckboxConfig> {
@@ -44,6 +44,9 @@ export interface ColorFieldConfig extends FieldConfig {
44
44
 
45
45
  /** Additional configuration to be passed to the dropdown, such as `style`, `positioning`, etc. */
46
46
  dropdownOptions?: Partial<DropdownConfig>;
47
+
48
+ /** Custom validation function. */
49
+ onValidate?: string | ((value: string, instance: Instance, validationParams: Record<string, unknown>) => unknown);
47
50
  }
48
51
 
49
52
  export class ColorFieldInstance<F extends ColorField = ColorField> extends FieldInstance<F> implements DropdownWidgetProps {
@@ -112,6 +112,11 @@ export interface DateTimeFieldConfig extends FieldConfig {
112
112
 
113
113
  /** Additional configuration to be passed to the dropdown. */
114
114
  dropdownOptions?: Partial<DropdownConfig>;
115
+
116
+ /** Custom validation function. */
117
+ onValidate?:
118
+ | string
119
+ | ((value: string | Date, instance: Instance, validationParams: Record<string, unknown>) => unknown);
115
120
  }
116
121
 
117
122
  export class DateTimeField extends Field<DateTimeFieldConfig> {
@@ -104,9 +104,6 @@ export interface FieldConfig extends PureContainerConfig, WidgetStyleConfig {
104
104
  /** Additional content to be displayed next to the field. */
105
105
  help?: string | Config;
106
106
 
107
- /** Custom validation function. */
108
- onValidate?: string | ((value: unknown, instance: Instance, validationParams: Record<string, unknown>) => unknown);
109
-
110
107
  /** Validation parameters to be passed to the validation function. */
111
108
  validationParams?: Config;
112
109
 
@@ -31,6 +31,7 @@ export class Label extends HtmlElement {
31
31
  constructor(config?: LabelConfig) {
32
32
  super(config);
33
33
  }
34
+
34
35
  declareData(...args: Record<string, unknown>[]): void {
35
36
  super.declareData(...args, {
36
37
  required: undefined,
@@ -1,27 +1,27 @@
1
- import { isSelector } from '../../data/isSelector';
2
- import type { Instance } from '../../ui/Instance';
3
- import type { CxChild, RenderingContext } from '../../ui/RenderingContext';
4
- import { Widget } from '../../ui/Widget';
5
- import { FieldGroup, FieldGroupConfig } from './FieldGroup';
6
- import { Label } from './Label';
7
- import { StringProp, Config, BooleanProp } from '../../ui/Prop';
1
+ import { isSelector } from "../../data/isSelector";
2
+ import type { Instance } from "../../ui/Instance";
3
+ import type { CxChild, RenderingContext } from "../../ui/RenderingContext";
4
+ import { Widget } from "../../ui/Widget";
5
+ import { FieldGroup, FieldGroupConfig } from "./FieldGroup";
6
+ import { Label, LabelConfig } from "./Label";
7
+ import { StringProp, Config, BooleanProp, ModProp } from "../../ui/Prop";
8
+ import { Create } from "../../util/Component";
8
9
 
9
10
  export interface LabeledContainerConfig extends FieldGroupConfig {
10
11
  /** The label. */
11
- label?: StringProp | Config;
12
+ label?: StringProp | Create<typeof Widget> | LabelConfig;
12
13
 
13
14
  /** Set to true to disable the field. */
14
15
  disabled?: BooleanProp;
15
16
 
16
17
  /** CSS modifier classes. */
17
- mod?: Record<string, unknown>;
18
+ mod?: ModProp;
18
19
 
19
20
  /** Set to true to display an asterisk next to the label. */
20
21
  asterisk?: BooleanProp;
21
22
  }
22
23
 
23
- export class LabeledContainer extends FieldGroup<LabeledContainerConfig>
24
- {
24
+ export class LabeledContainer extends FieldGroup<LabeledContainerConfig> {
25
25
  declare label?: string | Record<string, unknown> | Label | Widget; // Can be string, selector, Label widget config, or Widget
26
26
  declare disabled?: boolean;
27
27
  declare mod?: Record<string, unknown>;
@@ -29,26 +29,23 @@ export class LabeledContainer extends FieldGroup<LabeledContainerConfig>
29
29
 
30
30
  declareData(...args: Record<string, unknown>[]): void {
31
31
  super.declareData(...args, {
32
- label: undefined
32
+ label: undefined,
33
33
  });
34
34
  }
35
35
 
36
- init(): void {
36
+ init(): void {
37
37
  if (this.label != null) {
38
38
  let labelConfig: any = {
39
39
  type: Label,
40
40
  disabled: this.disabled,
41
41
  mod: this.mod,
42
42
  asterisk: this.asterisk,
43
- required: true
43
+ required: true,
44
44
  };
45
45
 
46
- if ((this.label as any).isComponentType)
47
- labelConfig = this.label as Record<string, unknown>;
48
- else if (isSelector(this.label))
49
- labelConfig.text = this.label;
50
- else
51
- Object.assign(labelConfig, this.label);
46
+ if ((this.label as any).isComponentType) labelConfig = this.label as Record<string, unknown>;
47
+ else if (isSelector(this.label)) labelConfig.text = this.label;
48
+ else Object.assign(labelConfig, this.label);
52
49
 
53
50
  this.label = Widget.create(labelConfig);
54
51
  }
@@ -58,24 +55,23 @@ export class LabeledContainer extends FieldGroup<LabeledContainerConfig>
58
55
 
59
56
  initComponents(context: RenderingContext, instance: Instance, ...args: Record<string, unknown>[]): void {
60
57
  return super.initComponents(context, instance, ...args, {
61
- label: this.label
58
+ label: this.label,
62
59
  });
63
60
  }
64
61
 
65
62
  renderLabel(context: RenderingContext, instance: Instance, key?: string): CxChild {
66
- if (instance.components && instance.components.label)
67
- return instance.components.label.render(context);
63
+ if (instance.components && instance.components.label) return instance.components.label.render(context);
68
64
  return null;
69
65
  }
70
66
 
71
67
  render(context: RenderingContext, instance: Instance, key: string): { label: CxChild; content: CxChild } {
72
68
  return {
73
69
  label: this.renderLabel(context, instance),
74
- content: this.renderChildren(context, instance)
75
- }
70
+ content: this.renderChildren(context, instance),
71
+ };
76
72
  }
77
73
  }
78
74
 
79
75
  LabeledContainer.prototype.styled = true;
80
76
 
81
- Widget.alias('labeled-container', LabeledContainer);
77
+ Widget.alias("labeled-container", LabeledContainer);