@semcore/d3-chart 17.0.0-prerelease.9 → 17.0.1

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 (123) hide show
  1. package/CHANGELOG.md +20 -1
  2. package/lib/cjs/Area.js +11 -11
  3. package/lib/cjs/Axis.js +16 -16
  4. package/lib/cjs/Bar.js +16 -16
  5. package/lib/cjs/Bubble.js +20 -15
  6. package/lib/cjs/Bubble.js.map +1 -1
  7. package/lib/cjs/CompactHorizontalBar.js +16 -16
  8. package/lib/cjs/Donut.js +9 -9
  9. package/lib/cjs/Dots.js +8 -8
  10. package/lib/cjs/HorizontalBar.js +16 -16
  11. package/lib/cjs/Hover.js +3 -3
  12. package/lib/cjs/Line.js +9 -9
  13. package/lib/cjs/Plot.js +2 -2
  14. package/lib/cjs/Radar.js +19 -19
  15. package/lib/cjs/RadialTree.js +12 -12
  16. package/lib/cjs/Reference.js +12 -12
  17. package/lib/cjs/ScatterPlot.js +9 -9
  18. package/lib/cjs/Tooltip.js +9 -9
  19. package/lib/cjs/Venn.js +9 -9
  20. package/lib/cjs/a11y/PlotA11yModule.js +2 -2
  21. package/lib/cjs/a11y/PlotA11yView.js +7 -7
  22. package/lib/cjs/a11y/PlotA11yView.js.map +1 -1
  23. package/lib/cjs/component/Chart/AbstractChart.js +9 -21
  24. package/lib/cjs/component/Chart/AbstractChart.js.map +1 -1
  25. package/lib/cjs/component/Chart/CigaretteChart.js +197 -57
  26. package/lib/cjs/component/Chart/CigaretteChart.js.map +1 -1
  27. package/lib/cjs/component/Chart/CigaretteChart.type.js.map +1 -1
  28. package/lib/cjs/component/ChartLegend/LegendFlex/LegendFlex.js +4 -4
  29. package/lib/cjs/component/ChartLegend/LegendItem/LegendItem.js +17 -17
  30. package/lib/cjs/component/ChartLegend/LegendTable/LegendTable.js +6 -6
  31. package/lib/cjs/style/bubble.shadow.css +4 -0
  32. package/lib/cjs/utils.js +3 -2
  33. package/lib/cjs/utils.js.map +1 -1
  34. package/lib/es6/Area.js +11 -11
  35. package/lib/es6/Axis.js +16 -16
  36. package/lib/es6/Bar.js +16 -16
  37. package/lib/es6/Bubble.js +20 -15
  38. package/lib/es6/Bubble.js.map +1 -1
  39. package/lib/es6/CompactHorizontalBar.js +16 -16
  40. package/lib/es6/Donut.js +9 -9
  41. package/lib/es6/Dots.js +8 -8
  42. package/lib/es6/HorizontalBar.js +16 -16
  43. package/lib/es6/Hover.js +3 -3
  44. package/lib/es6/Line.js +9 -9
  45. package/lib/es6/Plot.js +2 -2
  46. package/lib/es6/Radar.js +19 -19
  47. package/lib/es6/RadialTree.js +12 -12
  48. package/lib/es6/Reference.js +12 -12
  49. package/lib/es6/ScatterPlot.js +9 -9
  50. package/lib/es6/Tooltip.js +9 -9
  51. package/lib/es6/Venn.js +9 -9
  52. package/lib/es6/a11y/PlotA11yModule.js +2 -2
  53. package/lib/es6/a11y/PlotA11yView.js +6 -5
  54. package/lib/es6/a11y/PlotA11yView.js.map +1 -1
  55. package/lib/es6/component/Chart/AbstractChart.js +9 -21
  56. package/lib/es6/component/Chart/AbstractChart.js.map +1 -1
  57. package/lib/es6/component/Chart/CigaretteChart.js +199 -59
  58. package/lib/es6/component/Chart/CigaretteChart.js.map +1 -1
  59. package/lib/es6/component/Chart/CigaretteChart.type.js.map +1 -1
  60. package/lib/es6/component/ChartLegend/LegendFlex/LegendFlex.js +4 -4
  61. package/lib/es6/component/ChartLegend/LegendItem/LegendItem.js +17 -17
  62. package/lib/es6/component/ChartLegend/LegendTable/LegendTable.js +6 -6
  63. package/lib/es6/style/bubble.shadow.css +4 -0
  64. package/lib/es6/utils.js +3 -2
  65. package/lib/es6/utils.js.map +1 -1
  66. package/lib/esm/AnimatedClipPath.mjs +1 -1
  67. package/lib/esm/Area.mjs +14 -14
  68. package/lib/esm/Axis.mjs +21 -23
  69. package/lib/esm/Bar.mjs +18 -18
  70. package/lib/esm/Bubble.mjs +24 -20
  71. package/lib/esm/CompactHorizontalBar.mjs +21 -20
  72. package/lib/esm/Donut.mjs +15 -13
  73. package/lib/esm/Dots.mjs +10 -10
  74. package/lib/esm/HorizontalBar.mjs +18 -18
  75. package/lib/esm/Hover.mjs +6 -6
  76. package/lib/esm/Line.mjs +12 -12
  77. package/lib/esm/Pattern.mjs +6 -7
  78. package/lib/esm/Plot.mjs +6 -7
  79. package/lib/esm/Radar.mjs +27 -29
  80. package/lib/esm/RadialTree.mjs +30 -75
  81. package/lib/esm/Reference.mjs +13 -13
  82. package/lib/esm/ResponsiveContainer.mjs +3 -5
  83. package/lib/esm/ScatterPlot.mjs +12 -11
  84. package/lib/esm/StackBar.mjs +2 -2
  85. package/lib/esm/StackedArea.mjs +2 -2
  86. package/lib/esm/Tooltip.mjs +15 -17
  87. package/lib/esm/Venn.mjs +13 -12
  88. package/lib/esm/a11y/DataAccessibilityTable.mjs +2 -4
  89. package/lib/esm/a11y/PlotA11yModule.mjs +5 -4
  90. package/lib/esm/a11y/PlotA11yView.mjs +14 -21
  91. package/lib/esm/a11y/focus.mjs +2 -2
  92. package/lib/esm/a11y/hints.mjs +3 -3
  93. package/lib/esm/a11y/insights.mjs +15 -20
  94. package/lib/esm/a11y/intl.mjs +1 -1
  95. package/lib/esm/a11y/locale.mjs +1 -2
  96. package/lib/esm/a11y/serialize.mjs +17 -17
  97. package/lib/esm/component/Chart/AbstractChart.mjs +25 -38
  98. package/lib/esm/component/Chart/AreaChart.mjs +5 -4
  99. package/lib/esm/component/Chart/BarChart.mjs +4 -3
  100. package/lib/esm/component/Chart/BubbleChart.mjs +8 -8
  101. package/lib/esm/component/Chart/CigaretteChart.mjs +204 -64
  102. package/lib/esm/component/Chart/CompactHorizontalBarChart.mjs +2 -1
  103. package/lib/esm/component/Chart/DonutChart.mjs +3 -2
  104. package/lib/esm/component/Chart/HistogramChart.mjs +5 -4
  105. package/lib/esm/component/Chart/LineChart.mjs +5 -4
  106. package/lib/esm/component/Chart/RadarChart.mjs +4 -5
  107. package/lib/esm/component/Chart/ScatterPlotChart.mjs +3 -2
  108. package/lib/esm/component/Chart/VennChart.mjs +3 -3
  109. package/lib/esm/component/ChartLegend/BaseLegend.mjs +9 -14
  110. package/lib/esm/component/ChartLegend/LegendFlex/LegendFlex.mjs +6 -6
  111. package/lib/esm/component/ChartLegend/LegendItem/LegendItem.mjs +19 -19
  112. package/lib/esm/component/ChartLegend/LegendTable/LegendTable.mjs +9 -10
  113. package/lib/esm/component/ChartLegend/index.mjs +2 -0
  114. package/lib/esm/component/Cigarette/Cigarette.mjs +1 -2
  115. package/lib/esm/component/StackGroupBar/StackGroupBar.mjs +2 -3
  116. package/lib/esm/createElement.mjs +1 -1
  117. package/lib/esm/index.mjs +1 -0
  118. package/lib/esm/style/bubble.shadow.css +4 -0
  119. package/lib/esm/utils.mjs +3 -3
  120. package/lib/types/a11y/PlotA11yView.d.ts +1 -1
  121. package/lib/types/component/Chart/AbstractChart.d.ts +4 -7
  122. package/lib/types/component/Chart/CigaretteChart.type.d.ts +7 -4
  123. package/package.json +17 -17
