react-cheminfo 0.69.0 → 0.71.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 +70 -2
- package/lib/about/core/providers.d.ts +6 -0
- package/lib/about/core/providers.d.ts.map +1 -1
- package/lib/about/core/providers.js +7 -0
- package/lib/about/core/providers.js.map +1 -1
- package/lib/about/ui/AboutProvidedBy.js +34 -0
- package/lib/about/ui/AboutProvidedBy.js.map +1 -1
- package/lib/chart/ui/useChartPointer.d.ts +9 -1
- package/lib/chart/ui/useChartPointer.d.ts.map +1 -1
- package/lib/chart/ui/useChartPointer.js +11 -3
- package/lib/chart/ui/useChartPointer.js.map +1 -1
- package/lib/credits/core/credits.d.ts +41 -0
- package/lib/credits/core/credits.d.ts.map +1 -1
- package/lib/credits/core/credits.js +50 -0
- package/lib/credits/core/credits.js.map +1 -1
- package/lib/download/core/drawingMarkup.d.ts +8 -1
- package/lib/download/core/drawingMarkup.d.ts.map +1 -1
- package/lib/download/core/drawingMarkup.js +13 -1
- package/lib/download/core/drawingMarkup.js.map +1 -1
- package/lib/download/core/figurePng.d.ts +14 -0
- package/lib/download/core/figurePng.d.ts.map +1 -1
- package/lib/download/core/figurePng.js +21 -6
- package/lib/download/core/figurePng.js.map +1 -1
- package/lib/download/core/figureSvg.d.ts.map +1 -1
- package/lib/download/core/figureSvg.js +5 -3
- package/lib/download/core/figureSvg.js.map +1 -1
- package/lib/download/core/figureTarget.d.ts +13 -0
- package/lib/download/core/figureTarget.d.ts.map +1 -1
- package/lib/download/core/figureTarget.js +25 -5
- package/lib/download/core/figureTarget.js.map +1 -1
- package/lib/download/core/svgBounds.d.ts +15 -0
- package/lib/download/core/svgBounds.d.ts.map +1 -1
- package/lib/download/core/svgBounds.js +20 -0
- package/lib/download/core/svgBounds.js.map +1 -1
- package/lib/download/core/svgToPng.d.ts.map +1 -1
- package/lib/download/core/svgToPng.js +4 -2
- package/lib/download/core/svgToPng.js.map +1 -1
- package/lib/format/core/relativeTime.d.ts +8 -3
- package/lib/format/core/relativeTime.d.ts.map +1 -1
- package/lib/format/core/relativeTime.js +19 -7
- package/lib/format/core/relativeTime.js.map +1 -1
- package/lib/host/core/connectHost.d.ts +25 -34
- package/lib/host/core/connectHost.d.ts.map +1 -1
- package/lib/host/core/connectHost.js +43 -89
- package/lib/host/core/connectHost.js.map +1 -1
- package/lib/host/core/hostOutputs.d.ts +58 -0
- package/lib/host/core/hostOutputs.d.ts.map +1 -0
- package/lib/host/core/hostOutputs.js +151 -0
- package/lib/host/core/hostOutputs.js.map +1 -0
- package/lib/host/core/index.d.ts +9 -3
- package/lib/host/core/index.d.ts.map +1 -1
- package/lib/host/core/index.js +4 -1
- package/lib/host/core/index.js.map +1 -1
- package/lib/host/core/irKinds.d.ts +124 -0
- package/lib/host/core/irKinds.d.ts.map +1 -0
- package/lib/host/core/irKinds.js +46 -0
- package/lib/host/core/irKinds.js.map +1 -0
- package/lib/host/core/kinds.d.ts +13 -5
- package/lib/host/core/kinds.d.ts.map +1 -1
- package/lib/host/core/kinds.js +11 -5
- package/lib/host/core/kinds.js.map +1 -1
- package/lib/host/core/protocol.d.ts +50 -7
- package/lib/host/core/protocol.d.ts.map +1 -1
- package/lib/host/core/protocol.js +10 -6
- package/lib/host/core/protocol.js.map +1 -1
- package/lib/host/core/selectInputs.d.ts +37 -0
- package/lib/host/core/selectInputs.d.ts.map +1 -0
- package/lib/host/core/selectInputs.js +110 -0
- package/lib/host/core/selectInputs.js.map +1 -0
- package/lib/host/testing/sciPeaks.d.ts +31 -0
- package/lib/host/testing/sciPeaks.d.ts.map +1 -1
- package/lib/host/testing/sciPeaks.js +73 -0
- package/lib/host/testing/sciPeaks.js.map +1 -1
- package/lib/host/testing/standInHost.d.ts +9 -1
- package/lib/host/testing/standInHost.d.ts.map +1 -1
- package/lib/host/testing/standInHost.js +19 -1
- package/lib/host/testing/standInHost.js.map +1 -1
- package/lib/host/ui/useHostConnection.d.ts +13 -5
- package/lib/host/ui/useHostConnection.d.ts.map +1 -1
- package/lib/host/ui/useHostConnection.js +4 -3
- package/lib/host/ui/useHostConnection.js.map +1 -1
- package/lib/host-testing.d.ts +2 -2
- package/lib/host-testing.d.ts.map +1 -1
- package/lib/host-testing.js +2 -2
- package/lib/host-testing.js.map +1 -1
- package/lib/i18n/core/chromeCatalog.d.ts +1 -1
- package/lib/i18n/core/chromeCatalog.d.ts.map +1 -1
- package/lib/ir/core/handPicking.d.ts +58 -0
- package/lib/ir/core/handPicking.d.ts.map +1 -0
- package/lib/ir/core/handPicking.js +130 -0
- package/lib/ir/core/handPicking.js.map +1 -0
- package/lib/ir/core/index.d.ts +3 -0
- package/lib/ir/core/index.d.ts.map +1 -1
- package/lib/ir/core/index.js +3 -0
- package/lib/ir/core/index.js.map +1 -1
- package/lib/ir/core/irBandState.d.ts +57 -0
- package/lib/ir/core/irBandState.d.ts.map +1 -0
- package/lib/ir/core/irBandState.js +119 -0
- package/lib/ir/core/irBandState.js.map +1 -0
- package/lib/ir/core/irCommands.d.ts +11 -0
- package/lib/ir/core/irCommands.d.ts.map +1 -1
- package/lib/ir/core/irCommands.js +6 -0
- package/lib/ir/core/irCommands.js.map +1 -1
- package/lib/ir/core/irPeaks.d.ts +28 -0
- package/lib/ir/core/irPeaks.d.ts.map +1 -0
- package/lib/ir/core/irPeaks.js +66 -0
- package/lib/ir/core/irPeaks.js.map +1 -0
- package/lib/ir/core/irReducer.d.ts +8 -0
- package/lib/ir/core/irReducer.d.ts.map +1 -1
- package/lib/ir/core/irReducer.js +15 -32
- package/lib/ir/core/irReducer.js.map +1 -1
- package/lib/ir/core/irSpectrum.d.ts +15 -0
- package/lib/ir/core/irSpectrum.d.ts.map +1 -1
- package/lib/ir/core/irSpectrum.js.map +1 -1
- package/lib/ir/core/irState.d.ts +9 -6
- package/lib/ir/core/irState.d.ts.map +1 -1
- package/lib/ir/core/irState.js +10 -6
- package/lib/ir/core/irState.js.map +1 -1
- package/lib/ir/core/pickBands.d.ts +14 -0
- package/lib/ir/core/pickBands.d.ts.map +1 -1
- package/lib/ir/core/pickBands.js +39 -33
- package/lib/ir/core/pickBands.js.map +1 -1
- package/lib/ir/core/ramanBands.d.ts +9 -1
- package/lib/ir/core/ramanBands.d.ts.map +1 -1
- package/lib/ir/core/ramanBands.js +2 -2
- package/lib/ir/core/ramanBands.js.map +1 -1
- package/lib/ir/core/spectrumBands.d.ts +46 -0
- package/lib/ir/core/spectrumBands.d.ts.map +1 -0
- package/lib/ir/core/spectrumBands.js +98 -0
- package/lib/ir/core/spectrumBands.js.map +1 -0
- package/lib/ir/ui/BandRow.d.ts +5 -0
- package/lib/ir/ui/BandRow.d.ts.map +1 -1
- package/lib/ir/ui/BandRow.js +4 -3
- package/lib/ir/ui/BandRow.js.map +1 -1
- package/lib/ir/ui/BandsPanel.d.ts +5 -0
- package/lib/ir/ui/BandsPanel.d.ts.map +1 -1
- package/lib/ir/ui/BandsPanel.js +36 -16
- package/lib/ir/ui/BandsPanel.js.map +1 -1
- package/lib/ir/ui/BandsToolbar.d.ts +9 -0
- package/lib/ir/ui/BandsToolbar.d.ts.map +1 -0
- package/lib/ir/ui/BandsToolbar.js +61 -0
- package/lib/ir/ui/BandsToolbar.js.map +1 -0
- package/lib/ir/ui/IrCanvas.d.ts +2 -1
- package/lib/ir/ui/IrCanvas.d.ts.map +1 -1
- package/lib/ir/ui/IrCanvas.js +19 -5
- package/lib/ir/ui/IrCanvas.js.map +1 -1
- package/lib/ir/ui/IrChart.d.ts.map +1 -1
- package/lib/ir/ui/IrChart.js +8 -1
- package/lib/ir/ui/IrChart.js.map +1 -1
- package/lib/ir/ui/IrDocumentationDialog.js +1 -1
- package/lib/ir/ui/IrDocumentationDialog.js.map +1 -1
- package/lib/ir/ui/IrEditor.d.ts +4 -2
- package/lib/ir/ui/IrEditor.d.ts.map +1 -1
- package/lib/ir/ui/IrEditor.js.map +1 -1
- package/lib/ir/ui/IrShell.d.ts.map +1 -1
- package/lib/ir/ui/IrShell.js +6 -0
- package/lib/ir/ui/IrShell.js.map +1 -1
- package/lib/ir/ui/IrStatusBar.d.ts.map +1 -1
- package/lib/ir/ui/IrStatusBar.js +1 -1
- package/lib/ir/ui/IrStatusBar.js.map +1 -1
- package/lib/ir/ui/IrToolbar.d.ts +4 -3
- package/lib/ir/ui/IrToolbar.d.ts.map +1 -1
- package/lib/ir/ui/IrToolbar.js +5 -4
- package/lib/ir/ui/IrToolbar.js.map +1 -1
- package/lib/ir/ui/VibrationalEditor.d.ts +2 -1
- package/lib/ir/ui/VibrationalEditor.d.ts.map +1 -1
- package/lib/ir/ui/VibrationalEditor.js.map +1 -1
- package/lib/ir/ui/irActions.d.ts +5 -0
- package/lib/ir/ui/irActions.d.ts.map +1 -1
- package/lib/ir/ui/irActions.js +6 -0
- package/lib/ir/ui/irActions.js.map +1 -1
- package/lib/ir/ui/irChartProps.d.ts +4 -1
- package/lib/ir/ui/irChartProps.d.ts.map +1 -1
- package/lib/ir/ui/useIrEditor.d.ts +5 -11
- package/lib/ir/ui/useIrEditor.d.ts.map +1 -1
- package/lib/ir/ui/useIrEditor.js +17 -18
- package/lib/ir/ui/useIrEditor.js.map +1 -1
- package/lib/locales/de.json +63 -0
- package/lib/locales/en.json +63 -0
- package/lib/locales/es.json +63 -0
- package/lib/locales/fr.json +63 -0
- package/lib/locales/it.json +63 -0
- package/lib/mass/core/analyseSpectrum.d.ts +85 -0
- package/lib/mass/core/analyseSpectrum.d.ts.map +1 -0
- package/lib/mass/core/analyseSpectrum.js +101 -0
- package/lib/mass/core/analyseSpectrum.js.map +1 -0
- package/lib/mass/core/ascendingTrace.d.ts +24 -0
- package/lib/mass/core/ascendingTrace.d.ts.map +1 -0
- package/lib/mass/core/ascendingTrace.js +57 -0
- package/lib/mass/core/ascendingTrace.js.map +1 -0
- package/lib/mass/core/centroidPeaks.d.ts +77 -0
- package/lib/mass/core/centroidPeaks.d.ts.map +1 -0
- package/lib/mass/core/centroidPeaks.js +62 -0
- package/lib/mass/core/centroidPeaks.js.map +1 -0
- package/lib/mass/core/detectMassFormat.d.ts +24 -0
- package/lib/mass/core/detectMassFormat.d.ts.map +1 -0
- package/lib/mass/core/detectMassFormat.js +105 -0
- package/lib/mass/core/detectMassFormat.js.map +1 -0
- package/lib/mass/core/downloadSpectra.d.ts +24 -0
- package/lib/mass/core/downloadSpectra.d.ts.map +1 -0
- package/lib/mass/core/downloadSpectra.js +35 -0
- package/lib/mass/core/downloadSpectra.js.map +1 -0
- package/lib/mass/core/fromJcamp.d.ts +46 -0
- package/lib/mass/core/fromJcamp.d.ts.map +1 -0
- package/lib/mass/core/fromJcamp.js +123 -0
- package/lib/mass/core/fromJcamp.js.map +1 -0
- package/lib/mass/core/fromText.d.ts +30 -0
- package/lib/mass/core/fromText.d.ts.map +1 -0
- package/lib/mass/core/fromText.js +39 -0
- package/lib/mass/core/fromText.js.map +1 -0
- package/lib/mass/core/index.d.ts +70 -0
- package/lib/mass/core/index.d.ts.map +1 -0
- package/lib/mass/core/index.js +42 -0
- package/lib/mass/core/index.js.map +1 -0
- package/lib/mass/core/jcampTechnique.d.ts +38 -0
- package/lib/mass/core/jcampTechnique.d.ts.map +1 -0
- package/lib/mass/core/jcampTechnique.js +70 -0
- package/lib/mass/core/jcampTechnique.js.map +1 -0
- package/lib/mass/core/labelStackBox.d.ts +49 -0
- package/lib/mass/core/labelStackBox.d.ts.map +1 -0
- package/lib/mass/core/labelStackBox.js +44 -0
- package/lib/mass/core/labelStackBox.js.map +1 -0
- package/lib/mass/core/labelledPeaks.d.ts +79 -0
- package/lib/mass/core/labelledPeaks.d.ts.map +1 -0
- package/lib/mass/core/labelledPeaks.js +74 -0
- package/lib/mass/core/labelledPeaks.js.map +1 -0
- package/lib/mass/core/loadMassSpectra.d.ts +57 -0
- package/lib/mass/core/loadMassSpectra.d.ts.map +1 -0
- package/lib/mass/core/loadMassSpectra.js +45 -0
- package/lib/mass/core/loadMassSpectra.js.map +1 -0
- package/lib/mass/core/loadedMassSpectrum.d.ts +42 -0
- package/lib/mass/core/loadedMassSpectrum.d.ts.map +1 -0
- package/lib/mass/core/loadedMassSpectrum.js +15 -0
- package/lib/mass/core/loadedMassSpectrum.js.map +1 -0
- package/lib/mass/core/massCommands.d.ts +170 -0
- package/lib/mass/core/massCommands.d.ts.map +1 -0
- package/lib/mass/core/massCommands.js +95 -0
- package/lib/mass/core/massCommands.js.map +1 -0
- package/lib/mass/core/massDomain.d.ts +121 -0
- package/lib/mass/core/massDomain.d.ts.map +1 -0
- package/lib/mass/core/massDomain.js +179 -0
- package/lib/mass/core/massDomain.js.map +1 -0
- package/lib/mass/core/massEditorApi.d.ts +65 -0
- package/lib/mass/core/massEditorApi.d.ts.map +1 -0
- package/lib/mass/core/massEditorApi.js +10 -0
- package/lib/mass/core/massEditorApi.js.map +1 -0
- package/lib/mass/core/massFormat.d.ts +78 -0
- package/lib/mass/core/massFormat.d.ts.map +1 -0
- package/lib/mass/core/massFormat.js +168 -0
- package/lib/mass/core/massFormat.js.map +1 -0
- package/lib/mass/core/massMeta.d.ts +85 -0
- package/lib/mass/core/massMeta.d.ts.map +1 -0
- package/lib/mass/core/massMeta.js +182 -0
- package/lib/mass/core/massMeta.js.map +1 -0
- package/lib/mass/core/massReducer.d.ts +82 -0
- package/lib/mass/core/massReducer.d.ts.map +1 -0
- package/lib/mass/core/massReducer.js +163 -0
- package/lib/mass/core/massReducer.js.map +1 -0
- package/lib/mass/core/massResolution.d.ts +92 -0
- package/lib/mass/core/massResolution.d.ts.map +1 -0
- package/lib/mass/core/massResolution.js +126 -0
- package/lib/mass/core/massResolution.js.map +1 -0
- package/lib/mass/core/massSidePanels.d.ts +28 -0
- package/lib/mass/core/massSidePanels.d.ts.map +1 -0
- package/lib/mass/core/massSidePanels.js +12 -0
- package/lib/mass/core/massSidePanels.js.map +1 -0
- package/lib/mass/core/massSpectrum.d.ts +206 -0
- package/lib/mass/core/massSpectrum.d.ts.map +1 -0
- package/lib/mass/core/massSpectrum.js +41 -0
- package/lib/mass/core/massSpectrum.js.map +1 -0
- package/lib/mass/core/massState.d.ts +145 -0
- package/lib/mass/core/massState.d.ts.map +1 -0
- package/lib/mass/core/massState.js +102 -0
- package/lib/mass/core/massState.js.map +1 -0
- package/lib/mass/core/massStateEdits.d.ts +51 -0
- package/lib/mass/core/massStateEdits.d.ts.map +1 -0
- package/lib/mass/core/massStateEdits.js +90 -0
- package/lib/mass/core/massStateEdits.js.map +1 -0
- package/lib/mass/core/massSummary.d.ts +77 -0
- package/lib/mass/core/massSummary.d.ts.map +1 -0
- package/lib/mass/core/massSummary.js +174 -0
- package/lib/mass/core/massSummary.js.map +1 -0
- package/lib/mass/core/mzDecimalsSetting.d.ts +36 -0
- package/lib/mass/core/mzDecimalsSetting.d.ts.map +1 -0
- package/lib/mass/core/mzDecimalsSetting.js +42 -0
- package/lib/mass/core/mzDecimalsSetting.js.map +1 -0
- package/lib/mass/core/nearestPeak.d.ts +75 -0
- package/lib/mass/core/nearestPeak.d.ts.map +1 -0
- package/lib/mass/core/nearestPeak.js +99 -0
- package/lib/mass/core/nearestPeak.js.map +1 -0
- package/lib/mass/core/peakLabelLines.d.ts +77 -0
- package/lib/mass/core/peakLabelLines.d.ts.map +1 -0
- package/lib/mass/core/peakLabelLines.js +54 -0
- package/lib/mass/core/peakLabelLines.js.map +1 -0
- package/lib/mass/core/peakLabelPlan.d.ts +109 -0
- package/lib/mass/core/peakLabelPlan.d.ts.map +1 -0
- package/lib/mass/core/peakLabelPlan.js +143 -0
- package/lib/mass/core/peakLabelPlan.js.map +1 -0
- package/lib/mass/core/peakTable.d.ts +54 -0
- package/lib/mass/core/peakTable.d.ts.map +1 -0
- package/lib/mass/core/peakTable.js +53 -0
- package/lib/mass/core/peakTable.js.map +1 -0
- package/lib/mass/core/resolutionOf.d.ts +60 -0
- package/lib/mass/core/resolutionOf.d.ts.map +1 -0
- package/lib/mass/core/resolutionOf.js +84 -0
- package/lib/mass/core/resolutionOf.js.map +1 -0
- package/lib/mass/core/scanFilter.d.ts +25 -0
- package/lib/mass/core/scanFilter.d.ts.map +1 -0
- package/lib/mass/core/scanFilter.js +107 -0
- package/lib/mass/core/scanFilter.js.map +1 -0
- package/lib/mass/core/spectrumJcamp.d.ts +47 -0
- package/lib/mass/core/spectrumJcamp.d.ts.map +1 -0
- package/lib/mass/core/spectrumJcamp.js +167 -0
- package/lib/mass/core/spectrumJcamp.js.map +1 -0
- package/lib/mass/core/toMassSpectrum.d.ts +67 -0
- package/lib/mass/core/toMassSpectrum.d.ts.map +1 -0
- package/lib/mass/core/toMassSpectrum.js +78 -0
- package/lib/mass/core/toMassSpectrum.js.map +1 -0
- package/lib/mass/core/traceIcon.d.ts +82 -0
- package/lib/mass/core/traceIcon.d.ts.map +1 -0
- package/lib/mass/core/traceIcon.js +66 -0
- package/lib/mass/core/traceIcon.js.map +1 -0
- package/lib/mass/core/writtenResolution.d.ts +40 -0
- package/lib/mass/core/writtenResolution.d.ts.map +1 -0
- package/lib/mass/core/writtenResolution.js +77 -0
- package/lib/mass/core/writtenResolution.js.map +1 -0
- package/lib/mass/ui/MassAboutDialog.d.ts +16 -0
- package/lib/mass/ui/MassAboutDialog.d.ts.map +1 -0
- package/lib/mass/ui/MassAboutDialog.js +44 -0
- package/lib/mass/ui/MassAboutDialog.js.map +1 -0
- package/lib/mass/ui/MassCanvas.d.ts +46 -0
- package/lib/mass/ui/MassCanvas.d.ts.map +1 -0
- package/lib/mass/ui/MassCanvas.js +84 -0
- package/lib/mass/ui/MassCanvas.js.map +1 -0
- package/lib/mass/ui/MassChart.d.ts +21 -0
- package/lib/mass/ui/MassChart.d.ts.map +1 -0
- package/lib/mass/ui/MassChart.js +139 -0
- package/lib/mass/ui/MassChart.js.map +1 -0
- package/lib/mass/ui/MassCommandProvider.d.ts +15 -0
- package/lib/mass/ui/MassCommandProvider.d.ts.map +1 -0
- package/lib/mass/ui/MassCommandProvider.js +14 -0
- package/lib/mass/ui/MassCommandProvider.js.map +1 -0
- package/lib/mass/ui/MassCommandTooltip.d.ts +16 -0
- package/lib/mass/ui/MassCommandTooltip.d.ts.map +1 -0
- package/lib/mass/ui/MassCommandTooltip.js +22 -0
- package/lib/mass/ui/MassCommandTooltip.js.map +1 -0
- package/lib/mass/ui/MassDocumentationDialog.d.ts +18 -0
- package/lib/mass/ui/MassDocumentationDialog.d.ts.map +1 -0
- package/lib/mass/ui/MassDocumentationDialog.js +70 -0
- package/lib/mass/ui/MassDocumentationDialog.js.map +1 -0
- package/lib/mass/ui/MassEditor.d.ts +78 -0
- package/lib/mass/ui/MassEditor.d.ts.map +1 -0
- package/lib/mass/ui/MassEditor.js +42 -0
- package/lib/mass/ui/MassEditor.js.map +1 -0
- package/lib/mass/ui/MassHeader.d.ts +12 -0
- package/lib/mass/ui/MassHeader.d.ts.map +1 -0
- package/lib/mass/ui/MassHeader.js +20 -0
- package/lib/mass/ui/MassHeader.js.map +1 -0
- package/lib/mass/ui/MassLogo.d.ts +21 -0
- package/lib/mass/ui/MassLogo.d.ts.map +1 -0
- package/lib/mass/ui/MassLogo.js +36 -0
- package/lib/mass/ui/MassLogo.js.map +1 -0
- package/lib/mass/ui/MassPointerTracker.d.ts +44 -0
- package/lib/mass/ui/MassPointerTracker.d.ts.map +1 -0
- package/lib/mass/ui/MassPointerTracker.js +29 -0
- package/lib/mass/ui/MassPointerTracker.js.map +1 -0
- package/lib/mass/ui/MassShell.d.ts +29 -0
- package/lib/mass/ui/MassShell.d.ts.map +1 -0
- package/lib/mass/ui/MassShell.js +133 -0
- package/lib/mass/ui/MassShell.js.map +1 -0
- package/lib/mass/ui/MassSidePanel.d.ts +32 -0
- package/lib/mass/ui/MassSidePanel.d.ts.map +1 -0
- package/lib/mass/ui/MassSidePanel.js +44 -0
- package/lib/mass/ui/MassSidePanel.js.map +1 -0
- package/lib/mass/ui/MassStateProvider.d.ts +19 -0
- package/lib/mass/ui/MassStateProvider.d.ts.map +1 -0
- package/lib/mass/ui/MassStateProvider.js +16 -0
- package/lib/mass/ui/MassStateProvider.js.map +1 -0
- package/lib/mass/ui/MassStatusBar.d.ts +15 -0
- package/lib/mass/ui/MassStatusBar.d.ts.map +1 -0
- package/lib/mass/ui/MassStatusBar.js +50 -0
- package/lib/mass/ui/MassStatusBar.js.map +1 -0
- package/lib/mass/ui/MassToolbar.d.ts +24 -0
- package/lib/mass/ui/MassToolbar.d.ts.map +1 -0
- package/lib/mass/ui/MassToolbar.js +36 -0
- package/lib/mass/ui/MassToolbar.js.map +1 -0
- package/lib/mass/ui/MetadataPanel.d.ts +35 -0
- package/lib/mass/ui/MetadataPanel.d.ts.map +1 -0
- package/lib/mass/ui/MetadataPanel.js +100 -0
- package/lib/mass/ui/MetadataPanel.js.map +1 -0
- package/lib/mass/ui/MzDecimalsMenu.d.ts +28 -0
- package/lib/mass/ui/MzDecimalsMenu.d.ts.map +1 -0
- package/lib/mass/ui/MzDecimalsMenu.js +40 -0
- package/lib/mass/ui/MzDecimalsMenu.js.map +1 -0
- package/lib/mass/ui/PeakLabels.d.ts +93 -0
- package/lib/mass/ui/PeakLabels.d.ts.map +1 -0
- package/lib/mass/ui/PeakLabels.js +91 -0
- package/lib/mass/ui/PeakLabels.js.map +1 -0
- package/lib/mass/ui/PeakTable.d.ts +34 -0
- package/lib/mass/ui/PeakTable.d.ts.map +1 -0
- package/lib/mass/ui/PeakTable.js +49 -0
- package/lib/mass/ui/PeakTable.js.map +1 -0
- package/lib/mass/ui/PeaksPanel.d.ts +31 -0
- package/lib/mass/ui/PeaksPanel.d.ts.map +1 -0
- package/lib/mass/ui/PeaksPanel.js +53 -0
- package/lib/mass/ui/PeaksPanel.js.map +1 -0
- package/lib/mass/ui/SpectraPanel.d.ts +17 -0
- package/lib/mass/ui/SpectraPanel.d.ts.map +1 -0
- package/lib/mass/ui/SpectraPanel.js +76 -0
- package/lib/mass/ui/SpectraPanel.js.map +1 -0
- package/lib/mass/ui/SpectrumRow.d.ts +26 -0
- package/lib/mass/ui/SpectrumRow.d.ts.map +1 -0
- package/lib/mass/ui/SpectrumRow.js +141 -0
- package/lib/mass/ui/SpectrumRow.js.map +1 -0
- package/lib/mass/ui/SpectrumTrace.d.ts +46 -0
- package/lib/mass/ui/SpectrumTrace.d.ts.map +1 -0
- package/lib/mass/ui/SpectrumTrace.js +68 -0
- package/lib/mass/ui/SpectrumTrace.js.map +1 -0
- package/lib/mass/ui/index.d.ts +69 -0
- package/lib/mass/ui/index.d.ts.map +1 -0
- package/lib/mass/ui/index.js +42 -0
- package/lib/mass/ui/index.js.map +1 -0
- package/lib/mass/ui/massActions.d.ts +52 -0
- package/lib/mass/ui/massActions.d.ts.map +1 -0
- package/lib/mass/ui/massActions.js +62 -0
- package/lib/mass/ui/massActions.js.map +1 -0
- package/lib/mass/ui/massChartProps.d.ts +128 -0
- package/lib/mass/ui/massChartProps.d.ts.map +1 -0
- package/lib/mass/ui/massChartProps.js +14 -0
- package/lib/mass/ui/massChartProps.js.map +1 -0
- package/lib/mass/ui/massCommandContext.d.ts +36 -0
- package/lib/mass/ui/massCommandContext.d.ts.map +1 -0
- package/lib/mass/ui/massCommandContext.js +45 -0
- package/lib/mass/ui/massCommandContext.js.map +1 -0
- package/lib/mass/ui/massHostPanels.d.ts +48 -0
- package/lib/mass/ui/massHostPanels.d.ts.map +1 -0
- package/lib/mass/ui/massHostPanels.js +41 -0
- package/lib/mass/ui/massHostPanels.js.map +1 -0
- package/lib/mass/ui/massStateContext.d.ts +26 -0
- package/lib/mass/ui/massStateContext.d.ts.map +1 -0
- package/lib/mass/ui/massStateContext.js +37 -0
- package/lib/mass/ui/massStateContext.js.map +1 -0
- package/lib/mass/ui/useIntensityZoom.d.ts +20 -0
- package/lib/mass/ui/useIntensityZoom.d.ts.map +1 -0
- package/lib/mass/ui/useIntensityZoom.js +42 -0
- package/lib/mass/ui/useIntensityZoom.js.map +1 -0
- package/lib/mass/ui/useMassEditor.d.ts +52 -0
- package/lib/mass/ui/useMassEditor.d.ts.map +1 -0
- package/lib/mass/ui/useMassEditor.js +93 -0
- package/lib/mass/ui/useMassEditor.js.map +1 -0
- package/lib/mass/ui/useMassFiles.d.ts +22 -0
- package/lib/mass/ui/useMassFiles.d.ts.map +1 -0
- package/lib/mass/ui/useMassFiles.js +71 -0
- package/lib/mass/ui/useMassFiles.js.map +1 -0
- package/lib/mass/ui/useMassHandle.d.ts +15 -0
- package/lib/mass/ui/useMassHandle.d.ts.map +1 -0
- package/lib/mass/ui/useMassHandle.js +35 -0
- package/lib/mass/ui/useMassHandle.js.map +1 -0
- package/lib/mass/ui/useMassPointer.d.ts +70 -0
- package/lib/mass/ui/useMassPointer.d.ts.map +1 -0
- package/lib/mass/ui/useMassPointer.js +57 -0
- package/lib/mass/ui/useMassPointer.js.map +1 -0
- package/lib/mass/ui/useMassShortcuts.d.ts +21 -0
- package/lib/mass/ui/useMassShortcuts.d.ts.map +1 -0
- package/lib/mass/ui/useMassShortcuts.js +66 -0
- package/lib/mass/ui/useMassShortcuts.js.map +1 -0
- package/lib/mass/ui/useMassSide.d.ts +27 -0
- package/lib/mass/ui/useMassSide.d.ts.map +1 -0
- package/lib/mass/ui/useMassSide.js +45 -0
- package/lib/mass/ui/useMassSide.js.map +1 -0
- package/lib/mass/ui/useMassZoom.d.ts +92 -0
- package/lib/mass/ui/useMassZoom.d.ts.map +1 -0
- package/lib/mass/ui/useMassZoom.js +65 -0
- package/lib/mass/ui/useMassZoom.js.map +1 -0
- package/lib/mass.d.ts +16 -0
- package/lib/mass.d.ts.map +1 -0
- package/lib/mass.js +16 -0
- package/lib/mass.js.map +1 -0
- package/lib/panel/ui/PanelRail.d.ts.map +1 -1
- package/lib/panel/ui/PanelRail.js +6 -1
- package/lib/panel/ui/PanelRail.js.map +1 -1
- package/lib/slides/ui/slideSanitizeSchema.d.ts +3 -2
- package/lib/slides/ui/slideSanitizeSchema.d.ts.map +1 -1
- package/lib/slides/ui/slideSanitizeSchema.js +82 -2
- package/lib/slides/ui/slideSanitizeSchema.js.map +1 -1
- package/package.json +6 -1
- package/src/about/core/providers.ts +7 -0
- package/src/about/ui/AboutProvidedBy.tsx +49 -0
- package/src/chart/ui/useChartPointer.ts +18 -4
- package/src/credits/core/credits.ts +53 -0
- package/src/download/core/drawingMarkup.ts +18 -1
- package/src/download/core/figurePng.ts +21 -8
- package/src/download/core/figureSvg.ts +5 -2
- package/src/download/core/figureTarget.ts +28 -3
- package/src/download/core/svgBounds.ts +21 -0
- package/src/download/core/svgToPng.ts +3 -4
- package/src/format/core/relativeTime.ts +29 -7
- package/src/host/core/connectHost.ts +77 -120
- package/src/host/core/hostOutputs.ts +197 -0
- package/src/host/core/index.ts +13 -7
- package/src/host/core/irKinds.ts +92 -0
- package/src/host/core/kinds.ts +16 -6
- package/src/host/core/protocol.ts +50 -8
- package/src/host/core/selectInputs.ts +145 -0
- package/src/host/testing/sciPeaks.ts +140 -0
- package/src/host/testing/standInHost.ts +30 -5
- package/src/host/ui/useHostConnection.ts +17 -8
- package/src/host-testing.ts +4 -0
- package/src/ir/core/handPicking.ts +154 -0
- package/src/ir/core/index.ts +14 -0
- package/src/ir/core/irBandState.ts +155 -0
- package/src/ir/core/irCommands.ts +7 -0
- package/src/ir/core/irPeaks.ts +79 -0
- package/src/ir/core/irReducer.ts +27 -34
- package/src/ir/core/irSpectrum.ts +16 -0
- package/src/ir/core/irState.ts +15 -8
- package/src/ir/core/pickBands.ts +46 -39
- package/src/ir/core/ramanBands.ts +2 -2
- package/src/ir/core/spectrumBands.ts +113 -0
- package/src/ir/ui/BandRow.tsx +20 -2
- package/src/ir/ui/BandsPanel.tsx +46 -88
- package/src/ir/ui/BandsToolbar.tsx +152 -0
- package/src/ir/ui/IrCanvas.tsx +22 -11
- package/src/ir/ui/IrChart.tsx +10 -1
- package/src/ir/ui/IrDocumentationDialog.tsx +7 -0
- package/src/ir/ui/IrEditor.tsx +4 -2
- package/src/ir/ui/IrShell.tsx +5 -0
- package/src/ir/ui/IrStatusBar.tsx +4 -1
- package/src/ir/ui/IrToolbar.tsx +14 -5
- package/src/ir/ui/VibrationalEditor.tsx +2 -1
- package/src/ir/ui/irActions.ts +11 -0
- package/src/ir/ui/irChartProps.ts +4 -1
- package/src/ir/ui/useIrEditor.ts +21 -21
- package/src/locales/de.json +63 -0
- package/src/locales/en.json +63 -0
- package/src/locales/es.json +63 -0
- package/src/locales/fr.json +63 -0
- package/src/locales/it.json +63 -0
- package/src/mass/core/analyseSpectrum.ts +191 -0
- package/src/mass/core/ascendingTrace.ts +62 -0
- package/src/mass/core/centroidPeaks.ts +114 -0
- package/src/mass/core/detectMassFormat.ts +113 -0
- package/src/mass/core/downloadSpectra.ts +52 -0
- package/src/mass/core/fromJcamp.ts +151 -0
- package/src/mass/core/fromText.ts +58 -0
- package/src/mass/core/index.ts +194 -0
- package/src/mass/core/jcampTechnique.ts +87 -0
- package/src/mass/core/labelStackBox.ts +75 -0
- package/src/mass/core/labelledPeaks.ts +135 -0
- package/src/mass/core/loadMassSpectra.ts +86 -0
- package/src/mass/core/loadedMassSpectrum.ts +43 -0
- package/src/mass/core/massCommands.ts +156 -0
- package/src/mass/core/massDomain.ts +229 -0
- package/src/mass/core/massEditorApi.ts +68 -0
- package/src/mass/core/massFormat.ts +187 -0
- package/src/mass/core/massMeta.ts +239 -0
- package/src/mass/core/massReducer.ts +232 -0
- package/src/mass/core/massResolution.ts +169 -0
- package/src/mass/core/massSidePanels.ts +27 -0
- package/src/mass/core/massSpectrum.ts +220 -0
- package/src/mass/core/massState.ts +206 -0
- package/src/mass/core/massStateEdits.ts +104 -0
- package/src/mass/core/massSummary.ts +213 -0
- package/src/mass/core/mzDecimalsSetting.ts +52 -0
- package/src/mass/core/nearestPeak.ts +130 -0
- package/src/mass/core/peakLabelLines.ts +112 -0
- package/src/mass/core/peakLabelPlan.ts +246 -0
- package/src/mass/core/peakTable.ts +82 -0
- package/src/mass/core/resolutionOf.ts +100 -0
- package/src/mass/core/scanFilter.ts +119 -0
- package/src/mass/core/spectrumJcamp.ts +186 -0
- package/src/mass/core/toMassSpectrum.ts +126 -0
- package/src/mass/core/traceIcon.ts +105 -0
- package/src/mass/core/writtenResolution.ts +81 -0
- package/src/mass/ui/MassAboutDialog.tsx +89 -0
- package/src/mass/ui/MassCanvas.tsx +170 -0
- package/src/mass/ui/MassChart.tsx +266 -0
- package/src/mass/ui/MassCommandProvider.tsx +34 -0
- package/src/mass/ui/MassCommandTooltip.tsx +36 -0
- package/src/mass/ui/MassDocumentationDialog.tsx +136 -0
- package/src/mass/ui/MassEditor.tsx +130 -0
- package/src/mass/ui/MassHeader.tsx +38 -0
- package/src/mass/ui/MassLogo.tsx +84 -0
- package/src/mass/ui/MassPointerTracker.tsx +72 -0
- package/src/mass/ui/MassShell.tsx +237 -0
- package/src/mass/ui/MassSidePanel.tsx +107 -0
- package/src/mass/ui/MassStateProvider.tsx +32 -0
- package/src/mass/ui/MassStatusBar.tsx +108 -0
- package/src/mass/ui/MassToolbar.tsx +120 -0
- package/src/mass/ui/MetadataPanel.tsx +201 -0
- package/src/mass/ui/MzDecimalsMenu.tsx +86 -0
- package/src/mass/ui/PeakLabels.tsx +242 -0
- package/src/mass/ui/PeakTable.tsx +199 -0
- package/src/mass/ui/PeaksPanel.tsx +182 -0
- package/src/mass/ui/SpectraPanel.tsx +153 -0
- package/src/mass/ui/SpectrumRow.tsx +246 -0
- package/src/mass/ui/SpectrumTrace.tsx +119 -0
- package/src/mass/ui/index.ts +69 -0
- package/src/mass/ui/massActions.ts +109 -0
- package/src/mass/ui/massChartProps.ts +130 -0
- package/src/mass/ui/massCommandContext.tsx +65 -0
- package/src/mass/ui/massHostPanels.ts +71 -0
- package/src/mass/ui/massStateContext.ts +48 -0
- package/src/mass/ui/useIntensityZoom.ts +55 -0
- package/src/mass/ui/useMassEditor.ts +156 -0
- package/src/mass/ui/useMassFiles.ts +91 -0
- package/src/mass/ui/useMassHandle.ts +58 -0
- package/src/mass/ui/useMassPointer.ts +120 -0
- package/src/mass/ui/useMassShortcuts.ts +85 -0
- package/src/mass/ui/useMassSide.ts +63 -0
- package/src/mass/ui/useMassZoom.ts +157 -0
- package/src/mass.ts +16 -0
- package/src/panel/ui/PanelRail.tsx +5 -1
- package/src/slides/ui/slideSanitizeSchema.ts +86 -2
- package/styles/chrome.css +7 -0
- package/styles/slides.css +47 -0
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The bands of an infrared spectrum as a notebook writes them, and back: the
|
|
3
|
+
* peaks of the host protocol's `spectra.ir.jdx` and `spectra.ir.peaks`.
|
|
4
|
+
*
|
|
5
|
+
* The two differ in two ways only: a notebook's transmittance is a fraction
|
|
6
|
+
* where the viewer holds a percentage, and it calls a band's strength `kind`.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import { xFindClosestIndex } from 'ml-spectra-processing';
|
|
10
|
+
|
|
11
|
+
import type { IrPeakValue } from '../../host/core/irKinds.ts';
|
|
12
|
+
|
|
13
|
+
import { bandAtIndex } from './handPicking.ts';
|
|
14
|
+
import type { IrBand, IrBandStrength } from './irBand.ts';
|
|
15
|
+
import type { IrSpectrum } from './irSpectrum.ts';
|
|
16
|
+
import { orderedBands } from './spectrumBands.ts';
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* The bands a notebook handed over with a spectrum.
|
|
20
|
+
*
|
|
21
|
+
* Each stays where the notebook put it, with the values it gave; a value it
|
|
22
|
+
* left out is read off the spectrum at the nearest sample, and a strength
|
|
23
|
+
* letter that is not one of `w`, `m` and `S` is worked out again.
|
|
24
|
+
* @param spectrum - The spectrum they were picked on.
|
|
25
|
+
* @param peaks - The peaks, in any order.
|
|
26
|
+
* @returns The bands, ascending, one per wavenumber.
|
|
27
|
+
*/
|
|
28
|
+
export function bandsFromPeaks(
|
|
29
|
+
spectrum: IrSpectrum,
|
|
30
|
+
peaks: readonly IrPeakValue[],
|
|
31
|
+
): IrBand[] {
|
|
32
|
+
const bands: IrBand[] = [];
|
|
33
|
+
for (const peak of peaks) {
|
|
34
|
+
const { wavenumber, absorbance, transmittance, kind } = peak;
|
|
35
|
+
if (!Number.isFinite(wavenumber)) continue;
|
|
36
|
+
const read = bandAtIndex(
|
|
37
|
+
spectrum,
|
|
38
|
+
xFindClosestIndex(spectrum.wavenumber, wavenumber),
|
|
39
|
+
);
|
|
40
|
+
if (read === null) continue;
|
|
41
|
+
bands.push({
|
|
42
|
+
...read,
|
|
43
|
+
wavenumber,
|
|
44
|
+
...(absorbance === undefined ? {} : { absorbance }),
|
|
45
|
+
...(transmittance === undefined
|
|
46
|
+
? {}
|
|
47
|
+
: { transmittance: transmittance * 100 }),
|
|
48
|
+
strength: isStrength(kind) ? kind : read.strength,
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
return orderedBands(spectrum.id, bands);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Bands as a notebook keeps them.
|
|
56
|
+
* @param bands - The bands, as the viewer holds them.
|
|
57
|
+
* @returns The peaks, in the same order.
|
|
58
|
+
*/
|
|
59
|
+
export function peaksFromBands(bands: readonly IrBand[]): IrPeakValue[] {
|
|
60
|
+
const peaks: IrPeakValue[] = [];
|
|
61
|
+
for (const band of bands) {
|
|
62
|
+
const { wavenumber, absorbance, transmittance, strength } = band;
|
|
63
|
+
peaks.push({
|
|
64
|
+
wavenumber,
|
|
65
|
+
...(absorbance === undefined ? {} : { absorbance }),
|
|
66
|
+
...(transmittance === undefined
|
|
67
|
+
? {}
|
|
68
|
+
: { transmittance: transmittance / 100 }),
|
|
69
|
+
kind: strength,
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
return peaks;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
function isStrength(kind: string | undefined): kind is IrBandStrength {
|
|
76
|
+
return kind !== undefined && STRENGTHS.includes(kind);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
const STRENGTHS: readonly string[] = ['w', 'm', 'S'] satisfies IrBandStrength[];
|
package/src/ir/core/irReducer.ts
CHANGED
|
@@ -13,10 +13,19 @@
|
|
|
13
13
|
* closed.
|
|
14
14
|
*/
|
|
15
15
|
|
|
16
|
+
import type { IrBand } from './irBand.ts';
|
|
17
|
+
import {
|
|
18
|
+
arriving,
|
|
19
|
+
changeSettings,
|
|
20
|
+
mapSpectrum,
|
|
21
|
+
resetSpectrumBands,
|
|
22
|
+
restoreState,
|
|
23
|
+
setSpectrumBands,
|
|
24
|
+
} from './irBandState.ts';
|
|
16
25
|
import type { IrPanelId } from './irSidePanels.ts';
|
|
17
26
|
import type { IrDomain, IrSpectrum } from './irSpectrum.ts';
|
|
18
27
|
import type { IrSettings, IrState, IrTool, PartialIrState } from './irState.ts';
|
|
19
|
-
import { isIrWindow
|
|
28
|
+
import { isIrWindow } from './irState.ts';
|
|
20
29
|
|
|
21
30
|
/** Everything that can be asked of the viewer. */
|
|
22
31
|
export type IrAction =
|
|
@@ -26,6 +35,8 @@ export type IrAction =
|
|
|
26
35
|
| { type: 'renameSpectrum'; id: string; name: string }
|
|
27
36
|
| { type: 'setSpectrumColor'; id: string; color: string }
|
|
28
37
|
| { type: 'setSpectrumVisible'; id: string; visible: boolean }
|
|
38
|
+
| { type: 'setBands'; id: string; bands: IrBand[] }
|
|
39
|
+
| { type: 'resetBands'; id: string }
|
|
29
40
|
| { type: 'selectSpectrum'; id: string | null }
|
|
30
41
|
| { type: 'setDomain'; domain: IrDomain }
|
|
31
42
|
| { type: 'resetDomain' }
|
|
@@ -46,7 +57,10 @@ export function irReducer(state: IrState, action: IrAction): IrState {
|
|
|
46
57
|
switch (action.type) {
|
|
47
58
|
case 'addSpectra': {
|
|
48
59
|
if (action.spectra.length === 0) return state;
|
|
49
|
-
const spectra = [
|
|
60
|
+
const spectra = [
|
|
61
|
+
...state.data.spectra,
|
|
62
|
+
...arriving(state, action.spectra),
|
|
63
|
+
];
|
|
50
64
|
return {
|
|
51
65
|
...state,
|
|
52
66
|
data: { spectra },
|
|
@@ -65,7 +79,7 @@ export function irReducer(state: IrState, action: IrAction): IrState {
|
|
|
65
79
|
case 'setSpectra': {
|
|
66
80
|
return {
|
|
67
81
|
...state,
|
|
68
|
-
data: { spectra:
|
|
82
|
+
data: { spectra: arriving(state, action.spectra) },
|
|
69
83
|
view: {
|
|
70
84
|
...state.view,
|
|
71
85
|
selectedId: action.spectra[0]?.id ?? null,
|
|
@@ -122,6 +136,14 @@ export function irReducer(state: IrState, action: IrAction): IrState {
|
|
|
122
136
|
);
|
|
123
137
|
}
|
|
124
138
|
|
|
139
|
+
case 'setBands': {
|
|
140
|
+
return setSpectrumBands(state, action.id, action.bands);
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
case 'resetBands': {
|
|
144
|
+
return resetSpectrumBands(state, action.id);
|
|
145
|
+
}
|
|
146
|
+
|
|
125
147
|
case 'selectSpectrum': {
|
|
126
148
|
if (state.view.selectedId === action.id) return state;
|
|
127
149
|
return { ...state, view: { ...state.view, selectedId: action.id } };
|
|
@@ -162,17 +184,11 @@ export function irReducer(state: IrState, action: IrAction): IrState {
|
|
|
162
184
|
}
|
|
163
185
|
|
|
164
186
|
case 'setSettings': {
|
|
165
|
-
|
|
166
|
-
return { ...state, settings };
|
|
187
|
+
return changeSettings(state, action.settings);
|
|
167
188
|
}
|
|
168
189
|
|
|
169
190
|
case 'loadState': {
|
|
170
|
-
|
|
171
|
-
return {
|
|
172
|
-
data: data === undefined ? state.data : { spectra: [...data.spectra] },
|
|
173
|
-
view: { ...state.view, ...view },
|
|
174
|
-
settings: mergeIrSettings(state.settings, settings),
|
|
175
|
-
};
|
|
191
|
+
return restoreState(state, action.state);
|
|
176
192
|
}
|
|
177
193
|
|
|
178
194
|
case 'clear': {
|
|
@@ -191,29 +207,6 @@ export function irReducer(state: IrState, action: IrAction): IrState {
|
|
|
191
207
|
}
|
|
192
208
|
}
|
|
193
209
|
|
|
194
|
-
/**
|
|
195
|
-
* Change one spectrum, leaving the state alone when it did not change.
|
|
196
|
-
* @param state - The state in force.
|
|
197
|
-
* @param id - Which spectrum.
|
|
198
|
-
* @param change - What to make of it; return it unchanged for no change.
|
|
199
|
-
* @returns The new state, or the old one.
|
|
200
|
-
*/
|
|
201
|
-
function mapSpectrum(
|
|
202
|
-
state: IrState,
|
|
203
|
-
id: string,
|
|
204
|
-
change: (spectrum: IrSpectrum) => IrSpectrum,
|
|
205
|
-
): IrState {
|
|
206
|
-
let changed = false;
|
|
207
|
-
const spectra = state.data.spectra.map((spectrum) => {
|
|
208
|
-
if (spectrum.id !== id) return spectrum;
|
|
209
|
-
const next = change(spectrum);
|
|
210
|
-
if (next !== spectrum) changed = true;
|
|
211
|
-
return next;
|
|
212
|
-
});
|
|
213
|
-
if (!changed) return state;
|
|
214
|
-
return { ...state, data: { spectra }, view: { ...state.view, error: null } };
|
|
215
|
-
}
|
|
216
|
-
|
|
217
210
|
/**
|
|
218
211
|
* Refuse an action, saying why.
|
|
219
212
|
* @param state - The state in force.
|
|
@@ -25,6 +25,8 @@ import type { DataXY } from 'cheminfo-types';
|
|
|
25
25
|
|
|
26
26
|
import type { ChartDomain } from '../../chart/core/chartDomain.ts';
|
|
27
27
|
|
|
28
|
+
import type { IrBand } from './irBand.ts';
|
|
29
|
+
|
|
28
30
|
/**
|
|
29
31
|
* One trace of a measurement: wavenumber against whichever value axis is drawn.
|
|
30
32
|
*
|
|
@@ -150,6 +152,20 @@ export interface IrSpectrum {
|
|
|
150
152
|
* @default false
|
|
151
153
|
*/
|
|
152
154
|
excludeFromDomain?: boolean;
|
|
155
|
+
/**
|
|
156
|
+
* The bands picked on it, ascending by wavenumber. The viewer picks them
|
|
157
|
+
* when a spectrum arrives without any; a host may hand them over with it, as
|
|
158
|
+
* a notebook that keeps them does.
|
|
159
|
+
* @default undefined
|
|
160
|
+
*/
|
|
161
|
+
bands?: IrBand[];
|
|
162
|
+
/**
|
|
163
|
+
* Whether `bands` were picked by hand — edited in the viewer, or handed over
|
|
164
|
+
* — rather than found with the picking settings, which re-pick only a list
|
|
165
|
+
* that was not.
|
|
166
|
+
* @default false
|
|
167
|
+
*/
|
|
168
|
+
bandsByHand?: boolean;
|
|
153
169
|
}
|
|
154
170
|
|
|
155
171
|
/**
|
package/src/ir/core/irState.ts
CHANGED
|
@@ -7,10 +7,10 @@
|
|
|
7
7
|
* `settings` is the workspace, which is how every spectrum is drawn whichever
|
|
8
8
|
* ones happen to be open.
|
|
9
9
|
*
|
|
10
|
-
* The bands are
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
* a
|
|
10
|
+
* The bands are in `data`, each spectrum carrying its own: picked when it
|
|
11
|
+
* arrives, picked again by the reducer when the settings change while they were
|
|
12
|
+
* found automatically, and left alone once picked by hand. That is what lets a
|
|
13
|
+
* band be added or taken away, and a list be handed to a host and back.
|
|
14
14
|
*/
|
|
15
15
|
|
|
16
16
|
import type { IrPanelId, IrSidePanelId } from './irSidePanels.ts';
|
|
@@ -18,6 +18,7 @@ import type { IrDomain, IrMode, IrSpectrum } from './irSpectrum.ts';
|
|
|
18
18
|
import type { IrTechnique } from './irTechnique.ts';
|
|
19
19
|
import { defaultIrMode, irModeFor, offersIrMode } from './irTechnique.ts';
|
|
20
20
|
import type { PickBandsOptions } from './pickBands.ts';
|
|
21
|
+
import { withBands } from './spectrumBands.ts';
|
|
21
22
|
|
|
22
23
|
/** The document: what a file holds. */
|
|
23
24
|
export interface IrData {
|
|
@@ -25,8 +26,11 @@ export interface IrData {
|
|
|
25
26
|
spectra: IrSpectrum[];
|
|
26
27
|
}
|
|
27
28
|
|
|
28
|
-
/**
|
|
29
|
-
|
|
29
|
+
/**
|
|
30
|
+
* What a drag across the chart is for while it is chosen, and for `pick`, what
|
|
31
|
+
* a click is: a band added where it lands, or taken away.
|
|
32
|
+
*/
|
|
33
|
+
export type IrTool = 'read' | 'box' | 'pick';
|
|
30
34
|
|
|
31
35
|
/** Where you are in the viewer. */
|
|
32
36
|
export interface IrView {
|
|
@@ -165,8 +169,11 @@ export function createIrState(options: CreateIrStateOptions = {}): IrState {
|
|
|
165
169
|
technique,
|
|
166
170
|
mode: defaultIrMode(technique),
|
|
167
171
|
};
|
|
172
|
+
const merged = mergeIrSettings(opened, settings);
|
|
168
173
|
return {
|
|
169
|
-
data: {
|
|
174
|
+
data: {
|
|
175
|
+
spectra: spectra.map((spectrum) => withBands(spectrum, merged.picking)),
|
|
176
|
+
},
|
|
170
177
|
view: {
|
|
171
178
|
selectedId: spectra[0]?.id ?? null,
|
|
172
179
|
domain: null,
|
|
@@ -174,7 +181,7 @@ export function createIrState(options: CreateIrStateOptions = {}): IrState {
|
|
|
174
181
|
openPanelIds: [...(panelIds ?? DEFAULT_SIDE_PANELS)],
|
|
175
182
|
error: null,
|
|
176
183
|
},
|
|
177
|
-
settings:
|
|
184
|
+
settings: merged,
|
|
178
185
|
};
|
|
179
186
|
}
|
|
180
187
|
|
package/src/ir/core/pickBands.ts
CHANGED
|
@@ -21,6 +21,13 @@ import type { IrSpectrum } from './irSpectrum.ts';
|
|
|
21
21
|
import type { PeakPickingOptions } from './ramanBands.ts';
|
|
22
22
|
import { ramanBands } from './ramanBands.ts';
|
|
23
23
|
|
|
24
|
+
/**
|
|
25
|
+
* How many points the picker smooths over before it looks for a band. `ml-gsd`
|
|
26
|
+
* refuses a trace shorter than that — a few points typed in by hand — rather
|
|
27
|
+
* than finding no band in it.
|
|
28
|
+
*/
|
|
29
|
+
const SMOOTHING_WINDOW = 9;
|
|
30
|
+
|
|
24
31
|
/** How the bands are picked. */
|
|
25
32
|
export interface PickBandsOptions {
|
|
26
33
|
/**
|
|
@@ -88,7 +95,7 @@ export function pickBands(
|
|
|
88
95
|
minPeakWidth = 4,
|
|
89
96
|
limit,
|
|
90
97
|
} = options;
|
|
91
|
-
if (spectrum.wavenumber.length <
|
|
98
|
+
if (spectrum.wavenumber.length < SMOOTHING_WINDOW) return [];
|
|
92
99
|
|
|
93
100
|
const picking: PeakPickingOptions = {
|
|
94
101
|
minMaxRatio: minRelativeHeight,
|
|
@@ -109,43 +116,6 @@ export function pickBands(
|
|
|
109
116
|
return kept.toSorted(byAscendingWavenumber);
|
|
110
117
|
}
|
|
111
118
|
|
|
112
|
-
/**
|
|
113
|
-
* The bands of an infrared spectrum, picked on its absorbance.
|
|
114
|
-
* @param spectrum - The spectrum to pick from.
|
|
115
|
-
* @param picking - Where to pick, and how finely.
|
|
116
|
-
* @returns The bands, in the order they were found; none when the spectrum
|
|
117
|
-
* carries only one of its two axes, since the strength is read off the other.
|
|
118
|
-
*/
|
|
119
|
-
function infraredBands(
|
|
120
|
-
spectrum: IrSpectrum,
|
|
121
|
-
picking: PeakPickingOptions,
|
|
122
|
-
): IrBand[] {
|
|
123
|
-
const { id, wavenumber, absorbance, transmittance } = spectrum;
|
|
124
|
-
if (absorbance === undefined || transmittance === undefined) return [];
|
|
125
|
-
|
|
126
|
-
const picked = autoPeakPicking(
|
|
127
|
-
measurementOf(wavenumber, absorbance, transmittance),
|
|
128
|
-
// Absorbance, because a band is a maximum there and a minimum in the other.
|
|
129
|
-
{ yVariable: 'a', ...picking },
|
|
130
|
-
);
|
|
131
|
-
|
|
132
|
-
const bands: IrBand[] = [];
|
|
133
|
-
for (const peak of picked) {
|
|
134
|
-
if (!Number.isFinite(peak.wavenumber)) continue;
|
|
135
|
-
bands.push({
|
|
136
|
-
spectrumId: id,
|
|
137
|
-
wavenumber: peak.wavenumber,
|
|
138
|
-
absorbance: peak.absorbance,
|
|
139
|
-
// `ConvertedPeak.transmittance` is a fraction where the spectrum's own
|
|
140
|
-
// transmittance is a percentage; brought onto the one scale here so that
|
|
141
|
-
// nothing downstream has to remember which of the two it is holding.
|
|
142
|
-
transmittance: peak.transmittance * 100,
|
|
143
|
-
strength: peak.kind as IrBandStrength,
|
|
144
|
-
});
|
|
145
|
-
}
|
|
146
|
-
return bands;
|
|
147
|
-
}
|
|
148
|
-
|
|
149
119
|
/**
|
|
150
120
|
* The spectrum as `ir-spectrum` wants it.
|
|
151
121
|
*
|
|
@@ -158,7 +128,7 @@ function infraredBands(
|
|
|
158
128
|
* @param transmittance - Percent transmittance at each.
|
|
159
129
|
* @returns A measurement carrying all three variables.
|
|
160
130
|
*/
|
|
161
|
-
function
|
|
131
|
+
export function infraredMeasurement(
|
|
162
132
|
wavenumber: Float64Array,
|
|
163
133
|
absorbance: Float64Array,
|
|
164
134
|
transmittance: Float64Array,
|
|
@@ -195,6 +165,43 @@ function measurementOf(
|
|
|
195
165
|
};
|
|
196
166
|
}
|
|
197
167
|
|
|
168
|
+
/**
|
|
169
|
+
* The bands of an infrared spectrum, picked on its absorbance.
|
|
170
|
+
* @param spectrum - The spectrum to pick from.
|
|
171
|
+
* @param picking - Where to pick, and how finely.
|
|
172
|
+
* @returns The bands, in the order they were found; none when the spectrum
|
|
173
|
+
* carries only one of its two axes, since the strength is read off the other.
|
|
174
|
+
*/
|
|
175
|
+
function infraredBands(
|
|
176
|
+
spectrum: IrSpectrum,
|
|
177
|
+
picking: PeakPickingOptions,
|
|
178
|
+
): IrBand[] {
|
|
179
|
+
const { id, wavenumber, absorbance, transmittance } = spectrum;
|
|
180
|
+
if (absorbance === undefined || transmittance === undefined) return [];
|
|
181
|
+
|
|
182
|
+
const picked = autoPeakPicking(
|
|
183
|
+
infraredMeasurement(wavenumber, absorbance, transmittance),
|
|
184
|
+
// Absorbance, because a band is a maximum there and a minimum in the other.
|
|
185
|
+
{ yVariable: 'a', ...picking },
|
|
186
|
+
);
|
|
187
|
+
|
|
188
|
+
const bands: IrBand[] = [];
|
|
189
|
+
for (const peak of picked) {
|
|
190
|
+
if (!Number.isFinite(peak.wavenumber)) continue;
|
|
191
|
+
bands.push({
|
|
192
|
+
spectrumId: id,
|
|
193
|
+
wavenumber: peak.wavenumber,
|
|
194
|
+
absorbance: peak.absorbance,
|
|
195
|
+
// `ConvertedPeak.transmittance` is a fraction where the spectrum's own
|
|
196
|
+
// transmittance is a percentage; brought onto the one scale here so that
|
|
197
|
+
// nothing downstream has to remember which of the two it is holding.
|
|
198
|
+
transmittance: peak.transmittance * 100,
|
|
199
|
+
strength: peak.kind as IrBandStrength,
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
return bands;
|
|
203
|
+
}
|
|
204
|
+
|
|
198
205
|
/**
|
|
199
206
|
* Order two bands by height, tallest first.
|
|
200
207
|
* @param first - One band.
|
|
@@ -56,7 +56,7 @@ export function ramanBands(
|
|
|
56
56
|
spectrumId: id,
|
|
57
57
|
wavenumber: peak.wavenumber,
|
|
58
58
|
intensity: value,
|
|
59
|
-
strength:
|
|
59
|
+
strength: intensityStrength(value, min, max),
|
|
60
60
|
});
|
|
61
61
|
}
|
|
62
62
|
return bands;
|
|
@@ -69,7 +69,7 @@ export function ramanBands(
|
|
|
69
69
|
* @param highest - Its highest.
|
|
70
70
|
* @returns The letter a correlation table would use.
|
|
71
71
|
*/
|
|
72
|
-
function
|
|
72
|
+
export function intensityStrength(
|
|
73
73
|
value: number,
|
|
74
74
|
lowest: number,
|
|
75
75
|
highest: number,
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The bands a spectrum carries.
|
|
3
|
+
*
|
|
4
|
+
* A spectrum arriving without bands is picked once, with the picking settings
|
|
5
|
+
* in force, and from then on its bands are part of it: they travel to a host
|
|
6
|
+
* with it, and a host's own reach the chart. Bands found automatically follow
|
|
7
|
+
* the settings — moving the threshold picks them again — while bands picked by
|
|
8
|
+
* hand, or handed over, are left as they are.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import type { IrBand } from './irBand.ts';
|
|
12
|
+
import type { IrSpectrum } from './irSpectrum.ts';
|
|
13
|
+
import type { PickBandsOptions } from './pickBands.ts';
|
|
14
|
+
import { pickBands } from './pickBands.ts';
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* A spectrum carrying its bands: picked now when it has none, its own kept and
|
|
18
|
+
* put in order otherwise.
|
|
19
|
+
* @param spectrum - The spectrum, as it arrived.
|
|
20
|
+
* @param picking - How to pick it, if it has to be.
|
|
21
|
+
* @returns The spectrum with its bands; the same object when it had them, in
|
|
22
|
+
* order.
|
|
23
|
+
*/
|
|
24
|
+
export function withBands(
|
|
25
|
+
spectrum: IrSpectrum,
|
|
26
|
+
picking: PickBandsOptions,
|
|
27
|
+
): IrSpectrum {
|
|
28
|
+
const { id, bands } = spectrum;
|
|
29
|
+
if (bands === undefined) {
|
|
30
|
+
return {
|
|
31
|
+
...spectrum,
|
|
32
|
+
bands: pickBands(spectrum, picking),
|
|
33
|
+
bandsByHand: false,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
const ordered = orderedBands(id, bands);
|
|
37
|
+
return ordered === bands ? spectrum : { ...spectrum, bands: ordered };
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* A spectrum's bands picked again with other settings, unless they were picked
|
|
42
|
+
* by hand.
|
|
43
|
+
* @param spectrum - The spectrum.
|
|
44
|
+
* @param picking - The settings now in force.
|
|
45
|
+
* @returns The spectrum re-picked, or the same object when its bands are its
|
|
46
|
+
* own.
|
|
47
|
+
*/
|
|
48
|
+
export function repickBands(
|
|
49
|
+
spectrum: IrSpectrum,
|
|
50
|
+
picking: PickBandsOptions,
|
|
51
|
+
): IrSpectrum {
|
|
52
|
+
if (spectrum.bandsByHand) return spectrum;
|
|
53
|
+
return {
|
|
54
|
+
...spectrum,
|
|
55
|
+
bands: pickBands(spectrum, picking),
|
|
56
|
+
bandsByHand: false,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Bands as a spectrum holds them: ascending, one per wavenumber, each naming
|
|
62
|
+
* the spectrum, and none at a wavenumber that is not a number.
|
|
63
|
+
* @param spectrumId - The spectrum they belong to.
|
|
64
|
+
* @param bands - The bands, in any order.
|
|
65
|
+
* @returns The bands in order; the same array when they already were.
|
|
66
|
+
*/
|
|
67
|
+
export function orderedBands(spectrumId: string, bands: IrBand[]): IrBand[] {
|
|
68
|
+
if (isOrdered(spectrumId, bands)) return bands;
|
|
69
|
+
const kept: IrBand[] = [];
|
|
70
|
+
for (const band of bands.toSorted(byWavenumber)) {
|
|
71
|
+
if (!Number.isFinite(band.wavenumber)) continue;
|
|
72
|
+
if (kept.at(-1)?.wavenumber === band.wavenumber) continue;
|
|
73
|
+
kept.push(band.spectrumId === spectrumId ? band : { ...band, spectrumId });
|
|
74
|
+
}
|
|
75
|
+
return kept;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Whether two picking settings pick the same bands.
|
|
80
|
+
* @param first - One.
|
|
81
|
+
* @param second - The other.
|
|
82
|
+
* @returns Whether every option agrees.
|
|
83
|
+
*/
|
|
84
|
+
export function samePicking(
|
|
85
|
+
first: PickBandsOptions,
|
|
86
|
+
second: PickBandsOptions,
|
|
87
|
+
): boolean {
|
|
88
|
+
return (
|
|
89
|
+
first === second ||
|
|
90
|
+
(first.from === second.from &&
|
|
91
|
+
first.to === second.to &&
|
|
92
|
+
first.minRelativeHeight === second.minRelativeHeight &&
|
|
93
|
+
first.minPeakWidth === second.minPeakWidth &&
|
|
94
|
+
first.limit === second.limit)
|
|
95
|
+
);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
function isOrdered(spectrumId: string, bands: readonly IrBand[]): boolean {
|
|
99
|
+
let previous = Number.NEGATIVE_INFINITY;
|
|
100
|
+
for (const band of bands) {
|
|
101
|
+
const { wavenumber } = band;
|
|
102
|
+
if (band.spectrumId !== spectrumId || !Number.isFinite(wavenumber)) {
|
|
103
|
+
return false;
|
|
104
|
+
}
|
|
105
|
+
if (wavenumber <= previous) return false;
|
|
106
|
+
previous = wavenumber;
|
|
107
|
+
}
|
|
108
|
+
return true;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
function byWavenumber(first: IrBand, second: IrBand): number {
|
|
112
|
+
return first.wavenumber - second.wavenumber;
|
|
113
|
+
}
|
package/src/ir/ui/BandRow.tsx
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Icon } from '@blueprintjs/core';
|
|
1
|
+
import { Button, Icon } from '@blueprintjs/core';
|
|
2
2
|
|
|
3
3
|
import {
|
|
4
4
|
panelCellStyle,
|
|
@@ -24,6 +24,11 @@ export interface BandRowProps {
|
|
|
24
24
|
* @default undefined
|
|
25
25
|
*/
|
|
26
26
|
onHighlight?: (band: IrBand | null) => void;
|
|
27
|
+
/**
|
|
28
|
+
* Takes the band away; the row ends with the button that calls it.
|
|
29
|
+
* @default undefined — no button
|
|
30
|
+
*/
|
|
31
|
+
onRemove?: (band: IrBand) => void;
|
|
27
32
|
}
|
|
28
33
|
|
|
29
34
|
/**
|
|
@@ -37,7 +42,7 @@ export interface BandRowProps {
|
|
|
37
42
|
* @returns The row.
|
|
38
43
|
*/
|
|
39
44
|
export function BandRow(props: BandRowProps) {
|
|
40
|
-
const { entry, mode, assignments, lit, onHighlight } = props;
|
|
45
|
+
const { entry, mode, assignments, lit, onHighlight, onRemove } = props;
|
|
41
46
|
const { band } = entry;
|
|
42
47
|
|
|
43
48
|
return (
|
|
@@ -54,6 +59,17 @@ export function BandRow(props: BandRowProps) {
|
|
|
54
59
|
{formatIrValue(bandValue(band, mode) ?? Number.NaN, mode)}
|
|
55
60
|
</td>
|
|
56
61
|
{assignments ? <CandidatesCell entry={entry} /> : null}
|
|
62
|
+
{onRemove === undefined ? null : (
|
|
63
|
+
<td style={removeCellStyle}>
|
|
64
|
+
<Button
|
|
65
|
+
variant="minimal"
|
|
66
|
+
size="small"
|
|
67
|
+
icon="small-cross"
|
|
68
|
+
aria-label={`Take away the band at ${formatWavenumber(band.wavenumber)} cm⁻¹`}
|
|
69
|
+
onClick={() => onRemove(band)}
|
|
70
|
+
/>
|
|
71
|
+
</td>
|
|
72
|
+
)}
|
|
57
73
|
</tr>
|
|
58
74
|
);
|
|
59
75
|
}
|
|
@@ -105,3 +121,5 @@ const STRENGTH_TITLES = {
|
|
|
105
121
|
} as const;
|
|
106
122
|
|
|
107
123
|
const litRowStyle = { background: '#fff3e0' } as const;
|
|
124
|
+
|
|
125
|
+
const removeCellStyle = { ...panelCellStyle, padding: 0, width: 1 } as const;
|