@milaboratories/graph-maker 1.1.142 → 1.1.143
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/GraphMaker/components/ReorderForm.vue.d.ts +15 -0
- package/dist/GraphMaker/components/ReorderForm.vue.d.ts.map +1 -0
- package/dist/GraphMaker/components/ReorderForm.vue.js +43 -0
- package/dist/GraphMaker/components/ReorderForm.vue.js.map +1 -0
- package/dist/GraphMaker/components/ReorderForm.vue2.js +5 -0
- package/dist/GraphMaker/components/ReorderForm.vue2.js.map +1 -0
- package/dist/GraphMaker/constantsCommon.d.ts +15 -0
- package/dist/GraphMaker/constantsCommon.d.ts.map +1 -1
- package/dist/GraphMaker/constantsCommon.js +11 -8
- package/dist/GraphMaker/constantsCommon.js.map +1 -1
- package/dist/GraphMaker/forms/AxesSettingsForm/DiscreteAxesSettingsForm.vue.js.map +1 -1
- package/dist/GraphMaker/forms/AxesSettingsForm/ScatterplotAxesSettingsForm.vue.d.ts.map +1 -1
- package/dist/GraphMaker/forms/AxesSettingsForm/ScatterplotAxesSettingsForm.vue.js +305 -172
- package/dist/GraphMaker/forms/AxesSettingsForm/ScatterplotAxesSettingsForm.vue.js.map +1 -1
- package/dist/GraphMaker/index.vue.js +33 -33
- package/dist/GraphMaker/index.vue.js.map +1 -1
- package/dist/GraphMaker/utils/createChartSettingsForRender/composeBubbleSettings.d.ts +3 -3
- package/dist/GraphMaker/utils/createChartSettingsForRender/composeBubbleSettings.d.ts.map +1 -1
- package/dist/GraphMaker/utils/createChartSettingsForRender/composeDendroSettings.d.ts +9 -9
- package/dist/GraphMaker/utils/createChartSettingsForRender/composeDendroSettings.d.ts.map +1 -1
- package/dist/GraphMaker/utils/createChartSettingsForRender/composeDiscreteSettings.d.ts +5 -11
- package/dist/GraphMaker/utils/createChartSettingsForRender/composeDiscreteSettings.d.ts.map +1 -1
- package/dist/GraphMaker/utils/createChartSettingsForRender/composeHeatmapSettings.d.ts +3 -3
- package/dist/GraphMaker/utils/createChartSettingsForRender/composeHeatmapSettings.d.ts.map +1 -1
- package/dist/GraphMaker/utils/createChartSettingsForRender/composeHistogramSettings.d.ts +1 -1
- package/dist/GraphMaker/utils/createChartSettingsForRender/composeScatterplotSettings.d.ts +31 -5
- package/dist/GraphMaker/utils/createChartSettingsForRender/composeScatterplotSettings.d.ts.map +1 -1
- package/dist/GraphMaker/utils/createChartSettingsForRender/composeScatterplotSettings.js +56 -53
- package/dist/GraphMaker/utils/createChartSettingsForRender/composeScatterplotSettings.js.map +1 -1
- package/dist/GraphMaker/utils/createChartSettingsForRender/composeScatterplotUmapSettings.d.ts +1 -7
- package/dist/GraphMaker/utils/createChartSettingsForRender/composeScatterplotUmapSettings.d.ts.map +1 -1
- package/dist/GraphMaker/utils/createChartSettingsForRender/composeScatterplotUmapSettings.js +13 -13
- package/dist/GraphMaker/utils/createChartSettingsForRender/composeScatterplotUmapSettings.js.map +1 -1
- package/dist/GraphMaker/utils/createChartSettingsForRender/getAxesDataFromForms.d.ts +6 -4
- package/dist/GraphMaker/utils/createChartSettingsForRender/getAxesDataFromForms.d.ts.map +1 -1
- package/dist/GraphMaker/utils/createChartSettingsForRender/getAxesDataFromForms.js +42 -13
- package/dist/GraphMaker/utils/createChartSettingsForRender/getAxesDataFromForms.js.map +1 -1
- package/dist/GraphMaker/utils/loadUniqueValuesToSave.d.ts.map +1 -1
- package/dist/GraphMaker/utils/loadUniqueValuesToSave.js +48 -44
- package/dist/GraphMaker/utils/loadUniqueValuesToSave.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/{discrete/components → common}/BandAxis.js +3 -3
- package/dist/node_modules/@milaboratories/miplots4/dist/common/BandAxis.js.map +1 -0
- package/dist/node_modules/@milaboratories/miplots4/dist/common/ContinuousGrid.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/dendro/ChartRenderer.js +14 -14
- package/dist/node_modules/@milaboratories/miplots4/dist/discrete/ChartRenderer.js +197 -270
- package/dist/node_modules/@milaboratories/miplots4/dist/discrete/ChartRenderer.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/discrete/DiscreteSettingsImpl.js +9 -9
- package/dist/node_modules/@milaboratories/miplots4/dist/discrete/components/Chart.js +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/discrete/components/Chart.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/discrete/components/Grid.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/discrete/index.js +11 -11
- package/dist/node_modules/@milaboratories/miplots4/dist/histogram/ChartRenderer.js +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-scale/src/band.js +44 -34
- package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-scale/src/band.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/ChartRenderer.js +272 -195
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/ChartRenderer.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/ScatterplotSettingsImpl.js +23 -23
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/ScatterplotSettingsImpl.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/Chart.js +54 -50
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/Chart.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/ChartAxis.js +32 -28
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/ChartAxis.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/ChartLayersData.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/ChartTooltip.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/ChartTrendsData.js +29 -26
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/ChartTrendsData.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/ChartsGroup.js +44 -41
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/ChartsGroup.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/Grid.js +31 -27
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/Grid.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/dots.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/getLayersData.js +29 -18
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/getLayersData.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/index.js +71 -57
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/index.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/linearRegression.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/utils/isNumericScale.js +11 -0
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/utils/isNumericScale.js.map +1 -0
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot-umap/ChartRenderer.js +10 -10
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot-umap/ChartRenderer.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot-umap/SettingsImpl.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot-umap/components/LowerSVG.js +6 -6
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot-umap/components/LowerSVG.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/types/common.js +35 -25
- package/dist/node_modules/@milaboratories/miplots4/dist/types/common.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/types/dendro.js +3 -3
- package/dist/node_modules/@milaboratories/miplots4/dist/types/discrete.js +37 -37
- package/dist/node_modules/@milaboratories/miplots4/dist/types/discrete.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/types/heatmap.js +6 -6
- package/dist/node_modules/@milaboratories/miplots4/dist/types/scatterplot-umap.js +7 -7
- package/dist/node_modules/@milaboratories/miplots4/dist/types/scatterplot-umap.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/utils/createMultilineDiscreteLabels.js +32 -0
- package/dist/node_modules/@milaboratories/miplots4/dist/utils/createMultilineDiscreteLabels.js.map +1 -0
- package/dist/node_modules/@milaboratories/miplots4/dist/utils/getFacetRowsColumns.js +18 -0
- package/dist/node_modules/@milaboratories/miplots4/dist/utils/getFacetRowsColumns.js.map +1 -0
- package/dist/node_modules/@milaboratories/miplots4/dist/utils/measureMultilineDiscreteLabels.js +63 -0
- package/dist/node_modules/@milaboratories/miplots4/dist/utils/measureMultilineDiscreteLabels.js.map +1 -0
- package/dist/node_modules/@milaboratories/miplots4/dist/{discrete/utils → utils}/splitTextByWidth.js +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/utils/splitTextByWidth.js.map +1 -0
- package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/controllersByChartType/scatterplot.js +2 -2
- package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/controllersByChartType/scatterplot.js.map +1 -1
- package/package.json +3 -3
- package/dist/node_modules/@milaboratories/miplots4/dist/discrete/components/BandAxis.js.map +0 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/discrete/utils/splitTextByWidth.js.map +0 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/Axis.js +0 -59
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/Axis.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChartRenderer.js","sources":["../../../../../../node_modules/@milaboratories/miplots4/src/discrete/ChartRenderer.tsx"],"sourcesContent":["import { scaleBand, scaleLinear, scaleLog, scaleOrdinal } from 'd3-scale';\nimport lodash from 'lodash';\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 { LegendData, LegendItemDiscreteMultiAes } from '../common/types';\nimport { DataFrameProvider } from '../common/useDataFrame';\nimport { DEFAULT_HEIGHT, DEFAULT_WIDTH, TITLE_LINE_HEIGHT, TITLE_MARGIN } from '../constants';\nimport type { DataFrame, GroupKey } from '../DataFrame';\nimport { DEFAULT_COMMON_AES, DEFAULT_TICKS_SIZE } from '../scatterplot/constants';\nimport type { AesItem, ColumnName, GroupingData, InheritAesDiscrete, Orientation } from '../types';\nimport { arrangeLegendParts } from '../utils/arrangeLegendParts';\nimport { TextMeasurer } from '../utils/TextMeasurer/TextMeasurer';\nimport { ChartsGroup } from './components/ChartsGroup';\nimport type { CaptionsSizes, ChartDimensionsData, ChartSizes, ChartsScales, Margins } from './components/types';\nimport { CAPTION_LINE_HEIGHT, DEFAULT_AES, FACET_TITLE_LINE, FACET_TITLE_OFFSET, LEGEND_OFFSET, MIN_PADDING, TICK_OFFSET, TITLE_LINE } from './constants';\nimport type { DiscreteSettingsImpl } from './DiscreteSettingsImpl';\nimport type { LayerData, StatsData } from './layers/types';\nimport { getChartStatsPadding, splitTextByWidth } from './utils';\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 orientation: Orientation,\n xAxis: DiscreteSettingsImpl['chartSettings']['xAxis'],\n yAxis: DiscreteSettingsImpl['chartSettings']['yAxis'],\n captionsSizes: CaptionsSizes,\n currentRowFacetKeys: string[],\n facetTitles: Record<string, string[]>,\n chartEdgeSides: ('left' | 'right' | 'top' | 'bottom')[],\n facetSettings: DiscreteSettingsImpl['facetSettings'],\n currentRow: number,\n currentColumn: number,\n lastInRow: boolean\n) {\n const isVertical = orientation === 'vertical';\n const needLeftAxis =\n chartEdgeSides.includes('left') ||\n (isVertical && !facetSettings?.sharedY) ||\n (!isVertical && !facetSettings?.sharedX);\n const needLeftAxisTitle = chartEdgeSides.includes('left') && yAxis.title !== '';\n const needBottomAxis =\n chartEdgeSides.includes('bottom') ||\n (isVertical && !facetSettings?.sharedX) ||\n (!isVertical && !facetSettings?.sharedY);\n const needBottomAxisTitle = chartEdgeSides.includes('bottom') && xAxis.title !== '';\n\n const yCaptions = captionsSizes.yAxisCaptionsWidth;\n const yTicks = (yAxis.showTicks ? DEFAULT_TICKS_SIZE : 0) + (yAxis.hiddenLabels ? 0 : TICK_OFFSET);\n const yAxisTitle = needLeftAxisTitle ? TITLE_LINE : 0;\n\n const xCaptions = captionsSizes.xAxisCaptionsWidthByRows[isVertical ? currentRow : currentColumn];\n const xTicks = (xAxis.showTicks ? DEFAULT_TICKS_SIZE : 0) + (xAxis.hiddenLabels ? 0 : TICK_OFFSET);\n const xAxisTitle = needBottomAxisTitle ? TITLE_LINE : 0;\n\n const leftAxisElements = isVertical ? yCaptions + yTicks + yAxisTitle : xCaptions + xTicks + xAxisTitle;\n const bottomAxisElements = isVertical ? xTicks + xCaptions + xAxisTitle : yTicks + 2 * TITLE_LINE;\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 : MIN_PADDING,\n right: lastInRow ? 0 : MIN_PADDING,\n };\n}\n\n// facet keys grouped by columns\nfunction getFacetColumns(facetKeys: string[], nRows: number, nColumns: number): string[][] {\n const result: string[][] = new Array(nColumns).fill(null).map(() => []);\n for (let i = 0; i < nColumns; i++) {\n for (let j = 0; j < nRows; j++) {\n const facetIdx = j * nColumns + i;\n if (facetIdx < facetKeys.length) {\n result[i].push(facetKeys[j * nColumns + i]);\n }\n }\n }\n return result;\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 isInheritAes(v: InheritAesDiscrete | string | number | boolean): v is InheritAesDiscrete {\n return typeof v === 'object' && 'type' in v;\n}\n\nclass ChartRenderer {\n reactRoot: Root | null = null;\n parentNode: HTMLElement | null = null;\n rootNode: HTMLElement | null = null;\n component: ReactElement = (<></>);\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 // Scale from primary grouping categories to every category x coordinate\n xPrimary: {null: scaleBand().range([0, DEFAULT_WIDTH]).domain(['1'])},\n // Scale from secondary grouping categories to x shift inside corresponding primary group\n xSecondary: {null: scaleBand().range([0, DEFAULT_WIDTH]).domain(['1'])},\n // Scale from y value to y coordinate, by facet\n y: {null: scaleLinear().domain([0, 10]).range([DEFAULT_HEIGHT, 0]).nice()},\n // Scale for link primary grouping category and aesthetics\n xPrimaryAes: scaleOrdinal<string, AesItem, AesItem>().unknown(DEFAULT_AES),\n // Scale for link secondary grouping category and aesthetics\n xSecondaryAes: scaleOrdinal<string, AesItem, AesItem>().unknown(DEFAULT_AES),\n };\n facetTitles: Record<string, string[]> = {}; // can be multiline\n mainTitle: string[] = []; // can be multiline\n axisLabelsX: Record<string, Record<string, string[]>> = {}; // can be multiline\n captionsSizes: CaptionsSizes = {\n xAxisCaptionsWidthByRows: [],\n xCaptionsTail: 0,\n yAxisCaptionsWidth: 100,\n };\n legend: LegendData = {width: 0, height: 0, items: []};\n margins: Margins = {left: 0, right: 0, top: 0, bottom: 0};\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 updateChartSize(\n size: DiscreteSettingsImpl['chartSettings']['size'],\n facetKeys: string[],\n facetSettings: DiscreteSettingsImpl['facetSettings'],\n primaryKeys: GroupKey[],\n orientation: Orientation,\n statsData: StatsData[]\n ) {\n const paddingTop = size.innerOffset;\n const paddingBottom = size.innerOffset;\n // It may be necessary increase chart height/width for p-value\n const statsPadding = getChartStatsPadding(statsData, primaryKeys, size.innerOffset);\n // Use columns/rows count from settings if some of them defined, else make 1 column\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 {width, height} = size;\n // avoid situation when statistics fill all available chart area\n if (orientation === 'vertical' && statsPadding > paddingTop) {\n height += statsPadding;\n }\n if (orientation === 'horizontal' && statsPadding > paddingBottom) {\n width += statsPadding;\n }\n this.chartSizes.chartWidth = width;\n this.chartSizes.chartHeight = height;\n }\n\n updateChartDimensions(\n facetKeys: string[],\n facetSettings: DiscreteSettingsImpl['facetSettings'],\n orientation: Orientation,\n xAxis: DiscreteSettingsImpl['chartSettings']['xAxis'],\n yAxis: DiscreteSettingsImpl['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 orientation,\n xAxis,\n yAxis,\n this.captionsSizes,\n getFacetRows(facetKeys, this.rowsCount, this.columnsCount)[currentRow],\n this.facetTitles,\n chartEdgeSides,\n facetSettings,\n currentRow,\n currentColumn,\n currentColumn === this.columnsCount - 1\n );\n\n const outerWidth = chartWidth + padding.left + padding.right;\n const outerHeight = chartHeight + padding.top + padding.bottom;\n\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\n this.chartSizes.chartsWidth = chartsWidth;\n this.chartSizes.chartsHeight = chartsHeight;\n }\n\n updateViewport(\n orientation: Orientation,\n primaryKeys: string[],\n secondaryKeys: string[],\n facetKeys: string[],\n facetSettings: DiscreteSettingsImpl['facetSettings'],\n yAxis: DiscreteSettingsImpl['chartSettings']['yAxis'],\n layersData: LayerData[],\n statsData: StatsData[],\n size: DiscreteSettingsImpl['chartSettings']['size'],\n nonEmptyGroupsByFacets: Record<string, string[]>,\n ) {\n const paddingBottom = size.innerOffset;\n const isVertical = orientation === 'vertical';\n const statsPadding = getChartStatsPadding(statsData, primaryKeys, size.innerOffset);\n const sharedX = facetSettings === null || facetSettings.sharedX;\n const sharedY = facetSettings === null || facetSettings.sharedY;\n\n const {chartHeight, chartWidth} = this.chartSizes;\n facetKeys.forEach(key => {\n const scaleY = yAxis.scale === 'log' ? scaleLog() : scaleLinear();\n const min = sharedY\n ? Math.min(...layersData.map(({meta}) => meta.minY))\n : Math.min(...layersData.map(({geoms}) => Math.min(...geoms[key].map(({boundsY}) => boundsY.min))));\n const max = sharedY\n ? Math.max(...layersData.map(({meta}) => meta.maxY))\n : Math.max(...layersData.map(({geoms}) => Math.max(...geoms[key].map(({boundsY}) => boundsY.max))));\n\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([min, max])\n .range(\n isVertical\n ? [chartHeight - paddingBottom, statsPadding]\n : [paddingBottom, chartWidth - statsPadding]\n );\n scaleY\n .domain([tempY.invert(isVertical ? chartHeight : 0), tempY.invert(isVertical ? 0 : chartWidth)])\n .range(isVertical ? [chartHeight, 0] : [0, chartWidth]);\n this.scales.y[key] = scaleY;\n\n const facetPrimaryKeys = sharedX ? primaryKeys : nonEmptyGroupsByFacets[key];\n this.scales.xPrimary[key] = scaleBand()\n .domain(facetPrimaryKeys)\n .range(isVertical ? [0, chartWidth] : [chartHeight, 0]);\n this.scales.xSecondary[key] = scaleBand()\n .domain(secondaryKeys)\n .range([0, this.scales.xPrimary[key].bandwidth()]);\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 createMainTitle(facetKeys: string[], title: DiscreteSettingsImpl['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 createAxisLabels(\n facetKeys: string[],\n xAxis: DiscreteSettingsImpl['chartSettings']['xAxis'],\n primaryGrouping: GroupingData,\n orientation: Orientation\n ) {\n const DEFAULT_MAX_WIDTH = {\n center: 120,\n '45deg': 256,\n '90deg': 320,\n };\n const isVertical = orientation === 'vertical';\n\n function getMaxLinesCount(labelsPosition: 'center' | '45deg' | '90deg', bandwidth: number) {\n if (labelsPosition === 'center') {\n return Infinity;\n }\n if (labelsPosition === '45deg') {\n return Math.floor((bandwidth * Math.sin(Math.PI / 4)) / CAPTION_LINE_HEIGHT);\n }\n return Math.floor(bandwidth / CAPTION_LINE_HEIGHT);\n }\n\n this.axisLabelsX = facetKeys.reduce((res: Record<string, Record<string, string[]>>, facetKey) => {\n const scale = this.scales.xPrimary[facetKey];\n const bandwidth = scale.bandwidth();\n const defaultWidth = DEFAULT_MAX_WIDTH[xAxis.labelsPosition];\n const width = xAxis.labelsPosition === 'center' ? Math.min(defaultWidth, bandwidth) : defaultWidth;\n const labelsMap = primaryGrouping.valueLabels;\n res[facetKey] = scale.domain().reduce((res2: Record<string, string[]>, axisKey) => {\n if (xAxis.hiddenLabels) {\n res2[axisKey] = [];\n return res2;\n }\n const label = labelsMap[axisKey];\n if (!isVertical) {\n res2[axisKey] = [label];\n } else {\n const maxLinesCount = getMaxLinesCount(xAxis.labelsPosition, bandwidth);\n const multilineKey = splitTextByWidth(label, width, 14);\n res2[axisKey] = multilineKey.length > maxLinesCount ? [label] : multilineKey;\n }\n return res2;\n }, {});\n return res;\n }, {});\n }\n\n updateAesScales(primaryGrouping: GroupingData, secondaryGrouping: GroupingData) {\n if (primaryGrouping.inheritedAes) {\n const {inheritedAes, keys} = primaryGrouping;\n this.scales.xPrimaryAes.domain(keys).range(keys.map(key => inheritedAes[key] ?? DEFAULT_COMMON_AES));\n } else {\n this.scales.xPrimaryAes.domain([]).range([]);\n }\n if (secondaryGrouping.inheritedAes) {\n const {inheritedAes, keys} = secondaryGrouping;\n this.scales.xSecondaryAes.domain(keys).range(keys.map(key => inheritedAes[key] ?? DEFAULT_COMMON_AES));\n } else {\n this.scales.xSecondaryAes.domain([]).range([]);\n }\n }\n\n updateCaptionsSize(\n orientation: Orientation,\n facetKeys: string[],\n xAxis: DiscreteSettingsImpl['chartSettings']['xAxis'],\n yAxis: DiscreteSettingsImpl['chartSettings']['yAxis'],\n ) {\n const LABEL_FONT_SIZE = 14;\n const textMeasurer = new TextMeasurer(`600 ${LABEL_FONT_SIZE}px Manrope`);\n const isVertical = orientation === 'vertical';\n\n function getMaxStrWidth(strs: string[]) {\n if (!strs.length) {\n return 0;\n }\n return Math.max(...strs.map(str => textMeasurer.getTextWidth(str)));\n }\n\n function getMultilineMaxStrWidth(strs: string[][]) {\n if (!strs.length) {\n return 0;\n }\n return Math.max(...strs.map(getMaxStrWidth));\n }\n\n // x ticks are always strings and can have variable width in different facets, and can be rotated;\n // for x we consider the widest tick caption in row (column for horizontal orientation);\n // y ticks are always numbers, and we consider only the widest number of all facets\n // because numbers sizes are closer to each other, and it makes more equal facets grid without superwide empty offsets\n let xAxisCaptionsWidthByRows: number[] = [];\n let xTail = 0;\n\n const facetRows = getFacetRows(facetKeys, this.rowsCount, this.columnsCount);\n const facetColumns = getFacetColumns(facetKeys, this.rowsCount, this.columnsCount);\n if (!isVertical) {\n // with horizontal chart orientation X ticks are always in horizontal position\n xAxisCaptionsWidthByRows = facetColumns\n // max of ticks width in every facet's column\n .map(columnFacetKeys =>\n Math.max(\n ...columnFacetKeys.map(facetKey =>\n getMultilineMaxStrWidth(\n this.scales.xPrimary[facetKey]\n .domain()\n .map(axisKey => this.axisLabelsX[facetKey][axisKey])\n )\n )\n )\n );\n } else {\n if (xAxis.labelsPosition === 'center') {\n xAxisCaptionsWidthByRows = facetRows.map(rowFacetKeys =>\n Math.max(\n ...rowFacetKeys.map(facetKey =>\n Math.max(\n ...this.scales.xPrimary[facetKey]\n .domain()\n // do not consider empty ticks captions, for example - single group\n .map(axisKey =>\n axisKey ? this.axisLabelsX[facetKey][axisKey].length * CAPTION_LINE_HEIGHT : 0\n )\n )\n )\n )\n );\n }\n if (xAxis.labelsPosition === '45deg') {\n const sin45 = Math.sin(Math.PI / 4);\n xAxisCaptionsWidthByRows = facetRows.map(rowKeys => {\n return Math.max(\n ...rowKeys.map(key => {\n const labels = this.scales.xPrimary[key]\n .domain()\n .map(axisKey => this.axisLabelsX[key][axisKey]);\n const ticksWidth = getMultilineMaxStrWidth(labels);\n return ticksWidth > 0 ? ticksWidth * sin45 + LABEL_FONT_SIZE : 0;\n })\n );\n });\n xTail = Math.max(\n ...facetColumns[0].map(facetKey => {\n const ticks = this.scales.xPrimary[facetKey].domain();\n const sideTick = this.axisLabelsX[facetKey][ticks[0]];\n return Math.max(\n getMaxStrWidth(sideTick) * sin45 -\n this.scales.xPrimary[facetKey].bandwidth() / 2 +\n LABEL_FONT_SIZE,\n 0\n );\n })\n );\n }\n if (xAxis.labelsPosition === '90deg') {\n xAxisCaptionsWidthByRows = facetRows\n // max of ticks width in every facet's row\n .map(rowKeys =>\n Math.max(\n ...rowKeys.map(facetKey =>\n getMultilineMaxStrWidth(\n this.scales.xPrimary[facetKey]\n .domain()\n .map(axisKey => this.axisLabelsX[facetKey][axisKey])\n )\n )\n )\n );\n }\n }\n\n const yTicks = lodash.flatten(\n facetKeys.map(facetKey => {\n if (yAxis.hiddenLabels) {\n return [];\n }\n const scaleY = this.scales.y[facetKey];\n const ticks = scaleY.ticks();\n const specifier = ticks.some(tick => (Math.abs(tick) < 0.0001 && tick !== 0) || tick > 10000)\n ? ',e'\n : ',f';\n const format = scaleY.tickFormat(10, specifier);\n return ticks.map(format);\n })\n );\n const yAxisCaptionsWidth = getMaxStrWidth(yTicks);\n\n this.captionsSizes = {\n xCaptionsTail: xTail,\n xAxisCaptionsWidthByRows,\n yAxisCaptionsWidth,\n };\n }\n\n updateMargins(orientation: Orientation, facetKeys: string[], size:DiscreteSettingsImpl['chartSettings']['size']) {\n const firstChart = this.chartsDimensions[facetKeys[0]];\n const lastChart = this.chartsDimensions[facetKeys[facetKeys.length - 1]];\n const isVertical = orientation === 'vertical';\n\n const mainTitleHeight = this.mainTitle.length ? TITLE_LINE_HEIGHT * this.mainTitle.length + TITLE_MARGIN * 2 : 0;\n const minMargin = size.outerOffset;\n this.margins = {\n left: Math.max(minMargin, isVertical ? this.captionsSizes.xCaptionsTail - firstChart.padding.left : 0),\n right: this.legend.width + minMargin,\n top: Math.max(mainTitleHeight, minMargin),\n bottom: Math.max(minMargin, isVertical ? 0 : this.captionsSizes.xCaptionsTail - lastChart.padding.bottom),\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: DiscreteSettingsImpl['chartSettings']['legend'],\n primaryGrouping: GroupingData,\n secondaryGrouping: GroupingData,\n layersData: LayerData[]\n ) {\n if (!legend.show) {\n this.legend = {width: 0, height: 0, items: []};\n return;\n }\n const legendHeight = this.chartSizes.chartHeight;\n const emptySizes = {width:0, height:0, left:0, top: 0};\n const legendItems: LegendItemDiscreteMultiAes[] = [];\n\n function layersHasInheritedAesByField(\n type: 'primaryGrouping' | 'secondaryGrouping',\n field: keyof LegendItemDiscreteMultiAes['usedAes']\n ) {\n return layersData.some(l => {\n const value = l.aes[field as keyof typeof l.aes];\n return value && isInheritAes(value) && value.type === type;\n });\n }\n function getUsedAes(type: 'primaryGrouping' | 'secondaryGrouping'): LegendItemDiscreteMultiAes['usedAes'] {\n return {\n dotFill: layersHasInheritedAesByField(type, 'dotFill'),\n fillColor: layersHasInheritedAesByField(type, 'fillColor'),\n lineColor: layersHasInheritedAesByField(type, 'lineColor'),\n dotShape: layersHasInheritedAesByField(type, 'dotShape'),\n lineShape: layersHasInheritedAesByField(type, 'lineShape'),\n };\n }\n const primaryUsedAes = getUsedAes('primaryGrouping');\n const secondaryUsedAes = getUsedAes('secondaryGrouping');\n if (Object.values(primaryUsedAes).some(v => v) && primaryGrouping.inheritedAes) {\n legendItems.push({\n type: 'discreteMulti',\n id: 'primary',\n title: primaryGrouping.label,\n scale: this.scales.xPrimaryAes,\n values: primaryGrouping.keys,\n labels: primaryGrouping.valueLabels,\n usedAes: primaryUsedAes,\n ...emptySizes,\n });\n }\n if (Object.values(secondaryUsedAes).some(v => v) && secondaryGrouping.inheritedAes) {\n legendItems.push({\n type: 'discreteMulti',\n id: 'secondary',\n title: secondaryGrouping.label,\n scale: this.scales.xSecondaryAes,\n values: secondaryGrouping.keys,\n labels: secondaryGrouping.valueLabels,\n usedAes: secondaryUsedAes,\n ...emptySizes\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 const lastItem = items[items.length - 1];\n const legendWidth = lastItem.left + lastItem.width + LEGEND_OFFSET;\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: DiscreteSettingsImpl['chartSettings'],\n primaryGrouping: GroupingData,\n secondaryGrouping: GroupingData,\n facetSettings: DiscreteSettingsImpl['facetSettings'],\n facetKeys: string[],\n facetLabels: string[][],\n layersData: LayerData[],\n statsData: StatsData[],\n keyColumn: ColumnName | null,\n nonEmptyGroupsByFacets: Record<string, string[]>,\n onlyPositive: boolean,\n onTooltipHintSwitch: (v:boolean) => void\n ) {\n const {orientation, xAxis, yAxis, size} = chartSettings;\n this.updateChartSize(size, facetKeys, facetSettings, primaryGrouping.keys, orientation, statsData);\n this.updateViewport(\n orientation,\n primaryGrouping.keys,\n secondaryGrouping.keys,\n facetKeys,\n facetSettings,\n yAxis,\n layersData,\n statsData,\n size,\n nonEmptyGroupsByFacets\n );\n this.createAxisLabels(facetKeys, xAxis, primaryGrouping, orientation);\n this.createFacetTitles(facetKeys, facetLabels);\n this.updateCaptionsSize(orientation, facetKeys, xAxis, yAxis);\n this.updateChartDimensions(facetKeys, facetSettings, orientation, xAxis, yAxis);\n this.updateLegendSize(chartSettings.legend, primaryGrouping, secondaryGrouping, layersData);\n this.createMainTitle(facetKeys, chartSettings.title);\n this.updateMargins(orientation, facetKeys, size);\n this.updateAesScales(primaryGrouping, secondaryGrouping);\n\n const component = (\n <DataFrameProvider dataFrame={dataFrame}>\n <ChartsGroup\n settingsId={settingsId}\n chartSettings={chartSettings}\n facetKeys={facetKeys}\n facetSettings={facetSettings}\n facetTitles={this.facetTitles}\n chartSizes={this.chartSizes}\n chartsDimensions={this.chartsDimensions}\n scales={this.scales}\n layersData={layersData}\n statsData={statsData}\n legendData={this.legend}\n margins={this.margins}\n columnsCount={this.columnsCount}\n keyColumn={keyColumn}\n xLabels={this.axisLabelsX}\n chartTitle={this.mainTitle}\n onlyPositive={onlyPositive}\n secondaryGrouping={secondaryGrouping}\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","orientation","xAxis","yAxis","captionsSizes","currentRowFacetKeys","facetTitles","chartEdgeSides","facetSettings","currentRow","currentColumn","lastInRow","isVertical","needLeftAxis","needLeftAxisTitle","needBottomAxis","needBottomAxisTitle","yCaptions","yTicks","DEFAULT_TICKS_SIZE","TICK_OFFSET","yAxisTitle","TITLE_LINE","xCaptions","xTicks","xAxisTitle","leftAxisElements","bottomAxisElements","facetTitlesLinesCount","key","MIN_PADDING","FACET_TITLE_OFFSET","FACET_TITLE_LINE","getFacetColumns","facetKeys","nRows","nColumns","result","i","j","getFacetRows","getRowColumn","idx","row","column","isInheritAes","v","ChartRenderer","__publicField","jsx","Fragment","DEFAULT_WIDTH","DEFAULT_HEIGHT","scaleBand","scaleLinear","scaleOrdinal","DEFAULT_AES","_a","node","createRoot","size","primaryKeys","statsData","paddingTop","paddingBottom","statsPadding","getChartStatsPadding","facetCount","maxNRows","maxNCols","width","height","chartWidth","chartHeight","currentLeft","currentTop","res","padding","outerWidth","outerHeight","chartsWidth","chartsHeight","secondaryKeys","layersData","nonEmptyGroupsByFacets","sharedX","sharedY","scaleY","scaleLog","min","meta","geoms","boundsY","max","tempY","facetPrimaryKeys","facetLabels","splitTextByWidth","title","firstChart","lastChart","primaryGrouping","DEFAULT_MAX_WIDTH","getMaxLinesCount","labelsPosition","bandwidth","CAPTION_LINE_HEIGHT","facetKey","scale","defaultWidth","labelsMap","res2","axisKey","label","maxLinesCount","multilineKey","secondaryGrouping","inheritedAes","keys","DEFAULT_COMMON_AES","textMeasurer","TextMeasurer","getMaxStrWidth","strs","str","getMultilineMaxStrWidth","xAxisCaptionsWidthByRows","xTail","facetRows","facetColumns","columnFacetKeys","rowFacetKeys","sin45","rowKeys","labels","ticksWidth","ticks","sideTick","lodash","specifier","tick","format","yAxisCaptionsWidth","mainTitleHeight","TITLE_LINE_HEIGHT","TITLE_MARGIN","minMargin","legend","legendHeight","emptySizes","legendItems","layersHasInheritedAesByField","type","field","l","value","getUsedAes","primaryUsedAes","secondaryUsedAes","items","arrangeLegendParts","lastItem","legendWidth","LEGEND_OFFSET","dataFrame","settingsId","chartSettings","keyColumn","onlyPositive","onTooltipHintSwitch","component","DataFrameProvider","ChartsGroup","message","Error"],"mappings":"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","x_google_ignoreList":[0]}
|
|
1
|
+
{"version":3,"file":"ChartRenderer.js","sources":["../../../../../../node_modules/@milaboratories/miplots4/src/discrete/ChartRenderer.tsx"],"sourcesContent":["import { scaleBand, scaleLinear, scaleLog, scaleOrdinal } from 'd3-scale';\nimport lodash from 'lodash';\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 { LegendData, LegendItemDiscreteMultiAes } from '../common/types';\nimport { DataFrameProvider } from '../common/useDataFrame';\nimport { DEFAULT_HEIGHT, DEFAULT_WIDTH, TITLE_LINE_HEIGHT, TITLE_MARGIN } from '../constants';\nimport type { DataFrame, GroupKey } from '../DataFrame';\nimport { DEFAULT_COMMON_AES, DEFAULT_TICKS_SIZE } from '../scatterplot/constants';\nimport type { AesItem, ColumnName, GroupingData, InheritAesDiscrete, Orientation } from '../types';\nimport { arrangeLegendParts } from '../utils/arrangeLegendParts';\nimport { TextMeasurer } from '../utils/TextMeasurer/TextMeasurer';\nimport { ChartsGroup } from './components/ChartsGroup';\nimport type { CaptionsSizes, ChartDimensionsData, ChartSizes, ChartsScales, Margins } from './components/types';\nimport { DEFAULT_AES, FACET_TITLE_LINE, FACET_TITLE_OFFSET, LEGEND_OFFSET, MIN_PADDING, TICK_OFFSET, TITLE_LINE } from './constants';\nimport type { DiscreteSettingsImpl } from './DiscreteSettingsImpl';\nimport type { LayerData, StatsData } from './layers/types';\nimport { getChartStatsPadding, splitTextByWidth } from './utils';\nimport { createMultilineDiscreteLabels } from '../utils/createMultilineDiscreteLabels';\nimport { measureMultilineDiscreteLabels } from '../utils/measureMultilineDiscreteLabels';\nimport { getFacetRows } from '../utils/getFacetRowsColumns';\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 orientation: Orientation,\n xAxis: DiscreteSettingsImpl['chartSettings']['xAxis'],\n yAxis: DiscreteSettingsImpl['chartSettings']['yAxis'],\n captionsSizes: CaptionsSizes,\n currentRowFacetKeys: string[],\n facetTitles: Record<string, string[]>,\n chartEdgeSides: ('left' | 'right' | 'top' | 'bottom')[],\n facetSettings: DiscreteSettingsImpl['facetSettings'],\n currentRow: number,\n currentColumn: number,\n lastInRow: boolean\n) {\n const isVertical = orientation === 'vertical';\n const needLeftAxis =\n chartEdgeSides.includes('left') ||\n (isVertical && !facetSettings?.sharedY) ||\n (!isVertical && !facetSettings?.sharedX);\n const needLeftAxisTitle = chartEdgeSides.includes('left') && yAxis.title !== '';\n const needBottomAxis =\n chartEdgeSides.includes('bottom') ||\n (isVertical && !facetSettings?.sharedX) ||\n (!isVertical && !facetSettings?.sharedY);\n const needBottomAxisTitle = chartEdgeSides.includes('bottom') && xAxis.title !== '';\n\n const yCaptions = captionsSizes.leftAxisCaptionsWidth;\n const yTicks = (yAxis.showTicks ? DEFAULT_TICKS_SIZE : 0) + (yAxis.hiddenLabels ? 0 : TICK_OFFSET);\n const yAxisTitle = needLeftAxisTitle ? TITLE_LINE : 0;\n\n const xCaptions = isVertical ? captionsSizes.bottomAxisCaptionsWidthByRows[currentRow] : captionsSizes.leftAxisCaptionsWidthByColumns[currentColumn];\n const xTicks = (xAxis.showTicks ? DEFAULT_TICKS_SIZE : 0) + (xAxis.hiddenLabels ? 0 : TICK_OFFSET);\n const xAxisTitle = isVertical && needBottomAxisTitle || !isVertical && needLeftAxisTitle ? TITLE_LINE : 0;\n\n const leftAxisElements = isVertical ? yCaptions + yTicks + yAxisTitle : xCaptions + xTicks + xAxisTitle;\n const bottomAxisElements = isVertical ? xTicks + xCaptions + xAxisTitle : yTicks + 2 * TITLE_LINE;\n\n const facetTitlesLinesCount = Math.max(...currentRowFacetKeys.map(key => facetTitles[key].length));\n\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 : MIN_PADDING,\n right: lastInRow ? 0 : MIN_PADDING,\n };\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 isInheritAes(v: InheritAesDiscrete | string | number | boolean): v is InheritAesDiscrete {\n return typeof v === 'object' && 'type' in v;\n}\n\nclass ChartRenderer {\n reactRoot: Root | null = null;\n parentNode: HTMLElement | null = null;\n rootNode: HTMLElement | null = null;\n component: ReactElement = (<></>);\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 // Scale from primary grouping categories to every category x coordinate\n xPrimary: { null: scaleBand().range([0, DEFAULT_WIDTH]).domain(['1']) },\n // Scale from secondary grouping categories to x shift inside corresponding primary group\n xSecondary: { null: scaleBand().range([0, DEFAULT_WIDTH]).domain(['1']) },\n // Scale from y value to y coordinate, by facet\n y: { null: scaleLinear().domain([0, 10]).range([DEFAULT_HEIGHT, 0]).nice() },\n // Scale for link primary grouping category and aesthetics\n xPrimaryAes: scaleOrdinal<string, AesItem, AesItem>().unknown(DEFAULT_AES),\n // Scale for link secondary grouping category and aesthetics\n xSecondaryAes: scaleOrdinal<string, AesItem, AesItem>().unknown(DEFAULT_AES),\n };\n facetTitles: Record<string, string[]> = {}; // can be multiline\n mainTitle: string[] = []; // can be multiline\n axisLabelsX: Record<string, Record<string, string[]>> = {}; // can be multiline\n captionsSizes: CaptionsSizes = {\n bottomAxisCaptionsWidthByRows: [],\n leftAxisCaptionsWidthByColumns: [],\n bottomCaptionsTail: 0,\n leftCaptionsTail: 0,\n leftAxisCaptionsWidth: 100,\n };\n legend: LegendData = { width: 0, height: 0, items: [] };\n margins: Margins = { left: 0, right: 0, top: 0, bottom: 0 };\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 updateChartSize(\n size: DiscreteSettingsImpl['chartSettings']['size'],\n facetKeys: string[],\n facetSettings: DiscreteSettingsImpl['facetSettings'],\n primaryKeys: GroupKey[],\n orientation: Orientation,\n statsData: StatsData[]\n ) {\n const paddingTop = size.innerOffset;\n const paddingBottom = size.innerOffset;\n // It may be necessary increase chart height/width for p-value\n const statsPadding = getChartStatsPadding(statsData, primaryKeys, size.innerOffset);\n // Use columns/rows count from settings if some of them defined, else make 1 column\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 { width, height } = size;\n // avoid situation when statistics fill all available chart area\n if (orientation === 'vertical' && statsPadding > paddingTop) {\n height += statsPadding;\n }\n if (orientation === 'horizontal' && statsPadding > paddingBottom) {\n width += statsPadding;\n }\n this.chartSizes.chartWidth = width;\n this.chartSizes.chartHeight = height;\n }\n\n updateChartDimensions(\n facetKeys: string[],\n facetSettings: DiscreteSettingsImpl['facetSettings'],\n orientation: Orientation,\n xAxis: DiscreteSettingsImpl['chartSettings']['xAxis'],\n yAxis: DiscreteSettingsImpl['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 orientation,\n xAxis,\n yAxis,\n this.captionsSizes,\n facetRows[currentRow],\n this.facetTitles,\n chartEdgeSides,\n facetSettings,\n currentRow,\n currentColumn,\n currentColumn === this.columnsCount - 1\n );\n\n const outerWidth = chartWidth + padding.left + padding.right;\n const outerHeight = chartHeight + padding.top + padding.bottom;\n\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\n this.chartSizes.chartsWidth = chartsWidth;\n this.chartSizes.chartsHeight = chartsHeight;\n }\n\n updateViewport(\n orientation: Orientation,\n primaryKeys: string[],\n secondaryKeys: string[],\n facetKeys: string[],\n facetSettings: DiscreteSettingsImpl['facetSettings'],\n yAxis: DiscreteSettingsImpl['chartSettings']['yAxis'],\n layersData: LayerData[],\n statsData: StatsData[],\n size: DiscreteSettingsImpl['chartSettings']['size'],\n nonEmptyGroupsByFacets: Record<string, string[]>,\n ) {\n const paddingBottom = size.innerOffset;\n const isVertical = orientation === 'vertical';\n const statsPadding = getChartStatsPadding(statsData, primaryKeys, size.innerOffset);\n const sharedX = facetSettings === null || facetSettings.sharedX;\n const sharedY = facetSettings === null || facetSettings.sharedY;\n\n const { chartHeight, chartWidth } = this.chartSizes;\n facetKeys.forEach(key => {\n const scaleY = yAxis.scale === 'log' ? scaleLog() : scaleLinear();\n const min = sharedY\n ? Math.min(...layersData.map(({ meta }) => meta.minY))\n : Math.min(...layersData.map(({ geoms }) => Math.min(...geoms[key].map(({ boundsY }) => boundsY.min))));\n const max = sharedY\n ? Math.max(...layersData.map(({ meta }) => meta.maxY))\n : Math.max(...layersData.map(({ geoms }) => Math.max(...geoms[key].map(({ boundsY }) => boundsY.max))));\n\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([min, max])\n .range(\n isVertical\n ? [chartHeight - paddingBottom, statsPadding]\n : [paddingBottom, chartWidth - statsPadding]\n );\n scaleY\n .domain([tempY.invert(isVertical ? chartHeight : 0), tempY.invert(isVertical ? 0 : chartWidth)])\n .range(isVertical ? [chartHeight, 0] : [0, chartWidth]);\n this.scales.y[key] = scaleY;\n\n const facetPrimaryKeys = sharedX ? primaryKeys : nonEmptyGroupsByFacets[key];\n this.scales.xPrimary[key] = scaleBand()\n .domain(facetPrimaryKeys)\n .range(isVertical ? [0, chartWidth] : [chartHeight, 0]);\n this.scales.xSecondary[key] = scaleBand()\n .domain(secondaryKeys)\n .range([0, this.scales.xPrimary[key].bandwidth()]);\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 createMainTitle(facetKeys: string[], title: DiscreteSettingsImpl['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 createAxisLabels(\n facetKeys: string[],\n xAxis: DiscreteSettingsImpl['chartSettings']['xAxis'],\n primaryGrouping: GroupingData,\n orientation: Orientation\n ) {\n this.axisLabelsX = createMultilineDiscreteLabels(\n facetKeys,\n xAxis.labelsPosition,\n primaryGrouping.valueLabels,\n xAxis.hiddenLabels,\n orientation,\n this.scales.xPrimary,\n );\n }\n\n updateAesScales(primaryGrouping: GroupingData, secondaryGrouping: GroupingData) {\n if (primaryGrouping.inheritedAes) {\n const { inheritedAes, keys } = primaryGrouping;\n this.scales.xPrimaryAes.domain(keys).range(keys.map(key => inheritedAes[key] ?? DEFAULT_COMMON_AES));\n } else {\n this.scales.xPrimaryAes.domain([]).range([]);\n }\n if (secondaryGrouping.inheritedAes) {\n const { inheritedAes, keys } = secondaryGrouping;\n this.scales.xSecondaryAes.domain(keys).range(keys.map(key => inheritedAes[key] ?? DEFAULT_COMMON_AES));\n } else {\n this.scales.xSecondaryAes.domain([]).range([]);\n }\n }\n\n updateCaptionsSize(\n orientation: Orientation,\n facetKeys: string[],\n xAxis: DiscreteSettingsImpl['chartSettings']['xAxis'],\n yAxis: DiscreteSettingsImpl['chartSettings']['yAxis'],\n ) {\n const LABEL_FONT_SIZE = 14;\n const textMeasurer = new TextMeasurer(`600 ${LABEL_FONT_SIZE}px Manrope`);\n\n function getMaxStrWidth(strs: string[]) {\n if (!strs.length) {\n return 0;\n }\n return Math.max(...strs.map(str => textMeasurer.getTextWidth(str)));\n }\n\n const { xTail, yTail, axisCaptionsWidthByRows, axisCaptionsWidthByColumns } = measureMultilineDiscreteLabels(facetKeys, this.rowsCount, this.columnsCount, xAxis.labelsPosition, this.axisLabelsX, orientation, this.scales.xPrimary);\n\n const yTicks = lodash.flatten(\n facetKeys.map(facetKey => {\n if (yAxis.hiddenLabels) {\n return [];\n }\n const scaleY = this.scales.y[facetKey];\n const ticks = scaleY.ticks();\n const specifier = ticks.some(tick => (Math.abs(tick) < 0.0001 && tick !== 0) || tick > 10000)\n ? ',e'\n : ',f';\n const format = scaleY.tickFormat(10, specifier);\n return ticks.map(format);\n })\n );\n\n this.captionsSizes = {\n bottomCaptionsTail: xTail,\n leftCaptionsTail: yTail,\n bottomAxisCaptionsWidthByRows: axisCaptionsWidthByRows,\n leftAxisCaptionsWidthByColumns: axisCaptionsWidthByColumns,\n leftAxisCaptionsWidth: getMaxStrWidth(yTicks),\n };\n }\n\n updateMargins(orientation: Orientation, facetKeys: string[], size: DiscreteSettingsImpl['chartSettings']['size']) {\n const firstChart = this.chartsDimensions[facetKeys[0]];\n const lastChart = this.chartsDimensions[facetKeys[facetKeys.length - 1]];\n const isVertical = orientation === 'vertical';\n\n const mainTitleHeight = this.mainTitle.length ? TITLE_LINE_HEIGHT * this.mainTitle.length + TITLE_MARGIN * 2 : 0;\n const minMargin = size.outerOffset;\n this.margins = {\n left: Math.max(minMargin, isVertical ? this.captionsSizes.bottomCaptionsTail - firstChart.padding.left : 0),\n right: this.legend.width + minMargin,\n top: Math.max(mainTitleHeight, minMargin),\n bottom: Math.max(minMargin, isVertical ? 0 : this.captionsSizes.leftCaptionsTail - lastChart.padding.bottom),\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: DiscreteSettingsImpl['chartSettings']['legend'],\n primaryGrouping: GroupingData,\n secondaryGrouping: GroupingData,\n layersData: LayerData[]\n ) {\n if (!legend.show) {\n this.legend = { width: 0, height: 0, items: [] };\n return;\n }\n const legendHeight = this.chartSizes.chartHeight;\n const emptySizes = { width: 0, height: 0, left: 0, top: 0 };\n const legendItems: LegendItemDiscreteMultiAes[] = [];\n\n function layersHasInheritedAesByField(\n type: 'primaryGrouping' | 'secondaryGrouping',\n field: keyof LegendItemDiscreteMultiAes['usedAes']\n ) {\n return layersData.some(l => {\n const value = l.aes[field as keyof typeof l.aes] as (string | InheritAesDiscrete);\n return value && isInheritAes(value) && value.type === type;\n });\n }\n function getUsedAes(type: 'primaryGrouping' | 'secondaryGrouping'): LegendItemDiscreteMultiAes['usedAes'] {\n return {\n dotFill: layersHasInheritedAesByField(type, 'dotFill'),\n fillColor: layersHasInheritedAesByField(type, 'fillColor'),\n lineColor: layersHasInheritedAesByField(type, 'lineColor'),\n dotShape: layersHasInheritedAesByField(type, 'dotShape'),\n lineShape: layersHasInheritedAesByField(type, 'lineShape'),\n };\n }\n const primaryUsedAes = getUsedAes('primaryGrouping');\n const secondaryUsedAes = getUsedAes('secondaryGrouping');\n if (Object.values(primaryUsedAes).some(v => v) && primaryGrouping.inheritedAes) {\n legendItems.push({\n type: 'discreteMulti',\n id: 'primary',\n title: primaryGrouping.label,\n scale: this.scales.xPrimaryAes,\n values: primaryGrouping.keys,\n labels: primaryGrouping.valueLabels,\n usedAes: primaryUsedAes,\n ...emptySizes,\n });\n }\n if (Object.values(secondaryUsedAes).some(v => v) && secondaryGrouping.inheritedAes) {\n legendItems.push({\n type: 'discreteMulti',\n id: 'secondary',\n title: secondaryGrouping.label,\n scale: this.scales.xSecondaryAes,\n values: secondaryGrouping.keys,\n labels: secondaryGrouping.valueLabels,\n usedAes: secondaryUsedAes,\n ...emptySizes\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 const lastItem = items[items.length - 1];\n const legendWidth = lastItem.left + lastItem.width + LEGEND_OFFSET;\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: DiscreteSettingsImpl['chartSettings'],\n primaryGrouping: GroupingData,\n secondaryGrouping: GroupingData,\n facetSettings: DiscreteSettingsImpl['facetSettings'],\n facetKeys: string[],\n facetLabels: string[][],\n layersData: LayerData[],\n statsData: StatsData[],\n keyColumn: ColumnName | null,\n nonEmptyGroupsByFacets: Record<string, string[]>,\n onlyPositive: boolean,\n onTooltipHintSwitch: (v: boolean) => void\n ) {\n const { orientation, xAxis, yAxis, size } = chartSettings;\n this.updateChartSize(size, facetKeys, facetSettings, primaryGrouping.keys, orientation, statsData);\n this.updateViewport(\n orientation,\n primaryGrouping.keys,\n secondaryGrouping.keys,\n facetKeys,\n facetSettings,\n yAxis,\n layersData,\n statsData,\n size,\n nonEmptyGroupsByFacets\n );\n this.createAxisLabels(facetKeys, xAxis, primaryGrouping, orientation);\n this.createFacetTitles(facetKeys, facetLabels);\n this.updateCaptionsSize(orientation, facetKeys, xAxis, yAxis);\n this.updateChartDimensions(facetKeys, facetSettings, orientation, xAxis, yAxis);\n this.updateLegendSize(chartSettings.legend, primaryGrouping, secondaryGrouping, layersData);\n this.createMainTitle(facetKeys, chartSettings.title);\n this.updateMargins(orientation, facetKeys, size);\n this.updateAesScales(primaryGrouping, secondaryGrouping);\n\n const component = (\n <DataFrameProvider dataFrame={dataFrame}>\n <ChartsGroup\n settingsId={settingsId}\n chartSettings={chartSettings}\n facetKeys={facetKeys}\n facetSettings={facetSettings}\n facetTitles={this.facetTitles}\n chartSizes={this.chartSizes}\n chartsDimensions={this.chartsDimensions}\n scales={this.scales}\n layersData={layersData}\n statsData={statsData}\n legendData={this.legend}\n margins={this.margins}\n columnsCount={this.columnsCount}\n keyColumn={keyColumn}\n xLabels={this.axisLabelsX}\n chartTitle={this.mainTitle}\n onlyPositive={onlyPositive}\n secondaryGrouping={secondaryGrouping}\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","orientation","xAxis","yAxis","captionsSizes","currentRowFacetKeys","facetTitles","chartEdgeSides","facetSettings","currentRow","currentColumn","lastInRow","isVertical","needLeftAxis","needLeftAxisTitle","needBottomAxis","needBottomAxisTitle","yCaptions","yTicks","DEFAULT_TICKS_SIZE","TICK_OFFSET","yAxisTitle","TITLE_LINE","xCaptions","xTicks","xAxisTitle","leftAxisElements","bottomAxisElements","facetTitlesLinesCount","key","MIN_PADDING","FACET_TITLE_OFFSET","FACET_TITLE_LINE","getRowColumn","idx","row","column","isInheritAes","v","ChartRenderer","__publicField","jsx","Fragment","DEFAULT_WIDTH","DEFAULT_HEIGHT","scaleBand","scaleLinear","scaleOrdinal","DEFAULT_AES","_a","node","createRoot","size","facetKeys","primaryKeys","statsData","paddingTop","paddingBottom","statsPadding","getChartStatsPadding","facetCount","maxNRows","maxNCols","width","height","chartWidth","chartHeight","currentLeft","currentTop","facetRows","getFacetRows","res","padding","outerWidth","outerHeight","chartsWidth","chartsHeight","secondaryKeys","layersData","nonEmptyGroupsByFacets","sharedX","sharedY","scaleY","scaleLog","min","meta","geoms","boundsY","max","tempY","facetPrimaryKeys","facetLabels","splitTextByWidth","title","firstChart","lastChart","primaryGrouping","createMultilineDiscreteLabels","secondaryGrouping","inheritedAes","keys","DEFAULT_COMMON_AES","textMeasurer","TextMeasurer","getMaxStrWidth","strs","x","str","xTail","yTail","axisCaptionsWidthByRows","axisCaptionsWidthByColumns","measureMultilineDiscreteLabels","lodash","facetKey","ticks","specifier","tick","format","mainTitleHeight","TITLE_LINE_HEIGHT","TITLE_MARGIN","minMargin","legend","legendHeight","emptySizes","legendItems","layersHasInheritedAesByField","type","field","l","value","getUsedAes","primaryUsedAes","secondaryUsedAes","items","arrangeLegendParts","lastItem","legendWidth","LEGEND_OFFSET","dataFrame","settingsId","chartSettings","keyColumn","onlyPositive","onTooltipHintSwitch","component","DataFrameProvider","ChartsGroup","message","Error"],"mappings":"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","x_google_ignoreList":[0]}
|
|
@@ -147,7 +147,7 @@ class q extends a {
|
|
|
147
147
|
return e.type === "bar" && this.height === e.height;
|
|
148
148
|
}
|
|
149
149
|
}
|
|
150
|
-
class
|
|
150
|
+
class W extends a {
|
|
151
151
|
constructor(e) {
|
|
152
152
|
super(), t(this, "type", "stackedBar"), t(this, "normalize", !1), t(this, "aes", {
|
|
153
153
|
width: "auto",
|
|
@@ -164,7 +164,7 @@ class V extends a {
|
|
|
164
164
|
return e.type === "stackedBar" && e.normalize === this.normalize;
|
|
165
165
|
}
|
|
166
166
|
}
|
|
167
|
-
class
|
|
167
|
+
class P extends a {
|
|
168
168
|
constructor(e) {
|
|
169
169
|
super(), t(this, "type", "stackedArea"), t(this, "normalize", !1), t(this, "showBars", !0), t(this, "aes", {
|
|
170
170
|
barWidth: "auto",
|
|
@@ -182,7 +182,7 @@ class W extends a {
|
|
|
182
182
|
return e.type === "stackedArea" && e.normalize === this.normalize && e.showBars === this.showBars;
|
|
183
183
|
}
|
|
184
184
|
}
|
|
185
|
-
class
|
|
185
|
+
class V extends a {
|
|
186
186
|
constructor(e) {
|
|
187
187
|
super(), t(this, "type", "logo"), t(this, "normalize", !1), t(this, "aes", {
|
|
188
188
|
width: "auto",
|
|
@@ -341,9 +341,9 @@ class ee {
|
|
|
341
341
|
if (s.type === "bar")
|
|
342
342
|
return new q(s);
|
|
343
343
|
if (s.type === "stackedBar")
|
|
344
|
-
return new V(s);
|
|
345
|
-
if (s.type === "stackedArea")
|
|
346
344
|
return new W(s);
|
|
345
|
+
if (s.type === "stackedArea")
|
|
346
|
+
return new P(s);
|
|
347
347
|
if (s.type === "stat")
|
|
348
348
|
return new H(s);
|
|
349
349
|
if (s.type === "binnedDots")
|
|
@@ -353,7 +353,7 @@ class ee {
|
|
|
353
353
|
if (s.type === "sina")
|
|
354
354
|
return new _(s);
|
|
355
355
|
if (s.type === "logo")
|
|
356
|
-
return new
|
|
356
|
+
return new V(s);
|
|
357
357
|
B(s, "Unknown layer type");
|
|
358
358
|
}).filter(Boolean);
|
|
359
359
|
}
|
|
@@ -366,11 +366,11 @@ export {
|
|
|
366
366
|
T as DotLayer,
|
|
367
367
|
D as ErrorBarLayer,
|
|
368
368
|
A as LineLayer,
|
|
369
|
-
|
|
369
|
+
V as LogoPlotLayer,
|
|
370
370
|
M as PairedPointsLayer,
|
|
371
371
|
_ as SinaLayer,
|
|
372
|
-
|
|
373
|
-
|
|
372
|
+
P as StackedAreaLayer,
|
|
373
|
+
W as StackedBarLayer,
|
|
374
374
|
H as StatLayer,
|
|
375
375
|
G as ViolinLayer
|
|
376
376
|
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { j as o } from "../../node_modules/react/jsx-runtime.js";
|
|
2
2
|
import { BLACK as L } from "../../constants.js";
|
|
3
|
-
import { BandAxis as W } from "
|
|
3
|
+
import { BandAxis as W } from "../../common/BandAxis.js";
|
|
4
4
|
import { BarElement as $ } from "./layers/BarElement.js";
|
|
5
5
|
import { BinnedDotsElement as ee } from "./layers/BinnedDotsElement.js";
|
|
6
6
|
import { BoxElement as te } from "./layers/BoxElement.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Chart.js","sources":["../../../../../../../node_modules/@milaboratories/miplots4/src/discrete/components/Chart.tsx"],"sourcesContent":["import type {TooltipsData} from '../../common/Tooltip';\nimport {BLACK} from '../../constants';\nimport {BandAxis} from './BandAxis';\nimport {BarElement} from './layers/BarElement';\nimport {BinnedDotsElement} from './layers/BinnedDotsElement';\nimport {BoxElement} from './layers/BoxElement';\nimport {DotsGroupElement} from './layers/DotsGroupElement';\nimport {ErrorBarElement} from './layers/ErrorBarElement';\nimport {LineElement} from './layers/LineElement';\nimport {LogoElement} from './layers/LogoElement';\nimport {PairedPointsElement} from './layers/PairedPointsElement';\nimport {SinaElement} from './layers/SinaElement';\nimport {StackedAreaElement} from './layers/StackedAreaElement';\nimport {StackedBarElement} from './layers/StackedBarElement';\nimport {StatsPValue} from './layers/StatsPValue';\nimport {NumberAxis} from './NumberAxis';\nimport type {ChartDimensionsData, ChartScales, ChartSizes, Margins} from './types';\nimport type {DiscreteSettingsImpl} from '../DiscreteSettingsImpl';\nimport {getPairwiseStatLevelsCount} from '../utils/statsPValue';\nimport {ViolinElement} from './layers/ViolinElement';\nimport {DEFAULT_TICKS_SIZE, FACET_TITLE_LINE, P_VALUE_LINE_HEIGHT, TITLE_LINE} from '../constants';\nimport type {\n BarsData,\n BinnedDotsData,\n BoxesData,\n DotsData,\n ErrorBarsData,\n LayerData,\n LinesData, LogoPlotData,\n PairedPointsData,\n SinaData, StackedAreaData,\n StackedBarsData,\n StatsData,\n ViolinsData,\n} from '../layers/types';\nimport type {GroupingData} from '../../types';\nimport type {ColumnName, FrameType, Orientation} from '../../types';\nimport {Grid} from './Grid';\nimport React, {useState} from 'react';\n\ninterface ChartProps {\n facetSettings?: DiscreteSettingsImpl['facetSettings'];\n chartSizes: ChartSizes;\n dimensions: ChartDimensionsData;\n margins: Margins;\n scales: ChartScales;\n orientation: Orientation;\n facetKey: string;\n facetTitle: string[]; // can be multiline\n layersData: LayerData[];\n statsData: StatsData[];\n xAxis: DiscreteSettingsImpl['chartSettings']['xAxis'];\n yAxis: DiscreteSettingsImpl['chartSettings']['yAxis'];\n frameType: FrameType;\n keyColumn: ColumnName | null;\n tooltips: DiscreteSettingsImpl['chartSettings']['tooltips'];\n tooltipsContainer?: Element;\n xLabels: Record<string, string[]>;\n onlyPositive: boolean;\n secondaryGrouping: GroupingData;\n tooltipsData: TooltipsData<unknown>;\n}\n\nfunction getYShiftsForStats(statsData: StatsData[], primaryKeys: string[], facetKey: string) {\n if (!statsData.length) {\n return [];\n }\n const yShifts = [0];\n for (let i = 0; i < statsData.length - 1; i++) {\n const stat = statsData[i];\n if (stat.meta.statType === 'pairwise') {\n const lineCount = getPairwiseStatLevelsCount(\n stat.values[facetKey],\n primaryKeys,\n stat.meta.significanceLevels,\n stat.meta.ns\n );\n yShifts.push(yShifts[yShifts.length - 1] + P_VALUE_LINE_HEIGHT * lineCount);\n } else {\n yShifts.push(yShifts[yShifts.length - 1] + P_VALUE_LINE_HEIGHT);\n }\n }\n return yShifts;\n}\n\nfunction getAxisTitle(title: string | ColumnName): string {\n if (typeof title === 'string') {\n return title;\n }\n return title.value;\n}\n\nexport function Chart({\n facetSettings,\n facetTitle,\n dimensions,\n scales,\n orientation,\n layersData,\n statsData,\n facetKey,\n xAxis,\n yAxis,\n frameType,\n tooltips,\n tooltipsContainer,\n keyColumn,\n chartSizes,\n margins,\n xLabels,\n onlyPositive,\n secondaryGrouping,\n tooltipsData,\n}: ChartProps) {\n const [activeElementContainer, setActiveElementContainer] = useState<SVGGElement>();\n const isVertical = orientation === 'vertical';\n const yShifts = getYShiftsForStats(statsData, scales.xPrimary.domain(), facetKey);\n const tickSizeX = xAxis.showTicks ? DEFAULT_TICKS_SIZE : 0;\n const tickSizeY = yAxis.showTicks ? DEFAULT_TICKS_SIZE : 0;\n const xTitle = getAxisTitle(xAxis.title);\n const yTitle = getAxisTitle(yAxis.title);\n const needLeftAxis =\n dimensions.chartEdgeSides.includes('left') ||\n (isVertical && !facetSettings?.sharedY) ||\n (!isVertical && !facetSettings?.sharedX);\n const needBottomAxis =\n dimensions.chartEdgeSides.includes('bottom') ||\n (isVertical && !facetSettings?.sharedX) ||\n (!isVertical && !facetSettings?.sharedY);\n const needLeftAxisTitle = dimensions.chartEdgeSides.includes('left');\n const needBottomAxisTitle = dimensions.chartEdgeSides.includes('bottom');\n\n const {width, height} = dimensions.inner;\n const {left, top, padding} = dimensions;\n\n const sideDistances = {\n left: margins.left + left + padding.left,\n right: chartSizes.totalWidth - (margins.left + left + padding.left),\n top: margins.top + top + padding.top,\n bottom: chartSizes.totalHeight - (margins.top + top + padding.top),\n };\n\n const chartTransform = `translate(${left + padding.left},${top + padding.top})`;\n\n const debug = false;\n return (\n <g transform={chartTransform}>\n {debug && (\n <g>\n <rect width={width} height={padding.top} x={0} y={-padding.top} fill=\"none\" stroke=\"black\" />\n <rect width={width} height={padding.bottom} x={0} y={height} fill=\"none\" stroke=\"black\" />\n <rect width={padding.left} height={height} x={-padding.left} y={0} fill=\"none\" stroke=\"black\" />\n <rect width={padding.right} height={height} x={width} y={0} fill=\"none\" stroke=\"black\" />\n </g>\n )}\n {facetTitle.length && (\n <g>\n {frameType === 'full' && <rect x=\"0\" y={-padding.top} height={padding.top} width={width} fill=\"#F7F8FA\" stroke={BLACK} />}\n {facetTitle.map((titleLine, idx) => {\n const linesCount = facetTitle.length;\n const topOffset = (padding.top - FACET_TITLE_LINE * linesCount) / 2;\n return (\n <text\n key={idx}\n fontSize=\"14px\"\n fontWeight=\"500\"\n fill={BLACK}\n x={width / 2}\n dy={topOffset + FACET_TITLE_LINE / 2 - padding.top}\n y={idx * FACET_TITLE_LINE}\n textAnchor=\"middle\"\n dominantBaseline=\"central\"\n >\n {titleLine}\n </text>\n );\n })}\n </g>\n )}\n <g dominantBaseline=\"central\" textAnchor=\"middle\" fontWeight=\"500\" fontSize=\"14px\" fill={BLACK}>\n {needBottomAxisTitle && (\n <text x={width / 2} y={height + padding.bottom - TITLE_LINE / 2}>\n {isVertical ? xTitle : yTitle}\n </text>\n )}\n {needBottomAxisTitle && debug && (\n <rect\n x=\"0\"\n y={height + padding.bottom - TITLE_LINE}\n width={width}\n height={TITLE_LINE}\n fill=\"none\"\n stroke=\"black\"\n />\n )}\n {needLeftAxisTitle && (\n <text\n x={-padding.left + TITLE_LINE / 2}\n y={height / 2}\n transform={`rotate(-90,${-padding.left + TITLE_LINE / 2},${height / 2})`}\n >\n {isVertical ? yTitle : xTitle}\n </text>\n )}\n {needLeftAxisTitle && debug && (\n <rect x={-padding.left} y=\"0\" width={TITLE_LINE} height={height} fill=\"none\" stroke=\"black\" />\n )}\n </g>\n <Grid\n orientation={orientation}\n width={width}\n height={height}\n scaleX={scales.xPrimary}\n scaleY={scales.y}\n axisX={xAxis}\n axisY={yAxis}\n frameType={frameType}\n />\n {needBottomAxis && (\n <g transform={`translate(0,${height})`}>\n {isVertical ? (\n <BandAxis\n scale={scales.xPrimary}\n orient=\"bottom\"\n labelsPosition={xAxis.labelsPosition}\n tickSize={tickSizeX}\n labels={xLabels}\n />\n ) : (\n <NumberAxis scale={scales.y} onlyPositive={onlyPositive} orient=\"bottom\" tickSize={tickSizeY} hiddenLabels={yAxis.hiddenLabels} />\n )}\n </g>\n )}\n {needLeftAxis && (\n <g>\n {isVertical ? (\n <NumberAxis scale={scales.y} onlyPositive={onlyPositive} orient=\"left\" tickSize={tickSizeY} hiddenLabels={yAxis.hiddenLabels} />\n ) : (\n <BandAxis\n scale={scales.xPrimary}\n orient=\"left\"\n labelsPosition={xAxis.labelsPosition}\n tickSize={tickSizeX}\n labels={xLabels}\n />\n )}\n </g>\n )}\n <g>\n {layersData.map(layerData => (\n <g key={layerData.type}>\n {layerData.type === 'box' &&\n (layerData as BoxesData).geoms[facetKey].map(box => (\n <BoxElement\n key={box.key}\n facetKey={facetKey}\n box={box}\n elementsAmount={layerData.geoms[facetKey].length}\n scales={scales}\n orientation={orientation}\n aes={(layerData as BoxesData).aes}\n hasKeyFromColumn={keyColumn !== null}\n sideDistances={sideDistances}\n showTooltips={tooltips.box.show}\n tooltipsData={tooltipsData}\n activeElementContainer={activeElementContainer}\n tooltipsContainer={tooltipsContainer}\n />\n ))}\n {layerData.type === 'violin' &&\n (layerData as ViolinsData).geoms[facetKey].map(violin => (\n <ViolinElement\n key={violin.key}\n facetKey={facetKey}\n violin={violin}\n elementsAmount={layerData.geoms[facetKey].length}\n scales={scales}\n orientation={orientation}\n maxViolinDensity={(layerData as ViolinsData).meta.maxDensity}\n aes={(layerData as ViolinsData).aes}\n sideDistances={sideDistances}\n showTooltips={tooltips.violin.show}\n tooltipsData={tooltipsData}\n activeElementContainer={activeElementContainer}\n tooltipsContainer={tooltipsContainer}\n />\n ))}\n {layerData.type === 'dot' &&\n (layerData as DotsData).geoms[facetKey].map(dotsGroup => (\n <DotsGroupElement\n key={dotsGroup.key}\n facetKey={facetKey}\n geom={dotsGroup}\n scales={scales}\n orientation={orientation}\n aes={(layerData as DotsData).aes}\n hasKeyFromColumn={keyColumn !== null}\n sideDistances={sideDistances}\n showTooltips={tooltips.dot.show}\n tooltipsData={tooltipsData}\n activeElementContainer={activeElementContainer}\n tooltipsContainer={tooltipsContainer}\n />\n ))}\n {layerData.type === 'line' &&\n (layerData as LinesData).geoms[facetKey].map(line => (\n <LineElement\n key={line.key}\n facetKey={facetKey}\n line={line}\n scales={scales}\n orientation={orientation}\n sideDistances={sideDistances}\n aes={(layerData as LinesData).aes}\n showTooltips={tooltips.line.show}\n secondaryGrouping={secondaryGrouping}\n tooltipsData={tooltipsData}\n activeElementContainer={activeElementContainer}\n tooltipsContainer={tooltipsContainer}\n />\n ))}\n {layerData.type === 'errorbar' &&\n (layerData as ErrorBarsData).geoms[facetKey].map(errorBar => (\n <ErrorBarElement\n key={errorBar.key}\n facetKey={facetKey}\n errorBar={errorBar}\n scales={scales}\n orientation={orientation}\n aes={(layerData as ErrorBarsData).aes}\n sideDistances={sideDistances}\n showTooltips={tooltips.errorBar.show}\n tooltipsData={tooltipsData}\n activeElementContainer={activeElementContainer}\n tooltipsContainer={tooltipsContainer}\n />\n ))}\n {layerData.type === 'bar' &&\n (layerData as BarsData).geoms[facetKey].map(bar => (\n <BarElement\n key={bar.key}\n bar={bar}\n scales={scales}\n orientation={orientation}\n aes={(layerData as BarsData).aes}\n />\n ))}\n {layerData.type === 'stackedBar' &&\n (layerData as StackedBarsData).geoms[facetKey].map(geom => (\n <StackedBarElement\n key={geom.key}\n facetKey={facetKey}\n geom={geom}\n elementsAmount={layerData.geoms[facetKey].length}\n scales={scales}\n orientation={orientation}\n aes={(layerData as StackedBarsData).aes}\n normalize={(layerData as StackedBarsData).meta.normalize}\n sideDistances={sideDistances}\n showTooltips={tooltips.stackedBar.show}\n secondaryGrouping={secondaryGrouping}\n tooltipsData={tooltipsData}\n activeElementContainer={activeElementContainer}\n tooltipsContainer={tooltipsContainer}\n />\n ))}\n {layerData.type === 'stackedArea' && (\n <StackedAreaElement\n key='stackedArea'\n facetKey={facetKey}\n layerData={layerData as StackedAreaData}\n scales={scales}\n orientation={orientation}\n sideDistances={sideDistances}\n showTooltips={tooltips.stackedBar.show}\n secondaryGrouping={secondaryGrouping}\n tooltipsData={tooltipsData}\n activeElementContainer={activeElementContainer}\n tooltipsContainer={tooltipsContainer}\n />\n )}\n {layerData.type === 'binnedDots' &&\n (layerData as BinnedDotsData).geoms[facetKey].map(geom => (\n <BinnedDotsElement\n key={geom.key}\n facetKey={facetKey}\n geom={geom}\n scales={scales}\n orientation={orientation}\n aes={(layerData as BinnedDotsData).aes}\n binsCount={(layerData as BinnedDotsData).meta.binsCount}\n min={(layerData as BinnedDotsData).meta.minY}\n max={(layerData as BinnedDotsData).meta.maxY}\n hasKeyFromColumn={(layerData as BinnedDotsData).meta.hasKeyFromColumn}\n sideDistances={sideDistances}\n showTooltips={tooltips.stackedBar.show}\n tooltipsData={tooltipsData}\n activeElementContainer={activeElementContainer}\n tooltipsContainer={tooltipsContainer}\n />\n ))}\n {layerData.type === 'pairedPoints' &&\n (layerData as PairedPointsData).geoms[facetKey].map(geom => (\n <PairedPointsElement\n key={geom.id}\n facetKey={facetKey}\n geom={geom}\n scales={scales}\n orientation={orientation}\n sideDistances={sideDistances}\n aes={(layerData as PairedPointsData).aes}\n showTooltips={tooltips.pairedPoints.show}\n tooltipsData={tooltipsData}\n activeElementContainer={activeElementContainer}\n tooltipsContainer={tooltipsContainer}\n />\n ))}\n {layerData.type === 'sina' &&\n (layerData as SinaData).geoms[facetKey].map(geom => (\n <SinaElement\n key={geom.key}\n geom={geom}\n scales={scales}\n orientation={orientation}\n sideDistances={sideDistances}\n aes={(layerData as SinaData).aes}\n hasKeyFromColumn={keyColumn !== null}\n showTooltips={false}\n tooltipsContainer={tooltipsContainer}\n />\n ))}\n {layerData.type === 'logo' &&\n (layerData as LogoPlotData).geoms[facetKey].map(geom => (\n <LogoElement\n key={geom.key}\n facetKey={facetKey}\n geom={geom}\n elementsAmount={layerData.geoms[facetKey].length}\n scales={scales}\n orientation={orientation}\n aes={(layerData as LogoPlotData).aes}\n normalize={(layerData as LogoPlotData).meta.normalize}\n sideDistances={sideDistances}\n showTooltips={tooltips.logo.show}\n tooltipsData={tooltipsData}\n activeElementContainer={activeElementContainer}\n tooltipsContainer={tooltipsContainer}\n />\n ))}\n </g>\n ))}\n {statsData.map((statsLayer, idx) => (\n <StatsPValue\n yShift={yShifts[idx]}\n scales={scales}\n orientation={orientation}\n statType={statsLayer.meta.statType}\n values={statsLayer.values[facetKey]}\n testMethod={statsLayer.meta.testMethod}\n format={statsLayer.meta.format}\n ns={statsLayer.meta.ns}\n key={`${statsLayer.meta.statType}_${statsLayer.meta.testMethod}`}\n significanceLevels={statsLayer.meta.significanceLevels}\n />\n ))}\n </g>\n <g>\n {tooltipsData.fixed && <rect width={chartSizes.chartWidth} height={chartSizes.chartHeight} fill=\"rgba(255, 255, 255, 0.8)\"/>}\n <g\n ref={node => {\n if (node && !activeElementContainer) {\n setActiveElementContainer(node);\n }\n }}\n />\n </g>\n </g>\n );\n}\n"],"names":["getYShiftsForStats","statsData","primaryKeys","facetKey","yShifts","stat","lineCount","getPairwiseStatLevelsCount","P_VALUE_LINE_HEIGHT","getAxisTitle","title","Chart","facetSettings","facetTitle","dimensions","scales","orientation","layersData","xAxis","yAxis","frameType","tooltips","tooltipsContainer","keyColumn","chartSizes","margins","xLabels","onlyPositive","secondaryGrouping","tooltipsData","activeElementContainer","setActiveElementContainer","useState","isVertical","tickSizeX","DEFAULT_TICKS_SIZE","tickSizeY","xTitle","yTitle","needLeftAxis","needBottomAxis","needLeftAxisTitle","needBottomAxisTitle","width","height","left","top","padding","sideDistances","chartTransform","debug","jsxs","jsx","BLACK","titleLine","idx","linesCount","topOffset","FACET_TITLE_LINE","TITLE_LINE","Grid","BandAxis","NumberAxis","e","layerData","box","BoxElement","violin","ViolinElement","dotsGroup","DotsGroupElement","line","LineElement","errorBar","ErrorBarElement","bar","BarElement","geom","StackedBarElement","StackedAreaElement","BinnedDotsElement","PairedPointsElement","SinaElement","LogoElement","statsLayer","StatsPValue","node"],"mappings":"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","x_google_ignoreList":[0]}
|
|
1
|
+
{"version":3,"file":"Chart.js","sources":["../../../../../../../node_modules/@milaboratories/miplots4/src/discrete/components/Chart.tsx"],"sourcesContent":["import type {TooltipsData} from '../../common/Tooltip';\nimport {BLACK} from '../../constants';\nimport {BandAxis} from '../../common/BandAxis';\nimport {BarElement} from './layers/BarElement';\nimport {BinnedDotsElement} from './layers/BinnedDotsElement';\nimport {BoxElement} from './layers/BoxElement';\nimport {DotsGroupElement} from './layers/DotsGroupElement';\nimport {ErrorBarElement} from './layers/ErrorBarElement';\nimport {LineElement} from './layers/LineElement';\nimport {LogoElement} from './layers/LogoElement';\nimport {PairedPointsElement} from './layers/PairedPointsElement';\nimport {SinaElement} from './layers/SinaElement';\nimport {StackedAreaElement} from './layers/StackedAreaElement';\nimport {StackedBarElement} from './layers/StackedBarElement';\nimport {StatsPValue} from './layers/StatsPValue';\nimport {NumberAxis} from './NumberAxis';\nimport type {ChartDimensionsData, ChartScales, ChartSizes, Margins} from './types';\nimport type {DiscreteSettingsImpl} from '../DiscreteSettingsImpl';\nimport {getPairwiseStatLevelsCount} from '../utils/statsPValue';\nimport {ViolinElement} from './layers/ViolinElement';\nimport {DEFAULT_TICKS_SIZE, FACET_TITLE_LINE, P_VALUE_LINE_HEIGHT, TITLE_LINE} from '../constants';\nimport type {\n BarsData,\n BinnedDotsData,\n BoxesData,\n DotsData,\n ErrorBarsData,\n LayerData,\n LinesData, LogoPlotData,\n PairedPointsData,\n SinaData, StackedAreaData,\n StackedBarsData,\n StatsData,\n ViolinsData,\n} from '../layers/types';\nimport type {GroupingData} from '../../types';\nimport type {ColumnName, FrameType, Orientation} from '../../types';\nimport {Grid} from './Grid';\nimport React, {useState} from 'react';\n\ninterface ChartProps {\n facetSettings?: DiscreteSettingsImpl['facetSettings'];\n chartSizes: ChartSizes;\n dimensions: ChartDimensionsData;\n margins: Margins;\n scales: ChartScales;\n orientation: Orientation;\n facetKey: string;\n facetTitle: string[]; // can be multiline\n layersData: LayerData[];\n statsData: StatsData[];\n xAxis: DiscreteSettingsImpl['chartSettings']['xAxis'];\n yAxis: DiscreteSettingsImpl['chartSettings']['yAxis'];\n frameType: FrameType;\n keyColumn: ColumnName | null;\n tooltips: DiscreteSettingsImpl['chartSettings']['tooltips'];\n tooltipsContainer?: Element;\n xLabels: Record<string, string[]>;\n onlyPositive: boolean;\n secondaryGrouping: GroupingData;\n tooltipsData: TooltipsData<unknown>;\n}\n\nfunction getYShiftsForStats(statsData: StatsData[], primaryKeys: string[], facetKey: string) {\n if (!statsData.length) {\n return [];\n }\n const yShifts = [0];\n for (let i = 0; i < statsData.length - 1; i++) {\n const stat = statsData[i];\n if (stat.meta.statType === 'pairwise') {\n const lineCount = getPairwiseStatLevelsCount(\n stat.values[facetKey],\n primaryKeys,\n stat.meta.significanceLevels,\n stat.meta.ns\n );\n yShifts.push(yShifts[yShifts.length - 1] + P_VALUE_LINE_HEIGHT * lineCount);\n } else {\n yShifts.push(yShifts[yShifts.length - 1] + P_VALUE_LINE_HEIGHT);\n }\n }\n return yShifts;\n}\n\nfunction getAxisTitle(title: string | ColumnName): string {\n if (typeof title === 'string') {\n return title;\n }\n return title.value;\n}\n\nexport function Chart({\n facetSettings,\n facetTitle,\n dimensions,\n scales,\n orientation,\n layersData,\n statsData,\n facetKey,\n xAxis,\n yAxis,\n frameType,\n tooltips,\n tooltipsContainer,\n keyColumn,\n chartSizes,\n margins,\n xLabels,\n onlyPositive,\n secondaryGrouping,\n tooltipsData,\n}: ChartProps) {\n const [activeElementContainer, setActiveElementContainer] = useState<SVGGElement>();\n const isVertical = orientation === 'vertical';\n const yShifts = getYShiftsForStats(statsData, scales.xPrimary.domain(), facetKey);\n const tickSizeX = xAxis.showTicks ? DEFAULT_TICKS_SIZE : 0;\n const tickSizeY = yAxis.showTicks ? DEFAULT_TICKS_SIZE : 0;\n const xTitle = getAxisTitle(xAxis.title);\n const yTitle = getAxisTitle(yAxis.title);\n const needLeftAxis =\n dimensions.chartEdgeSides.includes('left') ||\n (isVertical && !facetSettings?.sharedY) ||\n (!isVertical && !facetSettings?.sharedX);\n const needBottomAxis =\n dimensions.chartEdgeSides.includes('bottom') ||\n (isVertical && !facetSettings?.sharedX) ||\n (!isVertical && !facetSettings?.sharedY);\n const needLeftAxisTitle = dimensions.chartEdgeSides.includes('left');\n const needBottomAxisTitle = dimensions.chartEdgeSides.includes('bottom');\n\n const {width, height} = dimensions.inner;\n const {left, top, padding} = dimensions;\n\n const sideDistances = {\n left: margins.left + left + padding.left,\n right: chartSizes.totalWidth - (margins.left + left + padding.left),\n top: margins.top + top + padding.top,\n bottom: chartSizes.totalHeight - (margins.top + top + padding.top),\n };\n\n const chartTransform = `translate(${left + padding.left},${top + padding.top})`;\n\n const debug = false;\n return (\n <g transform={chartTransform}>\n {debug && (\n <g>\n <rect width={width} height={padding.top} x={0} y={-padding.top} fill=\"none\" stroke=\"black\" />\n <rect width={width} height={padding.bottom} x={0} y={height} fill=\"none\" stroke=\"black\" />\n <rect width={padding.left} height={height} x={-padding.left} y={0} fill=\"none\" stroke=\"black\" />\n <rect width={padding.right} height={height} x={width} y={0} fill=\"none\" stroke=\"black\" />\n </g>\n )}\n {facetTitle.length && (\n <g>\n {frameType === 'full' && <rect x=\"0\" y={-padding.top} height={padding.top} width={width} fill=\"#F7F8FA\" stroke={BLACK} />}\n {facetTitle.map((titleLine, idx) => {\n const linesCount = facetTitle.length;\n const topOffset = (padding.top - FACET_TITLE_LINE * linesCount) / 2;\n return (\n <text\n key={idx}\n fontSize=\"14px\"\n fontWeight=\"500\"\n fill={BLACK}\n x={width / 2}\n dy={topOffset + FACET_TITLE_LINE / 2 - padding.top}\n y={idx * FACET_TITLE_LINE}\n textAnchor=\"middle\"\n dominantBaseline=\"central\"\n >\n {titleLine}\n </text>\n );\n })}\n </g>\n )}\n <g dominantBaseline=\"central\" textAnchor=\"middle\" fontWeight=\"500\" fontSize=\"14px\" fill={BLACK}>\n {needBottomAxisTitle && (\n <text x={width / 2} y={height + padding.bottom - TITLE_LINE / 2}>\n {isVertical ? xTitle : yTitle}\n </text>\n )}\n {needBottomAxisTitle && debug && (\n <rect\n x=\"0\"\n y={height + padding.bottom - TITLE_LINE}\n width={width}\n height={TITLE_LINE}\n fill=\"none\"\n stroke=\"black\"\n />\n )}\n {needLeftAxisTitle && (\n <text\n x={-padding.left + TITLE_LINE / 2}\n y={height / 2}\n transform={`rotate(-90,${-padding.left + TITLE_LINE / 2},${height / 2})`}\n >\n {isVertical ? yTitle : xTitle}\n </text>\n )}\n {needLeftAxisTitle && debug && (\n <rect x={-padding.left} y=\"0\" width={TITLE_LINE} height={height} fill=\"none\" stroke=\"black\" />\n )}\n </g>\n <Grid\n orientation={orientation}\n width={width}\n height={height}\n scaleX={scales.xPrimary}\n scaleY={scales.y}\n axisX={xAxis}\n axisY={yAxis}\n frameType={frameType}\n />\n {needBottomAxis && (\n <g transform={`translate(0,${height})`}>\n {isVertical ? (\n <BandAxis\n scale={scales.xPrimary}\n orient=\"bottom\"\n labelsPosition={xAxis.labelsPosition}\n tickSize={tickSizeX}\n labels={xLabels}\n />\n ) : (\n <NumberAxis scale={scales.y} onlyPositive={onlyPositive} orient=\"bottom\" tickSize={tickSizeY} hiddenLabels={yAxis.hiddenLabels} />\n )}\n </g>\n )}\n {needLeftAxis && (\n <g>\n {isVertical ? (\n <NumberAxis scale={scales.y} onlyPositive={onlyPositive} orient=\"left\" tickSize={tickSizeY} hiddenLabels={yAxis.hiddenLabels} />\n ) : (\n <BandAxis\n scale={scales.xPrimary}\n orient=\"left\"\n labelsPosition={xAxis.labelsPosition}\n tickSize={tickSizeX}\n labels={xLabels}\n />\n )}\n </g>\n )}\n <g>\n {layersData.map(layerData => (\n <g key={layerData.type}>\n {layerData.type === 'box' &&\n (layerData as BoxesData).geoms[facetKey].map(box => (\n <BoxElement\n key={box.key}\n facetKey={facetKey}\n box={box}\n elementsAmount={layerData.geoms[facetKey].length}\n scales={scales}\n orientation={orientation}\n aes={(layerData as BoxesData).aes}\n hasKeyFromColumn={keyColumn !== null}\n sideDistances={sideDistances}\n showTooltips={tooltips.box.show}\n tooltipsData={tooltipsData}\n activeElementContainer={activeElementContainer}\n tooltipsContainer={tooltipsContainer}\n />\n ))}\n {layerData.type === 'violin' &&\n (layerData as ViolinsData).geoms[facetKey].map(violin => (\n <ViolinElement\n key={violin.key}\n facetKey={facetKey}\n violin={violin}\n elementsAmount={layerData.geoms[facetKey].length}\n scales={scales}\n orientation={orientation}\n maxViolinDensity={(layerData as ViolinsData).meta.maxDensity}\n aes={(layerData as ViolinsData).aes}\n sideDistances={sideDistances}\n showTooltips={tooltips.violin.show}\n tooltipsData={tooltipsData}\n activeElementContainer={activeElementContainer}\n tooltipsContainer={tooltipsContainer}\n />\n ))}\n {layerData.type === 'dot' &&\n (layerData as DotsData).geoms[facetKey].map(dotsGroup => (\n <DotsGroupElement\n key={dotsGroup.key}\n facetKey={facetKey}\n geom={dotsGroup}\n scales={scales}\n orientation={orientation}\n aes={(layerData as DotsData).aes}\n hasKeyFromColumn={keyColumn !== null}\n sideDistances={sideDistances}\n showTooltips={tooltips.dot.show}\n tooltipsData={tooltipsData}\n activeElementContainer={activeElementContainer}\n tooltipsContainer={tooltipsContainer}\n />\n ))}\n {layerData.type === 'line' &&\n (layerData as LinesData).geoms[facetKey].map(line => (\n <LineElement\n key={line.key}\n facetKey={facetKey}\n line={line}\n scales={scales}\n orientation={orientation}\n sideDistances={sideDistances}\n aes={(layerData as LinesData).aes}\n showTooltips={tooltips.line.show}\n secondaryGrouping={secondaryGrouping}\n tooltipsData={tooltipsData}\n activeElementContainer={activeElementContainer}\n tooltipsContainer={tooltipsContainer}\n />\n ))}\n {layerData.type === 'errorbar' &&\n (layerData as ErrorBarsData).geoms[facetKey].map(errorBar => (\n <ErrorBarElement\n key={errorBar.key}\n facetKey={facetKey}\n errorBar={errorBar}\n scales={scales}\n orientation={orientation}\n aes={(layerData as ErrorBarsData).aes}\n sideDistances={sideDistances}\n showTooltips={tooltips.errorBar.show}\n tooltipsData={tooltipsData}\n activeElementContainer={activeElementContainer}\n tooltipsContainer={tooltipsContainer}\n />\n ))}\n {layerData.type === 'bar' &&\n (layerData as BarsData).geoms[facetKey].map(bar => (\n <BarElement\n key={bar.key}\n bar={bar}\n scales={scales}\n orientation={orientation}\n aes={(layerData as BarsData).aes}\n />\n ))}\n {layerData.type === 'stackedBar' &&\n (layerData as StackedBarsData).geoms[facetKey].map(geom => (\n <StackedBarElement\n key={geom.key}\n facetKey={facetKey}\n geom={geom}\n elementsAmount={layerData.geoms[facetKey].length}\n scales={scales}\n orientation={orientation}\n aes={(layerData as StackedBarsData).aes}\n normalize={(layerData as StackedBarsData).meta.normalize}\n sideDistances={sideDistances}\n showTooltips={tooltips.stackedBar.show}\n secondaryGrouping={secondaryGrouping}\n tooltipsData={tooltipsData}\n activeElementContainer={activeElementContainer}\n tooltipsContainer={tooltipsContainer}\n />\n ))}\n {layerData.type === 'stackedArea' && (\n <StackedAreaElement\n key='stackedArea'\n facetKey={facetKey}\n layerData={layerData as StackedAreaData}\n scales={scales}\n orientation={orientation}\n sideDistances={sideDistances}\n showTooltips={tooltips.stackedBar.show}\n secondaryGrouping={secondaryGrouping}\n tooltipsData={tooltipsData}\n activeElementContainer={activeElementContainer}\n tooltipsContainer={tooltipsContainer}\n />\n )}\n {layerData.type === 'binnedDots' &&\n (layerData as BinnedDotsData).geoms[facetKey].map(geom => (\n <BinnedDotsElement\n key={geom.key}\n facetKey={facetKey}\n geom={geom}\n scales={scales}\n orientation={orientation}\n aes={(layerData as BinnedDotsData).aes}\n binsCount={(layerData as BinnedDotsData).meta.binsCount}\n min={(layerData as BinnedDotsData).meta.minY}\n max={(layerData as BinnedDotsData).meta.maxY}\n hasKeyFromColumn={(layerData as BinnedDotsData).meta.hasKeyFromColumn}\n sideDistances={sideDistances}\n showTooltips={tooltips.stackedBar.show}\n tooltipsData={tooltipsData}\n activeElementContainer={activeElementContainer}\n tooltipsContainer={tooltipsContainer}\n />\n ))}\n {layerData.type === 'pairedPoints' &&\n (layerData as PairedPointsData).geoms[facetKey].map(geom => (\n <PairedPointsElement\n key={geom.id}\n facetKey={facetKey}\n geom={geom}\n scales={scales}\n orientation={orientation}\n sideDistances={sideDistances}\n aes={(layerData as PairedPointsData).aes}\n showTooltips={tooltips.pairedPoints.show}\n tooltipsData={tooltipsData}\n activeElementContainer={activeElementContainer}\n tooltipsContainer={tooltipsContainer}\n />\n ))}\n {layerData.type === 'sina' &&\n (layerData as SinaData).geoms[facetKey].map(geom => (\n <SinaElement\n key={geom.key}\n geom={geom}\n scales={scales}\n orientation={orientation}\n sideDistances={sideDistances}\n aes={(layerData as SinaData).aes}\n hasKeyFromColumn={keyColumn !== null}\n showTooltips={false}\n tooltipsContainer={tooltipsContainer}\n />\n ))}\n {layerData.type === 'logo' &&\n (layerData as LogoPlotData).geoms[facetKey].map(geom => (\n <LogoElement\n key={geom.key}\n facetKey={facetKey}\n geom={geom}\n elementsAmount={layerData.geoms[facetKey].length}\n scales={scales}\n orientation={orientation}\n aes={(layerData as LogoPlotData).aes}\n normalize={(layerData as LogoPlotData).meta.normalize}\n sideDistances={sideDistances}\n showTooltips={tooltips.logo.show}\n tooltipsData={tooltipsData}\n activeElementContainer={activeElementContainer}\n tooltipsContainer={tooltipsContainer}\n />\n ))}\n </g>\n ))}\n {statsData.map((statsLayer, idx) => (\n <StatsPValue\n yShift={yShifts[idx]}\n scales={scales}\n orientation={orientation}\n statType={statsLayer.meta.statType}\n values={statsLayer.values[facetKey]}\n testMethod={statsLayer.meta.testMethod}\n format={statsLayer.meta.format}\n ns={statsLayer.meta.ns}\n key={`${statsLayer.meta.statType}_${statsLayer.meta.testMethod}`}\n significanceLevels={statsLayer.meta.significanceLevels}\n />\n ))}\n </g>\n <g>\n {tooltipsData.fixed && <rect width={chartSizes.chartWidth} height={chartSizes.chartHeight} fill=\"rgba(255, 255, 255, 0.8)\"/>}\n <g\n ref={node => {\n if (node && !activeElementContainer) {\n setActiveElementContainer(node);\n }\n }}\n />\n </g>\n </g>\n );\n}\n"],"names":["getYShiftsForStats","statsData","primaryKeys","facetKey","yShifts","stat","lineCount","getPairwiseStatLevelsCount","P_VALUE_LINE_HEIGHT","getAxisTitle","title","Chart","facetSettings","facetTitle","dimensions","scales","orientation","layersData","xAxis","yAxis","frameType","tooltips","tooltipsContainer","keyColumn","chartSizes","margins","xLabels","onlyPositive","secondaryGrouping","tooltipsData","activeElementContainer","setActiveElementContainer","useState","isVertical","tickSizeX","DEFAULT_TICKS_SIZE","tickSizeY","xTitle","yTitle","needLeftAxis","needBottomAxis","needLeftAxisTitle","needBottomAxisTitle","width","height","left","top","padding","sideDistances","chartTransform","debug","jsxs","jsx","BLACK","titleLine","idx","linesCount","topOffset","FACET_TITLE_LINE","TITLE_LINE","Grid","BandAxis","NumberAxis","e","layerData","box","BoxElement","violin","ViolinElement","dotsGroup","DotsGroupElement","line","LineElement","errorBar","ErrorBarElement","bar","BarElement","geom","StackedBarElement","StackedAreaElement","BinnedDotsElement","PairedPointsElement","SinaElement","LogoElement","statsLayer","StatsPValue","node"],"mappings":"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","x_google_ignoreList":[0]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Grid.js","sources":["../../../../../../../node_modules/@milaboratories/miplots4/src/discrete/components/Grid.tsx"],"sourcesContent":["import {BLACK, GRID_GRAY} from '../../constants';\nimport {MIN_TICK_STEP} from '../constants';\nimport type {
|
|
1
|
+
{"version":3,"file":"Grid.js","sources":["../../../../../../../node_modules/@milaboratories/miplots4/src/discrete/components/Grid.tsx"],"sourcesContent":["import {BLACK, GRID_GRAY} from '../../constants';\nimport {MIN_TICK_STEP} from '../constants';\nimport type {AxisSettingsContinuous, AxisSettingsDiscrete, FrameType} from '../../types';\nimport type {Orientation} from '../../types';\nimport type {ScaleBand, ScaleLinear, ScaleLogarithmic} from 'd3-scale';\nimport React from 'react';\nimport {useEffect, useState} from 'react';\n\nconst GRID_FRAME_WIDTH = 1;\n\ninterface GridProps {\n scaleY: ScaleLinear<number, number> | ScaleLogarithmic<number, number>;\n scaleX: ScaleBand<string>;\n width: number;\n height: number;\n orientation: Orientation;\n axisX: AxisSettingsDiscrete;\n axisY: AxisSettingsContinuous;\n frameType: FrameType;\n}\n\nexport function Grid({scaleX, scaleY, orientation, width, height, axisX, axisY, frameType}: GridProps) {\n const [ticksX, setTicksX] = useState<string[] | number[]>(scaleX.domain());\n\n // set ticks count depending on chart size\n const range = Math.abs(scaleY.range()[0] - scaleY.range()[1]);\n const ticksCount = Math.min(Math.floor(range / MIN_TICK_STEP), 10);\n const [ticksY, setTicksY] = useState<string[] | number[]>(scaleY.ticks(ticksCount));\n const halfXGroup = scaleX.bandwidth() / 2;\n const getXScaleShift = (d: string | number) => (scaleX(d as string) ?? 0) + halfXGroup;\n const getYScaleShift = (d: string | number) => scaleY(d as number);\n const isVertical = orientation === 'vertical';\n\n useEffect(() => {\n const ticksX = scaleX.domain();\n const ticksY = scaleY.ticks(ticksCount);\n\n setTicksX(ticksX);\n setTicksY(ticksY);\n }, [scaleX, scaleY]);\n\n return (\n <g stroke={GRID_GRAY}>\n {axisX.showGrid &&\n ticksX.map(tick => {\n const x = getXScaleShift(tick) + (axisX.linesBetweenCategories ? halfXGroup : 0);\n return (\n <line\n key={`x_${tick}`}\n x1={isVertical ? x : 0}\n x2={isVertical ? x : width}\n y1={isVertical ? 0 : x}\n y2={isVertical ? height : x}\n />\n );\n })}\n {axisY.showGrid &&\n ticksY.map(tick => {\n const y = getYScaleShift(tick);\n return (\n <line\n key={`y_${tick}`}\n x1={isVertical ? 0 : y}\n x2={isVertical ? width : y}\n y1={isVertical ? y : 0}\n y2={isVertical ? y : height}\n />\n );\n })}\n {frameType !== 'empty' && (\n <g strokeWidth={GRID_FRAME_WIDTH}>\n {(axisX.showGrid || frameType !== 'left') && <line stroke={frameType === 'left' ? GRID_GRAY : BLACK} x1=\"0\" x2={width} y1={height} y2={height} />}\n {(axisX.showGrid || frameType !== 'bottom') && <line stroke={frameType === 'bottom' ? GRID_GRAY : BLACK} x1=\"0\" x2=\"0\" y1=\"0\" y2={height} />}\n {(axisX.showGrid || frameType === 'full') && <line stroke={frameType === 'full' ? BLACK : GRID_GRAY} x1={width} x2={width} y1=\"0\" y2={height} />}\n {(axisY.showGrid || frameType === 'full') && <line stroke={frameType === 'full' ? BLACK : GRID_GRAY} x1=\"0\" x2={width} y1=\"0\" y2=\"0\" />}\n </g>\n )}\n </g>\n );\n}\n"],"names":["GRID_FRAME_WIDTH","Grid","scaleX","scaleY","orientation","width","height","axisX","axisY","frameType","ticksX","setTicksX","useState","range","ticksCount","MIN_TICK_STEP","ticksY","setTicksY","halfXGroup","getXScaleShift","d","getYScaleShift","isVertical","useEffect","jsxs","GRID_GRAY","tick","x","jsx","y","BLACK"],"mappings":"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","x_google_ignoreList":[0]}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { l as B } from "../node_modules/lodash/lodash.js";
|
|
2
|
-
import { renderToString as
|
|
2
|
+
import { renderToString as N } from "../node_modules/react-dom/server.browser.js";
|
|
3
3
|
import { AbstractChart as $ } from "../AbstractChart.js";
|
|
4
4
|
import { NO_GROUPED as f } from "../DataFrame.js";
|
|
5
5
|
import R from "./ChartRenderer.js";
|
|
6
6
|
import { MAX_GROUPS_COUNT as G, MAX_FACETS_COUNT as U } from "./constants.js";
|
|
7
|
-
import { DiscreteSettingsImpl as C, StatLayer as S, BoxLayer as P, ViolinLayer as T, DotLayer as x, LineLayer as O, ErrorBarLayer as
|
|
7
|
+
import { DiscreteSettingsImpl as C, StatLayer as S, BoxLayer as P, ViolinLayer as T, DotLayer as x, LineLayer as O, ErrorBarLayer as I, BarLayer as K, StackedBarLayer as F, StackedAreaLayer as V, BinnedDotsLayer as H, PairedPointsLayer as j, SinaLayer as q, LogoPlotLayer as M } from "./DiscreteSettingsImpl.js";
|
|
8
8
|
import { getBoxesData as W } from "./layers/boxes.js";
|
|
9
9
|
import { getViolinsData as X } from "./layers/violins.js";
|
|
10
10
|
import { getSinaData as z } from "./layers/sina.js";
|
|
@@ -58,7 +58,7 @@ function v(o, a) {
|
|
|
58
58
|
inheritedAes: a.inheritedAes ?? null
|
|
59
59
|
};
|
|
60
60
|
}
|
|
61
|
-
class
|
|
61
|
+
class bt extends $ {
|
|
62
62
|
constructor(a, t, s) {
|
|
63
63
|
super(a, t), D(this, "settings"), D(this, "chartRenderer", new R()), D(this, "onTooltipHintSwitch", () => {
|
|
64
64
|
}), D(this, "calculatedData", null), this.settings = new C(t), s && (this.onTooltipHintSwitch = s[0]);
|
|
@@ -85,7 +85,7 @@ class Nt extends $ {
|
|
|
85
85
|
console.warn("no chart state for discrete");
|
|
86
86
|
}
|
|
87
87
|
export() {
|
|
88
|
-
return this._updateChart(),
|
|
88
|
+
return this._updateChart(), N(this.chartRenderer.component);
|
|
89
89
|
}
|
|
90
90
|
_needUpdateCalculatedDataBySettings(a, t) {
|
|
91
91
|
var s, i, n, l, r, u, h, d;
|
|
@@ -121,7 +121,7 @@ class Nt extends $ {
|
|
|
121
121
|
primary: h.value !== null ? h.keys : [f],
|
|
122
122
|
secondary: d.value !== null ? d.keys : [f]
|
|
123
123
|
}, _ = c.facet.reduce((e, y) => (e[L(y)] = c.primary.filter(
|
|
124
|
-
(
|
|
124
|
+
(A) => this.data.getRowsByGrouping([...y, A]).length > 0
|
|
125
125
|
).map(String), e), {}), k = n.filter((e) => !(e instanceof S)).map((e) => {
|
|
126
126
|
if (e instanceof P)
|
|
127
127
|
return W(e, c, this.data, t, s, r);
|
|
@@ -131,11 +131,11 @@ class Nt extends $ {
|
|
|
131
131
|
return J(e, c, this.data, t, r, s);
|
|
132
132
|
if (e instanceof O)
|
|
133
133
|
return Q(e, c, this.data, t, r);
|
|
134
|
-
if (e instanceof
|
|
134
|
+
if (e instanceof I)
|
|
135
135
|
return Y(e, c, this.data, t, r);
|
|
136
|
-
if (e instanceof
|
|
136
|
+
if (e instanceof K)
|
|
137
137
|
return Z(e, c, this.data, t, r);
|
|
138
|
-
if (e instanceof
|
|
138
|
+
if (e instanceof F)
|
|
139
139
|
return tt(e, c, this.data, t);
|
|
140
140
|
if (e instanceof V)
|
|
141
141
|
return at(e, c, this.data, t);
|
|
@@ -148,14 +148,14 @@ class Nt extends $ {
|
|
|
148
148
|
if (e instanceof M)
|
|
149
149
|
return st(e, c, this.data, t);
|
|
150
150
|
throw new Error("Unknown layer type");
|
|
151
|
-
}),
|
|
151
|
+
}), b = n.filter((e) => e instanceof S).map((e) => {
|
|
152
152
|
if (h.value === null)
|
|
153
153
|
throw new Error("Cannot calculate p-value without data grouping");
|
|
154
154
|
return it(e, c.facet, c.primary, t, this.data);
|
|
155
155
|
});
|
|
156
156
|
this.calculatedData = {
|
|
157
157
|
layersData: k,
|
|
158
|
-
statsLayersData:
|
|
158
|
+
statsLayersData: b,
|
|
159
159
|
primaryGrouping: h,
|
|
160
160
|
secondaryGrouping: d,
|
|
161
161
|
facetKeyLists: p,
|
|
@@ -201,6 +201,6 @@ class Nt extends $ {
|
|
|
201
201
|
}
|
|
202
202
|
}
|
|
203
203
|
export {
|
|
204
|
-
|
|
204
|
+
bt as ChartDiscrete
|
|
205
205
|
};
|
|
206
206
|
//# sourceMappingURL=index.js.map
|
|
@@ -3,7 +3,7 @@ import { createRoot as $ } from "../node_modules/react-dom/client.js";
|
|
|
3
3
|
import { Error as X } from "../common/Error.js";
|
|
4
4
|
import { DataFrameProvider as j } from "../common/useDataFrame.js";
|
|
5
5
|
import { DEFAULT_HEIGHT as v, DEFAULT_WIDTH as b, TITLE_LINE_HEIGHT as R, TITLE_MARGIN as G } from "../constants.js";
|
|
6
|
-
import { splitTextByWidth as A } from "../
|
|
6
|
+
import { splitTextByWidth as A } from "../utils/splitTextByWidth.js";
|
|
7
7
|
import { LEGEND_OFFSET as O, DEFAULT_COMMON_AES as k } from "../scatterplot/constants.js";
|
|
8
8
|
import { getTicksAndFormat as P } from "../scatterplot/utils/getTicksAndFormat.js";
|
|
9
9
|
import { arrangeLegendParts as U } from "../utils/arrangeLegendParts.js";
|