react-cheminfo 0.27.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/clipboard/ui/CopyableValue.d.ts +12 -9
- package/lib/clipboard/ui/CopyableValue.d.ts.map +1 -1
- package/lib/clipboard/ui/CopyableValue.js +11 -15
- package/lib/clipboard/ui/CopyableValue.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/clipboard/ui/CopyableValue.tsx +22 -35
- 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,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The dialog an editor answers "how do I use this" in.
|
|
3
|
+
*
|
|
4
|
+
* Documentation that lives on a website is documentation nobody reads with a
|
|
5
|
+
* structure half drawn, so each viewer ships its own — but only the words are
|
|
6
|
+
* its own. The dialog, the width, the way the sections are stacked and the way
|
|
7
|
+
* out are the same in all of them, and are written here once.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import { Button, Dialog, DialogBody, DialogFooter } from '@blueprintjs/core';
|
|
11
|
+
import type { ReactNode } from 'react';
|
|
12
|
+
|
|
13
|
+
import { Section } from './Section.tsx';
|
|
14
|
+
import { useConfirmOnEnter } from './useConfirmOnEnter.ts';
|
|
15
|
+
|
|
16
|
+
/** One part of what a viewer has to say about itself. */
|
|
17
|
+
export interface DocumentationSection {
|
|
18
|
+
/** Stable key, so a section keeps its place as the list grows. */
|
|
19
|
+
id: string;
|
|
20
|
+
/** What the section is called. */
|
|
21
|
+
title: string;
|
|
22
|
+
/** What it says. */
|
|
23
|
+
body: ReactNode;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/** What the documentation dialog is given. */
|
|
27
|
+
export interface DocumentationDialogFrameProps {
|
|
28
|
+
/** Whether the dialog is showing. */
|
|
29
|
+
isOpen: boolean;
|
|
30
|
+
/** Called when it is dismissed. */
|
|
31
|
+
onClose: () => void;
|
|
32
|
+
/** The sections, in reading order. */
|
|
33
|
+
sections: readonly DocumentationSection[];
|
|
34
|
+
/**
|
|
35
|
+
* What the title bar reads.
|
|
36
|
+
* @default 'Documentation'
|
|
37
|
+
*/
|
|
38
|
+
title?: string;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Draw the documentation of one viewer.
|
|
43
|
+
* @param props - The sections and how the dialog is opened and closed.
|
|
44
|
+
* @returns The dialog.
|
|
45
|
+
*/
|
|
46
|
+
export function DocumentationDialogFrame(
|
|
47
|
+
props: DocumentationDialogFrameProps,
|
|
48
|
+
): ReactNode {
|
|
49
|
+
const { isOpen, onClose, sections, title = 'Documentation' } = props;
|
|
50
|
+
useConfirmOnEnter(isOpen, onClose);
|
|
51
|
+
|
|
52
|
+
return (
|
|
53
|
+
<Dialog
|
|
54
|
+
isOpen={isOpen}
|
|
55
|
+
title={title}
|
|
56
|
+
icon="help"
|
|
57
|
+
style={dialogStyle}
|
|
58
|
+
onClose={onClose}
|
|
59
|
+
>
|
|
60
|
+
<DialogBody>
|
|
61
|
+
<div style={bodyStyle}>
|
|
62
|
+
{sections.map((section) => (
|
|
63
|
+
<Section key={section.id} title={section.title}>
|
|
64
|
+
{section.body}
|
|
65
|
+
</Section>
|
|
66
|
+
))}
|
|
67
|
+
</div>
|
|
68
|
+
</DialogBody>
|
|
69
|
+
<DialogFooter
|
|
70
|
+
actions={
|
|
71
|
+
<Button intent="primary" onClick={onClose}>
|
|
72
|
+
Close
|
|
73
|
+
</Button>
|
|
74
|
+
}
|
|
75
|
+
/>
|
|
76
|
+
</Dialog>
|
|
77
|
+
);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
const dialogStyle = { width: 640, maxWidth: '92vw' } as const;
|
|
81
|
+
|
|
82
|
+
const bodyStyle = {
|
|
83
|
+
display: 'flex',
|
|
84
|
+
flexDirection: 'column',
|
|
85
|
+
gap: 20,
|
|
86
|
+
} as const;
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { InputGroup } from '@blueprintjs/core';
|
|
2
|
+
|
|
3
|
+
import { ClearButton } from './ClearButton.tsx';
|
|
4
|
+
|
|
5
|
+
export interface FilterInputProps {
|
|
6
|
+
/** What the user typed. */
|
|
7
|
+
value: string;
|
|
8
|
+
/** Called with what the user typed, and with `''` when the cross is clicked. */
|
|
9
|
+
onValueChange: (value: string) => void;
|
|
10
|
+
/** What the box says while it is empty. */
|
|
11
|
+
placeholder: string;
|
|
12
|
+
/**
|
|
13
|
+
* Whether the box takes the caret as it appears, for the times it is revealed
|
|
14
|
+
* by a click on a toolbar item somewhere else.
|
|
15
|
+
* @default false
|
|
16
|
+
*/
|
|
17
|
+
autoFocus?: boolean;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* The box a list is filtered through, with a cross to empty it again.
|
|
22
|
+
*
|
|
23
|
+
* A filter left behind hides entries that are still there, and a peak table is
|
|
24
|
+
* exactly where that goes unnoticed — a spectrum with three peaks in it looks
|
|
25
|
+
* like a spectrum with three peaks in it. So every list that offers a filter
|
|
26
|
+
* also offers one click back to the whole of it rather than a held backspace.
|
|
27
|
+
*
|
|
28
|
+
* Every correction the browser offers is turned off: a formula, an m/z and a
|
|
29
|
+
* residue name are neither words nor sentences, and a mobile keyboard
|
|
30
|
+
* capitalising `mNa+` or autocorrecting `Hex` is how a query stops matching
|
|
31
|
+
* anything.
|
|
32
|
+
* @param props - Component props.
|
|
33
|
+
* @returns The box.
|
|
34
|
+
*/
|
|
35
|
+
export function FilterInput(props: FilterInputProps) {
|
|
36
|
+
const { value, onValueChange, placeholder, autoFocus = false } = props;
|
|
37
|
+
|
|
38
|
+
return (
|
|
39
|
+
<InputGroup
|
|
40
|
+
autoFocus={autoFocus}
|
|
41
|
+
leftIcon="search"
|
|
42
|
+
size="small"
|
|
43
|
+
value={value}
|
|
44
|
+
placeholder={placeholder}
|
|
45
|
+
spellCheck={false}
|
|
46
|
+
autoCapitalize="off"
|
|
47
|
+
autoCorrect="off"
|
|
48
|
+
autoComplete="off"
|
|
49
|
+
rightElement={
|
|
50
|
+
value.length > 0 ? (
|
|
51
|
+
<ClearButton
|
|
52
|
+
label="Clear the filter"
|
|
53
|
+
onClick={() => onValueChange('')}
|
|
54
|
+
/>
|
|
55
|
+
) : undefined
|
|
56
|
+
}
|
|
57
|
+
onValueChange={onValueChange}
|
|
58
|
+
/>
|
|
59
|
+
);
|
|
60
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { HelpText } from '../../help/ui/HelpBody.tsx';
|
|
2
|
+
import { HelpIcon } from '../../help/ui/HelpIcon.tsx';
|
|
3
|
+
import { labelStyle } from '../core/panelStyles.ts';
|
|
4
|
+
|
|
5
|
+
/** What the label names, and what its question mark answers. */
|
|
6
|
+
export interface HelpLabelProps {
|
|
7
|
+
/** What the value is, written small and quiet above it. */
|
|
8
|
+
label: string;
|
|
9
|
+
/** The sentences the question mark carries, one string per paragraph. */
|
|
10
|
+
help: HelpText;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* A panel label with a question mark beside it.
|
|
15
|
+
*
|
|
16
|
+
* The label is the half that has to be read at a glance — it names the field
|
|
17
|
+
* under it — so it stays plain, and everything that would otherwise be a
|
|
18
|
+
* paragraph of instructions under the control hangs off the glyph beside it.
|
|
19
|
+
*
|
|
20
|
+
* The help opens to the side rather than above, and that is not a preference:
|
|
21
|
+
* these glyphs sit in a panel beside the very thing they explain — a picture, a
|
|
22
|
+
* chart, a spectrum — and a tooltip placed over the top of a control covers the
|
|
23
|
+
* subject of its own first sentence.
|
|
24
|
+
* @param props - Component props.
|
|
25
|
+
* @returns The label row.
|
|
26
|
+
*/
|
|
27
|
+
export function HelpLabel(props: HelpLabelProps) {
|
|
28
|
+
const { label, help } = props;
|
|
29
|
+
|
|
30
|
+
return (
|
|
31
|
+
<div style={rowStyle}>
|
|
32
|
+
<span style={labelStyle}>{label}</span>
|
|
33
|
+
<HelpIcon
|
|
34
|
+
content={{ body: help }}
|
|
35
|
+
label={`What ${label} means`}
|
|
36
|
+
placement="left"
|
|
37
|
+
size={12}
|
|
38
|
+
/>
|
|
39
|
+
</div>
|
|
40
|
+
);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
const rowStyle = { display: 'flex', alignItems: 'center', gap: 4 } as const;
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import type { IconName } from '@blueprintjs/core';
|
|
2
|
+
import { Callout } from '@blueprintjs/core';
|
|
3
|
+
import type { ReactNode } from 'react';
|
|
4
|
+
|
|
5
|
+
import { panelEmptyStyle } from '../core/panelStyles.ts';
|
|
6
|
+
|
|
7
|
+
/** What a panel says when it cannot show what it is for. */
|
|
8
|
+
export type PanelMessageIntent = 'none' | 'warning' | 'danger';
|
|
9
|
+
|
|
10
|
+
export interface PanelMessageProps {
|
|
11
|
+
/**
|
|
12
|
+
* How much is in the way: `danger` for something the editor refused,
|
|
13
|
+
* `warning` for something it could only do in part, `none` for a remark.
|
|
14
|
+
* @default 'warning'
|
|
15
|
+
*/
|
|
16
|
+
intent?: PanelMessageIntent;
|
|
17
|
+
/**
|
|
18
|
+
* The icon, when the one the intent carries is not the one meant — a lookup
|
|
19
|
+
* that found nothing is a search that came back empty, not a warning.
|
|
20
|
+
* @default the icon of the intent
|
|
21
|
+
*/
|
|
22
|
+
icon?: IconName;
|
|
23
|
+
/** What to say, in the terms the drawing is in. */
|
|
24
|
+
children: ReactNode;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Why a panel is showing this instead of what it is for.
|
|
29
|
+
*
|
|
30
|
+
* A refusal, a limitation and a remark are told apart by colour rather than by
|
|
31
|
+
* wording, and they are told apart the same way in every panel — which is what
|
|
32
|
+
* this is for: eight places said the same thing in three spellings before.
|
|
33
|
+
* @param props - Component props.
|
|
34
|
+
* @returns The callout.
|
|
35
|
+
*/
|
|
36
|
+
export function PanelMessage(props: PanelMessageProps) {
|
|
37
|
+
const { intent = 'warning', icon = INTENT_ICONS[intent], children } = props;
|
|
38
|
+
|
|
39
|
+
return (
|
|
40
|
+
<Callout intent={intent} compact icon={icon}>
|
|
41
|
+
{children}
|
|
42
|
+
</Callout>
|
|
43
|
+
);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export interface PanelEmptyProps {
|
|
47
|
+
/** What there is instead of the list, in a few words. */
|
|
48
|
+
children: ReactNode;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* The quiet line a panel shows in place of a list it has nothing to fill.
|
|
53
|
+
* @param props - Component props.
|
|
54
|
+
* @returns The line.
|
|
55
|
+
*/
|
|
56
|
+
export function PanelEmpty(props: PanelEmptyProps) {
|
|
57
|
+
return <div style={panelEmptyStyle}>{props.children}</div>;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
const INTENT_ICONS: Record<PanelMessageIntent, IconName> = {
|
|
61
|
+
none: 'info-sign',
|
|
62
|
+
warning: 'warning-sign',
|
|
63
|
+
danger: 'error',
|
|
64
|
+
};
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The column of icons down the right edge, which opens and shuts the panels.
|
|
3
|
+
*
|
|
4
|
+
* Only the bar and its icons: each editor keeps the element it hangs the rail
|
|
5
|
+
* in, because where the rail sits — outside the split, so the icons stay against
|
|
6
|
+
* the edge while the panel beside them is resized — is a decision about that
|
|
7
|
+
* editor's layout rather than about the rail.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import type { IconName, MaybeElement } from '@blueprintjs/core';
|
|
11
|
+
import type { ReactNode } from 'react';
|
|
12
|
+
import { ActivityBar } from 'react-science/ui';
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* One panel the rail can open.
|
|
16
|
+
*
|
|
17
|
+
* Generic in its own id, because each editor names its panels in a union of its
|
|
18
|
+
* own and hands the rail the very function that opens them — a rail that took
|
|
19
|
+
* plain strings would refuse every one of those functions.
|
|
20
|
+
*/
|
|
21
|
+
export interface RailPanel<TId extends string = string> {
|
|
22
|
+
/** Which panel, matching what the editor's state calls it. */
|
|
23
|
+
id: TId;
|
|
24
|
+
/** The Blueprint icon it is known by. */
|
|
25
|
+
icon: IconName | MaybeElement;
|
|
26
|
+
/** What the tooltip reads. */
|
|
27
|
+
title: string;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/** What the rail is given. */
|
|
31
|
+
export interface PanelRailProps<TId extends string = string> {
|
|
32
|
+
/** The panels offered, in the order they are shown. */
|
|
33
|
+
panels: ReadonlyArray<RailPanel<TId>>;
|
|
34
|
+
/** Which of them are open. */
|
|
35
|
+
openIds: readonly string[];
|
|
36
|
+
/** Called with the panel an icon was clicked for. */
|
|
37
|
+
onToggle: (id: TId) => void;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Draw the rail.
|
|
42
|
+
* @param props - The panels, which are open, and what to do about a click.
|
|
43
|
+
* @returns The rail.
|
|
44
|
+
*/
|
|
45
|
+
export function PanelRail<TId extends string>(
|
|
46
|
+
props: PanelRailProps<TId>,
|
|
47
|
+
): ReactNode {
|
|
48
|
+
const { panels, openIds, onToggle } = props;
|
|
49
|
+
|
|
50
|
+
return (
|
|
51
|
+
<ActivityBar>
|
|
52
|
+
{panels.map((panel) => (
|
|
53
|
+
<ActivityBar.Item
|
|
54
|
+
key={panel.id}
|
|
55
|
+
id={panel.id}
|
|
56
|
+
icon={panel.icon}
|
|
57
|
+
tooltip={panel.title}
|
|
58
|
+
active={openIds.includes(panel.id)}
|
|
59
|
+
onClick={() => onToggle(panel.id)}
|
|
60
|
+
/>
|
|
61
|
+
))}
|
|
62
|
+
</ActivityBar>
|
|
63
|
+
);
|
|
64
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
|
|
3
|
+
export interface SectionProps {
|
|
4
|
+
/** What the block is about, written above it. */
|
|
5
|
+
title: string;
|
|
6
|
+
/** The block. */
|
|
7
|
+
children: ReactNode;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* One titled block of a dialog.
|
|
12
|
+
* @param props - Component props.
|
|
13
|
+
* @returns The section.
|
|
14
|
+
*/
|
|
15
|
+
export function Section(props: SectionProps) {
|
|
16
|
+
const { title, children } = props;
|
|
17
|
+
return (
|
|
18
|
+
<div style={sectionStyle}>
|
|
19
|
+
<div style={sectionTitleStyle}>{title}</div>
|
|
20
|
+
{children}
|
|
21
|
+
</div>
|
|
22
|
+
);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export interface LinkProps {
|
|
26
|
+
href: string;
|
|
27
|
+
children: ReactNode;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* A link out of a dialog, opened away from the editor so a drawing in progress
|
|
32
|
+
* or a spectrum being read is never lost to a click.
|
|
33
|
+
* @param props - Component props.
|
|
34
|
+
* @returns The link.
|
|
35
|
+
*/
|
|
36
|
+
export function Link(props: LinkProps) {
|
|
37
|
+
const { href, children } = props;
|
|
38
|
+
return (
|
|
39
|
+
<a href={href} target="_blank" rel="noopener noreferrer" style={linkStyle}>
|
|
40
|
+
{children}
|
|
41
|
+
</a>
|
|
42
|
+
);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
const sectionStyle = {
|
|
46
|
+
display: 'flex',
|
|
47
|
+
flexDirection: 'column',
|
|
48
|
+
gap: 6,
|
|
49
|
+
} as const;
|
|
50
|
+
|
|
51
|
+
const sectionTitleStyle = {
|
|
52
|
+
fontSize: 11,
|
|
53
|
+
fontWeight: 600,
|
|
54
|
+
textTransform: 'uppercase',
|
|
55
|
+
letterSpacing: '0.04em',
|
|
56
|
+
opacity: 0.6,
|
|
57
|
+
} as const;
|
|
58
|
+
|
|
59
|
+
// Spelled out rather than left to the page: nothing says a host application
|
|
60
|
+
// styles its anchors, and a credit nobody can tell is a link is not a credit.
|
|
61
|
+
const linkStyle = {
|
|
62
|
+
// The site's own accent, and the inherited ink on a page that declares none —
|
|
63
|
+
// the underline is what makes it a link either way.
|
|
64
|
+
color: 'var(--accent, inherit)',
|
|
65
|
+
textDecoration: 'underline',
|
|
66
|
+
} as const;
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
import type { ActivityBarItemProps } from 'react-science/ui';
|
|
3
|
+
import { Accordion, AccordionProvider, Button } from 'react-science/ui';
|
|
4
|
+
|
|
5
|
+
/** What a rail reads about one panel, wherever that rail is drawn. */
|
|
6
|
+
export interface PanelDescriptor {
|
|
7
|
+
/** Identity, as the activity bar and the list of open panels address it. */
|
|
8
|
+
id: string;
|
|
9
|
+
/** What the header says, and what the icon's tooltip reads. */
|
|
10
|
+
title: string;
|
|
11
|
+
/** The icon stacked in the rail. */
|
|
12
|
+
icon: ActivityBarItemProps['icon'];
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export interface SidePanelStackProps<TPanel extends PanelDescriptor> {
|
|
16
|
+
/** Every panel on offer, in the order their icons are stacked. */
|
|
17
|
+
panels: readonly TPanel[];
|
|
18
|
+
/** Which of them are open, named as each editor's own view names them. */
|
|
19
|
+
openPanelIds: readonly string[];
|
|
20
|
+
/**
|
|
21
|
+
* Called with the panel whose close cross was pressed. It is the id of one of
|
|
22
|
+
* `panels` rather than any string, so an editor whose panels are a fixed set
|
|
23
|
+
* hands its own `togglePanel` straight in.
|
|
24
|
+
* @param id - Identity of that panel.
|
|
25
|
+
*/
|
|
26
|
+
onClose: (id: TPanel['id']) => void;
|
|
27
|
+
/**
|
|
28
|
+
* What to draw inside one panel.
|
|
29
|
+
* @param panel - The panel to draw.
|
|
30
|
+
* @returns Its body.
|
|
31
|
+
*/
|
|
32
|
+
children: (panel: TPanel) => ReactNode;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* The panels that are open, stacked one under the other down the side.
|
|
37
|
+
*
|
|
38
|
+
* Every open panel gets a share of the height rather than a turn: the things
|
|
39
|
+
* they hold are read together — which spectrum is selected and what its peaks
|
|
40
|
+
* are, the residues to pick from and what the drawing adds up to — so closing
|
|
41
|
+
* one to see the other would be a step backwards. A header click still folds a
|
|
42
|
+
* single panel away, and shift-click folds every other one.
|
|
43
|
+
*
|
|
44
|
+
* They are drawn in the order the rail stacks their icons rather than the order
|
|
45
|
+
* they were switched on, so a panel always comes back where it was.
|
|
46
|
+
*
|
|
47
|
+
* The header carries the shell's own two gestures and nothing about what the
|
|
48
|
+
* panel holds: the chevron that folds it away and the cross that closes it.
|
|
49
|
+
* What a panel switches on and off is a toolbar at the top of its own body, so
|
|
50
|
+
* it travels with the panel when it is folded, reordered or lent to another
|
|
51
|
+
* editor, and every header in every editor reads the same — which is the reason
|
|
52
|
+
* this is one component rather than one per editor.
|
|
53
|
+
*
|
|
54
|
+
* The chevron is there because nothing else says which panels are folded. The
|
|
55
|
+
* accordion draws every header identically and hides only the body, so a side
|
|
56
|
+
* of four closed panels and a side of four open ones differ by white space, and
|
|
57
|
+
* a reader looking for a panel that is already open reaches for its icon and
|
|
58
|
+
* closes it. It is a real button rather than a glyph because the header's own
|
|
59
|
+
* click never reaches the toolbar — clicks there are stopped so the close cross
|
|
60
|
+
* does not also fold the panel — so a chevron that did nothing when pressed
|
|
61
|
+
* would be an affordance that lies.
|
|
62
|
+
* @param props - Component props.
|
|
63
|
+
* @returns The stack.
|
|
64
|
+
*/
|
|
65
|
+
export function SidePanelStack<TPanel extends PanelDescriptor>(
|
|
66
|
+
props: SidePanelStackProps<TPanel>,
|
|
67
|
+
) {
|
|
68
|
+
const { panels, openPanelIds, onClose, children } = props;
|
|
69
|
+
const open = panels.filter((panel) => openPanelIds.includes(panel.id));
|
|
70
|
+
|
|
71
|
+
return (
|
|
72
|
+
<AccordionProvider>
|
|
73
|
+
<Accordion>
|
|
74
|
+
{open.map((panel) => (
|
|
75
|
+
<Accordion.Item
|
|
76
|
+
key={panel.id}
|
|
77
|
+
id={panel.id}
|
|
78
|
+
title={panel.title}
|
|
79
|
+
defaultOpen
|
|
80
|
+
renderToolbar={({ isOpen, controls }) => (
|
|
81
|
+
<>
|
|
82
|
+
<Button
|
|
83
|
+
variant="minimal"
|
|
84
|
+
icon={isOpen ? 'chevron-down' : 'chevron-right'}
|
|
85
|
+
data-panel-open={isOpen}
|
|
86
|
+
aria-expanded={isOpen}
|
|
87
|
+
aria-label={`${isOpen ? 'Fold' : 'Unfold'} the ${panel.title.toLowerCase()} panel`}
|
|
88
|
+
tooltipProps={{
|
|
89
|
+
content: isOpen ? 'Fold this panel away' : 'Unfold it',
|
|
90
|
+
}}
|
|
91
|
+
onClick={() => controls.toggle()}
|
|
92
|
+
/>
|
|
93
|
+
<Button
|
|
94
|
+
variant="minimal"
|
|
95
|
+
icon="cross"
|
|
96
|
+
tooltipProps={{ content: 'Close this panel' }}
|
|
97
|
+
aria-label={`Close the ${panel.title.toLowerCase()} panel`}
|
|
98
|
+
onClick={() => onClose(panel.id)}
|
|
99
|
+
/>
|
|
100
|
+
</>
|
|
101
|
+
)}
|
|
102
|
+
>
|
|
103
|
+
{children(panel)}
|
|
104
|
+
</Accordion.Item>
|
|
105
|
+
))}
|
|
106
|
+
</Accordion>
|
|
107
|
+
</AccordionProvider>
|
|
108
|
+
);
|
|
109
|
+
}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { PopoverNext } from '@blueprintjs/core';
|
|
2
|
+
import { useState } from 'react';
|
|
3
|
+
|
|
4
|
+
import {
|
|
5
|
+
EXTRA_SPECTRUM_COLORS,
|
|
6
|
+
SPECTRUM_COLORS,
|
|
7
|
+
} from '../../chart/core/spectrumColor.ts';
|
|
8
|
+
|
|
9
|
+
export interface SpectrumColorSwatchProps {
|
|
10
|
+
/** The colour the spectrum is drawn in. */
|
|
11
|
+
color: string;
|
|
12
|
+
/** What the list calls it, for the labels a screen reader reads out. */
|
|
13
|
+
name: string;
|
|
14
|
+
/** Called with the colour that was picked. */
|
|
15
|
+
onPick: (color: string) => void;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* The chip that says what colour a spectrum is drawn in, and changes it.
|
|
20
|
+
*
|
|
21
|
+
* The palette is what `spectrumColor.ts` holds and nothing else: a free colour
|
|
22
|
+
* picker would let two spectra be set to the same blue, or to a hue that
|
|
23
|
+
* disappears against the chart, and telling the traces apart is the whole job
|
|
24
|
+
* the colour has.
|
|
25
|
+
*
|
|
26
|
+
* Its two tiers are drawn as two rows, in that order and unlabelled. A row is
|
|
27
|
+
* enough: the top one is what the chart uses by itself, so a reader who never
|
|
28
|
+
* looks below it is already right, and one who does is choosing deliberately —
|
|
29
|
+
* which is the only way a colour that asks more of its reader's eyes should
|
|
30
|
+
* ever be picked. A legend explaining the difference would be read once and be
|
|
31
|
+
* in the way afterwards; `spectrumColor.ts` is where the difference is written
|
|
32
|
+
* down.
|
|
33
|
+
*
|
|
34
|
+
* One component for every viewer rather than one per package: a swatch that
|
|
35
|
+
* opens a picker in the mass panel and walks the palette in the infrared one is
|
|
36
|
+
* two different controls wearing the same chip, and whichever a reader learned
|
|
37
|
+
* first is the wrong one in the other editor.
|
|
38
|
+
* @param props - Component props.
|
|
39
|
+
* @returns The chip.
|
|
40
|
+
*/
|
|
41
|
+
export function SpectrumColorSwatch(props: SpectrumColorSwatchProps) {
|
|
42
|
+
const { color, name, onPick } = props;
|
|
43
|
+
const [isOpen, setIsOpen] = useState(false);
|
|
44
|
+
|
|
45
|
+
function offer(offered: string) {
|
|
46
|
+
return (
|
|
47
|
+
<button
|
|
48
|
+
key={offered}
|
|
49
|
+
type="button"
|
|
50
|
+
title={offered}
|
|
51
|
+
aria-label={`Draw ${name} in ${offered}`}
|
|
52
|
+
style={{
|
|
53
|
+
...(offered === color ? activeSwatchStyle : swatchStyle),
|
|
54
|
+
background: offered,
|
|
55
|
+
}}
|
|
56
|
+
onClick={() => {
|
|
57
|
+
onPick(offered);
|
|
58
|
+
setIsOpen(false);
|
|
59
|
+
}}
|
|
60
|
+
/>
|
|
61
|
+
);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
return (
|
|
65
|
+
<PopoverNext
|
|
66
|
+
// A handful of chips need no arrow pointing back at a chip of the same
|
|
67
|
+
// size.
|
|
68
|
+
arrow={false}
|
|
69
|
+
isOpen={isOpen}
|
|
70
|
+
placement="bottom-start"
|
|
71
|
+
onInteraction={setIsOpen}
|
|
72
|
+
content={
|
|
73
|
+
<div style={paletteStyle}>
|
|
74
|
+
<div style={paletteRowStyle}>{SPECTRUM_COLORS.map(offer)}</div>
|
|
75
|
+
<div style={paletteRowStyle}>{EXTRA_SPECTRUM_COLORS.map(offer)}</div>
|
|
76
|
+
</div>
|
|
77
|
+
}
|
|
78
|
+
>
|
|
79
|
+
<button
|
|
80
|
+
type="button"
|
|
81
|
+
title="Draw this spectrum in another colour"
|
|
82
|
+
aria-label={`Colour of ${name}`}
|
|
83
|
+
style={{ ...swatchStyle, background: color }}
|
|
84
|
+
/>
|
|
85
|
+
</PopoverNext>
|
|
86
|
+
);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* A round chip rather than a square one: it is the mark the chart's own
|
|
91
|
+
* tooltip uses for a series, so the row and the chart name the same spectrum
|
|
92
|
+
* the same way.
|
|
93
|
+
*/
|
|
94
|
+
const swatchStyle = {
|
|
95
|
+
flex: 'none',
|
|
96
|
+
width: 14,
|
|
97
|
+
height: 14,
|
|
98
|
+
padding: 0,
|
|
99
|
+
borderRadius: '50%',
|
|
100
|
+
border: '1px solid rgba(17, 20, 24, 0.2)',
|
|
101
|
+
cursor: 'pointer',
|
|
102
|
+
} as const;
|
|
103
|
+
|
|
104
|
+
const activeSwatchStyle = {
|
|
105
|
+
...swatchStyle,
|
|
106
|
+
border: '2px solid rgb(17 20 24)',
|
|
107
|
+
} as const;
|
|
108
|
+
|
|
109
|
+
const paletteStyle = {
|
|
110
|
+
display: 'flex',
|
|
111
|
+
flexDirection: 'column',
|
|
112
|
+
gap: 6,
|
|
113
|
+
padding: 8,
|
|
114
|
+
} as const;
|
|
115
|
+
|
|
116
|
+
const paletteRowStyle = {
|
|
117
|
+
display: 'flex',
|
|
118
|
+
gap: 6,
|
|
119
|
+
} as const;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The parts an editor is assembled from: its panels, its dialogs and the rail
|
|
3
|
+
* they are opened from.
|
|
4
|
+
*
|
|
5
|
+
* Every one of them is handed what it shows and reports what was pressed, so
|
|
6
|
+
* none of them reads a store and none of them knows which editor it is in.
|
|
7
|
+
* That is what lets the same panel stack carry a spectrum, a chromatogram and
|
|
8
|
+
* a drawing.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
export type { AboutDialogFrameProps } from './AboutDialogFrame.tsx';
|
|
12
|
+
export { AboutDialogFrame } from './AboutDialogFrame.tsx';
|
|
13
|
+
export type { ClearButtonProps } from './ClearButton.tsx';
|
|
14
|
+
export { ClearButton } from './ClearButton.tsx';
|
|
15
|
+
export type {
|
|
16
|
+
DocumentationDialogFrameProps,
|
|
17
|
+
DocumentationSection,
|
|
18
|
+
} from './DocumentationDialogFrame.tsx';
|
|
19
|
+
export { DocumentationDialogFrame } from './DocumentationDialogFrame.tsx';
|
|
20
|
+
export type { FilterInputProps } from './FilterInput.tsx';
|
|
21
|
+
export { FilterInput } from './FilterInput.tsx';
|
|
22
|
+
export type { HelpLabelProps } from './HelpLabel.tsx';
|
|
23
|
+
export { HelpLabel } from './HelpLabel.tsx';
|
|
24
|
+
export type {
|
|
25
|
+
PanelEmptyProps,
|
|
26
|
+
PanelMessageIntent,
|
|
27
|
+
PanelMessageProps,
|
|
28
|
+
} from './PanelMessage.tsx';
|
|
29
|
+
export { PanelEmpty, PanelMessage } from './PanelMessage.tsx';
|
|
30
|
+
export type { PanelRailProps, RailPanel } from './PanelRail.tsx';
|
|
31
|
+
export { PanelRail } from './PanelRail.tsx';
|
|
32
|
+
export type { LinkProps, SectionProps } from './Section.tsx';
|
|
33
|
+
export { Link, Section } from './Section.tsx';
|
|
34
|
+
export type {
|
|
35
|
+
PanelDescriptor,
|
|
36
|
+
SidePanelStackProps,
|
|
37
|
+
} from './SidePanelStack.tsx';
|
|
38
|
+
export { SidePanelStack } from './SidePanelStack.tsx';
|
|
39
|
+
export type { SpectrumColorSwatchProps } from './SpectrumColorSwatch.tsx';
|
|
40
|
+
export { SpectrumColorSwatch } from './SpectrumColorSwatch.tsx';
|
|
41
|
+
export { useConfirmOnEnter } from './useConfirmOnEnter.ts';
|
|
42
|
+
export type { FilterBox } from './useFilterBox.ts';
|
|
43
|
+
export { useFilterBox } from './useFilterBox.ts';
|
|
44
|
+
export type { VirtualRows } from './useVirtualRows.ts';
|
|
45
|
+
export { useVirtualRows } from './useVirtualRows.ts';
|
|
46
|
+
export type { VirtualWindowRows } from './useVirtualWindowRows.ts';
|
|
47
|
+
export { useVirtualWindowRows } from './useVirtualWindowRows.ts';
|