cx 26.4.4 → 26.5.1

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 (69) hide show
  1. package/build/charts/axis/Axis.d.ts +8 -0
  2. package/build/charts/axis/Axis.d.ts.map +1 -1
  3. package/build/charts/axis/Axis.js +18 -1
  4. package/build/charts/axis/TimeAxis.js +1 -0
  5. package/build/ui/Format.d.ts.map +1 -1
  6. package/build/ui/Format.js +26 -2
  7. package/build/util/Format.d.ts.map +1 -1
  8. package/build/util/Format.js +6 -0
  9. package/build/util/date/dateQuarter.d.ts +7 -0
  10. package/build/util/date/dateQuarter.d.ts.map +1 -0
  11. package/build/util/date/dateQuarter.js +8 -0
  12. package/build/util/date/dayBefore.d.ts +12 -0
  13. package/build/util/date/dayBefore.d.ts.map +1 -0
  14. package/build/util/date/dayBefore.js +15 -0
  15. package/build/util/date/index.d.ts +2 -0
  16. package/build/util/date/index.d.ts.map +1 -1
  17. package/build/util/date/index.js +2 -0
  18. package/build/widgets/form/DateTimePicker.d.ts.map +1 -1
  19. package/build/widgets/form/DateTimePicker.js +53 -31
  20. package/build/widgets/form/Field.d.ts.map +1 -1
  21. package/build/widgets/form/Field.js +2 -1
  22. package/build/widgets/form/Wheel.d.ts +8 -0
  23. package/build/widgets/form/Wheel.d.ts.map +1 -1
  24. package/build/widgets/form/Wheel.js +30 -7
  25. package/build/widgets/grid/Grid.d.ts +1 -1
  26. package/build/widgets/grid/Grid.d.ts.map +1 -1
  27. package/dist/charts.css +6 -0
  28. package/dist/charts.js +18 -1
  29. package/dist/manifest.js +787 -778
  30. package/dist/ui.js +33 -1
  31. package/dist/util.js +32 -0
  32. package/dist/widgets.js +225 -173
  33. package/package.json +1 -1
  34. package/src/charts/BarGraph.scss +31 -31
  35. package/src/charts/Legend.scss +57 -57
  36. package/src/charts/LegendEntry.scss +35 -35
  37. package/src/charts/LineGraph.scss +28 -28
  38. package/src/charts/RangeMarker.scss +3 -0
  39. package/src/charts/axis/Axis.tsx +31 -1
  40. package/src/charts/axis/TimeAxis.tsx +1 -0
  41. package/src/charts/helpers/SnapPointFinder.ts +136 -136
  42. package/src/charts/helpers/ValueAtFinder.ts +72 -72
  43. package/src/charts/index.scss +1 -0
  44. package/src/data/AugmentedViewBase.ts +89 -89
  45. package/src/data/View.ts +301 -301
  46. package/src/data/createAccessorModelProxy.ts +66 -66
  47. package/src/ui/Format.spec.ts +32 -0
  48. package/src/ui/Format.ts +27 -2
  49. package/src/ui/Repeater.spec.tsx +181 -181
  50. package/src/util/Format.spec.ts +11 -0
  51. package/src/util/Format.ts +7 -0
  52. package/src/util/date/dateQuarter.ts +8 -0
  53. package/src/util/date/dayBefore.ts +15 -0
  54. package/src/util/date/index.ts +2 -0
  55. package/src/util/scss/include.scss +69 -69
  56. package/src/widgets/Button.maps.scss +103 -103
  57. package/src/widgets/form/Calendar.tsx +772 -772
  58. package/src/widgets/form/DateTimePicker.tsx +453 -392
  59. package/src/widgets/form/Field.tsx +2 -1
  60. package/src/widgets/form/ValidationGroup.spec.tsx +30 -1
  61. package/src/widgets/form/Wheel.tsx +36 -7
  62. package/src/widgets/grid/Grid.scss +657 -657
  63. package/src/widgets/grid/Grid.tsx +1 -1
  64. package/src/widgets/grid/variables.scss +47 -47
  65. package/src/widgets/index.ts +63 -63
  66. package/src/widgets/nav/MenuItem.scss +150 -150
  67. package/src/widgets/nav/Tab.ts +122 -122
  68. package/src/widgets/overlay/Overlay.tsx +1029 -1029
  69. package/src/widgets/variables.scss +61 -61
