Skip to content

Commit d60a685

Browse files
committed
Version 5.11.1
1 parent 106ee67 commit d60a685

File tree

10 files changed

+141
-24
lines changed

10 files changed

+141
-24
lines changed

package.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"private": true,
33
"name": "@amcharts/amcharts5",
4-
"version": "5.11.0",
4+
"version": "5.11.1",
55
"author": "amCharts <[email protected]> (https://www.amcharts.com/)",
66
"description": "amCharts 5",
77
"homepage": "https://www.amcharts.com/",
@@ -51,7 +51,7 @@
5151
"d3-selection": "^3.0.0",
5252
"d3-transition": "^3.0.0",
5353
"d3-voronoi-treemap": "^1.1.2",
54-
"flatpickr": "^4.6.9",
54+
"flatpickr": "^4.6.13",
5555
"markerjs2": "^2.29.4",
5656
"pdfmake": "^0.2.2",
5757
"polylabel": "^1.1.0",

packages/shared/CHANGELOG.md

+14
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,20 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/).
55
Please note, that this project, while following numbering syntax, it DOES NOT
66
adhere to [Semantic Versioning](http://semver.org/spec/v2.0.0.html) rules.
77

8+
## [5.11.1] - 2025-02-25
9+
10+
### Added
11+
- New setting `disableWeekDays` (array of numbers) in `DateRangeSelector`. E.g. set to `diasbleWeekDays: [0, 6]` to disable Sundays and Saturdays.
12+
13+
### Fixed
14+
- The value of a `Hierarchy` node with `toggleKey: "none"` would be reset to `"disabled"`, after data was appended to the node.
15+
- `DurationFormatter` was not correctly rounding fractional numbers in some cases.
16+
- `DateRangeSelector` was not correctly handling `firstDayOfWeek` value from locale.
17+
- `XYCursor` lines were not focusable until cursor was shown for the first time.
18+
- Setting `exclude` on a `MapSeries` would not re-enable previously excluded objects.
19+
- Fixed issue with stacking of negative values.
20+
21+
822
## [5.11.0] - 2025-02-03
923

1024
### Added

src/.internal/charts/hierarchy/Hierarchy.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -578,7 +578,7 @@ export abstract class Hierarchy extends Series {
578578
const node = dataItem.get("node");
579579

580580
if (node) {
581-
node.set("toggleKey", "disabled");
581+
node.set("toggleKey", this.nodes.template.get("toggleKey", "disabled"));
582582
}
583583

584584
let depth = dataItem.get("depth");

src/.internal/charts/map/MapSeries.ts

+11-1
Original file line numberDiff line numberDiff line change
@@ -173,8 +173,18 @@ export abstract class MapSeries extends Series {
173173
this._excludeDataItem(dataItem)
174174
}
175175
})
176+
177+
$array.each(this._excluded, (dataItem) => {
178+
const id = dataItem.get("id");
179+
if (id) {
180+
if (exclude.indexOf(id) == -1) {
181+
this._unexcludeDataItem(dataItem)
182+
}
183+
}
184+
})
176185
}
177186

