react-cheminfo 0.28.0 → 0.30.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/README.md +79 -26
- package/lib/chart/core/axisLabels.d.ts +82 -0
- package/lib/chart/core/axisLabels.d.ts.map +1 -0
- package/lib/chart/core/axisLabels.js +111 -0
- package/lib/chart/core/axisLabels.js.map +1 -0
- package/lib/chart/core/boxLayout.d.ts +53 -0
- package/lib/chart/core/boxLayout.d.ts.map +1 -0
- package/lib/chart/core/boxLayout.js +112 -0
- package/lib/chart/core/boxLayout.js.map +1 -0
- package/lib/chart/core/chartAxisScale.d.ts +23 -2
- package/lib/chart/core/chartAxisScale.d.ts.map +1 -1
- package/lib/chart/core/chartAxisScale.js +64 -13
- package/lib/chart/core/chartAxisScale.js.map +1 -1
- package/lib/chart/core/chartDomain.d.ts +160 -0
- package/lib/chart/core/chartDomain.d.ts.map +1 -0
- package/lib/chart/core/chartDomain.js +46 -0
- package/lib/chart/core/chartDomain.js.map +1 -0
- package/lib/chart/core/chartGeometry.d.ts +131 -0
- package/lib/chart/core/chartGeometry.d.ts.map +1 -0
- package/lib/chart/core/chartGeometry.js +101 -0
- package/lib/chart/core/chartGeometry.js.map +1 -0
- package/lib/chart/core/chartPane.d.ts +11 -0
- package/lib/chart/core/chartPane.d.ts.map +1 -0
- package/lib/chart/core/chartPane.js +11 -0
- package/lib/chart/core/chartPane.js.map +1 -0
- package/lib/chart/core/chartScale.d.ts +4 -1
- package/lib/chart/core/chartScale.d.ts.map +1 -1
- package/lib/chart/core/chartScale.js +8 -4
- package/lib/chart/core/chartScale.js.map +1 -1
- package/lib/chart/core/chartTheme.d.ts +156 -0
- package/lib/chart/core/chartTheme.d.ts.map +1 -0
- package/lib/chart/core/chartTheme.js +156 -0
- package/lib/chart/core/chartTheme.js.map +1 -0
- package/lib/chart/core/chartViewport.d.ts +32 -5
- package/lib/chart/core/chartViewport.d.ts.map +1 -1
- package/lib/chart/core/chartViewport.js +40 -11
- package/lib/chart/core/chartViewport.js.map +1 -1
- package/lib/chart/core/guidePlacement.d.ts +52 -0
- package/lib/chart/core/guidePlacement.d.ts.map +1 -0
- package/lib/chart/core/guidePlacement.js +52 -0
- package/lib/chart/core/guidePlacement.js.map +1 -0
- package/lib/chart/core/index.d.ts +29 -2
- package/lib/chart/core/index.d.ts.map +1 -1
- package/lib/chart/core/index.js +19 -2
- package/lib/chart/core/index.js.map +1 -1
- package/lib/chart/core/labelStack.d.ts +27 -0
- package/lib/chart/core/labelStack.d.ts.map +1 -0
- package/lib/chart/core/labelStack.js +62 -0
- package/lib/chart/core/labelStack.js.map +1 -0
- package/lib/chart/core/legendBox.d.ts +152 -0
- package/lib/chart/core/legendBox.d.ts.map +1 -0
- package/lib/chart/core/legendBox.js +169 -0
- package/lib/chart/core/legendBox.js.map +1 -0
- package/lib/chart/core/selectionGeometry.d.ts +45 -0
- package/lib/chart/core/selectionGeometry.d.ts.map +1 -0
- package/lib/chart/core/selectionGeometry.js +49 -0
- package/lib/chart/core/selectionGeometry.js.map +1 -0
- package/lib/chart/core/spectrumColor.d.ts +80 -0
- package/lib/chart/core/spectrumColor.d.ts.map +1 -0
- package/lib/chart/core/spectrumColor.js +120 -0
- package/lib/chart/core/spectrumColor.js.map +1 -0
- package/lib/chart/core/stackCapacity.d.ts +136 -0
- package/lib/chart/core/stackCapacity.d.ts.map +1 -0
- package/lib/chart/core/stackCapacity.js +153 -0
- package/lib/chart/core/stackCapacity.js.map +1 -0
- package/lib/chart/core/svgPoint.d.ts +62 -0
- package/lib/chart/core/svgPoint.d.ts.map +1 -0
- package/lib/chart/core/svgPoint.js +43 -0
- package/lib/chart/core/svgPoint.js.map +1 -0
- package/lib/chart/core/tracePath.d.ts +94 -0
- package/lib/chart/core/tracePath.d.ts.map +1 -0
- package/lib/chart/core/tracePath.js +191 -0
- package/lib/chart/core/tracePath.js.map +1 -0
- package/lib/chart/core/trackerReadout.d.ts +55 -0
- package/lib/chart/core/trackerReadout.d.ts.map +1 -0
- package/lib/chart/core/trackerReadout.js +53 -0
- package/lib/chart/core/trackerReadout.js.map +1 -0
- package/lib/chart/core/viewTransform.d.ts +167 -0
- package/lib/chart/core/viewTransform.d.ts.map +1 -0
- package/lib/chart/core/viewTransform.js +188 -0
- package/lib/chart/core/viewTransform.js.map +1 -0
- package/lib/chart/core/zoomDomain.d.ts +127 -0
- package/lib/chart/core/zoomDomain.d.ts.map +1 -0
- package/lib/chart/core/zoomDomain.js +175 -0
- package/lib/chart/core/zoomDomain.js.map +1 -0
- package/lib/chart/ui/Axes.d.ts +104 -0
- package/lib/chart/ui/Axes.d.ts.map +1 -0
- package/lib/chart/ui/Axes.js +155 -0
- package/lib/chart/ui/Axes.js.map +1 -0
- package/lib/chart/ui/AxisGuide.d.ts +60 -0
- package/lib/chart/ui/AxisGuide.d.ts.map +1 -0
- package/lib/chart/ui/AxisGuide.js +111 -0
- package/lib/chart/ui/AxisGuide.js.map +1 -0
- package/lib/chart/ui/ChartStack.d.ts +81 -0
- package/lib/chart/ui/ChartStack.d.ts.map +1 -0
- package/lib/chart/ui/ChartStack.js +42 -0
- package/lib/chart/ui/ChartStack.js.map +1 -0
- package/lib/chart/ui/ChartTracker.d.ts +36 -0
- package/lib/chart/ui/ChartTracker.d.ts.map +1 -0
- package/lib/chart/ui/ChartTracker.js +27 -0
- package/lib/chart/ui/ChartTracker.js.map +1 -0
- package/lib/chart/ui/PlotCaption.d.ts +44 -0
- package/lib/chart/ui/PlotCaption.d.ts.map +1 -0
- package/lib/chart/ui/PlotCaption.js +68 -0
- package/lib/chart/ui/PlotCaption.js.map +1 -0
- package/lib/chart/ui/SelectionRect.d.ts +27 -0
- package/lib/chart/ui/SelectionRect.d.ts.map +1 -0
- package/lib/chart/ui/SelectionRect.js +31 -0
- package/lib/chart/ui/SelectionRect.js.map +1 -0
- package/lib/chart/ui/TraceLegend.d.ts +99 -0
- package/lib/chart/ui/TraceLegend.d.ts.map +1 -0
- package/lib/chart/ui/TraceLegend.js +45 -0
- package/lib/chart/ui/TraceLegend.js.map +1 -0
- package/lib/chart/ui/chartGestures.d.ts +158 -0
- package/lib/chart/ui/chartGestures.d.ts.map +1 -0
- package/lib/chart/ui/chartGestures.js +145 -0
- package/lib/chart/ui/chartGestures.js.map +1 -0
- package/lib/chart/ui/chartStackLevel.d.ts +115 -0
- package/lib/chart/ui/chartStackLevel.d.ts.map +1 -0
- package/lib/chart/ui/chartStackLevel.js +96 -0
- package/lib/chart/ui/chartStackLevel.js.map +1 -0
- package/lib/chart/ui/chartSurface.d.ts +35 -0
- package/lib/chart/ui/chartSurface.d.ts.map +1 -0
- package/lib/chart/ui/chartSurface.js +58 -0
- package/lib/chart/ui/chartSurface.js.map +1 -0
- package/lib/chart/ui/index.d.ts +24 -0
- package/lib/chart/ui/index.d.ts.map +1 -1
- package/lib/chart/ui/index.js +13 -0
- package/lib/chart/ui/index.js.map +1 -1
- package/lib/chart/ui/useChartPointer.d.ts +124 -0
- package/lib/chart/ui/useChartPointer.d.ts.map +1 -0
- package/lib/chart/ui/useChartPointer.js +152 -0
- package/lib/chart/ui/useChartPointer.js.map +1 -0
- package/lib/chart/ui/useChartSize.d.ts +49 -0
- package/lib/chart/ui/useChartSize.d.ts.map +1 -0
- package/lib/chart/ui/useChartSize.js +91 -0
- package/lib/chart/ui/useChartSize.js.map +1 -0
- package/lib/chart/ui/useChartWindow.d.ts +147 -0
- package/lib/chart/ui/useChartWindow.d.ts.map +1 -0
- package/lib/chart/ui/useChartWindow.js +135 -0
- package/lib/chart/ui/useChartWindow.js.map +1 -0
- package/lib/chart/ui/useChartZoom.d.ts +88 -0
- package/lib/chart/ui/useChartZoom.d.ts.map +1 -0
- package/lib/chart/ui/useChartZoom.js +142 -0
- package/lib/chart/ui/useChartZoom.js.map +1 -0
- package/lib/chart/ui/useWheelListener.d.ts +30 -0
- package/lib/chart/ui/useWheelListener.d.ts.map +1 -0
- package/lib/chart/ui/useWheelListener.js +57 -0
- package/lib/chart/ui/useWheelListener.js.map +1 -0
- package/lib/chrome/ui/AccountButton.d.ts +76 -0
- package/lib/chrome/ui/AccountButton.d.ts.map +1 -0
- package/lib/chrome/ui/AccountButton.js +66 -0
- package/lib/chrome/ui/AccountButton.js.map +1 -0
- package/lib/chrome/ui/index.d.ts +2 -0
- package/lib/chrome/ui/index.d.ts.map +1 -1
- package/lib/chrome/ui/index.js +1 -0
- package/lib/chrome/ui/index.js.map +1 -1
- package/lib/clipboard/core/copyPng.d.ts +13 -0
- package/lib/clipboard/core/copyPng.d.ts.map +1 -0
- package/lib/clipboard/core/copyPng.js +19 -0
- package/lib/clipboard/core/copyPng.js.map +1 -0
- package/lib/clipboard/core/index.d.ts +1 -0
- package/lib/clipboard/core/index.d.ts.map +1 -1
- package/lib/clipboard/core/index.js +1 -0
- package/lib/clipboard/core/index.js.map +1 -1
- package/lib/clipboard/ui/ClickToCopy.d.ts +6 -0
- package/lib/clipboard/ui/ClickToCopy.d.ts.map +1 -1
- package/lib/clipboard/ui/ClickToCopy.js +3 -3
- package/lib/clipboard/ui/ClickToCopy.js.map +1 -1
- package/lib/core.d.ts +1 -0
- package/lib/core.d.ts.map +1 -1
- package/lib/core.js +1 -0
- package/lib/core.js.map +1 -1
- package/lib/download/core/exportStyles.d.ts +22 -0
- package/lib/download/core/exportStyles.d.ts.map +1 -0
- package/lib/download/core/exportStyles.js +19 -0
- package/lib/download/core/exportStyles.js.map +1 -0
- package/lib/download/core/imageResolution.d.ts +88 -0
- package/lib/download/core/imageResolution.d.ts.map +1 -0
- package/lib/download/core/imageResolution.js +77 -0
- package/lib/download/core/imageResolution.js.map +1 -0
- package/lib/download/core/index.d.ts +13 -0
- package/lib/download/core/index.d.ts.map +1 -1
- package/lib/download/core/index.js +8 -0
- package/lib/download/core/index.js.map +1 -1
- package/lib/download/core/pictureExport.d.ts +93 -0
- package/lib/download/core/pictureExport.d.ts.map +1 -0
- package/lib/download/core/pictureExport.js +116 -0
- package/lib/download/core/pictureExport.js.map +1 -0
- package/lib/download/core/stackedDrawing.d.ts +36 -0
- package/lib/download/core/stackedDrawing.d.ts.map +1 -0
- package/lib/download/core/stackedDrawing.js +98 -0
- package/lib/download/core/stackedDrawing.js.map +1 -0
- package/lib/download/core/svgBounds.d.ts +44 -0
- package/lib/download/core/svgBounds.d.ts.map +1 -0
- package/lib/download/core/svgBounds.js +69 -0
- package/lib/download/core/svgBounds.js.map +1 -0
- package/lib/download/core/svgNamespace.d.ts +9 -0
- package/lib/download/core/svgNamespace.d.ts.map +1 -0
- package/lib/download/core/svgNamespace.js +10 -0
- package/lib/download/core/svgNamespace.js.map +1 -0
- package/lib/download/core/svgToPng.d.ts +43 -0
- package/lib/download/core/svgToPng.d.ts.map +1 -0
- package/lib/download/core/svgToPng.js +79 -0
- package/lib/download/core/svgToPng.js.map +1 -0
- package/lib/download/core/svgToString.d.ts +45 -0
- package/lib/download/core/svgToString.d.ts.map +1 -0
- package/lib/download/core/svgToString.js +58 -0
- package/lib/download/core/svgToString.js.map +1 -0
- package/lib/download/ui/ExportDialogFrame.d.ts +46 -0
- package/lib/download/ui/ExportDialogFrame.d.ts.map +1 -0
- package/lib/download/ui/ExportDialogFrame.js +24 -0
- package/lib/download/ui/ExportDialogFrame.js.map +1 -0
- package/lib/download/ui/ExportImageDialog.d.ts +47 -0
- package/lib/download/ui/ExportImageDialog.d.ts.map +1 -0
- package/lib/download/ui/ExportImageDialog.js +25 -0
- package/lib/download/ui/ExportImageDialog.js.map +1 -0
- package/lib/download/ui/ExportNameField.d.ts +29 -0
- package/lib/download/ui/ExportNameField.d.ts.map +1 -0
- package/lib/download/ui/ExportNameField.js +99 -0
- package/lib/download/ui/ExportNameField.js.map +1 -0
- package/lib/download/ui/ExportPictureSection.d.ts +38 -0
- package/lib/download/ui/ExportPictureSection.d.ts.map +1 -0
- package/lib/download/ui/ExportPictureSection.js +48 -0
- package/lib/download/ui/ExportPictureSection.js.map +1 -0
- package/lib/download/ui/index.d.ts +10 -0
- package/lib/download/ui/index.d.ts.map +1 -1
- package/lib/download/ui/index.js +5 -0
- package/lib/download/ui/index.js.map +1 -1
- package/lib/download/ui/useDrawingBox.d.ts +23 -0
- package/lib/download/ui/useDrawingBox.d.ts.map +1 -0
- package/lib/download/ui/useDrawingBox.js +21 -0
- package/lib/download/ui/useDrawingBox.js.map +1 -0
- package/lib/error/core/describeSource.d.ts +17 -0
- package/lib/error/core/describeSource.d.ts.map +1 -0
- package/lib/error/core/describeSource.js +19 -0
- package/lib/error/core/describeSource.js.map +1 -0
- package/lib/error/core/index.d.ts +1 -0
- package/lib/error/core/index.d.ts.map +1 -1
- package/lib/error/core/index.js +1 -0
- package/lib/error/core/index.js.map +1 -1
- package/lib/help/ui/HelpBody.d.ts +10 -1
- package/lib/help/ui/HelpBody.d.ts.map +1 -1
- package/lib/help/ui/HelpBody.js +24 -1
- package/lib/help/ui/HelpBody.js.map +1 -1
- package/lib/help/ui/index.d.ts +1 -1
- package/lib/help/ui/index.d.ts.map +1 -1
- package/lib/help/ui/index.js.map +1 -1
- package/lib/i18n/core/chromeCatalog.d.ts +1 -1
- package/lib/i18n/core/chromeCatalog.d.ts.map +1 -1
- package/lib/ir/core/analysisSpectra.d.ts +46 -0
- package/lib/ir/core/analysisSpectra.d.ts.map +1 -0
- package/lib/ir/core/analysisSpectra.js +187 -0
- package/lib/ir/core/analysisSpectra.js.map +1 -0
- package/lib/ir/core/assignBands.d.ts +83 -0
- package/lib/ir/core/assignBands.d.ts.map +1 -0
- package/lib/ir/core/assignBands.js +83 -0
- package/lib/ir/core/assignBands.js.map +1 -0
- package/lib/ir/core/bandAssignments.d.ts +47 -0
- package/lib/ir/core/bandAssignments.d.ts.map +1 -0
- package/lib/ir/core/bandAssignments.js +305 -0
- package/lib/ir/core/bandAssignments.js.map +1 -0
- package/lib/ir/core/bandLabelPlan.d.ts +93 -0
- package/lib/ir/core/bandLabelPlan.d.ts.map +1 -0
- package/lib/ir/core/bandLabelPlan.js +104 -0
- package/lib/ir/core/bandLabelPlan.js.map +1 -0
- package/lib/ir/core/detectIrFormat.d.ts +23 -0
- package/lib/ir/core/detectIrFormat.d.ts.map +1 -0
- package/lib/ir/core/detectIrFormat.js +133 -0
- package/lib/ir/core/detectIrFormat.js.map +1 -0
- package/lib/ir/core/downloadSpectra.d.ts +26 -0
- package/lib/ir/core/downloadSpectra.d.ts.map +1 -0
- package/lib/ir/core/downloadSpectra.js +37 -0
- package/lib/ir/core/downloadSpectra.js.map +1 -0
- package/lib/ir/core/fromJcamp.d.ts +35 -0
- package/lib/ir/core/fromJcamp.d.ts.map +1 -0
- package/lib/ir/core/fromJcamp.js +48 -0
- package/lib/ir/core/fromJcamp.js.map +1 -0
- package/lib/ir/core/fromSpc.d.ts +30 -0
- package/lib/ir/core/fromSpc.d.ts.map +1 -0
- package/lib/ir/core/fromSpc.js +40 -0
- package/lib/ir/core/fromSpc.js.map +1 -0
- package/lib/ir/core/index.d.ts +51 -0
- package/lib/ir/core/index.d.ts.map +1 -0
- package/lib/ir/core/index.js +35 -0
- package/lib/ir/core/index.js.map +1 -0
- package/lib/ir/core/irBand.d.ts +45 -0
- package/lib/ir/core/irBand.d.ts.map +1 -0
- package/lib/ir/core/irBand.js +30 -0
- package/lib/ir/core/irBand.js.map +1 -0
- package/lib/ir/core/irCommands.d.ts +168 -0
- package/lib/ir/core/irCommands.d.ts.map +1 -0
- package/lib/ir/core/irCommands.js +94 -0
- package/lib/ir/core/irCommands.js.map +1 -0
- package/lib/ir/core/irDomain.d.ts +63 -0
- package/lib/ir/core/irDomain.d.ts.map +1 -0
- package/lib/ir/core/irDomain.js +136 -0
- package/lib/ir/core/irDomain.js.map +1 -0
- package/lib/ir/core/irEditorApi.d.ts +42 -0
- package/lib/ir/core/irEditorApi.d.ts.map +1 -0
- package/lib/ir/core/irEditorApi.js +10 -0
- package/lib/ir/core/irEditorApi.js.map +1 -0
- package/lib/ir/core/irFormat.d.ts +42 -0
- package/lib/ir/core/irFormat.d.ts.map +1 -0
- package/lib/ir/core/irFormat.js +51 -0
- package/lib/ir/core/irFormat.js.map +1 -0
- package/lib/ir/core/irMode.d.ts +160 -0
- package/lib/ir/core/irMode.d.ts.map +1 -0
- package/lib/ir/core/irMode.js +175 -0
- package/lib/ir/core/irMode.js.map +1 -0
- package/lib/ir/core/irReducer.d.ts +101 -0
- package/lib/ir/core/irReducer.d.ts.map +1 -0
- package/lib/ir/core/irReducer.js +207 -0
- package/lib/ir/core/irReducer.js.map +1 -0
- package/lib/ir/core/irSidePanels.d.ts +22 -0
- package/lib/ir/core/irSidePanels.d.ts.map +1 -0
- package/lib/ir/core/irSidePanels.js +12 -0
- package/lib/ir/core/irSidePanels.js.map +1 -0
- package/lib/ir/core/irSpectrum.d.ts +140 -0
- package/lib/ir/core/irSpectrum.d.ts.map +1 -0
- package/lib/ir/core/irSpectrum.js +34 -0
- package/lib/ir/core/irSpectrum.js.map +1 -0
- package/lib/ir/core/irState.d.ts +119 -0
- package/lib/ir/core/irState.d.ts.map +1 -0
- package/lib/ir/core/irState.js +92 -0
- package/lib/ir/core/irState.js.map +1 -0
- package/lib/ir/core/loadIrSpectra.d.ts +36 -0
- package/lib/ir/core/loadIrSpectra.d.ts.map +1 -0
- package/lib/ir/core/loadIrSpectra.js +44 -0
- package/lib/ir/core/loadIrSpectra.js.map +1 -0
- package/lib/ir/core/nearestBand.d.ts +35 -0
- package/lib/ir/core/nearestBand.d.ts.map +1 -0
- package/lib/ir/core/nearestBand.js +47 -0
- package/lib/ir/core/nearestBand.js.map +1 -0
- package/lib/ir/core/pickBands.d.ts +70 -0
- package/lib/ir/core/pickBands.d.ts.map +1 -0
- package/lib/ir/core/pickBands.js +125 -0
- package/lib/ir/core/pickBands.js.map +1 -0
- package/lib/ir/core/spectrumJcamp.d.ts +58 -0
- package/lib/ir/core/spectrumJcamp.d.ts.map +1 -0
- package/lib/ir/core/spectrumJcamp.js +156 -0
- package/lib/ir/core/spectrumJcamp.js.map +1 -0
- package/lib/ir/core/toIrSpectrum.d.ts +59 -0
- package/lib/ir/core/toIrSpectrum.d.ts.map +1 -0
- package/lib/ir/core/toIrSpectrum.js +56 -0
- package/lib/ir/core/toIrSpectrum.js.map +1 -0
- package/lib/ir/ui/BandMarks.d.ts +52 -0
- package/lib/ir/ui/BandMarks.d.ts.map +1 -0
- package/lib/ir/ui/BandMarks.js +71 -0
- package/lib/ir/ui/BandMarks.js.map +1 -0
- package/lib/ir/ui/BandsPanel.d.ts +31 -0
- package/lib/ir/ui/BandsPanel.d.ts.map +1 -0
- package/lib/ir/ui/BandsPanel.js +94 -0
- package/lib/ir/ui/BandsPanel.js.map +1 -0
- package/lib/ir/ui/IrAboutDialog.d.ts +18 -0
- package/lib/ir/ui/IrAboutDialog.d.ts.map +1 -0
- package/lib/ir/ui/IrAboutDialog.js +32 -0
- package/lib/ir/ui/IrAboutDialog.js.map +1 -0
- package/lib/ir/ui/IrCanvas.d.ts +38 -0
- package/lib/ir/ui/IrCanvas.d.ts.map +1 -0
- package/lib/ir/ui/IrCanvas.js +41 -0
- package/lib/ir/ui/IrCanvas.js.map +1 -0
- package/lib/ir/ui/IrChart.d.ts +28 -0
- package/lib/ir/ui/IrChart.d.ts.map +1 -0
- package/lib/ir/ui/IrChart.js +114 -0
- package/lib/ir/ui/IrChart.js.map +1 -0
- package/lib/ir/ui/IrCommandProvider.d.ts +15 -0
- package/lib/ir/ui/IrCommandProvider.d.ts.map +1 -0
- package/lib/ir/ui/IrCommandProvider.js +14 -0
- package/lib/ir/ui/IrCommandProvider.js.map +1 -0
- package/lib/ir/ui/IrCommandTooltip.d.ts +16 -0
- package/lib/ir/ui/IrCommandTooltip.d.ts.map +1 -0
- package/lib/ir/ui/IrCommandTooltip.js +22 -0
- package/lib/ir/ui/IrCommandTooltip.js.map +1 -0
- package/lib/ir/ui/IrDocumentationDialog.d.ts +18 -0
- package/lib/ir/ui/IrDocumentationDialog.d.ts.map +1 -0
- package/lib/ir/ui/IrDocumentationDialog.js +68 -0
- package/lib/ir/ui/IrDocumentationDialog.js.map +1 -0
- package/lib/ir/ui/IrEditor.d.ts +60 -0
- package/lib/ir/ui/IrEditor.d.ts.map +1 -0
- package/lib/ir/ui/IrEditor.js +42 -0
- package/lib/ir/ui/IrEditor.js.map +1 -0
- package/lib/ir/ui/IrHeader.d.ts +13 -0
- package/lib/ir/ui/IrHeader.d.ts.map +1 -0
- package/lib/ir/ui/IrHeader.js +21 -0
- package/lib/ir/ui/IrHeader.js.map +1 -0
- package/lib/ir/ui/IrLogo.d.ts +20 -0
- package/lib/ir/ui/IrLogo.d.ts.map +1 -0
- package/lib/ir/ui/IrLogo.js +17 -0
- package/lib/ir/ui/IrLogo.js.map +1 -0
- package/lib/ir/ui/IrPointerTracker.d.ts +29 -0
- package/lib/ir/ui/IrPointerTracker.d.ts.map +1 -0
- package/lib/ir/ui/IrPointerTracker.js +47 -0
- package/lib/ir/ui/IrPointerTracker.js.map +1 -0
- package/lib/ir/ui/IrShell.d.ts +25 -0
- package/lib/ir/ui/IrShell.d.ts.map +1 -0
- package/lib/ir/ui/IrShell.js +178 -0
- package/lib/ir/ui/IrShell.js.map +1 -0
- package/lib/ir/ui/IrSidePanel.d.ts +26 -0
- package/lib/ir/ui/IrSidePanel.d.ts.map +1 -0
- package/lib/ir/ui/IrSidePanel.js +39 -0
- package/lib/ir/ui/IrSidePanel.js.map +1 -0
- package/lib/ir/ui/IrStateProvider.d.ts +19 -0
- package/lib/ir/ui/IrStateProvider.d.ts.map +1 -0
- package/lib/ir/ui/IrStateProvider.js +16 -0
- package/lib/ir/ui/IrStateProvider.js.map +1 -0
- package/lib/ir/ui/IrStatusBar.d.ts +14 -0
- package/lib/ir/ui/IrStatusBar.d.ts.map +1 -0
- package/lib/ir/ui/IrStatusBar.js +48 -0
- package/lib/ir/ui/IrStatusBar.js.map +1 -0
- package/lib/ir/ui/IrToolbar.d.ts +18 -0
- package/lib/ir/ui/IrToolbar.d.ts.map +1 -0
- package/lib/ir/ui/IrToolbar.js +32 -0
- package/lib/ir/ui/IrToolbar.js.map +1 -0
- package/lib/ir/ui/IrTraces.d.ts +63 -0
- package/lib/ir/ui/IrTraces.d.ts.map +1 -0
- package/lib/ir/ui/IrTraces.js +72 -0
- package/lib/ir/ui/IrTraces.js.map +1 -0
- package/lib/ir/ui/MetadataPanel.d.ts +15 -0
- package/lib/ir/ui/MetadataPanel.d.ts.map +1 -0
- package/lib/ir/ui/MetadataPanel.js +49 -0
- package/lib/ir/ui/MetadataPanel.js.map +1 -0
- package/lib/ir/ui/SpectraPanel.d.ts +20 -0
- package/lib/ir/ui/SpectraPanel.d.ts.map +1 -0
- package/lib/ir/ui/SpectraPanel.js +42 -0
- package/lib/ir/ui/SpectraPanel.js.map +1 -0
- package/lib/ir/ui/SpectrumRow.d.ts +26 -0
- package/lib/ir/ui/SpectrumRow.d.ts.map +1 -0
- package/lib/ir/ui/SpectrumRow.js +41 -0
- package/lib/ir/ui/SpectrumRow.js.map +1 -0
- package/lib/ir/ui/index.d.ts +56 -0
- package/lib/ir/ui/index.d.ts.map +1 -0
- package/lib/ir/ui/index.js +36 -0
- package/lib/ir/ui/index.js.map +1 -0
- package/lib/ir/ui/irActions.d.ts +52 -0
- package/lib/ir/ui/irActions.d.ts.map +1 -0
- package/lib/ir/ui/irActions.js +62 -0
- package/lib/ir/ui/irActions.js.map +1 -0
- package/lib/ir/ui/irChartProps.d.ts +116 -0
- package/lib/ir/ui/irChartProps.d.ts.map +1 -0
- package/lib/ir/ui/irChartProps.js +14 -0
- package/lib/ir/ui/irChartProps.js.map +1 -0
- package/lib/ir/ui/irCommandContext.d.ts +35 -0
- package/lib/ir/ui/irCommandContext.d.ts.map +1 -0
- package/lib/ir/ui/irCommandContext.js +44 -0
- package/lib/ir/ui/irCommandContext.js.map +1 -0
- package/lib/ir/ui/irStateContext.d.ts +26 -0
- package/lib/ir/ui/irStateContext.d.ts.map +1 -0
- package/lib/ir/ui/irStateContext.js +37 -0
- package/lib/ir/ui/irStateContext.js.map +1 -0
- package/lib/ir/ui/useIrEditor.d.ts +51 -0
- package/lib/ir/ui/useIrEditor.d.ts.map +1 -0
- package/lib/ir/ui/useIrEditor.js +88 -0
- package/lib/ir/ui/useIrEditor.js.map +1 -0
- package/lib/ir/ui/useIrPointer.d.ts +66 -0
- package/lib/ir/ui/useIrPointer.d.ts.map +1 -0
- package/lib/ir/ui/useIrPointer.js +53 -0
- package/lib/ir/ui/useIrPointer.js.map +1 -0
- package/lib/ir/ui/useIrShortcuts.d.ts +24 -0
- package/lib/ir/ui/useIrShortcuts.d.ts.map +1 -0
- package/lib/ir/ui/useIrShortcuts.js +73 -0
- package/lib/ir/ui/useIrShortcuts.js.map +1 -0
- package/lib/ir/ui/useIrZoom.d.ts +51 -0
- package/lib/ir/ui/useIrZoom.d.ts.map +1 -0
- package/lib/ir/ui/useIrZoom.js +46 -0
- package/lib/ir/ui/useIrZoom.js.map +1 -0
- package/lib/ir.d.ts +13 -0
- package/lib/ir.d.ts.map +1 -0
- package/lib/ir.js +13 -0
- package/lib/ir.js.map +1 -0
- package/lib/locales/de.json +3 -0
- package/lib/locales/en.json +3 -0
- package/lib/locales/es.json +3 -0
- package/lib/locales/fr.json +3 -0
- package/lib/panel/core/dialogStyles.d.ts +13 -0
- package/lib/panel/core/dialogStyles.d.ts.map +1 -0
- package/lib/panel/core/dialogStyles.js +11 -0
- package/lib/panel/core/dialogStyles.js.map +1 -0
- package/lib/panel/core/index.d.ts +19 -0
- package/lib/panel/core/index.d.ts.map +1 -0
- package/lib/panel/core/index.js +18 -0
- package/lib/panel/core/index.js.map +1 -0
- package/lib/panel/core/isEditingField.d.ts +17 -0
- package/lib/panel/core/isEditingField.d.ts.map +1 -0
- package/lib/panel/core/isEditingField.js +25 -0
- package/lib/panel/core/isEditingField.js.map +1 -0
- package/lib/panel/core/panelStyles.d.ts +242 -0
- package/lib/panel/core/panelStyles.d.ts.map +1 -0
- package/lib/panel/core/panelStyles.js +228 -0
- package/lib/panel/core/panelStyles.js.map +1 -0
- package/lib/panel/core/rowSpacers.d.ts +38 -0
- package/lib/panel/core/rowSpacers.d.ts.map +1 -0
- package/lib/panel/core/rowSpacers.js +31 -0
- package/lib/panel/core/rowSpacers.js.map +1 -0
- package/lib/panel/core/statusBar.d.ts +44 -0
- package/lib/panel/core/statusBar.d.ts.map +1 -0
- package/lib/panel/core/statusBar.js +40 -0
- package/lib/panel/core/statusBar.js.map +1 -0
- package/lib/panel/core/textFilter.d.ts +22 -0
- package/lib/panel/core/textFilter.d.ts.map +1 -0
- package/lib/panel/core/textFilter.js +32 -0
- package/lib/panel/core/textFilter.js.map +1 -0
- package/lib/panel/core/yieldToPainting.d.ts +17 -0
- package/lib/panel/core/yieldToPainting.d.ts.map +1 -0
- package/lib/panel/core/yieldToPainting.js +21 -0
- package/lib/panel/core/yieldToPainting.js.map +1 -0
- package/lib/panel/ui/AboutDialogFrame.d.ts +36 -0
- package/lib/panel/ui/AboutDialogFrame.d.ts.map +1 -0
- package/lib/panel/ui/AboutDialogFrame.js +43 -0
- package/lib/panel/ui/AboutDialogFrame.js.map +1 -0
- package/lib/panel/ui/ClearButton.d.ts +28 -0
- package/lib/panel/ui/ClearButton.d.ts.map +1 -0
- package/lib/panel/ui/ClearButton.js +23 -0
- package/lib/panel/ui/ClearButton.js.map +1 -0
- package/lib/panel/ui/DocumentationDialogFrame.d.ts +39 -0
- package/lib/panel/ui/DocumentationDialogFrame.d.ts.map +1 -0
- package/lib/panel/ui/DocumentationDialogFrame.js +29 -0
- package/lib/panel/ui/DocumentationDialogFrame.js.map +1 -0
- package/lib/panel/ui/FilterInput.d.ts +31 -0
- package/lib/panel/ui/FilterInput.d.ts.map +1 -0
- package/lib/panel/ui/FilterInput.js +23 -0
- package/lib/panel/ui/FilterInput.js.map +1 -0
- package/lib/panel/ui/HelpLabel.d.ts +24 -0
- package/lib/panel/ui/HelpLabel.d.ts.map +1 -0
- package/lib/panel/ui/HelpLabel.js +23 -0
- package/lib/panel/ui/HelpLabel.js.map +1 -0
- package/lib/panel/ui/PanelMessage.d.ts +41 -0
- package/lib/panel/ui/PanelMessage.d.ts.map +1 -0
- package/lib/panel/ui/PanelMessage.js +30 -0
- package/lib/panel/ui/PanelMessage.js.map +1 -0
- package/lib/panel/ui/PanelRail.d.ts +41 -0
- package/lib/panel/ui/PanelRail.d.ts.map +1 -0
- package/lib/panel/ui/PanelRail.js +12 -0
- package/lib/panel/ui/PanelRail.js.map +1 -0
- package/lib/panel/ui/Section.d.ts +25 -0
- package/lib/panel/ui/Section.d.ts.map +1 -0
- package/lib/panel/ui/Section.js +41 -0
- package/lib/panel/ui/Section.js.map +1 -0
- package/lib/panel/ui/SidePanelStack.d.ts +62 -0
- package/lib/panel/ui/SidePanelStack.d.ts.map +1 -0
- package/lib/panel/ui/SidePanelStack.js +40 -0
- package/lib/panel/ui/SidePanelStack.js.map +1 -0
- package/lib/panel/ui/SpectrumColorSwatch.d.ts +33 -0
- package/lib/panel/ui/SpectrumColorSwatch.d.ts.map +1 -0
- package/lib/panel/ui/SpectrumColorSwatch.js +76 -0
- package/lib/panel/ui/SpectrumColorSwatch.js.map +1 -0
- package/lib/panel/ui/index.d.ts +37 -0
- package/lib/panel/ui/index.d.ts.map +1 -0
- package/lib/panel/ui/index.js +24 -0
- package/lib/panel/ui/index.js.map +1 -0
- package/lib/panel/ui/useConfirmOnEnter.d.ts +19 -0
- package/lib/panel/ui/useConfirmOnEnter.d.ts.map +1 -0
- package/lib/panel/ui/useConfirmOnEnter.js +64 -0
- package/lib/panel/ui/useConfirmOnEnter.js.map +1 -0
- package/lib/panel/ui/useFilterBox.d.ts +23 -0
- package/lib/panel/ui/useFilterBox.d.ts.map +1 -0
- package/lib/panel/ui/useFilterBox.js +22 -0
- package/lib/panel/ui/useFilterBox.js.map +1 -0
- package/lib/panel/ui/useVirtualRows.d.ts +46 -0
- package/lib/panel/ui/useVirtualRows.d.ts.map +1 -0
- package/lib/panel/ui/useVirtualRows.js +56 -0
- package/lib/panel/ui/useVirtualRows.js.map +1 -0
- package/lib/panel/ui/useVirtualWindowRows.d.ts +40 -0
- package/lib/panel/ui/useVirtualWindowRows.d.ts.map +1 -0
- package/lib/panel/ui/useVirtualWindowRows.js +65 -0
- package/lib/panel/ui/useVirtualWindowRows.js.map +1 -0
- package/lib/structure/core/conformerBoltzmann.d.ts +56 -0
- package/lib/structure/core/conformerBoltzmann.d.ts.map +1 -0
- package/lib/structure/core/conformerBoltzmann.js +96 -0
- package/lib/structure/core/conformerBoltzmann.js.map +1 -0
- package/lib/structure/core/conformerEnergy.d.ts +69 -0
- package/lib/structure/core/conformerEnergy.d.ts.map +1 -0
- package/lib/structure/core/conformerEnergy.js +47 -0
- package/lib/structure/core/conformerEnergy.js.map +1 -0
- package/lib/structure/core/index.d.ts +3 -0
- package/lib/structure/core/index.d.ts.map +1 -1
- package/lib/structure/core/index.js +2 -0
- package/lib/structure/core/index.js.map +1 -1
- package/lib/structure/ui/ConformerTable.d.ts +73 -0
- package/lib/structure/ui/ConformerTable.d.ts.map +1 -0
- package/lib/structure/ui/ConformerTable.js +259 -0
- package/lib/structure/ui/ConformerTable.js.map +1 -0
- package/lib/structure/ui/conformerColumns.d.ts +30 -0
- package/lib/structure/ui/conformerColumns.d.ts.map +1 -0
- package/lib/structure/ui/conformerColumns.js +37 -0
- package/lib/structure/ui/conformerColumns.js.map +1 -0
- package/lib/ui.d.ts +5 -0
- package/lib/ui.d.ts.map +1 -1
- package/lib/ui.js +3 -0
- package/lib/ui.js.map +1 -1
- package/package.json +8 -1
- package/src/chart/core/axisLabels.ts +117 -0
- package/src/chart/core/boxLayout.ts +126 -0
- package/src/chart/core/chartAxisScale.ts +92 -10
- package/src/chart/core/chartDomain.ts +185 -0
- package/src/chart/core/chartGeometry.ts +159 -0
- package/src/chart/core/chartPane.ts +10 -0
- package/src/chart/core/chartScale.ts +7 -4
- package/src/chart/core/chartTheme.ts +161 -0
- package/src/chart/core/chartViewport.ts +40 -13
- package/src/chart/core/guidePlacement.ts +66 -0
- package/src/chart/core/index.ts +121 -2
- package/src/chart/core/labelStack.ts +72 -0
- package/src/chart/core/legendBox.ts +263 -0
- package/src/chart/core/selectionGeometry.ts +68 -0
- package/src/chart/core/spectrumColor.ts +129 -0
- package/src/chart/core/stackCapacity.ts +162 -0
- package/src/chart/core/svgPoint.ts +77 -0
- package/src/chart/core/tracePath.ts +228 -0
- package/src/chart/core/trackerReadout.ts +78 -0
- package/src/chart/core/viewTransform.ts +287 -0
- package/src/chart/core/zoomDomain.ts +235 -0
- package/src/chart/ui/Axes.tsx +361 -0
- package/src/chart/ui/AxisGuide.tsx +187 -0
- package/src/chart/ui/ChartStack.tsx +130 -0
- package/src/chart/ui/ChartTracker.tsx +101 -0
- package/src/chart/ui/PlotCaption.tsx +108 -0
- package/src/chart/ui/SelectionRect.tsx +52 -0
- package/src/chart/ui/TraceLegend.tsx +193 -0
- package/src/chart/ui/chartGestures.ts +270 -0
- package/src/chart/ui/chartStackLevel.tsx +210 -0
- package/src/chart/ui/chartSurface.ts +66 -0
- package/src/chart/ui/index.ts +35 -0
- package/src/chart/ui/useChartPointer.ts +223 -0
- package/src/chart/ui/useChartSize.ts +115 -0
- package/src/chart/ui/useChartWindow.ts +240 -0
- package/src/chart/ui/useChartZoom.ts +255 -0
- package/src/chart/ui/useWheelListener.ts +62 -0
- package/src/chrome/ui/AccountButton.tsx +185 -0
- package/src/chrome/ui/index.ts +2 -0
- package/src/clipboard/core/copyPng.ts +20 -0
- package/src/clipboard/core/index.ts +1 -0
- package/src/clipboard/ui/ClickToCopy.tsx +9 -1
- package/src/core.ts +1 -0
- package/src/download/core/exportStyles.ts +20 -0
- package/src/download/core/imageResolution.ts +118 -0
- package/src/download/core/index.ts +34 -0
- package/src/download/core/pictureExport.ts +207 -0
- package/src/download/core/stackedDrawing.ts +108 -0
- package/src/download/core/svgBounds.ts +80 -0
- package/src/download/core/svgNamespace.ts +9 -0
- package/src/download/core/svgToPng.ts +121 -0
- package/src/download/core/svgToString.ts +95 -0
- package/src/download/ui/ExportDialogFrame.tsx +86 -0
- package/src/download/ui/ExportImageDialog.tsx +91 -0
- package/src/download/ui/ExportNameField.tsx +148 -0
- package/src/download/ui/ExportPictureSection.tsx +142 -0
- package/src/download/ui/index.ts +11 -0
- package/src/download/ui/useDrawingBox.ts +37 -0
- package/src/error/core/describeSource.ts +18 -0
- package/src/error/core/index.ts +1 -0
- package/src/help/ui/HelpBody.tsx +41 -2
- package/src/help/ui/index.ts +6 -1
- package/src/ir/core/analysisSpectra.ts +231 -0
- package/src/ir/core/assignBands.ts +144 -0
- package/src/ir/core/bandAssignments.ts +329 -0
- package/src/ir/core/bandLabelPlan.ts +194 -0
- package/src/ir/core/detectIrFormat.ts +139 -0
- package/src/ir/core/downloadSpectra.ts +57 -0
- package/src/ir/core/fromJcamp.ts +70 -0
- package/src/ir/core/fromSpc.ts +61 -0
- package/src/ir/core/index.ts +113 -0
- package/src/ir/core/irBand.ts +57 -0
- package/src/ir/core/irCommands.ts +154 -0
- package/src/ir/core/irDomain.ts +163 -0
- package/src/ir/core/irEditorApi.ts +44 -0
- package/src/ir/core/irFormat.ts +57 -0
- package/src/ir/core/irMode.ts +203 -0
- package/src/ir/core/irReducer.ts +273 -0
- package/src/ir/core/irSidePanels.ts +20 -0
- package/src/ir/core/irSpectrum.ts +155 -0
- package/src/ir/core/irState.ts +173 -0
- package/src/ir/core/loadIrSpectra.ts +79 -0
- package/src/ir/core/nearestBand.ts +57 -0
- package/src/ir/core/pickBands.ts +181 -0
- package/src/ir/core/spectrumJcamp.ts +178 -0
- package/src/ir/core/toIrSpectrum.ts +102 -0
- package/src/ir/ui/BandMarks.tsx +166 -0
- package/src/ir/ui/BandsPanel.tsx +271 -0
- package/src/ir/ui/IrAboutDialog.tsx +121 -0
- package/src/ir/ui/IrCanvas.tsx +91 -0
- package/src/ir/ui/IrChart.tsx +215 -0
- package/src/ir/ui/IrCommandProvider.tsx +32 -0
- package/src/ir/ui/IrCommandTooltip.tsx +36 -0
- package/src/ir/ui/IrDocumentationDialog.tsx +174 -0
- package/src/ir/ui/IrEditor.tsx +99 -0
- package/src/ir/ui/IrHeader.tsx +39 -0
- package/src/ir/ui/IrLogo.tsx +49 -0
- package/src/ir/ui/IrPointerTracker.tsx +102 -0
- package/src/ir/ui/IrShell.tsx +285 -0
- package/src/ir/ui/IrSidePanel.tsx +78 -0
- package/src/ir/ui/IrStateProvider.tsx +32 -0
- package/src/ir/ui/IrStatusBar.tsx +97 -0
- package/src/ir/ui/IrToolbar.tsx +102 -0
- package/src/ir/ui/IrTraces.tsx +134 -0
- package/src/ir/ui/MetadataPanel.tsx +88 -0
- package/src/ir/ui/SpectraPanel.tsx +114 -0
- package/src/ir/ui/SpectrumRow.tsx +127 -0
- package/src/ir/ui/index.ts +56 -0
- package/src/ir/ui/irActions.ts +103 -0
- package/src/ir/ui/irChartProps.ts +118 -0
- package/src/ir/ui/irCommandContext.tsx +62 -0
- package/src/ir/ui/irStateContext.ts +48 -0
- package/src/ir/ui/useIrEditor.ts +139 -0
- package/src/ir/ui/useIrPointer.ts +109 -0
- package/src/ir/ui/useIrShortcuts.ts +95 -0
- package/src/ir/ui/useIrZoom.ts +86 -0
- package/src/ir.ts +13 -0
- package/src/locales/de.json +3 -0
- package/src/locales/en.json +3 -0
- package/src/locales/es.json +3 -0
- package/src/locales/fr.json +3 -0
- package/src/panel/core/dialogStyles.ts +11 -0
- package/src/panel/core/index.ts +47 -0
- package/src/panel/core/isEditingField.ts +23 -0
- package/src/panel/core/panelStyles.ts +248 -0
- package/src/panel/core/rowSpacers.ts +50 -0
- package/src/panel/core/statusBar.ts +48 -0
- package/src/panel/core/textFilter.ts +33 -0
- package/src/panel/core/yieldToPainting.ts +20 -0
- package/src/panel/ui/AboutDialogFrame.tsx +100 -0
- package/src/panel/ui/ClearButton.tsx +42 -0
- package/src/panel/ui/DocumentationDialogFrame.tsx +86 -0
- package/src/panel/ui/FilterInput.tsx +60 -0
- package/src/panel/ui/HelpLabel.tsx +43 -0
- package/src/panel/ui/PanelMessage.tsx +64 -0
- package/src/panel/ui/PanelRail.tsx +64 -0
- package/src/panel/ui/Section.tsx +66 -0
- package/src/panel/ui/SidePanelStack.tsx +109 -0
- package/src/panel/ui/SpectrumColorSwatch.tsx +119 -0
- package/src/panel/ui/index.ts +47 -0
- package/src/panel/ui/useConfirmOnEnter.ts +68 -0
- package/src/panel/ui/useFilterBox.ts +35 -0
- package/src/panel/ui/useVirtualRows.ts +82 -0
- package/src/panel/ui/useVirtualWindowRows.ts +86 -0
- package/src/structure/core/conformerBoltzmann.ts +102 -0
- package/src/structure/core/conformerEnergy.ts +97 -0
- package/src/structure/core/index.ts +15 -0
- package/src/structure/ui/ConformerTable.tsx +429 -0
- package/src/structure/ui/conformerColumns.ts +55 -0
- package/src/ui.ts +13 -0
- package/styles/chrome.css +55 -0
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Where the pointer is over a chart, and what that place means.
|
|
3
|
+
*
|
|
4
|
+
* What it *means* is the one thing this hook does not decide. A mass spectrum
|
|
5
|
+
* reads an m/z, an intensity and the peak within reach; an infrared spectrum
|
|
6
|
+
* reads a wavenumber, an absorbance and the band it falls in. Both are the same
|
|
7
|
+
* mechanism — place the pointer in user units, refuse the margins, and report
|
|
8
|
+
* only when the answer changed — so the mechanism is here and the reading is
|
|
9
|
+
* handed in.
|
|
10
|
+
*
|
|
11
|
+
* Every value is compared before it is stored or reported. A pointer resting on
|
|
12
|
+
* one feature fires `pointermove` on every sub-pixel tremor of a hand, and a
|
|
13
|
+
* fresh answer each time would re-render the panel beside the chart — and, where
|
|
14
|
+
* that panel is a linked viewer that reports its own hovers back, would
|
|
15
|
+
* ping-pong between the two until the tab stops answering.
|
|
16
|
+
*/
|
|
17
|
+
import { useEffect, useLayoutEffect, useRef, useState } from 'react';
|
|
18
|
+
import { svgPointAt } from "../core/svgPoint.js";
|
|
19
|
+
/**
|
|
20
|
+
* Follow the pointer over a chart.
|
|
21
|
+
*
|
|
22
|
+
* The listeners are attached to the element rather than returned as props, so
|
|
23
|
+
* that a chart already spreading another hook's `onPointerMove` onto its SVG
|
|
24
|
+
* does not have to merge two handlers into one — and so that the options are
|
|
25
|
+
* read live, at the moment the pointer moves, rather than closed over when the
|
|
26
|
+
* listener was attached.
|
|
27
|
+
*
|
|
28
|
+
* The pointer leaving is heard as `pointerout` and not as the `pointerleave`
|
|
29
|
+
* that reads so much more naturally, because a chart with a control laid over
|
|
30
|
+
* it — a legend whose rows answer a hover — has two writers of one highlight
|
|
31
|
+
* and they must be sequenced. React synthesises the overlay's `pointerenter`
|
|
32
|
+
* from the *earlier* `pointerout` and dispatches it at the root, so a browser
|
|
33
|
+
* fires `pointerout` on the SVG, then React's `onPointerEnter` on the row, then
|
|
34
|
+
* `pointerleave` on the SVG: listening for the leave puts this hook's "nothing
|
|
35
|
+
* is under the pointer" **after** the row's "this trace is being read", and
|
|
36
|
+
* wipes it. Heard as `pointerout`, the report lands first and the row has the
|
|
37
|
+
* last word. The containment test is what `pointerleave` was giving for free.
|
|
38
|
+
* @param options - The chart, and how to read a point on it.
|
|
39
|
+
* @returns Where the pointer is and what it reads, both `null` while it is
|
|
40
|
+
* anywhere but over the plot.
|
|
41
|
+
*/
|
|
42
|
+
export function useChartPointer(options) {
|
|
43
|
+
const { svgRef } = options;
|
|
44
|
+
const [pointer, setPointer] = useState(POINTER_AWAY);
|
|
45
|
+
const latest = useRef(options);
|
|
46
|
+
const reported = useRef(null);
|
|
47
|
+
useLayoutEffect(() => {
|
|
48
|
+
latest.current = options;
|
|
49
|
+
});
|
|
50
|
+
useEffect(() => {
|
|
51
|
+
const svg = svgRef.current;
|
|
52
|
+
if (svg === null)
|
|
53
|
+
return;
|
|
54
|
+
function show(next) {
|
|
55
|
+
const { sameReadout, onReadout } = latest.current;
|
|
56
|
+
setPointer((current) => nextChartPointer(current, next, sameReadout));
|
|
57
|
+
if (sameReading(reported.current, next.readout, sameReadout))
|
|
58
|
+
return;
|
|
59
|
+
reported.current = next.readout;
|
|
60
|
+
onReadout?.(next.readout);
|
|
61
|
+
}
|
|
62
|
+
function move(event) {
|
|
63
|
+
const { plot, read } = latest.current;
|
|
64
|
+
const point = svgPointAt(svg, event.clientX, event.clientY);
|
|
65
|
+
show(point === null || !isInsidePlot(plot, point)
|
|
66
|
+
? POINTER_AWAY
|
|
67
|
+
: { position: point, readout: read(point) });
|
|
68
|
+
}
|
|
69
|
+
function out(event) {
|
|
70
|
+
if (leftChart(svg, event.relatedTarget))
|
|
71
|
+
show(POINTER_AWAY);
|
|
72
|
+
}
|
|
73
|
+
svg.addEventListener('pointermove', move);
|
|
74
|
+
svg.addEventListener('pointerout', out);
|
|
75
|
+
return () => {
|
|
76
|
+
svg.removeEventListener('pointermove', move);
|
|
77
|
+
svg.removeEventListener('pointerout', out);
|
|
78
|
+
};
|
|
79
|
+
}, [svgRef]);
|
|
80
|
+
return pointer;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Whether a `pointerout` means the pointer has left the chart.
|
|
84
|
+
*
|
|
85
|
+
* It also fires on the way *into* a child of the SVG — a trace, a label, the
|
|
86
|
+
* rectangle behind a legend — which is not leaving the chart at all, and is the
|
|
87
|
+
* one thing `pointerleave` was giving for free.
|
|
88
|
+
* @param svg - The chart, `null` before it is on screen.
|
|
89
|
+
* @param related - What the pointer moved onto, `null` when it left the window
|
|
90
|
+
* altogether.
|
|
91
|
+
* @returns Whether the chart no longer has the pointer.
|
|
92
|
+
*/
|
|
93
|
+
export function leftChart(svg, related) {
|
|
94
|
+
if (svg === null)
|
|
95
|
+
return true;
|
|
96
|
+
return !(related instanceof Node) || !svg.contains(related);
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Whether two readings — either of which may be absent — say the same thing.
|
|
100
|
+
* @param current - What was last read, `null` while the pointer was away.
|
|
101
|
+
* @param next - What has just been read, `null` when it has left the plot.
|
|
102
|
+
* @param sameReadout - The viewer's own comparison.
|
|
103
|
+
* @returns Whether the report can be skipped.
|
|
104
|
+
*/
|
|
105
|
+
export function sameReading(current, next, sameReadout) {
|
|
106
|
+
if (current === next)
|
|
107
|
+
return true;
|
|
108
|
+
if (current === null || next === null)
|
|
109
|
+
return false;
|
|
110
|
+
return sameReadout(current, next);
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* What to hold, given where the pointer has just been seen.
|
|
114
|
+
*
|
|
115
|
+
* The answer already held comes back whenever it still stands, so the whole
|
|
116
|
+
* chart is left alone while a hand rests on a feature — `pointermove` fires on
|
|
117
|
+
* every tremor, and several of those land on the very same user-unit position.
|
|
118
|
+
* @param current - What is held.
|
|
119
|
+
* @param next - What has just been read.
|
|
120
|
+
* @param sameReadout - The viewer's own comparison, asked only once the pointer
|
|
121
|
+
* turns out not to have moved.
|
|
122
|
+
* @returns `current` itself when it already says it, `next` otherwise.
|
|
123
|
+
*/
|
|
124
|
+
export function nextChartPointer(current, next, sameReadout) {
|
|
125
|
+
if (current === next)
|
|
126
|
+
return current;
|
|
127
|
+
if (current.position === null || next.position === null) {
|
|
128
|
+
return current.position === next.position ? current : next;
|
|
129
|
+
}
|
|
130
|
+
if (current.position.x !== next.position.x ||
|
|
131
|
+
current.position.y !== next.position.y) {
|
|
132
|
+
return next;
|
|
133
|
+
}
|
|
134
|
+
return sameReading(current.readout, next.readout, sameReadout)
|
|
135
|
+
? current
|
|
136
|
+
: next;
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Whether a point is over the data rather than over an axis.
|
|
140
|
+
* @param plot - Where the plot sits inside the SVG.
|
|
141
|
+
* @param point - The point to test, in user units.
|
|
142
|
+
* @returns Whether it is inside the plot, edges included.
|
|
143
|
+
*/
|
|
144
|
+
export function isInsidePlot(plot, point) {
|
|
145
|
+
return (point.x >= plot.left &&
|
|
146
|
+
point.x <= plot.right &&
|
|
147
|
+
point.y >= plot.top &&
|
|
148
|
+
point.y <= plot.bottom);
|
|
149
|
+
}
|
|
150
|
+
/** What is held while the pointer is anywhere but over the plot. */
|
|
151
|
+
const POINTER_AWAY = { position: null, readout: null };
|
|
152
|
+
//# sourceMappingURL=useChartPointer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useChartPointer.js","sourceRoot":"","sources":["../../../src/chart/ui/useChartPointer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* How big the box a chart was handed is, followed for as long as it is on
|
|
3
|
+
* screen.
|
|
4
|
+
*
|
|
5
|
+
* The element is measured from the `ref` rather than from an effect, so the
|
|
6
|
+
* observer is re-attached every time the element goes away and comes back —
|
|
7
|
+
* which is the whole point of doing it here. A chart living in a folded
|
|
8
|
+
* accordion panel is unmounted while the panel is shut; an observer bound once
|
|
9
|
+
* at mount would be watching an element nobody kept, so the chart returns
|
|
10
|
+
* measuring nothing, builds its scales on a plot of `MINIMUM_PLOT_SIDE`, and
|
|
11
|
+
* stays that way until the window itself happens to be resized. Measuring in
|
|
12
|
+
* the callback also means the size is known in the same commit the element
|
|
13
|
+
* appears in, so nothing is ever painted at a size that is about to change.
|
|
14
|
+
*/
|
|
15
|
+
import type { ChartSize } from '../core/chartGeometry.ts';
|
|
16
|
+
/** The `ref` to put on the wrapper, and how big that wrapper is. */
|
|
17
|
+
export type ChartSizeHandle<T extends Element> = [
|
|
18
|
+
ref: (element: T | null) => void,
|
|
19
|
+
size: ChartSize
|
|
20
|
+
];
|
|
21
|
+
/**
|
|
22
|
+
* Follow the size of the element a chart is drawn in.
|
|
23
|
+
*
|
|
24
|
+
* The `ref` never changes between renders, so React attaches it once per
|
|
25
|
+
* element rather than detaching and re-attaching it — and a detach here is not
|
|
26
|
+
* free, since it is what tears the observer down.
|
|
27
|
+
* @returns The `ref`, and the size — `0 × 0` until the element is on screen,
|
|
28
|
+
* which every first render sees.
|
|
29
|
+
*/
|
|
30
|
+
export declare function useChartSize<T extends Element = HTMLDivElement>(): ChartSizeHandle<T>;
|
|
31
|
+
/**
|
|
32
|
+
* The size to hold, given what the element has just been measured at.
|
|
33
|
+
*
|
|
34
|
+
* The one already held comes back when the numbers have not moved, so a
|
|
35
|
+
* resize that changes nothing — a splitter dragged and let go where it was, a
|
|
36
|
+
* panel folded and unfolded at the same width — costs a comparison rather than
|
|
37
|
+
* a render of the whole chart, which rebuilds every scale and re-lays every
|
|
38
|
+
* label out.
|
|
39
|
+
*
|
|
40
|
+
* A measurement that is not a size is read as nothing at all: a negative width
|
|
41
|
+
* is impossible, and a `NaN` one is what an element that is not laid out gives.
|
|
42
|
+
* Either would travel into `plotRect` and out the far side as an infinity.
|
|
43
|
+
* @param current - The size held so far.
|
|
44
|
+
* @param width - What the element has just been measured at, horizontally.
|
|
45
|
+
* @param height - What it has just been measured at, vertically.
|
|
46
|
+
* @returns `current` itself when nothing moved, the new size otherwise.
|
|
47
|
+
*/
|
|
48
|
+
export declare function nextChartSize(current: ChartSize, width: number, height: number): ChartSize;
|
|
49
|
+
//# sourceMappingURL=useChartSize.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useChartSize.d.ts","sourceRoot":"","sources":["../../../src/chart/ui/useChartSize.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAKH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAE1D,oEAAoE;AACpE,MAAM,MAAM,eAAe,CAAC,CAAC,SAAS,OAAO,IAAI;IAC/C,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,KAAK,IAAI;IAChC,IAAI,EAAE,SAAS;CAChB,CAAC;AAEF;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAC1B,CAAC,SAAS,OAAO,GAAG,cAAc,KAC/B,eAAe,CAAC,CAAC,CAAC,CAsBtB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,aAAa,CAC3B,OAAO,EAAE,SAAS,EAClB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb,SAAS,CAOX"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* How big the box a chart was handed is, followed for as long as it is on
|
|
3
|
+
* screen.
|
|
4
|
+
*
|
|
5
|
+
* The element is measured from the `ref` rather than from an effect, so the
|
|
6
|
+
* observer is re-attached every time the element goes away and comes back —
|
|
7
|
+
* which is the whole point of doing it here. A chart living in a folded
|
|
8
|
+
* accordion panel is unmounted while the panel is shut; an observer bound once
|
|
9
|
+
* at mount would be watching an element nobody kept, so the chart returns
|
|
10
|
+
* measuring nothing, builds its scales on a plot of `MINIMUM_PLOT_SIDE`, and
|
|
11
|
+
* stays that way until the window itself happens to be resized. Measuring in
|
|
12
|
+
* the callback also means the size is known in the same commit the element
|
|
13
|
+
* appears in, so nothing is ever painted at a size that is about to change.
|
|
14
|
+
*/
|
|
15
|
+
import { useCallback, useRef, useState } from 'react';
|
|
16
|
+
/**
|
|
17
|
+
* Follow the size of the element a chart is drawn in.
|
|
18
|
+
*
|
|
19
|
+
* The `ref` never changes between renders, so React attaches it once per
|
|
20
|
+
* element rather than detaching and re-attaching it — and a detach here is not
|
|
21
|
+
* free, since it is what tears the observer down.
|
|
22
|
+
* @returns The `ref`, and the size — `0 × 0` until the element is on screen,
|
|
23
|
+
* which every first render sees.
|
|
24
|
+
*/
|
|
25
|
+
export function useChartSize() {
|
|
26
|
+
const observer = useRef(null);
|
|
27
|
+
const [size, setSize] = useState(NO_SIZE);
|
|
28
|
+
const measure = useCallback((element) => {
|
|
29
|
+
// Torn down here rather than from a cleanup returned to React: only React
|
|
30
|
+
// 19 runs one, where React 18 calls the ref with `null` instead — so
|
|
31
|
+
// detaching on `null` is what disconnects the observer under both.
|
|
32
|
+
observer.current?.disconnect();
|
|
33
|
+
observer.current = null;
|
|
34
|
+
if (element === null)
|
|
35
|
+
return;
|
|
36
|
+
read(element, setSize);
|
|
37
|
+
// Absent outside a browser, where nothing is on screen to be resized.
|
|
38
|
+
if (typeof ResizeObserver === 'undefined')
|
|
39
|
+
return;
|
|
40
|
+
observer.current = new ResizeObserver(() => {
|
|
41
|
+
read(element, setSize);
|
|
42
|
+
});
|
|
43
|
+
observer.current.observe(element);
|
|
44
|
+
}, []);
|
|
45
|
+
return [measure, size];
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* The size to hold, given what the element has just been measured at.
|
|
49
|
+
*
|
|
50
|
+
* The one already held comes back when the numbers have not moved, so a
|
|
51
|
+
* resize that changes nothing — a splitter dragged and let go where it was, a
|
|
52
|
+
* panel folded and unfolded at the same width — costs a comparison rather than
|
|
53
|
+
* a render of the whole chart, which rebuilds every scale and re-lays every
|
|
54
|
+
* label out.
|
|
55
|
+
*
|
|
56
|
+
* A measurement that is not a size is read as nothing at all: a negative width
|
|
57
|
+
* is impossible, and a `NaN` one is what an element that is not laid out gives.
|
|
58
|
+
* Either would travel into `plotRect` and out the far side as an infinity.
|
|
59
|
+
* @param current - The size held so far.
|
|
60
|
+
* @param width - What the element has just been measured at, horizontally.
|
|
61
|
+
* @param height - What it has just been measured at, vertically.
|
|
62
|
+
* @returns `current` itself when nothing moved, the new size otherwise.
|
|
63
|
+
*/
|
|
64
|
+
export function nextChartSize(current, width, height) {
|
|
65
|
+
const nextWidth = usableSide(width);
|
|
66
|
+
const nextHeight = usableSide(height);
|
|
67
|
+
if (current.width === nextWidth && current.height === nextHeight) {
|
|
68
|
+
return current;
|
|
69
|
+
}
|
|
70
|
+
return { width: nextWidth, height: nextHeight };
|
|
71
|
+
}
|
|
72
|
+
/** What a chart is given before its element has ever been laid out. */
|
|
73
|
+
const NO_SIZE = { width: 0, height: 0 };
|
|
74
|
+
/**
|
|
75
|
+
* Measure an element and hold what it says.
|
|
76
|
+
* @param element - The wrapper the chart is drawn in.
|
|
77
|
+
* @param setSize - Where the measurement goes.
|
|
78
|
+
*/
|
|
79
|
+
function read(element, setSize) {
|
|
80
|
+
const { width, height } = element.getBoundingClientRect();
|
|
81
|
+
setSize((current) => nextChartSize(current, width, height));
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* One side of a measurement, as a size rather than as a number.
|
|
85
|
+
* @param value - What the element was measured at.
|
|
86
|
+
* @returns The side, `0` for anything that is not a length.
|
|
87
|
+
*/
|
|
88
|
+
function usableSide(value) {
|
|
89
|
+
return Number.isFinite(value) && value > 0 ? value : 0;
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=useChartSize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useChartSize.js","sourceRoot":"","sources":["../../../src/chart/ui/useChartSize.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAUtD;;;;;;;;GAQG;AACH,MAAM,UAAU,YAAY;IAG1B,MAAM,QAAQ,GAAG,MAAM,CAAwB,IAAI,CAAC,CAAC;IACrD,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAY,OAAO,CAAC,CAAC;IAErD,MAAM,OAAO,GAAG,WAAW,CAAC,CAAC,OAAiB,EAAE,EAAE;QAChD,0EAA0E;QAC1E,qEAAqE;QACrE,mEAAmE;QACnE,QAAQ,CAAC,OAAO,EAAE,UAAU,EAAE,CAAC;QAC/B,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC;QACxB,IAAI,OAAO,KAAK,IAAI;YAAE,OAAO;QAE7B,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACvB,sEAAsE;QACtE,IAAI,OAAO,cAAc,KAAK,WAAW;YAAE,OAAO;QAClD,QAAQ,CAAC,OAAO,GAAG,IAAI,cAAc,CAAC,GAAG,EAAE;YACzC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACzB,CAAC,CAAC,CAAC;QACH,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AACzB,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,aAAa,CAC3B,OAAkB,EAClB,KAAa,EACb,MAAc;IAEd,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IACpC,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;IACtC,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,IAAI,OAAO,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;QACjE,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;AAClD,CAAC;AAED,uEAAuE;AACvE,MAAM,OAAO,GAAc,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;AAEnD;;;;GAIG;AACH,SAAS,IAAI,CACX,OAAgB,EAChB,OAA4C;IAE5C,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC;IAC1D,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;AAC9D,CAAC;AAED;;;;GAIG;AACH,SAAS,UAAU,CAAC,KAAa;IAC/B,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACzD,CAAC"}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The window a chart is looking through, and the two scales it is read by.
|
|
3
|
+
*
|
|
4
|
+
* Three things can decide what is on screen — the fit the data asks for, the
|
|
5
|
+
* window a gesture arrived at, and a window a host imposes — and the whole of
|
|
6
|
+
* the policy that settles between them is here, away from the gestures, because
|
|
7
|
+
* it is the half that has nothing to do with a pointer. A chart put back to its
|
|
8
|
+
* fit by a toolbar button and one put back by a double click are the same event
|
|
9
|
+
* to this hook.
|
|
10
|
+
*
|
|
11
|
+
* The scales come out of the same place for a reason that shipped broken once:
|
|
12
|
+
* every gesture is measured by inverting a pixel, so a chart drawing a reversed
|
|
13
|
+
* axis while the gestures were measured through an ascending one zoomed to the
|
|
14
|
+
* mirror image of whatever was dragged over. Held here, beside the window they
|
|
15
|
+
* are built from, there is only ever one mapping to disagree with.
|
|
16
|
+
*/
|
|
17
|
+
import type { ChartDomain } from '../core/chartDomain.ts';
|
|
18
|
+
import type { PlotRect } from '../core/chartGeometry.ts';
|
|
19
|
+
import type { ChartScale } from '../core/chartScale.ts';
|
|
20
|
+
/** The fit, the window a host imposes, and the box both are drawn into. */
|
|
21
|
+
export interface ChartWindowOptions {
|
|
22
|
+
/**
|
|
23
|
+
* The window that shows everything currently drawn, as the viewer fits it.
|
|
24
|
+
* This is what a double click goes back to.
|
|
25
|
+
*/
|
|
26
|
+
fitted: ChartDomain;
|
|
27
|
+
/**
|
|
28
|
+
* What that fit was made *to*, as one string two renders can compare.
|
|
29
|
+
*
|
|
30
|
+
* The window is put back to the fit whenever this changes and never otherwise,
|
|
31
|
+
* so it must name the data and not its extents: a spectrum switched from one
|
|
32
|
+
* unit to another, or from its profile to its sticks, moves the fitted extents
|
|
33
|
+
* by a hair, and refitting on a hair throws away the zoom somebody set.
|
|
34
|
+
*/
|
|
35
|
+
fitKey: string;
|
|
36
|
+
/**
|
|
37
|
+
* What the **value axis alone** was fitted to, for a chart whose height is
|
|
38
|
+
* fitted to something that changes under a window the reader is keeping.
|
|
39
|
+
*
|
|
40
|
+
* A loading spectrum is the case it was written for. The reader zooms onto a
|
|
41
|
+
* few masses and then steps through the components, and the m/z window is
|
|
42
|
+
* where they are looking rather than a fact about the component being read —
|
|
43
|
+
* so it stays. The loading axis is fitted to the component's own scale, and
|
|
44
|
+
* cannot: drawn through the last component's window, a diffuse component is a
|
|
45
|
+
* flat line along the middle and a concentrated one is cut off at the top.
|
|
46
|
+
* @default `fitKey`, so the value axis moves only when the whole fit does
|
|
47
|
+
*/
|
|
48
|
+
yFitKey?: string;
|
|
49
|
+
/** Where the plot sits inside the SVG, which the axes are laid over. */
|
|
50
|
+
plot: PlotRect;
|
|
51
|
+
/**
|
|
52
|
+
* The window a host is imposing, `null` while it imposes none.
|
|
53
|
+
*
|
|
54
|
+
* It is handed *in* rather than merely shown beside the chart's own, so that
|
|
55
|
+
* every gesture is measured against what is actually on screen. A peak table
|
|
56
|
+
* that frames a value, a handle that zooms to one: both put a window on the
|
|
57
|
+
* chart that the chart did not arrive at, and a drag worked out against the
|
|
58
|
+
* window the chart last held instead would zoom to somewhere else entirely.
|
|
59
|
+
* It is taken up when it *changes*, not held over the chart's own — see the
|
|
60
|
+
* hook itself for why that distinction is the difference between a chart that
|
|
61
|
+
* zooms and one that zooms once.
|
|
62
|
+
* @default null
|
|
63
|
+
*/
|
|
64
|
+
domain?: ChartDomain | null;
|
|
65
|
+
/**
|
|
66
|
+
* Whether the horizontal axis is drawn right to left, as an infrared
|
|
67
|
+
* spectrum's wavenumbers are.
|
|
68
|
+
*
|
|
69
|
+
* It has to be said **here**, and this is the one option a viewer cannot get
|
|
70
|
+
* away with handling on its own: a chart that drew a reversed axis while the
|
|
71
|
+
* gestures were measured through an ascending one would zoom to the mirror
|
|
72
|
+
* image of whatever was dragged over. The scales are handed back for exactly
|
|
73
|
+
* that reason — draw with those and the two cannot disagree.
|
|
74
|
+
* @default false
|
|
75
|
+
*/
|
|
76
|
+
reverseX?: boolean;
|
|
77
|
+
}
|
|
78
|
+
/** The window, how it maps to pixels, and the two ways it moves. */
|
|
79
|
+
export interface ChartWindow {
|
|
80
|
+
/** What the chart is showing. */
|
|
81
|
+
domain: ChartDomain;
|
|
82
|
+
/** The horizontal axis, already accounting for a reversed one. */
|
|
83
|
+
xScale: ChartScale;
|
|
84
|
+
/** The vertical axis, which runs backwards because SVG counts downwards. */
|
|
85
|
+
yScale: ChartScale;
|
|
86
|
+
/** Show a window a gesture arrived at. */
|
|
87
|
+
show: (domain: ChartDomain) => void;
|
|
88
|
+
/** Put the window back to everything that is drawn. */
|
|
89
|
+
reset: () => void;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Hold the window a chart shows, and map it to the plot.
|
|
93
|
+
*
|
|
94
|
+
* The window is put back to what fits whenever the chart is handed **different
|
|
95
|
+
* data** — a spectrum loaded, one closed, the chart reflected about zero — and
|
|
96
|
+
* is otherwise left exactly where it was. That distinction is the whole of the
|
|
97
|
+
* behaviour, and `fitKey` is where it is drawn: the same spectra drawn
|
|
98
|
+
* differently is the same data, and a chart that refitted on it would throw away
|
|
99
|
+
* the window somebody had zoomed to for a change of a fraction of a percent in
|
|
100
|
+
* the extents.
|
|
101
|
+
*
|
|
102
|
+
* The value axis can be refitted on its own, by `yFitKey`, for the one chart
|
|
103
|
+
* where the two halves of the window answer to different things: a component's
|
|
104
|
+
* loadings are drawn on the component's own scale, while the masses on screen
|
|
105
|
+
* are where the reader chose to look and have nothing to do with which
|
|
106
|
+
* component is being read. Everywhere else it is the whole fit that moves, so
|
|
107
|
+
* it defaults to `fitKey` and nothing has to be said.
|
|
108
|
+
*
|
|
109
|
+
* A window a host imposes is **taken up as it changes**, and is not held over
|
|
110
|
+
* the window kept here. A host is told every window the chart arrives at and is
|
|
111
|
+
* expected to hand that same window back, so what it imposes is, in the ordinary
|
|
112
|
+
* case, the answer to the *last* gesture. Held over the top, that answer would
|
|
113
|
+
* be the answer to the next one as well — the chart would zoom once, report it,
|
|
114
|
+
* and then stand still, with every later drag and turn of the wheel worked out
|
|
115
|
+
* and thrown away.
|
|
116
|
+
*
|
|
117
|
+
* Handing back `null` where a window was is how a host asks for the fit again —
|
|
118
|
+
* the only thing it is ever told is a window, so that is the one way it has of
|
|
119
|
+
* saying it. That is what "zoom to fit" pressed on a toolbar beside the chart
|
|
120
|
+
* comes down to.
|
|
121
|
+
*
|
|
122
|
+
* New data refits the **value axis** of whatever a host is imposing, and leaves
|
|
123
|
+
* the horizontal half of it alone. A host that stores every window it is told
|
|
124
|
+
* and hands the same one back is imposing one at every moment after the first
|
|
125
|
+
* gesture, so a refit that waited for it to stop would never happen at all: a
|
|
126
|
+
* chart reflected about zero would draw its mirrored half below the foot of the
|
|
127
|
+
* plot, where the clip path swallows it. But the horizontal axis is where the
|
|
128
|
+
* reader chose to look, and by the time data arrives with a window still
|
|
129
|
+
* imposed the host has already decided the two belong together — every route in
|
|
130
|
+
* gives its own window up when what arrived does not belong in it, and there is
|
|
131
|
+
* then nothing imposed here to keep. What is left is another scan of the run
|
|
132
|
+
* being stepped through, or another pixel of the section being compared, and
|
|
133
|
+
* refitting those out of the window they are being compared in is the one thing
|
|
134
|
+
* the gesture that added them was not asking for. A host imposing a *different*
|
|
135
|
+
* window in the same render still wins outright, since it is asking for that
|
|
136
|
+
* window of the data just handed over.
|
|
137
|
+
*
|
|
138
|
+
* The imposed window is compared by value rather than by identity, so a host
|
|
139
|
+
* that rebuilds an equal window on every render neither fights the gestures nor
|
|
140
|
+
* renders forever. Both comparisons are made while rendering rather than in an
|
|
141
|
+
* effect: an effect would draw the stale window for one frame, and setting state
|
|
142
|
+
* from one is what `react-hooks/set-state-in-effect` forbids.
|
|
143
|
+
* @param options - The fit, the plot, and the window a host imposes.
|
|
144
|
+
* @returns The window, its two scales, and the two ways it is moved.
|
|
145
|
+
*/
|
|
146
|
+
export declare function useChartWindow(options: ChartWindowOptions): ChartWindow;
|
|
147
|
+
//# sourceMappingURL=useChartWindow.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useChartWindow.d.ts","sourceRoot":"","sources":["../../../src/chart/ui/useChartWindow.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAE1D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAGxD,2EAA2E;AAC3E,MAAM,WAAW,kBAAkB;IACjC;;;OAGG;IACH,MAAM,EAAE,WAAW,CAAC;IACpB;;;;;;;OAOG;IACH,MAAM,EAAE,MAAM,CAAC;IACf;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,wEAAwE;IACxE,IAAI,EAAE,QAAQ,CAAC;IACf;;;;;;;;;;;;OAYG;IACH,MAAM,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IAC5B;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,oEAAoE;AACpE,MAAM,WAAW,WAAW;IAC1B,iCAAiC;IACjC,MAAM,EAAE,WAAW,CAAC;IACpB,kEAAkE;IAClE,MAAM,EAAE,UAAU,CAAC;IACnB,4EAA4E;IAC5E,MAAM,EAAE,UAAU,CAAC;IACnB,0CAA0C;IAC1C,IAAI,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,CAAC;IACpC,uDAAuD;IACvD,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsDG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,kBAAkB,GAAG,WAAW,CAwEvE"}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The window a chart is looking through, and the two scales it is read by.
|
|
3
|
+
*
|
|
4
|
+
* Three things can decide what is on screen — the fit the data asks for, the
|
|
5
|
+
* window a gesture arrived at, and a window a host imposes — and the whole of
|
|
6
|
+
* the policy that settles between them is here, away from the gestures, because
|
|
7
|
+
* it is the half that has nothing to do with a pointer. A chart put back to its
|
|
8
|
+
* fit by a toolbar button and one put back by a double click are the same event
|
|
9
|
+
* to this hook.
|
|
10
|
+
*
|
|
11
|
+
* The scales come out of the same place for a reason that shipped broken once:
|
|
12
|
+
* every gesture is measured by inverting a pixel, so a chart drawing a reversed
|
|
13
|
+
* axis while the gestures were measured through an ascending one zoomed to the
|
|
14
|
+
* mirror image of whatever was dragged over. Held here, beside the window they
|
|
15
|
+
* are built from, there is only ever one mapping to disagree with.
|
|
16
|
+
*/
|
|
17
|
+
import { useCallback, useMemo, useState } from 'react';
|
|
18
|
+
import { sameChartDomain } from "../core/chartDomain.js";
|
|
19
|
+
import { chartScale } from "../core/chartScale.js";
|
|
20
|
+
/**
|
|
21
|
+
* Hold the window a chart shows, and map it to the plot.
|
|
22
|
+
*
|
|
23
|
+
* The window is put back to what fits whenever the chart is handed **different
|
|
24
|
+
* data** — a spectrum loaded, one closed, the chart reflected about zero — and
|
|
25
|
+
* is otherwise left exactly where it was. That distinction is the whole of the
|
|
26
|
+
* behaviour, and `fitKey` is where it is drawn: the same spectra drawn
|
|
27
|
+
* differently is the same data, and a chart that refitted on it would throw away
|
|
28
|
+
* the window somebody had zoomed to for a change of a fraction of a percent in
|
|
29
|
+
* the extents.
|
|
30
|
+
*
|
|
31
|
+
* The value axis can be refitted on its own, by `yFitKey`, for the one chart
|
|
32
|
+
* where the two halves of the window answer to different things: a component's
|
|
33
|
+
* loadings are drawn on the component's own scale, while the masses on screen
|
|
34
|
+
* are where the reader chose to look and have nothing to do with which
|
|
35
|
+
* component is being read. Everywhere else it is the whole fit that moves, so
|
|
36
|
+
* it defaults to `fitKey` and nothing has to be said.
|
|
37
|
+
*
|
|
38
|
+
* A window a host imposes is **taken up as it changes**, and is not held over
|
|
39
|
+
* the window kept here. A host is told every window the chart arrives at and is
|
|
40
|
+
* expected to hand that same window back, so what it imposes is, in the ordinary
|
|
41
|
+
* case, the answer to the *last* gesture. Held over the top, that answer would
|
|
42
|
+
* be the answer to the next one as well — the chart would zoom once, report it,
|
|
43
|
+
* and then stand still, with every later drag and turn of the wheel worked out
|
|
44
|
+
* and thrown away.
|
|
45
|
+
*
|
|
46
|
+
* Handing back `null` where a window was is how a host asks for the fit again —
|
|
47
|
+
* the only thing it is ever told is a window, so that is the one way it has of
|
|
48
|
+
* saying it. That is what "zoom to fit" pressed on a toolbar beside the chart
|
|
49
|
+
* comes down to.
|
|
50
|
+
*
|
|
51
|
+
* New data refits the **value axis** of whatever a host is imposing, and leaves
|
|
52
|
+
* the horizontal half of it alone. A host that stores every window it is told
|
|
53
|
+
* and hands the same one back is imposing one at every moment after the first
|
|
54
|
+
* gesture, so a refit that waited for it to stop would never happen at all: a
|
|
55
|
+
* chart reflected about zero would draw its mirrored half below the foot of the
|
|
56
|
+
* plot, where the clip path swallows it. But the horizontal axis is where the
|
|
57
|
+
* reader chose to look, and by the time data arrives with a window still
|
|
58
|
+
* imposed the host has already decided the two belong together — every route in
|
|
59
|
+
* gives its own window up when what arrived does not belong in it, and there is
|
|
60
|
+
* then nothing imposed here to keep. What is left is another scan of the run
|
|
61
|
+
* being stepped through, or another pixel of the section being compared, and
|
|
62
|
+
* refitting those out of the window they are being compared in is the one thing
|
|
63
|
+
* the gesture that added them was not asking for. A host imposing a *different*
|
|
64
|
+
* window in the same render still wins outright, since it is asking for that
|
|
65
|
+
* window of the data just handed over.
|
|
66
|
+
*
|
|
67
|
+
* The imposed window is compared by value rather than by identity, so a host
|
|
68
|
+
* that rebuilds an equal window on every render neither fights the gestures nor
|
|
69
|
+
* renders forever. Both comparisons are made while rendering rather than in an
|
|
70
|
+
* effect: an effect would draw the stale window for one frame, and setting state
|
|
71
|
+
* from one is what `react-hooks/set-state-in-effect` forbids.
|
|
72
|
+
* @param options - The fit, the plot, and the window a host imposes.
|
|
73
|
+
* @returns The window, its two scales, and the two ways it is moved.
|
|
74
|
+
*/
|
|
75
|
+
export function useChartWindow(options) {
|
|
76
|
+
const { fitted, fitKey, yFitKey = fitKey, plot, domain: imposed = null, reverseX = false, } = options;
|
|
77
|
+
// What the chart shows, and the one thing every gesture moves.
|
|
78
|
+
const [held, setHeld] = useState(imposed ?? fitted);
|
|
79
|
+
const [fittedFor, setFittedFor] = useState(fitKey);
|
|
80
|
+
if (fittedFor !== fitKey) {
|
|
81
|
+
setFittedFor(fitKey);
|
|
82
|
+
// The horizontal half of a window a host is still imposing survives the
|
|
83
|
+
// refit; only the value axis is refitted. A host that wanted the whole
|
|
84
|
+
// window given up has already given it up — every route in clears its own
|
|
85
|
+
// window when the data that arrived does not belong in it, and then there
|
|
86
|
+
// is nothing imposed here to keep. What is left is the case where it does
|
|
87
|
+
// belong: another scan of the run being stepped through, another pixel of
|
|
88
|
+
// the section being compared. Refitting x there throws away the very
|
|
89
|
+
// window the reader is comparing *in*, which is the whole point of the
|
|
90
|
+
// gesture that added it.
|
|
91
|
+
//
|
|
92
|
+
// The value axis is refitted all the same, and must be: a chart reflected
|
|
93
|
+
// about zero, or one a brighter trace has just joined, is drawn against a
|
|
94
|
+
// height that has genuinely changed, and keeping the old one hides the new
|
|
95
|
+
// data below the foot of the plot or off the top of it.
|
|
96
|
+
setHeld((current) => imposed === null ? fitted : { x: current.x, y: fitted.y });
|
|
97
|
+
}
|
|
98
|
+
const [yFittedFor, setYFittedFor] = useState(yFitKey);
|
|
99
|
+
if (yFittedFor !== yFitKey) {
|
|
100
|
+
setYFittedFor(yFitKey);
|
|
101
|
+
// Mapped over whatever the refit above may just have set, rather than over
|
|
102
|
+
// the window this render read, so that both keys changing at once is the
|
|
103
|
+
// whole fit and not the last window's x with a new height on it.
|
|
104
|
+
setHeld((current) => ({ x: current.x, y: fitted.y }));
|
|
105
|
+
}
|
|
106
|
+
const [imposedShown, setImposedShown] = useState(imposed);
|
|
107
|
+
if (!sameImposedDomain(imposedShown, imposed)) {
|
|
108
|
+
setImposedShown(imposed);
|
|
109
|
+
setHeld(imposed ?? fitted);
|
|
110
|
+
}
|
|
111
|
+
const domain = held;
|
|
112
|
+
// Reversed by handing the range over backwards, which is the whole of drawing
|
|
113
|
+
// an axis right to left.
|
|
114
|
+
const xScale = useMemo(() => reverseX
|
|
115
|
+
? chartScale(domain.x[0], domain.x[1], plot.right, plot.left)
|
|
116
|
+
: chartScale(domain.x[0], domain.x[1], plot.left, plot.right), [domain.x, plot.left, plot.right, reverseX]);
|
|
117
|
+
// Backwards, since SVG counts pixels downwards while a value counts up.
|
|
118
|
+
const yScale = useMemo(() => chartScale(domain.y[0], domain.y[1], plot.bottom, plot.top), [domain.y, plot.bottom, plot.top]);
|
|
119
|
+
const reset = useCallback(() => {
|
|
120
|
+
setHeld(fitted);
|
|
121
|
+
}, [fitted]);
|
|
122
|
+
return { domain, xScale, yScale, show: setHeld, reset };
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Whether a host is imposing the same window it was imposing before.
|
|
126
|
+
* @param current - The window it imposed last, `null` when it imposed none.
|
|
127
|
+
* @param next - The window it imposes now, `null` for none.
|
|
128
|
+
* @returns Whether both say the same thing.
|
|
129
|
+
*/
|
|
130
|
+
function sameImposedDomain(current, next) {
|
|
131
|
+
if (current === null || next === null)
|
|
132
|
+
return current === next;
|
|
133
|
+
return sameChartDomain(current, next);
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=useChartWindow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useChartWindow.js","sourceRoot":"","sources":["../../../src/chart/ui/useChartWindow.ts"],"names":[],"mappings":"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"}
|