@neo4j-ndl/react-charts 1.3.1-alpha.c774957.15.1 → 1.3.2
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/lib/cjs/charts/ChartTooltip.js +2 -2
- package/lib/cjs/charts/ChartTooltip.js.map +1 -1
- package/lib/cjs/charts/utils/legend-utils.js +2 -2
- package/lib/cjs/charts/utils/legend-utils.js.map +1 -1
- package/lib/cjs/charts/utils/user-option-utils.js +8 -8
- package/lib/cjs/charts/utils/user-option-utils.js.map +1 -1
- package/lib/esm/charts/ChartTooltip.js +2 -2
- package/lib/esm/charts/ChartTooltip.js.map +1 -1
- package/lib/esm/charts/utils/legend-utils.js +2 -2
- package/lib/esm/charts/utils/legend-utils.js.map +1 -1
- package/lib/esm/charts/utils/user-option-utils.js +8 -8
- package/lib/esm/charts/utils/user-option-utils.js.map +1 -1
- package/package.json +4 -6
|
@@ -48,10 +48,10 @@ const ChartTooltipTitle = function ChartTooltipTitle({ children, ref, }) {
|
|
|
48
48
|
};
|
|
49
49
|
const ChartTooltipContent = function ChartTooltipContent({ leadingElement, trailingElement, indentSquareColor, notifications, ref, }) {
|
|
50
50
|
const classes = (0, classnames_1.default)(`ndl-charts-chart-tooltip-content`);
|
|
51
|
-
return ((0, jsx_runtime_1.jsxs)("div", { ref: ref, className: classes, children: [(0, jsx_runtime_1.jsxs)("div", { className: "ndl-charts-chart-tooltip-content-line", children: [indentSquareColor && ((0, jsx_runtime_1.jsx)("div", { className: "ndl-charts-chart-tooltip-content-indent-square", style: { backgroundColor: indentSquareColor } })), leadingElement && ((0, jsx_runtime_1.jsx)(react_1.Typography, { variant: trailingElement ? 'body-medium' : 'label', className: "ndl-charts-chart-tooltip-content-left-element", children: leadingElement })), trailingElement && ((0, jsx_runtime_1.jsx)(react_1.Typography, { variant: "
|
|
51
|
+
return ((0, jsx_runtime_1.jsxs)("div", { ref: ref, className: classes, children: [(0, jsx_runtime_1.jsxs)("div", { className: "ndl-charts-chart-tooltip-content-line", children: [indentSquareColor && ((0, jsx_runtime_1.jsx)("div", { className: "ndl-charts-chart-tooltip-content-indent-square", style: { backgroundColor: indentSquareColor } })), leadingElement && ((0, jsx_runtime_1.jsx)(react_1.Typography, { variant: trailingElement ? 'body-medium' : 'label', className: "ndl-charts-chart-tooltip-content-left-element", children: leadingElement })), trailingElement && ((0, jsx_runtime_1.jsx)(react_1.Typography, { variant: "label", className: "ndl-charts-chart-tooltip-content-trailing-element", children: trailingElement }))] }), notifications &&
|
|
52
52
|
notifications.map((notification) => {
|
|
53
53
|
const { id, notificationType, leadingElement, trailingElement } = notification;
|
|
54
|
-
return ((0, jsx_runtime_1.jsxs)("div", { className: `ndl-charts-chart-tooltip-content-notification ndl-notification-${notificationType}`, children: [(0, jsx_runtime_1.jsx)(react_1.StatusIndicator, { variant: notificationType }), (0, jsx_runtime_1.jsx)(react_1.Typography, { variant: "body-medium", className: "ndl-charts-chart-tooltip-content-notification-left-element", children: leadingElement }), (0, jsx_runtime_1.jsx)(react_1.Typography, { variant: "
|
|
54
|
+
return ((0, jsx_runtime_1.jsxs)("div", { className: `ndl-charts-chart-tooltip-content-notification ndl-notification-${notificationType}`, children: [(0, jsx_runtime_1.jsx)(react_1.StatusIndicator, { variant: notificationType }), (0, jsx_runtime_1.jsx)(react_1.Typography, { variant: "body-medium", className: "ndl-charts-chart-tooltip-content-notification-left-element", children: leadingElement }), (0, jsx_runtime_1.jsx)(react_1.Typography, { variant: "label", className: "ndl-charts-chart-tooltip-content-notification-trailing-element", children: trailingElement })] }, `notification-${id}`));
|
|
55
55
|
})] }));
|
|
56
56
|
};
|
|
57
57
|
const ChartTooltipLink = function ChartTooltipAction(_a) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChartTooltip.js","sourceRoot":"","sources":["../../../src/charts/ChartTooltip.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,4CAK0B;AAC1B,4DAAoC;AAQ7B,MAAM,qBAAqB,GAAG,SAAS,qBAAqB,CAAC,EAClE,QAAQ,EACR,MAAM,EACN,KAAK,EACL,cAAc,EACd,GAAG,GACe;IAClB,OAAO,CACL,uBAAC,eAAO,IACN,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,cAAc,EAC9B,SAAS,EAAC,yBAAyB,YAEnC,uBAAC,eAAO,CAAC,OAAO,IAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,YACpC,QAAQ,GACO,GACV,CACX,CAAC;AACJ,CAAC,CAAC;AAlBW,QAAA,qBAAqB,yBAkBhC;AAOF,MAAM,iBAAiB,GAAG,SAAS,iBAAiB,CAAC,EACnD,QAAQ,EACR,GAAG,GACoB;IACvB,MAAM,OAAO,GAAG,IAAA,oBAAU,EAAC,gCAAgC,CAAC,CAAC;IAE7D,OAAO,CACL,uBAAC,kBAAU,IAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAC,YAAY,EAAC,SAAS,EAAE,OAAO,YAC1D,QAAQ,GACE,CACd,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,SAAS,mBAAmB,CAAC,EACvD,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,aAAa,EACb,GAAG,GACsB;IACzB,MAAM,OAAO,GAAG,IAAA,oBAAU,EAAC,kCAAkC,CAAC,CAAC;IAE/D,OAAO,CACL,iCAAK,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,OAAO,aAC/B,iCAAK,SAAS,EAAC,uCAAuC,aACnD,iBAAiB,IAAI,CACpB,gCACE,SAAS,EAAC,gDAAgD,EAC1D,KAAK,EAAE,EAAE,eAAe,EAAE,iBAAiB,EAAE,GAC7C,CACH,EACA,cAAc,IAAI,CACjB,uBAAC,kBAAU,IACT,OAAO,EAAE,eAAe,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,EAClD,SAAS,EAAC,+CAA+C,YAExD,cAAc,GACJ,CACd,EACA,eAAe,IAAI,CAClB,uBAAC,kBAAU,IACT,OAAO,EAAC,
|
|
1
|
+
{"version":3,"file":"ChartTooltip.js","sourceRoot":"","sources":["../../../src/charts/ChartTooltip.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\n *\n * Copyright (c) \"Neo4j\"\n * Neo4j Sweden AB [http://neo4j.com]\n *\n * This file is part of Neo4j.\n *\n * Neo4j is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\nimport {\n Popover,\n StatusIndicator,\n TextLink,\n Typography,\n} from '@neo4j-ndl/react';\nimport classNames from 'classnames';\nimport type React from 'react';\n\nimport {\n type ChartTooltipContentProps,\n type ChartTooltipProps,\n} from './utils/chart-types';\n\nexport const ChartTooltipComponent = function ChartTooltipComponent({\n children,\n isOpen,\n style,\n anchorPosition,\n ref,\n}: ChartTooltipProps) {\n return (\n <Popover\n isOpen={isOpen}\n anchorPosition={anchorPosition}\n placement=\"middle-end-middle-start\"\n >\n <Popover.Content ref={ref} style={style}>\n {children}\n </Popover.Content>\n </Popover>\n );\n};\n\ntype ChartTooltipTitleProps = {\n children: React.ReactNode;\n ref?: React.Ref<HTMLSpanElement>;\n};\n\nconst ChartTooltipTitle = function ChartTooltipTitle({\n children,\n ref,\n}: ChartTooltipTitleProps) {\n const classes = classNames(`ndl-charts-chart-tooltip-title`);\n\n return (\n <Typography ref={ref} variant=\"body-small\" className={classes}>\n {children}\n </Typography>\n );\n};\n\nconst ChartTooltipContent = function ChartTooltipContent({\n leadingElement,\n trailingElement,\n indentSquareColor,\n notifications,\n ref,\n}: ChartTooltipContentProps) {\n const classes = classNames(`ndl-charts-chart-tooltip-content`);\n\n return (\n <div ref={ref} className={classes}>\n <div className=\"ndl-charts-chart-tooltip-content-line\">\n {indentSquareColor && (\n <div\n className=\"ndl-charts-chart-tooltip-content-indent-square\"\n style={{ backgroundColor: indentSquareColor }}\n />\n )}\n {leadingElement && (\n <Typography\n variant={trailingElement ? 'body-medium' : 'label'}\n className=\"ndl-charts-chart-tooltip-content-left-element\"\n >\n {leadingElement}\n </Typography>\n )}\n {trailingElement && (\n <Typography\n variant=\"label\"\n className=\"ndl-charts-chart-tooltip-content-trailing-element\"\n >\n {trailingElement}\n </Typography>\n )}\n </div>\n\n {notifications &&\n notifications.map((notification) => {\n const { id, notificationType, leadingElement, trailingElement } =\n notification;\n\n return (\n <div\n key={`notification-${id}`}\n className={`ndl-charts-chart-tooltip-content-notification ndl-notification-${notificationType}`}\n >\n <StatusIndicator variant={notificationType} />\n <Typography\n variant=\"body-medium\"\n className=\"ndl-charts-chart-tooltip-content-notification-left-element\"\n >\n {leadingElement}\n </Typography>\n <Typography\n variant=\"label\"\n className=\"ndl-charts-chart-tooltip-content-notification-trailing-element\"\n >\n {trailingElement}\n </Typography>\n </div>\n );\n })}\n </div>\n );\n};\n\nconst ChartTooltipLink = function ChartTooltipAction({\n ref,\n ...restProps\n}: React.ComponentProps<typeof TextLink>) {\n return <TextLink ref={ref} {...restProps} />;\n};\n\nconst ChartTooltip = Object.assign(ChartTooltipComponent, {\n Content: ChartTooltipContent,\n Link: ChartTooltipLink,\n Title: ChartTooltipTitle,\n});\n\nexport { ChartTooltip };\n"]}
|
|
@@ -89,14 +89,14 @@ const highlightOrDownplayPieSlices = (chart, currentSeriesToDispatch, action, cu
|
|
|
89
89
|
.map((_row, index) => index)
|
|
90
90
|
.filter((dataIndex) => !currentDataSeriesIndexes.includes(dataIndex));
|
|
91
91
|
chart === null || chart === void 0 ? void 0 : chart.dispatchAction({
|
|
92
|
-
seriesIndex: [0], // pie charts only has one series so seriesIndex is always 0
|
|
93
92
|
dataIndex: otherSeriesIndexes,
|
|
93
|
+
seriesIndex: [0], // pie charts only has one series so seriesIndex is always 0
|
|
94
94
|
type: 'downplay',
|
|
95
95
|
});
|
|
96
96
|
}
|
|
97
97
|
chart === null || chart === void 0 ? void 0 : chart.dispatchAction({
|
|
98
|
-
seriesIndex: [0], // pie charts only has one series so otherSeriesIndexes is always 0
|
|
99
98
|
dataIndex: currentDataSeriesIndexes,
|
|
99
|
+
seriesIndex: [0], // pie charts only has one series so otherSeriesIndexes is always 0
|
|
100
100
|
type: action,
|
|
101
101
|
});
|
|
102
102
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"legend-utils.js","sourceRoot":"","sources":["../../../../src/charts/utils/legend-utils.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n *\n * Copyright (c) \"Neo4j\"\n * Neo4j Sweden AB [http://neo4j.com]\n *\n * This file is part of Neo4j.\n *\n * Neo4j is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport {\n type EChartsOption,\n type EChartsType,\n getInstanceByDom,\n} from 'echarts';\n\nexport const resetAllSeriesHighlight = (chart: EChartsType) => {\n const option = chart.getOption();\n const seriesList = (option.series as unknown[] | undefined) || [];\n\n seriesList.forEach((_series, seriesIndex: number) => {\n chart.dispatchAction({\n seriesIndex,\n type: 'downplay',\n });\n });\n};\n\nconst highlightOrDownplayLineAndBarSeries = (\n chart: EChartsType,\n currentSeriesToDispatch: { name: string; color: string }[],\n action: 'highlight' | 'downplay',\n currentChartOptions: ReturnType<EChartsType['getOption']>,\n) => {\n const isDownplay = action === 'downplay';\n const allChartOptionSeries =\n (currentChartOptions?.series as Record<string, unknown>[] | undefined) ||\n [];\n\n // Change emphasis state to add opacity on the non highlighted items\n chart?.setOption({\n series: allChartOptionSeries?.map(\n (seriesItem: Record<string, unknown>) => ({\n ...seriesItem,\n emphasis: {\n ...(seriesItem.emphasis as Record<string, unknown>),\n disabled: isDownplay,\n },\n }),\n ),\n });\n\n const seriesWithSeriesIndex = allChartOptionSeries\n // Since the series index does not exist in the data we extract it from the series index\n ?.map((seriesItem, index) => ({\n ...seriesItem,\n seriesIndex: index,\n }))\n // Select the series that are in the currentSeriesToDispatch array\n ?.filter((seriesItem: Record<string, unknown>) =>\n currentSeriesToDispatch.some((series) => series.name === seriesItem.name),\n );\n\n if (!seriesWithSeriesIndex.length) {\n return;\n }\n\n chart?.dispatchAction({\n seriesIndex: seriesWithSeriesIndex.map((series) => series.seriesIndex),\n type: action,\n });\n};\n\n/**\n * Highlight or downplay pie chart dataset item\n */\nconst highlightOrDownplayPieSlices = (\n chart: EChartsType,\n currentSeriesToDispatch: { name: string; color: string }[],\n action: 'highlight' | 'downplay',\n currentChartOptions: ReturnType<EChartsType['getOption']>,\n) => {\n const isDownplay = action === 'downplay';\n const allChartOptionSeries =\n (currentChartOptions?.series as Record<string, unknown>[] | undefined) ||\n [];\n\n // Change blur state to add opacity on the non highlighted items in the pie chart\n chart?.setOption({\n series: allChartOptionSeries?.map(\n (seriesItem: Record<string, unknown>) => ({\n ...seriesItem,\n blur: {\n itemStyle: {\n opacity: isDownplay ? 1 : 0.3,\n },\n label: {\n opacity: isDownplay ? 1 : 0.3,\n },\n },\n }),\n ),\n });\n\n // The dataIndex that we want to dispatch can be found in the dataset[0] source array, where the first item is the name of the series\n const chartOptionDataset =\n currentChartOptions?.dataset as EChartsOption['dataset'];\n const datasetArray = Array.isArray(chartOptionDataset)\n ? chartOptionDataset\n : [chartOptionDataset];\n const sourceArray = datasetArray?.[0]?.source as unknown[][];\n\n // Find the dataIndexes that we want to dispatch\n const currentDataSeriesIndexes = currentSeriesToDispatch.map((series) => {\n const index = sourceArray?.findIndex((item) => item[0] === series.name) - 1;\n return index;\n });\n\n if (action === 'highlight') {\n // Downplay other data indexes to make sure the other slices are not highlighted\n const otherSeriesIndexes = sourceArray\n .map((_row, index) => index)\n .filter((dataIndex) => !currentDataSeriesIndexes.includes(dataIndex));\n\n chart?.dispatchAction({\n seriesIndex: [0], // pie charts only has one series so seriesIndex is always 0\n dataIndex: otherSeriesIndexes,\n type: 'downplay',\n });\n }\n\n chart?.dispatchAction({\n seriesIndex: [0], // pie charts only has one series so otherSeriesIndexes is always 0\n dataIndex: currentDataSeriesIndexes,\n type: action,\n });\n};\n\n/**\n * Highlight or downplay the series in the chart to toggle between emphasized and non-emphasized state\n */\nconst highlightOrDownplaySeries = (\n chartRef: React.RefObject<HTMLDivElement | null>,\n series: { name: string; color: string }[],\n currentSelectedSeries: Record<string, boolean>,\n currentSeriesToDispatch: { name: string; color: string }[],\n action: 'highlight' | 'downplay',\n) => {\n const hasOnlyOneSeries = series.length === 1;\n\n const isOnlyOneSeriesSelected =\n Object.values(currentSelectedSeries).filter(Boolean).length === 1;\n\n if (\n isOnlyOneSeriesSelected ||\n currentSeriesToDispatch.length === 0 ||\n chartRef.current === null ||\n hasOnlyOneSeries\n ) {\n return;\n }\n\n const chart = getInstanceByDom(chartRef.current);\n\n if (!chart) {\n return;\n }\n const currentChartOptions = chart.getOption();\n\n const seriesType = (\n currentChartOptions?.series as Record<string, unknown>[]\n )?.[0]?.type;\n\n if (seriesType === 'pie') {\n highlightOrDownplayPieSlices(\n chart,\n currentSeriesToDispatch,\n action,\n currentChartOptions,\n );\n } else {\n highlightOrDownplayLineAndBarSeries(\n chart,\n currentSeriesToDispatch,\n action,\n currentChartOptions,\n );\n }\n};\n\nexport { highlightOrDownplaySeries };\n"]}
|
|
1
|
+
{"version":3,"file":"legend-utils.js","sourceRoot":"","sources":["../../../../src/charts/utils/legend-utils.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n *\n * Copyright (c) \"Neo4j\"\n * Neo4j Sweden AB [http://neo4j.com]\n *\n * This file is part of Neo4j.\n *\n * Neo4j is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport {\n type EChartsOption,\n type EChartsType,\n getInstanceByDom,\n} from 'echarts';\n\nexport const resetAllSeriesHighlight = (chart: EChartsType) => {\n const option = chart.getOption();\n const seriesList = (option.series as unknown[] | undefined) || [];\n\n seriesList.forEach((_series, seriesIndex: number) => {\n chart.dispatchAction({\n seriesIndex,\n type: 'downplay',\n });\n });\n};\n\nconst highlightOrDownplayLineAndBarSeries = (\n chart: EChartsType,\n currentSeriesToDispatch: { name: string; color: string }[],\n action: 'highlight' | 'downplay',\n currentChartOptions: ReturnType<EChartsType['getOption']>,\n) => {\n const isDownplay = action === 'downplay';\n const allChartOptionSeries =\n (currentChartOptions?.series as Record<string, unknown>[] | undefined) ||\n [];\n\n // Change emphasis state to add opacity on the non highlighted items\n chart?.setOption({\n series: allChartOptionSeries?.map(\n (seriesItem: Record<string, unknown>) => ({\n ...seriesItem,\n emphasis: {\n ...(seriesItem.emphasis as Record<string, unknown>),\n disabled: isDownplay,\n },\n }),\n ),\n });\n\n const seriesWithSeriesIndex = allChartOptionSeries\n // Since the series index does not exist in the data we extract it from the series index\n ?.map((seriesItem, index) => ({\n ...seriesItem,\n seriesIndex: index,\n }))\n // Select the series that are in the currentSeriesToDispatch array\n ?.filter((seriesItem: Record<string, unknown>) =>\n currentSeriesToDispatch.some((series) => series.name === seriesItem.name),\n );\n\n if (!seriesWithSeriesIndex.length) {\n return;\n }\n\n chart?.dispatchAction({\n seriesIndex: seriesWithSeriesIndex.map((series) => series.seriesIndex),\n type: action,\n });\n};\n\n/**\n * Highlight or downplay pie chart dataset item\n */\nconst highlightOrDownplayPieSlices = (\n chart: EChartsType,\n currentSeriesToDispatch: { name: string; color: string }[],\n action: 'highlight' | 'downplay',\n currentChartOptions: ReturnType<EChartsType['getOption']>,\n) => {\n const isDownplay = action === 'downplay';\n const allChartOptionSeries =\n (currentChartOptions?.series as Record<string, unknown>[] | undefined) ||\n [];\n\n // Change blur state to add opacity on the non highlighted items in the pie chart\n chart?.setOption({\n series: allChartOptionSeries?.map(\n (seriesItem: Record<string, unknown>) => ({\n ...seriesItem,\n blur: {\n itemStyle: {\n opacity: isDownplay ? 1 : 0.3,\n },\n label: {\n opacity: isDownplay ? 1 : 0.3,\n },\n },\n }),\n ),\n });\n\n // The dataIndex that we want to dispatch can be found in the dataset[0] source array, where the first item is the name of the series\n const chartOptionDataset =\n currentChartOptions?.dataset as EChartsOption['dataset'];\n const datasetArray = Array.isArray(chartOptionDataset)\n ? chartOptionDataset\n : [chartOptionDataset];\n const sourceArray = datasetArray?.[0]?.source as unknown[][];\n\n // Find the dataIndexes that we want to dispatch\n const currentDataSeriesIndexes = currentSeriesToDispatch.map((series) => {\n const index = sourceArray?.findIndex((item) => item[0] === series.name) - 1;\n return index;\n });\n\n if (action === 'highlight') {\n // Downplay other data indexes to make sure the other slices are not highlighted\n const otherSeriesIndexes = sourceArray\n .map((_row, index) => index)\n .filter((dataIndex) => !currentDataSeriesIndexes.includes(dataIndex));\n\n chart?.dispatchAction({\n dataIndex: otherSeriesIndexes,\n seriesIndex: [0], // pie charts only has one series so seriesIndex is always 0\n type: 'downplay',\n });\n }\n\n chart?.dispatchAction({\n dataIndex: currentDataSeriesIndexes,\n seriesIndex: [0], // pie charts only has one series so otherSeriesIndexes is always 0\n type: action,\n });\n};\n\n/**\n * Highlight or downplay the series in the chart to toggle between emphasized and non-emphasized state\n */\nconst highlightOrDownplaySeries = (\n chartRef: React.RefObject<HTMLDivElement | null>,\n series: { name: string; color: string }[],\n currentSelectedSeries: Record<string, boolean>,\n currentSeriesToDispatch: { name: string; color: string }[],\n action: 'highlight' | 'downplay',\n) => {\n const hasOnlyOneSeries = series.length === 1;\n\n const isOnlyOneSeriesSelected =\n Object.values(currentSelectedSeries).filter(Boolean).length === 1;\n\n if (\n isOnlyOneSeriesSelected ||\n currentSeriesToDispatch.length === 0 ||\n chartRef.current === null ||\n hasOnlyOneSeries\n ) {\n return;\n }\n\n const chart = getInstanceByDom(chartRef.current);\n\n if (!chart) {\n return;\n }\n const currentChartOptions = chart.getOption();\n\n const seriesType = (\n currentChartOptions?.series as Record<string, unknown>[]\n )?.[0]?.type;\n\n if (seriesType === 'pie') {\n highlightOrDownplayPieSlices(\n chart,\n currentSeriesToDispatch,\n action,\n currentChartOptions,\n );\n } else {\n highlightOrDownplayLineAndBarSeries(\n chart,\n currentSeriesToDispatch,\n action,\n currentChartOptions,\n );\n }\n};\n\nexport { highlightOrDownplaySeries };\n"]}
|
|
@@ -44,7 +44,7 @@ const mergeSeries = (series, theme = 'light', userOption, palette) => {
|
|
|
44
44
|
// Needed to differentiate between normal lines and threshold lines
|
|
45
45
|
// as we are unable to inject custom properties into echarts series lines.
|
|
46
46
|
const thresholdLineName = `thresholdLine-${notificationType}`;
|
|
47
|
-
return Object.assign(Object.assign({ symbolSize: 9, symbol: 'none', condition: defaults_1.defaultThresholdLineSeriesOption.condition }, option), { lineStyle: Object.assign({
|
|
47
|
+
return Object.assign(Object.assign({ symbolSize: 9, symbol: 'none', condition: defaults_1.defaultThresholdLineSeriesOption.condition }, option), { lineStyle: Object.assign({ type: 'dashed', width: 2 }, option.lineStyle), name: thresholdLineName, type: 'line', data: [
|
|
48
48
|
[option.xAxis[0], option.yAxis],
|
|
49
49
|
[option.xAxis[1], option.yAxis],
|
|
50
50
|
] });
|
|
@@ -52,7 +52,7 @@ const mergeSeries = (series, theme = 'light', userOption, palette) => {
|
|
|
52
52
|
if (option.type === 'line') {
|
|
53
53
|
const shadow = base_1.tokens.theme[theme].boxShadow.raised;
|
|
54
54
|
const shadowParts = shadow.split(/ (?=\d+px|rgba?\()/);
|
|
55
|
-
return Object.assign(Object.assign({ type: 'line', symbolSize: 9, color, symbol: 'none' }, option), { lineStyle: Object.assign({
|
|
55
|
+
return Object.assign(Object.assign({ type: 'line', symbolSize: 9, color, symbol: 'none' }, option), { lineStyle: Object.assign({ type: 'solid', width: 2 }, option.lineStyle), emphasis: Object.assign(Object.assign(Object.assign({ disabled: true, focus: 'series' }, option.emphasis), { itemStyle: Object.assign({ borderColor: base_1.tokens.theme[theme].color.neutral.bg.weak, shadowBlur: parseInt(shadowParts[2]), shadowColor: shadowParts[4], shadowOffsetX: parseInt(shadowParts[0]), shadowOffsetY: parseInt(shadowParts[1]) }, (_b = option.emphasis) === null || _b === void 0 ? void 0 : _b.itemStyle), label: { show: false } }), option.emphasis) });
|
|
56
56
|
}
|
|
57
57
|
if (option.type === 'pie') {
|
|
58
58
|
const valueFormatter = (0, chart_tooltip_formatter_1.getTooltipValueFormatter)(userOption);
|
|
@@ -61,7 +61,7 @@ const mergeSeries = (series, theme = 'light', userOption, palette) => {
|
|
|
61
61
|
// being opacitated when hovering a slice where the emphasis is enabled (used for scale effect)
|
|
62
62
|
blur: Object.assign({ itemStyle: Object.assign({ opacity: 1 }, (_c = option.blur) === null || _c === void 0 ? void 0 : _c.itemStyle), label: Object.assign({ opacity: 1 }, (_d = option.blur) === null || _d === void 0 ? void 0 : _d.label) }, option.blur),
|
|
63
63
|
// Emphasis is enabled and used to apply the scale effect when hovering the pie chart slices.
|
|
64
|
-
emphasis: Object.assign({ disabled: false, focus: 'self', scale: true, scaleSize: 5 }, option.emphasis), itemStyle: Object.assign({ borderColor: base_1.tokens.theme[theme].color.neutral.bg.weak, borderWidth: 1 }, option.itemStyle), label: Object.assign({
|
|
64
|
+
emphasis: Object.assign({ disabled: false, focus: 'self', scale: true, scaleSize: 5 }, option.emphasis), itemStyle: Object.assign({ borderColor: base_1.tokens.theme[theme].color.neutral.bg.weak, borderWidth: 1 }, option.itemStyle), label: Object.assign({ backgroundColor: 'transparent', color: base_1.tokens.theme[theme].color.neutral.text.weak, formatter: '{d}%' }, option.label), labelLine: Object.assign({ length: 5, show: true }, option.labelLine), tooltip: Object.assign({ trigger: 'item', confine: true,
|
|
65
65
|
// Reset the default tooltip css styling
|
|
66
66
|
padding: 0, borderRadius: 0, borderWidth: 0, extraCssText: 'box-shadow: none; background-color: transparent;', formatter: function (params) {
|
|
67
67
|
var _a, _b;
|
|
@@ -74,7 +74,7 @@ const mergeSeries = (series, theme = 'light', userOption, palette) => {
|
|
|
74
74
|
}
|
|
75
75
|
if (option.type === 'bar') {
|
|
76
76
|
const valueFormatter = (0, chart_tooltip_formatter_1.getTooltipValueFormatter)(userOption);
|
|
77
|
-
return Object.assign(Object.assign({ barMaxWidth: 16 }, option), { blur: Object.assign({ itemStyle: Object.assign({ opacity: 0.3 }, (_e = option.blur) === null || _e === void 0 ? void 0 : _e.itemStyle) }, option.blur), emphasis: Object.assign({ disabled: true, focus: 'series' }, option.emphasis), itemStyle: Object.assign({
|
|
77
|
+
return Object.assign(Object.assign({ barMaxWidth: 16 }, option), { blur: Object.assign({ itemStyle: Object.assign({ opacity: 0.3 }, (_e = option.blur) === null || _e === void 0 ? void 0 : _e.itemStyle) }, option.blur), emphasis: Object.assign({ disabled: true, focus: 'series' }, option.emphasis), itemStyle: Object.assign({ borderWidth: 20, color }, option.itemStyle), markLine: {
|
|
78
78
|
emphasis: Object.assign({ disabled: true, lineStyle: Object.assign({ width: 20 }, (_g = (_f = option.markLine) === null || _f === void 0 ? void 0 : _f.emphasis) === null || _g === void 0 ? void 0 : _g.lineStyle) }, (_h = option.markLine) === null || _h === void 0 ? void 0 : _h.emphasis),
|
|
79
79
|
lineStyle: Object.assign({ width: 20 }, (_j = option.markLine) === null || _j === void 0 ? void 0 : _j.lineStyle),
|
|
80
80
|
}, tooltip: Object.assign({ trigger: 'axis', confine: true,
|
|
@@ -100,7 +100,7 @@ const mergeXAxis = (xAxis, theme = 'light') => {
|
|
|
100
100
|
if (Array.isArray(xAxis)) {
|
|
101
101
|
return xAxis.map((axis) => (0, exports.mergeXAxis)(axis, theme));
|
|
102
102
|
}
|
|
103
|
-
const baseXAxis = Object.assign(Object.assign({}, xAxis), {
|
|
103
|
+
const baseXAxis = Object.assign(Object.assign({}, xAxis), { axisLabel: Object.assign({ formatter: {
|
|
104
104
|
day: '{dd} {MMM}',
|
|
105
105
|
hour: '{HH}:{mm}',
|
|
106
106
|
millisecond: '{hh}:{mm}:{ss} {SSS}',
|
|
@@ -109,7 +109,7 @@ const mergeXAxis = (xAxis, theme = 'light') => {
|
|
|
109
109
|
none: '{yyyy}-{MM}-{dd} {hh}:{mm}:{ss} {SSS}',
|
|
110
110
|
second: '{HH}:{mm}:{ss}',
|
|
111
111
|
year: '{yearStyle|{yyyy}}\n{monthStyle|{MMM}}',
|
|
112
|
-
}, overflow: 'truncate' }, xAxis === null || xAxis === void 0 ? void 0 : xAxis.axisLabel) });
|
|
112
|
+
}, margin: 16, overflow: 'truncate' }, xAxis === null || xAxis === void 0 ? void 0 : xAxis.axisLabel), axisLine: Object.assign({ lineStyle: Object.assign({}, (_a = xAxis === null || xAxis === void 0 ? void 0 : xAxis.axisLine) === null || _a === void 0 ? void 0 : _a.lineStyle) }, xAxis === null || xAxis === void 0 ? void 0 : xAxis.axisLine), axisTick: Object.assign(Object.assign(Object.assign({}, xAxis === null || xAxis === void 0 ? void 0 : xAxis.axisTick), { lineStyle: Object.assign({}, (_b = xAxis === null || xAxis === void 0 ? void 0 : xAxis.axisTick) === null || _b === void 0 ? void 0 : _b.lineStyle), show: true }), xAxis === null || xAxis === void 0 ? void 0 : xAxis.axisTick), splitLine: Object.assign({ show: false }, xAxis === null || xAxis === void 0 ? void 0 : xAxis.splitLine) });
|
|
113
113
|
if (xAxis.type === 'time') {
|
|
114
114
|
const timeXAxis = Object.assign(Object.assign({}, baseXAxis), { axisLabel: Object.assign({ hideOverlap: true }, baseXAxis.axisLabel) });
|
|
115
115
|
return timeXAxis;
|
|
@@ -122,7 +122,7 @@ const mergeXAxis = (xAxis, theme = 'light') => {
|
|
|
122
122
|
return valueXAxis;
|
|
123
123
|
}
|
|
124
124
|
if (xAxis.type === 'category') {
|
|
125
|
-
const categoryXAxis = Object.assign(Object.assign({}, baseXAxis), {
|
|
125
|
+
const categoryXAxis = Object.assign(Object.assign({}, baseXAxis), { axisLabel: Object.assign({ width: 80 }, baseXAxis === null || baseXAxis === void 0 ? void 0 : baseXAxis.axisLabel), axisTick: Object.assign({ alignWithLabel: true }, baseXAxis === null || baseXAxis === void 0 ? void 0 : baseXAxis.axisTick) });
|
|
126
126
|
return categoryXAxis;
|
|
127
127
|
}
|
|
128
128
|
return baseXAxis;
|
|
@@ -136,7 +136,7 @@ const mergeYAxis = (yAxis, theme = 'light') => {
|
|
|
136
136
|
if (Array.isArray(yAxis)) {
|
|
137
137
|
return yAxis.map((axis) => (0, exports.mergeYAxis)(axis, theme));
|
|
138
138
|
}
|
|
139
|
-
const baseYAxis = Object.assign(Object.assign({}, yAxis), { axisLine: Object.assign(Object.assign({}, yAxis === null || yAxis === void 0 ? void 0 : yAxis.axisLine), { lineStyle: Object.assign({}, (_a = yAxis === null || yAxis === void 0 ? void 0 : yAxis.axisLine) === null || _a === void 0 ? void 0 : _a.lineStyle), show: true }), axisTick: Object.assign(Object.assign({ show: false }, yAxis === null || yAxis === void 0 ? void 0 : yAxis.axisTick), { lineStyle: Object.assign({ width: 1 }, (_b = yAxis === null || yAxis === void 0 ? void 0 : yAxis.axisTick) === null || _b === void 0 ? void 0 : _b.lineStyle) }),
|
|
139
|
+
const baseYAxis = Object.assign(Object.assign({}, yAxis), { axisLabel: Object.assign({ margin: 8, overflow: 'truncate' }, yAxis === null || yAxis === void 0 ? void 0 : yAxis.axisLabel), axisLine: Object.assign(Object.assign({}, yAxis === null || yAxis === void 0 ? void 0 : yAxis.axisLine), { lineStyle: Object.assign({}, (_a = yAxis === null || yAxis === void 0 ? void 0 : yAxis.axisLine) === null || _a === void 0 ? void 0 : _a.lineStyle), show: true }), axisTick: Object.assign(Object.assign({ show: false }, yAxis === null || yAxis === void 0 ? void 0 : yAxis.axisTick), { lineStyle: Object.assign({ width: 1 }, (_b = yAxis === null || yAxis === void 0 ? void 0 : yAxis.axisTick) === null || _b === void 0 ? void 0 : _b.lineStyle) }), splitLine: Object.assign({ show: true }, yAxis === null || yAxis === void 0 ? void 0 : yAxis.splitLine) });
|
|
140
140
|
if (yAxis.type === 'time') {
|
|
141
141
|
const timeYAxis = Object.assign(Object.assign({}, baseYAxis), { axisLabel: Object.assign({ hideOverlap: true }, baseYAxis.axisLabel), splitLine: Object.assign({ show: false }, baseYAxis === null || baseYAxis === void 0 ? void 0 : baseYAxis.splitLine) });
|
|
142
142
|
return timeYAxis;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user-option-utils.js","sourceRoot":"","sources":["../../../../src/charts/utils/user-option-utils.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\n *\n * Copyright (c) \"Neo4j\"\n * Neo4j Sweden AB [http://neo4j.com]\n *\n * This file is part of Neo4j.\n *\n * Neo4j is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { tokens } from '@neo4j-ndl/base';\nimport { type EChartsOption, type SeriesOption } from 'echarts';\nimport { renderToString } from 'react-dom/server';\n\nimport { ChartTooltip } from '../ChartTooltip';\nimport { getTooltipValueFormatter } from './chart-tooltip-formatter';\nimport {\n type EchartsSeries,\n type HexColor,\n type NeedleSeries,\n type ThresholdLineSeriesOption,\n} from './chart-types';\nimport { defaultThresholdLineSeriesOption } from './defaults';\nimport { formatNumberEnUS } from './format-utils';\n\nconst defaultColors = Object.values(tokens.categorical);\n\ntype SingleXAxisOption = Exclude<\n NonNullable<EChartsOption['xAxis']>,\n unknown[]\n>;\ntype SingleYAxisOption = Exclude<\n NonNullable<EChartsOption['yAxis']>,\n unknown[]\n>;\n\nexport const mergeSeries = (\n series: NeedleSeries,\n theme: 'light' | 'dark' = 'light',\n userOption?: Omit<\n EChartsOption,\n 'series' | 'dataset' | 'legend' | 'xAxis' | 'yAxis'\n >,\n palette?: HexColor[],\n): EchartsSeries => {\n const colors = palette ?? defaultColors;\n\n return series.map(\n (\n option:\n | SeriesOption\n | ThresholdLineSeriesOption<'warning'>\n | ThresholdLineSeriesOption<'danger'>,\n index: number = 0,\n ): SeriesOption => {\n if (option === undefined) {\n return {};\n }\n\n const color = Array.isArray(option.color)\n ? option.color[index]\n : (option.color ?? colors[index % colors.length]);\n\n if (option.type === 'thresholdLine') {\n const { notificationType } = option;\n // Needed to differentiate between normal lines and threshold lines\n // as we are unable to inject custom properties into echarts series lines.\n const thresholdLineName = `thresholdLine-${notificationType}`;\n return {\n symbolSize: 9,\n symbol: 'none',\n condition: defaultThresholdLineSeriesOption.condition,\n ...option,\n lineStyle: {\n width: 2,\n type: 'dashed',\n ...option.lineStyle,\n },\n name: thresholdLineName,\n type: 'line',\n data: [\n [option.xAxis[0], option.yAxis],\n [option.xAxis[1], option.yAxis],\n ],\n };\n }\n\n if (option.type === 'line') {\n const shadow = tokens.theme[theme].boxShadow.raised;\n const shadowParts = shadow.split(/ (?=\\d+px|rgba?\\()/);\n\n return {\n type: 'line',\n symbolSize: 9,\n color,\n symbol: 'none',\n ...option,\n lineStyle: {\n width: 2,\n type: 'solid' as const,\n ...option.lineStyle,\n },\n emphasis: {\n disabled: true,\n focus: 'series',\n ...option.emphasis,\n itemStyle: {\n borderColor: tokens.theme[theme].color.neutral.bg.weak,\n shadowOffsetX: parseInt(shadowParts[0]),\n shadowOffsetY: parseInt(shadowParts[1]),\n shadowBlur: parseInt(shadowParts[2]),\n shadowColor: shadowParts[4],\n ...option.emphasis?.itemStyle,\n },\n label: { show: false },\n ...option.emphasis,\n },\n };\n }\n\n if (option.type === 'pie') {\n const valueFormatter = getTooltipValueFormatter(userOption);\n\n return {\n animationDuration: 600,\n animationType: 'scale',\n selectedMode: 'single',\n ...option,\n // Blur opacity is set to 1 to prevent other slices from\n // being opacitated when hovering a slice where the emphasis is enabled (used for scale effect)\n blur: {\n itemStyle: {\n opacity: 1,\n ...option.blur?.itemStyle,\n },\n label: {\n opacity: 1,\n ...option.blur?.label,\n },\n ...option.blur,\n },\n // Emphasis is enabled and used to apply the scale effect when hovering the pie chart slices.\n emphasis: {\n disabled: false,\n focus: 'self',\n scale: true,\n scaleSize: 5,\n ...option.emphasis,\n },\n itemStyle: {\n borderColor: tokens.theme[theme].color.neutral.bg.weak,\n borderWidth: 1,\n ...option.itemStyle,\n },\n label: {\n formatter: '{d}%',\n backgroundColor: 'transparent',\n color: tokens.theme[theme].color.neutral.text.weak,\n ...option.label,\n },\n labelLine: {\n length: 5,\n show: true,\n ...option.labelLine,\n },\n tooltip: {\n trigger: 'item',\n confine: true,\n // Reset the default tooltip css styling\n padding: 0,\n borderRadius: 0,\n borderWidth: 0,\n extraCssText: 'box-shadow: none; background-color: transparent;',\n formatter: function (params: unknown) {\n const paramsArray = Array.isArray(params) ? params : [params];\n const firstParam = paramsArray[0];\n return `${renderToString(\n <span className=\"ndl-charts-chart-tooltip\">\n <ChartTooltip.Content\n key={firstParam?.value[0] ?? firstParam.seriesName}\n leadingElement={\n firstParam?.value[0] ?? firstParam.seriesName\n }\n trailingElement={valueFormatter(\n Array.isArray(firstParam.value)\n ? firstParam.value[1]\n : firstParam.value,\n )}\n indentSquareColor={firstParam.color}\n />\n </span>,\n )}`;\n },\n ...option.tooltip,\n },\n };\n }\n\n if (option.type === 'bar') {\n const valueFormatter = getTooltipValueFormatter(userOption);\n\n return {\n barMaxWidth: 16,\n ...option,\n blur: {\n itemStyle: {\n opacity: 0.3,\n ...option.blur?.itemStyle,\n },\n ...option.blur,\n },\n emphasis: {\n disabled: true,\n focus: 'series',\n ...option.emphasis,\n },\n itemStyle: {\n color,\n borderWidth: 20,\n ...option.itemStyle,\n },\n markLine: {\n emphasis: {\n disabled: true,\n lineStyle: {\n width: 20,\n ...option.markLine?.emphasis?.lineStyle,\n },\n ...option.markLine?.emphasis,\n },\n lineStyle: {\n width: 20,\n ...option.markLine?.lineStyle,\n },\n },\n tooltip: {\n trigger: 'axis',\n confine: true,\n // Reset the default tooltip css styling\n padding: 0,\n borderRadius: 0,\n borderWidth: 0,\n extraCssText: 'box-shadow: none; background-color: transparent;',\n formatter: function (params: unknown) {\n const paramsArray = Array.isArray(params) ? params : [params];\n const firstParam = paramsArray[0];\n return `${renderToString(\n <span className=\"ndl-charts-chart-tooltip\">\n <ChartTooltip.Title>{firstParam.name}</ChartTooltip.Title>\n <ChartTooltip.Content\n key={firstParam?.value[0] ?? firstParam.seriesName}\n leadingElement={firstParam.seriesName}\n trailingElement={valueFormatter(\n Array.isArray(firstParam.value)\n ? firstParam.value[1]\n : firstParam.value,\n )}\n indentSquareColor={firstParam.color}\n />\n </span>,\n )}`;\n },\n ...option.tooltip,\n },\n };\n }\n\n return option;\n },\n );\n};\n\nexport const mergeXAxis = (\n xAxis: EChartsOption['xAxis'],\n theme: 'light' | 'dark' = 'light',\n): EChartsOption['xAxis'] => {\n if (xAxis === undefined) {\n return [];\n }\n\n if (Array.isArray(xAxis)) {\n return xAxis.map((axis) =>\n mergeXAxis(axis, theme),\n ) as EChartsOption['xAxis'];\n }\n\n const baseXAxis = {\n ...xAxis,\n splitLine: { show: false, ...xAxis?.splitLine },\n axisLine: {\n lineStyle: {\n ...xAxis?.axisLine?.lineStyle,\n },\n ...xAxis?.axisLine,\n },\n axisTick: {\n ...xAxis?.axisTick,\n lineStyle: {\n ...xAxis?.axisTick?.lineStyle,\n },\n show: true,\n ...xAxis?.axisTick,\n },\n axisLabel: {\n margin: 16,\n formatter: {\n day: '{dd} {MMM}',\n hour: '{HH}:{mm}',\n millisecond: '{hh}:{mm}:{ss} {SSS}',\n minute: '{HH}:{mm}',\n month: '{MMM}',\n none: '{yyyy}-{MM}-{dd} {hh}:{mm}:{ss} {SSS}',\n second: '{HH}:{mm}:{ss}',\n year: '{yearStyle|{yyyy}}\\n{monthStyle|{MMM}}',\n },\n overflow: 'truncate',\n ...xAxis?.axisLabel,\n },\n } as SingleXAxisOption;\n\n if (xAxis.type === 'time') {\n const timeXAxis = {\n ...baseXAxis,\n axisLabel: {\n hideOverlap: true,\n ...baseXAxis.axisLabel,\n },\n } as SingleXAxisOption;\n\n return timeXAxis;\n }\n\n if (xAxis.type === 'value' || xAxis.type === 'log') {\n const xAxisFormatter =\n xAxis.axisLabel && 'formatter' in xAxis.axisLabel\n ? xAxis.axisLabel.formatter\n : undefined;\n const valueXAxis = {\n ...baseXAxis,\n axisLabel: {\n ...baseXAxis.axisLabel,\n formatter: xAxisFormatter ?? formatNumberEnUS,\n },\n } as SingleXAxisOption;\n\n return valueXAxis;\n }\n\n if (xAxis.type === 'category') {\n const categoryXAxis = {\n ...baseXAxis,\n axisTick: {\n alignWithLabel: true,\n ...baseXAxis?.axisTick,\n },\n axisLabel: {\n width: 80,\n ...baseXAxis?.axisLabel,\n },\n } as SingleXAxisOption;\n return categoryXAxis;\n }\n\n return baseXAxis;\n};\n\nexport const mergeYAxis = (\n yAxis: EChartsOption['yAxis'],\n theme: 'light' | 'dark' = 'light',\n): EChartsOption['yAxis'] => {\n if (yAxis === undefined) {\n return [];\n }\n\n if (Array.isArray(yAxis)) {\n return yAxis.map((axis) =>\n mergeYAxis(axis, theme),\n ) as EChartsOption['yAxis'];\n }\n\n const baseYAxis = {\n ...yAxis,\n axisLine: {\n ...yAxis?.axisLine,\n lineStyle: {\n ...yAxis?.axisLine?.lineStyle,\n },\n show: true,\n },\n axisTick: {\n show: false,\n ...yAxis?.axisTick,\n lineStyle: {\n width: 1,\n ...yAxis?.axisTick?.lineStyle,\n },\n },\n axisLabel: {\n margin: 8,\n overflow: 'truncate',\n ...yAxis?.axisLabel,\n },\n splitLine: { show: true, ...yAxis?.splitLine },\n } as SingleYAxisOption;\n\n if (yAxis.type === 'time') {\n const timeYAxis = {\n ...baseYAxis,\n axisLabel: {\n hideOverlap: true,\n ...baseYAxis.axisLabel,\n },\n splitLine: { show: false, ...baseYAxis?.splitLine },\n } as SingleYAxisOption;\n\n return timeYAxis;\n }\n\n if (yAxis.type === 'value' || yAxis.type === 'log') {\n const yAxisFormatter =\n yAxis.axisLabel && 'formatter' in yAxis.axisLabel\n ? yAxis.axisLabel.formatter\n : undefined;\n const valueYAxis = {\n ...baseYAxis,\n axisLabel: {\n hideOverlap: true,\n ...baseYAxis.axisLabel,\n formatter: yAxisFormatter ?? formatNumberEnUS,\n },\n splitLine: { show: false, ...baseYAxis?.splitLine },\n } as SingleYAxisOption;\n\n return valueYAxis;\n }\n\n if (yAxis.type === 'category') {\n const categoryYAxis = {\n ...baseYAxis,\n axisLabel: {\n width: 100,\n ...baseYAxis?.axisLabel,\n },\n } as SingleYAxisOption;\n\n return categoryYAxis;\n }\n\n return baseYAxis;\n};\n\ntype SingleDataZoomOption = Exclude<\n NonNullable<EChartsOption['dataZoom']>,\n unknown[]\n>;\n\ntype MergeDataZoomAxes = {\n xAxis?: EChartsOption['xAxis'];\n yAxis?: EChartsOption['yAxis'];\n};\n\nexport type DataZoomTargetAxes = {\n xAxisIndices: number[];\n yAxisIndices: number[];\n};\n\nconst normalizeAxisIndices = (axisIndex: unknown): number[] => {\n if (typeof axisIndex === 'number') {\n return [axisIndex];\n }\n\n if (Array.isArray(axisIndex)) {\n return axisIndex.filter((index): index is number => {\n return typeof index === 'number';\n });\n }\n\n return [];\n};\n\n/**\n * Resolves the axes a single dataZoom entry targets, mirroring ECharts' own\n * resolution order: explicit `xAxisIndex`/`yAxisIndex` win (`false` meaning\n * \"not this axis\"); when no index is given, `orient: 'vertical'` targets the\n * first y-axis and horizontal/unset targets the first x-axis.\n */\nconst getSingleDataZoomTargets = (\n dataZoom: SingleDataZoomOption | undefined,\n): DataZoomTargetAxes => {\n if (dataZoom?.type !== 'slider' && dataZoom?.type !== 'inside') {\n return { xAxisIndices: [], yAxisIndices: [] };\n }\n\n const hasAxisIndex =\n dataZoom.xAxisIndex !== undefined || dataZoom.yAxisIndex !== undefined;\n\n if (hasAxisIndex) {\n return {\n xAxisIndices: normalizeAxisIndices(dataZoom.xAxisIndex),\n yAxisIndices: normalizeAxisIndices(dataZoom.yAxisIndex),\n };\n }\n\n return dataZoom.orient === 'vertical'\n ? { xAxisIndices: [], yAxisIndices: [0] }\n : { xAxisIndices: [0], yAxisIndices: [] };\n};\n\n/**\n * Union of the axis indices targeted by all slider/inside entries in a\n * dataZoom config, using the same per-entry resolution as ECharts (explicit\n * axis indices first, then orientation).\n */\nexport const getDataZoomTargetAxes = (\n dataZoom: EChartsOption['dataZoom'],\n): DataZoomTargetAxes => {\n const entries = Array.isArray(dataZoom) ? dataZoom : [dataZoom];\n const targets: DataZoomTargetAxes = { xAxisIndices: [], yAxisIndices: [] };\n\n for (const entry of entries) {\n const entryTargets = getSingleDataZoomTargets(entry);\n\n for (const index of entryTargets.xAxisIndices) {\n if (!targets.xAxisIndices.includes(index)) {\n targets.xAxisIndices.push(index);\n }\n }\n\n for (const index of entryTargets.yAxisIndices) {\n if (!targets.yAxisIndices.includes(index)) {\n targets.yAxisIndices.push(index);\n }\n }\n }\n\n return targets;\n};\n\n/**\n * A slider is vertical when the consumer sets `orient: 'vertical'`, or when it\n * only targets a y-axis, which makes ECharts infer the vertical orientation.\n */\nexport const isVerticalSlider = (\n dataZoom: SingleDataZoomOption | undefined,\n): boolean => {\n if (dataZoom?.type !== 'slider') {\n return false;\n }\n\n if (dataZoom.orient !== undefined) {\n return dataZoom.orient === 'vertical';\n }\n\n const targets = getSingleDataZoomTargets(dataZoom);\n\n return targets.yAxisIndices.length > 0 && targets.xAxisIndices.length === 0;\n};\n\n/**\n * Axis types where windowing (`filterMode: 'none'`) beats ECharts' default\n * data filtering. Filtering a continuous axis removes whole data items outside\n * the window, which makes bars and points vanish instead of clipping them.\n * Category axes keep the `'filter'` default so paging through categories still\n * rescales the opposite value axis to the visible data.\n */\nconst WINDOWED_FILTER_AXIS_TYPES = ['log', 'time', 'value'];\n\nconst getSingleAxisOption = (\n axis: EChartsOption['xAxis'] | EChartsOption['yAxis'],\n axisIndex: unknown,\n): { type?: string } | undefined => {\n if (!Array.isArray(axis)) {\n return axis as { type?: string } | undefined;\n }\n\n const index =\n typeof axisIndex === 'number'\n ? axisIndex\n : Array.isArray(axisIndex) && typeof axisIndex[0] === 'number'\n ? axisIndex[0]\n : 0;\n\n return axis[index] as { type?: string } | undefined;\n};\n\n/**\n * Resolves the slider's target axis the way ECharts does (explicit axis index\n * first, then orientation) and returns `'none'` when that axis is continuous.\n * Returns `undefined` (keep ECharts' `'filter'` default) for category axes and\n * for sliders that target both axes at once.\n */\nconst getSliderDefaultFilterMode = (\n dataZoom: SingleDataZoomOption,\n axes: MergeDataZoomAxes | undefined,\n): 'none' | undefined => {\n const targets = getSingleDataZoomTargets(dataZoom);\n const isXAxisTarget = targets.xAxisIndices.length > 0;\n const isYAxisTarget = targets.yAxisIndices.length > 0;\n\n if (isXAxisTarget === isYAxisTarget) {\n return undefined;\n }\n\n const targetAxis = isYAxisTarget\n ? getSingleAxisOption(axes?.yAxis, dataZoom.yAxisIndex)\n : getSingleAxisOption(axes?.xAxis, dataZoom.xAxisIndex);\n\n return targetAxis?.type !== undefined &&\n WINDOWED_FILTER_AXIS_TYPES.includes(targetAxis.type)\n ? 'none'\n : undefined;\n};\n\nexport const mergeDataZoom = (\n dataZoom: EChartsOption['dataZoom'],\n axes?: MergeDataZoomAxes,\n): EChartsOption['dataZoom'] => {\n if (Array.isArray(dataZoom)) {\n return dataZoom.map((option) =>\n mergeDataZoom(option, axes),\n ) as EChartsOption['dataZoom'];\n }\n\n const isSlider = dataZoom?.type === 'slider';\n const isInside = dataZoom?.type === 'inside';\n\n if (isSlider) {\n const filterMode = getSliderDefaultFilterMode(dataZoom, axes);\n const layoutDefaults = isVerticalSlider(dataZoom)\n ? { right: 10, width: 28 }\n : { bottom: 10, height: 28 };\n\n return {\n ...(filterMode !== undefined && { filterMode }),\n ...layoutDefaults,\n show: true,\n type: 'slider',\n ...dataZoom,\n };\n } else if (isInside) {\n // Only pin the default x-axis binding on entries that actually target the\n // x-axis; y-targeting entries (explicit `yAxisIndex` or\n // `orient: 'vertical'`) keep their own binding.\n const targets = getSingleDataZoomTargets(dataZoom);\n const hasDefaultXAxisTarget =\n dataZoom.xAxisIndex === undefined && targets.xAxisIndices.length > 0;\n\n return {\n filterMode: 'none',\n ...(hasDefaultXAxisTarget && { xAxisIndex: [0] }),\n zoomOnMouseWheel: false,\n ...dataZoom,\n };\n }\n\n return dataZoom;\n};\n\ntype MergeToolboxContext = MergeDataZoomAxes & {\n dataZoom?: EChartsOption['dataZoom'];\n};\n\nconst isContinuousAxisOption = (\n axisOption: { type?: string } | undefined,\n): boolean => {\n return (\n axisOption?.type !== undefined &&\n WINDOWED_FILTER_AXIS_TYPES.includes(axisOption.type)\n );\n};\n\nconst areTargetAxesContinuous = (\n axis: EChartsOption['xAxis'] | EChartsOption['yAxis'],\n axisIndices: number[] | 'all',\n): boolean => {\n if (axisIndices === 'all') {\n const axisOptions = Array.isArray(axis) ? axis : [axis];\n\n return (\n axisOptions.length > 0 &&\n axisOptions.every((axisOption) => {\n return isContinuousAxisOption(axisOption as { type?: string });\n })\n );\n }\n\n return axisIndices.every((axisIndex) => {\n return isContinuousAxisOption(getSingleAxisOption(axis, axisIndex));\n });\n};\n\n/**\n * Returns `'none'` when every axis targeted by the drag-to-zoom brush is\n * continuous (`value`/`time`/`log`), matching the slider rule: filtering a\n * continuous axis removes whole data items outside the selection instead of\n * clipping them. Category (or unknown) targets keep ECharts' `'filter'`\n * default.\n */\nconst getBrushDefaultFilterMode = (\n context: MergeToolboxContext | undefined,\n xAxisTargets: number[] | 'all' | false,\n yAxisTargets: number[] | 'all' | false,\n): 'none' | undefined => {\n const checks: boolean[] = [];\n\n if (xAxisTargets !== false) {\n checks.push(areTargetAxesContinuous(context?.xAxis, xAxisTargets));\n }\n\n if (yAxisTargets !== false) {\n checks.push(areTargetAxesContinuous(context?.yAxis, yAxisTargets));\n }\n\n return checks.length > 0 && checks.every(Boolean) ? 'none' : undefined;\n};\n\nexport const mergeToolbox = (\n toolbox: EChartsOption['toolbox'],\n context?: MergeToolboxContext,\n): EChartsOption['toolbox'] => {\n if (Array.isArray(toolbox)) {\n return toolbox.map((option) =>\n mergeToolbox(option, context),\n ) as EChartsOption['toolbox'];\n }\n\n // The drag-to-zoom brush follows the axes the dataZoom config targets, so\n // zoom direction is configured in one place. Without any dataZoom config it\n // keeps the historical default: all x-axes on, y off.\n const targets = getDataZoomTargetAxes(context?.dataZoom);\n const hasTargets =\n targets.xAxisIndices.length > 0 || targets.yAxisIndices.length > 0;\n const xAxisTargets: number[] | 'all' | false = hasTargets\n ? targets.xAxisIndices.length > 0 && targets.xAxisIndices\n : 'all';\n const yAxisTargets: number[] | false =\n targets.yAxisIndices.length > 0 && targets.yAxisIndices;\n const filterMode = getBrushDefaultFilterMode(\n context,\n xAxisTargets,\n yAxisTargets,\n );\n\n return {\n feature: {\n dataZoom: {\n ...(filterMode !== undefined && { filterMode }),\n ...(xAxisTargets !== 'all' && { xAxisIndex: xAxisTargets }),\n yAxisIndex: yAxisTargets,\n ...toolbox?.feature?.dataZoom,\n icon: {\n // This hack removes the icons.\n // Due to: https://github.com/apache/echarts/issues/10274\n back: '-',\n zoom: '-',\n },\n show: true,\n },\n },\n };\n};\n"]}
|
|
1
|
+
{"version":3,"file":"user-option-utils.js","sourceRoot":"","sources":["../../../../src/charts/utils/user-option-utils.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\n *\n * Copyright (c) \"Neo4j\"\n * Neo4j Sweden AB [http://neo4j.com]\n *\n * This file is part of Neo4j.\n *\n * Neo4j is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { tokens } from '@neo4j-ndl/base';\nimport { type EChartsOption, type SeriesOption } from 'echarts';\nimport { renderToString } from 'react-dom/server';\n\nimport { ChartTooltip } from '../ChartTooltip';\nimport { getTooltipValueFormatter } from './chart-tooltip-formatter';\nimport {\n type EchartsSeries,\n type HexColor,\n type NeedleSeries,\n type ThresholdLineSeriesOption,\n} from './chart-types';\nimport { defaultThresholdLineSeriesOption } from './defaults';\nimport { formatNumberEnUS } from './format-utils';\n\nconst defaultColors = Object.values(tokens.categorical);\n\ntype SingleXAxisOption = Exclude<\n NonNullable<EChartsOption['xAxis']>,\n unknown[]\n>;\ntype SingleYAxisOption = Exclude<\n NonNullable<EChartsOption['yAxis']>,\n unknown[]\n>;\n\nexport const mergeSeries = (\n series: NeedleSeries,\n theme: 'light' | 'dark' = 'light',\n userOption?: Omit<\n EChartsOption,\n 'series' | 'dataset' | 'legend' | 'xAxis' | 'yAxis'\n >,\n palette?: HexColor[],\n): EchartsSeries => {\n const colors = palette ?? defaultColors;\n\n return series.map(\n (\n option:\n | SeriesOption\n | ThresholdLineSeriesOption<'warning'>\n | ThresholdLineSeriesOption<'danger'>,\n index: number = 0,\n ): SeriesOption => {\n if (option === undefined) {\n return {};\n }\n\n const color = Array.isArray(option.color)\n ? option.color[index]\n : (option.color ?? colors[index % colors.length]);\n\n if (option.type === 'thresholdLine') {\n const { notificationType } = option;\n // Needed to differentiate between normal lines and threshold lines\n // as we are unable to inject custom properties into echarts series lines.\n const thresholdLineName = `thresholdLine-${notificationType}`;\n return {\n symbolSize: 9,\n symbol: 'none',\n condition: defaultThresholdLineSeriesOption.condition,\n ...option,\n lineStyle: {\n type: 'dashed',\n width: 2,\n ...option.lineStyle,\n },\n name: thresholdLineName,\n type: 'line',\n data: [\n [option.xAxis[0], option.yAxis],\n [option.xAxis[1], option.yAxis],\n ],\n };\n }\n\n if (option.type === 'line') {\n const shadow = tokens.theme[theme].boxShadow.raised;\n const shadowParts = shadow.split(/ (?=\\d+px|rgba?\\()/);\n\n return {\n type: 'line',\n symbolSize: 9,\n color,\n symbol: 'none',\n ...option,\n lineStyle: {\n type: 'solid' as const,\n width: 2,\n ...option.lineStyle,\n },\n emphasis: {\n disabled: true,\n focus: 'series',\n ...option.emphasis,\n itemStyle: {\n borderColor: tokens.theme[theme].color.neutral.bg.weak,\n shadowBlur: parseInt(shadowParts[2]),\n shadowColor: shadowParts[4],\n shadowOffsetX: parseInt(shadowParts[0]),\n shadowOffsetY: parseInt(shadowParts[1]),\n ...option.emphasis?.itemStyle,\n },\n label: { show: false },\n ...option.emphasis,\n },\n };\n }\n\n if (option.type === 'pie') {\n const valueFormatter = getTooltipValueFormatter(userOption);\n\n return {\n animationDuration: 600,\n animationType: 'scale',\n selectedMode: 'single',\n ...option,\n // Blur opacity is set to 1 to prevent other slices from\n // being opacitated when hovering a slice where the emphasis is enabled (used for scale effect)\n blur: {\n itemStyle: {\n opacity: 1,\n ...option.blur?.itemStyle,\n },\n label: {\n opacity: 1,\n ...option.blur?.label,\n },\n ...option.blur,\n },\n // Emphasis is enabled and used to apply the scale effect when hovering the pie chart slices.\n emphasis: {\n disabled: false,\n focus: 'self',\n scale: true,\n scaleSize: 5,\n ...option.emphasis,\n },\n itemStyle: {\n borderColor: tokens.theme[theme].color.neutral.bg.weak,\n borderWidth: 1,\n ...option.itemStyle,\n },\n label: {\n backgroundColor: 'transparent',\n color: tokens.theme[theme].color.neutral.text.weak,\n formatter: '{d}%',\n ...option.label,\n },\n labelLine: {\n length: 5,\n show: true,\n ...option.labelLine,\n },\n tooltip: {\n trigger: 'item',\n confine: true,\n // Reset the default tooltip css styling\n padding: 0,\n borderRadius: 0,\n borderWidth: 0,\n extraCssText: 'box-shadow: none; background-color: transparent;',\n formatter: function (params: unknown) {\n const paramsArray = Array.isArray(params) ? params : [params];\n const firstParam = paramsArray[0];\n return `${renderToString(\n <span className=\"ndl-charts-chart-tooltip\">\n <ChartTooltip.Content\n key={firstParam?.value[0] ?? firstParam.seriesName}\n leadingElement={\n firstParam?.value[0] ?? firstParam.seriesName\n }\n trailingElement={valueFormatter(\n Array.isArray(firstParam.value)\n ? firstParam.value[1]\n : firstParam.value,\n )}\n indentSquareColor={firstParam.color}\n />\n </span>,\n )}`;\n },\n ...option.tooltip,\n },\n };\n }\n\n if (option.type === 'bar') {\n const valueFormatter = getTooltipValueFormatter(userOption);\n\n return {\n barMaxWidth: 16,\n ...option,\n blur: {\n itemStyle: {\n opacity: 0.3,\n ...option.blur?.itemStyle,\n },\n ...option.blur,\n },\n emphasis: {\n disabled: true,\n focus: 'series',\n ...option.emphasis,\n },\n itemStyle: {\n borderWidth: 20,\n color,\n ...option.itemStyle,\n },\n markLine: {\n emphasis: {\n disabled: true,\n lineStyle: {\n width: 20,\n ...option.markLine?.emphasis?.lineStyle,\n },\n ...option.markLine?.emphasis,\n },\n lineStyle: {\n width: 20,\n ...option.markLine?.lineStyle,\n },\n },\n tooltip: {\n trigger: 'axis',\n confine: true,\n // Reset the default tooltip css styling\n padding: 0,\n borderRadius: 0,\n borderWidth: 0,\n extraCssText: 'box-shadow: none; background-color: transparent;',\n formatter: function (params: unknown) {\n const paramsArray = Array.isArray(params) ? params : [params];\n const firstParam = paramsArray[0];\n return `${renderToString(\n <span className=\"ndl-charts-chart-tooltip\">\n <ChartTooltip.Title>{firstParam.name}</ChartTooltip.Title>\n <ChartTooltip.Content\n key={firstParam?.value[0] ?? firstParam.seriesName}\n leadingElement={firstParam.seriesName}\n trailingElement={valueFormatter(\n Array.isArray(firstParam.value)\n ? firstParam.value[1]\n : firstParam.value,\n )}\n indentSquareColor={firstParam.color}\n />\n </span>,\n )}`;\n },\n ...option.tooltip,\n },\n };\n }\n\n return option;\n },\n );\n};\n\nexport const mergeXAxis = (\n xAxis: EChartsOption['xAxis'],\n theme: 'light' | 'dark' = 'light',\n): EChartsOption['xAxis'] => {\n if (xAxis === undefined) {\n return [];\n }\n\n if (Array.isArray(xAxis)) {\n return xAxis.map((axis) =>\n mergeXAxis(axis, theme),\n ) as EChartsOption['xAxis'];\n }\n\n const baseXAxis = {\n ...xAxis,\n axisLabel: {\n formatter: {\n day: '{dd} {MMM}',\n hour: '{HH}:{mm}',\n millisecond: '{hh}:{mm}:{ss} {SSS}',\n minute: '{HH}:{mm}',\n month: '{MMM}',\n none: '{yyyy}-{MM}-{dd} {hh}:{mm}:{ss} {SSS}',\n second: '{HH}:{mm}:{ss}',\n year: '{yearStyle|{yyyy}}\\n{monthStyle|{MMM}}',\n },\n margin: 16,\n overflow: 'truncate',\n ...xAxis?.axisLabel,\n },\n axisLine: {\n lineStyle: {\n ...xAxis?.axisLine?.lineStyle,\n },\n ...xAxis?.axisLine,\n },\n axisTick: {\n ...xAxis?.axisTick,\n lineStyle: {\n ...xAxis?.axisTick?.lineStyle,\n },\n show: true,\n ...xAxis?.axisTick,\n },\n splitLine: { show: false, ...xAxis?.splitLine },\n } as SingleXAxisOption;\n\n if (xAxis.type === 'time') {\n const timeXAxis = {\n ...baseXAxis,\n axisLabel: {\n hideOverlap: true,\n ...baseXAxis.axisLabel,\n },\n } as SingleXAxisOption;\n\n return timeXAxis;\n }\n\n if (xAxis.type === 'value' || xAxis.type === 'log') {\n const xAxisFormatter =\n xAxis.axisLabel && 'formatter' in xAxis.axisLabel\n ? xAxis.axisLabel.formatter\n : undefined;\n const valueXAxis = {\n ...baseXAxis,\n axisLabel: {\n ...baseXAxis.axisLabel,\n formatter: xAxisFormatter ?? formatNumberEnUS,\n },\n } as SingleXAxisOption;\n\n return valueXAxis;\n }\n\n if (xAxis.type === 'category') {\n const categoryXAxis = {\n ...baseXAxis,\n axisLabel: {\n width: 80,\n ...baseXAxis?.axisLabel,\n },\n axisTick: {\n alignWithLabel: true,\n ...baseXAxis?.axisTick,\n },\n } as SingleXAxisOption;\n return categoryXAxis;\n }\n\n return baseXAxis;\n};\n\nexport const mergeYAxis = (\n yAxis: EChartsOption['yAxis'],\n theme: 'light' | 'dark' = 'light',\n): EChartsOption['yAxis'] => {\n if (yAxis === undefined) {\n return [];\n }\n\n if (Array.isArray(yAxis)) {\n return yAxis.map((axis) =>\n mergeYAxis(axis, theme),\n ) as EChartsOption['yAxis'];\n }\n\n const baseYAxis = {\n ...yAxis,\n axisLabel: {\n margin: 8,\n overflow: 'truncate',\n ...yAxis?.axisLabel,\n },\n axisLine: {\n ...yAxis?.axisLine,\n lineStyle: {\n ...yAxis?.axisLine?.lineStyle,\n },\n show: true,\n },\n axisTick: {\n show: false,\n ...yAxis?.axisTick,\n lineStyle: {\n width: 1,\n ...yAxis?.axisTick?.lineStyle,\n },\n },\n splitLine: { show: true, ...yAxis?.splitLine },\n } as SingleYAxisOption;\n\n if (yAxis.type === 'time') {\n const timeYAxis = {\n ...baseYAxis,\n axisLabel: {\n hideOverlap: true,\n ...baseYAxis.axisLabel,\n },\n splitLine: { show: false, ...baseYAxis?.splitLine },\n } as SingleYAxisOption;\n\n return timeYAxis;\n }\n\n if (yAxis.type === 'value' || yAxis.type === 'log') {\n const yAxisFormatter =\n yAxis.axisLabel && 'formatter' in yAxis.axisLabel\n ? yAxis.axisLabel.formatter\n : undefined;\n const valueYAxis = {\n ...baseYAxis,\n axisLabel: {\n hideOverlap: true,\n ...baseYAxis.axisLabel,\n formatter: yAxisFormatter ?? formatNumberEnUS,\n },\n splitLine: { show: false, ...baseYAxis?.splitLine },\n } as SingleYAxisOption;\n\n return valueYAxis;\n }\n\n if (yAxis.type === 'category') {\n const categoryYAxis = {\n ...baseYAxis,\n axisLabel: {\n width: 100,\n ...baseYAxis?.axisLabel,\n },\n } as SingleYAxisOption;\n\n return categoryYAxis;\n }\n\n return baseYAxis;\n};\n\ntype SingleDataZoomOption = Exclude<\n NonNullable<EChartsOption['dataZoom']>,\n unknown[]\n>;\n\ntype MergeDataZoomAxes = {\n xAxis?: EChartsOption['xAxis'];\n yAxis?: EChartsOption['yAxis'];\n};\n\nexport type DataZoomTargetAxes = {\n xAxisIndices: number[];\n yAxisIndices: number[];\n};\n\nconst normalizeAxisIndices = (axisIndex: unknown): number[] => {\n if (typeof axisIndex === 'number') {\n return [axisIndex];\n }\n\n if (Array.isArray(axisIndex)) {\n return axisIndex.filter((index): index is number => {\n return typeof index === 'number';\n });\n }\n\n return [];\n};\n\n/**\n * Resolves the axes a single dataZoom entry targets, mirroring ECharts' own\n * resolution order: explicit `xAxisIndex`/`yAxisIndex` win (`false` meaning\n * \"not this axis\"); when no index is given, `orient: 'vertical'` targets the\n * first y-axis and horizontal/unset targets the first x-axis.\n */\nconst getSingleDataZoomTargets = (\n dataZoom: SingleDataZoomOption | undefined,\n): DataZoomTargetAxes => {\n if (dataZoom?.type !== 'slider' && dataZoom?.type !== 'inside') {\n return { xAxisIndices: [], yAxisIndices: [] };\n }\n\n const hasAxisIndex =\n dataZoom.xAxisIndex !== undefined || dataZoom.yAxisIndex !== undefined;\n\n if (hasAxisIndex) {\n return {\n xAxisIndices: normalizeAxisIndices(dataZoom.xAxisIndex),\n yAxisIndices: normalizeAxisIndices(dataZoom.yAxisIndex),\n };\n }\n\n return dataZoom.orient === 'vertical'\n ? { xAxisIndices: [], yAxisIndices: [0] }\n : { xAxisIndices: [0], yAxisIndices: [] };\n};\n\n/**\n * Union of the axis indices targeted by all slider/inside entries in a\n * dataZoom config, using the same per-entry resolution as ECharts (explicit\n * axis indices first, then orientation).\n */\nexport const getDataZoomTargetAxes = (\n dataZoom: EChartsOption['dataZoom'],\n): DataZoomTargetAxes => {\n const entries = Array.isArray(dataZoom) ? dataZoom : [dataZoom];\n const targets: DataZoomTargetAxes = { xAxisIndices: [], yAxisIndices: [] };\n\n for (const entry of entries) {\n const entryTargets = getSingleDataZoomTargets(entry);\n\n for (const index of entryTargets.xAxisIndices) {\n if (!targets.xAxisIndices.includes(index)) {\n targets.xAxisIndices.push(index);\n }\n }\n\n for (const index of entryTargets.yAxisIndices) {\n if (!targets.yAxisIndices.includes(index)) {\n targets.yAxisIndices.push(index);\n }\n }\n }\n\n return targets;\n};\n\n/**\n * A slider is vertical when the consumer sets `orient: 'vertical'`, or when it\n * only targets a y-axis, which makes ECharts infer the vertical orientation.\n */\nexport const isVerticalSlider = (\n dataZoom: SingleDataZoomOption | undefined,\n): boolean => {\n if (dataZoom?.type !== 'slider') {\n return false;\n }\n\n if (dataZoom.orient !== undefined) {\n return dataZoom.orient === 'vertical';\n }\n\n const targets = getSingleDataZoomTargets(dataZoom);\n\n return targets.yAxisIndices.length > 0 && targets.xAxisIndices.length === 0;\n};\n\n/**\n * Axis types where windowing (`filterMode: 'none'`) beats ECharts' default\n * data filtering. Filtering a continuous axis removes whole data items outside\n * the window, which makes bars and points vanish instead of clipping them.\n * Category axes keep the `'filter'` default so paging through categories still\n * rescales the opposite value axis to the visible data.\n */\nconst WINDOWED_FILTER_AXIS_TYPES = ['log', 'time', 'value'];\n\nconst getSingleAxisOption = (\n axis: EChartsOption['xAxis'] | EChartsOption['yAxis'],\n axisIndex: unknown,\n): { type?: string } | undefined => {\n if (!Array.isArray(axis)) {\n return axis as { type?: string } | undefined;\n }\n\n const index =\n typeof axisIndex === 'number'\n ? axisIndex\n : Array.isArray(axisIndex) && typeof axisIndex[0] === 'number'\n ? axisIndex[0]\n : 0;\n\n return axis[index] as { type?: string } | undefined;\n};\n\n/**\n * Resolves the slider's target axis the way ECharts does (explicit axis index\n * first, then orientation) and returns `'none'` when that axis is continuous.\n * Returns `undefined` (keep ECharts' `'filter'` default) for category axes and\n * for sliders that target both axes at once.\n */\nconst getSliderDefaultFilterMode = (\n dataZoom: SingleDataZoomOption,\n axes: MergeDataZoomAxes | undefined,\n): 'none' | undefined => {\n const targets = getSingleDataZoomTargets(dataZoom);\n const isXAxisTarget = targets.xAxisIndices.length > 0;\n const isYAxisTarget = targets.yAxisIndices.length > 0;\n\n if (isXAxisTarget === isYAxisTarget) {\n return undefined;\n }\n\n const targetAxis = isYAxisTarget\n ? getSingleAxisOption(axes?.yAxis, dataZoom.yAxisIndex)\n : getSingleAxisOption(axes?.xAxis, dataZoom.xAxisIndex);\n\n return targetAxis?.type !== undefined &&\n WINDOWED_FILTER_AXIS_TYPES.includes(targetAxis.type)\n ? 'none'\n : undefined;\n};\n\nexport const mergeDataZoom = (\n dataZoom: EChartsOption['dataZoom'],\n axes?: MergeDataZoomAxes,\n): EChartsOption['dataZoom'] => {\n if (Array.isArray(dataZoom)) {\n return dataZoom.map((option) =>\n mergeDataZoom(option, axes),\n ) as EChartsOption['dataZoom'];\n }\n\n const isSlider = dataZoom?.type === 'slider';\n const isInside = dataZoom?.type === 'inside';\n\n if (isSlider) {\n const filterMode = getSliderDefaultFilterMode(dataZoom, axes);\n const layoutDefaults = isVerticalSlider(dataZoom)\n ? { right: 10, width: 28 }\n : { bottom: 10, height: 28 };\n\n return {\n ...(filterMode !== undefined && { filterMode }),\n ...layoutDefaults,\n show: true,\n type: 'slider',\n ...dataZoom,\n };\n } else if (isInside) {\n // Only pin the default x-axis binding on entries that actually target the\n // x-axis; y-targeting entries (explicit `yAxisIndex` or\n // `orient: 'vertical'`) keep their own binding.\n const targets = getSingleDataZoomTargets(dataZoom);\n const hasDefaultXAxisTarget =\n dataZoom.xAxisIndex === undefined && targets.xAxisIndices.length > 0;\n\n return {\n filterMode: 'none',\n ...(hasDefaultXAxisTarget && { xAxisIndex: [0] }),\n zoomOnMouseWheel: false,\n ...dataZoom,\n };\n }\n\n return dataZoom;\n};\n\ntype MergeToolboxContext = MergeDataZoomAxes & {\n dataZoom?: EChartsOption['dataZoom'];\n};\n\nconst isContinuousAxisOption = (\n axisOption: { type?: string } | undefined,\n): boolean => {\n return (\n axisOption?.type !== undefined &&\n WINDOWED_FILTER_AXIS_TYPES.includes(axisOption.type)\n );\n};\n\nconst areTargetAxesContinuous = (\n axis: EChartsOption['xAxis'] | EChartsOption['yAxis'],\n axisIndices: number[] | 'all',\n): boolean => {\n if (axisIndices === 'all') {\n const axisOptions = Array.isArray(axis) ? axis : [axis];\n\n return (\n axisOptions.length > 0 &&\n axisOptions.every((axisOption) => {\n return isContinuousAxisOption(axisOption as { type?: string });\n })\n );\n }\n\n return axisIndices.every((axisIndex) => {\n return isContinuousAxisOption(getSingleAxisOption(axis, axisIndex));\n });\n};\n\n/**\n * Returns `'none'` when every axis targeted by the drag-to-zoom brush is\n * continuous (`value`/`time`/`log`), matching the slider rule: filtering a\n * continuous axis removes whole data items outside the selection instead of\n * clipping them. Category (or unknown) targets keep ECharts' `'filter'`\n * default.\n */\nconst getBrushDefaultFilterMode = (\n context: MergeToolboxContext | undefined,\n xAxisTargets: number[] | 'all' | false,\n yAxisTargets: number[] | 'all' | false,\n): 'none' | undefined => {\n const checks: boolean[] = [];\n\n if (xAxisTargets !== false) {\n checks.push(areTargetAxesContinuous(context?.xAxis, xAxisTargets));\n }\n\n if (yAxisTargets !== false) {\n checks.push(areTargetAxesContinuous(context?.yAxis, yAxisTargets));\n }\n\n return checks.length > 0 && checks.every(Boolean) ? 'none' : undefined;\n};\n\nexport const mergeToolbox = (\n toolbox: EChartsOption['toolbox'],\n context?: MergeToolboxContext,\n): EChartsOption['toolbox'] => {\n if (Array.isArray(toolbox)) {\n return toolbox.map((option) =>\n mergeToolbox(option, context),\n ) as EChartsOption['toolbox'];\n }\n\n // The drag-to-zoom brush follows the axes the dataZoom config targets, so\n // zoom direction is configured in one place. Without any dataZoom config it\n // keeps the historical default: all x-axes on, y off.\n const targets = getDataZoomTargetAxes(context?.dataZoom);\n const hasTargets =\n targets.xAxisIndices.length > 0 || targets.yAxisIndices.length > 0;\n const xAxisTargets: number[] | 'all' | false = hasTargets\n ? targets.xAxisIndices.length > 0 && targets.xAxisIndices\n : 'all';\n const yAxisTargets: number[] | false =\n targets.yAxisIndices.length > 0 && targets.yAxisIndices;\n const filterMode = getBrushDefaultFilterMode(\n context,\n xAxisTargets,\n yAxisTargets,\n );\n\n return {\n feature: {\n dataZoom: {\n ...(filterMode !== undefined && { filterMode }),\n ...(xAxisTargets !== 'all' && { xAxisIndex: xAxisTargets }),\n yAxisIndex: yAxisTargets,\n ...toolbox?.feature?.dataZoom,\n icon: {\n // This hack removes the icons.\n // Due to: https://github.com/apache/echarts/issues/10274\n back: '-',\n zoom: '-',\n },\n show: true,\n },\n },\n };\n};\n"]}
|
|
@@ -41,10 +41,10 @@ const ChartTooltipTitle = function ChartTooltipTitle({ children, ref, }) {
|
|
|
41
41
|
};
|
|
42
42
|
const ChartTooltipContent = function ChartTooltipContent({ leadingElement, trailingElement, indentSquareColor, notifications, ref, }) {
|
|
43
43
|
const classes = classNames(`ndl-charts-chart-tooltip-content`);
|
|
44
|
-
return (_jsxs("div", { ref: ref, className: classes, children: [_jsxs("div", { className: "ndl-charts-chart-tooltip-content-line", children: [indentSquareColor && (_jsx("div", { className: "ndl-charts-chart-tooltip-content-indent-square", style: { backgroundColor: indentSquareColor } })), leadingElement && (_jsx(Typography, { variant: trailingElement ? 'body-medium' : 'label', className: "ndl-charts-chart-tooltip-content-left-element", children: leadingElement })), trailingElement && (_jsx(Typography, { variant: "
|
|
44
|
+
return (_jsxs("div", { ref: ref, className: classes, children: [_jsxs("div", { className: "ndl-charts-chart-tooltip-content-line", children: [indentSquareColor && (_jsx("div", { className: "ndl-charts-chart-tooltip-content-indent-square", style: { backgroundColor: indentSquareColor } })), leadingElement && (_jsx(Typography, { variant: trailingElement ? 'body-medium' : 'label', className: "ndl-charts-chart-tooltip-content-left-element", children: leadingElement })), trailingElement && (_jsx(Typography, { variant: "label", className: "ndl-charts-chart-tooltip-content-trailing-element", children: trailingElement }))] }), notifications &&
|
|
45
45
|
notifications.map((notification) => {
|
|
46
46
|
const { id, notificationType, leadingElement, trailingElement } = notification;
|
|
47
|
-
return (_jsxs("div", { className: `ndl-charts-chart-tooltip-content-notification ndl-notification-${notificationType}`, children: [_jsx(StatusIndicator, { variant: notificationType }), _jsx(Typography, { variant: "body-medium", className: "ndl-charts-chart-tooltip-content-notification-left-element", children: leadingElement }), _jsx(Typography, { variant: "
|
|
47
|
+
return (_jsxs("div", { className: `ndl-charts-chart-tooltip-content-notification ndl-notification-${notificationType}`, children: [_jsx(StatusIndicator, { variant: notificationType }), _jsx(Typography, { variant: "body-medium", className: "ndl-charts-chart-tooltip-content-notification-left-element", children: leadingElement }), _jsx(Typography, { variant: "label", className: "ndl-charts-chart-tooltip-content-notification-trailing-element", children: trailingElement })] }, `notification-${id}`));
|
|
48
48
|
})] }));
|
|
49
49
|
};
|
|
50
50
|
const ChartTooltipLink = function ChartTooltipAction(_a) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChartTooltip.js","sourceRoot":"","sources":["../../../src/charts/ChartTooltip.tsx"],"names":[],"mappings":";;;;;;;;;;;;AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,EACL,OAAO,EACP,eAAe,EACf,QAAQ,EACR,UAAU,GACX,MAAM,kBAAkB,CAAC;AAC1B,OAAO,UAAU,MAAM,YAAY,CAAC;AAQpC,MAAM,CAAC,MAAM,qBAAqB,GAAG,SAAS,qBAAqB,CAAC,EAClE,QAAQ,EACR,MAAM,EACN,KAAK,EACL,cAAc,EACd,GAAG,GACe;IAClB,OAAO,CACL,KAAC,OAAO,IACN,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,cAAc,EAC9B,SAAS,EAAC,yBAAyB,YAEnC,KAAC,OAAO,CAAC,OAAO,IAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,YACpC,QAAQ,GACO,GACV,CACX,CAAC;AACJ,CAAC,CAAC;AAOF,MAAM,iBAAiB,GAAG,SAAS,iBAAiB,CAAC,EACnD,QAAQ,EACR,GAAG,GACoB;IACvB,MAAM,OAAO,GAAG,UAAU,CAAC,gCAAgC,CAAC,CAAC;IAE7D,OAAO,CACL,KAAC,UAAU,IAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAC,YAAY,EAAC,SAAS,EAAE,OAAO,YAC1D,QAAQ,GACE,CACd,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,SAAS,mBAAmB,CAAC,EACvD,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,aAAa,EACb,GAAG,GACsB;IACzB,MAAM,OAAO,GAAG,UAAU,CAAC,kCAAkC,CAAC,CAAC;IAE/D,OAAO,CACL,eAAK,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,OAAO,aAC/B,eAAK,SAAS,EAAC,uCAAuC,aACnD,iBAAiB,IAAI,CACpB,cACE,SAAS,EAAC,gDAAgD,EAC1D,KAAK,EAAE,EAAE,eAAe,EAAE,iBAAiB,EAAE,GAC7C,CACH,EACA,cAAc,IAAI,CACjB,KAAC,UAAU,IACT,OAAO,EAAE,eAAe,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,EAClD,SAAS,EAAC,+CAA+C,YAExD,cAAc,GACJ,CACd,EACA,eAAe,IAAI,CAClB,KAAC,UAAU,IACT,OAAO,EAAC,
|
|
1
|
+
{"version":3,"file":"ChartTooltip.js","sourceRoot":"","sources":["../../../src/charts/ChartTooltip.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\n *\n * Copyright (c) \"Neo4j\"\n * Neo4j Sweden AB [http://neo4j.com]\n *\n * This file is part of Neo4j.\n *\n * Neo4j is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\nimport {\n Popover,\n StatusIndicator,\n TextLink,\n Typography,\n} from '@neo4j-ndl/react';\nimport classNames from 'classnames';\nimport type React from 'react';\n\nimport {\n type ChartTooltipContentProps,\n type ChartTooltipProps,\n} from './utils/chart-types';\n\nexport const ChartTooltipComponent = function ChartTooltipComponent({\n children,\n isOpen,\n style,\n anchorPosition,\n ref,\n}: ChartTooltipProps) {\n return (\n <Popover\n isOpen={isOpen}\n anchorPosition={anchorPosition}\n placement=\"middle-end-middle-start\"\n >\n <Popover.Content ref={ref} style={style}>\n {children}\n </Popover.Content>\n </Popover>\n );\n};\n\ntype ChartTooltipTitleProps = {\n children: React.ReactNode;\n ref?: React.Ref<HTMLSpanElement>;\n};\n\nconst ChartTooltipTitle = function ChartTooltipTitle({\n children,\n ref,\n}: ChartTooltipTitleProps) {\n const classes = classNames(`ndl-charts-chart-tooltip-title`);\n\n return (\n <Typography ref={ref} variant=\"body-small\" className={classes}>\n {children}\n </Typography>\n );\n};\n\nconst ChartTooltipContent = function ChartTooltipContent({\n leadingElement,\n trailingElement,\n indentSquareColor,\n notifications,\n ref,\n}: ChartTooltipContentProps) {\n const classes = classNames(`ndl-charts-chart-tooltip-content`);\n\n return (\n <div ref={ref} className={classes}>\n <div className=\"ndl-charts-chart-tooltip-content-line\">\n {indentSquareColor && (\n <div\n className=\"ndl-charts-chart-tooltip-content-indent-square\"\n style={{ backgroundColor: indentSquareColor }}\n />\n )}\n {leadingElement && (\n <Typography\n variant={trailingElement ? 'body-medium' : 'label'}\n className=\"ndl-charts-chart-tooltip-content-left-element\"\n >\n {leadingElement}\n </Typography>\n )}\n {trailingElement && (\n <Typography\n variant=\"label\"\n className=\"ndl-charts-chart-tooltip-content-trailing-element\"\n >\n {trailingElement}\n </Typography>\n )}\n </div>\n\n {notifications &&\n notifications.map((notification) => {\n const { id, notificationType, leadingElement, trailingElement } =\n notification;\n\n return (\n <div\n key={`notification-${id}`}\n className={`ndl-charts-chart-tooltip-content-notification ndl-notification-${notificationType}`}\n >\n <StatusIndicator variant={notificationType} />\n <Typography\n variant=\"body-medium\"\n className=\"ndl-charts-chart-tooltip-content-notification-left-element\"\n >\n {leadingElement}\n </Typography>\n <Typography\n variant=\"label\"\n className=\"ndl-charts-chart-tooltip-content-notification-trailing-element\"\n >\n {trailingElement}\n </Typography>\n </div>\n );\n })}\n </div>\n );\n};\n\nconst ChartTooltipLink = function ChartTooltipAction({\n ref,\n ...restProps\n}: React.ComponentProps<typeof TextLink>) {\n return <TextLink ref={ref} {...restProps} />;\n};\n\nconst ChartTooltip = Object.assign(ChartTooltipComponent, {\n Content: ChartTooltipContent,\n Link: ChartTooltipLink,\n Title: ChartTooltipTitle,\n});\n\nexport { ChartTooltip };\n"]}
|
|
@@ -85,14 +85,14 @@ const highlightOrDownplayPieSlices = (chart, currentSeriesToDispatch, action, cu
|
|
|
85
85
|
.map((_row, index) => index)
|
|
86
86
|
.filter((dataIndex) => !currentDataSeriesIndexes.includes(dataIndex));
|
|
87
87
|
chart === null || chart === void 0 ? void 0 : chart.dispatchAction({
|
|
88
|
-
seriesIndex: [0], // pie charts only has one series so seriesIndex is always 0
|
|
89
88
|
dataIndex: otherSeriesIndexes,
|
|
89
|
+
seriesIndex: [0], // pie charts only has one series so seriesIndex is always 0
|
|
90
90
|
type: 'downplay',
|
|
91
91
|
});
|
|
92
92
|
}
|
|
93
93
|
chart === null || chart === void 0 ? void 0 : chart.dispatchAction({
|
|
94
|
-
seriesIndex: [0], // pie charts only has one series so otherSeriesIndexes is always 0
|
|
95
94
|
dataIndex: currentDataSeriesIndexes,
|
|
95
|
+
seriesIndex: [0], // pie charts only has one series so otherSeriesIndexes is always 0
|
|
96
96
|
type: action,
|
|
97
97
|
});
|
|
98
98
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"legend-utils.js","sourceRoot":"","sources":["../../../../src/charts/utils/legend-utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAGL,gBAAgB,GACjB,MAAM,SAAS,CAAC;AAEjB,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,KAAkB,EAAE,EAAE;IAC5D,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;IACjC,MAAM,UAAU,GAAI,MAAM,CAAC,MAAgC,IAAI,EAAE,CAAC;IAElE,UAAU,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,WAAmB,EAAE,EAAE;QAClD,KAAK,CAAC,cAAc,CAAC;YACnB,WAAW;YACX,IAAI,EAAE,UAAU;SACjB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,mCAAmC,GAAG,CAC1C,KAAkB,EAClB,uBAA0D,EAC1D,MAAgC,EAChC,mBAAyD,EACzD,EAAE;;IACF,MAAM,UAAU,GAAG,MAAM,KAAK,UAAU,CAAC;IACzC,MAAM,oBAAoB,GACxB,CAAC,mBAAmB,aAAnB,mBAAmB,uBAAnB,mBAAmB,CAAE,MAAgD;QACtE,EAAE,CAAC;IAEL,oEAAoE;IACpE,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,SAAS,CAAC;QACf,MAAM,EAAE,oBAAoB,aAApB,oBAAoB,uBAApB,oBAAoB,CAAE,GAAG,CAC/B,CAAC,UAAmC,EAAE,EAAE,CAAC,iCACpC,UAAU,KACb,QAAQ,kCACF,UAAU,CAAC,QAAoC,KACnD,QAAQ,EAAE,UAAU,OAEtB,CACH;KACF,CAAC,CAAC;IAEH,MAAM,qBAAqB,GAAG,MAAA,oBAAoB,aAApB,oBAAoB,uBAApB,oBAAoB;IAChD,wFAAwF;KACtF,GAAG,CAAC,CAAC,UAAU,EAAE,KAAK,EAAE,EAAE,CAAC,iCACxB,UAAU,KACb,WAAW,EAAE,KAAK,IAClB,CAAC,0CAED,MAAM,CAAC,CAAC,UAAmC,EAAE,EAAE,CAC/C,uBAAuB,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,UAAU,CAAC,IAAI,CAAC,CAC1E,CAAC;IAEJ,IAAI,CAAC,qBAAqB,CAAC,MAAM,EAAE,CAAC;QAClC,OAAO;IACT,CAAC;IAED,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,cAAc,CAAC;QACpB,WAAW,EAAE,qBAAqB,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC;QACtE,IAAI,EAAE,MAAM;KACb,CAAC,CAAC;AACL,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,4BAA4B,GAAG,CACnC,KAAkB,EAClB,uBAA0D,EAC1D,MAAgC,EAChC,mBAAyD,EACzD,EAAE;;IACF,MAAM,UAAU,GAAG,MAAM,KAAK,UAAU,CAAC;IACzC,MAAM,oBAAoB,GACxB,CAAC,mBAAmB,aAAnB,mBAAmB,uBAAnB,mBAAmB,CAAE,MAAgD;QACtE,EAAE,CAAC;IAEL,iFAAiF;IACjF,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,SAAS,CAAC;QACf,MAAM,EAAE,oBAAoB,aAApB,oBAAoB,uBAApB,oBAAoB,CAAE,GAAG,CAC/B,CAAC,UAAmC,EAAE,EAAE,CAAC,iCACpC,UAAU,KACb,IAAI,EAAE;gBACJ,SAAS,EAAE;oBACT,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG;iBAC9B;gBACD,KAAK,EAAE;oBACL,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG;iBAC9B;aACF,IACD,CACH;KACF,CAAC,CAAC;IAEH,qIAAqI;IACrI,MAAM,kBAAkB,GACtB,mBAAmB,aAAnB,mBAAmB,uBAAnB,mBAAmB,CAAE,OAAmC,CAAC;IAC3D,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,kBAAkB,CAAC;QACpD,CAAC,CAAC,kBAAkB;QACpB,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC;IACzB,MAAM,WAAW,GAAG,MAAA,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAG,CAAC,CAAC,0CAAE,MAAqB,CAAC;IAE7D,gDAAgD;IAChD,MAAM,wBAAwB,GAAG,uBAAuB,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;QACtE,MAAM,KAAK,GAAG,CAAA,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,IAAI,CAAC,IAAG,CAAC,CAAC;QAC5E,OAAO,KAAK,CAAC;IACf,CAAC,CAAC,CAAC;IAEH,IAAI,MAAM,KAAK,WAAW,EAAE,CAAC;QAC3B,gFAAgF;QAChF,MAAM,kBAAkB,GAAG,WAAW;aACnC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC;aAC3B,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,wBAAwB,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;QAExE,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,cAAc,CAAC;YACpB,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,4DAA4D;YAC9E,SAAS,EAAE,kBAAkB;YAC7B,IAAI,EAAE,UAAU;SACjB,CAAC,CAAC;IACL,CAAC;IAED,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,cAAc,CAAC;QACpB,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,mEAAmE;QACrF,SAAS,EAAE,wBAAwB;QACnC,IAAI,EAAE,MAAM;KACb,CAAC,CAAC;AACL,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,yBAAyB,GAAG,CAChC,QAAgD,EAChD,MAAyC,EACzC,qBAA8C,EAC9C,uBAA0D,EAC1D,MAAgC,EAChC,EAAE;;IACF,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC;IAE7C,MAAM,uBAAuB,GAC3B,MAAM,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;IAEpE,IACE,uBAAuB;QACvB,uBAAuB,CAAC,MAAM,KAAK,CAAC;QACpC,QAAQ,CAAC,OAAO,KAAK,IAAI;QACzB,gBAAgB,EAChB,CAAC;QACD,OAAO;IACT,CAAC;IAED,MAAM,KAAK,GAAG,gBAAgB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAEjD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO;IACT,CAAC;IACD,MAAM,mBAAmB,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;IAE9C,MAAM,UAAU,GAAG,MAAA,MACjB,mBAAmB,aAAnB,mBAAmB,uBAAnB,mBAAmB,CAAE,MACtB,0CAAG,CAAC,CAAC,0CAAE,IAAI,CAAC;IAEb,IAAI,UAAU,KAAK,KAAK,EAAE,CAAC;QACzB,4BAA4B,CAC1B,KAAK,EACL,uBAAuB,EACvB,MAAM,EACN,mBAAmB,CACpB,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,mCAAmC,CACjC,KAAK,EACL,uBAAuB,EACvB,MAAM,EACN,mBAAmB,CACpB,CAAC;IACJ,CAAC;AACH,CAAC,CAAC;AAEF,OAAO,EAAE,yBAAyB,EAAE,CAAC","sourcesContent":["/**\n *\n * Copyright (c) \"Neo4j\"\n * Neo4j Sweden AB [http://neo4j.com]\n *\n * This file is part of Neo4j.\n *\n * Neo4j is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport {\n type EChartsOption,\n type EChartsType,\n getInstanceByDom,\n} from 'echarts';\n\nexport const resetAllSeriesHighlight = (chart: EChartsType) => {\n const option = chart.getOption();\n const seriesList = (option.series as unknown[] | undefined) || [];\n\n seriesList.forEach((_series, seriesIndex: number) => {\n chart.dispatchAction({\n seriesIndex,\n type: 'downplay',\n });\n });\n};\n\nconst highlightOrDownplayLineAndBarSeries = (\n chart: EChartsType,\n currentSeriesToDispatch: { name: string; color: string }[],\n action: 'highlight' | 'downplay',\n currentChartOptions: ReturnType<EChartsType['getOption']>,\n) => {\n const isDownplay = action === 'downplay';\n const allChartOptionSeries =\n (currentChartOptions?.series as Record<string, unknown>[] | undefined) ||\n [];\n\n // Change emphasis state to add opacity on the non highlighted items\n chart?.setOption({\n series: allChartOptionSeries?.map(\n (seriesItem: Record<string, unknown>) => ({\n ...seriesItem,\n emphasis: {\n ...(seriesItem.emphasis as Record<string, unknown>),\n disabled: isDownplay,\n },\n }),\n ),\n });\n\n const seriesWithSeriesIndex = allChartOptionSeries\n // Since the series index does not exist in the data we extract it from the series index\n ?.map((seriesItem, index) => ({\n ...seriesItem,\n seriesIndex: index,\n }))\n // Select the series that are in the currentSeriesToDispatch array\n ?.filter((seriesItem: Record<string, unknown>) =>\n currentSeriesToDispatch.some((series) => series.name === seriesItem.name),\n );\n\n if (!seriesWithSeriesIndex.length) {\n return;\n }\n\n chart?.dispatchAction({\n seriesIndex: seriesWithSeriesIndex.map((series) => series.seriesIndex),\n type: action,\n });\n};\n\n/**\n * Highlight or downplay pie chart dataset item\n */\nconst highlightOrDownplayPieSlices = (\n chart: EChartsType,\n currentSeriesToDispatch: { name: string; color: string }[],\n action: 'highlight' | 'downplay',\n currentChartOptions: ReturnType<EChartsType['getOption']>,\n) => {\n const isDownplay = action === 'downplay';\n const allChartOptionSeries =\n (currentChartOptions?.series as Record<string, unknown>[] | undefined) ||\n [];\n\n // Change blur state to add opacity on the non highlighted items in the pie chart\n chart?.setOption({\n series: allChartOptionSeries?.map(\n (seriesItem: Record<string, unknown>) => ({\n ...seriesItem,\n blur: {\n itemStyle: {\n opacity: isDownplay ? 1 : 0.3,\n },\n label: {\n opacity: isDownplay ? 1 : 0.3,\n },\n },\n }),\n ),\n });\n\n // The dataIndex that we want to dispatch can be found in the dataset[0] source array, where the first item is the name of the series\n const chartOptionDataset =\n currentChartOptions?.dataset as EChartsOption['dataset'];\n const datasetArray = Array.isArray(chartOptionDataset)\n ? chartOptionDataset\n : [chartOptionDataset];\n const sourceArray = datasetArray?.[0]?.source as unknown[][];\n\n // Find the dataIndexes that we want to dispatch\n const currentDataSeriesIndexes = currentSeriesToDispatch.map((series) => {\n const index = sourceArray?.findIndex((item) => item[0] === series.name) - 1;\n return index;\n });\n\n if (action === 'highlight') {\n // Downplay other data indexes to make sure the other slices are not highlighted\n const otherSeriesIndexes = sourceArray\n .map((_row, index) => index)\n .filter((dataIndex) => !currentDataSeriesIndexes.includes(dataIndex));\n\n chart?.dispatchAction({\n seriesIndex: [0], // pie charts only has one series so seriesIndex is always 0\n dataIndex: otherSeriesIndexes,\n type: 'downplay',\n });\n }\n\n chart?.dispatchAction({\n seriesIndex: [0], // pie charts only has one series so otherSeriesIndexes is always 0\n dataIndex: currentDataSeriesIndexes,\n type: action,\n });\n};\n\n/**\n * Highlight or downplay the series in the chart to toggle between emphasized and non-emphasized state\n */\nconst highlightOrDownplaySeries = (\n chartRef: React.RefObject<HTMLDivElement | null>,\n series: { name: string; color: string }[],\n currentSelectedSeries: Record<string, boolean>,\n currentSeriesToDispatch: { name: string; color: string }[],\n action: 'highlight' | 'downplay',\n) => {\n const hasOnlyOneSeries = series.length === 1;\n\n const isOnlyOneSeriesSelected =\n Object.values(currentSelectedSeries).filter(Boolean).length === 1;\n\n if (\n isOnlyOneSeriesSelected ||\n currentSeriesToDispatch.length === 0 ||\n chartRef.current === null ||\n hasOnlyOneSeries\n ) {\n return;\n }\n\n const chart = getInstanceByDom(chartRef.current);\n\n if (!chart) {\n return;\n }\n const currentChartOptions = chart.getOption();\n\n const seriesType = (\n currentChartOptions?.series as Record<string, unknown>[]\n )?.[0]?.type;\n\n if (seriesType === 'pie') {\n highlightOrDownplayPieSlices(\n chart,\n currentSeriesToDispatch,\n action,\n currentChartOptions,\n );\n } else {\n highlightOrDownplayLineAndBarSeries(\n chart,\n currentSeriesToDispatch,\n action,\n currentChartOptions,\n );\n }\n};\n\nexport { highlightOrDownplaySeries };\n"]}
|
|
1
|
+
{"version":3,"file":"legend-utils.js","sourceRoot":"","sources":["../../../../src/charts/utils/legend-utils.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n *\n * Copyright (c) \"Neo4j\"\n * Neo4j Sweden AB [http://neo4j.com]\n *\n * This file is part of Neo4j.\n *\n * Neo4j is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport {\n type EChartsOption,\n type EChartsType,\n getInstanceByDom,\n} from 'echarts';\n\nexport const resetAllSeriesHighlight = (chart: EChartsType) => {\n const option = chart.getOption();\n const seriesList = (option.series as unknown[] | undefined) || [];\n\n seriesList.forEach((_series, seriesIndex: number) => {\n chart.dispatchAction({\n seriesIndex,\n type: 'downplay',\n });\n });\n};\n\nconst highlightOrDownplayLineAndBarSeries = (\n chart: EChartsType,\n currentSeriesToDispatch: { name: string; color: string }[],\n action: 'highlight' | 'downplay',\n currentChartOptions: ReturnType<EChartsType['getOption']>,\n) => {\n const isDownplay = action === 'downplay';\n const allChartOptionSeries =\n (currentChartOptions?.series as Record<string, unknown>[] | undefined) ||\n [];\n\n // Change emphasis state to add opacity on the non highlighted items\n chart?.setOption({\n series: allChartOptionSeries?.map(\n (seriesItem: Record<string, unknown>) => ({\n ...seriesItem,\n emphasis: {\n ...(seriesItem.emphasis as Record<string, unknown>),\n disabled: isDownplay,\n },\n }),\n ),\n });\n\n const seriesWithSeriesIndex = allChartOptionSeries\n // Since the series index does not exist in the data we extract it from the series index\n ?.map((seriesItem, index) => ({\n ...seriesItem,\n seriesIndex: index,\n }))\n // Select the series that are in the currentSeriesToDispatch array\n ?.filter((seriesItem: Record<string, unknown>) =>\n currentSeriesToDispatch.some((series) => series.name === seriesItem.name),\n );\n\n if (!seriesWithSeriesIndex.length) {\n return;\n }\n\n chart?.dispatchAction({\n seriesIndex: seriesWithSeriesIndex.map((series) => series.seriesIndex),\n type: action,\n });\n};\n\n/**\n * Highlight or downplay pie chart dataset item\n */\nconst highlightOrDownplayPieSlices = (\n chart: EChartsType,\n currentSeriesToDispatch: { name: string; color: string }[],\n action: 'highlight' | 'downplay',\n currentChartOptions: ReturnType<EChartsType['getOption']>,\n) => {\n const isDownplay = action === 'downplay';\n const allChartOptionSeries =\n (currentChartOptions?.series as Record<string, unknown>[] | undefined) ||\n [];\n\n // Change blur state to add opacity on the non highlighted items in the pie chart\n chart?.setOption({\n series: allChartOptionSeries?.map(\n (seriesItem: Record<string, unknown>) => ({\n ...seriesItem,\n blur: {\n itemStyle: {\n opacity: isDownplay ? 1 : 0.3,\n },\n label: {\n opacity: isDownplay ? 1 : 0.3,\n },\n },\n }),\n ),\n });\n\n // The dataIndex that we want to dispatch can be found in the dataset[0] source array, where the first item is the name of the series\n const chartOptionDataset =\n currentChartOptions?.dataset as EChartsOption['dataset'];\n const datasetArray = Array.isArray(chartOptionDataset)\n ? chartOptionDataset\n : [chartOptionDataset];\n const sourceArray = datasetArray?.[0]?.source as unknown[][];\n\n // Find the dataIndexes that we want to dispatch\n const currentDataSeriesIndexes = currentSeriesToDispatch.map((series) => {\n const index = sourceArray?.findIndex((item) => item[0] === series.name) - 1;\n return index;\n });\n\n if (action === 'highlight') {\n // Downplay other data indexes to make sure the other slices are not highlighted\n const otherSeriesIndexes = sourceArray\n .map((_row, index) => index)\n .filter((dataIndex) => !currentDataSeriesIndexes.includes(dataIndex));\n\n chart?.dispatchAction({\n dataIndex: otherSeriesIndexes,\n seriesIndex: [0], // pie charts only has one series so seriesIndex is always 0\n type: 'downplay',\n });\n }\n\n chart?.dispatchAction({\n dataIndex: currentDataSeriesIndexes,\n seriesIndex: [0], // pie charts only has one series so otherSeriesIndexes is always 0\n type: action,\n });\n};\n\n/**\n * Highlight or downplay the series in the chart to toggle between emphasized and non-emphasized state\n */\nconst highlightOrDownplaySeries = (\n chartRef: React.RefObject<HTMLDivElement | null>,\n series: { name: string; color: string }[],\n currentSelectedSeries: Record<string, boolean>,\n currentSeriesToDispatch: { name: string; color: string }[],\n action: 'highlight' | 'downplay',\n) => {\n const hasOnlyOneSeries = series.length === 1;\n\n const isOnlyOneSeriesSelected =\n Object.values(currentSelectedSeries).filter(Boolean).length === 1;\n\n if (\n isOnlyOneSeriesSelected ||\n currentSeriesToDispatch.length === 0 ||\n chartRef.current === null ||\n hasOnlyOneSeries\n ) {\n return;\n }\n\n const chart = getInstanceByDom(chartRef.current);\n\n if (!chart) {\n return;\n }\n const currentChartOptions = chart.getOption();\n\n const seriesType = (\n currentChartOptions?.series as Record<string, unknown>[]\n )?.[0]?.type;\n\n if (seriesType === 'pie') {\n highlightOrDownplayPieSlices(\n chart,\n currentSeriesToDispatch,\n action,\n currentChartOptions,\n );\n } else {\n highlightOrDownplayLineAndBarSeries(\n chart,\n currentSeriesToDispatch,\n action,\n currentChartOptions,\n );\n }\n};\n\nexport { highlightOrDownplaySeries };\n"]}
|
|
@@ -41,7 +41,7 @@ export const mergeSeries = (series, theme = 'light', userOption, palette) => {
|
|
|
41
41
|
// Needed to differentiate between normal lines and threshold lines
|
|
42
42
|
// as we are unable to inject custom properties into echarts series lines.
|
|
43
43
|
const thresholdLineName = `thresholdLine-${notificationType}`;
|
|
44
|
-
return Object.assign(Object.assign({ symbolSize: 9, symbol: 'none', condition: defaultThresholdLineSeriesOption.condition }, option), { lineStyle: Object.assign({
|
|
44
|
+
return Object.assign(Object.assign({ symbolSize: 9, symbol: 'none', condition: defaultThresholdLineSeriesOption.condition }, option), { lineStyle: Object.assign({ type: 'dashed', width: 2 }, option.lineStyle), name: thresholdLineName, type: 'line', data: [
|
|
45
45
|
[option.xAxis[0], option.yAxis],
|
|
46
46
|
[option.xAxis[1], option.yAxis],
|
|
47
47
|
] });
|
|
@@ -49,7 +49,7 @@ export const mergeSeries = (series, theme = 'light', userOption, palette) => {
|
|
|
49
49
|
if (option.type === 'line') {
|
|
50
50
|
const shadow = tokens.theme[theme].boxShadow.raised;
|
|
51
51
|
const shadowParts = shadow.split(/ (?=\d+px|rgba?\()/);
|
|
52
|
-
return Object.assign(Object.assign({ type: 'line', symbolSize: 9, color, symbol: 'none' }, option), { lineStyle: Object.assign({
|
|
52
|
+
return Object.assign(Object.assign({ type: 'line', symbolSize: 9, color, symbol: 'none' }, option), { lineStyle: Object.assign({ type: 'solid', width: 2 }, option.lineStyle), emphasis: Object.assign(Object.assign(Object.assign({ disabled: true, focus: 'series' }, option.emphasis), { itemStyle: Object.assign({ borderColor: tokens.theme[theme].color.neutral.bg.weak, shadowBlur: parseInt(shadowParts[2]), shadowColor: shadowParts[4], shadowOffsetX: parseInt(shadowParts[0]), shadowOffsetY: parseInt(shadowParts[1]) }, (_b = option.emphasis) === null || _b === void 0 ? void 0 : _b.itemStyle), label: { show: false } }), option.emphasis) });
|
|
53
53
|
}
|
|
54
54
|
if (option.type === 'pie') {
|
|
55
55
|
const valueFormatter = getTooltipValueFormatter(userOption);
|
|
@@ -58,7 +58,7 @@ export const mergeSeries = (series, theme = 'light', userOption, palette) => {
|
|
|
58
58
|
// being opacitated when hovering a slice where the emphasis is enabled (used for scale effect)
|
|
59
59
|
blur: Object.assign({ itemStyle: Object.assign({ opacity: 1 }, (_c = option.blur) === null || _c === void 0 ? void 0 : _c.itemStyle), label: Object.assign({ opacity: 1 }, (_d = option.blur) === null || _d === void 0 ? void 0 : _d.label) }, option.blur),
|
|
60
60
|
// Emphasis is enabled and used to apply the scale effect when hovering the pie chart slices.
|
|
61
|
-
emphasis: Object.assign({ disabled: false, focus: 'self', scale: true, scaleSize: 5 }, option.emphasis), itemStyle: Object.assign({ borderColor: tokens.theme[theme].color.neutral.bg.weak, borderWidth: 1 }, option.itemStyle), label: Object.assign({
|
|
61
|
+
emphasis: Object.assign({ disabled: false, focus: 'self', scale: true, scaleSize: 5 }, option.emphasis), itemStyle: Object.assign({ borderColor: tokens.theme[theme].color.neutral.bg.weak, borderWidth: 1 }, option.itemStyle), label: Object.assign({ backgroundColor: 'transparent', color: tokens.theme[theme].color.neutral.text.weak, formatter: '{d}%' }, option.label), labelLine: Object.assign({ length: 5, show: true }, option.labelLine), tooltip: Object.assign({ trigger: 'item', confine: true,
|
|
62
62
|
// Reset the default tooltip css styling
|
|
63
63
|
padding: 0, borderRadius: 0, borderWidth: 0, extraCssText: 'box-shadow: none; background-color: transparent;', formatter: function (params) {
|
|
64
64
|
var _a, _b;
|
|
@@ -71,7 +71,7 @@ export const mergeSeries = (series, theme = 'light', userOption, palette) => {
|
|
|
71
71
|
}
|
|
72
72
|
if (option.type === 'bar') {
|
|
73
73
|
const valueFormatter = getTooltipValueFormatter(userOption);
|
|
74
|
-
return Object.assign(Object.assign({ barMaxWidth: 16 }, option), { blur: Object.assign({ itemStyle: Object.assign({ opacity: 0.3 }, (_e = option.blur) === null || _e === void 0 ? void 0 : _e.itemStyle) }, option.blur), emphasis: Object.assign({ disabled: true, focus: 'series' }, option.emphasis), itemStyle: Object.assign({
|
|
74
|
+
return Object.assign(Object.assign({ barMaxWidth: 16 }, option), { blur: Object.assign({ itemStyle: Object.assign({ opacity: 0.3 }, (_e = option.blur) === null || _e === void 0 ? void 0 : _e.itemStyle) }, option.blur), emphasis: Object.assign({ disabled: true, focus: 'series' }, option.emphasis), itemStyle: Object.assign({ borderWidth: 20, color }, option.itemStyle), markLine: {
|
|
75
75
|
emphasis: Object.assign({ disabled: true, lineStyle: Object.assign({ width: 20 }, (_g = (_f = option.markLine) === null || _f === void 0 ? void 0 : _f.emphasis) === null || _g === void 0 ? void 0 : _g.lineStyle) }, (_h = option.markLine) === null || _h === void 0 ? void 0 : _h.emphasis),
|
|
76
76
|
lineStyle: Object.assign({ width: 20 }, (_j = option.markLine) === null || _j === void 0 ? void 0 : _j.lineStyle),
|
|
77
77
|
}, tooltip: Object.assign({ trigger: 'axis', confine: true,
|
|
@@ -96,7 +96,7 @@ export const mergeXAxis = (xAxis, theme = 'light') => {
|
|
|
96
96
|
if (Array.isArray(xAxis)) {
|
|
97
97
|
return xAxis.map((axis) => mergeXAxis(axis, theme));
|
|
98
98
|
}
|
|
99
|
-
const baseXAxis = Object.assign(Object.assign({}, xAxis), {
|
|
99
|
+
const baseXAxis = Object.assign(Object.assign({}, xAxis), { axisLabel: Object.assign({ formatter: {
|
|
100
100
|
day: '{dd} {MMM}',
|
|
101
101
|
hour: '{HH}:{mm}',
|
|
102
102
|
millisecond: '{hh}:{mm}:{ss} {SSS}',
|
|
@@ -105,7 +105,7 @@ export const mergeXAxis = (xAxis, theme = 'light') => {
|
|
|
105
105
|
none: '{yyyy}-{MM}-{dd} {hh}:{mm}:{ss} {SSS}',
|
|
106
106
|
second: '{HH}:{mm}:{ss}',
|
|
107
107
|
year: '{yearStyle|{yyyy}}\n{monthStyle|{MMM}}',
|
|
108
|
-
}, overflow: 'truncate' }, xAxis === null || xAxis === void 0 ? void 0 : xAxis.axisLabel) });
|
|
108
|
+
}, margin: 16, overflow: 'truncate' }, xAxis === null || xAxis === void 0 ? void 0 : xAxis.axisLabel), axisLine: Object.assign({ lineStyle: Object.assign({}, (_a = xAxis === null || xAxis === void 0 ? void 0 : xAxis.axisLine) === null || _a === void 0 ? void 0 : _a.lineStyle) }, xAxis === null || xAxis === void 0 ? void 0 : xAxis.axisLine), axisTick: Object.assign(Object.assign(Object.assign({}, xAxis === null || xAxis === void 0 ? void 0 : xAxis.axisTick), { lineStyle: Object.assign({}, (_b = xAxis === null || xAxis === void 0 ? void 0 : xAxis.axisTick) === null || _b === void 0 ? void 0 : _b.lineStyle), show: true }), xAxis === null || xAxis === void 0 ? void 0 : xAxis.axisTick), splitLine: Object.assign({ show: false }, xAxis === null || xAxis === void 0 ? void 0 : xAxis.splitLine) });
|
|
109
109
|
if (xAxis.type === 'time') {
|
|
110
110
|
const timeXAxis = Object.assign(Object.assign({}, baseXAxis), { axisLabel: Object.assign({ hideOverlap: true }, baseXAxis.axisLabel) });
|
|
111
111
|
return timeXAxis;
|
|
@@ -118,7 +118,7 @@ export const mergeXAxis = (xAxis, theme = 'light') => {
|
|
|
118
118
|
return valueXAxis;
|
|
119
119
|
}
|
|
120
120
|
if (xAxis.type === 'category') {
|
|
121
|
-
const categoryXAxis = Object.assign(Object.assign({}, baseXAxis), {
|
|
121
|
+
const categoryXAxis = Object.assign(Object.assign({}, baseXAxis), { axisLabel: Object.assign({ width: 80 }, baseXAxis === null || baseXAxis === void 0 ? void 0 : baseXAxis.axisLabel), axisTick: Object.assign({ alignWithLabel: true }, baseXAxis === null || baseXAxis === void 0 ? void 0 : baseXAxis.axisTick) });
|
|
122
122
|
return categoryXAxis;
|
|
123
123
|
}
|
|
124
124
|
return baseXAxis;
|
|
@@ -131,7 +131,7 @@ export const mergeYAxis = (yAxis, theme = 'light') => {
|
|
|
131
131
|
if (Array.isArray(yAxis)) {
|
|
132
132
|
return yAxis.map((axis) => mergeYAxis(axis, theme));
|
|
133
133
|
}
|
|
134
|
-
const baseYAxis = Object.assign(Object.assign({}, yAxis), { axisLine: Object.assign(Object.assign({}, yAxis === null || yAxis === void 0 ? void 0 : yAxis.axisLine), { lineStyle: Object.assign({}, (_a = yAxis === null || yAxis === void 0 ? void 0 : yAxis.axisLine) === null || _a === void 0 ? void 0 : _a.lineStyle), show: true }), axisTick: Object.assign(Object.assign({ show: false }, yAxis === null || yAxis === void 0 ? void 0 : yAxis.axisTick), { lineStyle: Object.assign({ width: 1 }, (_b = yAxis === null || yAxis === void 0 ? void 0 : yAxis.axisTick) === null || _b === void 0 ? void 0 : _b.lineStyle) }),
|
|
134
|
+
const baseYAxis = Object.assign(Object.assign({}, yAxis), { axisLabel: Object.assign({ margin: 8, overflow: 'truncate' }, yAxis === null || yAxis === void 0 ? void 0 : yAxis.axisLabel), axisLine: Object.assign(Object.assign({}, yAxis === null || yAxis === void 0 ? void 0 : yAxis.axisLine), { lineStyle: Object.assign({}, (_a = yAxis === null || yAxis === void 0 ? void 0 : yAxis.axisLine) === null || _a === void 0 ? void 0 : _a.lineStyle), show: true }), axisTick: Object.assign(Object.assign({ show: false }, yAxis === null || yAxis === void 0 ? void 0 : yAxis.axisTick), { lineStyle: Object.assign({ width: 1 }, (_b = yAxis === null || yAxis === void 0 ? void 0 : yAxis.axisTick) === null || _b === void 0 ? void 0 : _b.lineStyle) }), splitLine: Object.assign({ show: true }, yAxis === null || yAxis === void 0 ? void 0 : yAxis.splitLine) });
|
|
135
135
|
if (yAxis.type === 'time') {
|
|
136
136
|
const timeYAxis = Object.assign(Object.assign({}, baseYAxis), { axisLabel: Object.assign({ hideOverlap: true }, baseYAxis.axisLabel), splitLine: Object.assign({ show: false }, baseYAxis === null || baseYAxis === void 0 ? void 0 : baseYAxis.splitLine) });
|
|
137
137
|
return timeYAxis;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user-option-utils.js","sourceRoot":"","sources":["../../../../src/charts/utils/user-option-utils.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\n *\n * Copyright (c) \"Neo4j\"\n * Neo4j Sweden AB [http://neo4j.com]\n *\n * This file is part of Neo4j.\n *\n * Neo4j is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { tokens } from '@neo4j-ndl/base';\nimport { type EChartsOption, type SeriesOption } from 'echarts';\nimport { renderToString } from 'react-dom/server';\n\nimport { ChartTooltip } from '../ChartTooltip';\nimport { getTooltipValueFormatter } from './chart-tooltip-formatter';\nimport {\n type EchartsSeries,\n type HexColor,\n type NeedleSeries,\n type ThresholdLineSeriesOption,\n} from './chart-types';\nimport { defaultThresholdLineSeriesOption } from './defaults';\nimport { formatNumberEnUS } from './format-utils';\n\nconst defaultColors = Object.values(tokens.categorical);\n\ntype SingleXAxisOption = Exclude<\n NonNullable<EChartsOption['xAxis']>,\n unknown[]\n>;\ntype SingleYAxisOption = Exclude<\n NonNullable<EChartsOption['yAxis']>,\n unknown[]\n>;\n\nexport const mergeSeries = (\n series: NeedleSeries,\n theme: 'light' | 'dark' = 'light',\n userOption?: Omit<\n EChartsOption,\n 'series' | 'dataset' | 'legend' | 'xAxis' | 'yAxis'\n >,\n palette?: HexColor[],\n): EchartsSeries => {\n const colors = palette ?? defaultColors;\n\n return series.map(\n (\n option:\n | SeriesOption\n | ThresholdLineSeriesOption<'warning'>\n | ThresholdLineSeriesOption<'danger'>,\n index: number = 0,\n ): SeriesOption => {\n if (option === undefined) {\n return {};\n }\n\n const color = Array.isArray(option.color)\n ? option.color[index]\n : (option.color ?? colors[index % colors.length]);\n\n if (option.type === 'thresholdLine') {\n const { notificationType } = option;\n // Needed to differentiate between normal lines and threshold lines\n // as we are unable to inject custom properties into echarts series lines.\n const thresholdLineName = `thresholdLine-${notificationType}`;\n return {\n symbolSize: 9,\n symbol: 'none',\n condition: defaultThresholdLineSeriesOption.condition,\n ...option,\n lineStyle: {\n width: 2,\n type: 'dashed',\n ...option.lineStyle,\n },\n name: thresholdLineName,\n type: 'line',\n data: [\n [option.xAxis[0], option.yAxis],\n [option.xAxis[1], option.yAxis],\n ],\n };\n }\n\n if (option.type === 'line') {\n const shadow = tokens.theme[theme].boxShadow.raised;\n const shadowParts = shadow.split(/ (?=\\d+px|rgba?\\()/);\n\n return {\n type: 'line',\n symbolSize: 9,\n color,\n symbol: 'none',\n ...option,\n lineStyle: {\n width: 2,\n type: 'solid' as const,\n ...option.lineStyle,\n },\n emphasis: {\n disabled: true,\n focus: 'series',\n ...option.emphasis,\n itemStyle: {\n borderColor: tokens.theme[theme].color.neutral.bg.weak,\n shadowOffsetX: parseInt(shadowParts[0]),\n shadowOffsetY: parseInt(shadowParts[1]),\n shadowBlur: parseInt(shadowParts[2]),\n shadowColor: shadowParts[4],\n ...option.emphasis?.itemStyle,\n },\n label: { show: false },\n ...option.emphasis,\n },\n };\n }\n\n if (option.type === 'pie') {\n const valueFormatter = getTooltipValueFormatter(userOption);\n\n return {\n animationDuration: 600,\n animationType: 'scale',\n selectedMode: 'single',\n ...option,\n // Blur opacity is set to 1 to prevent other slices from\n // being opacitated when hovering a slice where the emphasis is enabled (used for scale effect)\n blur: {\n itemStyle: {\n opacity: 1,\n ...option.blur?.itemStyle,\n },\n label: {\n opacity: 1,\n ...option.blur?.label,\n },\n ...option.blur,\n },\n // Emphasis is enabled and used to apply the scale effect when hovering the pie chart slices.\n emphasis: {\n disabled: false,\n focus: 'self',\n scale: true,\n scaleSize: 5,\n ...option.emphasis,\n },\n itemStyle: {\n borderColor: tokens.theme[theme].color.neutral.bg.weak,\n borderWidth: 1,\n ...option.itemStyle,\n },\n label: {\n formatter: '{d}%',\n backgroundColor: 'transparent',\n color: tokens.theme[theme].color.neutral.text.weak,\n ...option.label,\n },\n labelLine: {\n length: 5,\n show: true,\n ...option.labelLine,\n },\n tooltip: {\n trigger: 'item',\n confine: true,\n // Reset the default tooltip css styling\n padding: 0,\n borderRadius: 0,\n borderWidth: 0,\n extraCssText: 'box-shadow: none; background-color: transparent;',\n formatter: function (params: unknown) {\n const paramsArray = Array.isArray(params) ? params : [params];\n const firstParam = paramsArray[0];\n return `${renderToString(\n <span className=\"ndl-charts-chart-tooltip\">\n <ChartTooltip.Content\n key={firstParam?.value[0] ?? firstParam.seriesName}\n leadingElement={\n firstParam?.value[0] ?? firstParam.seriesName\n }\n trailingElement={valueFormatter(\n Array.isArray(firstParam.value)\n ? firstParam.value[1]\n : firstParam.value,\n )}\n indentSquareColor={firstParam.color}\n />\n </span>,\n )}`;\n },\n ...option.tooltip,\n },\n };\n }\n\n if (option.type === 'bar') {\n const valueFormatter = getTooltipValueFormatter(userOption);\n\n return {\n barMaxWidth: 16,\n ...option,\n blur: {\n itemStyle: {\n opacity: 0.3,\n ...option.blur?.itemStyle,\n },\n ...option.blur,\n },\n emphasis: {\n disabled: true,\n focus: 'series',\n ...option.emphasis,\n },\n itemStyle: {\n color,\n borderWidth: 20,\n ...option.itemStyle,\n },\n markLine: {\n emphasis: {\n disabled: true,\n lineStyle: {\n width: 20,\n ...option.markLine?.emphasis?.lineStyle,\n },\n ...option.markLine?.emphasis,\n },\n lineStyle: {\n width: 20,\n ...option.markLine?.lineStyle,\n },\n },\n tooltip: {\n trigger: 'axis',\n confine: true,\n // Reset the default tooltip css styling\n padding: 0,\n borderRadius: 0,\n borderWidth: 0,\n extraCssText: 'box-shadow: none; background-color: transparent;',\n formatter: function (params: unknown) {\n const paramsArray = Array.isArray(params) ? params : [params];\n const firstParam = paramsArray[0];\n return `${renderToString(\n <span className=\"ndl-charts-chart-tooltip\">\n <ChartTooltip.Title>{firstParam.name}</ChartTooltip.Title>\n <ChartTooltip.Content\n key={firstParam?.value[0] ?? firstParam.seriesName}\n leadingElement={firstParam.seriesName}\n trailingElement={valueFormatter(\n Array.isArray(firstParam.value)\n ? firstParam.value[1]\n : firstParam.value,\n )}\n indentSquareColor={firstParam.color}\n />\n </span>,\n )}`;\n },\n ...option.tooltip,\n },\n };\n }\n\n return option;\n },\n );\n};\n\nexport const mergeXAxis = (\n xAxis: EChartsOption['xAxis'],\n theme: 'light' | 'dark' = 'light',\n): EChartsOption['xAxis'] => {\n if (xAxis === undefined) {\n return [];\n }\n\n if (Array.isArray(xAxis)) {\n return xAxis.map((axis) =>\n mergeXAxis(axis, theme),\n ) as EChartsOption['xAxis'];\n }\n\n const baseXAxis = {\n ...xAxis,\n splitLine: { show: false, ...xAxis?.splitLine },\n axisLine: {\n lineStyle: {\n ...xAxis?.axisLine?.lineStyle,\n },\n ...xAxis?.axisLine,\n },\n axisTick: {\n ...xAxis?.axisTick,\n lineStyle: {\n ...xAxis?.axisTick?.lineStyle,\n },\n show: true,\n ...xAxis?.axisTick,\n },\n axisLabel: {\n margin: 16,\n formatter: {\n day: '{dd} {MMM}',\n hour: '{HH}:{mm}',\n millisecond: '{hh}:{mm}:{ss} {SSS}',\n minute: '{HH}:{mm}',\n month: '{MMM}',\n none: '{yyyy}-{MM}-{dd} {hh}:{mm}:{ss} {SSS}',\n second: '{HH}:{mm}:{ss}',\n year: '{yearStyle|{yyyy}}\\n{monthStyle|{MMM}}',\n },\n overflow: 'truncate',\n ...xAxis?.axisLabel,\n },\n } as SingleXAxisOption;\n\n if (xAxis.type === 'time') {\n const timeXAxis = {\n ...baseXAxis,\n axisLabel: {\n hideOverlap: true,\n ...baseXAxis.axisLabel,\n },\n } as SingleXAxisOption;\n\n return timeXAxis;\n }\n\n if (xAxis.type === 'value' || xAxis.type === 'log') {\n const xAxisFormatter =\n xAxis.axisLabel && 'formatter' in xAxis.axisLabel\n ? xAxis.axisLabel.formatter\n : undefined;\n const valueXAxis = {\n ...baseXAxis,\n axisLabel: {\n ...baseXAxis.axisLabel,\n formatter: xAxisFormatter ?? formatNumberEnUS,\n },\n } as SingleXAxisOption;\n\n return valueXAxis;\n }\n\n if (xAxis.type === 'category') {\n const categoryXAxis = {\n ...baseXAxis,\n axisTick: {\n alignWithLabel: true,\n ...baseXAxis?.axisTick,\n },\n axisLabel: {\n width: 80,\n ...baseXAxis?.axisLabel,\n },\n } as SingleXAxisOption;\n return categoryXAxis;\n }\n\n return baseXAxis;\n};\n\nexport const mergeYAxis = (\n yAxis: EChartsOption['yAxis'],\n theme: 'light' | 'dark' = 'light',\n): EChartsOption['yAxis'] => {\n if (yAxis === undefined) {\n return [];\n }\n\n if (Array.isArray(yAxis)) {\n return yAxis.map((axis) =>\n mergeYAxis(axis, theme),\n ) as EChartsOption['yAxis'];\n }\n\n const baseYAxis = {\n ...yAxis,\n axisLine: {\n ...yAxis?.axisLine,\n lineStyle: {\n ...yAxis?.axisLine?.lineStyle,\n },\n show: true,\n },\n axisTick: {\n show: false,\n ...yAxis?.axisTick,\n lineStyle: {\n width: 1,\n ...yAxis?.axisTick?.lineStyle,\n },\n },\n axisLabel: {\n margin: 8,\n overflow: 'truncate',\n ...yAxis?.axisLabel,\n },\n splitLine: { show: true, ...yAxis?.splitLine },\n } as SingleYAxisOption;\n\n if (yAxis.type === 'time') {\n const timeYAxis = {\n ...baseYAxis,\n axisLabel: {\n hideOverlap: true,\n ...baseYAxis.axisLabel,\n },\n splitLine: { show: false, ...baseYAxis?.splitLine },\n } as SingleYAxisOption;\n\n return timeYAxis;\n }\n\n if (yAxis.type === 'value' || yAxis.type === 'log') {\n const yAxisFormatter =\n yAxis.axisLabel && 'formatter' in yAxis.axisLabel\n ? yAxis.axisLabel.formatter\n : undefined;\n const valueYAxis = {\n ...baseYAxis,\n axisLabel: {\n hideOverlap: true,\n ...baseYAxis.axisLabel,\n formatter: yAxisFormatter ?? formatNumberEnUS,\n },\n splitLine: { show: false, ...baseYAxis?.splitLine },\n } as SingleYAxisOption;\n\n return valueYAxis;\n }\n\n if (yAxis.type === 'category') {\n const categoryYAxis = {\n ...baseYAxis,\n axisLabel: {\n width: 100,\n ...baseYAxis?.axisLabel,\n },\n } as SingleYAxisOption;\n\n return categoryYAxis;\n }\n\n return baseYAxis;\n};\n\ntype SingleDataZoomOption = Exclude<\n NonNullable<EChartsOption['dataZoom']>,\n unknown[]\n>;\n\ntype MergeDataZoomAxes = {\n xAxis?: EChartsOption['xAxis'];\n yAxis?: EChartsOption['yAxis'];\n};\n\nexport type DataZoomTargetAxes = {\n xAxisIndices: number[];\n yAxisIndices: number[];\n};\n\nconst normalizeAxisIndices = (axisIndex: unknown): number[] => {\n if (typeof axisIndex === 'number') {\n return [axisIndex];\n }\n\n if (Array.isArray(axisIndex)) {\n return axisIndex.filter((index): index is number => {\n return typeof index === 'number';\n });\n }\n\n return [];\n};\n\n/**\n * Resolves the axes a single dataZoom entry targets, mirroring ECharts' own\n * resolution order: explicit `xAxisIndex`/`yAxisIndex` win (`false` meaning\n * \"not this axis\"); when no index is given, `orient: 'vertical'` targets the\n * first y-axis and horizontal/unset targets the first x-axis.\n */\nconst getSingleDataZoomTargets = (\n dataZoom: SingleDataZoomOption | undefined,\n): DataZoomTargetAxes => {\n if (dataZoom?.type !== 'slider' && dataZoom?.type !== 'inside') {\n return { xAxisIndices: [], yAxisIndices: [] };\n }\n\n const hasAxisIndex =\n dataZoom.xAxisIndex !== undefined || dataZoom.yAxisIndex !== undefined;\n\n if (hasAxisIndex) {\n return {\n xAxisIndices: normalizeAxisIndices(dataZoom.xAxisIndex),\n yAxisIndices: normalizeAxisIndices(dataZoom.yAxisIndex),\n };\n }\n\n return dataZoom.orient === 'vertical'\n ? { xAxisIndices: [], yAxisIndices: [0] }\n : { xAxisIndices: [0], yAxisIndices: [] };\n};\n\n/**\n * Union of the axis indices targeted by all slider/inside entries in a\n * dataZoom config, using the same per-entry resolution as ECharts (explicit\n * axis indices first, then orientation).\n */\nexport const getDataZoomTargetAxes = (\n dataZoom: EChartsOption['dataZoom'],\n): DataZoomTargetAxes => {\n const entries = Array.isArray(dataZoom) ? dataZoom : [dataZoom];\n const targets: DataZoomTargetAxes = { xAxisIndices: [], yAxisIndices: [] };\n\n for (const entry of entries) {\n const entryTargets = getSingleDataZoomTargets(entry);\n\n for (const index of entryTargets.xAxisIndices) {\n if (!targets.xAxisIndices.includes(index)) {\n targets.xAxisIndices.push(index);\n }\n }\n\n for (const index of entryTargets.yAxisIndices) {\n if (!targets.yAxisIndices.includes(index)) {\n targets.yAxisIndices.push(index);\n }\n }\n }\n\n return targets;\n};\n\n/**\n * A slider is vertical when the consumer sets `orient: 'vertical'`, or when it\n * only targets a y-axis, which makes ECharts infer the vertical orientation.\n */\nexport const isVerticalSlider = (\n dataZoom: SingleDataZoomOption | undefined,\n): boolean => {\n if (dataZoom?.type !== 'slider') {\n return false;\n }\n\n if (dataZoom.orient !== undefined) {\n return dataZoom.orient === 'vertical';\n }\n\n const targets = getSingleDataZoomTargets(dataZoom);\n\n return targets.yAxisIndices.length > 0 && targets.xAxisIndices.length === 0;\n};\n\n/**\n * Axis types where windowing (`filterMode: 'none'`) beats ECharts' default\n * data filtering. Filtering a continuous axis removes whole data items outside\n * the window, which makes bars and points vanish instead of clipping them.\n * Category axes keep the `'filter'` default so paging through categories still\n * rescales the opposite value axis to the visible data.\n */\nconst WINDOWED_FILTER_AXIS_TYPES = ['log', 'time', 'value'];\n\nconst getSingleAxisOption = (\n axis: EChartsOption['xAxis'] | EChartsOption['yAxis'],\n axisIndex: unknown,\n): { type?: string } | undefined => {\n if (!Array.isArray(axis)) {\n return axis as { type?: string } | undefined;\n }\n\n const index =\n typeof axisIndex === 'number'\n ? axisIndex\n : Array.isArray(axisIndex) && typeof axisIndex[0] === 'number'\n ? axisIndex[0]\n : 0;\n\n return axis[index] as { type?: string } | undefined;\n};\n\n/**\n * Resolves the slider's target axis the way ECharts does (explicit axis index\n * first, then orientation) and returns `'none'` when that axis is continuous.\n * Returns `undefined` (keep ECharts' `'filter'` default) for category axes and\n * for sliders that target both axes at once.\n */\nconst getSliderDefaultFilterMode = (\n dataZoom: SingleDataZoomOption,\n axes: MergeDataZoomAxes | undefined,\n): 'none' | undefined => {\n const targets = getSingleDataZoomTargets(dataZoom);\n const isXAxisTarget = targets.xAxisIndices.length > 0;\n const isYAxisTarget = targets.yAxisIndices.length > 0;\n\n if (isXAxisTarget === isYAxisTarget) {\n return undefined;\n }\n\n const targetAxis = isYAxisTarget\n ? getSingleAxisOption(axes?.yAxis, dataZoom.yAxisIndex)\n : getSingleAxisOption(axes?.xAxis, dataZoom.xAxisIndex);\n\n return targetAxis?.type !== undefined &&\n WINDOWED_FILTER_AXIS_TYPES.includes(targetAxis.type)\n ? 'none'\n : undefined;\n};\n\nexport const mergeDataZoom = (\n dataZoom: EChartsOption['dataZoom'],\n axes?: MergeDataZoomAxes,\n): EChartsOption['dataZoom'] => {\n if (Array.isArray(dataZoom)) {\n return dataZoom.map((option) =>\n mergeDataZoom(option, axes),\n ) as EChartsOption['dataZoom'];\n }\n\n const isSlider = dataZoom?.type === 'slider';\n const isInside = dataZoom?.type === 'inside';\n\n if (isSlider) {\n const filterMode = getSliderDefaultFilterMode(dataZoom, axes);\n const layoutDefaults = isVerticalSlider(dataZoom)\n ? { right: 10, width: 28 }\n : { bottom: 10, height: 28 };\n\n return {\n ...(filterMode !== undefined && { filterMode }),\n ...layoutDefaults,\n show: true,\n type: 'slider',\n ...dataZoom,\n };\n } else if (isInside) {\n // Only pin the default x-axis binding on entries that actually target the\n // x-axis; y-targeting entries (explicit `yAxisIndex` or\n // `orient: 'vertical'`) keep their own binding.\n const targets = getSingleDataZoomTargets(dataZoom);\n const hasDefaultXAxisTarget =\n dataZoom.xAxisIndex === undefined && targets.xAxisIndices.length > 0;\n\n return {\n filterMode: 'none',\n ...(hasDefaultXAxisTarget && { xAxisIndex: [0] }),\n zoomOnMouseWheel: false,\n ...dataZoom,\n };\n }\n\n return dataZoom;\n};\n\ntype MergeToolboxContext = MergeDataZoomAxes & {\n dataZoom?: EChartsOption['dataZoom'];\n};\n\nconst isContinuousAxisOption = (\n axisOption: { type?: string } | undefined,\n): boolean => {\n return (\n axisOption?.type !== undefined &&\n WINDOWED_FILTER_AXIS_TYPES.includes(axisOption.type)\n );\n};\n\nconst areTargetAxesContinuous = (\n axis: EChartsOption['xAxis'] | EChartsOption['yAxis'],\n axisIndices: number[] | 'all',\n): boolean => {\n if (axisIndices === 'all') {\n const axisOptions = Array.isArray(axis) ? axis : [axis];\n\n return (\n axisOptions.length > 0 &&\n axisOptions.every((axisOption) => {\n return isContinuousAxisOption(axisOption as { type?: string });\n })\n );\n }\n\n return axisIndices.every((axisIndex) => {\n return isContinuousAxisOption(getSingleAxisOption(axis, axisIndex));\n });\n};\n\n/**\n * Returns `'none'` when every axis targeted by the drag-to-zoom brush is\n * continuous (`value`/`time`/`log`), matching the slider rule: filtering a\n * continuous axis removes whole data items outside the selection instead of\n * clipping them. Category (or unknown) targets keep ECharts' `'filter'`\n * default.\n */\nconst getBrushDefaultFilterMode = (\n context: MergeToolboxContext | undefined,\n xAxisTargets: number[] | 'all' | false,\n yAxisTargets: number[] | 'all' | false,\n): 'none' | undefined => {\n const checks: boolean[] = [];\n\n if (xAxisTargets !== false) {\n checks.push(areTargetAxesContinuous(context?.xAxis, xAxisTargets));\n }\n\n if (yAxisTargets !== false) {\n checks.push(areTargetAxesContinuous(context?.yAxis, yAxisTargets));\n }\n\n return checks.length > 0 && checks.every(Boolean) ? 'none' : undefined;\n};\n\nexport const mergeToolbox = (\n toolbox: EChartsOption['toolbox'],\n context?: MergeToolboxContext,\n): EChartsOption['toolbox'] => {\n if (Array.isArray(toolbox)) {\n return toolbox.map((option) =>\n mergeToolbox(option, context),\n ) as EChartsOption['toolbox'];\n }\n\n // The drag-to-zoom brush follows the axes the dataZoom config targets, so\n // zoom direction is configured in one place. Without any dataZoom config it\n // keeps the historical default: all x-axes on, y off.\n const targets = getDataZoomTargetAxes(context?.dataZoom);\n const hasTargets =\n targets.xAxisIndices.length > 0 || targets.yAxisIndices.length > 0;\n const xAxisTargets: number[] | 'all' | false = hasTargets\n ? targets.xAxisIndices.length > 0 && targets.xAxisIndices\n : 'all';\n const yAxisTargets: number[] | false =\n targets.yAxisIndices.length > 0 && targets.yAxisIndices;\n const filterMode = getBrushDefaultFilterMode(\n context,\n xAxisTargets,\n yAxisTargets,\n );\n\n return {\n feature: {\n dataZoom: {\n ...(filterMode !== undefined && { filterMode }),\n ...(xAxisTargets !== 'all' && { xAxisIndex: xAxisTargets }),\n yAxisIndex: yAxisTargets,\n ...toolbox?.feature?.dataZoom,\n icon: {\n // This hack removes the icons.\n // Due to: https://github.com/apache/echarts/issues/10274\n back: '-',\n zoom: '-',\n },\n show: true,\n },\n },\n };\n};\n"]}
|
|
1
|
+
{"version":3,"file":"user-option-utils.js","sourceRoot":"","sources":["../../../../src/charts/utils/user-option-utils.tsx"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAEzC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAOrE,OAAO,EAAE,gCAAgC,EAAE,MAAM,YAAY,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAElD,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;AAWxD,MAAM,CAAC,MAAM,WAAW,GAAG,CACzB,MAAoB,EACpB,QAA0B,OAAO,EACjC,UAGC,EACD,OAAoB,EACL,EAAE;IACjB,MAAM,MAAM,GAAG,OAAO,aAAP,OAAO,cAAP,OAAO,GAAI,aAAa,CAAC;IAExC,OAAO,MAAM,CAAC,GAAG,CACf,CACE,MAGuC,EACvC,QAAgB,CAAC,EACH,EAAE;;QAChB,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;YACvC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC;YACrB,CAAC,CAAC,CAAC,MAAA,MAAM,CAAC,KAAK,mCAAI,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;QAEpD,IAAI,MAAM,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;YACpC,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,CAAC;YACpC,mEAAmE;YACnE,0EAA0E;YAC1E,MAAM,iBAAiB,GAAG,iBAAiB,gBAAgB,EAAE,CAAC;YAC9D,qCACE,UAAU,EAAE,CAAC,EACb,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,gCAAgC,CAAC,SAAS,IAClD,MAAM,KACT,SAAS,kBACP,IAAI,EAAE,QAAQ,EACd,KAAK,EAAE,CAAC,IACL,MAAM,CAAC,SAAS,GAErB,IAAI,EAAE,iBAAiB,EACvB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE;oBACJ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC;oBAC/B,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC;iBAChC,IACD;QACJ,CAAC;QAED,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAC3B,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC;YACpD,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;YAEvD,qCACE,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,CAAC,EACb,KAAK,EACL,MAAM,EAAE,MAAM,IACX,MAAM,KACT,SAAS,kBACP,IAAI,EAAE,OAAgB,EACtB,KAAK,EAAE,CAAC,IACL,MAAM,CAAC,SAAS,GAErB,QAAQ,8CACN,QAAQ,EAAE,IAAI,EACd,KAAK,EAAE,QAAQ,IACZ,MAAM,CAAC,QAAQ,KAClB,SAAS,kBACP,WAAW,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,EACtD,UAAU,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EACpC,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC,EAC3B,aAAa,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EACvC,aAAa,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IACpC,MAAA,MAAM,CAAC,QAAQ,0CAAE,SAAS,GAE/B,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,KACnB,MAAM,CAAC,QAAQ,KAEpB;QACJ,CAAC;QAED,IAAI,MAAM,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;YAC1B,MAAM,cAAc,GAAG,wBAAwB,CAAC,UAAU,CAAC,CAAC;YAE5D,qCACE,iBAAiB,EAAE,GAAG,EACtB,aAAa,EAAE,OAAO,EACtB,YAAY,EAAE,QAAQ,IACnB,MAAM;gBACT,wDAAwD;gBACxD,+FAA+F;gBAC/F,IAAI,kBACF,SAAS,kBACP,OAAO,EAAE,CAAC,IACP,MAAA,MAAM,CAAC,IAAI,0CAAE,SAAS,GAE3B,KAAK,kBACH,OAAO,EAAE,CAAC,IACP,MAAA,MAAM,CAAC,IAAI,0CAAE,KAAK,KAEpB,MAAM,CAAC,IAAI;gBAEhB,6FAA6F;gBAC7F,QAAQ,kBACN,QAAQ,EAAE,KAAK,EACf,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,IAAI,EACX,SAAS,EAAE,CAAC,IACT,MAAM,CAAC,QAAQ,GAEpB,SAAS,kBACP,WAAW,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,EACtD,WAAW,EAAE,CAAC,IACX,MAAM,CAAC,SAAS,GAErB,KAAK,kBACH,eAAe,EAAE,aAAa,EAC9B,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAClD,SAAS,EAAE,MAAM,IACd,MAAM,CAAC,KAAK,GAEjB,SAAS,kBACP,MAAM,EAAE,CAAC,EACT,IAAI,EAAE,IAAI,IACP,MAAM,CAAC,SAAS,GAErB,OAAO,kBACL,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,IAAI;oBACb,wCAAwC;oBACxC,OAAO,EAAE,CAAC,EACV,YAAY,EAAE,CAAC,EACf,WAAW,EAAE,CAAC,EACd,YAAY,EAAE,kDAAkD,EAChE,SAAS,EAAE,UAAU,MAAe;;wBAClC,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;wBAC9D,MAAM,UAAU,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;wBAClC,OAAO,GAAG,cAAc,CACtB,eAAM,SAAS,EAAC,0BAA0B,YACxC,KAAC,YAAY,CAAC,OAAO,IAEnB,cAAc,EACZ,MAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,KAAK,CAAC,CAAC,CAAC,mCAAI,UAAU,CAAC,UAAU,EAE/C,eAAe,EAAE,cAAc,CAC7B,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC;oCAC7B,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;oCACrB,CAAC,CAAC,UAAU,CAAC,KAAK,CACrB,EACD,iBAAiB,EAAE,UAAU,CAAC,KAAK,IAT9B,MAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,KAAK,CAAC,CAAC,CAAC,mCAAI,UAAU,CAAC,UAAU,CAUlD,GACG,CACR,EAAE,CAAC;oBACN,CAAC,IACE,MAAM,CAAC,OAAO,KAEnB;QACJ,CAAC;QAED,IAAI,MAAM,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;YAC1B,MAAM,cAAc,GAAG,wBAAwB,CAAC,UAAU,CAAC,CAAC;YAE5D,qCACE,WAAW,EAAE,EAAE,IACZ,MAAM,KACT,IAAI,kBACF,SAAS,kBACP,OAAO,EAAE,GAAG,IACT,MAAA,MAAM,CAAC,IAAI,0CAAE,SAAS,KAExB,MAAM,CAAC,IAAI,GAEhB,QAAQ,kBACN,QAAQ,EAAE,IAAI,EACd,KAAK,EAAE,QAAQ,IACZ,MAAM,CAAC,QAAQ,GAEpB,SAAS,kBACP,WAAW,EAAE,EAAE,EACf,KAAK,IACF,MAAM,CAAC,SAAS,GAErB,QAAQ,EAAE;oBACR,QAAQ,kBACN,QAAQ,EAAE,IAAI,EACd,SAAS,kBACP,KAAK,EAAE,EAAE,IACN,MAAA,MAAA,MAAM,CAAC,QAAQ,0CAAE,QAAQ,0CAAE,SAAS,KAEtC,MAAA,MAAM,CAAC,QAAQ,0CAAE,QAAQ,CAC7B;oBACD,SAAS,kBACP,KAAK,EAAE,EAAE,IACN,MAAA,MAAM,CAAC,QAAQ,0CAAE,SAAS,CAC9B;iBACF,EACD,OAAO,kBACL,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,IAAI;oBACb,wCAAwC;oBACxC,OAAO,EAAE,CAAC,EACV,YAAY,EAAE,CAAC,EACf,WAAW,EAAE,CAAC,EACd,YAAY,EAAE,kDAAkD,EAChE,SAAS,EAAE,UAAU,MAAe;;wBAClC,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;wBAC9D,MAAM,UAAU,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;wBAClC,OAAO,GAAG,cAAc,CACtB,gBAAM,SAAS,EAAC,0BAA0B,aACxC,KAAC,YAAY,CAAC,KAAK,cAAE,UAAU,CAAC,IAAI,GAAsB,EAC1D,KAAC,YAAY,CAAC,OAAO,IAEnB,cAAc,EAAE,UAAU,CAAC,UAAU,EACrC,eAAe,EAAE,cAAc,CAC7B,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC;wCAC7B,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;wCACrB,CAAC,CAAC,UAAU,CAAC,KAAK,CACrB,EACD,iBAAiB,EAAE,UAAU,CAAC,KAAK,IAP9B,MAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,KAAK,CAAC,CAAC,CAAC,mCAAI,UAAU,CAAC,UAAU,CAQlD,IACG,CACR,EAAE,CAAC;oBACN,CAAC,IACE,MAAM,CAAC,OAAO,KAEnB;QACJ,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC,CACF,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,CACxB,KAA6B,EAC7B,QAA0B,OAAO,EACT,EAAE;;IAC1B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CACxB,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,CACE,CAAC;IAC9B,CAAC;IAED,MAAM,SAAS,GAAG,gCACb,KAAK,KACR,SAAS,kBACP,SAAS,EAAE;gBACT,GAAG,EAAE,YAAY;gBACjB,IAAI,EAAE,WAAW;gBACjB,WAAW,EAAE,sBAAsB;gBACnC,MAAM,EAAE,WAAW;gBACnB,KAAK,EAAE,OAAO;gBACd,IAAI,EAAE,uCAAuC;gBAC7C,MAAM,EAAE,gBAAgB;gBACxB,IAAI,EAAE,wCAAwC;aAC/C,EACD,MAAM,EAAE,EAAE,EACV,QAAQ,EAAE,UAAU,IACjB,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,SAAS,GAErB,QAAQ,kBACN,SAAS,oBACJ,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,QAAQ,0CAAE,SAAS,KAE5B,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,QAAQ,GAEpB,QAAQ,gDACH,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,QAAQ,KAClB,SAAS,oBACJ,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,QAAQ,0CAAE,SAAS,GAE/B,IAAI,EAAE,IAAI,KACP,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,QAAQ,GAEpB,SAAS,kBAAI,IAAI,EAAE,KAAK,IAAK,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,SAAS,IACzB,CAAC;IAEvB,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAC1B,MAAM,SAAS,GAAG,gCACb,SAAS,KACZ,SAAS,kBACP,WAAW,EAAE,IAAI,IACd,SAAS,CAAC,SAAS,IAEJ,CAAC;QAEvB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;QACnD,MAAM,cAAc,GAClB,KAAK,CAAC,SAAS,IAAI,WAAW,IAAI,KAAK,CAAC,SAAS;YAC/C,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS;YAC3B,CAAC,CAAC,SAAS,CAAC;QAChB,MAAM,UAAU,GAAG,gCACd,SAAS,KACZ,SAAS,kCACJ,SAAS,CAAC,SAAS,KACtB,SAAS,EAAE,cAAc,aAAd,cAAc,cAAd,cAAc,GAAI,gBAAgB,MAE3B,CAAC;QAEvB,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QAC9B,MAAM,aAAa,GAAG,gCACjB,SAAS,KACZ,SAAS,kBACP,KAAK,EAAE,EAAE,IACN,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,SAAS,GAEzB,QAAQ,kBACN,cAAc,EAAE,IAAI,IACjB,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,QAAQ,IAEJ,CAAC;QACvB,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,CACxB,KAA6B,EAC7B,QAA0B,OAAO,EACT,EAAE;;IAC1B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CACxB,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,CACE,CAAC;IAC9B,CAAC;IAED,MAAM,SAAS,GAAG,gCACb,KAAK,KACR,SAAS,kBACP,MAAM,EAAE,CAAC,EACT,QAAQ,EAAE,UAAU,IACjB,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,SAAS,GAErB,QAAQ,kCACH,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,QAAQ,KAClB,SAAS,oBACJ,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,QAAQ,0CAAE,SAAS,GAE/B,IAAI,EAAE,IAAI,KAEZ,QAAQ,gCACN,IAAI,EAAE,KAAK,IACR,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,QAAQ,KAClB,SAAS,kBACP,KAAK,EAAE,CAAC,IACL,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,QAAQ,0CAAE,SAAS,MAGjC,SAAS,kBAAI,IAAI,EAAE,IAAI,IAAK,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,SAAS,IACxB,CAAC;IAEvB,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAC1B,MAAM,SAAS,GAAG,gCACb,SAAS,KACZ,SAAS,kBACP,WAAW,EAAE,IAAI,IACd,SAAS,CAAC,SAAS,GAExB,SAAS,kBAAI,IAAI,EAAE,KAAK,IAAK,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,SAAS,IAC7B,CAAC;QAEvB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;QACnD,MAAM,cAAc,GAClB,KAAK,CAAC,SAAS,IAAI,WAAW,IAAI,KAAK,CAAC,SAAS;YAC/C,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS;YAC3B,CAAC,CAAC,SAAS,CAAC;QAChB,MAAM,UAAU,GAAG,gCACd,SAAS,KACZ,SAAS,gCACP,WAAW,EAAE,IAAI,IACd,SAAS,CAAC,SAAS,KACtB,SAAS,EAAE,cAAc,aAAd,cAAc,cAAd,cAAc,GAAI,gBAAgB,KAE/C,SAAS,kBAAI,IAAI,EAAE,KAAK,IAAK,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,SAAS,IAC7B,CAAC;QAEvB,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QAC9B,MAAM,aAAa,GAAG,gCACjB,SAAS,KACZ,SAAS,kBACP,KAAK,EAAE,GAAG,IACP,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,SAAS,IAEL,CAAC;QAEvB,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC;AAiBF,MAAM,oBAAoB,GAAG,CAAC,SAAkB,EAAY,EAAE;IAC5D,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;QAClC,OAAO,CAAC,SAAS,CAAC,CAAC;IACrB,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QAC7B,OAAO,SAAS,CAAC,MAAM,CAAC,CAAC,KAAK,EAAmB,EAAE;YACjD,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC;QACnC,CAAC,CAAC,CAAC;IACL,CAAC;IAED,OAAO,EAAE,CAAC;AACZ,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,wBAAwB,GAAG,CAC/B,QAA0C,EACtB,EAAE;IACtB,IAAI,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,IAAI,MAAK,QAAQ,IAAI,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,IAAI,MAAK,QAAQ,EAAE,CAAC;QAC/D,OAAO,EAAE,YAAY,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;IAChD,CAAC;IAED,MAAM,YAAY,GAChB,QAAQ,CAAC,UAAU,KAAK,SAAS,IAAI,QAAQ,CAAC,UAAU,KAAK,SAAS,CAAC;IAEzE,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO;YACL,YAAY,EAAE,oBAAoB,CAAC,QAAQ,CAAC,UAAU,CAAC;YACvD,YAAY,EAAE,oBAAoB,CAAC,QAAQ,CAAC,UAAU,CAAC;SACxD,CAAC;IACJ,CAAC;IAED,OAAO,QAAQ,CAAC,MAAM,KAAK,UAAU;QACnC,CAAC,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE;QACzC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;AAC9C,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CACnC,QAAmC,EACf,EAAE;IACtB,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IAChE,MAAM,OAAO,GAAuB,EAAE,YAAY,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;IAE3E,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,YAAY,GAAG,wBAAwB,CAAC,KAAK,CAAC,CAAC;QAErD,KAAK,MAAM,KAAK,IAAI,YAAY,CAAC,YAAY,EAAE,CAAC;YAC9C,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC1C,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACnC,CAAC;QACH,CAAC;QAED,KAAK,MAAM,KAAK,IAAI,YAAY,CAAC,YAAY,EAAE,CAAC;YAC9C,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC1C,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACnC,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC9B,QAA0C,EACjC,EAAE;IACX,IAAI,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,IAAI,MAAK,QAAQ,EAAE,CAAC;QAChC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,QAAQ,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAClC,OAAO,QAAQ,CAAC,MAAM,KAAK,UAAU,CAAC;IACxC,CAAC;IAED,MAAM,OAAO,GAAG,wBAAwB,CAAC,QAAQ,CAAC,CAAC;IAEnD,OAAO,OAAO,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,CAAC;AAC9E,CAAC,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,0BAA0B,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;AAE5D,MAAM,mBAAmB,GAAG,CAC1B,IAAqD,EACrD,SAAkB,EACa,EAAE;IACjC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACzB,OAAO,IAAqC,CAAC;IAC/C,CAAC;IAED,MAAM,KAAK,GACT,OAAO,SAAS,KAAK,QAAQ;QAC3B,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,OAAO,SAAS,CAAC,CAAC,CAAC,KAAK,QAAQ;YAC5D,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;YACd,CAAC,CAAC,CAAC,CAAC;IAEV,OAAO,IAAI,CAAC,KAAK,CAAkC,CAAC;AACtD,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,0BAA0B,GAAG,CACjC,QAA8B,EAC9B,IAAmC,EACf,EAAE;IACtB,MAAM,OAAO,GAAG,wBAAwB,CAAC,QAAQ,CAAC,CAAC;IACnD,MAAM,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;IACtD,MAAM,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;IAEtD,IAAI,aAAa,KAAK,aAAa,EAAE,CAAC;QACpC,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,UAAU,GAAG,aAAa;QAC9B,CAAC,CAAC,mBAAmB,CAAC,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,KAAK,EAAE,QAAQ,CAAC,UAAU,CAAC;QACvD,CAAC,CAAC,mBAAmB,CAAC,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,KAAK,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;IAE1D,OAAO,CAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,IAAI,MAAK,SAAS;QACnC,0BAA0B,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC;QACpD,CAAC,CAAC,MAAM;QACR,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG,CAC3B,QAAmC,EACnC,IAAwB,EACG,EAAE;IAC7B,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAC7B,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,CACC,CAAC;IACjC,CAAC;IAED,MAAM,QAAQ,GAAG,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,IAAI,MAAK,QAAQ,CAAC;IAC7C,MAAM,QAAQ,GAAG,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,IAAI,MAAK,QAAQ,CAAC;IAE7C,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,UAAU,GAAG,0BAA0B,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAC9D,MAAM,cAAc,GAAG,gBAAgB,CAAC,QAAQ,CAAC;YAC/C,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;YAC1B,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;QAE/B,mEACK,CAAC,UAAU,KAAK,SAAS,IAAI,EAAE,UAAU,EAAE,CAAC,GAC5C,cAAc,KACjB,IAAI,EAAE,IAAI,EACV,IAAI,EAAE,QAAQ,KACX,QAAQ,EACX;IACJ,CAAC;SAAM,IAAI,QAAQ,EAAE,CAAC;QACpB,0EAA0E;QAC1E,wDAAwD;QACxD,gDAAgD;QAChD,MAAM,OAAO,GAAG,wBAAwB,CAAC,QAAQ,CAAC,CAAC;QACnD,MAAM,qBAAqB,GACzB,QAAQ,CAAC,UAAU,KAAK,SAAS,IAAI,OAAO,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;QAEvE,mDACE,UAAU,EAAE,MAAM,IACf,CAAC,qBAAqB,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KACjD,gBAAgB,EAAE,KAAK,KACpB,QAAQ,EACX;IACJ,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC;AAMF,MAAM,sBAAsB,GAAG,CAC7B,UAAyC,EAChC,EAAE;IACX,OAAO,CACL,CAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,IAAI,MAAK,SAAS;QAC9B,0BAA0B,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CACrD,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,uBAAuB,GAAG,CAC9B,IAAqD,EACrD,WAA6B,EACpB,EAAE;IACX,IAAI,WAAW,KAAK,KAAK,EAAE,CAAC;QAC1B,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAExD,OAAO,CACL,WAAW,CAAC,MAAM,GAAG,CAAC;YACtB,WAAW,CAAC,KAAK,CAAC,CAAC,UAAU,EAAE,EAAE;gBAC/B,OAAO,sBAAsB,CAAC,UAA+B,CAAC,CAAC;YACjE,CAAC,CAAC,CACH,CAAC;IACJ,CAAC;IAED,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC,SAAS,EAAE,EAAE;QACrC,OAAO,sBAAsB,CAAC,mBAAmB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;IACtE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,yBAAyB,GAAG,CAChC,OAAwC,EACxC,YAAsC,EACtC,YAAsC,EAClB,EAAE;IACtB,MAAM,MAAM,GAAc,EAAE,CAAC;IAE7B,IAAI,YAAY,KAAK,KAAK,EAAE,CAAC;QAC3B,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC;IACrE,CAAC;IAED,IAAI,YAAY,KAAK,KAAK,EAAE,CAAC;QAC3B,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC;IACrE,CAAC;IAED,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;AACzE,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,CAC1B,OAAiC,EACjC,OAA6B,EACH,EAAE;;IAC5B,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAC5B,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CACF,CAAC;IAChC,CAAC;IAED,0EAA0E;IAC1E,4EAA4E;IAC5E,sDAAsD;IACtD,MAAM,OAAO,GAAG,qBAAqB,CAAC,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,QAAQ,CAAC,CAAC;IACzD,MAAM,UAAU,GACd,OAAO,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;IACrE,MAAM,YAAY,GAA6B,UAAU;QACvD,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,YAAY;QACzD,CAAC,CAAC,KAAK,CAAC;IACV,MAAM,YAAY,GAChB,OAAO,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,YAAY,CAAC;IAC1D,MAAM,UAAU,GAAG,yBAAyB,CAC1C,OAAO,EACP,YAAY,EACZ,YAAY,CACb,CAAC;IAEF,OAAO;QACL,OAAO,EAAE;YACP,QAAQ,4EACH,CAAC,UAAU,KAAK,SAAS,IAAI,EAAE,UAAU,EAAE,CAAC,GAC5C,CAAC,YAAY,KAAK,KAAK,IAAI,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC,KAC3D,UAAU,EAAE,YAAY,KACrB,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,OAAO,0CAAE,QAAQ,KAC7B,IAAI,EAAE;oBACJ,+BAA+B;oBAC/B,yDAAyD;oBACzD,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;iBACV,EACD,IAAI,EAAE,IAAI,GACX;SACF;KACF,CAAC;AACJ,CAAC,CAAC","sourcesContent":["/**\n *\n * Copyright (c) \"Neo4j\"\n * Neo4j Sweden AB [http://neo4j.com]\n *\n * This file is part of Neo4j.\n *\n * Neo4j is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { tokens } from '@neo4j-ndl/base';\nimport { type EChartsOption, type SeriesOption } from 'echarts';\nimport { renderToString } from 'react-dom/server';\n\nimport { ChartTooltip } from '../ChartTooltip';\nimport { getTooltipValueFormatter } from './chart-tooltip-formatter';\nimport {\n type EchartsSeries,\n type HexColor,\n type NeedleSeries,\n type ThresholdLineSeriesOption,\n} from './chart-types';\nimport { defaultThresholdLineSeriesOption } from './defaults';\nimport { formatNumberEnUS } from './format-utils';\n\nconst defaultColors = Object.values(tokens.categorical);\n\ntype SingleXAxisOption = Exclude<\n NonNullable<EChartsOption['xAxis']>,\n unknown[]\n>;\ntype SingleYAxisOption = Exclude<\n NonNullable<EChartsOption['yAxis']>,\n unknown[]\n>;\n\nexport const mergeSeries = (\n series: NeedleSeries,\n theme: 'light' | 'dark' = 'light',\n userOption?: Omit<\n EChartsOption,\n 'series' | 'dataset' | 'legend' | 'xAxis' | 'yAxis'\n >,\n palette?: HexColor[],\n): EchartsSeries => {\n const colors = palette ?? defaultColors;\n\n return series.map(\n (\n option:\n | SeriesOption\n | ThresholdLineSeriesOption<'warning'>\n | ThresholdLineSeriesOption<'danger'>,\n index: number = 0,\n ): SeriesOption => {\n if (option === undefined) {\n return {};\n }\n\n const color = Array.isArray(option.color)\n ? option.color[index]\n : (option.color ?? colors[index % colors.length]);\n\n if (option.type === 'thresholdLine') {\n const { notificationType } = option;\n // Needed to differentiate between normal lines and threshold lines\n // as we are unable to inject custom properties into echarts series lines.\n const thresholdLineName = `thresholdLine-${notificationType}`;\n return {\n symbolSize: 9,\n symbol: 'none',\n condition: defaultThresholdLineSeriesOption.condition,\n ...option,\n lineStyle: {\n type: 'dashed',\n width: 2,\n ...option.lineStyle,\n },\n name: thresholdLineName,\n type: 'line',\n data: [\n [option.xAxis[0], option.yAxis],\n [option.xAxis[1], option.yAxis],\n ],\n };\n }\n\n if (option.type === 'line') {\n const shadow = tokens.theme[theme].boxShadow.raised;\n const shadowParts = shadow.split(/ (?=\\d+px|rgba?\\()/);\n\n return {\n type: 'line',\n symbolSize: 9,\n color,\n symbol: 'none',\n ...option,\n lineStyle: {\n type: 'solid' as const,\n width: 2,\n ...option.lineStyle,\n },\n emphasis: {\n disabled: true,\n focus: 'series',\n ...option.emphasis,\n itemStyle: {\n borderColor: tokens.theme[theme].color.neutral.bg.weak,\n shadowBlur: parseInt(shadowParts[2]),\n shadowColor: shadowParts[4],\n shadowOffsetX: parseInt(shadowParts[0]),\n shadowOffsetY: parseInt(shadowParts[1]),\n ...option.emphasis?.itemStyle,\n },\n label: { show: false },\n ...option.emphasis,\n },\n };\n }\n\n if (option.type === 'pie') {\n const valueFormatter = getTooltipValueFormatter(userOption);\n\n return {\n animationDuration: 600,\n animationType: 'scale',\n selectedMode: 'single',\n ...option,\n // Blur opacity is set to 1 to prevent other slices from\n // being opacitated when hovering a slice where the emphasis is enabled (used for scale effect)\n blur: {\n itemStyle: {\n opacity: 1,\n ...option.blur?.itemStyle,\n },\n label: {\n opacity: 1,\n ...option.blur?.label,\n },\n ...option.blur,\n },\n // Emphasis is enabled and used to apply the scale effect when hovering the pie chart slices.\n emphasis: {\n disabled: false,\n focus: 'self',\n scale: true,\n scaleSize: 5,\n ...option.emphasis,\n },\n itemStyle: {\n borderColor: tokens.theme[theme].color.neutral.bg.weak,\n borderWidth: 1,\n ...option.itemStyle,\n },\n label: {\n backgroundColor: 'transparent',\n color: tokens.theme[theme].color.neutral.text.weak,\n formatter: '{d}%',\n ...option.label,\n },\n labelLine: {\n length: 5,\n show: true,\n ...option.labelLine,\n },\n tooltip: {\n trigger: 'item',\n confine: true,\n // Reset the default tooltip css styling\n padding: 0,\n borderRadius: 0,\n borderWidth: 0,\n extraCssText: 'box-shadow: none; background-color: transparent;',\n formatter: function (params: unknown) {\n const paramsArray = Array.isArray(params) ? params : [params];\n const firstParam = paramsArray[0];\n return `${renderToString(\n <span className=\"ndl-charts-chart-tooltip\">\n <ChartTooltip.Content\n key={firstParam?.value[0] ?? firstParam.seriesName}\n leadingElement={\n firstParam?.value[0] ?? firstParam.seriesName\n }\n trailingElement={valueFormatter(\n Array.isArray(firstParam.value)\n ? firstParam.value[1]\n : firstParam.value,\n )}\n indentSquareColor={firstParam.color}\n />\n </span>,\n )}`;\n },\n ...option.tooltip,\n },\n };\n }\n\n if (option.type === 'bar') {\n const valueFormatter = getTooltipValueFormatter(userOption);\n\n return {\n barMaxWidth: 16,\n ...option,\n blur: {\n itemStyle: {\n opacity: 0.3,\n ...option.blur?.itemStyle,\n },\n ...option.blur,\n },\n emphasis: {\n disabled: true,\n focus: 'series',\n ...option.emphasis,\n },\n itemStyle: {\n borderWidth: 20,\n color,\n ...option.itemStyle,\n },\n markLine: {\n emphasis: {\n disabled: true,\n lineStyle: {\n width: 20,\n ...option.markLine?.emphasis?.lineStyle,\n },\n ...option.markLine?.emphasis,\n },\n lineStyle: {\n width: 20,\n ...option.markLine?.lineStyle,\n },\n },\n tooltip: {\n trigger: 'axis',\n confine: true,\n // Reset the default tooltip css styling\n padding: 0,\n borderRadius: 0,\n borderWidth: 0,\n extraCssText: 'box-shadow: none; background-color: transparent;',\n formatter: function (params: unknown) {\n const paramsArray = Array.isArray(params) ? params : [params];\n const firstParam = paramsArray[0];\n return `${renderToString(\n <span className=\"ndl-charts-chart-tooltip\">\n <ChartTooltip.Title>{firstParam.name}</ChartTooltip.Title>\n <ChartTooltip.Content\n key={firstParam?.value[0] ?? firstParam.seriesName}\n leadingElement={firstParam.seriesName}\n trailingElement={valueFormatter(\n Array.isArray(firstParam.value)\n ? firstParam.value[1]\n : firstParam.value,\n )}\n indentSquareColor={firstParam.color}\n />\n </span>,\n )}`;\n },\n ...option.tooltip,\n },\n };\n }\n\n return option;\n },\n );\n};\n\nexport const mergeXAxis = (\n xAxis: EChartsOption['xAxis'],\n theme: 'light' | 'dark' = 'light',\n): EChartsOption['xAxis'] => {\n if (xAxis === undefined) {\n return [];\n }\n\n if (Array.isArray(xAxis)) {\n return xAxis.map((axis) =>\n mergeXAxis(axis, theme),\n ) as EChartsOption['xAxis'];\n }\n\n const baseXAxis = {\n ...xAxis,\n axisLabel: {\n formatter: {\n day: '{dd} {MMM}',\n hour: '{HH}:{mm}',\n millisecond: '{hh}:{mm}:{ss} {SSS}',\n minute: '{HH}:{mm}',\n month: '{MMM}',\n none: '{yyyy}-{MM}-{dd} {hh}:{mm}:{ss} {SSS}',\n second: '{HH}:{mm}:{ss}',\n year: '{yearStyle|{yyyy}}\\n{monthStyle|{MMM}}',\n },\n margin: 16,\n overflow: 'truncate',\n ...xAxis?.axisLabel,\n },\n axisLine: {\n lineStyle: {\n ...xAxis?.axisLine?.lineStyle,\n },\n ...xAxis?.axisLine,\n },\n axisTick: {\n ...xAxis?.axisTick,\n lineStyle: {\n ...xAxis?.axisTick?.lineStyle,\n },\n show: true,\n ...xAxis?.axisTick,\n },\n splitLine: { show: false, ...xAxis?.splitLine },\n } as SingleXAxisOption;\n\n if (xAxis.type === 'time') {\n const timeXAxis = {\n ...baseXAxis,\n axisLabel: {\n hideOverlap: true,\n ...baseXAxis.axisLabel,\n },\n } as SingleXAxisOption;\n\n return timeXAxis;\n }\n\n if (xAxis.type === 'value' || xAxis.type === 'log') {\n const xAxisFormatter =\n xAxis.axisLabel && 'formatter' in xAxis.axisLabel\n ? xAxis.axisLabel.formatter\n : undefined;\n const valueXAxis = {\n ...baseXAxis,\n axisLabel: {\n ...baseXAxis.axisLabel,\n formatter: xAxisFormatter ?? formatNumberEnUS,\n },\n } as SingleXAxisOption;\n\n return valueXAxis;\n }\n\n if (xAxis.type === 'category') {\n const categoryXAxis = {\n ...baseXAxis,\n axisLabel: {\n width: 80,\n ...baseXAxis?.axisLabel,\n },\n axisTick: {\n alignWithLabel: true,\n ...baseXAxis?.axisTick,\n },\n } as SingleXAxisOption;\n return categoryXAxis;\n }\n\n return baseXAxis;\n};\n\nexport const mergeYAxis = (\n yAxis: EChartsOption['yAxis'],\n theme: 'light' | 'dark' = 'light',\n): EChartsOption['yAxis'] => {\n if (yAxis === undefined) {\n return [];\n }\n\n if (Array.isArray(yAxis)) {\n return yAxis.map((axis) =>\n mergeYAxis(axis, theme),\n ) as EChartsOption['yAxis'];\n }\n\n const baseYAxis = {\n ...yAxis,\n axisLabel: {\n margin: 8,\n overflow: 'truncate',\n ...yAxis?.axisLabel,\n },\n axisLine: {\n ...yAxis?.axisLine,\n lineStyle: {\n ...yAxis?.axisLine?.lineStyle,\n },\n show: true,\n },\n axisTick: {\n show: false,\n ...yAxis?.axisTick,\n lineStyle: {\n width: 1,\n ...yAxis?.axisTick?.lineStyle,\n },\n },\n splitLine: { show: true, ...yAxis?.splitLine },\n } as SingleYAxisOption;\n\n if (yAxis.type === 'time') {\n const timeYAxis = {\n ...baseYAxis,\n axisLabel: {\n hideOverlap: true,\n ...baseYAxis.axisLabel,\n },\n splitLine: { show: false, ...baseYAxis?.splitLine },\n } as SingleYAxisOption;\n\n return timeYAxis;\n }\n\n if (yAxis.type === 'value' || yAxis.type === 'log') {\n const yAxisFormatter =\n yAxis.axisLabel && 'formatter' in yAxis.axisLabel\n ? yAxis.axisLabel.formatter\n : undefined;\n const valueYAxis = {\n ...baseYAxis,\n axisLabel: {\n hideOverlap: true,\n ...baseYAxis.axisLabel,\n formatter: yAxisFormatter ?? formatNumberEnUS,\n },\n splitLine: { show: false, ...baseYAxis?.splitLine },\n } as SingleYAxisOption;\n\n return valueYAxis;\n }\n\n if (yAxis.type === 'category') {\n const categoryYAxis = {\n ...baseYAxis,\n axisLabel: {\n width: 100,\n ...baseYAxis?.axisLabel,\n },\n } as SingleYAxisOption;\n\n return categoryYAxis;\n }\n\n return baseYAxis;\n};\n\ntype SingleDataZoomOption = Exclude<\n NonNullable<EChartsOption['dataZoom']>,\n unknown[]\n>;\n\ntype MergeDataZoomAxes = {\n xAxis?: EChartsOption['xAxis'];\n yAxis?: EChartsOption['yAxis'];\n};\n\nexport type DataZoomTargetAxes = {\n xAxisIndices: number[];\n yAxisIndices: number[];\n};\n\nconst normalizeAxisIndices = (axisIndex: unknown): number[] => {\n if (typeof axisIndex === 'number') {\n return [axisIndex];\n }\n\n if (Array.isArray(axisIndex)) {\n return axisIndex.filter((index): index is number => {\n return typeof index === 'number';\n });\n }\n\n return [];\n};\n\n/**\n * Resolves the axes a single dataZoom entry targets, mirroring ECharts' own\n * resolution order: explicit `xAxisIndex`/`yAxisIndex` win (`false` meaning\n * \"not this axis\"); when no index is given, `orient: 'vertical'` targets the\n * first y-axis and horizontal/unset targets the first x-axis.\n */\nconst getSingleDataZoomTargets = (\n dataZoom: SingleDataZoomOption | undefined,\n): DataZoomTargetAxes => {\n if (dataZoom?.type !== 'slider' && dataZoom?.type !== 'inside') {\n return { xAxisIndices: [], yAxisIndices: [] };\n }\n\n const hasAxisIndex =\n dataZoom.xAxisIndex !== undefined || dataZoom.yAxisIndex !== undefined;\n\n if (hasAxisIndex) {\n return {\n xAxisIndices: normalizeAxisIndices(dataZoom.xAxisIndex),\n yAxisIndices: normalizeAxisIndices(dataZoom.yAxisIndex),\n };\n }\n\n return dataZoom.orient === 'vertical'\n ? { xAxisIndices: [], yAxisIndices: [0] }\n : { xAxisIndices: [0], yAxisIndices: [] };\n};\n\n/**\n * Union of the axis indices targeted by all slider/inside entries in a\n * dataZoom config, using the same per-entry resolution as ECharts (explicit\n * axis indices first, then orientation).\n */\nexport const getDataZoomTargetAxes = (\n dataZoom: EChartsOption['dataZoom'],\n): DataZoomTargetAxes => {\n const entries = Array.isArray(dataZoom) ? dataZoom : [dataZoom];\n const targets: DataZoomTargetAxes = { xAxisIndices: [], yAxisIndices: [] };\n\n for (const entry of entries) {\n const entryTargets = getSingleDataZoomTargets(entry);\n\n for (const index of entryTargets.xAxisIndices) {\n if (!targets.xAxisIndices.includes(index)) {\n targets.xAxisIndices.push(index);\n }\n }\n\n for (const index of entryTargets.yAxisIndices) {\n if (!targets.yAxisIndices.includes(index)) {\n targets.yAxisIndices.push(index);\n }\n }\n }\n\n return targets;\n};\n\n/**\n * A slider is vertical when the consumer sets `orient: 'vertical'`, or when it\n * only targets a y-axis, which makes ECharts infer the vertical orientation.\n */\nexport const isVerticalSlider = (\n dataZoom: SingleDataZoomOption | undefined,\n): boolean => {\n if (dataZoom?.type !== 'slider') {\n return false;\n }\n\n if (dataZoom.orient !== undefined) {\n return dataZoom.orient === 'vertical';\n }\n\n const targets = getSingleDataZoomTargets(dataZoom);\n\n return targets.yAxisIndices.length > 0 && targets.xAxisIndices.length === 0;\n};\n\n/**\n * Axis types where windowing (`filterMode: 'none'`) beats ECharts' default\n * data filtering. Filtering a continuous axis removes whole data items outside\n * the window, which makes bars and points vanish instead of clipping them.\n * Category axes keep the `'filter'` default so paging through categories still\n * rescales the opposite value axis to the visible data.\n */\nconst WINDOWED_FILTER_AXIS_TYPES = ['log', 'time', 'value'];\n\nconst getSingleAxisOption = (\n axis: EChartsOption['xAxis'] | EChartsOption['yAxis'],\n axisIndex: unknown,\n): { type?: string } | undefined => {\n if (!Array.isArray(axis)) {\n return axis as { type?: string } | undefined;\n }\n\n const index =\n typeof axisIndex === 'number'\n ? axisIndex\n : Array.isArray(axisIndex) && typeof axisIndex[0] === 'number'\n ? axisIndex[0]\n : 0;\n\n return axis[index] as { type?: string } | undefined;\n};\n\n/**\n * Resolves the slider's target axis the way ECharts does (explicit axis index\n * first, then orientation) and returns `'none'` when that axis is continuous.\n * Returns `undefined` (keep ECharts' `'filter'` default) for category axes and\n * for sliders that target both axes at once.\n */\nconst getSliderDefaultFilterMode = (\n dataZoom: SingleDataZoomOption,\n axes: MergeDataZoomAxes | undefined,\n): 'none' | undefined => {\n const targets = getSingleDataZoomTargets(dataZoom);\n const isXAxisTarget = targets.xAxisIndices.length > 0;\n const isYAxisTarget = targets.yAxisIndices.length > 0;\n\n if (isXAxisTarget === isYAxisTarget) {\n return undefined;\n }\n\n const targetAxis = isYAxisTarget\n ? getSingleAxisOption(axes?.yAxis, dataZoom.yAxisIndex)\n : getSingleAxisOption(axes?.xAxis, dataZoom.xAxisIndex);\n\n return targetAxis?.type !== undefined &&\n WINDOWED_FILTER_AXIS_TYPES.includes(targetAxis.type)\n ? 'none'\n : undefined;\n};\n\nexport const mergeDataZoom = (\n dataZoom: EChartsOption['dataZoom'],\n axes?: MergeDataZoomAxes,\n): EChartsOption['dataZoom'] => {\n if (Array.isArray(dataZoom)) {\n return dataZoom.map((option) =>\n mergeDataZoom(option, axes),\n ) as EChartsOption['dataZoom'];\n }\n\n const isSlider = dataZoom?.type === 'slider';\n const isInside = dataZoom?.type === 'inside';\n\n if (isSlider) {\n const filterMode = getSliderDefaultFilterMode(dataZoom, axes);\n const layoutDefaults = isVerticalSlider(dataZoom)\n ? { right: 10, width: 28 }\n : { bottom: 10, height: 28 };\n\n return {\n ...(filterMode !== undefined && { filterMode }),\n ...layoutDefaults,\n show: true,\n type: 'slider',\n ...dataZoom,\n };\n } else if (isInside) {\n // Only pin the default x-axis binding on entries that actually target the\n // x-axis; y-targeting entries (explicit `yAxisIndex` or\n // `orient: 'vertical'`) keep their own binding.\n const targets = getSingleDataZoomTargets(dataZoom);\n const hasDefaultXAxisTarget =\n dataZoom.xAxisIndex === undefined && targets.xAxisIndices.length > 0;\n\n return {\n filterMode: 'none',\n ...(hasDefaultXAxisTarget && { xAxisIndex: [0] }),\n zoomOnMouseWheel: false,\n ...dataZoom,\n };\n }\n\n return dataZoom;\n};\n\ntype MergeToolboxContext = MergeDataZoomAxes & {\n dataZoom?: EChartsOption['dataZoom'];\n};\n\nconst isContinuousAxisOption = (\n axisOption: { type?: string } | undefined,\n): boolean => {\n return (\n axisOption?.type !== undefined &&\n WINDOWED_FILTER_AXIS_TYPES.includes(axisOption.type)\n );\n};\n\nconst areTargetAxesContinuous = (\n axis: EChartsOption['xAxis'] | EChartsOption['yAxis'],\n axisIndices: number[] | 'all',\n): boolean => {\n if (axisIndices === 'all') {\n const axisOptions = Array.isArray(axis) ? axis : [axis];\n\n return (\n axisOptions.length > 0 &&\n axisOptions.every((axisOption) => {\n return isContinuousAxisOption(axisOption as { type?: string });\n })\n );\n }\n\n return axisIndices.every((axisIndex) => {\n return isContinuousAxisOption(getSingleAxisOption(axis, axisIndex));\n });\n};\n\n/**\n * Returns `'none'` when every axis targeted by the drag-to-zoom brush is\n * continuous (`value`/`time`/`log`), matching the slider rule: filtering a\n * continuous axis removes whole data items outside the selection instead of\n * clipping them. Category (or unknown) targets keep ECharts' `'filter'`\n * default.\n */\nconst getBrushDefaultFilterMode = (\n context: MergeToolboxContext | undefined,\n xAxisTargets: number[] | 'all' | false,\n yAxisTargets: number[] | 'all' | false,\n): 'none' | undefined => {\n const checks: boolean[] = [];\n\n if (xAxisTargets !== false) {\n checks.push(areTargetAxesContinuous(context?.xAxis, xAxisTargets));\n }\n\n if (yAxisTargets !== false) {\n checks.push(areTargetAxesContinuous(context?.yAxis, yAxisTargets));\n }\n\n return checks.length > 0 && checks.every(Boolean) ? 'none' : undefined;\n};\n\nexport const mergeToolbox = (\n toolbox: EChartsOption['toolbox'],\n context?: MergeToolboxContext,\n): EChartsOption['toolbox'] => {\n if (Array.isArray(toolbox)) {\n return toolbox.map((option) =>\n mergeToolbox(option, context),\n ) as EChartsOption['toolbox'];\n }\n\n // The drag-to-zoom brush follows the axes the dataZoom config targets, so\n // zoom direction is configured in one place. Without any dataZoom config it\n // keeps the historical default: all x-axes on, y off.\n const targets = getDataZoomTargetAxes(context?.dataZoom);\n const hasTargets =\n targets.xAxisIndices.length > 0 || targets.yAxisIndices.length > 0;\n const xAxisTargets: number[] | 'all' | false = hasTargets\n ? targets.xAxisIndices.length > 0 && targets.xAxisIndices\n : 'all';\n const yAxisTargets: number[] | false =\n targets.yAxisIndices.length > 0 && targets.yAxisIndices;\n const filterMode = getBrushDefaultFilterMode(\n context,\n xAxisTargets,\n yAxisTargets,\n );\n\n return {\n feature: {\n dataZoom: {\n ...(filterMode !== undefined && { filterMode }),\n ...(xAxisTargets !== 'all' && { xAxisIndex: xAxisTargets }),\n yAxisIndex: yAxisTargets,\n ...toolbox?.feature?.dataZoom,\n icon: {\n // This hack removes the icons.\n // Due to: https://github.com/apache/echarts/issues/10274\n back: '-',\n zoom: '-',\n },\n show: true,\n },\n },\n };\n};\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@neo4j-ndl/react-charts",
|
|
3
|
-
"version": "1.3.
|
|
3
|
+
"version": "1.3.2",
|
|
4
4
|
"sideEffects": false,
|
|
5
5
|
"description": "React implementation of charts from Neo4j Design System",
|
|
6
6
|
"keywords": [
|
|
@@ -56,14 +56,12 @@
|
|
|
56
56
|
"peerDependencies": {
|
|
57
57
|
"react": ">=19.0.0",
|
|
58
58
|
"react-dom": ">=19.0.0",
|
|
59
|
-
"@neo4j-ndl/
|
|
60
|
-
"@neo4j-ndl/
|
|
59
|
+
"@neo4j-ndl/base": "^4.21.0",
|
|
60
|
+
"@neo4j-ndl/react": "^4.22.0"
|
|
61
61
|
},
|
|
62
62
|
"dependencies": {
|
|
63
63
|
"classnames": "2.5.1",
|
|
64
|
-
"echarts": "6.1.0"
|
|
65
|
-
"@neo4j-ndl/base": "4.20.2-alpha.c774957.15.1",
|
|
66
|
-
"@neo4j-ndl/react": "4.21.2-alpha.c774957.15.1"
|
|
64
|
+
"echarts": "6.1.0"
|
|
67
65
|
},
|
|
68
66
|
"scripts": {
|
|
69
67
|
"test": "pnpm run test:playwright",
|