cx 25.4.1 → 25.5.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 (138) hide show
  1. package/dist/charts.js +2 -2
  2. package/dist/data.js +17 -3
  3. package/dist/manifest.js +677 -677
  4. package/dist/ui.js +88 -61
  5. package/dist/widgets.js +13 -13
  6. package/package.json +1 -1
  7. package/src/charts/Legend.d.ts +45 -45
  8. package/src/charts/LegendEntry.js +128 -128
  9. package/src/charts/LegendEntry.scss +27 -27
  10. package/src/charts/PieChart.d.ts +92 -92
  11. package/src/charts/RangeMarker.js +6 -2
  12. package/src/charts/axis/Axis.d.ts +113 -113
  13. package/src/charts/axis/Axis.js +280 -280
  14. package/src/charts/axis/CategoryAxis.d.ts +30 -30
  15. package/src/charts/axis/CategoryAxis.js +241 -241
  16. package/src/charts/axis/NumericAxis.d.ts +46 -46
  17. package/src/charts/axis/NumericAxis.js +351 -351
  18. package/src/charts/axis/Stack.js +55 -55
  19. package/src/charts/axis/TimeAxis.d.ts +31 -28
  20. package/src/charts/axis/TimeAxis.js +611 -611
  21. package/src/charts/helpers/PointReducer.js +47 -47
  22. package/src/charts/helpers/SnapPointFinder.js +69 -69
  23. package/src/data/AugmentedViewBase.js +77 -75
  24. package/src/data/Binding.spec.js +69 -69
  25. package/src/data/ExposedRecordView.js +75 -70
  26. package/src/data/ExposedValueView.js +73 -72
  27. package/src/data/Expression.js +229 -229
  28. package/src/data/Expression.spec.js +229 -229
  29. package/src/data/Ref.d.ts +24 -24
  30. package/src/data/Ref.spec.js +79 -79
  31. package/src/data/StoreRef.spec.js +24 -24
  32. package/src/data/StringTemplate.js +92 -92
  33. package/src/data/StringTemplate.spec.js +132 -132
  34. package/src/data/StructuredDataAccessor.d.ts +7 -7
  35. package/src/data/StructuredSelector.js +132 -132
  36. package/src/data/SubscribableView.js +54 -54
  37. package/src/data/getAccessor.spec.js +11 -11
  38. package/src/data/getSelector.js +49 -49
  39. package/src/hooks/createLocalStorageRef.d.ts +3 -3
  40. package/src/hooks/createLocalStorageRef.js +20 -20
  41. package/src/index.scss +6 -6
  42. package/src/ui/Container.js +154 -183
  43. package/src/ui/Culture.d.ts +57 -57
  44. package/src/ui/Culture.js +139 -139
  45. package/src/ui/Cx.js +3 -3
  46. package/src/ui/DataProxy.js +45 -44
  47. package/src/ui/DetachedScope.js +98 -94
  48. package/src/ui/FocusManager.js +171 -171
  49. package/src/ui/Format.js +108 -108
  50. package/src/ui/HoverSync.js +147 -147
  51. package/src/ui/Instance.d.ts +1 -1
  52. package/src/ui/Instance.js +25 -16
  53. package/src/ui/IsolatedScope.js +30 -30
  54. package/src/ui/Repeater.d.ts +61 -61
  55. package/src/ui/Rescope.js +35 -31
  56. package/src/ui/Restate.js +167 -163
  57. package/src/ui/Widget.js +184 -200
  58. package/src/ui/adapter/ArrayAdapter.js +152 -142
  59. package/src/ui/adapter/TreeAdapter.js +101 -100
  60. package/src/ui/createFunctionalComponent.d.ts +1 -1
  61. package/src/ui/createFunctionalComponent.js +31 -36
  62. package/src/ui/layout/ContentPlaceholder.d.ts +19 -19
  63. package/src/ui/layout/ContentPlaceholder.js +105 -105
  64. package/src/ui/layout/ContentPlaceholder.spec.js +579 -579
  65. package/src/ui/layout/LabelsTopLayout.js +134 -134
  66. package/src/ui/layout/exploreChildren.d.ts +12 -15
  67. package/src/ui/layout/exploreChildren.js +27 -40
  68. package/src/util/Format.js +270 -270
  69. package/src/util/date/encodeDate.d.ts +1 -1
  70. package/src/util/date/encodeDate.js +8 -8
  71. package/src/util/date/encodeDateWithTimezoneOffset.d.ts +1 -1
  72. package/src/util/date/index.d.ts +11 -11
  73. package/src/util/date/index.js +11 -11
  74. package/src/util/date/parseDateInvariant.d.ts +3 -3
  75. package/src/util/date/parseDateInvariant.js +20 -20
  76. package/src/util/debounce.js +18 -18
  77. package/src/util/getSearchQueryPredicate.js +59 -59
  78. package/src/util/index.d.ts +51 -51
  79. package/src/util/index.js +54 -54
  80. package/src/util/isValidIdentifierName.d.ts +1 -1
  81. package/src/util/isValidIdentifierName.js +5 -5
  82. package/src/util/isValidIdentifierName.spec.js +33 -33
  83. package/src/util/scss/add-rules.scss +38 -38
  84. package/src/util/validatedDebounce.js +19 -19
  85. package/src/widgets/Button.js +118 -118
  86. package/src/widgets/CxCredit.scss +37 -37
  87. package/src/widgets/HighlightedSearchText.js +36 -36
  88. package/src/widgets/HighlightedSearchText.scss +18 -18
  89. package/src/widgets/List.scss +91 -91
  90. package/src/widgets/Sandbox.js +9 -8
  91. package/src/widgets/drag-drop/DropZone.js +214 -214
  92. package/src/widgets/form/Calendar.d.ts +86 -86
  93. package/src/widgets/form/Calendar.js +618 -618
  94. package/src/widgets/form/Calendar.scss +196 -196
  95. package/src/widgets/form/Checkbox.scss +127 -127
  96. package/src/widgets/form/ColorField.js +397 -397
  97. package/src/widgets/form/ColorField.scss +96 -96
  98. package/src/widgets/form/ColorPicker.scss +283 -283
  99. package/src/widgets/form/DateTimeField.js +576 -576
  100. package/src/widgets/form/DateTimePicker.js +392 -392
  101. package/src/widgets/form/LookupField.d.ts +179 -179
  102. package/src/widgets/form/LookupField.scss +219 -219
  103. package/src/widgets/form/MonthField.d.ts +99 -99
  104. package/src/widgets/form/MonthField.js +523 -523
  105. package/src/widgets/form/MonthPicker.d.ts +76 -76
  106. package/src/widgets/form/MonthPicker.js +641 -641
  107. package/src/widgets/form/MonthPicker.scss +118 -118
  108. package/src/widgets/form/NumberField.js +459 -459
  109. package/src/widgets/form/NumberField.scss +61 -61
  110. package/src/widgets/form/Radio.scss +121 -121
  111. package/src/widgets/form/Select.scss +99 -99
  112. package/src/widgets/form/Slider.scss +118 -118
  113. package/src/widgets/form/Switch.scss +140 -140
  114. package/src/widgets/form/TextArea.scss +43 -43
  115. package/src/widgets/form/TextField.js +290 -290
  116. package/src/widgets/form/TextField.scss +55 -55
  117. package/src/widgets/form/UploadButton.d.ts +34 -34
  118. package/src/widgets/form/variables.scss +353 -353
  119. package/src/widgets/grid/Grid.d.ts +442 -442
  120. package/src/widgets/grid/Grid.js +3414 -3414
  121. package/src/widgets/grid/GridRow.js +228 -228
  122. package/src/widgets/grid/TreeNode.d.ts +23 -23
  123. package/src/widgets/grid/TreeNode.scss +88 -88
  124. package/src/widgets/grid/variables.scss +133 -133
  125. package/src/widgets/nav/LinkButton.js +128 -128
  126. package/src/widgets/nav/Menu.scss +74 -74
  127. package/src/widgets/nav/Route.js +102 -106
  128. package/src/widgets/overlay/Dropdown.js +612 -612
  129. package/src/widgets/overlay/FlyweightTooltipTracker.js +39 -39
  130. package/src/widgets/overlay/Overlay.d.ts +73 -73
  131. package/src/widgets/overlay/Tooltip.js +1 -1
  132. package/src/widgets/overlay/Window.js +202 -202
  133. package/src/widgets/overlay/captureMouse.js +124 -124
  134. package/src/widgets/overlay/createHotPromiseWindowFactory.d.ts +18 -18
  135. package/src/widgets/overlay/createHotPromiseWindowFactory.js +56 -56
  136. package/src/widgets/overlay/index.d.ts +11 -11
  137. package/src/widgets/overlay/index.js +11 -11
  138. package/src/widgets/variables.scss +144 -144
