cx 25.2.1 → 25.4.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 (116) hide show
  1. package/dist/charts.css +8 -0
  2. package/dist/charts.js +29 -2
  3. package/dist/manifest.js +682 -682
  4. package/dist/widgets.js +7 -2
  5. package/package.json +1 -1
  6. package/src/charts/Legend.d.ts +18 -0
  7. package/src/charts/Legend.js +22 -2
  8. package/src/charts/Legend.scss +8 -0
  9. package/src/charts/LegendEntry.js +128 -128
  10. package/src/charts/LegendEntry.scss +27 -27
  11. package/src/charts/PieChart.d.ts +92 -92
  12. package/src/charts/PieChart.js +1 -0
  13. package/src/charts/axis/Axis.d.ts +113 -113
  14. package/src/charts/axis/Axis.js +280 -280
  15. package/src/charts/axis/CategoryAxis.d.ts +30 -30
  16. package/src/charts/axis/CategoryAxis.js +241 -241
  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 +28 -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/core.d.ts +40 -1
  24. package/src/data/Binding.spec.js +69 -69
  25. package/src/data/Expression.js +229 -229
  26. package/src/data/Expression.spec.js +229 -229
  27. package/src/data/StringTemplate.js +92 -92
  28. package/src/data/StringTemplate.spec.js +132 -132
  29. package/src/data/StructuredSelector.js +132 -132
  30. package/src/data/View.d.ts +36 -12
  31. package/src/data/getAccessor.spec.js +11 -11
  32. package/src/data/getSelector.js +49 -49
  33. package/src/hooks/createLocalStorageRef.d.ts +3 -3
  34. package/src/hooks/createLocalStorageRef.js +20 -20
  35. package/src/index.scss +6 -6
  36. package/src/ui/Culture.d.ts +57 -57
  37. package/src/ui/Culture.js +139 -139
  38. package/src/ui/FocusManager.js +171 -171
  39. package/src/ui/Format.js +108 -108
  40. package/src/ui/HoverSync.js +147 -147
  41. package/src/ui/Instance.d.ts +72 -72
  42. package/src/ui/Instance.js +614 -614
  43. package/src/ui/Repeater.d.ts +61 -61
  44. package/src/ui/ResizeManager.d.ts +4 -3
  45. package/src/ui/index.d.ts +42 -42
  46. package/src/ui/layout/ContentPlaceholder.d.ts +19 -19
  47. package/src/ui/layout/ContentPlaceholder.js +105 -105
  48. package/src/ui/layout/ContentPlaceholder.spec.js +579 -579
  49. package/src/ui/layout/LabelsTopLayout.js +134 -134
  50. package/src/util/Format.js +270 -270
  51. package/src/util/date/encodeDate.d.ts +1 -1
  52. package/src/util/date/encodeDate.js +8 -8
  53. package/src/util/date/encodeDateWithTimezoneOffset.d.ts +1 -1
  54. package/src/util/date/index.d.ts +11 -11
  55. package/src/util/date/index.js +11 -11
  56. package/src/util/date/parseDateInvariant.d.ts +3 -3
  57. package/src/util/date/parseDateInvariant.js +20 -20
  58. package/src/util/debounce.d.ts +3 -4
  59. package/src/util/getSearchQueryPredicate.js +59 -59
  60. package/src/util/index.d.ts +51 -51
  61. package/src/util/index.js +54 -54
  62. package/src/util/isValidIdentifierName.d.ts +1 -1
  63. package/src/util/isValidIdentifierName.js +5 -5
  64. package/src/util/isValidIdentifierName.spec.js +33 -33
  65. package/src/util/scss/add-rules.scss +38 -38
  66. package/src/widgets/CxCredit.scss +37 -37
  67. package/src/widgets/HighlightedSearchText.js +36 -36
  68. package/src/widgets/HighlightedSearchText.scss +18 -18
  69. package/src/widgets/HtmlElement.d.ts +4 -0
  70. package/src/widgets/List.scss +91 -91
  71. package/src/widgets/drag-drop/DropZone.js +214 -214
  72. package/src/widgets/form/Calendar.js +618 -618
  73. package/src/widgets/form/Calendar.scss +196 -196
  74. package/src/widgets/form/Checkbox.scss +127 -127
  75. package/src/widgets/form/ColorField.js +397 -397
  76. package/src/widgets/form/ColorField.scss +96 -96
  77. package/src/widgets/form/ColorPicker.js +8 -3
  78. package/src/widgets/form/ColorPicker.scss +283 -283
  79. package/src/widgets/form/DateTimeField.js +576 -576
  80. package/src/widgets/form/DateTimePicker.js +392 -392
  81. package/src/widgets/form/LookupField.d.ts +179 -179
  82. package/src/widgets/form/LookupField.scss +219 -219
  83. package/src/widgets/form/MonthField.d.ts +99 -99
  84. package/src/widgets/form/MonthField.js +523 -523
  85. package/src/widgets/form/MonthPicker.d.ts +76 -76
  86. package/src/widgets/form/MonthPicker.js +641 -641
  87. package/src/widgets/form/MonthPicker.scss +118 -118
  88. package/src/widgets/form/NumberField.js +459 -459
  89. package/src/widgets/form/NumberField.scss +61 -61
  90. package/src/widgets/form/Radio.scss +121 -121
  91. package/src/widgets/form/Select.scss +99 -99
  92. package/src/widgets/form/Slider.scss +118 -118
  93. package/src/widgets/form/Switch.scss +140 -140
  94. package/src/widgets/form/TextArea.scss +43 -43
  95. package/src/widgets/form/TextField.js +290 -290
  96. package/src/widgets/form/TextField.scss +55 -55
  97. package/src/widgets/form/UploadButton.d.ts +34 -34
  98. package/src/widgets/form/variables.scss +353 -353
  99. package/src/widgets/grid/Grid.d.ts +442 -442
  100. package/src/widgets/grid/Grid.js +3414 -3414
  101. package/src/widgets/grid/GridRow.js +228 -228
  102. package/src/widgets/grid/TreeNode.d.ts +23 -23
  103. package/src/widgets/grid/TreeNode.scss +88 -88
  104. package/src/widgets/grid/variables.scss +133 -133
  105. package/src/widgets/nav/LinkButton.js +128 -128
  106. package/src/widgets/nav/Menu.scss +74 -74
  107. package/src/widgets/overlay/Dropdown.js +612 -612
  108. package/src/widgets/overlay/FlyweightTooltipTracker.js +39 -39
  109. package/src/widgets/overlay/Overlay.d.ts +73 -73
  110. package/src/widgets/overlay/Window.js +202 -202
  111. package/src/widgets/overlay/captureMouse.js +124 -124
  112. package/src/widgets/overlay/createHotPromiseWindowFactory.d.ts +18 -18
  113. package/src/widgets/overlay/createHotPromiseWindowFactory.js +56 -56
  114. package/src/widgets/overlay/index.d.ts +11 -11
  115. package/src/widgets/overlay/index.js +11 -11
  116. package/src/widgets/variables.scss +144 -144
