@cloudscape-design/chart-components 1.0.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 (246) hide show
  1. package/LICENSE +175 -0
  2. package/NOTICE +1 -0
  3. package/README.md +25 -0
  4. package/cartesian-chart/chart-cartesian-internal.d.ts +10 -0
  5. package/cartesian-chart/chart-cartesian-internal.js +99 -0
  6. package/cartesian-chart/chart-cartesian-internal.js.map +1 -0
  7. package/cartesian-chart/chart-series-cartesian.d.ts +7 -0
  8. package/cartesian-chart/chart-series-cartesian.js +95 -0
  9. package/cartesian-chart/chart-series-cartesian.js.map +1 -0
  10. package/cartesian-chart/index.d.ts +5 -0
  11. package/cartesian-chart/index.js +133 -0
  12. package/cartesian-chart/index.js.map +1 -0
  13. package/cartesian-chart/interfaces.d.ts +166 -0
  14. package/cartesian-chart/interfaces.js +4 -0
  15. package/cartesian-chart/interfaces.js.map +1 -0
  16. package/cartesian-chart/test-classes/styles.css.js +6 -0
  17. package/cartesian-chart/test-classes/styles.scoped.css +7 -0
  18. package/cartesian-chart/test-classes/styles.selectors.js +7 -0
  19. package/core/chart-api/chart-extra-axis-titles.d.ts +10 -0
  20. package/core/chart-api/chart-extra-axis-titles.js +42 -0
  21. package/core/chart-api/chart-extra-axis-titles.js.map +1 -0
  22. package/core/chart-api/chart-extra-context.d.ts +41 -0
  23. package/core/chart-api/chart-extra-context.js +93 -0
  24. package/core/chart-api/chart-extra-context.js.map +1 -0
  25. package/core/chart-api/chart-extra-highlight.d.ts +20 -0
  26. package/core/chart-api/chart-extra-highlight.js +205 -0
  27. package/core/chart-api/chart-extra-highlight.js.map +1 -0
  28. package/core/chart-api/chart-extra-legend.d.ts +27 -0
  29. package/core/chart-api/chart-extra-legend.js +118 -0
  30. package/core/chart-api/chart-extra-legend.js.map +1 -0
  31. package/core/chart-api/chart-extra-navigation.d.ts +84 -0
  32. package/core/chart-api/chart-extra-navigation.js +470 -0
  33. package/core/chart-api/chart-extra-navigation.js.map +1 -0
  34. package/core/chart-api/chart-extra-nodata.d.ts +15 -0
  35. package/core/chart-api/chart-extra-nodata.js +45 -0
  36. package/core/chart-api/chart-extra-nodata.js.map +1 -0
  37. package/core/chart-api/chart-extra-pointer.d.ts +33 -0
  38. package/core/chart-api/chart-extra-pointer.js +173 -0
  39. package/core/chart-api/chart-extra-pointer.js.map +1 -0
  40. package/core/chart-api/chart-extra-tooltip.d.ts +33 -0
  41. package/core/chart-api/chart-extra-tooltip.js +209 -0
  42. package/core/chart-api/chart-extra-tooltip.js.map +1 -0
  43. package/core/chart-api/index.d.ts +75 -0
  44. package/core/chart-api/index.js +383 -0
  45. package/core/chart-api/index.js.map +1 -0
  46. package/core/chart-container.d.ts +20 -0
  47. package/core/chart-container.js +55 -0
  48. package/core/chart-container.js.map +1 -0
  49. package/core/chart-core.d.ts +7 -0
  50. package/core/chart-core.js +287 -0
  51. package/core/chart-core.js.map +1 -0
  52. package/core/components/core-application.d.ts +6 -0
  53. package/core/components/core-application.js +16 -0
  54. package/core/components/core-application.js.map +1 -0
  55. package/core/components/core-filters.d.ts +9 -0
  56. package/core/components/core-filters.js +22 -0
  57. package/core/components/core-filters.js.map +1 -0
  58. package/core/components/core-legend.d.ts +13 -0
  59. package/core/components/core-legend.js +27 -0
  60. package/core/components/core-legend.js.map +1 -0
  61. package/core/components/core-no-data.d.ts +6 -0
  62. package/core/components/core-no-data.js +48 -0
  63. package/core/components/core-no-data.js.map +1 -0
  64. package/core/components/core-slots.d.ts +7 -0
  65. package/core/components/core-slots.js +11 -0
  66. package/core/components/core-slots.js.map +1 -0
  67. package/core/components/core-tooltip.d.ts +7 -0
  68. package/core/components/core-tooltip.js +183 -0
  69. package/core/components/core-tooltip.js.map +1 -0
  70. package/core/components/core-vertical-axis-title.d.ts +5 -0
  71. package/core/components/core-vertical-axis-title.js +15 -0
  72. package/core/components/core-vertical-axis-title.js.map +1 -0
  73. package/core/formatters.d.ts +2 -0
  74. package/core/formatters.js +113 -0
  75. package/core/formatters.js.map +1 -0
  76. package/core/i18n-utils.d.ts +21 -0
  77. package/core/i18n-utils.js +18 -0
  78. package/core/i18n-utils.js.map +1 -0
  79. package/core/interfaces.d.ts +436 -0
  80. package/core/interfaces.js +4 -0
  81. package/core/interfaces.js.map +1 -0
  82. package/core/styles.css.js +25 -0
  83. package/core/styles.scoped.css +115 -0
  84. package/core/styles.selectors.js +26 -0
  85. package/core/test-classes/styles.css.js +33 -0
  86. package/core/test-classes/styles.scoped.css +34 -0
  87. package/core/test-classes/styles.selectors.js +34 -0
  88. package/core/utils.d.ts +45 -0
  89. package/core/utils.js +262 -0
  90. package/core/utils.js.map +1 -0
  91. package/index.d.ts +4 -0
  92. package/index.js +5 -0
  93. package/index.js.map +1 -0
  94. package/internal/api-docs/components/cartesian-chart.js +571 -0
  95. package/internal/api-docs/components/index.d.ts +3 -0
  96. package/internal/api-docs/components/index.js +4 -0
  97. package/internal/api-docs/components/interfaces.d.ts +81 -0
  98. package/internal/api-docs/components/pie-chart.js +430 -0
  99. package/internal/api-docs/test-utils-doc/dom.js +4 -0
  100. package/internal/api-docs/test-utils-doc/selectors.js +4 -0
  101. package/internal/base-component/get-data-attributes.d.ts +1 -0
  102. package/internal/base-component/get-data-attributes.js +12 -0
  103. package/internal/base-component/get-data-attributes.js.map +1 -0
  104. package/internal/base-component/use-base-component.d.ts +13 -0
  105. package/internal/base-component/use-base-component.js +18 -0
  106. package/internal/base-component/use-base-component.js.map +1 -0
  107. package/internal/base-component/use-telemetry.d.ts +2 -0
  108. package/internal/base-component/use-telemetry.js +8 -0
  109. package/internal/base-component/use-telemetry.js.map +1 -0
  110. package/internal/chart-styles.d.ts +88 -0
  111. package/internal/chart-styles.js +145 -0
  112. package/internal/chart-styles.js.map +1 -0
  113. package/internal/components/chart-legend/index.d.ts +14 -0
  114. package/internal/components/chart-legend/index.js +245 -0
  115. package/internal/components/chart-legend/index.js.map +1 -0
  116. package/internal/components/chart-legend/styles.css.js +22 -0
  117. package/internal/components/chart-legend/styles.scoped.css +233 -0
  118. package/internal/components/chart-legend/styles.selectors.js +23 -0
  119. package/internal/components/chart-legend/test-classes/styles.css.js +11 -0
  120. package/internal/components/chart-legend/test-classes/styles.scoped.css +12 -0
  121. package/internal/components/chart-legend/test-classes/styles.selectors.js +12 -0
  122. package/internal/components/chart-series-filter/index.d.ts +17 -0
  123. package/internal/components/chart-series-filter/index.js +14 -0
  124. package/internal/components/chart-series-filter/index.js.map +1 -0
  125. package/internal/components/interfaces.d.ts +17 -0
  126. package/internal/components/interfaces.js +4 -0
  127. package/internal/components/interfaces.js.map +1 -0
  128. package/internal/components/series-details/index.d.ts +23 -0
  129. package/internal/components/series-details/index.js +45 -0
  130. package/internal/components/series-details/index.js.map +1 -0
  131. package/internal/components/series-details/styles.css.js +22 -0
  132. package/internal/components/series-details/styles.scoped.css +150 -0
  133. package/internal/components/series-details/styles.selectors.js +23 -0
  134. package/internal/components/series-details/test-classes/styles.css.js +10 -0
  135. package/internal/components/series-details/test-classes/styles.scoped.css +11 -0
  136. package/internal/components/series-details/test-classes/styles.selectors.js +11 -0
  137. package/internal/components/series-marker/index.d.ts +8 -0
  138. package/internal/components/series-marker/index.js +45 -0
  139. package/internal/components/series-marker/index.js.map +1 -0
  140. package/internal/components/series-marker/interfaces.d.ts +1 -0
  141. package/internal/components/series-marker/interfaces.js +4 -0
  142. package/internal/components/series-marker/interfaces.js.map +1 -0
  143. package/internal/components/series-marker/render-marker.d.ts +3 -0
  144. package/internal/components/series-marker/render-marker.js +74 -0
  145. package/internal/components/series-marker/render-marker.js.map +1 -0
  146. package/internal/components/series-marker/styles.css.js +7 -0
  147. package/internal/components/series-marker/styles.scoped.css +55 -0
  148. package/internal/components/series-marker/styles.selectors.js +8 -0
  149. package/internal/environment.d.ts +4 -0
  150. package/internal/environment.js +5 -0
  151. package/internal/environment.json +7 -0
  152. package/internal/events/index.d.ts +23 -0
  153. package/internal/events/index.js +41 -0
  154. package/internal/events/index.js.map +1 -0
  155. package/internal/generated/styles/tokens.d.ts +756 -0
  156. package/internal/generated/styles/tokens.js +756 -0
  157. package/internal/generated/theming/index.cjs +12584 -0
  158. package/internal/generated/theming/index.cjs.d.ts +2399 -0
  159. package/internal/generated/theming/index.d.ts +2399 -0
  160. package/internal/generated/theming/index.js +12584 -0
  161. package/internal/manifest.json +3 -0
  162. package/internal/styles.css.js +6 -0
  163. package/internal/styles.scoped.css +13 -0
  164. package/internal/styles.selectors.js +7 -0
  165. package/internal/utils/apply-display-name.d.ts +1 -0
  166. package/internal/utils/apply-display-name.js +6 -0
  167. package/internal/utils/apply-display-name.js.map +1 -0
  168. package/internal/utils/async-store.d.ts +19 -0
  169. package/internal/utils/async-store.js +58 -0
  170. package/internal/utils/async-store.js.map +1 -0
  171. package/internal/utils/chart-series.d.ts +8 -0
  172. package/internal/utils/chart-series.js +11 -0
  173. package/internal/utils/chart-series.js.map +1 -0
  174. package/internal/utils/renderer-utils.d.ts +17 -0
  175. package/internal/utils/renderer-utils.js +95 -0
  176. package/internal/utils/renderer-utils.js.map +1 -0
  177. package/internal/utils/series-data.d.ts +2 -0
  178. package/internal/utils/series-data.js +8 -0
  179. package/internal/utils/series-data.js.map +1 -0
  180. package/internal/utils/test-i18n-provider.d.ts +8 -0
  181. package/internal/utils/test-i18n-provider.js +8 -0
  182. package/internal/utils/test-i18n-provider.js.map +1 -0
  183. package/internal/utils/use-previous.d.ts +4 -0
  184. package/internal/utils/use-previous.js +14 -0
  185. package/internal/utils/use-previous.js.map +1 -0
  186. package/internal/utils/utils.d.ts +16 -0
  187. package/internal/utils/utils.js +49 -0
  188. package/internal/utils/utils.js.map +1 -0
  189. package/internal-do-not-use/core-chart/index.d.ts +4 -0
  190. package/internal-do-not-use/core-chart/index.js +13 -0
  191. package/internal-do-not-use/core-chart/index.js.map +1 -0
  192. package/internal-do-not-use/core-legend/index.d.ts +2 -0
  193. package/internal-do-not-use/core-legend/index.js +11 -0
  194. package/internal-do-not-use/core-legend/index.js.map +1 -0
  195. package/package.json +106 -0
  196. package/pie-chart/chart-inner-area.d.ts +10 -0
  197. package/pie-chart/chart-inner-area.js +63 -0
  198. package/pie-chart/chart-inner-area.js.map +1 -0
  199. package/pie-chart/chart-pie-internal.d.ts +11 -0
  200. package/pie-chart/chart-pie-internal.js +103 -0
  201. package/pie-chart/chart-pie-internal.js.map +1 -0
  202. package/pie-chart/index.d.ts +5 -0
  203. package/pie-chart/index.js +48 -0
  204. package/pie-chart/index.js.map +1 -0
  205. package/pie-chart/interfaces.d.ts +101 -0
  206. package/pie-chart/interfaces.js +4 -0
  207. package/pie-chart/interfaces.js.map +1 -0
  208. package/pie-chart/test-classes/styles.css.js +8 -0
  209. package/pie-chart/test-classes/styles.scoped.css +9 -0
  210. package/pie-chart/test-classes/styles.selectors.js +9 -0
  211. package/test-utils/dom/cartesian-chart/index.d.ts +14 -0
  212. package/test-utils/dom/cartesian-chart/index.js +24 -0
  213. package/test-utils/dom/cartesian-chart/index.js.map +1 -0
  214. package/test-utils/dom/cartesian-chart/tooltip.d.ts +28 -0
  215. package/test-utils/dom/cartesian-chart/tooltip.js +48 -0
  216. package/test-utils/dom/cartesian-chart/tooltip.js.map +1 -0
  217. package/test-utils/dom/index.d.ts +46 -0
  218. package/test-utils/dom/index.js +35 -0
  219. package/test-utils/dom/index.js.map +1 -0
  220. package/test-utils/dom/internal/base.d.ts +93 -0
  221. package/test-utils/dom/internal/base.js +146 -0
  222. package/test-utils/dom/internal/base.js.map +1 -0
  223. package/test-utils/dom/internal/core.d.ts +14 -0
  224. package/test-utils/dom/internal/core.js +37 -0
  225. package/test-utils/dom/internal/core.js.map +1 -0
  226. package/test-utils/dom/pie-chart/index.d.ts +17 -0
  227. package/test-utils/dom/pie-chart/index.js +29 -0
  228. package/test-utils/dom/pie-chart/index.js.map +1 -0
  229. package/test-utils/selectors/cartesian-chart/index.d.ts +14 -0
  230. package/test-utils/selectors/cartesian-chart/index.js +24 -0
  231. package/test-utils/selectors/cartesian-chart/index.js.map +1 -0
  232. package/test-utils/selectors/cartesian-chart/tooltip.d.ts +28 -0
  233. package/test-utils/selectors/cartesian-chart/tooltip.js +48 -0
  234. package/test-utils/selectors/cartesian-chart/tooltip.js.map +1 -0
  235. package/test-utils/selectors/index.d.ts +46 -0
  236. package/test-utils/selectors/index.js +32 -0
  237. package/test-utils/selectors/index.js.map +1 -0
  238. package/test-utils/selectors/internal/base.d.ts +93 -0
  239. package/test-utils/selectors/internal/base.js +146 -0
  240. package/test-utils/selectors/internal/base.js.map +1 -0
  241. package/test-utils/selectors/internal/core.d.ts +14 -0
  242. package/test-utils/selectors/internal/core.js +37 -0
  243. package/test-utils/selectors/internal/core.js.map +1 -0
  244. package/test-utils/selectors/pie-chart/index.d.ts +17 -0
  245. package/test-utils/selectors/pie-chart/index.js +29 -0
  246. package/test-utils/selectors/pie-chart/index.js.map +1 -0
