@neo4j-ndl/react-charts 1.0.156 → 1.0.158

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.
@@ -1 +1 @@
1
- {"version":3,"file":"Chart.js","sourceRoot":"","sources":["../../../src/charts/Chart.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 { useNeedleTheme } from '@neo4j-ndl/react';\nimport {\n type DataZoomComponentOption,\n type ECharts,\n type EChartsOption,\n getInstanceByDom,\n init,\n registerTheme,\n} from 'echarts';\nimport { useEffect, useMemo, useRef, useState } from 'react';\nimport { renderToString } from 'react-dom/server';\n\nimport { generateThresholdAriaDescription } from './aria-description';\nimport {\n type ChartProps,\n type Condition,\n type NeedleSeries,\n type NotificationType,\n type ThresholdLineSeriesOption,\n} from './chart-types';\nimport { ChartTooltip } from './ChartTooltip';\nimport { defaultThresholdLineSeriesOption } from './defaults';\nimport { Legend } from './Legend';\nimport { ndlEchartsTheme } from './themes/ndl-echarts-theme';\nimport {\n mergeDataZoom,\n mergeSeries,\n mergeToolbox,\n mergeXAxis,\n mergeYAxis,\n} from './user-option-utils';\nimport { capitalizeFirstLetter, extractValueFromTooltipSeries } from './utils';\n\n// This returns a boolean if the condition is met\n// and also what to display in the tooltip.\nfunction checkCondition(\n value: number,\n condition: Condition,\n threshold: number,\n): {\n isConditionMet: boolean;\n conditionText: string | undefined;\n} {\n switch (condition) {\n case 'greater':\n return {\n conditionText: 'Above',\n isConditionMet: value > threshold,\n };\n case 'greaterOrEqual':\n return {\n conditionText:\n value > threshold\n ? 'Above'\n : value === threshold\n ? 'Equal'\n : undefined,\n isConditionMet: value >= threshold,\n };\n case 'less':\n return {\n conditionText: 'Below',\n isConditionMet: value < threshold,\n };\n case 'lessOrEqual':\n return {\n conditionText:\n value < threshold\n ? 'Below'\n : value === threshold\n ? 'Equal'\n : undefined,\n isConditionMet: value <= threshold,\n };\n case 'equal':\n return {\n conditionText: 'Equal',\n isConditionMet: value === threshold,\n };\n case 'notEqual':\n return {\n conditionText: 'Not equal',\n isConditionMet: value !== threshold,\n };\n default:\n return { conditionText: undefined, isConditionMet: false };\n }\n}\n\n/*\nKeep this, if we want more than one type of the same threshold line\nthis will be useful to use.\n\nexport interface NewRegisteredSeriesOption extends RegisteredSeriesOption {\nthresholdLine: ThresholdLineSeriesOption;\n}\nexport type SeriesOption = Values<NewRegisteredSeriesOption>;\nexport type Series = SeriesOption | SeriesOption[];\n*/\n\n/**\n * A chart component powered by Apache ECharts with Needle's customization and theming.\n *\n * The `Chart` component fills 100% of its parent's width and height. Because it\n * relies on the container's `clientHeight` to size the canvas, **the parent element\n * must have an explicit height** (e.g. a fixed px/rem value or a viewport unit).\n *\n * @example\n * ```tsx\n * <div style={{ height: '350px' }}>\n * <Chart dataset={dataset} series={series} xAxis={xAxis} yAxis={yAxis} />\n * </div>\n * ```\n */\nexport function Chart({\n dataset,\n option: userOption,\n xAxis: propXAxis,\n yAxis: propYAxis,\n series: propsSeries,\n style,\n settings = {\n lazyUpdate: false,\n notMerge: true,\n silent: false,\n },\n isLoading,\n isChartZoomDisabled = false,\n legend,\n callbacks,\n palette,\n}: ChartProps): React.JSX.Element {\n const chartRef = useRef<HTMLDivElement>(null);\n const chartEchartRef = useRef<HTMLDivElement>(null);\n const chartLegendRef = useRef<HTMLDivElement>(null);\n const legendSelectedRef = useRef<Record<string, boolean>>({});\n const legendColorCacheRef = useRef<Map<string, string>>(new Map());\n const [isWaitingForFirstResize, setIsWaitingForFirstResize] = useState(true);\n\n const dataZoomOptions = (userOption as EChartsOption)?.dataZoom;\n const toolboxOptions = (userOption as EChartsOption)?.toolbox;\n\n const hasSliderZoom = Array.isArray(dataZoomOptions)\n ? dataZoomOptions.some((dataZoomOption: DataZoomComponentOption) => {\n return dataZoomOption?.type === 'slider';\n })\n : dataZoomOptions?.type === 'slider';\n\n const { theme } = useNeedleTheme();\n const thresholdLines = useMemo(() => {\n const seriesArray = Array.isArray(propsSeries)\n ? propsSeries\n : [propsSeries];\n\n const thresholdLineSeries = seriesArray.filter((currentSeries) => {\n return currentSeries.type === 'thresholdLine';\n }) as ThresholdLineSeriesOption<NotificationType>[];\n\n return thresholdLineSeries.map((currentThresholdLineSeriesOption) => {\n return {\n ...currentThresholdLineSeriesOption,\n condition:\n currentThresholdLineSeriesOption.condition ??\n defaultThresholdLineSeriesOption.condition,\n value: currentThresholdLineSeriesOption.yAxis,\n };\n });\n }, [propsSeries]);\n\n const dataZoom = useMemo(() => {\n return mergeDataZoom(dataZoomOptions);\n }, [dataZoomOptions]);\n\n const series = mergeSeries(propsSeries, theme, userOption, palette);\n const xAxis = mergeXAxis(propXAxis, theme);\n const yAxis = mergeYAxis(propYAxis, theme);\n\n const hasCategoryXAxis = Array.isArray(xAxis)\n ? xAxis.some((x) => x.type === 'category')\n : xAxis?.type === 'category';\n\n // The initial option used, the charts option is not necessarily\n // the same as this due to mutation via dispatch and setOption.\n // use getOption to get the current option of the chart.\n const initialOption = useMemo(() => {\n if (chartEchartRef.current === null) {\n return;\n }\n\n const chart = getInstanceByDom(chartEchartRef.current);\n\n const customAriaDescription = generateThresholdAriaDescription(\n propsSeries,\n dataset,\n );\n\n const option = {\n dataset,\n xAxis,\n yAxis,\n ...userOption,\n aria: {\n decal: {\n show: false,\n },\n enabled: true,\n ...(customAriaDescription !== undefined && {\n label: { description: customAriaDescription },\n }),\n ...(userOption?.aria as EChartsOption['aria']),\n },\n grid: {\n left: hasCategoryXAxis ? '15px' : '10px',\n right: hasCategoryXAxis ? '15px' : '10px',\n top: '10px',\n bottom: hasSliderZoom ? '60px' : '10px',\n type: 'solid',\n containLabel: true,\n ...(userOption?.grid as EChartsOption['grid']),\n },\n legend: {\n // Removes in-built echarts legend\n show: false,\n // Preserve legend filter state across re-renders. legendSelectedRef\n // is the single source of truth, written by the Legend component.\n // ECharts mutates the options object, so pass a shallow copy here\n // to avoid it mutating the React ref object.\n selected: { ...(legendSelectedRef.current || {}) },\n },\n series,\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\n let valueFormatter = (value: unknown) => `${value}`;\n if (\n typeof userOption?.tooltip === 'object' &&\n userOption.tooltip !== null &&\n 'valueFormatter' in userOption.tooltip\n ) {\n valueFormatter = userOption.tooltip.valueFormatter as (\n value: unknown,\n ) => string;\n }\n return `${renderToString(\n <span className=\"ndl-charts-chart-tooltip\">\n <ChartTooltip.Title>\n {firstParam?.axisValueLabel ?? ''}\n </ChartTooltip.Title>\n {paramsArray.map((series) => {\n const value = extractValueFromTooltipSeries(\n series.value,\n series.encode,\n series.axisDim,\n );\n\n const seriesValue =\n typeof value === 'number' ? value : Number(value);\n\n const isThresholdLine =\n series.seriesName.startsWith('thresholdLine');\n\n const notifications = thresholdLines\n .filter((threshold) => {\n const {\n value: thresholdValue,\n condition,\n customCondition,\n } = threshold;\n\n if (Number.isNaN(seriesValue)) {\n return false;\n }\n\n const isConditionMet = customCondition\n ? customCondition(seriesValue, thresholdValue)\n : checkCondition(seriesValue, condition, thresholdValue)\n .isConditionMet;\n\n return !isThresholdLine && isConditionMet;\n })\n .map((threshold) => {\n const {\n notificationType,\n value: thresholdValue,\n condition,\n customConditionText,\n customCondition,\n } = threshold;\n\n return {\n id: `threshold-${notificationType}`,\n leadingElement: customCondition\n ? customConditionText\n : `${\n checkCondition(\n seriesValue,\n condition,\n thresholdValue,\n ).conditionText\n } threshold`,\n notificationType,\n trailingElement: thresholdValue,\n };\n });\n\n return (\n <ChartTooltip.Content\n key={series.seriesName}\n leadingElement={\n isThresholdLine\n ? `${capitalizeFirstLetter(\n series.seriesName.replace('thresholdLine-', ''),\n )} threshold`\n : series.seriesName\n }\n trailingElement={valueFormatter(value)}\n indentSquareColor={series.color}\n notifications={notifications}\n />\n );\n })}\n </span>,\n )}`;\n },\n },\n dataZoom,\n toolbox: mergeToolbox(toolboxOptions),\n };\n\n // Update chart with initial option\n chart?.setOption(option, settings);\n\n // Get option returns the current option of the chart.\n // This is slightly different than the option we gave as an argument.\n // Because we use useMemo in other areas we want to get this set first,\n // this is why we are setting then getting then returning. If we did this in\n // a useEffect it would run after the other useMemos which is not what we want.\n // This is purely for order of operations.\n const chartOption = chart?.getOption();\n\n return chartOption;\n }, [\n thresholdLines,\n propsSeries,\n dataset,\n xAxis,\n yAxis,\n userOption,\n hasCategoryXAxis,\n hasSliderZoom,\n series,\n dataZoom,\n toolboxOptions,\n settings,\n ]);\n\n useEffect(() => {\n // Initialize chart\n let chart: ECharts | undefined;\n if (chartEchartRef.current !== null) {\n registerTheme('ndl-light', ndlEchartsTheme('light', palette));\n registerTheme('ndl-dark', ndlEchartsTheme('dark', palette));\n\n const currentChart = getInstanceByDom(chartEchartRef.current);\n if (currentChart) {\n chart = currentChart;\n } else {\n const echartsTheme = theme === 'light' ? 'ndl-light' : 'ndl-dark';\n chart = init(chartEchartRef.current, echartsTheme, {\n renderer: 'svg',\n });\n }\n }\n\n if (callbacks?.onZoom) {\n chart?.on('datazoom', () => {\n if (chartEchartRef.current === null) {\n return;\n }\n\n const currentChart = getInstanceByDom(chartEchartRef.current);\n if (!currentChart) {\n return;\n }\n\n const option = currentChart.getOption();\n if (!option || !option.dataZoom) {\n return;\n }\n\n const dataZoom = Array.isArray(option.dataZoom)\n ? option.dataZoom[0]\n : option.dataZoom;\n const { startValue, endValue } = dataZoom as {\n startValue: number;\n endValue: number;\n };\n\n callbacks?.onZoom?.({ endValue, startValue });\n });\n }\n\n // Add chart resize listener\n // ResizeObserver is leading to a bit janky UX\n function resizeChart() {\n // TODO: We need to revisit this. Right now using grid containLabel seems to work.\n // We still need to visit this for overflowing of the x-axis labels.\n // const calculateGridLeft = () => {\n // const textElements = chartEchartRef.current?.querySelectorAll('text');\n // const filteredTextElements = Array.from(textElements || []).filter(\n // (element) => element.getAttribute('text-anchor') === 'end',\n // );\n // let maxWidth = 0;\n // filteredTextElements.forEach((element) => {\n // const bbox = element.getBBox();\n // maxWidth = Math.max(maxWidth, bbox.width);\n // });\n // const tickLength = 5;\n // const tickPadding = 3;\n // return maxWidth + tickLength + tickPadding;\n // };\n //\n // // Example of dynamically setting the grid's left\n // const gridLeft = calculateGridLeft();\n // chart?.setOption({\n // grid: {\n // left: gridLeft,\n // },\n // });\n\n // We want to fit the chart to the charts container.\n const chartContainerHeight = chartRef.current?.clientHeight;\n const chartContainerWidth = chartRef.current?.clientWidth;\n // Need to take legends height into consideration, otherwise it will overflow the parent.\n const chartLegendHeight = chartLegendRef?.current?.clientHeight || 0;\n const height = chartContainerHeight\n ? chartContainerHeight - chartLegendHeight\n : undefined;\n chart?.resize({\n height,\n width: chartContainerWidth,\n });\n }\n window.addEventListener('resize', resizeChart);\n requestAnimationFrame(() => {\n resizeChart();\n setIsWaitingForFirstResize(false);\n });\n\n // Add chart zoom listeners\n const handleMouseMove = () => {\n // I do not like this at all: https://github.com/apache/echarts/issues/19819\n // echarts updates the svgs on every mouse movement so we need to do this.\n chart?.getZr().setCursorStyle('default');\n };\n // We cannot use chart.getZr().on('mousemove', handleMouseMove)\n // This is because it doesn't respect our callbacks. It will\n // always run echarts code last instead of our callback.\n const chartChild = chartEchartRef.current?.children[0] as HTMLElement;\n if (!isChartZoomDisabled) {\n chartChild.addEventListener('mousemove', handleMouseMove);\n }\n\n const handleMouseDown = (params: { event: MouseEvent }) => {\n const event = params.event;\n const amountOfMouseClicks = event.detail;\n const isDoubleClick = amountOfMouseClicks === 2;\n if (isDoubleClick) {\n // Reset zooming.\n if (chart === undefined) {\n return;\n }\n chart?.dispatchAction({\n end: 100,\n start: 0,\n type: 'dataZoom',\n });\n if (callbacks?.onZoom) {\n callbacks?.onZoom?.({ endValue: 100, startValue: 0 });\n }\n }\n };\n if (!isChartZoomDisabled) {\n chart?.getZr().on('mousedown', handleMouseDown);\n }\n\n // Return cleanup function\n const chartRefCurrentElement = chartEchartRef.current;\n const element = chartRefCurrentElement?.children[0];\n return () => {\n window.removeEventListener('resize', resizeChart);\n\n element?.removeEventListener('mousemove', handleMouseMove);\n\n // Remove chart zoom handlers\n if (chartRefCurrentElement) {\n const chart = getInstanceByDom(chartRefCurrentElement);\n chart?.getZr().off('mousedown', handleMouseDown);\n }\n };\n });\n\n useEffect(() => {\n if (chartEchartRef.current === null) {\n return;\n }\n\n const chart = getInstanceByDom(chartEchartRef?.current);\n\n if (isLoading === true || isWaitingForFirstResize) {\n chart?.showLoading({\n color: tokens.theme[theme].color.primary.bg.status,\n fontFamily: tokens.typography['label'].fontFamily,\n fontSize: tokens.typography['label'].fontSize,\n fontWeight: tokens.typography['label'].fontWeight,\n maskColor: `rgb( from ${tokens.theme[theme].color.neutral.text.inverse} r g b / 0.8)`,\n text: 'Loading',\n textColor: tokens.theme[theme].color.neutral.text.default,\n });\n } else {\n chart?.hideLoading();\n }\n }, [isLoading, isWaitingForFirstResize, theme]);\n\n const legendSeries = useMemo(() => {\n if (chartEchartRef.current === null || isWaitingForFirstResize) {\n return;\n }\n\n const chart = getInstanceByDom(chartEchartRef?.current);\n const optionSeries = (initialOption?.series as NeedleSeries) ?? [];\n const optionDataset = initialOption?.dataset;\n\n const legendSeries: {\n name: string;\n color: string;\n }[] = [];\n if (Array.isArray(optionSeries)) {\n optionSeries.forEach((currentSeries, index) => {\n if (currentSeries === null) {\n return;\n } else if (\n currentSeries.type === 'line' &&\n typeof currentSeries.name === 'string' &&\n currentSeries.name?.includes('thresholdLine')\n ) {\n return;\n } else if (currentSeries.type === 'pie') {\n const encodedItemName = currentSeries.encode?.itemName;\n let currentDataset = Array.isArray(optionDataset)\n ? optionDataset[0]\n : optionDataset;\n if (currentSeries.datasetId && Array.isArray(optionDataset)) {\n currentDataset = optionDataset.find(\n (ds) => ds.id === currentSeries.datasetId,\n );\n } else if (currentSeries.datasetIndex !== undefined) {\n currentDataset = Array.isArray(optionDataset)\n ? optionDataset[currentSeries.datasetIndex]\n : optionDataset;\n }\n const firstDatasetRow = Array.isArray(currentDataset?.source)\n ? currentDataset?.source[0]\n : undefined;\n if (!firstDatasetRow) {\n return;\n }\n\n if (Array.isArray(firstDatasetRow)) {\n const firstDatasetRowIndex = firstDatasetRow.findIndex(\n (item) => item === encodedItemName,\n );\n\n if (firstDatasetRowIndex === -1) {\n return;\n }\n\n const source = currentDataset?.source;\n if (!source) {\n return;\n }\n\n const sourceLength = Array.isArray(source) ? source.length : 0;\n const selected = legendSelectedRef.current;\n const isAllVisible = Object.values(selected).every((v) => v);\n\n for (let rowIndex = 1; rowIndex < sourceLength; rowIndex++) {\n const row = source[rowIndex] as (string | number)[];\n const name = String(row[firstDatasetRowIndex]);\n const freshColor = chart?.getVisual(\n { dataIndexInside: rowIndex - 1, seriesIndex: index },\n 'color',\n );\n\n // Only trust getVisual colors when all items are visible.\n // When items are deselected, getVisual returns grayed-out\n // colors, so we use the cached color from when it was visible.\n if (isAllVisible && typeof freshColor === 'string') {\n legendColorCacheRef.current.set(name, freshColor);\n }\n\n const color =\n legendColorCacheRef.current.get(name) ??\n (typeof freshColor === 'string' ? freshColor : '#000000');\n\n legendSeries.push({ color, name });\n }\n } else {\n // TODO: handle dictionary\n }\n\n return;\n } else {\n const name = Array.isArray(optionSeries)\n ? optionSeries[index]?.name\n : undefined;\n\n if (name === undefined) {\n return null;\n }\n\n const color = chart?.getVisual({ seriesIndex: index }, 'color');\n legendSeries.push({\n color: typeof color === 'string' ? color : '#000000',\n name: String(name),\n });\n }\n });\n }\n return legendSeries.filter((currentSeries) => currentSeries !== null);\n }, [isWaitingForFirstResize, initialOption]);\n\n if (chartEchartRef.current !== null && !isChartZoomDisabled) {\n const chart = getInstanceByDom(chartEchartRef.current);\n if (chart) {\n // Needs to be re-set on every re-render.\n // Sets the selectable zoom area over the chart (not the slider).\n chart.dispatchAction({\n dataZoomSelectActive: true,\n key: 'dataZoomSelect',\n type: 'takeGlobalCursor',\n });\n }\n }\n\n return (\n <div ref={chartRef} className=\"ndl-chart\" style={style}>\n <div ref={chartEchartRef} />\n {legend?.show && !isWaitingForFirstResize && (\n <Legend\n ref={chartLegendRef}\n wrappingType={legend.wrappingType}\n series={legendSeries ?? []}\n chartRef={chartEchartRef}\n selectedRef={legendSelectedRef}\n />\n )}\n </div>\n );\n}\n"]}
1
+ {"version":3,"file":"Chart.js","sourceRoot":"","sources":["../../../src/charts/Chart.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 { useNeedleTheme } from '@neo4j-ndl/react';\nimport {\n type DataZoomComponentOption,\n type ECharts,\n type EChartsOption,\n getInstanceByDom,\n init,\n registerTheme,\n} from 'echarts';\nimport { useEffect, useMemo, useRef, useState } from 'react';\nimport { renderToString } from 'react-dom/server';\n\nimport { generateThresholdAriaDescription } from './aria-description';\nimport {\n type ChartProps,\n type Condition,\n type NeedleSeries,\n type NotificationType,\n type ThresholdLineSeriesOption,\n} from './chart-types';\nimport { ChartTooltip } from './ChartTooltip';\nimport { defaultThresholdLineSeriesOption } from './defaults';\nimport { Legend } from './Legend';\nimport { ndlEchartsTheme } from './themes/ndl-echarts-theme';\nimport {\n mergeDataZoom,\n mergeSeries,\n mergeToolbox,\n mergeXAxis,\n mergeYAxis,\n} from './user-option-utils';\nimport {\n capitalizeFirstLetter,\n extractValueFromTooltipSeries,\n formatNumberEnUS,\n} from './utils';\n\n// This returns a boolean if the condition is met\n// and also what to display in the tooltip.\nfunction checkCondition(\n value: number,\n condition: Condition,\n threshold: number,\n): {\n isConditionMet: boolean;\n conditionText: string | undefined;\n} {\n switch (condition) {\n case 'greater':\n return {\n conditionText: 'Above',\n isConditionMet: value > threshold,\n };\n case 'greaterOrEqual':\n return {\n conditionText:\n value > threshold\n ? 'Above'\n : value === threshold\n ? 'Equal'\n : undefined,\n isConditionMet: value >= threshold,\n };\n case 'less':\n return {\n conditionText: 'Below',\n isConditionMet: value < threshold,\n };\n case 'lessOrEqual':\n return {\n conditionText:\n value < threshold\n ? 'Below'\n : value === threshold\n ? 'Equal'\n : undefined,\n isConditionMet: value <= threshold,\n };\n case 'equal':\n return {\n conditionText: 'Equal',\n isConditionMet: value === threshold,\n };\n case 'notEqual':\n return {\n conditionText: 'Not equal',\n isConditionMet: value !== threshold,\n };\n default:\n return { conditionText: undefined, isConditionMet: false };\n }\n}\n\n/*\nKeep this, if we want more than one type of the same threshold line\nthis will be useful to use.\n\nexport interface NewRegisteredSeriesOption extends RegisteredSeriesOption {\nthresholdLine: ThresholdLineSeriesOption;\n}\nexport type SeriesOption = Values<NewRegisteredSeriesOption>;\nexport type Series = SeriesOption | SeriesOption[];\n*/\n\n/**\n * A chart component powered by Apache ECharts with Needle's customization and theming.\n *\n * The `Chart` component fills 100% of its parent's width and height. Because it\n * relies on the container's `clientHeight` to size the canvas, **the parent element\n * must have an explicit height** (e.g. a fixed px/rem value or a viewport unit).\n *\n * @example\n * ```tsx\n * <div style={{ height: '350px' }}>\n * <Chart dataset={dataset} series={series} xAxis={xAxis} yAxis={yAxis} />\n * </div>\n * ```\n */\nexport function Chart({\n dataset,\n option: userOption,\n xAxis: propXAxis,\n yAxis: propYAxis,\n series: propsSeries,\n style,\n settings = {\n lazyUpdate: false,\n notMerge: true,\n silent: false,\n },\n isLoading,\n isChartZoomDisabled = false,\n legend,\n callbacks,\n palette,\n}: ChartProps): React.JSX.Element {\n const chartRef = useRef<HTMLDivElement>(null);\n const chartEchartRef = useRef<HTMLDivElement>(null);\n const chartLegendRef = useRef<HTMLDivElement>(null);\n const legendSelectedRef = useRef<Record<string, boolean>>({});\n const legendColorCacheRef = useRef<Map<string, string>>(new Map());\n const [isWaitingForFirstResize, setIsWaitingForFirstResize] = useState(true);\n\n const dataZoomOptions = (userOption as EChartsOption)?.dataZoom;\n const toolboxOptions = (userOption as EChartsOption)?.toolbox;\n\n const hasSliderZoom = Array.isArray(dataZoomOptions)\n ? dataZoomOptions.some((dataZoomOption: DataZoomComponentOption) => {\n return dataZoomOption?.type === 'slider';\n })\n : dataZoomOptions?.type === 'slider';\n\n const { theme } = useNeedleTheme();\n const thresholdLines = useMemo(() => {\n const seriesArray = Array.isArray(propsSeries)\n ? propsSeries\n : [propsSeries];\n\n const thresholdLineSeries = seriesArray.filter((currentSeries) => {\n return currentSeries.type === 'thresholdLine';\n }) as ThresholdLineSeriesOption<NotificationType>[];\n\n return thresholdLineSeries.map((currentThresholdLineSeriesOption) => {\n return {\n ...currentThresholdLineSeriesOption,\n condition:\n currentThresholdLineSeriesOption.condition ??\n defaultThresholdLineSeriesOption.condition,\n value: currentThresholdLineSeriesOption.yAxis,\n };\n });\n }, [propsSeries]);\n\n const dataZoom = useMemo(() => {\n return mergeDataZoom(dataZoomOptions);\n }, [dataZoomOptions]);\n\n const series = mergeSeries(propsSeries, theme, userOption, palette);\n const xAxis = mergeXAxis(propXAxis, theme);\n const yAxis = mergeYAxis(propYAxis, theme);\n\n const hasCategoryXAxis = Array.isArray(xAxis)\n ? xAxis.some((x) => x.type === 'category')\n : xAxis?.type === 'category';\n\n // The initial option used, the charts option is not necessarily\n // the same as this due to mutation via dispatch and setOption.\n // use getOption to get the current option of the chart.\n const initialOption = useMemo(() => {\n if (chartEchartRef.current === null) {\n return;\n }\n\n const chart = getInstanceByDom(chartEchartRef.current);\n\n const customAriaDescription = generateThresholdAriaDescription(\n propsSeries,\n dataset,\n );\n\n const option = {\n dataset,\n xAxis,\n yAxis,\n ...userOption,\n aria: {\n decal: {\n show: false,\n },\n enabled: true,\n ...(customAriaDescription !== undefined && {\n label: { description: customAriaDescription },\n }),\n ...(userOption?.aria as EChartsOption['aria']),\n },\n grid: {\n left: hasCategoryXAxis ? '15px' : '10px',\n right: hasCategoryXAxis ? '15px' : '10px',\n top: '10px',\n bottom: hasSliderZoom ? '60px' : '10px',\n type: 'solid',\n containLabel: true,\n ...(userOption?.grid as EChartsOption['grid']),\n },\n legend: {\n // Removes in-built echarts legend\n show: false,\n // Preserve legend filter state across re-renders. legendSelectedRef\n // is the single source of truth, written by the Legend component.\n // ECharts mutates the options object, so pass a shallow copy here\n // to avoid it mutating the React ref object.\n selected: { ...(legendSelectedRef.current || {}) },\n },\n series,\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\n let valueFormatter = formatNumberEnUS;\n if (\n typeof userOption?.tooltip === 'object' &&\n userOption.tooltip !== null &&\n 'valueFormatter' in userOption.tooltip\n ) {\n valueFormatter = userOption.tooltip.valueFormatter as (\n value: unknown,\n ) => string;\n }\n return `${renderToString(\n <span className=\"ndl-charts-chart-tooltip\">\n <ChartTooltip.Title>\n {firstParam?.axisValueLabel ?? ''}\n </ChartTooltip.Title>\n {paramsArray.map((series) => {\n const value = extractValueFromTooltipSeries(\n series.value,\n series.encode,\n series.axisDim,\n );\n\n const seriesValue =\n typeof value === 'number' ? value : Number(value);\n\n const isThresholdLine =\n series.seriesName.startsWith('thresholdLine');\n\n const notifications = thresholdLines\n .filter((threshold) => {\n const {\n value: thresholdValue,\n condition,\n customCondition,\n } = threshold;\n\n if (Number.isNaN(seriesValue)) {\n return false;\n }\n\n const isConditionMet = customCondition\n ? customCondition(seriesValue, thresholdValue)\n : checkCondition(seriesValue, condition, thresholdValue)\n .isConditionMet;\n\n return !isThresholdLine && isConditionMet;\n })\n .map((threshold) => {\n const {\n notificationType,\n value: thresholdValue,\n condition,\n customConditionText,\n customCondition,\n } = threshold;\n\n return {\n id: `threshold-${notificationType}`,\n leadingElement: customCondition\n ? customConditionText\n : `${\n checkCondition(\n seriesValue,\n condition,\n thresholdValue,\n ).conditionText\n } threshold`,\n notificationType,\n trailingElement: valueFormatter(thresholdValue),\n };\n });\n\n return (\n <ChartTooltip.Content\n key={series.seriesName}\n leadingElement={\n isThresholdLine\n ? `${capitalizeFirstLetter(\n series.seriesName.replace('thresholdLine-', ''),\n )} threshold`\n : series.seriesName\n }\n trailingElement={valueFormatter(value)}\n indentSquareColor={series.color}\n notifications={notifications}\n />\n );\n })}\n </span>,\n )}`;\n },\n },\n dataZoom,\n toolbox: mergeToolbox(toolboxOptions),\n };\n\n // Update chart with initial option\n chart?.setOption(option, settings);\n\n // Get option returns the current option of the chart.\n // This is slightly different than the option we gave as an argument.\n // Because we use useMemo in other areas we want to get this set first,\n // this is why we are setting then getting then returning. If we did this in\n // a useEffect it would run after the other useMemos which is not what we want.\n // This is purely for order of operations.\n const chartOption = chart?.getOption();\n\n return chartOption;\n }, [\n thresholdLines,\n propsSeries,\n dataset,\n xAxis,\n yAxis,\n userOption,\n hasCategoryXAxis,\n hasSliderZoom,\n series,\n dataZoom,\n toolboxOptions,\n settings,\n ]);\n\n useEffect(() => {\n // Initialize chart\n let chart: ECharts | undefined;\n if (chartEchartRef.current !== null) {\n registerTheme('ndl-light', ndlEchartsTheme('light', palette));\n registerTheme('ndl-dark', ndlEchartsTheme('dark', palette));\n\n const currentChart = getInstanceByDom(chartEchartRef.current);\n if (currentChart) {\n chart = currentChart;\n } else {\n const echartsTheme = theme === 'light' ? 'ndl-light' : 'ndl-dark';\n chart = init(chartEchartRef.current, echartsTheme, {\n renderer: 'svg',\n });\n }\n }\n\n if (callbacks?.onZoom) {\n chart?.on('datazoom', () => {\n if (chartEchartRef.current === null) {\n return;\n }\n\n const currentChart = getInstanceByDom(chartEchartRef.current);\n if (!currentChart) {\n return;\n }\n\n const option = currentChart.getOption();\n if (!option || !option.dataZoom) {\n return;\n }\n\n const dataZoom = Array.isArray(option.dataZoom)\n ? option.dataZoom[0]\n : option.dataZoom;\n const { startValue, endValue } = dataZoom as {\n startValue: number;\n endValue: number;\n };\n\n callbacks?.onZoom?.({ endValue, startValue });\n });\n }\n\n // Add chart resize listener\n // ResizeObserver is leading to a bit janky UX\n function resizeChart() {\n // TODO: We need to revisit this. Right now using grid containLabel seems to work.\n // We still need to visit this for overflowing of the x-axis labels.\n // const calculateGridLeft = () => {\n // const textElements = chartEchartRef.current?.querySelectorAll('text');\n // const filteredTextElements = Array.from(textElements || []).filter(\n // (element) => element.getAttribute('text-anchor') === 'end',\n // );\n // let maxWidth = 0;\n // filteredTextElements.forEach((element) => {\n // const bbox = element.getBBox();\n // maxWidth = Math.max(maxWidth, bbox.width);\n // });\n // const tickLength = 5;\n // const tickPadding = 3;\n // return maxWidth + tickLength + tickPadding;\n // };\n //\n // // Example of dynamically setting the grid's left\n // const gridLeft = calculateGridLeft();\n // chart?.setOption({\n // grid: {\n // left: gridLeft,\n // },\n // });\n\n // We want to fit the chart to the charts container.\n const chartContainerHeight = chartRef.current?.clientHeight;\n const chartContainerWidth = chartRef.current?.clientWidth;\n // Need to take legends height into consideration, otherwise it will overflow the parent.\n const chartLegendHeight = chartLegendRef?.current?.clientHeight || 0;\n const height = chartContainerHeight\n ? chartContainerHeight - chartLegendHeight\n : undefined;\n chart?.resize({\n height,\n width: chartContainerWidth,\n });\n }\n window.addEventListener('resize', resizeChart);\n requestAnimationFrame(() => {\n resizeChart();\n setIsWaitingForFirstResize(false);\n });\n\n // Add chart zoom listeners\n const handleMouseMove = () => {\n // I do not like this at all: https://github.com/apache/echarts/issues/19819\n // echarts updates the svgs on every mouse movement so we need to do this.\n chart?.getZr().setCursorStyle('default');\n };\n // We cannot use chart.getZr().on('mousemove', handleMouseMove)\n // This is because it doesn't respect our callbacks. It will\n // always run echarts code last instead of our callback.\n const chartChild = chartEchartRef.current?.children[0] as HTMLElement;\n if (!isChartZoomDisabled) {\n chartChild.addEventListener('mousemove', handleMouseMove);\n }\n\n const handleMouseDown = (params: { event: MouseEvent }) => {\n const event = params.event;\n const amountOfMouseClicks = event.detail;\n const isDoubleClick = amountOfMouseClicks === 2;\n if (isDoubleClick) {\n // Reset zooming.\n if (chart === undefined) {\n return;\n }\n chart?.dispatchAction({\n end: 100,\n start: 0,\n type: 'dataZoom',\n });\n if (callbacks?.onZoom) {\n callbacks?.onZoom?.({ endValue: 100, startValue: 0 });\n }\n }\n };\n if (!isChartZoomDisabled) {\n chart?.getZr().on('mousedown', handleMouseDown);\n }\n\n // Return cleanup function\n const chartRefCurrentElement = chartEchartRef.current;\n const element = chartRefCurrentElement?.children[0];\n return () => {\n window.removeEventListener('resize', resizeChart);\n\n element?.removeEventListener('mousemove', handleMouseMove);\n\n // Remove chart zoom handlers\n if (chartRefCurrentElement) {\n const chart = getInstanceByDom(chartRefCurrentElement);\n chart?.getZr().off('mousedown', handleMouseDown);\n }\n };\n });\n\n useEffect(() => {\n if (chartEchartRef.current === null) {\n return;\n }\n\n const chart = getInstanceByDom(chartEchartRef?.current);\n\n if (isLoading === true || isWaitingForFirstResize) {\n chart?.showLoading({\n color: tokens.theme[theme].color.primary.bg.status,\n fontFamily: tokens.typography['label'].fontFamily,\n fontSize: tokens.typography['label'].fontSize,\n fontWeight: tokens.typography['label'].fontWeight,\n maskColor: `rgb( from ${tokens.theme[theme].color.neutral.text.inverse} r g b / 0.8)`,\n text: 'Loading',\n textColor: tokens.theme[theme].color.neutral.text.default,\n });\n } else {\n chart?.hideLoading();\n }\n }, [isLoading, isWaitingForFirstResize, theme]);\n\n const legendSeries = useMemo(() => {\n if (chartEchartRef.current === null || isWaitingForFirstResize) {\n return;\n }\n\n const chart = getInstanceByDom(chartEchartRef?.current);\n const optionSeries = (initialOption?.series as NeedleSeries) ?? [];\n const optionDataset = initialOption?.dataset;\n\n const legendSeries: {\n name: string;\n color: string;\n }[] = [];\n if (Array.isArray(optionSeries)) {\n optionSeries.forEach((currentSeries, index) => {\n if (currentSeries === null) {\n return;\n } else if (\n currentSeries.type === 'line' &&\n typeof currentSeries.name === 'string' &&\n currentSeries.name?.includes('thresholdLine')\n ) {\n return;\n } else if (currentSeries.type === 'pie') {\n const encodedItemName = currentSeries.encode?.itemName;\n let currentDataset = Array.isArray(optionDataset)\n ? optionDataset[0]\n : optionDataset;\n if (currentSeries.datasetId && Array.isArray(optionDataset)) {\n currentDataset = optionDataset.find(\n (ds) => ds.id === currentSeries.datasetId,\n );\n } else if (currentSeries.datasetIndex !== undefined) {\n currentDataset = Array.isArray(optionDataset)\n ? optionDataset[currentSeries.datasetIndex]\n : optionDataset;\n }\n const firstDatasetRow = Array.isArray(currentDataset?.source)\n ? currentDataset?.source[0]\n : undefined;\n if (!firstDatasetRow) {\n return;\n }\n\n if (Array.isArray(firstDatasetRow)) {\n const firstDatasetRowIndex = firstDatasetRow.findIndex(\n (item) => item === encodedItemName,\n );\n\n if (firstDatasetRowIndex === -1) {\n return;\n }\n\n const source = currentDataset?.source;\n if (!source) {\n return;\n }\n\n const sourceLength = Array.isArray(source) ? source.length : 0;\n const selected = legendSelectedRef.current;\n const isAllVisible = Object.values(selected).every((v) => v);\n\n for (let rowIndex = 1; rowIndex < sourceLength; rowIndex++) {\n const row = source[rowIndex] as (string | number)[];\n const name = String(row[firstDatasetRowIndex]);\n const freshColor = chart?.getVisual(\n { dataIndexInside: rowIndex - 1, seriesIndex: index },\n 'color',\n );\n\n // Only trust getVisual colors when all items are visible.\n // When items are deselected, getVisual returns grayed-out\n // colors, so we use the cached color from when it was visible.\n if (isAllVisible && typeof freshColor === 'string') {\n legendColorCacheRef.current.set(name, freshColor);\n }\n\n const color =\n legendColorCacheRef.current.get(name) ??\n (typeof freshColor === 'string' ? freshColor : '#000000');\n\n legendSeries.push({ color, name });\n }\n } else {\n // TODO: handle dictionary\n }\n\n return;\n } else {\n const name = Array.isArray(optionSeries)\n ? optionSeries[index]?.name\n : undefined;\n\n if (name === undefined) {\n return null;\n }\n\n const color = chart?.getVisual({ seriesIndex: index }, 'color');\n legendSeries.push({\n color: typeof color === 'string' ? color : '#000000',\n name: String(name),\n });\n }\n });\n }\n return legendSeries.filter((currentSeries) => currentSeries !== null);\n }, [isWaitingForFirstResize, initialOption]);\n\n if (chartEchartRef.current !== null && !isChartZoomDisabled) {\n const chart = getInstanceByDom(chartEchartRef.current);\n if (chart) {\n // Needs to be re-set on every re-render.\n // Sets the selectable zoom area over the chart (not the slider).\n chart.dispatchAction({\n dataZoomSelectActive: true,\n key: 'dataZoomSelect',\n type: 'takeGlobalCursor',\n });\n }\n }\n\n return (\n <div ref={chartRef} className=\"ndl-chart\" style={style}>\n <div ref={chartEchartRef} />\n {legend?.show && !isWaitingForFirstResize && (\n <Legend\n ref={chartLegendRef}\n wrappingType={legend.wrappingType}\n series={legendSeries ?? []}\n chartRef={chartEchartRef}\n selectedRef={legendSelectedRef}\n />\n )}\n </div>\n );\n}\n"]}
@@ -35,7 +35,7 @@ import { ConditionalWrap, Tooltip, Typography, useResizeObserver, } from '@neo4j
35
35
  import { CheckIconOutline } from '@neo4j-ndl/react/icons';
