@neo4j-ndl/react-charts 1.1.1 → 1.1.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/Chart.js +56 -462
- package/lib/cjs/charts/Chart.js.map +1 -1
- package/lib/cjs/charts/ChartContainer.js +71 -0
- package/lib/cjs/charts/ChartContainer.js.map +1 -0
- package/lib/cjs/charts/ChartEmpty.js.map +1 -1
- package/lib/cjs/charts/ChartRender.js +97 -0
- package/lib/cjs/charts/ChartRender.js.map +1 -0
- package/lib/cjs/charts/ChartTooltip.js.map +1 -1
- package/lib/cjs/charts/Legend.js +32 -246
- package/lib/cjs/charts/Legend.js.map +1 -1
- package/lib/cjs/charts/LegendItem.js +68 -0
- package/lib/cjs/charts/LegendItem.js.map +1 -0
- package/lib/cjs/charts/LegendLayout.js +363 -0
- package/lib/cjs/charts/LegendLayout.js.map +1 -0
- package/lib/cjs/charts/hooks/use-chart-instance.js +133 -0
- package/lib/cjs/charts/hooks/use-chart-instance.js.map +1 -0
- package/lib/cjs/charts/hooks/use-chart-option.js +79 -0
- package/lib/cjs/charts/hooks/use-chart-option.js.map +1 -0
- package/lib/cjs/charts/hooks/use-chart-refs.js +52 -0
- package/lib/cjs/charts/hooks/use-chart-refs.js.map +1 -0
- package/lib/cjs/charts/hooks/use-chart-zoom.js +117 -0
- package/lib/cjs/charts/hooks/use-chart-zoom.js.map +1 -0
- package/lib/cjs/charts/hooks/use-legend-interactions.js +149 -0
- package/lib/cjs/charts/hooks/use-legend-interactions.js.map +1 -0
- package/lib/cjs/charts/hooks/use-legend-series.js +181 -0
- package/lib/cjs/charts/hooks/use-legend-series.js.map +1 -0
- package/lib/cjs/charts/hooks/use-legend-visibility.js +91 -0
- package/lib/cjs/charts/hooks/use-legend-visibility.js.map +1 -0
- package/lib/cjs/charts/index.js +1 -1
- package/lib/cjs/charts/index.js.map +1 -1
- package/lib/cjs/charts/tests/chart-test-utils.js +56 -9
- package/lib/cjs/charts/tests/chart-test-utils.js.map +1 -1
- package/lib/cjs/charts/themes/ndl-echarts-theme.js.map +1 -1
- package/lib/cjs/charts/{aria-description.js → utils/aria-description.js} +4 -45
- package/lib/cjs/charts/utils/aria-description.js.map +1 -0
- package/lib/cjs/charts/utils/build-chart-option.js +74 -0
- package/lib/cjs/charts/utils/build-chart-option.js.map +1 -0
- package/lib/cjs/charts/utils/chart-tooltip-formatter.js +86 -0
- package/lib/cjs/charts/utils/chart-tooltip-formatter.js.map +1 -0
- package/lib/cjs/charts/utils/chart-types.js.map +1 -0
- package/lib/cjs/charts/utils/defaults.js.map +1 -0
- package/lib/cjs/charts/{utils.js → utils/format-utils.js} +3 -19
- package/lib/cjs/charts/utils/format-utils.js.map +1 -0
- package/lib/cjs/charts/utils/legend-layout.js +65 -0
- package/lib/cjs/charts/utils/legend-layout.js.map +1 -0
- package/lib/cjs/charts/{legend-utils.js → utils/legend-utils.js} +1 -78
- package/lib/cjs/charts/utils/legend-utils.js.map +1 -0
- package/lib/cjs/charts/utils/threshold.js +114 -0
- package/lib/cjs/charts/utils/threshold.js.map +1 -0
- package/lib/cjs/charts/{user-option-utils.js → utils/user-option-utils.js} +7 -16
- package/lib/cjs/charts/utils/user-option-utils.js.map +1 -0
- package/lib/esm/charts/Chart.js +50 -457
- package/lib/esm/charts/Chart.js.map +1 -1
- package/lib/esm/charts/ChartContainer.js +67 -0
- package/lib/esm/charts/ChartContainer.js.map +1 -0
- package/lib/esm/charts/ChartEmpty.js.map +1 -1
- package/lib/esm/charts/ChartRender.js +93 -0
- package/lib/esm/charts/ChartRender.js.map +1 -0
- package/lib/esm/charts/ChartTooltip.js.map +1 -1
- package/lib/esm/charts/Legend.js +32 -243
- package/lib/esm/charts/Legend.js.map +1 -1
- package/lib/esm/charts/LegendItem.js +61 -0
- package/lib/esm/charts/LegendItem.js.map +1 -0
- package/lib/esm/charts/LegendLayout.js +323 -0
- package/lib/esm/charts/LegendLayout.js.map +1 -0
- package/lib/esm/charts/hooks/use-chart-instance.js +128 -0
- package/lib/esm/charts/hooks/use-chart-instance.js.map +1 -0
- package/lib/esm/charts/hooks/use-chart-option.js +76 -0
- package/lib/esm/charts/hooks/use-chart-option.js.map +1 -0
- package/lib/esm/charts/hooks/use-chart-refs.js +48 -0
- package/lib/esm/charts/hooks/use-chart-refs.js.map +1 -0
- package/lib/esm/charts/hooks/use-chart-zoom.js +114 -0
- package/lib/esm/charts/hooks/use-chart-zoom.js.map +1 -0
- package/lib/esm/charts/hooks/use-legend-interactions.js +145 -0
- package/lib/esm/charts/hooks/use-legend-interactions.js.map +1 -0
- package/lib/esm/charts/hooks/use-legend-series.js +178 -0
- package/lib/esm/charts/hooks/use-legend-series.js.map +1 -0
- package/lib/esm/charts/hooks/use-legend-visibility.js +87 -0
- package/lib/esm/charts/hooks/use-legend-visibility.js.map +1 -0
- package/lib/esm/charts/index.js +1 -1
- package/lib/esm/charts/index.js.map +1 -1
- package/lib/esm/charts/tests/chart-test-utils.js +53 -8
- package/lib/esm/charts/tests/chart-test-utils.js.map +1 -1
- package/lib/esm/charts/themes/ndl-echarts-theme.js.map +1 -1
- package/lib/esm/charts/{aria-description.js → utils/aria-description.js} +4 -45
- package/lib/esm/charts/utils/aria-description.js.map +1 -0
- package/lib/esm/charts/utils/build-chart-option.js +69 -0
- package/lib/esm/charts/utils/build-chart-option.js.map +1 -0
- package/lib/esm/charts/utils/chart-tooltip-formatter.js +82 -0
- package/lib/esm/charts/utils/chart-tooltip-formatter.js.map +1 -0
- package/lib/esm/charts/utils/chart-types.js.map +1 -0
- package/lib/esm/charts/utils/defaults.js.map +1 -0
- package/lib/esm/charts/{utils.js → utils/format-utils.js} +2 -17
- package/lib/esm/charts/utils/format-utils.js.map +1 -0
- package/lib/esm/charts/utils/legend-layout.js +59 -0
- package/lib/esm/charts/utils/legend-layout.js.map +1 -0
- package/lib/esm/charts/{legend-utils.js → utils/legend-utils.js} +1 -75
- package/lib/esm/charts/utils/legend-utils.js.map +1 -0
- package/lib/esm/charts/utils/threshold.js +106 -0
- package/lib/esm/charts/utils/threshold.js.map +1 -0
- package/lib/esm/charts/{user-option-utils.js → utils/user-option-utils.js} +5 -14
- package/lib/esm/charts/utils/user-option-utils.js.map +1 -0
- package/lib/types/charts/Chart.d.ts +2 -2
- package/lib/types/charts/Chart.d.ts.map +1 -1
- package/lib/{esm/charts/types.js → types/charts/ChartContainer.d.ts} +14 -1
- package/lib/types/charts/ChartContainer.d.ts.map +1 -0
- package/lib/types/charts/ChartEmpty.d.ts +1 -1
- package/lib/types/charts/ChartEmpty.d.ts.map +1 -1
- package/lib/types/charts/ChartRender.d.ts +36 -0
- package/lib/types/charts/ChartRender.d.ts.map +1 -0
- package/lib/types/charts/ChartTooltip.d.ts +1 -1
- package/lib/types/charts/ChartTooltip.d.ts.map +1 -1
- package/lib/types/charts/Legend.d.ts +15 -3
- package/lib/types/charts/Legend.d.ts.map +1 -1
- package/lib/{cjs/charts/types.js → types/charts/LegendItem.d.ts} +10 -3
- package/lib/types/charts/LegendItem.d.ts.map +1 -0
- package/lib/types/charts/LegendLayout.d.ts +38 -0
- package/lib/types/charts/LegendLayout.d.ts.map +1 -0
- package/lib/types/charts/hooks/use-chart-instance.d.ts +62 -0
- package/lib/types/charts/hooks/use-chart-instance.d.ts.map +1 -0
- package/lib/types/charts/hooks/use-chart-option.d.ts +48 -0
- package/lib/types/charts/hooks/use-chart-option.d.ts.map +1 -0
- package/lib/types/charts/hooks/use-chart-refs.d.ts +38 -0
- package/lib/types/charts/hooks/use-chart-refs.d.ts.map +1 -0
- package/lib/types/charts/hooks/use-chart-zoom.d.ts +36 -0
- package/lib/types/charts/hooks/use-chart-zoom.d.ts.map +1 -0
- package/lib/types/charts/hooks/use-legend-interactions.d.ts +56 -0
- package/lib/types/charts/hooks/use-legend-interactions.d.ts.map +1 -0
- package/lib/types/charts/hooks/use-legend-series.d.ts +42 -0
- package/lib/types/charts/hooks/use-legend-series.d.ts.map +1 -0
- package/lib/types/charts/hooks/use-legend-visibility.d.ts +24 -0
- package/lib/types/charts/hooks/use-legend-visibility.d.ts.map +1 -0
- package/lib/types/charts/index.d.ts +2 -2
- package/lib/types/charts/index.d.ts.map +1 -1
- package/lib/types/charts/tests/chart-test-utils.d.ts +7 -1
- package/lib/types/charts/tests/chart-test-utils.d.ts.map +1 -1
- package/lib/types/charts/themes/ndl-echarts-theme.d.ts +1 -1
- package/lib/types/charts/themes/ndl-echarts-theme.d.ts.map +1 -1
- package/lib/types/charts/utils/aria-description.d.ts.map +1 -0
- package/lib/types/charts/utils/build-chart-option.d.ts +52 -0
- package/lib/types/charts/utils/build-chart-option.d.ts.map +1 -0
- package/lib/types/charts/utils/chart-tooltip-formatter.d.ts +37 -0
- package/lib/types/charts/utils/chart-tooltip-formatter.d.ts.map +1 -0
- package/lib/types/charts/{chart-types.d.ts → utils/chart-types.d.ts} +23 -22
- package/lib/types/charts/utils/chart-types.d.ts.map +1 -0
- package/lib/types/charts/utils/defaults.d.ts.map +1 -0
- package/lib/types/charts/{utils.d.ts → utils/format-utils.d.ts} +2 -4
- package/lib/types/charts/utils/format-utils.d.ts.map +1 -0
- package/lib/types/charts/utils/legend-layout.d.ts +37 -0
- package/lib/types/charts/utils/legend-layout.d.ts.map +1 -0
- package/lib/types/charts/{legend-utils.d.ts → utils/legend-utils.d.ts} +1 -11
- package/lib/types/charts/utils/legend-utils.d.ts.map +1 -0
- package/lib/types/charts/utils/threshold.d.ts +45 -0
- package/lib/types/charts/utils/threshold.d.ts.map +1 -0
- package/lib/types/charts/utils/user-option-utils.d.ts.map +1 -0
- package/package.json +3 -3
- package/lib/cjs/charts/aria-description.js.map +0 -1
- package/lib/cjs/charts/chart-types.js.map +0 -1
- package/lib/cjs/charts/defaults.js.map +0 -1
- package/lib/cjs/charts/legend-utils.js.map +0 -1
- package/lib/cjs/charts/types.js.map +0 -1
- package/lib/cjs/charts/user-option-utils.js.map +0 -1
- package/lib/cjs/charts/utils.js.map +0 -1
- package/lib/esm/charts/aria-description.js.map +0 -1
- package/lib/esm/charts/chart-types.js.map +0 -1
- package/lib/esm/charts/defaults.js.map +0 -1
- package/lib/esm/charts/legend-utils.js.map +0 -1
- package/lib/esm/charts/types.js.map +0 -1
- package/lib/esm/charts/user-option-utils.js.map +0 -1
- package/lib/esm/charts/utils.js.map +0 -1
- package/lib/types/charts/aria-description.d.ts.map +0 -1
- package/lib/types/charts/chart-types.d.ts.map +0 -1
- package/lib/types/charts/defaults.d.ts.map +0 -1
- package/lib/types/charts/legend-utils.d.ts.map +0 -1
- package/lib/types/charts/types.d.ts +0 -44
- package/lib/types/charts/types.d.ts.map +0 -1
- package/lib/types/charts/user-option-utils.d.ts.map +0 -1
- package/lib/types/charts/utils.d.ts.map +0 -1
- /package/lib/cjs/charts/{chart-types.js → utils/chart-types.js} +0 -0
- /package/lib/cjs/charts/{defaults.js → utils/defaults.js} +0 -0
- /package/lib/esm/charts/{chart-types.js → utils/chart-types.js} +0 -0
- /package/lib/esm/charts/{defaults.js → utils/defaults.js} +0 -0
- /package/lib/types/charts/{aria-description.d.ts → utils/aria-description.d.ts} +0 -0
- /package/lib/types/charts/{defaults.d.ts → utils/defaults.d.ts} +0 -0
- /package/lib/types/charts/{user-option-utils.d.ts → utils/user-option-utils.d.ts} +0 -0
|
@@ -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 {\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"]}
|
|
1
|
+
{"version":3,"file":"Chart.js","sourceRoot":"","sources":["../../../src/charts/Chart.tsx"],"names":[],"mappings":";;;;;;;;;;;;AAsBA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEzD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAUlC;;;;;;;GAOG;AACH,MAAM,WAAW,GAAG,CAAC,EACnB,WAAW,EACX,aAAa,EACb,uBAAuB,EACvB,aAAa,GACI,EAAE,EAAE;IACrB,MAAM,YAAY,GAAG,eAAe,CAAC;QACnC,WAAW;QACX,uBAAuB;KACxB,CAAC,CAAC;IAEH,IAAI,uBAAuB,EAAE,CAAC;QAC5B,OAAO,CACL,6BACc,MAAM,EAClB,SAAS,EAAC,mEAAmE,GAC7E,CACH,CAAC;IACJ,CAAC;IAED,OAAO,CACL,KAAC,MAAM,IACL,MAAM,EAAE,YAAY,aAAZ,YAAY,cAAZ,YAAY,GAAI,EAAE,EAC1B,aAAa,EAAE,aAAa,EAC5B,aAAa,EAAE,aAAa,GAC5B,CACH,CAAC;AACJ,CAAC,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,EAA4C,EAAE,EAAE;QAAhD,EAAE,KAAK,EAAE,MAAM,OAA6B,EAAxB,UAAU,cAA9B,mBAAgC,CAAF;IAClD,MAAM,CAAC,uBAAuB,EAAE,0BAA0B,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC7E,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,EAAiB,CAAC;IAChE,MAAM,CAAC,mBAAmB,EAAE,sBAAsB,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,IAAI,CAAA,CAAC,CAAC;IAE9E,MAAM,uBAAuB,GAAG,WAAW,CAAC,GAAG,EAAE;QAC/C,sBAAsB,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,IAAI,CAAA,EAAE,CAAC;YAClB,sBAAsB,CAAC,IAAI,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC,EAAE,CAAC,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,IAAI,CAAC,CAAC,CAAC;IAEnB,MAAM,oBAAoB,GACxB,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,IAAI,KAAI,CAAC,mBAAmB;QAClC,CAAC,CAAC,0CAA0C;QAC5C,CAAC,CAAC,kBAAkB,CAAC;IAEzB,OAAO,CACL,KAAC,iBAAiB,cAChB,MAAC,cAAc,IAAC,KAAK,EAAE,KAAK,aAC1B,cAAK,SAAS,EAAE,oBAAoB,YAClC,KAAC,WAAW,oBACN,UAAU,IACd,mBAAmB,EAAE,cAAc,EACnC,mBAAmB,EAAE,0BAA0B,IAC/C,GACE,EACL,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,IAAI,KAAI,CACf,KAAC,WAAW,IACV,WAAW,EAAE,WAAW,EACxB,aAAa,EAAE,mBAAmB,EAClC,uBAAuB,EAAE,uBAAuB,EAChD,aAAa,EAAE,uBAAuB,GACtC,CACH,IACc,GACC,CACrB,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 type { EChartsOption } from 'echarts';\nimport { useCallback, useEffect, useState } from 'react';\n\nimport { ChartContainer } from './ChartContainer';\nimport { ChartRender } from './ChartRender';\nimport { ChartRefsProvider } from './hooks/use-chart-refs';\nimport { useLegendSeries } from './hooks/use-legend-series';\nimport { Legend } from './Legend';\nimport { type ChartProps } from './utils/chart-types';\n\ntype ChartLegendProps = {\n chartOption: EChartsOption | undefined;\n isLayoutReady: boolean;\n isWaitingForFirstResize: boolean;\n onLayoutReady?: () => void;\n};\n\n/**\n * Bridges the rendered ECharts option into the React legend.\n *\n * `useLegendSeries` reads the current chart option and ECharts color state to\n * derive the legend rows. Rendering is deferred until the chart has completed\n * its first resize so the legend does not measure against an uninitialized\n * chart instance.\n */\nconst ChartLegend = ({\n chartOption,\n isLayoutReady,\n isWaitingForFirstResize,\n onLayoutReady,\n}: ChartLegendProps) => {\n const legendSeries = useLegendSeries({\n chartOption,\n isWaitingForFirstResize,\n });\n\n if (isWaitingForFirstResize) {\n return (\n <div\n aria-hidden=\"true\"\n className=\"ndl-chart-legend-container ndl-chart-legend-container-placeholder\"\n />\n );\n }\n\n return (\n <Legend\n series={legendSeries ?? []}\n onLayoutReady={onLayoutReady}\n isLayoutReady={isLayoutReady}\n />\n );\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 const Chart = ({ style, legend, ...chartProps }: ChartProps) => {\n const [isWaitingForFirstResize, setIsWaitingForFirstResize] = useState(true);\n const [chartOption, setChartOption] = useState<EChartsOption>();\n const [isLegendLayoutReady, setIsLegendLayoutReady] = useState(!legend?.show);\n\n const handleLegendLayoutReady = useCallback(() => {\n setIsLegendLayoutReady(true);\n }, []);\n\n useEffect(() => {\n if (!legend?.show) {\n setIsLegendLayoutReady(true);\n }\n }, [legend?.show]);\n\n const chartLayoutClassName =\n legend?.show && !isLegendLayoutReady\n ? 'ndl-chart-layout ndl-chart-layout-hidden'\n : 'ndl-chart-layout';\n\n return (\n <ChartRefsProvider>\n <ChartContainer style={style}>\n <div className={chartLayoutClassName}>\n <ChartRender\n {...chartProps}\n onChartOptionChange={setChartOption}\n onFirstResizeChange={setIsWaitingForFirstResize}\n />\n </div>\n {legend?.show && (\n <ChartLegend\n chartOption={chartOption}\n isLayoutReady={isLegendLayoutReady}\n isWaitingForFirstResize={isWaitingForFirstResize}\n onLayoutReady={handleLegendLayoutReady}\n />\n )}\n </ChartContainer>\n </ChartRefsProvider>\n );\n};\n"]}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
*
|
|
3
|
+
* Copyright (c) "Neo4j"
|
|
4
|
+
* Neo4j Sweden AB [http://neo4j.com]
|
|
5
|
+
*
|
|
6
|
+
* This file is part of Neo4j.
|
|
7
|
+
*
|
|
8
|
+
* Neo4j is free software: you can redistribute it and/or modify
|
|
9
|
+
* it under the terms of the GNU General Public License as published by
|
|
10
|
+
* the Free Software Foundation, either version 3 of the License, or
|
|
11
|
+
* (at your option) any later version.
|
|
12
|
+
*
|
|
13
|
+
* This program is distributed in the hope that it will be useful,
|
|
14
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
15
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
16
|
+
* GNU General Public License for more details.
|
|
17
|
+
*
|
|
18
|
+
* You should have received a copy of the GNU General Public License
|
|
19
|
+
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
23
|
+
import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|
24
|
+
const EXPANDED_LEGEND_MAX_HEIGHT_RATIO = 0.3;
|
|
25
|
+
/**
|
|
26
|
+
* Tracks the outer chart container height.
|
|
27
|
+
*
|
|
28
|
+
* The measured height is used to expose CSS sizing data to descendants, most
|
|
29
|
+
* notably the expanded legend max height. A ResizeObserver keeps the value in
|
|
30
|
+
* sync with parent layout changes.
|
|
31
|
+
*/
|
|
32
|
+
const useChartContainerHeight = (chartRef) => {
|
|
33
|
+
const [chartContainerHeight, setChartContainerHeight] = useState();
|
|
34
|
+
const updateChartContainerHeight = useCallback(() => {
|
|
35
|
+
var _a;
|
|
36
|
+
setChartContainerHeight((_a = chartRef.current) === null || _a === void 0 ? void 0 : _a.clientHeight);
|
|
37
|
+
}, [chartRef]);
|
|
38
|
+
useEffect(() => {
|
|
39
|
+
updateChartContainerHeight();
|
|
40
|
+
const chartContainer = chartRef.current;
|
|
41
|
+
if (!chartContainer) {
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
const resizeObserver = new ResizeObserver(updateChartContainerHeight);
|
|
45
|
+
resizeObserver.observe(chartContainer);
|
|
46
|
+
return () => {
|
|
47
|
+
resizeObserver.disconnect();
|
|
48
|
+
};
|
|
49
|
+
}, [chartRef, updateChartContainerHeight]);
|
|
50
|
+
return chartContainerHeight;
|
|
51
|
+
};
|
|
52
|
+
/**
|
|
53
|
+
* Provides the chart grid shell and CSS variables shared by the ECharts canvas
|
|
54
|
+
* and legend rows.
|
|
55
|
+
*
|
|
56
|
+
* The container owns the measurement ref for the full chart area so the legend
|
|
57
|
+
* can cap expanded height relative to the available chart height.
|
|
58
|
+
*/
|
|
59
|
+
export const ChartContainer = ({ children, style }) => {
|
|
60
|
+
const chartRef = useRef(null);
|
|
61
|
+
const chartContainerHeight = useChartContainerHeight(chartRef);
|
|
62
|
+
const chartContainerStyle = useMemo(() => (Object.assign(Object.assign({}, style), { '--ndl-chart-legend-expanded-max-height': chartContainerHeight === undefined
|
|
63
|
+
? undefined
|
|
64
|
+
: `${Math.floor(chartContainerHeight * EXPANDED_LEGEND_MAX_HEIGHT_RATIO)}px` })), [chartContainerHeight, style]);
|
|
65
|
+
return (_jsx("div", { ref: chartRef, className: "ndl-chart", style: chartContainerStyle, children: children }));
|
|
66
|
+
};
|
|
67
|
+
//# sourceMappingURL=ChartContainer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChartContainer.js","sourceRoot":"","sources":["../../../src/charts/ChartContainer.tsx"],"names":[],"mappings":";AAsBA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAE1E,MAAM,gCAAgC,GAAG,GAAG,CAAC;AAE7C;;;;;;GAMG;AACH,MAAM,uBAAuB,GAAG,CAC9B,QAAgD,EAChD,EAAE;IACF,MAAM,CAAC,oBAAoB,EAAE,uBAAuB,CAAC,GAAG,QAAQ,EAAU,CAAC;IAE3E,MAAM,0BAA0B,GAAG,WAAW,CAAC,GAAG,EAAE;;QAClD,uBAAuB,CAAC,MAAA,QAAQ,CAAC,OAAO,0CAAE,YAAY,CAAC,CAAC;IAC1D,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEf,SAAS,CAAC,GAAG,EAAE;QACb,0BAA0B,EAAE,CAAC;QAE7B,MAAM,cAAc,GAAG,QAAQ,CAAC,OAAO,CAAC;QACxC,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,OAAO;QACT,CAAC;QAED,MAAM,cAAc,GAAG,IAAI,cAAc,CAAC,0BAA0B,CAAC,CAAC;QACtE,cAAc,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QAEvC,OAAO,GAAG,EAAE;YACV,cAAc,CAAC,UAAU,EAAE,CAAC;QAC9B,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,QAAQ,EAAE,0BAA0B,CAAC,CAAC,CAAC;IAE3C,OAAO,oBAAoB,CAAC;AAC9B,CAAC,CAAC;AAOF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAuB,EAAE,EAAE;IACzE,MAAM,QAAQ,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IAC9C,MAAM,oBAAoB,GAAG,uBAAuB,CAAC,QAAQ,CAAC,CAAC;IAC/D,MAAM,mBAAmB,GAAG,OAAO,CACjC,GAAG,EAAE,CACH,iCACK,KAAK,KACR,wCAAwC,EACtC,oBAAoB,KAAK,SAAS;YAChC,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CACX,oBAAoB,GAAG,gCAAgC,CACxD,IAAI,IACY,EAC3B,CAAC,oBAAoB,EAAE,KAAK,CAAC,CAC9B,CAAC;IAEF,OAAO,CACL,cAAK,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAC,WAAW,EAAC,KAAK,EAAE,mBAAmB,YACjE,QAAQ,GACL,CACP,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 type React from 'react';\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nconst EXPANDED_LEGEND_MAX_HEIGHT_RATIO = 0.3;\n\n/**\n * Tracks the outer chart container height.\n *\n * The measured height is used to expose CSS sizing data to descendants, most\n * notably the expanded legend max height. A ResizeObserver keeps the value in\n * sync with parent layout changes.\n */\nconst useChartContainerHeight = (\n chartRef: React.RefObject<HTMLDivElement | null>,\n) => {\n const [chartContainerHeight, setChartContainerHeight] = useState<number>();\n\n const updateChartContainerHeight = useCallback(() => {\n setChartContainerHeight(chartRef.current?.clientHeight);\n }, [chartRef]);\n\n useEffect(() => {\n updateChartContainerHeight();\n\n const chartContainer = chartRef.current;\n if (!chartContainer) {\n return;\n }\n\n const resizeObserver = new ResizeObserver(updateChartContainerHeight);\n resizeObserver.observe(chartContainer);\n\n return () => {\n resizeObserver.disconnect();\n };\n }, [chartRef, updateChartContainerHeight]);\n\n return chartContainerHeight;\n};\n\ntype ChartContainerProps = {\n children: React.ReactNode;\n style?: React.CSSProperties;\n};\n\n/**\n * Provides the chart grid shell and CSS variables shared by the ECharts canvas\n * and legend rows.\n *\n * The container owns the measurement ref for the full chart area so the legend\n * can cap expanded height relative to the available chart height.\n */\nexport const ChartContainer = ({ children, style }: ChartContainerProps) => {\n const chartRef = useRef<HTMLDivElement>(null);\n const chartContainerHeight = useChartContainerHeight(chartRef);\n const chartContainerStyle = useMemo(\n () =>\n ({\n ...style,\n '--ndl-chart-legend-expanded-max-height':\n chartContainerHeight === undefined\n ? undefined\n : `${Math.floor(\n chartContainerHeight * EXPANDED_LEGEND_MAX_HEIGHT_RATIO,\n )}px`,\n }) as React.CSSProperties,\n [chartContainerHeight, style],\n );\n\n return (\n <div ref={chartRef} className=\"ndl-chart\" style={chartContainerStyle}>\n {children}\n </div>\n );\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChartEmpty.js","sourceRoot":"","sources":["../../../src/charts/ChartEmpty.tsx"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EACL,mBAAmB,EACnB,+BAA+B,EAC/B,gCAAgC,GACjC,MAAM,wBAAwB,CAAC;AAIhC,MAAM,eAAe,GAAG;IACtB,GAAG,EAAE,+BAA+B;IACpC,IAAI,EAAE,gCAAgC;IACtC,GAAG,EAAE,mBAAmB;CAIzB,CAAC;AAEF,MAAM,UAAU,UAAU,CAAC,EACzB,MAAM,EACN,OAAO,GAAG,mBAAmB,EAC7B,IAAI,GAAG,MAAM,GACG;IAChB,MAAM,IAAI,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IAEnC,OAAO,CACL,eAAK,SAAS,EAAC,uBAAuB,aACpC,KAAC,IAAI,IAAC,SAAS,EAAC,4BAA4B,GAAG,EAC/C,KAAC,UAAU,IAAC,OAAO,EAAC,aAAa,YAAE,OAAO,GAAc,EACvD,MAAM,IACH,CACP,CAAC;AACJ,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 */\nimport { Typography } from '@neo4j-ndl/react';\nimport {\n ChartPieIconOutline,\n PresentationChartBarIconOutline,\n PresentationChartLineIconOutline,\n} from '@neo4j-ndl/react/icons';\n\nimport { type ChartEmptyProps } from './chart-types';\n\nconst chartEmptyIcons = {\n bar: PresentationChartBarIconOutline,\n line: PresentationChartLineIconOutline,\n pie: ChartPieIconOutline,\n} satisfies Record<\n NonNullable<ChartEmptyProps['type']>,\n React.ComponentType<{ className?: string }>\n>;\n\nexport function ChartEmpty({\n action,\n message = 'No data available',\n type = 'line',\n}: ChartEmptyProps): React.JSX.Element {\n const Icon = chartEmptyIcons[type];\n\n return (\n <div className=\"ndl-chart-empty-state\">\n <Icon className=\"ndl-chart-empty-state-icon\" />\n <Typography variant=\"body-medium\">{message}</Typography>\n {action}\n </div>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"file":"ChartEmpty.js","sourceRoot":"","sources":["../../../src/charts/ChartEmpty.tsx"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EACL,mBAAmB,EACnB,+BAA+B,EAC/B,gCAAgC,GACjC,MAAM,wBAAwB,CAAC;AAIhC,MAAM,eAAe,GAAG;IACtB,GAAG,EAAE,+BAA+B;IACpC,IAAI,EAAE,gCAAgC;IACtC,GAAG,EAAE,mBAAmB;CAIzB,CAAC;AAEF,MAAM,UAAU,UAAU,CAAC,EACzB,MAAM,EACN,OAAO,GAAG,mBAAmB,EAC7B,IAAI,GAAG,MAAM,GACG;IAChB,MAAM,IAAI,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IAEnC,OAAO,CACL,eAAK,SAAS,EAAC,uBAAuB,aACpC,KAAC,IAAI,IAAC,SAAS,EAAC,4BAA4B,GAAG,EAC/C,KAAC,UAAU,IAAC,OAAO,EAAC,aAAa,YAAE,OAAO,GAAc,EACvD,MAAM,IACH,CACP,CAAC;AACJ,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 */\nimport { Typography } from '@neo4j-ndl/react';\nimport {\n ChartPieIconOutline,\n PresentationChartBarIconOutline,\n PresentationChartLineIconOutline,\n} from '@neo4j-ndl/react/icons';\n\nimport { type ChartEmptyProps } from './utils/chart-types';\n\nconst chartEmptyIcons = {\n bar: PresentationChartBarIconOutline,\n line: PresentationChartLineIconOutline,\n pie: ChartPieIconOutline,\n} satisfies Record<\n NonNullable<ChartEmptyProps['type']>,\n React.ComponentType<{ className?: string }>\n>;\n\nexport function ChartEmpty({\n action,\n message = 'No data available',\n type = 'line',\n}: ChartEmptyProps): React.JSX.Element {\n const Icon = chartEmptyIcons[type];\n\n return (\n <div className=\"ndl-chart-empty-state\">\n <Icon className=\"ndl-chart-empty-state-icon\" />\n <Typography variant=\"body-medium\">{message}</Typography>\n {action}\n </div>\n );\n}\n"]}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
*
|
|
4
|
+
* Copyright (c) "Neo4j"
|
|
5
|
+
* Neo4j Sweden AB [http://neo4j.com]
|
|
6
|
+
*
|
|
7
|
+
* This file is part of Neo4j.
|
|
8
|
+
*
|
|
9
|
+
* Neo4j is free software: you can redistribute it and/or modify
|
|
10
|
+
* it under the terms of the GNU General Public License as published by
|
|
11
|
+
* the Free Software Foundation, either version 3 of the License, or
|
|
12
|
+
* (at your option) any later version.
|
|
13
|
+
*
|
|
14
|
+
* This program is distributed in the hope that it will be useful,
|
|
15
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
16
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
17
|
+
* GNU General Public License for more details.
|
|
18
|
+
*
|
|
19
|
+
* You should have received a copy of the GNU General Public License
|
|
20
|
+
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
21
|
+
*/
|
|
22
|
+
import { useNeedleTheme } from '@neo4j-ndl/react';
|
|
23
|
+
import { useEffect, useMemo } from 'react';
|
|
24
|
+
import { useChartLifecycle, useChartLoading, useChartResize, } from './hooks/use-chart-instance';
|
|
25
|
+
import { useChartOption } from './hooks/use-chart-option';
|
|
26
|
+
import { useChartRefsContext } from './hooks/use-chart-refs';
|
|
27
|
+
import { useChartZoom } from './hooks/use-chart-zoom';
|
|
28
|
+
import { hasCategoryXAxis as getHasCategoryXAxis, hasSliderDataZoom, } from './utils/build-chart-option';
|
|
29
|
+
import { normalizeThresholdLines } from './utils/threshold';
|
|
30
|
+
import { mergeDataZoom, mergeSeries, mergeXAxis, mergeYAxis, } from './utils/user-option-utils';
|
|
31
|
+
const DEFAULT_CHART_SETTINGS = {
|
|
32
|
+
lazyUpdate: false,
|
|
33
|
+
notMerge: true,
|
|
34
|
+
silent: false,
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* Owns the ECharts instance element and coordinates chart-specific hooks.
|
|
38
|
+
*
|
|
39
|
+
* The component normalizes user props into Needle-themed ECharts options,
|
|
40
|
+
* initializes/resizes the chart instance, applies loading and zoom behavior, and
|
|
41
|
+
* reports derived chart state back to `Chart` for legend rendering.
|
|
42
|
+
*/
|
|
43
|
+
export const ChartRender = ({ callbacks, dataset, isChartZoomDisabled = false, isLoading, onChartOptionChange, onFirstResizeChange, option: userOption, palette, series: propsSeries, settings = DEFAULT_CHART_SETTINGS, xAxis: propXAxis, yAxis: propYAxis, }) => {
|
|
44
|
+
const { chartEchartRef } = useChartRefsContext();
|
|
45
|
+
const dataZoomOptions = userOption === null || userOption === void 0 ? void 0 : userOption.dataZoom;
|
|
46
|
+
const toolboxOptions = userOption === null || userOption === void 0 ? void 0 : userOption.toolbox;
|
|
47
|
+
const { theme } = useNeedleTheme();
|
|
48
|
+
const hasSliderZoom = hasSliderDataZoom(dataZoomOptions);
|
|
49
|
+
const thresholdLines = useMemo(() => normalizeThresholdLines(propsSeries), [propsSeries]);
|
|
50
|
+
const dataZoom = useMemo(() => mergeDataZoom(dataZoomOptions), [dataZoomOptions]);
|
|
51
|
+
const series = useMemo(() => mergeSeries(propsSeries, theme, userOption, palette), [palette, propsSeries, theme, userOption]);
|
|
52
|
+
const xAxis = useMemo(() => mergeXAxis(propXAxis, theme), [propXAxis, theme]);
|
|
53
|
+
const yAxis = useMemo(() => mergeYAxis(propYAxis, theme), [propYAxis, theme]);
|
|
54
|
+
const hasCategoryXAxis = getHasCategoryXAxis(xAxis);
|
|
55
|
+
/**
|
|
56
|
+
* Hook responsibilities:
|
|
57
|
+
* - `useChartLifecycle` creates/disposes the ECharts instance and updates theme data.
|
|
58
|
+
* - `useChartResize` keeps the canvas sized to its container before first render.
|
|
59
|
+
* - `useChartOption` builds and applies the merged ECharts option.
|
|
60
|
+
* - `useChartZoom` attaches consumer zoom callbacks.
|
|
61
|
+
* - `useChartLoading` synchronizes the loading overlay with chart readiness.
|
|
62
|
+
*/
|
|
63
|
+
useChartLifecycle({ palette, theme });
|
|
64
|
+
const { isWaitingForFirstResize } = useChartResize();
|
|
65
|
+
const chartOption = useChartOption({
|
|
66
|
+
dataZoom,
|
|
67
|
+
dataset,
|
|
68
|
+
hasCategoryXAxis,
|
|
69
|
+
hasSliderZoom,
|
|
70
|
+
propsSeries,
|
|
71
|
+
series,
|
|
72
|
+
settings,
|
|
73
|
+
thresholdLines,
|
|
74
|
+
toolboxOptions,
|
|
75
|
+
userOption,
|
|
76
|
+
xAxis,
|
|
77
|
+
yAxis,
|
|
78
|
+
});
|
|
79
|
+
useChartZoom({ callbacks, isChartZoomDisabled });
|
|
80
|
+
useChartLoading({
|
|
81
|
+
isLoading,
|
|
82
|
+
isWaitingForFirstResize,
|
|
83
|
+
theme,
|
|
84
|
+
});
|
|
85
|
+
useEffect(() => {
|
|
86
|
+
onFirstResizeChange(isWaitingForFirstResize);
|
|
87
|
+
}, [isWaitingForFirstResize, onFirstResizeChange]);
|
|
88
|
+
useEffect(() => {
|
|
89
|
+
onChartOptionChange(chartOption);
|
|
90
|
+
}, [chartOption, onChartOptionChange]);
|
|
91
|
+
return _jsx("div", { ref: chartEchartRef, className: "ndl-chart-echart" });
|
|
92
|
+
};
|
|
93
|
+
//# sourceMappingURL=ChartRender.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChartRender.js","sourceRoot":"","sources":["../../../src/charts/ChartRender.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 { useNeedleTheme } from '@neo4j-ndl/react';\nimport type { EChartsOption } from 'echarts';\nimport { useEffect, useMemo } from 'react';\n\nimport {\n useChartLifecycle,\n useChartLoading,\n useChartResize,\n} from './hooks/use-chart-instance';\nimport { useChartOption } from './hooks/use-chart-option';\nimport { useChartRefsContext } from './hooks/use-chart-refs';\nimport { useChartZoom } from './hooks/use-chart-zoom';\nimport {\n hasCategoryXAxis as getHasCategoryXAxis,\n hasSliderDataZoom,\n} from './utils/build-chart-option';\nimport type { ChartProps } from './utils/chart-types';\nimport { normalizeThresholdLines } from './utils/threshold';\nimport {\n mergeDataZoom,\n mergeSeries,\n mergeXAxis,\n mergeYAxis,\n} from './utils/user-option-utils';\n\nconst DEFAULT_CHART_SETTINGS: NonNullable<ChartProps['settings']> = {\n lazyUpdate: false,\n notMerge: true,\n silent: false,\n};\n\ntype ChartRenderProps = Omit<ChartProps, 'legend' | 'style'> & {\n onChartOptionChange: (chartOption: EChartsOption | undefined) => void;\n onFirstResizeChange: (isWaitingForFirstResize: boolean) => void;\n};\n\n/**\n * Owns the ECharts instance element and coordinates chart-specific hooks.\n *\n * The component normalizes user props into Needle-themed ECharts options,\n * initializes/resizes the chart instance, applies loading and zoom behavior, and\n * reports derived chart state back to `Chart` for legend rendering.\n */\nexport const ChartRender = ({\n callbacks,\n dataset,\n isChartZoomDisabled = false,\n isLoading,\n onChartOptionChange,\n onFirstResizeChange,\n option: userOption,\n palette,\n series: propsSeries,\n settings = DEFAULT_CHART_SETTINGS,\n xAxis: propXAxis,\n yAxis: propYAxis,\n}: ChartRenderProps) => {\n const { chartEchartRef } = useChartRefsContext();\n const dataZoomOptions = (userOption as EChartsOption)?.dataZoom;\n const toolboxOptions = (userOption as EChartsOption)?.toolbox;\n const { theme } = useNeedleTheme();\n\n const hasSliderZoom = hasSliderDataZoom(dataZoomOptions);\n const thresholdLines = useMemo(\n () => normalizeThresholdLines(propsSeries),\n [propsSeries],\n );\n const dataZoom = useMemo(\n () => mergeDataZoom(dataZoomOptions),\n [dataZoomOptions],\n );\n const series = useMemo(\n () => mergeSeries(propsSeries, theme, userOption, palette),\n [palette, propsSeries, theme, userOption],\n );\n const xAxis = useMemo(() => mergeXAxis(propXAxis, theme), [propXAxis, theme]);\n const yAxis = useMemo(() => mergeYAxis(propYAxis, theme), [propYAxis, theme]);\n const hasCategoryXAxis = getHasCategoryXAxis(xAxis);\n\n /**\n * Hook responsibilities:\n * - `useChartLifecycle` creates/disposes the ECharts instance and updates theme data.\n * - `useChartResize` keeps the canvas sized to its container before first render.\n * - `useChartOption` builds and applies the merged ECharts option.\n * - `useChartZoom` attaches consumer zoom callbacks.\n * - `useChartLoading` synchronizes the loading overlay with chart readiness.\n */\n useChartLifecycle({ palette, theme });\n const { isWaitingForFirstResize } = useChartResize();\n const chartOption = useChartOption({\n dataZoom,\n dataset,\n hasCategoryXAxis,\n hasSliderZoom,\n propsSeries,\n series,\n settings,\n thresholdLines,\n toolboxOptions,\n userOption,\n xAxis,\n yAxis,\n });\n useChartZoom({ callbacks, isChartZoomDisabled });\n useChartLoading({\n isLoading,\n isWaitingForFirstResize,\n theme,\n });\n\n useEffect(() => {\n onFirstResizeChange(isWaitingForFirstResize);\n }, [isWaitingForFirstResize, onFirstResizeChange]);\n\n useEffect(() => {\n onChartOptionChange(chartOption);\n }, [chartOption, onChartOptionChange]);\n\n return <div ref={chartEchartRef} className=\"ndl-chart-echart\" />;\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
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 './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"]}
|
|
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"]}
|