react-cheminfo 0.65.0 → 0.67.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 +33 -17
- package/lib/download/ui/FigureDownloadPanel.d.ts +7 -1
- package/lib/download/ui/FigureDownloadPanel.d.ts.map +1 -1
- package/lib/download/ui/FigureDownloadPanel.js +2 -2
- package/lib/download/ui/FigureDownloadPanel.js.map +1 -1
- package/lib/ecosystem/core/sites.js +3 -3
- package/lib/ecosystem/core/sites.js.map +1 -1
- package/lib/ecosystem/core/types.d.ts +1 -1
- package/lib/ecosystem/core/types.d.ts.map +1 -1
- package/lib/ecosystem/ui/glyphs.js +1 -1
- package/lib/ecosystem/ui/glyphs.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/i18n/core/messageCatalog.d.ts +2 -2
- package/lib/i18n/vite/localeCatalog.d.ts +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 +15 -11
- 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/irEditorApi.d.ts +12 -0
- package/lib/ir/core/irEditorApi.d.ts.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 +2 -30
- 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/irSidePanels.d.ts +7 -1
- package/lib/ir/core/irSidePanels.d.ts.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 +46 -5
- 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 +7 -0
- package/lib/ir/ui/IrCanvas.d.ts.map +1 -1
- package/lib/ir/ui/IrCanvas.js +9 -4
- 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 +22 -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 +25 -5
- 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 +9 -1
- package/lib/ir/ui/IrShell.d.ts.map +1 -1
- package/lib/ir/ui/IrShell.js +26 -74
- package/lib/ir/ui/IrShell.js.map +1 -1
- package/lib/ir/ui/IrSidePanel.d.ts +11 -0
- package/lib/ir/ui/IrSidePanel.d.ts.map +1 -1
- package/lib/ir/ui/IrSidePanel.js +12 -3
- package/lib/ir/ui/IrSidePanel.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 +64 -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 +62 -0
- package/lib/ir/ui/VibrationalEditor.d.ts.map +1 -0
- package/lib/ir/ui/VibrationalEditor.js +33 -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/index.d.ts +1 -0
- package/lib/ir/ui/index.d.ts.map +1 -1
- package/lib/ir/ui/index.js.map +1 -1
- package/lib/ir/ui/irActions.d.ts +3 -3
- package/lib/ir/ui/irActions.d.ts.map +1 -1
- package/lib/ir/ui/irChartProps.d.ts +21 -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/irHostPanels.d.ts +53 -0
- package/lib/ir/ui/irHostPanels.d.ts.map +1 -0
- package/lib/ir/ui/irHostPanels.js +41 -0
- package/lib/ir/ui/irHostPanels.js.map +1 -0
- 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/useIrSide.d.ts +27 -0
- package/lib/ir/ui/useIrSide.d.ts.map +1 -0
- package/lib/ir/ui/useIrSide.js +42 -0
- package/lib/ir/ui/useIrSide.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 +15 -0
- package/lib/ir/ui/useIrZoom.d.ts.map +1 -1
- package/lib/ir/ui/useIrZoom.js +6 -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 +29 -2
- package/lib/locales/en.json +29 -2
- package/lib/locales/es.json +29 -2
- package/lib/locales/fr.json +29 -2
- package/lib/locales/it.json +29 -2
- package/lib/molecule3d/core/animatedPng.d.ts +25 -0
- package/lib/molecule3d/core/animatedPng.d.ts.map +1 -0
- package/lib/molecule3d/core/animatedPng.js +59 -0
- package/lib/molecule3d/core/animatedPng.js.map +1 -0
- package/lib/molecule3d/core/file.d.ts +24 -0
- package/lib/molecule3d/core/file.d.ts.map +1 -0
- package/lib/molecule3d/core/file.js +2 -0
- package/lib/molecule3d/core/file.js.map +1 -0
- package/lib/molecule3d/core/index.d.ts +4 -1
- package/lib/molecule3d/core/index.d.ts.map +1 -1
- package/lib/molecule3d/core/index.js +1 -0
- package/lib/molecule3d/core/index.js.map +1 -1
- package/lib/molecule3d/core/settings.d.ts +0 -7
- package/lib/molecule3d/core/settings.d.ts.map +1 -1
- package/lib/molecule3d/core/settings.js.map +1 -1
- package/lib/molecule3d/ui/Molecule3DExport.d.ts +10 -2
- package/lib/molecule3d/ui/Molecule3DExport.d.ts.map +1 -1
- package/lib/molecule3d/ui/Molecule3DExport.js +15 -2
- package/lib/molecule3d/ui/Molecule3DExport.js.map +1 -1
- package/lib/molecule3d/ui/Molecule3DToolbar.js +9 -2
- package/lib/molecule3d/ui/Molecule3DToolbar.js.map +1 -1
- package/lib/molecule3d/ui/MoleculeCanvas3D.d.ts.map +1 -1
- package/lib/molecule3d/ui/MoleculeCanvas3D.js +23 -41
- package/lib/molecule3d/ui/MoleculeCanvas3D.js.map +1 -1
- package/lib/molecule3d/ui/drawScene.d.ts +2 -1
- package/lib/molecule3d/ui/drawScene.d.ts.map +1 -1
- package/lib/molecule3d/ui/drawScene.js.map +1 -1
- package/lib/molecule3d/ui/exportMoleculeImage.d.ts +15 -1
- package/lib/molecule3d/ui/exportMoleculeImage.d.ts.map +1 -1
- package/lib/molecule3d/ui/exportMoleculeImage.js +14 -2
- package/lib/molecule3d/ui/exportMoleculeImage.js.map +1 -1
- package/lib/molecule3d/ui/moleculeFrames.d.ts +47 -0
- package/lib/molecule3d/ui/moleculeFrames.d.ts.map +1 -0
- package/lib/molecule3d/ui/moleculeFrames.js +65 -0
- package/lib/molecule3d/ui/moleculeFrames.js.map +1 -0
- package/lib/molecule3d/ui/moleculeViewer3DProps.d.ts +14 -1
- package/lib/molecule3d/ui/moleculeViewer3DProps.d.ts.map +1 -1
- package/lib/molecule3d/ui/renderMolecule.d.ts +3 -3
- package/lib/molecule3d/ui/renderMolecule.d.ts.map +1 -1
- package/lib/molecule3d/ui/renderMolecule.js +2 -1
- package/lib/molecule3d/ui/renderMolecule.js.map +1 -1
- package/lib/molecule3d/ui/sceneDrawer.d.ts +2 -1
- package/lib/molecule3d/ui/sceneDrawer.d.ts.map +1 -1
- package/lib/molecule3d/ui/sceneDrawer.js +9 -1
- package/lib/molecule3d/ui/sceneDrawer.js.map +1 -1
- package/lib/molecule3d/ui/useImageExport.d.ts +8 -3
- package/lib/molecule3d/ui/useImageExport.d.ts.map +1 -1
- package/lib/molecule3d/ui/useImageExport.js +13 -4
- package/lib/molecule3d/ui/useImageExport.js.map +1 -1
- package/lib/molecule3d/ui/useMoleculeScene.d.ts +2 -1
- package/lib/molecule3d/ui/useMoleculeScene.d.ts.map +1 -1
- package/lib/molecule3d/ui/useMoleculeScene.js.map +1 -1
- package/lib/molecule3d/ui/useMoleculeViewer.d.ts +16 -0
- package/lib/molecule3d/ui/useMoleculeViewer.d.ts.map +1 -0
- package/lib/molecule3d/ui/useMoleculeViewer.js +37 -0
- package/lib/molecule3d/ui/useMoleculeViewer.js.map +1 -0
- package/lib/molecule3d/ui/usePolarSurfaceArea.d.ts +3 -3
- package/lib/molecule3d/ui/usePolarSurfaceArea.d.ts.map +1 -1
- package/lib/molecule3d/ui/usePolarSurfaceArea.js +4 -3
- package/lib/molecule3d/ui/usePolarSurfaceArea.js.map +1 -1
- package/lib/molecule3d/ui/viewer.d.ts +4 -1
- package/lib/molecule3d/ui/viewer.d.ts.map +1 -1
- package/lib/molecule3d/ui/viewer.js +21 -19
- package/lib/molecule3d/ui/viewer.js.map +1 -1
- package/lib/molecule3d/ui/viewerTypes.d.ts +6 -0
- package/lib/molecule3d/ui/viewerTypes.d.ts.map +1 -1
- package/lib/molstar/core/captureScene.d.ts +19 -1
- package/lib/molstar/core/captureScene.d.ts.map +1 -1
- package/lib/molstar/core/captureScene.js +57 -2
- package/lib/molstar/core/captureScene.js.map +1 -1
- package/lib/molstar/core/index.d.ts +5 -2
- package/lib/molstar/core/index.d.ts.map +1 -1
- package/lib/molstar/core/index.js +4 -2
- package/lib/molstar/core/index.js.map +1 -1
- package/lib/molstar/core/trajectory.d.ts +56 -0
- package/lib/molstar/core/trajectory.d.ts.map +1 -0
- package/lib/molstar/core/trajectory.js +96 -0
- package/lib/molstar/core/trajectory.js.map +1 -0
- package/lib/panel/ui/PanelRail.d.ts.map +1 -1
- package/lib/panel/ui/PanelRail.js +1 -1
- package/lib/panel/ui/PanelRail.js.map +1 -1
- package/lib/raman.d.ts +17 -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/basePath.d.ts +2 -2
- package/lib/router/core/basePath.js +2 -2
- package/lib/router/core/siteAddresses.d.ts +1 -1
- package/lib/router/core/siteAddresses.js +1 -1
- package/lib/seo/core/siteFiles.js +1 -1
- package/lib/seo/core/siteFiles.js.map +1 -1
- package/lib/server/answerAddresses.d.ts +3 -3
- package/lib/server/answerAddresses.js +3 -3
- package/lib/structure/core/index.d.ts +2 -0
- package/lib/structure/core/index.d.ts.map +1 -1
- package/lib/structure/core/index.js +1 -0
- package/lib/structure/core/index.js.map +1 -1
- package/lib/structure/core/structureTransfer.d.ts +29 -0
- package/lib/structure/core/structureTransfer.d.ts.map +1 -0
- package/lib/structure/core/structureTransfer.js +26 -0
- package/lib/structure/core/structureTransfer.js.map +1 -0
- package/lib/structure/ui/EditorImportButton.d.ts +20 -0
- package/lib/structure/ui/EditorImportButton.d.ts.map +1 -0
- package/lib/structure/ui/EditorImportButton.js +24 -0
- package/lib/structure/ui/EditorImportButton.js.map +1 -0
- package/lib/structure/ui/EditorImportProblem.d.ts +17 -0
- package/lib/structure/ui/EditorImportProblem.d.ts.map +1 -0
- package/lib/structure/ui/EditorImportProblem.js +32 -0
- package/lib/structure/ui/EditorImportProblem.js.map +1 -0
- package/lib/structure/ui/StructureDrop.d.ts +39 -0
- package/lib/structure/ui/StructureDrop.d.ts.map +1 -0
- package/lib/structure/ui/StructureDrop.js +19 -0
- package/lib/structure/ui/StructureDrop.js.map +1 -0
- package/lib/structure/ui/StructureDropOverlay.d.ts +16 -0
- package/lib/structure/ui/StructureDropOverlay.d.ts.map +1 -0
- package/lib/structure/ui/StructureDropOverlay.js +29 -0
- package/lib/structure/ui/StructureDropOverlay.js.map +1 -0
- package/lib/structure/ui/StructureEditor.d.ts +3 -80
- package/lib/structure/ui/StructureEditor.d.ts.map +1 -1
- package/lib/structure/ui/StructureEditor.js +21 -33
- package/lib/structure/ui/StructureEditor.js.map +1 -1
- package/lib/structure/ui/importedStructure.d.ts +25 -0
- package/lib/structure/ui/importedStructure.d.ts.map +1 -0
- package/lib/structure/ui/importedStructure.js +74 -0
- package/lib/structure/ui/importedStructure.js.map +1 -0
- package/lib/structure/ui/index.d.ts +2 -0
- package/lib/structure/ui/index.d.ts.map +1 -1
- package/lib/structure/ui/index.js +1 -0
- package/lib/structure/ui/index.js.map +1 -1
- package/lib/structure/ui/structureEditorProps.d.ts +98 -0
- package/lib/structure/ui/structureEditorProps.d.ts.map +1 -0
- package/lib/structure/ui/structureEditorProps.js +2 -0
- package/lib/structure/ui/structureEditorProps.js.map +1 -0
- package/lib/structure/ui/useDebouncedChange.d.ts +16 -0
- package/lib/structure/ui/useDebouncedChange.d.ts.map +1 -0
- package/lib/structure/ui/useDebouncedChange.js +30 -0
- package/lib/structure/ui/useDebouncedChange.js.map +1 -0
- package/lib/structure/ui/useStructureDrop.d.ts +30 -0
- package/lib/structure/ui/useStructureDrop.d.ts.map +1 -0
- package/lib/structure/ui/useStructureDrop.js +49 -0
- package/lib/structure/ui/useStructureDrop.js.map +1 -0
- package/lib/structure/ui/useStructureImport.d.ts +45 -0
- package/lib/structure/ui/useStructureImport.d.ts.map +1 -0
- package/lib/structure/ui/useStructureImport.js +62 -0
- package/lib/structure/ui/useStructureImport.js.map +1 -0
- package/package.json +5 -1
- package/src/download/ui/FigureDownloadPanel.tsx +9 -2
- package/src/ecosystem/core/sites.ts +3 -3
- package/src/ecosystem/core/types.ts +1 -1
- package/src/ecosystem/ui/glyphs.tsx +1 -1
- package/src/i18n/core/messageCatalog.ts +2 -2
- package/src/i18n/vite/localeCatalog.ts +1 -1
- package/src/ir/core/analysisSpectra.ts +26 -10
- package/src/ir/core/bandLabelPlan.ts +21 -10
- package/src/ir/core/index.ts +31 -7
- 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/irEditorApi.ts +13 -0
- package/src/ir/core/irFormat.ts +39 -6
- package/src/ir/core/irMode.ts +42 -10
- package/src/ir/core/irReducer.ts +3 -51
- package/src/ir/core/irSidePanels.ts +8 -1
- package/src/ir/core/irSpectrum.ts +59 -30
- package/src/ir/core/irState.ts +73 -5
- 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 +29 -3
- package/src/ir/ui/IrChart.tsx +31 -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 +27 -40
- package/src/ir/ui/IrHeader.tsx +10 -3
- package/src/ir/ui/IrLogo.tsx +28 -9
- package/src/ir/ui/IrShell.tsx +47 -96
- package/src/ir/ui/IrSidePanel.tsx +36 -10
- 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 +71 -0
- package/src/ir/ui/SpectraPanel.tsx +2 -1
- package/src/ir/ui/SpectrumRow.tsx +14 -5
- package/src/ir/ui/VibrationalEditor.tsx +113 -0
- package/src/ir/ui/bandsTsv.ts +46 -0
- package/src/ir/ui/index.ts +1 -0
- package/src/ir/ui/irActions.ts +3 -3
- package/src/ir/ui/irChartProps.ts +21 -4
- package/src/ir/ui/irCommandContext.tsx +18 -3
- package/src/ir/ui/irHostPanels.ts +76 -0
- package/src/ir/ui/useIrEditor.ts +20 -8
- package/src/ir/ui/useIrHandle.ts +51 -0
- package/src/ir/ui/useIrSide.ts +60 -0
- package/src/ir/ui/useIrText.ts +170 -0
- package/src/ir/ui/useIrZoom.ts +22 -3
- package/src/ir/ui/useValueAxisZoom.ts +67 -0
- package/src/ir.ts +3 -0
- package/src/locales/de.json +29 -2
- package/src/locales/en.json +29 -2
- package/src/locales/es.json +29 -2
- package/src/locales/fr.json +29 -2
- package/src/locales/it.json +29 -2
- package/src/molecule3d/core/animatedPng.ts +79 -0
- package/src/molecule3d/core/file.ts +23 -0
- package/src/molecule3d/core/index.ts +3 -1
- package/src/molecule3d/core/settings.ts +0 -8
- package/src/molecule3d/ui/Molecule3DExport.tsx +43 -5
- package/src/molecule3d/ui/Molecule3DToolbar.tsx +9 -2
- package/src/molecule3d/ui/MoleculeCanvas3D.tsx +24 -38
- package/src/molecule3d/ui/drawScene.ts +2 -1
- package/src/molecule3d/ui/exportMoleculeImage.ts +28 -3
- package/src/molecule3d/ui/moleculeFrames.ts +88 -0
- package/src/molecule3d/ui/moleculeViewer3DProps.ts +14 -5
- package/src/molecule3d/ui/renderMolecule.ts +5 -3
- package/src/molecule3d/ui/sceneDrawer.ts +14 -2
- package/src/molecule3d/ui/useImageExport.ts +22 -5
- package/src/molecule3d/ui/useMoleculeScene.ts +2 -1
- package/src/molecule3d/ui/useMoleculeViewer.ts +46 -0
- package/src/molecule3d/ui/usePolarSurfaceArea.ts +6 -4
- package/src/molecule3d/ui/viewer.ts +34 -27
- package/src/molecule3d/ui/viewerTypes.ts +6 -0
- package/src/molstar/core/captureScene.ts +85 -2
- package/src/molstar/core/index.ts +13 -2
- package/src/molstar/core/trajectory.ts +117 -0
- package/src/panel/ui/PanelRail.tsx +3 -0
- package/src/raman.ts +20 -0
- package/src/router/core/basePath.ts +2 -2
- package/src/router/core/siteAddresses.ts +1 -1
- package/src/seo/core/siteFiles.ts +1 -1
- package/src/server/answerAddresses.ts +3 -3
- package/src/structure/core/index.ts +8 -0
- package/src/structure/core/structureTransfer.ts +37 -0
- package/src/structure/ui/EditorImportButton.tsx +59 -0
- package/src/structure/ui/EditorImportProblem.tsx +63 -0
- package/src/structure/ui/StructureDrop.tsx +66 -0
- package/src/structure/ui/StructureDropOverlay.tsx +50 -0
- package/src/structure/ui/StructureEditor.tsx +49 -134
- package/src/structure/ui/importedStructure.ts +83 -0
- package/src/structure/ui/index.ts +2 -0
- package/src/structure/ui/structureEditorProps.ts +103 -0
- package/src/structure/ui/useDebouncedChange.ts +41 -0
- package/src/structure/ui/useStructureDrop.ts +76 -0
- package/src/structure/ui/useStructureImport.ts +122 -0
|
@@ -10,10 +10,18 @@ import type { FigurePixels } from '../../download/core/figureScale.ts';
|
|
|
10
10
|
export interface Molecule3DExportProps {
|
|
11
11
|
/** Reads the size of the canvas on screen, when the popover opens. */
|
|
12
12
|
getSize: () => FigurePixels | null;
|
|
13
|
-
/**
|
|
14
|
-
|
|
13
|
+
/**
|
|
14
|
+
* Writes the file: every frame, as an animated PNG, when `animated` is set.
|
|
15
|
+
*/
|
|
16
|
+
onExport: (format: FigureFormat, scale: number, animated: boolean) => Promise<void>;
|
|
15
17
|
/** Puts a PNG at that scale on the clipboard, and says what came of it. */
|
|
16
18
|
onCopy: (scale: number) => Promise<FigureNotice>;
|
|
19
|
+
/**
|
|
20
|
+
* How many frames the scene holds. Above one, a PNG may hold them all, as an
|
|
21
|
+
* animation.
|
|
22
|
+
* @default 1
|
|
23
|
+
*/
|
|
24
|
+
frameCount?: number;
|
|
17
25
|
}
|
|
18
26
|
/**
|
|
19
27
|
* The export panel.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Molecule3DExport.d.ts","sourceRoot":"","sources":["../../../src/molecule3d/ui/Molecule3DExport.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAG1C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AAC1E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;
|
|
1
|
+
{"version":3,"file":"Molecule3DExport.d.ts","sourceRoot":"","sources":["../../../src/molecule3d/ui/Molecule3DExport.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAG1C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AAC1E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAUvE,yCAAyC;AACzC,MAAM,WAAW,qBAAqB;IACpC,sEAAsE;IACtE,OAAO,EAAE,MAAM,YAAY,GAAG,IAAI,CAAC;IACnC;;OAEG;IACH,QAAQ,EAAE,CACR,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,OAAO,KACd,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,2EAA2E;IAC3E,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC;IACjD;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,GAAG,YAAY,CAuD3E"}
|
|
@@ -4,17 +4,21 @@ import { DEFAULT_FIGURE_SCALE, FIGURE_SCALES, } from "../../download/core/figure
|
|
|
4
4
|
import { FigureDownloadPanel } from "../../download/ui/FigureDownloadPanel.js";
|
|
5
5
|
import { useFigureTask } from "../../download/ui/useFigureTask.js";
|
|
6
6
|
import { useChromeT } from "../../i18n/ui/useT.js";
|
|
7
|
+
import { OverlaySegmented } from "../../overlay/ui/OverlaySegmented.js";
|
|
7
8
|
/**
|
|
8
9
|
* The export panel.
|
|
9
10
|
* @param props - See {@link Molecule3DExportProps}.
|
|
10
11
|
* @returns The panel.
|
|
11
12
|
*/
|
|
12
13
|
export function Molecule3DExport(props) {
|
|
13
|
-
const { getSize, onExport, onCopy } = props;
|
|
14
|
+
const { getSize, onExport, onCopy, frameCount = 1 } = props;
|
|
14
15
|
const t = useChromeT();
|
|
15
16
|
const [size] = useState(getSize);
|
|
16
17
|
const [format, setFormat] = useState('png');
|
|
17
18
|
const [scale, setScale] = useState(DEFAULT_FIGURE_SCALE);
|
|
19
|
+
const [frames, setFrames] = useState('all');
|
|
20
|
+
const offerFrames = frameCount > 1 && format === 'png';
|
|
21
|
+
const animated = offerFrames && frames === 'all';
|
|
18
22
|
const { run, busy, failure, notice, clear } = useFigureTask();
|
|
19
23
|
// What the last copy came to only describes the choices it was made with.
|
|
20
24
|
function changed(apply) {
|
|
@@ -23,6 +27,15 @@ export function Molecule3DExport(props) {
|
|
|
23
27
|
apply(value);
|
|
24
28
|
};
|
|
25
29
|
}
|
|
26
|
-
return (_jsx(FigureDownloadPanel, { title: t('molecule3d.exportImage'), format: format, scale: scale, scales: FIGURE_SCALES, size: size, failure: failure, notice: notice, saving: busy, rasterSvg: true, onFormatChange: changed(setFormat), onScaleChange: changed(setScale), onSave: () => run(onExport(format, scale).then(() => null)), onCopy: () => run(onCopy(scale))
|
|
30
|
+
return (_jsx(FigureDownloadPanel, { title: t('molecule3d.exportImage'), format: format, scale: scale, scales: FIGURE_SCALES, size: size, failure: failure, notice: notice, saving: busy, rasterSvg: true, onFormatChange: changed(setFormat), onScaleChange: changed(setScale), onSave: () => run(onExport(format, scale, animated).then(() => null)), onCopy: () => run(onCopy(scale)), children: offerFrames && (_jsx(OverlaySegmented, { label: t('molecule3d.frames'), help: {
|
|
31
|
+
title: t('molecule3d.frames'),
|
|
32
|
+
body: t('molecule3d.framesHelp'),
|
|
33
|
+
}, value: frames, options: [
|
|
34
|
+
{ value: 'one', label: t('molecule3d.frames.one') },
|
|
35
|
+
{
|
|
36
|
+
value: 'all',
|
|
37
|
+
label: t('molecule3d.frames.all', { count: frameCount }),
|
|
38
|
+
},
|
|
39
|
+
], onChange: changed(setFrames) })) }));
|
|
27
40
|
}
|
|
28
41
|
//# sourceMappingURL=Molecule3DExport.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Molecule3DExport.js","sourceRoot":"","sources":["../../../src/molecule3d/ui/Molecule3DExport.tsx"],"names":[],"mappings":";AAMA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAKjC,OAAO,EACL,oBAAoB,EACpB,aAAa,GACd,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,0CAA2C,CAAC;AAChF,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"Molecule3DExport.js","sourceRoot":"","sources":["../../../src/molecule3d/ui/Molecule3DExport.tsx"],"names":[],"mappings":";AAMA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAKjC,OAAO,EACL,oBAAoB,EACpB,aAAa,GACd,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,0CAA2C,CAAC;AAChF,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sCAAuC,CAAC;AAwBzE;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAA4B;IAC3D,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,GAAG,CAAC,EAAE,GAAG,KAAK,CAAC;IAC5D,MAAM,CAAC,GAAG,UAAU,EAAE,CAAC;IACvB,MAAM,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;IACjC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAe,KAAK,CAAC,CAAC;IAC1D,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,oBAAoB,CAAC,CAAC;IACzD,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAc,KAAK,CAAC,CAAC;IACzD,MAAM,WAAW,GAAG,UAAU,GAAG,CAAC,IAAI,MAAM,KAAK,KAAK,CAAC;IACvD,MAAM,QAAQ,GAAG,WAAW,IAAI,MAAM,KAAK,KAAK,CAAC;IACjD,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,aAAa,EAAE,CAAC;IAE9D,0EAA0E;IAC1E,SAAS,OAAO,CAAI,KAAyB;QAC3C,OAAO,CAAC,KAAK,EAAE,EAAE;YACf,KAAK,EAAE,CAAC;YACR,KAAK,CAAC,KAAK,CAAC,CAAC;QACf,CAAC,CAAC;IACJ,CAAC;IAED,OAAO,CACL,KAAC,mBAAmB,IAClB,KAAK,EAAE,CAAC,CAAC,wBAAwB,CAAC,EAClC,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,IAAI,EACZ,SAAS,QACT,cAAc,EAAE,OAAO,CAAC,SAAS,CAAC,EAClC,aAAa,EAAE,OAAO,CAAC,QAAQ,CAAC,EAChC,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,EACrE,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,YAE/B,WAAW,IAAI,CACd,KAAC,gBAAgB,IACf,KAAK,EAAE,CAAC,CAAC,mBAAmB,CAAC,EAC7B,IAAI,EAAE;gBACJ,KAAK,EAAE,CAAC,CAAC,mBAAmB,CAAC;gBAC7B,IAAI,EAAE,CAAC,CAAC,uBAAuB,CAAC;aACjC,EACD,KAAK,EAAE,MAAM,EACb,OAAO,EAAE;gBACP,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,uBAAuB,CAAC,EAAE;gBACnD;oBACE,KAAK,EAAE,KAAK;oBACZ,KAAK,EAAE,CAAC,CAAC,uBAAuB,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;iBACzD;aACF,EACD,QAAQ,EAAE,OAAO,CAAC,SAAS,CAAC,GAC5B,CACH,GACmB,CACvB,CAAC;AACJ,CAAC"}
|
|
@@ -59,11 +59,18 @@ export function Molecule3DToolbar(props) {
|
|
|
59
59
|
} }, kind))), _jsx(Toolbar.Item, { icon: _jsx(ClearMeasurementsIcon, {}), disabled: measurementCount === 0, "aria-label": t('molecule3d.clearMeasurements'), tooltip: t('molecule3d.clearMeasurements'), tooltipProps: TOOLTIP_PROPS, onClick: onClearMeasurements })] }) }))] }));
|
|
60
60
|
}
|
|
61
61
|
const TOOLTIP_PROPS = { placement: 'right' };
|
|
62
|
+
// A canvas too short for both cards puts the second one beside the first,
|
|
63
|
+
// rather than cutting it off; the column itself lets clicks through to the
|
|
64
|
+
// canvas between and below the cards.
|
|
62
65
|
const COLUMN_STYLE = {
|
|
63
66
|
display: 'flex',
|
|
64
67
|
flexDirection: 'column',
|
|
68
|
+
flexWrap: 'wrap',
|
|
69
|
+
alignContent: 'flex-start',
|
|
70
|
+
alignItems: 'flex-start',
|
|
65
71
|
gap: 6,
|
|
66
|
-
|
|
72
|
+
height: '100%',
|
|
73
|
+
pointerEvents: 'none',
|
|
67
74
|
};
|
|
68
|
-
const CARD_STYLE = { padding: 0 };
|
|
75
|
+
const CARD_STYLE = { padding: 0, pointerEvents: 'auto' };
|
|
69
76
|
//# sourceMappingURL=Molecule3DToolbar.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Molecule3DToolbar.js","sourceRoot":"","sources":["../../../src/molecule3d/ui/Molecule3DToolbar.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Molecule3DToolbar.js","sourceRoot":"","sources":["../../../src/molecule3d/ui/Molecule3DToolbar.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MoleculeCanvas3D.d.ts","sourceRoot":"","sources":["../../../src/molecule3d/ui/MoleculeCanvas3D.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAiB,YAAY,EAAE,MAAM,OAAO,CAAC;AAiBzD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAOxE,yCAAyC;AACzC,MAAM,WAAW,qBAAsB,SAAQ,IAAI,CACjD,qBAAqB,EACrB,UAAU,GAAG,mBAAmB,CACjC;IACC,2EAA2E;IAC3E,eAAe,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;CACnD;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,GAAG,YAAY,
|
|
1
|
+
{"version":3,"file":"MoleculeCanvas3D.d.ts","sourceRoot":"","sources":["../../../src/molecule3d/ui/MoleculeCanvas3D.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAiB,YAAY,EAAE,MAAM,OAAO,CAAC;AAiBzD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAOxE,yCAAyC;AACzC,MAAM,WAAW,qBAAsB,SAAQ,IAAI,CACjD,qBAAqB,EACrB,UAAU,GAAG,mBAAmB,CACjC;IACC,2EAA2E;IAC3E,eAAe,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;CACnD;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,GAAG,YAAY,CAwJ3E"}
|
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { useEffect, useRef, useState } from 'react';
|
|
3
3
|
import { DEFAULT_SPIN_SPEED } from "../../molstar/core/index.js";
|
|
4
|
+
import { DEFAULT_FRAMES_PER_SECOND } from "../core/animatedPng.js";
|
|
4
5
|
import { normalizeMolecule3DSettings, resolveMolecule3DTools, } from "../core/settings.js";
|
|
5
6
|
import { Molecule3DExport } from "./Molecule3DExport.js";
|
|
6
7
|
import { Molecule3DOptions } from "./Molecule3DOptions.js";
|
|
7
8
|
import { Molecule3DStage } from "./Molecule3DStage.js";
|
|
8
9
|
import { Molecule3DToolbar } from "./Molecule3DToolbar.js";
|
|
9
|
-
import { createMolecule3DViewer } from "./createViewer.js";
|
|
10
10
|
import { highlightColorOf } from "./highlightColor.js";
|
|
11
11
|
import { useControlledState } from "./useControlledState.js";
|
|
12
12
|
import { useImageExport } from "./useImageExport.js";
|
|
13
13
|
import { useMoleculeScene } from "./useMoleculeScene.js";
|
|
14
|
+
import { useMoleculeViewer } from "./useMoleculeViewer.js";
|
|
14
15
|
import { usePolarSurfaceArea } from "./usePolarSurfaceArea.js";
|
|
15
16
|
/**
|
|
16
17
|
* Mount one molstar canvas and keep it showing what the props describe.
|
|
@@ -18,64 +19,44 @@ import { usePolarSurfaceArea } from "./usePolarSurfaceArea.js";
|
|
|
18
19
|
* @returns The canvas with its toolbars.
|
|
19
20
|
*/
|
|
20
21
|
export function MoleculeCanvas3D(props) {
|
|
21
|
-
const { molfile, frameNewMolecule = 'keep', tools: toolsProp, settings: settingsProp, defaultSettings, onSettingsChange, spinning: spinningProp, defaultSpinning = false, onSpinningChange, spinSpeed = DEFAULT_SPIN_SPEED, measurements: measurementsProp, onMeasurementsChange, highlights = NO_HIGHLIGHTS, fileName = 'molecule', background, minHeight = 320, onFailureChange, } = props;
|
|
22
|
+
const { molfile, frameNewMolecule = 'keep', tools: toolsProp, settings: settingsProp, defaultSettings, onSettingsChange, spinning: spinningProp, defaultSpinning = false, onSpinningChange, spinSpeed = DEFAULT_SPIN_SPEED, playing = false, framesPerSecond = DEFAULT_FRAMES_PER_SECOND, measurements: measurementsProp, onMeasurementsChange, highlights = NO_HIGHLIGHTS, fileName = 'molecule', background, minHeight = 320, onFailureChange, } = props;
|
|
22
23
|
const tools = resolveMolecule3DTools(toolsProp);
|
|
23
24
|
const [initialSettings] = useState(() => normalizeMolecule3DSettings(defaultSettings));
|
|
24
25
|
const [settings, setSettings] = useControlledState(settingsProp, initialSettings, onSettingsChange);
|
|
25
26
|
const [spinning, setSpinning] = useControlledState(spinningProp, defaultSpinning, onSpinningChange);
|
|
26
27
|
const [measurements, setMeasurements] = useControlledState(measurementsProp, NO_MEASUREMENTS, onMeasurementsChange);
|
|
27
28
|
const [measureKind, setMeasureKind] = useState(null);
|
|
29
|
+
const [frameCount, setFrameCount] = useState(0);
|
|
28
30
|
const polarSurfaceArea = usePolarSurfaceArea(molfile, settings.surfaceColoring === 'polarity');
|
|
29
31
|
// A callback ref: the element arriving is what creates the viewer, and every
|
|
30
32
|
// effect keyed on it runs again, in order, after the viewer exists.
|
|
31
33
|
const [container, setContainer] = useState(null);
|
|
32
|
-
const viewerRef = useRef(null);
|
|
33
34
|
// The viewer is created once, so what its callbacks read is kept fresh here.
|
|
34
|
-
const latest = useRef({
|
|
35
|
-
measurements,
|
|
36
|
-
setMeasurements,
|
|
37
|
-
onFailureChange,
|
|
38
|
-
background,
|
|
39
|
-
});
|
|
35
|
+
const latest = useRef({ measurements, setMeasurements });
|
|
40
36
|
useEffect(() => {
|
|
41
|
-
latest.current = {
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
37
|
+
latest.current = { measurements, setMeasurements };
|
|
38
|
+
});
|
|
39
|
+
const viewerRef = useMoleculeViewer(container, {
|
|
40
|
+
background,
|
|
41
|
+
onMeasure: (measurement) => {
|
|
42
|
+
const current = latest.current;
|
|
43
|
+
current.setMeasurements([...current.measurements, measurement]);
|
|
44
|
+
},
|
|
45
|
+
onFrameCountChange: setFrameCount,
|
|
47
46
|
});
|
|
48
|
-
useEffect(() => {
|
|
49
|
-
if (container === null)
|
|
50
|
-
return;
|
|
51
|
-
const viewer = createMolecule3DViewer(container, {
|
|
52
|
-
background: latest.current.background,
|
|
53
|
-
onMeasure: (measurement) => {
|
|
54
|
-
const current = latest.current;
|
|
55
|
-
current.setMeasurements([...current.measurements, measurement]);
|
|
56
|
-
},
|
|
57
|
-
});
|
|
58
|
-
viewerRef.current = viewer;
|
|
59
|
-
const observer = new ResizeObserver(() => {
|
|
60
|
-
viewer.handleResize();
|
|
61
|
-
});
|
|
62
|
-
observer.observe(container);
|
|
63
|
-
return () => {
|
|
64
|
-
observer.disconnect();
|
|
65
|
-
viewerRef.current = null;
|
|
66
|
-
viewer.dispose();
|
|
67
|
-
};
|
|
68
|
-
}, [container]);
|
|
69
47
|
useEffect(() => {
|
|
70
48
|
void viewerRef.current?.setSpin(spinning, spinSpeed);
|
|
71
|
-
}, [container, spinning, spinSpeed]);
|
|
49
|
+
}, [container, viewerRef, spinning, spinSpeed]);
|
|
50
|
+
useEffect(() => {
|
|
51
|
+
void viewerRef.current?.frames.play(playing, framesPerSecond);
|
|
52
|
+
}, [container, viewerRef, playing, framesPerSecond]);
|
|
72
53
|
useEffect(() => {
|
|
73
54
|
void viewerRef.current?.setMeasureKind(measureKind);
|
|
74
|
-
}, [container, measureKind]);
|
|
55
|
+
}, [container, viewerRef, measureKind]);
|
|
75
56
|
// Kept out of the scene: a new highlight repaints the model, never redraws it.
|
|
76
57
|
useEffect(() => {
|
|
77
58
|
void viewerRef.current?.setHighlights(highlights, highlightColorOf(container));
|
|
78
|
-
}, [container, highlights]);
|
|
59
|
+
}, [container, viewerRef, highlights]);
|
|
79
60
|
const { resetView } = useMoleculeScene({
|
|
80
61
|
container,
|
|
81
62
|
viewerRef,
|
|
@@ -87,12 +68,12 @@ export function MoleculeCanvas3D(props) {
|
|
|
87
68
|
onFailureChange,
|
|
88
69
|
camera: props,
|
|
89
70
|
});
|
|
90
|
-
const { canvasSize, exportImage, copyImage } = useImageExport(container, viewerRef, fileName);
|
|
71
|
+
const { canvasSize, exportImage, copyImage } = useImageExport(container, viewerRef, fileName, framesPerSecond);
|
|
91
72
|
return (_jsx(Molecule3DStage, { style: { ...STAGE_STYLE, minHeight }, children: (fullscreen) => (_jsxs(_Fragment, { children: [_jsx("div", { ref: setContainer, style: CANVAS_STYLE, "data-testid": "molecule3d" }), molfile !== null && (_jsx("div", { style: OVERLAY_STYLE, children: _jsx(Molecule3DToolbar, { tools: tools, fullscreen: fullscreen, measureKind: measureKind, onMeasureKindChange: setMeasureKind, measurementCount: measurements.length, onClearMeasurements: () => {
|
|
92
73
|
setMeasurements(NO_MEASUREMENTS);
|
|
93
74
|
}, spinning: spinning, onSpinningChange: setSpinning, showSurface: settings.showSurface, onShowSurfaceChange: (showSurface) => {
|
|
94
75
|
setSettings({ ...settings, showSurface });
|
|
95
|
-
}, onResetView: resetView, options: _jsx(Molecule3DOptions, { settings: settings, onChange: setSettings, polarSurfaceArea: polarSurfaceArea, defaults: initialSettings }), exportPanel: _jsx(Molecule3DExport, { getSize: canvasSize, onExport: exportImage, onCopy: copyImage }) }) }))] })) }));
|
|
76
|
+
}, onResetView: resetView, options: _jsx(Molecule3DOptions, { settings: settings, onChange: setSettings, polarSurfaceArea: polarSurfaceArea, defaults: initialSettings }), exportPanel: _jsx(Molecule3DExport, { getSize: canvasSize, onExport: exportImage, onCopy: copyImage, frameCount: frameCount }) }) }))] })) }));
|
|
96
77
|
}
|
|
97
78
|
const NO_MEASUREMENTS = [];
|
|
98
79
|
const NO_HIGHLIGHTS = [];
|
|
@@ -108,6 +89,7 @@ const CANVAS_STYLE = { position: 'absolute', inset: 0 };
|
|
|
108
89
|
const OVERLAY_STYLE = {
|
|
109
90
|
position: 'absolute',
|
|
110
91
|
top: 8,
|
|
92
|
+
bottom: 8,
|
|
111
93
|
left: 8,
|
|
112
94
|
zIndex: 2,
|
|
113
95
|
display: 'flex',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MoleculeCanvas3D.js","sourceRoot":"","sources":["../../../src/molecule3d/ui/MoleculeCanvas3D.tsx"],"names":[],"mappings":";AASA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"MoleculeCanvas3D.js","sourceRoot":"","sources":["../../../src/molecule3d/ui/MoleculeCanvas3D.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
import type { Molecule3DFile } from '../core/file.ts';
|
|
1
2
|
import type { Measurement } from '../core/measurement.ts';
|
|
2
|
-
import type {
|
|
3
|
+
import type { Molecule3DSettings } from '../core/settings.ts';
|
|
3
4
|
import type { Molecule3DViewer } from './viewer.ts';
|
|
4
5
|
/** The operations of the viewer a scene is drawn with. */
|
|
5
6
|
export type SceneViewer = Pick<Molecule3DViewer, 'showMolecule' | 'hideMolecule' | 'showSurface' | 'showMeasurements' | 'resetCamera' | 'setCamera'>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"drawScene.d.ts","sourceRoot":"","sources":["../../../src/molecule3d/ui/drawScene.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"drawScene.d.ts","sourceRoot":"","sources":["../../../src/molecule3d/ui/drawScene.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAG9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD,0DAA0D;AAC1D,MAAM,MAAM,WAAW,GAAG,IAAI,CAC5B,gBAAgB,EACd,cAAc,GACd,cAAc,GACd,aAAa,GACb,kBAAkB,GAClB,aAAa,GACb,WAAW,CACd,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,wBAAsB,SAAS,CAC7B,MAAM,EAAE,WAAW,EACnB,OAAO,EAAE,cAAc,GAAG,IAAI,EAC9B,QAAQ,EAAE,kBAAkB,EAC5B,YAAY,EAAE,SAAS,WAAW,EAAE,EACpC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GACrC,OAAO,CAAC,IAAI,CAAC,CAqBf"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"drawScene.js","sourceRoot":"","sources":["../../../src/molecule3d/ui/drawScene.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"drawScene.js","sourceRoot":"","sources":["../../../src/molecule3d/ui/drawScene.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,2BAA2B,EAAE,MAAM,qBAAqB,CAAC;AAelE;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,MAAmB,EACnB,OAA8B,EAC9B,QAA4B,EAC5B,YAAoC,EACpC,WAAsC;IAEtC,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACrB,MAAM,MAAM,CAAC,YAAY,EAAE,CAAC;QAC5B,OAAO;IACT,CAAC;IACD,MAAM,IAAI,GAAG,2BAA2B,CAAC,QAAQ,CAAC,CAAC;IACnD,MAAM,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE;QACjC,cAAc,EAAE,IAAI,CAAC,cAAc;QACnC,UAAU,EAAE,IAAI,CAAC,UAAU;KAC5B,CAAC,CAAC;IACH,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;QACrB,MAAM,MAAM,CAAC,WAAW,CAAC;YACvB,KAAK,EAAE,IAAI,CAAC,YAAY;YACxB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,QAAQ,EAAE,IAAI,CAAC,eAAe;YAC9B,KAAK,EAAE,IAAI,CAAC,YAAY;SACzB,CAAC,CAAC;IACL,CAAC;IACD,MAAM,MAAM,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC;IAC5C,IAAI,WAAW,KAAK,MAAM;QAAE,MAAM,MAAM,CAAC,WAAW,EAAE,CAAC;IACvD,IAAI,WAAW,KAAK,OAAO;QAAE,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AACjE,CAAC"}
|
|
@@ -1,9 +1,17 @@
|
|
|
1
1
|
import type { FigureFormat } from '../../download/core/downloadFigure.ts';
|
|
2
2
|
import type { ImageSize } from '../core/exportImage.ts';
|
|
3
|
-
/**
|
|
3
|
+
/** What an export asks of a viewer: a picture of its scene. */
|
|
4
4
|
export interface SceneCapture {
|
|
5
5
|
/** Render the scene at that pixel size, as a `data:` URI. */
|
|
6
6
|
captureImage: (size: ImageSize) => Promise<string | undefined>;
|
|
7
|
+
/**
|
|
8
|
+
* The frames of the scene, each rendered at that pixel size, for an animated
|
|
9
|
+
* PNG.
|
|
10
|
+
* @default undefined — the viewer has a single frame to give
|
|
11
|
+
*/
|
|
12
|
+
frames?: {
|
|
13
|
+
capture: (size: ImageSize) => Promise<ImageData[] | undefined>;
|
|
14
|
+
};
|
|
7
15
|
}
|
|
8
16
|
/** What {@link exportMoleculeImage} writes. */
|
|
9
17
|
export interface MoleculeImageRequest {
|
|
@@ -14,6 +22,12 @@ export interface MoleculeImageRequest {
|
|
|
14
22
|
size: ImageSize;
|
|
15
23
|
/** File name without its extension. */
|
|
16
24
|
fileName: string;
|
|
25
|
+
/**
|
|
26
|
+
* Every frame of the scene as one animated PNG, played at this many frames a
|
|
27
|
+
* second, rather than the frame on screen. Ignored for an SVG.
|
|
28
|
+
* @default undefined — the frame on screen
|
|
29
|
+
*/
|
|
30
|
+
framesPerSecond?: number;
|
|
17
31
|
}
|
|
18
32
|
/**
|
|
19
33
|
* Render the scene as a PNG, for the clipboard.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exportMoleculeImage.d.ts","sourceRoot":"","sources":["../../../src/molecule3d/ui/exportMoleculeImage.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;
|
|
1
|
+
{"version":3,"file":"exportMoleculeImage.d.ts","sourceRoot":"","sources":["../../../src/molecule3d/ui/exportMoleculeImage.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AAM1E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAGxD,+DAA+D;AAC/D,MAAM,WAAW,YAAY;IAC3B,6DAA6D;IAC7D,YAAY,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAC/D;;;;OAIG;IACH,MAAM,CAAC,EAAE;QACP,OAAO,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,OAAO,CAAC,SAAS,EAAE,GAAG,SAAS,CAAC,CAAC;KAChE,CAAC;CACH;AAED,+CAA+C;AAC/C,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,YAAY,CAAC;IACrB,mEAAmE;IACnE,KAAK,EAAE,MAAM,CAAC;IACd,gDAAgD;IAChD,IAAI,EAAE,SAAS,CAAC;IAChB,uCAAuC;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;;GAOG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,SAAS,GACd,OAAO,CAAC,IAAI,CAAC,CAMf;AAED;;;;;GAKG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,IAAI,CAAC,CA2Bf"}
|
|
@@ -3,6 +3,7 @@ import { FIGURE_PNG_TYPE } from "../../download/core/figurePng.js";
|
|
|
3
3
|
import { figurePixels } from "../../download/core/figureScale.js";
|
|
4
4
|
import { FIGURE_SVG_TYPE } from "../../download/core/figureSvg.js";
|
|
5
5
|
import { sanitizeFileName } from "../../download/core/sanitizeFileName.js";
|
|
6
|
+
import { encodeAnimatedPng } from "../core/animatedPng.js";
|
|
6
7
|
import { dataUriBytes, rasterSvgMarkup } from "../core/exportImage.js";
|
|
7
8
|
/**
|
|
8
9
|
* Render the scene as a PNG, for the clipboard.
|
|
@@ -26,12 +27,23 @@ export async function captureMoleculePng(viewer, scale, size) {
|
|
|
26
27
|
* @returns Nothing; resolves once the download has been started.
|
|
27
28
|
*/
|
|
28
29
|
export async function exportMoleculeImage(viewer, request) {
|
|
29
|
-
const { format, scale, size, fileName } = request;
|
|
30
|
+
const { format, scale, size, fileName, framesPerSecond } = request;
|
|
30
31
|
const pixels = figurePixels(size, scale);
|
|
32
|
+
const base = sanitizeFileName(fileName, 'molecule');
|
|
33
|
+
if (format === 'png' && framesPerSecond !== undefined) {
|
|
34
|
+
if (viewer.frames === undefined) {
|
|
35
|
+
throw new Error('This viewer has no frames to animate.');
|
|
36
|
+
}
|
|
37
|
+
const frames = await viewer.frames.capture(pixels);
|
|
38
|
+
if (frames === undefined)
|
|
39
|
+
return;
|
|
40
|
+
const bytes = await encodeAnimatedPng(frames, framesPerSecond);
|
|
41
|
+
downloadBlob(new Blob([bytes], { type: FIGURE_PNG_TYPE }), `${base}.png`);
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
31
44
|
const dataUri = await viewer.captureImage(pixels);
|
|
32
45
|
if (dataUri === undefined)
|
|
33
46
|
return;
|
|
34
|
-
const base = sanitizeFileName(fileName, 'molecule');
|
|
35
47
|
if (format === 'png') {
|
|
36
48
|
downloadBlob(new Blob([dataUriBytes(dataUri)], { type: FIGURE_PNG_TYPE }), `${base}.png`);
|
|
37
49
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exportMoleculeImage.js","sourceRoot":"","sources":["../../../src/molecule3d/ui/exportMoleculeImage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AAEnE,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"exportMoleculeImage.js","sourceRoot":"","sources":["../../../src/molecule3d/ui/exportMoleculeImage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AAEnE,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAiCvE;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,MAAoB,EACpB,KAAa,EACb,IAAe;IAEf,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;IACrE,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;IACtD,CAAC;IACD,OAAO,IAAI,IAAI,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC,CAAC;AACtE,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,MAAoB,EACpB,OAA6B;IAE7B,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC;IACnE,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACzC,MAAM,IAAI,GAAG,gBAAgB,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IACpD,IAAI,MAAM,KAAK,KAAK,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;QACtD,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;QAC3D,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACnD,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO;QACjC,MAAM,KAAK,GAAG,MAAM,iBAAiB,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;QAC/D,YAAY,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC,EAAE,GAAG,IAAI,MAAM,CAAC,CAAC;QAC1E,OAAO;IACT,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IAClD,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO;IAClC,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;QACrB,YAAY,CACV,IAAI,IAAI,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC,EAC5D,GAAG,IAAI,MAAM,CACd,CAAC;QACF,OAAO;IACT,CAAC;IACD,YAAY,CACV,IAAI,IAAI,CAAC,CAAC,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC,EACvE,GAAG,IAAI,MAAM,CACd,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The frames of the file a viewer shows: how many there are, whether they
|
|
3
|
+
* play, and a picture of each.
|
|
4
|
+
*
|
|
5
|
+
* Kept apart from the viewer because every redraw of the scene has to go
|
|
6
|
+
* through it: a running animation must not step a state tree being rebuilt —
|
|
7
|
+
* it finds no model and stops itself — so the frames are stopped first and
|
|
8
|
+
* started again once the new file is drawn.
|
|
9
|
+
*/
|
|
10
|
+
import type { PluginContext } from 'molstar/lib/mol-plugin/context.js';
|
|
11
|
+
import type { MolstarPlugin } from '../../molstar/core/index.ts';
|
|
12
|
+
import type { ImageSize } from '../core/exportImage.ts';
|
|
13
|
+
/** The frames of what one viewer shows. */
|
|
14
|
+
export declare class MoleculeFrames {
|
|
15
|
+
#private;
|
|
16
|
+
/**
|
|
17
|
+
* Follow the frames of what `plugin` draws.
|
|
18
|
+
* @param plugin - The canvas.
|
|
19
|
+
* @param onCountChange - Called with how many frames each scene drawn holds.
|
|
20
|
+
*/
|
|
21
|
+
constructor(plugin: MolstarPlugin, onCountChange: (frameCount: number) => void);
|
|
22
|
+
/**
|
|
23
|
+
* Redraw the scene with the frames stopped, then report how many the new
|
|
24
|
+
* scene holds and play them if playback is on.
|
|
25
|
+
* @param plugin - The molstar context.
|
|
26
|
+
* @param draw - Draws the scene, and resolves with how many frames it holds.
|
|
27
|
+
* @returns Nothing; resolves once the scene is drawn and playing.
|
|
28
|
+
*/
|
|
29
|
+
redraw(plugin: PluginContext, draw: () => Promise<number>): Promise<void>;
|
|
30
|
+
/**
|
|
31
|
+
* Play the frames in a loop, or stop them, now and for every scene drawn
|
|
32
|
+
* afterwards. A scene of one frame stays still.
|
|
33
|
+
* @param playing - Whether to play.
|
|
34
|
+
* @param framesPerSecond - How fast.
|
|
35
|
+
* @returns Nothing; resolves once the animation is started or stopped.
|
|
36
|
+
*/
|
|
37
|
+
play(playing: boolean, framesPerSecond: number): Promise<void>;
|
|
38
|
+
/**
|
|
39
|
+
* Render every frame off screen, as a still picture of the scene is
|
|
40
|
+
* rendered. Playback pauses while they are taken.
|
|
41
|
+
* @param size - Pixel size of each picture.
|
|
42
|
+
* @returns The pictures, in order; `undefined` once the canvas is disposed.
|
|
43
|
+
* @throws {Error} When the plugin has no screenshot helper.
|
|
44
|
+
*/
|
|
45
|
+
capture(size: ImageSize): Promise<ImageData[] | undefined>;
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=moleculeFrames.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"moleculeFrames.d.ts","sourceRoot":"","sources":["../../../src/molecule3d/ui/moleculeFrames.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAEvE,OAAO,KAAK,EAAiB,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAOhF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAExD,2CAA2C;AAC3C,qBAAa,cAAc;;IASzB;;;;OAIG;gBAED,MAAM,EAAE,aAAa,EACrB,aAAa,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI;IAM7C;;;;;;OAMG;IACG,MAAM,CACV,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,GAC1B,OAAO,CAAC,IAAI,CAAC;IAOhB;;;;;;OAMG;IACH,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAO9D;;;;;;OAMG;IACH,OAAO,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,SAAS,EAAE,GAAG,SAAS,CAAC;CAK3D"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The frames of the file a viewer shows: how many there are, whether they
|
|
3
|
+
* play, and a picture of each.
|
|
4
|
+
*
|
|
5
|
+
* Kept apart from the viewer because every redraw of the scene has to go
|
|
6
|
+
* through it: a running animation must not step a state tree being rebuilt —
|
|
7
|
+
* it finds no model and stops itself — so the frames are stopped first and
|
|
8
|
+
* started again once the new file is drawn.
|
|
9
|
+
*/
|
|
10
|
+
import { captureFrames, setTrajectoryPlayback, stopTrajectory, } from "../../molstar/core/index.js";
|
|
11
|
+
import { DEFAULT_FRAMES_PER_SECOND } from "../core/animatedPng.js";
|
|
12
|
+
/** The frames of what one viewer shows. */
|
|
13
|
+
export class MoleculeFrames {
|
|
14
|
+
#plugin;
|
|
15
|
+
#onCountChange;
|
|
16
|
+
// Kept across redraws, so the next file plays as the last one did.
|
|
17
|
+
#playback = {
|
|
18
|
+
playing: false,
|
|
19
|
+
framesPerSecond: DEFAULT_FRAMES_PER_SECOND,
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Follow the frames of what `plugin` draws.
|
|
23
|
+
* @param plugin - The canvas.
|
|
24
|
+
* @param onCountChange - Called with how many frames each scene drawn holds.
|
|
25
|
+
*/
|
|
26
|
+
constructor(plugin, onCountChange) {
|
|
27
|
+
this.#plugin = plugin;
|
|
28
|
+
this.#onCountChange = onCountChange;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Redraw the scene with the frames stopped, then report how many the new
|
|
32
|
+
* scene holds and play them if playback is on.
|
|
33
|
+
* @param plugin - The molstar context.
|
|
34
|
+
* @param draw - Draws the scene, and resolves with how many frames it holds.
|
|
35
|
+
* @returns Nothing; resolves once the scene is drawn and playing.
|
|
36
|
+
*/
|
|
37
|
+
async redraw(plugin, draw) {
|
|
38
|
+
await stopTrajectory(plugin);
|
|
39
|
+
this.#onCountChange(await draw());
|
|
40
|
+
const { playing, framesPerSecond } = this.#playback;
|
|
41
|
+
await setTrajectoryPlayback(plugin, playing, framesPerSecond);
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Play the frames in a loop, or stop them, now and for every scene drawn
|
|
45
|
+
* afterwards. A scene of one frame stays still.
|
|
46
|
+
* @param playing - Whether to play.
|
|
47
|
+
* @param framesPerSecond - How fast.
|
|
48
|
+
* @returns Nothing; resolves once the animation is started or stopped.
|
|
49
|
+
*/
|
|
50
|
+
play(playing, framesPerSecond) {
|
|
51
|
+
this.#playback = { playing, framesPerSecond };
|
|
52
|
+
return this.#plugin.run((plugin) => setTrajectoryPlayback(plugin, playing, framesPerSecond));
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Render every frame off screen, as a still picture of the scene is
|
|
56
|
+
* rendered. Playback pauses while they are taken.
|
|
57
|
+
* @param size - Pixel size of each picture.
|
|
58
|
+
* @returns The pictures, in order; `undefined` once the canvas is disposed.
|
|
59
|
+
* @throws {Error} When the plugin has no screenshot helper.
|
|
60
|
+
*/
|
|
61
|
+
capture(size) {
|
|
62
|
+
return this.#plugin.run((plugin) => captureFrames(plugin, size, this.#playback));
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=moleculeFrames.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"moleculeFrames.js","sourceRoot":"","sources":["../../../src/molecule3d/ui/moleculeFrames.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,EACL,aAAa,EACb,qBAAqB,EACrB,cAAc,GACf,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AAGnE,2CAA2C;AAC3C,MAAM,OAAO,cAAc;IAChB,OAAO,CAAgB;IACvB,cAAc,CAA+B;IACtD,mEAAmE;IACnE,SAAS,GAAkB;QACzB,OAAO,EAAE,KAAK;QACd,eAAe,EAAE,yBAAyB;KAC3C,CAAC;IAEF;;;;OAIG;IACH,YACE,MAAqB,EACrB,aAA2C;QAE3C,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC;IACtC,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,MAAM,CACV,MAAqB,EACrB,IAA2B;QAE3B,MAAM,cAAc,CAAC,MAAM,CAAC,CAAC;QAC7B,IAAI,CAAC,cAAc,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;QAClC,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC;QACpD,MAAM,qBAAqB,CAAC,MAAM,EAAE,OAAO,EAAE,eAAe,CAAC,CAAC;IAChE,CAAC;IAED;;;;;;OAMG;IACH,IAAI,CAAC,OAAgB,EAAE,eAAuB;QAC5C,IAAI,CAAC,SAAS,GAAG,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC;QAC9C,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CACjC,qBAAqB,CAAC,MAAM,EAAE,OAAO,EAAE,eAAe,CAAC,CACxD,CAAC;IACJ,CAAC;IAED;;;;;;OAMG;IACH,OAAO,CAAC,IAAe;QACrB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CACjC,aAAa,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAC5C,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import type { ReactNode } from 'react';
|
|
2
2
|
import type { ViewerCapability } from '../../orbital/ui/capability.ts';
|
|
3
3
|
import type { Molecule3DCamera } from '../core/camera.ts';
|
|
4
|
+
import type { Molecule3DFile } from '../core/file.ts';
|
|
4
5
|
import type { Molecule3DHighlight } from '../core/highlight.ts';
|
|
5
6
|
import type { Measurement } from '../core/measurement.ts';
|
|
6
|
-
import type {
|
|
7
|
+
import type { Molecule3DSettings, Molecule3DTools } from '../core/settings.ts';
|
|
7
8
|
/**
|
|
8
9
|
* Props of `MoleculeViewer3D`.
|
|
9
10
|
*
|
|
@@ -63,6 +64,18 @@ export interface MoleculeViewer3DProps {
|
|
|
63
64
|
* @default 1 / 3
|
|
64
65
|
*/
|
|
65
66
|
spinSpeed?: number;
|
|
67
|
+
/**
|
|
68
|
+
* Whether the frames of a file holding several are played in a loop. A file
|
|
69
|
+
* of one model stays still whatever this says.
|
|
70
|
+
* @default false
|
|
71
|
+
*/
|
|
72
|
+
playing?: boolean;
|
|
73
|
+
/**
|
|
74
|
+
* How many frames are shown per second while playing, and in an animated
|
|
75
|
+
* PNG; molstar plays between 5 and 60.
|
|
76
|
+
* @default 25
|
|
77
|
+
*/
|
|
78
|
+
framesPerSecond?: number;
|
|
66
79
|
/**
|
|
67
80
|
* The measurements drawn over the model, when the site owns them. They name
|
|
68
81
|
* atoms by position, so they carry over to another conformer of the same
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"moleculeViewer3DProps.d.ts","sourceRoot":"","sources":["../../../src/molecule3d/ui/moleculeViewer3DProps.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"moleculeViewer3DProps.d.ts","sourceRoot":"","sources":["../../../src/molecule3d/ui/moleculeViewer3DProps.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAE/E;;;;;;GAMG;AACH,MAAM,WAAW,qBAAqB;IACpC,qEAAqE;IACrE,OAAO,EAAE,cAAc,GAAG,IAAI,CAAC;IAC/B;;;;;;OAMG;IACH,gBAAgB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACpC;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;IACjC;;;OAGG;IACH,QAAQ,CAAC,EAAE,kBAAkB,CAAC;IAC9B;;;;OAIG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC9C;;;OAGG;IACH,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE,kBAAkB,KAAK,IAAI,CAAC;IAC1D;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;OAGG;IACH,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC;IAC/C;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;OAIG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;;;;;OAOG;IACH,YAAY,CAAC,EAAE,SAAS,WAAW,EAAE,CAAC;IACtC;;;OAGG;IACH,oBAAoB,CAAC,EAAE,CAAC,YAAY,EAAE,SAAS,WAAW,EAAE,KAAK,IAAI,CAAC;IACtE;;;;;;;;;;OAUG;IACH,UAAU,CAAC,EAAE,SAAS,mBAAmB,EAAE,CAAC;IAC5C;;;;;;OAMG;IACH,aAAa,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACxC;;;;OAIG;IACH,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,gBAAgB,KAAK,IAAI,CAAC;IACpD;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB;;;OAGG;IACH,iBAAiB,CAAC,EAAE,CAAC,UAAU,EAAE,gBAAgB,KAAK,SAAS,CAAC;CACjE"}
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
*/
|
|
9
9
|
import type { Structure } from 'molstar/lib/mol-model/structure.js';
|
|
10
10
|
import type { PluginContext } from 'molstar/lib/mol-plugin/context.js';
|
|
11
|
-
import type { Molecule3DFile } from '../core/
|
|
11
|
+
import type { Molecule3DFile } from '../core/file.ts';
|
|
12
12
|
import type { MoleculeStyle } from './viewerTypes.ts';
|
|
13
13
|
/** State-tree ref of the structure every representation hangs off. */
|
|
14
14
|
export declare const MOLECULE_STRUCTURE_REF = "molecule3d-structure";
|
|
@@ -19,12 +19,12 @@ export declare const MODEL_REPRESENTATION_REF = "molecule3d-model";
|
|
|
19
19
|
* @param plugin - The molstar context.
|
|
20
20
|
* @param molfile - Molfile text plus the format id.
|
|
21
21
|
* @param style - See {@link MoleculeStyle}.
|
|
22
|
-
* @returns
|
|
22
|
+
* @returns How many frames the file holds, the first of which is on screen.
|
|
23
23
|
* @throws {Error} When the file parses to zero atoms. molstar's `mol` parser returns
|
|
24
24
|
* exactly that on a V3000 file, with no error, so without this check the viewer
|
|
25
25
|
* would show an empty scene and report nothing.
|
|
26
26
|
*/
|
|
27
|
-
export declare function renderMolecule(plugin: PluginContext, molfile: Molecule3DFile, style?: MoleculeStyle): Promise<
|
|
27
|
+
export declare function renderMolecule(plugin: PluginContext, molfile: Molecule3DFile, style?: MoleculeStyle): Promise<number>;
|
|
28
28
|
/**
|
|
29
29
|
* Remove the molecule, and with it any surface drawn on the same atoms.
|
|
30
30
|
* @param plugin - The molstar context.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderMolecule.d.ts","sourceRoot":"","sources":["../../../src/molecule3d/ui/renderMolecule.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oCAAoC,CAAC;AACpE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAOvE,OAAO,KAAK,EAAE,cAAc,
|
|
1
|
+
{"version":3,"file":"renderMolecule.d.ts","sourceRoot":"","sources":["../../../src/molecule3d/ui/renderMolecule.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oCAAoC,CAAC;AACpE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAOvE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAGtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEtD,sEAAsE;AACtE,eAAO,MAAM,sBAAsB,yBAAyB,CAAC;AAK7D,qEAAqE;AACrE,eAAO,MAAM,wBAAwB,qBAAqB,CAAC;AAiB3D;;;;;;;;;GASG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,aAAa,EACrB,OAAO,EAAE,cAAc,EACvB,KAAK,GAAE,aAAkB,GACxB,OAAO,CAAC,MAAM,CAAC,CA2CjB;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAGxE;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,aAAa,GACpB,SAAS,GAAG,SAAS,CAIvB"}
|
|
@@ -32,7 +32,7 @@ const STICK_SCALE = 1.2;
|
|
|
32
32
|
* @param plugin - The molstar context.
|
|
33
33
|
* @param molfile - Molfile text plus the format id.
|
|
34
34
|
* @param style - See {@link MoleculeStyle}.
|
|
35
|
-
* @returns
|
|
35
|
+
* @returns How many frames the file holds, the first of which is on screen.
|
|
36
36
|
* @throws {Error} When the file parses to zero atoms. molstar's `mol` parser returns
|
|
37
37
|
* exactly that on a V3000 file, with no error, so without this check the viewer
|
|
38
38
|
* would show an empty scene and report nothing.
|
|
@@ -62,6 +62,7 @@ export async function renderMolecule(plugin, molfile, style = {}) {
|
|
|
62
62
|
.to(MOLECULE_STRUCTURE_REF)
|
|
63
63
|
.applyOrUpdate(MODEL_REPRESENTATION_REF, StructureRepresentation3D, modelParams(plugin, structure, representation, sizeFactor * NATURAL_SIZE_FACTOR))
|
|
64
64
|
.commit();
|
|
65
|
+
return trajectory.data?.frameCount ?? 1;
|
|
65
66
|
}
|
|
66
67
|
/**
|
|
67
68
|
* Remove the molecule, and with it any surface drawn on the same atoms.
|