36
36
  import classNames from 'classnames';
37
37
  import { getInstanceByDom } from 'echarts';
38
- import { useEffect, useRef, useState } from 'react';
38
+ import { useEffect, useMemo, useRef, useState } from 'react';
39
39
  import { getComputedElementWidth, highlightOrDownplaySeries, isThresholdLine, resetAllSeriesHighlight, useLegendVisibility, } from './legend-utils';
40
40
  const LegendItem = function LegendItemComponent(_a) {
41
41
  var _b;
@@ -54,10 +54,31 @@ const LegendItem = function LegendItemComponent(_a) {
54
54
  backgroundColor: deSelected === true ? 'transparent' : color,
55
55
  }, children: selected === true && (_jsx(CheckIconOutline, { className: "ndl-chart-legend-item-square-checkmark" })) }), _jsx(Typography, { variant: "body-medium", className: "ndl-chart-legend-item-text", children: children })] })));
56
56
  };
57
+ const getAllSeriesSelected = (series) => Object.fromEntries(series.map((s) => { var _a; return [(_a = s.name) !== null && _a !== void 0 ? _a : '', true]; }));
58
+ const hasSelectionForCurrentSeries = (selection, series) => {
59
+ const selectedNames = Object.keys(selection);
60
+ return (selectedNames.length === series.length &&
61
+ series.every((s) => { var _a; return Object.prototype.hasOwnProperty.call(selection, (_a = s.name) !== null && _a !== void 0 ? _a : ''); }));
62
+ };
63
+ /**
64
+ * Keeps legend rendering in sync with the current ECharts series names.
65
+ *
66
+ * ECharts can briefly keep selection state for the previous pie categories
67
+ * after the dataset changes. Rendering with that stale state makes every new
68
+ * category look deselected for one frame, so we render new series as visible
69
+ * until the effect below reconciles the persisted selection state.
70
+ */
71
+ const useLegendSelectionForCurrentSeries = (series) => {
72
+ const initialSelected = useMemo(() => getAllSeriesSelected(series), [series]);
73
+ const [selectedSeries, setSelectedSeries] = useState(initialSelected);
74
+ const renderedSelectedSeries = hasSelectionForCurrentSeries(selectedSeries, series)
75
+ ? selectedSeries
76
+ : initialSelected;
77
+ return { renderedSelectedSeries, selectedSeries, setSelectedSeries };
78
+ };
57
79
  export const Legend = function LegendComponent(_a) {
58
80
  var { className, wrappingType = 'wrapping', series, chartRef, selectedRef, ref, htmlAttributes } = _a, restProps = __rest(_a, ["className", "wrappingType", "series", "chartRef", "selectedRef", "ref", "htmlAttributes"]);
59
- const initialSelected = Object.fromEntries(series.map((s) => { var _a; return [(_a = s.name) !== null && _a !== void 0 ? _a : '', true]; }));
60
- const [selectedSeries, setSelectedSeries] = useState(initialSelected);
81
+ const { renderedSelectedSeries, selectedSeries, setSelectedSeries } = useLegendSelectionForCurrentSeries(series);
61
82
  // Keep the shared ref in sync so Chart can read the latest selection state
62
83
  // when building setOption. This is the single source of truth for legend filters.
63
84
  useEffect(() => {
@@ -75,7 +96,7 @@ export const Legend = function LegendComponent(_a) {
75
96
  }
76
97
  // Delay the highlight to avoid flickering when quickly hovering the legend items
77
98
  highlightTimeOut.current = setTimeout(() => {
78
- highlightOrDownplaySeries(chartRef, series, selectedSeries, seriesToUpdate, 'highlight');
99
+ highlightOrDownplaySeries(chartRef, series, renderedSelectedSeries, seriesToUpdate, 'highlight');
79
100
  }, hoverTimeOut);
80
101
  };
81
102
  const downplaySeries = (seriesToUpdate) => {
@@ -85,7 +106,7 @@ export const Legend = function LegendComponent(_a) {
85
106
  }
86
107
  // Delay the downplay to avoid flickering when moving the highlight between legend items (no downplay needed in between)
87
108
  downplayTimeOut.current = setTimeout(() => {
88
- highlightOrDownplaySeries(chartRef, series, selectedSeries, seriesToUpdate, 'downplay');
109
+ highlightOrDownplaySeries(chartRef, series, renderedSelectedSeries, seriesToUpdate, 'downplay');
89
110
  }, hoverTimeOut);
90
111
  };
91
112
  useEffect(() => {
@@ -131,34 +152,38 @@ export const Legend = function LegendComponent(_a) {
131
152
  chart === null || chart === void 0 ? void 0 : chart.off(eventType);
132
153
  });
133
154
  };
134
- }, [chartRef, series]);
155
+ }, [chartRef, selectedRef, series, setSelectedSeries]);
135
156
  const classes = classNames(`ndl-chart-legend`, {
136
157
  'ndl-chart-legend-truncation': wrappingType === 'truncation',
137
158
  'ndl-chart-legend-wrapping': wrappingType === 'wrapping',
138
159
  }, className);