@@ -1,47 +1,47 @@
1
- import { PureContainer } from "../../ui/PureContainer";
2
-
3
- export class PointReducer extends PureContainer {
4
- explore(context, instance) {
5
- let parentPointReducer = context.pointReducer;
6
- instance.parentPointTracker = parentPointReducer;
7
-
8
- if (!instance.pointReducer) {
9
- let onMap = this.onMap && instance.getCallback("onMap");
10
- let accumulator = {};
11
- instance.resetAccumulator = () => {
12
- accumulator = {};
13
- if (this.onInitAccumulator) instance.invoke("onInitAccumulator", accumulator, instance);
14
- };
15
-
16
- let pointFilter = null;
17
- if (this.onCreatePointFilter) pointFilter = instance.invoke("onCreatePointFilter", instance);
18
-
19
- instance.pointReducer = (x, y, name, data, array, index) => {
20
- if (!pointFilter || pointFilter(x, y, name, data, array, index))
21
- onMap(accumulator, x, y, name, data, array, index);
22
- if (parentPointReducer) parentPointReducer(x, y, name, data, array, index);
23
- };
24
- instance.write = () => {
25
- if (this.onReduce) instance.invoke("onReduce", accumulator, instance);
26
- };
27
- }
28
-
29
- instance.resetAccumulator();
30
- context.push("pointReducer", instance.pointReducer);
31
-
32
- super.explore(context, instance);
33
- }
34
-
35
- exploreCleanup(context, instance) {
36
- context.pop("pointReducer");
37
- }
38
-
39
- prepare(context, instance) {
40
- context.push("pointReducer", instance.pointReducer);
41
- }
42
-
43
- prepareCleanup(context, instance) {
44
- context.pop("pointReducer");
45
- instance.write();
46
- }
47
- }
1
+ import { PureContainer } from "../../ui/PureContainer";
2
+
3
+ export class PointReducer extends PureContainer {
4
+ explore(context, instance) {
5
+ let parentPointReducer = context.pointReducer;
6
+ instance.parentPointTracker = parentPointReducer;
7
+
8
+ if (!instance.pointReducer) {
9
+ let onMap = this.onMap && instance.getCallback("onMap");
10
+ let accumulator = {};
11
+ instance.resetAccumulator = () => {
12
+ accumulator = {};
13
+ if (this.onInitAccumulator) instance.invoke("onInitAccumulator", accumulator, instance);
14
+ };
15
+
16
+ let pointFilter = null;
17
+ if (this.onCreatePointFilter) pointFilter = instance.invoke("onCreatePointFilter", instance);
18
+
19
+ instance.pointReducer = (x, y, name, data, array, index) => {
20
+ if (!pointFilter || pointFilter(x, y, name, data, array, index))
21
+ onMap(accumulator, x, y, name, data, array, index);
22
+ if (parentPointReducer) parentPointReducer(x, y, name, data, array, index);
23
+ };
24
+ instance.write = () => {
25
+ if (this.onReduce) instance.invoke("onReduce", accumulator, instance);
26
+ };
27
+ }
28
+
29
+ instance.resetAccumulator();
30
+ context.push("pointReducer", instance.pointReducer);
31
+
32
+ super.explore(context, instance);
33
+ }
34
+
35
+ exploreCleanup(context, instance) {
36
+ context.pop("pointReducer");
37
+ }
38
+
39
+ prepare(context, instance) {
40
+ context.push("pointReducer", instance.pointReducer);
41
+ }
42
+
43
+ prepareCleanup(context, instance) {
44
+ context.pop("pointReducer");
45
+ instance.write();
46
+ }
47
+ }
@@ -1,69 +1,69 @@
1
- import { PointReducer } from "./PointReducer";
2
-
3
- export class SnapPointFinder extends PointReducer {
4
- declareData() {
5
- return super.declareData(...arguments, {
6
- cursorX: undefined,
7
- cursorY: undefined,
8
- snapX: undefined,
9
- snapY: undefined,
10
- snapRecord: undefined,
11
- maxDistance: undefined,
12
- });
13
- }
14
-
15
- explore(context, instance) {
16
- instance.xAxis = context.axes[this.xAxis];
17
- instance.yAxis = context.axes[this.yAxis];
18
- super.explore(context, instance);
19
- }
20
-
21
- onInitAccumulator(acc, { data, xAxis, yAxis }) {
22
- acc.cursor = {
23
- x: data.cursorX,
24
- y: data.cursorY,
25
- mapped: false,
26
- };
27
- acc.dist = data.maxDistance > 0 ? Math.pow(data.maxDistance, 2) : Number.POSITIVE_INFINITY;
28
- acc.snapX = null;
29
- acc.snapY = null;
30
- acc.xAxis = xAxis;
31
- acc.yAxis = yAxis;
32
- }
33
-
34
- onMap(acc, x, y, name, p) {
35
- let { xAxis, yAxis, cursor } = acc;
36
-
37
- if (!cursor.mapped) {
38
- cursor.mappedX = cursor.x != null ? xAxis?.map(this.convertX(cursor.x)) : null;
39
- cursor.mappedY = cursor.y != null ? yAxis?.map(this.convertY(cursor.y)) : null;
40
- cursor.mapped = true;
41
- }
42
-
43
- let d = null;
44
- let cx = x != null ? xAxis?.map(this.convertX(x)) : null;
45
- let cy = y != null ? yAxis?.map(this.convertY(y)) : null;
46
-
47
- if (cursor.mappedX != null && cx != null) d = (d || 0) + Math.pow(Math.abs(cx - cursor.mappedX), 2);
48
- if (cursor.mappedY != null && cy != null) d = (d || 0) + Math.pow(Math.abs(cy - cursor.mappedY), 2);
49
-
50
- if (d != null && d < acc.dist) {
51
- acc.dist = d;
52
- acc.snapX = x;
53
- acc.snapY = y;
54
- acc.snapRecord = p;
55
- }
56
- }
57
-
58
- onReduce(acc, instance) {
59
- instance.set("snapX", acc.snapX);
60
- instance.set("snapY", acc.snapY);
61
- instance.set("snapRecord", acc.snapRecord);
62
- }
63
- }
64
-
65
- SnapPointFinder.prototype.maxDistance = 50;
66
- SnapPointFinder.prototype.convertX = (x) => x;
67
- SnapPointFinder.prototype.convertY = (y) => y;
68
- SnapPointFinder.prototype.xAxis = "x";
69
- SnapPointFinder.prototype.yAxis = "y";
1
+ import { PointReducer } from "./PointReducer";
2
+
3
+ export class SnapPointFinder extends PointReducer {
4
+ declareData() {
5
+ return super.declareData(...arguments, {
6
+ cursorX: undefined,
7
+ cursorY: undefined,
8
+ snapX: undefined,
9
+ snapY: undefined,
10
+ snapRecord: undefined,
11
+ maxDistance: undefined,
12
+ });
13
+ }
14
+
15
+ explore(context, instance) {
16
+ instance.xAxis = context.axes[this.xAxis];
17
+ instance.yAxis = context.axes[this.yAxis];
18
+ super.explore(context, instance);
19
+ }
20
+
21
+ onInitAccumulator(acc, { data, xAxis, yAxis }) {
22
+ acc.cursor = {
23
+ x: data.cursorX,
24
+ y: data.cursorY,
25
+ mapped: false,
26
+ };
27
+ acc.dist = data.maxDistance > 0 ? Math.pow(data.maxDistance, 2) : Number.POSITIVE_INFINITY;
28
+ acc.snapX = null;
29
+ acc.snapY = null;
30
+ acc.xAxis = xAxis;
31
+ acc.yAxis = yAxis;
32
+ }
33
+
34
+ onMap(acc, x, y, name, p) {
35
+ let { xAxis, yAxis, cursor } = acc;
36
+
37
+ if (!cursor.mapped) {
38
+ cursor.mappedX = cursor.x != null ? xAxis?.map(this.convertX(cursor.x)) : null;
39
+ cursor.mappedY = cursor.y != null ? yAxis?.map(this.convertY(cursor.y)) : null;
40
+ cursor.mapped = true;
41
+ }
42
+
43
+ let d = null;
44
+ let cx = x != null ? xAxis?.map(this.convertX(x)) : null;
45
+ let cy = y != null ? yAxis?.map(this.convertY(y)) : null;
46
+
47
+ if (cursor.mappedX != null && cx != null) d = (d || 0) + Math.pow(Math.abs(cx - cursor.mappedX), 2);
48
+ if (cursor.mappedY != null && cy != null) d = (d || 0) + Math.pow(Math.abs(cy - cursor.mappedY), 2);
49
+
50
+ if (d != null && d < acc.dist) {
51
+ acc.dist = d;
52
+ acc.snapX = x;
53
+ acc.snapY = y;
54
+ acc.snapRecord = p;
55
+ }
56
+ }
57
+
58
+ onReduce(acc, instance) {
59
+ instance.set("snapX", acc.snapX);
60
+ instance.set("snapY", acc.snapY);
61
+ instance.set("snapRecord", acc.snapRecord);
62
+ }
63
+ }
64
+
65
+ SnapPointFinder.prototype.maxDistance = 50;
66
+ SnapPointFinder.prototype.convertX = (x) => x;
67
+ SnapPointFinder.prototype.convertY = (y) => y;
68
+ SnapPointFinder.prototype.xAxis = "x";
69
+ SnapPointFinder.prototype.yAxis = "y";
package/src/core.d.ts CHANGED
@@ -160,7 +160,7 @@ declare namespace Cx {
160
160
 
161
161
  interface HtmlElementProps extends StyledContainerProps {
162
162
  /** Id of the element */
163
- id?: string | number | Binding | Selector<string | number>;
163
+ id?: Cx.StringProp | Cx.NumberProp;
164
164
 
165
165
  /** Inner text contents. */
166
166
  text?: Cx.StringProp | Cx.NumberProp;
@@ -251,6 +251,39 @@ declare global {
251
251
  tooltip?: Cx.StringProp | Cx.StructuredProp;
252
252
  }
253
253
  }
254
+
255
+ interface JSON {
256
+ /* JSON doesn't support symbol keys, and number keys
257
+ * are coerced to strings, even in arrays */
258
+
259
+ /**
260
+ * Converts a JavaScript Object Notation (JSON) string into an object.
261
+ * @param text A valid JSON string.
262
+ * @param reviver A function that transforms the results. This function is called for each member of the object.
263
+ * If a member contains nested objects, the nested objects are transformed before the parent object is.
264
+ */
265
+ parse(text: string, reviver?: (this: unknown, key: string, value: unknown) => unknown): unknown;
266
+
267
+ /**
268
+ * Converts a JavaScript value to a JavaScript Object Notation (JSON) string.
269
+ * @param value A JavaScript value, usually an object or array, to be converted.
270
+ * @param replacer A function that transforms the results.
271
+ * @param space Adds indentation, white space, and line break characters to the return-value JSON text to make it easier to read.
272
+ */
273
+ stringify(
274
+ text: unknown,
275
+ replacer?: (this: unknown, key: string, value: unknown) => unknown,
276
+ space?: string | number,
277
+ ): string;
278
+ }
279
+
280
+ interface ArrayConstructor {
281
+ isArray(a: unknown): a is unknown[];
282
+ }
283
+
284
+ interface Body {
285
+ json(): Promise<unknown>;
286
+ }
254
287
  }
