cx 26.0.13 → 26.1.0

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 (251) hide show
  1. package/build/ui/VDOM.d.ts +1 -20
  2. package/build/ui/VDOM.js +1 -3
  3. package/build/ui/Widget.d.ts +1 -1
  4. package/build/ui/app/startAppLoop.js +2 -10
  5. package/build/widgets/form/Checkbox.d.ts +0 -1
  6. package/build/widgets/form/Checkbox.js +1 -0
  7. package/build/widgets/form/ColorField.d.ts +0 -1
  8. package/build/widgets/form/ColorField.js +2 -2
  9. package/build/widgets/form/DateTimeField.d.ts +0 -2
  10. package/build/widgets/form/DateTimeField.js +1 -0
  11. package/build/widgets/form/DateTimePicker.d.ts +0 -2
  12. package/build/widgets/form/DateTimePicker.js +1 -0
  13. package/build/widgets/form/Radio.d.ts +0 -1
  14. package/build/widgets/form/Slider.js +9 -1
  15. package/build/widgets/form/Switch.d.ts +0 -1
  16. package/build/widgets/form/Switch.js +1 -1
  17. package/build/widgets/form/Wheel.d.ts +0 -1
  18. package/build/widgets/grid/Grid.d.ts +0 -2
  19. package/build/widgets/grid/GridCellEditor.js +3 -1
  20. package/build/widgets/overlay/Overlay.d.ts +3 -0
  21. package/build/widgets/overlay/Overlay.js +3 -2
  22. package/build/widgets/overlay/createHotPromiseWindowFactory.js +0 -1
  23. package/dist/manifest.js +810 -810
  24. package/dist/ui.js +3 -10
  25. package/dist/widgets.js +18 -7
  26. package/package.json +9 -8
  27. package/src/charts/Chart.ts +108 -108
  28. package/src/data/ArrayElementView.ts +90 -90
  29. package/src/data/AugmentedViewBase.ts +88 -88
  30. package/src/data/Binding.ts +104 -104
  31. package/src/data/ExposedRecordView.ts +95 -95
  32. package/src/data/ExposedValueView.ts +89 -89
  33. package/src/data/Expression.spec.ts +229 -229
  34. package/src/data/Expression.ts +233 -233
  35. package/src/data/Grouper.spec.ts +57 -57
  36. package/src/data/Grouper.ts +158 -158
  37. package/src/data/NestedDataView.ts +43 -43
  38. package/src/data/ReadOnlyDataView.ts +39 -39
  39. package/src/data/Ref.ts +104 -104
  40. package/src/data/Selector.ts +10 -10
  41. package/src/data/Store.ts +52 -52
  42. package/src/data/StoreProxy.ts +19 -19
  43. package/src/data/StoreRef.ts +66 -66
  44. package/src/data/StringTemplate.spec.ts +132 -132
  45. package/src/data/StringTemplate.ts +93 -93
  46. package/src/data/StructuredSelector.spec.ts +113 -113
  47. package/src/data/StructuredSelector.ts +146 -146
  48. package/src/data/SubscribableView.ts +63 -63
  49. package/src/data/ZoomIntoPropertyView.spec.ts +64 -64
  50. package/src/data/ZoomIntoPropertyView.ts +45 -45
  51. package/src/data/computable.spec.ts +87 -87
  52. package/src/data/createStructuredSelector.ts +62 -62
  53. package/src/data/getAccessor.spec.ts +11 -11
  54. package/src/data/getAccessor.ts +74 -74
  55. package/src/data/getSelector.spec.ts +43 -43
  56. package/src/data/getSelector.ts +66 -66
  57. package/src/data/ops/filter.spec.ts +35 -35
  58. package/src/data/ops/filter.ts +9 -9
  59. package/src/data/ops/merge.ts +13 -13
  60. package/src/data/ops/removeTreeNodes.spec.ts +37 -37
  61. package/src/data/ops/updateArray.spec.ts +69 -69
  62. package/src/data/test-types.ts +7 -7
  63. package/src/hooks/useTrigger.ts +26 -26
  64. package/src/index.scss +6 -6
  65. package/src/jsx-dev-runtime.ts +4 -4
  66. package/src/jsx-runtime.spec.tsx +38 -9
  67. package/src/svg/BoundedObject.ts +101 -101
  68. package/src/svg/util/Rect.ts +105 -105
  69. package/src/ui/CSSHelper.ts +17 -17
  70. package/src/ui/Culture.ts +159 -159
  71. package/src/ui/DataProxy.ts +55 -55
  72. package/src/ui/FocusManager.ts +171 -171
  73. package/src/ui/Instance.ts +866 -866
  74. package/src/ui/Prop.ts +140 -140
  75. package/src/ui/RenderingContext.ts +99 -99
  76. package/src/ui/Rescope.ts +49 -49
  77. package/src/ui/StructuredInstanceDataAccessor.ts +32 -32
  78. package/src/ui/VDOM.ts +1 -34
  79. package/src/ui/adapter/ArrayAdapter.spec.ts +55 -55
  80. package/src/ui/adapter/TreeAdapter.spec.ts +76 -76
  81. package/src/ui/adapter/TreeAdapter.ts +185 -185
  82. package/src/ui/app/History.ts +133 -133
  83. package/src/ui/app/Url.spec.ts +50 -50
  84. package/src/ui/app/startAppLoop.tsx +5 -9
  85. package/src/ui/app/startHotAppLoop.ts +41 -41
  86. package/src/ui/layout/Content.ts +30 -30
  87. package/src/ui/layout/FirstVisibleChildLayout.ts +60 -60
  88. package/src/util/Console.ts +13 -13
  89. package/src/util/Format.spec.ts +69 -69
  90. package/src/util/Format.ts +267 -267
  91. package/src/util/addEventListenerWithOptions.ts +41 -41
  92. package/src/util/browserSupportsPassiveEventHandlers.ts +20 -20
  93. package/src/util/color/rgbToHsl.ts +35 -35
  94. package/src/util/getActiveElement.ts +4 -4
  95. package/src/util/hasKey.ts +18 -18
  96. package/src/util/index.ts +55 -55
  97. package/src/util/innerTextTrim.ts +10 -10
  98. package/src/util/isArray.ts +3 -3
  99. package/src/util/isDataRecord.ts +5 -5
  100. package/src/util/isDefined.ts +3 -3
  101. package/src/util/isString.ts +3 -3
  102. package/src/widgets/DocumentTitle.ts +95 -95
  103. package/src/widgets/Sandbox.ts +103 -103
  104. package/src/widgets/autoFocus.ts +9 -9
  105. package/src/widgets/cx.ts +63 -63
  106. package/src/widgets/form/Checkbox.tsx +0 -1
  107. package/src/widgets/form/ColorField.tsx +15 -12
  108. package/src/widgets/form/DateTimeField.tsx +0 -2
  109. package/src/widgets/form/DateTimePicker.tsx +0 -2
  110. package/src/widgets/form/Radio.tsx +0 -1
  111. package/src/widgets/form/Slider.tsx +12 -4
  112. package/src/widgets/form/Switch.tsx +2 -3
  113. package/src/widgets/form/Wheel.tsx +0 -1
  114. package/src/widgets/grid/Grid.tsx +0 -1
  115. package/src/widgets/grid/GridCell.ts +143 -143
  116. package/src/widgets/grid/GridCellEditor.tsx +7 -1
  117. package/src/widgets/icons/calendar.tsx +17 -17
  118. package/src/widgets/icons/check.tsx +13 -13
  119. package/src/widgets/icons/clear.tsx +15 -15
  120. package/src/widgets/icons/close.tsx +20 -20
  121. package/src/widgets/icons/cx.tsx +38 -38
  122. package/src/widgets/icons/drop-down.tsx +15 -15
  123. package/src/widgets/icons/file.tsx +13 -13
  124. package/src/widgets/icons/folder-open.tsx +15 -15
  125. package/src/widgets/icons/folder.tsx +13 -13
  126. package/src/widgets/icons/forward.tsx +22 -22
  127. package/src/widgets/icons/loading.tsx +24 -24
  128. package/src/widgets/icons/menu.tsx +17 -17
  129. package/src/widgets/icons/pixel-picker.tsx +18 -18
  130. package/src/widgets/icons/search.tsx +13 -13
  131. package/src/widgets/icons/sort-asc.tsx +14 -14
  132. package/src/widgets/icons/square.tsx +18 -18
  133. package/src/widgets/nav/Route.ts +142 -142
  134. package/src/widgets/overlay/Dropdown.tsx +762 -762
  135. package/src/widgets/overlay/MsgBox.tsx +141 -141
  136. package/src/widgets/overlay/Overlay.tsx +5 -1
  137. package/src/widgets/overlay/Toast.ts +111 -111
  138. package/src/widgets/overlay/Window.tsx +299 -299
  139. package/src/widgets/overlay/alerts.ts +46 -46
  140. package/src/widgets/overlay/captureMouse.ts +195 -195
  141. package/src/widgets/overlay/createHotPromiseWindowFactory.ts +0 -1
  142. package/src/widgets/overlay/index.d.ts +11 -11
  143. package/src/widgets/overlay/index.ts +11 -11
  144. package/src/widgets/overlay/tooltip-ops.ts +173 -173
  145. package/build/data/ArrayElementView.spec.d.ts +0 -1
  146. package/build/data/ArrayElementView.spec.js +0 -81
  147. package/build/data/Binding.spec.d.ts +0 -1
  148. package/build/data/Binding.spec.js +0 -61
  149. package/build/data/Expression.spec.d.ts +0 -1
  150. package/build/data/Expression.spec.js +0 -196
  151. package/build/data/Grouper.spec.d.ts +0 -1
  152. package/build/data/Grouper.spec.js +0 -48
  153. package/build/data/Ref.spec.d.ts +0 -1
  154. package/build/data/Ref.spec.js +0 -72
  155. package/build/data/Store.spec.d.ts +0 -1
  156. package/build/data/Store.spec.js +0 -19
  157. package/build/data/StoreRef.spec.d.ts +0 -1
  158. package/build/data/StoreRef.spec.js +0 -22
  159. package/build/data/StringTemplate.spec.d.ts +0 -1
  160. package/build/data/StringTemplate.spec.js +0 -112
  161. package/build/data/StructuredSelector.spec.d.ts +0 -1
  162. package/build/data/StructuredSelector.spec.js +0 -102
  163. package/build/data/View.spec.d.ts +0 -1
  164. package/build/data/View.spec.js +0 -44
  165. package/build/data/ZoomIntoPropertyView.spec.d.ts +0 -1
  166. package/build/data/ZoomIntoPropertyView.spec.js +0 -54
  167. package/build/data/comparer.spec.d.ts +0 -1
  168. package/build/data/comparer.spec.js +0 -50
  169. package/build/data/computable.spec.d.ts +0 -1
  170. package/build/data/computable.spec.js +0 -56
  171. package/build/data/createAccessorModelProxy.spec.d.ts +0 -1
  172. package/build/data/createAccessorModelProxy.spec.js +0 -30
  173. package/build/data/createStructuredSelector.spec.d.ts +0 -1
  174. package/build/data/createStructuredSelector.spec.js +0 -42
  175. package/build/data/diff/diffs.spec.d.ts +0 -1
  176. package/build/data/diff/diffs.spec.js +0 -45
  177. package/build/data/getAccessor.spec.d.ts +0 -1
  178. package/build/data/getAccessor.spec.js +0 -10
  179. package/build/data/getSelector.spec.d.ts +0 -1
  180. package/build/data/getSelector.spec.js +0 -36
  181. package/build/data/ops/append.spec.d.ts +0 -1
  182. package/build/data/ops/append.spec.js +0 -24
  183. package/build/data/ops/filter.spec.d.ts +0 -1
  184. package/build/data/ops/filter.spec.js +0 -25
  185. package/build/data/ops/findTreeNode.spec.d.ts +0 -1
  186. package/build/data/ops/findTreeNode.spec.js +0 -20
  187. package/build/data/ops/merge.spec.d.ts +0 -1
  188. package/build/data/ops/merge.spec.js +0 -23
  189. package/build/data/ops/removeTreeNodes.spec.d.ts +0 -1
  190. package/build/data/ops/removeTreeNodes.spec.js +0 -35
  191. package/build/data/ops/updateArray.spec.d.ts +0 -1
  192. package/build/data/ops/updateArray.spec.js +0 -33
  193. package/build/data/ops/updateTree.spec.d.ts +0 -1
  194. package/build/data/ops/updateTree.spec.js +0 -44
  195. package/build/hooks/invokeCallback.spec.d.ts +0 -1
  196. package/build/hooks/invokeCallback.spec.js +0 -44
  197. package/build/hooks/resolveCallback.spec.d.ts +0 -1
  198. package/build/hooks/resolveCallback.spec.js +0 -35
  199. package/build/hooks/store.spec.d.ts +0 -1
  200. package/build/hooks/store.spec.js +0 -48
  201. package/build/hooks/useTrigger.spec.d.ts +0 -1
  202. package/build/hooks/useTrigger.spec.js +0 -59
  203. package/build/ui/Controller.spec.d.ts +0 -1
  204. package/build/ui/Controller.spec.js +0 -247
  205. package/build/ui/Cx.spec.d.ts +0 -1
  206. package/build/ui/Cx.spec.js +0 -153
  207. package/build/ui/DataProxy.spec.d.ts +0 -1
  208. package/build/ui/DataProxy.spec.js +0 -208
  209. package/build/ui/IsolatedScope.spec.d.ts +0 -1
  210. package/build/ui/IsolatedScope.spec.js +0 -42
  211. package/build/ui/PureContainer.spec.d.ts +0 -1
  212. package/build/ui/PureContainer.spec.js +0 -149
  213. package/build/ui/Repeater.spec.d.ts +0 -1
  214. package/build/ui/Repeater.spec.js +0 -109
  215. package/build/ui/Rescope.spec.d.ts +0 -1
  216. package/build/ui/Rescope.spec.js +0 -134
  217. package/build/ui/Restate.spec.d.ts +0 -1
  218. package/build/ui/Restate.spec.js +0 -257
  219. package/build/ui/adapter/ArrayAdapter.spec.d.ts +0 -1
  220. package/build/ui/adapter/ArrayAdapter.spec.js +0 -44
  221. package/build/ui/adapter/TreeAdapter.spec.d.ts +0 -1
  222. package/build/ui/adapter/TreeAdapter.spec.js +0 -71
  223. package/build/ui/app/Url.spec.d.ts +0 -1
  224. package/build/ui/app/Url.spec.js +0 -43
  225. package/build/ui/createFunctionalComponent.spec.d.ts +0 -1
  226. package/build/ui/createFunctionalComponent.spec.js +0 -272
  227. package/build/ui/layout/ContentPlaceholder.spec.d.ts +0 -1
  228. package/build/ui/layout/ContentPlaceholder.spec.js +0 -333
  229. package/build/ui/layout/FirstVisibleChildLayout.spec.d.ts +0 -1
  230. package/build/ui/layout/FirstVisibleChildLayout.spec.js +0 -101
  231. package/build/util/Format.spec.d.ts +0 -1
  232. package/build/util/Format.spec.js +0 -58
  233. package/build/util/TraversalStack.spec.d.ts +0 -1
  234. package/build/util/TraversalStack.spec.js +0 -43
  235. package/build/util/date/upperBoundCheck.spec.d.ts +0 -1
  236. package/build/util/date/upperBoundCheck.spec.js +0 -22
  237. package/build/util/getSearchQueryPredicate.spec.d.ts +0 -1
  238. package/build/util/getSearchQueryPredicate.spec.js +0 -33
  239. package/build/util/isValidIdentifierName.spec.d.ts +0 -1
  240. package/build/util/isValidIdentifierName.spec.js +0 -28
  241. package/build/util/routeAppend.spec.d.ts +0 -1
  242. package/build/util/routeAppend.spec.js +0 -14
  243. package/build/widgets/AccessorBindings.spec.d.ts +0 -1
  244. package/build/widgets/AccessorBindings.spec.js +0 -40
  245. package/build/widgets/HtmlElement.spec.d.ts +0 -1
  246. package/build/widgets/HtmlElement.spec.js +0 -38
  247. package/build/widgets/form/ValidationGroup.spec.d.ts +0 -1
  248. package/build/widgets/form/ValidationGroup.spec.js +0 -62
  249. package/build/widgets/nav/Route.spec.d.ts +0 -1
  250. package/build/widgets/nav/Route.spec.js +0 -15
  251. package/dist/manifest.d.ts +0 -1443
