react-cheminfo 0.69.0 → 0.71.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (616) hide show
  1. package/README.md +70 -2
  2. package/lib/about/core/providers.d.ts +6 -0
  3. package/lib/about/core/providers.d.ts.map +1 -1
  4. package/lib/about/core/providers.js +7 -0
  5. package/lib/about/core/providers.js.map +1 -1
  6. package/lib/about/ui/AboutProvidedBy.js +34 -0
  7. package/lib/about/ui/AboutProvidedBy.js.map +1 -1
  8. package/lib/chart/ui/useChartPointer.d.ts +9 -1
  9. package/lib/chart/ui/useChartPointer.d.ts.map +1 -1
  10. package/lib/chart/ui/useChartPointer.js +11 -3
  11. package/lib/chart/ui/useChartPointer.js.map +1 -1
  12. package/lib/credits/core/credits.d.ts +41 -0
  13. package/lib/credits/core/credits.d.ts.map +1 -1
  14. package/lib/credits/core/credits.js +50 -0
  15. package/lib/credits/core/credits.js.map +1 -1
  16. package/lib/download/core/drawingMarkup.d.ts +8 -1
  17. package/lib/download/core/drawingMarkup.d.ts.map +1 -1
  18. package/lib/download/core/drawingMarkup.js +13 -1
  19. package/lib/download/core/drawingMarkup.js.map +1 -1
  20. package/lib/download/core/figurePng.d.ts +14 -0
  21. package/lib/download/core/figurePng.d.ts.map +1 -1
  22. package/lib/download/core/figurePng.js +21 -6
  23. package/lib/download/core/figurePng.js.map +1 -1
  24. package/lib/download/core/figureSvg.d.ts.map +1 -1
  25. package/lib/download/core/figureSvg.js +5 -3
  26. package/lib/download/core/figureSvg.js.map +1 -1
  27. package/lib/download/core/figureTarget.d.ts +13 -0
  28. package/lib/download/core/figureTarget.d.ts.map +1 -1
  29. package/lib/download/core/figureTarget.js +25 -5
  30. package/lib/download/core/figureTarget.js.map +1 -1
  31. package/lib/download/core/svgBounds.d.ts +15 -0
  32. package/lib/download/core/svgBounds.d.ts.map +1 -1
  33. package/lib/download/core/svgBounds.js +20 -0
  34. package/lib/download/core/svgBounds.js.map +1 -1
  35. package/lib/download/core/svgToPng.d.ts.map +1 -1
  36. package/lib/download/core/svgToPng.js +4 -2
  37. package/lib/download/core/svgToPng.js.map +1 -1
  38. package/lib/format/core/relativeTime.d.ts +8 -3
  39. package/lib/format/core/relativeTime.d.ts.map +1 -1
  40. package/lib/format/core/relativeTime.js +19 -7
  41. package/lib/format/core/relativeTime.js.map +1 -1
  42. package/lib/host/core/connectHost.d.ts +25 -34
  43. package/lib/host/core/connectHost.d.ts.map +1 -1
  44. package/lib/host/core/connectHost.js +43 -89
  45. package/lib/host/core/connectHost.js.map +1 -1
  46. package/lib/host/core/hostOutputs.d.ts +58 -0
  47. package/lib/host/core/hostOutputs.d.ts.map +1 -0
  48. package/lib/host/core/hostOutputs.js +151 -0
  49. package/lib/host/core/hostOutputs.js.map +1 -0
  50. package/lib/host/core/index.d.ts +9 -3
  51. package/lib/host/core/index.d.ts.map +1 -1
  52. package/lib/host/core/index.js +4 -1
  53. package/lib/host/core/index.js.map +1 -1
  54. package/lib/host/core/irKinds.d.ts +124 -0
  55. package/lib/host/core/irKinds.d.ts.map +1 -0
  56. package/lib/host/core/irKinds.js +46 -0
  57. package/lib/host/core/irKinds.js.map +1 -0
  58. package/lib/host/core/kinds.d.ts +13 -5
  59. package/lib/host/core/kinds.d.ts.map +1 -1
  60. package/lib/host/core/kinds.js +11 -5
  61. package/lib/host/core/kinds.js.map +1 -1
  62. package/lib/host/core/protocol.d.ts +50 -7
  63. package/lib/host/core/protocol.d.ts.map +1 -1
  64. package/lib/host/core/protocol.js +10 -6
  65. package/lib/host/core/protocol.js.map +1 -1
  66. package/lib/host/core/selectInputs.d.ts +37 -0
  67. package/lib/host/core/selectInputs.d.ts.map +1 -0
  68. package/lib/host/core/selectInputs.js +110 -0
  69. package/lib/host/core/selectInputs.js.map +1 -0
  70. package/lib/host/testing/sciPeaks.d.ts +31 -0
  71. package/lib/host/testing/sciPeaks.d.ts.map +1 -1
  72. package/lib/host/testing/sciPeaks.js +73 -0
  73. package/lib/host/testing/sciPeaks.js.map +1 -1
  74. package/lib/host/testing/standInHost.d.ts +9 -1
  75. package/lib/host/testing/standInHost.d.ts.map +1 -1
  76. package/lib/host/testing/standInHost.js +19 -1
  77. package/lib/host/testing/standInHost.js.map +1 -1
  78. package/lib/host/ui/useHostConnection.d.ts +13 -5
  79. package/lib/host/ui/useHostConnection.d.ts.map +1 -1
  80. package/lib/host/ui/useHostConnection.js +4 -3
  81. package/lib/host/ui/useHostConnection.js.map +1 -1
  82. package/lib/host-testing.d.ts +2 -2
  83. package/lib/host-testing.d.ts.map +1 -1
  84. package/lib/host-testing.js +2 -2
  85. package/lib/host-testing.js.map +1 -1
  86. package/lib/i18n/core/chromeCatalog.d.ts +1 -1
  87. package/lib/i18n/core/chromeCatalog.d.ts.map +1 -1
  88. package/lib/ir/core/handPicking.d.ts +58 -0
  89. package/lib/ir/core/handPicking.d.ts.map +1 -0
  90. package/lib/ir/core/handPicking.js +130 -0
  91. package/lib/ir/core/handPicking.js.map +1 -0
  92. package/lib/ir/core/index.d.ts +3 -0
  93. package/lib/ir/core/index.d.ts.map +1 -1
  94. package/lib/ir/core/index.js +3 -0
  95. package/lib/ir/core/index.js.map +1 -1
  96. package/lib/ir/core/irBandState.d.ts +57 -0
  97. package/lib/ir/core/irBandState.d.ts.map +1 -0
  98. package/lib/ir/core/irBandState.js +119 -0
  99. package/lib/ir/core/irBandState.js.map +1 -0
  100. package/lib/ir/core/irCommands.d.ts +11 -0
  101. package/lib/ir/core/irCommands.d.ts.map +1 -1
  102. package/lib/ir/core/irCommands.js +6 -0
  103. package/lib/ir/core/irCommands.js.map +1 -1
  104. package/lib/ir/core/irPeaks.d.ts +28 -0
  105. package/lib/ir/core/irPeaks.d.ts.map +1 -0
  106. package/lib/ir/core/irPeaks.js +66 -0
  107. package/lib/ir/core/irPeaks.js.map +1 -0
  108. package/lib/ir/core/irReducer.d.ts +8 -0
  109. package/lib/ir/core/irReducer.d.ts.map +1 -1
  110. package/lib/ir/core/irReducer.js +15 -32
  111. package/lib/ir/core/irReducer.js.map +1 -1
  112. package/lib/ir/core/irSpectrum.d.ts +15 -0
  113. package/lib/ir/core/irSpectrum.d.ts.map +1 -1
  114. package/lib/ir/core/irSpectrum.js.map +1 -1
  115. package/lib/ir/core/irState.d.ts +9 -6
  116. package/lib/ir/core/irState.d.ts.map +1 -1
  117. package/lib/ir/core/irState.js +10 -6
  118. package/lib/ir/core/irState.js.map +1 -1
  119. package/lib/ir/core/pickBands.d.ts +14 -0
  120. package/lib/ir/core/pickBands.d.ts.map +1 -1
  121. package/lib/ir/core/pickBands.js +39 -33
  122. package/lib/ir/core/pickBands.js.map +1 -1
  123. package/lib/ir/core/ramanBands.d.ts +9 -1
  124. package/lib/ir/core/ramanBands.d.ts.map +1 -1
  125. package/lib/ir/core/ramanBands.js +2 -2
  126. package/lib/ir/core/ramanBands.js.map +1 -1
  127. package/lib/ir/core/spectrumBands.d.ts +46 -0
  128. package/lib/ir/core/spectrumBands.d.ts.map +1 -0
  129. package/lib/ir/core/spectrumBands.js +98 -0
  130. package/lib/ir/core/spectrumBands.js.map +1 -0
  131. package/lib/ir/ui/BandRow.d.ts +5 -0
  132. package/lib/ir/ui/BandRow.d.ts.map +1 -1
  133. package/lib/ir/ui/BandRow.js +4 -3
  134. package/lib/ir/ui/BandRow.js.map +1 -1
  135. package/lib/ir/ui/BandsPanel.d.ts +5 -0
  136. package/lib/ir/ui/BandsPanel.d.ts.map +1 -1
  137. package/lib/ir/ui/BandsPanel.js +36 -16
  138. package/lib/ir/ui/BandsPanel.js.map +1 -1
  139. package/lib/ir/ui/BandsToolbar.d.ts +9 -0
  140. package/lib/ir/ui/BandsToolbar.d.ts.map +1 -0
  141. package/lib/ir/ui/BandsToolbar.js +61 -0
  142. package/lib/ir/ui/BandsToolbar.js.map +1 -0
  143. package/lib/ir/ui/IrCanvas.d.ts +2 -1
  144. package/lib/ir/ui/IrCanvas.d.ts.map +1 -1
  145. package/lib/ir/ui/IrCanvas.js +19 -5
  146. package/lib/ir/ui/IrCanvas.js.map +1 -1
  147. package/lib/ir/ui/IrChart.d.ts.map +1 -1
  148. package/lib/ir/ui/IrChart.js +8 -1
  149. package/lib/ir/ui/IrChart.js.map +1 -1
  150. package/lib/ir/ui/IrDocumentationDialog.js +1 -1
  151. package/lib/ir/ui/IrDocumentationDialog.js.map +1 -1
  152. package/lib/ir/ui/IrEditor.d.ts +4 -2
  153. package/lib/ir/ui/IrEditor.d.ts.map +1 -1
  154. package/lib/ir/ui/IrEditor.js.map +1 -1
  155. package/lib/ir/ui/IrShell.d.ts.map +1 -1
  156. package/lib/ir/ui/IrShell.js +6 -0
  157. package/lib/ir/ui/IrShell.js.map +1 -1
  158. package/lib/ir/ui/IrStatusBar.d.ts.map +1 -1
  159. package/lib/ir/ui/IrStatusBar.js +1 -1
  160. package/lib/ir/ui/IrStatusBar.js.map +1 -1
  161. package/lib/ir/ui/IrToolbar.d.ts +4 -3
  162. package/lib/ir/ui/IrToolbar.d.ts.map +1 -1
  163. package/lib/ir/ui/IrToolbar.js +5 -4
  164. package/lib/ir/ui/IrToolbar.js.map +1 -1
  165. package/lib/ir/ui/VibrationalEditor.d.ts +2 -1
  166. package/lib/ir/ui/VibrationalEditor.d.ts.map +1 -1
  167. package/lib/ir/ui/VibrationalEditor.js.map +1 -1
  168. package/lib/ir/ui/irActions.d.ts +5 -0
  169. package/lib/ir/ui/irActions.d.ts.map +1 -1
  170. package/lib/ir/ui/irActions.js +6 -0
  171. package/lib/ir/ui/irActions.js.map +1 -1
  172. package/lib/ir/ui/irChartProps.d.ts +4 -1
  173. package/lib/ir/ui/irChartProps.d.ts.map +1 -1
  174. package/lib/ir/ui/useIrEditor.d.ts +5 -11
  175. package/lib/ir/ui/useIrEditor.d.ts.map +1 -1
  176. package/lib/ir/ui/useIrEditor.js +17 -18
  177. package/lib/ir/ui/useIrEditor.js.map +1 -1
  178. package/lib/locales/de.json +63 -0
  179. package/lib/locales/en.json +63 -0
  180. package/lib/locales/es.json +63 -0
  181. package/lib/locales/fr.json +63 -0
  182. package/lib/locales/it.json +63 -0
  183. package/lib/mass/core/analyseSpectrum.d.ts +85 -0
  184. package/lib/mass/core/analyseSpectrum.d.ts.map +1 -0
  185. package/lib/mass/core/analyseSpectrum.js +101 -0
  186. package/lib/mass/core/analyseSpectrum.js.map +1 -0
  187. package/lib/mass/core/ascendingTrace.d.ts +24 -0
  188. package/lib/mass/core/ascendingTrace.d.ts.map +1 -0
  189. package/lib/mass/core/ascendingTrace.js +57 -0
  190. package/lib/mass/core/ascendingTrace.js.map +1 -0
  191. package/lib/mass/core/centroidPeaks.d.ts +77 -0
  192. package/lib/mass/core/centroidPeaks.d.ts.map +1 -0
  193. package/lib/mass/core/centroidPeaks.js +62 -0
  194. package/lib/mass/core/centroidPeaks.js.map +1 -0
  195. package/lib/mass/core/detectMassFormat.d.ts +24 -0
  196. package/lib/mass/core/detectMassFormat.d.ts.map +1 -0
  197. package/lib/mass/core/detectMassFormat.js +105 -0
  198. package/lib/mass/core/detectMassFormat.js.map +1 -0
  199. package/lib/mass/core/downloadSpectra.d.ts +24 -0
  200. package/lib/mass/core/downloadSpectra.d.ts.map +1 -0
  201. package/lib/mass/core/downloadSpectra.js +35 -0
  202. package/lib/mass/core/downloadSpectra.js.map +1 -0
  203. package/lib/mass/core/fromJcamp.d.ts +46 -0
  204. package/lib/mass/core/fromJcamp.d.ts.map +1 -0
  205. package/lib/mass/core/fromJcamp.js +123 -0
  206. package/lib/mass/core/fromJcamp.js.map +1 -0
  207. package/lib/mass/core/fromText.d.ts +30 -0
  208. package/lib/mass/core/fromText.d.ts.map +1 -0
  209. package/lib/mass/core/fromText.js +39 -0
  210. package/lib/mass/core/fromText.js.map +1 -0
  211. package/lib/mass/core/index.d.ts +70 -0
  212. package/lib/mass/core/index.d.ts.map +1 -0
  213. package/lib/mass/core/index.js +42 -0
  214. package/lib/mass/core/index.js.map +1 -0
  215. package/lib/mass/core/jcampTechnique.d.ts +38 -0
  216. package/lib/mass/core/jcampTechnique.d.ts.map +1 -0
  217. package/lib/mass/core/jcampTechnique.js +70 -0
  218. package/lib/mass/core/jcampTechnique.js.map +1 -0
  219. package/lib/mass/core/labelStackBox.d.ts +49 -0
  220. package/lib/mass/core/labelStackBox.d.ts.map +1 -0
  221. package/lib/mass/core/labelStackBox.js +44 -0
  222. package/lib/mass/core/labelStackBox.js.map +1 -0
  223. package/lib/mass/core/labelledPeaks.d.ts +79 -0
  224. package/lib/mass/core/labelledPeaks.d.ts.map +1 -0
  225. package/lib/mass/core/labelledPeaks.js +74 -0
  226. package/lib/mass/core/labelledPeaks.js.map +1 -0
  227. package/lib/mass/core/loadMassSpectra.d.ts +57 -0
  228. package/lib/mass/core/loadMassSpectra.d.ts.map +1 -0
  229. package/lib/mass/core/loadMassSpectra.js +45 -0
  230. package/lib/mass/core/loadMassSpectra.js.map +1 -0
  231. package/lib/mass/core/loadedMassSpectrum.d.ts +42 -0
  232. package/lib/mass/core/loadedMassSpectrum.d.ts.map +1 -0
  233. package/lib/mass/core/loadedMassSpectrum.js +15 -0
  234. package/lib/mass/core/loadedMassSpectrum.js.map +1 -0
  235. package/lib/mass/core/massCommands.d.ts +170 -0
  236. package/lib/mass/core/massCommands.d.ts.map +1 -0
  237. package/lib/mass/core/massCommands.js +95 -0
  238. package/lib/mass/core/massCommands.js.map +1 -0
  239. package/lib/mass/core/massDomain.d.ts +121 -0
  240. package/lib/mass/core/massDomain.d.ts.map +1 -0
  241. package/lib/mass/core/massDomain.js +179 -0
  242. package/lib/mass/core/massDomain.js.map +1 -0
  243. package/lib/mass/core/massEditorApi.d.ts +65 -0
  244. package/lib/mass/core/massEditorApi.d.ts.map +1 -0
  245. package/lib/mass/core/massEditorApi.js +10 -0
  246. package/lib/mass/core/massEditorApi.js.map +1 -0
  247. package/lib/mass/core/massFormat.d.ts +78 -0
  248. package/lib/mass/core/massFormat.d.ts.map +1 -0
  249. package/lib/mass/core/massFormat.js +168 -0
  250. package/lib/mass/core/massFormat.js.map +1 -0
  251. package/lib/mass/core/massMeta.d.ts +85 -0
  252. package/lib/mass/core/massMeta.d.ts.map +1 -0
  253. package/lib/mass/core/massMeta.js +182 -0
  254. package/lib/mass/core/massMeta.js.map +1 -0
  255. package/lib/mass/core/massReducer.d.ts +82 -0
  256. package/lib/mass/core/massReducer.d.ts.map +1 -0
  257. package/lib/mass/core/massReducer.js +163 -0
  258. package/lib/mass/core/massReducer.js.map +1 -0
  259. package/lib/mass/core/massResolution.d.ts +92 -0
  260. package/lib/mass/core/massResolution.d.ts.map +1 -0
  261. package/lib/mass/core/massResolution.js +126 -0
  262. package/lib/mass/core/massResolution.js.map +1 -0
  263. package/lib/mass/core/massSidePanels.d.ts +28 -0
  264. package/lib/mass/core/massSidePanels.d.ts.map +1 -0
  265. package/lib/mass/core/massSidePanels.js +12 -0
  266. package/lib/mass/core/massSidePanels.js.map +1 -0
  267. package/lib/mass/core/massSpectrum.d.ts +206 -0
  268. package/lib/mass/core/massSpectrum.d.ts.map +1 -0
  269. package/lib/mass/core/massSpectrum.js +41 -0
  270. package/lib/mass/core/massSpectrum.js.map +1 -0
  271. package/lib/mass/core/massState.d.ts +145 -0
  272. package/lib/mass/core/massState.d.ts.map +1 -0
  273. package/lib/mass/core/massState.js +102 -0
  274. package/lib/mass/core/massState.js.map +1 -0
  275. package/lib/mass/core/massStateEdits.d.ts +51 -0
  276. package/lib/mass/core/massStateEdits.d.ts.map +1 -0
  277. package/lib/mass/core/massStateEdits.js +90 -0
  278. package/lib/mass/core/massStateEdits.js.map +1 -0
  279. package/lib/mass/core/massSummary.d.ts +77 -0
  280. package/lib/mass/core/massSummary.d.ts.map +1 -0
  281. package/lib/mass/core/massSummary.js +174 -0
  282. package/lib/mass/core/massSummary.js.map +1 -0
  283. package/lib/mass/core/mzDecimalsSetting.d.ts +36 -0
  284. package/lib/mass/core/mzDecimalsSetting.d.ts.map +1 -0
  285. package/lib/mass/core/mzDecimalsSetting.js +42 -0
  286. package/lib/mass/core/mzDecimalsSetting.js.map +1 -0
  287. package/lib/mass/core/nearestPeak.d.ts +75 -0
  288. package/lib/mass/core/nearestPeak.d.ts.map +1 -0
  289. package/lib/mass/core/nearestPeak.js +99 -0
  290. package/lib/mass/core/nearestPeak.js.map +1 -0
  291. package/lib/mass/core/peakLabelLines.d.ts +77 -0
  292. package/lib/mass/core/peakLabelLines.d.ts.map +1 -0
  293. package/lib/mass/core/peakLabelLines.js +54 -0
  294. package/lib/mass/core/peakLabelLines.js.map +1 -0
  295. package/lib/mass/core/peakLabelPlan.d.ts +109 -0
  296. package/lib/mass/core/peakLabelPlan.d.ts.map +1 -0
  297. package/lib/mass/core/peakLabelPlan.js +143 -0
  298. package/lib/mass/core/peakLabelPlan.js.map +1 -0
  299. package/lib/mass/core/peakTable.d.ts +54 -0
  300. package/lib/mass/core/peakTable.d.ts.map +1 -0
  301. package/lib/mass/core/peakTable.js +53 -0
  302. package/lib/mass/core/peakTable.js.map +1 -0
  303. package/lib/mass/core/resolutionOf.d.ts +60 -0
  304. package/lib/mass/core/resolutionOf.d.ts.map +1 -0
  305. package/lib/mass/core/resolutionOf.js +84 -0
  306. package/lib/mass/core/resolutionOf.js.map +1 -0
  307. package/lib/mass/core/scanFilter.d.ts +25 -0
  308. package/lib/mass/core/scanFilter.d.ts.map +1 -0
  309. package/lib/mass/core/scanFilter.js +107 -0
  310. package/lib/mass/core/scanFilter.js.map +1 -0
  311. package/lib/mass/core/spectrumJcamp.d.ts +47 -0
  312. package/lib/mass/core/spectrumJcamp.d.ts.map +1 -0
  313. package/lib/mass/core/spectrumJcamp.js +167 -0
  314. package/lib/mass/core/spectrumJcamp.js.map +1 -0
  315. package/lib/mass/core/toMassSpectrum.d.ts +67 -0
  316. package/lib/mass/core/toMassSpectrum.d.ts.map +1 -0
  317. package/lib/mass/core/toMassSpectrum.js +78 -0
  318. package/lib/mass/core/toMassSpectrum.js.map +1 -0
  319. package/lib/mass/core/traceIcon.d.ts +82 -0
  320. package/lib/mass/core/traceIcon.d.ts.map +1 -0
  321. package/lib/mass/core/traceIcon.js +66 -0
  322. package/lib/mass/core/traceIcon.js.map +1 -0
  323. package/lib/mass/core/writtenResolution.d.ts +40 -0
  324. package/lib/mass/core/writtenResolution.d.ts.map +1 -0
  325. package/lib/mass/core/writtenResolution.js +77 -0
  326. package/lib/mass/core/writtenResolution.js.map +1 -0
  327. package/lib/mass/ui/MassAboutDialog.d.ts +16 -0
  328. package/lib/mass/ui/MassAboutDialog.d.ts.map +1 -0
  329. package/lib/mass/ui/MassAboutDialog.js +44 -0
  330. package/lib/mass/ui/MassAboutDialog.js.map +1 -0
  331. package/lib/mass/ui/MassCanvas.d.ts +46 -0
  332. package/lib/mass/ui/MassCanvas.d.ts.map +1 -0
  333. package/lib/mass/ui/MassCanvas.js +84 -0
  334. package/lib/mass/ui/MassCanvas.js.map +1 -0
  335. package/lib/mass/ui/MassChart.d.ts +21 -0
  336. package/lib/mass/ui/MassChart.d.ts.map +1 -0
  337. package/lib/mass/ui/MassChart.js +139 -0
  338. package/lib/mass/ui/MassChart.js.map +1 -0
  339. package/lib/mass/ui/MassCommandProvider.d.ts +15 -0
  340. package/lib/mass/ui/MassCommandProvider.d.ts.map +1 -0
  341. package/lib/mass/ui/MassCommandProvider.js +14 -0
  342. package/lib/mass/ui/MassCommandProvider.js.map +1 -0
  343. package/lib/mass/ui/MassCommandTooltip.d.ts +16 -0
  344. package/lib/mass/ui/MassCommandTooltip.d.ts.map +1 -0
  345. package/lib/mass/ui/MassCommandTooltip.js +22 -0
  346. package/lib/mass/ui/MassCommandTooltip.js.map +1 -0
  347. package/lib/mass/ui/MassDocumentationDialog.d.ts +18 -0
  348. package/lib/mass/ui/MassDocumentationDialog.d.ts.map +1 -0
  349. package/lib/mass/ui/MassDocumentationDialog.js +70 -0
  350. package/lib/mass/ui/MassDocumentationDialog.js.map +1 -0
  351. package/lib/mass/ui/MassEditor.d.ts +78 -0
  352. package/lib/mass/ui/MassEditor.d.ts.map +1 -0
  353. package/lib/mass/ui/MassEditor.js +42 -0
  354. package/lib/mass/ui/MassEditor.js.map +1 -0
  355. package/lib/mass/ui/MassHeader.d.ts +12 -0
  356. package/lib/mass/ui/MassHeader.d.ts.map +1 -0
  357. package/lib/mass/ui/MassHeader.js +20 -0
  358. package/lib/mass/ui/MassHeader.js.map +1 -0
  359. package/lib/mass/ui/MassLogo.d.ts +21 -0
  360. package/lib/mass/ui/MassLogo.d.ts.map +1 -0
  361. package/lib/mass/ui/MassLogo.js +36 -0
  362. package/lib/mass/ui/MassLogo.js.map +1 -0
  363. package/lib/mass/ui/MassPointerTracker.d.ts +44 -0
  364. package/lib/mass/ui/MassPointerTracker.d.ts.map +1 -0
  365. package/lib/mass/ui/MassPointerTracker.js +29 -0
  366. package/lib/mass/ui/MassPointerTracker.js.map +1 -0
  367. package/lib/mass/ui/MassShell.d.ts +29 -0
  368. package/lib/mass/ui/MassShell.d.ts.map +1 -0
  369. package/lib/mass/ui/MassShell.js +133 -0
  370. package/lib/mass/ui/MassShell.js.map +1 -0
  371. package/lib/mass/ui/MassSidePanel.d.ts +32 -0
  372. package/lib/mass/ui/MassSidePanel.d.ts.map +1 -0
  373. package/lib/mass/ui/MassSidePanel.js +44 -0
  374. package/lib/mass/ui/MassSidePanel.js.map +1 -0
  375. package/lib/mass/ui/MassStateProvider.d.ts +19 -0
  376. package/lib/mass/ui/MassStateProvider.d.ts.map +1 -0
  377. package/lib/mass/ui/MassStateProvider.js +16 -0
  378. package/lib/mass/ui/MassStateProvider.js.map +1 -0
  379. package/lib/mass/ui/MassStatusBar.d.ts +15 -0
  380. package/lib/mass/ui/MassStatusBar.d.ts.map +1 -0
  381. package/lib/mass/ui/MassStatusBar.js +50 -0
  382. package/lib/mass/ui/MassStatusBar.js.map +1 -0
  383. package/lib/mass/ui/MassToolbar.d.ts +24 -0
  384. package/lib/mass/ui/MassToolbar.d.ts.map +1 -0
  385. package/lib/mass/ui/MassToolbar.js +36 -0
  386. package/lib/mass/ui/MassToolbar.js.map +1 -0
  387. package/lib/mass/ui/MetadataPanel.d.ts +35 -0
  388. package/lib/mass/ui/MetadataPanel.d.ts.map +1 -0
  389. package/lib/mass/ui/MetadataPanel.js +100 -0
  390. package/lib/mass/ui/MetadataPanel.js.map +1 -0
  391. package/lib/mass/ui/MzDecimalsMenu.d.ts +28 -0
  392. package/lib/mass/ui/MzDecimalsMenu.d.ts.map +1 -0
  393. package/lib/mass/ui/MzDecimalsMenu.js +40 -0
  394. package/lib/mass/ui/MzDecimalsMenu.js.map +1 -0
  395. package/lib/mass/ui/PeakLabels.d.ts +93 -0
  396. package/lib/mass/ui/PeakLabels.d.ts.map +1 -0
  397. package/lib/mass/ui/PeakLabels.js +91 -0
  398. package/lib/mass/ui/PeakLabels.js.map +1 -0
  399. package/lib/mass/ui/PeakTable.d.ts +34 -0
  400. package/lib/mass/ui/PeakTable.d.ts.map +1 -0
  401. package/lib/mass/ui/PeakTable.js +49 -0
  402. package/lib/mass/ui/PeakTable.js.map +1 -0
  403. package/lib/mass/ui/PeaksPanel.d.ts +31 -0
  404. package/lib/mass/ui/PeaksPanel.d.ts.map +1 -0
  405. package/lib/mass/ui/PeaksPanel.js +53 -0
  406. package/lib/mass/ui/PeaksPanel.js.map +1 -0
  407. package/lib/mass/ui/SpectraPanel.d.ts +17 -0
  408. package/lib/mass/ui/SpectraPanel.d.ts.map +1 -0
  409. package/lib/mass/ui/SpectraPanel.js +76 -0
  410. package/lib/mass/ui/SpectraPanel.js.map +1 -0
  411. package/lib/mass/ui/SpectrumRow.d.ts +26 -0
  412. package/lib/mass/ui/SpectrumRow.d.ts.map +1 -0
  413. package/lib/mass/ui/SpectrumRow.js +141 -0
  414. package/lib/mass/ui/SpectrumRow.js.map +1 -0
  415. package/lib/mass/ui/SpectrumTrace.d.ts +46 -0
  416. package/lib/mass/ui/SpectrumTrace.d.ts.map +1 -0
  417. package/lib/mass/ui/SpectrumTrace.js +68 -0
  418. package/lib/mass/ui/SpectrumTrace.js.map +1 -0
  419. package/lib/mass/ui/index.d.ts +69 -0
  420. package/lib/mass/ui/index.d.ts.map +1 -0
  421. package/lib/mass/ui/index.js +42 -0
  422. package/lib/mass/ui/index.js.map +1 -0
  423. package/lib/mass/ui/massActions.d.ts +52 -0
  424. package/lib/mass/ui/massActions.d.ts.map +1 -0
  425. package/lib/mass/ui/massActions.js +62 -0
  426. package/lib/mass/ui/massActions.js.map +1 -0
  427. package/lib/mass/ui/massChartProps.d.ts +128 -0
  428. package/lib/mass/ui/massChartProps.d.ts.map +1 -0
  429. package/lib/mass/ui/massChartProps.js +14 -0
  430. package/lib/mass/ui/massChartProps.js.map +1 -0
  431. package/lib/mass/ui/massCommandContext.d.ts +36 -0
  432. package/lib/mass/ui/massCommandContext.d.ts.map +1 -0
  433. package/lib/mass/ui/massCommandContext.js +45 -0
  434. package/lib/mass/ui/massCommandContext.js.map +1 -0
  435. package/lib/mass/ui/massHostPanels.d.ts +48 -0
  436. package/lib/mass/ui/massHostPanels.d.ts.map +1 -0
  437. package/lib/mass/ui/massHostPanels.js +41 -0
  438. package/lib/mass/ui/massHostPanels.js.map +1 -0
  439. package/lib/mass/ui/massStateContext.d.ts +26 -0
  440. package/lib/mass/ui/massStateContext.d.ts.map +1 -0
  441. package/lib/mass/ui/massStateContext.js +37 -0
  442. package/lib/mass/ui/massStateContext.js.map +1 -0
  443. package/lib/mass/ui/useIntensityZoom.d.ts +20 -0
  444. package/lib/mass/ui/useIntensityZoom.d.ts.map +1 -0
  445. package/lib/mass/ui/useIntensityZoom.js +42 -0
  446. package/lib/mass/ui/useIntensityZoom.js.map +1 -0
  447. package/lib/mass/ui/useMassEditor.d.ts +52 -0
  448. package/lib/mass/ui/useMassEditor.d.ts.map +1 -0
  449. package/lib/mass/ui/useMassEditor.js +93 -0
  450. package/lib/mass/ui/useMassEditor.js.map +1 -0
  451. package/lib/mass/ui/useMassFiles.d.ts +22 -0
  452. package/lib/mass/ui/useMassFiles.d.ts.map +1 -0
  453. package/lib/mass/ui/useMassFiles.js +71 -0
  454. package/lib/mass/ui/useMassFiles.js.map +1 -0
  455. package/lib/mass/ui/useMassHandle.d.ts +15 -0
  456. package/lib/mass/ui/useMassHandle.d.ts.map +1 -0
  457. package/lib/mass/ui/useMassHandle.js +35 -0
  458. package/lib/mass/ui/useMassHandle.js.map +1 -0
  459. package/lib/mass/ui/useMassPointer.d.ts +70 -0
  460. package/lib/mass/ui/useMassPointer.d.ts.map +1 -0
  461. package/lib/mass/ui/useMassPointer.js +57 -0
  462. package/lib/mass/ui/useMassPointer.js.map +1 -0
  463. package/lib/mass/ui/useMassShortcuts.d.ts +21 -0
  464. package/lib/mass/ui/useMassShortcuts.d.ts.map +1 -0
  465. package/lib/mass/ui/useMassShortcuts.js +66 -0
  466. package/lib/mass/ui/useMassShortcuts.js.map +1 -0
  467. package/lib/mass/ui/useMassSide.d.ts +27 -0
  468. package/lib/mass/ui/useMassSide.d.ts.map +1 -0
  469. package/lib/mass/ui/useMassSide.js +45 -0
  470. package/lib/mass/ui/useMassSide.js.map +1 -0
  471. package/lib/mass/ui/useMassZoom.d.ts +92 -0
  472. package/lib/mass/ui/useMassZoom.d.ts.map +1 -0
  473. package/lib/mass/ui/useMassZoom.js +65 -0
  474. package/lib/mass/ui/useMassZoom.js.map +1 -0
  475. package/lib/mass.d.ts +16 -0
  476. package/lib/mass.d.ts.map +1 -0
  477. package/lib/mass.js +16 -0
  478. package/lib/mass.js.map +1 -0
  479. package/lib/panel/ui/PanelRail.d.ts.map +1 -1
  480. package/lib/panel/ui/PanelRail.js +6 -1
  481. package/lib/panel/ui/PanelRail.js.map +1 -1
  482. package/lib/slides/ui/slideSanitizeSchema.d.ts +3 -2
  483. package/lib/slides/ui/slideSanitizeSchema.d.ts.map +1 -1
  484. package/lib/slides/ui/slideSanitizeSchema.js +82 -2
  485. package/lib/slides/ui/slideSanitizeSchema.js.map +1 -1
  486. package/package.json +6 -1
  487. package/src/about/core/providers.ts +7 -0
  488. package/src/about/ui/AboutProvidedBy.tsx +49 -0
  489. package/src/chart/ui/useChartPointer.ts +18 -4
  490. package/src/credits/core/credits.ts +53 -0
  491. package/src/download/core/drawingMarkup.ts +18 -1
  492. package/src/download/core/figurePng.ts +21 -8
  493. package/src/download/core/figureSvg.ts +5 -2
  494. package/src/download/core/figureTarget.ts +28 -3
  495. package/src/download/core/svgBounds.ts +21 -0
  496. package/src/download/core/svgToPng.ts +3 -4
  497. package/src/format/core/relativeTime.ts +29 -7
  498. package/src/host/core/connectHost.ts +77 -120
  499. package/src/host/core/hostOutputs.ts +197 -0
  500. package/src/host/core/index.ts +13 -7
  501. package/src/host/core/irKinds.ts +92 -0
  502. package/src/host/core/kinds.ts +16 -6
  503. package/src/host/core/protocol.ts +50 -8
  504. package/src/host/core/selectInputs.ts +145 -0
  505. package/src/host/testing/sciPeaks.ts +140 -0
  506. package/src/host/testing/standInHost.ts +30 -5
  507. package/src/host/ui/useHostConnection.ts +17 -8
  508. package/src/host-testing.ts +4 -0
  509. package/src/ir/core/handPicking.ts +154 -0
  510. package/src/ir/core/index.ts +14 -0
  511. package/src/ir/core/irBandState.ts +155 -0
  512. package/src/ir/core/irCommands.ts +7 -0
  513. package/src/ir/core/irPeaks.ts +79 -0
  514. package/src/ir/core/irReducer.ts +27 -34
  515. package/src/ir/core/irSpectrum.ts +16 -0
  516. package/src/ir/core/irState.ts +15 -8
  517. package/src/ir/core/pickBands.ts +46 -39
  518. package/src/ir/core/ramanBands.ts +2 -2
  519. package/src/ir/core/spectrumBands.ts +113 -0
  520. package/src/ir/ui/BandRow.tsx +20 -2
  521. package/src/ir/ui/BandsPanel.tsx +46 -88
  522. package/src/ir/ui/BandsToolbar.tsx +152 -0
  523. package/src/ir/ui/IrCanvas.tsx +22 -11
  524. package/src/ir/ui/IrChart.tsx +10 -1
  525. package/src/ir/ui/IrDocumentationDialog.tsx +7 -0
  526. package/src/ir/ui/IrEditor.tsx +4 -2
  527. package/src/ir/ui/IrShell.tsx +5 -0
  528. package/src/ir/ui/IrStatusBar.tsx +4 -1
  529. package/src/ir/ui/IrToolbar.tsx +14 -5
  530. package/src/ir/ui/VibrationalEditor.tsx +2 -1
  531. package/src/ir/ui/irActions.ts +11 -0
  532. package/src/ir/ui/irChartProps.ts +4 -1
  533. package/src/ir/ui/useIrEditor.ts +21 -21
  534. package/src/locales/de.json +63 -0
  535. package/src/locales/en.json +63 -0
  536. package/src/locales/es.json +63 -0
  537. package/src/locales/fr.json +63 -0
  538. package/src/locales/it.json +63 -0
  539. package/src/mass/core/analyseSpectrum.ts +191 -0
  540. package/src/mass/core/ascendingTrace.ts +62 -0
  541. package/src/mass/core/centroidPeaks.ts +114 -0
  542. package/src/mass/core/detectMassFormat.ts +113 -0
  543. package/src/mass/core/downloadSpectra.ts +52 -0
  544. package/src/mass/core/fromJcamp.ts +151 -0
  545. package/src/mass/core/fromText.ts +58 -0
  546. package/src/mass/core/index.ts +194 -0
  547. package/src/mass/core/jcampTechnique.ts +87 -0
  548. package/src/mass/core/labelStackBox.ts +75 -0
  549. package/src/mass/core/labelledPeaks.ts +135 -0
  550. package/src/mass/core/loadMassSpectra.ts +86 -0
  551. package/src/mass/core/loadedMassSpectrum.ts +43 -0
  552. package/src/mass/core/massCommands.ts +156 -0
  553. package/src/mass/core/massDomain.ts +229 -0
  554. package/src/mass/core/massEditorApi.ts +68 -0
  555. package/src/mass/core/massFormat.ts +187 -0
  556. package/src/mass/core/massMeta.ts +239 -0
  557. package/src/mass/core/massReducer.ts +232 -0
  558. package/src/mass/core/massResolution.ts +169 -0
  559. package/src/mass/core/massSidePanels.ts +27 -0
  560. package/src/mass/core/massSpectrum.ts +220 -0
  561. package/src/mass/core/massState.ts +206 -0
  562. package/src/mass/core/massStateEdits.ts +104 -0
  563. package/src/mass/core/massSummary.ts +213 -0
  564. package/src/mass/core/mzDecimalsSetting.ts +52 -0
  565. package/src/mass/core/nearestPeak.ts +130 -0
  566. package/src/mass/core/peakLabelLines.ts +112 -0
  567. package/src/mass/core/peakLabelPlan.ts +246 -0
  568. package/src/mass/core/peakTable.ts +82 -0
  569. package/src/mass/core/resolutionOf.ts +100 -0
  570. package/src/mass/core/scanFilter.ts +119 -0
  571. package/src/mass/core/spectrumJcamp.ts +186 -0
  572. package/src/mass/core/toMassSpectrum.ts +126 -0
  573. package/src/mass/core/traceIcon.ts +105 -0
  574. package/src/mass/core/writtenResolution.ts +81 -0
  575. package/src/mass/ui/MassAboutDialog.tsx +89 -0
  576. package/src/mass/ui/MassCanvas.tsx +170 -0
  577. package/src/mass/ui/MassChart.tsx +266 -0
  578. package/src/mass/ui/MassCommandProvider.tsx +34 -0
  579. package/src/mass/ui/MassCommandTooltip.tsx +36 -0
  580. package/src/mass/ui/MassDocumentationDialog.tsx +136 -0
  581. package/src/mass/ui/MassEditor.tsx +130 -0
  582. package/src/mass/ui/MassHeader.tsx +38 -0
  583. package/src/mass/ui/MassLogo.tsx +84 -0
  584. package/src/mass/ui/MassPointerTracker.tsx +72 -0
  585. package/src/mass/ui/MassShell.tsx +237 -0
  586. package/src/mass/ui/MassSidePanel.tsx +107 -0
  587. package/src/mass/ui/MassStateProvider.tsx +32 -0
  588. package/src/mass/ui/MassStatusBar.tsx +108 -0
  589. package/src/mass/ui/MassToolbar.tsx +120 -0
  590. package/src/mass/ui/MetadataPanel.tsx +201 -0
  591. package/src/mass/ui/MzDecimalsMenu.tsx +86 -0
  592. package/src/mass/ui/PeakLabels.tsx +242 -0
  593. package/src/mass/ui/PeakTable.tsx +199 -0
  594. package/src/mass/ui/PeaksPanel.tsx +182 -0
  595. package/src/mass/ui/SpectraPanel.tsx +153 -0
  596. package/src/mass/ui/SpectrumRow.tsx +246 -0
  597. package/src/mass/ui/SpectrumTrace.tsx +119 -0
  598. package/src/mass/ui/index.ts +69 -0
  599. package/src/mass/ui/massActions.ts +109 -0
  600. package/src/mass/ui/massChartProps.ts +130 -0
  601. package/src/mass/ui/massCommandContext.tsx +65 -0
  602. package/src/mass/ui/massHostPanels.ts +71 -0
  603. package/src/mass/ui/massStateContext.ts +48 -0
  604. package/src/mass/ui/useIntensityZoom.ts +55 -0
  605. package/src/mass/ui/useMassEditor.ts +156 -0
  606. package/src/mass/ui/useMassFiles.ts +91 -0
  607. package/src/mass/ui/useMassHandle.ts +58 -0
  608. package/src/mass/ui/useMassPointer.ts +120 -0
  609. package/src/mass/ui/useMassShortcuts.ts +85 -0
  610. package/src/mass/ui/useMassSide.ts +63 -0
  611. package/src/mass/ui/useMassZoom.ts +157 -0
  612. package/src/mass.ts +16 -0
  613. package/src/panel/ui/PanelRail.tsx +5 -1
  614. package/src/slides/ui/slideSanitizeSchema.ts +86 -2
  615. package/styles/chrome.css +7 -0
  616. package/styles/slides.css +47 -0
