@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.
Files changed (185) hide show
  1. package/lib/cjs/charts/Chart.js +56 -462
  2. package/lib/cjs/charts/Chart.js.map +1 -1
  3. package/lib/cjs/charts/ChartContainer.js +71 -0
  4. package/lib/cjs/charts/ChartContainer.js.map +1 -0
  5. package/lib/cjs/charts/ChartEmpty.js.map +1 -1
  6. package/lib/cjs/charts/ChartRender.js +97 -0
  7. package/lib/cjs/charts/ChartRender.js.map +1 -0
  8. package/lib/cjs/charts/ChartTooltip.js.map +1 -1
  9. package/lib/cjs/charts/Legend.js +32 -246
  10. package/lib/cjs/charts/Legend.js.map +1 -1
  11. package/lib/cjs/charts/LegendItem.js +68 -0
  12. package/lib/cjs/charts/LegendItem.js.map +1 -0
  13. package/lib/cjs/charts/LegendLayout.js +363 -0
  14. package/lib/cjs/charts/LegendLayout.js.map +1 -0
  15. package/lib/cjs/charts/hooks/use-chart-instance.js +133 -0
  16. package/lib/cjs/charts/hooks/use-chart-instance.js.map +1 -0
  17. package/lib/cjs/charts/hooks/use-chart-option.js +79 -0
  18. package/lib/cjs/charts/hooks/use-chart-option.js.map +1 -0
  19. package/lib/cjs/charts/hooks/use-chart-refs.js +52 -0
  20. package/lib/cjs/charts/hooks/use-chart-refs.js.map +1 -0
  21. package/lib/cjs/charts/hooks/use-chart-zoom.js +117 -0
  22. package/lib/cjs/charts/hooks/use-chart-zoom.js.map +1 -0
  23. package/lib/cjs/charts/hooks/use-legend-interactions.js +149 -0
  24. package/lib/cjs/charts/hooks/use-legend-interactions.js.map +1 -0
  25. package/lib/cjs/charts/hooks/use-legend-series.js +181 -0
  26. package/lib/cjs/charts/hooks/use-legend-series.js.map +1 -0
  27. package/lib/cjs/charts/hooks/use-legend-visibility.js +91 -0
  28. package/lib/cjs/charts/hooks/use-legend-visibility.js.map +1 -0
  29. package/lib/cjs/charts/index.js +1 -1
  30. package/lib/cjs/charts/index.js.map +1 -1
  31. package/lib/cjs/charts/tests/chart-test-utils.js +56 -9
  32. package/lib/cjs/charts/tests/chart-test-utils.js.map +1 -1
  33. package/lib/cjs/charts/themes/ndl-echarts-theme.js.map +1 -1
  34. package/lib/cjs/charts/{aria-description.js → utils/aria-description.js} +4 -45
  35. package/lib/cjs/charts/utils/aria-description.js.map +1 -0
  36. package/lib/cjs/charts/utils/build-chart-option.js +74 -0
  37. package/lib/cjs/charts/utils/build-chart-option.js.map +1 -0
  38. package/lib/cjs/charts/utils/chart-tooltip-formatter.js +86 -0
  39. package/lib/cjs/charts/utils/chart-tooltip-formatter.js.map +1 -0
  40. package/lib/cjs/charts/utils/chart-types.js.map +1 -0
  41. package/lib/cjs/charts/utils/defaults.js.map +1 -0
  42. package/lib/cjs/charts/{utils.js → utils/format-utils.js} +3 -19
  43. package/lib/cjs/charts/utils/format-utils.js.map +1 -0
  44. package/lib/cjs/charts/utils/legend-layout.js +65 -0
  45. package/lib/cjs/charts/utils/legend-layout.js.map +1 -0
  46. package/lib/cjs/charts/{legend-utils.js → utils/legend-utils.js} +1 -78
  47. package/lib/cjs/charts/utils/legend-utils.js.map +1 -0
  48. package/lib/cjs/charts/utils/threshold.js +114 -0
  49. package/lib/cjs/charts/utils/threshold.js.map +1 -0
  50. package/lib/cjs/charts/{user-option-utils.js → utils/user-option-utils.js} +7 -16
  51. package/lib/cjs/charts/utils/user-option-utils.js.map +1 -0
  52. package/lib/esm/charts/Chart.js +50 -457
  53. package/lib/esm/charts/Chart.js.map +1 -1
  54. package/lib/esm/charts/ChartContainer.js +67 -0
  55. package/lib/esm/charts/ChartContainer.js.map +1 -0
  56. package/lib/esm/charts/ChartEmpty.js.map +1 -1
  57. package/lib/esm/charts/ChartRender.js +93 -0
  58. package/lib/esm/charts/ChartRender.js.map +1 -0
  59. package/lib/esm/charts/ChartTooltip.js.map +1 -1
  60. package/lib/esm/charts/Legend.js +32 -243
  61. package/lib/esm/charts/Legend.js.map +1 -1
  62. package/lib/esm/charts/LegendItem.js +61 -0
  63. package/lib/esm/charts/LegendItem.js.map +1 -0
  64. package/lib/esm/charts/LegendLayout.js +323 -0
  65. package/lib/esm/charts/LegendLayout.js.map +1 -0
  66. package/lib/esm/charts/hooks/use-chart-instance.js +128 -0
  67. package/lib/esm/charts/hooks/use-chart-instance.js.map +1 -0
  68. package/lib/esm/charts/hooks/use-chart-option.js +76 -0
  69. package/lib/esm/charts/hooks/use-chart-option.js.map +1 -0
  70. package/lib/esm/charts/hooks/use-chart-refs.js +48 -0
  71. package/lib/esm/charts/hooks/use-chart-refs.js.map +1 -0
  72. package/lib/esm/charts/hooks/use-chart-zoom.js +114 -0
  73. package/lib/esm/charts/hooks/use-chart-zoom.js.map +1 -0
  74. package/lib/esm/charts/hooks/use-legend-interactions.js +145 -0
  75. package/lib/esm/charts/hooks/use-legend-interactions.js.map +1 -0
  76. package/lib/esm/charts/hooks/use-legend-series.js +178 -0
  77. package/lib/esm/charts/hooks/use-legend-series.js.map +1 -0
  78. package/lib/esm/charts/hooks/use-legend-visibility.js +87 -0
  79. package/lib/esm/charts/hooks/use-legend-visibility.js.map +1 -0
  80. package/lib/esm/charts/index.js +1 -1
  81. package/lib/esm/charts/index.js.map +1 -1
  82. package/lib/esm/charts/tests/chart-test-utils.js +53 -8
  83. package/lib/esm/charts/tests/chart-test-utils.js.map +1 -1
  84. package/lib/esm/charts/themes/ndl-echarts-theme.js.map +1 -1
  85. package/lib/esm/charts/{aria-description.js → utils/aria-description.js} +4 -45
  86. package/lib/esm/charts/utils/aria-description.js.map +1 -0
  87. package/lib/esm/charts/utils/build-chart-option.js +69 -0
  88. package/lib/esm/charts/utils/build-chart-option.js.map +1 -0
  89. package/lib/esm/charts/utils/chart-tooltip-formatter.js +82 -0
  90. package/lib/esm/charts/utils/chart-tooltip-formatter.js.map +1 -0
  91. package/lib/esm/charts/utils/chart-types.js.map +1 -0
  92. package/lib/esm/charts/utils/defaults.js.map +1 -0
  93. package/lib/esm/charts/{utils.js → utils/format-utils.js} +2 -17
  94. package/lib/esm/charts/utils/format-utils.js.map +1 -0
  95. package/lib/esm/charts/utils/legend-layout.js +59 -0
  96. package/lib/esm/charts/utils/legend-layout.js.map +1 -0
  97. package/lib/esm/charts/{legend-utils.js → utils/legend-utils.js} +1 -75
  98. package/lib/esm/charts/utils/legend-utils.js.map +1 -0
  99. package/lib/esm/charts/utils/threshold.js +106 -0
  100. package/lib/esm/charts/utils/threshold.js.map +1 -0
  101. package/lib/esm/charts/{user-option-utils.js → utils/user-option-utils.js} +5 -14
  102. package/lib/esm/charts/utils/user-option-utils.js.map +1 -0
  103. package/lib/types/charts/Chart.d.ts +2 -2
  104. package/lib/types/charts/Chart.d.ts.map +1 -1
  105. package/lib/{esm/charts/types.js → types/charts/ChartContainer.d.ts} +14 -1
  106. package/lib/types/charts/ChartContainer.d.ts.map +1 -0
  107. package/lib/types/charts/ChartEmpty.d.ts +1 -1
  108. package/lib/types/charts/ChartEmpty.d.ts.map +1 -1
  109. package/lib/types/charts/ChartRender.d.ts +36 -0
  110. package/lib/types/charts/ChartRender.d.ts.map +1 -0
  111. package/lib/types/charts/ChartTooltip.d.ts +1 -1
  112. package/lib/types/charts/ChartTooltip.d.ts.map +1 -1
  113. package/lib/types/charts/Legend.d.ts +15 -3
  114. package/lib/types/charts/Legend.d.ts.map +1 -1
  115. package/lib/{cjs/charts/types.js → types/charts/LegendItem.d.ts} +10 -3
  116. package/lib/types/charts/LegendItem.d.ts.map +1 -0
  117. package/lib/types/charts/LegendLayout.d.ts +38 -0
  118. package/lib/types/charts/LegendLayout.d.ts.map +1 -0
  119. package/lib/types/charts/hooks/use-chart-instance.d.ts +62 -0
  120. package/lib/types/charts/hooks/use-chart-instance.d.ts.map +1 -0
  121. package/lib/types/charts/hooks/use-chart-option.d.ts +48 -0
  122. package/lib/types/charts/hooks/use-chart-option.d.ts.map +1 -0
  123. package/lib/types/charts/hooks/use-chart-refs.d.ts +38 -0
  124. package/lib/types/charts/hooks/use-chart-refs.d.ts.map +1 -0
  125. package/lib/types/charts/hooks/use-chart-zoom.d.ts +36 -0
  126. package/lib/types/charts/hooks/use-chart-zoom.d.ts.map +1 -0
  127. package/lib/types/charts/hooks/use-legend-interactions.d.ts +56 -0
  128. package/lib/types/charts/hooks/use-legend-interactions.d.ts.map +1 -0
  129. package/lib/types/charts/hooks/use-legend-series.d.ts +42 -0
  130. package/lib/types/charts/hooks/use-legend-series.d.ts.map +1 -0
  131. package/lib/types/charts/hooks/use-legend-visibility.d.ts +24 -0
  132. package/lib/types/charts/hooks/use-legend-visibility.d.ts.map +1 -0
  133. package/lib/types/charts/index.d.ts +2 -2
  134. package/lib/types/charts/index.d.ts.map +1 -1
  135. package/lib/types/charts/tests/chart-test-utils.d.ts +7 -1
  136. package/lib/types/charts/tests/chart-test-utils.d.ts.map +1 -1
  137. package/lib/types/charts/themes/ndl-echarts-theme.d.ts +1 -1
  138. package/lib/types/charts/themes/ndl-echarts-theme.d.ts.map +1 -1
  139. package/lib/types/charts/utils/aria-description.d.ts.map +1 -0
  140. package/lib/types/charts/utils/build-chart-option.d.ts +52 -0
  141. package/lib/types/charts/utils/build-chart-option.d.ts.map +1 -0
  142. package/lib/types/charts/utils/chart-tooltip-formatter.d.ts +37 -0
  143. package/lib/types/charts/utils/chart-tooltip-formatter.d.ts.map +1 -0
  144. package/lib/types/charts/{chart-types.d.ts → utils/chart-types.d.ts} +23 -22
  145. package/lib/types/charts/utils/chart-types.d.ts.map +1 -0
  146. package/lib/types/charts/utils/defaults.d.ts.map +1 -0
  147. package/lib/types/charts/{utils.d.ts → utils/format-utils.d.ts} +2 -4
  148. package/lib/types/charts/utils/format-utils.d.ts.map +1 -0
  149. package/lib/types/charts/utils/legend-layout.d.ts +37 -0
  150. package/lib/types/charts/utils/legend-layout.d.ts.map +1 -0
  151. package/lib/types/charts/{legend-utils.d.ts → utils/legend-utils.d.ts} +1 -11
  152. package/lib/types/charts/utils/legend-utils.d.ts.map +1 -0
  153. package/lib/types/charts/utils/threshold.d.ts +45 -0
  154. package/lib/types/charts/utils/threshold.d.ts.map +1 -0
  155. package/lib/types/charts/utils/user-option-utils.d.ts.map +1 -0
  156. package/package.json +3 -3
  157. package/lib/cjs/charts/aria-description.js.map +0 -1
  158. package/lib/cjs/charts/chart-types.js.map +0 -1
  159. package/lib/cjs/charts/defaults.js.map +0 -1
  160. package/lib/cjs/charts/legend-utils.js.map +0 -1
  161. package/lib/cjs/charts/types.js.map +0 -1
  162. package/lib/cjs/charts/user-option-utils.js.map +0 -1
  163. package/lib/cjs/charts/utils.js.map +0 -1
  164. package/lib/esm/charts/aria-description.js.map +0 -1
  165. package/lib/esm/charts/chart-types.js.map +0 -1
  166. package/lib/esm/charts/defaults.js.map +0 -1
  167. package/lib/esm/charts/legend-utils.js.map +0 -1
  168. package/lib/esm/charts/types.js.map +0 -1
  169. package/lib/esm/charts/user-option-utils.js.map +0 -1
  170. package/lib/esm/charts/utils.js.map +0 -1
  171. package/lib/types/charts/aria-description.d.ts.map +0 -1
  172. package/lib/types/charts/chart-types.d.ts.map +0 -1
  173. package/lib/types/charts/defaults.d.ts.map +0 -1
  174. package/lib/types/charts/legend-utils.d.ts.map +0 -1
  175. package/lib/types/charts/types.d.ts +0 -44
  176. package/lib/types/charts/types.d.ts.map +0 -1
  177. package/lib/types/charts/user-option-utils.d.ts.map +0 -1
  178. package/lib/types/charts/utils.d.ts.map +0 -1
  179. /package/lib/cjs/charts/{chart-types.js → utils/chart-types.js} +0 -0
  180. /package/lib/cjs/charts/{defaults.js → utils/defaults.js} +0 -0
  181. /package/lib/esm/charts/{chart-types.js → utils/chart-types.js} +0 -0
  182. /package/lib/esm/charts/{defaults.js → utils/defaults.js} +0 -0
  183. /package/lib/types/charts/{aria-description.d.ts → utils/aria-description.d.ts} +0 -0
  184. /package/lib/types/charts/{defaults.d.ts → utils/defaults.d.ts} +0 -0
  185. /package/lib/types/charts/{user-option-utils.d.ts → utils/user-option-utils.d.ts} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-option-utils.js","sourceRoot":"","sources":["../../../../src/charts/utils/user-option-utils.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\n *\n * Copyright (c) \"Neo4j\"\n * Neo4j Sweden AB [http://neo4j.com]\n *\n * This file is part of Neo4j.\n *\n * Neo4j is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { tokens } from '@neo4j-ndl/base';\nimport { type EChartsOption, type SeriesOption } from 'echarts';\nimport { renderToString } from 'react-dom/server';\n\nimport { ChartTooltip } from '../ChartTooltip';\nimport { getTooltipValueFormatter } from './chart-tooltip-formatter';\nimport {\n type EchartsSeries,\n type HexColor,\n type NeedleSeries,\n type ThresholdLineSeriesOption,\n} from './chart-types';\nimport { defaultThresholdLineSeriesOption } from './defaults';\nimport { formatNumberEnUS } from './format-utils';\n\nconst defaultColors = Object.values(tokens.categorical);\n\ntype SingleXAxisOption = Exclude<\n NonNullable<EChartsOption['xAxis']>,\n unknown[]\n>;\ntype SingleYAxisOption = Exclude<\n NonNullable<EChartsOption['yAxis']>,\n unknown[]\n>;\n\nexport const mergeSeries = (\n series: NeedleSeries,\n theme: 'light' | 'dark' = 'light',\n userOption?: Omit<\n EChartsOption,\n 'series' | 'dataset' | 'legend' | 'xAxis' | 'yAxis'\n >,\n palette?: HexColor[],\n): EchartsSeries => {\n const colors = palette ?? defaultColors;\n\n return series.map(\n (\n option:\n | SeriesOption\n | ThresholdLineSeriesOption<'warning'>\n | ThresholdLineSeriesOption<'danger'>,\n index: number = 0,\n ): SeriesOption => {\n if (option === undefined) {\n return {};\n }\n\n const color = Array.isArray(option.color)\n ? option.color[index]\n : (option.color ?? colors[index % colors.length]);\n\n if (option.type === 'thresholdLine') {\n const { notificationType } = option;\n // Needed to differentiate between normal lines and threshold lines\n // as we are unable to inject custom properties into echarts series lines.\n const thresholdLineName = `thresholdLine-${notificationType}`;\n return {\n symbolSize: 9,\n symbol: 'none',\n condition: defaultThresholdLineSeriesOption.condition,\n ...option,\n lineStyle: {\n width: 2,\n type: 'dashed',\n ...option.lineStyle,\n },\n name: thresholdLineName,\n type: 'line',\n data: [\n [option.xAxis[0], option.yAxis],\n [option.xAxis[1], option.yAxis],\n ],\n };\n }\n\n if (option.type === 'line') {\n const shadow = tokens.theme[theme].boxShadow.raised;\n const shadowParts = shadow.split(/ (?=\\d+px|rgba?\\()/);\n\n return {\n type: 'line',\n symbolSize: 9,\n color,\n symbol: 'none',\n ...option,\n lineStyle: {\n width: 2,\n type: 'solid' as const,\n ...option.lineStyle,\n },\n emphasis: {\n disabled: true,\n focus: 'series',\n ...option.emphasis,\n itemStyle: {\n borderColor: tokens.theme[theme].color.neutral.bg.weak,\n shadowOffsetX: parseInt(shadowParts[0]),\n shadowOffsetY: parseInt(shadowParts[1]),\n shadowBlur: parseInt(shadowParts[2]),\n shadowColor: shadowParts[4],\n ...option.emphasis?.itemStyle,\n },\n label: { show: false },\n ...option.emphasis,\n },\n };\n }\n\n if (option.type === 'pie') {\n const valueFormatter = getTooltipValueFormatter(userOption);\n\n return {\n animationDuration: 600,\n animationType: 'scale',\n selectedMode: 'single',\n ...option,\n // Blur opacity is set to 1 to prevent other slices from\n // being opacitated when hovering a slice where the emphasis is enabled (used for scale effect)\n blur: {\n itemStyle: {\n opacity: 1,\n ...option.blur?.itemStyle,\n },\n label: {\n opacity: 1,\n ...option.blur?.label,\n },\n ...option.blur,\n },\n // Emphasis is enabled and used to apply the scale effect when hovering the pie chart slices.\n emphasis: {\n disabled: false,\n focus: 'self',\n scale: true,\n scaleSize: 5,\n ...option.emphasis,\n },\n itemStyle: {\n borderColor: tokens.theme[theme].color.neutral.bg.weak,\n borderWidth: 1,\n ...option.itemStyle,\n },\n label: {\n formatter: '{d}%',\n backgroundColor: 'transparent',\n color: tokens.theme[theme].color.neutral.text.weak,\n ...option.label,\n },\n labelLine: {\n length: 5,\n show: true,\n ...option.labelLine,\n },\n tooltip: {\n trigger: 'item',\n confine: true,\n // Reset the default tooltip css styling\n padding: 0,\n borderRadius: 0,\n borderWidth: 0,\n extraCssText: 'box-shadow: none; background-color: transparent;',\n formatter: function (params: unknown) {\n const paramsArray = Array.isArray(params) ? params : [params];\n const firstParam = paramsArray[0];\n return `${renderToString(\n <span className=\"ndl-charts-chart-tooltip\">\n <ChartTooltip.Content\n key={firstParam?.value[0] ?? firstParam.seriesName}\n leadingElement={\n firstParam?.value[0] ?? firstParam.seriesName\n }\n trailingElement={valueFormatter(\n Array.isArray(firstParam.value)\n ? firstParam.value[1]\n : firstParam.value,\n )}\n indentSquareColor={firstParam.color}\n />\n </span>,\n )}`;\n },\n ...option.tooltip,\n },\n };\n }\n\n if (option.type === 'bar') {\n const valueFormatter = getTooltipValueFormatter(userOption);\n\n return {\n barMaxWidth: 16,\n ...option,\n blur: {\n itemStyle: {\n opacity: 0.3,\n ...option.blur?.itemStyle,\n },\n ...option.blur,\n },\n emphasis: {\n disabled: true,\n focus: 'series',\n ...option.emphasis,\n },\n itemStyle: {\n color,\n borderWidth: 20,\n ...option.itemStyle,\n },\n markLine: {\n emphasis: {\n disabled: true,\n lineStyle: {\n width: 20,\n ...option.markLine?.emphasis?.lineStyle,\n },\n ...option.markLine?.emphasis,\n },\n lineStyle: {\n width: 20,\n ...option.markLine?.lineStyle,\n },\n },\n tooltip: {\n trigger: 'axis',\n confine: true,\n // Reset the default tooltip css styling\n padding: 0,\n borderRadius: 0,\n borderWidth: 0,\n extraCssText: 'box-shadow: none; background-color: transparent;',\n formatter: function (params: unknown) {\n const paramsArray = Array.isArray(params) ? params : [params];\n const firstParam = paramsArray[0];\n return `${renderToString(\n <span className=\"ndl-charts-chart-tooltip\">\n <ChartTooltip.Title>{firstParam.name}</ChartTooltip.Title>\n <ChartTooltip.Content\n key={firstParam?.value[0] ?? firstParam.seriesName}\n leadingElement={firstParam.seriesName}\n trailingElement={valueFormatter(\n Array.isArray(firstParam.value)\n ? firstParam.value[1]\n : firstParam.value,\n )}\n indentSquareColor={firstParam.color}\n />\n </span>,\n )}`;\n },\n ...option.tooltip,\n },\n };\n }\n\n return option;\n },\n );\n};\n\nexport const mergeXAxis = (\n xAxis: EChartsOption['xAxis'],\n theme: 'light' | 'dark' = 'light',\n): EChartsOption['xAxis'] => {\n if (xAxis === undefined) {\n return [];\n }\n\n if (Array.isArray(xAxis)) {\n return xAxis.map((x) => mergeXAxis(x, theme)) as EChartsOption['xAxis'];\n }\n\n const baseXAxis = {\n ...xAxis,\n splitLine: { show: false, ...xAxis?.splitLine },\n axisLine: {\n lineStyle: {\n ...xAxis?.axisLine?.lineStyle,\n },\n ...xAxis?.axisLine,\n },\n axisTick: {\n ...xAxis?.axisTick,\n lineStyle: {\n ...xAxis?.axisTick?.lineStyle,\n },\n show: true,\n ...xAxis?.axisTick,\n },\n axisLabel: {\n margin: 16,\n formatter: {\n day: '{dd} {MMM}',\n hour: '{HH}:{mm}',\n millisecond: '{hh}:{mm}:{ss} {SSS}',\n minute: '{HH}:{mm}',\n month: '{MMM}',\n none: '{yyyy}-{MM}-{dd} {hh}:{mm}:{ss} {SSS}',\n second: '{HH}:{mm}:{ss}',\n year: '{yearStyle|{yyyy}}\\n{monthStyle|{MMM}}',\n },\n overflow: 'truncate',\n ...xAxis?.axisLabel,\n },\n } as SingleXAxisOption;\n\n if (xAxis.type === 'time') {\n const timeXAxis = {\n ...baseXAxis,\n axisLabel: {\n hideOverlap: true,\n ...baseXAxis.axisLabel,\n },\n } as SingleXAxisOption;\n\n return timeXAxis;\n }\n\n if (xAxis.type === 'value' || xAxis.type === 'log') {\n const xAxisFormatter =\n xAxis.axisLabel && 'formatter' in xAxis.axisLabel\n ? xAxis.axisLabel.formatter\n : undefined;\n const valueXAxis = {\n ...baseXAxis,\n axisLabel: {\n ...baseXAxis.axisLabel,\n formatter: xAxisFormatter ?? formatNumberEnUS,\n },\n } as SingleXAxisOption;\n\n return valueXAxis;\n }\n\n if (xAxis.type === 'category') {\n const categoryXAxis = {\n ...baseXAxis,\n axisTick: {\n alignWithLabel: true,\n ...baseXAxis?.axisTick,\n },\n axisLabel: {\n width: 80,\n ...baseXAxis?.axisLabel,\n },\n } as SingleXAxisOption;\n return categoryXAxis;\n }\n\n return baseXAxis;\n};\n\nexport const mergeYAxis = (\n yAxis: EChartsOption['yAxis'],\n theme: 'light' | 'dark' = 'light',\n): EChartsOption['yAxis'] => {\n if (yAxis === undefined) {\n return [];\n }\n\n if (Array.isArray(yAxis)) {\n return yAxis.map((y) => mergeYAxis(y, theme)) as EChartsOption['yAxis'];\n }\n\n const baseYAxis = {\n ...yAxis,\n axisLine: {\n ...yAxis?.axisLine,\n lineStyle: {\n ...yAxis?.axisLine?.lineStyle,\n },\n show: true,\n },\n axisTick: {\n show: false,\n ...yAxis?.axisTick,\n lineStyle: {\n width: 1,\n ...yAxis?.axisTick?.lineStyle,\n },\n },\n axisLabel: {\n margin: 8,\n overflow: 'truncate',\n ...yAxis?.axisLabel,\n },\n splitLine: { show: true, ...yAxis?.splitLine },\n } as SingleYAxisOption;\n\n if (yAxis.type === 'time') {\n const timeYAxis = {\n ...baseYAxis,\n axisLabel: {\n hideOverlap: true,\n ...baseYAxis.axisLabel,\n },\n splitLine: { show: false, ...baseYAxis?.splitLine },\n } as SingleYAxisOption;\n\n return timeYAxis;\n }\n\n if (yAxis.type === 'value' || yAxis.type === 'log') {\n const yAxisFormatter =\n yAxis.axisLabel && 'formatter' in yAxis.axisLabel\n ? yAxis.axisLabel.formatter\n : undefined;\n const valueYAxis = {\n ...baseYAxis,\n axisLabel: {\n hideOverlap: true,\n ...baseYAxis.axisLabel,\n formatter: yAxisFormatter ?? formatNumberEnUS,\n },\n splitLine: { show: false, ...baseYAxis?.splitLine },\n } as SingleYAxisOption;\n\n return valueYAxis;\n }\n\n if (yAxis.type === 'category') {\n const categoryYAxis = {\n ...baseYAxis,\n axisLabel: {\n width: 100,\n ...baseYAxis?.axisLabel,\n },\n } as SingleYAxisOption;\n\n return categoryYAxis;\n }\n\n return baseYAxis;\n};\n\nexport const mergeDataZoom = (\n dataZoom: EChartsOption['dataZoom'],\n): EChartsOption['dataZoom'] => {\n if (Array.isArray(dataZoom)) {\n return dataZoom.map((option) =>\n mergeDataZoom(option),\n ) as EChartsOption['dataZoom'];\n }\n\n const isSlider = dataZoom?.type === 'slider';\n const isInside = dataZoom?.type === 'inside';\n\n if (isSlider) {\n return {\n bottom: 10,\n height: 28,\n left: 50,\n right: 50,\n show: true,\n type: 'slider',\n ...dataZoom,\n };\n } else if (isInside) {\n return {\n filterMode: 'none',\n xAxisIndex: [0],\n zoomOnMouseWheel: false,\n ...dataZoom,\n };\n }\n\n return dataZoom;\n};\n\nexport const mergeToolbox = (\n toolbox: EChartsOption['toolbox'],\n): EChartsOption['toolbox'] => {\n if (Array.isArray(toolbox)) {\n return toolbox.map((option) =>\n mergeToolbox(option),\n ) as EChartsOption['toolbox'];\n }\n\n return {\n feature: {\n dataZoom: {\n yAxisIndex: false,\n ...toolbox?.feature?.dataZoom,\n show: true,\n icon: {\n // This hack removes the icons.\n // Due to: https://github.com/apache/echarts/issues/10274\n back: '-',\n zoom: '-',\n },\n },\n },\n };\n};\n"]}
