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,92 @@
1
+ /**
2
+ * The generic zoom, told what a mass spectrum's window is fitted to.
3
+ *
4
+ * Every gesture — the drag, the wheel, the double click — is `useChartZoom` in
5
+ * the shared chart and is not written here, because none of it is about mass.
6
+ * What *is* about mass is the fit: a spectrum carries two traces where only one
7
+ * is drawn, and a previewed pattern is left out of the extents. That arithmetic
8
+ * is `massDomain.ts`, and this hook is what joins the two.
9
+ *
10
+ * One gesture is about mass in the same way. A click on a mass chart is a peak
11
+ * or it is nothing at all, and only the axis the gesture was measured against
12
+ * can say which of the two it was — so the hook that owns that axis answers it,
13
+ * and the chart above is handed the peak rather than a place on the plot.
14
+ */
15
+ import type { RefObject } from 'react';
16
+ import type { ZoomDragMode } from '../../chart/core/chartDomain.ts';
17
+ import type { PlotRect } from '../../chart/core/chartGeometry.ts';
18
+ import type { ChartScale } from '../../chart/core/chartScale.ts';
19
+ import type { ChartClickModifiers } from '../../chart/ui/chartGestures.ts';
20
+ import type { ChartZoom } from '../../chart/ui/useChartZoom.ts';
21
+ import type { MassDomain, MassSpectrum } from '../core/massSpectrum.ts';
22
+ import type { NearestPeak } from '../core/nearestPeak.ts';
23
+ /** A click on the plot, with everything needed to say what it was on. */
24
+ export interface MassZoomClick {
25
+ /** Where it landed on the m/z axis. */
26
+ mz: number;
27
+ /** The picked peak within reach of it, `null` when it landed on none. */
28
+ peak: NearestPeak | null;
29
+ /**
30
+ * The m/z axis the click was measured against, for a host testing marks of
31
+ * its own — a ring on a fragmented peak — before the sticks.
32
+ */
33
+ xScale: ChartScale;
34
+ /** The modifier keys held as the button came up. */
35
+ modifiers: ChartClickModifiers;
36
+ }
37
+ export interface MassZoomOptions {
38
+ /** What the chart draws. */
39
+ spectra: readonly MassSpectrum[];
40
+ /**
41
+ * What the window is fitted to instead, when that is not what the chart
42
+ * draws — every pane of a stack is fitted to the union, so a faint spectrum
43
+ * and a bright one are not drawn alike.
44
+ * @default the spectra the chart draws
45
+ */
46
+ fitTo?: readonly MassSpectrum[];
47
+ /**
48
+ * Whether one spectrum is drawn below the axis, which fits the window about
49
+ * zero.
50
+ * @default false
51
+ */
52
+ mirror?: boolean;
53
+ /** The SVG the gestures are made on, as it was handed to its `ref`. */
54
+ svgRef: RefObject<SVGSVGElement | null>;
55
+ /** Where the plot sits inside that SVG, which the axes are laid over. */
56
+ plot: PlotRect;
57
+ /**
58
+ * The window a host is imposing, `null` while it imposes none. Handed straight
59
+ * through; `useChartZoom` documents what imposing one does.
60
+ * @default null
61
+ */
62
+ domain?: MassDomain | null;
63
+ /**
64
+ * What a drag asks for: the m/z axis alone, or the rectangle swept out.
65
+ * @default 'xAxis'
66
+ */
67
+ drag?: ZoomDragMode;
68
+ /**
69
+ * Whether the chart answers `f` with the fit itself. A viewer running its own
70
+ * keys through a command table, where the key is documented, turns it off.
71
+ * @default true
72
+ */
73
+ keys?: boolean;
74
+ /**
75
+ * Told where a click on the plot landed — a press let go over it without
76
+ * travelling, never the end of a drag — and the peak within reach of it.
77
+ * @default undefined
78
+ */
79
+ onClick?: (click: MassZoomClick) => void;
80
+ }
81
+ /**
82
+ * Zoom a mass chart by dragging it, by the wheel and by double clicking it.
83
+ *
84
+ * The y axis keeps its default rules, which are a stick spectrum's: zero is the
85
+ * baseline the wheel scales about, and it stays inside the window however the
86
+ * chart is zoomed, because a window starting at a tenth of the base peak would
87
+ * cut every stick off at the ankles.
88
+ * @param options - The chart and what it holds.
89
+ * @returns The window and the gestures that move it.
90
+ */
91
+ export declare function useMassZoom(options: MassZoomOptions): ChartZoom;
92
+ //# sourceMappingURL=useMassZoom.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useMassZoom.d.ts","sourceRoot":"","sources":["../../../src/mass/ui/useMassZoom.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAC;AAClE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAEjE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAC3E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAGhE,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAG1D,yEAAyE;AACzE,MAAM,WAAW,aAAa;IAC5B,uCAAuC;IACvC,EAAE,EAAE,MAAM,CAAC;IACX,yEAAyE;IACzE,IAAI,EAAE,WAAW,GAAG,IAAI,CAAC;IACzB;;;OAGG;IACH,MAAM,EAAE,UAAU,CAAC;IACnB,oDAAoD;IACpD,SAAS,EAAE,mBAAmB,CAAC;CAChC;AAED,MAAM,WAAW,eAAe;IAC9B,4BAA4B;IAC5B,OAAO,EAAE,SAAS,YAAY,EAAE,CAAC;IACjC;;;;;OAKG;IACH,KAAK,CAAC,EAAE,SAAS,YAAY,EAAE,CAAC;IAChC;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,uEAAuE;IACvE,MAAM,EAAE,SAAS,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC;IACxC,yEAAyE;IACzE,IAAI,EAAE,QAAQ,CAAC;IACf;;;;OAIG;IACH,MAAM,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;IAC3B;;;OAGG;IACH,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB;;;;OAIG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;IACf;;;;OAIG;IACH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;CAC1C;AAED;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,eAAe,GAAG,SAAS,CAwD/D"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * The generic zoom, told what a mass spectrum's window is fitted to.
3
+ *
4
+ * Every gesture — the drag, the wheel, the double click — is `useChartZoom` in
5
+ * the shared chart and is not written here, because none of it is about mass.
6
+ * What *is* about mass is the fit: a spectrum carries two traces where only one
7
+ * is drawn, and a previewed pattern is left out of the extents. That arithmetic
8
+ * is `massDomain.ts`, and this hook is what joins the two.
9
+ *
10
+ * One gesture is about mass in the same way. A click on a mass chart is a peak
11
+ * or it is nothing at all, and only the axis the gesture was measured against
12
+ * can say which of the two it was — so the hook that owns that axis answers it,
13
+ * and the chart above is handed the peak rather than a place on the plot.
14
+ */
15
+ import { useCallback, useLayoutEffect, useMemo, useRef } from 'react';
16
+ import { useChartZoom } from "../../chart/ui/useChartZoom.js";
17
+ import { fittedTo, fullDomain } from "../core/massDomain.js";
18
+ import { peakAtMz } from "../core/nearestPeak.js";
19
+ /**
20
+ * Zoom a mass chart by dragging it, by the wheel and by double clicking it.
21
+ *
22
+ * The y axis keeps its default rules, which are a stick spectrum's: zero is the
23
+ * baseline the wheel scales about, and it stays inside the window however the
24
+ * chart is zoomed, because a window starting at a tenth of the base peak would
25
+ * cut every stick off at the ankles.
26
+ * @param options - The chart and what it holds.
27
+ * @returns The window and the gestures that move it.
28
+ */
29
+ export function useMassZoom(options) {
30
+ const { spectra, fitTo, mirror = false, svgRef, plot, domain = null, drag = 'xAxis', keys = true, onClick, } = options;
31
+ const measured = fitTo ?? spectra;
32
+ const fitted = useMemo(() => fullDomain(measured, mirror), [measured, mirror]);
33
+ const fitKey = useMemo(() => fittedTo(measured, mirror), [measured, mirror]);
34
+ const gestures = useMemo(() => ({ drag, wheel: true, keys }), [drag, keys]);
35
+ // The axis a click is measured against is the one the zoom arrived at, and
36
+ // the click comes back out of that same hook: it therefore reaches the
37
+ // handler through a ref, read as the button comes up rather than closed over
38
+ // when the gesture layer was built.
39
+ const axis = useRef(null);
40
+ const onPress = useCallback((point, modifiers) => {
41
+ const xScale = axis.current;
42
+ if (xScale === null || onClick === undefined)
43
+ return;
44
+ onClick({
45
+ mz: point.x,
46
+ peak: peakAtMz(spectra, xScale, point.x),
47
+ xScale,
48
+ modifiers,
49
+ });
50
+ }, [spectra, onClick]);
51
+ const zoom = useChartZoom({
52
+ fitted,
53
+ fitKey,
54
+ svgRef,
55
+ plot,
56
+ domain,
57
+ gestures,
58
+ ...(onClick === undefined ? {} : { onClick: onPress }),
59
+ });
60
+ useLayoutEffect(() => {
61
+ axis.current = zoom.xScale;
62
+ });
63
+ return zoom;
64
+ }
65
+ //# sourceMappingURL=useMassZoom.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useMassZoom.js","sourceRoot":"","sources":["../../../src/mass/ui/useMassZoom.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAQtE,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAG7D,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AA8DlD;;;;;;;;;GASG;AACH,MAAM,UAAU,WAAW,CAAC,OAAwB;IAClD,MAAM,EACJ,OAAO,EACP,KAAK,EACL,MAAM,GAAG,KAAK,EACd,MAAM,EACN,IAAI,EACJ,MAAM,GAAG,IAAI,EACb,IAAI,GAAG,OAAO,EACd,IAAI,GAAG,IAAI,EACX,OAAO,GACR,GAAG,OAAO,CAAC;IAEZ,MAAM,QAAQ,GAAG,KAAK,IAAI,OAAO,CAAC;IAClC,MAAM,MAAM,GAAG,OAAO,CACpB,GAAG,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,EAClC,CAAC,QAAQ,EAAE,MAAM,CAAC,CACnB,CAAC;IACF,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;IAC7E,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;IAE5E,2EAA2E;IAC3E,uEAAuE;IACvE,6EAA6E;IAC7E,oCAAoC;IACpC,MAAM,IAAI,GAAG,MAAM,CAAoB,IAAI,CAAC,CAAC;IAE7C,MAAM,OAAO,GAAG,WAAW,CACzB,CAAC,KAAiB,EAAE,SAA8B,EAAE,EAAE;QACpD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;QAC5B,IAAI,MAAM,KAAK,IAAI,IAAI,OAAO,KAAK,SAAS;YAAE,OAAO;QACrD,OAAO,CAAC;YACN,EAAE,EAAE,KAAK,CAAC,CAAC;YACX,IAAI,EAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;YACxC,MAAM;YACN,SAAS;SACV,CAAC,CAAC;IACL,CAAC,EACD,CAAC,OAAO,EAAE,OAAO,CAAC,CACnB,CAAC;IAEF,MAAM,IAAI,GAAG,YAAY,CAAC;QACxB,MAAM;QACN,MAAM;QACN,MAAM;QACN,IAAI;QACJ,MAAM;QACN,QAAQ;QACR,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;KACvD,CAAC,CAAC;IAEH,eAAe,CAAC,GAAG,EAAE;QACnB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,OAAO,IAAI,CAAC;AACd,CAAC"}
package/lib/mass.d.ts ADDED
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Displaying mass spectra: the chart, the peak table and the whole editor.
3
+ *
4
+ * A door of its own, and not part of `react-cheminfo/core` or
5
+ * `react-cheminfo/ui`, because reading a spectrum drags the formats it may
6
+ * arrive in — `jcampconverter` and `xy-parser` for the files, `ms-spectrum` and
7
+ * `ml-gsd` for the peak picking, `convert-to-jcamp` for writing them back out.
8
+ * A site with no spectra to look at installs none of it.
9
+ *
10
+ * The infrared viewer, `react-cheminfo/ir`, is its sibling: the same shell, the
11
+ * same three buckets of state, the same chart underneath. Neither imports the
12
+ * other.
13
+ */
14
+ export * from './mass/core/index.ts';
15
+ export * from './mass/ui/index.ts';
16
+ //# sourceMappingURL=mass.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mass.d.ts","sourceRoot":"","sources":["../src/mass.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC"}
package/lib/mass.js ADDED
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Displaying mass spectra: the chart, the peak table and the whole editor.
3
+ *
4
+ * A door of its own, and not part of `react-cheminfo/core` or
5
+ * `react-cheminfo/ui`, because reading a spectrum drags the formats it may
6
+ * arrive in — `jcampconverter` and `xy-parser` for the files, `ms-spectrum` and
7
+ * `ml-gsd` for the peak picking, `convert-to-jcamp` for writing them back out.
8
+ * A site with no spectra to look at installs none of it.
9
+ *
10
+ * The infrared viewer, `react-cheminfo/ir`, is its sibling: the same shell, the
11
+ * same three buckets of state, the same chart underneath. Neither imports the
12
+ * other.
13
+ */
14
+ export * from "./mass/core/index.js";
15
+ export * from "./mass/ui/index.js";
16
+ //# sourceMappingURL=mass.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mass.js","sourceRoot":"","sources":["../src/mass.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"PanelRail.d.ts","sourceRoot":"","sources":["../../../src/panel/ui/PanelRail.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAChE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC;;;;;;GAMG;AACH,MAAM,WAAW,SAAS,CAAC,GAAG,SAAS,MAAM,GAAG,MAAM;IACpD,8DAA8D;IAC9D,EAAE,EAAE,GAAG,CAAC;IACR,yCAAyC;IACzC,IAAI,EAAE,QAAQ,GAAG,YAAY,CAAC;IAC9B,8BAA8B;IAC9B,KAAK,EAAE,MAAM,CAAC;CACf;AAED,8BAA8B;AAC9B,MAAM,WAAW,cAAc,CAAC,GAAG,SAAS,MAAM,GAAG,MAAM;IACzD,uDAAuD;IACvD,MAAM,EAAE,aAAa,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;IACtC,8BAA8B;IAC9B,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,qDAAqD;IACrD,QAAQ,EAAE,CAAC,EAAE,EAAE,GAAG,KAAK,IAAI,CAAC;CAC7B;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,GAAG,SAAS,MAAM,EAC1C,KAAK,EAAE,cAAc,CAAC,GAAG,CAAC,GACzB,SAAS,CAoBX"}
1
+ {"version":3,"file":"PanelRail.d.ts","sourceRoot":"","sources":["../../../src/panel/ui/PanelRail.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAChE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC;;;;;;GAMG;AACH,MAAM,WAAW,SAAS,CAAC,GAAG,SAAS,MAAM,GAAG,MAAM;IACpD,8DAA8D;IAC9D,EAAE,EAAE,GAAG,CAAC;IACR,yCAAyC;IACzC,IAAI,EAAE,QAAQ,GAAG,YAAY,CAAC;IAC9B,8BAA8B;IAC9B,KAAK,EAAE,MAAM,CAAC;CACf;AAED,8BAA8B;AAC9B,MAAM,WAAW,cAAc,CAAC,GAAG,SAAS,MAAM,GAAG,MAAM;IACzD,uDAAuD;IACvD,MAAM,EAAE,aAAa,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;IACtC,8BAA8B;IAC9B,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,qDAAqD;IACrD,QAAQ,EAAE,CAAC,EAAE,EAAE,GAAG,KAAK,IAAI,CAAC;CAC7B;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,GAAG,SAAS,MAAM,EAC1C,KAAK,EAAE,cAAc,CAAC,GAAG,CAAC,GACzB,SAAS,CAwBX"}
@@ -7,6 +7,11 @@ import { ActivityBar } from 'react-science/ui';
7
7
  */
8
8
  export function PanelRail(props) {
9
9
  const { panels, openIds, onToggle } = props;
10
- return (_jsx(ActivityBar, { children: panels.map((panel) => (_jsx(ActivityBar.Item, { id: panel.id, icon: panel.icon, tooltip: panel.title, "aria-label": panel.title, active: openIds.includes(panel.id), onClick: () => onToggle(panel.id) }, panel.id))) }));
10
+ return (_jsx(ActivityBar, { children: panels.map((panel) => (_jsx(ActivityBar.Item
11
+ // The panel id goes on a data attribute rather than on `id`: it is
12
+ // unique within one rail, not on the page, and a page can hold two —
13
+ // AGA2S hands the mass viewer the glycan editor's own panels, so both
14
+ // rails carry `fragments`.
15
+ , { "data-panel-id": panel.id, icon: panel.icon, tooltip: panel.title, "aria-label": panel.title, active: openIds.includes(panel.id), onClick: () => onToggle(panel.id) }, panel.id))) }));
11
16
  }
12
17
  //# sourceMappingURL=PanelRail.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PanelRail.js","sourceRoot":"","sources":["../../../src/panel/ui/PanelRail.tsx"],"names":[],"mappings":";AAWA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AA4B/C;;;;GAIG;AACH,MAAM,UAAU,SAAS,CACvB,KAA0B;IAE1B,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;IAE5C,OAAO,CACL,KAAC,WAAW,cACT,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CACrB,KAAC,WAAW,CAAC,IAAI,IAEf,EAAE,EAAE,KAAK,CAAC,EAAE,EACZ,IAAI,EAAE,KAAK,CAAC,IAAI,EAChB,OAAO,EAAE,KAAK,CAAC,KAAK,gBAGR,KAAK,CAAC,KAAK,EACvB,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,EAClC,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,IAR5B,KAAK,CAAC,EAAE,CASb,CACH,CAAC,GACU,CACf,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"PanelRail.js","sourceRoot":"","sources":["../../../src/panel/ui/PanelRail.tsx"],"names":[],"mappings":";AAWA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AA4B/C;;;;GAIG;AACH,MAAM,UAAU,SAAS,CACvB,KAA0B;IAE1B,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;IAE5C,OAAO,CACL,KAAC,WAAW,cACT,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CACrB,KAAC,WAAW,CAAC,IAAI;QACf,mEAAmE;QACnE,qEAAqE;QACrE,sEAAsE;QACtE,2BAA2B;6BACZ,KAAK,CAAC,EAAE,EAEvB,IAAI,EAAE,KAAK,CAAC,IAAI,EAChB,OAAO,EAAE,KAAK,CAAC,KAAK,gBAGR,KAAK,CAAC,KAAK,EACvB,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,EAClC,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,IAP5B,KAAK,CAAC,EAAE,CAQb,CACH,CAAC,GACU,CACf,CAAC;AACJ,CAAC"}
@@ -4,8 +4,9 @@ import type { Options as SanitizeSchema } from 'rehype-sanitize';
4
4
  *
5
5
  * GitHub's schema, which already strips scripts, event handlers and every URL
6
6
  * that is not http, https or relative, plus what decks legitimately use beyond
7
- * it: figures, the class a site styles a block with, and frames. Which frame
8
- * may actually be drawn is decided by `isFamilyFrameSource` when it renders.
7
+ * it: figures, the class a site styles a block with, frames, and formulas
8
+ * written in MathML, which the browser draws natively. Which frame may actually
9
+ * be drawn is decided by `isFamilyFrameSource` when it renders.
9
10
  */
10
11
  export declare const SLIDE_SANITIZE_SCHEMA: SanitizeSchema;
11
12
  //# sourceMappingURL=slideSanitizeSchema.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"slideSanitizeSchema.d.ts","sourceRoot":"","sources":["../../../src/slides/ui/slideSanitizeSchema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAGjE;;;;;;;GAOG;AACH,eAAO,MAAM,qBAAqB,EAAE,cAiBnC,CAAC"}
1
+ {"version":3,"file":"slideSanitizeSchema.d.ts","sourceRoot":"","sources":["../../../src/slides/ui/slideSanitizeSchema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAuEjE;;;;;;;;GAQG;AACH,eAAO,MAAM,qBAAqB,EAAE,cAmBnC,CAAC"}
@@ -1,11 +1,77 @@
1
1
  import { defaultSchema } from 'rehype-sanitize';
2
+ /**
3
+ * The MathML Core elements a formula is written with. `annotation-xml`, which
4
+ * may carry HTML, and the legacy `maction` are left out.
5
+ */
6
+ const MATHML_ELEMENTS = [
7
+ 'math',
8
+ 'merror',
9
+ 'mfrac',
10
+ 'mi',
11
+ 'mmultiscripts',
12
+ 'mn',
13
+ 'mo',
14
+ 'mover',
15
+ 'mpadded',
16
+ 'mphantom',
17
+ 'mprescripts',
18
+ 'mroot',
19
+ 'mrow',
20
+ 'ms',
21
+ 'mspace',
22
+ 'msqrt',
23
+ 'mstyle',
24
+ 'msub',
25
+ 'msubsup',
26
+ 'msup',
27
+ 'mtable',
28
+ 'mtd',
29
+ 'mtext',
30
+ 'mtr',
31
+ 'munder',
32
+ 'munderover',
33
+ 'semantics',
34
+ 'annotation',
35
+ ];
36
+ /**
37
+ * What every MathML element may carry, colours aside: a formula takes the
38
+ * slide's ink, as everything else on it does.
39
+ */
40
+ const MATHML_GLOBAL = ['dir', 'displaystyle', 'mathvariant', 'scriptlevel'];
41
+ /** The attributes particular to one MathML element, by hast property name. */
42
+ const MATHML_ATTRIBUTES = {
43
+ math: [...MATHML_GLOBAL, 'display', 'alttext'],
44
+ mo: [
45
+ ...MATHML_GLOBAL,
46
+ 'form',
47
+ 'fence',
48
+ 'separator',
49
+ 'lspace',
50
+ 'rspace',
51
+ 'stretchy',
52
+ 'symmetric',
53
+ 'maxsize',
54
+ 'minsize',
55
+ 'largeop',
56
+ 'movablelimits',
57
+ ],
58
+ mfrac: [...MATHML_GLOBAL, 'linethickness'],
59
+ mspace: [...MATHML_GLOBAL, 'width', 'height', 'depth'],
60
+ mpadded: [...MATHML_GLOBAL, 'width', 'height', 'depth', 'lspace', 'voffset'],
61
+ mover: [...MATHML_GLOBAL, 'accent'],
62
+ munder: [...MATHML_GLOBAL, 'accentunder'],
63
+ munderover: [...MATHML_GLOBAL, 'accent', 'accentunder'],
64
+ mtd: [...MATHML_GLOBAL, 'columnspan', 'rowSpan'],
65
+ annotation: ['encoding'],
66
+ };
2
67
  /**
3
68
  * What survives of the raw HTML a deck writes.
4
69
  *
5
70
  * GitHub's schema, which already strips scripts, event handlers and every URL
6
71
  * that is not http, https or relative, plus what decks legitimately use beyond
7
- * it: figures, the class a site styles a block with, and frames. Which frame
8
- * may actually be drawn is decided by `isFamilyFrameSource` when it renders.
72
+ * it: figures, the class a site styles a block with, frames, and formulas
73
+ * written in MathML, which the browser draws natively. Which frame may actually
74
+ * be drawn is decided by `isFamilyFrameSource` when it renders.
9
75
  */
10
76
  export const SLIDE_SANITIZE_SCHEMA = {
11
77
  ...defaultSchema,
@@ -18,11 +84,25 @@ export const SLIDE_SANITIZE_SCHEMA = {
18
84
  'mark',
19
85
  'small',
20
86
  'u',
87
+ ...MATHML_ELEMENTS,
21
88
  ],
22
89
  attributes: {
23
90
  ...defaultSchema.attributes,
91
+ ...mathmlAttributes(),
24
92
  iframe: ['src', 'allowFullScreen'],
25
93
  '*': [...(defaultSchema.attributes?.['*'] ?? []), 'className'],
26
94
  },
27
95
  };
96
+ /**
97
+ * The attributes of every MathML element, those of its own and the global
98
+ * ones.
99
+ * @returns The attribute lists, by element.
100
+ */
101
+ function mathmlAttributes() {
102
+ const attributes = {};
103
+ for (const element of MATHML_ELEMENTS) {
104
+ attributes[element] = MATHML_ATTRIBUTES[element] ?? MATHML_GLOBAL;
105
+ }
106
+ return attributes;
107
+ }
28
108
  //# sourceMappingURL=slideSanitizeSchema.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"slideSanitizeSchema.js","sourceRoot":"","sources":["../../../src/slides/ui/slideSanitizeSchema.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAmB;IACnD,GAAG,aAAa;IAChB,QAAQ,EAAE;QACR,GAAG,CAAC,aAAa,CAAC,QAAQ,IAAI,EAAE,CAAC;QACjC,SAAS;QACT,YAAY;QACZ,QAAQ;QACR,QAAQ;QACR,MAAM;QACN,OAAO;QACP,GAAG;KACJ;IACD,UAAU,EAAE;QACV,GAAG,aAAa,CAAC,UAAU;QAC3B,MAAM,EAAE,CAAC,KAAK,EAAE,iBAAiB,CAAC;QAClC,GAAG,EAAE,CAAC,GAAG,CAAC,aAAa,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,WAAW,CAAC;KAC/D;CACF,CAAC"}
1
+ {"version":3,"file":"slideSanitizeSchema.js","sourceRoot":"","sources":["../../../src/slides/ui/slideSanitizeSchema.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD;;;GAGG;AACH,MAAM,eAAe,GAAG;IACtB,MAAM;IACN,QAAQ;IACR,OAAO;IACP,IAAI;IACJ,eAAe;IACf,IAAI;IACJ,IAAI;IACJ,OAAO;IACP,SAAS;IACT,UAAU;IACV,aAAa;IACb,OAAO;IACP,MAAM;IACN,IAAI;IACJ,QAAQ;IACR,OAAO;IACP,QAAQ;IACR,MAAM;IACN,SAAS;IACT,MAAM;IACN,QAAQ;IACR,KAAK;IACL,OAAO;IACP,KAAK;IACL,QAAQ;IACR,YAAY;IACZ,WAAW;IACX,YAAY;CACb,CAAC;AAEF;;;GAGG;AACH,MAAM,aAAa,GAAG,CAAC,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC;AAE5E,8EAA8E;AAC9E,MAAM,iBAAiB,GAA6B;IAClD,IAAI,EAAE,CAAC,GAAG,aAAa,EAAE,SAAS,EAAE,SAAS,CAAC;IAC9C,EAAE,EAAE;QACF,GAAG,aAAa;QAChB,MAAM;QACN,OAAO;QACP,WAAW;QACX,QAAQ;QACR,QAAQ;QACR,UAAU;QACV,WAAW;QACX,SAAS;QACT,SAAS;QACT,SAAS;QACT,eAAe;KAChB;IACD,KAAK,EAAE,CAAC,GAAG,aAAa,EAAE,eAAe,CAAC;IAC1C,MAAM,EAAE,CAAC,GAAG,aAAa,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC;IACtD,OAAO,EAAE,CAAC,GAAG,aAAa,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC;IAC5E,KAAK,EAAE,CAAC,GAAG,aAAa,EAAE,QAAQ,CAAC;IACnC,MAAM,EAAE,CAAC,GAAG,aAAa,EAAE,aAAa,CAAC;IACzC,UAAU,EAAE,CAAC,GAAG,aAAa,EAAE,QAAQ,EAAE,aAAa,CAAC;IACvD,GAAG,EAAE,CAAC,GAAG,aAAa,EAAE,YAAY,EAAE,SAAS,CAAC;IAChD,UAAU,EAAE,CAAC,UAAU,CAAC;CACzB,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAmB;IACnD,GAAG,aAAa;IAChB,QAAQ,EAAE;QACR,GAAG,CAAC,aAAa,CAAC,QAAQ,IAAI,EAAE,CAAC;QACjC,SAAS;QACT,YAAY;QACZ,QAAQ;QACR,QAAQ;QACR,MAAM;QACN,OAAO;QACP,GAAG;QACH,GAAG,eAAe;KACnB;IACD,UAAU,EAAE;QACV,GAAG,aAAa,CAAC,UAAU;QAC3B,GAAG,gBAAgB,EAAE;QACrB,MAAM,EAAE,CAAC,KAAK,EAAE,iBAAiB,CAAC;QAClC,GAAG,EAAE,CAAC,GAAG,CAAC,aAAa,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,WAAW,CAAC;KAC/D;CACF,CAAC;AAEF;;;;GAIG;AACH,SAAS,gBAAgB;IACvB,MAAM,UAAU,GAA6B,EAAE,CAAC;IAChD,KAAK,MAAM,OAAO,IAAI,eAAe,EAAE,CAAC;QACtC,UAAU,CAAC,OAAO,CAAC,GAAG,iBAAiB,CAAC,OAAO,CAAC,IAAI,aAAa,CAAC;IACpE,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-cheminfo",
3
- "version": "0.69.0",
3
+ "version": "0.71.0",
4
4
  "license": "MIT",
5
5
  "description": "React components, hooks and framework-free helpers shared by the cheminfo sites: site chrome, citations, sharing, routing, pedagogy, charts, and the structure, orbital and 3D molecule viewers",
6
6
  "author": "Luc Patiny",
@@ -23,6 +23,7 @@
23
23
  "./host": "./lib/host.js",
24
24
  "./host-testing": "./lib/host-testing.js",
25
25
  "./ir": "./lib/ir.js",
26
+ "./mass": "./lib/mass.js",
26
27
  "./molecule3d": "./lib/molecule3d.js",
27
28
  "./molstar/*": "./lib/molstar/*/index.js",
28
29
  "./orbital": "./lib/orbital.js",
@@ -79,16 +80,20 @@
79
80
  "convert-to-jcamp": "^7.0.1",
80
81
  "intl-messageformat": "^11.2.15",
81
82
  "ir-spectrum": "^4.2.0",
83
+ "jcampconverter": "^12.5.11",
82
84
  "leven": "^4.1.0",
83
85
  "mf-parser": "^3.9.3",
86
+ "ml-peak-shape-generator": "^5.6.0",
84
87
  "ml-spectra-processing": "^14.35.1",
85
88
  "ml-xsadd": "^3.0.1",
89
+ "ms-spectrum": "^3.12.1",
86
90
  "openchemlib": "^9.25.0",
87
91
  "react-markdown": "^10.1.0",
88
92
  "react-mf": "^3.1.1",
89
93
  "rehype-raw": "^7.0.0",
90
94
  "rehype-sanitize": "^6.0.0",
91
95
  "semver": "^7.8.5",
96
+ "xy-parser": "^6.0.1",
92
97
  "yaml": "^2.9.1"
93
98
  },
94
99
  "devDependencies": {
@@ -42,4 +42,11 @@ export const PROVIDERS = [
42
42
  href: 'https://www.epfl.ch',
43
43
  location: 'Lausanne, Switzerland',
44
44
  },
45
+ {
46
+ id: 'unil-esc',
47
+ name: 'ESC',
48
+ fullName: 'École des sciences criminelles, Université de Lausanne',
49
+ href: 'https://www.unil.ch/esc/',
50
+ location: 'Lausanne, Switzerland',
51
+ },
45
52
  ] as const satisfies readonly ProviderEntry[];
@@ -88,11 +88,30 @@ function ProviderLogo(props: { provider: ProviderEntry }): ReactElement {
88
88
  switch (provider.id) {
89
89
  case 'epfl':
90
90
  return <EpflLogo label={label} />;
91
+ case 'unil-esc':
92
+ return <UnilEscLockup label={label} />;
91
93
  default:
92
94
  return <span>{provider.name}</span>;
93
95
  }
94
96
  }
95
97
 
98
+ // The school's name set in type beside its university's, in the black the
99
+ // university writes its name in: no drawing of its emblem is kept here, and a
100
+ // name nobody can misread credits it better than a guess at one.
101
+ function UnilEscLockup(props: { label: string }): ReactElement {
102
+ return (
103
+ <span role="img" aria-label={props.label} style={UNIL_LOCKUP_STYLE}>
104
+ <span style={UNIL_NAME_STYLE}>UNIL</span>
105
+ <span style={UNIL_RULE_STYLE} />
106
+ <span style={UNIL_SCHOOL_STYLE}>
107
+ École des
108
+ <br />
109
+ sciences criminelles
110
+ </span>
111
+ </span>
112
+ );
113
+ }
114
+
96
115
  function EpflLogo(props: { label: string }): ReactElement {
97
116
  return (
98
117
  <svg
@@ -173,3 +192,33 @@ const ROLES_STYLE = {
173
192
  paddingLeft: 20,
174
193
  borderTop: '1px solid var(--border)',
175
194
  } as const satisfies CSSProperties;
195
+
196
+ const UNIL_LOCKUP_STYLE = {
197
+ display: 'flex',
198
+ alignItems: 'center',
199
+ gap: 8,
200
+ height: 31,
201
+ // The institution's own colour, not a family token: the tile is white on
202
+ // every theme.
203
+ color: 'black',
204
+ } as const satisfies CSSProperties;
205
+
206
+ const UNIL_NAME_STYLE = {
207
+ fontSize: 24,
208
+ fontWeight: 800,
209
+ letterSpacing: '0.02em',
210
+ lineHeight: 1,
211
+ } as const satisfies CSSProperties;
212
+
213
+ const UNIL_RULE_STYLE = {
214
+ alignSelf: 'stretch',
215
+ width: 1,
216
+ background: 'black',
217
+ } as const satisfies CSSProperties;
218
+
219
+ const UNIL_SCHOOL_STYLE = {
220
+ fontSize: 10.5,
221
+ fontWeight: 600,
222
+ lineHeight: 1.15,
223
+ whiteSpace: 'nowrap',
224
+ } as const satisfies CSSProperties;
@@ -16,7 +16,7 @@
16
16
  */
17
17
 
18
18
  import type { RefObject } from 'react';
19
- import { useEffect, useLayoutEffect, useRef, useState } from 'react';
19
+ import { useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react';
20
20
 
21
21
  import type { PlotRect } from '../core/chartGeometry.ts';
22
22
  import type { ChartPoint } from '../core/svgPoint.ts';
@@ -42,7 +42,9 @@ export interface ChartPointerOptions<TReadout> {
42
42
  /**
43
43
  * What the chart reads at a point. Called on every move the pointer makes
44
44
  * inside the plot, and read live rather than closed over, so it may capture
45
- * the scales as they are currently zoomed.
45
+ * the scales as they are currently zoomed — and called again at the held
46
+ * position whenever it changes, which is how a zoom made without moving the
47
+ * pointer is read under it.
46
48
  */
47
49
  read: (point: ChartPoint) => TReadout;
48
50
  /**
@@ -83,6 +85,12 @@ export interface ChartPointerOptions<TReadout> {
83
85
  * is under the pointer" **after** the row's "this trace is being read", and
84
86
  * wipes it. Heard as `pointerout`, the report lands first and the row has the
85
87
  * last word. The containment test is what `pointerleave` was giving for free.
88
+ *
89
+ * What is returned is read again at render whenever `read` changes, because a
90
+ * zoom by the wheel, a key or the end of a drag changes the scales without
91
+ * moving the pointer, and a crosshair still quoting the window before it would
92
+ * name a mass the line it is drawn on no longer stands at. `onReadout` is told
93
+ * on the next move, as it always is.
86
94
  * @param options - The chart, and how to read a point on it.
87
95
  * @returns Where the pointer is and what it reads, both `null` while it is
88
96
  * anywhere but over the plot.
@@ -90,7 +98,7 @@ export interface ChartPointerOptions<TReadout> {
90
98
  export function useChartPointer<TReadout>(
91
99
  options: ChartPointerOptions<TReadout>,
92
100
  ): ChartPointer<TReadout> {
93
- const { svgRef } = options;
101
+ const { svgRef, read } = options;
94
102
  const [pointer, setPointer] = useState<ChartPointer<TReadout>>(POINTER_AWAY);
95
103
  const latest = useRef(options);
96
104
  const reported = useRef<TReadout | null>(null);
@@ -133,7 +141,13 @@ export function useChartPointer<TReadout>(
133
141
  };
134
142
  }, [svgRef]);
135
143
 
136
- return pointer;
144
+ return useMemo(
145
+ () =>
146
+ pointer.position === null
147
+ ? pointer
148
+ : { position: pointer.position, readout: read(pointer.position) },
149
+ [pointer, read],
150
+ );
137
151
  }
138
152
 
139
153
  /**
@@ -187,6 +187,42 @@ export const CREDITS = [
187
187
  'reads the SPC files of Thermo Galactic GRAMS, Shimadzu and PerkinElmer.',
188
188
  license: 'MIT',
189
189
  },
190
+ {
191
+ id: 'ms-spectrum',
192
+ name: 'ms-spectrum',
193
+ href: 'https://github.com/cheminfo/mass-tools/tree/main/packages/ms-spectrum',
194
+ description:
195
+ 'tells a profile from a peak table, picks the peaks and establishes their charges.',
196
+ license: 'MIT',
197
+ },
198
+ {
199
+ id: 'ml-gsd',
200
+ name: 'ml-gsd',
201
+ href: 'https://github.com/mljs/global-spectral-deconvolution',
202
+ description: 'finds the peaks of a continuous spectrum, and their widths.',
203
+ license: 'MIT',
204
+ },
205
+ {
206
+ id: 'jcampconverter',
207
+ name: 'jcampconverter',
208
+ href: 'https://www.npmjs.com/package/jcampconverter',
209
+ description: 'reads JCAMP-DX files.',
210
+ license: 'CC-BY-NC-SA-4.0',
211
+ },
212
+ {
213
+ id: 'xy-parser',
214
+ name: 'xy-parser',
215
+ href: 'https://github.com/cheminfo/xy-parser',
216
+ description: 'reads two columns of numbers out of any text file.',
217
+ license: 'MIT',
218
+ },
219
+ {
220
+ id: 'convert-to-jcamp',
221
+ name: 'convert-to-jcamp',
222
+ href: 'https://github.com/cheminfo/convert-to-jcamp',
223
+ description: 'writes spectra back out as JCAMP-DX.',
224
+ license: 'MIT',
225
+ },
190
226
  {
191
227
  id: 'occ',
192
228
  name: 'OCC',
@@ -234,6 +270,16 @@ export const CREDITS = [
234
270
  description: 'the 3D viewer, its representations and its surfaces.',
235
271
  license: 'MIT',
236
272
  },
273
+ {
274
+ // The viewer is MIT; the core and plugins that read and process the
275
+ // spectra (@zakodium/nmrium-core, -core-plugins) are CC-BY-NC-SA-4.0.
276
+ id: 'nmrium',
277
+ name: 'NMRium',
278
+ href: 'https://www.nmrium.org/',
279
+ description:
280
+ 'displays and processes the NMR spectra, read from their original files.',
281
+ license: 'MIT AND CC-BY-NC-SA-4.0',
282
+ },
237
283
  {
238
284
  id: 'blueprint',
239
285
  name: 'Blueprint',
@@ -384,6 +430,13 @@ export const CREDITS = [
384
430
  'the name of every compound in every language, and its article in each Wikipedia.',
385
431
  license: 'CC0-1.0',
386
432
  },
433
+ {
434
+ id: 'pubchem',
435
+ name: 'PubChem',
436
+ href: 'https://pubchem.ncbi.nlm.nih.gov/',
437
+ description:
438
+ 'the identifier, the names and the synonyms each compound is linked to.',
439
+ },
387
440
  {
388
441
  id: 'country-flag-icons',
389
442
  name: 'country-flag-icons',
@@ -1,4 +1,7 @@
1
+ import { viewBoxAttribute } from '../../chart/core/viewTransform.ts';
2
+
1
3
  import { cssTokenNames, resolveCssTokens } from './cssTokens.ts';
4
+ import type { SvgBox } from './svgBounds.ts';
2
5
 
3
6
  /**
4
7
  * One drawing, serialized with every token it names written out.
@@ -6,11 +9,25 @@ import { cssTokenNames, resolveCssTokens } from './cssTokens.ts';
6
9
  * The copy is taken first and read from the original, because the values are a
7
10
  * property of where the figure sits on the page: a detached clone inherits
8
11
  * nothing and would resolve every token to an empty string.
12
+ *
13
+ * Given a crop, the copy shows that rectangle of the drawing rather than its
14
+ * window on the page, at one pixel per drawing unit — so a canvas left zoomed
15
+ * in is saved at the same size as one left zoomed out.
9
16
  * @param drawing - The drawing, as it sits on the page.
17
+ * @param crop - The rectangle to show, in drawing units. Defaults to `null`,
18
+ * the drawing as it is on screen.
10
19
  * @returns Its markup.
11
20
  */
12
- export function drawingMarkup(drawing: SVGSVGElement): string {
21
+ export function drawingMarkup(
22
+ drawing: SVGSVGElement,
23
+ crop: SvgBox | null = null,
24
+ ): string {
13
25
  const clone = drawing.cloneNode(true) as SVGSVGElement;
26
+ if (crop !== null) {
27
+ clone.setAttribute('viewBox', viewBoxAttribute(crop));
28
+ clone.setAttribute('width', String(Math.round(crop.width)));
29
+ clone.setAttribute('height', String(Math.round(crop.height)));
30
+ }
14
31
  const markup = new XMLSerializer().serializeToString(clone);
15
32
  return resolveCssTokens(markup, tokenValues(drawing, cssTokenNames(markup)));
16
33
  }