@milaboratories/graph-maker 1.1.138 → 1.1.140
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/Chart.vue.d.ts.map +1 -1
- package/dist/GraphMaker/components/Chart.vue.js +1 -0
- package/dist/GraphMaker/components/Chart.vue.js.map +1 -1
- package/dist/GraphMaker/components/LassoControls/index.vue.js +15 -13
- package/dist/GraphMaker/components/LassoControls/index.vue.js.map +1 -1
- package/dist/GraphMaker/dataBindAes.d.ts +5 -5
- package/dist/GraphMaker/dataBindAes.d.ts.map +1 -1
- package/dist/GraphMaker/dataBindAes.js +52 -49
- package/dist/GraphMaker/dataBindAes.js.map +1 -1
- package/dist/GraphMaker/forms/LayersForm/AesSelector.vue.js +14 -14
- package/dist/GraphMaker/forms/LayersForm/AesSelector.vue.js.map +1 -1
- package/dist/GraphMaker/index.vue.d.ts.map +1 -1
- package/dist/GraphMaker/index.vue.js +125 -124
- package/dist/GraphMaker/index.vue.js.map +1 -1
- package/dist/GraphMaker/types.d.ts +1 -1
- package/dist/GraphMaker/types.d.ts.map +1 -1
- package/dist/GraphMaker/utils/createChartSettingsForRender/composeBubbleSettings.d.ts +6 -0
- package/dist/GraphMaker/utils/createChartSettingsForRender/composeBubbleSettings.d.ts.map +1 -1
- package/dist/GraphMaker/utils/createChartSettingsForRender/composeChartSettings.d.ts +4 -8
- package/dist/GraphMaker/utils/createChartSettingsForRender/composeChartSettings.d.ts.map +1 -1
- package/dist/GraphMaker/utils/createChartSettingsForRender/composeChartSettings.js.map +1 -1
- package/dist/GraphMaker/utils/createChartSettingsForRender/composeDendroSettings.d.ts +15 -0
- package/dist/GraphMaker/utils/createChartSettingsForRender/composeDendroSettings.d.ts.map +1 -1
- package/dist/GraphMaker/utils/createChartSettingsForRender/composeDiscreteSettings.d.ts +12 -3
- package/dist/GraphMaker/utils/createChartSettingsForRender/composeDiscreteSettings.d.ts.map +1 -1
- package/dist/GraphMaker/utils/createChartSettingsForRender/composeHeatmapSettings.d.ts +21 -0
- package/dist/GraphMaker/utils/createChartSettingsForRender/composeHeatmapSettings.d.ts.map +1 -1
- package/dist/GraphMaker/utils/createChartSettingsForRender/composeHistogramSettings.d.ts +10 -6
- package/dist/GraphMaker/utils/createChartSettingsForRender/composeHistogramSettings.d.ts.map +1 -1
- package/dist/GraphMaker/utils/createChartSettingsForRender/composeScatterplotSettings.d.ts +31 -13
- package/dist/GraphMaker/utils/createChartSettingsForRender/composeScatterplotSettings.d.ts.map +1 -1
- package/dist/GraphMaker/utils/createChartSettingsForRender/composeScatterplotSettings.js +56 -62
- package/dist/GraphMaker/utils/createChartSettingsForRender/composeScatterplotSettings.js.map +1 -1
- package/dist/GraphMaker/utils/createChartSettingsForRender/composeScatterplotUmapSettings.d.ts +29 -13
- package/dist/GraphMaker/utils/createChartSettingsForRender/composeScatterplotUmapSettings.d.ts.map +1 -1
- package/dist/GraphMaker/utils/createChartSettingsForRender/composeScatterplotUmapSettings.js +20 -19
- package/dist/GraphMaker/utils/createChartSettingsForRender/composeScatterplotUmapSettings.js.map +1 -1
- package/dist/GraphMaker/utils/loadUniqueValuesToSave.d.ts.map +1 -1
- package/dist/GraphMaker/utils/loadUniqueValuesToSave.js +57 -54
- package/dist/GraphMaker/utils/loadUniqueValuesToSave.js.map +1 -1
- package/dist/lib.js +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/AbstractChart.js +5 -5
- package/dist/node_modules/@milaboratories/miplots4/dist/AbstractChart.js.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 +8 -5
- package/dist/node_modules/@milaboratories/miplots4/dist/MiPlots.js.map +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 +38 -34
- 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/Error.js +4 -22
- package/dist/node_modules/@milaboratories/miplots4/dist/common/Error.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 +199 -198
- 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 +81 -79
- 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 +140 -134
- 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 +17 -17
- 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 +32 -31
- 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 +62 -58
- 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 +28 -28
- 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 -25
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/dots.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/getLayersData.js +13 -13
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/getLayersData.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/index.js +69 -76
- 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 +50 -38
- 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/utils/sortDotsByGrouping.js +18 -0
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/utils/sortDotsByGrouping.js.map +1 -0
- 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 +26 -26
- 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 +97 -118
- 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 +23 -17
- package/dist/node_modules/@milaboratories/miplots4/dist/types/scatterplot-umap.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/types/scatterplot.js +25 -19
- 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/arraysAreDifferent.js +7 -0
- package/dist/node_modules/@milaboratories/miplots4/dist/utils/arraysAreDifferent.js.map +1 -0
- 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 +1111 -1097
- 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/histogram/ChartRenderer.tsx"],"sourcesContent":["import {Error} from '../common/Error';\nimport type {LegendData, LegendItem} from '../common/types';\nimport {DEFAULT_HEIGHT, DEFAULT_WIDTH, TITLE_LINE_HEIGHT, TITLE_MARGIN} from '../constants';\nimport {FACET_TITLE_LINE} from './constants';\nimport {splitTextByWidth} from '../discrete/utils';\nimport type {HistogramLegendInfo, Margins} from './components/types';\nimport type {CaptionsSizes} from './components/types';\nimport {\n FACET_TITLE_OFFSET,\n MIN_MARGIN,\n MIN_PADDING,\n TICK_OFFSET,\n TITLE_LINE,\n} from './constants';\nimport type {GroupedHistogramData} from './getHistogramData';\nimport type {HistogramLayer, HistogramSettingsImpl} from './HistogramSettingsImpl';\nimport {DEFAULT_COMMON_AES, LEGEND_OFFSET} from '../scatterplot/constants';\nimport {getTicksAndFormat} from '../scatterplot/utils/getTicksAndFormat';\nimport type {ColumnName, ContinuousAesHistogram} from '../types';\nimport type {AesItem, InheritAesHistogram, Row} from '../types';\nimport {arrangeLegendParts} from '../utils/arrangeLegendParts';\nimport {getContinuousColorScale} from '../utils/getContinuousColorScale';\nimport {TextMeasurer} from '../utils/TextMeasurer';\nimport type {ScaleLogarithmic, ScaleOrdinal} from 'd3-scale';\nimport {scaleLinear, scaleOrdinal, scaleSymlog} from 'd3-scale';\nimport {DEFAULT_TICKS_SIZE} 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 type {ChartDimensionsData, ChartScales, ChartSizes, ChartsScales} from './components/types';\n\nfunction getChartEdgeSides(index: number, facetsCount: number, columnsCount: number, rowsCount: number) {\n const chartSides: ('left' | 'right' | 'top' | 'bottom')[] = [];\n if (index % columnsCount === columnsCount - 1) {\n chartSides.push('right');\n }\n if (index % columnsCount === 0) {\n chartSides.push('left');\n }\n if (index < columnsCount) {\n chartSides.push('top');\n }\n if (\n Math.ceil((index + 1) / columnsCount) === rowsCount ||\n (Math.ceil((index + 1) / columnsCount) === rowsCount - 1 &&\n index % columnsCount > (facetsCount - 1) % columnsCount)\n ) {\n chartSides.push('bottom');\n }\n return chartSides;\n}\n\nfunction calculatePaddings(\n xAxis: HistogramSettingsImpl['chartSettings']['xAxis'],\n yAxis: HistogramSettingsImpl['chartSettings']['yAxis'],\n captionsSizes: CaptionsSizes,\n currentRowFacetKeys: string[],\n facetTitles: Record<string, string[]>,\n chartEdgeSides: ('left' | 'right' | 'top' | 'bottom')[],\n lastInRow: boolean,\n facetSettings?: HistogramSettingsImpl['facetSettings']\n) {\n const needLeftAxis = chartEdgeSides.includes('left') || !facetSettings?.sharedY;\n const needBottomAxis = chartEdgeSides.includes('bottom') || !facetSettings?.sharedX;\n const needBottomAxisTitle = chartEdgeSides.includes('bottom') && xAxis.title !== '';\n\n const yCaptions = captionsSizes.yAxisCaptionsWidth;\n const yTicks = (yAxis.showTicks ? DEFAULT_TICKS_SIZE : 0) + (yAxis.hiddenLabels ? 0 : TICK_OFFSET);\n\n const xCaptions = captionsSizes.xAxisCaptionsWidth;\n const xTicks = (xAxis.showTicks ? DEFAULT_TICKS_SIZE : 0) + (xAxis.hiddenLabels ? 0 : TICK_OFFSET);\n const xAxisTitle = needBottomAxisTitle ? TITLE_LINE : 0;\n\n const leftAxisElements = yCaptions + yTicks;\n const bottomAxisElements = xTicks + xCaptions + xAxisTitle;\n\n const facetTitlesLinesCount = Math.max(...currentRowFacetKeys.map(key => facetTitles[key].length));\n return {\n left: needLeftAxis ? leftAxisElements : MIN_PADDING,\n top: facetTitlesLinesCount === 0 ? 0 : FACET_TITLE_OFFSET * 2 + facetTitlesLinesCount * FACET_TITLE_LINE,\n bottom: needBottomAxis ? bottomAxisElements : MIN_PADDING,\n right: lastInRow ? 0 : MIN_PADDING,\n };\n}\n\n// facet keys grouped by rows\nfunction getFacetRows(facetKeys: string[], nRows: number, nColumns: number): string[][] {\n const result: string[][] = [];\n for (let i = 0; i < nRows; i++) {\n result.push(facetKeys.slice(i * nColumns, i * nColumns + nColumns));\n }\n return result;\n}\n\nfunction getRowColumn(idx: number, columnsCount: number) {\n const row = Math.floor(idx / columnsCount);\n const column = idx - row * columnsCount;\n return [row, column];\n}\n\nfunction isInheritedAes(v: InheritAesHistogram | unknown): v is InheritAesHistogram {\n return typeof v === 'object' && v !== null && 'type' in v && 'value' in v && v.type === 'grouping';\n}\nfunction isContinuousAes(v: ContinuousAesHistogram | unknown): v is ContinuousAesHistogram {\n return typeof v === 'object' && v !== null && 'range' in v;\n}\nfunction createAesGetter(aesData: HistogramSettingsImpl['inheritedAes'], field: keyof AesItem, defaultDomain:number[]) {\n return function (aesItem: string | InheritAesHistogram | ContinuousAesHistogram, row: Row, height:number) {\n if (isContinuousAes(aesItem)) {\n const {domain = defaultDomain, range, type = 'linear'} = aesItem;\n const scale = getContinuousColorScale(range as string[], domain, type);\n scale.clamp(true);\n return scale(height);\n }\n if (isInheritedAes(aesItem)) {\n const columnId = aesItem.value;\n const mapping = aesData[columnId];\n return (mapping?.[String(row[columnId])] ?? DEFAULT_COMMON_AES)?.[field] as string;\n }\n return aesItem;\n };\n}\n\nclass ChartRenderer {\n reactRoot: Root | null = null;\n parentNode: HTMLElement | null = null;\n rootNode: HTMLElement | null = null;\n component: ReactElement = (<></>);\n margins: Margins = {\n top: MIN_MARGIN,\n bottom: MIN_MARGIN,\n left: MIN_MARGIN,\n right: MIN_MARGIN,\n };\n chartsDimensions: Record<string, ChartDimensionsData> = {};\n chartSizes: ChartSizes = {\n chartWidth: DEFAULT_WIDTH, // width of single chart\n chartHeight: DEFAULT_HEIGHT, // height of single chart\n chartsWidth: DEFAULT_WIDTH, // width of all charts in charts row\n chartsHeight: DEFAULT_HEIGHT, // width of all charts in charts column, without axes\n totalWidth: DEFAULT_WIDTH, // width of all charts in charts row, plus left axis, plus legend\n totalHeight: DEFAULT_HEIGHT, // width of all charts in charts height, plus bottom axis, plus top title\n };\n columnsCount = 1;\n rowsCount = 1;\n scales: ChartsScales = {\n x: {null: scaleLinear().domain([0, 10]).range([0, DEFAULT_WIDTH])},\n y: {null: scaleLinear().domain([0, 10]).range([DEFAULT_HEIGHT, 0])},\n };\n captionsSizes: CaptionsSizes = {\n xAxisCaptionsWidth: 30,\n yAxisCaptionsWidth: 100,\n };\n facetTitles: Record<string, string[]> = {}; // can be multiline\n mainTitle: string[] = []; // can be multiline\n legend: LegendData = {\n width: 0,\n height: 0,\n items: [],\n };\n\n clear() {\n if (this.parentNode && this.rootNode) {\n this.parentNode?.removeChild(this.rootNode);\n this.parentNode = null;\n this.rootNode = null;\n }\n // timeout to avoid trying to unmount during rendering\n setTimeout(() => {\n this.reactRoot?.unmount();\n this.reactRoot = null;\n });\n }\n\n init(node: HTMLElement) {\n if (this.parentNode === null) {\n this.parentNode = node;\n this.rootNode = document.createElement('div');\n this.parentNode.appendChild(this.rootNode);\n this.reactRoot = createRoot(this.rootNode);\n }\n }\n\n updateChartSizes(size: HistogramSettingsImpl['chartSettings']['size']) {\n this.chartSizes.chartWidth = size.width;\n this.chartSizes.chartHeight = size.height;\n }\n\n updateChartDimensions(\n facetKeys: string[],\n facetSettings: HistogramSettingsImpl['facetSettings'],\n xAxis: HistogramSettingsImpl['chartSettings']['xAxis'],\n yAxis: HistogramSettingsImpl['chartSettings']['yAxis']\n ) {\n const {chartWidth, chartHeight} = this.chartSizes;\n let currentLeft = 0;\n let currentTop = 0;\n this.chartsDimensions = facetKeys.reduce((res: Record<string, ChartDimensionsData>, key: string, index) => {\n const [currentRow, currentColumn] = getRowColumn(index, this.columnsCount);\n const chartEdgeSides = getChartEdgeSides(index, facetKeys.length, this.columnsCount, this.rowsCount);\n const padding = calculatePaddings(\n xAxis,\n yAxis,\n this.captionsSizes,\n getFacetRows(facetKeys, this.rowsCount, this.columnsCount)[currentRow],\n this.facetTitles,\n chartEdgeSides,\n currentColumn === this.columnsCount - 1,\n facetSettings\n );\n const outerWidth = chartWidth + padding.left + padding.right;\n const outerHeight = chartHeight + padding.top + padding.bottom;\n res[key] = {\n left: currentLeft,\n top: currentTop,\n chartEdgeSides,\n padding,\n inner: {width: chartWidth, height: chartHeight},\n outer: {width: outerWidth, height: outerHeight},\n };\n currentLeft += outerWidth;\n if (currentColumn === this.columnsCount - 1) {\n currentLeft = 0;\n currentTop += outerHeight;\n }\n return res;\n }, {});\n\n const chartsWidth = Math.max(\n ...facetKeys.map(key => this.chartsDimensions[key].outer.width + this.chartsDimensions[key].left)\n );\n const chartsHeight = Math.max(\n ...facetKeys.map(key => this.chartsDimensions[key].outer.height + this.chartsDimensions[key].top)\n );\n this.chartSizes.chartsWidth = chartsWidth;\n this.chartSizes.chartsHeight = chartsHeight;\n }\n\n updateViewport(\n facetKeys: string[],\n facetSettings: HistogramSettingsImpl['facetSettings'],\n xAxis: HistogramSettingsImpl['chartSettings']['xAxis'],\n yAxis: HistogramSettingsImpl['chartSettings']['yAxis'],\n histogramDataByFacets: Record<string, GroupedHistogramData>,\n size: HistogramSettingsImpl['chartSettings']['size'],\n groupingStack: HistogramSettingsImpl['groupingStack'],\n ) {\n const facetCount = facetKeys.length;\n const maxNRows = Math.min(facetSettings.nRows ?? facetCount, facetCount);\n const maxNCols = Math.min(facetSettings.nCols ?? facetCount, facetCount);\n // Use columns/rows count from settings if some of them defined, else make 1 column\n this.columnsCount = facetSettings.nRows ? Math.ceil(facetCount / maxNRows) : maxNCols;\n this.rowsCount = Math.ceil(facetCount / this.columnsCount);\n\n let [minXAll, maxXAll] = [Infinity, -Infinity];\n let maxYAll = -Infinity;\n const histogramExtentsByKeys = facetKeys.reduce((res: Record<string, Record<string, number>>, key) => {\n const histogramData = histogramDataByFacets[key];\n const {minX, maxX, maxCount, maxCountFromGroups} = histogramData;\n minXAll = Math.min(minXAll, minX);\n maxXAll = Math.max(maxXAll, maxX);\n maxYAll = Math.max(maxYAll, groupingStack === 'vertical' ? maxCount : maxCountFromGroups);\n res[key] = {minX, maxX, maxY: groupingStack === 'vertical' ? maxCount : maxCountFromGroups};\n return res;\n }, {});\n\n facetKeys.forEach(key => {\n const scaleX: ChartScales['x'] = xAxis.scale === 'log' ? scaleSymlog() : scaleLinear();\n\n const extents = histogramExtentsByKeys[key];\n const minX = facetSettings.sharedX ? minXAll : extents.minX;\n const maxX = facetSettings.sharedX ? maxXAll : extents.maxX;\n\n (scaleX.domain([minX, maxX]) as ChartScales['x']).range([0, this.chartSizes.chartWidth]);\n this.scales.x[key] = scaleX;\n });\n facetKeys.forEach(key => {\n const scaleY = yAxis.scale === 'log' ? scaleSymlog() : scaleLinear();\n const extents = histogramExtentsByKeys[key];\n\n const minY = 0;\n const maxY = facetSettings.sharedY ? maxYAll : extents.maxY;\n\n const rangeV = [this.chartSizes.chartHeight, 0];\n // supporting scale, it needs to add offsets of fixed size in pixels to general scale Y\n const tempY: ChartScales['y'] = (scaleY.copy().domain([minY, maxY]) as ChartScales['y']).range([\n this.chartSizes.chartHeight,\n size.innerOffset,\n ]) as ChartScales['y'];\n (scaleY.domain([tempY.invert(this.chartSizes.chartHeight), tempY.invert(0)]) as ChartScales['y']).range(\n rangeV\n );\n this.scales.y[key] = scaleY;\n });\n }\n\n updateCaptionsSize(\n xAxis: HistogramSettingsImpl['chartSettings']['xAxis'],\n yAxis: HistogramSettingsImpl['chartSettings']['yAxis']\n ) {\n const textMeasurer = new TextMeasurer('600 14px Arial');\n\n let maxYTick = 0;\n\n function getMaxTickWidth(ticks: string[]) {\n return Math.max(...ticks.map(key => textMeasurer.getTextWidth(key)));\n }\n\n if (!yAxis.hiddenLabels) {\n Object.values(this.scales.y).forEach(scale => {\n const {ticks, format} = getTicksAndFormat(scale as ScaleLogarithmic<number, number>, false);\n maxYTick = Math.max(maxYTick, getMaxTickWidth(ticks.map(format)));\n });\n }\n this.captionsSizes = {\n xAxisCaptionsWidth: xAxis.hiddenLabels ? 0 : 20,\n yAxisCaptionsWidth: maxYTick,\n };\n }\n\n createMainTitle(facetKeys: string[], title: HistogramSettingsImpl['chartSettings']['title']) {\n const firstChart = this.chartsDimensions[facetKeys[0]];\n const lastChart = this.chartsDimensions[facetKeys[facetKeys.length - 1]];\n\n this.mainTitle = splitTextByWidth(\n title.name,\n this.chartSizes.chartsWidth - firstChart.padding.left - lastChart.padding.right,\n 20\n );\n }\n\n createFacetTitles(facetKeys: string[], facetLabels: string[][]) {\n this.facetTitles = facetKeys.reduce((res: Record<string, string[]>, key, idx) => {\n if (facetLabels[idx].length === 1 && facetLabels[idx][0] === 'null') {\n res[key] = [];\n } else {\n res[key] = splitTextByWidth(facetLabels[idx].join(', '), this.chartSizes.chartWidth, 14);\n }\n return res;\n }, {});\n }\n\n updateLegendSize(\n legend: HistogramSettingsImpl['chartSettings']['legend'],\n legendInfo: HistogramLegendInfo,\n grouping: ColumnName | null,\n layers: HistogramLayer[]\n ) {\n if (!legend.show) {\n this.legend = {width: 0, height: 0, items: []};\n return;\n }\n\n const legendItems: LegendItem[] = [];\n const emptySizes = {width:0, height:0, left:0, top: 0};\n\n layers.forEach(layer => {\n if (isInheritedAes(layer.aes.fillColor) && grouping) {\n const columnId = layer.aes.fillColor.value;\n const info = legendInfo[grouping.value];\n const title = grouping.label ?? grouping.value;\n const scale:ScaleOrdinal<string, string> = scaleOrdinal<string, string>()\n .domain(info.values)\n .range(info.values.map(value => info.aesMap[value].fillColor as string));\n legendItems.push({...emptySizes, id: columnId, type: 'discreteColor', title, scale, values: info.values, labels: info.labels});\n }\n });\n\n if (!legendItems.length) {\n this.legend = {width: 0, height: 0, items: []};\n return;\n }\n\n const items = arrangeLegendParts(legendItems, this.chartSizes.chartHeight);\n\n const lastItem = items[items.length - 1];\n const legendWidth = lastItem.left + lastItem.width + LEGEND_OFFSET;\n const legendHeight = this.chartSizes.chartHeight;\n\n this.legend = {\n width: legendWidth,\n height: legendHeight,\n items,\n };\n }\n\n updateMargins(size:HistogramSettingsImpl['chartSettings']['size']) {\n const titleTextHeight = TITLE_LINE_HEIGHT * this.mainTitle.length;\n const titleHeight = titleTextHeight > 0 ? titleTextHeight + TITLE_MARGIN * 2 : 0;\n\n const minMargin = size.outerOffset;\n\n this.margins = {\n top: Math.max(titleHeight, minMargin),\n bottom: minMargin,\n left: minMargin,\n right: this.legend.width + minMargin,\n };\n this.chartSizes.totalWidth = this.margins.left + this.chartSizes.chartsWidth + this.margins.right;\n this.chartSizes.totalHeight = this.margins.top + this.chartSizes.chartsHeight + this.margins.bottom;\n }\n\n render(\n settingsId: string,\n chartSettings: HistogramSettingsImpl['chartSettings'],\n facetSettings: HistogramSettingsImpl['facetSettings'],\n facetKeys: string[],\n facetLabels: string[][],\n histogramDataByFacets: Record<string, GroupedHistogramData>,\n legendInfo: HistogramLegendInfo,\n layers: HistogramLayer[],\n inheritedAes: HistogramSettingsImpl['inheritedAes'],\n grouping: ColumnName | null,\n groupingStack: HistogramSettingsImpl['groupingStack'],\n groupingDirection: HistogramSettingsImpl['groupingDirection'],\n onTooltipHintSwitch: (v:boolean) => void,\n ) {\n const {xAxis, yAxis, size, title} = chartSettings;\n this.updateChartSizes(size);\n this.updateViewport(facetKeys, facetSettings, xAxis, yAxis, histogramDataByFacets, size, groupingStack);\n this.updateCaptionsSize(xAxis, yAxis);\n this.createFacetTitles(facetKeys, facetLabels);\n this.updateChartDimensions(facetKeys, facetSettings, xAxis, yAxis);\n this.createMainTitle(facetKeys, title);\n this.updateLegendSize(chartSettings.legend, legendInfo, grouping, layers);\n this.updateMargins(size);\n const minHeight = facetKeys.reduce((v, key) => {\n return Math.min(v, histogramDataByFacets[key].minX);\n }, Infinity);\n const maxHeight = facetKeys.reduce((v, key) => {\n return Math.max(v, histogramDataByFacets[key].maxX);\n }, -Infinity);\n const component = (\n <ChartsGroup\n settingsId={settingsId}\n chartSettings={chartSettings}\n facetKeys={facetKeys}\n facetSettings={facetSettings}\n chartSizes={this.chartSizes}\n chartsDimensions={this.chartsDimensions}\n scales={this.scales}\n columnsCount={this.columnsCount}\n margins={this.margins}\n mainTitle={this.mainTitle}\n facetTitles={this.facetTitles}\n captionsSizes={this.captionsSizes}\n histogramDataByFacets={histogramDataByFacets}\n layers={layers}\n aesColorGetter={createAesGetter(inheritedAes, 'fillColor', [minHeight, maxHeight])}\n groupingDirection={groupingDirection}\n groupingStack={groupingStack}\n groupingLabels={grouping ? legendInfo[grouping.value].labels : {}}\n legend={this.legend}\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":["getChartEdgeSides","index","facetsCount","columnsCount","rowsCount","chartSides","calculatePaddings","xAxis","yAxis","captionsSizes","currentRowFacetKeys","facetTitles","chartEdgeSides","lastInRow","facetSettings","needLeftAxis","needBottomAxis","needBottomAxisTitle","yCaptions","yTicks","DEFAULT_TICKS_SIZE","TICK_OFFSET","xCaptions","xTicks","xAxisTitle","TITLE_LINE","leftAxisElements","bottomAxisElements","facetTitlesLinesCount","key","MIN_PADDING","FACET_TITLE_OFFSET","FACET_TITLE_LINE","getFacetRows","facetKeys","nRows","nColumns","result","i","getRowColumn","idx","row","column","isInheritedAes","v","isContinuousAes","createAesGetter","aesData","field","defaultDomain","aesItem","height","domain","range","type","scale","getContinuousColorScale","columnId","mapping","_a","DEFAULT_COMMON_AES","ChartRenderer","__publicField","jsx","Fragment","MIN_MARGIN","DEFAULT_WIDTH","DEFAULT_HEIGHT","scaleLinear","node","createRoot","size","chartWidth","chartHeight","currentLeft","currentTop","res","currentRow","currentColumn","padding","outerWidth","outerHeight","chartsWidth","chartsHeight","histogramDataByFacets","groupingStack","facetCount","maxNRows","maxNCols","minXAll","maxXAll","maxYAll","histogramExtentsByKeys","histogramData","minX","maxX","maxCount","maxCountFromGroups","scaleX","scaleSymlog","extents","scaleY","minY","maxY","rangeV","tempY","textMeasurer","TextMeasurer","maxYTick","getMaxTickWidth","ticks","format","getTicksAndFormat","title","firstChart","lastChart","splitTextByWidth","facetLabels","legend","legendInfo","grouping","layers","legendItems","emptySizes","layer","info","scaleOrdinal","value","items","arrangeLegendParts","lastItem","legendWidth","LEGEND_OFFSET","legendHeight","titleTextHeight","TITLE_LINE_HEIGHT","titleHeight","TITLE_MARGIN","minMargin","settingsId","chartSettings","inheritedAes","groupingDirection","onTooltipHintSwitch","minHeight","maxHeight","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/histogram/ChartRenderer.tsx"],"sourcesContent":["import type { ScaleLogarithmic, ScaleOrdinal } from 'd3-scale';\nimport { scaleLinear, scaleOrdinal, scaleSymlog } from 'd3-scale';\nimport type { ReactElement } from 'react';\nimport type { Root } from 'react-dom/client';\nimport { createRoot } from 'react-dom/client';\nimport { Error } from '../common/Error';\nimport type { 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, RowIndex } from '../DataFrame';\nimport { splitTextByWidth } from '../discrete/utils';\nimport { DEFAULT_COMMON_AES, LEGEND_OFFSET } from '../scatterplot/constants';\nimport { getTicksAndFormat } from '../scatterplot/utils/getTicksAndFormat';\nimport type { AesItem, ColumnName, ContinuousAesHistogram, InheritAesHistogram } from '../types';\nimport { arrangeLegendParts } from '../utils/arrangeLegendParts';\nimport { getContinuousColorScale } from '../utils/getContinuousColorScale';\nimport { TextMeasurer } from '../utils/TextMeasurer/TextMeasurer';\nimport { ChartsGroup } from './components/ChartsGroup';\nimport type { CaptionsSizes, ChartDimensionsData, ChartScales, ChartSizes, ChartsScales, HistogramLegendInfo, Margins } from './components/types';\nimport {\n DEFAULT_TICKS_SIZE, FACET_TITLE_LINE, FACET_TITLE_OFFSET,\n MIN_MARGIN,\n MIN_PADDING,\n TICK_OFFSET,\n TITLE_LINE\n} from './constants';\nimport type { GroupedHistogramData } from './getHistogramData';\nimport type { HistogramLayer, HistogramSettingsImpl } from './HistogramSettingsImpl';\n\nfunction getChartEdgeSides(index: number, facetsCount: number, columnsCount: number, rowsCount: number) {\n const chartSides: ('left' | 'right' | 'top' | 'bottom')[] = [];\n if (index % columnsCount === columnsCount - 1) {\n chartSides.push('right');\n }\n if (index % columnsCount === 0) {\n chartSides.push('left');\n }\n if (index < columnsCount) {\n chartSides.push('top');\n }\n if (\n Math.ceil((index + 1) / columnsCount) === rowsCount ||\n (Math.ceil((index + 1) / columnsCount) === rowsCount - 1 &&\n index % columnsCount > (facetsCount - 1) % columnsCount)\n ) {\n chartSides.push('bottom');\n }\n return chartSides;\n}\n\nfunction calculatePaddings(\n xAxis: HistogramSettingsImpl['chartSettings']['xAxis'],\n yAxis: HistogramSettingsImpl['chartSettings']['yAxis'],\n captionsSizes: CaptionsSizes,\n currentRowFacetKeys: string[],\n facetTitles: Record<string, string[]>,\n chartEdgeSides: ('left' | 'right' | 'top' | 'bottom')[],\n lastInRow: boolean,\n facetSettings?: HistogramSettingsImpl['facetSettings']\n) {\n const needLeftAxis = chartEdgeSides.includes('left') || !facetSettings?.sharedY;\n const needBottomAxis = chartEdgeSides.includes('bottom') || !facetSettings?.sharedX;\n const needBottomAxisTitle = chartEdgeSides.includes('bottom') && xAxis.title !== '';\n\n const yCaptions = captionsSizes.yAxisCaptionsWidth;\n const yTicks = (yAxis.showTicks ? DEFAULT_TICKS_SIZE : 0) + (yAxis.hiddenLabels ? 0 : TICK_OFFSET);\n\n const xCaptions = captionsSizes.xAxisCaptionsWidth;\n const xTicks = (xAxis.showTicks ? DEFAULT_TICKS_SIZE : 0) + (xAxis.hiddenLabels ? 0 : TICK_OFFSET);\n const xAxisTitle = needBottomAxisTitle ? TITLE_LINE : 0;\n\n const leftAxisElements = yCaptions + yTicks;\n const bottomAxisElements = xTicks + xCaptions + xAxisTitle;\n\n const facetTitlesLinesCount = Math.max(...currentRowFacetKeys.map(key => facetTitles[key].length));\n return {\n left: needLeftAxis ? leftAxisElements : MIN_PADDING,\n top: facetTitlesLinesCount === 0 ? 0 : FACET_TITLE_OFFSET * 2 + facetTitlesLinesCount * FACET_TITLE_LINE,\n bottom: needBottomAxis ? bottomAxisElements : MIN_PADDING,\n right: lastInRow ? 0 : MIN_PADDING,\n };\n}\n\n// facet keys grouped by rows\nfunction getFacetRows(facetKeys: string[], nRows: number, nColumns: number): string[][] {\n const result: string[][] = [];\n for (let i = 0; i < nRows; i++) {\n result.push(facetKeys.slice(i * nColumns, i * nColumns + nColumns));\n }\n return result;\n}\n\nfunction getRowColumn(idx: number, columnsCount: number) {\n const row = Math.floor(idx / columnsCount);\n const column = idx - row * columnsCount;\n return [row, column];\n}\n\nfunction isInheritedAes(v: InheritAesHistogram | unknown): v is InheritAesHistogram {\n return typeof v === 'object' && v !== null && 'type' in v && 'value' in v && v.type === 'grouping';\n}\nfunction isContinuousAes(v: ContinuousAesHistogram | unknown): v is ContinuousAesHistogram {\n return typeof v === 'object' && v !== null && 'range' in v;\n}\nfunction createAesGetter(dataFrame: DataFrame, aesData: HistogramSettingsImpl['inheritedAes'], field: keyof AesItem, defaultDomain:number[]) {\n return function (aesItem: string | InheritAesHistogram | ContinuousAesHistogram, idx: RowIndex, height:number) {\n if (isContinuousAes(aesItem)) {\n const {domain = defaultDomain, range, type = 'linear'} = aesItem;\n const scale = getContinuousColorScale(range as string[], domain, type);\n scale.clamp(true);\n return scale(height);\n }\n if (isInheritedAes(aesItem)) {\n const columnId = aesItem.value;\n const mapping = aesData[columnId];\n return (mapping?.[String(dataFrame.getColumnValue(columnId, idx))] ?? DEFAULT_COMMON_AES)?.[field] as string;\n }\n return aesItem;\n };\n}\n\nclass ChartRenderer {\n reactRoot: Root | null = null;\n parentNode: HTMLElement | null = null;\n rootNode: HTMLElement | null = null;\n component: ReactElement = (<></>);\n margins: Margins = {\n top: MIN_MARGIN,\n bottom: MIN_MARGIN,\n left: MIN_MARGIN,\n right: MIN_MARGIN,\n };\n chartsDimensions: Record<string, ChartDimensionsData> = {};\n chartSizes: ChartSizes = {\n chartWidth: DEFAULT_WIDTH, // width of single chart\n chartHeight: DEFAULT_HEIGHT, // height of single chart\n chartsWidth: DEFAULT_WIDTH, // width of all charts in charts row\n chartsHeight: DEFAULT_HEIGHT, // width of all charts in charts column, without axes\n totalWidth: DEFAULT_WIDTH, // width of all charts in charts row, plus left axis, plus legend\n totalHeight: DEFAULT_HEIGHT, // width of all charts in charts height, plus bottom axis, plus top title\n };\n columnsCount = 1;\n rowsCount = 1;\n scales: ChartsScales = {\n x: {null: scaleLinear().domain([0, 10]).range([0, DEFAULT_WIDTH])},\n y: {null: scaleLinear().domain([0, 10]).range([DEFAULT_HEIGHT, 0])},\n };\n captionsSizes: CaptionsSizes = {\n xAxisCaptionsWidth: 30,\n yAxisCaptionsWidth: 100,\n };\n facetTitles: Record<string, string[]> = {}; // can be multiline\n mainTitle: string[] = []; // can be multiline\n legend: LegendData = {\n width: 0,\n height: 0,\n items: [],\n };\n\n clear() {\n if (this.parentNode && this.rootNode) {\n this.parentNode?.removeChild(this.rootNode);\n this.parentNode = null;\n this.rootNode = null;\n }\n // timeout to avoid trying to unmount during rendering\n setTimeout(() => {\n this.reactRoot?.unmount();\n this.reactRoot = null;\n });\n }\n\n init(node: HTMLElement) {\n if (this.parentNode === null) {\n this.parentNode = node;\n this.rootNode = document.createElement('div');\n this.parentNode.appendChild(this.rootNode);\n this.reactRoot = createRoot(this.rootNode);\n }\n }\n\n updateChartSizes(size: HistogramSettingsImpl['chartSettings']['size']) {\n this.chartSizes.chartWidth = size.width;\n this.chartSizes.chartHeight = size.height;\n }\n\n updateChartDimensions(\n facetKeys: string[],\n facetSettings: HistogramSettingsImpl['facetSettings'],\n xAxis: HistogramSettingsImpl['chartSettings']['xAxis'],\n yAxis: HistogramSettingsImpl['chartSettings']['yAxis']\n ) {\n const {chartWidth, chartHeight} = this.chartSizes;\n let currentLeft = 0;\n let currentTop = 0;\n this.chartsDimensions = facetKeys.reduce((res: Record<string, ChartDimensionsData>, key: string, index) => {\n const [currentRow, currentColumn] = getRowColumn(index, this.columnsCount);\n const chartEdgeSides = getChartEdgeSides(index, facetKeys.length, this.columnsCount, this.rowsCount);\n const padding = calculatePaddings(\n xAxis,\n yAxis,\n this.captionsSizes,\n getFacetRows(facetKeys, this.rowsCount, this.columnsCount)[currentRow],\n this.facetTitles,\n chartEdgeSides,\n currentColumn === this.columnsCount - 1,\n facetSettings\n );\n const outerWidth = chartWidth + padding.left + padding.right;\n const outerHeight = chartHeight + padding.top + padding.bottom;\n res[key] = {\n left: currentLeft,\n top: currentTop,\n chartEdgeSides,\n padding,\n inner: {width: chartWidth, height: chartHeight},\n outer: {width: outerWidth, height: outerHeight},\n };\n currentLeft += outerWidth;\n if (currentColumn === this.columnsCount - 1) {\n currentLeft = 0;\n currentTop += outerHeight;\n }\n return res;\n }, {});\n\n const chartsWidth = Math.max(\n ...facetKeys.map(key => this.chartsDimensions[key].outer.width + this.chartsDimensions[key].left)\n );\n const chartsHeight = Math.max(\n ...facetKeys.map(key => this.chartsDimensions[key].outer.height + this.chartsDimensions[key].top)\n );\n this.chartSizes.chartsWidth = chartsWidth;\n this.chartSizes.chartsHeight = chartsHeight;\n }\n\n updateViewport(\n facetKeys: string[],\n facetSettings: HistogramSettingsImpl['facetSettings'],\n xAxis: HistogramSettingsImpl['chartSettings']['xAxis'],\n yAxis: HistogramSettingsImpl['chartSettings']['yAxis'],\n histogramDataByFacets: Record<string, GroupedHistogramData>,\n size: HistogramSettingsImpl['chartSettings']['size'],\n groupingStack: HistogramSettingsImpl['groupingStack'],\n ) {\n const facetCount = facetKeys.length;\n const maxNRows = Math.min(facetSettings.nRows ?? facetCount, facetCount);\n const maxNCols = Math.min(facetSettings.nCols ?? facetCount, facetCount);\n // Use columns/rows count from settings if some of them defined, else make 1 column\n this.columnsCount = facetSettings.nRows ? Math.ceil(facetCount / maxNRows) : maxNCols;\n this.rowsCount = Math.ceil(facetCount / this.columnsCount);\n\n let [minXAll, maxXAll] = [Infinity, -Infinity];\n let maxYAll = -Infinity;\n const histogramExtentsByKeys = facetKeys.reduce((res: Record<string, Record<string, number>>, key) => {\n const histogramData = histogramDataByFacets[key];\n const {minX, maxX, maxCount, maxCountFromGroups} = histogramData;\n minXAll = Math.min(minXAll, minX);\n maxXAll = Math.max(maxXAll, maxX);\n maxYAll = Math.max(maxYAll, groupingStack === 'vertical' ? maxCount : maxCountFromGroups);\n res[key] = {minX, maxX, maxY: groupingStack === 'vertical' ? maxCount : maxCountFromGroups};\n return res;\n }, {});\n\n facetKeys.forEach(key => {\n const scaleX: ChartScales['x'] = xAxis.scale === 'log' ? scaleSymlog() : scaleLinear();\n\n const extents = histogramExtentsByKeys[key];\n const minX = facetSettings.sharedX ? minXAll : extents.minX;\n const maxX = facetSettings.sharedX ? maxXAll : extents.maxX;\n\n (scaleX.domain([minX, maxX]) as ChartScales['x']).range([0, this.chartSizes.chartWidth]);\n this.scales.x[key] = scaleX;\n });\n facetKeys.forEach(key => {\n const scaleY = yAxis.scale === 'log' ? scaleSymlog() : scaleLinear();\n const extents = histogramExtentsByKeys[key];\n\n const minY = 0;\n const maxY = facetSettings.sharedY ? maxYAll : extents.maxY;\n\n const rangeV = [this.chartSizes.chartHeight, 0];\n // supporting scale, it needs to add offsets of fixed size in pixels to general scale Y\n const tempY: ChartScales['y'] = (scaleY.copy().domain([minY, maxY]) as ChartScales['y']).range([\n this.chartSizes.chartHeight,\n size.innerOffset,\n ]) as ChartScales['y'];\n (scaleY.domain([tempY.invert(this.chartSizes.chartHeight), tempY.invert(0)]) as ChartScales['y']).range(\n rangeV\n );\n this.scales.y[key] = scaleY;\n });\n }\n\n updateCaptionsSize(\n xAxis: HistogramSettingsImpl['chartSettings']['xAxis'],\n yAxis: HistogramSettingsImpl['chartSettings']['yAxis']\n ) {\n const textMeasurer = new TextMeasurer('600 14px Arial');\n\n let maxYTick = 0;\n\n function getMaxTickWidth(ticks: string[]) {\n return Math.max(...ticks.map(key => textMeasurer.getTextWidth(key)));\n }\n\n if (!yAxis.hiddenLabels) {\n Object.values(this.scales.y).forEach(scale => {\n const {ticks, format} = getTicksAndFormat(scale as ScaleLogarithmic<number, number>, false);\n maxYTick = Math.max(maxYTick, getMaxTickWidth(ticks.map(format)));\n });\n }\n this.captionsSizes = {\n xAxisCaptionsWidth: xAxis.hiddenLabels ? 0 : 20,\n yAxisCaptionsWidth: maxYTick,\n };\n }\n\n createMainTitle(facetKeys: string[], title: HistogramSettingsImpl['chartSettings']['title']) {\n const firstChart = this.chartsDimensions[facetKeys[0]];\n const lastChart = this.chartsDimensions[facetKeys[facetKeys.length - 1]];\n\n this.mainTitle = splitTextByWidth(\n title.name,\n this.chartSizes.chartsWidth - firstChart.padding.left - lastChart.padding.right,\n 20\n );\n }\n\n createFacetTitles(facetKeys: string[], facetLabels: string[][]) {\n this.facetTitles = facetKeys.reduce((res: Record<string, string[]>, key, idx) => {\n if (facetLabels[idx].length === 1 && facetLabels[idx][0] === 'null') {\n res[key] = [];\n } else {\n res[key] = splitTextByWidth(facetLabels[idx].join(', '), this.chartSizes.chartWidth, 14);\n }\n return res;\n }, {});\n }\n\n updateLegendSize(\n legend: HistogramSettingsImpl['chartSettings']['legend'],\n legendInfo: HistogramLegendInfo,\n grouping: ColumnName | null,\n layers: HistogramLayer[]\n ) {\n if (!legend.show) {\n this.legend = {width: 0, height: 0, items: []};\n return;\n }\n\n const legendItems: LegendItem[] = [];\n const emptySizes = {width:0, height:0, left:0, top: 0};\n\n layers.forEach(layer => {\n if (isInheritedAes(layer.aes.fillColor) && grouping) {\n const columnId = layer.aes.fillColor.value;\n const info = legendInfo[grouping.value];\n const title = grouping.label ?? grouping.value;\n const scale:ScaleOrdinal<string, string> = scaleOrdinal<string, string>()\n .domain(info.values)\n .range(info.values.map(value => info.aesMap[value].fillColor as string));\n legendItems.push({...emptySizes, id: columnId, type: 'discreteColor', title, scale, values: info.values, labels: info.labels});\n }\n });\n\n if (!legendItems.length) {\n this.legend = {width: 0, height: 0, items: []};\n return;\n }\n\n const items = arrangeLegendParts(legendItems, this.chartSizes.chartHeight);\n\n const lastItem = items[items.length - 1];\n const legendWidth = lastItem.left + lastItem.width + LEGEND_OFFSET;\n const legendHeight = this.chartSizes.chartHeight;\n\n this.legend = {\n width: legendWidth,\n height: legendHeight,\n items,\n };\n }\n\n updateMargins(size:HistogramSettingsImpl['chartSettings']['size']) {\n const titleTextHeight = TITLE_LINE_HEIGHT * this.mainTitle.length;\n const titleHeight = titleTextHeight > 0 ? titleTextHeight + TITLE_MARGIN * 2 : 0;\n\n const minMargin = size.outerOffset;\n\n this.margins = {\n top: Math.max(titleHeight, minMargin),\n bottom: minMargin,\n left: minMargin,\n right: this.legend.width + minMargin,\n };\n this.chartSizes.totalWidth = this.margins.left + this.chartSizes.chartsWidth + this.margins.right;\n this.chartSizes.totalHeight = this.margins.top + this.chartSizes.chartsHeight + this.margins.bottom;\n }\n\n render(\n dataFrame: DataFrame,\n settingsId: string,\n chartSettings: HistogramSettingsImpl['chartSettings'],\n facetSettings: HistogramSettingsImpl['facetSettings'],\n facetKeys: string[],\n facetLabels: string[][],\n histogramDataByFacets: Record<string, GroupedHistogramData>,\n legendInfo: HistogramLegendInfo,\n layers: HistogramLayer[],\n inheritedAes: HistogramSettingsImpl['inheritedAes'],\n grouping: ColumnName | null,\n groupingStack: HistogramSettingsImpl['groupingStack'],\n groupingDirection: HistogramSettingsImpl['groupingDirection'],\n onTooltipHintSwitch: (v:boolean) => void,\n ) {\n const {xAxis, yAxis, size, title} = chartSettings;\n this.updateChartSizes(size);\n this.updateViewport(facetKeys, facetSettings, xAxis, yAxis, histogramDataByFacets, size, groupingStack);\n this.updateCaptionsSize(xAxis, yAxis);\n this.createFacetTitles(facetKeys, facetLabels);\n this.updateChartDimensions(facetKeys, facetSettings, xAxis, yAxis);\n this.createMainTitle(facetKeys, title);\n this.updateLegendSize(chartSettings.legend, legendInfo, grouping, layers);\n this.updateMargins(size);\n const minHeight = facetKeys.reduce((v, key) => {\n return Math.min(v, histogramDataByFacets[key].minX);\n }, Infinity);\n const maxHeight = facetKeys.reduce((v, key) => {\n return Math.max(v, histogramDataByFacets[key].maxX);\n }, -Infinity);\n const component = (\n <DataFrameProvider dataFrame={dataFrame}>\n <ChartsGroup\n settingsId={settingsId}\n chartSettings={chartSettings}\n facetKeys={facetKeys}\n facetSettings={facetSettings}\n chartSizes={this.chartSizes}\n chartsDimensions={this.chartsDimensions}\n scales={this.scales}\n columnsCount={this.columnsCount}\n margins={this.margins}\n mainTitle={this.mainTitle}\n facetTitles={this.facetTitles}\n captionsSizes={this.captionsSizes}\n histogramDataByFacets={histogramDataByFacets}\n layers={layers}\n aesColorGetter={createAesGetter(dataFrame, inheritedAes, 'fillColor', [minHeight, maxHeight])}\n groupingDirection={groupingDirection}\n groupingStack={groupingStack}\n groupingLabels={grouping ? legendInfo[grouping.value].labels : {}}\n legend={this.legend}\n onTooltipHintSwitch={onTooltipHintSwitch}\n />\n </DataFrameProvider>\n );\n this.component = component;\n this.reactRoot?.render(component);\n }\n\n renderError(message: string) {\n this.reactRoot?.render(<Error message={message} />);\n }\n}\n\nexport default ChartRenderer;\n"],"names":["getChartEdgeSides","index","facetsCount","columnsCount","rowsCount","chartSides","calculatePaddings","xAxis","yAxis","captionsSizes","currentRowFacetKeys","facetTitles","chartEdgeSides","lastInRow","facetSettings","needLeftAxis","needBottomAxis","needBottomAxisTitle","yCaptions","yTicks","DEFAULT_TICKS_SIZE","TICK_OFFSET","xCaptions","xTicks","xAxisTitle","TITLE_LINE","leftAxisElements","bottomAxisElements","facetTitlesLinesCount","key","MIN_PADDING","FACET_TITLE_OFFSET","FACET_TITLE_LINE","getFacetRows","facetKeys","nRows","nColumns","result","i","getRowColumn","idx","row","column","isInheritedAes","v","isContinuousAes","createAesGetter","dataFrame","aesData","field","defaultDomain","aesItem","height","domain","range","type","scale","getContinuousColorScale","columnId","mapping","_a","DEFAULT_COMMON_AES","ChartRenderer","__publicField","jsx","Fragment","MIN_MARGIN","DEFAULT_WIDTH","DEFAULT_HEIGHT","scaleLinear","node","createRoot","size","chartWidth","chartHeight","currentLeft","currentTop","res","currentRow","currentColumn","padding","outerWidth","outerHeight","chartsWidth","chartsHeight","histogramDataByFacets","groupingStack","facetCount","maxNRows","maxNCols","minXAll","maxXAll","maxYAll","histogramExtentsByKeys","histogramData","minX","maxX","maxCount","maxCountFromGroups","scaleX","scaleSymlog","extents","scaleY","minY","maxY","rangeV","tempY","textMeasurer","TextMeasurer","maxYTick","getMaxTickWidth","ticks","format","getTicksAndFormat","title","firstChart","lastChart","splitTextByWidth","facetLabels","legend","legendInfo","grouping","layers","legendItems","emptySizes","layer","info","scaleOrdinal","value","items","arrangeLegendParts","lastItem","legendWidth","LEGEND_OFFSET","legendHeight","titleTextHeight","TITLE_LINE_HEIGHT","titleHeight","TITLE_MARGIN","minMargin","settingsId","chartSettings","inheritedAes","groupingDirection","onTooltipHintSwitch","minHeight","maxHeight","component","DataFrameProvider","ChartsGroup","message","Error"],"mappings":";;;;;;;;;;;;;;;;;AA6BA,SAASA,GAAkBC,GAAeC,GAAqBC,GAAsBC,GAAmB;AACpG,QAAMC,IAAsD,CAAA;AAC5D,SAAIJ,IAAQE,MAAiBA,IAAe,KACxCE,EAAW,KAAK,OAAO,GAEvBJ,IAAQE,MAAiB,KACzBE,EAAW,KAAK,MAAM,GAEtBJ,IAAQE,KACRE,EAAW,KAAK,KAAK,IAGrB,KAAK,MAAMJ,IAAQ,KAAKE,CAAY,MAAMC,KACzC,KAAK,MAAMH,IAAQ,KAAKE,CAAY,MAAMC,IAAY,KACnDH,IAAQE,KAAgBD,IAAc,KAAKC,MAE/CE,EAAW,KAAK,QAAQ,GAErBA;AACX;AAEA,SAASC,GACLC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACF;AACE,QAAMC,IAAeH,EAAe,SAAS,MAAM,KAAK,EAACE,KAAA,QAAAA,EAAe,UAClEE,IAAiBJ,EAAe,SAAS,QAAQ,KAAK,EAACE,KAAA,QAAAA,EAAe,UACtEG,IAAsBL,EAAe,SAAS,QAAQ,KAAKL,EAAM,UAAU,IAE3EW,IAAYT,EAAc,oBAC1BU,KAAUX,EAAM,YAAYY,IAAqB,MAAMZ,EAAM,eAAe,IAAIa,IAEhFC,IAAYb,EAAc,oBAC1Bc,KAAUhB,EAAM,YAAYa,IAAqB,MAAMb,EAAM,eAAe,IAAIc,IAChFG,IAAaP,IAAsBQ,IAAa,GAEhDC,IAAmBR,IAAYC,GAC/BQ,IAAqBJ,IAASD,IAAYE,GAE1CI,IAAwB,KAAK,IAAI,GAAGlB,EAAoB,IAAI,CAAAmB,MAAOlB,EAAYkB,CAAG,EAAE,MAAM,CAAC;AACjG,SAAO;AAAA,IACH,MAAMd,IAAeW,IAAmBI;AAAAA,IACxC,KAAKF,MAA0B,IAAI,IAAIG,IAAqB,IAAIH,IAAwBI;AAAAA,IACxF,QAAQhB,IAAiBW,IAAqBG;AAAAA,IAC9C,OAAOjB,IAAY,IAAIiB;AAAAA,EAAA;AAE/B;AAGA,SAASG,GAAaC,GAAqBC,GAAeC,GAA8B;AACpF,QAAMC,IAAqB,CAAA;AAC3B,WAASC,IAAI,GAAGA,IAAIH,GAAOG;AACvBD,IAAAA,EAAO,KAAKH,EAAU,MAAMI,IAAIF,GAAUE,IAAIF,IAAWA,CAAQ,CAAC;AAEtE,SAAOC;AACX;AAEA,SAASE,GAAaC,GAAarC,GAAsB;AACrD,QAAMsC,IAAM,KAAK,MAAMD,IAAMrC,CAAY,GACnCuC,IAASF,IAAMC,IAAMtC;AAC3B,SAAO,CAACsC,GAAKC,CAAM;AACvB;AAEA,SAASC,EAAeC,GAA4D;AAChF,SAAO,OAAOA,KAAM,YAAYA,MAAM,QAAQ,UAAUA,KAAK,WAAWA,KAAKA,EAAE,SAAS;AAC5F;AACA,SAASC,GAAgBD,GAAkE;AACvF,SAAO,OAAOA,KAAM,YAAYA,MAAM,QAAQ,WAAWA;AAC7D;AACA,SAASE,GAAgBC,GAAsBC,GAAgDC,GAAsBC,GAAwB;AACzI,SAAO,SAAUC,GAAgEX,GAAeY,GAAe;;AAC3G,QAAIP,GAAgBM,CAAO,GAAG;AAC1B,YAAM,EAAC,QAAAE,IAASH,GAAe,OAAAI,GAAO,MAAAC,IAAO,SAAA,IAAYJ,GACnDK,IAAQC,EAAwBH,GAAmBD,GAAQE,CAAI;AACrE,aAAAC,EAAM,MAAM,EAAI,GACTA,EAAMJ,CAAM;AAAA,IACvB;AACA,QAAIT,EAAeQ,CAAO,GAAG;AACzB,YAAMO,IAAWP,EAAQ,OACnBQ,IAAUX,EAAQU,CAAQ;AAChC,cAAQE,KAAAD,KAAA,OAAA,SAAAA,EAAU,OAAOZ,EAAU,eAAeW,GAAUlB,CAAG,CAAC,CAAA,MAAMqB,MAA9D,gBAAAD,EAAoFX,CAAAA;AAAAA,IAChG;AACA,WAAOE;AAAAA,EACX;AACJ;AAEA,MAAMW,GAAc;AAAA,EAApB,cAAA;AACIC,IAAAA,EAAA,MAAA,aAAyB,IAAA,GACzBA,EAAA,MAAA,cAAiC,IAAA,GACjCA,EAAA,MAAA,YAA+B,IAAA,GAC/BA,EAAA,MAAA,aAA2BC,gBAAAA,EAAAA,IAAAC,EAAAA,UAAA,CAAA,CAAE,CAAA,GAC7BF,EAAA,MAAA,WAAmB;AAAA,MACf,KAAKG;AAAAA,MACL,QAAQA;AAAAA,MACR,MAAMA;AAAAA,MACN,OAAOA;AAAAA,IAAA,CAAA,GAEXH,EAAA,0BAAwD,EAAA,GACxDA,EAAA,MAAA,cAAyB;AAAA,MACrB,YAAYI;AAAAA;AAAAA,MACZ,aAAaC;AAAAA;AAAAA,MACb,aAAaD;AAAAA;AAAAA,MACb,cAAcC;AAAAA;AAAAA,MACd,YAAYD;AAAAA;AAAAA,MACZ,aAAaC;AAAAA;AAAAA,IAAA,CAAA,GAEjBL,EAAA,MAAA,gBAAe,CAAA,GACfA,EAAA,MAAA,aAAY,CAAA,GACZA,EAAA,MAAA,UAAuB;AAAA,MACnB,GAAG,EAAC,MAAMM,EAAAA,EAAc,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE,MAAM,CAAC,GAAGF,CAAa,CAAC,EAAA;AAAA,MAChE,GAAG,EAAC,MAAME,EAAAA,EAAc,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE,MAAM,CAACD,GAAgB,CAAC,CAAC,EAAA;AAAA,IAAA,CAAC,GAEtEL,EAAA,MAAA,iBAA+B;AAAA,MAC3B,oBAAoB;AAAA,MACpB,oBAAoB;AAAA,IAAA,CAAA,GAExBA,EAAA,qBAAwC,EAAA,GACxCA,EAAA,mBAAsB,EAAA,GACtBA,EAAA,MAAA,UAAqB;AAAA,MACjB,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,OAAO,CAAA;AAAA,IAAA,CAAC;AAAA,EAAA;AAAA,EAGZ,QAAQ;;AACA,SAAK,cAAc,KAAK,cACxBH,IAAA,KAAK,eAAL,QAAAA,EAAiB,YAAY,KAAK,QAAA,GAClC,KAAK,aAAa,MAClB,KAAK,WAAW,OAGpB,WAAW,MAAM;;AACb,OAAAA,IAAA,KAAK,cAAL,QAAAA,EAAgB,QAAA,GAChB,KAAK,YAAY;AAAA,IACrB,CAAC;AAAA,EACL;AAAA,EAEA,KAAKU,GAAmB;AAChB,SAAK,eAAe,SACpB,KAAK,aAAaA,GAClB,KAAK,WAAW,SAAS,cAAc,KAAK,GAC5C,KAAK,WAAW,YAAY,KAAK,QAAQ,GACzC,KAAK,YAAYC,EAAW,KAAK,QAAQ;AAAA,EAEjD;AAAA,EAEA,iBAAiBC,GAAsD;AACnE,SAAK,WAAW,aAAaA,EAAK,OAClC,KAAK,WAAW,cAAcA,EAAK;AAAA,EACvC;AAAA,EAEA,sBACItC,GACApB,GACAP,GACAC,GACF;AACE,UAAM,EAAC,YAAAiE,GAAY,aAAAC,EAAAA,IAAe,KAAK;AACvC,QAAIC,IAAc,GACdC,IAAa;AACjB,SAAK,mBAAmB1C,EAAU,OAAO,CAAC2C,GAA0ChD,GAAa5B,MAAU;AACvG,YAAM,CAAC6E,GAAYC,CAAa,IAAIxC,GAAatC,GAAO,KAAK,YAAY,GACnEW,IAAiBZ,GAAkBC,GAAOiC,EAAU,QAAQ,KAAK,cAAc,KAAK,SAAS,GAC7F8C,IAAU1E;AAAAA,QACZC;AAAAA,QACAC;AAAAA,QACA,KAAK;AAAA,QACLyB,GAAaC,GAAW,KAAK,WAAW,KAAK,YAAY,EAAE4C,CAAU;AAAA,QACrE,KAAK;AAAA,QACLlE;AAAAA,QACAmE,MAAkB,KAAK,eAAe;AAAA,QACtCjE;AAAAA,MAAA,GAEEmE,IAAaR,IAAaO,EAAQ,OAAOA,EAAQ,OACjDE,IAAcR,IAAcM,EAAQ,MAAMA,EAAQ;AACxD,aAAAH,EAAIhD,CAAG,IAAI;AAAA,QACP,MAAM8C;AAAAA,QACN,KAAKC;AAAAA,QACL,gBAAAhE;AAAAA,QACA,SAAAoE;AAAAA,QACA,OAAO,EAAC,OAAOP,GAAY,QAAQC,EAAAA;AAAAA,QACnC,OAAO,EAAC,OAAOO,GAAY,QAAQC,EAAAA;AAAAA,MAAA,GAEvCP,KAAeM,GACXF,MAAkB,KAAK,eAAe,MACtCJ,IAAc,GACdC,KAAcM,IAEXL;AAAAA,IACX,GAAG,CAAA,CAAE;AAEL,UAAMM,IAAc,KAAK;AAAA,MACrB,GAAGjD,EAAU,IAAI,CAAAL,MAAO,KAAK,iBAAiBA,CAAG,EAAE,MAAM,QAAQ,KAAK,iBAAiBA,CAAG,EAAE,IAAI;AAAA,IAAA,GAE9FuD,IAAe,KAAK;AAAA,MACtB,GAAGlD,EAAU,IAAI,CAAAL,MAAO,KAAK,iBAAiBA,CAAG,EAAE,MAAM,SAAS,KAAK,iBAAiBA,CAAG,EAAE,GAAG;AAAA,IAAA;AAEpG,SAAK,WAAW,cAAcsD,GAC9B,KAAK,WAAW,eAAeC;AAAAA,EACnC;AAAA,EAEA,eACIlD,GACApB,GACAP,GACAC,GACA6E,GACAb,GACAc,GACF;AACE,UAAMC,IAAarD,EAAU,QACvBsD,IAAW,KAAK,IAAI1E,EAAc,SAASyE,GAAYA,CAAU,GACjEE,IAAW,KAAK,IAAI3E,EAAc,SAASyE,GAAYA,CAAU;AAEvE,SAAK,eAAezE,EAAc,QAAQ,KAAK,KAAKyE,IAAaC,CAAQ,IAAIC,GAC7E,KAAK,YAAY,KAAK,KAAKF,IAAa,KAAK,YAAY;AAEzD,QAAI,CAACG,GAASC,CAAO,IAAI,CAAC,OAAU,MAAS,GACzCC,IAAU;AACd,UAAMC,IAAyB3D,EAAU,OAAO,CAAC2C,GAA6ChD,MAAQ;AAClG,YAAMiE,IAAgBT,EAAsBxD,CAAG,GACzC,EAAC,MAAAkE,GAAM,MAAAC,GAAM,UAAAC,GAAU,oBAAAC,EAAAA,IAAsBJ;AACnD,aAAAJ,IAAU,KAAK,IAAIA,GAASK,CAAI,GAChCJ,IAAU,KAAK,IAAIA,GAASK,CAAI,GAChCJ,IAAU,KAAK,IAAIA,GAASN,MAAkB,aAAaW,IAAWC,CAAkB,GACxFrB,EAAIhD,CAAG,IAAI,EAAC,MAAAkE,GAAM,MAAAC,GAAM,MAAMV,MAAkB,aAAaW,IAAWC,KACjErB;AAAAA,IACX,GAAG,CAAA,CAAE;AAEL3C,MAAU,QAAQ,CAAAL,MAAO;AACrB,YAAMsE,IAA2B5F,EAAM,UAAU,QAAQ6F,MAAgB/B,KAEnEgC,IAAUR,EAAuBhE,CAAG,GACpCkE,IAAOjF,EAAc,UAAU4E,IAAUW,EAAQ,MACjDL,IAAOlF,EAAc,UAAU6E,IAAUU,EAAQ;AAEtDF,QAAO,OAAO,CAACJ,GAAMC,CAAI,CAAC,EAAuB,MAAM,CAAC,GAAG,KAAK,WAAW,UAAU,CAAC,GACvF,KAAK,OAAO,EAAEnE,CAAG,IAAIsE;AAAAA,IACzB,CAAC,GACDjE,EAAU,QAAQ,CAAAL,MAAO;AACrB,YAAMyE,IAAS9F,EAAM,UAAU,QAAQ4F,EAAAA,IAAgB/B,EAAAA,GACjDgC,IAAUR,EAAuBhE,CAAG,GAEpC0E,IAAO,GACPC,IAAO1F,EAAc,UAAU8E,IAAUS,EAAQ,MAEjDI,IAAS,CAAC,KAAK,WAAW,aAAa,CAAC,GAExCC,IAA2BJ,EAAO,KAAA,EAAO,OAAO,CAACC,GAAMC,CAAI,CAAC,EAAuB,MAAM;AAAA,QAC3F,KAAK,WAAW;AAAA,QAChBhC,EAAK;AAAA,MAAA,CACR;AACA8B,QAAO,OAAO,CAACI,EAAM,OAAO,KAAK,WAAW,WAAW,GAAGA,EAAM,OAAO,CAAC,CAAC,CAAC,EAAuB;AAAA,QAC9FD;AAAAA,MAAA,GAEJ,KAAK,OAAO,EAAE5E,CAAG,IAAIyE;AAAAA,IACzB,CAAC;AAAA,EACL;AAAA,EAEA,mBACI/F,GACAC,GACF;AACE,UAAMmG,IAAe,IAAIC,EAAa,gBAAgB;AAEtD,QAAIC,IAAW;AAEf,aAASC,EAAgBC,GAAiB;AACtC,aAAO,KAAK,IAAI,GAAGA,EAAM,IAAI,OAAOJ,EAAa,aAAa9E,CAAG,CAAC,CAAC;AAAA,IACvE;AAEKrB,MAAM,gBACP,OAAO,OAAO,KAAK,OAAO,CAAC,EAAE,QAAQ,CAAAgD,MAAS;AAC1C,YAAM,EAAC,OAAAuD,GAAO,QAAAC,MAAUC,EAAkBzD,GAA2C,EAAK;AAC1FqD,UAAW,KAAK,IAAIA,GAAUC,EAAgBC,EAAM,IAAIC,CAAM,CAAC,CAAC;AAAA,IACpE,CAAC,GAEL,KAAK,gBAAgB;AAAA,MACjB,oBAAoBzG,EAAM,eAAe,IAAI;AAAA,MAC7C,oBAAoBsG;AAAAA,IAAA;AAAA,EAE5B;AAAA,EAEA,gBAAgB3E,GAAqBgF,GAAwD;AACzF,UAAMC,IAAa,KAAK,iBAAiBjF,EAAU,CAAC,CAAC,GAC/CkF,IAAY,KAAK,iBAAiBlF,EAAUA,EAAU,SAAS,CAAC,CAAC;AAEvE,SAAK,YAAYmF;AAAAA,MACbH,EAAM;AAAA,MACN,KAAK,WAAW,cAAcC,EAAW,QAAQ,OAAOC,EAAU,QAAQ;AAAA,MAC1E;AAAA,IAAA;AAAA,EAER;AAAA,EAEA,kBAAkBlF,GAAqBoF,GAAyB;AAC5D,SAAK,cAAcpF,EAAU,OAAO,CAAC2C,GAA+BhD,GAAKW,OACjE8E,EAAY9E,CAAG,EAAE,WAAW,KAAK8E,EAAY9E,CAAG,EAAE,CAAC,MAAM,SACzDqC,EAAIhD,CAAG,IAAI,CAAA,IAEXgD,EAAIhD,CAAG,IAAIwF,EAAiBC,EAAY9E,CAAG,EAAE,KAAK,IAAI,GAAG,KAAK,WAAW,YAAY,EAAE,GAEpFqC,IACR,EAAE;AAAA,EACT;AAAA,EAEA,iBACI0C,GACAC,GACAC,GACAC,GACF;AACE,QAAI,CAACH,EAAO,MAAM;AACd,WAAK,SAAS,EAAC,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAA;AAC3C;AAAA,IACJ;AAEA,UAAMI,IAA4B,CAAA,GAC5BC,IAAa,EAAC,OAAM,GAAG,QAAO,GAAG,MAAK,GAAG,KAAK,EAAA;AAcpD,QAZAF,EAAO,QAAQ,CAAAG,MAAS;AACpB,UAAIlF,EAAekF,EAAM,IAAI,SAAS,KAAKJ,GAAU;AACjD,cAAM/D,IAAWmE,EAAM,IAAI,UAAU,OAC/BC,IAAON,EAAWC,EAAS,KAAK,GAChCP,IAAQO,EAAS,SAASA,EAAS,OACnCjE,IAAqCuE,EAAAA,EACtC,OAAOD,EAAK,MAAM,EAClB,MAAMA,EAAK,OAAO,IAAI,CAAAE,MAASF,EAAK,OAAOE,CAAK,EAAE,SAAmB,CAAC;AAC3EL,QAAAA,EAAY,KAAK,EAAC,GAAGC,GAAY,IAAIlE,GAAU,MAAM,iBAAiB,OAAAwD,GAAO,OAAA1D,GAAO,QAAQsE,EAAK,QAAQ,QAAQA,EAAK,QAAO;AAAA,MACjI;AAAA,IACJ,CAAC,GAEG,CAACH,EAAY,QAAQ;AACrB,WAAK,SAAS,EAAC,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAA;AAC3C;AAAA,IACJ;AAEA,UAAMM,IAAQC,EAAmBP,GAAa,KAAK,WAAW,WAAW,GAEnEQ,IAAWF,EAAMA,EAAM,SAAS,CAAC,GACjCG,IAAcD,EAAS,OAAOA,EAAS,QAAQE,GAC/CC,IAAe,KAAK,WAAW;AAErC,SAAK,SAAS;AAAA,MACV,OAAOF;AAAAA,MACP,QAAQE;AAAAA,MACR,OAAAL;AAAAA,IAAA;AAAA,EAER;AAAA,EAEA,cAAczD,GAAqD;AAC/D,UAAM+D,IAAkBC,IAAoB,KAAK,UAAU,QACrDC,IAAcF,IAAkB,IAAIA,IAAkBG,IAAe,IAAI,GAEzEC,IAAYnE,EAAK;AAEvB,SAAK,UAAU;AAAA,MACX,KAAK,KAAK,IAAIiE,GAAaE,CAAS;AAAA,MACpC,QAAQA;AAAAA,MACR,MAAMA;AAAAA,MACN,OAAO,KAAK,OAAO,QAAQA;AAAAA,IAAA,GAE/B,KAAK,WAAW,aAAa,KAAK,QAAQ,OAAO,KAAK,WAAW,cAAc,KAAK,QAAQ,OAC5F,KAAK,WAAW,cAAc,KAAK,QAAQ,MAAM,KAAK,WAAW,eAAe,KAAK,QAAQ;AAAA,EACjG;AAAA,EAEA,OACI5F,GACA6F,GACAC,GACA/H,GACAoB,GACAoF,GACAjC,GACAmC,GACAE,GACAoB,GACArB,GACAnC,GACAyD,GACAC,GACF;;AACE,UAAM,EAAC,OAAAzI,GAAO,OAAAC,GAAO,MAAAgE,GAAM,OAAA0C,EAAAA,IAAS2B;AACpC,SAAK,iBAAiBrE,CAAI,GAC1B,KAAK,eAAetC,GAAWpB,GAAeP,GAAOC,GAAO6E,GAAuBb,GAAMc,CAAa,GACtG,KAAK,mBAAmB/E,GAAOC,CAAK,GACpC,KAAK,kBAAkB0B,GAAWoF,CAAW,GAC7C,KAAK,sBAAsBpF,GAAWpB,GAAeP,GAAOC,CAAK,GACjE,KAAK,gBAAgB0B,GAAWgF,CAAK,GACrC,KAAK,iBAAiB2B,EAAc,QAAQrB,GAAYC,GAAUC,CAAM,GACxE,KAAK,cAAclD,CAAI;AACvB,UAAMyE,IAAY/G,EAAU,OAAO,CAACU,GAAGf,MAC5B,KAAK,IAAIe,GAAGyC,EAAsBxD,CAAG,EAAE,IAAI,GACnD,KAAQ,GACLqH,IAAYhH,EAAU,OAAO,CAACU,GAAGf,MAC5B,KAAK,IAAIe,GAAGyC,EAAsBxD,CAAG,EAAE,IAAI,GACnD,MAAS,GACNsH,IACFnF,gBAAAA,EAAAA,IAACoF,GAAA,EAAkB,WAAArG,GACf,UAAAiB,gBAAAA,EAAAA;AAAAA,MAACqF;AAAAA,MAAA;AAAA,QACG,YAAAT;AAAAA,QACA,eAAAC;AAAAA,QACA,WAAA3G;AAAAA,QACA,eAAApB;AAAAA,QACA,YAAY,KAAK;AAAA,QACjB,kBAAkB,KAAK;AAAA,QACvB,QAAQ,KAAK;AAAA,QACb,cAAc,KAAK;AAAA,QACnB,SAAS,KAAK;AAAA,QACd,WAAW,KAAK;AAAA,QAChB,aAAa,KAAK;AAAA,QAClB,eAAe,KAAK;AAAA,QACpB,uBAAAuE;AAAAA,QACA,QAAAqC;AAAAA,QACA,gBAAgB5E,GAAgBC,GAAW+F,GAAc,aAAa,CAACG,GAAWC,CAAS,CAAC;AAAA,QAC5F,mBAAAH;AAAAA,QACA,eAAAzD;AAAAA,QACA,gBAAgBmC,IAAWD,EAAWC,EAAS,KAAK,EAAE,SAAS,CAAA;AAAA,QAC/D,QAAQ,KAAK;AAAA,QACb,qBAAAuB;AAAAA,MAAA;AAAA,IAAA,GAER;AAEJ,SAAK,YAAYG,IACjBvF,IAAA,KAAK,cAAL,QAAAA,EAAgB,OAAOuF,CAAAA;AAAAA,EAC3B;AAAA,EAEA,YAAYG,GAAiB;;AACzB,KAAA1F,IAAA,KAAK,cAAL,QAAAA,EAAgB,OAAOI,gBAAAA,EAAAA,IAACuF,GAAA,EAAM,SAAAD,EAAAA,CAAkB,CAAA;AAAA,EACpD;AACJ;","x_google_ignoreList":[0]}
|
package/dist/node_modules/@milaboratories/miplots4/dist/histogram/HistogramSettingsImpl.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HistogramSettingsImpl.js","sources":["../../../../../../node_modules/@milaboratories/miplots4/src/histogram/HistogramSettingsImpl.ts"],"sourcesContent":["import lodash from 'lodash';\nimport { BLACK, DEFAULT_HEIGHT, DEFAULT_HEIGHT_SMALL, DEFAULT_WIDTH, DEFAULT_WIDTH_SMALL } from '../constants';\nimport type {\n ColumnName,\n FrameType,\n HistogramSettings,\n InheritAesHistogram,\n LegendPosition,\n BinsLayer as OuterBinsLayer,\n BinsLineLayer as OuterLineLayer,\n SettingsInterface,\n TitlePosition,\n} from '../types';\nimport { type
|
|
1
|
+
{"version":3,"file":"HistogramSettingsImpl.js","sources":["../../../../../../node_modules/@milaboratories/miplots4/src/histogram/HistogramSettingsImpl.ts"],"sourcesContent":["import lodash from 'lodash';\nimport { BLACK, DEFAULT_HEIGHT, DEFAULT_HEIGHT_SMALL, DEFAULT_WIDTH, DEFAULT_WIDTH_SMALL } from '../constants';\nimport type {\n ColumnName,\n FrameType,\n HistogramSettings,\n InheritAesHistogram,\n LegendPosition,\n BinsLayer as OuterBinsLayer,\n BinsLineLayer as OuterLineLayer,\n SettingsInterface,\n TitlePosition,\n} from '../types';\nimport { type AesRecord, type ContinuousAesHistogram, HistogramSettingsSchema } from '../types';\nimport { exhaustive } from '../utils';\nimport { MIN_MARGIN, PADDINGS } from './constants';\n\nconst DEFAULT_BINS_COUNT = 10;\n\nexport class BinsLayer {\n readonly type = 'bins';\n readonly aes: {\n fillColor: InheritAesHistogram | string | ContinuousAesHistogram;\n lineColor: string,\n opacity: number;\n } = {\n fillColor: 'white',\n lineColor: BLACK,\n opacity: 1,\n };\n\n constructor(layer: OuterBinsLayer) {\n this.aes = {\n ...this.aes,\n ...layer.aes,\n };\n }\n}\n\nexport class BinsLineLayer {\n readonly type = 'binsLine';\n readonly aes: {\n opacity: number;\n } = {\n opacity: 1,\n };\n\n constructor(layer: OuterLineLayer) {\n this.aes = {\n ...this.aes,\n ...layer.aes,\n };\n }\n}\n\nexport type HistogramLayer = BinsLayer;\n\nexport class HistogramSettingsImpl implements SettingsInterface {\n readonly id: string;\n readonly type = 'histogram';\n readonly valueColumn: ColumnName;\n readonly binsCount: number;\n readonly facetSettings: {\n sharedX: boolean;\n sharedY: boolean;\n nRows?: number;\n nCols?: number;\n titlePosition: 'left' | 'center' | 'right';\n };\n readonly facetBy: ColumnName[];\n readonly grouping: ColumnName | null;\n readonly groupingStack: 'vertical' | 'horizontal';\n readonly groupingDirection: 'straight' | 'reverse';\n readonly groupingOrder: string[] | null;\n readonly chartSettings: {\n readonly size: {width: number; height: number, innerOffset: number, outerOffset: number};\n readonly title: {name: string; show: boolean; position: TitlePosition};\n readonly yAxis: {showGrid: boolean; showTicks: boolean; hiddenLabels: boolean; scale: 'linear' | 'log'};\n readonly xAxis: {showGrid: boolean; showTicks: boolean; hiddenLabels: boolean; title: string | ColumnName; scale: 'linear' | 'log'};\n readonly frame: {type: FrameType};\n readonly legend: {show: boolean; position: LegendPosition};\n };\n readonly inheritedAes: Record<string, AesRecord>;\n readonly layers: HistogramLayer[];\n\n constructor(settings: HistogramSettings) {\n HistogramSettingsSchema.parse(settings);\n this.id = lodash.uniqueId('settings');\n this.facetSettings = {sharedX: true, sharedY: true, titlePosition: 'left', ...settings.facetSettings};\n this.valueColumn = settings.valueColumn;\n this.binsCount = settings.binsCount ?? DEFAULT_BINS_COUNT;\n this.facetBy = settings.facetBy ?? [];\n this.grouping = settings.grouping ?? null;\n this.groupingStack = settings.groupingStack ?? 'vertical';\n this.groupingDirection = settings.groupingDirection ?? 'straight';\n this.groupingOrder = settings.groupingOrder ?? null;\n this.chartSettings = {\n size: {\n width: settings?.size?.width ?? (this.facetBy.length ? DEFAULT_WIDTH_SMALL : DEFAULT_WIDTH),\n height: settings?.size?.height ?? (this.facetBy.length ? DEFAULT_HEIGHT_SMALL : DEFAULT_HEIGHT),\n outerOffset: settings?.size?.outerOffset ?? MIN_MARGIN,\n innerOffset: settings?.size?.innerOffset ?? PADDINGS.TOP\n },\n title: {\n position: 'center',\n show: true,\n ...settings.title,\n name: settings.title?.name ?? 'Chart',\n },\n yAxis: {\n showGrid: true,\n showTicks: true,\n scale: settings.xAxis?.scale ?? 'linear',\n hiddenLabels: false,\n ...settings.yAxis,\n },\n xAxis: {\n title: settings.valueColumn.label ?? settings.valueColumn.value ?? '',\n scale: settings.xAxis?.scale ?? 'linear',\n showGrid: settings.xAxis?.showGrid ?? true,\n showTicks: settings.xAxis?.showTicks ?? true,\n hiddenLabels: settings.xAxis?.hiddenLabels ?? false,\n ...settings.xAxis,\n },\n frame: {type: settings.frame?.type ?? 'full'},\n legend: {\n show: true,\n position: 'right',\n ...settings.legend,\n },\n };\n\n this.inheritedAes = settings.inheritedAes ?? {};\n\n this.layers = settings.layers\n .map(layer => {\n if (layer.type === 'bins') {\n return new BinsLayer(layer);\n }\n if (layer.type === 'binsLine') {\n return new BinsLineLayer(layer);\n }\n exhaustive(layer, 'Unknown layer type');\n })\n .filter(Boolean) as HistogramLayer[];\n }\n}\n"],"names":["DEFAULT_BINS_COUNT","BinsLayer","layer","__publicField","BLACK","BinsLineLayer","HistogramSettingsImpl","settings","HistogramSettingsSchema","lodash","_a","DEFAULT_WIDTH_SMALL","DEFAULT_WIDTH","_b","DEFAULT_HEIGHT_SMALL","DEFAULT_HEIGHT","_c","MIN_MARGIN","_d","PADDINGS","_e","_f","_g","_h","_i","_j","_k","exhaustive"],"mappings":"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","x_google_ignoreList":[0]}
|
|
@@ -6,7 +6,7 @@ import { ContinuousGrid as Q } from "../../common/ContinuousGrid.js";
|
|
|
6
6
|
import { Tooltip as V } from "../../common/Tooltip.js";
|
|
7
7
|
import { BLACK as C } from "../../constants.js";
|
|
8
8
|
import { numberFormat as F } from "../../utils/numberFormat.js";
|
|
9
|
-
import { DEFAULT_TICKS_SIZE as I, FACET_TITLE_LINE as
|
|
9
|
+
import { DEFAULT_TICKS_SIZE as I, FACET_TITLE_LINE as D, TITLE_LINE as $ } from "../constants.js";
|
|
10
10
|
function tt(t) {
|
|
11
11
|
return typeof t == "string" ? t : t.value;
|
|
12
12
|
}
|
|
@@ -29,35 +29,35 @@ function gt({
|
|
|
29
29
|
height: l,
|
|
30
30
|
dimensions: i,
|
|
31
31
|
scales: o,
|
|
32
|
-
xAxis:
|
|
32
|
+
xAxis: h,
|
|
33
33
|
yAxis: y,
|
|
34
|
-
frameType:
|
|
34
|
+
frameType: E,
|
|
35
35
|
histogramData: b,
|
|
36
36
|
facetSettings: g,
|
|
37
37
|
captionsSizes: it,
|
|
38
38
|
facetTitle: j,
|
|
39
39
|
layers: B,
|
|
40
|
-
aesColorGetter:
|
|
41
|
-
groupingDirection:
|
|
42
|
-
groupingStack:
|
|
43
|
-
groupingLabels:
|
|
40
|
+
aesColorGetter: _,
|
|
41
|
+
groupingDirection: A,
|
|
42
|
+
groupingStack: d,
|
|
43
|
+
groupingLabels: G,
|
|
44
44
|
chartSizes: p,
|
|
45
45
|
margins: f,
|
|
46
46
|
tooltipsContainer: M,
|
|
47
47
|
tooltipsData: s
|
|
48
48
|
}) {
|
|
49
|
-
const [L, W] = P.useState(), { padding: a } = i, X =
|
|
49
|
+
const [L, W] = P.useState(), { padding: a } = i, X = h.showTicks ? I : 0, H = y.showTicks ? I : 0, N = i.chartEdgeSides.includes("left") || !(g != null && g.sharedY), Y = i.chartEdgeSides.includes("bottom") || !(g != null && g.sharedX), O = i.chartEdgeSides.includes("bottom"), S = b.groupingKeys, U = b.histogramByGroupingKey[S[0]].bins[0], v = o.x(U.width) - o.x(0), x = d === "vertical" ? v : v / S.length, Z = {
|
|
50
50
|
left: f.left + i.left + a.left,
|
|
51
51
|
right: p.totalWidth - (f.left + i.left + a.left),
|
|
52
52
|
top: f.top + i.top + a.top,
|
|
53
53
|
bottom: p.totalHeight - (f.top + i.top + a.top)
|
|
54
|
-
}, q = L && s.fixed,
|
|
54
|
+
}, q = L && s.fixed, u = !1;
|
|
55
55
|
return /* @__PURE__ */ e.jsxs("g", { transform: `translate(${i.left + a.left},${i.top + a.top})`, children: [
|
|
56
|
-
|
|
56
|
+
u,
|
|
57
57
|
j.length && /* @__PURE__ */ e.jsxs("g", { children: [
|
|
58
|
-
|
|
58
|
+
E === "full" && /* @__PURE__ */ e.jsx("rect", { x: "0", y: -a.top, height: a.top, width: n, fill: "#F7F8FA", stroke: C }),
|
|
59
59
|
j.map((c, m) => {
|
|
60
|
-
const T = j.length, r = (a.top -
|
|
60
|
+
const T = j.length, r = (a.top - D * T) / 2;
|
|
61
61
|
return /* @__PURE__ */ e.jsx(
|
|
62
62
|
"text",
|
|
63
63
|
{
|
|
@@ -65,8 +65,8 @@ function gt({
|
|
|
65
65
|
fontWeight: "500",
|
|
66
66
|
fill: C,
|
|
67
67
|
x: n / 2,
|
|
68
|
-
dy: r +
|
|
69
|
-
y: m *
|
|
68
|
+
dy: r + D / 2 - a.top,
|
|
69
|
+
y: m * D,
|
|
70
70
|
textAnchor: "middle",
|
|
71
71
|
dominantBaseline: "central",
|
|
72
72
|
children: c
|
|
@@ -76,8 +76,8 @@ function gt({
|
|
|
76
76
|
})
|
|
77
77
|
] }),
|
|
78
78
|
/* @__PURE__ */ e.jsxs("g", { dominantBaseline: "central", textAnchor: "middle", fontWeight: "500", fontSize: "14px", fill: C, children: [
|
|
79
|
-
O &&
|
|
80
|
-
|
|
79
|
+
O && h.title && /* @__PURE__ */ e.jsx("text", { x: n / 2, y: l + a.bottom - $ / 2, children: tt(h.title) }),
|
|
80
|
+
u
|
|
81
81
|
] }),
|
|
82
82
|
/* @__PURE__ */ e.jsx(
|
|
83
83
|
Q,
|
|
@@ -86,29 +86,29 @@ function gt({
|
|
|
86
86
|
height: l,
|
|
87
87
|
scaleX: o.x,
|
|
88
88
|
scaleY: o.y,
|
|
89
|
-
axisX:
|
|
89
|
+
axisX: h,
|
|
90
90
|
axisY: y,
|
|
91
|
-
frameType:
|
|
91
|
+
frameType: E
|
|
92
92
|
}
|
|
93
93
|
),
|
|
94
94
|
Y && /* @__PURE__ */ e.jsxs("g", { transform: `translate(0,${l})`, children: [
|
|
95
|
-
/* @__PURE__ */ e.jsx(K, { scale: o.x, orient: "bottom", tickSize: X, hiddenLabels:
|
|
96
|
-
|
|
95
|
+
/* @__PURE__ */ e.jsx(K, { scale: o.x, orient: "bottom", tickSize: X, hiddenLabels: h.hiddenLabels }),
|
|
96
|
+
u
|
|
97
97
|
] }),
|
|
98
98
|
N && /* @__PURE__ */ e.jsxs("g", { children: [
|
|
99
99
|
/* @__PURE__ */ e.jsx(K, { scale: o.y, orient: "left", tickSize: H, hiddenLabels: y.hiddenLabels }),
|
|
100
|
-
|
|
100
|
+
u
|
|
101
101
|
] }),
|
|
102
102
|
B.map((c) => S.map(
|
|
103
103
|
(m, T) => b.histogramByGroupingKey[m].bins.map((r) => {
|
|
104
|
-
const J = q && s.selectedData === r,
|
|
104
|
+
const J = q && s.selectedData === r, w = /* @__PURE__ */ e.jsx(
|
|
105
105
|
"rect",
|
|
106
106
|
{
|
|
107
|
-
x: k(o.x(r.x),
|
|
108
|
-
y: z(r, o.y,
|
|
109
|
-
fill: r.
|
|
107
|
+
x: k(o.x(r.x), d, T, x),
|
|
108
|
+
y: z(r, o.y, d, A),
|
|
109
|
+
fill: r.indexes.length > 0 ? _(c.aes.fillColor, r.indexes[0], r.count) : "",
|
|
110
110
|
stroke: c.aes.lineColor,
|
|
111
|
-
width:
|
|
111
|
+
width: x,
|
|
112
112
|
height: o.y(0) - o.y(r.count),
|
|
113
113
|
opacity: c.aes.opacity ?? 1,
|
|
114
114
|
onMouseOver: () => s.onMouseEnter(r, t),
|
|
@@ -116,7 +116,7 @@ function gt({
|
|
|
116
116
|
},
|
|
117
117
|
r.x
|
|
118
118
|
);
|
|
119
|
-
return J ? R.createPortal(
|
|
119
|
+
return J ? R.createPortal(w, L) : w;
|
|
120
120
|
})
|
|
121
121
|
)),
|
|
122
122
|
s.fixed && /* @__PURE__ */ e.jsx("rect", { width: p.chartWidth, height: p.chartHeight, fill: "rgba(255,255,255,0.8)" }),
|
|
@@ -131,9 +131,9 @@ function gt({
|
|
|
131
131
|
s.selectedData && s.currentFacet === t && /* @__PURE__ */ e.jsx(
|
|
132
132
|
V,
|
|
133
133
|
{
|
|
134
|
-
content: et(s.selectedData,
|
|
135
|
-
x: k(o.x(s.selectedData.x),
|
|
136
|
-
y: z(s.selectedData, o.y,
|
|
134
|
+
content: et(s.selectedData, G),
|
|
135
|
+
x: k(o.x(s.selectedData.x), d, s.selectedData.groupingKeyIdx, x) + x,
|
|
136
|
+
y: z(s.selectedData, o.y, d, A) + o.y(0) - o.y(s.selectedData.count / 2),
|
|
137
137
|
offset: 0,
|
|
138
138
|
active: !0,
|
|
139
139
|
fixed: s.fixed,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Chart.js","sources":["../../../../../../../node_modules/@milaboratories/miplots4/src/histogram/components/Chart.tsx"],"sourcesContent":["import { useState } from 'react';\nimport { createPortal } from 'react-dom';\nimport { ContinuousAxis } from '../../common/ContinuousAxis';\nimport { ContinuousGrid } from '../../common/ContinuousGrid';\nimport type { TooltipsData } from '../../common/Tooltip';\nimport { Tooltip } from '../../common/Tooltip';\nimport { BLACK } from '../../constants';\nimport type { ColumnName, FrameType } from '../../types';\nimport { numberFormat } from '../../utils/numberFormat';\nimport { DEFAULT_TICKS_SIZE, FACET_TITLE_LINE, TICK_OFFSET, TITLE_LINE } from '../constants';\nimport type { BinData, GroupedHistogramData } from '../getHistogramData';\nimport type { HistogramLayer, HistogramSettingsImpl } from '../HistogramSettingsImpl';\nimport type {\n AesGetter, CaptionsSizes,\n ChartDimensionsData,\n ChartScales,\n ChartSizes,\n Margins\n} from './types';\n\nfunction getAxisTitle(title: string | ColumnName): string {\n if (typeof title === 'string') {\n return title;\n }\n return title.value;\n}\nfunction getTooltipContent(bin: BinData, groupingLabels:Record<string, string>) {\n const lines = [\n `Amount: ${bin.count}`,\n `(from ${numberFormat(bin.x)}, to ${numberFormat(bin.x + bin.width)})`\n ];\n if (bin.groupingKey !== 'null') {\n lines.push(`${groupingLabels[bin.groupingKey] ?? bin.groupingKey}`);\n }\n return lines;\n}\n\nfunction getBinX(xPx:number, groupingStack: HistogramSettingsImpl['groupingStack'], keyIdx:number, width:number) {\n return groupingStack === 'vertical'\n ? xPx\n : xPx + keyIdx * width;\n}\nfunction getBinY(bin:BinData, scaleY:ChartScales['y'], groupingStack: HistogramSettingsImpl['groupingStack'], groupingDirection: HistogramSettingsImpl['groupingDirection']) {\n return groupingStack === 'vertical'\n ? scaleY(groupingDirection === 'straight' ? bin.y.straight : bin.y.reverse)\n : scaleY(bin.count);\n}\ninterface ChartProps {\n facetKey: string;\n width: number;\n height: number;\n dimensions: ChartDimensionsData;\n scales: ChartScales;\n xAxis: HistogramSettingsImpl['chartSettings']['xAxis'];\n yAxis: HistogramSettingsImpl['chartSettings']['yAxis'];\n frameType: FrameType;\n facetSettings: HistogramSettingsImpl['facetSettings'];\n margins: Margins;\n chartSizes: ChartSizes;\n captionsSizes: CaptionsSizes;\n facetTitle: string[];\n histogramData: GroupedHistogramData;\n layers: HistogramLayer[];\n aesColorGetter: AesGetter;\n groupingDirection: HistogramSettingsImpl['groupingDirection'];\n groupingStack: HistogramSettingsImpl['groupingStack'];\n groupingLabels: Record<string, string>;\n tooltipsContainer?: Element;\n tooltipsData: TooltipsData<BinData>;\n}\n\nexport function Chart({\n facetKey,\n width,\n height,\n dimensions,\n scales,\n xAxis,\n yAxis,\n frameType,\n histogramData,\n facetSettings,\n captionsSizes,\n facetTitle,\n layers,\n aesColorGetter,\n groupingDirection,\n groupingStack,\n groupingLabels,\n chartSizes,\n margins,\n tooltipsContainer,\n tooltipsData\n}: ChartProps) {\n const [activeElementContainer, setActiveElementContainer] = useState<SVGGElement>();\n\n const {padding} = dimensions;\n const tickSizeX = xAxis.showTicks ? DEFAULT_TICKS_SIZE : 0;\n const tickSizeY = yAxis.showTicks ? DEFAULT_TICKS_SIZE : 0;\n const needLeftAxis = dimensions.chartEdgeSides.includes('left') || !facetSettings?.sharedY;\n const needBottomAxis = dimensions.chartEdgeSides.includes('bottom') || !facetSettings?.sharedX;\n const needBottomAxisTitle = dimensions.chartEdgeSides.includes('bottom');\n const groupingKeys = histogramData.groupingKeys;\n\n const firstBin = histogramData.histogramByGroupingKey[groupingKeys[0]].bins[0];\n const binWidth = scales.x(firstBin.width) - scales.x(0);\n const partialBinWidth = groupingStack === 'vertical' ? binWidth : binWidth / groupingKeys.length;\n\n const sideDistances = {\n left: margins.left + dimensions.left + padding.left,\n right: chartSizes.totalWidth - (margins.left + dimensions.left + padding.left),\n top: margins.top + dimensions.top + padding.top,\n bottom: chartSizes.totalHeight - (margins.top + dimensions.top + padding.top),\n };\n\n const dimmedBackground = activeElementContainer && tooltipsData.fixed;\n const debug = false;\n return (\n <g transform={`translate(${dimensions.left + padding.left},${dimensions.top + padding.top})`}>\n {debug && (\n <g fill=\"none\" stroke=\"green\" strokeWidth=\"2px\">\n <rect width={width} height={padding.top} x={0} y={-padding.top} />\n <rect width={width} height={padding.bottom} x={0} y={height} />\n <rect width={padding.left} height={height} x={-padding.left} y={0} />\n <rect width={padding.right} height={height} x={width} y={0} />\n </g>\n )}\n {facetTitle.length && (\n <g>\n {frameType === 'full' && (\n <rect x=\"0\" y={-padding.top} height={padding.top} width={width} fill=\"#F7F8FA\" stroke={BLACK} />\n )}\n {facetTitle.map((titleLine, idx) => {\n const linesCount = facetTitle.length;\n const topOffset = (padding.top - FACET_TITLE_LINE * linesCount) / 2;\n return (\n <text\n key={idx}\n fontSize=\"14px\"\n fontWeight=\"500\"\n fill={BLACK}\n x={width / 2}\n dy={topOffset + FACET_TITLE_LINE / 2 - padding.top}\n y={idx * FACET_TITLE_LINE}\n textAnchor=\"middle\"\n dominantBaseline=\"central\"\n >\n {titleLine}\n </text>\n );\n })}\n </g>\n )}\n <g dominantBaseline=\"central\" textAnchor=\"middle\" fontWeight=\"500\" fontSize=\"14px\" fill={BLACK}>\n {needBottomAxisTitle && xAxis.title && (\n <text x={width / 2} y={height + padding.bottom - TITLE_LINE / 2}>\n {getAxisTitle(xAxis.title)}\n </text>\n )}\n {debug && needBottomAxisTitle && (\n <rect\n x=\"0\"\n y={height + padding.bottom - TITLE_LINE}\n width={width}\n height={TITLE_LINE}\n fill=\"none\"\n stroke=\"black\"\n />\n )}\n </g>\n <ContinuousGrid\n width={width}\n height={height}\n scaleX={scales.x}\n scaleY={scales.y}\n axisX={xAxis}\n axisY={yAxis}\n frameType={frameType}\n />\n {needBottomAxis && (\n <g transform={`translate(0,${height})`}>\n <ContinuousAxis scale={scales.x} orient=\"bottom\" tickSize={tickSizeX} hiddenLabels={xAxis.hiddenLabels} />\n {debug && (\n <rect\n x=\"0\"\n y={tickSizeX + TICK_OFFSET}\n width={width}\n height={TITLE_LINE}\n fill=\"none\"\n stroke=\"black\"\n />\n )}\n </g>\n )}\n {needLeftAxis && (\n <g>\n <ContinuousAxis scale={scales.y} orient=\"left\" tickSize={tickSizeY} hiddenLabels={yAxis.hiddenLabels} />\n {debug && (\n <rect\n x={-tickSizeY - TICK_OFFSET - captionsSizes.yAxisCaptionsWidth}\n y=\"0\"\n width={captionsSizes.yAxisCaptionsWidth}\n height={height}\n fill=\"none\"\n stroke=\"black\"\n />\n )}\n </g>\n )}\n {layers.map(layer => groupingKeys.map((groupingKey, keyIdx) =>\n histogramData.histogramByGroupingKey[groupingKey].bins.map((bin) => {\n const highlighted = dimmedBackground && tooltipsData.selectedData === bin;\n const binElement = (\n <rect\n key={bin.x}\n x={getBinX(scales.x(bin.x), groupingStack, keyIdx, partialBinWidth)}\n y={getBinY(bin, scales.y, groupingStack, groupingDirection)}\n fill={bin.rows[0] ? aesColorGetter(layer.aes.fillColor, bin.rows[0], bin.count) : ''}\n stroke={layer.aes.lineColor}\n width={partialBinWidth}\n height={scales.y(0) - scales.y(bin.count)}\n opacity={layer.aes.opacity ?? 1}\n onMouseOver={() => tooltipsData.onMouseEnter(bin, facetKey)}\n onMouseLeave={() => tooltipsData.onMouseLeave()}\n />\n );\n return highlighted ? createPortal(binElement, activeElementContainer) : binElement;\n })\n ))}\n {tooltipsData.fixed && <rect width={chartSizes.chartWidth} height={chartSizes.chartHeight} fill=\"rgba(255,255,255,0.8)\"/>}\n <g ref={node => {\n if (node && !activeElementContainer) {\n setActiveElementContainer(node);\n }\n }}\n />\n {tooltipsData.selectedData && tooltipsData.currentFacet === facetKey && (\n <Tooltip\n content={getTooltipContent(tooltipsData.selectedData, groupingLabels)}\n x={getBinX(scales.x(tooltipsData.selectedData.x), groupingStack, tooltipsData.selectedData.groupingKeyIdx, partialBinWidth) + partialBinWidth}\n y={getBinY(tooltipsData.selectedData, scales.y, groupingStack, groupingDirection) + scales.y(0) - scales.y(tooltipsData.selectedData.count / 2)}\n offset={0}\n active\n fixed={tooltipsData.fixed}\n sideDistances={sideDistances}\n container={tooltipsContainer}\n onClose={tooltipsData.onClose}\n />\n )}\n </g>\n );\n}\n"],"names":["getAxisTitle","title","getTooltipContent","bin","groupingLabels","lines","numberFormat","getBinX","xPx","groupingStack","keyIdx","width","getBinY","scaleY","groupingDirection","Chart","facetKey","height","dimensions","scales","xAxis","yAxis","frameType","histogramData","facetSettings","captionsSizes","facetTitle","layers","aesColorGetter","chartSizes","margins","tooltipsContainer","tooltipsData","activeElementContainer","setActiveElementContainer","useState","padding","tickSizeX","DEFAULT_TICKS_SIZE","tickSizeY","needLeftAxis","needBottomAxis","needBottomAxisTitle","groupingKeys","firstBin","binWidth","partialBinWidth","sideDistances","dimmedBackground","debug","jsxs","jsx","BLACK","titleLine","idx","linesCount","topOffset","FACET_TITLE_LINE","TITLE_LINE","ContinuousGrid","ContinuousAxis","layer","groupingKey","highlighted","binElement","createPortal","node","Tooltip"],"mappings":"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","x_google_ignoreList":[0]}
|
|
1
|
+
{"version":3,"file":"Chart.js","sources":["../../../../../../../node_modules/@milaboratories/miplots4/src/histogram/components/Chart.tsx"],"sourcesContent":["import { useState } from 'react';\nimport { createPortal } from 'react-dom';\nimport { ContinuousAxis } from '../../common/ContinuousAxis';\nimport { ContinuousGrid } from '../../common/ContinuousGrid';\nimport type { TooltipsData } from '../../common/Tooltip';\nimport { Tooltip } from '../../common/Tooltip';\nimport { BLACK } from '../../constants';\nimport type { ColumnName, FrameType } from '../../types';\nimport { numberFormat } from '../../utils/numberFormat';\nimport { DEFAULT_TICKS_SIZE, FACET_TITLE_LINE, TICK_OFFSET, TITLE_LINE } from '../constants';\nimport type { BinData, GroupedHistogramData } from '../getHistogramData';\nimport type { HistogramLayer, HistogramSettingsImpl } from '../HistogramSettingsImpl';\nimport type {\n AesGetter, CaptionsSizes,\n ChartDimensionsData,\n ChartScales,\n ChartSizes,\n Margins\n} from './types';\n\nfunction getAxisTitle(title: string | ColumnName): string {\n if (typeof title === 'string') {\n return title;\n }\n return title.value;\n}\nfunction getTooltipContent(bin: BinData, groupingLabels:Record<string, string>) {\n const lines = [\n `Amount: ${bin.count}`,\n `(from ${numberFormat(bin.x)}, to ${numberFormat(bin.x + bin.width)})`\n ];\n if (bin.groupingKey !== 'null') {\n lines.push(`${groupingLabels[bin.groupingKey] ?? bin.groupingKey}`);\n }\n return lines;\n}\n\nfunction getBinX(xPx:number, groupingStack: HistogramSettingsImpl['groupingStack'], keyIdx:number, width:number) {\n return groupingStack === 'vertical'\n ? xPx\n : xPx + keyIdx * width;\n}\nfunction getBinY(bin:BinData, scaleY:ChartScales['y'], groupingStack: HistogramSettingsImpl['groupingStack'], groupingDirection: HistogramSettingsImpl['groupingDirection']) {\n return groupingStack === 'vertical'\n ? scaleY(groupingDirection === 'straight' ? bin.y.straight : bin.y.reverse)\n : scaleY(bin.count);\n}\ninterface ChartProps {\n facetKey: string;\n width: number;\n height: number;\n dimensions: ChartDimensionsData;\n scales: ChartScales;\n xAxis: HistogramSettingsImpl['chartSettings']['xAxis'];\n yAxis: HistogramSettingsImpl['chartSettings']['yAxis'];\n frameType: FrameType;\n facetSettings: HistogramSettingsImpl['facetSettings'];\n margins: Margins;\n chartSizes: ChartSizes;\n captionsSizes: CaptionsSizes;\n facetTitle: string[];\n histogramData: GroupedHistogramData;\n layers: HistogramLayer[];\n aesColorGetter: AesGetter;\n groupingDirection: HistogramSettingsImpl['groupingDirection'];\n groupingStack: HistogramSettingsImpl['groupingStack'];\n groupingLabels: Record<string, string>;\n tooltipsContainer?: Element;\n tooltipsData: TooltipsData<BinData>;\n}\n\nexport function Chart({\n facetKey,\n width,\n height,\n dimensions,\n scales,\n xAxis,\n yAxis,\n frameType,\n histogramData,\n facetSettings,\n captionsSizes,\n facetTitle,\n layers,\n aesColorGetter,\n groupingDirection,\n groupingStack,\n groupingLabels,\n chartSizes,\n margins,\n tooltipsContainer,\n tooltipsData\n}: ChartProps) {\n const [activeElementContainer, setActiveElementContainer] = useState<SVGGElement>();\n\n const {padding} = dimensions;\n const tickSizeX = xAxis.showTicks ? DEFAULT_TICKS_SIZE : 0;\n const tickSizeY = yAxis.showTicks ? DEFAULT_TICKS_SIZE : 0;\n const needLeftAxis = dimensions.chartEdgeSides.includes('left') || !facetSettings?.sharedY;\n const needBottomAxis = dimensions.chartEdgeSides.includes('bottom') || !facetSettings?.sharedX;\n const needBottomAxisTitle = dimensions.chartEdgeSides.includes('bottom');\n const groupingKeys = histogramData.groupingKeys;\n\n const firstBin = histogramData.histogramByGroupingKey[groupingKeys[0]].bins[0];\n const binWidth = scales.x(firstBin.width) - scales.x(0);\n const partialBinWidth = groupingStack === 'vertical' ? binWidth : binWidth / groupingKeys.length;\n\n const sideDistances = {\n left: margins.left + dimensions.left + padding.left,\n right: chartSizes.totalWidth - (margins.left + dimensions.left + padding.left),\n top: margins.top + dimensions.top + padding.top,\n bottom: chartSizes.totalHeight - (margins.top + dimensions.top + padding.top),\n };\n\n const dimmedBackground = activeElementContainer && tooltipsData.fixed;\n const debug = false;\n return (\n <g transform={`translate(${dimensions.left + padding.left},${dimensions.top + padding.top})`}>\n {debug && (\n <g fill=\"none\" stroke=\"green\" strokeWidth=\"2px\">\n <rect width={width} height={padding.top} x={0} y={-padding.top} />\n <rect width={width} height={padding.bottom} x={0} y={height} />\n <rect width={padding.left} height={height} x={-padding.left} y={0} />\n <rect width={padding.right} height={height} x={width} y={0} />\n </g>\n )}\n {facetTitle.length && (\n <g>\n {frameType === 'full' && (\n <rect x=\"0\" y={-padding.top} height={padding.top} width={width} fill=\"#F7F8FA\" stroke={BLACK} />\n )}\n {facetTitle.map((titleLine, idx) => {\n const linesCount = facetTitle.length;\n const topOffset = (padding.top - FACET_TITLE_LINE * linesCount) / 2;\n return (\n <text\n key={idx}\n fontSize=\"14px\"\n fontWeight=\"500\"\n fill={BLACK}\n x={width / 2}\n dy={topOffset + FACET_TITLE_LINE / 2 - padding.top}\n y={idx * FACET_TITLE_LINE}\n textAnchor=\"middle\"\n dominantBaseline=\"central\"\n >\n {titleLine}\n </text>\n );\n })}\n </g>\n )}\n <g dominantBaseline=\"central\" textAnchor=\"middle\" fontWeight=\"500\" fontSize=\"14px\" fill={BLACK}>\n {needBottomAxisTitle && xAxis.title && (\n <text x={width / 2} y={height + padding.bottom - TITLE_LINE / 2}>\n {getAxisTitle(xAxis.title)}\n </text>\n )}\n {debug && needBottomAxisTitle && (\n <rect\n x=\"0\"\n y={height + padding.bottom - TITLE_LINE}\n width={width}\n height={TITLE_LINE}\n fill=\"none\"\n stroke=\"black\"\n />\n )}\n </g>\n <ContinuousGrid\n width={width}\n height={height}\n scaleX={scales.x}\n scaleY={scales.y}\n axisX={xAxis}\n axisY={yAxis}\n frameType={frameType}\n />\n {needBottomAxis && (\n <g transform={`translate(0,${height})`}>\n <ContinuousAxis scale={scales.x} orient=\"bottom\" tickSize={tickSizeX} hiddenLabels={xAxis.hiddenLabels} />\n {debug && (\n <rect\n x=\"0\"\n y={tickSizeX + TICK_OFFSET}\n width={width}\n height={TITLE_LINE}\n fill=\"none\"\n stroke=\"black\"\n />\n )}\n </g>\n )}\n {needLeftAxis && (\n <g>\n <ContinuousAxis scale={scales.y} orient=\"left\" tickSize={tickSizeY} hiddenLabels={yAxis.hiddenLabels} />\n {debug && (\n <rect\n x={-tickSizeY - TICK_OFFSET - captionsSizes.yAxisCaptionsWidth}\n y=\"0\"\n width={captionsSizes.yAxisCaptionsWidth}\n height={height}\n fill=\"none\"\n stroke=\"black\"\n />\n )}\n </g>\n )}\n {layers.map(layer => groupingKeys.map((groupingKey, keyIdx) =>\n histogramData.histogramByGroupingKey[groupingKey].bins.map((bin) => {\n const highlighted = dimmedBackground && tooltipsData.selectedData === bin;\n const binElement = (\n <rect\n key={bin.x}\n x={getBinX(scales.x(bin.x), groupingStack, keyIdx, partialBinWidth)}\n y={getBinY(bin, scales.y, groupingStack, groupingDirection)}\n fill={bin.indexes.length > 0 ? aesColorGetter(layer.aes.fillColor, bin.indexes[0], bin.count) : ''}\n stroke={layer.aes.lineColor}\n width={partialBinWidth}\n height={scales.y(0) - scales.y(bin.count)}\n opacity={layer.aes.opacity ?? 1}\n onMouseOver={() => tooltipsData.onMouseEnter(bin, facetKey)}\n onMouseLeave={() => tooltipsData.onMouseLeave()}\n />\n );\n return highlighted ? createPortal(binElement, activeElementContainer) : binElement;\n })\n ))}\n {tooltipsData.fixed && <rect width={chartSizes.chartWidth} height={chartSizes.chartHeight} fill=\"rgba(255,255,255,0.8)\"/>}\n <g ref={node => {\n if (node && !activeElementContainer) {\n setActiveElementContainer(node);\n }\n }}\n />\n {tooltipsData.selectedData && tooltipsData.currentFacet === facetKey && (\n <Tooltip\n content={getTooltipContent(tooltipsData.selectedData, groupingLabels)}\n x={getBinX(scales.x(tooltipsData.selectedData.x), groupingStack, tooltipsData.selectedData.groupingKeyIdx, partialBinWidth) + partialBinWidth}\n y={getBinY(tooltipsData.selectedData, scales.y, groupingStack, groupingDirection) + scales.y(0) - scales.y(tooltipsData.selectedData.count / 2)}\n offset={0}\n active\n fixed={tooltipsData.fixed}\n sideDistances={sideDistances}\n container={tooltipsContainer}\n onClose={tooltipsData.onClose}\n />\n )}\n </g>\n );\n}\n"],"names":["getAxisTitle","title","getTooltipContent","bin","groupingLabels","lines","numberFormat","getBinX","xPx","groupingStack","keyIdx","width","getBinY","scaleY","groupingDirection","Chart","facetKey","height","dimensions","scales","xAxis","yAxis","frameType","histogramData","facetSettings","captionsSizes","facetTitle","layers","aesColorGetter","chartSizes","margins","tooltipsContainer","tooltipsData","activeElementContainer","setActiveElementContainer","useState","padding","tickSizeX","DEFAULT_TICKS_SIZE","tickSizeY","needLeftAxis","needBottomAxis","needBottomAxisTitle","groupingKeys","firstBin","binWidth","partialBinWidth","sideDistances","dimmedBackground","debug","jsxs","jsx","BLACK","titleLine","idx","linesCount","topOffset","FACET_TITLE_LINE","TITLE_LINE","ContinuousGrid","ContinuousAxis","layer","groupingKey","highlighted","binElement","createPortal","node","Tooltip"],"mappings":"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","x_google_ignoreList":[0]}
|
|
@@ -15,7 +15,7 @@ function X({
|
|
|
15
15
|
columnsCount: m,
|
|
16
16
|
facetKeys: o,
|
|
17
17
|
facetSettings: d,
|
|
18
|
-
scales:
|
|
18
|
+
scales: l,
|
|
19
19
|
margins: i,
|
|
20
20
|
mainTitle: f,
|
|
21
21
|
facetTitles: u,
|
|
@@ -29,11 +29,11 @@ function X({
|
|
|
29
29
|
legend: C,
|
|
30
30
|
onTooltipHintSwitch: W
|
|
31
31
|
}) {
|
|
32
|
-
const $ = I(W), { xAxis: A, yAxis: E, title:
|
|
32
|
+
const $ = I(W), { xAxis: A, yAxis: E, title: g, frame: F } = p, h = a[o[0]].padding, G = a[o[m - 1]].padding, [H, L] = n.useState(), r = n.useRef(null);
|
|
33
33
|
n.useEffect(() => {
|
|
34
34
|
r.current && L(r.current);
|
|
35
35
|
}, []);
|
|
36
|
-
const v = i.left + t.chartsWidth + K, z = i.top +
|
|
36
|
+
const v = i.left + t.chartsWidth + K, z = i.top + h.top;
|
|
37
37
|
return /* @__PURE__ */ e.jsx(R, { dataId: c, children: /* @__PURE__ */ e.jsxs(
|
|
38
38
|
"svg",
|
|
39
39
|
{
|
|
@@ -48,9 +48,9 @@ function X({
|
|
|
48
48
|
B,
|
|
49
49
|
{
|
|
50
50
|
title: f,
|
|
51
|
-
show:
|
|
52
|
-
position:
|
|
53
|
-
leftPadding:
|
|
51
|
+
show: g.show,
|
|
52
|
+
position: g.position,
|
|
53
|
+
leftPadding: h.left,
|
|
54
54
|
rightPadding: G.right,
|
|
55
55
|
chartsWidth: t.chartsWidth
|
|
56
56
|
}
|
|
@@ -59,7 +59,7 @@ function X({
|
|
|
59
59
|
P,
|
|
60
60
|
{
|
|
61
61
|
facetKey: s,
|
|
62
|
-
scales: { x:
|
|
62
|
+
scales: { x: l.x[s], y: l.y[s] },
|
|
63
63
|
width: t.chartWidth,
|
|
64
64
|
height: t.chartHeight,
|
|
65
65
|
dimensions: a[s],
|