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,76 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useEffect, useRef } from 'react';
3
+ import { SelectedTotal, Toolbar } from 'react-science/ui';
4
+ import { useListKeyboardNavigation } from "../../hooks/ui/useListKeyboardNavigation.js";
5
+ import { panelBodyStyle, panelEmptyStyle, panelStyle, panelToolbarCountStyle, panelToolbarStyle, } from "../../panel/core/panelStyles.js";
6
+ import { downloadMassSpectra } from "../core/downloadSpectra.js";
7
+ import { massCommandLabel } from "../core/massCommands.js";
8
+ import { SpectrumRow } from "./SpectrumRow.js";
9
+ import { useMassCommand } from "./massCommandContext.js";
10
+ import { useMassActions, useMassEditorState } from "./massStateContext.js";
11
+ /**
12
+ * What is loaded: one row per spectrum, in the order the files gave them.
13
+ *
14
+ * The list is the viewer's selection as well as its legend. Whichever row is
15
+ * selected is the spectrum the acquisition table describes, the peak table holds
16
+ * and the chart writes its labels on, so a row is not a checkbox with a colour
17
+ * beside it — it is the control that decides what the other panels are about.
18
+ * That is also why the arrow keys walk it: a GC/MS export gives a page per scan,
19
+ * and finding the interesting one means stepping down them watching the chart.
20
+ *
21
+ * What acts on the list rather than on one row — opening more, drawing every
22
+ * trace again, handing the whole list over as a file, closing every one — is a
23
+ * toolbar under the header, where a panel's own actions belong.
24
+ * @returns The panel.
25
+ */
26
+ export function SpectraPanel() {
27
+ const { state, visibleSpectra } = useMassEditorState();
28
+ const actions = useMassActions();
29
+ const run = useMassCommand();
30
+ const { spectra } = state.data;
31
+ const { selectedId } = state.view;
32
+ const listRef = useRef(null);
33
+ const selectedIndex = spectra.findIndex((spectrum) => spectrum.id === selectedId);
34
+ const onKeyDown = useListKeyboardNavigation({
35
+ length: spectra.length,
36
+ selectedIndex,
37
+ onSelect: (index) => {
38
+ const spectrum = spectra[index];
39
+ if (spectrum !== undefined)
40
+ actions.selectSpectrum(spectrum.id);
41
+ },
42
+ });
43
+ useEffect(() => {
44
+ if (listRef.current === null || selectedId === null)
45
+ return;
46
+ listRef.current
47
+ .querySelector('[data-selected="true"]')
48
+ ?.scrollIntoView({ block: 'nearest' });
49
+ }, [selectedId]);
50
+ const allDrawn = spectra.every((spectrum) => spectrum.showProfile || spectrum.showCentroid);
51
+ return (_jsxs("div", { style: panelStyle, children: [_jsxs("div", { style: panelToolbarStyle, children: [_jsxs(Toolbar, { "aria-label": "Spectra", children: [_jsx(Toolbar.Item, { icon: "folder-open", tooltip: massCommandLabel('openFiles'), "aria-label": massCommandLabel('openFiles'), onClick: () => run('openFiles') }), _jsx(Toolbar.Item, { icon: "trash", intent: "danger", tooltip: "Close every spectrum", "aria-label": "Close every spectrum", disabled: spectra.length === 0, onClick: actions.clear }), _jsx(Toolbar.Item, { icon: "eye-open", tooltip: "Draw every spectrum again, each as the trace it was read as", "aria-label": "Draw every spectrum again", disabled: spectra.length === 0 || allDrawn, onClick: () => {
52
+ for (const spectrum of spectra) {
53
+ if (spectrum.showProfile || spectrum.showCentroid)
54
+ continue;
55
+ actions.setSpectrumVisibility(spectrum.id, {
56
+ showProfile: spectrum.profile !== null,
57
+ showCentroid: spectrum.profile === null,
58
+ });
59
+ }
60
+ } }), _jsx(Toolbar.Item, { icon: "download", tooltip: "Download every spectrum as one JCAMP-DX file", "aria-label": "Download every spectrum", disabled: spectra.length === 0, onClick: () => downloadMassSpectra(spectra) })] }), _jsx("div", { style: panelToolbarCountStyle, title: `${visibleSpectra.length} of ${spectra.length} spectra drawn`, children: _jsx(SelectedTotal, { count: visibleSpectra.length, total: spectra.length }) })] }), _jsx("div", { ref: listRef, style: panelBodyStyle, children: spectra.length === 0 ? (_jsx("p", { style: panelEmptyStyle, children: "No spectrum is open. Drop a JCAMP-DX file, or two columns of m/z and intensity, on the chart." })) : (_jsx("ul", { "aria-label": "Open spectra",
61
+ // Reached by Tab, or by clicking a row, and then walked with the
62
+ // arrows.
63
+ tabIndex: 0, style: listStyle, onKeyDown: onKeyDown, children: spectra.map((spectrum) => (_jsx(SpectrumRow, { spectrum: spectrum, isSelected: spectrum.id === selectedId }, spectrum.id))) })) })] }));
64
+ }
65
+ /**
66
+ * The rows, flush against one another: a gap between every pair reads as a
67
+ * stack of cards rather than as one list to run an eye down.
68
+ */
69
+ const listStyle = {
70
+ display: 'flex',
71
+ flexDirection: 'column',
72
+ margin: 0,
73
+ padding: 0,
74
+ listStyle: 'none',
75
+ };
76
+ //# sourceMappingURL=SpectraPanel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SpectraPanel.js","sourceRoot":"","sources":["../../../src/mass/ui/SpectraPanel.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import type { MassSpectrum } from '../core/massSpectrum.ts';
2
+ export interface SpectrumRowProps {
3
+ /** The spectrum the row is of. */
4
+ spectrum: MassSpectrum;
5
+ /** Whether it is the one the panels act on. */
6
+ isSelected: boolean;
7
+ }
8
+ /**
9
+ * One loaded spectrum: its colour, its two traces, its name, and the way out.
10
+ *
11
+ * Everything on the row addresses the spectrum by its identity, never by where
12
+ * it sits in the list — a row acts on a list that has been shortened by a close
13
+ * since it was drawn, and an index would then recolour or close whichever
14
+ * spectrum has taken that place.
15
+ *
16
+ * The two trace icons are the row's centre of gravity, and they are tri-state
17
+ * rather than checkboxes; `traceIcon.ts` says why. The name is renamed in place
18
+ * on a double click, because a name is what a chemist tells scans apart by and
19
+ * a file's own titles are often the same string a dozen times over. The line
20
+ * under it says what kind of spectrum it is: profile or centroid, how many
21
+ * peaks, and at what resolution.
22
+ * @param props - Component props.
23
+ * @returns The row.
24
+ */
25
+ export declare function SpectrumRow(props: SpectrumRowProps): import("react").JSX.Element;
26
+ //# sourceMappingURL=SpectrumRow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SpectrumRow.d.ts","sourceRoot":"","sources":["../../../src/mass/ui/SpectrumRow.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAO5D,MAAM,WAAW,gBAAgB;IAC/B,kCAAkC;IAClC,QAAQ,EAAE,YAAY,CAAC;IACvB,+CAA+C;IAC/C,UAAU,EAAE,OAAO,CAAC;CACrB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,+BAgIlD"}
@@ -0,0 +1,141 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { InputGroup } from '@blueprintjs/core';
3
+ import { useMemo, useState } from 'react';
4
+ import { Button } from 'react-science/ui';
5
+ import { SpectrumColorSwatch } from "../../panel/ui/SpectrumColorSwatch.js";
6
+ import { downloadMassSpectrum } from "../core/downloadSpectra.js";
7
+ import { spectrumSubtitle } from "../core/massSummary.js";
8
+ import { nextTraceIconClick, traceIconState } from "../core/traceIcon.js";
9
+ import { useMassActions } from "./massStateContext.js";
10
+ /**
11
+ * One loaded spectrum: its colour, its two traces, its name, and the way out.
12
+ *
13
+ * Everything on the row addresses the spectrum by its identity, never by where
14
+ * it sits in the list — a row acts on a list that has been shortened by a close
15
+ * since it was drawn, and an index would then recolour or close whichever
16
+ * spectrum has taken that place.
17
+ *
18
+ * The two trace icons are the row's centre of gravity, and they are tri-state
19
+ * rather than checkboxes; `traceIcon.ts` says why. The name is renamed in place
20
+ * on a double click, because a name is what a chemist tells scans apart by and
21
+ * a file's own titles are often the same string a dozen times over. The line
22
+ * under it says what kind of spectrum it is: profile or centroid, how many
23
+ * peaks, and at what resolution.
24
+ * @param props - Component props.
25
+ * @returns The row.
26
+ */
27
+ export function SpectrumRow(props) {
28
+ const { spectrum, isSelected } = props;
29
+ const actions = useMassActions();
30
+ const [draftName, setDraftName] = useState(null);
31
+ const subtitle = useMemo(() => spectrumSubtitle(spectrum, { describeKind: true }), [spectrum]);
32
+ const profileState = traceIconState(spectrum.showProfile, isSelected);
33
+ const centroidState = traceIconState(spectrum.showCentroid, isSelected);
34
+ /**
35
+ * Run the cycle of one trace icon.
36
+ * @param kind - The trace the icon stands for.
37
+ * @param state - What the icon was saying before the click.
38
+ */
39
+ function clickTrace(kind, state) {
40
+ const click = nextTraceIconClick(kind, state);
41
+ actions.setSpectrumVisibility(spectrum.id, click.visibility);
42
+ if (click.select)
43
+ actions.selectSpectrum(spectrum.id);
44
+ }
45
+ /** Take the name typed, unless it was emptied — a rename abandoned. */
46
+ function commitRename() {
47
+ const name = draftName?.trim() ?? '';
48
+ setDraftName(null);
49
+ if (name !== '')
50
+ actions.renameSpectrum(spectrum.id, name);
51
+ }
52
+ return (_jsxs("li", { "aria-current": isSelected ? 'true' : undefined, style: isSelected ? selectedRowStyle : rowStyle, "data-selected": isSelected ? 'true' : undefined, children: [_jsx(SpectrumColorSwatch, { color: spectrum.color, name: spectrum.name, onPick: (color) => actions.setSpectrumColor(spectrum.id, color) }), _jsx(Button, { variant: "minimal", size: "small", icon: "timeline-line-chart", active: profileState !== 'hidden', intent: profileState === 'selected' ? 'primary' : 'none', disabled: spectrum.profile === null, tooltipProps: {
53
+ ...rowTooltipProps,
54
+ content: spectrum.profile === null
55
+ ? 'This file was already centroided, so it has no continuous trace'
56
+ : traceTooltip('profile', profileState),
57
+ }, "aria-label": `Continuous trace of ${spectrum.name}`, onClick: () => clickTrace('profile', profileState) }), _jsx(Button, { variant: "minimal", size: "small", icon: "timeline-bar-chart", active: centroidState !== 'hidden', intent: centroidState === 'selected' ? 'primary' : 'none', tooltipProps: {
58
+ ...rowTooltipProps,
59
+ content: traceTooltip('centroid', centroidState),
60
+ }, "aria-label": `Centroid sticks of ${spectrum.name}`, onClick: () => clickTrace('centroid', centroidState) }), draftName === null ? (_jsxs("button", { type: "button", style: nameStyle, title: "Click to work on this spectrum, double click to rename it", onClick: () => actions.selectSpectrum(spectrum.id), onDoubleClick: () => setDraftName(spectrum.name), children: [_jsx("span", { style: nameTextStyle, children: spectrum.name }), _jsx("span", { style: subtitleStyle, children: subtitle })] })) : (_jsx(InputGroup, { autoFocus: true, size: "small", value: draftName, spellCheck: false, autoCapitalize: "off", autoCorrect: "off", autoComplete: "off", "aria-label": `Name of ${spectrum.name}`, onValueChange: setDraftName, onBlur: commitRename, onKeyDown: (event) => {
61
+ if (event.key === 'Enter')
62
+ commitRename();
63
+ if (event.key === 'Escape')
64
+ setDraftName(null);
65
+ } })), _jsx(Button, { variant: "minimal", size: "small", icon: "download", "aria-label": `Download ${spectrum.name}`, tooltipProps: {
66
+ ...rowTooltipProps,
67
+ content: 'Download this spectrum as a JCAMP-DX file',
68
+ }, onClick: () => downloadMassSpectrum(spectrum) }), _jsx(Button, { variant: "minimal", size: "small", icon: "cross", "aria-label": `Close ${spectrum.name}`, tooltipProps: { ...rowTooltipProps, content: 'Close this spectrum' }, onClick: () => actions.removeSpectrum(spectrum.id) })] }));
69
+ }
70
+ /**
71
+ * What a click on a trace icon would do, said as a sentence.
72
+ *
73
+ * The three states of the icon look alike enough at 16 pixels that the cycle is
74
+ * actually learned from the tooltip, so each one says what the click does rather
75
+ * than what the icon means — including that picking one trace puts the other
76
+ * away, which is the part a reader would otherwise discover by surprise.
77
+ * @param kind - The trace the icon stands for.
78
+ * @param state - What the icon is saying.
79
+ * @returns The tooltip.
80
+ */
81
+ function traceTooltip(kind, state) {
82
+ const trace = kind === 'profile' ? 'the continuous trace' : 'the centroid sticks';
83
+ const other = kind === 'profile' ? 'the centroid sticks' : 'the continuous trace';
84
+ if (state === 'hidden') {
85
+ return `Draw ${trace} instead of ${other}, and work on this spectrum`;
86
+ }
87
+ if (state === 'drawn') {
88
+ return 'Work on this spectrum — its peaks are the ones labelled';
89
+ }
90
+ return 'Take this spectrum off the chart';
91
+ }
92
+ /**
93
+ * How a tooltip behaves on a control that sits in a list: a hand crossing forty
94
+ * rows passes over a hundred of these, and with no delay every one of them
95
+ * opens.
96
+ */
97
+ const rowTooltipProps = { compact: true, hoverOpenDelay: 300 };
98
+ const rowStyle = {
99
+ display: 'flex',
100
+ alignItems: 'center',
101
+ gap: 2,
102
+ padding: '0 2px',
103
+ borderRadius: 3,
104
+ };
105
+ /** The selected row, which is the one every other panel is about. */
106
+ const selectedRowStyle = { ...rowStyle, background: '#e8f1fb' };
107
+ const nameStyle = {
108
+ display: 'flex',
109
+ flexDirection: 'column',
110
+ alignItems: 'flex-start',
111
+ gap: 1,
112
+ flex: '1 1 1px',
113
+ minWidth: 0,
114
+ padding: '1px 2px',
115
+ border: 'none',
116
+ background: 'none',
117
+ color: 'inherit',
118
+ font: 'inherit',
119
+ textAlign: 'left',
120
+ cursor: 'pointer',
121
+ };
122
+ /** One line, cut short rather than wrapped: the rows stay a fixed height. */
123
+ const nameTextStyle = {
124
+ maxWidth: '100%',
125
+ fontSize: 12,
126
+ fontWeight: 600,
127
+ lineHeight: 1.2,
128
+ overflow: 'hidden',
129
+ textOverflow: 'ellipsis',
130
+ whiteSpace: 'nowrap',
131
+ };
132
+ const subtitleStyle = {
133
+ maxWidth: '100%',
134
+ fontSize: 10,
135
+ lineHeight: 1.2,
136
+ opacity: 0.7,
137
+ overflow: 'hidden',
138
+ textOverflow: 'ellipsis',
139
+ whiteSpace: 'nowrap',
140
+ };
141
+ //# sourceMappingURL=SpectrumRow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SpectrumRow.js","sourceRoot":"","sources":["../../../src/mass/ui/SpectrumRow.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ import type { ReactElement } from 'react';
2
+ import type { PlotRect } from '../../chart/core/chartGeometry.ts';
3
+ import type { ChartScale } from '../../chart/core/chartScale.ts';
4
+ import type { MassSpectrum } from '../core/massSpectrum.ts';
5
+ export interface SpectrumTraceProps {
6
+ /** The spectrum, which says in itself which of its traces are drawn. */
7
+ spectrum: MassSpectrum;
8
+ /** Where the plot sits, whose width is how many points are worth drawing. */
9
+ plot: PlotRect;
10
+ /**
11
+ * The m/z axis as it is currently zoomed. It must be stable while the window
12
+ * is — a scale rebuilt on every render rebuilds both paths with it, and a
13
+ * profile scan reduced afresh on each pointer move is what makes a chart
14
+ * stutter under the hand.
15
+ */
16
+ xScale: ChartScale;
17
+ /** The intensity axis as it is currently zoomed, and the same requirement. */
18
+ yScale: ChartScale;
19
+ /**
20
+ * How thick both traces are drawn, in pixels.
21
+ * @default 1
22
+ */
23
+ strokeWidth?: number;
24
+ }
25
+ /**
26
+ * One spectrum, drawn as at most two paths in its own colour.
27
+ *
28
+ * The window the traces are reduced to is read back off the scale rather than
29
+ * passed in beside it, so the reduction can never have been computed for a
30
+ * window other than the one being drawn — the two would disagree for exactly
31
+ * one render after a zoom, which is the render the eye catches.
32
+ *
33
+ * A measured profile is reduced to the pixel columns it will occupy, keeping
34
+ * the extremes of each column so the noise still looks like noise. A
35
+ * **calculated** trace is never reduced: an isotopic distribution is emitted as
36
+ * a stick with an explicit zero either side of it, a reducer takes the zeros for
37
+ * the flat stretches they look like and drops them, and the line then runs from
38
+ * peak top to peak top without ever coming back to the baseline. The centroid is
39
+ * reduced against the current view too: a peak table of fifty thousand sticks
40
+ * has no more than one per pixel column to show, and which peak wins a column
41
+ * changes with every zoom.
42
+ * @param props - Component props.
43
+ * @returns The spectrum, as SVG.
44
+ */
45
+ export declare function SpectrumTrace(props: SpectrumTraceProps): ReactElement;
46
+ //# sourceMappingURL=SpectrumTrace.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SpectrumTrace.d.ts","sourceRoot":"","sources":["../../../src/mass/ui/SpectrumTrace.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAG1C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAC;AAClE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAGjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAE5D,MAAM,WAAW,kBAAkB;IACjC,wEAAwE;IACxE,QAAQ,EAAE,YAAY,CAAC;IACvB,6EAA6E;IAC7E,IAAI,EAAE,QAAQ,CAAC;IACf;;;;;OAKG;IACH,MAAM,EAAE,UAAU,CAAC;IACnB,8EAA8E;IAC9E,MAAM,EAAE,UAAU,CAAC;IACnB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,YAAY,CAqDrE"}
@@ -0,0 +1,68 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { xyReduce, xyReduceNonContinuous } from 'ml-spectra-processing';
3
+ import { useMemo } from 'react';
4
+ import { chartValue } from "../../chart/core/chartScale.js";
5
+ import { profilePath, stickPath } from "../../chart/core/tracePath.js";
6
+ /**
7
+ * One spectrum, drawn as at most two paths in its own colour.
8
+ *
9
+ * The window the traces are reduced to is read back off the scale rather than
10
+ * passed in beside it, so the reduction can never have been computed for a
11
+ * window other than the one being drawn — the two would disagree for exactly
12
+ * one render after a zoom, which is the render the eye catches.
13
+ *
14
+ * A measured profile is reduced to the pixel columns it will occupy, keeping
15
+ * the extremes of each column so the noise still looks like noise. A
16
+ * **calculated** trace is never reduced: an isotopic distribution is emitted as
17
+ * a stick with an explicit zero either side of it, a reducer takes the zeros for
18
+ * the flat stretches they look like and drops them, and the line then runs from
19
+ * peak top to peak top without ever coming back to the baseline. The centroid is
20
+ * reduced against the current view too: a peak table of fifty thousand sticks
21
+ * has no more than one per pixel column to show, and which peak wins a column
22
+ * changes with every zoom.
23
+ * @param props - Component props.
24
+ * @returns The spectrum, as SVG.
25
+ */
26
+ export function SpectrumTrace(props) {
27
+ const { spectrum, plot, xScale, yScale, strokeWidth = TRACE_WIDTH } = props;
28
+ const { profile, centroid, origin, color, showProfile, showCentroid } = spectrum;
29
+ const from = chartValue(xScale, plot.left);
30
+ const to = chartValue(xScale, plot.right);
31
+ const columns = Math.max(2, Math.round(plot.width));
32
+ const profileD = useMemo(() => {
33
+ if (!showProfile || profile === null || profile.x.length === 0)
34
+ return '';
35
+ const drawn = origin.format === 'calculated'
36
+ ? profile
37
+ : xyReduce(profile, {
38
+ from,
39
+ to,
40
+ nbPoints: columns * PROFILE_POINTS_PER_COLUMN,
41
+ });
42
+ return profilePath(drawn.x, drawn.y, xScale, yScale);
43
+ }, [showProfile, profile, origin.format, from, to, columns, xScale, yScale]);
44
+ const centroidD = useMemo(() => {
45
+ if (!showCentroid || centroid.x.length === 0)
46
+ return '';
47
+ const drawn = xyReduceNonContinuous(centroid, {
48
+ from,
49
+ to,
50
+ maxApproximateNbPoints: columns,
51
+ });
52
+ return stickPath(drawn.x, drawn.y, xScale, yScale);
53
+ }, [showCentroid, centroid, from, to, columns, xScale, yScale]);
54
+ return (_jsxs("g", { pointerEvents: "none", children: [profileD === '' ? null : (_jsx("path", { d: profileD, fill: "none", stroke: color, strokeWidth: strokeWidth, strokeLinejoin: "round" })), centroidD === '' ? null : (_jsx("path", { d: centroidD, fill: "none", stroke: color, strokeWidth: strokeWidth }))] }));
55
+ }
56
+ /** How thick a trace is when nobody asks for anything else. */
57
+ const TRACE_WIDTH = 1;
58
+ /**
59
+ * How many reduced samples each pixel column of a profile is given.
60
+ *
61
+ * The reduction keeps the lowest and the highest sample of every slot, so two
62
+ * per column is the least that draws a column at all — and `xyReduce` asks for
63
+ * about four times what is displayed before a narrow peak survives at its true
64
+ * height rather than at the height of whichever sample the slot boundary
65
+ * happened to land on.
66
+ */
67
+ const PROFILE_POINTS_PER_COLUMN = 4;
68
+ //# sourceMappingURL=SpectrumTrace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SpectrumTrace.js","sourceRoot":"","sources":["../../../src/mass/ui/SpectrumTrace.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * The mass spectrum chart, the panels beside it and the editor they sit in.
3
+ *
4
+ * `MassChart` is the drawing and holds nothing: it takes spectra, what to label
5
+ * and a window as props and hands every gesture back, so it fits a report page
6
+ * or a test as readily as an editor. The chart's own drawing — scales, ticks,
7
+ * plot geometry, the zoom gestures and the label placement — is the shared
8
+ * chart layer, which every viewer of the family draws with.
9
+ */
10
+ export type { MassAboutDialogProps } from './MassAboutDialog.tsx';
11
+ export { MassAboutDialog } from './MassAboutDialog.tsx';
12
+ export type { MassCanvasProps } from './MassCanvas.tsx';
13
+ export { MassCanvas } from './MassCanvas.tsx';
14
+ export { MassChart } from './MassChart.tsx';
15
+ export type { MassCommandProviderProps } from './MassCommandProvider.tsx';
16
+ export { MassCommandProvider } from './MassCommandProvider.tsx';
17
+ export type { MassCommandTooltipProps } from './MassCommandTooltip.tsx';
18
+ export { MassCommandTooltip } from './MassCommandTooltip.tsx';
19
+ export type { MassDocumentationDialogProps } from './MassDocumentationDialog.tsx';
20
+ export { MassDocumentationDialog } from './MassDocumentationDialog.tsx';
21
+ export type { MassEditorProps } from './MassEditor.tsx';
22
+ export { MassEditor } from './MassEditor.tsx';
23
+ export { MassHeader } from './MassHeader.tsx';
24
+ export type { MassLogoProps } from './MassLogo.tsx';
25
+ export { MassLogo } from './MassLogo.tsx';
26
+ export type { MassPointerTrackerProps } from './MassPointerTracker.tsx';
27
+ export { MassPointerTracker } from './MassPointerTracker.tsx';
28
+ export type { MassSidePanelProps } from './MassSidePanel.tsx';
29
+ export { MassSidePanel } from './MassSidePanel.tsx';
30
+ export type { MassStateProviderProps } from './MassStateProvider.tsx';
31
+ export { MassStateProvider } from './MassStateProvider.tsx';
32
+ export { MassStatusBar } from './MassStatusBar.tsx';
33
+ export type { MassToolbarProps } from './MassToolbar.tsx';
34
+ export { MassToolbar } from './MassToolbar.tsx';
35
+ export type { MassMetadataProps } from './MetadataPanel.tsx';
36
+ export { MassMetadata, MetadataPanel } from './MetadataPanel.tsx';
37
+ export type { MzDecimalsMenuProps } from './MzDecimalsMenu.tsx';
38
+ export { MzDecimalsMenu } from './MzDecimalsMenu.tsx';
39
+ export type { PeakLabelsProps } from './PeakLabels.tsx';
40
+ export { PeakLabels } from './PeakLabels.tsx';
41
+ export type { PeakSortKey, PeakTableProps } from './PeakTable.tsx';
42
+ export { PeakTable } from './PeakTable.tsx';
43
+ export type { PeaksPanelProps } from './PeaksPanel.tsx';
44
+ export { PeaksPanel } from './PeaksPanel.tsx';
45
+ export { SpectraPanel } from './SpectraPanel.tsx';
46
+ export type { SpectrumRowProps } from './SpectrumRow.tsx';
47
+ export { SpectrumRow } from './SpectrumRow.tsx';
48
+ export type { SpectrumTraceProps } from './SpectrumTrace.tsx';
49
+ export { SpectrumTrace } from './SpectrumTrace.tsx';
50
+ export type { MassEditorActions } from './massActions.ts';
51
+ export { createMassActions } from './massActions.ts';
52
+ export type { MassChartProps } from './massChartProps.ts';
53
+ export type { MassCommandContextValue } from './massCommandContext.tsx';
54
+ export { useMassCommand, useMassCommandProps } from './massCommandContext.tsx';
55
+ export type { MassHostPanel, MassStackPanel } from './massHostPanels.ts';
56
+ export { isMassHostPanel, massStackPanels } from './massHostPanels.ts';
57
+ export { useMassActions, useMassEditorState } from './massStateContext.ts';
58
+ export type { IntensityZoom } from './useIntensityZoom.ts';
59
+ export { useIntensityZoom } from './useIntensityZoom.ts';
60
+ export type { MassEditorApi, UseMassEditorOptions } from './useMassEditor.ts';
61
+ export { useMassEditor } from './useMassEditor.ts';
62
+ export type { MassFiles } from './useMassFiles.ts';
63
+ export { useMassFiles } from './useMassFiles.ts';
64
+ export type { MassPointerOptions, MassReadout } from './useMassPointer.ts';
65
+ export { sameMassReadout, useMassPointer } from './useMassPointer.ts';
66
+ export { useMassShortcuts } from './useMassShortcuts.ts';
67
+ export type { MassZoomClick, MassZoomOptions } from './useMassZoom.ts';
68
+ export { useMassZoom } from './useMassZoom.ts';
69
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/mass/ui/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * The mass spectrum chart, the panels beside it and the editor they sit in.
3
+ *
4
+ * `MassChart` is the drawing and holds nothing: it takes spectra, what to label
5
+ * and a window as props and hands every gesture back, so it fits a report page
6
+ * or a test as readily as an editor. The chart's own drawing — scales, ticks,
7
+ * plot geometry, the zoom gestures and the label placement — is the shared
8
+ * chart layer, which every viewer of the family draws with.
9
+ */
10
+ export { MassAboutDialog } from "./MassAboutDialog.js";
11
+ export { MassCanvas } from "./MassCanvas.js";
12
+ export { MassChart } from "./MassChart.js";
13
+ export { MassCommandProvider } from "./MassCommandProvider.js";
14
+ export { MassCommandTooltip } from "./MassCommandTooltip.js";
15
+ export { MassDocumentationDialog } from "./MassDocumentationDialog.js";
16
+ export { MassEditor } from "./MassEditor.js";
17
+ export { MassHeader } from "./MassHeader.js";
18
+ export { MassLogo } from "./MassLogo.js";
19
+ export { MassPointerTracker } from "./MassPointerTracker.js";
20
+ export { MassSidePanel } from "./MassSidePanel.js";
21
+ export { MassStateProvider } from "./MassStateProvider.js";
22
+ export { MassStatusBar } from "./MassStatusBar.js";
23
+ export { MassToolbar } from "./MassToolbar.js";
24
+ export { MassMetadata, MetadataPanel } from "./MetadataPanel.js";
25
+ export { MzDecimalsMenu } from "./MzDecimalsMenu.js";
26
+ export { PeakLabels } from "./PeakLabels.js";
27
+ export { PeakTable } from "./PeakTable.js";
28
+ export { PeaksPanel } from "./PeaksPanel.js";
29
+ export { SpectraPanel } from "./SpectraPanel.js";
30
+ export { SpectrumRow } from "./SpectrumRow.js";
31
+ export { SpectrumTrace } from "./SpectrumTrace.js";
32
+ export { createMassActions } from "./massActions.js";
33
+ export { useMassCommand, useMassCommandProps } from "./massCommandContext.js";
34
+ export { isMassHostPanel, massStackPanels } from "./massHostPanels.js";
35
+ export { useMassActions, useMassEditorState } from "./massStateContext.js";
36
+ export { useIntensityZoom } from "./useIntensityZoom.js";
37
+ export { useMassEditor } from "./useMassEditor.js";
38
+ export { useMassFiles } from "./useMassFiles.js";
39
+ export { sameMassReadout, useMassPointer } from "./useMassPointer.js";
40
+ export { useMassShortcuts } from "./useMassShortcuts.js";
41
+ export { useMassZoom } from "./useMassZoom.js";
42
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/mass/ui/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAuB,CAAC;AAExD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAkB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAiB,CAAC;AAE5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA2B,CAAC;AAEhE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAA0B,CAAC;AAE9D,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA+B,CAAC;AAExE,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAkB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAkB,CAAC;AAE9C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAgB,CAAC;AAE1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAA0B,CAAC;AAE9D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAqB,CAAC;AAEpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAyB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAqB,CAAC;AAEpD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAmB,CAAC;AAEhD,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,oBAAqB,CAAC;AAElE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAsB,CAAC;AAEtD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAkB,CAAC;AAE9C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAiB,CAAC;AAE5C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAkB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAoB,CAAC;AAElD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAmB,CAAC;AAEhD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAqB,CAAC;AAEpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAGrD,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,yBAA0B,CAAC;AAE/E,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE3E,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Everything the viewer can be asked to do, as functions rather than actions.
3
+ *
4
+ * A component that dispatched action objects would have the shape of the reducer
5
+ * spread across every panel; one that calls `actions.selectSpectrum(id)` does
6
+ * not, and the reducer stays free to change how it holds things.
7
+ */
8
+ import type { Dispatch } from 'react';
9
+ import type { MassAction, SpectrumVisibility } from '../core/massReducer.ts';
10
+ import type { MassPanelId } from '../core/massSidePanels.ts';
11
+ import type { MassDomain, MassSpectrum } from '../core/massSpectrum.ts';
12
+ import type { MassSettings, MassTool, PartialMassState } from '../core/massState.ts';
13
+ /** Everything the viewer can be asked to do. */
14
+ export interface MassEditorActions {
15
+ /** Draw these as well as what is already open. */
16
+ addSpectra: (spectra: MassSpectrum[]) => void;
17
+ /** Draw these instead of what is open, and refit the window to them. */
18
+ setSpectra: (spectra: MassSpectrum[]) => void;
19
+ /** Close one. */
20
+ removeSpectrum: (id: string) => void;
21
+ /** Call one something else. */
22
+ renameSpectrum: (id: string, name: string) => void;
23
+ /** Draw one in another colour. */
24
+ setSpectrumColor: (id: string, color: string) => void;
25
+ /** Draw one as its profile, as its sticks, or not at all. */
26
+ setSpectrumVisibility: (id: string, visibility: SpectrumVisibility) => void;
27
+ /** Point the panels at one, or at none. */
28
+ selectSpectrum: (id: string | null) => void;
29
+ /** Show this window. */
30
+ setDomain: (domain: MassDomain) => void;
31
+ /** Show what fits again. */
32
+ resetDomain: () => void;
33
+ /** Run this tool on the next drag. */
34
+ setTool: (tool: MassTool) => void;
35
+ /** Open or close a side panel, the viewer's own or one a host added. */
36
+ togglePanel: (panelId: MassPanelId) => void;
37
+ /** Say why something was refused, or that nothing is wrong any more. */
38
+ setError: (error: string | null) => void;
39
+ /** Change how the spectra are drawn. */
40
+ setSettings: (settings: Partial<MassSettings>) => void;
41
+ /** Take a whole state, as a host restoring one supplies it. */
42
+ loadState: (state: PartialMassState) => void;
43
+ /** Close every spectrum and start again from an empty chart. */
44
+ clear: () => void;
45
+ }
46
+ /**
47
+ * Bind every action to a dispatch.
48
+ * @param dispatch - The reducer's dispatch.
49
+ * @returns The actions, stable for as long as the dispatch is.
50
+ */
51
+ export declare function createMassActions(dispatch: Dispatch<MassAction>): MassEditorActions;
52
+ //# sourceMappingURL=massActions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"massActions.d.ts","sourceRoot":"","sources":["../../../src/mass/ui/massActions.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEtC,OAAO,KAAK,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC7E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,KAAK,EACV,YAAY,EACZ,QAAQ,EACR,gBAAgB,EACjB,MAAM,sBAAsB,CAAC;AAE9B,gDAAgD;AAChD,MAAM,WAAW,iBAAiB;IAChC,kDAAkD;IAClD,UAAU,EAAE,CAAC,OAAO,EAAE,YAAY,EAAE,KAAK,IAAI,CAAC;IAC9C,wEAAwE;IACxE,UAAU,EAAE,CAAC,OAAO,EAAE,YAAY,EAAE,KAAK,IAAI,CAAC;IAC9C,iBAAiB;IACjB,cAAc,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,+BAA+B;IAC/B,cAAc,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACnD,kCAAkC;IAClC,gBAAgB,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACtD,6DAA6D;IAC7D,qBAAqB,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,kBAAkB,KAAK,IAAI,CAAC;IAC5E,2CAA2C;IAC3C,cAAc,EAAE,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAC5C,wBAAwB;IACxB,SAAS,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,IAAI,CAAC;IACxC,4BAA4B;IAC5B,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,sCAAsC;IACtC,OAAO,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC;IAClC,wEAAwE;IACxE,WAAW,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,IAAI,CAAC;IAC5C,wEAAwE;IACxE,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IACzC,wCAAwC;IACxC,WAAW,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,YAAY,CAAC,KAAK,IAAI,CAAC;IACvD,+DAA+D;IAC/D,SAAS,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAC7C,gEAAgE;IAChE,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,QAAQ,CAAC,UAAU,CAAC,GAC7B,iBAAiB,CAgDnB"}