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,220 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What a mass spectrum is once it has been read, whatever it was read from.
|
|
3
|
+
*
|
|
4
|
+
* A file gives one or more acquisitions; each becomes one `MassSpectrum` with
|
|
5
|
+
* two traces of the same measurement — the continuous `profile` as the
|
|
6
|
+
* instrument recorded it, and the `centroid` the peak picking reduced it to.
|
|
7
|
+
* Both are kept because they answer different questions: the profile is what a
|
|
8
|
+
* chemist recognises as a spectrum, and the centroid is what every number
|
|
9
|
+
* downstream is computed from. A centroided file has no profile, and that is
|
|
10
|
+
* the normal case for a peak table pasted out of an instrument report.
|
|
11
|
+
*
|
|
12
|
+
* The arrays are `Float64Array` throughout and are never converted to
|
|
13
|
+
* `number[]`: a profile scan runs to hundreds of thousands of points, a plain
|
|
14
|
+
* array costs two to three times the memory, and any structural freeze or
|
|
15
|
+
* spread walks it element by element while treating a typed array as atomic.
|
|
16
|
+
* They are replaced on a change, never written into, since every consumer holds
|
|
17
|
+
* the same object by reference.
|
|
18
|
+
*
|
|
19
|
+
* The shape is the one the glycan site's mass viewer holds, field for field
|
|
20
|
+
* where the two overlap, so a spectrum that viewer built can be handed to
|
|
21
|
+
* anything here: whatever it carries beyond these fields is simply not read.
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
import type { DataXY } from 'cheminfo-types';
|
|
25
|
+
|
|
26
|
+
import type { ChartDomain } from '../../chart/core/chartDomain.ts';
|
|
27
|
+
|
|
28
|
+
import type { MassResolution } from './massResolution.ts';
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* One trace of a measurement: m/z against intensity, x strictly increasing.
|
|
32
|
+
*
|
|
33
|
+
* `DataXY` is the shape every package in this pipeline speaks — `xy-parser`,
|
|
34
|
+
* `ms-spectrum` and `ml-spectra-processing` all take and return it — so
|
|
35
|
+
* declaring a parallel type of our own would buy nothing and cost an adapter at
|
|
36
|
+
* each boundary.
|
|
37
|
+
*/
|
|
38
|
+
export type MassTrace = DataXY<Float64Array>;
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* The picked peaks of a spectrum, with the charge of each.
|
|
42
|
+
*
|
|
43
|
+
* `charge` is a dense column rather than an array of optional numbers so it
|
|
44
|
+
* costs two bytes a peak and needs no per-peak object: `0` means no charge was
|
|
45
|
+
* established, which is an answer rather than a missing value — a peak belongs
|
|
46
|
+
* to no isotopologue cluster and to no charge ladder. A charge is never read
|
|
47
|
+
* off a single peak, only off the series it belongs to.
|
|
48
|
+
*/
|
|
49
|
+
export interface MassPeaks extends MassTrace {
|
|
50
|
+
/** Charge of each peak, `0` where none was established. Signed. */
|
|
51
|
+
charge: Int16Array;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* The formats a spectrum can have been read from.
|
|
56
|
+
*
|
|
57
|
+
* The two this package reads, and `calculated` for a trace nobody measured. Any
|
|
58
|
+
* other name is accepted as well, because a host that read an mzML with a
|
|
59
|
+
* reader of its own hands the spectrum over still knowing what it was read
|
|
60
|
+
* from, and the acquisition table should say so rather than call it text.
|
|
61
|
+
*/
|
|
62
|
+
export type MassFormat =
|
|
63
|
+
'jcamp' | 'text' | 'calculated' | (string & Record<never, never>);
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Where a spectrum came from, and what the file said about the acquisition.
|
|
67
|
+
*
|
|
68
|
+
* Kept apart from `meta` because these are the facts other code branches on —
|
|
69
|
+
* a calculated trace is never reduced for drawing, an MS2 scan carries a
|
|
70
|
+
* precursor worth showing beside its name — while `meta` is a table to read.
|
|
71
|
+
* The readers of this package leave the acquisition facts out; a host whose
|
|
72
|
+
* reader states them, an mzML's, hands them over here.
|
|
73
|
+
*/
|
|
74
|
+
export interface MassOrigin {
|
|
75
|
+
/** The format it was read from. */
|
|
76
|
+
format: MassFormat;
|
|
77
|
+
/**
|
|
78
|
+
* Name of the file it came from, absent for a paste.
|
|
79
|
+
* @default undefined
|
|
80
|
+
*/
|
|
81
|
+
fileName?: string;
|
|
82
|
+
/**
|
|
83
|
+
* Which acquisition of that file, counted from zero — the block of a JCAMP,
|
|
84
|
+
* or the page of a GC/MS one — absent when the file held only one.
|
|
85
|
+
* @default undefined
|
|
86
|
+
*/
|
|
87
|
+
scanIndex?: number;
|
|
88
|
+
/**
|
|
89
|
+
* MS level: 1 for a survey scan, 2 for a fragmentation scan.
|
|
90
|
+
* @default undefined
|
|
91
|
+
*/
|
|
92
|
+
msLevel?: number;
|
|
93
|
+
/**
|
|
94
|
+
* Polarity the scan was acquired in.
|
|
95
|
+
* @default undefined
|
|
96
|
+
*/
|
|
97
|
+
polarity?: 'positive' | 'negative';
|
|
98
|
+
/**
|
|
99
|
+
* The m/z that was isolated and fragmented, on an MS2 scan.
|
|
100
|
+
* @default undefined
|
|
101
|
+
*/
|
|
102
|
+
precursorMz?: number;
|
|
103
|
+
/**
|
|
104
|
+
* The monoisotopic m/z the instrument named for that precursor, where it
|
|
105
|
+
* named one.
|
|
106
|
+
*
|
|
107
|
+
* Carried beside the precursor rather than instead of it because the two are
|
|
108
|
+
* the same number on nearly every scan that has both, and a different one on
|
|
109
|
+
* a scan whose method offset its isolation window: the precursor is then the
|
|
110
|
+
* centre of the window, since that is what the quadrupole transmitted, and
|
|
111
|
+
* this is the molecule the method was after.
|
|
112
|
+
* @default undefined
|
|
113
|
+
*/
|
|
114
|
+
precursorMonoisotopicMz?: number;
|
|
115
|
+
/**
|
|
116
|
+
* Retention time in minutes, on a scan out of a chromatographic run.
|
|
117
|
+
* @default undefined
|
|
118
|
+
*/
|
|
119
|
+
retentionTime?: number;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/** One row of the acquisition table. */
|
|
123
|
+
export interface MassMetaField {
|
|
124
|
+
/** How the row is named, in the display order the table fixes. */
|
|
125
|
+
label: string;
|
|
126
|
+
/** The value as the file states it. */
|
|
127
|
+
value: string;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* What the file says about how the spectrum was acquired.
|
|
132
|
+
*
|
|
133
|
+
* Only ever what it actually says: a field the file leaves blank is left out
|
|
134
|
+
* rather than shown empty, so the table is short and every line in it is a
|
|
135
|
+
* fact. A plain two-column paste carries none of this, which is most pastes,
|
|
136
|
+
* and the panel then shows the file name alone.
|
|
137
|
+
*/
|
|
138
|
+
export interface MassMeta {
|
|
139
|
+
/** The title record, `null` when the file carries none. */
|
|
140
|
+
title: string | null;
|
|
141
|
+
/** The molecular formula the file claims, `null` when it claims none. */
|
|
142
|
+
molecularFormula: string | null;
|
|
143
|
+
/** The fields that are populated, in display order. */
|
|
144
|
+
fields: MassMetaField[];
|
|
145
|
+
/**
|
|
146
|
+
* The instrument's own scan description, kept verbatim. Real instruments
|
|
147
|
+
* leave the structured records empty and put the answer only here, so it is
|
|
148
|
+
* both the fallback the fields are mined from and worth showing as written.
|
|
149
|
+
*/
|
|
150
|
+
conditions: string | null;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/** One spectrum as the viewer holds it. */
|
|
154
|
+
export interface MassSpectrum {
|
|
155
|
+
/** Identity, stable across edits so a selection survives a rename. */
|
|
156
|
+
id: string;
|
|
157
|
+
/** What the list calls it; editable, and never used as identity. */
|
|
158
|
+
name: string;
|
|
159
|
+
/** The colour both its traces are drawn in. */
|
|
160
|
+
color: string;
|
|
161
|
+
/** The continuous trace, `null` when the file was already centroided. */
|
|
162
|
+
profile: MassTrace | null;
|
|
163
|
+
/** The picked peaks, which every number downstream is computed from. */
|
|
164
|
+
centroid: MassPeaks;
|
|
165
|
+
/** What the file said about the acquisition, `null` when it said nothing. */
|
|
166
|
+
meta: MassMeta | null;
|
|
167
|
+
/** Where it came from. */
|
|
168
|
+
origin: MassOrigin;
|
|
169
|
+
/**
|
|
170
|
+
* Whether the profile is drawn. The viewer draws one trace or the other and
|
|
171
|
+
* never both; `isSpectrumDrawn` is the question to ask about the pair.
|
|
172
|
+
*/
|
|
173
|
+
showProfile: boolean;
|
|
174
|
+
/** Whether the centroid sticks are drawn, under the same rule. */
|
|
175
|
+
showCentroid: boolean;
|
|
176
|
+
/**
|
|
177
|
+
* Whether the trace is left out of the automatic domain. A predicted
|
|
178
|
+
* distribution previewed under the pointer must not move the axes, or hovering
|
|
179
|
+
* a candidate would throw away the zoom the user set.
|
|
180
|
+
* @default false
|
|
181
|
+
*/
|
|
182
|
+
excludeFromDomain?: boolean;
|
|
183
|
+
/**
|
|
184
|
+
* How finely the spectrum resolves masses, as it was decided when it was read.
|
|
185
|
+
*
|
|
186
|
+
* Left out by a host that built the spectrum itself, and then worked out from
|
|
187
|
+
* the masses as written — see `resolutionOf`.
|
|
188
|
+
* @default undefined
|
|
189
|
+
*/
|
|
190
|
+
resolution?: MassResolution;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
/**
|
|
194
|
+
* The window the chart is showing, in data units.
|
|
195
|
+
*
|
|
196
|
+
* `ChartDomain` itself, not a type of our own: the arithmetic that moves a
|
|
197
|
+
* window is the shared chart's and speaks that type, and an alias here that
|
|
198
|
+
* merely renamed it would need converting at every call. `x` is in m/z and `y`
|
|
199
|
+
* in intensity.
|
|
200
|
+
*/
|
|
201
|
+
export type MassDomain = ChartDomain;
|
|
202
|
+
|
|
203
|
+
/**
|
|
204
|
+
* Whether a spectrum is on the chart at all, by whichever of its traces.
|
|
205
|
+
*
|
|
206
|
+
* A spectrum is drawn as its profile *or* as its sticks and never as both — a
|
|
207
|
+
* centroid standing inside the peak shapes it was picked from reads as a second
|
|
208
|
+
* spectrum laid over the first — so whether it is on screen is a question about
|
|
209
|
+
* the pair and not about either one.
|
|
210
|
+
*
|
|
211
|
+
* This is what everything that *uses* the picked peaks asks: pointing at a peak,
|
|
212
|
+
* labelling one, listing them. All of them read the centroid whether or not the
|
|
213
|
+
* sticks are the trace being drawn, so asking `showCentroid` there would make a
|
|
214
|
+
* spectrum shown as its profile quietly stop answering anything.
|
|
215
|
+
* @param spectrum - The spectrum.
|
|
216
|
+
* @returns Whether either of its traces is drawn.
|
|
217
|
+
*/
|
|
218
|
+
export function isSpectrumDrawn(spectrum: MassSpectrum): boolean {
|
|
219
|
+
return spectrum.showProfile || spectrum.showCentroid;
|
|
220
|
+
}
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Everything the viewer knows, in the three buckets NMRium splits its own into
|
|
3
|
+
* — the same three the infrared viewer holds, under the same names.
|
|
4
|
+
*
|
|
5
|
+
* The split is the persistence boundary as much as anything: `data` is the
|
|
6
|
+
* document, `view` is where you are in it and lasts as long as the session, and
|
|
7
|
+
* `settings` is the workspace, which is how every spectrum is drawn whichever
|
|
8
|
+
* ones happen to be open.
|
|
9
|
+
*
|
|
10
|
+
* The peaks are in `data`, each spectrum carrying its own centroid: picked once,
|
|
11
|
+
* when the spectrum was read, so nothing about drawing it ever picks again.
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
import type { MassPanelId, MassSidePanelId } from './massSidePanels.ts';
|
|
15
|
+
import type { MassDomain, MassSpectrum } from './massSpectrum.ts';
|
|
16
|
+
import type { MzDecimalsSetting } from './mzDecimalsSetting.ts';
|
|
17
|
+
import { readMzDecimalsSetting } from './mzDecimalsSetting.ts';
|
|
18
|
+
|
|
19
|
+
/** The document: what the files held. */
|
|
20
|
+
export interface MassData {
|
|
21
|
+
/** The spectra, in the order they were loaded. */
|
|
22
|
+
spectra: MassSpectrum[];
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/** What a drag across the chart is for while it is chosen. */
|
|
26
|
+
export type MassTool = 'read' | 'box';
|
|
27
|
+
|
|
28
|
+
/** Where you are in the viewer. */
|
|
29
|
+
export interface MassView {
|
|
30
|
+
/** Identity of the spectrum the panels act on, `null` for none. */
|
|
31
|
+
selectedId: string | null;
|
|
32
|
+
/**
|
|
33
|
+
* The window being shown, `null` while the chart is showing what fits.
|
|
34
|
+
*
|
|
35
|
+
* Held here so that a toolbar button and a row of the peak table can zoom —
|
|
36
|
+
* the chart is told a window and reports every window it arrives at, and this
|
|
37
|
+
* is where the answer lives between the two.
|
|
38
|
+
*/
|
|
39
|
+
domain: MassDomain | null;
|
|
40
|
+
/** Which tool a drag across the chart is running. */
|
|
41
|
+
tool: MassTool;
|
|
42
|
+
/**
|
|
43
|
+
* The side panels that are open: the viewer's own and any a host added. An id
|
|
44
|
+
* no panel on offer answers to opens nothing.
|
|
45
|
+
*/
|
|
46
|
+
openPanelIds: MassPanelId[];
|
|
47
|
+
/** Why the last action was refused, `null` as soon as one succeeds. */
|
|
48
|
+
error: string | null;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/** The workspace: how every spectrum is drawn, whichever ones are open. */
|
|
52
|
+
export interface MassSettings {
|
|
53
|
+
/** Whether the peaks of the selected spectrum are labelled on the chart. */
|
|
54
|
+
showLabels: boolean;
|
|
55
|
+
/** At most how many peaks are labelled at once. */
|
|
56
|
+
labelLimit: number;
|
|
57
|
+
/** Whether a label writes the charge of a peak whose charge was established. */
|
|
58
|
+
showCharges: boolean;
|
|
59
|
+
/**
|
|
60
|
+
* How many decimals the masses on screen are written with: `'auto'` for what
|
|
61
|
+
* the spectra resolve — high-resolution masses or nominal ones — or the
|
|
62
|
+
* number the reader chose.
|
|
63
|
+
*/
|
|
64
|
+
mzDecimals: MzDecimalsSetting;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/** Everything the viewer knows. */
|
|
68
|
+
export interface MassState {
|
|
69
|
+
/** The spectra that are open. */
|
|
70
|
+
data: MassData;
|
|
71
|
+
/** Where you are in the viewer. */
|
|
72
|
+
view: MassView;
|
|
73
|
+
/** How spectra are drawn. */
|
|
74
|
+
settings: MassSettings;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/** Part of a state, as a host restoring one supplies it. */
|
|
78
|
+
export interface PartialMassState {
|
|
79
|
+
/** The spectra that were open. */
|
|
80
|
+
data?: MassData;
|
|
81
|
+
/** Where the viewer was left. */
|
|
82
|
+
view?: Partial<MassView>;
|
|
83
|
+
/** The workspace they were drawn in. */
|
|
84
|
+
settings?: Partial<MassSettings>;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/** The panel the splitter brings back when it is dragged open on nothing. */
|
|
88
|
+
export const DEFAULT_SIDE_PANEL: MassSidePanelId = 'spectra';
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* The panels a fresh viewer opens with: the list, and the peaks of whichever
|
|
92
|
+
* spectrum is selected in it, because a spectrum is read through its peaks.
|
|
93
|
+
*/
|
|
94
|
+
export const DEFAULT_SIDE_PANELS: MassSidePanelId[] = ['spectra', 'peaks'];
|
|
95
|
+
|
|
96
|
+
/** How many peaks are labelled to begin with. */
|
|
97
|
+
export const DEFAULT_LABEL_LIMIT = 20;
|
|
98
|
+
|
|
99
|
+
/** At most how many peaks a setting may ask to have labelled. */
|
|
100
|
+
export const MAXIMUM_LABEL_LIMIT = 500;
|
|
101
|
+
|
|
102
|
+
/** The workspace a fresh viewer starts from. */
|
|
103
|
+
export const DEFAULT_SETTINGS: MassSettings = {
|
|
104
|
+
showLabels: true,
|
|
105
|
+
labelLimit: DEFAULT_LABEL_LIMIT,
|
|
106
|
+
showCharges: true,
|
|
107
|
+
mzDecimals: 'auto',
|
|
108
|
+
};
|
|
109
|
+
|
|
110
|
+
/** What a viewer opens on. */
|
|
111
|
+
export interface CreateMassStateOptions {
|
|
112
|
+
/**
|
|
113
|
+
* The spectra to open on.
|
|
114
|
+
* @default []
|
|
115
|
+
*/
|
|
116
|
+
spectra?: MassSpectrum[];
|
|
117
|
+
/**
|
|
118
|
+
* The workspace to open in.
|
|
119
|
+
* @default DEFAULT_SETTINGS
|
|
120
|
+
*/
|
|
121
|
+
settings?: Partial<MassSettings>;
|
|
122
|
+
/**
|
|
123
|
+
* The panels open to begin with, the viewer's own or a host's.
|
|
124
|
+
* @default DEFAULT_SIDE_PANELS
|
|
125
|
+
*/
|
|
126
|
+
panelIds?: readonly MassPanelId[];
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* The state a viewer opens with.
|
|
131
|
+
*
|
|
132
|
+
* The panel list is spread rather than stored by reference: a caller's array is
|
|
133
|
+
* the caller's to mutate, and a viewer holding it would find its open panels
|
|
134
|
+
* changing under it.
|
|
135
|
+
* @param options - What it opens on.
|
|
136
|
+
* @returns The state.
|
|
137
|
+
*/
|
|
138
|
+
export function createMassState(
|
|
139
|
+
options: CreateMassStateOptions = {},
|
|
140
|
+
): MassState {
|
|
141
|
+
const { spectra = [], settings, panelIds } = options;
|
|
142
|
+
return {
|
|
143
|
+
data: { spectra: [...spectra] },
|
|
144
|
+
view: {
|
|
145
|
+
selectedId: spectra[0]?.id ?? null,
|
|
146
|
+
domain: null,
|
|
147
|
+
tool: 'read',
|
|
148
|
+
openPanelIds: [...(panelIds ?? DEFAULT_SIDE_PANELS)],
|
|
149
|
+
error: null,
|
|
150
|
+
},
|
|
151
|
+
settings: mergeMassSettings(DEFAULT_SETTINGS, settings),
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* Fold a change into the workspace, refusing what no chart survives.
|
|
157
|
+
*
|
|
158
|
+
* A number typed into a field arrives here as `NaN` for every keystroke that is
|
|
159
|
+
* not yet a number — a lone minus sign, an empty box — and a limit of `NaN`
|
|
160
|
+
* silently stops every label being drawn. So the limit is checked, and the
|
|
161
|
+
* current value kept where the new one is unusable rather than the field being
|
|
162
|
+
* fought with while it is being typed in. The decimals are read back the same
|
|
163
|
+
* way, through `readMzDecimalsSetting`, since a stored workspace is no more to
|
|
164
|
+
* be trusted than a half-typed field.
|
|
165
|
+
* @param current - The workspace in force.
|
|
166
|
+
* @param change - What to change about it.
|
|
167
|
+
* @returns The new workspace.
|
|
168
|
+
*/
|
|
169
|
+
export function mergeMassSettings(
|
|
170
|
+
current: MassSettings,
|
|
171
|
+
change: Partial<MassSettings> = {},
|
|
172
|
+
): MassSettings {
|
|
173
|
+
const asked = change.labelLimit ?? current.labelLimit;
|
|
174
|
+
return {
|
|
175
|
+
...current,
|
|
176
|
+
...change,
|
|
177
|
+
labelLimit: Number.isFinite(asked)
|
|
178
|
+
? Math.min(MAXIMUM_LABEL_LIMIT, Math.max(0, Math.round(asked)))
|
|
179
|
+
: current.labelLimit,
|
|
180
|
+
mzDecimals: readMzDecimalsSetting(change.mzDecimals) ?? current.mzDecimals,
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
/**
|
|
185
|
+
* Whether a window is one a chart can be built on.
|
|
186
|
+
*
|
|
187
|
+
* Both ends finite and the low one below the high one. A window failing either
|
|
188
|
+
* makes every scale built from it infinite, which the DOM refuses outright — so
|
|
189
|
+
* a handle told to frame a peak it worked out wrongly leaves the chart alone
|
|
190
|
+
* instead of blanking it.
|
|
191
|
+
* @param domain - The window to check.
|
|
192
|
+
* @returns Whether it can be shown.
|
|
193
|
+
*/
|
|
194
|
+
export function isMassWindow(domain: MassDomain): boolean {
|
|
195
|
+
return isWindow(domain.x) && isWindow(domain.y);
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
/**
|
|
199
|
+
* Whether one axis of a window runs from somewhere to somewhere else.
|
|
200
|
+
* @param bounds - `[from, to]` on that axis.
|
|
201
|
+
* @returns Whether it is usable.
|
|
202
|
+
*/
|
|
203
|
+
function isWindow(bounds: readonly [number, number]): boolean {
|
|
204
|
+
const [from, to] = bounds;
|
|
205
|
+
return Number.isFinite(from) && Number.isFinite(to) && from < to;
|
|
206
|
+
}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The edits the reducer makes in more than one place, kept apart from it so
|
|
3
|
+
* the reducer reads as the list of what can be asked of the viewer.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import type { MassSpectrum } from './massSpectrum.ts';
|
|
7
|
+
import type { MassState, PartialMassState } from './massState.ts';
|
|
8
|
+
import { isMassWindow, mergeMassSettings } from './massState.ts';
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Change one spectrum, leaving the state itself when nothing changed.
|
|
12
|
+
*
|
|
13
|
+
* The edit returns the very spectrum it was handed when it has nothing to do,
|
|
14
|
+
* and that is passed on: a rename to the name already held must not rebuild
|
|
15
|
+
* the list, or every memo keyed on it is defeated by a keystroke that did
|
|
16
|
+
* nothing.
|
|
17
|
+
* @param state - The state in force.
|
|
18
|
+
* @param id - Identity of the spectrum to change.
|
|
19
|
+
* @param edit - What to do to it.
|
|
20
|
+
* @returns The new state, or the old one when the spectrum is absent or the
|
|
21
|
+
* edit changed nothing.
|
|
22
|
+
*/
|
|
23
|
+
export function mapSpectrum(
|
|
24
|
+
state: MassState,
|
|
25
|
+
id: string,
|
|
26
|
+
edit: (spectrum: MassSpectrum) => MassSpectrum,
|
|
27
|
+
): MassState {
|
|
28
|
+
let changed = false;
|
|
29
|
+
const spectra = state.data.spectra.map((spectrum) => {
|
|
30
|
+
if (spectrum.id !== id) return spectrum;
|
|
31
|
+
const edited = edit(spectrum);
|
|
32
|
+
if (edited !== spectrum) changed = true;
|
|
33
|
+
return edited;
|
|
34
|
+
});
|
|
35
|
+
return changed ? { ...state, data: { spectra } } : state;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* The spectra of an arrival that are not open already.
|
|
40
|
+
*
|
|
41
|
+
* Identity is what every row, every trace and the selection are keyed on, so a
|
|
42
|
+
* second spectrum under an identity already taken would be two rows React
|
|
43
|
+
* cannot tell apart and one trace drawn twice. A host handing the same spectra
|
|
44
|
+
* over again is asking for nothing new.
|
|
45
|
+
* @param state - The state in force.
|
|
46
|
+
* @param spectra - What is arriving.
|
|
47
|
+
* @returns What is new, in the order it arrived.
|
|
48
|
+
*/
|
|
49
|
+
export function arriving(
|
|
50
|
+
state: MassState,
|
|
51
|
+
spectra: readonly MassSpectrum[],
|
|
52
|
+
): MassSpectrum[] {
|
|
53
|
+
const taken = new Set<string>();
|
|
54
|
+
for (const spectrum of state.data.spectra) taken.add(spectrum.id);
|
|
55
|
+
const fresh: MassSpectrum[] = [];
|
|
56
|
+
for (const spectrum of spectra) {
|
|
57
|
+
if (taken.has(spectrum.id)) continue;
|
|
58
|
+
taken.add(spectrum.id);
|
|
59
|
+
fresh.push(spectrum);
|
|
60
|
+
}
|
|
61
|
+
return fresh;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Take a whole state, as a host restoring one supplies it.
|
|
66
|
+
*
|
|
67
|
+
* What is restored is checked against what it is restored with: a selection
|
|
68
|
+
* naming a spectrum that is not among the restored ones selects the first
|
|
69
|
+
* instead, and a window no chart can be drawn on is dropped for the fit.
|
|
70
|
+
* @param state - The state in force.
|
|
71
|
+
* @param partial - What the host supplies.
|
|
72
|
+
* @returns The restored state.
|
|
73
|
+
*/
|
|
74
|
+
export function restoreState(
|
|
75
|
+
state: MassState,
|
|
76
|
+
partial: PartialMassState,
|
|
77
|
+
): MassState {
|
|
78
|
+
const spectra = partial.data?.spectra ?? state.data.spectra;
|
|
79
|
+
const view = { ...state.view, ...partial.view };
|
|
80
|
+
const selectable =
|
|
81
|
+
view.selectedId !== null &&
|
|
82
|
+
spectra.some((spectrum) => spectrum.id === view.selectedId);
|
|
83
|
+
return {
|
|
84
|
+
data: { spectra },
|
|
85
|
+
view: {
|
|
86
|
+
...view,
|
|
87
|
+
selectedId: selectable ? view.selectedId : (spectra[0]?.id ?? null),
|
|
88
|
+
domain:
|
|
89
|
+
view.domain !== null && isMassWindow(view.domain) ? view.domain : null,
|
|
90
|
+
openPanelIds: [...view.openPanelIds],
|
|
91
|
+
},
|
|
92
|
+
settings: mergeMassSettings(state.settings, partial.settings),
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* Refuse an action, saying why.
|
|
98
|
+
* @param state - The state in force.
|
|
99
|
+
* @param error - The sentence to show whoever asked.
|
|
100
|
+
* @returns The state carrying the refusal.
|
|
101
|
+
*/
|
|
102
|
+
export function withError(state: MassState, error: string): MassState {
|
|
103
|
+
return { ...state, view: { ...state.view, error } };
|
|
104
|
+
}
|