@@ -1 +1 @@
1
- {"version":3,"file":"AbstractChart.js","names":["Flex","Box","Component","Root","sstyled","extractAriaProps","callAllEventHandlers","Text","React","Fragment","Plot","XAxis","YAxis","makeDataHintsContainer","style","_sstyled","insert","interpolateValue","ChartLegend","ChartLegendTable","NOT_A_VALUE","AbstractChart","constructor","props","_defineProperty","dataDefinitions","getDefaultDataDefinitions","highlightedLine","withTrend","setHighlightedLine","bind","handleChangeVisible","handleMouseEnter","handleMouseLeave","resolveColor","tooltipValueFormatter","handleWithTrendChange","componentDidUpdate","prevProps","data","legendProps","setState","dataKeys","map","key","index","legendData","legendMap","dataDefinition","id","label","icon","undefined","checked","defaultChecked","color","columns","additionalInfo","count","Array","isArray","value","dataValue","Map","get","Number","total","Object","values","reduce","sum","i","percent","toFixed","createElement","use","groupKey","keys","filter","xTicks","invertAxis","xTicksCount","yTicksCount","asProps","scale","xScale","ticks","yTicks","yScale","flatValues","result","item","add","entries","forEach","Set","maxStackedValue","max","val","barSum","Date","isNaN","getMilliseconds","totalValue","state","allNotAValue","legendItem","NaN","percentValue","Math","round","getValueScale","min","avg","log10","valueScale","isVisible","prevState","findIndex","line","colorMap","toDateString","toString","defaultLegendProps","legendType","renderLegend","direction","showLegend","patterns","length","lProps","commonLegendProps","dataHints","size","shape","w","h","disableSelectItems","onChangeVisibleItem","disableHoverItems","onMouseEnterItem","onMouseLeaveItem","getLegendAriaLabel","flexLegendProps","trendLabel","trendIsVisible","onTrendIsVisibleChange","renderAxis","showXAxis","showYAxis","axisXValueFormatter","axisYValueFormatter","multilineXTicks","multilineYTicks","childrenX","children","childrenY","Ticks","multiline","Grid","getTooltipChildren","options","_ref","_ref3","STooltipChildrenWrapper","Tooltip","dataItem","styles","title","cn","Title","_assignProps","Dot","mr","textAlign","bold","renderTooltipTotalLine","showTotalInTooltip","mt","render","_ref2","_ref4","SChart","plotWidth","plotHeight","a11yAltTextConfig","duration","eventEmitter","showTooltip","extractedAriaProps","_assignProps2","renderTooltip","renderChart"],"sources":["../../../../src/component/Chart/AbstractChart.tsx"],"sourcesContent":["import { Flex, Box } from '@semcore/base-components';\nimport { Component, Root, sstyled } from '@semcore/core';\nimport { extractAriaProps } from '@semcore/core/lib/utils/ariaProps';\nimport { callAllEventHandlers } from '@semcore/core/lib/utils/assignProps';\nimport { Text } from '@semcore/typography';\nimport type { ScaleBand, ScaleLinear, ScaleTime } from 'd3-scale';\nimport React, { Fragment } from 'react';\n\nimport type { BaseChartProps, BaseLegendProps, ListData, ObjectData } from './AbstractChart.type';\n// @ts-ignore\nimport type { HoverLine, HoverRect } from '../..';\n// @ts-ignore\nimport { Plot, XAxis, YAxis } from '../..';\nimport { makeDataHintsContainer } from '../../a11y/hints';\nimport style from '../../style/abstract-chart.shadow.css';\nimport { interpolateValue } from '../../utils';\nimport ChartLegend, { ChartLegendTable } from '../ChartLegend';\nimport type { LegendFlexProps } from '../ChartLegend/LegendFlex/LegendFlex.type';\nimport type { LegendItem } from '../ChartLegend/LegendItem/LegendItem.type';\nimport type { LegendTableProps } from '../ChartLegend/LegendTable/LegendTable.type';\n\ntype ChartState = {\n dataDefinitions: Array<LegendItem & { columns: React.ReactNode[] }>;\n highlightedLine: number;\n withTrend: boolean;\n};\n\nexport const NOT_A_VALUE = 'n/a';\n\nexport abstract class AbstractChart<\n D extends ListData | ObjectData,\n T extends BaseChartProps<D>,\n E extends readonly ((...args: any[]) => any)[] = [],\n> extends Component<T, E, Readonly<{}>, {}, ChartState> {\n public static style = style;\n public static defaultProps: Partial<BaseChartProps<any>> = {\n direction: 'column',\n showXAxis: true,\n showYAxis: true,\n showTooltip: true,\n };\n\n /**\n * Padding from the end's of chart to the container (except axis sides)\n */\n protected plotPadding = 6;\n\n protected dataHints = makeDataHintsContainer();\n\n public state: ChartState = {\n dataDefinitions: this.getDefaultDataDefinitions(),\n highlightedLine: -1,\n withTrend: false,\n };\n\n constructor(props: T) {\n super(props);\n\n this.setHighlightedLine = this.setHighlightedLine.bind(this);\n this.handleChangeVisible = this.handleChangeVisible.bind(this);\n this.handleMouseEnter = this.handleMouseEnter.bind(this);\n this.handleMouseLeave = this.handleMouseLeave.bind(this);\n this.resolveColor = this.resolveColor.bind(this);\n this.tooltipValueFormatter = this.tooltipValueFormatter.bind(this);\n this.handleWithTrendChange = this.handleWithTrendChange.bind(this);\n }\n\n public componentDidUpdate(prevProps: T) {\n if (prevProps.data !== this.props.data || prevProps.legendProps !== this.props.legendProps) {\n this.setState({ dataDefinitions: this.getDefaultDataDefinitions() });\n }\n }\n\n protected getDefaultDataDefinitions(): Array<LegendItem & { columns: React.ReactNode[] }> {\n const { data, legendProps } = this.props;\n\n return this.dataKeys.map((key, index) => {\n const legendData = legendProps?.legendMap?.[key];\n\n const dataDefinition: LegendItem & { columns: React.ReactNode[] } = {\n id: key,\n label: legendData?.label ?? key,\n icon: legendData?.icon ?? undefined,\n checked: legendData?.defaultChecked ?? true,\n color: this.resolveColor(key, index),\n columns: [],\n };\n\n if (legendData?.additionalInfo || legendData?.count) {\n dataDefinition.additionalInfo = legendData.additionalInfo\n ? { label: legendData.additionalInfo }\n : legendData.count\n ? { count: legendData.count }\n : undefined;\n }\n\n if (legendData && 'columns' in legendData) {\n dataDefinition.columns = legendData.columns || [];\n } else if (!Array.isArray(data)) {\n let value: number | undefined = undefined;\n let dataValue = data[key];\n\n if (data instanceof Map) {\n dataValue = data.get(key);\n }\n\n if (dataValue !== interpolateValue) {\n value = Number(dataValue);\n }\n\n const total = Object.values(data).reduce<number>((sum, i) => {\n if (i !== interpolateValue) {\n return sum + Number(i);\n }\n\n return sum;\n }, 0);\n const percent = value !== undefined ? ((value / total) * 100).toFixed(2) : undefined;\n\n dataDefinition.columns = [\n <Text key={`${key}_percent`} use='secondary'>\n {percent !== undefined ? `${percent}%` : ''}\n </Text>,\n <Text key={`${key}_value`} use={value ? 'primary' : 'secondary'}>\n {value ?? NOT_A_VALUE}\n </Text>,\n ];\n }\n\n return dataDefinition;\n });\n }\n\n protected abstract get xScale(): ScaleBand<any> | ScaleLinear<any, any> | ScaleTime<any, any>;\n protected abstract get yScale(): ScaleBand<any> | ScaleLinear<any, any> | ScaleTime<any, any>;\n\n protected abstract getLegendAriaLabel(): string;\n protected abstract renderChart(): React.ReactNode;\n protected abstract renderTooltip(): React.ReactNode;\n\n protected get dataKeys(): string[] {\n const { data, groupKey } = this.props;\n\n let dataKeys: string[];\n\n if (Array.isArray(data) && groupKey) {\n dataKeys = Object.keys(data[0]).filter((key) => key !== groupKey);\n } else {\n dataKeys = Object.keys(data);\n }\n\n return dataKeys;\n }\n\n protected get xTicks(): number[] | Date[] | undefined {\n const { data, invertAxis, xTicksCount, yTicksCount } = this.asProps;\n\n const scale = this.xScale;\n\n if (Array.isArray(data) && 'ticks' in scale) {\n if (invertAxis && yTicksCount) {\n return scale.ticks(yTicksCount);\n } else if (xTicksCount) {\n return scale.ticks(xTicksCount);\n }\n\n return undefined;\n }\n\n return undefined;\n }\n\n protected get yTicks(): number[] | Date[] | undefined {\n const { data, invertAxis, xTicksCount, yTicksCount } = this.asProps;\n\n const scale = this.yScale;\n\n if (Array.isArray(data) && 'ticks' in scale) {\n if (invertAxis && xTicksCount) {\n return scale.ticks(xTicksCount);\n } else if (yTicksCount) {\n return scale.ticks(yTicksCount);\n }\n\n return undefined;\n }\n\n return undefined;\n }\n\n protected get flatValues(): Set<number> {\n const { data, groupKey } = this.asProps;\n const values: any[] = Array.isArray(data) ? data : Object.values(data);\n\n const flatValues = values.reduce<Set<number>>((result, item) => {\n if (!groupKey && typeof item === 'number') {\n result.add(item);\n } else {\n Object.entries(item).forEach(([key, value]) => {\n if (key !== groupKey && typeof value === 'number') {\n result.add(value);\n }\n });\n }\n\n return result;\n }, new Set());\n\n return flatValues;\n }\n\n protected get maxStackedValue(): number {\n const { data, groupKey } = this.asProps;\n\n if (!Array.isArray(data)) {\n const max = Object.values(data).reduce<number>((sum, val) => {\n if (typeof val === 'number') {\n sum = sum + val;\n }\n\n return sum;\n }, 0);\n\n return max;\n }\n\n const max = data.reduce((max, item) => {\n const barSum = Object.entries(item).reduce<number>((sum, [key, val]) => {\n if (key === groupKey) {\n return sum;\n }\n\n if (typeof val === 'number') {\n return sum + val;\n }\n\n if (val instanceof Date && !Number.isNaN(val.getMilliseconds())) {\n return sum + val.getMilliseconds();\n }\n\n return sum;\n }, 0);\n\n if (barSum > max) {\n max = barSum;\n }\n\n return max;\n }, 0);\n\n return max;\n }\n\n protected totalValue(data: ObjectData): number {\n const { dataDefinitions } = this.state;\n\n let allNotAValue = true;\n\n const total = dataDefinitions.reduce((sum, legendItem) => {\n const item = data[legendItem.id];\n\n if (item === null) {\n allNotAValue = false;\n return sum;\n }\n\n if (typeof item === 'number') {\n allNotAValue = false;\n return sum + item;\n }\n\n if (item instanceof Date && !Number.isNaN(item.getMilliseconds())) {\n allNotAValue = false;\n return sum + item.getMilliseconds();\n }\n\n return sum;\n }, 0);\n\n if (allNotAValue) {\n return Number.NaN;\n }\n\n return total;\n }\n\n protected percentValue(data: ObjectData, key: string): string {\n const total = this.totalValue(data);\n\n const value = data[key];\n\n if (typeof value === 'number' && total !== 0) {\n const percent = Math.round((100 * value) / total);\n\n return `${percent}%`;\n }\n\n if (value === null) {\n return `0%`;\n }\n\n return NOT_A_VALUE;\n }\n\n protected getValueScale(values: number[]): number {\n const max = Math.max(...values);\n const min = Math.min(...values);\n\n const avg = (max + min) / 2;\n const count = Math.round(Math.log10(avg));\n\n const valueScale = 100 / 10 ** count;\n\n return valueScale;\n }\n\n protected setHighlightedLine(index: number) {\n this.setState({ highlightedLine: index });\n }\n\n protected handleChangeVisible(id: string, isVisible: boolean) {\n this.setState((prevState) => {\n const dataDefinitions = prevState.dataDefinitions.map((item) => {\n if (item.id === id) {\n item.checked = isVisible;\n }\n\n return item;\n });\n\n return { dataDefinitions };\n });\n }\n\n protected handleWithTrendChange(isVisible: boolean) {\n this.setState({ withTrend: isVisible });\n }\n\n protected handleMouseEnter(id: string) {\n this.setHighlightedLine(this.state.dataDefinitions.findIndex((line) => line.id === id));\n }\n\n protected handleMouseLeave() {\n this.setHighlightedLine(-1);\n }\n\n protected resolveColor(id: string, index: number) {\n return this.props.colorMap?.[id] ?? `chart-palette-order-${index + 1}`;\n }\n\n protected tooltipValueFormatter(\n value?: string | number | typeof interpolateValue | Date,\n ): string {\n const { tooltipValueFormatter } = this.asProps;\n\n if (tooltipValueFormatter) {\n return tooltipValueFormatter(value);\n }\n\n if (value === undefined || value === interpolateValue) {\n return NOT_A_VALUE;\n }\n\n if (value === null) {\n return '0';\n }\n\n if (value instanceof Date) {\n return value.toDateString();\n }\n\n return value.toString();\n }\n\n protected defaultLegendProps(): Partial<BaseLegendProps> {\n return {\n legendType: 'Flex',\n };\n }\n\n protected renderLegend() {\n const { legendProps, direction, showLegend, patterns } = this.asProps;\n\n if (\n // we hide Legend for one item on chart except not manually set to show.\n showLegend === undefined && this.dataKeys.length === 1 ||\n showLegend === false\n ) {\n return null;\n }\n\n const { dataDefinitions, withTrend } = this.state;\n const lProps = {\n ...this.defaultLegendProps(),\n ...legendProps,\n };\n\n const commonLegendProps: LegendFlexProps | LegendTableProps = {\n 'dataHints': this.dataHints,\n 'items': dataDefinitions,\n 'size': lProps.size,\n 'shape': lProps.shape,\n 'w': lProps.w,\n 'h': lProps.h,\n patterns,\n 'direction':\n lProps.direction ?? (direction === 'row' || direction === 'row-reverse' ? 'column' : 'row'),\n 'onChangeVisibleItem': lProps.disableSelectItems\n ? undefined\n : callAllEventHandlers(lProps.onChangeVisibleItem, this.handleChangeVisible),\n 'onMouseEnterItem': lProps.disableHoverItems\n ? undefined\n : callAllEventHandlers(lProps.onMouseEnterItem, this.handleMouseEnter),\n 'onMouseLeaveItem': lProps.disableHoverItems\n ? undefined\n : callAllEventHandlers(lProps.onMouseLeaveItem, this.handleMouseLeave),\n 'aria-label': this.getLegendAriaLabel(),\n };\n\n if (lProps.legendType === 'Table') {\n return <ChartLegendTable {...(commonLegendProps as LegendTableProps)} />;\n }\n\n if ('withTrend' in lProps) {\n const flexLegendProps = {\n ...commonLegendProps,\n withTrend: true,\n trendLabel: lProps.trendLabel,\n trendIsVisible: withTrend,\n onTrendIsVisibleChange: this.handleWithTrendChange,\n };\n\n return <ChartLegend {...(flexLegendProps as LegendFlexProps)} />;\n }\n\n return <ChartLegend {...(commonLegendProps as LegendFlexProps)} />;\n }\n\n protected renderAxis(): React.ReactNode {\n const {\n invertAxis,\n showXAxis,\n showYAxis,\n data,\n axisXValueFormatter,\n axisYValueFormatter,\n multilineXTicks,\n multilineYTicks,\n } = this.asProps;\n\n if (!Array.isArray(data)) {\n return null;\n }\n\n const xTicks = this.xTicks;\n const yTicks = this.yTicks;\n\n const childrenX = axisXValueFormatter\n ? ({ value }: any) => ({ children: axisXValueFormatter(value) })\n : undefined;\n const childrenY = axisYValueFormatter\n ? ({ value }: any) => ({ children: axisYValueFormatter(value) })\n : undefined;\n\n return (\n <>\n {showYAxis && (\n <YAxis>\n {yTicks\n ? (\n <YAxis.Ticks multiline={multilineYTicks} ticks={yTicks}>{childrenY}</YAxis.Ticks>\n )\n : (\n <YAxis.Ticks multiline={multilineYTicks}>{childrenY}</YAxis.Ticks>\n )}\n {invertAxis !== true && (yTicks ? <YAxis.Grid ticks={yTicks} /> : <YAxis.Grid />)}\n </YAxis>\n )}\n\n {showXAxis && (\n <XAxis>\n {xTicks\n ? (\n <XAxis.Ticks multiline={multilineXTicks} ticks={xTicks}>{childrenX}</XAxis.Ticks>\n )\n : (\n <XAxis.Ticks multiline={multilineXTicks}>{childrenX}</XAxis.Ticks>\n )}\n {invertAxis === true && (xTicks ? <XAxis.Grid ticks={xTicks} /> : <XAxis.Grid />)}\n </XAxis>\n )}\n </>\n );\n }\n\n protected getTooltipChildren<D extends ObjectData>(options: {\n Tooltip: typeof HoverLine['Tooltip'] | typeof HoverRect['Tooltip'];\n dataItem: D;\n }) {\n const STooltipChildrenWrapper = Root;\n const { Tooltip, dataItem } = options;\n\n const { styles, groupKey } = this.asProps;\n const { dataDefinitions } = this.state;\n const title = dataItem[groupKey as keyof D]?.toString();\n\n return sstyled(styles)(\n <Flex direction='column'>\n { title && <Tooltip.Title>{title}</Tooltip.Title> }\n\n <STooltipChildrenWrapper\n render={Box}\n columnsCount='2'\n __excludeProps={['data']}\n >\n {dataDefinitions.map((item) => {\n return (\n item.checked && (\n <Fragment key={item.id}>\n <Tooltip.Dot mr={2} color={item.color}>\n {item.label}\n </Tooltip.Dot>\n <Text textAlign='end' bold>{this.tooltipValueFormatter(dataItem[item.id] as string)}</Text>\n </Fragment>\n )\n );\n })}\n\n {this.renderTooltipTotalLine(dataItem)}\n </STooltipChildrenWrapper>\n </Flex>,\n );\n }\n\n protected renderTooltipTotalLine<D extends ObjectData>(dataItem: D) {\n const { showTotalInTooltip } = this.asProps;\n\n if (!showTotalInTooltip) {\n return null;\n }\n\n const total = this.totalValue(dataItem);\n\n return (\n <>\n <Box mt={2} mr={2}>Total</Box>\n <Text mt={2} textAlign='end' bold>{Number.isNaN(total) ? NOT_A_VALUE : total}</Text>\n </>\n );\n }\n\n public render() {\n const SChart = Root;\n const { styles, plotWidth, plotHeight, data, patterns, a11yAltTextConfig, duration, eventEmitter, showTooltip } =\n this.asProps;\n\n const { extractedAriaProps } = extractAriaProps(this.asProps);\n\n return sstyled(styles)(\n <SChart render={Flex} gap={5} __excludeProps={['data', 'eventEmitter']} role='group'>\n {this.renderLegend()}\n <Plot\n data={data}\n scale={[this.xScale, this.yScale]}\n width={plotWidth}\n height={plotHeight}\n dataHints={this.dataHints}\n a11yAltTextConfig={a11yAltTextConfig}\n patterns={patterns}\n duration={duration}\n eventEmitter={eventEmitter}\n {...extractedAriaProps}\n >\n {this.renderAxis()}\n {!showTooltip ? null : this.renderTooltip()}\n {this.renderChart()}\n </Plot>\n </SChart>,\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"AbstractChart.js","names":["Flex","Box","Component","Root","sstyled","extractAriaProps","callAllEventHandlers","Text","React","Fragment","Plot","XAxis","YAxis","makeDataHintsContainer","style","_sstyled","insert","interpolateValue","ChartLegend","ChartLegendTable","NOT_A_VALUE","AbstractChart","constructor","props","_defineProperty","setHighlightedLine","bind","handleChangeVisible","handleMouseEnter","handleMouseLeave","resolveColor","tooltipValueFormatter","handleWithTrendChange","state","dataDefinitions","getDefaultDataDefinitions","highlightedLine","withTrend","componentDidUpdate","prevProps","data","legendProps","setState","dataKeys","map","key","index","legendData","legendMap","dataDefinition","id","label","icon","undefined","checked","defaultChecked","color","columns","additionalInfo","count","Array","isArray","value","dataValue","Map","get","Number","total","Object","values","reduce","sum","i","percent","toFixed","createElement","use","groupKey","keys","filter","xTicks","invertAxis","xTicksCount","yTicksCount","asProps","scale","xScale","ticks","yTicks","yScale","flatValues","result","item","add","entries","forEach","Set","maxStackedValue","max","val","barSum","Date","isNaN","getMilliseconds","totalValue","allNotAValue","legendItem","NaN","getValueScale","Math","min","avg","round","log10","valueScale","isVisible","prevState","findIndex","line","colorMap","toDateString","toString","defaultLegendProps","legendType","renderLegend","direction","showLegend","patterns","length","lProps","commonLegendProps","dataHints","size","shape","w","h","disableSelectItems","onChangeVisibleItem","disableHoverItems","onMouseEnterItem","onMouseLeaveItem","getLegendAriaLabel","flexLegendProps","trendLabel","trendIsVisible","onTrendIsVisibleChange","renderAxis","showXAxis","showYAxis","axisXValueFormatter","axisYValueFormatter","multilineXTicks","multilineYTicks","childrenX","children","childrenY","Ticks","multiline","Grid","getTooltipChildren","options","_ref","_ref3","STooltipChildrenWrapper","Tooltip","dataItem","styles","title","cn","Title","_assignProps","Dot","mr","textAlign","bold","renderTooltipTotalLine","showTotalInTooltip","mt","render","_ref2","_ref4","SChart","plotWidth","plotHeight","a11yAltTextConfig","duration","eventEmitter","showTooltip","extractedAriaProps","_assignProps2","renderTooltip","renderChart"],"sources":["../../../../src/component/Chart/AbstractChart.tsx"],"sourcesContent":["import { Flex, Box } from '@semcore/base-components';\nimport { Component, Root, sstyled } from '@semcore/core';\nimport { extractAriaProps } from '@semcore/core/lib/utils/ariaProps';\nimport { callAllEventHandlers } from '@semcore/core/lib/utils/assignProps';\nimport { Text } from '@semcore/typography';\nimport type { ScaleBand, ScaleLinear, ScaleTime } from 'd3-scale';\nimport React, { Fragment } from 'react';\n\nimport type { BaseChartProps, BaseLegendProps, ListData, ObjectData } from './AbstractChart.type';\n// @ts-ignore\nimport type { HoverLine, HoverRect } from '../..';\n// @ts-ignore\nimport { Plot, XAxis, YAxis } from '../..';\nimport { makeDataHintsContainer } from '../../a11y/hints';\nimport style from '../../style/abstract-chart.shadow.css';\nimport { interpolateValue } from '../../utils';\nimport ChartLegend, { ChartLegendTable } from '../ChartLegend';\nimport type { LegendFlexProps } from '../ChartLegend/LegendFlex/LegendFlex.type';\nimport type { LegendItem } from '../ChartLegend/LegendItem/LegendItem.type';\nimport type { LegendTableProps } from '../ChartLegend/LegendTable/LegendTable.type';\n\nexport type ChartState = {\n dataDefinitions: Array<LegendItem & { columns: React.ReactNode[] }>;\n highlightedLine: number;\n withTrend: boolean;\n};\n\nexport const NOT_A_VALUE = 'n/a';\n\nexport abstract class AbstractChart<\n Data extends ListData | ObjectData,\n Props extends BaseChartProps<Data>,\n Enhancers extends readonly ((...args: any[]) => any)[] = [],\n DefaultProps = {},\n State extends ChartState = ChartState,\n> extends Component<Props, Enhancers, Readonly<{}>, DefaultProps, State> {\n public static style = style;\n public static defaultProps: Partial<BaseChartProps<any>> = {\n direction: 'column',\n showXAxis: true,\n showYAxis: true,\n showTooltip: true,\n };\n\n /**\n * Padding from the end's of chart to the container (except axis sides)\n */\n protected plotPadding = 6;\n\n protected dataHints = makeDataHintsContainer();\n\n constructor(props: Props) {\n super(props);\n\n this.setHighlightedLine = this.setHighlightedLine.bind(this);\n this.handleChangeVisible = this.handleChangeVisible.bind(this);\n this.handleMouseEnter = this.handleMouseEnter.bind(this);\n this.handleMouseLeave = this.handleMouseLeave.bind(this);\n this.resolveColor = this.resolveColor.bind(this);\n this.tooltipValueFormatter = this.tooltipValueFormatter.bind(this);\n this.handleWithTrendChange = this.handleWithTrendChange.bind(this);\n\n this.state = {\n dataDefinitions: this.getDefaultDataDefinitions(),\n highlightedLine: -1,\n withTrend: false,\n } as State;\n }\n\n public componentDidUpdate(prevProps: Props) {\n if (prevProps.data !== this.props.data || prevProps.legendProps !== this.props.legendProps) {\n this.setState({ dataDefinitions: this.getDefaultDataDefinitions() });\n }\n }\n\n protected getDefaultDataDefinitions(): Array<LegendItem & { columns: React.ReactNode[] }> {\n const { data, legendProps } = this.props;\n\n return this.dataKeys.map((key, index) => {\n const legendData = legendProps?.legendMap?.[key];\n\n const dataDefinition: LegendItem & { columns: React.ReactNode[] } = {\n id: key,\n label: legendData?.label ?? key,\n icon: legendData?.icon ?? undefined,\n checked: legendData?.defaultChecked ?? true,\n color: this.resolveColor(key, index),\n columns: [],\n };\n\n if (legendData?.additionalInfo || legendData?.count) {\n dataDefinition.additionalInfo = legendData.additionalInfo\n ? { label: legendData.additionalInfo }\n : legendData.count\n ? { count: legendData.count }\n : undefined;\n }\n\n if (legendData && 'columns' in legendData) {\n dataDefinition.columns = legendData.columns || [];\n } else if (!Array.isArray(data)) {\n let value: number | undefined = undefined;\n let dataValue = data[key];\n\n if (data instanceof Map) {\n dataValue = data.get(key);\n }\n\n if (dataValue !== interpolateValue) {\n value = Number(dataValue);\n }\n\n const total = Object.values(data).reduce<number>((sum, i) => {\n if (i !== interpolateValue) {\n return sum + Number(i);\n }\n\n return sum;\n }, 0);\n const percent = value !== undefined ? ((value / total) * 100).toFixed(2) : undefined;\n\n dataDefinition.columns = [\n <Text key={`${key}_percent`} use='secondary'>\n {percent !== undefined ? `${percent}%` : ''}\n </Text>,\n <Text key={`${key}_value`} use={value ? 'primary' : 'secondary'}>\n {value ?? NOT_A_VALUE}\n </Text>,\n ];\n }\n\n return dataDefinition;\n });\n }\n\n protected abstract get xScale(): ScaleBand<any> | ScaleLinear<any, any> | ScaleTime<any, any>;\n protected abstract get yScale(): ScaleBand<any> | ScaleLinear<any, any> | ScaleTime<any, any>;\n\n protected abstract getLegendAriaLabel(): string;\n protected abstract renderChart(): React.ReactNode;\n protected abstract renderTooltip(): React.ReactNode;\n\n protected get dataKeys(): string[] {\n const { data, groupKey } = this.props;\n\n let dataKeys: string[];\n\n if (Array.isArray(data) && groupKey) {\n dataKeys = Object.keys(data[0]).filter((key) => key !== groupKey);\n } else {\n dataKeys = Object.keys(data);\n }\n\n return dataKeys;\n }\n\n protected get xTicks(): number[] | Date[] | undefined {\n const { data, invertAxis, xTicksCount, yTicksCount } = this.asProps;\n\n const scale = this.xScale;\n\n if (Array.isArray(data) && 'ticks' in scale) {\n if (invertAxis && yTicksCount) {\n return scale.ticks(yTicksCount);\n } else if (xTicksCount) {\n return scale.ticks(xTicksCount);\n }\n\n return undefined;\n }\n\n return undefined;\n }\n\n protected get yTicks(): number[] | Date[] | undefined {\n const { data, invertAxis, xTicksCount, yTicksCount } = this.asProps;\n\n const scale = this.yScale;\n\n if (Array.isArray(data) && 'ticks' in scale) {\n if (invertAxis && xTicksCount) {\n return scale.ticks(xTicksCount);\n } else if (yTicksCount) {\n return scale.ticks(yTicksCount);\n }\n\n return undefined;\n }\n\n return undefined;\n }\n\n protected get flatValues(): Set<number> {\n const { data, groupKey } = this.asProps;\n const values: any[] = Array.isArray(data) ? data : Object.values(data);\n\n const flatValues = values.reduce<Set<number>>((result, item) => {\n if (!groupKey && typeof item === 'number') {\n result.add(item);\n } else {\n Object.entries(item).forEach(([key, value]) => {\n if (key !== groupKey && typeof value === 'number') {\n result.add(value);\n }\n });\n }\n\n return result;\n }, new Set());\n\n return flatValues;\n }\n\n protected get maxStackedValue(): number {\n const { data, groupKey } = this.asProps;\n\n if (!Array.isArray(data)) {\n const max = Object.values(data).reduce<number>((sum, val) => {\n if (typeof val === 'number') {\n sum = sum + val;\n }\n\n return sum;\n }, 0);\n\n return max;\n }\n\n const max = data.reduce((max, item) => {\n const barSum = Object.entries(item).reduce<number>((sum, [key, val]) => {\n if (key === groupKey) {\n return sum;\n }\n\n if (typeof val === 'number') {\n return sum + val;\n }\n\n if (val instanceof Date && !Number.isNaN(val.getMilliseconds())) {\n return sum + val.getMilliseconds();\n }\n\n return sum;\n }, 0);\n\n if (barSum > max) {\n max = barSum;\n }\n\n return max;\n }, 0);\n\n return max;\n }\n\n protected totalValue(data: ObjectData): number {\n const { dataDefinitions } = this.state;\n\n let allNotAValue = true;\n\n const total = dataDefinitions.reduce((sum, legendItem) => {\n const item = data[legendItem.id];\n\n if (item === null) {\n allNotAValue = false;\n return sum;\n }\n\n if (typeof item === 'number') {\n allNotAValue = false;\n return sum + item;\n }\n\n if (item instanceof Date && !Number.isNaN(item.getMilliseconds())) {\n allNotAValue = false;\n return sum + item.getMilliseconds();\n }\n\n return sum;\n }, 0);\n\n if (allNotAValue) {\n return Number.NaN;\n }\n\n return total;\n }\n\n protected getValueScale(values: number[]): number {\n const max = Math.max(...values);\n const min = Math.min(...values);\n\n const avg = (max + min) / 2;\n const count = Math.round(Math.log10(avg));\n\n const valueScale = 100 / 10 ** count;\n\n return valueScale;\n }\n\n protected setHighlightedLine(index: number) {\n this.setState({ highlightedLine: index });\n }\n\n protected handleChangeVisible(id: string, isVisible: boolean) {\n this.setState((prevState) => {\n const dataDefinitions = prevState.dataDefinitions.map((item) => {\n if (item.id === id) {\n item.checked = isVisible;\n }\n\n return item;\n });\n\n return { dataDefinitions };\n });\n }\n\n protected handleWithTrendChange(isVisible: boolean) {\n this.setState({ withTrend: isVisible });\n }\n\n protected handleMouseEnter(id: string) {\n this.setHighlightedLine(this.state.dataDefinitions.findIndex((line) => line.id === id));\n }\n\n protected handleMouseLeave() {\n this.setHighlightedLine(-1);\n }\n\n protected resolveColor(id: string, index: number) {\n return this.props.colorMap?.[id] ?? `chart-palette-order-${index + 1}`;\n }\n\n protected tooltipValueFormatter(\n value?: string | number | typeof interpolateValue | Date,\n ): string {\n const { tooltipValueFormatter } = this.asProps;\n\n if (tooltipValueFormatter) {\n return tooltipValueFormatter(value);\n }\n\n if (value === undefined || value === interpolateValue) {\n return NOT_A_VALUE;\n }\n\n if (value === null) {\n return '0';\n }\n\n if (value instanceof Date) {\n return value.toDateString();\n }\n\n return value.toString();\n }\n\n protected defaultLegendProps(): Partial<BaseLegendProps> {\n return {\n legendType: 'Flex',\n };\n }\n\n protected renderLegend() {\n const { legendProps, direction, showLegend, patterns } = this.asProps;\n\n if (\n // we hide Legend for one item on chart except not manually set to show.\n showLegend === undefined && this.dataKeys.length === 1 ||\n showLegend === false\n ) {\n return null;\n }\n\n const { dataDefinitions, withTrend } = this.state;\n const lProps = {\n ...this.defaultLegendProps(),\n ...legendProps,\n };\n\n const commonLegendProps: LegendFlexProps | LegendTableProps = {\n 'dataHints': this.dataHints,\n 'items': dataDefinitions,\n 'size': lProps.size,\n 'shape': lProps.shape,\n 'w': lProps.w,\n 'h': lProps.h,\n patterns,\n 'direction':\n lProps.direction ?? (direction === 'row' || direction === 'row-reverse' ? 'column' : 'row'),\n 'onChangeVisibleItem': lProps.disableSelectItems\n ? undefined\n : callAllEventHandlers(lProps.onChangeVisibleItem, this.handleChangeVisible),\n 'onMouseEnterItem': lProps.disableHoverItems\n ? undefined\n : callAllEventHandlers(lProps.onMouseEnterItem, this.handleMouseEnter),\n 'onMouseLeaveItem': lProps.disableHoverItems\n ? undefined\n : callAllEventHandlers(lProps.onMouseLeaveItem, this.handleMouseLeave),\n 'aria-label': this.getLegendAriaLabel(),\n };\n\n if (lProps.legendType === 'Table') {\n return <ChartLegendTable {...(commonLegendProps as LegendTableProps)} />;\n }\n\n if ('withTrend' in lProps) {\n const flexLegendProps = {\n ...commonLegendProps,\n withTrend: true,\n trendLabel: lProps.trendLabel,\n trendIsVisible: withTrend,\n onTrendIsVisibleChange: this.handleWithTrendChange,\n };\n\n return <ChartLegend {...(flexLegendProps as LegendFlexProps)} />;\n }\n\n return <ChartLegend {...(commonLegendProps as LegendFlexProps)} />;\n }\n\n protected renderAxis(): React.ReactNode {\n const {\n invertAxis,\n showXAxis,\n showYAxis,\n data,\n axisXValueFormatter,\n axisYValueFormatter,\n multilineXTicks,\n multilineYTicks,\n } = this.asProps;\n\n if (!Array.isArray(data)) {\n return null;\n }\n\n const xTicks = this.xTicks;\n const yTicks = this.yTicks;\n\n const childrenX = axisXValueFormatter\n ? ({ value }: any) => ({ children: axisXValueFormatter(value) })\n : undefined;\n const childrenY = axisYValueFormatter\n ? ({ value }: any) => ({ children: axisYValueFormatter(value) })\n : undefined;\n\n return (\n <>\n {showYAxis && (\n <YAxis>\n {yTicks\n ? (\n <YAxis.Ticks multiline={multilineYTicks} ticks={yTicks}>{childrenY}</YAxis.Ticks>\n )\n : (\n <YAxis.Ticks multiline={multilineYTicks}>{childrenY}</YAxis.Ticks>\n )}\n {invertAxis !== true && (yTicks ? <YAxis.Grid ticks={yTicks} /> : <YAxis.Grid />)}\n </YAxis>\n )}\n\n {showXAxis && (\n <XAxis>\n {xTicks\n ? (\n <XAxis.Ticks multiline={multilineXTicks} ticks={xTicks}>{childrenX}</XAxis.Ticks>\n )\n : (\n <XAxis.Ticks multiline={multilineXTicks}>{childrenX}</XAxis.Ticks>\n )}\n {invertAxis === true && (xTicks ? <XAxis.Grid ticks={xTicks} /> : <XAxis.Grid />)}\n </XAxis>\n )}\n </>\n );\n }\n\n protected getTooltipChildren<D extends ObjectData>(options: {\n Tooltip: typeof HoverLine['Tooltip'] | typeof HoverRect['Tooltip'];\n dataItem: D;\n }) {\n const STooltipChildrenWrapper = Root;\n const { Tooltip, dataItem } = options;\n\n const { styles, groupKey } = this.asProps;\n const { dataDefinitions } = this.state;\n const title = dataItem[groupKey as keyof D]?.toString();\n\n return sstyled(styles)(\n <Flex direction='column'>\n { title && <Tooltip.Title>{title}</Tooltip.Title> }\n\n <STooltipChildrenWrapper\n render={Box}\n columnsCount='2'\n __excludeProps={['data']}\n >\n {dataDefinitions.map((item) => {\n return (\n item.checked && (\n <Fragment key={item.id}>\n <Tooltip.Dot mr={2} color={item.color}>\n {item.label}\n </Tooltip.Dot>\n <Text textAlign='end' bold>{this.tooltipValueFormatter(dataItem[item.id] as string)}</Text>\n </Fragment>\n )\n );\n })}\n\n {this.renderTooltipTotalLine(dataItem)}\n </STooltipChildrenWrapper>\n </Flex>,\n );\n }\n\n protected renderTooltipTotalLine<D extends ObjectData>(dataItem: D) {\n const { showTotalInTooltip } = this.asProps;\n\n if (!showTotalInTooltip) {\n return null;\n }\n\n const total = this.totalValue(dataItem);\n\n return (\n <>\n <Box mt={2} mr={2}>Total</Box>\n <Text mt={2} textAlign='end' bold>{Number.isNaN(total) ? NOT_A_VALUE : total}</Text>\n </>\n );\n }\n\n public render() {\n const SChart = Root;\n const { styles, plotWidth, plotHeight, data, patterns, a11yAltTextConfig, duration, eventEmitter, showTooltip } =\n this.asProps;\n\n const { extractedAriaProps } = extractAriaProps(this.asProps);\n\n return sstyled(styles)(\n <SChart render={Flex} gap={5} __excludeProps={['data', 'eventEmitter']} role='group'>\n {this.renderLegend()}\n <Plot\n data={data}\n scale={[this.xScale, this.yScale]}\n width={plotWidth}\n height={plotHeight}\n dataHints={this.dataHints}\n a11yAltTextConfig={a11yAltTextConfig}\n patterns={patterns}\n duration={duration}\n eventEmitter={eventEmitter}\n {...extractedAriaProps}\n >\n {this.renderAxis()}\n {!showTooltip ? null : this.renderTooltip()}\n {this.renderChart()}\n </Plot>\n </SChart>,\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -7,10 +7,11 @@ import { Box, Flex } from '@semcore/base-components';
7
7
  import { createComponent, Root, sstyled } from '@semcore/core';
8
8
  import i18nEnhance from '@semcore/core/lib/utils/enhances/i18nEnhance';
9
9
  import resolveColorEnhance from '@semcore/core/lib/utils/enhances/resolveColorEnhance';
10
+ import trottle from '@semcore/core/lib/utils/rafTrottle';
10
11
  import uniqueIDEnhancement from '@semcore/core/lib/utils/uniqueID';
11
12
  import Divider from '@semcore/divider';
12
13
  import { Text } from '@semcore/typography';
13
- import { scaleBand, scaleLinear } from 'd3-scale';
14
+ import { scaleThreshold, scaleLinear } from 'd3-scale';
14
15
  import React from 'react';
15
16
  // @ts-ignore
16
17
  import { HoverRect, Plot } from '../..';
@@ -18,14 +19,54 @@ import { AbstractChart, NOT_A_VALUE } from './AbstractChart';
18
19
  // @ts-ignore
19
20
  import AnimatedClipPath from '../../AnimatedClipPath';
20
21
  import { localizedMessages } from '../../translations/__intergalactic-dynamic-locales';
21
- import { interpolateValue, scaleToBand } from '../../utils';
22
+ import { eventToPoint, interpolateValue } from '../../utils';
22
23
  import Cigarette from '../Cigarette/Cigarette';
23
- const wMin = 2;
24
+ const DEFAULT_MINIMAL_BAR_WIDTH = 2;
25
+ const DEFAULT_GAP = 2;
24
26
  class CigaretteChartComponent extends AbstractChart {
25
- constructor(...args) {
26
- super(...args);
27
+ constructor(props) {
28
+ super(props);
29
+ _defineProperty(this, "plotRef", /*#__PURE__*/React.createRef());
27
30
  _defineProperty(this, "plotPadding", 0);
28
31
  _defineProperty(this, "offset", 0);
32
+ _defineProperty(this, "onPlotMouseMove", trottle(event => {
33
+ if (!this.plotRef.current) return;
34
+ const [pX, pY] = eventToPoint(event, this.plotRef.current);
35
+ this.setState(prevState => ({
36
+ pX,
37
+ pY
38
+ }));
39
+ }));
40
+ _defineProperty(this, "onPlotMouseLeave", trottle(() => {
41
+ this.setState(prevState => ({
42
+ pX: null,
43
+ pY: null
44
+ }));
45
+ }));
46
+ this.state = {
47
+ ...this.state,
48
+ pX: null,
49
+ pY: null
50
+ };
51
+ }
52
+ get activeDataDefinitions() {
53
+ const {
54
+ dataDefinitions
55
+ } = this.state;
56
+ return dataDefinitions.filter(({
57
+ checked
58
+ }) => checked);
59
+ }
60
+ get activePositiveDataDefinitions() {
61
+ const {
62
+ data
63
+ } = this.asProps;
64
+ return this.activeDataDefinitions.filter(({
65
+ id
66
+ }) => {
67
+ const itemValue = data[id];
68
+ return typeof itemValue === 'number' && itemValue > 0;
69
+ });
29
70
  }
30
71
  resolveColor(id, index) {
31
72
  return this.props.colorMap?.[id] ?? `blue-${5 - index}00`;
@@ -43,17 +84,86 @@ class CigaretteChartComponent extends AbstractChart {
43
84
  w: 'fit-content'
44
85
  };
45
86
  }
87
+ totalValue() {
88
+ const {
89
+ data
90
+ } = this.asProps;
91
+ return this.activeDataDefinitions.reduce((acc, {
92
+ id
93
+ }) => {
94
+ const itemValue = data[id];
95
+ if (typeof itemValue === 'number') {
96
+ acc += itemValue;
97
+ }
98
+ return acc;
99
+ }, 0);
100
+ }
101
+ computeCigaretteItems() {
102
+ const {
103
+ plotWidth,
104
+ plotHeight,
105
+ data,
106
+ invertAxis,
107
+ minimalBarWidth
108
+ } = this.asProps;
109
+ const dataDefinitions = invertAxis ? this.activeDataDefinitions : [...this.activeDataDefinitions].reverse();
110
+ const count = this.activePositiveDataDefinitions.length;
111
+ const totalGapWidth = DEFAULT_GAP * Math.max(0, count - 1);
112
+ const availableSpace = Math.max(0, (invertAxis ? plotWidth : plotHeight) - totalGapWidth);
113
+ const totalValue = this.totalValue();
114
+ const dataDefinitionsItemSize = dataDefinitions.map(({
115
+ id
116
+ }) => {
117
+ if (totalValue === 0) {
118
+ return 0;
119
+ }
120
+ const itemValue = data[id];
121
+ if (typeof itemValue !== 'number') return 0;
122
+ return itemValue / totalValue * availableSpace;
123
+ });
124
+ const result = dataDefinitions.map((dd, index) => ({
125
+ ...dd,
126
+ value: data[dd.id],
127
+ dataWidth: dataDefinitionsItemSize[index],
128
+ visualWidth: dataDefinitionsItemSize[index],
129
+ isMinVisible: false
130
+ }));
131
+ const smallItems = result.filter(r => {
132
+ const {
133
+ value,
134
+ dataWidth
135
+ } = r;
136
+ if (typeof value !== 'number') return false;
137
+ return value > 0 && dataWidth < minimalBarWidth;
138
+ });
139
+ if (smallItems.length === 0) return result;
140
+ let extraNeeded = 0;
141
+ for (const smallItem of smallItems) {
142
+ extraNeeded += minimalBarWidth - smallItem.dataWidth;
143
+ smallItem.visualWidth = minimalBarWidth;
144
+ smallItem.isMinVisible = true;
145
+ }
146
+ const donors = result.filter(r => !r.isMinVisible && r.dataWidth > minimalBarWidth);
147
+ const donorCapacity = donors.reduce((s, d) => s + (d.dataWidth - minimalBarWidth), 0);
148
+ for (const donor of donors) {
149
+ const available = donor.dataWidth - minimalBarWidth;
150
+ const share = available / donorCapacity;
151
+ const taken = share * extraNeeded;
152
+ donor.visualWidth = donor.dataWidth - taken;
153
+ }
154
+ return result;
155
+ }
46
156
  get xScale() {
47
157
  const {
48
- invertAxis
158
+ plotWidth
49
159
  } = this.asProps;
50
- return invertAxis ? this.valueScale : this.categoryScale;
160
+ return scaleLinear([0, plotWidth]);
51
161
  }
52
162
  get yScale() {
53
163
  const {
54
- invertAxis
164
+ plotHeight
55
165
  } = this.asProps;
56
- return invertAxis ? this.categoryScale : this.valueScale;
166
+ return scaleLinear([plotHeight, 0]);
57
167
  }
58
168
  renderChart() {
59
169
  const {
@@ -71,18 +181,25 @@ class CigaretteChartComponent extends AbstractChart {
71
181
  highlightedLine
72
182
  } = this.state;
73
183
  this.offset = 0;
74
- return /*#__PURE__*/React.createElement(React.Fragment, null, (invertAxis ? dataDefinitions : [...dataDefinitions].reverse()).map((item, index) => {
75
- const value = data[item.id];
76
- if (!item.checked || value === interpolateValue || value === null) {
184
+ const items = this.computeCigaretteItems();
185
+ return /*#__PURE__*/React.createElement(React.Fragment, null, items.map((item, index) => {
186
+ const {
187
+ visualWidth,
188
+ id
189
+ } = item;
190
+ const value = data[id];
191
+ if (value === interpolateValue || value === null) {
77
192
  return null;
78
193
  }
79
- const absWidth = Math.abs(this.valueScale(value) - Math.max(this.valueScale(this.valueScale.domain()[0]), this.valueScale(0)));
80
- const height = scaleToBand(this.categoryScale).bandwidth() - 4;
81
- const width = value === 0 ? 0 : Math.max(absWidth, wMin * 2) - wMin;
82
- const y = 2;
83
- const x = index === 0 ? 0 : this.offset;
194
+ const height = invertAxis ? plotHeight - DEFAULT_GAP * 2 : plotWidth - DEFAULT_GAP * 2;
195
+ const width = visualWidth;
196
+ const y = DEFAULT_GAP;
197
+ const x = this.offset;
84
198
  const r = height < 28 ? 2 : 4;
85
- this.offset = this.offset + width + wMin;
199
+ this.offset += visualWidth;
200
+ if (index < items.length - 1) {
201
+ this.offset += DEFAULT_GAP;
202
+ }
86
203
  return /*#__PURE__*/React.createElement(Cigarette, {
87
204
  key: item.id,
88
205
  dataKey: item.id,
@@ -123,7 +240,9 @@ class CigaretteChartComponent extends AbstractChart {
123
240
  showTooltip
124
241
  } = this.asProps;
125
242
  const {
126
- dataDefinitions
243
+ dataDefinitions,
244
+ pX,
245
+ pY
127
246
  } = this.state;
128
247
  const STooltipChildrenWrapper = Box;
129
248
  if (!showTooltip) {
@@ -133,16 +252,20 @@ class CigaretteChartComponent extends AbstractChart {
133
252
  x: invertAxis ? '' : undefined,
134
253
  y: invertAxis ? undefined : '',
135
254
  wMin: 100,
136
- hideHoverLine: true
255
+ hideHoverLine: true,
256
+ xIndex: pX !== null ? this.visualScale(pX) : undefined,
257
+ yIndex: pY !== null ? this.visualScale(pY) : undefined
137
258
  }, tooltipProps => {
138
259
  var _ref4;
139
260
  const dataKey = invertAxis ? tooltipProps.xIndex : tooltipProps.yIndex;
140
- const showPercentColumn = showPercentValueInTooltip && this.totalValue(data) !== 0;
261
+ const showPercentColumn = showPercentValueInTooltip && this.totalValue() !== 0;
141
262
  if (tooltipViewType === 'single') {
142
263
  var _ref3;
143
264
  const item = dataDefinitions.find(dataDefItem => dataDefItem.id === dataKey);
144
265
  if (!item) {
145
- return null;
266
+ return {
267
+ children: null
268
+ };
146
269
  }
147
270
  return {
148
271
  children: (_ref3 = sstyled(styles), /*#__PURE__*/React.createElement(STooltipChildrenWrapper, _ref3.cn("STooltipChildrenWrapper", {
@@ -193,6 +316,22 @@ class CigaretteChartComponent extends AbstractChart {
193
316
  };
194
317
  });
195
318
  }
319
+ percentValue(data, key) {
320
+ const {
321
+ percentFormatter
322
+ } = this.asProps;
323
+ const total = this.totalValue();
324
+ const value = data[key];
325
+ if (typeof value === 'number' && total !== 0) {
326
+ const rawPercent = 100 * value / total;
327
+ const formattedPercent = percentFormatter ? percentFormatter(rawPercent) : Math.round(rawPercent);
328
+ return `${formattedPercent}%`;
329
+ }
330
+ if (value === null) {
331
+ return `0%`;
332
+ }
333
+ return NOT_A_VALUE;
334
+ }
196
335
  renderTooltipTotalLine(dataItem) {
197
336
  const {
198
337
  showTotalInTooltip,
@@ -201,7 +340,7 @@ class CigaretteChartComponent extends AbstractChart {
201
340
  if (!showTotalInTooltip) {
202
341
  return null;
203
342
  }
204
- const total = this.totalValue(dataItem);
343
+ const total = this.totalValue();
205
344
  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Box, {
206
345
  mt: 2,
207
346
  mr: 2
@@ -243,13 +382,16 @@ class CigaretteChartComponent extends AbstractChart {
243
382
  }), /*#__PURE__*/React.createElement(Flex, _ref5.cn("Flex", {
244
383
  "direction": 'column'
245
384
  }), header, /*#__PURE__*/React.createElement(Plot, _ref5.cn("Plot", {
385
+ "ref": this.plotRef,
246
386
  "data": data,
247
387
  "scale": [this.xScale, this.yScale],
248
388
  "width": plotWidth,
249
389
  "height": plotHeight,
250
390
  "dataHints": this.dataHints,
251
391
  "patterns": patterns,
252
- "a11yAltTextConfig": a11yAltTextConfig
392
+ "a11yAltTextConfig": a11yAltTextConfig,
393
+ "onMouseMove": this.onPlotMouseMove,
394
+ "onMouseLeave": this.onPlotMouseLeave
253
395
  }), this.renderTooltip(), this.renderChart())), this.renderLegend());
254
396
  }
255
397
  return _ref6 = sstyled(styles), /*#__PURE__*/React.createElement(SChart, _ref6.cn("SChart", {
@@ -258,13 +400,16 @@ class CigaretteChartComponent extends AbstractChart {
258
400
  "__excludeProps": ['onClick', 'data']
259
401
  }, _ref2)
260
402
  }), /*#__PURE__*/React.createElement(Plot, _ref6.cn("Plot", {
403
+ "ref": this.plotRef,
261
404
  "data": data,
262
405
  "scale": [this.xScale, this.yScale],
263
406
  "width": plotWidth,
264
407
  "height": plotHeight,
265
408
  "dataHints": this.dataHints,
266
409
  "patterns": patterns,
267
- "a11yAltTextConfig": a11yAltTextConfig
410
+ "a11yAltTextConfig": a11yAltTextConfig,
411
+ "onMouseMove": this.onPlotMouseMove,
412
+ "onMouseLeave": this.onPlotMouseLeave
268
413
  }), this.renderTooltip(), this.renderChart()), /*#__PURE__*/React.createElement(Flex, _ref6.cn("Flex", {
269
414
  "direction": 'column',
270
415
  "gap": 2
@@ -275,42 +420,36 @@ class CigaretteChartComponent extends AbstractChart {
275
420
  chartType: 'Cigarette'
276
421
  });
277
422
  }
278
- get selectedData() {
423
+ get visualScale() {
424
+ const cigaretteItems = this.computeCigaretteItems();
279
425
  const {
280
- data
281
- } = this.asProps;
282
- const {
283
- dataDefinitions
284
- } = this.state;
285
- const result = new Map();
286
- dataDefinitions.forEach(dataDefItem => {
287
- const value = data[dataDefItem.id];
288
- if (dataDefItem.checked && value !== interpolateValue) {
289
- result.set(dataDefItem.id, value);
426
+ range,
427
+ domain
428
+ } = cigaretteItems.reduce((acc, {
429
+ id,
430
+ visualWidth
431
+ }, index) => {
432
+ const {
433
+ range,
434
+ domain
435
+ } = acc;
436
+ if (visualWidth) {
437
+ range.push(id);
438
+ if (domain.length === 0) {
439
+ domain.push(visualWidth + DEFAULT_GAP);
440
+ return acc;
441
+ }
442
+ if (index !== cigaretteItems.length - 1) {
443
+ const lastAddedDomain = domain[domain.length - 1];
444
+ domain.push(lastAddedDomain + visualWidth + DEFAULT_GAP);
445
+ }
290
446
  }
447
+ return acc;
448
+ }, {
449
+ range: [],
450
+ domain: []
291
451
  });
292
- return result;
293
- }
294
- get categoryScale() {
295
- const {
296
- plotWidth,
297
- plotHeight,
298
- invertAxis
299
- } = this.asProps;
300
- const range = invertAxis ? [plotHeight, 0] : [0, plotWidth];
301
- return scaleBand([0], range);
302
- }
303
- get valueScale() {
304
- const {
305
- plotWidth,
306
- plotHeight,
307
- invertAxis
308
- } = this.asProps;
309
- let max = 0;
310
- this.selectedData.forEach(value => {
311
- max = max + value;
312
- });
313
- return scaleLinear().range(invertAxis ? [0, plotWidth] : [plotHeight, 0]).domain([0, max]);
452
+ return scaleThreshold(domain, range);
314
453
  }
315
454
  }
316
455
  _defineProperty(CigaretteChartComponent, "displayName", 'Cigarette.Bar');
@@ -327,7 +466,8 @@ _defineProperty(CigaretteChartComponent, "defaultProps", props => {
327
466
  duration: 500,
328
467
  plotWidth: !invertAxis && !props.plotWidth ? 44 : props.plotWidth,
329
468
  plotHeight: invertAxis && !props.plotHeight ? 28 : props.plotHeight,
330
- showPercentValueInTooltip: false
469
+ showPercentValueInTooltip: false,
470
+ minimalBarWidth: DEFAULT_MINIMAL_BAR_WIDTH
331
471
  };
332
472
  });
333
473
  _defineProperty(CigaretteChartComponent, "enhance", [resolveColorEnhance(), uniqueIDEnhancement(), i18nEnhance(localizedMessages)]);