@milaboratories/miplots4 1.0.150 → 1.0.152
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/bubble/BubbleSettingsImpl.d.ts +9 -1
- package/dist/bubble/BubbleSettingsImpl.d.ts.map +1 -1
- package/dist/bubble/BubbleSettingsImpl.js +25 -16
- package/dist/bubble/BubbleSettingsImpl.js.map +1 -1
- package/dist/bubble/ChartRenderer.d.ts +15 -5
- package/dist/bubble/ChartRenderer.d.ts.map +1 -1
- package/dist/bubble/ChartRenderer.js +146 -146
- package/dist/bubble/ChartRenderer.js.map +1 -1
- package/dist/bubble/components/Chart.d.ts +5 -5
- package/dist/bubble/components/Chart.d.ts.map +1 -1
- package/dist/bubble/components/Chart.js +46 -46
- package/dist/bubble/components/Chart.js.map +1 -1
- package/dist/bubble/components/ChartsGroup.d.ts +4 -4
- package/dist/bubble/components/ChartsGroup.d.ts.map +1 -1
- package/dist/bubble/components/ChartsGroup.js.map +1 -1
- package/dist/bubble/getCellTooltip.d.ts +2 -2
- package/dist/bubble/getCellTooltip.d.ts.map +1 -1
- package/dist/bubble/getCellTooltip.js +17 -17
- package/dist/bubble/getCellTooltip.js.map +1 -1
- package/dist/bubble/getGroupedCellsData.d.ts +7 -29
- package/dist/bubble/getGroupedCellsData.d.ts.map +1 -1
- package/dist/bubble/getGroupedCellsData.js +49 -83
- package/dist/bubble/getGroupedCellsData.js.map +1 -1
- package/dist/bubble/index.d.ts +2 -2
- package/dist/bubble/index.d.ts.map +1 -1
- package/dist/bubble/index.js +54 -37
- package/dist/bubble/index.js.map +1 -1
- package/dist/bubble/utils/calculateCaptionTails.d.ts +2 -2
- package/dist/bubble/utils/calculateCaptionTails.d.ts.map +1 -1
- package/dist/bubble/utils/calculateCaptionTails.js.map +1 -1
- package/dist/discrete/DiscreteSettingsImpl.d.ts +2 -0
- package/dist/discrete/DiscreteSettingsImpl.d.ts.map +1 -1
- package/dist/discrete/DiscreteSettingsImpl.js +21 -19
- package/dist/discrete/DiscreteSettingsImpl.js.map +1 -1
- package/dist/discrete/layers/stackedBar.d.ts.map +1 -1
- package/dist/discrete/layers/stackedBar.js +55 -30
- package/dist/discrete/layers/stackedBar.js.map +1 -1
- package/dist/heatmap/ChartRenderer.d.ts +7 -7
- package/dist/heatmap/ChartRenderer.d.ts.map +1 -1
- package/dist/heatmap/ChartRenderer.js +2 -2
- package/dist/heatmap/ChartRenderer.js.map +1 -1
- package/dist/heatmap/components/Annotations/Annotation.d.ts +4 -4
- package/dist/heatmap/components/Annotations/Annotation.d.ts.map +1 -1
- package/dist/heatmap/components/Annotations/Annotation.js.map +1 -1
- package/dist/heatmap/components/Annotations/AnnotationCellsCanvas.d.ts +2 -2
- package/dist/heatmap/components/Annotations/AnnotationCellsCanvas.d.ts.map +1 -1
- package/dist/heatmap/components/Annotations/AnnotationCellsCanvas.js.map +1 -1
- package/dist/heatmap/components/Annotations/AnnotationCellsSvg.d.ts +2 -2
- package/dist/heatmap/components/Annotations/AnnotationCellsSvg.d.ts.map +1 -1
- package/dist/heatmap/components/Annotations/AnnotationCellsSvg.js.map +1 -1
- package/dist/heatmap/components/Annotations/index.d.ts +5 -5
- package/dist/heatmap/components/Annotations/index.d.ts.map +1 -1
- package/dist/heatmap/components/Annotations/index.js.map +1 -1
- package/dist/heatmap/components/CanvasCells.d.ts +3 -3
- package/dist/heatmap/components/CanvasCells.d.ts.map +1 -1
- package/dist/heatmap/components/CanvasCells.js +18 -18
- package/dist/heatmap/components/CanvasCells.js.map +1 -1
- package/dist/heatmap/components/Chart.d.ts +6 -6
- package/dist/heatmap/components/Chart.d.ts.map +1 -1
- package/dist/heatmap/components/Chart.js +63 -63
- package/dist/heatmap/components/Chart.js.map +1 -1
- package/dist/heatmap/components/ChartsGroup.d.ts +3 -3
- package/dist/heatmap/components/ChartsGroup.d.ts.map +1 -1
- package/dist/heatmap/components/ChartsGroup.js.map +1 -1
- package/dist/heatmap/components/SvgCells.d.ts +3 -3
- package/dist/heatmap/components/SvgCells.d.ts.map +1 -1
- package/dist/heatmap/components/SvgCells.js +18 -18
- package/dist/heatmap/components/SvgCells.js.map +1 -1
- package/dist/heatmap/components/tooltipUtils.d.ts +5 -5
- package/dist/heatmap/components/tooltipUtils.d.ts.map +1 -1
- package/dist/heatmap/components/tooltipUtils.js +7 -7
- package/dist/heatmap/components/tooltipUtils.js.map +1 -1
- package/dist/heatmap/fillCellsData.d.ts +45 -0
- package/dist/heatmap/fillCellsData.d.ts.map +1 -0
- package/dist/heatmap/fillCellsData.js +244 -0
- package/dist/heatmap/fillCellsData.js.map +1 -0
- package/dist/heatmap/getCells.d.ts +5 -37
- package/dist/heatmap/getCells.d.ts.map +1 -1
- package/dist/heatmap/getCells.js +28 -214
- package/dist/heatmap/getCells.js.map +1 -1
- package/dist/heatmap/getDendrograms.d.ts +2 -2
- package/dist/heatmap/getDendrograms.d.ts.map +1 -1
- package/dist/heatmap/getDendrograms.js +19 -19
- package/dist/heatmap/getDendrograms.js.map +1 -1
- package/dist/heatmap/index.d.ts +2 -2
- package/dist/heatmap/index.d.ts.map +1 -1
- package/dist/heatmap/index.js +7 -7
- package/dist/heatmap/index.js.map +1 -1
- package/dist/heatmap/utils/calculateCaptionTails.d.ts +2 -2
- package/dist/heatmap/utils/calculateCaptionTails.d.ts.map +1 -1
- package/dist/heatmap/utils/calculateCaptionTails.js.map +1 -1
- package/dist/node_modules/d3-array/src/min.js +11 -5
- package/dist/node_modules/d3-array/src/min.js.map +1 -1
- package/dist/types/bubble.d.ts +92 -0
- package/dist/types/bubble.d.ts.map +1 -1
- package/dist/types/bubble.js +16 -5
- package/dist/types/bubble.js.map +1 -1
- package/dist/types/discrete.d.ts +30 -8
- package/dist/types/discrete.d.ts.map +1 -1
- package/dist/types/discrete.js +16 -14
- package/dist/types/discrete.js.map +1 -1
- package/dist/types/heatmap.d.ts +18 -18
- package/dist/utils/getFacetOrGroupKey.d.ts +2 -0
- package/dist/utils/getFacetOrGroupKey.d.ts.map +1 -0
- package/dist/utils/getFacetOrGroupKey.js +7 -0
- package/dist/utils/getFacetOrGroupKey.js.map +1 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChartRenderer.js","sources":["../../src/heatmap/ChartRenderer.tsx"],"sourcesContent":["import { extent } from 'd3-array';\nimport type { HierarchyNode, HierarchyPointNode } from 'd3-hierarchy';\nimport { cluster } from 'd3-hierarchy';\nimport type { ScaleLinear, ScaleOrdinal } from 'd3-scale';\nimport { scaleLinear, 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, LegendItem } from '../common/types';\nimport { DataFrameProvider } from '../common/useDataFrame';\nimport { DEFAULT_HEIGHT, DEFAULT_WIDTH, TITLE_LINE_HEIGHT, TITLE_MARGIN } from '../constants';\nimport type { DataFrame } from '../DataFrame';\nimport type { AesItem, ColumnName, DataValue } from '../types';\nimport { arrangeLegendParts } from '../utils/arrangeLegendParts';\nimport { getChartEdgeSides } from '../utils/getChartEdgeSides';\nimport { getContinuousLegendTicks } from '../utils/getContinuousLegendTicks';\nimport { TextMeasurer } from '../utils/TextMeasurer/TextMeasurer';\nimport { ChartsGroup } from './components/ChartsGroup';\nimport type {\n AnnotationColorScales,\n CaptionsSizes,\n ChartDendrograms,\n ChartDimensionsData,\n ChartSizes,\n ChartsScales,\n Cluster,\n DendrogramAesScales,\n LabelAngles,\n Margins,\n} from './components/types';\nimport { CHART_SIDE_ELEMENTS, DEFAULT_AES, LEGEND_OFFSET, MIN_MARGIN, TITLE_LINE } from './constants';\nimport type { GroupedCellsData } from './getCells';\nimport type { DendrogramsData } from './getDendrograms';\nimport type { HeatmapSettingsImpl } from './HeatmapSettingsImpl';\nimport {\n calculateAnnotationTitleSizes,\n calculateChartSideElementSizes,\n calculateSideElementsBBoxes,\n createContinuousColorScale,\n createDiscreteColorScale,\n createDiscreteRoundColorScale,\n} from './utils';\nimport { calculateCaptionTails } from './utils/calculateCaptionTails';\n\nconst COS_PI_4 = Math.cos(Math.PI / 4);\nconst INCLINE_OFFSET = 5; // height of little triangle of text for captions inclined 45deg\nfunction updateLinksHeight(root: HierarchyPointNode<Cluster>, scale: (v: number) => number, coord: 'x' | 'y') {\n function setHeight(d: HierarchyPointNode<Cluster>) {\n d[coord] = scale(d.data.height);\n if (d.children) d.children.forEach(setHeight);\n }\n setHeight(root);\n}\n\n// add shift to move nodes positions with group gaps\nfunction addShiftToLinkCoord(\n root: HierarchyPointNode<Cluster>,\n shift: number,\n coordFrom: 'x' | 'y',\n coordTo = coordFrom\n) {\n function setX(d: HierarchyPointNode<Cluster>) {\n d[coordTo] = d[coordFrom] + shift;\n if (d.children) d.children.forEach(setX);\n }\n setX(root);\n}\n\nconst getSteps = (count: number, valueExtent: number[]) => {\n const min = Math.min(...valueExtent);\n const max = Math.max(...valueExtent);\n if (min === max) {\n const steps = count % 2 === 0 ? [] : [min];\n for (let i = 1; i < count / 2 + 1; i++) {\n steps.push(min + i);\n steps.unshift(min - i);\n }\n return steps;\n }\n if (count < 2) {\n return [min, max];\n }\n const step = (max - min) / (count - 1);\n const steps = [];\n for (let i = 0; i < count - 1; i++) {\n steps.push(min + step * i);\n }\n steps.push(max);\n return steps;\n};\n\nfunction getContinuousColorRange(normalization: HeatmapSettingsImpl['normalization'], colorsCount: number, valueExtent: number[]) {\n let extent = valueExtent;\n if (normalization) {\n if (normalization.colorRange) {\n extent = normalization.colorRange;\n }\n if (normalization.method === 'standardScaling') {\n extent = [-2, 2];\n }\n if (normalization.method === 'meanNormalization') {\n extent = [-0.75, 0.75];\n }\n }\n return getSteps(colorsCount, extent);\n}\n\nfunction getMaxTextLength(keys: string[], labels: Record<string, string>, textMeasurer: TextMeasurer) {\n let maxLabelSize = 0;\n for (const key of keys) {\n if (labels[key] === undefined) continue;\n const l = textMeasurer.getTextWidth(labels[key]);\n if (l > maxLabelSize) maxLabelSize = l;\n }\n return maxLabelSize;\n}\n\nfunction getCaptionHeight(size: number, angle: number) {\n if (angle === 90) {\n return size;\n }\n if (angle === 45) {\n return size * COS_PI_4 + (size > 0 ? 2 * INCLINE_OFFSET : 0);\n }\n return TITLE_LINE;\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 margins: Margins = {\n top: MIN_MARGIN,\n bottom: MIN_MARGIN,\n left: MIN_MARGIN,\n right: MIN_MARGIN,\n };\n captionsSizes: CaptionsSizes = {\n xAxisCaptions: 100,\n yAxisCaptions: 100,\n xGroupCaptions: TITLE_LINE,\n yGroupCaptions: TITLE_LINE,\n xCaptionTail: 0,\n yCaptionTail: 0,\n };\n labelAngles: LabelAngles = {\n xAxisLabels: 0,\n yAxisLabels: 0,\n xGroupLabels: 0,\n yGroupLabels: 0,\n };\n columnsCount = 1;\n rowsCount = 1;\n scales: ChartsScales = {\n // scales grouped by facet\n x: { null: scaleOrdinal<string, number>().domain(['null']).range([1]) },\n y: { null: scaleOrdinal<string, number>().domain(['null']).range([1]) },\n };\n step: {\n x: Record<string, number>;\n y: Record<string, number>;\n } = { x: {}, y: {} };\n colorScale: ScaleLinear<string, string> | ScaleOrdinal<string, string, string> = scaleLinear<string, string>()\n .domain([0, 1])\n .range(['white', 'black']);\n annotationColorScales: AnnotationColorScales = {};\n dendrogramAesScales: DendrogramAesScales = {};\n legend: LegendData = {\n width: 0,\n height: 0,\n items: [],\n };\n dendrograms: Record<string, ChartDendrograms> = {};\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 updateMargins(title: HeatmapSettingsImpl['chartSettings']['title'], size: HeatmapSettingsImpl['chartSettings']['size']) {\n this.margins = {\n top: title.show ? TITLE_LINE_HEIGHT + TITLE_MARGIN * 2 : size.outerOffset,\n bottom: size.outerOffset,\n left: size.outerOffset,\n right: this.legend.width + size.outerOffset,\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.margins.bottom, this.legend.height);\n }\n\n updateLegendSize(\n valueType: HeatmapSettingsImpl['chartSettings']['valueType'],\n legend: HeatmapSettingsImpl['chartSettings']['legend'],\n annotations: HeatmapSettingsImpl['annotations'],\n columnValue: ColumnName,\n valueExtent: [number, number]\n ) {\n if (!legend.show) {\n this.legend = { width: 0, height: 0, items: [] };\n return;\n }\n const legendHeight = this.chartSizes.chartHeight;\n const legendItems: LegendItem[] = [];\n const emptySizes = { width: 0, height: 0, left: 0, top: 0 };\n\n const getDefaultLabels = (values: (string | number)[]) => values.reduce((res: Record<string, string>, v: string | number) => { res[v] = String(v); return res; }, {});\n if (valueType === 'continuous') {\n const scale = this.colorScale as ScaleLinear<string, string>;\n const values = getContinuousLegendTicks(scale, valueExtent);\n const tickPositionScale = scaleLinear([values[0], values[values.length - 1]], [legendHeight, 0]); //TODO: update during adding log scale for heatmap\n const title = columnValue.label ?? columnValue.value;\n legendItems.push({\n ...emptySizes,\n type: 'continuous',\n id: 'heatmapValue',\n scale,\n values,\n title,\n tickPositionScale\n });\n } else if (valueType === 'discrete') {\n const scale = this.colorScale as ScaleOrdinal<string, string>;\n const title = columnValue.label ?? columnValue.value;\n const values = scale.domain();\n const labels = getDefaultLabels(values);\n\n legendItems.push({ ...emptySizes, type: 'discreteColor', id: 'heatmapValue', title, scale, values, labels });\n }\n annotations.forEach(item => {\n const title = item.valueColumn.label ?? item.valueColumn.value;\n if (item.type === 'continuous') {\n const scale = this.annotationColorScales[item.id].scale as ScaleLinear<string, string>;\n const values = getContinuousLegendTicks(scale, valueExtent);\n const tickPositionScale = scaleLinear([values[0], values[values.length - 1]], [legendHeight, 0]); //TODO: update during adding log scale for heatmap\n\n legendItems.push({ ...emptySizes, type: 'continuous', id: item.id, tickPositionScale, title, scale, values });\n }\n if (item.type === 'discrete') {\n const scale = this.annotationColorScales[item.id].scale as ScaleOrdinal<string, string>;\n const values = scale.domain();\n const labels = getDefaultLabels(values);\n\n legendItems.push({ ...emptySizes, type: 'discreteColor', id: item.id, title, scale, values, labels });\n }\n });\n\n if (!legendItems.length) {\n this.legend = { width: 0, height: 0, items: [] };\n return;\n }\n\n const items = arrangeLegendParts(legendItems, this.chartSizes.chartHeight);\n 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 updateCaptionsSize(\n groupedCells: GroupedCellsData,\n xAxis: HeatmapSettingsImpl['chartSettings']['xAxis'],\n yAxis: HeatmapSettingsImpl['chartSettings']['yAxis'],\n facetSettings: HeatmapSettingsImpl['facetSettings']\n ) {\n const textMeasurer = new TextMeasurer('bold 16px Manrope');\n const { xGroupKeys, yGroupKeys, xGroupLabels, yGroupLabels, xKeysByGroups, yKeysByGroups, xLabels, yLabels } = groupedCells.meta;\n this.labelAngles = {\n xAxisLabels: xAxis.axisLabelsAngle,\n yAxisLabels: yAxis.axisLabelsAngle,\n xGroupLabels: xAxis.groupLabelsAngle,\n yGroupLabels: yAxis.groupLabelsAngle,\n };\n\n const maxXLabelSize = xGroupKeys.reduce((res, key) => Math.max(res, getMaxTextLength(xKeysByGroups[key], xLabels, textMeasurer)), 0);\n const maxYLabelSize = yGroupKeys.reduce((res, key) => Math.max(res, getMaxTextLength(yKeysByGroups[key], yLabels, textMeasurer)), 0);\n const maxXGroupLabelSize = getMaxTextLength(xGroupKeys, xGroupLabels, textMeasurer);\n const maxYGroupLabelSize = getMaxTextLength(yGroupKeys, yGroupLabels, textMeasurer);\n const { xCaptionTail, yCaptionTail } = calculateCaptionTails(\n this.labelAngles,\n facetSettings,\n this.scales,\n this.step,\n groupedCells,\n textMeasurer\n );\n this.captionsSizes = {\n xCaptionTail,\n yCaptionTail,\n xGroupCaptions: getCaptionHeight(maxXGroupLabelSize, this.labelAngles.xGroupLabels),\n yGroupCaptions: getCaptionHeight(maxYGroupLabelSize, this.labelAngles.yGroupLabels),\n xAxisCaptions: getCaptionHeight(maxXLabelSize, this.labelAngles.xAxisLabels),\n yAxisCaptions: getCaptionHeight(maxYLabelSize, this.labelAngles.yAxisLabels),\n };\n }\n\n updateChartDimensions(\n size: HeatmapSettingsImpl['chartSettings']['size'],\n facetKeys: string[],\n xGroupKeys: string[],\n yGroupKeys: string[],\n facetSettings: HeatmapSettingsImpl['facetSettings'],\n xAxis: HeatmapSettingsImpl['chartSettings']['xAxis'],\n yAxis: HeatmapSettingsImpl['chartSettings']['yAxis'],\n annotations: HeatmapSettingsImpl['annotations'],\n dendrogramX: HeatmapSettingsImpl['dendrogramX'],\n dendrogramY: HeatmapSettingsImpl['dendrogramY']\n ) {\n const facetCount = facetKeys.length;\n const maxNRows = Math.min(facetSettings.nRows ?? facetCount, facetCount);\n const maxNCols = Math.min(facetSettings.nCols ?? facetCount, facetCount);\n // Use columns/rows count from settings if some of them defined, else make 1 column\n this.columnsCount = facetSettings.nRows ? Math.ceil(facetCount / maxNRows) : maxNCols;\n this.rowsCount = Math.ceil(facetCount / this.columnsCount);\n const { sharedX, sharedY } = facetSettings;\n\n this.chartsDimensions = {};\n\n let currentLeft = 0;\n let currentTop = 0;\n facetKeys.forEach((key, index) => {\n const currentColumn = (index % this.columnsCount) + 1;\n const chartSides = getChartEdgeSides(index, facetKeys.length, this.columnsCount, this.rowsCount);\n const stepX = this.step.x[key];\n const stepY = this.step.y[key];\n const sideElementSizes = calculateChartSideElementSizes(\n xAxis,\n yAxis,\n this.captionsSizes,\n annotations,\n dendrogramX,\n dendrogramY,\n chartSides,\n sharedX,\n sharedY,\n facetKeys,\n xGroupKeys,\n yGroupKeys,\n stepX,\n stepY\n );\n const annotationsTitleSizes = calculateAnnotationTitleSizes(annotations, chartSides, sharedX, sharedY);\n function getPadding(side: 'left' | 'right' | 'top' | 'bottom') {\n return Math.max(\n CHART_SIDE_ELEMENTS[side].reduce((res, el) => res + sideElementSizes[side][el], 0),\n annotationsTitleSizes[side],\n size.innerOffset\n );\n }\n const padding = {\n left: getPadding('left'),\n right: getPadding('right'),\n top: getPadding('top'),\n bottom: getPadding('bottom'),\n };\n if (padding.left < this.captionsSizes.xCaptionTail) {\n padding.left = this.captionsSizes.xCaptionTail;\n }\n if (padding.bottom < this.captionsSizes.yCaptionTail) {\n padding.bottom = this.captionsSizes.yCaptionTail;\n }\n const sideElementBBoxes = calculateSideElementsBBoxes(sideElementSizes, this.chartSizes.chartWidth, this.chartSizes.chartHeight);\n const outerWidth = this.chartSizes.chartWidth + padding.left + padding.right;\n const outerHeight = this.chartSizes.chartHeight + padding.top + padding.bottom;\n this.chartsDimensions[key] = {\n left: currentLeft,\n top: currentTop,\n inner: { width: this.chartSizes.chartWidth, height: this.chartSizes.chartHeight },\n outer: { width: outerWidth, height: outerHeight },\n padding,\n sideElementBBoxes,\n chartEdgeSides: chartSides,\n };\n currentLeft += outerWidth;\n if (currentColumn === this.columnsCount) {\n currentLeft = 0;\n currentTop += outerHeight;\n }\n });\n\n // sum of widths of first row\n const chartsWidth = facetKeys\n .slice(0, this.columnsCount)\n .reduce((sum, key) => sum + this.chartsDimensions[key].outer.width, 0);\n // sum of heights of first column\n const chartsHeight = facetKeys\n .filter((_key, index) => index % this.columnsCount === 0)\n .reduce((sum, key) => sum + this.chartsDimensions[key].outer.height, 0);\n this.chartSizes.chartsWidth = chartsWidth;\n this.chartSizes.chartsHeight = chartsHeight;\n }\n\n updateChartsSizes(\n size: HeatmapSettingsImpl['chartSettings']['size'],\n facetSettings: HeatmapSettingsImpl['facetSettings'],\n groupedCells: GroupedCellsData,\n groupGap: number,\n ) {\n const { width, height, cellWidth, cellHeight } = size;\n const firstFacet = groupedCells.meta.facetKeys[0];\n if (cellWidth && facetSettings.sharedX && firstFacet) {\n const keysCount = groupedCells.facets[firstFacet].xKeys.length;\n const groupsCount = groupedCells.meta.xGroupKeys.length;\n this.chartSizes.chartWidth = keysCount * cellWidth + groupGap * (groupsCount - 1);\n } else {\n this.chartSizes.chartWidth = width;\n }\n\n if (cellHeight && facetSettings.sharedY && firstFacet) {\n const keysCount = groupedCells.facets[firstFacet].yKeys.length;\n const groupsCount = groupedCells.meta.yGroupKeys.length;\n this.chartSizes.chartHeight = keysCount * cellHeight + groupGap * (groupsCount - 1);\n } else {\n this.chartSizes.chartHeight = height;\n }\n }\n\n // update scales for cell positions, x and y for each facet\n updateScales(\n facetKeys: string[],\n groupedCells: GroupedCellsData,\n groupGap: number,\n facetSettings: HeatmapSettingsImpl['facetSettings'],\n size: HeatmapSettingsImpl['chartSettings']['size'],\n xAxis: HeatmapSettingsImpl['chartSettings']['xAxis'],\n yAxis: HeatmapSettingsImpl['chartSettings']['yAxis'],\n dendrogramX: HeatmapSettingsImpl['dendrogramX'],\n dendrogramY: HeatmapSettingsImpl['dendrogramY'],\n customOrder: {x: boolean, y: boolean, xGroup: boolean, yGroup: boolean},\n ) {\n const { width, height, cellWidth, cellHeight } = size;\n const { meta, facets } = groupedCells;\n const { sharedX, sharedY } = facetSettings;\n const sortX = (arr: string[], labels: Record<string, string> = {}) => {\n return arr.sort((a, b) => xAxis.sorting === 'asc'\n ? (labels[a] ?? a).localeCompare((labels[b] ?? b), 'en', { numeric: true })\n : (labels[b] ?? b).localeCompare((labels[a] ?? a), 'en', { numeric: true })\n );\n };\n const sortY = (arr: string[], labels: Record<string, string> = {}) => {\n return arr.sort((a, b) => yAxis.sorting === 'asc'\n ? (labels[a] ?? a).localeCompare((labels[b] ?? b), 'en', { numeric: true })\n : (labels[b] ?? b).localeCompare((labels[a] ?? a), 'en', { numeric: true })\n );\n };\n facetKeys.forEach(facetKey => {\n const facetGroup = facets[facetKey];\n const xGroupKeys = customOrder.xGroup ? meta.xGroupKeys : sortX(meta.xGroupKeys);\n const yGroupKeys = customOrder.yGroup ? meta.yGroupKeys : sortY(meta.yGroupKeys);\n const { xKeysByGroups } = sharedX ? meta : facetGroup;\n const { yKeysByGroups } = sharedY ? meta : facetGroup;\n // for shared facets max cells counts in group should be used\n const xCounts = xGroupKeys.map(xGroupKey => xKeysByGroups[xGroupKey].length);\n const yCounts = yGroupKeys.map(yGroupKey => yKeysByGroups[yGroupKey].length);\n const xCellsCount = xCounts.reduce((sum, count) => sum + count, 0);\n const yCellsCount = yCounts.reduce((sum, count) => sum + count, 0);\n const xStep = sharedX && cellWidth ? cellWidth : (width - (xCounts.filter(count => count > 0).length - 1) * groupGap) / xCellsCount;\n const yStep = sharedY && cellHeight ? cellHeight : (height - (yCounts.filter(count => count > 0).length - 1) * groupGap) / yCellsCount;\n\n const xPositions: number[] = [];\n const xKeys: string[] = [];\n let currentX = 0;\n xGroupKeys.forEach(xKey => {\n const axisKeys = dendrogramX || customOrder.x ? xKeysByGroups[xKey] : sortX(xKeysByGroups[xKey], meta.xLabels);\n xKeys.push(...axisKeys);\n axisKeys.forEach(() => {\n xPositions.push(currentX);\n currentX += xStep;\n });\n // do not add offset for empty group\n if (axisKeys.length > 0) {\n currentX += groupGap;\n }\n });\n\n const yPositions: number[] = [];\n const yKeys: string[] = [];\n let currentY = 0;\n yGroupKeys.forEach(yKey => {\n const axisKeys = dendrogramY || customOrder.y ? yKeysByGroups[yKey] : sortY(yKeysByGroups[yKey], meta.yLabels);\n yKeys.push(...axisKeys);\n axisKeys.forEach(() => {\n yPositions.push(currentY);\n currentY += yStep;\n });\n // do not add offset for empty group\n if (axisKeys.length > 0) {\n currentY += groupGap;\n }\n });\n\n this.scales.x[facetKey] = scaleOrdinal<string, number>().domain(xKeys).range(xPositions);\n this.scales.y[facetKey] = scaleOrdinal<string, number>().domain(yKeys).range(yPositions);\n this.step.x[facetKey] = xStep;\n this.step.y[facetKey] = yStep;\n });\n }\n\n updateAesScale(\n valueType: 'discrete' | 'continuous',\n valueExtent: [number, number],\n aes: HeatmapSettingsImpl['aes'],\n annotations: HeatmapSettingsImpl['annotations'],\n groupedCellsData: GroupedCellsData,\n cellUniqValues: DataValue[],\n normalization: HeatmapSettingsImpl['normalization']\n ) {\n if (valueType === 'continuous') {\n if (aes.valueColors) {\n this.colorScale = scaleLinear<string, string>()\n .domain(aes.valuesByColors ?? getContinuousColorRange(normalization, aes.valueColors.length, valueExtent))\n .range(aes.valueColors);\n } else if (aes.colorsList) {\n this.colorScale = scaleLinear<string, string>()\n .domain(getContinuousColorRange(normalization, aes.colorsList.length, valueExtent))\n .range(aes.colorsList);\n }\n } else {\n if (aes.colorsMap) {\n const valueKeys = Object.entries(aes.colorsMap);\n this.colorScale = scaleOrdinal<string, string>()\n .domain(valueKeys.map(v => v[0]))\n .range(valueKeys.map(v => v[1]))\n .unknown('#ccc');\n } else if (aes.colorsList) {\n this.colorScale = createDiscreteColorScale(aes.colorsList, cellUniqValues.map(String));\n }\n }\n\n const { xDataByKeys, yDataByKeys } = groupedCellsData.meta;\n annotations.forEach(item => {\n const { colors, type, axis, valueColumn } = item;\n const data = (axis === 'x' ? xDataByKeys : yDataByKeys)[valueColumn.valueLabels ?? valueColumn.value];\n if (type === 'discrete') {\n const discreteValues = lodash.uniq(Object.values(data).map(String)).sort();\n this.annotationColorScales[item.id] = {\n type: 'discrete',\n scale: createDiscreteRoundColorScale(colors, discreteValues),\n };\n } else {\n const values = Object.values(data).map(Number);\n if (!values.length) {\n return;\n }\n const [min = values[0], max = values[0]] = extent(values);\n this.annotationColorScales[item.id] = {\n type: 'continuous',\n scale: createContinuousColorScale(colors, min, max, 0, 0.5, 1),\n };\n }\n });\n }\n\n updateDendrogram(\n facetKeys: string[],\n xGroupKeys: string[],\n yGroupKeys: string[],\n groups: GroupedCellsData['facets'],\n dendrogramsData: DendrogramsData,\n dendrogramX: HeatmapSettingsImpl['dendrogramX'],\n dendrogramY: HeatmapSettingsImpl['dendrogramY']\n ) {\n facetKeys.forEach(facetKey => {\n this.dendrograms[facetKey] = { x: { treesByGroupKey: {}, data: dendrogramX }, y: { treesByGroupKey: {}, data: dendrogramY } };\n const { xKeysByGroups, yKeysByGroups } = groups[facetKey];\n const { hierarchyByGroupX, hierarchyByGroupY } = dendrogramsData[facetKey];\n if (dendrogramX) {\n const maxHeightX = xGroupKeys.reduce((res, xKey) => Math.max(res, hierarchyByGroupX[xKey]?.data.height), 0);\n this.dendrograms[facetKey].x.treesByGroupKey = xGroupKeys.reduce((res, groupKey) => {\n const hierarchy = hierarchyByGroupX[groupKey];\n const xKeys = xKeysByGroups[groupKey];\n cluster()\n .separation(() => 1)\n .size([xKeys.length * this.step.x[facetKey], dendrogramX.size])(\n hierarchy as HierarchyNode<unknown>\n );\n const root = hierarchy as HierarchyPointNode<Cluster>;\n const heightScale = scaleLinear()\n .domain(dendrogramX.position === 'top' ? [0, maxHeightX] : [maxHeightX, 0])\n .range([dendrogramX.size, 0]);\n updateLinksHeight(root, heightScale, 'y');\n addShiftToLinkCoord(root, this.scales.x[facetKey](xKeys[0]), 'x');\n res[groupKey] = root;\n return res;\n }, {} as Record<string, HierarchyPointNode<Cluster>>);\n this.dendrograms[facetKey].x.data = dendrogramX;\n }\n if (dendrogramY) {\n const maxHeightY = yGroupKeys.reduce((res, yKey) => Math.max(res, hierarchyByGroupY[yKey]?.data.height), 0);\n this.dendrograms[facetKey].y.treesByGroupKey = yGroupKeys.reduce((res, groupKey) => {\n const hierarchy = hierarchyByGroupY[groupKey];\n const yKeys = yKeysByGroups[groupKey];\n cluster()\n .separation(() => 1)\n .size([yKeys.length * this.step.y[facetKey], dendrogramY.size])(\n hierarchy as HierarchyNode<unknown>\n );\n const root = hierarchy as HierarchyPointNode<Cluster>;\n const heightScale = scaleLinear()\n .domain(dendrogramY.position === 'left' ? [0, maxHeightY] : [maxHeightY, 0])\n .range([dendrogramY.size, 0]);\n addShiftToLinkCoord(root, this.scales.y[facetKey](yKeys[0]), 'x', 'y');\n updateLinksHeight(root, heightScale, 'x');\n res[groupKey] = root;\n return res;\n }, {} as Record<string, HierarchyPointNode<Cluster>>);\n this.dendrograms[facetKey].y.data = dendrogramY;\n }\n });\n }\n\n updateDendrogramAesScales(inheritedAes: HeatmapSettingsImpl['inheritedDendrogramAes']) {\n if (!inheritedAes) {\n return;\n }\n const usedColumns = Object.keys(inheritedAes);\n this.dendrogramAesScales = usedColumns.reduce((res: DendrogramAesScales, columnName) => {\n const aesMap = inheritedAes[columnName];\n const columnValues: string[] = Object.keys(aesMap);\n res[columnName] = scaleOrdinal<string, AesItem, AesItem>()\n .domain(columnValues)\n .range(\n columnValues.map(value => ({\n ...DEFAULT_AES,\n ...aesMap[value],\n }))\n )\n .unknown(DEFAULT_AES);\n return res;\n }, {});\n }\n\n render(\n dataFrame: DataFrame,\n settingsId: string,\n chartSettings: HeatmapSettingsImpl['chartSettings'],\n facetSettings: HeatmapSettingsImpl['facetSettings'],\n aes: HeatmapSettingsImpl['aes'],\n groupedCellsData: GroupedCellsData,\n annotations: HeatmapSettingsImpl['annotations'],\n valueColumn: ColumnName,\n dendrogramX: HeatmapSettingsImpl['dendrogramX'],\n dendrogramY: HeatmapSettingsImpl['dendrogramY'],\n dendrogramsData: DendrogramsData,\n inheritedDendrogramAes: HeatmapSettingsImpl['inheritedDendrogramAes'],\n cellUniqValues: DataValue[],\n normalization: HeatmapSettingsImpl['normalization'],\n onTooltipHintSwitch: (v: boolean) => void,\n customOrder: {x: boolean, y: boolean, xGroup: boolean, yGroup: boolean},\n cellsRenderingMode: 'canvas' | 'svg'\n ) {\n const { meta, facets } = groupedCellsData;\n const { facetKeys, xGroupKeys, yGroupKeys, valueExtent } = meta;\n const { xAxis, yAxis, title, size, valueType } = chartSettings;\n this.updateChartsSizes(size, facetSettings, groupedCellsData, aes.groupGap);\n this.updateAesScale(valueType, valueExtent, aes, annotations, groupedCellsData, cellUniqValues, normalization);\n this.updateScales(facetKeys, groupedCellsData, aes.groupGap, facetSettings, size, chartSettings.xAxis, chartSettings.yAxis, dendrogramX, dendrogramY, customOrder);\n // caption sizes are needed for chart paddings in chart dimensions\n this.updateCaptionsSize(groupedCellsData, xAxis, yAxis, facetSettings);\n this.updateChartDimensions(\n size,\n facetKeys,\n xGroupKeys,\n yGroupKeys,\n facetSettings,\n xAxis,\n yAxis,\n annotations,\n dendrogramX,\n dendrogramY\n );\n this.updateLegendSize(valueType, chartSettings.legend, annotations, valueColumn, valueExtent);\n this.updateMargins(title, size);\n this.updateDendrogram(facetKeys, xGroupKeys, yGroupKeys, facets, dendrogramsData, dendrogramX, dendrogramY);\n this.updateDendrogramAesScales(inheritedDendrogramAes);\n const component = (\n <DataFrameProvider dataFrame={dataFrame}>\n <ChartsGroup\n aes={aes}\n annotations={annotations}\n annotationColorScales={this.annotationColorScales}\n captionsSizes={this.captionsSizes}\n cellsMeta={meta}\n columnsCount={this.columnsCount}\n chartsDimensions={this.chartsDimensions}\n chartSettings={chartSettings}\n chartSizes={this.chartSizes}\n colorScale={this.colorScale as (v: unknown) => string}\n dendrogramAesScales={this.dendrogramAesScales}\n dendrograms={this.dendrograms}\n facetKeys={facetKeys}\n facetSettings={facetSettings}\n groupedCells={facets}\n labelAngles={this.labelAngles}\n legend={this.legend}\n margins={this.margins}\n scales={this.scales}\n settingsId={settingsId}\n step={this.step}\n xGroupKeys={xGroupKeys}\n yGroupKeys={yGroupKeys}\n onTooltipHintSwitch={onTooltipHintSwitch}\n cellsRenderingMode={cellsRenderingMode}\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":["COS_PI_4","INCLINE_OFFSET","updateLinksHeight","root","scale","coord","setHeight","d","addShiftToLinkCoord","shift","coordFrom","coordTo","setX","getSteps","count","valueExtent","min","max","steps","i","step","getContinuousColorRange","normalization","colorsCount","extent","getMaxTextLength","keys","labels","textMeasurer","maxLabelSize","key","l","getCaptionHeight","size","angle","TITLE_LINE","ChartRenderer","__publicField","jsx","Fragment","DEFAULT_WIDTH","DEFAULT_HEIGHT","MIN_MARGIN","scaleOrdinal","scaleLinear","_a","node","createRoot","title","TITLE_LINE_HEIGHT","TITLE_MARGIN","valueType","legend","annotations","columnValue","legendHeight","legendItems","emptySizes","getDefaultLabels","values","res","v","getContinuousLegendTicks","tickPositionScale","item","items","arrangeLegendParts","lastItem","legendWidth","LEGEND_OFFSET","groupedCells","xAxis","yAxis","facetSettings","TextMeasurer","xGroupKeys","yGroupKeys","xGroupLabels","yGroupLabels","xKeysByGroups","yKeysByGroups","xLabels","yLabels","maxXLabelSize","maxYLabelSize","maxXGroupLabelSize","maxYGroupLabelSize","xCaptionTail","yCaptionTail","calculateCaptionTails","facetKeys","dendrogramX","dendrogramY","facetCount","maxNRows","maxNCols","sharedX","sharedY","currentLeft","currentTop","index","currentColumn","chartSides","getChartEdgeSides","stepX","stepY","sideElementSizes","calculateChartSideElementSizes","annotationsTitleSizes","calculateAnnotationTitleSizes","getPadding","side","CHART_SIDE_ELEMENTS","el","padding","sideElementBBoxes","calculateSideElementsBBoxes","outerWidth","outerHeight","chartsWidth","sum","chartsHeight","_key","groupGap","width","height","cellWidth","cellHeight","firstFacet","keysCount","groupsCount","customOrder","meta","facets","sortX","arr","a","b","sortY","facetKey","facetGroup","xCounts","xGroupKey","yCounts","yGroupKey","xCellsCount","yCellsCount","xStep","yStep","xPositions","xKeys","currentX","xKey","axisKeys","yPositions","yKeys","currentY","yKey","aes","groupedCellsData","cellUniqValues","valueKeys","createDiscreteColorScale","xDataByKeys","yDataByKeys","colors","type","axis","valueColumn","data","discreteValues","lodash","createDiscreteRoundColorScale","createContinuousColorScale","groups","dendrogramsData","hierarchyByGroupX","hierarchyByGroupY","maxHeightX","groupKey","hierarchy","cluster","heightScale","maxHeightY","inheritedAes","usedColumns","columnName","aesMap","columnValues","value","DEFAULT_AES","dataFrame","settingsId","chartSettings","inheritedDendrogramAes","onTooltipHintSwitch","cellsRenderingMode","component","DataFrameProvider","ChartsGroup","message","Error"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ChartRenderer.js","sources":["../../src/heatmap/ChartRenderer.tsx"],"sourcesContent":["import { extent } from 'd3-array';\nimport type { HierarchyNode, HierarchyPointNode } from 'd3-hierarchy';\nimport { cluster } from 'd3-hierarchy';\nimport type { ScaleLinear, ScaleOrdinal } from 'd3-scale';\nimport { scaleLinear, 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, LegendItem } from '../common/types';\nimport { DataFrameProvider } from '../common/useDataFrame';\nimport { DEFAULT_HEIGHT, DEFAULT_WIDTH, TITLE_LINE_HEIGHT, TITLE_MARGIN } from '../constants';\nimport type { DataFrame } from '../DataFrame';\nimport type { AesItem, ColumnName, DataValue } from '../types';\nimport { arrangeLegendParts } from '../utils/arrangeLegendParts';\nimport { getChartEdgeSides } from '../utils/getChartEdgeSides';\nimport { getContinuousLegendTicks } from '../utils/getContinuousLegendTicks';\nimport { TextMeasurer } from '../utils/TextMeasurer/TextMeasurer';\nimport { ChartsGroup } from './components/ChartsGroup';\nimport type {\n AnnotationColorScales,\n CaptionsSizes,\n ChartDendrograms,\n ChartDimensionsData,\n ChartSizes,\n ChartsScales,\n Cluster,\n DendrogramAesScales,\n LabelAngles,\n Margins,\n} from './components/types';\nimport { CHART_SIDE_ELEMENTS, DEFAULT_AES, LEGEND_OFFSET, MIN_MARGIN, TITLE_LINE } from './constants';\nimport type { GroupedCellsHeatmap } from './getCells';\nimport type { DendrogramsData } from './getDendrograms';\nimport type { HeatmapSettingsImpl } from './HeatmapSettingsImpl';\nimport {\n calculateAnnotationTitleSizes,\n calculateChartSideElementSizes,\n calculateSideElementsBBoxes,\n createContinuousColorScale,\n createDiscreteColorScale,\n createDiscreteRoundColorScale,\n} from './utils';\nimport { calculateCaptionTails } from './utils/calculateCaptionTails';\n\nconst COS_PI_4 = Math.cos(Math.PI / 4);\nconst INCLINE_OFFSET = 5; // height of little triangle of text for captions inclined 45deg\nfunction updateLinksHeight(root: HierarchyPointNode<Cluster>, scale: (v: number) => number, coord: 'x' | 'y') {\n function setHeight(d: HierarchyPointNode<Cluster>) {\n d[coord] = scale(d.data.height);\n if (d.children) d.children.forEach(setHeight);\n }\n setHeight(root);\n}\n\n// add shift to move nodes positions with group gaps\nfunction addShiftToLinkCoord(\n root: HierarchyPointNode<Cluster>,\n shift: number,\n coordFrom: 'x' | 'y',\n coordTo = coordFrom\n) {\n function setX(d: HierarchyPointNode<Cluster>) {\n d[coordTo] = d[coordFrom] + shift;\n if (d.children) d.children.forEach(setX);\n }\n setX(root);\n}\n\nconst getSteps = (count: number, valueExtent: number[]) => {\n const min = Math.min(...valueExtent);\n const max = Math.max(...valueExtent);\n if (min === max) {\n const steps = count % 2 === 0 ? [] : [min];\n for (let i = 1; i < count / 2 + 1; i++) {\n steps.push(min + i);\n steps.unshift(min - i);\n }\n return steps;\n }\n if (count < 2) {\n return [min, max];\n }\n const step = (max - min) / (count - 1);\n const steps = [];\n for (let i = 0; i < count - 1; i++) {\n steps.push(min + step * i);\n }\n steps.push(max);\n return steps;\n};\n\nfunction getContinuousColorRange(normalization: HeatmapSettingsImpl['normalization'], colorsCount: number, valueExtent: number[]) {\n let extent = valueExtent;\n if (normalization) {\n if (normalization.colorRange) {\n extent = normalization.colorRange;\n }\n if (normalization.method === 'standardScaling') {\n extent = [-2, 2];\n }\n if (normalization.method === 'meanNormalization') {\n extent = [-0.75, 0.75];\n }\n }\n return getSteps(colorsCount, extent);\n}\n\nfunction getMaxTextLength(keys: string[], labels: Record<string, string>, textMeasurer: TextMeasurer) {\n let maxLabelSize = 0;\n for (const key of keys) {\n if (labels[key] === undefined) continue;\n const l = textMeasurer.getTextWidth(labels[key]);\n if (l > maxLabelSize) maxLabelSize = l;\n }\n return maxLabelSize;\n}\n\nfunction getCaptionHeight(size: number, angle: number) {\n if (angle === 90) {\n return size;\n }\n if (angle === 45) {\n return size * COS_PI_4 + (size > 0 ? 2 * INCLINE_OFFSET : 0);\n }\n return TITLE_LINE;\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 margins: Margins = {\n top: MIN_MARGIN,\n bottom: MIN_MARGIN,\n left: MIN_MARGIN,\n right: MIN_MARGIN,\n };\n captionsSizes: CaptionsSizes = {\n xAxisCaptions: 100,\n yAxisCaptions: 100,\n xGroupCaptions: TITLE_LINE,\n yGroupCaptions: TITLE_LINE,\n xCaptionTail: 0,\n yCaptionTail: 0,\n };\n labelAngles: LabelAngles = {\n xAxisLabels: 0,\n yAxisLabels: 0,\n xGroupLabels: 0,\n yGroupLabels: 0,\n };\n columnsCount = 1;\n rowsCount = 1;\n scales: ChartsScales = {\n // scales grouped by facet\n x: { null: scaleOrdinal<string, number>().domain(['null']).range([1]) },\n y: { null: scaleOrdinal<string, number>().domain(['null']).range([1]) },\n };\n step: {\n x: Record<string, number>;\n y: Record<string, number>;\n } = { x: {}, y: {} };\n colorScale: ScaleLinear<string, string> | ScaleOrdinal<string, string, string> = scaleLinear<string, string>()\n .domain([0, 1])\n .range(['white', 'black']);\n annotationColorScales: AnnotationColorScales = {};\n dendrogramAesScales: DendrogramAesScales = {};\n legend: LegendData = {\n width: 0,\n height: 0,\n items: [],\n };\n dendrograms: Record<string, ChartDendrograms> = {};\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 updateMargins(title: HeatmapSettingsImpl['chartSettings']['title'], size: HeatmapSettingsImpl['chartSettings']['size']) {\n this.margins = {\n top: title.show ? TITLE_LINE_HEIGHT + TITLE_MARGIN * 2 : size.outerOffset,\n bottom: size.outerOffset,\n left: size.outerOffset,\n right: this.legend.width + size.outerOffset,\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.margins.bottom, this.legend.height);\n }\n\n updateLegendSize(\n valueType: HeatmapSettingsImpl['chartSettings']['valueType'],\n legend: HeatmapSettingsImpl['chartSettings']['legend'],\n annotations: HeatmapSettingsImpl['annotations'],\n columnValue: ColumnName,\n valueExtent: [number, number]\n ) {\n if (!legend.show) {\n this.legend = { width: 0, height: 0, items: [] };\n return;\n }\n const legendHeight = this.chartSizes.chartHeight;\n const legendItems: LegendItem[] = [];\n const emptySizes = { width: 0, height: 0, left: 0, top: 0 };\n\n const getDefaultLabels = (values: (string | number)[]) => values.reduce((res: Record<string, string>, v: string | number) => { res[v] = String(v); return res; }, {});\n if (valueType === 'continuous') {\n const scale = this.colorScale as ScaleLinear<string, string>;\n const values = getContinuousLegendTicks(scale, valueExtent);\n const tickPositionScale = scaleLinear([values[0], values[values.length - 1]], [legendHeight, 0]); //TODO: update during adding log scale for heatmap\n const title = columnValue.label ?? columnValue.value;\n legendItems.push({\n ...emptySizes,\n type: 'continuous',\n id: 'heatmapValue',\n scale,\n values,\n title,\n tickPositionScale\n });\n } else if (valueType === 'discrete') {\n const scale = this.colorScale as ScaleOrdinal<string, string>;\n const title = columnValue.label ?? columnValue.value;\n const values = scale.domain();\n const labels = getDefaultLabels(values);\n\n legendItems.push({ ...emptySizes, type: 'discreteColor', id: 'heatmapValue', title, scale, values, labels });\n }\n annotations.forEach(item => {\n const title = item.valueColumn.label ?? item.valueColumn.value;\n if (item.type === 'continuous') {\n const scale = this.annotationColorScales[item.id].scale as ScaleLinear<string, string>;\n const values = getContinuousLegendTicks(scale, valueExtent);\n const tickPositionScale = scaleLinear([values[0], values[values.length - 1]], [legendHeight, 0]); //TODO: update during adding log scale for heatmap\n\n legendItems.push({ ...emptySizes, type: 'continuous', id: item.id, tickPositionScale, title, scale, values });\n }\n if (item.type === 'discrete') {\n const scale = this.annotationColorScales[item.id].scale as ScaleOrdinal<string, string>;\n const values = scale.domain();\n const labels = getDefaultLabels(values);\n\n legendItems.push({ ...emptySizes, type: 'discreteColor', id: item.id, title, scale, values, labels });\n }\n });\n\n if (!legendItems.length) {\n this.legend = { width: 0, height: 0, items: [] };\n return;\n }\n\n const items = arrangeLegendParts(legendItems, this.chartSizes.chartHeight);\n 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 updateCaptionsSize(\n groupedCells: GroupedCellsHeatmap,\n xAxis: HeatmapSettingsImpl['chartSettings']['xAxis'],\n yAxis: HeatmapSettingsImpl['chartSettings']['yAxis'],\n facetSettings: HeatmapSettingsImpl['facetSettings']\n ) {\n const textMeasurer = new TextMeasurer('bold 16px Manrope');\n const { xGroupKeys, yGroupKeys, xGroupLabels, yGroupLabels, xKeysByGroups, yKeysByGroups, xLabels, yLabels } = groupedCells.meta;\n this.labelAngles = {\n xAxisLabels: xAxis.axisLabelsAngle,\n yAxisLabels: yAxis.axisLabelsAngle,\n xGroupLabels: xAxis.groupLabelsAngle,\n yGroupLabels: yAxis.groupLabelsAngle,\n };\n\n const maxXLabelSize = xGroupKeys.reduce((res, key) => Math.max(res, getMaxTextLength(xKeysByGroups[key], xLabels, textMeasurer)), 0);\n const maxYLabelSize = yGroupKeys.reduce((res, key) => Math.max(res, getMaxTextLength(yKeysByGroups[key], yLabels, textMeasurer)), 0);\n const maxXGroupLabelSize = getMaxTextLength(xGroupKeys, xGroupLabels, textMeasurer);\n const maxYGroupLabelSize = getMaxTextLength(yGroupKeys, yGroupLabels, textMeasurer);\n const { xCaptionTail, yCaptionTail } = calculateCaptionTails(\n this.labelAngles,\n facetSettings,\n this.scales,\n this.step,\n groupedCells,\n textMeasurer\n );\n this.captionsSizes = {\n xCaptionTail,\n yCaptionTail,\n xGroupCaptions: getCaptionHeight(maxXGroupLabelSize, this.labelAngles.xGroupLabels),\n yGroupCaptions: getCaptionHeight(maxYGroupLabelSize, this.labelAngles.yGroupLabels),\n xAxisCaptions: getCaptionHeight(maxXLabelSize, this.labelAngles.xAxisLabels),\n yAxisCaptions: getCaptionHeight(maxYLabelSize, this.labelAngles.yAxisLabels),\n };\n }\n\n updateChartDimensions(\n size: HeatmapSettingsImpl['chartSettings']['size'],\n facetKeys: string[],\n xGroupKeys: string[],\n yGroupKeys: string[],\n facetSettings: HeatmapSettingsImpl['facetSettings'],\n xAxis: HeatmapSettingsImpl['chartSettings']['xAxis'],\n yAxis: HeatmapSettingsImpl['chartSettings']['yAxis'],\n annotations: HeatmapSettingsImpl['annotations'],\n dendrogramX: HeatmapSettingsImpl['dendrogramX'],\n dendrogramY: HeatmapSettingsImpl['dendrogramY']\n ) {\n const facetCount = facetKeys.length;\n const maxNRows = Math.min(facetSettings.nRows ?? facetCount, facetCount);\n const maxNCols = Math.min(facetSettings.nCols ?? facetCount, facetCount);\n // Use columns/rows count from settings if some of them defined, else make 1 column\n this.columnsCount = facetSettings.nRows ? Math.ceil(facetCount / maxNRows) : maxNCols;\n this.rowsCount = Math.ceil(facetCount / this.columnsCount);\n const { sharedX, sharedY } = facetSettings;\n\n this.chartsDimensions = {};\n\n let currentLeft = 0;\n let currentTop = 0;\n facetKeys.forEach((key, index) => {\n const currentColumn = (index % this.columnsCount) + 1;\n const chartSides = getChartEdgeSides(index, facetKeys.length, this.columnsCount, this.rowsCount);\n const stepX = this.step.x[key];\n const stepY = this.step.y[key];\n const sideElementSizes = calculateChartSideElementSizes(\n xAxis,\n yAxis,\n this.captionsSizes,\n annotations,\n dendrogramX,\n dendrogramY,\n chartSides,\n sharedX,\n sharedY,\n facetKeys,\n xGroupKeys,\n yGroupKeys,\n stepX,\n stepY\n );\n const annotationsTitleSizes = calculateAnnotationTitleSizes(annotations, chartSides, sharedX, sharedY);\n function getPadding(side: 'left' | 'right' | 'top' | 'bottom') {\n return Math.max(\n CHART_SIDE_ELEMENTS[side].reduce((res, el) => res + sideElementSizes[side][el], 0),\n annotationsTitleSizes[side],\n size.innerOffset\n );\n }\n const padding = {\n left: getPadding('left'),\n right: getPadding('right'),\n top: getPadding('top'),\n bottom: getPadding('bottom'),\n };\n if (padding.left < this.captionsSizes.xCaptionTail) {\n padding.left = this.captionsSizes.xCaptionTail;\n }\n if (padding.bottom < this.captionsSizes.yCaptionTail) {\n padding.bottom = this.captionsSizes.yCaptionTail;\n }\n const sideElementBBoxes = calculateSideElementsBBoxes(sideElementSizes, this.chartSizes.chartWidth, this.chartSizes.chartHeight);\n const outerWidth = this.chartSizes.chartWidth + padding.left + padding.right;\n const outerHeight = this.chartSizes.chartHeight + padding.top + padding.bottom;\n this.chartsDimensions[key] = {\n left: currentLeft,\n top: currentTop,\n inner: { width: this.chartSizes.chartWidth, height: this.chartSizes.chartHeight },\n outer: { width: outerWidth, height: outerHeight },\n padding,\n sideElementBBoxes,\n chartEdgeSides: chartSides,\n };\n currentLeft += outerWidth;\n if (currentColumn === this.columnsCount) {\n currentLeft = 0;\n currentTop += outerHeight;\n }\n });\n\n // sum of widths of first row\n const chartsWidth = facetKeys\n .slice(0, this.columnsCount)\n .reduce((sum, key) => sum + this.chartsDimensions[key].outer.width, 0);\n // sum of heights of first column\n const chartsHeight = facetKeys\n .filter((_key, index) => index % this.columnsCount === 0)\n .reduce((sum, key) => sum + this.chartsDimensions[key].outer.height, 0);\n this.chartSizes.chartsWidth = chartsWidth;\n this.chartSizes.chartsHeight = chartsHeight;\n }\n\n updateChartsSizes(\n size: HeatmapSettingsImpl['chartSettings']['size'],\n facetSettings: HeatmapSettingsImpl['facetSettings'],\n groupedCells: GroupedCellsHeatmap,\n groupGap: number,\n ) {\n const { width, height, cellWidth, cellHeight } = size;\n const firstFacet = groupedCells.meta.facetKeys[0];\n if (cellWidth && facetSettings.sharedX && firstFacet) {\n const keysCount = groupedCells.facets[firstFacet].xKeys.length;\n const groupsCount = groupedCells.meta.xGroupKeys.length;\n this.chartSizes.chartWidth = keysCount * cellWidth + groupGap * (groupsCount - 1);\n } else {\n this.chartSizes.chartWidth = width;\n }\n\n if (cellHeight && facetSettings.sharedY && firstFacet) {\n const keysCount = groupedCells.facets[firstFacet].yKeys.length;\n const groupsCount = groupedCells.meta.yGroupKeys.length;\n this.chartSizes.chartHeight = keysCount * cellHeight + groupGap * (groupsCount - 1);\n } else {\n this.chartSizes.chartHeight = height;\n }\n }\n\n // update scales for cell positions, x and y for each facet\n updateScales(\n facetKeys: string[],\n groupedCells: GroupedCellsHeatmap,\n groupGap: number,\n facetSettings: HeatmapSettingsImpl['facetSettings'],\n size: HeatmapSettingsImpl['chartSettings']['size'],\n xAxis: HeatmapSettingsImpl['chartSettings']['xAxis'],\n yAxis: HeatmapSettingsImpl['chartSettings']['yAxis'],\n dendrogramX: HeatmapSettingsImpl['dendrogramX'],\n dendrogramY: HeatmapSettingsImpl['dendrogramY'],\n customOrder: {x: boolean, y: boolean, xGroup: boolean, yGroup: boolean},\n ) {\n const { width, height, cellWidth, cellHeight } = size;\n const { meta, facets } = groupedCells;\n const { sharedX, sharedY } = facetSettings;\n const sortX = (arr: string[], labels: Record<string, string> = {}) => {\n return arr.sort((a, b) => xAxis.sorting === 'asc'\n ? (labels[a] ?? a).localeCompare((labels[b] ?? b), 'en', { numeric: true })\n : (labels[b] ?? b).localeCompare((labels[a] ?? a), 'en', { numeric: true })\n );\n };\n const sortY = (arr: string[], labels: Record<string, string> = {}) => {\n return arr.sort((a, b) => yAxis.sorting === 'asc'\n ? (labels[a] ?? a).localeCompare((labels[b] ?? b), 'en', { numeric: true })\n : (labels[b] ?? b).localeCompare((labels[a] ?? a), 'en', { numeric: true })\n );\n };\n facetKeys.forEach(facetKey => {\n const facetGroup = facets[facetKey];\n const xGroupKeys = customOrder.xGroup ? meta.xGroupKeys : sortX(meta.xGroupKeys);\n const yGroupKeys = customOrder.yGroup ? meta.yGroupKeys : sortY(meta.yGroupKeys);\n const { xKeysByGroups } = sharedX ? meta : facetGroup;\n const { yKeysByGroups } = sharedY ? meta : facetGroup;\n // for shared facets max cells counts in group should be used\n const xCounts = xGroupKeys.map(xGroupKey => xKeysByGroups[xGroupKey].length);\n const yCounts = yGroupKeys.map(yGroupKey => yKeysByGroups[yGroupKey].length);\n const xCellsCount = xCounts.reduce((sum, count) => sum + count, 0);\n const yCellsCount = yCounts.reduce((sum, count) => sum + count, 0);\n const xStep = sharedX && cellWidth ? cellWidth : (width - (xCounts.filter(count => count > 0).length - 1) * groupGap) / xCellsCount;\n const yStep = sharedY && cellHeight ? cellHeight : (height - (yCounts.filter(count => count > 0).length - 1) * groupGap) / yCellsCount;\n\n const xPositions: number[] = [];\n const xKeys: string[] = [];\n let currentX = 0;\n xGroupKeys.forEach(xKey => {\n const axisKeys = dendrogramX || customOrder.x ? xKeysByGroups[xKey] : sortX(xKeysByGroups[xKey], meta.xLabels);\n xKeys.push(...axisKeys);\n axisKeys.forEach(() => {\n xPositions.push(currentX);\n currentX += xStep;\n });\n // do not add offset for empty group\n if (axisKeys.length > 0) {\n currentX += groupGap;\n }\n });\n\n const yPositions: number[] = [];\n const yKeys: string[] = [];\n let currentY = 0;\n yGroupKeys.forEach(yKey => {\n const axisKeys = dendrogramY || customOrder.y ? yKeysByGroups[yKey] : sortY(yKeysByGroups[yKey], meta.yLabels);\n yKeys.push(...axisKeys);\n axisKeys.forEach(() => {\n yPositions.push(currentY);\n currentY += yStep;\n });\n // do not add offset for empty group\n if (axisKeys.length > 0) {\n currentY += groupGap;\n }\n });\n\n this.scales.x[facetKey] = scaleOrdinal<string, number>().domain(xKeys).range(xPositions);\n this.scales.y[facetKey] = scaleOrdinal<string, number>().domain(yKeys).range(yPositions);\n this.step.x[facetKey] = xStep;\n this.step.y[facetKey] = yStep;\n });\n }\n\n updateAesScale(\n valueType: 'discrete' | 'continuous',\n valueExtent: [number, number],\n aes: HeatmapSettingsImpl['aes'],\n annotations: HeatmapSettingsImpl['annotations'],\n groupedCellsData: GroupedCellsHeatmap,\n cellUniqValues: DataValue[],\n normalization: HeatmapSettingsImpl['normalization']\n ) {\n if (valueType === 'continuous') {\n if (aes.valueColors) {\n this.colorScale = scaleLinear<string, string>()\n .domain(aes.valuesByColors ?? getContinuousColorRange(normalization, aes.valueColors.length, valueExtent))\n .range(aes.valueColors);\n } else if (aes.colorsList) {\n this.colorScale = scaleLinear<string, string>()\n .domain(getContinuousColorRange(normalization, aes.colorsList.length, valueExtent))\n .range(aes.colorsList);\n }\n } else {\n if (aes.colorsMap) {\n const valueKeys = Object.entries(aes.colorsMap);\n this.colorScale = scaleOrdinal<string, string>()\n .domain(valueKeys.map(v => v[0]))\n .range(valueKeys.map(v => v[1]))\n .unknown('#ccc');\n } else if (aes.colorsList) {\n this.colorScale = createDiscreteColorScale(aes.colorsList, cellUniqValues.map(String));\n }\n }\n\n const { xDataByKeys, yDataByKeys } = groupedCellsData.meta;\n annotations.forEach(item => {\n const { colors, type, axis, valueColumn } = item;\n const data = (axis === 'x' ? xDataByKeys : yDataByKeys)[valueColumn.valueLabels ?? valueColumn.value];\n if (type === 'discrete') {\n const discreteValues = lodash.uniq(Object.values(data).map(String)).sort();\n this.annotationColorScales[item.id] = {\n type: 'discrete',\n scale: createDiscreteRoundColorScale(colors, discreteValues),\n };\n } else {\n const values = Object.values(data).map(Number);\n if (!values.length) {\n return;\n }\n const [min = values[0], max = values[0]] = extent(values);\n this.annotationColorScales[item.id] = {\n type: 'continuous',\n scale: createContinuousColorScale(colors, min, max, 0, 0.5, 1),\n };\n }\n });\n }\n\n updateDendrogram(\n facetKeys: string[],\n xGroupKeys: string[],\n yGroupKeys: string[],\n groups: GroupedCellsHeatmap['facets'],\n dendrogramsData: DendrogramsData,\n dendrogramX: HeatmapSettingsImpl['dendrogramX'],\n dendrogramY: HeatmapSettingsImpl['dendrogramY']\n ) {\n facetKeys.forEach(facetKey => {\n this.dendrograms[facetKey] = { x: { treesByGroupKey: {}, data: dendrogramX }, y: { treesByGroupKey: {}, data: dendrogramY } };\n const { xKeysByGroups, yKeysByGroups } = groups[facetKey];\n const { hierarchyByGroupX, hierarchyByGroupY } = dendrogramsData[facetKey];\n if (dendrogramX) {\n const maxHeightX = xGroupKeys.reduce((res, xKey) => Math.max(res, hierarchyByGroupX[xKey]?.data.height), 0);\n this.dendrograms[facetKey].x.treesByGroupKey = xGroupKeys.reduce((res, groupKey) => {\n const hierarchy = hierarchyByGroupX[groupKey];\n const xKeys = xKeysByGroups[groupKey];\n cluster()\n .separation(() => 1)\n .size([xKeys.length * this.step.x[facetKey], dendrogramX.size])(\n hierarchy as HierarchyNode<unknown>\n );\n const root = hierarchy as HierarchyPointNode<Cluster>;\n const heightScale = scaleLinear()\n .domain(dendrogramX.position === 'top' ? [0, maxHeightX] : [maxHeightX, 0])\n .range([dendrogramX.size, 0]);\n updateLinksHeight(root, heightScale, 'y');\n addShiftToLinkCoord(root, this.scales.x[facetKey](xKeys[0]), 'x');\n res[groupKey] = root;\n return res;\n }, {} as Record<string, HierarchyPointNode<Cluster>>);\n this.dendrograms[facetKey].x.data = dendrogramX;\n }\n if (dendrogramY) {\n const maxHeightY = yGroupKeys.reduce((res, yKey) => Math.max(res, hierarchyByGroupY[yKey]?.data.height), 0);\n this.dendrograms[facetKey].y.treesByGroupKey = yGroupKeys.reduce((res, groupKey) => {\n const hierarchy = hierarchyByGroupY[groupKey];\n const yKeys = yKeysByGroups[groupKey];\n cluster()\n .separation(() => 1)\n .size([yKeys.length * this.step.y[facetKey], dendrogramY.size])(\n hierarchy as HierarchyNode<unknown>\n );\n const root = hierarchy as HierarchyPointNode<Cluster>;\n const heightScale = scaleLinear()\n .domain(dendrogramY.position === 'left' ? [0, maxHeightY] : [maxHeightY, 0])\n .range([dendrogramY.size, 0]);\n addShiftToLinkCoord(root, this.scales.y[facetKey](yKeys[0]), 'x', 'y');\n updateLinksHeight(root, heightScale, 'x');\n res[groupKey] = root;\n return res;\n }, {} as Record<string, HierarchyPointNode<Cluster>>);\n this.dendrograms[facetKey].y.data = dendrogramY;\n }\n });\n }\n\n updateDendrogramAesScales(inheritedAes: HeatmapSettingsImpl['inheritedDendrogramAes']) {\n if (!inheritedAes) {\n return;\n }\n const usedColumns = Object.keys(inheritedAes);\n this.dendrogramAesScales = usedColumns.reduce((res: DendrogramAesScales, columnName) => {\n const aesMap = inheritedAes[columnName];\n const columnValues: string[] = Object.keys(aesMap);\n res[columnName] = scaleOrdinal<string, AesItem, AesItem>()\n .domain(columnValues)\n .range(\n columnValues.map(value => ({\n ...DEFAULT_AES,\n ...aesMap[value],\n }))\n )\n .unknown(DEFAULT_AES);\n return res;\n }, {});\n }\n\n render(\n dataFrame: DataFrame,\n settingsId: string,\n chartSettings: HeatmapSettingsImpl['chartSettings'],\n facetSettings: HeatmapSettingsImpl['facetSettings'],\n aes: HeatmapSettingsImpl['aes'],\n groupedCellsData: GroupedCellsHeatmap,\n annotations: HeatmapSettingsImpl['annotations'],\n valueColumn: ColumnName,\n dendrogramX: HeatmapSettingsImpl['dendrogramX'],\n dendrogramY: HeatmapSettingsImpl['dendrogramY'],\n dendrogramsData: DendrogramsData,\n inheritedDendrogramAes: HeatmapSettingsImpl['inheritedDendrogramAes'],\n cellUniqValues: DataValue[],\n normalization: HeatmapSettingsImpl['normalization'],\n onTooltipHintSwitch: (v: boolean) => void,\n customOrder: {x: boolean, y: boolean, xGroup: boolean, yGroup: boolean},\n cellsRenderingMode: 'canvas' | 'svg'\n ) {\n const { meta, facets } = groupedCellsData;\n const { facetKeys, xGroupKeys, yGroupKeys, valueExtent } = meta;\n const { xAxis, yAxis, title, size, valueType } = chartSettings;\n this.updateChartsSizes(size, facetSettings, groupedCellsData, aes.groupGap);\n this.updateAesScale(valueType, valueExtent.dataSource, aes, annotations, groupedCellsData, cellUniqValues, normalization);\n this.updateScales(facetKeys, groupedCellsData, aes.groupGap, facetSettings, size, chartSettings.xAxis, chartSettings.yAxis, dendrogramX, dendrogramY, customOrder);\n // caption sizes are needed for chart paddings in chart dimensions\n this.updateCaptionsSize(groupedCellsData, xAxis, yAxis, facetSettings);\n this.updateChartDimensions(\n size,\n facetKeys,\n xGroupKeys,\n yGroupKeys,\n facetSettings,\n xAxis,\n yAxis,\n annotations,\n dendrogramX,\n dendrogramY\n );\n this.updateLegendSize(valueType, chartSettings.legend, annotations, valueColumn, valueExtent.dataSource);\n this.updateMargins(title, size);\n this.updateDendrogram(facetKeys, xGroupKeys, yGroupKeys, facets, dendrogramsData, dendrogramX, dendrogramY);\n this.updateDendrogramAesScales(inheritedDendrogramAes);\n const component = (\n <DataFrameProvider dataFrame={dataFrame}>\n <ChartsGroup\n aes={aes}\n annotations={annotations}\n annotationColorScales={this.annotationColorScales}\n captionsSizes={this.captionsSizes}\n cellsMeta={meta}\n columnsCount={this.columnsCount}\n chartsDimensions={this.chartsDimensions}\n chartSettings={chartSettings}\n chartSizes={this.chartSizes}\n colorScale={this.colorScale as (v: unknown) => string}\n dendrogramAesScales={this.dendrogramAesScales}\n dendrograms={this.dendrograms}\n facetKeys={facetKeys}\n facetSettings={facetSettings}\n groupedCells={facets}\n labelAngles={this.labelAngles}\n legend={this.legend}\n margins={this.margins}\n scales={this.scales}\n settingsId={settingsId}\n step={this.step}\n xGroupKeys={xGroupKeys}\n yGroupKeys={yGroupKeys}\n onTooltipHintSwitch={onTooltipHintSwitch}\n cellsRenderingMode={cellsRenderingMode}\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":["COS_PI_4","INCLINE_OFFSET","updateLinksHeight","root","scale","coord","setHeight","d","addShiftToLinkCoord","shift","coordFrom","coordTo","setX","getSteps","count","valueExtent","min","max","steps","i","step","getContinuousColorRange","normalization","colorsCount","extent","getMaxTextLength","keys","labels","textMeasurer","maxLabelSize","key","l","getCaptionHeight","size","angle","TITLE_LINE","ChartRenderer","__publicField","jsx","Fragment","DEFAULT_WIDTH","DEFAULT_HEIGHT","MIN_MARGIN","scaleOrdinal","scaleLinear","_a","node","createRoot","title","TITLE_LINE_HEIGHT","TITLE_MARGIN","valueType","legend","annotations","columnValue","legendHeight","legendItems","emptySizes","getDefaultLabels","values","res","v","getContinuousLegendTicks","tickPositionScale","item","items","arrangeLegendParts","lastItem","legendWidth","LEGEND_OFFSET","groupedCells","xAxis","yAxis","facetSettings","TextMeasurer","xGroupKeys","yGroupKeys","xGroupLabels","yGroupLabels","xKeysByGroups","yKeysByGroups","xLabels","yLabels","maxXLabelSize","maxYLabelSize","maxXGroupLabelSize","maxYGroupLabelSize","xCaptionTail","yCaptionTail","calculateCaptionTails","facetKeys","dendrogramX","dendrogramY","facetCount","maxNRows","maxNCols","sharedX","sharedY","currentLeft","currentTop","index","currentColumn","chartSides","getChartEdgeSides","stepX","stepY","sideElementSizes","calculateChartSideElementSizes","annotationsTitleSizes","calculateAnnotationTitleSizes","getPadding","side","CHART_SIDE_ELEMENTS","el","padding","sideElementBBoxes","calculateSideElementsBBoxes","outerWidth","outerHeight","chartsWidth","sum","chartsHeight","_key","groupGap","width","height","cellWidth","cellHeight","firstFacet","keysCount","groupsCount","customOrder","meta","facets","sortX","arr","a","b","sortY","facetKey","facetGroup","xCounts","xGroupKey","yCounts","yGroupKey","xCellsCount","yCellsCount","xStep","yStep","xPositions","xKeys","currentX","xKey","axisKeys","yPositions","yKeys","currentY","yKey","aes","groupedCellsData","cellUniqValues","valueKeys","createDiscreteColorScale","xDataByKeys","yDataByKeys","colors","type","axis","valueColumn","data","discreteValues","lodash","createDiscreteRoundColorScale","createContinuousColorScale","groups","dendrogramsData","hierarchyByGroupX","hierarchyByGroupY","maxHeightX","groupKey","hierarchy","cluster","heightScale","maxHeightY","inheritedAes","usedColumns","columnName","aesMap","columnValues","value","DEFAULT_AES","dataFrame","settingsId","chartSettings","inheritedDendrogramAes","onTooltipHintSwitch","cellsRenderingMode","component","DataFrameProvider","ChartsGroup","message","Error"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { TooltipsData } from '../../../common/Tooltip';
|
|
2
2
|
import { DataValue } from '../../../types';
|
|
3
|
-
import {
|
|
3
|
+
import { CellHeatmap, GroupedCellsHeatmap } from '../../getCells';
|
|
4
4
|
import { HeatmapSettingsImpl } from '../../HeatmapSettingsImpl';
|
|
5
5
|
import { AnnotationColorScales, AnnotationTooltipData, ChartScales } from '../types';
|
|
6
6
|
interface AnnotationProps {
|
|
@@ -21,9 +21,9 @@ interface AnnotationProps {
|
|
|
21
21
|
frame: HeatmapSettingsImpl['chartSettings']['frame'];
|
|
22
22
|
xGroupKeys: string[];
|
|
23
23
|
yGroupKeys: string[];
|
|
24
|
-
xKeysByGroups:
|
|
25
|
-
yKeysByGroups:
|
|
26
|
-
tooltipsData: TooltipsData<
|
|
24
|
+
xKeysByGroups: GroupedCellsHeatmap['facets'][keyof GroupedCellsHeatmap['facets']]['xKeysByGroups'];
|
|
25
|
+
yKeysByGroups: GroupedCellsHeatmap['facets'][keyof GroupedCellsHeatmap['facets']]['yKeysByGroups'];
|
|
26
|
+
tooltipsData: TooltipsData<CellHeatmap | AnnotationTooltipData>;
|
|
27
27
|
cellsRenderingMode: 'canvas' | 'svg';
|
|
28
28
|
}
|
|
29
29
|
export declare function Annotation({ facetKey, data, scales, stepX, stepY, x, y, annotation, showTitle, width, height, colorScale, aes, frame, xGroupKeys, yGroupKeys, xKeysByGroups, yKeysByGroups, tooltipsData, cellsRenderingMode, }: AnnotationProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Annotation.d.ts","sourceRoot":"","sources":["../../../../src/heatmap/components/Annotations/Annotation.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAE5D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"Annotation.d.ts","sourceRoot":"","sources":["../../../../src/heatmap/components/Annotations/Annotation.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAE5D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,OAAO,KAAK,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACvE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,KAAK,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAuB1F,UAAU,eAAe;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,WAAW,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAChC,UAAU,EAAE,mBAAmB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;IAClD,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAC1C,GAAG,EAAE,mBAAmB,CAAC,KAAK,CAAC,CAAC;IAChC,KAAK,EAAE,mBAAmB,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,CAAC;IACrD,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,aAAa,EAAE,mBAAmB,CAAC,QAAQ,CAAC,CAAC,MAAM,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;IACnG,aAAa,EAAE,mBAAmB,CAAC,QAAQ,CAAC,CAAC,MAAM,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;IACnG,YAAY,EAAE,YAAY,CAAC,WAAW,GAAG,qBAAqB,CAAC,CAAC;IAChE,kBAAkB,EAAE,QAAQ,GAAG,KAAK,CAAA;CACvC;AAED,wBAAgB,UAAU,CAAC,EACvB,QAAQ,EACR,IAAI,EACJ,MAAM,EACN,KAAK,EACL,KAAK,EACL,CAAC,EACD,CAAC,EACD,UAAU,EACV,SAAS,EACT,KAAK,EACL,MAAM,EACN,UAAU,EACV,GAAG,EACH,KAAK,EACL,UAAU,EACV,UAAU,EACV,aAAa,EACb,aAAa,EACb,YAAY,EACZ,kBAAkB,GACrB,EAAE,eAAe,2CAuIjB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Annotation.js","sources":["../../../../src/heatmap/components/Annotations/Annotation.tsx"],"sourcesContent":["import type { TooltipsData } from '../../../common/Tooltip';\nimport { BLACK } from '../../../constants';\nimport type { DataValue } from '../../../types';\nimport { ANNOTATION_WIDTH } from '../../constants';\nimport type { Cell, GroupedCellsData } from '../../getCells';\nimport type { HeatmapSettingsImpl } from '../../HeatmapSettingsImpl';\nimport type { AnnotationColorScales, AnnotationTooltipData, ChartScales } from '../types';\nimport { AnnotationCellsCanvas } from './AnnotationCellsCanvas';\nimport { AnnotationCellsSvg } from './AnnotationCellsSvg';\n\nfunction getTextPosition(\n vertical: boolean,\n annotationPosition: string,\n titlePosition: string,\n width: number,\n height: number\n) {\n if (vertical) {\n const x = ANNOTATION_WIDTH / 2;\n const y = titlePosition === 'top' ? -5 : height + 5;\n const rotate = annotationPosition === 'left' ? -90 : 90;\n const anchor = annotationPosition === 'left' && titlePosition === 'top' ? 'start' : 'end';\n return { x, y, rotate, anchor };\n }\n const x = titlePosition === 'right' ? width + 5 : -5;\n const y = ANNOTATION_WIDTH / 2;\n const anchor = titlePosition === 'right' ? 'start' : 'end';\n return { x, y, rotate: 0, anchor };\n}\ninterface AnnotationProps {\n facetKey: string;\n scales: ChartScales;\n data: Record<string, DataValue>;\n annotation: HeatmapSettingsImpl['annotations'][0];\n stepX: number;\n stepY: number;\n vertical?: boolean;\n x: number;\n y: number;\n width: number;\n height: number;\n showTitle: boolean;\n colorScale: AnnotationColorScales[string];\n aes: HeatmapSettingsImpl['aes'];\n frame: HeatmapSettingsImpl['chartSettings']['frame'];\n xGroupKeys: string[];\n yGroupKeys: string[];\n xKeysByGroups: GroupedCellsData['facets'][keyof GroupedCellsData['facets']]['xKeysByGroups'];\n yKeysByGroups: GroupedCellsData['facets'][keyof GroupedCellsData['facets']]['yKeysByGroups'];\n tooltipsData: TooltipsData<Cell | AnnotationTooltipData>;\n cellsRenderingMode: 'canvas' | 'svg'\n}\n\nexport function Annotation({\n facetKey,\n data,\n scales,\n stepX,\n stepY,\n x,\n y,\n annotation,\n showTitle,\n width,\n height,\n colorScale,\n aes,\n frame,\n xGroupKeys,\n yGroupKeys,\n xKeysByGroups,\n yKeysByGroups,\n tooltipsData,\n cellsRenderingMode,\n}: AnnotationProps) {\n const { position, titlePosition, valueColumn } = annotation;\n const vertical = position === 'left' || position === 'right';\n const keys = (vertical ? scales.y : scales.x).domain();\n const textPosition = getTextPosition(vertical, position, titlePosition, width, height);\n\n return (\n <g>\n {cellsRenderingMode === 'svg' && (\n <AnnotationCellsSvg\n facetKey={facetKey}\n scales={scales}\n keys={keys}\n x={x}\n y={y}\n stepX={stepX}\n stepY={stepY}\n vertical={vertical}\n aes={aes}\n colorScale={colorScale}\n data={data}\n annotation={annotation}\n tooltipsData={tooltipsData}\n />\n )}\n {cellsRenderingMode === 'canvas' && (\n <AnnotationCellsCanvas\n facetKey={facetKey}\n scales={scales}\n keys={keys}\n x={x}\n y={y}\n stepX={stepX}\n stepY={stepY}\n vertical={vertical}\n aes={aes}\n colorScale={colorScale}\n data={data}\n annotation={annotation}\n tooltipsData={tooltipsData}\n />\n )}\n {tooltipsData.fixed && !vertical && xGroupKeys.map(xGroupKey => {\n const keysCountX = xKeysByGroups[xGroupKey].length;\n if (keysCountX === 0) {\n return null;\n }\n const groupWidth = keysCountX * stepX;\n const groupX = scales.x(xKeysByGroups[xGroupKey][0]);\n return (\n <rect\n key={`${groupX}_${y}`}\n x={groupX + x}\n y={y}\n width={groupWidth}\n height={ANNOTATION_WIDTH}\n stroke=\"none\"\n fill=\"rgba(255, 255, 255, 0.8)\"\n />\n );\n })}\n {tooltipsData.fixed && vertical && yGroupKeys.map(yGroupKey => {\n const keysCountY = yKeysByGroups[yGroupKey].length;\n if (keysCountY === 0) {\n return null;\n }\n const groupHeight = keysCountY * stepY;\n const groupY = scales.y(yKeysByGroups[yGroupKey][0]);\n return (\n <rect\n key={`${x}_${groupY}`}\n x={x}\n y={groupY + y}\n width={ANNOTATION_WIDTH}\n height={groupHeight}\n stroke=\"none\"\n fill=\"rgba(255, 255, 255, 0.8)\"\n />\n );\n })}\n {frame.type === 'groups' &&\n !vertical &&\n xGroupKeys.map(xGroupKey => {\n const keysCountX = xKeysByGroups[xGroupKey].length;\n if (keysCountX === 0) {\n return null;\n }\n const groupWidth = keysCountX * stepX;\n const groupX = scales.x(xKeysByGroups[xGroupKey][0]);\n return (\n <rect\n key={`${groupX}_${y}`}\n x={groupX + x}\n y={y}\n width={groupWidth}\n height={ANNOTATION_WIDTH}\n stroke={BLACK}\n fill=\"none\"\n />\n );\n })}\n {frame.type === 'groups' &&\n vertical &&\n yGroupKeys.map(yGroupKey => {\n const keysCountY = yKeysByGroups[yGroupKey].length;\n if (keysCountY === 0) {\n return null;\n }\n const groupHeight = keysCountY * stepY;\n const groupY = scales.y(yKeysByGroups[yGroupKey][0]);\n return (\n <rect\n key={`${x}_${groupY}`}\n x={x}\n y={groupY + y}\n width={ANNOTATION_WIDTH}\n height={groupHeight}\n stroke={BLACK}\n fill=\"none\"\n />\n );\n })}\n {showTitle && (\n <g\n fontWeight=\"500\"\n fontSize=\"14px\"\n transform={`translate(${x + textPosition.x},${y + textPosition.y}) rotate(${textPosition.rotate})`}\n >\n <text textAnchor={textPosition.anchor} dominantBaseline=\"central\">\n {valueColumn.label ?? valueColumn.value}\n </text>\n </g>\n )}\n </g>\n );\n}\n"],"names":["getTextPosition","vertical","annotationPosition","titlePosition","width","height","x","ANNOTATION_WIDTH","y","anchor","Annotation","facetKey","data","scales","stepX","stepY","annotation","showTitle","colorScale","aes","frame","xGroupKeys","yGroupKeys","xKeysByGroups","yKeysByGroups","tooltipsData","cellsRenderingMode","position","valueColumn","keys","textPosition","jsx","AnnotationCellsSvg","AnnotationCellsCanvas","xGroupKey","keysCountX","groupWidth","groupX","yGroupKey","keysCountY","groupHeight","groupY","BLACK"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Annotation.js","sources":["../../../../src/heatmap/components/Annotations/Annotation.tsx"],"sourcesContent":["import type { TooltipsData } from '../../../common/Tooltip';\nimport { BLACK } from '../../../constants';\nimport type { DataValue } from '../../../types';\nimport { ANNOTATION_WIDTH } from '../../constants';\nimport type { CellHeatmap, GroupedCellsHeatmap } from '../../getCells';\nimport type { HeatmapSettingsImpl } from '../../HeatmapSettingsImpl';\nimport type { AnnotationColorScales, AnnotationTooltipData, ChartScales } from '../types';\nimport { AnnotationCellsCanvas } from './AnnotationCellsCanvas';\nimport { AnnotationCellsSvg } from './AnnotationCellsSvg';\n\nfunction getTextPosition(\n vertical: boolean,\n annotationPosition: string,\n titlePosition: string,\n width: number,\n height: number\n) {\n if (vertical) {\n const x = ANNOTATION_WIDTH / 2;\n const y = titlePosition === 'top' ? -5 : height + 5;\n const rotate = annotationPosition === 'left' ? -90 : 90;\n const anchor = annotationPosition === 'left' && titlePosition === 'top' ? 'start' : 'end';\n return { x, y, rotate, anchor };\n }\n const x = titlePosition === 'right' ? width + 5 : -5;\n const y = ANNOTATION_WIDTH / 2;\n const anchor = titlePosition === 'right' ? 'start' : 'end';\n return { x, y, rotate: 0, anchor };\n}\ninterface AnnotationProps {\n facetKey: string;\n scales: ChartScales;\n data: Record<string, DataValue>;\n annotation: HeatmapSettingsImpl['annotations'][0];\n stepX: number;\n stepY: number;\n vertical?: boolean;\n x: number;\n y: number;\n width: number;\n height: number;\n showTitle: boolean;\n colorScale: AnnotationColorScales[string];\n aes: HeatmapSettingsImpl['aes'];\n frame: HeatmapSettingsImpl['chartSettings']['frame'];\n xGroupKeys: string[];\n yGroupKeys: string[];\n xKeysByGroups: GroupedCellsHeatmap['facets'][keyof GroupedCellsHeatmap['facets']]['xKeysByGroups'];\n yKeysByGroups: GroupedCellsHeatmap['facets'][keyof GroupedCellsHeatmap['facets']]['yKeysByGroups'];\n tooltipsData: TooltipsData<CellHeatmap | AnnotationTooltipData>;\n cellsRenderingMode: 'canvas' | 'svg'\n}\n\nexport function Annotation({\n facetKey,\n data,\n scales,\n stepX,\n stepY,\n x,\n y,\n annotation,\n showTitle,\n width,\n height,\n colorScale,\n aes,\n frame,\n xGroupKeys,\n yGroupKeys,\n xKeysByGroups,\n yKeysByGroups,\n tooltipsData,\n cellsRenderingMode,\n}: AnnotationProps) {\n const { position, titlePosition, valueColumn } = annotation;\n const vertical = position === 'left' || position === 'right';\n const keys = (vertical ? scales.y : scales.x).domain();\n const textPosition = getTextPosition(vertical, position, titlePosition, width, height);\n\n return (\n <g>\n {cellsRenderingMode === 'svg' && (\n <AnnotationCellsSvg\n facetKey={facetKey}\n scales={scales}\n keys={keys}\n x={x}\n y={y}\n stepX={stepX}\n stepY={stepY}\n vertical={vertical}\n aes={aes}\n colorScale={colorScale}\n data={data}\n annotation={annotation}\n tooltipsData={tooltipsData}\n />\n )}\n {cellsRenderingMode === 'canvas' && (\n <AnnotationCellsCanvas\n facetKey={facetKey}\n scales={scales}\n keys={keys}\n x={x}\n y={y}\n stepX={stepX}\n stepY={stepY}\n vertical={vertical}\n aes={aes}\n colorScale={colorScale}\n data={data}\n annotation={annotation}\n tooltipsData={tooltipsData}\n />\n )}\n {tooltipsData.fixed && !vertical && xGroupKeys.map(xGroupKey => {\n const keysCountX = xKeysByGroups[xGroupKey].length;\n if (keysCountX === 0) {\n return null;\n }\n const groupWidth = keysCountX * stepX;\n const groupX = scales.x(xKeysByGroups[xGroupKey][0]);\n return (\n <rect\n key={`${groupX}_${y}`}\n x={groupX + x}\n y={y}\n width={groupWidth}\n height={ANNOTATION_WIDTH}\n stroke=\"none\"\n fill=\"rgba(255, 255, 255, 0.8)\"\n />\n );\n })}\n {tooltipsData.fixed && vertical && yGroupKeys.map(yGroupKey => {\n const keysCountY = yKeysByGroups[yGroupKey].length;\n if (keysCountY === 0) {\n return null;\n }\n const groupHeight = keysCountY * stepY;\n const groupY = scales.y(yKeysByGroups[yGroupKey][0]);\n return (\n <rect\n key={`${x}_${groupY}`}\n x={x}\n y={groupY + y}\n width={ANNOTATION_WIDTH}\n height={groupHeight}\n stroke=\"none\"\n fill=\"rgba(255, 255, 255, 0.8)\"\n />\n );\n })}\n {frame.type === 'groups' &&\n !vertical &&\n xGroupKeys.map(xGroupKey => {\n const keysCountX = xKeysByGroups[xGroupKey].length;\n if (keysCountX === 0) {\n return null;\n }\n const groupWidth = keysCountX * stepX;\n const groupX = scales.x(xKeysByGroups[xGroupKey][0]);\n return (\n <rect\n key={`${groupX}_${y}`}\n x={groupX + x}\n y={y}\n width={groupWidth}\n height={ANNOTATION_WIDTH}\n stroke={BLACK}\n fill=\"none\"\n />\n );\n })}\n {frame.type === 'groups' &&\n vertical &&\n yGroupKeys.map(yGroupKey => {\n const keysCountY = yKeysByGroups[yGroupKey].length;\n if (keysCountY === 0) {\n return null;\n }\n const groupHeight = keysCountY * stepY;\n const groupY = scales.y(yKeysByGroups[yGroupKey][0]);\n return (\n <rect\n key={`${x}_${groupY}`}\n x={x}\n y={groupY + y}\n width={ANNOTATION_WIDTH}\n height={groupHeight}\n stroke={BLACK}\n fill=\"none\"\n />\n );\n })}\n {showTitle && (\n <g\n fontWeight=\"500\"\n fontSize=\"14px\"\n transform={`translate(${x + textPosition.x},${y + textPosition.y}) rotate(${textPosition.rotate})`}\n >\n <text textAnchor={textPosition.anchor} dominantBaseline=\"central\">\n {valueColumn.label ?? valueColumn.value}\n </text>\n </g>\n )}\n </g>\n );\n}\n"],"names":["getTextPosition","vertical","annotationPosition","titlePosition","width","height","x","ANNOTATION_WIDTH","y","anchor","Annotation","facetKey","data","scales","stepX","stepY","annotation","showTitle","colorScale","aes","frame","xGroupKeys","yGroupKeys","xKeysByGroups","yKeysByGroups","tooltipsData","cellsRenderingMode","position","valueColumn","keys","textPosition","jsx","AnnotationCellsSvg","AnnotationCellsCanvas","xGroupKey","keysCountX","groupWidth","groupX","yGroupKey","keysCountY","groupHeight","groupY","BLACK"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { AnnotationColorScales, AnnotationTooltipData, ChartScales } from '../types';
|
|
2
2
|
import { DataValue } from '../../../types/common';
|
|
3
3
|
import { HeatmapSettingsImpl } from '../../HeatmapSettingsImpl';
|
|
4
|
-
import {
|
|
4
|
+
import { CellHeatmap } from '../../getCells';
|
|
5
5
|
import { TooltipsData } from '../../../common/Tooltip';
|
|
6
6
|
interface AnnotationCellsCanvasProps {
|
|
7
7
|
facetKey: string;
|
|
@@ -16,7 +16,7 @@ interface AnnotationCellsCanvasProps {
|
|
|
16
16
|
colorScale: AnnotationColorScales[keyof AnnotationColorScales];
|
|
17
17
|
data: Record<string, DataValue>;
|
|
18
18
|
annotation: HeatmapSettingsImpl['annotations'][0];
|
|
19
|
-
tooltipsData: TooltipsData<
|
|
19
|
+
tooltipsData: TooltipsData<CellHeatmap | AnnotationTooltipData>;
|
|
20
20
|
}
|
|
21
21
|
export declare function AnnotationCellsCanvas({ facetKey, scales, data, keys, vertical, annotation, x, y, stepX, stepY, aes, colorScale, tooltipsData, }: AnnotationCellsCanvasProps): import("react/jsx-runtime").JSX.Element;
|
|
22
22
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AnnotationCellsCanvas.d.ts","sourceRoot":"","sources":["../../../../src/heatmap/components/Annotations/AnnotationCellsCanvas.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE1F,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"AnnotationCellsCanvas.d.ts","sourceRoot":"","sources":["../../../../src/heatmap/components/Annotations/AnnotationCellsCanvas.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE1F,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAK5D,UAAU,0BAA0B;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,WAAW,CAAC;IACpB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;IAClB,GAAG,EAAE,mBAAmB,CAAC,KAAK,CAAC,CAAC;IAChC,UAAU,EAAE,qBAAqB,CAAC,MAAM,qBAAqB,CAAC,CAAC;IAC/D,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAChC,UAAU,EAAE,mBAAmB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;IAClD,YAAY,EAAE,YAAY,CAAC,WAAW,GAAG,qBAAqB,CAAC,CAAC;CACnE;AAyDD,wBAAgB,qBAAqB,CAAC,EAClC,QAAQ,EACR,MAAM,EACN,IAAI,EACJ,IAAI,EACJ,QAAQ,EACR,UAAU,EACV,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAClB,GAAG,EACH,UAAU,EACV,YAAY,GACf,EAAE,0BAA0B,2CAkF5B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AnnotationCellsCanvas.js","sources":["../../../../src/heatmap/components/Annotations/AnnotationCellsCanvas.tsx"],"sourcesContent":["\nimport type { AnnotationColorScales, AnnotationTooltipData, ChartScales } from '../types';\nimport { ANNOTATION_WIDTH } from '../../constants';\nimport type { DataValue } from '../../../types/common';\nimport type { HeatmapSettingsImpl } from '../../HeatmapSettingsImpl';\nimport type {
|
|
1
|
+
{"version":3,"file":"AnnotationCellsCanvas.js","sources":["../../../../src/heatmap/components/Annotations/AnnotationCellsCanvas.tsx"],"sourcesContent":["\nimport type { AnnotationColorScales, AnnotationTooltipData, ChartScales } from '../types';\nimport { ANNOTATION_WIDTH } from '../../constants';\nimport type { DataValue } from '../../../types/common';\nimport type { HeatmapSettingsImpl } from '../../HeatmapSettingsImpl';\nimport type { CellHeatmap } from '../../getCells';\nimport type { TooltipsData } from '../../../common/Tooltip';\nimport type { MouseEventHandler } from 'react';\nimport { useEffect, useRef } from 'react';\nimport { useFunction } from '../../../utils/hooks/useFunction';\n\ninterface AnnotationCellsCanvasProps {\n facetKey: string,\n scales: ChartScales,\n keys: string[],\n x: number,\n y: number,\n stepX: number,\n stepY: number,\n vertical: boolean,\n aes: HeatmapSettingsImpl['aes'];\n colorScale: AnnotationColorScales[keyof AnnotationColorScales],\n data: Record<string, DataValue>;\n annotation: HeatmapSettingsImpl['annotations'][0];\n tooltipsData: TooltipsData<CellHeatmap | AnnotationTooltipData>;\n}\n\nfunction renderCells(\n ctx: CanvasRenderingContext2D | null,\n scales: ChartScales,\n data: Record<string, DataValue>,\n keys: string[],\n vertical: boolean,\n strokeColor: string,\n colorScale: AnnotationColorScales[keyof AnnotationColorScales],\n width: number,\n height: number\n) {\n if (!ctx) {\n return;\n }\n ctx.beginPath(); // Start a new path\n ctx.clearRect(0, 0, width, height);\n for (const key of keys) {\n const value = data?.[key];\n const fillColor = colorScale.type === 'continuous'\n ? colorScale.scale(Number(value))\n : colorScale.scale(String(value));\n const x = (vertical ? 0 : scales.x(key));\n const y = (vertical ? scales.y(key) : 0);\n\n ctx.fillStyle = fillColor;\n ctx.fillRect(x, y, width, height); // Add a rectangle to the current path\n }\n}\n\nfunction binarySearch(arr: number[], val: number, step: number) {\n let start = 0;\n let end = arr.length - 1;\n\n while (start <= end) {\n const mid = Math.floor((start + end) / 2);\n if (Math.abs(arr[mid] - val) < step) {\n return arr[mid] >= val ? mid - 1 : mid;\n }\n\n if (val < arr[mid]) {\n end = mid - 1;\n } else {\n start = mid + 1;\n }\n }\n return -1;\n}\nfunction searchKey(px: number, positions: number[], keys: string[], step: number) {\n const pos = binarySearch(positions, px, step);\n if (pos === -1) {\n return -1;\n }\n return keys[pos];\n}\n\nexport function AnnotationCellsCanvas({\n facetKey,\n scales,\n data,\n keys,\n vertical,\n annotation,\n x, y, stepX, stepY,\n aes,\n colorScale,\n tooltipsData,\n}: AnnotationCellsCanvasProps) {\n const { valueColumn } = annotation;\n const cellWidth = vertical ? ANNOTATION_WIDTH : stepX;\n const cellHeight = vertical ? stepY : ANNOTATION_WIDTH;\n const annotationWidth = vertical ? cellWidth : cellWidth * keys.length;\n const annotationHeight = vertical ? cellHeight * keys.length : cellHeight;\n const canvasRef = useRef<HTMLCanvasElement | null>(null);\n const canvasRatio = window.devicePixelRatio || 1;\n const ctx = useRef<CanvasRenderingContext2D | null>(null);\n const render = () => {\n renderCells(\n ctx.current,\n scales,\n data,\n keys,\n vertical,\n aes.cellStrokeColor,\n colorScale,\n cellWidth,\n cellHeight\n );\n };\n useEffect(() => {\n const canvasEl = canvasRef.current;\n if (!ctx.current) {\n ctx.current = canvasEl?.getContext('2d') ?? null;\n }\n if (canvasEl && ctx.current) {\n canvasEl.style.width = annotationWidth + 'px';\n canvasEl.style.height = annotationHeight + 'px';\n ctx.current.scale(canvasRatio, canvasRatio);\n }\n render();\n }, [annotationWidth, annotationHeight]);\n render();\n\n const moveOnCanvas: MouseEventHandler<HTMLCanvasElement> = useFunction((e: React.MouseEvent) => {\n const mouseX = e.nativeEvent.offsetX;\n const mouseY = e.nativeEvent.offsetY;\n const key = vertical\n ? searchKey(mouseY, scales.y.range(), scales.y.domain(), stepY)\n : searchKey(mouseX, scales.x.range(), scales.x.domain(), stepX);\n if (key !== -1) {\n const innerX = (vertical ? 0 : scales.x(key));\n const innerY = (vertical ? scales.y(key) : 0);\n const value = data[key];\n const fillColor = colorScale.type === 'continuous'\n ? colorScale.scale(Number(value))\n : colorScale.scale(String(value));\n tooltipsData.onMouseEnter({\n isAnnotation: true,\n x: x + innerX + cellWidth,\n y: y + innerY + cellHeight / 2,\n cell: {\n x: x + innerX,\n y: y + innerY,\n width: cellWidth,\n height: cellHeight,\n fill: fillColor,\n stroke: aes.cellStrokeColor\n },\n xKey: vertical ? null : key,\n yKey: vertical ? key : null,\n value,\n title: valueColumn.label ?? valueColumn.value,\n column: annotation.valueColumn\n } satisfies AnnotationTooltipData, facetKey);\n } else {\n tooltipsData.onMouseLeave();\n }\n });\n return (\n <foreignObject x={x} y={y} width={annotationWidth} height={annotationHeight}>\n <canvas\n ref={canvasRef}\n width={canvasRatio * annotationWidth}\n height={canvasRatio * annotationHeight}\n onMouseMove={moveOnCanvas}\n onMouseLeave={() => tooltipsData.onMouseLeave()}\n />\n </foreignObject>\n );\n}"],"names":["renderCells","ctx","scales","data","keys","vertical","strokeColor","colorScale","width","height","key","value","fillColor","x","y","binarySearch","arr","val","step","start","end","mid","searchKey","px","positions","pos","AnnotationCellsCanvas","facetKey","annotation","stepX","stepY","aes","tooltipsData","valueColumn","cellWidth","ANNOTATION_WIDTH","cellHeight","annotationWidth","annotationHeight","canvasRef","useRef","canvasRatio","render","useEffect","canvasEl","moveOnCanvas","useFunction","e","mouseX","mouseY","innerX","innerY","jsx"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { AnnotationColorScales, AnnotationTooltipData, ChartScales } from '../types';
|
|
2
2
|
import { DataValue } from '../../../types/common';
|
|
3
3
|
import { HeatmapSettingsImpl } from '../../HeatmapSettingsImpl';
|
|
4
|
-
import {
|
|
4
|
+
import { CellHeatmap } from '../../getCells';
|
|
5
5
|
import { TooltipsData } from '../../../common/Tooltip';
|
|
6
6
|
interface AnnotationCellsSvgProps {
|
|
7
7
|
facetKey: string;
|
|
@@ -16,7 +16,7 @@ interface AnnotationCellsSvgProps {
|
|
|
16
16
|
colorScale: AnnotationColorScales[keyof AnnotationColorScales];
|
|
17
17
|
data: Record<string, DataValue>;
|
|
18
18
|
annotation: HeatmapSettingsImpl['annotations'][0];
|
|
19
|
-
tooltipsData: TooltipsData<
|
|
19
|
+
tooltipsData: TooltipsData<CellHeatmap | AnnotationTooltipData>;
|
|
20
20
|
}
|
|
21
21
|
export declare function AnnotationCellsSvg({ facetKey, scales, data, keys, vertical, annotation, x, y, stepX, stepY, aes, colorScale, tooltipsData, }: AnnotationCellsSvgProps): import("react/jsx-runtime").JSX.Element[];
|
|
22
22
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AnnotationCellsSvg.d.ts","sourceRoot":"","sources":["../../../../src/heatmap/components/Annotations/AnnotationCellsSvg.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE1F,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"AnnotationCellsSvg.d.ts","sourceRoot":"","sources":["../../../../src/heatmap/components/Annotations/AnnotationCellsSvg.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE1F,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAE5D,UAAU,uBAAuB;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,WAAW,CAAC;IACpB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;IAClB,GAAG,EAAE,mBAAmB,CAAC,KAAK,CAAC,CAAC;IAChC,UAAU,EAAE,qBAAqB,CAAC,MAAM,qBAAqB,CAAC,CAAC;IAC/D,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAChC,UAAU,EAAE,mBAAmB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;IAClD,YAAY,EAAE,YAAY,CAAC,WAAW,GAAG,qBAAqB,CAAC,CAAC;CACnE;AAED,wBAAgB,kBAAkB,CAAC,EAC/B,QAAQ,EACR,MAAM,EACN,IAAI,EACJ,IAAI,EACJ,QAAQ,EACR,UAAU,EACV,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAClB,GAAG,EACH,UAAU,EACV,YAAY,GACf,EAAE,uBAAuB,6CA4CzB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AnnotationCellsSvg.js","sources":["../../../../src/heatmap/components/Annotations/AnnotationCellsSvg.tsx"],"sourcesContent":["\nimport type { AnnotationColorScales, AnnotationTooltipData, ChartScales } from '../types';\nimport { ANNOTATION_WIDTH } from '../../constants';\nimport type { DataValue } from '../../../types/common';\nimport type { HeatmapSettingsImpl } from '../../HeatmapSettingsImpl';\nimport type {
|
|
1
|
+
{"version":3,"file":"AnnotationCellsSvg.js","sources":["../../../../src/heatmap/components/Annotations/AnnotationCellsSvg.tsx"],"sourcesContent":["\nimport type { AnnotationColorScales, AnnotationTooltipData, ChartScales } from '../types';\nimport { ANNOTATION_WIDTH } from '../../constants';\nimport type { DataValue } from '../../../types/common';\nimport type { HeatmapSettingsImpl } from '../../HeatmapSettingsImpl';\nimport type { CellHeatmap } from '../../getCells';\nimport type { TooltipsData } from '../../../common/Tooltip';\n\ninterface AnnotationCellsSvgProps {\n facetKey: string,\n scales: ChartScales,\n keys: string[],\n x: number,\n y: number,\n stepX: number,\n stepY: number,\n vertical: boolean,\n aes: HeatmapSettingsImpl['aes'];\n colorScale: AnnotationColorScales[keyof AnnotationColorScales],\n data: Record<string, DataValue>;\n annotation: HeatmapSettingsImpl['annotations'][0];\n tooltipsData: TooltipsData<CellHeatmap | AnnotationTooltipData>;\n}\n\nexport function AnnotationCellsSvg({\n facetKey,\n scales,\n data,\n keys,\n vertical,\n annotation,\n x, y, stepX, stepY,\n aes,\n colorScale,\n tooltipsData,\n}: AnnotationCellsSvgProps) {\n const { valueColumn } = annotation;\n return keys.map(key => {\n const value = data?.[key];\n const fillColor = colorScale.type === 'continuous'\n ? colorScale.scale(Number(value))\n : colorScale.scale(String(value));\n const xInner = x + (vertical ? 0 : scales.x(key));\n const yInner = y + (vertical ? scales.y(key) : 0);\n const width = vertical ? ANNOTATION_WIDTH : stepX;\n const height = vertical ? stepY : ANNOTATION_WIDTH;\n const xKey = vertical ? null : key;\n const yKey = vertical ? key : null;\n return (\n <rect\n key={key}\n x={xInner}\n y={yInner}\n width={width}\n height={height}\n fill={fillColor}\n stroke={aes.cellStrokeColor}\n onMouseEnter={() => tooltipsData.onMouseEnter({\n isAnnotation: true,\n x: xInner + width,\n y: yInner + height / 2,\n cell: {\n x: xInner,\n y: yInner,\n width,\n height,\n fill: fillColor,\n stroke: aes.cellStrokeColor\n },\n xKey,\n yKey,\n value,\n title: valueColumn.label ?? valueColumn.value,\n column: annotation.valueColumn\n } satisfies AnnotationTooltipData, facetKey)}\n onMouseLeave={() => tooltipsData.onMouseLeave()}\n />\n );\n });\n}"],"names":["AnnotationCellsSvg","facetKey","scales","data","keys","vertical","annotation","x","y","stepX","stepY","aes","colorScale","tooltipsData","valueColumn","key","value","fillColor","xInner","yInner","width","ANNOTATION_WIDTH","height","xKey","yKey","jsx"],"mappings":";;AAwBO,SAASA,EAAmB;AAAA,EAC/B,UAAAC;AAAA,EACA,QAAAC;AAAA,EACA,MAAAC;AAAA,EACA,MAAAC;AAAA,EACA,UAAAC;AAAA,EACA,YAAAC;AAAA,EACA,GAAAC;AAAA,EAAG,GAAAC;AAAA,EAAG,OAAAC;AAAA,EAAO,OAAAC;AAAA,EACb,KAAAC;AAAA,EACA,YAAAC;AAAA,EACA,cAAAC;AACJ,GAA4B;AACxB,QAAM,EAAE,aAAAC,MAAgBR;AACxB,SAAOF,EAAK,IAAI,CAAAW,MAAO;AACnB,UAAMC,IAAQb,KAAA,gBAAAA,EAAOY,IACfE,IAAYL,EAAW,SAAS,eAChCA,EAAW,MAAM,OAAOI,CAAK,CAAC,IAC9BJ,EAAW,MAAM,OAAOI,CAAK,CAAC,GAC9BE,IAASX,KAAKF,IAAW,IAAIH,EAAO,EAAEa,CAAG,IACzCI,IAASX,KAAKH,IAAWH,EAAO,EAAEa,CAAG,IAAI,IACzCK,IAAQf,IAAWgB,IAAmBZ,GACtCa,IAASjB,IAAWK,IAAQW,GAC5BE,IAAOlB,IAAW,OAAOU,GACzBS,IAAOnB,IAAWU,IAAM;AAC9B,WACIU,gBAAAA,EAAAA;AAAAA,MAAC;AAAA,MAAA;AAAA,QAEG,GAAGP;AAAA,QACH,GAAGC;AAAA,QACH,OAAAC;AAAA,QACA,QAAAE;AAAA,QACA,MAAML;AAAA,QACN,QAAQN,EAAI;AAAA,QACZ,cAAc,MAAME,EAAa,aAAa;AAAA,UAC1C,cAAc;AAAA,UACd,GAAGK,IAASE;AAAA,UACZ,GAAGD,IAASG,IAAS;AAAA,UACrB,MAAM;AAAA,YACF,GAAGJ;AAAA,YACH,GAAGC;AAAA,YACH,OAAAC;AAAA,YACA,QAAAE;AAAA,YACA,MAAML;AAAA,YACN,QAAQN,EAAI;AAAA,UAAA;AAAA,UAEhB,MAAAY;AAAA,UACA,MAAAC;AAAA,UACA,OAAAR;AAAA,UACA,OAAOF,EAAY,SAASA,EAAY;AAAA,UACxC,QAAQR,EAAW;AAAA,QAAA,GACYL,CAAQ;AAAA,QAC3C,cAAc,MAAMY,EAAa,aAAA;AAAA,MAAa;AAAA,MAzBzCE;AAAA,IAAA;AAAA,EA4BjB,CAAC;AACL;"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { TooltipsData } from '../../../common/Tooltip';
|
|
2
2
|
import { AnnotationColorScales, AnnotationTooltipData, ChartDimensionsData, ChartScales } from '../types';
|
|
3
|
-
import {
|
|
3
|
+
import { CellHeatmap, GroupedCellsHeatmap } from '../../getCells';
|
|
4
4
|
import { HeatmapSettingsImpl } from '../../HeatmapSettingsImpl';
|
|
5
5
|
interface AnnotationProps {
|
|
6
6
|
facetKey: string;
|
|
7
7
|
sideElementBBoxes: ChartDimensionsData['sideElementBBoxes'];
|
|
8
8
|
annotations: HeatmapSettingsImpl['annotations'];
|
|
9
|
-
cellsMeta:
|
|
9
|
+
cellsMeta: GroupedCellsHeatmap['meta'];
|
|
10
10
|
annotationColorScales: AnnotationColorScales;
|
|
11
11
|
sharedX: boolean;
|
|
12
12
|
sharedY: boolean;
|
|
@@ -20,9 +20,9 @@ interface AnnotationProps {
|
|
|
20
20
|
frame: HeatmapSettingsImpl['chartSettings']['frame'];
|
|
21
21
|
xGroupKeys: string[];
|
|
22
22
|
yGroupKeys: string[];
|
|
23
|
-
xKeysByGroups:
|
|
24
|
-
yKeysByGroups:
|
|
25
|
-
tooltipsData: TooltipsData<
|
|
23
|
+
xKeysByGroups: GroupedCellsHeatmap['facets'][keyof GroupedCellsHeatmap['facets']]['xKeysByGroups'];
|
|
24
|
+
yKeysByGroups: GroupedCellsHeatmap['facets'][keyof GroupedCellsHeatmap['facets']]['yKeysByGroups'];
|
|
25
|
+
tooltipsData: TooltipsData<CellHeatmap | AnnotationTooltipData>;
|
|
26
26
|
cellsRenderingMode: 'canvas' | 'svg';
|
|
27
27
|
}
|
|
28
28
|
export declare function Annotations({ facetKey, sideElementBBoxes, annotations, annotationColorScales, cellsMeta, chartEdgeSides, sharedX, sharedY, width, height, scales, stepX, stepY, aes, frame, xGroupKeys, yGroupKeys, xKeysByGroups, yKeysByGroups, tooltipsData, cellsRenderingMode, }: AnnotationProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/heatmap/components/Annotations/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,yBAAyB,CAAC;AAE1D,OAAO,KAAK,EACR,qBAAqB,EACrB,qBAAqB,EACrB,mBAAmB,EACnB,WAAW,EACd,MAAM,UAAU,CAAC;AAElB,OAAO,KAAK,EAAC,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/heatmap/components/Annotations/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,yBAAyB,CAAC;AAE1D,OAAO,KAAK,EACR,qBAAqB,EACrB,qBAAqB,EACrB,mBAAmB,EACnB,WAAW,EACd,MAAM,UAAU,CAAC;AAElB,OAAO,KAAK,EAAC,WAAW,EAAE,mBAAmB,EAAC,MAAM,gBAAgB,CAAC;AACrE,OAAO,KAAK,EAAC,mBAAmB,EAAC,MAAM,2BAA2B,CAAC;AAOnE,UAAU,eAAe;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB,EAAE,mBAAmB,CAAC,mBAAmB,CAAC,CAAC;IAC5D,WAAW,EAAE,mBAAmB,CAAC,aAAa,CAAC,CAAC;IAChD,SAAS,EAAE,mBAAmB,CAAC,MAAM,CAAC,CAAC;IACvC,qBAAqB,EAAE,qBAAqB,CAAC;IAC7C,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,cAAc,EAAE,mBAAmB,CAAC,gBAAgB,CAAC,CAAC;IACtD,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,WAAW,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,mBAAmB,CAAC,KAAK,CAAC,CAAC;IAChC,KAAK,EAAE,mBAAmB,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,CAAC;IACrD,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,aAAa,EAAE,mBAAmB,CAAC,QAAQ,CAAC,CAAC,MAAM,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;IACnG,aAAa,EAAE,mBAAmB,CAAC,QAAQ,CAAC,CAAC,MAAM,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;IACnG,YAAY,EAAE,YAAY,CAAC,WAAW,GAAC,qBAAqB,CAAC,CAAC;IAC9D,kBAAkB,EAAE,QAAQ,GAAG,KAAK,CAAC;CACxC;AAED,wBAAgB,WAAW,CAAC,EACxB,QAAQ,EACR,iBAAiB,EACjB,WAAW,EACX,qBAAqB,EACrB,SAAS,EACT,cAAc,EACd,OAAO,EACP,OAAO,EACP,KAAK,EACL,MAAM,EACN,MAAM,EACN,KAAK,EACL,KAAK,EACL,GAAG,EACH,KAAK,EACL,UAAU,EACV,UAAU,EACV,aAAa,EACb,aAAa,EACb,YAAY,EACZ,kBAAkB,GACrB,EAAE,eAAe,2CA0FjB"}
|