@milaboratories/graph-maker 1.1.138 → 1.1.139
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/GraphMaker/components/LassoControls/index.vue.js +15 -13
- package/dist/GraphMaker/components/LassoControls/index.vue.js.map +1 -1
- package/dist/GraphMaker/utils/createChartSettingsForRender/composeBubbleSettings.d.ts +9 -3
- package/dist/GraphMaker/utils/createChartSettingsForRender/composeBubbleSettings.d.ts.map +1 -1
- package/dist/GraphMaker/utils/createChartSettingsForRender/composeDendroSettings.d.ts +17 -2
- package/dist/GraphMaker/utils/createChartSettingsForRender/composeDendroSettings.d.ts.map +1 -1
- package/dist/GraphMaker/utils/createChartSettingsForRender/composeDiscreteSettings.d.ts +13 -4
- package/dist/GraphMaker/utils/createChartSettingsForRender/composeDiscreteSettings.d.ts.map +1 -1
- package/dist/GraphMaker/utils/createChartSettingsForRender/composeHeatmapSettings.d.ts +28 -7
- package/dist/GraphMaker/utils/createChartSettingsForRender/composeHeatmapSettings.d.ts.map +1 -1
- package/dist/GraphMaker/utils/createChartSettingsForRender/composeHistogramSettings.d.ts +6 -2
- package/dist/GraphMaker/utils/createChartSettingsForRender/composeHistogramSettings.d.ts.map +1 -1
- package/dist/GraphMaker/utils/createChartSettingsForRender/composeScatterplotSettings.d.ts +16 -2
- package/dist/GraphMaker/utils/createChartSettingsForRender/composeScatterplotSettings.d.ts.map +1 -1
- package/dist/GraphMaker/utils/createChartSettingsForRender/composeScatterplotUmapSettings.d.ts +14 -2
- package/dist/GraphMaker/utils/createChartSettingsForRender/composeScatterplotUmapSettings.d.ts.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/DataFrame.js +95 -72
- package/dist/node_modules/@milaboratories/miplots4/dist/DataFrame.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/MiPlots.js +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/bubble/ChartRenderer.js +124 -122
- package/dist/node_modules/@milaboratories/miplots4/dist/bubble/ChartRenderer.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/bubble/components/Chart.js +72 -91
- package/dist/node_modules/@milaboratories/miplots4/dist/bubble/components/Chart.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/bubble/components/ChartsGroup.js +43 -41
- package/dist/node_modules/@milaboratories/miplots4/dist/bubble/components/ChartsGroup.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/bubble/getCellTooltip.js +28 -0
- package/dist/node_modules/@milaboratories/miplots4/dist/bubble/getCellTooltip.js.map +1 -0
- package/dist/node_modules/@milaboratories/miplots4/dist/bubble/getGroupedCellsData.js +94 -0
- package/dist/node_modules/@milaboratories/miplots4/dist/bubble/getGroupedCellsData.js.map +1 -0
- package/dist/node_modules/@milaboratories/miplots4/dist/bubble/index.js +42 -38
- package/dist/node_modules/@milaboratories/miplots4/dist/bubble/index.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/bubble/utils/calculateCaptionTails.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/common/Legend.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/common/Tooltip.js +11 -11
- package/dist/node_modules/@milaboratories/miplots4/dist/common/Tooltip.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/common/useDataFrame.js +20 -0
- package/dist/node_modules/@milaboratories/miplots4/dist/common/useDataFrame.js.map +1 -0
- package/dist/node_modules/@milaboratories/miplots4/dist/dendro/ChartRenderer.js +181 -181
- package/dist/node_modules/@milaboratories/miplots4/dist/dendro/ChartRenderer.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/dendro/DendroSettingsImpl.js +2 -2
- package/dist/node_modules/@milaboratories/miplots4/dist/dendro/DendroSettingsImpl.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/dendro/components/Chart.js +45 -45
- package/dist/node_modules/@milaboratories/miplots4/dist/dendro/components/Chart.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/dendro/components/Heatmap.js +27 -27
- package/dist/node_modules/@milaboratories/miplots4/dist/dendro/components/Heatmap.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/dendro/components/Legend.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/dendro/components/LinksGroup.js +18 -18
- package/dist/node_modules/@milaboratories/miplots4/dist/dendro/components/LinksGroup.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/dendro/components/NodesGroup.js +36 -36
- package/dist/node_modules/@milaboratories/miplots4/dist/dendro/components/NodesGroup.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/dendro/getHeatmapData.js +45 -41
- package/dist/node_modules/@milaboratories/miplots4/dist/dendro/getHeatmapData.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/dendro/getHierarchyData.js +33 -33
- package/dist/node_modules/@milaboratories/miplots4/dist/dendro/getHierarchyData.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/dendro/index.js +90 -93
- package/dist/node_modules/@milaboratories/miplots4/dist/dendro/index.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/discrete/ChartRenderer.js +200 -199
- package/dist/node_modules/@milaboratories/miplots4/dist/discrete/ChartRenderer.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/discrete/DiscreteSettingsImpl.js +17 -17
- package/dist/node_modules/@milaboratories/miplots4/dist/discrete/DiscreteSettingsImpl.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/discrete/components/layers/BoxElement.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/discrete/index.js +102 -99
- package/dist/node_modules/@milaboratories/miplots4/dist/discrete/index.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/discrete/layers/bar.js +31 -36
- package/dist/node_modules/@milaboratories/miplots4/dist/discrete/layers/bar.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/discrete/layers/binnedDots.js +62 -74
- package/dist/node_modules/@milaboratories/miplots4/dist/discrete/layers/binnedDots.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/discrete/layers/boxes.js +52 -53
- package/dist/node_modules/@milaboratories/miplots4/dist/discrete/layers/boxes.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/discrete/layers/dots.js +32 -32
- package/dist/node_modules/@milaboratories/miplots4/dist/discrete/layers/dots.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/discrete/layers/lines.js +7 -6
- package/dist/node_modules/@milaboratories/miplots4/dist/discrete/layers/lines.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/discrete/layers/logo.js +23 -23
- package/dist/node_modules/@milaboratories/miplots4/dist/discrete/layers/logo.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/discrete/layers/pairedPoints.js +63 -63
- package/dist/node_modules/@milaboratories/miplots4/dist/discrete/layers/pairedPoints.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/discrete/layers/sina.js +60 -64
- package/dist/node_modules/@milaboratories/miplots4/dist/discrete/layers/sina.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/discrete/layers/stackedBar.js +23 -23
- package/dist/node_modules/@milaboratories/miplots4/dist/discrete/layers/stackedBar.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/discrete/utils/getOutliersBounds.js +5 -5
- package/dist/node_modules/@milaboratories/miplots4/dist/discrete/utils/getOutliersBounds.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/discrete/utils/splitTextByWidth.js +13 -13
- package/dist/node_modules/@milaboratories/miplots4/dist/discrete/utils/splitTextByWidth.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/ChartRenderer.js +258 -256
- package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/ChartRenderer.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/HeatmapSettingsImpl.js +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/HeatmapSettingsImpl.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/Annotations/Annotation.js +45 -44
- package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/Annotations/Annotation.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/Chart.js +107 -106
- package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/Chart.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/ChartsGroup.js +18 -18
- package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/ChartsGroup.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/getCells.js +99 -95
- package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/getCells.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/index.js +30 -29
- package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/index.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/utils/calculateAnnotationTitleSizes.js +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/utils/calculateAnnotationTitleSizes.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/utils/calculateCaptionTails.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/histogram/ChartRenderer.js +143 -142
- package/dist/node_modules/@milaboratories/miplots4/dist/histogram/ChartRenderer.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/histogram/HistogramSettingsImpl.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/histogram/components/Chart.js +30 -30
- package/dist/node_modules/@milaboratories/miplots4/dist/histogram/components/Chart.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/histogram/components/ChartsGroup.js +7 -7
- package/dist/node_modules/@milaboratories/miplots4/dist/histogram/getHistogramData.js +53 -54
- package/dist/node_modules/@milaboratories/miplots4/dist/histogram/getHistogramData.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/histogram/index.js +59 -55
- package/dist/node_modules/@milaboratories/miplots4/dist/histogram/index.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/@d3fc/d3fc-axis/src/axisBase.js +7 -7
- package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-array/src/min.js +6 -12
- package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-array/src/min.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-shape/src/line.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/kdbush/index.js +148 -0
- package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/kdbush/index.js.map +1 -0
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/ChartRenderer.js +172 -168
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/ChartRenderer.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/ScatterplotSettingsImpl.js +26 -26
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/ScatterplotSettingsImpl.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/Chart.js +11 -11
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/ChartAxisTitles.js +30 -29
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/ChartAxisTitles.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/ChartLayersData.js +135 -153
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/ChartLayersData.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/ChartTooltip.js +35 -32
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/ChartTooltip.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/ChartTrendsData.js +27 -27
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/ChartTrendsData.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/ChartsGroup.js +14 -14
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/constants.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/dots.js +24 -22
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/dots.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/getLayersData.js +11 -14
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/getLayersData.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/index.js +57 -58
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/index.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/linearRegression.js +85 -83
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/linearRegression.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/utils/createAesGetter.js +20 -20
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/utils/createAesGetter.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/utils/createLegendInfo.js +44 -37
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/utils/createLegendInfo.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/utils/formatColumnValue.js +11 -0
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/utils/formatColumnValue.js.map +1 -0
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/utils/getVisibleLabels.js +46 -56
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/utils/getVisibleLabels.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot-umap/ChartRenderer.js +223 -205
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot-umap/ChartRenderer.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot-umap/SettingsImpl.js +22 -22
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot-umap/SettingsImpl.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot-umap/colors.js +42 -0
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot-umap/colors.js.map +1 -0
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot-umap/components/LowerSVG.js +84 -81
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot-umap/components/LowerSVG.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot-umap/components/SVGLayer.js +11 -11
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot-umap/components/UpperSVG.js +15 -14
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot-umap/components/UpperSVG.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot-umap/index.js +89 -114
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot-umap/index.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/types/common.js +3 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/types/common.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/types/dendro.js +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/types/dendro.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/types/discrete.js +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/types/discrete.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/types/heatmap.js +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/types/heatmap.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/types/histogram.js +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/types/histogram.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/types/scatterplot-umap.js +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/types/scatterplot-umap.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/types/scatterplot.js +4 -4
- package/dist/node_modules/@milaboratories/miplots4/dist/types/scatterplot.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/utils/TextMeasurer/TextMeasurer.js +39 -0
- package/dist/node_modules/@milaboratories/miplots4/dist/utils/TextMeasurer/TextMeasurer.js.map +1 -0
- package/dist/node_modules/@milaboratories/miplots4/dist/utils/TextMeasurer/charToWidth.json.js +101 -0
- package/dist/node_modules/@milaboratories/miplots4/dist/utils/TextMeasurer/charToWidth.json.js.map +1 -0
- package/dist/node_modules/@milaboratories/miplots4/dist/utils/arrangeLegendParts.js +4 -4
- package/dist/node_modules/@milaboratories/miplots4/dist/utils/arrangeLegendParts.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/utils/getLegendWidth.js +3 -3
- package/dist/node_modules/@milaboratories/miplots4/dist/utils/getLegendWidth.js.map +1 -1
- package/dist/node_modules/@milaboratories/pf-plots/dist/index.js +1031 -1023
- package/dist/node_modules/@milaboratories/pf-plots/dist/index.js.map +1 -1
- package/package.json +3 -3
- package/dist/node_modules/@milaboratories/miplots4/dist/bubble/getCells.js +0 -91
- package/dist/node_modules/@milaboratories/miplots4/dist/bubble/getCells.js.map +0 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/add.js +0 -30
- package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/add.js.map +0 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/cover.js +0 -29
- package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/cover.js.map +0 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/data.js +0 -12
- package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/data.js.map +0 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/extent.js +0 -7
- package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/extent.js.map +0 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/find.js +0 -26
- package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/find.js.map +0 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/quad.js +0 -7
- package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/quad.js.map +0 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/quadtree.js +0 -51
- package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/quadtree.js.map +0 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/remove.js +0 -21
- package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/remove.js.map +0 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/root.js +0 -7
- package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/root.js.map +0 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/size.js +0 -12
- package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/size.js.map +0 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/visit.js +0 -14
- package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/visit.js.map +0 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/visitAfter.js +0 -19
- package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/visitAfter.js.map +0 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/x.js +0 -11
- package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/x.js.map +0 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/y.js +0 -11
- package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-quadtree/src/y.js.map +0 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/utils/TextMeasurer.js +0 -24
- package/dist/node_modules/@milaboratories/miplots4/dist/utils/TextMeasurer.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChartRenderer.js","sources":["../../../../../../node_modules/@milaboratories/miplots4/src/heatmap/ChartRenderer.tsx"],"sourcesContent":["import {Error} from '../common/Error';\nimport {DEFAULT_AES} from './constants';\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 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} from './utils';\nimport {calculateCaptionTails} from './utils/calculateCaptionTails';\nimport type {AesItem, ColumnName, DataValue} from '../types';\nimport {getChartEdgeSides} from '../utils/getChartEdgeSides';\nimport {getContinuousLegendTicks} from '../utils/getContinuousLegendTicks';\nimport {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 {CHART_SIDE_ELEMENTS, LEGEND_OFFSET, MIN_MARGIN, MIN_PADDING, TITLE_LINE} from './constants';\nimport {DEFAULT_HEIGHT, DEFAULT_WIDTH, TITLE_LINE_HEIGHT, TITLE_MARGIN} from '../constants';\nimport type {ReactElement} from 'react';\nimport React from 'react';\nimport type {Root} from 'react-dom/client';\nimport {createRoot} from 'react-dom/client';\nimport {ChartsGroup} from './components/ChartsGroup';\nimport {TextMeasurer} from '../utils/TextMeasurer';\nimport type { LegendData, LegendItem } from '../common/types';\nimport { arrangeLegendParts } from '../utils/arrangeLegendParts';\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 const l = textMeasurer.getTextWidth(labels[key]);\n if (l > maxLabelSize) {\n maxLabelSize = l;\n }\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']) {\n this.margins = {\n top: title.show ? TITLE_LINE_HEIGHT + TITLE_MARGIN * 2 : MIN_MARGIN,\n bottom: MIN_MARGIN,\n left: MIN_MARGIN,\n right: this.legend.width + MIN_MARGIN,\n };\n this.chartSizes.totalWidth = this.margins.left + this.chartSizes.chartsWidth + this.margins.right;\n this.chartSizes.totalHeight =\n this.margins.top + Math.max(this.chartSizes.chartsHeight + this.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 {width, height} = size;\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 MIN_PADDING\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, width, height);\n const outerWidth = width + padding.left + padding.right;\n const outerHeight = height + padding.top + padding.bottom;\n this.chartsDimensions[key] = {\n left: currentLeft,\n top: currentTop,\n inner: {width, height},\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(size: HeatmapSettingsImpl['chartSettings']['size']) {\n const {width, height} = size;\n this.chartSizes.chartWidth = width;\n this.chartSizes.chartHeight = height;\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 ) {\n const {width, height} = 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 = sortX(meta.xGroupKeys);\n const 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 = (width - (xCounts.filter(count => count > 0).length - 1) * groupGap) / xCellsCount;\n const yStep = (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 ? 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 ? 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.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: createDiscreteColorScale(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 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 ) {\n const {meta, facets} = groupedCellsData;\n const {facetKeys, xGroupKeys, yGroupKeys, valueExtent} = meta;\n const {xAxis, yAxis, title, size, valueType} = chartSettings;\n this.updateChartsSizes(size);\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);\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);\n this.updateDendrogram(facetKeys, xGroupKeys, yGroupKeys, facets, dendrogramsData, dendrogramX, dendrogramY);\n this.updateDendrogramAesScales(inheritedDendrogramAes);\n const component = (\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 />\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","width","height","sharedX","sharedY","currentLeft","currentTop","index","currentColumn","chartSides","getChartEdgeSides","stepX","stepY","sideElementSizes","calculateChartSideElementSizes","annotationsTitleSizes","calculateAnnotationTitleSizes","getPadding","side","CHART_SIDE_ELEMENTS","el","MIN_PADDING","padding","sideElementBBoxes","calculateSideElementsBBoxes","outerWidth","outerHeight","chartsWidth","sum","chartsHeight","_key","groupGap","meta","facets","sortX","arr","a","b","sortY","facetKey","facetGroup","xCounts","L","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","createContinuousColorScale","groups","dendrogramsData","hierarchyByGroupX","hierarchyByGroupY","maxHeightX","groupKey","hierarchy","cluster","heightScale","maxHeightY","inheritedAes","usedColumns","columnName","aesMap","columnValues","value","DEFAULT_AES","settingsId","chartSettings","inheritedDendrogramAes","onTooltipHintSwitch","component","ChartsGroup","message","Error"],"mappings":"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","x_google_ignoreList":[0]}
|
|
1
|
+
{"version":3,"file":"ChartRenderer.js","sources":["../../../../../../node_modules/@milaboratories/miplots4/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, MIN_PADDING, 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} 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']) {\n this.margins = {\n top: title.show ? TITLE_LINE_HEIGHT + TITLE_MARGIN * 2 : MIN_MARGIN,\n bottom: MIN_MARGIN,\n left: MIN_MARGIN,\n right: this.legend.width + MIN_MARGIN,\n };\n this.chartSizes.totalWidth = this.margins.left + this.chartSizes.chartsWidth + this.margins.right;\n this.chartSizes.totalHeight =\n this.margins.top + Math.max(this.chartSizes.chartsHeight + this.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 {width, height} = size;\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 MIN_PADDING\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, width, height);\n const outerWidth = width + padding.left + padding.right;\n const outerHeight = height + padding.top + padding.bottom;\n this.chartsDimensions[key] = {\n left: currentLeft,\n top: currentTop,\n inner: {width, height},\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(size: HeatmapSettingsImpl['chartSettings']['size']) {\n const {width, height} = size;\n this.chartSizes.chartWidth = width;\n this.chartSizes.chartHeight = height;\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 ) {\n const {width, height} = 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 = sortX(meta.xGroupKeys);\n const 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 = (width - (xCounts.filter(count => count > 0).length - 1) * groupGap) / xCellsCount;\n const yStep = (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 ? 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 ? 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.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: createDiscreteColorScale(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 ) {\n const {meta, facets} = groupedCellsData;\n const {facetKeys, xGroupKeys, yGroupKeys, valueExtent} = meta;\n const {xAxis, yAxis, title, size, valueType} = chartSettings;\n this.updateChartsSizes(size);\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);\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);\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 />\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","width","height","sharedX","sharedY","currentLeft","currentTop","index","currentColumn","chartSides","getChartEdgeSides","stepX","stepY","sideElementSizes","calculateChartSideElementSizes","annotationsTitleSizes","calculateAnnotationTitleSizes","getPadding","side","CHART_SIDE_ELEMENTS","el","MIN_PADDING","padding","sideElementBBoxes","calculateSideElementsBBoxes","outerWidth","outerHeight","chartsWidth","sum","chartsHeight","_key","groupGap","meta","facets","sortX","arr","a","b","sortY","facetKey","facetGroup","xCounts","L","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","createContinuousColorScale","groups","dendrogramsData","hierarchyByGroupX","hierarchyByGroupY","maxHeightX","groupKey","hierarchy","cluster","heightScale","maxHeightY","inheritedAes","usedColumns","columnName","aesMap","columnValues","value","DEFAULT_AES","dataFrame","settingsId","chartSettings","inheritedDendrogramAes","onTooltipHintSwitch","component","DataFrameProvider","ChartsGroup","message","Error"],"mappings":"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","x_google_ignoreList":[0]}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import o from "../node_modules/lodash/lodash.js";
|
|
1
2
|
import { DEFAULT_HEIGHT_SMALL as f, DEFAULT_HEIGHT as w, DEFAULT_WIDTH_SMALL as T, DEFAULT_WIDTH as b, BLACK as C } from "../constants.js";
|
|
2
3
|
import "../types/common.js";
|
|
3
4
|
import "../types/discrete.js";
|
|
@@ -6,7 +7,6 @@ import { HeatmapSettingsSchema as L } from "../types/heatmap.js";
|
|
|
6
7
|
import "../types/dendro.js";
|
|
7
8
|
import "../types/histogram.js";
|
|
8
9
|
import "../types/bubble.js";
|
|
9
|
-
import o from "../node_modules/lodash/lodash.js";
|
|
10
10
|
var S = Object.defineProperty, B = (s, t, l) => t in s ? S(s, t, { enumerable: !0, configurable: !0, writable: !0, value: l }) : s[t] = l, e = (s, t, l) => B(s, typeof t != "symbol" ? t + "" : t, l);
|
|
11
11
|
const n = {
|
|
12
12
|
lineColor: C,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HeatmapSettingsImpl.js","sources":["../../../../../../node_modules/@milaboratories/miplots4/src/heatmap/HeatmapSettingsImpl.ts"],"sourcesContent":["import {BLACK, DEFAULT_HEIGHT, DEFAULT_HEIGHT_SMALL, DEFAULT_WIDTH, DEFAULT_WIDTH_SMALL} from '../constants';\nimport {HeatmapSettingsSchema} from '../types';\nimport type {DendrogramDistance, DendrogramLinkage, NormalizationDirection, NormalizationMethod} from '../types';\nimport type {AesMap, LineShape} from '../types';\nimport type {\n ColumnName,\n HeatmapSettings,\n LegendPosition,\n PointShape,\n SettingsInterface,\n TitlePosition,\n} from '../types';\nimport lodash from 'lodash';\n\nconst DEFAULT_DENDRO_AES = {\n lineColor: BLACK,\n dotShape: '21' as PointShape,\n dotFill: BLACK,\n dotSize: 3,\n lineShape: 'solid' as LineShape,\n lineWidth: 1,\n};\nconst DEFAULT_DENDRO: HeatmapDendrogramSettings = {\n size: 150,\n distance: 'euclidean',\n linkage: 'average',\n fillNA: 0,\n showNodes: true,\n hidden: false,\n edgeInheritance: 'up',\n aes: DEFAULT_DENDRO_AES,\n};\n\nexport interface HeatmapDendrogramSettings {\n size: number;\n distance: DendrogramDistance;\n linkage: DendrogramLinkage;\n fillNA: number;\n showNodes: boolean;\n hidden: boolean;\n edgeInheritance: 'up' | 'down';\n aes: {\n lineColor: string | ColumnName;\n dotFill: string | ColumnName;\n dotShape: PointShape | ColumnName;\n dotSize: number | ColumnName;\n lineShape: LineShape | ColumnName;\n lineWidth: number | ColumnName;\n };\n}\n\ninterface HeatmapDendrogramSettingsX extends HeatmapDendrogramSettings {\n position: 'top' | 'bottom';\n}\ninterface HeatmapDendrogramSettingsY extends HeatmapDendrogramSettings {\n position: 'left' | 'right';\n}\n\ninterface HeatmapAnnotation {\n id: string;\n valueColumn: ColumnName;\n showTitle: boolean;\n type: 'discrete' | 'continuous';\n colors: string[];\n}\n\ninterface HeatmapAnnotationX extends HeatmapAnnotation {\n axis: 'x';\n position: 'top' | 'bottom';\n titlePosition: 'left' | 'right';\n}\ninterface HeatmapAnnotationY extends HeatmapAnnotation {\n axis: 'y';\n position: 'left' | 'right';\n titlePosition: 'top' | 'bottom';\n}\n\nexport class HeatmapSettingsImpl implements SettingsInterface {\n readonly id: string;\n readonly type = 'heatmap';\n readonly facetSettings: {\n sharedX: boolean;\n sharedY: boolean;\n nRows?: number;\n nCols?: number;\n };\n readonly xColumn: ColumnName;\n readonly xGroupBy: ColumnName[];\n readonly yColumn: ColumnName;\n readonly yGroupBy: ColumnName[];\n readonly valueColumn: ColumnName;\n readonly facetBy: ColumnName[];\n readonly normalization: {direction: NormalizationDirection, method: NormalizationMethod, colorRange?: number[]} | null;\n readonly chartSettings: {\n readonly title: {name: string; show: boolean; position: TitlePosition};\n readonly size: {width: number; height: number};\n readonly frame: {type: 'full' | 'groups' | 'none'};\n readonly valueType: 'discrete' | 'continuous';\n readonly yAxis: {\n title: string;\n showTicks: boolean;\n showTitle: boolean;\n showAxisLabels: boolean;\n showGroupLabels: boolean;\n position: 'left' | 'right';\n groupingPosition: 'left' | 'right';\n axisLabelsAngle: 0 | 45 | 90;\n groupLabelsAngle: 0 | 45 | 90;\n sorting: 'asc' | 'desc';\n };\n readonly xAxis: {\n title: string;\n showTicks: boolean;\n showTitle: boolean;\n showAxisLabels: boolean;\n showGroupLabels: boolean;\n position: 'bottom' | 'top';\n groupingPosition: 'bottom' | 'top';\n axisLabelsAngle: 0 | 45 | 90;\n groupLabelsAngle: 0 | 45 | 90;\n sorting: 'asc' | 'desc';\n };\n readonly legend: {show: boolean; position: LegendPosition};\n readonly tooltips: {show: boolean; content?: ColumnName[]};\n };\n readonly aes: {\n colorsList: string[];\n colorsMap: Record<string, string> | null;\n valueColors: string[] | null;\n valuesByColors: number[] | null;\n groupGap: number;\n cellStrokeColor: string;\n emptyCellColor: string;\n };\n\n readonly annotations: (HeatmapAnnotationX | HeatmapAnnotationY)[];\n\n readonly dendrogramX: HeatmapDendrogramSettingsX | null;\n readonly dendrogramY: HeatmapDendrogramSettingsY | null;\n readonly inheritedDendrogramAes: Record<string, AesMap> | null;\n readonly NAValueAs: number | null;\n\n constructor(settings: HeatmapSettings) {\n HeatmapSettingsSchema.parse(settings);\n\n this.id = lodash.uniqueId('settings');\n this.facetSettings = {\n sharedX: (settings.facetBy ?? []).length > 0,\n sharedY: (settings.facetBy ?? []).length > 0,\n ...settings.facetSettings,\n };\n this.xColumn = settings.xColumn;\n this.xGroupBy = settings.xGroupBy ?? [];\n this.yColumn = settings.yColumn;\n this.yGroupBy = settings.yGroupBy ?? [];\n this.valueColumn = settings.valueColumn;\n this.facetBy = settings.facetBy ?? [];\n this.chartSettings = {\n title: {\n position: 'left',\n show: true,\n ...settings.title,\n name: settings.title?.name ?? 'Chart',\n },\n size: {\n width: settings?.size?.width ?? (this.facetBy.length ? DEFAULT_WIDTH_SMALL : DEFAULT_WIDTH),\n height: settings?.size?.height ?? (this.facetBy.length ? DEFAULT_HEIGHT_SMALL : DEFAULT_HEIGHT),\n },\n frame: {type: settings.frame?.type ?? 'none'},\n valueType: settings.valueType ?? 'continuous',\n yAxis: {\n title: settings.yColumn.label ?? settings.yColumn.value,\n showTicks: true,\n showTitle: true,\n showAxisLabels: true,\n showGroupLabels: true,\n position: 'left',\n groupingPosition: 'left',\n axisLabelsAngle: 90,\n groupLabelsAngle: 0,\n sorting: 'asc',\n ...settings.yAxis,\n },\n xAxis: {\n title: settings.xColumn.label ?? settings.xColumn.value,\n showTicks: true,\n showTitle: true,\n showAxisLabels: true,\n showGroupLabels: true,\n position: 'bottom',\n groupingPosition: 'bottom',\n axisLabelsAngle: 90,\n groupLabelsAngle: 0,\n sorting: 'asc',\n ...settings.xAxis,\n },\n legend: {\n show: true,\n position: 'right',\n ...settings.legend,\n },\n tooltips: {\n show: true,\n ...settings.tooltips,\n },\n };\n this.normalization = this.chartSettings.valueType === 'continuous' ? settings.normalization ?? null : null;\n this.NAValueAs = settings.NAValueAs ?? null;\n this.aes = {\n colorsList: settings.aes?.colorsList ?? ['black', 'white', 'red'],\n colorsMap: settings.aes?.colorsMap ?? null,\n valueColors: settings.aes?.valueColors ?? null,\n valuesByColors: settings.aes?.valuesByColors ?? null,\n cellStrokeColor: settings.aes?.cellStrokeColor ?? 'none',\n groupGap: settings.aes?.groupGap ?? 3,\n emptyCellColor: settings.aes?.emptyCellColor ?? 'white',\n };\n\n this.annotations = (settings.annotations ?? []).map(item => {\n if (item.axis === 'x') {\n return {\n id: lodash.uniqueId('annotation'),\n axis: 'x',\n valueColumn: item.valueColumn,\n position: item.position ?? this.chartSettings.xAxis.position,\n titlePosition: item.titlePosition ?? 'right',\n showTitle: item.showTitle ?? true,\n type: item.type,\n colors: item.colors ?? ['white', 'black'],\n };\n }\n return {\n id: lodash.uniqueId('annotation'),\n axis: 'y',\n valueColumn: item.valueColumn,\n position: item.position ?? this.chartSettings.yAxis.position,\n titlePosition: item.titlePosition ?? 'top',\n showTitle: item.showTitle ?? true,\n type: item.type,\n colors: item.colors ?? ['white', 'black'],\n };\n });\n\n if (settings.valueType === 'discrete' && (settings.dendrogramX || settings.dendrogramY)) {\n throw Error('Dendrogram is not available with discrete cells values');\n }\n\n this.dendrogramX = settings.dendrogramX\n ? {\n ...DEFAULT_DENDRO,\n position: 'top',\n ...settings.dendrogramX,\n aes: {\n ...DEFAULT_DENDRO_AES,\n ...settings.dendrogramX?.aes,\n },\n }\n : null;\n this.dendrogramY = settings.dendrogramY\n ? {\n ...DEFAULT_DENDRO,\n position: 'left',\n ...settings.dendrogramY,\n aes: {\n ...DEFAULT_DENDRO_AES,\n ...settings.dendrogramY?.aes,\n },\n }\n : null;\n this.inheritedDendrogramAes = settings.inheritedDendrogramAes ?? null;\n }\n}\n"],"names":["DEFAULT_DENDRO_AES","BLACK","DEFAULT_DENDRO","HeatmapSettingsImpl","settings","__publicField","HeatmapSettingsSchema","lodash","_a","_b","DEFAULT_WIDTH_SMALL","DEFAULT_WIDTH","_c","DEFAULT_HEIGHT_SMALL","DEFAULT_HEIGHT","_d","_e","_f","_g","_h","_i","_j","_k","item","_l","_m"],"mappings":"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","x_google_ignoreList":[0]}
|
|
1
|
+
{"version":3,"file":"HeatmapSettingsImpl.js","sources":["../../../../../../node_modules/@milaboratories/miplots4/src/heatmap/HeatmapSettingsImpl.ts"],"sourcesContent":["import lodash from 'lodash';\nimport { BLACK, DEFAULT_HEIGHT, DEFAULT_HEIGHT_SMALL, DEFAULT_WIDTH, DEFAULT_WIDTH_SMALL } from '../constants';\nimport type {\n AesRecord,\n ColumnName, DendrogramDistance, DendrogramLinkage, HeatmapSettings,\n LegendPosition, LineShape, NormalizationDirection, NormalizationMethod, PointShape,\n SettingsInterface,\n TitlePosition\n} from '../types';\nimport { HeatmapSettingsSchema } from '../types';\n\nconst DEFAULT_DENDRO_AES = {\n lineColor: BLACK,\n dotShape: '21' as PointShape,\n dotFill: BLACK,\n dotSize: 3,\n lineShape: 'solid' as LineShape,\n lineWidth: 1,\n};\nconst DEFAULT_DENDRO: HeatmapDendrogramSettings = {\n size: 150,\n distance: 'euclidean',\n linkage: 'average',\n fillNA: 0,\n showNodes: true,\n hidden: false,\n edgeInheritance: 'up',\n aes: DEFAULT_DENDRO_AES,\n};\n\nexport interface HeatmapDendrogramSettings {\n size: number;\n distance: DendrogramDistance;\n linkage: DendrogramLinkage;\n fillNA: number;\n showNodes: boolean;\n hidden: boolean;\n edgeInheritance: 'up' | 'down';\n aes: {\n lineColor: string | ColumnName;\n dotFill: string | ColumnName;\n dotShape: PointShape | ColumnName;\n dotSize: number | ColumnName;\n lineShape: LineShape | ColumnName;\n lineWidth: number | ColumnName;\n };\n}\n\ninterface HeatmapDendrogramSettingsX extends HeatmapDendrogramSettings {\n position: 'top' | 'bottom';\n}\ninterface HeatmapDendrogramSettingsY extends HeatmapDendrogramSettings {\n position: 'left' | 'right';\n}\n\ninterface HeatmapAnnotation {\n id: string;\n valueColumn: ColumnName;\n showTitle: boolean;\n type: 'discrete' | 'continuous';\n colors: string[];\n}\n\ninterface HeatmapAnnotationX extends HeatmapAnnotation {\n axis: 'x';\n position: 'top' | 'bottom';\n titlePosition: 'left' | 'right';\n}\ninterface HeatmapAnnotationY extends HeatmapAnnotation {\n axis: 'y';\n position: 'left' | 'right';\n titlePosition: 'top' | 'bottom';\n}\n\nexport class HeatmapSettingsImpl implements SettingsInterface {\n readonly id: string;\n readonly type = 'heatmap';\n readonly facetSettings: {\n sharedX: boolean;\n sharedY: boolean;\n nRows?: number;\n nCols?: number;\n };\n readonly xColumn: ColumnName;\n readonly xGroupBy: ColumnName[];\n readonly yColumn: ColumnName;\n readonly yGroupBy: ColumnName[];\n readonly valueColumn: ColumnName;\n readonly facetBy: ColumnName[];\n readonly normalization: {direction: NormalizationDirection, method: NormalizationMethod, colorRange?: number[]} | null;\n readonly chartSettings: {\n readonly title: {name: string; show: boolean; position: TitlePosition};\n readonly size: {width: number; height: number};\n readonly frame: {type: 'full' | 'groups' | 'none'};\n readonly valueType: 'discrete' | 'continuous';\n readonly yAxis: {\n title: string;\n showTicks: boolean;\n showTitle: boolean;\n showAxisLabels: boolean;\n showGroupLabels: boolean;\n position: 'left' | 'right';\n groupingPosition: 'left' | 'right';\n axisLabelsAngle: 0 | 45 | 90;\n groupLabelsAngle: 0 | 45 | 90;\n sorting: 'asc' | 'desc';\n };\n readonly xAxis: {\n title: string;\n showTicks: boolean;\n showTitle: boolean;\n showAxisLabels: boolean;\n showGroupLabels: boolean;\n position: 'bottom' | 'top';\n groupingPosition: 'bottom' | 'top';\n axisLabelsAngle: 0 | 45 | 90;\n groupLabelsAngle: 0 | 45 | 90;\n sorting: 'asc' | 'desc';\n };\n readonly legend: {show: boolean; position: LegendPosition};\n readonly tooltips: {show: boolean; content?: ColumnName[]};\n };\n readonly aes: {\n colorsList: string[];\n colorsMap: Record<string, string> | null;\n valueColors: string[] | null;\n valuesByColors: number[] | null;\n groupGap: number;\n cellStrokeColor: string;\n emptyCellColor: string;\n };\n\n readonly annotations: (HeatmapAnnotationX | HeatmapAnnotationY)[];\n\n readonly dendrogramX: HeatmapDendrogramSettingsX | null;\n readonly dendrogramY: HeatmapDendrogramSettingsY | null;\n readonly inheritedDendrogramAes: Record<string, AesRecord> | null;\n readonly NAValueAs: number | null;\n\n constructor(settings: HeatmapSettings) {\n HeatmapSettingsSchema.parse(settings);\n\n this.id = lodash.uniqueId('settings');\n this.facetSettings = {\n sharedX: (settings.facetBy ?? []).length > 0,\n sharedY: (settings.facetBy ?? []).length > 0,\n ...settings.facetSettings,\n };\n this.xColumn = settings.xColumn;\n this.xGroupBy = settings.xGroupBy ?? [];\n this.yColumn = settings.yColumn;\n this.yGroupBy = settings.yGroupBy ?? [];\n this.valueColumn = settings.valueColumn;\n this.facetBy = settings.facetBy ?? [];\n this.chartSettings = {\n title: {\n position: 'left',\n show: true,\n ...settings.title,\n name: settings.title?.name ?? 'Chart',\n },\n size: {\n width: settings?.size?.width ?? (this.facetBy.length ? DEFAULT_WIDTH_SMALL : DEFAULT_WIDTH),\n height: settings?.size?.height ?? (this.facetBy.length ? DEFAULT_HEIGHT_SMALL : DEFAULT_HEIGHT),\n },\n frame: {type: settings.frame?.type ?? 'none'},\n valueType: settings.valueType ?? 'continuous',\n yAxis: {\n title: settings.yColumn.label ?? settings.yColumn.value,\n showTicks: true,\n showTitle: true,\n showAxisLabels: true,\n showGroupLabels: true,\n position: 'left',\n groupingPosition: 'left',\n axisLabelsAngle: 90,\n groupLabelsAngle: 0,\n sorting: 'asc',\n ...settings.yAxis,\n },\n xAxis: {\n title: settings.xColumn.label ?? settings.xColumn.value,\n showTicks: true,\n showTitle: true,\n showAxisLabels: true,\n showGroupLabels: true,\n position: 'bottom',\n groupingPosition: 'bottom',\n axisLabelsAngle: 90,\n groupLabelsAngle: 0,\n sorting: 'asc',\n ...settings.xAxis,\n },\n legend: {\n show: true,\n position: 'right',\n ...settings.legend,\n },\n tooltips: {\n show: true,\n ...settings.tooltips,\n },\n };\n this.normalization = this.chartSettings.valueType === 'continuous' ? settings.normalization ?? null : null;\n this.NAValueAs = settings.NAValueAs ?? null;\n this.aes = {\n colorsList: settings.aes?.colorsList ?? ['black', 'white', 'red'],\n colorsMap: settings.aes?.colorsMap ?? null,\n valueColors: settings.aes?.valueColors ?? null,\n valuesByColors: settings.aes?.valuesByColors ?? null,\n cellStrokeColor: settings.aes?.cellStrokeColor ?? 'none',\n groupGap: settings.aes?.groupGap ?? 3,\n emptyCellColor: settings.aes?.emptyCellColor ?? 'white',\n };\n\n this.annotations = (settings.annotations ?? []).map(item => {\n if (item.axis === 'x') {\n return {\n id: lodash.uniqueId('annotation'),\n axis: 'x',\n valueColumn: item.valueColumn,\n position: item.position ?? this.chartSettings.xAxis.position,\n titlePosition: item.titlePosition ?? 'right',\n showTitle: item.showTitle ?? true,\n type: item.type,\n colors: item.colors ?? ['white', 'black'],\n };\n }\n return {\n id: lodash.uniqueId('annotation'),\n axis: 'y',\n valueColumn: item.valueColumn,\n position: item.position ?? this.chartSettings.yAxis.position,\n titlePosition: item.titlePosition ?? 'top',\n showTitle: item.showTitle ?? true,\n type: item.type,\n colors: item.colors ?? ['white', 'black'],\n };\n });\n\n if (settings.valueType === 'discrete' && (settings.dendrogramX || settings.dendrogramY)) {\n throw Error('Dendrogram is not available with discrete cells values');\n }\n\n this.dendrogramX = settings.dendrogramX\n ? {\n ...DEFAULT_DENDRO,\n position: 'top',\n ...settings.dendrogramX,\n aes: {\n ...DEFAULT_DENDRO_AES,\n ...settings.dendrogramX?.aes,\n },\n }\n : null;\n this.dendrogramY = settings.dendrogramY\n ? {\n ...DEFAULT_DENDRO,\n position: 'left',\n ...settings.dendrogramY,\n aes: {\n ...DEFAULT_DENDRO_AES,\n ...settings.dendrogramY?.aes,\n },\n }\n : null;\n this.inheritedDendrogramAes = settings.inheritedDendrogramAes ?? null;\n }\n}\n"],"names":["DEFAULT_DENDRO_AES","BLACK","DEFAULT_DENDRO","HeatmapSettingsImpl","settings","__publicField","HeatmapSettingsSchema","lodash","_a","_b","DEFAULT_WIDTH_SMALL","DEFAULT_WIDTH","_c","DEFAULT_HEIGHT_SMALL","DEFAULT_HEIGHT","_d","_e","_f","_g","_h","_i","_j","_k","item","_l","_m"],"mappings":"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","x_google_ignoreList":[0]}
|
package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/Annotations/Annotation.js
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
import { j as u } from "../../../node_modules/react/jsx-runtime.js";
|
|
2
2
|
import { r as F } from "../../../node_modules/react-dom/index.js";
|
|
3
|
-
import { BLACK as
|
|
3
|
+
import { BLACK as L } from "../../../constants.js";
|
|
4
4
|
import { ANNOTATION_WIDTH as c } from "../../constants.js";
|
|
5
5
|
function H(y, x, o, p, f) {
|
|
6
6
|
if (y) {
|
|
7
|
-
const
|
|
8
|
-
return { x:
|
|
7
|
+
const j = c / 2, K = o === "top" ? -5 : f + 5;
|
|
8
|
+
return { x: j, y: K, rotate: x === "left" ? -90 : 90, anchor: x === "left" && o === "top" ? "start" : "end" };
|
|
9
9
|
}
|
|
10
10
|
const l = o === "right" ? p + 5 : -5, s = c / 2;
|
|
11
11
|
return { x: l, y: s, rotate: 0, anchor: o === "right" ? "start" : "end" };
|
|
12
12
|
}
|
|
13
|
-
function
|
|
14
|
-
return y !== null &&
|
|
13
|
+
function O(y) {
|
|
14
|
+
return y !== null && "isAnnotation" in y;
|
|
15
15
|
}
|
|
16
16
|
function R({
|
|
17
17
|
facetKey: y,
|
|
@@ -21,51 +21,52 @@ function R({
|
|
|
21
21
|
stepY: f,
|
|
22
22
|
x: l,
|
|
23
23
|
y: s,
|
|
24
|
-
annotation:
|
|
25
|
-
showTitle:
|
|
26
|
-
width:
|
|
27
|
-
height:
|
|
24
|
+
annotation: j,
|
|
25
|
+
showTitle: K,
|
|
26
|
+
width: S,
|
|
27
|
+
height: _,
|
|
28
28
|
colorScale: v,
|
|
29
|
-
aes:
|
|
29
|
+
aes: E,
|
|
30
30
|
frame: k,
|
|
31
31
|
xGroupKeys: w,
|
|
32
|
-
yGroupKeys:
|
|
32
|
+
yGroupKeys: C,
|
|
33
33
|
xKeysByGroups: h,
|
|
34
34
|
yKeysByGroups: d,
|
|
35
35
|
tooltipsData: a,
|
|
36
|
-
activeElementContainer:
|
|
36
|
+
activeElementContainer: D
|
|
37
37
|
}) {
|
|
38
|
-
const { position:
|
|
38
|
+
const { position: A, titlePosition: I, valueColumn: g } = j, r = A === "left" || A === "right", T = (r ? o.y : o.x).domain(), m = H(r, A, I, S, _), W = a.fixed && D;
|
|
39
39
|
return /* @__PURE__ */ u.jsxs("g", { children: [
|
|
40
|
-
T.map((
|
|
41
|
-
const
|
|
40
|
+
T.map((t) => {
|
|
41
|
+
const e = x == null ? void 0 : x[t], i = v.type === "continuous" ? v.scale(Number(e)) : v.scale(String(e)), n = l + (r ? 0 : o.x(t)), M = s + (r ? o.y(t) : 0), N = r ? c : p, $ = r ? f : c, b = r ? null : t, B = r ? t : null, z = W && O(a.selectedData) && a.selectedData.xKey === b && a.selectedData.yKey === B && y === a.currentFacet, G = /* @__PURE__ */ u.jsx(
|
|
42
42
|
"rect",
|
|
43
43
|
{
|
|
44
44
|
x: n,
|
|
45
|
-
y:
|
|
46
|
-
width:
|
|
47
|
-
height:
|
|
45
|
+
y: M,
|
|
46
|
+
width: N,
|
|
47
|
+
height: $,
|
|
48
48
|
fill: i,
|
|
49
|
-
stroke:
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
49
|
+
stroke: E.cellStrokeColor,
|
|
50
|
+
onMouseEnter: () => a.onMouseEnter({
|
|
51
|
+
isAnnotation: !0,
|
|
52
|
+
x: n + N,
|
|
53
|
+
y: M + $ / 2,
|
|
53
54
|
xKey: b,
|
|
54
55
|
yKey: B,
|
|
55
|
-
value:
|
|
56
|
+
value: e,
|
|
56
57
|
title: g.label ?? g.value
|
|
57
58
|
}, y),
|
|
58
59
|
onMouseLeave: () => a.onMouseLeave()
|
|
59
60
|
},
|
|
60
|
-
|
|
61
|
+
t
|
|
61
62
|
);
|
|
62
|
-
return z ? F.createPortal(
|
|
63
|
+
return z ? F.createPortal(G, D) : G;
|
|
63
64
|
}),
|
|
64
|
-
a.fixed && !r && w.map((
|
|
65
|
-
const
|
|
66
|
-
if (
|
|
65
|
+
a.fixed && !r && w.map((t) => {
|
|
66
|
+
const e = h[t].length;
|
|
67
|
+
if (e === 0)
|
|
67
68
|
return null;
|
|
68
|
-
const i =
|
|
69
|
+
const i = e * p, n = o.x(h[t][0]);
|
|
69
70
|
return /* @__PURE__ */ u.jsx(
|
|
70
71
|
"rect",
|
|
71
72
|
{
|
|
@@ -79,11 +80,11 @@ function R({
|
|
|
79
80
|
`${n}_${s}`
|
|
80
81
|
);
|
|
81
82
|
}),
|
|
82
|
-
a.fixed && r &&
|
|
83
|
-
const
|
|
84
|
-
if (
|
|
83
|
+
a.fixed && r && C.map((t) => {
|
|
84
|
+
const e = d[t].length;
|
|
85
|
+
if (e === 0)
|
|
85
86
|
return null;
|
|
86
|
-
const i =
|
|
87
|
+
const i = e * f, n = o.y(d[t][0]);
|
|
87
88
|
return /* @__PURE__ */ u.jsx(
|
|
88
89
|
"rect",
|
|
89
90
|
{
|
|
@@ -97,11 +98,11 @@ function R({
|
|
|
97
98
|
`${l}_${n}`
|
|
98
99
|
);
|
|
99
100
|
}),
|
|
100
|
-
k.type === "groups" && !r && w.map((
|
|
101
|
-
const
|
|
102
|
-
if (
|
|
101
|
+
k.type === "groups" && !r && w.map((t) => {
|
|
102
|
+
const e = h[t].length;
|
|
103
|
+
if (e === 0)
|
|
103
104
|
return null;
|
|
104
|
-
const i =
|
|
105
|
+
const i = e * p, n = o.x(h[t][0]);
|
|
105
106
|
return /* @__PURE__ */ u.jsx(
|
|
106
107
|
"rect",
|
|
107
108
|
{
|
|
@@ -109,17 +110,17 @@ function R({
|
|
|
109
110
|
y: s,
|
|
110
111
|
width: i,
|
|
111
112
|
height: c,
|
|
112
|
-
stroke:
|
|
113
|
+
stroke: L,
|
|
113
114
|
fill: "none"
|
|
114
115
|
},
|
|
115
116
|
`${n}_${s}`
|
|
116
117
|
);
|
|
117
118
|
}),
|
|
118
|
-
k.type === "groups" && r &&
|
|
119
|
-
const
|
|
120
|
-
if (
|
|
119
|
+
k.type === "groups" && r && C.map((t) => {
|
|
120
|
+
const e = d[t].length;
|
|
121
|
+
if (e === 0)
|
|
121
122
|
return null;
|
|
122
|
-
const i =
|
|
123
|
+
const i = e * f, n = o.y(d[t][0]);
|
|
123
124
|
return /* @__PURE__ */ u.jsx(
|
|
124
125
|
"rect",
|
|
125
126
|
{
|
|
@@ -127,13 +128,13 @@ function R({
|
|
|
127
128
|
y: n + s,
|
|
128
129
|
width: c,
|
|
129
130
|
height: i,
|
|
130
|
-
stroke:
|
|
131
|
+
stroke: L,
|
|
131
132
|
fill: "none"
|
|
132
133
|
},
|
|
133
134
|
`${l}_${n}`
|
|
134
135
|
);
|
|
135
136
|
}),
|
|
136
|
-
|
|
137
|
+
K && /* @__PURE__ */ u.jsx(
|
|
137
138
|
"g",
|
|
138
139
|
{
|
|
139
140
|
fontWeight: "500",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Annotation.js","sources":["../../../../../../../../node_modules/@milaboratories/miplots4/src/heatmap/components/Annotations/Annotation.tsx"],"sourcesContent":["import { createPortal } from 'react-dom';\nimport 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';\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 activeElementContainer?: Element;\n}\n\nfunction isAnnotationTooltip(d:Cell|AnnotationTooltipData|null):d is AnnotationTooltipData {\n return d !== null && !('data' in d);\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 activeElementContainer\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 const isDimmedBackground = tooltipsData.fixed && activeElementContainer;\n\n return (\n <g>\n {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 const highlighted = isDimmedBackground\n && isAnnotationTooltip(tooltipsData.selectedData)\n && tooltipsData.selectedData.xKey === xKey\n && tooltipsData.selectedData.yKey === yKey\n && facetKey === tooltipsData.currentFacet;\n const cellElement = (\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 onMouseOver={() => tooltipsData.onMouseEnter({\n x: xInner + width,\n y: yInner + height / 2,\n xKey,\n yKey,\n value,\n title: valueColumn.label ?? valueColumn.value\n } as AnnotationTooltipData, facetKey)}\n onMouseLeave={() => tooltipsData.onMouseLeave()}\n />\n );\n return highlighted ? createPortal(cellElement, activeElementContainer) : cellElement;\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","isAnnotationTooltip","d","Annotation","facetKey","data","scales","stepX","stepY","annotation","showTitle","colorScale","aes","frame","xGroupKeys","yGroupKeys","xKeysByGroups","yKeysByGroups","tooltipsData","activeElementContainer","position","valueColumn","keys","textPosition","isDimmedBackground","u","key","value","fillColor","xInner","yInner","xKey","yKey","highlighted","cellElement","jsx","createPortal","xGroupKey","keysCountX","groupWidth","groupX","yGroupKey","keysCountY","groupHeight","groupY","BLACK"],"mappings":"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","x_google_ignoreList":[0]}
|
|
1
|
+
{"version":3,"file":"Annotation.js","sources":["../../../../../../../../node_modules/@milaboratories/miplots4/src/heatmap/components/Annotations/Annotation.tsx"],"sourcesContent":["import { createPortal } from 'react-dom';\nimport 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';\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 activeElementContainer?: Element;\n}\n\nfunction isAnnotationTooltip(d:Cell|AnnotationTooltipData|null):d is AnnotationTooltipData {\n return d !== null && ('isAnnotation' in d);\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 activeElementContainer\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 const isDimmedBackground = tooltipsData.fixed && activeElementContainer;\n\n return (\n <g>\n {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 const highlighted = isDimmedBackground\n && isAnnotationTooltip(tooltipsData.selectedData)\n && tooltipsData.selectedData.xKey === xKey\n && tooltipsData.selectedData.yKey === yKey\n && facetKey === tooltipsData.currentFacet;\n const cellElement = (\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 xKey,\n yKey,\n value,\n title: valueColumn.label ?? valueColumn.value\n } satisfies AnnotationTooltipData, facetKey)}\n onMouseLeave={() => tooltipsData.onMouseLeave()}\n />\n );\n return highlighted ? createPortal(cellElement, activeElementContainer) : cellElement;\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","isAnnotationTooltip","d","Annotation","facetKey","data","scales","stepX","stepY","annotation","showTitle","colorScale","aes","frame","xGroupKeys","yGroupKeys","xKeysByGroups","yKeysByGroups","tooltipsData","activeElementContainer","position","valueColumn","keys","textPosition","isDimmedBackground","u","key","value","fillColor","xInner","yInner","xKey","yKey","highlighted","cellElement","jsx","createPortal","xGroupKey","keysCountX","groupWidth","groupX","yGroupKey","keysCountY","groupHeight","groupY","BLACK"],"mappings":"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","x_google_ignoreList":[0]}
|