@lightdash/common 0.2129.0 → 0.2130.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (189) hide show
  1. package/dist/cjs/.tsbuildinfo +1 -1
  2. package/dist/cjs/index.d.ts +10 -1
  3. package/dist/cjs/index.d.ts.map +1 -1
  4. package/dist/cjs/index.js +10 -1
  5. package/dist/cjs/index.js.map +1 -1
  6. package/dist/cjs/visualizations/CartesianChartDataModel.d.ts +1 -1
  7. package/dist/cjs/visualizations/CartesianChartDataModel.d.ts.map +1 -1
  8. package/dist/cjs/visualizations/CartesianChartDataModel.js +147 -46
  9. package/dist/cjs/visualizations/CartesianChartDataModel.js.map +1 -1
  10. package/dist/cjs/visualizations/PieChartDataModel.d.ts.map +1 -1
  11. package/dist/cjs/visualizations/PieChartDataModel.js +26 -0
  12. package/dist/cjs/visualizations/PieChartDataModel.js.map +1 -1
  13. package/dist/cjs/visualizations/helpers/styles/axisStyles.d.ts +50 -0
  14. package/dist/cjs/visualizations/helpers/styles/axisStyles.d.ts.map +1 -0
  15. package/dist/cjs/visualizations/helpers/styles/axisStyles.js +59 -0
  16. package/dist/cjs/visualizations/helpers/styles/axisStyles.js.map +1 -0
  17. package/dist/cjs/visualizations/helpers/styles/barChartStyles.d.ts +81 -0
  18. package/dist/cjs/visualizations/helpers/styles/barChartStyles.d.ts.map +1 -0
  19. package/dist/cjs/visualizations/helpers/styles/barChartStyles.js +336 -0
  20. package/dist/cjs/visualizations/helpers/styles/barChartStyles.js.map +1 -0
  21. package/dist/cjs/visualizations/helpers/styles/gridStyles.d.ts +21 -0
  22. package/dist/cjs/visualizations/helpers/styles/gridStyles.d.ts.map +1 -0
  23. package/dist/cjs/visualizations/helpers/styles/gridStyles.js +27 -0
  24. package/dist/cjs/visualizations/helpers/styles/gridStyles.js.map +1 -0
  25. package/dist/cjs/visualizations/helpers/styles/legendStyles.d.ts +49 -0
  26. package/dist/cjs/visualizations/helpers/styles/legendStyles.d.ts.map +1 -0
  27. package/dist/cjs/visualizations/helpers/styles/legendStyles.js +38 -0
  28. package/dist/cjs/visualizations/helpers/styles/legendStyles.js.map +1 -0
  29. package/dist/cjs/visualizations/helpers/styles/pieChartStyles.d.ts +49 -0
  30. package/dist/cjs/visualizations/helpers/styles/pieChartStyles.d.ts.map +1 -0
  31. package/dist/cjs/visualizations/helpers/styles/pieChartStyles.js +58 -0
  32. package/dist/cjs/visualizations/helpers/styles/pieChartStyles.js.map +1 -0
  33. package/dist/cjs/visualizations/helpers/styles/referenceLineStyles.d.ts +31 -0
  34. package/dist/cjs/visualizations/helpers/styles/referenceLineStyles.d.ts.map +1 -0
  35. package/dist/cjs/visualizations/helpers/styles/referenceLineStyles.js +43 -0
  36. package/dist/cjs/visualizations/helpers/styles/referenceLineStyles.js.map +1 -0
  37. package/dist/cjs/visualizations/helpers/styles/themeColors.d.ts +18 -0
  38. package/dist/cjs/visualizations/helpers/styles/themeColors.d.ts.map +1 -0
  39. package/dist/cjs/visualizations/helpers/styles/themeColors.js +23 -0
  40. package/dist/cjs/visualizations/helpers/styles/themeColors.js.map +1 -0
  41. package/dist/cjs/visualizations/helpers/styles/tooltipStyles.d.ts +53 -0
  42. package/dist/cjs/visualizations/helpers/styles/tooltipStyles.d.ts.map +1 -0
  43. package/dist/cjs/visualizations/helpers/styles/tooltipStyles.js +147 -0
  44. package/dist/cjs/visualizations/helpers/styles/tooltipStyles.js.map +1 -0
  45. package/dist/cjs/visualizations/helpers/styles/valueLabelStyles.d.ts +20 -0
  46. package/dist/cjs/visualizations/helpers/styles/valueLabelStyles.d.ts.map +1 -0
  47. package/dist/cjs/visualizations/helpers/styles/valueLabelStyles.js +34 -0
  48. package/dist/cjs/visualizations/helpers/styles/valueLabelStyles.js.map +1 -0
  49. package/dist/cjs/visualizations/{chartTransformations.d.ts → helpers/tooltipFormatter.d.ts} +53 -20
  50. package/dist/cjs/visualizations/helpers/tooltipFormatter.d.ts.map +1 -0
  51. package/dist/cjs/visualizations/helpers/tooltipFormatter.js +510 -0
  52. package/dist/cjs/visualizations/helpers/tooltipFormatter.js.map +1 -0
  53. package/dist/cjs/visualizations/helpers/valueFormatter.d.ts +7 -0
  54. package/dist/cjs/visualizations/helpers/valueFormatter.d.ts.map +1 -0
  55. package/dist/cjs/visualizations/helpers/valueFormatter.js +13 -0
  56. package/dist/cjs/visualizations/helpers/valueFormatter.js.map +1 -0
  57. package/dist/cjs/visualizations/types/index.d.ts +84 -1
  58. package/dist/cjs/visualizations/types/index.d.ts.map +1 -1
  59. package/dist/cjs/visualizations/types/index.js.map +1 -1
  60. package/dist/esm/.tsbuildinfo +1 -1
  61. package/dist/esm/index.d.ts +10 -1
  62. package/dist/esm/index.d.ts.map +1 -1
  63. package/dist/esm/index.js +10 -1
  64. package/dist/esm/index.js.map +1 -1
  65. package/dist/esm/visualizations/CartesianChartDataModel.d.ts +1 -1
  66. package/dist/esm/visualizations/CartesianChartDataModel.d.ts.map +1 -1
  67. package/dist/esm/visualizations/CartesianChartDataModel.js +146 -45
  68. package/dist/esm/visualizations/CartesianChartDataModel.js.map +1 -1
  69. package/dist/esm/visualizations/PieChartDataModel.d.ts.map +1 -1
  70. package/dist/esm/visualizations/PieChartDataModel.js +26 -0
  71. package/dist/esm/visualizations/PieChartDataModel.js.map +1 -1
  72. package/dist/esm/visualizations/helpers/styles/axisStyles.d.ts +50 -0
  73. package/dist/esm/visualizations/helpers/styles/axisStyles.d.ts.map +1 -0
  74. package/dist/esm/visualizations/helpers/styles/axisStyles.js +51 -0
  75. package/dist/esm/visualizations/helpers/styles/axisStyles.js.map +1 -0
  76. package/dist/esm/visualizations/helpers/styles/barChartStyles.d.ts +81 -0
  77. package/dist/esm/visualizations/helpers/styles/barChartStyles.d.ts.map +1 -0
  78. package/dist/esm/visualizations/helpers/styles/barChartStyles.js +326 -0
  79. package/dist/esm/visualizations/helpers/styles/barChartStyles.js.map +1 -0
  80. package/dist/esm/visualizations/helpers/styles/gridStyles.d.ts +21 -0
  81. package/dist/esm/visualizations/helpers/styles/gridStyles.d.ts.map +1 -0
  82. package/dist/esm/visualizations/helpers/styles/gridStyles.js +22 -0
  83. package/dist/esm/visualizations/helpers/styles/gridStyles.js.map +1 -0
  84. package/dist/esm/visualizations/helpers/styles/legendStyles.d.ts +49 -0
  85. package/dist/esm/visualizations/helpers/styles/legendStyles.d.ts.map +1 -0
  86. package/dist/esm/visualizations/helpers/styles/legendStyles.js +34 -0
  87. package/dist/esm/visualizations/helpers/styles/legendStyles.js.map +1 -0
  88. package/dist/esm/visualizations/helpers/styles/pieChartStyles.d.ts +49 -0
  89. package/dist/esm/visualizations/helpers/styles/pieChartStyles.d.ts.map +1 -0
  90. package/dist/esm/visualizations/helpers/styles/pieChartStyles.js +51 -0
  91. package/dist/esm/visualizations/helpers/styles/pieChartStyles.js.map +1 -0
  92. package/dist/esm/visualizations/helpers/styles/referenceLineStyles.d.ts +31 -0
  93. package/dist/esm/visualizations/helpers/styles/referenceLineStyles.d.ts.map +1 -0
  94. package/dist/esm/visualizations/helpers/styles/referenceLineStyles.js +39 -0
  95. package/dist/esm/visualizations/helpers/styles/referenceLineStyles.js.map +1 -0
  96. package/dist/esm/visualizations/helpers/styles/themeColors.d.ts +18 -0
  97. package/dist/esm/visualizations/helpers/styles/themeColors.d.ts.map +1 -0
  98. package/dist/esm/visualizations/helpers/styles/themeColors.js +20 -0
  99. package/dist/esm/visualizations/helpers/styles/themeColors.js.map +1 -0
  100. package/dist/esm/visualizations/helpers/styles/tooltipStyles.d.ts +53 -0
  101. package/dist/esm/visualizations/helpers/styles/tooltipStyles.d.ts.map +1 -0
  102. package/dist/esm/visualizations/helpers/styles/tooltipStyles.js +136 -0
  103. package/dist/esm/visualizations/helpers/styles/tooltipStyles.js.map +1 -0
  104. package/dist/esm/visualizations/helpers/styles/valueLabelStyles.d.ts +20 -0
  105. package/dist/esm/visualizations/helpers/styles/valueLabelStyles.d.ts.map +1 -0
  106. package/dist/esm/visualizations/helpers/styles/valueLabelStyles.js +30 -0
  107. package/dist/esm/visualizations/helpers/styles/valueLabelStyles.js.map +1 -0
  108. package/dist/esm/visualizations/{chartTransformations.d.ts → helpers/tooltipFormatter.d.ts} +53 -20
  109. package/dist/esm/visualizations/helpers/tooltipFormatter.d.ts.map +1 -0
  110. package/dist/esm/visualizations/helpers/tooltipFormatter.js +502 -0
  111. package/dist/esm/visualizations/helpers/tooltipFormatter.js.map +1 -0
  112. package/dist/esm/visualizations/helpers/valueFormatter.d.ts +7 -0
  113. package/dist/esm/visualizations/helpers/valueFormatter.d.ts.map +1 -0
  114. package/dist/esm/visualizations/helpers/valueFormatter.js +8 -0
  115. package/dist/esm/visualizations/helpers/valueFormatter.js.map +1 -0
  116. package/dist/esm/visualizations/types/index.d.ts +84 -1
  117. package/dist/esm/visualizations/types/index.d.ts.map +1 -1
  118. package/dist/esm/visualizations/types/index.js +1 -1
  119. package/dist/esm/visualizations/types/index.js.map +1 -1
  120. package/dist/types/.tsbuildinfo +1 -1
  121. package/dist/types/index.d.ts +10 -1
  122. package/dist/types/index.d.ts.map +1 -1
  123. package/dist/types/index.js +10 -1
  124. package/dist/types/index.js.map +1 -1
  125. package/dist/types/visualizations/CartesianChartDataModel.d.ts +1 -1
  126. package/dist/types/visualizations/CartesianChartDataModel.d.ts.map +1 -1
  127. package/dist/types/visualizations/CartesianChartDataModel.js +146 -45
  128. package/dist/types/visualizations/CartesianChartDataModel.js.map +1 -1
  129. package/dist/types/visualizations/PieChartDataModel.d.ts.map +1 -1
  130. package/dist/types/visualizations/PieChartDataModel.js +26 -0
  131. package/dist/types/visualizations/PieChartDataModel.js.map +1 -1
  132. package/dist/types/visualizations/helpers/styles/axisStyles.d.ts +50 -0
  133. package/dist/types/visualizations/helpers/styles/axisStyles.d.ts.map +1 -0
  134. package/dist/types/visualizations/helpers/styles/axisStyles.js +51 -0
  135. package/dist/types/visualizations/helpers/styles/axisStyles.js.map +1 -0
  136. package/dist/types/visualizations/helpers/styles/barChartStyles.d.ts +81 -0
  137. package/dist/types/visualizations/helpers/styles/barChartStyles.d.ts.map +1 -0
  138. package/dist/types/visualizations/helpers/styles/barChartStyles.js +326 -0
  139. package/dist/types/visualizations/helpers/styles/barChartStyles.js.map +1 -0
  140. package/dist/types/visualizations/helpers/styles/gridStyles.d.ts +21 -0
  141. package/dist/types/visualizations/helpers/styles/gridStyles.d.ts.map +1 -0
  142. package/dist/types/visualizations/helpers/styles/gridStyles.js +22 -0
  143. package/dist/types/visualizations/helpers/styles/gridStyles.js.map +1 -0
  144. package/dist/types/visualizations/helpers/styles/legendStyles.d.ts +49 -0
  145. package/dist/types/visualizations/helpers/styles/legendStyles.d.ts.map +1 -0
  146. package/dist/types/visualizations/helpers/styles/legendStyles.js +34 -0
  147. package/dist/types/visualizations/helpers/styles/legendStyles.js.map +1 -0
  148. package/dist/types/visualizations/helpers/styles/pieChartStyles.d.ts +49 -0
  149. package/dist/types/visualizations/helpers/styles/pieChartStyles.d.ts.map +1 -0
  150. package/dist/types/visualizations/helpers/styles/pieChartStyles.js +51 -0
  151. package/dist/types/visualizations/helpers/styles/pieChartStyles.js.map +1 -0
  152. package/dist/types/visualizations/helpers/styles/referenceLineStyles.d.ts +31 -0
  153. package/dist/types/visualizations/helpers/styles/referenceLineStyles.d.ts.map +1 -0
  154. package/dist/types/visualizations/helpers/styles/referenceLineStyles.js +39 -0
  155. package/dist/types/visualizations/helpers/styles/referenceLineStyles.js.map +1 -0
  156. package/dist/types/visualizations/helpers/styles/themeColors.d.ts +18 -0
  157. package/dist/types/visualizations/helpers/styles/themeColors.d.ts.map +1 -0
  158. package/dist/types/visualizations/helpers/styles/themeColors.js +20 -0
  159. package/dist/types/visualizations/helpers/styles/themeColors.js.map +1 -0
  160. package/dist/types/visualizations/helpers/styles/tooltipStyles.d.ts +53 -0
  161. package/dist/types/visualizations/helpers/styles/tooltipStyles.d.ts.map +1 -0
  162. package/dist/types/visualizations/helpers/styles/tooltipStyles.js +136 -0
  163. package/dist/types/visualizations/helpers/styles/tooltipStyles.js.map +1 -0
  164. package/dist/types/visualizations/helpers/styles/valueLabelStyles.d.ts +20 -0
  165. package/dist/types/visualizations/helpers/styles/valueLabelStyles.d.ts.map +1 -0
  166. package/dist/types/visualizations/helpers/styles/valueLabelStyles.js +30 -0
  167. package/dist/types/visualizations/helpers/styles/valueLabelStyles.js.map +1 -0
  168. package/dist/types/visualizations/{chartTransformations.d.ts → helpers/tooltipFormatter.d.ts} +53 -20
  169. package/dist/types/visualizations/helpers/tooltipFormatter.d.ts.map +1 -0
  170. package/dist/types/visualizations/helpers/tooltipFormatter.js +502 -0
  171. package/dist/types/visualizations/helpers/tooltipFormatter.js.map +1 -0
  172. package/dist/types/visualizations/helpers/valueFormatter.d.ts +7 -0
  173. package/dist/types/visualizations/helpers/valueFormatter.d.ts.map +1 -0
  174. package/dist/types/visualizations/helpers/valueFormatter.js +8 -0
  175. package/dist/types/visualizations/helpers/valueFormatter.js.map +1 -0
  176. package/dist/types/visualizations/types/index.d.ts +84 -1
  177. package/dist/types/visualizations/types/index.d.ts.map +1 -1
  178. package/dist/types/visualizations/types/index.js +1 -1
  179. package/dist/types/visualizations/types/index.js.map +1 -1
  180. package/package.json +1 -1
  181. package/dist/cjs/visualizations/chartTransformations.d.ts.map +0 -1
  182. package/dist/cjs/visualizations/chartTransformations.js +0 -112
  183. package/dist/cjs/visualizations/chartTransformations.js.map +0 -1
  184. package/dist/esm/visualizations/chartTransformations.d.ts.map +0 -1
  185. package/dist/esm/visualizations/chartTransformations.js +0 -107
  186. package/dist/esm/visualizations/chartTransformations.js.map +0 -1
  187. package/dist/types/visualizations/chartTransformations.d.ts.map +0 -1
  188. package/dist/types/visualizations/chartTransformations.js +0 -107
  189. package/dist/types/visualizations/chartTransformations.js.map +0 -1
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getValueLabelStyle = void 0;
4
+ const savedCharts_1 = require("../../../types/savedCharts");
5
+ const themeColors_1 = require("./themeColors");
6
+ /**
7
+ * Get value label styling for any chart series (line, bar, area, scatter, etc.)
8
+ * Inside: White on dark backgrounds, gray.9 on light backgrounds, weight 400
9
+ * Outside: gray.9 text with colored border matching series, weight 500
10
+ * Size: 11px
11
+ * @param position - Label position relative to data point
12
+ * @param type - Series type
13
+ */
14
+ const getValueLabelStyle = (position, type) => {
15
+ const isInside = position === 'inside';
16
+ const base = {
17
+ fontSize: 11,
18
+ fontWeight: '500',
19
+ };
20
+ if (
21
+ // inside labels for line and area series should have a white border - similar way to bar series for legibility
22
+ isInside &&
23
+ (type === savedCharts_1.CartesianSeriesType.LINE || type === savedCharts_1.CartesianSeriesType.AREA)) {
24
+ return {
25
+ ...base,
26
+ textBorderColor: themeColors_1.WHITE,
27
+ textBorderWidth: 2,
28
+ textBorderType: 'solid',
29
+ };
30
+ }
31
+ return base;
32
+ };
33
+ exports.getValueLabelStyle = getValueLabelStyle;
34
+ //# sourceMappingURL=valueLabelStyles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"valueLabelStyles.js","sourceRoot":"","sources":["../../../../../src/visualizations/helpers/styles/valueLabelStyles.ts"],"names":[],"mappings":";;;AAAA,4DAA8E;AAC9E,+CAAsC;AAEtC;;;;;;;GAOG;AACI,MAAM,kBAAkB,GAAG,CAC9B,QAAoE,EACpE,IAAoB,EACtB,EAAE;IACA,MAAM,QAAQ,GAAG,QAAQ,KAAK,QAAQ,CAAC;IAEvC,MAAM,IAAI,GAAG;QACT,QAAQ,EAAE,EAAE;QACZ,UAAU,EAAE,KAAK;KACX,CAAC;IAEX;IACI,+GAA+G;IAC/G,QAAQ;QACR,CAAC,IAAI,KAAK,iCAAmB,CAAC,IAAI,IAAI,IAAI,KAAK,iCAAmB,CAAC,IAAI,CAAC,EAC1E,CAAC;QACC,OAAO;YACH,GAAG,IAAI;YACP,eAAe,EAAE,mBAAK;YACtB,eAAe,EAAE,CAAC;YAClB,cAAc,EAAE,OAAO;SAC1B,CAAC;IACN,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC,CAAC;AAzBW,QAAA,kBAAkB,sBAyB7B"}
@@ -1,22 +1,15 @@
1
- /**
2
- * ECharts tooltip parameter types
3
- * These represent the structure of params passed to tooltip formatters
4
- */
5
- export interface TooltipParam {
6
- seriesName?: string;
7
- marker?: string;
8
- encode?: {
9
- x?: string | number | (string | number)[];
10
- y?: string | number | (string | number)[];
11
- };
12
- dimensionNames?: string[];
13
- data?: Record<string, unknown>;
14
- value?: Record<string, unknown> | unknown[];
15
- axisValue?: string | number;
16
- axisValueLabel?: string | number;
17
- }
18
- type TooltipParams = TooltipParam | TooltipParam[];
19
- type GetDimensionNameFn = (param: TooltipParam) => string | undefined;
1
+ import { type DefaultLabelFormatterCallbackParams, type LineSeriesOption, type TooltipComponentFormatterCallback } from 'echarts';
2
+ import { type ItemsMap } from '../../types/field';
3
+ import { type ParametersValuesMap } from '../../types/parameters';
4
+ import { type EChartsSeries, type PivotValuesColumn } from '../types';
5
+ type TooltipFormatterParams = DefaultLabelFormatterCallbackParams & {
6
+ axisId: string;
7
+ axisIndex: number;
8
+ axisType: string;
9
+ axisValue: string | number;
10
+ axisValueLabel: string;
11
+ };
12
+ export declare const isLineSeriesOption: (obj: unknown) => obj is LineSeriesOption;
20
13
  /**
21
14
  * Creates a tooltip formatter for 100% stacked charts
22
15
  * This formatter shows both the percentage and the original count value
@@ -66,5 +59,45 @@ export declare function transformToPercentageStacking<T extends Record<string, u
66
59
  transformedResults: T[];
67
60
  originalValues: Map<string, Map<string, number>>;
68
61
  };
62
+ /**
63
+ * Build a simplified tooltip formatter for SQL Runner Cartesian charts
64
+ * This formatter doesn't require itemsMap and works directly with the dataset
65
+ */
66
+ export declare const buildSqlRunnerCartesianTooltipFormatter: ({ stackValue, flipAxes, xFieldId, originalValues, }: {
67
+ stackValue: string | boolean | undefined;
68
+ flipAxes: boolean | undefined;
69
+ xFieldId: string | undefined;
70
+ originalValues?: Map<string, Map<string, number>> | undefined;
71
+ }) => TooltipComponentFormatterCallback<TooltipFormatterParams | TooltipFormatterParams[]>;
72
+ export declare const buildCartesianTooltipFormatter: ({ itemsMap, stackValue, flipAxes, xFieldId, originalValues, series, tooltipHtmlTemplate, pivotValuesColumnsMap, parameters, }: {
73
+ itemsMap?: ItemsMap;
74
+ stackValue: string | boolean | undefined;
75
+ flipAxes: boolean | undefined;
76
+ xFieldId: string | undefined;
77
+ originalValues?: Map<string, Map<string, number>> | undefined;
78
+ series?: EChartsSeries[];
79
+ tooltipHtmlTemplate?: string;
80
+ pivotValuesColumnsMap?: Record<string, PivotValuesColumn>;
81
+ parameters?: ParametersValuesMap;
82
+ }) => TooltipComponentFormatterCallback<TooltipFormatterParams | TooltipFormatterParams[]>;
83
+ /**
84
+ * ECharts tooltip parameter types
85
+ * These represent the structure of params passed to tooltip formatters
86
+ */
87
+ export interface TooltipParam {
88
+ seriesName?: string;
89
+ marker?: string;
90
+ encode?: {
91
+ x?: string | number | (string | number)[];
92
+ y?: string | number | (string | number)[];
93
+ };
94
+ dimensionNames?: string[];
95
+ data?: Record<string, unknown>;
96
+ value?: Record<string, unknown> | unknown[];
97
+ axisValue?: string | number;
98
+ axisValueLabel?: string | number;
99
+ }
100
+ type TooltipParams = TooltipParam | TooltipParam[];
101
+ type GetDimensionNameFn = (param: TooltipParam) => string | undefined;
69
102
  export {};
