@amcharts/amcharts5 5.0.18 → 5.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.
- package/.internal/charts/map/MapLineSeries.d.ts +6 -1
- package/.internal/charts/map/MapLineSeries.d.ts.map +1 -1
- package/.internal/charts/map/MapLineSeries.js +11 -6
- package/.internal/charts/map/MapLineSeries.js.map +1 -1
- package/.internal/charts/map/MapPointSeries.d.ts +6 -1
- package/.internal/charts/map/MapPointSeries.d.ts.map +1 -1
- package/.internal/charts/map/MapPointSeries.js +7 -2
- package/.internal/charts/map/MapPointSeries.js.map +1 -1
- package/.internal/charts/map/MapPolygonSeries.d.ts +6 -1
- package/.internal/charts/map/MapPolygonSeries.d.ts.map +1 -1
- package/.internal/charts/map/MapPolygonSeries.js +7 -2
- package/.internal/charts/map/MapPolygonSeries.js.map +1 -1
- package/.internal/charts/percent/PercentSeries.d.ts +2 -0
- package/.internal/charts/percent/PercentSeries.d.ts.map +1 -1
- package/.internal/charts/percent/PercentSeries.js +21 -0
- package/.internal/charts/percent/PercentSeries.js.map +1 -1
- package/.internal/charts/xy/XYChart.d.ts +4 -0
- package/.internal/charts/xy/XYChart.d.ts.map +1 -1
- package/.internal/charts/xy/XYChart.js +3 -0
- package/.internal/charts/xy/XYChart.js.map +1 -1
- package/.internal/charts/xy/XYChartDefaultTheme.d.ts.map +1 -1
- package/.internal/charts/xy/XYChartDefaultTheme.js +15 -1
- package/.internal/charts/xy/XYChartDefaultTheme.js.map +1 -1
- package/.internal/charts/xy/XYCursor.d.ts +6 -0
- package/.internal/charts/xy/XYCursor.d.ts.map +1 -1
- package/.internal/charts/xy/XYCursor.js +4 -0
- package/.internal/charts/xy/XYCursor.js.map +1 -1
- package/.internal/charts/xy/axes/Axis.d.ts +1 -0
- package/.internal/charts/xy/axes/Axis.d.ts.map +1 -1
- package/.internal/charts/xy/axes/Axis.js +10 -3
- package/.internal/charts/xy/axes/Axis.js.map +1 -1
- package/.internal/charts/xy/axes/CategoryDateAxis.js +1 -1
- package/.internal/charts/xy/axes/CategoryDateAxis.js.map +1 -1
- package/.internal/charts/xy/axes/DateAxis.d.ts +3 -0
- package/.internal/charts/xy/axes/DateAxis.d.ts.map +1 -1
- package/.internal/charts/xy/axes/DateAxis.js +74 -17
- package/.internal/charts/xy/axes/DateAxis.js.map +1 -1
- package/.internal/charts/xy/axes/GaplessDateAxis.d.ts +48 -0
- package/.internal/charts/xy/axes/GaplessDateAxis.d.ts.map +1 -0
- package/.internal/charts/xy/axes/GaplessDateAxis.js +309 -0
- package/.internal/charts/xy/axes/GaplessDateAxis.js.map +1 -0
- package/.internal/charts/xy/axes/ValueAxis.d.ts.map +1 -1
- package/.internal/charts/xy/axes/ValueAxis.js +1 -1
- package/.internal/charts/xy/axes/ValueAxis.js.map +1 -1
- package/.internal/charts/xy/series/LineSeries.d.ts +1 -0
- package/.internal/charts/xy/series/LineSeries.d.ts.map +1 -1
- package/.internal/charts/xy/series/LineSeries.js +14 -2
- package/.internal/charts/xy/series/LineSeries.js.map +1 -1
- package/.internal/charts/xy/series/XYSeries.d.ts +4 -0
- package/.internal/charts/xy/series/XYSeries.d.ts.map +1 -1
- package/.internal/charts/xy/series/XYSeries.js +7 -2
- package/.internal/charts/xy/series/XYSeries.js.map +1 -1
- package/.internal/core/Classes.d.ts +4 -0
- package/.internal/core/Classes.d.ts.map +1 -1
- package/.internal/core/Classes.js.map +1 -1
- package/.internal/core/Root.d.ts +8 -3
- package/.internal/core/Root.d.ts.map +1 -1
- package/.internal/core/Root.js +10 -4
- package/.internal/core/Root.js.map +1 -1
- package/.internal/core/render/Component.d.ts +6 -1
- package/.internal/core/render/Component.d.ts.map +1 -1
- package/.internal/core/render/Component.js +8 -3
- package/.internal/core/render/Component.js.map +1 -1
- package/.internal/core/render/Container.d.ts.map +1 -1
- package/.internal/core/render/Container.js +1 -9
- package/.internal/core/render/Container.js.map +1 -1
- package/.internal/core/render/Ellipse.d.ts +28 -0
- package/.internal/core/render/Ellipse.d.ts.map +1 -0
- package/.internal/core/render/Ellipse.js +51 -0
- package/.internal/core/render/Ellipse.js.map +1 -0
- package/.internal/core/render/GridLayout.d.ts.map +1 -1
- package/.internal/core/render/GridLayout.js +2 -2
- package/.internal/core/render/GridLayout.js.map +1 -1
- package/.internal/core/render/HorizontalLayout.d.ts.map +1 -1
- package/.internal/core/render/HorizontalLayout.js +14 -0
- package/.internal/core/render/HorizontalLayout.js.map +1 -1
- package/.internal/core/render/Line.js +1 -1
- package/.internal/core/render/Line.js.map +1 -1
- package/.internal/core/render/Series.d.ts +2 -2
- package/.internal/core/render/Series.d.ts.map +1 -1
- package/.internal/core/render/Series.js +4 -3
- package/.internal/core/render/Series.js.map +1 -1
- package/.internal/core/render/Slice.d.ts.map +1 -1
- package/.internal/core/render/Slice.js +7 -1
- package/.internal/core/render/Slice.js.map +1 -1
- package/.internal/core/render/Slider.d.ts +0 -2
- package/.internal/core/render/Slider.d.ts.map +1 -1
- package/.internal/core/render/Slider.js +0 -2
- package/.internal/core/render/Slider.js.map +1 -1
- package/.internal/core/render/Sprite.d.ts +11 -2
- package/.internal/core/render/Sprite.d.ts.map +1 -1
- package/.internal/core/render/Sprite.js +40 -17
- package/.internal/core/render/Sprite.js.map +1 -1
- package/.internal/core/render/VerticalLayout.d.ts.map +1 -1
- package/.internal/core/render/VerticalLayout.js +14 -0
- package/.internal/core/render/VerticalLayout.js.map +1 -1
- package/.internal/core/render/backend/CanvasRenderer.d.ts +9 -4
- package/.internal/core/render/backend/CanvasRenderer.d.ts.map +1 -1
- package/.internal/core/render/backend/CanvasRenderer.js +122 -30
- package/.internal/core/render/backend/CanvasRenderer.js.map +1 -1
- package/.internal/core/render/backend/Renderer.d.ts +2 -0
- package/.internal/core/render/backend/Renderer.d.ts.map +1 -1
- package/.internal/core/render/backend/Renderer.js.map +1 -1
- package/.internal/core/util/Array.d.ts.map +1 -1
- package/.internal/core/util/Array.js +13 -23
- package/.internal/core/util/Array.js.map +1 -1
- package/.internal/core/util/ColorSet.d.ts +0 -1
- package/.internal/core/util/ColorSet.d.ts.map +1 -1
- package/.internal/core/util/ColorSet.js +1 -12
- package/.internal/core/util/ColorSet.js.map +1 -1
- package/.internal/core/util/DateFormatter.d.ts.map +1 -1
- package/.internal/core/util/DateFormatter.js +4 -7
- package/.internal/core/util/DateFormatter.js.map +1 -1
- package/.internal/core/util/Entity.d.ts +4 -0
- package/.internal/core/util/Entity.d.ts.map +1 -1
- package/.internal/core/util/Entity.js +54 -7
- package/.internal/core/util/Entity.js.map +1 -1
- package/.internal/core/util/Template.js +1 -1
- package/.internal/core/util/Template.js.map +1 -1
- package/.internal/core/util/TextFormatter.js +2 -2
- package/.internal/core/util/TextFormatter.js.map +1 -1
- package/.internal/core/util/Time.d.ts +16 -19
- package/.internal/core/util/Time.d.ts.map +1 -1
- package/.internal/core/util/Time.js +209 -122
- package/.internal/core/util/Time.js.map +1 -1
- package/.internal/core/util/Timezone.d.ts +28 -0
- package/.internal/core/util/Timezone.d.ts.map +1 -0
- package/.internal/core/util/Timezone.js +138 -0
- package/.internal/core/util/Timezone.js.map +1 -0
- package/.internal/core/util/Utils.d.ts +1 -1
- package/.internal/core/util/Utils.js +1 -1
- package/.internal/core/util/Utils.js.map +1 -1
- package/.internal/plugins/exporting/Exporting.d.ts +10 -1
- package/.internal/plugins/exporting/Exporting.d.ts.map +1 -1
- package/.internal/plugins/exporting/Exporting.js +11 -3
- package/.internal/plugins/exporting/Exporting.js.map +1 -1
- package/.internal/plugins/sliceGrouper/SliceGrouper.d.ts +76 -0
- package/.internal/plugins/sliceGrouper/SliceGrouper.d.ts.map +1 -0
- package/.internal/plugins/sliceGrouper/SliceGrouper.js +241 -0
- package/.internal/plugins/sliceGrouper/SliceGrouper.js.map +1 -0
- package/CHANGELOG.md +61 -0
- package/examples/javascript/flow-chord/package.json +1 -1
- package/examples/javascript/flow-chord-directed/package.json +1 -1
- package/examples/javascript/flow-chord-non-ribbon/package.json +1 -1
- package/examples/javascript/flow-sankey/package.json +1 -1
- package/examples/javascript/gauge/package.json +1 -1
- package/examples/javascript/gauge-bands/package.json +1 -1
- package/examples/javascript/hierarchy-force-directed/package.json +1 -1
- package/examples/javascript/hierarchy-pack/package.json +1 -1
- package/examples/javascript/hierarchy-partition/package.json +1 -1
- package/examples/javascript/hierarchy-sunburst/package.json +1 -1
- package/examples/javascript/hierarchy-tree/package.json +1 -1
- package/examples/javascript/hierarchy-treemap/package.json +1 -1
- package/examples/javascript/map-animating-along-lines/package.json +1 -1
- package/examples/javascript/map-day-and-night/package.json +1 -1
- package/examples/javascript/map-globe-rotate-to-country/package.json +1 -1
- package/examples/javascript/map-globe-with-projected-circles/package.json +1 -1
- package/examples/javascript/map-with-bubbles/package.json +1 -1
- package/examples/javascript/map-zoom-to-country/package.json +1 -1
- package/examples/javascript/misc-40-charts/package.json +1 -1
- package/examples/javascript/misc-microchart-grid/package.json +1 -1
- package/examples/javascript/pie-chart/package.json +1 -1
- package/examples/javascript/pie-donut-chart/package.json +1 -1
- package/examples/javascript/pie-variable-radius/package.json +1 -1
- package/examples/javascript/radar-column-iwatch-style/package.json +1 -1
- package/examples/javascript/radar-heat-map/package.json +1 -1
- package/examples/javascript/radar-line/package.json +1 -1
- package/examples/javascript/radar-time-line/package.json +1 -1
- package/examples/javascript/sliced-funnel/package.json +1 -1
- package/examples/javascript/sliced-pictorial-stacked/package.json +1 -1
- package/examples/javascript/sliced-pyramid/package.json +1 -1
- package/examples/javascript/venn-diagram/package.json +1 -1
- package/examples/javascript/wordcloud-with-data/package.json +1 -1
- package/examples/javascript/wordcloud-with-text/package.json +1 -1
- package/examples/javascript/xy-100-percent-stacked-column/package.json +1 -1
- package/examples/javascript/xy-animated-bullet-at-the-end-of-the-series/package.json +1 -1
- package/examples/javascript/xy-bubble/package.json +1 -1
- package/examples/javascript/xy-candlestick/package.json +1 -1
- package/examples/javascript/xy-clustered-column/package.json +1 -1
- package/examples/javascript/xy-column/package.json +1 -1
- package/examples/javascript/xy-comparing-series-google-analytics-style/package.json +1 -1
- package/examples/javascript/xy-data-grouping/package.json +1 -1
- package/examples/javascript/xy-draggable-range/package.json +1 -1
- package/examples/javascript/xy-drawing-series-with-mouse-or-touch/package.json +1 -1
- package/examples/javascript/xy-dumbbell plot/package.json +1 -1
- package/examples/javascript/xy-evenly-spaced-date-axis/package.json +1 -1
- package/examples/javascript/xy-line/package.json +1 -1
- package/examples/javascript/xy-line-highlight-on-legend-hover/package.json +1 -1
- package/examples/javascript/xy-live-data/package.json +1 -1
- package/examples/javascript/xy-multiple-synced-value-axes/package.json +1 -1
- package/examples/javascript/xy-ohlc/package.json +1 -1
- package/examples/javascript/xy-real-time-data-sorting/package.json +1 -1
- package/examples/javascript/xy-smoothed-line/package.json +1 -1
- package/examples/javascript/xy-stacked-and-clustered-column/package.json +1 -1
- package/examples/javascript/xy-stacked-column/package.json +1 -1
- package/examples/javascript/xy-stacked-step/package.json +1 -1
- package/examples/javascript/xy-stock/package.json +1 -1
- package/examples/javascript/xy-stock-comparing/package.json +1 -1
- package/examples/typescript/flow-chord/package.json +1 -1
- package/examples/typescript/flow-chord-directed/package.json +1 -1
- package/examples/typescript/flow-chord-non-ribbon/package.json +1 -1
- package/examples/typescript/flow-sankey/package.json +1 -1
- package/examples/typescript/gauge/package.json +1 -1
- package/examples/typescript/gauge-bands/package.json +1 -1
- package/examples/typescript/hierarchy-force-directed/package.json +1 -1
- package/examples/typescript/hierarchy-pack/package.json +1 -1
- package/examples/typescript/hierarchy-partition/package.json +1 -1
- package/examples/typescript/hierarchy-sunburst/package.json +1 -1
- package/examples/typescript/hierarchy-tree/package.json +1 -1
- package/examples/typescript/hierarchy-treemap/package.json +1 -1
- package/examples/typescript/map-animating-along-lines/package.json +1 -1
- package/examples/typescript/map-day-and-night/package.json +1 -1
- package/examples/typescript/map-globe-rotate-to-country/package.json +1 -1
- package/examples/typescript/map-globe-with-projected-circles/package.json +1 -1
- package/examples/typescript/map-with-bubbles/package.json +1 -1
- package/examples/typescript/map-zoom-to-country/package.json +1 -1
- package/examples/typescript/misc-40-charts/package.json +1 -1
- package/examples/typescript/misc-microchart-grid/package.json +1 -1
- package/examples/typescript/pie-chart/package.json +1 -1
- package/examples/typescript/pie-donut-chart/package.json +1 -1
- package/examples/typescript/pie-variable-radius/package.json +1 -1
- package/examples/typescript/radar-column-iwatch-style/package.json +1 -1
- package/examples/typescript/radar-heat-map/package.json +1 -1
- package/examples/typescript/radar-line/package.json +1 -1
- package/examples/typescript/radar-time-line/package.json +1 -1
- package/examples/typescript/sliced-funnel/package.json +1 -1
- package/examples/typescript/sliced-pictorial-stacked/package.json +1 -1
- package/examples/typescript/sliced-pyramid/package.json +1 -1
- package/examples/typescript/venn-diagram/package.json +1 -1
- package/examples/typescript/wordcloud-with-data/package.json +1 -1
- package/examples/typescript/wordcloud-with-text/package.json +1 -1
- package/examples/typescript/xy-100-percent-stacked-column/package.json +1 -1
- package/examples/typescript/xy-animated-bullet-at-the-end-of-the-series/package.json +1 -1
- package/examples/typescript/xy-bubble/package.json +1 -1
- package/examples/typescript/xy-candlestick/package.json +1 -1
- package/examples/typescript/xy-clustered-column/package.json +1 -1
- package/examples/typescript/xy-column/package.json +1 -1
- package/examples/typescript/xy-comparing-series-google-analytics-style/package.json +1 -1
- package/examples/typescript/xy-data-grouping/package.json +1 -1
- package/examples/typescript/xy-draggable-range/package.json +1 -1
- package/examples/typescript/xy-drawing-series-with-mouse-or-touch/package.json +1 -1
- package/examples/typescript/xy-dumbbell plot/package.json +1 -1
- package/examples/typescript/xy-evenly-spaced-date-axis/package.json +1 -1
- package/examples/typescript/xy-line/package.json +1 -1
- package/examples/typescript/xy-line-highlight-on-legend-hover/package.json +1 -1
- package/examples/typescript/xy-live-data/package.json +1 -1
- package/examples/typescript/xy-multiple-synced-value-axes/package.json +1 -1
- package/examples/typescript/xy-ohlc/package.json +1 -1
- package/examples/typescript/xy-real-time-data-sorting/package.json +1 -1
- package/examples/typescript/xy-smoothed-line/package.json +1 -1
- package/examples/typescript/xy-stacked-and-clustered-column/package.json +1 -1
- package/examples/typescript/xy-stacked-column/package.json +1 -1
- package/examples/typescript/xy-stacked-step/package.json +1 -1
- package/examples/typescript/xy-stock/package.json +1 -1
- package/examples/typescript/xy-stock-comparing/package.json +1 -1
- package/index.d.ts +2 -0
- package/index.d.ts.map +1 -1
- package/index.js +2 -0
- package/index.js.map +1 -1
- package/package.json +1 -1
- package/plugins/sliceGrouper.d.ts +2 -0
- package/plugins/sliceGrouper.d.ts.map +1 -0
- package/plugins/sliceGrouper.js +2 -0
- package/plugins/sliceGrouper.js.map +1 -0
- package/xy.d.ts +1 -0
- package/xy.d.ts.map +1 -1
- package/xy.js +1 -0
- package/xy.js.map +1 -1
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import type { DataItem } from "../../core/render/Component";
|
|
2
|
+
import type { PercentSeries, IPercentSeriesDataItem } from "../../charts/percent/PercentSeries";
|
|
3
|
+
import type { Legend } from "../../core/render/Legend";
|
|
4
|
+
import { Button } from "../../core/render/Button";
|
|
5
|
+
import { Entity, IEntitySettings, IEntityPrivate, IEntityEvents } from "../../core/util/Entity";
|
|
6
|
+
export interface ISliceGrouperSettings extends IEntitySettings {
|
|
7
|
+
/**
|
|
8
|
+
* A series that will be used to group slices on.
|
|
9
|
+
*/
|
|
10
|
+
series?: PercentSeries;
|
|
11
|
+
/**
|
|
12
|
+
* If set, plugin will try to manipulate the items in legend, such as
|
|
13
|
+
* adding group slice, hiding items for small slices, etc.
|
|
14
|
+
*/
|
|
15
|
+
legend?: Legend;
|
|
16
|
+
/**
|
|
17
|
+
* Any slice which has percent value less than this setting will be grouped.
|
|
18
|
+
*
|
|
19
|
+
* @default 5
|
|
20
|
+
*/
|
|
21
|
+
threshold?: number;
|
|
22
|
+
/**
|
|
23
|
+
* If set, only X first slices will be left as they are. The rest of the
|
|
24
|
+
* slices will be grouped.
|
|
25
|
+
*/
|
|
26
|
+
limit?: number;
|
|
27
|
+
/**
|
|
28
|
+
* Name (category) of the group slice.
|
|
29
|
+
*
|
|
30
|
+
* @default "Other"
|
|
31
|
+
*/
|
|
32
|
+
groupName?: string;
|
|
33
|
+
/**
|
|
34
|
+
* What happens when group slice is clicked.
|
|
35
|
+
*
|
|
36
|
+
* * `"none"` (default) - nothing.
|
|
37
|
+
* * `"break"` - underlying small slices are shown.
|
|
38
|
+
* * `"zoom"` - series shows only small slies (big ones are hidden).
|
|
39
|
+
*/
|
|
40
|
+
clickBehavior?: "none" | "break" | "zoom";
|
|
41
|
+
}
|
|
42
|
+
export interface ISliceGrouperPrivate extends IEntityPrivate {
|
|
43
|
+
groupDataItem?: DataItem<IPercentSeriesDataItem>;
|
|
44
|
+
normalDataItems?: DataItem<IPercentSeriesDataItem>[];
|
|
45
|
+
smallDataItems?: DataItem<IPercentSeriesDataItem>[];
|
|
46
|
+
}
|
|
47
|
+
export interface ISliceGrouperEvents extends IEntityEvents {
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* A plugin that can be used to automatically group small slices on percent
|
|
51
|
+
* charts into a single slice.
|
|
52
|
+
*
|
|
53
|
+
* @see {@link https://www.amcharts.com/docs/v5/charts/percent-charts/grouping-slices/} for more info
|
|
54
|
+
*/
|
|
55
|
+
export declare class SliceGrouper extends Entity {
|
|
56
|
+
static className: string;
|
|
57
|
+
static classNames: Array<string>;
|
|
58
|
+
_settings: ISliceGrouperSettings;
|
|
59
|
+
_privateSettings: ISliceGrouperPrivate;
|
|
60
|
+
_events: ISliceGrouperEvents;
|
|
61
|
+
/**
|
|
62
|
+
* A button that is shown when chart small buttons are visible.
|
|
63
|
+
*/
|
|
64
|
+
zoomOutButton?: Button;
|
|
65
|
+
protected _afterNew(): void;
|
|
66
|
+
private initZoomButton;
|
|
67
|
+
private handleData;
|
|
68
|
+
/**
|
|
69
|
+
* Resets slice setup to original grouping state.
|
|
70
|
+
*/
|
|
71
|
+
zoomOut(): void;
|
|
72
|
+
private updateGroupDataItem;
|
|
73
|
+
private handleClick;
|
|
74
|
+
_beforeChanged(): void;
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=SliceGrouper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SliceGrouper.d.ts","sourceRoot":"","sources":["../../../../../src/.internal/plugins/sliceGrouper/SliceGrouper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,KAAK,EAAE,aAAa,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAChG,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAEvD,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAElD,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AAK/F,MAAM,WAAW,qBAAsB,SAAQ,eAAe;IAE7D;;OAEG;IACH,MAAM,CAAC,EAAE,aAAa,CAAC;IAEvB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;;;;OAMG;IACH,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;CAE1C;AAED,MAAM,WAAW,oBAAqB,SAAQ,cAAc;IAC3D,aAAa,CAAC,EAAE,QAAQ,CAAC,sBAAsB,CAAC,CAAC;IACjD,eAAe,CAAC,EAAE,QAAQ,CAAC,sBAAsB,CAAC,EAAE,CAAC;IACrD,cAAc,CAAC,EAAE,QAAQ,CAAC,sBAAsB,CAAC,EAAE,CAAC;CACpD;AAED,MAAM,WAAW,mBAAoB,SAAQ,aAAa;CACzD;AAGD;;;;;GAKG;AACH,qBAAa,YAAa,SAAQ,MAAM;IACvC,OAAc,SAAS,EAAE,MAAM,CAAkB;IACjD,OAAc,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,CAAsD;IAE9E,SAAS,EAAE,qBAAqB,CAAC;IACjC,gBAAgB,EAAE,oBAAoB,CAAC;IACvC,OAAO,EAAE,mBAAmB,CAAC;IAE5C;;OAEG;IACI,aAAa,CAAC,EAAE,MAAM,CAAC;IAG9B,SAAS,CAAC,SAAS,IAAI,IAAI;IAS3B,OAAO,CAAC,cAAc;IAkBtB,OAAO,CAAC,UAAU;IA4ElB;;OAEG;IACI,OAAO,IAAI,IAAI;IAwBtB,OAAO,CAAC,mBAAmB;IAyB3B,OAAO,CAAC,WAAW;IA2BZ,cAAc;CAcrB"}
|
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
import { __extends } from "tslib";
|
|
2
|
+
import { Button } from "../../core/render/Button";
|
|
3
|
+
import { Graphics } from "../../core/render/Graphics";
|
|
4
|
+
import { Entity } from "../../core/util/Entity";
|
|
5
|
+
import * as $array from "../../core/util/Array";
|
|
6
|
+
/**
|
|
7
|
+
* A plugin that can be used to automatically group small slices on percent
|
|
8
|
+
* charts into a single slice.
|
|
9
|
+
*
|
|
10
|
+
* @see {@link https://www.amcharts.com/docs/v5/charts/percent-charts/grouping-slices/} for more info
|
|
11
|
+
*/
|
|
12
|
+
var SliceGrouper = /** @class */ (function (_super) {
|
|
13
|
+
__extends(SliceGrouper, _super);
|
|
14
|
+
function SliceGrouper() {
|
|
15
|
+
var _this = _super !== null && _super.apply(this, arguments) || this;
|
|
16
|
+
/**
|
|
17
|
+
* A button that is shown when chart small buttons are visible.
|
|
18
|
+
*/
|
|
19
|
+
Object.defineProperty(_this, "zoomOutButton", {
|
|
20
|
+
enumerable: true,
|
|
21
|
+
configurable: true,
|
|
22
|
+
writable: true,
|
|
23
|
+
value: void 0
|
|
24
|
+
});
|
|
25
|
+
return _this;
|
|
26
|
+
}
|
|
27
|
+
Object.defineProperty(SliceGrouper.prototype, "_afterNew", {
|
|
28
|
+
enumerable: false,
|
|
29
|
+
configurable: true,
|
|
30
|
+
writable: true,
|
|
31
|
+
value: function () {
|
|
32
|
+
_super.prototype._afterNew.call(this);
|
|
33
|
+
this._setRawDefault("threshold", 5);
|
|
34
|
+
this._setRawDefault("groupName", "Other");
|
|
35
|
+
this._setRawDefault("clickBehavior", "none");
|
|
36
|
+
this.initZoomButton();
|
|
37
|
+
this._root.addDisposer(this);
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
Object.defineProperty(SliceGrouper.prototype, "initZoomButton", {
|
|
41
|
+
enumerable: false,
|
|
42
|
+
configurable: true,
|
|
43
|
+
writable: true,
|
|
44
|
+
value: function () {
|
|
45
|
+
var _this = this;
|
|
46
|
+
var clickBehavior = this.get("clickBehavior");
|
|
47
|
+
if (clickBehavior !== "none") {
|
|
48
|
+
var container = this.root.tooltipContainer;
|
|
49
|
+
this.zoomOutButton = container.children.push(Button.new(this._root, {
|
|
50
|
+
themeTags: ["zoom"],
|
|
51
|
+
icon: Graphics.new(this._root, {
|
|
52
|
+
themeTags: ["button", "icon"]
|
|
53
|
+
})
|
|
54
|
+
}));
|
|
55
|
+
this.zoomOutButton.hide();
|
|
56
|
+
this.zoomOutButton.events.on("click", function () {
|
|
57
|
+
_this.zoomOut();
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
Object.defineProperty(SliceGrouper.prototype, "handleData", {
|
|
63
|
+
enumerable: false,
|
|
64
|
+
configurable: true,
|
|
65
|
+
writable: true,
|
|
66
|
+
value: function () {
|
|
67
|
+
var _this = this;
|
|
68
|
+
var series = this.get("series");
|
|
69
|
+
if (series) {
|
|
70
|
+
// Create group data item if not yet available
|
|
71
|
+
var groupDataItem_1 = this.getPrivate("groupDataItem");
|
|
72
|
+
if (!groupDataItem_1) {
|
|
73
|
+
var legend = this.get("legend");
|
|
74
|
+
var categoryField = series.get("categoryField", "category");
|
|
75
|
+
var valueField = series.get("valueField", "value");
|
|
76
|
+
// Add slice
|
|
77
|
+
var groupSliceData = {};
|
|
78
|
+
groupSliceData[categoryField] = this.get("groupName", "");
|
|
79
|
+
groupSliceData[valueField] = 0;
|
|
80
|
+
series.data.push(groupSliceData);
|
|
81
|
+
groupDataItem_1 = series.dataItems[series.dataItems.length - 1];
|
|
82
|
+
groupDataItem_1.get("slice").events.on("click", function () {
|
|
83
|
+
_this.handleClick();
|
|
84
|
+
});
|
|
85
|
+
this.setPrivate("groupDataItem", groupDataItem_1);
|
|
86
|
+
// Add to legend
|
|
87
|
+
if (legend) {
|
|
88
|
+
legend.data.push(groupDataItem_1);
|
|
89
|
+
//const legendDataItem = groupDataItem.get("legendDataItem");
|
|
90
|
+
groupDataItem_1.on("visible", function (visible) {
|
|
91
|
+
if (visible) {
|
|
92
|
+
_this.zoomOut();
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
// Recalculate group value and decorate small slices as necessary
|
|
98
|
+
var threshold_1 = this.get("threshold", 0);
|
|
99
|
+
var limit_1 = this.get("limit", 1000);
|
|
100
|
+
var normalDataItems_1 = [];
|
|
101
|
+
var smallDataItems_1 = [];
|
|
102
|
+
var groupValue_1 = 0;
|
|
103
|
+
if (threshold_1 || limit_1) {
|
|
104
|
+
$array.each(series.dataItems, function (item, index) {
|
|
105
|
+
var legendDataItem = item.get("legendDataItem");
|
|
106
|
+
if (((item.get("valuePercentTotal") <= threshold_1) || (index > (limit_1 - 1))) && groupDataItem_1 !== item) {
|
|
107
|
+
groupValue_1 += item.get("value", 0);
|
|
108
|
+
smallDataItems_1.push(item);
|
|
109
|
+
item.hide(0);
|
|
110
|
+
if (legendDataItem) {
|
|
111
|
+
legendDataItem.get("itemContainer").hide(0);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
normalDataItems_1.push(item);
|
|
116
|
+
if (legendDataItem) {
|
|
117
|
+
legendDataItem.get("itemContainer").show(0);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
});
|
|
121
|
+
this.setPrivate("normalDataItems", normalDataItems_1);
|
|
122
|
+
this.setPrivate("smallDataItems", smallDataItems_1);
|
|
123
|
+
this.updateGroupDataItem(groupValue_1);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
/**
|
|
129
|
+
* Resets slice setup to original grouping state.
|
|
130
|
+
*/
|
|
131
|
+
Object.defineProperty(SliceGrouper.prototype, "zoomOut", {
|
|
132
|
+
enumerable: false,
|
|
133
|
+
configurable: true,
|
|
134
|
+
writable: true,
|
|
135
|
+
value: function () {
|
|
136
|
+
var groupDataItem = this.getPrivate("groupDataItem");
|
|
137
|
+
if (groupDataItem) {
|
|
138
|
+
groupDataItem.show();
|
|
139
|
+
}
|
|
140
|
+
var clickBehavior = this.get("clickBehavior");
|
|
141
|
+
if (clickBehavior == "zoom") {
|
|
142
|
+
var normalDataItems = this.getPrivate("normalDataItems", []);
|
|
143
|
+
$array.each(normalDataItems, function (item, _index) {
|
|
144
|
+
item.show();
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
var smallDataItems = this.getPrivate("smallDataItems", []);
|
|
148
|
+
$array.each(smallDataItems, function (item, _index) {
|
|
149
|
+
item.hide();
|
|
150
|
+
});
|
|
151
|
+
if (this.zoomOutButton) {
|
|
152
|
+
this.zoomOutButton.hide();
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
});
|
|
156
|
+
Object.defineProperty(SliceGrouper.prototype, "updateGroupDataItem", {
|
|
157
|
+
enumerable: false,
|
|
158
|
+
configurable: true,
|
|
159
|
+
writable: true,
|
|
160
|
+
value: function (groupValue) {
|
|
161
|
+
var series = this.get("series");
|
|
162
|
+
if (series) {
|
|
163
|
+
var groupSliceData = {};
|
|
164
|
+
var categoryField = series.get("categoryField", "category");
|
|
165
|
+
var valueField = series.get("valueField", "value");
|
|
166
|
+
groupSliceData[categoryField] = this.get("groupName", "");
|
|
167
|
+
groupSliceData[valueField] = groupValue;
|
|
168
|
+
series.data.setIndex(series.data.length - 1, groupSliceData);
|
|
169
|
+
var groupDataItem = this.getPrivate("groupDataItem");
|
|
170
|
+
if (groupValue == 0) {
|
|
171
|
+
groupDataItem.hide(0);
|
|
172
|
+
}
|
|
173
|
+
else if (groupDataItem.isHidden()) {
|
|
174
|
+
groupDataItem.show();
|
|
175
|
+
}
|
|
176
|
+
var clickBehavior = this.get("clickBehavior");
|
|
177
|
+
if (clickBehavior != "none") {
|
|
178
|
+
groupDataItem.get("slice").set("toggleKey", "none");
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
});
|
|
183
|
+
Object.defineProperty(SliceGrouper.prototype, "handleClick", {
|
|
184
|
+
enumerable: false,
|
|
185
|
+
configurable: true,
|
|
186
|
+
writable: true,
|
|
187
|
+
value: function () {
|
|
188
|
+
var clickBehavior = this.get("clickBehavior");
|
|
189
|
+
var smallDataItems = this.getPrivate("smallDataItems");
|
|
190
|
+
if (clickBehavior == "none" || (smallDataItems && smallDataItems.length == 0)) {
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
193
|
+
var series = this.get("series");
|
|
194
|
+
var groupDataItem = this.getPrivate("groupDataItem");
|
|
195
|
+
// Hide group slice
|
|
196
|
+
groupDataItem.hide();
|
|
197
|
+
// Reveal small slices
|
|
198
|
+
$array.each(series.dataItems, function (item) {
|
|
199
|
+
if (smallDataItems.indexOf(item) !== -1) {
|
|
200
|
+
item.show();
|
|
201
|
+
}
|
|
202
|
+
else if (clickBehavior == "zoom") {
|
|
203
|
+
item.hide();
|
|
204
|
+
}
|
|
205
|
+
});
|
|
206
|
+
this.zoomOutButton.show();
|
|
207
|
+
}
|
|
208
|
+
});
|
|
209
|
+
Object.defineProperty(SliceGrouper.prototype, "_beforeChanged", {
|
|
210
|
+
enumerable: false,
|
|
211
|
+
configurable: true,
|
|
212
|
+
writable: true,
|
|
213
|
+
value: function () {
|
|
214
|
+
var _this = this;
|
|
215
|
+
_super.prototype._beforeChanged.call(this);
|
|
216
|
+
if (this.isDirty("series")) {
|
|
217
|
+
var series = this.get("series");
|
|
218
|
+
if (series) {
|
|
219
|
+
series.events.on("datavalidated", function (_ev) {
|
|
220
|
+
_this.handleData();
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
});
|
|
226
|
+
Object.defineProperty(SliceGrouper, "className", {
|
|
227
|
+
enumerable: true,
|
|
228
|
+
configurable: true,
|
|
229
|
+
writable: true,
|
|
230
|
+
value: "SliceGrouper"
|
|
231
|
+
});
|
|
232
|
+
Object.defineProperty(SliceGrouper, "classNames", {
|
|
233
|
+
enumerable: true,
|
|
234
|
+
configurable: true,
|
|
235
|
+
writable: true,
|
|
236
|
+
value: Entity.classNames.concat([SliceGrouper.className])
|
|
237
|
+
});
|
|
238
|
+
return SliceGrouper;
|
|
239
|
+
}(Entity));
|
|
240
|
+
export { SliceGrouper };
|
|
241
|
+
//# sourceMappingURL=SliceGrouper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SliceGrouper.js","sourceRoot":"","sources":["../../../../../src/.internal/plugins/sliceGrouper/SliceGrouper.ts"],"names":[],"mappings":"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","sourcesContent":["import type { DataItem } from \"../../core/render/Component\";\nimport type { PercentSeries, IPercentSeriesDataItem } from \"../../charts/percent/PercentSeries\";\nimport type { Legend } from \"../../core/render/Legend\";\n\nimport { Button } from \"../../core/render/Button\";\nimport { Graphics } from \"../../core/render/Graphics\";\nimport { Entity, IEntitySettings, IEntityPrivate, IEntityEvents } from \"../../core/util/Entity\"\n\nimport * as $array from \"../../core/util/Array\";\n\n\nexport interface ISliceGrouperSettings extends IEntitySettings {\n\n\t/**\n\t * A series that will be used to group slices on.\n\t */\n\tseries?: PercentSeries;\n\n\t/**\n\t * If set, plugin will try to manipulate the items in legend, such as\n\t * adding group slice, hiding items for small slices, etc.\n\t */\n\tlegend?: Legend;\n\n\t/**\n\t * Any slice which has percent value less than this setting will be grouped.\n\t * \n\t * @default 5\n\t */\n\tthreshold?: number;\n\n\t/**\n\t * If set, only X first slices will be left as they are. The rest of the\n\t * slices will be grouped.\n\t */\n\tlimit?: number;\n\n\t/**\n\t * Name (category) of the group slice.\n\t *\n\t * @default \"Other\"\n\t */\n\tgroupName?: string;\n\n\t/**\n\t * What happens when group slice is clicked.\n\t *\n\t * * `\"none\"` (default) - nothing.\n\t * * `\"break\"` - underlying small slices are shown.\n\t * * `\"zoom\"` - series shows only small slies (big ones are hidden).\n\t */\n\tclickBehavior?: \"none\" | \"break\" | \"zoom\";\n\n}\n\nexport interface ISliceGrouperPrivate extends IEntityPrivate {\n\tgroupDataItem?: DataItem<IPercentSeriesDataItem>;\n\tnormalDataItems?: DataItem<IPercentSeriesDataItem>[];\n\tsmallDataItems?: DataItem<IPercentSeriesDataItem>[];\n}\n\nexport interface ISliceGrouperEvents extends IEntityEvents {\n}\n\n\n/**\n * A plugin that can be used to automatically group small slices on percent\n * charts into a single slice.\n *\n * @see {@link https://www.amcharts.com/docs/v5/charts/percent-charts/grouping-slices/} for more info\n */\nexport class SliceGrouper extends Entity {\n\tpublic static className: string = \"SliceGrouper\";\n\tpublic static classNames: Array<string> = Entity.classNames.concat([SliceGrouper.className]);\n\n\tdeclare public _settings: ISliceGrouperSettings;\n\tdeclare public _privateSettings: ISliceGrouperPrivate;\n\tdeclare public _events: ISliceGrouperEvents;\n\n\t/**\n\t * A button that is shown when chart small buttons are visible.\n\t */\n\tpublic zoomOutButton?: Button;\n\n\n\tprotected _afterNew(): void {\n\t\tsuper._afterNew();\n\t\tthis._setRawDefault(\"threshold\", 5);\n\t\tthis._setRawDefault(\"groupName\", \"Other\");\n\t\tthis._setRawDefault(\"clickBehavior\", \"none\");\n\t\tthis.initZoomButton();\n\t\tthis._root.addDisposer(this);\n\t}\n\n\tprivate initZoomButton(): void {\n\t\tconst clickBehavior = this.get(\"clickBehavior\");\n\t\tif (clickBehavior !== \"none\") {\n\t\t\tconst container = this.root.tooltipContainer;\n\t\t\tthis.zoomOutButton = container.children.push(Button.new(this._root, {\n\t\t\t\tthemeTags: [\"zoom\"],\n\t\t\t\ticon: Graphics.new(this._root, {\n\t\t\t\t\tthemeTags: [\"button\", \"icon\"]\n\t\t\t\t})\n\t\t\t}));\n\t\t\tthis.zoomOutButton.hide();\n\t\t\tthis.zoomOutButton.events.on(\"click\", () => {\n\t\t\t\tthis.zoomOut();\n\t\t\t});\n\t\t}\n\n\t}\n\n\tprivate handleData(): void {\n\t\tconst series = this.get(\"series\");\n\n\t\tif (series) {\n\n\t\t\t// Create group data item if not yet available\n\t\t\tlet groupDataItem = this.getPrivate(\"groupDataItem\");\n\t\t\tif (!groupDataItem) {\n\n\t\t\t\tconst legend = this.get(\"legend\");\n\t\t\t\tconst categoryField = series.get(\"categoryField\", \"category\");\n\t\t\t\tconst valueField = series.get(\"valueField\", \"value\");\n\n\t\t\t\t// Add slice\n\t\t\t\tconst groupSliceData: any = {};\n\t\t\t\tgroupSliceData[categoryField] = this.get(\"groupName\", \"\");\n\t\t\t\tgroupSliceData[valueField] = 0;\n\t\t\t\tseries.data.push(groupSliceData);\n\n\t\t\t\tgroupDataItem = series.dataItems[series.dataItems.length - 1];\n\n\t\t\t\tgroupDataItem.get(\"slice\").events.on(\"click\", () => {\n\t\t\t\t\tthis.handleClick();\n\t\t\t\t});\n\n\t\t\t\tthis.setPrivate(\"groupDataItem\", groupDataItem);\n\n\t\t\t\t// Add to legend\n\t\t\t\tif (legend) {\n\t\t\t\t\tlegend.data.push(groupDataItem);\n\n\t\t\t\t\t//const legendDataItem = groupDataItem.get(\"legendDataItem\");\n\t\t\t\t\tgroupDataItem.on(\"visible\", (visible) => {\n\t\t\t\t\t\tif (visible) {\n\t\t\t\t\t\t\tthis.zoomOut();\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Recalculate group value and decorate small slices as necessary\n\t\t\tconst threshold = this.get(\"threshold\", 0);\n\t\t\tconst limit = this.get(\"limit\", 1000);\n\t\t\tconst normalDataItems: any = [];\n\t\t\tconst smallDataItems: any = [];\n\t\t\tlet groupValue = 0;\n\t\t\tif (threshold || limit) {\n\n\t\t\t\t$array.each(series.dataItems, (item, index) => {\n\t\t\t\t\tconst legendDataItem = item.get(\"legendDataItem\");\n\t\t\t\t\tif (((item.get(\"valuePercentTotal\") <= threshold) || (index > (limit - 1))) && groupDataItem !== item) {\n\t\t\t\t\t\tgroupValue += item.get(\"value\", 0);\n\t\t\t\t\t\tsmallDataItems.push(item);\n\t\t\t\t\t\titem.hide(0);\n\t\t\t\t\t\tif (legendDataItem) {\n\t\t\t\t\t\t\tlegendDataItem.get(\"itemContainer\").hide(0);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tnormalDataItems.push(item);\n\t\t\t\t\t\tif (legendDataItem) {\n\t\t\t\t\t\t\tlegendDataItem.get(\"itemContainer\").show(0);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tthis.setPrivate(\"normalDataItems\", normalDataItems);\n\t\t\t\tthis.setPrivate(\"smallDataItems\", smallDataItems);\n\t\t\t\tthis.updateGroupDataItem(groupValue);\n\n\t\t\t}\n\n\t\t}\n\t}\n\n\t/**\n\t * Resets slice setup to original grouping state.\n\t */\n\tpublic zoomOut(): void {\n\t\tconst groupDataItem = this.getPrivate(\"groupDataItem\");\n\t\tif (groupDataItem) {\n\t\t\tgroupDataItem.show();\n\t\t}\n\n\t\tconst clickBehavior = this.get(\"clickBehavior\");\n\t\tif (clickBehavior == \"zoom\") {\n\t\t\tconst normalDataItems: any = this.getPrivate(\"normalDataItems\", []);\n\t\t\t$array.each(normalDataItems, (item: any, _index) => {\n\t\t\t\titem.show();\n\t\t\t});\n\t\t}\n\n\t\tconst smallDataItems: any = this.getPrivate(\"smallDataItems\", []);\n\t\t$array.each(smallDataItems, (item: any, _index) => {\n\t\t\titem.hide();\n\t\t});\n\n\t\tif (this.zoomOutButton) {\n\t\t\tthis.zoomOutButton.hide();\n\t\t}\n\t}\n\n\tprivate updateGroupDataItem(groupValue: number): void {\n\t\tconst series = this.get(\"series\");\n\t\tif (series) {\n\t\t\tconst groupSliceData: any = {};\n\t\t\tconst categoryField = series.get(\"categoryField\", \"category\");\n\t\t\tconst valueField = series.get(\"valueField\", \"value\");\n\t\t\tgroupSliceData[categoryField] = this.get(\"groupName\", \"\");\n\t\t\tgroupSliceData[valueField] = groupValue;\n\t\t\tseries.data.setIndex(series.data.length - 1, groupSliceData);\n\n\t\t\tconst groupDataItem = this.getPrivate(\"groupDataItem\");\n\t\t\tif (groupValue == 0) {\n\t\t\t\tgroupDataItem!.hide(0);\n\t\t\t}\n\t\t\telse if (groupDataItem!.isHidden()) {\n\t\t\t\tgroupDataItem!.show();\n\t\t\t}\n\n\t\t\tconst clickBehavior = this.get(\"clickBehavior\");\n\t\t\tif (clickBehavior != \"none\") {\n\t\t\t\tgroupDataItem!.get(\"slice\").set(\"toggleKey\", \"none\");\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate handleClick(): void {\n\t\tconst clickBehavior = this.get(\"clickBehavior\");\n\t\tconst smallDataItems = this.getPrivate(\"smallDataItems\");\n\n\t\tif (clickBehavior == \"none\" || (smallDataItems && smallDataItems.length == 0)) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst series = this.get(\"series\");\n\t\tconst groupDataItem = this.getPrivate(\"groupDataItem\");\n\n\t\t// Hide group slice\n\t\tgroupDataItem!.hide();\n\n\t\t// Reveal small slices\n\t\t$array.each(series!.dataItems, (item) => {\n\t\t\tif (smallDataItems!.indexOf(item) !== -1) {\n\t\t\t\titem.show();\n\t\t\t}\n\t\t\telse if (clickBehavior == \"zoom\") {\n\t\t\t\titem.hide();\n\t\t\t}\n\t\t});\n\n\t\tthis.zoomOutButton!.show();\n\t}\n\n\tpublic _beforeChanged() {\n\t\tsuper._beforeChanged();\n\n\t\tif (this.isDirty(\"series\")) {\n\t\t\tconst series = this.get(\"series\");\n\t\t\tif (series) {\n\t\t\t\tseries.events.on(\"datavalidated\", (_ev) => {\n\t\t\t\t\tthis.handleData();\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t}\n\n}"]}
|
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,67 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/).
|
|
|
5
5
|
Please note, that this project, while following numbering syntax, it DOES NOT
|
|
6
6
|
adhere to [Semantic Versioning](http://semver.org/spec/v2.0.0.html) rules.
|
|
7
7
|
|
|
8
|
+
## [5.1.0] - 2022-01-20
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
- New `Root` setting: `timezone`. E.g. `"America/Vancouver"`, `"Australia/Sydney"`, `"UTC"`.
|
|
12
|
+
- New export CSV option: `addBOM` (default: `true`). Indicates whether to add BOM characters at start of CSV output so that data viewer (e.g. Excel) knows we're exporting UTF-8 data.
|
|
13
|
+
- New methods for `Adapters`: `remove(key)`, `disable(key)`, and `enable(key)`.
|
|
14
|
+
- `GaplessDateAxis` added. It's a version of `DateAxis` that removes data-less intervals from its scale. `CategoryAxis` is being deprecated in favor of `GaplessDateAxis`. [More info](https://www.amcharts.com/docs/v5/charts/xy-chart/axes/gapless-date-axis/).
|
|
15
|
+
- Timezone support added. [More info](https://www.amcharts.com/docs/v5/getting-started/root-element/#Time_zone).
|
|
16
|
+
- New `Component` method: `markDirtyValues()`. Will re-evaluate elements of the component that are data-reliant, such as axis labels.
|
|
17
|
+
|
|
18
|
+
### Fixed
|
|
19
|
+
- Clearing axis ranges from Axis and Series was not working properly.
|
|
20
|
+
- Slice with negative arc was ignoring `cornerRadius` property.
|
|
21
|
+
- `groupDataDisabled` on `XYSeries` was not working if set to `true`.
|
|
22
|
+
- Axis header was not updating its position if axes were stacked and size of an axis was updated.
|
|
23
|
+
- Disposing of charts with a lot of elements was quite slow.
|
|
24
|
+
- Series stacks with all-zero values could cause all stacks to disappear on zoom.
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
## [5.0.21] - 2022-01-11
|
|
28
|
+
|
|
29
|
+
### Added
|
|
30
|
+
- New `Sprite` setting: `forceInactive`. If set to `true`, it will override `interactive` setting as well as ignore any interaction events set on the element.
|
|
31
|
+
- `cursorhidden` event added to `XYCursor`. Dispatched when user rolls-out of the chart plot area and cursor is hidden.
|
|
32
|
+
- New `Component` method: `markDirtyValues()`. Forces a repaint of the element which relies on data.
|
|
33
|
+
|
|
34
|
+
### Changed
|
|
35
|
+
- Value (4th parameter of the Heat rule's `customFunction`) will now receive actual value of the target data item, not interpolated calculated setting value.
|
|
36
|
+
|
|
37
|
+
### Fixed
|
|
38
|
+
- Fixing bug when not passing the duration to the `animate` method ([Issue 181](https://github.com/amcharts/amcharts5/issues/181)).
|
|
39
|
+
- Horizontal and vertical layouts with `width`/`height` set in percents plus `minWidth`/`minHeight`/`maxWidth`/`maxHeight` set were arranging items incorrectly.
|
|
40
|
+
- Very small slices with `cornrerRadius > 0` were being drawn as a full circle.
|
|
41
|
+
- `SliceGrouper` with was not zooming out properly if there was no legend in chart.
|
|
42
|
+
- changing `groupData` from `false` to `true` on DateAxis was not working when doing so after the chart was built.
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
## [5.0.20] - 2021-12-30
|
|
46
|
+
|
|
47
|
+
### Fixed
|
|
48
|
+
- `SliceGrouper` with `clickBehavior = "zoom"` was not zooming out properly.
|
|
49
|
+
- `GridLayout` could leave empty gaps if some of the items in it were hidden.
|
|
50
|
+
- dragging sprites within rotated containers was not working properly.
|
|
51
|
+
- Null value was breaking stacking of columns in some cases.
|
|
52
|
+
- Fixing tooltips being broken inside of shadow DOM. ([Issue 166](https://github.com/amcharts/amcharts5/issues/166))
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
## [5.0.19] - 2021-12-27
|
|
56
|
+
|
|
57
|
+
### Added
|
|
58
|
+
- `groupDataDisabled` setting added to XYSeries. If set to `false` will exclude series from data grouping mechanism, even if it is enabled on related `DateSeries`.
|
|
59
|
+
- New plugin `SliceGrouper`. Can be used to automatically group small slices on percent charts like Pie, Funnel, etc. [More info](https://www.amcharts.com/docs/v5/charts/percent-charts/grouping-slices/).
|
|
60
|
+
|
|
61
|
+
### Fixed
|
|
62
|
+
- If data was added to percent series after initial data was already processed, the bew slices would get colors from the start of the color set.
|
|
63
|
+
- Multiple square bracket and apostrophe escaping was not working properly.
|
|
64
|
+
- A JS error could occur when changing `XYSeries` data with less data items then there were before.
|
|
65
|
+
- `PieSeries` were not arranging its labels properly in some cases.
|
|
66
|
+
- `XYCursor` taps were not working properly after chart zoom on touch devices.
|
|
67
|
+
|
|
68
|
+
|
|
8
69
|
## [5.0.18] - 2021-12-19
|
|
9
70
|
|
|
10
71
|
### Changed
|