139
- const { toggleLegendVisibility, setAllVisible } = useLegendVisibility(chartRef, selectedSeries);
160
+ const { toggleLegendVisibility, setAllVisible } = useLegendVisibility(chartRef, renderedSelectedSeries);
140
161
  return (_jsx("div", Object.assign({ ref: ref, className: "ndl-chart-legend-container" }, restProps, htmlAttributes, { children: wrappingType === 'truncation' || wrappingType === 'wrapping' ? (_jsx("div", { className: classes, children: series.map((currentSeries, index) => {
141
162
  var _a, _b;
142
163
  const hasMoreThanOneItem = series.length > 1;
143
- const selectedSeriesLength = Object.values(selectedSeries).filter(Boolean).length;
164
+ const selectedSeriesLength = Object.values(renderedSelectedSeries).filter(Boolean).length;
144
165
  const isAllSeriesVisible = selectedSeriesLength === series.length;
145
166
  const color = currentSeries.color;
146
167
  const isDeselected = currentSeries.name === undefined
147
168
  ? false
148
- : !selectedSeries[currentSeries.name];
169
+ : !renderedSelectedSeries[currentSeries.name];
149
170
  return (_jsx(ConditionalWrap, { shouldWrap: wrappingType === 'truncation', wrap: (children) => (_jsx(Tooltip, { type: "simple", children: _jsx(Tooltip.Trigger, { hasButtonWrapper: true, children: children }) }, index)), children: _jsx(LegendItem, { name: currentSeries.name, color: color, hasButtons: hasMoreThanOneItem && currentSeries.name !== undefined, onLegendItemMouseEnter: () => {
150
- !isDeselected && highlightSeries([currentSeries]);
171
+ if (!isDeselected) {
172
+ highlightSeries([currentSeries]);
173
+ }
151
174
  }, onLegendItemMouseLeave: () => {
152
- !isDeselected && downplaySeries([currentSeries]);
175
+ if (!isDeselected) {
176
+ downplaySeries([currentSeries]);
177
+ }
153
178
  }, onLegendItemClick: () => {
154
179
  var _a;
155
180
  const isAllSeriesSelected = selectedSeriesLength === series.length;
156
- const isOnlyVisible = selectedSeries[(_a = currentSeries.name) !== null && _a !== void 0 ? _a : ''] &&
181
+ const isOnlyVisible = renderedSelectedSeries[(_a = currentSeries.name) !== null && _a !== void 0 ? _a : ''] &&
157
182
  selectedSeriesLength === 1;
158
183
  toggleLegendVisibility(currentSeries.name, isAllSeriesSelected, isOnlyVisible);
159
184
  }, selected: !isAllSeriesVisible &&
160
- selectedSeries[(_a = currentSeries.name) !== null && _a !== void 0 ? _a : ''], deSelected: isDeselected, children: (_b = currentSeries.name) !== null && _b !== void 0 ? _b : `Series ${index}` }) }, index));
161
- }) })) : (_jsx(LegendOverflowType, { className: classes, selectedSeries: selectedSeries, wrappingType: wrappingType, chartRef: chartRef, series: series, onSetAllVisible: setAllVisible, onLegendItemMouseEnter: (seriesToUpdate) => highlightSeries(seriesToUpdate), onLegendItemMouseLeave: (seriesToUpdate) => downplaySeries(seriesToUpdate), onToggleLegendVisibility: (name, isAllSeriesSelected, isOnlyVisible) => {
185
+ renderedSelectedSeries[(_a = currentSeries.name) !== null && _a !== void 0 ? _a : ''], deSelected: isDeselected, children: (_b = currentSeries.name) !== null && _b !== void 0 ? _b : `Series ${index}` }) }, index));
186
+ }) })) : (_jsx(LegendOverflowType, { className: classes, selectedSeries: renderedSelectedSeries, wrappingType: wrappingType, chartRef: chartRef, series: series, onSetAllVisible: setAllVisible, onLegendItemMouseEnter: (seriesToUpdate) => highlightSeries(seriesToUpdate), onLegendItemMouseLeave: (seriesToUpdate) => downplaySeries(seriesToUpdate), onToggleLegendVisibility: (name, isAllSeriesSelected, isOnlyVisible) => {
162
187
  toggleLegendVisibility(name, isAllSeriesSelected, isOnlyVisible);
163
188
  } })) })));
