@gravity-ui/chartkit 2.7.2 → 2.8.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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,19 @@
1
1
  # Changelog
2
2
 
3
+ ## [2.8.1](https://github.com/gravity-ui/chartkit/compare/v2.8.0...v2.8.1) (2023-05-30)
4
+
5
+
6
+ ### Bug Fixes
7
+
8
+ * **options:** fixed default options for yAxis title color ([#168](https://github.com/gravity-ui/chartkit/issues/168)) ([52bf4cc](https://github.com/gravity-ui/chartkit/commit/52bf4cca79770982e9584e89c9a408086850acd5))
9
+
10
+ ## [2.8.0](https://github.com/gravity-ui/chartkit/compare/v2.7.2...v2.8.0) (2023-05-23)
11
+
12
+
13
+ ### Features
14
+
15
+ * **Highcharts plugin:** rework tooltip pinning api ([#166](https://github.com/gravity-ui/chartkit/issues/166)) ([9ca62e4](https://github.com/gravity-ui/chartkit/commit/9ca62e4d01d62f36de0c4866e0d21728ca2aa25c))
16
+
3
17
  ## [2.7.2](https://github.com/gravity-ui/chartkit/compare/v2.7.1...v2.7.2) (2023-05-17)
4
18
 
5
19
 
@@ -506,6 +506,11 @@ export declare class HighchartsComponent extends React.PureComponent<Props, Stat
506
506
  color: string;
507
507
  };
508
508
  };
509
+ title: {
510
+ style: {
511
+ color: string;
512
+ };
513
+ };
509
514
  } & {
510
515
  crosshair: boolean | {
511
516
  width: number;
@@ -107,6 +107,11 @@ export function prepareConfig(data: any, options: any, isMobile: any, holidays:
107
107
  color: string;
108
108
  };
109
109
  };
110
+ title: {
111
+ style: {
112
+ color: string;
113
+ };
114
+ };
110
115
  };
111
116
  plotOptions: {
112
117
  series: {
@@ -16,7 +16,7 @@ import { formatNumber } from '../../../../shared';
16
16
  import { getCommentsOnLine, drawComments, hideComments, drawOnlyRendererComments, } from '../comments/drawing';
17
17
  import formatTooltip, { TOOLTIP_ROW_CLASS_NAME, SERIES_NAME_DATA_ATTRIBUTE, TOOLTIP_HEADER_CLASS_NAME, TOOLTIP_LIST_CLASS_NAME, TOOLTIP_FOOTER_CLASS_NAME, TOOLTIP_CONTAINER_CLASS_NAME, TOOLTIP_ROW_NAME_CLASS_NANE, } from '../tooltip';
18
18
  import defaultOptions from './options';
19
- import { calculatePrecision, isTooltipShared, isSafari, mergeArrayWithObject, concatStrings, buildNavigatorFallback, addShowInNavigatorToSeries, setNavigatorDefaultPeriod, numberFormat, getFormatOptionsFromLine, } from './utils';
19
+ import { calculatePrecision, isTooltipShared, isSafari, mergeArrayWithObject, concatStrings, buildNavigatorFallback, addShowInNavigatorToSeries, setNavigatorDefaultPeriod, numberFormat, getFormatOptionsFromLine, checkTooltipPinningAvailability, } from './utils';
20
20
  import { handleLegendItemClick } from './handleLegendItemClick';
21
21
  import { getChartKitFormattedValue } from './utils/getChartKitFormattedValue';
22
22
  const b = block('chartkit-tooltip');
@@ -876,7 +876,9 @@ export function hideFixedTooltip(tooltip, isMobile) {
876
876
  tooltip.hide();
877
877
  if (Array.isArray(tooltip.pointsOnFixedTooltip)) {
878
878
  tooltip.pointsOnFixedTooltip.forEach((point) => {
879
- point.setState('');
879
+ if (typeof point.setState === 'function') {
880
+ point.setState('');
881
+ }
880
882
  });
881
883
  }
882
884
  else {
@@ -898,8 +900,12 @@ export function hideFixedTooltip(tooltip, isMobile) {
898
900
  }
899
901
  }
900
902
  function fixTooltip(tooltip, options, event) {
901
- const pinable = get(options, 'tooltip.pinable', true);
902
- if (options.splitTooltip || !pinable) {
903
+ const availableToPin = checkTooltipPinningAvailability({
904
+ tooltip: options.tooltip,
905
+ altKey: event.altKey,
906
+ metaKey: event.metaKey,
907
+ });
908
+ if (options.splitTooltip || (!availableToPin && !tooltip.fixed)) {
903
909
  return false;
904
910
  }
905
911
  if (tooltip.fixed) {
@@ -86,6 +86,14 @@ declare namespace options {
86
86
  }
87
87
  export { style_3 as style };
88
88
  }
89
+ export namespace title_1 {
90
+ export namespace style_4 {
91
+ const color_7: string;
92
+ export { color_7 as color };
93
+ }
94
+ export { style_4 as style };
95
+ }
96
+ export { title_1 as title };
89
97
  }
90
98
  namespace plotOptions {
91
99
  export namespace series {
@@ -99,13 +107,13 @@ declare namespace options {
99
107
  }
100
108
  export { tooltip_1 as tooltip };
101
109
  export namespace dataLabels {
102
- export namespace style_4 {
110
+ export namespace style_5 {
103
111
  const textOutline_1: string;
104
112
  export { textOutline_1 as textOutline };
105
- const color_7: string;
106
- export { color_7 as color };
113
+ const color_8: string;
114
+ export { color_8 as color };
107
115
  }
108
- export { style_4 as style };
116
+ export { style_5 as style };
109
117
  }
110
118
  export const turboThreshold: number;
111
119
  }
@@ -161,6 +161,11 @@ const options = {
161
161
  color: 'var(--highcharts-data-labels)',
162
162
  },
163
163
  },
164
+ title: {
165
+ style: {
166
+ color: 'var(--yc-color-text-secondary)',
167
+ },
168
+ },
164
169
  },
165
170
  plotOptions: {
166
171
  series: {
@@ -5,7 +5,7 @@ export { concatStrings } from './concatStrings';
5
5
  export { getChartKitFormattedValue } from './getChartKitFormattedValue';
6
6
  export { getFormatOptionsFromLine } from './getFormatOptionsFromLine';
7
7
  export { getXAxisThresholdValue } from './getXAxisThresholdValue';
8
- export { isTooltipShared } from './isTooltipShared';
8
+ export * from './tooltip';
9
9
  export { isNavigatorSeries } from './isNavigatorSeries';
10
10
  export { isSafari } from './isSafari';
11
11
  export { mergeArrayWithObject } from './mergeArrayWithObject';
@@ -5,7 +5,7 @@ export { concatStrings } from './concatStrings';
5
5
  export { getChartKitFormattedValue } from './getChartKitFormattedValue';
6
6
  export { getFormatOptionsFromLine } from './getFormatOptionsFromLine';
7
7
  export { getXAxisThresholdValue } from './getXAxisThresholdValue';
8
- export { isTooltipShared } from './isTooltipShared';
8
+ export * from './tooltip';
9
9
  export { isNavigatorSeries } from './isNavigatorSeries';
10
10
  export { isSafari } from './isSafari';
11
11
  export { mergeArrayWithObject } from './mergeArrayWithObject';
@@ -0,0 +1,7 @@
1
+ import { HighchartsWidgetData } from '../../../../types';
2
+ export declare const isTooltipShared: (chartType: string) => boolean;
3
+ export declare const checkTooltipPinningAvailability: (args?: {
4
+ tooltip?: HighchartsWidgetData['config']['tooltip'];
5
+ altKey?: boolean;
6
+ metaKey?: boolean;
7
+ }) => boolean;
@@ -0,0 +1,25 @@
1
+ // In case of using 'sankey' or 'xrange', the shared property must be set to false, otherwise the tooltip behaves incorrectly:
2
+ // Point.onMouseOver -> Highcharts.Pointer.runPointActions -> H.Tooltip.refresh -> Cannot read property 'series' of undefined
3
+ export const isTooltipShared = (chartType) => {
4
+ if (['sankey', 'xrange'].includes(chartType)) {
5
+ return false;
6
+ }
7
+ return true;
8
+ };
9
+ export const checkTooltipPinningAvailability = (args = {}) => {
10
+ var _a, _b, _c, _d, _e, _f;
11
+ const { tooltip, altKey, metaKey } = args;
12
+ const enabled = (_b = (_a = tooltip === null || tooltip === void 0 ? void 0 : tooltip.pin) === null || _a === void 0 ? void 0 : _a.enabled) !== null && _b !== void 0 ? _b : true;
13
+ const shouldAltKeyBePressed = (_d = (_c = tooltip === null || tooltip === void 0 ? void 0 : tooltip.pin) === null || _c === void 0 ? void 0 : _c.altKey) !== null && _d !== void 0 ? _d : false;
14
+ const shouldMetaKeyBePressed = (_f = (_e = tooltip === null || tooltip === void 0 ? void 0 : tooltip.pin) === null || _e === void 0 ? void 0 : _e.metaKey) !== null && _f !== void 0 ? _f : false;
15
+ if (!enabled) {
16
+ return false;
17
+ }
18
+ if (shouldAltKeyBePressed && !altKey) {
19
+ return false;
20
+ }
21
+ if (shouldMetaKeyBePressed && !metaKey) {
22
+ return false;
23
+ }
24
+ return true;
25
+ };
@@ -0,0 +1,45 @@
1
+ import { HighchartsType } from '../../constants';
2
+ import { checkTooltipPinningAvailability, isTooltipShared } from './tooltip';
3
+ const chartTypes = [
4
+ [HighchartsType.Sankey, false],
5
+ [HighchartsType.Xrange, false],
6
+ [HighchartsType.Line, true],
7
+ [HighchartsType.Area, true],
8
+ [HighchartsType.Arearange, true],
9
+ [HighchartsType.Bar, true],
10
+ [HighchartsType.Column, true],
11
+ [HighchartsType.Columnrange, true],
12
+ [HighchartsType.Funnel, true],
13
+ [HighchartsType.Pie, true],
14
+ [HighchartsType.Map, true],
15
+ [HighchartsType.Scatter, true],
16
+ [HighchartsType.Bubble, true],
17
+ [HighchartsType.Heatmap, true],
18
+ [HighchartsType.Treemap, true],
19
+ [HighchartsType.Networkgraph, true],
20
+ [HighchartsType.Variwide, true],
21
+ [HighchartsType.Waterfall, true],
22
+ [HighchartsType.Streamgraph, true],
23
+ [HighchartsType.Wordcloud, true],
24
+ [HighchartsType.Boxplot, true],
25
+ [HighchartsType.Timeline, true],
26
+ ];
27
+ describe('plugins/highcharts/config', () => {
28
+ test.each(chartTypes)(`calculatePrecision for %s return %s`, (chartType, expected) => {
29
+ expect(isTooltipShared(chartType)).toBe(expected);
30
+ });
31
+ test.each([
32
+ [undefined, true],
33
+ [{ tooltip: { pin: { altKey: true } }, altKey: true }, true],
34
+ [{ tooltip: { pin: { metaKey: true } }, metaKey: true }, true],
35
+ [{ tooltip: { pin: { altKey: true, metaKey: true } }, altKey: true, metaKey: true }, true],
36
+ [{ tooltip: { pin: { enabled: false } } }, false],
37
+ [{ tooltip: { pin: { altKey: true } }, altKey: false }, false],
38
+ [{ tooltip: { pin: { metaKey: true } }, metaKey: false }, false],
39
+ [{ tooltip: { pin: { altKey: true, metaKey: true } }, altKey: false, metaKey: true }, false],
40
+ [{ tooltip: { pin: { altKey: true, metaKey: true } }, altKey: true, metaKey: false }, false],
41
+ ])(`checkTooltipPinningAvailability (args: %j)`, (args, expected) => {
42
+ const result = checkTooltipPinningAvailability(args);
43
+ expect(result).toBe(expected);
44
+ });
45
+ });
@@ -7,6 +7,15 @@
7
7
  opacity: 0.5;
8
8
  }
9
9
 
10
+ .chartkit-graph .highcharts-legend .highcharts-coloraxis-labels text {
11
+ fill: var(--yc-color-text-secondary) !important;
12
+ color: var(--yc-color-text-secondary) !important;
13
+ }
14
+
15
+ .chartkit-graph .highcharts-legend .highcharts-coloraxis-grid path {
16
+ stroke: var(--yc-color-base-background);
17
+ }
18
+
10
19
  .chartkit-tooltip {
11
20
  border: 1px solid var(--highcharts-grid-line);
12
21
  border-radius: 3px;
@@ -500,6 +500,11 @@ declare function getGraph({ options, data, comments, isMobile, holidays }: GetGr
500
500
  color: string;
501
501
  };
502
502
  };
503
+ title: {
504
+ style: {
505
+ color: string;
506
+ };
507
+ };
503
508
  } & {
504
509
  crosshair: boolean | {
505
510
  width: number;
@@ -80,10 +80,19 @@ export declare type HighchartsWidgetData = {
80
80
  enableSum?: boolean;
81
81
  unsafe?: boolean;
82
82
  /**
83
+ * @experimental
83
84
  * Tooltip config
84
85
  */
85
86
  tooltip?: {
86
- pinable?: boolean;
87
+ /** Pin config */
88
+ pin?: {
89
+ /** Enable tooltip`s pinning by click */
90
+ enabled?: boolean;
91
+ /** Pin tooltip with pressed alt key */
92
+ altKey?: boolean;
93
+ /** Pin tooltip with pressed meta key */
94
+ metaKey?: boolean;
95
+ };
87
96
  };
88
97
  /**
89
98
  * Used to modify tooltip data
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gravity-ui/chartkit",
3
- "version": "2.7.2",
3
+ "version": "2.8.1",
4
4
  "description": "React component used to render charts based on any sources you need",
5
5
  "license": "MIT",
6
6
  "repository": "git@github.com:gravity-ui/ChartKit.git",
@@ -1 +0,0 @@
1
- export declare const isTooltipShared: (chartType: string) => boolean;
@@ -1,8 +0,0 @@
1
- // In case of using 'sankey' or 'xrange', the shared property must be set to false, otherwise the tooltip behaves incorrectly:
2
- // Point.onMouseOver -> Highcharts.Pointer.runPointActions -> H.Tooltip.refresh -> Cannot read property 'series' of undefined
3
- export const isTooltipShared = (chartType) => {
4
- if (['sankey', 'xrange'].includes(chartType)) {
5
- return false;
6
- }
7
- return true;
8
- };
@@ -1,31 +0,0 @@
1
- import { HighchartsType } from '../../constants';
2
- import { isTooltipShared } from './isTooltipShared';
3
- const chartTypes = [
4
- [HighchartsType.Sankey, false],
5
- [HighchartsType.Xrange, false],
6
- [HighchartsType.Line, true],
7
- [HighchartsType.Area, true],
8
- [HighchartsType.Arearange, true],
9
- [HighchartsType.Bar, true],
10
- [HighchartsType.Column, true],
11
- [HighchartsType.Columnrange, true],
12
- [HighchartsType.Funnel, true],
13
- [HighchartsType.Pie, true],
14
- [HighchartsType.Map, true],
15
- [HighchartsType.Scatter, true],
16
- [HighchartsType.Bubble, true],
17
- [HighchartsType.Heatmap, true],
18
- [HighchartsType.Treemap, true],
19
- [HighchartsType.Networkgraph, true],
20
- [HighchartsType.Variwide, true],
21
- [HighchartsType.Waterfall, true],
22
- [HighchartsType.Streamgraph, true],
23
- [HighchartsType.Wordcloud, true],
24
- [HighchartsType.Boxplot, true],
25
- [HighchartsType.Timeline, true],
26
- ];
27
- describe('plugins/highcharts/config/calculatePrecision', () => {
28
- test.each(chartTypes)(`for %s return %s`, (chartType, assert) => {
29
- expect(isTooltipShared(chartType)).toBe(assert);
30
- });
31
- });