@semcore/d3-chart 17.0.0-prerelease.29 → 17.0.0-prerelease.30

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -2,12 +2,16 @@
2
2
 
3
3
  CHANGELOG.md standards are inspired by [keepachangelog.com](https://keepachangelog.com/en/1.0.0/).
4
4
 
5
- ## [17.0.0] - 2026-02-27
5
+ ## [17.0.0] - 2026-03-09
6
6
 
7
7
  ### BREAK
8
8
 
9
9
  - Removed 2px border-radius for Bars.
10
10
 
11
+ ### Added
12
+
13
+ - `minimalBarWidth` for `Cigarette` chart.
14
+
11
15
  ### Changed
12
16
 
13
17
  - Refined a11y module invocation logic
@@ -36,11 +36,6 @@ class AbstractChart extends _core.Component {
36
36
  */
37
37
  (0, _defineProperty2.default)(this, "plotPadding", 6);
38
38
  (0, _defineProperty2.default)(this, "dataHints", (0, _hints.makeDataHintsContainer)());
39
- (0, _defineProperty2.default)(this, "state", {
40
- dataDefinitions: this.getDefaultDataDefinitions(),
41
- highlightedLine: -1,
42
- withTrend: false
43
- });
44
39
  this.setHighlightedLine = this.setHighlightedLine.bind(this);
45
40
  this.handleChangeVisible = this.handleChangeVisible.bind(this);
46
41
  this.handleMouseEnter = this.handleMouseEnter.bind(this);
@@ -48,6 +43,11 @@ class AbstractChart extends _core.Component {
48
43
  this.resolveColor = this.resolveColor.bind(this);
49
44
  this.tooltipValueFormatter = this.tooltipValueFormatter.bind(this);
50
45
  this.handleWithTrendChange = this.handleWithTrendChange.bind(this);
46
+ this.state = {
47
+ dataDefinitions: this.getDefaultDataDefinitions(),
48
+ highlightedLine: -1,
49
+ withTrend: false
50
+ };
51
51
  }
52
52
  componentDidUpdate(prevProps) {
53
53
  if (prevProps.data !== this.props.data || prevProps.legendProps !== this.props.legendProps) {
@@ -1 +1 @@
1
- {"version":3,"file":"AbstractChart.js","names":["_core","require","_baseComponents","_ariaProps","_assignProps3","_typography","_react","_interopRequireWildcard","_","_hints","_utils","_ChartLegend","style","sstyled","insert","NOT_A_VALUE","exports","AbstractChart","Component","constructor","props","_defineProperty2","default","makeDataHintsContainer","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","interpolateValue","Number","total","Object","values","reduce","sum","i","percent","toFixed","createElement","Text","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","callAllEventHandlers","onChangeVisibleItem","disableHoverItems","onMouseEnterItem","onMouseLeaveItem","getLegendAriaLabel","ChartLegendTable","flexLegendProps","trendLabel","trendIsVisible","onTrendIsVisibleChange","renderAxis","showXAxis","showYAxis","axisXValueFormatter","axisYValueFormatter","multilineXTicks","multilineYTicks","childrenX","children","childrenY","Fragment","YAxis","Ticks","multiline","Grid","XAxis","getTooltipChildren","options","_ref","_ref3","STooltipChildrenWrapper","Box","Tooltip","dataItem","styles","title","Flex","cn","Title","assignProps","Dot","mr","textAlign","bold","renderTooltipTotalLine","showTotalInTooltip","mt","render","_ref2","_ref4","SChart","plotWidth","plotHeight","a11yAltTextConfig","duration","eventEmitter","showTooltip","extractedAriaProps","extractAriaProps","Plot","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":";;;;;;;;;AACA,IAAAA,KAAA,GAAAC,OAAA;AADA,IAAAC,eAAA,GAAAD,OAAA;AAEA,IAAAE,UAAA,GAAAF,OAAA;AACA,IAAAG,aAAA,GAAAH,OAAA;AACA,IAAAI,WAAA,GAAAJ,OAAA;AAEA,IAAAK,MAAA,GAAAC,uBAAA,CAAAN,OAAA;AAMA,IAAAO,CAAA,GAAAP,OAAA;AACA,IAAAQ,MAAA,GAAAR,OAAA;AAEA,IAAAS,MAAA,GAAAT,OAAA;AACA,IAAAU,YAAA,GAAAJ,uBAAA,CAAAN,OAAA;AAPA;AAEA;AAAA;AAAA,MAAAW,KAAA,8BAAAZ,KAAA,CAAAa,OAAA,CAAAC,MAAA;AAAA;AAAA;EAAA;EAAA;EAAA;AAAA;AAgBO,MAAMC,WAAW,GAAAC,OAAA,CAAAD,WAAA,GAAG,KAAK;AAEzB,MAAeE,aAAa,SAIzBC,eAAS,CAAqC;EAsBtDC,WAAWA,CAACC,KAAQ,EAAE;IACpB,KAAK,CAACA,KAAK,CAAC;IAdd;AACF;AACA;IAFE,IAAAC,gBAAA,CAAAC,OAAA,uBAGwB,CAAC;IAAA,IAAAD,gBAAA,CAAAC,OAAA,qBAEH,IAAAC,6BAAsB,EAAC,CAAC;IAAA,IAAAF,gBAAA,CAAAC,OAAA,iBAEnB;MACzBE,eAAe,EAAE,IAAI,CAACC,yBAAyB,CAAC,CAAC;MACjDC,eAAe,EAAE,CAAC,CAAC;MACnBC,SAAS,EAAE;IACb,CAAC;IAKC,IAAI,CAACC,kBAAkB,GAAG,IAAI,CAACA,kBAAkB,CAACC,IAAI,CAAC,IAAI,CAAC;IAC5D,IAAI,CAACC,mBAAmB,GAAG,IAAI,CAACA,mBAAmB,CAACD,IAAI,CAAC,IAAI,CAAC;IAC9D,IAAI,CAACE,gBAAgB,GAAG,IAAI,CAACA,gBAAgB,CAACF,IAAI,CAAC,IAAI,CAAC;IACxD,IAAI,CAACG,gBAAgB,GAAG,IAAI,CAACA,gBAAgB,CAACH,IAAI,CAAC,IAAI,CAAC;IACxD,IAAI,CAACI,YAAY,GAAG,IAAI,CAACA,YAAY,CAACJ,IAAI,CAAC,IAAI,CAAC;IAChD,IAAI,CAACK,qBAAqB,GAAG,IAAI,CAACA,qBAAqB,CAACL,IAAI,CAAC,IAAI,CAAC;IAClE,IAAI,CAACM,qBAAqB,GAAG,IAAI,CAACA,qBAAqB,CAACN,IAAI,CAAC,IAAI,CAAC;EACpE;EAEOO,kBAAkBA,CAACC,SAAY,EAAE;IACtC,IAAIA,SAAS,CAACC,IAAI,KAAK,IAAI,CAAClB,KAAK,CAACkB,IAAI,IAAID,SAAS,CAACE,WAAW,KAAK,IAAI,CAACnB,KAAK,CAACmB,WAAW,EAAE;MAC1F,IAAI,CAACC,QAAQ,CAAC;QAAEhB,eAAe,EAAE,IAAI,CAACC,yBAAyB,CAAC;MAAE,CAAC,CAAC;IACtE;EACF;EAEUA,yBAAyBA,CAAA,EAAuD;IACxF,MAAM;MAAEa,IAAI;MAAEC;IAAY,CAAC,GAAG,IAAI,CAACnB,KAAK;IAExC,OAAO,IAAI,CAACqB,QAAQ,CAACC,GAAG,CAAC,CAACC,GAAG,EAAEC,KAAK,KAAK;MACvC,MAAMC,UAAU,GAAGN,WAAW,EAAEO,SAAS,GAAGH,GAAG,CAAC;MAEhD,MAAMI,cAA2D,GAAG;QAClEC,EAAE,EAAEL,GAAG;QACPM,KAAK,EAAEJ,UAAU,EAAEI,KAAK,IAAIN,GAAG;QAC/BO,IAAI,EAAEL,UAAU,EAAEK,IAAI,IAAIC,SAAS;QACnCC,OAAO,EAAEP,UAAU,EAAEQ,cAAc,IAAI,IAAI;QAC3CC,KAAK,EAAE,IAAI,CAACrB,YAAY,CAACU,GAAG,EAAEC,KAAK,CAAC;QACpCW,OAAO,EAAE;MACX,CAAC;MAED,IAAIV,UAAU,EAAEW,cAAc,IAAIX,UAAU,EAAEY,KAAK,EAAE;QACnDV,cAAc,CAACS,cAAc,GAAGX,UAAU,CAACW,cAAc,GACrD;UAAEP,KAAK,EAAEJ,UAAU,CAACW;QAAe,CAAC,GACpCX,UAAU,CAACY,KAAK,GACd;UAAEA,KAAK,EAAEZ,UAAU,CAACY;QAAM,CAAC,GAC3BN,SAAS;MACjB;MAEA,IAAIN,UAAU,IAAI,SAAS,IAAIA,UAAU,EAAE;QACzCE,cAAc,CAACQ,OAAO,GAAGV,UAAU,CAACU,OAAO,IAAI,EAAE;MACnD,CAAC,MAAM,IAAI,CAACG,KAAK,CAACC,OAAO,CAACrB,IAAI,CAAC,EAAE;QAC/B,IAAIsB,KAAyB,GAAGT,SAAS;QACzC,IAAIU,SAAS,GAAGvB,IAAI,CAACK,GAAG,CAAC;QAEzB,IAAIL,IAAI,YAAYwB,GAAG,EAAE;UACvBD,SAAS,GAAGvB,IAAI,CAACyB,GAAG,CAACpB,GAAG,CAAC;QAC3B;QAEA,IAAIkB,SAAS,KAAKG,uBAAgB,EAAE;UAClCJ,KAAK,GAAGK,MAAM,CAACJ,SAAS,CAAC;QAC3B;QAEA,MAAMK,KAAK,GAAGC,MAAM,CAACC,MAAM,CAAC9B,IAAI,CAAC,CAAC+B,MAAM,CAAS,CAACC,GAAG,EAAEC,CAAC,KAAK;UAC3D,IAAIA,CAAC,KAAKP,uBAAgB,EAAE;YAC1B,OAAOM,GAAG,GAAGL,MAAM,CAACM,CAAC,CAAC;UACxB;UAEA,OAAOD,GAAG;QACZ,CAAC,EAAE,CAAC,CAAC;QACL,MAAME,OAAO,GAAGZ,KAAK,KAAKT,SAAS,GAAG,CAAES,KAAK,GAAGM,KAAK,GAAI,GAAG,EAAEO,OAAO,CAAC,CAAC,CAAC,GAAGtB,SAAS;QAEpFJ,cAAc,CAACQ,OAAO,GAAG,cACvBjD,MAAA,CAAAgB,OAAA,CAAAoD,aAAA,CAACrE,WAAA,CAAAsE,IAAI;UAAChC,GAAG,EAAE,GAAGA,GAAG,UAAW;UAACiC,GAAG,EAAC;QAAW,GACzCJ,OAAO,KAAKrB,SAAS,GAAG,GAAGqB,OAAO,GAAG,GAAG,EACrC,CAAC,eACPlE,MAAA,CAAAgB,OAAA,CAAAoD,aAAA,CAACrE,WAAA,CAAAsE,IAAI;UAAChC,GAAG,EAAE,GAAGA,GAAG,QAAS;UAACiC,GAAG,EAAEhB,KAAK,GAAG,SAAS,GAAG;QAAY,GAC7DA,KAAK,IAAI7C,WACN,CAAC,CACR;MACH;MAEA,OAAOgC,cAAc;IACvB,CAAC,CAAC;EACJ;EASA,IAAcN,QAAQA,CAAA,EAAa;IACjC,MAAM;MAAEH,IAAI;MAAEuC;IAAS,CAAC,GAAG,IAAI,CAACzD,KAAK;IAErC,IAAIqB,QAAkB;IAEtB,IAAIiB,KAAK,CAACC,OAAO,CAACrB,IAAI,CAAC,IAAIuC,QAAQ,EAAE;MACnCpC,QAAQ,GAAG0B,MAAM,CAACW,IAAI,CAACxC,IAAI,CAAC,CAAC,CAAC,CAAC,CAACyC,MAAM,CAAEpC,GAAG,IAAKA,GAAG,KAAKkC,QAAQ,CAAC;IACnE,CAAC,MAAM;MACLpC,QAAQ,GAAG0B,MAAM,CAACW,IAAI,CAACxC,IAAI,CAAC;IAC9B;IAEA,OAAOG,QAAQ;EACjB;EAEA,IAAcuC,MAAMA,CAAA,EAAkC;IACpD,MAAM;MAAE1C,IAAI;MAAE2C,UAAU;MAAEC,WAAW;MAAEC;IAAY,CAAC,GAAG,IAAI,CAACC,OAAO;IAEnE,MAAMC,KAAK,GAAG,IAAI,CAACC,MAAM;IAEzB,IAAI5B,KAAK,CAACC,OAAO,CAACrB,IAAI,CAAC,IAAI,OAAO,IAAI+C,KAAK,EAAE;MAC3C,IAAIJ,UAAU,IAAIE,WAAW,EAAE;QAC7B,OAAOE,KAAK,CAACE,KAAK,CAACJ,WAAW,CAAC;MACjC,CAAC,MAAM,IAAID,WAAW,EAAE;QACtB,OAAOG,KAAK,CAACE,KAAK,CAACL,WAAW,CAAC;MACjC;MAEA,OAAO/B,SAAS;IAClB;IAEA,OAAOA,SAAS;EAClB;EAEA,IAAcqC,MAAMA,CAAA,EAAkC;IACpD,MAAM;MAAElD,IAAI;MAAE2C,UAAU;MAAEC,WAAW;MAAEC;IAAY,CAAC,GAAG,IAAI,CAACC,OAAO;IAEnE,MAAMC,KAAK,GAAG,IAAI,CAACI,MAAM;IAEzB,IAAI/B,KAAK,CAACC,OAAO,CAACrB,IAAI,CAAC,IAAI,OAAO,IAAI+C,KAAK,EAAE;MAC3C,IAAIJ,UAAU,IAAIC,WAAW,EAAE;QAC7B,OAAOG,KAAK,CAACE,KAAK,CAACL,WAAW,CAAC;MACjC,CAAC,MAAM,IAAIC,WAAW,EAAE;QACtB,OAAOE,KAAK,CAACE,KAAK,CAACJ,WAAW,CAAC;MACjC;MAEA,OAAOhC,SAAS;IAClB;IAEA,OAAOA,SAAS;EAClB;EAEA,IAAcuC,UAAUA,CAAA,EAAgB;IACtC,MAAM;MAAEpD,IAAI;MAAEuC;IAAS,CAAC,GAAG,IAAI,CAACO,OAAO;IACvC,MAAMhB,MAAa,GAAGV,KAAK,CAACC,OAAO,CAACrB,IAAI,CAAC,GAAGA,IAAI,GAAG6B,MAAM,CAACC,MAAM,CAAC9B,IAAI,CAAC;IAEtE,MAAMoD,UAAU,GAAGtB,MAAM,CAACC,MAAM,CAAc,CAACsB,MAAM,EAAEC,IAAI,KAAK;MAC9D,IAAI,CAACf,QAAQ,IAAI,OAAOe,IAAI,KAAK,QAAQ,EAAE;QACzCD,MAAM,CAACE,GAAG,CAACD,IAAI,CAAC;MAClB,CAAC,MAAM;QACLzB,MAAM,CAAC2B,OAAO,CAACF,IAAI,CAAC,CAACG,OAAO,CAAC,CAAC,CAACpD,GAAG,EAAEiB,KAAK,CAAC,KAAK;UAC7C,IAAIjB,GAAG,KAAKkC,QAAQ,IAAI,OAAOjB,KAAK,KAAK,QAAQ,EAAE;YACjD+B,MAAM,CAACE,GAAG,CAACjC,KAAK,CAAC;UACnB;QACF,CAAC,CAAC;MACJ;MAEA,OAAO+B,MAAM;IACf,CAAC,EAAE,IAAIK,GAAG,CAAC,CAAC,CAAC;IAEb,OAAON,UAAU;EACnB;EAEA,IAAcO,eAAeA,CAAA,EAAW;IACtC,MAAM;MAAE3D,IAAI;MAAEuC;IAAS,CAAC,GAAG,IAAI,CAACO,OAAO;IAEvC,IAAI,CAAC1B,KAAK,CAACC,OAAO,CAACrB,IAAI,CAAC,EAAE;MACxB,MAAM4D,GAAG,GAAG/B,MAAM,CAACC,MAAM,CAAC9B,IAAI,CAAC,CAAC+B,MAAM,CAAS,CAACC,GAAG,EAAE6B,GAAG,KAAK;QAC3D,IAAI,OAAOA,GAAG,KAAK,QAAQ,EAAE;UAC3B7B,GAAG,GAAGA,GAAG,GAAG6B,GAAG;QACjB;QAEA,OAAO7B,GAAG;MACZ,CAAC,EAAE,CAAC,CAAC;MAEL,OAAO4B,GAAG;IACZ;IAEA,MAAMA,GAAG,GAAG5D,IAAI,CAAC+B,MAAM,CAAC,CAAC6B,GAAG,EAAEN,IAAI,KAAK;MACrC,MAAMQ,MAAM,GAAGjC,MAAM,CAAC2B,OAAO,CAACF,IAAI,CAAC,CAACvB,MAAM,CAAS,CAACC,GAAG,EAAE,CAAC3B,GAAG,EAAEwD,GAAG,CAAC,KAAK;QACtE,IAAIxD,GAAG,KAAKkC,QAAQ,EAAE;UACpB,OAAOP,GAAG;QACZ;QAEA,IAAI,OAAO6B,GAAG,KAAK,QAAQ,EAAE;UAC3B,OAAO7B,GAAG,GAAG6B,GAAG;QAClB;QAEA,IAAIA,GAAG,YAAYE,IAAI,IAAI,CAACpC,MAAM,CAACqC,KAAK,CAACH,GAAG,CAACI,eAAe,CAAC,CAAC,CAAC,EAAE;UAC/D,OAAOjC,GAAG,GAAG6B,GAAG,CAACI,eAAe,CAAC,CAAC;QACpC;QAEA,OAAOjC,GAAG;MACZ,CAAC,EAAE,CAAC,CAAC;MAEL,IAAI8B,MAAM,GAAGF,GAAG,EAAE;QAChBA,GAAG,GAAGE,MAAM;MACd;MAEA,OAAOF,GAAG;IACZ,CAAC,EAAE,CAAC,CAAC;IAEL,OAAOA,GAAG;EACZ;EAEUM,UAAUA,CAAClE,IAAgB,EAAU;IAC7C,MAAM;MAAEd;IAAgB,CAAC,GAAG,IAAI,CAACiF,KAAK;IAEtC,IAAIC,YAAY,GAAG,IAAI;IAEvB,MAAMxC,KAAK,GAAG1C,eAAe,CAAC6C,MAAM,CAAC,CAACC,GAAG,EAAEqC,UAAU,KAAK;MACxD,MAAMf,IAAI,GAAGtD,IAAI,CAACqE,UAAU,CAAC3D,EAAE,CAAC;MAEhC,IAAI4C,IAAI,KAAK,IAAI,EAAE;QACjBc,YAAY,GAAG,KAAK;QACpB,OAAOpC,GAAG;MACZ;MAEA,IAAI,OAAOsB,IAAI,KAAK,QAAQ,EAAE;QAC5Bc,YAAY,GAAG,KAAK;QACpB,OAAOpC,GAAG,GAAGsB,IAAI;MACnB;MAEA,IAAIA,IAAI,YAAYS,IAAI,IAAI,CAACpC,MAAM,CAACqC,KAAK,CAACV,IAAI,CAACW,eAAe,CAAC,CAAC,CAAC,EAAE;QACjEG,YAAY,GAAG,KAAK;QACpB,OAAOpC,GAAG,GAAGsB,IAAI,CAACW,eAAe,CAAC,CAAC;MACrC;MAEA,OAAOjC,GAAG;IACZ,CAAC,EAAE,CAAC,CAAC;IAEL,IAAIoC,YAAY,EAAE;MAChB,OAAOzC,MAAM,CAAC2C,GAAG;IACnB;IAEA,OAAO1C,KAAK;EACd;EAEU2C,YAAYA,CAACvE,IAAgB,EAAEK,GAAW,EAAU;IAC5D,MAAMuB,KAAK,GAAG,IAAI,CAACsC,UAAU,CAAClE,IAAI,CAAC;IAEnC,MAAMsB,KAAK,GAAGtB,IAAI,CAACK,GAAG,CAAC;IAEvB,IAAI,OAAOiB,KAAK,KAAK,QAAQ,IAAIM,KAAK,KAAK,CAAC,EAAE;MAC5C,MAAMM,OAAO,GAAGsC,IAAI,CAACC,KAAK,CAAE,GAAG,GAAGnD,KAAK,GAAIM,KAAK,CAAC;MAEjD,OAAO,GAAGM,OAAO,GAAG;IACtB;IAEA,IAAIZ,KAAK,KAAK,IAAI,EAAE;MAClB,OAAO,IAAI;IACb;IAEA,OAAO7C,WAAW;EACpB;EAEUiG,aAAaA,CAAC5C,MAAgB,EAAU;IAChD,MAAM8B,GAAG,GAAGY,IAAI,CAACZ,GAAG,CAAC,GAAG9B,MAAM,CAAC;IAC/B,MAAM6C,GAAG,GAAGH,IAAI,CAACG,GAAG,CAAC,GAAG7C,MAAM,CAAC;IAE/B,MAAM8C,GAAG,GAAG,CAAChB,GAAG,GAAGe,GAAG,IAAI,CAAC;IAC3B,MAAMxD,KAAK,GAAGqD,IAAI,CAACC,KAAK,CAACD,IAAI,CAACK,KAAK,CAACD,GAAG,CAAC,CAAC;IAEzC,MAAME,UAAU,GAAG,GAAG,GAAG,EAAE,IAAI3D,KAAK;IAEpC,OAAO2D,UAAU;EACnB;EAEUxF,kBAAkBA,CAACgB,KAAa,EAAE;IAC1C,IAAI,CAACJ,QAAQ,CAAC;MAAEd,eAAe,EAAEkB;IAAM,CAAC,CAAC;EAC3C;EAEUd,mBAAmBA,CAACkB,EAAU,EAAEqE,SAAkB,EAAE;IAC5D,IAAI,CAAC7E,QAAQ,CAAE8E,SAAS,IAAK;MAC3B,MAAM9F,eAAe,GAAG8F,SAAS,CAAC9F,eAAe,CAACkB,GAAG,CAAEkD,IAAI,IAAK;QAC9D,IAAIA,IAAI,CAAC5C,EAAE,KAAKA,EAAE,EAAE;UAClB4C,IAAI,CAACxC,OAAO,GAAGiE,SAAS;QAC1B;QAEA,OAAOzB,IAAI;MACb,CAAC,CAAC;MAEF,OAAO;QAAEpE;MAAgB,CAAC;IAC5B,CAAC,CAAC;EACJ;EAEUW,qBAAqBA,CAACkF,SAAkB,EAAE;IAClD,IAAI,CAAC7E,QAAQ,CAAC;MAAEb,SAAS,EAAE0F;IAAU,CAAC,CAAC;EACzC;EAEUtF,gBAAgBA,CAACiB,EAAU,EAAE;IACrC,IAAI,CAACpB,kBAAkB,CAAC,IAAI,CAAC6E,KAAK,CAACjF,eAAe,CAAC+F,SAAS,CAAEC,IAAI,IAAKA,IAAI,CAACxE,EAAE,KAAKA,EAAE,CAAC,CAAC;EACzF;EAEUhB,gBAAgBA,CAAA,EAAG;IAC3B,IAAI,CAACJ,kBAAkB,CAAC,CAAC,CAAC,CAAC;EAC7B;EAEUK,YAAYA,CAACe,EAAU,EAAEJ,KAAa,EAAE;IAChD,OAAO,IAAI,CAACxB,KAAK,CAACqG,QAAQ,GAAGzE,EAAE,CAAC,IAAI,uBAAuBJ,KAAK,GAAG,CAAC,EAAE;EACxE;EAEUV,qBAAqBA,CAC7B0B,KAAwD,EAChD;IACR,MAAM;MAAE1B;IAAsB,CAAC,GAAG,IAAI,CAACkD,OAAO;IAE9C,IAAIlD,qBAAqB,EAAE;MACzB,OAAOA,qBAAqB,CAAC0B,KAAK,CAAC;IACrC;IAEA,IAAIA,KAAK,KAAKT,SAAS,IAAIS,KAAK,KAAKI,uBAAgB,EAAE;MACrD,OAAOjD,WAAW;IACpB;IAEA,IAAI6C,KAAK,KAAK,IAAI,EAAE;MAClB,OAAO,GAAG;IACZ;IAEA,IAAIA,KAAK,YAAYyC,IAAI,EAAE;MACzB,OAAOzC,KAAK,CAAC8D,YAAY,CAAC,CAAC;IAC7B;IAEA,OAAO9D,KAAK,CAAC+D,QAAQ,CAAC,CAAC;EACzB;EAEUC,kBAAkBA,CAAA,EAA6B;IACvD,OAAO;MACLC,UAAU,EAAE;IACd,CAAC;EACH;EAEUC,YAAYA,CAAA,EAAG;IACvB,MAAM;MAAEvF,WAAW;MAAEwF,SAAS;MAAEC,UAAU;MAAEC;IAAS,CAAC,GAAG,IAAI,CAAC7C,OAAO;IAErE;IACE;IACA4C,UAAU,KAAK7E,SAAS,IAAI,IAAI,CAACV,QAAQ,CAACyF,MAAM,KAAK,CAAC,IACtDF,UAAU,KAAK,KAAK,EACpB;MACA,OAAO,IAAI;IACb;IAEA,MAAM;MAAExG,eAAe;MAAEG;IAAU,CAAC,GAAG,IAAI,CAAC8E,KAAK;IACjD,MAAM0B,MAAM,GAAG;MACb,GAAG,IAAI,CAACP,kBAAkB,CAAC,CAAC;MAC5B,GAAGrF;IACL,CAAC;IAED,MAAM6F,iBAAqD,GAAG;MAC5D,WAAW,EAAE,IAAI,CAACC,SAAS;MAC3B,OAAO,EAAE7G,eAAe;MACxB,MAAM,EAAE2G,MAAM,CAACG,IAAI;MACnB,OAAO,EAAEH,MAAM,CAACI,KAAK;MACrB,GAAG,EAAEJ,MAAM,CAACK,CAAC;MACb,GAAG,EAAEL,MAAM,CAACM,CAAC;MACbR,QAAQ;MACR,WAAW,EACTE,MAAM,CAACJ,SAAS,KAAKA,SAAS,KAAK,KAAK,IAAIA,SAAS,KAAK,aAAa,GAAG,QAAQ,GAAG,KAAK,CAAC;MAC7F,qBAAqB,EAAEI,MAAM,CAACO,kBAAkB,GAC5CvF,SAAS,GACT,IAAAwF,kCAAoB,EAACR,MAAM,CAACS,mBAAmB,EAAE,IAAI,CAAC9G,mBAAmB,CAAC;MAC9E,kBAAkB,EAAEqG,MAAM,CAACU,iBAAiB,GACxC1F,SAAS,GACT,IAAAwF,kCAAoB,EAACR,MAAM,CAACW,gBAAgB,EAAE,IAAI,CAAC/G,gBAAgB,CAAC;MACxE,kBAAkB,EAAEoG,MAAM,CAACU,iBAAiB,GACxC1F,SAAS,GACT,IAAAwF,kCAAoB,EAACR,MAAM,CAACY,gBAAgB,EAAE,IAAI,CAAC/G,gBAAgB,CAAC;MACxE,YAAY,EAAE,IAAI,CAACgH,kBAAkB,CAAC;IACxC,CAAC;IAED,IAAIb,MAAM,CAACN,UAAU,KAAK,OAAO,EAAE;MACjC,oBAAOvH,MAAA,CAAAgB,OAAA,CAAAoD,aAAA,CAAC/D,YAAA,CAAAsI,gBAAgB,EAAMb,iBAAyC,CAAC;IAC1E;IAEA,IAAI,WAAW,IAAID,MAAM,EAAE;MACzB,MAAMe,eAAe,GAAG;QACtB,GAAGd,iBAAiB;QACpBzG,SAAS,EAAE,IAAI;QACfwH,UAAU,EAAEhB,MAAM,CAACgB,UAAU;QAC7BC,cAAc,EAAEzH,SAAS;QACzB0H,sBAAsB,EAAE,IAAI,CAAClH;MAC/B,CAAC;MAED,oBAAO7B,MAAA,CAAAgB,OAAA,CAAAoD,aAAA,CAAC/D,YAAA,CAAAW,OAAW,EAAM4H,eAAsC,CAAC;IAClE;IAEA,oBAAO5I,MAAA,CAAAgB,OAAA,CAAAoD,aAAA,CAAC/D,YAAA,CAAAW,OAAW,EAAM8G,iBAAwC,CAAC;EACpE;EAEUkB,UAAUA,CAAA,EAAoB;IACtC,MAAM;MACJrE,UAAU;MACVsE,SAAS;MACTC,SAAS;MACTlH,IAAI;MACJmH,mBAAmB;MACnBC,mBAAmB;MACnBC,eAAe;MACfC;IACF,CAAC,GAAG,IAAI,CAACxE,OAAO;IAEhB,IAAI,CAAC1B,KAAK,CAACC,OAAO,CAACrB,IAAI,CAAC,EAAE;MACxB,OAAO,IAAI;IACb;IAEA,MAAM0C,MAAM,GAAG,IAAI,CAACA,MAAM;IAC1B,MAAMQ,MAAM,GAAG,IAAI,CAACA,MAAM;IAE1B,MAAMqE,SAAS,GAAGJ,mBAAmB,GACjC,CAAC;MAAE7F;IAAW,CAAC,MAAM;MAAEkG,QAAQ,EAAEL,mBAAmB,CAAC7F,KAAK;IAAE,CAAC,CAAC,GAC9DT,SAAS;IACb,MAAM4G,SAAS,GAAGL,mBAAmB,GACjC,CAAC;MAAE9F;IAAW,CAAC,MAAM;MAAEkG,QAAQ,EAAEJ,mBAAmB,CAAC9F,KAAK;IAAE,CAAC,CAAC,GAC9DT,SAAS;IAEb,oBACE7C,MAAA,CAAAgB,OAAA,CAAAoD,aAAA,CAAApE,MAAA,CAAAgB,OAAA,CAAA0I,QAAA,QACGR,SAAS,iBACRlJ,MAAA,CAAAgB,OAAA,CAAAoD,aAAA,CAAClE,CAAA,CAAAyJ,KAAK,QACHzE,MAAM,gBAEDlF,MAAA,CAAAgB,OAAA,CAAAoD,aAAA,CAAClE,CAAA,CAAAyJ,KAAK,CAACC,KAAK;MAACC,SAAS,EAAEP,eAAgB;MAACrE,KAAK,EAAEC;IAAO,GAAEuE,SAAuB,CAAC,gBAGjFzJ,MAAA,CAAAgB,OAAA,CAAAoD,aAAA,CAAClE,CAAA,CAAAyJ,KAAK,CAACC,KAAK;MAACC,SAAS,EAAEP;IAAgB,GAAEG,SAAuB,CAClE,EACJ9E,UAAU,KAAK,IAAI,KAAKO,MAAM,gBAAGlF,MAAA,CAAAgB,OAAA,CAAAoD,aAAA,CAAClE,CAAA,CAAAyJ,KAAK,CAACG,IAAI;MAAC7E,KAAK,EAAEC;IAAO,CAAE,CAAC,gBAAGlF,MAAA,CAAAgB,OAAA,CAAAoD,aAAA,CAAClE,CAAA,CAAAyJ,KAAK,CAACG,IAAI,MAAE,CAAC,CAC3E,CACR,EAEAb,SAAS,iBACRjJ,MAAA,CAAAgB,OAAA,CAAAoD,aAAA,CAAClE,CAAA,CAAA6J,KAAK,QACHrF,MAAM,gBAED1E,MAAA,CAAAgB,OAAA,CAAAoD,aAAA,CAAClE,CAAA,CAAA6J,KAAK,CAACH,KAAK;MAACC,SAAS,EAAER,eAAgB;MAACpE,KAAK,EAAEP;IAAO,GAAE6E,SAAuB,CAAC,gBAGjFvJ,MAAA,CAAAgB,OAAA,CAAAoD,aAAA,CAAClE,CAAA,CAAA6J,KAAK,CAACH,KAAK;MAACC,SAAS,EAAER;IAAgB,GAAEE,SAAuB,CAClE,EACJ5E,UAAU,KAAK,IAAI,KAAKD,MAAM,gBAAG1E,MAAA,CAAAgB,OAAA,CAAAoD,aAAA,CAAClE,CAAA,CAAA6J,KAAK,CAACD,IAAI;MAAC7E,KAAK,EAAEP;IAAO,CAAE,CAAC,gBAAG1E,MAAA,CAAAgB,OAAA,CAAAoD,aAAA,CAAClE,CAAA,CAAA6J,KAAK,CAACD,IAAI,MAAE,CAAC,CAC3E,CAET,CAAC;EAEP;EAEUE,kBAAkBA,CAAuBC,OAGlD,EAAE;IAAA,IAAAC,IAAA,QAAApF,OAAA;MAAAqF,KAAA;IACD,MAAMC,uBAAuB,GAYfC,mBAAG;IAXjB,MAAM;MAAEC,OAAO;MAAEC;IAAS,CAAC,GAAGN,OAAO;IAErC,MAAM;MAAEO,MAAM;MAAEjG;IAAS,CAAC,GAAG,IAAI,CAACO,OAAO;IACzC,MAAM;MAAE5D;IAAgB,CAAC,GAAG,IAAI,CAACiF,KAAK;IACtC,MAAMsE,KAAK,GAAGF,QAAQ,CAAChG,QAAQ,CAAY,EAAE8C,QAAQ,CAAC,CAAC;IAEvD,OAAA8C,KAAA,GAAO,IAAA5J,aAAO,EAACiK,MAAM,CAAC,eACpBxK,MAAA,CAAAgB,OAAA,CAAAoD,aAAA,CAACxE,eAAA,CAAA8K,IAAI,EAAAP,KAAA,CAAAQ,EAAA;MAAA,aAAW;IAAQ,IACpBF,KAAK,iBAAIzK,MAAA,CAAAgB,OAAA,CAAAoD,aAAA,CAACkG,OAAO,CAACM,KAAK,QAAEH,KAAqB,CAAC,eAEjDzK,MAAA,CAAAgB,OAAA,CAAAoD,aAAA,CAACgG,uBAAuB,EAAAD,KAAA,CAAAQ,EAAA;MAAA,OAAAjL,KAAA,CAAAmL,WAAA;QAAA,gBAET,GAAG;QAAA,kBACA,CAAC,MAAM;MAAC,GAAAX,IAAA;IAAA,IAEvBhJ,eAAe,CAACkB,GAAG,CAAEkD,IAAI,IAAK;MAC7B,OACEA,IAAI,CAACxC,OAAO,iBACV9C,MAAA,CAAAgB,OAAA,CAAAoD,aAAA,CAACpE,MAAA,CAAA0J,QAAQ;QAACrH,GAAG,EAAEiD,IAAI,CAAC5C;MAAG,gBACrB1C,MAAA,CAAAgB,OAAA,CAAAoD,aAAA,CAACkG,OAAO,CAACQ,GAAG;QAACC,EAAE,EAAE,CAAE;QAAC/H,KAAK,EAAEsC,IAAI,CAACtC;MAAM,GACnCsC,IAAI,CAAC3C,KACK,CAAC,eACd3C,MAAA,CAAAgB,OAAA,CAAAoD,aAAA,CAACrE,WAAA,CAAAsE,IAAI;QAAC2G,SAAS,EAAC,KAAK;QAACC,IAAI;MAAA,GAAE,IAAI,CAACrJ,qBAAqB,CAAC2I,QAAQ,CAACjF,IAAI,CAAC5C,EAAE,CAAW,CAAQ,CAClF,CACX;IAEL,CAAC,CAAC,EAED,IAAI,CAACwI,sBAAsB,CAACX,QAAQ,CACd,CACrB,CAAC;EAEX;EAEUW,sBAAsBA,CAAuBX,QAAW,EAAE;IAClE,MAAM;MAAEY;IAAmB,CAAC,GAAG,IAAI,CAACrG,OAAO;IAE3C,IAAI,CAACqG,kBAAkB,EAAE;MACvB,OAAO,IAAI;IACb;IAEA,MAAMvH,KAAK,GAAG,IAAI,CAACsC,UAAU,CAACqE,QAAQ,CAAC;IAEvC,oBACEvK,MAAA,CAAAgB,OAAA,CAAAoD,aAAA,CAAApE,MAAA,CAAAgB,OAAA,CAAA0I,QAAA,qBACE1J,MAAA,CAAAgB,OAAA,CAAAoD,aAAA,CAACxE,eAAA,CAAAyK,GAAG;MAACe,EAAE,EAAE,CAAE;MAACL,EAAE,EAAE;IAAE,GAAC,OAAU,CAAC,eAC9B/K,MAAA,CAAAgB,OAAA,CAAAoD,aAAA,CAACrE,WAAA,CAAAsE,IAAI;MAAC+G,EAAE,EAAE,CAAE;MAACJ,SAAS,EAAC,KAAK;MAACC,IAAI;IAAA,GAAEtH,MAAM,CAACqC,KAAK,CAACpC,KAAK,CAAC,GAAGnD,WAAW,GAAGmD,KAAY,CACnF,CAAC;EAEP;EAEOyH,MAAMA,CAAA,EAAG;IAAA,IAAAC,KAAA,QAAAxG,OAAA;MAAAyG,KAAA;IACd,MAAMC,MAAM,GAOMd,oBAAI;IANtB,MAAM;MAAEF,MAAM;MAAEiB,SAAS;MAAEC,UAAU;MAAE1J,IAAI;MAAE2F,QAAQ;MAAEgE,iBAAiB;MAAEC,QAAQ;MAAEC,YAAY;MAAEC;IAAY,CAAC,GAC7G,IAAI,CAAChH,OAAO;IAEd,MAAM;MAAEiH;IAAmB,CAAC,GAAG,IAAAC,2BAAgB,EAAC,IAAI,CAAClH,OAAO,CAAC;IAE7D,OAAAyG,KAAA,GAAO,IAAAhL,aAAO,EAACiK,MAAM,CAAC,eACpBxK,MAAA,CAAAgB,OAAA,CAAAoD,aAAA,CAACoH,MAAM,EAAAD,KAAA,CAAAZ,EAAA;MAAA,OAAAjL,KAAA,CAAAmL,WAAA;QAAA,OAAoB,CAAC;QAAA,kBAAkB,CAAC,MAAM,EAAE,cAAc,CAAC;QAAA,QAAO;MAAO,GAAAS,KAAA;IAAA,IACjF,IAAI,CAAC9D,YAAY,CAAC,CAAC,eACpBxH,MAAA,CAAAgB,OAAA,CAAAoD,aAAA,CAAClE,CAAA,CAAA+L,IAAI,EAAAV,KAAA,CAAAZ,EAAA;MAAA,QACG3I,IAAI;MAAA,SACH,CAAC,IAAI,CAACgD,MAAM,EAAE,IAAI,CAACG,MAAM,CAAC;MAAA,SAC1BsG,SAAS;MAAA,UACRC,UAAU;MAAA,aACP,IAAI,CAAC3D,SAAS;MAAA,qBACN4D,iBAAiB;MAAA,YAC1BhE,QAAQ;MAAA,YACRiE,QAAQ;MAAA,gBACJC,YAAY;MAAA,GACtBE;IAAkB,IAErB,IAAI,CAAC/C,UAAU,CAAC,CAAC,EACjB,CAAC8C,WAAW,GAAG,IAAI,GAAG,IAAI,CAACI,aAAa,CAAC,CAAC,EAC1C,IAAI,CAACC,WAAW,CAAC,CACd,CACA,CAAC;EAEb;AACF;AAACzL,OAAA,CAAAC,aAAA,GAAAA,aAAA;AAAA,IAAAI,gBAAA,CAAAC,OAAA,EAviBqBL,aAAa,WAKXL,KAAK;AAAA,IAAAS,gBAAA,CAAAC,OAAA,EALPL,aAAa,kBAM0B;EACzD8G,SAAS,EAAE,QAAQ;EACnBwB,SAAS,EAAE,IAAI;EACfC,SAAS,EAAE,IAAI;EACf4C,WAAW,EAAE;AACf,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"AbstractChart.js","names":["_core","require","_baseComponents","_ariaProps","_assignProps3","_typography","_react","_interopRequireWildcard","_","_hints","_utils","_ChartLegend","style","sstyled","insert","NOT_A_VALUE","exports","AbstractChart","Component","constructor","props","_defineProperty2","default","makeDataHintsContainer","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","interpolateValue","Number","total","Object","values","reduce","sum","i","percent","toFixed","createElement","Text","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","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","callAllEventHandlers","onChangeVisibleItem","disableHoverItems","onMouseEnterItem","onMouseLeaveItem","getLegendAriaLabel","ChartLegendTable","flexLegendProps","trendLabel","trendIsVisible","onTrendIsVisibleChange","renderAxis","showXAxis","showYAxis","axisXValueFormatter","axisYValueFormatter","multilineXTicks","multilineYTicks","childrenX","children","childrenY","Fragment","YAxis","Ticks","multiline","Grid","XAxis","getTooltipChildren","options","_ref","_ref3","STooltipChildrenWrapper","Box","Tooltip","dataItem","styles","title","Flex","cn","Title","assignProps","Dot","mr","textAlign","bold","renderTooltipTotalLine","showTotalInTooltip","mt","render","_ref2","_ref4","SChart","plotWidth","plotHeight","a11yAltTextConfig","duration","eventEmitter","showTooltip","extractedAriaProps","extractAriaProps","Plot","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 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":[]}
@@ -10,6 +10,7 @@ var _core = require("@semcore/core");
10
10
  var _baseComponents = require("@semcore/base-components");
11
11
  var _i18nEnhance = _interopRequireDefault(require("@semcore/core/lib/utils/enhances/i18nEnhance"));
12
12
  var _resolveColorEnhance = _interopRequireDefault(require("@semcore/core/lib/utils/enhances/resolveColorEnhance"));
13
+ var _rafTrottle = _interopRequireDefault(require("@semcore/core/lib/utils/rafTrottle"));
13
14
  var _uniqueID = _interopRequireDefault(require("@semcore/core/lib/utils/uniqueID"));
14
15
  var _divider = _interopRequireDefault(require("@semcore/divider"));
15
16
  var _typography = require("@semcore/typography");
@@ -25,12 +26,52 @@ var _Cigarette = _interopRequireDefault(require("../Cigarette/Cigarette"));
25
26
 
26
27
  // @ts-ignore
27
28
 
28
- const wMin = 2;
29
+ const DEFAULT_MINIMAL_BAR_WIDTH = 2;
30
+ const DEFAULT_GAP = 2;
29
31
  class CigaretteChartComponent extends _AbstractChart.AbstractChart {
30
- constructor(...args) {
31
- super(...args);
32
+ constructor(props) {
33
+ super(props);
34
+ (0, _defineProperty2.default)(this, "plotRef", /*#__PURE__*/_react.default.createRef());
32
35
  (0, _defineProperty2.default)(this, "plotPadding", 0);
33
36
  (0, _defineProperty2.default)(this, "offset", 0);
37
+ (0, _defineProperty2.default)(this, "onPlotMouseMove", (0, _rafTrottle.default)(event => {
38
+ if (!this.plotRef.current) return;
39
+ const [pX, pY] = (0, _utils.eventToPoint)(event, this.plotRef.current);
40
+ this.setState(prevState => ({
41
+ pX,
42
+ pY
43
+ }));
44
+ }));
45
+ (0, _defineProperty2.default)(this, "onPlotMouseLeave", (0, _rafTrottle.default)(() => {
46
+ this.setState(prevState => ({
47
+ pX: null,
48
+ pY: null
49
+ }));
50
+ }));
51
+ this.state = {
52
+ ...this.state,
53
+ pX: null,
54
+ pY: null
55
+ };
56
+ }
57
+ get activeDataDefinitions() {
58
+ const {
59
+ dataDefinitions
60
+ } = this.state;
61
+ return dataDefinitions.filter(({
62
+ checked
63
+ }) => checked);
64
+ }
65
+ get activePositiveDataDefinitions() {
66
+ const {
67
+ data
68
+ } = this.asProps;
69
+ return this.activeDataDefinitions.filter(({
70
+ id
71
+ }) => {
72
+ const itemValue = data[id];
73
+ return typeof itemValue === 'number' && itemValue > 0;
74
+ });
34
75
  }
35
76
  resolveColor(id, index) {
36
77
  return this.props.colorMap?.[id] ?? `blue-${5 - index}00`;
@@ -48,17 +89,86 @@ class CigaretteChartComponent extends _AbstractChart.AbstractChart {
48
89
  w: 'fit-content'
49
90
  };
50
91
  }
92
+ totalValue() {
93
+ const {
94
+ data
95
+ } = this.asProps;
96
+ return this.activeDataDefinitions.reduce((acc, {
97
+ id
98
+ }) => {
99
+ const itemValue = data[id];
100
+ if (typeof itemValue === 'number') {
101
+ acc += itemValue;
102
+ }
103
+ return acc;
104
+ }, 0);
105
+ }
106
+ computeCigaretteItems() {
107
+ const {
108
+ plotWidth,
109
+ plotHeight,
110
+ data,
111
+ invertAxis,
112
+ minimalBarWidth
113
+ } = this.asProps;
114
+ const dataDefinitions = invertAxis ? this.activeDataDefinitions : [...this.activeDataDefinitions].reverse();
115
+ const count = this.activePositiveDataDefinitions.length;
116
+ const totalGapWidth = DEFAULT_GAP * Math.max(0, count - 1);
117
+ const availableSpace = Math.max(0, (invertAxis ? plotWidth : plotHeight) - totalGapWidth);
118
+ const totalValue = this.totalValue();
119
+ const dataDefinitionsItemSize = dataDefinitions.map(({
120
+ id
121
+ }) => {
122
+ if (totalValue === 0) {
123
+ return 0;
124
+ }
125
+ const itemValue = data[id];
126
+ if (typeof itemValue !== 'number') return 0;
127
+ return itemValue / totalValue * availableSpace;
128
+ });
129
+ const result = dataDefinitions.map((dd, index) => ({
130
+ ...dd,
131
+ value: data[dd.id],
132
+ dataWidth: dataDefinitionsItemSize[index],
133
+ visualWidth: dataDefinitionsItemSize[index],
134
+ isMinVisible: false
135
+ }));
136
+ const smallItems = result.filter(r => {
137
+ const {
138
+ value,
139
+ dataWidth
140
+ } = r;
141
+ if (typeof value !== 'number') return false;
142
+ return value > 0 && dataWidth < minimalBarWidth;
143
+ });
144
+ if (smallItems.length === 0) return result;
145
+ let extraNeeded = 0;
146
+ for (const smallItem of smallItems) {
147
+ extraNeeded += minimalBarWidth - smallItem.dataWidth;
148
+ smallItem.visualWidth = minimalBarWidth;
149
+ smallItem.isMinVisible = true;
150
+ }
151
+ const donors = result.filter(r => !r.isMinVisible && r.dataWidth > minimalBarWidth);
152
+ const donorCapacity = donors.reduce((s, d) => s + (d.dataWidth - minimalBarWidth), 0);
153
+ for (const donor of donors) {
154
+ const available = donor.dataWidth - minimalBarWidth;
155
+ const share = available / donorCapacity;
156
+ const taken = share * extraNeeded;
157
+ donor.visualWidth = donor.dataWidth - taken;
158
+ }
159
+ return result;
160
+ }
51
161
  get xScale() {
52
162
  const {
53
- invertAxis
163
+ plotWidth
54
164
  } = this.asProps;
55
- return invertAxis ? this.valueScale : this.categoryScale;
165
+ return (0, _d3Scale.scaleLinear)([0, plotWidth]);
56
166
  }
57
167
  get yScale() {
58
168
  const {
59
- invertAxis
169
+ plotHeight
60
170
  } = this.asProps;
61
- return invertAxis ? this.categoryScale : this.valueScale;
171
+ return (0, _d3Scale.scaleLinear)([plotHeight, 0]);
62
172
  }
63
173
  renderChart() {
64
174
  const {
@@ -76,18 +186,25 @@ class CigaretteChartComponent extends _AbstractChart.AbstractChart {
76
186
  highlightedLine
77
187
  } = this.state;
78
188
  this.offset = 0;
79
- return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, (invertAxis ? dataDefinitions : [...dataDefinitions].reverse()).map((item, index) => {
80
- const value = data[item.id];
81
- if (!item.checked || value === _utils.interpolateValue || value === null) {
189
+ const items = this.computeCigaretteItems();
190
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, items.map((item, index) => {
191
+ const {
192
+ visualWidth,
193
+ id
194
+ } = item;
195
+ const value = data[id];
196
+ if (value === _utils.interpolateValue || value === null) {
82
197
  return null;
83
198
  }
84
- const absWidth = Math.abs(this.valueScale(value) - Math.max(this.valueScale(this.valueScale.domain()[0]), this.valueScale(0)));
85
- const height = (0, _utils.scaleToBand)(this.categoryScale).bandwidth() - 4;
86
- const width = value === 0 ? 0 : Math.max(absWidth, wMin * 2) - wMin;
87
- const y = 2;
88
- const x = index === 0 ? 0 : this.offset;
199
+ const height = invertAxis ? plotHeight - DEFAULT_GAP * 2 : plotWidth - DEFAULT_GAP * 2;
200
+ const width = visualWidth;
201
+ const y = DEFAULT_GAP;
202
+ const x = this.offset;
89
203
  const r = height < 28 ? 2 : 4;
90
- this.offset = this.offset + width + wMin;
204
+ this.offset += visualWidth;
205
+ if (index < items.length - 1) {
206
+ this.offset += DEFAULT_GAP;
207
+ }
91
208
  return /*#__PURE__*/_react.default.createElement(_Cigarette.default, {
92
209
  key: item.id,
93
210
  dataKey: item.id,
@@ -128,7 +245,9 @@ class CigaretteChartComponent extends _AbstractChart.AbstractChart {
128
245
  showTooltip
129
246
  } = this.asProps;
130
247
  const {
131
- dataDefinitions
248
+ dataDefinitions,
249
+ pX,
250
+ pY
132
251
  } = this.state;
133
252
  const STooltipChildrenWrapper = _baseComponents.Box;
134
253
  if (!showTooltip) {
@@ -138,16 +257,20 @@ class CigaretteChartComponent extends _AbstractChart.AbstractChart {
138
257
  x: invertAxis ? '' : undefined,
139
258
  y: invertAxis ? undefined : '',
140
259
  wMin: 100,
141
- hideHoverLine: true
260
+ hideHoverLine: true,
261
+ xIndex: pX !== null ? this.visualScale(pX) : undefined,
262
+ yIndex: pY !== null ? this.visualScale(pY) : undefined
142
263
  }, tooltipProps => {
143
264
  var _ref4;
144
265
  const dataKey = invertAxis ? tooltipProps.xIndex : tooltipProps.yIndex;
145
- const showPercentColumn = showPercentValueInTooltip && this.totalValue(data) !== 0;
266
+ const showPercentColumn = showPercentValueInTooltip && this.totalValue() !== 0;
146
267
  if (tooltipViewType === 'single') {
147
268
  var _ref3;
148
269
  const item = dataDefinitions.find(dataDefItem => dataDefItem.id === dataKey);
149
270
  if (!item) {
150
- return null;
271
+ return {
272
+ children: null
273
+ };
151
274
  }
152
275
  return {
153
276
  children: (_ref3 = (0, _core.sstyled)(styles), /*#__PURE__*/_react.default.createElement(STooltipChildrenWrapper, _ref3.cn("STooltipChildrenWrapper", {
@@ -206,7 +329,7 @@ class CigaretteChartComponent extends _AbstractChart.AbstractChart {
206
329
  if (!showTotalInTooltip) {
207
330
  return null;
208
331
  }
209
- const total = this.totalValue(dataItem);
332
+ const total = this.totalValue();
210
333
  return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_baseComponents.Box, {
211
334
  mt: 2,
212
335
  mr: 2
@@ -248,13 +371,16 @@ class CigaretteChartComponent extends _AbstractChart.AbstractChart {
248
371
  }), /*#__PURE__*/_react.default.createElement(_baseComponents.Flex, _ref5.cn("Flex", {
249
372
  "direction": 'column'
250
373
  }), header, /*#__PURE__*/_react.default.createElement(_.Plot, _ref5.cn("Plot", {
374
+ "ref": this.plotRef,
251
375
  "data": data,
252
376
  "scale": [this.xScale, this.yScale],
253
377
  "width": plotWidth,
254
378
  "height": plotHeight,
255
379
  "dataHints": this.dataHints,
256
380
  "patterns": patterns,
257
- "a11yAltTextConfig": a11yAltTextConfig
381
+ "a11yAltTextConfig": a11yAltTextConfig,
382
+ "onMouseMove": this.onPlotMouseMove,
383
+ "onMouseLeave": this.onPlotMouseLeave
258
384
  }), this.renderTooltip(), this.renderChart())), this.renderLegend());
259
385
  }
260
386
  return _ref6 = (0, _core.sstyled)(styles), /*#__PURE__*/_react.default.createElement(SChart, _ref6.cn("SChart", {
@@ -263,13 +389,16 @@ class CigaretteChartComponent extends _AbstractChart.AbstractChart {
263
389
  "__excludeProps": ['onClick', 'data']
264
390
  }, _ref2)
265
391
  }), /*#__PURE__*/_react.default.createElement(_.Plot, _ref6.cn("Plot", {
392
+ "ref": this.plotRef,
266
393
  "data": data,
267
394
  "scale": [this.xScale, this.yScale],
268
395
  "width": plotWidth,
269
396
  "height": plotHeight,
270
397
  "dataHints": this.dataHints,
271
398
  "patterns": patterns,
272
- "a11yAltTextConfig": a11yAltTextConfig
399
+ "a11yAltTextConfig": a11yAltTextConfig,
400
+ "onMouseMove": this.onPlotMouseMove,
401
+ "onMouseLeave": this.onPlotMouseLeave
273
402
  }), this.renderTooltip(), this.renderChart()), /*#__PURE__*/_react.default.createElement(_baseComponents.Flex, _ref6.cn("Flex", {
274
403
  "direction": 'column',
275
404
  "gap": 2
@@ -280,42 +409,36 @@ class CigaretteChartComponent extends _AbstractChart.AbstractChart {
280
409
  chartType: 'Cigarette'
281
410
  });
282
411
  }
283
- get selectedData() {
284
- const {
285
- data
286
- } = this.asProps;
412
+ get visualScale() {
413
+ const cigaretteItems = this.computeCigaretteItems();
287
414
  const {
288
- dataDefinitions
289
- } = this.state;
290
- const result = new Map();
291
- dataDefinitions.forEach(dataDefItem => {
292
- const value = data[dataDefItem.id];
293
- if (dataDefItem.checked && value !== _utils.interpolateValue) {
294
- result.set(dataDefItem.id, value);
415
+ range,
416
+ domain
417
+ } = cigaretteItems.reduce((acc, {
418
+ id,
419
+ visualWidth
420
+ }, index) => {
421
+ const {
422
+ range,
423
+ domain
424
+ } = acc;
425
+ if (visualWidth) {
426
+ range.push(id);
427
+ if (domain.length === 0) {
428
+ domain.push(visualWidth + DEFAULT_GAP);
429
+ return acc;
430
+ }
431
+ if (index !== cigaretteItems.length - 1) {
432
+ const lastAddedDomain = domain[domain.length - 1];
433
+ domain.push(lastAddedDomain + visualWidth + DEFAULT_GAP);
434
+ }
295
435
  }
436
+ return acc;
437
+ }, {
438
+ range: [],
439
+ domain: []
296
440
  });
297
- return result;
298
- }
299
- get categoryScale() {
300
- const {
301
- plotWidth,
302
- plotHeight,
303
- invertAxis
304
- } = this.asProps;
305
- const range = invertAxis ? [plotHeight, 0] : [0, plotWidth];
306
- return (0, _d3Scale.scaleBand)([0], range);
307
- }
308
- get valueScale() {
309
- const {
310
- plotWidth,
311
- plotHeight,
312
- invertAxis
313
- } = this.asProps;
314
- let max = 0;
315
- this.selectedData.forEach(value => {
316
- max = max + value;
317
- });
318
- return (0, _d3Scale.scaleLinear)().range(invertAxis ? [0, plotWidth] : [plotHeight, 0]).domain([0, max]);
441
+ return (0, _d3Scale.scaleThreshold)(domain, range);
319
442
  }
320
443
  }
321
444
  (0, _defineProperty2.default)(CigaretteChartComponent, "displayName", 'Cigarette.Bar');
@@ -332,7 +455,8 @@ class CigaretteChartComponent extends _AbstractChart.AbstractChart {
332
455
  duration: 500,
333
456
  plotWidth: !invertAxis && !props.plotWidth ? 44 : props.plotWidth,
334
457
  plotHeight: invertAxis && !props.plotHeight ? 28 : props.plotHeight,
335
- showPercentValueInTooltip: false
458
+ showPercentValueInTooltip: false,
459
+ minimalBarWidth: DEFAULT_MINIMAL_BAR_WIDTH
336
460
  };
337
461
  });
338
462
  (0, _defineProperty2.default)(CigaretteChartComponent, "enhance", [(0, _resolveColorEnhance.default)(), (0, _uniqueID.default)(), (0, _i18nEnhance.default)(_intergalacticDynamicLocales.localizedMessages)]);