@@ -0,0 +1,7 @@
1
+ import { ChartAPI } from "../chart-api";
2
+ import { BaseI18nStrings, CoreChartProps } from "../interfaces";
3
+ export declare function ChartTooltip({ placement, size, getTooltipContent: getTooltipContentOverrides, api, i18nStrings, }: CoreChartProps.TooltipOptions & {
4
+ i18nStrings?: BaseI18nStrings;
5
+ getTooltipContent?: CoreChartProps.GetTooltipContent;
6
+ api: ChartAPI;
7
+ }): import("react/jsx-runtime").JSX.Element | null;
@@ -0,0 +1,183 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3
+ // SPDX-License-Identifier: Apache-2.0
4
+ import { useState } from "react";
5
+ import { warnOnce } from "@cloudscape-design/component-toolkit/internal";
6
+ import Box from "@cloudscape-design/components/box";
7
+ import { InternalChartTooltip } from "@cloudscape-design/components/internal/do-not-use/chart-tooltip";
8
+ import LiveRegion from "@cloudscape-design/components/live-region";
9
+ import ChartSeriesDetails from "../../internal/components/series-details";
10
+ import { useSelector } from "../../internal/utils/async-store";
11
+ import { getChartSeries } from "../../internal/utils/chart-series";
12
+ import { getFormatter } from "../formatters";
13
+ import { getPointColor, getSeriesColor, getSeriesId, getSeriesMarkerType, isXThreshold } from "../utils";
14
+ import styles from "../styles.css.js";
15
+ const MIN_VISIBLE_BLOCK_SIZE = 200;
16
+ export function ChartTooltip({ placement = "target", size, getTooltipContent: getTooltipContentOverrides, api, i18nStrings, }) {
17
+ var _a;
18
+ const [expandedSeries, setExpandedSeries] = useState({});
19
+ const tooltip = useSelector(api.tooltipStore, (s) => s);
20
+ if (!tooltip.visible || tooltip.group.length === 0) {
21
+ return null;
22
+ }
23
+ const chart = (_a = tooltip.group[0]) === null || _a === void 0 ? void 0 : _a.series.chart;
24
+ const renderers = getTooltipContentOverrides === null || getTooltipContentOverrides === void 0 ? void 0 : getTooltipContentOverrides({ point: tooltip.point, group: tooltip.group });
25
+ const getTrack = placement === "target" ? api.getTargetTrack : api.getGroupTrack;
26
+ const position = (() => {
27
+ if (placement === "target" || placement === "middle") {
28
+ return !chart.inverted ? "right" : "bottom";
29
+ }
30
+ else {
31
+ return !chart.inverted ? "bottom" : "right";
32
+ }
33
+ })();
34
+ const content = getTooltipContent(api, {
35
+ renderers,
36
+ point: tooltip.point,
37
+ group: tooltip.group,
38
+ expandedSeries,
39
+ setExpandedSeries,
40
+ });
41
+ if (!content) {
42
+ return null;
43
+ }
44
+ return (_jsx(InternalChartTooltip, { getTrack: getTrack, trackKey: getTrackKey(tooltip.point, tooltip.group), container: null, dismissButton: tooltip.pinned, dismissAriaLabel: i18nStrings === null || i18nStrings === void 0 ? void 0 : i18nStrings.detailPopoverDismissAriaLabel, onDismiss: api.onDismissTooltip, onMouseEnter: api.onMouseEnterTooltip, onMouseLeave: api.onMouseLeaveTooltip, title: content.header, footer: content.footer ? (_jsxs(_Fragment, { children: [_jsx("hr", { "aria-hidden": true }), content.footer] })) : null, size: size, position: position, minVisibleBlockSize: MIN_VISIBLE_BLOCK_SIZE, children: _jsx(LiveRegion, { children: content.body }) }));
45
+ }
46
+ function getTrackKey(point, group) {
47
+ const pointId = point && (point.options.id || point.options.name);
48
+ if (point && pointId) {
49
+ return `p-${pointId}-${point.x}-${point.y}`;
50
+ }
51
+ if (point) {
52
+ return `p-${point.x}-${point.y}`;
53
+ }
54
+ return `g_${group.length}_${group[0].x}`;
55
+ }
56
+ function getTooltipContent(api, props) {
57
+ if (props.point && props.point.series.type === "pie") {
58
+ return getTooltipContentPie(api, { ...props, point: props.point });
59
+ }
60
+ else if (props.group.length > 0 && props.group[0].series.type !== "pie") {
61
+ return getTooltipContentCartesian(api, props);
62
+ }
63
+ else {
64
+ return null;
65
+ }
66
+ }
67
+ function getTooltipContentCartesian(api, { point, group, expandedSeries, renderers = {}, setExpandedSeries, }) {
68
+ var _a, _b, _c, _d, _e;
69
+ // The cartesian tooltip might or might not have a selected point, but it always has a non-empty group.
70
+ // By design, every point of the group has the same x value.
71
+ const x = group[0].x;
72
+ const chart = group[0].series.chart;
73
+ const getSeriesMarker = (series) => api.renderMarker(getSeriesMarkerType(series), getSeriesColor(series), true);
74
+ const matchedItems = findTooltipSeriesItems(getChartSeries(chart.series), group);
75
+ const detailItems = matchedItems.map((item) => {
76
+ var _a, _b, _c;
77
+ const valueFormatter = getFormatter(item.point.series.yAxis);
78
+ const itemY = isXThreshold(item.point.series) ? null : ((_a = item.point.y) !== null && _a !== void 0 ? _a : null);
79
+ const customContent = renderers.point ? renderers.point({ item }) : undefined;
80
+ return {
81
+ key: (_b = customContent === null || customContent === void 0 ? void 0 : customContent.key) !== null && _b !== void 0 ? _b : item.point.series.name,
82
+ value: (_c = customContent === null || customContent === void 0 ? void 0 : customContent.value) !== null && _c !== void 0 ? _c : valueFormatter(itemY),
83
+ marker: getSeriesMarker(item.point.series),
84
+ subItems: customContent === null || customContent === void 0 ? void 0 : customContent.subItems,
85
+ expandableId: (customContent === null || customContent === void 0 ? void 0 : customContent.expandable) ? item.point.series.name : undefined,
86
+ highlighted: item.point.x === (point === null || point === void 0 ? void 0 : point.x) && item.point.y === (point === null || point === void 0 ? void 0 : point.y),
87
+ description: (customContent === null || customContent === void 0 ? void 0 : customContent.description) === undefined && item.errorRanges.length ? (_jsx(_Fragment, { children: item.errorRanges.map((errorBarPoint, index) => {
88
+ var _a, _b;
89
+ return (_jsxs("div", { className: styles["error-range"], children: [_jsx("span", { children: errorBarPoint.series.userOptions.name ? errorBarPoint.series.userOptions.name : "" }), _jsxs("span", { children: [valueFormatter((_a = errorBarPoint.options.low) !== null && _a !== void 0 ? _a : 0), " - ", valueFormatter((_b = errorBarPoint.options.high) !== null && _b !== void 0 ? _b : 0)] })] }, index));
90
+ }) })) : (customContent === null || customContent === void 0 ? void 0 : customContent.description),
91
+ };
92
+ });
93
+ // We only support cartesian charts with a single x axis.
94
+ const titleFormatter = getFormatter(chart.xAxis[0]);
95
+ const slotRenderProps = { x, items: matchedItems };
96
+ return {
97
+ header: (_b = (_a = renderers.header) === null || _a === void 0 ? void 0 : _a.call(renderers, slotRenderProps)) !== null && _b !== void 0 ? _b : titleFormatter(x),
98
+ body: (_d = (_c = renderers.body) === null || _c === void 0 ? void 0 : _c.call(renderers, slotRenderProps)) !== null && _d !== void 0 ? _d : (_jsx(ChartSeriesDetails, { details: detailItems, expandedSeries: expandedSeries[x], setExpandedState: (id, isExpanded) => {
99
+ setExpandedSeries((oldState) => {
100
+ const expandedSeriesInCurrentCoordinate = new Set(oldState[x]);
101
+ if (isExpanded) {
102
+ expandedSeriesInCurrentCoordinate.add(id);
103
+ }
104
+ else {
105
+ expandedSeriesInCurrentCoordinate.delete(id);
106
+ }
107
+ return { ...oldState, [x]: expandedSeriesInCurrentCoordinate };
108
+ });
109
+ } })),
110
+ footer: (_e = renderers.footer) === null || _e === void 0 ? void 0 : _e.call(renderers, slotRenderProps),
111
+ };
112
+ }
113
+ function getTooltipContentPie(api, { point, renderers = {} }) {
114
+ var _a, _b, _c, _d, _e, _f;
115
+ const tooltipDetails = { x: point.x, items: [{ point, errorRanges: [] }] };
116
+ return {
117
+ header: (_b = (_a = renderers.header) === null || _a === void 0 ? void 0 : _a.call(renderers, tooltipDetails)) !== null && _b !== void 0 ? _b : (_jsxs("div", { className: styles["tooltip-default-header"], children: [api.renderMarker(getSeriesMarkerType(point.series), getPointColor(point)), _jsx(Box, { variant: "span", fontWeight: "bold", children: point.name })] })),
118
+ body: (_d = (_c = renderers.body) === null || _c === void 0 ? void 0 : _c.call(renderers, tooltipDetails)) !== null && _d !== void 0 ? _d : (renderers.details ? (_jsx(ChartSeriesDetails, { details: renderers.details({ point }), compactList: true })) : (
119
+ // We expect all pie chart segments to have defined y values. We use y=0 as fallback
120
+ // because the property is optional in Highcharts types.
121
+ _jsx(ChartSeriesDetails, { details: [{ key: point.series.name, value: (_e = point.y) !== null && _e !== void 0 ? _e : 0 }] }))),
122
+ footer: (_f = renderers.footer) === null || _f === void 0 ? void 0 : _f.call(renderers, tooltipDetails),
123
+ };
124
+ }
125
+ function findTooltipSeriesItems(series, group) {
126
+ const seriesOrder = series.reduce((d, s, i) => d.set(s, i), new Map());
127
+ const getSeriesIndex = (s) => { var _a; return (_a = seriesOrder.get(s)) !== null && _a !== void 0 ? _a : -1; };
128
+ const seriesErrors = new Map();
129
+ const matchedSeries = new Set();
130
+ const matchedItems = [];
131
+ for (const point of group) {
132
+ // We only support errorbar series that are linked to other series. In tooltip content we add
133
+ // linked error bars to series detail slot.
134
+ if (point.series.type === "errorbar") {
135
+ if (point.series.linkedParent) {
136
+ addError(getSeriesId(point.series.linkedParent), point);
137
+ }
138
+ else {
139
+ warnOnce("chart-components", 'The `linkedTo` property of "errorbar" series is missing, or points to a series that does not exist.');
140
+ }
141
+ }
142
+ else {
143
+ addMatchedPoints(point);
144
+ }
145
+ }
146
+ function addError(seriesId, errorPoint) {
147
+ var _a;
148
+ if (errorPoint.options.low !== undefined && errorPoint.options.high !== undefined) {
149
+ const errorRanges = (_a = seriesErrors.get(seriesId)) !== null && _a !== void 0 ? _a : [];
150
+ errorRanges.push(errorPoint);
151
+ seriesErrors.set(seriesId, errorRanges);
152
+ }
153
+ }
154
+ function addMatchedPoints(point) {
155
+ if (!matchedSeries.has(point.series)) {
156
+ matchedSeries.add(point.series);
157
+ if (isXThreshold(point.series)) {
158
+ matchedItems.push({ point, errorRanges: [] });
159
+ }
160
+ else {
161
+ point.series.data
162
+ .filter((d) => d.x === point.x)
163
+ .sort((a, b) => { var _a, _b; return ((_a = a.y) !== null && _a !== void 0 ? _a : 0) - ((_b = b.y) !== null && _b !== void 0 ? _b : 0); })
164
+ .forEach((point) => matchedItems.push({ point, errorRanges: [] }));
165
+ }
166
+ }
167
+ }
168
+ return (matchedItems
169
+ // We sort matched items by series order. If there are multiple items that belong to the same series, we sort them by value.
170
+ .sort((i1, i2) => {
171
+ var _a, _b;
172
+ const s1 = getSeriesIndex(i1.point.series) - getSeriesIndex(i2.point.series);
173
+ return s1 || ((_a = i1.point.y) !== null && _a !== void 0 ? _a : 0) - ((_b = i2.point.y) !== null && _b !== void 0 ? _b : 0);
174
+ })
175
+ // For each series item we add linked error ranges, sorted by their respective series indices.
176
+ .map((item) => {
177
+ var _a;
178
+ const errorRanges = (_a = seriesErrors.get(getSeriesId(item.point.series))) !== null && _a !== void 0 ? _a : [];
179
+ const sortedErrorRanges = errorRanges.sort((i1, i2) => getSeriesIndex(i1.series) - getSeriesIndex(i2.series));
180
+ return { ...item, errorRanges: sortedErrorRanges };
181
+ }));
182
+ }
183
+ //# sourceMappingURL=core-tooltip.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core-tooltip.js","sourceRoot":"","sources":["../../../../src/core/components/core-tooltip.tsx"],"names":[],"mappings":";AAAA,qEAAqE;AACrE,sCAAsC;AAEtC,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEjC,OAAO,EAAE,QAAQ,EAAE,MAAM,+CAA+C,CAAC;AACzE,OAAO,GAAG,MAAM,mCAAmC,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,iEAAiE,CAAC;AACvG,OAAO,UAAU,MAAM,2CAA2C,CAAC;AAEnE,OAAO,kBAA6C,MAAM,0CAA0C,CAAC;AACrG,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAEnE,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,WAAW,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAEzG,OAAO,MAAM,MAAM,kBAAkB,CAAC;AAEtC,MAAM,sBAAsB,GAAG,GAAG,CAAC;AAoBnC,MAAM,UAAU,YAAY,CAAC,EAC3B,SAAS,GAAG,QAAQ,EACpB,IAAI,EACJ,iBAAiB,EAAE,0BAA0B,EAC7C,GAAG,EACH,WAAW,GAKZ;;IACC,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAsB,EAAE,CAAC,CAAC;IAC9E,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IACxD,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;QAClD,OAAO,IAAI,CAAC;KACb;IACD,MAAM,KAAK,GAAG,MAAA,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,0CAAE,MAAM,CAAC,KAAK,CAAC;IAC7C,MAAM,SAAS,GAAG,0BAA0B,aAA1B,0BAA0B,uBAA1B,0BAA0B,CAAG,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;IAC/F,MAAM,QAAQ,GAAG,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC;IACjF,MAAM,QAAQ,GAAG,CAAC,GAAG,EAAE;QACrB,IAAI,SAAS,KAAK,QAAQ,IAAI,SAAS,KAAK,QAAQ,EAAE;YACpD,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC;SAC7C;aAAM;YACL,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;SAC7C;IACH,CAAC,CAAC,EAAE,CAAC;IACL,MAAM,OAAO,GAAG,iBAAiB,CAAC,GAAG,EAAE;QACrC,SAAS;QACT,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,cAAc;QACd,iBAAiB;KAClB,CAAC,CAAC;IACH,IAAI,CAAC,OAAO,EAAE;QACZ,OAAO,IAAI,CAAC;KACb;IACD,OAAO,CACL,KAAC,oBAAoB,IACnB,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,EACnD,SAAS,EAAE,IAAI,EACf,aAAa,EAAE,OAAO,CAAC,MAAM,EAC7B,gBAAgB,EAAE,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,6BAA6B,EAC5D,SAAS,EAAE,GAAG,CAAC,gBAAgB,EAC/B,YAAY,EAAE,GAAG,CAAC,mBAAmB,EACrC,YAAY,EAAE,GAAG,CAAC,mBAAmB,EACrC,KAAK,EAAE,OAAO,CAAC,MAAM,EACrB,MAAM,EACJ,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CACf,8BACE,4BAAiB,IAAI,GAAI,EACxB,OAAO,CAAC,MAAM,IACd,CACJ,CAAC,CAAC,CAAC,IAAI,EAEV,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,QAAQ,EAClB,mBAAmB,EAAE,sBAAsB,YAE3C,KAAC,UAAU,cAAE,OAAO,CAAC,IAAI,GAAc,GAClB,CACxB,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,KAA8B,EAAE,KAAkC;IACrF,MAAM,OAAO,GAAG,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAClE,IAAI,KAAK,IAAI,OAAO,EAAE;QACpB,OAAO,KAAK,OAAO,IAAI,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,EAAE,CAAC;KAC7C;IACD,IAAI,KAAK,EAAE;QACT,OAAO,KAAK,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,EAAE,CAAC;KAClC;IACD,OAAO,KAAK,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC3C,CAAC;AAED,SAAS,iBAAiB,CACxB,GAAa,EACb,KAE4B;IAE5B,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,KAAK,EAAE;QACpD,OAAO,oBAAoB,CAAC,GAAG,EAAE,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;KACpE;SAAM,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,KAAK,KAAK,EAAE;QACzE,OAAO,0BAA0B,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;KAC/C;SAAM;QACL,OAAO,IAAI,CAAC;KACb;AACH,CAAC;AAED,SAAS,0BAA0B,CACjC,GAAa,EACb,EACE,KAAK,EACL,KAAK,EACL,cAAc,EACd,SAAS,GAAG,EAAE,EACd,iBAAiB,GAGS;;IAE5B,uGAAuG;IACvG,4DAA4D;IAC5D,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrB,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;IACpC,MAAM,eAAe,GAAG,CAAC,MAAyB,EAAE,EAAE,CACpD,GAAG,CAAC,YAAY,CAAC,mBAAmB,CAAC,MAAM,CAAC,EAAE,cAAc,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC;IAC9E,MAAM,YAAY,GAAG,sBAAsB,CAAC,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,CAAC;IACjF,MAAM,WAAW,GAA4B,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;;QACrE,MAAM,cAAc,GAAG,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC7D,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAA,IAAI,CAAC,KAAK,CAAC,CAAC,mCAAI,IAAI,CAAC,CAAC;QAC9E,MAAM,aAAa,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC9E,OAAO;YACL,GAAG,EAAE,MAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,GAAG,mCAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI;YACjD,KAAK,EAAE,MAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,KAAK,mCAAI,cAAc,CAAC,KAAK,CAAC;YACpD,MAAM,EAAE,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;YAC1C,QAAQ,EAAE,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,QAAQ;YACjC,YAAY,EAAE,CAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,UAAU,EAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;YAC5E,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,MAAK,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,CAAC,CAAA,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,MAAK,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,CAAC,CAAA;YACnE,WAAW,EACT,CAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,WAAW,MAAK,SAAS,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CACpE,4BACG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,aAAa,EAAE,KAAK,EAAE,EAAE;;oBAAC,OAAA,CAC9C,eAAiB,SAAS,EAAE,MAAM,CAAC,aAAa,CAAC,aAC/C,yBAAO,aAAa,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAQ,EACjG,2BACG,cAAc,CAAC,MAAA,aAAa,CAAC,OAAO,CAAC,GAAG,mCAAI,CAAC,CAAC,SAAK,cAAc,CAAC,MAAA,aAAa,CAAC,OAAO,CAAC,IAAI,mCAAI,CAAC,CAAC,IAC9F,KAJC,KAAK,CAKT,CACP,CAAA;iBAAA,CAAC,GACD,CACJ,CAAC,CAAC,CAAC,CACF,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,WAAW,CAC3B;SACJ,CAAC;IACJ,CAAC,CAAC,CAAC;IACH,yDAAyD;IACzD,MAAM,cAAc,GAAG,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACpD,MAAM,eAAe,GAAoC,EAAE,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;IACpF,OAAO;QACL,MAAM,EAAE,MAAA,MAAA,SAAS,CAAC,MAAM,0DAAG,eAAe,CAAC,mCAAI,cAAc,CAAC,CAAC,CAAC;QAChE,IAAI,EAAE,MAAA,MAAA,SAAS,CAAC,IAAI,0DAAG,eAAe,CAAC,mCAAI,CACzC,KAAC,kBAAkB,IACjB,OAAO,EAAE,WAAW,EACpB,cAAc,EAAE,cAAc,CAAC,CAAC,CAAC,EACjC,gBAAgB,EAAE,CAAC,EAAE,EAAE,UAAU,EAAE,EAAE;gBACnC,iBAAiB,CAAC,CAAC,QAAQ,EAAE,EAAE;oBAC7B,MAAM,iCAAiC,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC/D,IAAI,UAAU,EAAE;wBACd,iCAAiC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;qBAC3C;yBAAM;wBACL,iCAAiC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;qBAC9C;oBACD,OAAO,EAAE,GAAG,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,iCAAiC,EAAE,CAAC;gBACjE,CAAC,CAAC,CAAC;YACL,CAAC,GACD,CACH;QACD,MAAM,EAAE,MAAA,SAAS,CAAC,MAAM,0DAAG,eAAe,CAAC;KAC5C,CAAC;AACJ,CAAC;AAED,SAAS,oBAAoB,CAC3B,GAAa,EACb,EAAE,KAAK,EAAE,SAAS,GAAG,EAAE,EAAuF;;IAE9G,MAAM,cAAc,GAAoC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;IAC5G,OAAO;QACL,MAAM,EAAE,MAAA,MAAA,SAAS,CAAC,MAAM,0DAAG,cAAc,CAAC,mCAAI,CAC5C,eAAK,SAAS,EAAE,MAAM,CAAC,wBAAwB,CAAC,aAC7C,GAAG,CAAC,YAAY,CAAC,mBAAmB,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC,EAC1E,KAAC,GAAG,IAAC,OAAO,EAAC,MAAM,EAAC,UAAU,EAAC,MAAM,YAClC,KAAK,CAAC,IAAI,GACP,IACF,CACP;QACD,IAAI,EACF,MAAA,MAAA,SAAS,CAAC,IAAI,0DAAG,cAAc,CAAC,mCAChC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CACnB,KAAC,kBAAkB,IAAC,OAAO,EAAE,SAAS,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,WAAW,EAAE,IAAI,GAAI,CACjF,CAAC,CAAC,CAAC;QACF,oFAAoF;QACpF,wDAAwD;QACxD,KAAC,kBAAkB,IAAC,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,MAAA,KAAK,CAAC,CAAC,mCAAI,CAAC,EAAE,CAAC,GAAI,CACnF,CAAC;QACJ,MAAM,EAAE,MAAA,SAAS,CAAC,MAAM,0DAAG,cAAc,CAAC;KAC3C,CAAC;AACJ,CAAC;AAED,SAAS,sBAAsB,CAC7B,MAAoC,EACpC,KAAkC;IAElC,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,GAAG,EAA6B,CAAC,CAAC;IAClG,MAAM,cAAc,GAAG,CAAC,CAAoB,EAAE,EAAE,WAAC,OAAA,MAAA,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,mCAAI,CAAC,CAAC,CAAA,EAAA,CAAC;IAC1E,MAAM,YAAY,GAAG,IAAI,GAAG,EAA8B,CAAC;IAC3D,MAAM,aAAa,GAAG,IAAI,GAAG,EAAqB,CAAC;IACnD,MAAM,YAAY,GAAkB,EAAE,CAAC;IACvC,KAAK,MAAM,KAAK,IAAI,KAAK,EAAE;QACzB,6FAA6F;QAC7F,2CAA2C;QAC3C,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,UAAU,EAAE;YACpC,IAAI,KAAK,CAAC,MAAM,CAAC,YAAY,EAAE;gBAC7B,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,KAAK,CAAC,CAAC;aACzD;iBAAM;gBACL,QAAQ,CACN,kBAAkB,EAClB,qGAAqG,CACtG,CAAC;aACH;SACF;aAAM;YACL,gBAAgB,CAAC,KAAK,CAAC,CAAC;SACzB;KACF;IACD,SAAS,QAAQ,CAAC,QAAgB,EAAE,UAA4B;;QAC9D,IAAI,UAAU,CAAC,OAAO,CAAC,GAAG,KAAK,SAAS,IAAI,UAAU,CAAC,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE;YACjF,MAAM,WAAW,GAAG,MAAA,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,mCAAI,EAAE,CAAC;YACrD,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC7B,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;SACzC;IACH,CAAC;IACD,SAAS,gBAAgB,CAAC,KAAuB;QAC/C,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;YACpC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAChC,IAAI,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;gBAC9B,YAAY,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC;aAC/C;iBAAM;gBACL,KAAK,CAAC,MAAM,CAAC,IAAI;qBACd,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC;qBAC9B,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,eAAC,OAAA,CAAC,MAAA,CAAC,CAAC,CAAC,mCAAI,CAAC,CAAC,GAAG,CAAC,MAAA,CAAC,CAAC,CAAC,mCAAI,CAAC,CAAC,CAAA,EAAA,CAAC;qBACvC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;aACtE;SACF;IACH,CAAC;IACD,OAAO,CACL,YAAY;QACV,4HAA4H;SAC3H,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE;;QACf,MAAM,EAAE,GAAG,cAAc,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,cAAc,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC7E,OAAO,EAAE,IAAI,CAAC,MAAA,EAAE,CAAC,KAAK,CAAC,CAAC,mCAAI,CAAC,CAAC,GAAG,CAAC,MAAA,EAAE,CAAC,KAAK,CAAC,CAAC,mCAAI,CAAC,CAAC,CAAC;IACrD,CAAC,CAAC;QACF,8FAA8F;SAC7F,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;;QACZ,MAAM,WAAW,GAAG,MAAA,YAAY,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,mCAAI,EAAE,CAAC;QAC3E,MAAM,iBAAiB,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,cAAc,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,cAAc,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;QAC9G,OAAO,EAAE,GAAG,IAAI,EAAE,WAAW,EAAE,iBAAiB,EAAE,CAAC;IACrD,CAAC,CAAC,CACL,CAAC;AACJ,CAAC","sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { useState } from \"react\";\n\nimport { warnOnce } from \"@cloudscape-design/component-toolkit/internal\";\nimport Box from \"@cloudscape-design/components/box\";\nimport { InternalChartTooltip } from \"@cloudscape-design/components/internal/do-not-use/chart-tooltip\";\nimport LiveRegion from \"@cloudscape-design/components/live-region\";\n\nimport ChartSeriesDetails, { ChartSeriesDetailItem } from \"../../internal/components/series-details\";\nimport { useSelector } from \"../../internal/utils/async-store\";\nimport { getChartSeries } from \"../../internal/utils/chart-series\";\nimport { ChartAPI } from \"../chart-api\";\nimport { getFormatter } from \"../formatters\";\nimport { BaseI18nStrings, CoreChartProps } from \"../interfaces\";\nimport { getPointColor, getSeriesColor, getSeriesId, getSeriesMarkerType, isXThreshold } from \"../utils\";\n\nimport styles from \"../styles.css.js\";\n\nconst MIN_VISIBLE_BLOCK_SIZE = 200;\n\ntype ExpandedSeriesState = Record<string, Set<string>>;\n\ninterface ExpandedSeriesStateProps {\n expandedSeries: ExpandedSeriesState;\n setExpandedSeries: (cb: (state: ExpandedSeriesState) => ExpandedSeriesState) => void;\n}\n\ninterface RenderedTooltipContent {\n header: React.ReactNode;\n body: React.ReactNode;\n footer: React.ReactNode;\n}\n\ninterface MatchedItem {\n point: Highcharts.Point;\n errorRanges: Highcharts.Point[];\n}\n\nexport function ChartTooltip({\n placement = \"target\",\n size,\n getTooltipContent: getTooltipContentOverrides,\n api,\n i18nStrings,\n}: CoreChartProps.TooltipOptions & {\n i18nStrings?: BaseI18nStrings;\n getTooltipContent?: CoreChartProps.GetTooltipContent;\n api: ChartAPI;\n}) {\n const [expandedSeries, setExpandedSeries] = useState<ExpandedSeriesState>({});\n const tooltip = useSelector(api.tooltipStore, (s) => s);\n if (!tooltip.visible || tooltip.group.length === 0) {\n return null;\n }\n const chart = tooltip.group[0]?.series.chart;\n const renderers = getTooltipContentOverrides?.({ point: tooltip.point, group: tooltip.group });\n const getTrack = placement === \"target\" ? api.getTargetTrack : api.getGroupTrack;\n const position = (() => {\n if (placement === \"target\" || placement === \"middle\") {\n return !chart.inverted ? \"right\" : \"bottom\";\n } else {\n return !chart.inverted ? \"bottom\" : \"right\";\n }\n })();\n const content = getTooltipContent(api, {\n renderers,\n point: tooltip.point,\n group: tooltip.group,\n expandedSeries,\n setExpandedSeries,\n });\n if (!content) {\n return null;\n }\n return (\n <InternalChartTooltip\n getTrack={getTrack}\n trackKey={getTrackKey(tooltip.point, tooltip.group)}\n container={null}\n dismissButton={tooltip.pinned}\n dismissAriaLabel={i18nStrings?.detailPopoverDismissAriaLabel}\n onDismiss={api.onDismissTooltip}\n onMouseEnter={api.onMouseEnterTooltip}\n onMouseLeave={api.onMouseLeaveTooltip}\n title={content.header}\n footer={\n content.footer ? (\n <>\n <hr aria-hidden={true} />\n {content.footer}\n </>\n ) : null\n }\n size={size}\n position={position}\n minVisibleBlockSize={MIN_VISIBLE_BLOCK_SIZE}\n >\n <LiveRegion>{content.body}</LiveRegion>\n </InternalChartTooltip>\n );\n}\n\nfunction getTrackKey(point: null | Highcharts.Point, group: readonly Highcharts.Point[]) {\n const pointId = point && (point.options.id || point.options.name);\n if (point && pointId) {\n return `p-${pointId}-${point.x}-${point.y}`;\n }\n if (point) {\n return `p-${point.x}-${point.y}`;\n }\n return `g_${group.length}_${group[0].x}`;\n}\n\nfunction getTooltipContent(\n api: ChartAPI,\n props: CoreChartProps.GetTooltipContentProps & {\n renderers?: CoreChartProps.TooltipContentRenderer;\n } & ExpandedSeriesStateProps,\n): null | RenderedTooltipContent {\n if (props.point && props.point.series.type === \"pie\") {\n return getTooltipContentPie(api, { ...props, point: props.point });\n } else if (props.group.length > 0 && props.group[0].series.type !== \"pie\") {\n return getTooltipContentCartesian(api, props);\n } else {\n return null;\n }\n}\n\nfunction getTooltipContentCartesian(\n api: ChartAPI,\n {\n point,\n group,\n expandedSeries,\n renderers = {},\n setExpandedSeries,\n }: CoreChartProps.GetTooltipContentProps & {\n renderers?: CoreChartProps.TooltipContentRenderer;\n } & ExpandedSeriesStateProps,\n): RenderedTooltipContent {\n // The cartesian tooltip might or might not have a selected point, but it always has a non-empty group.\n // By design, every point of the group has the same x value.\n const x = group[0].x;\n const chart = group[0].series.chart;\n const getSeriesMarker = (series: Highcharts.Series) =>\n api.renderMarker(getSeriesMarkerType(series), getSeriesColor(series), true);\n const matchedItems = findTooltipSeriesItems(getChartSeries(chart.series), group);\n const detailItems: ChartSeriesDetailItem[] = matchedItems.map((item) => {\n const valueFormatter = getFormatter(item.point.series.yAxis);\n const itemY = isXThreshold(item.point.series) ? null : (item.point.y ?? null);\n const customContent = renderers.point ? renderers.point({ item }) : undefined;\n return {\n key: customContent?.key ?? item.point.series.name,\n value: customContent?.value ?? valueFormatter(itemY),\n marker: getSeriesMarker(item.point.series),\n subItems: customContent?.subItems,\n expandableId: customContent?.expandable ? item.point.series.name : undefined,\n highlighted: item.point.x === point?.x && item.point.y === point?.y,\n description:\n customContent?.description === undefined && item.errorRanges.length ? (\n <>\n {item.errorRanges.map((errorBarPoint, index) => (\n <div key={index} className={styles[\"error-range\"]}>\n <span>{errorBarPoint.series.userOptions.name ? errorBarPoint.series.userOptions.name : \"\"}</span>\n <span>\n {valueFormatter(errorBarPoint.options.low ?? 0)} - {valueFormatter(errorBarPoint.options.high ?? 0)}\n </span>\n </div>\n ))}\n </>\n ) : (\n customContent?.description\n ),\n };\n });\n // We only support cartesian charts with a single x axis.\n const titleFormatter = getFormatter(chart.xAxis[0]);\n const slotRenderProps: CoreChartProps.TooltipSlotProps = { x, items: matchedItems };\n return {\n header: renderers.header?.(slotRenderProps) ?? titleFormatter(x),\n body: renderers.body?.(slotRenderProps) ?? (\n <ChartSeriesDetails\n details={detailItems}\n expandedSeries={expandedSeries[x]}\n setExpandedState={(id, isExpanded) => {\n setExpandedSeries((oldState) => {\n const expandedSeriesInCurrentCoordinate = new Set(oldState[x]);\n if (isExpanded) {\n expandedSeriesInCurrentCoordinate.add(id);\n } else {\n expandedSeriesInCurrentCoordinate.delete(id);\n }\n return { ...oldState, [x]: expandedSeriesInCurrentCoordinate };\n });\n }}\n />\n ),\n footer: renderers.footer?.(slotRenderProps),\n };\n}\n\nfunction getTooltipContentPie(\n api: ChartAPI,\n { point, renderers = {} }: { point: Highcharts.Point } & { renderers?: CoreChartProps.TooltipContentRenderer },\n): RenderedTooltipContent {\n const tooltipDetails: CoreChartProps.TooltipSlotProps = { x: point.x, items: [{ point, errorRanges: [] }] };\n return {\n header: renderers.header?.(tooltipDetails) ?? (\n <div className={styles[\"tooltip-default-header\"]}>\n {api.renderMarker(getSeriesMarkerType(point.series), getPointColor(point))}\n <Box variant=\"span\" fontWeight=\"bold\">\n {point.name}\n </Box>\n </div>\n ),\n body:\n renderers.body?.(tooltipDetails) ??\n (renderers.details ? (\n <ChartSeriesDetails details={renderers.details({ point })} compactList={true} />\n ) : (\n // We expect all pie chart segments to have defined y values. We use y=0 as fallback\n // because the property is optional in Highcharts types.\n <ChartSeriesDetails details={[{ key: point.series.name, value: point.y ?? 0 }]} />\n )),\n footer: renderers.footer?.(tooltipDetails),\n };\n}\n\nfunction findTooltipSeriesItems(\n series: readonly Highcharts.Series[],\n group: readonly Highcharts.Point[],\n): MatchedItem[] {\n const seriesOrder = series.reduce((d, s, i) => d.set(s, i), new Map<Highcharts.Series, number>());\n const getSeriesIndex = (s: Highcharts.Series) => seriesOrder.get(s) ?? -1;\n const seriesErrors = new Map<string, Highcharts.Point[]>();\n const matchedSeries = new Set<Highcharts.Series>();\n const matchedItems: MatchedItem[] = [];\n for (const point of group) {\n // We only support errorbar series that are linked to other series. In tooltip content we add\n // linked error bars to series detail slot.\n if (point.series.type === \"errorbar\") {\n if (point.series.linkedParent) {\n addError(getSeriesId(point.series.linkedParent), point);\n } else {\n warnOnce(\n \"chart-components\",\n 'The `linkedTo` property of \"errorbar\" series is missing, or points to a series that does not exist.',\n );\n }\n } else {\n addMatchedPoints(point);\n }\n }\n function addError(seriesId: string, errorPoint: Highcharts.Point) {\n if (errorPoint.options.low !== undefined && errorPoint.options.high !== undefined) {\n const errorRanges = seriesErrors.get(seriesId) ?? [];\n errorRanges.push(errorPoint);\n seriesErrors.set(seriesId, errorRanges);\n }\n }\n function addMatchedPoints(point: Highcharts.Point) {\n if (!matchedSeries.has(point.series)) {\n matchedSeries.add(point.series);\n if (isXThreshold(point.series)) {\n matchedItems.push({ point, errorRanges: [] });\n } else {\n point.series.data\n .filter((d) => d.x === point.x)\n .sort((a, b) => (a.y ?? 0) - (b.y ?? 0))\n .forEach((point) => matchedItems.push({ point, errorRanges: [] }));\n }\n }\n }\n return (\n matchedItems\n // We sort matched items by series order. If there are multiple items that belong to the same series, we sort them by value.\n .sort((i1, i2) => {\n const s1 = getSeriesIndex(i1.point.series) - getSeriesIndex(i2.point.series);\n return s1 || (i1.point.y ?? 0) - (i2.point.y ?? 0);\n })\n // For each series item we add linked error ranges, sorted by their respective series indices.\n .map((item) => {\n const errorRanges = seriesErrors.get(getSeriesId(item.point.series)) ?? [];\n const sortedErrorRanges = errorRanges.sort((i1, i2) => getSeriesIndex(i1.series) - getSeriesIndex(i2.series));\n return { ...item, errorRanges: sortedErrorRanges };\n })\n );\n}\n"]}
@@ -0,0 +1,5 @@
1
+ import { ChartAPI } from "../chart-api";
2
+ export declare function VerticalAxisTitle({ api, inverted }: {
3
+ api: ChartAPI;
4
+ inverted: boolean;
5
+ }): import("react/jsx-runtime").JSX.Element | null;
@@ -0,0 +1,15 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3
+ // SPDX-License-Identifier: Apache-2.0
4
+ import clsx from "clsx";
5
+ import { useSelector } from "../../internal/utils/async-store";
6
+ import styles from "../styles.css.js";
7
+ import testClasses from "../test-classes/styles.css.js";
8
+ export function VerticalAxisTitle({ api, inverted }) {
9
+ const titles = useSelector(api.axisTitlesStore, (s) => s.verticalAxesTitles).filter(Boolean);
10
+ if (titles.length === 0) {
11
+ return null;
12
+ }
13
+ return (_jsx("div", { className: clsx(testClasses["axis-vertical-title"], inverted ? testClasses["axis-x-title"] : testClasses["axis-y-title"], styles["axis-vertical-title"]), "aria-hidden": true, children: titles.map((text, index) => (_jsx("span", { className: styles["axis-vertical-title-item"], children: text }, index))) }));
14
+ }
15
+ //# sourceMappingURL=core-vertical-axis-title.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core-vertical-axis-title.js","sourceRoot":"","sources":["../../../../src/core/components/core-vertical-axis-title.tsx"],"names":[],"mappings":";AAAA,qEAAqE;AACrE,sCAAsC;AAEtC,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAG/D,OAAO,MAAM,MAAM,kBAAkB,CAAC;AACtC,OAAO,WAAW,MAAM,+BAA+B,CAAC;AAExD,MAAM,UAAU,iBAAiB,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAwC;IACvF,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC7F,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;QACvB,OAAO,IAAI,CAAC;KACb;IACD,OAAO,CACL,cACE,SAAS,EAAE,IAAI,CACb,WAAW,CAAC,qBAAqB,CAAC,EAClC,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,cAAc,CAAC,EACpE,MAAM,CAAC,qBAAqB,CAAC,CAC9B,iBAGY,IAAI,YAEhB,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAC3B,eAAkB,SAAS,EAAE,MAAM,CAAC,0BAA0B,CAAC,YAC5D,IAAI,IADI,KAAK,CAET,CACR,CAAC,GACE,CACP,CAAC;AACJ,CAAC","sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport clsx from \"clsx\";\n\nimport { useSelector } from \"../../internal/utils/async-store\";\nimport { ChartAPI } from \"../chart-api\";\n\nimport styles from \"../styles.css.js\";\nimport testClasses from \"../test-classes/styles.css.js\";\n\nexport function VerticalAxisTitle({ api, inverted }: { api: ChartAPI; inverted: boolean }) {\n const titles = useSelector(api.axisTitlesStore, (s) => s.verticalAxesTitles).filter(Boolean);\n if (titles.length === 0) {\n return null;\n }\n return (\n <div\n className={clsx(\n testClasses[\"axis-vertical-title\"],\n inverted ? testClasses[\"axis-x-title\"] : testClasses[\"axis-y-title\"],\n styles[\"axis-vertical-title\"],\n )}\n // The vertical axis label is still rendered by Highcharts and accessible by screen-readers, yet\n // not visible on the screen. We make this one ARIA-hidden to avoid duplication.\n aria-hidden={true}\n >\n {titles.map((text, index) => (\n <span key={index} className={styles[\"axis-vertical-title-item\"]}>\n {text}\n </span>\n ))}\n </div>\n );\n}\n"]}
@@ -0,0 +1,2 @@
1
+ import type Highcharts from "highcharts";
2
+ export declare function getFormatter(axis?: Highcharts.Axis): (value: unknown) => string;
@@ -0,0 +1,113 @@
1
+ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ // SPDX-License-Identifier: Apache-2.0
3
+ // Takes value formatter from the axis options (InternalXAxisOptions.valueFormatter or InternalYAxisOptions.valueFormatter),
4
+ // or provides a default formatter for numeric and datetime values.
5
+ export function getFormatter(axis) {
6
+ return (value) => {
7
+ var _a, _b;
8
+ if (typeof value === "string") {
9
+ return value;
10
+ }
11
+ if (typeof value !== "number") {
12
+ return "";
13
+ }
14
+ if (!axis) {
15
+ return `${value}`;
16
+ }
17
+ if (axis.options.type === "category") {
18
+ return (_b = (_a = axis.categories) === null || _a === void 0 ? void 0 : _a[value]) !== null && _b !== void 0 ? _b : value.toString();
19
+ }
20
+ const axisOptions = axis.userOptions;
21
+ if (axisOptions.valueFormatter) {
22
+ return axisOptions.valueFormatter(value);
23
+ }
24
+ if (axis.options.type === "datetime") {
25
+ const extremes = axis.getExtremes();
26
+ const formatter = getDefaultDatetimeFormatter([extremes.dataMin, extremes.dataMax]);
27
+ return formatter(value);
28
+ }
29
+ return numberFormatter(value);
30
+ };
31
+ }
32
+ function getDefaultDatetimeFormatter(extremes) {
33
+ const second = 1000;
34
+ const minute = 60 * second;
35
+ const hour = 60 * minute;
36
+ const day = 24 * hour;
37
+ const month = 30 * day;
38
+ const year = 365 * day;
39
+ if (extremes[1] - extremes[0] > 5 * year) {
40
+ return yearFormatter;
41
+ }
42
+ if (extremes[1] - extremes[0] > 2 * month) {
43
+ return monthFormatter;
44
+ }
45
+ if (extremes[1] - extremes[0] > 3 * day) {
46
+ return dayFormatter;
47
+ }
48
+ if (extremes[1] - extremes[0] > 12 * hour) {
49
+ return hourFormatter;
50
+ }
51
+ if (extremes[1] - extremes[0] > 3 * hour) {
52
+ return minuteFormatter;
53
+ }
54
+ return secondFormatter;
55
+ }
56
+ function yearFormatter(value) {
57
+ return new Date(value).toLocaleDateString("en-US", {
58
+ year: "numeric",
59
+ });
60
+ }
61
+ function monthFormatter(value) {
62
+ return new Date(value).toLocaleDateString("en-US", {
63
+ year: "numeric",
64
+ month: "short",
65
+ });
66
+ }
67
+ function dayFormatter(value) {
68
+ return new Date(value).toLocaleDateString("en-US", {
69
+ month: "short",
70
+ day: "numeric",
71
+ });
72
+ }
73
+ function hourFormatter(value) {
74
+ return new Date(value).toLocaleDateString("en-US", {
75
+ month: "short",
76
+ day: "numeric",
77
+ hour: "numeric",
78
+ });
79
+ }
80
+ function minuteFormatter(value) {
81
+ return new Date(value).toLocaleDateString("en-US", {
82
+ hour: "numeric",
83
+ minute: "numeric",
84
+ });
85
+ }
86
+ function secondFormatter(value) {
87
+ return new Date(value).toLocaleDateString("en-US", {
88
+ hour: "numeric",
89
+ minute: "numeric",
90
+ second: "numeric",
91
+ });
92
+ }
93
+ function numberFormatter(value) {
94
+ const format = (num) => parseFloat(num.toFixed(2)).toString(); // trims unnecessary decimals
95
+ const absValue = Math.abs(value);
96
+ if (absValue === 0) {
97
+ return "0";
98
+ }
99
+ if (absValue < 0.01) {
100
+ return value.toExponential(0);
101
+ }
102
+ if (absValue >= 1e9) {
103
+ return format(value / 1e9) + "G";
104
+ }
105
+ if (absValue >= 1e6) {
106
+ return format(value / 1e6) + "M";
107
+ }
108
+ if (absValue >= 1e3) {
109
+ return format(value / 1e3) + "K";
110
+ }
111
+ return format(value);
112
+ }
113
+ //# sourceMappingURL=formatters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatters.js","sourceRoot":"","sources":["../../../src/core/formatters.tsx"],"names":[],"mappings":"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","sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type Highcharts from \"highcharts\";\n\nimport { CoreChartProps } from \"./interfaces\";\n\n// Takes value formatter from the axis options (InternalXAxisOptions.valueFormatter or InternalYAxisOptions.valueFormatter),\n// or provides a default formatter for numeric and datetime values.\nexport function getFormatter(axis?: Highcharts.Axis) {\n return (value: unknown): string => {\n if (typeof value === \"string\") {\n return value;\n }\n if (typeof value !== \"number\") {\n return \"\";\n }\n if (!axis) {\n return `${value}`;\n }\n if (axis.options.type === \"category\") {\n return axis.categories?.[value] ?? value.toString();\n }\n const axisOptions = axis.userOptions as CoreChartProps.XAxisOptions | CoreChartProps.YAxisOptions;\n if (axisOptions.valueFormatter) {\n return axisOptions.valueFormatter(value);\n }\n if (axis.options.type === \"datetime\") {\n const extremes = axis.getExtremes();\n const formatter = getDefaultDatetimeFormatter([extremes.dataMin, extremes.dataMax]);\n return formatter(value);\n }\n return numberFormatter(value);\n };\n}\n\nfunction getDefaultDatetimeFormatter(extremes: [number, number]): (value: number) => string {\n const second = 1000;\n const minute = 60 * second;\n const hour = 60 * minute;\n const day = 24 * hour;\n const month = 30 * day;\n const year = 365 * day;\n if (extremes[1] - extremes[0] > 5 * year) {\n return yearFormatter;\n }\n if (extremes[1] - extremes[0] > 2 * month) {\n return monthFormatter;\n }\n if (extremes[1] - extremes[0] > 3 * day) {\n return dayFormatter;\n }\n if (extremes[1] - extremes[0] > 12 * hour) {\n return hourFormatter;\n }\n if (extremes[1] - extremes[0] > 3 * hour) {\n return minuteFormatter;\n }\n return secondFormatter;\n}\n\nfunction yearFormatter(value: number) {\n return new Date(value).toLocaleDateString(\"en-US\", {\n year: \"numeric\",\n });\n}\n\nfunction monthFormatter(value: number) {\n return new Date(value).toLocaleDateString(\"en-US\", {\n year: \"numeric\",\n month: \"short\",\n });\n}\n\nfunction dayFormatter(value: number) {\n return new Date(value).toLocaleDateString(\"en-US\", {\n month: \"short\",\n day: \"numeric\",\n });\n}\n\nfunction hourFormatter(value: number) {\n return new Date(value).toLocaleDateString(\"en-US\", {\n month: \"short\",\n day: \"numeric\",\n hour: \"numeric\",\n });\n}\n\nfunction minuteFormatter(value: number) {\n return new Date(value).toLocaleDateString(\"en-US\", {\n hour: \"numeric\",\n minute: \"numeric\",\n });\n}\n\nfunction secondFormatter(value: number) {\n return new Date(value).toLocaleDateString(\"en-US\", {\n hour: \"numeric\",\n minute: \"numeric\",\n second: \"numeric\",\n });\n}\n\nfunction numberFormatter(value: number): string {\n const format = (num: number) => parseFloat(num.toFixed(2)).toString(); // trims unnecessary decimals\n\n const absValue = Math.abs(value);\n\n if (absValue === 0) {\n return \"0\";\n }\n\n if (absValue < 0.01) {\n return value.toExponential(0);\n }\n\n if (absValue >= 1e9) {\n return format(value / 1e9) + \"G\";\n }\n\n if (absValue >= 1e6) {\n return format(value / 1e6) + \"M\";\n }\n\n if (absValue >= 1e3) {\n return format(value / 1e3) + \"K\";\n }\n\n return format(value);\n}\n"]}
@@ -0,0 +1,21 @@
1
+ import { CoreChartProps } from "./interfaces";
2
+ export interface ChartLabels {
3
+ chartLabel?: string;
4
+ chartDescription?: string;
5
+ chartContainerLabel?: string;
6
+ chartXAxisLabel?: string;
7
+ chartYAxisLabel?: string;
8
+ chartSegmentLabel?: string;
9
+ }
10
+ export declare function useChartI18n({ ariaLabel, ariaDescription, i18nStrings, }: {
11
+ ariaLabel?: string;
12
+ ariaDescription?: string;
13
+ i18nStrings?: CoreChartProps.I18nStrings;
14
+ }): {
15
+ chartLabel: string | undefined;
16
+ chartDescription: string | undefined;
17
+ chartContainerLabel: string | undefined;
18
+ chartXAxisLabel: string | undefined;
19
+ chartYAxisLabel: string | undefined;
20
+ chartSegmentLabel: string | undefined;
21
+ };
@@ -0,0 +1,18 @@
1
+ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ // SPDX-License-Identifier: Apache-2.0
3
+ import { useInternalI18n } from "@cloudscape-design/components/internal/do-not-use/i18n";
4
+ export function useChartI18n({ ariaLabel, ariaDescription, i18nStrings, }) {
5
+ const i18n = useInternalI18n("[charts]");
6
+ const i18nPie = useInternalI18n("pie-chart");
7
+ return {
8
+ chartLabel: ariaLabel,
9
+ chartDescription: ariaDescription,
10
+ // We reuse existing translations as passing for now, but it is possible to introduce new i18n strings that
11
+ // are parametrized with axes names, and more.
12
+ chartContainerLabel: i18n("i18nStrings.chartAriaRoleDescription", i18nStrings === null || i18nStrings === void 0 ? void 0 : i18nStrings.chartRoleDescription),
13
+ chartXAxisLabel: i18n("i18nStrings.xAxisAriaRoleDescription", i18nStrings === null || i18nStrings === void 0 ? void 0 : i18nStrings.xAxisRoleDescription),
14
+ chartYAxisLabel: i18n("i18nStrings.yAxisAriaRoleDescription", i18nStrings === null || i18nStrings === void 0 ? void 0 : i18nStrings.yAxisRoleDescription),
15
+ chartSegmentLabel: i18nPie("i18nStrings.segmentAriaRoleDescription", i18nStrings === null || i18nStrings === void 0 ? void 0 : i18nStrings.segmentRoleDescription),
16
+ };
17
+ }
18
+ //# sourceMappingURL=i18n-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"i18n-utils.js","sourceRoot":"","sources":["../../../src/core/i18n-utils.tsx"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,sCAAsC;AAEtC,OAAO,EAAE,eAAe,EAAE,MAAM,wDAAwD,CAAC;AAazF,MAAM,UAAU,YAAY,CAAC,EAC3B,SAAS,EACT,eAAe,EACf,WAAW,GAKZ;IACC,MAAM,IAAI,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;IACzC,MAAM,OAAO,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;IAC7C,OAAO;QACL,UAAU,EAAE,SAAS;QACrB,gBAAgB,EAAE,eAAe;QACjC,2GAA2G;QAC3G,8CAA8C;QAC9C,mBAAmB,EAAE,IAAI,CAAC,sCAAsC,EAAE,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,oBAAoB,CAAC;QACpG,eAAe,EAAE,IAAI,CAAC,sCAAsC,EAAE,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,oBAAoB,CAAC;QAChG,eAAe,EAAE,IAAI,CAAC,sCAAsC,EAAE,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,oBAAoB,CAAC;QAChG,iBAAiB,EAAE,OAAO,CAAC,wCAAwC,EAAE,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,sBAAsB,CAAC;KAC1G,CAAC;AACJ,CAAC","sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { useInternalI18n } from \"@cloudscape-design/components/internal/do-not-use/i18n\";\n\nimport { CoreChartProps } from \"./interfaces\";\n\nexport interface ChartLabels {\n chartLabel?: string;\n chartDescription?: string;\n chartContainerLabel?: string;\n chartXAxisLabel?: string;\n chartYAxisLabel?: string;\n chartSegmentLabel?: string;\n}\n\nexport function useChartI18n({\n ariaLabel,\n ariaDescription,\n i18nStrings,\n}: {\n ariaLabel?: string;\n ariaDescription?: string;\n i18nStrings?: CoreChartProps.I18nStrings;\n}) {\n const i18n = useInternalI18n(\"[charts]\");\n const i18nPie = useInternalI18n(\"pie-chart\");\n return {\n chartLabel: ariaLabel,\n chartDescription: ariaDescription,\n // We reuse existing translations as passing for now, but it is possible to introduce new i18n strings that\n // are parametrized with axes names, and more.\n chartContainerLabel: i18n(\"i18nStrings.chartAriaRoleDescription\", i18nStrings?.chartRoleDescription),\n chartXAxisLabel: i18n(\"i18nStrings.xAxisAriaRoleDescription\", i18nStrings?.xAxisRoleDescription),\n chartYAxisLabel: i18n(\"i18nStrings.yAxisAriaRoleDescription\", i18nStrings?.yAxisRoleDescription),\n chartSegmentLabel: i18nPie(\"i18nStrings.segmentAriaRoleDescription\", i18nStrings?.segmentRoleDescription),\n };\n}\n"]}