@weng-lab/visualization 2.6.0-beta.1 → 2.7.0-beta.0
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/src/components/Heatmap/Heatmap.d.ts.map +1 -1
- package/dist/src/components/Heatmap/HeatmapCanvasCells.d.ts +19 -5
- package/dist/src/components/Heatmap/HeatmapCanvasCells.d.ts.map +1 -1
- package/dist/src/components/Heatmap/HeatmapGrid.d.ts +36 -0
- package/dist/src/components/Heatmap/HeatmapGrid.d.ts.map +1 -0
- package/dist/src/components/Heatmap/{scrollable/HeatmapMiniMap.d.ts → HeatmapMiniMap.d.ts} +1 -1
- package/dist/src/components/Heatmap/HeatmapMiniMap.d.ts.map +1 -0
- package/dist/src/components/Heatmap/{scrollable/HeatmapMiniMapPopup.d.ts → HeatmapMiniMapPopup.d.ts} +1 -1
- package/dist/src/components/Heatmap/HeatmapMiniMapPopup.d.ts.map +1 -0
- package/dist/src/components/Heatmap/heatmapAxisProps.d.ts +2 -15
- package/dist/src/components/Heatmap/heatmapAxisProps.d.ts.map +1 -1
- package/dist/src/components/Heatmap/heatmapCellAppearance.d.ts +2 -2
- package/dist/src/components/Heatmap/heatmapExport.d.ts +20 -0
- package/dist/src/components/Heatmap/heatmapExport.d.ts.map +1 -0
- package/dist/src/components/Heatmap/heatmapLayout.d.ts +4 -18
- package/dist/src/components/Heatmap/heatmapLayout.d.ts.map +1 -1
- package/dist/src/components/Heatmap/hooks/useHeatmapCanvasGrid.d.ts +4 -3
- package/dist/src/components/Heatmap/hooks/useHeatmapCanvasGrid.d.ts.map +1 -1
- package/dist/src/components/Heatmap/types.d.ts +13 -5
- package/dist/src/components/Heatmap/types.d.ts.map +1 -1
- package/dist/src/components/Legend/ChipLegend/ChipLegend.d.ts +40 -0
- package/dist/src/components/Legend/ChipLegend/ChipLegend.d.ts.map +1 -0
- package/dist/src/components/Legend/ChipLegend/ShapeGlyph.d.ts +12 -0
- package/dist/src/components/Legend/ChipLegend/ShapeGlyph.d.ts.map +1 -0
- package/dist/src/components/Legend/ColorRange/ColorRangeButton.d.ts +34 -0
- package/dist/src/components/Legend/ColorRange/ColorRangeButton.d.ts.map +1 -0
- package/dist/src/components/Legend/ColorRange/ColorRangeEditor.d.ts +28 -0
- package/dist/src/components/Legend/ColorRange/ColorRangeEditor.d.ts.map +1 -0
- package/dist/src/components/Legend/ColorRange/SteadyText.d.ts +15 -0
- package/dist/src/components/Legend/ColorRange/SteadyText.d.ts.map +1 -0
- package/dist/src/components/Legend/Colorbar/Colorbar.d.ts +53 -0
- package/dist/src/components/Legend/Colorbar/Colorbar.d.ts.map +1 -0
- package/dist/src/components/Legend/Colorbar/ColorbarEnd.d.ts +26 -0
- package/dist/src/components/Legend/Colorbar/ColorbarEnd.d.ts.map +1 -0
- package/dist/src/components/Legend/Colorbar/ColorbarGraphic.d.ts +34 -0
- package/dist/src/components/Legend/Colorbar/ColorbarGraphic.d.ts.map +1 -0
- package/dist/src/components/Legend/Colorbar/ColorbarLegend.d.ts +35 -0
- package/dist/src/components/Legend/Colorbar/ColorbarLegend.d.ts.map +1 -0
- package/dist/src/components/Legend/Colorbar/colorbarLabels.d.ts +37 -0
- package/dist/src/components/Legend/Colorbar/colorbarLabels.d.ts.map +1 -0
- package/dist/src/components/Legend/Colorbar/useSweep.d.ts +7 -0
- package/dist/src/components/Legend/Colorbar/useSweep.d.ts.map +1 -0
- package/dist/src/components/Legend/Swatch.d.ts +7 -0
- package/dist/src/components/Legend/Swatch.d.ts.map +1 -0
- package/dist/src/components/Legend/colorbarAxis.d.ts +105 -0
- package/dist/src/components/Legend/colorbarAxis.d.ts.map +1 -0
- package/dist/src/components/Legend/colorbarGeometry.d.ts +43 -0
- package/dist/src/components/Legend/colorbarGeometry.d.ts.map +1 -0
- package/dist/src/components/Legend/index.d.ts +17 -0
- package/dist/src/components/Legend/index.d.ts.map +1 -0
- package/dist/src/components/ScatterPlot/AnimatedPoints.d.ts +3 -2
- package/dist/src/components/ScatterPlot/AnimatedPoints.d.ts.map +1 -1
- package/dist/src/components/ScatterPlot/ScatterPlotViewport.d.ts +7 -4
- package/dist/src/components/ScatterPlot/ScatterPlotViewport.d.ts.map +1 -1
- package/dist/src/components/ScatterPlot/helpers.d.ts +6 -2
- package/dist/src/components/ScatterPlot/helpers.d.ts.map +1 -1
- package/dist/src/components/ScatterPlot/hooks/useHoverTooltip.d.ts.map +1 -1
- package/dist/src/components/ScatterPlot/hooks/useHoveredPointKeys.d.ts +17 -0
- package/dist/src/components/ScatterPlot/hooks/useHoveredPointKeys.d.ts.map +1 -0
- package/dist/src/components/ScatterPlot/index.d.ts +1 -1
- package/dist/src/components/ScatterPlot/index.d.ts.map +1 -1
- package/dist/src/components/ScatterPlot/minimap.d.ts +1 -1
- package/dist/src/components/ScatterPlot/minimap.d.ts.map +1 -1
- package/dist/src/components/ScatterPlot/scatterplot.d.ts.map +1 -1
- package/dist/src/components/ScatterPlot/types.d.ts +33 -0
- package/dist/src/components/ScatterPlot/types.d.ts.map +1 -1
- package/dist/src/index.d.ts +2 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/utility.d.ts +34 -20
- package/dist/src/utility.d.ts.map +1 -1
- package/dist/visualization.es.js +49 -30
- package/dist/visualization.es.js.map +1 -1
- package/dist/visualization.es10.js +168 -59
- package/dist/visualization.es10.js.map +1 -1
- package/dist/visualization.es100.js +46 -44
- package/dist/visualization.es100.js.map +1 -1
- package/dist/visualization.es101.js +4 -76
- package/dist/visualization.es101.js.map +1 -1
- package/dist/visualization.es102.js +281 -24
- package/dist/visualization.es102.js.map +1 -1
- package/dist/visualization.es103.js +19 -85
- package/dist/visualization.es103.js.map +1 -1
- package/dist/visualization.es104.js +66 -32
- package/dist/visualization.es104.js.map +1 -1
- package/dist/visualization.es105.js +11 -221
- package/dist/visualization.es105.js.map +1 -1
- package/dist/visualization.es106.js +26 -2
- package/dist/visualization.es106.js.map +1 -1
- package/dist/visualization.es107.js +69 -556
- package/dist/visualization.es107.js.map +1 -1
- package/dist/visualization.es108.js +5 -214
- package/dist/visualization.es108.js.map +1 -1
- package/dist/visualization.es109.js +5 -2
- package/dist/visualization.es109.js.map +1 -1
- package/dist/visualization.es11.js +140 -120
- package/dist/visualization.es11.js.map +1 -1
- package/dist/visualization.es110.js +5 -4800
- package/dist/visualization.es110.js.map +1 -1
- package/dist/visualization.es111.js +222 -25
- package/dist/visualization.es111.js.map +1 -1
- package/dist/visualization.es112.js +2 -45
- package/dist/visualization.es112.js.map +1 -1
- package/dist/visualization.es113.js +557 -144
- package/dist/visualization.es113.js.map +1 -1
- package/dist/visualization.es114.js +213 -146
- package/dist/visualization.es114.js.map +1 -1
- package/dist/visualization.es115.js +2 -58
- package/dist/visualization.es115.js.map +1 -1
- package/dist/visualization.es116.js +4799 -31
- package/dist/visualization.es116.js.map +1 -1
- package/dist/visualization.es117.js +24 -17
- package/dist/visualization.es117.js.map +1 -1
- package/dist/visualization.es118.js +45 -14
- package/dist/visualization.es118.js.map +1 -1
- package/dist/visualization.es119.js +144 -26
- package/dist/visualization.es119.js.map +1 -1
- package/dist/visualization.es12.js +27 -2
- package/dist/visualization.es12.js.map +1 -1
- package/dist/visualization.es120.js +146 -14
- package/dist/visualization.es120.js.map +1 -1
- package/dist/visualization.es121.js +10 -10
- package/dist/visualization.es121.js.map +1 -1
- package/dist/visualization.es122.js +15 -26
- package/dist/visualization.es122.js.map +1 -1
- package/dist/visualization.es123.js +33 -70
- package/dist/visualization.es123.js.map +1 -1
- package/dist/visualization.es124.js +43 -53
- package/dist/visualization.es124.js.map +1 -1
- package/dist/visualization.es125.js +76 -24
- package/dist/visualization.es125.js.map +1 -1
- package/dist/visualization.es126.js +24 -83
- package/dist/visualization.es126.js.map +1 -1
- package/dist/visualization.es127.js +83 -221
- package/dist/visualization.es127.js.map +1 -1
- package/dist/visualization.es128.js +36 -18
- package/dist/visualization.es128.js.map +1 -1
- package/dist/visualization.es129.js +53 -101
- package/dist/visualization.es129.js.map +1 -1
- package/dist/visualization.es13.js +58 -79
- package/dist/visualization.es13.js.map +1 -1
- package/dist/visualization.es130.js +24 -175
- package/dist/visualization.es130.js.map +1 -1
- package/dist/visualization.es131.js +79 -77
- package/dist/visualization.es131.js.map +1 -1
- package/dist/visualization.es132.js +244 -36
- package/dist/visualization.es132.js.map +1 -1
- package/dist/visualization.es133.js +18 -56
- package/dist/visualization.es133.js.map +1 -1
- package/dist/visualization.es134.js +142 -47
- package/dist/visualization.es134.js.map +1 -1
- package/dist/visualization.es135.js +175 -2
- package/dist/visualization.es135.js.map +1 -1
- package/dist/visualization.es136.js +101 -1604
- package/dist/visualization.es136.js.map +1 -1
- package/dist/visualization.es137.js +36 -17
- package/dist/visualization.es137.js.map +1 -1
- package/dist/visualization.es138.js +12 -84
- package/dist/visualization.es138.js.map +1 -1
- package/dist/visualization.es139.js +74 -5
- package/dist/visualization.es139.js.map +1 -1
- package/dist/visualization.es14.js +123 -100
- package/dist/visualization.es14.js.map +1 -1
- package/dist/visualization.es140.js +31 -88
- package/dist/visualization.es140.js.map +1 -1
- package/dist/visualization.es141.js +11 -11
- package/dist/visualization.es141.js.map +1 -1
- package/dist/visualization.es142.js +58 -6
- package/dist/visualization.es142.js.map +1 -1
- package/dist/visualization.es143.js +32 -15
- package/dist/visualization.es143.js.map +1 -1
- package/dist/visualization.es144.js +18 -7
- package/dist/visualization.es144.js.map +1 -1
- package/dist/visualization.es145.js +14 -14
- package/dist/visualization.es145.js.map +1 -1
- package/dist/visualization.es146.js +26 -5
- package/dist/visualization.es146.js.map +1 -1
- package/dist/visualization.es147.js +18 -8
- package/dist/visualization.es147.js.map +1 -1
- package/dist/visualization.es148.js +2 -61
- package/dist/visualization.es148.js.map +1 -1
- package/dist/visualization.es149.js +1604 -37
- package/dist/visualization.es149.js.map +1 -1
- package/dist/visualization.es15.js +145 -15
- package/dist/visualization.es15.js.map +1 -1
- package/dist/visualization.es150.js +17 -36
- package/dist/visualization.es150.js.map +1 -1
- package/dist/visualization.es151.js +5 -84
- package/dist/visualization.es151.js.map +1 -1
- package/dist/visualization.es152.js +17 -27
- package/dist/visualization.es152.js.map +1 -1
- package/dist/visualization.es153.js +3 -3
- package/dist/visualization.es153.js.map +1 -1
- package/dist/visualization.es154.js +35 -71
- package/dist/visualization.es154.js.map +1 -1
- package/dist/visualization.es155.js +8 -17
- package/dist/visualization.es155.js.map +1 -1
- package/dist/visualization.es156.js +15 -11
- package/dist/visualization.es156.js.map +1 -1
- package/dist/visualization.es157.js +11 -5
- package/dist/visualization.es157.js.map +1 -1
- package/dist/visualization.es158.js +6 -8
- package/dist/visualization.es158.js.map +1 -1
- package/dist/visualization.es159.js +11 -15
- package/dist/visualization.es159.js.map +1 -1
- package/dist/visualization.es16.js +2 -270
- package/dist/visualization.es16.js.map +1 -1
- package/dist/visualization.es160.js +4 -11
- package/dist/visualization.es160.js.map +1 -1
- package/dist/visualization.es161.js +2 -6
- package/dist/visualization.es161.js.map +1 -1
- package/dist/visualization.es162.js +11 -12
- package/dist/visualization.es162.js.map +1 -1
- package/dist/visualization.es163.js +30 -3
- package/dist/visualization.es163.js.map +1 -1
- package/dist/visualization.es164.js +43 -2
- package/dist/visualization.es164.js.map +1 -1
- package/dist/visualization.es165.js +48 -9
- package/dist/visualization.es165.js.map +1 -1
- package/dist/visualization.es166.js +3 -31
- package/dist/visualization.es166.js.map +1 -1
- package/dist/visualization.es167.js +3 -43
- package/dist/visualization.es167.js.map +1 -1
- package/dist/visualization.es168.js +5 -49
- package/dist/visualization.es168.js.map +1 -1
- package/dist/visualization.es169.js +5 -3
- package/dist/visualization.es169.js.map +1 -1
- package/dist/visualization.es17.js +79 -9
- package/dist/visualization.es17.js.map +1 -1
- package/dist/visualization.es170.js +11 -3
- package/dist/visualization.es170.js.map +1 -1
- package/dist/visualization.es171.js +3 -5
- package/dist/visualization.es171.js.map +1 -1
- package/dist/visualization.es172.js +17 -4
- package/dist/visualization.es172.js.map +1 -1
- package/dist/visualization.es173.js +17 -9
- package/dist/visualization.es173.js.map +1 -1
- package/dist/visualization.es174.js +36 -3
- package/dist/visualization.es174.js.map +1 -1
- package/dist/visualization.es175.js +2 -18
- package/dist/visualization.es175.js.map +1 -1
- package/dist/visualization.es176.js +2 -19
- package/dist/visualization.es176.js.map +1 -1
- package/dist/visualization.es177.js +4 -37
- package/dist/visualization.es177.js.map +1 -1
- package/dist/visualization.es178.js +15 -2
- package/dist/visualization.es178.js.map +1 -1
- package/dist/visualization.es179.js +3 -2
- package/dist/visualization.es179.js.map +1 -1
- package/dist/visualization.es18.js +103 -96
- package/dist/visualization.es18.js.map +1 -1
- package/dist/visualization.es180.js +7 -4
- package/dist/visualization.es180.js.map +1 -1
- package/dist/visualization.es181.js +3 -15
- package/dist/visualization.es181.js.map +1 -1
- package/dist/visualization.es182.js +7 -3
- package/dist/visualization.es182.js.map +1 -1
- package/dist/visualization.es183.js +4 -7
- package/dist/visualization.es183.js.map +1 -1
- package/dist/visualization.es184.js +61 -3
- package/dist/visualization.es184.js.map +1 -1
- package/dist/visualization.es185.js +38 -6
- package/dist/visualization.es185.js.map +1 -1
- package/dist/visualization.es186.js +36 -3
- package/dist/visualization.es186.js.map +1 -1
- package/dist/visualization.es187.js +79 -59
- package/dist/visualization.es187.js.map +1 -1
- package/dist/visualization.es188.js +29 -7
- package/dist/visualization.es188.js.map +1 -1
- package/dist/visualization.es189.js +7 -42
- package/dist/visualization.es189.js.map +1 -1
- package/dist/visualization.es19.js +17 -28
- package/dist/visualization.es19.js.map +1 -1
- package/dist/visualization.es190.js +4 -9
- package/dist/visualization.es190.js.map +1 -1
- package/dist/visualization.es191.js +3 -6
- package/dist/visualization.es191.js.map +1 -1
- package/dist/visualization.es192.js +84 -7
- package/dist/visualization.es192.js.map +1 -1
- package/dist/visualization.es193.js +89 -9
- package/dist/visualization.es193.js.map +1 -1
- package/dist/visualization.es194.js +12 -6
- package/dist/visualization.es194.js.map +1 -1
- package/dist/visualization.es195.js +5 -6
- package/dist/visualization.es195.js.map +1 -1
- package/dist/visualization.es196.js +13 -4
- package/dist/visualization.es196.js.map +1 -1
- package/dist/visualization.es197.js +7 -15
- package/dist/visualization.es197.js.map +1 -1
- package/dist/visualization.es198.js +13 -5
- package/dist/visualization.es198.js.map +1 -1
- package/dist/visualization.es199.js +74 -3
- package/dist/visualization.es199.js.map +1 -1
- package/dist/visualization.es2.js +10 -10
- package/dist/visualization.es20.js +270 -15
- package/dist/visualization.es20.js.map +1 -1
- package/dist/visualization.es200.js +2 -7
- package/dist/visualization.es200.js.map +1 -1
- package/dist/visualization.es201.js +482 -6
- package/dist/visualization.es201.js.map +1 -1
- package/dist/visualization.es202.js +2 -10
- package/dist/visualization.es202.js.map +1 -1
- package/dist/visualization.es203.js +1 -1
- package/dist/visualization.es209.js +2 -2
- package/dist/visualization.es21.js +147 -63
- package/dist/visualization.es21.js.map +1 -1
- package/dist/visualization.es217.js +1 -1
- package/dist/visualization.es22.js +9 -65
- package/dist/visualization.es22.js.map +1 -1
- package/dist/visualization.es220.js +5 -5
- package/dist/visualization.es221.js +71 -3
- package/dist/visualization.es221.js.map +1 -1
- package/dist/visualization.es222.js +16 -5
- package/dist/visualization.es222.js.map +1 -1
- package/dist/visualization.es223.js +11 -33
- package/dist/visualization.es223.js.map +1 -1
- package/dist/visualization.es224.js +5 -16
- package/dist/visualization.es224.js.map +1 -1
- package/dist/visualization.es225.js +62 -6
- package/dist/visualization.es225.js.map +1 -1
- package/dist/visualization.es226.js +7 -12
- package/dist/visualization.es226.js.map +1 -1
- package/dist/visualization.es227.js +41 -31
- package/dist/visualization.es227.js.map +1 -1
- package/dist/visualization.es228.js +70 -112
- package/dist/visualization.es228.js.map +1 -1
- package/dist/visualization.es229.js +20 -16
- package/dist/visualization.es229.js.map +1 -1
- package/dist/visualization.es23.js +99 -111
- package/dist/visualization.es23.js.map +1 -1
- package/dist/visualization.es230.js +22 -3
- package/dist/visualization.es230.js.map +1 -1
- package/dist/visualization.es231.js +39 -34
- package/dist/visualization.es231.js.map +1 -1
- package/dist/visualization.es232.js +7 -19
- package/dist/visualization.es232.js.map +1 -1
- package/dist/visualization.es233.js +12 -27
- package/dist/visualization.es233.js.map +1 -1
- package/dist/visualization.es234.js +14 -69
- package/dist/visualization.es234.js.map +1 -1
- package/dist/visualization.es235.js +35 -21
- package/dist/visualization.es235.js.map +1 -1
- package/dist/visualization.es236.js +22 -20
- package/dist/visualization.es236.js.map +1 -1
- package/dist/visualization.es237.js +24 -37
- package/dist/visualization.es237.js.map +1 -1
- package/dist/visualization.es238.js +8 -6
- package/dist/visualization.es238.js.map +1 -1
- package/dist/visualization.es239.js +6 -12
- package/dist/visualization.es239.js.map +1 -1
- package/dist/visualization.es24.js +77 -146
- package/dist/visualization.es24.js.map +1 -1
- package/dist/visualization.es240.js +6 -16
- package/dist/visualization.es240.js.map +1 -1
- package/dist/visualization.es241.js +9 -36
- package/dist/visualization.es241.js.map +1 -1
- package/dist/visualization.es242.js +6 -24
- package/dist/visualization.es242.js.map +1 -1
- package/dist/visualization.es243.js +5 -26
- package/dist/visualization.es243.js.map +1 -1
- package/dist/visualization.es244.js +5 -74
- package/dist/visualization.es244.js.map +1 -1
- package/dist/visualization.es245.js +15 -2
- package/dist/visualization.es245.js.map +1 -1
- package/dist/visualization.es246.js +5 -482
- package/dist/visualization.es246.js.map +1 -1
- package/dist/visualization.es247.js +4 -2
- package/dist/visualization.es247.js.map +1 -1
- package/dist/visualization.es248.js +6 -123
- package/dist/visualization.es248.js.map +1 -1
- package/dist/visualization.es249.js +6 -63
- package/dist/visualization.es249.js.map +1 -1
- package/dist/visualization.es25.js +28 -7
- package/dist/visualization.es25.js.map +1 -1
- package/dist/visualization.es250.js +9 -60
- package/dist/visualization.es250.js.map +1 -1
- package/dist/visualization.es251.js +33 -2
- package/dist/visualization.es251.js.map +1 -1
- package/dist/visualization.es252.js +114 -34
- package/dist/visualization.es252.js.map +1 -1
- package/dist/visualization.es253.js +4 -2
- package/dist/visualization.es253.js.map +1 -1
- package/dist/visualization.es254.js +4 -22
- package/dist/visualization.es254.js.map +1 -1
- package/dist/visualization.es255.js +33 -53
- package/dist/visualization.es255.js.map +1 -1
- package/dist/visualization.es256.js +15 -20
- package/dist/visualization.es256.js.map +1 -1
- package/dist/visualization.es257.js +7 -3
- package/dist/visualization.es257.js.map +1 -1
- package/dist/visualization.es258.js +11 -3
- package/dist/visualization.es258.js.map +1 -1
- package/dist/visualization.es259.js +19 -3
- package/dist/visualization.es259.js.map +1 -1
- package/dist/visualization.es26.js +14 -7
- package/dist/visualization.es26.js.map +1 -1
- package/dist/visualization.es260.js +27 -3
- package/dist/visualization.es260.js.map +1 -1
- package/dist/visualization.es261.js +123 -3
- package/dist/visualization.es261.js.map +1 -1
- package/dist/visualization.es262.js +2 -4
- package/dist/visualization.es262.js.map +1 -1
- package/dist/visualization.es263.js +34 -3
- package/dist/visualization.es263.js.map +1 -1
- package/dist/visualization.es264.js +2 -8
- package/dist/visualization.es264.js.map +1 -1
- package/dist/visualization.es265.js +9 -48
- package/dist/visualization.es265.js.map +1 -1
- package/dist/visualization.es266.js +9 -3
- package/dist/visualization.es266.js.map +1 -1
- package/dist/visualization.es267.js +6 -6
- package/dist/visualization.es267.js.map +1 -1
- package/dist/visualization.es268.js +8 -4
- package/dist/visualization.es268.js.map +1 -1
- package/dist/visualization.es269.js +6 -3
- package/dist/visualization.es269.js.map +1 -1
- package/dist/visualization.es27.js +62 -46
- package/dist/visualization.es27.js.map +1 -1
- package/dist/visualization.es270.js +5 -6
- package/dist/visualization.es270.js.map +1 -1
- package/dist/visualization.es271.js +14 -4
- package/dist/visualization.es271.js.map +1 -1
- package/dist/visualization.es272.js +6 -3
- package/dist/visualization.es272.js.map +1 -1
- package/dist/visualization.es273.js +6 -11
- package/dist/visualization.es273.js.map +1 -1
- package/dist/visualization.es274.js +6 -36
- package/dist/visualization.es274.js.map +1 -1
- package/dist/visualization.es275.js +6 -260
- package/dist/visualization.es275.js.map +1 -1
- package/dist/visualization.es276.js +3 -59
- package/dist/visualization.es276.js.map +1 -1
- package/dist/visualization.es277.js +4 -5
- package/dist/visualization.es277.js.map +1 -1
- package/dist/visualization.es278.js +9 -53
- package/dist/visualization.es278.js.map +1 -1
- package/dist/visualization.es279.js +3 -32
- package/dist/visualization.es279.js.map +1 -1
- package/dist/visualization.es28.js +18700 -19
- package/dist/visualization.es28.js.map +1 -1
- package/dist/visualization.es280.js +11 -33
- package/dist/visualization.es280.js.map +1 -1
- package/dist/visualization.es281.js +36 -12
- package/dist/visualization.es281.js.map +1 -1
- package/dist/visualization.es282.js +258 -5
- package/dist/visualization.es282.js.map +1 -1
- package/dist/visualization.es283.js +52 -133
- package/dist/visualization.es283.js.map +1 -1
- package/dist/visualization.es284.js +5 -5
- package/dist/visualization.es284.js.map +1 -1
- package/dist/visualization.es285.js +7 -21
- package/dist/visualization.es285.js.map +1 -1
- package/dist/visualization.es286.js +136 -33
- package/dist/visualization.es286.js.map +1 -1
- package/dist/visualization.es287.js +5 -34
- package/dist/visualization.es287.js.map +1 -1
- package/dist/visualization.es288.js +22 -15
- package/dist/visualization.es288.js.map +1 -1
- package/dist/visualization.es289.js +37 -18
- package/dist/visualization.es289.js.map +1 -1
- package/dist/visualization.es29.js +5 -5
- package/dist/visualization.es29.js.map +1 -1
- package/dist/visualization.es290.js +34 -8
- package/dist/visualization.es290.js.map +1 -1
- package/dist/visualization.es291.js +14 -109
- package/dist/visualization.es291.js.map +1 -1
- package/dist/visualization.es292.js +17 -11
- package/dist/visualization.es292.js.map +1 -1
- package/dist/visualization.es293.js +8 -141
- package/dist/visualization.es293.js.map +1 -1
- package/dist/visualization.es294.js +109 -5
- package/dist/visualization.es294.js.map +1 -1
- package/dist/visualization.es295.js +11 -70
- package/dist/visualization.es295.js.map +1 -1
- package/dist/visualization.es296.js +135 -29
- package/dist/visualization.es296.js.map +1 -1
- package/dist/visualization.es297.js +5 -20
- package/dist/visualization.es297.js.map +1 -1
- package/dist/visualization.es298.js +71 -3
- package/dist/visualization.es298.js.map +1 -1
- package/dist/visualization.es299.js +30 -19
- package/dist/visualization.es299.js.map +1 -1
- package/dist/visualization.es3.js +164 -332
- package/dist/visualization.es3.js.map +1 -1
- package/dist/visualization.es30.js +5 -34
- package/dist/visualization.es30.js.map +1 -1
- package/dist/visualization.es300.js +19 -29
- package/dist/visualization.es300.js.map +1 -1
- package/dist/visualization.es301.js +4 -2
- package/dist/visualization.es301.js.map +1 -1
- package/dist/visualization.es302.js +25 -2
- package/dist/visualization.es302.js.map +1 -1
- package/dist/visualization.es303.js +30 -5
- package/dist/visualization.es303.js.map +1 -1
- package/dist/visualization.es304.js +2 -15
- package/dist/visualization.es304.js.map +1 -1
- package/dist/visualization.es305.js +2 -35
- package/dist/visualization.es305.js.map +1 -1
- package/dist/visualization.es306.js +5 -27
- package/dist/visualization.es306.js.map +1 -1
- package/dist/visualization.es307.js +15 -11
- package/dist/visualization.es307.js.map +1 -1
- package/dist/visualization.es308.js +34 -6
- package/dist/visualization.es308.js.map +1 -1
- package/dist/visualization.es309.js +27 -13
- package/dist/visualization.es309.js.map +1 -1
- package/dist/visualization.es31.js +59 -34
- package/dist/visualization.es31.js.map +1 -1
- package/dist/visualization.es310.js +11 -12
- package/dist/visualization.es310.js.map +1 -1
- package/dist/visualization.es311.js +7 -2
- package/dist/visualization.es311.js.map +1 -1
- package/dist/visualization.es312.js +14 -3
- package/dist/visualization.es312.js.map +1 -1
- package/dist/visualization.es313.js +12 -2
- package/dist/visualization.es313.js.map +1 -1
- package/dist/visualization.es314.js +2 -104
- package/dist/visualization.es314.js.map +1 -1
- package/dist/visualization.es315.js +3 -5
- package/dist/visualization.es315.js.map +1 -1
- package/dist/visualization.es316.js +2 -3
- package/dist/visualization.es316.js.map +1 -1
- package/dist/visualization.es317.js +103 -18
- package/dist/visualization.es317.js.map +1 -1
- package/dist/visualization.es318.js +4 -5
- package/dist/visualization.es318.js.map +1 -1
- package/dist/visualization.es319.js +3 -15
- package/dist/visualization.es319.js.map +1 -1
- package/dist/visualization.es32.js +808 -65
- package/dist/visualization.es32.js.map +1 -1
- package/dist/visualization.es320.js +18 -4
- package/dist/visualization.es320.js.map +1 -1
- package/dist/visualization.es321.js +5 -28
- package/dist/visualization.es321.js.map +1 -1
- package/dist/visualization.es322.js +14 -6
- package/dist/visualization.es322.js.map +1 -1
- package/dist/visualization.es323.js +5 -2
- package/dist/visualization.es323.js.map +1 -1
- package/dist/visualization.es324.js +29 -20
- package/dist/visualization.es324.js.map +1 -1
- package/dist/visualization.es325.js +7 -21
- package/dist/visualization.es325.js.map +1 -1
- package/dist/visualization.es326.js +2 -6
- package/dist/visualization.es326.js.map +1 -1
- package/dist/visualization.es327.js +20 -8
- package/dist/visualization.es327.js.map +1 -1
- package/dist/visualization.es328.js +21 -19
- package/dist/visualization.es328.js.map +1 -1
- package/dist/visualization.es329.js +6 -44
- package/dist/visualization.es329.js.map +1 -1
- package/dist/visualization.es330.js +8 -7
- package/dist/visualization.es330.js.map +1 -1
- package/dist/visualization.es331.js +18 -19
- package/dist/visualization.es331.js.map +1 -1
- package/dist/visualization.es332.js +42 -52
- package/dist/visualization.es332.js.map +1 -1
- package/dist/visualization.es333.js +7 -27
- package/dist/visualization.es333.js.map +1 -1
- package/dist/visualization.es334.js +20 -11
- package/dist/visualization.es334.js.map +1 -1
- package/dist/visualization.es335.js +51 -16
- package/dist/visualization.es335.js.map +1 -1
- package/dist/visualization.es336.js +26 -11
- package/dist/visualization.es336.js.map +1 -1
- package/dist/visualization.es337.js +11 -5
- package/dist/visualization.es337.js.map +1 -1
- package/dist/visualization.es338.js +19 -4
- package/dist/visualization.es338.js.map +1 -1
- package/dist/visualization.es339.js +11 -3
- package/dist/visualization.es339.js.map +1 -1
- package/dist/visualization.es34.js +128 -138
- package/dist/visualization.es34.js.map +1 -1
- package/dist/visualization.es340.js +4 -175
- package/dist/visualization.es340.js.map +1 -1
- package/dist/visualization.es341.js +4 -40
- package/dist/visualization.es341.js.map +1 -1
- package/dist/visualization.es342.js +3 -5
- package/dist/visualization.es342.js.map +1 -1
- package/dist/visualization.es343.js +175 -3
- package/dist/visualization.es343.js.map +1 -1
- package/dist/visualization.es344.js +40 -2
- package/dist/visualization.es344.js.map +1 -1
- package/dist/visualization.es345.js +6 -30
- package/dist/visualization.es345.js.map +1 -1
- package/dist/visualization.es346.js +4 -8
- package/dist/visualization.es346.js.map +1 -1
- package/dist/visualization.es347.js +2 -11
- package/dist/visualization.es347.js.map +1 -1
- package/dist/visualization.es348.js +30 -4
- package/dist/visualization.es348.js.map +1 -1
- package/dist/visualization.es349.js +8 -66
- package/dist/visualization.es349.js.map +1 -1
- package/dist/visualization.es35.js +51 -26
- package/dist/visualization.es35.js.map +1 -1
- package/dist/visualization.es350.js +11 -7
- package/dist/visualization.es350.js.map +1 -1
- package/dist/visualization.es351.js +3 -4
- package/dist/visualization.es351.js.map +1 -1
- package/dist/visualization.es352.js +64 -12
- package/dist/visualization.es352.js.map +1 -1
- package/dist/visualization.es353.js +7 -35
- package/dist/visualization.es353.js.map +1 -1
- package/dist/visualization.es354.js +4 -4
- package/dist/visualization.es354.js.map +1 -1
- package/dist/visualization.es355.js +12 -8
- package/dist/visualization.es355.js.map +1 -1
- package/dist/visualization.es356.js +35 -2
- package/dist/visualization.es356.js.map +1 -1
- package/dist/visualization.es357.js +5 -5
- package/dist/visualization.es357.js.map +1 -1
- package/dist/visualization.es358.js +10 -2
- package/dist/visualization.es358.js.map +1 -1
- package/dist/visualization.es359.js +2 -10
- package/dist/visualization.es359.js.map +1 -1
- package/dist/visualization.es36.js +176 -21
- package/dist/visualization.es36.js.map +1 -1
- package/dist/visualization.es360.js +5 -10
- package/dist/visualization.es360.js.map +1 -1
- package/dist/visualization.es361.js +2 -13
- package/dist/visualization.es361.js.map +1 -1
- package/dist/visualization.es362.js +10 -2
- package/dist/visualization.es362.js.map +1 -1
- package/dist/visualization.es363.js +10 -10
- package/dist/visualization.es363.js.map +1 -1
- package/dist/visualization.es364.js +13 -8
- package/dist/visualization.es364.js.map +1 -1
- package/dist/visualization.es365.js +2 -6
- package/dist/visualization.es365.js.map +1 -1
- package/dist/visualization.es366.js +10 -25
- package/dist/visualization.es366.js.map +1 -1
- package/dist/visualization.es367.js +8 -19
- package/dist/visualization.es367.js.map +1 -1
- package/dist/visualization.es368.js +5 -40
- package/dist/visualization.es368.js.map +1 -1
- package/dist/visualization.es369.js +25 -3
- package/dist/visualization.es369.js.map +1 -1
- package/dist/visualization.es37.js +54 -17
- package/dist/visualization.es37.js.map +1 -1
- package/dist/visualization.es370.js +19 -9
- package/dist/visualization.es370.js.map +1 -1
- package/dist/visualization.es371.js +40 -8
- package/dist/visualization.es371.js.map +1 -1
- package/dist/visualization.es372.js +3 -36
- package/dist/visualization.es372.js.map +1 -1
- package/dist/visualization.es373.js +8 -9
- package/dist/visualization.es373.js.map +1 -1
- package/dist/visualization.es374.js +8 -31
- package/dist/visualization.es374.js.map +1 -1
- package/dist/visualization.es375.js +35 -4
- package/dist/visualization.es375.js.map +1 -1
- package/dist/visualization.es376.js +10 -2
- package/dist/visualization.es376.js.map +1 -1
- package/dist/visualization.es377.js +30 -14
- package/dist/visualization.es377.js.map +1 -1
- package/dist/visualization.es378.js +4 -24
- package/dist/visualization.es378.js.map +1 -1
- package/dist/visualization.es379.js +2 -2
- package/dist/visualization.es379.js.map +1 -1
- package/dist/visualization.es38.js +42 -20
- package/dist/visualization.es38.js.map +1 -1
- package/dist/visualization.es380.js +14 -61
- package/dist/visualization.es380.js.map +1 -1
- package/dist/visualization.es381.js +25 -2
- package/dist/visualization.es381.js.map +1 -1
- package/dist/visualization.es382.js +2 -2
- package/dist/visualization.es382.js.map +1 -1
- package/dist/visualization.es383.js +62 -5
- package/dist/visualization.es383.js.map +1 -1
- package/dist/visualization.es384.js +2 -37
- package/dist/visualization.es384.js.map +1 -1
- package/dist/visualization.es385.js +2 -21
- package/dist/visualization.es385.js.map +1 -1
- package/dist/visualization.es386.js +5 -3
- package/dist/visualization.es386.js.map +1 -1
- package/dist/visualization.es387.js +36 -4
- package/dist/visualization.es387.js.map +1 -1
- package/dist/visualization.es388.js +20 -4
- package/dist/visualization.es388.js.map +1 -1
- package/dist/visualization.es389.js +3 -48
- package/dist/visualization.es389.js.map +1 -1
- package/dist/visualization.es39.js +6 -70
- package/dist/visualization.es39.js.map +1 -1
- package/dist/visualization.es390.js +4 -26
- package/dist/visualization.es390.js.map +1 -1
- package/dist/visualization.es391.js +4 -16
- package/dist/visualization.es391.js.map +1 -1
- package/dist/visualization.es392.js +48 -9
- package/dist/visualization.es392.js.map +1 -1
- package/dist/visualization.es393.js +26 -19
- package/dist/visualization.es393.js.map +1 -1
- package/dist/visualization.es394.js +16 -13
- package/dist/visualization.es394.js.map +1 -1
- package/dist/visualization.es395.js +10 -4
- package/dist/visualization.es395.js.map +1 -1
- package/dist/visualization.es396.js +19 -12
- package/dist/visualization.es396.js.map +1 -1
- package/dist/visualization.es397.js +13 -48
- package/dist/visualization.es397.js.map +1 -1
- package/dist/visualization.es398.js +3 -5
- package/dist/visualization.es398.js.map +1 -1
- package/dist/visualization.es399.js +12 -12
- package/dist/visualization.es399.js.map +1 -1
- package/dist/visualization.es4.js +87 -300
- package/dist/visualization.es4.js.map +1 -1
- package/dist/visualization.es40.js +5 -81
- package/dist/visualization.es40.js.map +1 -1
- package/dist/visualization.es400.js +49 -2
- package/dist/visualization.es400.js.map +1 -1
- package/dist/visualization.es401.js +5 -6
- package/dist/visualization.es401.js.map +1 -1
- package/dist/visualization.es402.js +12 -209
- package/dist/visualization.es402.js.map +1 -1
- package/dist/visualization.es403.js +2 -27
- package/dist/visualization.es403.js.map +1 -1
- package/dist/visualization.es404.js +6 -3
- package/dist/visualization.es404.js.map +1 -1
- package/dist/visualization.es405.js +210 -16
- package/dist/visualization.es405.js.map +1 -1
- package/dist/visualization.es406.js +27 -15
- package/dist/visualization.es406.js.map +1 -1
- package/dist/visualization.es407.js +4 -15
- package/dist/visualization.es407.js.map +1 -1
- package/dist/visualization.es408.js +16 -2
- package/dist/visualization.es408.js.map +1 -1
- package/dist/visualization.es409.js +15 -2
- package/dist/visualization.es409.js.map +1 -1
- package/dist/visualization.es41.js +18 -18702
- package/dist/visualization.es41.js.map +1 -1
- package/dist/visualization.es410.js +15 -2
- package/dist/visualization.es410.js.map +1 -1
- package/dist/visualization.es411.js +2 -5
- package/dist/visualization.es411.js.map +1 -1
- package/dist/visualization.es412.js +2 -2
- package/dist/visualization.es412.js.map +1 -1
- package/dist/visualization.es413.js +2 -25
- package/dist/visualization.es413.js.map +1 -1
- package/dist/visualization.es414.js +4 -21
- package/dist/visualization.es414.js.map +1 -1
- package/dist/visualization.es415.js +2 -9
- package/dist/visualization.es415.js.map +1 -1
- package/dist/visualization.es416.js +24 -67
- package/dist/visualization.es416.js.map +1 -1
- package/dist/visualization.es417.js +21 -5
- package/dist/visualization.es417.js.map +1 -1
- package/dist/visualization.es418.js +7 -27
- package/dist/visualization.es418.js.map +1 -1
- package/dist/visualization.es419.js +68 -10
- package/dist/visualization.es419.js.map +1 -1
- package/dist/visualization.es42.js +5 -5
- package/dist/visualization.es42.js.map +1 -1
- package/dist/visualization.es420.js +6 -6
- package/dist/visualization.es420.js.map +1 -1
- package/dist/visualization.es421.js +29 -2
- package/dist/visualization.es421.js.map +1 -1
- package/dist/visualization.es422.js +9 -4
- package/dist/visualization.es422.js.map +1 -1
- package/dist/visualization.es423.js +6 -26
- package/dist/visualization.es423.js.map +1 -1
- package/dist/visualization.es424.js +2 -11
- package/dist/visualization.es424.js.map +1 -1
- package/dist/visualization.es425.js +4 -26
- package/dist/visualization.es425.js.map +1 -1
- package/dist/visualization.es426.js +25 -9
- package/dist/visualization.es426.js.map +1 -1
- package/dist/visualization.es427.js +10 -10
- package/dist/visualization.es427.js.map +1 -1
- package/dist/visualization.es428.js +27 -2
- package/dist/visualization.es428.js.map +1 -1
- package/dist/visualization.es429.js +10 -16
- package/dist/visualization.es429.js.map +1 -1
- package/dist/visualization.es43.js +27 -5
- package/dist/visualization.es43.js.map +1 -1
- package/dist/visualization.es430.js +10 -29
- package/dist/visualization.es430.js.map +1 -1
- package/dist/visualization.es431.js +2 -26
- package/dist/visualization.es431.js.map +1 -1
- package/dist/visualization.es432.js +16 -2
- package/dist/visualization.es432.js.map +1 -1
- package/dist/visualization.es433.js +29 -8
- package/dist/visualization.es433.js.map +1 -1
- package/dist/visualization.es434.js +26 -13
- package/dist/visualization.es434.js.map +1 -1
- package/dist/visualization.es435.js +2 -23
- package/dist/visualization.es435.js.map +1 -1
- package/dist/visualization.es436.js +8 -12
- package/dist/visualization.es436.js.map +1 -1
- package/dist/visualization.es437.js +13 -3
- package/dist/visualization.es437.js.map +1 -1
- package/dist/visualization.es438.js +23 -2
- package/dist/visualization.es438.js.map +1 -1
- package/dist/visualization.es439.js +12 -17
- package/dist/visualization.es439.js.map +1 -1
- package/dist/visualization.es44.js +26 -55
- package/dist/visualization.es44.js.map +1 -1
- package/dist/visualization.es440.js +3 -4
- package/dist/visualization.es440.js.map +1 -1
- package/dist/visualization.es441.js +2 -12
- package/dist/visualization.es441.js.map +1 -1
- package/dist/visualization.es442.js +18 -11
- package/dist/visualization.es442.js.map +1 -1
- package/dist/visualization.es443.js +3 -6
- package/dist/visualization.es443.js.map +1 -1
- package/dist/visualization.es444.js +12 -19
- package/dist/visualization.es444.js.map +1 -1
- package/dist/visualization.es445.js +11 -23
- package/dist/visualization.es445.js.map +1 -1
- package/dist/visualization.es446.js +6 -11
- package/dist/visualization.es446.js.map +1 -1
- package/dist/visualization.es447.js +19 -51
- package/dist/visualization.es447.js.map +1 -1
- package/dist/visualization.es448.js +20 -15
- package/dist/visualization.es448.js.map +1 -1
- package/dist/visualization.es449.js +9 -33
- package/dist/visualization.es449.js.map +1 -1
- package/dist/visualization.es45.js +5 -811
- package/dist/visualization.es45.js.map +1 -1
- package/dist/visualization.es450.js +47 -19
- package/dist/visualization.es450.js.map +1 -1
- package/dist/visualization.es451.js +13 -27
- package/dist/visualization.es451.js.map +1 -1
- package/dist/visualization.es452.js +35 -3
- package/dist/visualization.es452.js.map +1 -1
- package/dist/visualization.es453.js +22 -18
- package/dist/visualization.es453.js.map +1 -1
- package/dist/visualization.es454.js +32 -14
- package/dist/visualization.es454.js.map +1 -1
- package/dist/visualization.es455.js +3 -10
- package/dist/visualization.es455.js.map +1 -1
- package/dist/visualization.es456.js +18 -29
- package/dist/visualization.es456.js.map +1 -1
- package/dist/visualization.es457.js +14 -6
- package/dist/visualization.es457.js.map +1 -1
- package/dist/visualization.es458.js +10 -7
- package/dist/visualization.es458.js.map +1 -1
- package/dist/visualization.es459.js +30 -2
- package/dist/visualization.es459.js.map +1 -1
- package/dist/visualization.es46.js +58 -0
- package/dist/visualization.es46.js.map +1 -0
- package/dist/visualization.es460.js +6 -17
- package/dist/visualization.es460.js.map +1 -1
- package/dist/visualization.es461.js +7 -8
- package/dist/visualization.es461.js.map +1 -1
- package/dist/visualization.es462.js +2 -10
- package/dist/visualization.es462.js.map +1 -1
- package/dist/visualization.es463.js +14 -613
- package/dist/visualization.es463.js.map +1 -1
- package/dist/visualization.es464.js +8 -50
- package/dist/visualization.es464.js.map +1 -1
- package/dist/visualization.es465.js +10 -13
- package/dist/visualization.es465.js.map +1 -1
- package/dist/visualization.es466.js +616 -11
- package/dist/visualization.es466.js.map +1 -1
- package/dist/visualization.es467.js +50 -22
- package/dist/visualization.es467.js.map +1 -1
- package/dist/visualization.es468.js +13 -35
- package/dist/visualization.es468.js.map +1 -1
- package/dist/visualization.es469.js +11 -13
- package/dist/visualization.es469.js.map +1 -1
- package/dist/visualization.es47.js +109 -129
- package/dist/visualization.es47.js.map +1 -1
- package/dist/visualization.es470.js +23 -19
- package/dist/visualization.es470.js.map +1 -1
- package/dist/visualization.es471.js +32 -23
- package/dist/visualization.es471.js.map +1 -1
- package/dist/visualization.es472.js +12 -26
- package/dist/visualization.es472.js.map +1 -1
- package/dist/visualization.es473.js +14 -38
- package/dist/visualization.es473.js.map +1 -1
- package/dist/visualization.es474.js +20 -14
- package/dist/visualization.es474.js.map +1 -1
- package/dist/visualization.es475.js +22 -36
- package/dist/visualization.es475.js.map +1 -1
- package/dist/visualization.es476.js +36 -51
- package/dist/visualization.es476.js.map +1 -1
- package/dist/visualization.es477.js +19 -3
- package/dist/visualization.es477.js.map +1 -1
- package/dist/visualization.es478.js +41 -3
- package/dist/visualization.es478.js.map +1 -1
- package/dist/visualization.es479.js +58 -7
- package/dist/visualization.es479.js.map +1 -1
- package/dist/visualization.es48.js +7 -35
- package/dist/visualization.es48.js.map +1 -1
- package/dist/visualization.es480.js +3 -15
- package/dist/visualization.es480.js.map +1 -1
- package/dist/visualization.es481.js +3 -2
- package/dist/visualization.es481.js.map +1 -1
- package/dist/visualization.es482.js +7 -2
- package/dist/visualization.es482.js.map +1 -1
- package/dist/visualization.es483.js +16 -2
- package/dist/visualization.es483.js.map +1 -1
- package/dist/visualization.es484.js +2 -7
- package/dist/visualization.es484.js.map +1 -1
- package/dist/visualization.es485.js +2 -35
- package/dist/visualization.es485.js.map +1 -1
- package/dist/visualization.es486.js +2 -4
- package/dist/visualization.es486.js.map +1 -1
- package/dist/visualization.es487.js +29 -4
- package/dist/visualization.es487.js.map +1 -1
- package/dist/visualization.es488.js +119 -6
- package/dist/visualization.es488.js.map +1 -1
- package/dist/visualization.es489.js +29 -12
- package/dist/visualization.es489.js.map +1 -1
- package/dist/visualization.es49.js +7 -34
- package/dist/visualization.es49.js.map +1 -1
- package/dist/visualization.es490.js +11 -2
- package/dist/visualization.es490.js.map +1 -1
- package/dist/visualization.es491.js +13 -3
- package/dist/visualization.es491.js.map +1 -1
- package/dist/visualization.es492.js +32 -3
- package/dist/visualization.es492.js.map +1 -1
- package/dist/visualization.es493.js +27 -9
- package/dist/visualization.es493.js.map +1 -1
- package/dist/visualization.es494.js +10 -4
- package/dist/visualization.es494.js.map +1 -1
- package/dist/visualization.es495.js +12 -32
- package/dist/visualization.es495.js.map +1 -1
- package/dist/visualization.es496.js +18 -29
- package/dist/visualization.es496.js.map +1 -1
- package/dist/visualization.es497.js +21 -117
- package/dist/visualization.es497.js.map +1 -1
- package/dist/visualization.es498.js +16 -29
- package/dist/visualization.es498.js.map +1 -1
- package/dist/visualization.es499.js +95 -9
- package/dist/visualization.es499.js.map +1 -1
- package/dist/visualization.es5.js +46 -113
- package/dist/visualization.es5.js.map +1 -1
- package/dist/visualization.es50.js +7 -10
- package/dist/visualization.es50.js.map +1 -1
- package/dist/visualization.es500.js +28 -13
- package/dist/visualization.es500.js.map +1 -1
- package/dist/visualization.es501.js +69 -30
- package/dist/visualization.es501.js.map +1 -1
- package/dist/visualization.es502.js +50 -27
- package/dist/visualization.es502.js.map +1 -1
- package/dist/visualization.es503.js +34 -10
- package/dist/visualization.es503.js.map +1 -1
- package/dist/visualization.es504.js +40 -11
- package/dist/visualization.es504.js.map +1 -1
- package/dist/visualization.es505.js +3 -17
- package/dist/visualization.es505.js.map +1 -1
- package/dist/visualization.es506.js +3 -23
- package/dist/visualization.es506.js.map +1 -1
- package/dist/visualization.es507.js +3 -16
- package/dist/visualization.es507.js.map +1 -1
- package/dist/visualization.es508.js +3 -96
- package/dist/visualization.es508.js.map +1 -1
- package/dist/visualization.es509.js +3 -28
- package/dist/visualization.es509.js.map +1 -1
- package/dist/visualization.es51.js +18 -52
- package/dist/visualization.es51.js.map +1 -1
- package/dist/visualization.es510.js +3 -71
- package/dist/visualization.es510.js.map +1 -1
- package/dist/visualization.es511.js +3 -51
- package/dist/visualization.es511.js.map +1 -1
- package/dist/visualization.es512.js +6 -33
- package/dist/visualization.es512.js.map +1 -1
- package/dist/visualization.es513.js +48 -41
- package/dist/visualization.es513.js.map +1 -1
- package/dist/visualization.es514.js +3 -61
- package/dist/visualization.es514.js.map +1 -1
- package/dist/visualization.es515.js +5 -236
- package/dist/visualization.es515.js.map +1 -1
- package/dist/visualization.es516.js +4 -992
- package/dist/visualization.es516.js.map +1 -1
- package/dist/visualization.es517.js +3 -29
- package/dist/visualization.es517.js.map +1 -1
- package/dist/visualization.es518.js +6 -9
- package/dist/visualization.es518.js.map +1 -1
- package/dist/visualization.es519.js +4 -9
- package/dist/visualization.es519.js.map +1 -1
- package/dist/visualization.es52.js +32 -42
- package/dist/visualization.es52.js.map +1 -1
- package/dist/visualization.es520.js +23 -6
- package/dist/visualization.es520.js.map +1 -1
- package/dist/visualization.es521.js +53 -8
- package/dist/visualization.es521.js.map +1 -1
- package/dist/visualization.es522.js +20 -6
- package/dist/visualization.es522.js.map +1 -1
- package/dist/visualization.es523.js +7 -6
- package/dist/visualization.es523.js.map +1 -1
- package/dist/visualization.es524.js +33 -13
- package/dist/visualization.es524.js.map +1 -1
- package/dist/visualization.es525.js +3 -5
- package/dist/visualization.es525.js.map +1 -1
- package/dist/visualization.es526.js +3 -6
- package/dist/visualization.es526.js.map +1 -1
- package/dist/visualization.es527.js +6 -6
- package/dist/visualization.es527.js.map +1 -1
- package/dist/visualization.es528.js +12 -6
- package/dist/visualization.es528.js.map +1 -1
- package/dist/visualization.es529.js +2 -4
- package/dist/visualization.es529.js.map +1 -1
- package/dist/visualization.es53.js +66 -27
- package/dist/visualization.es53.js.map +1 -1
- package/dist/visualization.es530.js +3 -4
- package/dist/visualization.es530.js.map +1 -1
- package/dist/visualization.es531.js +3 -9
- package/dist/visualization.es531.js.map +1 -1
- package/dist/visualization.es532.js +9 -32
- package/dist/visualization.es532.js.map +1 -1
- package/dist/visualization.es533.js +4 -29
- package/dist/visualization.es533.js.map +1 -1
- package/dist/visualization.es534.js +31 -32
- package/dist/visualization.es534.js.map +1 -1
- package/dist/visualization.es535.js +10 -25
- package/dist/visualization.es535.js.map +1 -1
- package/dist/visualization.es536.js +78 -46
- package/dist/visualization.es536.js.map +1 -1
- package/dist/visualization.es537.js +3 -9
- package/dist/visualization.es537.js.map +1 -1
- package/dist/visualization.es538.js +35 -15
- package/dist/visualization.es538.js.map +1 -1
- package/dist/visualization.es539.js +54 -16
- package/dist/visualization.es539.js.map +1 -1
- package/dist/visualization.es54.js +258 -64
- package/dist/visualization.es54.js.map +1 -1
- package/dist/visualization.es540.js +32 -16
- package/dist/visualization.es540.js.map +1 -1
- package/dist/visualization.es541.js +34 -24
- package/dist/visualization.es541.js.map +1 -1
- package/dist/visualization.es542.js +12 -5
- package/dist/visualization.es542.js.map +1 -1
- package/dist/visualization.es543.js +236 -9
- package/dist/visualization.es543.js.map +1 -1
- package/dist/visualization.es544.js +991 -12
- package/dist/visualization.es544.js.map +1 -1
- package/dist/visualization.es545.js +62 -8
- package/dist/visualization.es545.js.map +1 -1
- package/dist/visualization.es546.js +30 -8
- package/dist/visualization.es546.js.map +1 -1
- package/dist/visualization.es547.js +10 -19
- package/dist/visualization.es547.js.map +1 -1
- package/dist/visualization.es548.js +12 -61
- package/dist/visualization.es548.js.map +1 -1
- package/dist/visualization.es549.js +8 -28
- package/dist/visualization.es549.js.map +1 -1
- package/dist/visualization.es55.js +147 -43
- package/dist/visualization.es55.js.map +1 -1
- package/dist/visualization.es550.js +8 -5
- package/dist/visualization.es550.js.map +1 -1
- package/dist/visualization.es551.js +19 -3
- package/dist/visualization.es551.js.map +1 -1
- package/dist/visualization.es552.js +63 -2
- package/dist/visualization.es552.js.map +1 -1
- package/dist/visualization.es553.js +28 -282
- package/dist/visualization.es553.js.map +1 -1
- package/dist/visualization.es554.js +5 -2
- package/dist/visualization.es554.js.map +1 -1
- package/dist/visualization.es555.js +3 -127
- package/dist/visualization.es555.js.map +1 -1
- package/dist/visualization.es556.js +2 -19
- package/dist/visualization.es556.js.map +1 -1
- package/dist/visualization.es557.js +18 -3
- package/dist/visualization.es557.js.map +1 -1
- package/dist/visualization.es558.js +281 -3
- package/dist/visualization.es558.js.map +1 -1
- package/dist/visualization.es559.js +2 -16
- package/dist/visualization.es559.js.map +1 -1
- package/dist/visualization.es56.js +25 -60
- package/dist/visualization.es56.js.map +1 -1
- package/dist/visualization.es560.js +127 -3
- package/dist/visualization.es560.js.map +1 -1
- package/dist/visualization.es561.js +9 -9
- package/dist/visualization.es561.js.map +1 -1
- package/dist/visualization.es562.js +51 -4
- package/dist/visualization.es562.js.map +1 -1
- package/dist/visualization.es563.js +7 -5
- package/dist/visualization.es563.js.map +1 -1
- package/dist/visualization.es564.js +4 -9
- package/dist/visualization.es564.js.map +1 -1
- package/dist/visualization.es565.js +3 -7
- package/dist/visualization.es565.js.map +1 -1
- package/dist/visualization.es566.js +3 -4
- package/dist/visualization.es566.js.map +1 -1
- package/dist/visualization.es567.js +4 -4
- package/dist/visualization.es567.js.map +1 -1
- package/dist/visualization.es568.js +4 -4
- package/dist/visualization.es568.js.map +1 -1
- package/dist/visualization.es569.js +15 -11
- package/dist/visualization.es569.js.map +1 -1
- package/dist/visualization.es57.js +21 -3
- package/dist/visualization.es57.js.map +1 -1
- package/dist/visualization.es570.js +3 -9
- package/dist/visualization.es570.js.map +1 -1
- package/dist/visualization.es571.js +9 -30
- package/dist/visualization.es571.js.map +1 -1
- package/dist/visualization.es572.js +4 -24
- package/dist/visualization.es572.js.map +1 -1
- package/dist/visualization.es573.js +5 -51
- package/dist/visualization.es573.js.map +1 -1
- package/dist/visualization.es574.js +11 -3
- package/dist/visualization.es574.js.map +1 -1
- package/dist/visualization.es575.js +9 -8
- package/dist/visualization.es575.js.map +1 -1
- package/dist/visualization.es576.js +30 -20
- package/dist/visualization.es576.js.map +1 -1
- package/dist/visualization.es577.js +24 -7
- package/dist/visualization.es577.js.map +1 -1
- package/dist/visualization.es578.js +3 -6
- package/dist/visualization.es578.js.map +1 -1
- package/dist/visualization.es579.js +8 -5
- package/dist/visualization.es579.js.map +1 -1
- package/dist/visualization.es58.js +18 -47
- package/dist/visualization.es58.js.map +1 -1
- package/dist/visualization.es580.js +33 -7
- package/dist/visualization.es580.js.map +1 -1
- package/dist/visualization.es581.js +25 -16
- package/dist/visualization.es581.js.map +1 -1
- package/dist/visualization.es582.js +45 -4
- package/dist/visualization.es582.js.map +1 -1
- package/dist/visualization.es583.js +9 -7
- package/dist/visualization.es583.js.map +1 -1
- package/dist/visualization.es584.js +15 -35
- package/dist/visualization.es584.js.map +1 -1
- package/dist/visualization.es585.js +16 -9
- package/dist/visualization.es585.js.map +1 -1
- package/dist/visualization.es586.js +16 -33
- package/dist/visualization.es586.js.map +1 -1
- package/dist/visualization.es587.js +24 -10
- package/dist/visualization.es587.js.map +1 -1
- package/dist/visualization.es588.js +4 -8
- package/dist/visualization.es588.js.map +1 -1
- package/dist/visualization.es589.js +20 -18
- package/dist/visualization.es589.js.map +1 -1
- package/dist/visualization.es59.js +20 -3
- package/dist/visualization.es59.js.map +1 -1
- package/dist/visualization.es590.js +7 -7
- package/dist/visualization.es590.js.map +1 -1
- package/dist/visualization.es591.js +6 -7
- package/dist/visualization.es591.js.map +1 -1
- package/dist/visualization.es592.js +5 -13
- package/dist/visualization.es592.js.map +1 -1
- package/dist/visualization.es593.js +7 -72
- package/dist/visualization.es593.js.map +1 -1
- package/dist/visualization.es594.js +15 -29
- package/dist/visualization.es594.js.map +1 -1
- package/dist/visualization.es595.js +4 -5
- package/dist/visualization.es595.js.map +1 -1
- package/dist/visualization.es596.js +6 -25
- package/dist/visualization.es596.js.map +1 -1
- package/dist/visualization.es597.js +34 -11
- package/dist/visualization.es597.js.map +1 -1
- package/dist/visualization.es598.js +8 -4
- package/dist/visualization.es598.js.map +1 -1
- package/dist/visualization.es599.js +33 -4
- package/dist/visualization.es599.js.map +1 -1
- package/dist/visualization.es6.js +317 -294
- package/dist/visualization.es6.js.map +1 -1
- package/dist/visualization.es60.js +69 -281
- package/dist/visualization.es60.js.map +1 -1
- package/dist/visualization.es600.js +29 -4
- package/dist/visualization.es600.js.map +1 -1
- package/dist/visualization.es601.js +10 -13
- package/dist/visualization.es601.js.map +1 -1
- package/dist/visualization.es602.js +9 -17
- package/dist/visualization.es602.js.map +1 -1
- package/dist/visualization.es603.js +18 -13
- package/dist/visualization.es603.js.map +1 -1
- package/dist/visualization.es604.js +7 -13
- package/dist/visualization.es604.js.map +1 -1
- package/dist/visualization.es605.js +7 -8
- package/dist/visualization.es605.js.map +1 -1
- package/dist/visualization.es606.js +2 -2
- package/dist/visualization.es607.js +3 -3
- package/dist/visualization.es608.js +2 -2
- package/dist/visualization.es61.js +81 -19
- package/dist/visualization.es61.js.map +1 -1
- package/dist/visualization.es612.js +4 -4
- package/dist/visualization.es613.js +13 -4
- package/dist/visualization.es613.js.map +1 -1
- package/dist/visualization.es614.js +71 -7
- package/dist/visualization.es614.js.map +1 -1
- package/dist/visualization.es615.js +29 -6
- package/dist/visualization.es615.js.map +1 -1
- package/dist/visualization.es616.js +5 -18
- package/dist/visualization.es616.js.map +1 -1
- package/dist/visualization.es617.js +25 -14
- package/dist/visualization.es617.js.map +1 -1
- package/dist/visualization.es618.js +11 -32
- package/dist/visualization.es618.js.map +1 -1
- package/dist/visualization.es619.js +4 -290
- package/dist/visualization.es619.js.map +1 -1
- package/dist/visualization.es62.js +22 -54
- package/dist/visualization.es62.js.map +1 -1
- package/dist/visualization.es620.js +4 -3
- package/dist/visualization.es620.js.map +1 -1
- package/dist/visualization.es621.js +4 -11
- package/dist/visualization.es621.js.map +1 -1
- package/dist/visualization.es622.js +13 -4
- package/dist/visualization.es622.js.map +1 -1
- package/dist/visualization.es623.js +17 -5
- package/dist/visualization.es623.js.map +1 -1
- package/dist/visualization.es624.js +12 -4
- package/dist/visualization.es624.js.map +1 -1
- package/dist/visualization.es625.js +13 -13
- package/dist/visualization.es625.js.map +1 -1
- package/dist/visualization.es626.js +7 -116
- package/dist/visualization.es626.js.map +1 -1
- package/dist/visualization.es627.js +4 -65
- package/dist/visualization.es627.js.map +1 -1
- package/dist/visualization.es628.js +8 -4
- package/dist/visualization.es628.js.map +1 -1
- package/dist/visualization.es629.js +5 -6
- package/dist/visualization.es629.js.map +1 -1
- package/dist/visualization.es63.js +23 -111
- package/dist/visualization.es63.js.map +1 -1
- package/dist/visualization.es630.js +32 -7
- package/dist/visualization.es630.js.map +1 -1
- package/dist/visualization.es631.js +18 -16
- package/dist/visualization.es631.js.map +1 -1
- package/dist/visualization.es632.js +15 -19
- package/dist/visualization.es632.js.map +1 -1
- package/dist/visualization.es633.js +32 -9
- package/dist/visualization.es633.js.map +1 -1
- package/dist/visualization.es634.js +3 -3
- package/dist/visualization.es634.js.map +1 -1
- package/dist/visualization.es635.js +10 -27
- package/dist/visualization.es635.js.map +1 -1
- package/dist/visualization.es636.js +291 -6
- package/dist/visualization.es636.js.map +1 -1
- package/dist/visualization.es637.js +3 -10
- package/dist/visualization.es637.js.map +1 -1
- package/dist/visualization.es638.js +4 -5
- package/dist/visualization.es638.js.map +1 -1
- package/dist/visualization.es639.js +4 -10
- package/dist/visualization.es639.js.map +1 -1
- package/dist/visualization.es64.js +179 -7
- package/dist/visualization.es64.js.map +1 -1
- package/dist/visualization.es640.js +13 -21
- package/dist/visualization.es640.js.map +1 -1
- package/dist/visualization.es641.js +118 -2
- package/dist/visualization.es641.js.map +1 -1
- package/dist/visualization.es642.js +28 -12
- package/dist/visualization.es642.js.map +1 -1
- package/dist/visualization.es643.js +6 -303
- package/dist/visualization.es643.js.map +1 -1
- package/dist/visualization.es644.js +9 -25
- package/dist/visualization.es644.js.map +1 -1
- package/dist/visualization.es645.js +6 -77
- package/dist/visualization.es645.js.map +1 -1
- package/dist/visualization.es646.js +11 -34
- package/dist/visualization.es646.js.map +1 -1
- package/dist/visualization.es647.js +20 -11
- package/dist/visualization.es647.js.map +1 -1
- package/dist/visualization.es648.js +2 -8
- package/dist/visualization.es648.js.map +1 -1
- package/dist/visualization.es649.js +11 -8
- package/dist/visualization.es649.js.map +1 -1
- package/dist/visualization.es65.js +137 -30
- package/dist/visualization.es65.js.map +1 -1
- package/dist/visualization.es650.js +27 -3
- package/dist/visualization.es650.js.map +1 -1
- package/dist/visualization.es651.js +69 -0
- package/dist/visualization.es651.js.map +1 -0
- package/dist/visualization.es652.js +8 -0
- package/dist/visualization.es652.js.map +1 -0
- package/dist/visualization.es653.js +11 -0
- package/dist/visualization.es653.js.map +1 -0
- package/dist/visualization.es654.js +11 -0
- package/dist/visualization.es654.js.map +1 -0
- package/dist/visualization.es655.js +20 -0
- package/dist/visualization.es655.js.map +1 -0
- package/dist/visualization.es656.js +22 -0
- package/dist/visualization.es656.js.map +1 -0
- package/dist/visualization.es657.js +13 -0
- package/dist/visualization.es657.js.map +1 -0
- package/dist/visualization.es658.js +7 -0
- package/dist/visualization.es658.js.map +1 -0
- package/dist/visualization.es659.js +16 -0
- package/dist/visualization.es659.js.map +1 -0
- package/dist/visualization.es66.js +176 -48
- package/dist/visualization.es66.js.map +1 -1
- package/dist/visualization.es660.js +11 -0
- package/dist/visualization.es660.js.map +1 -0
- package/dist/visualization.es67.js +62 -50
- package/dist/visualization.es67.js.map +1 -1
- package/dist/visualization.es68.js +39 -42
- package/dist/visualization.es68.js.map +1 -1
- package/dist/visualization.es69.js +80 -5
- package/dist/visualization.es69.js.map +1 -1
- package/dist/visualization.es7.js +300 -166
- package/dist/visualization.es7.js.map +1 -1
- package/dist/visualization.es70.js +46 -5
- package/dist/visualization.es70.js.map +1 -1
- package/dist/visualization.es71.js +54 -16
- package/dist/visualization.es71.js.map +1 -1
- package/dist/visualization.es72.js +6 -4
- package/dist/visualization.es72.js.map +1 -1
- package/dist/visualization.es73.js +24 -25
- package/dist/visualization.es73.js.map +1 -1
- package/dist/visualization.es74.js +47 -30
- package/dist/visualization.es74.js.map +1 -1
- package/dist/visualization.es75.js +31 -5
- package/dist/visualization.es75.js.map +1 -1
- package/dist/visualization.es76.js +34 -7
- package/dist/visualization.es76.js.map +1 -1
- package/dist/visualization.es77.js +11 -68
- package/dist/visualization.es77.js.map +1 -1
- package/dist/visualization.es78.js +56 -10
- package/dist/visualization.es78.js.map +1 -1
- package/dist/visualization.es79.js +28 -39
- package/dist/visualization.es79.js.map +1 -1
- package/dist/visualization.es8.js +106 -137
- package/dist/visualization.es8.js.map +1 -1
- package/dist/visualization.es80.js +18 -80
- package/dist/visualization.es80.js.map +1 -1
- package/dist/visualization.es81.js +37 -46
- package/dist/visualization.es81.js.map +1 -1
- package/dist/visualization.es82.js +151 -54
- package/dist/visualization.es82.js.map +1 -1
- package/dist/visualization.es83.js +27 -7
- package/dist/visualization.es83.js.map +1 -1
- package/dist/visualization.es84.js +150 -26
- package/dist/visualization.es84.js.map +1 -1
- package/dist/visualization.es85.js +42 -12
- package/dist/visualization.es85.js.map +1 -1
- package/dist/visualization.es86.js +301 -56
- package/dist/visualization.es86.js.map +1 -1
- package/dist/visualization.es87.js +36 -36
- package/dist/visualization.es87.js.map +1 -1
- package/dist/visualization.es88.js +34 -193
- package/dist/visualization.es88.js.map +1 -1
- package/dist/visualization.es89.js +8 -142
- package/dist/visualization.es89.js.map +1 -1
- package/dist/visualization.es9.js +312 -26
- package/dist/visualization.es9.js.map +1 -1
- package/dist/visualization.es90.js +54 -187
- package/dist/visualization.es90.js.map +1 -1
- package/dist/visualization.es91.js +44 -120
- package/dist/visualization.es91.js.map +1 -1
- package/dist/visualization.es92.js +43 -12
- package/dist/visualization.es92.js.map +1 -1
- package/dist/visualization.es93.js +8 -74
- package/dist/visualization.es93.js.map +1 -1
- package/dist/visualization.es94.js +7 -32
- package/dist/visualization.es94.js.map +1 -1
- package/dist/visualization.es95.js +112 -12
- package/dist/visualization.es95.js.map +1 -1
- package/dist/visualization.es96.js +29 -5
- package/dist/visualization.es96.js.map +1 -1
- package/dist/visualization.es97.js +65 -5
- package/dist/visualization.es97.js.map +1 -1
- package/dist/visualization.es98.js +62 -5
- package/dist/visualization.es98.js.map +1 -1
- package/dist/visualization.es99.js +4 -32
- package/dist/visualization.es99.js.map +1 -1
- package/package.json +1 -1
- package/dist/src/components/Heatmap/HeatmapCell.d.ts +0 -29
- package/dist/src/components/Heatmap/HeatmapCell.d.ts.map +0 -1
- package/dist/src/components/Heatmap/HeatmapCells.d.ts +0 -29
- package/dist/src/components/Heatmap/HeatmapCells.d.ts.map +0 -1
- package/dist/src/components/Heatmap/HeatmapStaticSvg.d.ts +0 -32
- package/dist/src/components/Heatmap/HeatmapStaticSvg.d.ts.map +0 -1
- package/dist/src/components/Heatmap/scrollable/HeatmapMiniMap.d.ts.map +0 -1
- package/dist/src/components/Heatmap/scrollable/HeatmapMiniMapPopup.d.ts.map +0 -1
- package/dist/src/components/Heatmap/scrollable/HeatmapScrollableGrid.d.ts +0 -29
- package/dist/src/components/Heatmap/scrollable/HeatmapScrollableGrid.d.ts.map +0 -1
- package/dist/src/components/Heatmap/scrollable/heatmapExport.d.ts +0 -25
- package/dist/src/components/Heatmap/scrollable/heatmapExport.d.ts.map +0 -1
- package/dist/visualization.es33.js +0 -271
- package/dist/visualization.es33.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"visualization.es130.js","sources":["../src/components/Heatmap/scrollable/HeatmapMiniMapPopup.tsx"],"sourcesContent":["import { useCallback, useEffect, useRef, useState, type ReactNode, type RefObject } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport type { HeatmapLegendFrame } from \"../types\";\nimport HeatmapMiniMap, { type HeatmapMiniMapProps } from \"./HeatmapMiniMap\";\n\n// Nearly the whole screen, with enough backdrop showing that it reads as a popup.\nconst MINI_MAP_POPUP_WIDTH_VW = 94;\nconst MINI_MAP_POPUP_HEIGHT_VH = 90;\nconst MINI_MAP_POPUP_PADDING = 16;\n// Portaled to <body>, since a transformed ancestor would trap `position: fixed`, and stacked\n// above anything else the host page puts on top.\nconst MINI_MAP_POPUP_Z_INDEX = 2147483647;\n// The legend's band across the top: long enough to sweep with some precision.\nconst LEGEND_BAND_WIDTH = 440;\nconst LEGEND_BAND_HEIGHT = 40;\nconst LEGEND_BAND_GAP = 12;\n\ntype MiniMapPassThroughProps = Omit<HeatmapMiniMapProps, \"width\" | \"height\" | \"onCanvasClick\">;\n\nexport interface HeatmapMiniMapPopupProps extends MiniMapPassThroughProps {\n onClose: () => void;\n /** The inline minimap's container, where a click doesn't count as outside the popup. */\n containerRef: RefObject<HTMLDivElement | null>;\n /** Draws the plot's legend in a band across the top. Omitted where the plot shows no legend. */\n legend?: (frame: HeatmapLegendFrame) => ReactNode;\n}\n\nconst HeatmapMiniMapPopup = ({ onClose, containerRef, legend, ...miniMapProps }: HeatmapMiniMapPopupProps) => {\n const popupRef = useRef<HTMLDivElement | null>(null);\n // The legend's tooltips portal into the backdrop to show above the popup. State rather than a\n // ref, so the legend re-renders once it exists.\n const [backdrop, setBackdrop] = useState<HTMLDivElement | null>(null);\n useEffect(() => {\n const handlePointerDown = (event: PointerEvent) => {\n const target = event.target as Node;\n if (containerRef.current?.contains(target) || popupRef.current?.contains(target)) return;\n // An overlay the legend opened is part of the popup too; the backdrop itself is outside it.\n if (backdrop && target !== backdrop && backdrop.contains(target)) return;\n onClose();\n };\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") onClose();\n };\n document.addEventListener(\"pointerdown\", handlePointerDown);\n document.addEventListener(\"keydown\", handleKeyDown);\n return () => {\n document.removeEventListener(\"pointerdown\", handlePointerDown);\n document.removeEventListener(\"keydown\", handleKeyDown);\n };\n }, [containerRef, onClose, backdrop]);\n\n // The canvas needs pixel dimensions; the popup is sized in vw/vh, so the area is measured as it resizes.\n const [size, setSize] = useState<{ width: number; height: number } | null>(null);\n // A spinner covers the first draw, which can take a moment on a large grid.\n const [isReady, setIsReady] = useState(false);\n const handleReady = useCallback(() => setIsReady(true), []);\n const observerRef = useRef<ResizeObserver | null>(null);\n const areaRef = useCallback((node: HTMLDivElement | null) => {\n observerRef.current?.disconnect();\n observerRef.current = null;\n if (!node) {\n setSize(null);\n return;\n }\n const observer = new ResizeObserver(([entry]) => {\n if (!entry) return;\n const { width, height } = entry.contentRect;\n setSize({ width: Math.floor(width), height: Math.floor(height) });\n });\n observer.observe(node);\n observerRef.current = observer;\n }, []);\n\n // Narrower only where the popup itself is: on a phone.\n const legendBandWidth = Math.min(LEGEND_BAND_WIDTH, size?.width ?? LEGEND_BAND_WIDTH);\n\n return createPortal(\n <div\n ref={setBackdrop}\n style={{ position: \"fixed\", inset: 0, zIndex: MINI_MAP_POPUP_Z_INDEX, background: \"rgba(0,0,0,0.45)\", display: \"flex\", alignItems: \"center\", justifyContent: \"center\" }}\n >\n <style>{\"@keyframes heatmapMiniMapSpinnerRotate { to { transform: rotate(360deg); } }\"}</style>\n <div\n ref={popupRef}\n style={{\n position: \"relative\",\n width: `${MINI_MAP_POPUP_WIDTH_VW}vw`,\n height: `${MINI_MAP_POPUP_HEIGHT_VH}vh`,\n boxSizing: \"border-box\",\n display: \"flex\",\n flexDirection: \"column\",\n background: \"#fff\",\n border: \"1px solid #d5d5d5\",\n borderRadius: 8,\n boxShadow: \"0 8px 32px rgba(0,0,0,0.25)\",\n overflow: \"hidden\",\n }}\n >\n <div\n style={{\n flexShrink: 0,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n padding: `10px ${MINI_MAP_POPUP_PADDING}px`,\n background: \"#f7f7f8\",\n borderBottom: \"1px solid #e5e5e5\",\n }}\n >\n <span style={{ fontSize: 14, fontWeight: 600, color: \"#333\" }}>Minimap</span>\n <button\n type=\"button\"\n aria-label=\"Close expanded minimap\"\n onClick={onClose}\n style={{\n width: 26,\n height: 26,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n padding: 0,\n border: \"none\",\n borderRadius: \"50%\",\n background: \"#fff\",\n color: \"#555\",\n fontSize: 16,\n lineHeight: 1,\n cursor: \"pointer\",\n }}\n >\n ×\n </button>\n </div>\n <div style={{ flex: 1, minHeight: 0, display: \"flex\", flexDirection: \"column\", gap: LEGEND_BAND_GAP, padding: MINI_MAP_POPUP_PADDING }}>\n {legend && (\n // Above the map rather than beside it: the popup is wide, so a band costs the map less.\n <svg\n width={legendBandWidth}\n height={LEGEND_BAND_HEIGHT}\n style={{ flexShrink: 0, display: \"block\", overflow: \"visible\" }}\n >\n {legend({\n width: legendBandWidth,\n height: LEGEND_BAND_HEIGHT,\n orientation: \"horizontal\",\n overlayContainer: backdrop ?? undefined,\n })}\n </svg>\n )}\n <div ref={areaRef} style={{ flex: 1, minHeight: 0, position: \"relative\" }}>\n {/* Not gated on `size`, so it shows on the first paint rather than after the measurement. */}\n {!isReady && (\n <div\n aria-label=\"Loading minimap\"\n style={{\n position: \"absolute\",\n inset: 0,\n zIndex: 1,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n pointerEvents: \"none\",\n }}\n >\n <div\n style={{\n width: 40,\n height: 40,\n borderRadius: \"50%\",\n border: \"4px solid #e5e5e5\",\n // The minimap's viewport-rectangle color.\n borderTopColor: \"#0d0f98\",\n animation: \"heatmapMiniMapSpinnerRotate 0.8s linear infinite\",\n }}\n />\n </div>\n )}\n {size && size.width > 0 && size.height > 0 && (\n <HeatmapMiniMap {...miniMapProps} width={size.width} height={size.height} onReady={handleReady} />\n )}\n </div>\n </div>\n </div>\n </div>,\n document.body\n );\n};\n\nexport default HeatmapMiniMapPopup;\n"],"names":["MINI_MAP_POPUP_WIDTH_VW","MINI_MAP_POPUP_HEIGHT_VH","MINI_MAP_POPUP_PADDING","MINI_MAP_POPUP_Z_INDEX","LEGEND_BAND_WIDTH","LEGEND_BAND_HEIGHT","LEGEND_BAND_GAP","HeatmapMiniMapPopup","t0","$","_c","containerRef","legend","miniMapProps","onClose","popupRef","useRef","backdrop","setBackdrop","useState","t1","t2","handlePointerDown","event","target","current","contains","handleKeyDown","event_0","key","document","addEventListener","removeEventListener","useEffect","size","setSize","isReady","setIsReady","t3","Symbol","for","handleReady","observerRef","t4","node","disconnect","observer","ResizeObserver","t5","entry","width","height","contentRect","Math","floor","observe","areaRef","legendBandWidth","min","t6","position","inset","zIndex","background","display","alignItems","justifyContent","jsx","t7","t8","t9","boxSizing","flexDirection","border","borderRadius","boxShadow","overflow","flexShrink","padding","borderBottom","fontSize","fontWeight","color","t10","lineHeight","cursor","t11","t12","flex","minHeight","gap","t13","orientation","overlayContainer","undefined","t14","t15","pointerEvents","borderTopColor","animation","t16","HeatmapMiniMap","t17","jsxs","t18","t19","createPortal","body"],"mappings":";;;;;AAMA,MAAMA,IAA0B,IAC1BC,KAA2B,IAC3BC,IAAyB,IAGzBC,KAAyB,YAEzBC,IAAoB,KACpBC,IAAqB,IACrBC,KAAkB,IAYlBC,KAAsBC,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA;AAAA,MAAAC,GAAAC,GAAAC,GAAAC;AAAA,EAAAL,SAAAD,KAAC;AAAA,IAAAM,SAAAA;AAAAA,IAAAH,cAAAA;AAAAA,IAAAC,QAAAA;AAAAA,IAAA,GAAAC;AAAAA,EAAAA,IAAAL,GAA4EC,OAAAD,GAAAC,OAAAE,GAAAF,OAAAG,GAAAH,OAAAI,GAAAJ,OAAAK,MAAAH,IAAAF,EAAA,CAAA,GAAAG,IAAAH,EAAA,CAAA,GAAAI,IAAAJ,EAAA,CAAA,GAAAK,IAAAL,EAAA,CAAA;AACvG,QAAAM,IAAiBC,EAA8B,IAAI,GAGnD,CAAAC,GAAAC,CAAA,IAAgCC,EAAgC,IAAI;AAAE,MAAAC,GAAAC;AAAA,EAAAZ,EAAA,CAAA,MAAAQ,KAAAR,SAAAE,KAAAF,EAAA,CAAA,MAAAK,KAC5DM,IAAAA,MAAA;AACR,UAAAE,IAA0BC,CAAAA,MAAA;AACxB,YAAAC,IAAeD,EAAKC;AACpB,MAAIb,EAAYc,SAAkBC,SAACF,CAA4C,KAAjCT,EAAQU,SAAkBC,SAACF,CAAM,KAE3EP,KAAYO,MAAWP,KAAYA,EAAQS,SAAUF,CAAM,KAC/DV,EAAAA;AAAAA,IAAS,GAEXa,IAAsBC,CAAAA,MAAA;AACpB,MAAIL,EAAKM,QAAS,YAAUf,EAAAA;AAAAA,IAAU;AAExCgB,oBAAQC,iBAAkB,eAAeT,CAAiB,GAC1DQ,SAAQC,iBAAkB,WAAWJ,CAAa,GAC3C,MAAA;AACLG,eAAQE,oBAAqB,eAAeV,CAAiB,GAC7DQ,SAAQE,oBAAqB,WAAWL,CAAa;AAAA,IAAC;AAAA,EACvD,GACAN,KAACV,GAAcG,GAASG,CAAQ,GAACR,OAAAQ,GAAAR,OAAAE,GAAAF,OAAAK,GAAAL,OAAAW,GAAAX,OAAAY,MAAAD,IAAAX,EAAA,CAAA,GAAAY,IAAAZ,EAAA,CAAA,IAjBpCwB,EAAUb,GAiBPC,CAAiC;AAGpC,QAAA,CAAAa,GAAAC,CAAA,IAAwBhB,EAAmD,IAAI,GAE/E,CAAAiB,GAAAC,CAAA,IAA8BlB,EAAS,EAAK;AAAE,MAAAmB;AAAA,EAAA7B,EAAA,EAAA,MAAA8B,uBAAAC,IAAA,2BAAA,KACdF,IAAAA,MAAMD,EAAW,EAAI,GAAC5B,QAAA6B,KAAAA,IAAA7B,EAAA,EAAA;AAAtD,QAAAgC,IAAoBH,GACpBI,IAAoB1B,EAA8B,IAAI;AAAE,MAAA2B;AAAA,EAAAlC,EAAA,EAAA,MAAA8B,uBAAAC,IAAA,2BAAA,KAC5BG,IAAAC,CAAAA,MAAA;AAG1B,QAFAF,EAAWjB,SAAoBoB,WAAAA,GAC/BH,EAAWjB,UAAW,MAClB,CAACmB,GAAI;AACPT,MAAAA,EAAQ,IAAI;AAAC;AAAA,IAAA;AAGf,UAAAW,IAAiB,IAAIC,eAAeC,CAAAA,MAAA;AAAC,YAAA,CAAAC,CAAA,IAAAD;AACnC,UAAI,CAACC;AAAK;AACV,YAAA;AAAA,QAAAC,OAAAA;AAAAA,QAAAC,QAAAA;AAAAA,MAAAA,IAA0BF,EAAKG;AAC/BjB,MAAAA,EAAQ;AAAA,QAAAe,OAASG,KAAIC,MAAOJ,CAAK;AAAA,QAACC,QAAUE,KAAIC,MAAOH,CAAM;AAAA,MAAA,CAAG;AAAA,IAAC,CAClE;AACDL,IAAAA,EAAQS,QAASX,CAAI,GACrBF,EAAWjB,UAAWqB;AAAAA,EAAH,GACpBrC,QAAAkC,KAAAA,IAAAlC,EAAA,EAAA;AAdD,QAAA+C,IAAgBb,GAiBhBc,IAAwBJ,KAAIK,IAAKtD,GAAmB8B,GAAIgB,SAAJ9C,CAAgC;AAAE,MAAA4C,GAAAW;AAAA,EAAAlD,EAAA,EAAA,MAAA8B,uBAAAC,IAAA,2BAAA,KAK3EQ,IAAA;AAAA,IAAAY,UAAY;AAAA,IAAOC,OAAS;AAAA,IAACC,QAAU3D;AAAAA,IAAsB4D,YAAc;AAAA,IAAkBC,SAAW;AAAA,IAAMC,YAAc;AAAA,IAAQC,gBAAkB;AAAA,EAAA,GAE7JP,IAAA,gBAAAQ,EAAA,WAAQ,UAAA,+EAAA,CAA+E,GAAQ1D,QAAAuC,GAAAvC,QAAAkD,MAAAX,IAAAvC,EAAA,EAAA,GAAAkD,IAAAlD,EAAA,EAAA;AAAA,MAAA2D,GAAAC,GAAAC;AAAA,EAAA7D,EAAA,EAAA,MAAA8B,uBAAAC,IAAA,2BAAA,KAGtF4B,IAAA;AAAA,IAAAR,UACK;AAAA,IAAUV,OACb,GAAGlD,CAAuB;AAAA,IAAImD,QAC7B,GAAGlD,EAAwB;AAAA,IAAIsE,WAC5B;AAAA,IAAYP,SACd;AAAA,IAAMQ,eACA;AAAA,IAAQT,YACX;AAAA,IAAMU,QACV;AAAA,IAAmBC,cACb;AAAA,IAACC,WACJ;AAAA,IAA6BC,UAC9B;AAAA,EAAA,GAIHP,IAAA;AAAA,IAAAQ,YACO;AAAA,IAACb,SACJ;AAAA,IAAMC,YACH;AAAA,IAAQC,gBACJ;AAAA,IAAeY,SACtB,QAAQ5E,CAAsB;AAAA,IAAI6D,YAC/B;AAAA,IAASgB,cACP;AAAA,EAAA,GAGhBT,IAAA,gBAAAH,EAAA,UAAa,OAAA;AAAA,IAAAa,UAAY;AAAA,IAAEC,YAAc;AAAA,IAAGC,OAAS;AAAA,EAAA,GAAU,UAAA,WAAO,GAAOzE,QAAA2D,GAAA3D,QAAA4D,GAAA5D,QAAA6D,MAAAF,IAAA3D,EAAA,EAAA,GAAA4D,IAAA5D,EAAA,EAAA,GAAA6D,IAAA7D,EAAA,EAAA;AAAA,MAAA0E;AAAA,EAAA1E,EAAA,EAAA,MAAA8B,uBAAAC,IAAA,2BAAA,KAKpE2C,IAAA;AAAA,IAAAjC,OACE;AAAA,IAAEC,QACD;AAAA,IAAEa,SACD;AAAA,IAAMC,YACH;AAAA,IAAQC,gBACJ;AAAA,IAAQY,SACf;AAAA,IAACL,QACF;AAAA,IAAMC,cACA;AAAA,IAAKX,YACP;AAAA,IAAMmB,OACX;AAAA,IAAMF,UACH;AAAA,IAAEI,YACA;AAAA,IAACC,QACL;AAAA,EAAA,GACT5E,QAAA0E,KAAAA,IAAA1E,EAAA,EAAA;AAAA,MAAA6E;AAAA,EAAA7E,UAAAK,KA9BLwE,+BACS,OAAAjB,GAUPC,UAAAA;AAAAA,IAAAA;AAAAA,IACA,gBAAAH,EAAA,UAAA,EACO,MAAA,UACM,cAAA,0BACFrD,SAAAA,GACF,OAAAqE,GAeR,UAAA,IAAA,CAED;AAAA,EAAA,GACF,GAAM1E,QAAAK,GAAAL,QAAA6E,KAAAA,IAAA7E,EAAA,EAAA;AAAA,MAAA8E;AAAA,EAAA9E,EAAA,EAAA,MAAA8B,uBAAAC,IAAA,2BAAA,KACM+C,IAAA;AAAA,IAAAC,MAAQ;AAAA,IAACC,WAAa;AAAA,IAACzB,SAAW;AAAA,IAAMQ,eAAiB;AAAA,IAAQkB,KAAOpF;AAAAA,IAAewE,SAAW5E;AAAAA,EAAAA,GAAwBO,QAAA8E,KAAAA,IAAA9E,EAAA,EAAA;AAAA,MAAAkF;AAAA,EAAAlF,EAAA,EAAA,MAAAQ,KAAAR,UAAAG,KAAAH,EAAA,EAAA,MAAAgD,KACnIkC,IAAA/E,KAEC,gBAAAuD,EAAA,OAAA,EACSV,OAAAA,GACCpD,QAAAA,GACD,OAAA;AAAA,IAAAwE,YAAc;AAAA,IAACb,SAAW;AAAA,IAAOY,UAAY;AAAA,EAAA,GAEnDhE,UAAAA,EAAO;AAAA,IAAAsC,OACCO;AAAAA,IAAeN,QACd9C;AAAAA,IAAkBuF,aACb;AAAA,IAAYC,kBACP5E,KAAA6E;AAAAA,EAAAA,CACnB,GACH,GACDrF,QAAAQ,GAAAR,QAAAG,GAAAH,QAAAgD,GAAAhD,QAAAkF,KAAAA,IAAAlF,EAAA,EAAA;AAAA,MAAAsF;AAAA,EAAAtF,EAAA,EAAA,MAAA8B,uBAAAC,IAAA,2BAAA,KACyBuD,IAAA;AAAA,IAAAP,MAAQ;AAAA,IAACC,WAAa;AAAA,IAAC7B,UAAY;AAAA,EAAA,GAAYnD,QAAAsF,KAAAA,IAAAtF,EAAA,EAAA;AAAA,MAAAuF;AAAA,EAAAvF,UAAA2B,KAEtE4D,IAAA,CAAC5D,KACA,gBAAA+B,EAAA,OAAA,EACa,cAAA,mBACJ,OAAA;AAAA,IAAAP,UACK;AAAA,IAAUC,OACb;AAAA,IAACC,QACA;AAAA,IAACE,SACA;AAAA,IAAMC,YACH;AAAA,IAAQC,gBACJ;AAAA,IAAQ+B,eACT;AAAA,EAAA,GAGjB,UAAA,gBAAA9B,EAAA,OAAA,EACS,OAAA;AAAA,IAAAjB,OACE;AAAA,IAAEC,QACD;AAAA,IAAEuB,cACI;AAAA,IAAKD,QACX;AAAA,IAAmByB,gBAEX;AAAA,IAASC,WACd;AAAA,EAAA,GACZ,EAAA,CAEL,GACD1F,QAAA2B,GAAA3B,QAAAuF,KAAAA,IAAAvF,EAAA,EAAA;AAAA,MAAA2F;AAAA,EAAA3F,EAAA,EAAA,MAAAI,KAAAJ,UAAAyB,KACAkE,IAAAlE,KAAQA,EAAIgB,QAAS,KAAKhB,EAAIiB,SAAU,KACvC,gBAAAgB,EAACkC,GAAA,KAAmBxF,GAAqB,OAAAqB,EAAIgB,OAAgB,QAAAhB,EAAIiB,QAAkBV,SAAAA,GAAW,GAC/FhC,QAAAI,GAAAJ,QAAAyB,GAAAzB,QAAA2F,KAAAA,IAAA3F,EAAA,EAAA;AAAA,MAAA6F;AAAA,EAAA7F,EAAA,EAAA,MAAAuF,KAAAvF,UAAA2F,KA9BHE,IAAA,gBAAAC,EAAA,OAAA,EAAU/C,QAAgB,OAAAuC,GAEvBC,UAAAA;AAAAA,IAAAA;AAAAA,IA0BAI;AAAAA,EAAAA,GAGH,GAAM3F,QAAAuF,GAAAvF,QAAA2F,GAAA3F,QAAA6F,KAAAA,IAAA7F,EAAA,EAAA;AAAA,MAAA+F;AAAA,EAAA/F,EAAA,EAAA,MAAAkF,KAAAlF,UAAA6F,KA/CRE,IAAA,gBAAAD,EAAA,OAAA,EAAY,OAAAhB,GACTI,UAAAA;AAAAA,IAAAA;AAAAA,IAeDW;AAAAA,EAAAA,GAgCF,GAAM7F,QAAAkF,GAAAlF,QAAA6F,GAAA7F,QAAA+F,KAAAA,IAAA/F,EAAA,EAAA;AAAA,MAAAgG;AAAA,SAAAhG,EAAA,EAAA,MAAA6E,KAAA7E,UAAA+F,KAzGLC,IAAAC,EACL,gBAAAH,EAAA,OAAA,EACOrF,QACE,OAAA8B,GAEPW,UAAAA;AAAAA,IAAAA;AAAAA,IACA,gBAAA4C,EAAA,OAAA,EACOxF,QACE,OAAAqD,GAcPkB,UAAAA;AAAAA,MAAAA;AAAAA,MAmCAkB;AAAAA,IAAAA,EAAAA,CAiDF;AAAA,EAAA,GACF,GACA1E,SAAQ6E,IACV,GAAClG,QAAA6E,GAAA7E,QAAA+F,GAAA/F,QAAAgG,KAAAA,IAAAhG,EAAA,EAAA,GA7GMgG;AA6GN;"}
|
|
1
|
+
{"version":3,"file":"visualization.es130.js","sources":["../src/components/Heatmap/heatmapCellAppearance.ts"],"sourcesContent":["import { scaleLinear } from \"@visx/scale\";\n\n/** A cell outside highlightRange: faint enough that the cells inside it carry the grid. */\nexport const DIMMED_OPACITY = 0.12;\nconst NULL_VALUE_COLOR = \"none\";\n\nexport function getHeatmapColorScale(colors: [string, string, ...string[]], domain: [number, number]) {\n const [minValue, maxValue] = domain;\n return scaleLinear<string>({\n range: colors,\n domain: colors.map((_, i) => minValue + (i * (maxValue - minValue)) / (colors.length - 1)),\n // Held at the end colors rather than extrapolated past them, which interpolates the RGB channels\n // out of range into colors that aren't on the gradient at all.\n clamp: true,\n });\n}\n\n/** Whether a count falls outside highlightRange, and so fades. Nothing fades without a range. */\nexport const isOutsideRange = (count: number | null | undefined, range: [number, number] | null | undefined) =>\n !!range && count != null && (count < range[0] || count > range[1]);\n\n/**\n * A cell's fill. Selection isn't part of it: selected cells are framed instead (see\n * heatmapSelection.ts).\n */\nexport function resolveCellAppearance(\n count: number | null | undefined,\n color: string | undefined,\n isDimmed = false\n): { fill: string; fillOpacity: number } {\n const isNullValue = count == null;\n return {\n fill: isNullValue || color === undefined ? NULL_VALUE_COLOR : color,\n fillOpacity: isNullValue ? 0 : isDimmed ? DIMMED_OPACITY : 1,\n };\n}\n"],"names":["DIMMED_OPACITY","NULL_VALUE_COLOR","getHeatmapColorScale","colors","domain","minValue","maxValue","scaleLinear","range","map","_","i","length","clamp","isOutsideRange","count","resolveCellAppearance","color","isDimmed","isNullValue","fill","undefined","fillOpacity"],"mappings":";AAGO,MAAMA,IAAiB,MACxBC,IAAmB;AAElB,SAASC,EAAqBC,GAAuCC,GAA0B;AACpG,QAAM,CAACC,GAAUC,CAAQ,IAAIF;AAC7B,SAAOG,EAAoB;AAAA,IACzBC,OAAOL;AAAAA,IACPC,QAAQD,EAAOM,IAAI,CAACC,GAAGC,MAAMN,IAAYM,KAAKL,IAAWD,MAAcF,EAAOS,SAAS,EAAE;AAAA;AAAA;AAAA,IAGzFC,OAAO;AAAA,EAAA,CACR;AACH;AAGO,MAAMC,IAAiBA,CAACC,GAAkCP,MAC/D,CAAC,CAACA,KAASO,KAAS,SAASA,IAAQP,EAAM,CAAC,KAAKO,IAAQP,EAAM,CAAC;AAM3D,SAASQ,EACdD,GACAE,GACAC,IAAW,IAC4B;AACvC,QAAMC,IAAcJ,KAAS;AAC7B,SAAO;AAAA,IACLK,MAAMD,KAAeF,MAAUI,SAAYpB,IAAmBgB;AAAAA,IAC9DK,aAAaH,IAAc,IAAID,IAAWlB,IAAiB;AAAA,EAAA;AAE/D;"}
|
|
@@ -1,85 +1,87 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
const
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
1
|
+
const d = "#1a1c1e", C = "#ffffff";
|
|
2
|
+
const x = (n) => `${n.row}-${n.column}`, y = (n) => {
|
|
3
|
+
const [f, r] = n.split("-").map(Number);
|
|
4
|
+
return {
|
|
5
|
+
row: f,
|
|
6
|
+
column: r
|
|
7
|
+
};
|
|
8
|
+
};
|
|
9
|
+
function* $(n, {
|
|
10
|
+
colStart: f,
|
|
11
|
+
colEnd: r,
|
|
12
|
+
rowStart: i,
|
|
13
|
+
rowEnd: H
|
|
11
14
|
}) {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
const r = t.getContext("2d");
|
|
20
|
-
if (!r) return;
|
|
21
|
-
const u = window.devicePixelRatio || 1;
|
|
22
|
-
r.setTransform(u, 0, 0, u, 0, 0), r.clearRect(0, 0, i, a);
|
|
23
|
-
const o = v(e, n.scrollLeft, n.scrollTop, i, a, g);
|
|
24
|
-
r.translate(-n.scrollLeft, -n.scrollTop), y(r, e, o, d.current);
|
|
25
|
-
}, [e, i, a]);
|
|
26
|
-
Y(() => {
|
|
27
|
-
c();
|
|
28
|
-
}, [c]);
|
|
29
|
-
const [p, x] = q({
|
|
30
|
-
left: 0,
|
|
31
|
-
top: 0
|
|
32
|
-
}), G = f((t) => {
|
|
33
|
-
l.current = t, t && x({
|
|
34
|
-
left: t.scrollLeft,
|
|
35
|
-
top: t.scrollTop
|
|
15
|
+
if ((r - f + 1) * (H - i + 1) <= n.size) {
|
|
16
|
+
for (let t = f; t <= r; t++) for (let o = i; o <= H; o++) n.has(x({
|
|
17
|
+
row: o,
|
|
18
|
+
column: t
|
|
19
|
+
})) && (yield {
|
|
20
|
+
row: o,
|
|
21
|
+
column: t
|
|
36
22
|
});
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
for (const t of n) {
|
|
26
|
+
const o = y(t);
|
|
27
|
+
o.column >= f && o.column <= r && o.row >= i && o.row <= H && (yield o);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
function v(n, f, r, i) {
|
|
31
|
+
const {
|
|
32
|
+
xScale: H,
|
|
33
|
+
cellYScale: t,
|
|
34
|
+
binWidth: o,
|
|
35
|
+
binHeight: E,
|
|
36
|
+
gap: e
|
|
37
|
+
} = r, c = (s, l) => n.has(x({
|
|
38
|
+
row: s,
|
|
39
|
+
column: l
|
|
40
|
+
})), u = [], R = [], _ = (s, l, A, a, M, m) => s.push({
|
|
41
|
+
x: A,
|
|
42
|
+
y: a,
|
|
43
|
+
width: M,
|
|
44
|
+
height: m,
|
|
45
|
+
fill: l
|
|
46
|
+
});
|
|
47
|
+
for (const {
|
|
48
|
+
row: s,
|
|
49
|
+
column: l
|
|
50
|
+
} of f) {
|
|
51
|
+
if (!c(s, l)) continue;
|
|
52
|
+
const A = H(l), a = A + o - e, M = t(s) + e, m = t(s) + E, I = A - 2 < 0 ? A + 2 : A, O = a + 2 > i.width ? a - 2 : a, T = M - 2 < 0 ? M + 2 : M, h = m + 2 > i.height ? m - 2 : m, w = c(s + 1, l), S = c(s - 1, l), F = c(s, l - 1), N = c(s, l + 1), D = (k) => k ? e : 2, W = (k) => k ? e : 0, p = [I - D(F), O - I + D(F) + D(N)], L = [T - D(w), h - T + D(w) + D(S)], g = [I - W(F), O - I + W(F) + W(N)], b = [T - W(w), h - T + W(w) + W(S)];
|
|
53
|
+
w || (_(u, d, p[0], T - 2, p[1], 2), _(R, C, g[0], T, g[1], 1)), S || (_(u, d, p[0], h, p[1], 2), _(R, C, g[0], h - 1, g[1], 1)), F || (_(u, d, I - 2, L[0], 2, L[1]), _(R, C, I, b[0], 1, b[1])), N || (_(u, d, O, L[0], 2, L[1]), _(R, C, O - 1, b[0], 1, b[1]));
|
|
54
|
+
}
|
|
55
|
+
return [...u, ...R];
|
|
56
|
+
}
|
|
57
|
+
const z = {
|
|
58
|
+
columns: /* @__PURE__ */ new Set(),
|
|
59
|
+
rows: /* @__PURE__ */ new Set()
|
|
60
|
+
};
|
|
61
|
+
function B(n, f, r) {
|
|
62
|
+
if (!n?.size) return z;
|
|
63
|
+
const i = [...n].map(y), H = /* @__PURE__ */ new Map(), t = /* @__PURE__ */ new Map();
|
|
64
|
+
for (const {
|
|
65
|
+
row: e,
|
|
66
|
+
column: c
|
|
67
|
+
} of i)
|
|
68
|
+
H.set(c, (H.get(c) ?? 0) + 1), t.set(e, (t.get(e) ?? 0) + 1);
|
|
69
|
+
const o = /* @__PURE__ */ new Set(), E = /* @__PURE__ */ new Set();
|
|
70
|
+
for (const {
|
|
71
|
+
row: e,
|
|
72
|
+
column: c
|
|
73
|
+
} of i)
|
|
74
|
+
(t.get(e) ?? 0) < f && o.add(c), (H.get(c) ?? 0) < r && E.add(e);
|
|
66
75
|
return {
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
canvasTooltipRef: L,
|
|
70
|
-
setMainPaneNode: G,
|
|
71
|
-
handleGridScroll: F,
|
|
72
|
-
axisScrollPos: p,
|
|
73
|
-
visibleXTickValues: V,
|
|
74
|
-
visibleYTickValues: C,
|
|
75
|
-
canvasHandlers: {
|
|
76
|
-
onMouseMove: N,
|
|
77
|
-
onMouseLeave: h,
|
|
78
|
-
onClick: k
|
|
79
|
-
}
|
|
76
|
+
columns: o,
|
|
77
|
+
rows: E
|
|
80
78
|
};
|
|
81
79
|
}
|
|
82
80
|
export {
|
|
83
|
-
|
|
81
|
+
d as SELECTION_COLOR,
|
|
82
|
+
x as cellKey,
|
|
83
|
+
$ as selectedCellsIn,
|
|
84
|
+
v as selectionFrame,
|
|
85
|
+
B as selectionMarks
|
|
84
86
|
};
|
|
85
87
|
//# sourceMappingURL=visualization.es131.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"visualization.es131.js","sources":["../src/components/Heatmap/hooks/useHeatmapCanvasGrid.ts"],"sourcesContent":["import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport type { HeatmapCellId } from \"../types\";\nimport type { AnyBin } from \"../HeatmapCells\";\nimport type { PlotTooltipHandle } from \"../../../tooltip\";\nimport { drawHeatmapCells, getVisibleRange, hitTestCell, buildBin, type CanvasCellParams } from \"../HeatmapCanvasCells\";\n\n// Rows and columns drawn past the viewport, so cells and tick labels don't pop in as they scroll into view.\nconst GRID_OVERSCAN_CELLS = 4;\n\nexport interface UseHeatmapCanvasGridArgs {\n canvasCellParams: CanvasCellParams;\n viewportWidth: number;\n viewportHeight: number;\n xTickValues: number[];\n yTickValues: number[];\n onClick?: (bin: AnyBin) => void;\n}\n\nexport function useHeatmapCanvasGrid({\n canvasCellParams, viewportWidth, viewportHeight, xTickValues, yTickValues, onClick,\n}: UseHeatmapCanvasGridArgs) {\n // Only mainPaneRef scrolls natively. The canvas repaints from its scroll position, and the tick\n // label panes follow it through a transform (axisScrollPos), both once per frame.\n const mainPaneRef = useRef<HTMLDivElement | null>(null);\n const canvasRef = useRef<HTMLCanvasElement | null>(null);\n const hoveredCellRef = useRef<HeatmapCellId | null>(null);\n const canvasTooltipRef = useRef<PlotTooltipHandle<AnyBin>>(null);\n const drawRafRef = useRef<number | null>(null);\n\n useEffect(() => () => {\n if (drawRafRef.current != null) cancelAnimationFrame(drawRafRef.current);\n }, []);\n\n // Painted imperatively rather than through state, so scrolling never waits on a React render.\n const drawCanvas = useCallback(() => {\n const canvas = canvasRef.current;\n const main = mainPaneRef.current;\n if (!canvas || !main) return;\n const ctx = canvas.getContext(\"2d\");\n if (!ctx) return;\n const dpr = window.devicePixelRatio || 1;\n ctx.setTransform(dpr, 0, 0, dpr, 0, 0);\n ctx.clearRect(0, 0, viewportWidth, viewportHeight);\n const range = getVisibleRange(canvasCellParams, main.scrollLeft, main.scrollTop, viewportWidth, viewportHeight, GRID_OVERSCAN_CELLS);\n ctx.translate(-main.scrollLeft, -main.scrollTop);\n drawHeatmapCells(ctx, canvasCellParams, range, hoveredCellRef.current);\n }, [canvasCellParams, viewportWidth, viewportHeight]);\n\n useEffect(() => {\n drawCanvas();\n }, [drawCanvas]);\n\n const [axisScrollPos, setAxisScrollPos] = useState({ left: 0, top: 0 });\n const setMainPaneNode = useCallback((node: HTMLDivElement | null) => {\n mainPaneRef.current = node;\n if (node) setAxisScrollPos({ left: node.scrollLeft, top: node.scrollTop });\n }, []);\n\n const axisVisibleRange = useMemo(\n () => getVisibleRange(canvasCellParams, axisScrollPos.left, axisScrollPos.top, viewportWidth, viewportHeight, GRID_OVERSCAN_CELLS),\n [canvasCellParams, axisScrollPos.left, axisScrollPos.top, viewportWidth, viewportHeight]\n );\n const visibleXTickValues = useMemo(\n () => xTickValues.slice(axisVisibleRange.colStart, axisVisibleRange.colEnd + 1),\n [xTickValues, axisVisibleRange.colStart, axisVisibleRange.colEnd]\n );\n const visibleYTickValues = useMemo(\n () => yTickValues.slice(axisVisibleRange.rowStart, axisVisibleRange.rowEnd + 1),\n [yTickValues, axisVisibleRange.rowStart, axisVisibleRange.rowEnd]\n );\n\n const handleGridScroll = useCallback(() => {\n const main = mainPaneRef.current;\n if (!main) return;\n if (drawRafRef.current != null) return;\n drawRafRef.current = requestAnimationFrame(() => {\n drawRafRef.current = null;\n drawCanvas();\n setAxisScrollPos({ left: main.scrollLeft, top: main.scrollTop });\n });\n }, [drawCanvas]);\n\n const handleCanvasMouseMove = useCallback((event: React.MouseEvent<HTMLCanvasElement>) => {\n const main = mainPaneRef.current;\n if (!main) return;\n const contentX = event.nativeEvent.offsetX + main.scrollLeft;\n const contentY = event.nativeEvent.offsetY + main.scrollTop;\n const cell = hitTestCell(canvasCellParams, contentX, contentY);\n // As heatmapCellStyles does for SVG cells: a pointer over any cell, null ones included.\n event.currentTarget.style.cursor = cell ? \"pointer\" : \"default\";\n const prev = hoveredCellRef.current;\n if (prev?.row !== cell?.row || prev?.column !== cell?.column) {\n hoveredCellRef.current = cell;\n drawCanvas();\n }\n if (cell) {\n const bin = buildBin(canvasCellParams, cell);\n if (bin) canvasTooltipRef.current?.show(bin, event);\n } else {\n canvasTooltipRef.current?.hide();\n }\n }, [canvasCellParams, drawCanvas]);\n\n const handleCanvasMouseLeave = useCallback((event: React.MouseEvent<HTMLCanvasElement>) => {\n event.currentTarget.style.cursor = \"default\";\n if (hoveredCellRef.current) {\n hoveredCellRef.current = null;\n drawCanvas();\n }\n canvasTooltipRef.current?.hide();\n }, [drawCanvas]);\n\n const handleCanvasClick = useCallback((event: React.MouseEvent<HTMLCanvasElement>) => {\n const main = mainPaneRef.current;\n if (!main || !onClick) return;\n const contentX = event.nativeEvent.offsetX + main.scrollLeft;\n const contentY = event.nativeEvent.offsetY + main.scrollTop;\n const cell = hitTestCell(canvasCellParams, contentX, contentY);\n if (!cell) return;\n const bin = buildBin(canvasCellParams, cell);\n if (bin) onClick(bin);\n }, [canvasCellParams, onClick]);\n\n return {\n canvasRef, mainPaneRef, canvasTooltipRef, setMainPaneNode, handleGridScroll, axisScrollPos,\n visibleXTickValues, visibleYTickValues,\n canvasHandlers: {\n onMouseMove: handleCanvasMouseMove,\n onMouseLeave: handleCanvasMouseLeave,\n onClick: handleCanvasClick,\n },\n };\n}\n"],"names":["GRID_OVERSCAN_CELLS","useHeatmapCanvasGrid","canvasCellParams","viewportWidth","viewportHeight","xTickValues","yTickValues","onClick","mainPaneRef","useRef","canvasRef","hoveredCellRef","canvasTooltipRef","drawRafRef","useEffect","current","cancelAnimationFrame","drawCanvas","useCallback","canvas","main","ctx","getContext","dpr","window","devicePixelRatio","setTransform","clearRect","range","getVisibleRange","scrollLeft","scrollTop","translate","drawHeatmapCells","axisScrollPos","setAxisScrollPos","useState","left","top","setMainPaneNode","node","axisVisibleRange","useMemo","visibleXTickValues","slice","colStart","colEnd","visibleYTickValues","rowStart","rowEnd","handleGridScroll","requestAnimationFrame","handleCanvasMouseMove","event","contentX","nativeEvent","offsetX","contentY","offsetY","cell","hitTestCell","currentTarget","style","cursor","prev","row","column","bin","buildBin","show","hide","handleCanvasMouseLeave","handleCanvasClick","canvasHandlers","onMouseMove","onMouseLeave"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"visualization.es131.js","sources":["../src/components/Heatmap/heatmapSelection.ts"],"sourcesContent":["/**\n * How a selection shows: a frame around the selected cells, and marks on the axes and minimap for\n * the columns and rows holding them. Cells keep their own colors, so the rest of the grid can\n * still be read for what to select next.\n */\n\nimport type { HeatmapCellId } from \"./types\";\n\n/** The frame's dark line, and the white one just inside it that holds it against a dark cell. */\nexport const SELECTION_COLOR = \"#1a1c1e\";\nconst HALO_COLOR = \"#ffffff\";\n/** Laid outside the selected cells: at the default gap of 2 it fills the gap and covers no cell. */\nconst FRAME_WIDTH = 2;\nconst HALO_WIDTH = 1;\n\nexport type SelectionBand = { x: number; y: number; width: number; height: number; fill: string };\n\ntype FrameGeometry = {\n xScale: (column: number) => number;\n cellYScale: (row: number) => number;\n binWidth: number;\n binHeight: number;\n gap: number;\n};\n\ntype GridBounds = { width: number; height: number };\n\nexport const cellKey = (cell: HeatmapCellId) => `${cell.row}-${cell.column}`;\n\nconst parseKey = (key: string): HeatmapCellId => {\n const [row, column] = key.split(\"-\").map(Number);\n return { row, column };\n};\n\n/** The selected cells within a block, walking whichever of the block and the selection is smaller. */\nexport function* selectedCellsIn(\n selectedKeys: Set<string>,\n { colStart, colEnd, rowStart, rowEnd }: { colStart: number; colEnd: number; rowStart: number; rowEnd: number }\n): Generator<HeatmapCellId> {\n if ((colEnd - colStart + 1) * (rowEnd - rowStart + 1) <= selectedKeys.size) {\n for (let column = colStart; column <= colEnd; column++)\n for (let row = rowStart; row <= rowEnd; row++) if (selectedKeys.has(cellKey({ row, column }))) yield { row, column };\n return;\n }\n for (const key of selectedKeys) {\n const cell = parseKey(key);\n if (cell.column >= colStart && cell.column <= colEnd && cell.row >= rowStart && cell.row <= rowEnd) yield cell;\n }\n}\n\n/**\n * The frame around the selected cells among `cells`, as rectangles to fill in order: a dark band\n * outside each edge not shared with another selected cell, then a white line just inside it.\n * Adjacent selected cells share one frame, so a selected column is one tall box.\n */\nexport function selectionFrame(\n selectedKeys: Set<string>,\n cells: Iterable<HeatmapCellId>,\n geometry: FrameGeometry,\n bounds: GridBounds\n): SelectionBand[] {\n const { xScale, cellYScale, binWidth, binHeight, gap } = geometry;\n const isSelected = (row: number, column: number) => selectedKeys.has(cellKey({ row, column }));\n const dark: SelectionBand[] = [];\n const halo: SelectionBand[] = [];\n const band = (into: SelectionBand[], fill: string, x: number, y: number, width: number, height: number) =>\n into.push({ x, y, width, height, fill });\n\n for (const { row, column } of cells) {\n if (!isSelected(row, column)) continue;\n // The cell as drawn, with its gap to its right and above it (see getCellGeometry).\n const cellLeft = xScale(column);\n const cellRight = cellLeft + binWidth - gap;\n const cellTop = cellYScale(row) + gap;\n const cellBottom = cellYScale(row) + binHeight;\n // The cell, pulled in wherever the line outside it would fall past the grid's edge.\n const left = cellLeft - FRAME_WIDTH < 0 ? cellLeft + FRAME_WIDTH : cellLeft;\n const right = cellRight + FRAME_WIDTH > bounds.width ? cellRight - FRAME_WIDTH : cellRight;\n const top = cellTop - FRAME_WIDTH < 0 ? cellTop + FRAME_WIDTH : cellTop;\n const bottom = cellBottom + FRAME_WIDTH > bounds.height ? cellBottom - FRAME_WIDTH : cellBottom;\n // Row 0 is at the bottom of the grid, so the row above is row + 1.\n const above = isSelected(row + 1, column);\n const below = isSelected(row - 1, column);\n const before = isSelected(row, column - 1);\n const after = isSelected(row, column + 1);\n // How far an edge's line runs past the box: across the gap to a selected neighbor, or round\n // the corner where there is none.\n const reach = (selected: boolean) => (selected ? gap : FRAME_WIDTH);\n const bridge = (selected: boolean) => (selected ? gap : 0);\n const across = [left - reach(before), right - left + reach(before) + reach(after)] as const;\n const down = [top - reach(above), bottom - top + reach(above) + reach(below)] as const;\n const haloAcross = [left - bridge(before), right - left + bridge(before) + bridge(after)] as const;\n const haloDown = [top - bridge(above), bottom - top + bridge(above) + bridge(below)] as const;\n\n if (!above) {\n band(dark, SELECTION_COLOR, across[0], top - FRAME_WIDTH, across[1], FRAME_WIDTH);\n band(halo, HALO_COLOR, haloAcross[0], top, haloAcross[1], HALO_WIDTH);\n }\n if (!below) {\n band(dark, SELECTION_COLOR, across[0], bottom, across[1], FRAME_WIDTH);\n band(halo, HALO_COLOR, haloAcross[0], bottom - HALO_WIDTH, haloAcross[1], HALO_WIDTH);\n }\n if (!before) {\n band(dark, SELECTION_COLOR, left - FRAME_WIDTH, down[0], FRAME_WIDTH, down[1]);\n band(halo, HALO_COLOR, left, haloDown[0], HALO_WIDTH, haloDown[1]);\n }\n if (!after) {\n band(dark, SELECTION_COLOR, right, down[0], FRAME_WIDTH, down[1]);\n band(halo, HALO_COLOR, right - HALO_WIDTH, haloDown[0], HALO_WIDTH, haloDown[1]);\n }\n }\n return [...dark, ...halo];\n}\n\n/** The columns and rows the axes and minimap mark as holding the selection. */\nexport type SelectionMarks = { columns: Set<number>; rows: Set<number> };\n\nconst NO_SELECTION_MARKS: SelectionMarks = { columns: new Set(), rows: new Set() };\n\n/**\n * Which columns and rows to mark. A column is marked for a selected cell whose row isn't fully\n * selected, and a row for one whose column isn't: a whole selected column marks only its column,\n * and a single cell marks both.\n */\nexport function selectionMarks(selectedKeys: Set<string> | null, numColumns: number, numRows: number): SelectionMarks {\n if (!selectedKeys?.size) return NO_SELECTION_MARKS;\n const cells = [...selectedKeys].map(parseKey);\n const perColumn = new Map<number, number>();\n const perRow = new Map<number, number>();\n for (const { row, column } of cells) {\n perColumn.set(column, (perColumn.get(column) ?? 0) + 1);\n perRow.set(row, (perRow.get(row) ?? 0) + 1);\n }\n const columns = new Set<number>();\n const rows = new Set<number>();\n for (const { row, column } of cells) {\n if ((perRow.get(row) ?? 0) < numColumns) columns.add(column);\n if ((perColumn.get(column) ?? 0) < numRows) rows.add(row);\n }\n return { columns, rows };\n}\n"],"names":["SELECTION_COLOR","HALO_COLOR","cellKey","cell","row","column","parseKey","key","split","map","Number","selectedCellsIn","selectedKeys","colStart","colEnd","rowStart","rowEnd","size","has","selectionFrame","cells","geometry","bounds","xScale","cellYScale","binWidth","binHeight","gap","isSelected","dark","halo","band","into","fill","x","y","width","height","push","cellLeft","cellRight","cellTop","cellBottom","left","FRAME_WIDTH","right","top","bottom","above","below","before","after","reach","selected","bridge","across","down","haloAcross","haloDown","HALO_WIDTH","NO_SELECTION_MARKS","columns","Set","rows","selectionMarks","numColumns","numRows","perColumn","Map","perRow","set","get","add"],"mappings":"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"}
|
|
@@ -1,40 +1,248 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
1
|
+
import { getAnimationPose as z } from "./visualization.es36.js";
|
|
2
|
+
import { isOutsideRange as tt, resolveCellAppearance as nt, DIMMED_OPACITY as ot } from "./visualization.es130.js";
|
|
3
|
+
import { selectionFrame as et, selectedCellsIn as lt } from "./visualization.es131.js";
|
|
4
|
+
const O = (t, n, o) => Math.min(Math.max(t, n), o);
|
|
5
|
+
function L(t, n, o) {
|
|
6
|
+
const {
|
|
7
|
+
xScale: e,
|
|
8
|
+
cellYScale: i,
|
|
9
|
+
gap: c,
|
|
10
|
+
isRect: l,
|
|
11
|
+
binWidth: a,
|
|
12
|
+
binHeight: s
|
|
13
|
+
} = t;
|
|
14
|
+
if (l)
|
|
15
|
+
return {
|
|
16
|
+
isRect: !0,
|
|
17
|
+
x: e(n),
|
|
18
|
+
y: i(o) + c,
|
|
19
|
+
width: a - c,
|
|
20
|
+
height: s - c
|
|
21
|
+
};
|
|
22
|
+
const r = Math.min(a, s) / 2;
|
|
23
|
+
return {
|
|
24
|
+
isRect: !1,
|
|
25
|
+
cx: n * a + a / 2,
|
|
26
|
+
cy: i(o) + c + r,
|
|
27
|
+
r: r - c,
|
|
28
|
+
radius: r
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
function it(t, n) {
|
|
32
|
+
if (t.isRect) {
|
|
33
|
+
const o = t.width * n.scale, e = t.height * n.scale;
|
|
34
|
+
return {
|
|
35
|
+
isRect: !0,
|
|
36
|
+
x: t.x + (t.width - o) / 2 + n.x,
|
|
37
|
+
y: t.y + (t.height - e) / 2 + n.y,
|
|
38
|
+
width: o,
|
|
39
|
+
height: e
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
return {
|
|
43
|
+
...t,
|
|
44
|
+
cx: t.cx + n.x,
|
|
45
|
+
cy: t.cy + n.y,
|
|
46
|
+
r: t.r * n.scale
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
function dt(t, n, o, e, i, c) {
|
|
50
|
+
const {
|
|
51
|
+
data: l,
|
|
52
|
+
numRows: a,
|
|
53
|
+
binWidth: s,
|
|
54
|
+
binHeight: r,
|
|
55
|
+
yMax: S
|
|
56
|
+
} = t;
|
|
57
|
+
return {
|
|
58
|
+
colStart: O(Math.floor(n / s) - c, 0, Math.max(0, l.length - 1)),
|
|
59
|
+
colEnd: O(Math.ceil((n + e) / s) + c, 0, Math.max(0, l.length - 1)),
|
|
60
|
+
rowStart: O(Math.floor((S - (o + i)) / r) - c, 0, Math.max(0, a - 1)),
|
|
61
|
+
rowEnd: O(Math.floor((S - o) / r) + c, 0, Math.max(0, a - 1))
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
function mt(t, n, o, e, i = null) {
|
|
65
|
+
const {
|
|
66
|
+
data: c,
|
|
67
|
+
colorScale: l,
|
|
68
|
+
selectedKeys: a,
|
|
69
|
+
highlightRange: s
|
|
70
|
+
} = n;
|
|
71
|
+
let r = !1, S = null, b = -1;
|
|
72
|
+
for (let d = o.colStart; d <= o.colEnd; d++) {
|
|
73
|
+
const E = c[d];
|
|
74
|
+
if (!E) continue;
|
|
75
|
+
const f = i ? z(i.type, Math.max(0, d - i.firstColumn), i.elapsed) : null, u = f !== null && !f.done;
|
|
76
|
+
if (!(u && (r = !0, f.opacity <= 0 || f.scale <= 0)))
|
|
77
|
+
for (let m = o.rowStart; m <= o.rowEnd; m++) {
|
|
78
|
+
const v = E.rows[m];
|
|
79
|
+
if (!v) continue;
|
|
80
|
+
const M = v.count, w = M == null ? void 0 : l(M), p = tt(M, s), {
|
|
81
|
+
fill: x,
|
|
82
|
+
fillOpacity: g
|
|
83
|
+
} = nt(M, w, p);
|
|
84
|
+
if (g <= 0) continue;
|
|
85
|
+
const h = u ? it(L(n, d, m), f) : L(n, d, m), I = u ? g * f.opacity : g;
|
|
86
|
+
I !== b && (t.globalAlpha = I, b = I), x !== S && (t.fillStyle = x, S = x);
|
|
87
|
+
const D = e !== null && e.row === m && e.column === d;
|
|
88
|
+
if (h.isRect) {
|
|
89
|
+
const A = Math.max(h.width, 0), W = Math.max(h.height, 0);
|
|
90
|
+
t.fillRect(h.x, h.y, A, W), D && (t.beginPath(), t.rect(h.x, h.y, A, W));
|
|
91
|
+
} else
|
|
92
|
+
t.beginPath(), t.arc(h.cx, h.cy, Math.max(h.r, 0), 0, Math.PI * 2), t.fill();
|
|
93
|
+
D && (b = u ? f.opacity : 1, t.globalAlpha = b, t.lineWidth = 2, t.strokeStyle = x, t.stroke());
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
if (t.globalAlpha = 1, a) {
|
|
97
|
+
const d = {
|
|
98
|
+
colStart: o.colStart - 1,
|
|
99
|
+
colEnd: o.colEnd + 1,
|
|
100
|
+
rowStart: o.rowStart - 1,
|
|
101
|
+
rowEnd: o.rowEnd + 1
|
|
102
|
+
}, E = {
|
|
103
|
+
width: c.length * n.binWidth,
|
|
104
|
+
height: n.yMax
|
|
105
|
+
};
|
|
106
|
+
for (const {
|
|
107
|
+
x: f,
|
|
108
|
+
y: u,
|
|
109
|
+
width: m,
|
|
110
|
+
height: v,
|
|
111
|
+
fill: M
|
|
112
|
+
} of et(a, lt(a, d), n, E))
|
|
113
|
+
t.fillStyle = M, t.fillRect(f, u, m, v);
|
|
114
|
+
}
|
|
115
|
+
return r;
|
|
116
|
+
}
|
|
117
|
+
const T = 256;
|
|
118
|
+
let R = null;
|
|
119
|
+
function ct(t) {
|
|
120
|
+
if (R ??= document.createElement("canvas").getContext("2d", {
|
|
121
|
+
willReadFrequently: !0
|
|
122
|
+
}), !R) return [0, 0, 0];
|
|
123
|
+
R.clearRect(0, 0, 1, 1), R.fillStyle = "#000", R.fillStyle = t, R.fillRect(0, 0, 1, 1);
|
|
124
|
+
const [n, o, e] = R.getImageData(0, 0, 1, 1).data;
|
|
125
|
+
return [n, o, e];
|
|
126
|
+
}
|
|
127
|
+
const Q = /* @__PURE__ */ new WeakMap(), Z = /* @__PURE__ */ new WeakMap();
|
|
128
|
+
function at(t) {
|
|
129
|
+
const n = Q.get(t.colorScale);
|
|
130
|
+
if (n) return n;
|
|
131
|
+
const {
|
|
132
|
+
colorScale: o,
|
|
133
|
+
minValue: e,
|
|
134
|
+
maxValue: i
|
|
135
|
+
} = t, c = new Uint8ClampedArray(T * 3);
|
|
136
|
+
for (let l = 0; l < T; l++) {
|
|
137
|
+
const [a, s, r] = ct(o(e + (i - e) * l / (T - 1)) ?? "#000");
|
|
138
|
+
c.set([a, s, r], l * 3);
|
|
139
|
+
}
|
|
140
|
+
return Q.set(t.colorScale, c), c;
|
|
141
|
+
}
|
|
142
|
+
function rt(t, n) {
|
|
143
|
+
const o = Z.get(t);
|
|
144
|
+
if (o && o.length === t.length * n) return o;
|
|
145
|
+
const e = new Float64Array(t.length * n).fill(NaN);
|
|
146
|
+
return t.forEach((i, c) => i.rows.forEach((l, a) => {
|
|
147
|
+
a < n && l.count != null && (e[c * n + a] = l.count);
|
|
148
|
+
})), Z.set(t, e), e;
|
|
149
|
+
}
|
|
150
|
+
function st(t, n, o) {
|
|
151
|
+
const {
|
|
152
|
+
data: e,
|
|
153
|
+
numRows: i,
|
|
154
|
+
highlightRange: c,
|
|
155
|
+
minValue: l,
|
|
156
|
+
maxValue: a
|
|
157
|
+
} = t, s = e.length;
|
|
158
|
+
if (s === 0 || i === 0 || n < 1 || o < 1) return null;
|
|
159
|
+
const r = at(t), S = rt(e, i), b = a - l, [d, E] = c ?? [-1 / 0, 1 / 0], f = new ImageData(n, o), u = f.data, m = (w, p) => Array.from({
|
|
160
|
+
length: p
|
|
161
|
+
}, (x, g) => {
|
|
162
|
+
const h = Math.min(Math.floor(g * w / p), w - 1);
|
|
163
|
+
return [h, Math.max(h + 1, Math.floor((g + 1) * w / p))];
|
|
164
|
+
}), v = m(s, n), M = m(i, o);
|
|
165
|
+
for (let w = 0; w < o; w++) {
|
|
166
|
+
const [p, x] = M[w];
|
|
167
|
+
for (let g = 0; g < n; g++) {
|
|
168
|
+
const [h, I] = v[g];
|
|
169
|
+
let D = 0, A = 0, W = 0, C = 0, N = 0, q = 0, B = 0, K = 0, H = 0;
|
|
170
|
+
for (let k = h; k < I; k++) {
|
|
171
|
+
const $ = k * i;
|
|
172
|
+
for (let _ = p; _ < x; _++) {
|
|
173
|
+
const X = $ + i - 1 - _;
|
|
174
|
+
N++;
|
|
175
|
+
const V = S[X];
|
|
176
|
+
if (V !== V) continue;
|
|
177
|
+
const G = b > 0 ? Math.round(Math.min(Math.max((V - l) / b, 0), 1) * (T - 1)) * 3 : 0, U = r[G], Y = r[G + 1], j = r[G + 2], J = V >= d && V <= E;
|
|
178
|
+
J && c && (q += U, B += Y, K += j, H++);
|
|
179
|
+
const F = J ? 1 : ot;
|
|
180
|
+
D += U * F, A += Y * F, W += j * F, C += F;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
const y = (w * n + g) * 4;
|
|
184
|
+
H > 0 ? (u[y] = q / H, u[y + 1] = B / H, u[y + 2] = K / H, u[y + 3] = 255) : C > 0 && (u[y] = D / C, u[y + 1] = A / C, u[y + 2] = W / C, u[y + 3] = C / N * 255);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
return f;
|
|
188
|
+
}
|
|
189
|
+
let P = null;
|
|
190
|
+
function gt(t, n) {
|
|
191
|
+
const {
|
|
192
|
+
width: o,
|
|
193
|
+
height: e
|
|
194
|
+
} = t.canvas;
|
|
195
|
+
t.setTransform(1, 0, 0, 1, 0, 0), t.clearRect(0, 0, o, e);
|
|
196
|
+
const i = Math.min(o, n.data.length), c = Math.min(e, n.numRows), l = st(n, i, c);
|
|
197
|
+
l && (i === o && c === e ? t.putImageData(l, 0, 0) : (P ??= document.createElement("canvas"), P.width = i, P.height = c, P.getContext("2d")?.putImageData(l, 0, 0), t.imageSmoothingEnabled = !1, t.drawImage(P, 0, 0, o, e)));
|
|
198
|
+
}
|
|
199
|
+
function wt(t, n, o) {
|
|
200
|
+
const {
|
|
201
|
+
data: e,
|
|
202
|
+
numRows: i,
|
|
203
|
+
binWidth: c,
|
|
204
|
+
binHeight: l,
|
|
205
|
+
yMax: a
|
|
206
|
+
} = t;
|
|
207
|
+
if (n < 0 || o < 0) return null;
|
|
208
|
+
const s = Math.floor(n / c), r = Math.floor((a - o) / l);
|
|
209
|
+
return s < 0 || s >= e.length || r < 0 || r >= i || !e[s]?.rows[r] ? null : {
|
|
210
|
+
row: r,
|
|
211
|
+
column: s
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
function Mt(t, n) {
|
|
215
|
+
const o = t.data[n.column], e = o?.rows[n.row];
|
|
216
|
+
if (!o || !e) return null;
|
|
217
|
+
const i = e.count, c = i == null ? void 0 : t.colorScale(i), l = L(t, n.column, n.row), a = {
|
|
218
|
+
bin: e,
|
|
219
|
+
row: n.row,
|
|
220
|
+
column: n.column,
|
|
221
|
+
datum: o,
|
|
222
|
+
gap: t.gap,
|
|
223
|
+
count: i,
|
|
224
|
+
color: c,
|
|
225
|
+
opacity: i == null ? void 0 : 1
|
|
226
|
+
};
|
|
227
|
+
return l.isRect ? {
|
|
228
|
+
...a,
|
|
229
|
+
x: l.x,
|
|
230
|
+
y: l.y,
|
|
231
|
+
width: l.width,
|
|
232
|
+
height: l.height
|
|
233
|
+
} : {
|
|
234
|
+
...a,
|
|
235
|
+
cx: l.cx,
|
|
236
|
+
cy: l.cy,
|
|
237
|
+
r: l.r,
|
|
238
|
+
radius: l.radius
|
|
239
|
+
};
|
|
36
240
|
}
|
|
37
241
|
export {
|
|
38
|
-
|
|
242
|
+
Mt as buildBin,
|
|
243
|
+
mt as drawHeatmapCells,
|
|
244
|
+
gt as drawHeatmapOverview,
|
|
245
|
+
dt as getVisibleRange,
|
|
246
|
+
wt as hitTestCell
|
|
39
247
|
};
|
|
40
248
|
//# sourceMappingURL=visualization.es132.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"visualization.es132.js","sources":["../src/components/Heatmap/hooks/useScrollToSelection.ts"],"sourcesContent":["import { useEffect, useRef, type RefObject } from \"react\";\nimport type { HeatmapCellId } from \"../types\";\nimport { cellKey } from \"../heatmapSelection\";\n\n// The smallest scroll that brings [boxStart, boxEnd) into view, as scrollIntoView({ block: \"nearest\" })\n// would: unchanged if it's already visible, aligned to boxStart if it can't fit.\nfunction nearestScrollOffset(current: number, viewportSize: number, boxStart: number, boxEnd: number): number {\n if (boxEnd - boxStart > viewportSize) return boxStart;\n if (boxStart < current) return boxStart;\n if (boxEnd > current + viewportSize) return boxEnd - viewportSize;\n return current;\n}\n\nexport interface UseScrollToSelectionArgs {\n mainPaneRef: RefObject<HTMLDivElement | null>;\n selectedCells?: HeatmapCellId[];\n scrollToSelection?: boolean;\n binWidth: number;\n viewportWidth: number;\n}\n\n// Scrolls newly selected cells into view, horizontally.\nexport function useScrollToSelection({\n mainPaneRef, selectedCells, scrollToSelection, binWidth, viewportWidth,\n}: UseScrollToSelectionArgs) {\n const previousSelectionKeysRef = useRef<Set<string>>(new Set());\n\n useEffect(() => {\n const previousKeys = previousSelectionKeysRef.current;\n const cells = selectedCells ?? [];\n const newCells = cells.filter((cell) => !previousKeys.has(cellKey(cell)));\n previousSelectionKeysRef.current = new Set(cells.map(cellKey));\n\n const main = mainPaneRef.current;\n if (!scrollToSelection || !main || newCells.length === 0) return;\n\n let minCol = Infinity, maxCol = -Infinity;\n for (const cell of newCells) {\n if (cell.column < minCol) minCol = cell.column;\n if (cell.column > maxCol) maxCol = cell.column;\n }\n\n const boxLeft = minCol * binWidth;\n const boxRight = (maxCol + 1) * binWidth;\n\n const targetLeft = nearestScrollOffset(main.scrollLeft, viewportWidth, boxLeft, boxRight);\n if (targetLeft !== main.scrollLeft) {\n main.scrollTo({ left: targetLeft, behavior: \"smooth\" });\n }\n }, [selectedCells, scrollToSelection, binWidth, viewportWidth]);\n}\n"],"names":["nearestScrollOffset","current","viewportSize","boxStart","boxEnd","useScrollToSelection","t0","$","_c","mainPaneRef","selectedCells","scrollToSelection","binWidth","viewportWidth","t1","Symbol","for","Set","previousSelectionKeysRef","useRef","t2","previousKeys","cells","newCells","filter","cell","has","cellKey","map","main","length","minCol","Infinity","maxCol","cell_0","column","boxLeft","boxRight","targetLeft","scrollLeft","scrollTo","left","behavior","t3","useEffect"],"mappings":";;;AAMA,SAASA,EAAoBC,GAAiBC,GAAsBC,GAAkBC,GAAwB;AAE5G,SADIA,IAASD,IAAWD,KACpBC,IAAWF,IAAgBE,IAC3BC,IAASH,IAAUC,IAAqBE,IAASF,IAC9CD;AACT;AAWO,SAAAI,EAAAC,GAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GAA8B;AAAA,IAAAC,aAAAA;AAAAA,IAAAC,eAAAA;AAAAA,IAAAC,mBAAAA;AAAAA,IAAAC,UAAAA;AAAAA,IAAAC,eAAAA;AAAAA,EAAAA,IAAAP;AAEV,MAAAQ;AAAA,EAAAP,EAAA,CAAA,MAAAQ,uBAAAC,IAAA,2BAAA,KAC4BF,wBAAIG,IAAAA,GAAKV,OAAAO,KAAAA,IAAAP,EAAA,CAAA;AAA9D,QAAAW,IAAiCC,EAAoBL,CAAS;AAAE,MAAAM;AAAA,EAAAb,EAAA,CAAA,MAAAK,KAAAL,EAAA,CAAA,MAAAE,KAAAF,EAAA,CAAA,MAAAI,KAAAJ,EAAA,CAAA,MAAAG,KAAAH,SAAAM,KAEtDO,IAAAA,MAAA;AACR,UAAAC,IAAqBH,EAAwBjB,SAC7CqB,IAAcZ,KAAA,CAAA,GACda,IAAiBD,EAAKE,OAAQC,CAAAA,MAAU,CAACJ,EAAYK,IAAKC,EAAQF,CAAI,CAAC,CAAC;AACxEP,IAAAA,EAAwBjB,UAAW,IAAIgB,IAAIK,EAAKM,IAAKD,CAAO,CAAC;AAE7D,UAAAE,IAAapB,EAAWR;AACxB,QAAI,CAACU,KAAD,CAAuBkB,KAAQN,EAAQO,WAAY;AAAC;AAExD,QAAAC,IAAaC,OAAbC,IAAgC;AAChC,eAAKC,KAAcX;AACjB,MAAIE,EAAIU,SAAUJ,MAAQA,IAASN,EAAIU,SACnCV,EAAIU,SAAUF,MAAQA,IAASR,EAAIU;AAGzC,UAAAC,IAAgBL,IAASnB,GACzByB,KAAkBJ,IAAS,KAAKrB,GAEhC0B,IAAmBtC,EAAoB6B,EAAIU,YAAa1B,GAAeuB,GAASC,CAAQ;AACxF,IAAIC,MAAeT,EAAIU,cACrBV,EAAIW,SAAU;AAAA,MAAAC,MAAQH;AAAAA,MAAUI,UAAY;AAAA,IAAA,CAAU;AAAA,EACvD,GACFnC,OAAAK,GAAAL,OAAAE,GAAAF,OAAAI,GAAAJ,OAAAG,GAAAH,OAAAM,GAAAN,OAAAa,KAAAA,IAAAb,EAAA,CAAA;AAAA,MAAAoC;AAAA,EAAApC,EAAA,CAAA,MAAAK,KAAAL,EAAA,CAAA,MAAAI,KAAAJ,EAAA,CAAA,MAAAG,KAAAH,UAAAM,KAAE8B,IAAA,CAACjC,GAAeC,GAAmBC,GAAUC,CAAa,GAACN,OAAAK,GAAAL,OAAAI,GAAAJ,OAAAG,GAAAH,QAAAM,GAAAN,QAAAoC,KAAAA,IAAApC,EAAA,EAAA,GAtB9DqC,EAAUxB,GAsBPuB,CAA2D;AAAC;"}
|
|
1
|
+
{"version":3,"file":"visualization.es132.js","sources":["../src/components/Heatmap/HeatmapCanvasCells.ts"],"sourcesContent":["import type { RectCell, CircleCell } from \"@visx/heatmap\";\nimport type { ColumnDatum, HeatmapCellId, RowDatum } from \"./types\";\nimport { getAnimationPose, type AnimationPose, type AnimationType } from \"../../utility\";\nimport { DIMMED_OPACITY, isOutsideRange, resolveCellAppearance } from \"./heatmapCellAppearance\";\nimport { selectedCellsIn, selectionFrame, type SelectionMarks } from \"./heatmapSelection\";\n\n/** A cell as onClick and tooltipBody receive it - see buildBin. */\nexport type AnyBin = RectCell<ColumnDatum, RowDatum> | CircleCell<ColumnDatum, RowDatum>;\n\n/** What the canvas renderers and hit-testing need to place and color cells. */\nexport interface CanvasCellParams {\n data: ColumnDatum[];\n numRows: number;\n xScale: (column: number) => number;\n cellYScale: (row: number) => number;\n colorScale: (count: number) => string | undefined;\n /** The counts colorScale spans, which the overview samples it across. */\n minValue: number;\n maxValue: number;\n gap: number;\n isRect: boolean;\n binWidth: number;\n binHeight: number;\n yMax: number;\n /** The selected cells' keys, which the grid frames; null where nothing is selected. */\n selectedKeys: Set<string> | null;\n /** The columns and rows holding the selection, which the minimap marks along its edges. */\n selectionMarks: SelectionMarks;\n highlightRange: [number, number] | null;\n}\n\nexport interface CanvasDrawRange {\n colStart: number;\n colEnd: number;\n rowStart: number;\n rowEnd: number;\n}\n\n/** An entry animation, `elapsed` seconds in. */\nexport interface CanvasEntryFrame {\n type: AnimationType;\n elapsed: number;\n /** The column the stagger counts from: the first in view when the animation began. */\n firstColumn: number;\n}\n\nconst clamp = (value: number, min: number, max: number) => Math.min(Math.max(value, min), max);\n\n// visx's HeatmapRect/HeatmapCircle geometry, which buildBin passes on to onClick and tooltipBody,\n// except that circles are centered in their cells.\ntype CellGeometry =\n | { isRect: true; x: number; y: number; width: number; height: number }\n | { isRect: false; cx: number; cy: number; r: number; radius: number };\n\nfunction getCellGeometry(params: CanvasCellParams, col: number, row: number): CellGeometry {\n const { xScale, cellYScale, gap, isRect, binWidth, binHeight } = params;\n if (isRect) {\n return { isRect: true, x: xScale(col), y: cellYScale(row) + gap, width: binWidth - gap, height: binHeight - gap };\n }\n const radius = Math.min(binWidth, binHeight) / 2;\n return { isRect: false, cx: col * binWidth + binWidth / 2, cy: cellYScale(row) + gap + radius, r: radius - gap, radius };\n}\n\n/** A cell's geometry moved, and scaled about its center, by an animation pose. */\nfunction poseCellGeometry(geometry: CellGeometry, pose: AnimationPose): CellGeometry {\n if (geometry.isRect) {\n const width = geometry.width * pose.scale;\n const height = geometry.height * pose.scale;\n return {\n isRect: true,\n x: geometry.x + (geometry.width - width) / 2 + pose.x,\n y: geometry.y + (geometry.height - height) / 2 + pose.y,\n width,\n height,\n };\n }\n return { ...geometry, cx: geometry.cx + pose.x, cy: geometry.cy + pose.y, r: geometry.r * pose.scale };\n}\n\n/**\n * The columns and rows (inclusive) within the scrolled viewport, plus `overscan` either side. Row 0\n * is at the bottom, so the row under content y is floor((yMax - y) / binHeight).\n */\nexport function getVisibleRange(\n params: CanvasCellParams,\n scrollLeft: number,\n scrollTop: number,\n viewportWidth: number,\n viewportHeight: number,\n overscan: number\n): CanvasDrawRange {\n const { data, numRows, binWidth, binHeight, yMax } = params;\n return {\n colStart: clamp(Math.floor(scrollLeft / binWidth) - overscan, 0, Math.max(0, data.length - 1)),\n colEnd: clamp(Math.ceil((scrollLeft + viewportWidth) / binWidth) + overscan, 0, Math.max(0, data.length - 1)),\n rowStart: clamp(Math.floor((yMax - (scrollTop + viewportHeight)) / binHeight) - overscan, 0, Math.max(0, numRows - 1)),\n rowEnd: clamp(Math.floor((yMax - scrollTop) / binHeight) + overscan, 0, Math.max(0, numRows - 1)),\n };\n}\n\n/**\n * Paints the cells in `range` onto `ctx`, whose origin is already at content-space (0,0), and the\n * selection's frame over them. With `entry`, the cells (not the frame) are drawn mid-animation.\n * Returns whether any cell drawn is still animating.\n */\nexport function drawHeatmapCells(\n ctx: CanvasRenderingContext2D,\n params: CanvasCellParams,\n range: CanvasDrawRange,\n hoveredCell: HeatmapCellId | null,\n entry: CanvasEntryFrame | null = null\n): boolean {\n const { data, colorScale, selectedKeys, highlightRange } = params;\n let isEntering = false;\n // Setting fillStyle re-parses the color even when unchanged, so repeats are skipped: an export\n // runs this for every cell. A path is built only for the hovered cell, to stroke its outline.\n let lastFill: string | null = null;\n let lastAlpha = -1;\n for (let col = range.colStart; col <= range.colEnd; col++) {\n const columnDatum = data[col];\n if (!columnDatum) continue;\n // Staggered by column: a column's rows move together.\n const pose = entry ? getAnimationPose(entry.type, Math.max(0, col - entry.firstColumn), entry.elapsed) : null;\n const isPosed = pose !== null && !pose.done;\n if (isPosed) {\n isEntering = true;\n if (pose.opacity <= 0 || pose.scale <= 0) continue;\n }\n for (let row = range.rowStart; row <= range.rowEnd; row++) {\n const rowDatum = columnDatum.rows[row];\n if (!rowDatum) continue;\n const count = rowDatum.count;\n const color = count == null ? undefined : colorScale(count);\n const isDimmed = isOutsideRange(count, highlightRange);\n const { fill, fillOpacity } = resolveCellAppearance(count, color, isDimmed);\n if (fillOpacity <= 0) continue;\n\n const geometry = isPosed ? poseCellGeometry(getCellGeometry(params, col, row), pose) : getCellGeometry(params, col, row);\n const alpha = isPosed ? fillOpacity * pose.opacity : fillOpacity;\n if (alpha !== lastAlpha) {\n ctx.globalAlpha = alpha;\n lastAlpha = alpha;\n }\n if (fill !== lastFill) {\n ctx.fillStyle = fill;\n lastFill = fill;\n }\n\n const isHovered = hoveredCell !== null && hoveredCell.row === row && hoveredCell.column === col;\n if (geometry.isRect) {\n const width = Math.max(geometry.width, 0);\n const height = Math.max(geometry.height, 0);\n ctx.fillRect(geometry.x, geometry.y, width, height);\n if (isHovered) {\n ctx.beginPath();\n ctx.rect(geometry.x, geometry.y, width, height);\n }\n } else {\n ctx.beginPath();\n ctx.arc(geometry.cx, geometry.cy, Math.max(geometry.r, 0), 0, Math.PI * 2);\n ctx.fill();\n }\n\n if (isHovered) {\n // Full strength even on a dimmed cell, but fading in with its cell.\n lastAlpha = isPosed ? pose.opacity : 1;\n ctx.globalAlpha = lastAlpha;\n ctx.lineWidth = 2;\n ctx.strokeStyle = fill;\n ctx.stroke();\n }\n }\n }\n ctx.globalAlpha = 1;\n\n if (selectedKeys) {\n // Past the range by a cell, so the frame's line for a selected cell just outside it still shows.\n const around = {\n colStart: range.colStart - 1,\n colEnd: range.colEnd + 1,\n rowStart: range.rowStart - 1,\n rowEnd: range.rowEnd + 1,\n };\n const bounds = { width: data.length * params.binWidth, height: params.yMax };\n for (const { x, y, width, height, fill } of selectionFrame(selectedKeys, selectedCellsIn(selectedKeys, around), params, bounds)) {\n ctx.fillStyle = fill;\n ctx.fillRect(x, y, width, height);\n }\n }\n return isEntering;\n}\n\n// Colors sampled from colorScale for the overview, which looks them up rather than calling it per cell.\nconst OVERVIEW_LEVELS = 256;\n\nlet colorParser: CanvasRenderingContext2D | null = null;\n/** Any CSS color as RGB, read back off a 1px canvas, so a color the browser understands is one this does. */\nfunction parseColor(css: string): [number, number, number] {\n colorParser ??= document.createElement(\"canvas\").getContext(\"2d\", { willReadFrequently: true });\n if (!colorParser) return [0, 0, 0];\n colorParser.clearRect(0, 0, 1, 1);\n colorParser.fillStyle = \"#000\";\n colorParser.fillStyle = css;\n colorParser.fillRect(0, 0, 1, 1);\n const [r, g, b] = colorParser.getImageData(0, 0, 1, 1).data;\n return [r, g, b];\n}\n\n// Keyed on identities the layout memoizes, which a highlight sweep leaves alone.\nconst lutCache = new WeakMap<object, Uint8ClampedArray>();\nconst countsCache = new WeakMap<ColumnDatum[], Float64Array>();\n\nfunction colorLut(params: CanvasCellParams): Uint8ClampedArray {\n const cached = lutCache.get(params.colorScale);\n if (cached) return cached;\n const { colorScale, minValue, maxValue } = params;\n const lut = new Uint8ClampedArray(OVERVIEW_LEVELS * 3);\n for (let i = 0; i < OVERVIEW_LEVELS; i++) {\n const [r, g, b] = parseColor(colorScale(minValue + ((maxValue - minValue) * i) / (OVERVIEW_LEVELS - 1)) ?? \"#000\");\n lut.set([r, g, b], i * 3);\n }\n lutCache.set(params.colorScale, lut);\n return lut;\n}\n\n/** Every count in one column-major array, NaN where there is none: several times faster to scan than the row objects. */\nfunction flatCounts(data: ColumnDatum[], numRows: number): Float64Array {\n const cached = countsCache.get(data);\n if (cached && cached.length === data.length * numRows) return cached;\n const counts = new Float64Array(data.length * numRows).fill(NaN);\n data.forEach((column, c) =>\n column.rows.forEach((row, r) => {\n if (r < numRows && row.count != null) counts[c * numRows + r] = row.count;\n })\n );\n countsCache.set(data, counts);\n return counts;\n}\n\n/**\n * The whole grid resampled to `width` x `height` pixels for the minimap, written straight into an\n * ImageData: a fillRect per cell took ~400ms on a million-cell grid.\n *\n * Each pixel averages the cells under it. While highlightRange is set, a pixel holding any cell in\n * the range shows those cells alone at full strength, so a lone outlier isn't averaged away. Cells\n * are solid squares here; the minimap marks the selection along its edges instead.\n */\nfunction renderHeatmapOverview(params: CanvasCellParams, width: number, height: number): ImageData | null {\n const { data, numRows, highlightRange, minValue, maxValue } = params;\n const numColumns = data.length;\n if (numColumns === 0 || numRows === 0 || width < 1 || height < 1) return null;\n\n const lut = colorLut(params);\n const counts = flatCounts(data, numRows);\n const span = maxValue - minValue;\n // With no range, every cell is inside it: nothing fades and nothing is singled out.\n const [low, high] = highlightRange ?? [-Infinity, Infinity];\n const image = new ImageData(width, height);\n const pixels = image.data;\n\n // The run of columns (rows) each pixel column (row) covers: at least one, and between them every one.\n const spans = (cells: number, size: number) =>\n Array.from({ length: size }, (_, i) => {\n const start = Math.min(Math.floor((i * cells) / size), cells - 1);\n return [start, Math.max(start + 1, Math.floor(((i + 1) * cells) / size))] as const;\n });\n const columnSpans = spans(numColumns, width);\n // From the top down, where row 0 sits at the bottom of the grid (see cellYScale).\n const rowSpans = spans(numRows, height);\n\n // Scalars and typed arrays only in here: it runs once per cell per redraw.\n for (let y = 0; y < height; y++) {\n const [rowFrom, rowTo] = rowSpans[y];\n for (let x = 0; x < width; x++) {\n const [columnFrom, columnTo] = columnSpans[x];\n // Opacity-weighted sums over every cell, and plain sums over the highlighted ones.\n let r = 0, g = 0, b = 0, a = 0, cells = 0;\n let hr = 0, hg = 0, hb = 0, highlighted = 0;\n for (let column = columnFrom; column < columnTo; column++) {\n const base = column * numRows;\n for (let fromTop = rowFrom; fromTop < rowTo; fromTop++) {\n const index = base + numRows - 1 - fromTop;\n cells++;\n const count = counts[index];\n if (count !== count) continue; // NaN: transparent, as a null cell is drawn nowhere.\n // Held at the ends, as the color scale itself clamps.\n const level = span > 0 ? Math.round(Math.min(Math.max((count - minValue) / span, 0), 1) * (OVERVIEW_LEVELS - 1)) * 3 : 0;\n const cr = lut[level], cg = lut[level + 1], cb = lut[level + 2];\n // isOutsideRange, inlined.\n const inRange = count >= low && count <= high;\n if (inRange && highlightRange) {\n hr += cr; hg += cg; hb += cb; highlighted++;\n }\n const opacity = inRange ? 1 : DIMMED_OPACITY;\n r += cr * opacity; g += cg * opacity; b += cb * opacity; a += opacity;\n }\n }\n const offset = (y * width + x) * 4;\n if (highlighted > 0) {\n pixels[offset] = hr / highlighted;\n pixels[offset + 1] = hg / highlighted;\n pixels[offset + 2] = hb / highlighted;\n pixels[offset + 3] = 255;\n } else if (a > 0) {\n pixels[offset] = r / a;\n pixels[offset + 1] = g / a;\n pixels[offset + 2] = b / a;\n pixels[offset + 3] = (a / cells) * 255;\n }\n }\n }\n return image;\n}\n\nlet overviewScratch: HTMLCanvasElement | null = null;\n\n/**\n * The whole grid, filling the canvas. Rendered at no more than a pixel per cell and stretched\n * nearest-neighbor from there: resampling every pixel of the expanded minimap took over 100ms.\n */\nexport function drawHeatmapOverview(ctx: CanvasRenderingContext2D, params: CanvasCellParams) {\n const { width, height } = ctx.canvas;\n ctx.setTransform(1, 0, 0, 1, 0, 0);\n ctx.clearRect(0, 0, width, height);\n const overviewWidth = Math.min(width, params.data.length);\n const overviewHeight = Math.min(height, params.numRows);\n const overview = renderHeatmapOverview(params, overviewWidth, overviewHeight);\n if (!overview) return;\n if (overviewWidth === width && overviewHeight === height) {\n ctx.putImageData(overview, 0, 0);\n } else {\n overviewScratch ??= document.createElement(\"canvas\");\n overviewScratch.width = overviewWidth;\n overviewScratch.height = overviewHeight;\n overviewScratch.getContext(\"2d\")?.putImageData(overview, 0, 0);\n ctx.imageSmoothingEnabled = false;\n ctx.drawImage(overviewScratch, 0, 0, width, height);\n }\n}\n\n/** Content-space (post-scroll-offset) coordinates -> the cell under them, or null if none. */\nexport function hitTestCell(params: CanvasCellParams, contentX: number, contentY: number): HeatmapCellId | null {\n const { data, numRows, binWidth, binHeight, yMax } = params;\n if (contentX < 0 || contentY < 0) return null;\n const column = Math.floor(contentX / binWidth);\n const row = Math.floor((yMax - contentY) / binHeight);\n if (column < 0 || column >= data.length || row < 0 || row >= numRows) return null;\n if (!data[column]?.rows[row]) return null;\n return { row, column };\n}\n\n/** Builds the same bin shape @visx/heatmap's RectCell/CircleCell provide, for onClick/tooltipBody. */\nexport function buildBin(params: CanvasCellParams, cell: HeatmapCellId): AnyBin | null {\n const columnDatum = params.data[cell.column];\n const rowDatum = columnDatum?.rows[cell.row];\n if (!columnDatum || !rowDatum) return null;\n\n const count = rowDatum.count;\n const color = count == null ? undefined : params.colorScale(count);\n const geometry = getCellGeometry(params, cell.column, cell.row);\n const shared = { bin: rowDatum, row: cell.row, column: cell.column, datum: columnDatum, gap: params.gap, count, color, opacity: count == null ? undefined : 1 };\n\n return geometry.isRect\n ? ({ ...shared, x: geometry.x, y: geometry.y, width: geometry.width, height: geometry.height } as AnyBin)\n : ({ ...shared, cx: geometry.cx, cy: geometry.cy, r: geometry.r, radius: geometry.radius } as AnyBin);\n}\n"],"names":["clamp","value","min","max","Math","getCellGeometry","params","col","row","xScale","cellYScale","gap","isRect","binWidth","binHeight","x","y","width","height","radius","cx","cy","r","poseCellGeometry","geometry","pose","scale","getVisibleRange","scrollLeft","scrollTop","viewportWidth","viewportHeight","overscan","data","numRows","yMax","colStart","floor","length","colEnd","ceil","rowStart","rowEnd","drawHeatmapCells","ctx","range","hoveredCell","entry","colorScale","selectedKeys","highlightRange","isEntering","lastFill","lastAlpha","columnDatum","getAnimationPose","type","firstColumn","elapsed","isPosed","done","opacity","rowDatum","rows","count","color","undefined","isDimmed","isOutsideRange","fill","fillOpacity","resolveCellAppearance","alpha","globalAlpha","fillStyle","isHovered","column","fillRect","beginPath","rect","arc","PI","lineWidth","strokeStyle","stroke","around","bounds","selectionFrame","selectedCellsIn","OVERVIEW_LEVELS","colorParser","parseColor","css","document","createElement","getContext","willReadFrequently","clearRect","g","b","getImageData","lutCache","WeakMap","countsCache","colorLut","cached","get","minValue","maxValue","lut","Uint8ClampedArray","i","set","flatCounts","counts","Float64Array","NaN","forEach","c","renderHeatmapOverview","numColumns","span","low","high","Infinity","image","ImageData","pixels","spans","cells","size","Array","from","_","start","columnSpans","rowSpans","rowFrom","rowTo","columnFrom","columnTo","a","hr","hg","hb","highlighted","base","fromTop","index","level","round","cr","cg","cb","inRange","DIMMED_OPACITY","offset","overviewScratch","drawHeatmapOverview","canvas","setTransform","overviewWidth","overviewHeight","overview","putImageData","imageSmoothingEnabled","drawImage","hitTestCell","contentX","contentY","buildBin","cell","shared","bin","datum"],"mappings":"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"}
|