@cloudscape-design/chart-components 1.0.22 → 1.0.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/core/chart-api/chart-extra-legend.js +2 -2
- package/core/chart-api/chart-extra-legend.js.map +1 -1
- package/core/chart-container.d.ts +3 -2
- package/core/chart-container.js +3 -4
- package/core/chart-container.js.map +1 -1
- package/core/chart-core.js +51 -36
- package/core/chart-core.js.map +1 -1
- package/core/components/core-legend.d.ts +7 -5
- package/core/components/core-legend.js +34 -4
- package/core/components/core-legend.js.map +1 -1
- package/core/interfaces.d.ts +21 -2
- package/core/interfaces.js.map +1 -1
- package/core/styles.css.js +21 -20
- package/core/styles.scoped.css +31 -21
- package/core/styles.selectors.js +21 -20
- package/core/test-classes/styles.css.js +30 -28
- package/core/test-classes/styles.scoped.css +30 -28
- package/core/test-classes/styles.selectors.js +30 -28
- package/core/utils.d.ts +24 -2
- package/core/utils.js +75 -12
- package/core/utils.js.map +1 -1
- package/internal/components/chart-legend/index.d.ts +9 -5
- package/internal/components/chart-legend/index.js +52 -77
- package/internal/components/chart-legend/index.js.map +1 -1
- package/internal/components/chart-legend/styles.css.js +17 -23
- package/internal/components/chart-legend/styles.scoped.css +40 -61
- package/internal/components/chart-legend/styles.selectors.js +17 -23
- package/internal/components/interfaces.d.ts +1 -0
- package/internal/components/interfaces.js.map +1 -1
- package/internal/environment.js +1 -1
- package/internal/environment.json +1 -1
- package/internal/manifest.json +1 -1
- package/internal-do-not-use/core-legend/index.d.ts +1 -1
- package/internal-do-not-use/core-legend/index.js +29 -3
- package/internal-do-not-use/core-legend/index.js.map +1 -1
- package/package.json +1 -1
- package/test-utils/dom/internal/core.d.ts +1 -0
- package/test-utils/dom/internal/core.js +4 -1
- package/test-utils/dom/internal/core.js.map +1 -1
- package/test-utils/selectors/internal/core.d.ts +1 -0
- package/test-utils/selectors/internal/core.js +4 -1
- package/test-utils/selectors/internal/core.js.map +1 -1
|
@@ -59,9 +59,9 @@ export class ChartExtraLegend extends AsyncStore {
|
|
|
59
59
|
};
|
|
60
60
|
this.initLegend = () => {
|
|
61
61
|
const itemSpecs = getChartLegendItems(this.context.chart());
|
|
62
|
-
const legendItems = itemSpecs.map(({ id, name, color, markerType, visible }) => {
|
|
62
|
+
const legendItems = itemSpecs.map(({ id, name, color, markerType, visible, isSecondary }) => {
|
|
63
63
|
const marker = this.renderMarker(markerType, color, visible);
|
|
64
|
-
return { id, name, marker, visible, highlighted: false };
|
|
64
|
+
return { id, name, marker, visible, isSecondary, highlighted: false };
|
|
65
65
|
});
|
|
66
66
|
this.updateLegendItems(legendItems);
|
|
67
67
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chart-extra-legend.js","sourceRoot":"","sources":["../../../../src/core/chart-api/chart-extra-legend.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 { ChartSeriesMarker, ChartSeriesMarkerType } from \"../../internal/components/series-marker\";\nimport { fireNonCancelableEvent } from \"../../internal/events\";\nimport AsyncStore from \"../../internal/utils/async-store\";\nimport { getChartSeries } from \"../../internal/utils/chart-series\";\nimport { isEqualArrays } from \"../../internal/utils/utils\";\nimport { CoreChartProps } from \"../interfaces\";\nimport { getChartLegendItems, getPointId, getSeriesId } from \"../utils\";\nimport { ChartExtraContext } from \"./chart-extra-context\";\n\n// The reactive state is used to propagate changes in legend items to the core legend React component.\nexport interface ReactiveLegendState {\n items: readonly CoreChartProps.LegendItem[];\n}\n\n// Chart helper that implements custom legend behaviors.\nexport class ChartExtraLegend extends AsyncStore<ReactiveLegendState> {\n private context: ChartExtraContext;\n private visibilityMode: \"internal\" | \"external\" = \"external\";\n\n constructor(context: ChartExtraContext) {\n super({ items: [] });\n this.context = context;\n }\n\n public onChartRender = () => {\n this.initLegend();\n this.updateItemsVisibility();\n };\n\n // If visible items are explicitly provided, we use them to update visibility of chart's series or points (by ID).\n // If not provided, the visibility state is managed internally.\n public updateItemsVisibility = () => {\n if (this.context.state.visibleItems) {\n this.visibilityMode = \"external\";\n updateItemsVisibility(this.context.chart(), this.get().items, this.context.state.visibleItems);\n } else {\n this.visibilityMode = \"internal\";\n }\n };\n\n // A callback to be called when items visibility changes from the outside or from the legend.\n public onItemVisibilityChange = (visibleItems: readonly string[], { isApiCall }: { isApiCall: boolean }) => {\n const currentItems = this.get().items;\n const updatedItems = currentItems.map((i) => ({ ...i, visible: visibleItems.includes(i.id) }));\n if (this.visibilityMode === \"internal\") {\n this.updateLegendItems(updatedItems);\n updateItemsVisibility(this.context.chart(), this.get().items, visibleItems);\n }\n fireNonCancelableEvent(this.context.handlers.onVisibleItemsChange, { items: updatedItems, isApiCall });\n };\n\n // Updates legend highlight state when chart's point is highlighted.\n public onHighlightPoint = (point: Highcharts.Point) => {\n const visibleItems = point.series.type === \"pie\" ? [getPointId(point)] : [getSeriesId(point.series)];\n this.onHighlightItems(visibleItems);\n };\n\n // Updates legend highlight state when chart's group of points is highlighted.\n public onHighlightGroup = (group: readonly Highcharts.Point[]) => {\n const visibleItems = group.map((point) => getSeriesId(point.series));\n this.onHighlightItems(visibleItems);\n };\n\n // Updates legend highlight state given an explicit list of item IDs. This is used to update state\n // when a legend item gets hovered or focused.\n public onHighlightItems = (highlightedItems: readonly string[]) => {\n const currentItems = this.get().items;\n const updatedItems = currentItems.map(({ ...i }) => ({ ...i, highlighted: highlightedItems.includes(i.id) }));\n this.updateLegendItems(updatedItems);\n };\n\n // Clears legend highlight state.\n public onClearHighlight = () => {\n const nextItems = this.get().items.map(({ ...item }) => ({ ...item, highlighted: false }));\n this.updateLegendItems(nextItems);\n };\n\n private initLegend = () => {\n const itemSpecs = getChartLegendItems(this.context.chart());\n const legendItems = itemSpecs.map(({ id, name, color, markerType, visible }) => {\n const marker = this.renderMarker(markerType, color, visible);\n return { id, name, marker, visible, highlighted: false };\n });\n this.updateLegendItems(legendItems);\n };\n\n private updateLegendItems = (nextItems: CoreChartProps.LegendItem[]) => {\n function isLegendItemsEqual(a: CoreChartProps.LegendItem, b: CoreChartProps.LegendItem) {\n return (\n a.id === b.id &&\n a.name === b.name &&\n a.marker === b.marker &&\n a.visible === b.visible &&\n a.highlighted === b.highlighted\n );\n }\n if (!isEqualArrays(this.get().items, nextItems, isLegendItemsEqual)) {\n this.set(() => ({ items: nextItems }));\n }\n };\n\n // The chart markers derive from type and color and are cached to avoid unnecessary renders,\n // and allow comparing them by reference.\n private markersCache = new Map<string, React.ReactNode>();\n public renderMarker(type: ChartSeriesMarkerType, color: string, visible = true): React.ReactNode {\n const key = `${type}:${color}:${visible}`;\n const marker = this.markersCache.get(key) ?? <ChartSeriesMarker type={type} color={color} visible={visible} />;\n this.markersCache.set(key, marker);\n return marker;\n }\n}\n\nfunction updateItemsVisibility(\n chart: Highcharts.Chart,\n legendItems: readonly CoreChartProps.LegendItem[],\n visibleItems?: readonly string[],\n) {\n const availableItemsSet = new Set(legendItems.map((i) => i.id));\n const visibleItemsSet = new Set(visibleItems);\n\n let updatesCounter = 0;\n const getVisibleAndCount = (id: string, visible: boolean) => {\n const nextVisible = visibleItemsSet.has(id);\n updatesCounter += nextVisible !== visible ? 1 : 0;\n return nextVisible;\n };\n\n for (const series of getChartSeries(chart.series)) {\n if (availableItemsSet.has(getSeriesId(series))) {\n series.setVisible(getVisibleAndCount(getSeriesId(series), series.visible), false);\n }\n for (const point of series.data) {\n if (typeof point.setVisible === \"function\" && availableItemsSet.has(getPointId(point))) {\n point.setVisible(getVisibleAndCount(getPointId(point), point.visible), false);\n }\n }\n }\n\n // The call `seriesOrPoint.setVisible(visible, false)` does not trigger the chart redraw, as it would otherwise\n // impact the performance. Instead, we trigger the redraw explicitly, if any change to visibility has been made.\n if (updatesCounter > 0) {\n chart.redraw();\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"chart-extra-legend.js","sourceRoot":"","sources":["../../../../src/core/chart-api/chart-extra-legend.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 { ChartSeriesMarker, ChartSeriesMarkerType } from \"../../internal/components/series-marker\";\nimport { fireNonCancelableEvent } from \"../../internal/events\";\nimport AsyncStore from \"../../internal/utils/async-store\";\nimport { getChartSeries } from \"../../internal/utils/chart-series\";\nimport { isEqualArrays } from \"../../internal/utils/utils\";\nimport { CoreChartProps } from \"../interfaces\";\nimport { getChartLegendItems, getPointId, getSeriesId } from \"../utils\";\nimport { ChartExtraContext } from \"./chart-extra-context\";\n\n// The reactive state is used to propagate changes in legend items to the core legend React component.\nexport interface ReactiveLegendState {\n items: readonly CoreChartProps.LegendItem[];\n}\n\n// Chart helper that implements custom legend behaviors.\nexport class ChartExtraLegend extends AsyncStore<ReactiveLegendState> {\n private context: ChartExtraContext;\n private visibilityMode: \"internal\" | \"external\" = \"external\";\n\n constructor(context: ChartExtraContext) {\n super({ items: [] });\n this.context = context;\n }\n\n public onChartRender = () => {\n this.initLegend();\n this.updateItemsVisibility();\n };\n\n // If visible items are explicitly provided, we use them to update visibility of chart's series or points (by ID).\n // If not provided, the visibility state is managed internally.\n public updateItemsVisibility = () => {\n if (this.context.state.visibleItems) {\n this.visibilityMode = \"external\";\n updateItemsVisibility(this.context.chart(), this.get().items, this.context.state.visibleItems);\n } else {\n this.visibilityMode = \"internal\";\n }\n };\n\n // A callback to be called when items visibility changes from the outside or from the legend.\n public onItemVisibilityChange = (visibleItems: readonly string[], { isApiCall }: { isApiCall: boolean }) => {\n const currentItems = this.get().items;\n const updatedItems = currentItems.map((i) => ({ ...i, visible: visibleItems.includes(i.id) }));\n if (this.visibilityMode === \"internal\") {\n this.updateLegendItems(updatedItems);\n updateItemsVisibility(this.context.chart(), this.get().items, visibleItems);\n }\n fireNonCancelableEvent(this.context.handlers.onVisibleItemsChange, { items: updatedItems, isApiCall });\n };\n\n // Updates legend highlight state when chart's point is highlighted.\n public onHighlightPoint = (point: Highcharts.Point) => {\n const visibleItems = point.series.type === \"pie\" ? [getPointId(point)] : [getSeriesId(point.series)];\n this.onHighlightItems(visibleItems);\n };\n\n // Updates legend highlight state when chart's group of points is highlighted.\n public onHighlightGroup = (group: readonly Highcharts.Point[]) => {\n const visibleItems = group.map((point) => getSeriesId(point.series));\n this.onHighlightItems(visibleItems);\n };\n\n // Updates legend highlight state given an explicit list of item IDs. This is used to update state\n // when a legend item gets hovered or focused.\n public onHighlightItems = (highlightedItems: readonly string[]) => {\n const currentItems = this.get().items;\n const updatedItems = currentItems.map(({ ...i }) => ({ ...i, highlighted: highlightedItems.includes(i.id) }));\n this.updateLegendItems(updatedItems);\n };\n\n // Clears legend highlight state.\n public onClearHighlight = () => {\n const nextItems = this.get().items.map(({ ...item }) => ({ ...item, highlighted: false }));\n this.updateLegendItems(nextItems);\n };\n\n private initLegend = () => {\n const itemSpecs = getChartLegendItems(this.context.chart());\n const legendItems = itemSpecs.map(({ id, name, color, markerType, visible, isSecondary }) => {\n const marker = this.renderMarker(markerType, color, visible);\n return { id, name, marker, visible, isSecondary, highlighted: false };\n });\n this.updateLegendItems(legendItems);\n };\n\n private updateLegendItems = (nextItems: CoreChartProps.LegendItem[]) => {\n function isLegendItemsEqual(a: CoreChartProps.LegendItem, b: CoreChartProps.LegendItem) {\n return (\n a.id === b.id &&\n a.name === b.name &&\n a.marker === b.marker &&\n a.visible === b.visible &&\n a.highlighted === b.highlighted\n );\n }\n if (!isEqualArrays(this.get().items, nextItems, isLegendItemsEqual)) {\n this.set(() => ({ items: nextItems }));\n }\n };\n\n // The chart markers derive from type and color and are cached to avoid unnecessary renders,\n // and allow comparing them by reference.\n private markersCache = new Map<string, React.ReactNode>();\n public renderMarker(type: ChartSeriesMarkerType, color: string, visible = true): React.ReactNode {\n const key = `${type}:${color}:${visible}`;\n const marker = this.markersCache.get(key) ?? <ChartSeriesMarker type={type} color={color} visible={visible} />;\n this.markersCache.set(key, marker);\n return marker;\n }\n}\n\nfunction updateItemsVisibility(\n chart: Highcharts.Chart,\n legendItems: readonly CoreChartProps.LegendItem[],\n visibleItems?: readonly string[],\n) {\n const availableItemsSet = new Set(legendItems.map((i) => i.id));\n const visibleItemsSet = new Set(visibleItems);\n\n let updatesCounter = 0;\n const getVisibleAndCount = (id: string, visible: boolean) => {\n const nextVisible = visibleItemsSet.has(id);\n updatesCounter += nextVisible !== visible ? 1 : 0;\n return nextVisible;\n };\n\n for (const series of getChartSeries(chart.series)) {\n if (availableItemsSet.has(getSeriesId(series))) {\n series.setVisible(getVisibleAndCount(getSeriesId(series), series.visible), false);\n }\n for (const point of series.data) {\n if (typeof point.setVisible === \"function\" && availableItemsSet.has(getPointId(point))) {\n point.setVisible(getVisibleAndCount(getPointId(point), point.visible), false);\n }\n }\n }\n\n // The call `seriesOrPoint.setVisible(visible, false)` does not trigger the chart redraw, as it would otherwise\n // impact the performance. Instead, we trigger the redraw explicitly, if any change to visibility has been made.\n if (updatesCounter > 0) {\n chart.redraw();\n }\n}\n"]}
|
|
@@ -6,7 +6,8 @@ interface ChartContainerProps {
|
|
|
6
6
|
header?: React.ReactNode;
|
|
7
7
|
filter?: React.ReactNode;
|
|
8
8
|
navigator?: React.ReactNode;
|
|
9
|
-
|
|
9
|
+
primaryLegend?: React.ReactNode;
|
|
10
|
+
secondaryLegend?: React.ReactNode;
|
|
10
11
|
legendBottomMaxHeight?: number;
|
|
11
12
|
legendPosition: "bottom" | "side";
|
|
12
13
|
footer?: React.ReactNode;
|
|
@@ -16,5 +17,5 @@ interface ChartContainerProps {
|
|
|
16
17
|
chartMinHeight?: number;
|
|
17
18
|
chartMinWidth?: number;
|
|
18
19
|
}
|
|
19
|
-
export declare function ChartContainer({ chart, verticalAxisTitle, verticalAxisTitlePlacement, header, filter, footer,
|
|
20
|
+
export declare function ChartContainer({ chart, verticalAxisTitle, verticalAxisTitlePlacement, header, filter, footer, primaryLegend, secondaryLegend, legendPosition, legendBottomMaxHeight, navigator, noData, fitHeight, chartHeight, chartMinHeight, chartMinWidth, }: ChartContainerProps): import("react/jsx-runtime").JSX.Element;
|
|
20
21
|
export {};
|
package/core/chart-container.js
CHANGED
|
@@ -12,7 +12,7 @@ import testClasses from "./test-classes/styles.css.js";
|
|
|
12
12
|
// It also implements the height- and width overflow behaviors.
|
|
13
13
|
const DEFAULT_CHART_HEIGHT = 400;
|
|
14
14
|
const DEFAULT_CHART_MIN_HEIGHT = 200;
|
|
15
|
-
export function ChartContainer({ chart, verticalAxisTitle, verticalAxisTitlePlacement, header, filter, footer,
|
|
15
|
+
export function ChartContainer({ chart, verticalAxisTitle, verticalAxisTitlePlacement, header, filter, footer, primaryLegend, secondaryLegend, legendPosition, legendBottomMaxHeight, navigator, noData, fitHeight, chartHeight, chartMinHeight, chartMinWidth, }) {
|
|
16
16
|
const { refs, measures } = useContainerQueries();
|
|
17
17
|
// The vertical axis title is rendered above the chart, and is technically not a part of the chart plot.
|
|
18
18
|
// However, we want to include it to the chart's height computations as it does belong to the chart logically.
|
|
@@ -22,12 +22,11 @@ export function ChartContainer({ chart, verticalAxisTitle, verticalAxisTitlePlac
|
|
|
22
22
|
const withMinHeight = (height) => Math.max(chartMinHeight !== null && chartMinHeight !== void 0 ? chartMinHeight : DEFAULT_CHART_MIN_HEIGHT, height) - heightOffset;
|
|
23
23
|
const measuredChartHeight = withMinHeight(measures.chart - measures.header - measures.footer);
|
|
24
24
|
const effectiveChartHeight = fitHeight ? measuredChartHeight : withMinHeight(chartHeight !== null && chartHeight !== void 0 ? chartHeight : DEFAULT_CHART_HEIGHT);
|
|
25
|
+
const hasLegend = primaryLegend || secondaryLegend;
|
|
25
26
|
return (_jsxs("div", { ref: refs.chart, className: clsx({
|
|
26
27
|
[styles["chart-container-fit-height"]]: fitHeight,
|
|
27
28
|
[styles["chart-container-min-width"]]: chartMinWidth !== undefined,
|
|
28
|
-
}), children: [_jsxs("div", { ref: refs.header, children: [header, filter] }),
|
|
29
|
-
legendPosition === "bottom" &&
|
|
30
|
-
(legendBottomMaxHeight ? _jsx("div", { style: { maxHeight: `${legendBottomMaxHeight}px` }, children: legend }) : legend), footer] })] }));
|
|
29
|
+
}), children: [_jsxs("div", { ref: refs.header, children: [header, filter] }), hasLegend && legendPosition === "side" ? (_jsxs("div", { className: styles["chart-plot-and-legend-wrapper"], children: [_jsxs("div", { style: { minInlineSize: chartMinWidth !== null && chartMinWidth !== void 0 ? chartMinWidth : 0 }, className: clsx(styles["chart-plot-wrapper"], testClasses["chart-plot-wrapper"]), children: [verticalAxisTitle, chart(effectiveChartHeight), noData] }), _jsxs("div", { className: styles["side-legend-container"], style: { maxBlockSize: effectiveChartHeight }, children: [primaryLegend, secondaryLegend] })] })) : (_jsxs("div", { style: chartMinWidth !== undefined ? { minInlineSize: chartMinWidth } : {}, className: clsx(styles["chart-plot-wrapper"], testClasses["chart-plot-wrapper"]), children: [verticalAxisTitle, chart(effectiveChartHeight), !hasLegend || legendPosition === "bottom" ? noData : null] })), _jsxs("div", { ref: refs.footer, style: chartMinWidth !== undefined ? { minInlineSize: chartMinWidth } : {}, children: [navigator && _jsx("div", { className: testClasses["chart-navigator"], children: navigator }), hasLegend && legendPosition === "bottom" && (_jsxs("div", { className: styles["bottom-legend-container"], style: { maxBlockSize: legendBottomMaxHeight ? `${legendBottomMaxHeight}px` : undefined }, children: [primaryLegend, secondaryLegend] })), footer] })] }));
|
|
31
30
|
}
|
|
32
31
|
// This hook combines 3 resize observer and does a small optimization to batch their updates in a single set-state.
|
|
33
32
|
function useContainerQueries() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chart-container.js","sourceRoot":"","sources":["../../../src/core/chart-container.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 { useCallback, useRef, useState } from \"react\";\nimport clsx from \"clsx\";\n\nimport { useResizeObserver } from \"@cloudscape-design/component-toolkit/internal\";\n\nimport * as Styles from \"../internal/chart-styles\";\nimport { DebouncedCall } from \"../internal/utils/utils\";\n\nimport styles from \"./styles.css.js\";\nimport testClasses from \"./test-classes/styles.css.js\";\n\n// Chart container implements the layout for top-level components, including chart plot, legend, and more.\n// It also implements the height- and width overflow behaviors.\n\nconst DEFAULT_CHART_HEIGHT = 400;\nconst DEFAULT_CHART_MIN_HEIGHT = 200;\n\ninterface ChartContainerProps {\n // The header, footer, vertical axis title, and legend are rendered as is, and we measure the height of these components\n // to compute the available height for the chart plot when fitHeight=true. When there is not enough vertical space, the\n // container will ensure the overflow behavior.\n chart: (height: undefined | number) => React.ReactNode;\n verticalAxisTitle?: React.ReactNode;\n verticalAxisTitlePlacement: \"top\" | \"side\";\n header?: React.ReactNode;\n filter?: React.ReactNode;\n navigator?: React.ReactNode;\n legend?: React.ReactNode;\n legendBottomMaxHeight?: number;\n legendPosition: \"bottom\" | \"side\";\n footer?: React.ReactNode;\n noData?: React.ReactNode;\n fitHeight?: boolean;\n chartHeight?: number;\n chartMinHeight?: number;\n chartMinWidth?: number;\n}\n\nexport function ChartContainer({\n chart,\n verticalAxisTitle,\n verticalAxisTitlePlacement,\n header,\n filter,\n footer,\n legend,\n legendPosition,\n legendBottomMaxHeight,\n navigator,\n noData,\n fitHeight,\n chartHeight,\n chartMinHeight,\n chartMinWidth,\n}: ChartContainerProps) {\n const { refs, measures } = useContainerQueries();\n\n // The vertical axis title is rendered above the chart, and is technically not a part of the chart plot.\n // However, we want to include it to the chart's height computations as it does belong to the chart logically.\n // We do so by taking the title's constant height into account, when \"top\" axis placement is chosen.\n const verticalTitleOffset = Styles.verticalAxisTitleBlockSize + Styles.verticalAxisTitleMargin;\n const heightOffset = verticalAxisTitlePlacement === \"top\" ? verticalTitleOffset : 0;\n const withMinHeight = (height: number) => Math.max(chartMinHeight ?? DEFAULT_CHART_MIN_HEIGHT, height) - heightOffset;\n const measuredChartHeight = withMinHeight(measures.chart - measures.header - measures.footer);\n const effectiveChartHeight = fitHeight ? measuredChartHeight : withMinHeight(chartHeight ?? DEFAULT_CHART_HEIGHT);\n return (\n <div\n ref={refs.chart}\n className={clsx({\n [styles[\"chart-container-fit-height\"]]: fitHeight,\n [styles[\"chart-container-min-width\"]]: chartMinWidth !== undefined,\n })}\n >\n <div ref={refs.header}>\n {header}\n {filter}\n </div>\n\n {legend && legendPosition === \"side\" ? (\n <div className={styles[\"chart-plot-and-legend-wrapper\"]}>\n <div\n style={{ minInlineSize: chartMinWidth ?? 0 }}\n className={clsx(styles[\"chart-plot-wrapper\"], testClasses[\"chart-plot-wrapper\"])}\n >\n {verticalAxisTitle}\n {chart(effectiveChartHeight)}\n {noData}\n </div>\n <div className={styles[\"side-legend-container\"]} style={{ maxBlockSize: effectiveChartHeight }}>\n {legend}\n </div>\n </div>\n ) : (\n <div\n style={chartMinWidth !== undefined ? { minInlineSize: chartMinWidth } : {}}\n className={clsx(styles[\"chart-plot-wrapper\"], testClasses[\"chart-plot-wrapper\"])}\n >\n {verticalAxisTitle}\n {chart(effectiveChartHeight)}\n {!legend || legendPosition === \"bottom\" ? noData : null}\n </div>\n )}\n\n <div ref={refs.footer} style={chartMinWidth !== undefined ? { minInlineSize: chartMinWidth } : {}}>\n {navigator && <div className={testClasses[\"chart-navigator\"]}>{navigator}</div>}\n {legend &&\n legendPosition === \"bottom\" &&\n (legendBottomMaxHeight ? <div style={{ maxHeight: `${legendBottomMaxHeight}px` }}>{legend}</div> : legend)}\n {footer}\n </div>\n </div>\n );\n}\n\n// This hook combines 3 resize observer and does a small optimization to batch their updates in a single set-state.\nfunction useContainerQueries() {\n const [measuresState, setMeasuresState] = useState({ ready: false, chart: 0, header: 0, footer: 0 });\n const measuresRef = useRef({ ready: false, chart: 0, header: 0, footer: 0 });\n const measureDebounce = useRef(new DebouncedCall()).current;\n const setMeasure = (type: \"chart\" | \"header\" | \"footer\", value: number) => {\n measuresRef.current[type] = value;\n measureDebounce.call(() => setMeasuresState({ ...measuresRef.current }), 0);\n };\n\n const chartMeasureRef = useRef<HTMLDivElement>(null);\n const getChart = useCallback(() => chartMeasureRef.current, []);\n useResizeObserver(getChart, (entry) => setMeasure(\"chart\", entry.contentBoxHeight));\n\n const headerMeasureRef = useRef<HTMLDivElement>(null);\n const getHeader = useCallback(() => headerMeasureRef.current, []);\n useResizeObserver(getHeader, (entry) => setMeasure(\"header\", entry.contentBoxHeight));\n\n const footerMeasureRef = useRef<HTMLDivElement>(null);\n const getFooter = useCallback(() => footerMeasureRef.current, []);\n useResizeObserver(getFooter, (entry) => setMeasure(\"footer\", entry.contentBoxHeight));\n\n return {\n refs: { chart: chartMeasureRef, header: headerMeasureRef, footer: footerMeasureRef },\n measures: measuresState,\n };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"chart-container.js","sourceRoot":"","sources":["../../../src/core/chart-container.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 { useCallback, useRef, useState } from \"react\";\nimport clsx from \"clsx\";\n\nimport { useResizeObserver } from \"@cloudscape-design/component-toolkit/internal\";\n\nimport * as Styles from \"../internal/chart-styles\";\nimport { DebouncedCall } from \"../internal/utils/utils\";\n\nimport styles from \"./styles.css.js\";\nimport testClasses from \"./test-classes/styles.css.js\";\n\n// Chart container implements the layout for top-level components, including chart plot, legend, and more.\n// It also implements the height- and width overflow behaviors.\n\nconst DEFAULT_CHART_HEIGHT = 400;\nconst DEFAULT_CHART_MIN_HEIGHT = 200;\n\ninterface ChartContainerProps {\n // The header, footer, vertical axis title, and legend are rendered as is, and we measure the height of these components\n // to compute the available height for the chart plot when fitHeight=true. When there is not enough vertical space, the\n // container will ensure the overflow behavior.\n chart: (height: undefined | number) => React.ReactNode;\n verticalAxisTitle?: React.ReactNode;\n verticalAxisTitlePlacement: \"top\" | \"side\";\n header?: React.ReactNode;\n filter?: React.ReactNode;\n navigator?: React.ReactNode;\n primaryLegend?: React.ReactNode;\n secondaryLegend?: React.ReactNode;\n legendBottomMaxHeight?: number;\n legendPosition: \"bottom\" | \"side\";\n footer?: React.ReactNode;\n noData?: React.ReactNode;\n fitHeight?: boolean;\n chartHeight?: number;\n chartMinHeight?: number;\n chartMinWidth?: number;\n}\n\nexport function ChartContainer({\n chart,\n verticalAxisTitle,\n verticalAxisTitlePlacement,\n header,\n filter,\n footer,\n primaryLegend,\n secondaryLegend,\n legendPosition,\n legendBottomMaxHeight,\n navigator,\n noData,\n fitHeight,\n chartHeight,\n chartMinHeight,\n chartMinWidth,\n}: ChartContainerProps) {\n const { refs, measures } = useContainerQueries();\n\n // The vertical axis title is rendered above the chart, and is technically not a part of the chart plot.\n // However, we want to include it to the chart's height computations as it does belong to the chart logically.\n // We do so by taking the title's constant height into account, when \"top\" axis placement is chosen.\n const verticalTitleOffset = Styles.verticalAxisTitleBlockSize + Styles.verticalAxisTitleMargin;\n const heightOffset = verticalAxisTitlePlacement === \"top\" ? verticalTitleOffset : 0;\n const withMinHeight = (height: number) => Math.max(chartMinHeight ?? DEFAULT_CHART_MIN_HEIGHT, height) - heightOffset;\n const measuredChartHeight = withMinHeight(measures.chart - measures.header - measures.footer);\n const effectiveChartHeight = fitHeight ? measuredChartHeight : withMinHeight(chartHeight ?? DEFAULT_CHART_HEIGHT);\n const hasLegend = primaryLegend || secondaryLegend;\n return (\n <div\n ref={refs.chart}\n className={clsx({\n [styles[\"chart-container-fit-height\"]]: fitHeight,\n [styles[\"chart-container-min-width\"]]: chartMinWidth !== undefined,\n })}\n >\n <div ref={refs.header}>\n {header}\n {filter}\n </div>\n\n {hasLegend && legendPosition === \"side\" ? (\n <div className={styles[\"chart-plot-and-legend-wrapper\"]}>\n <div\n style={{ minInlineSize: chartMinWidth ?? 0 }}\n className={clsx(styles[\"chart-plot-wrapper\"], testClasses[\"chart-plot-wrapper\"])}\n >\n {verticalAxisTitle}\n {chart(effectiveChartHeight)}\n {noData}\n </div>\n <div className={styles[\"side-legend-container\"]} style={{ maxBlockSize: effectiveChartHeight }}>\n {primaryLegend}\n {secondaryLegend}\n </div>\n </div>\n ) : (\n <div\n style={chartMinWidth !== undefined ? { minInlineSize: chartMinWidth } : {}}\n className={clsx(styles[\"chart-plot-wrapper\"], testClasses[\"chart-plot-wrapper\"])}\n >\n {verticalAxisTitle}\n {chart(effectiveChartHeight)}\n {!hasLegend || legendPosition === \"bottom\" ? noData : null}\n </div>\n )}\n\n <div ref={refs.footer} style={chartMinWidth !== undefined ? { minInlineSize: chartMinWidth } : {}}>\n {navigator && <div className={testClasses[\"chart-navigator\"]}>{navigator}</div>}\n {hasLegend && legendPosition === \"bottom\" && (\n <div\n className={styles[\"bottom-legend-container\"]}\n style={{ maxBlockSize: legendBottomMaxHeight ? `${legendBottomMaxHeight}px` : undefined }}\n >\n {primaryLegend}\n {secondaryLegend}\n </div>\n )}\n {footer}\n </div>\n </div>\n );\n}\n\n// This hook combines 3 resize observer and does a small optimization to batch their updates in a single set-state.\nfunction useContainerQueries() {\n const [measuresState, setMeasuresState] = useState({ ready: false, chart: 0, header: 0, footer: 0 });\n const measuresRef = useRef({ ready: false, chart: 0, header: 0, footer: 0 });\n const measureDebounce = useRef(new DebouncedCall()).current;\n const setMeasure = (type: \"chart\" | \"header\" | \"footer\", value: number) => {\n measuresRef.current[type] = value;\n measureDebounce.call(() => setMeasuresState({ ...measuresRef.current }), 0);\n };\n\n const chartMeasureRef = useRef<HTMLDivElement>(null);\n const getChart = useCallback(() => chartMeasureRef.current, []);\n useResizeObserver(getChart, (entry) => setMeasure(\"chart\", entry.contentBoxHeight));\n\n const headerMeasureRef = useRef<HTMLDivElement>(null);\n const getHeader = useCallback(() => headerMeasureRef.current, []);\n useResizeObserver(getHeader, (entry) => setMeasure(\"header\", entry.contentBoxHeight));\n\n const footerMeasureRef = useRef<HTMLDivElement>(null);\n const getFooter = useCallback(() => footerMeasureRef.current, []);\n useResizeObserver(getFooter, (entry) => setMeasure(\"footer\", entry.contentBoxHeight));\n\n return {\n refs: { chart: chartMeasureRef, header: headerMeasureRef, footer: footerMeasureRef },\n measures: measuresState,\n };\n}\n"]}
|
package/core/chart-core.js
CHANGED
|
@@ -21,7 +21,7 @@ import { ChartTooltip } from "./components/core-tooltip";
|
|
|
21
21
|
import { VerticalAxisTitle } from "./components/core-vertical-axis-title";
|
|
22
22
|
import { getFormatter } from "./formatters";
|
|
23
23
|
import { useChartI18n } from "./i18n-utils";
|
|
24
|
-
import {
|
|
24
|
+
import { getLegendsProps, getPointAccessibleDescription } from "./utils";
|
|
25
25
|
import styles from "./styles.css.js";
|
|
26
26
|
import testClasses from "./test-classes/styles.css.js";
|
|
27
27
|
/**
|
|
@@ -29,7 +29,7 @@ import testClasses from "./test-classes/styles.css.js";
|
|
|
29
29
|
* with Cloudscape props to define custom tooltip, no-data, formatters, items visibility, and more.
|
|
30
30
|
*/
|
|
31
31
|
export function InternalCoreChart({ options, ariaLabel, ariaDescription, fitHeight, chartHeight, chartMinHeight, chartMinWidth, tooltip: tooltipOptions, noData: noDataOptions, navigator, legend: legendOptions, fallback = _jsx(Spinner, {}), callback, emphasizeBaseline = true, verticalAxisTitlePlacement = "side", i18nStrings, className, header, footer, filter, keyboardNavigation = true, onHighlight, onLegendItemHighlight, onClearHighlight, onVisibleItemsChange, visibleItems, __internalRootRef, ...rest }) {
|
|
32
|
-
var _a, _b;
|
|
32
|
+
var _a, _b, _c, _d;
|
|
33
33
|
const highcharts = rest.highcharts;
|
|
34
34
|
const labels = useChartI18n({ ariaLabel, ariaDescription, i18nStrings });
|
|
35
35
|
const context = {
|
|
@@ -48,6 +48,12 @@ export function InternalCoreChart({ options, ariaLabel, ariaDescription, fitHeig
|
|
|
48
48
|
const mergedRootRef = useMergeRefs(rootRef, __internalRootRef);
|
|
49
49
|
const rootProps = { ref: mergedRootRef, className: rootClassName, ...getDataAttributes(rest) };
|
|
50
50
|
const legendPosition = (_a = legendOptions === null || legendOptions === void 0 ? void 0 : legendOptions.position) !== null && _a !== void 0 ? _a : "bottom";
|
|
51
|
+
const commonLegendProps = {
|
|
52
|
+
api: api,
|
|
53
|
+
i18nStrings,
|
|
54
|
+
onItemHighlight: onLegendItemHighlight,
|
|
55
|
+
getLegendTooltipContent: rest.getLegendTooltipContent,
|
|
56
|
+
};
|
|
51
57
|
const containerProps = {
|
|
52
58
|
fitHeight,
|
|
53
59
|
chartHeight,
|
|
@@ -64,14 +70,53 @@ export function InternalCoreChart({ options, ariaLabel, ariaDescription, fitHeig
|
|
|
64
70
|
}
|
|
65
71
|
const apiOptions = api.getOptions();
|
|
66
72
|
const inverted = !!((_b = options.chart) === null || _b === void 0 ? void 0 : _b.inverted);
|
|
67
|
-
const isRtl =
|
|
73
|
+
const isRtl = getIsRtl(rootRef === null || rootRef === void 0 ? void 0 : rootRef.current);
|
|
74
|
+
// Compute RTL-adjusted options that will be used for both legend positioning and chart rendering
|
|
75
|
+
const rtlAdjustedOptions = {
|
|
76
|
+
...options,
|
|
77
|
+
xAxis: (_c = castArray(options.xAxis)) === null || _c === void 0 ? void 0 : _c.map((xAxisOptions) => {
|
|
78
|
+
var _a, _b;
|
|
79
|
+
return ({
|
|
80
|
+
...Styles.xAxisOptions,
|
|
81
|
+
...xAxisOptions,
|
|
82
|
+
// Depending on the chart.inverted the x-axis can be rendered as vertical, and needs to respect page direction.
|
|
83
|
+
reversed: !inverted && isRtl ? !xAxisOptions.reversed : xAxisOptions.reversed,
|
|
84
|
+
opposite: inverted && isRtl ? !xAxisOptions.opposite : xAxisOptions.opposite,
|
|
85
|
+
className: xAxisClassName(inverted, xAxisOptions.className),
|
|
86
|
+
title: axisTitle((_a = xAxisOptions.title) !== null && _a !== void 0 ? _a : {}, !inverted || verticalAxisTitlePlacement === "side"),
|
|
87
|
+
labels: axisLabels((_b = xAxisOptions.labels) !== null && _b !== void 0 ? _b : {}),
|
|
88
|
+
});
|
|
89
|
+
}),
|
|
90
|
+
yAxis: (_d = castArray(options.yAxis)) === null || _d === void 0 ? void 0 : _d.map((yAxisOptions) => {
|
|
91
|
+
var _a, _b, _c;
|
|
92
|
+
return ({
|
|
93
|
+
...Styles.yAxisOptions,
|
|
94
|
+
...yAxisOptions,
|
|
95
|
+
// Depending on the chart.inverted the y-axis can be rendered as vertical, and needs to respect page direction.
|
|
96
|
+
reversed: inverted && isRtl ? !yAxisOptions.reversed : yAxisOptions.reversed,
|
|
97
|
+
opposite: !inverted && isRtl ? !yAxisOptions.opposite : yAxisOptions.opposite,
|
|
98
|
+
className: yAxisClassName(inverted, yAxisOptions.className),
|
|
99
|
+
title: axisTitle((_a = yAxisOptions.title) !== null && _a !== void 0 ? _a : {}, inverted || verticalAxisTitlePlacement === "side"),
|
|
100
|
+
labels: axisLabels((_b = yAxisOptions.labels) !== null && _b !== void 0 ? _b : {}),
|
|
101
|
+
plotLines: yAxisPlotLines(yAxisOptions.plotLines, emphasizeBaseline),
|
|
102
|
+
// We use reversed stack by default so that the order of points in the tooltip and series in the legend
|
|
103
|
+
// correspond the order of stacks.
|
|
104
|
+
reversedStacks: (_c = yAxisOptions.reversedStacks) !== null && _c !== void 0 ? _c : true,
|
|
105
|
+
});
|
|
106
|
+
}),
|
|
107
|
+
};
|
|
108
|
+
const legendProps = getLegendsProps(rtlAdjustedOptions, legendOptions);
|
|
68
109
|
return (_jsxs("div", { ...rootProps, children: [_jsx(ChartContainer, { ...containerProps, chart: (height) => {
|
|
69
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15
|
|
110
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15;
|
|
70
111
|
// The Highcharts options takes all provided Highcharts options and custom properties and merges them together, so that
|
|
71
112
|
// the Cloudscape features and custom Highcharts extensions co-exist.
|
|
72
113
|
// For certain options we provide Cloudscape styling, but in all cases this can be explicitly overridden.
|
|
114
|
+
// We use the rtl adjusted axes (instead of the original options.xAxis/yAxis) to ensure the chart renders
|
|
115
|
+
// with the correct axis orientation for RTL layouts, matching what was used for legend positioning above.
|
|
73
116
|
const highchartsOptions = {
|
|
74
117
|
...options,
|
|
118
|
+
xAxis: rtlAdjustedOptions.xAxis,
|
|
119
|
+
yAxis: rtlAdjustedOptions.yAxis,
|
|
75
120
|
// Hide credits by default.
|
|
76
121
|
credits: (_a = options.credits) !== null && _a !== void 0 ? _a : { enabled: false },
|
|
77
122
|
// Hide chart title by default.
|
|
@@ -212,43 +257,13 @@ export function InternalCoreChart({ options, ariaLabel, ariaDescription, fitHeig
|
|
|
212
257
|
dataLabels: { ...Styles.pieSeriesDataLabels, ...(_14 = (_13 = options.plotOptions) === null || _13 === void 0 ? void 0 : _13.pie) === null || _14 === void 0 ? void 0 : _14.dataLabels },
|
|
213
258
|
},
|
|
214
259
|
},
|
|
215
|
-
xAxis: (_15 = castArray(options.xAxis)) === null || _15 === void 0 ? void 0 : _15.map((xAxisOptions) => {
|
|
216
|
-
var _a, _b;
|
|
217
|
-
return ({
|
|
218
|
-
...Styles.xAxisOptions,
|
|
219
|
-
...xAxisOptions,
|
|
220
|
-
// Depending on the chart.inverted the x-axis can be rendered as vertical, and needs to respect page direction.
|
|
221
|
-
reversed: !inverted && isRtl() ? !xAxisOptions.reversed : xAxisOptions.reversed,
|
|
222
|
-
opposite: inverted && isRtl() ? !xAxisOptions.opposite : xAxisOptions.opposite,
|
|
223
|
-
className: xAxisClassName(inverted, xAxisOptions.className),
|
|
224
|
-
title: axisTitle((_a = xAxisOptions.title) !== null && _a !== void 0 ? _a : {}, !inverted || verticalAxisTitlePlacement === "side"),
|
|
225
|
-
labels: axisLabels((_b = xAxisOptions.labels) !== null && _b !== void 0 ? _b : {}),
|
|
226
|
-
});
|
|
227
|
-
}),
|
|
228
|
-
yAxis: (_16 = castArray(options.yAxis)) === null || _16 === void 0 ? void 0 : _16.map((yAxisOptions) => {
|
|
229
|
-
var _a, _b, _c;
|
|
230
|
-
return ({
|
|
231
|
-
...Styles.yAxisOptions,
|
|
232
|
-
...yAxisOptions,
|
|
233
|
-
// Depending on the chart.inverted the y-axis can be rendered as vertical, and needs to respect page direction.
|
|
234
|
-
reversed: inverted && isRtl() ? !yAxisOptions.reversed : yAxisOptions.reversed,
|
|
235
|
-
opposite: !inverted && isRtl() ? !yAxisOptions.opposite : yAxisOptions.opposite,
|
|
236
|
-
className: yAxisClassName(inverted, yAxisOptions.className),
|
|
237
|
-
title: axisTitle((_a = yAxisOptions.title) !== null && _a !== void 0 ? _a : {}, inverted || verticalAxisTitlePlacement === "side"),
|
|
238
|
-
labels: axisLabels((_b = yAxisOptions.labels) !== null && _b !== void 0 ? _b : {}),
|
|
239
|
-
plotLines: yAxisPlotLines(yAxisOptions.plotLines, emphasizeBaseline),
|
|
240
|
-
// We use reversed stack by default so that the order of points in the tooltip and series in the legend
|
|
241
|
-
// correspond the order of stacks.
|
|
242
|
-
reversedStacks: (_c = yAxisOptions.reversedStacks) !== null && _c !== void 0 ? _c : true,
|
|
243
|
-
});
|
|
244
|
-
}),
|
|
245
260
|
// We don't use Highcharts tooltip, but certain tooltip options such as tooltip.snap or tooltip.shared
|
|
246
261
|
// affect the hovering behavior of Highcharts. That is only the case when the tooltip is not disabled,
|
|
247
262
|
// so we render it, but hide with styles.
|
|
248
|
-
tooltip: (
|
|
263
|
+
tooltip: (_15 = options.tooltip) !== null && _15 !== void 0 ? _15 : { enabled: true, snap: Styles.tooltipSnap, style: { opacity: 0 } },
|
|
249
264
|
};
|
|
250
265
|
return (_jsxs(_Fragment, { children: [_jsx(ChartApplication, { api: api, keyboardNavigation: keyboardNavigation, ariaLabel: ariaLabel }), _jsx(HighchartsReact, { highcharts: highcharts, options: highchartsOptions, callback: (chart) => callback === null || callback === void 0 ? void 0 : callback({ chart, highcharts: highcharts, ...api.publicApi }) })] }));
|
|
251
|
-
}, navigator: navigator,
|
|
266
|
+
}, navigator: navigator, primaryLegend: context.legendEnabled && legendProps.primary ? (_jsx(ChartLegend, { ...commonLegendProps, ...legendProps.primary, className: testClasses["legend-primary"] })) : null, secondaryLegend: context.legendEnabled && legendProps.secondary ? (_jsx(ChartLegend, { ...commonLegendProps, ...legendProps.secondary, className: testClasses["legend-secondary"] })) : null, verticalAxisTitle: verticalAxisTitlePlacement === "top" ? _jsx(VerticalAxisTitle, { api: api, inverted: !!inverted }) : null, header: (header === null || header === void 0 ? void 0 : header.content) ? _jsx(ChartHeader, { children: header.content }) : null, footer: (footer === null || footer === void 0 ? void 0 : footer.content) ? _jsx(ChartFooter, { children: footer.content }) : null, filter: (filter === null || filter === void 0 ? void 0 : filter.seriesFilter) || (filter === null || filter === void 0 ? void 0 : filter.additionalFilters) ? (_jsx(ChartFilters, { api: api, seriesFilter: filter === null || filter === void 0 ? void 0 : filter.seriesFilter, additionalFilters: filter === null || filter === void 0 ? void 0 : filter.additionalFilters, i18nStrings: i18nStrings })) : null, noData: context.noDataEnabled && _jsx(ChartNoData, { ...noDataOptions, i18nStrings: i18nStrings, api: api }) }), context.tooltipEnabled && (_jsx(ChartTooltip, { ...tooltipOptions, i18nStrings: i18nStrings, getTooltipContent: rest.getTooltipContent, api: api }))] }));
|
|
252
267
|
}
|
|
253
268
|
function xAxisClassName(inverted, customClassName) {
|
|
254
269
|
return clsx(testClasses["axis-x"], inverted ? testClasses["axis-vertical"] : testClasses["axis-horizontal"], customClassName);
|
package/core/chart-core.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chart-core.js","sourceRoot":"","sources":["../../../src/core/chart-core.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 { useRef } from \"react\";\nimport clsx from \"clsx\";\nimport type Highcharts from \"highcharts\";\nimport HighchartsReact from \"highcharts-react-official\";\n\nimport { getIsRtl, useMergeRefs, useUniqueId } from \"@cloudscape-design/component-toolkit/internal\";\nimport { isDevelopment } from \"@cloudscape-design/component-toolkit/internal\";\nimport Spinner from \"@cloudscape-design/components/spinner\";\n\nimport { getDataAttributes } from \"../internal/base-component/get-data-attributes\";\nimport { InternalBaseComponentProps } from \"../internal/base-component/use-base-component\";\nimport * as Styles from \"../internal/chart-styles\";\nimport { castArray } from \"../internal/utils/utils\";\nimport { useChartAPI } from \"./chart-api\";\nimport { ChartContainer } from \"./chart-container\";\nimport { ChartApplication } from \"./components/core-application\";\nimport { ChartFilters } from \"./components/core-filters\";\nimport { ChartLegend } from \"./components/core-legend\";\nimport { ChartNoData } from \"./components/core-no-data\";\nimport { ChartFooter, ChartHeader } from \"./components/core-slots\";\nimport { ChartTooltip } from \"./components/core-tooltip\";\nimport { VerticalAxisTitle } from \"./components/core-vertical-axis-title\";\nimport { getFormatter } from \"./formatters\";\nimport { useChartI18n } from \"./i18n-utils\";\nimport { CoreChartProps } from \"./interfaces\";\nimport { getPointAccessibleDescription, hasVisibleLegendItems } from \"./utils\";\n\nimport styles from \"./styles.css.js\";\nimport testClasses from \"./test-classes/styles.css.js\";\n\n/**\n * CoreChart is the core internal abstraction that accepts the entire set of Highcharts options along\n * with Cloudscape props to define custom tooltip, no-data, formatters, items visibility, and more.\n */\nexport function InternalCoreChart({\n options,\n ariaLabel,\n ariaDescription,\n fitHeight,\n chartHeight,\n chartMinHeight,\n chartMinWidth,\n tooltip: tooltipOptions,\n noData: noDataOptions,\n navigator,\n legend: legendOptions,\n fallback = <Spinner />,\n callback,\n emphasizeBaseline = true,\n verticalAxisTitlePlacement = \"side\",\n i18nStrings,\n className,\n header,\n footer,\n filter,\n keyboardNavigation = true,\n onHighlight,\n onLegendItemHighlight,\n onClearHighlight,\n onVisibleItemsChange,\n visibleItems,\n __internalRootRef,\n ...rest\n}: CoreChartProps & InternalBaseComponentProps) {\n const highcharts = rest.highcharts as null | typeof Highcharts;\n const labels = useChartI18n({ ariaLabel, ariaDescription, i18nStrings });\n const context = {\n chartId: useUniqueId(),\n noDataEnabled: !!noDataOptions,\n legendEnabled: legendOptions?.enabled !== false,\n tooltipEnabled: tooltipOptions?.enabled !== false,\n keyboardNavigationEnabled: keyboardNavigation,\n labels,\n };\n const handlers = { onHighlight, onClearHighlight, onVisibleItemsChange };\n const state = { visibleItems };\n const api = useChartAPI(context, handlers, state);\n\n const rootClassName = clsx(testClasses.root, styles.root, fitHeight && styles[\"root-fit-height\"], className);\n const rootRef = useRef<HTMLDivElement>(null);\n const mergedRootRef = useMergeRefs(rootRef, __internalRootRef);\n const rootProps = { ref: mergedRootRef, className: rootClassName, ...getDataAttributes(rest) };\n const legendPosition = legendOptions?.position ?? \"bottom\";\n const containerProps = {\n fitHeight,\n chartHeight,\n chartMinHeight,\n chartMinWidth,\n legendPosition,\n verticalAxisTitlePlacement,\n legendBottomMaxHeight: legendOptions?.bottomMaxHeight,\n };\n\n // Render fallback using the same root and container props as for the chart to ensure consistent\n // size, test classes, and data-attributes assignment.\n if (!highcharts) {\n return (\n <div {...rootProps}>\n <ChartContainer\n {...containerProps}\n chart={(minHeight) => (\n <div className={testClasses.fallback} style={{ minHeight }}>\n {fallback}\n </div>\n )}\n />\n </div>\n );\n }\n\n const apiOptions = api.getOptions();\n const inverted = !!options.chart?.inverted;\n const isRtl = () => getIsRtl(rootRef?.current);\n return (\n <div {...rootProps}>\n <ChartContainer\n {...containerProps}\n chart={(height) => {\n // The Highcharts options takes all provided Highcharts options and custom properties and merges them together, so that\n // the Cloudscape features and custom Highcharts extensions co-exist.\n // For certain options we provide Cloudscape styling, but in all cases this can be explicitly overridden.\n const highchartsOptions: Highcharts.Options = {\n ...options,\n // Hide credits by default.\n credits: options.credits ?? { enabled: false },\n // Hide chart title by default.\n title: options.title ?? { text: \"\" },\n // Use Cloudscape color palette by default.\n // This cannot be reset to Highcharts' default from the outside, but it is possible to provide custom palette.\n colors: options.colors ?? Styles.colors,\n chart: {\n // Animations are disabled by default.\n // This is done for UX and a11y reasons as Highcharts animations do not match our animation timings, and do\n // not respect disabled motion settings. These issues can likely be resolved or we can provide custom animations\n // instead, but this is not a priority.\n animation: false,\n ...Styles.chart,\n ...options.chart,\n className: clsx(testClasses[\"chart-plot\"], options.chart?.className),\n // Use height computed from chartHeight, chartMinHeight, and fitHeight settings by default.\n // It is possible to override it by explicitly providing chart.height, but this will not be\n // compatible with any of the above settings.\n height: options.chart?.height ?? height,\n // The debug errors are enabled by default in development mode, but this only works\n // if the Highcharts debugger module is loaded.\n displayErrors: options.chart?.displayErrors ?? isDevelopment,\n style: { ...Styles.chartPlotCss, ...options.chart?.style },\n // We override certain chart events to inject additional behaviors, but it is still possible to define\n // custom callbacks. The Cloudscape behaviors can be disabled or altered via components API. For instance,\n // if no-data props are not provided - the related on-render computations will be skipped.\n events: {\n ...options.chart?.events,\n load(event) {\n apiOptions.onChartLoad.call(this, event);\n return options.chart?.events?.load?.call(this, event);\n },\n render(event) {\n apiOptions.onChartRender.call(this, event);\n return options.chart?.events?.render?.call(this, event);\n },\n click(event) {\n apiOptions.onChartClick.call(this, event);\n return options.chart?.events?.click?.call(this, event);\n },\n },\n },\n series: options.series,\n // Highcharts legend is disabled by default in favour of the custom Cloudscape legend.\n legend: options.legend ?? { enabled: false },\n lang: {\n ...options.lang,\n accessibility: {\n // The default chart title is disabled by default to prevent the default \"Chart\" in the screen-reader detail.\n defaultChartTitle: \"\",\n chartContainerLabel: labels.chartLabel,\n svgContainerLabel: labels.chartContainerLabel,\n // We used {names[0]} to inject the axis title, see: https://api.highcharts.com/highcharts/lang.accessibility.axis.xAxisDescriptionSingular.\n axis: {\n xAxisDescriptionSingular: labels.chartXAxisLabel\n ? `${labels.chartXAxisLabel}, {names[0]}`\n : undefined,\n yAxisDescriptionSingular: labels.chartYAxisLabel\n ? `${labels.chartYAxisLabel}, {names[0]}`\n : undefined,\n },\n ...options.lang?.accessibility,\n },\n },\n accessibility: {\n description: labels.chartDescription,\n screenReaderSection: {\n // We use custom before-message to remove detail that are currently not supported with our i18n.\n // See: https://api.highcharts.com/highcharts/accessibility.screenReaderSection.beforeChartFormat.\n beforeChartFormat: \"<div>{xAxisDescription}</div><div>{yAxisDescription}</div>\",\n // We hide after message as it is currently not supported with our i18n.\n afterChartFormat: \"\",\n },\n ...options.accessibility,\n // Highcharts keyboard navigation is disabled by default in favour of the custom Cloudscape navigation.\n keyboardNavigation: options.accessibility?.keyboardNavigation ?? { enabled: !keyboardNavigation },\n point: {\n // Point description formatter is overridden to respect custom axes value formatters.\n descriptionFormatter: (point) => getPointAccessibleDescription(point, labels),\n ...options.accessibility?.point,\n },\n },\n plotOptions: {\n ...options.plotOptions,\n series: {\n // Animations are disabled by default, same as in the options.chart.\n animation: false,\n // Sticky tracking is disabled by default due to sub-optimal UX in dense charts.\n stickyTracking: false,\n borderColor: Styles.seriesBorderColor,\n ...options.plotOptions?.series,\n dataLabels: { style: Styles.seriesDataLabelsCss, ...options.plotOptions?.series?.dataLabels },\n states: {\n ...options.plotOptions?.series?.states,\n inactive: { opacity: Styles.seriesOpacityInactive, ...options.plotOptions?.series?.states?.inactive },\n },\n // We override certain point events to inject additional behaviors, but it is still possible to define\n // custom callbacks. The Cloudscape behaviors can be disabled or altered via components API.\n point: {\n ...options.plotOptions?.series?.point,\n events: {\n ...options.plotOptions?.series?.point?.events,\n mouseOver(event) {\n apiOptions.onSeriesPointMouseOver.call(this, event);\n return options.plotOptions?.series?.point?.events?.mouseOver?.call(this, event);\n },\n mouseOut(event) {\n apiOptions.onSeriesPointMouseOut.call(this, event);\n return options.plotOptions?.series?.point?.events?.mouseOut?.call(this, event);\n },\n click(event) {\n apiOptions.onSeriesPointClick.call(this, event);\n return options.plotOptions?.series?.point?.events?.click?.call(this, event);\n },\n },\n },\n },\n area: { ...Styles.areaSeries, ...options.plotOptions?.area },\n areaspline: { ...Styles.areaSeries, ...options.plotOptions?.areaspline },\n arearange: { ...Styles.areaSeries, ...options.plotOptions?.arearange },\n areasplinerange: { ...Styles.areaSeries, ...options.plotOptions?.areasplinerange },\n line: { ...Styles.lineSeries, ...options.plotOptions?.line },\n spline: { ...Styles.lineSeries, ...options.plotOptions?.spline },\n column: { ...Styles.columnSeries, ...options.plotOptions?.column },\n errorbar: { ...Styles.errorbarSeries, ...options.plotOptions?.errorbar },\n // Pie chart is shown in legend by default, that is required for standalone pie charts.\n pie: {\n showInLegend: true,\n ...Styles.pieSeries,\n ...options.plotOptions?.pie,\n dataLabels: { ...Styles.pieSeriesDataLabels, ...options.plotOptions?.pie?.dataLabels },\n },\n },\n xAxis: castArray(options.xAxis)?.map((xAxisOptions) => ({\n ...Styles.xAxisOptions,\n ...xAxisOptions,\n // Depending on the chart.inverted the x-axis can be rendered as vertical, and needs to respect page direction.\n reversed: !inverted && isRtl() ? !xAxisOptions.reversed : xAxisOptions.reversed,\n opposite: inverted && isRtl() ? !xAxisOptions.opposite : xAxisOptions.opposite,\n className: xAxisClassName(inverted, xAxisOptions.className),\n title: axisTitle(xAxisOptions.title ?? {}, !inverted || verticalAxisTitlePlacement === \"side\"),\n labels: axisLabels(xAxisOptions.labels ?? {}),\n })),\n yAxis: castArray(options.yAxis)?.map((yAxisOptions) => ({\n ...Styles.yAxisOptions,\n ...yAxisOptions,\n // Depending on the chart.inverted the y-axis can be rendered as vertical, and needs to respect page direction.\n reversed: inverted && isRtl() ? !yAxisOptions.reversed : yAxisOptions.reversed,\n opposite: !inverted && isRtl() ? !yAxisOptions.opposite : yAxisOptions.opposite,\n className: yAxisClassName(inverted, yAxisOptions.className),\n title: axisTitle(yAxisOptions.title ?? {}, inverted || verticalAxisTitlePlacement === \"side\"),\n labels: axisLabels(yAxisOptions.labels ?? {}),\n plotLines: yAxisPlotLines(yAxisOptions.plotLines, emphasizeBaseline),\n // We use reversed stack by default so that the order of points in the tooltip and series in the legend\n // correspond the order of stacks.\n reversedStacks: yAxisOptions.reversedStacks ?? true,\n })),\n // We don't use Highcharts tooltip, but certain tooltip options such as tooltip.snap or tooltip.shared\n // affect the hovering behavior of Highcharts. That is only the case when the tooltip is not disabled,\n // so we render it, but hide with styles.\n tooltip: options.tooltip ?? { enabled: true, snap: Styles.tooltipSnap, style: { opacity: 0 } },\n };\n return (\n <>\n <ChartApplication api={api} keyboardNavigation={keyboardNavigation} ariaLabel={ariaLabel} />\n <HighchartsReact\n highcharts={highcharts}\n options={highchartsOptions}\n callback={(chart: Highcharts.Chart) =>\n callback?.({ chart, highcharts: highcharts as typeof Highcharts, ...api.publicApi })\n }\n />\n </>\n );\n }}\n navigator={navigator}\n legend={\n context.legendEnabled && hasVisibleLegendItems(options) ? (\n <ChartLegend\n {...legendOptions}\n position={legendPosition}\n api={api}\n i18nStrings={i18nStrings}\n onItemHighlight={onLegendItemHighlight}\n getLegendTooltipContent={rest.getLegendTooltipContent}\n />\n ) : null\n }\n verticalAxisTitle={\n verticalAxisTitlePlacement === \"top\" ? <VerticalAxisTitle api={api} inverted={!!inverted} /> : null\n }\n header={header?.content ? <ChartHeader>{header.content}</ChartHeader> : null}\n footer={footer?.content ? <ChartFooter>{footer.content}</ChartFooter> : null}\n filter={\n filter?.seriesFilter || filter?.additionalFilters ? (\n <ChartFilters\n api={api}\n seriesFilter={filter?.seriesFilter}\n additionalFilters={filter?.additionalFilters}\n i18nStrings={i18nStrings}\n />\n ) : null\n }\n noData={context.noDataEnabled && <ChartNoData {...noDataOptions} i18nStrings={i18nStrings} api={api} />}\n />\n\n {context.tooltipEnabled && (\n <ChartTooltip\n {...tooltipOptions}\n i18nStrings={i18nStrings}\n getTooltipContent={rest.getTooltipContent}\n api={api}\n />\n )}\n </div>\n );\n}\n\nfunction xAxisClassName(inverted: boolean, customClassName?: string) {\n return clsx(\n testClasses[\"axis-x\"],\n inverted ? testClasses[\"axis-vertical\"] : testClasses[\"axis-horizontal\"],\n customClassName,\n );\n}\n\nfunction yAxisClassName(inverted: boolean, customClassName?: string) {\n return clsx(\n testClasses[\"axis-y\"],\n inverted ? testClasses[\"axis-horizontal\"] : testClasses[\"axis-vertical\"],\n customClassName,\n );\n}\n\n// When placing vertical axis title in the chart's top, the actual axis title rendered by Highcharts\n// needs to be visually hidden (it is still accessible by screen-readers). We then set title's\n// opacity to 0, and use reserveSpace=false, so that Highcharts stretches the plot area to all available\n// container width.\nfunction axisTitle<O extends Highcharts.XAxisTitleOptions | Highcharts.YAxisTitleOptions>(\n options: O,\n visible: boolean,\n): O {\n return {\n style: { ...Styles.axisTitleCss, opacity: visible ? undefined : 0 },\n reserveSpace: visible ? undefined : false,\n ...options,\n };\n}\n\n// We use custom formatters instead of Highcharts defaults to ensure consistent formatting\n// between axis ticks and tooltip contents.\nfunction axisLabels<O extends Highcharts.XAxisLabelsOptions | Highcharts.YAxisLabelsOptions>(options: O): O {\n return {\n style: Styles.axisLabelsCss,\n formatter: function () {\n const formattedValue = getFormatter(this.axis)(this.value);\n return formattedValue.replace(/\\n/g, \"<br />\");\n },\n ...options,\n };\n}\n\nfunction yAxisPlotLines(\n plotLineOptions: Highcharts.YAxisPlotLinesOptions[] = [],\n emphasizeBaseline: boolean,\n): Highcharts.YAxisPlotLinesOptions[] {\n return emphasizeBaseline\n ? [{ value: 0, ...Styles.chatPlotBaseline, className: testClasses[\"emphasized-baseline\"] }, ...plotLineOptions]\n : plotLineOptions;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"chart-core.js","sourceRoot":"","sources":["../../../src/core/chart-core.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 { useRef } from \"react\";\nimport clsx from \"clsx\";\nimport type Highcharts from \"highcharts\";\nimport HighchartsReact from \"highcharts-react-official\";\n\nimport { getIsRtl, useMergeRefs, useUniqueId } from \"@cloudscape-design/component-toolkit/internal\";\nimport { isDevelopment } from \"@cloudscape-design/component-toolkit/internal\";\nimport Spinner from \"@cloudscape-design/components/spinner\";\n\nimport { getDataAttributes } from \"../internal/base-component/get-data-attributes\";\nimport { InternalBaseComponentProps } from \"../internal/base-component/use-base-component\";\nimport * as Styles from \"../internal/chart-styles\";\nimport { castArray } from \"../internal/utils/utils\";\nimport { useChartAPI } from \"./chart-api\";\nimport { ChartContainer } from \"./chart-container\";\nimport { ChartApplication } from \"./components/core-application\";\nimport { ChartFilters } from \"./components/core-filters\";\nimport { ChartLegend } from \"./components/core-legend\";\nimport { ChartNoData } from \"./components/core-no-data\";\nimport { ChartFooter, ChartHeader } from \"./components/core-slots\";\nimport { ChartTooltip } from \"./components/core-tooltip\";\nimport { VerticalAxisTitle } from \"./components/core-vertical-axis-title\";\nimport { getFormatter } from \"./formatters\";\nimport { useChartI18n } from \"./i18n-utils\";\nimport { CoreChartProps } from \"./interfaces\";\nimport { getLegendsProps, getPointAccessibleDescription } from \"./utils\";\n\nimport styles from \"./styles.css.js\";\nimport testClasses from \"./test-classes/styles.css.js\";\n\n/**\n * CoreChart is the core internal abstraction that accepts the entire set of Highcharts options along\n * with Cloudscape props to define custom tooltip, no-data, formatters, items visibility, and more.\n */\nexport function InternalCoreChart({\n options,\n ariaLabel,\n ariaDescription,\n fitHeight,\n chartHeight,\n chartMinHeight,\n chartMinWidth,\n tooltip: tooltipOptions,\n noData: noDataOptions,\n navigator,\n legend: legendOptions,\n fallback = <Spinner />,\n callback,\n emphasizeBaseline = true,\n verticalAxisTitlePlacement = \"side\",\n i18nStrings,\n className,\n header,\n footer,\n filter,\n keyboardNavigation = true,\n onHighlight,\n onLegendItemHighlight,\n onClearHighlight,\n onVisibleItemsChange,\n visibleItems,\n __internalRootRef,\n ...rest\n}: CoreChartProps & InternalBaseComponentProps) {\n const highcharts = rest.highcharts as null | typeof Highcharts;\n const labels = useChartI18n({ ariaLabel, ariaDescription, i18nStrings });\n const context = {\n chartId: useUniqueId(),\n noDataEnabled: !!noDataOptions,\n legendEnabled: legendOptions?.enabled !== false,\n tooltipEnabled: tooltipOptions?.enabled !== false,\n keyboardNavigationEnabled: keyboardNavigation,\n labels,\n };\n const handlers = { onHighlight, onClearHighlight, onVisibleItemsChange };\n const state = { visibleItems };\n const api = useChartAPI(context, handlers, state);\n\n const rootClassName = clsx(testClasses.root, styles.root, fitHeight && styles[\"root-fit-height\"], className);\n const rootRef = useRef<HTMLDivElement>(null);\n const mergedRootRef = useMergeRefs(rootRef, __internalRootRef);\n const rootProps = { ref: mergedRootRef, className: rootClassName, ...getDataAttributes(rest) };\n const legendPosition = legendOptions?.position ?? \"bottom\";\n const commonLegendProps = {\n api: api,\n i18nStrings,\n onItemHighlight: onLegendItemHighlight,\n getLegendTooltipContent: rest.getLegendTooltipContent,\n };\n const containerProps = {\n fitHeight,\n chartHeight,\n chartMinHeight,\n chartMinWidth,\n legendPosition,\n verticalAxisTitlePlacement,\n legendBottomMaxHeight: legendOptions?.bottomMaxHeight,\n };\n\n // Render fallback using the same root and container props as for the chart to ensure consistent\n // size, test classes, and data-attributes assignment.\n if (!highcharts) {\n return (\n <div {...rootProps}>\n <ChartContainer\n {...containerProps}\n chart={(minHeight) => (\n <div className={testClasses.fallback} style={{ minHeight }}>\n {fallback}\n </div>\n )}\n />\n </div>\n );\n }\n\n const apiOptions = api.getOptions();\n const inverted = !!options.chart?.inverted;\n const isRtl = getIsRtl(rootRef?.current);\n\n // Compute RTL-adjusted options that will be used for both legend positioning and chart rendering\n const rtlAdjustedOptions: Highcharts.Options = {\n ...options,\n xAxis: castArray(options.xAxis)?.map((xAxisOptions) => ({\n ...Styles.xAxisOptions,\n ...xAxisOptions,\n // Depending on the chart.inverted the x-axis can be rendered as vertical, and needs to respect page direction.\n reversed: !inverted && isRtl ? !xAxisOptions.reversed : xAxisOptions.reversed,\n opposite: inverted && isRtl ? !xAxisOptions.opposite : xAxisOptions.opposite,\n className: xAxisClassName(inverted, xAxisOptions.className),\n title: axisTitle(xAxisOptions.title ?? {}, !inverted || verticalAxisTitlePlacement === \"side\"),\n labels: axisLabels(xAxisOptions.labels ?? {}),\n })),\n yAxis: castArray(options.yAxis)?.map((yAxisOptions) => ({\n ...Styles.yAxisOptions,\n ...yAxisOptions,\n // Depending on the chart.inverted the y-axis can be rendered as vertical, and needs to respect page direction.\n reversed: inverted && isRtl ? !yAxisOptions.reversed : yAxisOptions.reversed,\n opposite: !inverted && isRtl ? !yAxisOptions.opposite : yAxisOptions.opposite,\n className: yAxisClassName(inverted, yAxisOptions.className),\n title: axisTitle(yAxisOptions.title ?? {}, inverted || verticalAxisTitlePlacement === \"side\"),\n labels: axisLabels(yAxisOptions.labels ?? {}),\n plotLines: yAxisPlotLines(yAxisOptions.plotLines, emphasizeBaseline),\n // We use reversed stack by default so that the order of points in the tooltip and series in the legend\n // correspond the order of stacks.\n reversedStacks: yAxisOptions.reversedStacks ?? true,\n })),\n };\n\n const legendProps = getLegendsProps(rtlAdjustedOptions, legendOptions);\n\n return (\n <div {...rootProps}>\n <ChartContainer\n {...containerProps}\n chart={(height) => {\n // The Highcharts options takes all provided Highcharts options and custom properties and merges them together, so that\n // the Cloudscape features and custom Highcharts extensions co-exist.\n // For certain options we provide Cloudscape styling, but in all cases this can be explicitly overridden.\n // We use the rtl adjusted axes (instead of the original options.xAxis/yAxis) to ensure the chart renders\n // with the correct axis orientation for RTL layouts, matching what was used for legend positioning above.\n const highchartsOptions: Highcharts.Options = {\n ...options,\n xAxis: rtlAdjustedOptions.xAxis,\n yAxis: rtlAdjustedOptions.yAxis,\n // Hide credits by default.\n credits: options.credits ?? { enabled: false },\n // Hide chart title by default.\n title: options.title ?? { text: \"\" },\n // Use Cloudscape color palette by default.\n // This cannot be reset to Highcharts' default from the outside, but it is possible to provide custom palette.\n colors: options.colors ?? Styles.colors,\n chart: {\n // Animations are disabled by default.\n // This is done for UX and a11y reasons as Highcharts animations do not match our animation timings, and do\n // not respect disabled motion settings. These issues can likely be resolved or we can provide custom animations\n // instead, but this is not a priority.\n animation: false,\n ...Styles.chart,\n ...options.chart,\n className: clsx(testClasses[\"chart-plot\"], options.chart?.className),\n // Use height computed from chartHeight, chartMinHeight, and fitHeight settings by default.\n // It is possible to override it by explicitly providing chart.height, but this will not be\n // compatible with any of the above settings.\n height: options.chart?.height ?? height,\n // The debug errors are enabled by default in development mode, but this only works\n // if the Highcharts debugger module is loaded.\n displayErrors: options.chart?.displayErrors ?? isDevelopment,\n style: { ...Styles.chartPlotCss, ...options.chart?.style },\n // We override certain chart events to inject additional behaviors, but it is still possible to define\n // custom callbacks. The Cloudscape behaviors can be disabled or altered via components API. For instance,\n // if no-data props are not provided - the related on-render computations will be skipped.\n events: {\n ...options.chart?.events,\n load(event) {\n apiOptions.onChartLoad.call(this, event);\n return options.chart?.events?.load?.call(this, event);\n },\n render(event) {\n apiOptions.onChartRender.call(this, event);\n return options.chart?.events?.render?.call(this, event);\n },\n click(event) {\n apiOptions.onChartClick.call(this, event);\n return options.chart?.events?.click?.call(this, event);\n },\n },\n },\n series: options.series,\n // Highcharts legend is disabled by default in favour of the custom Cloudscape legend.\n legend: options.legend ?? { enabled: false },\n lang: {\n ...options.lang,\n accessibility: {\n // The default chart title is disabled by default to prevent the default \"Chart\" in the screen-reader detail.\n defaultChartTitle: \"\",\n chartContainerLabel: labels.chartLabel,\n svgContainerLabel: labels.chartContainerLabel,\n // We used {names[0]} to inject the axis title, see: https://api.highcharts.com/highcharts/lang.accessibility.axis.xAxisDescriptionSingular.\n axis: {\n xAxisDescriptionSingular: labels.chartXAxisLabel\n ? `${labels.chartXAxisLabel}, {names[0]}`\n : undefined,\n yAxisDescriptionSingular: labels.chartYAxisLabel\n ? `${labels.chartYAxisLabel}, {names[0]}`\n : undefined,\n },\n ...options.lang?.accessibility,\n },\n },\n accessibility: {\n description: labels.chartDescription,\n screenReaderSection: {\n // We use custom before-message to remove detail that are currently not supported with our i18n.\n // See: https://api.highcharts.com/highcharts/accessibility.screenReaderSection.beforeChartFormat.\n beforeChartFormat: \"<div>{xAxisDescription}</div><div>{yAxisDescription}</div>\",\n // We hide after message as it is currently not supported with our i18n.\n afterChartFormat: \"\",\n },\n ...options.accessibility,\n // Highcharts keyboard navigation is disabled by default in favour of the custom Cloudscape navigation.\n keyboardNavigation: options.accessibility?.keyboardNavigation ?? { enabled: !keyboardNavigation },\n point: {\n // Point description formatter is overridden to respect custom axes value formatters.\n descriptionFormatter: (point) => getPointAccessibleDescription(point, labels),\n ...options.accessibility?.point,\n },\n },\n plotOptions: {\n ...options.plotOptions,\n series: {\n // Animations are disabled by default, same as in the options.chart.\n animation: false,\n // Sticky tracking is disabled by default due to sub-optimal UX in dense charts.\n stickyTracking: false,\n borderColor: Styles.seriesBorderColor,\n ...options.plotOptions?.series,\n dataLabels: { style: Styles.seriesDataLabelsCss, ...options.plotOptions?.series?.dataLabels },\n states: {\n ...options.plotOptions?.series?.states,\n inactive: { opacity: Styles.seriesOpacityInactive, ...options.plotOptions?.series?.states?.inactive },\n },\n // We override certain point events to inject additional behaviors, but it is still possible to define\n // custom callbacks. The Cloudscape behaviors can be disabled or altered via components API.\n point: {\n ...options.plotOptions?.series?.point,\n events: {\n ...options.plotOptions?.series?.point?.events,\n mouseOver(event) {\n apiOptions.onSeriesPointMouseOver.call(this, event);\n return options.plotOptions?.series?.point?.events?.mouseOver?.call(this, event);\n },\n mouseOut(event) {\n apiOptions.onSeriesPointMouseOut.call(this, event);\n return options.plotOptions?.series?.point?.events?.mouseOut?.call(this, event);\n },\n click(event) {\n apiOptions.onSeriesPointClick.call(this, event);\n return options.plotOptions?.series?.point?.events?.click?.call(this, event);\n },\n },\n },\n },\n area: { ...Styles.areaSeries, ...options.plotOptions?.area },\n areaspline: { ...Styles.areaSeries, ...options.plotOptions?.areaspline },\n arearange: { ...Styles.areaSeries, ...options.plotOptions?.arearange },\n areasplinerange: { ...Styles.areaSeries, ...options.plotOptions?.areasplinerange },\n line: { ...Styles.lineSeries, ...options.plotOptions?.line },\n spline: { ...Styles.lineSeries, ...options.plotOptions?.spline },\n column: { ...Styles.columnSeries, ...options.plotOptions?.column },\n errorbar: { ...Styles.errorbarSeries, ...options.plotOptions?.errorbar },\n // Pie chart is shown in legend by default, that is required for standalone pie charts.\n pie: {\n showInLegend: true,\n ...Styles.pieSeries,\n ...options.plotOptions?.pie,\n dataLabels: { ...Styles.pieSeriesDataLabels, ...options.plotOptions?.pie?.dataLabels },\n },\n },\n // We don't use Highcharts tooltip, but certain tooltip options such as tooltip.snap or tooltip.shared\n // affect the hovering behavior of Highcharts. That is only the case when the tooltip is not disabled,\n // so we render it, but hide with styles.\n tooltip: options.tooltip ?? { enabled: true, snap: Styles.tooltipSnap, style: { opacity: 0 } },\n };\n return (\n <>\n <ChartApplication api={api} keyboardNavigation={keyboardNavigation} ariaLabel={ariaLabel} />\n <HighchartsReact\n highcharts={highcharts}\n options={highchartsOptions}\n callback={(chart: Highcharts.Chart) =>\n callback?.({ chart, highcharts: highcharts as typeof Highcharts, ...api.publicApi })\n }\n />\n </>\n );\n }}\n navigator={navigator}\n primaryLegend={\n context.legendEnabled && legendProps.primary ? (\n <ChartLegend {...commonLegendProps} {...legendProps.primary} className={testClasses[\"legend-primary\"]} />\n ) : null\n }\n secondaryLegend={\n context.legendEnabled && legendProps.secondary ? (\n <ChartLegend\n {...commonLegendProps}\n {...legendProps.secondary}\n className={testClasses[\"legend-secondary\"]}\n />\n ) : null\n }\n verticalAxisTitle={\n verticalAxisTitlePlacement === \"top\" ? <VerticalAxisTitle api={api} inverted={!!inverted} /> : null\n }\n header={header?.content ? <ChartHeader>{header.content}</ChartHeader> : null}\n footer={footer?.content ? <ChartFooter>{footer.content}</ChartFooter> : null}\n filter={\n filter?.seriesFilter || filter?.additionalFilters ? (\n <ChartFilters\n api={api}\n seriesFilter={filter?.seriesFilter}\n additionalFilters={filter?.additionalFilters}\n i18nStrings={i18nStrings}\n />\n ) : null\n }\n noData={context.noDataEnabled && <ChartNoData {...noDataOptions} i18nStrings={i18nStrings} api={api} />}\n />\n\n {context.tooltipEnabled && (\n <ChartTooltip\n {...tooltipOptions}\n i18nStrings={i18nStrings}\n getTooltipContent={rest.getTooltipContent}\n api={api}\n />\n )}\n </div>\n );\n}\n\nfunction xAxisClassName(inverted: boolean, customClassName?: string) {\n return clsx(\n testClasses[\"axis-x\"],\n inverted ? testClasses[\"axis-vertical\"] : testClasses[\"axis-horizontal\"],\n customClassName,\n );\n}\n\nfunction yAxisClassName(inverted: boolean, customClassName?: string) {\n return clsx(\n testClasses[\"axis-y\"],\n inverted ? testClasses[\"axis-horizontal\"] : testClasses[\"axis-vertical\"],\n customClassName,\n );\n}\n\n// When placing vertical axis title in the chart's top, the actual axis title rendered by Highcharts\n// needs to be visually hidden (it is still accessible by screen-readers). We then set title's\n// opacity to 0, and use reserveSpace=false, so that Highcharts stretches the plot area to all available\n// container width.\nfunction axisTitle<O extends Highcharts.XAxisTitleOptions | Highcharts.YAxisTitleOptions>(\n options: O,\n visible: boolean,\n): O {\n return {\n style: { ...Styles.axisTitleCss, opacity: visible ? undefined : 0 },\n reserveSpace: visible ? undefined : false,\n ...options,\n };\n}\n\n// We use custom formatters instead of Highcharts defaults to ensure consistent formatting\n// between axis ticks and tooltip contents.\nfunction axisLabels<O extends Highcharts.XAxisLabelsOptions | Highcharts.YAxisLabelsOptions>(options: O): O {\n return {\n style: Styles.axisLabelsCss,\n formatter: function () {\n const formattedValue = getFormatter(this.axis)(this.value);\n return formattedValue.replace(/\\n/g, \"<br />\");\n },\n ...options,\n };\n}\n\nfunction yAxisPlotLines(\n plotLineOptions: Highcharts.YAxisPlotLinesOptions[] = [],\n emphasizeBaseline: boolean,\n): Highcharts.YAxisPlotLinesOptions[] {\n return emphasizeBaseline\n ? [{ value: 0, ...Styles.chatPlotBaseline, className: testClasses[\"emphasized-baseline\"] }, ...plotLineOptions]\n : plotLineOptions;\n}\n"]}
|
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
2
|
import { NonCancelableEventHandler } from "../../internal/events";
|
|
3
3
|
import { ChartAPI } from "../chart-api";
|
|
4
|
-
import {
|
|
5
|
-
export declare function ChartLegend({ api, title, actions,
|
|
4
|
+
import { CoreChartProps, CoreI18nStrings } from "../interfaces";
|
|
5
|
+
export declare function ChartLegend({ api, title, actions, alignment, className, isSecondary, i18nStrings, onItemHighlight, getLegendTooltipContent, horizontalAlignment, }: {
|
|
6
6
|
api: ChartAPI;
|
|
7
7
|
title?: string;
|
|
8
|
+
className?: string;
|
|
9
|
+
isSecondary: boolean;
|
|
8
10
|
actions?: React.ReactNode;
|
|
9
|
-
|
|
10
|
-
horizontalAlignment?:
|
|
11
|
-
i18nStrings?:
|
|
11
|
+
alignment: "horizontal" | "vertical";
|
|
12
|
+
horizontalAlignment?: "start" | "center" | "end";
|
|
13
|
+
i18nStrings?: CoreI18nStrings;
|
|
12
14
|
onItemHighlight?: NonCancelableEventHandler<CoreChartProps.LegendItemHighlightDetail>;
|
|
13
15
|
getLegendTooltipContent?: CoreChartProps.GetLegendTooltipContent;
|
|
14
16
|
}): import("react/jsx-runtime").JSX.Element | null;
|
|
@@ -5,15 +5,45 @@ import { useInternalI18n } from "@cloudscape-design/components/internal/do-not-u
|
|
|
5
5
|
import { ChartLegend as ChartLegendComponent } from "../../internal/components/chart-legend";
|
|
6
6
|
import { fireNonCancelableEvent } from "../../internal/events";
|
|
7
7
|
import { useSelector } from "../../internal/utils/async-store";
|
|
8
|
-
export function ChartLegend({ api, title, actions,
|
|
8
|
+
export function ChartLegend({ api, title, actions, alignment, className, isSecondary, i18nStrings, onItemHighlight, getLegendTooltipContent, horizontalAlignment = "start", }) {
|
|
9
9
|
const i18n = useInternalI18n("[charts]");
|
|
10
|
-
const
|
|
10
|
+
const legendAriaLabel = i18n("i18nStrings.legendAriaLabel", i18nStrings === null || i18nStrings === void 0 ? void 0 : i18nStrings.legendAriaLabel);
|
|
11
|
+
// There's currently no builtin property for the secondary ARIA
|
|
12
|
+
// label, it must be explicitly provided by the consumers.
|
|
13
|
+
const secondaryLegendAriaLabel = i18nStrings === null || i18nStrings === void 0 ? void 0 : i18nStrings.secondaryLegendAriaLabel;
|
|
14
|
+
const ariaLabel = isSecondary ? secondaryLegendAriaLabel : legendAriaLabel;
|
|
11
15
|
const legendItems = useSelector(api.legendStore, (s) => s.items);
|
|
16
|
+
const someHighlighted = legendItems.some((item) => item.highlighted);
|
|
12
17
|
const isChartTooltipPinned = useSelector(api.tooltipStore, (s) => s.pinned);
|
|
13
|
-
|
|
18
|
+
const filteredItems = isSecondary
|
|
19
|
+
? legendItems.filter((item) => item.isSecondary)
|
|
20
|
+
: legendItems.filter((item) => !item.isSecondary);
|
|
21
|
+
const onToggleItem = (itemId) => {
|
|
22
|
+
const visibleItems = legendItems.filter((i) => i.visible).map((i) => i.id);
|
|
23
|
+
if (visibleItems.includes(itemId)) {
|
|
24
|
+
api.onItemVisibilityChange(visibleItems.filter((visibleItemId) => visibleItemId !== itemId));
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
api.onItemVisibilityChange([...visibleItems, itemId]);
|
|
28
|
+
}
|
|
29
|
+
// Needed for touch devices.
|
|
30
|
+
api.onClearChartItemsHighlight();
|
|
31
|
+
};
|
|
32
|
+
const onSelectItem = (itemId) => {
|
|
33
|
+
const visibleItems = legendItems.filter((i) => i.visible).map((i) => i.id);
|
|
34
|
+
if (visibleItems.length === 1 && visibleItems[0] === itemId) {
|
|
35
|
+
api.onItemVisibilityChange(legendItems.map((i) => i.id));
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
api.onItemVisibilityChange([itemId]);
|
|
39
|
+
}
|
|
40
|
+
// Needed for touch devices.
|
|
41
|
+
api.onClearChartItemsHighlight();
|
|
42
|
+
};
|
|
43
|
+
if (filteredItems.length === 0) {
|
|
14
44
|
return null;
|
|
15
45
|
}
|
|
16
|
-
return (_jsx(ChartLegendComponent, { ariaLabel: ariaLabel, legendTitle: title, items:
|
|
46
|
+
return (_jsx(ChartLegendComponent, { ariaLabel: ariaLabel, className: className, legendTitle: title, items: filteredItems, someHighlighted: someHighlighted, horizontalAlignment: horizontalAlignment, actions: actions, alignment: alignment, onToggleItem: onToggleItem, onSelectItem: onSelectItem, onItemHighlightExit: api.onClearChartItemsHighlight, onItemHighlightEnter: (item) => {
|
|
17
47
|
api.onHighlightChartItems([item.id]);
|
|
18
48
|
fireNonCancelableEvent(onItemHighlight, { item });
|
|
19
49
|
}, getTooltipContent: (props) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core-legend.js","sourceRoot":"","sources":["../../../../src/core/components/core-legend.tsx"],"names":[],"mappings":";AAAA,qEAAqE;AACrE,sCAAsC;AAEtC,OAAO,EAAE,eAAe,EAAE,MAAM,wDAAwD,CAAC;AAEzF,OAAO,EAAE,WAAW,IAAI,oBAAoB,EAAE,MAAM,wCAAwC,CAAC;AAC7F,OAAO,EAAE,sBAAsB,EAA6B,MAAM,uBAAuB,CAAC;AAC1F,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAI/D,MAAM,UAAU,WAAW,CAAC,EAC1B,GAAG,EACH,KAAK,EACL,OAAO,EACP,
|
|
1
|
+
{"version":3,"file":"core-legend.js","sourceRoot":"","sources":["../../../../src/core/components/core-legend.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 { useInternalI18n } from \"@cloudscape-design/components/internal/do-not-use/i18n\";\n\nimport { ChartLegend as ChartLegendComponent } from \"../../internal/components/chart-legend\";\nimport { fireNonCancelableEvent, NonCancelableEventHandler } from \"../../internal/events\";\nimport { useSelector } from \"../../internal/utils/async-store\";\nimport { ChartAPI } from \"../chart-api\";\nimport { CoreChartProps, CoreI18nStrings } from \"../interfaces\";\n\nexport function ChartLegend({\n api,\n title,\n actions,\n alignment,\n className,\n isSecondary,\n i18nStrings,\n onItemHighlight,\n getLegendTooltipContent,\n horizontalAlignment = \"start\",\n}: {\n api: ChartAPI;\n title?: string;\n className?: string;\n isSecondary: boolean;\n actions?: React.ReactNode;\n alignment: \"horizontal\" | \"vertical\";\n horizontalAlignment?: \"start\" | \"center\" | \"end\";\n i18nStrings?: CoreI18nStrings;\n onItemHighlight?: NonCancelableEventHandler<CoreChartProps.LegendItemHighlightDetail>;\n getLegendTooltipContent?: CoreChartProps.GetLegendTooltipContent;\n}) {\n const i18n = useInternalI18n(\"[charts]\");\n const legendAriaLabel = i18n(\"i18nStrings.legendAriaLabel\", i18nStrings?.legendAriaLabel);\n // There's currently no builtin property for the secondary ARIA\n // label, it must be explicitly provided by the consumers.\n const secondaryLegendAriaLabel = i18nStrings?.secondaryLegendAriaLabel;\n const ariaLabel = isSecondary ? secondaryLegendAriaLabel : legendAriaLabel;\n\n const legendItems = useSelector(api.legendStore, (s) => s.items);\n const someHighlighted = legendItems.some((item) => item.highlighted);\n const isChartTooltipPinned = useSelector(api.tooltipStore, (s) => s.pinned);\n const filteredItems = isSecondary\n ? legendItems.filter((item) => item.isSecondary)\n : legendItems.filter((item) => !item.isSecondary);\n\n const onToggleItem = (itemId: string) => {\n const visibleItems = legendItems.filter((i) => i.visible).map((i) => i.id);\n if (visibleItems.includes(itemId)) {\n api.onItemVisibilityChange(visibleItems.filter((visibleItemId) => visibleItemId !== itemId));\n } else {\n api.onItemVisibilityChange([...visibleItems, itemId]);\n }\n // Needed for touch devices.\n api.onClearChartItemsHighlight();\n };\n\n const onSelectItem = (itemId: string) => {\n const visibleItems = legendItems.filter((i) => i.visible).map((i) => i.id);\n if (visibleItems.length === 1 && visibleItems[0] === itemId) {\n api.onItemVisibilityChange(legendItems.map((i) => i.id));\n } else {\n api.onItemVisibilityChange([itemId]);\n }\n // Needed for touch devices.\n api.onClearChartItemsHighlight();\n };\n\n if (filteredItems.length === 0) {\n return null;\n }\n return (\n <ChartLegendComponent\n ariaLabel={ariaLabel}\n className={className}\n legendTitle={title}\n items={filteredItems}\n someHighlighted={someHighlighted}\n horizontalAlignment={horizontalAlignment}\n actions={actions}\n alignment={alignment}\n onToggleItem={onToggleItem}\n onSelectItem={onSelectItem}\n onItemHighlightExit={api.onClearChartItemsHighlight}\n onItemHighlightEnter={(item) => {\n api.onHighlightChartItems([item.id]);\n fireNonCancelableEvent(onItemHighlight, { item });\n }}\n getTooltipContent={(props) => {\n if (isChartTooltipPinned) {\n return null;\n }\n return getLegendTooltipContent?.(props) ?? null;\n }}\n />\n );\n}\n"]}
|