255
288
 
256
289
  declare module "react" {
@@ -263,6 +296,12 @@ declare module "react" {
263
296
  innerHtml?: Cx.StringProp;
264
297
  tooltip?: Cx.StringProp | Cx.StructuredProp;
265
298
  }
299
+ namespace React {
300
+ interface ImgHTMLAttributes<T> extends HTMLAttributes<T> {
301
+ alt?: Cx.StringProp | undefined;
302
+ src?: Cx.StringProp | undefined;
303
+ }
304
+ }
266
305
 
267
306
  //this doesn't work, however, it would be nice if it does
268
307
  // interface EventHandler<E extends React.SyntheticEvent<any>> {
@@ -1,69 +1,69 @@
1
- import { Binding } from "./Binding";
2
- import assert from "assert";
3
- import { createAccessorModelProxy } from "./createAccessorModelProxy";
4
-
5
- describe("Binding", function () {
6
- describe("#get()", function () {
7
- it("should get value if value is defined", function () {
8
- var state = { person: { name: "Joe" } };
9
- var b = Binding.get("person.name");
10
- assert.equal(b.value(state), "Joe");
11
- });
12
-
13
- it("allows non-standard property identifiers", function () {
14
- var state = { person: { "@schema": "Person" } };
15
- var b = Binding.get("person.@schema");
16
- assert.equal(b.path, "person.@schema");
17
- assert.equal(b.value(state), "Person");
18
- });
19
-
20
- it("properly resolves accessor models", function () {
21
- var state = { person: { schema: "Person" } };
22
- var b = Binding.get(createAccessorModelProxy("person.schema"));
23
- assert.equal(b.value(state), "Person");
24
- });
25
- });
26
-
27
- describe("#set()", function () {
28
- it("produces new objects along the binding path", function () {
29
- var state = { person: { name: "Joe" } };
30
- var b = Binding.get("person.name");
31
- var ns = b.set(state, "Jack");
32
- assert.equal(ns.person.name, "Jack");
33
- assert.notEqual(state, ns);
34
- assert.notEqual(state.person, ns.person);
35
- assert.notEqual(state.person.name, ns.person.name);
36
- });
37
-
38
- it("returns same state object if value does not change", function () {
39
- var state = { person: { name: "Joe" } };
40
- var b = Binding.get("person.name");
41
- var ns = b.set(state, "Joe");
42
- assert.equal(state, ns);
43
- });
44
-
45
- it("allows non-standard property identifiers", function () {
46
- var state = { person: { "@schema": "Person" } };
47
- var b = Binding.get("person.@schema");
48
- var ns = b.set(state, "Test");
49
- assert.equal(ns.person["@schema"], "Test");
50
- });
51
- });
52
-
53
- describe(".delete()", function () {
54
- it("correctly removes pointed properties", function () {
55
- var state = { person: { name: "Joe" } };
56
- var b = Binding.get("person.name");
57
- var ns = b.delete(state);
58
- assert("person" in ns);
59
- assert(!("name" in ns.person));
60
- });
61
-
62
- it("does not change state if property is non-existent", function () {
63
- var state = { person: { name: "Joe" } };
64
- var b = Binding.get("person.name2");
65
- var ns = b.delete(state);
66
- assert(ns == state);
67
- });
68
- });
69
- });
1
+ import { Binding } from "./Binding";
2
+ import assert from "assert";
3
+ import { createAccessorModelProxy } from "./createAccessorModelProxy";
4
+
5
+ describe("Binding", function () {
6
+ describe("#get()", function () {
7
+ it("should get value if value is defined", function () {
8
+ var state = { person: { name: "Joe" } };
9
+ var b = Binding.get("person.name");
10
+ assert.equal(b.value(state), "Joe");
11
+ });
12
+
13
+ it("allows non-standard property identifiers", function () {
14
+ var state = { person: { "@schema": "Person" } };
15
+ var b = Binding.get("person.@schema");
16
+ assert.equal(b.path, "person.@schema");
17
+ assert.equal(b.value(state), "Person");
18
+ });
19
+
20
+ it("properly resolves accessor models", function () {
21
+ var state = { person: { schema: "Person" } };
22
+ var b = Binding.get(createAccessorModelProxy("person.schema"));
23
+ assert.equal(b.value(state), "Person");
24
+ });
25
+ });
26
+
27
+ describe("#set()", function () {
28
+ it("produces new objects along the binding path", function () {
29
+ var state = { person: { name: "Joe" } };
30
+ var b = Binding.get("person.name");
31
+ var ns = b.set(state, "Jack");
32
+ assert.equal(ns.person.name, "Jack");
33
+ assert.notEqual(state, ns);
34
+ assert.notEqual(state.person, ns.person);
35
+ assert.notEqual(state.person.name, ns.person.name);
36
+ });
37
+
38
+ it("returns same state object if value does not change", function () {
39
+ var state = { person: { name: "Joe" } };
40
+ var b = Binding.get("person.name");
41
+ var ns = b.set(state, "Joe");
42
+ assert.equal(state, ns);
43
+ });
44
+
45
+ it("allows non-standard property identifiers", function () {
46
+ var state = { person: { "@schema": "Person" } };
47
+ var b = Binding.get("person.@schema");
48
+ var ns = b.set(state, "Test");
49
+ assert.equal(ns.person["@schema"], "Test");
50
+ });
51
+ });
52
+
53
+ describe(".delete()", function () {
54
+ it("correctly removes pointed properties", function () {
55
+ var state = { person: { name: "Joe" } };
56
+ var b = Binding.get("person.name");
57
+ var ns = b.delete(state);
58
+ assert("person" in ns);
59
+ assert(!("name" in ns.person));
60
+ });
61
+
62
+ it("does not change state if property is non-existent", function () {
63
+ var state = { person: { name: "Joe" } };
64
+ var b = Binding.get("person.name2");
65
+ var ns = b.delete(state);
66
+ assert(ns == state);
67
+ });
68
+ });
69
+ });