@@ -1,4 +1,3 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
1
  /**
3
2
  *
4
3
  * Copyright (c) "Neo4j"
@@ -19,74 +18,43 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
19
18
  * You should have received a copy of the GNU General Public License
20
19
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
21
20
  */
22
- import { tokens } from '@neo4j-ndl/base';
23
- import { useNeedleTheme } from '@neo4j-ndl/react';
24
- import { getInstanceByDom, init, registerTheme, } from 'echarts';
25
- import { useEffect, useMemo, useRef, useState } from 'react';
26
- import { renderToString } from 'react-dom/server';
27
- import { generateThresholdAriaDescription } from './aria-description';
28
- import { ChartTooltip } from './ChartTooltip';
29
- import { defaultThresholdLineSeriesOption } from './defaults';
21
+
22
+ var __rest = (this && this.__rest) || function (s, e) {
23
+ var t = {};
24
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
25
+ t[p] = s[p];
26
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
27
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
28
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
29
+ t[p[i]] = s[p[i]];
30
+ }
31
+ return t;
32
+ };
33
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
34
+ import { useCallback, useEffect, useState } from 'react';
35
+ import { ChartContainer } from './ChartContainer';
36
+ import { ChartRender } from './ChartRender';
37
+ import { ChartRefsProvider } from './hooks/use-chart-refs';
38
+ import { useLegendSeries } from './hooks/use-legend-series';
30
39
  import { Legend } from './Legend';
