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,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);