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
package/src/ui/Prop.ts CHANGED
@@ -1,112 +1,140 @@
1
- import { Selector } from "../data/Selector";
2
- import { AccessorChain } from "../data/createAccessorModelProxy";
3
-
4
- export type Bind = {
5
- bind: string;
6
- defaultValue?: any;
7
- throttle?: number;
8
- debounce?: number;
9
- };
10
-
11
- export type Tpl = {
12
- tpl: string;
13
- };
14
-
15
- export type Expr = {
16
- expr: string;
17
- set?: (value: any, instance?: any) => boolean;
18
- throttle?: number;
19
- debounce?: number;
20
- };
21
-
22
- export type Binding = Bind | Tpl | Expr;
23
-
24
- export type GetSet<T> = {
25
- get: Selector<T>;
26
- set?: (value: T, instance?: any) => boolean;
27
- throttle?: number;
28
- debounce?: number;
29
- };
30
-
31
- export interface StructuredSelector {
32
- [prop: string]: Selector<any>;
33
- }
34
-
35
- export type Prop<T> = T | Binding | Selector<T> | AccessorChain<T> | GetSet<T>;
36
-
37
- export type WritableProp<T> = Bind | AccessorChain<T>;
38
-
39
- export interface DataRecord {
40
- [prop: string]: any;
41
- }
42
-
43
- export interface Config {
44
- [prop: string]: any;
45
- }
46
-
47
- export interface StructuredProp {
48
- [prop: string]: Prop<any>;
49
- }
50
-
51
- /**
52
- * Utility type that extracts the resolved value type from a Prop<T>.
53
- * Used to derive the runtime type of structured props.
54
- */
55
- export type ResolveProp<P> = P extends Selector<infer T>
56
- ? T
57
- : P extends AccessorChain<infer T>
58
- ? T
59
- : P extends GetSet<infer T>
60
- ? T
61
- : P extends Bind
62
- ? any
63
- : P extends Tpl
64
- ? string
65
- : P extends Expr
66
- ? any
67
- : P;
68
-
69
- /**
70
- * Utility type that resolves a structured prop object to its runtime value types.
71
- * Transforms { name: StringProp, count: NumberProp } to { name: string, count: number }
72
- */
73
- export type ResolveStructuredProp<S> = {
74
- [K in keyof S]: ResolveProp<S[K]>;
75
- };
76
-
77
- /**
78
- * Generic structured prop type that provides type safety for params and their resolved values.
79
- * Use with ContentResolver and similar widgets to type the onResolve callback params.
80
- */
81
- export type TypedStructuredProp<T extends Record<string, any>> = {
82
- [K in keyof T]: Prop<T[K]>;
83
- };
84
-
85
- export type StringProp = Prop<string>;
86
- export type StyleProp = Prop<string | React.CSSProperties> | StructuredProp;
87
- export type NumberProp = Prop<number>;
88
- export type BooleanProp = Prop<boolean>;
89
- export type ClassProp = Prop<string> | StructuredProp;
90
- export type RecordsProp = Prop<DataRecord[]>;
91
- export type SortersProp = Prop<Sorter[]>;
92
- export type UnknownProp = Prop<unknown>;
93
- export type ModProp = StringProp | StructuredProp;
94
-
95
- export type RecordAlias = string | { toString(): string };
96
-
97
- export type SortDirection = "ASC" | "DESC";
98
-
99
- export interface Sorter {
100
- field?: string;
101
- value?: (record: DataRecord) => any;
102
- direction: SortDirection;
103
- }
104
-
105
- export interface CollatorOptions {
106
- localeMatcher?: "lookup" | "best fit";
107
- usage?: "sort" | "search";
108
- sensitivity?: "base" | "accent" | "case" | "variant";
109
- ignorePunctuation?: boolean;
110
- numeric?: boolean;
111
- caseFirst?: "upper" | "lower" | "false";
112
- }
1
+ import { Selector } from "../data/Selector";
2
+ import { AccessorChain } from "../data/createAccessorModelProxy";
3
+
4
+ export type Bind = {
5
+ bind: string;
6
+ defaultValue?: any;
7
+ throttle?: number;
8
+ debounce?: number;
9
+ };
10
+
11
+ export type Tpl = {
12
+ tpl: string;
13
+ };
14
+
15
+ export type Expr = {
16
+ expr: string;
17
+ set?: (value: any, instance?: any) => boolean;
18
+ throttle?: number;
19
+ debounce?: number;
20
+ };
21
+
22
+ export type Binding = Bind | Tpl | Expr;
23
+
24
+ export type GetSet<T> = {
25
+ get: Selector<T>;
26
+ set?: (value: T, instance?: any) => boolean;
27
+ throttle?: number;
28
+ debounce?: number;
29
+ };
30
+
31
+ export interface StructuredSelector {
32
+ [prop: string]: Selector<any>;
33
+ }
34
+
35
+ export type Prop<T> = T | Binding | Selector<T> | AccessorChain<T> | GetSet<T>;
36
+
37
+ export type WritableProp<T> = Bind | AccessorChain<T>;
38
+
39
+ export interface DataRecord {
40
+ [prop: string]: any;
41
+ }
42
+
43
+ export interface Config {
44
+ [prop: string]: any;
45
+ }
46
+
47
+ export interface StructuredProp {
48
+ [prop: string]: Prop<any>;
49
+ }
50
+
51
+ /**
52
+ * Utility type that extracts the resolved value type from a Prop<T>.
53
+ * Used to derive the runtime type of structured props.
54
+ */
55
+ export type ResolveProp<P> =
56
+ P extends Selector<infer T>
57
+ ? T
58
+ : P extends AccessorChain<infer T>
59
+ ? T
60
+ : P extends GetSet<infer T>
61
+ ? T
62
+ : P extends Bind
63
+ ? any
64
+ : P extends Tpl
65
+ ? string
66
+ : P extends Expr
67
+ ? any
68
+ : P;
69
+
70
+ /**
71
+ * Utility type that resolves a structured prop object to its runtime value types.
72
+ * Transforms { name: StringProp, count: NumberProp } to { name: string, count: number }
73
+ */
74
+ export type ResolveStructuredPropType<S> = {
75
+ [K in keyof S]: ResolveProp<S[K]>;
76
+ };
77
+
78
+ /**
79
+ * Resolves the runtime value type from either a Prop<T> or a StructuredProp.
80
+ * Use this for generic widgets like ContentResolver and Validator where the
81
+ * input can be either a single prop or a structured object.
82
+ *
83
+ * - For Prop<T> (Selector, AccessorChain, GetSet), resolves to T
84
+ * - For bindings (Bind, Tpl, Expr), resolves to any/string/any
85
+ * - For structured objects, recursively resolves each property via ResolveStructuredProp
86
+ * - For literal values, returns them as-is
87
+ */
88
+ export type ResolvePropType<P> =
89
+ P extends Selector<infer T>
90
+ ? T
91
+ : P extends AccessorChain<infer T>
92
+ ? T
93
+ : P extends GetSet<infer T>
94
+ ? T
95
+ : P extends Bind
96
+ ? any
97
+ : P extends Tpl
98
+ ? string
99
+ : P extends Expr
100
+ ? any
101
+ : P extends object
102
+ ? ResolveStructuredPropType<P>
103
+ : P;
104
+
105
+ /**
106
+ * Generic structured prop type that provides type safety for params and their resolved values.
107
+ * Use with ContentResolver and similar widgets to type the onResolve callback params.
108
+ */
109
+ export type TypedStructuredProp<T extends Record<string, any>> = {
110
+ [K in keyof T]: Prop<T[K]>;
111
+ };
112
+
113
+ export type StringProp = Prop<string>;
114
+ export type StyleProp = Prop<string | React.CSSProperties> | StructuredProp;
115
+ export type NumberProp = Prop<number>;
116
+ export type BooleanProp = Prop<boolean>;
117
+ export type ClassProp = Prop<string> | StructuredProp;
118
+ export type RecordsProp = Prop<DataRecord[]>;
119
+ export type SortersProp = Prop<Sorter[]>;
120
+ export type UnknownProp = Prop<unknown>;
121
+ export type ModProp = StringProp | StructuredProp;
122
+
123
+ export type RecordAlias = string | { toString(): string };
124
+
125
+ export type SortDirection = "ASC" | "DESC";
126
+
127
+ export interface Sorter {
128
+ field?: string;
129
+ value?: (record: DataRecord) => any;
130
+ direction: SortDirection;
131
+ }
132
+
133
+ export interface CollatorOptions {
134
+ localeMatcher?: "lookup" | "best fit";
135
+ usage?: "sort" | "search";
136
+ sensitivity?: "base" | "accent" | "case" | "variant";
137
+ ignorePunctuation?: boolean;
138
+ numeric?: boolean;
139
+ caseFirst?: "upper" | "lower" | "false";
140
+ }
@@ -1,99 +1,99 @@
1
- import { TraversalStack } from "../util/TraversalStack";
2
- import { reverseSlice } from "../util/reverseSlice";
3
- import { Widget } from "./Widget";
4
-
5
- export type CxChild = Record<string, any> | React.ReactElement | Widget | CxChild[] | null | undefined;
6
-
7
- export class RenderingContext {
8
- options: any;
9
- exploreStack: any;
10
- prepareList: any[];
11
- cleanupList: any[];
12
- stacks: any;
13
- renderList: any;
14
-
15
- [key: string]: any;
16
-
17
- constructor(options?: any) {
18
- this.options = options || {};
19
- this.exploreStack = new TraversalStack();
20
- this.prepareList = [];
21
- this.cleanupList = [];
22
- this.stacks = {};
23
- this.renderList = new LinkedListsNode();
24
- }
25
-
26
- getStack(key: string) {
27
- let stack = this.stacks[key];
28
- if (!stack) stack = this.stacks[key] = [];
29
- return stack;
30
- }
31
-
32
- push(key: string, value: any) {
33
- let stack = this.getStack(key);
34
- stack.push(this[key]);
35
- return (this[key] = value);
36
- }
37
-
38
- pop(key: string) {
39
- let stack = this.getStack(key);
40
- return (this[key] = stack.pop());
41
- }
42
-
43
- pushNamedValue(key: string, name: string, value: any) {
44
- let stack = this.getStack(`${key}:${name}`);
45
- if (!this[key]) this[key] = {};
46
- stack.push(this[key][name]);
47
- return (this[key][name] = value);
48
- }
49
-
50
- popNamedValue(key: string, name: string) {
51
- let stack = this.getStack(`${key}:${name}`);
52
- return (this[key][name] = stack.pop());
53
- }
54
-
55
- get(key: string) {
56
- return this[key];
57
- }
58
-
59
- getRootRenderList() {
60
- let rl = this.renderList;
61
- while (rl.left) rl = rl.left;
62
- return rl;
63
- }
64
- }
65
-
66
- class LinkedListsNode {
67
- left?: LinkedListsNode;
68
- right?: LinkedListsNode;
69
- data: any[];
70
- reverseIndex?: number;
71
-
72
- constructor(left?: LinkedListsNode, right?: LinkedListsNode) {
73
- this.left = left;
74
- this.right = right;
75
- this.data = [];
76
- }
77
-
78
- insertLeft() {
79
- let node = new LinkedListsNode(this.left, this);
80
- if (this.left) this.left.right = node;
81
- this.left = node;
82
- return node;
83
- }
84
-
85
- insertRight() {
86
- let node = new LinkedListsNode(this, this.right);
87
- if (this.right) this.right.left = node;
88
- this.right = node;
89
- return node;
90
- }
91
-
92
- markReverseIndex() {
93
- this.reverseIndex = this.data.length;
94
- }
95
-
96
- reverse() {
97
- reverseSlice(this.data, this.reverseIndex!);
98
- }
99
- }
1
+ import { TraversalStack } from "../util/TraversalStack";
2
+ import { reverseSlice } from "../util/reverseSlice";
3
+ import { Widget } from "./Widget";
4
+
5
+ export type CxChild = Record<string, any> | React.ReactElement | Widget | CxChild[] | null | undefined;
6
+
7
+ export class RenderingContext {
8
+ options: any;
9
+ exploreStack: any;
10
+ prepareList: any[];
11
+ cleanupList: any[];
12
+ stacks: any;
13
+ renderList: any;
14
+
15
+ [key: string]: any;
16
+
17
+ constructor(options?: any) {
18
+ this.options = options || {};
19
+ this.exploreStack = new TraversalStack();
20
+ this.prepareList = [];
21
+ this.cleanupList = [];
22
+ this.stacks = {};
23
+ this.renderList = new LinkedListsNode();
24
+ }
25
+
26
+ getStack(key: string) {
27
+ let stack = this.stacks[key];
28
+ if (!stack) stack = this.stacks[key] = [];
29
+ return stack;
30
+ }
31
+
32
+ push(key: string, value: any) {
33
+ let stack = this.getStack(key);
34
+ stack.push(this[key]);
35
+ return (this[key] = value);
36
+ }
37
+
38
+ pop(key: string) {
39
+ let stack = this.getStack(key);
40
+ return (this[key] = stack.pop());
41
+ }
42
+
43
+ pushNamedValue(key: string, name: string, value: any) {
44
+ let stack = this.getStack(`${key}:${name}`);
45
+ if (!this[key]) this[key] = {};
46
+ stack.push(this[key][name]);
47
+ return (this[key][name] = value);
48
+ }
49
+
50
+ popNamedValue(key: string, name: string) {
51
+ let stack = this.getStack(`${key}:${name}`);
52
+ return (this[key][name] = stack.pop());
53
+ }
54
+
55
+ get(key: string) {
56
+ return this[key];
57
+ }
58
+
59
+ getRootRenderList() {
60
+ let rl = this.renderList;
61
+ while (rl.left) rl = rl.left;
62
+ return rl;
63
+ }
64
+ }
65
+
66
+ class LinkedListsNode {
67
+ left?: LinkedListsNode;
68
+ right?: LinkedListsNode;
69
+ data: any[];
70
+ reverseIndex?: number;
71
+
72
+ constructor(left?: LinkedListsNode, right?: LinkedListsNode) {
73
+ this.left = left;
74
+ this.right = right;
75
+ this.data = [];
76
+ }
77
+
78
+ insertLeft() {
79
+ let node = new LinkedListsNode(this.left, this);
80
+ if (this.left) this.left.right = node;
81
+ this.left = node;
82
+ return node;
83
+ }
84
+
85
+ insertRight() {
86
+ let node = new LinkedListsNode(this, this.right);
87
+ if (this.right) this.right.left = node;
88
+ this.right = node;
89
+ return node;
90
+ }
91
+
92
+ markReverseIndex() {
93
+ this.reverseIndex = this.data.length;
94
+ }
95
+
96
+ reverse() {
97
+ reverseSlice(this.data, this.reverseIndex!);
98
+ }
99
+ }
@@ -5,23 +5,14 @@ import { ArrayAdapter } from "./adapter/ArrayAdapter";
5
5
  import { UseParentLayout } from "./layout/UseParentLayout";
