react-cheminfo 0.64.1 → 0.66.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 +293 -6
- package/lib/card/core/cardAddress.d.ts +70 -0
- package/lib/card/core/cardAddress.d.ts.map +1 -0
- package/lib/card/core/cardAddress.js +59 -0
- package/lib/card/core/cardAddress.js.map +1 -0
- package/lib/card/core/cardPageUrl.d.ts +49 -0
- package/lib/card/core/cardPageUrl.d.ts.map +1 -0
- package/lib/card/core/cardPageUrl.js +59 -0
- package/lib/card/core/cardPageUrl.js.map +1 -0
- package/lib/card/core/index.d.ts +7 -0
- package/lib/card/core/index.d.ts.map +1 -0
- package/lib/card/core/index.js +4 -0
- package/lib/card/core/index.js.map +1 -0
- package/lib/card/core/panelRoom.d.ts +40 -0
- package/lib/card/core/panelRoom.d.ts.map +1 -0
- package/lib/card/core/panelRoom.js +40 -0
- package/lib/card/core/panelRoom.js.map +1 -0
- package/lib/card/ui/CardDetailsButton.d.ts +38 -0
- package/lib/card/ui/CardDetailsButton.d.ts.map +1 -0
- package/lib/card/ui/CardDetailsButton.js +50 -0
- package/lib/card/ui/CardDetailsButton.js.map +1 -0
- package/lib/card/ui/CardFigure.d.ts +51 -0
- package/lib/card/ui/CardFigure.d.ts.map +1 -0
- package/lib/card/ui/CardFigure.js +27 -0
- package/lib/card/ui/CardFigure.js.map +1 -0
- package/lib/card/ui/CardFrame.d.ts +30 -0
- package/lib/card/ui/CardFrame.d.ts.map +1 -0
- package/lib/card/ui/CardFrame.js +20 -0
- package/lib/card/ui/CardFrame.js.map +1 -0
- package/lib/card/ui/CopyTableButton.d.ts +37 -0
- package/lib/card/ui/CopyTableButton.d.ts.map +1 -0
- package/lib/card/ui/CopyTableButton.js +19 -0
- package/lib/card/ui/CopyTableButton.js.map +1 -0
- package/lib/card/ui/cardTooltip.d.ts +14 -0
- package/lib/card/ui/cardTooltip.d.ts.map +1 -0
- package/lib/card/ui/cardTooltip.js +15 -0
- package/lib/card/ui/cardTooltip.js.map +1 -0
- package/lib/card/ui/embed.d.ts +15 -0
- package/lib/card/ui/embed.d.ts.map +1 -0
- package/lib/card/ui/embed.js +24 -0
- package/lib/card/ui/embed.js.map +1 -0
- package/lib/card/ui/fitCardToFrame.d.ts +31 -0
- package/lib/card/ui/fitCardToFrame.d.ts.map +1 -0
- package/lib/card/ui/fitCardToFrame.js +66 -0
- package/lib/card/ui/fitCardToFrame.js.map +1 -0
- package/lib/card/ui/holdRoomForPanels.d.ts +16 -0
- package/lib/card/ui/holdRoomForPanels.d.ts.map +1 -0
- package/lib/card/ui/holdRoomForPanels.js +76 -0
- package/lib/card/ui/holdRoomForPanels.js.map +1 -0
- package/lib/card/ui/index.d.ts +11 -0
- package/lib/card/ui/index.d.ts.map +1 -0
- package/lib/card/ui/index.js +7 -0
- package/lib/card/ui/index.js.map +1 -0
- package/lib/card/ui/openPanels.d.ts +25 -0
- package/lib/card/ui/openPanels.d.ts.map +1 -0
- package/lib/card/ui/openPanels.js +85 -0
- package/lib/card/ui/openPanels.js.map +1 -0
- package/lib/card.d.ts +13 -0
- package/lib/card.d.ts.map +1 -0
- package/lib/card.js +13 -0
- package/lib/card.js.map +1 -0
- package/lib/conformers.d.ts +1 -0
- package/lib/conformers.d.ts.map +1 -1
- package/lib/conformers.js +1 -0
- package/lib/conformers.js.map +1 -1
- package/lib/core.d.ts +4 -0
- package/lib/core.d.ts.map +1 -1
- package/lib/core.js +5 -0
- package/lib/core.js.map +1 -1
- package/lib/fetch/core/apiError.d.ts +56 -0
- package/lib/fetch/core/apiError.d.ts.map +1 -0
- package/lib/fetch/core/apiError.js +43 -0
- package/lib/fetch/core/apiError.js.map +1 -0
- package/lib/fetch/core/fetchJson.d.ts +47 -0
- package/lib/fetch/core/fetchJson.d.ts.map +1 -0
- package/lib/fetch/core/fetchJson.js +109 -0
- package/lib/fetch/core/fetchJson.js.map +1 -0
- package/lib/fetch/core/index.d.ts +5 -0
- package/lib/fetch/core/index.d.ts.map +1 -0
- package/lib/fetch/core/index.js +3 -0
- package/lib/fetch/core/index.js.map +1 -0
- package/lib/formula/core/formulaText.d.ts +46 -0
- package/lib/formula/core/formulaText.d.ts.map +1 -0
- package/lib/formula/core/formulaText.js +74 -0
- package/lib/formula/core/formulaText.js.map +1 -0
- package/lib/formula/core/index.d.ts +6 -0
- package/lib/formula/core/index.d.ts.map +1 -0
- package/lib/formula/core/index.js +4 -0
- package/lib/formula/core/index.js.map +1 -0
- package/lib/formula/core/normalizeFormula.d.ts +22 -0
- package/lib/formula/core/normalizeFormula.d.ts.map +1 -0
- package/lib/formula/core/normalizeFormula.js +46 -0
- package/lib/formula/core/normalizeFormula.js.map +1 -0
- package/lib/formula/core/readFormula.d.ts +73 -0
- package/lib/formula/core/readFormula.d.ts.map +1 -0
- package/lib/formula/core/readFormula.js +132 -0
- package/lib/formula/core/readFormula.js.map +1 -0
- package/lib/formula/ui/CopyableFormula.d.ts +31 -0
- package/lib/formula/ui/CopyableFormula.d.ts.map +1 -0
- package/lib/formula/ui/CopyableFormula.js +19 -0
- package/lib/formula/ui/CopyableFormula.js.map +1 -0
- package/lib/formula/ui/FormulaInput.d.ts +29 -0
- package/lib/formula/ui/FormulaInput.d.ts.map +1 -0
- package/lib/formula/ui/FormulaInput.js +16 -0
- package/lib/formula/ui/FormulaInput.js.map +1 -0
- package/lib/formula/ui/QuestionFormula.d.ts +14 -0
- package/lib/formula/ui/QuestionFormula.d.ts.map +1 -0
- package/lib/formula/ui/QuestionFormula.js +13 -0
- package/lib/formula/ui/QuestionFormula.js.map +1 -0
- package/lib/formula/ui/index.d.ts +7 -0
- package/lib/formula/ui/index.d.ts.map +1 -0
- package/lib/formula/ui/index.js +4 -0
- package/lib/formula/ui/index.js.map +1 -0
- package/lib/formula.d.ts +11 -0
- package/lib/formula.d.ts.map +1 -0
- package/lib/formula.js +11 -0
- package/lib/formula.js.map +1 -0
- package/lib/hooks/ui/index.d.ts +1 -0
- package/lib/hooks/ui/index.d.ts.map +1 -1
- package/lib/hooks/ui/index.js.map +1 -1
- package/lib/hooks/ui/keyTargets.d.ts +4 -2
- package/lib/hooks/ui/keyTargets.d.ts.map +1 -1
- package/lib/hooks/ui/keyTargets.js +5 -3
- package/lib/hooks/ui/keyTargets.js.map +1 -1
- package/lib/hooks/ui/useAsync.d.ts +20 -5
- package/lib/hooks/ui/useAsync.d.ts.map +1 -1
- package/lib/hooks/ui/useAsync.js +29 -14
- package/lib/hooks/ui/useAsync.js.map +1 -1
- package/lib/i18n/core/chromeCatalog.d.ts +1 -1
- package/lib/i18n/core/chromeCatalog.d.ts.map +1 -1
- package/lib/ir/core/analysisSpectra.d.ts +23 -6
- package/lib/ir/core/analysisSpectra.d.ts.map +1 -1
- package/lib/ir/core/analysisSpectra.js.map +1 -1
- package/lib/ir/core/bandLabelPlan.d.ts.map +1 -1
- package/lib/ir/core/bandLabelPlan.js +11 -6
- package/lib/ir/core/bandLabelPlan.js.map +1 -1
- package/lib/ir/core/index.d.ts +13 -9
- package/lib/ir/core/index.d.ts.map +1 -1
- package/lib/ir/core/index.js +9 -6
- package/lib/ir/core/index.js.map +1 -1
- package/lib/ir/core/irBand.d.ts +45 -14
- package/lib/ir/core/irBand.d.ts.map +1 -1
- package/lib/ir/core/irBand.js +28 -6
- package/lib/ir/core/irBand.js.map +1 -1
- 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 +11 -1
- package/lib/ir/core/irCommands.js.map +1 -1
- package/lib/ir/core/irDomain.d.ts +4 -3
- package/lib/ir/core/irDomain.d.ts.map +1 -1
- package/lib/ir/core/irDomain.js +10 -7
- package/lib/ir/core/irDomain.js.map +1 -1
- package/lib/ir/core/irFormat.d.ts +14 -2
- package/lib/ir/core/irFormat.d.ts.map +1 -1
- package/lib/ir/core/irFormat.js +33 -4
- package/lib/ir/core/irFormat.js.map +1 -1
- package/lib/ir/core/irMode.d.ts +35 -8
- package/lib/ir/core/irMode.d.ts.map +1 -1
- package/lib/ir/core/irMode.js +38 -10
- package/lib/ir/core/irMode.js.map +1 -1
- package/lib/ir/core/irReducer.d.ts +0 -28
- package/lib/ir/core/irReducer.d.ts.map +1 -1
- package/lib/ir/core/irReducer.js +1 -24
- package/lib/ir/core/irReducer.js.map +1 -1
- package/lib/ir/core/irSpectrum.d.ts +52 -26
- package/lib/ir/core/irSpectrum.d.ts.map +1 -1
- package/lib/ir/core/irSpectrum.js +21 -15
- package/lib/ir/core/irSpectrum.js.map +1 -1
- package/lib/ir/core/irState.d.ts +40 -2
- package/lib/ir/core/irState.d.ts.map +1 -1
- package/lib/ir/core/irState.js +38 -1
- package/lib/ir/core/irState.js.map +1 -1
- package/lib/ir/core/irTechnique.d.ts +94 -0
- package/lib/ir/core/irTechnique.d.ts.map +1 -0
- package/lib/ir/core/irTechnique.js +87 -0
- package/lib/ir/core/irTechnique.js.map +1 -0
- package/lib/ir/core/irTechniqueCommands.d.ts +26 -0
- package/lib/ir/core/irTechniqueCommands.d.ts.map +1 -0
- package/lib/ir/core/irTechniqueCommands.js +68 -0
- package/lib/ir/core/irTechniqueCommands.js.map +1 -0
- package/lib/ir/core/pickBands.d.ts +6 -5
- package/lib/ir/core/pickBands.d.ts.map +1 -1
- package/lib/ir/core/pickBands.js +49 -26
- package/lib/ir/core/pickBands.js.map +1 -1
- package/lib/ir/core/ramanBands.d.ts +30 -0
- package/lib/ir/core/ramanBands.d.ts.map +1 -0
- package/lib/ir/core/ramanBands.js +83 -0
- package/lib/ir/core/ramanBands.js.map +1 -0
- package/lib/ir/core/spectrumJcamp.d.ts +10 -5
- package/lib/ir/core/spectrumJcamp.d.ts.map +1 -1
- package/lib/ir/core/spectrumJcamp.js +63 -15
- package/lib/ir/core/spectrumJcamp.js.map +1 -1
- package/lib/ir/core/toIrSpectrum.d.ts.map +1 -1
- package/lib/ir/core/toIrSpectrum.js +17 -2
- package/lib/ir/core/toIrSpectrum.js.map +1 -1
- package/lib/ir/ui/BandRow.d.ts +30 -0
- package/lib/ir/ui/BandRow.d.ts.map +1 -0
- package/lib/ir/ui/BandRow.js +42 -0
- package/lib/ir/ui/BandRow.js.map +1 -0
- package/lib/ir/ui/BandsPanel.d.ts +4 -0
- package/lib/ir/ui/BandsPanel.d.ts.map +1 -1
- package/lib/ir/ui/BandsPanel.js +14 -59
- package/lib/ir/ui/BandsPanel.js.map +1 -1
- package/lib/ir/ui/IrAboutDialog.d.ts +7 -0
- package/lib/ir/ui/IrAboutDialog.d.ts.map +1 -1
- package/lib/ir/ui/IrAboutDialog.js +16 -3
- package/lib/ir/ui/IrAboutDialog.js.map +1 -1
- package/lib/ir/ui/IrCanvas.d.ts.map +1 -1
- package/lib/ir/ui/IrCanvas.js +2 -2
- package/lib/ir/ui/IrCanvas.js.map +1 -1
- package/lib/ir/ui/IrChart.d.ts +2 -1
- package/lib/ir/ui/IrChart.d.ts.map +1 -1
- package/lib/ir/ui/IrChart.js +18 -21
- package/lib/ir/ui/IrChart.js.map +1 -1
- package/lib/ir/ui/IrCommandProvider.d.ts +7 -0
- package/lib/ir/ui/IrCommandProvider.d.ts.map +1 -1
- package/lib/ir/ui/IrCommandProvider.js +2 -2
- package/lib/ir/ui/IrCommandProvider.js.map +1 -1
- package/lib/ir/ui/IrCommandTooltip.d.ts +7 -0
- package/lib/ir/ui/IrCommandTooltip.d.ts.map +1 -1
- package/lib/ir/ui/IrCommandTooltip.js +3 -2
- package/lib/ir/ui/IrCommandTooltip.js.map +1 -1
- package/lib/ir/ui/IrDocumentationDialog.d.ts +8 -1
- package/lib/ir/ui/IrDocumentationDialog.d.ts.map +1 -1
- package/lib/ir/ui/IrDocumentationDialog.js +30 -7
- package/lib/ir/ui/IrDocumentationDialog.js.map +1 -1
- package/lib/ir/ui/IrEditor.d.ts +3 -1
- package/lib/ir/ui/IrEditor.d.ts.map +1 -1
- package/lib/ir/ui/IrEditor.js +3 -20
- package/lib/ir/ui/IrEditor.js.map +1 -1
- package/lib/ir/ui/IrHeader.d.ts.map +1 -1
- package/lib/ir/ui/IrHeader.js +5 -1
- package/lib/ir/ui/IrHeader.js.map +1 -1
- package/lib/ir/ui/IrLogo.d.ts +11 -3
- package/lib/ir/ui/IrLogo.d.ts.map +1 -1
- package/lib/ir/ui/IrLogo.js +14 -5
- package/lib/ir/ui/IrLogo.js.map +1 -1
- package/lib/ir/ui/IrShell.d.ts.map +1 -1
- package/lib/ir/ui/IrShell.js +23 -56
- package/lib/ir/ui/IrShell.js.map +1 -1
- package/lib/ir/ui/IrStatusBar.d.ts +3 -2
- package/lib/ir/ui/IrStatusBar.d.ts.map +1 -1
- package/lib/ir/ui/IrStatusBar.js +14 -9
- package/lib/ir/ui/IrStatusBar.js.map +1 -1
- package/lib/ir/ui/IrToolbar.d.ts +3 -0
- package/lib/ir/ui/IrToolbar.d.ts.map +1 -1
- package/lib/ir/ui/IrToolbar.js +10 -3
- package/lib/ir/ui/IrToolbar.js.map +1 -1
- package/lib/ir/ui/IrTraces.d.ts +4 -1
- package/lib/ir/ui/IrTraces.d.ts.map +1 -1
- package/lib/ir/ui/IrTraces.js +2 -0
- package/lib/ir/ui/IrTraces.js.map +1 -1
- package/lib/ir/ui/RamanEditor.d.ts +46 -0
- package/lib/ir/ui/RamanEditor.d.ts.map +1 -0
- package/lib/ir/ui/RamanEditor.js +17 -0
- package/lib/ir/ui/RamanEditor.js.map +1 -0
- package/lib/ir/ui/SpectraPanel.d.ts.map +1 -1
- package/lib/ir/ui/SpectraPanel.js +2 -2
- package/lib/ir/ui/SpectraPanel.js.map +1 -1
- package/lib/ir/ui/SpectrumRow.d.ts +7 -0
- package/lib/ir/ui/SpectrumRow.d.ts.map +1 -1
- package/lib/ir/ui/SpectrumRow.js +4 -5
- package/lib/ir/ui/SpectrumRow.js.map +1 -1
- package/lib/ir/ui/VibrationalEditor.d.ts +48 -0
- package/lib/ir/ui/VibrationalEditor.d.ts.map +1 -0
- package/lib/ir/ui/VibrationalEditor.js +31 -0
- package/lib/ir/ui/VibrationalEditor.js.map +1 -0
- package/lib/ir/ui/bandsTsv.d.ts +19 -0
- package/lib/ir/ui/bandsTsv.d.ts.map +1 -0
- package/lib/ir/ui/bandsTsv.js +38 -0
- package/lib/ir/ui/bandsTsv.js.map +1 -0
- package/lib/ir/ui/irChartProps.d.ts +14 -4
- package/lib/ir/ui/irChartProps.d.ts.map +1 -1
- package/lib/ir/ui/irChartProps.js +3 -2
- package/lib/ir/ui/irChartProps.js.map +1 -1
- package/lib/ir/ui/irCommandContext.d.ts +8 -0
- package/lib/ir/ui/irCommandContext.d.ts.map +1 -1
- package/lib/ir/ui/irCommandContext.js +14 -3
- package/lib/ir/ui/irCommandContext.js.map +1 -1
- package/lib/ir/ui/useIrEditor.d.ts +3 -3
- package/lib/ir/ui/useIrEditor.d.ts.map +1 -1
- package/lib/ir/ui/useIrEditor.js +13 -4
- package/lib/ir/ui/useIrEditor.js.map +1 -1
- package/lib/ir/ui/useIrHandle.d.ts +14 -0
- package/lib/ir/ui/useIrHandle.d.ts.map +1 -0
- package/lib/ir/ui/useIrHandle.js +39 -0
- package/lib/ir/ui/useIrHandle.js.map +1 -0
- package/lib/ir/ui/useIrText.d.ts +40 -0
- package/lib/ir/ui/useIrText.d.ts.map +1 -0
- package/lib/ir/ui/useIrText.js +118 -0
- package/lib/ir/ui/useIrText.js.map +1 -0
- package/lib/ir/ui/useIrZoom.d.ts +7 -0
- package/lib/ir/ui/useIrZoom.d.ts.map +1 -1
- package/lib/ir/ui/useIrZoom.js +5 -4
- package/lib/ir/ui/useIrZoom.js.map +1 -1
- package/lib/ir/ui/useValueAxisZoom.d.ts +20 -0
- package/lib/ir/ui/useValueAxisZoom.d.ts.map +1 -0
- package/lib/ir/ui/useValueAxisZoom.js +54 -0
- package/lib/ir/ui/useValueAxisZoom.js.map +1 -0
- package/lib/ir.d.ts +3 -0
- package/lib/ir.d.ts.map +1 -1
- package/lib/ir.js +3 -0
- package/lib/ir.js.map +1 -1
- package/lib/locales/de.json +57 -1
- package/lib/locales/en.json +57 -1
- package/lib/locales/es.json +57 -1
- package/lib/locales/fr.json +57 -1
- package/lib/locales/it.json +57 -1
- package/lib/moleculesClient/core/index.d.ts +5 -0
- package/lib/moleculesClient/core/index.d.ts.map +1 -0
- package/lib/moleculesClient/core/index.js +3 -0
- package/lib/moleculesClient/core/index.js.map +1 -0
- package/lib/moleculesClient/core/moleculesClient.d.ts +12 -0
- package/lib/moleculesClient/core/moleculesClient.d.ts.map +1 -0
- package/lib/moleculesClient/core/moleculesClient.js +105 -0
- package/lib/moleculesClient/core/moleculesClient.js.map +1 -0
- package/lib/moleculesClient/core/moleculesClientApi.d.ts +100 -0
- package/lib/moleculesClient/core/moleculesClientApi.d.ts.map +1 -0
- package/lib/moleculesClient/core/moleculesClientApi.js +20 -0
- package/lib/moleculesClient/core/moleculesClientApi.js.map +1 -0
- package/lib/moleculesClient/core/moleculesTypes.d.ts +154 -0
- package/lib/moleculesClient/core/moleculesTypes.d.ts.map +1 -0
- package/lib/moleculesClient/core/moleculesTypes.js +2 -0
- package/lib/moleculesClient/core/moleculesTypes.js.map +1 -0
- package/lib/moleculesClient/core/requestRetry.d.ts +50 -0
- package/lib/moleculesClient/core/requestRetry.d.ts.map +1 -0
- package/lib/moleculesClient/core/requestRetry.js +108 -0
- package/lib/moleculesClient/core/requestRetry.js.map +1 -0
- package/lib/molstar/core/camera.d.ts +2 -1
- package/lib/molstar/core/camera.d.ts.map +1 -1
- package/lib/molstar/core/camera.js +3 -2
- package/lib/molstar/core/camera.js.map +1 -1
- package/lib/molstar/core/framing.d.ts +102 -0
- package/lib/molstar/core/framing.d.ts.map +1 -0
- package/lib/molstar/core/framing.js +120 -0
- package/lib/molstar/core/framing.js.map +1 -0
- package/lib/molstar/core/hover.d.ts +16 -0
- package/lib/molstar/core/hover.d.ts.map +1 -1
- package/lib/molstar/core/hover.js +14 -0
- package/lib/molstar/core/hover.js.map +1 -1
- package/lib/molstar/core/index.d.ts +4 -1
- package/lib/molstar/core/index.d.ts.map +1 -1
- package/lib/molstar/core/index.js +2 -1
- package/lib/molstar/core/index.js.map +1 -1
- package/lib/pedagogy/core/answers.d.ts +46 -0
- package/lib/pedagogy/core/answers.d.ts.map +1 -0
- package/lib/pedagogy/core/answers.js +77 -0
- package/lib/pedagogy/core/answers.js.map +1 -0
- package/lib/pedagogy/core/attempts.d.ts +86 -0
- package/lib/pedagogy/core/attempts.d.ts.map +1 -0
- package/lib/pedagogy/core/attempts.js +117 -0
- package/lib/pedagogy/core/attempts.js.map +1 -0
- package/lib/pedagogy/core/index.d.ts +8 -0
- package/lib/pedagogy/core/index.d.ts.map +1 -1
- package/lib/pedagogy/core/index.js +4 -0
- package/lib/pedagogy/core/index.js.map +1 -1
- package/lib/pedagogy/core/progressController.d.ts +64 -0
- package/lib/pedagogy/core/progressController.d.ts.map +1 -0
- package/lib/pedagogy/core/progressController.js +56 -0
- package/lib/pedagogy/core/progressController.js.map +1 -0
- package/lib/pedagogy/core/seed.d.ts +96 -0
- package/lib/pedagogy/core/seed.d.ts.map +1 -0
- package/lib/pedagogy/core/seed.js +128 -0
- package/lib/pedagogy/core/seed.js.map +1 -0
- package/lib/pedagogy/core/series.d.ts +77 -0
- package/lib/pedagogy/core/series.d.ts.map +1 -0
- package/lib/pedagogy/core/series.js +10 -0
- package/lib/pedagogy/core/series.js.map +1 -0
- package/lib/pedagogy/ui/AnswerFields.d.ts +21 -0
- package/lib/pedagogy/ui/AnswerFields.d.ts.map +1 -0
- package/lib/pedagogy/ui/AnswerFields.js +24 -0
- package/lib/pedagogy/ui/AnswerFields.js.map +1 -0
- package/lib/pedagogy/ui/ExerciseList.d.ts +82 -0
- package/lib/pedagogy/ui/ExerciseList.d.ts.map +1 -0
- package/lib/pedagogy/ui/ExerciseList.js +53 -0
- package/lib/pedagogy/ui/ExerciseList.js.map +1 -0
- package/lib/pedagogy/ui/ExerciseSeries.d.ts +95 -0
- package/lib/pedagogy/ui/ExerciseSeries.d.ts.map +1 -0
- package/lib/pedagogy/ui/ExerciseSeries.js +74 -0
- package/lib/pedagogy/ui/ExerciseSeries.js.map +1 -0
- package/lib/pedagogy/ui/QuestionCard.d.ts +64 -0
- package/lib/pedagogy/ui/QuestionCard.d.ts.map +1 -0
- package/lib/pedagogy/ui/QuestionCard.js +73 -0
- package/lib/pedagogy/ui/QuestionCard.js.map +1 -0
- package/lib/pedagogy/ui/index.d.ts +10 -0
- package/lib/pedagogy/ui/index.d.ts.map +1 -1
- package/lib/pedagogy/ui/index.js +6 -0
- package/lib/pedagogy/ui/index.js.map +1 -1
- package/lib/pedagogy/ui/seriesCounts.d.ts +17 -0
- package/lib/pedagogy/ui/seriesCounts.d.ts.map +1 -0
- package/lib/pedagogy/ui/seriesCounts.js +27 -0
- package/lib/pedagogy/ui/seriesCounts.js.map +1 -0
- package/lib/pedagogy/ui/seriesParts.d.ts +55 -0
- package/lib/pedagogy/ui/seriesParts.d.ts.map +1 -0
- package/lib/pedagogy/ui/seriesParts.js +38 -0
- package/lib/pedagogy/ui/seriesParts.js.map +1 -0
- package/lib/pedagogy/ui/useAttemptRecords.d.ts +10 -0
- package/lib/pedagogy/ui/useAttemptRecords.d.ts.map +1 -0
- package/lib/pedagogy/ui/useAttemptRecords.js +11 -0
- package/lib/pedagogy/ui/useAttemptRecords.js.map +1 -0
- package/lib/periodic/ui/PeriodicTable.d.ts.map +1 -1
- package/lib/periodic/ui/PeriodicTable.js +6 -3
- package/lib/periodic/ui/PeriodicTable.js.map +1 -1
- package/lib/property/core/copyableText.d.ts +14 -0
- package/lib/property/core/copyableText.d.ts.map +1 -0
- package/lib/property/core/copyableText.js +21 -0
- package/lib/property/core/copyableText.js.map +1 -0
- package/lib/property/core/index.d.ts +2 -0
- package/lib/property/core/index.d.ts.map +1 -0
- package/lib/property/core/index.js +2 -0
- package/lib/property/core/index.js.map +1 -0
- package/lib/property/ui/PropertyTable.d.ts +43 -0
- package/lib/property/ui/PropertyTable.d.ts.map +1 -0
- package/lib/property/ui/PropertyTable.js +19 -0
- package/lib/property/ui/PropertyTable.js.map +1 -0
- package/lib/property/ui/index.d.ts +3 -0
- package/lib/property/ui/index.d.ts.map +1 -0
- package/lib/property/ui/index.js +2 -0
- package/lib/property/ui/index.js.map +1 -0
- package/lib/raman.d.ts +16 -0
- package/lib/raman.d.ts.map +1 -0
- package/lib/raman.js +12 -0
- package/lib/raman.js.map +1 -0
- package/lib/router/core/history.d.ts +24 -3
- package/lib/router/core/history.d.ts.map +1 -1
- package/lib/router/core/history.js +55 -7
- package/lib/router/core/history.js.map +1 -1
- package/lib/router/core/index.d.ts +3 -3
- package/lib/router/core/index.d.ts.map +1 -1
- package/lib/router/core/index.js +2 -2
- package/lib/router/core/index.js.map +1 -1
- package/lib/router/core/languageRoute.d.ts +61 -0
- package/lib/router/core/languageRoute.d.ts.map +1 -0
- package/lib/router/core/languageRoute.js +96 -0
- package/lib/router/core/languageRoute.js.map +1 -0
- package/lib/router/core/siteAddresses.d.ts +23 -0
- package/lib/router/core/siteAddresses.d.ts.map +1 -1
- package/lib/router/core/siteAddresses.js +26 -0
- package/lib/router/core/siteAddresses.js.map +1 -1
- package/lib/router/core/tabRouter.d.ts +2 -108
- package/lib/router/core/tabRouter.d.ts.map +1 -1
- package/lib/router/core/tabRouter.js +38 -5
- package/lib/router/core/tabRouter.js.map +1 -1
- package/lib/router/core/tabRouterTypes.d.ts +154 -0
- package/lib/router/core/tabRouterTypes.d.ts.map +1 -0
- package/lib/router/core/tabRouterTypes.js +2 -0
- package/lib/router/core/tabRouterTypes.js.map +1 -0
- package/lib/seo/core/fitDescription.d.ts +40 -0
- package/lib/seo/core/fitDescription.d.ts.map +1 -0
- package/lib/seo/core/fitDescription.js +45 -0
- package/lib/seo/core/fitDescription.js.map +1 -0
- package/lib/seo/core/index.d.ts +7 -0
- package/lib/seo/core/index.d.ts.map +1 -1
- package/lib/seo/core/index.js +4 -0
- package/lib/seo/core/index.js.map +1 -1
- package/lib/seo/core/limits.d.ts +24 -0
- package/lib/seo/core/limits.d.ts.map +1 -0
- package/lib/seo/core/limits.js +24 -0
- package/lib/seo/core/limits.js.map +1 -0
- package/lib/seo/core/pageContent.d.ts +25 -0
- package/lib/seo/core/pageContent.d.ts.map +1 -0
- package/lib/seo/core/pageContent.js +25 -0
- package/lib/seo/core/pageContent.js.map +1 -0
- package/lib/seo/core/plainDescription.d.ts.map +1 -1
- package/lib/seo/core/plainDescription.js +3 -2
- package/lib/seo/core/plainDescription.js.map +1 -1
- package/lib/seo/core/routeProblems.d.ts.map +1 -1
- package/lib/seo/core/routeProblems.js +1 -6
- package/lib/seo/core/routeProblems.js.map +1 -1
- package/lib/seo/core/routeTable.d.ts +31 -0
- package/lib/seo/core/routeTable.d.ts.map +1 -0
- package/lib/seo/core/routeTable.js +96 -0
- package/lib/seo/core/routeTable.js.map +1 -0
- package/lib/seo/vite/index.d.ts +2 -0
- package/lib/seo/vite/index.d.ts.map +1 -1
- package/lib/seo/vite/index.js +1 -0
- package/lib/seo/vite/index.js.map +1 -1
- package/lib/seo/vite/prerender.d.ts +10 -0
- package/lib/seo/vite/prerender.d.ts.map +1 -1
- package/lib/seo/vite/prerender.js +12 -1
- package/lib/seo/vite/prerender.js.map +1 -1
- package/lib/seo/vite/routeTable.d.ts +40 -0
- package/lib/seo/vite/routeTable.d.ts.map +1 -0
- package/lib/seo/vite/routeTable.js +44 -0
- package/lib/seo/vite/routeTable.js.map +1 -0
- package/lib/server/answerAddresses.d.ts +51 -0
- package/lib/server/answerAddresses.d.ts.map +1 -0
- package/lib/server/answerAddresses.js +72 -0
- package/lib/server/answerAddresses.js.map +1 -0
- package/lib/server/cardMeta.d.ts +57 -0
- package/lib/server/cardMeta.d.ts.map +1 -0
- package/lib/server/cardMeta.js +52 -0
- package/lib/server/cardMeta.js.map +1 -0
- package/lib/server/config.d.ts +72 -0
- package/lib/server/config.d.ts.map +1 -0
- package/lib/server/config.js +67 -0
- package/lib/server/config.js.map +1 -0
- package/lib/server/envNumber.d.ts +35 -0
- package/lib/server/envNumber.d.ts.map +1 -0
- package/lib/server/envNumber.js +42 -0
- package/lib/server/envNumber.js.map +1 -0
- package/lib/server/healthRoute.d.ts +26 -0
- package/lib/server/healthRoute.d.ts.map +1 -0
- package/lib/server/healthRoute.js +22 -0
- package/lib/server/healthRoute.js.map +1 -0
- package/lib/server/listenSite.d.ts +38 -0
- package/lib/server/listenSite.d.ts.map +1 -0
- package/lib/server/listenSite.js +60 -0
- package/lib/server/listenSite.js.map +1 -0
- package/lib/server/mcpServer.d.ts +8 -0
- package/lib/server/mcpServer.d.ts.map +1 -0
- package/lib/server/mcpServer.js +11 -0
- package/lib/server/mcpServer.js.map +1 -0
- package/lib/server/repositoryVersion.d.ts +16 -0
- package/lib/server/repositoryVersion.d.ts.map +1 -0
- package/lib/server/repositoryVersion.js +33 -0
- package/lib/server/repositoryVersion.js.map +1 -0
- package/lib/server/routeOptions.d.ts +23 -0
- package/lib/server/routeOptions.d.ts.map +1 -0
- package/lib/server/routeOptions.js +20 -0
- package/lib/server/routeOptions.js.map +1 -0
- package/lib/server/routeTable.d.ts +14 -0
- package/lib/server/routeTable.d.ts.map +1 -0
- package/lib/server/routeTable.js +32 -0
- package/lib/server/routeTable.js.map +1 -0
- package/lib/server/siteView.d.ts +29 -0
- package/lib/server/siteView.d.ts.map +1 -0
- package/lib/server/siteView.js +21 -0
- package/lib/server/siteView.js.map +1 -0
- package/lib/server/spaPages.d.ts +32 -0
- package/lib/server/spaPages.d.ts.map +1 -0
- package/lib/server/spaPages.js +126 -0
- package/lib/server/spaPages.js.map +1 -0
- package/lib/server/spaSite.d.ts +30 -0
- package/lib/server/spaSite.d.ts.map +1 -0
- package/lib/server/spaSite.js +170 -0
- package/lib/server/spaSite.js.map +1 -0
- package/lib/server/spaSiteOptions.d.ts +126 -0
- package/lib/server/spaSiteOptions.d.ts.map +1 -0
- package/lib/server/spaSiteOptions.js +2 -0
- package/lib/server/spaSiteOptions.js.map +1 -0
- package/lib/server/staticSite.d.ts +9 -0
- package/lib/server/staticSite.d.ts.map +1 -1
- package/lib/server/staticSite.js +41 -19
- package/lib/server/staticSite.js.map +1 -1
- package/lib/server/toolSiteServer.d.ts +77 -0
- package/lib/server/toolSiteServer.d.ts.map +1 -0
- package/lib/server/toolSiteServer.js +58 -0
- package/lib/server/toolSiteServer.js.map +1 -0
- package/lib/server/trustProxy.d.ts +20 -0
- package/lib/server/trustProxy.d.ts.map +1 -0
- package/lib/server/trustProxy.js +32 -0
- package/lib/server/trustProxy.js.map +1 -0
- package/lib/server/types.d.ts +13 -0
- package/lib/server/types.d.ts.map +1 -0
- package/lib/server/types.js +2 -0
- package/lib/server/types.js.map +1 -0
- package/lib/server.d.ts +22 -0
- package/lib/server.d.ts.map +1 -1
- package/lib/server.js +12 -0
- package/lib/server.js.map +1 -1
- package/lib/share/core/config.d.ts +18 -0
- package/lib/share/core/config.d.ts.map +1 -1
- package/lib/share/core/config.js +33 -2
- package/lib/share/core/config.js.map +1 -1
- package/lib/share/core/index.d.ts +3 -1
- package/lib/share/core/index.d.ts.map +1 -1
- package/lib/share/core/index.js +2 -1
- package/lib/share/core/index.js.map +1 -1
- package/lib/share/core/keySetParam.d.ts +40 -0
- package/lib/share/core/keySetParam.d.ts.map +1 -0
- package/lib/share/core/keySetParam.js +60 -0
- package/lib/share/core/keySetParam.js.map +1 -0
- package/lib/share/core/vocabulary.d.ts +8 -0
- package/lib/share/core/vocabulary.d.ts.map +1 -1
- package/lib/shell/ui/ShareControl.d.ts +75 -0
- package/lib/shell/ui/ShareControl.d.ts.map +1 -0
- package/lib/shell/ui/ShareControl.js +40 -0
- package/lib/shell/ui/ShareControl.js.map +1 -0
- package/lib/shell/ui/ShellFrame.d.ts +14 -0
- package/lib/shell/ui/ShellFrame.d.ts.map +1 -0
- package/lib/shell/ui/ShellFrame.js +45 -0
- package/lib/shell/ui/ShellFrame.js.map +1 -0
- package/lib/shell/ui/SiteShell.d.ts +251 -0
- package/lib/shell/ui/SiteShell.d.ts.map +1 -0
- package/lib/shell/ui/SiteShell.js +39 -0
- package/lib/shell/ui/SiteShell.js.map +1 -0
- package/lib/shell/ui/index.d.ts +5 -0
- package/lib/shell/ui/index.d.ts.map +1 -0
- package/lib/shell/ui/index.js +3 -0
- package/lib/shell/ui/index.js.map +1 -0
- package/lib/state/core/index.d.ts +1 -0
- package/lib/state/core/index.d.ts.map +1 -1
- package/lib/state/core/index.js.map +1 -1
- package/lib/state/core/legacyEntries.d.ts +30 -0
- package/lib/state/core/legacyEntries.d.ts.map +1 -0
- package/lib/state/core/legacyEntries.js +51 -0
- package/lib/state/core/legacyEntries.js.map +1 -0
- package/lib/state/core/persistBucket.d.ts +26 -2
- package/lib/state/core/persistBucket.d.ts.map +1 -1
- package/lib/state/core/persistBucket.js +26 -9
- package/lib/state/core/persistBucket.js.map +1 -1
- package/lib/state/core/persistSignalBucket.d.ts +26 -0
- package/lib/state/core/persistSignalBucket.d.ts.map +1 -1
- package/lib/state/core/persistSignalBucket.js +31 -0
- package/lib/state/core/persistSignalBucket.js.map +1 -1
- package/lib/state/core/storageEntry.d.ts +15 -0
- package/lib/state/core/storageEntry.d.ts.map +1 -1
- package/lib/state/core/storageEntry.js +33 -0
- package/lib/state/core/storageEntry.js.map +1 -1
- package/lib/structure/ui/StructureExportButton.d.ts +27 -0
- package/lib/structure/ui/StructureExportButton.d.ts.map +1 -0
- package/lib/structure/ui/StructureExportButton.js +21 -0
- package/lib/structure/ui/StructureExportButton.js.map +1 -0
- package/lib/structure/ui/index.d.ts +4 -0
- package/lib/structure/ui/index.d.ts.map +1 -1
- package/lib/structure/ui/index.js +2 -0
- package/lib/structure/ui/index.js.map +1 -1
- package/lib/structure/ui/useStructureDraft.d.ts +32 -0
- package/lib/structure/ui/useStructureDraft.d.ts.map +1 -0
- package/lib/structure/ui/useStructureDraft.js +20 -0
- package/lib/structure/ui/useStructureDraft.js.map +1 -0
- package/lib/ui.d.ts +2 -0
- package/lib/ui.d.ts.map +1 -1
- package/lib/ui.js +2 -0
- package/lib/ui.js.map +1 -1
- package/lib/worker/core/index.d.ts +1 -1
- package/lib/worker/core/index.d.ts.map +1 -1
- package/lib/worker/core/messages.d.ts +4 -2
- package/lib/worker/core/messages.d.ts.map +1 -1
- package/lib/worker/core/messages.js.map +1 -1
- package/lib/worker/core/oclResourcesUrl.d.ts +16 -0
- package/lib/worker/core/oclResourcesUrl.d.ts.map +1 -0
- package/lib/worker/core/oclResourcesUrl.js +19 -0
- package/lib/worker/core/oclResourcesUrl.js.map +1 -0
- package/lib/worker/core/serveWorkerRequests.d.ts +8 -0
- package/lib/worker/core/serveWorkerRequests.d.ts.map +1 -1
- package/lib/worker/core/serveWorkerRequests.js +15 -2
- package/lib/worker/core/serveWorkerRequests.js.map +1 -1
- package/lib/worker/core/workerChannel.d.ts +3 -4
- package/lib/worker/core/workerChannel.d.ts.map +1 -1
- package/lib/worker/core/workerChannel.js +72 -67
- package/lib/worker/core/workerChannel.js.map +1 -1
- package/lib/worker/core/workerChannelParts.d.ts +17 -6
- package/lib/worker/core/workerChannelParts.d.ts.map +1 -1
- package/lib/worker/core/workerChannelParts.js +20 -4
- package/lib/worker/core/workerChannelParts.js.map +1 -1
- package/lib/worker/core/workerChannelTypes.d.ts +46 -2
- package/lib/worker/core/workerChannelTypes.d.ts.map +1 -1
- package/lib/worker/core/workerSlot.d.ts +66 -0
- package/lib/worker/core/workerSlot.d.ts.map +1 -0
- package/lib/worker/core/workerSlot.js +107 -0
- package/lib/worker/core/workerSlot.js.map +1 -0
- package/package.json +17 -1
- package/src/card/core/cardAddress.ts +100 -0
- package/src/card/core/cardPageUrl.ts +97 -0
- package/src/card/core/index.ts +6 -0
- package/src/card/core/panelRoom.ts +66 -0
- package/src/card/ui/CardDetailsButton.tsx +104 -0
- package/src/card/ui/CardFigure.tsx +86 -0
- package/src/card/ui/CardFrame.tsx +46 -0
- package/src/card/ui/CopyTableButton.tsx +81 -0
- package/src/card/ui/cardTooltip.ts +18 -0
- package/src/card/ui/embed.ts +27 -0
- package/src/card/ui/fitCardToFrame.ts +76 -0
- package/src/card/ui/holdRoomForPanels.ts +83 -0
- package/src/card/ui/index.ts +14 -0
- package/src/card/ui/openPanels.ts +106 -0
- package/src/card.ts +13 -0
- package/src/conformers.ts +4 -0
- package/src/core.ts +5 -0
- package/src/fetch/core/apiError.ts +65 -0
- package/src/fetch/core/fetchJson.ts +129 -0
- package/src/fetch/core/index.ts +4 -0
- package/src/formula/core/formulaText.ts +96 -0
- package/src/formula/core/index.ts +20 -0
- package/src/formula/core/normalizeFormula.ts +50 -0
- package/src/formula/core/readFormula.ts +211 -0
- package/src/formula/ui/CopyableFormula.tsx +51 -0
- package/src/formula/ui/FormulaInput.tsx +50 -0
- package/src/formula/ui/QuestionFormula.tsx +20 -0
- package/src/formula/ui/index.ts +6 -0
- package/src/formula.ts +11 -0
- package/src/hooks/ui/index.ts +1 -0
- package/src/hooks/ui/keyTargets.ts +5 -3
- package/src/hooks/ui/useAsync.ts +50 -14
- package/src/ir/core/analysisSpectra.ts +26 -10
- package/src/ir/core/bandLabelPlan.ts +21 -10
- package/src/ir/core/index.ts +25 -5
- package/src/ir/core/irBand.ts +52 -14
- package/src/ir/core/irCommands.ts +15 -1
- package/src/ir/core/irDomain.ts +9 -7
- package/src/ir/core/irFormat.ts +39 -6
- package/src/ir/core/irMode.ts +42 -10
- package/src/ir/core/irReducer.ts +1 -49
- package/src/ir/core/irSpectrum.ts +59 -30
- package/src/ir/core/irState.ts +67 -2
- package/src/ir/core/irTechnique.ts +115 -0
- package/src/ir/core/irTechniqueCommands.ts +82 -0
- package/src/ir/core/pickBands.ts +63 -28
- package/src/ir/core/ramanBands.ts +105 -0
- package/src/ir/core/spectrumJcamp.ts +65 -16
- package/src/ir/core/toIrSpectrum.ts +20 -2
- package/src/ir/ui/BandRow.tsx +107 -0
- package/src/ir/ui/BandsPanel.tsx +32 -125
- package/src/ir/ui/IrAboutDialog.tsx +69 -28
- package/src/ir/ui/IrCanvas.tsx +2 -1
- package/src/ir/ui/IrChart.tsx +20 -24
- package/src/ir/ui/IrCommandProvider.tsx +10 -3
- package/src/ir/ui/IrCommandTooltip.tsx +11 -2
- package/src/ir/ui/IrDocumentationDialog.tsx +99 -55
- package/src/ir/ui/IrEditor.tsx +5 -36
- package/src/ir/ui/IrHeader.tsx +10 -3
- package/src/ir/ui/IrLogo.tsx +28 -9
- package/src/ir/ui/IrShell.tsx +27 -75
- package/src/ir/ui/IrStatusBar.tsx +17 -12
- package/src/ir/ui/IrToolbar.tsx +26 -15
- package/src/ir/ui/IrTraces.tsx +5 -1
- package/src/ir/ui/RamanEditor.tsx +53 -0
- package/src/ir/ui/SpectraPanel.tsx +2 -1
- package/src/ir/ui/SpectrumRow.tsx +14 -5
- package/src/ir/ui/VibrationalEditor.tsx +94 -0
- package/src/ir/ui/bandsTsv.ts +46 -0
- package/src/ir/ui/irChartProps.ts +14 -4
- package/src/ir/ui/irCommandContext.tsx +18 -3
- package/src/ir/ui/useIrEditor.ts +20 -8
- package/src/ir/ui/useIrHandle.ts +51 -0
- package/src/ir/ui/useIrText.ts +170 -0
- package/src/ir/ui/useIrZoom.ts +12 -3
- package/src/ir/ui/useValueAxisZoom.ts +67 -0
- package/src/ir.ts +3 -0
- package/src/locales/de.json +57 -1
- package/src/locales/en.json +57 -1
- package/src/locales/es.json +57 -1
- package/src/locales/fr.json +57 -1
- package/src/locales/it.json +57 -1
- package/src/moleculesClient/core/index.ts +19 -0
- package/src/moleculesClient/core/moleculesClient.ts +175 -0
- package/src/moleculesClient/core/moleculesClientApi.ts +120 -0
- package/src/moleculesClient/core/moleculesTypes.ts +163 -0
- package/src/moleculesClient/core/requestRetry.ts +118 -0
- package/src/molstar/core/camera.ts +3 -2
- package/src/molstar/core/framing.ts +200 -0
- package/src/molstar/core/hover.ts +26 -0
- package/src/molstar/core/index.ts +21 -1
- package/src/pedagogy/core/answers.ts +94 -0
- package/src/pedagogy/core/attempts.ts +205 -0
- package/src/pedagogy/core/index.ts +36 -0
- package/src/pedagogy/core/progressController.ts +116 -0
- package/src/pedagogy/core/seed.ts +177 -0
- package/src/pedagogy/core/series.ts +82 -0
- package/src/pedagogy/ui/AnswerFields.tsx +63 -0
- package/src/pedagogy/ui/ExerciseList.tsx +202 -0
- package/src/pedagogy/ui/ExerciseSeries.tsx +250 -0
- package/src/pedagogy/ui/QuestionCard.tsx +231 -0
- package/src/pedagogy/ui/index.ts +18 -0
- package/src/pedagogy/ui/seriesCounts.ts +34 -0
- package/src/pedagogy/ui/seriesParts.tsx +127 -0
- package/src/pedagogy/ui/useAttemptRecords.ts +16 -0
- package/src/periodic/ui/PeriodicTable.tsx +6 -3
- package/src/property/core/copyableText.ts +20 -0
- package/src/property/core/index.ts +1 -0
- package/src/property/ui/PropertyTable.tsx +83 -0
- package/src/property/ui/index.ts +2 -0
- package/src/raman.ts +19 -0
- package/src/router/core/history.ts +61 -7
- package/src/router/core/index.ts +3 -2
- package/src/router/core/languageRoute.ts +136 -0
- package/src/router/core/siteAddresses.ts +38 -0
- package/src/router/core/tabRouter.ts +59 -117
- package/src/router/core/tabRouterTypes.ts +158 -0
- package/src/seo/core/fitDescription.ts +74 -0
- package/src/seo/core/index.ts +17 -0
- package/src/seo/core/limits.ts +27 -0
- package/src/seo/core/pageContent.ts +42 -0
- package/src/seo/core/plainDescription.ts +4 -2
- package/src/seo/core/routeProblems.ts +1 -7
- package/src/seo/core/routeTable.ts +103 -0
- package/src/seo/vite/index.ts +2 -0
- package/src/seo/vite/prerender.ts +26 -1
- package/src/seo/vite/routeTable.ts +79 -0
- package/src/server/answerAddresses.ts +92 -0
- package/src/server/cardMeta.ts +88 -0
- package/src/server/config.ts +125 -0
- package/src/server/envNumber.ts +65 -0
- package/src/server/healthRoute.ts +42 -0
- package/src/server/listenSite.ts +90 -0
- package/src/server/mcpServer.ts +14 -0
- package/src/server/repositoryVersion.ts +33 -0
- package/src/server/routeOptions.ts +26 -0
- package/src/server/routeTable.ts +35 -0
- package/src/server/siteView.ts +42 -0
- package/src/server/spaPages.ts +179 -0
- package/src/server/spaSite.ts +216 -0
- package/src/server/spaSiteOptions.ts +133 -0
- package/src/server/staticSite.ts +65 -35
- package/src/server/toolSiteServer.ts +127 -0
- package/src/server/trustProxy.ts +32 -0
- package/src/server/types.ts +25 -0
- package/src/server.ts +40 -0
- package/src/share/core/config.ts +45 -2
- package/src/share/core/index.ts +4 -0
- package/src/share/core/keySetParam.ts +92 -0
- package/src/share/core/vocabulary.ts +8 -0
- package/src/shell/ui/ShareControl.tsx +150 -0
- package/src/shell/ui/ShellFrame.tsx +180 -0
- package/src/shell/ui/SiteShell.tsx +297 -0
- package/src/shell/ui/index.ts +9 -0
- package/src/state/core/index.ts +1 -0
- package/src/state/core/legacyEntries.ts +76 -0
- package/src/state/core/persistBucket.ts +50 -10
- package/src/state/core/persistSignalBucket.ts +52 -0
- package/src/state/core/storageEntry.ts +32 -0
- package/src/structure/ui/StructureExportButton.tsx +57 -0
- package/src/structure/ui/index.ts +4 -0
- package/src/structure/ui/useStructureDraft.ts +47 -0
- package/src/ui.ts +2 -0
- package/src/worker/core/index.ts +1 -0
- package/src/worker/core/messages.ts +4 -3
- package/src/worker/core/oclResourcesUrl.ts +21 -0
- package/src/worker/core/serveWorkerRequests.ts +30 -2
- package/src/worker/core/workerChannel.ts +74 -74
- package/src/worker/core/workerChannelParts.ts +33 -13
- package/src/worker/core/workerChannelTypes.ts +47 -2
- package/src/worker/core/workerSlot.ts +181 -0
- package/styles/card.css +145 -0
- package/styles/chrome.css +248 -0
package/src/ir/ui/BandsPanel.tsx
CHANGED
|
@@ -1,22 +1,21 @@
|
|
|
1
|
-
import { Icon } from '@blueprintjs/core';
|
|
2
1
|
import { useMemo } from 'react';
|
|
3
2
|
import { Button, Toolbar } from 'react-science/ui';
|
|
4
3
|
|
|
5
4
|
import {
|
|
6
5
|
panelBodyStyle,
|
|
7
|
-
panelCellStyle,
|
|
8
6
|
panelEmptyStyle,
|
|
9
7
|
panelHeaderCellStyle,
|
|
10
|
-
panelNumberCellStyle,
|
|
11
8
|
panelStyle,
|
|
12
9
|
panelTableStyle,
|
|
13
10
|
panelToolbarStyle,
|
|
14
11
|
} from '../../panel/core/panelStyles.ts';
|
|
15
|
-
import type { AssignedBand } from '../core/assignBands.ts';
|
|
16
12
|
import type { IrBand } from '../core/irBand.ts';
|
|
17
13
|
import { sameIrBand } from '../core/irBand.ts';
|
|
18
|
-
import {
|
|
14
|
+
import { shortModeLabel } from '../core/irFormat.ts';
|
|
15
|
+
import { IR_TECHNIQUE_RULES } from '../core/irTechnique.ts';
|
|
19
16
|
|
|
17
|
+
import { BandRow } from './BandRow.tsx';
|
|
18
|
+
import { bandsToTsv } from './bandsTsv.ts';
|
|
20
19
|
import { useIrActions, useIrEditorState } from './irStateContext.ts';
|
|
21
20
|
|
|
22
21
|
export interface BandsPanelProps {
|
|
@@ -45,6 +44,10 @@ export interface BandsPanelProps {
|
|
|
45
44
|
* Hovering a row marks the band on the chart and hovering the chart lights the
|
|
46
45
|
* row, which is the whole reason the highlight is threaded through the shell
|
|
47
46
|
* rather than held here: the two views are of one thing.
|
|
47
|
+
*
|
|
48
|
+
* For a technique the correlation table does not cover — Raman — the column of
|
|
49
|
+
* candidates and the button naming them are left out, and the table is the
|
|
50
|
+
* bands themselves.
|
|
48
51
|
* @param props - Component props.
|
|
49
52
|
* @returns The panel.
|
|
50
53
|
*/
|
|
@@ -52,11 +55,16 @@ export function BandsPanel(props: BandsPanelProps) {
|
|
|
52
55
|
const { highlight = null, onHighlight } = props;
|
|
53
56
|
const { state, selectedSpectrum, assigned } = useIrEditorState();
|
|
54
57
|
const actions = useIrActions();
|
|
55
|
-
const { mode, pickBands, showAssignments, picking } =
|
|
58
|
+
const { mode, pickBands, showAssignments, picking, technique } =
|
|
59
|
+
state.settings;
|
|
60
|
+
const { assignments } = IR_TECHNIQUE_RULES[technique];
|
|
56
61
|
|
|
57
62
|
const rows = useMemo(() => assigned, [assigned]);
|
|
58
63
|
|
|
59
|
-
const tsv = useMemo(
|
|
64
|
+
const tsv = useMemo(
|
|
65
|
+
() => bandsToTsv(rows, mode, assignments),
|
|
66
|
+
[rows, mode, assignments],
|
|
67
|
+
);
|
|
60
68
|
|
|
61
69
|
return (
|
|
62
70
|
<div style={panelStyle}>
|
|
@@ -69,16 +77,18 @@ export function BandsPanel(props: BandsPanelProps) {
|
|
|
69
77
|
aria-label="Pick the bands"
|
|
70
78
|
onClick={() => actions.setSettings({ pickBands: !pickBands })}
|
|
71
79
|
/>
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
80
|
+
{assignments ? (
|
|
81
|
+
<Toolbar.Item
|
|
82
|
+
icon="label"
|
|
83
|
+
active={showAssignments}
|
|
84
|
+
tooltip="Name the assignments on the chart"
|
|
85
|
+
aria-label="Name the assignments on the chart"
|
|
86
|
+
disabled={!pickBands}
|
|
87
|
+
onClick={() =>
|
|
88
|
+
actions.setSettings({ showAssignments: !showAssignments })
|
|
89
|
+
}
|
|
90
|
+
/>
|
|
91
|
+
) : null}
|
|
82
92
|
</Toolbar>
|
|
83
93
|
|
|
84
94
|
{/* The threshold is the one picking setting worth reaching for while
|
|
@@ -134,9 +144,11 @@ export function BandsPanel(props: BandsPanelProps) {
|
|
|
134
144
|
<th style={panelHeaderCellStyle}>cm⁻¹</th>
|
|
135
145
|
<th style={panelHeaderCellStyle} />
|
|
136
146
|
<th style={{ ...panelHeaderCellStyle, textAlign: 'right' }}>
|
|
137
|
-
{mode
|
|
147
|
+
{shortModeLabel(mode)}
|
|
138
148
|
</th>
|
|
139
|
-
|
|
149
|
+
{assignments ? (
|
|
150
|
+
<th style={panelHeaderCellStyle}>could be</th>
|
|
151
|
+
) : null}
|
|
140
152
|
</tr>
|
|
141
153
|
</thead>
|
|
142
154
|
<tbody>
|
|
@@ -145,6 +157,7 @@ export function BandsPanel(props: BandsPanelProps) {
|
|
|
145
157
|
key={`${entry.band.spectrumId} ${entry.band.wavenumber}`}
|
|
146
158
|
entry={entry}
|
|
147
159
|
mode={mode}
|
|
160
|
+
assignments={assignments}
|
|
148
161
|
lit={sameIrBand(entry.band, highlight)}
|
|
149
162
|
onHighlight={onHighlight}
|
|
150
163
|
/>
|
|
@@ -157,112 +170,6 @@ export function BandsPanel(props: BandsPanelProps) {
|
|
|
157
170
|
);
|
|
158
171
|
}
|
|
159
172
|
|
|
160
|
-
interface BandRowProps {
|
|
161
|
-
/** The band and everything it might be. */
|
|
162
|
-
entry: AssignedBand;
|
|
163
|
-
/** Which value axis is being read. */
|
|
164
|
-
mode: 'absorbance' | 'transmittance';
|
|
165
|
-
/** Whether the pointer is on this band, here or on the chart. */
|
|
166
|
-
lit: boolean;
|
|
167
|
-
/** Told when the pointer arrives on this row, and when it leaves. */
|
|
168
|
-
onHighlight?: (band: IrBand | null) => void;
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
/**
|
|
172
|
-
* One band: where it is, how strong, and every vibration it could be.
|
|
173
|
-
*
|
|
174
|
-
* The candidates are written as one line rather than a list, so a strong band
|
|
175
|
-
* with four of them stays one row of the table and the wavenumbers keep reading
|
|
176
|
-
* down the column. The `title` carries them again with each one's note, which is
|
|
177
|
-
* where the reason to prefer one lives.
|
|
178
|
-
* @param props - Component props.
|
|
179
|
-
* @returns The row.
|
|
180
|
-
*/
|
|
181
|
-
function BandRow(props: BandRowProps) {
|
|
182
|
-
const { entry, mode, lit, onHighlight } = props;
|
|
183
|
-
const { band, candidates } = entry;
|
|
184
|
-
|
|
185
|
-
const value = mode === 'absorbance' ? band.absorbance : band.transmittance;
|
|
186
|
-
const detail = candidates
|
|
187
|
-
.map((candidate) =>
|
|
188
|
-
candidate.note === undefined
|
|
189
|
-
? `${candidate.group} ${candidate.vibration}`
|
|
190
|
-
: `${candidate.group} ${candidate.vibration} — ${candidate.note}`,
|
|
191
|
-
)
|
|
192
|
-
.join('\n');
|
|
193
|
-
|
|
194
|
-
return (
|
|
195
|
-
<tr
|
|
196
|
-
style={lit ? litRowStyle : undefined}
|
|
197
|
-
onPointerEnter={() => onHighlight?.(band)}
|
|
198
|
-
onPointerLeave={() => onHighlight?.(null)}
|
|
199
|
-
>
|
|
200
|
-
<td style={panelNumberCellStyle}>{formatWavenumber(band.wavenumber)}</td>
|
|
201
|
-
<td style={panelCellStyle} title={STRENGTH_TITLES[band.strength]}>
|
|
202
|
-
{band.strength}
|
|
203
|
-
</td>
|
|
204
|
-
<td style={panelNumberCellStyle}>{formatIrValue(value, mode)}</td>
|
|
205
|
-
<td style={panelCellStyle} title={detail}>
|
|
206
|
-
{candidates.length === 0 ? (
|
|
207
|
-
<span style={{ opacity: 0.5 }}>—</span>
|
|
208
|
-
) : (
|
|
209
|
-
<span style={{ whiteSpace: 'normal' }}>
|
|
210
|
-
{candidates[0]?.group} {candidates[0]?.vibration}
|
|
211
|
-
{candidates.length > 1 ? (
|
|
212
|
-
<span style={{ opacity: 0.6 }}>
|
|
213
|
-
{' '}
|
|
214
|
-
<Icon icon="more" size={10} /> {candidates.length - 1} more
|
|
215
|
-
</span>
|
|
216
|
-
) : null}
|
|
217
|
-
</span>
|
|
218
|
-
)}
|
|
219
|
-
</td>
|
|
220
|
-
</tr>
|
|
221
|
-
);
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
/** What each strength letter means, for the column that shows only the letter. */
|
|
225
|
-
const STRENGTH_TITLES = {
|
|
226
|
-
w: 'weak, relative to this spectrum',
|
|
227
|
-
m: 'medium, relative to this spectrum',
|
|
228
|
-
S: 'strong, relative to this spectrum',
|
|
229
|
-
} as const;
|
|
230
|
-
|
|
231
|
-
/**
|
|
232
|
-
* The table as text, for pasting into a notebook.
|
|
233
|
-
*
|
|
234
|
-
* Tab separated with every candidate on the row, because the reason to copy a
|
|
235
|
-
* band table is to put it beside a structure and argue about it — and the
|
|
236
|
-
* argument is over the candidates rather than over the wavenumbers.
|
|
237
|
-
* @param rows - The bands, as they are shown.
|
|
238
|
-
* @param mode - Which value axis is being read.
|
|
239
|
-
* @returns The table, one line per band, with a heading.
|
|
240
|
-
*/
|
|
241
|
-
function bandsToTsv(
|
|
242
|
-
rows: readonly AssignedBand[],
|
|
243
|
-
mode: 'absorbance' | 'transmittance',
|
|
244
|
-
): string {
|
|
245
|
-
const heading = ['wavenumber', 'strength', mode, 'could be'].join('\t');
|
|
246
|
-
const lines = rows.map((entry) =>
|
|
247
|
-
[
|
|
248
|
-
formatWavenumber(entry.band.wavenumber),
|
|
249
|
-
entry.band.strength,
|
|
250
|
-
formatIrValue(
|
|
251
|
-
mode === 'absorbance'
|
|
252
|
-
? entry.band.absorbance
|
|
253
|
-
: entry.band.transmittance,
|
|
254
|
-
mode,
|
|
255
|
-
),
|
|
256
|
-
entry.candidates
|
|
257
|
-
.map((candidate) => `${candidate.group} ${candidate.vibration}`)
|
|
258
|
-
.join('; '),
|
|
259
|
-
].join('\t'),
|
|
260
|
-
);
|
|
261
|
-
return [heading, ...lines].join('\n');
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
const litRowStyle = { background: '#fff3e0' } as const;
|
|
265
|
-
|
|
266
173
|
const thresholdStyle = {
|
|
267
174
|
display: 'inline-flex',
|
|
268
175
|
alignItems: 'center',
|
|
@@ -1,12 +1,24 @@
|
|
|
1
1
|
import { Dialog, DialogBody } from '@blueprintjs/core';
|
|
2
2
|
|
|
3
|
+
import { Prose } from '../../i18n/ui/Prose.tsx';
|
|
4
|
+
import { useChromeT } from '../../i18n/ui/useT.ts';
|
|
5
|
+
import { irCommands } from '../core/irCommands.ts';
|
|
6
|
+
import type { IrTechnique } from '../core/irTechnique.ts';
|
|
7
|
+
|
|
3
8
|
import { IrLogo } from './IrLogo.tsx';
|
|
9
|
+
import { useIrText } from './useIrText.ts';
|
|
4
10
|
|
|
5
11
|
export interface IrAboutDialogProps {
|
|
6
12
|
/** Whether the dialog is open. */
|
|
7
13
|
isOpen: boolean;
|
|
8
14
|
/** Close it. */
|
|
9
15
|
onClose: () => void;
|
|
16
|
+
/**
|
|
17
|
+
* What the spectra were measured with, which decides what the viewer says it
|
|
18
|
+
* does and whom it credits for it.
|
|
19
|
+
* @default 'infrared'
|
|
20
|
+
*/
|
|
21
|
+
technique?: IrTechnique;
|
|
10
22
|
}
|
|
11
23
|
|
|
12
24
|
/**
|
|
@@ -20,42 +32,63 @@ export interface IrAboutDialogProps {
|
|
|
20
32
|
* @returns The dialog.
|
|
21
33
|
*/
|
|
22
34
|
export function IrAboutDialog(props: IrAboutDialogProps) {
|
|
23
|
-
const { isOpen, onClose } = props;
|
|
35
|
+
const { isOpen, onClose, technique = 'infrared' } = props;
|
|
36
|
+
const t = useChromeT();
|
|
37
|
+
const title = (useIrText(technique).command('about') ?? irCommands.about)
|
|
38
|
+
.title;
|
|
39
|
+
const raman = technique === 'raman';
|
|
24
40
|
|
|
25
41
|
return (
|
|
26
42
|
<Dialog
|
|
27
43
|
isOpen={isOpen}
|
|
28
44
|
onClose={onClose}
|
|
29
|
-
title=
|
|
30
|
-
icon={<IrLogo size={20} />}
|
|
45
|
+
title={title}
|
|
46
|
+
icon={<IrLogo size={20} technique={technique} />}
|
|
31
47
|
style={dialogStyle}
|
|
32
48
|
>
|
|
33
49
|
<DialogBody>
|
|
34
50
|
<div style={brandStyle}>
|
|
35
|
-
<IrLogo size={64} />
|
|
51
|
+
<IrLogo size={64} technique={technique} />
|
|
36
52
|
<div>
|
|
37
|
-
<p style={leadStyle}>
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
53
|
+
<p style={leadStyle}>{DOORS[technique]}</p>
|
|
54
|
+
{raman ? (
|
|
55
|
+
<p style={paragraphStyle}>{t('ir.raman.aboutLead')}</p>
|
|
56
|
+
) : (
|
|
57
|
+
<p style={paragraphStyle}>
|
|
58
|
+
Draws an infrared spectrum the way infrared is printed, reads it
|
|
59
|
+
as absorbance or as percent transmittance, picks its bands and
|
|
60
|
+
offers every functional group each band could be.
|
|
61
|
+
</p>
|
|
62
|
+
)}
|
|
43
63
|
</div>
|
|
44
64
|
</div>
|
|
45
65
|
|
|
46
66
|
<h4 style={headingStyle}>Credits</h4>
|
|
47
67
|
<ul style={listStyle}>
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
68
|
+
{raman ? (
|
|
69
|
+
<>
|
|
70
|
+
<li>
|
|
71
|
+
<Prose text={t('ir.raman.credit.picking')} />
|
|
72
|
+
</li>
|
|
73
|
+
<li>
|
|
74
|
+
<Prose text={t('ir.raman.credit.jcamp')} />
|
|
75
|
+
</li>
|
|
76
|
+
</>
|
|
77
|
+
) : (
|
|
78
|
+
<>
|
|
79
|
+
<li>
|
|
80
|
+
<strong>ir-spectrum</strong> (cheminfo, MIT) reads the JCAMP-DX
|
|
81
|
+
and SPC files, derives the absorbance/transmittance pair, and
|
|
82
|
+
picks the bands. This package deliberately does none of that
|
|
83
|
+
arithmetic itself.
|
|
84
|
+
</li>
|
|
85
|
+
<li>
|
|
86
|
+
<strong>common-spectrum</strong>,{' '}
|
|
87
|
+
<strong>jcampconverter</strong> and <strong>spc-parser</strong>{' '}
|
|
88
|
+
(cheminfo, MIT) are what it reads through.
|
|
89
|
+
</li>
|
|
90
|
+
</>
|
|
91
|
+
)}
|
|
59
92
|
<li>
|
|
60
93
|
<strong>ml-spectra-processing</strong> (mljs, MIT) for the array
|
|
61
94
|
work.
|
|
@@ -69,13 +102,15 @@ export function IrAboutDialog(props: IrAboutDialogProps) {
|
|
|
69
102
|
<strong>react-science</strong> and <strong>BlueprintJS</strong>
|
|
70
103
|
(zakodium, Palantir) for the shell this viewer is shaped like.
|
|
71
104
|
</li>
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
105
|
+
{raman ? null : (
|
|
106
|
+
<li>
|
|
107
|
+
The <strong>correlation table</strong> is the conventional
|
|
108
|
+
teaching set of group frequencies, as any introductory
|
|
109
|
+
spectroscopy text tabulates them. The ranges are deliberately the
|
|
110
|
+
rounded, generous ones: narrowing them to look precise would rule
|
|
111
|
+
out assignments that are genuinely possible.
|
|
112
|
+
</li>
|
|
113
|
+
)}
|
|
79
114
|
<li>
|
|
80
115
|
The <strong>colours</strong> are Okabe and Ito's
|
|
81
116
|
colour-universal palette, so two traces stay distinguishable for a
|
|
@@ -87,6 +122,12 @@ export function IrAboutDialog(props: IrAboutDialogProps) {
|
|
|
87
122
|
);
|
|
88
123
|
}
|
|
89
124
|
|
|
125
|
+
/** The entry point each technique's viewer is imported from. */
|
|
126
|
+
const DOORS: Record<IrTechnique, string> = {
|
|
127
|
+
infrared: 'react-cheminfo/ir',
|
|
128
|
+
raman: 'react-cheminfo/raman',
|
|
129
|
+
};
|
|
130
|
+
|
|
90
131
|
const dialogStyle = { width: 'min(680px, 92vw)' } as const;
|
|
91
132
|
|
|
92
133
|
const brandStyle = {
|
package/src/ir/ui/IrCanvas.tsx
CHANGED
|
@@ -54,7 +54,7 @@ export function IrCanvas(props: IrCanvasProps) {
|
|
|
54
54
|
const { state, visibleSpectra, assigned } = useIrEditorState();
|
|
55
55
|
const actions = useIrActions();
|
|
56
56
|
const { domain, tool, selectedId } = state.view;
|
|
57
|
-
const { mode, showAssignments, labelLimit } = state.settings;
|
|
57
|
+
const { technique, mode, showAssignments, labelLimit } = state.settings;
|
|
58
58
|
|
|
59
59
|
const onDomainChange = useCallback(
|
|
60
60
|
(next: IrDomain) => {
|
|
@@ -68,6 +68,7 @@ export function IrCanvas(props: IrCanvasProps) {
|
|
|
68
68
|
<div ref={attachChart} id={chartId} style={chartStyle}>
|
|
69
69
|
<IrChart
|
|
70
70
|
spectra={visibleSpectra}
|
|
71
|
+
technique={technique}
|
|
71
72
|
mode={mode}
|
|
72
73
|
assigned={assigned}
|
|
73
74
|
showAssignments={showAssignments}
|
package/src/ir/ui/IrChart.tsx
CHANGED
|
@@ -9,14 +9,14 @@ import { chartSurfaceStyle } from '../../chart/ui/chartSurface.ts';
|
|
|
9
9
|
import { useChartSize } from '../../chart/ui/useChartSize.ts';
|
|
10
10
|
import type { AssignedBand } from '../core/assignBands.ts';
|
|
11
11
|
import type { IrBand } from '../core/irBand.ts';
|
|
12
|
-
import {
|
|
13
|
-
import type { IrMode } from '../core/irSpectrum.ts';
|
|
12
|
+
import { irModeFor } from '../core/irTechnique.ts';
|
|
14
13
|
|
|
15
14
|
import { BandMarks } from './BandMarks.tsx';
|
|
16
15
|
import { IrPointerTracker } from './IrPointerTracker.tsx';
|
|
17
16
|
import { IrTraces } from './IrTraces.tsx';
|
|
18
17
|
import type { IrChartProps } from './irChartProps.ts';
|
|
19
18
|
import { useIrPointer } from './useIrPointer.ts';
|
|
19
|
+
import { useIrText } from './useIrText.ts';
|
|
20
20
|
import { useIrZoom } from './useIrZoom.ts';
|
|
21
21
|
|
|
22
22
|
/**
|
|
@@ -28,7 +28,8 @@ import { useIrZoom } from './useIrZoom.ts';
|
|
|
28
28
|
* building the scale onto a reversed pixel range and nothing else: the data stays
|
|
29
29
|
* in ascending wavenumbers, every window stays low end first, and no other piece
|
|
30
30
|
* of arithmetic in either package has to know. That is the whole reason
|
|
31
|
-
* `createScale` takes its range rather than deriving it.
|
|
31
|
+
* `createScale` takes its range rather than deriving it. A Raman spectrum is
|
|
32
|
+
* drawn the other way, low shifts at the left, by the same means.
|
|
32
33
|
*
|
|
33
34
|
* The axes go under the data, so a grid line is never read as a band. Only the
|
|
34
35
|
* data band is clipped, so a zoomed trace stops at the plot edge while the
|
|
@@ -46,7 +47,8 @@ import { useIrZoom } from './useIrZoom.ts';
|
|
|
46
47
|
export function IrChart(props: IrChartProps): ReactElement {
|
|
47
48
|
const {
|
|
48
49
|
spectra,
|
|
49
|
-
|
|
50
|
+
technique = 'infrared',
|
|
51
|
+
mode: asked,
|
|
50
52
|
assigned = NO_BANDS,
|
|
51
53
|
showAssignments = false,
|
|
52
54
|
labelLimit,
|
|
@@ -61,6 +63,8 @@ export function IrChart(props: IrChartProps): ReactElement {
|
|
|
61
63
|
children,
|
|
62
64
|
} = props;
|
|
63
65
|
|
|
66
|
+
const mode = irModeFor(technique, asked);
|
|
67
|
+
const text = useIrText(technique);
|
|
64
68
|
const [containerRef, measured] = useChartSize<HTMLDivElement>();
|
|
65
69
|
const svgRef = useRef<SVGSVGElement | null>(null);
|
|
66
70
|
|
|
@@ -79,7 +83,15 @@ export function IrChart(props: IrChartProps): ReactElement {
|
|
|
79
83
|
|
|
80
84
|
// The host's window goes *into* the zoom rather than over it, so a drag is
|
|
81
85
|
// always measured against what is on screen.
|
|
82
|
-
const zoom = useIrZoom({
|
|
86
|
+
const zoom = useIrZoom({
|
|
87
|
+
spectra,
|
|
88
|
+
technique,
|
|
89
|
+
mode,
|
|
90
|
+
svgRef,
|
|
91
|
+
plot,
|
|
92
|
+
domain,
|
|
93
|
+
drag,
|
|
94
|
+
});
|
|
83
95
|
|
|
84
96
|
// The scales the zoom measured its gestures against — the x one running right
|
|
85
97
|
// to left. Taken from the hook rather than built here, because two scales over
|
|
@@ -128,7 +140,7 @@ export function IrChart(props: IrChartProps): ReactElement {
|
|
|
128
140
|
<svg
|
|
129
141
|
ref={svgRef}
|
|
130
142
|
role="img"
|
|
131
|
-
aria-label={
|
|
143
|
+
aria-label={text.chart(mode)}
|
|
132
144
|
width={frameWidth}
|
|
133
145
|
height={frameHeight}
|
|
134
146
|
viewBox={`0 0 ${frameWidth} ${frameHeight}`}
|
|
@@ -154,8 +166,8 @@ export function IrChart(props: IrChartProps): ReactElement {
|
|
|
154
166
|
yDomain={shown.y}
|
|
155
167
|
xScale={xScale}
|
|
156
168
|
yScale={yScale}
|
|
157
|
-
xTitle=
|
|
158
|
-
yTitle={
|
|
169
|
+
xTitle={text.xTitle}
|
|
170
|
+
yTitle={text.yTitle(mode)}
|
|
159
171
|
/>
|
|
160
172
|
|
|
161
173
|
<g clipPath={`url(#${clipId})`}>
|
|
@@ -192,22 +204,6 @@ export function IrChart(props: IrChartProps): ReactElement {
|
|
|
192
204
|
);
|
|
193
205
|
}
|
|
194
206
|
|
|
195
|
-
/**
|
|
196
|
-
* What the chart is, and what can be done to it, for whoever cannot see it.
|
|
197
|
-
*
|
|
198
|
-
* The gestures differ by mode, so the sentence does too — a label promising the
|
|
199
|
-
* wheel to a reader who cannot watch it fail to do anything is worse than no
|
|
200
|
-
* label at all.
|
|
201
|
-
* @param mode - Which value axis is being drawn.
|
|
202
|
-
* @returns The label.
|
|
203
|
-
*/
|
|
204
|
-
function chartLabel(mode: IrMode): string {
|
|
205
|
-
const axis = `Infrared spectrum read as ${yAxisTitle(mode)}, wavenumber running from high at the left to low at the right.`;
|
|
206
|
-
return boxZoomOnly(mode)
|
|
207
|
-
? `${axis} Drag a rectangle over it to zoom to that rectangle, and double click to fit everything again.`
|
|
208
|
-
: `${axis} Drag across it to zoom the wavenumber axis, drag past the baseline to take the value axis with it, turn the wheel to scale the value axis, and double click to fit everything again.`;
|
|
209
|
-
}
|
|
210
|
-
|
|
211
207
|
/** What a chart nobody has picked any bands for marks. */
|
|
212
208
|
const NO_BANDS: readonly AssignedBand[] = Object.freeze([]);
|
|
213
209
|
|
|
@@ -2,6 +2,7 @@ import type { ReactNode } from 'react';
|
|
|
2
2
|
import { useMemo } from 'react';
|
|
3
3
|
|
|
4
4
|
import type { IrCommandHandlers } from '../core/irCommands.ts';
|
|
5
|
+
import type { IrTechnique } from '../core/irTechnique.ts';
|
|
5
6
|
|
|
6
7
|
import type { IrCommandContextValue } from './irCommandContext.tsx';
|
|
7
8
|
import { commandContext } from './irCommandContext.tsx';
|
|
@@ -9,6 +10,12 @@ import { commandContext } from './irCommandContext.tsx';
|
|
|
9
10
|
export interface IrCommandProviderProps {
|
|
10
11
|
/** What each command does. */
|
|
11
12
|
handlers: IrCommandHandlers;
|
|
13
|
+
/**
|
|
14
|
+
* What the spectra were measured with, which decides how each command is
|
|
15
|
+
* worded in its tooltip and its label.
|
|
16
|
+
* @default 'infrared'
|
|
17
|
+
*/
|
|
18
|
+
technique?: IrTechnique;
|
|
12
19
|
/** The viewer. */
|
|
13
20
|
children: ReactNode;
|
|
14
21
|
}
|
|
@@ -19,11 +26,11 @@ export interface IrCommandProviderProps {
|
|
|
19
26
|
* @returns The provider.
|
|
20
27
|
*/
|
|
21
28
|
export function IrCommandProvider(props: IrCommandProviderProps) {
|
|
22
|
-
const { handlers, children } = props;
|
|
29
|
+
const { handlers, technique = 'infrared', children } = props;
|
|
23
30
|
|
|
24
31
|
const value = useMemo<IrCommandContextValue>(
|
|
25
|
-
() => ({ handlers, run: (id) => handlers[id]?.() }),
|
|
26
|
-
[handlers],
|
|
32
|
+
() => ({ handlers, technique, run: (id) => handlers[id]?.() }),
|
|
33
|
+
[handlers, technique],
|
|
27
34
|
);
|
|
28
35
|
|
|
29
36
|
return (
|
|
@@ -2,10 +2,19 @@ import { TooltipHelpContent } from 'react-science/ui';
|
|
|
2
2
|
|
|
3
3
|
import type { IrCommand, IrCommandId } from '../core/irCommands.ts';
|
|
4
4
|
import { irCommands } from '../core/irCommands.ts';
|
|
5
|
+
import type { IrTechnique } from '../core/irTechnique.ts';
|
|
6
|
+
|
|
7
|
+
import { useIrText } from './useIrText.ts';
|
|
5
8
|
|
|
6
9
|
export interface IrCommandTooltipProps {
|
|
7
10
|
/** Which command the tooltip is about. */
|
|
8
11
|
id: IrCommandId;
|
|
12
|
+
/**
|
|
13
|
+
* What the spectra were measured with, which decides how the command is
|
|
14
|
+
* worded.
|
|
15
|
+
* @default 'infrared'
|
|
16
|
+
*/
|
|
17
|
+
technique?: IrTechnique;
|
|
9
18
|
}
|
|
10
19
|
|
|
11
20
|
/**
|
|
@@ -18,8 +27,8 @@ export interface IrCommandTooltipProps {
|
|
|
18
27
|
* @returns The tooltip's content.
|
|
19
28
|
*/
|
|
20
29
|
export function IrCommandTooltip(props: IrCommandTooltipProps) {
|
|
21
|
-
const { id } = props;
|
|
22
|
-
const entry = irCommands[id]
|
|
30
|
+
const { id, technique = 'infrared' } = props;
|
|
31
|
+
const entry: IrCommand = useIrText(technique).command(id) ?? irCommands[id];
|
|
23
32
|
const shortcuts = entry.shortcut?.label ?? entry.shortcut?.keys;
|
|
24
33
|
|
|
25
34
|
return (
|