react-cheminfo 0.28.0 → 0.29.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 +38 -25
- 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/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/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/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/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/ui.d.ts +1 -0
- package/lib/ui.d.ts.map +1 -1
- package/lib/ui.js +1 -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/clipboard/core/copyPng.ts +20 -0
- package/src/clipboard/core/index.ts +1 -0
- 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/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/ui.ts +1 -0
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useCallback, useId, useLayoutEffect, useMemo, useRef } from 'react';
|
|
3
|
+
import { sameChartDomain } from "../../chart/core/chartDomain.js";
|
|
4
|
+
import { MARGIN, plotRect } from "../../chart/core/chartGeometry.js";
|
|
5
|
+
import { Axes } from "../../chart/ui/Axes.js";
|
|
6
|
+
import { SelectionRect } from "../../chart/ui/SelectionRect.js";
|
|
7
|
+
import { chartSurfaceStyle } from "../../chart/ui/chartSurface.js";
|
|
8
|
+
import { useChartSize } from "../../chart/ui/useChartSize.js";
|
|
9
|
+
import { boxZoomOnly, yAxisTitle } from "../core/irMode.js";
|
|
10
|
+
import { BandMarks } from "./BandMarks.js";
|
|
11
|
+
import { IrPointerTracker } from "./IrPointerTracker.js";
|
|
12
|
+
import { IrTraces } from "./IrTraces.js";
|
|
13
|
+
import { useIrPointer } from "./useIrPointer.js";
|
|
14
|
+
import { useIrZoom } from "./useIrZoom.js";
|
|
15
|
+
/**
|
|
16
|
+
* The chart: every layer of an infrared spectrum, in one SVG.
|
|
17
|
+
*
|
|
18
|
+
* **The wavenumber axis runs right to left**, 4000 at the left edge down to 400
|
|
19
|
+
* at the right, which is how every infrared spectrum has been printed since the
|
|
20
|
+
* technique was dispersive and the instrument scanned that way. It is done by
|
|
21
|
+
* building the scale onto a reversed pixel range and nothing else: the data stays
|
|
22
|
+
* in ascending wavenumbers, every window stays low end first, and no other piece
|
|
23
|
+
* of arithmetic in either package has to know. That is the whole reason
|
|
24
|
+
* `createScale` takes its range rather than deriving it.
|
|
25
|
+
*
|
|
26
|
+
* The axes go under the data, so a grid line is never read as a band. Only the
|
|
27
|
+
* data band is clipped, so a zoomed trace stops at the plot edge while the
|
|
28
|
+
* wavenumbers pinned to the bands are allowed out over the margin — clip those
|
|
29
|
+
* and the strongest band in the window loses its label. The drag rectangle and
|
|
30
|
+
* the crosshair go over everything, because each answers a question being asked
|
|
31
|
+
* right now.
|
|
32
|
+
*
|
|
33
|
+
* Nothing is held here. The spectra, the bands, what is being looked at and the
|
|
34
|
+
* window are all props, and every gesture comes back out as a callback — so one
|
|
35
|
+
* component draws an editor's chart, a report page's single spectrum and a test.
|
|
36
|
+
* @param props - Component props.
|
|
37
|
+
* @returns The chart.
|
|
38
|
+
*/
|
|
39
|
+
export function IrChart(props) {
|
|
40
|
+
const { spectra, mode = 'transmittance', assigned = NO_BANDS, showAssignments = false, labelLimit, highlight = null, onHighlight, domain = null, onDomainChange, drag = 'xAxis', emphasisedId = null, width, height, children, } = props;
|
|
41
|
+
const [containerRef, measured] = useChartSize();
|
|
42
|
+
const svgRef = useRef(null);
|
|
43
|
+
const plot = useMemo(() => plotRect({
|
|
44
|
+
width: width ?? measured.width,
|
|
45
|
+
height: height ?? measured.height,
|
|
46
|
+
}), [width, height, measured.width, measured.height]);
|
|
47
|
+
// Read back off the plot rather than off the measurement, so a chart briefly
|
|
48
|
+
// laid out at nothing still draws its axes inside a box that holds them.
|
|
49
|
+
const frameWidth = plot.right + MARGIN.right;
|
|
50
|
+
const frameHeight = plot.bottom + MARGIN.bottom;
|
|
51
|
+
// The host's window goes *into* the zoom rather than over it, so a drag is
|
|
52
|
+
// always measured against what is on screen.
|
|
53
|
+
const zoom = useIrZoom({ spectra, mode, svgRef, plot, domain, drag });
|
|
54
|
+
// The scales the zoom measured its gestures against — the x one running right
|
|
55
|
+
// to left. Taken from the hook rather than built here, because two scales over
|
|
56
|
+
// one axis is two chances to disagree about which way it runs, and a chart that
|
|
57
|
+
// disagreed with its own gestures would zoom to the mirror image of whatever
|
|
58
|
+
// was dragged over.
|
|
59
|
+
const { domain: shown, xScale, yScale, selection, handlers } = zoom;
|
|
60
|
+
const reported = useRef(shown);
|
|
61
|
+
// Before the browser paints, so a host that stores the window and hands it
|
|
62
|
+
// back does so in the frame the gesture landed in rather than the one after.
|
|
63
|
+
useLayoutEffect(() => {
|
|
64
|
+
if (sameChartDomain(reported.current, shown))
|
|
65
|
+
return;
|
|
66
|
+
reported.current = shown;
|
|
67
|
+
onDomainChange?.(shown);
|
|
68
|
+
}, [shown, onDomainChange]);
|
|
69
|
+
const bands = useMemo(() => {
|
|
70
|
+
const found = [];
|
|
71
|
+
for (const entry of assigned)
|
|
72
|
+
found.push(entry.band);
|
|
73
|
+
return found;
|
|
74
|
+
}, [assigned]);
|
|
75
|
+
const onBand = useCallback((band) => {
|
|
76
|
+
onHighlight?.(band);
|
|
77
|
+
}, [onHighlight]);
|
|
78
|
+
const pointer = useIrPointer({
|
|
79
|
+
svgRef,
|
|
80
|
+
plot,
|
|
81
|
+
xScale,
|
|
82
|
+
yScale,
|
|
83
|
+
mode,
|
|
84
|
+
bands,
|
|
85
|
+
onBand,
|
|
86
|
+
});
|
|
87
|
+
// React's generated id carries the punctuation it keeps its own ids apart
|
|
88
|
+
// with, which a URL fragment is under no obligation to accept.
|
|
89
|
+
const clipId = `ir-plot-${useId().replaceAll(/\W/g, '')}`;
|
|
90
|
+
return (_jsx("div", { ref: containerRef, style: containerStyle, children: _jsxs("svg", { ref: svgRef, role: "img", "aria-label": chartLabel(mode), width: frameWidth, height: frameHeight, viewBox: `0 0 ${frameWidth} ${frameHeight}`,
|
|
91
|
+
// The arrow gives way to the chart's own crosshair over the plot, and
|
|
92
|
+
// comes back over the margins, exactly as it does on a mass chart.
|
|
93
|
+
style: chartSurfaceStyle(pointer.position !== null), ...handlers, children: [_jsx("defs", { children: _jsx("clipPath", { id: clipId, children: _jsx("rect", { x: plot.left, y: plot.top, width: plot.width, height: plot.height }) }) }), _jsx(Axes, { plot: plot, xDomain: shown.x, yDomain: shown.y, xScale: xScale, yScale: yScale, xTitle: "wavenumber (cm\u207B\u00B9)", yTitle: yAxisTitle(mode) }), _jsxs("g", { clipPath: `url(#${clipId})`, children: [_jsx(IrTraces, { spectra: spectra, mode: mode, plot: plot, xDomain: shown.x, xScale: xScale, yScale: yScale, emphasisedId: emphasisedId }), children] }), _jsx(BandMarks, { assigned: assigned, plot: plot, xScale: xScale, yScale: yScale, mode: mode, showAssignments: showAssignments, highlight: highlight, ...(labelLimit === undefined ? {} : { limit: labelLimit }) }), _jsx(SelectionRect, { selection: selection, plot: plot }), _jsx(IrPointerTracker, { position: pointer.position, readout: pointer.readout, plot: plot })] }) }));
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* What the chart is, and what can be done to it, for whoever cannot see it.
|
|
97
|
+
*
|
|
98
|
+
* The gestures differ by mode, so the sentence does too — a label promising the
|
|
99
|
+
* wheel to a reader who cannot watch it fail to do anything is worse than no
|
|
100
|
+
* label at all.
|
|
101
|
+
* @param mode - Which value axis is being drawn.
|
|
102
|
+
* @returns The label.
|
|
103
|
+
*/
|
|
104
|
+
function chartLabel(mode) {
|
|
105
|
+
const axis = `Infrared spectrum read as ${yAxisTitle(mode)}, wavenumber running from high at the left to low at the right.`;
|
|
106
|
+
return boxZoomOnly(mode)
|
|
107
|
+
? `${axis} Drag a rectangle over it to zoom to that rectangle, and double click to fit everything again.`
|
|
108
|
+
: `${axis} Drag across it to zoom the wavenumber axis, drag past the baseline to take the value axis with it, turn the wheel to scale the value axis, and double click to fit everything again.`;
|
|
109
|
+
}
|
|
110
|
+
/** What a chart nobody has picked any bands for marks. */
|
|
111
|
+
const NO_BANDS = Object.freeze([]);
|
|
112
|
+
/** The box the chart is measured against, and fills. */
|
|
113
|
+
const containerStyle = { width: '100%', height: '100%' };
|
|
114
|
+
//# sourceMappingURL=IrChart.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IrChart.js","sourceRoot":"","sources":["../../../src/ir/ui/IrChart.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
import type { IrCommandHandlers } from '../core/irCommands.ts';
|
|
3
|
+
export interface IrCommandProviderProps {
|
|
4
|
+
/** What each command does. */
|
|
5
|
+
handlers: IrCommandHandlers;
|
|
6
|
+
/** The viewer. */
|
|
7
|
+
children: ReactNode;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Put the command handlers where the toolbar and the panels can reach them.
|
|
11
|
+
* @param props - Component props.
|
|
12
|
+
* @returns The provider.
|
|
13
|
+
*/
|
|
14
|
+
export declare function IrCommandProvider(props: IrCommandProviderProps): import("react").JSX.Element;
|
|
15
|
+
//# sourceMappingURL=IrCommandProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IrCommandProvider.d.ts","sourceRoot":"","sources":["../../../src/ir/ui/IrCommandProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAK/D,MAAM,WAAW,sBAAsB;IACrC,8BAA8B;IAC9B,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,kBAAkB;IAClB,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,sBAAsB,+BAW9D"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useMemo } from 'react';
|
|
3
|
+
import { commandContext } from "./irCommandContext.js";
|
|
4
|
+
/**
|
|
5
|
+
* Put the command handlers where the toolbar and the panels can reach them.
|
|
6
|
+
* @param props - Component props.
|
|
7
|
+
* @returns The provider.
|
|
8
|
+
*/
|
|
9
|
+
export function IrCommandProvider(props) {
|
|
10
|
+
const { handlers, children } = props;
|
|
11
|
+
const value = useMemo(() => ({ handlers, run: (id) => handlers[id]?.() }), [handlers]);
|
|
12
|
+
return (_jsx(commandContext.Provider, { value: value, children: children }));
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=IrCommandProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IrCommandProvider.js","sourceRoot":"","sources":["../../../src/ir/ui/IrCommandProvider.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAKhC,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAwB,CAAC;AASxD;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAA6B;IAC7D,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;IAErC,MAAM,KAAK,GAAG,OAAO,CACnB,GAAG,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EACnD,CAAC,QAAQ,CAAC,CACX,CAAC;IAEF,OAAO,CACL,KAAC,cAAc,CAAC,QAAQ,IAAC,KAAK,EAAE,KAAK,YAAG,QAAQ,GAA2B,CAC5E,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { IrCommandId } from '../core/irCommands.ts';
|
|
2
|
+
export interface IrCommandTooltipProps {
|
|
3
|
+
/** Which command the tooltip is about. */
|
|
4
|
+
id: IrCommandId;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* One command's tooltip: its title, what it does, and every way to do it.
|
|
8
|
+
*
|
|
9
|
+
* `TooltipHelpContent` from react-science, which is what NMRium's tooltips are,
|
|
10
|
+
* so a page holding this viewer beside NMRium or the glycan editor explains
|
|
11
|
+
* itself the same way in all three.
|
|
12
|
+
* @param props - Component props.
|
|
13
|
+
* @returns The tooltip's content.
|
|
14
|
+
*/
|
|
15
|
+
export declare function IrCommandTooltip(props: IrCommandTooltipProps): import("react").JSX.Element;
|
|
16
|
+
//# sourceMappingURL=IrCommandTooltip.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IrCommandTooltip.d.ts","sourceRoot":"","sources":["../../../src/ir/ui/IrCommandTooltip.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAa,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAGpE,MAAM,WAAW,qBAAqB;IACpC,0CAA0C;IAC1C,EAAE,EAAE,WAAW,CAAC;CACjB;AAED;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,+BAgB5D"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { TooltipHelpContent } from 'react-science/ui';
|
|
3
|
+
import { irCommands } from "../core/irCommands.js";
|
|
4
|
+
/**
|
|
5
|
+
* One command's tooltip: its title, what it does, and every way to do it.
|
|
6
|
+
*
|
|
7
|
+
* `TooltipHelpContent` from react-science, which is what NMRium's tooltips are,
|
|
8
|
+
* so a page holding this viewer beside NMRium or the glycan editor explains
|
|
9
|
+
* itself the same way in all three.
|
|
10
|
+
* @param props - Component props.
|
|
11
|
+
* @returns The tooltip's content.
|
|
12
|
+
*/
|
|
13
|
+
export function IrCommandTooltip(props) {
|
|
14
|
+
const { id } = props;
|
|
15
|
+
const entry = irCommands[id];
|
|
16
|
+
const shortcuts = entry.shortcut?.label ?? entry.shortcut?.keys;
|
|
17
|
+
return (_jsx(TooltipHelpContent, { title: entry.title, description: entry.description, shortcuts: shortcuts === undefined ? undefined : [...shortcuts], subTitles: entry.gestures?.map((gesture) => ({
|
|
18
|
+
title: gesture.title,
|
|
19
|
+
shortcuts: [...gesture.shortcuts],
|
|
20
|
+
})) }));
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=IrCommandTooltip.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IrCommandTooltip.js","sourceRoot":"","sources":["../../../src/ir/ui/IrCommandTooltip.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAGtD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAOnD;;;;;;;;GAQG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAA4B;IAC3D,MAAM,EAAE,EAAE,EAAE,GAAG,KAAK,CAAC;IACrB,MAAM,KAAK,GAAG,UAAU,CAAC,EAAE,CAAc,CAAC;IAC1C,MAAM,SAAS,GAAG,KAAK,CAAC,QAAQ,EAAE,KAAK,IAAI,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC;IAEhE,OAAO,CACL,KAAC,kBAAkB,IACjB,KAAK,EAAE,KAAK,CAAC,KAAK,EAClB,WAAW,EAAE,KAAK,CAAC,WAAW,EAC9B,SAAS,EAAE,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,EAC/D,SAAS,EAAE,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YAC3C,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,SAAS,EAAE,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC;SAClC,CAAC,CAAC,GACH,CACH,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export interface IrDocumentationDialogProps {
|
|
2
|
+
/** Whether the dialog is open. */
|
|
3
|
+
isOpen: boolean;
|
|
4
|
+
/** Close it. */
|
|
5
|
+
onClose: () => void;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* How to use the viewer, written in the viewer.
|
|
9
|
+
*
|
|
10
|
+
* In the component rather than on a site, so there is nowhere to leave for and
|
|
11
|
+
* nothing to keep in step: every key in the table below is read out of the same
|
|
12
|
+
* `irCommands` the toolbar and the key handler read, so a shortcut cannot be
|
|
13
|
+
* documented as one thing and bound as another.
|
|
14
|
+
* @param props - Component props.
|
|
15
|
+
* @returns The dialog.
|
|
16
|
+
*/
|
|
17
|
+
export declare function IrDocumentationDialog(props: IrDocumentationDialogProps): import("react").JSX.Element;
|
|
18
|
+
//# sourceMappingURL=IrDocumentationDialog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IrDocumentationDialog.d.ts","sourceRoot":"","sources":["../../../src/ir/ui/IrDocumentationDialog.tsx"],"names":[],"mappings":"AASA,MAAM,WAAW,0BAA0B;IACzC,kCAAkC;IAClC,MAAM,EAAE,OAAO,CAAC;IAChB,gBAAgB;IAChB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,0BAA0B,+BAmEtE"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Dialog, DialogBody } from '@blueprintjs/core';
|
|
3
|
+
import { TOKEN } from "../../tokens/core/familyTokens.js";
|
|
4
|
+
import { irCommands } from "../core/irCommands.js";
|
|
5
|
+
import { IR_MODE_RULES } from "../core/irMode.js";
|
|
6
|
+
import { IrLogo } from "./IrLogo.js";
|
|
7
|
+
/**
|
|
8
|
+
* How to use the viewer, written in the viewer.
|
|
9
|
+
*
|
|
10
|
+
* In the component rather than on a site, so there is nowhere to leave for and
|
|
11
|
+
* nothing to keep in step: every key in the table below is read out of the same
|
|
12
|
+
* `irCommands` the toolbar and the key handler read, so a shortcut cannot be
|
|
13
|
+
* documented as one thing and bound as another.
|
|
14
|
+
* @param props - Component props.
|
|
15
|
+
* @returns The dialog.
|
|
16
|
+
*/
|
|
17
|
+
export function IrDocumentationDialog(props) {
|
|
18
|
+
const { isOpen, onClose } = props;
|
|
19
|
+
return (_jsx(Dialog, { isOpen: isOpen, onClose: onClose, title: "Using the infrared viewer", icon: _jsx(IrLogo, { size: 20 }), style: dialogStyle, children: _jsxs(DialogBody, { children: [_jsx("h4", { style: headingStyle, children: "Opening a spectrum" }), _jsxs("p", { style: paragraphStyle, children: ["JCAMP-DX (", _jsx("code", { children: ".jdx" }), ", ", _jsx("code", { children: ".dx" }), ") and Thermo Galactic SPC (", _jsx("code", { children: ".spc" }), ") are read. A file holding several blocks \u2014 a sample beside its background, or an infrared spectrum beside a Raman one \u2014 gives one spectrum per infrared block; the others are left to their own viewers. Two columns of numbers are not read yet."] }), _jsx("h4", { style: headingStyle, children: "The axis runs backwards" }), _jsx("p", { style: paragraphStyle, children: "Wavenumber decreases to the right, from 4000 cm\u207B\u00B9 down to 400, which is how infrared spectra have been printed since the instruments scanned that way. Every window is still stated low end first." }), _jsx("h4", { style: headingStyle, children: "Absorbance or transmittance" }), _jsxs("p", { style: paragraphStyle, children: ["The same measurement, read the other way up \u2014 the file carries both, whichever it was written in. In", ' ', _jsx("strong", { children: IR_MODE_RULES.transmittance.title }), " the bands hang down from a baseline near 100; in", ' ', _jsx("strong", { children: IR_MODE_RULES.absorbance.title }), " they stand up out of zero. The labels and the marks follow, so the pair reads the same way up in either."] }), _jsx("h4", { style: headingStyle, children: "Reading the bands" }), _jsxs("p", { style: paragraphStyle, children: ["The bands of the ", _jsx("em", { children: "selected" }), " spectrum are picked, marked on the chart, and listed in the bands panel with", ' ', _jsx("strong", { children: "every vibration whose range contains them" }), " \u2014 narrowest claim first. That is deliberate: a band at 1715 cm\u207B\u00B9 really is a ketone, an aldehyde and a carboxylic acid until something else decides between them, and the note on each candidate is what tells them apart. Hovering a row marks the band on the chart, and hovering the chart lights the row."] }), _jsx("p", { style: paragraphStyle, children: "A band is reported at the sampled point it peaked on, so on a 4 cm\u207B\u00B9 grid a carbonyl centred at 1710 reads 1708 or 1712. Do not quote one as though it were measured to the wavenumber." }), _jsx("h4", { style: headingStyle, children: "Gestures and keys" }), _jsx("table", { style: tableStyle, children: _jsx("tbody", { children: Object.keys(irCommands).map((id) => (_jsx(CommandRow, { id: id }, id))) }) })] }) }));
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* One command: what it is called, its key, and what it does.
|
|
23
|
+
* @param props - Component props.
|
|
24
|
+
* @returns The row.
|
|
25
|
+
*/
|
|
26
|
+
function CommandRow(props) {
|
|
27
|
+
const { id } = props;
|
|
28
|
+
const entry = irCommands[id];
|
|
29
|
+
const keys = entry.shortcut?.label ?? entry.shortcut?.keys;
|
|
30
|
+
return (_jsxs("tr", { children: [_jsx("th", { style: commandCellStyle, children: entry.title }), _jsxs("td", { style: keyCellStyle, children: [keys === undefined
|
|
31
|
+
? null
|
|
32
|
+
: keys.map((key) => (_jsx("kbd", { style: keyStyle, children: key }, key))), entry.gestures?.map((gesture) => (_jsx("span", { style: gestureStyle, children: gesture.shortcuts.join(', ') }, gesture.title)))] }), _jsx("td", { style: descriptionCellStyle, children: entry.description })] }));
|
|
33
|
+
}
|
|
34
|
+
const dialogStyle = { width: 'min(760px, 92vw)' };
|
|
35
|
+
const headingStyle = { margin: '14px 0 4px' };
|
|
36
|
+
const paragraphStyle = { margin: '0 0 6px' };
|
|
37
|
+
const tableStyle = {
|
|
38
|
+
width: '100%',
|
|
39
|
+
borderCollapse: 'collapse',
|
|
40
|
+
fontSize: 13,
|
|
41
|
+
};
|
|
42
|
+
const commandCellStyle = {
|
|
43
|
+
textAlign: 'left',
|
|
44
|
+
fontWeight: 600,
|
|
45
|
+
verticalAlign: 'top',
|
|
46
|
+
padding: '3px 8px 3px 0',
|
|
47
|
+
whiteSpace: 'nowrap',
|
|
48
|
+
};
|
|
49
|
+
const keyCellStyle = {
|
|
50
|
+
verticalAlign: 'top',
|
|
51
|
+
padding: '3px 8px 3px 0',
|
|
52
|
+
whiteSpace: 'nowrap',
|
|
53
|
+
};
|
|
54
|
+
const descriptionCellStyle = {
|
|
55
|
+
verticalAlign: 'top',
|
|
56
|
+
padding: '3px 0',
|
|
57
|
+
};
|
|
58
|
+
const keyStyle = {
|
|
59
|
+
display: 'inline-block',
|
|
60
|
+
marginRight: 3,
|
|
61
|
+
padding: '0 4px',
|
|
62
|
+
border: `1px solid ${TOKEN.border}`,
|
|
63
|
+
borderRadius: 3,
|
|
64
|
+
background: TOKEN.surfaceSunken,
|
|
65
|
+
fontSize: 11,
|
|
66
|
+
};
|
|
67
|
+
const gestureStyle = { opacity: 0.7, fontSize: 12 };
|
|
68
|
+
//# sourceMappingURL=IrDocumentationDialog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IrDocumentationDialog.js","sourceRoot":"","sources":["../../../src/ir/ui/IrDocumentationDialog.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import type { Ref } from 'react';
|
|
2
|
+
import type { IrEditorHandle } from '../core/irEditorApi.ts';
|
|
3
|
+
import type { IrSidePanelId } from '../core/irSidePanels.ts';
|
|
4
|
+
import type { IrMode, IrSpectrum } from '../core/irSpectrum.ts';
|
|
5
|
+
export interface IrEditorProps {
|
|
6
|
+
/**
|
|
7
|
+
* The spectra to open on. Read when the viewer opens and never again: what is
|
|
8
|
+
* on the chart belongs to the viewer from then on, so a host re-rendering with
|
|
9
|
+
* another array does not silently replace what somebody is looking at. The
|
|
10
|
+
* `ref` handle is how spectra arrive afterwards.
|
|
11
|
+
* @default []
|
|
12
|
+
*/
|
|
13
|
+
data?: IrSpectrum[];
|
|
14
|
+
/**
|
|
15
|
+
* Called whenever the spectra open change — one loaded, one closed, the chart
|
|
16
|
+
* cleared — with the spectra now open.
|
|
17
|
+
*
|
|
18
|
+
* The document only. A zoom, a selection, a rename and a colour change what is
|
|
19
|
+
* being looked at rather than what is loaded, and a host told about those would
|
|
20
|
+
* be told on every drag of the mouse.
|
|
21
|
+
* @default undefined
|
|
22
|
+
*/
|
|
23
|
+
onChange?: (spectra: IrSpectrum[]) => void;
|
|
24
|
+
/**
|
|
25
|
+
* Which value axis to open in.
|
|
26
|
+
* @default 'transmittance'
|
|
27
|
+
*/
|
|
28
|
+
mode?: IrMode;
|
|
29
|
+
/**
|
|
30
|
+
* The side panels open to begin with.
|
|
31
|
+
* @default DEFAULT_SIDE_PANELS
|
|
32
|
+
*/
|
|
33
|
+
defaultPanelIds?: IrSidePanelId[];
|
|
34
|
+
/**
|
|
35
|
+
* The handle a host drives the viewer through: take these spectra, frame this
|
|
36
|
+
* wavenumber, select that one.
|
|
37
|
+
* @default undefined
|
|
38
|
+
*/
|
|
39
|
+
ref?: Ref<IrEditorHandle>;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* An infrared spectrum viewer: a header across the top, the chart in the middle,
|
|
43
|
+
* the tools down the left, and the panels that interrogate it down the right.
|
|
44
|
+
*
|
|
45
|
+
* The same shape as the mass viewer, deliberately — a page may well hold both,
|
|
46
|
+
* and a chemist who has learned one should not have to learn the other. The chart
|
|
47
|
+
* is where a spectrum is read and the panels are where it is questioned, which is
|
|
48
|
+
* why the panels are switched on from the activity bar on the far right: a
|
|
49
|
+
* spectrum is mostly chart, and a panel is worth its width only while it is being
|
|
50
|
+
* used.
|
|
51
|
+
*
|
|
52
|
+
* It is sealed the way NMRium is sealed: the spectra go in as `data` and come back
|
|
53
|
+
* through `onChange`, and everything else a host wants — frame this band, take
|
|
54
|
+
* these spectra — is a gesture on the `ref` rather than a prop that has to change
|
|
55
|
+
* to be obeyed.
|
|
56
|
+
* @param props - Component props.
|
|
57
|
+
* @returns The viewer.
|
|
58
|
+
*/
|
|
59
|
+
export declare function IrEditor(props: IrEditorProps): import("react").JSX.Element;
|
|
60
|
+
//# sourceMappingURL=IrEditor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IrEditor.d.ts","sourceRoot":"","sources":["../../../src/ir/ui/IrEditor.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAGjC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAMhE,MAAM,WAAW,aAAa;IAC5B;;;;;;OAMG;IACH,IAAI,CAAC,EAAE,UAAU,EAAE,CAAC;IACpB;;;;;;;;OAQG;IACH,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,IAAI,CAAC;IAC3C;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,eAAe,CAAC,EAAE,aAAa,EAAE,CAAC;IAClC;;;;OAIG;IACH,GAAG,CAAC,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC;CAC3B;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,aAAa,+BAsB5C"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { RootLayout } from 'react-science/ui';
|
|
3
|
+
import { IrShell } from "./IrShell.js";
|
|
4
|
+
import { IrStateProvider } from "./IrStateProvider.js";
|
|
5
|
+
import { useIrEditor } from "./useIrEditor.js";
|
|
6
|
+
/**
|
|
7
|
+
* An infrared spectrum viewer: a header across the top, the chart in the middle,
|
|
8
|
+
* the tools down the left, and the panels that interrogate it down the right.
|
|
9
|
+
*
|
|
10
|
+
* The same shape as the mass viewer, deliberately — a page may well hold both,
|
|
11
|
+
* and a chemist who has learned one should not have to learn the other. The chart
|
|
12
|
+
* is where a spectrum is read and the panels are where it is questioned, which is
|
|
13
|
+
* why the panels are switched on from the activity bar on the far right: a
|
|
14
|
+
* spectrum is mostly chart, and a panel is worth its width only while it is being
|
|
15
|
+
* used.
|
|
16
|
+
*
|
|
17
|
+
* It is sealed the way NMRium is sealed: the spectra go in as `data` and come back
|
|
18
|
+
* through `onChange`, and everything else a host wants — frame this band, take
|
|
19
|
+
* these spectra — is a gesture on the `ref` rather than a prop that has to change
|
|
20
|
+
* to be obeyed.
|
|
21
|
+
* @param props - Component props.
|
|
22
|
+
* @returns The viewer.
|
|
23
|
+
*/
|
|
24
|
+
export function IrEditor(props) {
|
|
25
|
+
const { data = NO_SPECTRA, onChange, mode, defaultPanelIds, ref } = props;
|
|
26
|
+
const editor = useIrEditor({
|
|
27
|
+
spectra: data,
|
|
28
|
+
settings: mode === undefined ? undefined : { mode },
|
|
29
|
+
panelIds: defaultPanelIds,
|
|
30
|
+
onChange,
|
|
31
|
+
});
|
|
32
|
+
return (_jsx(IrStateProvider, { editor: editor, children: _jsx(RootLayout, { style: rootLayoutStyle, children: _jsx(IrShell, { handle: ref }) }) }));
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* The viewer fills what it is given, and its own children scroll rather than
|
|
36
|
+
* push: `react-science` lays its root out as a column of full width and height,
|
|
37
|
+
* and a flex column with no `minHeight` grows past its parent instead.
|
|
38
|
+
*/
|
|
39
|
+
const rootLayoutStyle = { minHeight: 0 };
|
|
40
|
+
/** What a viewer opens on when it is handed nothing, kept stable for the memo. */
|
|
41
|
+
const NO_SPECTRA = [];
|
|
42
|
+
//# sourceMappingURL=IrEditor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IrEditor.js","sourceRoot":"","sources":["../../../src/ir/ui/IrEditor.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAM9C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAe,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAuB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAuC/C;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,QAAQ,CAAC,KAAoB;IAC3C,MAAM,EAAE,IAAI,GAAG,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,eAAe,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC;IAE1E,MAAM,MAAM,GAAG,WAAW,CAAC;QACzB,OAAO,EAAE,IAAI;QACb,QAAQ,EAAE,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE;QACnD,QAAQ,EAAE,eAAe;QACzB,QAAQ;KACT,CAAC,CAAC;IAEH,OAAO,CACL,KAAC,eAAe,IAAC,MAAM,EAAE,MAAM,YAM7B,KAAC,UAAU,IAAC,KAAK,EAAE,eAAe,YAChC,KAAC,OAAO,IAAC,MAAM,EAAE,GAAG,GAAI,GACb,GACG,CACnB,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,eAAe,GAAG,EAAE,SAAS,EAAE,CAAC,EAAW,CAAC;AAElD,kFAAkF;AAClF,MAAM,UAAU,GAAiB,EAAE,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The bar across the top: the mark on the left, the viewer on the right.
|
|
3
|
+
*
|
|
4
|
+
* Nothing that is done to the spectra is here — that is the rail down the left
|
|
5
|
+
* and the panels down the right — only what is asked of the viewer itself. The
|
|
6
|
+
* mark is the About button, in the corner `react-mass` and `react-glycan` put
|
|
7
|
+
* theirs in, so a chemist switching between the three tools looks in one place
|
|
8
|
+
* for what they are in; and help then full screen close the bar, hard against
|
|
9
|
+
* the right edge, in all three.
|
|
10
|
+
* @returns The header.
|
|
11
|
+
*/
|
|
12
|
+
export declare function IrHeader(): import("react").JSX.Element;
|
|
13
|
+
//# sourceMappingURL=IrHeader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IrHeader.d.ts","sourceRoot":"","sources":["../../../src/ir/ui/IrHeader.tsx"],"names":[],"mappings":"AAKA;;;;;;;;;;GAUG;AACH,wBAAgB,QAAQ,gCAsBvB"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Header, Toolbar, useFullscreen } from 'react-science/ui';
|
|
3
|
+
import { IrLogo } from "./IrLogo.js";
|
|
4
|
+
import { useIrCommandProps } from "./irCommandContext.js";
|
|
5
|
+
/**
|
|
6
|
+
* The bar across the top: the mark on the left, the viewer on the right.
|
|
7
|
+
*
|
|
8
|
+
* Nothing that is done to the spectra is here — that is the rail down the left
|
|
9
|
+
* and the panels down the right — only what is asked of the viewer itself. The
|
|
10
|
+
* mark is the About button, in the corner `react-mass` and `react-glycan` put
|
|
11
|
+
* theirs in, so a chemist switching between the three tools looks in one place
|
|
12
|
+
* for what they are in; and help then full screen close the bar, hard against
|
|
13
|
+
* the right edge, in all three.
|
|
14
|
+
* @returns The header.
|
|
15
|
+
*/
|
|
16
|
+
export function IrHeader() {
|
|
17
|
+
const command = useIrCommandProps();
|
|
18
|
+
const { isFullScreen } = useFullscreen();
|
|
19
|
+
return (_jsxs(Header, { children: [_jsx(Toolbar, { "aria-label": "Infrared spectrum viewer", children: _jsx(Toolbar.Item, { icon: _jsx(IrLogo, { size: 16 }), ...command('about') }) }), _jsxs(Toolbar, { "aria-label": "Infrared spectrum viewer help", children: [_jsx(Toolbar.Item, { icon: "help", ...command('documentation') }), _jsx(Toolbar.Item, { icon: "fullscreen", active: isFullScreen, ...command('fullScreen') })] })] }));
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=IrHeader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IrHeader.js","sourceRoot":"","sources":["../../../src/ir/ui/IrHeader.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAElE,OAAO,EAAE,MAAM,EAAE,MAAM,aAAc,CAAC;AACtC,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAwB,CAAC;AAE3D;;;;;;;;;;GAUG;AACH,MAAM,UAAU,QAAQ;IACtB,MAAM,OAAO,GAAG,iBAAiB,EAAE,CAAC;IACpC,MAAM,EAAE,YAAY,EAAE,GAAG,aAAa,EAAE,CAAC;IAEzC,OAAO,CACL,MAAC,MAAM,eACL,KAAC,OAAO,kBAAY,0BAA0B,YAC5C,KAAC,OAAO,CAAC,IAAI,IAAC,IAAI,EAAE,KAAC,MAAM,IAAC,IAAI,EAAE,EAAE,GAAI,KAAM,OAAO,CAAC,OAAO,CAAC,GAAI,GAC1D,EACV,MAAC,OAAO,kBAAY,+BAA+B,aACjD,KAAC,OAAO,CAAC,IAAI,IAAC,IAAI,EAAC,MAAM,KAAK,OAAO,CAAC,eAAe,CAAC,GAAI,EAI1D,KAAC,OAAO,CAAC,IAAI,IACX,IAAI,EAAC,YAAY,EACjB,MAAM,EAAE,YAAY,KAChB,OAAO,CAAC,YAAY,CAAC,GACzB,IACM,IACH,CACV,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export interface IrLogoProps {
|
|
2
|
+
/**
|
|
3
|
+
* How big to draw it, in pixels.
|
|
4
|
+
* @default 16
|
|
5
|
+
*/
|
|
6
|
+
size?: number;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* The viewer's mark: three bands hanging from a baseline.
|
|
10
|
+
*
|
|
11
|
+
* Drawn from the domain's own primitives rather than being a picture of a chart —
|
|
12
|
+
* a transmittance baseline near the top with a strong band, a medium one and a
|
|
13
|
+
* weak one dropping out of it, which is what an infrared spectrum looks like at a
|
|
14
|
+
* glance and what nothing else looks like. Three elements, because that is what
|
|
15
|
+
* survives 16 pixels.
|
|
16
|
+
* @param props - Component props.
|
|
17
|
+
* @returns The mark, as SVG.
|
|
18
|
+
*/
|
|
19
|
+
export declare function IrLogo(props: IrLogoProps): import("react").JSX.Element;
|
|
20
|
+
//# sourceMappingURL=IrLogo.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IrLogo.d.ts","sourceRoot":"","sources":["../../../src/ir/ui/IrLogo.tsx"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,WAAW,+BA6BxC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* The viewer's mark: three bands hanging from a baseline.
|
|
4
|
+
*
|
|
5
|
+
* Drawn from the domain's own primitives rather than being a picture of a chart —
|
|
6
|
+
* a transmittance baseline near the top with a strong band, a medium one and a
|
|
7
|
+
* weak one dropping out of it, which is what an infrared spectrum looks like at a
|
|
8
|
+
* glance and what nothing else looks like. Three elements, because that is what
|
|
9
|
+
* survives 16 pixels.
|
|
10
|
+
* @param props - Component props.
|
|
11
|
+
* @returns The mark, as SVG.
|
|
12
|
+
*/
|
|
13
|
+
export function IrLogo(props) {
|
|
14
|
+
const { size = 16 } = props;
|
|
15
|
+
return (_jsxs("svg", { width: size, height: size, viewBox: "0 0 16 16", role: "img", "aria-label": "Infrared viewer", children: [_jsx("path", { d: "M1 3H15", fill: "none", stroke: "#94a3b8", strokeWidth: 1, strokeLinecap: "round" }), _jsx("path", { d: "M3 3V13M8 3V8.5M12.5 3V6", fill: "none", stroke: "#0072b2", strokeWidth: 2, strokeLinecap: "round" })] }));
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=IrLogo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IrLogo.js","sourceRoot":"","sources":["../../../src/ir/ui/IrLogo.tsx"],"names":[],"mappings":";AAQA;;;;;;;;;;GAUG;AACH,MAAM,UAAU,MAAM,CAAC,KAAkB;IACvC,MAAM,EAAE,IAAI,GAAG,EAAE,EAAE,GAAG,KAAK,CAAC;IAE5B,OAAO,CACL,eACE,KAAK,EAAE,IAAI,EACX,MAAM,EAAE,IAAI,EACZ,OAAO,EAAC,WAAW,EACnB,IAAI,EAAC,KAAK,gBACC,iBAAiB,aAG5B,eACE,CAAC,EAAC,SAAS,EACX,IAAI,EAAC,MAAM,EACX,MAAM,EAAC,SAAS,EAChB,WAAW,EAAE,CAAC,EACd,aAAa,EAAC,OAAO,GACrB,EAEF,eACE,CAAC,EAAC,0BAA0B,EAC5B,IAAI,EAAC,MAAM,EACX,MAAM,EAAC,SAAS,EAChB,WAAW,EAAE,CAAC,EACd,aAAa,EAAC,OAAO,GACrB,IACE,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { ReactElement } from 'react';
|
|
2
|
+
import type { PlotRect } from '../../chart/core/chartGeometry.ts';
|
|
3
|
+
import type { ChartPoint } from '../../chart/core/svgPoint.ts';
|
|
4
|
+
import type { IrReadout } from './useIrPointer.ts';
|
|
5
|
+
export interface IrPointerTrackerProps {
|
|
6
|
+
/** Where the pointer is, `null` whenever it is off the plot. */
|
|
7
|
+
position: ChartPoint | null;
|
|
8
|
+
/** What the axes read under it, `null` whenever it is off the plot. */
|
|
9
|
+
readout: IrReadout | null;
|
|
10
|
+
/** Where the plot sits inside the SVG. */
|
|
11
|
+
plot: PlotRect;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* The crosshair, and what the axes say under it.
|
|
15
|
+
*
|
|
16
|
+
* Drawn last of everything, so it is never occluded by what it is being used to
|
|
17
|
+
* read. Where the text goes is `readoutPlacement` in the shared chart, which
|
|
18
|
+
* flips it to the left of the pointer near the right edge and holds it inside the
|
|
19
|
+
* plot at the top — the same placement the mass viewer uses, because the awkward
|
|
20
|
+
* places are the same places in any chart.
|
|
21
|
+
*
|
|
22
|
+
* A third line names the band under the pointer when there is one, which is what
|
|
23
|
+
* makes the crosshair worth having on an infrared chart: the wavenumber alone is
|
|
24
|
+
* a number a reader then has to look up.
|
|
25
|
+
* @param props - Component props.
|
|
26
|
+
* @returns The crosshair and its readout, or nothing while the pointer is away.
|
|
27
|
+
*/
|
|
28
|
+
export declare function IrPointerTracker(props: IrPointerTrackerProps): ReactElement | null;
|
|
29
|
+
//# sourceMappingURL=IrPointerTracker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IrPointerTracker.d.ts","sourceRoot":"","sources":["../../../src/ir/ui/IrPointerTracker.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAE1C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAC;AAMlE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAQ/D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD,MAAM,WAAW,qBAAqB;IACpC,gEAAgE;IAChE,QAAQ,EAAE,UAAU,GAAG,IAAI,CAAC;IAC5B,uEAAuE;IACvE,OAAO,EAAE,SAAS,GAAG,IAAI,CAAC;IAC1B,0CAA0C;IAC1C,IAAI,EAAE,QAAQ,CAAC;CAChB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,qBAAqB,GAC3B,YAAY,GAAG,IAAI,CA2CrB"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { CHART_COLORS, CHART_FONT, LABEL_HALO, } from "../../chart/core/chartTheme.js";
|
|
3
|
+
import { readoutPlacement } from "../../chart/core/trackerReadout.js";
|
|
4
|
+
import { formatIrValue, formatWavenumber, shortModeLabel, } from "../core/irFormat.js";
|
|
5
|
+
/**
|
|
6
|
+
* The crosshair, and what the axes say under it.
|
|
7
|
+
*
|
|
8
|
+
* Drawn last of everything, so it is never occluded by what it is being used to
|
|
9
|
+
* read. Where the text goes is `readoutPlacement` in the shared chart, which
|
|
10
|
+
* flips it to the left of the pointer near the right edge and holds it inside the
|
|
11
|
+
* plot at the top — the same placement the mass viewer uses, because the awkward
|
|
12
|
+
* places are the same places in any chart.
|
|
13
|
+
*
|
|
14
|
+
* A third line names the band under the pointer when there is one, which is what
|
|
15
|
+
* makes the crosshair worth having on an infrared chart: the wavenumber alone is
|
|
16
|
+
* a number a reader then has to look up.
|
|
17
|
+
* @param props - Component props.
|
|
18
|
+
* @returns The crosshair and its readout, or nothing while the pointer is away.
|
|
19
|
+
*/
|
|
20
|
+
export function IrPointerTracker(props) {
|
|
21
|
+
const { position, readout, plot } = props;
|
|
22
|
+
if (position === null || readout === null)
|
|
23
|
+
return null;
|
|
24
|
+
const band = readout.band;
|
|
25
|
+
const lines = [
|
|
26
|
+
`${formatWavenumber(readout.wavenumber)} cm⁻¹`,
|
|
27
|
+
`${shortModeLabel(readout.mode)} ${formatIrValue(readout.value, readout.mode)}`,
|
|
28
|
+
];
|
|
29
|
+
if (band !== null) {
|
|
30
|
+
lines.push(`band ${formatWavenumber(band.wavenumber)} (${band.strength})`);
|
|
31
|
+
}
|
|
32
|
+
const place = readoutPlacement(position, plot, lines.length);
|
|
33
|
+
return (_jsxs("g", { pointerEvents: "none", children: [_jsx("line", { x1: position.x, y1: plot.top, x2: position.x, y2: plot.bottom, style: crosshairStyle }), _jsx("line", { x1: plot.left, y1: position.y, x2: plot.right, y2: position.y, style: crosshairStyle }), lines.map((line, index) => (_jsx("text", { x: place.x, y: place.y + index * CHART_FONT.readout, textAnchor: place.anchor, style: readoutStyle, children: line }, line)))] }));
|
|
34
|
+
}
|
|
35
|
+
const crosshairStyle = {
|
|
36
|
+
stroke: CHART_COLORS.tracker,
|
|
37
|
+
strokeDasharray: '3 3',
|
|
38
|
+
};
|
|
39
|
+
const readoutStyle = {
|
|
40
|
+
fill: CHART_COLORS.trackerText,
|
|
41
|
+
fontSize: CHART_FONT.readout,
|
|
42
|
+
// Haloed like every other label written onto the plot, and it needs it more
|
|
43
|
+
// than any of them: the pointer is put wherever the question is, which is over
|
|
44
|
+
// the trace rather than beside it.
|
|
45
|
+
...LABEL_HALO,
|
|
46
|
+
};
|
|
47
|
+
//# sourceMappingURL=IrPointerTracker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IrPointerTracker.js","sourceRoot":"","sources":["../../../src/ir/ui/IrPointerTracker.tsx"],"names":[],"mappings":";AAGA,OAAO,EACL,YAAY,EACZ,UAAU,EACV,UAAU,GACX,MAAM,gCAAgC,CAAC;AAExC,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AACtE,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,cAAc,GACf,MAAM,qBAAqB,CAAC;AAa7B;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,gBAAgB,CAC9B,KAA4B;IAE5B,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC;IAC1C,IAAI,QAAQ,KAAK,IAAI,IAAI,OAAO,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAEvD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAC1B,MAAM,KAAK,GAAG;QACZ,GAAG,gBAAgB,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO;QAC9C,GAAG,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,aAAa,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE;KAChF,CAAC;IACF,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QAClB,KAAK,CAAC,IAAI,CAAC,QAAQ,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;IAC7E,CAAC;IACD,MAAM,KAAK,GAAG,gBAAgB,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAE7D,OAAO,CACL,aAAG,aAAa,EAAC,MAAM,aACrB,eACE,EAAE,EAAE,QAAQ,CAAC,CAAC,EACd,EAAE,EAAE,IAAI,CAAC,GAAG,EACZ,EAAE,EAAE,QAAQ,CAAC,CAAC,EACd,EAAE,EAAE,IAAI,CAAC,MAAM,EACf,KAAK,EAAE,cAAc,GACrB,EACF,eACE,EAAE,EAAE,IAAI,CAAC,IAAI,EACb,EAAE,EAAE,QAAQ,CAAC,CAAC,EACd,EAAE,EAAE,IAAI,CAAC,KAAK,EACd,EAAE,EAAE,QAAQ,CAAC,CAAC,EACd,KAAK,EAAE,cAAc,GACrB,EACD,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAC1B,eAEE,CAAC,EAAE,KAAK,CAAC,CAAC,EACV,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,KAAK,GAAG,UAAU,CAAC,OAAO,EACvC,UAAU,EAAE,KAAK,CAAC,MAAM,EACxB,KAAK,EAAE,YAAY,YAElB,IAAI,IANA,IAAI,CAOJ,CACR,CAAC,IACA,CACL,CAAC;AACJ,CAAC;AAED,MAAM,cAAc,GAAG;IACrB,MAAM,EAAE,YAAY,CAAC,OAAO;IAC5B,eAAe,EAAE,KAAK;CACd,CAAC;AAEX,MAAM,YAAY,GAAG;IACnB,IAAI,EAAE,YAAY,CAAC,WAAW;IAC9B,QAAQ,EAAE,UAAU,CAAC,OAAO;IAC5B,4EAA4E;IAC5E,+EAA+E;IAC/E,mCAAmC;IACnC,GAAG,UAAU;CACL,CAAC"}
|