package/src/ui/Restate.js CHANGED
@@ -1,163 +1,167 @@
1
- import { PureContainer } from "./PureContainer";
2
- import { Store } from "../data/Store";
3
- import { Cx } from "./Cx";
4
- import { VDOM } from "./VDOM";
5
- import { isObject } from "../util/isObject";
6
- import { isUndefined } from "../util/isUndefined";
7
- import { Binding } from "../data/Binding";
8
- import { StructuredSelector } from "../data/StructuredSelector";
9
- import { getCurrentCulture } from "./Culture";
10
-
11
- let persistenceCache = {};
12
-
13
- export class Restate extends PureContainer {
14
- declareData() {
15
- return super.declareData(...arguments, {
16
- deferredUntilIdle: undefined,
17
- idleTimeout: undefined,
18
- cacheKey: undefined,
19
- });
20
- }
21
-
22
- init() {
23
- this.container = PureContainer.create({
24
- type: PureContainer,
25
- items: this.children || this.items,
26
- layout: this.layout,
27
- controller: this.controller,
28
- outerLayout: this.outerLayout,
29
- useParentLayout: !this.detached,
30
- ws: this.ws,
31
- });
32
- this.privateDataSelector = new StructuredSelector({
33
- props: this.data || {},
34
- values: this.data,
35
- });
36
- delete this.items;
37
- delete this.children;
38
- delete this.controller;
39
- delete this.outerLayout;
40
- delete this.layout;
41
- if (this.useParentLayout == null) this.useParentLayout = !this.detached;
42
- super.init();
43
- }
44
-
45
- initSubStore(context, instance) {
46
- let { cacheKey } = instance.data;
47
- this.privateDataSelector.init(instance.store);
48
- instance.subStore = new RestateStore({
49
- store: instance.store,
50
- detached: this.detached,
51
- privateData: this.data || {},
52
- data: cacheKey ? persistenceCache[cacheKey] || {} : {},
53
- dataSelector: this.privateDataSelector.create(),
54
- onSet: (path, value) => instance.nestedDataSet(path, value, this.data),
55
- });
56
-
57
- instance.setStore = (store) => {
58
- instance.store = store;
59
- instance.subStore.setStore(store);
60
- };
61
-
62
- if (cacheKey) {
63
- instance.subscribeOnDestroy(() => {
64
- persistenceCache[cacheKey] = instance.subStore.getData();
65
- });
66
- }
67
- }
68
-
69
- explore(context, instance) {
70
- if (!instance.subStore) this.initSubStore(context, instance);
71
- if (instance.subStore.parentDataCheck()) instance.markShouldUpdate();
72
- instance.cultureInfo = this.culture ?? getCurrentCulture();
73
- if (instance.cache("cultureInfo", instance.culture)) instance.markShouldUpdate();
74
- super.explore(context, instance);
75
- }
76
-
77
- exploreItems(context, instance, items) {
78
- if (!this.detached) {
79
- instance.container = instance.getChild(context, this.container, "container", instance.subStore);
80
- instance.container.scheduleExploreIfVisible(context);
81
- instance.children = [instance.container];
82
- }
83
- }
84
-
85
- render(context, instance, key) {
86
- if (!this.detached) return instance.container.render(context);
87
-
88
- return (
89
- <Cx
90
- key={key}
91
- widget={this.container}
92
- parentInstance={instance}
93
- store={instance.subStore}
94
- subscribe
95
- options={this.options}
96
- onError={this.onError}
97
- deferredUntilIdle={instance.data.deferredUntilIdle}
98
- idleTimeout={instance.data.idleTimeout}
99
- immediate={this.immediate}
100
- cultureInfo={instance.cultureInfo}
101
- />
102
- );
103
- }
104
- }
105
-
106
- Restate.prototype.detached = false;
107
- Restate.prototype.waitForIdle = false;
108
- Restate.prototype.immediate = false;
109
- Restate.prototype.culture = null;
110
-
111
- export const PrivateStore = Restate;
112
-
113
- class RestateStore extends Store {
114
- constructor(config) {
115
- super(config);
116
- this.parentDataVersion = -1;
117
- }
118
-
119
- getData() {
120
- this.silently(() => {
121
- this.parentDataCheck();
122
- });
123
- return super.getData();
124
- }
125
-
126
- parentDataCheck() {
127
- if (this.parentDataVersion == this.store.meta.version) return false;
128
- this.parentDataVersion = this.store.meta.version;
129
- this.parentData = this.dataSelector(this.store.getData());
130
- return this.batch(() => {
131
- for (let key in this.parentData) {
132
- super.setItem(key, this.parentData[key]);
133
- }
134
- });
135
- }
136
-
137
- setItem(path, value) {
138
- let binding = Binding.get(path);
139
- let bindingRoot = binding.parts[0];
140
- if (!isObject(this.privateData) || !this.privateData.hasOwnProperty(bindingRoot)) {
141
- let changed = isUndefined(value) ? super.deleteItem(path) : super.setItem(path, value);
142
- return changed;
143
- }
144
-
145
- let newValue = value;
146
- if (binding.parts.length > 1) newValue = binding.set(this.getData(), value)[bindingRoot];
147
- this.onSet(bindingRoot, newValue);
148
- this.batch(() => {
149
- super.setItem(bindingRoot, newValue);
150
- this.parentDataCheck();
151
- });
152
- return true;
153
- }
154
-
155
- deleteItem(path) {
156
- return this.setItem(path, undefined);
157
- }
158
-
159
- doNotify() {
160
- if (!this.detached) this.store.notify();
161
- super.doNotify();
162
- }
163
- }
1
+ import { PureContainer } from "./PureContainer";
2
+ import { Store } from "../data/Store";
3
+ import { Cx } from "./Cx";
4
+ import { VDOM } from "./VDOM";
5
+ import { isObject } from "../util/isObject";
6
+ import { isUndefined } from "../util/isUndefined";
7
+ import { Binding } from "../data/Binding";
8
+ import { StructuredSelector } from "../data/StructuredSelector";
9
+ import { getCurrentCulture } from "./Culture";
10
+
11
+ let persistenceCache = {};
12
+
13
+ export class Restate extends PureContainer {
14
+ declareData() {
15
+ return super.declareData(...arguments, {
16
+ deferredUntilIdle: undefined,
17
+ idleTimeout: undefined,
18
+ cacheKey: undefined,
19
+ });
20
+ }
21
+
22
+ init() {
23
+ this.container = PureContainer.create({
24
+ type: PureContainer,
25
+ items: this.children || this.items,
26
+ layout: this.layout,
27
+ controller: this.controller,
28
+ outerLayout: this.outerLayout,
29
+ useParentLayout: !this.detached,
30
+ ws: this.ws,
31
+ });
32
+ this.privateDataSelector = new StructuredSelector({
33
+ props: this.data || {},
34
+ values: this.data,
35
+ });
36
+ delete this.items;
37
+ delete this.children;
38
+ delete this.controller;
39
+ delete this.outerLayout;
40
+ delete this.layout;
41
+ if (this.useParentLayout == null) this.useParentLayout = !this.detached;
42
+ super.init();
43
+ }
44
+
45
+ initSubStore(context, instance) {
46
+ let { cacheKey } = instance.data;
47
+ this.privateDataSelector.init(instance.store);
48
+ instance.subStore = new RestateStore({
49
+ store: instance.store,
50
+ detached: this.detached,
51
+ privateData: this.data || {},
52
+ data: cacheKey ? persistenceCache[cacheKey] || {} : {},
53
+ dataSelector: this.privateDataSelector.create(),
54
+ onSet: (path, value) => instance.nestedDataSet(path, value, this.data),
55
+ });
56
+
57
+ if (cacheKey) {
58
+ instance.subscribeOnDestroy(() => {
59
+ persistenceCache[cacheKey] = instance.subStore.getData();
60
+ });
61
+ }
62
+ }
63
+
64
+ applyParentStore(instance) {
65
+ if (instance.subStore) instance.subStore.setStore(instance.parentStore);
66
+ }
67
+
68
+ explore(context, instance) {
69
+ if (!instance.subStore) this.initSubStore(context, instance);
70
+ if (instance.subStore.parentDataCheck()) instance.markShouldUpdate();
71
+ instance.cultureInfo = this.culture ?? getCurrentCulture();
72
+ if (instance.cache("cultureInfo", instance.culture)) instance.markShouldUpdate();
73
+ super.explore(context, instance);
74
+ }
75
+
76
+ exploreItems(context, instance, items) {
77
+ if (!this.detached) {
78
+ instance.container = instance.getChild(context, this.container, "container", instance.subStore);
79
+ instance.container.scheduleExploreIfVisible(context);
80
+ instance.children = [instance.container];
81
+ }
82
+ }
83
+
84
+ render(context, instance, key) {
85
+ if (!this.detached) return instance.container.render(context);
86
+
87
+ return (
88
+ <Cx
89
+ key={key}
90
+ widget={this.container}
91
+ parentInstance={instance}
92
+ store={instance.subStore}
93
+ subscribe
94
+ options={this.options}
95
+ onError={this.onError}
96
+ deferredUntilIdle={instance.data.deferredUntilIdle}
97
+ idleTimeout={instance.data.idleTimeout}
98
+ immediate={this.immediate}
99
+ cultureInfo={instance.cultureInfo}
100
+ />
101
+ );
102
+ }
103
+ }
104
+
105
+ Restate.prototype.detached = false;
106
+ Restate.prototype.waitForIdle = false;
107
+ Restate.prototype.immediate = false;
108
+ Restate.prototype.culture = null;
109
+
110
+ export const PrivateStore = Restate;
111
+
112
+ class RestateStore extends Store {
113
+ constructor(config) {
114
+ super(config);
115
+ this.parentDataVersion = -1;
116
+ }
117
+
118
+ getData() {
119
+ this.silently(() => {
120
+ this.parentDataCheck();
121
+ });
122
+ return super.getData();
123
+ }
124
+
125
+ parentDataCheck() {
126
+ if (this.parentDataVersion == this.store.meta.version) return false;
127
+ this.parentDataVersion = this.store.meta.version;
128
+ this.parentData = this.dataSelector(this.store.getData());
129
+ return this.batch(() => {
130
+ for (let key in this.parentData) {
131
+ super.setItem(key, this.parentData[key]);
132
+ }
133
+ });
134
+ }
135
+
136
+ setItem(path, value) {
137
+ let binding = Binding.get(path);
138
+ let bindingRoot = binding.parts[0];
139
+ if (!isObject(this.privateData) || !this.privateData.hasOwnProperty(bindingRoot)) {
140
+ let changed = isUndefined(value) ? super.deleteItem(path) : super.setItem(path, value);
141
+ return changed;
142
+ }
143
+
144
+ let newValue = value;
145
+ if (binding.parts.length > 1) newValue = binding.set(this.getData(), value)[bindingRoot];
146
+ this.onSet(bindingRoot, newValue);
147
+ this.batch(() => {
148
+ super.setItem(bindingRoot, newValue);
149
+ this.parentDataCheck();
150
+ });
151
+ return true;
152
+ }
153
+
154
+ deleteItem(path) {
155
+ return this.setItem(path, undefined);
156
+ }
157
+
158
+ doNotify() {
159
+ if (!this.detached) this.store.notify();
160
+ super.doNotify();
161
+ }
162
+
163
+ // override the default implementation to avoid meta overwrites
164
+ setStore(store) {
165
+ this.store = store;
166
+ }
167
+ }