@ytsaurus/ui 2.5.0 → 2.6.0

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 (55) hide show
  1. package/dist/public/build/assets-manifest.json +37 -37
  2. package/dist/public/build/css/{9030.30b67fe6.chunk.css → 3792.a5336147.chunk.css} +1 -1
  3. package/dist/public/build/css/{9030.30b67fe6.chunk.css.map → 3792.a5336147.chunk.css.map} +1 -1
  4. package/dist/public/build/js/2142.9a9a44af.chunk.js +2 -0
  5. package/dist/public/build/js/2142.9a9a44af.chunk.js.map +1 -0
  6. package/dist/public/build/js/3225.0ca5646d.chunk.js +2 -0
  7. package/dist/public/build/js/3225.0ca5646d.chunk.js.map +1 -0
  8. package/dist/public/build/js/{9030.200c7642.chunk.js → 3792.1af8dc36.chunk.js} +2 -2
  9. package/dist/public/build/js/{9030.200c7642.chunk.js.map → 3792.1af8dc36.chunk.js.map} +1 -1
  10. package/dist/public/build/js/3848.db687afa.chunk.js +2 -0
  11. package/dist/public/build/js/3848.db687afa.chunk.js.map +1 -0
  12. package/dist/public/build/js/{9361.4389c6e7.chunk.js → 9361.632ac658.chunk.js} +3 -3
  13. package/dist/public/build/js/9361.632ac658.chunk.js.map +1 -0
  14. package/dist/public/build/js/acl.86dde5b4.chunk.js +2 -0
  15. package/dist/public/build/js/acl.86dde5b4.chunk.js.map +1 -0
  16. package/dist/public/build/js/{chart-kit.6c826f92.chunk.js → chart-kit.bc706a72.chunk.js} +2 -2
  17. package/dist/public/build/js/{chart-kit.6c826f92.chunk.js.map → chart-kit.bc706a72.chunk.js.map} +1 -1
  18. package/dist/public/build/js/{cluster-page-wrapper.24759f54.chunk.js → cluster-page-wrapper.69410672.chunk.js} +2 -2
  19. package/dist/public/build/js/{cluster-page-wrapper.24759f54.chunk.js.map → cluster-page-wrapper.69410672.chunk.js.map} +1 -1
  20. package/dist/public/build/js/{dashboard.5baf76be.chunk.js → dashboard.705aef5e.chunk.js} +2 -2
  21. package/dist/public/build/js/{dashboard.5baf76be.chunk.js.map → dashboard.705aef5e.chunk.js.map} +1 -1
  22. package/dist/public/build/js/{incarnations.db35d3e7.chunk.js → incarnations.b6c8305d.chunk.js} +2 -2
  23. package/dist/public/build/js/incarnations.b6c8305d.chunk.js.map +1 -0
  24. package/dist/public/build/js/main.2691b74a.js +3 -0
  25. package/dist/public/build/js/main.2691b74a.js.map +1 -0
  26. package/dist/public/build/js/navigation.b95d53a4.chunk.js +2 -0
  27. package/dist/public/build/js/navigation.b95d53a4.chunk.js.map +1 -0
  28. package/dist/public/build/js/{runtime.3d99db5c.js → runtime.cd2507d5.js} +2 -2
  29. package/dist/public/build/js/{runtime.3d99db5c.js.map → runtime.cd2507d5.js.map} +1 -1
  30. package/dist/public/build/js/{yt-df-dialog.3c75c1c6.chunk.js → yt-df-dialog.d8b77493.chunk.js} +3 -3
  31. package/dist/public/build/js/yt-df-dialog.d8b77493.chunk.js.map +1 -0
  32. package/dist/public/build/js/yt-queries-list.9b028808.chunk.js +2 -0
  33. package/dist/public/build/js/yt-queries-list.9b028808.chunk.js.map +1 -0
  34. package/dist/public/build/manifest.json +32 -32
  35. package/package.json +2 -2
  36. package/dist/public/build/js/2142.e3f4501e.chunk.js +0 -2
  37. package/dist/public/build/js/2142.e3f4501e.chunk.js.map +0 -1
  38. package/dist/public/build/js/3225.1bafd8e7.chunk.js +0 -2
  39. package/dist/public/build/js/3225.1bafd8e7.chunk.js.map +0 -1
  40. package/dist/public/build/js/3792.87728e87.chunk.js +0 -2
  41. package/dist/public/build/js/3792.87728e87.chunk.js.map +0 -1
  42. package/dist/public/build/js/9361.4389c6e7.chunk.js.map +0 -1
  43. package/dist/public/build/js/acl.ad72cb19.chunk.js +0 -2
  44. package/dist/public/build/js/acl.ad72cb19.chunk.js.map +0 -1
  45. package/dist/public/build/js/incarnations.db35d3e7.chunk.js.map +0 -1
  46. package/dist/public/build/js/main.10db4a06.js +0 -3
  47. package/dist/public/build/js/main.10db4a06.js.map +0 -1
  48. package/dist/public/build/js/navigation.dd0f8fc8.chunk.js +0 -2
  49. package/dist/public/build/js/navigation.dd0f8fc8.chunk.js.map +0 -1
  50. package/dist/public/build/js/yt-df-dialog.3c75c1c6.chunk.js.map +0 -1
  51. package/dist/public/build/js/yt-queries-list.e40d766e.chunk.js +0 -2
  52. package/dist/public/build/js/yt-queries-list.e40d766e.chunk.js.map +0 -1
  53. /package/dist/public/build/js/{9361.4389c6e7.chunk.js.LICENSE.txt → 9361.632ac658.chunk.js.LICENSE.txt} +0 -0
  54. /package/dist/public/build/js/{main.10db4a06.js.LICENSE.txt → main.2691b74a.js.LICENSE.txt} +0 -0
  55. /package/dist/public/build/js/{yt-df-dialog.3c75c1c6.chunk.js.LICENSE.txt → yt-df-dialog.d8b77493.chunk.js.LICENSE.txt} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"js/9030.200c7642.chunk.js","mappings":"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","sources":["webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/i18n/index.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/utils/misc.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/constants/index.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/constants/defaults/axis.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/libs/chart-error/index.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/validation/index.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/utils/cn.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/utils/d3-dispatcher.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/utils/chart/math.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/hooks/useSeries/constants.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/hooks/useSeries/utils.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/libs/format-number/i18n/i18n.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/libs/format-number/index.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/utils/chart/time.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/utils/chart/index.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/utils/chart/text.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/utils/chart/axis.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/utils/chart/series/line.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/components/Axis/AxisY.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/utils/chart/axis-generators/bottom.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/components/Axis/AxisX.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/constants/defaults/legend.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/utils/chart/symbol.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/utils/chart/legend.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/utils/chart/color.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/components/Legend/index.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/components/PlotTitle/index.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/components/Title/index.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/utils/chart/series/waterfall.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/components/Tooltip/DefaultContent.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/components/Tooltip/ChartTooltipContent.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/components/Tooltip/index.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/hooks/useTooltip/index.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/constants/misc.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/utils/chart/get-closest-data.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/hooks/usePrevious/index.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/hooks/useChartOptions/chart.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/hooks/useChartDimensions/utils.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/hooks/useSeries/prepare-legend.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/constants/defaults/series-options.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/hooks/useSeries/prepare-area.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/hooks/useSeries/prepare-bar-y.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/hooks/useSeries/prepare-line.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/hooks/useSeries/prepare-scatter.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/hooks/useSeries/index.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/hooks/useSeries/prepareSeries.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/hooks/useSeries/prepare-pie.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/hooks/useSeries/prepare-bar-x.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/hooks/useSeries/prepare-treemap.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/hooks/useSeries/prepare-waterfall.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/hooks/useSeries/prepare-sankey.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/hooks/useSeries/prepare-options.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/hooks/useAxisScales/index.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/utils/chart/labels.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/hooks/useShapes/HtmlLayer.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/hooks/useShapes/marker.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/hooks/useShapes/utils.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/hooks/useShapes/area/index.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/hooks/useShapes/bar-x/prepare-data.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/hooks/useShapes/bar-x/index.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/hooks/useShapes/bar-y/index.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/hooks/useShapes/line/index.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/hooks/useShapes/pie/index.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/hooks/useShapes/pie/utils.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/hooks/useShapes/pie/prepare-data.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/hooks/useShapes/sankey/index.js","webpack://@ytsaurus/ui/./node_modules/d3-sankey/node_modules/d3-array/src/sum.js","webpack://@ytsaurus/ui/./node_modules/d3-sankey/node_modules/d3-array/src/max.js","webpack://@ytsaurus/ui/./node_modules/d3-sankey/src/align.js","webpack://@ytsaurus/ui/./node_modules/d3-sankey/src/constant.js","webpack://@ytsaurus/ui/./node_modules/d3-sankey/src/sankey.js","webpack://@ytsaurus/ui/./node_modules/d3-sankey/node_modules/d3-path/src/path.js","webpack://@ytsaurus/ui/./node_modules/d3-sankey/node_modules/d3-shape/src/array.js","webpack://@ytsaurus/ui/./node_modules/d3-sankey/node_modules/d3-shape/src/constant.js","webpack://@ytsaurus/ui/./node_modules/d3-sankey/node_modules/d3-shape/src/point.js","webpack://@ytsaurus/ui/./node_modules/d3-sankey/node_modules/d3-shape/src/link/index.js","webpack://@ytsaurus/ui/./node_modules/d3-sankey/src/sankeyLinkHorizontal.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/hooks/useShapes/scatter/prepare-data.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/hooks/useShapes/scatter/index.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/hooks/useShapes/treemap/index.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/hooks/useShapes/waterfall/prepare-data.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/hooks/useShapes/waterfall/index.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/hooks/useShapes/index.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/hooks/useShapes/constants.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/hooks/useShapes/bar-y/prepare-data.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/hooks/useShapes/line/prepare-data.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/hooks/useShapes/area/prepare-data.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/hooks/useShapes/treemap/prepare-data.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/hooks/useShapes/sankey/prepare-data.js","webpack://@ytsaurus/ui/./node_modules/d3-sankey/node_modules/d3-array/src/min.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/hooks/useChartOptions/x-axis.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/hooks/useChartOptions/y-axis.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/components/ChartInner/useChartInnerProps.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/hooks/useChartOptions/index.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/hooks/useChartOptions/title.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/hooks/useChartOptions/tooltip.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/hooks/useChartDimensions/index.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/hooks/useSplit/index.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/components/ChartInner/index.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/components/ChartInner/useChartInnerState.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/components/ChartInner/useChartInnerHandlers.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/components/index.js","webpack://@ytsaurus/ui/./node_modules/afterframe/src/index.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/chartkit/build/utils/performance.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/chartkit/build/components/SplitPane/constants.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/chartkit/build/components/SplitPane/Pane.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/chartkit/build/components/SplitPane/Resizer.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/chartkit/build/components/SplitPane/SplitPane.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/chartkit/build/components/SplitPane/StyledSplitPane.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/chartkit/build/constants/misc.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/chartkit/build/hooks/misc.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/chartkit/build/plugins/d3/renderer/withSplitPane/TooltipContent.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/chartkit/build/plugins/d3/renderer/withSplitPane/useWithSplitPaneState.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/chartkit/build/plugins/d3/renderer/withSplitPane/withSplitPane.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/chartkit/build/plugins/d3/renderer/D3Widget.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/chartkit/build/utils/misc.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/chartkit/build/components/SplitPane/index.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/hooks/useVirtualElementRef/useVirtualElementRef.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/hooks/useResizeObserver/useResizeObserver.js"],"sourcesContent":["import { I18N } from '@gravity-ui/i18n';\nimport en from './keysets/en.json';\nimport ru from './keysets/ru.json';\nconst i18nFactory = new I18N();\ni18nFactory.registerKeysets('en', en);\ni18nFactory.registerKeysets('ru', ru);\ni18nFactory.setLang('en');\ni18nFactory.setFallbackLang('en');\nconst i18n = i18nFactory.i18n.bind(i18nFactory);\nexport { i18nFactory, i18n };\n","export function randomString(length, chars) {\n let result = '';\n for (let i = length; i > 0; --i) {\n result += chars[Math.floor(Math.random() * chars.length)];\n }\n return result;\n}\nexport function getUniqId() {\n return `gravity-chart.${randomString(5, '0123456789abcdefghijklmnopqrstuvwxyz')}`;\n}\n/**\n * Checks Macintosh hardware is used.\n *\n * Note: there is no better way to get this information as using depricated property `navigator.platform`.\n *\n * More details [here](https://developer.mozilla.org/en-US/docs/Web/API/Navigator/platform#examples).\n */\nexport function isMacintosh() {\n return typeof navigator === 'undefined' ? false : /Mac|iP(hone|[oa]d)/.test(navigator.platform);\n}\n","export * from './defaults';\nexport * from './misc';\nexport const SeriesType = {\n Area: 'area',\n BarX: 'bar-x',\n BarY: 'bar-y',\n Line: 'line',\n Pie: 'pie',\n Scatter: 'scatter',\n Treemap: 'treemap',\n Waterfall: 'waterfall',\n Sankey: 'sankey',\n};\nexport var DashStyle;\n(function (DashStyle) {\n DashStyle[\"Dash\"] = \"Dash\";\n DashStyle[\"DashDot\"] = \"DashDot\";\n DashStyle[\"Dot\"] = \"Dot\";\n DashStyle[\"LongDash\"] = \"LongDash\";\n DashStyle[\"LongDashDot\"] = \"LongDashDot\";\n DashStyle[\"LongDashDotDot\"] = \"LongDashDotDot\";\n DashStyle[\"ShortDash\"] = \"ShortDash\";\n DashStyle[\"ShortDashDot\"] = \"ShortDashDot\";\n DashStyle[\"ShortDashDotDot\"] = \"ShortDashDotDot\";\n DashStyle[\"ShortDot\"] = \"ShortDot\";\n DashStyle[\"Solid\"] = \"Solid\";\n})(DashStyle || (DashStyle = {}));\nexport var SymbolType;\n(function (SymbolType) {\n SymbolType[\"Circle\"] = \"circle\";\n SymbolType[\"Diamond\"] = \"diamond\";\n SymbolType[\"Square\"] = \"square\";\n SymbolType[\"Triangle\"] = \"triangle\";\n SymbolType[\"TriangleDown\"] = \"triangle-down\";\n})(SymbolType || (SymbolType = {}));\nexport var LineCap;\n(function (LineCap) {\n LineCap[\"Butt\"] = \"butt\";\n LineCap[\"Round\"] = \"round\";\n LineCap[\"Square\"] = \"square\";\n LineCap[\"None\"] = \"none\";\n})(LineCap || (LineCap = {}));\nexport var LayoutAlgorithm;\n(function (LayoutAlgorithm) {\n LayoutAlgorithm[\"Binary\"] = \"binary\";\n LayoutAlgorithm[\"Dice\"] = \"dice\";\n LayoutAlgorithm[\"Slice\"] = \"slice\";\n LayoutAlgorithm[\"SliceDice\"] = \"slice-dice\";\n LayoutAlgorithm[\"Squarify\"] = \"squarify\";\n})(LayoutAlgorithm || (LayoutAlgorithm = {}));\nexport const DEFAULT_PALETTE = [\n '#4DA2F1',\n '#FF3D64',\n '#8AD554',\n '#FFC636',\n '#FFB9DD',\n '#84D1EE',\n '#FF91A1',\n '#54A520',\n '#DB9100',\n '#BA74B3',\n '#1F68A9',\n '#ED65A9',\n '#0FA08D',\n '#FF7E00',\n '#E8B0A4',\n '#52A6C5',\n '#BE2443',\n '#70C1AF',\n '#FFB46C',\n '#DCA3D7',\n];\nexport const DEFAULT_AXIS_LABEL_FONT_SIZE = '11px';\n","export const axisLabelsDefaults = {\n margin: 10,\n padding: 10,\n fontSize: 11,\n maxWidth: 80,\n};\nconst axisTitleDefaults = {\n text: '',\n margin: 0,\n style: {\n fontSize: '14px',\n },\n align: 'center',\n maxRowCount: 1,\n};\nexport const xAxisTitleDefaults = Object.assign(Object.assign({}, axisTitleDefaults), { margin: 4 });\nexport const yAxisTitleDefaults = Object.assign(Object.assign({}, axisTitleDefaults), { margin: 8 });\nexport const DEFAULT_AXIS_TYPE = 'linear';\n","export const CHART_ERROR_CODE = {\n NO_DATA: 'ERR.CK.NO_DATA',\n INVALID_DATA: 'ERR.CK.INVALID_DATA',\n UNKNOWN: 'ERR.CK.UNKNOWN_ERROR',\n};\nexport class ChartError extends Error {\n constructor({ originalError, message, code = CHART_ERROR_CODE.UNKNOWN } = {}) {\n super(message);\n this.isCustomError = true;\n this.code = code;\n if (originalError) {\n this.name = originalError.name;\n this.stack = originalError.stack;\n }\n }\n}\nexport const isCustomError = (error) => {\n return error instanceof Error && 'isCustomError' in error;\n};\n","import get from 'lodash/get';\nimport isEmpty from 'lodash/isEmpty';\nimport { DEFAULT_AXIS_TYPE, SeriesType } from '../constants';\nimport { i18n } from '../i18n';\nimport { CHART_ERROR_CODE, ChartError } from '../libs';\nconst AVAILABLE_SERIES_TYPES = Object.values(SeriesType);\nconst validateXYSeries = (args) => {\n const { series, xAxis, yAxis = [] } = args;\n const yAxisIndex = get(series, 'yAxis', 0);\n const seriesYAxis = yAxis[yAxisIndex];\n if (yAxisIndex !== 0 && typeof seriesYAxis === 'undefined') {\n throw new ChartError({\n code: CHART_ERROR_CODE.INVALID_DATA,\n message: i18n('error', 'label_invalid-y-axis-index', {\n index: yAxisIndex,\n }),\n });\n }\n const xType = get(xAxis, 'type', DEFAULT_AXIS_TYPE);\n const yType = get(seriesYAxis, 'type', DEFAULT_AXIS_TYPE);\n series.data.forEach(({ x, y }) => {\n switch (xType) {\n case 'category': {\n if (typeof x !== 'string' && typeof x !== 'number') {\n throw new ChartError({\n code: CHART_ERROR_CODE.INVALID_DATA,\n message: i18n('error', 'label_invalid-axis-category-data-point', {\n key: 'x',\n seriesName: series.name,\n }),\n });\n }\n break;\n }\n case 'datetime': {\n if (typeof x !== 'number') {\n throw new ChartError({\n code: CHART_ERROR_CODE.INVALID_DATA,\n message: i18n('error', 'label_invalid-axis-datetime-data-point', {\n key: 'x',\n seriesName: series.name,\n }),\n });\n }\n break;\n }\n case 'linear': {\n if (typeof x !== 'number' && x !== null) {\n throw new ChartError({\n code: CHART_ERROR_CODE.INVALID_DATA,\n message: i18n('error', 'label_invalid-axis-linear-data-point', {\n key: 'x',\n seriesName: series.name,\n }),\n });\n }\n }\n }\n switch (yType) {\n case 'category': {\n if (typeof y !== 'string' && typeof y !== 'number') {\n throw new ChartError({\n code: CHART_ERROR_CODE.INVALID_DATA,\n message: i18n('error', 'label_invalid-axis-category-data-point', {\n key: 'y',\n seriesName: series.name,\n }),\n });\n }\n break;\n }\n case 'datetime': {\n if (typeof y !== 'number') {\n throw new ChartError({\n code: CHART_ERROR_CODE.INVALID_DATA,\n message: i18n('error', 'label_invalid-axis-datetime-data-point', {\n key: 'y',\n seriesName: series.name,\n }),\n });\n }\n break;\n }\n case 'linear': {\n if (typeof y !== 'number' && y !== null) {\n throw new ChartError({\n code: CHART_ERROR_CODE.INVALID_DATA,\n message: i18n('error', 'label_invalid-axis-linear-data-point', {\n key: 'y',\n seriesName: series.name,\n }),\n });\n }\n }\n }\n });\n};\nconst validatePieSeries = ({ series }) => {\n series.data.forEach(({ value }) => {\n if (typeof value !== 'number') {\n throw new ChartError({\n code: CHART_ERROR_CODE.INVALID_DATA,\n message: i18n('error', 'label_invalid-pie-data-value'),\n });\n }\n });\n};\nconst validateStacking = ({ series }) => {\n const availableStackingValues = ['normal', 'percent'];\n if (series.stacking && !availableStackingValues.includes(series.stacking)) {\n throw new ChartError({\n code: CHART_ERROR_CODE.INVALID_DATA,\n message: i18n('error', 'label_invalid-series-property', {\n key: 'stacking',\n values: availableStackingValues,\n }),\n });\n }\n};\nconst validateTreemapSeries = ({ series }) => {\n const parentIds = {};\n series.data.forEach((d) => {\n if (d.parentId && !parentIds[d.parentId]) {\n parentIds[d.parentId] = true;\n }\n });\n series.data.forEach((d) => {\n let idOrName = d.id;\n if (!idOrName) {\n idOrName = Array.isArray(d.name) ? d.name.join() : d.name;\n }\n if (parentIds[idOrName] && typeof d.value === 'number') {\n throw new ChartError({\n code: CHART_ERROR_CODE.INVALID_DATA,\n message: i18n('error', 'label_invalid-treemap-redundant-value', {\n id: d.id,\n name: d.name,\n }),\n });\n }\n if (!parentIds[idOrName] && typeof d.value !== 'number') {\n throw new ChartError({\n code: CHART_ERROR_CODE.INVALID_DATA,\n message: i18n('error', 'label_invalid-treemap-missing-value', {\n id: d.id,\n name: d.name,\n }),\n });\n }\n });\n};\nconst validateSeries = (args) => {\n const { series, xAxis, yAxis } = args;\n if (!AVAILABLE_SERIES_TYPES.includes(series.type)) {\n throw new ChartError({\n code: CHART_ERROR_CODE.INVALID_DATA,\n message: i18n('error', 'label_invalid-series-type', {\n types: AVAILABLE_SERIES_TYPES.join(', '),\n }),\n });\n }\n switch (series.type) {\n case 'area':\n case 'bar-y':\n case 'bar-x': {\n validateXYSeries({ series, xAxis, yAxis });\n validateStacking({ series });\n break;\n }\n case 'line':\n case 'scatter': {\n validateXYSeries({ series, xAxis, yAxis });\n break;\n }\n case 'pie': {\n validatePieSeries({ series });\n break;\n }\n case 'treemap': {\n validateTreemapSeries({ series });\n }\n }\n};\nconst countSeriesByType = (args) => {\n const { series, type } = args;\n let count = 0;\n series.forEach((s) => {\n if (s.type === type) {\n count += 1;\n }\n });\n return count;\n};\nexport const validateData = (data) => {\n if (isEmpty(data) || isEmpty(data.series) || isEmpty(data.series.data)) {\n throw new ChartError({\n code: CHART_ERROR_CODE.NO_DATA,\n message: i18n('error', 'label_no-data'),\n });\n }\n if (data.series.data.some((s) => isEmpty(s.data))) {\n throw new ChartError({\n code: CHART_ERROR_CODE.INVALID_DATA,\n message: 'You should specify data for all series',\n });\n }\n const treemapSeriesCount = countSeriesByType({\n series: data.series.data,\n type: SeriesType.Treemap,\n });\n if (treemapSeriesCount > 1) {\n throw new ChartError({\n code: CHART_ERROR_CODE.INVALID_DATA,\n message: 'It looks like you are trying to define more than one \"treemap\" series.',\n });\n }\n data.series.data.forEach((series) => {\n validateSeries({ series, yAxis: data.yAxis, xAxis: data.xAxis });\n });\n};\n","import { withNaming } from '@bem-react/classname';\nexport const CN_NAMESPACE = 'gcharts-';\nexport const cn = withNaming({ e: '__', m: '_' });\nexport const block = withNaming({ n: CN_NAMESPACE, e: '__', m: '_' });\n","import { dispatch } from 'd3';\nexport const EventType = {\n CLICK_CHART: 'click-chart',\n HOVER_SHAPE: 'hover-shape',\n POINTERMOVE_CHART: 'pointermove-chart',\n};\nexport const getD3Dispatcher = () => {\n return dispatch(EventType.CLICK_CHART, EventType.HOVER_SHAPE, EventType.POINTERMOVE_CHART);\n};\n","import isNil from 'lodash/isNil';\nconst isStringValueInPercent = (value = '') => {\n return value.endsWith('%') && !Number.isNaN(Number.parseFloat(value));\n};\nconst isStringValueInPixel = (value = '') => {\n return value.endsWith('px') && !Number.isNaN(Number.parseFloat(value));\n};\n/**\n * Calculates a numeric property based on the given arguments.\n *\n * @param {Object} args - The arguments for the calculation.\n * @param {string | number | null} args.value - The value to calculate the property for.\n * @param {number} args.base - The base value to use in the calculation.\n * @return {number | undefined} The calculated numeric property, or undefined if the value is invalid.\n * @example\n * const result1 = calculateNumericProperty({value: 1});\n * console.log(result1); // Output: 1\n * const result2 = calculateNumericProperty({value: '10px'});\n * console.log(result2); // Output: 10\n * const result3 = calculateNumericProperty({value: '50%', base: 200});\n * console.log(result3); // Output: 100\n * const result4 = calculateNumericProperty({value: '50%'});\n * console.log(result4); // Output: undefined\n * const result5 = calculateNumericProperty({value: 'invalid_value'});\n * console.log(result5); // Output: undefined\n */\nexport const calculateNumericProperty = (args) => {\n const { value = '', base } = args;\n if (isNil(value)) {\n return undefined;\n }\n if (typeof value === 'string') {\n if (isStringValueInPercent(value) && typeof base === 'number') {\n const fraction = Number.parseFloat(value) / 100;\n return base * fraction;\n }\n if (isStringValueInPixel(value)) {\n return Number.parseFloat(value);\n }\n return undefined;\n }\n return value;\n};\nexport function calculateCos(deg, precision = 2) {\n const factor = Math.pow(10, precision);\n return Math.floor(Math.cos((Math.PI / 180) * deg) * factor) / factor;\n}\nexport function calculateSin(deg, precision = 2) {\n const factor = Math.pow(10, precision);\n return Math.floor(Math.sin((Math.PI / 180) * deg) * factor) / factor;\n}\n","export const DEFAULT_LEGEND_SYMBOL_SIZE = 8;\nexport const DEFAULT_LEGEND_SYMBOL_PADDING = 5;\nexport const DEFAULT_DATALABELS_PADDING = 5;\nexport const DEFAULT_DATALABELS_STYLE = {\n fontSize: '11px',\n fontWeight: 'bold',\n fontColor: 'var(--d3-data-labels)',\n};\nexport const DEFAULT_HALO_OPTIONS = {\n enabled: true,\n opacity: 0.25,\n size: 6,\n};\nexport const DEFAULT_POINT_MARKER_OPTIONS = {\n radius: 4,\n borderColor: '',\n borderWidth: 0,\n symbol: 'circle',\n};\n","import memoize from 'lodash/memoize';\nimport { SymbolType } from '../../constants';\nimport { getUniqId } from '../../utils/misc';\nimport { DEFAULT_LEGEND_SYMBOL_PADDING, DEFAULT_LEGEND_SYMBOL_SIZE } from './constants';\nexport const getActiveLegendItems = (series) => {\n return series.reduce((acc, s) => {\n if (s.legend.enabled && s.visible) {\n acc.push(s.name);\n }\n return acc;\n }, []);\n};\nexport const getAllLegendItems = (series) => {\n return series.map((s) => s.name);\n};\nexport function prepareLegendSymbol(series, symbolType) {\n var _a;\n const symbolOptions = ((_a = series.legend) === null || _a === void 0 ? void 0 : _a.symbol) || {};\n return {\n shape: 'symbol',\n symbolType: symbolType || SymbolType.Circle,\n width: (symbolOptions === null || symbolOptions === void 0 ? void 0 : symbolOptions.width) || DEFAULT_LEGEND_SYMBOL_SIZE,\n padding: (symbolOptions === null || symbolOptions === void 0 ? void 0 : symbolOptions.padding) || DEFAULT_LEGEND_SYMBOL_PADDING,\n };\n}\nconst getCommonStackId = memoize(getUniqId);\nexport function getSeriesStackId(series) {\n let stackId = series.stackId;\n if (!stackId) {\n stackId = series.stacking ? getCommonStackId() : getUniqId();\n }\n return stackId;\n}\n","import { I18N } from '@gravity-ui/i18n';\nconst i18nInstance = new I18N();\ni18nInstance.setLang('ru');\nconst makeInstance = (keysetName, keysetsData) => {\n Object.entries(keysetsData).forEach(([key, value]) => i18nInstance.registerKeysets(key, value));\n return i18nInstance.i18n.bind(i18nInstance, keysetName);\n};\nexport { i18nInstance, makeInstance };\n","import { i18nInstance, makeInstance } from './i18n/i18n';\nimport en from './i18n/en.json';\nimport ru from './i18n/ru.json';\nconst i18n = makeInstance('units', { ru, en });\nfunction getUnitRate(value, exponent, unitsI18nKeys) {\n let resultUnitRate = 1;\n while (Math.abs(value / Math.pow(exponent, resultUnitRate)) >= 1 &&\n resultUnitRate < 10 &&\n i18n(unitsI18nKeys[resultUnitRate])) {\n resultUnitRate++;\n }\n return resultUnitRate - 1;\n}\nconst unitFormatter = ({ exponent, unitsI18nKeys, unitDelimiterI18nKey, }) => {\n return function formatUnit(value, options = {}) {\n const { precision, unitRate, showRankDelimiter = true, lang } = options;\n const i18nLang = i18nInstance.lang;\n if (lang) {\n i18nInstance.setLang(lang);\n }\n const resultUnitRate = typeof unitRate === 'number' ? unitRate : getUnitRate(value, exponent, unitsI18nKeys);\n let result = value / Math.pow(exponent, resultUnitRate);\n if (typeof precision === 'number') {\n result = Number(result.toFixed(precision));\n }\n else if (precision === 'auto' && result % 1 !== 0) {\n result = Number(result.toFixed(Math.abs(result) > 1 ? 2 : 4));\n }\n result = new Intl.NumberFormat(lang !== null && lang !== void 0 ? lang : i18nLang, {\n minimumFractionDigits: typeof precision === 'number' ? precision : 0,\n maximumFractionDigits: 20,\n useGrouping: showRankDelimiter,\n }).format(result);\n const unit = i18n(unitsI18nKeys[resultUnitRate]);\n const delimiter = i18n(unitDelimiterI18nKey);\n i18nInstance.setLang(i18nLang);\n return `${result}${delimiter}${unit}`;\n };\n};\nexport const formatBytes = unitFormatter({\n exponent: 1024,\n unitDelimiterI18nKey: 'value_space-delimiter',\n unitsI18nKeys: ['value_short-bytes', 'value_short-kilobytes', 'value_short-megabytes'],\n});\nexport const formatDuration = unitFormatter({\n exponent: 1000,\n unitDelimiterI18nKey: 'value_space-delimiter',\n unitsI18nKeys: ['value_short-milliseconds', 'value_short-seconds', 'value_short-minutes'],\n});\nconst BASE_NUMBER_FORMAT_UNIT_KEYS = [\n 'value_short-empty',\n 'value_short-k',\n 'value_short-m',\n 'value_short-b',\n 'value_short-t',\n];\nconst baseFormatNumber = unitFormatter({\n exponent: 1000,\n unitDelimiterI18nKey: 'value_number-delimiter',\n unitsI18nKeys: BASE_NUMBER_FORMAT_UNIT_KEYS,\n});\nexport const getNumberUnitRate = (value) => getUnitRate(value, 1000, BASE_NUMBER_FORMAT_UNIT_KEYS);\nconst NUMBER_UNIT_RATE_BY_UNIT = {\n default: 0,\n auto: undefined,\n k: 1,\n m: 2,\n b: 3,\n t: 4,\n};\nexport const formatNumber = (value, options = {}) => {\n if (Number.isNaN(value) || Number.isNaN(Number(value))) {\n return new Intl.NumberFormat('en').format(Number(value));\n }\n const { format = 'number', multiplier = 1, prefix = '', postfix = '', unit, unitRate, labelMode, } = options;\n let changedMultiplier = multiplier;\n let prePostfix = '';\n if (format === 'percent') {\n changedMultiplier = 100;\n prePostfix = '%';\n }\n if (labelMode === 'percent') {\n prePostfix = '%';\n }\n const formattedValue = baseFormatNumber(Number(value) * changedMultiplier, Object.assign(Object.assign({}, options), { unitRate: unitRate !== null && unitRate !== void 0 ? unitRate : NUMBER_UNIT_RATE_BY_UNIT[unit !== null && unit !== void 0 ? unit : 'default'] }));\n return `${prefix}${formattedValue}${prePostfix}${postfix}`;\n};\n","export const TIME_UNITS = {\n millisecond: 1,\n second: 1000,\n minute: 60000,\n hour: 3600000,\n day: 24 * 3600000,\n week: 7 * 24 * 3600000,\n month: 28 * 24 * 3600000,\n year: 364 * 24 * 3600000,\n};\nexport const DATETIME_LABEL_FORMATS = {\n millisecond: 'DD.MM.YY HH:mm:ss.SSS',\n second: 'DD.MM.YY HH:mm:ss',\n minute: 'DD.MM.YY HH:mm',\n hour: 'DD.MM.YY HH:mm',\n day: 'DD.MM.YY',\n week: 'DD.MM.YY',\n month: \"MMM 'YY\",\n year: 'YYYY',\n};\nfunction getTimeUnit(range) {\n const units = Object.keys(TIME_UNITS);\n const index = units.findIndex((unit) => range < TIME_UNITS[unit]);\n return index === -1 ? 'year' : units[index - 1];\n}\nexport function getDefaultDateFormat(range) {\n if (range) {\n const unit = getTimeUnit(range);\n if (unit in DATETIME_LABEL_FORMATS) {\n return DATETIME_LABEL_FORMATS[unit];\n }\n }\n return DATETIME_LABEL_FORMATS.day;\n}\n","import { dateTime } from '@gravity-ui/date-utils';\nimport { group, select } from 'd3';\nimport get from 'lodash/get';\nimport isNil from 'lodash/isNil';\nimport { DEFAULT_AXIS_LABEL_FONT_SIZE } from '../../constants';\nimport { getSeriesStackId } from '../../hooks/useSeries/utils';\nimport { formatNumber, getNumberUnitRate } from '../../libs/format-number';\nimport { getDefaultDateFormat } from './time';\nexport * from './math';\nexport * from './text';\nexport * from './time';\nexport * from './axis';\nexport * from './labels';\nexport * from './legend';\nexport * from './symbol';\nexport * from './series';\nexport * from './color';\nconst CHARTS_WITHOUT_AXIS = ['pie', 'treemap', 'sankey'];\nexport const CHART_SERIES_WITH_VOLUME_ON_Y_AXIS = [\n 'bar-x',\n 'area',\n 'waterfall',\n];\nexport const CHART_SERIES_WITH_VOLUME_ON_X_AXIS = ['bar-y'];\n/**\n * Checks whether the series should be drawn with axes.\n *\n * @param series - The series object to check.\n * @returns `true` if the series should be drawn with axes, `false` otherwise.\n */\nexport function isAxisRelatedSeries(series) {\n return !CHARTS_WITHOUT_AXIS.includes(series.type);\n}\nexport function isSeriesWithNumericalXValues(series) {\n return isAxisRelatedSeries(series);\n}\nexport function isSeriesWithNumericalYValues(series) {\n return isAxisRelatedSeries(series);\n}\nexport function isSeriesWithCategoryValues(series) {\n return isAxisRelatedSeries(series);\n}\nfunction getDomainDataForStackedSeries(seriesList, keyAttr = 'x', valueAttr = 'y') {\n const acc = [];\n const stackedSeries = group(seriesList, getSeriesStackId);\n Array.from(stackedSeries).forEach(([_stackId, seriesStack]) => {\n const values = {};\n seriesStack.forEach((singleSeries) => {\n const data = new Map();\n singleSeries.data.forEach((point) => {\n const key = String(point[keyAttr]);\n let value = 0;\n if (valueAttr in point && typeof point[valueAttr] === 'number') {\n value = point[valueAttr];\n }\n if (data.has(key)) {\n value = Math.max(value, data.get(key));\n }\n data.set(key, value);\n });\n Array.from(data).forEach(([key, value]) => {\n values[key] = (values[key] || 0) + value;\n });\n });\n acc.push(...Object.values(values));\n });\n return acc;\n}\nexport const getDomainDataXBySeries = (series) => {\n const groupedSeries = group(series, (item) => item.type);\n return Array.from(groupedSeries).reduce((acc, [type, seriesList]) => {\n switch (type) {\n case 'bar-y': {\n acc.push(...getDomainDataForStackedSeries(seriesList, 'y', 'x'));\n break;\n }\n default: {\n seriesList.filter(isSeriesWithNumericalXValues).forEach((s) => {\n acc.push(...s.data.map((d) => d.x));\n });\n }\n }\n return acc;\n }, []);\n};\nexport function getDefaultMaxXAxisValue(series) {\n if (series.some((s) => s.type === 'bar-y')) {\n return 0;\n }\n return undefined;\n}\nexport const getDomainDataYBySeries = (series) => {\n const groupedSeries = group(series, (item) => item.type);\n return Array.from(groupedSeries).reduce((acc, [type, seriesList]) => {\n switch (type) {\n case 'area':\n case 'bar-x': {\n acc.push(...getDomainDataForStackedSeries(seriesList));\n break;\n }\n case 'waterfall': {\n let yValue = 0;\n seriesList.forEach((s) => {\n s.data.forEach((d) => {\n yValue += Number(d.y) || 0;\n acc.push(yValue);\n });\n });\n break;\n }\n default: {\n seriesList.filter(isSeriesWithNumericalYValues).forEach((s) => {\n acc.push(...s.data.map((d) => d.y));\n });\n }\n }\n return acc;\n }, []);\n};\n// Uses to get all series names array (except `pie` charts)\nexport const getSeriesNames = (series) => {\n return series.reduce((acc, s) => {\n if ('name' in s && typeof s.name === 'string') {\n acc.push(s.name);\n }\n return acc;\n }, []);\n};\nexport const getOnlyVisibleSeries = (series) => {\n return series.filter((s) => s.visible);\n};\nexport const parseTransformStyle = (style) => {\n var _a;\n if (!style) {\n return {};\n }\n const stringifiedValue = ((_a = style.match(/\\((.*?)\\)/)) === null || _a === void 0 ? void 0 : _a[1]) || '';\n const [xString, yString] = stringifiedValue.split(',');\n const x = Number.isNaN(Number(xString)) ? undefined : Number(xString);\n const y = Number.isNaN(Number(yString)) ? undefined : Number(yString);\n return { x, y };\n};\nexport const formatAxisTickLabel = (args) => {\n const { axis, value, step } = args;\n switch (axis.type) {\n case 'category': {\n return value;\n }\n case 'datetime': {\n const date = value;\n const format = axis.labels.dateFormat || getDefaultDateFormat(step);\n return dateTime({ input: date }).format(format);\n }\n case 'linear':\n default: {\n const numberFormat = Object.assign({ unitRate: value && step ? getNumberUnitRate(step) : undefined }, axis.labels.numberFormat);\n return formatNumber(value, numberFormat);\n }\n }\n};\n/**\n * Calculates the height of a text element in a horizontal SVG layout.\n *\n * @param {Object} args - The arguments for the function.\n * @param {string} args.text - The text to be measured.\n * @param {Partial<BaseTextStyle>} args.style - Optional style properties for the text element.\n * @return {number} The height of the text element.\n */\nexport const getHorisontalSvgTextHeight = (args) => {\n var _a;\n const { text, style } = args;\n const container = select(document.body).append('svg');\n const textSelection = container.append('text').text(text);\n const fontSize = get(style, 'fontSize', DEFAULT_AXIS_LABEL_FONT_SIZE);\n if (fontSize) {\n textSelection.style('font-size', fontSize).style('alignment-baseline', 'after-edge');\n }\n const height = ((_a = textSelection.node()) === null || _a === void 0 ? void 0 : _a.getBoundingClientRect().height) || 0;\n container.remove();\n return height;\n};\nconst extractCategoryValue = (args) => {\n const { axisDirection, categories, data } = args;\n const dataCategory = get(data, axisDirection);\n let categoryValue;\n if ('category' in data && data.category) {\n categoryValue = data.category;\n }\n if (typeof dataCategory === 'string') {\n categoryValue = dataCategory;\n }\n if (typeof dataCategory === 'number') {\n categoryValue = categories[dataCategory];\n }\n if (isNil(categoryValue)) {\n throw new Error('It seems you are trying to get non-existing category value');\n }\n return categoryValue;\n};\nexport const getDataCategoryValue = (args) => {\n const { axisDirection, categories, data } = args;\n const categoryValue = extractCategoryValue({ axisDirection, categories, data });\n return categoryValue;\n};\nexport function getClosestPointsRange(axis, points) {\n if (axis.type === 'category') {\n return undefined;\n }\n return points[1] - points[0];\n}\n","import { select } from 'd3-selection';\nexport function handleOverflowingText(tSpan, maxWidth) {\n var _a, _b, _c;\n if (!tSpan) {\n return;\n }\n const svg = tSpan.closest('svg');\n if (!svg) {\n return;\n }\n const textNode = tSpan.closest('text');\n const angle = ((_a = Array.from((textNode === null || textNode === void 0 ? void 0 : textNode.transform.baseVal) || []).find((item) => item.angle)) === null || _a === void 0 ? void 0 : _a.angle) || 0;\n const revertRotation = svg.createSVGTransform();\n revertRotation.setRotate(-angle, 0, 0);\n textNode === null || textNode === void 0 ? void 0 : textNode.transform.baseVal.appendItem(revertRotation);\n let text = tSpan.textContent || '';\n let textLength = ((_b = tSpan.getBoundingClientRect()) === null || _b === void 0 ? void 0 : _b.width) || 0;\n while (textLength > maxWidth && text.length > 1) {\n text = text.slice(0, -1);\n tSpan.textContent = text + '…';\n textLength = ((_c = tSpan.getBoundingClientRect()) === null || _c === void 0 ? void 0 : _c.width) || 0;\n }\n textNode === null || textNode === void 0 ? void 0 : textNode.transform.baseVal.removeItem((textNode === null || textNode === void 0 ? void 0 : textNode.transform.baseVal.length) - 1);\n}\nexport function setEllipsisForOverflowText(selection, maxWidth) {\n const text = selection.text();\n selection.text(null).append('title').text(text);\n const tSpan = selection.append('tspan').text(text).style('alignment-baseline', 'inherit');\n handleOverflowingText(tSpan.node(), maxWidth);\n}\nexport function setEllipsisForOverflowTexts(selection, maxWidth) {\n selection.each(function (datum) {\n const textMaxWidth = typeof maxWidth === 'function' ? maxWidth(datum) : maxWidth;\n setEllipsisForOverflowText(select(this), textMaxWidth);\n });\n}\nexport function hasOverlappingLabels({ width, labels, padding = 0, style, }) {\n const maxWidth = (width - padding * (labels.length - 1)) / labels.length;\n const textElement = select(document.body)\n .append('text')\n .style('font-size', (style === null || style === void 0 ? void 0 : style.fontSize) || '');\n const result = labels.some((label) => {\n var _a, _b;\n const textWidth = ((_b = (_a = textElement.text(label).node()) === null || _a === void 0 ? void 0 : _a.getBoundingClientRect()) === null || _b === void 0 ? void 0 : _b.width) || 0;\n return textWidth > maxWidth;\n });\n textElement.remove();\n return result;\n}\nfunction renderLabels(selection, { labels, style = {}, attrs = {}, }) {\n const text = selection.append('g').append('text');\n text.style('font-size', style.fontSize || '');\n text.style('font-weight', style.fontWeight || '');\n Object.entries(attrs).forEach(([name, value]) => {\n text.attr(name, value);\n });\n text.selectAll('tspan')\n .data(labels)\n .enter()\n .append('tspan')\n .attr('x', 0)\n .attr('dy', 0)\n .text((d) => d);\n return text;\n}\nexport function getLabelsSize({ labels, style, rotation, html, }) {\n var _a, _b, _c;\n if (!labels.filter(Boolean).length) {\n return { maxHeight: 0, maxWidth: 0 };\n }\n const container = select(document.body).append('div');\n // TODO: Why do we need this styles?\n // .attr('class', 'chartkit chartkit-theme_common');\n const result = { maxHeight: 0, maxWidth: 0 };\n let labelWrapper;\n if (html) {\n labelWrapper = container.append('div').style('position', 'absolute').node();\n const { height, width } = labels.reduce((acc, l) => {\n var _a, _b;\n if (labelWrapper) {\n labelWrapper.innerHTML = l;\n }\n const rect = labelWrapper === null || labelWrapper === void 0 ? void 0 : labelWrapper.getBoundingClientRect();\n return {\n width: Math.max(acc.width, (_a = rect === null || rect === void 0 ? void 0 : rect.width) !== null && _a !== void 0 ? _a : 0),\n height: Math.max(acc.height, (_b = rect === null || rect === void 0 ? void 0 : rect.height) !== null && _b !== void 0 ? _b : 0),\n };\n }, { height: 0, width: 0 });\n result.maxWidth = width;\n result.maxHeight = height;\n }\n else {\n const svg = container.append('svg');\n const textSelection = renderLabels(svg, { labels, style });\n if (rotation) {\n textSelection\n .attr('text-anchor', rotation > 0 ? 'start' : 'end')\n .style('transform', `rotate(${rotation}deg)`);\n }\n const rect = (_a = svg.select('g').node()) === null || _a === void 0 ? void 0 : _a.getBoundingClientRect();\n result.maxWidth = (_b = rect === null || rect === void 0 ? void 0 : rect.width) !== null && _b !== void 0 ? _b : 0;\n result.maxHeight = (_c = rect === null || rect === void 0 ? void 0 : rect.height) !== null && _c !== void 0 ? _c : 0;\n }\n container.remove();\n return result;\n}\nexport function wrapText(args) {\n const { text, style, width } = args;\n const height = getLabelsSize({\n labels: [text],\n style: style,\n }).maxHeight;\n // @ts-ignore\n const segmenter = new Intl.Segmenter([], { granularity: 'word' });\n const segments = Array.from(segmenter.segment(text));\n return segments.reduce((acc, s) => {\n const item = s;\n if (!acc.length) {\n acc.push({\n text: '',\n y: acc.length * height,\n });\n }\n let lastRow = acc[acc.length - 1];\n if (item.isWordLike &&\n getLabelsSize({\n labels: [lastRow.text + item.segment],\n style,\n }).maxWidth > width) {\n lastRow = {\n text: '',\n y: acc.length * height,\n };\n acc.push(lastRow);\n }\n lastRow.text += item.segment;\n return acc;\n }, []);\n}\n","import { wrapText } from './text';\nexport function getTicksCount({ axis, range }) {\n let ticksCount;\n if (axis.ticks.pixelInterval) {\n ticksCount = Math.ceil(range / axis.ticks.pixelInterval);\n }\n return ticksCount;\n}\nexport function isBandScale(scale) {\n return 'bandwidth' in scale && typeof scale.bandwidth === 'function';\n}\nexport function getScaleTicks(scale, ticksCount) {\n return 'ticks' in scale && typeof scale.ticks === 'function'\n ? scale.ticks(ticksCount)\n : scale.domain();\n}\nexport function getXAxisOffset() {\n return typeof window !== 'undefined' && window.devicePixelRatio > 1 ? 0 : 0.5;\n}\nfunction number(scale) {\n return (d) => Number(scale(d));\n}\nfunction center(scale, offset) {\n offset = Math.max(0, scale.bandwidth() - offset * 2) / 2;\n if (scale.round()) {\n offset = Math.round(offset);\n }\n return (d) => Number(scale(d)) + offset;\n}\nexport function getXTickPosition({ scale, offset }) {\n return isBandScale(scale) ? center(scale.copy(), offset) : number(scale.copy());\n}\nexport function getXAxisItems({ scale, count, maxCount, }) {\n let values = getScaleTicks(scale, count);\n if (maxCount && values.length > maxCount) {\n const step = Math.ceil(values.length / maxCount);\n values = values.filter((_, i) => i % step === 0);\n }\n return values;\n}\nexport function getMaxTickCount({ axis, width }) {\n const minTickWidth = parseInt(axis.labels.style.fontSize) + axis.labels.padding;\n return Math.floor(width / minTickWidth);\n}\nexport function getAxisHeight(args) {\n const { split, boundsHeight } = args;\n if (split.plots.length > 1) {\n return split.plots[0].height;\n }\n return boundsHeight;\n}\nexport function getAxisTitleRows(args) {\n const { axis, textMaxWidth } = args;\n if (axis.title.maxRowCount < 1) {\n return [];\n }\n const textRows = wrapText({\n text: axis.title.text,\n style: axis.title.style,\n width: textMaxWidth,\n });\n return textRows.reduce((acc, row, index) => {\n if (index < axis.title.maxRowCount) {\n acc.push(row);\n }\n else {\n acc[axis.title.maxRowCount - 1].text += row.text;\n }\n return acc;\n }, []);\n}\n","export function getLineDashArray(dashStyle, strokeWidth = 2) {\n const value = dashStyle.toLowerCase();\n const arrayValue = value\n .replace('shortdashdotdot', '3,1,1,1,1,1,')\n .replace('shortdashdot', '3,1,1,1')\n .replace('shortdot', '1,1,')\n .replace('shortdash', '3,1,')\n .replace('longdash', '8,3,')\n .replace(/dot/g, '1,3,')\n .replace('dash', '4,3,')\n .replace(/,$/, '')\n .split(',')\n .map((part) => {\n return `${parseInt(part, 10) * strokeWidth}`;\n });\n return arrayValue.join(',').replace(/NaN/g, 'none');\n}\n","import React from 'react';\nimport { axisLeft, axisRight, line, select } from 'd3';\nimport { block, calculateCos, calculateSin, formatAxisTickLabel, getAxisHeight, getAxisTitleRows, getClosestPointsRange, getLineDashArray, getScaleTicks, getTicksCount, handleOverflowingText, parseTransformStyle, setEllipsisForOverflowTexts, wrapText, } from '../../utils';\nimport './styles.css';\nconst b = block('d3-axis');\nfunction transformLabel(args) {\n const { node, axis } = args;\n let topOffset = axis.labels.lineHeight / 2;\n let leftOffset = axis.labels.margin;\n if (axis.position === 'left') {\n leftOffset = leftOffset * -1;\n }\n if (axis.labels.rotation) {\n if (axis.labels.rotation > 0) {\n leftOffset -= axis.labels.lineHeight * calculateSin(axis.labels.rotation);\n topOffset = axis.labels.lineHeight * calculateCos(axis.labels.rotation);\n if (axis.labels.rotation % 360 === 90) {\n topOffset = ((node === null || node === void 0 ? void 0 : node.getBoundingClientRect().width) || 0) / 2;\n }\n }\n else {\n topOffset = 0;\n if (axis.labels.rotation % 360 === -90) {\n topOffset = -((node === null || node === void 0 ? void 0 : node.getBoundingClientRect().width) || 0) / 2;\n }\n }\n return `translate(${leftOffset}px, ${topOffset}px) rotate(${axis.labels.rotation}deg)`;\n }\n return `translate(${leftOffset}px, ${topOffset}px)`;\n}\nfunction getAxisGenerator(args) {\n const { preparedAxis, axisGenerator: generator, width, height, scale } = args;\n const tickSize = preparedAxis.grid.enabled ? width * -1 : 0;\n const step = getClosestPointsRange(preparedAxis, getScaleTicks(scale));\n let axisGenerator = generator\n .tickSize(tickSize)\n .tickPadding(preparedAxis.labels.margin)\n .tickFormat((value) => {\n if (!preparedAxis.labels.enabled) {\n return '';\n }\n return formatAxisTickLabel({\n axis: preparedAxis,\n value,\n step,\n });\n });\n const ticksCount = getTicksCount({ axis: preparedAxis, range: height });\n if (ticksCount) {\n axisGenerator = axisGenerator.ticks(ticksCount);\n }\n return axisGenerator;\n}\nfunction getTitlePosition(args) {\n const { axis, axisHeight, rowCount } = args;\n if (rowCount < 1) {\n return { x: 0, y: 0 };\n }\n const x = -(axis.title.height -\n axis.title.height / rowCount +\n axis.title.margin +\n axis.labels.margin +\n axis.labels.width);\n let y;\n switch (axis.title.align) {\n case 'left': {\n y = axisHeight - axis.title.width / 2;\n break;\n }\n case 'right': {\n y = axis.title.width / 2;\n break;\n }\n case 'center': {\n y = axisHeight / 2;\n break;\n }\n }\n return { x, y };\n}\nexport const AxisY = (props) => {\n const { axes, width, height: totalHeight, scale, split, plotRef } = props;\n const height = getAxisHeight({ split, boundsHeight: totalHeight });\n const ref = React.useRef(null);\n React.useEffect(() => {\n if (!ref.current) {\n return;\n }\n const svgElement = select(ref.current);\n svgElement.selectAll('*').remove();\n const getAxisPosition = (axis) => {\n var _a;\n const top = ((_a = split.plots[axis.plotIndex]) === null || _a === void 0 ? void 0 : _a.top) || 0;\n if (axis.position === 'left') {\n return `translate(0, ${top}px)`;\n }\n return `translate(${width}px, 0)`;\n };\n const plotLines = axes.reduce((acc, axis) => {\n if (axis.plotLines.length) {\n acc.push(...axis.plotLines.map((plotLine) => {\n return Object.assign(Object.assign({}, plotLine), { transform: getAxisPosition(axis) });\n }));\n }\n return acc;\n }, []);\n const axisSelection = svgElement\n .selectAll('axis')\n .data(axes)\n .join('g')\n .attr('class', b())\n .style('transform', (d) => getAxisPosition(d));\n axisSelection.each((d, index, node) => {\n const seriesScale = scale[index];\n const axisItem = select(node[index]);\n const axisScale = seriesScale;\n const yAxisGenerator = getAxisGenerator({\n axisGenerator: d.position === 'left' ? axisLeft(axisScale) : axisRight(axisScale),\n preparedAxis: d,\n height,\n width,\n scale: seriesScale,\n });\n yAxisGenerator(axisItem);\n if (d.labels.enabled) {\n const tickTexts = axisItem\n .selectAll('.tick text')\n // The offset must be applied before the labels are rotated.\n // Therefore, we reset the values and make an offset in transform attribute.\n // FIXME: give up axisLeft(d3) and switch to our own generation method\n .attr('x', null)\n .attr('dy', null)\n .style('font-size', d.labels.style.fontSize)\n .style('transform', function () {\n return transformLabel({ node: this, axis: d });\n });\n const textMaxWidth = !d.labels.rotation || Math.abs(d.labels.rotation) % 360 !== 90\n ? d.labels.maxWidth\n : (height - d.labels.padding * (tickTexts.size() - 1)) / tickTexts.size();\n tickTexts.call(setEllipsisForOverflowTexts, textMaxWidth);\n }\n // remove overlapping ticks\n // Note: this method do not prepared for rotated labels\n if (!d.labels.rotation) {\n let elementY = 0;\n axisItem\n .selectAll('.tick')\n .filter(function (_d, tickIndex) {\n const tickNode = this;\n const r = tickNode.getBoundingClientRect();\n if (r.bottom > elementY && tickIndex !== 0) {\n return true;\n }\n elementY = r.top - d.labels.padding;\n return false;\n })\n .remove();\n }\n if (plotRef && d.plotLines.length > 0) {\n const plotLineClassName = b('plotLine');\n const plotLineContainer = select(plotRef.current);\n plotLineContainer.selectAll(`.${plotLineClassName}`).remove();\n const plotLinesSelection = plotLineContainer\n .selectAll(`.${plotLineClassName}`)\n .data(plotLines)\n .join('g')\n .attr('class', plotLineClassName)\n .style('transform', (plotLine) => plotLine.transform);\n plotLinesSelection\n .append('path')\n .attr('d', (plotLine) => {\n const plotLineValue = Number(axisScale(plotLine.value));\n const points = [\n [0, plotLineValue],\n [width, plotLineValue],\n ];\n return line()(points);\n })\n .attr('stroke', (plotLine) => plotLine.color)\n .attr('stroke-width', (plotLine) => plotLine.width)\n .attr('stroke-dasharray', (plotLine) => getLineDashArray(plotLine.dashStyle, plotLine.width))\n .attr('opacity', (plotLine) => plotLine.opacity);\n plotLinesSelection.each((plotLineData, i, nodes) => {\n const plotLineSelection = select(nodes[i]);\n if (plotLineData.layerPlacement === 'before') {\n plotLineSelection.lower();\n }\n else {\n plotLineSelection.raise();\n }\n });\n }\n return axisItem;\n });\n axisSelection\n .select('.domain')\n .attr('d', () => {\n const points = [\n [0, 0],\n [0, height],\n ];\n return line()(points);\n })\n .style('stroke', (d) => d.lineColor || '');\n svgElement.selectAll('.tick').each((_d, index, nodes) => {\n const tickNode = select(nodes[index]);\n if (parseTransformStyle(tickNode.attr('transform')).y === height) {\n // Remove stroke from tick that has the same y coordinate like domain\n tickNode.select('line').style('stroke', 'none');\n }\n });\n axisSelection\n .append('text')\n .attr('class', b('title'))\n .attr('text-anchor', 'middle')\n .attr('font-size', (d) => d.title.style.fontSize)\n .attr('transform', (d) => {\n const titleRows = wrapText({\n text: d.title.text,\n style: d.title.style,\n width: height,\n });\n const rowCount = Math.min(titleRows.length, d.title.maxRowCount);\n const { x, y } = getTitlePosition({ axis: d, axisHeight: height, rowCount });\n const angle = d.position === 'left' ? -90 : 90;\n return `translate(${x}, ${y}) rotate(${angle})`;\n })\n .selectAll('tspan')\n .data((d) => getAxisTitleRows({ axis: d, textMaxWidth: height }))\n .join('tspan')\n .attr('x', 0)\n .attr('y', (d) => d.y)\n .text((d) => d.text)\n .each((_d, index, nodes) => {\n if (index === nodes.length - 1) {\n handleOverflowingText(nodes[index], height);\n }\n });\n }, [axes, width, height, scale, split]);\n return React.createElement(\"g\", { ref: ref, className: b('container') });\n};\n","import { path, select } from 'd3';\nimport { getXAxisItems, getXAxisOffset, getXTickPosition } from '../axis';\nimport { calculateCos, calculateSin } from '../math';\nimport { getLabelsSize, setEllipsisForOverflowText } from '../text';\nfunction addDomain(selection, options) {\n const { size, color } = options;\n const domainPath = selection\n .selectAll('.domain')\n .data([null])\n .enter()\n .insert('path', '.tick')\n .attr('class', 'domain')\n .attr('d', `M0,0V0H${size}`);\n if (color) {\n domainPath.style('stroke', color);\n }\n}\nexport function axisBottom(args) {\n const { scale, ticks: { labelFormat = (value) => String(value), labelsPaddings = 0, labelsMargin = 0, labelsMaxWidth = Infinity, labelsStyle, labelsLineHeight, items: tickItems, count: ticksCount, maxTickCount, rotation = 0, tickColor, }, domain, } = args;\n const offset = getXAxisOffset();\n const position = getXTickPosition({ scale, offset });\n const values = getXAxisItems({ scale, count: ticksCount, maxCount: maxTickCount });\n const labelHeight = getLabelsSize({\n labels: values,\n style: labelsStyle,\n }).maxHeight;\n return function (selection) {\n var _a, _b, _c;\n const rect = (_a = selection.node()) === null || _a === void 0 ? void 0 : _a.getBoundingClientRect();\n const x = (rect === null || rect === void 0 ? void 0 : rect.x) || 0;\n const right = x + domain.size;\n const top = -((_c = (_b = tickItems === null || tickItems === void 0 ? void 0 : tickItems[0]) === null || _b === void 0 ? void 0 : _b[0]) !== null && _c !== void 0 ? _c : 0);\n let transform = `translate(0, ${labelHeight + labelsMargin - top}px)`;\n if (rotation) {\n const labelsOffsetTop = labelHeight * calculateCos(rotation) + labelsMargin - top;\n let labelsOffsetLeft = calculateSin(rotation) * labelHeight;\n if (Math.abs(rotation) % 360 === 90) {\n labelsOffsetLeft += ((rotation > 0 ? -1 : 1) * labelHeight) / 2;\n }\n transform = `translate(${-labelsOffsetLeft}px, ${labelsOffsetTop}px) rotate(${rotation}deg)`;\n }\n const tickPath = path();\n tickItems === null || tickItems === void 0 ? void 0 : tickItems.forEach(([start, end]) => {\n tickPath.moveTo(0, start);\n tickPath.lineTo(0, end);\n });\n selection\n .selectAll('.tick')\n .data(values)\n .order()\n .join((el) => {\n const tick = el.append('g').attr('class', 'tick');\n tick.append('path')\n .attr('d', tickPath.toString())\n .attr('stroke', tickColor !== null && tickColor !== void 0 ? tickColor : 'currentColor');\n tick.append('text')\n .text(labelFormat)\n .attr('fill', 'currentColor')\n .attr('text-anchor', () => {\n if (rotation) {\n return rotation > 0 ? 'start' : 'end';\n }\n return 'middle';\n })\n .style('transform', transform)\n .style('alignment-baseline', 'after-edge');\n return tick;\n })\n .attr('transform', function (d) {\n return `translate(${position(d) + offset}, ${top})`;\n });\n // Remove tick that has the same x coordinate like domain\n selection\n .select('.tick')\n .filter((d) => {\n return position(d) === 0;\n })\n .select('line')\n .remove();\n const labels = selection.selectAll('.tick text');\n // FIXME: handle rotated overlapping labels (with a smarter approach)\n if (rotation) {\n const maxWidth = labelsMaxWidth * calculateCos(rotation) + labelsLineHeight * calculateSin(rotation);\n labels.each(function () {\n setEllipsisForOverflowText(select(this), maxWidth);\n });\n }\n else {\n // remove overlapping labels\n let elementX = 0;\n selection\n .selectAll('.tick')\n .filter(function () {\n const node = this;\n const r = node.getBoundingClientRect();\n if (r.left < elementX) {\n return true;\n }\n elementX = r.right + labelsPaddings;\n return false;\n })\n .remove();\n // add an ellipsis to the labels that go beyond the boundaries of the chart\n labels.each(function (_d, i, nodes) {\n if (i === nodes.length - 1) {\n const currentElement = this;\n const prevElement = nodes[i - 1];\n const text = select(currentElement);\n const currentElementPosition = currentElement.getBoundingClientRect();\n const prevElementPosition = prevElement === null || prevElement === void 0 ? void 0 : prevElement.getBoundingClientRect();\n const lackingSpace = Math.max(0, currentElementPosition.right - right);\n if (lackingSpace) {\n const remainSpace = right - ((prevElementPosition === null || prevElementPosition === void 0 ? void 0 : prevElementPosition.right) || 0) - labelsPaddings;\n const translateX = currentElementPosition.width / 2 - lackingSpace;\n text.attr('text-anchor', 'end').attr('transform', `translate(${translateX},0)`);\n setEllipsisForOverflowText(text, remainSpace);\n }\n }\n });\n }\n const { size: domainSize, color: domainColor } = domain;\n selection\n .call(addDomain, { size: domainSize, color: domainColor })\n .style('font-size', (labelsStyle === null || labelsStyle === void 0 ? void 0 : labelsStyle.fontSize) || '');\n };\n}\n","import React from 'react';\nimport { select } from 'd3';\nimport { block, formatAxisTickLabel, getAxisTitleRows, getClosestPointsRange, getMaxTickCount, getScaleTicks, getTicksCount, handleOverflowingText, } from '../../utils';\nimport { axisBottom } from '../../utils/chart/axis-generators';\nimport './styles.css';\nconst b = block('d3-axis');\nfunction getLabelFormatter({ axis, scale }) {\n const ticks = getScaleTicks(scale);\n const tickStep = getClosestPointsRange(axis, ticks);\n return (value) => {\n if (!axis.labels.enabled) {\n return '';\n }\n return formatAxisTickLabel({\n axis,\n value,\n step: tickStep,\n });\n };\n}\nexport function getTitlePosition(args) {\n const { axis, width, rowCount } = args;\n if (rowCount < 1) {\n return { x: 0, y: 0 };\n }\n let x;\n const y = axis.title.height / rowCount + axis.title.margin + axis.labels.height + axis.labels.margin;\n switch (axis.title.align) {\n case 'left': {\n x = axis.title.width / 2;\n break;\n }\n case 'right': {\n x = width - axis.title.width / 2;\n break;\n }\n case 'center': {\n x = width / 2;\n break;\n }\n }\n return { x, y };\n}\nexport const AxisX = React.memo(function AxisX(props) {\n const { axis, width, height: totalHeight, scale, split } = props;\n const ref = React.useRef(null);\n React.useEffect(() => {\n if (!ref.current) {\n return;\n }\n let tickItems = [];\n if (axis.grid.enabled) {\n tickItems = new Array(split.plots.length || 1).fill(null).map((_, index) => {\n var _a, _b;\n const top = ((_a = split.plots[index]) === null || _a === void 0 ? void 0 : _a.top) || 0;\n const height = ((_b = split.plots[index]) === null || _b === void 0 ? void 0 : _b.height) || totalHeight;\n return [-top, -(top + height)];\n });\n }\n const xAxisGenerator = axisBottom({\n scale: scale,\n ticks: {\n items: tickItems,\n labelFormat: getLabelFormatter({ axis, scale }),\n labelsPaddings: axis.labels.padding,\n labelsMargin: axis.labels.margin,\n labelsStyle: axis.labels.style,\n labelsMaxWidth: axis.labels.maxWidth,\n labelsLineHeight: axis.labels.lineHeight,\n count: getTicksCount({ axis, range: width }),\n maxTickCount: getMaxTickCount({ axis, width }),\n rotation: axis.labels.rotation,\n },\n domain: {\n size: width,\n color: axis.lineColor,\n },\n });\n const svgElement = select(ref.current);\n svgElement.selectAll('*').remove();\n svgElement.call(xAxisGenerator).attr('class', b());\n // add an axis header if necessary\n if (axis.title.text) {\n const titleRows = getAxisTitleRows({ axis, textMaxWidth: width });\n svgElement\n .append('text')\n .attr('class', b('title'))\n .attr('transform', () => {\n const { x, y } = getTitlePosition({ axis, width, rowCount: titleRows.length });\n return `translate(${x}, ${y})`;\n })\n .attr('font-size', axis.title.style.fontSize)\n .attr('text-anchor', 'middle')\n .selectAll('tspan')\n .data(titleRows)\n .join('tspan')\n .attr('x', 0)\n .attr('y', (d) => d.y)\n .text((d) => d.text)\n .each((_d, index, nodes) => {\n if (index === axis.title.maxRowCount - 1) {\n handleOverflowingText(nodes[index], width);\n }\n });\n }\n }, [axis, width, totalHeight, scale, split]);\n return React.createElement(\"g\", { ref: ref });\n});\n","export const legendDefaults = {\n align: 'center',\n itemDistance: 20,\n margin: 15,\n itemStyle: {\n fontSize: '12px',\n },\n};\nexport const CONTINUOUS_LEGEND_SIZE = {\n height: 12,\n width: 200,\n};\n","import { symbolCircle, symbolDiamond2, symbolSquare, symbolTriangle2 } from 'd3';\nimport { SymbolType } from '../../constants';\nexport const getSymbolType = (index) => {\n const scatterStyles = Object.values(SymbolType);\n return scatterStyles[index % scatterStyles.length];\n};\n// This is an inverted triangle\n// Based on https://github.com/d3/d3-shape/blob/main/src/symbol/triangle2.js\nconst sqrt3 = Math.sqrt(3);\nconst triangleDown = {\n draw: (context, size) => {\n const s = Math.sqrt(size) * 0.6824;\n const t = s / 2;\n const u = (s * sqrt3) / 2;\n context.moveTo(0, s);\n context.lineTo(u, -t);\n context.lineTo(-u, -t);\n context.closePath();\n },\n};\nexport const getSymbol = (symbolType) => {\n switch (symbolType) {\n case SymbolType.Diamond:\n return symbolDiamond2;\n case SymbolType.Circle:\n return symbolCircle;\n case SymbolType.Square:\n return symbolSquare;\n case SymbolType.Triangle:\n return symbolTriangle2;\n case SymbolType.TriangleDown:\n return triangleDown;\n default:\n return symbolCircle;\n }\n};\n","export function createGradientRect(container, args) {\n const { x = 0, y = 0, width, height, interpolator } = args;\n const n = 256;\n const canvas = document.createElement('canvas');\n canvas.width = n;\n canvas.height = 1;\n const context = canvas.getContext('2d');\n if (!context) {\n throw Error(\"Couldn't get canvas context\");\n }\n for (let i = 0, j = n - 1; i < n; ++i) {\n context.fillStyle = interpolator(i / j);\n context.fillRect(i, 0, 1, height);\n }\n return container\n .append('image')\n .attr('preserveAspectRatio', 'none')\n .attr('height', height)\n .attr('width', width)\n .attr('x', x)\n .attr('y', y)\n .attr('xlink:href', canvas.toDataURL());\n}\n","import { range, scaleLinear } from 'd3';\nexport function getDomainForContinuousColorScale(args) {\n const { series } = args;\n const values = series.reduce((acc, s) => {\n switch (s.type) {\n case 'pie': {\n acc.push(...s.data.map((d) => d.value));\n break;\n }\n case 'bar-y': {\n acc.push(...s.data.map((d) => Number(d.x)));\n break;\n }\n case 'scatter':\n case 'bar-x':\n case 'waterfall':\n case 'line':\n case 'area': {\n acc.push(...s.data.map((d) => Number(d.y)));\n break;\n }\n default: {\n throw Error(`The method for calculation a domain for a continuous color scale for the \"${s.type}\" series is not defined`);\n }\n }\n return acc;\n }, []);\n return [Math.min(...values), Math.max(...values)];\n}\nexport function getDefaultColorStops(size) {\n return range(size).map((d) => d / size);\n}\nexport function getContinuesColorFn(args) {\n const { values, colors, stops: customStops } = args;\n const min = Math.min(...values);\n const max = Math.max(...values);\n const stops = customStops !== null && customStops !== void 0 ? customStops : getDefaultColorStops(colors.length);\n const color = scaleLinear(stops, colors);\n return (value) => {\n const colorValue = (value - min) / (max - min);\n return color(colorValue);\n };\n}\n","import React from 'react';\nimport { line as lineGenerator, scaleLinear, select, symbol } from 'd3';\nimport { CONTINUOUS_LEGEND_SIZE } from '../../constants';\nimport { formatNumber } from '../../libs';\nimport { block, createGradientRect, getContinuesColorFn, getLabelsSize, getLineDashArray, getSymbol, } from '../../utils';\nimport { axisBottom } from '../../utils/chart/axis-generators';\nimport './styles.css';\nconst b = block('d3-legend');\nconst getLegendPosition = (args) => {\n const { align, offsetWidth = 0, width, contentWidth } = args;\n const top = 0;\n if (align === 'left') {\n return { top, left: offsetWidth };\n }\n if (align === 'right') {\n return { top, left: offsetWidth + width - contentWidth };\n }\n return { top, left: offsetWidth + width / 2 - contentWidth / 2 };\n};\nconst appendPaginator = (args) => {\n const { container, offset, maxPage, legend, transform, onArrowClick } = args;\n const paginationLine = container.append('g').attr('class', b('pagination'));\n let computedWidth = 0;\n paginationLine\n .append('text')\n .text('▲')\n .attr('class', function () {\n return b('pagination-arrow', { inactive: offset === 0 });\n })\n .style('font-size', legend.itemStyle.fontSize)\n .each(function () {\n computedWidth += this.getComputedTextLength();\n })\n .on('click', function () {\n if (offset - 1 >= 0) {\n onArrowClick(offset - 1);\n }\n });\n paginationLine\n .append('text')\n .text(`${offset + 1}/${maxPage}`)\n .attr('class', b('pagination-counter'))\n .attr('x', computedWidth)\n .style('font-size', legend.itemStyle.fontSize)\n .each(function () {\n computedWidth += this.getComputedTextLength();\n });\n paginationLine\n .append('text')\n .text('▼')\n .attr('class', function () {\n return b('pagination-arrow', { inactive: offset === maxPage - 1 });\n })\n .attr('x', computedWidth)\n .style('font-size', legend.itemStyle.fontSize)\n .on('click', function () {\n if (offset + 1 < maxPage) {\n onArrowClick(offset + 1);\n }\n });\n paginationLine.attr('transform', transform);\n};\nconst legendSymbolGenerator = lineGenerator()\n .x((d) => d.x)\n .y((d) => d.y);\nfunction renderLegendSymbol(args) {\n const { selection, legend } = args;\n const line = selection.data();\n const getXPosition = (i) => {\n return line.slice(0, i).reduce((acc, legendItem) => {\n return (acc +\n legendItem.symbol.width +\n legendItem.symbol.padding +\n legendItem.textWidth +\n legend.itemDistance);\n }, 0);\n };\n selection.each(function (d, i) {\n const element = select(this);\n const x = getXPosition(i);\n const className = b('item-symbol', { shape: d.symbol.shape, unselected: !d.visible });\n const color = d.visible ? d.color : '';\n switch (d.symbol.shape) {\n case 'path': {\n const y = legend.lineHeight / 2;\n const points = [\n { x: x, y },\n { x: x + d.symbol.width, y },\n ];\n element\n .append('path')\n .attr('d', legendSymbolGenerator(points))\n .attr('fill', 'none')\n .attr('stroke-width', d.symbol.strokeWidth)\n .attr('class', className)\n .style('stroke', color);\n if (d.dashStyle) {\n element.attr('stroke-dasharray', getLineDashArray(d.dashStyle, d.symbol.strokeWidth));\n }\n break;\n }\n case 'rect': {\n const y = (legend.lineHeight - d.symbol.height) / 2;\n element\n .append('rect')\n .attr('x', x)\n .attr('y', y)\n .attr('width', d.symbol.width)\n .attr('height', d.symbol.height)\n .attr('rx', d.symbol.radius)\n .attr('class', className)\n .style('fill', color);\n break;\n }\n case 'symbol': {\n const y = legend.lineHeight / 2;\n element\n .append('svg:path')\n .attr('d', () => {\n const scatterSymbol = getSymbol(d.symbol.symbolType);\n // D3 takes size as square pixels, so we need to make square pixels size by multiplying\n // https://d3js.org/d3-shape/symbol#symbol\n return symbol(scatterSymbol, d.symbol.width * d.symbol.width)();\n })\n .attr('transform', () => {\n return 'translate(' + x + ',' + y + ')';\n })\n .attr('class', className)\n .style('fill', color);\n break;\n }\n }\n });\n}\nexport const Legend = (props) => {\n const { boundsWidth, chartSeries, legend, items, config, onItemClick, onUpdate } = props;\n const ref = React.useRef(null);\n const [paginationOffset, setPaginationOffset] = React.useState(0);\n React.useEffect(() => {\n setPaginationOffset(0);\n }, [boundsWidth]);\n React.useEffect(() => {\n var _a, _b, _c, _d, _e;\n if (!ref.current) {\n return;\n }\n const svgElement = select(ref.current);\n svgElement.selectAll('*').remove();\n let legendWidth = 0;\n if (legend.type === 'discrete') {\n const limit = (_a = config.pagination) === null || _a === void 0 ? void 0 : _a.limit;\n const pageItems = typeof limit === 'number'\n ? items.slice(paginationOffset * limit, paginationOffset * limit + limit)\n : items;\n pageItems.forEach((line, lineIndex) => {\n var _a;\n const legendLine = svgElement.append('g').attr('class', b('line'));\n const legendItemTemplate = legendLine\n .selectAll('legend-history')\n .data(line)\n .enter()\n .append('g')\n .attr('class', b('item'))\n .on('click', function (e, d) {\n onItemClick({ name: d.name, metaKey: e.metaKey });\n onUpdate === null || onUpdate === void 0 ? void 0 : onUpdate();\n });\n const getXPosition = (i) => {\n return line.slice(0, i).reduce((acc, legendItem) => {\n return (acc +\n legendItem.symbol.width +\n legendItem.symbol.padding +\n legendItem.textWidth +\n legend.itemDistance);\n }, 0);\n };\n renderLegendSymbol({ selection: legendItemTemplate, legend });\n legendItemTemplate\n .append('text')\n .attr('x', function (legendItem, i) {\n return (getXPosition(i) + legendItem.symbol.width + legendItem.symbol.padding);\n })\n .attr('height', legend.lineHeight)\n .attr('class', function (d) {\n const mods = { selected: d.visible, unselected: !d.visible };\n return b('item-text', mods);\n })\n .text(function (d) {\n return ('name' in d && d.name);\n })\n .style('font-size', legend.itemStyle.fontSize);\n const contentWidth = ((_a = legendLine.node()) === null || _a === void 0 ? void 0 : _a.getBoundingClientRect().width) || 0;\n const { left } = getLegendPosition({\n align: legend.align,\n width: boundsWidth,\n offsetWidth: 0,\n contentWidth,\n });\n const top = legend.lineHeight * lineIndex;\n legendLine.attr('transform', `translate(${[left, top].join(',')})`);\n });\n legendWidth = boundsWidth;\n if (config.pagination) {\n const transform = `translate(${[\n 0,\n legend.lineHeight * config.pagination.limit + legend.lineHeight / 2,\n ].join(',')})`;\n appendPaginator({\n container: svgElement,\n offset: paginationOffset,\n maxPage: config.pagination.maxPage,\n legend,\n transform,\n onArrowClick: setPaginationOffset,\n });\n }\n }\n else {\n // gradient rect\n const domain = (_b = legend.colorScale.domain) !== null && _b !== void 0 ? _b : [];\n const rectHeight = CONTINUOUS_LEGEND_SIZE.height;\n svgElement.call(createGradientRect, {\n y: legend.title.height + legend.title.margin,\n height: rectHeight,\n width: legend.width,\n interpolator: getContinuesColorFn({\n values: [0, 1],\n colors: legend.colorScale.colors,\n stops: legend.colorScale.stops,\n }),\n });\n // ticks\n const scale = scaleLinear(domain, [0, legend.width]);\n const xAxisGenerator = axisBottom({\n scale,\n ticks: {\n items: [[0, -rectHeight]],\n labelsMargin: legend.ticks.labelsMargin,\n labelsLineHeight: legend.ticks.labelsLineHeight,\n maxTickCount: 4,\n tickColor: '#fff',\n labelFormat: (value) => formatNumber(value, { unit: 'auto' }),\n },\n domain: {\n size: legend.width,\n color: 'transparent',\n },\n });\n const tickTop = legend.title.height + legend.title.margin + rectHeight;\n svgElement\n .append('g')\n .attr('transform', `translate(0, ${tickTop})`)\n .call(xAxisGenerator);\n legendWidth = legend.width;\n }\n if (legend.title.enable) {\n const { maxWidth: titleWidth } = getLabelsSize({\n labels: [legend.title.text],\n style: legend.title.style,\n });\n let dx = 0;\n switch (legend.title.align) {\n case 'center': {\n dx = legend.width / 2 - titleWidth / 2;\n break;\n }\n case 'right': {\n dx = legend.width - titleWidth;\n break;\n }\n case 'left':\n default: {\n dx = 0;\n break;\n }\n }\n svgElement\n .append('g')\n .attr('class', b('title'))\n .append('text')\n .attr('dx', dx)\n .attr('font-weight', (_c = legend.title.style.fontWeight) !== null && _c !== void 0 ? _c : null)\n .attr('font-size', (_d = legend.title.style.fontSize) !== null && _d !== void 0 ? _d : null)\n .attr('fill', (_e = legend.title.style.fontColor) !== null && _e !== void 0 ? _e : null)\n .style('alignment-baseline', 'before-edge')\n .text(legend.title.text);\n }\n const { left } = getLegendPosition({\n align: legend.align,\n width: boundsWidth,\n offsetWidth: config.offset.left,\n contentWidth: legendWidth,\n });\n svgElement.attr('transform', `translate(${[left, config.offset.top].join(',')})`);\n }, [boundsWidth, chartSeries, onItemClick, onUpdate, legend, items, config, paginationOffset]);\n return React.createElement(\"g\", { className: b(), ref: ref, width: boundsWidth, height: legend.height });\n};\n","import React from 'react';\nimport { block } from '../../utils';\nimport './styles.css';\nconst b = block('plot-title');\nexport const PlotTitle = (props) => {\n const { title } = props;\n if (!title) {\n return null;\n }\n const { x, y, text, style, height } = title;\n return (React.createElement(\"text\", { className: b(), dx: x, dy: y, dominantBaseline: \"middle\", textAnchor: \"middle\", style: Object.assign({ lineHeight: `${height}px` }, style) },\n React.createElement(\"tspan\", null, text)));\n};\n","import React from 'react';\nimport { block } from '../../utils';\nimport './styles.css';\nconst b = block('d3-title');\nexport const Title = (props) => {\n const { chartWidth, text, height, style } = props;\n return (React.createElement(\"text\", { className: b(), dx: chartWidth / 2, dy: height / 2, dominantBaseline: \"middle\", textAnchor: \"middle\", style: Object.assign({ lineHeight: `${height}px` }, style) },\n React.createElement(\"tspan\", null, text)));\n};\n","export function getWaterfallPointColor(point, series) {\n if (point.color) {\n return point.color;\n }\n if (point.total) {\n return series.color;\n }\n if (Number(point.y) > 0) {\n return series.positiveColor;\n }\n return series.negativeColor;\n}\nexport function getWaterfallPointSubtotal(point, series) {\n const pointIndex = series.data.indexOf(point);\n if (pointIndex === -1) {\n return null;\n }\n return series.data.reduce((sum, d, index) => {\n if (index <= pointIndex) {\n const value = d.total ? 0 : Number(d.y);\n return sum + value;\n }\n return sum;\n }, 0);\n}\n","import React from 'react';\nimport { dateTime } from '@gravity-ui/date-utils';\nimport get from 'lodash/get';\nimport { formatNumber } from '../../libs';\nimport { block, getDataCategoryValue, getWaterfallPointSubtotal } from '../../utils';\nconst b = block('tooltip');\nconst DEFAULT_DATE_FORMAT = 'DD.MM.YY';\nconst getRowData = (fieldName, data, axis) => {\n switch (axis === null || axis === void 0 ? void 0 : axis.type) {\n case 'category': {\n const categories = get(axis, 'categories', []);\n return getDataCategoryValue({ axisDirection: fieldName, categories, data });\n }\n case 'datetime': {\n const value = get(data, fieldName);\n if (!value) {\n return undefined;\n }\n return dateTime({ input: value }).format(DEFAULT_DATE_FORMAT);\n }\n case 'linear':\n default: {\n const value = get(data, fieldName);\n return formatNumber(value);\n }\n }\n};\nconst getXRowData = (data, xAxis) => getRowData('x', data, xAxis);\nconst getYRowData = (data, yAxis) => getRowData('y', data, yAxis);\nconst getMeasureValue = (data, xAxis, yAxis) => {\n var _a, _b;\n if (data.every((item) => ['pie', 'treemap', 'waterfall', 'sankey'].includes(item.series.type))) {\n return null;\n }\n if (data.some((item) => item.series.type === 'bar-y')) {\n return getYRowData((_a = data[0]) === null || _a === void 0 ? void 0 : _a.data, yAxis);\n }\n return getXRowData((_b = data[0]) === null || _b === void 0 ? void 0 : _b.data, xAxis);\n};\nexport const DefaultContent = ({ hovered, xAxis, yAxis }) => {\n const measureValue = getMeasureValue(hovered, xAxis, yAxis);\n return (React.createElement(React.Fragment, null,\n measureValue && React.createElement(\"div\", null, measureValue),\n hovered.map((seriesItem, i) => {\n var _a;\n const { data, series, closest } = seriesItem;\n const id = `${get(series, 'id')}_${i}`;\n const color = get(series, 'color');\n switch (series.type) {\n case 'scatter':\n case 'line':\n case 'area':\n case 'bar-x': {\n const value = (React.createElement(React.Fragment, null,\n series.name,\n \": \",\n getYRowData(data, yAxis)));\n return (React.createElement(\"div\", { key: id, className: b('content-row') },\n React.createElement(\"div\", { className: b('color'), style: { backgroundColor: color } }),\n React.createElement(\"div\", null, closest ? React.createElement(\"b\", null, value) : React.createElement(\"span\", null, value))));\n }\n case 'waterfall': {\n const isTotal = get(data, 'total', false);\n const subTotal = getWaterfallPointSubtotal(data, series);\n return (React.createElement(\"div\", { key: `${id}_${get(data, 'x')}` },\n !isTotal && (React.createElement(React.Fragment, null,\n React.createElement(\"div\", { key: id, className: b('content-row') },\n React.createElement(\"b\", null, getXRowData(data, xAxis))),\n React.createElement(\"div\", { className: b('content-row') },\n React.createElement(\"span\", null,\n series.name,\n \"\\u00A0\"),\n React.createElement(\"span\", null, getYRowData(data, yAxis))))),\n React.createElement(\"div\", { key: id, className: b('content-row') },\n isTotal ? 'Total' : 'Subtotal',\n \": \",\n subTotal)));\n }\n case 'bar-y': {\n const value = (React.createElement(React.Fragment, null,\n series.name,\n \": \",\n getXRowData(data, xAxis)));\n return (React.createElement(\"div\", { key: id, className: b('content-row') },\n React.createElement(\"div\", { className: b('color'), style: { backgroundColor: color } }),\n React.createElement(\"div\", null, closest ? React.createElement(\"b\", null, value) : React.createElement(\"span\", null, value))));\n }\n case 'pie':\n case 'treemap': {\n const seriesData = data;\n return (React.createElement(\"div\", { key: id, className: b('content-row') },\n React.createElement(\"div\", { className: b('color'), style: { backgroundColor: color } }),\n React.createElement(\"span\", null,\n seriesData.name || seriesData.id,\n \"\\u00A0\"),\n React.createElement(\"span\", null, seriesData.value)));\n }\n case 'sankey': {\n const { target, data: source } = seriesItem;\n const value = (_a = source.links.find((d) => d.name === (target === null || target === void 0 ? void 0 : target.name))) === null || _a === void 0 ? void 0 : _a.value;\n return (React.createElement(\"div\", { key: id, className: b('content-row') },\n React.createElement(\"div\", { className: b('color'), style: { backgroundColor: source.color } }),\n React.createElement(\"div\", { style: { display: 'flex', gap: 8, verticalAlign: 'center' } },\n source.name,\n \" \",\n React.createElement(\"span\", null, \"\\u2192\"),\n \" \", target === null || target === void 0 ? void 0 :\n target.name,\n \": \",\n value)));\n }\n default: {\n return null;\n }\n }\n })));\n};\n","import React from 'react';\nimport isNil from 'lodash/isNil';\nimport { DefaultContent } from './DefaultContent';\nexport const ChartTooltipContent = (props) => {\n const { hovered, xAxis, yAxis, renderer } = props;\n if (!hovered) {\n return null;\n }\n const customTooltip = renderer === null || renderer === void 0 ? void 0 : renderer({ hovered, xAxis, yAxis });\n return isNil(customTooltip) ? (React.createElement(DefaultContent, { hovered: hovered, xAxis: xAxis, yAxis: yAxis })) : (customTooltip);\n};\n","import React from 'react';\nimport { Popup, useVirtualElementRef } from '@gravity-ui/uikit';\nimport { useTooltip } from '../../hooks';\nimport { block } from '../../utils';\nimport { ChartTooltipContent } from './ChartTooltipContent';\nimport './styles.css';\nconst b = block('tooltip');\nexport const Tooltip = (props) => {\n const { tooltip, xAxis, yAxis, svgContainer, dispatcher, tooltipPinned, onOutsideClick } = props;\n const { hovered, pointerPosition } = useTooltip({ dispatcher, tooltip });\n const containerRect = (svgContainer === null || svgContainer === void 0 ? void 0 : svgContainer.getBoundingClientRect()) || { left: 0, top: 0 };\n const left = ((pointerPosition === null || pointerPosition === void 0 ? void 0 : pointerPosition[0]) || 0) + containerRect.left;\n const top = ((pointerPosition === null || pointerPosition === void 0 ? void 0 : pointerPosition[1]) || 0) + containerRect.top;\n const anchorRef = useVirtualElementRef({ rect: { left, top } });\n const handleOutsideClick = (e) => {\n if (svgContainer === null || svgContainer === void 0 ? void 0 : svgContainer.contains(e.target)) {\n return;\n }\n onOutsideClick === null || onOutsideClick === void 0 ? void 0 : onOutsideClick();\n };\n React.useEffect(() => {\n window.dispatchEvent(new CustomEvent('scroll'));\n }, [left, top]);\n return (hovered === null || hovered === void 0 ? void 0 : hovered.length) ? (React.createElement(Popup, { className: b({ pinned: tooltipPinned }), contentClassName: b('popup-content'), open: true, anchorRef: anchorRef, offset: [0, 20], placement: ['right', 'left', 'top', 'bottom'], modifiers: [{ name: 'preventOverflow', options: { padding: 10, altAxis: true } }], onOutsideClick: tooltipPinned ? handleOutsideClick : undefined },\n React.createElement(\"div\", { className: b('content') },\n React.createElement(ChartTooltipContent, { hovered: hovered, xAxis: xAxis, yAxis: yAxis, renderer: tooltip.renderer })))) : null;\n};\n","import React from 'react';\nexport const useTooltip = ({ dispatcher, tooltip }) => {\n const [{ hovered, pointerPosition }, setTooltipState] = React.useState({});\n React.useEffect(() => {\n if (tooltip === null || tooltip === void 0 ? void 0 : tooltip.enabled) {\n dispatcher.on('hover-shape.tooltip', (nextHovered, nextPointerPosition) => {\n setTooltipState({ hovered: nextHovered, pointerPosition: nextPointerPosition });\n });\n }\n return () => {\n if (tooltip === null || tooltip === void 0 ? void 0 : tooltip.enabled) {\n dispatcher.on('hover-shape.tooltip', null);\n }\n };\n }, [dispatcher, tooltip]);\n return { hovered, pointerPosition };\n};\n","function isTouchEnabled() {\n if (typeof window !== 'object') {\n return false;\n }\n return 'ontouchstart' in window || navigator.maxTouchPoints > 0;\n}\nexport const IS_TOUCH_ENABLED = isTouchEnabled();\n","import { Delaunay, bisector, sort } from 'd3';\nimport get from 'lodash/get';\nimport groupBy from 'lodash/groupBy';\nfunction getClosestPointsByXValue(x, y, points) {\n var _a, _b, _c, _d;\n const sorted = sort(points, (p) => p.x);\n const closestXIndex = bisector((p) => p.x).center(sorted, x);\n if (closestXIndex === -1) {\n return [];\n }\n const closestX = sorted[closestXIndex].x;\n const closestPoints = sort(points.filter((p) => p.x === closestX), (p) => p.y0);\n let closestYIndex = -1;\n if (y < ((_a = closestPoints[0]) === null || _a === void 0 ? void 0 : _a.y0)) {\n closestYIndex = 0;\n }\n else if (y > ((_b = closestPoints[closestPoints.length - 1]) === null || _b === void 0 ? void 0 : _b.y1)) {\n closestYIndex = closestPoints.length - 1;\n }\n else {\n closestYIndex = closestPoints.findIndex((p) => y > p.y0 && y < p.y1);\n if (closestYIndex === -1) {\n const sortedY = sort(closestPoints.map((p, index) => ({ index, y: p.y1 + (p.y0 - p.y1) / 2 })), (p) => p.y);\n const sortedYIndex = bisector((p) => p.y).center(sortedY, y);\n closestYIndex = (_d = (_c = sortedY[sortedYIndex]) === null || _c === void 0 ? void 0 : _c.index) !== null && _d !== void 0 ? _d : -1;\n }\n }\n return closestPoints.map((p, i) => ({\n data: p.data,\n series: p.series,\n closest: i === closestYIndex,\n }));\n}\nfunction getSeriesType(shapeData) {\n return get(shapeData, 'series.type') || get(shapeData, 'point.series.type');\n}\nexport function getClosestPoints(args) {\n const { position, shapesData, boundsHeight, boundsWidth } = args;\n const [pointerX, pointerY] = position;\n const result = [];\n const groups = groupBy(shapesData, getSeriesType);\n Object.entries(groups).forEach(([seriesType, list]) => {\n var _a, _b;\n switch (seriesType) {\n case 'bar-x': {\n const points = list.map((d) => ({\n data: d.data,\n series: d.series,\n x: d.x + d.width / 2,\n y0: d.y,\n y1: d.y + d.height,\n }));\n result.push(...getClosestPointsByXValue(pointerX, pointerY, points));\n break;\n }\n case 'waterfall': {\n const points = list.map((d) => ({\n data: d.data,\n series: d.series,\n x: d.x + d.width / 2,\n y0: d.y,\n y1: d.y + d.height,\n }));\n result.push(...getClosestPointsByXValue(pointerX, pointerY, points));\n break;\n }\n case 'area': {\n const points = list.reduce((acc, d) => {\n Array.prototype.push.apply(acc, d.points.map((p) => ({\n data: p.data,\n series: p.series,\n x: p.x,\n y0: p.y0,\n y1: p.y,\n })));\n return acc;\n }, []);\n result.push(...getClosestPointsByXValue(pointerX, pointerY, points));\n break;\n }\n case 'line': {\n const points = list.reduce((acc, d) => {\n acc.push(...d.points.map((p) => ({\n data: p.data,\n series: p.series,\n x: p.x,\n y0: p.y,\n y1: p.y,\n })));\n return acc;\n }, []);\n result.push(...getClosestPointsByXValue(pointerX, pointerY, points));\n break;\n }\n case 'bar-y': {\n const points = list;\n const sorted = sort(points, (p) => p.y);\n const closestYIndex = bisector((p) => p.y).center(sorted, pointerY);\n let closestPoints = [];\n let closestXIndex = -1;\n if (closestYIndex !== -1) {\n const closestY = sorted[closestYIndex].y;\n closestPoints = sort(points.filter((p) => p.y === closestY), (p) => p.x);\n const lastPoint = closestPoints[closestPoints.length - 1];\n if (pointerX < ((_a = closestPoints[0]) === null || _a === void 0 ? void 0 : _a.x)) {\n closestXIndex = 0;\n }\n else if (lastPoint && pointerX > lastPoint.x + lastPoint.width) {\n closestXIndex = closestPoints.length - 1;\n }\n else {\n closestXIndex = closestPoints.findIndex((p) => pointerX > p.x && pointerX < p.x + p.width);\n }\n }\n result.push(...closestPoints.map((p, i) => ({\n data: p.data,\n series: p.series,\n closest: i === closestXIndex,\n })));\n break;\n }\n case 'scatter': {\n const points = list;\n const delaunayX = Delaunay.from(points, (d) => d.point.x, (d) => d.point.y);\n const closestPoint = points[delaunayX.find(pointerX, pointerY)];\n if (closestPoint) {\n result.push({\n data: closestPoint.point.data,\n series: closestPoint.point.series,\n closest: true,\n });\n }\n break;\n }\n case 'pie': {\n const points = list.map((d) => d.segments).flat();\n const closestPoint = points.find((p) => {\n const { center } = p.data.pie;\n const x = pointerX - center[0];\n const y = pointerY - center[1];\n let angle = Math.atan2(y, x) + 0.5 * Math.PI;\n angle = angle < 0 ? Math.PI * 2 + angle : angle;\n const polarRadius = Math.sqrt(x * x + y * y);\n return (angle >= p.startAngle && angle <= p.endAngle && polarRadius < p.data.radius);\n });\n if (closestPoint) {\n result.push({\n data: closestPoint.data.series.data,\n series: closestPoint.data.series,\n closest: true,\n });\n }\n break;\n }\n case 'treemap': {\n const data = list;\n const closestPoint = (_b = data[0]) === null || _b === void 0 ? void 0 : _b.leaves.find((l) => {\n return (pointerX >= l.x0 && pointerX <= l.x1 && pointerY >= l.y0 && pointerY <= l.y1);\n });\n if (closestPoint) {\n result.push({\n data: closestPoint.data,\n series: data[0].series,\n closest: true,\n });\n }\n break;\n }\n case 'sankey': {\n const [data] = list;\n const closestLink = data.links.find((d) => {\n var _a;\n return isInsidePath({\n path: (_a = d.path) !== null && _a !== void 0 ? _a : '',\n strokeWidth: d.strokeWidth,\n point: [pointerX, pointerY],\n width: boundsWidth,\n height: boundsHeight,\n });\n });\n if (closestLink) {\n result.push({\n data: closestLink.source,\n target: closestLink.target,\n series: data.series,\n closest: true,\n });\n }\n break;\n }\n }\n });\n return result;\n}\nfunction isInsidePath(args) {\n const { path, point, width, height, strokeWidth } = args;\n const canvas = document.createElement('canvas');\n canvas.width = width;\n canvas.height = height;\n const ctx = canvas.getContext('2d');\n if (ctx) {\n ctx.lineWidth = strokeWidth;\n const path2D = new Path2D(path);\n ctx.stroke(path2D);\n return ctx.isPointInPath(path2D, ...point) || ctx.isPointInStroke(path2D, ...point);\n }\n return null;\n}\n","import React from 'react';\nexport function usePrevious(value) {\n const ref = React.useRef();\n React.useEffect(() => {\n ref.current = value;\n }, [value]);\n return ref.current;\n}\n","import get from 'lodash/get';\nconst getMarginTop = (args) => {\n const { chart, preparedTitle } = args;\n let marginTop = get(chart, 'margin.top', 0);\n if (preparedTitle === null || preparedTitle === void 0 ? void 0 : preparedTitle.height) {\n marginTop += preparedTitle.height;\n }\n return marginTop;\n};\nconst getMarginRight = (args) => {\n const { chart } = args;\n return get(chart, 'margin.right', 0);\n};\nexport const getPreparedChart = (args) => {\n const { chart, preparedTitle } = args;\n const marginTop = getMarginTop({ chart, preparedTitle });\n const marginBottom = get(chart, 'margin.bottom', 0);\n const marginLeft = get(chart, 'margin.left', 0);\n const marginRight = getMarginRight({ chart });\n return {\n margin: {\n top: marginTop,\n right: marginRight,\n bottom: marginBottom,\n left: marginLeft,\n },\n };\n};\n","export const getBoundsWidth = (args) => {\n const { chartWidth, chartMargin, preparedYAxis } = args;\n return (chartWidth -\n chartMargin.right -\n chartMargin.left -\n getWidthOccupiedByYAxis({ preparedAxis: preparedYAxis }));\n};\nexport function getYAxisWidth(axis) {\n let result = 0;\n if (axis === null || axis === void 0 ? void 0 : axis.title.text) {\n result += axis.title.height + axis.title.margin;\n }\n if (axis === null || axis === void 0 ? void 0 : axis.labels.enabled) {\n result += axis.labels.margin + axis.labels.width;\n }\n return result;\n}\nexport function getWidthOccupiedByYAxis(args) {\n const { preparedAxis } = args;\n let leftAxisWidth = 0;\n let rightAxisWidth = 0;\n preparedAxis === null || preparedAxis === void 0 ? void 0 : preparedAxis.forEach((axis) => {\n const axisWidth = getYAxisWidth(axis);\n if (axis.position === 'right') {\n rightAxisWidth = Math.max(rightAxisWidth, axisWidth);\n }\n else {\n leftAxisWidth = Math.max(leftAxisWidth, axisWidth);\n }\n });\n return leftAxisWidth + rightAxisWidth;\n}\n","import { select } from 'd3';\nimport clone from 'lodash/clone';\nimport get from 'lodash/get';\nimport merge from 'lodash/merge';\nimport { CONTINUOUS_LEGEND_SIZE, legendDefaults } from '../../constants';\nimport { getDefaultColorStops, getDomainForContinuousColorScale, getHorisontalSvgTextHeight, getLabelsSize, } from '../../utils';\nimport { getBoundsWidth } from '../useChartDimensions';\nimport { getYAxisWidth } from '../useChartDimensions/utils';\nexport const getPreparedLegend = (args) => {\n var _a, _b, _c, _d, _e, _f, _g;\n const { legend, series } = args;\n const enabled = Boolean(typeof (legend === null || legend === void 0 ? void 0 : legend.enabled) === 'boolean' ? legend === null || legend === void 0 ? void 0 : legend.enabled : series.length > 1);\n const defaultItemStyle = clone(legendDefaults.itemStyle);\n const itemStyle = get(legend, 'itemStyle');\n const computedItemStyle = merge(defaultItemStyle, itemStyle);\n const lineHeight = getHorisontalSvgTextHeight({ text: 'Tmp', style: computedItemStyle });\n const legendType = get(legend, 'type', 'discrete');\n const isTitleEnabled = Boolean((_a = legend === null || legend === void 0 ? void 0 : legend.title) === null || _a === void 0 ? void 0 : _a.text);\n const titleMargin = isTitleEnabled ? get(legend, 'title.margin', 4) : 0;\n const titleStyle = Object.assign({ fontSize: '12px', fontWeight: 'bold' }, get(legend, 'title.style'));\n const titleText = isTitleEnabled ? get(legend, 'title.text', '') : '';\n const titleHeight = isTitleEnabled\n ? getLabelsSize({ labels: [titleText], style: titleStyle }).maxHeight\n : 0;\n const ticks = {\n labelsMargin: 4,\n labelsLineHeight: 12,\n };\n const colorScale = {\n colors: [],\n domain: [],\n stops: [],\n };\n let height = 0;\n if (enabled) {\n height += titleHeight + titleMargin;\n if (legendType === 'continuous') {\n height += CONTINUOUS_LEGEND_SIZE.height;\n height += ticks.labelsLineHeight + ticks.labelsMargin;\n colorScale.colors = (_c = (_b = legend === null || legend === void 0 ? void 0 : legend.colorScale) === null || _b === void 0 ? void 0 : _b.colors) !== null && _c !== void 0 ? _c : [];\n colorScale.stops =\n (_e = (_d = legend === null || legend === void 0 ? void 0 : legend.colorScale) === null || _d === void 0 ? void 0 : _d.stops) !== null && _e !== void 0 ? _e : getDefaultColorStops(colorScale.colors.length);\n colorScale.domain =\n (_g = (_f = legend === null || legend === void 0 ? void 0 : legend.colorScale) === null || _f === void 0 ? void 0 : _f.domain) !== null && _g !== void 0 ? _g : getDomainForContinuousColorScale({ series });\n }\n else {\n height += lineHeight;\n }\n }\n const legendWidth = get(legend, 'width', CONTINUOUS_LEGEND_SIZE.width);\n return {\n align: get(legend, 'align', legendDefaults.align),\n enabled,\n height,\n itemDistance: get(legend, 'itemDistance', legendDefaults.itemDistance),\n itemStyle: computedItemStyle,\n lineHeight,\n margin: get(legend, 'margin', legendDefaults.margin),\n type: legendType,\n title: {\n enable: isTitleEnabled,\n text: titleText,\n margin: titleMargin,\n style: titleStyle,\n height: titleHeight,\n align: get(legend, 'title.align', 'left'),\n },\n width: legendWidth,\n ticks,\n colorScale,\n };\n};\nconst getFlattenLegendItems = (series) => {\n return series.reduce((acc, s) => {\n const legendEnabled = get(s, 'legend.enabled', true);\n if (legendEnabled) {\n acc.push(Object.assign(Object.assign({}, s), { symbol: s.legend.symbol }));\n }\n return acc;\n }, []);\n};\nconst getGroupedLegendItems = (args) => {\n const { maxLegendWidth, items, preparedLegend } = args;\n const result = [[]];\n let textWidthsInLine = [0];\n let lineIndex = 0;\n items.forEach((item) => {\n select(document.body)\n .append('text')\n .text(item.name)\n .style('font-size', preparedLegend.itemStyle.fontSize)\n .each(function () {\n const resultItem = clone(item);\n const textWidth = this.getBoundingClientRect().width;\n resultItem.textWidth = textWidth;\n textWidthsInLine.push(textWidth);\n const textsWidth = textWidthsInLine.reduce((acc, width) => acc + width, 0);\n result[lineIndex].push(resultItem);\n const symbolsWidth = result[lineIndex].reduce((acc, { symbol }) => {\n return acc + symbol.width + symbol.padding;\n }, 0);\n const distancesWidth = (result[lineIndex].length - 1) * preparedLegend.itemDistance;\n const isOverfilled = maxLegendWidth < textsWidth + symbolsWidth + distancesWidth;\n if (isOverfilled) {\n result[lineIndex].pop();\n lineIndex += 1;\n textWidthsInLine = [textWidth];\n const nextLineIndex = lineIndex;\n result[nextLineIndex] = [];\n result[nextLineIndex].push(resultItem);\n }\n })\n .remove();\n });\n return result;\n};\nexport const getLegendComponents = (args) => {\n const { chartWidth, chartHeight, chartMargin, series, preparedLegend, preparedYAxis } = args;\n const maxLegendWidth = getBoundsWidth({ chartWidth, chartMargin, preparedYAxis });\n const maxLegendHeight = (chartHeight - chartMargin.top - chartMargin.bottom - preparedLegend.margin) / 2;\n const flattenLegendItems = getFlattenLegendItems(series);\n const items = getGroupedLegendItems({\n maxLegendWidth,\n items: flattenLegendItems,\n preparedLegend,\n });\n let pagination;\n if (preparedLegend.type === 'discrete') {\n let legendHeight = preparedLegend.lineHeight * items.length;\n if (maxLegendHeight < legendHeight) {\n // extra line for paginator\n const limit = Math.floor(maxLegendHeight / preparedLegend.lineHeight) - 1;\n const maxPage = Math.ceil(items.length / limit);\n pagination = { limit, maxPage };\n legendHeight = maxLegendHeight;\n }\n preparedLegend.height = legendHeight;\n }\n const top = chartHeight - chartMargin.bottom - preparedLegend.height;\n const offset = {\n left: chartMargin.left + getYAxisWidth(preparedYAxis[0]),\n top,\n };\n return { legendConfig: { offset, pagination }, legendItems: items };\n};\n","export const seriesOptionsDefaults = {\n 'bar-x': {\n barMaxWidth: 50,\n barPadding: 0.1,\n groupPadding: 0.2,\n states: {\n hover: {\n enabled: true,\n brightness: 0.3,\n },\n inactive: {\n enabled: false,\n opacity: 0.5,\n },\n },\n },\n 'bar-y': {\n barMaxWidth: 50,\n barPadding: 0.1,\n groupPadding: 0.2,\n states: {\n hover: {\n enabled: true,\n brightness: 0.3,\n },\n inactive: {\n enabled: false,\n opacity: 0.5,\n },\n },\n },\n pie: {\n states: {\n hover: {\n enabled: true,\n brightness: 0.3,\n },\n inactive: {\n enabled: false,\n opacity: 0.5,\n },\n },\n },\n scatter: {\n states: {\n hover: {\n enabled: true,\n brightness: 0.3,\n },\n inactive: {\n enabled: false,\n opacity: 0.5,\n },\n },\n },\n line: {\n states: {\n hover: {\n enabled: true,\n brightness: 0.3,\n },\n inactive: {\n enabled: false,\n opacity: 0.5,\n },\n },\n },\n area: {\n states: {\n hover: {\n enabled: true,\n brightness: 0.3,\n },\n inactive: {\n enabled: false,\n opacity: 0.5,\n },\n },\n },\n treemap: {\n states: {\n hover: {\n enabled: true,\n brightness: 0.3,\n },\n inactive: {\n enabled: false,\n opacity: 0.5,\n },\n },\n },\n waterfall: {\n barMaxWidth: 50,\n barPadding: 0.1,\n states: {\n hover: {\n enabled: true,\n brightness: 0.3,\n },\n inactive: {\n enabled: false,\n opacity: 0.5,\n },\n },\n },\n};\n","import get from 'lodash/get';\nimport merge from 'lodash/merge';\nimport { getUniqId } from '../../utils';\nimport { DEFAULT_DATALABELS_PADDING, DEFAULT_DATALABELS_STYLE, DEFAULT_HALO_OPTIONS, DEFAULT_POINT_MARKER_OPTIONS, } from './constants';\nimport { getSeriesStackId, prepareLegendSymbol } from './utils';\nexport const DEFAULT_LINE_WIDTH = 1;\nexport const DEFAULT_MARKER = Object.assign(Object.assign({}, DEFAULT_POINT_MARKER_OPTIONS), { enabled: false });\nfunction prepareMarker(series, seriesOptions) {\n var _a;\n const seriesHoverState = get(seriesOptions, 'area.states.hover');\n const markerNormalState = Object.assign({}, DEFAULT_MARKER, (_a = seriesOptions === null || seriesOptions === void 0 ? void 0 : seriesOptions.area) === null || _a === void 0 ? void 0 : _a.marker, series.marker);\n const hoveredMarkerDefaultOptions = {\n enabled: true,\n radius: markerNormalState.radius,\n borderWidth: 1,\n borderColor: '#ffffff',\n halo: DEFAULT_HALO_OPTIONS,\n };\n return {\n states: {\n normal: markerNormalState,\n hover: merge(hoveredMarkerDefaultOptions, seriesHoverState === null || seriesHoverState === void 0 ? void 0 : seriesHoverState.marker),\n },\n };\n}\nexport function prepareArea(args) {\n const { colorScale, series: seriesList, seriesOptions, legend } = args;\n const defaultAreaWidth = get(seriesOptions, 'area.lineWidth', DEFAULT_LINE_WIDTH);\n const defaultOpacity = get(seriesOptions, 'area.opacity', 0.75);\n return seriesList.map((series) => {\n var _a, _b;\n const id = getUniqId();\n const name = series.name || '';\n const color = series.color || colorScale(name);\n const prepared = {\n type: series.type,\n color,\n opacity: get(series, 'opacity', defaultOpacity),\n lineWidth: get(series, 'lineWidth', defaultAreaWidth),\n name,\n id,\n visible: get(series, 'visible', true),\n legend: {\n enabled: get(series, 'legend.enabled', legend.enabled),\n symbol: prepareLegendSymbol(series),\n },\n data: series.data,\n stacking: series.stacking,\n stackId: getSeriesStackId(series),\n dataLabels: {\n enabled: ((_a = series.dataLabels) === null || _a === void 0 ? void 0 : _a.enabled) || false,\n style: Object.assign({}, DEFAULT_DATALABELS_STYLE, (_b = series.dataLabels) === null || _b === void 0 ? void 0 : _b.style),\n padding: get(series, 'dataLabels.padding', DEFAULT_DATALABELS_PADDING),\n allowOverlap: get(series, 'dataLabels.allowOverlap', false),\n html: get(series, 'dataLabels.html', false),\n },\n marker: prepareMarker(series, seriesOptions),\n cursor: get(series, 'cursor', null),\n yAxis: get(series, 'yAxis', 0),\n };\n return prepared;\n }, []);\n}\n","import get from 'lodash/get';\nimport { getLabelsSize, getUniqId } from '../../utils';\nimport { DEFAULT_DATALABELS_STYLE } from './constants';\nimport { getSeriesStackId, prepareLegendSymbol } from './utils';\nfunction prepareDataLabels(series) {\n var _a;\n const enabled = get(series, 'dataLabels.enabled', false);\n const style = Object.assign({}, DEFAULT_DATALABELS_STYLE, (_a = series.dataLabels) === null || _a === void 0 ? void 0 : _a.style);\n const html = get(series, 'dataLabels.html', false);\n const labels = enabled ? series.data.map((d) => String(d.label || d.x)) : [];\n const { maxHeight = 0, maxWidth = 0 } = getLabelsSize({\n labels,\n style,\n html,\n });\n const inside = series.stacking === 'percent' ? true : get(series, 'dataLabels.inside', false);\n return {\n enabled,\n inside,\n style,\n maxHeight,\n maxWidth,\n html,\n };\n}\nexport function prepareBarYSeries(args) {\n const { colorScale, series: seriesList, seriesOptions, legend } = args;\n return seriesList.map((series) => {\n var _a, _b, _c;\n const name = series.name || '';\n const color = series.color || colorScale(name);\n return {\n type: series.type,\n color,\n name,\n id: getUniqId(),\n visible: get(series, 'visible', true),\n legend: {\n enabled: get(series, 'legend.enabled', legend.enabled),\n symbol: prepareLegendSymbol(series),\n },\n data: series.data,\n stacking: series.stacking,\n stackId: getSeriesStackId(series),\n dataLabels: prepareDataLabels(series),\n cursor: get(series, 'cursor', null),\n borderRadius: (_c = (_a = series.borderRadius) !== null && _a !== void 0 ? _a : (_b = seriesOptions === null || seriesOptions === void 0 ? void 0 : seriesOptions['bar-y']) === null || _b === void 0 ? void 0 : _b.borderRadius) !== null && _c !== void 0 ? _c : 0,\n };\n }, []);\n}\n","import get from 'lodash/get';\nimport merge from 'lodash/merge';\nimport { DashStyle, LineCap } from '../../constants';\nimport { getUniqId } from '../../utils';\nimport { DEFAULT_DATALABELS_PADDING, DEFAULT_DATALABELS_STYLE, DEFAULT_HALO_OPTIONS, DEFAULT_LEGEND_SYMBOL_PADDING, DEFAULT_POINT_MARKER_OPTIONS, } from './constants';\nexport const DEFAULT_LEGEND_SYMBOL_SIZE = 16;\nexport const DEFAULT_LINE_WIDTH = 1;\nexport const DEFAULT_DASH_STYLE = DashStyle.Solid;\nexport const DEFAULT_MARKER = Object.assign(Object.assign({}, DEFAULT_POINT_MARKER_OPTIONS), { enabled: false });\nfunction prepareLinecap(dashStyle, series, seriesOptions) {\n const defaultLineCap = dashStyle === DashStyle.Solid ? LineCap.Round : LineCap.None;\n const lineCapFromSeriesOptions = get(seriesOptions, 'line.linecap', defaultLineCap);\n return get(series, 'linecap', lineCapFromSeriesOptions);\n}\nfunction prepareLineLegendSymbol(series, seriesOptions) {\n var _a;\n const symbolOptions = ((_a = series.legend) === null || _a === void 0 ? void 0 : _a.symbol) || {};\n const defaultLineWidth = get(seriesOptions, 'line.lineWidth', DEFAULT_LINE_WIDTH);\n return {\n shape: 'path',\n width: (symbolOptions === null || symbolOptions === void 0 ? void 0 : symbolOptions.width) || DEFAULT_LEGEND_SYMBOL_SIZE,\n padding: (symbolOptions === null || symbolOptions === void 0 ? void 0 : symbolOptions.padding) || DEFAULT_LEGEND_SYMBOL_PADDING,\n strokeWidth: get(series, 'lineWidth', defaultLineWidth),\n };\n}\nfunction prepareMarker(series, seriesOptions) {\n var _a;\n const seriesHoverState = get(seriesOptions, 'line.states.hover');\n const markerNormalState = Object.assign({}, DEFAULT_MARKER, (_a = seriesOptions === null || seriesOptions === void 0 ? void 0 : seriesOptions.line) === null || _a === void 0 ? void 0 : _a.marker, series.marker);\n const hoveredMarkerDefaultOptions = {\n enabled: true,\n radius: markerNormalState.radius,\n borderWidth: 1,\n borderColor: '#ffffff',\n halo: DEFAULT_HALO_OPTIONS,\n };\n return {\n states: {\n normal: markerNormalState,\n hover: merge(hoveredMarkerDefaultOptions, seriesHoverState === null || seriesHoverState === void 0 ? void 0 : seriesHoverState.marker),\n },\n };\n}\nexport function prepareLineSeries(args) {\n const { colorScale, series: seriesList, seriesOptions, legend } = args;\n const defaultLineWidth = get(seriesOptions, 'line.lineWidth', DEFAULT_LINE_WIDTH);\n const defaultDashStyle = get(seriesOptions, 'line.dashStyle', DEFAULT_DASH_STYLE);\n return seriesList.map((series) => {\n var _a, _b;\n const id = getUniqId();\n const name = series.name || '';\n const color = series.color || colorScale(name);\n const dashStyle = get(series, 'dashStyle', defaultDashStyle);\n const prepared = {\n type: series.type,\n color,\n lineWidth: get(series, 'lineWidth', defaultLineWidth),\n name,\n id,\n visible: get(series, 'visible', true),\n legend: {\n enabled: get(series, 'legend.enabled', legend.enabled),\n symbol: prepareLineLegendSymbol(series, seriesOptions),\n },\n data: series.data,\n dataLabels: {\n enabled: ((_a = series.dataLabels) === null || _a === void 0 ? void 0 : _a.enabled) || false,\n style: Object.assign({}, DEFAULT_DATALABELS_STYLE, (_b = series.dataLabels) === null || _b === void 0 ? void 0 : _b.style),\n padding: get(series, 'dataLabels.padding', DEFAULT_DATALABELS_PADDING),\n allowOverlap: get(series, 'dataLabels.allowOverlap', false),\n html: get(series, 'dataLabels.html', false),\n },\n marker: prepareMarker(series, seriesOptions),\n dashStyle: dashStyle,\n linecap: prepareLinecap(dashStyle, series, seriesOptions),\n opacity: get(series, 'opacity', null),\n cursor: get(series, 'cursor', null),\n yAxis: get(series, 'yAxis', 0),\n };\n return prepared;\n }, []);\n}\n","import get from 'lodash/get';\nimport merge from 'lodash/merge';\nimport { getSymbolType, getUniqId } from '../../utils';\nimport { DEFAULT_HALO_OPTIONS, DEFAULT_POINT_MARKER_OPTIONS } from './constants';\nimport { prepareLegendSymbol } from './utils';\nfunction prepareMarker(series, seriesOptions, index) {\n const seriesHoverState = get(seriesOptions, 'scatter.states.hover');\n const markerNormalState = Object.assign(Object.assign({}, DEFAULT_POINT_MARKER_OPTIONS), { enabled: true, symbol: series.symbolType || getSymbolType(index) });\n const hoveredMarkerDefaultOptions = {\n enabled: true,\n radius: markerNormalState.radius,\n borderWidth: 1,\n borderColor: '#ffffff',\n halo: DEFAULT_HALO_OPTIONS,\n };\n return {\n states: {\n normal: markerNormalState,\n hover: merge(hoveredMarkerDefaultOptions, seriesHoverState === null || seriesHoverState === void 0 ? void 0 : seriesHoverState.marker),\n },\n };\n}\nexport function prepareScatterSeries(args) {\n const { colorScale, series, seriesOptions, legend } = args;\n return series.map((s, index) => {\n const id = getUniqId();\n const name = 'name' in s && s.name ? s.name : '';\n const symbolType = s.symbolType || getSymbolType(index);\n const prepared = {\n id,\n type: s.type,\n name,\n color: get(s, 'color', colorScale(name)),\n visible: get(s, 'visible', true),\n legend: {\n enabled: get(s, 'legend.enabled', legend.enabled),\n symbol: prepareLegendSymbol(s, symbolType),\n },\n data: s.data,\n marker: prepareMarker(s, seriesOptions, index),\n cursor: get(s, 'cursor', null),\n yAxis: get(s, 'yAxis', 0),\n };\n return prepared;\n }, []);\n}\n","import React from 'react';\nimport { group, scaleOrdinal } from 'd3';\nimport { DEFAULT_PALETTE } from '../../constants';\nimport { getSeriesNames } from '../../utils';\nimport { getLegendComponents, getPreparedLegend } from './prepare-legend';\nimport { getPreparedOptions } from './prepare-options';\nimport { prepareSeries } from './prepareSeries';\nimport { getActiveLegendItems, getAllLegendItems } from './utils';\nexport const useSeries = (args) => {\n const { chartWidth, chartHeight, chartMargin, legend, preparedYAxis, series: { data: series, options: seriesOptions }, } = args;\n const preparedLegend = React.useMemo(() => getPreparedLegend({ legend, series }), [legend, series]);\n const preparedSeries = React.useMemo(() => {\n const seriesNames = getSeriesNames(series);\n const colorScale = scaleOrdinal(seriesNames, DEFAULT_PALETTE);\n const groupedSeries = group(series, (item) => item.type);\n return Array.from(groupedSeries).reduce((acc, [seriesType, seriesList]) => {\n acc.push(...prepareSeries({\n type: seriesType,\n series: seriesList,\n seriesOptions,\n legend: preparedLegend,\n colorScale,\n }));\n return acc;\n }, []);\n }, [series, seriesOptions, preparedLegend]);\n const preparedSeriesOptions = React.useMemo(() => {\n return getPreparedOptions(seriesOptions);\n }, [seriesOptions]);\n const [activeLegendItems, setActiveLegendItems] = React.useState(getActiveLegendItems(preparedSeries));\n const chartSeries = React.useMemo(() => {\n return preparedSeries.map((singleSeries) => {\n if (singleSeries.legend.enabled) {\n return Object.assign(Object.assign({}, singleSeries), { visible: activeLegendItems.includes(singleSeries.name) });\n }\n return singleSeries;\n });\n }, [preparedSeries, activeLegendItems]);\n const { legendConfig, legendItems } = React.useMemo(() => {\n return getLegendComponents({\n chartHeight,\n chartMargin,\n chartWidth,\n series: chartSeries,\n preparedLegend,\n preparedYAxis,\n });\n }, [chartWidth, chartHeight, chartMargin, chartSeries, preparedLegend, preparedYAxis]);\n const handleLegendItemClick = React.useCallback(({ name, metaKey }) => {\n const allItems = getAllLegendItems(preparedSeries);\n const onlyItemSelected = activeLegendItems.length === 1 && activeLegendItems.includes(name);\n let nextActiveLegendItems;\n if (metaKey && activeLegendItems.includes(name)) {\n nextActiveLegendItems = activeLegendItems.filter((item) => item !== name);\n }\n else if (metaKey && !activeLegendItems.includes(name)) {\n nextActiveLegendItems = activeLegendItems.concat(name);\n }\n else if (onlyItemSelected && allItems.length === 1) {\n nextActiveLegendItems = [];\n }\n else if (onlyItemSelected) {\n nextActiveLegendItems = allItems;\n }\n else {\n nextActiveLegendItems = [name];\n }\n setActiveLegendItems(nextActiveLegendItems);\n }, [preparedSeries, activeLegendItems]);\n // FIXME: remove effect. It initiates extra rerender\n React.useEffect(() => {\n setActiveLegendItems(getActiveLegendItems(preparedSeries));\n }, [preparedSeries]);\n return {\n legendItems,\n legendConfig,\n preparedLegend,\n preparedSeries: chartSeries,\n preparedSeriesOptions,\n handleLegendItemClick,\n };\n};\n","import { ChartError } from '../../libs';\nimport { prepareArea } from './prepare-area';\nimport { prepareBarXSeries } from './prepare-bar-x';\nimport { prepareBarYSeries } from './prepare-bar-y';\nimport { prepareLineSeries } from './prepare-line';\nimport { preparePieSeries } from './prepare-pie';\nimport { prepareSankeySeries } from './prepare-sankey';\nimport { prepareScatterSeries } from './prepare-scatter';\nimport { prepareTreemap } from './prepare-treemap';\nimport { prepareWaterfallSeries } from './prepare-waterfall';\nexport function prepareSeries(args) {\n const { type, series, seriesOptions, legend, colorScale } = args;\n switch (type) {\n case 'pie': {\n return series.reduce((acc, singleSeries) => {\n acc.push(...preparePieSeries({ series: singleSeries, seriesOptions, legend }));\n return acc;\n }, []);\n }\n case 'bar-x': {\n return prepareBarXSeries({\n series: series,\n legend,\n colorScale,\n seriesOptions,\n });\n }\n case 'bar-y': {\n return prepareBarYSeries({\n series: series,\n legend,\n colorScale,\n seriesOptions,\n });\n }\n case 'scatter': {\n return prepareScatterSeries({ series: series, legend, colorScale });\n }\n case 'line': {\n return prepareLineSeries({\n series: series,\n seriesOptions,\n legend,\n colorScale,\n });\n }\n case 'area': {\n return prepareArea({\n series: series,\n seriesOptions,\n legend,\n colorScale,\n });\n }\n case 'treemap': {\n return prepareTreemap({\n series: series,\n seriesOptions,\n legend,\n colorScale,\n });\n }\n case 'waterfall': {\n return prepareWaterfallSeries({\n series: series,\n legend,\n colorScale,\n });\n }\n case 'sankey': {\n return prepareSankeySeries({\n series: series,\n seriesOptions,\n colorScale,\n legend,\n });\n }\n default: {\n throw new ChartError({\n message: `Series type \"${type}\" does not support data preparation for series that do not support the presence of axes`,\n });\n }\n }\n}\n","import { scaleOrdinal } from 'd3';\nimport get from 'lodash/get';\nimport { DEFAULT_PALETTE } from '../../constants';\nimport { getUniqId } from '../../utils';\nimport { DEFAULT_DATALABELS_PADDING, DEFAULT_DATALABELS_STYLE } from './constants';\nimport { prepareLegendSymbol } from './utils';\nexport function preparePieSeries(args) {\n const { series, seriesOptions, legend } = args;\n const dataNames = series.data.map((d) => d.name);\n const colorScale = scaleOrdinal(dataNames, DEFAULT_PALETTE);\n const stackId = getUniqId();\n const seriesHoverState = get(seriesOptions, 'pie.states.hover');\n const preparedSeries = series.data.map((dataItem, i) => {\n var _a, _b, _c, _d, _e;\n const result = {\n type: 'pie',\n data: dataItem,\n dataLabels: {\n enabled: get(series, 'dataLabels.enabled', true),\n style: Object.assign({}, DEFAULT_DATALABELS_STYLE, (_a = series.dataLabels) === null || _a === void 0 ? void 0 : _a.style),\n padding: get(series, 'dataLabels.padding', DEFAULT_DATALABELS_PADDING),\n allowOverlap: get(series, 'dataLabels.allowOverlap', false),\n connectorPadding: get(series, 'dataLabels.connectorPadding', 5),\n connectorShape: get(series, 'dataLabels.connectorShape', 'polyline'),\n distance: get(series, 'dataLabels.distance', 25),\n connectorCurve: get(series, 'dataLabels.connectorCurve', 'basic'),\n html: get(series, 'dataLabels.html', false),\n },\n label: dataItem.label,\n value: dataItem.value,\n visible: typeof dataItem.visible === 'boolean' ? dataItem.visible : true,\n name: dataItem.name,\n id: `Series ${i}`,\n color: dataItem.color || colorScale(dataItem.name),\n legend: {\n enabled: get(series, 'legend.enabled', legend.enabled),\n symbol: prepareLegendSymbol(series),\n },\n center: series.center || ['50%', '50%'],\n borderColor: series.borderColor || '',\n borderRadius: (_b = series.borderRadius) !== null && _b !== void 0 ? _b : 0,\n borderWidth: (_c = series.borderWidth) !== null && _c !== void 0 ? _c : 1,\n radius: (_e = (_d = dataItem.radius) !== null && _d !== void 0 ? _d : series.radius) !== null && _e !== void 0 ? _e : '100%',\n innerRadius: series.innerRadius || 0,\n stackId,\n states: {\n hover: {\n halo: {\n enabled: get(seriesHoverState, 'halo.enabled', true),\n opacity: get(seriesHoverState, 'halo.opacity', 0.25),\n size: get(seriesHoverState, 'halo.size', 10),\n },\n },\n },\n renderCustomShape: series.renderCustomShape,\n opacity: get(dataItem, 'opacity', null),\n cursor: get(series, 'cursor', null),\n };\n return result;\n });\n return preparedSeries;\n}\n","import get from 'lodash/get';\nimport { getUniqId } from '../../utils';\nimport { DEFAULT_DATALABELS_PADDING, DEFAULT_DATALABELS_STYLE } from './constants';\nimport { getSeriesStackId, prepareLegendSymbol } from './utils';\nexport function prepareBarXSeries(args) {\n const { colorScale, series: seriesList, seriesOptions, legend } = args;\n return seriesList.map((series) => {\n var _a, _b, _c, _d, _e;\n const name = series.name || '';\n const color = series.color || colorScale(name);\n return {\n type: series.type,\n color,\n name,\n id: getUniqId(),\n visible: get(series, 'visible', true),\n legend: {\n enabled: get(series, 'legend.enabled', legend.enabled),\n symbol: prepareLegendSymbol(series),\n },\n data: series.data,\n stacking: series.stacking,\n stackId: getSeriesStackId(series),\n dataLabels: {\n enabled: ((_a = series.dataLabels) === null || _a === void 0 ? void 0 : _a.enabled) || false,\n inside: typeof ((_b = series.dataLabels) === null || _b === void 0 ? void 0 : _b.inside) === 'boolean'\n ? (_c = series.dataLabels) === null || _c === void 0 ? void 0 : _c.inside\n : false,\n style: Object.assign({}, DEFAULT_DATALABELS_STYLE, (_d = series.dataLabels) === null || _d === void 0 ? void 0 : _d.style),\n allowOverlap: ((_e = series.dataLabels) === null || _e === void 0 ? void 0 : _e.allowOverlap) || false,\n padding: get(series, 'dataLabels.padding', DEFAULT_DATALABELS_PADDING),\n html: get(series, 'dataLabels.html', false),\n },\n cursor: get(series, 'cursor', null),\n yAxis: get(series, 'yAxis', 0),\n borderRadius: get(series, 'borderRadius', get(seriesOptions, 'bar-x.borderRadius', 0)),\n };\n }, []);\n}\n","import get from 'lodash/get';\nimport { LayoutAlgorithm } from '../../constants';\nimport { getUniqId } from '../../utils';\nimport { DEFAULT_DATALABELS_PADDING, DEFAULT_DATALABELS_STYLE } from './constants';\nimport { prepareLegendSymbol } from './utils';\nexport function prepareTreemap(args) {\n const { colorScale, legend, series } = args;\n return series.map((s) => {\n var _a;\n const id = getUniqId();\n const name = s.name || '';\n const color = s.color || colorScale(name);\n const preparedSeries = {\n color,\n data: s.data,\n dataLabels: {\n enabled: get(s, 'dataLabels.enabled', true),\n style: Object.assign({}, DEFAULT_DATALABELS_STYLE, (_a = s.dataLabels) === null || _a === void 0 ? void 0 : _a.style),\n padding: get(s, 'dataLabels.padding', DEFAULT_DATALABELS_PADDING),\n allowOverlap: get(s, 'dataLabels.allowOverlap', false),\n html: get(s, 'dataLabels.html', false),\n align: get(s, 'dataLabels.align', 'left'),\n },\n id,\n type: s.type,\n name,\n visible: get(s, 'visible', true),\n legend: {\n enabled: get(s, 'legend.enabled', legend.enabled),\n symbol: prepareLegendSymbol(s),\n },\n levels: s.levels,\n layoutAlgorithm: get(s, 'layoutAlgorithm', LayoutAlgorithm.Binary),\n cursor: get(s, 'cursor', null),\n };\n return preparedSeries;\n });\n}\n","import get from 'lodash/get';\nimport { DEFAULT_PALETTE } from '../../constants';\nimport { getUniqId } from '../../utils';\nimport { DEFAULT_DATALABELS_PADDING, DEFAULT_DATALABELS_STYLE } from './constants';\nimport { prepareLegendSymbol } from './utils';\nexport function prepareWaterfallSeries(args) {\n const { colorScale, series: seriesList, legend } = args;\n const [, negativeColor, positiveColor] = DEFAULT_PALETTE;\n return seriesList.map((series) => {\n var _a, _b, _c;\n const name = series.name || '';\n const color = series.color || colorScale(name);\n const prepared = {\n type: series.type,\n color,\n positiveColor: positiveColor,\n negativeColor: negativeColor,\n name,\n id: getUniqId(),\n visible: get(series, 'visible', true),\n legend: {\n enabled: get(series, 'legend.enabled', legend.enabled),\n symbol: prepareLegendSymbol(series),\n },\n data: series.data,\n dataLabels: {\n enabled: ((_a = series.dataLabels) === null || _a === void 0 ? void 0 : _a.enabled) || false,\n style: Object.assign({}, DEFAULT_DATALABELS_STYLE, (_b = series.dataLabels) === null || _b === void 0 ? void 0 : _b.style),\n allowOverlap: ((_c = series.dataLabels) === null || _c === void 0 ? void 0 : _c.allowOverlap) || false,\n padding: get(series, 'dataLabels.padding', DEFAULT_DATALABELS_PADDING),\n html: get(series, 'dataLabels.html', false),\n },\n cursor: get(series, 'cursor', null),\n };\n return prepared;\n }, []);\n}\n","import get from 'lodash/get';\nimport { getUniqId } from '../../utils';\nimport { DEFAULT_DATALABELS_STYLE } from './constants';\nimport { prepareLegendSymbol } from './utils';\nexport function prepareSankeySeries(args) {\n const { colorScale, legend, series } = args;\n return series.map((s) => {\n var _a;\n const id = getUniqId();\n const name = s.name || '';\n const color = colorScale(name);\n const preparedSeries = {\n color,\n data: s.data.map((d) => {\n var _a;\n return ({\n name: d.name,\n color: (_a = d.color) !== null && _a !== void 0 ? _a : colorScale(d.name),\n links: d.links,\n });\n }),\n dataLabels: {\n enabled: get(s, 'dataLabels.enabled', true),\n style: Object.assign({}, DEFAULT_DATALABELS_STYLE, (_a = s.dataLabels) === null || _a === void 0 ? void 0 : _a.style),\n },\n id,\n type: s.type,\n name,\n visible: get(s, 'visible', true),\n legend: {\n enabled: get(s, 'legend.enabled', legend.enabled),\n symbol: prepareLegendSymbol(s),\n },\n cursor: get(s, 'cursor', null),\n };\n return preparedSeries;\n });\n}\n","import merge from 'lodash/merge';\nimport { seriesOptionsDefaults } from '../../constants';\nexport const getPreparedOptions = (options) => {\n return merge({}, seriesOptionsDefaults, options);\n};\n","import React from 'react';\nimport { extent, scaleBand, scaleLinear, scaleLog, scaleUtc } from 'd3';\nimport get from 'lodash/get';\nimport { DEFAULT_AXIS_TYPE } from '../../constants';\nimport { CHART_SERIES_WITH_VOLUME_ON_Y_AXIS, getAxisHeight, getDataCategoryValue, getDefaultMaxXAxisValue, getDomainDataXBySeries, getDomainDataYBySeries, getOnlyVisibleSeries, isAxisRelatedSeries, isSeriesWithCategoryValues, } from '../../utils';\nconst isNumericalArrayData = (data) => {\n return data.every((d) => typeof d === 'number' || d === null);\n};\nconst filterCategoriesByVisibleSeries = (args) => {\n const { axisDirection, categories, series } = args;\n const visibleCategories = new Set();\n series.forEach((s) => {\n if (isSeriesWithCategoryValues(s)) {\n s.data.forEach((d) => {\n visibleCategories.add(getDataCategoryValue({ axisDirection, categories, data: d }));\n });\n }\n });\n return categories.filter((c) => visibleCategories.has(c));\n};\nexport function createYScale(axis, series, boundsHeight) {\n const yType = get(axis, 'type', DEFAULT_AXIS_TYPE);\n const yMin = get(axis, 'min');\n const yCategories = get(axis, 'categories');\n const yTimestamps = get(axis, 'timestamps');\n switch (yType) {\n case 'linear':\n case 'logarithmic': {\n const domain = getDomainDataYBySeries(series);\n const range = [boundsHeight, boundsHeight * axis.maxPadding];\n if (isNumericalArrayData(domain)) {\n const [domainYMin, domainMax] = extent(domain);\n const yMinValue = typeof yMin === 'number' ? yMin : domainYMin;\n let yMaxValue = domainMax;\n if (series.some((s) => CHART_SERIES_WITH_VOLUME_ON_Y_AXIS.includes(s.type))) {\n yMaxValue = Math.max(yMaxValue, 0);\n }\n const scaleFn = yType === 'logarithmic' ? scaleLog : scaleLinear;\n return scaleFn().domain([yMinValue, yMaxValue]).range(range).nice();\n }\n break;\n }\n case 'category': {\n if (yCategories) {\n const filteredCategories = filterCategoriesByVisibleSeries({\n axisDirection: 'y',\n categories: yCategories,\n series: series,\n });\n return scaleBand().domain(filteredCategories).range([boundsHeight, 0]);\n }\n break;\n }\n case 'datetime': {\n const range = [boundsHeight, boundsHeight * axis.maxPadding];\n if (yTimestamps) {\n const [yMin, yMax] = extent(yTimestamps);\n return scaleUtc().domain([yMin, yMax]).range(range).nice();\n }\n else {\n const domain = getDomainDataYBySeries(series);\n if (isNumericalArrayData(domain)) {\n const [yMin, yMax] = extent(domain);\n return scaleUtc().domain([yMin, yMax]).range(range).nice();\n }\n }\n break;\n }\n }\n throw new Error('Failed to create yScale');\n}\nfunction calculateXAxisPadding(series) {\n let result = 0;\n series.forEach((s) => {\n switch (s.type) {\n case 'bar-y': {\n // Since labels can be located to the right of the bar, need to add an additional space\n const inside = get(s, 'dataLabels.inside');\n if (!inside) {\n const labelsMaxWidth = get(s, 'dataLabels.maxWidth', 0);\n result = Math.max(result, labelsMaxWidth);\n }\n break;\n }\n }\n });\n return result;\n}\nexport function createXScale(axis, series, boundsWidth) {\n const xMin = get(axis, 'min');\n const xMax = getDefaultMaxXAxisValue(series);\n const xType = get(axis, 'type', DEFAULT_AXIS_TYPE);\n const xCategories = get(axis, 'categories');\n const xTimestamps = get(axis, 'timestamps');\n const maxPadding = get(axis, 'maxPadding', 0);\n const xAxisMinPadding = boundsWidth * maxPadding + calculateXAxisPadding(series);\n const xRange = [0, boundsWidth - xAxisMinPadding];\n switch (xType) {\n case 'linear':\n case 'logarithmic': {\n const domain = getDomainDataXBySeries(series);\n if (isNumericalArrayData(domain)) {\n const [domainXMin, domainXMax] = extent(domain);\n const xMinValue = typeof xMin === 'number' ? xMin : domainXMin;\n const xMaxValue = typeof xMax === 'number' ? Math.max(xMax, domainXMax) : domainXMax;\n const scaleFn = xType === 'logarithmic' ? scaleLog : scaleLinear;\n return scaleFn().domain([xMinValue, xMaxValue]).range(xRange).nice();\n }\n break;\n }\n case 'category': {\n if (xCategories) {\n const filteredCategories = filterCategoriesByVisibleSeries({\n axisDirection: 'x',\n categories: xCategories,\n series: series,\n });\n const xScale = scaleBand().domain(filteredCategories).range([0, boundsWidth]);\n if (xScale.step() / 2 < xAxisMinPadding) {\n xScale.range(xRange);\n }\n return xScale;\n }\n break;\n }\n case 'datetime': {\n if (xTimestamps) {\n const [xMin, xMax] = extent(xTimestamps);\n return scaleUtc().domain([xMin, xMax]).range(xRange).nice();\n }\n else {\n const domain = getDomainDataXBySeries(series);\n if (isNumericalArrayData(domain)) {\n const [xMin, xMax] = extent(domain);\n return scaleUtc().domain([xMin, xMax]).range(xRange).nice();\n }\n }\n break;\n }\n }\n throw new Error('Failed to create xScale');\n}\nconst createScales = (args) => {\n const { boundsWidth, boundsHeight, series, xAxis, yAxis, split } = args;\n let visibleSeries = getOnlyVisibleSeries(series);\n // Reassign to all series in case of all series unselected,\n // otherwise we will get an empty space without grid\n visibleSeries = visibleSeries.length === 0 ? series : visibleSeries;\n return {\n xScale: createXScale(xAxis, visibleSeries, boundsWidth),\n yScale: yAxis.map((axis, index) => {\n const axisSeries = series.filter((s) => {\n const seriesAxisIndex = get(s, 'yAxis', 0);\n return seriesAxisIndex === index;\n });\n const visibleAxisSeries = getOnlyVisibleSeries(axisSeries);\n const axisHeight = getAxisHeight({ boundsHeight, split });\n return createYScale(axis, visibleAxisSeries.length ? visibleAxisSeries : axisSeries, axisHeight);\n }),\n };\n};\n/**\n * Uses to create scales for axis related series\n */\nexport const useAxisScales = (args) => {\n const { boundsWidth, boundsHeight, series, xAxis, yAxis, split } = args;\n return React.useMemo(() => {\n let xScale;\n let yScale;\n const hasAxisRelatedSeries = series.some(isAxisRelatedSeries);\n if (hasAxisRelatedSeries) {\n ({ xScale, yScale } = createScales({\n boundsWidth,\n boundsHeight,\n series,\n xAxis,\n yAxis,\n split,\n }));\n }\n return { xScale, yScale };\n }, [boundsWidth, boundsHeight, series, xAxis, yAxis, split]);\n};\n","import sortBy from 'lodash/sortBy';\nexport function getLeftPosition(label) {\n switch (label.textAnchor) {\n case 'start': {\n return label.x;\n }\n case 'middle': {\n return label.x - label.size.width / 2;\n }\n case 'end': {\n return label.x - label.size.width;\n }\n default: {\n return label.x;\n }\n }\n}\nexport function getOverlappingByX(rect1, rect2, gap = 0) {\n const left1 = getLeftPosition(rect1);\n const right1 = left1 + rect1.size.width;\n const left2 = getLeftPosition(rect2);\n const right2 = left2 + rect2.size.width;\n return Math.max(0, Math.min(right1, right2) - Math.max(left1, left2) + gap);\n}\nexport function getOverlappingByY(rect1, rect2, gap = 0) {\n const top1 = rect1.y - rect1.size.height;\n const bottom1 = rect1.y;\n const top2 = rect2.y - rect2.size.height;\n const bottom2 = rect2.y;\n return Math.max(0, Math.min(bottom1, bottom2) - Math.max(top1, top2) + gap);\n}\nexport function isLabelsOverlapping(label1, label2, padding = 0) {\n return Boolean(getOverlappingByX(label1, label2, padding) && getOverlappingByY(label1, label2, padding));\n}\nexport function filterOverlappingLabels(labels) {\n const result = [];\n const sorted = sortBy(labels, (d) => d.y, getLeftPosition);\n sorted.forEach((label) => {\n if (!result.some((l) => isLabelsOverlapping(label, l))) {\n result.push(label);\n }\n });\n return result;\n}\n","import React from 'react';\nimport { Portal } from '@gravity-ui/uikit';\nexport const HtmlLayer = (props) => {\n const { htmlLayout, preparedData } = props;\n const items = React.useMemo(() => {\n if (Array.isArray(preparedData)) {\n return preparedData.reduce((result, d) => {\n result.push(...d.htmlElements);\n return result;\n }, []);\n }\n else {\n return preparedData.htmlElements;\n }\n }, [preparedData]);\n if (!htmlLayout) {\n return null;\n }\n return (React.createElement(Portal, { container: htmlLayout }, items.map((item, index) => {\n return (React.createElement(\"div\", { key: index, dangerouslySetInnerHTML: { __html: item.content }, style: { position: 'absolute', left: item.x, top: item.y } }));\n })));\n};\n","import { symbol } from 'd3';\nimport get from 'lodash/get';\nimport { SymbolType } from '../../constants';\nimport { block, getSymbol } from '../../utils';\nconst b = block('d3-marker');\nconst haloClassName = b('halo');\nconst symbolClassName = b('symbol');\nexport function renderMarker(selection) {\n const markerSelection = selection\n .attr('class', b('wrapper'))\n .attr('visibility', getMarkerVisibility)\n .attr('transform', (d) => {\n return `translate(${d.point.x},${d.point.y})`;\n });\n markerSelection\n .append('path')\n .attr('class', haloClassName)\n .attr('d', (d) => {\n const series = d.point.series;\n const type = series.marker.states.normal.symbol;\n const radius = get(d.point.data, 'radius', series.marker.states.hover.radius);\n const haloSize = series.marker.states.hover.halo.size;\n return getMarkerSymbol(type, radius + haloSize);\n })\n .attr('fill', (d) => d.point.series.color)\n .attr('opacity', (d) => d.point.series.marker.states.hover.halo.opacity)\n .attr('z-index', -1)\n .attr('visibility', getMarkerHaloVisibility);\n markerSelection\n .append('path')\n .attr('class', symbolClassName)\n .call(setMarker, 'normal')\n .attr('fill', (d) => d.point.series.color);\n return markerSelection;\n}\nexport function getMarkerVisibility(d) {\n const markerStates = d.point.series.marker.states;\n let enabled;\n if (d.hovered) {\n enabled = markerStates.hover.enabled && d.hovered;\n }\n else {\n enabled =\n markerStates.normal.enabled || get(d.point.data, 'marker.states.normal.enabled', false);\n }\n return enabled ? '' : 'hidden';\n}\nexport function getMarkerHaloVisibility(d) {\n const markerStates = d.point.series.marker.states;\n const enabled = markerStates.hover.halo.enabled && d.hovered;\n return enabled ? '' : 'hidden';\n}\nexport function setMarker(selection, state) {\n selection\n .attr('d', (d) => {\n const series = d.point.series;\n const type = series.marker.states.normal.symbol;\n const radius = get(d.point.data, 'radius', series.marker.states[state].radius);\n const size = radius + series.marker.states[state].borderWidth;\n return getMarkerSymbol(type, size);\n })\n .attr('stroke-width', (d) => d.point.series.marker.states[state].borderWidth)\n .attr('stroke', (d) => d.point.series.marker.states[state].borderColor);\n}\nexport function getMarkerSymbol(type = SymbolType.Circle, radius) {\n const symbolFn = getSymbol(type);\n const size = Math.pow(radius, 2) * Math.PI;\n return symbol(symbolFn, size)();\n}\nexport function selectMarkerHalo(parentSelection) {\n return parentSelection.select(`.${haloClassName}`);\n}\nexport function selectMarkerSymbol(parentSelection) {\n return parentSelection.select(`.${symbolClassName}`);\n}\n","import { path, select } from 'd3';\nimport get from 'lodash/get';\nimport { getDataCategoryValue } from '../../utils';\nexport function getXValue(args) {\n const { point, xAxis, xScale } = args;\n if (xAxis.type === 'category') {\n const xBandScale = xScale;\n const categories = get(xAxis, 'categories', []);\n const dataCategory = getDataCategoryValue({ axisDirection: 'x', categories, data: point });\n return (xBandScale(dataCategory) || 0) + xBandScale.step() / 2;\n }\n const xLinearScale = xScale;\n return xLinearScale(point.x);\n}\nexport function getYValue(args) {\n const { point, yAxis, yScale } = args;\n if (yAxis.type === 'category') {\n const yBandScale = yScale;\n const categories = get(yAxis, 'categories', []);\n const dataCategory = getDataCategoryValue({ axisDirection: 'y', categories, data: point });\n return (yBandScale(dataCategory) || 0) + yBandScale.step() / 2;\n }\n const yLinearScale = yScale;\n return yLinearScale(point.y);\n}\nexport function shapeKey(d) {\n return d.id || -1;\n}\nexport function setActiveState(args) {\n const { element, datum, state, active } = args;\n const elementSelection = select(element);\n if (datum.active !== active) {\n datum.active = active;\n const opacity = datum.active ? null : state === null || state === void 0 ? void 0 : state.opacity;\n elementSelection.attr('opacity', opacity || null);\n }\n return datum;\n}\nexport function getRectPath(args) {\n const { x, y, width, height, borderRadius = 0 } = args;\n const borderRadiuses = typeof borderRadius === 'number' ? new Array(4).fill(borderRadius) : borderRadius;\n const [borderRadiusTopLeft = 0, borderRadiusTopRight = 0, borderRadiusBottomRight = 0, borderRadiusBottomLeft = 0,] = borderRadiuses !== null && borderRadiuses !== void 0 ? borderRadiuses : [];\n const p = path();\n let startAngle = -Math.PI / 2;\n const angle = Math.PI / 2;\n p.moveTo(x + borderRadiusTopLeft, y);\n p.lineTo(x + width - borderRadiusTopRight, y);\n p.arc(x + width - borderRadiusTopRight, y + borderRadiusTopRight, borderRadiusTopRight, startAngle, startAngle + angle);\n startAngle += angle;\n p.lineTo(x + width, y + height - borderRadiusBottomRight);\n p.arc(x + width - borderRadiusBottomRight, y + height - borderRadiusBottomRight, borderRadiusBottomRight, startAngle, startAngle + angle);\n startAngle += angle;\n p.lineTo(x + borderRadiusBottomLeft, y + height);\n p.arc(x + borderRadiusBottomLeft, y + height - borderRadiusBottomLeft, borderRadiusBottomLeft, startAngle, startAngle + angle);\n startAngle += angle;\n p.lineTo(x, y + borderRadiusTopLeft);\n p.arc(x + borderRadiusTopLeft, y + borderRadiusTopLeft, borderRadiusTopLeft, startAngle, startAngle + angle);\n p.closePath();\n return p;\n}\n","import React from 'react';\nimport { area as areaGenerator, color, line as lineGenerator, select } from 'd3';\nimport get from 'lodash/get';\nimport { block, filterOverlappingLabels } from '../../..//utils';\nimport { HtmlLayer } from '../HtmlLayer';\nimport { getMarkerHaloVisibility, getMarkerVisibility, renderMarker, selectMarkerHalo, selectMarkerSymbol, setMarker, } from '../marker';\nimport { setActiveState } from '../utils';\nconst b = block('d3-area');\nexport const AreaSeriesShapes = (args) => {\n const { dispatcher, preparedData, seriesOptions, htmlLayout } = args;\n const hoveredDataRef = React.useRef(null);\n const ref = React.useRef(null);\n React.useEffect(() => {\n var _a;\n if (!ref.current) {\n return () => { };\n }\n const svgElement = select(ref.current);\n const hoverOptions = get(seriesOptions, 'area.states.hover');\n const inactiveOptions = get(seriesOptions, 'area.states.inactive');\n const line = lineGenerator()\n .x((d) => d.x)\n .y((d) => d.y);\n svgElement.selectAll('*').remove();\n const shapeSelection = svgElement\n .selectAll('shape')\n .data(preparedData)\n .join('g')\n .attr('class', b('series'))\n .attr('cursor', (d) => d.series.cursor);\n shapeSelection\n .append('path')\n .attr('class', b('line'))\n .attr('d', (d) => line(d.points))\n .attr('fill', 'none')\n .attr('stroke', (d) => d.color)\n .attr('stroke-width', (d) => d.width)\n .attr('stroke-linejoin', 'round')\n .attr('stroke-linecap', 'round');\n const area = areaGenerator()\n .x((d) => d.x)\n .y0((d) => d.y0)\n .y1((d) => d.y);\n shapeSelection\n .append('path')\n .attr('class', b('region'))\n .attr('d', (d) => area(d.points))\n .attr('fill', (d) => d.color)\n .attr('opacity', (d) => d.opacity);\n let dataLabels = preparedData.reduce((acc, d) => {\n return acc.concat(d.labels);\n }, []);\n if (!((_a = preparedData[0]) === null || _a === void 0 ? void 0 : _a.series.dataLabels.allowOverlap)) {\n dataLabels = filterOverlappingLabels(dataLabels);\n }\n const labelsSelection = svgElement\n .selectAll('text')\n .data(dataLabels)\n .join('text')\n .text((d) => d.text)\n .attr('class', b('label'))\n .attr('x', (d) => d.x)\n .attr('y', (d) => d.y)\n .attr('text-anchor', (d) => d.textAnchor)\n .style('font-size', (d) => d.style.fontSize)\n .style('font-weight', (d) => d.style.fontWeight || null)\n .style('fill', (d) => d.style.fontColor || null);\n const markers = preparedData.reduce((acc, d) => acc.concat(d.markers), []);\n const markerSelection = svgElement\n .selectAll('marker')\n .data(markers)\n .join('g')\n .call(renderMarker);\n const hoverEnabled = hoverOptions === null || hoverOptions === void 0 ? void 0 : hoverOptions.enabled;\n const inactiveEnabled = inactiveOptions === null || inactiveOptions === void 0 ? void 0 : inactiveOptions.enabled;\n function handleShapeHover(data) {\n hoveredDataRef.current = data;\n const selected = (data === null || data === void 0 ? void 0 : data.filter((d) => d.series.type === 'area')) || [];\n const selectedDataItems = selected.map((d) => d.data);\n const selectedSeriesIds = selected.map((d) => { var _a; return (_a = d.series) === null || _a === void 0 ? void 0 : _a.id; });\n shapeSelection.datum((d, index, list) => {\n var _a;\n const elementSelection = select(list[index]);\n const hovered = Boolean(hoverEnabled && selectedSeriesIds.includes(d.id));\n if (d.hovered !== hovered) {\n d.hovered = hovered;\n let strokeColor = d.color || '';\n if (d.hovered) {\n strokeColor =\n ((_a = color(strokeColor)) === null || _a === void 0 ? void 0 : _a.brighter(hoverOptions === null || hoverOptions === void 0 ? void 0 : hoverOptions.brightness).toString()) ||\n strokeColor;\n }\n elementSelection.selectAll(`.${b('line')}`).attr('stroke', strokeColor);\n elementSelection.selectAll(`.${b('region')}`).attr('fill', strokeColor);\n }\n return setActiveState({\n element: list[index],\n state: inactiveOptions,\n active: Boolean(!inactiveEnabled ||\n !selectedSeriesIds.length ||\n selectedSeriesIds.includes(d.id)),\n datum: d,\n });\n });\n labelsSelection.datum((d, index, list) => {\n return setActiveState({\n element: list[index],\n state: inactiveOptions,\n active: Boolean(!inactiveEnabled ||\n !selectedSeriesIds.length ||\n selectedSeriesIds.includes(d.series.id)),\n datum: d,\n });\n });\n markerSelection.datum((d, index, list) => {\n const elementSelection = select(list[index]);\n const hovered = Boolean(hoverEnabled && selectedDataItems.includes(d.point.data));\n if (d.hovered !== hovered) {\n d.hovered = hovered;\n elementSelection.attr('visibility', getMarkerVisibility(d));\n selectMarkerHalo(elementSelection).attr('visibility', getMarkerHaloVisibility);\n selectMarkerSymbol(elementSelection).call(setMarker, hovered ? 'hover' : 'normal');\n }\n if (d.point.series.marker.states.normal.enabled) {\n const isActive = Boolean(!inactiveEnabled ||\n !selectedSeriesIds.length ||\n selectedSeriesIds.includes(d.point.series.id));\n setActiveState({\n element: list[index],\n state: inactiveOptions,\n active: isActive,\n datum: d,\n });\n }\n return d;\n });\n }\n if (hoveredDataRef.current !== null) {\n handleShapeHover(hoveredDataRef.current);\n }\n dispatcher.on('hover-shape.area', handleShapeHover);\n return () => {\n dispatcher.on('hover-shape.area', null);\n };\n }, [dispatcher, preparedData, seriesOptions]);\n return (React.createElement(React.Fragment, null,\n React.createElement(\"g\", { ref: ref, className: b() }),\n React.createElement(HtmlLayer, { preparedData: preparedData, htmlLayout: htmlLayout })));\n};\n","import { ascending, descending, max, sort } from 'd3';\nimport get from 'lodash/get';\nimport { getDataCategoryValue, getLabelsSize } from '../../../utils';\nimport { MIN_BAR_GAP, MIN_BAR_GROUP_GAP, MIN_BAR_WIDTH } from '../constants';\nfunction getLabelData(d) {\n if (!d.series.dataLabels.enabled) {\n return undefined;\n }\n const text = String(d.data.label || d.data.y);\n const style = d.series.dataLabels.style;\n const html = d.series.dataLabels.html;\n const { maxHeight: height, maxWidth: width } = getLabelsSize({\n labels: [text],\n style,\n html,\n });\n let y = Math.max(height, d.y - d.series.dataLabels.padding);\n if (d.series.dataLabels.inside) {\n y = d.y + d.height / 2;\n }\n const x = d.x + d.width / 2;\n return {\n text,\n x: html ? x - width / 2 : x,\n y: html ? y - height : y,\n style,\n size: { width, height },\n textAnchor: 'middle',\n series: d.series,\n };\n}\nexport const prepareBarXData = (args) => {\n const { series, seriesOptions, xAxis, xScale, yScale, boundsHeight: plotHeight } = args;\n const categories = get(xAxis, 'categories', []);\n const barMaxWidth = get(seriesOptions, 'bar-x.barMaxWidth');\n const barPadding = get(seriesOptions, 'bar-x.barPadding');\n const groupPadding = get(seriesOptions, 'bar-x.groupPadding');\n const sortingOptions = get(seriesOptions, 'bar-x.dataSorting');\n const comparator = (sortingOptions === null || sortingOptions === void 0 ? void 0 : sortingOptions.direction) === 'desc' ? descending : ascending;\n const sortKey = (() => {\n switch (sortingOptions === null || sortingOptions === void 0 ? void 0 : sortingOptions.key) {\n case 'y': {\n return 'data.y';\n }\n case 'name': {\n return 'series.name';\n }\n default: {\n return undefined;\n }\n }\n })();\n const data = {};\n series.forEach((s) => {\n s.data.forEach((d) => {\n const xValue = xAxis.type === 'category'\n ? getDataCategoryValue({ axisDirection: 'x', categories, data: d })\n : d.x;\n if (xValue) {\n if (!data[xValue]) {\n data[xValue] = {};\n }\n const xGroup = data[xValue];\n if (!xGroup[s.stackId]) {\n xGroup[s.stackId] = [];\n }\n xGroup[s.stackId].push({ data: d, series: s });\n }\n });\n });\n let bandWidth = Infinity;\n if (xAxis.type === 'category') {\n const xBandScale = xScale;\n bandWidth = xBandScale.bandwidth();\n }\n else {\n const xLinearScale = xScale;\n const xValues = series.reduce((acc, s) => {\n s.data.forEach((dataItem) => acc.push(Number(dataItem.x)));\n return acc;\n }, []);\n xValues.sort().forEach((xValue, index) => {\n if (index > 0 && xValue !== xValues[index - 1]) {\n const dist = xLinearScale(xValue) - xLinearScale(xValues[index - 1]);\n if (dist < bandWidth) {\n bandWidth = dist;\n }\n }\n });\n }\n const maxGroupSize = max(Object.values(data), (d) => Object.values(d).length) || 1;\n const groupGap = Math.max(bandWidth * groupPadding, MIN_BAR_GROUP_GAP);\n const groupWidth = bandWidth - groupGap;\n const rectGap = Math.max(bandWidth * barPadding, MIN_BAR_GAP);\n const rectWidth = Math.max(MIN_BAR_WIDTH, Math.min(groupWidth / maxGroupSize - rectGap, barMaxWidth));\n const result = [];\n Object.entries(data).forEach(([xValue, val]) => {\n const stacks = Object.values(val);\n const currentGroupWidth = rectWidth * stacks.length + rectGap * (stacks.length - 1);\n stacks.forEach((yValues, groupItemIndex) => {\n let stackHeight = 0;\n const stackItems = [];\n const sortedData = sortKey\n ? sort(yValues, (a, b) => comparator(get(a, sortKey), get(b, sortKey)))\n : yValues;\n sortedData.forEach((yValue, yValueIndex) => {\n const yAxisIndex = yValue.series.yAxis;\n const seriesYScale = yScale[yAxisIndex];\n let xCenter;\n if (xAxis.type === 'category') {\n const xBandScale = xScale;\n xCenter = (xBandScale(xValue) || 0) + xBandScale.bandwidth() / 2;\n }\n else {\n const xLinearScale = xScale;\n xCenter = xLinearScale(Number(xValue));\n }\n const x = xCenter - currentGroupWidth / 2 + (rectWidth + rectGap) * groupItemIndex;\n const yDataValue = yValue.data.y;\n const y = seriesYScale(yDataValue);\n const base = seriesYScale(0);\n const height = yDataValue > 0 ? base - y : y - base;\n const barData = {\n x,\n y: yDataValue > 0 ? y - stackHeight : seriesYScale(0),\n width: rectWidth,\n height,\n opacity: get(yValue.data, 'opacity', null),\n data: yValue.data,\n series: yValue.series,\n htmlElements: [],\n isLastStackItem: yValueIndex === sortedData.length - 1,\n };\n const label = getLabelData(barData);\n if (yValue.series.dataLabels.html && label) {\n barData.htmlElements.push({\n x: label.x,\n y: label.y,\n content: label.text,\n size: label.size,\n });\n }\n else {\n barData.label = getLabelData(barData);\n }\n stackItems.push(barData);\n stackHeight += height + 1;\n });\n if (series.some((s) => s.stacking === 'percent')) {\n let acc = 0;\n const ratio = plotHeight / (stackHeight - stackItems.length);\n stackItems.forEach((item) => {\n item.height = item.height * ratio;\n item.y = plotHeight - item.height - acc;\n acc += item.height + 1;\n });\n }\n result.push(...stackItems);\n });\n });\n return result;\n};\n","import React from 'react';\nimport { color, select } from 'd3';\nimport get from 'lodash/get';\nimport { block, filterOverlappingLabels } from '../../../utils';\nimport { HtmlLayer } from '../HtmlLayer';\nimport { getRectPath } from '../utils';\nexport { prepareBarXData } from './prepare-data';\nexport * from './types';\nconst b = block('bar-x');\nexport const BarXSeriesShapes = (args) => {\n const { dispatcher, preparedData, seriesOptions, htmlLayout } = args;\n const hoveredDataRef = React.useRef(null);\n const ref = React.useRef(null);\n React.useEffect(() => {\n var _a;\n if (!ref.current) {\n return () => { };\n }\n const svgElement = select(ref.current);\n const hoverOptions = get(seriesOptions, 'bar-x.states.hover');\n const inactiveOptions = get(seriesOptions, 'bar-x.states.inactive');\n svgElement.selectAll('*').remove();\n const rectSelection = svgElement\n .selectAll('allRects')\n .data(preparedData)\n .join('path')\n .attr('d', (d) => {\n const borderRadius = d.isLastStackItem\n ? Math.min(d.height, d.width / 2, d.series.borderRadius)\n : 0;\n const p = getRectPath({\n x: d.x,\n y: d.y,\n width: d.width,\n height: d.height,\n borderRadius: [borderRadius, borderRadius, 0, 0],\n });\n return p.toString();\n })\n .attr('class', b('segment'))\n .attr('x', (d) => d.x)\n .attr('y', (d) => d.y)\n .attr('height', (d) => d.height)\n .attr('width', (d) => d.width)\n .attr('fill', (d) => d.data.color || d.series.color)\n .attr('opacity', (d) => d.opacity)\n .attr('cursor', (d) => d.series.cursor);\n let dataLabels = preparedData.map((d) => d.label).filter(Boolean);\n if (!((_a = preparedData[0]) === null || _a === void 0 ? void 0 : _a.series.dataLabels.allowOverlap)) {\n dataLabels = filterOverlappingLabels(dataLabels);\n }\n const labelSelection = svgElement\n .selectAll('text')\n .data(dataLabels)\n .join('text')\n .text((d) => d.text)\n .attr('class', b('label'))\n .attr('x', (d) => d.x)\n .attr('y', (d) => d.y)\n .attr('text-anchor', (d) => d.textAnchor)\n .style('font-size', (d) => d.style.fontSize)\n .style('font-weight', (d) => d.style.fontWeight || null)\n .style('fill', (d) => d.style.fontColor || null);\n function handleShapeHover(data) {\n hoveredDataRef.current = data;\n const hoverEnabled = hoverOptions === null || hoverOptions === void 0 ? void 0 : hoverOptions.enabled;\n const inactiveEnabled = inactiveOptions === null || inactiveOptions === void 0 ? void 0 : inactiveOptions.enabled;\n if (!data) {\n if (hoverEnabled) {\n rectSelection.attr('fill', (d) => d.data.color || d.series.color);\n }\n if (inactiveEnabled) {\n rectSelection.attr('opacity', null);\n labelSelection.attr('opacity', null);\n }\n return;\n }\n if (hoverEnabled) {\n const hoveredValues = data.map((d) => d.data.x);\n rectSelection.attr('fill', (d) => {\n var _a;\n const fillColor = d.data.color || d.series.color;\n if (hoveredValues.includes(d.data.x)) {\n return (((_a = color(fillColor)) === null || _a === void 0 ? void 0 : _a.brighter(hoverOptions === null || hoverOptions === void 0 ? void 0 : hoverOptions.brightness).toString()) ||\n fillColor);\n }\n return fillColor;\n });\n }\n if (inactiveEnabled) {\n const hoveredSeries = data.map((d) => d.series.id);\n rectSelection.attr('opacity', (d) => {\n return hoveredSeries.includes(d.series.id)\n ? null\n : (inactiveOptions === null || inactiveOptions === void 0 ? void 0 : inactiveOptions.opacity) || null;\n });\n labelSelection.attr('opacity', (d) => {\n return hoveredSeries.includes(d.series.id)\n ? null\n : (inactiveOptions === null || inactiveOptions === void 0 ? void 0 : inactiveOptions.opacity) || null;\n });\n }\n }\n if (hoveredDataRef.current !== null) {\n handleShapeHover(hoveredDataRef.current);\n }\n dispatcher.on('hover-shape.bar-x', handleShapeHover);\n return () => {\n dispatcher.on('hover-shape.bar-x', null);\n };\n }, [dispatcher, preparedData, seriesOptions]);\n return (React.createElement(React.Fragment, null,\n React.createElement(\"g\", { ref: ref, className: b() }),\n React.createElement(HtmlLayer, { preparedData: preparedData, htmlLayout: htmlLayout })));\n};\n","import React from 'react';\nimport { color, select } from 'd3';\nimport get from 'lodash/get';\nimport { block } from '../../../utils';\nimport { HtmlLayer } from '../HtmlLayer';\nimport { getRectPath } from '../utils';\nexport { prepareBarYData } from './prepare-data';\nconst b = block('bar-y');\nexport const BarYSeriesShapes = (args) => {\n const { dispatcher, preparedData, seriesOptions, htmlLayout } = args;\n const hoveredDataRef = React.useRef(null);\n const ref = React.useRef(null);\n React.useEffect(() => {\n if (!ref.current) {\n return () => { };\n }\n const svgElement = select(ref.current);\n svgElement.selectAll('*').remove();\n const rectSelection = svgElement\n .selectAll('rect')\n .data(preparedData)\n .join('path')\n .attr('d', (d) => {\n const borderRadius = d.isLastStackItem\n ? Math.min(d.height, d.width / 2, d.series.borderRadius)\n : 0;\n const p = getRectPath({\n x: d.x,\n y: d.y,\n width: d.width,\n height: d.height,\n borderRadius: [0, borderRadius, borderRadius, 0],\n });\n return p.toString();\n })\n .attr('class', b('segment'))\n .attr('x', (d) => d.x)\n .attr('y', (d) => d.y)\n .attr('height', (d) => d.height)\n .attr('width', (d) => d.width)\n .attr('fill', (d) => d.color)\n .attr('opacity', (d) => d.data.opacity || null)\n .attr('cursor', (d) => d.series.cursor);\n const dataLabels = preparedData.reduce((acc, d) => {\n if (d.label) {\n acc.push(d.label);\n }\n return acc;\n }, []);\n const labelSelection = svgElement\n .selectAll('text')\n .data(dataLabels)\n .join('text')\n .text((d) => d.text)\n .attr('class', b('label'))\n .attr('x', (d) => d.x)\n .attr('y', (d) => d.y)\n .attr('text-anchor', (d) => d.textAnchor)\n .style('font-size', (d) => d.style.fontSize)\n .style('font-weight', (d) => d.style.fontWeight || null)\n .style('fill', (d) => d.style.fontColor || null);\n const hoverOptions = get(seriesOptions, 'bar-y.states.hover');\n const inactiveOptions = get(seriesOptions, 'bar-y.states.inactive');\n function handleShapeHover(data) {\n hoveredDataRef.current = data;\n if (hoverOptions === null || hoverOptions === void 0 ? void 0 : hoverOptions.enabled) {\n const hovered = data === null || data === void 0 ? void 0 : data.reduce((acc, d) => {\n acc.add(d.data.y);\n return acc;\n }, new Set());\n rectSelection.attr('fill', (d) => {\n var _a;\n const fillColor = d.color;\n if (hovered === null || hovered === void 0 ? void 0 : hovered.has(d.data.y)) {\n return (((_a = color(fillColor)) === null || _a === void 0 ? void 0 : _a.brighter(hoverOptions.brightness).toString()) ||\n fillColor);\n }\n return fillColor;\n });\n }\n if (inactiveOptions === null || inactiveOptions === void 0 ? void 0 : inactiveOptions.enabled) {\n const hoveredSeries = data === null || data === void 0 ? void 0 : data.map((d) => d.series.id);\n const newOpacity = (d) => {\n if ((hoveredSeries === null || hoveredSeries === void 0 ? void 0 : hoveredSeries.length) && !hoveredSeries.includes(d.series.id)) {\n return inactiveOptions.opacity || null;\n }\n return null;\n };\n rectSelection.attr('opacity', newOpacity);\n labelSelection.attr('opacity', newOpacity);\n }\n }\n if (hoveredDataRef.current !== null) {\n handleShapeHover(hoveredDataRef.current);\n }\n dispatcher.on('hover-shape.bar-y', handleShapeHover);\n return () => {\n dispatcher.on('hover-shape.bar-y', null);\n };\n }, [dispatcher, preparedData, seriesOptions]);\n return (React.createElement(React.Fragment, null,\n React.createElement(\"g\", { ref: ref, className: b() }),\n React.createElement(HtmlLayer, { preparedData: preparedData, htmlLayout: htmlLayout })));\n};\n","import React from 'react';\nimport { color, line as lineGenerator, select } from 'd3';\nimport get from 'lodash/get';\nimport { block, filterOverlappingLabels, getLineDashArray } from '../../../utils';\nimport { HtmlLayer } from '../HtmlLayer';\nimport { getMarkerHaloVisibility, getMarkerVisibility, renderMarker, selectMarkerHalo, selectMarkerSymbol, setMarker, } from '../marker';\nimport { setActiveState } from '../utils';\nconst b = block('d3-line');\nexport const LineSeriesShapes = (args) => {\n const { dispatcher, preparedData, seriesOptions, htmlLayout } = args;\n const hoveredDataRef = React.useRef(null);\n const ref = React.useRef(null);\n React.useEffect(() => {\n var _a;\n if (!ref.current) {\n return () => { };\n }\n const svgElement = select(ref.current);\n const hoverOptions = get(seriesOptions, 'line.states.hover');\n const inactiveOptions = get(seriesOptions, 'line.states.inactive');\n const line = lineGenerator()\n .x((d) => d.x)\n .y((d) => d.y);\n svgElement.selectAll('*').remove();\n const lineSelection = svgElement\n .selectAll('path')\n .data(preparedData)\n .join('path')\n .attr('d', (d) => line(d.points))\n .attr('fill', 'none')\n .attr('stroke', (d) => d.color)\n .attr('stroke-width', (d) => d.width)\n .attr('stroke-linejoin', (d) => d.linecap)\n .attr('stroke-linecap', (d) => d.linecap)\n .attr('stroke-dasharray', (d) => getLineDashArray(d.dashStyle, d.width))\n .attr('opacity', (d) => d.opacity)\n .attr('cursor', (d) => d.series.cursor);\n let dataLabels = preparedData.reduce((acc, d) => {\n return acc.concat(d.labels);\n }, []);\n if (!((_a = preparedData[0]) === null || _a === void 0 ? void 0 : _a.series.dataLabels.allowOverlap)) {\n dataLabels = filterOverlappingLabels(dataLabels);\n }\n const labelsSelection = svgElement\n .selectAll('text')\n .data(dataLabels)\n .join('text')\n .text((d) => d.text)\n .attr('class', b('label'))\n .attr('x', (d) => d.x)\n .attr('y', (d) => d.y)\n .attr('text-anchor', (d) => d.textAnchor)\n .style('font-size', (d) => d.style.fontSize)\n .style('font-weight', (d) => d.style.fontWeight || null)\n .style('fill', (d) => d.style.fontColor || null);\n const markers = preparedData.reduce((acc, d) => acc.concat(d.markers), []);\n const markerSelection = svgElement\n .selectAll('marker')\n .data(markers)\n .join('g')\n .call(renderMarker);\n const hoverEnabled = hoverOptions === null || hoverOptions === void 0 ? void 0 : hoverOptions.enabled;\n const inactiveEnabled = inactiveOptions === null || inactiveOptions === void 0 ? void 0 : inactiveOptions.enabled;\n function handleShapeHover(data) {\n hoveredDataRef.current = data;\n const selected = (data === null || data === void 0 ? void 0 : data.filter((d) => d.series.type === 'line')) || [];\n const selectedDataItems = selected.map((d) => d.data);\n const selectedSeriesIds = selected.map((d) => { var _a; return (_a = d.series) === null || _a === void 0 ? void 0 : _a.id; });\n lineSelection.datum((d, index, list) => {\n const elementSelection = select(list[index]);\n const hovered = Boolean(hoverEnabled && selectedSeriesIds.includes(d.id));\n if (d.hovered !== hovered) {\n d.hovered = hovered;\n elementSelection.attr('stroke', (d) => {\n var _a;\n const initialColor = d.color || '';\n if (d.hovered) {\n return (((_a = color(initialColor)) === null || _a === void 0 ? void 0 : _a.brighter(hoverOptions === null || hoverOptions === void 0 ? void 0 : hoverOptions.brightness).toString()) || initialColor);\n }\n return initialColor;\n });\n }\n return setActiveState({\n element: list[index],\n state: inactiveOptions,\n active: Boolean(!inactiveEnabled ||\n !selectedSeriesIds.length ||\n selectedSeriesIds.includes(d.id)),\n datum: d,\n });\n });\n labelsSelection.datum((d, index, list) => {\n return setActiveState({\n element: list[index],\n state: inactiveOptions,\n active: Boolean(!inactiveEnabled ||\n !selectedSeriesIds.length ||\n selectedSeriesIds.includes(d.series.id)),\n datum: d,\n });\n });\n markerSelection.datum((d, index, list) => {\n const elementSelection = select(list[index]);\n const hovered = Boolean(hoverEnabled && selectedDataItems.includes(d.point.data));\n if (d.hovered !== hovered) {\n d.hovered = hovered;\n elementSelection.attr('visibility', getMarkerVisibility(d));\n selectMarkerHalo(elementSelection).attr('visibility', getMarkerHaloVisibility);\n selectMarkerSymbol(elementSelection).call(setMarker, hovered ? 'hover' : 'normal');\n }\n if (d.point.series.marker.states.normal.enabled) {\n const isActive = Boolean(!inactiveEnabled ||\n !selectedSeriesIds.length ||\n selectedSeriesIds.includes(d.point.series.id));\n setActiveState({\n element: list[index],\n state: inactiveOptions,\n active: isActive,\n datum: d,\n });\n }\n return d;\n });\n }\n if (hoveredDataRef.current !== null) {\n handleShapeHover(hoveredDataRef.current);\n }\n dispatcher.on('hover-shape.line', handleShapeHover);\n return () => {\n dispatcher.on('hover-shape.line', null);\n };\n }, [dispatcher, preparedData, seriesOptions]);\n return (React.createElement(React.Fragment, null,\n React.createElement(\"g\", { ref: ref, className: b() }),\n React.createElement(HtmlLayer, { preparedData: preparedData, htmlLayout: htmlLayout })));\n};\n","import React from 'react';\nimport { arc, color, select } from 'd3';\nimport get from 'lodash/get';\nimport { block, setEllipsisForOverflowTexts } from '../../../utils';\nimport { HtmlLayer } from '../HtmlLayer';\nimport { setActiveState } from '../utils';\nconst b = block('d3-pie');\nexport function getHaloVisibility(d) {\n const enabled = d.data.pie.halo.enabled && d.data.hovered;\n return enabled ? '' : 'hidden';\n}\nexport function PieSeriesShapes(args) {\n const { dispatcher, preparedData, seriesOptions, htmlLayout } = args;\n const ref = React.useRef(null);\n React.useEffect(() => {\n if (!ref.current) {\n return () => { };\n }\n const svgElement = select(ref.current);\n svgElement.selectAll('*').remove();\n const segmentSelector = `.${b('segment')}`;\n const connectorSelector = `.${b('connector')}`;\n const shapesSelection = svgElement\n .selectAll('pie')\n .data(preparedData)\n .join('g')\n .attr('id', (pieData) => pieData.id)\n .attr('class', b('item'))\n .attr('transform', (pieData) => {\n const [x, y] = pieData.center;\n return `translate(${x}, ${y})`;\n })\n .style('stroke-width', (pieData) => pieData.borderWidth)\n .attr('cursor', (pieData) => pieData.series.cursor);\n // Render halo appearing outside the hovered slice\n shapesSelection\n .selectAll('halo')\n .data((pieData) => {\n if (pieData.halo.enabled) {\n return pieData.segments;\n }\n return [];\n })\n .join('path')\n .attr('d', (d) => {\n const arcGenerator = arc()\n .innerRadius(d.data.pie.innerRadius)\n .outerRadius(d.data.radius + d.data.pie.halo.size)\n .cornerRadius(d.data.pie.borderRadius);\n return arcGenerator(d);\n })\n .attr('class', b('halo'))\n .attr('fill', (d) => d.data.color)\n .attr('opacity', (d) => d.data.pie.halo.opacity)\n .attr('z-index', -1)\n .attr('visibility', getHaloVisibility);\n // Render segments\n shapesSelection\n .selectAll(segmentSelector)\n .data((pieData) => pieData.segments)\n .join('path')\n .attr('d', (d) => {\n const arcGenerator = arc()\n .innerRadius(d.data.pie.innerRadius)\n .outerRadius(d.data.radius)\n .cornerRadius(d.data.pie.borderRadius);\n return arcGenerator(d);\n })\n .attr('class', b('segment'))\n .style('stroke', (d) => d.data.series.borderColor)\n .attr('fill', (d) => d.data.color)\n .attr('opacity', (d) => d.data.opacity);\n // render Labels\n shapesSelection\n .selectAll('text')\n .data((pieData) => pieData.labels)\n .join('text')\n .text((d) => d.text)\n .attr('class', b('label'))\n .attr('x', (d) => d.x)\n .attr('y', (d) => d.y)\n .attr('text-anchor', (d) => d.textAnchor)\n .style('font-size', (d) => d.style.fontSize)\n .style('font-weight', (d) => d.style.fontWeight || null)\n .style('fill', (d) => d.style.fontColor || null)\n .call(setEllipsisForOverflowTexts, (d) => d.size.width > d.maxWidth ? d.maxWidth : Infinity);\n // Add the polyline between chart and labels\n shapesSelection\n .selectAll(connectorSelector)\n .data((pieData) => pieData.connectors)\n .enter()\n .append('path')\n .attr('class', b('connector'))\n .attr('d', (d) => d.path)\n .attr('stroke', (d) => d.color)\n .attr('stroke-width', 1)\n .attr('stroke-linejoin', 'round')\n .attr('stroke-linecap', 'round')\n .style('fill', 'none');\n // Render custom shapes if defined\n shapesSelection.each(function (d, index, nodes) {\n var _a, _b;\n const customShape = (_b = (_a = d.series).renderCustomShape) === null || _b === void 0 ? void 0 : _b.call(_a, {\n series: {\n innerRadius: d.innerRadius,\n },\n });\n if (customShape) {\n nodes[index].append(customShape);\n }\n });\n const eventName = `hover-shape.pie`;\n const hoverOptions = get(seriesOptions, 'pie.states.hover');\n const inactiveOptions = get(seriesOptions, 'pie.states.inactive');\n dispatcher.on(eventName, (data) => {\n var _a, _b;\n const selectedSeriesId = (_b = (_a = data === null || data === void 0 ? void 0 : data[0]) === null || _a === void 0 ? void 0 : _a.series) === null || _b === void 0 ? void 0 : _b.id;\n const hoverEnabled = hoverOptions === null || hoverOptions === void 0 ? void 0 : hoverOptions.enabled;\n const inactiveEnabled = inactiveOptions === null || inactiveOptions === void 0 ? void 0 : inactiveOptions.enabled;\n shapesSelection.datum((_d, index, list) => {\n const pieSelection = select(list[index]);\n const haloSelection = pieSelection.selectAll(`.${b('halo')}`);\n pieSelection\n .selectAll(segmentSelector)\n .datum((d, i, elements) => {\n const hovered = Boolean(hoverEnabled && d.data.series.id === selectedSeriesId);\n if (d.data.hovered !== hovered) {\n d.data.hovered = hovered;\n select(elements[i]).attr('fill', () => {\n var _a;\n const initialColor = d.data.color;\n if (d.data.hovered) {\n return (((_a = color(initialColor)) === null || _a === void 0 ? void 0 : _a.brighter(hoverOptions === null || hoverOptions === void 0 ? void 0 : hoverOptions.brightness).toString()) || initialColor);\n }\n return initialColor;\n });\n const currentSegmentHalo = haloSelection.nodes()[i];\n select(currentSegmentHalo).attr('visibility', getHaloVisibility);\n }\n setActiveState({\n element: elements[i],\n state: inactiveOptions,\n active: Boolean(!inactiveEnabled ||\n !selectedSeriesId ||\n selectedSeriesId === d.data.series.id),\n datum: d.data,\n });\n return d;\n });\n const labelSelection = pieSelection.selectAll('tspan');\n const connectorSelection = pieSelection.selectAll(connectorSelector);\n labelSelection.merge(connectorSelection).datum((d, i, elements) => {\n return setActiveState({\n element: elements[i],\n state: inactiveOptions,\n active: Boolean(!inactiveEnabled ||\n !selectedSeriesId ||\n selectedSeriesId === d.series.id),\n datum: d,\n });\n });\n });\n });\n return () => {\n dispatcher.on(eventName, null);\n };\n }, [dispatcher, preparedData, seriesOptions]);\n const htmlElements = preparedData.map((d) => d.htmlLabels).flat();\n return (React.createElement(React.Fragment, null,\n React.createElement(\"g\", { ref: ref, className: b(), style: { zIndex: 9 } }),\n React.createElement(HtmlLayer, { preparedData: { htmlElements }, htmlLayout: htmlLayout })));\n}\n","import { curveBasis, curveLinear, pie } from 'd3';\nexport const pieGenerator = pie()\n .value((d) => d.value)\n .sort(null);\nexport function getCurveFactory(data) {\n switch (data.connectorCurve) {\n case 'basic': {\n return curveBasis;\n }\n case 'linear': {\n return curveLinear;\n }\n }\n return undefined;\n}\n","import { arc, group, line as lineGenerator } from 'd3';\nimport { calculateNumericProperty, getLabelsSize, getLeftPosition, isLabelsOverlapping, } from '../../../utils';\nimport { getCurveFactory, pieGenerator } from './utils';\nconst FULL_CIRCLE = Math.PI * 2;\nconst getCenter = (boundsWidth, boundsHeight, center) => {\n var _a, _b;\n const defaultX = boundsWidth * 0.5;\n const defaultY = boundsHeight * 0.5;\n if (!center) {\n return [defaultX, defaultY];\n }\n const [x, y] = center;\n const resultX = (_a = calculateNumericProperty({ value: x, base: boundsWidth })) !== null && _a !== void 0 ? _a : defaultX;\n const resultY = (_b = calculateNumericProperty({ value: y, base: boundsHeight })) !== null && _b !== void 0 ? _b : defaultY;\n return [resultX, resultY];\n};\nexport function preparePieData(args) {\n const { series: preparedSeries, boundsWidth, boundsHeight } = args;\n const maxRadius = Math.min(boundsWidth, boundsHeight) / 2;\n const groupedPieSeries = group(preparedSeries, (pieSeries) => pieSeries.stackId);\n const prepareItem = (stackId, items) => {\n var _a;\n const series = items[0];\n const { center, borderWidth, borderColor, borderRadius, innerRadius: seriesInnerRadius, dataLabels, } = series;\n const data = {\n id: stackId,\n center: getCenter(boundsWidth, boundsHeight, center),\n innerRadius: 0,\n segments: [],\n labels: [],\n htmlLabels: [],\n connectors: [],\n borderColor,\n borderWidth,\n borderRadius,\n series: items[0],\n connectorCurve: dataLabels.connectorCurve,\n halo: {\n enabled: series.states.hover.halo.enabled,\n opacity: series.states.hover.halo.opacity,\n size: series.states.hover.halo.size,\n },\n };\n const { maxHeight: labelHeight } = getLabelsSize({\n labels: ['Some Label'],\n style: dataLabels.style,\n });\n let segmentMaxRadius = 0;\n const segments = items.map((item) => {\n var _a;\n let maxSegmentRadius = maxRadius;\n if (dataLabels.enabled) {\n maxSegmentRadius -= dataLabels.distance + dataLabels.connectorPadding + labelHeight;\n }\n const segmentRadius = (_a = calculateNumericProperty({ value: item.radius, base: maxSegmentRadius })) !== null && _a !== void 0 ? _a : maxSegmentRadius;\n segmentMaxRadius = Math.max(segmentMaxRadius, segmentRadius);\n return {\n value: item.value,\n color: item.color,\n opacity: item.opacity,\n series: item,\n hovered: false,\n active: true,\n pie: data,\n radius: segmentRadius,\n };\n });\n data.segments = pieGenerator(segments);\n data.innerRadius =\n (_a = calculateNumericProperty({ value: seriesInnerRadius, base: segmentMaxRadius })) !== null && _a !== void 0 ? _a : 0;\n return data;\n };\n const prepareLabels = (prepareLabelsArgs) => {\n const { data, series } = prepareLabelsArgs;\n const { dataLabels } = series[0];\n const labels = [];\n const htmlLabels = [];\n const connectors = [];\n if (!dataLabels.enabled) {\n return { labels, htmlLabels, connectors };\n }\n let line = lineGenerator();\n const curveFactory = getCurveFactory(data);\n if (curveFactory) {\n line = line.curve(curveFactory);\n }\n const { style, connectorPadding, distance } = dataLabels;\n const { maxHeight: labelHeight } = getLabelsSize({ labels: ['Some Label'], style });\n const connectorStartPointGenerator = arc()\n .innerRadius((d) => d.data.radius)\n .outerRadius((d) => d.data.radius);\n const connectorMidPointGenerator = arc()\n .innerRadius((d) => d.data.radius + distance / 2)\n .outerRadius((d) => d.data.radius + distance / 2);\n const connectorEndPointGenerator = arc()\n .innerRadius((d) => d.data.radius + distance)\n .outerRadius((d) => d.data.radius + distance);\n const labelArcGenerator = arc()\n .innerRadius((d) => d.data.radius + distance + connectorPadding)\n .outerRadius((d) => d.data.radius + distance + connectorPadding);\n series.forEach((d, index) => {\n const prevLabel = labels[labels.length - 1];\n const text = String(d.data.label || d.data.value);\n const shouldUseHtml = dataLabels.html;\n const labelSize = getLabelsSize({ labels: [text], style, html: shouldUseHtml });\n const labelWidth = labelSize.maxWidth;\n const relatedSegment = data.segments[index];\n const getLabelPosition = (angle) => {\n let [x, y] = labelArcGenerator.centroid(Object.assign(Object.assign({}, relatedSegment), { startAngle: angle, endAngle: angle }));\n if (shouldUseHtml) {\n x = x < 0 ? x - labelWidth : x;\n y = y - labelSize.maxHeight;\n }\n else {\n y = y < 0 ? y - labelHeight : y;\n }\n x = Math.max(-boundsWidth / 2, x);\n return [x, y];\n };\n const getConnectorPoints = (angle) => {\n const connectorStartPoint = connectorStartPointGenerator.centroid(relatedSegment);\n const connectorEndPoint = connectorEndPointGenerator.centroid(Object.assign(Object.assign({}, relatedSegment), { startAngle: angle, endAngle: angle }));\n if (dataLabels.connectorShape === 'straight-line') {\n return [connectorStartPoint, connectorEndPoint];\n }\n const connectorMidPoint = connectorMidPointGenerator.centroid(relatedSegment);\n return [connectorStartPoint, connectorMidPoint, connectorEndPoint];\n };\n const midAngle = Math.max((prevLabel === null || prevLabel === void 0 ? void 0 : prevLabel.angle) || 0, relatedSegment.startAngle +\n (relatedSegment.endAngle - relatedSegment.startAngle) / 2);\n const [x, y] = getLabelPosition(midAngle);\n const label = {\n text,\n x,\n y,\n style,\n size: { width: labelWidth, height: labelHeight },\n maxWidth: labelWidth,\n textAnchor: midAngle < Math.PI ? 'start' : 'end',\n series: { id: d.id },\n active: true,\n segment: relatedSegment.data,\n angle: midAngle,\n };\n let overlap = false;\n if (prevLabel) {\n overlap = isLabelsOverlapping(prevLabel, label, dataLabels.padding);\n if (overlap) {\n let shouldAdjustAngle = true;\n const step = Math.PI / 180;\n while (shouldAdjustAngle) {\n const newAngle = label.angle + step;\n if (newAngle > FULL_CIRCLE && newAngle % FULL_CIRCLE > labels[0].angle) {\n shouldAdjustAngle = false;\n }\n else {\n label.angle = newAngle;\n const [newX, newY] = getLabelPosition(newAngle);\n label.x = newX;\n label.y = newY;\n if (!isLabelsOverlapping(prevLabel, label, dataLabels.padding)) {\n shouldAdjustAngle = false;\n overlap = false;\n }\n }\n }\n }\n }\n if (dataLabels.allowOverlap || !overlap) {\n const left = getLeftPosition(label);\n if (Math.abs(left) > boundsWidth / 2) {\n label.maxWidth = label.size.width - (Math.abs(left) - boundsWidth / 2);\n }\n else {\n const right = left + label.size.width;\n if (right > boundsWidth / 2) {\n label.maxWidth = label.size.width - (right - boundsWidth / 2);\n }\n }\n if (shouldUseHtml) {\n htmlLabels.push({\n x: data.center[0] + label.x,\n y: Math.max(0, data.center[1] + label.y),\n content: label.text,\n size: label.size,\n });\n }\n else {\n labels.push(label);\n }\n const connector = {\n path: line(getConnectorPoints(midAngle)),\n color: relatedSegment.data.color,\n };\n connectors.push(connector);\n }\n });\n return {\n labels,\n htmlLabels,\n connectors,\n };\n };\n return Array.from(groupedPieSeries).map(([stackId, items]) => {\n const data = prepareItem(stackId, items);\n const preparedLabels = prepareLabels({\n data,\n series: items,\n });\n const segmentMaxRadius = Math.max(...data.segments.map((s) => s.data.radius));\n const top = Math.min(data.center[1] - segmentMaxRadius, ...preparedLabels.labels.map((l) => l.y + data.center[1]), ...preparedLabels.htmlLabels.map((l) => l.y));\n const bottom = Math.max(data.center[1] + segmentMaxRadius, ...preparedLabels.labels.map((l) => l.y + data.center[1] + l.size.height), ...preparedLabels.htmlLabels.map((l) => l.y + l.size.height));\n const topAdjustment = Math.floor(top - data.halo.size);\n if (topAdjustment > 0) {\n data.segments.forEach((s) => {\n s.data.radius += topAdjustment / 2;\n });\n data.center[1] -= topAdjustment / 2;\n }\n const bottomAdjustment = Math.floor(boundsHeight - bottom - data.halo.size);\n if (bottomAdjustment > 0) {\n data.segments.forEach((s) => {\n s.data.radius += bottomAdjustment / 2;\n });\n data.center[1] += bottomAdjustment / 2;\n }\n const { labels, htmlLabels, connectors } = prepareLabels({\n data,\n series: items,\n });\n data.labels = labels;\n data.htmlLabels = htmlLabels;\n data.connectors = connectors;\n return data;\n });\n}\n","import React from 'react';\nimport { select } from 'd3';\nimport { block } from '../../../utils';\nimport { HtmlLayer } from '../HtmlLayer';\nconst b = block('sankey');\nexport const SankeySeriesShape = (props) => {\n const { dispatcher, preparedData, seriesOptions, htmlLayout } = props;\n const hoveredDataRef = React.useRef(null);\n const ref = React.useRef(null);\n React.useEffect(() => {\n if (!ref.current) {\n return () => { };\n }\n const svgElement = select(ref.current);\n svgElement.selectAll('*').remove();\n // nodes\n svgElement\n .append('g')\n .selectAll()\n .data(preparedData.nodes)\n .join('rect')\n .attr('x', (d) => d.x0)\n .attr('y', (d) => d.y0)\n .attr('height', (d) => d.y1 - d.y0)\n .attr('width', (d) => d.x1 - d.x0)\n .attr('fill', (d) => d.color);\n // links\n svgElement\n .append('g')\n .attr('fill', 'none')\n .selectAll()\n .data(preparedData.links)\n .join('g')\n .append('path')\n .attr('stroke-opacity', (d) => d.opacity)\n .attr('d', (d) => d.path)\n .attr('stroke', (d) => d.color)\n .attr('stroke-width', (d) => d.strokeWidth);\n // dataLabels\n svgElement\n .append('g')\n .selectAll()\n .data(preparedData.labels)\n .join('text')\n .text((d) => d.text)\n .attr('class', b('label'))\n .attr('x', (d) => d.x)\n .attr('y', (d) => d.y)\n .attr('dy', '0.35em')\n .attr('text-anchor', (d) => d.textAnchor)\n .attr('fill', (d) => { var _a; return (_a = d.style.fontColor) !== null && _a !== void 0 ? _a : null; });\n const eventName = `hover-shape.sankey`;\n function handleShapeHover(data) {\n hoveredDataRef.current = data;\n }\n if (hoveredDataRef.current !== null) {\n handleShapeHover(hoveredDataRef.current);\n }\n dispatcher.on(eventName, handleShapeHover);\n return () => {\n dispatcher.on(eventName, null);\n };\n }, [dispatcher, preparedData, seriesOptions]);\n return (React.createElement(React.Fragment, null,\n React.createElement(\"g\", { ref: ref, className: b() }),\n React.createElement(HtmlLayer, { preparedData: preparedData, htmlLayout: htmlLayout })));\n};\n","export default function sum(values, valueof) {\n let sum = 0;\n if (valueof === undefined) {\n for (let value of values) {\n if (value = +value) {\n sum += value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if (value = +valueof(value, ++index, values)) {\n sum += value;\n }\n }\n }\n return sum;\n}\n","export default function max(values, valueof) {\n let max;\n if (valueof === undefined) {\n for (const value of values) {\n if (value != null\n && (max < value || (max === undefined && value >= value))) {\n max = value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null\n && (max < value || (max === undefined && value >= value))) {\n max = value;\n }\n }\n }\n return max;\n}\n","import {min} from \"d3-array\";\n\nfunction targetDepth(d) {\n return d.target.depth;\n}\n\nexport function left(node) {\n return node.depth;\n}\n\nexport function right(node, n) {\n return n - 1 - node.height;\n}\n\nexport function justify(node, n) {\n return node.sourceLinks.length ? node.depth : n - 1;\n}\n\nexport function center(node) {\n return node.targetLinks.length ? node.depth\n : node.sourceLinks.length ? min(node.sourceLinks, targetDepth) - 1\n : 0;\n}\n","export default function constant(x) {\n return function() {\n return x;\n };\n}\n","import {max, min, sum} from \"d3-array\";\nimport {justify} from \"./align.js\";\nimport constant from \"./constant.js\";\n\nfunction ascendingSourceBreadth(a, b) {\n return ascendingBreadth(a.source, b.source) || a.index - b.index;\n}\n\nfunction ascendingTargetBreadth(a, b) {\n return ascendingBreadth(a.target, b.target) || a.index - b.index;\n}\n\nfunction ascendingBreadth(a, b) {\n return a.y0 - b.y0;\n}\n\nfunction value(d) {\n return d.value;\n}\n\nfunction defaultId(d) {\n return d.index;\n}\n\nfunction defaultNodes(graph) {\n return graph.nodes;\n}\n\nfunction defaultLinks(graph) {\n return graph.links;\n}\n\nfunction find(nodeById, id) {\n const node = nodeById.get(id);\n if (!node) throw new Error(\"missing: \" + id);\n return node;\n}\n\nfunction computeLinkBreadths({nodes}) {\n for (const node of nodes) {\n let y0 = node.y0;\n let y1 = y0;\n for (const link of node.sourceLinks) {\n link.y0 = y0 + link.width / 2;\n y0 += link.width;\n }\n for (const link of node.targetLinks) {\n link.y1 = y1 + link.width / 2;\n y1 += link.width;\n }\n }\n}\n\nexport default function Sankey() {\n let x0 = 0, y0 = 0, x1 = 1, y1 = 1; // extent\n let dx = 24; // nodeWidth\n let dy = 8, py; // nodePadding\n let id = defaultId;\n let align = justify;\n let sort;\n let linkSort;\n let nodes = defaultNodes;\n let links = defaultLinks;\n let iterations = 6;\n\n function sankey() {\n const graph = {nodes: nodes.apply(null, arguments), links: links.apply(null, arguments)};\n computeNodeLinks(graph);\n computeNodeValues(graph);\n computeNodeDepths(graph);\n computeNodeHeights(graph);\n computeNodeBreadths(graph);\n computeLinkBreadths(graph);\n return graph;\n }\n\n sankey.update = function(graph) {\n computeLinkBreadths(graph);\n return graph;\n };\n\n sankey.nodeId = function(_) {\n return arguments.length ? (id = typeof _ === \"function\" ? _ : constant(_), sankey) : id;\n };\n\n sankey.nodeAlign = function(_) {\n return arguments.length ? (align = typeof _ === \"function\" ? _ : constant(_), sankey) : align;\n };\n\n sankey.nodeSort = function(_) {\n return arguments.length ? (sort = _, sankey) : sort;\n };\n\n sankey.nodeWidth = function(_) {\n return arguments.length ? (dx = +_, sankey) : dx;\n };\n\n sankey.nodePadding = function(_) {\n return arguments.length ? (dy = py = +_, sankey) : dy;\n };\n\n sankey.nodes = function(_) {\n return arguments.length ? (nodes = typeof _ === \"function\" ? _ : constant(_), sankey) : nodes;\n };\n\n sankey.links = function(_) {\n return arguments.length ? (links = typeof _ === \"function\" ? _ : constant(_), sankey) : links;\n };\n\n sankey.linkSort = function(_) {\n return arguments.length ? (linkSort = _, sankey) : linkSort;\n };\n\n sankey.size = function(_) {\n return arguments.length ? (x0 = y0 = 0, x1 = +_[0], y1 = +_[1], sankey) : [x1 - x0, y1 - y0];\n };\n\n sankey.extent = function(_) {\n return arguments.length ? (x0 = +_[0][0], x1 = +_[1][0], y0 = +_[0][1], y1 = +_[1][1], sankey) : [[x0, y0], [x1, y1]];\n };\n\n sankey.iterations = function(_) {\n return arguments.length ? (iterations = +_, sankey) : iterations;\n };\n\n function computeNodeLinks({nodes, links}) {\n for (const [i, node] of nodes.entries()) {\n node.index = i;\n node.sourceLinks = [];\n node.targetLinks = [];\n }\n const nodeById = new Map(nodes.map((d, i) => [id(d, i, nodes), d]));\n for (const [i, link] of links.entries()) {\n link.index = i;\n let {source, target} = link;\n if (typeof source !== \"object\") source = link.source = find(nodeById, source);\n if (typeof target !== \"object\") target = link.target = find(nodeById, target);\n source.sourceLinks.push(link);\n target.targetLinks.push(link);\n }\n if (linkSort != null) {\n for (const {sourceLinks, targetLinks} of nodes) {\n sourceLinks.sort(linkSort);\n targetLinks.sort(linkSort);\n }\n }\n }\n\n function computeNodeValues({nodes}) {\n for (const node of nodes) {\n node.value = node.fixedValue === undefined\n ? Math.max(sum(node.sourceLinks, value), sum(node.targetLinks, value))\n : node.fixedValue;\n }\n }\n\n function computeNodeDepths({nodes}) {\n const n = nodes.length;\n let current = new Set(nodes);\n let next = new Set;\n let x = 0;\n while (current.size) {\n for (const node of current) {\n node.depth = x;\n for (const {target} of node.sourceLinks) {\n next.add(target);\n }\n }\n if (++x > n) throw new Error(\"circular link\");\n current = next;\n next = new Set;\n }\n }\n\n function computeNodeHeights({nodes}) {\n const n = nodes.length;\n let current = new Set(nodes);\n let next = new Set;\n let x = 0;\n while (current.size) {\n for (const node of current) {\n node.height = x;\n for (const {source} of node.targetLinks) {\n next.add(source);\n }\n }\n if (++x > n) throw new Error(\"circular link\");\n current = next;\n next = new Set;\n }\n }\n\n function computeNodeLayers({nodes}) {\n const x = max(nodes, d => d.depth) + 1;\n const kx = (x1 - x0 - dx) / (x - 1);\n const columns = new Array(x);\n for (const node of nodes) {\n const i = Math.max(0, Math.min(x - 1, Math.floor(align.call(null, node, x))));\n node.layer = i;\n node.x0 = x0 + i * kx;\n node.x1 = node.x0 + dx;\n if (columns[i]) columns[i].push(node);\n else columns[i] = [node];\n }\n if (sort) for (const column of columns) {\n column.sort(sort);\n }\n return columns;\n }\n\n function initializeNodeBreadths(columns) {\n const ky = min(columns, c => (y1 - y0 - (c.length - 1) * py) / sum(c, value));\n for (const nodes of columns) {\n let y = y0;\n for (const node of nodes) {\n node.y0 = y;\n node.y1 = y + node.value * ky;\n y = node.y1 + py;\n for (const link of node.sourceLinks) {\n link.width = link.value * ky;\n }\n }\n y = (y1 - y + py) / (nodes.length + 1);\n for (let i = 0; i < nodes.length; ++i) {\n const node = nodes[i];\n node.y0 += y * (i + 1);\n node.y1 += y * (i + 1);\n }\n reorderLinks(nodes);\n }\n }\n\n function computeNodeBreadths(graph) {\n const columns = computeNodeLayers(graph);\n py = Math.min(dy, (y1 - y0) / (max(columns, c => c.length) - 1));\n initializeNodeBreadths(columns);\n for (let i = 0; i < iterations; ++i) {\n const alpha = Math.pow(0.99, i);\n const beta = Math.max(1 - alpha, (i + 1) / iterations);\n relaxRightToLeft(columns, alpha, beta);\n relaxLeftToRight(columns, alpha, beta);\n }\n }\n\n // Reposition each node based on its incoming (target) links.\n function relaxLeftToRight(columns, alpha, beta) {\n for (let i = 1, n = columns.length; i < n; ++i) {\n const column = columns[i];\n for (const target of column) {\n let y = 0;\n let w = 0;\n for (const {source, value} of target.targetLinks) {\n let v = value * (target.layer - source.layer);\n y += targetTop(source, target) * v;\n w += v;\n }\n if (!(w > 0)) continue;\n let dy = (y / w - target.y0) * alpha;\n target.y0 += dy;\n target.y1 += dy;\n reorderNodeLinks(target);\n }\n if (sort === undefined) column.sort(ascendingBreadth);\n resolveCollisions(column, beta);\n }\n }\n\n // Reposition each node based on its outgoing (source) links.\n function relaxRightToLeft(columns, alpha, beta) {\n for (let n = columns.length, i = n - 2; i >= 0; --i) {\n const column = columns[i];\n for (const source of column) {\n let y = 0;\n let w = 0;\n for (const {target, value} of source.sourceLinks) {\n let v = value * (target.layer - source.layer);\n y += sourceTop(source, target) * v;\n w += v;\n }\n if (!(w > 0)) continue;\n let dy = (y / w - source.y0) * alpha;\n source.y0 += dy;\n source.y1 += dy;\n reorderNodeLinks(source);\n }\n if (sort === undefined) column.sort(ascendingBreadth);\n resolveCollisions(column, beta);\n }\n }\n\n function resolveCollisions(nodes, alpha) {\n const i = nodes.length >> 1;\n const subject = nodes[i];\n resolveCollisionsBottomToTop(nodes, subject.y0 - py, i - 1, alpha);\n resolveCollisionsTopToBottom(nodes, subject.y1 + py, i + 1, alpha);\n resolveCollisionsBottomToTop(nodes, y1, nodes.length - 1, alpha);\n resolveCollisionsTopToBottom(nodes, y0, 0, alpha);\n }\n\n // Push any overlapping nodes down.\n function resolveCollisionsTopToBottom(nodes, y, i, alpha) {\n for (; i < nodes.length; ++i) {\n const node = nodes[i];\n const dy = (y - node.y0) * alpha;\n if (dy > 1e-6) node.y0 += dy, node.y1 += dy;\n y = node.y1 + py;\n }\n }\n\n // Push any overlapping nodes up.\n function resolveCollisionsBottomToTop(nodes, y, i, alpha) {\n for (; i >= 0; --i) {\n const node = nodes[i];\n const dy = (node.y1 - y) * alpha;\n if (dy > 1e-6) node.y0 -= dy, node.y1 -= dy;\n y = node.y0 - py;\n }\n }\n\n function reorderNodeLinks({sourceLinks, targetLinks}) {\n if (linkSort === undefined) {\n for (const {source: {sourceLinks}} of targetLinks) {\n sourceLinks.sort(ascendingTargetBreadth);\n }\n for (const {target: {targetLinks}} of sourceLinks) {\n targetLinks.sort(ascendingSourceBreadth);\n }\n }\n }\n\n function reorderLinks(nodes) {\n if (linkSort === undefined) {\n for (const {sourceLinks, targetLinks} of nodes) {\n sourceLinks.sort(ascendingTargetBreadth);\n targetLinks.sort(ascendingSourceBreadth);\n }\n }\n }\n\n // Returns the target.y0 that would produce an ideal link from source to target.\n function targetTop(source, target) {\n let y = source.y0 - (source.sourceLinks.length - 1) * py / 2;\n for (const {target: node, width} of source.sourceLinks) {\n if (node === target) break;\n y += width + py;\n }\n for (const {source: node, width} of target.targetLinks) {\n if (node === source) break;\n y -= width;\n }\n return y;\n }\n\n // Returns the source.y0 that would produce an ideal link from source to target.\n function sourceTop(source, target) {\n let y = target.y0 - (target.targetLinks.length - 1) * py / 2;\n for (const {source: node, width} of target.targetLinks) {\n if (node === source) break;\n y += width + py;\n }\n for (const {target: node, width} of source.sourceLinks) {\n if (node === target) break;\n y -= width;\n }\n return y;\n }\n\n return sankey;\n}\n","var pi = Math.PI,\n tau = 2 * pi,\n epsilon = 1e-6,\n tauEpsilon = tau - epsilon;\n\nfunction Path() {\n this._x0 = this._y0 = // start of current subpath\n this._x1 = this._y1 = null; // end of current subpath\n this._ = \"\";\n}\n\nfunction path() {\n return new Path;\n}\n\nPath.prototype = path.prototype = {\n constructor: Path,\n moveTo: function(x, y) {\n this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y);\n },\n closePath: function() {\n if (this._x1 !== null) {\n this._x1 = this._x0, this._y1 = this._y0;\n this._ += \"Z\";\n }\n },\n lineTo: function(x, y) {\n this._ += \"L\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n quadraticCurveTo: function(x1, y1, x, y) {\n this._ += \"Q\" + (+x1) + \",\" + (+y1) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n bezierCurveTo: function(x1, y1, x2, y2, x, y) {\n this._ += \"C\" + (+x1) + \",\" + (+y1) + \",\" + (+x2) + \",\" + (+y2) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n arcTo: function(x1, y1, x2, y2, r) {\n x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n var x0 = this._x1,\n y0 = this._y1,\n x21 = x2 - x1,\n y21 = y2 - y1,\n x01 = x0 - x1,\n y01 = y0 - y1,\n l01_2 = x01 * x01 + y01 * y01;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(\"negative radius: \" + r);\n\n // Is this path empty? Move to (x1,y1).\n if (this._x1 === null) {\n this._ += \"M\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n }\n\n // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n else if (!(l01_2 > epsilon));\n\n // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n // Equivalently, is (x1,y1) coincident with (x2,y2)?\n // Or, is the radius zero? Line to (x1,y1).\n else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n this._ += \"L\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n }\n\n // Otherwise, draw an arc!\n else {\n var x20 = x2 - x0,\n y20 = y2 - y0,\n l21_2 = x21 * x21 + y21 * y21,\n l20_2 = x20 * x20 + y20 * y20,\n l21 = Math.sqrt(l21_2),\n l01 = Math.sqrt(l01_2),\n l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n t01 = l / l01,\n t21 = l / l21;\n\n // If the start tangent is not coincident with (x0,y0), line to.\n if (Math.abs(t01 - 1) > epsilon) {\n this._ += \"L\" + (x1 + t01 * x01) + \",\" + (y1 + t01 * y01);\n }\n\n this._ += \"A\" + r + \",\" + r + \",0,0,\" + (+(y01 * x20 > x01 * y20)) + \",\" + (this._x1 = x1 + t21 * x21) + \",\" + (this._y1 = y1 + t21 * y21);\n }\n },\n arc: function(x, y, r, a0, a1, ccw) {\n x = +x, y = +y, r = +r, ccw = !!ccw;\n var dx = r * Math.cos(a0),\n dy = r * Math.sin(a0),\n x0 = x + dx,\n y0 = y + dy,\n cw = 1 ^ ccw,\n da = ccw ? a0 - a1 : a1 - a0;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(\"negative radius: \" + r);\n\n // Is this path empty? Move to (x0,y0).\n if (this._x1 === null) {\n this._ += \"M\" + x0 + \",\" + y0;\n }\n\n // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n this._ += \"L\" + x0 + \",\" + y0;\n }\n\n // Is this arc empty? We’re done.\n if (!r) return;\n\n // Does the angle go the wrong way? Flip the direction.\n if (da < 0) da = da % tau + tau;\n\n // Is this a complete circle? Draw two arcs to complete the circle.\n if (da > tauEpsilon) {\n this._ += \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (x - dx) + \",\" + (y - dy) + \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (this._x1 = x0) + \",\" + (this._y1 = y0);\n }\n\n // Is this arc non-empty? Draw an arc!\n else if (da > epsilon) {\n this._ += \"A\" + r + \",\" + r + \",0,\" + (+(da >= pi)) + \",\" + cw + \",\" + (this._x1 = x + r * Math.cos(a1)) + \",\" + (this._y1 = y + r * Math.sin(a1));\n }\n },\n rect: function(x, y, w, h) {\n this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y) + \"h\" + (+w) + \"v\" + (+h) + \"h\" + (-w) + \"Z\";\n },\n toString: function() {\n return this._;\n }\n};\n\nexport default path;\n","export var slice = Array.prototype.slice;\n","export default function(x) {\n return function constant() {\n return x;\n };\n}\n","export function x(p) {\n return p[0];\n}\n\nexport function y(p) {\n return p[1];\n}\n","import {path} from \"d3-path\";\nimport {slice} from \"../array.js\";\nimport constant from \"../constant.js\";\nimport {x as pointX, y as pointY} from \"../point.js\";\nimport pointRadial from \"../pointRadial.js\";\n\nfunction linkSource(d) {\n return d.source;\n}\n\nfunction linkTarget(d) {\n return d.target;\n}\n\nfunction link(curve) {\n var source = linkSource,\n target = linkTarget,\n x = pointX,\n y = pointY,\n context = null;\n\n function link() {\n var buffer, argv = slice.call(arguments), s = source.apply(this, argv), t = target.apply(this, argv);\n if (!context) context = buffer = path();\n curve(context, +x.apply(this, (argv[0] = s, argv)), +y.apply(this, argv), +x.apply(this, (argv[0] = t, argv)), +y.apply(this, argv));\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n link.source = function(_) {\n return arguments.length ? (source = _, link) : source;\n };\n\n link.target = function(_) {\n return arguments.length ? (target = _, link) : target;\n };\n\n link.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), link) : x;\n };\n\n link.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), link) : y;\n };\n\n link.context = function(_) {\n return arguments.length ? ((context = _ == null ? null : _), link) : context;\n };\n\n return link;\n}\n\nfunction curveHorizontal(context, x0, y0, x1, y1) {\n context.moveTo(x0, y0);\n context.bezierCurveTo(x0 = (x0 + x1) / 2, y0, x0, y1, x1, y1);\n}\n\nfunction curveVertical(context, x0, y0, x1, y1) {\n context.moveTo(x0, y0);\n context.bezierCurveTo(x0, y0 = (y0 + y1) / 2, x1, y0, x1, y1);\n}\n\nfunction curveRadial(context, x0, y0, x1, y1) {\n var p0 = pointRadial(x0, y0),\n p1 = pointRadial(x0, y0 = (y0 + y1) / 2),\n p2 = pointRadial(x1, y0),\n p3 = pointRadial(x1, y1);\n context.moveTo(p0[0], p0[1]);\n context.bezierCurveTo(p1[0], p1[1], p2[0], p2[1], p3[0], p3[1]);\n}\n\nexport function linkHorizontal() {\n return link(curveHorizontal);\n}\n\nexport function linkVertical() {\n return link(curveVertical);\n}\n\nexport function linkRadial() {\n var l = link(curveRadial);\n l.angle = l.x, delete l.x;\n l.radius = l.y, delete l.y;\n return l;\n}\n","import {linkHorizontal} from \"d3-shape\";\n\nfunction horizontalSource(d) {\n return [d.source.x1, d.y0];\n}\n\nfunction horizontalTarget(d) {\n return [d.target.x0, d.y1];\n}\n\nexport default function() {\n return linkHorizontal()\n .source(horizontalSource)\n .target(horizontalTarget);\n}\n","import get from 'lodash/get';\nimport { getXValue, getYValue } from '../utils';\nconst getFilteredLinearScatterData = (data) => {\n return data.filter((d) => typeof d.x === 'number' && typeof d.y === 'number');\n};\nexport const prepareScatterData = (args) => {\n const { series, xAxis, xScale, yAxis, yScale } = args;\n return series.reduce((acc, s) => {\n const yAxisIndex = get(s, 'yAxis', 0);\n const seriesYAxis = yAxis[yAxisIndex];\n const seriesYScale = yScale[yAxisIndex];\n const filteredData = xAxis.type === 'category' || seriesYAxis.type === 'category'\n ? s.data\n : getFilteredLinearScatterData(s.data);\n filteredData.forEach((d) => {\n acc.push({\n point: {\n data: d,\n series: s,\n x: getXValue({ point: d, xAxis, xScale }),\n y: getYValue({ point: d, yAxis: seriesYAxis, yScale: seriesYScale }),\n opacity: get(d, 'opacity', null),\n },\n hovered: false,\n active: true,\n htmlElements: [],\n });\n });\n return acc;\n }, []);\n};\n","import React from 'react';\nimport { select } from 'd3';\nimport get from 'lodash/get';\nimport { block } from '../../../utils';\nimport { HtmlLayer } from '../HtmlLayer';\nimport { getMarkerHaloVisibility, renderMarker, selectMarkerHalo, selectMarkerSymbol, setMarker, } from '../marker';\nimport { setActiveState, shapeKey } from '../utils';\nexport { prepareScatterData } from './prepare-data';\nconst b = block('d3-scatter');\nexport function ScatterSeriesShape(props) {\n const { dispatcher, preparedData, seriesOptions, htmlLayout } = props;\n const hoveredDataRef = React.useRef(null);\n const ref = React.useRef(null);\n React.useEffect(() => {\n if (!ref.current) {\n return () => { };\n }\n const svgElement = select(ref.current);\n const hoverOptions = get(seriesOptions, 'scatter.states.hover');\n const inactiveOptions = get(seriesOptions, 'scatter.states.inactive');\n svgElement.selectAll('*').remove();\n const selection = svgElement\n .selectAll('path')\n .data(preparedData, shapeKey)\n .join('g')\n .call(renderMarker)\n .attr('fill', (d) => d.point.data.color || d.point.series.color || '')\n .attr('opacity', (d) => d.point.opacity)\n .attr('cursor', (d) => d.point.series.cursor);\n const hoverEnabled = hoverOptions === null || hoverOptions === void 0 ? void 0 : hoverOptions.enabled;\n const inactiveEnabled = inactiveOptions === null || inactiveOptions === void 0 ? void 0 : inactiveOptions.enabled;\n function handleShapeHover(data) {\n var _a;\n hoveredDataRef.current = data;\n const selected = data === null || data === void 0 ? void 0 : data.find((d) => d.series.type === 'scatter');\n const selectedDataItem = selected === null || selected === void 0 ? void 0 : selected.data;\n const selectedSeriesId = (_a = selected === null || selected === void 0 ? void 0 : selected.series) === null || _a === void 0 ? void 0 : _a.id;\n selection.datum((d, index, list) => {\n const elementSelection = select(list[index]);\n const hovered = Boolean(hoverEnabled && d.point.data === selectedDataItem);\n if (d.hovered !== hovered) {\n d.hovered = hovered;\n elementSelection.attr('z-index', hovered ? 999 : null);\n selectMarkerHalo(elementSelection).attr('visibility', getMarkerHaloVisibility);\n selectMarkerSymbol(elementSelection).call(setMarker, hovered ? 'hover' : 'normal');\n }\n if (hovered) {\n elementSelection.raise();\n }\n if (d.point.series.marker.states.normal.enabled) {\n const isActive = Boolean(!inactiveEnabled ||\n !selectedSeriesId ||\n selectedSeriesId === d.point.series.id);\n setActiveState({\n element: list[index],\n state: inactiveOptions,\n active: isActive,\n datum: d,\n });\n }\n return d;\n });\n }\n if (hoveredDataRef.current !== null) {\n handleShapeHover(hoveredDataRef.current);\n }\n dispatcher.on('hover-shape.scatter', handleShapeHover);\n return () => {\n dispatcher.on('hover-shape.scatter', null);\n };\n }, [dispatcher, preparedData, seriesOptions]);\n return (React.createElement(React.Fragment, null,\n React.createElement(\"g\", { ref: ref, className: b() }),\n React.createElement(HtmlLayer, { preparedData: preparedData, htmlLayout: htmlLayout })));\n}\n","import React from 'react';\nimport { color, select } from 'd3';\nimport get from 'lodash/get';\nimport { block, setEllipsisForOverflowTexts } from '../../../utils';\nimport { HtmlLayer } from '../HtmlLayer';\nconst b = block('d3-treemap');\nexport const TreemapSeriesShape = (props) => {\n const { dispatcher, preparedData, seriesOptions, htmlLayout } = props;\n const hoveredDataRef = React.useRef(null);\n const ref = React.useRef(null);\n React.useEffect(() => {\n if (!ref.current) {\n return () => { };\n }\n const svgElement = select(ref.current);\n svgElement.selectAll('*').remove();\n const { labelData, leaves, series } = preparedData;\n const leaf = svgElement\n .selectAll('g')\n .data(leaves)\n .join('g')\n .attr('transform', (d) => `translate(${d.x0},${d.y0})`)\n .attr('cursor', series.cursor);\n const rectSelection = leaf\n .append('rect')\n .attr('id', (d) => d.id || d.name)\n .attr('fill', (d) => {\n var _a;\n if (d.data.color) {\n return d.data.color;\n }\n const levelOptions = (_a = series.levels) === null || _a === void 0 ? void 0 : _a.find((l) => l.index === d.depth);\n return (levelOptions === null || levelOptions === void 0 ? void 0 : levelOptions.color) || series.color;\n })\n .attr('width', (d) => d.x1 - d.x0)\n .attr('height', (d) => d.y1 - d.y0);\n const labelSelection = svgElement\n .selectAll('tspan')\n .data(labelData)\n .join('text')\n .text((d) => d.text)\n .attr('class', b('label'))\n .attr('x', (d) => d.x)\n .attr('y', (d) => d.y)\n .style('font-size', () => series.dataLabels.style.fontSize)\n .style('font-weight', () => { var _a; return ((_a = series.dataLabels.style) === null || _a === void 0 ? void 0 : _a.fontWeight) || null; })\n .style('fill', () => { var _a; return ((_a = series.dataLabels.style) === null || _a === void 0 ? void 0 : _a.fontColor) || null; })\n .call(setEllipsisForOverflowTexts, (d) => d.width);\n const eventName = `hover-shape.treemap`;\n const hoverOptions = get(seriesOptions, 'treemap.states.hover');\n const inactiveOptions = get(seriesOptions, 'treemap.states.inactive');\n function handleShapeHover(data) {\n var _a;\n hoveredDataRef.current = data;\n const hoverEnabled = hoverOptions === null || hoverOptions === void 0 ? void 0 : hoverOptions.enabled;\n const inactiveEnabled = inactiveOptions === null || inactiveOptions === void 0 ? void 0 : inactiveOptions.enabled;\n const hoveredData = (_a = data === null || data === void 0 ? void 0 : data[0]) === null || _a === void 0 ? void 0 : _a.data;\n rectSelection.datum((d, index, list) => {\n const currentRect = select(list[index]);\n const hovered = Boolean(hoverEnabled && hoveredData === d.data);\n const inactive = Boolean(inactiveEnabled && hoveredData && !hovered);\n currentRect\n .attr('fill', (currentD) => {\n var _a, _b;\n const levelOptions = (_a = series.levels) === null || _a === void 0 ? void 0 : _a.find((l) => l.index === currentD.depth);\n const initialColor = (levelOptions === null || levelOptions === void 0 ? void 0 : levelOptions.color) || d.data.color || series.color;\n if (hovered) {\n return (((_b = color(initialColor)) === null || _b === void 0 ? void 0 : _b.brighter(hoverOptions === null || hoverOptions === void 0 ? void 0 : hoverOptions.brightness).toString()) || initialColor);\n }\n return initialColor;\n })\n .attr('opacity', () => {\n if (inactive) {\n return (inactiveOptions === null || inactiveOptions === void 0 ? void 0 : inactiveOptions.opacity) || null;\n }\n return null;\n });\n return d;\n });\n labelSelection.datum((d, index, list) => {\n const currentLabel = select(list[index]);\n const hovered = Boolean(hoverEnabled && hoveredData === d.nodeData);\n const inactive = Boolean(inactiveEnabled && hoveredData && !hovered);\n currentLabel.attr('opacity', () => {\n if (inactive) {\n return (inactiveOptions === null || inactiveOptions === void 0 ? void 0 : inactiveOptions.opacity) || null;\n }\n return null;\n });\n return d;\n });\n }\n if (hoveredDataRef.current !== null) {\n handleShapeHover(hoveredDataRef.current);\n }\n dispatcher.on(eventName, handleShapeHover);\n return () => {\n dispatcher.on(eventName, null);\n };\n }, [dispatcher, preparedData, seriesOptions]);\n return (React.createElement(React.Fragment, null,\n React.createElement(\"g\", { ref: ref, className: b() }),\n React.createElement(HtmlLayer, { preparedData: preparedData, htmlLayout: htmlLayout })));\n};\n","import get from 'lodash/get';\nimport sortBy from 'lodash/sortBy';\nimport { getLabelsSize } from '../../../utils';\nimport { MIN_BAR_GAP, MIN_BAR_WIDTH } from '../constants';\nimport { getXValue, getYValue } from '../utils';\nfunction getLabelData(d, plotHeight) {\n if (!d.series.dataLabels.enabled) {\n return undefined;\n }\n const text = String(d.data.label || d.subTotal);\n const style = d.series.dataLabels.style;\n const { maxHeight: height, maxWidth: width } = getLabelsSize({ labels: [text], style });\n let y;\n if (Number(d.data.y) > 0 || d.data.total) {\n y = Math.max(height, d.y - d.series.dataLabels.padding);\n }\n else {\n y = Math.min(plotHeight - d.series.dataLabels.padding, d.y + d.height + d.series.dataLabels.padding + height);\n }\n return {\n text,\n x: d.x + d.width / 2,\n y,\n style,\n size: { width, height },\n textAnchor: 'middle',\n series: d.series,\n };\n}\nfunction getBandWidth(args) {\n const { series, xAxis, xScale } = args;\n if (xAxis.type === 'category') {\n const xBandScale = xScale;\n return xBandScale.bandwidth();\n }\n const xLinearScale = xScale;\n const xValues = series.reduce((acc, s) => {\n s.data.forEach((dataItem) => acc.push(Number(dataItem.x)));\n return acc;\n }, []);\n let bandWidth = Infinity;\n xValues.sort().forEach((xValue, index) => {\n if (index > 0 && xValue !== xValues[index - 1]) {\n const dist = xLinearScale(xValue) - xLinearScale(xValues[index - 1]);\n if (dist < bandWidth) {\n bandWidth = dist;\n }\n }\n });\n return bandWidth;\n}\nexport const prepareWaterfallData = (args) => {\n const { series, seriesOptions, xAxis, xScale, yAxis: [yAxis], yScale: [yScale], } = args;\n const yLinearScale = yScale;\n const plotHeight = yLinearScale(yLinearScale.domain()[0]);\n const barMaxWidth = get(seriesOptions, 'waterfall.barMaxWidth');\n const barPadding = get(seriesOptions, 'waterfall.barPadding');\n const flattenData = series.reduce((acc, s) => {\n acc.push(...s.data.map((d) => ({ data: d, series: s })));\n return acc;\n }, []);\n const data = sortBy(flattenData, (d) => d.data.x);\n const bandWidth = getBandWidth({\n series,\n xAxis,\n xScale,\n });\n const rectGap = Math.max(bandWidth * barPadding, MIN_BAR_GAP);\n const rectWidth = Math.max(MIN_BAR_WIDTH, Math.min(bandWidth - rectGap, barMaxWidth));\n const yZero = getYValue({\n point: { y: 0 },\n yScale,\n yAxis,\n });\n let totalValue = 0;\n const result = [];\n data.forEach((item, _index) => {\n if (typeof item.data.y !== 'number' && !item.data.total) {\n return;\n }\n if (!item.data.total) {\n totalValue += Number(item.data.y);\n }\n const prevPoint = result[result.length - 1];\n const xCenter = getXValue({ point: item.data, xAxis, xScale });\n const x = xCenter - rectWidth / 2;\n const yValue = Number(item.data.total ? totalValue : item.data.y);\n const height = yZero -\n getYValue({\n point: { y: Math.abs(yValue) },\n yScale,\n yAxis,\n });\n let y;\n if (!prevPoint || item.data.total) {\n y = getYValue({\n point: {\n y: yValue > 0 ? yValue : 0,\n },\n yScale,\n yAxis,\n });\n }\n else if (Number(prevPoint.data.y) < 0) {\n if (Number(item.data.y) > 0) {\n y = prevPoint.y + prevPoint.height - height;\n }\n else {\n y = prevPoint.y + prevPoint.height;\n }\n }\n else if (Number(item.data.y) < 0) {\n y = prevPoint.y;\n }\n else {\n y = prevPoint.y - height;\n }\n const preparedData = {\n x,\n y,\n width: rectWidth,\n height,\n opacity: get(item.data, 'opacity', null),\n data: item.data,\n series: item.series,\n subTotal: totalValue,\n htmlElements: [],\n };\n preparedData.label = getLabelData(preparedData, plotHeight);\n result.push(preparedData);\n });\n return result;\n};\n","import React from 'react';\nimport { color, line as lineGenerator, select } from 'd3';\nimport get from 'lodash/get';\nimport { DashStyle } from '../../../constants';\nimport { block, filterOverlappingLabels, getLineDashArray, getWaterfallPointColor, } from '../../../utils';\nimport { HtmlLayer } from '../HtmlLayer';\nexport { prepareWaterfallData } from './prepare-data';\nexport * from './types';\nconst b = block('d3-waterfall');\nexport const WaterfallSeriesShapes = (args) => {\n const { dispatcher, preparedData, seriesOptions, htmlLayout } = args;\n const hoveredDataRef = React.useRef(null);\n const ref = React.useRef(null);\n const connectorSelector = `.${b('connector')}`;\n React.useEffect(() => {\n var _a;\n if (!ref.current) {\n return () => { };\n }\n const svgElement = select(ref.current);\n const hoverOptions = get(seriesOptions, 'waterfall.states.hover');\n const inactiveOptions = get(seriesOptions, 'waterfall.states.inactive');\n svgElement.selectAll('*').remove();\n const rectSelection = svgElement\n .selectAll('allRects')\n .data(preparedData)\n .join('rect')\n .attr('class', b('segment'))\n .attr('x', (d) => d.x)\n .attr('y', (d) => d.y)\n .attr('height', (d) => d.height)\n .attr('width', (d) => d.width)\n .attr('fill', (d) => getWaterfallPointColor(d.data, d.series))\n .attr('opacity', (d) => d.opacity)\n .attr('cursor', (d) => d.series.cursor);\n let dataLabels = preparedData.map((d) => d.label).filter(Boolean);\n if (!((_a = preparedData[0]) === null || _a === void 0 ? void 0 : _a.series.dataLabels.allowOverlap)) {\n dataLabels = filterOverlappingLabels(dataLabels);\n }\n const labelSelection = svgElement\n .selectAll('text')\n .data(dataLabels)\n .join('text')\n .text((d) => d.text)\n .attr('class', b('label'))\n .attr('x', (d) => d.x)\n .attr('y', (d) => d.y)\n .attr('text-anchor', (d) => d.textAnchor)\n .style('font-size', (d) => d.style.fontSize)\n .style('font-weight', (d) => d.style.fontWeight || null)\n .style('fill', (d) => d.style.fontColor || null);\n // Add the connector line between bars\n svgElement\n .selectAll(connectorSelector)\n .data(preparedData)\n .join('path')\n .attr('class', b('connector'))\n .attr('d', (d, index) => {\n const line = lineGenerator();\n const prev = preparedData[index - 1];\n if (!prev) {\n return null;\n }\n const points = [];\n if (Number(prev.data.y) > 0) {\n points.push([prev.x, prev.y]);\n }\n else {\n points.push([prev.x, prev.y + prev.height]);\n }\n if (Number(d.data.y) > 0 && !d.data.total) {\n points.push([d.x + d.width, d.y + d.height]);\n }\n else {\n points.push([d.x + d.width, d.y]);\n }\n return line(points);\n })\n .attr('stroke-width', 1)\n .attr('stroke-dasharray', () => getLineDashArray(DashStyle.Dash, 1));\n function handleShapeHover(data) {\n hoveredDataRef.current = data;\n const hoverEnabled = hoverOptions === null || hoverOptions === void 0 ? void 0 : hoverOptions.enabled;\n const inactiveEnabled = inactiveOptions === null || inactiveOptions === void 0 ? void 0 : inactiveOptions.enabled;\n if (!data) {\n if (hoverEnabled) {\n rectSelection.attr('fill', (d) => getWaterfallPointColor(d.data, d.series));\n }\n if (inactiveEnabled) {\n rectSelection.attr('opacity', null);\n labelSelection.attr('opacity', null);\n }\n return;\n }\n if (hoverEnabled) {\n const hoveredValues = data.map((d) => d.data.x);\n rectSelection.attr('fill', (d) => {\n var _a;\n const fillColor = getWaterfallPointColor(d.data, d.series);\n if (hoveredValues.includes(d.data.x)) {\n const brightness = hoverOptions === null || hoverOptions === void 0 ? void 0 : hoverOptions.brightness;\n return ((_a = color(fillColor)) === null || _a === void 0 ? void 0 : _a.brighter(brightness).toString()) || fillColor;\n }\n return fillColor;\n });\n }\n if (inactiveEnabled) {\n const hoveredSeries = data.map((d) => d.series.id);\n rectSelection.attr('opacity', (d) => {\n return hoveredSeries.includes(d.series.id)\n ? null\n : (inactiveOptions === null || inactiveOptions === void 0 ? void 0 : inactiveOptions.opacity) || null;\n });\n labelSelection.attr('opacity', (d) => {\n return hoveredSeries.includes(d.series.id)\n ? null\n : (inactiveOptions === null || inactiveOptions === void 0 ? void 0 : inactiveOptions.opacity) || null;\n });\n }\n }\n if (hoveredDataRef.current !== null) {\n handleShapeHover(hoveredDataRef.current);\n }\n dispatcher.on('hover-shape.waterfall', handleShapeHover);\n return () => {\n dispatcher.on('hover-shape.waterfall', null);\n };\n }, [dispatcher, preparedData, seriesOptions]);\n return (React.createElement(React.Fragment, null,\n React.createElement(\"g\", { ref: ref, className: b() }),\n React.createElement(HtmlLayer, { preparedData: preparedData, htmlLayout: htmlLayout })));\n};\n","import React from 'react';\nimport { group } from 'd3';\nimport { ChartError } from '../../libs';\nimport { getOnlyVisibleSeries } from '../../utils';\nimport { AreaSeriesShapes } from './area';\nimport { prepareAreaData } from './area/prepare-data';\nimport { BarXSeriesShapes, prepareBarXData } from './bar-x';\nimport { BarYSeriesShapes, prepareBarYData } from './bar-y';\nimport { LineSeriesShapes } from './line';\nimport { prepareLineData } from './line/prepare-data';\nimport { PieSeriesShapes } from './pie';\nimport { preparePieData } from './pie/prepare-data';\nimport { SankeySeriesShape } from './sankey';\nimport { prepareSankeyData } from './sankey/prepare-data';\nimport { ScatterSeriesShape, prepareScatterData } from './scatter';\nimport { TreemapSeriesShape } from './treemap';\nimport { prepareTreemapData } from './treemap/prepare-data';\nimport { WaterfallSeriesShapes, prepareWaterfallData } from './waterfall';\nimport './styles.css';\nexport const useShapes = (args) => {\n const { boundsWidth, boundsHeight, dispatcher, series, seriesOptions, xAxis, xScale, yAxis, yScale, split, htmlLayout, } = args;\n const shapesComponents = React.useMemo(() => {\n const visibleSeries = getOnlyVisibleSeries(series);\n const groupedSeries = group(visibleSeries, (item) => item.type);\n const shapesData = [];\n // eslint-disable-next-line complexity\n const shapes = Array.from(groupedSeries).reduce((acc, item) => {\n const [seriesType, chartSeries] = item;\n switch (seriesType) {\n case 'bar-x': {\n if (xScale && yScale) {\n const preparedData = prepareBarXData({\n series: chartSeries,\n seriesOptions,\n xAxis,\n xScale,\n yAxis,\n yScale,\n boundsHeight,\n });\n acc.push(React.createElement(BarXSeriesShapes, { key: \"bar-x\", dispatcher: dispatcher, seriesOptions: seriesOptions, preparedData: preparedData, htmlLayout: htmlLayout }));\n shapesData.push(...preparedData);\n }\n break;\n }\n case 'bar-y': {\n if (xScale && yScale) {\n const preparedData = prepareBarYData({\n series: chartSeries,\n seriesOptions,\n xAxis,\n xScale,\n yAxis,\n yScale,\n });\n acc.push(React.createElement(BarYSeriesShapes, { key: \"bar-y\", dispatcher: dispatcher, seriesOptions: seriesOptions, preparedData: preparedData, htmlLayout: htmlLayout }));\n shapesData.push(...preparedData);\n }\n break;\n }\n case 'waterfall': {\n if (xScale && yScale) {\n const preparedData = prepareWaterfallData({\n series: chartSeries,\n seriesOptions,\n xAxis,\n xScale,\n yAxis,\n yScale,\n });\n acc.push(React.createElement(WaterfallSeriesShapes, { key: \"waterfall\", dispatcher: dispatcher, seriesOptions: seriesOptions, preparedData: preparedData, htmlLayout: htmlLayout }));\n shapesData.push(...preparedData);\n }\n break;\n }\n case 'line': {\n if (xScale && yScale) {\n const preparedData = prepareLineData({\n series: chartSeries,\n xAxis,\n xScale,\n yAxis,\n yScale,\n split,\n });\n acc.push(React.createElement(LineSeriesShapes, { key: \"line\", dispatcher: dispatcher, seriesOptions: seriesOptions, preparedData: preparedData, htmlLayout: htmlLayout }));\n shapesData.push(...preparedData);\n }\n break;\n }\n case 'area': {\n if (xScale && yScale) {\n const preparedData = prepareAreaData({\n series: chartSeries,\n xAxis,\n xScale,\n yAxis,\n yScale,\n boundsHeight,\n });\n acc.push(React.createElement(AreaSeriesShapes, { key: \"area\", dispatcher: dispatcher, seriesOptions: seriesOptions, preparedData: preparedData, htmlLayout: htmlLayout }));\n shapesData.push(...preparedData);\n }\n break;\n }\n case 'scatter': {\n if (xScale && yScale) {\n const preparedData = prepareScatterData({\n series: chartSeries,\n xAxis,\n xScale,\n yAxis,\n yScale,\n });\n acc.push(React.createElement(ScatterSeriesShape, { key: \"scatter\", dispatcher: dispatcher, preparedData: preparedData, seriesOptions: seriesOptions, htmlLayout: htmlLayout }));\n shapesData.push(...preparedData);\n }\n break;\n }\n case 'pie': {\n const preparedData = preparePieData({\n series: chartSeries,\n boundsWidth,\n boundsHeight,\n });\n acc.push(React.createElement(PieSeriesShapes, { key: \"pie\", dispatcher: dispatcher, preparedData: preparedData, seriesOptions: seriesOptions, htmlLayout: htmlLayout }));\n shapesData.push(...preparedData);\n break;\n }\n case 'treemap': {\n const preparedData = prepareTreemapData({\n // We should have exactly one series with \"treemap\" type\n // Otherwise data validation should emit an error\n series: chartSeries[0],\n width: boundsWidth,\n height: boundsHeight,\n });\n acc.push(React.createElement(TreemapSeriesShape, { key: \"treemap\", dispatcher: dispatcher, preparedData: preparedData, seriesOptions: seriesOptions, htmlLayout: htmlLayout }));\n shapesData.push(preparedData);\n break;\n }\n case 'sankey': {\n const preparedData = prepareSankeyData({\n series: chartSeries[0],\n width: boundsWidth,\n height: boundsHeight,\n });\n acc.push(React.createElement(SankeySeriesShape, { key: \"sankey\", dispatcher: dispatcher, preparedData: preparedData, seriesOptions: seriesOptions, htmlLayout: htmlLayout }));\n shapesData.push(preparedData);\n break;\n }\n default: {\n throw new ChartError({\n message: `The display method is not defined for a series with type \"${seriesType}\"`,\n });\n }\n }\n return acc;\n }, []);\n return { shapes, shapesData };\n }, [\n boundsWidth,\n boundsHeight,\n dispatcher,\n series,\n seriesOptions,\n xAxis,\n xScale,\n yAxis,\n yScale,\n ]);\n return { shapes: shapesComponents.shapes, shapesData: shapesComponents.shapesData };\n};\n","export const MIN_BAR_WIDTH = 1;\nexport const MIN_BAR_GAP = 1;\nexport const MIN_BAR_GROUP_GAP = 1;\n","import { ascending, descending, max, sort } from 'd3';\nimport get from 'lodash/get';\nimport { getDataCategoryValue, getLabelsSize } from '../../../utils';\nimport { MIN_BAR_GAP, MIN_BAR_GROUP_GAP, MIN_BAR_WIDTH } from '../constants';\nconst DEFAULT_LABEL_PADDING = 7;\nfunction groupByYValue(series, yAxis) {\n const data = {};\n series.forEach((s) => {\n s.data.forEach((d) => {\n const axisIndex = get(s, 'yAxis', 0);\n const seriesYAxis = yAxis[axisIndex];\n const categories = get(seriesYAxis, 'categories', []);\n const key = seriesYAxis.type === 'category'\n ? getDataCategoryValue({ axisDirection: 'y', categories, data: d })\n : d.y;\n if (key) {\n if (!data[key]) {\n data[key] = {};\n }\n if (!data[key][s.stackId]) {\n data[key][s.stackId] = [];\n }\n data[key][s.stackId].push({ data: d, series: s });\n }\n });\n });\n return data;\n}\nfunction getBandWidth(series, yAxis, yScale) {\n let bandWidth = Infinity;\n if (yAxis[0].type === 'category') {\n bandWidth = yScale.bandwidth();\n }\n else {\n const scale = yScale;\n const axisValues = series.reduce((acc, s) => {\n s.data.forEach((dataItem) => acc.push(Number(dataItem.y)));\n return acc;\n }, []);\n axisValues.sort().forEach((value, index) => {\n if (index > 0 && value !== axisValues[index - 1]) {\n const dist = scale(value) - scale(axisValues[index - 1]);\n if (dist < bandWidth) {\n bandWidth = dist;\n }\n }\n });\n }\n return bandWidth;\n}\nfunction setLabel(prepared) {\n const dataLabels = prepared.series.dataLabels;\n if (!dataLabels.enabled) {\n return;\n }\n const data = prepared.data;\n const content = String(data.label || data.x);\n const { maxHeight: height, maxWidth: width } = getLabelsSize({\n labels: [content],\n style: dataLabels.style,\n html: dataLabels.html,\n });\n const x = dataLabels.inside\n ? prepared.x + prepared.width / 2\n : prepared.x + prepared.width + DEFAULT_LABEL_PADDING;\n const y = prepared.y + prepared.height / 2;\n if (dataLabels.html) {\n prepared.htmlElements.push({\n x,\n y: y - height / 2,\n content,\n size: { width, height },\n });\n }\n else {\n prepared.label = {\n x,\n y: y + height / 2,\n text: content,\n textAnchor: dataLabels.inside ? 'middle' : 'right',\n style: dataLabels.style,\n series: prepared.series,\n size: { width, height },\n };\n }\n}\nexport const prepareBarYData = (args) => {\n const { series, seriesOptions, yAxis, xScale, yScale: [yScale], } = args;\n const xLinearScale = xScale;\n const plotWidth = xLinearScale(xLinearScale.domain()[1]);\n const barMaxWidth = get(seriesOptions, 'bar-y.barMaxWidth');\n const barPadding = get(seriesOptions, 'bar-y.barPadding');\n const groupPadding = get(seriesOptions, 'bar-y.groupPadding');\n const sortingOptions = get(seriesOptions, 'bar-y.dataSorting');\n const comparator = (sortingOptions === null || sortingOptions === void 0 ? void 0 : sortingOptions.direction) === 'desc' ? descending : ascending;\n const sortKey = (() => {\n switch (sortingOptions === null || sortingOptions === void 0 ? void 0 : sortingOptions.key) {\n case 'x': {\n return 'data.x';\n }\n case 'name': {\n return 'series.name';\n }\n default: {\n return undefined;\n }\n }\n })();\n const groupedData = groupByYValue(series, yAxis);\n const bandWidth = getBandWidth(series, yAxis, yScale);\n const maxGroupSize = max(Object.values(groupedData), (d) => Object.values(d).length) || 1;\n const groupGap = Math.max(bandWidth * groupPadding, MIN_BAR_GROUP_GAP);\n const groupWidth = bandWidth - groupGap;\n const rectGap = Math.max(bandWidth * barPadding, MIN_BAR_GAP);\n const barHeight = Math.max(MIN_BAR_WIDTH, Math.min(groupWidth / maxGroupSize - rectGap, barMaxWidth));\n const result = [];\n Object.entries(groupedData).forEach(([yValue, val]) => {\n const stacks = Object.values(val);\n const currentBarHeight = barHeight * stacks.length + rectGap * (stacks.length - 1);\n stacks.forEach((measureValues, groupItemIndex) => {\n const base = xLinearScale(0);\n let stackSum = base;\n const stackItems = [];\n const sortedData = sortKey\n ? sort(measureValues, (a, b) => comparator(get(a, sortKey), get(b, sortKey)))\n : measureValues;\n sortedData.forEach(({ data, series: s }, xValueIndex) => {\n let center;\n if (yAxis[0].type === 'category') {\n const bandScale = yScale;\n center = (bandScale(yValue) || 0) + bandWidth / 2;\n }\n else {\n const scale = yScale;\n center = scale(Number(yValue));\n }\n const y = center - currentBarHeight / 2 + (barHeight + rectGap) * groupItemIndex;\n const xValue = Number(data.x);\n const width = xValue > 0 ? xLinearScale(xValue) - base : base - xLinearScale(xValue);\n const item = {\n x: xValue > 0 ? stackSum : stackSum - width,\n y,\n width,\n height: barHeight,\n color: data.color || s.color,\n opacity: get(data, 'opacity', null),\n data,\n series: s,\n htmlElements: [],\n isLastStackItem: xValueIndex === sortedData.length - 1,\n };\n stackItems.push(item);\n stackSum += width + 1;\n });\n if (series.some((s) => s.stacking === 'percent')) {\n let acc = 0;\n const ratio = plotWidth / (stackSum - stackItems.length);\n stackItems.forEach((item) => {\n item.width = item.width * ratio;\n item.x = acc;\n acc += item.width;\n });\n }\n result.push(...stackItems);\n });\n });\n result.forEach((d) => {\n setLabel(d);\n });\n return result;\n};\n","import { getLabelsSize, getLeftPosition } from '../../../utils';\nimport { getXValue, getYValue } from '../utils';\nfunction getLabelData(point, series, xMax) {\n const text = String(point.data.label || point.data.y);\n const style = series.dataLabels.style;\n const size = getLabelsSize({ labels: [text], style });\n const labelData = {\n text,\n x: point.x,\n y: point.y - series.dataLabels.padding,\n style,\n size: { width: size.maxWidth, height: size.maxHeight },\n textAnchor: 'middle',\n series: series,\n active: true,\n };\n const left = getLeftPosition(labelData);\n if (left < 0) {\n labelData.x = labelData.x + Math.abs(left);\n }\n else {\n const right = left + labelData.size.width;\n if (right > xMax) {\n labelData.x = labelData.x - xMax - right;\n }\n }\n return labelData;\n}\nfunction getHtmlLabel(point, series, xMax) {\n const content = String(point.data.label || point.data.y);\n const size = getLabelsSize({ labels: [content], html: true });\n return {\n x: Math.min(xMax - size.maxWidth, Math.max(0, point.x)),\n y: Math.max(0, point.y - series.dataLabels.padding - size.maxHeight),\n content,\n size: { width: size.maxWidth, height: size.maxHeight },\n };\n}\nexport const prepareLineData = (args) => {\n const { series, xAxis, yAxis, xScale, yScale, split } = args;\n const [_xMin, xRangeMax] = xScale.range();\n const xMax = xRangeMax / (1 - xAxis.maxPadding);\n return series.reduce((acc, s) => {\n var _a;\n const yAxisIndex = s.yAxis;\n const seriesYAxis = yAxis[yAxisIndex];\n const yAxisTop = ((_a = split.plots[seriesYAxis.plotIndex]) === null || _a === void 0 ? void 0 : _a.top) || 0;\n const seriesYScale = yScale[s.yAxis];\n const points = s.data.map((d) => ({\n x: getXValue({ point: d, xAxis, xScale }),\n y: yAxisTop + getYValue({ point: d, yAxis: seriesYAxis, yScale: seriesYScale }),\n active: true,\n data: d,\n series: s,\n }));\n const htmlElements = [];\n let labels = [];\n if (s.dataLabels.enabled) {\n if (s.dataLabels.html) {\n htmlElements.push(...points.map((p) => getHtmlLabel(p, s, xMax)));\n }\n else {\n labels = points.map((p) => getLabelData(p, s, xMax));\n }\n }\n let markers = [];\n if (s.marker.states.normal.enabled || s.marker.states.hover.enabled) {\n markers = points.map((p) => ({\n point: p,\n active: true,\n hovered: false,\n }));\n }\n const result = {\n points,\n markers,\n labels,\n color: s.color,\n width: s.lineWidth,\n series: s,\n hovered: false,\n active: true,\n id: s.id,\n dashStyle: s.dashStyle,\n linecap: s.linecap,\n opacity: s.opacity,\n htmlElements,\n };\n acc.push(result);\n return acc;\n }, []);\n};\n","import { group, sort } from 'd3';\nimport { getDataCategoryValue, getLabelsSize, getLeftPosition } from '../../../utils';\nimport { getXValue, getYValue } from '../utils';\nfunction getLabelData(point, series, xMax) {\n const text = String(point.data.label || point.data.y);\n const style = series.dataLabels.style;\n const size = getLabelsSize({ labels: [text], style, html: series.dataLabels.html });\n const labelData = {\n text,\n x: point.x,\n y: point.y - series.dataLabels.padding,\n style,\n size: { width: size.maxWidth, height: size.maxHeight },\n textAnchor: 'middle',\n series: series,\n active: true,\n };\n const left = getLeftPosition(labelData);\n if (left < 0) {\n labelData.x = labelData.x + Math.abs(left);\n }\n else {\n const right = left + labelData.size.width;\n if (right > xMax) {\n labelData.x = labelData.x - (right - xMax);\n }\n }\n return labelData;\n}\nfunction getXValues(series, xAxis, xScale) {\n const categories = xAxis.categories || [];\n const xValues = series.reduce((acc, s) => {\n s.data.forEach((d) => {\n const key = String(xAxis.type === 'category'\n ? getDataCategoryValue({ axisDirection: 'x', categories, data: d })\n : d.x);\n if (!acc.has(key)) {\n acc.set(key, getXValue({ point: d, xAxis, xScale }));\n }\n });\n return acc;\n }, new Map());\n if (xAxis.type === 'category') {\n return categories.reduce((acc, category) => {\n const xValue = xValues.get(category);\n if (typeof xValue === 'number') {\n acc.push([category, xValue]);\n }\n return acc;\n }, []);\n }\n return sort(Array.from(xValues), ([_x, xValue]) => xValue);\n}\nexport const prepareAreaData = (args) => {\n const { series, xAxis, xScale, yAxis, yScale, boundsHeight: plotHeight } = args;\n const [_xMin, xRangeMax] = xScale.range();\n const xMax = xRangeMax / (1 - xAxis.maxPadding);\n return Array.from(group(series, (s) => s.stackId)).reduce((result, [_stackId, seriesStack]) => {\n const xValues = getXValues(seriesStack, xAxis, xScale);\n const accumulatedYValues = new Map();\n xValues.forEach(([key]) => {\n accumulatedYValues.set(key, 0);\n });\n const seriesStackData = seriesStack.reduce((acc, s) => {\n const yAxisIndex = s.yAxis;\n const seriesYAxis = yAxis[yAxisIndex];\n const seriesYScale = yScale[yAxisIndex];\n const yMin = getYValue({ point: { y: 0 }, yAxis: seriesYAxis, yScale: seriesYScale });\n const seriesData = s.data.reduce((m, d) => {\n const key = String(xAxis.type === 'category'\n ? getDataCategoryValue({\n axisDirection: 'x',\n categories: xAxis.categories || [],\n data: d,\n })\n : d.x);\n return m.set(key, d);\n }, new Map());\n const points = xValues.reduce((pointsAcc, [x, xValue]) => {\n const accumulatedYValue = accumulatedYValues.get(x) || 0;\n const d = seriesData.get(x) ||\n {\n x,\n // FIXME: think about how to break the series into separate areas(null Y values)\n y: 0,\n };\n const yValue = getYValue({ point: d, yAxis: seriesYAxis, yScale: seriesYScale }) -\n accumulatedYValue;\n accumulatedYValues.set(x, yMin - yValue);\n pointsAcc.push({\n y0: yMin - accumulatedYValue,\n x: xValue,\n y: yValue,\n data: d,\n series: s,\n });\n return pointsAcc;\n }, []);\n let labels = [];\n const htmlElements = [];\n if (s.dataLabels.enabled) {\n const labelItems = points.map((p) => getLabelData(p, s, xMax));\n if (s.dataLabels.html) {\n const htmlLabels = labelItems.map((l) => {\n var _a;\n const style = (_a = l.style) !== null && _a !== void 0 ? _a : s.dataLabels.style;\n const labelSize = getLabelsSize({ labels: [l.text], style, html: true });\n return {\n x: l.x - l.size.width / 2,\n y: l.y,\n content: l.text,\n size: { width: labelSize.maxWidth, height: labelSize.maxHeight },\n };\n });\n htmlElements.push(...htmlLabels);\n }\n else {\n labels = labelItems;\n }\n }\n let markers = [];\n if (s.marker.states.normal.enabled || s.marker.states.hover.enabled) {\n markers = points.map((p) => ({\n point: p,\n active: true,\n hovered: false,\n }));\n }\n acc.push({\n points,\n markers,\n labels,\n color: s.color,\n opacity: s.opacity,\n width: s.lineWidth,\n series: s,\n hovered: false,\n active: true,\n id: s.id,\n htmlElements,\n });\n return acc;\n }, []);\n if (series.some((s) => s.stacking === 'percent')) {\n xValues.forEach(([x], index) => {\n const stackHeight = accumulatedYValues.get(x) || 0;\n let acc = 0;\n const ratio = plotHeight / stackHeight;\n seriesStackData.forEach((item) => {\n const point = item.points[index];\n if (point) {\n const height = (point.y0 - point.y) * ratio;\n point.y0 = plotHeight - height - acc;\n point.y = point.y0 + height;\n acc += height;\n }\n });\n });\n }\n return result.concat(seriesStackData);\n }, []);\n};\n","import { stratify, treemap, treemapBinary, treemapDice, treemapSlice, treemapSliceDice, treemapSquarify, } from 'd3';\nimport { LayoutAlgorithm } from '../../../constants';\nimport { getLabelsSize } from '../../../utils';\nconst DEFAULT_PADDING = 1;\nfunction getLabels(args) {\n const { data, html, padding, align } = args;\n return data.reduce((acc, d) => {\n const texts = Array.isArray(d.data.name) ? d.data.name : [d.data.name];\n texts.forEach((text, index) => {\n var _a;\n const { maxHeight: lineHeight, maxWidth: labelWidth } = (_a = getLabelsSize({ labels: [text], html })) !== null && _a !== void 0 ? _a : {};\n const left = d.x0 + padding;\n const right = d.x1 - padding;\n const width = Math.max(0, right - left);\n let x = left;\n const y = index * lineHeight + d.y0 + padding;\n switch (align) {\n case 'left': {\n x = left;\n break;\n }\n case 'center': {\n x = Math.max(left, left + (width - labelWidth) / 2);\n break;\n }\n case 'right': {\n x = Math.max(left, right - labelWidth);\n break;\n }\n }\n const item = html\n ? {\n content: text,\n x,\n y,\n size: { width, height: lineHeight },\n }\n : {\n text,\n x,\n y,\n width,\n nodeData: d.data,\n };\n acc.push(item);\n });\n return acc;\n }, []);\n}\nexport function prepareTreemapData(args) {\n var _a;\n const { series, width, height } = args;\n const dataWithRootNode = getSeriesDataWithRootNode(series);\n const hierarchy = stratify()\n .id((d) => {\n if (d.id) {\n return d.id;\n }\n return Array.isArray(d.name) ? d.name.join() : d.name;\n })\n .parentId((d) => d.parentId)(dataWithRootNode)\n .sum((d) => d.value || 0);\n const treemapInstance = treemap();\n switch (series.layoutAlgorithm) {\n case LayoutAlgorithm.Binary: {\n treemapInstance.tile(treemapBinary);\n break;\n }\n case LayoutAlgorithm.Dice: {\n treemapInstance.tile(treemapDice);\n break;\n }\n case LayoutAlgorithm.Slice: {\n treemapInstance.tile(treemapSlice);\n break;\n }\n case LayoutAlgorithm.SliceDice: {\n treemapInstance.tile(treemapSliceDice);\n break;\n }\n case LayoutAlgorithm.Squarify: {\n treemapInstance.tile(treemapSquarify);\n break;\n }\n }\n const root = treemapInstance.size([width, height]).paddingInner((d) => {\n var _a, _b;\n const levelOptions = (_a = series.levels) === null || _a === void 0 ? void 0 : _a.find((l) => l.index === d.depth + 1);\n return (_b = levelOptions === null || levelOptions === void 0 ? void 0 : levelOptions.padding) !== null && _b !== void 0 ? _b : DEFAULT_PADDING;\n })(hierarchy);\n const leaves = root.leaves();\n let labelData = [];\n const htmlElements = [];\n if ((_a = series.dataLabels) === null || _a === void 0 ? void 0 : _a.enabled) {\n const { html, padding, align } = series.dataLabels;\n const labels = getLabels({ html, padding, align, data: leaves });\n if (html) {\n htmlElements.push(...labels);\n }\n else {\n labelData = labels;\n }\n }\n return { labelData, leaves, series, htmlElements };\n}\nfunction getSeriesDataWithRootNode(series) {\n return series.data.reduce((acc, d) => {\n const dataChunk = Object.assign({}, d);\n if (!dataChunk.parentId) {\n dataChunk.parentId = series.id;\n }\n acc.push(dataChunk);\n return acc;\n }, [{ name: series.name, id: series.id }]);\n}\n","import { sankey, sankeyLinkHorizontal } from 'd3-sankey';\nexport function prepareSankeyData(args) {\n const { series, width, height } = args;\n const htmlElements = [];\n const sankeyGenerator = sankey()\n .nodeId((d) => d.name)\n .nodeSort((d) => d.index)\n .nodeWidth(15)\n .nodePadding(10)\n .extent([\n [1, 5],\n [width - 1, height - 5],\n ]);\n const { nodes, links } = sankeyGenerator({\n nodes: series.data,\n links: series.data.reduce((acc, item) => {\n item.links.forEach((l) => {\n const target = series.data.find((d) => d.name === l.name);\n if (target) {\n acc.push({\n source: item,\n target,\n value: l.value,\n });\n }\n });\n return acc;\n }, []),\n });\n const sankeyNodes = nodes.map((node) => {\n var _a, _b, _c, _d, _e, _f;\n return {\n x0: (_a = node.x0) !== null && _a !== void 0 ? _a : 0,\n x1: (_b = node.x1) !== null && _b !== void 0 ? _b : 0,\n y0: (_c = node.y0) !== null && _c !== void 0 ? _c : 0,\n y1: (_d = node.y1) !== null && _d !== void 0 ? _d : 0,\n color: (_e = node.color) !== null && _e !== void 0 ? _e : '',\n data: series.data[(_f = node.index) !== null && _f !== void 0 ? _f : 0],\n };\n });\n const sankeyLinks = links.map((d) => {\n var _a, _b;\n return {\n opacity: 0.75,\n color: (_a = d.source.color) !== null && _a !== void 0 ? _a : '',\n path: sankeyLinkHorizontal()(d),\n strokeWidth: Math.max(1, (_b = d.width) !== null && _b !== void 0 ? _b : 0),\n source: d.source,\n target: d.target,\n value: d.value,\n };\n });\n const dataLabels = [];\n if (series.dataLabels.enabled) {\n const labels = nodes.map((d) => {\n var _a, _b, _c, _d;\n const x0 = (_a = d.x0) !== null && _a !== void 0 ? _a : 0;\n const x1 = (_b = d.x1) !== null && _b !== void 0 ? _b : 0;\n const y0 = (_c = d.y0) !== null && _c !== void 0 ? _c : 0;\n const y1 = (_d = d.y1) !== null && _d !== void 0 ? _d : 0;\n return {\n text: d.name,\n x: x0 < width / 2 ? x1 + 6 : x0 - 6,\n y: (y1 + y0) / 2,\n textAnchor: x0 < width / 2 ? 'start' : 'end',\n style: series.dataLabels.style,\n };\n });\n dataLabels.push(...labels);\n }\n return { series, nodes: sankeyNodes, links: sankeyLinks, htmlElements, labels: dataLabels };\n}\n","export default function min(values, valueof) {\n let min;\n if (valueof === undefined) {\n for (const value of values) {\n if (value != null\n && (min > value || (min === undefined && value >= value))) {\n min = value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null\n && (min > value || (min === undefined && value >= value))) {\n min = value;\n }\n }\n }\n return min;\n}\n","import get from 'lodash/get';\nimport { DEFAULT_AXIS_LABEL_FONT_SIZE, axisLabelsDefaults, xAxisTitleDefaults, } from '../../constants';\nimport { CHART_SERIES_WITH_VOLUME_ON_X_AXIS, calculateCos, formatAxisTickLabel, getClosestPointsRange, getHorisontalSvgTextHeight, getLabelsSize, getMaxTickCount, getTicksCount, getXAxisItems, hasOverlappingLabels, wrapText, } from '../../utils';\nimport { createXScale } from '../useAxisScales';\nfunction getLabelSettings({ axis, series, width, autoRotation = true, }) {\n const scale = createXScale(axis, series, width);\n const tickCount = getTicksCount({ axis, range: width });\n const ticks = getXAxisItems({\n scale: scale,\n count: tickCount,\n maxCount: getMaxTickCount({ width, axis }),\n });\n const step = getClosestPointsRange(axis, ticks);\n const labels = ticks.map((value) => {\n return formatAxisTickLabel({\n axis,\n value,\n step,\n });\n });\n const overlapping = hasOverlappingLabels({\n width,\n labels,\n padding: axis.labels.padding,\n style: axis.labels.style,\n });\n const defaultRotation = overlapping && autoRotation ? -45 : 0;\n const rotation = axis.labels.rotation || defaultRotation;\n const labelsHeight = rotation\n ? getLabelsSize({\n labels,\n style: axis.labels.style,\n rotation,\n }).maxHeight\n : axis.labels.lineHeight;\n const maxHeight = rotation ? calculateCos(rotation) * axis.labels.maxWidth : labelsHeight;\n return { height: Math.min(maxHeight, labelsHeight), rotation };\n}\nfunction getAxisMin(axis, series) {\n const min = axis === null || axis === void 0 ? void 0 : axis.min;\n if (typeof min === 'undefined' &&\n (series === null || series === void 0 ? void 0 : series.some((s) => CHART_SERIES_WITH_VOLUME_ON_X_AXIS.includes(s.type)))) {\n return series.reduce((minValue, s) => {\n // @ts-expect-error\n const minYValue = s.data.reduce((res, d) => Math.min(res, get(d, 'x', 0)), 0);\n return Math.min(minValue, minYValue);\n }, 0);\n }\n return min;\n}\nexport const getPreparedXAxis = ({ xAxis, series, width, }) => {\n var _a;\n const titleText = get(xAxis, 'title.text', '');\n const titleStyle = Object.assign(Object.assign({}, xAxisTitleDefaults.style), get(xAxis, 'title.style'));\n const titleMaxRowsCount = get(xAxis, 'title.maxRowCount', xAxisTitleDefaults.maxRowCount);\n const estimatedTitleRows = wrapText({\n text: titleText,\n style: titleStyle,\n width,\n }).slice(0, titleMaxRowsCount);\n const titleSize = getLabelsSize({\n labels: [titleText],\n style: titleStyle,\n });\n const labelsStyle = {\n fontSize: get(xAxis, 'labels.style.fontSize', DEFAULT_AXIS_LABEL_FONT_SIZE),\n };\n const preparedXAxis = {\n type: get(xAxis, 'type', 'linear'),\n labels: {\n enabled: get(xAxis, 'labels.enabled', true),\n margin: get(xAxis, 'labels.margin', axisLabelsDefaults.margin),\n padding: get(xAxis, 'labels.padding', axisLabelsDefaults.padding),\n dateFormat: get(xAxis, 'labels.dateFormat'),\n numberFormat: get(xAxis, 'labels.numberFormat'),\n rotation: get(xAxis, 'labels.rotation', 0),\n style: labelsStyle,\n width: 0,\n height: 0,\n lineHeight: getHorisontalSvgTextHeight({ text: 'Tmp', style: labelsStyle }),\n maxWidth: get(xAxis, 'labels.maxWidth', axisLabelsDefaults.maxWidth),\n },\n lineColor: get(xAxis, 'lineColor'),\n categories: get(xAxis, 'categories'),\n timestamps: get(xAxis, 'timestamps'),\n title: {\n text: titleText,\n style: titleStyle,\n margin: get(xAxis, 'title.margin', xAxisTitleDefaults.margin),\n height: titleSize.maxHeight * estimatedTitleRows.length,\n width: titleSize.maxWidth,\n align: get(xAxis, 'title.align', xAxisTitleDefaults.align),\n maxRowCount: get(xAxis, 'title.maxRowCount', xAxisTitleDefaults.maxRowCount),\n },\n min: getAxisMin(xAxis, series),\n maxPadding: get(xAxis, 'maxPadding', 0.01),\n grid: {\n enabled: get(xAxis, 'grid.enabled', true),\n },\n ticks: {\n pixelInterval: get(xAxis, 'ticks.pixelInterval'),\n },\n position: 'bottom',\n plotIndex: 0,\n plotLines: [],\n };\n const { height, rotation } = getLabelSettings({\n axis: preparedXAxis,\n series,\n width,\n autoRotation: (_a = xAxis === null || xAxis === void 0 ? void 0 : xAxis.labels) === null || _a === void 0 ? void 0 : _a.autoRotation,\n });\n preparedXAxis.labels.height = height;\n preparedXAxis.labels.rotation = rotation;\n return preparedXAxis;\n};\n","import get from 'lodash/get';\nimport { DEFAULT_AXIS_LABEL_FONT_SIZE, DEFAULT_AXIS_TYPE, DashStyle, axisLabelsDefaults, yAxisTitleDefaults, } from '../../constants';\nimport { CHART_SERIES_WITH_VOLUME_ON_Y_AXIS, formatAxisTickLabel, getClosestPointsRange, getHorisontalSvgTextHeight, getLabelsSize, getScaleTicks, getWaterfallPointSubtotal, wrapText, } from '../../utils';\nimport { createYScale } from '../useAxisScales';\nconst getAxisLabelMaxWidth = (args) => {\n const { axis, series } = args;\n if (!axis.labels.enabled) {\n return 0;\n }\n const scale = createYScale(axis, series, 1);\n const ticks = getScaleTicks(scale);\n // FIXME: it is necessary to filter data, since we do not draw overlapping ticks\n const step = getClosestPointsRange(axis, ticks);\n const labels = ticks.map((tick) => formatAxisTickLabel({\n axis,\n value: tick,\n step,\n }));\n return getLabelsSize({\n labels,\n style: axis.labels.style,\n rotation: axis.labels.rotation,\n }).maxWidth;\n};\nfunction getAxisMin(axis, series) {\n const min = axis === null || axis === void 0 ? void 0 : axis.min;\n if (typeof min === 'undefined' &&\n (series === null || series === void 0 ? void 0 : series.some((s) => CHART_SERIES_WITH_VOLUME_ON_Y_AXIS.includes(s.type)))) {\n return series.reduce((minValue, s) => {\n switch (s.type) {\n case 'waterfall': {\n const minSubTotal = s.data.reduce((res, d) => Math.min(res, getWaterfallPointSubtotal(d, s) || 0), 0);\n return Math.min(minValue, minSubTotal);\n }\n default: {\n // @ts-expect-error\n const minYValue = s.data.reduce((res, d) => Math.min(res, get(d, 'y', 0)), 0);\n return Math.min(minValue, minYValue);\n }\n }\n }, 0);\n }\n return min;\n}\nexport const getPreparedYAxis = ({ series, yAxis, height, }) => {\n const axisByPlot = [];\n const axisItems = yAxis || [{}];\n return axisItems.map((axisItem) => {\n const plotIndex = get(axisItem, 'plotIndex', 0);\n const firstPlotAxis = !axisByPlot[plotIndex];\n if (firstPlotAxis) {\n axisByPlot[plotIndex] = [];\n }\n axisByPlot[plotIndex].push(axisItem);\n const defaultAxisPosition = firstPlotAxis ? 'left' : 'right';\n const labelsEnabled = get(axisItem, 'labels.enabled', true);\n const labelsStyle = {\n fontSize: get(axisItem, 'labels.style.fontSize', DEFAULT_AXIS_LABEL_FONT_SIZE),\n };\n const titleText = get(axisItem, 'title.text', '');\n const titleStyle = Object.assign(Object.assign({}, yAxisTitleDefaults.style), get(axisItem, 'title.style'));\n const titleMaxRowsCount = get(axisItem, 'title.maxRowCount', yAxisTitleDefaults.maxRowCount);\n const estimatedTitleRows = wrapText({\n text: titleText,\n style: titleStyle,\n width: height,\n }).slice(0, titleMaxRowsCount);\n const titleSize = getLabelsSize({ labels: [titleText], style: titleStyle });\n const axisType = get(axisItem, 'type', DEFAULT_AXIS_TYPE);\n const preparedAxis = {\n type: axisType,\n labels: {\n enabled: labelsEnabled,\n margin: labelsEnabled\n ? get(axisItem, 'labels.margin', axisLabelsDefaults.margin)\n : 0,\n padding: labelsEnabled\n ? get(axisItem, 'labels.padding', axisLabelsDefaults.padding)\n : 0,\n dateFormat: get(axisItem, 'labels.dateFormat'),\n numberFormat: get(axisItem, 'labels.numberFormat'),\n style: labelsStyle,\n rotation: get(axisItem, 'labels.rotation', 0),\n width: 0,\n height: 0,\n lineHeight: getHorisontalSvgTextHeight({ text: 'TmpLabel', style: labelsStyle }),\n maxWidth: get(axisItem, 'labels.maxWidth', axisLabelsDefaults.maxWidth),\n },\n lineColor: get(axisItem, 'lineColor'),\n categories: get(axisItem, 'categories'),\n timestamps: get(axisItem, 'timestamps'),\n title: {\n text: titleText,\n margin: get(axisItem, 'title.margin', yAxisTitleDefaults.margin),\n style: titleStyle,\n width: titleSize.maxWidth,\n height: titleSize.maxHeight * estimatedTitleRows.length,\n align: get(axisItem, 'title.align', yAxisTitleDefaults.align),\n maxRowCount: titleMaxRowsCount,\n },\n min: getAxisMin(axisItem, series),\n maxPadding: get(axisItem, 'maxPadding', 0.05),\n grid: {\n enabled: get(axisItem, 'grid.enabled', firstPlotAxis),\n },\n ticks: {\n pixelInterval: get(axisItem, 'ticks.pixelInterval'),\n },\n position: get(axisItem, 'position', defaultAxisPosition),\n plotIndex: get(axisItem, 'plotIndex', 0),\n plotLines: get(axisItem, 'plotLines', []).map((d) => ({\n value: get(d, 'value', 0),\n color: get(d, 'color', 'var(--g-color-base-brand)'),\n width: get(d, 'width', 1),\n dashStyle: get(d, 'dashStyle', DashStyle.Solid),\n opacity: get(d, 'opacity', 1),\n layerPlacement: get(d, 'layerPlacement', 'before'),\n })),\n };\n if (labelsEnabled) {\n preparedAxis.labels.width = getAxisLabelMaxWidth({ axis: preparedAxis, series });\n }\n return preparedAxis;\n });\n};\n","import React from 'react';\nimport { useAxisScales, useChartDimensions, useChartOptions, usePrevious, useSeries, useShapes, useSplit, } from '../../hooks';\nimport { getYAxisWidth } from '../../hooks/useChartDimensions/utils';\nimport { getPreparedXAxis } from '../../hooks/useChartOptions/x-axis';\nimport { getPreparedYAxis } from '../../hooks/useChartOptions/y-axis';\nexport function useChartInnerProps(props) {\n const { width, height, data, dispatcher, htmlLayout } = props;\n const prevWidth = usePrevious(width);\n const prevHeight = usePrevious(height);\n const { chart, title, tooltip } = useChartOptions({ data });\n const xAxis = React.useMemo(() => getPreparedXAxis({ xAxis: data.xAxis, width, series: data.series.data }), [data, width]);\n const yAxis = React.useMemo(() => getPreparedYAxis({\n series: data.series.data,\n yAxis: data.yAxis,\n height,\n }), [data, height]);\n const { legendItems, legendConfig, preparedSeries, preparedSeriesOptions, preparedLegend, handleLegendItemClick, } = useSeries({\n chartWidth: width,\n chartHeight: height,\n chartMargin: chart.margin,\n series: data.series,\n legend: data.legend,\n preparedYAxis: yAxis,\n });\n const { boundsWidth, boundsHeight } = useChartDimensions({\n width,\n height,\n margin: chart.margin,\n preparedLegend,\n preparedXAxis: xAxis,\n preparedYAxis: yAxis,\n preparedSeries: preparedSeries,\n });\n const preparedSplit = useSplit({ split: data.split, boundsHeight, chartWidth: width });\n const { xScale, yScale } = useAxisScales({\n boundsWidth,\n boundsHeight,\n series: preparedSeries,\n xAxis,\n yAxis,\n split: preparedSplit,\n });\n const { shapes, shapesData } = useShapes({\n boundsWidth,\n boundsHeight,\n dispatcher,\n series: preparedSeries,\n seriesOptions: preparedSeriesOptions,\n xAxis,\n xScale,\n yAxis,\n yScale,\n split: preparedSplit,\n htmlLayout,\n });\n const boundsOffsetTop = chart.margin.top;\n // We only need to consider the width of the first left axis\n const boundsOffsetLeft = chart.margin.left + getYAxisWidth(yAxis[0]);\n return {\n boundsHeight,\n boundsOffsetLeft,\n boundsOffsetTop,\n boundsWidth,\n handleLegendItemClick,\n legendConfig,\n legendItems,\n preparedLegend,\n preparedSeries,\n preparedSplit,\n prevHeight,\n prevWidth,\n shapes,\n shapesData,\n title,\n tooltip,\n xAxis,\n xScale,\n yAxis,\n yScale,\n };\n}\n","import React from 'react';\nimport { getPreparedChart } from './chart';\nimport { getPreparedTitle } from './title';\nimport { getPreparedTooltip } from './tooltip';\nexport const useChartOptions = (args) => {\n const { data: { chart, title, tooltip }, } = args;\n const options = React.useMemo(() => {\n const preparedTitle = getPreparedTitle({ title });\n const preparedTooltip = getPreparedTooltip({ tooltip });\n const preparedChart = getPreparedChart({\n chart,\n preparedTitle,\n });\n return {\n chart: preparedChart,\n title: preparedTitle,\n tooltip: preparedTooltip,\n };\n }, [chart, title, tooltip]);\n return options;\n};\n","import get from 'lodash/get';\nimport { getHorisontalSvgTextHeight } from '../../utils';\nconst DEFAULT_TITLE_FONT_SIZE = '15px';\nconst TITLE_PADDINGS = 8 * 2;\nexport const getPreparedTitle = ({ title, }) => {\n const titleText = get(title, 'text');\n const titleStyle = {\n fontSize: get(title, 'style.fontSize', DEFAULT_TITLE_FONT_SIZE),\n fontWeight: get(title, 'style.fontWeight'),\n };\n const titleHeight = titleText\n ? getHorisontalSvgTextHeight({ text: titleText, style: titleStyle }) + TITLE_PADDINGS\n : 0;\n const preparedTitle = titleText\n ? { text: titleText, style: titleStyle, height: titleHeight }\n : undefined;\n return preparedTitle;\n};\n","import get from 'lodash/get';\nexport const getPreparedTooltip = (args) => {\n const { tooltip } = args;\n return Object.assign(Object.assign({}, tooltip), { enabled: get(tooltip, 'enabled', true) });\n};\n","import React from 'react';\nimport { isAxisRelatedSeries } from '../../utils';\nimport { getBoundsWidth } from './utils';\nexport { getBoundsWidth } from './utils';\nconst getBottomOffset = (args) => {\n const { hasAxisRelatedSeries, preparedLegend, preparedXAxis } = args;\n let result = 0;\n if (preparedLegend.enabled) {\n result += preparedLegend.height + preparedLegend.margin;\n }\n if (hasAxisRelatedSeries) {\n if (preparedXAxis.title.text) {\n result += preparedXAxis.title.height + preparedXAxis.title.margin;\n }\n if (preparedXAxis.labels.enabled) {\n result += preparedXAxis.labels.margin + preparedXAxis.labels.height;\n }\n }\n return result;\n};\nexport const useChartDimensions = (args) => {\n const { margin, width, height, preparedLegend, preparedXAxis, preparedYAxis, preparedSeries } = args;\n return React.useMemo(() => {\n const hasAxisRelatedSeries = preparedSeries.some(isAxisRelatedSeries);\n const boundsWidth = getBoundsWidth({ chartWidth: width, chartMargin: margin, preparedYAxis });\n const bottomOffset = getBottomOffset({\n hasAxisRelatedSeries,\n preparedLegend,\n preparedXAxis,\n });\n const boundsHeight = height - margin.top - margin.bottom - bottomOffset;\n return { boundsWidth, boundsHeight };\n }, [margin, width, height, preparedLegend, preparedXAxis, preparedYAxis, preparedSeries]);\n};\n","import get from 'lodash/get';\nimport { calculateNumericProperty, getHorisontalSvgTextHeight } from '../../utils';\nconst DEFAULT_TITLE_FONT_SIZE = '15px';\nconst TITLE_TOP_BOTTOM_PADDING = 8;\nfunction preparePlotTitle(args) {\n const { title, plotIndex, plotHeight, chartWidth, gap } = args;\n const titleText = (title === null || title === void 0 ? void 0 : title.text) || '';\n const titleStyle = {\n fontSize: get(title, 'style.fontSize', DEFAULT_TITLE_FONT_SIZE),\n fontWeight: get(title, 'style.fontWeight'),\n };\n const titleHeight = titleText\n ? getHorisontalSvgTextHeight({ text: titleText, style: titleStyle }) +\n TITLE_TOP_BOTTOM_PADDING * 2\n : 0;\n const top = plotIndex * (plotHeight + gap);\n return {\n text: titleText,\n x: chartWidth / 2,\n y: top + titleHeight / 2,\n style: titleStyle,\n height: titleHeight,\n };\n}\nexport function getPlotHeight(args) {\n const { split, boundsHeight, gap } = args;\n const plots = (split === null || split === void 0 ? void 0 : split.plots) || [];\n if (plots.length > 1) {\n return (boundsHeight - gap * (plots.length - 1)) / plots.length;\n }\n return boundsHeight;\n}\nexport const useSplit = (args) => {\n var _a;\n const { split, boundsHeight, chartWidth } = args;\n const splitGap = (_a = calculateNumericProperty({ value: split === null || split === void 0 ? void 0 : split.gap, base: boundsHeight })) !== null && _a !== void 0 ? _a : 0;\n const plotHeight = getPlotHeight({ split: split, boundsHeight, gap: splitGap });\n const plots = (split === null || split === void 0 ? void 0 : split.plots) || [];\n return {\n plots: plots.map((p, index) => {\n const title = preparePlotTitle({\n title: p.title,\n plotIndex: index,\n gap: splitGap,\n plotHeight,\n chartWidth,\n });\n const top = index * (plotHeight + splitGap);\n return {\n top: top + title.height,\n height: plotHeight - title.height,\n title,\n };\n }),\n gap: splitGap,\n };\n};\n","import React from 'react';\nimport { EventType, block, getD3Dispatcher } from '../../utils';\nimport { AxisX, AxisY } from '../Axis';\nimport { Legend } from '../Legend';\nimport { PlotTitle } from '../PlotTitle';\nimport { Title } from '../Title';\nimport { Tooltip } from '../Tooltip';\nimport { useChartInnerHandlers } from './useChartInnerHandlers';\nimport { useChartInnerProps } from './useChartInnerProps';\nimport { useChartInnerState } from './useChartInnerState';\nimport './styles.css';\nconst b = block('d3');\nexport const ChartInner = (props) => {\n var _a, _b, _c, _d;\n const { width, height, data } = props;\n const svgRef = React.useRef(null);\n const htmlLayerRef = React.useRef(null);\n const plotRef = React.useRef(null);\n const dispatcher = React.useMemo(() => getD3Dispatcher(), []);\n const { boundsHeight, boundsOffsetLeft, boundsOffsetTop, boundsWidth, handleLegendItemClick, legendConfig, legendItems, preparedSeries, preparedSplit, preparedLegend, prevHeight, prevWidth, shapes, shapesData, title, tooltip, xAxis, xScale, yAxis, yScale, } = useChartInnerProps(Object.assign(Object.assign({}, props), { dispatcher, htmlLayout: htmlLayerRef.current }));\n const { tooltipPinned, togglePinTooltip, unpinTooltip } = useChartInnerState({\n dispatcher,\n tooltip,\n });\n const { handleChartClick, handleMouseLeave, throttledHandleMouseMove, throttledHandleTouchMove } = useChartInnerHandlers({\n boundsHeight,\n boundsOffsetLeft,\n boundsOffsetTop,\n boundsWidth,\n dispatcher,\n shapesData,\n svgContainer: svgRef.current,\n togglePinTooltip,\n tooltipPinned,\n unpinTooltip,\n xAxis,\n yAxis,\n });\n const clickHandler = (_b = (_a = data.chart) === null || _a === void 0 ? void 0 : _a.events) === null || _b === void 0 ? void 0 : _b.click;\n const pointerMoveHandler = (_d = (_c = data.chart) === null || _c === void 0 ? void 0 : _c.events) === null || _d === void 0 ? void 0 : _d.pointermove;\n React.useEffect(() => {\n if (clickHandler) {\n dispatcher.on(EventType.CLICK_CHART, clickHandler);\n }\n if (pointerMoveHandler) {\n dispatcher.on(EventType.POINTERMOVE_CHART, (...args) => {\n const [handlerData, event] = args;\n pointerMoveHandler(handlerData, event);\n });\n }\n return () => {\n dispatcher.on(EventType.CLICK_CHART, null);\n dispatcher.on(EventType.POINTERMOVE_CHART, null);\n };\n }, [dispatcher, clickHandler, pointerMoveHandler]);\n React.useEffect(() => {\n if ((prevWidth !== width || prevHeight !== height) && tooltipPinned) {\n unpinTooltip === null || unpinTooltip === void 0 ? void 0 : unpinTooltip();\n }\n }, [prevWidth, width, prevHeight, height, tooltipPinned, unpinTooltip]);\n return (React.createElement(React.Fragment, null,\n React.createElement(\"svg\", { ref: svgRef, className: b(), width: width, height: height, onMouseMove: throttledHandleMouseMove, onMouseLeave: handleMouseLeave, onTouchStart: throttledHandleTouchMove, onTouchMove: throttledHandleTouchMove, onClick: handleChartClick },\n title && React.createElement(Title, Object.assign({}, title, { chartWidth: width })),\n React.createElement(\"g\", { transform: `translate(0, ${boundsOffsetTop})` }, preparedSplit.plots.map((plot, index) => {\n return React.createElement(PlotTitle, { key: `plot-${index}`, title: plot.title });\n })),\n React.createElement(\"g\", { width: boundsWidth, height: boundsHeight, transform: `translate(${[boundsOffsetLeft, boundsOffsetTop].join(',')})`, ref: plotRef },\n xScale && (yScale === null || yScale === void 0 ? void 0 : yScale.length) && (React.createElement(React.Fragment, null,\n React.createElement(AxisY, { axes: yAxis, width: boundsWidth, height: boundsHeight, scale: yScale, split: preparedSplit, plotRef: plotRef }),\n React.createElement(\"g\", { transform: `translate(0, ${boundsHeight})` },\n React.createElement(AxisX, { axis: xAxis, width: boundsWidth, height: boundsHeight, scale: xScale, split: preparedSplit })))),\n shapes),\n preparedLegend.enabled && (React.createElement(Legend, { chartSeries: preparedSeries, boundsWidth: boundsWidth, legend: preparedLegend, items: legendItems, config: legendConfig, onItemClick: handleLegendItemClick, onUpdate: unpinTooltip }))),\n React.createElement(\"div\", { className: b('html-layer'), ref: htmlLayerRef, style: {\n transform: `translate(${boundsOffsetLeft}px, ${boundsOffsetTop}px)`,\n } }),\n React.createElement(Tooltip, { dispatcher: dispatcher, tooltip: tooltip, svgContainer: svgRef.current, xAxis: xAxis, yAxis: yAxis[0], onOutsideClick: unpinTooltip, tooltipPinned: tooltipPinned })));\n};\n","import React from 'react';\nimport { EventType, isMacintosh } from '../../utils';\nexport function useChartInnerState(props) {\n var _a, _b;\n const { dispatcher, tooltip } = props;\n const [tooltipPinned, setTooltipPinned] = React.useState(false);\n const tooltipEnabled = tooltip === null || tooltip === void 0 ? void 0 : tooltip.enabled;\n const tooltipPinEnabled = (_a = tooltip === null || tooltip === void 0 ? void 0 : tooltip.pin) === null || _a === void 0 ? void 0 : _a.enabled;\n const modifierKey = (_b = tooltip === null || tooltip === void 0 ? void 0 : tooltip.pin) === null || _b === void 0 ? void 0 : _b.modifierKey;\n const togglePinTooltip = React.useCallback((value, event) => {\n let resultValue = value;\n if (value && modifierKey) {\n switch (modifierKey) {\n case 'altKey': {\n resultValue = event.altKey;\n break;\n }\n case 'metaKey': {\n resultValue = isMacintosh() ? event.metaKey : event.ctrlKey;\n }\n }\n }\n setTooltipPinned(resultValue);\n }, [modifierKey]);\n const unpinTooltip = React.useCallback(() => {\n setTooltipPinned(false);\n dispatcher.call(EventType.HOVER_SHAPE, {}, undefined);\n }, [dispatcher]);\n return {\n tooltipPinned,\n togglePinTooltip: tooltipEnabled && tooltipPinEnabled ? togglePinTooltip : undefined,\n unpinTooltip: tooltipEnabled && tooltipPinEnabled ? unpinTooltip : undefined,\n };\n}\n","import React from 'react';\nimport { pointer } from 'd3';\nimport throttle from 'lodash/throttle';\nimport { IS_TOUCH_ENABLED } from '../../constants';\nimport { EventType } from '../../utils';\nimport { getClosestPoints } from '../../utils/chart/get-closest-data';\nconst THROTTLE_DELAY = 50;\nexport function useChartInnerHandlers(props) {\n const { boundsHeight, boundsOffsetLeft, boundsOffsetTop, boundsWidth, dispatcher, shapesData, svgContainer, togglePinTooltip, tooltipPinned, unpinTooltip, xAxis, yAxis, } = props;\n const isOutsideBounds = React.useCallback((x, y) => {\n return x < 0 || x > boundsWidth || y < 0 || y > boundsHeight;\n }, [boundsHeight, boundsWidth]);\n const handleMove = ([pointerX, pointerY], event) => {\n if (tooltipPinned) {\n return;\n }\n const x = pointerX - boundsOffsetLeft;\n const y = pointerY - boundsOffsetTop;\n if (isOutsideBounds(x, y)) {\n dispatcher.call(EventType.HOVER_SHAPE, {}, undefined);\n dispatcher.call(EventType.POINTERMOVE_CHART, {}, undefined, event);\n return;\n }\n const closest = getClosestPoints({\n position: [x, y],\n shapesData,\n boundsHeight,\n boundsWidth,\n });\n dispatcher.call(EventType.HOVER_SHAPE, event.target, closest, [pointerX, pointerY]);\n dispatcher.call(EventType.POINTERMOVE_CHART, {}, {\n hovered: closest,\n xAxis,\n yAxis: yAxis[0],\n }, event);\n };\n const handleMouseMove = (event) => {\n const [pointerX, pointerY] = pointer(event, svgContainer);\n handleMove([pointerX, pointerY], event);\n };\n const throttledHandleMouseMove = IS_TOUCH_ENABLED\n ? undefined\n : throttle(handleMouseMove, THROTTLE_DELAY);\n const handleMouseLeave = (event) => {\n if (tooltipPinned) {\n return;\n }\n throttledHandleMouseMove === null || throttledHandleMouseMove === void 0 ? void 0 : throttledHandleMouseMove.cancel();\n dispatcher.call(EventType.HOVER_SHAPE, {}, undefined);\n dispatcher.call(EventType.POINTERMOVE_CHART, {}, undefined, event);\n };\n const handleTouchMove = (event) => {\n const touch = event.touches[0];\n const [pointerX, pointerY] = pointer(touch, svgContainer);\n handleMove([pointerX, pointerY], event);\n };\n const throttledHandleTouchMove = IS_TOUCH_ENABLED\n ? throttle(handleTouchMove, THROTTLE_DELAY)\n : undefined;\n const handleChartClick = (event) => {\n const [pointerX, pointerY] = pointer(event, svgContainer);\n const x = pointerX - boundsOffsetLeft;\n const y = pointerY - boundsOffsetTop;\n if (isOutsideBounds(x, y)) {\n return;\n }\n const items = getClosestPoints({\n position: [x, y],\n shapesData,\n boundsHeight,\n boundsWidth,\n });\n const selected = items === null || items === void 0 ? void 0 : items.find((item) => item.closest);\n if (!selected) {\n if (tooltipPinned) {\n unpinTooltip === null || unpinTooltip === void 0 ? void 0 : unpinTooltip();\n }\n return;\n }\n dispatcher.call(EventType.CLICK_CHART, undefined, { point: selected.data, series: selected.series }, event);\n const nextTooltipFixed = !tooltipPinned;\n if (!nextTooltipFixed) {\n dispatcher.call(EventType.HOVER_SHAPE, event.target, items, [pointerX, pointerY]);\n dispatcher.call(EventType.POINTERMOVE_CHART, {}, {\n hovered: items,\n xAxis,\n yAxis: yAxis[0],\n }, event);\n }\n togglePinTooltip === null || togglePinTooltip === void 0 ? void 0 : togglePinTooltip(nextTooltipFixed, event);\n };\n return {\n handleChartClick,\n handleMouseLeave,\n throttledHandleMouseMove,\n throttledHandleTouchMove,\n };\n}\n","import React from 'react';\nimport { select } from 'd3';\nimport debounce from 'lodash/debounce';\nimport { i18nFactory } from '../i18n';\nimport { getUniqId } from '../utils';\nimport { validateData } from '../validation';\nimport { ChartInner } from './ChartInner';\nexport * from './Tooltip/ChartTooltipContent';\nexport const Chart = React.forwardRef(function Chart(props, forwardedRef) {\n const { data, lang, onResize } = props;\n const validatedData = React.useRef();\n const ref = React.useRef(null);\n const debounced = React.useRef();\n const [dimensions, setDimensions] = React.useState();\n if (validatedData.current !== data) {\n validateData(data);\n validatedData.current = data;\n }\n const handleResize = React.useCallback(() => {\n var _a;\n const parentElement = (_a = ref.current) === null || _a === void 0 ? void 0 : _a.parentElement;\n if (parentElement) {\n const { width, height } = parentElement.getBoundingClientRect();\n setDimensions({ width, height });\n }\n }, []);\n const debuncedHandleResize = React.useMemo(() => {\n var _a;\n (_a = debounced.current) === null || _a === void 0 ? void 0 : _a.cancel();\n debounced.current = debounce(handleResize, 200);\n return debounced.current;\n }, [handleResize]);\n React.useImperativeHandle(forwardedRef, () => ({\n reflow() {\n debuncedHandleResize();\n },\n }), [debuncedHandleResize]);\n React.useEffect(() => {\n // dimensions initialize\n debuncedHandleResize();\n }, [debuncedHandleResize]);\n React.useEffect(() => {\n const selection = select(window);\n // https://github.com/d3/d3-selection/blob/main/README.md#handling-events\n const eventName = `resize.${getUniqId()}`;\n selection.on(eventName, debuncedHandleResize);\n return () => {\n // https://d3js.org/d3-selection/events#selection_on\n selection.on(eventName, null);\n };\n }, [debuncedHandleResize]);\n React.useEffect(() => {\n if (typeof onResize === 'function') {\n onResize({ dimensions });\n }\n }, [dimensions, onResize]);\n React.useEffect(() => {\n if (lang && i18nFactory.lang !== lang) {\n i18nFactory.setLang(lang);\n }\n }, [lang]);\n return (React.createElement(\"div\", { ref: ref, style: {\n width: (dimensions === null || dimensions === void 0 ? void 0 : dimensions.width) || '100%',\n height: (dimensions === null || dimensions === void 0 ? void 0 : dimensions.height) || '100%',\n position: 'relative',\n } }, (dimensions === null || dimensions === void 0 ? void 0 : dimensions.height) && (dimensions === null || dimensions === void 0 ? void 0 : dimensions.width) && (React.createElement(ChartInner, { height: dimensions === null || dimensions === void 0 ? void 0 : dimensions.height, width: dimensions === null || dimensions === void 0 ? void 0 : dimensions.width, data: data }))));\n});\n","/**\r\n * Queue of functions to invoke\r\n * @type {Array<(time: number) => void>}\r\n */\r\nlet callbacks = [];\r\n\r\nlet channel = new MessageChannel();\r\n\r\nlet postMessage = (function() {\r\n this.postMessage(undefined);\r\n}).bind(channel.port2);\r\n\r\n// Flush the callback queue when a message is posted to the message channel\r\nchannel.port1.onmessage = () => {\r\n // Reset the callback queue to an empty list in case callbacks call\r\n // afterFrame. These nested calls to afterFrame should queue up a new\r\n // callback to be flushed in the following frame and should not impact the\r\n // current queue being flushed\r\n let toFlush = callbacks;\r\n callbacks = [];\r\n let time = performance.now();\r\n for (let i = 0; i < toFlush.length; i++) {\r\n // Call all callbacks with the time the flush began, similar to requestAnimationFrame\r\n // TODO: Error handling?\r\n toFlush[i](time);\r\n }\r\n};\r\n\r\n// If the onmessage handler closes over the MessageChannel, the MessageChannel never gets GC'd:\r\nchannel = null;\r\n\r\n/**\r\n * Invoke the given callback after the browser renders the next frame\r\n * @param {(time: number) => void} callback The function to call after the browser renders\r\n * the next frame. The callback function is passed one argument, a DOMHighResTimeStamp\r\n * similar to the one returned by performance.now(), indicating the point in time when\r\n * afterFrame() starts to execute callback functions.\r\n */\r\nexport default function afterFrame(callback) {\r\n if (callbacks.push(callback) === 1) {\r\n requestAnimationFrame(postMessage);\r\n }\r\n}\r\n","export const markChartPerformance = (name) => {\n window.performance.mark(`${name}-mark`);\n};\nexport const getChartPerformanceDuration = (name) => {\n const measureName = `${name}-measure`;\n window.performance.measure(measureName, `${name}-mark`);\n const entry = window.performance.getEntriesByName(measureName)[0];\n if (entry) {\n return entry.duration;\n }\n return undefined;\n};\nexport function measurePerformance() {\n const timestamp = performance.now();\n return {\n end() {\n return performance.now() - timestamp;\n },\n };\n}\n","export const SplitLayout = {\n HORIZONTAL: 'horizontal',\n VERTICAL: 'vertical',\n};\n","// Copyright 2015 tomkp\n// Copyright 2022 YANDEX LLC\nimport React from 'react';\nexport class Pane extends React.PureComponent {\n render() {\n const { children, className, split, style: styleProps, size, eleRef } = this.props;\n const classes = ['Pane', split, className];\n let style = {\n flex: 1,\n position: 'relative',\n outline: 'none',\n };\n if (size !== undefined) {\n if (split === 'vertical') {\n style.width = size;\n }\n else {\n style.height = size;\n style.display = 'flex';\n }\n style.flex = 'none';\n }\n style = Object.assign({}, style, styleProps || {});\n return (React.createElement(\"div\", { ref: eleRef, className: classes.join(' '), style: style }, children));\n }\n}\n","// Copyright 2015 tomkp\n// Copyright 2022 YANDEX LLC\nimport React from 'react';\nexport const RESIZER_DEFAULT_CLASSNAME = 'Resizer';\nexport class Resizer extends React.Component {\n render() {\n const { className, onClick, onDoubleClick, onMouseDown, onTouchEnd, onTouchStart, resizerClassName = RESIZER_DEFAULT_CLASSNAME, split, style, } = this.props;\n const classes = [resizerClassName, split, className];\n return (React.createElement(\"span\", { role: \"presentation\", className: classes.join(' '), style: style, onMouseDown: (event) => onMouseDown(event), onTouchStart: (event) => {\n onTouchStart(event);\n }, onTouchEnd: (event) => {\n event.preventDefault();\n onTouchEnd(event);\n }, onClick: (event) => {\n if (onClick) {\n event.preventDefault();\n onClick(event);\n }\n }, onDoubleClick: (event) => {\n if (onDoubleClick) {\n event.preventDefault();\n onDoubleClick(event);\n }\n } }));\n }\n}\n","// Copyright 2015 tomkp\n// Copyright 2022 YANDEX LLC\n/* eslint-disable radix */\n/* eslint-disable complexity */\nimport React from 'react';\nimport { Pane } from './Pane';\nimport { RESIZER_DEFAULT_CLASSNAME, Resizer } from './Resizer';\nfunction unFocus() {\n var _a;\n (_a = window.getSelection()) === null || _a === void 0 ? void 0 : _a.removeAllRanges();\n}\nfunction getDefaultSize(defaultSize, minSize, maxSize, draggedSize) {\n if (typeof draggedSize === 'number') {\n const min = typeof minSize === 'number' ? minSize : 0;\n const max = typeof maxSize === 'number' && maxSize >= 0 ? maxSize : Infinity;\n return Math.max(min, Math.min(max, draggedSize));\n }\n if (defaultSize !== undefined) {\n return defaultSize;\n }\n return minSize;\n}\nfunction removeNullChildren(children) {\n return React.Children.toArray(children).filter((c) => c);\n}\n// TODO: https://github.com/gravity-ui/charts/issues/14\nexport class SplitPane extends React.Component {\n static getDerivedStateFromProps(nextProps, prevState) {\n return SplitPane.getSizeUpdate(nextProps, prevState);\n }\n // we have to check values since gDSFP is called on every render and more in StrictMode\n static getSizeUpdate(props, state) {\n const newState = {};\n const { instanceProps } = state;\n if (instanceProps.size === props.size && props.size !== undefined) {\n return {};\n }\n const newSize = props.size === undefined\n ? getDefaultSize(props.defaultSize, props.minSize, props.maxSize, state.draggedSize)\n : props.size;\n if (props.size !== undefined) {\n newState.draggedSize = newSize;\n }\n const isPanel1Primary = props.primary === 'first';\n newState[isPanel1Primary ? 'pane1Size' : 'pane2Size'] = newSize;\n newState[isPanel1Primary ? 'pane2Size' : 'pane1Size'] = undefined;\n newState.instanceProps = { size: props.size };\n return newState;\n }\n constructor(props) {\n super(props);\n this.splitPane = null;\n this.pane1 = null;\n this.pane2 = null;\n this.onMouseDown = (event) => {\n const eventWithTouches = Object.assign({}, event, {\n touches: [{ clientX: event.clientX, clientY: event.clientY }],\n });\n this.onTouchStart(eventWithTouches);\n };\n this.onTouchStart = (event) => {\n const { allowResize, onDragStarted, split } = this.props;\n if (allowResize) {\n unFocus();\n const position = split === 'vertical' ? event.touches[0].clientX : event.touches[0].clientY;\n if (typeof onDragStarted === 'function') {\n onDragStarted();\n }\n this.setState({\n active: true,\n position,\n });\n }\n };\n this.onMouseMove = (event) => {\n const eventWithTouches = Object.assign({}, event, {\n touches: [{ clientX: event.clientX, clientY: event.clientY }],\n });\n this.onTouchMove(eventWithTouches);\n };\n this.onTouchMove = (event) => {\n const { allowResize, maxSize, minSize, onChange, split, step } = this.props;\n const { active, position } = this.state;\n if (allowResize && active) {\n unFocus();\n const isPrimaryFirst = this.props.primary === 'first';\n const ref = isPrimaryFirst ? this.pane1 : this.pane2;\n const ref2 = isPrimaryFirst ? this.pane2 : this.pane1;\n if (ref) {\n const node = ref;\n const node2 = ref2;\n if (node.getBoundingClientRect) {\n const width = node.getBoundingClientRect().width;\n const height = node.getBoundingClientRect().height;\n const current = split === 'vertical' ? event.touches[0].clientX : event.touches[0].clientY;\n const size = split === 'vertical' ? width : height;\n let positionDelta = position - current;\n if (step) {\n if (Math.abs(positionDelta) < step) {\n return;\n }\n // Integer division\n // eslint-disable-next-line no-bitwise\n positionDelta = ~~(positionDelta / step) * step;\n }\n let sizeDelta = isPrimaryFirst ? positionDelta : -positionDelta;\n const pane1Order = parseInt(window.getComputedStyle(node).order);\n const pane2Order = parseInt(window.getComputedStyle(node2).order);\n if (pane1Order > pane2Order) {\n sizeDelta = -sizeDelta;\n }\n let newMaxSize = maxSize;\n if (maxSize !== undefined && maxSize <= 0) {\n const splitPane = this.splitPane;\n if (split === 'vertical') {\n newMaxSize = splitPane.getBoundingClientRect().width + maxSize;\n }\n else {\n newMaxSize = splitPane.getBoundingClientRect().height + maxSize;\n }\n }\n let newSize = size - sizeDelta;\n const newPosition = position - positionDelta;\n if (newSize < minSize) {\n newSize = minSize;\n }\n else if (maxSize !== undefined && newSize > newMaxSize) {\n newSize = newMaxSize;\n }\n else {\n this.setState({\n position: newPosition,\n resized: true,\n });\n }\n if (onChange)\n onChange(newSize);\n this.setState({\n draggedSize: newSize,\n [isPrimaryFirst ? 'pane1Size' : 'pane2Size']: newSize,\n });\n }\n }\n }\n };\n this.onMouseUp = () => {\n const { allowResize, onDragFinished } = this.props;\n const { active, draggedSize } = this.state;\n if (allowResize && active) {\n if (typeof onDragFinished === 'function') {\n onDragFinished(draggedSize);\n }\n this.setState({ active: false });\n }\n };\n // order of setting panel sizes.\n // 1. size\n // 2. getDefaultSize(defaultSize, minsize, maxSize)\n const { size, defaultSize, minSize, maxSize, primary } = props;\n const initialSize = size === undefined ? getDefaultSize(defaultSize, minSize, maxSize) : size;\n this.state = {\n active: false,\n resized: false,\n position: 0,\n draggedSize: 0,\n pane1Size: primary === 'first' ? initialSize : undefined,\n pane2Size: primary === 'second' ? initialSize : undefined,\n // these are props that are needed in static functions. ie: gDSFP\n instanceProps: {\n size,\n },\n };\n }\n componentDidMount() {\n document.addEventListener('mouseup', this.onMouseUp);\n document.addEventListener('mousemove', this.onMouseMove);\n document.addEventListener('touchmove', this.onTouchMove);\n this.setState(SplitPane.getSizeUpdate(this.props, this.state));\n }\n componentWillUnmount() {\n document.removeEventListener('mouseup', this.onMouseUp);\n document.removeEventListener('mousemove', this.onMouseMove);\n document.removeEventListener('touchmove', this.onTouchMove);\n }\n render() {\n const { allowResize, children, className, onResizerClick, onResizerDoubleClick, paneClassName, pane1ClassName, pane2ClassName, paneStyle, pane1Style: pane1StyleProps, pane2Style: pane2StyleProps, resizerClassName, resizerStyle, split, style: styleProps, } = this.props;\n const { pane1Size, pane2Size } = this.state;\n const disabledClass = allowResize ? '' : 'disabled';\n const resizerClassNamesIncludingDefault = resizerClassName\n ? `${resizerClassName} ${RESIZER_DEFAULT_CLASSNAME}`\n : resizerClassName;\n const notNullChildren = removeNullChildren(children);\n const style = Object.assign({ display: 'flex', flex: 1, height: '100%', position: 'absolute', outline: 'none', overflow: 'hidden', MozUserSelect: 'text', WebkitUserSelect: 'text', msUserSelect: 'text', userSelect: 'text' }, styleProps);\n if (split === 'vertical') {\n Object.assign(style, {\n flexDirection: 'row',\n left: 0,\n right: 0,\n });\n }\n else {\n Object.assign(style, {\n bottom: 0,\n flexDirection: 'column',\n minHeight: '100%',\n top: 0,\n width: '100%',\n });\n }\n const classes = ['SplitPane', className, split, disabledClass];\n const pane1Style = Object.assign(Object.assign({}, paneStyle), pane1StyleProps);\n const pane2Style = Object.assign(Object.assign({}, paneStyle), pane2StyleProps);\n const pane1Classes = ['Pane1', paneClassName, pane1ClassName].join(' ');\n const pane2Classes = ['Pane2', paneClassName, pane2ClassName].join(' ');\n return (React.createElement(\"div\", { className: classes.join(' '), ref: (node) => {\n this.splitPane = node;\n }, style: style },\n React.createElement(Pane, { className: pane1Classes, key: \"pane1\", eleRef: (node) => {\n this.pane1 = node;\n }, size: pane1Size, split: split, style: pane1Style }, notNullChildren[0]),\n React.createElement(Resizer, { className: disabledClass, onClick: onResizerClick, onDoubleClick: onResizerDoubleClick, onMouseDown: this.onMouseDown, onTouchStart: this.onTouchStart, onTouchEnd: this.onMouseUp, key: \"resizer\", resizerClassName: resizerClassNamesIncludingDefault, split: split, style: resizerStyle || {} }),\n React.createElement(Pane, { className: pane2Classes, key: \"pane2\", eleRef: (node) => {\n this.pane2 = node;\n }, size: pane2Size, split: split, style: pane2Style }, notNullChildren[1])));\n }\n}\nSplitPane.defaultProps = {\n allowResize: true,\n minSize: 50,\n primary: 'first',\n split: 'vertical',\n paneClassName: '',\n pane1ClassName: '',\n pane2ClassName: '',\n};\n","import { __rest } from \"tslib\";\nimport React from 'react';\nimport { cn } from '../../utils/cn';\nimport { Pane } from './Pane';\nimport { SplitPane } from './SplitPane';\nimport './StyledSplitPane.css';\nconst b = cn('styled-split-pane');\nconst resizerClassName = b('pane-resizer');\nexport const StyledSplitPane = (_a) => {\n var { paneOneRender, paneTwoRender } = _a, splitPaneProps = __rest(_a, [\"paneOneRender\", \"paneTwoRender\"]);\n const splitPaneRef = React.useRef(null);\n React.useEffect(() => {\n var _a, _b;\n const resizer = (_b = (_a = splitPaneRef.current) === null || _a === void 0 ? void 0 : _a.splitPane) === null || _b === void 0 ? void 0 : _b.getElementsByClassName(resizerClassName)[0];\n const hoveredClassName = `${resizerClassName}_hovered`;\n const onTouchStart = () => {\n resizer === null || resizer === void 0 ? void 0 : resizer.classList.add(hoveredClassName);\n };\n const onTouchEnd = () => {\n resizer === null || resizer === void 0 ? void 0 : resizer.classList.remove(hoveredClassName);\n };\n resizer === null || resizer === void 0 ? void 0 : resizer.addEventListener('touchstart', onTouchStart);\n resizer === null || resizer === void 0 ? void 0 : resizer.addEventListener('touchend', onTouchEnd);\n return function cleanup() {\n resizer === null || resizer === void 0 ? void 0 : resizer.removeEventListener('touchstart', onTouchStart);\n resizer === null || resizer === void 0 ? void 0 : resizer.removeEventListener('touchend', onTouchEnd);\n };\n }, []);\n return (React.createElement(SplitPane, Object.assign({}, splitPaneProps, { ref: splitPaneRef, className: b(), resizerClassName: resizerClassName }),\n React.createElement(Pane, null, paneOneRender()),\n React.createElement(Pane, null, paneTwoRender())));\n};\n","function checkWindowAvailability() {\n return typeof window === 'object';\n}\nexport const IS_WINDOW_AVAILABLE = checkWindowAvailability();\nfunction checkScreenOrientationAvailability() {\n // W3C spec implementation\n return (IS_WINDOW_AVAILABLE &&\n typeof window.ScreenOrientation === 'function' &&\n typeof screen.orientation.addEventListener === 'function' &&\n typeof screen.orientation.type === 'string');\n}\nexport const IS_SCREEN_ORIENTATION_AVAILABLE = checkScreenOrientationAvailability();\nexport const ScreenOrientation = {\n PORTRAIT_PRIMARY: 'portrait-primary',\n PORTRAIT_SECONDARY: 'portrait-secondary',\n LANDSCAPE_PRIMARY: 'landscape-primary',\n LANDSCAPE_SECONDARY: 'landscape-secondary',\n};\nexport const AVAILABLE_SCREEN_ORIENTATIONS = Object.values(ScreenOrientation);\n","import React from 'react';\nexport function usePrevious(value) {\n const ref = React.useRef();\n React.useEffect(() => {\n ref.current = value;\n }, [value]);\n return ref.current;\n}\n","import React from 'react';\nimport { ChartTooltipContent } from '@gravity-ui/charts';\nexport const TooltipContent = React.forwardRef(function TooltipContent(props, forwardedRef) {\n const { renderer } = props;\n const [tooltipProps, setTooltipProps] = React.useState();\n React.useImperativeHandle(forwardedRef, () => ({\n redraw(updates) {\n setTooltipProps(updates);\n },\n }), []);\n return React.createElement(ChartTooltipContent, Object.assign({}, tooltipProps, { renderer: renderer }));\n});\n","import React from 'react';\nimport { SplitLayout } from '../../../../components/SplitPane';\nimport { IS_WINDOW_AVAILABLE } from '../../../../constants';\nconst CHART_SECTION_PERCENTAGE = 0.6;\nexport const RESIZER_HEIGHT = 24;\nfunction getInitialSplit() {\n if (!IS_WINDOW_AVAILABLE) {\n return SplitLayout.HORIZONTAL;\n }\n return window.innerWidth > window.innerHeight ? SplitLayout.VERTICAL : SplitLayout.HORIZONTAL;\n}\nexport function getVerticalSize() {\n return window.innerWidth * CHART_SECTION_PERCENTAGE;\n}\nfunction getInitialSize(split) {\n const defaultSize = `calc(100% - ${RESIZER_HEIGHT}px)`;\n if (!IS_WINDOW_AVAILABLE) {\n return defaultSize;\n }\n return split === SplitLayout.VERTICAL ? getVerticalSize() : defaultSize;\n}\nexport function useWithSplitPaneState(props) {\n const { container } = props;\n const [tooltipHeight, setTooltipHeight] = React.useState(0);\n const [split, setSplit] = React.useState(getInitialSplit());\n const [size, setSize] = React.useState(getInitialSize(split));\n const allowResize = split === SplitLayout.HORIZONTAL;\n let maxSize;\n let minSize;\n if (IS_WINDOW_AVAILABLE && container && split === SplitLayout.HORIZONTAL) {\n const containerHeight = container.getBoundingClientRect().height;\n maxSize = containerHeight - RESIZER_HEIGHT - tooltipHeight;\n minSize = containerHeight / 3;\n }\n return {\n allowResize,\n maxSize,\n minSize,\n tooltipHeight,\n setTooltipHeight,\n split,\n setSplit,\n size,\n setSize,\n };\n}\n","import { __rest } from \"tslib\";\nimport React from 'react';\nimport { getComponentName, useResizeObserver } from '@gravity-ui/uikit';\nimport { SplitLayout, StyledSplitPane, mapScreenOrientationTypeToSplitLayout, } from '../../../../components/SplitPane';\nimport { IS_SCREEN_ORIENTATION_AVAILABLE, IS_WINDOW_AVAILABLE } from '../../../../constants';\nimport { usePrevious } from '../../../../hooks';\nimport { isScreenOrientationEventType } from '../../../../utils';\nimport { TooltipContent } from './TooltipContent';\nimport { RESIZER_HEIGHT, getVerticalSize, useWithSplitPaneState } from './useWithSplitPaneState';\nconst tooltipPaneStyles = { overflow: 'auto' };\nexport function withSplitPane(ChartComponent) {\n const componentName = getComponentName(ChartComponent);\n const component = React.forwardRef(function WithSplitPaneComponent(props, _ref) {\n var _a;\n const { data } = props, restProps = __rest(props, [\"data\"]);\n const containerRef = React.useRef(null);\n const tooltipContainerRef = React.useRef(null);\n const chartRef = React.useRef(null);\n const tooltipRef = React.useRef(null);\n const { allowResize, minSize, maxSize, tooltipHeight, split, size, setTooltipHeight, setSplit, setSize, } = useWithSplitPaneState({\n container: containerRef.current,\n });\n const prevTooltipHeight = usePrevious(tooltipHeight);\n const prevSplit = usePrevious(split);\n if (prevSplit && split !== prevSplit && split === SplitLayout.VERTICAL) {\n setSize(getVerticalSize());\n }\n else if (split === SplitLayout.HORIZONTAL &&\n containerRef.current &&\n prevTooltipHeight === 0 &&\n tooltipHeight !== prevTooltipHeight) {\n const containerHeight = containerRef.current.getBoundingClientRect().height;\n if (containerHeight - RESIZER_HEIGHT === size) {\n setSize(containerHeight - RESIZER_HEIGHT - tooltipHeight);\n (_a = chartRef.current) === null || _a === void 0 ? void 0 : _a.reflow();\n }\n }\n const handleTooltipContentResize = React.useCallback(() => {\n if (!tooltipContainerRef.current) {\n return;\n }\n const nextTooltipHeight = tooltipContainerRef.current.getBoundingClientRect().height;\n setTooltipHeight(nextTooltipHeight);\n }, [setTooltipHeight]);\n useResizeObserver({\n ref: tooltipContainerRef,\n onResize: handleTooltipContentResize,\n });\n const resultData = React.useMemo(() => {\n var _a, _b, _c;\n const userPointerMoveHandler = (_b = (_a = data.chart) === null || _a === void 0 ? void 0 : _a.events) === null || _b === void 0 ? void 0 : _b.pointermove;\n const pointerMoveHandler = (pointerMoveData, event) => {\n var _a;\n (_a = tooltipRef.current) === null || _a === void 0 ? void 0 : _a.redraw(pointerMoveData);\n userPointerMoveHandler === null || userPointerMoveHandler === void 0 ? void 0 : userPointerMoveHandler(pointerMoveData, event);\n };\n return Object.assign(Object.assign({}, data), { chart: Object.assign(Object.assign({}, data.chart), { events: Object.assign(Object.assign({}, (_c = data.chart) === null || _c === void 0 ? void 0 : _c.events), { pointermove: pointerMoveHandler }) }), tooltip: Object.assign(Object.assign({}, data.tooltip), { enabled: false }) });\n }, [data]);\n const handleOrientationChange = React.useCallback(() => {\n const deviceWidth = window.innerWidth;\n const deviceHeight = window.innerHeight;\n const nextSplit = deviceWidth > deviceHeight ? SplitLayout.VERTICAL : SplitLayout.HORIZONTAL;\n setSplit(nextSplit);\n }, [setSplit]);\n const handleScreenOrientationChange = React.useCallback((e) => {\n const type = e.target && 'type' in e.target && e.target.type;\n if (!isScreenOrientationEventType(type)) {\n return;\n }\n setSplit(mapScreenOrientationTypeToSplitLayout(type));\n }, [setSplit]);\n const handleSizeChange = React.useCallback((nextSize) => {\n var _a;\n (_a = chartRef.current) === null || _a === void 0 ? void 0 : _a.reflow();\n if (split === SplitLayout.HORIZONTAL) {\n setSize(nextSize);\n }\n }, [split, setSize]);\n React.useLayoutEffect(() => {\n if (IS_SCREEN_ORIENTATION_AVAILABLE) {\n screen.orientation.addEventListener('change', handleScreenOrientationChange);\n }\n else if (IS_WINDOW_AVAILABLE) {\n window.addEventListener('orientationchange', handleOrientationChange);\n }\n return () => {\n if (IS_SCREEN_ORIENTATION_AVAILABLE) {\n screen.orientation.removeEventListener('change', handleScreenOrientationChange);\n }\n else if (IS_WINDOW_AVAILABLE) {\n window.removeEventListener('orientationchange', handleOrientationChange);\n }\n };\n }, [handleOrientationChange, handleScreenOrientationChange]);\n return (React.createElement(\"div\", { ref: containerRef, style: { position: 'relative', height: '100%' } },\n React.createElement(StyledSplitPane, { allowResize: allowResize, maxSize: maxSize, minSize: minSize, size: size, split: split, onChange: handleSizeChange, paneOneRender: () => (React.createElement(ChartComponent, Object.assign({}, restProps, { ref: chartRef, data: resultData }))), paneTwoRender: () => (React.createElement(\"div\", { ref: tooltipContainerRef },\n React.createElement(TooltipContent, { ref: tooltipRef, renderer: resultData.tooltip.renderer }))), pane2Style: tooltipPaneStyles })));\n });\n component.displayName = `withSplitPane(${componentName})`;\n return component;\n}\n","import React from 'react';\nimport { Chart } from '@gravity-ui/charts';\nimport afterFrame from 'afterframe';\nimport { settings } from '../../../libs';\nimport { measurePerformance } from '../../../utils';\nimport { withSplitPane } from './withSplitPane/withSplitPane';\nconst ChartWithSplitPane = withSplitPane(Chart);\nconst D3Widget = React.forwardRef(function D3Widget(props, forwardedRef) {\n const { data, tooltip, onLoad, onRender, onChartLoad } = props;\n const lang = settings.get('lang');\n const performanceMeasure = React.useRef(measurePerformance());\n const chartRef = React.useRef(null);\n const ChartComponent = (tooltip === null || tooltip === void 0 ? void 0 : tooltip.splitted) ? ChartWithSplitPane : Chart;\n const handleResize = React.useCallback(({ dimensions }) => {\n if (!dimensions) {\n return;\n }\n if (!performanceMeasure.current) {\n performanceMeasure.current = measurePerformance();\n }\n afterFrame(() => {\n var _a;\n const renderTime = (_a = performanceMeasure.current) === null || _a === void 0 ? void 0 : _a.end();\n onRender === null || onRender === void 0 ? void 0 : onRender({\n renderTime,\n });\n onLoad === null || onLoad === void 0 ? void 0 : onLoad({\n widgetRendering: renderTime,\n });\n performanceMeasure.current = null;\n });\n }, [onRender, onLoad]);\n React.useImperativeHandle(forwardedRef, () => ({\n reflow() {\n var _a;\n (_a = chartRef.current) === null || _a === void 0 ? void 0 : _a.reflow();\n },\n }), []);\n React.useLayoutEffect(() => {\n if (onChartLoad) {\n onChartLoad({});\n }\n }, [onChartLoad]);\n return React.createElement(ChartComponent, { ref: chartRef, data: data, lang: lang, onResize: handleResize });\n});\nexport default D3Widget;\n","import { AVAILABLE_SCREEN_ORIENTATIONS } from '../constants';\nexport function isScreenOrientationEventType(value) {\n if (typeof value !== 'string') {\n return false;\n }\n return AVAILABLE_SCREEN_ORIENTATIONS.includes(value);\n}\n","export { SplitLayout } from './constants';\nexport * from './Pane';\nexport * from './SplitPane';\nexport * from './StyledSplitPane';\nexport * from './types';\nexport function mapScreenOrientationTypeToSplitLayout(type) {\n switch (type) {\n case 'landscape-primary':\n case 'landscape-secondary': {\n return 'vertical';\n }\n case 'portrait-primary':\n case 'portrait-secondary':\n default: {\n return 'horizontal';\n }\n }\n}\n","import * as React from 'react';\nconst initialPosition = { top: 0, right: 0, bottom: 0, left: 0 };\n// React hook for creating virtual element for popup\nexport function useVirtualElementRef(props = {}) {\n const { rect, contextElement } = props;\n const rectRef = React.useRef(initialPosition);\n const ref = React.useRef({\n contextElement,\n getBoundingClientRect() {\n const { top, right, bottom, left } = rectRef.current;\n const width = right - left;\n const height = bottom - top;\n return {\n top,\n right,\n bottom,\n left,\n width,\n height,\n };\n },\n });\n ref.current.contextElement = contextElement;\n if (rect) {\n const { top = 0, left = 0, right = left, bottom = top } = rect;\n rectRef.current = { top, right, bottom, left };\n }\n else {\n rectRef.current = initialPosition;\n }\n return ref;\n}\n","import * as React from 'react';\nexport function useResizeObserver({ ref, onResize, box, }) {\n React.useEffect(() => {\n const element = ref === null || ref === void 0 ? void 0 : ref.current;\n if (!element) {\n return undefined;\n }\n if (typeof window.ResizeObserver === 'undefined') {\n window.addEventListener('resize', onResize, false);\n return () => {\n window.removeEventListener('resize', onResize, false);\n };\n }\n const observer = new ResizeObserver((entries) => {\n if (!entries.length) {\n return;\n }\n onResize();\n });\n observer.observe(element, { box });\n return () => {\n observer.disconnect();\n };\n }, [ref, onResize, box]);\n}\n"],"names":["i18nFactory","registerKeysets","setLang","setFallbackLang","i18n","bind","getUniqId","length","chars","result","i","Math","floor","random","randomString","SeriesType","Area","BarX","BarY","Line","Pie","Scatter","Treemap","Waterfall","Sankey","DashStyle","SymbolType","LineCap","LayoutAlgorithm","DEFAULT_PALETTE","DEFAULT_AXIS_LABEL_FONT_SIZE","axisTitleDefaults","text","margin","style","fontSize","align","maxRowCount","xAxisTitleDefaults","Object","assign","yAxisTitleDefaults","DEFAULT_AXIS_TYPE","CHART_ERROR_CODE","ChartError","Error","constructor","originalError","message","code","super","this","isCustomError","name","stack","AVAILABLE_SERIES_TYPES","values","validateXYSeries","args","series","xAxis","yAxis","yAxisIndex","seriesYAxis","index","xType","yType","data","forEach","x","y","key","seriesName","withNaming","e","m","block","n","EventType","calculateNumericProperty","value","base","endsWith","Number","isNaN","parseFloat","isStringValueInPercent","isStringValueInPixel","calculateCos","deg","precision","factor","pow","cos","PI","calculateSin","sin","DEFAULT_LEGEND_SYMBOL_SIZE","DEFAULT_LEGEND_SYMBOL_PADDING","DEFAULT_DATALABELS_STYLE","fontWeight","fontColor","DEFAULT_HALO_OPTIONS","enabled","opacity","size","DEFAULT_POINT_MARKER_OPTIONS","radius","borderColor","borderWidth","symbol","getActiveLegendItems","reduce","acc","s","legend","visible","push","prepareLegendSymbol","symbolType","_a","symbolOptions","shape","Circle","width","padding","getCommonStackId","getSeriesStackId","stackId","stacking","i18nInstance","keysetsData","ru","entries","getUnitRate","exponent","unitsI18nKeys","resultUnitRate","abs","unitFormatter","unitDelimiterI18nKey","options","unitRate","showRankDelimiter","lang","i18nLang","toFixed","Intl","NumberFormat","minimumFractionDigits","maximumFractionDigits","useGrouping","format","unit","delimiter","BASE_NUMBER_FORMAT_UNIT_KEYS","baseFormatNumber","getNumberUnitRate","NUMBER_UNIT_RATE_BY_UNIT","default","auto","undefined","k","b","t","formatNumber","multiplier","prefix","postfix","labelMode","changedMultiplier","prePostfix","TIME_UNITS","millisecond","second","minute","hour","day","week","month","year","DATETIME_LABEL_FORMATS","CHARTS_WITHOUT_AXIS","CHART_SERIES_WITH_VOLUME_ON_Y_AXIS","CHART_SERIES_WITH_VOLUME_ON_X_AXIS","isAxisRelatedSeries","includes","type","isSeriesWithNumericalXValues","isSeriesWithNumericalYValues","getDomainDataForStackedSeries","seriesList","keyAttr","valueAttr","stackedSeries","Array","from","_stackId","seriesStack","singleSeries","Map","point","String","has","max","get","set","getDomainDataXBySeries","groupedSeries","item","filter","map","d","getDomainDataYBySeries","yValue","getOnlyVisibleSeries","formatAxisTickLabel","axis","step","date","labels","dateFormat","range","units","keys","findIndex","getTimeUnit","getDefaultDateFormat","input","numberFormat","getHorisontalSvgTextHeight","container","document","body","append","textSelection","height","node","getBoundingClientRect","remove","getDataCategoryValue","axisDirection","categories","categoryValue","dataCategory","category","extractCategoryValue","getClosestPointsRange","points","handleOverflowingText","tSpan","maxWidth","_b","_c","svg","closest","textNode","angle","transform","baseVal","find","revertRotation","createSVGTransform","setRotate","appendItem","textContent","textLength","slice","removeItem","setEllipsisForOverflowText","selection","setEllipsisForOverflowTexts","each","datum","textMaxWidth","getLabelsSize","rotation","html","Boolean","maxHeight","labelWrapper","l","innerHTML","rect","attrs","attr","selectAll","enter","renderLabels","select","wrapText","segmenter","Segmenter","granularity","segment","lastRow","isWordLike","getTicksCount","ticksCount","ticks","pixelInterval","ceil","getScaleTicks","scale","domain","getXAxisItems","count","maxCount","_","getMaxTickCount","minTickWidth","parseInt","getAxisHeight","split","boundsHeight","plots","getAxisTitleRows","title","row","getLineDashArray","dashStyle","strokeWidth","toLowerCase","replace","part","join","AxisY","props","axes","totalHeight","plotRef","ref","current","svgElement","getAxisPosition","top","plotIndex","position","plotLines","plotLine","axisSelection","seriesScale","axisItem","axisScale","yAxisGenerator","preparedAxis","axisGenerator","generator","tickSize","grid","tickPadding","tickFormat","getAxisGenerator","tickTexts","topOffset","lineHeight","leftOffset","transformLabel","call","elementY","_d","tickIndex","r","bottom","plotLineClassName","plotLineContainer","plotLinesSelection","plotLineValue","color","plotLineData","nodes","plotLineSelection","layerPlacement","lower","raise","lineColor","tickNode","stringifiedValue","match","xString","yString","parseTransformStyle","titleRows","rowCount","min","axisHeight","getTitlePosition","className","addDomain","domainPath","insert","axisBottom","labelFormat","labelsPaddings","labelsMargin","labelsMaxWidth","Infinity","labelsStyle","labelsLineHeight","items","tickItems","maxTickCount","tickColor","offset","window","devicePixelRatio","bandwidth","isBandScale","round","center","copy","number","getXTickPosition","labelHeight","right","labelsOffsetTop","labelsOffsetLeft","tickPath","start","end","moveTo","lineTo","order","el","tick","toString","elementX","left","currentElement","prevElement","currentElementPosition","prevElementPosition","lackingSpace","remainSpace","translateX","domainSize","domainColor","getLabelFormatter","tickStep","AxisX","fill","xAxisGenerator","legendDefaults","getSymbolType","scatterStyles","sqrt3","sqrt","triangleDown","draw","context","u","closePath","getSymbol","Diamond","Square","Triangle","TriangleDown","createGradientRect","interpolator","canvas","createElement","getContext","j","fillStyle","fillRect","toDataURL","getDefaultColorStops","getContinuesColorFn","colors","stops","customStops","getLegendPosition","offsetWidth","contentWidth","appendPaginator","maxPage","onArrowClick","paginationLine","computedWidth","inactive","itemStyle","getComputedTextLength","on","legendSymbolGenerator","Legend","boundsWidth","chartSeries","config","onItemClick","onUpdate","paginationOffset","setPaginationOffset","_e","legendWidth","limit","pagination","line","lineIndex","legendLine","legendItemTemplate","metaKey","element","legendItem","textWidth","itemDistance","getXPosition","unselected","scatterSymbol","renderLegendSymbol","mods","selected","colorScale","rectHeight","tickTop","enable","titleWidth","dx","PlotTitle","dy","dominantBaseline","textAnchor","Title","chartWidth","getWaterfallPointColor","total","positiveColor","negativeColor","getWaterfallPointSubtotal","pointIndex","indexOf","sum","getRowData","fieldName","getXRowData","getYRowData","DefaultContent","hovered","measureValue","every","some","getMeasureValue","seriesItem","id","backgroundColor","isTotal","subTotal","seriesData","target","source","links","display","gap","verticalAlign","ChartTooltipContent","renderer","customTooltip","Tooltip","tooltip","svgContainer","dispatcher","tooltipPinned","onOutsideClick","pointerPosition","setTooltipState","nextHovered","nextPointerPosition","useTooltip","containerRect","anchorRef","useVirtualElementRef","dispatchEvent","CustomEvent","Popup","pinned","contentClassName","open","placement","modifiers","altAxis","contains","IS_TOUCH_ENABLED","navigator","maxTouchPoints","getClosestPointsByXValue","sorted","p","closestXIndex","closestX","closestPoints","y0","closestYIndex","y1","sortedY","sortedYIndex","getSeriesType","shapeData","getClosestPoints","shapesData","pointerX","pointerY","groups","seriesType","list","prototype","apply","closestY","lastPoint","closestPoint","segments","flat","pie","atan2","polarRadius","startAngle","endAngle","leaves","x0","x1","closestLink","path","ctx","lineWidth","path2D","Path2D","stroke","isPointInPath","isPointInStroke","isInsidePath","usePrevious","getPreparedChart","chart","preparedTitle","marginTop","getMarginTop","marginBottom","marginLeft","marginRight","getMarginRight","getBoundsWidth","chartMargin","preparedYAxis","leftAxisWidth","rightAxisWidth","axisWidth","getYAxisWidth","getWidthOccupiedByYAxis","getGroupedLegendItems","maxLegendWidth","preparedLegend","textWidthsInLine","resultItem","textsWidth","symbolsWidth","distancesWidth","pop","nextLineIndex","seriesOptionsDefaults","barMaxWidth","barPadding","groupPadding","states","hover","brightness","scatter","area","treemap","waterfall","DEFAULT_MARKER","prepareMarker","seriesOptions","seriesHoverState","markerNormalState","marker","hoveredMarkerDefaultOptions","halo","normal","prepareDataLabels","dataLabels","label","inside","DEFAULT_DASH_STYLE","Solid","prepareLinecap","defaultLineCap","Round","None","lineCapFromSeriesOptions","prepareLineLegendSymbol","defaultLineWidth","useSeries","chartHeight","_f","_g","defaultItemStyle","computedItemStyle","legendType","isTitleEnabled","titleMargin","titleStyle","titleText","titleHeight","getDomainForContinuousColorScale","getPreparedLegend","preparedSeries","seriesNames","getSeriesNames","dataNames","dataItem","allowOverlap","connectorPadding","connectorShape","distance","connectorCurve","borderRadius","innerRadius","renderCustomShape","cursor","preparePieSeries","prepareBarXSeries","prepareBarYSeries","prepareScatterSeries","defaultDashStyle","linecap","prepareLineSeries","defaultAreaWidth","defaultOpacity","prepareArea","levels","layoutAlgorithm","Binary","prepareTreemap","prepareWaterfallSeries","prepareSankeySeries","prepareSeries","preparedSeriesOptions","activeLegendItems","setActiveLegendItems","legendConfig","legendItems","maxLegendHeight","flattenLegendItems","getFlattenLegendItems","legendHeight","getLegendComponents","handleLegendItemClick","allItems","getAllLegendItems","onlyItemSelected","nextActiveLegendItems","concat","isNumericalArrayData","filterCategoriesByVisibleSeries","visibleCategories","Set","isSeriesWithCategoryValues","add","c","createYScale","yMin","yCategories","yTimestamps","maxPadding","domainYMin","domainMax","yMinValue","yMaxValue","nice","filteredCategories","yMax","createXScale","xMin","xMax","getDefaultMaxXAxisValue","xCategories","xTimestamps","xAxisMinPadding","calculateXAxisPadding","xRange","domainXMin","domainXMax","xMinValue","xMaxValue","xScale","getLeftPosition","isLabelsOverlapping","label1","label2","rect1","rect2","left1","right1","left2","right2","getOverlappingByX","top1","bottom1","top2","bottom2","getOverlappingByY","filterOverlappingLabels","HtmlLayer","htmlLayout","preparedData","isArray","htmlElements","Portal","dangerouslySetInnerHTML","__html","content","haloClassName","symbolClassName","renderMarker","markerSelection","getMarkerVisibility","getMarkerSymbol","getMarkerHaloVisibility","setMarker","markerStates","state","symbolFn","selectMarkerHalo","parentSelection","selectMarkerSymbol","getXValue","xBandScale","getYValue","yScale","yBandScale","shapeKey","setActiveState","active","elementSelection","getRectPath","borderRadiuses","borderRadiusTopLeft","borderRadiusTopRight","borderRadiusBottomRight","borderRadiusBottomLeft","arc","AreaSeriesShapes","hoveredDataRef","hoverOptions","inactiveOptions","shapeSelection","labelsSelection","markers","hoverEnabled","inactiveEnabled","handleShapeHover","selectedDataItems","selectedSeriesIds","strokeColor","brighter","isActive","BarXSeriesShapes","rectSelection","isLastStackItem","labelSelection","hoveredValues","fillColor","hoveredSeries","BarYSeriesShapes","newOpacity","LineSeriesShapes","lineSelection","initialColor","getHaloVisibility","PieSeriesShapes","segmentSelector","connectorSelector","shapesSelection","pieData","outerRadius","cornerRadius","arcGenerator","connectors","customShape","eventName","selectedSeriesId","pieSelection","haloSelection","elements","currentSegmentHalo","connectorSelection","merge","htmlLabels","zIndex","pieGenerator","sort","FULL_CIRCLE","getCenter","defaultX","defaultY","SankeySeriesShape","valueof","justify","sourceLinks","depth","constant","ascendingSourceBreadth","a","ascendingBreadth","ascendingTargetBreadth","defaultId","defaultNodes","graph","defaultLinks","nodeById","computeLinkBreadths","link","targetLinks","pi","tau","epsilon","tauEpsilon","Path","_x0","_y0","_x1","_y1","quadraticCurveTo","bezierCurveTo","x2","y2","arcTo","x21","y21","x01","y01","l01_2","x20","y20","l21_2","l20_2","l21","l01","tan","acos","t01","t21","a0","a1","ccw","cw","da","w","h","linkSource","linkTarget","curveHorizontal","horizontalSource","horizontalTarget","curve","buffer","argv","arguments","ScatterSeriesShape","selectedDataItem","TreemapSeriesShape","labelData","levelOptions","hoveredData","currentRect","currentD","currentLabel","nodeData","WaterfallSeriesShapes","prev","Dash","useShapes","shapesComponents","visibleSeries","shapes","plotHeight","sortingOptions","comparator","direction","sortKey","xValue","xGroup","bandWidth","xLinearScale","xValues","dist","maxGroupSize","groupGap","groupWidth","rectGap","rectWidth","val","stacks","currentGroupWidth","yValues","groupItemIndex","stackHeight","stackItems","sortedData","yValueIndex","seriesYScale","xCenter","yDataValue","barData","ratio","prepareBarXData","plotWidth","groupedData","axisIndex","groupByYValue","axisValues","getBandWidth","barHeight","currentBarHeight","measureValues","stackSum","xValueIndex","prepared","setLabel","prepareBarYData","flattenData","yZero","totalValue","_index","prevPoint","prepareWaterfallData","_xMin","xRangeMax","yAxisTop","getHtmlLabel","prepareLineData","_x","getXValues","accumulatedYValues","seriesStackData","pointsAcc","accumulatedYValue","labelItems","getLabelData","labelSize","prepareAreaData","prepareScatterData","maxRadius","groupedPieSeries","pieSeries","prepareLabels","prepareLabelsArgs","curveFactory","getCurveFactory","connectorStartPointGenerator","connectorMidPointGenerator","connectorEndPointGenerator","labelArcGenerator","prevLabel","shouldUseHtml","labelWidth","relatedSegment","getLabelPosition","centroid","getConnectorPoints","connectorStartPoint","connectorEndPoint","midAngle","overlap","shouldAdjustAngle","newAngle","newX","newY","connector","seriesInnerRadius","segmentMaxRadius","maxSegmentRadius","segmentRadius","prepareItem","preparedLabels","topAdjustment","bottomAdjustment","preparePieData","dataWithRootNode","dataChunk","parentId","getSeriesDataWithRootNode","hierarchy","treemapInstance","tile","Dice","Slice","SliceDice","Squarify","root","paddingInner","getLabels","prepareTreemapData","sankeyGenerator","py","linkSort","iterations","sankey","computeNodeLinks","fixedValue","computeNodeValues","next","computeNodeDepths","computeNodeHeights","columns","kx","layer","column","computeNodeLayers","ky","reorderLinks","initializeNodeBreadths","alpha","beta","relaxRightToLeft","relaxLeftToRight","computeNodeBreadths","v","targetTop","reorderNodeLinks","resolveCollisions","sourceTop","subject","resolveCollisionsBottomToTop","resolveCollisionsTopToBottom","update","nodeId","nodeAlign","nodeSort","nodeWidth","nodePadding","extent","sankeyNodes","sankeyLinks","sankeyLinkHorizontal","prepareSankeyData","getAxisMin","minValue","minYValue","res","minSubTotal","useChartInnerProps","prevWidth","prevHeight","getPreparedTitle","preparedTooltip","getPreparedTooltip","useChartOptions","titleMaxRowsCount","estimatedTitleRows","titleSize","preparedXAxis","timestamps","autoRotation","overlapping","textElement","hasOverlappingLabels","defaultRotation","labelsHeight","getLabelSettings","getPreparedXAxis","axisByPlot","firstPlotAxis","defaultAxisPosition","labelsEnabled","getAxisLabelMaxWidth","getPreparedYAxis","hasAxisRelatedSeries","bottomOffset","getBottomOffset","useChartDimensions","preparedSplit","splitGap","getPlotHeight","TITLE_TOP_BOTTOM_PADDING","preparePlotTitle","useSplit","axisSeries","visibleAxisSeries","createScales","useAxisScales","boundsOffsetTop","boundsOffsetLeft","ChartInner","svgRef","htmlLayerRef","togglePinTooltip","unpinTooltip","setTooltipPinned","tooltipEnabled","tooltipPinEnabled","pin","modifierKey","event","resultValue","altKey","test","platform","ctrlKey","useChartInnerState","handleChartClick","handleMouseLeave","throttledHandleMouseMove","throttledHandleTouchMove","isOutsideBounds","handleMove","touch","touches","nextTooltipFixed","cancel","useChartInnerHandlers","clickHandler","events","click","pointerMoveHandler","pointermove","handlerData","onMouseMove","onMouseLeave","onTouchStart","onTouchMove","onClick","plot","Chart","forwardedRef","onResize","validatedData","debounced","dimensions","setDimensions","countSeriesByType","types","availableStackingValues","validateStacking","validatePieSeries","parentIds","idOrName","validateTreemapSeries","validateSeries","validateData","handleResize","parentElement","debuncedHandleResize","reflow","callbacks","channel","MessageChannel","postMessage","port2","port1","onmessage","toFlush","time","performance","now","measurePerformance","timestamp","SplitLayout","Pane","render","children","styleProps","eleRef","classes","flex","outline","RESIZER_DEFAULT_CLASSNAME","Resizer","onDoubleClick","onMouseDown","onTouchEnd","resizerClassName","role","preventDefault","unFocus","getSelection","removeAllRanges","getDefaultSize","defaultSize","minSize","maxSize","draggedSize","SplitPane","getDerivedStateFromProps","nextProps","prevState","getSizeUpdate","newState","instanceProps","newSize","isPanel1Primary","primary","splitPane","pane1","pane2","eventWithTouches","clientX","clientY","allowResize","onDragStarted","setState","onChange","isPrimaryFirst","ref2","node2","positionDelta","sizeDelta","getComputedStyle","newMaxSize","newPosition","resized","onMouseUp","onDragFinished","initialSize","pane1Size","pane2Size","componentDidMount","addEventListener","componentWillUnmount","removeEventListener","onResizerClick","onResizerDoubleClick","paneClassName","pane1ClassName","pane2ClassName","paneStyle","pane1Style","pane1StyleProps","pane2Style","pane2StyleProps","resizerStyle","disabledClass","resizerClassNamesIncludingDefault","notNullChildren","toArray","removeNullChildren","overflow","MozUserSelect","WebkitUserSelect","msUserSelect","userSelect","flexDirection","minHeight","pane1Classes","pane2Classes","defaultProps","cn","StyledSplitPane","paneOneRender","paneTwoRender","splitPaneProps","splitPaneRef","resizer","getElementsByClassName","hoveredClassName","classList","IS_WINDOW_AVAILABLE","IS_SCREEN_ORIENTATION_AVAILABLE","ScreenOrientation","screen","orientation","AVAILABLE_SCREEN_ORIENTATIONS","PORTRAIT_PRIMARY","PORTRAIT_SECONDARY","LANDSCAPE_PRIMARY","LANDSCAPE_SECONDARY","TooltipContent","tooltipProps","setTooltipProps","redraw","updates","CHART_SECTION_PERCENTAGE","getVerticalSize","innerWidth","tooltipPaneStyles","ChartWithSplitPane","ChartComponent","componentName","getComponentName","component","_ref","restProps","containerRef","tooltipContainerRef","chartRef","tooltipRef","tooltipHeight","setTooltipHeight","setSplit","setSize","innerHeight","getInitialSize","containerHeight","useWithSplitPaneState","prevTooltipHeight","prevSplit","handleTooltipContentResize","nextTooltipHeight","useResizeObserver","resultData","userPointerMoveHandler","pointerMoveData","handleOrientationChange","nextSplit","handleScreenOrientationChange","isScreenOrientationEventType","mapScreenOrientationTypeToSplitLayout","handleSizeChange","nextSize","displayName","withSplitPane","onLoad","onRender","onChartLoad","settings","performanceMeasure","splitted","callback","requestAnimationFrame","renderTime","widgetRendering","initialPosition","contextElement","rectRef","box","ResizeObserver","observer","observe","disconnect"],"sourceRoot":""}
1
+ {"version":3,"file":"js/3792.1af8dc36.chunk.js","mappings":"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","sources":["webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/i18n/index.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/utils/misc.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/constants/index.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/constants/defaults/axis.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/libs/chart-error/index.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/validation/index.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/utils/cn.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/utils/d3-dispatcher.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/utils/chart/math.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/hooks/useSeries/constants.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/hooks/useSeries/utils.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/libs/format-number/i18n/i18n.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/libs/format-number/index.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/utils/chart/time.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/utils/chart/index.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/utils/chart/text.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/utils/chart/axis.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/utils/chart/series/line.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/components/Axis/AxisY.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/utils/chart/axis-generators/bottom.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/components/Axis/AxisX.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/constants/defaults/legend.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/utils/chart/symbol.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/utils/chart/legend.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/utils/chart/color.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/components/Legend/index.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/components/PlotTitle/index.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/components/Title/index.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/utils/chart/series/waterfall.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/components/Tooltip/DefaultContent.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/components/Tooltip/ChartTooltipContent.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/components/Tooltip/index.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/hooks/useTooltip/index.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/constants/misc.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/utils/chart/get-closest-data.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/hooks/usePrevious/index.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/hooks/useChartOptions/chart.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/hooks/useChartDimensions/utils.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/hooks/useSeries/prepare-legend.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/constants/defaults/series-options.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/hooks/useSeries/prepare-area.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/hooks/useSeries/prepare-bar-y.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/hooks/useSeries/prepare-line.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/hooks/useSeries/prepare-scatter.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/hooks/useSeries/index.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/hooks/useSeries/prepareSeries.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/hooks/useSeries/prepare-pie.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/hooks/useSeries/prepare-bar-x.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/hooks/useSeries/prepare-treemap.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/hooks/useSeries/prepare-waterfall.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/hooks/useSeries/prepare-sankey.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/hooks/useSeries/prepare-options.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/hooks/useAxisScales/index.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/utils/chart/labels.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/hooks/useShapes/HtmlLayer.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/hooks/useShapes/marker.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/hooks/useShapes/utils.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/hooks/useShapes/area/index.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/hooks/useShapes/bar-x/prepare-data.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/hooks/useShapes/bar-x/index.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/hooks/useShapes/bar-y/index.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/hooks/useShapes/line/index.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/hooks/useShapes/pie/index.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/hooks/useShapes/pie/utils.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/hooks/useShapes/pie/prepare-data.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/hooks/useShapes/sankey/index.js","webpack://@ytsaurus/ui/./node_modules/d3-sankey/node_modules/d3-array/src/sum.js","webpack://@ytsaurus/ui/./node_modules/d3-sankey/node_modules/d3-array/src/max.js","webpack://@ytsaurus/ui/./node_modules/d3-sankey/src/align.js","webpack://@ytsaurus/ui/./node_modules/d3-sankey/src/constant.js","webpack://@ytsaurus/ui/./node_modules/d3-sankey/src/sankey.js","webpack://@ytsaurus/ui/./node_modules/d3-sankey/node_modules/d3-path/src/path.js","webpack://@ytsaurus/ui/./node_modules/d3-sankey/node_modules/d3-shape/src/array.js","webpack://@ytsaurus/ui/./node_modules/d3-sankey/node_modules/d3-shape/src/constant.js","webpack://@ytsaurus/ui/./node_modules/d3-sankey/node_modules/d3-shape/src/point.js","webpack://@ytsaurus/ui/./node_modules/d3-sankey/node_modules/d3-shape/src/link/index.js","webpack://@ytsaurus/ui/./node_modules/d3-sankey/src/sankeyLinkHorizontal.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/hooks/useShapes/scatter/prepare-data.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/hooks/useShapes/scatter/index.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/hooks/useShapes/treemap/index.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/hooks/useShapes/waterfall/prepare-data.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/hooks/useShapes/waterfall/index.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/hooks/useShapes/index.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/hooks/useShapes/constants.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/hooks/useShapes/bar-y/prepare-data.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/hooks/useShapes/line/prepare-data.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/hooks/useShapes/area/prepare-data.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/hooks/useShapes/treemap/prepare-data.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/hooks/useShapes/sankey/prepare-data.js","webpack://@ytsaurus/ui/./node_modules/d3-sankey/node_modules/d3-array/src/min.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/hooks/useChartOptions/x-axis.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/hooks/useChartOptions/y-axis.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/components/ChartInner/useChartInnerProps.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/hooks/useChartOptions/index.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/hooks/useChartOptions/title.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/hooks/useChartOptions/tooltip.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/hooks/useChartDimensions/index.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/hooks/useSplit/index.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/components/ChartInner/index.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/components/ChartInner/useChartInnerState.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/components/ChartInner/useChartInnerHandlers.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/charts/dist/esm/components/index.js","webpack://@ytsaurus/ui/./node_modules/afterframe/src/index.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/chartkit/build/utils/performance.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/chartkit/build/components/SplitPane/constants.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/chartkit/build/components/SplitPane/Pane.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/chartkit/build/components/SplitPane/Resizer.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/chartkit/build/components/SplitPane/SplitPane.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/chartkit/build/components/SplitPane/StyledSplitPane.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/chartkit/build/constants/misc.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/chartkit/build/hooks/misc.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/chartkit/build/plugins/d3/renderer/withSplitPane/TooltipContent.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/chartkit/build/plugins/d3/renderer/withSplitPane/useWithSplitPaneState.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/chartkit/build/plugins/d3/renderer/withSplitPane/withSplitPane.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/chartkit/build/plugins/d3/renderer/D3Widget.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/chartkit/build/utils/misc.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/chartkit/build/components/SplitPane/index.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/hooks/useVirtualElementRef/useVirtualElementRef.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/hooks/useResizeObserver/useResizeObserver.js"],"sourcesContent":["import { I18N } from '@gravity-ui/i18n';\nimport en from './keysets/en.json';\nimport ru from './keysets/ru.json';\nconst i18nFactory = new I18N();\ni18nFactory.registerKeysets('en', en);\ni18nFactory.registerKeysets('ru', ru);\ni18nFactory.setLang('en');\ni18nFactory.setFallbackLang('en');\nconst i18n = i18nFactory.i18n.bind(i18nFactory);\nexport { i18nFactory, i18n };\n","export function randomString(length, chars) {\n let result = '';\n for (let i = length; i > 0; --i) {\n result += chars[Math.floor(Math.random() * chars.length)];\n }\n return result;\n}\nexport function getUniqId() {\n return `gravity-chart.${randomString(5, '0123456789abcdefghijklmnopqrstuvwxyz')}`;\n}\n/**\n * Checks Macintosh hardware is used.\n *\n * Note: there is no better way to get this information as using depricated property `navigator.platform`.\n *\n * More details [here](https://developer.mozilla.org/en-US/docs/Web/API/Navigator/platform#examples).\n */\nexport function isMacintosh() {\n return typeof navigator === 'undefined' ? false : /Mac|iP(hone|[oa]d)/.test(navigator.platform);\n}\n","export * from './defaults';\nexport * from './misc';\nexport const SeriesType = {\n Area: 'area',\n BarX: 'bar-x',\n BarY: 'bar-y',\n Line: 'line',\n Pie: 'pie',\n Scatter: 'scatter',\n Treemap: 'treemap',\n Waterfall: 'waterfall',\n Sankey: 'sankey',\n};\nexport var DashStyle;\n(function (DashStyle) {\n DashStyle[\"Dash\"] = \"Dash\";\n DashStyle[\"DashDot\"] = \"DashDot\";\n DashStyle[\"Dot\"] = \"Dot\";\n DashStyle[\"LongDash\"] = \"LongDash\";\n DashStyle[\"LongDashDot\"] = \"LongDashDot\";\n DashStyle[\"LongDashDotDot\"] = \"LongDashDotDot\";\n DashStyle[\"ShortDash\"] = \"ShortDash\";\n DashStyle[\"ShortDashDot\"] = \"ShortDashDot\";\n DashStyle[\"ShortDashDotDot\"] = \"ShortDashDotDot\";\n DashStyle[\"ShortDot\"] = \"ShortDot\";\n DashStyle[\"Solid\"] = \"Solid\";\n})(DashStyle || (DashStyle = {}));\nexport var SymbolType;\n(function (SymbolType) {\n SymbolType[\"Circle\"] = \"circle\";\n SymbolType[\"Diamond\"] = \"diamond\";\n SymbolType[\"Square\"] = \"square\";\n SymbolType[\"Triangle\"] = \"triangle\";\n SymbolType[\"TriangleDown\"] = \"triangle-down\";\n})(SymbolType || (SymbolType = {}));\nexport var LineCap;\n(function (LineCap) {\n LineCap[\"Butt\"] = \"butt\";\n LineCap[\"Round\"] = \"round\";\n LineCap[\"Square\"] = \"square\";\n LineCap[\"None\"] = \"none\";\n})(LineCap || (LineCap = {}));\nexport var LayoutAlgorithm;\n(function (LayoutAlgorithm) {\n LayoutAlgorithm[\"Binary\"] = \"binary\";\n LayoutAlgorithm[\"Dice\"] = \"dice\";\n LayoutAlgorithm[\"Slice\"] = \"slice\";\n LayoutAlgorithm[\"SliceDice\"] = \"slice-dice\";\n LayoutAlgorithm[\"Squarify\"] = \"squarify\";\n})(LayoutAlgorithm || (LayoutAlgorithm = {}));\nexport const DEFAULT_PALETTE = [\n '#4DA2F1',\n '#FF3D64',\n '#8AD554',\n '#FFC636',\n '#FFB9DD',\n '#84D1EE',\n '#FF91A1',\n '#54A520',\n '#DB9100',\n '#BA74B3',\n '#1F68A9',\n '#ED65A9',\n '#0FA08D',\n '#FF7E00',\n '#E8B0A4',\n '#52A6C5',\n '#BE2443',\n '#70C1AF',\n '#FFB46C',\n '#DCA3D7',\n];\nexport const DEFAULT_AXIS_LABEL_FONT_SIZE = '11px';\n","export const axisLabelsDefaults = {\n margin: 10,\n padding: 10,\n fontSize: 11,\n maxWidth: 80,\n};\nconst axisTitleDefaults = {\n text: '',\n margin: 0,\n style: {\n fontSize: '14px',\n },\n align: 'center',\n maxRowCount: 1,\n};\nexport const xAxisTitleDefaults = Object.assign(Object.assign({}, axisTitleDefaults), { margin: 4 });\nexport const yAxisTitleDefaults = Object.assign(Object.assign({}, axisTitleDefaults), { margin: 8 });\nexport const DEFAULT_AXIS_TYPE = 'linear';\n","export const CHART_ERROR_CODE = {\n NO_DATA: 'ERR.CK.NO_DATA',\n INVALID_DATA: 'ERR.CK.INVALID_DATA',\n UNKNOWN: 'ERR.CK.UNKNOWN_ERROR',\n};\nexport class ChartError extends Error {\n constructor({ originalError, message, code = CHART_ERROR_CODE.UNKNOWN } = {}) {\n super(message);\n this.isCustomError = true;\n this.code = code;\n if (originalError) {\n this.name = originalError.name;\n this.stack = originalError.stack;\n }\n }\n}\nexport const isCustomError = (error) => {\n return error instanceof Error && 'isCustomError' in error;\n};\n","import get from 'lodash/get';\nimport isEmpty from 'lodash/isEmpty';\nimport { DEFAULT_AXIS_TYPE, SeriesType } from '../constants';\nimport { i18n } from '../i18n';\nimport { CHART_ERROR_CODE, ChartError } from '../libs';\nconst AVAILABLE_SERIES_TYPES = Object.values(SeriesType);\nconst validateXYSeries = (args) => {\n const { series, xAxis, yAxis = [] } = args;\n const yAxisIndex = get(series, 'yAxis', 0);\n const seriesYAxis = yAxis[yAxisIndex];\n if (yAxisIndex !== 0 && typeof seriesYAxis === 'undefined') {\n throw new ChartError({\n code: CHART_ERROR_CODE.INVALID_DATA,\n message: i18n('error', 'label_invalid-y-axis-index', {\n index: yAxisIndex,\n }),\n });\n }\n const xType = get(xAxis, 'type', DEFAULT_AXIS_TYPE);\n const yType = get(seriesYAxis, 'type', DEFAULT_AXIS_TYPE);\n series.data.forEach(({ x, y }) => {\n switch (xType) {\n case 'category': {\n if (typeof x !== 'string' && typeof x !== 'number') {\n throw new ChartError({\n code: CHART_ERROR_CODE.INVALID_DATA,\n message: i18n('error', 'label_invalid-axis-category-data-point', {\n key: 'x',\n seriesName: series.name,\n }),\n });\n }\n break;\n }\n case 'datetime': {\n if (typeof x !== 'number') {\n throw new ChartError({\n code: CHART_ERROR_CODE.INVALID_DATA,\n message: i18n('error', 'label_invalid-axis-datetime-data-point', {\n key: 'x',\n seriesName: series.name,\n }),\n });\n }\n break;\n }\n case 'linear': {\n if (typeof x !== 'number' && x !== null) {\n throw new ChartError({\n code: CHART_ERROR_CODE.INVALID_DATA,\n message: i18n('error', 'label_invalid-axis-linear-data-point', {\n key: 'x',\n seriesName: series.name,\n }),\n });\n }\n }\n }\n switch (yType) {\n case 'category': {\n if (typeof y !== 'string' && typeof y !== 'number') {\n throw new ChartError({\n code: CHART_ERROR_CODE.INVALID_DATA,\n message: i18n('error', 'label_invalid-axis-category-data-point', {\n key: 'y',\n seriesName: series.name,\n }),\n });\n }\n break;\n }\n case 'datetime': {\n if (typeof y !== 'number') {\n throw new ChartError({\n code: CHART_ERROR_CODE.INVALID_DATA,\n message: i18n('error', 'label_invalid-axis-datetime-data-point', {\n key: 'y',\n seriesName: series.name,\n }),\n });\n }\n break;\n }\n case 'linear': {\n if (typeof y !== 'number' && y !== null) {\n throw new ChartError({\n code: CHART_ERROR_CODE.INVALID_DATA,\n message: i18n('error', 'label_invalid-axis-linear-data-point', {\n key: 'y',\n seriesName: series.name,\n }),\n });\n }\n }\n }\n });\n};\nconst validatePieSeries = ({ series }) => {\n series.data.forEach(({ value }) => {\n if (typeof value !== 'number') {\n throw new ChartError({\n code: CHART_ERROR_CODE.INVALID_DATA,\n message: i18n('error', 'label_invalid-pie-data-value'),\n });\n }\n });\n};\nconst validateStacking = ({ series }) => {\n const availableStackingValues = ['normal', 'percent'];\n if (series.stacking && !availableStackingValues.includes(series.stacking)) {\n throw new ChartError({\n code: CHART_ERROR_CODE.INVALID_DATA,\n message: i18n('error', 'label_invalid-series-property', {\n key: 'stacking',\n values: availableStackingValues,\n }),\n });\n }\n};\nconst validateTreemapSeries = ({ series }) => {\n const parentIds = {};\n series.data.forEach((d) => {\n if (d.parentId && !parentIds[d.parentId]) {\n parentIds[d.parentId] = true;\n }\n });\n series.data.forEach((d) => {\n let idOrName = d.id;\n if (!idOrName) {\n idOrName = Array.isArray(d.name) ? d.name.join() : d.name;\n }\n if (parentIds[idOrName] && typeof d.value === 'number') {\n throw new ChartError({\n code: CHART_ERROR_CODE.INVALID_DATA,\n message: i18n('error', 'label_invalid-treemap-redundant-value', {\n id: d.id,\n name: d.name,\n }),\n });\n }\n if (!parentIds[idOrName] && typeof d.value !== 'number') {\n throw new ChartError({\n code: CHART_ERROR_CODE.INVALID_DATA,\n message: i18n('error', 'label_invalid-treemap-missing-value', {\n id: d.id,\n name: d.name,\n }),\n });\n }\n });\n};\nconst validateSeries = (args) => {\n const { series, xAxis, yAxis } = args;\n if (!AVAILABLE_SERIES_TYPES.includes(series.type)) {\n throw new ChartError({\n code: CHART_ERROR_CODE.INVALID_DATA,\n message: i18n('error', 'label_invalid-series-type', {\n types: AVAILABLE_SERIES_TYPES.join(', '),\n }),\n });\n }\n switch (series.type) {\n case 'area':\n case 'bar-y':\n case 'bar-x': {\n validateXYSeries({ series, xAxis, yAxis });\n validateStacking({ series });\n break;\n }\n case 'line':\n case 'scatter': {\n validateXYSeries({ series, xAxis, yAxis });\n break;\n }\n case 'pie': {\n validatePieSeries({ series });\n break;\n }\n case 'treemap': {\n validateTreemapSeries({ series });\n }\n }\n};\nconst countSeriesByType = (args) => {\n const { series, type } = args;\n let count = 0;\n series.forEach((s) => {\n if (s.type === type) {\n count += 1;\n }\n });\n return count;\n};\nexport const validateData = (data) => {\n if (isEmpty(data) || isEmpty(data.series) || isEmpty(data.series.data)) {\n throw new ChartError({\n code: CHART_ERROR_CODE.NO_DATA,\n message: i18n('error', 'label_no-data'),\n });\n }\n if (data.series.data.some((s) => isEmpty(s.data))) {\n throw new ChartError({\n code: CHART_ERROR_CODE.INVALID_DATA,\n message: 'You should specify data for all series',\n });\n }\n const treemapSeriesCount = countSeriesByType({\n series: data.series.data,\n type: SeriesType.Treemap,\n });\n if (treemapSeriesCount > 1) {\n throw new ChartError({\n code: CHART_ERROR_CODE.INVALID_DATA,\n message: 'It looks like you are trying to define more than one \"treemap\" series.',\n });\n }\n data.series.data.forEach((series) => {\n validateSeries({ series, yAxis: data.yAxis, xAxis: data.xAxis });\n });\n};\n","import { withNaming } from '@bem-react/classname';\nexport const CN_NAMESPACE = 'gcharts-';\nexport const cn = withNaming({ e: '__', m: '_' });\nexport const block = withNaming({ n: CN_NAMESPACE, e: '__', m: '_' });\n","import { dispatch } from 'd3';\nexport const EventType = {\n CLICK_CHART: 'click-chart',\n HOVER_SHAPE: 'hover-shape',\n POINTERMOVE_CHART: 'pointermove-chart',\n};\nexport const getD3Dispatcher = () => {\n return dispatch(EventType.CLICK_CHART, EventType.HOVER_SHAPE, EventType.POINTERMOVE_CHART);\n};\n","import isNil from 'lodash/isNil';\nconst isStringValueInPercent = (value = '') => {\n return value.endsWith('%') && !Number.isNaN(Number.parseFloat(value));\n};\nconst isStringValueInPixel = (value = '') => {\n return value.endsWith('px') && !Number.isNaN(Number.parseFloat(value));\n};\n/**\n * Calculates a numeric property based on the given arguments.\n *\n * @param {Object} args - The arguments for the calculation.\n * @param {string | number | null} args.value - The value to calculate the property for.\n * @param {number} args.base - The base value to use in the calculation.\n * @return {number | undefined} The calculated numeric property, or undefined if the value is invalid.\n * @example\n * const result1 = calculateNumericProperty({value: 1});\n * console.log(result1); // Output: 1\n * const result2 = calculateNumericProperty({value: '10px'});\n * console.log(result2); // Output: 10\n * const result3 = calculateNumericProperty({value: '50%', base: 200});\n * console.log(result3); // Output: 100\n * const result4 = calculateNumericProperty({value: '50%'});\n * console.log(result4); // Output: undefined\n * const result5 = calculateNumericProperty({value: 'invalid_value'});\n * console.log(result5); // Output: undefined\n */\nexport const calculateNumericProperty = (args) => {\n const { value = '', base } = args;\n if (isNil(value)) {\n return undefined;\n }\n if (typeof value === 'string') {\n if (isStringValueInPercent(value) && typeof base === 'number') {\n const fraction = Number.parseFloat(value) / 100;\n return base * fraction;\n }\n if (isStringValueInPixel(value)) {\n return Number.parseFloat(value);\n }\n return undefined;\n }\n return value;\n};\nexport function calculateCos(deg, precision = 2) {\n const factor = Math.pow(10, precision);\n return Math.floor(Math.cos((Math.PI / 180) * deg) * factor) / factor;\n}\nexport function calculateSin(deg, precision = 2) {\n const factor = Math.pow(10, precision);\n return Math.floor(Math.sin((Math.PI / 180) * deg) * factor) / factor;\n}\n","export const DEFAULT_LEGEND_SYMBOL_SIZE = 8;\nexport const DEFAULT_LEGEND_SYMBOL_PADDING = 5;\nexport const DEFAULT_DATALABELS_PADDING = 5;\nexport const DEFAULT_DATALABELS_STYLE = {\n fontSize: '11px',\n fontWeight: 'bold',\n fontColor: 'var(--d3-data-labels)',\n};\nexport const DEFAULT_HALO_OPTIONS = {\n enabled: true,\n opacity: 0.25,\n size: 6,\n};\nexport const DEFAULT_POINT_MARKER_OPTIONS = {\n radius: 4,\n borderColor: '',\n borderWidth: 0,\n symbol: 'circle',\n};\n","import memoize from 'lodash/memoize';\nimport { SymbolType } from '../../constants';\nimport { getUniqId } from '../../utils/misc';\nimport { DEFAULT_LEGEND_SYMBOL_PADDING, DEFAULT_LEGEND_SYMBOL_SIZE } from './constants';\nexport const getActiveLegendItems = (series) => {\n return series.reduce((acc, s) => {\n if (s.legend.enabled && s.visible) {\n acc.push(s.name);\n }\n return acc;\n }, []);\n};\nexport const getAllLegendItems = (series) => {\n return series.map((s) => s.name);\n};\nexport function prepareLegendSymbol(series, symbolType) {\n var _a;\n const symbolOptions = ((_a = series.legend) === null || _a === void 0 ? void 0 : _a.symbol) || {};\n return {\n shape: 'symbol',\n symbolType: symbolType || SymbolType.Circle,\n width: (symbolOptions === null || symbolOptions === void 0 ? void 0 : symbolOptions.width) || DEFAULT_LEGEND_SYMBOL_SIZE,\n padding: (symbolOptions === null || symbolOptions === void 0 ? void 0 : symbolOptions.padding) || DEFAULT_LEGEND_SYMBOL_PADDING,\n };\n}\nconst getCommonStackId = memoize(getUniqId);\nexport function getSeriesStackId(series) {\n let stackId = series.stackId;\n if (!stackId) {\n stackId = series.stacking ? getCommonStackId() : getUniqId();\n }\n return stackId;\n}\n","import { I18N } from '@gravity-ui/i18n';\nconst i18nInstance = new I18N();\ni18nInstance.setLang('ru');\nconst makeInstance = (keysetName, keysetsData) => {\n Object.entries(keysetsData).forEach(([key, value]) => i18nInstance.registerKeysets(key, value));\n return i18nInstance.i18n.bind(i18nInstance, keysetName);\n};\nexport { i18nInstance, makeInstance };\n","import { i18nInstance, makeInstance } from './i18n/i18n';\nimport en from './i18n/en.json';\nimport ru from './i18n/ru.json';\nconst i18n = makeInstance('units', { ru, en });\nfunction getUnitRate(value, exponent, unitsI18nKeys) {\n let resultUnitRate = 1;\n while (Math.abs(value / Math.pow(exponent, resultUnitRate)) >= 1 &&\n resultUnitRate < 10 &&\n i18n(unitsI18nKeys[resultUnitRate])) {\n resultUnitRate++;\n }\n return resultUnitRate - 1;\n}\nconst unitFormatter = ({ exponent, unitsI18nKeys, unitDelimiterI18nKey, }) => {\n return function formatUnit(value, options = {}) {\n const { precision, unitRate, showRankDelimiter = true, lang } = options;\n const i18nLang = i18nInstance.lang;\n if (lang) {\n i18nInstance.setLang(lang);\n }\n const resultUnitRate = typeof unitRate === 'number' ? unitRate : getUnitRate(value, exponent, unitsI18nKeys);\n let result = value / Math.pow(exponent, resultUnitRate);\n if (typeof precision === 'number') {\n result = Number(result.toFixed(precision));\n }\n else if (precision === 'auto' && result % 1 !== 0) {\n result = Number(result.toFixed(Math.abs(result) > 1 ? 2 : 4));\n }\n result = new Intl.NumberFormat(lang !== null && lang !== void 0 ? lang : i18nLang, {\n minimumFractionDigits: typeof precision === 'number' ? precision : 0,\n maximumFractionDigits: 20,\n useGrouping: showRankDelimiter,\n }).format(result);\n const unit = i18n(unitsI18nKeys[resultUnitRate]);\n const delimiter = i18n(unitDelimiterI18nKey);\n i18nInstance.setLang(i18nLang);\n return `${result}${delimiter}${unit}`;\n };\n};\nexport const formatBytes = unitFormatter({\n exponent: 1024,\n unitDelimiterI18nKey: 'value_space-delimiter',\n unitsI18nKeys: ['value_short-bytes', 'value_short-kilobytes', 'value_short-megabytes'],\n});\nexport const formatDuration = unitFormatter({\n exponent: 1000,\n unitDelimiterI18nKey: 'value_space-delimiter',\n unitsI18nKeys: ['value_short-milliseconds', 'value_short-seconds', 'value_short-minutes'],\n});\nconst BASE_NUMBER_FORMAT_UNIT_KEYS = [\n 'value_short-empty',\n 'value_short-k',\n 'value_short-m',\n 'value_short-b',\n 'value_short-t',\n];\nconst baseFormatNumber = unitFormatter({\n exponent: 1000,\n unitDelimiterI18nKey: 'value_number-delimiter',\n unitsI18nKeys: BASE_NUMBER_FORMAT_UNIT_KEYS,\n});\nexport const getNumberUnitRate = (value) => getUnitRate(value, 1000, BASE_NUMBER_FORMAT_UNIT_KEYS);\nconst NUMBER_UNIT_RATE_BY_UNIT = {\n default: 0,\n auto: undefined,\n k: 1,\n m: 2,\n b: 3,\n t: 4,\n};\nexport const formatNumber = (value, options = {}) => {\n if (Number.isNaN(value) || Number.isNaN(Number(value))) {\n return new Intl.NumberFormat('en').format(Number(value));\n }\n const { format = 'number', multiplier = 1, prefix = '', postfix = '', unit, unitRate, labelMode, } = options;\n let changedMultiplier = multiplier;\n let prePostfix = '';\n if (format === 'percent') {\n changedMultiplier = 100;\n prePostfix = '%';\n }\n if (labelMode === 'percent') {\n prePostfix = '%';\n }\n const formattedValue = baseFormatNumber(Number(value) * changedMultiplier, Object.assign(Object.assign({}, options), { unitRate: unitRate !== null && unitRate !== void 0 ? unitRate : NUMBER_UNIT_RATE_BY_UNIT[unit !== null && unit !== void 0 ? unit : 'default'] }));\n return `${prefix}${formattedValue}${prePostfix}${postfix}`;\n};\n","export const TIME_UNITS = {\n millisecond: 1,\n second: 1000,\n minute: 60000,\n hour: 3600000,\n day: 24 * 3600000,\n week: 7 * 24 * 3600000,\n month: 28 * 24 * 3600000,\n year: 364 * 24 * 3600000,\n};\nexport const DATETIME_LABEL_FORMATS = {\n millisecond: 'DD.MM.YY HH:mm:ss.SSS',\n second: 'DD.MM.YY HH:mm:ss',\n minute: 'DD.MM.YY HH:mm',\n hour: 'DD.MM.YY HH:mm',\n day: 'DD.MM.YY',\n week: 'DD.MM.YY',\n month: \"MMM 'YY\",\n year: 'YYYY',\n};\nfunction getTimeUnit(range) {\n const units = Object.keys(TIME_UNITS);\n const index = units.findIndex((unit) => range < TIME_UNITS[unit]);\n return index === -1 ? 'year' : units[index - 1];\n}\nexport function getDefaultDateFormat(range) {\n if (range) {\n const unit = getTimeUnit(range);\n if (unit in DATETIME_LABEL_FORMATS) {\n return DATETIME_LABEL_FORMATS[unit];\n }\n }\n return DATETIME_LABEL_FORMATS.day;\n}\n","import { dateTime } from '@gravity-ui/date-utils';\nimport { group, select } from 'd3';\nimport get from 'lodash/get';\nimport isNil from 'lodash/isNil';\nimport { DEFAULT_AXIS_LABEL_FONT_SIZE } from '../../constants';\nimport { getSeriesStackId } from '../../hooks/useSeries/utils';\nimport { formatNumber, getNumberUnitRate } from '../../libs/format-number';\nimport { getDefaultDateFormat } from './time';\nexport * from './math';\nexport * from './text';\nexport * from './time';\nexport * from './axis';\nexport * from './labels';\nexport * from './legend';\nexport * from './symbol';\nexport * from './series';\nexport * from './color';\nconst CHARTS_WITHOUT_AXIS = ['pie', 'treemap', 'sankey'];\nexport const CHART_SERIES_WITH_VOLUME_ON_Y_AXIS = [\n 'bar-x',\n 'area',\n 'waterfall',\n];\nexport const CHART_SERIES_WITH_VOLUME_ON_X_AXIS = ['bar-y'];\n/**\n * Checks whether the series should be drawn with axes.\n *\n * @param series - The series object to check.\n * @returns `true` if the series should be drawn with axes, `false` otherwise.\n */\nexport function isAxisRelatedSeries(series) {\n return !CHARTS_WITHOUT_AXIS.includes(series.type);\n}\nexport function isSeriesWithNumericalXValues(series) {\n return isAxisRelatedSeries(series);\n}\nexport function isSeriesWithNumericalYValues(series) {\n return isAxisRelatedSeries(series);\n}\nexport function isSeriesWithCategoryValues(series) {\n return isAxisRelatedSeries(series);\n}\nfunction getDomainDataForStackedSeries(seriesList, keyAttr = 'x', valueAttr = 'y') {\n const acc = [];\n const stackedSeries = group(seriesList, getSeriesStackId);\n Array.from(stackedSeries).forEach(([_stackId, seriesStack]) => {\n const values = {};\n seriesStack.forEach((singleSeries) => {\n const data = new Map();\n singleSeries.data.forEach((point) => {\n const key = String(point[keyAttr]);\n let value = 0;\n if (valueAttr in point && typeof point[valueAttr] === 'number') {\n value = point[valueAttr];\n }\n if (data.has(key)) {\n value = Math.max(value, data.get(key));\n }\n data.set(key, value);\n });\n Array.from(data).forEach(([key, value]) => {\n values[key] = (values[key] || 0) + value;\n });\n });\n acc.push(...Object.values(values));\n });\n return acc;\n}\nexport const getDomainDataXBySeries = (series) => {\n const groupedSeries = group(series, (item) => item.type);\n return Array.from(groupedSeries).reduce((acc, [type, seriesList]) => {\n switch (type) {\n case 'bar-y': {\n acc.push(...getDomainDataForStackedSeries(seriesList, 'y', 'x'));\n break;\n }\n default: {\n seriesList.filter(isSeriesWithNumericalXValues).forEach((s) => {\n acc.push(...s.data.map((d) => d.x));\n });\n }\n }\n return acc;\n }, []);\n};\nexport function getDefaultMaxXAxisValue(series) {\n if (series.some((s) => s.type === 'bar-y')) {\n return 0;\n }\n return undefined;\n}\nexport const getDomainDataYBySeries = (series) => {\n const groupedSeries = group(series, (item) => item.type);\n return Array.from(groupedSeries).reduce((acc, [type, seriesList]) => {\n switch (type) {\n case 'area':\n case 'bar-x': {\n acc.push(...getDomainDataForStackedSeries(seriesList));\n break;\n }\n case 'waterfall': {\n let yValue = 0;\n seriesList.forEach((s) => {\n s.data.forEach((d) => {\n yValue += Number(d.y) || 0;\n acc.push(yValue);\n });\n });\n break;\n }\n default: {\n seriesList.filter(isSeriesWithNumericalYValues).forEach((s) => {\n acc.push(...s.data.map((d) => d.y));\n });\n }\n }\n return acc;\n }, []);\n};\n// Uses to get all series names array (except `pie` charts)\nexport const getSeriesNames = (series) => {\n return series.reduce((acc, s) => {\n if ('name' in s && typeof s.name === 'string') {\n acc.push(s.name);\n }\n return acc;\n }, []);\n};\nexport const getOnlyVisibleSeries = (series) => {\n return series.filter((s) => s.visible);\n};\nexport const parseTransformStyle = (style) => {\n var _a;\n if (!style) {\n return {};\n }\n const stringifiedValue = ((_a = style.match(/\\((.*?)\\)/)) === null || _a === void 0 ? void 0 : _a[1]) || '';\n const [xString, yString] = stringifiedValue.split(',');\n const x = Number.isNaN(Number(xString)) ? undefined : Number(xString);\n const y = Number.isNaN(Number(yString)) ? undefined : Number(yString);\n return { x, y };\n};\nexport const formatAxisTickLabel = (args) => {\n const { axis, value, step } = args;\n switch (axis.type) {\n case 'category': {\n return value;\n }\n case 'datetime': {\n const date = value;\n const format = axis.labels.dateFormat || getDefaultDateFormat(step);\n return dateTime({ input: date }).format(format);\n }\n case 'linear':\n default: {\n const numberFormat = Object.assign({ unitRate: value && step ? getNumberUnitRate(step) : undefined }, axis.labels.numberFormat);\n return formatNumber(value, numberFormat);\n }\n }\n};\n/**\n * Calculates the height of a text element in a horizontal SVG layout.\n *\n * @param {Object} args - The arguments for the function.\n * @param {string} args.text - The text to be measured.\n * @param {Partial<BaseTextStyle>} args.style - Optional style properties for the text element.\n * @return {number} The height of the text element.\n */\nexport const getHorisontalSvgTextHeight = (args) => {\n var _a;\n const { text, style } = args;\n const container = select(document.body).append('svg');\n const textSelection = container.append('text').text(text);\n const fontSize = get(style, 'fontSize', DEFAULT_AXIS_LABEL_FONT_SIZE);\n if (fontSize) {\n textSelection.style('font-size', fontSize).style('alignment-baseline', 'after-edge');\n }\n const height = ((_a = textSelection.node()) === null || _a === void 0 ? void 0 : _a.getBoundingClientRect().height) || 0;\n container.remove();\n return height;\n};\nconst extractCategoryValue = (args) => {\n const { axisDirection, categories, data } = args;\n const dataCategory = get(data, axisDirection);\n let categoryValue;\n if ('category' in data && data.category) {\n categoryValue = data.category;\n }\n if (typeof dataCategory === 'string') {\n categoryValue = dataCategory;\n }\n if (typeof dataCategory === 'number') {\n categoryValue = categories[dataCategory];\n }\n if (isNil(categoryValue)) {\n throw new Error('It seems you are trying to get non-existing category value');\n }\n return categoryValue;\n};\nexport const getDataCategoryValue = (args) => {\n const { axisDirection, categories, data } = args;\n const categoryValue = extractCategoryValue({ axisDirection, categories, data });\n return categoryValue;\n};\nexport function getClosestPointsRange(axis, points) {\n if (axis.type === 'category') {\n return undefined;\n }\n return points[1] - points[0];\n}\n","import { select } from 'd3-selection';\nexport function handleOverflowingText(tSpan, maxWidth) {\n var _a, _b, _c;\n if (!tSpan) {\n return;\n }\n const svg = tSpan.closest('svg');\n if (!svg) {\n return;\n }\n const textNode = tSpan.closest('text');\n const angle = ((_a = Array.from((textNode === null || textNode === void 0 ? void 0 : textNode.transform.baseVal) || []).find((item) => item.angle)) === null || _a === void 0 ? void 0 : _a.angle) || 0;\n const revertRotation = svg.createSVGTransform();\n revertRotation.setRotate(-angle, 0, 0);\n textNode === null || textNode === void 0 ? void 0 : textNode.transform.baseVal.appendItem(revertRotation);\n let text = tSpan.textContent || '';\n let textLength = ((_b = tSpan.getBoundingClientRect()) === null || _b === void 0 ? void 0 : _b.width) || 0;\n while (textLength > maxWidth && text.length > 1) {\n text = text.slice(0, -1);\n tSpan.textContent = text + '…';\n textLength = ((_c = tSpan.getBoundingClientRect()) === null || _c === void 0 ? void 0 : _c.width) || 0;\n }\n textNode === null || textNode === void 0 ? void 0 : textNode.transform.baseVal.removeItem((textNode === null || textNode === void 0 ? void 0 : textNode.transform.baseVal.length) - 1);\n}\nexport function setEllipsisForOverflowText(selection, maxWidth) {\n const text = selection.text();\n selection.text(null).append('title').text(text);\n const tSpan = selection.append('tspan').text(text).style('alignment-baseline', 'inherit');\n handleOverflowingText(tSpan.node(), maxWidth);\n}\nexport function setEllipsisForOverflowTexts(selection, maxWidth) {\n selection.each(function (datum) {\n const textMaxWidth = typeof maxWidth === 'function' ? maxWidth(datum) : maxWidth;\n setEllipsisForOverflowText(select(this), textMaxWidth);\n });\n}\nexport function hasOverlappingLabels({ width, labels, padding = 0, style, }) {\n const maxWidth = (width - padding * (labels.length - 1)) / labels.length;\n const textElement = select(document.body)\n .append('text')\n .style('font-size', (style === null || style === void 0 ? void 0 : style.fontSize) || '');\n const result = labels.some((label) => {\n var _a, _b;\n const textWidth = ((_b = (_a = textElement.text(label).node()) === null || _a === void 0 ? void 0 : _a.getBoundingClientRect()) === null || _b === void 0 ? void 0 : _b.width) || 0;\n return textWidth > maxWidth;\n });\n textElement.remove();\n return result;\n}\nfunction renderLabels(selection, { labels, style = {}, attrs = {}, }) {\n const text = selection.append('g').append('text');\n text.style('font-size', style.fontSize || '');\n text.style('font-weight', style.fontWeight || '');\n Object.entries(attrs).forEach(([name, value]) => {\n text.attr(name, value);\n });\n text.selectAll('tspan')\n .data(labels)\n .enter()\n .append('tspan')\n .attr('x', 0)\n .attr('dy', 0)\n .text((d) => d);\n return text;\n}\nexport function getLabelsSize({ labels, style, rotation, html, }) {\n var _a, _b, _c;\n if (!labels.filter(Boolean).length) {\n return { maxHeight: 0, maxWidth: 0 };\n }\n const container = select(document.body).append('div');\n // TODO: Why do we need this styles?\n // .attr('class', 'chartkit chartkit-theme_common');\n const result = { maxHeight: 0, maxWidth: 0 };\n let labelWrapper;\n if (html) {\n labelWrapper = container.append('div').style('position', 'absolute').node();\n const { height, width } = labels.reduce((acc, l) => {\n var _a, _b;\n if (labelWrapper) {\n labelWrapper.innerHTML = l;\n }\n const rect = labelWrapper === null || labelWrapper === void 0 ? void 0 : labelWrapper.getBoundingClientRect();\n return {\n width: Math.max(acc.width, (_a = rect === null || rect === void 0 ? void 0 : rect.width) !== null && _a !== void 0 ? _a : 0),\n height: Math.max(acc.height, (_b = rect === null || rect === void 0 ? void 0 : rect.height) !== null && _b !== void 0 ? _b : 0),\n };\n }, { height: 0, width: 0 });\n result.maxWidth = width;\n result.maxHeight = height;\n }\n else {\n const svg = container.append('svg');\n const textSelection = renderLabels(svg, { labels, style });\n if (rotation) {\n textSelection\n .attr('text-anchor', rotation > 0 ? 'start' : 'end')\n .style('transform', `rotate(${rotation}deg)`);\n }\n const rect = (_a = svg.select('g').node()) === null || _a === void 0 ? void 0 : _a.getBoundingClientRect();\n result.maxWidth = (_b = rect === null || rect === void 0 ? void 0 : rect.width) !== null && _b !== void 0 ? _b : 0;\n result.maxHeight = (_c = rect === null || rect === void 0 ? void 0 : rect.height) !== null && _c !== void 0 ? _c : 0;\n }\n container.remove();\n return result;\n}\nexport function wrapText(args) {\n const { text, style, width } = args;\n const height = getLabelsSize({\n labels: [text],\n style: style,\n }).maxHeight;\n // @ts-ignore\n const segmenter = new Intl.Segmenter([], { granularity: 'word' });\n const segments = Array.from(segmenter.segment(text));\n return segments.reduce((acc, s) => {\n const item = s;\n if (!acc.length) {\n acc.push({\n text: '',\n y: acc.length * height,\n });\n }\n let lastRow = acc[acc.length - 1];\n if (item.isWordLike &&\n getLabelsSize({\n labels: [lastRow.text + item.segment],\n style,\n }).maxWidth > width) {\n lastRow = {\n text: '',\n y: acc.length * height,\n };\n acc.push(lastRow);\n }\n lastRow.text += item.segment;\n return acc;\n }, []);\n}\n","import { wrapText } from './text';\nexport function getTicksCount({ axis, range }) {\n let ticksCount;\n if (axis.ticks.pixelInterval) {\n ticksCount = Math.ceil(range / axis.ticks.pixelInterval);\n }\n return ticksCount;\n}\nexport function isBandScale(scale) {\n return 'bandwidth' in scale && typeof scale.bandwidth === 'function';\n}\nexport function getScaleTicks(scale, ticksCount) {\n return 'ticks' in scale && typeof scale.ticks === 'function'\n ? scale.ticks(ticksCount)\n : scale.domain();\n}\nexport function getXAxisOffset() {\n return typeof window !== 'undefined' && window.devicePixelRatio > 1 ? 0 : 0.5;\n}\nfunction number(scale) {\n return (d) => Number(scale(d));\n}\nfunction center(scale, offset) {\n offset = Math.max(0, scale.bandwidth() - offset * 2) / 2;\n if (scale.round()) {\n offset = Math.round(offset);\n }\n return (d) => Number(scale(d)) + offset;\n}\nexport function getXTickPosition({ scale, offset }) {\n return isBandScale(scale) ? center(scale.copy(), offset) : number(scale.copy());\n}\nexport function getXAxisItems({ scale, count, maxCount, }) {\n let values = getScaleTicks(scale, count);\n if (maxCount && values.length > maxCount) {\n const step = Math.ceil(values.length / maxCount);\n values = values.filter((_, i) => i % step === 0);\n }\n return values;\n}\nexport function getMaxTickCount({ axis, width }) {\n const minTickWidth = parseInt(axis.labels.style.fontSize) + axis.labels.padding;\n return Math.floor(width / minTickWidth);\n}\nexport function getAxisHeight(args) {\n const { split, boundsHeight } = args;\n if (split.plots.length > 1) {\n return split.plots[0].height;\n }\n return boundsHeight;\n}\nexport function getAxisTitleRows(args) {\n const { axis, textMaxWidth } = args;\n if (axis.title.maxRowCount < 1) {\n return [];\n }\n const textRows = wrapText({\n text: axis.title.text,\n style: axis.title.style,\n width: textMaxWidth,\n });\n return textRows.reduce((acc, row, index) => {\n if (index < axis.title.maxRowCount) {\n acc.push(row);\n }\n else {\n acc[axis.title.maxRowCount - 1].text += row.text;\n }\n return acc;\n }, []);\n}\n","export function getLineDashArray(dashStyle, strokeWidth = 2) {\n const value = dashStyle.toLowerCase();\n const arrayValue = value\n .replace('shortdashdotdot', '3,1,1,1,1,1,')\n .replace('shortdashdot', '3,1,1,1')\n .replace('shortdot', '1,1,')\n .replace('shortdash', '3,1,')\n .replace('longdash', '8,3,')\n .replace(/dot/g, '1,3,')\n .replace('dash', '4,3,')\n .replace(/,$/, '')\n .split(',')\n .map((part) => {\n return `${parseInt(part, 10) * strokeWidth}`;\n });\n return arrayValue.join(',').replace(/NaN/g, 'none');\n}\n","import React from 'react';\nimport { axisLeft, axisRight, line, select } from 'd3';\nimport { block, calculateCos, calculateSin, formatAxisTickLabel, getAxisHeight, getAxisTitleRows, getClosestPointsRange, getLineDashArray, getScaleTicks, getTicksCount, handleOverflowingText, parseTransformStyle, setEllipsisForOverflowTexts, wrapText, } from '../../utils';\nimport './styles.css';\nconst b = block('d3-axis');\nfunction transformLabel(args) {\n const { node, axis } = args;\n let topOffset = axis.labels.lineHeight / 2;\n let leftOffset = axis.labels.margin;\n if (axis.position === 'left') {\n leftOffset = leftOffset * -1;\n }\n if (axis.labels.rotation) {\n if (axis.labels.rotation > 0) {\n leftOffset -= axis.labels.lineHeight * calculateSin(axis.labels.rotation);\n topOffset = axis.labels.lineHeight * calculateCos(axis.labels.rotation);\n if (axis.labels.rotation % 360 === 90) {\n topOffset = ((node === null || node === void 0 ? void 0 : node.getBoundingClientRect().width) || 0) / 2;\n }\n }\n else {\n topOffset = 0;\n if (axis.labels.rotation % 360 === -90) {\n topOffset = -((node === null || node === void 0 ? void 0 : node.getBoundingClientRect().width) || 0) / 2;\n }\n }\n return `translate(${leftOffset}px, ${topOffset}px) rotate(${axis.labels.rotation}deg)`;\n }\n return `translate(${leftOffset}px, ${topOffset}px)`;\n}\nfunction getAxisGenerator(args) {\n const { preparedAxis, axisGenerator: generator, width, height, scale } = args;\n const tickSize = preparedAxis.grid.enabled ? width * -1 : 0;\n const step = getClosestPointsRange(preparedAxis, getScaleTicks(scale));\n let axisGenerator = generator\n .tickSize(tickSize)\n .tickPadding(preparedAxis.labels.margin)\n .tickFormat((value) => {\n if (!preparedAxis.labels.enabled) {\n return '';\n }\n return formatAxisTickLabel({\n axis: preparedAxis,\n value,\n step,\n });\n });\n const ticksCount = getTicksCount({ axis: preparedAxis, range: height });\n if (ticksCount) {\n axisGenerator = axisGenerator.ticks(ticksCount);\n }\n return axisGenerator;\n}\nfunction getTitlePosition(args) {\n const { axis, axisHeight, rowCount } = args;\n if (rowCount < 1) {\n return { x: 0, y: 0 };\n }\n const x = -(axis.title.height -\n axis.title.height / rowCount +\n axis.title.margin +\n axis.labels.margin +\n axis.labels.width);\n let y;\n switch (axis.title.align) {\n case 'left': {\n y = axisHeight - axis.title.width / 2;\n break;\n }\n case 'right': {\n y = axis.title.width / 2;\n break;\n }\n case 'center': {\n y = axisHeight / 2;\n break;\n }\n }\n return { x, y };\n}\nexport const AxisY = (props) => {\n const { axes, width, height: totalHeight, scale, split, plotRef } = props;\n const height = getAxisHeight({ split, boundsHeight: totalHeight });\n const ref = React.useRef(null);\n React.useEffect(() => {\n if (!ref.current) {\n return;\n }\n const svgElement = select(ref.current);\n svgElement.selectAll('*').remove();\n const getAxisPosition = (axis) => {\n var _a;\n const top = ((_a = split.plots[axis.plotIndex]) === null || _a === void 0 ? void 0 : _a.top) || 0;\n if (axis.position === 'left') {\n return `translate(0, ${top}px)`;\n }\n return `translate(${width}px, 0)`;\n };\n const plotLines = axes.reduce((acc, axis) => {\n if (axis.plotLines.length) {\n acc.push(...axis.plotLines.map((plotLine) => {\n return Object.assign(Object.assign({}, plotLine), { transform: getAxisPosition(axis) });\n }));\n }\n return acc;\n }, []);\n const axisSelection = svgElement\n .selectAll('axis')\n .data(axes)\n .join('g')\n .attr('class', b())\n .style('transform', (d) => getAxisPosition(d));\n axisSelection.each((d, index, node) => {\n const seriesScale = scale[index];\n const axisItem = select(node[index]);\n const axisScale = seriesScale;\n const yAxisGenerator = getAxisGenerator({\n axisGenerator: d.position === 'left' ? axisLeft(axisScale) : axisRight(axisScale),\n preparedAxis: d,\n height,\n width,\n scale: seriesScale,\n });\n yAxisGenerator(axisItem);\n if (d.labels.enabled) {\n const tickTexts = axisItem\n .selectAll('.tick text')\n // The offset must be applied before the labels are rotated.\n // Therefore, we reset the values and make an offset in transform attribute.\n // FIXME: give up axisLeft(d3) and switch to our own generation method\n .attr('x', null)\n .attr('dy', null)\n .style('font-size', d.labels.style.fontSize)\n .style('transform', function () {\n return transformLabel({ node: this, axis: d });\n });\n const textMaxWidth = !d.labels.rotation || Math.abs(d.labels.rotation) % 360 !== 90\n ? d.labels.maxWidth\n : (height - d.labels.padding * (tickTexts.size() - 1)) / tickTexts.size();\n tickTexts.call(setEllipsisForOverflowTexts, textMaxWidth);\n }\n // remove overlapping ticks\n // Note: this method do not prepared for rotated labels\n if (!d.labels.rotation) {\n let elementY = 0;\n axisItem\n .selectAll('.tick')\n .filter(function (_d, tickIndex) {\n const tickNode = this;\n const r = tickNode.getBoundingClientRect();\n if (r.bottom > elementY && tickIndex !== 0) {\n return true;\n }\n elementY = r.top - d.labels.padding;\n return false;\n })\n .remove();\n }\n if (plotRef && d.plotLines.length > 0) {\n const plotLineClassName = b('plotLine');\n const plotLineContainer = select(plotRef.current);\n plotLineContainer.selectAll(`.${plotLineClassName}`).remove();\n const plotLinesSelection = plotLineContainer\n .selectAll(`.${plotLineClassName}`)\n .data(plotLines)\n .join('g')\n .attr('class', plotLineClassName)\n .style('transform', (plotLine) => plotLine.transform);\n plotLinesSelection\n .append('path')\n .attr('d', (plotLine) => {\n const plotLineValue = Number(axisScale(plotLine.value));\n const points = [\n [0, plotLineValue],\n [width, plotLineValue],\n ];\n return line()(points);\n })\n .attr('stroke', (plotLine) => plotLine.color)\n .attr('stroke-width', (plotLine) => plotLine.width)\n .attr('stroke-dasharray', (plotLine) => getLineDashArray(plotLine.dashStyle, plotLine.width))\n .attr('opacity', (plotLine) => plotLine.opacity);\n plotLinesSelection.each((plotLineData, i, nodes) => {\n const plotLineSelection = select(nodes[i]);\n if (plotLineData.layerPlacement === 'before') {\n plotLineSelection.lower();\n }\n else {\n plotLineSelection.raise();\n }\n });\n }\n return axisItem;\n });\n axisSelection\n .select('.domain')\n .attr('d', () => {\n const points = [\n [0, 0],\n [0, height],\n ];\n return line()(points);\n })\n .style('stroke', (d) => d.lineColor || '');\n svgElement.selectAll('.tick').each((_d, index, nodes) => {\n const tickNode = select(nodes[index]);\n if (parseTransformStyle(tickNode.attr('transform')).y === height) {\n // Remove stroke from tick that has the same y coordinate like domain\n tickNode.select('line').style('stroke', 'none');\n }\n });\n axisSelection\n .append('text')\n .attr('class', b('title'))\n .attr('text-anchor', 'middle')\n .attr('font-size', (d) => d.title.style.fontSize)\n .attr('transform', (d) => {\n const titleRows = wrapText({\n text: d.title.text,\n style: d.title.style,\n width: height,\n });\n const rowCount = Math.min(titleRows.length, d.title.maxRowCount);\n const { x, y } = getTitlePosition({ axis: d, axisHeight: height, rowCount });\n const angle = d.position === 'left' ? -90 : 90;\n return `translate(${x}, ${y}) rotate(${angle})`;\n })\n .selectAll('tspan')\n .data((d) => getAxisTitleRows({ axis: d, textMaxWidth: height }))\n .join('tspan')\n .attr('x', 0)\n .attr('y', (d) => d.y)\n .text((d) => d.text)\n .each((_d, index, nodes) => {\n if (index === nodes.length - 1) {\n handleOverflowingText(nodes[index], height);\n }\n });\n }, [axes, width, height, scale, split]);\n return React.createElement(\"g\", { ref: ref, className: b('container') });\n};\n","import { path, select } from 'd3';\nimport { getXAxisItems, getXAxisOffset, getXTickPosition } from '../axis';\nimport { calculateCos, calculateSin } from '../math';\nimport { getLabelsSize, setEllipsisForOverflowText } from '../text';\nfunction addDomain(selection, options) {\n const { size, color } = options;\n const domainPath = selection\n .selectAll('.domain')\n .data([null])\n .enter()\n .insert('path', '.tick')\n .attr('class', 'domain')\n .attr('d', `M0,0V0H${size}`);\n if (color) {\n domainPath.style('stroke', color);\n }\n}\nexport function axisBottom(args) {\n const { scale, ticks: { labelFormat = (value) => String(value), labelsPaddings = 0, labelsMargin = 0, labelsMaxWidth = Infinity, labelsStyle, labelsLineHeight, items: tickItems, count: ticksCount, maxTickCount, rotation = 0, tickColor, }, domain, } = args;\n const offset = getXAxisOffset();\n const position = getXTickPosition({ scale, offset });\n const values = getXAxisItems({ scale, count: ticksCount, maxCount: maxTickCount });\n const labelHeight = getLabelsSize({\n labels: values,\n style: labelsStyle,\n }).maxHeight;\n return function (selection) {\n var _a, _b, _c;\n const rect = (_a = selection.node()) === null || _a === void 0 ? void 0 : _a.getBoundingClientRect();\n const x = (rect === null || rect === void 0 ? void 0 : rect.x) || 0;\n const right = x + domain.size;\n const top = -((_c = (_b = tickItems === null || tickItems === void 0 ? void 0 : tickItems[0]) === null || _b === void 0 ? void 0 : _b[0]) !== null && _c !== void 0 ? _c : 0);\n let transform = `translate(0, ${labelHeight + labelsMargin - top}px)`;\n if (rotation) {\n const labelsOffsetTop = labelHeight * calculateCos(rotation) + labelsMargin - top;\n let labelsOffsetLeft = calculateSin(rotation) * labelHeight;\n if (Math.abs(rotation) % 360 === 90) {\n labelsOffsetLeft += ((rotation > 0 ? -1 : 1) * labelHeight) / 2;\n }\n transform = `translate(${-labelsOffsetLeft}px, ${labelsOffsetTop}px) rotate(${rotation}deg)`;\n }\n const tickPath = path();\n tickItems === null || tickItems === void 0 ? void 0 : tickItems.forEach(([start, end]) => {\n tickPath.moveTo(0, start);\n tickPath.lineTo(0, end);\n });\n selection\n .selectAll('.tick')\n .data(values)\n .order()\n .join((el) => {\n const tick = el.append('g').attr('class', 'tick');\n tick.append('path')\n .attr('d', tickPath.toString())\n .attr('stroke', tickColor !== null && tickColor !== void 0 ? tickColor : 'currentColor');\n tick.append('text')\n .text(labelFormat)\n .attr('fill', 'currentColor')\n .attr('text-anchor', () => {\n if (rotation) {\n return rotation > 0 ? 'start' : 'end';\n }\n return 'middle';\n })\n .style('transform', transform)\n .style('alignment-baseline', 'after-edge');\n return tick;\n })\n .attr('transform', function (d) {\n return `translate(${position(d) + offset}, ${top})`;\n });\n // Remove tick that has the same x coordinate like domain\n selection\n .select('.tick')\n .filter((d) => {\n return position(d) === 0;\n })\n .select('line')\n .remove();\n const labels = selection.selectAll('.tick text');\n // FIXME: handle rotated overlapping labels (with a smarter approach)\n if (rotation) {\n const maxWidth = labelsMaxWidth * calculateCos(rotation) + labelsLineHeight * calculateSin(rotation);\n labels.each(function () {\n setEllipsisForOverflowText(select(this), maxWidth);\n });\n }\n else {\n // remove overlapping labels\n let elementX = 0;\n selection\n .selectAll('.tick')\n .filter(function () {\n const node = this;\n const r = node.getBoundingClientRect();\n if (r.left < elementX) {\n return true;\n }\n elementX = r.right + labelsPaddings;\n return false;\n })\n .remove();\n // add an ellipsis to the labels that go beyond the boundaries of the chart\n labels.each(function (_d, i, nodes) {\n if (i === nodes.length - 1) {\n const currentElement = this;\n const prevElement = nodes[i - 1];\n const text = select(currentElement);\n const currentElementPosition = currentElement.getBoundingClientRect();\n const prevElementPosition = prevElement === null || prevElement === void 0 ? void 0 : prevElement.getBoundingClientRect();\n const lackingSpace = Math.max(0, currentElementPosition.right - right);\n if (lackingSpace) {\n const remainSpace = right - ((prevElementPosition === null || prevElementPosition === void 0 ? void 0 : prevElementPosition.right) || 0) - labelsPaddings;\n const translateX = currentElementPosition.width / 2 - lackingSpace;\n text.attr('text-anchor', 'end').attr('transform', `translate(${translateX},0)`);\n setEllipsisForOverflowText(text, remainSpace);\n }\n }\n });\n }\n const { size: domainSize, color: domainColor } = domain;\n selection\n .call(addDomain, { size: domainSize, color: domainColor })\n .style('font-size', (labelsStyle === null || labelsStyle === void 0 ? void 0 : labelsStyle.fontSize) || '');\n };\n}\n","import React from 'react';\nimport { select } from 'd3';\nimport { block, formatAxisTickLabel, getAxisTitleRows, getClosestPointsRange, getMaxTickCount, getScaleTicks, getTicksCount, handleOverflowingText, } from '../../utils';\nimport { axisBottom } from '../../utils/chart/axis-generators';\nimport './styles.css';\nconst b = block('d3-axis');\nfunction getLabelFormatter({ axis, scale }) {\n const ticks = getScaleTicks(scale);\n const tickStep = getClosestPointsRange(axis, ticks);\n return (value) => {\n if (!axis.labels.enabled) {\n return '';\n }\n return formatAxisTickLabel({\n axis,\n value,\n step: tickStep,\n });\n };\n}\nexport function getTitlePosition(args) {\n const { axis, width, rowCount } = args;\n if (rowCount < 1) {\n return { x: 0, y: 0 };\n }\n let x;\n const y = axis.title.height / rowCount + axis.title.margin + axis.labels.height + axis.labels.margin;\n switch (axis.title.align) {\n case 'left': {\n x = axis.title.width / 2;\n break;\n }\n case 'right': {\n x = width - axis.title.width / 2;\n break;\n }\n case 'center': {\n x = width / 2;\n break;\n }\n }\n return { x, y };\n}\nexport const AxisX = React.memo(function AxisX(props) {\n const { axis, width, height: totalHeight, scale, split } = props;\n const ref = React.useRef(null);\n React.useEffect(() => {\n if (!ref.current) {\n return;\n }\n let tickItems = [];\n if (axis.grid.enabled) {\n tickItems = new Array(split.plots.length || 1).fill(null).map((_, index) => {\n var _a, _b;\n const top = ((_a = split.plots[index]) === null || _a === void 0 ? void 0 : _a.top) || 0;\n const height = ((_b = split.plots[index]) === null || _b === void 0 ? void 0 : _b.height) || totalHeight;\n return [-top, -(top + height)];\n });\n }\n const xAxisGenerator = axisBottom({\n scale: scale,\n ticks: {\n items: tickItems,\n labelFormat: getLabelFormatter({ axis, scale }),\n labelsPaddings: axis.labels.padding,\n labelsMargin: axis.labels.margin,\n labelsStyle: axis.labels.style,\n labelsMaxWidth: axis.labels.maxWidth,\n labelsLineHeight: axis.labels.lineHeight,\n count: getTicksCount({ axis, range: width }),\n maxTickCount: getMaxTickCount({ axis, width }),\n rotation: axis.labels.rotation,\n },\n domain: {\n size: width,\n color: axis.lineColor,\n },\n });\n const svgElement = select(ref.current);\n svgElement.selectAll('*').remove();\n svgElement.call(xAxisGenerator).attr('class', b());\n // add an axis header if necessary\n if (axis.title.text) {\n const titleRows = getAxisTitleRows({ axis, textMaxWidth: width });\n svgElement\n .append('text')\n .attr('class', b('title'))\n .attr('transform', () => {\n const { x, y } = getTitlePosition({ axis, width, rowCount: titleRows.length });\n return `translate(${x}, ${y})`;\n })\n .attr('font-size', axis.title.style.fontSize)\n .attr('text-anchor', 'middle')\n .selectAll('tspan')\n .data(titleRows)\n .join('tspan')\n .attr('x', 0)\n .attr('y', (d) => d.y)\n .text((d) => d.text)\n .each((_d, index, nodes) => {\n if (index === axis.title.maxRowCount - 1) {\n handleOverflowingText(nodes[index], width);\n }\n });\n }\n }, [axis, width, totalHeight, scale, split]);\n return React.createElement(\"g\", { ref: ref });\n});\n","export const legendDefaults = {\n align: 'center',\n itemDistance: 20,\n margin: 15,\n itemStyle: {\n fontSize: '12px',\n },\n};\nexport const CONTINUOUS_LEGEND_SIZE = {\n height: 12,\n width: 200,\n};\n","import { symbolCircle, symbolDiamond2, symbolSquare, symbolTriangle2 } from 'd3';\nimport { SymbolType } from '../../constants';\nexport const getSymbolType = (index) => {\n const scatterStyles = Object.values(SymbolType);\n return scatterStyles[index % scatterStyles.length];\n};\n// This is an inverted triangle\n// Based on https://github.com/d3/d3-shape/blob/main/src/symbol/triangle2.js\nconst sqrt3 = Math.sqrt(3);\nconst triangleDown = {\n draw: (context, size) => {\n const s = Math.sqrt(size) * 0.6824;\n const t = s / 2;\n const u = (s * sqrt3) / 2;\n context.moveTo(0, s);\n context.lineTo(u, -t);\n context.lineTo(-u, -t);\n context.closePath();\n },\n};\nexport const getSymbol = (symbolType) => {\n switch (symbolType) {\n case SymbolType.Diamond:\n return symbolDiamond2;\n case SymbolType.Circle:\n return symbolCircle;\n case SymbolType.Square:\n return symbolSquare;\n case SymbolType.Triangle:\n return symbolTriangle2;\n case SymbolType.TriangleDown:\n return triangleDown;\n default:\n return symbolCircle;\n }\n};\n","export function createGradientRect(container, args) {\n const { x = 0, y = 0, width, height, interpolator } = args;\n const n = 256;\n const canvas = document.createElement('canvas');\n canvas.width = n;\n canvas.height = 1;\n const context = canvas.getContext('2d');\n if (!context) {\n throw Error(\"Couldn't get canvas context\");\n }\n for (let i = 0, j = n - 1; i < n; ++i) {\n context.fillStyle = interpolator(i / j);\n context.fillRect(i, 0, 1, height);\n }\n return container\n .append('image')\n .attr('preserveAspectRatio', 'none')\n .attr('height', height)\n .attr('width', width)\n .attr('x', x)\n .attr('y', y)\n .attr('xlink:href', canvas.toDataURL());\n}\n","import { range, scaleLinear } from 'd3';\nexport function getDomainForContinuousColorScale(args) {\n const { series } = args;\n const values = series.reduce((acc, s) => {\n switch (s.type) {\n case 'pie': {\n acc.push(...s.data.map((d) => d.value));\n break;\n }\n case 'bar-y': {\n acc.push(...s.data.map((d) => Number(d.x)));\n break;\n }\n case 'scatter':\n case 'bar-x':\n case 'waterfall':\n case 'line':\n case 'area': {\n acc.push(...s.data.map((d) => Number(d.y)));\n break;\n }\n default: {\n throw Error(`The method for calculation a domain for a continuous color scale for the \"${s.type}\" series is not defined`);\n }\n }\n return acc;\n }, []);\n return [Math.min(...values), Math.max(...values)];\n}\nexport function getDefaultColorStops(size) {\n return range(size).map((d) => d / size);\n}\nexport function getContinuesColorFn(args) {\n const { values, colors, stops: customStops } = args;\n const min = Math.min(...values);\n const max = Math.max(...values);\n const stops = customStops !== null && customStops !== void 0 ? customStops : getDefaultColorStops(colors.length);\n const color = scaleLinear(stops, colors);\n return (value) => {\n const colorValue = (value - min) / (max - min);\n return color(colorValue);\n };\n}\n","import React from 'react';\nimport { line as lineGenerator, scaleLinear, select, symbol } from 'd3';\nimport { CONTINUOUS_LEGEND_SIZE } from '../../constants';\nimport { formatNumber } from '../../libs';\nimport { block, createGradientRect, getContinuesColorFn, getLabelsSize, getLineDashArray, getSymbol, } from '../../utils';\nimport { axisBottom } from '../../utils/chart/axis-generators';\nimport './styles.css';\nconst b = block('d3-legend');\nconst getLegendPosition = (args) => {\n const { align, offsetWidth = 0, width, contentWidth } = args;\n const top = 0;\n if (align === 'left') {\n return { top, left: offsetWidth };\n }\n if (align === 'right') {\n return { top, left: offsetWidth + width - contentWidth };\n }\n return { top, left: offsetWidth + width / 2 - contentWidth / 2 };\n};\nconst appendPaginator = (args) => {\n const { container, offset, maxPage, legend, transform, onArrowClick } = args;\n const paginationLine = container.append('g').attr('class', b('pagination'));\n let computedWidth = 0;\n paginationLine\n .append('text')\n .text('▲')\n .attr('class', function () {\n return b('pagination-arrow', { inactive: offset === 0 });\n })\n .style('font-size', legend.itemStyle.fontSize)\n .each(function () {\n computedWidth += this.getComputedTextLength();\n })\n .on('click', function () {\n if (offset - 1 >= 0) {\n onArrowClick(offset - 1);\n }\n });\n paginationLine\n .append('text')\n .text(`${offset + 1}/${maxPage}`)\n .attr('class', b('pagination-counter'))\n .attr('x', computedWidth)\n .style('font-size', legend.itemStyle.fontSize)\n .each(function () {\n computedWidth += this.getComputedTextLength();\n });\n paginationLine\n .append('text')\n .text('▼')\n .attr('class', function () {\n return b('pagination-arrow', { inactive: offset === maxPage - 1 });\n })\n .attr('x', computedWidth)\n .style('font-size', legend.itemStyle.fontSize)\n .on('click', function () {\n if (offset + 1 < maxPage) {\n onArrowClick(offset + 1);\n }\n });\n paginationLine.attr('transform', transform);\n};\nconst legendSymbolGenerator = lineGenerator()\n .x((d) => d.x)\n .y((d) => d.y);\nfunction renderLegendSymbol(args) {\n const { selection, legend } = args;\n const line = selection.data();\n const getXPosition = (i) => {\n return line.slice(0, i).reduce((acc, legendItem) => {\n return (acc +\n legendItem.symbol.width +\n legendItem.symbol.padding +\n legendItem.textWidth +\n legend.itemDistance);\n }, 0);\n };\n selection.each(function (d, i) {\n const element = select(this);\n const x = getXPosition(i);\n const className = b('item-symbol', { shape: d.symbol.shape, unselected: !d.visible });\n const color = d.visible ? d.color : '';\n switch (d.symbol.shape) {\n case 'path': {\n const y = legend.lineHeight / 2;\n const points = [\n { x: x, y },\n { x: x + d.symbol.width, y },\n ];\n element\n .append('path')\n .attr('d', legendSymbolGenerator(points))\n .attr('fill', 'none')\n .attr('stroke-width', d.symbol.strokeWidth)\n .attr('class', className)\n .style('stroke', color);\n if (d.dashStyle) {\n element.attr('stroke-dasharray', getLineDashArray(d.dashStyle, d.symbol.strokeWidth));\n }\n break;\n }\n case 'rect': {\n const y = (legend.lineHeight - d.symbol.height) / 2;\n element\n .append('rect')\n .attr('x', x)\n .attr('y', y)\n .attr('width', d.symbol.width)\n .attr('height', d.symbol.height)\n .attr('rx', d.symbol.radius)\n .attr('class', className)\n .style('fill', color);\n break;\n }\n case 'symbol': {\n const y = legend.lineHeight / 2;\n element\n .append('svg:path')\n .attr('d', () => {\n const scatterSymbol = getSymbol(d.symbol.symbolType);\n // D3 takes size as square pixels, so we need to make square pixels size by multiplying\n // https://d3js.org/d3-shape/symbol#symbol\n return symbol(scatterSymbol, d.symbol.width * d.symbol.width)();\n })\n .attr('transform', () => {\n return 'translate(' + x + ',' + y + ')';\n })\n .attr('class', className)\n .style('fill', color);\n break;\n }\n }\n });\n}\nexport const Legend = (props) => {\n const { boundsWidth, chartSeries, legend, items, config, onItemClick, onUpdate } = props;\n const ref = React.useRef(null);\n const [paginationOffset, setPaginationOffset] = React.useState(0);\n React.useEffect(() => {\n setPaginationOffset(0);\n }, [boundsWidth]);\n React.useEffect(() => {\n var _a, _b, _c, _d, _e;\n if (!ref.current) {\n return;\n }\n const svgElement = select(ref.current);\n svgElement.selectAll('*').remove();\n let legendWidth = 0;\n if (legend.type === 'discrete') {\n const limit = (_a = config.pagination) === null || _a === void 0 ? void 0 : _a.limit;\n const pageItems = typeof limit === 'number'\n ? items.slice(paginationOffset * limit, paginationOffset * limit + limit)\n : items;\n pageItems.forEach((line, lineIndex) => {\n var _a;\n const legendLine = svgElement.append('g').attr('class', b('line'));\n const legendItemTemplate = legendLine\n .selectAll('legend-history')\n .data(line)\n .enter()\n .append('g')\n .attr('class', b('item'))\n .on('click', function (e, d) {\n onItemClick({ name: d.name, metaKey: e.metaKey });\n onUpdate === null || onUpdate === void 0 ? void 0 : onUpdate();\n });\n const getXPosition = (i) => {\n return line.slice(0, i).reduce((acc, legendItem) => {\n return (acc +\n legendItem.symbol.width +\n legendItem.symbol.padding +\n legendItem.textWidth +\n legend.itemDistance);\n }, 0);\n };\n renderLegendSymbol({ selection: legendItemTemplate, legend });\n legendItemTemplate\n .append('text')\n .attr('x', function (legendItem, i) {\n return (getXPosition(i) + legendItem.symbol.width + legendItem.symbol.padding);\n })\n .attr('height', legend.lineHeight)\n .attr('class', function (d) {\n const mods = { selected: d.visible, unselected: !d.visible };\n return b('item-text', mods);\n })\n .text(function (d) {\n return ('name' in d && d.name);\n })\n .style('font-size', legend.itemStyle.fontSize);\n const contentWidth = ((_a = legendLine.node()) === null || _a === void 0 ? void 0 : _a.getBoundingClientRect().width) || 0;\n const { left } = getLegendPosition({\n align: legend.align,\n width: boundsWidth,\n offsetWidth: 0,\n contentWidth,\n });\n const top = legend.lineHeight * lineIndex;\n legendLine.attr('transform', `translate(${[left, top].join(',')})`);\n });\n legendWidth = boundsWidth;\n if (config.pagination) {\n const transform = `translate(${[\n 0,\n legend.lineHeight * config.pagination.limit + legend.lineHeight / 2,\n ].join(',')})`;\n appendPaginator({\n container: svgElement,\n offset: paginationOffset,\n maxPage: config.pagination.maxPage,\n legend,\n transform,\n onArrowClick: setPaginationOffset,\n });\n }\n }\n else {\n // gradient rect\n const domain = (_b = legend.colorScale.domain) !== null && _b !== void 0 ? _b : [];\n const rectHeight = CONTINUOUS_LEGEND_SIZE.height;\n svgElement.call(createGradientRect, {\n y: legend.title.height + legend.title.margin,\n height: rectHeight,\n width: legend.width,\n interpolator: getContinuesColorFn({\n values: [0, 1],\n colors: legend.colorScale.colors,\n stops: legend.colorScale.stops,\n }),\n });\n // ticks\n const scale = scaleLinear(domain, [0, legend.width]);\n const xAxisGenerator = axisBottom({\n scale,\n ticks: {\n items: [[0, -rectHeight]],\n labelsMargin: legend.ticks.labelsMargin,\n labelsLineHeight: legend.ticks.labelsLineHeight,\n maxTickCount: 4,\n tickColor: '#fff',\n labelFormat: (value) => formatNumber(value, { unit: 'auto' }),\n },\n domain: {\n size: legend.width,\n color: 'transparent',\n },\n });\n const tickTop = legend.title.height + legend.title.margin + rectHeight;\n svgElement\n .append('g')\n .attr('transform', `translate(0, ${tickTop})`)\n .call(xAxisGenerator);\n legendWidth = legend.width;\n }\n if (legend.title.enable) {\n const { maxWidth: titleWidth } = getLabelsSize({\n labels: [legend.title.text],\n style: legend.title.style,\n });\n let dx = 0;\n switch (legend.title.align) {\n case 'center': {\n dx = legend.width / 2 - titleWidth / 2;\n break;\n }\n case 'right': {\n dx = legend.width - titleWidth;\n break;\n }\n case 'left':\n default: {\n dx = 0;\n break;\n }\n }\n svgElement\n .append('g')\n .attr('class', b('title'))\n .append('text')\n .attr('dx', dx)\n .attr('font-weight', (_c = legend.title.style.fontWeight) !== null && _c !== void 0 ? _c : null)\n .attr('font-size', (_d = legend.title.style.fontSize) !== null && _d !== void 0 ? _d : null)\n .attr('fill', (_e = legend.title.style.fontColor) !== null && _e !== void 0 ? _e : null)\n .style('alignment-baseline', 'before-edge')\n .text(legend.title.text);\n }\n const { left } = getLegendPosition({\n align: legend.align,\n width: boundsWidth,\n offsetWidth: config.offset.left,\n contentWidth: legendWidth,\n });\n svgElement.attr('transform', `translate(${[left, config.offset.top].join(',')})`);\n }, [boundsWidth, chartSeries, onItemClick, onUpdate, legend, items, config, paginationOffset]);\n return React.createElement(\"g\", { className: b(), ref: ref, width: boundsWidth, height: legend.height });\n};\n","import React from 'react';\nimport { block } from '../../utils';\nimport './styles.css';\nconst b = block('plot-title');\nexport const PlotTitle = (props) => {\n const { title } = props;\n if (!title) {\n return null;\n }\n const { x, y, text, style, height } = title;\n return (React.createElement(\"text\", { className: b(), dx: x, dy: y, dominantBaseline: \"middle\", textAnchor: \"middle\", style: Object.assign({ lineHeight: `${height}px` }, style) },\n React.createElement(\"tspan\", null, text)));\n};\n","import React from 'react';\nimport { block } from '../../utils';\nimport './styles.css';\nconst b = block('d3-title');\nexport const Title = (props) => {\n const { chartWidth, text, height, style } = props;\n return (React.createElement(\"text\", { className: b(), dx: chartWidth / 2, dy: height / 2, dominantBaseline: \"middle\", textAnchor: \"middle\", style: Object.assign({ lineHeight: `${height}px` }, style) },\n React.createElement(\"tspan\", null, text)));\n};\n","export function getWaterfallPointColor(point, series) {\n if (point.color) {\n return point.color;\n }\n if (point.total) {\n return series.color;\n }\n if (Number(point.y) > 0) {\n return series.positiveColor;\n }\n return series.negativeColor;\n}\nexport function getWaterfallPointSubtotal(point, series) {\n const pointIndex = series.data.indexOf(point);\n if (pointIndex === -1) {\n return null;\n }\n return series.data.reduce((sum, d, index) => {\n if (index <= pointIndex) {\n const value = d.total ? 0 : Number(d.y);\n return sum + value;\n }\n return sum;\n }, 0);\n}\n","import React from 'react';\nimport { dateTime } from '@gravity-ui/date-utils';\nimport get from 'lodash/get';\nimport { formatNumber } from '../../libs';\nimport { block, getDataCategoryValue, getWaterfallPointSubtotal } from '../../utils';\nconst b = block('tooltip');\nconst DEFAULT_DATE_FORMAT = 'DD.MM.YY';\nconst getRowData = (fieldName, data, axis) => {\n switch (axis === null || axis === void 0 ? void 0 : axis.type) {\n case 'category': {\n const categories = get(axis, 'categories', []);\n return getDataCategoryValue({ axisDirection: fieldName, categories, data });\n }\n case 'datetime': {\n const value = get(data, fieldName);\n if (!value) {\n return undefined;\n }\n return dateTime({ input: value }).format(DEFAULT_DATE_FORMAT);\n }\n case 'linear':\n default: {\n const value = get(data, fieldName);\n return formatNumber(value);\n }\n }\n};\nconst getXRowData = (data, xAxis) => getRowData('x', data, xAxis);\nconst getYRowData = (data, yAxis) => getRowData('y', data, yAxis);\nconst getMeasureValue = (data, xAxis, yAxis) => {\n var _a, _b;\n if (data.every((item) => ['pie', 'treemap', 'waterfall', 'sankey'].includes(item.series.type))) {\n return null;\n }\n if (data.some((item) => item.series.type === 'bar-y')) {\n return getYRowData((_a = data[0]) === null || _a === void 0 ? void 0 : _a.data, yAxis);\n }\n return getXRowData((_b = data[0]) === null || _b === void 0 ? void 0 : _b.data, xAxis);\n};\nexport const DefaultContent = ({ hovered, xAxis, yAxis }) => {\n const measureValue = getMeasureValue(hovered, xAxis, yAxis);\n return (React.createElement(React.Fragment, null,\n measureValue && React.createElement(\"div\", null, measureValue),\n hovered.map((seriesItem, i) => {\n var _a;\n const { data, series, closest } = seriesItem;\n const id = `${get(series, 'id')}_${i}`;\n const color = get(series, 'color');\n switch (series.type) {\n case 'scatter':\n case 'line':\n case 'area':\n case 'bar-x': {\n const value = (React.createElement(React.Fragment, null,\n series.name,\n \": \",\n getYRowData(data, yAxis)));\n return (React.createElement(\"div\", { key: id, className: b('content-row') },\n React.createElement(\"div\", { className: b('color'), style: { backgroundColor: color } }),\n React.createElement(\"div\", null, closest ? React.createElement(\"b\", null, value) : React.createElement(\"span\", null, value))));\n }\n case 'waterfall': {\n const isTotal = get(data, 'total', false);\n const subTotal = getWaterfallPointSubtotal(data, series);\n return (React.createElement(\"div\", { key: `${id}_${get(data, 'x')}` },\n !isTotal && (React.createElement(React.Fragment, null,\n React.createElement(\"div\", { key: id, className: b('content-row') },\n React.createElement(\"b\", null, getXRowData(data, xAxis))),\n React.createElement(\"div\", { className: b('content-row') },\n React.createElement(\"span\", null,\n series.name,\n \"\\u00A0\"),\n React.createElement(\"span\", null, getYRowData(data, yAxis))))),\n React.createElement(\"div\", { key: id, className: b('content-row') },\n isTotal ? 'Total' : 'Subtotal',\n \": \",\n subTotal)));\n }\n case 'bar-y': {\n const value = (React.createElement(React.Fragment, null,\n series.name,\n \": \",\n getXRowData(data, xAxis)));\n return (React.createElement(\"div\", { key: id, className: b('content-row') },\n React.createElement(\"div\", { className: b('color'), style: { backgroundColor: color } }),\n React.createElement(\"div\", null, closest ? React.createElement(\"b\", null, value) : React.createElement(\"span\", null, value))));\n }\n case 'pie':\n case 'treemap': {\n const seriesData = data;\n return (React.createElement(\"div\", { key: id, className: b('content-row') },\n React.createElement(\"div\", { className: b('color'), style: { backgroundColor: color } }),\n React.createElement(\"span\", null,\n seriesData.name || seriesData.id,\n \"\\u00A0\"),\n React.createElement(\"span\", null, seriesData.value)));\n }\n case 'sankey': {\n const { target, data: source } = seriesItem;\n const value = (_a = source.links.find((d) => d.name === (target === null || target === void 0 ? void 0 : target.name))) === null || _a === void 0 ? void 0 : _a.value;\n return (React.createElement(\"div\", { key: id, className: b('content-row') },\n React.createElement(\"div\", { className: b('color'), style: { backgroundColor: source.color } }),\n React.createElement(\"div\", { style: { display: 'flex', gap: 8, verticalAlign: 'center' } },\n source.name,\n \" \",\n React.createElement(\"span\", null, \"\\u2192\"),\n \" \", target === null || target === void 0 ? void 0 :\n target.name,\n \": \",\n value)));\n }\n default: {\n return null;\n }\n }\n })));\n};\n","import React from 'react';\nimport isNil from 'lodash/isNil';\nimport { DefaultContent } from './DefaultContent';\nexport const ChartTooltipContent = (props) => {\n const { hovered, xAxis, yAxis, renderer } = props;\n if (!hovered) {\n return null;\n }\n const customTooltip = renderer === null || renderer === void 0 ? void 0 : renderer({ hovered, xAxis, yAxis });\n return isNil(customTooltip) ? (React.createElement(DefaultContent, { hovered: hovered, xAxis: xAxis, yAxis: yAxis })) : (customTooltip);\n};\n","import React from 'react';\nimport { Popup, useVirtualElementRef } from '@gravity-ui/uikit';\nimport { useTooltip } from '../../hooks';\nimport { block } from '../../utils';\nimport { ChartTooltipContent } from './ChartTooltipContent';\nimport './styles.css';\nconst b = block('tooltip');\nexport const Tooltip = (props) => {\n const { tooltip, xAxis, yAxis, svgContainer, dispatcher, tooltipPinned, onOutsideClick } = props;\n const { hovered, pointerPosition } = useTooltip({ dispatcher, tooltip });\n const containerRect = (svgContainer === null || svgContainer === void 0 ? void 0 : svgContainer.getBoundingClientRect()) || { left: 0, top: 0 };\n const left = ((pointerPosition === null || pointerPosition === void 0 ? void 0 : pointerPosition[0]) || 0) + containerRect.left;\n const top = ((pointerPosition === null || pointerPosition === void 0 ? void 0 : pointerPosition[1]) || 0) + containerRect.top;\n const anchorRef = useVirtualElementRef({ rect: { left, top } });\n const handleOutsideClick = (e) => {\n if (svgContainer === null || svgContainer === void 0 ? void 0 : svgContainer.contains(e.target)) {\n return;\n }\n onOutsideClick === null || onOutsideClick === void 0 ? void 0 : onOutsideClick();\n };\n React.useEffect(() => {\n window.dispatchEvent(new CustomEvent('scroll'));\n }, [left, top]);\n return (hovered === null || hovered === void 0 ? void 0 : hovered.length) ? (React.createElement(Popup, { className: b({ pinned: tooltipPinned }), contentClassName: b('popup-content'), open: true, anchorRef: anchorRef, offset: [0, 20], placement: ['right', 'left', 'top', 'bottom'], modifiers: [{ name: 'preventOverflow', options: { padding: 10, altAxis: true } }], onOutsideClick: tooltipPinned ? handleOutsideClick : undefined },\n React.createElement(\"div\", { className: b('content') },\n React.createElement(ChartTooltipContent, { hovered: hovered, xAxis: xAxis, yAxis: yAxis, renderer: tooltip.renderer })))) : null;\n};\n","import React from 'react';\nexport const useTooltip = ({ dispatcher, tooltip }) => {\n const [{ hovered, pointerPosition }, setTooltipState] = React.useState({});\n React.useEffect(() => {\n if (tooltip === null || tooltip === void 0 ? void 0 : tooltip.enabled) {\n dispatcher.on('hover-shape.tooltip', (nextHovered, nextPointerPosition) => {\n setTooltipState({ hovered: nextHovered, pointerPosition: nextPointerPosition });\n });\n }\n return () => {\n if (tooltip === null || tooltip === void 0 ? void 0 : tooltip.enabled) {\n dispatcher.on('hover-shape.tooltip', null);\n }\n };\n }, [dispatcher, tooltip]);\n return { hovered, pointerPosition };\n};\n","function isTouchEnabled() {\n if (typeof window !== 'object') {\n return false;\n }\n return 'ontouchstart' in window || navigator.maxTouchPoints > 0;\n}\nexport const IS_TOUCH_ENABLED = isTouchEnabled();\n","import { Delaunay, bisector, sort } from 'd3';\nimport get from 'lodash/get';\nimport groupBy from 'lodash/groupBy';\nfunction getClosestPointsByXValue(x, y, points) {\n var _a, _b, _c, _d;\n const sorted = sort(points, (p) => p.x);\n const closestXIndex = bisector((p) => p.x).center(sorted, x);\n if (closestXIndex === -1) {\n return [];\n }\n const closestX = sorted[closestXIndex].x;\n const closestPoints = sort(points.filter((p) => p.x === closestX), (p) => p.y0);\n let closestYIndex = -1;\n if (y < ((_a = closestPoints[0]) === null || _a === void 0 ? void 0 : _a.y0)) {\n closestYIndex = 0;\n }\n else if (y > ((_b = closestPoints[closestPoints.length - 1]) === null || _b === void 0 ? void 0 : _b.y1)) {\n closestYIndex = closestPoints.length - 1;\n }\n else {\n closestYIndex = closestPoints.findIndex((p) => y > p.y0 && y < p.y1);\n if (closestYIndex === -1) {\n const sortedY = sort(closestPoints.map((p, index) => ({ index, y: p.y1 + (p.y0 - p.y1) / 2 })), (p) => p.y);\n const sortedYIndex = bisector((p) => p.y).center(sortedY, y);\n closestYIndex = (_d = (_c = sortedY[sortedYIndex]) === null || _c === void 0 ? void 0 : _c.index) !== null && _d !== void 0 ? _d : -1;\n }\n }\n return closestPoints.map((p, i) => ({\n data: p.data,\n series: p.series,\n closest: i === closestYIndex,\n }));\n}\nfunction getSeriesType(shapeData) {\n return get(shapeData, 'series.type') || get(shapeData, 'point.series.type');\n}\nexport function getClosestPoints(args) {\n const { position, shapesData, boundsHeight, boundsWidth } = args;\n const [pointerX, pointerY] = position;\n const result = [];\n const groups = groupBy(shapesData, getSeriesType);\n Object.entries(groups).forEach(([seriesType, list]) => {\n var _a, _b;\n switch (seriesType) {\n case 'bar-x': {\n const points = list.map((d) => ({\n data: d.data,\n series: d.series,\n x: d.x + d.width / 2,\n y0: d.y,\n y1: d.y + d.height,\n }));\n result.push(...getClosestPointsByXValue(pointerX, pointerY, points));\n break;\n }\n case 'waterfall': {\n const points = list.map((d) => ({\n data: d.data,\n series: d.series,\n x: d.x + d.width / 2,\n y0: d.y,\n y1: d.y + d.height,\n }));\n result.push(...getClosestPointsByXValue(pointerX, pointerY, points));\n break;\n }\n case 'area': {\n const points = list.reduce((acc, d) => {\n Array.prototype.push.apply(acc, d.points.map((p) => ({\n data: p.data,\n series: p.series,\n x: p.x,\n y0: p.y0,\n y1: p.y,\n })));\n return acc;\n }, []);\n result.push(...getClosestPointsByXValue(pointerX, pointerY, points));\n break;\n }\n case 'line': {\n const points = list.reduce((acc, d) => {\n acc.push(...d.points.map((p) => ({\n data: p.data,\n series: p.series,\n x: p.x,\n y0: p.y,\n y1: p.y,\n })));\n return acc;\n }, []);\n result.push(...getClosestPointsByXValue(pointerX, pointerY, points));\n break;\n }\n case 'bar-y': {\n const points = list;\n const sorted = sort(points, (p) => p.y);\n const closestYIndex = bisector((p) => p.y).center(sorted, pointerY);\n let closestPoints = [];\n let closestXIndex = -1;\n if (closestYIndex !== -1) {\n const closestY = sorted[closestYIndex].y;\n closestPoints = sort(points.filter((p) => p.y === closestY), (p) => p.x);\n const lastPoint = closestPoints[closestPoints.length - 1];\n if (pointerX < ((_a = closestPoints[0]) === null || _a === void 0 ? void 0 : _a.x)) {\n closestXIndex = 0;\n }\n else if (lastPoint && pointerX > lastPoint.x + lastPoint.width) {\n closestXIndex = closestPoints.length - 1;\n }\n else {\n closestXIndex = closestPoints.findIndex((p) => pointerX > p.x && pointerX < p.x + p.width);\n }\n }\n result.push(...closestPoints.map((p, i) => ({\n data: p.data,\n series: p.series,\n closest: i === closestXIndex,\n })));\n break;\n }\n case 'scatter': {\n const points = list;\n const delaunayX = Delaunay.from(points, (d) => d.point.x, (d) => d.point.y);\n const closestPoint = points[delaunayX.find(pointerX, pointerY)];\n if (closestPoint) {\n result.push({\n data: closestPoint.point.data,\n series: closestPoint.point.series,\n closest: true,\n });\n }\n break;\n }\n case 'pie': {\n const points = list.map((d) => d.segments).flat();\n const closestPoint = points.find((p) => {\n const { center } = p.data.pie;\n const x = pointerX - center[0];\n const y = pointerY - center[1];\n let angle = Math.atan2(y, x) + 0.5 * Math.PI;\n angle = angle < 0 ? Math.PI * 2 + angle : angle;\n const polarRadius = Math.sqrt(x * x + y * y);\n return (angle >= p.startAngle && angle <= p.endAngle && polarRadius < p.data.radius);\n });\n if (closestPoint) {\n result.push({\n data: closestPoint.data.series.data,\n series: closestPoint.data.series,\n closest: true,\n });\n }\n break;\n }\n case 'treemap': {\n const data = list;\n const closestPoint = (_b = data[0]) === null || _b === void 0 ? void 0 : _b.leaves.find((l) => {\n return (pointerX >= l.x0 && pointerX <= l.x1 && pointerY >= l.y0 && pointerY <= l.y1);\n });\n if (closestPoint) {\n result.push({\n data: closestPoint.data,\n series: data[0].series,\n closest: true,\n });\n }\n break;\n }\n case 'sankey': {\n const [data] = list;\n const closestLink = data.links.find((d) => {\n var _a;\n return isInsidePath({\n path: (_a = d.path) !== null && _a !== void 0 ? _a : '',\n strokeWidth: d.strokeWidth,\n point: [pointerX, pointerY],\n width: boundsWidth,\n height: boundsHeight,\n });\n });\n if (closestLink) {\n result.push({\n data: closestLink.source,\n target: closestLink.target,\n series: data.series,\n closest: true,\n });\n }\n break;\n }\n }\n });\n return result;\n}\nfunction isInsidePath(args) {\n const { path, point, width, height, strokeWidth } = args;\n const canvas = document.createElement('canvas');\n canvas.width = width;\n canvas.height = height;\n const ctx = canvas.getContext('2d');\n if (ctx) {\n ctx.lineWidth = strokeWidth;\n const path2D = new Path2D(path);\n ctx.stroke(path2D);\n return ctx.isPointInPath(path2D, ...point) || ctx.isPointInStroke(path2D, ...point);\n }\n return null;\n}\n","import React from 'react';\nexport function usePrevious(value) {\n const ref = React.useRef();\n React.useEffect(() => {\n ref.current = value;\n }, [value]);\n return ref.current;\n}\n","import get from 'lodash/get';\nconst getMarginTop = (args) => {\n const { chart, preparedTitle } = args;\n let marginTop = get(chart, 'margin.top', 0);\n if (preparedTitle === null || preparedTitle === void 0 ? void 0 : preparedTitle.height) {\n marginTop += preparedTitle.height;\n }\n return marginTop;\n};\nconst getMarginRight = (args) => {\n const { chart } = args;\n return get(chart, 'margin.right', 0);\n};\nexport const getPreparedChart = (args) => {\n const { chart, preparedTitle } = args;\n const marginTop = getMarginTop({ chart, preparedTitle });\n const marginBottom = get(chart, 'margin.bottom', 0);\n const marginLeft = get(chart, 'margin.left', 0);\n const marginRight = getMarginRight({ chart });\n return {\n margin: {\n top: marginTop,\n right: marginRight,\n bottom: marginBottom,\n left: marginLeft,\n },\n };\n};\n","export const getBoundsWidth = (args) => {\n const { chartWidth, chartMargin, preparedYAxis } = args;\n return (chartWidth -\n chartMargin.right -\n chartMargin.left -\n getWidthOccupiedByYAxis({ preparedAxis: preparedYAxis }));\n};\nexport function getYAxisWidth(axis) {\n let result = 0;\n if (axis === null || axis === void 0 ? void 0 : axis.title.text) {\n result += axis.title.height + axis.title.margin;\n }\n if (axis === null || axis === void 0 ? void 0 : axis.labels.enabled) {\n result += axis.labels.margin + axis.labels.width;\n }\n return result;\n}\nexport function getWidthOccupiedByYAxis(args) {\n const { preparedAxis } = args;\n let leftAxisWidth = 0;\n let rightAxisWidth = 0;\n preparedAxis === null || preparedAxis === void 0 ? void 0 : preparedAxis.forEach((axis) => {\n const axisWidth = getYAxisWidth(axis);\n if (axis.position === 'right') {\n rightAxisWidth = Math.max(rightAxisWidth, axisWidth);\n }\n else {\n leftAxisWidth = Math.max(leftAxisWidth, axisWidth);\n }\n });\n return leftAxisWidth + rightAxisWidth;\n}\n","import { select } from 'd3';\nimport clone from 'lodash/clone';\nimport get from 'lodash/get';\nimport merge from 'lodash/merge';\nimport { CONTINUOUS_LEGEND_SIZE, legendDefaults } from '../../constants';\nimport { getDefaultColorStops, getDomainForContinuousColorScale, getHorisontalSvgTextHeight, getLabelsSize, } from '../../utils';\nimport { getBoundsWidth } from '../useChartDimensions';\nimport { getYAxisWidth } from '../useChartDimensions/utils';\nexport const getPreparedLegend = (args) => {\n var _a, _b, _c, _d, _e, _f, _g;\n const { legend, series } = args;\n const enabled = Boolean(typeof (legend === null || legend === void 0 ? void 0 : legend.enabled) === 'boolean' ? legend === null || legend === void 0 ? void 0 : legend.enabled : series.length > 1);\n const defaultItemStyle = clone(legendDefaults.itemStyle);\n const itemStyle = get(legend, 'itemStyle');\n const computedItemStyle = merge(defaultItemStyle, itemStyle);\n const lineHeight = getHorisontalSvgTextHeight({ text: 'Tmp', style: computedItemStyle });\n const legendType = get(legend, 'type', 'discrete');\n const isTitleEnabled = Boolean((_a = legend === null || legend === void 0 ? void 0 : legend.title) === null || _a === void 0 ? void 0 : _a.text);\n const titleMargin = isTitleEnabled ? get(legend, 'title.margin', 4) : 0;\n const titleStyle = Object.assign({ fontSize: '12px', fontWeight: 'bold' }, get(legend, 'title.style'));\n const titleText = isTitleEnabled ? get(legend, 'title.text', '') : '';\n const titleHeight = isTitleEnabled\n ? getLabelsSize({ labels: [titleText], style: titleStyle }).maxHeight\n : 0;\n const ticks = {\n labelsMargin: 4,\n labelsLineHeight: 12,\n };\n const colorScale = {\n colors: [],\n domain: [],\n stops: [],\n };\n let height = 0;\n if (enabled) {\n height += titleHeight + titleMargin;\n if (legendType === 'continuous') {\n height += CONTINUOUS_LEGEND_SIZE.height;\n height += ticks.labelsLineHeight + ticks.labelsMargin;\n colorScale.colors = (_c = (_b = legend === null || legend === void 0 ? void 0 : legend.colorScale) === null || _b === void 0 ? void 0 : _b.colors) !== null && _c !== void 0 ? _c : [];\n colorScale.stops =\n (_e = (_d = legend === null || legend === void 0 ? void 0 : legend.colorScale) === null || _d === void 0 ? void 0 : _d.stops) !== null && _e !== void 0 ? _e : getDefaultColorStops(colorScale.colors.length);\n colorScale.domain =\n (_g = (_f = legend === null || legend === void 0 ? void 0 : legend.colorScale) === null || _f === void 0 ? void 0 : _f.domain) !== null && _g !== void 0 ? _g : getDomainForContinuousColorScale({ series });\n }\n else {\n height += lineHeight;\n }\n }\n const legendWidth = get(legend, 'width', CONTINUOUS_LEGEND_SIZE.width);\n return {\n align: get(legend, 'align', legendDefaults.align),\n enabled,\n height,\n itemDistance: get(legend, 'itemDistance', legendDefaults.itemDistance),\n itemStyle: computedItemStyle,\n lineHeight,\n margin: get(legend, 'margin', legendDefaults.margin),\n type: legendType,\n title: {\n enable: isTitleEnabled,\n text: titleText,\n margin: titleMargin,\n style: titleStyle,\n height: titleHeight,\n align: get(legend, 'title.align', 'left'),\n },\n width: legendWidth,\n ticks,\n colorScale,\n };\n};\nconst getFlattenLegendItems = (series) => {\n return series.reduce((acc, s) => {\n const legendEnabled = get(s, 'legend.enabled', true);\n if (legendEnabled) {\n acc.push(Object.assign(Object.assign({}, s), { symbol: s.legend.symbol }));\n }\n return acc;\n }, []);\n};\nconst getGroupedLegendItems = (args) => {\n const { maxLegendWidth, items, preparedLegend } = args;\n const result = [[]];\n let textWidthsInLine = [0];\n let lineIndex = 0;\n items.forEach((item) => {\n select(document.body)\n .append('text')\n .text(item.name)\n .style('font-size', preparedLegend.itemStyle.fontSize)\n .each(function () {\n const resultItem = clone(item);\n const textWidth = this.getBoundingClientRect().width;\n resultItem.textWidth = textWidth;\n textWidthsInLine.push(textWidth);\n const textsWidth = textWidthsInLine.reduce((acc, width) => acc + width, 0);\n result[lineIndex].push(resultItem);\n const symbolsWidth = result[lineIndex].reduce((acc, { symbol }) => {\n return acc + symbol.width + symbol.padding;\n }, 0);\n const distancesWidth = (result[lineIndex].length - 1) * preparedLegend.itemDistance;\n const isOverfilled = maxLegendWidth < textsWidth + symbolsWidth + distancesWidth;\n if (isOverfilled) {\n result[lineIndex].pop();\n lineIndex += 1;\n textWidthsInLine = [textWidth];\n const nextLineIndex = lineIndex;\n result[nextLineIndex] = [];\n result[nextLineIndex].push(resultItem);\n }\n })\n .remove();\n });\n return result;\n};\nexport const getLegendComponents = (args) => {\n const { chartWidth, chartHeight, chartMargin, series, preparedLegend, preparedYAxis } = args;\n const maxLegendWidth = getBoundsWidth({ chartWidth, chartMargin, preparedYAxis });\n const maxLegendHeight = (chartHeight - chartMargin.top - chartMargin.bottom - preparedLegend.margin) / 2;\n const flattenLegendItems = getFlattenLegendItems(series);\n const items = getGroupedLegendItems({\n maxLegendWidth,\n items: flattenLegendItems,\n preparedLegend,\n });\n let pagination;\n if (preparedLegend.type === 'discrete') {\n let legendHeight = preparedLegend.lineHeight * items.length;\n if (maxLegendHeight < legendHeight) {\n // extra line for paginator\n const limit = Math.floor(maxLegendHeight / preparedLegend.lineHeight) - 1;\n const maxPage = Math.ceil(items.length / limit);\n pagination = { limit, maxPage };\n legendHeight = maxLegendHeight;\n }\n preparedLegend.height = legendHeight;\n }\n const top = chartHeight - chartMargin.bottom - preparedLegend.height;\n const offset = {\n left: chartMargin.left + getYAxisWidth(preparedYAxis[0]),\n top,\n };\n return { legendConfig: { offset, pagination }, legendItems: items };\n};\n","export const seriesOptionsDefaults = {\n 'bar-x': {\n barMaxWidth: 50,\n barPadding: 0.1,\n groupPadding: 0.2,\n states: {\n hover: {\n enabled: true,\n brightness: 0.3,\n },\n inactive: {\n enabled: false,\n opacity: 0.5,\n },\n },\n },\n 'bar-y': {\n barMaxWidth: 50,\n barPadding: 0.1,\n groupPadding: 0.2,\n states: {\n hover: {\n enabled: true,\n brightness: 0.3,\n },\n inactive: {\n enabled: false,\n opacity: 0.5,\n },\n },\n },\n pie: {\n states: {\n hover: {\n enabled: true,\n brightness: 0.3,\n },\n inactive: {\n enabled: false,\n opacity: 0.5,\n },\n },\n },\n scatter: {\n states: {\n hover: {\n enabled: true,\n brightness: 0.3,\n },\n inactive: {\n enabled: false,\n opacity: 0.5,\n },\n },\n },\n line: {\n states: {\n hover: {\n enabled: true,\n brightness: 0.3,\n },\n inactive: {\n enabled: false,\n opacity: 0.5,\n },\n },\n },\n area: {\n states: {\n hover: {\n enabled: true,\n brightness: 0.3,\n },\n inactive: {\n enabled: false,\n opacity: 0.5,\n },\n },\n },\n treemap: {\n states: {\n hover: {\n enabled: true,\n brightness: 0.3,\n },\n inactive: {\n enabled: false,\n opacity: 0.5,\n },\n },\n },\n waterfall: {\n barMaxWidth: 50,\n barPadding: 0.1,\n states: {\n hover: {\n enabled: true,\n brightness: 0.3,\n },\n inactive: {\n enabled: false,\n opacity: 0.5,\n },\n },\n },\n};\n","import get from 'lodash/get';\nimport merge from 'lodash/merge';\nimport { getUniqId } from '../../utils';\nimport { DEFAULT_DATALABELS_PADDING, DEFAULT_DATALABELS_STYLE, DEFAULT_HALO_OPTIONS, DEFAULT_POINT_MARKER_OPTIONS, } from './constants';\nimport { getSeriesStackId, prepareLegendSymbol } from './utils';\nexport const DEFAULT_LINE_WIDTH = 1;\nexport const DEFAULT_MARKER = Object.assign(Object.assign({}, DEFAULT_POINT_MARKER_OPTIONS), { enabled: false });\nfunction prepareMarker(series, seriesOptions) {\n var _a;\n const seriesHoverState = get(seriesOptions, 'area.states.hover');\n const markerNormalState = Object.assign({}, DEFAULT_MARKER, (_a = seriesOptions === null || seriesOptions === void 0 ? void 0 : seriesOptions.area) === null || _a === void 0 ? void 0 : _a.marker, series.marker);\n const hoveredMarkerDefaultOptions = {\n enabled: true,\n radius: markerNormalState.radius,\n borderWidth: 1,\n borderColor: '#ffffff',\n halo: DEFAULT_HALO_OPTIONS,\n };\n return {\n states: {\n normal: markerNormalState,\n hover: merge(hoveredMarkerDefaultOptions, seriesHoverState === null || seriesHoverState === void 0 ? void 0 : seriesHoverState.marker),\n },\n };\n}\nexport function prepareArea(args) {\n const { colorScale, series: seriesList, seriesOptions, legend } = args;\n const defaultAreaWidth = get(seriesOptions, 'area.lineWidth', DEFAULT_LINE_WIDTH);\n const defaultOpacity = get(seriesOptions, 'area.opacity', 0.75);\n return seriesList.map((series) => {\n var _a, _b;\n const id = getUniqId();\n const name = series.name || '';\n const color = series.color || colorScale(name);\n const prepared = {\n type: series.type,\n color,\n opacity: get(series, 'opacity', defaultOpacity),\n lineWidth: get(series, 'lineWidth', defaultAreaWidth),\n name,\n id,\n visible: get(series, 'visible', true),\n legend: {\n enabled: get(series, 'legend.enabled', legend.enabled),\n symbol: prepareLegendSymbol(series),\n },\n data: series.data,\n stacking: series.stacking,\n stackId: getSeriesStackId(series),\n dataLabels: {\n enabled: ((_a = series.dataLabels) === null || _a === void 0 ? void 0 : _a.enabled) || false,\n style: Object.assign({}, DEFAULT_DATALABELS_STYLE, (_b = series.dataLabels) === null || _b === void 0 ? void 0 : _b.style),\n padding: get(series, 'dataLabels.padding', DEFAULT_DATALABELS_PADDING),\n allowOverlap: get(series, 'dataLabels.allowOverlap', false),\n html: get(series, 'dataLabels.html', false),\n },\n marker: prepareMarker(series, seriesOptions),\n cursor: get(series, 'cursor', null),\n yAxis: get(series, 'yAxis', 0),\n };\n return prepared;\n }, []);\n}\n","import get from 'lodash/get';\nimport { getLabelsSize, getUniqId } from '../../utils';\nimport { DEFAULT_DATALABELS_STYLE } from './constants';\nimport { getSeriesStackId, prepareLegendSymbol } from './utils';\nfunction prepareDataLabels(series) {\n var _a;\n const enabled = get(series, 'dataLabels.enabled', false);\n const style = Object.assign({}, DEFAULT_DATALABELS_STYLE, (_a = series.dataLabels) === null || _a === void 0 ? void 0 : _a.style);\n const html = get(series, 'dataLabels.html', false);\n const labels = enabled ? series.data.map((d) => String(d.label || d.x)) : [];\n const { maxHeight = 0, maxWidth = 0 } = getLabelsSize({\n labels,\n style,\n html,\n });\n const inside = series.stacking === 'percent' ? true : get(series, 'dataLabels.inside', false);\n return {\n enabled,\n inside,\n style,\n maxHeight,\n maxWidth,\n html,\n };\n}\nexport function prepareBarYSeries(args) {\n const { colorScale, series: seriesList, seriesOptions, legend } = args;\n return seriesList.map((series) => {\n var _a, _b, _c;\n const name = series.name || '';\n const color = series.color || colorScale(name);\n return {\n type: series.type,\n color,\n name,\n id: getUniqId(),\n visible: get(series, 'visible', true),\n legend: {\n enabled: get(series, 'legend.enabled', legend.enabled),\n symbol: prepareLegendSymbol(series),\n },\n data: series.data,\n stacking: series.stacking,\n stackId: getSeriesStackId(series),\n dataLabels: prepareDataLabels(series),\n cursor: get(series, 'cursor', null),\n borderRadius: (_c = (_a = series.borderRadius) !== null && _a !== void 0 ? _a : (_b = seriesOptions === null || seriesOptions === void 0 ? void 0 : seriesOptions['bar-y']) === null || _b === void 0 ? void 0 : _b.borderRadius) !== null && _c !== void 0 ? _c : 0,\n };\n }, []);\n}\n","import get from 'lodash/get';\nimport merge from 'lodash/merge';\nimport { DashStyle, LineCap } from '../../constants';\nimport { getUniqId } from '../../utils';\nimport { DEFAULT_DATALABELS_PADDING, DEFAULT_DATALABELS_STYLE, DEFAULT_HALO_OPTIONS, DEFAULT_LEGEND_SYMBOL_PADDING, DEFAULT_POINT_MARKER_OPTIONS, } from './constants';\nexport const DEFAULT_LEGEND_SYMBOL_SIZE = 16;\nexport const DEFAULT_LINE_WIDTH = 1;\nexport const DEFAULT_DASH_STYLE = DashStyle.Solid;\nexport const DEFAULT_MARKER = Object.assign(Object.assign({}, DEFAULT_POINT_MARKER_OPTIONS), { enabled: false });\nfunction prepareLinecap(dashStyle, series, seriesOptions) {\n const defaultLineCap = dashStyle === DashStyle.Solid ? LineCap.Round : LineCap.None;\n const lineCapFromSeriesOptions = get(seriesOptions, 'line.linecap', defaultLineCap);\n return get(series, 'linecap', lineCapFromSeriesOptions);\n}\nfunction prepareLineLegendSymbol(series, seriesOptions) {\n var _a;\n const symbolOptions = ((_a = series.legend) === null || _a === void 0 ? void 0 : _a.symbol) || {};\n const defaultLineWidth = get(seriesOptions, 'line.lineWidth', DEFAULT_LINE_WIDTH);\n return {\n shape: 'path',\n width: (symbolOptions === null || symbolOptions === void 0 ? void 0 : symbolOptions.width) || DEFAULT_LEGEND_SYMBOL_SIZE,\n padding: (symbolOptions === null || symbolOptions === void 0 ? void 0 : symbolOptions.padding) || DEFAULT_LEGEND_SYMBOL_PADDING,\n strokeWidth: get(series, 'lineWidth', defaultLineWidth),\n };\n}\nfunction prepareMarker(series, seriesOptions) {\n var _a;\n const seriesHoverState = get(seriesOptions, 'line.states.hover');\n const markerNormalState = Object.assign({}, DEFAULT_MARKER, (_a = seriesOptions === null || seriesOptions === void 0 ? void 0 : seriesOptions.line) === null || _a === void 0 ? void 0 : _a.marker, series.marker);\n const hoveredMarkerDefaultOptions = {\n enabled: true,\n radius: markerNormalState.radius,\n borderWidth: 1,\n borderColor: '#ffffff',\n halo: DEFAULT_HALO_OPTIONS,\n };\n return {\n states: {\n normal: markerNormalState,\n hover: merge(hoveredMarkerDefaultOptions, seriesHoverState === null || seriesHoverState === void 0 ? void 0 : seriesHoverState.marker),\n },\n };\n}\nexport function prepareLineSeries(args) {\n const { colorScale, series: seriesList, seriesOptions, legend } = args;\n const defaultLineWidth = get(seriesOptions, 'line.lineWidth', DEFAULT_LINE_WIDTH);\n const defaultDashStyle = get(seriesOptions, 'line.dashStyle', DEFAULT_DASH_STYLE);\n return seriesList.map((series) => {\n var _a, _b;\n const id = getUniqId();\n const name = series.name || '';\n const color = series.color || colorScale(name);\n const dashStyle = get(series, 'dashStyle', defaultDashStyle);\n const prepared = {\n type: series.type,\n color,\n lineWidth: get(series, 'lineWidth', defaultLineWidth),\n name,\n id,\n visible: get(series, 'visible', true),\n legend: {\n enabled: get(series, 'legend.enabled', legend.enabled),\n symbol: prepareLineLegendSymbol(series, seriesOptions),\n },\n data: series.data,\n dataLabels: {\n enabled: ((_a = series.dataLabels) === null || _a === void 0 ? void 0 : _a.enabled) || false,\n style: Object.assign({}, DEFAULT_DATALABELS_STYLE, (_b = series.dataLabels) === null || _b === void 0 ? void 0 : _b.style),\n padding: get(series, 'dataLabels.padding', DEFAULT_DATALABELS_PADDING),\n allowOverlap: get(series, 'dataLabels.allowOverlap', false),\n html: get(series, 'dataLabels.html', false),\n },\n marker: prepareMarker(series, seriesOptions),\n dashStyle: dashStyle,\n linecap: prepareLinecap(dashStyle, series, seriesOptions),\n opacity: get(series, 'opacity', null),\n cursor: get(series, 'cursor', null),\n yAxis: get(series, 'yAxis', 0),\n };\n return prepared;\n }, []);\n}\n","import get from 'lodash/get';\nimport merge from 'lodash/merge';\nimport { getSymbolType, getUniqId } from '../../utils';\nimport { DEFAULT_HALO_OPTIONS, DEFAULT_POINT_MARKER_OPTIONS } from './constants';\nimport { prepareLegendSymbol } from './utils';\nfunction prepareMarker(series, seriesOptions, index) {\n const seriesHoverState = get(seriesOptions, 'scatter.states.hover');\n const markerNormalState = Object.assign(Object.assign({}, DEFAULT_POINT_MARKER_OPTIONS), { enabled: true, symbol: series.symbolType || getSymbolType(index) });\n const hoveredMarkerDefaultOptions = {\n enabled: true,\n radius: markerNormalState.radius,\n borderWidth: 1,\n borderColor: '#ffffff',\n halo: DEFAULT_HALO_OPTIONS,\n };\n return {\n states: {\n normal: markerNormalState,\n hover: merge(hoveredMarkerDefaultOptions, seriesHoverState === null || seriesHoverState === void 0 ? void 0 : seriesHoverState.marker),\n },\n };\n}\nexport function prepareScatterSeries(args) {\n const { colorScale, series, seriesOptions, legend } = args;\n return series.map((s, index) => {\n const id = getUniqId();\n const name = 'name' in s && s.name ? s.name : '';\n const symbolType = s.symbolType || getSymbolType(index);\n const prepared = {\n id,\n type: s.type,\n name,\n color: get(s, 'color', colorScale(name)),\n visible: get(s, 'visible', true),\n legend: {\n enabled: get(s, 'legend.enabled', legend.enabled),\n symbol: prepareLegendSymbol(s, symbolType),\n },\n data: s.data,\n marker: prepareMarker(s, seriesOptions, index),\n cursor: get(s, 'cursor', null),\n yAxis: get(s, 'yAxis', 0),\n };\n return prepared;\n }, []);\n}\n","import React from 'react';\nimport { group, scaleOrdinal } from 'd3';\nimport { DEFAULT_PALETTE } from '../../constants';\nimport { getSeriesNames } from '../../utils';\nimport { getLegendComponents, getPreparedLegend } from './prepare-legend';\nimport { getPreparedOptions } from './prepare-options';\nimport { prepareSeries } from './prepareSeries';\nimport { getActiveLegendItems, getAllLegendItems } from './utils';\nexport const useSeries = (args) => {\n const { chartWidth, chartHeight, chartMargin, legend, preparedYAxis, series: { data: series, options: seriesOptions }, } = args;\n const preparedLegend = React.useMemo(() => getPreparedLegend({ legend, series }), [legend, series]);\n const preparedSeries = React.useMemo(() => {\n const seriesNames = getSeriesNames(series);\n const colorScale = scaleOrdinal(seriesNames, DEFAULT_PALETTE);\n const groupedSeries = group(series, (item) => item.type);\n return Array.from(groupedSeries).reduce((acc, [seriesType, seriesList]) => {\n acc.push(...prepareSeries({\n type: seriesType,\n series: seriesList,\n seriesOptions,\n legend: preparedLegend,\n colorScale,\n }));\n return acc;\n }, []);\n }, [series, seriesOptions, preparedLegend]);\n const preparedSeriesOptions = React.useMemo(() => {\n return getPreparedOptions(seriesOptions);\n }, [seriesOptions]);\n const [activeLegendItems, setActiveLegendItems] = React.useState(getActiveLegendItems(preparedSeries));\n const chartSeries = React.useMemo(() => {\n return preparedSeries.map((singleSeries) => {\n if (singleSeries.legend.enabled) {\n return Object.assign(Object.assign({}, singleSeries), { visible: activeLegendItems.includes(singleSeries.name) });\n }\n return singleSeries;\n });\n }, [preparedSeries, activeLegendItems]);\n const { legendConfig, legendItems } = React.useMemo(() => {\n return getLegendComponents({\n chartHeight,\n chartMargin,\n chartWidth,\n series: chartSeries,\n preparedLegend,\n preparedYAxis,\n });\n }, [chartWidth, chartHeight, chartMargin, chartSeries, preparedLegend, preparedYAxis]);\n const handleLegendItemClick = React.useCallback(({ name, metaKey }) => {\n const allItems = getAllLegendItems(preparedSeries);\n const onlyItemSelected = activeLegendItems.length === 1 && activeLegendItems.includes(name);\n let nextActiveLegendItems;\n if (metaKey && activeLegendItems.includes(name)) {\n nextActiveLegendItems = activeLegendItems.filter((item) => item !== name);\n }\n else if (metaKey && !activeLegendItems.includes(name)) {\n nextActiveLegendItems = activeLegendItems.concat(name);\n }\n else if (onlyItemSelected && allItems.length === 1) {\n nextActiveLegendItems = [];\n }\n else if (onlyItemSelected) {\n nextActiveLegendItems = allItems;\n }\n else {\n nextActiveLegendItems = [name];\n }\n setActiveLegendItems(nextActiveLegendItems);\n }, [preparedSeries, activeLegendItems]);\n // FIXME: remove effect. It initiates extra rerender\n React.useEffect(() => {\n setActiveLegendItems(getActiveLegendItems(preparedSeries));\n }, [preparedSeries]);\n return {\n legendItems,\n legendConfig,\n preparedLegend,\n preparedSeries: chartSeries,\n preparedSeriesOptions,\n handleLegendItemClick,\n };\n};\n","import { ChartError } from '../../libs';\nimport { prepareArea } from './prepare-area';\nimport { prepareBarXSeries } from './prepare-bar-x';\nimport { prepareBarYSeries } from './prepare-bar-y';\nimport { prepareLineSeries } from './prepare-line';\nimport { preparePieSeries } from './prepare-pie';\nimport { prepareSankeySeries } from './prepare-sankey';\nimport { prepareScatterSeries } from './prepare-scatter';\nimport { prepareTreemap } from './prepare-treemap';\nimport { prepareWaterfallSeries } from './prepare-waterfall';\nexport function prepareSeries(args) {\n const { type, series, seriesOptions, legend, colorScale } = args;\n switch (type) {\n case 'pie': {\n return series.reduce((acc, singleSeries) => {\n acc.push(...preparePieSeries({ series: singleSeries, seriesOptions, legend }));\n return acc;\n }, []);\n }\n case 'bar-x': {\n return prepareBarXSeries({\n series: series,\n legend,\n colorScale,\n seriesOptions,\n });\n }\n case 'bar-y': {\n return prepareBarYSeries({\n series: series,\n legend,\n colorScale,\n seriesOptions,\n });\n }\n case 'scatter': {\n return prepareScatterSeries({ series: series, legend, colorScale });\n }\n case 'line': {\n return prepareLineSeries({\n series: series,\n seriesOptions,\n legend,\n colorScale,\n });\n }\n case 'area': {\n return prepareArea({\n series: series,\n seriesOptions,\n legend,\n colorScale,\n });\n }\n case 'treemap': {\n return prepareTreemap({\n series: series,\n seriesOptions,\n legend,\n colorScale,\n });\n }\n case 'waterfall': {\n return prepareWaterfallSeries({\n series: series,\n legend,\n colorScale,\n });\n }\n case 'sankey': {\n return prepareSankeySeries({\n series: series,\n seriesOptions,\n colorScale,\n legend,\n });\n }\n default: {\n throw new ChartError({\n message: `Series type \"${type}\" does not support data preparation for series that do not support the presence of axes`,\n });\n }\n }\n}\n","import { scaleOrdinal } from 'd3';\nimport get from 'lodash/get';\nimport { DEFAULT_PALETTE } from '../../constants';\nimport { getUniqId } from '../../utils';\nimport { DEFAULT_DATALABELS_PADDING, DEFAULT_DATALABELS_STYLE } from './constants';\nimport { prepareLegendSymbol } from './utils';\nexport function preparePieSeries(args) {\n const { series, seriesOptions, legend } = args;\n const dataNames = series.data.map((d) => d.name);\n const colorScale = scaleOrdinal(dataNames, DEFAULT_PALETTE);\n const stackId = getUniqId();\n const seriesHoverState = get(seriesOptions, 'pie.states.hover');\n const preparedSeries = series.data.map((dataItem, i) => {\n var _a, _b, _c, _d, _e;\n const result = {\n type: 'pie',\n data: dataItem,\n dataLabels: {\n enabled: get(series, 'dataLabels.enabled', true),\n style: Object.assign({}, DEFAULT_DATALABELS_STYLE, (_a = series.dataLabels) === null || _a === void 0 ? void 0 : _a.style),\n padding: get(series, 'dataLabels.padding', DEFAULT_DATALABELS_PADDING),\n allowOverlap: get(series, 'dataLabels.allowOverlap', false),\n connectorPadding: get(series, 'dataLabels.connectorPadding', 5),\n connectorShape: get(series, 'dataLabels.connectorShape', 'polyline'),\n distance: get(series, 'dataLabels.distance', 25),\n connectorCurve: get(series, 'dataLabels.connectorCurve', 'basic'),\n html: get(series, 'dataLabels.html', false),\n },\n label: dataItem.label,\n value: dataItem.value,\n visible: typeof dataItem.visible === 'boolean' ? dataItem.visible : true,\n name: dataItem.name,\n id: `Series ${i}`,\n color: dataItem.color || colorScale(dataItem.name),\n legend: {\n enabled: get(series, 'legend.enabled', legend.enabled),\n symbol: prepareLegendSymbol(series),\n },\n center: series.center || ['50%', '50%'],\n borderColor: series.borderColor || '',\n borderRadius: (_b = series.borderRadius) !== null && _b !== void 0 ? _b : 0,\n borderWidth: (_c = series.borderWidth) !== null && _c !== void 0 ? _c : 1,\n radius: (_e = (_d = dataItem.radius) !== null && _d !== void 0 ? _d : series.radius) !== null && _e !== void 0 ? _e : '100%',\n innerRadius: series.innerRadius || 0,\n stackId,\n states: {\n hover: {\n halo: {\n enabled: get(seriesHoverState, 'halo.enabled', true),\n opacity: get(seriesHoverState, 'halo.opacity', 0.25),\n size: get(seriesHoverState, 'halo.size', 10),\n },\n },\n },\n renderCustomShape: series.renderCustomShape,\n opacity: get(dataItem, 'opacity', null),\n cursor: get(series, 'cursor', null),\n };\n return result;\n });\n return preparedSeries;\n}\n","import get from 'lodash/get';\nimport { getUniqId } from '../../utils';\nimport { DEFAULT_DATALABELS_PADDING, DEFAULT_DATALABELS_STYLE } from './constants';\nimport { getSeriesStackId, prepareLegendSymbol } from './utils';\nexport function prepareBarXSeries(args) {\n const { colorScale, series: seriesList, seriesOptions, legend } = args;\n return seriesList.map((series) => {\n var _a, _b, _c, _d, _e;\n const name = series.name || '';\n const color = series.color || colorScale(name);\n return {\n type: series.type,\n color,\n name,\n id: getUniqId(),\n visible: get(series, 'visible', true),\n legend: {\n enabled: get(series, 'legend.enabled', legend.enabled),\n symbol: prepareLegendSymbol(series),\n },\n data: series.data,\n stacking: series.stacking,\n stackId: getSeriesStackId(series),\n dataLabels: {\n enabled: ((_a = series.dataLabels) === null || _a === void 0 ? void 0 : _a.enabled) || false,\n inside: typeof ((_b = series.dataLabels) === null || _b === void 0 ? void 0 : _b.inside) === 'boolean'\n ? (_c = series.dataLabels) === null || _c === void 0 ? void 0 : _c.inside\n : false,\n style: Object.assign({}, DEFAULT_DATALABELS_STYLE, (_d = series.dataLabels) === null || _d === void 0 ? void 0 : _d.style),\n allowOverlap: ((_e = series.dataLabels) === null || _e === void 0 ? void 0 : _e.allowOverlap) || false,\n padding: get(series, 'dataLabels.padding', DEFAULT_DATALABELS_PADDING),\n html: get(series, 'dataLabels.html', false),\n },\n cursor: get(series, 'cursor', null),\n yAxis: get(series, 'yAxis', 0),\n borderRadius: get(series, 'borderRadius', get(seriesOptions, 'bar-x.borderRadius', 0)),\n };\n }, []);\n}\n","import get from 'lodash/get';\nimport { LayoutAlgorithm } from '../../constants';\nimport { getUniqId } from '../../utils';\nimport { DEFAULT_DATALABELS_PADDING, DEFAULT_DATALABELS_STYLE } from './constants';\nimport { prepareLegendSymbol } from './utils';\nexport function prepareTreemap(args) {\n const { colorScale, legend, series } = args;\n return series.map((s) => {\n var _a;\n const id = getUniqId();\n const name = s.name || '';\n const color = s.color || colorScale(name);\n const preparedSeries = {\n color,\n data: s.data,\n dataLabels: {\n enabled: get(s, 'dataLabels.enabled', true),\n style: Object.assign({}, DEFAULT_DATALABELS_STYLE, (_a = s.dataLabels) === null || _a === void 0 ? void 0 : _a.style),\n padding: get(s, 'dataLabels.padding', DEFAULT_DATALABELS_PADDING),\n allowOverlap: get(s, 'dataLabels.allowOverlap', false),\n html: get(s, 'dataLabels.html', false),\n align: get(s, 'dataLabels.align', 'left'),\n },\n id,\n type: s.type,\n name,\n visible: get(s, 'visible', true),\n legend: {\n enabled: get(s, 'legend.enabled', legend.enabled),\n symbol: prepareLegendSymbol(s),\n },\n levels: s.levels,\n layoutAlgorithm: get(s, 'layoutAlgorithm', LayoutAlgorithm.Binary),\n cursor: get(s, 'cursor', null),\n };\n return preparedSeries;\n });\n}\n","import get from 'lodash/get';\nimport { DEFAULT_PALETTE } from '../../constants';\nimport { getUniqId } from '../../utils';\nimport { DEFAULT_DATALABELS_PADDING, DEFAULT_DATALABELS_STYLE } from './constants';\nimport { prepareLegendSymbol } from './utils';\nexport function prepareWaterfallSeries(args) {\n const { colorScale, series: seriesList, legend } = args;\n const [, negativeColor, positiveColor] = DEFAULT_PALETTE;\n return seriesList.map((series) => {\n var _a, _b, _c;\n const name = series.name || '';\n const color = series.color || colorScale(name);\n const prepared = {\n type: series.type,\n color,\n positiveColor: positiveColor,\n negativeColor: negativeColor,\n name,\n id: getUniqId(),\n visible: get(series, 'visible', true),\n legend: {\n enabled: get(series, 'legend.enabled', legend.enabled),\n symbol: prepareLegendSymbol(series),\n },\n data: series.data,\n dataLabels: {\n enabled: ((_a = series.dataLabels) === null || _a === void 0 ? void 0 : _a.enabled) || false,\n style: Object.assign({}, DEFAULT_DATALABELS_STYLE, (_b = series.dataLabels) === null || _b === void 0 ? void 0 : _b.style),\n allowOverlap: ((_c = series.dataLabels) === null || _c === void 0 ? void 0 : _c.allowOverlap) || false,\n padding: get(series, 'dataLabels.padding', DEFAULT_DATALABELS_PADDING),\n html: get(series, 'dataLabels.html', false),\n },\n cursor: get(series, 'cursor', null),\n };\n return prepared;\n }, []);\n}\n","import get from 'lodash/get';\nimport { getUniqId } from '../../utils';\nimport { DEFAULT_DATALABELS_STYLE } from './constants';\nimport { prepareLegendSymbol } from './utils';\nexport function prepareSankeySeries(args) {\n const { colorScale, legend, series } = args;\n return series.map((s) => {\n var _a;\n const id = getUniqId();\n const name = s.name || '';\n const color = colorScale(name);\n const preparedSeries = {\n color,\n data: s.data.map((d) => {\n var _a;\n return ({\n name: d.name,\n color: (_a = d.color) !== null && _a !== void 0 ? _a : colorScale(d.name),\n links: d.links,\n });\n }),\n dataLabels: {\n enabled: get(s, 'dataLabels.enabled', true),\n style: Object.assign({}, DEFAULT_DATALABELS_STYLE, (_a = s.dataLabels) === null || _a === void 0 ? void 0 : _a.style),\n },\n id,\n type: s.type,\n name,\n visible: get(s, 'visible', true),\n legend: {\n enabled: get(s, 'legend.enabled', legend.enabled),\n symbol: prepareLegendSymbol(s),\n },\n cursor: get(s, 'cursor', null),\n };\n return preparedSeries;\n });\n}\n","import merge from 'lodash/merge';\nimport { seriesOptionsDefaults } from '../../constants';\nexport const getPreparedOptions = (options) => {\n return merge({}, seriesOptionsDefaults, options);\n};\n","import React from 'react';\nimport { extent, scaleBand, scaleLinear, scaleLog, scaleUtc } from 'd3';\nimport get from 'lodash/get';\nimport { DEFAULT_AXIS_TYPE } from '../../constants';\nimport { CHART_SERIES_WITH_VOLUME_ON_Y_AXIS, getAxisHeight, getDataCategoryValue, getDefaultMaxXAxisValue, getDomainDataXBySeries, getDomainDataYBySeries, getOnlyVisibleSeries, isAxisRelatedSeries, isSeriesWithCategoryValues, } from '../../utils';\nconst isNumericalArrayData = (data) => {\n return data.every((d) => typeof d === 'number' || d === null);\n};\nconst filterCategoriesByVisibleSeries = (args) => {\n const { axisDirection, categories, series } = args;\n const visibleCategories = new Set();\n series.forEach((s) => {\n if (isSeriesWithCategoryValues(s)) {\n s.data.forEach((d) => {\n visibleCategories.add(getDataCategoryValue({ axisDirection, categories, data: d }));\n });\n }\n });\n return categories.filter((c) => visibleCategories.has(c));\n};\nexport function createYScale(axis, series, boundsHeight) {\n const yType = get(axis, 'type', DEFAULT_AXIS_TYPE);\n const yMin = get(axis, 'min');\n const yCategories = get(axis, 'categories');\n const yTimestamps = get(axis, 'timestamps');\n switch (yType) {\n case 'linear':\n case 'logarithmic': {\n const domain = getDomainDataYBySeries(series);\n const range = [boundsHeight, boundsHeight * axis.maxPadding];\n if (isNumericalArrayData(domain)) {\n const [domainYMin, domainMax] = extent(domain);\n const yMinValue = typeof yMin === 'number' ? yMin : domainYMin;\n let yMaxValue = domainMax;\n if (series.some((s) => CHART_SERIES_WITH_VOLUME_ON_Y_AXIS.includes(s.type))) {\n yMaxValue = Math.max(yMaxValue, 0);\n }\n const scaleFn = yType === 'logarithmic' ? scaleLog : scaleLinear;\n return scaleFn().domain([yMinValue, yMaxValue]).range(range).nice();\n }\n break;\n }\n case 'category': {\n if (yCategories) {\n const filteredCategories = filterCategoriesByVisibleSeries({\n axisDirection: 'y',\n categories: yCategories,\n series: series,\n });\n return scaleBand().domain(filteredCategories).range([boundsHeight, 0]);\n }\n break;\n }\n case 'datetime': {\n const range = [boundsHeight, boundsHeight * axis.maxPadding];\n if (yTimestamps) {\n const [yMin, yMax] = extent(yTimestamps);\n return scaleUtc().domain([yMin, yMax]).range(range).nice();\n }\n else {\n const domain = getDomainDataYBySeries(series);\n if (isNumericalArrayData(domain)) {\n const [yMin, yMax] = extent(domain);\n return scaleUtc().domain([yMin, yMax]).range(range).nice();\n }\n }\n break;\n }\n }\n throw new Error('Failed to create yScale');\n}\nfunction calculateXAxisPadding(series) {\n let result = 0;\n series.forEach((s) => {\n switch (s.type) {\n case 'bar-y': {\n // Since labels can be located to the right of the bar, need to add an additional space\n const inside = get(s, 'dataLabels.inside');\n if (!inside) {\n const labelsMaxWidth = get(s, 'dataLabels.maxWidth', 0);\n result = Math.max(result, labelsMaxWidth);\n }\n break;\n }\n }\n });\n return result;\n}\nexport function createXScale(axis, series, boundsWidth) {\n const xMin = get(axis, 'min');\n const xMax = getDefaultMaxXAxisValue(series);\n const xType = get(axis, 'type', DEFAULT_AXIS_TYPE);\n const xCategories = get(axis, 'categories');\n const xTimestamps = get(axis, 'timestamps');\n const maxPadding = get(axis, 'maxPadding', 0);\n const xAxisMinPadding = boundsWidth * maxPadding + calculateXAxisPadding(series);\n const xRange = [0, boundsWidth - xAxisMinPadding];\n switch (xType) {\n case 'linear':\n case 'logarithmic': {\n const domain = getDomainDataXBySeries(series);\n if (isNumericalArrayData(domain)) {\n const [domainXMin, domainXMax] = extent(domain);\n const xMinValue = typeof xMin === 'number' ? xMin : domainXMin;\n const xMaxValue = typeof xMax === 'number' ? Math.max(xMax, domainXMax) : domainXMax;\n const scaleFn = xType === 'logarithmic' ? scaleLog : scaleLinear;\n return scaleFn().domain([xMinValue, xMaxValue]).range(xRange).nice();\n }\n break;\n }\n case 'category': {\n if (xCategories) {\n const filteredCategories = filterCategoriesByVisibleSeries({\n axisDirection: 'x',\n categories: xCategories,\n series: series,\n });\n const xScale = scaleBand().domain(filteredCategories).range([0, boundsWidth]);\n if (xScale.step() / 2 < xAxisMinPadding) {\n xScale.range(xRange);\n }\n return xScale;\n }\n break;\n }\n case 'datetime': {\n if (xTimestamps) {\n const [xMin, xMax] = extent(xTimestamps);\n return scaleUtc().domain([xMin, xMax]).range(xRange).nice();\n }\n else {\n const domain = getDomainDataXBySeries(series);\n if (isNumericalArrayData(domain)) {\n const [xMin, xMax] = extent(domain);\n return scaleUtc().domain([xMin, xMax]).range(xRange).nice();\n }\n }\n break;\n }\n }\n throw new Error('Failed to create xScale');\n}\nconst createScales = (args) => {\n const { boundsWidth, boundsHeight, series, xAxis, yAxis, split } = args;\n let visibleSeries = getOnlyVisibleSeries(series);\n // Reassign to all series in case of all series unselected,\n // otherwise we will get an empty space without grid\n visibleSeries = visibleSeries.length === 0 ? series : visibleSeries;\n return {\n xScale: createXScale(xAxis, visibleSeries, boundsWidth),\n yScale: yAxis.map((axis, index) => {\n const axisSeries = series.filter((s) => {\n const seriesAxisIndex = get(s, 'yAxis', 0);\n return seriesAxisIndex === index;\n });\n const visibleAxisSeries = getOnlyVisibleSeries(axisSeries);\n const axisHeight = getAxisHeight({ boundsHeight, split });\n return createYScale(axis, visibleAxisSeries.length ? visibleAxisSeries : axisSeries, axisHeight);\n }),\n };\n};\n/**\n * Uses to create scales for axis related series\n */\nexport const useAxisScales = (args) => {\n const { boundsWidth, boundsHeight, series, xAxis, yAxis, split } = args;\n return React.useMemo(() => {\n let xScale;\n let yScale;\n const hasAxisRelatedSeries = series.some(isAxisRelatedSeries);\n if (hasAxisRelatedSeries) {\n ({ xScale, yScale } = createScales({\n boundsWidth,\n boundsHeight,\n series,\n xAxis,\n yAxis,\n split,\n }));\n }\n return { xScale, yScale };\n }, [boundsWidth, boundsHeight, series, xAxis, yAxis, split]);\n};\n","import sortBy from 'lodash/sortBy';\nexport function getLeftPosition(label) {\n switch (label.textAnchor) {\n case 'start': {\n return label.x;\n }\n case 'middle': {\n return label.x - label.size.width / 2;\n }\n case 'end': {\n return label.x - label.size.width;\n }\n default: {\n return label.x;\n }\n }\n}\nexport function getOverlappingByX(rect1, rect2, gap = 0) {\n const left1 = getLeftPosition(rect1);\n const right1 = left1 + rect1.size.width;\n const left2 = getLeftPosition(rect2);\n const right2 = left2 + rect2.size.width;\n return Math.max(0, Math.min(right1, right2) - Math.max(left1, left2) + gap);\n}\nexport function getOverlappingByY(rect1, rect2, gap = 0) {\n const top1 = rect1.y - rect1.size.height;\n const bottom1 = rect1.y;\n const top2 = rect2.y - rect2.size.height;\n const bottom2 = rect2.y;\n return Math.max(0, Math.min(bottom1, bottom2) - Math.max(top1, top2) + gap);\n}\nexport function isLabelsOverlapping(label1, label2, padding = 0) {\n return Boolean(getOverlappingByX(label1, label2, padding) && getOverlappingByY(label1, label2, padding));\n}\nexport function filterOverlappingLabels(labels) {\n const result = [];\n const sorted = sortBy(labels, (d) => d.y, getLeftPosition);\n sorted.forEach((label) => {\n if (!result.some((l) => isLabelsOverlapping(label, l))) {\n result.push(label);\n }\n });\n return result;\n}\n","import React from 'react';\nimport { Portal } from '@gravity-ui/uikit';\nexport const HtmlLayer = (props) => {\n const { htmlLayout, preparedData } = props;\n const items = React.useMemo(() => {\n if (Array.isArray(preparedData)) {\n return preparedData.reduce((result, d) => {\n result.push(...d.htmlElements);\n return result;\n }, []);\n }\n else {\n return preparedData.htmlElements;\n }\n }, [preparedData]);\n if (!htmlLayout) {\n return null;\n }\n return (React.createElement(Portal, { container: htmlLayout }, items.map((item, index) => {\n return (React.createElement(\"div\", { key: index, dangerouslySetInnerHTML: { __html: item.content }, style: { position: 'absolute', left: item.x, top: item.y } }));\n })));\n};\n","import { symbol } from 'd3';\nimport get from 'lodash/get';\nimport { SymbolType } from '../../constants';\nimport { block, getSymbol } from '../../utils';\nconst b = block('d3-marker');\nconst haloClassName = b('halo');\nconst symbolClassName = b('symbol');\nexport function renderMarker(selection) {\n const markerSelection = selection\n .attr('class', b('wrapper'))\n .attr('visibility', getMarkerVisibility)\n .attr('transform', (d) => {\n return `translate(${d.point.x},${d.point.y})`;\n });\n markerSelection\n .append('path')\n .attr('class', haloClassName)\n .attr('d', (d) => {\n const series = d.point.series;\n const type = series.marker.states.normal.symbol;\n const radius = get(d.point.data, 'radius', series.marker.states.hover.radius);\n const haloSize = series.marker.states.hover.halo.size;\n return getMarkerSymbol(type, radius + haloSize);\n })\n .attr('fill', (d) => d.point.series.color)\n .attr('opacity', (d) => d.point.series.marker.states.hover.halo.opacity)\n .attr('z-index', -1)\n .attr('visibility', getMarkerHaloVisibility);\n markerSelection\n .append('path')\n .attr('class', symbolClassName)\n .call(setMarker, 'normal')\n .attr('fill', (d) => d.point.series.color);\n return markerSelection;\n}\nexport function getMarkerVisibility(d) {\n const markerStates = d.point.series.marker.states;\n let enabled;\n if (d.hovered) {\n enabled = markerStates.hover.enabled && d.hovered;\n }\n else {\n enabled =\n markerStates.normal.enabled || get(d.point.data, 'marker.states.normal.enabled', false);\n }\n return enabled ? '' : 'hidden';\n}\nexport function getMarkerHaloVisibility(d) {\n const markerStates = d.point.series.marker.states;\n const enabled = markerStates.hover.halo.enabled && d.hovered;\n return enabled ? '' : 'hidden';\n}\nexport function setMarker(selection, state) {\n selection\n .attr('d', (d) => {\n const series = d.point.series;\n const type = series.marker.states.normal.symbol;\n const radius = get(d.point.data, 'radius', series.marker.states[state].radius);\n const size = radius + series.marker.states[state].borderWidth;\n return getMarkerSymbol(type, size);\n })\n .attr('stroke-width', (d) => d.point.series.marker.states[state].borderWidth)\n .attr('stroke', (d) => d.point.series.marker.states[state].borderColor);\n}\nexport function getMarkerSymbol(type = SymbolType.Circle, radius) {\n const symbolFn = getSymbol(type);\n const size = Math.pow(radius, 2) * Math.PI;\n return symbol(symbolFn, size)();\n}\nexport function selectMarkerHalo(parentSelection) {\n return parentSelection.select(`.${haloClassName}`);\n}\nexport function selectMarkerSymbol(parentSelection) {\n return parentSelection.select(`.${symbolClassName}`);\n}\n","import { path, select } from 'd3';\nimport get from 'lodash/get';\nimport { getDataCategoryValue } from '../../utils';\nexport function getXValue(args) {\n const { point, xAxis, xScale } = args;\n if (xAxis.type === 'category') {\n const xBandScale = xScale;\n const categories = get(xAxis, 'categories', []);\n const dataCategory = getDataCategoryValue({ axisDirection: 'x', categories, data: point });\n return (xBandScale(dataCategory) || 0) + xBandScale.step() / 2;\n }\n const xLinearScale = xScale;\n return xLinearScale(point.x);\n}\nexport function getYValue(args) {\n const { point, yAxis, yScale } = args;\n if (yAxis.type === 'category') {\n const yBandScale = yScale;\n const categories = get(yAxis, 'categories', []);\n const dataCategory = getDataCategoryValue({ axisDirection: 'y', categories, data: point });\n return (yBandScale(dataCategory) || 0) + yBandScale.step() / 2;\n }\n const yLinearScale = yScale;\n return yLinearScale(point.y);\n}\nexport function shapeKey(d) {\n return d.id || -1;\n}\nexport function setActiveState(args) {\n const { element, datum, state, active } = args;\n const elementSelection = select(element);\n if (datum.active !== active) {\n datum.active = active;\n const opacity = datum.active ? null : state === null || state === void 0 ? void 0 : state.opacity;\n elementSelection.attr('opacity', opacity || null);\n }\n return datum;\n}\nexport function getRectPath(args) {\n const { x, y, width, height, borderRadius = 0 } = args;\n const borderRadiuses = typeof borderRadius === 'number' ? new Array(4).fill(borderRadius) : borderRadius;\n const [borderRadiusTopLeft = 0, borderRadiusTopRight = 0, borderRadiusBottomRight = 0, borderRadiusBottomLeft = 0,] = borderRadiuses !== null && borderRadiuses !== void 0 ? borderRadiuses : [];\n const p = path();\n let startAngle = -Math.PI / 2;\n const angle = Math.PI / 2;\n p.moveTo(x + borderRadiusTopLeft, y);\n p.lineTo(x + width - borderRadiusTopRight, y);\n p.arc(x + width - borderRadiusTopRight, y + borderRadiusTopRight, borderRadiusTopRight, startAngle, startAngle + angle);\n startAngle += angle;\n p.lineTo(x + width, y + height - borderRadiusBottomRight);\n p.arc(x + width - borderRadiusBottomRight, y + height - borderRadiusBottomRight, borderRadiusBottomRight, startAngle, startAngle + angle);\n startAngle += angle;\n p.lineTo(x + borderRadiusBottomLeft, y + height);\n p.arc(x + borderRadiusBottomLeft, y + height - borderRadiusBottomLeft, borderRadiusBottomLeft, startAngle, startAngle + angle);\n startAngle += angle;\n p.lineTo(x, y + borderRadiusTopLeft);\n p.arc(x + borderRadiusTopLeft, y + borderRadiusTopLeft, borderRadiusTopLeft, startAngle, startAngle + angle);\n p.closePath();\n return p;\n}\n","import React from 'react';\nimport { area as areaGenerator, color, line as lineGenerator, select } from 'd3';\nimport get from 'lodash/get';\nimport { block, filterOverlappingLabels } from '../../..//utils';\nimport { HtmlLayer } from '../HtmlLayer';\nimport { getMarkerHaloVisibility, getMarkerVisibility, renderMarker, selectMarkerHalo, selectMarkerSymbol, setMarker, } from '../marker';\nimport { setActiveState } from '../utils';\nconst b = block('d3-area');\nexport const AreaSeriesShapes = (args) => {\n const { dispatcher, preparedData, seriesOptions, htmlLayout } = args;\n const hoveredDataRef = React.useRef(null);\n const ref = React.useRef(null);\n React.useEffect(() => {\n var _a;\n if (!ref.current) {\n return () => { };\n }\n const svgElement = select(ref.current);\n const hoverOptions = get(seriesOptions, 'area.states.hover');\n const inactiveOptions = get(seriesOptions, 'area.states.inactive');\n const line = lineGenerator()\n .x((d) => d.x)\n .y((d) => d.y);\n svgElement.selectAll('*').remove();\n const shapeSelection = svgElement\n .selectAll('shape')\n .data(preparedData)\n .join('g')\n .attr('class', b('series'))\n .attr('cursor', (d) => d.series.cursor);\n shapeSelection\n .append('path')\n .attr('class', b('line'))\n .attr('d', (d) => line(d.points))\n .attr('fill', 'none')\n .attr('stroke', (d) => d.color)\n .attr('stroke-width', (d) => d.width)\n .attr('stroke-linejoin', 'round')\n .attr('stroke-linecap', 'round');\n const area = areaGenerator()\n .x((d) => d.x)\n .y0((d) => d.y0)\n .y1((d) => d.y);\n shapeSelection\n .append('path')\n .attr('class', b('region'))\n .attr('d', (d) => area(d.points))\n .attr('fill', (d) => d.color)\n .attr('opacity', (d) => d.opacity);\n let dataLabels = preparedData.reduce((acc, d) => {\n return acc.concat(d.labels);\n }, []);\n if (!((_a = preparedData[0]) === null || _a === void 0 ? void 0 : _a.series.dataLabels.allowOverlap)) {\n dataLabels = filterOverlappingLabels(dataLabels);\n }\n const labelsSelection = svgElement\n .selectAll('text')\n .data(dataLabels)\n .join('text')\n .text((d) => d.text)\n .attr('class', b('label'))\n .attr('x', (d) => d.x)\n .attr('y', (d) => d.y)\n .attr('text-anchor', (d) => d.textAnchor)\n .style('font-size', (d) => d.style.fontSize)\n .style('font-weight', (d) => d.style.fontWeight || null)\n .style('fill', (d) => d.style.fontColor || null);\n const markers = preparedData.reduce((acc, d) => acc.concat(d.markers), []);\n const markerSelection = svgElement\n .selectAll('marker')\n .data(markers)\n .join('g')\n .call(renderMarker);\n const hoverEnabled = hoverOptions === null || hoverOptions === void 0 ? void 0 : hoverOptions.enabled;\n const inactiveEnabled = inactiveOptions === null || inactiveOptions === void 0 ? void 0 : inactiveOptions.enabled;\n function handleShapeHover(data) {\n hoveredDataRef.current = data;\n const selected = (data === null || data === void 0 ? void 0 : data.filter((d) => d.series.type === 'area')) || [];\n const selectedDataItems = selected.map((d) => d.data);\n const selectedSeriesIds = selected.map((d) => { var _a; return (_a = d.series) === null || _a === void 0 ? void 0 : _a.id; });\n shapeSelection.datum((d, index, list) => {\n var _a;\n const elementSelection = select(list[index]);\n const hovered = Boolean(hoverEnabled && selectedSeriesIds.includes(d.id));\n if (d.hovered !== hovered) {\n d.hovered = hovered;\n let strokeColor = d.color || '';\n if (d.hovered) {\n strokeColor =\n ((_a = color(strokeColor)) === null || _a === void 0 ? void 0 : _a.brighter(hoverOptions === null || hoverOptions === void 0 ? void 0 : hoverOptions.brightness).toString()) ||\n strokeColor;\n }\n elementSelection.selectAll(`.${b('line')}`).attr('stroke', strokeColor);\n elementSelection.selectAll(`.${b('region')}`).attr('fill', strokeColor);\n }\n return setActiveState({\n element: list[index],\n state: inactiveOptions,\n active: Boolean(!inactiveEnabled ||\n !selectedSeriesIds.length ||\n selectedSeriesIds.includes(d.id)),\n datum: d,\n });\n });\n labelsSelection.datum((d, index, list) => {\n return setActiveState({\n element: list[index],\n state: inactiveOptions,\n active: Boolean(!inactiveEnabled ||\n !selectedSeriesIds.length ||\n selectedSeriesIds.includes(d.series.id)),\n datum: d,\n });\n });\n markerSelection.datum((d, index, list) => {\n const elementSelection = select(list[index]);\n const hovered = Boolean(hoverEnabled && selectedDataItems.includes(d.point.data));\n if (d.hovered !== hovered) {\n d.hovered = hovered;\n elementSelection.attr('visibility', getMarkerVisibility(d));\n selectMarkerHalo(elementSelection).attr('visibility', getMarkerHaloVisibility);\n selectMarkerSymbol(elementSelection).call(setMarker, hovered ? 'hover' : 'normal');\n }\n if (d.point.series.marker.states.normal.enabled) {\n const isActive = Boolean(!inactiveEnabled ||\n !selectedSeriesIds.length ||\n selectedSeriesIds.includes(d.point.series.id));\n setActiveState({\n element: list[index],\n state: inactiveOptions,\n active: isActive,\n datum: d,\n });\n }\n return d;\n });\n }\n if (hoveredDataRef.current !== null) {\n handleShapeHover(hoveredDataRef.current);\n }\n dispatcher.on('hover-shape.area', handleShapeHover);\n return () => {\n dispatcher.on('hover-shape.area', null);\n };\n }, [dispatcher, preparedData, seriesOptions]);\n return (React.createElement(React.Fragment, null,\n React.createElement(\"g\", { ref: ref, className: b() }),\n React.createElement(HtmlLayer, { preparedData: preparedData, htmlLayout: htmlLayout })));\n};\n","import { ascending, descending, max, sort } from 'd3';\nimport get from 'lodash/get';\nimport { getDataCategoryValue, getLabelsSize } from '../../../utils';\nimport { MIN_BAR_GAP, MIN_BAR_GROUP_GAP, MIN_BAR_WIDTH } from '../constants';\nfunction getLabelData(d) {\n if (!d.series.dataLabels.enabled) {\n return undefined;\n }\n const text = String(d.data.label || d.data.y);\n const style = d.series.dataLabels.style;\n const html = d.series.dataLabels.html;\n const { maxHeight: height, maxWidth: width } = getLabelsSize({\n labels: [text],\n style,\n html,\n });\n let y = Math.max(height, d.y - d.series.dataLabels.padding);\n if (d.series.dataLabels.inside) {\n y = d.y + d.height / 2;\n }\n const x = d.x + d.width / 2;\n return {\n text,\n x: html ? x - width / 2 : x,\n y: html ? y - height : y,\n style,\n size: { width, height },\n textAnchor: 'middle',\n series: d.series,\n };\n}\nexport const prepareBarXData = (args) => {\n const { series, seriesOptions, xAxis, xScale, yScale, boundsHeight: plotHeight } = args;\n const categories = get(xAxis, 'categories', []);\n const barMaxWidth = get(seriesOptions, 'bar-x.barMaxWidth');\n const barPadding = get(seriesOptions, 'bar-x.barPadding');\n const groupPadding = get(seriesOptions, 'bar-x.groupPadding');\n const sortingOptions = get(seriesOptions, 'bar-x.dataSorting');\n const comparator = (sortingOptions === null || sortingOptions === void 0 ? void 0 : sortingOptions.direction) === 'desc' ? descending : ascending;\n const sortKey = (() => {\n switch (sortingOptions === null || sortingOptions === void 0 ? void 0 : sortingOptions.key) {\n case 'y': {\n return 'data.y';\n }\n case 'name': {\n return 'series.name';\n }\n default: {\n return undefined;\n }\n }\n })();\n const data = {};\n series.forEach((s) => {\n s.data.forEach((d) => {\n const xValue = xAxis.type === 'category'\n ? getDataCategoryValue({ axisDirection: 'x', categories, data: d })\n : d.x;\n if (xValue) {\n if (!data[xValue]) {\n data[xValue] = {};\n }\n const xGroup = data[xValue];\n if (!xGroup[s.stackId]) {\n xGroup[s.stackId] = [];\n }\n xGroup[s.stackId].push({ data: d, series: s });\n }\n });\n });\n let bandWidth = Infinity;\n if (xAxis.type === 'category') {\n const xBandScale = xScale;\n bandWidth = xBandScale.bandwidth();\n }\n else {\n const xLinearScale = xScale;\n const xValues = series.reduce((acc, s) => {\n s.data.forEach((dataItem) => acc.push(Number(dataItem.x)));\n return acc;\n }, []);\n xValues.sort().forEach((xValue, index) => {\n if (index > 0 && xValue !== xValues[index - 1]) {\n const dist = xLinearScale(xValue) - xLinearScale(xValues[index - 1]);\n if (dist < bandWidth) {\n bandWidth = dist;\n }\n }\n });\n }\n const maxGroupSize = max(Object.values(data), (d) => Object.values(d).length) || 1;\n const groupGap = Math.max(bandWidth * groupPadding, MIN_BAR_GROUP_GAP);\n const groupWidth = bandWidth - groupGap;\n const rectGap = Math.max(bandWidth * barPadding, MIN_BAR_GAP);\n const rectWidth = Math.max(MIN_BAR_WIDTH, Math.min(groupWidth / maxGroupSize - rectGap, barMaxWidth));\n const result = [];\n Object.entries(data).forEach(([xValue, val]) => {\n const stacks = Object.values(val);\n const currentGroupWidth = rectWidth * stacks.length + rectGap * (stacks.length - 1);\n stacks.forEach((yValues, groupItemIndex) => {\n let stackHeight = 0;\n const stackItems = [];\n const sortedData = sortKey\n ? sort(yValues, (a, b) => comparator(get(a, sortKey), get(b, sortKey)))\n : yValues;\n sortedData.forEach((yValue, yValueIndex) => {\n const yAxisIndex = yValue.series.yAxis;\n const seriesYScale = yScale[yAxisIndex];\n let xCenter;\n if (xAxis.type === 'category') {\n const xBandScale = xScale;\n xCenter = (xBandScale(xValue) || 0) + xBandScale.bandwidth() / 2;\n }\n else {\n const xLinearScale = xScale;\n xCenter = xLinearScale(Number(xValue));\n }\n const x = xCenter - currentGroupWidth / 2 + (rectWidth + rectGap) * groupItemIndex;\n const yDataValue = yValue.data.y;\n const y = seriesYScale(yDataValue);\n const base = seriesYScale(0);\n const height = yDataValue > 0 ? base - y : y - base;\n const barData = {\n x,\n y: yDataValue > 0 ? y - stackHeight : seriesYScale(0),\n width: rectWidth,\n height,\n opacity: get(yValue.data, 'opacity', null),\n data: yValue.data,\n series: yValue.series,\n htmlElements: [],\n isLastStackItem: yValueIndex === sortedData.length - 1,\n };\n const label = getLabelData(barData);\n if (yValue.series.dataLabels.html && label) {\n barData.htmlElements.push({\n x: label.x,\n y: label.y,\n content: label.text,\n size: label.size,\n });\n }\n else {\n barData.label = getLabelData(barData);\n }\n stackItems.push(barData);\n stackHeight += height + 1;\n });\n if (series.some((s) => s.stacking === 'percent')) {\n let acc = 0;\n const ratio = plotHeight / (stackHeight - stackItems.length);\n stackItems.forEach((item) => {\n item.height = item.height * ratio;\n item.y = plotHeight - item.height - acc;\n acc += item.height + 1;\n });\n }\n result.push(...stackItems);\n });\n });\n return result;\n};\n","import React from 'react';\nimport { color, select } from 'd3';\nimport get from 'lodash/get';\nimport { block, filterOverlappingLabels } from '../../../utils';\nimport { HtmlLayer } from '../HtmlLayer';\nimport { getRectPath } from '../utils';\nexport { prepareBarXData } from './prepare-data';\nexport * from './types';\nconst b = block('bar-x');\nexport const BarXSeriesShapes = (args) => {\n const { dispatcher, preparedData, seriesOptions, htmlLayout } = args;\n const hoveredDataRef = React.useRef(null);\n const ref = React.useRef(null);\n React.useEffect(() => {\n var _a;\n if (!ref.current) {\n return () => { };\n }\n const svgElement = select(ref.current);\n const hoverOptions = get(seriesOptions, 'bar-x.states.hover');\n const inactiveOptions = get(seriesOptions, 'bar-x.states.inactive');\n svgElement.selectAll('*').remove();\n const rectSelection = svgElement\n .selectAll('allRects')\n .data(preparedData)\n .join('path')\n .attr('d', (d) => {\n const borderRadius = d.isLastStackItem\n ? Math.min(d.height, d.width / 2, d.series.borderRadius)\n : 0;\n const p = getRectPath({\n x: d.x,\n y: d.y,\n width: d.width,\n height: d.height,\n borderRadius: [borderRadius, borderRadius, 0, 0],\n });\n return p.toString();\n })\n .attr('class', b('segment'))\n .attr('x', (d) => d.x)\n .attr('y', (d) => d.y)\n .attr('height', (d) => d.height)\n .attr('width', (d) => d.width)\n .attr('fill', (d) => d.data.color || d.series.color)\n .attr('opacity', (d) => d.opacity)\n .attr('cursor', (d) => d.series.cursor);\n let dataLabels = preparedData.map((d) => d.label).filter(Boolean);\n if (!((_a = preparedData[0]) === null || _a === void 0 ? void 0 : _a.series.dataLabels.allowOverlap)) {\n dataLabels = filterOverlappingLabels(dataLabels);\n }\n const labelSelection = svgElement\n .selectAll('text')\n .data(dataLabels)\n .join('text')\n .text((d) => d.text)\n .attr('class', b('label'))\n .attr('x', (d) => d.x)\n .attr('y', (d) => d.y)\n .attr('text-anchor', (d) => d.textAnchor)\n .style('font-size', (d) => d.style.fontSize)\n .style('font-weight', (d) => d.style.fontWeight || null)\n .style('fill', (d) => d.style.fontColor || null);\n function handleShapeHover(data) {\n hoveredDataRef.current = data;\n const hoverEnabled = hoverOptions === null || hoverOptions === void 0 ? void 0 : hoverOptions.enabled;\n const inactiveEnabled = inactiveOptions === null || inactiveOptions === void 0 ? void 0 : inactiveOptions.enabled;\n if (!data) {\n if (hoverEnabled) {\n rectSelection.attr('fill', (d) => d.data.color || d.series.color);\n }\n if (inactiveEnabled) {\n rectSelection.attr('opacity', null);\n labelSelection.attr('opacity', null);\n }\n return;\n }\n if (hoverEnabled) {\n const hoveredValues = data.map((d) => d.data.x);\n rectSelection.attr('fill', (d) => {\n var _a;\n const fillColor = d.data.color || d.series.color;\n if (hoveredValues.includes(d.data.x)) {\n return (((_a = color(fillColor)) === null || _a === void 0 ? void 0 : _a.brighter(hoverOptions === null || hoverOptions === void 0 ? void 0 : hoverOptions.brightness).toString()) ||\n fillColor);\n }\n return fillColor;\n });\n }\n if (inactiveEnabled) {\n const hoveredSeries = data.map((d) => d.series.id);\n rectSelection.attr('opacity', (d) => {\n return hoveredSeries.includes(d.series.id)\n ? null\n : (inactiveOptions === null || inactiveOptions === void 0 ? void 0 : inactiveOptions.opacity) || null;\n });\n labelSelection.attr('opacity', (d) => {\n return hoveredSeries.includes(d.series.id)\n ? null\n : (inactiveOptions === null || inactiveOptions === void 0 ? void 0 : inactiveOptions.opacity) || null;\n });\n }\n }\n if (hoveredDataRef.current !== null) {\n handleShapeHover(hoveredDataRef.current);\n }\n dispatcher.on('hover-shape.bar-x', handleShapeHover);\n return () => {\n dispatcher.on('hover-shape.bar-x', null);\n };\n }, [dispatcher, preparedData, seriesOptions]);\n return (React.createElement(React.Fragment, null,\n React.createElement(\"g\", { ref: ref, className: b() }),\n React.createElement(HtmlLayer, { preparedData: preparedData, htmlLayout: htmlLayout })));\n};\n","import React from 'react';\nimport { color, select } from 'd3';\nimport get from 'lodash/get';\nimport { block } from '../../../utils';\nimport { HtmlLayer } from '../HtmlLayer';\nimport { getRectPath } from '../utils';\nexport { prepareBarYData } from './prepare-data';\nconst b = block('bar-y');\nexport const BarYSeriesShapes = (args) => {\n const { dispatcher, preparedData, seriesOptions, htmlLayout } = args;\n const hoveredDataRef = React.useRef(null);\n const ref = React.useRef(null);\n React.useEffect(() => {\n if (!ref.current) {\n return () => { };\n }\n const svgElement = select(ref.current);\n svgElement.selectAll('*').remove();\n const rectSelection = svgElement\n .selectAll('rect')\n .data(preparedData)\n .join('path')\n .attr('d', (d) => {\n const borderRadius = d.isLastStackItem\n ? Math.min(d.height, d.width / 2, d.series.borderRadius)\n : 0;\n const p = getRectPath({\n x: d.x,\n y: d.y,\n width: d.width,\n height: d.height,\n borderRadius: [0, borderRadius, borderRadius, 0],\n });\n return p.toString();\n })\n .attr('class', b('segment'))\n .attr('x', (d) => d.x)\n .attr('y', (d) => d.y)\n .attr('height', (d) => d.height)\n .attr('width', (d) => d.width)\n .attr('fill', (d) => d.color)\n .attr('opacity', (d) => d.data.opacity || null)\n .attr('cursor', (d) => d.series.cursor);\n const dataLabels = preparedData.reduce((acc, d) => {\n if (d.label) {\n acc.push(d.label);\n }\n return acc;\n }, []);\n const labelSelection = svgElement\n .selectAll('text')\n .data(dataLabels)\n .join('text')\n .text((d) => d.text)\n .attr('class', b('label'))\n .attr('x', (d) => d.x)\n .attr('y', (d) => d.y)\n .attr('text-anchor', (d) => d.textAnchor)\n .style('font-size', (d) => d.style.fontSize)\n .style('font-weight', (d) => d.style.fontWeight || null)\n .style('fill', (d) => d.style.fontColor || null);\n const hoverOptions = get(seriesOptions, 'bar-y.states.hover');\n const inactiveOptions = get(seriesOptions, 'bar-y.states.inactive');\n function handleShapeHover(data) {\n hoveredDataRef.current = data;\n if (hoverOptions === null || hoverOptions === void 0 ? void 0 : hoverOptions.enabled) {\n const hovered = data === null || data === void 0 ? void 0 : data.reduce((acc, d) => {\n acc.add(d.data.y);\n return acc;\n }, new Set());\n rectSelection.attr('fill', (d) => {\n var _a;\n const fillColor = d.color;\n if (hovered === null || hovered === void 0 ? void 0 : hovered.has(d.data.y)) {\n return (((_a = color(fillColor)) === null || _a === void 0 ? void 0 : _a.brighter(hoverOptions.brightness).toString()) ||\n fillColor);\n }\n return fillColor;\n });\n }\n if (inactiveOptions === null || inactiveOptions === void 0 ? void 0 : inactiveOptions.enabled) {\n const hoveredSeries = data === null || data === void 0 ? void 0 : data.map((d) => d.series.id);\n const newOpacity = (d) => {\n if ((hoveredSeries === null || hoveredSeries === void 0 ? void 0 : hoveredSeries.length) && !hoveredSeries.includes(d.series.id)) {\n return inactiveOptions.opacity || null;\n }\n return null;\n };\n rectSelection.attr('opacity', newOpacity);\n labelSelection.attr('opacity', newOpacity);\n }\n }\n if (hoveredDataRef.current !== null) {\n handleShapeHover(hoveredDataRef.current);\n }\n dispatcher.on('hover-shape.bar-y', handleShapeHover);\n return () => {\n dispatcher.on('hover-shape.bar-y', null);\n };\n }, [dispatcher, preparedData, seriesOptions]);\n return (React.createElement(React.Fragment, null,\n React.createElement(\"g\", { ref: ref, className: b() }),\n React.createElement(HtmlLayer, { preparedData: preparedData, htmlLayout: htmlLayout })));\n};\n","import React from 'react';\nimport { color, line as lineGenerator, select } from 'd3';\nimport get from 'lodash/get';\nimport { block, filterOverlappingLabels, getLineDashArray } from '../../../utils';\nimport { HtmlLayer } from '../HtmlLayer';\nimport { getMarkerHaloVisibility, getMarkerVisibility, renderMarker, selectMarkerHalo, selectMarkerSymbol, setMarker, } from '../marker';\nimport { setActiveState } from '../utils';\nconst b = block('d3-line');\nexport const LineSeriesShapes = (args) => {\n const { dispatcher, preparedData, seriesOptions, htmlLayout } = args;\n const hoveredDataRef = React.useRef(null);\n const ref = React.useRef(null);\n React.useEffect(() => {\n var _a;\n if (!ref.current) {\n return () => { };\n }\n const svgElement = select(ref.current);\n const hoverOptions = get(seriesOptions, 'line.states.hover');\n const inactiveOptions = get(seriesOptions, 'line.states.inactive');\n const line = lineGenerator()\n .x((d) => d.x)\n .y((d) => d.y);\n svgElement.selectAll('*').remove();\n const lineSelection = svgElement\n .selectAll('path')\n .data(preparedData)\n .join('path')\n .attr('d', (d) => line(d.points))\n .attr('fill', 'none')\n .attr('stroke', (d) => d.color)\n .attr('stroke-width', (d) => d.width)\n .attr('stroke-linejoin', (d) => d.linecap)\n .attr('stroke-linecap', (d) => d.linecap)\n .attr('stroke-dasharray', (d) => getLineDashArray(d.dashStyle, d.width))\n .attr('opacity', (d) => d.opacity)\n .attr('cursor', (d) => d.series.cursor);\n let dataLabels = preparedData.reduce((acc, d) => {\n return acc.concat(d.labels);\n }, []);\n if (!((_a = preparedData[0]) === null || _a === void 0 ? void 0 : _a.series.dataLabels.allowOverlap)) {\n dataLabels = filterOverlappingLabels(dataLabels);\n }\n const labelsSelection = svgElement\n .selectAll('text')\n .data(dataLabels)\n .join('text')\n .text((d) => d.text)\n .attr('class', b('label'))\n .attr('x', (d) => d.x)\n .attr('y', (d) => d.y)\n .attr('text-anchor', (d) => d.textAnchor)\n .style('font-size', (d) => d.style.fontSize)\n .style('font-weight', (d) => d.style.fontWeight || null)\n .style('fill', (d) => d.style.fontColor || null);\n const markers = preparedData.reduce((acc, d) => acc.concat(d.markers), []);\n const markerSelection = svgElement\n .selectAll('marker')\n .data(markers)\n .join('g')\n .call(renderMarker);\n const hoverEnabled = hoverOptions === null || hoverOptions === void 0 ? void 0 : hoverOptions.enabled;\n const inactiveEnabled = inactiveOptions === null || inactiveOptions === void 0 ? void 0 : inactiveOptions.enabled;\n function handleShapeHover(data) {\n hoveredDataRef.current = data;\n const selected = (data === null || data === void 0 ? void 0 : data.filter((d) => d.series.type === 'line')) || [];\n const selectedDataItems = selected.map((d) => d.data);\n const selectedSeriesIds = selected.map((d) => { var _a; return (_a = d.series) === null || _a === void 0 ? void 0 : _a.id; });\n lineSelection.datum((d, index, list) => {\n const elementSelection = select(list[index]);\n const hovered = Boolean(hoverEnabled && selectedSeriesIds.includes(d.id));\n if (d.hovered !== hovered) {\n d.hovered = hovered;\n elementSelection.attr('stroke', (d) => {\n var _a;\n const initialColor = d.color || '';\n if (d.hovered) {\n return (((_a = color(initialColor)) === null || _a === void 0 ? void 0 : _a.brighter(hoverOptions === null || hoverOptions === void 0 ? void 0 : hoverOptions.brightness).toString()) || initialColor);\n }\n return initialColor;\n });\n }\n return setActiveState({\n element: list[index],\n state: inactiveOptions,\n active: Boolean(!inactiveEnabled ||\n !selectedSeriesIds.length ||\n selectedSeriesIds.includes(d.id)),\n datum: d,\n });\n });\n labelsSelection.datum((d, index, list) => {\n return setActiveState({\n element: list[index],\n state: inactiveOptions,\n active: Boolean(!inactiveEnabled ||\n !selectedSeriesIds.length ||\n selectedSeriesIds.includes(d.series.id)),\n datum: d,\n });\n });\n markerSelection.datum((d, index, list) => {\n const elementSelection = select(list[index]);\n const hovered = Boolean(hoverEnabled && selectedDataItems.includes(d.point.data));\n if (d.hovered !== hovered) {\n d.hovered = hovered;\n elementSelection.attr('visibility', getMarkerVisibility(d));\n selectMarkerHalo(elementSelection).attr('visibility', getMarkerHaloVisibility);\n selectMarkerSymbol(elementSelection).call(setMarker, hovered ? 'hover' : 'normal');\n }\n if (d.point.series.marker.states.normal.enabled) {\n const isActive = Boolean(!inactiveEnabled ||\n !selectedSeriesIds.length ||\n selectedSeriesIds.includes(d.point.series.id));\n setActiveState({\n element: list[index],\n state: inactiveOptions,\n active: isActive,\n datum: d,\n });\n }\n return d;\n });\n }\n if (hoveredDataRef.current !== null) {\n handleShapeHover(hoveredDataRef.current);\n }\n dispatcher.on('hover-shape.line', handleShapeHover);\n return () => {\n dispatcher.on('hover-shape.line', null);\n };\n }, [dispatcher, preparedData, seriesOptions]);\n return (React.createElement(React.Fragment, null,\n React.createElement(\"g\", { ref: ref, className: b() }),\n React.createElement(HtmlLayer, { preparedData: preparedData, htmlLayout: htmlLayout })));\n};\n","import React from 'react';\nimport { arc, color, select } from 'd3';\nimport get from 'lodash/get';\nimport { block, setEllipsisForOverflowTexts } from '../../../utils';\nimport { HtmlLayer } from '../HtmlLayer';\nimport { setActiveState } from '../utils';\nconst b = block('d3-pie');\nexport function getHaloVisibility(d) {\n const enabled = d.data.pie.halo.enabled && d.data.hovered;\n return enabled ? '' : 'hidden';\n}\nexport function PieSeriesShapes(args) {\n const { dispatcher, preparedData, seriesOptions, htmlLayout } = args;\n const ref = React.useRef(null);\n React.useEffect(() => {\n if (!ref.current) {\n return () => { };\n }\n const svgElement = select(ref.current);\n svgElement.selectAll('*').remove();\n const segmentSelector = `.${b('segment')}`;\n const connectorSelector = `.${b('connector')}`;\n const shapesSelection = svgElement\n .selectAll('pie')\n .data(preparedData)\n .join('g')\n .attr('id', (pieData) => pieData.id)\n .attr('class', b('item'))\n .attr('transform', (pieData) => {\n const [x, y] = pieData.center;\n return `translate(${x}, ${y})`;\n })\n .style('stroke-width', (pieData) => pieData.borderWidth)\n .attr('cursor', (pieData) => pieData.series.cursor);\n // Render halo appearing outside the hovered slice\n shapesSelection\n .selectAll('halo')\n .data((pieData) => {\n if (pieData.halo.enabled) {\n return pieData.segments;\n }\n return [];\n })\n .join('path')\n .attr('d', (d) => {\n const arcGenerator = arc()\n .innerRadius(d.data.pie.innerRadius)\n .outerRadius(d.data.radius + d.data.pie.halo.size)\n .cornerRadius(d.data.pie.borderRadius);\n return arcGenerator(d);\n })\n .attr('class', b('halo'))\n .attr('fill', (d) => d.data.color)\n .attr('opacity', (d) => d.data.pie.halo.opacity)\n .attr('z-index', -1)\n .attr('visibility', getHaloVisibility);\n // Render segments\n shapesSelection\n .selectAll(segmentSelector)\n .data((pieData) => pieData.segments)\n .join('path')\n .attr('d', (d) => {\n const arcGenerator = arc()\n .innerRadius(d.data.pie.innerRadius)\n .outerRadius(d.data.radius)\n .cornerRadius(d.data.pie.borderRadius);\n return arcGenerator(d);\n })\n .attr('class', b('segment'))\n .style('stroke', (d) => d.data.series.borderColor)\n .attr('fill', (d) => d.data.color)\n .attr('opacity', (d) => d.data.opacity);\n // render Labels\n shapesSelection\n .selectAll('text')\n .data((pieData) => pieData.labels)\n .join('text')\n .text((d) => d.text)\n .attr('class', b('label'))\n .attr('x', (d) => d.x)\n .attr('y', (d) => d.y)\n .attr('text-anchor', (d) => d.textAnchor)\n .style('font-size', (d) => d.style.fontSize)\n .style('font-weight', (d) => d.style.fontWeight || null)\n .style('fill', (d) => d.style.fontColor || null)\n .call(setEllipsisForOverflowTexts, (d) => d.size.width > d.maxWidth ? d.maxWidth : Infinity);\n // Add the polyline between chart and labels\n shapesSelection\n .selectAll(connectorSelector)\n .data((pieData) => pieData.connectors)\n .enter()\n .append('path')\n .attr('class', b('connector'))\n .attr('d', (d) => d.path)\n .attr('stroke', (d) => d.color)\n .attr('stroke-width', 1)\n .attr('stroke-linejoin', 'round')\n .attr('stroke-linecap', 'round')\n .style('fill', 'none');\n // Render custom shapes if defined\n shapesSelection.each(function (d, index, nodes) {\n var _a, _b;\n const customShape = (_b = (_a = d.series).renderCustomShape) === null || _b === void 0 ? void 0 : _b.call(_a, {\n series: {\n innerRadius: d.innerRadius,\n },\n });\n if (customShape) {\n nodes[index].append(customShape);\n }\n });\n const eventName = `hover-shape.pie`;\n const hoverOptions = get(seriesOptions, 'pie.states.hover');\n const inactiveOptions = get(seriesOptions, 'pie.states.inactive');\n dispatcher.on(eventName, (data) => {\n var _a, _b;\n const selectedSeriesId = (_b = (_a = data === null || data === void 0 ? void 0 : data[0]) === null || _a === void 0 ? void 0 : _a.series) === null || _b === void 0 ? void 0 : _b.id;\n const hoverEnabled = hoverOptions === null || hoverOptions === void 0 ? void 0 : hoverOptions.enabled;\n const inactiveEnabled = inactiveOptions === null || inactiveOptions === void 0 ? void 0 : inactiveOptions.enabled;\n shapesSelection.datum((_d, index, list) => {\n const pieSelection = select(list[index]);\n const haloSelection = pieSelection.selectAll(`.${b('halo')}`);\n pieSelection\n .selectAll(segmentSelector)\n .datum((d, i, elements) => {\n const hovered = Boolean(hoverEnabled && d.data.series.id === selectedSeriesId);\n if (d.data.hovered !== hovered) {\n d.data.hovered = hovered;\n select(elements[i]).attr('fill', () => {\n var _a;\n const initialColor = d.data.color;\n if (d.data.hovered) {\n return (((_a = color(initialColor)) === null || _a === void 0 ? void 0 : _a.brighter(hoverOptions === null || hoverOptions === void 0 ? void 0 : hoverOptions.brightness).toString()) || initialColor);\n }\n return initialColor;\n });\n const currentSegmentHalo = haloSelection.nodes()[i];\n select(currentSegmentHalo).attr('visibility', getHaloVisibility);\n }\n setActiveState({\n element: elements[i],\n state: inactiveOptions,\n active: Boolean(!inactiveEnabled ||\n !selectedSeriesId ||\n selectedSeriesId === d.data.series.id),\n datum: d.data,\n });\n return d;\n });\n const labelSelection = pieSelection.selectAll('tspan');\n const connectorSelection = pieSelection.selectAll(connectorSelector);\n labelSelection.merge(connectorSelection).datum((d, i, elements) => {\n return setActiveState({\n element: elements[i],\n state: inactiveOptions,\n active: Boolean(!inactiveEnabled ||\n !selectedSeriesId ||\n selectedSeriesId === d.series.id),\n datum: d,\n });\n });\n });\n });\n return () => {\n dispatcher.on(eventName, null);\n };\n }, [dispatcher, preparedData, seriesOptions]);\n const htmlElements = preparedData.map((d) => d.htmlLabels).flat();\n return (React.createElement(React.Fragment, null,\n React.createElement(\"g\", { ref: ref, className: b(), style: { zIndex: 9 } }),\n React.createElement(HtmlLayer, { preparedData: { htmlElements }, htmlLayout: htmlLayout })));\n}\n","import { curveBasis, curveLinear, pie } from 'd3';\nexport const pieGenerator = pie()\n .value((d) => d.value)\n .sort(null);\nexport function getCurveFactory(data) {\n switch (data.connectorCurve) {\n case 'basic': {\n return curveBasis;\n }\n case 'linear': {\n return curveLinear;\n }\n }\n return undefined;\n}\n","import { arc, group, line as lineGenerator } from 'd3';\nimport { calculateNumericProperty, getLabelsSize, getLeftPosition, isLabelsOverlapping, } from '../../../utils';\nimport { getCurveFactory, pieGenerator } from './utils';\nconst FULL_CIRCLE = Math.PI * 2;\nconst getCenter = (boundsWidth, boundsHeight, center) => {\n var _a, _b;\n const defaultX = boundsWidth * 0.5;\n const defaultY = boundsHeight * 0.5;\n if (!center) {\n return [defaultX, defaultY];\n }\n const [x, y] = center;\n const resultX = (_a = calculateNumericProperty({ value: x, base: boundsWidth })) !== null && _a !== void 0 ? _a : defaultX;\n const resultY = (_b = calculateNumericProperty({ value: y, base: boundsHeight })) !== null && _b !== void 0 ? _b : defaultY;\n return [resultX, resultY];\n};\nexport function preparePieData(args) {\n const { series: preparedSeries, boundsWidth, boundsHeight } = args;\n const maxRadius = Math.min(boundsWidth, boundsHeight) / 2;\n const groupedPieSeries = group(preparedSeries, (pieSeries) => pieSeries.stackId);\n const prepareItem = (stackId, items) => {\n var _a;\n const series = items[0];\n const { center, borderWidth, borderColor, borderRadius, innerRadius: seriesInnerRadius, dataLabels, } = series;\n const data = {\n id: stackId,\n center: getCenter(boundsWidth, boundsHeight, center),\n innerRadius: 0,\n segments: [],\n labels: [],\n htmlLabels: [],\n connectors: [],\n borderColor,\n borderWidth,\n borderRadius,\n series: items[0],\n connectorCurve: dataLabels.connectorCurve,\n halo: {\n enabled: series.states.hover.halo.enabled,\n opacity: series.states.hover.halo.opacity,\n size: series.states.hover.halo.size,\n },\n };\n const { maxHeight: labelHeight } = getLabelsSize({\n labels: ['Some Label'],\n style: dataLabels.style,\n });\n let segmentMaxRadius = 0;\n const segments = items.map((item) => {\n var _a;\n let maxSegmentRadius = maxRadius;\n if (dataLabels.enabled) {\n maxSegmentRadius -= dataLabels.distance + dataLabels.connectorPadding + labelHeight;\n }\n const segmentRadius = (_a = calculateNumericProperty({ value: item.radius, base: maxSegmentRadius })) !== null && _a !== void 0 ? _a : maxSegmentRadius;\n segmentMaxRadius = Math.max(segmentMaxRadius, segmentRadius);\n return {\n value: item.value,\n color: item.color,\n opacity: item.opacity,\n series: item,\n hovered: false,\n active: true,\n pie: data,\n radius: segmentRadius,\n };\n });\n data.segments = pieGenerator(segments);\n data.innerRadius =\n (_a = calculateNumericProperty({ value: seriesInnerRadius, base: segmentMaxRadius })) !== null && _a !== void 0 ? _a : 0;\n return data;\n };\n const prepareLabels = (prepareLabelsArgs) => {\n const { data, series } = prepareLabelsArgs;\n const { dataLabels } = series[0];\n const labels = [];\n const htmlLabels = [];\n const connectors = [];\n if (!dataLabels.enabled) {\n return { labels, htmlLabels, connectors };\n }\n let line = lineGenerator();\n const curveFactory = getCurveFactory(data);\n if (curveFactory) {\n line = line.curve(curveFactory);\n }\n const { style, connectorPadding, distance } = dataLabels;\n const { maxHeight: labelHeight } = getLabelsSize({ labels: ['Some Label'], style });\n const connectorStartPointGenerator = arc()\n .innerRadius((d) => d.data.radius)\n .outerRadius((d) => d.data.radius);\n const connectorMidPointGenerator = arc()\n .innerRadius((d) => d.data.radius + distance / 2)\n .outerRadius((d) => d.data.radius + distance / 2);\n const connectorEndPointGenerator = arc()\n .innerRadius((d) => d.data.radius + distance)\n .outerRadius((d) => d.data.radius + distance);\n const labelArcGenerator = arc()\n .innerRadius((d) => d.data.radius + distance + connectorPadding)\n .outerRadius((d) => d.data.radius + distance + connectorPadding);\n series.forEach((d, index) => {\n const prevLabel = labels[labels.length - 1];\n const text = String(d.data.label || d.data.value);\n const shouldUseHtml = dataLabels.html;\n const labelSize = getLabelsSize({ labels: [text], style, html: shouldUseHtml });\n const labelWidth = labelSize.maxWidth;\n const relatedSegment = data.segments[index];\n const getLabelPosition = (angle) => {\n let [x, y] = labelArcGenerator.centroid(Object.assign(Object.assign({}, relatedSegment), { startAngle: angle, endAngle: angle }));\n if (shouldUseHtml) {\n x = x < 0 ? x - labelWidth : x;\n y = y - labelSize.maxHeight;\n }\n else {\n y = y < 0 ? y - labelHeight : y;\n }\n x = Math.max(-boundsWidth / 2, x);\n return [x, y];\n };\n const getConnectorPoints = (angle) => {\n const connectorStartPoint = connectorStartPointGenerator.centroid(relatedSegment);\n const connectorEndPoint = connectorEndPointGenerator.centroid(Object.assign(Object.assign({}, relatedSegment), { startAngle: angle, endAngle: angle }));\n if (dataLabels.connectorShape === 'straight-line') {\n return [connectorStartPoint, connectorEndPoint];\n }\n const connectorMidPoint = connectorMidPointGenerator.centroid(relatedSegment);\n return [connectorStartPoint, connectorMidPoint, connectorEndPoint];\n };\n const midAngle = Math.max((prevLabel === null || prevLabel === void 0 ? void 0 : prevLabel.angle) || 0, relatedSegment.startAngle +\n (relatedSegment.endAngle - relatedSegment.startAngle) / 2);\n const [x, y] = getLabelPosition(midAngle);\n const label = {\n text,\n x,\n y,\n style,\n size: { width: labelWidth, height: labelHeight },\n maxWidth: labelWidth,\n textAnchor: midAngle < Math.PI ? 'start' : 'end',\n series: { id: d.id },\n active: true,\n segment: relatedSegment.data,\n angle: midAngle,\n };\n let overlap = false;\n if (prevLabel) {\n overlap = isLabelsOverlapping(prevLabel, label, dataLabels.padding);\n if (overlap) {\n let shouldAdjustAngle = true;\n const step = Math.PI / 180;\n while (shouldAdjustAngle) {\n const newAngle = label.angle + step;\n if (newAngle > FULL_CIRCLE && newAngle % FULL_CIRCLE > labels[0].angle) {\n shouldAdjustAngle = false;\n }\n else {\n label.angle = newAngle;\n const [newX, newY] = getLabelPosition(newAngle);\n label.x = newX;\n label.y = newY;\n if (!isLabelsOverlapping(prevLabel, label, dataLabels.padding)) {\n shouldAdjustAngle = false;\n overlap = false;\n }\n }\n }\n }\n }\n if (dataLabels.allowOverlap || !overlap) {\n const left = getLeftPosition(label);\n if (Math.abs(left) > boundsWidth / 2) {\n label.maxWidth = label.size.width - (Math.abs(left) - boundsWidth / 2);\n }\n else {\n const right = left + label.size.width;\n if (right > boundsWidth / 2) {\n label.maxWidth = label.size.width - (right - boundsWidth / 2);\n }\n }\n if (shouldUseHtml) {\n htmlLabels.push({\n x: data.center[0] + label.x,\n y: Math.max(0, data.center[1] + label.y),\n content: label.text,\n size: label.size,\n });\n }\n else {\n labels.push(label);\n }\n const connector = {\n path: line(getConnectorPoints(midAngle)),\n color: relatedSegment.data.color,\n };\n connectors.push(connector);\n }\n });\n return {\n labels,\n htmlLabels,\n connectors,\n };\n };\n return Array.from(groupedPieSeries).map(([stackId, items]) => {\n const data = prepareItem(stackId, items);\n const preparedLabels = prepareLabels({\n data,\n series: items,\n });\n const segmentMaxRadius = Math.max(...data.segments.map((s) => s.data.radius));\n const top = Math.min(data.center[1] - segmentMaxRadius, ...preparedLabels.labels.map((l) => l.y + data.center[1]), ...preparedLabels.htmlLabels.map((l) => l.y));\n const bottom = Math.max(data.center[1] + segmentMaxRadius, ...preparedLabels.labels.map((l) => l.y + data.center[1] + l.size.height), ...preparedLabels.htmlLabels.map((l) => l.y + l.size.height));\n const topAdjustment = Math.floor(top - data.halo.size);\n if (topAdjustment > 0) {\n data.segments.forEach((s) => {\n s.data.radius += topAdjustment / 2;\n });\n data.center[1] -= topAdjustment / 2;\n }\n const bottomAdjustment = Math.floor(boundsHeight - bottom - data.halo.size);\n if (bottomAdjustment > 0) {\n data.segments.forEach((s) => {\n s.data.radius += bottomAdjustment / 2;\n });\n data.center[1] += bottomAdjustment / 2;\n }\n const { labels, htmlLabels, connectors } = prepareLabels({\n data,\n series: items,\n });\n data.labels = labels;\n data.htmlLabels = htmlLabels;\n data.connectors = connectors;\n return data;\n });\n}\n","import React from 'react';\nimport { select } from 'd3';\nimport { block } from '../../../utils';\nimport { HtmlLayer } from '../HtmlLayer';\nconst b = block('sankey');\nexport const SankeySeriesShape = (props) => {\n const { dispatcher, preparedData, seriesOptions, htmlLayout } = props;\n const hoveredDataRef = React.useRef(null);\n const ref = React.useRef(null);\n React.useEffect(() => {\n if (!ref.current) {\n return () => { };\n }\n const svgElement = select(ref.current);\n svgElement.selectAll('*').remove();\n // nodes\n svgElement\n .append('g')\n .selectAll()\n .data(preparedData.nodes)\n .join('rect')\n .attr('x', (d) => d.x0)\n .attr('y', (d) => d.y0)\n .attr('height', (d) => d.y1 - d.y0)\n .attr('width', (d) => d.x1 - d.x0)\n .attr('fill', (d) => d.color);\n // links\n svgElement\n .append('g')\n .attr('fill', 'none')\n .selectAll()\n .data(preparedData.links)\n .join('g')\n .append('path')\n .attr('stroke-opacity', (d) => d.opacity)\n .attr('d', (d) => d.path)\n .attr('stroke', (d) => d.color)\n .attr('stroke-width', (d) => d.strokeWidth);\n // dataLabels\n svgElement\n .append('g')\n .selectAll()\n .data(preparedData.labels)\n .join('text')\n .text((d) => d.text)\n .attr('class', b('label'))\n .attr('x', (d) => d.x)\n .attr('y', (d) => d.y)\n .attr('dy', '0.35em')\n .attr('text-anchor', (d) => d.textAnchor)\n .attr('fill', (d) => { var _a; return (_a = d.style.fontColor) !== null && _a !== void 0 ? _a : null; });\n const eventName = `hover-shape.sankey`;\n function handleShapeHover(data) {\n hoveredDataRef.current = data;\n }\n if (hoveredDataRef.current !== null) {\n handleShapeHover(hoveredDataRef.current);\n }\n dispatcher.on(eventName, handleShapeHover);\n return () => {\n dispatcher.on(eventName, null);\n };\n }, [dispatcher, preparedData, seriesOptions]);\n return (React.createElement(React.Fragment, null,\n React.createElement(\"g\", { ref: ref, className: b() }),\n React.createElement(HtmlLayer, { preparedData: preparedData, htmlLayout: htmlLayout })));\n};\n","export default function sum(values, valueof) {\n let sum = 0;\n if (valueof === undefined) {\n for (let value of values) {\n if (value = +value) {\n sum += value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if (value = +valueof(value, ++index, values)) {\n sum += value;\n }\n }\n }\n return sum;\n}\n","export default function max(values, valueof) {\n let max;\n if (valueof === undefined) {\n for (const value of values) {\n if (value != null\n && (max < value || (max === undefined && value >= value))) {\n max = value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null\n && (max < value || (max === undefined && value >= value))) {\n max = value;\n }\n }\n }\n return max;\n}\n","import {min} from \"d3-array\";\n\nfunction targetDepth(d) {\n return d.target.depth;\n}\n\nexport function left(node) {\n return node.depth;\n}\n\nexport function right(node, n) {\n return n - 1 - node.height;\n}\n\nexport function justify(node, n) {\n return node.sourceLinks.length ? node.depth : n - 1;\n}\n\nexport function center(node) {\n return node.targetLinks.length ? node.depth\n : node.sourceLinks.length ? min(node.sourceLinks, targetDepth) - 1\n : 0;\n}\n","export default function constant(x) {\n return function() {\n return x;\n };\n}\n","import {max, min, sum} from \"d3-array\";\nimport {justify} from \"./align.js\";\nimport constant from \"./constant.js\";\n\nfunction ascendingSourceBreadth(a, b) {\n return ascendingBreadth(a.source, b.source) || a.index - b.index;\n}\n\nfunction ascendingTargetBreadth(a, b) {\n return ascendingBreadth(a.target, b.target) || a.index - b.index;\n}\n\nfunction ascendingBreadth(a, b) {\n return a.y0 - b.y0;\n}\n\nfunction value(d) {\n return d.value;\n}\n\nfunction defaultId(d) {\n return d.index;\n}\n\nfunction defaultNodes(graph) {\n return graph.nodes;\n}\n\nfunction defaultLinks(graph) {\n return graph.links;\n}\n\nfunction find(nodeById, id) {\n const node = nodeById.get(id);\n if (!node) throw new Error(\"missing: \" + id);\n return node;\n}\n\nfunction computeLinkBreadths({nodes}) {\n for (const node of nodes) {\n let y0 = node.y0;\n let y1 = y0;\n for (const link of node.sourceLinks) {\n link.y0 = y0 + link.width / 2;\n y0 += link.width;\n }\n for (const link of node.targetLinks) {\n link.y1 = y1 + link.width / 2;\n y1 += link.width;\n }\n }\n}\n\nexport default function Sankey() {\n let x0 = 0, y0 = 0, x1 = 1, y1 = 1; // extent\n let dx = 24; // nodeWidth\n let dy = 8, py; // nodePadding\n let id = defaultId;\n let align = justify;\n let sort;\n let linkSort;\n let nodes = defaultNodes;\n let links = defaultLinks;\n let iterations = 6;\n\n function sankey() {\n const graph = {nodes: nodes.apply(null, arguments), links: links.apply(null, arguments)};\n computeNodeLinks(graph);\n computeNodeValues(graph);\n computeNodeDepths(graph);\n computeNodeHeights(graph);\n computeNodeBreadths(graph);\n computeLinkBreadths(graph);\n return graph;\n }\n\n sankey.update = function(graph) {\n computeLinkBreadths(graph);\n return graph;\n };\n\n sankey.nodeId = function(_) {\n return arguments.length ? (id = typeof _ === \"function\" ? _ : constant(_), sankey) : id;\n };\n\n sankey.nodeAlign = function(_) {\n return arguments.length ? (align = typeof _ === \"function\" ? _ : constant(_), sankey) : align;\n };\n\n sankey.nodeSort = function(_) {\n return arguments.length ? (sort = _, sankey) : sort;\n };\n\n sankey.nodeWidth = function(_) {\n return arguments.length ? (dx = +_, sankey) : dx;\n };\n\n sankey.nodePadding = function(_) {\n return arguments.length ? (dy = py = +_, sankey) : dy;\n };\n\n sankey.nodes = function(_) {\n return arguments.length ? (nodes = typeof _ === \"function\" ? _ : constant(_), sankey) : nodes;\n };\n\n sankey.links = function(_) {\n return arguments.length ? (links = typeof _ === \"function\" ? _ : constant(_), sankey) : links;\n };\n\n sankey.linkSort = function(_) {\n return arguments.length ? (linkSort = _, sankey) : linkSort;\n };\n\n sankey.size = function(_) {\n return arguments.length ? (x0 = y0 = 0, x1 = +_[0], y1 = +_[1], sankey) : [x1 - x0, y1 - y0];\n };\n\n sankey.extent = function(_) {\n return arguments.length ? (x0 = +_[0][0], x1 = +_[1][0], y0 = +_[0][1], y1 = +_[1][1], sankey) : [[x0, y0], [x1, y1]];\n };\n\n sankey.iterations = function(_) {\n return arguments.length ? (iterations = +_, sankey) : iterations;\n };\n\n function computeNodeLinks({nodes, links}) {\n for (const [i, node] of nodes.entries()) {\n node.index = i;\n node.sourceLinks = [];\n node.targetLinks = [];\n }\n const nodeById = new Map(nodes.map((d, i) => [id(d, i, nodes), d]));\n for (const [i, link] of links.entries()) {\n link.index = i;\n let {source, target} = link;\n if (typeof source !== \"object\") source = link.source = find(nodeById, source);\n if (typeof target !== \"object\") target = link.target = find(nodeById, target);\n source.sourceLinks.push(link);\n target.targetLinks.push(link);\n }\n if (linkSort != null) {\n for (const {sourceLinks, targetLinks} of nodes) {\n sourceLinks.sort(linkSort);\n targetLinks.sort(linkSort);\n }\n }\n }\n\n function computeNodeValues({nodes}) {\n for (const node of nodes) {\n node.value = node.fixedValue === undefined\n ? Math.max(sum(node.sourceLinks, value), sum(node.targetLinks, value))\n : node.fixedValue;\n }\n }\n\n function computeNodeDepths({nodes}) {\n const n = nodes.length;\n let current = new Set(nodes);\n let next = new Set;\n let x = 0;\n while (current.size) {\n for (const node of current) {\n node.depth = x;\n for (const {target} of node.sourceLinks) {\n next.add(target);\n }\n }\n if (++x > n) throw new Error(\"circular link\");\n current = next;\n next = new Set;\n }\n }\n\n function computeNodeHeights({nodes}) {\n const n = nodes.length;\n let current = new Set(nodes);\n let next = new Set;\n let x = 0;\n while (current.size) {\n for (const node of current) {\n node.height = x;\n for (const {source} of node.targetLinks) {\n next.add(source);\n }\n }\n if (++x > n) throw new Error(\"circular link\");\n current = next;\n next = new Set;\n }\n }\n\n function computeNodeLayers({nodes}) {\n const x = max(nodes, d => d.depth) + 1;\n const kx = (x1 - x0 - dx) / (x - 1);\n const columns = new Array(x);\n for (const node of nodes) {\n const i = Math.max(0, Math.min(x - 1, Math.floor(align.call(null, node, x))));\n node.layer = i;\n node.x0 = x0 + i * kx;\n node.x1 = node.x0 + dx;\n if (columns[i]) columns[i].push(node);\n else columns[i] = [node];\n }\n if (sort) for (const column of columns) {\n column.sort(sort);\n }\n return columns;\n }\n\n function initializeNodeBreadths(columns) {\n const ky = min(columns, c => (y1 - y0 - (c.length - 1) * py) / sum(c, value));\n for (const nodes of columns) {\n let y = y0;\n for (const node of nodes) {\n node.y0 = y;\n node.y1 = y + node.value * ky;\n y = node.y1 + py;\n for (const link of node.sourceLinks) {\n link.width = link.value * ky;\n }\n }\n y = (y1 - y + py) / (nodes.length + 1);\n for (let i = 0; i < nodes.length; ++i) {\n const node = nodes[i];\n node.y0 += y * (i + 1);\n node.y1 += y * (i + 1);\n }\n reorderLinks(nodes);\n }\n }\n\n function computeNodeBreadths(graph) {\n const columns = computeNodeLayers(graph);\n py = Math.min(dy, (y1 - y0) / (max(columns, c => c.length) - 1));\n initializeNodeBreadths(columns);\n for (let i = 0; i < iterations; ++i) {\n const alpha = Math.pow(0.99, i);\n const beta = Math.max(1 - alpha, (i + 1) / iterations);\n relaxRightToLeft(columns, alpha, beta);\n relaxLeftToRight(columns, alpha, beta);\n }\n }\n\n // Reposition each node based on its incoming (target) links.\n function relaxLeftToRight(columns, alpha, beta) {\n for (let i = 1, n = columns.length; i < n; ++i) {\n const column = columns[i];\n for (const target of column) {\n let y = 0;\n let w = 0;\n for (const {source, value} of target.targetLinks) {\n let v = value * (target.layer - source.layer);\n y += targetTop(source, target) * v;\n w += v;\n }\n if (!(w > 0)) continue;\n let dy = (y / w - target.y0) * alpha;\n target.y0 += dy;\n target.y1 += dy;\n reorderNodeLinks(target);\n }\n if (sort === undefined) column.sort(ascendingBreadth);\n resolveCollisions(column, beta);\n }\n }\n\n // Reposition each node based on its outgoing (source) links.\n function relaxRightToLeft(columns, alpha, beta) {\n for (let n = columns.length, i = n - 2; i >= 0; --i) {\n const column = columns[i];\n for (const source of column) {\n let y = 0;\n let w = 0;\n for (const {target, value} of source.sourceLinks) {\n let v = value * (target.layer - source.layer);\n y += sourceTop(source, target) * v;\n w += v;\n }\n if (!(w > 0)) continue;\n let dy = (y / w - source.y0) * alpha;\n source.y0 += dy;\n source.y1 += dy;\n reorderNodeLinks(source);\n }\n if (sort === undefined) column.sort(ascendingBreadth);\n resolveCollisions(column, beta);\n }\n }\n\n function resolveCollisions(nodes, alpha) {\n const i = nodes.length >> 1;\n const subject = nodes[i];\n resolveCollisionsBottomToTop(nodes, subject.y0 - py, i - 1, alpha);\n resolveCollisionsTopToBottom(nodes, subject.y1 + py, i + 1, alpha);\n resolveCollisionsBottomToTop(nodes, y1, nodes.length - 1, alpha);\n resolveCollisionsTopToBottom(nodes, y0, 0, alpha);\n }\n\n // Push any overlapping nodes down.\n function resolveCollisionsTopToBottom(nodes, y, i, alpha) {\n for (; i < nodes.length; ++i) {\n const node = nodes[i];\n const dy = (y - node.y0) * alpha;\n if (dy > 1e-6) node.y0 += dy, node.y1 += dy;\n y = node.y1 + py;\n }\n }\n\n // Push any overlapping nodes up.\n function resolveCollisionsBottomToTop(nodes, y, i, alpha) {\n for (; i >= 0; --i) {\n const node = nodes[i];\n const dy = (node.y1 - y) * alpha;\n if (dy > 1e-6) node.y0 -= dy, node.y1 -= dy;\n y = node.y0 - py;\n }\n }\n\n function reorderNodeLinks({sourceLinks, targetLinks}) {\n if (linkSort === undefined) {\n for (const {source: {sourceLinks}} of targetLinks) {\n sourceLinks.sort(ascendingTargetBreadth);\n }\n for (const {target: {targetLinks}} of sourceLinks) {\n targetLinks.sort(ascendingSourceBreadth);\n }\n }\n }\n\n function reorderLinks(nodes) {\n if (linkSort === undefined) {\n for (const {sourceLinks, targetLinks} of nodes) {\n sourceLinks.sort(ascendingTargetBreadth);\n targetLinks.sort(ascendingSourceBreadth);\n }\n }\n }\n\n // Returns the target.y0 that would produce an ideal link from source to target.\n function targetTop(source, target) {\n let y = source.y0 - (source.sourceLinks.length - 1) * py / 2;\n for (const {target: node, width} of source.sourceLinks) {\n if (node === target) break;\n y += width + py;\n }\n for (const {source: node, width} of target.targetLinks) {\n if (node === source) break;\n y -= width;\n }\n return y;\n }\n\n // Returns the source.y0 that would produce an ideal link from source to target.\n function sourceTop(source, target) {\n let y = target.y0 - (target.targetLinks.length - 1) * py / 2;\n for (const {source: node, width} of target.targetLinks) {\n if (node === source) break;\n y += width + py;\n }\n for (const {target: node, width} of source.sourceLinks) {\n if (node === target) break;\n y -= width;\n }\n return y;\n }\n\n return sankey;\n}\n","var pi = Math.PI,\n tau = 2 * pi,\n epsilon = 1e-6,\n tauEpsilon = tau - epsilon;\n\nfunction Path() {\n this._x0 = this._y0 = // start of current subpath\n this._x1 = this._y1 = null; // end of current subpath\n this._ = \"\";\n}\n\nfunction path() {\n return new Path;\n}\n\nPath.prototype = path.prototype = {\n constructor: Path,\n moveTo: function(x, y) {\n this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y);\n },\n closePath: function() {\n if (this._x1 !== null) {\n this._x1 = this._x0, this._y1 = this._y0;\n this._ += \"Z\";\n }\n },\n lineTo: function(x, y) {\n this._ += \"L\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n quadraticCurveTo: function(x1, y1, x, y) {\n this._ += \"Q\" + (+x1) + \",\" + (+y1) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n bezierCurveTo: function(x1, y1, x2, y2, x, y) {\n this._ += \"C\" + (+x1) + \",\" + (+y1) + \",\" + (+x2) + \",\" + (+y2) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n arcTo: function(x1, y1, x2, y2, r) {\n x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n var x0 = this._x1,\n y0 = this._y1,\n x21 = x2 - x1,\n y21 = y2 - y1,\n x01 = x0 - x1,\n y01 = y0 - y1,\n l01_2 = x01 * x01 + y01 * y01;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(\"negative radius: \" + r);\n\n // Is this path empty? Move to (x1,y1).\n if (this._x1 === null) {\n this._ += \"M\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n }\n\n // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n else if (!(l01_2 > epsilon));\n\n // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n // Equivalently, is (x1,y1) coincident with (x2,y2)?\n // Or, is the radius zero? Line to (x1,y1).\n else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n this._ += \"L\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n }\n\n // Otherwise, draw an arc!\n else {\n var x20 = x2 - x0,\n y20 = y2 - y0,\n l21_2 = x21 * x21 + y21 * y21,\n l20_2 = x20 * x20 + y20 * y20,\n l21 = Math.sqrt(l21_2),\n l01 = Math.sqrt(l01_2),\n l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n t01 = l / l01,\n t21 = l / l21;\n\n // If the start tangent is not coincident with (x0,y0), line to.\n if (Math.abs(t01 - 1) > epsilon) {\n this._ += \"L\" + (x1 + t01 * x01) + \",\" + (y1 + t01 * y01);\n }\n\n this._ += \"A\" + r + \",\" + r + \",0,0,\" + (+(y01 * x20 > x01 * y20)) + \",\" + (this._x1 = x1 + t21 * x21) + \",\" + (this._y1 = y1 + t21 * y21);\n }\n },\n arc: function(x, y, r, a0, a1, ccw) {\n x = +x, y = +y, r = +r, ccw = !!ccw;\n var dx = r * Math.cos(a0),\n dy = r * Math.sin(a0),\n x0 = x + dx,\n y0 = y + dy,\n cw = 1 ^ ccw,\n da = ccw ? a0 - a1 : a1 - a0;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(\"negative radius: \" + r);\n\n // Is this path empty? Move to (x0,y0).\n if (this._x1 === null) {\n this._ += \"M\" + x0 + \",\" + y0;\n }\n\n // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n this._ += \"L\" + x0 + \",\" + y0;\n }\n\n // Is this arc empty? We’re done.\n if (!r) return;\n\n // Does the angle go the wrong way? Flip the direction.\n if (da < 0) da = da % tau + tau;\n\n // Is this a complete circle? Draw two arcs to complete the circle.\n if (da > tauEpsilon) {\n this._ += \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (x - dx) + \",\" + (y - dy) + \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (this._x1 = x0) + \",\" + (this._y1 = y0);\n }\n\n // Is this arc non-empty? Draw an arc!\n else if (da > epsilon) {\n this._ += \"A\" + r + \",\" + r + \",0,\" + (+(da >= pi)) + \",\" + cw + \",\" + (this._x1 = x + r * Math.cos(a1)) + \",\" + (this._y1 = y + r * Math.sin(a1));\n }\n },\n rect: function(x, y, w, h) {\n this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y) + \"h\" + (+w) + \"v\" + (+h) + \"h\" + (-w) + \"Z\";\n },\n toString: function() {\n return this._;\n }\n};\n\nexport default path;\n","export var slice = Array.prototype.slice;\n","export default function(x) {\n return function constant() {\n return x;\n };\n}\n","export function x(p) {\n return p[0];\n}\n\nexport function y(p) {\n return p[1];\n}\n","import {path} from \"d3-path\";\nimport {slice} from \"../array.js\";\nimport constant from \"../constant.js\";\nimport {x as pointX, y as pointY} from \"../point.js\";\nimport pointRadial from \"../pointRadial.js\";\n\nfunction linkSource(d) {\n return d.source;\n}\n\nfunction linkTarget(d) {\n return d.target;\n}\n\nfunction link(curve) {\n var source = linkSource,\n target = linkTarget,\n x = pointX,\n y = pointY,\n context = null;\n\n function link() {\n var buffer, argv = slice.call(arguments), s = source.apply(this, argv), t = target.apply(this, argv);\n if (!context) context = buffer = path();\n curve(context, +x.apply(this, (argv[0] = s, argv)), +y.apply(this, argv), +x.apply(this, (argv[0] = t, argv)), +y.apply(this, argv));\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n link.source = function(_) {\n return arguments.length ? (source = _, link) : source;\n };\n\n link.target = function(_) {\n return arguments.length ? (target = _, link) : target;\n };\n\n link.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), link) : x;\n };\n\n link.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), link) : y;\n };\n\n link.context = function(_) {\n return arguments.length ? ((context = _ == null ? null : _), link) : context;\n };\n\n return link;\n}\n\nfunction curveHorizontal(context, x0, y0, x1, y1) {\n context.moveTo(x0, y0);\n context.bezierCurveTo(x0 = (x0 + x1) / 2, y0, x0, y1, x1, y1);\n}\n\nfunction curveVertical(context, x0, y0, x1, y1) {\n context.moveTo(x0, y0);\n context.bezierCurveTo(x0, y0 = (y0 + y1) / 2, x1, y0, x1, y1);\n}\n\nfunction curveRadial(context, x0, y0, x1, y1) {\n var p0 = pointRadial(x0, y0),\n p1 = pointRadial(x0, y0 = (y0 + y1) / 2),\n p2 = pointRadial(x1, y0),\n p3 = pointRadial(x1, y1);\n context.moveTo(p0[0], p0[1]);\n context.bezierCurveTo(p1[0], p1[1], p2[0], p2[1], p3[0], p3[1]);\n}\n\nexport function linkHorizontal() {\n return link(curveHorizontal);\n}\n\nexport function linkVertical() {\n return link(curveVertical);\n}\n\nexport function linkRadial() {\n var l = link(curveRadial);\n l.angle = l.x, delete l.x;\n l.radius = l.y, delete l.y;\n return l;\n}\n","import {linkHorizontal} from \"d3-shape\";\n\nfunction horizontalSource(d) {\n return [d.source.x1, d.y0];\n}\n\nfunction horizontalTarget(d) {\n return [d.target.x0, d.y1];\n}\n\nexport default function() {\n return linkHorizontal()\n .source(horizontalSource)\n .target(horizontalTarget);\n}\n","import get from 'lodash/get';\nimport { getXValue, getYValue } from '../utils';\nconst getFilteredLinearScatterData = (data) => {\n return data.filter((d) => typeof d.x === 'number' && typeof d.y === 'number');\n};\nexport const prepareScatterData = (args) => {\n const { series, xAxis, xScale, yAxis, yScale } = args;\n return series.reduce((acc, s) => {\n const yAxisIndex = get(s, 'yAxis', 0);\n const seriesYAxis = yAxis[yAxisIndex];\n const seriesYScale = yScale[yAxisIndex];\n const filteredData = xAxis.type === 'category' || seriesYAxis.type === 'category'\n ? s.data\n : getFilteredLinearScatterData(s.data);\n filteredData.forEach((d) => {\n acc.push({\n point: {\n data: d,\n series: s,\n x: getXValue({ point: d, xAxis, xScale }),\n y: getYValue({ point: d, yAxis: seriesYAxis, yScale: seriesYScale }),\n opacity: get(d, 'opacity', null),\n },\n hovered: false,\n active: true,\n htmlElements: [],\n });\n });\n return acc;\n }, []);\n};\n","import React from 'react';\nimport { select } from 'd3';\nimport get from 'lodash/get';\nimport { block } from '../../../utils';\nimport { HtmlLayer } from '../HtmlLayer';\nimport { getMarkerHaloVisibility, renderMarker, selectMarkerHalo, selectMarkerSymbol, setMarker, } from '../marker';\nimport { setActiveState, shapeKey } from '../utils';\nexport { prepareScatterData } from './prepare-data';\nconst b = block('d3-scatter');\nexport function ScatterSeriesShape(props) {\n const { dispatcher, preparedData, seriesOptions, htmlLayout } = props;\n const hoveredDataRef = React.useRef(null);\n const ref = React.useRef(null);\n React.useEffect(() => {\n if (!ref.current) {\n return () => { };\n }\n const svgElement = select(ref.current);\n const hoverOptions = get(seriesOptions, 'scatter.states.hover');\n const inactiveOptions = get(seriesOptions, 'scatter.states.inactive');\n svgElement.selectAll('*').remove();\n const selection = svgElement\n .selectAll('path')\n .data(preparedData, shapeKey)\n .join('g')\n .call(renderMarker)\n .attr('fill', (d) => d.point.data.color || d.point.series.color || '')\n .attr('opacity', (d) => d.point.opacity)\n .attr('cursor', (d) => d.point.series.cursor);\n const hoverEnabled = hoverOptions === null || hoverOptions === void 0 ? void 0 : hoverOptions.enabled;\n const inactiveEnabled = inactiveOptions === null || inactiveOptions === void 0 ? void 0 : inactiveOptions.enabled;\n function handleShapeHover(data) {\n var _a;\n hoveredDataRef.current = data;\n const selected = data === null || data === void 0 ? void 0 : data.find((d) => d.series.type === 'scatter');\n const selectedDataItem = selected === null || selected === void 0 ? void 0 : selected.data;\n const selectedSeriesId = (_a = selected === null || selected === void 0 ? void 0 : selected.series) === null || _a === void 0 ? void 0 : _a.id;\n selection.datum((d, index, list) => {\n const elementSelection = select(list[index]);\n const hovered = Boolean(hoverEnabled && d.point.data === selectedDataItem);\n if (d.hovered !== hovered) {\n d.hovered = hovered;\n elementSelection.attr('z-index', hovered ? 999 : null);\n selectMarkerHalo(elementSelection).attr('visibility', getMarkerHaloVisibility);\n selectMarkerSymbol(elementSelection).call(setMarker, hovered ? 'hover' : 'normal');\n }\n if (hovered) {\n elementSelection.raise();\n }\n if (d.point.series.marker.states.normal.enabled) {\n const isActive = Boolean(!inactiveEnabled ||\n !selectedSeriesId ||\n selectedSeriesId === d.point.series.id);\n setActiveState({\n element: list[index],\n state: inactiveOptions,\n active: isActive,\n datum: d,\n });\n }\n return d;\n });\n }\n if (hoveredDataRef.current !== null) {\n handleShapeHover(hoveredDataRef.current);\n }\n dispatcher.on('hover-shape.scatter', handleShapeHover);\n return () => {\n dispatcher.on('hover-shape.scatter', null);\n };\n }, [dispatcher, preparedData, seriesOptions]);\n return (React.createElement(React.Fragment, null,\n React.createElement(\"g\", { ref: ref, className: b() }),\n React.createElement(HtmlLayer, { preparedData: preparedData, htmlLayout: htmlLayout })));\n}\n","import React from 'react';\nimport { color, select } from 'd3';\nimport get from 'lodash/get';\nimport { block, setEllipsisForOverflowTexts } from '../../../utils';\nimport { HtmlLayer } from '../HtmlLayer';\nconst b = block('d3-treemap');\nexport const TreemapSeriesShape = (props) => {\n const { dispatcher, preparedData, seriesOptions, htmlLayout } = props;\n const hoveredDataRef = React.useRef(null);\n const ref = React.useRef(null);\n React.useEffect(() => {\n if (!ref.current) {\n return () => { };\n }\n const svgElement = select(ref.current);\n svgElement.selectAll('*').remove();\n const { labelData, leaves, series } = preparedData;\n const leaf = svgElement\n .selectAll('g')\n .data(leaves)\n .join('g')\n .attr('transform', (d) => `translate(${d.x0},${d.y0})`)\n .attr('cursor', series.cursor);\n const rectSelection = leaf\n .append('rect')\n .attr('id', (d) => d.id || d.name)\n .attr('fill', (d) => {\n var _a;\n if (d.data.color) {\n return d.data.color;\n }\n const levelOptions = (_a = series.levels) === null || _a === void 0 ? void 0 : _a.find((l) => l.index === d.depth);\n return (levelOptions === null || levelOptions === void 0 ? void 0 : levelOptions.color) || series.color;\n })\n .attr('width', (d) => d.x1 - d.x0)\n .attr('height', (d) => d.y1 - d.y0);\n const labelSelection = svgElement\n .selectAll('tspan')\n .data(labelData)\n .join('text')\n .text((d) => d.text)\n .attr('class', b('label'))\n .attr('x', (d) => d.x)\n .attr('y', (d) => d.y)\n .style('font-size', () => series.dataLabels.style.fontSize)\n .style('font-weight', () => { var _a; return ((_a = series.dataLabels.style) === null || _a === void 0 ? void 0 : _a.fontWeight) || null; })\n .style('fill', () => { var _a; return ((_a = series.dataLabels.style) === null || _a === void 0 ? void 0 : _a.fontColor) || null; })\n .call(setEllipsisForOverflowTexts, (d) => d.width);\n const eventName = `hover-shape.treemap`;\n const hoverOptions = get(seriesOptions, 'treemap.states.hover');\n const inactiveOptions = get(seriesOptions, 'treemap.states.inactive');\n function handleShapeHover(data) {\n var _a;\n hoveredDataRef.current = data;\n const hoverEnabled = hoverOptions === null || hoverOptions === void 0 ? void 0 : hoverOptions.enabled;\n const inactiveEnabled = inactiveOptions === null || inactiveOptions === void 0 ? void 0 : inactiveOptions.enabled;\n const hoveredData = (_a = data === null || data === void 0 ? void 0 : data[0]) === null || _a === void 0 ? void 0 : _a.data;\n rectSelection.datum((d, index, list) => {\n const currentRect = select(list[index]);\n const hovered = Boolean(hoverEnabled && hoveredData === d.data);\n const inactive = Boolean(inactiveEnabled && hoveredData && !hovered);\n currentRect\n .attr('fill', (currentD) => {\n var _a, _b;\n const levelOptions = (_a = series.levels) === null || _a === void 0 ? void 0 : _a.find((l) => l.index === currentD.depth);\n const initialColor = (levelOptions === null || levelOptions === void 0 ? void 0 : levelOptions.color) || d.data.color || series.color;\n if (hovered) {\n return (((_b = color(initialColor)) === null || _b === void 0 ? void 0 : _b.brighter(hoverOptions === null || hoverOptions === void 0 ? void 0 : hoverOptions.brightness).toString()) || initialColor);\n }\n return initialColor;\n })\n .attr('opacity', () => {\n if (inactive) {\n return (inactiveOptions === null || inactiveOptions === void 0 ? void 0 : inactiveOptions.opacity) || null;\n }\n return null;\n });\n return d;\n });\n labelSelection.datum((d, index, list) => {\n const currentLabel = select(list[index]);\n const hovered = Boolean(hoverEnabled && hoveredData === d.nodeData);\n const inactive = Boolean(inactiveEnabled && hoveredData && !hovered);\n currentLabel.attr('opacity', () => {\n if (inactive) {\n return (inactiveOptions === null || inactiveOptions === void 0 ? void 0 : inactiveOptions.opacity) || null;\n }\n return null;\n });\n return d;\n });\n }\n if (hoveredDataRef.current !== null) {\n handleShapeHover(hoveredDataRef.current);\n }\n dispatcher.on(eventName, handleShapeHover);\n return () => {\n dispatcher.on(eventName, null);\n };\n }, [dispatcher, preparedData, seriesOptions]);\n return (React.createElement(React.Fragment, null,\n React.createElement(\"g\", { ref: ref, className: b() }),\n React.createElement(HtmlLayer, { preparedData: preparedData, htmlLayout: htmlLayout })));\n};\n","import get from 'lodash/get';\nimport sortBy from 'lodash/sortBy';\nimport { getLabelsSize } from '../../../utils';\nimport { MIN_BAR_GAP, MIN_BAR_WIDTH } from '../constants';\nimport { getXValue, getYValue } from '../utils';\nfunction getLabelData(d, plotHeight) {\n if (!d.series.dataLabels.enabled) {\n return undefined;\n }\n const text = String(d.data.label || d.subTotal);\n const style = d.series.dataLabels.style;\n const { maxHeight: height, maxWidth: width } = getLabelsSize({ labels: [text], style });\n let y;\n if (Number(d.data.y) > 0 || d.data.total) {\n y = Math.max(height, d.y - d.series.dataLabels.padding);\n }\n else {\n y = Math.min(plotHeight - d.series.dataLabels.padding, d.y + d.height + d.series.dataLabels.padding + height);\n }\n return {\n text,\n x: d.x + d.width / 2,\n y,\n style,\n size: { width, height },\n textAnchor: 'middle',\n series: d.series,\n };\n}\nfunction getBandWidth(args) {\n const { series, xAxis, xScale } = args;\n if (xAxis.type === 'category') {\n const xBandScale = xScale;\n return xBandScale.bandwidth();\n }\n const xLinearScale = xScale;\n const xValues = series.reduce((acc, s) => {\n s.data.forEach((dataItem) => acc.push(Number(dataItem.x)));\n return acc;\n }, []);\n let bandWidth = Infinity;\n xValues.sort().forEach((xValue, index) => {\n if (index > 0 && xValue !== xValues[index - 1]) {\n const dist = xLinearScale(xValue) - xLinearScale(xValues[index - 1]);\n if (dist < bandWidth) {\n bandWidth = dist;\n }\n }\n });\n return bandWidth;\n}\nexport const prepareWaterfallData = (args) => {\n const { series, seriesOptions, xAxis, xScale, yAxis: [yAxis], yScale: [yScale], } = args;\n const yLinearScale = yScale;\n const plotHeight = yLinearScale(yLinearScale.domain()[0]);\n const barMaxWidth = get(seriesOptions, 'waterfall.barMaxWidth');\n const barPadding = get(seriesOptions, 'waterfall.barPadding');\n const flattenData = series.reduce((acc, s) => {\n acc.push(...s.data.map((d) => ({ data: d, series: s })));\n return acc;\n }, []);\n const data = sortBy(flattenData, (d) => d.data.x);\n const bandWidth = getBandWidth({\n series,\n xAxis,\n xScale,\n });\n const rectGap = Math.max(bandWidth * barPadding, MIN_BAR_GAP);\n const rectWidth = Math.max(MIN_BAR_WIDTH, Math.min(bandWidth - rectGap, barMaxWidth));\n const yZero = getYValue({\n point: { y: 0 },\n yScale,\n yAxis,\n });\n let totalValue = 0;\n const result = [];\n data.forEach((item, _index) => {\n if (typeof item.data.y !== 'number' && !item.data.total) {\n return;\n }\n if (!item.data.total) {\n totalValue += Number(item.data.y);\n }\n const prevPoint = result[result.length - 1];\n const xCenter = getXValue({ point: item.data, xAxis, xScale });\n const x = xCenter - rectWidth / 2;\n const yValue = Number(item.data.total ? totalValue : item.data.y);\n const height = yZero -\n getYValue({\n point: { y: Math.abs(yValue) },\n yScale,\n yAxis,\n });\n let y;\n if (!prevPoint || item.data.total) {\n y = getYValue({\n point: {\n y: yValue > 0 ? yValue : 0,\n },\n yScale,\n yAxis,\n });\n }\n else if (Number(prevPoint.data.y) < 0) {\n if (Number(item.data.y) > 0) {\n y = prevPoint.y + prevPoint.height - height;\n }\n else {\n y = prevPoint.y + prevPoint.height;\n }\n }\n else if (Number(item.data.y) < 0) {\n y = prevPoint.y;\n }\n else {\n y = prevPoint.y - height;\n }\n const preparedData = {\n x,\n y,\n width: rectWidth,\n height,\n opacity: get(item.data, 'opacity', null),\n data: item.data,\n series: item.series,\n subTotal: totalValue,\n htmlElements: [],\n };\n preparedData.label = getLabelData(preparedData, plotHeight);\n result.push(preparedData);\n });\n return result;\n};\n","import React from 'react';\nimport { color, line as lineGenerator, select } from 'd3';\nimport get from 'lodash/get';\nimport { DashStyle } from '../../../constants';\nimport { block, filterOverlappingLabels, getLineDashArray, getWaterfallPointColor, } from '../../../utils';\nimport { HtmlLayer } from '../HtmlLayer';\nexport { prepareWaterfallData } from './prepare-data';\nexport * from './types';\nconst b = block('d3-waterfall');\nexport const WaterfallSeriesShapes = (args) => {\n const { dispatcher, preparedData, seriesOptions, htmlLayout } = args;\n const hoveredDataRef = React.useRef(null);\n const ref = React.useRef(null);\n const connectorSelector = `.${b('connector')}`;\n React.useEffect(() => {\n var _a;\n if (!ref.current) {\n return () => { };\n }\n const svgElement = select(ref.current);\n const hoverOptions = get(seriesOptions, 'waterfall.states.hover');\n const inactiveOptions = get(seriesOptions, 'waterfall.states.inactive');\n svgElement.selectAll('*').remove();\n const rectSelection = svgElement\n .selectAll('allRects')\n .data(preparedData)\n .join('rect')\n .attr('class', b('segment'))\n .attr('x', (d) => d.x)\n .attr('y', (d) => d.y)\n .attr('height', (d) => d.height)\n .attr('width', (d) => d.width)\n .attr('fill', (d) => getWaterfallPointColor(d.data, d.series))\n .attr('opacity', (d) => d.opacity)\n .attr('cursor', (d) => d.series.cursor);\n let dataLabels = preparedData.map((d) => d.label).filter(Boolean);\n if (!((_a = preparedData[0]) === null || _a === void 0 ? void 0 : _a.series.dataLabels.allowOverlap)) {\n dataLabels = filterOverlappingLabels(dataLabels);\n }\n const labelSelection = svgElement\n .selectAll('text')\n .data(dataLabels)\n .join('text')\n .text((d) => d.text)\n .attr('class', b('label'))\n .attr('x', (d) => d.x)\n .attr('y', (d) => d.y)\n .attr('text-anchor', (d) => d.textAnchor)\n .style('font-size', (d) => d.style.fontSize)\n .style('font-weight', (d) => d.style.fontWeight || null)\n .style('fill', (d) => d.style.fontColor || null);\n // Add the connector line between bars\n svgElement\n .selectAll(connectorSelector)\n .data(preparedData)\n .join('path')\n .attr('class', b('connector'))\n .attr('d', (d, index) => {\n const line = lineGenerator();\n const prev = preparedData[index - 1];\n if (!prev) {\n return null;\n }\n const points = [];\n if (Number(prev.data.y) > 0) {\n points.push([prev.x, prev.y]);\n }\n else {\n points.push([prev.x, prev.y + prev.height]);\n }\n if (Number(d.data.y) > 0 && !d.data.total) {\n points.push([d.x + d.width, d.y + d.height]);\n }\n else {\n points.push([d.x + d.width, d.y]);\n }\n return line(points);\n })\n .attr('stroke-width', 1)\n .attr('stroke-dasharray', () => getLineDashArray(DashStyle.Dash, 1));\n function handleShapeHover(data) {\n hoveredDataRef.current = data;\n const hoverEnabled = hoverOptions === null || hoverOptions === void 0 ? void 0 : hoverOptions.enabled;\n const inactiveEnabled = inactiveOptions === null || inactiveOptions === void 0 ? void 0 : inactiveOptions.enabled;\n if (!data) {\n if (hoverEnabled) {\n rectSelection.attr('fill', (d) => getWaterfallPointColor(d.data, d.series));\n }\n if (inactiveEnabled) {\n rectSelection.attr('opacity', null);\n labelSelection.attr('opacity', null);\n }\n return;\n }\n if (hoverEnabled) {\n const hoveredValues = data.map((d) => d.data.x);\n rectSelection.attr('fill', (d) => {\n var _a;\n const fillColor = getWaterfallPointColor(d.data, d.series);\n if (hoveredValues.includes(d.data.x)) {\n const brightness = hoverOptions === null || hoverOptions === void 0 ? void 0 : hoverOptions.brightness;\n return ((_a = color(fillColor)) === null || _a === void 0 ? void 0 : _a.brighter(brightness).toString()) || fillColor;\n }\n return fillColor;\n });\n }\n if (inactiveEnabled) {\n const hoveredSeries = data.map((d) => d.series.id);\n rectSelection.attr('opacity', (d) => {\n return hoveredSeries.includes(d.series.id)\n ? null\n : (inactiveOptions === null || inactiveOptions === void 0 ? void 0 : inactiveOptions.opacity) || null;\n });\n labelSelection.attr('opacity', (d) => {\n return hoveredSeries.includes(d.series.id)\n ? null\n : (inactiveOptions === null || inactiveOptions === void 0 ? void 0 : inactiveOptions.opacity) || null;\n });\n }\n }\n if (hoveredDataRef.current !== null) {\n handleShapeHover(hoveredDataRef.current);\n }\n dispatcher.on('hover-shape.waterfall', handleShapeHover);\n return () => {\n dispatcher.on('hover-shape.waterfall', null);\n };\n }, [dispatcher, preparedData, seriesOptions]);\n return (React.createElement(React.Fragment, null,\n React.createElement(\"g\", { ref: ref, className: b() }),\n React.createElement(HtmlLayer, { preparedData: preparedData, htmlLayout: htmlLayout })));\n};\n","import React from 'react';\nimport { group } from 'd3';\nimport { ChartError } from '../../libs';\nimport { getOnlyVisibleSeries } from '../../utils';\nimport { AreaSeriesShapes } from './area';\nimport { prepareAreaData } from './area/prepare-data';\nimport { BarXSeriesShapes, prepareBarXData } from './bar-x';\nimport { BarYSeriesShapes, prepareBarYData } from './bar-y';\nimport { LineSeriesShapes } from './line';\nimport { prepareLineData } from './line/prepare-data';\nimport { PieSeriesShapes } from './pie';\nimport { preparePieData } from './pie/prepare-data';\nimport { SankeySeriesShape } from './sankey';\nimport { prepareSankeyData } from './sankey/prepare-data';\nimport { ScatterSeriesShape, prepareScatterData } from './scatter';\nimport { TreemapSeriesShape } from './treemap';\nimport { prepareTreemapData } from './treemap/prepare-data';\nimport { WaterfallSeriesShapes, prepareWaterfallData } from './waterfall';\nimport './styles.css';\nexport const useShapes = (args) => {\n const { boundsWidth, boundsHeight, dispatcher, series, seriesOptions, xAxis, xScale, yAxis, yScale, split, htmlLayout, } = args;\n const shapesComponents = React.useMemo(() => {\n const visibleSeries = getOnlyVisibleSeries(series);\n const groupedSeries = group(visibleSeries, (item) => item.type);\n const shapesData = [];\n // eslint-disable-next-line complexity\n const shapes = Array.from(groupedSeries).reduce((acc, item) => {\n const [seriesType, chartSeries] = item;\n switch (seriesType) {\n case 'bar-x': {\n if (xScale && yScale) {\n const preparedData = prepareBarXData({\n series: chartSeries,\n seriesOptions,\n xAxis,\n xScale,\n yAxis,\n yScale,\n boundsHeight,\n });\n acc.push(React.createElement(BarXSeriesShapes, { key: \"bar-x\", dispatcher: dispatcher, seriesOptions: seriesOptions, preparedData: preparedData, htmlLayout: htmlLayout }));\n shapesData.push(...preparedData);\n }\n break;\n }\n case 'bar-y': {\n if (xScale && yScale) {\n const preparedData = prepareBarYData({\n series: chartSeries,\n seriesOptions,\n xAxis,\n xScale,\n yAxis,\n yScale,\n });\n acc.push(React.createElement(BarYSeriesShapes, { key: \"bar-y\", dispatcher: dispatcher, seriesOptions: seriesOptions, preparedData: preparedData, htmlLayout: htmlLayout }));\n shapesData.push(...preparedData);\n }\n break;\n }\n case 'waterfall': {\n if (xScale && yScale) {\n const preparedData = prepareWaterfallData({\n series: chartSeries,\n seriesOptions,\n xAxis,\n xScale,\n yAxis,\n yScale,\n });\n acc.push(React.createElement(WaterfallSeriesShapes, { key: \"waterfall\", dispatcher: dispatcher, seriesOptions: seriesOptions, preparedData: preparedData, htmlLayout: htmlLayout }));\n shapesData.push(...preparedData);\n }\n break;\n }\n case 'line': {\n if (xScale && yScale) {\n const preparedData = prepareLineData({\n series: chartSeries,\n xAxis,\n xScale,\n yAxis,\n yScale,\n split,\n });\n acc.push(React.createElement(LineSeriesShapes, { key: \"line\", dispatcher: dispatcher, seriesOptions: seriesOptions, preparedData: preparedData, htmlLayout: htmlLayout }));\n shapesData.push(...preparedData);\n }\n break;\n }\n case 'area': {\n if (xScale && yScale) {\n const preparedData = prepareAreaData({\n series: chartSeries,\n xAxis,\n xScale,\n yAxis,\n yScale,\n boundsHeight,\n });\n acc.push(React.createElement(AreaSeriesShapes, { key: \"area\", dispatcher: dispatcher, seriesOptions: seriesOptions, preparedData: preparedData, htmlLayout: htmlLayout }));\n shapesData.push(...preparedData);\n }\n break;\n }\n case 'scatter': {\n if (xScale && yScale) {\n const preparedData = prepareScatterData({\n series: chartSeries,\n xAxis,\n xScale,\n yAxis,\n yScale,\n });\n acc.push(React.createElement(ScatterSeriesShape, { key: \"scatter\", dispatcher: dispatcher, preparedData: preparedData, seriesOptions: seriesOptions, htmlLayout: htmlLayout }));\n shapesData.push(...preparedData);\n }\n break;\n }\n case 'pie': {\n const preparedData = preparePieData({\n series: chartSeries,\n boundsWidth,\n boundsHeight,\n });\n acc.push(React.createElement(PieSeriesShapes, { key: \"pie\", dispatcher: dispatcher, preparedData: preparedData, seriesOptions: seriesOptions, htmlLayout: htmlLayout }));\n shapesData.push(...preparedData);\n break;\n }\n case 'treemap': {\n const preparedData = prepareTreemapData({\n // We should have exactly one series with \"treemap\" type\n // Otherwise data validation should emit an error\n series: chartSeries[0],\n width: boundsWidth,\n height: boundsHeight,\n });\n acc.push(React.createElement(TreemapSeriesShape, { key: \"treemap\", dispatcher: dispatcher, preparedData: preparedData, seriesOptions: seriesOptions, htmlLayout: htmlLayout }));\n shapesData.push(preparedData);\n break;\n }\n case 'sankey': {\n const preparedData = prepareSankeyData({\n series: chartSeries[0],\n width: boundsWidth,\n height: boundsHeight,\n });\n acc.push(React.createElement(SankeySeriesShape, { key: \"sankey\", dispatcher: dispatcher, preparedData: preparedData, seriesOptions: seriesOptions, htmlLayout: htmlLayout }));\n shapesData.push(preparedData);\n break;\n }\n default: {\n throw new ChartError({\n message: `The display method is not defined for a series with type \"${seriesType}\"`,\n });\n }\n }\n return acc;\n }, []);\n return { shapes, shapesData };\n }, [\n boundsWidth,\n boundsHeight,\n dispatcher,\n series,\n seriesOptions,\n xAxis,\n xScale,\n yAxis,\n yScale,\n ]);\n return { shapes: shapesComponents.shapes, shapesData: shapesComponents.shapesData };\n};\n","export const MIN_BAR_WIDTH = 1;\nexport const MIN_BAR_GAP = 1;\nexport const MIN_BAR_GROUP_GAP = 1;\n","import { ascending, descending, max, sort } from 'd3';\nimport get from 'lodash/get';\nimport { getDataCategoryValue, getLabelsSize } from '../../../utils';\nimport { MIN_BAR_GAP, MIN_BAR_GROUP_GAP, MIN_BAR_WIDTH } from '../constants';\nconst DEFAULT_LABEL_PADDING = 7;\nfunction groupByYValue(series, yAxis) {\n const data = {};\n series.forEach((s) => {\n s.data.forEach((d) => {\n const axisIndex = get(s, 'yAxis', 0);\n const seriesYAxis = yAxis[axisIndex];\n const categories = get(seriesYAxis, 'categories', []);\n const key = seriesYAxis.type === 'category'\n ? getDataCategoryValue({ axisDirection: 'y', categories, data: d })\n : d.y;\n if (key) {\n if (!data[key]) {\n data[key] = {};\n }\n if (!data[key][s.stackId]) {\n data[key][s.stackId] = [];\n }\n data[key][s.stackId].push({ data: d, series: s });\n }\n });\n });\n return data;\n}\nfunction getBandWidth(series, yAxis, yScale) {\n let bandWidth = Infinity;\n if (yAxis[0].type === 'category') {\n bandWidth = yScale.bandwidth();\n }\n else {\n const scale = yScale;\n const axisValues = series.reduce((acc, s) => {\n s.data.forEach((dataItem) => acc.push(Number(dataItem.y)));\n return acc;\n }, []);\n axisValues.sort().forEach((value, index) => {\n if (index > 0 && value !== axisValues[index - 1]) {\n const dist = scale(value) - scale(axisValues[index - 1]);\n if (dist < bandWidth) {\n bandWidth = dist;\n }\n }\n });\n }\n return bandWidth;\n}\nfunction setLabel(prepared) {\n const dataLabels = prepared.series.dataLabels;\n if (!dataLabels.enabled) {\n return;\n }\n const data = prepared.data;\n const content = String(data.label || data.x);\n const { maxHeight: height, maxWidth: width } = getLabelsSize({\n labels: [content],\n style: dataLabels.style,\n html: dataLabels.html,\n });\n const x = dataLabels.inside\n ? prepared.x + prepared.width / 2\n : prepared.x + prepared.width + DEFAULT_LABEL_PADDING;\n const y = prepared.y + prepared.height / 2;\n if (dataLabels.html) {\n prepared.htmlElements.push({\n x,\n y: y - height / 2,\n content,\n size: { width, height },\n });\n }\n else {\n prepared.label = {\n x,\n y: y + height / 2,\n text: content,\n textAnchor: dataLabels.inside ? 'middle' : 'right',\n style: dataLabels.style,\n series: prepared.series,\n size: { width, height },\n };\n }\n}\nexport const prepareBarYData = (args) => {\n const { series, seriesOptions, yAxis, xScale, yScale: [yScale], } = args;\n const xLinearScale = xScale;\n const plotWidth = xLinearScale(xLinearScale.domain()[1]);\n const barMaxWidth = get(seriesOptions, 'bar-y.barMaxWidth');\n const barPadding = get(seriesOptions, 'bar-y.barPadding');\n const groupPadding = get(seriesOptions, 'bar-y.groupPadding');\n const sortingOptions = get(seriesOptions, 'bar-y.dataSorting');\n const comparator = (sortingOptions === null || sortingOptions === void 0 ? void 0 : sortingOptions.direction) === 'desc' ? descending : ascending;\n const sortKey = (() => {\n switch (sortingOptions === null || sortingOptions === void 0 ? void 0 : sortingOptions.key) {\n case 'x': {\n return 'data.x';\n }\n case 'name': {\n return 'series.name';\n }\n default: {\n return undefined;\n }\n }\n })();\n const groupedData = groupByYValue(series, yAxis);\n const bandWidth = getBandWidth(series, yAxis, yScale);\n const maxGroupSize = max(Object.values(groupedData), (d) => Object.values(d).length) || 1;\n const groupGap = Math.max(bandWidth * groupPadding, MIN_BAR_GROUP_GAP);\n const groupWidth = bandWidth - groupGap;\n const rectGap = Math.max(bandWidth * barPadding, MIN_BAR_GAP);\n const barHeight = Math.max(MIN_BAR_WIDTH, Math.min(groupWidth / maxGroupSize - rectGap, barMaxWidth));\n const result = [];\n Object.entries(groupedData).forEach(([yValue, val]) => {\n const stacks = Object.values(val);\n const currentBarHeight = barHeight * stacks.length + rectGap * (stacks.length - 1);\n stacks.forEach((measureValues, groupItemIndex) => {\n const base = xLinearScale(0);\n let stackSum = base;\n const stackItems = [];\n const sortedData = sortKey\n ? sort(measureValues, (a, b) => comparator(get(a, sortKey), get(b, sortKey)))\n : measureValues;\n sortedData.forEach(({ data, series: s }, xValueIndex) => {\n let center;\n if (yAxis[0].type === 'category') {\n const bandScale = yScale;\n center = (bandScale(yValue) || 0) + bandWidth / 2;\n }\n else {\n const scale = yScale;\n center = scale(Number(yValue));\n }\n const y = center - currentBarHeight / 2 + (barHeight + rectGap) * groupItemIndex;\n const xValue = Number(data.x);\n const width = xValue > 0 ? xLinearScale(xValue) - base : base - xLinearScale(xValue);\n const item = {\n x: xValue > 0 ? stackSum : stackSum - width,\n y,\n width,\n height: barHeight,\n color: data.color || s.color,\n opacity: get(data, 'opacity', null),\n data,\n series: s,\n htmlElements: [],\n isLastStackItem: xValueIndex === sortedData.length - 1,\n };\n stackItems.push(item);\n stackSum += width + 1;\n });\n if (series.some((s) => s.stacking === 'percent')) {\n let acc = 0;\n const ratio = plotWidth / (stackSum - stackItems.length);\n stackItems.forEach((item) => {\n item.width = item.width * ratio;\n item.x = acc;\n acc += item.width;\n });\n }\n result.push(...stackItems);\n });\n });\n result.forEach((d) => {\n setLabel(d);\n });\n return result;\n};\n","import { getLabelsSize, getLeftPosition } from '../../../utils';\nimport { getXValue, getYValue } from '../utils';\nfunction getLabelData(point, series, xMax) {\n const text = String(point.data.label || point.data.y);\n const style = series.dataLabels.style;\n const size = getLabelsSize({ labels: [text], style });\n const labelData = {\n text,\n x: point.x,\n y: point.y - series.dataLabels.padding,\n style,\n size: { width: size.maxWidth, height: size.maxHeight },\n textAnchor: 'middle',\n series: series,\n active: true,\n };\n const left = getLeftPosition(labelData);\n if (left < 0) {\n labelData.x = labelData.x + Math.abs(left);\n }\n else {\n const right = left + labelData.size.width;\n if (right > xMax) {\n labelData.x = labelData.x - xMax - right;\n }\n }\n return labelData;\n}\nfunction getHtmlLabel(point, series, xMax) {\n const content = String(point.data.label || point.data.y);\n const size = getLabelsSize({ labels: [content], html: true });\n return {\n x: Math.min(xMax - size.maxWidth, Math.max(0, point.x)),\n y: Math.max(0, point.y - series.dataLabels.padding - size.maxHeight),\n content,\n size: { width: size.maxWidth, height: size.maxHeight },\n };\n}\nexport const prepareLineData = (args) => {\n const { series, xAxis, yAxis, xScale, yScale, split } = args;\n const [_xMin, xRangeMax] = xScale.range();\n const xMax = xRangeMax / (1 - xAxis.maxPadding);\n return series.reduce((acc, s) => {\n var _a;\n const yAxisIndex = s.yAxis;\n const seriesYAxis = yAxis[yAxisIndex];\n const yAxisTop = ((_a = split.plots[seriesYAxis.plotIndex]) === null || _a === void 0 ? void 0 : _a.top) || 0;\n const seriesYScale = yScale[s.yAxis];\n const points = s.data.map((d) => ({\n x: getXValue({ point: d, xAxis, xScale }),\n y: yAxisTop + getYValue({ point: d, yAxis: seriesYAxis, yScale: seriesYScale }),\n active: true,\n data: d,\n series: s,\n }));\n const htmlElements = [];\n let labels = [];\n if (s.dataLabels.enabled) {\n if (s.dataLabels.html) {\n htmlElements.push(...points.map((p) => getHtmlLabel(p, s, xMax)));\n }\n else {\n labels = points.map((p) => getLabelData(p, s, xMax));\n }\n }\n let markers = [];\n if (s.marker.states.normal.enabled || s.marker.states.hover.enabled) {\n markers = points.map((p) => ({\n point: p,\n active: true,\n hovered: false,\n }));\n }\n const result = {\n points,\n markers,\n labels,\n color: s.color,\n width: s.lineWidth,\n series: s,\n hovered: false,\n active: true,\n id: s.id,\n dashStyle: s.dashStyle,\n linecap: s.linecap,\n opacity: s.opacity,\n htmlElements,\n };\n acc.push(result);\n return acc;\n }, []);\n};\n","import { group, sort } from 'd3';\nimport { getDataCategoryValue, getLabelsSize, getLeftPosition } from '../../../utils';\nimport { getXValue, getYValue } from '../utils';\nfunction getLabelData(point, series, xMax) {\n const text = String(point.data.label || point.data.y);\n const style = series.dataLabels.style;\n const size = getLabelsSize({ labels: [text], style, html: series.dataLabels.html });\n const labelData = {\n text,\n x: point.x,\n y: point.y - series.dataLabels.padding,\n style,\n size: { width: size.maxWidth, height: size.maxHeight },\n textAnchor: 'middle',\n series: series,\n active: true,\n };\n const left = getLeftPosition(labelData);\n if (left < 0) {\n labelData.x = labelData.x + Math.abs(left);\n }\n else {\n const right = left + labelData.size.width;\n if (right > xMax) {\n labelData.x = labelData.x - (right - xMax);\n }\n }\n return labelData;\n}\nfunction getXValues(series, xAxis, xScale) {\n const categories = xAxis.categories || [];\n const xValues = series.reduce((acc, s) => {\n s.data.forEach((d) => {\n const key = String(xAxis.type === 'category'\n ? getDataCategoryValue({ axisDirection: 'x', categories, data: d })\n : d.x);\n if (!acc.has(key)) {\n acc.set(key, getXValue({ point: d, xAxis, xScale }));\n }\n });\n return acc;\n }, new Map());\n if (xAxis.type === 'category') {\n return categories.reduce((acc, category) => {\n const xValue = xValues.get(category);\n if (typeof xValue === 'number') {\n acc.push([category, xValue]);\n }\n return acc;\n }, []);\n }\n return sort(Array.from(xValues), ([_x, xValue]) => xValue);\n}\nexport const prepareAreaData = (args) => {\n const { series, xAxis, xScale, yAxis, yScale, boundsHeight: plotHeight } = args;\n const [_xMin, xRangeMax] = xScale.range();\n const xMax = xRangeMax / (1 - xAxis.maxPadding);\n return Array.from(group(series, (s) => s.stackId)).reduce((result, [_stackId, seriesStack]) => {\n const xValues = getXValues(seriesStack, xAxis, xScale);\n const accumulatedYValues = new Map();\n xValues.forEach(([key]) => {\n accumulatedYValues.set(key, 0);\n });\n const seriesStackData = seriesStack.reduce((acc, s) => {\n const yAxisIndex = s.yAxis;\n const seriesYAxis = yAxis[yAxisIndex];\n const seriesYScale = yScale[yAxisIndex];\n const yMin = getYValue({ point: { y: 0 }, yAxis: seriesYAxis, yScale: seriesYScale });\n const seriesData = s.data.reduce((m, d) => {\n const key = String(xAxis.type === 'category'\n ? getDataCategoryValue({\n axisDirection: 'x',\n categories: xAxis.categories || [],\n data: d,\n })\n : d.x);\n return m.set(key, d);\n }, new Map());\n const points = xValues.reduce((pointsAcc, [x, xValue]) => {\n const accumulatedYValue = accumulatedYValues.get(x) || 0;\n const d = seriesData.get(x) ||\n {\n x,\n // FIXME: think about how to break the series into separate areas(null Y values)\n y: 0,\n };\n const yValue = getYValue({ point: d, yAxis: seriesYAxis, yScale: seriesYScale }) -\n accumulatedYValue;\n accumulatedYValues.set(x, yMin - yValue);\n pointsAcc.push({\n y0: yMin - accumulatedYValue,\n x: xValue,\n y: yValue,\n data: d,\n series: s,\n });\n return pointsAcc;\n }, []);\n let labels = [];\n const htmlElements = [];\n if (s.dataLabels.enabled) {\n const labelItems = points.map((p) => getLabelData(p, s, xMax));\n if (s.dataLabels.html) {\n const htmlLabels = labelItems.map((l) => {\n var _a;\n const style = (_a = l.style) !== null && _a !== void 0 ? _a : s.dataLabels.style;\n const labelSize = getLabelsSize({ labels: [l.text], style, html: true });\n return {\n x: l.x - l.size.width / 2,\n y: l.y,\n content: l.text,\n size: { width: labelSize.maxWidth, height: labelSize.maxHeight },\n };\n });\n htmlElements.push(...htmlLabels);\n }\n else {\n labels = labelItems;\n }\n }\n let markers = [];\n if (s.marker.states.normal.enabled || s.marker.states.hover.enabled) {\n markers = points.map((p) => ({\n point: p,\n active: true,\n hovered: false,\n }));\n }\n acc.push({\n points,\n markers,\n labels,\n color: s.color,\n opacity: s.opacity,\n width: s.lineWidth,\n series: s,\n hovered: false,\n active: true,\n id: s.id,\n htmlElements,\n });\n return acc;\n }, []);\n if (series.some((s) => s.stacking === 'percent')) {\n xValues.forEach(([x], index) => {\n const stackHeight = accumulatedYValues.get(x) || 0;\n let acc = 0;\n const ratio = plotHeight / stackHeight;\n seriesStackData.forEach((item) => {\n const point = item.points[index];\n if (point) {\n const height = (point.y0 - point.y) * ratio;\n point.y0 = plotHeight - height - acc;\n point.y = point.y0 + height;\n acc += height;\n }\n });\n });\n }\n return result.concat(seriesStackData);\n }, []);\n};\n","import { stratify, treemap, treemapBinary, treemapDice, treemapSlice, treemapSliceDice, treemapSquarify, } from 'd3';\nimport { LayoutAlgorithm } from '../../../constants';\nimport { getLabelsSize } from '../../../utils';\nconst DEFAULT_PADDING = 1;\nfunction getLabels(args) {\n const { data, html, padding, align } = args;\n return data.reduce((acc, d) => {\n const texts = Array.isArray(d.data.name) ? d.data.name : [d.data.name];\n texts.forEach((text, index) => {\n var _a;\n const { maxHeight: lineHeight, maxWidth: labelWidth } = (_a = getLabelsSize({ labels: [text], html })) !== null && _a !== void 0 ? _a : {};\n const left = d.x0 + padding;\n const right = d.x1 - padding;\n const width = Math.max(0, right - left);\n let x = left;\n const y = index * lineHeight + d.y0 + padding;\n switch (align) {\n case 'left': {\n x = left;\n break;\n }\n case 'center': {\n x = Math.max(left, left + (width - labelWidth) / 2);\n break;\n }\n case 'right': {\n x = Math.max(left, right - labelWidth);\n break;\n }\n }\n const item = html\n ? {\n content: text,\n x,\n y,\n size: { width, height: lineHeight },\n }\n : {\n text,\n x,\n y,\n width,\n nodeData: d.data,\n };\n acc.push(item);\n });\n return acc;\n }, []);\n}\nexport function prepareTreemapData(args) {\n var _a;\n const { series, width, height } = args;\n const dataWithRootNode = getSeriesDataWithRootNode(series);\n const hierarchy = stratify()\n .id((d) => {\n if (d.id) {\n return d.id;\n }\n return Array.isArray(d.name) ? d.name.join() : d.name;\n })\n .parentId((d) => d.parentId)(dataWithRootNode)\n .sum((d) => d.value || 0);\n const treemapInstance = treemap();\n switch (series.layoutAlgorithm) {\n case LayoutAlgorithm.Binary: {\n treemapInstance.tile(treemapBinary);\n break;\n }\n case LayoutAlgorithm.Dice: {\n treemapInstance.tile(treemapDice);\n break;\n }\n case LayoutAlgorithm.Slice: {\n treemapInstance.tile(treemapSlice);\n break;\n }\n case LayoutAlgorithm.SliceDice: {\n treemapInstance.tile(treemapSliceDice);\n break;\n }\n case LayoutAlgorithm.Squarify: {\n treemapInstance.tile(treemapSquarify);\n break;\n }\n }\n const root = treemapInstance.size([width, height]).paddingInner((d) => {\n var _a, _b;\n const levelOptions = (_a = series.levels) === null || _a === void 0 ? void 0 : _a.find((l) => l.index === d.depth + 1);\n return (_b = levelOptions === null || levelOptions === void 0 ? void 0 : levelOptions.padding) !== null && _b !== void 0 ? _b : DEFAULT_PADDING;\n })(hierarchy);\n const leaves = root.leaves();\n let labelData = [];\n const htmlElements = [];\n if ((_a = series.dataLabels) === null || _a === void 0 ? void 0 : _a.enabled) {\n const { html, padding, align } = series.dataLabels;\n const labels = getLabels({ html, padding, align, data: leaves });\n if (html) {\n htmlElements.push(...labels);\n }\n else {\n labelData = labels;\n }\n }\n return { labelData, leaves, series, htmlElements };\n}\nfunction getSeriesDataWithRootNode(series) {\n return series.data.reduce((acc, d) => {\n const dataChunk = Object.assign({}, d);\n if (!dataChunk.parentId) {\n dataChunk.parentId = series.id;\n }\n acc.push(dataChunk);\n return acc;\n }, [{ name: series.name, id: series.id }]);\n}\n","import { sankey, sankeyLinkHorizontal } from 'd3-sankey';\nexport function prepareSankeyData(args) {\n const { series, width, height } = args;\n const htmlElements = [];\n const sankeyGenerator = sankey()\n .nodeId((d) => d.name)\n .nodeSort((d) => d.index)\n .nodeWidth(15)\n .nodePadding(10)\n .extent([\n [1, 5],\n [width - 1, height - 5],\n ]);\n const { nodes, links } = sankeyGenerator({\n nodes: series.data,\n links: series.data.reduce((acc, item) => {\n item.links.forEach((l) => {\n const target = series.data.find((d) => d.name === l.name);\n if (target) {\n acc.push({\n source: item,\n target,\n value: l.value,\n });\n }\n });\n return acc;\n }, []),\n });\n const sankeyNodes = nodes.map((node) => {\n var _a, _b, _c, _d, _e, _f;\n return {\n x0: (_a = node.x0) !== null && _a !== void 0 ? _a : 0,\n x1: (_b = node.x1) !== null && _b !== void 0 ? _b : 0,\n y0: (_c = node.y0) !== null && _c !== void 0 ? _c : 0,\n y1: (_d = node.y1) !== null && _d !== void 0 ? _d : 0,\n color: (_e = node.color) !== null && _e !== void 0 ? _e : '',\n data: series.data[(_f = node.index) !== null && _f !== void 0 ? _f : 0],\n };\n });\n const sankeyLinks = links.map((d) => {\n var _a, _b;\n return {\n opacity: 0.75,\n color: (_a = d.source.color) !== null && _a !== void 0 ? _a : '',\n path: sankeyLinkHorizontal()(d),\n strokeWidth: Math.max(1, (_b = d.width) !== null && _b !== void 0 ? _b : 0),\n source: d.source,\n target: d.target,\n value: d.value,\n };\n });\n const dataLabels = [];\n if (series.dataLabels.enabled) {\n const labels = nodes.map((d) => {\n var _a, _b, _c, _d;\n const x0 = (_a = d.x0) !== null && _a !== void 0 ? _a : 0;\n const x1 = (_b = d.x1) !== null && _b !== void 0 ? _b : 0;\n const y0 = (_c = d.y0) !== null && _c !== void 0 ? _c : 0;\n const y1 = (_d = d.y1) !== null && _d !== void 0 ? _d : 0;\n return {\n text: d.name,\n x: x0 < width / 2 ? x1 + 6 : x0 - 6,\n y: (y1 + y0) / 2,\n textAnchor: x0 < width / 2 ? 'start' : 'end',\n style: series.dataLabels.style,\n };\n });\n dataLabels.push(...labels);\n }\n return { series, nodes: sankeyNodes, links: sankeyLinks, htmlElements, labels: dataLabels };\n}\n","export default function min(values, valueof) {\n let min;\n if (valueof === undefined) {\n for (const value of values) {\n if (value != null\n && (min > value || (min === undefined && value >= value))) {\n min = value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null\n && (min > value || (min === undefined && value >= value))) {\n min = value;\n }\n }\n }\n return min;\n}\n","import get from 'lodash/get';\nimport { DEFAULT_AXIS_LABEL_FONT_SIZE, axisLabelsDefaults, xAxisTitleDefaults, } from '../../constants';\nimport { CHART_SERIES_WITH_VOLUME_ON_X_AXIS, calculateCos, formatAxisTickLabel, getClosestPointsRange, getHorisontalSvgTextHeight, getLabelsSize, getMaxTickCount, getTicksCount, getXAxisItems, hasOverlappingLabels, wrapText, } from '../../utils';\nimport { createXScale } from '../useAxisScales';\nfunction getLabelSettings({ axis, series, width, autoRotation = true, }) {\n const scale = createXScale(axis, series, width);\n const tickCount = getTicksCount({ axis, range: width });\n const ticks = getXAxisItems({\n scale: scale,\n count: tickCount,\n maxCount: getMaxTickCount({ width, axis }),\n });\n const step = getClosestPointsRange(axis, ticks);\n const labels = ticks.map((value) => {\n return formatAxisTickLabel({\n axis,\n value,\n step,\n });\n });\n const overlapping = hasOverlappingLabels({\n width,\n labels,\n padding: axis.labels.padding,\n style: axis.labels.style,\n });\n const defaultRotation = overlapping && autoRotation ? -45 : 0;\n const rotation = axis.labels.rotation || defaultRotation;\n const labelsHeight = rotation\n ? getLabelsSize({\n labels,\n style: axis.labels.style,\n rotation,\n }).maxHeight\n : axis.labels.lineHeight;\n const maxHeight = rotation ? calculateCos(rotation) * axis.labels.maxWidth : labelsHeight;\n return { height: Math.min(maxHeight, labelsHeight), rotation };\n}\nfunction getAxisMin(axis, series) {\n const min = axis === null || axis === void 0 ? void 0 : axis.min;\n if (typeof min === 'undefined' &&\n (series === null || series === void 0 ? void 0 : series.some((s) => CHART_SERIES_WITH_VOLUME_ON_X_AXIS.includes(s.type)))) {\n return series.reduce((minValue, s) => {\n // @ts-expect-error\n const minYValue = s.data.reduce((res, d) => Math.min(res, get(d, 'x', 0)), 0);\n return Math.min(minValue, minYValue);\n }, 0);\n }\n return min;\n}\nexport const getPreparedXAxis = ({ xAxis, series, width, }) => {\n var _a;\n const titleText = get(xAxis, 'title.text', '');\n const titleStyle = Object.assign(Object.assign({}, xAxisTitleDefaults.style), get(xAxis, 'title.style'));\n const titleMaxRowsCount = get(xAxis, 'title.maxRowCount', xAxisTitleDefaults.maxRowCount);\n const estimatedTitleRows = wrapText({\n text: titleText,\n style: titleStyle,\n width,\n }).slice(0, titleMaxRowsCount);\n const titleSize = getLabelsSize({\n labels: [titleText],\n style: titleStyle,\n });\n const labelsStyle = {\n fontSize: get(xAxis, 'labels.style.fontSize', DEFAULT_AXIS_LABEL_FONT_SIZE),\n };\n const preparedXAxis = {\n type: get(xAxis, 'type', 'linear'),\n labels: {\n enabled: get(xAxis, 'labels.enabled', true),\n margin: get(xAxis, 'labels.margin', axisLabelsDefaults.margin),\n padding: get(xAxis, 'labels.padding', axisLabelsDefaults.padding),\n dateFormat: get(xAxis, 'labels.dateFormat'),\n numberFormat: get(xAxis, 'labels.numberFormat'),\n rotation: get(xAxis, 'labels.rotation', 0),\n style: labelsStyle,\n width: 0,\n height: 0,\n lineHeight: getHorisontalSvgTextHeight({ text: 'Tmp', style: labelsStyle }),\n maxWidth: get(xAxis, 'labels.maxWidth', axisLabelsDefaults.maxWidth),\n },\n lineColor: get(xAxis, 'lineColor'),\n categories: get(xAxis, 'categories'),\n timestamps: get(xAxis, 'timestamps'),\n title: {\n text: titleText,\n style: titleStyle,\n margin: get(xAxis, 'title.margin', xAxisTitleDefaults.margin),\n height: titleSize.maxHeight * estimatedTitleRows.length,\n width: titleSize.maxWidth,\n align: get(xAxis, 'title.align', xAxisTitleDefaults.align),\n maxRowCount: get(xAxis, 'title.maxRowCount', xAxisTitleDefaults.maxRowCount),\n },\n min: getAxisMin(xAxis, series),\n maxPadding: get(xAxis, 'maxPadding', 0.01),\n grid: {\n enabled: get(xAxis, 'grid.enabled', true),\n },\n ticks: {\n pixelInterval: get(xAxis, 'ticks.pixelInterval'),\n },\n position: 'bottom',\n plotIndex: 0,\n plotLines: [],\n };\n const { height, rotation } = getLabelSettings({\n axis: preparedXAxis,\n series,\n width,\n autoRotation: (_a = xAxis === null || xAxis === void 0 ? void 0 : xAxis.labels) === null || _a === void 0 ? void 0 : _a.autoRotation,\n });\n preparedXAxis.labels.height = height;\n preparedXAxis.labels.rotation = rotation;\n return preparedXAxis;\n};\n","import get from 'lodash/get';\nimport { DEFAULT_AXIS_LABEL_FONT_SIZE, DEFAULT_AXIS_TYPE, DashStyle, axisLabelsDefaults, yAxisTitleDefaults, } from '../../constants';\nimport { CHART_SERIES_WITH_VOLUME_ON_Y_AXIS, formatAxisTickLabel, getClosestPointsRange, getHorisontalSvgTextHeight, getLabelsSize, getScaleTicks, getWaterfallPointSubtotal, wrapText, } from '../../utils';\nimport { createYScale } from '../useAxisScales';\nconst getAxisLabelMaxWidth = (args) => {\n const { axis, series } = args;\n if (!axis.labels.enabled) {\n return 0;\n }\n const scale = createYScale(axis, series, 1);\n const ticks = getScaleTicks(scale);\n // FIXME: it is necessary to filter data, since we do not draw overlapping ticks\n const step = getClosestPointsRange(axis, ticks);\n const labels = ticks.map((tick) => formatAxisTickLabel({\n axis,\n value: tick,\n step,\n }));\n return getLabelsSize({\n labels,\n style: axis.labels.style,\n rotation: axis.labels.rotation,\n }).maxWidth;\n};\nfunction getAxisMin(axis, series) {\n const min = axis === null || axis === void 0 ? void 0 : axis.min;\n if (typeof min === 'undefined' &&\n (series === null || series === void 0 ? void 0 : series.some((s) => CHART_SERIES_WITH_VOLUME_ON_Y_AXIS.includes(s.type)))) {\n return series.reduce((minValue, s) => {\n switch (s.type) {\n case 'waterfall': {\n const minSubTotal = s.data.reduce((res, d) => Math.min(res, getWaterfallPointSubtotal(d, s) || 0), 0);\n return Math.min(minValue, minSubTotal);\n }\n default: {\n // @ts-expect-error\n const minYValue = s.data.reduce((res, d) => Math.min(res, get(d, 'y', 0)), 0);\n return Math.min(minValue, minYValue);\n }\n }\n }, 0);\n }\n return min;\n}\nexport const getPreparedYAxis = ({ series, yAxis, height, }) => {\n const axisByPlot = [];\n const axisItems = yAxis || [{}];\n return axisItems.map((axisItem) => {\n const plotIndex = get(axisItem, 'plotIndex', 0);\n const firstPlotAxis = !axisByPlot[plotIndex];\n if (firstPlotAxis) {\n axisByPlot[plotIndex] = [];\n }\n axisByPlot[plotIndex].push(axisItem);\n const defaultAxisPosition = firstPlotAxis ? 'left' : 'right';\n const labelsEnabled = get(axisItem, 'labels.enabled', true);\n const labelsStyle = {\n fontSize: get(axisItem, 'labels.style.fontSize', DEFAULT_AXIS_LABEL_FONT_SIZE),\n };\n const titleText = get(axisItem, 'title.text', '');\n const titleStyle = Object.assign(Object.assign({}, yAxisTitleDefaults.style), get(axisItem, 'title.style'));\n const titleMaxRowsCount = get(axisItem, 'title.maxRowCount', yAxisTitleDefaults.maxRowCount);\n const estimatedTitleRows = wrapText({\n text: titleText,\n style: titleStyle,\n width: height,\n }).slice(0, titleMaxRowsCount);\n const titleSize = getLabelsSize({ labels: [titleText], style: titleStyle });\n const axisType = get(axisItem, 'type', DEFAULT_AXIS_TYPE);\n const preparedAxis = {\n type: axisType,\n labels: {\n enabled: labelsEnabled,\n margin: labelsEnabled\n ? get(axisItem, 'labels.margin', axisLabelsDefaults.margin)\n : 0,\n padding: labelsEnabled\n ? get(axisItem, 'labels.padding', axisLabelsDefaults.padding)\n : 0,\n dateFormat: get(axisItem, 'labels.dateFormat'),\n numberFormat: get(axisItem, 'labels.numberFormat'),\n style: labelsStyle,\n rotation: get(axisItem, 'labels.rotation', 0),\n width: 0,\n height: 0,\n lineHeight: getHorisontalSvgTextHeight({ text: 'TmpLabel', style: labelsStyle }),\n maxWidth: get(axisItem, 'labels.maxWidth', axisLabelsDefaults.maxWidth),\n },\n lineColor: get(axisItem, 'lineColor'),\n categories: get(axisItem, 'categories'),\n timestamps: get(axisItem, 'timestamps'),\n title: {\n text: titleText,\n margin: get(axisItem, 'title.margin', yAxisTitleDefaults.margin),\n style: titleStyle,\n width: titleSize.maxWidth,\n height: titleSize.maxHeight * estimatedTitleRows.length,\n align: get(axisItem, 'title.align', yAxisTitleDefaults.align),\n maxRowCount: titleMaxRowsCount,\n },\n min: getAxisMin(axisItem, series),\n maxPadding: get(axisItem, 'maxPadding', 0.05),\n grid: {\n enabled: get(axisItem, 'grid.enabled', firstPlotAxis),\n },\n ticks: {\n pixelInterval: get(axisItem, 'ticks.pixelInterval'),\n },\n position: get(axisItem, 'position', defaultAxisPosition),\n plotIndex: get(axisItem, 'plotIndex', 0),\n plotLines: get(axisItem, 'plotLines', []).map((d) => ({\n value: get(d, 'value', 0),\n color: get(d, 'color', 'var(--g-color-base-brand)'),\n width: get(d, 'width', 1),\n dashStyle: get(d, 'dashStyle', DashStyle.Solid),\n opacity: get(d, 'opacity', 1),\n layerPlacement: get(d, 'layerPlacement', 'before'),\n })),\n };\n if (labelsEnabled) {\n preparedAxis.labels.width = getAxisLabelMaxWidth({ axis: preparedAxis, series });\n }\n return preparedAxis;\n });\n};\n","import React from 'react';\nimport { useAxisScales, useChartDimensions, useChartOptions, usePrevious, useSeries, useShapes, useSplit, } from '../../hooks';\nimport { getYAxisWidth } from '../../hooks/useChartDimensions/utils';\nimport { getPreparedXAxis } from '../../hooks/useChartOptions/x-axis';\nimport { getPreparedYAxis } from '../../hooks/useChartOptions/y-axis';\nexport function useChartInnerProps(props) {\n const { width, height, data, dispatcher, htmlLayout } = props;\n const prevWidth = usePrevious(width);\n const prevHeight = usePrevious(height);\n const { chart, title, tooltip } = useChartOptions({ data });\n const xAxis = React.useMemo(() => getPreparedXAxis({ xAxis: data.xAxis, width, series: data.series.data }), [data, width]);\n const yAxis = React.useMemo(() => getPreparedYAxis({\n series: data.series.data,\n yAxis: data.yAxis,\n height,\n }), [data, height]);\n const { legendItems, legendConfig, preparedSeries, preparedSeriesOptions, preparedLegend, handleLegendItemClick, } = useSeries({\n chartWidth: width,\n chartHeight: height,\n chartMargin: chart.margin,\n series: data.series,\n legend: data.legend,\n preparedYAxis: yAxis,\n });\n const { boundsWidth, boundsHeight } = useChartDimensions({\n width,\n height,\n margin: chart.margin,\n preparedLegend,\n preparedXAxis: xAxis,\n preparedYAxis: yAxis,\n preparedSeries: preparedSeries,\n });\n const preparedSplit = useSplit({ split: data.split, boundsHeight, chartWidth: width });\n const { xScale, yScale } = useAxisScales({\n boundsWidth,\n boundsHeight,\n series: preparedSeries,\n xAxis,\n yAxis,\n split: preparedSplit,\n });\n const { shapes, shapesData } = useShapes({\n boundsWidth,\n boundsHeight,\n dispatcher,\n series: preparedSeries,\n seriesOptions: preparedSeriesOptions,\n xAxis,\n xScale,\n yAxis,\n yScale,\n split: preparedSplit,\n htmlLayout,\n });\n const boundsOffsetTop = chart.margin.top;\n // We only need to consider the width of the first left axis\n const boundsOffsetLeft = chart.margin.left + getYAxisWidth(yAxis[0]);\n return {\n boundsHeight,\n boundsOffsetLeft,\n boundsOffsetTop,\n boundsWidth,\n handleLegendItemClick,\n legendConfig,\n legendItems,\n preparedLegend,\n preparedSeries,\n preparedSplit,\n prevHeight,\n prevWidth,\n shapes,\n shapesData,\n title,\n tooltip,\n xAxis,\n xScale,\n yAxis,\n yScale,\n };\n}\n","import React from 'react';\nimport { getPreparedChart } from './chart';\nimport { getPreparedTitle } from './title';\nimport { getPreparedTooltip } from './tooltip';\nexport const useChartOptions = (args) => {\n const { data: { chart, title, tooltip }, } = args;\n const options = React.useMemo(() => {\n const preparedTitle = getPreparedTitle({ title });\n const preparedTooltip = getPreparedTooltip({ tooltip });\n const preparedChart = getPreparedChart({\n chart,\n preparedTitle,\n });\n return {\n chart: preparedChart,\n title: preparedTitle,\n tooltip: preparedTooltip,\n };\n }, [chart, title, tooltip]);\n return options;\n};\n","import get from 'lodash/get';\nimport { getHorisontalSvgTextHeight } from '../../utils';\nconst DEFAULT_TITLE_FONT_SIZE = '15px';\nconst TITLE_PADDINGS = 8 * 2;\nexport const getPreparedTitle = ({ title, }) => {\n const titleText = get(title, 'text');\n const titleStyle = {\n fontSize: get(title, 'style.fontSize', DEFAULT_TITLE_FONT_SIZE),\n fontWeight: get(title, 'style.fontWeight'),\n };\n const titleHeight = titleText\n ? getHorisontalSvgTextHeight({ text: titleText, style: titleStyle }) + TITLE_PADDINGS\n : 0;\n const preparedTitle = titleText\n ? { text: titleText, style: titleStyle, height: titleHeight }\n : undefined;\n return preparedTitle;\n};\n","import get from 'lodash/get';\nexport const getPreparedTooltip = (args) => {\n const { tooltip } = args;\n return Object.assign(Object.assign({}, tooltip), { enabled: get(tooltip, 'enabled', true) });\n};\n","import React from 'react';\nimport { isAxisRelatedSeries } from '../../utils';\nimport { getBoundsWidth } from './utils';\nexport { getBoundsWidth } from './utils';\nconst getBottomOffset = (args) => {\n const { hasAxisRelatedSeries, preparedLegend, preparedXAxis } = args;\n let result = 0;\n if (preparedLegend.enabled) {\n result += preparedLegend.height + preparedLegend.margin;\n }\n if (hasAxisRelatedSeries) {\n if (preparedXAxis.title.text) {\n result += preparedXAxis.title.height + preparedXAxis.title.margin;\n }\n if (preparedXAxis.labels.enabled) {\n result += preparedXAxis.labels.margin + preparedXAxis.labels.height;\n }\n }\n return result;\n};\nexport const useChartDimensions = (args) => {\n const { margin, width, height, preparedLegend, preparedXAxis, preparedYAxis, preparedSeries } = args;\n return React.useMemo(() => {\n const hasAxisRelatedSeries = preparedSeries.some(isAxisRelatedSeries);\n const boundsWidth = getBoundsWidth({ chartWidth: width, chartMargin: margin, preparedYAxis });\n const bottomOffset = getBottomOffset({\n hasAxisRelatedSeries,\n preparedLegend,\n preparedXAxis,\n });\n const boundsHeight = height - margin.top - margin.bottom - bottomOffset;\n return { boundsWidth, boundsHeight };\n }, [margin, width, height, preparedLegend, preparedXAxis, preparedYAxis, preparedSeries]);\n};\n","import get from 'lodash/get';\nimport { calculateNumericProperty, getHorisontalSvgTextHeight } from '../../utils';\nconst DEFAULT_TITLE_FONT_SIZE = '15px';\nconst TITLE_TOP_BOTTOM_PADDING = 8;\nfunction preparePlotTitle(args) {\n const { title, plotIndex, plotHeight, chartWidth, gap } = args;\n const titleText = (title === null || title === void 0 ? void 0 : title.text) || '';\n const titleStyle = {\n fontSize: get(title, 'style.fontSize', DEFAULT_TITLE_FONT_SIZE),\n fontWeight: get(title, 'style.fontWeight'),\n };\n const titleHeight = titleText\n ? getHorisontalSvgTextHeight({ text: titleText, style: titleStyle }) +\n TITLE_TOP_BOTTOM_PADDING * 2\n : 0;\n const top = plotIndex * (plotHeight + gap);\n return {\n text: titleText,\n x: chartWidth / 2,\n y: top + titleHeight / 2,\n style: titleStyle,\n height: titleHeight,\n };\n}\nexport function getPlotHeight(args) {\n const { split, boundsHeight, gap } = args;\n const plots = (split === null || split === void 0 ? void 0 : split.plots) || [];\n if (plots.length > 1) {\n return (boundsHeight - gap * (plots.length - 1)) / plots.length;\n }\n return boundsHeight;\n}\nexport const useSplit = (args) => {\n var _a;\n const { split, boundsHeight, chartWidth } = args;\n const splitGap = (_a = calculateNumericProperty({ value: split === null || split === void 0 ? void 0 : split.gap, base: boundsHeight })) !== null && _a !== void 0 ? _a : 0;\n const plotHeight = getPlotHeight({ split: split, boundsHeight, gap: splitGap });\n const plots = (split === null || split === void 0 ? void 0 : split.plots) || [];\n return {\n plots: plots.map((p, index) => {\n const title = preparePlotTitle({\n title: p.title,\n plotIndex: index,\n gap: splitGap,\n plotHeight,\n chartWidth,\n });\n const top = index * (plotHeight + splitGap);\n return {\n top: top + title.height,\n height: plotHeight - title.height,\n title,\n };\n }),\n gap: splitGap,\n };\n};\n","import React from 'react';\nimport { EventType, block, getD3Dispatcher } from '../../utils';\nimport { AxisX, AxisY } from '../Axis';\nimport { Legend } from '../Legend';\nimport { PlotTitle } from '../PlotTitle';\nimport { Title } from '../Title';\nimport { Tooltip } from '../Tooltip';\nimport { useChartInnerHandlers } from './useChartInnerHandlers';\nimport { useChartInnerProps } from './useChartInnerProps';\nimport { useChartInnerState } from './useChartInnerState';\nimport './styles.css';\nconst b = block('d3');\nexport const ChartInner = (props) => {\n var _a, _b, _c, _d;\n const { width, height, data } = props;\n const svgRef = React.useRef(null);\n const htmlLayerRef = React.useRef(null);\n const plotRef = React.useRef(null);\n const dispatcher = React.useMemo(() => getD3Dispatcher(), []);\n const { boundsHeight, boundsOffsetLeft, boundsOffsetTop, boundsWidth, handleLegendItemClick, legendConfig, legendItems, preparedSeries, preparedSplit, preparedLegend, prevHeight, prevWidth, shapes, shapesData, title, tooltip, xAxis, xScale, yAxis, yScale, } = useChartInnerProps(Object.assign(Object.assign({}, props), { dispatcher, htmlLayout: htmlLayerRef.current }));\n const { tooltipPinned, togglePinTooltip, unpinTooltip } = useChartInnerState({\n dispatcher,\n tooltip,\n });\n const { handleChartClick, handleMouseLeave, throttledHandleMouseMove, throttledHandleTouchMove } = useChartInnerHandlers({\n boundsHeight,\n boundsOffsetLeft,\n boundsOffsetTop,\n boundsWidth,\n dispatcher,\n shapesData,\n svgContainer: svgRef.current,\n togglePinTooltip,\n tooltipPinned,\n unpinTooltip,\n xAxis,\n yAxis,\n });\n const clickHandler = (_b = (_a = data.chart) === null || _a === void 0 ? void 0 : _a.events) === null || _b === void 0 ? void 0 : _b.click;\n const pointerMoveHandler = (_d = (_c = data.chart) === null || _c === void 0 ? void 0 : _c.events) === null || _d === void 0 ? void 0 : _d.pointermove;\n React.useEffect(() => {\n if (clickHandler) {\n dispatcher.on(EventType.CLICK_CHART, clickHandler);\n }\n if (pointerMoveHandler) {\n dispatcher.on(EventType.POINTERMOVE_CHART, (...args) => {\n const [handlerData, event] = args;\n pointerMoveHandler(handlerData, event);\n });\n }\n return () => {\n dispatcher.on(EventType.CLICK_CHART, null);\n dispatcher.on(EventType.POINTERMOVE_CHART, null);\n };\n }, [dispatcher, clickHandler, pointerMoveHandler]);\n React.useEffect(() => {\n if ((prevWidth !== width || prevHeight !== height) && tooltipPinned) {\n unpinTooltip === null || unpinTooltip === void 0 ? void 0 : unpinTooltip();\n }\n }, [prevWidth, width, prevHeight, height, tooltipPinned, unpinTooltip]);\n return (React.createElement(React.Fragment, null,\n React.createElement(\"svg\", { ref: svgRef, className: b(), width: width, height: height, onMouseMove: throttledHandleMouseMove, onMouseLeave: handleMouseLeave, onTouchStart: throttledHandleTouchMove, onTouchMove: throttledHandleTouchMove, onClick: handleChartClick },\n title && React.createElement(Title, Object.assign({}, title, { chartWidth: width })),\n React.createElement(\"g\", { transform: `translate(0, ${boundsOffsetTop})` }, preparedSplit.plots.map((plot, index) => {\n return React.createElement(PlotTitle, { key: `plot-${index}`, title: plot.title });\n })),\n React.createElement(\"g\", { width: boundsWidth, height: boundsHeight, transform: `translate(${[boundsOffsetLeft, boundsOffsetTop].join(',')})`, ref: plotRef },\n xScale && (yScale === null || yScale === void 0 ? void 0 : yScale.length) && (React.createElement(React.Fragment, null,\n React.createElement(AxisY, { axes: yAxis, width: boundsWidth, height: boundsHeight, scale: yScale, split: preparedSplit, plotRef: plotRef }),\n React.createElement(\"g\", { transform: `translate(0, ${boundsHeight})` },\n React.createElement(AxisX, { axis: xAxis, width: boundsWidth, height: boundsHeight, scale: xScale, split: preparedSplit })))),\n shapes),\n preparedLegend.enabled && (React.createElement(Legend, { chartSeries: preparedSeries, boundsWidth: boundsWidth, legend: preparedLegend, items: legendItems, config: legendConfig, onItemClick: handleLegendItemClick, onUpdate: unpinTooltip }))),\n React.createElement(\"div\", { className: b('html-layer'), ref: htmlLayerRef, style: {\n transform: `translate(${boundsOffsetLeft}px, ${boundsOffsetTop}px)`,\n } }),\n React.createElement(Tooltip, { dispatcher: dispatcher, tooltip: tooltip, svgContainer: svgRef.current, xAxis: xAxis, yAxis: yAxis[0], onOutsideClick: unpinTooltip, tooltipPinned: tooltipPinned })));\n};\n","import React from 'react';\nimport { EventType, isMacintosh } from '../../utils';\nexport function useChartInnerState(props) {\n var _a, _b;\n const { dispatcher, tooltip } = props;\n const [tooltipPinned, setTooltipPinned] = React.useState(false);\n const tooltipEnabled = tooltip === null || tooltip === void 0 ? void 0 : tooltip.enabled;\n const tooltipPinEnabled = (_a = tooltip === null || tooltip === void 0 ? void 0 : tooltip.pin) === null || _a === void 0 ? void 0 : _a.enabled;\n const modifierKey = (_b = tooltip === null || tooltip === void 0 ? void 0 : tooltip.pin) === null || _b === void 0 ? void 0 : _b.modifierKey;\n const togglePinTooltip = React.useCallback((value, event) => {\n let resultValue = value;\n if (value && modifierKey) {\n switch (modifierKey) {\n case 'altKey': {\n resultValue = event.altKey;\n break;\n }\n case 'metaKey': {\n resultValue = isMacintosh() ? event.metaKey : event.ctrlKey;\n }\n }\n }\n setTooltipPinned(resultValue);\n }, [modifierKey]);\n const unpinTooltip = React.useCallback(() => {\n setTooltipPinned(false);\n dispatcher.call(EventType.HOVER_SHAPE, {}, undefined);\n }, [dispatcher]);\n return {\n tooltipPinned,\n togglePinTooltip: tooltipEnabled && tooltipPinEnabled ? togglePinTooltip : undefined,\n unpinTooltip: tooltipEnabled && tooltipPinEnabled ? unpinTooltip : undefined,\n };\n}\n","import React from 'react';\nimport { pointer } from 'd3';\nimport throttle from 'lodash/throttle';\nimport { IS_TOUCH_ENABLED } from '../../constants';\nimport { EventType } from '../../utils';\nimport { getClosestPoints } from '../../utils/chart/get-closest-data';\nconst THROTTLE_DELAY = 50;\nexport function useChartInnerHandlers(props) {\n const { boundsHeight, boundsOffsetLeft, boundsOffsetTop, boundsWidth, dispatcher, shapesData, svgContainer, togglePinTooltip, tooltipPinned, unpinTooltip, xAxis, yAxis, } = props;\n const isOutsideBounds = React.useCallback((x, y) => {\n return x < 0 || x > boundsWidth || y < 0 || y > boundsHeight;\n }, [boundsHeight, boundsWidth]);\n const handleMove = ([pointerX, pointerY], event) => {\n if (tooltipPinned) {\n return;\n }\n const x = pointerX - boundsOffsetLeft;\n const y = pointerY - boundsOffsetTop;\n if (isOutsideBounds(x, y)) {\n dispatcher.call(EventType.HOVER_SHAPE, {}, undefined);\n dispatcher.call(EventType.POINTERMOVE_CHART, {}, undefined, event);\n return;\n }\n const closest = getClosestPoints({\n position: [x, y],\n shapesData,\n boundsHeight,\n boundsWidth,\n });\n dispatcher.call(EventType.HOVER_SHAPE, event.target, closest, [pointerX, pointerY]);\n dispatcher.call(EventType.POINTERMOVE_CHART, {}, {\n hovered: closest,\n xAxis,\n yAxis: yAxis[0],\n }, event);\n };\n const handleMouseMove = (event) => {\n const [pointerX, pointerY] = pointer(event, svgContainer);\n handleMove([pointerX, pointerY], event);\n };\n const throttledHandleMouseMove = IS_TOUCH_ENABLED\n ? undefined\n : throttle(handleMouseMove, THROTTLE_DELAY);\n const handleMouseLeave = (event) => {\n if (tooltipPinned) {\n return;\n }\n throttledHandleMouseMove === null || throttledHandleMouseMove === void 0 ? void 0 : throttledHandleMouseMove.cancel();\n dispatcher.call(EventType.HOVER_SHAPE, {}, undefined);\n dispatcher.call(EventType.POINTERMOVE_CHART, {}, undefined, event);\n };\n const handleTouchMove = (event) => {\n const touch = event.touches[0];\n const [pointerX, pointerY] = pointer(touch, svgContainer);\n handleMove([pointerX, pointerY], event);\n };\n const throttledHandleTouchMove = IS_TOUCH_ENABLED\n ? throttle(handleTouchMove, THROTTLE_DELAY)\n : undefined;\n const handleChartClick = (event) => {\n const [pointerX, pointerY] = pointer(event, svgContainer);\n const x = pointerX - boundsOffsetLeft;\n const y = pointerY - boundsOffsetTop;\n if (isOutsideBounds(x, y)) {\n return;\n }\n const items = getClosestPoints({\n position: [x, y],\n shapesData,\n boundsHeight,\n boundsWidth,\n });\n const selected = items === null || items === void 0 ? void 0 : items.find((item) => item.closest);\n if (!selected) {\n if (tooltipPinned) {\n unpinTooltip === null || unpinTooltip === void 0 ? void 0 : unpinTooltip();\n }\n return;\n }\n dispatcher.call(EventType.CLICK_CHART, undefined, { point: selected.data, series: selected.series }, event);\n const nextTooltipFixed = !tooltipPinned;\n if (!nextTooltipFixed) {\n dispatcher.call(EventType.HOVER_SHAPE, event.target, items, [pointerX, pointerY]);\n dispatcher.call(EventType.POINTERMOVE_CHART, {}, {\n hovered: items,\n xAxis,\n yAxis: yAxis[0],\n }, event);\n }\n togglePinTooltip === null || togglePinTooltip === void 0 ? void 0 : togglePinTooltip(nextTooltipFixed, event);\n };\n return {\n handleChartClick,\n handleMouseLeave,\n throttledHandleMouseMove,\n throttledHandleTouchMove,\n };\n}\n","import React from 'react';\nimport { select } from 'd3';\nimport debounce from 'lodash/debounce';\nimport { i18nFactory } from '../i18n';\nimport { getUniqId } from '../utils';\nimport { validateData } from '../validation';\nimport { ChartInner } from './ChartInner';\nexport * from './Tooltip/ChartTooltipContent';\nexport const Chart = React.forwardRef(function Chart(props, forwardedRef) {\n const { data, lang, onResize } = props;\n const validatedData = React.useRef();\n const ref = React.useRef(null);\n const debounced = React.useRef();\n const [dimensions, setDimensions] = React.useState();\n if (validatedData.current !== data) {\n validateData(data);\n validatedData.current = data;\n }\n const handleResize = React.useCallback(() => {\n var _a;\n const parentElement = (_a = ref.current) === null || _a === void 0 ? void 0 : _a.parentElement;\n if (parentElement) {\n const { width, height } = parentElement.getBoundingClientRect();\n setDimensions({ width, height });\n }\n }, []);\n const debuncedHandleResize = React.useMemo(() => {\n var _a;\n (_a = debounced.current) === null || _a === void 0 ? void 0 : _a.cancel();\n debounced.current = debounce(handleResize, 200);\n return debounced.current;\n }, [handleResize]);\n React.useImperativeHandle(forwardedRef, () => ({\n reflow() {\n debuncedHandleResize();\n },\n }), [debuncedHandleResize]);\n React.useEffect(() => {\n // dimensions initialize\n debuncedHandleResize();\n }, [debuncedHandleResize]);\n React.useEffect(() => {\n const selection = select(window);\n // https://github.com/d3/d3-selection/blob/main/README.md#handling-events\n const eventName = `resize.${getUniqId()}`;\n selection.on(eventName, debuncedHandleResize);\n return () => {\n // https://d3js.org/d3-selection/events#selection_on\n selection.on(eventName, null);\n };\n }, [debuncedHandleResize]);\n React.useEffect(() => {\n if (typeof onResize === 'function') {\n onResize({ dimensions });\n }\n }, [dimensions, onResize]);\n React.useEffect(() => {\n if (lang && i18nFactory.lang !== lang) {\n i18nFactory.setLang(lang);\n }\n }, [lang]);\n return (React.createElement(\"div\", { ref: ref, style: {\n width: (dimensions === null || dimensions === void 0 ? void 0 : dimensions.width) || '100%',\n height: (dimensions === null || dimensions === void 0 ? void 0 : dimensions.height) || '100%',\n position: 'relative',\n } }, (dimensions === null || dimensions === void 0 ? void 0 : dimensions.height) && (dimensions === null || dimensions === void 0 ? void 0 : dimensions.width) && (React.createElement(ChartInner, { height: dimensions === null || dimensions === void 0 ? void 0 : dimensions.height, width: dimensions === null || dimensions === void 0 ? void 0 : dimensions.width, data: data }))));\n});\n","/**\r\n * Queue of functions to invoke\r\n * @type {Array<(time: number) => void>}\r\n */\r\nlet callbacks = [];\r\n\r\nlet channel = new MessageChannel();\r\n\r\nlet postMessage = (function() {\r\n this.postMessage(undefined);\r\n}).bind(channel.port2);\r\n\r\n// Flush the callback queue when a message is posted to the message channel\r\nchannel.port1.onmessage = () => {\r\n // Reset the callback queue to an empty list in case callbacks call\r\n // afterFrame. These nested calls to afterFrame should queue up a new\r\n // callback to be flushed in the following frame and should not impact the\r\n // current queue being flushed\r\n let toFlush = callbacks;\r\n callbacks = [];\r\n let time = performance.now();\r\n for (let i = 0; i < toFlush.length; i++) {\r\n // Call all callbacks with the time the flush began, similar to requestAnimationFrame\r\n // TODO: Error handling?\r\n toFlush[i](time);\r\n }\r\n};\r\n\r\n// If the onmessage handler closes over the MessageChannel, the MessageChannel never gets GC'd:\r\nchannel = null;\r\n\r\n/**\r\n * Invoke the given callback after the browser renders the next frame\r\n * @param {(time: number) => void} callback The function to call after the browser renders\r\n * the next frame. The callback function is passed one argument, a DOMHighResTimeStamp\r\n * similar to the one returned by performance.now(), indicating the point in time when\r\n * afterFrame() starts to execute callback functions.\r\n */\r\nexport default function afterFrame(callback) {\r\n if (callbacks.push(callback) === 1) {\r\n requestAnimationFrame(postMessage);\r\n }\r\n}\r\n","export const markChartPerformance = (name) => {\n window.performance.mark(`${name}-mark`);\n};\nexport const getChartPerformanceDuration = (name) => {\n const measureName = `${name}-measure`;\n window.performance.measure(measureName, `${name}-mark`);\n const entry = window.performance.getEntriesByName(measureName)[0];\n if (entry) {\n return entry.duration;\n }\n return undefined;\n};\nexport function measurePerformance() {\n const timestamp = performance.now();\n return {\n end() {\n return performance.now() - timestamp;\n },\n };\n}\n","export const SplitLayout = {\n HORIZONTAL: 'horizontal',\n VERTICAL: 'vertical',\n};\n","// Copyright 2015 tomkp\n// Copyright 2022 YANDEX LLC\nimport React from 'react';\nexport class Pane extends React.PureComponent {\n render() {\n const { children, className, split, style: styleProps, size, eleRef } = this.props;\n const classes = ['Pane', split, className];\n let style = {\n flex: 1,\n position: 'relative',\n outline: 'none',\n };\n if (size !== undefined) {\n if (split === 'vertical') {\n style.width = size;\n }\n else {\n style.height = size;\n style.display = 'flex';\n }\n style.flex = 'none';\n }\n style = Object.assign({}, style, styleProps || {});\n return (React.createElement(\"div\", { ref: eleRef, className: classes.join(' '), style: style }, children));\n }\n}\n","// Copyright 2015 tomkp\n// Copyright 2022 YANDEX LLC\nimport React from 'react';\nexport const RESIZER_DEFAULT_CLASSNAME = 'Resizer';\nexport class Resizer extends React.Component {\n render() {\n const { className, onClick, onDoubleClick, onMouseDown, onTouchEnd, onTouchStart, resizerClassName = RESIZER_DEFAULT_CLASSNAME, split, style, } = this.props;\n const classes = [resizerClassName, split, className];\n return (React.createElement(\"span\", { role: \"presentation\", className: classes.join(' '), style: style, onMouseDown: (event) => onMouseDown(event), onTouchStart: (event) => {\n onTouchStart(event);\n }, onTouchEnd: (event) => {\n event.preventDefault();\n onTouchEnd(event);\n }, onClick: (event) => {\n if (onClick) {\n event.preventDefault();\n onClick(event);\n }\n }, onDoubleClick: (event) => {\n if (onDoubleClick) {\n event.preventDefault();\n onDoubleClick(event);\n }\n } }));\n }\n}\n","// Copyright 2015 tomkp\n// Copyright 2022 YANDEX LLC\n/* eslint-disable radix */\n/* eslint-disable complexity */\nimport React from 'react';\nimport { Pane } from './Pane';\nimport { RESIZER_DEFAULT_CLASSNAME, Resizer } from './Resizer';\nfunction unFocus() {\n var _a;\n (_a = window.getSelection()) === null || _a === void 0 ? void 0 : _a.removeAllRanges();\n}\nfunction getDefaultSize(defaultSize, minSize, maxSize, draggedSize) {\n if (typeof draggedSize === 'number') {\n const min = typeof minSize === 'number' ? minSize : 0;\n const max = typeof maxSize === 'number' && maxSize >= 0 ? maxSize : Infinity;\n return Math.max(min, Math.min(max, draggedSize));\n }\n if (defaultSize !== undefined) {\n return defaultSize;\n }\n return minSize;\n}\nfunction removeNullChildren(children) {\n return React.Children.toArray(children).filter((c) => c);\n}\n// TODO: https://github.com/gravity-ui/charts/issues/14\nexport class SplitPane extends React.Component {\n static getDerivedStateFromProps(nextProps, prevState) {\n return SplitPane.getSizeUpdate(nextProps, prevState);\n }\n // we have to check values since gDSFP is called on every render and more in StrictMode\n static getSizeUpdate(props, state) {\n const newState = {};\n const { instanceProps } = state;\n if (instanceProps.size === props.size && props.size !== undefined) {\n return {};\n }\n const newSize = props.size === undefined\n ? getDefaultSize(props.defaultSize, props.minSize, props.maxSize, state.draggedSize)\n : props.size;\n if (props.size !== undefined) {\n newState.draggedSize = newSize;\n }\n const isPanel1Primary = props.primary === 'first';\n newState[isPanel1Primary ? 'pane1Size' : 'pane2Size'] = newSize;\n newState[isPanel1Primary ? 'pane2Size' : 'pane1Size'] = undefined;\n newState.instanceProps = { size: props.size };\n return newState;\n }\n constructor(props) {\n super(props);\n this.splitPane = null;\n this.pane1 = null;\n this.pane2 = null;\n this.onMouseDown = (event) => {\n const eventWithTouches = Object.assign({}, event, {\n touches: [{ clientX: event.clientX, clientY: event.clientY }],\n });\n this.onTouchStart(eventWithTouches);\n };\n this.onTouchStart = (event) => {\n const { allowResize, onDragStarted, split } = this.props;\n if (allowResize) {\n unFocus();\n const position = split === 'vertical' ? event.touches[0].clientX : event.touches[0].clientY;\n if (typeof onDragStarted === 'function') {\n onDragStarted();\n }\n this.setState({\n active: true,\n position,\n });\n }\n };\n this.onMouseMove = (event) => {\n const eventWithTouches = Object.assign({}, event, {\n touches: [{ clientX: event.clientX, clientY: event.clientY }],\n });\n this.onTouchMove(eventWithTouches);\n };\n this.onTouchMove = (event) => {\n const { allowResize, maxSize, minSize, onChange, split, step } = this.props;\n const { active, position } = this.state;\n if (allowResize && active) {\n unFocus();\n const isPrimaryFirst = this.props.primary === 'first';\n const ref = isPrimaryFirst ? this.pane1 : this.pane2;\n const ref2 = isPrimaryFirst ? this.pane2 : this.pane1;\n if (ref) {\n const node = ref;\n const node2 = ref2;\n if (node.getBoundingClientRect) {\n const width = node.getBoundingClientRect().width;\n const height = node.getBoundingClientRect().height;\n const current = split === 'vertical' ? event.touches[0].clientX : event.touches[0].clientY;\n const size = split === 'vertical' ? width : height;\n let positionDelta = position - current;\n if (step) {\n if (Math.abs(positionDelta) < step) {\n return;\n }\n // Integer division\n // eslint-disable-next-line no-bitwise\n positionDelta = ~~(positionDelta / step) * step;\n }\n let sizeDelta = isPrimaryFirst ? positionDelta : -positionDelta;\n const pane1Order = parseInt(window.getComputedStyle(node).order);\n const pane2Order = parseInt(window.getComputedStyle(node2).order);\n if (pane1Order > pane2Order) {\n sizeDelta = -sizeDelta;\n }\n let newMaxSize = maxSize;\n if (maxSize !== undefined && maxSize <= 0) {\n const splitPane = this.splitPane;\n if (split === 'vertical') {\n newMaxSize = splitPane.getBoundingClientRect().width + maxSize;\n }\n else {\n newMaxSize = splitPane.getBoundingClientRect().height + maxSize;\n }\n }\n let newSize = size - sizeDelta;\n const newPosition = position - positionDelta;\n if (newSize < minSize) {\n newSize = minSize;\n }\n else if (maxSize !== undefined && newSize > newMaxSize) {\n newSize = newMaxSize;\n }\n else {\n this.setState({\n position: newPosition,\n resized: true,\n });\n }\n if (onChange)\n onChange(newSize);\n this.setState({\n draggedSize: newSize,\n [isPrimaryFirst ? 'pane1Size' : 'pane2Size']: newSize,\n });\n }\n }\n }\n };\n this.onMouseUp = () => {\n const { allowResize, onDragFinished } = this.props;\n const { active, draggedSize } = this.state;\n if (allowResize && active) {\n if (typeof onDragFinished === 'function') {\n onDragFinished(draggedSize);\n }\n this.setState({ active: false });\n }\n };\n // order of setting panel sizes.\n // 1. size\n // 2. getDefaultSize(defaultSize, minsize, maxSize)\n const { size, defaultSize, minSize, maxSize, primary } = props;\n const initialSize = size === undefined ? getDefaultSize(defaultSize, minSize, maxSize) : size;\n this.state = {\n active: false,\n resized: false,\n position: 0,\n draggedSize: 0,\n pane1Size: primary === 'first' ? initialSize : undefined,\n pane2Size: primary === 'second' ? initialSize : undefined,\n // these are props that are needed in static functions. ie: gDSFP\n instanceProps: {\n size,\n },\n };\n }\n componentDidMount() {\n document.addEventListener('mouseup', this.onMouseUp);\n document.addEventListener('mousemove', this.onMouseMove);\n document.addEventListener('touchmove', this.onTouchMove);\n this.setState(SplitPane.getSizeUpdate(this.props, this.state));\n }\n componentWillUnmount() {\n document.removeEventListener('mouseup', this.onMouseUp);\n document.removeEventListener('mousemove', this.onMouseMove);\n document.removeEventListener('touchmove', this.onTouchMove);\n }\n render() {\n const { allowResize, children, className, onResizerClick, onResizerDoubleClick, paneClassName, pane1ClassName, pane2ClassName, paneStyle, pane1Style: pane1StyleProps, pane2Style: pane2StyleProps, resizerClassName, resizerStyle, split, style: styleProps, } = this.props;\n const { pane1Size, pane2Size } = this.state;\n const disabledClass = allowResize ? '' : 'disabled';\n const resizerClassNamesIncludingDefault = resizerClassName\n ? `${resizerClassName} ${RESIZER_DEFAULT_CLASSNAME}`\n : resizerClassName;\n const notNullChildren = removeNullChildren(children);\n const style = Object.assign({ display: 'flex', flex: 1, height: '100%', position: 'absolute', outline: 'none', overflow: 'hidden', MozUserSelect: 'text', WebkitUserSelect: 'text', msUserSelect: 'text', userSelect: 'text' }, styleProps);\n if (split === 'vertical') {\n Object.assign(style, {\n flexDirection: 'row',\n left: 0,\n right: 0,\n });\n }\n else {\n Object.assign(style, {\n bottom: 0,\n flexDirection: 'column',\n minHeight: '100%',\n top: 0,\n width: '100%',\n });\n }\n const classes = ['SplitPane', className, split, disabledClass];\n const pane1Style = Object.assign(Object.assign({}, paneStyle), pane1StyleProps);\n const pane2Style = Object.assign(Object.assign({}, paneStyle), pane2StyleProps);\n const pane1Classes = ['Pane1', paneClassName, pane1ClassName].join(' ');\n const pane2Classes = ['Pane2', paneClassName, pane2ClassName].join(' ');\n return (React.createElement(\"div\", { className: classes.join(' '), ref: (node) => {\n this.splitPane = node;\n }, style: style },\n React.createElement(Pane, { className: pane1Classes, key: \"pane1\", eleRef: (node) => {\n this.pane1 = node;\n }, size: pane1Size, split: split, style: pane1Style }, notNullChildren[0]),\n React.createElement(Resizer, { className: disabledClass, onClick: onResizerClick, onDoubleClick: onResizerDoubleClick, onMouseDown: this.onMouseDown, onTouchStart: this.onTouchStart, onTouchEnd: this.onMouseUp, key: \"resizer\", resizerClassName: resizerClassNamesIncludingDefault, split: split, style: resizerStyle || {} }),\n React.createElement(Pane, { className: pane2Classes, key: \"pane2\", eleRef: (node) => {\n this.pane2 = node;\n }, size: pane2Size, split: split, style: pane2Style }, notNullChildren[1])));\n }\n}\nSplitPane.defaultProps = {\n allowResize: true,\n minSize: 50,\n primary: 'first',\n split: 'vertical',\n paneClassName: '',\n pane1ClassName: '',\n pane2ClassName: '',\n};\n","import { __rest } from \"tslib\";\nimport React from 'react';\nimport { cn } from '../../utils/cn';\nimport { Pane } from './Pane';\nimport { SplitPane } from './SplitPane';\nimport './StyledSplitPane.css';\nconst b = cn('styled-split-pane');\nconst resizerClassName = b('pane-resizer');\nexport const StyledSplitPane = (_a) => {\n var { paneOneRender, paneTwoRender } = _a, splitPaneProps = __rest(_a, [\"paneOneRender\", \"paneTwoRender\"]);\n const splitPaneRef = React.useRef(null);\n React.useEffect(() => {\n var _a, _b;\n const resizer = (_b = (_a = splitPaneRef.current) === null || _a === void 0 ? void 0 : _a.splitPane) === null || _b === void 0 ? void 0 : _b.getElementsByClassName(resizerClassName)[0];\n const hoveredClassName = `${resizerClassName}_hovered`;\n const onTouchStart = () => {\n resizer === null || resizer === void 0 ? void 0 : resizer.classList.add(hoveredClassName);\n };\n const onTouchEnd = () => {\n resizer === null || resizer === void 0 ? void 0 : resizer.classList.remove(hoveredClassName);\n };\n resizer === null || resizer === void 0 ? void 0 : resizer.addEventListener('touchstart', onTouchStart);\n resizer === null || resizer === void 0 ? void 0 : resizer.addEventListener('touchend', onTouchEnd);\n return function cleanup() {\n resizer === null || resizer === void 0 ? void 0 : resizer.removeEventListener('touchstart', onTouchStart);\n resizer === null || resizer === void 0 ? void 0 : resizer.removeEventListener('touchend', onTouchEnd);\n };\n }, []);\n return (React.createElement(SplitPane, Object.assign({}, splitPaneProps, { ref: splitPaneRef, className: b(), resizerClassName: resizerClassName }),\n React.createElement(Pane, null, paneOneRender()),\n React.createElement(Pane, null, paneTwoRender())));\n};\n","function checkWindowAvailability() {\n return typeof window === 'object';\n}\nexport const IS_WINDOW_AVAILABLE = checkWindowAvailability();\nfunction checkScreenOrientationAvailability() {\n // W3C spec implementation\n return (IS_WINDOW_AVAILABLE &&\n typeof window.ScreenOrientation === 'function' &&\n typeof screen.orientation.addEventListener === 'function' &&\n typeof screen.orientation.type === 'string');\n}\nexport const IS_SCREEN_ORIENTATION_AVAILABLE = checkScreenOrientationAvailability();\nexport const ScreenOrientation = {\n PORTRAIT_PRIMARY: 'portrait-primary',\n PORTRAIT_SECONDARY: 'portrait-secondary',\n LANDSCAPE_PRIMARY: 'landscape-primary',\n LANDSCAPE_SECONDARY: 'landscape-secondary',\n};\nexport const AVAILABLE_SCREEN_ORIENTATIONS = Object.values(ScreenOrientation);\n","import React from 'react';\nexport function usePrevious(value) {\n const ref = React.useRef();\n React.useEffect(() => {\n ref.current = value;\n }, [value]);\n return ref.current;\n}\n","import React from 'react';\nimport { ChartTooltipContent } from '@gravity-ui/charts';\nexport const TooltipContent = React.forwardRef(function TooltipContent(props, forwardedRef) {\n const { renderer } = props;\n const [tooltipProps, setTooltipProps] = React.useState();\n React.useImperativeHandle(forwardedRef, () => ({\n redraw(updates) {\n setTooltipProps(updates);\n },\n }), []);\n return React.createElement(ChartTooltipContent, Object.assign({}, tooltipProps, { renderer: renderer }));\n});\n","import React from 'react';\nimport { SplitLayout } from '../../../../components/SplitPane';\nimport { IS_WINDOW_AVAILABLE } from '../../../../constants';\nconst CHART_SECTION_PERCENTAGE = 0.6;\nexport const RESIZER_HEIGHT = 24;\nfunction getInitialSplit() {\n if (!IS_WINDOW_AVAILABLE) {\n return SplitLayout.HORIZONTAL;\n }\n return window.innerWidth > window.innerHeight ? SplitLayout.VERTICAL : SplitLayout.HORIZONTAL;\n}\nexport function getVerticalSize() {\n return window.innerWidth * CHART_SECTION_PERCENTAGE;\n}\nfunction getInitialSize(split) {\n const defaultSize = `calc(100% - ${RESIZER_HEIGHT}px)`;\n if (!IS_WINDOW_AVAILABLE) {\n return defaultSize;\n }\n return split === SplitLayout.VERTICAL ? getVerticalSize() : defaultSize;\n}\nexport function useWithSplitPaneState(props) {\n const { container } = props;\n const [tooltipHeight, setTooltipHeight] = React.useState(0);\n const [split, setSplit] = React.useState(getInitialSplit());\n const [size, setSize] = React.useState(getInitialSize(split));\n const allowResize = split === SplitLayout.HORIZONTAL;\n let maxSize;\n let minSize;\n if (IS_WINDOW_AVAILABLE && container && split === SplitLayout.HORIZONTAL) {\n const containerHeight = container.getBoundingClientRect().height;\n maxSize = containerHeight - RESIZER_HEIGHT - tooltipHeight;\n minSize = containerHeight / 3;\n }\n return {\n allowResize,\n maxSize,\n minSize,\n tooltipHeight,\n setTooltipHeight,\n split,\n setSplit,\n size,\n setSize,\n };\n}\n","import { __rest } from \"tslib\";\nimport React from 'react';\nimport { getComponentName, useResizeObserver } from '@gravity-ui/uikit';\nimport { SplitLayout, StyledSplitPane, mapScreenOrientationTypeToSplitLayout, } from '../../../../components/SplitPane';\nimport { IS_SCREEN_ORIENTATION_AVAILABLE, IS_WINDOW_AVAILABLE } from '../../../../constants';\nimport { usePrevious } from '../../../../hooks';\nimport { isScreenOrientationEventType } from '../../../../utils';\nimport { TooltipContent } from './TooltipContent';\nimport { RESIZER_HEIGHT, getVerticalSize, useWithSplitPaneState } from './useWithSplitPaneState';\nconst tooltipPaneStyles = { overflow: 'auto' };\nexport function withSplitPane(ChartComponent) {\n const componentName = getComponentName(ChartComponent);\n const component = React.forwardRef(function WithSplitPaneComponent(props, _ref) {\n var _a;\n const { data } = props, restProps = __rest(props, [\"data\"]);\n const containerRef = React.useRef(null);\n const tooltipContainerRef = React.useRef(null);\n const chartRef = React.useRef(null);\n const tooltipRef = React.useRef(null);\n const { allowResize, minSize, maxSize, tooltipHeight, split, size, setTooltipHeight, setSplit, setSize, } = useWithSplitPaneState({\n container: containerRef.current,\n });\n const prevTooltipHeight = usePrevious(tooltipHeight);\n const prevSplit = usePrevious(split);\n if (prevSplit && split !== prevSplit && split === SplitLayout.VERTICAL) {\n setSize(getVerticalSize());\n }\n else if (split === SplitLayout.HORIZONTAL &&\n containerRef.current &&\n prevTooltipHeight === 0 &&\n tooltipHeight !== prevTooltipHeight) {\n const containerHeight = containerRef.current.getBoundingClientRect().height;\n if (containerHeight - RESIZER_HEIGHT === size) {\n setSize(containerHeight - RESIZER_HEIGHT - tooltipHeight);\n (_a = chartRef.current) === null || _a === void 0 ? void 0 : _a.reflow();\n }\n }\n const handleTooltipContentResize = React.useCallback(() => {\n if (!tooltipContainerRef.current) {\n return;\n }\n const nextTooltipHeight = tooltipContainerRef.current.getBoundingClientRect().height;\n setTooltipHeight(nextTooltipHeight);\n }, [setTooltipHeight]);\n useResizeObserver({\n ref: tooltipContainerRef,\n onResize: handleTooltipContentResize,\n });\n const resultData = React.useMemo(() => {\n var _a, _b, _c;\n const userPointerMoveHandler = (_b = (_a = data.chart) === null || _a === void 0 ? void 0 : _a.events) === null || _b === void 0 ? void 0 : _b.pointermove;\n const pointerMoveHandler = (pointerMoveData, event) => {\n var _a;\n (_a = tooltipRef.current) === null || _a === void 0 ? void 0 : _a.redraw(pointerMoveData);\n userPointerMoveHandler === null || userPointerMoveHandler === void 0 ? void 0 : userPointerMoveHandler(pointerMoveData, event);\n };\n return Object.assign(Object.assign({}, data), { chart: Object.assign(Object.assign({}, data.chart), { events: Object.assign(Object.assign({}, (_c = data.chart) === null || _c === void 0 ? void 0 : _c.events), { pointermove: pointerMoveHandler }) }), tooltip: Object.assign(Object.assign({}, data.tooltip), { enabled: false }) });\n }, [data]);\n const handleOrientationChange = React.useCallback(() => {\n const deviceWidth = window.innerWidth;\n const deviceHeight = window.innerHeight;\n const nextSplit = deviceWidth > deviceHeight ? SplitLayout.VERTICAL : SplitLayout.HORIZONTAL;\n setSplit(nextSplit);\n }, [setSplit]);\n const handleScreenOrientationChange = React.useCallback((e) => {\n const type = e.target && 'type' in e.target && e.target.type;\n if (!isScreenOrientationEventType(type)) {\n return;\n }\n setSplit(mapScreenOrientationTypeToSplitLayout(type));\n }, [setSplit]);\n const handleSizeChange = React.useCallback((nextSize) => {\n var _a;\n (_a = chartRef.current) === null || _a === void 0 ? void 0 : _a.reflow();\n if (split === SplitLayout.HORIZONTAL) {\n setSize(nextSize);\n }\n }, [split, setSize]);\n React.useLayoutEffect(() => {\n if (IS_SCREEN_ORIENTATION_AVAILABLE) {\n screen.orientation.addEventListener('change', handleScreenOrientationChange);\n }\n else if (IS_WINDOW_AVAILABLE) {\n window.addEventListener('orientationchange', handleOrientationChange);\n }\n return () => {\n if (IS_SCREEN_ORIENTATION_AVAILABLE) {\n screen.orientation.removeEventListener('change', handleScreenOrientationChange);\n }\n else if (IS_WINDOW_AVAILABLE) {\n window.removeEventListener('orientationchange', handleOrientationChange);\n }\n };\n }, [handleOrientationChange, handleScreenOrientationChange]);\n return (React.createElement(\"div\", { ref: containerRef, style: { position: 'relative', height: '100%' } },\n React.createElement(StyledSplitPane, { allowResize: allowResize, maxSize: maxSize, minSize: minSize, size: size, split: split, onChange: handleSizeChange, paneOneRender: () => (React.createElement(ChartComponent, Object.assign({}, restProps, { ref: chartRef, data: resultData }))), paneTwoRender: () => (React.createElement(\"div\", { ref: tooltipContainerRef },\n React.createElement(TooltipContent, { ref: tooltipRef, renderer: resultData.tooltip.renderer }))), pane2Style: tooltipPaneStyles })));\n });\n component.displayName = `withSplitPane(${componentName})`;\n return component;\n}\n","import React from 'react';\nimport { Chart } from '@gravity-ui/charts';\nimport afterFrame from 'afterframe';\nimport { settings } from '../../../libs';\nimport { measurePerformance } from '../../../utils';\nimport { withSplitPane } from './withSplitPane/withSplitPane';\nconst ChartWithSplitPane = withSplitPane(Chart);\nconst D3Widget = React.forwardRef(function D3Widget(props, forwardedRef) {\n const { data, tooltip, onLoad, onRender, onChartLoad } = props;\n const lang = settings.get('lang');\n const performanceMeasure = React.useRef(measurePerformance());\n const chartRef = React.useRef(null);\n const ChartComponent = (tooltip === null || tooltip === void 0 ? void 0 : tooltip.splitted) ? ChartWithSplitPane : Chart;\n const handleResize = React.useCallback(({ dimensions }) => {\n if (!dimensions) {\n return;\n }\n if (!performanceMeasure.current) {\n performanceMeasure.current = measurePerformance();\n }\n afterFrame(() => {\n var _a;\n const renderTime = (_a = performanceMeasure.current) === null || _a === void 0 ? void 0 : _a.end();\n onRender === null || onRender === void 0 ? void 0 : onRender({\n renderTime,\n });\n onLoad === null || onLoad === void 0 ? void 0 : onLoad({\n widgetRendering: renderTime,\n });\n performanceMeasure.current = null;\n });\n }, [onRender, onLoad]);\n React.useImperativeHandle(forwardedRef, () => ({\n reflow() {\n var _a;\n (_a = chartRef.current) === null || _a === void 0 ? void 0 : _a.reflow();\n },\n }), []);\n React.useLayoutEffect(() => {\n if (onChartLoad) {\n onChartLoad({});\n }\n }, [onChartLoad]);\n return React.createElement(ChartComponent, { ref: chartRef, data: data, lang: lang, onResize: handleResize });\n});\nexport default D3Widget;\n","import { AVAILABLE_SCREEN_ORIENTATIONS } from '../constants';\nexport function isScreenOrientationEventType(value) {\n if (typeof value !== 'string') {\n return false;\n }\n return AVAILABLE_SCREEN_ORIENTATIONS.includes(value);\n}\n","export { SplitLayout } from './constants';\nexport * from './Pane';\nexport * from './SplitPane';\nexport * from './StyledSplitPane';\nexport * from './types';\nexport function mapScreenOrientationTypeToSplitLayout(type) {\n switch (type) {\n case 'landscape-primary':\n case 'landscape-secondary': {\n return 'vertical';\n }\n case 'portrait-primary':\n case 'portrait-secondary':\n default: {\n return 'horizontal';\n }\n }\n}\n","import * as React from 'react';\nconst initialPosition = { top: 0, right: 0, bottom: 0, left: 0 };\n// React hook for creating virtual element for popup\nexport function useVirtualElementRef(props = {}) {\n const { rect, contextElement } = props;\n const rectRef = React.useRef(initialPosition);\n const ref = React.useRef({\n contextElement,\n getBoundingClientRect() {\n const { top, right, bottom, left } = rectRef.current;\n const width = right - left;\n const height = bottom - top;\n return {\n top,\n right,\n bottom,\n left,\n width,\n height,\n };\n },\n });\n ref.current.contextElement = contextElement;\n if (rect) {\n const { top = 0, left = 0, right = left, bottom = top } = rect;\n rectRef.current = { top, right, bottom, left };\n }\n else {\n rectRef.current = initialPosition;\n }\n return ref;\n}\n","import * as React from 'react';\nexport function useResizeObserver({ ref, onResize, box, }) {\n React.useEffect(() => {\n const element = ref === null || ref === void 0 ? void 0 : ref.current;\n if (!element) {\n return undefined;\n }\n if (typeof window.ResizeObserver === 'undefined') {\n window.addEventListener('resize', onResize, false);\n return () => {\n window.removeEventListener('resize', onResize, false);\n };\n }\n const observer = new ResizeObserver((entries) => {\n if (!entries.length) {\n return;\n }\n onResize();\n });\n observer.observe(element, { box });\n return () => {\n observer.disconnect();\n };\n }, [ref, onResize, box]);\n}\n"],"names":["i18nFactory","registerKeysets","setLang","setFallbackLang","i18n","bind","getUniqId","length","chars","result","i","Math","floor","random","randomString","SeriesType","Area","BarX","BarY","Line","Pie","Scatter","Treemap","Waterfall","Sankey","DashStyle","SymbolType","LineCap","LayoutAlgorithm","DEFAULT_PALETTE","DEFAULT_AXIS_LABEL_FONT_SIZE","axisTitleDefaults","text","margin","style","fontSize","align","maxRowCount","xAxisTitleDefaults","Object","assign","yAxisTitleDefaults","DEFAULT_AXIS_TYPE","CHART_ERROR_CODE","ChartError","Error","constructor","originalError","message","code","super","this","isCustomError","name","stack","AVAILABLE_SERIES_TYPES","values","validateXYSeries","args","series","xAxis","yAxis","yAxisIndex","seriesYAxis","index","xType","yType","data","forEach","x","y","key","seriesName","withNaming","e","m","block","n","EventType","calculateNumericProperty","value","base","endsWith","Number","isNaN","parseFloat","isStringValueInPercent","isStringValueInPixel","calculateCos","deg","precision","factor","pow","cos","PI","calculateSin","sin","DEFAULT_LEGEND_SYMBOL_SIZE","DEFAULT_LEGEND_SYMBOL_PADDING","DEFAULT_DATALABELS_STYLE","fontWeight","fontColor","DEFAULT_HALO_OPTIONS","enabled","opacity","size","DEFAULT_POINT_MARKER_OPTIONS","radius","borderColor","borderWidth","symbol","getActiveLegendItems","reduce","acc","s","legend","visible","push","prepareLegendSymbol","symbolType","_a","symbolOptions","shape","Circle","width","padding","getCommonStackId","getSeriesStackId","stackId","stacking","i18nInstance","keysetsData","ru","entries","getUnitRate","exponent","unitsI18nKeys","resultUnitRate","abs","unitFormatter","unitDelimiterI18nKey","options","unitRate","showRankDelimiter","lang","i18nLang","toFixed","Intl","NumberFormat","minimumFractionDigits","maximumFractionDigits","useGrouping","format","unit","delimiter","BASE_NUMBER_FORMAT_UNIT_KEYS","baseFormatNumber","getNumberUnitRate","NUMBER_UNIT_RATE_BY_UNIT","default","auto","undefined","k","b","t","formatNumber","multiplier","prefix","postfix","labelMode","changedMultiplier","prePostfix","TIME_UNITS","millisecond","second","minute","hour","day","week","month","year","DATETIME_LABEL_FORMATS","CHARTS_WITHOUT_AXIS","CHART_SERIES_WITH_VOLUME_ON_Y_AXIS","CHART_SERIES_WITH_VOLUME_ON_X_AXIS","isAxisRelatedSeries","includes","type","isSeriesWithNumericalXValues","isSeriesWithNumericalYValues","getDomainDataForStackedSeries","seriesList","keyAttr","valueAttr","stackedSeries","Array","from","_stackId","seriesStack","singleSeries","Map","point","String","has","max","get","set","getDomainDataXBySeries","groupedSeries","item","filter","map","d","getDomainDataYBySeries","yValue","getOnlyVisibleSeries","formatAxisTickLabel","axis","step","date","labels","dateFormat","range","units","keys","findIndex","getTimeUnit","getDefaultDateFormat","input","numberFormat","getHorisontalSvgTextHeight","container","document","body","append","textSelection","height","node","getBoundingClientRect","remove","getDataCategoryValue","axisDirection","categories","categoryValue","dataCategory","category","extractCategoryValue","getClosestPointsRange","points","handleOverflowingText","tSpan","maxWidth","_b","_c","svg","closest","textNode","angle","transform","baseVal","find","revertRotation","createSVGTransform","setRotate","appendItem","textContent","textLength","slice","removeItem","setEllipsisForOverflowText","selection","setEllipsisForOverflowTexts","each","datum","textMaxWidth","getLabelsSize","rotation","html","Boolean","maxHeight","labelWrapper","l","innerHTML","rect","attrs","attr","selectAll","enter","renderLabels","select","wrapText","segmenter","Segmenter","granularity","segment","lastRow","isWordLike","getTicksCount","ticksCount","ticks","pixelInterval","ceil","getScaleTicks","scale","domain","getXAxisItems","count","maxCount","_","getMaxTickCount","minTickWidth","parseInt","getAxisHeight","split","boundsHeight","plots","getAxisTitleRows","title","row","getLineDashArray","dashStyle","strokeWidth","toLowerCase","replace","part","join","AxisY","props","axes","totalHeight","plotRef","ref","current","svgElement","getAxisPosition","top","plotIndex","position","plotLines","plotLine","axisSelection","seriesScale","axisItem","axisScale","yAxisGenerator","preparedAxis","axisGenerator","generator","tickSize","grid","tickPadding","tickFormat","getAxisGenerator","tickTexts","topOffset","lineHeight","leftOffset","transformLabel","call","elementY","_d","tickIndex","r","bottom","plotLineClassName","plotLineContainer","plotLinesSelection","plotLineValue","color","plotLineData","nodes","plotLineSelection","layerPlacement","lower","raise","lineColor","tickNode","stringifiedValue","match","xString","yString","parseTransformStyle","titleRows","rowCount","min","axisHeight","getTitlePosition","className","addDomain","domainPath","insert","axisBottom","labelFormat","labelsPaddings","labelsMargin","labelsMaxWidth","Infinity","labelsStyle","labelsLineHeight","items","tickItems","maxTickCount","tickColor","offset","window","devicePixelRatio","bandwidth","isBandScale","round","center","copy","number","getXTickPosition","labelHeight","right","labelsOffsetTop","labelsOffsetLeft","tickPath","start","end","moveTo","lineTo","order","el","tick","toString","elementX","left","currentElement","prevElement","currentElementPosition","prevElementPosition","lackingSpace","remainSpace","translateX","domainSize","domainColor","getLabelFormatter","tickStep","AxisX","fill","xAxisGenerator","legendDefaults","getSymbolType","scatterStyles","sqrt3","sqrt","triangleDown","draw","context","u","closePath","getSymbol","Diamond","Square","Triangle","TriangleDown","createGradientRect","interpolator","canvas","createElement","getContext","j","fillStyle","fillRect","toDataURL","getDefaultColorStops","getContinuesColorFn","colors","stops","customStops","getLegendPosition","offsetWidth","contentWidth","appendPaginator","maxPage","onArrowClick","paginationLine","computedWidth","inactive","itemStyle","getComputedTextLength","on","legendSymbolGenerator","Legend","boundsWidth","chartSeries","config","onItemClick","onUpdate","paginationOffset","setPaginationOffset","_e","legendWidth","limit","pagination","line","lineIndex","legendLine","legendItemTemplate","metaKey","element","legendItem","textWidth","itemDistance","getXPosition","unselected","scatterSymbol","renderLegendSymbol","mods","selected","colorScale","rectHeight","tickTop","enable","titleWidth","dx","PlotTitle","dy","dominantBaseline","textAnchor","Title","chartWidth","getWaterfallPointColor","total","positiveColor","negativeColor","getWaterfallPointSubtotal","pointIndex","indexOf","sum","getRowData","fieldName","getXRowData","getYRowData","DefaultContent","hovered","measureValue","every","some","getMeasureValue","seriesItem","id","backgroundColor","isTotal","subTotal","seriesData","target","source","links","display","gap","verticalAlign","ChartTooltipContent","renderer","customTooltip","Tooltip","tooltip","svgContainer","dispatcher","tooltipPinned","onOutsideClick","pointerPosition","setTooltipState","nextHovered","nextPointerPosition","useTooltip","containerRect","anchorRef","useVirtualElementRef","dispatchEvent","CustomEvent","Popup","pinned","contentClassName","open","placement","modifiers","altAxis","contains","IS_TOUCH_ENABLED","navigator","maxTouchPoints","getClosestPointsByXValue","sorted","p","closestXIndex","closestX","closestPoints","y0","closestYIndex","y1","sortedY","sortedYIndex","getSeriesType","shapeData","getClosestPoints","shapesData","pointerX","pointerY","groups","seriesType","list","prototype","apply","closestY","lastPoint","closestPoint","segments","flat","pie","atan2","polarRadius","startAngle","endAngle","leaves","x0","x1","closestLink","path","ctx","lineWidth","path2D","Path2D","stroke","isPointInPath","isPointInStroke","isInsidePath","usePrevious","getPreparedChart","chart","preparedTitle","marginTop","getMarginTop","marginBottom","marginLeft","marginRight","getMarginRight","getBoundsWidth","chartMargin","preparedYAxis","leftAxisWidth","rightAxisWidth","axisWidth","getYAxisWidth","getWidthOccupiedByYAxis","getGroupedLegendItems","maxLegendWidth","preparedLegend","textWidthsInLine","resultItem","textsWidth","symbolsWidth","distancesWidth","pop","nextLineIndex","seriesOptionsDefaults","barMaxWidth","barPadding","groupPadding","states","hover","brightness","scatter","area","treemap","waterfall","DEFAULT_MARKER","prepareMarker","seriesOptions","seriesHoverState","markerNormalState","marker","hoveredMarkerDefaultOptions","halo","normal","prepareDataLabels","dataLabels","label","inside","DEFAULT_DASH_STYLE","Solid","prepareLinecap","defaultLineCap","Round","None","lineCapFromSeriesOptions","prepareLineLegendSymbol","defaultLineWidth","useSeries","chartHeight","_f","_g","defaultItemStyle","computedItemStyle","legendType","isTitleEnabled","titleMargin","titleStyle","titleText","titleHeight","getDomainForContinuousColorScale","getPreparedLegend","preparedSeries","seriesNames","getSeriesNames","dataNames","dataItem","allowOverlap","connectorPadding","connectorShape","distance","connectorCurve","borderRadius","innerRadius","renderCustomShape","cursor","preparePieSeries","prepareBarXSeries","prepareBarYSeries","prepareScatterSeries","defaultDashStyle","linecap","prepareLineSeries","defaultAreaWidth","defaultOpacity","prepareArea","levels","layoutAlgorithm","Binary","prepareTreemap","prepareWaterfallSeries","prepareSankeySeries","prepareSeries","preparedSeriesOptions","activeLegendItems","setActiveLegendItems","legendConfig","legendItems","maxLegendHeight","flattenLegendItems","getFlattenLegendItems","legendHeight","getLegendComponents","handleLegendItemClick","allItems","getAllLegendItems","onlyItemSelected","nextActiveLegendItems","concat","isNumericalArrayData","filterCategoriesByVisibleSeries","visibleCategories","Set","isSeriesWithCategoryValues","add","c","createYScale","yMin","yCategories","yTimestamps","maxPadding","domainYMin","domainMax","yMinValue","yMaxValue","nice","filteredCategories","yMax","createXScale","xMin","xMax","getDefaultMaxXAxisValue","xCategories","xTimestamps","xAxisMinPadding","calculateXAxisPadding","xRange","domainXMin","domainXMax","xMinValue","xMaxValue","xScale","getLeftPosition","isLabelsOverlapping","label1","label2","rect1","rect2","left1","right1","left2","right2","getOverlappingByX","top1","bottom1","top2","bottom2","getOverlappingByY","filterOverlappingLabels","HtmlLayer","htmlLayout","preparedData","isArray","htmlElements","Portal","dangerouslySetInnerHTML","__html","content","haloClassName","symbolClassName","renderMarker","markerSelection","getMarkerVisibility","getMarkerSymbol","getMarkerHaloVisibility","setMarker","markerStates","state","symbolFn","selectMarkerHalo","parentSelection","selectMarkerSymbol","getXValue","xBandScale","getYValue","yScale","yBandScale","shapeKey","setActiveState","active","elementSelection","getRectPath","borderRadiuses","borderRadiusTopLeft","borderRadiusTopRight","borderRadiusBottomRight","borderRadiusBottomLeft","arc","AreaSeriesShapes","hoveredDataRef","hoverOptions","inactiveOptions","shapeSelection","labelsSelection","markers","hoverEnabled","inactiveEnabled","handleShapeHover","selectedDataItems","selectedSeriesIds","strokeColor","brighter","isActive","BarXSeriesShapes","rectSelection","isLastStackItem","labelSelection","hoveredValues","fillColor","hoveredSeries","BarYSeriesShapes","newOpacity","LineSeriesShapes","lineSelection","initialColor","getHaloVisibility","PieSeriesShapes","segmentSelector","connectorSelector","shapesSelection","pieData","outerRadius","cornerRadius","arcGenerator","connectors","customShape","eventName","selectedSeriesId","pieSelection","haloSelection","elements","currentSegmentHalo","connectorSelection","merge","htmlLabels","zIndex","pieGenerator","sort","FULL_CIRCLE","getCenter","defaultX","defaultY","SankeySeriesShape","valueof","justify","sourceLinks","depth","constant","ascendingSourceBreadth","a","ascendingBreadth","ascendingTargetBreadth","defaultId","defaultNodes","graph","defaultLinks","nodeById","computeLinkBreadths","link","targetLinks","pi","tau","epsilon","tauEpsilon","Path","_x0","_y0","_x1","_y1","quadraticCurveTo","bezierCurveTo","x2","y2","arcTo","x21","y21","x01","y01","l01_2","x20","y20","l21_2","l20_2","l21","l01","tan","acos","t01","t21","a0","a1","ccw","cw","da","w","h","linkSource","linkTarget","curveHorizontal","horizontalSource","horizontalTarget","curve","buffer","argv","arguments","ScatterSeriesShape","selectedDataItem","TreemapSeriesShape","labelData","levelOptions","hoveredData","currentRect","currentD","currentLabel","nodeData","WaterfallSeriesShapes","prev","Dash","useShapes","shapesComponents","visibleSeries","shapes","plotHeight","sortingOptions","comparator","direction","sortKey","xValue","xGroup","bandWidth","xLinearScale","xValues","dist","maxGroupSize","groupGap","groupWidth","rectGap","rectWidth","val","stacks","currentGroupWidth","yValues","groupItemIndex","stackHeight","stackItems","sortedData","yValueIndex","seriesYScale","xCenter","yDataValue","barData","ratio","prepareBarXData","plotWidth","groupedData","axisIndex","groupByYValue","axisValues","getBandWidth","barHeight","currentBarHeight","measureValues","stackSum","xValueIndex","prepared","setLabel","prepareBarYData","flattenData","yZero","totalValue","_index","prevPoint","prepareWaterfallData","_xMin","xRangeMax","yAxisTop","getHtmlLabel","prepareLineData","_x","getXValues","accumulatedYValues","seriesStackData","pointsAcc","accumulatedYValue","labelItems","getLabelData","labelSize","prepareAreaData","prepareScatterData","maxRadius","groupedPieSeries","pieSeries","prepareLabels","prepareLabelsArgs","curveFactory","getCurveFactory","connectorStartPointGenerator","connectorMidPointGenerator","connectorEndPointGenerator","labelArcGenerator","prevLabel","shouldUseHtml","labelWidth","relatedSegment","getLabelPosition","centroid","getConnectorPoints","connectorStartPoint","connectorEndPoint","midAngle","overlap","shouldAdjustAngle","newAngle","newX","newY","connector","seriesInnerRadius","segmentMaxRadius","maxSegmentRadius","segmentRadius","prepareItem","preparedLabels","topAdjustment","bottomAdjustment","preparePieData","dataWithRootNode","dataChunk","parentId","getSeriesDataWithRootNode","hierarchy","treemapInstance","tile","Dice","Slice","SliceDice","Squarify","root","paddingInner","getLabels","prepareTreemapData","sankeyGenerator","py","linkSort","iterations","sankey","computeNodeLinks","fixedValue","computeNodeValues","next","computeNodeDepths","computeNodeHeights","columns","kx","layer","column","computeNodeLayers","ky","reorderLinks","initializeNodeBreadths","alpha","beta","relaxRightToLeft","relaxLeftToRight","computeNodeBreadths","v","targetTop","reorderNodeLinks","resolveCollisions","sourceTop","subject","resolveCollisionsBottomToTop","resolveCollisionsTopToBottom","update","nodeId","nodeAlign","nodeSort","nodeWidth","nodePadding","extent","sankeyNodes","sankeyLinks","sankeyLinkHorizontal","prepareSankeyData","getAxisMin","minValue","minYValue","res","minSubTotal","useChartInnerProps","prevWidth","prevHeight","getPreparedTitle","preparedTooltip","getPreparedTooltip","useChartOptions","titleMaxRowsCount","estimatedTitleRows","titleSize","preparedXAxis","timestamps","autoRotation","overlapping","textElement","hasOverlappingLabels","defaultRotation","labelsHeight","getLabelSettings","getPreparedXAxis","axisByPlot","firstPlotAxis","defaultAxisPosition","labelsEnabled","getAxisLabelMaxWidth","getPreparedYAxis","hasAxisRelatedSeries","bottomOffset","getBottomOffset","useChartDimensions","preparedSplit","splitGap","getPlotHeight","TITLE_TOP_BOTTOM_PADDING","preparePlotTitle","useSplit","axisSeries","visibleAxisSeries","createScales","useAxisScales","boundsOffsetTop","boundsOffsetLeft","ChartInner","svgRef","htmlLayerRef","togglePinTooltip","unpinTooltip","setTooltipPinned","tooltipEnabled","tooltipPinEnabled","pin","modifierKey","event","resultValue","altKey","test","platform","ctrlKey","useChartInnerState","handleChartClick","handleMouseLeave","throttledHandleMouseMove","throttledHandleTouchMove","isOutsideBounds","handleMove","touch","touches","nextTooltipFixed","cancel","useChartInnerHandlers","clickHandler","events","click","pointerMoveHandler","pointermove","handlerData","onMouseMove","onMouseLeave","onTouchStart","onTouchMove","onClick","plot","Chart","forwardedRef","onResize","validatedData","debounced","dimensions","setDimensions","countSeriesByType","types","availableStackingValues","validateStacking","validatePieSeries","parentIds","idOrName","validateTreemapSeries","validateSeries","validateData","handleResize","parentElement","debuncedHandleResize","reflow","callbacks","channel","MessageChannel","postMessage","port2","port1","onmessage","toFlush","time","performance","now","measurePerformance","timestamp","SplitLayout","Pane","render","children","styleProps","eleRef","classes","flex","outline","RESIZER_DEFAULT_CLASSNAME","Resizer","onDoubleClick","onMouseDown","onTouchEnd","resizerClassName","role","preventDefault","unFocus","getSelection","removeAllRanges","getDefaultSize","defaultSize","minSize","maxSize","draggedSize","SplitPane","getDerivedStateFromProps","nextProps","prevState","getSizeUpdate","newState","instanceProps","newSize","isPanel1Primary","primary","splitPane","pane1","pane2","eventWithTouches","clientX","clientY","allowResize","onDragStarted","setState","onChange","isPrimaryFirst","ref2","node2","positionDelta","sizeDelta","getComputedStyle","newMaxSize","newPosition","resized","onMouseUp","onDragFinished","initialSize","pane1Size","pane2Size","componentDidMount","addEventListener","componentWillUnmount","removeEventListener","onResizerClick","onResizerDoubleClick","paneClassName","pane1ClassName","pane2ClassName","paneStyle","pane1Style","pane1StyleProps","pane2Style","pane2StyleProps","resizerStyle","disabledClass","resizerClassNamesIncludingDefault","notNullChildren","toArray","removeNullChildren","overflow","MozUserSelect","WebkitUserSelect","msUserSelect","userSelect","flexDirection","minHeight","pane1Classes","pane2Classes","defaultProps","cn","StyledSplitPane","paneOneRender","paneTwoRender","splitPaneProps","splitPaneRef","resizer","getElementsByClassName","hoveredClassName","classList","IS_WINDOW_AVAILABLE","IS_SCREEN_ORIENTATION_AVAILABLE","ScreenOrientation","screen","orientation","AVAILABLE_SCREEN_ORIENTATIONS","PORTRAIT_PRIMARY","PORTRAIT_SECONDARY","LANDSCAPE_PRIMARY","LANDSCAPE_SECONDARY","TooltipContent","tooltipProps","setTooltipProps","redraw","updates","CHART_SECTION_PERCENTAGE","getVerticalSize","innerWidth","tooltipPaneStyles","ChartWithSplitPane","ChartComponent","componentName","getComponentName","component","_ref","restProps","containerRef","tooltipContainerRef","chartRef","tooltipRef","tooltipHeight","setTooltipHeight","setSplit","setSize","innerHeight","getInitialSize","containerHeight","useWithSplitPaneState","prevTooltipHeight","prevSplit","handleTooltipContentResize","nextTooltipHeight","useResizeObserver","resultData","userPointerMoveHandler","pointerMoveData","handleOrientationChange","nextSplit","handleScreenOrientationChange","isScreenOrientationEventType","mapScreenOrientationTypeToSplitLayout","handleSizeChange","nextSize","displayName","withSplitPane","onLoad","onRender","onChartLoad","settings","performanceMeasure","splitted","callback","requestAnimationFrame","renderTime","widgetRendering","initialPosition","contextElement","rectRef","box","ResizeObserver","observer","observe","disconnect"],"sourceRoot":""}