164
189
  };
@@ -1 +1 @@
1
- {"version":3,"file":"Legend.js","sourceRoot":"","sources":["../../../src/charts/Legend.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 {\n ConditionalWrap,\n Tooltip,\n Typography,\n useResizeObserver,\n} from '@neo4j-ndl/react';\nimport { CheckIconOutline } from '@neo4j-ndl/react/icons';\nimport classNames from 'classnames';\nimport { type EChartsType, getInstanceByDom } from 'echarts';\nimport type React from 'react';\nimport { useEffect, useRef, useState } from 'react';\n\nimport {\n type LegendItemProps,\n type LegendOverflowProps,\n type LegendProps,\n} from './chart-types';\nimport {\n getComputedElementWidth,\n highlightOrDownplaySeries,\n isThresholdLine,\n resetAllSeriesHighlight,\n useLegendVisibility,\n} from './legend-utils';\nimport { type CommonProps } from './types';\n\nconst LegendItem = function LegendItemComponent({\n children,\n as,\n className,\n name,\n selected,\n deSelected,\n onLegendItemClick,\n color,\n hasButtons = true,\n ref,\n onLegendItemMouseEnter,\n onLegendItemMouseLeave,\n ...restProps\n}: LegendItemProps) {\n const Component = as ?? (hasButtons ? 'button' : 'div');\n\n const classes = classNames(\n 'ndl-chart-legend-item',\n {\n 'ndl-chart-legend-item-deselected': deSelected,\n 'ndl-chart-legend-item-selected': selected,\n },\n className,\n );\n\n // We don't want to display threshold lines in the legend\n if (isThresholdLine(name) ?? false) {\n return null;\n }\n\n return (\n <Component\n className={classes}\n ref={ref}\n data-labelname={name}\n title={name}\n onClick={hasButtons ? onLegendItemClick : undefined}\n onMouseEnter={onLegendItemMouseEnter}\n onMouseLeave={onLegendItemMouseLeave}\n {...restProps}\n >\n <span\n className=\"ndl-chart-legend-item-square\"\n style={\n {\n '--ndl-chart-legend-item-color': color,\n backgroundColor: deSelected === true ? 'transparent' : color,\n } as React.CSSProperties\n }\n >\n {selected === true && (\n <CheckIconOutline className=\"ndl-chart-legend-item-square-checkmark\" />\n )}\n </span>\n <Typography variant=\"body-medium\" className=\"ndl-chart-legend-item-text\">\n {children}\n </Typography>\n </Component>\n );\n};\n\nexport const Legend = function LegendComponent({\n className,\n wrappingType = 'wrapping',\n series,\n chartRef,\n selectedRef,\n ref,\n htmlAttributes,\n ...restProps\n}: CommonProps<'div', LegendProps>) {\n const initialSelected = Object.fromEntries(\n series.map((s) => [s.name ?? '', true]),\n );\n const [selectedSeries, setSelectedSeries] =\n useState<Record<string, boolean>>(initialSelected);\n\n // Keep the shared ref in sync so Chart can read the latest selection state\n // when building setOption. This is the single source of truth for legend filters.\n useEffect(() => {\n if (selectedRef) {\n selectedRef.current = selectedSeries;\n }\n }, [selectedRef, selectedSeries]);\n\n const highlightTimeOut = useRef<ReturnType<typeof setTimeout> | null>(null);\n const downplayTimeOut = useRef<ReturnType<typeof setTimeout> | null>(null);\n const hoverTimeOut = 80;\n\n const highlightSeries = (\n seriesToUpdate: { name: string; color: string }[],\n ) => {\n // Clear the downplay timeout when a new item is hovered\n if (downplayTimeOut.current) {\n clearTimeout(downplayTimeOut.current);\n }\n\n // Delay the highlight to avoid flickering when quickly hovering the legend items\n highlightTimeOut.current = setTimeout(() => {\n highlightOrDownplaySeries(\n chartRef,\n series,\n selectedSeries,\n seriesToUpdate,\n 'highlight',\n );\n }, hoverTimeOut);\n };\n\n const downplaySeries = (\n seriesToUpdate: { name: string; color: string }[],\n ) => {\n // Clear the highlight timeout when the mouse is leaving the legend item\n if (highlightTimeOut.current) {\n clearTimeout(highlightTimeOut.current);\n }\n\n // Delay the downplay to avoid flickering when moving the highlight between legend items (no downplay needed in between)\n downplayTimeOut.current = setTimeout(() => {\n highlightOrDownplaySeries(\n chartRef,\n series,\n selectedSeries,\n seriesToUpdate,\n 'downplay',\n );\n }, hoverTimeOut);\n };\n\n useEffect(() => {\n // Preserve existing legend selection state across re-renders.\n // Only new series default to visible (true); removed series are dropped.\n const prev = selectedRef?.current ?? {};\n const next: Record<string, boolean> = {};\n for (const s of series) {\n const name = s.name ?? '';\n next[name] = prev[name] ?? true;\n }\n setSelectedSeries(next);\n\n if (chartRef.current === null) {\n return;\n }\n const chart = getInstanceByDom(chartRef.current);\n\n const eventTypes = [\n 'legendselectchanged',\n 'legendselectall',\n 'legendselected',\n 'legendunselected',\n ] as const;\n\n eventTypes.forEach((eventType) => {\n chart?.on(eventType, (params) => {\n if (\n typeof params === 'object' &&\n params !== null &&\n 'selected' in params &&\n params.selected !== null\n ) {\n const selected = params.selected ?? {};\n const filteredSelected = Object.fromEntries(\n Object.entries(selected).filter(\n ([key]) => !(isThresholdLine(key) ?? false),\n ),\n );\n\n // Reset the series highlight to avoid series to stay blurred on selection change\n if (eventType === 'legendselectchanged') {\n resetAllSeriesHighlight(chart as EChartsType);\n }\n\n setSelectedSeries(filteredSelected);\n }\n });\n });\n\n return () => {\n eventTypes.forEach((eventType) => {\n chart?.off(eventType);\n });\n };\n }, [chartRef, series]);\n\n const classes = classNames(\n `ndl-chart-legend`,\n {\n 'ndl-chart-legend-truncation': wrappingType === 'truncation',\n 'ndl-chart-legend-wrapping': wrappingType === 'wrapping',\n },\n className,\n );\n\n const { toggleLegendVisibility, setAllVisible } = useLegendVisibility(\n chartRef,\n selectedSeries,\n );\n\n return (\n <div\n ref={ref}\n className=\"ndl-chart-legend-container\"\n {...restProps}\n {...htmlAttributes}\n >\n {wrappingType === 'truncation' || wrappingType === 'wrapping' ? (\n <div className={classes}>\n {series.map((currentSeries, index) => {\n const hasMoreThanOneItem = series.length > 1;\n\n const selectedSeriesLength =\n Object.values(selectedSeries).filter(Boolean).length;\n\n const isAllSeriesVisible = selectedSeriesLength === series.length;\n\n const color = currentSeries.color;\n\n const isDeselected =\n currentSeries.name === undefined\n ? false\n : !selectedSeries[currentSeries.name];\n\n return (\n <ConditionalWrap\n key={index}\n shouldWrap={wrappingType === 'truncation'}\n wrap={(children) => (\n <Tooltip type=\"simple\" key={index}>\n <Tooltip.Trigger hasButtonWrapper>\n {children}\n </Tooltip.Trigger>\n </Tooltip>\n )}\n >\n <LegendItem\n name={currentSeries.name}\n color={color}\n hasButtons={\n hasMoreThanOneItem && currentSeries.name !== undefined\n }\n onLegendItemMouseEnter={() => {\n !isDeselected && highlightSeries([currentSeries]);\n }}\n onLegendItemMouseLeave={() => {\n !isDeselected && downplaySeries([currentSeries]);\n }}\n onLegendItemClick={() => {\n const isAllSeriesSelected =\n selectedSeriesLength === series.length;\n\n const isOnlyVisible =\n selectedSeries[currentSeries.name ?? ''] &&\n selectedSeriesLength === 1;\n\n toggleLegendVisibility(\n currentSeries.name,\n isAllSeriesSelected,\n isOnlyVisible,\n );\n }}\n selected={\n !isAllSeriesVisible &&\n selectedSeries[currentSeries.name ?? '']\n }\n deSelected={isDeselected}\n >\n {currentSeries.name ?? `Series ${index}`}\n </LegendItem>\n </ConditionalWrap>\n );\n })}\n </div>\n ) : (\n <LegendOverflowType\n className={classes}\n selectedSeries={selectedSeries}\n wrappingType={wrappingType}\n chartRef={chartRef}\n series={series}\n onSetAllVisible={setAllVisible}\n onLegendItemMouseEnter={(seriesToUpdate) =>\n highlightSeries(seriesToUpdate)\n }\n onLegendItemMouseLeave={(seriesToUpdate) =>\n downplaySeries(seriesToUpdate)\n }\n onToggleLegendVisibility={(\n name,\n isAllSeriesSelected,\n isOnlyVisible,\n ) => {\n toggleLegendVisibility(name, isAllSeriesSelected, isOnlyVisible);\n }}\n />\n )}\n </div>\n );\n};\n\nconst LegendOverflowType = function LegendOverflow({\n className,\n series,\n onSetAllVisible,\n onToggleLegendVisibility,\n selectedSeries,\n onLegendItemMouseEnter,\n onLegendItemMouseLeave,\n}: LegendOverflowProps) {\n const containerRef = useRef<HTMLDivElement>(null);\n\n const [nonOverflowItemsNames, setNonOverflowItemsNames] = useState<string[]>(\n series.map((s) => s.name),\n );\n\n useEffect(() => {\n setNonOverflowItemsNames(series.map((s) => s.name));\n }, [series]);\n\n const overflowItemsNames = series.filter(\n (item) => !nonOverflowItemsNames.includes(item.name),\n );\n\n const [width, setWidth] = useState(Infinity);\n useResizeObserver({\n // TODO: remove type cast. use-hooks.ts 3.1.1 has a type issue with the ref, it should be HTMLElement | null\n // https://github.com/juliencrn/usehooks-ts/pull/680\n onResize: (entry) => {\n if (entry.width === undefined) {\n return;\n }\n if (width < entry.width) {\n setNonOverflowItemsNames(series.map((s) => s.name));\n }\n setWidth(entry.width);\n },\n ref: containerRef as React.RefObject<HTMLElement>,\n });\n\n useEffect(() => {\n const container = containerRef.current;\n if (!container) {\n return;\n }\n\n let elements = Array.from(container.children);\n if (elements.length === 0 || series.length === 0) {\n return;\n }\n\n let totalWidth = 0;\n\n if (overflowItemsNames.length > 0) {\n const lastElementItem = elements[elements.length - 1];\n const lastItemWidth = getComputedElementWidth(lastElementItem);\n\n elements = elements.slice(0, elements.length - 1);\n totalWidth += lastItemWidth;\n }\n\n elements.forEach((element) => {\n const elementWidth = getComputedElementWidth(element);\n totalWidth += elementWidth;\n const textContent = element.textContent;\n if (!textContent) {\n return;\n }\n const itemName = element.getAttribute('data-labelname');\n if (itemName === null) {\n return;\n }\n if (totalWidth > width) {\n setNonOverflowItemsNames((oldNames) =>\n oldNames.filter((name) => name !== itemName),\n );\n }\n });\n }, [overflowItemsNames.length, series.length, width]);\n\n const classes = classNames(\n {\n 'ndl-chart-legend-calculating': width === Infinity,\n },\n className,\n );\n\n const selectedSeriesLength =\n Object.values(selectedSeries).filter(Boolean).length;\n\n const hasMoreThanOneItem = nonOverflowItemsNames.length > 1;\n const isAllSeriesVisible = selectedSeriesLength === series.length;\n\n const isOverflowItemsDeselected = overflowItemsNames.every(\n (item) => !selectedSeries[item.name ?? ''],\n );\n\n return (\n <div className={classes} ref={containerRef}>\n {nonOverflowItemsNames.map((name) => {\n const currentSeries = series.find((s) => s.name === name);\n if (currentSeries === undefined) {\n return null;\n }\n\n const isDeselected =\n currentSeries.name === undefined\n ? false\n : !selectedSeries[currentSeries.name];\n\n return (\n <LegendItem\n key={name}\n name={name}\n color={currentSeries.color}\n onLegendItemMouseEnter={() =>\n !isDeselected && onLegendItemMouseEnter([currentSeries])\n }\n onLegendItemMouseLeave={() =>\n !isDeselected && onLegendItemMouseLeave([currentSeries])\n }\n onLegendItemClick={() => {\n const isAllSeriesSelected =\n selectedSeriesLength === series.length;\n\n const isOnlyVisible =\n selectedSeries[name ?? ''] && selectedSeriesLength === 1;\n\n onToggleLegendVisibility?.(\n name,\n isAllSeriesSelected,\n isOnlyVisible,\n series,\n );\n }}\n hasButtons={hasMoreThanOneItem}\n selected={\n !isAllSeriesVisible && selectedSeries[currentSeries.name ?? '']\n }\n deSelected={isDeselected}\n >\n {name}\n </LegendItem>\n );\n })}\n\n {overflowItemsNames.length > 0 && (\n <Tooltip type=\"simple\">\n <Tooltip.Trigger hasButtonWrapper>\n <LegendItem\n name=\"ndl-overflow-items\"\n color={tokens.palette.neutral[30]}\n selected={\n !isAllSeriesVisible &&\n overflowItemsNames.every(\n (item) => selectedSeries[item.name ?? ''],\n )\n }\n deSelected={isOverflowItemsDeselected}\n onLegendItemMouseEnter={() =>\n !isOverflowItemsDeselected &&\n onLegendItemMouseEnter(overflowItemsNames)\n }\n onLegendItemMouseLeave={() =>\n !isOverflowItemsDeselected &&\n onLegendItemMouseLeave(overflowItemsNames)\n }\n onLegendItemClick={() => {\n const selectedSeriesLength =\n Object.values(selectedSeries).filter(Boolean).length;\n\n const isOnlyOverflowItemsVisible =\n selectedSeriesLength === overflowItemsNames.length &&\n overflowItemsNames.every(\n (item) => selectedSeries[item.name ?? ''],\n );\n\n if (isOnlyOverflowItemsVisible) {\n onSetAllVisible();\n return;\n }\n\n overflowItemsNames.forEach((item, index) => {\n const isAllSeriesSelected =\n selectedSeriesLength === series.length && index === 0;\n\n onToggleLegendVisibility?.(\n item.name,\n isAllSeriesSelected,\n false,\n series,\n );\n });\n }}\n >\n {overflowItemsNames.length} more\n </LegendItem>\n </Tooltip.Trigger>\n <Tooltip.Content>\n {overflowItemsNames.map((item) => (\n <p key={item.name}>{item.name}</p>\n ))}\n </Tooltip.Content>\n </Tooltip>\n )}\n </div>\n );\n};\n"]}
1
+ {"version":3,"file":"Legend.js","sourceRoot":"","sources":["../../../src/charts/Legend.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 {\n ConditionalWrap,\n Tooltip,\n Typography,\n useResizeObserver,\n} from '@neo4j-ndl/react';\nimport { CheckIconOutline } from '@neo4j-ndl/react/icons';\nimport classNames from 'classnames';\nimport { type EChartsType, getInstanceByDom } from 'echarts';\nimport type React from 'react';\nimport { useEffect, useMemo, useRef, useState } from 'react';\n\nimport {\n type LegendItemProps,\n type LegendOverflowProps,\n type LegendProps,\n} from './chart-types';\nimport {\n getComputedElementWidth,\n highlightOrDownplaySeries,\n isThresholdLine,\n resetAllSeriesHighlight,\n useLegendVisibility,\n} from './legend-utils';\nimport { type CommonProps } from './types';\n\nconst LegendItem = function LegendItemComponent({\n children,\n as,\n className,\n name,\n selected,\n deSelected,\n onLegendItemClick,\n color,\n hasButtons = true,\n ref,\n onLegendItemMouseEnter,\n onLegendItemMouseLeave,\n ...restProps\n}: LegendItemProps) {\n const Component = as ?? (hasButtons ? 'button' : 'div');\n\n const classes = classNames(\n 'ndl-chart-legend-item',\n {\n 'ndl-chart-legend-item-deselected': deSelected,\n 'ndl-chart-legend-item-selected': selected,\n },\n className,\n );\n\n // We don't want to display threshold lines in the legend\n if (isThresholdLine(name) ?? false) {\n return null;\n }\n\n return (\n <Component\n className={classes}\n ref={ref}\n data-labelname={name}\n title={name}\n onClick={hasButtons ? onLegendItemClick : undefined}\n onMouseEnter={onLegendItemMouseEnter}\n onMouseLeave={onLegendItemMouseLeave}\n {...restProps}\n >\n <span\n className=\"ndl-chart-legend-item-square\"\n style={\n {\n '--ndl-chart-legend-item-color': color,\n backgroundColor: deSelected === true ? 'transparent' : color,\n } as React.CSSProperties\n }\n >\n {selected === true && (\n <CheckIconOutline className=\"ndl-chart-legend-item-square-checkmark\" />\n )}\n </span>\n <Typography variant=\"body-medium\" className=\"ndl-chart-legend-item-text\">\n {children}\n </Typography>\n </Component>\n );\n};\n\nconst getAllSeriesSelected = (series: LegendProps['series']) =>\n Object.fromEntries(series.map((s) => [s.name ?? '', true]));\n\nconst hasSelectionForCurrentSeries = (\n selection: Record<string, boolean>,\n series: LegendProps['series'],\n) => {\n const selectedNames = Object.keys(selection);\n\n return (\n selectedNames.length === series.length &&\n series.every((s) =>\n Object.prototype.hasOwnProperty.call(selection, s.name ?? ''),\n )\n );\n};\n\n/**\n * Keeps legend rendering in sync with the current ECharts series names.\n *\n * ECharts can briefly keep selection state for the previous pie categories\n * after the dataset changes. Rendering with that stale state makes every new\n * category look deselected for one frame, so we render new series as visible\n * until the effect below reconciles the persisted selection state.\n */\nconst useLegendSelectionForCurrentSeries = (series: LegendProps['series']) => {\n const initialSelected = useMemo(() => getAllSeriesSelected(series), [series]);\n const [selectedSeries, setSelectedSeries] =\n useState<Record<string, boolean>>(initialSelected);\n\n const renderedSelectedSeries = hasSelectionForCurrentSeries(\n selectedSeries,\n series,\n )\n ? selectedSeries\n : initialSelected;\n\n return { renderedSelectedSeries, selectedSeries, setSelectedSeries };\n};\n\nexport const Legend = function LegendComponent({\n className,\n wrappingType = 'wrapping',\n series,\n chartRef,\n selectedRef,\n ref,\n htmlAttributes,\n ...restProps\n}: CommonProps<'div', LegendProps>) {\n const { renderedSelectedSeries, selectedSeries, setSelectedSeries } =\n useLegendSelectionForCurrentSeries(series);\n\n // Keep the shared ref in sync so Chart can read the latest selection state\n // when building setOption. This is the single source of truth for legend filters.\n useEffect(() => {\n if (selectedRef) {\n selectedRef.current = selectedSeries;\n }\n }, [selectedRef, selectedSeries]);\n\n const highlightTimeOut = useRef<ReturnType<typeof setTimeout> | null>(null);\n const downplayTimeOut = useRef<ReturnType<typeof setTimeout> | null>(null);\n const hoverTimeOut = 80;\n\n const highlightSeries = (\n seriesToUpdate: { name: string; color: string }[],\n ) => {\n // Clear the downplay timeout when a new item is hovered\n if (downplayTimeOut.current) {\n clearTimeout(downplayTimeOut.current);\n }\n\n // Delay the highlight to avoid flickering when quickly hovering the legend items\n highlightTimeOut.current = setTimeout(() => {\n highlightOrDownplaySeries(\n chartRef,\n series,\n renderedSelectedSeries,\n seriesToUpdate,\n 'highlight',\n );\n }, hoverTimeOut);\n };\n\n const downplaySeries = (\n seriesToUpdate: { name: string; color: string }[],\n ) => {\n // Clear the highlight timeout when the mouse is leaving the legend item\n if (highlightTimeOut.current) {\n clearTimeout(highlightTimeOut.current);\n }\n\n // Delay the downplay to avoid flickering when moving the highlight between legend items (no downplay needed in between)\n downplayTimeOut.current = setTimeout(() => {\n highlightOrDownplaySeries(\n chartRef,\n series,\n renderedSelectedSeries,\n seriesToUpdate,\n 'downplay',\n );\n }, hoverTimeOut);\n };\n\n useEffect(() => {\n // Preserve existing legend selection state across re-renders.\n // Only new series default to visible (true); removed series are dropped.\n const prev = selectedRef?.current ?? {};\n const next: Record<string, boolean> = {};\n for (const s of series) {\n const name = s.name ?? '';\n next[name] = prev[name] ?? true;\n }\n setSelectedSeries(next);\n\n if (chartRef.current === null) {\n return;\n }\n const chart = getInstanceByDom(chartRef.current);\n\n const eventTypes = [\n 'legendselectchanged',\n 'legendselectall',\n 'legendselected',\n 'legendunselected',\n ] as const;\n\n eventTypes.forEach((eventType) => {\n chart?.on(eventType, (params) => {\n if (\n typeof params === 'object' &&\n params !== null &&\n 'selected' in params &&\n params.selected !== null\n ) {\n const selected = params.selected ?? {};\n const filteredSelected = Object.fromEntries(\n Object.entries(selected).filter(\n ([key]) => !(isThresholdLine(key) ?? false),\n ),\n );\n\n // Reset the series highlight to avoid series to stay blurred on selection change\n if (eventType === 'legendselectchanged') {\n resetAllSeriesHighlight(chart as EChartsType);\n }\n\n setSelectedSeries(filteredSelected);\n }\n });\n });\n\n return () => {\n eventTypes.forEach((eventType) => {\n chart?.off(eventType);\n });\n };\n }, [chartRef, selectedRef, series, setSelectedSeries]);\n\n const classes = classNames(\n `ndl-chart-legend`,\n {\n 'ndl-chart-legend-truncation': wrappingType === 'truncation',\n 'ndl-chart-legend-wrapping': wrappingType === 'wrapping',\n },\n className,\n );\n\n const { toggleLegendVisibility, setAllVisible } = useLegendVisibility(\n chartRef,\n renderedSelectedSeries,\n );\n\n return (\n <div\n ref={ref}\n className=\"ndl-chart-legend-container\"\n {...restProps}\n {...htmlAttributes}\n >\n {wrappingType === 'truncation' || wrappingType === 'wrapping' ? (\n <div className={classes}>\n {series.map((currentSeries, index) => {\n const hasMoreThanOneItem = series.length > 1;\n\n const selectedSeriesLength = Object.values(\n renderedSelectedSeries,\n ).filter(Boolean).length;\n\n const isAllSeriesVisible = selectedSeriesLength === series.length;\n\n const color = currentSeries.color;\n\n const isDeselected =\n currentSeries.name === undefined\n ? false\n : !renderedSelectedSeries[currentSeries.name];\n\n return (\n <ConditionalWrap\n key={index}\n shouldWrap={wrappingType === 'truncation'}\n wrap={(children) => (\n <Tooltip type=\"simple\" key={index}>\n <Tooltip.Trigger hasButtonWrapper>\n {children}\n </Tooltip.Trigger>\n </Tooltip>\n )}\n >\n <LegendItem\n name={currentSeries.name}\n color={color}\n hasButtons={\n hasMoreThanOneItem && currentSeries.name !== undefined\n }\n onLegendItemMouseEnter={() => {\n if (!isDeselected) {\n highlightSeries([currentSeries]);\n }\n }}\n onLegendItemMouseLeave={() => {\n if (!isDeselected) {\n downplaySeries([currentSeries]);\n }\n }}\n onLegendItemClick={() => {\n const isAllSeriesSelected =\n selectedSeriesLength === series.length;\n\n const isOnlyVisible =\n renderedSelectedSeries[currentSeries.name ?? ''] &&\n selectedSeriesLength === 1;\n\n toggleLegendVisibility(\n currentSeries.name,\n isAllSeriesSelected,\n isOnlyVisible,\n );\n }}\n selected={\n !isAllSeriesVisible &&\n renderedSelectedSeries[currentSeries.name ?? '']\n }\n deSelected={isDeselected}\n >\n {currentSeries.name ?? `Series ${index}`}\n </LegendItem>\n </ConditionalWrap>\n );\n })}\n </div>\n ) : (\n <LegendOverflowType\n className={classes}\n selectedSeries={renderedSelectedSeries}\n wrappingType={wrappingType}\n chartRef={chartRef}\n series={series}\n onSetAllVisible={setAllVisible}\n onLegendItemMouseEnter={(seriesToUpdate) =>\n highlightSeries(seriesToUpdate)\n }\n onLegendItemMouseLeave={(seriesToUpdate) =>\n downplaySeries(seriesToUpdate)\n }\n onToggleLegendVisibility={(\n name,\n isAllSeriesSelected,\n isOnlyVisible,\n ) => {\n toggleLegendVisibility(name, isAllSeriesSelected, isOnlyVisible);\n }}\n />\n )}\n </div>\n );\n};\n\nconst LegendOverflowType = function LegendOverflow({\n className,\n series,\n onSetAllVisible,\n onToggleLegendVisibility,\n selectedSeries,\n onLegendItemMouseEnter,\n onLegendItemMouseLeave,\n}: LegendOverflowProps) {\n const containerRef = useRef<HTMLDivElement>(null);\n\n const [nonOverflowItemsNames, setNonOverflowItemsNames] = useState<string[]>(\n series.map((s) => s.name),\n );\n\n useEffect(() => {\n setNonOverflowItemsNames(series.map((s) => s.name));\n }, [series]);\n\n const overflowItemsNames = series.filter(\n (item) => !nonOverflowItemsNames.includes(item.name),\n );\n\n const [width, setWidth] = useState(Infinity);\n useResizeObserver({\n // TODO: remove type cast. use-hooks.ts 3.1.1 has a type issue with the ref, it should be HTMLElement | null\n // https://github.com/juliencrn/usehooks-ts/pull/680\n onResize: (entry) => {\n if (entry.width === undefined) {\n return;\n }\n if (width < entry.width) {\n setNonOverflowItemsNames(series.map((s) => s.name));\n }\n setWidth(entry.width);\n },\n ref: containerRef as React.RefObject<HTMLElement>,\n });\n\n useEffect(() => {\n const container = containerRef.current;\n if (!container) {\n return;\n }\n\n let elements = Array.from(container.children);\n if (elements.length === 0 || series.length === 0) {\n return;\n }\n\n let totalWidth = 0;\n\n if (overflowItemsNames.length > 0) {\n const lastElementItem = elements[elements.length - 1];\n const lastItemWidth = getComputedElementWidth(lastElementItem);\n\n elements = elements.slice(0, elements.length - 1);\n totalWidth += lastItemWidth;\n }\n\n elements.forEach((element) => {\n const elementWidth = getComputedElementWidth(element);\n totalWidth += elementWidth;\n const textContent = element.textContent;\n if (!textContent) {\n return;\n }\n const itemName = element.getAttribute('data-labelname');\n if (itemName === null) {\n return;\n }\n if (totalWidth > width) {\n setNonOverflowItemsNames((oldNames) =>\n oldNames.filter((name) => name !== itemName),\n );\n }\n });\n }, [overflowItemsNames.length, series.length, width]);\n\n const classes = classNames(\n {\n 'ndl-chart-legend-calculating': width === Infinity,\n },\n className,\n );\n\n const selectedSeriesLength =\n Object.values(selectedSeries).filter(Boolean).length;\n\n const hasMoreThanOneItem = nonOverflowItemsNames.length > 1;\n const isAllSeriesVisible = selectedSeriesLength === series.length;\n\n const isOverflowItemsDeselected = overflowItemsNames.every(\n (item) => !selectedSeries[item.name ?? ''],\n );\n\n return (\n <div className={classes} ref={containerRef}>\n {nonOverflowItemsNames.map((name) => {\n const currentSeries = series.find((s) => s.name === name);\n if (currentSeries === undefined) {\n return null;\n }\n\n const isDeselected =\n currentSeries.name === undefined\n ? false\n : !selectedSeries[currentSeries.name];\n\n return (\n <LegendItem\n key={name}\n name={name}\n color={currentSeries.color}\n onLegendItemMouseEnter={() =>\n !isDeselected && onLegendItemMouseEnter([currentSeries])\n }\n onLegendItemMouseLeave={() =>\n !isDeselected && onLegendItemMouseLeave([currentSeries])\n }\n onLegendItemClick={() => {\n const isAllSeriesSelected =\n selectedSeriesLength === series.length;\n\n const isOnlyVisible =\n selectedSeries[name ?? ''] && selectedSeriesLength === 1;\n\n onToggleLegendVisibility?.(\n name,\n isAllSeriesSelected,\n isOnlyVisible,\n series,\n );\n }}\n hasButtons={hasMoreThanOneItem}\n selected={\n !isAllSeriesVisible && selectedSeries[currentSeries.name ?? '']\n }\n deSelected={isDeselected}\n >\n {name}\n </LegendItem>\n );\n })}\n\n {overflowItemsNames.length > 0 && (\n <Tooltip type=\"simple\">\n <Tooltip.Trigger hasButtonWrapper>\n <LegendItem\n name=\"ndl-overflow-items\"\n color={tokens.palette.neutral[30]}\n selected={\n !isAllSeriesVisible &&\n overflowItemsNames.every(\n (item) => selectedSeries[item.name ?? ''],\n )\n }\n deSelected={isOverflowItemsDeselected}\n onLegendItemMouseEnter={() =>\n !isOverflowItemsDeselected &&\n onLegendItemMouseEnter(overflowItemsNames)\n }\n onLegendItemMouseLeave={() =>\n !isOverflowItemsDeselected &&\n onLegendItemMouseLeave(overflowItemsNames)\n }\n onLegendItemClick={() => {\n const selectedSeriesLength =\n Object.values(selectedSeries).filter(Boolean).length;\n\n const isOnlyOverflowItemsVisible =\n selectedSeriesLength === overflowItemsNames.length &&\n overflowItemsNames.every(\n (item) => selectedSeries[item.name ?? ''],\n );\n\n if (isOnlyOverflowItemsVisible) {\n onSetAllVisible();\n return;\n }\n\n overflowItemsNames.forEach((item, index) => {\n const isAllSeriesSelected =\n selectedSeriesLength === series.length && index === 0;\n\n onToggleLegendVisibility?.(\n item.name,\n isAllSeriesSelected,\n false,\n series,\n );\n });\n }}\n >\n {overflowItemsNames.length} more\n </LegendItem>\n </Tooltip.Trigger>\n <Tooltip.Content>\n {overflowItemsNames.map((item) => (\n <p key={item.name}>{item.name}</p>\n ))}\n </Tooltip.Content>\n </Tooltip>\n )}\n </div>\n );\n};\n"]}
@@ -39,10 +39,10 @@ import { ChartWrapperWithTooltipFormatter } from './ChartWrapperWithTooltipForma
39
39
  * @returns color in rgb format rgb(_, _, _)