70
- //# sourceMappingURL=chartTransformations.d.ts.map
103
+ //# sourceMappingURL=tooltipFormatter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tooltipFormatter.d.ts","sourceRoot":"","sources":["../../../../src/visualizations/helpers/tooltipFormatter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,510 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildCartesianTooltipFormatter = exports.buildSqlRunnerCartesianTooltipFormatter = exports.isLineSeriesOption = void 0;
4
+ exports.createStack100TooltipFormatter = createStack100TooltipFormatter;
5
+ exports.transformToPercentageStacking = transformToPercentageStacking;
6
+ const lodash_1 = require("lodash");
7
+ const field_1 = require("../../types/field");
8
+ const savedCharts_1 = require("../../types/savedCharts");
9
+ const formatting_1 = require("../../utils/formatting");
10
+ const sanitizeHtml_1 = require("../../utils/sanitizeHtml");
11
+ const types_1 = require("../types");
12
+ const tooltipStyles_1 = require("./styles/tooltipStyles");
13
+ const valueFormatter_1 = require("./valueFormatter");
14
+ /**
15
+ * Get the tooltip context
16
+ * When series are bar stacked, then it's tuple mode(@reference to applyRoundedCornersToStackData), otherwise it's dataset mode.
17
+ * @param params - The params
18
+ * @param stackValue - The stack value
19
+ * @param flipAxes - Whether the axes are flipped
20
+ * @returns The tooltip context
21
+ */
22
+ const getTooltipCtx = (params, stackValue, flipAxes) => {
23
+ const v0 = params?.[0]?.value;
24
+ const dataMode = v0 && typeof v0 === 'object' && !Array.isArray(v0)
25
+ ? 'dataset'
26
+ : 'tuple';
27
+ let mode = 'plain';
28
+ if (stackValue === types_1.StackType.PERCENT) {
29
+ mode = 'stack100';
30
+ }
31
+ else if (stackValue) {
32
+ mode = 'stackRegular';
33
+ }
34
+ return { flipAxes: !!flipAxes, mode, dataMode };
35
+ };
36
+ const getRawVal = (param, dim, yIdx, ctx) => {
37
+ const v = param.value;
38
+ if (Array.isArray(v)) {
39
+ if (typeof yIdx === 'number')
40
+ return v[yIdx];
41
+ // ultimate fallback for tuple in regular stacks
42
+ if (ctx.dataMode === 'tuple' && ctx.mode === 'stackRegular') {
43
+ return ctx.flipAxes ? v[0] : v[1];
44
+ }
45
+ return undefined; // array but no valid index
46
+ }
47
+ if (v && typeof v === 'object' && dim) {
48
+ // Only return the value if the key exists, otherwise undefined
49
+ return v[dim];
50
+ }
51
+ // For non-object, non-array values (plain number/string), return as-is
52
+ // But if we have a dim and v is an object, we already handled it above
53
+ return typeof v === 'object' ? undefined : v;
54
+ };
55
+ /**
56
+ * Get the header from the params
57
+ * @param params - The params
58
+ * @returns The header
59
+ */
60
+ const getHeader = (params) => {
61
+ // First try the standard axisValueLabel or name
62
+ const standardHeader = params[0]?.axisValueLabel ?? params[0]?.name;
63
+ if (standardHeader)
64
+ return standardHeader;
65
+ // For tuple mode (stacked bars) with time axis, extract x-value from data array
66
+ const firstParam = params[0];
67
+ if (firstParam?.value && Array.isArray(firstParam.value)) {
68
+ // In tuple mode, first element is typically the x-axis value
69
+ const xValue = firstParam.value[0];
70
+ if (xValue !== undefined && xValue !== null) {
71
+ // Format date strings nicely
72
+ if (typeof xValue === 'string' &&
73
+ xValue.match(/^\d{4}-\d{2}-\d{2}/)) {
74
+ try {
75
+ return new Date(xValue).toLocaleDateString(undefined, {
76
+ year: 'numeric',
77
+ month: 'short',
78
+ day: 'numeric',
79
+ });
80
+ }
81
+ catch {
82
+ return String(xValue);
83
+ }
84
+ }
85
+ return String(xValue);
86
+ }
87
+ }
88
+ return '';
89
+ };
90
+ const extractColor = (marker) => {
91
+ const s = typeof marker === 'string' ? marker : '';
92
+ const m = s.match(/background-color:\s*([^;'"]+)/);
93
+ return m ? m[1].trim() : '#000';
94
+ };
95
+ const unwrapValue = (v) => {
96
+ if (v && typeof v === 'object') {
97
+ if ('value' in v)
98
+ return unwrapValue(v.value);
99
+ if ('raw' in v)
100
+ return v.raw;
101
+ if ('formatted' in v)
102
+ return v.formatted;
103
+ }
104
+ return v;
105
+ };
106
+ /**
107
+ * Helper function to get the dimension from the encode
108
+ */
109
+ const getDimFromEncodeAxis = (encode, dimensionNames, axis = 'y') => {
110
+ if (!encode)
111
+ return undefined;
112
+ const e = encode[axis];
113
+ if (typeof e === 'string')
114
+ return e; // dataset: field hash
115
+ if (Array.isArray(e) && typeof e[0] === 'number') {
116
+ const idx = e[0];
117
+ return dimensionNames && typeof idx === 'number'
118
+ ? dimensionNames[idx]
119
+ : undefined;
120
+ }
121
+ if (typeof e === 'number' && dimensionNames) {
122
+ return dimensionNames[e];
123
+ }
124
+ return undefined;
125
+ };
126
+ const getValueIdxFromEncode = (encode, ctx, flipAxes) => {
127
+ const axis = flipAxes ? 'x' : 'y';
128
+ if (!encode) {
129
+ let result;
130
+ // tuple fallback for regular stacks
131
+ if (ctx.dataMode === 'tuple' && ctx.mode === 'stackRegular') {
132
+ result = flipAxes ? 0 : 1;
133
+ }
134
+ return result;
135
+ }
136
+ const e = encode[axis];
137
+ if (typeof e === 'number')
138
+ return e;
139
+ if (Array.isArray(e) && typeof e[0] === 'number')
140
+ return e[0];
141
+ // tuple fallback for regular stacks
142
+ if (ctx.dataMode === 'tuple' && ctx.mode === 'stackRegular') {
143
+ return flipAxes ? 0 : 1;
144
+ }
145
+ return undefined;
146
+ };
147
+ const isLineSeriesOption = (obj) => typeof obj === 'object' && obj !== null && 'showSymbol' in obj;
148
+ exports.isLineSeriesOption = isLineSeriesOption;
149
+ /**
150
+ * Creates a tooltip formatter for 100% stacked charts
151
+ * This formatter shows both the percentage and the original count value
152
+ *
153
+ * @param originalValues - Map of x-axis values to their original y-values
154
+ * @param getDimensionName - Function to extract the dimension name from a param
155
+ * @param xAxisField - The x-axis field name to extract the raw x value from param data
156
+ * @returns A formatter function compatible with ECharts tooltip
157
+ *
158
+ * @example
159
+ * // SQL Runner usage
160
+ * const formatter = createStack100TooltipFormatter(
161
+ * originalValues,
162
+ * (param) => {
163
+ * const { encode, dimensionNames } = param;
164
+ * const yFieldIndex = Array.isArray(encode.y) ? encode.y[0] : encode.y;
165
+ * return dimensionNames?.[yFieldIndex];
166
+ * },
167
+ * xFieldId
168
+ * );
169
+ *
170
+ * @example
171
+ * // Explorer usage with flip axes
172
+ * const formatter = createStack100TooltipFormatter(
173
+ * originalValues,
174
+ * (param) => {
175
+ * const { encode, dimensionNames } = param;
176
+ * if (!dimensionNames || !encode) return undefined;
177
+ * return flipAxes ? dimensionNames[1] : dimensionNames[encode.y?.[0]];
178
+ * },
179
+ * xFieldId
180
+ * );
181
+ */
182
+ function createStack100TooltipFormatter(originalValues, getDimensionName, xAxisField) {
183
+ return (params) => {
184
+ if (!Array.isArray(params))
185
+ return '';
186
+ const header = getHeader(params);
187
+ const rowsHtml = params
188
+ .map((param) => {
189
+ const { seriesName = '', marker = '' } = param;
190
+ const dimensionName = getDimensionName(param);
191
+ if (!dimensionName)
192
+ return '';
193
+ // Access value - try both data and value for compatibility
194
+ // SQL Runner uses 'data', Explorer uses 'value'
195
+ const valueObject = param.data ||
196
+ (typeof param.value === 'object' &&
197
+ !Array.isArray(param.value)
198
+ ? param.value
199
+ : undefined);
200
+ if (!valueObject || typeof valueObject !== 'object')
201
+ return '';
202
+ const percentage = valueObject[dimensionName];
203
+ // Get the raw x-axis value from the data for originalValues lookup
204
+ const rawXValue = String(valueObject[xAxisField] ?? '');
205
+ const originalValue = originalValues?.get(rawXValue)?.get(dimensionName) || 0;
206
+ // Format percentage and count
207
+ const percentageStr = typeof percentage === 'number' && !Number.isNaN(percentage)
208
+ ? `${percentage.toFixed(1)}%`
209
+ : '0.0%';
210
+ const countStr = typeof originalValue === 'number'
211
+ ? originalValue.toLocaleString()
212
+ : '0';
213
+ const colorIndicator = (0, tooltipStyles_1.formatColorIndicator)(extractColor(marker));
214
+ return (0, tooltipStyles_1.formatCartesianTooltipRow)(colorIndicator, seriesName, (0, tooltipStyles_1.formatTooltipValue)(`${percentageStr} (${countStr})`));
215
+ })
216
+ .filter(Boolean)
217
+ .join('');
218
+ const divider = (0, tooltipStyles_1.getTooltipDivider)();
219
+ return `${(0, tooltipStyles_1.formatTooltipHeader)(header)}${divider}${rowsHtml}`;
220
+ };
221
+ }
222
+ /**
223
+ * Transform data for 100% stacked charts
224
+ *
225
+ * Converts absolute values to percentages where each stacked group totals 100%.
226
+ * Also preserves original values for tooltip display.
227
+ *
228
+ * @param rows - Array of data rows to transform
229
+ * @param xAxisField - Field reference for the x-axis (grouping key)
230
+ * @param yFieldRefs - Array of field references for y-axis values to convert to percentages
231
+ * @returns Object containing transformed data and original values map
232
+ */
233
+ function transformToPercentageStacking(rows, xAxisField, yFieldRefs) {
234
+ const originalValues = new Map();
235
+ const totals = new Map();
236
+ // Calculate totals for each x-axis value
237
+ rows.forEach((row) => {
238
+ const xValue = String(row[xAxisField]);
239
+ let total = 0;
240
+ yFieldRefs.forEach((yField) => {
241
+ const value = (0, lodash_1.toNumber)(row[yField]) || 0;
242
+ total += value;
243
+ // Store original value
244
+ if (!originalValues.has(xValue)) {
245
+ originalValues.set(xValue, new Map());
246
+ }
247
+ originalValues.get(xValue).set(yField, value);
248
+ });
249
+ totals.set(xValue, total);
250
+ });
251
+ // Transform data to percentages
252
+ const transformedResults = rows.map((row) => {
253
+ const xValue = String(row[xAxisField]);
254
+ const total = totals.get(xValue) || 1; // Avoid division by zero
255
+ const newRow = { ...row };
256
+ yFieldRefs.forEach((yField) => {
257
+ const value = (0, lodash_1.toNumber)(row[yField]) || 0;
258
+ newRow[yField] = (value / total) * 100;
259
+ });
260
+ return newRow;
261
+ });
262
+ return { transformedResults, originalValues };
263
+ }
264
+ /**
265
+ * Build a simplified tooltip formatter for SQL Runner Cartesian charts
266
+ * This formatter doesn't require itemsMap and works directly with the dataset
267
+ */
268
+ const buildSqlRunnerCartesianTooltipFormatter = ({ stackValue, flipAxes, xFieldId, originalValues, }) => (params) => {
269
+ if (!Array.isArray(params))
270
+ return '';
271
+ const ctx = getTooltipCtx(params, stackValue, flipAxes);
272
+ // 100% stacks: use special formatter that shows percentage + original values
273
+ if (ctx.mode === 'stack100' && xFieldId && originalValues) {
274
+ return createStack100TooltipFormatter(originalValues, (param) => {
275
+ const { encode, dimensionNames } = param;
276
+ if (!dimensionNames || !encode)
277
+ return undefined;
278
+ if (flipAxes)
279
+ return dimensionNames[1];
280
+ const yIndex = Array.isArray(encode.y)
281
+ ? encode.y[0]
282
+ : encode.y;
283
+ return typeof yIndex === 'number'
284
+ ? dimensionNames[yIndex]
285
+ : undefined;
286
+ }, xFieldId)(params);
287
+ }
288
+ const header = getHeader(params);
289
+ // Build tooltip rows
290
+ const rowsHtml = params
291
+ .map((param) => {
292
+ const { marker, seriesName, dimensionNames, encode } = param;
293
+ const metricAxis = flipAxes ? 'x' : 'y';
294
+ const dim = getDimFromEncodeAxis(encode, dimensionNames, metricAxis);
295
+ const valueIdx = getValueIdxFromEncode(encode, ctx, !!flipAxes);
296
+ const rawVal = getRawVal(param, dim, valueIdx, ctx);
297
+ const valueForFormat = unwrapValue(rawVal);
298
+ if (valueForFormat === undefined || valueForFormat === null)
299
+ return '';
300
+ // Format the value - for SQL Runner, we'll use the raw number
301
+ const formattedValue = typeof valueForFormat === 'number'
302
+ ? valueForFormat.toLocaleString()
303
+ : String(valueForFormat);
304
+ const colorIndicator = (0, tooltipStyles_1.formatColorIndicator)(extractColor(marker));
305
+ return (0, tooltipStyles_1.formatCartesianTooltipRow)(colorIndicator, seriesName || '', (0, tooltipStyles_1.formatTooltipValue)(formattedValue));
306
+ })
307
+ .join('');
308
+ const divider = (0, tooltipStyles_1.getTooltipDivider)();
309
+ return `${(0, tooltipStyles_1.formatTooltipHeader)(header)}${divider}${rowsHtml}`;
310
+ };
311
+ exports.buildSqlRunnerCartesianTooltipFormatter = buildSqlRunnerCartesianTooltipFormatter;
312
+ const buildCartesianTooltipFormatter = ({ itemsMap, stackValue, flipAxes, xFieldId, originalValues, series, tooltipHtmlTemplate, pivotValuesColumnsMap, parameters, }) => (params) => {
313
+ if (!Array.isArray(params) || !itemsMap)
314
+ return '';
315
+ const ctx = getTooltipCtx(params, stackValue, flipAxes);
316
+ // 100% stacks: use special formatter that shows percentage + original values
317
+ if (ctx.mode === 'stack100' && xFieldId && originalValues) {
318
+ return createStack100TooltipFormatter(originalValues, (param) => {
319
+ const { encode, dimensionNames } = param;
320
+ if (!dimensionNames || !encode)
321
+ return undefined;
322
+ if (flipAxes)
323
+ return dimensionNames[1];
324
+ const yIndex = Array.isArray(encode.y)
325
+ ? encode.y[0]
326
+ : encode.y;
327
+ return typeof yIndex === 'number'
328
+ ? dimensionNames[yIndex]
329
+ : undefined;
330
+ }, xFieldId)(params);
331
+ }
332
+ const header = getHeader(params);
333
+ // rows
334
+ const rowsHtml = params
335
+ .map((param) => {
336
+ const { marker, seriesName, dimensionNames, encode, seriesIndex, } = param;
337
+ const seriesOption = typeof seriesIndex === 'number'
338
+ ? series?.[seriesIndex]
339
+ : undefined;
340
+ const effectiveEncode = encode ?? seriesOption?.encode ?? undefined;
341
+ const yRefField = seriesOption?.encode?.yRef?.field ?? undefined;
342
+ const yFieldHash = seriesOption?.encode?.yRef &&
343
+ typeof seriesOption.encode.yRef === 'object'
344
+ ? (0, savedCharts_1.hashFieldReference)(seriesOption.encode.yRef)
345
+ : undefined;
346
+ const seriesDimensionNames = Array.isArray(seriesOption?.dimensions)
347
+ ? seriesOption?.dimensions.map((dimension) => typeof dimension === 'string'
348
+ ? dimension
349
+ : dimension?.name)
350
+ : undefined;
351
+ const metricAxis = flipAxes ? 'x' : 'y';
352
+ const encodeDim = getDimFromEncodeAxis(effectiveEncode, dimensionNames, metricAxis) ??
353
+ getDimFromEncodeAxis(effectiveEncode, seriesDimensionNames, metricAxis);
354
+ const tooltipEncode = seriesOption?.encode?.tooltip;
355
+ let tooltipDim;
356
+ if (Array.isArray(tooltipEncode)) {
357
+ // eslint-disable-next-line prefer-destructuring
358
+ tooltipDim = tooltipEncode[0];
359
+ }
360
+ else if (typeof tooltipEncode === 'string') {
361
+ tooltipDim = tooltipEncode;
362
+ }
363
+ const pivotDim = seriesOption?.pivotReference && pivotValuesColumnsMap
364
+ ? Object.values(pivotValuesColumnsMap).find((column) => {
365
+ const reference = seriesOption.pivotReference;
366
+ if (!reference)
367
+ return false;
368
+ if (column.referenceField !== reference.field)
369
+ return false;
370
+ if (column.pivotValues.length !==
371
+ reference.pivotValues?.length)
372
+ return false;
373
+ return column.pivotValues.every((pivotValue, index) => pivotValue.value ===
374
+ reference.pivotValues?.[index]?.value);
375
+ })?.pivotColumnName
376
+ : undefined;
377
+ // Prefer the real field hash from encode.y (works for pivot)
378
+ const dim = encodeDim ??
379
+ tooltipDim ??
380
+ pivotDim ??
381
+ // final fallback: the second dimension name normally is the Y series
382
+ param?.dimensionNames?.[1] ??
383
+ undefined;
384
+ const valueIdx = getValueIdxFromEncode(effectiveEncode, ctx, !!flipAxes);
385
+ const rawValueKeys = [
386
+ dim,
387
+ pivotDim,
388
+ tooltipDim,
389
+ yFieldHash,
390
+ yRefField,
391
+ ].filter((k) => !!k && typeof k === 'string');
392
+ // Extract raw cell value in both dataset/tuple modes
393
+ let rawVal = getRawVal(param, dim, valueIdx, ctx);
394
+ const needsPivotFallback = pivotDim &&
395
+ dim &&
396
+ pivotDim !== dim &&
397
+ typeof param?.value === 'object' &&
398
+ !Array.isArray(param?.value) &&
399
+ param.value[dim] === undefined;
400
+ if (needsPivotFallback ||
401
+ (pivotDim && pivotDim !== dim && rawVal === param?.value)) {
402
+ rawVal = getRawVal(param, pivotDim, valueIdx, ctx);
403
+ }
404
+ if ((rawVal === param?.value ||
405
+ (rawVal &&
406
+ typeof rawVal === 'object' &&
407
+ !Array.isArray(rawVal))) &&
408
+ rawValueKeys.length > 0) {
409
+ for (const key of rawValueKeys) {
410
+ const candidate = getRawVal(param, key, valueIdx, ctx);
411
+ if (candidate !== undefined &&
412
+ candidate !== null &&
413
+ candidate !== param?.value &&
414
+ !(candidate === rawVal &&
415
+ typeof candidate === 'object')) {
416
+ rawVal = candidate;
417
+ break;
418
+ }
419
+ if (param?.value &&
420
+ typeof param.value === 'object' &&
421
+ !Array.isArray(param.value) &&
422
+ param.value[key] !==
423
+ undefined) {
424
+ rawVal =
425
+ param.value[key];
426
+ break;
427
+ }
428
+ if (param?.data &&
429
+ typeof param.data === 'object' &&
430
+ !Array.isArray(param.data) &&
431
+ param.data[key] !==
432
+ undefined) {
433
+ rawVal = param.data[key];
434
+ break;
435
+ }
436
+ }
437
+ }
438
+ const valueForFormat = unwrapValue(rawVal);
439
+ if (valueForFormat === undefined || valueForFormat === null)
440
+ return '';
441
+ const formatKey = (typeof dim === 'string' &&
442
+ pivotValuesColumnsMap?.[dim]?.referenceField) ??
443
+ (pivotDim &&
444
+ pivotValuesColumnsMap?.[pivotDim]?.referenceField) ??
445
+ yRefField ??
446
+ dim ??
447
+ pivotDim ??
448
+ '';
449
+ const formattedValue = (0, valueFormatter_1.getFormattedValue)(valueForFormat, formatKey, itemsMap, undefined, pivotValuesColumnsMap, parameters);
450
+ const colorIndicator = (0, tooltipStyles_1.formatColorIndicator)(extractColor(marker));
451
+ return (0, tooltipStyles_1.formatCartesianTooltipRow)(colorIndicator, seriesName || '', (0, tooltipStyles_1.formatTooltipValue)(formattedValue));
452
+ })
453
+ .join('');
454
+ // custom HTML template
455
+ let tooltipHtml = tooltipHtmlTemplate ?? '';
456
+ if (tooltipHtml) {
457
+ tooltipHtml = (0, sanitizeHtml_1.sanitizeHtml)(tooltipHtml);
458
+ const firstParam = params[0];
459
+ const firstValue = firstParam?.value;
460
+ const fields = tooltipHtml.match(/\${(.*?)}/g);
461
+ if (ctx.dataMode === 'tuple' && Array.isArray(firstValue)) {
462
+ // Tuple mode (stacked bars): map dimension names to array indices
463
+ fields?.forEach((field) => {
464
+ const ref = field.slice(2, -1);
465
+ const dimensionIndex = firstParam.dimensionNames?.indexOf(ref);
466
+ if (dimensionIndex !== undefined && dimensionIndex >= 0) {
467
+ const val = unwrapValue(firstValue[dimensionIndex]);
468
+ const formatted = (0, valueFormatter_1.getFormattedValue)(val, ref, itemsMap, undefined, pivotValuesColumnsMap, parameters);
469
+ tooltipHtml = tooltipHtml.replace(field, formatted);
470
+ }
471
+ else {
472
+ tooltipHtml = tooltipHtml.replace(field, '');
473
+ }
474
+ });
475
+ }
476
+ else if (ctx.dataMode === 'dataset' &&
477
+ firstValue &&
478
+ typeof firstValue === 'object') {
479
+ // Dataset mode: direct property access
480
+ fields?.forEach((field) => {
481
+ const ref = field.slice(2, -1);
482
+ const val = unwrapValue(firstValue[ref]);
483
+ const formatted = (0, valueFormatter_1.getFormattedValue)(val, ref, itemsMap, undefined, pivotValuesColumnsMap, parameters);
484
+ tooltipHtml = tooltipHtml.replace(field, formatted);
485
+ });
486
+ }
487
+ else {
488
+ tooltipHtml = '';
489
+ }
490
+ }
491
+ const divider = (0, tooltipStyles_1.getTooltipDivider)();
492
+ const dimensionId = params[0]?.dimensionNames?.[0];
493
+ if (dimensionId !== undefined) {
494
+ const field = itemsMap[dimensionId];
495
+ if ((0, field_1.isTableCalculation)(field)) {
496
+ const headerText = (0, formatting_1.formatItemValue)(field, header, false, parameters);
497
+ return `${(0, tooltipStyles_1.formatTooltipHeader)(headerText)}${divider}${rowsHtml}`;
498
+ }
499
+ const hasFormat = (0, field_1.isField)(field)
500
+ ? field.format !== undefined
501
+ : false;
502
+ if (hasFormat) {
503
+ const headerText = (0, valueFormatter_1.getFormattedValue)(header, dimensionId, itemsMap, undefined, pivotValuesColumnsMap, parameters);
504
+ return `${(0, tooltipStyles_1.formatTooltipHeader)(headerText)}${divider}${tooltipHtml}${rowsHtml}`;
505
+ }
506
+ }
507
+ return `${(0, tooltipStyles_1.formatTooltipHeader)(header)}${divider}${tooltipHtml}${rowsHtml}`;
508
+ };
509
+ exports.buildCartesianTooltipFormatter = buildCartesianTooltipFormatter;
510
+ //# sourceMappingURL=tooltipFormatter.js.map