package/src/ui/Prop.ts CHANGED
@@ -1,140 +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> =
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
+ 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
+ }
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
+ }
package/src/ui/VDOM.ts CHANGED
@@ -1,34 +1 @@
1
- // @ts-expect-error
2
- import { VDOM as vdom } from "cx-react";
3
-
4
- import type * as React from "react";
5
- import type { Component } from "react";
6
- import type {
7
- unstable_batchedUpdates,
8
- render,
9
- findDOMNode,
10
- createPortal,
11
- unstable_renderSubtreeIntoContainer,
12
- hydrate,
13
- unmountComponentAtNode,
14
- } from "react-dom";
15
- import type { createRoot, hydrateRoot, Root } from "react-dom/client";
16
-
17
- export interface VDOMType extends Omit<typeof React, "default"> {
18
- allowRenderOutputCaching?: boolean;
19
- Component: typeof Component;
20
-
21
- DOM: {
22
- unstable_batchedUpdates: typeof unstable_batchedUpdates;
23
- render: typeof render;
24
- findDOMNode: typeof findDOMNode;
25
- createPortal: typeof createPortal;
26
- createRoot: typeof createRoot;
27
- hydrateRoot: typeof hydrateRoot;
28
- hydrate: typeof hydrate;
29
- unmountComponentAtNode: typeof unmountComponentAtNode;
30
- unstable_renderSubtreeIntoContainer: typeof unstable_renderSubtreeIntoContainer;
31
- };
32
- }
33
-
34
- export const VDOM = vdom as VDOMType;
1
+ export { VDOM } from "cx-react";