40
40
  */
41
41
  const convertHexToRGB = (hex) => {
42
- hex = hex.replace(/^#/, '');
43
- const red = parseInt(hex.substring(0, 2), 16);
44
- const green = parseInt(hex.substring(2, 4), 16);
45
- const blue = parseInt(hex.substring(4, 6), 16);
42
+ const normalizedHex = hex.replace(/^#/, '');
43
+ const red = parseInt(normalizedHex.substring(0, 2), 16);
44
+ const green = parseInt(normalizedHex.substring(2, 4), 16);
45
+ const blue = parseInt(normalizedHex.substring(4, 6), 16);
46
46
  return `rgb(${red}, ${green}, ${blue})`;
47
47
  };
48
48
  export const chartColorsAfterHighlighting = {
@@ -172,6 +172,7 @@ export const multiSeriesChartProps = {
172
172
  export const multiSeriesChart = ({ chartProps, width = '100%', height = '400px', }) => (_jsx("div", { style: { height, width }, className: "ndl-chart", children: _jsx(Chart, Object.assign({}, multiSeriesChartProps, chartProps)) }));
173
173
  export const pieChartWithTooltipFormatter = ({ seriesName, value, rgbSeriesColor, chartProps, width = '100%', height = '400px', }) => (_jsx("div", { style: { height, width }, children: _jsx(ChartWrapperWithTooltipFormatter, Object.assign({}, pieChartProps(seriesName, value, rgbSeriesColor), chartProps)) }));
174
174
  export const barChartWithTooltipFormatter = ({ seriesName, value, rgbSeriesColor, chartProps, width = '100%', height = '400px', }) => (_jsx("div", { style: { height, width }, children: _jsx(ChartWrapperWithTooltipFormatter, Object.assign({}, barChartProps(seriesName, value, rgbSeriesColor), chartProps)) }));
175
+ export const barChart = ({ seriesName, value, rgbSeriesColor, chartProps, width = '100%', height = '400px', }) => (_jsx("div", { style: { height, width }, children: _jsx(Chart, Object.assign({}, barChartProps(seriesName, value, rgbSeriesColor), chartProps)) }));
175
176
  export const expectChartElementVisible = (page) => __awaiter(void 0, void 0, void 0, function* () {
176
177
  yield expect(page.locator('svg')).toBeVisible();
177
178
  yield expect(page.locator('.ndl-chart-legend')).toBeVisible();
@@ -250,41 +251,24 @@ export const expectLegendSeriesToBeHighlightedInChart = (page, seriesNamesToBeHi
250
251
  }
251
252
  });
252
253
  /**
253
- * Identifies if the series are visible / not visible in the chart by checking for a path with the series color (lacks other unique identifiers)
254
- * Apache Echarts displays the path color in both hex, rgb and a slightly adjusted rgb when highlighted, therefor we need to check for all three when looking for the series in the chart.
254
+ * Identifies if the series are visible / not visible in the chart by checking
255
+ * component-owned legend state. ECharts rewrites generated SVG paths during
256
+ * legend updates, which makes exact path color selectors flaky in Firefox.
255
257
  */
256
258
  export const expectLegendSeriesToBeVisibleInChart = (page, seriesNamesToBeVisible) => __awaiter(void 0, void 0, void 0, function* () {
257
- const allChartSeries = multiSeriesChartProps.series;
258
- // Check so that the series that should be visible are present in the chart
259
+ yield expect(page.locator('svg path').first()).toBeAttached();
259
260
  for (const name of seriesNamesToBeVisible) {
260
- const visibleSeriesIndex = allChartSeries.findIndex((series) => series.name === name) + 1;
261
- const rgbSeriesColor = chartColorsAfterHighlighting[visibleSeriesIndex];
262
- const hexSeriesColor = getGraphPaletteColorFromSeriesIndex(visibleSeriesIndex.toString());
263
- const rgbWithSpaces = rgbSeriesColor.replace(/,/g, ', ');
264
- const hexRgb = convertHexToRGB(hexSeriesColor);
265
- const rgbWithoutSpaces = hexRgb.replace(/, /g, ',');
266
- yield expect(page
267
- .locator(`path[stroke="${rgbSeriesColor}"]`)
268
- .or(page.locator(`path[stroke="${rgbWithSpaces}"]`))
269
- .or(page.locator(`path[stroke="${hexSeriesColor}"]`))
270
- .or(page.locator(`path[stroke="${convertHexToRGB(hexSeriesColor)}"]`))
271
- .or(page.locator(`path[stroke="${rgbWithoutSpaces}"]`))).toBeVisible({ timeout: 10000 });
261
+ const visibleLegendItem = page.locator(`[data-labelname="${name}"]`);
262
+ if ((yield visibleLegendItem.count()) > 0) {
263
+ yield expect(visibleLegendItem).not.toHaveClass(/ndl-chart-legend-item-deselected/);
264
+ }
272
265
  }
273
- // Check so that the other series are not present in the chart
274
266
  const hiddenSeries = multiSeriesChartProps.series.filter((series) => !seriesNamesToBeVisible.includes(series.name));
275
267
  for (const hiddenSeriesItem of hiddenSeries) {
276
- const hiddenSeriesIndex = allChartSeries.findIndex((allChartSeriesItem) => hiddenSeriesItem.name === allChartSeriesItem.name) + 1;
277
- const rgbSeriesColor = chartColorsAfterHighlighting[hiddenSeriesIndex];
278
- const hexSeriesColor = getGraphPaletteColorFromSeriesIndex(hiddenSeriesIndex.toString());
279
- const rgbWithSpaces = rgbSeriesColor.replace(/,/g, ', ');
280
- const hexRgb = convertHexToRGB(hexSeriesColor);
281
- const rgbWithoutSpaces = hexRgb.replace(/, /g, ',');
282
- yield expect(page
283
- .locator(`path[stroke="${rgbSeriesColor}"]`)
284
- .or(page.locator(`path[stroke="${rgbWithSpaces}"]`))
285
- .or(page.locator(`path[stroke="${hexSeriesColor}"]`))
286
- .or(page.locator(`path[stroke="${convertHexToRGB(hexSeriesColor)}"]`))
287
- .or(page.locator(`path[stroke="${rgbWithoutSpaces}"]`))).not.toBeVisible();
268
+ const hiddenLegendItem = page.locator(SELECTORS.seriesDeselected(hiddenSeriesItem.name));
269
+ if ((yield hiddenLegendItem.count()) > 0) {
270
+ yield expect(hiddenLegendItem).toBeVisible();
271
+ }
288
272
  }
289
273
  });
290
274
  // Check so legends are selected -> has checkmark and no strike-through classes
@@ -326,6 +310,17 @@ export const expectFormattedTooltipToBeVisible = (page, seriesName, value, rgbSe
326
310
  const tooltip = page.getByText(`${seriesName}formatted ${value}`);
327
311
  yield expect(tooltip).toBeVisible();
328
312
  });
313
+ export const expectDefaultFormattedTooltipToBeVisible = (page, seriesName, value, rgbSeriesColor) => __awaiter(void 0, void 0, void 0, function* () {
314
+ const rgbWithSpaces = rgbSeriesColor.replace(/,/g, ', ');
315
+ const chartElement = page
316
+ .locator(`path[fill="${rgbSeriesColor}"]`)
317
+ .or(page.locator(`path[fill="${rgbWithSpaces}"]`));
318
+ yield expect(chartElement).toBeVisible();
319
+ yield chartElement.hover();
320
+ const tooltip = page.locator('.ndl-charts-chart-tooltip');
321
+ yield expect(tooltip).toContainText(seriesName);
322
+ yield expect(tooltip).toContainText(new Intl.NumberFormat('en-US').format(value));
323
+ });
329
324
  export const waitForAnimationEnd = (page, selector) => {
330
325
  return page
331
326
  .locator(selector)