@@ -50,6 +50,13 @@ export interface AxisConfig extends BoundedObjectConfig {
50
50
  labelMaxLineLength?: number;
51
51
  /** Set to true to hide the axis labels. */
52
52
  hideLabels?: boolean;
53
+ /**
54
+ * Set to `true` to drop a boundary (first/last) label, together with its tick,
55
+ * when the label would not fit within the chart and get clipped at the edge.
56
+ * Minor ticks are unaffected. Only affects horizontal axes. Defaults to `false`,
57
+ * except on `TimeAxis` where it defaults to `true`.
58
+ */
59
+ hideClippedLabels?: boolean;
53
60
  /** Set to true to hide the axis line. */
54
61
  hideLine?: boolean;
55
62
  /** Set to true to hide the axis ticks. */
@@ -94,6 +101,7 @@ export declare class Axis extends BoundedObject<AxisConfig, AxisInstance> {
94
101
  inverted: boolean;
95
102
  hidden: boolean;
96
103
  hideLabels: boolean;
104
+ hideClippedLabels: boolean;
97
105
  hideTicks: boolean;
98
106
  hideLine: boolean;
99
107
  tickSize: number;
@@ -1 +1 @@
1
- {"version":3,"file":"Axis.d.ts","sourceRoot":"","sources":["../../../src/charts/axis/Axis.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Axis.d.ts","sourceRoot":"","sources":["../../../src/charts/axis/Axis.tsx"],"names":[],"mappings":"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"}
@@ -27,6 +27,7 @@ export class Axis extends BoundedObject {
27
27
  super.declareData({
28
28
  anchors: undefined,
29
29
  hideLabels: undefined,
30
+ hideClippedLabels: undefined,
30
31
  hideLine: undefined,
31
32
  hideTicks: undefined,
32
33
  labelRotation: undefined,
@@ -75,9 +76,22 @@ export class Axis extends BoundedObject {
75
76
  var t = [];
76
77
  if (!!size && !data.hideLabels) {
77
78
  var ticks = calculator.getTicks([size]);
79
+ // A boundary label is dropped when it would be clipped at the chart edge.
80
+ // How far a label reaches toward an edge depends only on its text anchor
81
+ // and minLabelDistance, so it is resolved once here rather than per tick.
82
+ // Chart bounds (parentRect) are used rather than axis bounds, since an
83
+ // axis can be inset within its chart and one Svg may host several charts.
84
+ let chartBounds = instance.parentRect;
85
+ let clipBoundaryLabels = !this.vertical && !!data.hideClippedLabels && !!chartBounds;
86
+ let reach = minLabelDistance * 0.8;
87
+ let leftReach = data.labelAnchor == "end" ? reach : data.labelAnchor == "middle" ? reach / 2 : 0;
88
+ let rightReach = data.labelAnchor == "start" ? reach : data.labelAnchor == "middle" ? reach / 2 : 0;
78
89
  ticks.forEach((serie, si) => {
79
90
  serie.forEach((v, i) => {
80
91
  var s = calculator.map(v);
92
+ // Drop this boundary label (and its major tick) if it would be
93
+ // clipped at the chart edge; minor ticks render separately and stay.
94
+ let clipped = clipBoundaryLabels && (s + rightReach > chartBounds.r || s - leftReach < chartBounds.l);
81
95
  if (this.secondary) {
82
96
  x1 = this.vertical ? bounds.r + tickOffset : s;
83
97
  y1 = this.vertical ? s : bounds.t - tickOffset;
@@ -90,8 +104,10 @@ export class Axis extends BoundedObject {
90
104
  x2 = this.vertical ? bounds.l - tickOffset - tickSize : s;
91
105
  y2 = this.vertical ? s : bounds.b + tickOffset + tickSize;
92
106
  }
93
- if (!this.useGridlineTicks)
107
+ if (!this.useGridlineTicks && !clipped)
94
108
  t.push(`M ${x1} ${y1} L ${x2} ${y2}`);
109
+ if (clipped)
110
+ return;
95
111
  var x, y;
96
112
  let labelOffset = this.alternateLabelOffset != null && i % 2 == 1 ? this.alternateLabelOffset : this.labelOffset;
97
113
  if (this.secondary) {
@@ -195,6 +211,7 @@ Axis.prototype.secondary = false;
195
211
  Axis.prototype.inverted = false;
196
212
  Axis.prototype.hidden = false;
197
213
  Axis.prototype.hideLabels = false;
214
+ Axis.prototype.hideClippedLabels = false;
198
215
  Axis.prototype.hideTicks = false;
199
216
  Axis.prototype.hideLine = false;
200
217
  Axis.prototype.tickSize = 3;
@@ -112,6 +112,7 @@ TimeAxis.prototype.minLabelDistance = 60;
112
112
  TimeAxis.prototype.minTickDistance = 60;
113
113
  TimeAxis.prototype.minTickUnit = "second";
114
114
  TimeAxis.prototype.useLabelDistanceFormatOverrides = false;
115
+ TimeAxis.prototype.hideClippedLabels = true;
115
116
  TimeAxis.prototype.minLabelDistanceFormatOverrideDefaults = {
116
117
  [TimeFormats.fullDateAndTime]: 150,
117
118
  [TimeFormats.shortMonthDate]: 90,
@@ -1 +1 @@
1
- {"version":3,"file":"Format.d.ts","sourceRoot":"","sources":["../../src/ui/Format.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,IAAI,GAAG,EAA0D,MAAM,gBAAgB,CAAC;AAMvG,eAAO,MAAM,MAAM,YAAM,CAAC;AAI1B,wBAAgB,4BAA4B,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,GAAG,CAOhE;AAED,wBAAgB,gCAAgC,SAuF/C"}
1
+ {"version":3,"file":"Format.d.ts","sourceRoot":"","sources":["../../src/ui/Format.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,IAAI,GAAG,EAA0D,MAAM,gBAAgB,CAAC;AAMvG,eAAO,MAAM,MAAM,YAAM,CAAC;AAuB1B,wBAAgB,4BAA4B,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,GAAG,CAOhE;AAED,wBAAgB,gCAAgC,SA6F/C"}
@@ -1,10 +1,29 @@
1
1
  import { Culture, getCurrentCultureCache } from "./Culture";
2
2
  import { Format as Fmt, resolveMinMaxFractionDigits, setGetFormatCacheCallback } from "../util/Format";
3
3
  import { setGetExpressionCacheCallback } from "../data/Expression";
4
- import { setGetStringTemplateCacheCallback } from "../data/StringTemplate";
5
- import { parseDateInvariant } from "../util";
4
+ import { setGetStringTemplateCacheCallback, StringTemplate } from "../data/StringTemplate";
5
+ import { dateQuarter, dayBefore, parseDateInvariant } from "../util";
6
6
  import { GlobalCacheIdentifier } from "../util/GlobalCacheIdentifier";
7
7
  export const Format = Fmt;
8
+ // The `quarter` formatter renders a calendar quarter via a string-template
9
+ // pattern with `{q}` (quarter number), `{yyyy}` and `{yy}` (year) placeholders.
10
+ // Placeholders are case-insensitive (`{Q}`, `{YYYY}`, `{YY}` work too). It lives
11
+ // here rather than in util/Format because it depends on StringTemplate from the
12
+ // data layer, which util/ cannot import. It is registered eagerly since it does
13
+ // not depend on culture settings.
14
+ Fmt.registerFactory("quarter", (fmt, pattern, mode) => {
15
+ let exclusive = mode === "exclusive" || mode === "ex" || mode === "e";
16
+ let template = StringTemplate.get(pattern || "Q{q} {yyyy}");
17
+ return (value) => {
18
+ let date = parseDateInvariant(value);
19
+ if (exclusive)
20
+ date = dayBefore(date);
21
+ let q = dateQuarter(date);
22
+ let yyyy = date.getFullYear();
23
+ let yy = String(yyyy % 100).padStart(2, "0");
24
+ return template({ q, Q: q, yyyy, YYYY: yyyy, yy, YY: yy });
25
+ };
26
+ });
8
27
  let cultureSensitiveFormatsRegistered = false;
9
28
  export function resolveNumberFormattingFlags(flags) {
10
29
  if (!flags)
@@ -74,6 +93,11 @@ export function enableCultureSensitiveFormatting() {
74
93
  let formatter = culture.getFormatter(format);
75
94
  return (value) => formatter.format(parseDateInvariant(value));
76
95
  });
96
+ Fmt.registerFactory(["dayBefore", "daybefore"], (fmt, format = "yyyyMd hhmm") => {
97
+ let culture = Culture.getDateTimeCulture();
98
+ let formatter = culture.getFormatter(format);
99
+ return (value) => formatter.format(dayBefore(parseDateInvariant(value)));
100
+ });
77
101
  setGetFormatCacheCallback(() => {
78
102
  let cache = getCurrentCultureCache();
79
103
  if (!cache.formatCache)
@@ -1 +1 @@
1
- {"version":3,"file":"Format.d.ts","sourceRoot":"","sources":["../../src/util/Format.ts"],"names":[],"mappings":"AAUA,KAAK,SAAS,GAAG,CAAC,KAAK,EAAE,GAAG,KAAK,MAAM,CAAC;AAsMxC,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,IAAI,CAEzF;AAWD,qBAAa,MAAM;IAChB,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM;IAK5C,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS;IAIvC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,SAAS,EAAE,SAAS,GAAG,IAAI;IAItE,MAAM,CAAC,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,SAAS,GAAG,IAAI;CAIjG;AAED,wBAAgB,2BAA2B,CACxC,qBAAqB,EAAE,MAAM,EAC7B,qBAAqB,EAAE,MAAM,GAC7B;IAAE,qBAAqB,EAAE,MAAM,CAAC;IAAC,qBAAqB,EAAE,MAAM,CAAA;CAAE,CAclE;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAMlE"}
1
+ {"version":3,"file":"Format.d.ts","sourceRoot":"","sources":["../../src/util/Format.ts"],"names":[],"mappings":"AAWA,KAAK,SAAS,GAAG,CAAC,KAAK,EAAE,GAAG,KAAK,MAAM,CAAC;AA4MxC,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,IAAI,CAEzF;AAWD,qBAAa,MAAM;IAChB,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM;IAK5C,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS;IAIvC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,SAAS,EAAE,SAAS,GAAG,IAAI;IAItE,MAAM,CAAC,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,SAAS,GAAG,IAAI;CAIjG;AAED,wBAAgB,2BAA2B,CACxC,qBAAqB,EAAE,MAAM,EAC7B,qBAAqB,EAAE,MAAM,GAC7B;IAAE,qBAAqB,EAAE,MAAM,CAAC;IAAC,qBAAqB,EAAE,MAAM,CAAA;CAAE,CAclE;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAMlE"}
@@ -5,6 +5,7 @@ import { isUndefined } from "../util/isUndefined";
5
5
  import { isArray } from "../util/isArray";
6
6
  import { capitalize } from "./capitalize";
7
7
  import { parseDateInvariant } from "./date/parseDateInvariant";
8
+ import { dayBefore } from "./date/dayBefore";
8
9
  const defaultFormatter = (v) => v.toString();
9
10
  let formatFactory = {
10
11
  string: function () {
@@ -76,6 +77,10 @@ let formatFactory = {
76
77
  let time = formatFactory.time();
77
78
  return (value) => date(value) + " " + time(value);
78
79
  },
80
+ dayBefore: function () {
81
+ let datetime = formatFactory.datetime();
82
+ return (value) => datetime(dayBefore(parseDateInvariant(value)));
83
+ },
79
84
  ellipsis: function (part0, length, where) {
80
85
  length = Number(length);
81
86
  if (!(length > 3))
@@ -142,6 +147,7 @@ formatFactory.ps = formatFactory.percentageSign;
142
147
  formatFactory.d = formatFactory.date;
143
148
  formatFactory.t = formatFactory.time;
144
149
  formatFactory.dt = formatFactory.datetime;
150
+ formatFactory.daybefore = formatFactory.dayBefore;
145
151
  formatFactory.zeropad = formatFactory.zeroPad;
146
152
  formatFactory.leftpad = formatFactory.leftPad;
147
153
  formatFactory.capitalize = formatFactory.capitalize;
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Returns the calendar quarter (1-4) the given date falls in.
3
+ * @param date
4
+ * @returns {number}
5
+ */
6
+ export declare function dateQuarter(date: Date): number;
7
+ //# sourceMappingURL=dateQuarter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dateQuarter.d.ts","sourceRoot":"","sources":["../../../src/util/date/dateQuarter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAE9C"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Returns the calendar quarter (1-4) the given date falls in.
3
+ * @param date
4
+ * @returns {number}
5
+ */
6
+ export function dateQuarter(date) {
7
+ return Math.floor(date.getMonth() / 3) + 1;
8
+ }
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Returns a new `Date` representing the calendar day before the given date,
3
+ * keeping the same time of day. Month and year boundaries are handled
4
+ * automatically. The input is not mutated.
5
+ *
6
+ * Useful for displaying the exclusive end of a date range as an inclusive
7
+ * value, e.g. a period ending at `2021-01-01` shown as `Dec 2020`.
8
+ * @param date
9
+ * @returns {Date}
10
+ */
11
+ export declare function dayBefore(date: Date): Date;
12
+ //# sourceMappingURL=dayBefore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dayBefore.d.ts","sourceRoot":"","sources":["../../../src/util/date/dayBefore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAI1C"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Returns a new `Date` representing the calendar day before the given date,
3
+ * keeping the same time of day. Month and year boundaries are handled
4
+ * automatically. The input is not mutated.
5
+ *
6
+ * Useful for displaying the exclusive end of a date range as an inclusive
7
+ * value, e.g. a period ending at `2021-01-01` shown as `Dec 2020`.
8
+ * @param date
9
+ * @returns {Date}
10
+ */
11
+ export function dayBefore(date) {
12
+ let result = new Date(date.getTime());
13
+ result.setDate(result.getDate() - 1);
14
+ return result;
15
+ }
@@ -1,4 +1,6 @@
1
1
  export * from "./dateDiff";
2
+ export * from "./dateQuarter";
3
+ export * from "./dayBefore";
2
4
  export * from "./zeroTime";
3
5
  export * from "./monthStart";
4
6
  export * from "./lowerBoundCheck";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/util/date/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,gCAAgC,CAAC;AAC/C,cAAc,cAAc,CAAC;AAC7B,cAAc,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/util/date/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,gCAAgC,CAAC;AAC/C,cAAc,cAAc,CAAC;AAC7B,cAAc,sBAAsB,CAAC"}
@@ -1,4 +1,6 @@
1
1
  export * from "./dateDiff";
2
+ export * from "./dateQuarter";
3
+ export * from "./dayBefore";
2
4
  export * from "./zeroTime";
3
5
  export * from "./monthStart";
4
6
  export * from "./lowerBoundCheck";
@@ -1 +1 @@
1
- {"version":3,"file":"DateTimePicker.d.ts","sourceRoot":"","sources":["../../../src/widgets/form/DateTimePicker.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAQ,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAO/C,qBAAa,cAAe,SAAQ,MAAM;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,MAAM,CAAC;IAClC,UAAU,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,QAAQ,EAAE,QAAQ,KAAK,IAAI,CAAC,CAAC;IACrD,QAAQ,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,aAAa,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC,CAAC;IAC9F,SAAS,EAAE,MAAM,CAAC;IAE1B,WAAW,CAAC,GAAG,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,IAAI;IAMrD,MAAM,CAAC,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,KAAK,CAAC,SAAS;CAWrF"}
1
+ {"version":3,"file":"DateTimePicker.d.ts","sourceRoot":"","sources":["../../../src/widgets/form/DateTimePicker.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAQ,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAO/C,qBAAa,cAAe,SAAQ,MAAM;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,MAAM,CAAC;IAClC,UAAU,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,QAAQ,EAAE,QAAQ,KAAK,IAAI,CAAC,CAAC;IACrD,QAAQ,CAAC,EACpB,MAAM,GACN,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,aAAa,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC,CAAC;IAC/D,SAAS,EAAE,MAAM,CAAC;IAE1B,WAAW,CAAC,GAAG,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,IAAI;IAMrD,MAAM,CACJ,OAAO,EAAE,gBAAgB,EACzB,QAAQ,EAAE,QAAQ,EAClB,GAAG,EAAE,MAAM,GACV,KAAK,CAAC,SAAS;CAWnB"}
@@ -24,18 +24,27 @@ DateTimePicker.prototype.size = 3;
24
24
  DateTimePicker.prototype.autoFocus = false;
25
25
  DateTimePicker.prototype.segment = "datetime";
26
26
  DateTimePicker.prototype.showSeconds = false;
27
+ // Builds the option spans for a numeric wheel — one zero-padded span per value.
28
+ // Pass the result to a WheelComponent with `cycle` set to make it scroll
29
+ // endlessly; centre the current value by passing `index = value + range`.
30
+ function buildNumberWheel(range, startAt) {
31
+ return Array.from({ length: range }, (_, j) => (_jsx("span", { children: String(j + startAt).padStart(2, "0") }, j)));
32
+ }
27
33
  class DateTimePickerComponent extends VDOM.Component {
28
34
  el;
29
35
  keyDownPipes;
30
36
  constructor(props) {
31
37
  super(props);
32
- let date = props.data.value ? parseDateInvariant(props.data.value) : new Date();
38
+ let date = props.data.value
39
+ ? parseDateInvariant(props.data.value)
40
+ : new Date();
33
41
  if (isNaN(date.getTime()))
34
42
  date = new Date();
35
43
  this.state = {
36
44
  date: date,
37
45
  activeWheel: null,
38
46
  };
47
+ this.century = (date.getFullYear() / 100) | 0;
39
48
  let { widget } = props.instance;
40
49
  let pickerWidget = widget;
41
50
  this.handleChange = this.handleChange.bind(this);
@@ -55,7 +64,9 @@ class DateTimePickerComponent extends VDOM.Component {
55
64
  this.keyDownPipes = {};
56
65
  }
57
66
  UNSAFE_componentWillReceiveProps(props) {
58
- let date = props.data.value ? parseDateInvariant(props.data.value) : new Date();
67
+ let date = props.data.value
68
+ ? parseDateInvariant(props.data.value)
69
+ : new Date();
59
70
  if (isNaN(date.getTime()))
60
71
  date = new Date();
61
72
  this.setState({ date });
@@ -98,75 +109,86 @@ class DateTimePickerComponent extends VDOM.Component {
98
109
  let date = this.state.date;
99
110
  let culture = Culture.getDateTimeCulture();
100
111
  let monthNames = culture.getMonthNames("short");
101
- let years = [];
102
- for (let y = 1970; y <= 2050; y++)
103
- years.push(_jsx("span", { children: y }, y));
104
- let days = [];
105
- let start = new Date(date.getFullYear(), date.getMonth(), 1);
106
- while (start.getMonth() === date.getMonth()) {
107
- let day = start.getDate();
108
- days.push(_jsx("span", { children: day < 10 ? "0" + day : day }, day));
109
- start.setDate(start.getDate() + 1);
110
- }
111
- let hours = [];
112
- for (let h = 0; h < 24; h++) {
113
- hours.push(_jsx("span", { children: h < 10 ? "0" + h : h }, h));
112
+ // Years: a window spanning the current century, rebuilt when it changes.
113
+ let currentCentury = (date.getFullYear() / 100) | 0;
114
+ if (!this.years || this.century !== currentCentury) {
115
+ this.century = currentCentury;
116
+ this.firstYear = currentCentury * 100 - 3;
117
+ let lastYear = (currentCentury + 1) * 100 + 5;
118
+ this.years = [];
119
+ for (let y = this.firstYear; y <= lastYear; y++)
120
+ this.years.push(_jsx("span", { children: y }, y));
114
121
  }
115
- let minutes = [];
116
- for (let m = 0; m < 60; m++) {
117
- minutes.push(_jsx("span", { children: m < 10 ? "0" + m : m }, m));
122
+ let years = this.years;
123
+ // Day/hour/minute wheels use a 3x buffer (see buildNumberWheel). The day
124
+ // buffer depends on the month length, so it is rebuilt when that changes.
125
+ const numberOfDaysInMonth = new Date(date.getFullYear(), date.getMonth() + 1, 0).getDate();
126
+ if (!this.days || this.numberOfDaysInMonth !== numberOfDaysInMonth) {
127
+ this.numberOfDaysInMonth = numberOfDaysInMonth;
128
+ this.days = buildNumberWheel(numberOfDaysInMonth, 1);
118
129
  }
130
+ let days = this.days;
131
+ if (!this.hours)
132
+ this.hours = buildNumberWheel(24, 0);
133
+ let hours = this.hours;
134
+ if (!this.minutes)
135
+ this.minutes = buildNumberWheel(60, 0);
136
+ let minutes = this.minutes;
119
137
  return (_jsxs("div", { tabIndex: 0, ref: (el) => {
120
138
  this.el = el;
121
- }, className: data.classNames, onFocus: this.onFocus, onBlur: this.onBlur, onKeyDown: this.onKeyDown, children: [this.wheels.year && (_jsx(WheelComponent, { size: size, CSS: CSS, active: this.state.activeWheel === "year", baseClass: baseClass + "-wheel", index: date.getFullYear() - 1970, onChange: (newIndex) => {
139
+ }, className: data.classNames, onFocus: this.onFocus, onBlur: this.onBlur, onKeyDown: this.onKeyDown, children: [this.wheels.year && (_jsx(WheelComponent, { size: size, CSS: CSS, active: this.state.activeWheel === "year", baseClass: baseClass + "-wheel", index: date.getFullYear() - this.firstYear, onChange: (newIndex) => {
122
140
  this.setState((state) => ({
123
- date: this.setDateComponent(this.state.date, "year", newIndex + 1970),
141
+ date: this.setDateComponent(state.date, "year", newIndex + this.firstYear),
124
142
  }), this.handleChange);
125
143
  }, onPipeKeyDown: (kd) => {
126
144
  this.keyDownPipes["year"] = kd;
127
145
  }, onMouseDown: () => {
128
146
  this.setState({ activeWheel: "year" });
129
- }, children: years })), this.wheels.year && this.wheels.month && _jsx("span", { children: "-" }), this.wheels.month && (_jsx(WheelComponent, { size: size, CSS: CSS, active: this.state.activeWheel === "month", baseClass: baseClass + "-wheel", index: date.getMonth(), onChange: (newIndex) => {
147
+ }, children: years }, `years-${this.century}`)), this.wheels.year && this.wheels.month && _jsx("span", { children: "-" }), this.wheels.month && (_jsx(WheelComponent, { size: size, CSS: CSS, active: this.state.activeWheel === "month", baseClass: baseClass + "-wheel", index: date.getMonth(), onChange: (newIndex) => {
130
148
  this.setState((state) => ({
131
- date: this.setDateComponent(this.state.date, "month", newIndex),
149
+ date: this.setDateComponent(state.date, "month", newIndex),
132
150
  }), this.handleChange);
133
151
  }, onPipeKeyDown: (kd) => {
134
152
  this.keyDownPipes["month"] = kd;
135
153
  }, onMouseDown: () => {
136
154
  this.setState({ activeWheel: "month" });
137
- }, children: monthNames.map((m, i) => (_jsx("span", { children: m }, i))) })), this.wheels.month && this.wheels.date && _jsx("span", { children: "-" }), this.wheels.date && (_jsx(WheelComponent, { size: size, CSS: CSS, active: this.state.activeWheel === "date", baseClass: baseClass + "-wheel", index: date.getDate() - 1, onChange: (newIndex) => {
155
+ }, children: monthNames.map((m, i) => (_jsx("span", { children: m }, i))) })), this.wheels.month && this.wheels.date && _jsx("span", { children: "-" }), this.wheels.date && (_jsx(WheelComponent, { size: size, CSS: CSS, cycle: true, active: this.state.activeWheel === "date", baseClass: baseClass + "-wheel", index: date.getDate() - 1 + this.numberOfDaysInMonth, onChange: (rawIndex) => {
156
+ let day = rawIndex % this.numberOfDaysInMonth;
138
157
  this.setState((state) => ({
139
- date: this.setDateComponent(this.state.date, "date", newIndex + 1),
158
+ date: this.setDateComponent(state.date, "date", day + 1),
140
159
  }), this.handleChange);
141
160
  }, onPipeKeyDown: (kd) => {
142
161
  this.keyDownPipes["date"] = kd;
143
162
  }, onMouseDown: () => {
144
163
  this.setState({ activeWheel: "date" });
145
- }, children: days })), this.wheels.hours && this.wheels.year && _jsx("span", { className: CSS.element(baseClass, "spacer") }), this.wheels.hours && (_jsx(WheelComponent, { size: size, CSS: CSS, active: this.state.activeWheel === "hours", baseClass: baseClass + "-wheel", index: date.getHours(), onChange: (newIndex) => {
164
+ }, children: days }, "date")), this.wheels.hours && this.wheels.year && (_jsx("span", { className: CSS.element(baseClass, "spacer") })), this.wheels.hours && (_jsx(WheelComponent, { size: size, CSS: CSS, cycle: true, active: this.state.activeWheel === "hours", baseClass: baseClass + "-wheel", index: date.getHours() + 24, onChange: (rawIndex) => {
165
+ let hour = rawIndex % 24;
146
166
  this.setState((state) => ({
147
- date: this.setDateComponent(this.state.date, "hours", newIndex),
167
+ date: this.setDateComponent(state.date, "hours", hour),
148
168
  }), this.handleChange);
149
169
  }, onPipeKeyDown: (kd) => {
150
170
  this.keyDownPipes["hours"] = kd;
151
171
  }, onMouseDown: () => {
152
172
  this.setState({ activeWheel: "hours" });
153
- }, children: hours })), this.wheels.hours && this.wheels.minutes && _jsx("span", { children: ":" }), this.wheels.minutes && (_jsx(WheelComponent, { size: size, CSS: CSS, baseClass: baseClass + "-wheel", active: this.state.activeWheel === "minutes", index: date.getMinutes(), onChange: (newIndex) => {
173
+ }, children: hours }, "hours")), this.wheels.hours && this.wheels.minutes && _jsx("span", { children: ":" }), this.wheels.minutes && (_jsx(WheelComponent, { size: size, CSS: CSS, cycle: true, baseClass: baseClass + "-wheel", active: this.state.activeWheel === "minutes", index: date.getMinutes() + 60, onChange: (rawIndex) => {
174
+ let minute = rawIndex % 60;
154
175
  this.setState((state) => ({
155
- date: this.setDateComponent(this.state.date, "minutes", newIndex),
176
+ date: this.setDateComponent(state.date, "minutes", minute),
156
177
  }), this.handleChange);
157
178
  }, onPipeKeyDown: (kd) => {
158
179
  this.keyDownPipes["minutes"] = kd;
159
180
  }, onMouseDown: () => {
160
181
  this.setState({ activeWheel: "minutes" });
161
- }, children: minutes })), this.wheels.minutes && this.wheels.seconds && _jsx("span", { children: ":" }), this.wheels.seconds && (_jsx(WheelComponent, { size: size, CSS: CSS, baseClass: baseClass + "-wheel", active: this.state.activeWheel === "seconds", index: date.getSeconds(), onChange: (newIndex) => {
182
+ }, children: minutes }, "minutes")), this.wheels.minutes && this.wheels.seconds && _jsx("span", { children: ":" }), this.wheels.seconds && (_jsx(WheelComponent, { size: size, CSS: CSS, cycle: true, baseClass: baseClass + "-wheel", active: this.state.activeWheel === "seconds", index: date.getSeconds() + 60, onChange: (rawIndex) => {
183
+ let second = rawIndex % 60;
162
184
  this.setState((state) => ({
163
- date: this.setDateComponent(this.state.date, "seconds", newIndex),
185
+ date: this.setDateComponent(state.date, "seconds", second),
164
186
  }), this.handleChange);
165
187
  }, onPipeKeyDown: (kd) => {
166
188
  this.keyDownPipes["seconds"] = kd;
167
189
  }, onMouseDown: () => {
168
190
  this.setState({ activeWheel: "seconds" });
169
- }, children: minutes }))] }));
191
+ }, children: minutes }, "seconds"))] }));
170
192
  }
171
193
  componentDidMount() {
172
194
  let { widget } = this.props.instance;
@@ -1 +1 @@
1
- {"version":3,"file":"Field.d.ts","sourceRoot":"","sources":["../../../src/widgets/form/Field.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Field.d.ts","sourceRoot":"","sources":["../../../src/widgets/form/Field.tsx"],"names":[],"mappings":"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"}
@@ -124,6 +124,7 @@ export class Field extends PureContainerBase {
124
124
  data._readOnly = data.readOnly;
125
125
  data._viewMode = data.mode === "view" || data.viewMode;
126
126
  data._tabOnEnterKey = data.tabOnEnterKey;
127
+ data._visited = data.visited;
127
128
  data.validationValue = this.getValidationValue(data);
128
129
  instance.parentDisabled = context.parentDisabled;
129
130
  instance.parentReadOnly = context.parentReadOnly;
@@ -148,7 +149,7 @@ export class Field extends PureContainerBase {
148
149
  data.readOnly = coalesce(context.parentStrict ? context.parentReadOnly : null, data._readOnly, context.parentReadOnly);
149
150
  data.viewMode = coalesce(context.parentStrict ? context.parentViewMode : null, data._viewMode, context.parentViewMode);
150
151
  data.tabOnEnterKey = coalesce(context.parentStrict ? context.parentTabOnEnterKey : null, data._tabOnEnterKey, context.parentTabOnEnterKey);
151
- data.visited = coalesce(context.parentStrict ? context.parentVisited : null, data.visited, context.parentVisited);
152
+ data.visited = coalesce(context.parentStrict ? context.parentVisited : null, data._visited, context.parentVisited);
152
153
  if (!data.error && !data.disabled && !data.viewMode)
153
154
  this.validate(context, instance);
154
155
  if (data.visited && !state?.visited) {
@@ -19,6 +19,9 @@ export declare class Wheel extends PureContainerBase<WheelConfig> {
19
19
  declareData(...args: Record<string, unknown>[]): void;
20
20
  render(context: RenderingContext, instance: Instance, key: string): React.ReactNode;
21
21
  }
22
+ /** A cyclic wheel renders its option list this many times, leaving scroll
23
+ * headroom on both sides of the centre copy. */
24
+ export declare const WHEEL_BUFFER_COPIES = 3;
22
25
  export interface WheelComponentProps {
23
26
  size: number;
24
27
  children: React.ReactNode[];
@@ -28,6 +31,11 @@ export interface WheelComponentProps {
28
31
  className?: string;
29
32
  style?: React.CSSProperties;
30
33
  index?: number;
34
+ /** Set to render the option list as an endlessly scrolling wheel. The list
35
+ * is rendered `WHEEL_BUFFER_COPIES` times and the wheel snaps to whichever
36
+ * copy of the selected value is nearest its current position, so a wrap
37
+ * scrolls seamlessly into the adjacent identical copy. */
38
+ cycle?: boolean;
31
39
  onChange: (newIndex: number) => void;
32
40
  onPipeKeyDown?: (fn: (e: React.KeyboardEvent) => void) => void;
33
41
  onMouseDown?: () => void;
@@ -1 +1 @@
1
- {"version":3,"file":"Wheel.d.ts","sourceRoot":"","sources":["../../../src/widgets/form/Wheel.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Wheel.d.ts","sourceRoot":"","sources":["../../../src/widgets/form/Wheel.tsx"],"names":[],"mappings":"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"}
@@ -27,6 +27,9 @@ export class Wheel extends PureContainerBase {
27
27
  Wheel.prototype.baseClass = "wheel";
28
28
  Wheel.prototype.size = 3;
29
29
  Wheel.prototype.styled = true;
30
+ /** A cyclic wheel renders its option list this many times, leaving scroll
31
+ * headroom on both sides of the centre copy. */
32
+ export const WHEEL_BUFFER_COPIES = 3;
30
33
  export class WheelComponent extends VDOM.Component {
31
34
  index;
32
35
  wheelEl;
@@ -50,18 +53,25 @@ export class WheelComponent extends VDOM.Component {
50
53
  wheelRef;
51
54
  scrollRef;
52
55
  render() {
53
- let { size, children, CSS, baseClass, active, className, style, onMouseDown } = this.props;
56
+ let { size, children, CSS, baseClass, active, className, style, onMouseDown, cycle } = this.props;
54
57
  let optionClass = CSS.element(baseClass, "option");
55
58
  let dummyClass = CSS.element(baseClass, "option", { dummy: true });
59
+ // A cyclic wheel repeats the option list so it can scroll past either end.
60
+ let options = children;
61
+ if (cycle) {
62
+ options = [];
63
+ for (let i = 0; i < WHEEL_BUFFER_COPIES; i++)
64
+ options.push(...children);
65
+ }
56
66
  let tpad = [], bpad = [], padSize = 0;
57
67
  for (let i = 0; i < (size - 1) / 2; i++) {
58
- tpad.push({ key: -1 - i, child: children[0], cls: dummyClass });
59
- bpad.push({ key: -100 - i, child: children[0], cls: dummyClass });
68
+ tpad.push({ key: -1 - i, child: options[0], cls: dummyClass });
69
+ bpad.push({ key: -100 - i, child: options[0], cls: dummyClass });
60
70
  padSize++;
61
71
  }
62
72
  let displayedOptions = [
63
73
  ...tpad,
64
- ...children.map((c, i) => ({
74
+ ...options.map((c, i) => ({
65
75
  key: i,
66
76
  child: c,
67
77
  cls: optionClass,
@@ -102,7 +112,19 @@ export class WheelComponent extends VDOM.Component {
102
112
  this.props.onPipeKeyDown(this.onKeyDown);
103
113
  }
104
114
  UNSAFE_componentWillReceiveProps(props) {
105
- this.index = props.index || 0;
115
+ let newIndex = props.index || 0;
116
+ // A cyclic wheel renders the option list several times, so the same value
117
+ // appears in several copies. Snap to the copy nearest the wheel's current
118
+ // position rather than the one `props.index` names — a wrap then scrolls
119
+ // one item into the adjacent (identical) copy with no jump, instead of
120
+ // animating all the way back to the centre copy.
121
+ if (props.cycle) {
122
+ let period = props.children.length;
123
+ let value = ((newIndex % period) + period) % period;
124
+ newIndex = value + period * Math.round((this.index - value) / period);
125
+ newIndex = Math.max(0, Math.min(period * WHEEL_BUFFER_COPIES - 1, newIndex));
126
+ }
127
+ this.index = newIndex;
106
128
  this.scrollTo();
107
129
  }
108
130
  componentWillUnmount() {
@@ -141,8 +163,9 @@ export class WheelComponent extends VDOM.Component {
141
163
  }
142
164
  }
143
165
  select(newIndex) {
144
- let { children } = this.props;
145
- newIndex = Math.max(0, Math.min(children.length - 1, newIndex));
166
+ let { children, cycle } = this.props;
167
+ let length = children.length * (cycle ? WHEEL_BUFFER_COPIES : 1);
168
+ newIndex = Math.max(0, Math.min(length - 1, newIndex));
146
169
  if (this.index !== newIndex) {
147
170
  this.index = newIndex;
148
171
  this.props.onChange(newIndex);
@@ -259,7 +259,7 @@ export interface GridConfig<T = any> extends StyledContainerConfig {
259
259
  /** Callback function to be executed when a column header is right-clicked. */
260
260
  onColumnContextMenu?: string | ((e: React.MouseEvent<any>, columnInstance: Instance) => void);
261
261
  /** Callback to create a filter function for given filter params. */
262
- onCreateFilter?: (filterParams: any, instance?: Instance) => (record: T) => boolean;
262
+ onCreateFilter?: (filterParams: any, instance?: Instance) => undefined | null | ((record: T) => boolean);
263
263
  /** Enable infinite scrolling */
264
264
  infinite?: boolean;
265
265
  /** If set, clicking on the column header will loop between ASC, DESC and no sorting order, instead of ASC and DESC only. */