187+
178188
if (!exclude || exclude.length == 0) {
179189
$array.each(this._excluded, (dataItem) => {
180190
this._unexcludeDataItem(dataItem)
@@ -403,5 +413,5 @@ export abstract class MapSeries extends Series {
403413
super._onDataClear();
404414
this._geoJSONparsed = false;
405415
this._markDirtyKey("exclude");
406-
}
416+
}
407417
}

src/.internal/charts/stock/toolbar/DateRangeSelector.ts

+24-3
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,15 @@ export interface IDateRangeSelectorSettings extends IStockControlSettings {
4848
*/
4949
maxDate?: Date | "auto" | null;
5050

51+
/**
52+
* Set to array of days to disable in date picker dropdowns, with Sunday
53+
* starting at 0, Monday - 1, etc.
54+
*
55+
* @default []
56+
* @since 5.11.1
57+
*/
58+
disableWeekDays?: number[];
59+
5160
}
5261

5362
export interface IDateRangeSelectorPrivate extends IStockControlPrivate {
@@ -177,11 +186,20 @@ export class DateRangeSelector extends StockControl {
177186
// Date pickers
178187
const pickerLocale = this._getPickerLocale();
179188

189+
// Disable weekends?
190+
const disableWeekDays: number[] = this.get("disableWeekDays", []);
191+
const disable = disableWeekDays.length ? [
192+
function(date: Date) {
193+
return (disableWeekDays.indexOf(date.getDay()) !== -1);
194+
}
195+
] : [];
196+
180197
const fromPicker = flatpickr(fromField, {
181198
inline: true,
182199
appendTo: fromColumn,
183200
allowInput: true,
184201
locale: pickerLocale,
202+
disable: disable,
185203
formatDate: (date) => {
186204
return this._formatDate(date);
187205
},
@@ -197,6 +215,7 @@ export class DateRangeSelector extends StockControl {
197215
appendTo: toColumn,
198216
allowInput: true,
199217
locale: pickerLocale,
218+
disable: disable,
200219
formatDate: (date) => {
201220
return this._formatDate(date);
202221
},
@@ -401,7 +420,7 @@ export class DateRangeSelector extends StockControl {
401420

402421
protected _getPickerLocale(): any {
403422
const l = this._root.language;
404-
return {
423+
const locale: any = {
405424
weekdays: {
406425
shorthand: [
407426
l.translate("Sun"),
@@ -452,7 +471,7 @@ export class DateRangeSelector extends StockControl {
452471
l.translate("December"),
453472
],
454473
},
455-
firstDayOfWeek: l.translate("firstDayOfWeek"),
474+
firstDayOfWeek: this._root.locale.firstDayOfWeek,
456475
ordinal: l.translateFunc("_dateOrd"),
457476
rangeSeparator: " " + l.translateAny("to") + " ",
458477
weekAbbreviation: l.translateAny("Wk"),
@@ -463,8 +482,10 @@ export class DateRangeSelector extends StockControl {
463482
monthAriaLabel: l.translateAny("Month"),
464483
hourAriaLabel: l.translateAny("Hour"),
465484
minuteAriaLabel: l.translateAny("Minute"),
466-
time_24hr: true,
485+
time_24hr: true
467486
}
487+
488+
return locale;
468489
}
469490

470491
/**

src/.internal/charts/xy/series/XYSeries.ts

+6-1
Original file line numberDiff line numberDiff line change
@@ -1597,6 +1597,11 @@ export abstract class XYSeries extends Series {
15971597
if (stackToNegative) {
15981598
if ($type.isNumber(value)) {
15991599
if ($type.isNumber(stackValue)) {
1600+
1601+
if(s == len - 1){
1602+
dataItem.setRaw(stackToItemKey, undefined);
1603+
}
1604+
16001605
if (value >= 0 && stackValue >= 0) {
16011606
dataItem.setRaw(stackToItemKey, stackToItem);
16021607
this._reallyStackedTo[stackToSeries.uid] = stackToSeries;
@@ -1608,7 +1613,7 @@ export abstract class XYSeries extends Series {
16081613
this._reallyStackedTo[stackToSeries.uid] = stackToSeries;
16091614
stackToSeries._stackedSeries[this.uid] = this;
16101615
break;
1611-
}
1616+
}
16121617
}
16131618
}
16141619
else {

src/.internal/core/Registry.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ export class Registry {
66
/**
77
* Currently running version of amCharts.
88
*/
9-
readonly version: string = "5.11.0";
9+
readonly version: string = "5.11.1";
1010

1111
/**
1212
* List of applied licenses.

src/.internal/core/render/Sprite.ts

+16-11
Original file line numberDiff line numberDiff line change
@@ -33,29 +33,29 @@ import * as $math from "../util/Math";
3333
*/
3434
class SpriteEventDispatcher<Target, E extends Events<Target, ISpriteEvents>> extends EventDispatcher<E> {
3535
protected static RENDERER_EVENTS: { [K in keyof IRendererEvents]?: <E extends Events<Sprite, ISpriteEvents>>(this: SpriteEventDispatcher<Sprite, E>, event: IRendererEvents[K]) => void } = {
36-
"click": function (event) {
36+
"click": function(event) {
3737
if (this.isEnabled("click") && !this._sprite.isDragging() && this._sprite._hasDown() && !this._sprite._hasMoved(this._makePointerEvent("click", event))) {
3838
this.dispatch("click", this._makePointerEvent("click", event));
3939
}
4040
},
4141

42-
"rightclick": function (event) {
42+
"rightclick": function(event) {
4343
if (this.isEnabled("rightclick")) {
4444
this.dispatch("rightclick", this._makePointerEvent("rightclick", event));
4545
}
4646
},
4747

48-
"middleclick": function (event) {
48+
"middleclick": function(event) {
4949
if (this.isEnabled("middleclick")) {
5050
this.dispatch("middleclick", this._makePointerEvent("middleclick", event));
5151
}
5252
},
5353

54-
"dblclick": function (event) {
54+
"dblclick": function(event) {
5555
this.dispatchParents("dblclick", this._makePointerEvent("dblclick", event));
5656
},
5757

58-
"pointerover": function (event) {
58+
"pointerover": function(event) {
5959

6060
const sprite = this._sprite;
6161
let dispatch = true;
@@ -85,35 +85,35 @@ class SpriteEventDispatcher<Target, E extends Events<Target, ISpriteEvents>> ext
8585
}
8686
},
8787

88-
"pointerout": function (event) {
88+
"pointerout": function(event) {
8989
if (this.isEnabled("pointerout")) {
9090
this.dispatch("pointerout", this._makePointerEvent("pointerout", event));
9191
}
9292
},
9393

94-
"pointerdown": function (event) {
94+
"pointerdown": function(event) {
9595
this.dispatchParents("pointerdown", this._makePointerEvent("pointerdown", event));
9696
},
9797

98-
"pointerup": function (event) {
98+
"pointerup": function(event) {
9999
if (this.isEnabled("pointerup")) {
100100
this.dispatch("pointerup", this._makePointerEvent("pointerup", event));
101101
}
102102
},
103103

104-
"globalpointerup": function (event) {
104+
"globalpointerup": function(event) {
105105
if (this.isEnabled("globalpointerup")) {
106106
this.dispatch("globalpointerup", this._makePointerEvent("globalpointerup", event));
107107
}
108108
},
109109

110-
"globalpointermove": function (event) {
110+
"globalpointermove": function(event) {
111111
if (this.isEnabled("globalpointermove")) {
112112
this.dispatch("globalpointermove", this._makePointerEvent("globalpointermove", event));
113113
}
114114
},
115115

116-
"wheel": function (event) {
116+
"wheel": function(event) {
117117
this.dispatchParents("wheel", {
118118
type: "wheel",
119119
target: this._sprite,
@@ -1469,6 +1469,11 @@ export abstract class Sprite extends Entity {
14691469
this._disposers.push(events.on("blur", () => {
14701470
this.setPrivateRaw("touchHovering", false);
14711471
}));
1472+
this._disposers.push(events.once("boundschanged", () => {
1473+
// We might need to do this to re-evaluate accessibility attributes
1474+
// once the element gains size (bounds)
1475+
this.markDirtyAccessibility();
1476+
}));
14721477
}
14731478

14741479
if (this.isPrivateDirty("focusable")) {

src/.internal/core/util/DurationFormatter.ts

+65-3
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,7 @@ export class DurationFormatter extends Entity {
206206
details = info.zero;
207207
}
208208

209+
209210
// Format
210211
let formatted = this.applyFormat(source, details);
211212

@@ -387,19 +388,29 @@ export class DurationFormatter extends Entity {
387388
let negative = !details.absolute && (value < this.get("negativeBase"));
388389
value = Math.abs(value);
389390

391+
390392
// Recalculate to milliseconds
391393
let tstamp = this.toTimeStamp(value, details.baseUnit);
392394

393395
// Init return value
394396
let res = details.template;
397+
const values: any = {
398+
millisecond: 0,
399+
second: 0,
400+
minute: 0,
401+
hour: 0,
402+
day: 0,
403+
week: 0,
404+
month: 0,
405+
year: 0
406+
};
395407

396408
// Iterate through duration parts
397409
for (let i = 0, len = details.parts.length; i < len; i++) {
398410

399411
// Gather the part
400412
let part = details.parts[i];
401-
let unit = this._toTimeUnit(part.substr(0, 1));
402-
let digits = part.length;
413+
let unit: any = this._toTimeUnit(part.substr(0, 1));
403414

404415
// Calculate current unit value
405416
let ints: number;
@@ -410,12 +421,63 @@ export class DurationFormatter extends Entity {
410421
else {
411422
ints = Math.round(tstamp / unitValue);
412423
}
413-
res = res.replace($type.PLACEHOLDER, $utils.padString(ints, digits, "0"));
424+
425+
values[unit] += ints;
414426

415427
// Reduce timestamp
416428
tstamp -= ints * unitValue;
417429
}
418430

431+
// Check if we have full unit that we need to bump up to higher unit
432+
$object.each(values, (unit, value) => {
433+
if (unit == "millisecond" && value == 1000) {
434+
values["second"]++;
435+
values["millisecond"] = 0;
436+
}
437+
else if (unit == "second" && value == 60) {
438+
values["minute"]++;
439+
values["second"] = 0;
440+
}
441+
else if (unit == "minute" && value == 60) {
442+
values["hour"]++;
443+
values["minute"] = 0;
444+
}
445+
else if (unit == "hour" && value == 24) {
446+
values["day"]++;
447+
values["hour"] = 0;
448+
}
449+
else if (unit == "day" && value == 7) {
450+
values["week"]++;
451+
values["day"] = 0;
452+
}
453+
else if (unit == "day" && value == 30) {
454+
values["month"]++;
455+
values["day"] = 0;
456+
}
457+
else if (unit == "month" && value == 12) {
458+
values["year"]++;
459+
values["month"] = 0;
460+
}
461+
// if (val > 0) {
462+
// res = res.replace($type.PLACEHOLDER, $utils.padString(val, 2, "0"));
463+
// }
464+
// else {
465+
// res = res.replace($type.PLACEHOLDER, "");
466+
// }
467+
});
468+
469+
// Iterate again
470+
for (let i = 0, len = details.parts.length; i < len; i++) {
471+
// Gather the part
472+
let part = details.parts[i];
473+
let unit: any = this._toTimeUnit(part.substr(0, 1));
474+
let digits = part.length;
475+
476+
// Calculate current unit value
477+
res = res.replace($type.PLACEHOLDER, $utils.padString(values[unit], digits, "0"));
478+
}
479+
480+
419481
// Reapply negative sign
420482
if (negative) {
421483
res = "-" + res;

yarn.lock

+1-1
Original file line numberDiff line numberDiff line change
@@ -1989,7 +1989,7 @@ find-up@^3.0.0:
19891989
dependencies:
19901990
locate-path "^3.0.0"
19911991

1992-
flatpickr@^4.6.9:
1992+
flatpickr@^4.6.13:
19931993
version "4.6.13"
19941994
resolved "https://registry.yarnpkg.com/flatpickr/-/flatpickr-4.6.13.tgz#8a029548187fd6e0d670908471e43abe9ad18d94"
19951995
integrity sha512-97PMG/aywoYpB4IvbvUJi0RQi8vearvU0oov1WW3k0WZPBMrTQVqekSX5CjSG/M4Q3i6A/0FKXC7RyAoAUUSPw==

0 commit comments

Comments
 (0)