@milaboratories/miplots4 1.0.134 → 1.0.135
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/dist/{discrete/components → common}/BandAxis.d.ts +2 -2
- package/dist/common/BandAxis.d.ts.map +1 -0
- package/dist/{discrete/components → common}/BandAxis.js +3 -3
- package/dist/common/BandAxis.js.map +1 -0
- package/dist/common/ContinuousGrid.d.ts +3 -3
- package/dist/common/ContinuousGrid.d.ts.map +1 -1
- package/dist/common/ContinuousGrid.js.map +1 -1
- package/dist/discrete/ChartRenderer.d.ts.map +1 -1
- package/dist/discrete/ChartRenderer.js +192 -265
- package/dist/discrete/ChartRenderer.js.map +1 -1
- package/dist/discrete/components/Chart.js +1 -1
- package/dist/discrete/components/Chart.js.map +1 -1
- package/dist/discrete/components/Grid.d.ts +3 -3
- package/dist/discrete/components/Grid.d.ts.map +1 -1
- package/dist/discrete/components/Grid.js.map +1 -1
- package/dist/discrete/components/types.d.ts +5 -3
- package/dist/discrete/components/types.d.ts.map +1 -1
- package/dist/discrete/utils/index.d.ts +1 -1
- package/dist/discrete/utils/index.d.ts.map +1 -1
- package/dist/histogram/ChartRenderer.js +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/node_modules/d3-scale/src/band.js +45 -35
- package/dist/node_modules/d3-scale/src/band.js.map +1 -1
- package/dist/scatterplot/ChartRenderer.d.ts +10 -5
- package/dist/scatterplot/ChartRenderer.d.ts.map +1 -1
- package/dist/scatterplot/ChartRenderer.js +276 -197
- package/dist/scatterplot/ChartRenderer.js.map +1 -1
- package/dist/scatterplot/ScatterplotSettingsImpl.d.ts +5 -3
- package/dist/scatterplot/ScatterplotSettingsImpl.d.ts.map +1 -1
- package/dist/scatterplot/ScatterplotSettingsImpl.js +53 -53
- package/dist/scatterplot/ScatterplotSettingsImpl.js.map +1 -1
- package/dist/scatterplot/components/Chart.d.ts +3 -1
- package/dist/scatterplot/components/Chart.d.ts.map +1 -1
- package/dist/scatterplot/components/Chart.js +23 -19
- package/dist/scatterplot/components/Chart.js.map +1 -1
- package/dist/scatterplot/components/ChartAxis.d.ts +3 -1
- package/dist/scatterplot/components/ChartAxis.d.ts.map +1 -1
- package/dist/scatterplot/components/ChartAxis.js +31 -27
- package/dist/scatterplot/components/ChartAxis.js.map +1 -1
- package/dist/scatterplot/components/ChartLayersData.d.ts.map +1 -1
- package/dist/scatterplot/components/ChartLayersData.js.map +1 -1
- package/dist/scatterplot/components/ChartTooltip.js.map +1 -1
- package/dist/scatterplot/components/ChartTrendsData.d.ts.map +1 -1
- package/dist/scatterplot/components/ChartTrendsData.js +20 -17
- package/dist/scatterplot/components/ChartTrendsData.js.map +1 -1
- package/dist/scatterplot/components/ChartsGroup.d.ts +5 -1
- package/dist/scatterplot/components/ChartsGroup.d.ts.map +1 -1
- package/dist/scatterplot/components/ChartsGroup.js +49 -46
- package/dist/scatterplot/components/ChartsGroup.js.map +1 -1
- package/dist/scatterplot/components/Grid.d.ts +3 -3
- package/dist/scatterplot/components/Grid.d.ts.map +1 -1
- package/dist/scatterplot/components/Grid.js +31 -27
- package/dist/scatterplot/components/Grid.js.map +1 -1
- package/dist/scatterplot/components/types.d.ts +15 -5
- package/dist/scatterplot/components/types.d.ts.map +1 -1
- package/dist/scatterplot/dots.d.ts +2 -2
- package/dist/scatterplot/dots.d.ts.map +1 -1
- package/dist/scatterplot/dots.js.map +1 -1
- package/dist/scatterplot/getLayersData.d.ts +3 -2
- package/dist/scatterplot/getLayersData.d.ts.map +1 -1
- package/dist/scatterplot/getLayersData.js +29 -18
- package/dist/scatterplot/getLayersData.js.map +1 -1
- package/dist/scatterplot/index.d.ts +3 -0
- package/dist/scatterplot/index.d.ts.map +1 -1
- package/dist/scatterplot/index.js +73 -59
- package/dist/scatterplot/index.js.map +1 -1
- package/dist/scatterplot/linearRegression.d.ts +4 -6
- package/dist/scatterplot/linearRegression.d.ts.map +1 -1
- package/dist/scatterplot/linearRegression.js.map +1 -1
- package/dist/scatterplot/utils/isNumericScale.d.ts +6 -0
- package/dist/scatterplot/utils/isNumericScale.d.ts.map +1 -0
- package/dist/scatterplot/utils/isNumericScale.js +11 -0
- package/dist/scatterplot/utils/isNumericScale.js.map +1 -0
- package/dist/scatterplot-umap/ChartRenderer.js +1 -1
- package/dist/scatterplot-umap/ChartRenderer.js.map +1 -1
- package/dist/scatterplot-umap/SettingsImpl.d.ts +7 -4
- package/dist/scatterplot-umap/SettingsImpl.d.ts.map +1 -1
- package/dist/scatterplot-umap/SettingsImpl.js.map +1 -1
- package/dist/scatterplot-umap/components/LowerSVG.js +7 -7
- package/dist/scatterplot-umap/components/LowerSVG.js.map +1 -1
- package/dist/types/bubble.d.ts +12 -12
- package/dist/types/common.d.ts +186 -21
- package/dist/types/common.d.ts.map +1 -1
- package/dist/types/common.js +36 -26
- package/dist/types/common.js.map +1 -1
- package/dist/types/dendro.d.ts +22 -22
- package/dist/types/discrete.d.ts +23 -53
- package/dist/types/discrete.d.ts.map +1 -1
- package/dist/types/discrete.js +35 -35
- package/dist/types/discrete.js.map +1 -1
- package/dist/types/heatmap.d.ts +12 -12
- package/dist/types/histogram.d.ts +4 -4
- package/dist/types/scatterplot-umap.d.ts +4 -34
- package/dist/types/scatterplot-umap.d.ts.map +1 -1
- package/dist/types/scatterplot-umap.js +1 -1
- package/dist/types/scatterplot-umap.js.map +1 -1
- package/dist/types/scatterplot.d.ts +186 -32
- package/dist/types/scatterplot.d.ts.map +1 -1
- package/dist/utils/createMultilineDiscreteLabels.d.ts +4 -0
- package/dist/utils/createMultilineDiscreteLabels.d.ts.map +1 -0
- package/dist/utils/createMultilineDiscreteLabels.js +32 -0
- package/dist/utils/createMultilineDiscreteLabels.js.map +1 -0
- package/dist/utils/getFacetRowsColumns.d.ts +3 -0
- package/dist/utils/getFacetRowsColumns.d.ts.map +1 -0
- package/dist/utils/getFacetRowsColumns.js +18 -0
- package/dist/utils/getFacetRowsColumns.js.map +1 -0
- package/dist/utils/measureMultilineDiscreteLabels.d.ts +9 -0
- package/dist/utils/measureMultilineDiscreteLabels.d.ts.map +1 -0
- package/dist/utils/measureMultilineDiscreteLabels.js +63 -0
- package/dist/utils/measureMultilineDiscreteLabels.js.map +1 -0
- package/dist/utils/splitTextByWidth.d.ts.map +1 -0
- package/dist/{discrete/utils → utils}/splitTextByWidth.js +1 -1
- package/dist/utils/splitTextByWidth.js.map +1 -0
- package/package.json +1 -1
- package/dist/discrete/components/BandAxis.d.ts.map +0 -1
- package/dist/discrete/components/BandAxis.js.map +0 -1
- package/dist/discrete/utils/splitTextByWidth.d.ts.map +0 -1
- package/dist/discrete/utils/splitTextByWidth.js.map +0 -1
- package/dist/scatterplot/components/Axis.d.ts +0 -13
- package/dist/scatterplot/components/Axis.d.ts.map +0 -1
- package/dist/scatterplot/components/Axis.js +0 -59
- package/dist/scatterplot/components/Axis.js.map +0 -1
- /package/dist/{discrete/utils → utils}/splitTextByWidth.d.ts +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChartRenderer.js","sources":["../../src/scatterplot/ChartRenderer.tsx"],"sourcesContent":["import type { ScaleLinear } from 'd3-scale';\nimport { scaleLinear, scaleLog, scaleOrdinal, scaleSqrt, scaleSymlog } from 'd3-scale';\nimport type { ReactElement } from 'react';\nimport type { Root } from 'react-dom/client';\nimport { createRoot } from 'react-dom/client';\nimport { Error } from '../common/Error';\nimport type { DotAesItem, LegendData, LegendItem } from '../common/types';\nimport { DataFrameProvider } from '../common/useDataFrame';\nimport {\n BLACK,\n DEFAULT_HEIGHT,\n DEFAULT_WIDTH,\n MAX_SHOWN_UNIQUE_VALUES_IN_LABELS,\n TITLE_LINE_HEIGHT,\n TITLE_MARGIN,\n} from '../constants';\nimport type { DataFrame } from '../DataFrame';\nimport { FACET_TITLE_LINE } from '../discrete/constants';\nimport { splitTextByWidth } from '../discrete/utils';\nimport type { ColumnName, PointShape, ScatterplotLegendInfo } from '../types';\nimport { isContinuousAes } from '../types';\nimport { arrangeLegendParts } from '../utils/arrangeLegendParts';\nimport { getContinuousColorScale } from '../utils/getContinuousColorScale';\nimport { getContinuousLegendTicks } from '../utils/getContinuousLegendTicks';\nimport { TextMeasurer } from '../utils/TextMeasurer/TextMeasurer';\nimport { ChartsGroup } from './components/ChartsGroup';\nimport type { AesGetters, CaptionsSizes, ChartDimensionsData, ChartSizes, ChartsScales, Margins } from './components/types';\nimport {\n DEFAULT_DOT_AES,\n DEFAULT_TICKS_SIZE,\n FACET_AXIS_OFFSET,\n FACET_TITLE_OFFSET,\n LEGEND_OFFSET,\n MIN_MARGIN,\n MIN_PADDING,\n PADDINGS,\n TICK_OFFSET,\n TITLE_LINE,\n} from './constants';\nimport type { GroupedDots } from './dots';\nimport type { ScatterplotLayerData } from './getLayersData';\nimport type { TrendsData } from './linearRegression';\nimport type { CurveLayer, DotsLayer, ScatterplotLayer, ScatterplotSettingsImpl } from './ScatterplotSettingsImpl';\nimport { createAesGetter } from './utils/createAesGetter';\nimport { getTicksAndFormat } from './utils/getTicksAndFormat';\n\nfunction getChartEdgeSides(index: number, facetsCount: number, columnsCount: number, rowsCount: number) {\n const chartSides: ('left' | 'right' | 'top' | 'bottom')[] = [];\n if (index % columnsCount === columnsCount - 1) {\n chartSides.push('right');\n }\n if (index % columnsCount === 0) {\n chartSides.push('left');\n }\n if (index < columnsCount) {\n chartSides.push('top');\n }\n if (\n Math.ceil((index + 1) / columnsCount) === rowsCount ||\n (Math.ceil((index + 1) / columnsCount) === rowsCount - 1 &&\n index % columnsCount > (facetsCount - 1) % columnsCount)\n ) {\n chartSides.push('bottom');\n }\n return chartSides;\n}\n\nfunction calculatePaddings(\n xAxis: ScatterplotSettingsImpl['chartSettings']['xAxis'],\n yAxis: ScatterplotSettingsImpl['chartSettings']['yAxis'],\n captionsSizes: CaptionsSizes,\n currentRowFacetKeys: string[],\n facetTitles: Record<string, string[]>,\n chartEdgeSides: ('left' | 'right' | 'top' | 'bottom')[],\n facetSettings?: ScatterplotSettingsImpl['facetSettings']\n) {\n const needLeftAxis = chartEdgeSides.includes('left') || !facetSettings?.sharedY;\n const needLeftAxisTitle = chartEdgeSides.includes('left') && yAxis.title !== '';\n const needBottomAxis = chartEdgeSides.includes('bottom') || !facetSettings?.sharedX;\n const needBottomAxisTitle = chartEdgeSides.includes('bottom') && xAxis.title !== '';\n\n const yCaptions = captionsSizes.yAxisCaptionsWidth + 2 * TICK_OFFSET;\n const yTicks = (yAxis.showTicks ? DEFAULT_TICKS_SIZE : 0) + TICK_OFFSET;\n const yAxisTitle = needLeftAxisTitle ? TITLE_LINE + MIN_PADDING : 0;\n\n const xCaptions = captionsSizes.xAxisCaptionsWidth + 2 * TICK_OFFSET;\n const xTicks = xAxis.showTicks ? DEFAULT_TICKS_SIZE : 0;\n const xAxisTitle = needBottomAxisTitle ? TITLE_LINE + MIN_PADDING : 0;\n\n const leftAxisElements = yCaptions + yTicks + yAxisTitle + FACET_AXIS_OFFSET;\n const bottomAxisElements = xCaptions + xTicks + xAxisTitle + FACET_AXIS_OFFSET;\n\n const facetTitlesLinesCount = Math.max(...currentRowFacetKeys.map(key => facetTitles[key].length));\n return {\n left: needLeftAxis ? leftAxisElements : MIN_PADDING,\n top: facetTitlesLinesCount === 0 ? 0 : FACET_TITLE_OFFSET * 2 + facetTitlesLinesCount * FACET_TITLE_LINE,\n bottom: needBottomAxis ? bottomAxisElements + 8 : MIN_PADDING,\n right: MIN_PADDING,\n };\n}\n\n// facet keys grouped by rows\nfunction getFacetRows(facetKeys: string[], nRows: number, nColumns: number): string[][] {\n const result: string[][] = [];\n for (let i = 0; i < nRows; i++) {\n result.push(facetKeys.slice(i * nColumns, i * nColumns + nColumns));\n }\n return result;\n}\n\nfunction getRowColumn(idx: number, columnsCount: number) {\n const row = Math.floor(idx / columnsCount);\n const column = idx - row * columnsCount;\n return [row, column];\n}\n\nfunction createAesGetters(\n dataFrame: DataFrame,\n legendInfo: ScatterplotLegendInfo,\n layers: ScatterplotLayer[],\n trend: ScatterplotSettingsImpl['trend']\n): AesGetters {\n const dotLayer = layers.find(l => l.type === 'dots') as DotsLayer | undefined;\n const curveLayer = layers.find(l => l.type === 'curve') as CurveLayer | undefined;\n\n return {\n dotShape: createAesGetter(dataFrame, legendInfo, dotLayer?.aes.dotShape ?? DEFAULT_DOT_AES.shape,'dotShape'),\n dotColor: createAesGetter(dataFrame, legendInfo, dotLayer?.aes.dotFill ?? DEFAULT_DOT_AES.color, 'dotFill'),\n dotSize: createAesGetter(dataFrame, legendInfo, dotLayer?.aes.dotSize ?? DEFAULT_DOT_AES.size, 'dotSize'),\n lineShape: createAesGetter(dataFrame, legendInfo, curveLayer?.aes.lineShape ?? 'solid', 'lineShape'),\n lineColor: createAesGetter(dataFrame, legendInfo, curveLayer?.aes.lineColor ?? BLACK, 'lineColor'),\n trendColor: createAesGetter(dataFrame, legendInfo, trend?.color ?? DEFAULT_DOT_AES.color, 'fillColor')\n };\n}\n\nclass ChartRenderer {\n reactRoot: Root | null = null;\n parentNode: HTMLElement | null = null;\n rootNode: HTMLElement | null = null;\n component: ReactElement = (<></>);\n margins: Margins = {\n top: MIN_MARGIN,\n bottom: MIN_MARGIN,\n left: MIN_MARGIN,\n right: MIN_MARGIN,\n };\n chartsDimensions: Record<string, ChartDimensionsData> = {};\n chartSizes: ChartSizes = {\n chartWidth: DEFAULT_WIDTH, // width of single chart\n chartHeight: DEFAULT_HEIGHT, // height of single chart\n chartsWidth: DEFAULT_WIDTH, // width of all charts in charts row\n chartsHeight: DEFAULT_HEIGHT, // width of all charts in charts column, without axes\n totalWidth: DEFAULT_WIDTH, // width of all charts in charts row, plus left axis, plus legend\n totalHeight: DEFAULT_HEIGHT, // width of all charts in charts height, plus bottom axis, plus top title\n };\n columnsCount = 1;\n rowsCount = 1;\n scales: ChartsScales = {\n x: {null: scaleLinear().domain([0, 10]).range([0, DEFAULT_WIDTH])},\n y: {null: scaleLinear().domain([0, 10]).range([DEFAULT_HEIGHT, 0])},\n };\n captionsSizes: CaptionsSizes = {\n xAxisCaptionsWidth: 30,\n yAxisCaptionsWidth: 100,\n };\n facetTitles: Record<string, string[]> = {}; // can be multiline\n mainTitle: string[] = []; // can be multiline\n legend: LegendData = {width: 0, height: 0, items: []};\n\n clear() {\n if (this.parentNode && this.rootNode) {\n this.parentNode?.removeChild(this.rootNode);\n this.parentNode = null;\n this.rootNode = null;\n }\n // timeout to avoid trying to unmount during rendering\n setTimeout(() => {\n this.reactRoot?.unmount();\n this.reactRoot = null;\n });\n }\n\n init(node: HTMLElement) {\n if (this.parentNode === null) {\n this.parentNode = node;\n this.rootNode = document.createElement('div');\n this.parentNode.appendChild(this.rootNode);\n this.reactRoot = createRoot(this.rootNode);\n }\n }\n\n updateChartSizes(size: ScatterplotSettingsImpl['chartSettings']['size']) {\n this.chartSizes.chartWidth = size.width;\n this.chartSizes.chartHeight = size.height;\n }\n\n updateChartDimensions(\n facetKeys: string[],\n facetSettings: ScatterplotSettingsImpl['facetSettings'],\n xAxis: ScatterplotSettingsImpl['chartSettings']['xAxis'],\n yAxis: ScatterplotSettingsImpl['chartSettings']['yAxis']\n ) {\n const {chartWidth, chartHeight} = this.chartSizes;\n let currentLeft = 0;\n let currentTop = 0;\n this.chartsDimensions = facetKeys.reduce((res: Record<string, ChartDimensionsData>, key: string, index) => {\n const [currentRow, currentColumn] = getRowColumn(index, this.columnsCount);\n const chartEdgeSides = getChartEdgeSides(index, facetKeys.length, this.columnsCount, this.rowsCount);\n const padding = calculatePaddings(\n xAxis,\n yAxis,\n this.captionsSizes,\n getFacetRows(facetKeys, this.rowsCount, this.columnsCount)[currentRow],\n this.facetTitles,\n chartEdgeSides,\n facetSettings\n );\n\n const outerWidth = chartWidth + padding.left + padding.right;\n const outerHeight = chartHeight + padding.top + padding.bottom;\n res[key] = {\n left: currentLeft,\n top: currentTop,\n chartEdgeSides,\n padding,\n inner: {width: chartWidth, height: chartHeight},\n outer: {width: outerWidth, height: outerHeight},\n };\n currentLeft += outerWidth;\n if (currentColumn === this.columnsCount - 1) {\n currentLeft = 0;\n currentTop += outerHeight;\n }\n return res;\n }, {});\n\n const chartsWidth = Math.max(\n ...facetKeys.map(key => this.chartsDimensions[key].outer.width + this.chartsDimensions[key].left)\n );\n const chartsHeight = Math.max(\n ...facetKeys.map(key => this.chartsDimensions[key].outer.height + this.chartsDimensions[key].top)\n );\n this.chartSizes.chartsWidth = chartsWidth;\n this.chartSizes.chartsHeight = chartsHeight;\n }\n\n updateViewport(\n facetKeys: string[],\n facetSettings: ScatterplotSettingsImpl['facetSettings'],\n xAxis: ScatterplotSettingsImpl['chartSettings']['xAxis'],\n yAxis: ScatterplotSettingsImpl['chartSettings']['yAxis'],\n groupedDots: GroupedDots,\n trendsData: TrendsData | null\n ) {\n const facetCount = facetKeys.length;\n const maxNRows = Math.min(facetSettings.nRows ?? facetCount, facetCount);\n const maxNCols = Math.min(facetSettings.nCols ?? facetCount, facetCount);\n // Use columns/rows count from settings if some of them defined, else make 1 column\n this.columnsCount = facetSettings.nRows ? Math.ceil(facetCount / maxNRows) : maxNCols;\n this.rowsCount = Math.ceil(facetCount / this.columnsCount);\n\n let [minXAll, maxXAll] = [Infinity, -Infinity];\n let [minYAll, maxYAll] = [Infinity, -Infinity];\n const dotExtentsByKeys = facetKeys.reduce((res: Record<string, Record<string, number>>, key) => {\n const dotsData = groupedDots[key];\n const {minX, minY, maxX, maxY} = dotsData;\n minXAll = Math.min(minXAll, minX);\n minYAll = Math.min(minYAll, minY);\n maxXAll = Math.max(maxXAll, maxX);\n maxYAll = Math.max(maxYAll, maxY);\n res[key] = {minX, maxX, minY, maxY};\n return res;\n }, {});\n\n const newScalesX:ChartsScales['x'] = {};\n const newScalesY:ChartsScales['y'] = {};\n\n let needsUpdateXScales = false;\n let needsUpdateYScales = false;\n facetKeys.forEach(key => {\n const scaleX = xAxis.scale === 'log' ? scaleLog() : scaleLinear();\n\n const extents = dotExtentsByKeys[key];\n let minX = xAxis.lowerValue ? Number(xAxis.lowerValue) : facetSettings.sharedX ? minXAll : extents.minX;\n let maxX = xAxis.upperValue ? Number(xAxis.upperValue) : facetSettings.sharedX ? maxXAll : extents.maxX;\n\n if (typeof xAxis.symmetricRange !== 'undefined') {\n const middle = xAxis.symmetricRange;\n if (middle >= minX && middle <= maxX) {\n const halfRange = Math.max(middle - minX, maxX - middle);\n minX = middle - halfRange;\n maxX = middle + halfRange;\n }\n }\n\n const rangeH = [0, this.chartSizes.chartWidth];\n // supporting scale, it needs to add offsets of fixed size in pixels to general scale Y\n const tempX = scaleX\n .copy()\n .domain([minX, maxX])\n .range([PADDINGS.LEFT, this.chartSizes.chartWidth - PADDINGS.RIGHT]);\n scaleX\n .domain([tempX.invert(0), tempX.invert(this.chartSizes.chartWidth)])\n .range(rangeH)\n .nice();\n const prevScale = this.scales.x[key];\n if (prevScale === undefined) {\n needsUpdateXScales = true;\n } else if (!needsUpdateXScales) {\n const domain = prevScale.domain();\n const range = prevScale.range();\n if (\n domain[0] !== scaleX.domain()[0] || domain[1] !== scaleX.domain()[1]\n || range[0] !== scaleX.range()[0] || range[1] !== scaleX.range()[1]\n ) {\n needsUpdateXScales = true;\n }\n }\n newScalesX[key] = scaleX;\n });\n // for right Y viewport bounds we must know X bounds, to calculate trends area Y bounds\n const trendYBoundsByKeys = facetKeys.reduce((res: Record<string, Record<string, number>>, key) => {\n const trendsList = trendsData ? trendsData[key] : [];\n res[key] = trendsList.reduce(\n (res, trend) => {\n const xBounds = trend.bounded ? trend.xBounds : this.scales.x[key].domain();\n const i1 = trend.getInterval(xBounds[0]);\n const i2 = trend.getInterval(xBounds[1]);\n res.minY = Math.min(res.minY, isNaN(i1.left) ? res.minY : i1.left, isNaN(i2.left) ? res.minY : i2.left);\n res.maxY = Math.max(res.maxY, isNaN(i1.right) ? res.maxY : i1.right, isNaN(i2.right) ? res.maxY : i2.right);\n return res;\n },\n {minY: Infinity, maxY: -Infinity}\n );\n minYAll = Math.min(minYAll, res[key].minY);\n maxYAll = Math.max(maxYAll, res[key].maxY);\n return res;\n }, {});\n facetKeys.forEach(key => {\n const scaleY = yAxis.scale === 'log' ? scaleLog() : scaleLinear();\n\n const dotExtents = dotExtentsByKeys[key];\n const trendExtents = trendYBoundsByKeys[key];\n let minY = yAxis.lowerValue ? Number(yAxis.lowerValue) : facetSettings.sharedY ? minYAll : Math.min(dotExtents.minY, trendExtents.minY);\n let maxY = yAxis.upperValue ? Number(yAxis.upperValue) : facetSettings.sharedY ? maxYAll : Math.max(dotExtents.maxY, trendExtents.maxY);\n\n if (typeof yAxis.symmetricRange !== 'undefined') {\n const middle = yAxis.symmetricRange;\n if (middle >= minY && middle <= maxY) {\n const halfRange = Math.max(middle - minY, maxY - middle);\n minY = middle - halfRange;\n maxY = middle + halfRange;\n }\n }\n\n const rangeV = [this.chartSizes.chartHeight, 0];\n // supporting scale, it needs to add offsets of fixed size in pixels to general scale Y\n const tempY = scaleY\n .copy()\n .domain([minY, maxY])\n .range([this.chartSizes.chartHeight - PADDINGS.BOTTOM, PADDINGS.TOP]);\n scaleY\n .domain([tempY.invert(this.chartSizes.chartHeight), tempY.invert(0)])\n .range(rangeV)\n .nice();\n\n const prevScale = this.scales.y[key];\n if (prevScale === undefined) {\n needsUpdateYScales = true;\n } else if (!needsUpdateYScales) {\n const domain = prevScale.domain();\n const range = prevScale.range();\n if (\n domain[0] !== scaleY.domain()[0] || domain[1] !== scaleY.domain()[1]\n || range[0] !== scaleY.range()[0] || range[1] !== scaleY.range()[1]\n ) {\n needsUpdateYScales = true;\n }\n }\n newScalesY[key] = scaleY;\n });\n\n if (needsUpdateXScales) {\n this.scales.x = newScalesX;\n }\n if (needsUpdateYScales) {\n this.scales.y = newScalesY;\n }\n }\n\n updateCaptionsSize(onlyPositive: boolean) {\n const textMeasurer = new TextMeasurer('600 14px Arial');\n\n let maxYTick = 0;\n\n function getMaxTickWidth(ticks: string[]) {\n return Math.max(...ticks.map(key => textMeasurer.getTextWidth(key)));\n }\n\n Object.values(this.scales.y).forEach(scale => {\n const {ticks, format} = getTicksAndFormat(scale, onlyPositive);\n maxYTick = Math.max(maxYTick, getMaxTickWidth(ticks.map(format)));\n });\n this.captionsSizes = {\n xAxisCaptionsWidth: 20,\n yAxisCaptionsWidth: maxYTick,\n };\n }\n\n createMainTitle(facetKeys: string[], title: ScatterplotSettingsImpl['chartSettings']['title']) {\n const firstChart = this.chartsDimensions[facetKeys[0]];\n const lastChart = this.chartsDimensions[facetKeys[facetKeys.length - 1]];\n\n this.mainTitle = splitTextByWidth(\n title.name,\n this.chartSizes.chartsWidth - firstChart.padding.left - lastChart.padding.right,\n 20\n );\n }\n\n createFacetTitles(facetKeys: string[], facetLabels: string[][]) {\n this.facetTitles = facetKeys.reduce((res: Record<string, string[]>, key, idx) => {\n if (facetLabels[idx].length === 1 && facetLabels[idx][0] === 'null') {\n res[key] = [];\n } else {\n res[key] = splitTextByWidth(facetLabels[idx].join(', '), this.chartSizes.chartWidth, 14);\n }\n return res;\n }, {});\n }\n\n updateMargins() {\n const titleTextHeight = TITLE_LINE_HEIGHT * this.mainTitle.length;\n const titleHeight = titleTextHeight > 0 ? titleTextHeight + TITLE_MARGIN * 2 : 0;\n this.margins = {\n top: Math.max(titleHeight, MIN_MARGIN),\n bottom: MIN_MARGIN,\n left: MIN_MARGIN,\n right: this.legend.width + MIN_MARGIN,\n };\n this.chartSizes.totalWidth = this.margins.left + this.chartSizes.chartsWidth + this.margins.right;\n this.chartSizes.totalHeight =\n this.margins.top + Math.max(this.chartSizes.chartsHeight, this.legend.height) + this.margins.bottom;\n }\n\n updateLegendSize(\n legend: ScatterplotSettingsImpl['chartSettings']['legend'],\n legendInfo: ScatterplotLegendInfo,\n grouping: ColumnName[],\n layers: ScatterplotLayer[]\n ) {\n if (!legend.show) {\n this.legend = {width: 0, height: 0, items: []};\n return;\n }\n\n const legendItems: LegendItem[] = [];\n const emptySizes = {width:0, height:0, left:0, top: 0};\n\n grouping.forEach(column => {\n const info = legendInfo[column.value];\n if (info.usedAes.length === 0 || !info.aesMap) {\n return;\n }\n if (info.values.length > MAX_SHOWN_UNIQUE_VALUES_IN_LABELS) {\n console.warn(`Too many values for discrete legend (${info.values.length})`);\n return;\n }\n const aesData: Record<string, DotAesItem> = {};\n info.values.forEach(columnValue => {\n if (!aesData[columnValue]) {\n aesData[columnValue] = {...DEFAULT_DOT_AES} as DotAesItem;\n }\n info.usedAes.forEach(key => {\n if (key === 'dotFill' || key === 'lineColor') {\n aesData[columnValue].color = (info.aesMap(columnValue, key) ?? BLACK) as string;\n }\n if (key === 'dotShape') {\n aesData[columnValue].shape = (info.aesMap(columnValue,key) ?? '21') as PointShape;\n }\n if (key === 'dotSize') {\n aesData[columnValue].size = (info.aesMap(columnValue,key) ?? 3) as number;\n }\n });\n });\n\n const title = column.label ?? column.value;\n const scale = scaleOrdinal<DotAesItem>()\n .domain(info.values)\n .range(info.values.map(value => aesData[value]))\n .unknown(DEFAULT_DOT_AES);\n legendItems.push({...emptySizes, id: column.value, type: 'dots', title, scale, values:info.values, labels:info.labels});\n });\n\n layers.forEach(layer => {\n if (layer.type === 'dots' && isContinuousAes(layer.aes.dotFill)) {\n const {domain, range, columnName, type = 'linear'} = layer.aes.dotFill;\n const title = columnName.label ?? columnName.value;\n const colorScale = getContinuousColorScale(range, domain, 'linear') as ScaleLinear<string, string>; // always linear for legend - scale to render gradient, not for dots\n const tickPositionScale = (type === 'log' ? scaleSymlog<string, string>() : scaleLinear<string, string>())\n .domain(domain)\n // @ts-ignore\n .range([this.chartSizes.chartHeight, 0]);\n const values = getContinuousLegendTicks(tickPositionScale, domain as [number, number]);\n legendItems.push({...emptySizes, id: 'dotFill', type: 'continuous', title, scale: colorScale, tickPositionScale, values});\n }\n if (layer.type === 'dots' && isContinuousAes(layer.aes.dotSize)) {\n const {columnName, domain, range} = layer.aes.dotSize;\n const title = columnName.label ?? columnName.value;\n const scale = scaleSqrt(domain, range);\n const values = scale.ticks(3);\n const format = scale.tickFormat(3);\n const labels = values.reduce((res: Record<string, string>, v) => {\n res[String(v)] = format(v);\n return res;\n }, {});\n legendItems.push({...emptySizes, id: columnName.value, type: 'size', title, scale, values, labels});\n }\n });\n\n if (!legendItems.length) {\n this.legend = {width: 0, height: 0, items: []};\n return;\n }\n\n const items = arrangeLegendParts(legendItems, this.chartSizes.chartHeight);\n\n const lastItem = items[items.length - 1];\n const legendWidth = lastItem.left + lastItem.width + LEGEND_OFFSET;\n const legendHeight = this.chartSizes.chartHeight;\n\n this.legend = {\n width: legendWidth,\n height: legendHeight,\n items,\n };\n }\n\n render(\n dataFrame: DataFrame,\n settingsId: string,\n chartSettings: ScatterplotSettingsImpl['chartSettings'],\n facetSettings: ScatterplotSettingsImpl['facetSettings'],\n facetKeys: string[],\n facetLabels: string[][],\n groupedDots: GroupedDots,\n trendsData: TrendsData | null,\n keyColumn: ColumnName,\n onlyPositive: {x: boolean; y: boolean},\n legendInfo: ScatterplotLegendInfo,\n layersData: Record<string, ScatterplotLayerData[]>,\n grouping: ColumnName[],\n layers: ScatterplotLayer[],\n trend: ScatterplotSettingsImpl['trend'],\n onTooltipHintSwitch: (v:boolean) => void\n ) {\n const {xAxis, yAxis, size, title, legend} = chartSettings;\n this.updateChartSizes(size);\n this.updateViewport(facetKeys, facetSettings, xAxis, yAxis, groupedDots, trendsData);\n this.updateCaptionsSize(onlyPositive.y);\n this.createFacetTitles(facetKeys, facetLabels);\n this.updateChartDimensions(facetKeys, facetSettings, xAxis, yAxis);\n this.updateLegendSize(legend, legendInfo, grouping, layers);\n this.createMainTitle(facetKeys, title);\n this.updateMargins();\n const component = (\n <DataFrameProvider dataFrame={dataFrame}>\n <ChartsGroup\n settingsId={settingsId}\n chartSettings={chartSettings}\n facetKeys={facetKeys}\n facetSettings={facetSettings}\n chartSizes={this.chartSizes}\n chartsDimensions={this.chartsDimensions}\n scales={this.scales}\n groupedDots={groupedDots}\n trendsData={trendsData}\n legendData={this.legend}\n columnsCount={this.columnsCount}\n margins={this.margins}\n keyColumn={keyColumn}\n mainTitle={this.mainTitle}\n facetTitles={this.facetTitles}\n captionsSizes={this.captionsSizes}\n onlyPositive={onlyPositive}\n layersData={layersData}\n aesGetters={createAesGetters(dataFrame, legendInfo, layers, trend)}\n onTooltipHintSwitch={onTooltipHintSwitch}\n />\n </DataFrameProvider>\n );\n this.component = component;\n this.reactRoot?.render(component);\n }\n\n renderError(message: string) {\n this.reactRoot?.render(<Error message={message} />);\n }\n}\n\nexport default ChartRenderer;\n"],"names":["getChartEdgeSides","index","facetsCount","columnsCount","rowsCount","chartSides","calculatePaddings","xAxis","yAxis","captionsSizes","currentRowFacetKeys","facetTitles","chartEdgeSides","facetSettings","needLeftAxis","needLeftAxisTitle","needBottomAxis","needBottomAxisTitle","yCaptions","TICK_OFFSET","yTicks","DEFAULT_TICKS_SIZE","yAxisTitle","TITLE_LINE","MIN_PADDING","xCaptions","xTicks","xAxisTitle","leftAxisElements","FACET_AXIS_OFFSET","bottomAxisElements","facetTitlesLinesCount","key","FACET_TITLE_OFFSET","FACET_TITLE_LINE","getFacetRows","facetKeys","nRows","nColumns","result","i","getRowColumn","idx","row","column","createAesGetters","dataFrame","legendInfo","layers","trend","dotLayer","l","curveLayer","createAesGetter","DEFAULT_DOT_AES","BLACK","ChartRenderer","__publicField","jsx","Fragment","MIN_MARGIN","DEFAULT_WIDTH","DEFAULT_HEIGHT","scaleLinear","_a","node","createRoot","size","chartWidth","chartHeight","currentLeft","currentTop","res","currentRow","currentColumn","padding","outerWidth","outerHeight","chartsWidth","chartsHeight","groupedDots","trendsData","facetCount","maxNRows","maxNCols","minXAll","maxXAll","minYAll","maxYAll","dotExtentsByKeys","dotsData","minX","minY","maxX","maxY","newScalesX","newScalesY","needsUpdateXScales","needsUpdateYScales","scaleX","scaleLog","extents","middle","halfRange","rangeH","tempX","PADDINGS","prevScale","domain","range","trendYBoundsByKeys","trendsList","xBounds","i1","i2","scaleY","dotExtents","trendExtents","rangeV","tempY","onlyPositive","textMeasurer","TextMeasurer","maxYTick","getMaxTickWidth","ticks","scale","format","getTicksAndFormat","title","firstChart","lastChart","splitTextByWidth","facetLabels","titleTextHeight","TITLE_LINE_HEIGHT","titleHeight","TITLE_MARGIN","legend","grouping","legendItems","emptySizes","info","MAX_SHOWN_UNIQUE_VALUES_IN_LABELS","aesData","columnValue","scaleOrdinal","value","layer","isContinuousAes","columnName","type","colorScale","getContinuousColorScale","tickPositionScale","scaleSymlog","values","getContinuousLegendTicks","scaleSqrt","labels","v","items","arrangeLegendParts","lastItem","legendWidth","LEGEND_OFFSET","legendHeight","settingsId","chartSettings","keyColumn","layersData","onTooltipHintSwitch","component","DataFrameProvider","ChartsGroup","message","Error"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ChartRenderer.js","sources":["../../src/scatterplot/ChartRenderer.tsx"],"sourcesContent":["import type { ScaleLinear } from 'd3-scale';\nimport { scaleLinear, scaleLog, scaleOrdinal, scalePoint, scaleSqrt, scaleSymlog } from 'd3-scale';\nimport type { ReactElement } from 'react';\nimport type { Root } from 'react-dom/client';\nimport { createRoot } from 'react-dom/client';\nimport { Error } from '../common/Error';\nimport type { DotAesItem, LegendData, LegendItem } from '../common/types';\nimport { DataFrameProvider } from '../common/useDataFrame';\nimport {\n BLACK,\n DEFAULT_HEIGHT,\n DEFAULT_WIDTH,\n MAX_SHOWN_UNIQUE_VALUES_IN_LABELS,\n TITLE_LINE_HEIGHT,\n TITLE_MARGIN,\n} from '../constants';\nimport type { DataFrame } from '../DataFrame';\nimport { FACET_TITLE_LINE } from '../discrete/constants';\nimport { splitTextByWidth } from '../discrete/utils';\nimport type { AxisSettingsDiscrete, ColumnName, PointShape, ScatterplotLegendInfo } from '../types';\nimport { isContinuousAes } from '../types';\nimport { arrangeLegendParts } from '../utils/arrangeLegendParts';\nimport { getContinuousColorScale } from '../utils/getContinuousColorScale';\nimport { getContinuousLegendTicks } from '../utils/getContinuousLegendTicks';\nimport { TextMeasurer } from '../utils/TextMeasurer/TextMeasurer';\nimport { ChartsGroup } from './components/ChartsGroup';\nimport type { AesGetters, CaptionsSizes, ChartDimensionsData, ChartScales, ChartSizes, ChartsScales, DiscreteAxisData, DiscreteScale, Margins } from './components/types';\nimport {\n DEFAULT_DOT_AES,\n DEFAULT_TICKS_SIZE,\n FACET_AXIS_OFFSET,\n FACET_TITLE_OFFSET,\n LEGEND_OFFSET,\n MIN_MARGIN,\n MIN_PADDING,\n PADDINGS,\n TICK_OFFSET,\n TITLE_LINE,\n} from './constants';\nimport type { GroupedDots } from './dots';\nimport type { ScatterplotLayerData } from './getLayersData';\nimport type { TrendsData } from './linearRegression';\nimport type { CurveLayer, DotsLayer, ScatterplotLayer, ScatterplotSettingsImpl } from './ScatterplotSettingsImpl';\nimport { createAesGetter } from './utils/createAesGetter';\nimport { getTicksAndFormat } from './utils/getTicksAndFormat';\nimport { isContinuousAxis, isNumericScale } from './utils/isNumericScale';\nimport { createMultilineDiscreteLabels } from '../utils/createMultilineDiscreteLabels';\nimport { measureMultilineDiscreteLabels } from '../utils/measureMultilineDiscreteLabels';\n\nfunction scalesAreDifferent(prevScale:ChartScales['x'|'y'], currentScale:ChartScales['x'|'y']):boolean {\n if (prevScale === undefined) {\n return true;\n } else {\n const domain = prevScale.domain();\n const range = prevScale.range();\n const newDomain = currentScale.domain();\n const newRange = currentScale.range();\n if (\n domain.length !== newDomain.length ||\n domain.some((v, idx) => v !== newDomain[idx]) ||\n range[0] !== newRange[0] || range[1] !== newRange[1]\n ) {\n return true;\n }\n }\n return false;\n}\nfunction getChartEdgeSides(index: number, facetsCount: number, columnsCount: number, rowsCount: number) {\n const chartSides: ('left' | 'right' | 'top' | 'bottom')[] = [];\n if (index % columnsCount === columnsCount - 1) {\n chartSides.push('right');\n }\n if (index % columnsCount === 0) {\n chartSides.push('left');\n }\n if (index < columnsCount) {\n chartSides.push('top');\n }\n if (\n Math.ceil((index + 1) / columnsCount) === rowsCount ||\n (Math.ceil((index + 1) / columnsCount) === rowsCount - 1 &&\n index % columnsCount > (facetsCount - 1) % columnsCount)\n ) {\n chartSides.push('bottom');\n }\n return chartSides;\n}\n\nfunction calculatePaddings(\n xAxis: ScatterplotSettingsImpl['chartSettings']['xAxis'],\n yAxis: ScatterplotSettingsImpl['chartSettings']['yAxis'],\n captionsSizes: CaptionsSizes,\n currentRowFacetKeys: string[],\n facetTitles: Record<string, string[]>,\n chartEdgeSides: ('left' | 'right' | 'top' | 'bottom')[],\n currentRow: number,\n currentColumn: number,\n lastInRow: boolean,\n facetSettings?: ScatterplotSettingsImpl['facetSettings'],\n) {\n const discreteX = xAxis.scale === 'discrete';\n const discreteY = yAxis.scale === 'discrete';\n\n const needLeftAxis = chartEdgeSides.includes('left') || !facetSettings?.sharedY;\n const needLeftAxisTitle = chartEdgeSides.includes('left') && yAxis.title !== '';\n const needBottomAxis = chartEdgeSides.includes('bottom') || !facetSettings?.sharedX;\n const needBottomAxisTitle = chartEdgeSides.includes('bottom') && xAxis.title !== '';\n\n const yCaptions = discreteY ? captionsSizes.leftAxisCaptionsWidthByColumns[currentColumn] : captionsSizes.yAxisCaptionsWidth + 2 * TICK_OFFSET;\n const yTicks = (yAxis.showTicks ? DEFAULT_TICKS_SIZE : 0) + TICK_OFFSET;\n const yAxisTitle = needLeftAxisTitle ? TITLE_LINE + MIN_PADDING : 0;\n\n const xCaptions = discreteX ? captionsSizes.bottomAxisCaptionsWidthByRows[currentRow] : captionsSizes.xAxisCaptionsWidth + 2 * TICK_OFFSET;\n const xTicks = xAxis.showTicks ? DEFAULT_TICKS_SIZE : 0;\n const xAxisTitle = needBottomAxisTitle ? TITLE_LINE + MIN_PADDING : 0;\n\n const leftAxisElements = yCaptions + yTicks + yAxisTitle + FACET_AXIS_OFFSET;\n const bottomAxisElements = xCaptions + xTicks + xAxisTitle + FACET_AXIS_OFFSET;\n\n const facetTitlesLinesCount = Math.max(...currentRowFacetKeys.map(key => facetTitles[key].length));\n return {\n left: needLeftAxis ? leftAxisElements : MIN_PADDING,\n top: facetTitlesLinesCount === 0 ? 0 : FACET_TITLE_OFFSET * 2 + facetTitlesLinesCount * FACET_TITLE_LINE,\n bottom: needBottomAxis ? bottomAxisElements + 8 : MIN_PADDING,\n right: lastInRow ? 0 : MIN_PADDING,\n };\n}\n\n// facet keys grouped by rows\nfunction getFacetRows(facetKeys: string[], nRows: number, nColumns: number): string[][] {\n const result: string[][] = [];\n for (let i = 0; i < nRows; i++) {\n result.push(facetKeys.slice(i * nColumns, i * nColumns + nColumns));\n }\n return result;\n}\n\nfunction getRowColumn(idx: number, columnsCount: number) {\n const row = Math.floor(idx / columnsCount);\n const column = idx - row * columnsCount;\n return [row, column];\n}\n\nfunction createAesGetters(\n dataFrame: DataFrame,\n legendInfo: ScatterplotLegendInfo,\n layers: ScatterplotLayer[],\n trend: ScatterplotSettingsImpl['trend']\n): AesGetters {\n const dotLayer = layers.find(l => l.type === 'dots') as DotsLayer | undefined;\n const curveLayer = layers.find(l => l.type === 'curve') as CurveLayer | undefined;\n\n return {\n dotShape: createAesGetter(dataFrame, legendInfo, dotLayer?.aes.dotShape ?? DEFAULT_DOT_AES.shape,'dotShape'),\n dotColor: createAesGetter(dataFrame, legendInfo, dotLayer?.aes.dotFill ?? DEFAULT_DOT_AES.color, 'dotFill'),\n dotSize: createAesGetter(dataFrame, legendInfo, dotLayer?.aes.dotSize ?? DEFAULT_DOT_AES.size, 'dotSize'),\n lineShape: createAesGetter(dataFrame, legendInfo, curveLayer?.aes.lineShape ?? 'solid', 'lineShape'),\n lineColor: createAesGetter(dataFrame, legendInfo, curveLayer?.aes.lineColor ?? BLACK, 'lineColor'),\n trendColor: createAesGetter(dataFrame, legendInfo, trend?.color ?? DEFAULT_DOT_AES.color, 'fillColor')\n };\n}\n\nconst COS_PI_4 = Math.cos(Math.PI / 4);\nconst INCLINE_OFFSET = 5; // height of little triangle of text for captions inclined 45deg\n\nfunction getCaptionHeight (size: number, axis: ScatterplotSettingsImpl['chartSettings']['xAxis' | 'yAxis']) {\n if (axis.scale === 'discrete') {\n if (axis.labelsPosition === '90deg') {\n return size;\n }\n if (axis.labelsPosition === '45deg') {\n return size * COS_PI_4 + (size > 0 ? 2 * INCLINE_OFFSET : 0) ;\n }\n return TITLE_LINE;\n }\n return size;\n}\n\nclass ChartRenderer {\n reactRoot: Root | null = null;\n parentNode: HTMLElement | null = null;\n rootNode: HTMLElement | null = null;\n component: ReactElement = (<></>);\n margins: Margins = {\n top: MIN_MARGIN,\n bottom: MIN_MARGIN,\n left: MIN_MARGIN,\n right: MIN_MARGIN,\n };\n chartsDimensions: Record<string, ChartDimensionsData> = {};\n chartSizes: ChartSizes = {\n chartWidth: DEFAULT_WIDTH, // width of single chart\n chartHeight: DEFAULT_HEIGHT, // height of single chart\n chartsWidth: DEFAULT_WIDTH, // width of all charts in charts row\n chartsHeight: DEFAULT_HEIGHT, // width of all charts in charts column, without axes\n totalWidth: DEFAULT_WIDTH, // width of all charts in charts row, plus left axis, plus legend\n totalHeight: DEFAULT_HEIGHT, // width of all charts in charts height, plus bottom axis, plus top title\n };\n columnsCount = 1;\n rowsCount = 1;\n scales: ChartsScales = {\n x: {null: scaleLinear().domain([0, 1]).range([0, DEFAULT_WIDTH])},\n y: {null: scaleLinear().domain([0, 1]).range([DEFAULT_HEIGHT, 0])},\n };\n captionsSizes: CaptionsSizes = {\n xAxisCaptionsWidth: 30,\n yAxisCaptionsWidth: 100,\n bottomAxisCaptionsWidthByRows: [],\n leftAxisCaptionsWidthByColumns: [],\n bottomCaptionsTail: 0,\n leftCaptionsTail: 0,\n };\n facetTitles: Record<string, string[]> = {}; // can be multiline\n mainTitle: string[] = []; // can be multiline\n discreteAxesLabels: {\n x: Record<string, Record<string, string[]>>,\n y: Record<string, Record<string, string[]>>\n } = {x: {}, y: {}}; // only for discrete axes, by facets, can be multiline\n\n legend: LegendData = {width: 0, height: 0, items: []};\n\n clear() {\n if (this.parentNode && this.rootNode) {\n this.parentNode?.removeChild(this.rootNode);\n this.parentNode = null;\n this.rootNode = null;\n }\n // timeout to avoid trying to unmount during rendering\n setTimeout(() => {\n this.reactRoot?.unmount();\n this.reactRoot = null;\n });\n }\n\n init(node: HTMLElement) {\n if (this.parentNode === null) {\n this.parentNode = node;\n this.rootNode = document.createElement('div');\n this.parentNode.appendChild(this.rootNode);\n this.reactRoot = createRoot(this.rootNode);\n }\n }\n\n updateChartSizes(size: ScatterplotSettingsImpl['chartSettings']['size']) {\n this.chartSizes.chartWidth = size.width;\n this.chartSizes.chartHeight = size.height;\n }\n\n updateChartDimensions(\n facetKeys: string[],\n facetSettings: ScatterplotSettingsImpl['facetSettings'],\n xAxis: ScatterplotSettingsImpl['chartSettings']['xAxis'],\n yAxis: ScatterplotSettingsImpl['chartSettings']['yAxis']\n ) {\n const {chartWidth, chartHeight} = this.chartSizes;\n let currentLeft = 0;\n let currentTop = 0;\n const facetRows = getFacetRows(facetKeys, this.rowsCount, this.columnsCount);\n this.chartsDimensions = facetKeys.reduce((res: Record<string, ChartDimensionsData>, key: string, index) => {\n const [currentRow, currentColumn] = getRowColumn(index, this.columnsCount);\n const chartEdgeSides = getChartEdgeSides(index, facetKeys.length, this.columnsCount, this.rowsCount);\n const padding = calculatePaddings(\n xAxis,\n yAxis,\n this.captionsSizes,\n facetRows[currentRow],\n this.facetTitles,\n chartEdgeSides,\n currentRow,\n currentColumn,\n currentColumn === this.columnsCount - 1,\n facetSettings\n );\n\n const outerWidth = chartWidth + padding.left + padding.right;\n const outerHeight = chartHeight + padding.top + padding.bottom;\n res[key] = {\n left: currentLeft,\n top: currentTop,\n chartEdgeSides,\n padding,\n inner: {width: chartWidth, height: chartHeight},\n outer: {width: outerWidth, height: outerHeight},\n };\n currentLeft += outerWidth;\n if (currentColumn === this.columnsCount - 1) {\n currentLeft = 0;\n currentTop += outerHeight;\n }\n return res;\n }, {});\n\n const chartsWidth = Math.max(\n ...facetKeys.map(key => this.chartsDimensions[key].outer.width + this.chartsDimensions[key].left)\n );\n const chartsHeight = Math.max(\n ...facetKeys.map(key => this.chartsDimensions[key].outer.height + this.chartsDimensions[key].top)\n );\n this.chartSizes.chartsWidth = chartsWidth;\n this.chartSizes.chartsHeight = chartsHeight;\n }\n\n updateViewport(\n facetKeys: string[],\n facetSettings: ScatterplotSettingsImpl['facetSettings'],\n xAxis: ScatterplotSettingsImpl['chartSettings']['xAxis'],\n yAxis: ScatterplotSettingsImpl['chartSettings']['yAxis'],\n discreteAxisDataX: DiscreteAxisData,\n discreteAxisDataY: DiscreteAxisData,\n groupedDots: GroupedDots,\n trendsData: TrendsData | null\n ) {\n const facetCount = facetKeys.length;\n const maxNRows = Math.min(facetSettings.nRows ?? facetCount, facetCount);\n const maxNCols = Math.min(facetSettings.nCols ?? facetCount, facetCount);\n // Use columns/rows count from settings if some of them defined, else make 1 column\n this.columnsCount = facetSettings.nRows ? Math.ceil(facetCount / maxNRows) : maxNCols;\n this.rowsCount = Math.ceil(facetCount / this.columnsCount);\n\n let [minXAll, maxXAll] = [Infinity, -Infinity];\n let [minYAll, maxYAll] = [Infinity, -Infinity];\n const dotExtentsByKeys = facetKeys.reduce((res: Record<string, Record<string, number>>, key) => {\n const dotsData = groupedDots[key];\n const {minX, minY, maxX, maxY} = dotsData;\n minXAll = Math.min(minXAll, minX);\n minYAll = Math.min(minYAll, minY);\n maxXAll = Math.max(maxXAll, maxX);\n maxYAll = Math.max(maxYAll, maxY);\n res[key] = {minX, maxX, minY, maxY};\n return res;\n }, {});\n\n const newScalesX:ChartsScales['x'] = {};\n const newScalesY:ChartsScales['y'] = {};\n\n let needsUpdateXScales = false;\n let needsUpdateYScales = false;\n facetKeys.forEach(key => {\n let scaleX: ChartsScales['x'][string];\n if (!isContinuousAxis(xAxis)) {\n scaleX = scalePoint<string | number>()\n .range([0, this.chartSizes.chartWidth])\n .domain(discreteAxisDataX.keys ?? []).padding(0.5);\n\n } else {\n scaleX = xAxis.scale === 'log' ? scaleLog() : scaleLinear();\n const extents = dotExtentsByKeys[key];\n let minX = xAxis.lowerValue ? Number(xAxis.lowerValue) : facetSettings.sharedX ? minXAll : extents.minX;\n let maxX = xAxis.upperValue ? Number(xAxis.upperValue) : facetSettings.sharedX ? maxXAll : extents.maxX;\n\n if (typeof xAxis.symmetricRange !== 'undefined') {\n const middle = xAxis.symmetricRange;\n if (middle >= minX && middle <= maxX) {\n const halfRange = Math.max(middle - minX, maxX - middle);\n minX = middle - halfRange;\n maxX = middle + halfRange;\n }\n }\n\n const rangeH = [0, this.chartSizes.chartWidth];\n // supporting scale, it needs to add offsets of fixed size in pixels to general scale Y\n const tempX = scaleX\n .copy()\n .domain([minX, maxX])\n .range([PADDINGS.LEFT, this.chartSizes.chartWidth - PADDINGS.RIGHT]);\n scaleX\n .domain([tempX.invert(0), tempX.invert(this.chartSizes.chartWidth)])\n .range(rangeH)\n .nice();\n\n }\n const prevScale = this.scales.x[key];\n newScalesX[key] = scaleX;\n needsUpdateXScales = needsUpdateXScales || scalesAreDifferent(prevScale, scaleX);\n });\n // for right Y viewport bounds we must know X bounds, to calculate trends area Y bounds\n const trendYBoundsByKeys = facetKeys.reduce((res: Record<string, Record<string, number>>, key) => {\n const trendsList = trendsData ? trendsData[key] : [];\n res[key] = trendsList.reduce(\n (res, trend) => {\n const xBounds = trend.bounded ? trend.xBounds : this.scales.x[key].domain(); // trends exist only with continuous scales\n const i1 = trend.getInterval(xBounds[0] as number);\n const i2 = trend.getInterval(xBounds[1] as number);\n res.minY = Math.min(res.minY, isNaN(i1.left) ? res.minY : i1.left, isNaN(i2.left) ? res.minY : i2.left);\n res.maxY = Math.max(res.maxY, isNaN(i1.right) ? res.maxY : i1.right, isNaN(i2.right) ? res.maxY : i2.right);\n return res;\n },\n {minY: Infinity, maxY: -Infinity}\n );\n minYAll = Math.min(minYAll, res[key].minY);\n maxYAll = Math.max(maxYAll, res[key].maxY);\n return res;\n }, {});\n facetKeys.forEach(key => {\n let scaleY: ChartsScales['y'][string];\n if (!isContinuousAxis(yAxis)) {\n scaleY = scalePoint<string | number>()\n .range([this.chartSizes.chartHeight, 0])\n .domain(discreteAxisDataY.keys ?? [])\n .padding(0.5);\n } else {\n scaleY = yAxis.scale === 'log' ? scaleLog() : scaleLinear();\n\n const dotExtents = dotExtentsByKeys[key];\n const trendExtents = trendYBoundsByKeys[key];\n let minY = yAxis.lowerValue ? Number(yAxis.lowerValue) : facetSettings.sharedY ? minYAll : Math.min(dotExtents.minY, trendExtents.minY);\n let maxY = yAxis.upperValue ? Number(yAxis.upperValue) : facetSettings.sharedY ? maxYAll : Math.max(dotExtents.maxY, trendExtents.maxY);\n\n if (typeof yAxis.symmetricRange !== 'undefined') {\n const middle = yAxis.symmetricRange;\n if (middle >= minY && middle <= maxY) {\n const halfRange = Math.max(middle - minY, maxY - middle);\n minY = middle - halfRange;\n maxY = middle + halfRange;\n }\n }\n\n const rangeV = [this.chartSizes.chartHeight, 0];\n // supporting scale, it needs to add offsets of fixed size in pixels to general scale Y\n const tempY = scaleY\n .copy()\n .domain([minY, maxY])\n .range([this.chartSizes.chartHeight - PADDINGS.BOTTOM, PADDINGS.TOP]);\n scaleY\n .domain([tempY.invert(this.chartSizes.chartHeight), tempY.invert(0)])\n .range(rangeV)\n .nice();\n }\n const prevScale = this.scales.y[key];\n newScalesY[key] = scaleY;\n needsUpdateYScales = needsUpdateYScales || scalesAreDifferent(prevScale, scaleY);\n });\n\n if (needsUpdateXScales) {\n this.scales.x = newScalesX;\n }\n if (needsUpdateYScales) {\n this.scales.y = newScalesY;\n }\n }\n\n updateCaptionsSize(\n facetKeys: string[],\n xAxis: ScatterplotSettingsImpl['chartSettings']['xAxis'],\n yAxis: ScatterplotSettingsImpl['chartSettings']['yAxis'],\n onlyPositive: boolean\n ) {\n const textMeasurer = new TextMeasurer('600 14px Manrope');\n function getMaxTickWidth(ticks: string[]) {\n return Math.max(...ticks.map(key => textMeasurer.getTextWidth(key)));\n }\n\n let xTail = 0;\n let yTail = 0;\n let xAxisCaptionsWidthByRows:number[] = [];\n let yAxisCaptionsWidthByColumns:number[] = [];\n let maxXLabelSize = 0;\n let maxYLabelSize = 0;\n if (xAxis.scale === 'discrete') {\n const sizes = measureMultilineDiscreteLabels(\n facetKeys,\n this.rowsCount,\n this.columnsCount,\n xAxis.labelsPosition ?? 'center',\n this.discreteAxesLabels.x,\n 'vertical',\n this.scales.x as Record<string, DiscreteScale>,\n );\n xTail = sizes.xTail;\n xAxisCaptionsWidthByRows = sizes.axisCaptionsWidthByRows;\n } else {\n maxXLabelSize = 20;\n }\n\n if (yAxis.scale === 'discrete') {\n const sizes = measureMultilineDiscreteLabels(\n facetKeys,\n this.rowsCount,\n this.columnsCount,\n yAxis.labelsPosition ?? 'center',\n this.discreteAxesLabels.y,\n 'horizontal',\n this.scales.y as Record<string, DiscreteScale>,\n );\n yTail = sizes.yTail;\n yAxisCaptionsWidthByColumns = sizes.axisCaptionsWidthByColumns;\n } else {\n Object.values(this.scales.y).forEach(scale => {\n const {ticks, format} = getTicksAndFormat(scale, onlyPositive);\n maxYLabelSize = Math.max(maxYLabelSize, getMaxTickWidth(ticks.map(format)));\n });\n }\n\n this.captionsSizes = {\n xAxisCaptionsWidth: getCaptionHeight(maxXLabelSize, xAxis),\n yAxisCaptionsWidth: getCaptionHeight(maxYLabelSize, yAxis),\n bottomAxisCaptionsWidthByRows: xAxisCaptionsWidthByRows,\n leftAxisCaptionsWidthByColumns: yAxisCaptionsWidthByColumns,\n bottomCaptionsTail: xTail,\n leftCaptionsTail: yTail\n };\n }\n\n createMainTitle(facetKeys: string[], title: ScatterplotSettingsImpl['chartSettings']['title']) {\n const firstChart = this.chartsDimensions[facetKeys[0]];\n const lastChart = this.chartsDimensions[facetKeys[facetKeys.length - 1]];\n\n this.mainTitle = splitTextByWidth(\n title.name,\n this.chartSizes.chartsWidth - firstChart.padding.left - lastChart.padding.right,\n 20\n );\n }\n\n createFacetTitles(facetKeys: string[], facetLabels: string[][]) {\n this.facetTitles = facetKeys.reduce((res: Record<string, string[]>, key, idx) => {\n if (facetLabels[idx].length === 1 && facetLabels[idx][0] === 'null') {\n res[key] = [];\n } else {\n res[key] = splitTextByWidth(facetLabels[idx].join(', '), this.chartSizes.chartWidth, 14);\n }\n return res;\n }, {});\n }\n\n createAxisLabels(\n facetKeys: string[],\n xAxis: ScatterplotSettingsImpl['chartSettings']['xAxis'],\n yAxis: ScatterplotSettingsImpl['chartSettings']['xAxis'],\n discreteAxisDataX: DiscreteAxisData,\n discreteAxisDataY: DiscreteAxisData,\n ) {\n this.discreteAxesLabels = {\n x: xAxis.scale !== 'discrete' ? {} : createMultilineDiscreteLabels(\n facetKeys,\n (xAxis as AxisSettingsDiscrete)?.labelsPosition ?? 'center',\n discreteAxisDataX.labels,\n false,\n 'vertical',\n this.scales.x as Record<string, DiscreteScale>,\n ),\n y: yAxis.scale !== 'discrete' ? {} : createMultilineDiscreteLabels(\n facetKeys,\n (yAxis as AxisSettingsDiscrete).labelsPosition ?? 'center',\n discreteAxisDataY.labels,\n false,\n 'horizontal',\n this.scales.y as Record<string, DiscreteScale>,\n )\n };\n }\n\n updateMargins(facetKeys: string[]) {\n const titleTextHeight = TITLE_LINE_HEIGHT * this.mainTitle.length;\n const titleHeight = titleTextHeight > 0 ? titleTextHeight + TITLE_MARGIN * 2 : 0;\n const firstChart = this.chartsDimensions[facetKeys[0]];\n const lastChart = this.chartsDimensions[facetKeys[facetKeys.length - 1]];\n this.margins = {\n top: Math.max(titleHeight, MIN_MARGIN),\n bottom: Math.max(MIN_MARGIN, this.captionsSizes.leftCaptionsTail - lastChart.padding.bottom),\n left: Math.max(MIN_MARGIN, this.captionsSizes.bottomCaptionsTail - firstChart.padding.left),\n right: this.legend.width + MIN_MARGIN,\n }; \n this.chartSizes.totalWidth = this.margins.left + this.chartSizes.chartsWidth + this.margins.right;\n this.chartSizes.totalHeight =\n this.margins.top + Math.max(this.chartSizes.chartsHeight, this.legend.height) + this.margins.bottom;\n }\n\n updateLegendSize(\n legend: ScatterplotSettingsImpl['chartSettings']['legend'],\n legendInfo: ScatterplotLegendInfo,\n grouping: ColumnName[],\n layers: ScatterplotLayer[]\n ) {\n if (!legend.show) {\n this.legend = {width: 0, height: 0, items: []};\n return;\n }\n\n const legendItems: LegendItem[] = [];\n const emptySizes = {width:0, height:0, left:0, top: 0};\n\n grouping.forEach(column => {\n const info = legendInfo[column.value];\n if (info.usedAes.length === 0 || !info.aesMap) {\n return;\n }\n if (info.values.length > MAX_SHOWN_UNIQUE_VALUES_IN_LABELS) {\n console.warn(`Too many values for discrete legend (${info.values.length})`);\n return;\n }\n const aesData: Record<string, DotAesItem> = {};\n info.values.forEach(columnValue => {\n if (!aesData[columnValue]) {\n aesData[columnValue] = {...DEFAULT_DOT_AES} as DotAesItem;\n }\n info.usedAes.forEach(key => {\n if (key === 'dotFill' || key === 'lineColor') {\n aesData[columnValue].color = (info.aesMap(columnValue, key) ?? BLACK) as string;\n }\n if (key === 'dotShape') {\n aesData[columnValue].shape = (info.aesMap(columnValue,key) ?? '21') as PointShape;\n }\n if (key === 'dotSize') {\n aesData[columnValue].size = (info.aesMap(columnValue,key) ?? 3) as number;\n }\n });\n });\n\n const title = column.label ?? column.value;\n const scale = scaleOrdinal<DotAesItem>()\n .domain(info.values)\n .range(info.values.map(value => aesData[value]))\n .unknown(DEFAULT_DOT_AES);\n legendItems.push({...emptySizes, id: column.value, type: 'dots', title, scale, values:info.values, labels:info.labels});\n });\n\n layers.forEach(layer => {\n if (layer.type === 'dots' && isContinuousAes(layer.aes.dotFill)) {\n const {domain, range, columnName, type = 'linear'} = layer.aes.dotFill;\n const title = columnName.label ?? columnName.value;\n const colorScale = getContinuousColorScale(range, domain, 'linear') as ScaleLinear<string, string>; // always linear for legend - scale to render gradient, not for dots\n const tickPositionScale = (type === 'log' ? scaleSymlog<string, string>() : scaleLinear<string, string>())\n .domain(domain)\n // @ts-ignore\n .range([this.chartSizes.chartHeight, 0]);\n const values = getContinuousLegendTicks(tickPositionScale, domain as [number, number]);\n legendItems.push({...emptySizes, id: 'dotFill', type: 'continuous', title, scale: colorScale, tickPositionScale, values});\n }\n if (layer.type === 'dots' && isContinuousAes(layer.aes.dotSize)) {\n const {columnName, domain, range} = layer.aes.dotSize;\n const title = columnName.label ?? columnName.value;\n const scale = scaleSqrt(domain, range);\n const values = scale.ticks(3);\n const format = scale.tickFormat(3);\n const labels = values.reduce((res: Record<string, string>, v) => {\n res[String(v)] = format(v);\n return res;\n }, {});\n legendItems.push({...emptySizes, id: columnName.value, type: 'size', title, scale, values, labels});\n }\n });\n\n if (!legendItems.length) {\n this.legend = {width: 0, height: 0, items: []};\n return;\n }\n\n const items = arrangeLegendParts(legendItems, this.chartSizes.chartHeight);\n\n const lastItem = items[items.length - 1];\n const legendWidth = lastItem.left + lastItem.width + LEGEND_OFFSET;\n const legendHeight = this.chartSizes.chartHeight;\n\n this.legend = {\n width: legendWidth,\n height: legendHeight,\n items,\n };\n }\n\n render(\n dataFrame: DataFrame,\n settingsId: string,\n chartSettings: ScatterplotSettingsImpl['chartSettings'],\n facetSettings: ScatterplotSettingsImpl['facetSettings'],\n facetKeys: string[],\n facetLabels: string[][],\n groupedDots: GroupedDots,\n trendsData: TrendsData | null,\n keyColumn: ColumnName,\n onlyPositive: {x: boolean; y: boolean},\n legendInfo: ScatterplotLegendInfo,\n layersData: Record<string, ScatterplotLayerData[]>,\n grouping: ColumnName[],\n layers: ScatterplotLayer[],\n trend: ScatterplotSettingsImpl['trend'],\n discreteAxisDataX: DiscreteAxisData,\n discreteAxisDataY: DiscreteAxisData,\n onTooltipHintSwitch: (v:boolean) => void\n ) {\n const {xAxis, yAxis, size, title, legend} = chartSettings;\n this.updateChartSizes(size);\n this.updateViewport(facetKeys, facetSettings, xAxis, yAxis, discreteAxisDataX, discreteAxisDataY, groupedDots, trendsData);\n this.createAxisLabels(facetKeys, xAxis, yAxis, discreteAxisDataX, discreteAxisDataY);\n this.updateCaptionsSize(facetKeys, xAxis, yAxis, onlyPositive.y);\n this.createFacetTitles(facetKeys, facetLabels);\n this.updateChartDimensions(facetKeys, facetSettings, xAxis, yAxis);\n this.updateLegendSize(legend, legendInfo, grouping, layers);\n this.createMainTitle(facetKeys, title);\n this.updateMargins(facetKeys);\n const component = (\n <DataFrameProvider dataFrame={dataFrame}>\n <ChartsGroup\n settingsId={settingsId}\n chartSettings={chartSettings}\n facetKeys={facetKeys}\n facetSettings={facetSettings}\n chartSizes={this.chartSizes}\n chartsDimensions={this.chartsDimensions}\n scales={this.scales}\n groupedDots={groupedDots}\n trendsData={trendsData}\n legendData={this.legend}\n columnsCount={this.columnsCount}\n margins={this.margins}\n keyColumn={keyColumn}\n mainTitle={this.mainTitle}\n facetTitles={this.facetTitles}\n captionsSizes={this.captionsSizes}\n onlyPositive={onlyPositive}\n layersData={layersData}\n aesGetters={createAesGetters(dataFrame, legendInfo, layers, trend)}\n onTooltipHintSwitch={onTooltipHintSwitch}\n discreteAxesLabels={this.discreteAxesLabels}\n />\n </DataFrameProvider>\n );\n this.component = component;\n this.reactRoot?.render(component);\n }\n\n renderError(message: string) {\n this.reactRoot?.render(<Error message={message} />);\n }\n}\n\nexport default ChartRenderer;\n"],"names":["scalesAreDifferent","prevScale","currentScale","domain","range","newDomain","newRange","v","idx","getChartEdgeSides","index","facetsCount","columnsCount","rowsCount","chartSides","calculatePaddings","xAxis","yAxis","captionsSizes","currentRowFacetKeys","facetTitles","chartEdgeSides","currentRow","currentColumn","lastInRow","facetSettings","discreteX","discreteY","needLeftAxis","needLeftAxisTitle","needBottomAxis","needBottomAxisTitle","yCaptions","TICK_OFFSET","yTicks","DEFAULT_TICKS_SIZE","yAxisTitle","TITLE_LINE","MIN_PADDING","xCaptions","xTicks","xAxisTitle","leftAxisElements","FACET_AXIS_OFFSET","bottomAxisElements","facetTitlesLinesCount","key","FACET_TITLE_OFFSET","FACET_TITLE_LINE","getFacetRows","facetKeys","nRows","nColumns","result","i","getRowColumn","row","column","createAesGetters","dataFrame","legendInfo","layers","trend","dotLayer","l","curveLayer","createAesGetter","DEFAULT_DOT_AES","BLACK","COS_PI_4","INCLINE_OFFSET","getCaptionHeight","size","axis","ChartRenderer","__publicField","jsx","Fragment","MIN_MARGIN","DEFAULT_WIDTH","DEFAULT_HEIGHT","scaleLinear","_a","node","createRoot","chartWidth","chartHeight","currentLeft","currentTop","facetRows","res","padding","outerWidth","outerHeight","chartsWidth","chartsHeight","discreteAxisDataX","discreteAxisDataY","groupedDots","trendsData","facetCount","maxNRows","maxNCols","minXAll","maxXAll","minYAll","maxYAll","dotExtentsByKeys","dotsData","minX","minY","maxX","maxY","newScalesX","newScalesY","needsUpdateXScales","needsUpdateYScales","scaleX","isContinuousAxis","scalePoint","scaleLog","extents","middle","halfRange","rangeH","tempX","PADDINGS","trendYBoundsByKeys","trendsList","xBounds","i1","i2","scaleY","dotExtents","trendExtents","rangeV","tempY","onlyPositive","textMeasurer","TextMeasurer","getMaxTickWidth","ticks","xTail","yTail","xAxisCaptionsWidthByRows","yAxisCaptionsWidthByColumns","maxXLabelSize","maxYLabelSize","sizes","measureMultilineDiscreteLabels","scale","format","getTicksAndFormat","title","firstChart","lastChart","splitTextByWidth","facetLabels","createMultilineDiscreteLabels","titleTextHeight","TITLE_LINE_HEIGHT","titleHeight","TITLE_MARGIN","legend","grouping","legendItems","emptySizes","info","MAX_SHOWN_UNIQUE_VALUES_IN_LABELS","aesData","columnValue","scaleOrdinal","value","layer","isContinuousAes","columnName","type","colorScale","getContinuousColorScale","tickPositionScale","scaleSymlog","values","getContinuousLegendTicks","scaleSqrt","labels","items","arrangeLegendParts","lastItem","legendWidth","LEGEND_OFFSET","legendHeight","settingsId","chartSettings","keyColumn","layersData","onTooltipHintSwitch","component","DataFrameProvider","ChartsGroup","message","Error"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { AxisSettingsContinuous, AxisSettingsDiscrete, ColumnName, ContinuousAesFromColumn, DataValue, FrameType, InheritAesScatterplot, LegendPosition, LineShape, CurveLayer as OuterCurveLayer, DotsLayer as OuterDotsLayer, PointShape, ScatterplotSettings, SettingsInterface, TitlePosition, AesRecord } from '../types';
|
|
2
2
|
export declare class DotsLayer {
|
|
3
3
|
readonly type = "dots";
|
|
4
4
|
readonly aes: {
|
|
@@ -21,9 +21,11 @@ export declare class CurveLayer {
|
|
|
21
21
|
constructor(layer: OuterCurveLayer);
|
|
22
22
|
}
|
|
23
23
|
export type ScatterplotLayer = DotsLayer | CurveLayer;
|
|
24
|
-
export
|
|
24
|
+
export type ScatterplotAxisSettings = AxisSettingsDiscrete & {
|
|
25
25
|
title: string | ColumnName;
|
|
26
|
-
}
|
|
26
|
+
} | AxisSettingsContinuous & {
|
|
27
|
+
title: string | ColumnName;
|
|
28
|
+
};
|
|
27
29
|
export declare class ScatterplotSettingsImpl implements SettingsInterface {
|
|
28
30
|
readonly id: string;
|
|
29
31
|
readonly type = "scatterplot";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ScatterplotSettingsImpl.d.ts","sourceRoot":"","sources":["../../src/scatterplot/ScatterplotSettingsImpl.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACR,
|
|
1
|
+
{"version":3,"file":"ScatterplotSettingsImpl.d.ts","sourceRoot":"","sources":["../../src/scatterplot/ScatterplotSettingsImpl.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
var d = Object.defineProperty;
|
|
2
|
-
var m = (t,
|
|
3
|
-
var
|
|
2
|
+
var m = (t, e, r) => e in t ? d(t, e, { enumerable: !0, configurable: !0, writable: !0, value: r }) : t[e] = r;
|
|
3
|
+
var o = (t, e, r) => m(t, typeof e != "symbol" ? e + "" : e, r);
|
|
4
4
|
import y from "../node_modules/lodash/lodash.js";
|
|
5
|
-
import { DEFAULT_HEIGHT_SMALL as f, DEFAULT_HEIGHT as
|
|
5
|
+
import { DEFAULT_HEIGHT_SMALL as f, DEFAULT_HEIGHT as s, DEFAULT_WIDTH_SMALL as n, DEFAULT_WIDTH as S, BLACK as i } from "../constants.js";
|
|
6
6
|
import "../types/common.js";
|
|
7
7
|
import "../types/discrete.js";
|
|
8
8
|
import { ScatterplotSettingsSchema as x } from "../types/scatterplot.js";
|
|
@@ -10,98 +10,98 @@ import "../types/heatmap.js";
|
|
|
10
10
|
import "../types/dendro.js";
|
|
11
11
|
import "../types/histogram.js";
|
|
12
12
|
import "../types/bubble.js";
|
|
13
|
-
import { exhaustive as
|
|
13
|
+
import { exhaustive as w } from "../utils/index.js";
|
|
14
14
|
class A {
|
|
15
|
-
constructor(
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
dotFill:
|
|
15
|
+
constructor(e) {
|
|
16
|
+
o(this, "type", "dots");
|
|
17
|
+
o(this, "aes", {
|
|
18
|
+
dotFill: i,
|
|
19
19
|
dotShape: "21",
|
|
20
20
|
dotSize: 3,
|
|
21
21
|
opacity: 1
|
|
22
22
|
});
|
|
23
23
|
this.aes = {
|
|
24
24
|
...this.aes,
|
|
25
|
-
...
|
|
25
|
+
...e.aes
|
|
26
26
|
};
|
|
27
27
|
}
|
|
28
28
|
}
|
|
29
29
|
class L {
|
|
30
|
-
constructor(
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
lineColor:
|
|
30
|
+
constructor(e) {
|
|
31
|
+
o(this, "type", "curve");
|
|
32
|
+
o(this, "smoothing");
|
|
33
|
+
o(this, "aes", {
|
|
34
|
+
lineColor: i,
|
|
35
35
|
lineWidth: 1,
|
|
36
36
|
lineShape: "solid",
|
|
37
37
|
opacity: 1
|
|
38
38
|
});
|
|
39
|
-
this.smoothing =
|
|
39
|
+
this.smoothing = e.smoothing ?? !1, this.aes = {
|
|
40
40
|
...this.aes,
|
|
41
|
-
...
|
|
41
|
+
...e.aes
|
|
42
42
|
};
|
|
43
43
|
}
|
|
44
44
|
}
|
|
45
45
|
class F {
|
|
46
|
-
constructor(
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
var
|
|
61
|
-
x.parse(
|
|
46
|
+
constructor(e) {
|
|
47
|
+
o(this, "id");
|
|
48
|
+
o(this, "type", "scatterplot");
|
|
49
|
+
o(this, "keyColumn");
|
|
50
|
+
o(this, "facetSettings");
|
|
51
|
+
o(this, "x");
|
|
52
|
+
o(this, "y");
|
|
53
|
+
o(this, "facetBy");
|
|
54
|
+
o(this, "grouping");
|
|
55
|
+
o(this, "label");
|
|
56
|
+
o(this, "highlight");
|
|
57
|
+
o(this, "chartSettings");
|
|
58
|
+
o(this, "trend");
|
|
59
|
+
o(this, "layers");
|
|
60
|
+
var r, h, a, c, p, u;
|
|
61
|
+
x.parse(e), this.id = y.uniqueId("settings"), this.keyColumn = e.keyColumn, this.facetSettings = { sharedX: !0, sharedY: !0, titlePosition: "left", ...e.facetSettings }, this.x = e.x, this.y = e.y, this.facetBy = e.facetBy ?? [], this.grouping = e.grouping ?? [], this.label = e.label ?? null, this.highlight = e.highlight ?? null, this.chartSettings = {
|
|
62
62
|
size: {
|
|
63
|
-
width: ((
|
|
64
|
-
height: ((
|
|
63
|
+
width: ((r = e == null ? void 0 : e.size) == null ? void 0 : r.width) ?? (this.facetBy.length ? n : S),
|
|
64
|
+
height: ((h = e == null ? void 0 : e.size) == null ? void 0 : h.height) ?? (this.facetBy.length ? f : s)
|
|
65
65
|
},
|
|
66
66
|
title: {
|
|
67
67
|
position: "center",
|
|
68
68
|
show: !0,
|
|
69
|
-
...
|
|
70
|
-
name: ((a =
|
|
69
|
+
...e.title,
|
|
70
|
+
name: ((a = e.title) == null ? void 0 : a.name) ?? "Chart"
|
|
71
71
|
},
|
|
72
72
|
yAxis: {
|
|
73
|
-
title:
|
|
73
|
+
title: e.y.label ?? e.y.value,
|
|
74
74
|
scale: "linear",
|
|
75
75
|
showGrid: !0,
|
|
76
76
|
showTicks: !0,
|
|
77
|
-
...
|
|
77
|
+
...e.yAxis
|
|
78
78
|
},
|
|
79
79
|
xAxis: {
|
|
80
|
-
title:
|
|
80
|
+
title: e.x.label ?? e.x.value,
|
|
81
81
|
scale: "linear",
|
|
82
82
|
showGrid: !0,
|
|
83
83
|
showTicks: !0,
|
|
84
|
-
...
|
|
84
|
+
...e.xAxis
|
|
85
85
|
},
|
|
86
|
-
frame: { type: ((
|
|
86
|
+
frame: { type: ((c = e.frame) == null ? void 0 : c.type) ?? "full" },
|
|
87
87
|
legend: {
|
|
88
88
|
show: !0,
|
|
89
89
|
position: "right",
|
|
90
|
-
...
|
|
90
|
+
...e.legend
|
|
91
91
|
},
|
|
92
92
|
tooltips: {
|
|
93
|
-
...
|
|
94
|
-
show: ((
|
|
93
|
+
...e.tooltips,
|
|
94
|
+
show: ((p = e.tooltips) == null ? void 0 : p.show) !== !1 && (((u = e.tooltips) == null ? void 0 : u.content) ?? []).length > 0
|
|
95
95
|
}
|
|
96
|
-
}, this.trend =
|
|
97
|
-
bounded:
|
|
98
|
-
color:
|
|
99
|
-
} : null, this.layers =
|
|
100
|
-
if (
|
|
101
|
-
return new A(
|
|
102
|
-
if (
|
|
103
|
-
return new L(
|
|
104
|
-
|
|
96
|
+
}, this.trend = e != null && e.trend && this.chartSettings.xAxis.scale !== "discrete" && this.chartSettings.yAxis.scale !== "discrete" ? {
|
|
97
|
+
bounded: e.trend.bounded ?? !1,
|
|
98
|
+
color: e.trend.color ?? i
|
|
99
|
+
} : null, this.layers = e.layers.map((l) => {
|
|
100
|
+
if (l.type === "dots")
|
|
101
|
+
return new A(l);
|
|
102
|
+
if (l.type === "curve")
|
|
103
|
+
return new L(l);
|
|
104
|
+
w(l, "Unknown layer type");
|
|
105
105
|
}).filter(Boolean);
|
|
106
106
|
}
|
|
107
107
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ScatterplotSettingsImpl.js","sources":["../../src/scatterplot/ScatterplotSettingsImpl.ts"],"sourcesContent":["import lodash from 'lodash';\nimport {BLACK, DEFAULT_HEIGHT, DEFAULT_HEIGHT_SMALL, DEFAULT_WIDTH, DEFAULT_WIDTH_SMALL} from '../constants';\nimport type {\n
|
|
1
|
+
{"version":3,"file":"ScatterplotSettingsImpl.js","sources":["../../src/scatterplot/ScatterplotSettingsImpl.ts"],"sourcesContent":["import lodash from 'lodash';\nimport {BLACK, DEFAULT_HEIGHT, DEFAULT_HEIGHT_SMALL, DEFAULT_WIDTH, DEFAULT_WIDTH_SMALL} from '../constants';\nimport type {\n AxisSettingsContinuous,\n AxisSettingsDiscrete,\n ColumnName,\n ContinuousAesFromColumn,\n DataValue,\n FrameType,\n InheritAesScatterplot,\n LegendPosition,\n LineShape,\n CurveLayer as OuterCurveLayer,\n DotsLayer as OuterDotsLayer,\n PointShape,\n ScatterplotSettings,\n SettingsInterface,\n TitlePosition,\n} from '../types';\nimport {type AesRecord, ScatterplotSettingsSchema} from '../types';\nimport {exhaustive} from '../utils';\n\nexport class DotsLayer {\n readonly type = 'dots';\n readonly aes: {\n dotFill: string | InheritAesScatterplot | ContinuousAesFromColumn<string>;\n dotShape: PointShape | InheritAesScatterplot;\n dotSize: number | ContinuousAesFromColumn<number>;\n opacity: number;\n } = {\n dotFill: BLACK,\n dotShape: '21',\n dotSize: 3,\n opacity: 1,\n };\n\n constructor(layer: OuterDotsLayer) {\n this.aes = {\n ...this.aes,\n ...layer.aes,\n };\n }\n}\n\nexport class CurveLayer {\n readonly type = 'curve';\n readonly smoothing: boolean;\n readonly aes: {\n lineColor: string | InheritAesScatterplot | ContinuousAesFromColumn<string>;\n lineWidth: number;\n lineShape: LineShape;\n opacity: number;\n } = {\n lineColor: BLACK,\n lineWidth: 1,\n lineShape: 'solid',\n opacity: 1,\n };\n\n constructor(layer: OuterCurveLayer) {\n this.smoothing = layer.smoothing ?? false;\n this.aes = {\n ...this.aes,\n ...layer.aes,\n };\n }\n}\n\nexport type ScatterplotLayer = DotsLayer | CurveLayer;\n\nexport type ScatterplotAxisSettings =\n AxisSettingsDiscrete & {title: string | ColumnName}\n | AxisSettingsContinuous & {title: string | ColumnName}\n\nexport class ScatterplotSettingsImpl implements SettingsInterface {\n readonly id: string;\n readonly type = 'scatterplot';\n readonly keyColumn: ColumnName;\n readonly facetSettings: {\n sharedX: boolean;\n sharedY: boolean;\n nRows?: number;\n nCols?: number;\n titlePosition: 'left' | 'center' | 'right';\n };\n readonly x: ColumnName;\n readonly y: ColumnName;\n readonly facetBy: ColumnName[];\n readonly grouping: {\n columnName: ColumnName;\n order?: DataValue[];\n inheritedAes?: AesRecord;\n }[];\n readonly label: ColumnName | null;\n readonly highlight: ColumnName | null;\n readonly chartSettings: {\n readonly size: {width: number; height: number};\n readonly title: {name: string; show: boolean; position: TitlePosition};\n readonly yAxis: ScatterplotAxisSettings;\n readonly xAxis: ScatterplotAxisSettings;\n readonly frame: {type: FrameType};\n readonly legend: {show: boolean; position: LegendPosition};\n readonly tooltips: {show: boolean; content?: ColumnName[]};\n };\n\n readonly trend: {\n bounded: boolean;\n color: string | InheritAesScatterplot | ContinuousAesFromColumn<string>;\n } | null;\n\n readonly layers: ScatterplotLayer[];\n\n constructor(settings: ScatterplotSettings) {\n ScatterplotSettingsSchema.parse(settings);\n this.id = lodash.uniqueId('settings');\n this.keyColumn = settings.keyColumn;\n this.facetSettings = {sharedX: true, sharedY: true, titlePosition: 'left', ...settings.facetSettings};\n this.x = settings.x;\n this.y = settings.y;\n this.facetBy = settings.facetBy ?? [];\n this.grouping = settings.grouping ?? [];\n this.label = settings.label ?? null;\n this.highlight = settings.highlight ?? null;\n this.chartSettings = {\n size: {\n width: settings?.size?.width ?? (this.facetBy.length ? DEFAULT_WIDTH_SMALL : DEFAULT_WIDTH),\n height: settings?.size?.height ?? (this.facetBy.length ? DEFAULT_HEIGHT_SMALL : DEFAULT_HEIGHT),\n },\n title: {\n position: 'center',\n show: true,\n ...settings.title,\n name: settings.title?.name ?? 'Chart',\n },\n yAxis: {\n title: settings.y.label ?? settings.y.value,\n scale: 'linear',\n showGrid: true,\n showTicks: true,\n ...settings.yAxis,\n },\n xAxis: {\n title: settings.x.label ?? settings.x.value,\n scale: 'linear',\n showGrid: true,\n showTicks: true,\n ...settings.xAxis,\n },\n frame: {type: settings.frame?.type ?? 'full'},\n legend: {\n show: true,\n position: 'right',\n ...settings.legend,\n },\n tooltips: {\n ...settings.tooltips,\n show: !(settings.tooltips?.show === false) && (settings.tooltips?.content ?? []).length > 0,\n },\n };\n\n this.trend = settings?.trend && this.chartSettings.xAxis.scale !== 'discrete' && this.chartSettings.yAxis.scale !== 'discrete'\n ? {\n bounded: settings.trend.bounded ?? false,\n color: settings.trend.color ?? BLACK,\n }\n : null;\n\n this.layers = settings.layers\n .map(layer => {\n if (layer.type === 'dots') {\n return new DotsLayer(layer);\n }\n if (layer.type === 'curve') {\n return new CurveLayer(layer);\n }\n exhaustive(layer, 'Unknown layer type');\n })\n .filter(Boolean) as ScatterplotLayer[];\n }\n}\n"],"names":["DotsLayer","layer","__publicField","BLACK","CurveLayer","ScatterplotSettingsImpl","settings","ScatterplotSettingsSchema","lodash","_a","DEFAULT_WIDTH_SMALL","DEFAULT_WIDTH","_b","DEFAULT_HEIGHT_SMALL","DEFAULT_HEIGHT","_c","_d","_e","_f","exhaustive"],"mappings":"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"}
|
|
@@ -24,9 +24,11 @@ interface ChartProps {
|
|
|
24
24
|
};
|
|
25
25
|
layersData: ScatterplotLayerData[];
|
|
26
26
|
aesGetters: AesGetters;
|
|
27
|
+
discreteLabelsX: Record<string, string[]>;
|
|
28
|
+
discreteLabelsY: Record<string, string[]>;
|
|
27
29
|
onMouseEnterDot?: (dot: Dot, facetKey: string) => void;
|
|
28
30
|
onMouseLeaveDot?: (dot: Dot, facetKey: string) => void;
|
|
29
31
|
}
|
|
30
|
-
export declare const Chart: import('react').MemoExoticComponent<({ facetKey, width, height, dimensions, scales, xAxis, yAxis, frameType, dotsData, facetSettings, trendsData, captionsSizes, facetTitle, onlyPositive, layersData, aesGetters, onMouseEnterDot, onMouseLeaveDot, }: ChartProps) => import("react/jsx-runtime").JSX.Element>;
|
|
32
|
+
export declare const Chart: import('react').MemoExoticComponent<({ facetKey, width, height, dimensions, scales, xAxis, yAxis, frameType, dotsData, facetSettings, trendsData, captionsSizes, facetTitle, onlyPositive, layersData, aesGetters, discreteLabelsX, discreteLabelsY, onMouseEnterDot, onMouseLeaveDot, }: ChartProps) => import("react/jsx-runtime").JSX.Element>;
|
|
31
33
|
export {};
|
|
32
34
|
//# sourceMappingURL=Chart.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Chart.d.ts","sourceRoot":"","sources":["../../../src/scatterplot/components/Chart.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,OAAO,KAAK,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAChD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAO1E,OAAO,KAAK,EACR,UAAU,EACV,aAAa,EACb,mBAAmB,EACnB,WAAW,EACd,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"Chart.d.ts","sourceRoot":"","sources":["../../../src/scatterplot/components/Chart.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,OAAO,KAAK,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAChD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAO1E,OAAO,KAAK,EACR,UAAU,EACV,aAAa,EACb,mBAAmB,EACnB,WAAW,EACd,MAAM,SAAS,CAAC;AAGjB,UAAU,UAAU;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,mBAAmB,CAAC;IAChC,MAAM,EAAE,WAAW,CAAC;IACpB,KAAK,EAAE,uBAAuB,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,CAAC;IACzD,KAAK,EAAE,uBAAuB,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,CAAC;IACzD,SAAS,EAAE,SAAS,CAAC;IACrB,aAAa,EAAE,uBAAuB,CAAC,eAAe,CAAC,CAAC;IACxD,QAAQ,EAAE,WAAW,CAAC,MAAM,WAAW,CAAC,CAAC;IACzC,UAAU,EAAE,UAAU,CAAC,MAAM,UAAU,CAAC,GAAG,IAAI,CAAC;IAChD,aAAa,EAAE,aAAa,CAAC;IAC7B,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,YAAY,EAAE;QAAC,CAAC,EAAE,OAAO,CAAC;QAAC,CAAC,EAAE,OAAO,CAAA;KAAC,CAAC;IACvC,UAAU,EAAE,oBAAoB,EAAE,CAAC;IACnC,UAAU,EAAE,UAAU,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAC1C,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAC1C,eAAe,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACvD,eAAe,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;CAC1D;AAED,eAAO,MAAM,KAAK,4RAqBf,UAAU,6CAoFX,CAAC"}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { j as r } from "../../node_modules/react/jsx-runtime.js";
|
|
2
|
-
import { r as
|
|
2
|
+
import { r as B } from "../../_virtual/index.js";
|
|
3
3
|
import { useFunction as s } from "../../utils/hooks/useFunction.js";
|
|
4
|
-
import { ChartAxis as
|
|
5
|
-
import { ChartAxisTitles as
|
|
6
|
-
import { ChartFacetTitle as
|
|
7
|
-
import { ChartLayersData as
|
|
8
|
-
import { ChartTrendsData as
|
|
9
|
-
import { Grid as
|
|
10
|
-
const
|
|
4
|
+
import { ChartAxis as E } from "./ChartAxis.js";
|
|
5
|
+
import { ChartAxisTitles as G } from "./ChartAxisTitles.js";
|
|
6
|
+
import { ChartFacetTitle as H } from "./ChartFacetTitle.js";
|
|
7
|
+
import { ChartLayersData as I } from "./ChartLayersData.js";
|
|
8
|
+
import { ChartTrendsData as J } from "./ChartTrendsData.js";
|
|
9
|
+
import { Grid as N } from "./Grid.js";
|
|
10
|
+
const L = B.memo(({
|
|
11
11
|
facetKey: c,
|
|
12
12
|
width: t,
|
|
13
13
|
height: p,
|
|
@@ -24,18 +24,20 @@ const _ = q.memo(({
|
|
|
24
24
|
onlyPositive: $,
|
|
25
25
|
layersData: R,
|
|
26
26
|
aesGetters: u,
|
|
27
|
+
discreteLabelsX: d,
|
|
28
|
+
discreteLabelsY: k,
|
|
27
29
|
onMouseEnterDot: x,
|
|
28
30
|
onMouseLeaveDot: j
|
|
29
31
|
}) => {
|
|
30
|
-
const { padding: g } = m,
|
|
32
|
+
const { padding: g } = m, q = s((l) => {
|
|
31
33
|
x == null || x(l, c);
|
|
32
|
-
}),
|
|
34
|
+
}), z = s((l) => {
|
|
33
35
|
j == null || j(l, c);
|
|
34
36
|
});
|
|
35
37
|
return /* @__PURE__ */ r.jsxs("g", { transform: `translate(${m.left + g.left},${m.top + g.top})`, children: [
|
|
36
38
|
!1,
|
|
37
39
|
/* @__PURE__ */ r.jsx(
|
|
38
|
-
|
|
40
|
+
H,
|
|
39
41
|
{
|
|
40
42
|
width: t,
|
|
41
43
|
dimensions: m,
|
|
@@ -44,7 +46,7 @@ const _ = q.memo(({
|
|
|
44
46
|
}
|
|
45
47
|
),
|
|
46
48
|
/* @__PURE__ */ r.jsx(
|
|
47
|
-
|
|
49
|
+
G,
|
|
48
50
|
{
|
|
49
51
|
debug: !1,
|
|
50
52
|
width: t,
|
|
@@ -56,7 +58,7 @@ const _ = q.memo(({
|
|
|
56
58
|
}
|
|
57
59
|
),
|
|
58
60
|
/* @__PURE__ */ r.jsx(
|
|
59
|
-
|
|
61
|
+
N,
|
|
60
62
|
{
|
|
61
63
|
width: t,
|
|
62
64
|
height: p,
|
|
@@ -68,7 +70,7 @@ const _ = q.memo(({
|
|
|
68
70
|
}
|
|
69
71
|
),
|
|
70
72
|
/* @__PURE__ */ r.jsx(
|
|
71
|
-
|
|
73
|
+
E,
|
|
72
74
|
{
|
|
73
75
|
debug: !1,
|
|
74
76
|
width: t,
|
|
@@ -79,11 +81,13 @@ const _ = q.memo(({
|
|
|
79
81
|
yAxis: o,
|
|
80
82
|
facetSettings: F,
|
|
81
83
|
captionsSizes: X,
|
|
84
|
+
discreteLabelsX: d,
|
|
85
|
+
discreteLabelsY: k,
|
|
82
86
|
onlyPositive: $
|
|
83
87
|
}
|
|
84
88
|
),
|
|
85
89
|
/* @__PURE__ */ r.jsx(
|
|
86
|
-
|
|
90
|
+
J,
|
|
87
91
|
{
|
|
88
92
|
width: t,
|
|
89
93
|
scales: a,
|
|
@@ -92,7 +96,7 @@ const _ = q.memo(({
|
|
|
92
96
|
}
|
|
93
97
|
),
|
|
94
98
|
/* @__PURE__ */ r.jsx(
|
|
95
|
-
|
|
99
|
+
I,
|
|
96
100
|
{
|
|
97
101
|
width: t,
|
|
98
102
|
height: p,
|
|
@@ -100,13 +104,13 @@ const _ = q.memo(({
|
|
|
100
104
|
dotsData: b,
|
|
101
105
|
layersData: R,
|
|
102
106
|
aesGetters: u,
|
|
103
|
-
onMouseEnterDot:
|
|
104
|
-
onMouseLeaveDot:
|
|
107
|
+
onMouseEnterDot: q,
|
|
108
|
+
onMouseLeaveDot: z
|
|
105
109
|
}
|
|
106
110
|
)
|
|
107
111
|
] });
|
|
108
112
|
});
|
|
109
113
|
export {
|
|
110
|
-
|
|
114
|
+
L as Chart
|
|
111
115
|
};
|
|
112
116
|
//# sourceMappingURL=Chart.js.map
|