@@ -0,0 +1,102 @@
1
+ /**
2
+ * Everything the viewer knows, in the three buckets NMRium splits its own into
3
+ * — the same three the infrared viewer holds, under the same names.
4
+ *
5
+ * The split is the persistence boundary as much as anything: `data` is the
6
+ * document, `view` is where you are in it and lasts as long as the session, and
7
+ * `settings` is the workspace, which is how every spectrum is drawn whichever
8
+ * ones happen to be open.
9
+ *
10
+ * The peaks are in `data`, each spectrum carrying its own centroid: picked once,
11
+ * when the spectrum was read, so nothing about drawing it ever picks again.
12
+ */
13
+ import { readMzDecimalsSetting } from "./mzDecimalsSetting.js";
14
+ /** The panel the splitter brings back when it is dragged open on nothing. */
15
+ export const DEFAULT_SIDE_PANEL = 'spectra';
16
+ /**
17
+ * The panels a fresh viewer opens with: the list, and the peaks of whichever
18
+ * spectrum is selected in it, because a spectrum is read through its peaks.
19
+ */
20
+ export const DEFAULT_SIDE_PANELS = ['spectra', 'peaks'];
21
+ /** How many peaks are labelled to begin with. */
22
+ export const DEFAULT_LABEL_LIMIT = 20;
23
+ /** At most how many peaks a setting may ask to have labelled. */
24
+ export const MAXIMUM_LABEL_LIMIT = 500;
25
+ /** The workspace a fresh viewer starts from. */
26
+ export const DEFAULT_SETTINGS = {
27
+ showLabels: true,
28
+ labelLimit: DEFAULT_LABEL_LIMIT,
29
+ showCharges: true,
30
+ mzDecimals: 'auto',
31
+ };
32
+ /**
33
+ * The state a viewer opens with.
34
+ *
35
+ * The panel list is spread rather than stored by reference: a caller's array is
36
+ * the caller's to mutate, and a viewer holding it would find its open panels
37
+ * changing under it.
38
+ * @param options - What it opens on.
39
+ * @returns The state.
40
+ */
41
+ export function createMassState(options = {}) {
42
+ const { spectra = [], settings, panelIds } = options;
43
+ return {
44
+ data: { spectra: [...spectra] },
45
+ view: {
46
+ selectedId: spectra[0]?.id ?? null,
47
+ domain: null,
48
+ tool: 'read',
49
+ openPanelIds: [...(panelIds ?? DEFAULT_SIDE_PANELS)],
50
+ error: null,
51
+ },
52
+ settings: mergeMassSettings(DEFAULT_SETTINGS, settings),
53
+ };
54
+ }
55
+ /**
56
+ * Fold a change into the workspace, refusing what no chart survives.
57
+ *
58
+ * A number typed into a field arrives here as `NaN` for every keystroke that is
59
+ * not yet a number — a lone minus sign, an empty box — and a limit of `NaN`
60
+ * silently stops every label being drawn. So the limit is checked, and the
61
+ * current value kept where the new one is unusable rather than the field being
62
+ * fought with while it is being typed in. The decimals are read back the same
63
+ * way, through `readMzDecimalsSetting`, since a stored workspace is no more to
64
+ * be trusted than a half-typed field.
65
+ * @param current - The workspace in force.
66
+ * @param change - What to change about it.
67
+ * @returns The new workspace.
68
+ */
69
+ export function mergeMassSettings(current, change = {}) {
70
+ const asked = change.labelLimit ?? current.labelLimit;
71
+ return {
72
+ ...current,
73
+ ...change,
74
+ labelLimit: Number.isFinite(asked)
75
+ ? Math.min(MAXIMUM_LABEL_LIMIT, Math.max(0, Math.round(asked)))
76
+ : current.labelLimit,
77
+ mzDecimals: readMzDecimalsSetting(change.mzDecimals) ?? current.mzDecimals,
78
+ };
79
+ }
80
+ /**
81
+ * Whether a window is one a chart can be built on.
82
+ *
83
+ * Both ends finite and the low one below the high one. A window failing either
84
+ * makes every scale built from it infinite, which the DOM refuses outright — so
85
+ * a handle told to frame a peak it worked out wrongly leaves the chart alone
86
+ * instead of blanking it.
87
+ * @param domain - The window to check.
88
+ * @returns Whether it can be shown.
89
+ */
90
+ export function isMassWindow(domain) {
91
+ return isWindow(domain.x) && isWindow(domain.y);
92
+ }
93
+ /**
94
+ * Whether one axis of a window runs from somewhere to somewhere else.
95
+ * @param bounds - `[from, to]` on that axis.
96
+ * @returns Whether it is usable.
97
+ */
98
+ function isWindow(bounds) {
99
+ const [from, to] = bounds;
100
+ return Number.isFinite(from) && Number.isFinite(to) && from < to;
101
+ }
102
+ //# sourceMappingURL=massState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"massState.js","sourceRoot":"","sources":["../../../src/mass/core/massState.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAKH,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAsE/D,6EAA6E;AAC7E,MAAM,CAAC,MAAM,kBAAkB,GAAoB,SAAS,CAAC;AAE7D;;;GAGG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAsB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AAE3E,iDAAiD;AACjD,MAAM,CAAC,MAAM,mBAAmB,GAAG,EAAE,CAAC;AAEtC,iEAAiE;AACjE,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAG,CAAC;AAEvC,gDAAgD;AAChD,MAAM,CAAC,MAAM,gBAAgB,GAAiB;IAC5C,UAAU,EAAE,IAAI;IAChB,UAAU,EAAE,mBAAmB;IAC/B,WAAW,EAAE,IAAI;IACjB,UAAU,EAAE,MAAM;CACnB,CAAC;AAqBF;;;;;;;;GAQG;AACH,MAAM,UAAU,eAAe,CAC7B,UAAkC,EAAE;IAEpC,MAAM,EAAE,OAAO,GAAG,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;IACrD,OAAO;QACL,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC,EAAE;QAC/B,IAAI,EAAE;YACJ,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,IAAI;YAClC,MAAM,EAAE,IAAI;YACZ,IAAI,EAAE,MAAM;YACZ,YAAY,EAAE,CAAC,GAAG,CAAC,QAAQ,IAAI,mBAAmB,CAAC,CAAC;YACpD,KAAK,EAAE,IAAI;SACZ;QACD,QAAQ,EAAE,iBAAiB,CAAC,gBAAgB,EAAE,QAAQ,CAAC;KACxD,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,iBAAiB,CAC/B,OAAqB,EACrB,SAAgC,EAAE;IAElC,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,IAAI,OAAO,CAAC,UAAU,CAAC;IACtD,OAAO;QACL,GAAG,OAAO;QACV,GAAG,MAAM;QACT,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;YAChC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,mBAAmB,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;YAC/D,CAAC,CAAC,OAAO,CAAC,UAAU;QACtB,UAAU,EAAE,qBAAqB,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,OAAO,CAAC,UAAU;KAC3E,CAAC;AACJ,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,YAAY,CAAC,MAAkB;IAC7C,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAClD,CAAC;AAED;;;;GAIG;AACH,SAAS,QAAQ,CAAC,MAAiC;IACjD,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,MAAM,CAAC;IAC1B,OAAO,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,IAAI,GAAG,EAAE,CAAC;AACnE,CAAC"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * The edits the reducer makes in more than one place, kept apart from it so
3
+ * the reducer reads as the list of what can be asked of the viewer.
4
+ */
5
+ import type { MassSpectrum } from './massSpectrum.ts';
6
+ import type { MassState, PartialMassState } from './massState.ts';
7
+ /**
8
+ * Change one spectrum, leaving the state itself when nothing changed.
9
+ *
10
+ * The edit returns the very spectrum it was handed when it has nothing to do,
11
+ * and that is passed on: a rename to the name already held must not rebuild
12
+ * the list, or every memo keyed on it is defeated by a keystroke that did
13
+ * nothing.
14
+ * @param state - The state in force.
15
+ * @param id - Identity of the spectrum to change.
16
+ * @param edit - What to do to it.
17
+ * @returns The new state, or the old one when the spectrum is absent or the
18
+ * edit changed nothing.
19
+ */
20
+ export declare function mapSpectrum(state: MassState, id: string, edit: (spectrum: MassSpectrum) => MassSpectrum): MassState;
21
+ /**
22
+ * The spectra of an arrival that are not open already.
23
+ *
24
+ * Identity is what every row, every trace and the selection are keyed on, so a
25
+ * second spectrum under an identity already taken would be two rows React
26
+ * cannot tell apart and one trace drawn twice. A host handing the same spectra
27
+ * over again is asking for nothing new.
28
+ * @param state - The state in force.
29
+ * @param spectra - What is arriving.
30
+ * @returns What is new, in the order it arrived.
31
+ */
32
+ export declare function arriving(state: MassState, spectra: readonly MassSpectrum[]): MassSpectrum[];
33
+ /**
34
+ * Take a whole state, as a host restoring one supplies it.
35
+ *
36
+ * What is restored is checked against what it is restored with: a selection
37
+ * naming a spectrum that is not among the restored ones selects the first
38
+ * instead, and a window no chart can be drawn on is dropped for the fit.
39
+ * @param state - The state in force.
40
+ * @param partial - What the host supplies.
41
+ * @returns The restored state.
42
+ */
43
+ export declare function restoreState(state: MassState, partial: PartialMassState): MassState;
44
+ /**
45
+ * Refuse an action, saying why.
46
+ * @param state - The state in force.
47
+ * @param error - The sentence to show whoever asked.
48
+ * @returns The state carrying the refusal.
49
+ */
50
+ export declare function withError(state: MassState, error: string): MassState;
51
+ //# sourceMappingURL=massStateEdits.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"massStateEdits.d.ts","sourceRoot":"","sources":["../../../src/mass/core/massStateEdits.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAGlE;;;;;;;;;;;;GAYG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,SAAS,EAChB,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,CAAC,QAAQ,EAAE,YAAY,KAAK,YAAY,GAC7C,SAAS,CASX;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,QAAQ,CACtB,KAAK,EAAE,SAAS,EAChB,OAAO,EAAE,SAAS,YAAY,EAAE,GAC/B,YAAY,EAAE,CAUhB;AAED;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,SAAS,EAChB,OAAO,EAAE,gBAAgB,GACxB,SAAS,CAiBX;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,CAEpE"}
@@ -0,0 +1,90 @@
1
+ /**
2
+ * The edits the reducer makes in more than one place, kept apart from it so
3
+ * the reducer reads as the list of what can be asked of the viewer.
4
+ */
5
+ import { isMassWindow, mergeMassSettings } from "./massState.js";
6
+ /**
7
+ * Change one spectrum, leaving the state itself when nothing changed.
8
+ *
9
+ * The edit returns the very spectrum it was handed when it has nothing to do,
10
+ * and that is passed on: a rename to the name already held must not rebuild
11
+ * the list, or every memo keyed on it is defeated by a keystroke that did
12
+ * nothing.
13
+ * @param state - The state in force.
14
+ * @param id - Identity of the spectrum to change.
15
+ * @param edit - What to do to it.
16
+ * @returns The new state, or the old one when the spectrum is absent or the
17
+ * edit changed nothing.
18
+ */
19
+ export function mapSpectrum(state, id, edit) {
20
+ let changed = false;
21
+ const spectra = state.data.spectra.map((spectrum) => {
22
+ if (spectrum.id !== id)
23
+ return spectrum;
24
+ const edited = edit(spectrum);
25
+ if (edited !== spectrum)
26
+ changed = true;
27
+ return edited;
28
+ });
29
+ return changed ? { ...state, data: { spectra } } : state;
30
+ }
31
+ /**
32
+ * The spectra of an arrival that are not open already.
33
+ *
34
+ * Identity is what every row, every trace and the selection are keyed on, so a
35
+ * second spectrum under an identity already taken would be two rows React
36
+ * cannot tell apart and one trace drawn twice. A host handing the same spectra
37
+ * over again is asking for nothing new.
38
+ * @param state - The state in force.
39
+ * @param spectra - What is arriving.
40
+ * @returns What is new, in the order it arrived.
41
+ */
42
+ export function arriving(state, spectra) {
43
+ const taken = new Set();
44
+ for (const spectrum of state.data.spectra)
45
+ taken.add(spectrum.id);
46
+ const fresh = [];
47
+ for (const spectrum of spectra) {
48
+ if (taken.has(spectrum.id))
49
+ continue;
50
+ taken.add(spectrum.id);
51
+ fresh.push(spectrum);
52
+ }
53
+ return fresh;
54
+ }
55
+ /**
56
+ * Take a whole state, as a host restoring one supplies it.
57
+ *
58
+ * What is restored is checked against what it is restored with: a selection
59
+ * naming a spectrum that is not among the restored ones selects the first
60
+ * instead, and a window no chart can be drawn on is dropped for the fit.
61
+ * @param state - The state in force.
62
+ * @param partial - What the host supplies.
63
+ * @returns The restored state.
64
+ */
65
+ export function restoreState(state, partial) {
66
+ const spectra = partial.data?.spectra ?? state.data.spectra;
67
+ const view = { ...state.view, ...partial.view };
68
+ const selectable = view.selectedId !== null &&
69
+ spectra.some((spectrum) => spectrum.id === view.selectedId);
70
+ return {
71
+ data: { spectra },
72
+ view: {
73
+ ...view,
74
+ selectedId: selectable ? view.selectedId : (spectra[0]?.id ?? null),
75
+ domain: view.domain !== null && isMassWindow(view.domain) ? view.domain : null,
76
+ openPanelIds: [...view.openPanelIds],
77
+ },
78
+ settings: mergeMassSettings(state.settings, partial.settings),
79
+ };
80
+ }
81
+ /**
82
+ * Refuse an action, saying why.
83
+ * @param state - The state in force.
84
+ * @param error - The sentence to show whoever asked.
85
+ * @returns The state carrying the refusal.
86
+ */
87
+ export function withError(state, error) {
88
+ return { ...state, view: { ...state.view, error } };
89
+ }
90
+ //# sourceMappingURL=massStateEdits.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"massStateEdits.js","sourceRoot":"","sources":["../../../src/mass/core/massStateEdits.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,77 @@
1
+ /**
2
+ * What a spectrum can be said to be, when the file said little or nothing.
3
+ *
4
+ * A two-column paste is most pastes, and it carries no acquisition metadata at
5
+ * all: no instrument, no polarity, no collision energy. A panel that answered
6
+ * that with an empty table would be saying "this file is a mystery" when the
7
+ * truth is far more useful — it is this file, read as that format, holding so
8
+ * many peaks between these two masses. So the facts the viewer knows about
9
+ * every spectrum, whatever it came from, are gathered here as rows of the same
10
+ * two-column table the metadata itself fills, and a panel renders one table
11
+ * either way.
12
+ *
13
+ * Everything here is a pure function of one spectrum, so what the panels say
14
+ * can be tested without mounting them.
15
+ */
16
+ import type { MassMetaField, MassSpectrum } from './massSpectrum.ts';
17
+ /**
18
+ * The rows the acquisition table shows for a spectrum.
19
+ *
20
+ * The file's own records win whenever it wrote any, in the order
21
+ * `buildMassMeta` fixed — that order is how a method is read, from what the
22
+ * sample was measured on down to who measured it, and re-sorting it here would
23
+ * scatter a method across the table. A file that wrote none falls back to what
24
+ * the viewer knows regardless.
25
+ * @param spectrum - The spectrum the panel is about.
26
+ * @param mzDecimals - How many decimals its masses are written with. Defaults
27
+ * to four.
28
+ * @returns The rows, in display order, never empty.
29
+ */
30
+ export declare function spectrumMetaRows(spectrum: MassSpectrum, mzDecimals?: number): MassMetaField[];
31
+ /**
32
+ * What the viewer knows about a spectrum without the file's help.
33
+ *
34
+ * Every row is read off the spectrum as it was loaded — where it came from,
35
+ * which acquisition of it, and how many points survived the peak picking — so
36
+ * this answers for a pasted peak list exactly as well as for a scan of a run.
37
+ * @param spectrum - The spectrum the panel is about.
38
+ * @param mzDecimals - How many decimals its masses are written with. Defaults
39
+ * to four.
40
+ * @returns The rows, in display order.
41
+ */
42
+ export declare function spectrumFileFields(spectrum: MassSpectrum, mzDecimals?: number): MassMetaField[];
43
+ /**
44
+ * The rows that say how finely a spectrum resolves masses, and how that was
45
+ * decided — the verdict read off the decimals of a peak table is a weaker claim
46
+ * than one measured on the widths of its peaks, and the table says which.
47
+ * @param spectrum - The spectrum the panel is about.
48
+ * @returns One row, or two when a resolving power was measured.
49
+ */
50
+ export declare function spectrumResolutionRows(spectrum: MassSpectrum): MassMetaField[];
51
+ /** What the line under a spectrum's name says besides its acquisition. */
52
+ export interface SpectrumSubtitleOptions {
53
+ /**
54
+ * Whether the line also says what kind of spectrum it is — profile or
55
+ * centroid first, and its resolution last. Worth it on a list of files that
56
+ * differ in exactly that; noise on a list of scans out of one run, every one
57
+ * of which is the same kind as the next.
58
+ * @default false
59
+ */
60
+ describeKind?: boolean;
61
+ }
62
+ /**
63
+ * The one line under a spectrum's name in the list.
64
+ *
65
+ * A file of a thousand scans gives a thousand rows whose names all start with
66
+ * the same file name, so the row has to carry whatever tells one acquisition
67
+ * from the next — which scan, which MS level, what was fragmented and when it
68
+ * eluted. Those are exactly the facts the row is picked by.
69
+ * @param spectrum - The spectrum the row is of.
70
+ * @param options - See {@link SpectrumSubtitleOptions}.
71
+ * @returns The line, the peak count alone for a spectrum with no origin facts.
72
+ * @example
73
+ * spectrumSubtitle(scan); // 'Scan 12 · MS2 · precursor 452.1900 · 3.42 min · 128 peaks'
74
+ * spectrumSubtitle(file, { describeKind: true }); // 'profile · 10 peaks · high resolution'
75
+ */
76
+ export declare function spectrumSubtitle(spectrum: MassSpectrum, options?: SpectrumSubtitleOptions): string;
77
+ //# sourceMappingURL=massSummary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"massSummary.d.ts","sourceRoot":"","sources":["../../../src/mass/core/massSummary.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAWH,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGrE;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,YAAY,EACtB,UAAU,SAAmB,GAC5B,aAAa,EAAE,CAGjB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,YAAY,EACtB,UAAU,SAAmB,GAC5B,aAAa,EAAE,CAwDjB;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,YAAY,GACrB,aAAa,EAAE,CAejB;AAED,0EAA0E;AAC1E,MAAM,WAAW,uBAAuB;IACtC;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,YAAY,EACtB,OAAO,GAAE,uBAA4B,GACpC,MAAM,CAuBR"}
@@ -0,0 +1,174 @@
1
+ /**
2
+ * What a spectrum can be said to be, when the file said little or nothing.
3
+ *
4
+ * A two-column paste is most pastes, and it carries no acquisition metadata at
5
+ * all: no instrument, no polarity, no collision energy. A panel that answered
6
+ * that with an empty table would be saying "this file is a mystery" when the
7
+ * truth is far more useful — it is this file, read as that format, holding so
8
+ * many peaks between these two masses. So the facts the viewer knows about
9
+ * every spectrum, whatever it came from, are gathered here as rows of the same
10
+ * two-column table the metadata itself fills, and a panel renders one table
11
+ * either way.
12
+ *
13
+ * Everything here is a pure function of one spectrum, so what the panels say
14
+ * can be tested without mounting them.
15
+ */
16
+ import { formatMz, formatMzRange, massFormatLabel, resolutionBasisLabel, resolutionLabel, resolvingPowerLabel, } from "./massFormat.js";
17
+ import { MZ_DECIMALS } from "./massResolution.js";
18
+ import { resolutionOf } from "./resolutionOf.js";
19
+ /**
20
+ * The rows the acquisition table shows for a spectrum.
21
+ *
22
+ * The file's own records win whenever it wrote any, in the order
23
+ * `buildMassMeta` fixed — that order is how a method is read, from what the
24
+ * sample was measured on down to who measured it, and re-sorting it here would
25
+ * scatter a method across the table. A file that wrote none falls back to what
26
+ * the viewer knows regardless.
27
+ * @param spectrum - The spectrum the panel is about.
28
+ * @param mzDecimals - How many decimals its masses are written with. Defaults
29
+ * to four.
30
+ * @returns The rows, in display order, never empty.
31
+ */
32
+ export function spectrumMetaRows(spectrum, mzDecimals = MZ_DECIMALS.high) {
33
+ const fields = spectrum.meta?.fields ?? [];
34
+ return fields.length > 0 ? fields : spectrumFileFields(spectrum, mzDecimals);
35
+ }
36
+ /**
37
+ * What the viewer knows about a spectrum without the file's help.
38
+ *
39
+ * Every row is read off the spectrum as it was loaded — where it came from,
40
+ * which acquisition of it, and how many points survived the peak picking — so
41
+ * this answers for a pasted peak list exactly as well as for a scan of a run.
42
+ * @param spectrum - The spectrum the panel is about.
43
+ * @param mzDecimals - How many decimals its masses are written with. Defaults
44
+ * to four.
45
+ * @returns The rows, in display order.
46
+ */
47
+ export function spectrumFileFields(spectrum, mzDecimals = MZ_DECIMALS.high) {
48
+ const { origin, centroid, profile } = spectrum;
49
+ const rows = [{ label: 'Name', value: spectrum.name }];
50
+ if (origin.fileName === undefined) {
51
+ rows.push({
52
+ label: 'Source',
53
+ value: origin.format === 'calculated'
54
+ ? 'Calculated in the viewer'
55
+ : 'Pasted, not read from a file',
56
+ });
57
+ }
58
+ else {
59
+ rows.push({ label: 'File', value: origin.fileName });
60
+ }
61
+ rows.push({ label: 'Format', value: massFormatLabel(origin.format) });
62
+ if (origin.scanIndex !== undefined) {
63
+ rows.push({ label: 'Scan', value: scanNumber(origin.scanIndex) });
64
+ }
65
+ if (origin.msLevel !== undefined) {
66
+ rows.push({ label: 'MS level', value: String(origin.msLevel) });
67
+ }
68
+ if (origin.polarity !== undefined) {
69
+ rows.push({ label: 'Polarity', value: origin.polarity });
70
+ }
71
+ if (origin.precursorMz !== undefined) {
72
+ rows.push({ label: 'Precursor m/z', value: formatMz(origin.precursorMz) });
73
+ }
74
+ // Only where it differs from the row above. Listed always, it would repeat
75
+ // the precursor on nearly every Thermo scan and say nothing; listed here, it
76
+ // is the one place a reader learns that the instrument was after a molecule
77
+ // the window it cut does not contain.
78
+ if (origin.precursorMonoisotopicMz !== undefined &&
79
+ origin.precursorMonoisotopicMz !== origin.precursorMz) {
80
+ rows.push({
81
+ label: 'Monoisotopic m/z',
82
+ value: formatMz(origin.precursorMonoisotopicMz),
83
+ });
84
+ }
85
+ if (origin.retentionTime !== undefined) {
86
+ rows.push({
87
+ label: 'Retention time',
88
+ value: `${origin.retentionTime.toFixed(2)} min`,
89
+ });
90
+ }
91
+ rows.push({ label: 'Peaks', value: String(centroid.x.length) });
92
+ if (profile !== null) {
93
+ rows.push({ label: 'Profile points', value: String(profile.x.length) });
94
+ }
95
+ const range = formatMzRange(centroid.x, mzDecimals);
96
+ if (range !== '')
97
+ rows.push({ label: 'm/z range', value: range });
98
+ return rows;
99
+ }
100
+ /**
101
+ * The rows that say how finely a spectrum resolves masses, and how that was
102
+ * decided — the verdict read off the decimals of a peak table is a weaker claim
103
+ * than one measured on the widths of its peaks, and the table says which.
104
+ * @param spectrum - The spectrum the panel is about.
105
+ * @returns One row, or two when a resolving power was measured.
106
+ */
107
+ export function spectrumResolutionRows(spectrum) {
108
+ const resolution = resolutionOf(spectrum);
109
+ const rows = [
110
+ {
111
+ label: 'Resolution',
112
+ value: `${resolutionLabel(resolution)}, ${resolutionBasisLabel(resolution)}`,
113
+ },
114
+ ];
115
+ if (resolution.resolvingPower !== null) {
116
+ rows.push({
117
+ label: 'Resolving power',
118
+ value: `${resolvingPowerLabel(resolution.resolvingPower)} at half height`,
119
+ });
120
+ }
121
+ return rows;
122
+ }
123
+ /**
124
+ * The one line under a spectrum's name in the list.
125
+ *
126
+ * A file of a thousand scans gives a thousand rows whose names all start with
127
+ * the same file name, so the row has to carry whatever tells one acquisition
128
+ * from the next — which scan, which MS level, what was fragmented and when it
129
+ * eluted. Those are exactly the facts the row is picked by.
130
+ * @param spectrum - The spectrum the row is of.
131
+ * @param options - See {@link SpectrumSubtitleOptions}.
132
+ * @returns The line, the peak count alone for a spectrum with no origin facts.
133
+ * @example
134
+ * spectrumSubtitle(scan); // 'Scan 12 · MS2 · precursor 452.1900 · 3.42 min · 128 peaks'
135
+ * spectrumSubtitle(file, { describeKind: true }); // 'profile · 10 peaks · high resolution'
136
+ */
137
+ export function spectrumSubtitle(spectrum, options = {}) {
138
+ const { describeKind = false } = options;
139
+ const { origin, centroid, profile } = spectrum;
140
+ const parts = [];
141
+ if (describeKind)
142
+ parts.push(profile === null ? 'centroid' : 'profile');
143
+ if (origin.scanIndex !== undefined) {
144
+ parts.push(`Scan ${scanNumber(origin.scanIndex)}`);
145
+ }
146
+ if (origin.msLevel !== undefined)
147
+ parts.push(`MS${origin.msLevel}`);
148
+ if (origin.polarity !== undefined)
149
+ parts.push(origin.polarity);
150
+ if (origin.precursorMz !== undefined) {
151
+ parts.push(`precursor ${formatMz(origin.precursorMz)}`);
152
+ }
153
+ if (origin.retentionTime !== undefined) {
154
+ parts.push(`${origin.retentionTime.toFixed(2)} min`);
155
+ }
156
+ const peaks = centroid.x.length;
157
+ parts.push(`${peaks} peak${peaks === 1 ? '' : 's'}`);
158
+ if (describeKind)
159
+ parts.push(resolutionLabel(resolutionOf(spectrum)));
160
+ return parts.join(' · ');
161
+ }
162
+ /**
163
+ * Which acquisition of its file a scan is, counted from one as every list of
164
+ * scans counts them — `MassOrigin.scanIndex` counts from zero, and a scan
165
+ * listed as 23 in one table and 24 in the next reads as two scans.
166
+ * @param scanIndex - Which acquisition of the file, counted from zero.
167
+ * @returns Its number, counted from one.
168
+ * @example
169
+ * scanNumber(23); // '24'
170
+ */
171
+ function scanNumber(scanIndex) {
172
+ return String(scanIndex + 1);
173
+ }
174
+ //# sourceMappingURL=massSummary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"massSummary.js","sourceRoot":"","sources":["../../../src/mass/core/massSummary.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * How many decimals the masses on screen are written with: as the spectra
3
+ * decide, or as the reader chose.
4
+ *
5
+ * The spectra decide well for what they are — an Orbitrap scan to four
6
+ * decimals, a library spectrum in whole masses — but not for what the reader
7
+ * is doing with them: an ion-trap run read against its precursors wants a
8
+ * decimal its verdict calls noise, and a table pasted into a report wants
9
+ * fewer digits than the instrument gave. So the decision is a setting, `'auto'`
10
+ * until somebody picks a number.
11
+ */
12
+ import type { MassSpectrum } from './massSpectrum.ts';
13
+ /** `'auto'` to let the spectra decide, or the number of decimals chosen. */
14
+ export type MzDecimalsSetting = 'auto' | number;
15
+ /** The most decimals that can be chosen; past it a mass is all noise. */
16
+ export declare const MAXIMUM_MZ_DECIMALS = 5;
17
+ /**
18
+ * How many decimals the masses of spectra shown together are written with.
19
+ * @param setting - What the reader chose, `'auto'` for nothing.
20
+ * @param spectra - The spectra being shown together.
21
+ * @returns The decimals: the choice, or what `mzDecimalsOf` decides.
22
+ */
23
+ export declare function mzDecimalsFor(setting: MzDecimalsSetting, spectra: readonly MassSpectrum[]): number;
24
+ /**
25
+ * A decimals setting as it may be stored, read back from whatever was.
26
+ *
27
+ * A setting arrives from a saved workspace, a host's props or a URL, none of
28
+ * which this viewer wrote, so anything other than `'auto'` or a finite number
29
+ * is not a setting at all — and a number is rounded and held to what can be
30
+ * chosen rather than refused, since `4.0` and `9` both say plainly enough what
31
+ * was meant.
32
+ * @param value - What was stored.
33
+ * @returns The setting, or `undefined` for something that is not one.
34
+ */
35
+ export declare function readMzDecimalsSetting(value: unknown): MzDecimalsSetting | undefined;
36
+ //# sourceMappingURL=mzDecimalsSetting.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mzDecimalsSetting.d.ts","sourceRoot":"","sources":["../../../src/mass/core/mzDecimalsSetting.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGtD,4EAA4E;AAC5E,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,MAAM,CAAC;AAEhD,yEAAyE;AACzE,eAAO,MAAM,mBAAmB,IAAI,CAAC;AAErC;;;;;GAKG;AACH,wBAAgB,aAAa,CAC3B,OAAO,EAAE,iBAAiB,EAC1B,OAAO,EAAE,SAAS,YAAY,EAAE,GAC/B,MAAM,CAER;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,OAAO,GACb,iBAAiB,GAAG,SAAS,CAI/B"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * How many decimals the masses on screen are written with: as the spectra
3
+ * decide, or as the reader chose.
4
+ *
5
+ * The spectra decide well for what they are — an Orbitrap scan to four
6
+ * decimals, a library spectrum in whole masses — but not for what the reader
7
+ * is doing with them: an ion-trap run read against its precursors wants a
8
+ * decimal its verdict calls noise, and a table pasted into a report wants
9
+ * fewer digits than the instrument gave. So the decision is a setting, `'auto'`
10
+ * until somebody picks a number.
11
+ */
12
+ import { mzDecimalsOf } from "./resolutionOf.js";
13
+ /** The most decimals that can be chosen; past it a mass is all noise. */
14
+ export const MAXIMUM_MZ_DECIMALS = 5;
15
+ /**
16
+ * How many decimals the masses of spectra shown together are written with.
17
+ * @param setting - What the reader chose, `'auto'` for nothing.
18
+ * @param spectra - The spectra being shown together.
19
+ * @returns The decimals: the choice, or what `mzDecimalsOf` decides.
20
+ */
21
+ export function mzDecimalsFor(setting, spectra) {
22
+ return setting === 'auto' ? mzDecimalsOf(spectra) : setting;
23
+ }
24
+ /**
25
+ * A decimals setting as it may be stored, read back from whatever was.
26
+ *
27
+ * A setting arrives from a saved workspace, a host's props or a URL, none of
28
+ * which this viewer wrote, so anything other than `'auto'` or a finite number
29
+ * is not a setting at all — and a number is rounded and held to what can be
30
+ * chosen rather than refused, since `4.0` and `9` both say plainly enough what
31
+ * was meant.
32
+ * @param value - What was stored.
33
+ * @returns The setting, or `undefined` for something that is not one.
34
+ */
35
+ export function readMzDecimalsSetting(value) {
36
+ if (value === 'auto')
37
+ return 'auto';
38
+ if (typeof value !== 'number' || !Number.isFinite(value))
39
+ return undefined;
40
+ return Math.min(MAXIMUM_MZ_DECIMALS, Math.max(0, Math.round(value)));
41
+ }
42
+ //# sourceMappingURL=mzDecimalsSetting.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mzDecimalsSetting.js","sourceRoot":"","sources":["../../../src/mass/core/mzDecimalsSetting.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAKjD,yEAAyE;AACzE,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC;AAErC;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAC3B,OAA0B,EAC1B,OAAgC;IAEhC,OAAO,OAAO,KAAK,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;AAC9D,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,qBAAqB,CACnC,KAAc;IAEd,IAAI,KAAK,KAAK,MAAM;QAAE,OAAO,MAAM,CAAC;IACpC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAC3E,OAAO,IAAI,CAAC,GAAG,CAAC,mBAAmB,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACvE,CAAC"}