6
6
  import { getAccessor } from "../data/getAccessor";
7
7
  import { RenderingContext } from "./RenderingContext";
8
- import {
9
- Prop,
10
- StringProp,
11
- StructuredProp,
12
- RecordAlias,
13
- SortersProp,
14
- CollatorOptions,
15
- SortDirection,
16
- DataRecord,
17
- } from "./Prop";
8
+ import { Prop, StringProp, StructuredProp, RecordAlias, SortersProp, CollatorOptions, SortDirection } from "./Prop";
18
9
  import { Instance } from "./Instance";
19
10
  import { DataAdapter, DataAdapterRecord } from "./adapter/DataAdapter";
20
11
  import type { GroupAdapter } from "./adapter/GroupAdapter";
21
12
  import type { TreeAdapter } from "./adapter/TreeAdapter";
22
13
  import { Create } from "../util/Component";
23
14
 
24
- export interface RepeaterConfig<T = DataRecord> extends ContainerConfig {
15
+ export interface RepeaterConfig<T = any> extends ContainerConfig {
25
16
  /** An array of records to be displayed. */
26
17
  records?: Prop<T[]>;
27
18
 
@@ -82,7 +73,7 @@ export interface RepeaterConfig<T = DataRecord> extends ContainerConfig {
82
73
  | Create<typeof GroupAdapter>;
83
74
  }
84
75
 
85
- export class Repeater<Config extends RepeaterConfig = RepeaterConfig> extends ContainerBase<Config> {
76
+ export class Repeater<T = any> extends ContainerBase<RepeaterConfig<T>> {
86
77
  declare records?: any;
87
78
  recordsAccessor: any;
88
79
  declare recordAlias?: string;
package/src/ui/Rescope.ts CHANGED
@@ -1,49 +1,49 @@
1
- import { Widget } from "./Widget";
2
- import { PureContainerBase, PureContainerConfig } from "./PureContainer";
3
- import { Binding } from "../data/Binding";
4
- import { ZoomIntoPropertyView } from "../data/ZoomIntoPropertyView";
5
- import { StructuredInstanceDataAccessor } from "./StructuredInstanceDataAccessor";
6
- import { isObject } from "../util/isObject";
7
- import { StructuredProp } from "./Prop";
8
-
9
- export interface RescopeConfig extends PureContainerConfig {
10
- bind: string;
11
- rootName?: string;
12
- rootAlias?: string;
13
- data?: StructuredProp;
14
- }
15
-
16
- export class Rescope extends PureContainerBase<RescopeConfig> {
17
- declare bind: string;
18
- declare binding: any;
19
- declare rootAlias?: string;
20
- declare rootName: string;
21
- declare data?: any;
22
-
23
- init() {
24
- this.binding = Binding.get(this.bind);
25
- if (this.rootAlias) this.rootName = this.rootAlias;
26
- super.init();
27
- }
28
-
29
- initInstance(context: any, instance: any) {
30
- instance.store = new ZoomIntoPropertyView({
31
- store: instance.parentStore,
32
- binding: this.binding,
33
- rootName: this.rootName,
34
- nestedData: isObject(this.data)
35
- ? new StructuredInstanceDataAccessor({ instance, data: this.data, useParentStore: true })
36
- : undefined,
37
- });
38
- super.initInstance(context, instance);
39
- }
40
-
41
- applyParentStore(instance: any) {
42
- instance.store.setStore(instance.parentStore);
43
- }
44
- }
45
-
46
- Rescope.prototype.bind = "$page";
47
- Rescope.prototype.rootName = "$root";
48
-
49
- Widget.alias("rescope", Rescope);
1
+ import { Widget } from "./Widget";
2
+ import { PureContainerBase, PureContainerConfig } from "./PureContainer";
3
+ import { Binding } from "../data/Binding";
4
+ import { ZoomIntoPropertyView } from "../data/ZoomIntoPropertyView";
5
+ import { StructuredInstanceDataAccessor } from "./StructuredInstanceDataAccessor";
6
+ import { isObject } from "../util/isObject";
7
+ import { StructuredProp } from "./Prop";
8
+
9
+ export interface RescopeConfig extends PureContainerConfig {
10
+ bind: string;
11
+ rootName?: string;
12
+ rootAlias?: string;
13
+ data?: StructuredProp;
14
+ }
15
+
16
+ export class Rescope extends PureContainerBase<RescopeConfig> {
17
+ declare bind: string;
18
+ declare binding: any;
19
+ declare rootAlias?: string;
20
+ declare rootName: string;
21
+ declare data?: any;
22
+
23
+ init() {
24
+ this.binding = Binding.get(this.bind);
25
+ if (this.rootAlias) this.rootName = this.rootAlias;
26
+ super.init();
27
+ }
28
+
29
+ initInstance(context: any, instance: any) {
30
+ instance.store = new ZoomIntoPropertyView({
31
+ store: instance.parentStore,
32
+ binding: this.binding,
33
+ rootName: this.rootName,
34
+ nestedData: isObject(this.data)
35
+ ? new StructuredInstanceDataAccessor({ instance, data: this.data, useParentStore: true })
36
+ : undefined,
37
+ });
38
+ super.initInstance(context, instance);
39
+ }
40
+
41
+ applyParentStore(instance: any) {
42
+ instance.store.setStore(instance.parentStore);
43
+ }
44
+ }
45
+
46
+ Rescope.prototype.bind = "$page";
47
+ Rescope.prototype.rootName = "$root";
48
+
49
+ Widget.alias("rescope", Rescope);
@@ -1,32 +1,32 @@
1
- import { getSelector } from "../data/getSelector";
2
- import { StructuredDataAccessor } from "../data/NestedDataView";
3
-
4
- export class StructuredInstanceDataAccessor implements StructuredDataAccessor {
5
- instance: any;
6
- dataConfig: any;
7
- useParentStore: any;
8
- dataSelector: any;
9
-
10
- constructor(config: any) {
11
- this.instance = config.instance;
12
- this.dataConfig = config.data;
13
- this.useParentStore = config.useParentStore;
14
- this.dataSelector = getSelector(config.data);
15
- if (this.dataSelector.memoize) this.dataSelector = this.dataSelector.memoize();
16
- }
17
- getSelector() {
18
- return this.dataSelector;
19
- }
20
- get() {
21
- return this.dataSelector.get(this.instance.store.getData());
22
- }
23
- setItem(key: string, value: any): boolean {
24
- return this.instance.nestedDataSet(key, value, this.dataConfig, this.useParentStore);
25
- }
26
- containsKey(key: string) {
27
- return this.dataConfig.hasOwnProperty(key);
28
- }
29
- getKeys() {
30
- return Object.keys(this.dataConfig);
31
- }
32
- }
1
+ import { getSelector } from "../data/getSelector";
2
+ import { StructuredDataAccessor } from "../data/NestedDataView";
3
+
4
+ export class StructuredInstanceDataAccessor implements StructuredDataAccessor {
5
+ instance: any;
6
+ dataConfig: any;
7
+ useParentStore: any;
8
+ dataSelector: any;
9
+
10
+ constructor(config: any) {
11
+ this.instance = config.instance;
12
+ this.dataConfig = config.data;
13
+ this.useParentStore = config.useParentStore;
14
+ this.dataSelector = getSelector(config.data);
15
+ if (this.dataSelector.memoize) this.dataSelector = this.dataSelector.memoize();
16
+ }
17
+ getSelector() {
18
+ return this.dataSelector;
19
+ }
20
+ get() {
21
+ return this.dataSelector.get(this.instance.store.getData());
22
+ }
23
+ setItem(key: string, value: any): boolean {
24
+ return this.instance.nestedDataSet(key, value, this.dataConfig, this.useParentStore);
25
+ }
26
+ containsKey(key: string) {
27
+ return this.dataConfig.hasOwnProperty(key);
28
+ }
29
+ getKeys() {
30
+ return Object.keys(this.dataConfig);
31
+ }
32
+ }