31
- import { ndlEchartsTheme } from './themes/ndl-echarts-theme';
32
- import { mergeDataZoom, mergeSeries, mergeToolbox, mergeXAxis, mergeYAxis, } from './user-option-utils';
33
- import { capitalizeFirstLetter, extractValueFromTooltipSeries, formatNumberEnUS, } from './utils';
34
- // This returns a boolean if the condition is met
35
- // and also what to display in the tooltip.
36
- function checkCondition(value, condition, threshold) {
37
- switch (condition) {
38
- case 'greater':
39
- return {
40
- conditionText: 'Above',
41
- isConditionMet: value > threshold,
42
- };
43
- case 'greaterOrEqual':
44
- return {
45
- conditionText: value > threshold
46
- ? 'Above'
47
- : value === threshold
48
- ? 'Equal'
49
- : undefined,
50
- isConditionMet: value >= threshold,
51
- };
52
- case 'less':
53
- return {
54
- conditionText: 'Below',
55
- isConditionMet: value < threshold,
56
- };
57
- case 'lessOrEqual':
58
- return {
59
- conditionText: value < threshold
60
- ? 'Below'
61
- : value === threshold
62
- ? 'Equal'
63
- : undefined,
64
- isConditionMet: value <= threshold,
65
- };
66
- case 'equal':
67
- return {
68
- conditionText: 'Equal',
69
- isConditionMet: value === threshold,
70
- };
71
- case 'notEqual':
72
- return {
73
- conditionText: 'Not equal',
74
- isConditionMet: value !== threshold,
75
- };
76
- default:
77
- return { conditionText: undefined, isConditionMet: false };
40
+ /**
41
+ * Bridges the rendered ECharts option into the React legend.
42
+ *
43
+ * `useLegendSeries` reads the current chart option and ECharts color state to
44
+ * derive the legend rows. Rendering is deferred until the chart has completed
45
+ * its first resize so the legend does not measure against an uninitialized
46
+ * chart instance.
47
+ */
48
+ const ChartLegend = ({ chartOption, isLayoutReady, isWaitingForFirstResize, onLayoutReady, }) => {
49
+ const legendSeries = useLegendSeries({
50
+ chartOption,
51
+ isWaitingForFirstResize,
52
+ });
53
+ if (isWaitingForFirstResize) {
54
+ return (_jsx("div", { "aria-hidden": "true", className: "ndl-chart-legend-container ndl-chart-legend-container-placeholder" }));
78
55
  }
79
- }
80
- /*
81
- Keep this, if we want more than one type of the same threshold line
82
- this will be useful to use.
83
-
84
- export interface NewRegisteredSeriesOption extends RegisteredSeriesOption {
85
- thresholdLine: ThresholdLineSeriesOption;
86
- }
87
- export type SeriesOption = Values<NewRegisteredSeriesOption>;
88
- export type Series = SeriesOption | SeriesOption[];
89
- */
56
+ return (_jsx(Legend, { series: legendSeries !== null && legendSeries !== void 0 ? legendSeries : [], onLayoutReady: onLayoutReady, isLayoutReady: isLayoutReady }));
57
+ };
90
58
  /**
91
59
  * A chart component powered by Apache ECharts with Needle's customization and theming.
92
60
  *
@@ -101,397 +69,22 @@ export type Series = SeriesOption | SeriesOption[];
101
69
  * </div>
102
70
  * ```
103
71
  */
104
- export function Chart({ dataset, option: userOption, xAxis: propXAxis, yAxis: propYAxis, series: propsSeries, style, settings = {
105
- lazyUpdate: false,
106
- notMerge: true,
107
- silent: false,
108
- }, isLoading, isChartZoomDisabled = false, legend, callbacks, palette, }) {
109
- const chartRef = useRef(null);
110
- const chartEchartRef = useRef(null);
111
- const chartLegendRef = useRef(null);
112
- const legendSelectedRef = useRef({});
113
- const legendColorCacheRef = useRef(new Map());
72
+ export const Chart = (_a) => {
73
+ var { style, legend } = _a, chartProps = __rest(_a, ["style", "legend"]);
114
74
  const [isWaitingForFirstResize, setIsWaitingForFirstResize] = useState(true);
115
- const dataZoomOptions = userOption === null || userOption === void 0 ? void 0 : userOption.dataZoom;
116
- const toolboxOptions = userOption === null || userOption === void 0 ? void 0 : userOption.toolbox;
117
- const hasSliderZoom = Array.isArray(dataZoomOptions)
118
- ? dataZoomOptions.some((dataZoomOption) => {
119
- return (dataZoomOption === null || dataZoomOption === void 0 ? void 0 : dataZoomOption.type) === 'slider';
120
- })
121
- : (dataZoomOptions === null || dataZoomOptions === void 0 ? void 0 : dataZoomOptions.type) === 'slider';
122
- const { theme } = useNeedleTheme();
123
- const thresholdLines = useMemo(() => {
124
- const seriesArray = Array.isArray(propsSeries)
125
- ? propsSeries
126
- : [propsSeries];
127
- const thresholdLineSeries = seriesArray.filter((currentSeries) => {
128
- return currentSeries.type === 'thresholdLine';
129
- });
130
- return thresholdLineSeries.map((currentThresholdLineSeriesOption) => {
131
- var _a;
132
- return Object.assign(Object.assign({}, currentThresholdLineSeriesOption), { condition: (_a = currentThresholdLineSeriesOption.condition) !== null && _a !== void 0 ? _a : defaultThresholdLineSeriesOption.condition, value: currentThresholdLineSeriesOption.yAxis });
133
- });
134
- }, [propsSeries]);
135
- const dataZoom = useMemo(() => {
136
- return mergeDataZoom(dataZoomOptions);
137
- }, [dataZoomOptions]);
138
- const series = mergeSeries(propsSeries, theme, userOption, palette);
139
- const xAxis = mergeXAxis(propXAxis, theme);
140
- const yAxis = mergeYAxis(propYAxis, theme);
141
- const hasCategoryXAxis = Array.isArray(xAxis)
142
- ? xAxis.some((x) => x.type === 'category')
143
- : (xAxis === null || xAxis === void 0 ? void 0 : xAxis.type) === 'category';
144
- // The initial option used, the charts option is not necessarily
145
- // the same as this due to mutation via dispatch and setOption.
146
- // use getOption to get the current option of the chart.
147
- const initialOption = useMemo(() => {
148
- if (chartEchartRef.current === null) {
149
- return;
150
- }
151
- const chart = getInstanceByDom(chartEchartRef.current);
152
- const customAriaDescription = generateThresholdAriaDescription(propsSeries, dataset);
153
- const option = Object.assign(Object.assign({ dataset,
154
- xAxis,
155
- yAxis }, userOption), { aria: Object.assign(Object.assign({ decal: {
156
- show: false,
157
- }, enabled: true }, (customAriaDescription !== undefined && {
158
- label: { description: customAriaDescription },
159
- })), userOption === null || userOption === void 0 ? void 0 : userOption.aria), grid: Object.assign({ left: hasCategoryXAxis ? '15px' : '10px', right: hasCategoryXAxis ? '15px' : '10px', top: '10px', bottom: hasSliderZoom ? '60px' : '10px', type: 'solid', containLabel: true }, userOption === null || userOption === void 0 ? void 0 : userOption.grid), legend: {
160
- // Removes in-built echarts legend
161
- show: false,
162
- // Preserve legend filter state across re-renders. legendSelectedRef
163
- // is the single source of truth, written by the Legend component.
164
- // ECharts mutates the options object, so pass a shallow copy here
165
- // to avoid it mutating the React ref object.
166
- selected: Object.assign({}, (legendSelectedRef.current || {})),
167
- }, series, tooltip: {
168
- trigger: 'axis',
169
- confine: true,
170
- // Reset the default tooltip css styling
171
- padding: 0,
172
- borderRadius: 0,
173
- borderWidth: 0,
174
- extraCssText: 'box-shadow: none; background-color: transparent;',
175
- formatter: function (params) {
176
- var _a;
177
- const paramsArray = Array.isArray(params) ? params : [params];
178
- const firstParam = paramsArray[0];
179
- let valueFormatter = formatNumberEnUS;
180
- if (typeof (userOption === null || userOption === void 0 ? void 0 : userOption.tooltip) === 'object' &&
181
- userOption.tooltip !== null &&
182
- 'valueFormatter' in userOption.tooltip) {
183
- valueFormatter = userOption.tooltip.valueFormatter;
184
- }
185
- return `${renderToString(_jsxs("span", { className: "ndl-charts-chart-tooltip", children: [_jsx(ChartTooltip.Title, { children: (_a = firstParam === null || firstParam === void 0 ? void 0 : firstParam.axisValueLabel) !== null && _a !== void 0 ? _a : '' }), paramsArray.map((series) => {
186
- const value = extractValueFromTooltipSeries(series.value, series.encode, series.axisDim);
187
- const seriesValue = typeof value === 'number' ? value : Number(value);
188
- const isThresholdLine = series.seriesName.startsWith('thresholdLine');
189
- const notifications = thresholdLines
190
- .filter((threshold) => {
191
- const { value: thresholdValue, condition, customCondition, } = threshold;
192
- if (Number.isNaN(seriesValue)) {
193
- return false;
194
- }
195
- const isConditionMet = customCondition
196
- ? customCondition(seriesValue, thresholdValue)
197
- : checkCondition(seriesValue, condition, thresholdValue)
198
- .isConditionMet;
199
- return !isThresholdLine && isConditionMet;
200
- })
201
- .map((threshold) => {
202
- const { notificationType, value: thresholdValue, condition, customConditionText, customCondition, } = threshold;
203
- return {
204
- id: `threshold-${notificationType}`,
205
- leadingElement: customCondition
206
- ? customConditionText
207
- : `${checkCondition(seriesValue, condition, thresholdValue).conditionText} threshold`,
208
- notificationType,
209
- trailingElement: valueFormatter(thresholdValue),
210
- };
211
- });
212
- return (_jsx(ChartTooltip.Content, { leadingElement: isThresholdLine
213
- ? `${capitalizeFirstLetter(series.seriesName.replace('thresholdLine-', ''))} threshold`
214
- : series.seriesName, trailingElement: valueFormatter(value), indentSquareColor: series.color, notifications: notifications }, series.seriesName));
215
- })] }))}`;
216
- },
217
- }, dataZoom, toolbox: mergeToolbox(toolboxOptions) });
218
- // Update chart with initial option
219
- chart === null || chart === void 0 ? void 0 : chart.setOption(option, settings);
220
- // Get option returns the current option of the chart.
221
- // This is slightly different than the option we gave as an argument.
222
- // Because we use useMemo in other areas we want to get this set first,
223
- // this is why we are setting then getting then returning. If we did this in
224
- // a useEffect it would run after the other useMemos which is not what we want.
225
- // This is purely for order of operations.
226
- const chartOption = chart === null || chart === void 0 ? void 0 : chart.getOption();
227
- return chartOption;
228
- }, [
229
- thresholdLines,
230
- propsSeries,
231
- dataset,
232
- xAxis,
233
- yAxis,
234
- userOption,
235
- hasCategoryXAxis,
236
- hasSliderZoom,
237
- series,
238
- dataZoom,
239
- toolboxOptions,
240
- settings,
241
- ]);
75
+ const [chartOption, setChartOption] = useState();
76
+ const [isLegendLayoutReady, setIsLegendLayoutReady] = useState(!(legend === null || legend === void 0 ? void 0 : legend.show));
77
+ const handleLegendLayoutReady = useCallback(() => {
78
+ setIsLegendLayoutReady(true);
79
+ }, []);
242
80
  useEffect(() => {
243
- var _a;
244
- // Initialize chart
245
- let chart;
246
- if (chartEchartRef.current !== null) {
247
- registerTheme('ndl-light', ndlEchartsTheme('light', palette));
248
- registerTheme('ndl-dark', ndlEchartsTheme('dark', palette));
249
- const currentChart = getInstanceByDom(chartEchartRef.current);
250
- if (currentChart) {
251
- chart = currentChart;
252
- }
253
- else {
254
- const echartsTheme = theme === 'light' ? 'ndl-light' : 'ndl-dark';
255
- chart = init(chartEchartRef.current, echartsTheme, {
256
- renderer: 'svg',
257
- });
258
- }
259
- }
260
- if (callbacks === null || callbacks === void 0 ? void 0 : callbacks.onZoom) {
261
- chart === null || chart === void 0 ? void 0 : chart.on('datazoom', () => {
262
- var _a;
263
- if (chartEchartRef.current === null) {
264
- return;
265
- }
266
- const currentChart = getInstanceByDom(chartEchartRef.current);
267
- if (!currentChart) {
268
- return;
269
- }
270
- const option = currentChart.getOption();
271
- if (!option || !option.dataZoom) {
272
- return;
273
- }
274
- const dataZoom = Array.isArray(option.dataZoom)
275
- ? option.dataZoom[0]
276
- : option.dataZoom;
277
- const { startValue, endValue } = dataZoom;
278
- (_a = callbacks === null || callbacks === void 0 ? void 0 : callbacks.onZoom) === null || _a === void 0 ? void 0 : _a.call(callbacks, { endValue, startValue });
279
- });
280
- }
281
- // Add chart resize listener
282
- // ResizeObserver is leading to a bit janky UX
283
- function resizeChart() {
284
- // TODO: We need to revisit this. Right now using grid containLabel seems to work.
285
- // We still need to visit this for overflowing of the x-axis labels.
286
- // const calculateGridLeft = () => {
287
- // const textElements = chartEchartRef.current?.querySelectorAll('text');
288
- // const filteredTextElements = Array.from(textElements || []).filter(
289
- // (element) => element.getAttribute('text-anchor') === 'end',
290
- // );
291
- // let maxWidth = 0;
292
- // filteredTextElements.forEach((element) => {
293
- // const bbox = element.getBBox();
294
- // maxWidth = Math.max(maxWidth, bbox.width);
295
- // });
296
- // const tickLength = 5;
297
- // const tickPadding = 3;
298
- // return maxWidth + tickLength + tickPadding;
299
- // };
300
- //
301
- // // Example of dynamically setting the grid's left
302
- // const gridLeft = calculateGridLeft();
303
- // chart?.setOption({
304
- // grid: {
305
- // left: gridLeft,
306
- // },
307
- // });
308
- var _a, _b, _c;
309
- // We want to fit the chart to the charts container.
310
- const chartContainerHeight = (_a = chartRef.current) === null || _a === void 0 ? void 0 : _a.clientHeight;
311
- const chartContainerWidth = (_b = chartRef.current) === null || _b === void 0 ? void 0 : _b.clientWidth;
312
- // Need to take legends height into consideration, otherwise it will overflow the parent.
313
- const chartLegendHeight = ((_c = chartLegendRef === null || chartLegendRef === void 0 ? void 0 : chartLegendRef.current) === null || _c === void 0 ? void 0 : _c.clientHeight) || 0;
314
- const height = chartContainerHeight
315
- ? chartContainerHeight - chartLegendHeight
316
- : undefined;
317
- chart === null || chart === void 0 ? void 0 : chart.resize({
318
- height,
319
- width: chartContainerWidth,
320
- });
81
+ if (!(legend === null || legend === void 0 ? void 0 : legend.show)) {
82
+ setIsLegendLayoutReady(true);
321
83
  }
322
- window.addEventListener('resize', resizeChart);
323
- requestAnimationFrame(() => {
324
- resizeChart();
325
- setIsWaitingForFirstResize(false);
326
- });
327
- // Add chart zoom listeners
328
- const handleMouseMove = () => {
329
- // I do not like this at all: https://github.com/apache/echarts/issues/19819
330
- // echarts updates the svgs on every mouse movement so we need to do this.
331
- chart === null || chart === void 0 ? void 0 : chart.getZr().setCursorStyle('default');
332
- };
333
- // We cannot use chart.getZr().on('mousemove', handleMouseMove)
334
- // This is because it doesn't respect our callbacks. It will
335
- // always run echarts code last instead of our callback.
336
- const chartChild = (_a = chartEchartRef.current) === null || _a === void 0 ? void 0 : _a.children[0];
337
- if (!isChartZoomDisabled) {
338
- chartChild.addEventListener('mousemove', handleMouseMove);
339
- }
340
- const handleMouseDown = (params) => {
341
- var _a;
342
- const event = params.event;
343
- const amountOfMouseClicks = event.detail;
344
- const isDoubleClick = amountOfMouseClicks === 2;
345
- if (isDoubleClick) {
346
- // Reset zooming.
347
- if (chart === undefined) {
348
- return;
349
- }
350
- chart === null || chart === void 0 ? void 0 : chart.dispatchAction({
351
- end: 100,
352
- start: 0,
353
- type: 'dataZoom',
354
- });
355
- if (callbacks === null || callbacks === void 0 ? void 0 : callbacks.onZoom) {
356
- (_a = callbacks === null || callbacks === void 0 ? void 0 : callbacks.onZoom) === null || _a === void 0 ? void 0 : _a.call(callbacks, { endValue: 100, startValue: 0 });
357
- }
358
- }
359
- };
360
- if (!isChartZoomDisabled) {
361
- chart === null || chart === void 0 ? void 0 : chart.getZr().on('mousedown', handleMouseDown);
362
- }
363
- // Return cleanup function
364
- const chartRefCurrentElement = chartEchartRef.current;
365
- const element = chartRefCurrentElement === null || chartRefCurrentElement === void 0 ? void 0 : chartRefCurrentElement.children[0];
366
- return () => {
367
- window.removeEventListener('resize', resizeChart);
368
- element === null || element === void 0 ? void 0 : element.removeEventListener('mousemove', handleMouseMove);
369
- // Remove chart zoom handlers
370
- if (chartRefCurrentElement) {
371
- const chart = getInstanceByDom(chartRefCurrentElement);
372
- chart === null || chart === void 0 ? void 0 : chart.getZr().off('mousedown', handleMouseDown);
373
- }
374
- };
375
- });
376
- useEffect(() => {
377
- if (chartEchartRef.current === null) {
378
- return;
379
- }
380
- const chart = getInstanceByDom(chartEchartRef === null || chartEchartRef === void 0 ? void 0 : chartEchartRef.current);
381
- if (isLoading === true || isWaitingForFirstResize) {
382
- chart === null || chart === void 0 ? void 0 : chart.showLoading({
383
- color: tokens.theme[theme].color.primary.bg.status,
384
- fontFamily: tokens.typography['label'].fontFamily,
385
- fontSize: tokens.typography['label'].fontSize,
386
- fontWeight: tokens.typography['label'].fontWeight,
387
- maskColor: `rgb( from ${tokens.theme[theme].color.neutral.text.inverse} r g b / 0.8)`,
388
- text: 'Loading',
389
- textColor: tokens.theme[theme].color.neutral.text.default,
390
- });
391
- }
392
- else {
393
- chart === null || chart === void 0 ? void 0 : chart.hideLoading();
394
- }
395
- }, [isLoading, isWaitingForFirstResize, theme]);
396
- const legendSeries = useMemo(() => {
397
- var _a;
398
- if (chartEchartRef.current === null || isWaitingForFirstResize) {
399
- return;
400
- }
401
- const chart = getInstanceByDom(chartEchartRef === null || chartEchartRef === void 0 ? void 0 : chartEchartRef.current);
402
- const optionSeries = (_a = initialOption === null || initialOption === void 0 ? void 0 : initialOption.series) !== null && _a !== void 0 ? _a : [];
403
- const optionDataset = initialOption === null || initialOption === void 0 ? void 0 : initialOption.dataset;
404
- const legendSeries = [];
405
- if (Array.isArray(optionSeries)) {
406
- optionSeries.forEach((currentSeries, index) => {
407
- var _a, _b, _c, _d;
408
- if (currentSeries === null) {
409
- return;
410
- }
411
- else if (currentSeries.type === 'line' &&
412
- typeof currentSeries.name === 'string' &&
413
- ((_a = currentSeries.name) === null || _a === void 0 ? void 0 : _a.includes('thresholdLine'))) {
414
- return;
415
- }
416
- else if (currentSeries.type === 'pie') {
417
- const encodedItemName = (_b = currentSeries.encode) === null || _b === void 0 ? void 0 : _b.itemName;
418
- let currentDataset = Array.isArray(optionDataset)
419
- ? optionDataset[0]
420
- : optionDataset;
421
- if (currentSeries.datasetId && Array.isArray(optionDataset)) {
422
- currentDataset = optionDataset.find((ds) => ds.id === currentSeries.datasetId);
423
- }
424
- else if (currentSeries.datasetIndex !== undefined) {
425
- currentDataset = Array.isArray(optionDataset)
426
- ? optionDataset[currentSeries.datasetIndex]
427
- : optionDataset;
428
- }
429
- const firstDatasetRow = Array.isArray(currentDataset === null || currentDataset === void 0 ? void 0 : currentDataset.source)
430
- ? currentDataset === null || currentDataset === void 0 ? void 0 : currentDataset.source[0]
431
- : undefined;
432
- if (!firstDatasetRow) {
433
- return;
434
- }
435
- if (Array.isArray(firstDatasetRow)) {
436
- const firstDatasetRowIndex = firstDatasetRow.findIndex((item) => item === encodedItemName);
437
- if (firstDatasetRowIndex === -1) {
438
- return;
439
- }
440
- const source = currentDataset === null || currentDataset === void 0 ? void 0 : currentDataset.source;
441
- if (!source) {
442
- return;
443
- }
444
- const sourceLength = Array.isArray(source) ? source.length : 0;
445
- const selected = legendSelectedRef.current;
446
- const isAllVisible = Object.values(selected).every((v) => v);
447
- for (let rowIndex = 1; rowIndex < sourceLength; rowIndex++) {
448
- const row = source[rowIndex];
449
- const name = String(row[firstDatasetRowIndex]);
450
- const freshColor = chart === null || chart === void 0 ? void 0 : chart.getVisual({ dataIndexInside: rowIndex - 1, seriesIndex: index }, 'color');
451
- // Only trust getVisual colors when all items are visible.
452
- // When items are deselected, getVisual returns grayed-out
453
- // colors, so we use the cached color from when it was visible.
454
- if (isAllVisible && typeof freshColor === 'string') {
455
- legendColorCacheRef.current.set(name, freshColor);
456
- }
457
- const color = (_c = legendColorCacheRef.current.get(name)) !== null && _c !== void 0 ? _c : (typeof freshColor === 'string' ? freshColor : '#000000');
458
- legendSeries.push({ color, name });
459
- }
460
- }
461
- else {
462
- // TODO: handle dictionary
463
- }
464
- return;
465
- }
466
- else {
467
- const name = Array.isArray(optionSeries)
468
- ? (_d = optionSeries[index]) === null || _d === void 0 ? void 0 : _d.name
469
- : undefined;
470
- if (name === undefined) {
471
- return null;
472
- }
473
- const color = chart === null || chart === void 0 ? void 0 : chart.getVisual({ seriesIndex: index }, 'color');
474
- legendSeries.push({
475
- color: typeof color === 'string' ? color : '#000000',
476
- name: String(name),
477
- });
478
- }
479
- });
480
- }
481
- return legendSeries.filter((currentSeries) => currentSeries !== null);
482
- }, [isWaitingForFirstResize, initialOption]);
483
- if (chartEchartRef.current !== null && !isChartZoomDisabled) {
484
- const chart = getInstanceByDom(chartEchartRef.current);
485
- if (chart) {
486
- // Needs to be re-set on every re-render.
487
- // Sets the selectable zoom area over the chart (not the slider).
488
- chart.dispatchAction({
489
- dataZoomSelectActive: true,
490
- key: 'dataZoomSelect',
491
- type: 'takeGlobalCursor',
492
- });
493
- }
494
- }
495
- return (_jsxs("div", { ref: chartRef, className: "ndl-chart", style: style, children: [_jsx("div", { ref: chartEchartRef }), (legend === null || legend === void 0 ? void 0 : legend.show) && !isWaitingForFirstResize && (_jsx(Legend, { ref: chartLegendRef, wrappingType: legend.wrappingType, series: legendSeries !== null && legendSeries !== void 0 ? legendSeries : [], chartRef: chartEchartRef, selectedRef: legendSelectedRef }))] }));
496
- }
84
+ }, [legend === null || legend === void 0 ? void 0 : legend.show]);
85
+ const chartLayoutClassName = (legend === null || legend === void 0 ? void 0 : legend.show) && !isLegendLayoutReady
86
+ ? 'ndl-chart-layout ndl-chart-layout-hidden'
87
+ : 'ndl-chart-layout';
88
+ return (_jsx(ChartRefsProvider, { children: _jsxs(ChartContainer, { style: style, children: [_jsx("div", { className: chartLayoutClassName, children: _jsx(ChartRender, Object.assign({}, chartProps, { onChartOptionChange: setChartOption, onFirstResizeChange: setIsWaitingForFirstResize })) }), (legend === null || legend === void 0 ? void 0 : legend.show) && (_jsx(ChartLegend, { chartOption: chartOption, isLayoutReady: isLegendLayoutReady, isWaitingForFirstResize: isWaitingForFirstResize, onLayoutReady: handleLegendLayoutReady }))] }) }));
89
+ };
497
90
  //# sourceMappingURL=Chart.js.map