react-cheminfo 0.28.0 → 0.29.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 (691) hide show
  1. package/README.md +38 -25
  2. package/lib/chart/core/axisLabels.d.ts +82 -0
  3. package/lib/chart/core/axisLabels.d.ts.map +1 -0
  4. package/lib/chart/core/axisLabels.js +111 -0
  5. package/lib/chart/core/axisLabels.js.map +1 -0
  6. package/lib/chart/core/boxLayout.d.ts +53 -0
  7. package/lib/chart/core/boxLayout.d.ts.map +1 -0
  8. package/lib/chart/core/boxLayout.js +112 -0
  9. package/lib/chart/core/boxLayout.js.map +1 -0
  10. package/lib/chart/core/chartAxisScale.d.ts +23 -2
  11. package/lib/chart/core/chartAxisScale.d.ts.map +1 -1
  12. package/lib/chart/core/chartAxisScale.js +64 -13
  13. package/lib/chart/core/chartAxisScale.js.map +1 -1
  14. package/lib/chart/core/chartDomain.d.ts +160 -0
  15. package/lib/chart/core/chartDomain.d.ts.map +1 -0
  16. package/lib/chart/core/chartDomain.js +46 -0
  17. package/lib/chart/core/chartDomain.js.map +1 -0
  18. package/lib/chart/core/chartGeometry.d.ts +131 -0
  19. package/lib/chart/core/chartGeometry.d.ts.map +1 -0
  20. package/lib/chart/core/chartGeometry.js +101 -0
  21. package/lib/chart/core/chartGeometry.js.map +1 -0
  22. package/lib/chart/core/chartPane.d.ts +11 -0
  23. package/lib/chart/core/chartPane.d.ts.map +1 -0
  24. package/lib/chart/core/chartPane.js +11 -0
  25. package/lib/chart/core/chartPane.js.map +1 -0
  26. package/lib/chart/core/chartScale.d.ts +4 -1
  27. package/lib/chart/core/chartScale.d.ts.map +1 -1
  28. package/lib/chart/core/chartScale.js +8 -4
  29. package/lib/chart/core/chartScale.js.map +1 -1
  30. package/lib/chart/core/chartTheme.d.ts +156 -0
  31. package/lib/chart/core/chartTheme.d.ts.map +1 -0
  32. package/lib/chart/core/chartTheme.js +156 -0
  33. package/lib/chart/core/chartTheme.js.map +1 -0
  34. package/lib/chart/core/chartViewport.d.ts +32 -5
  35. package/lib/chart/core/chartViewport.d.ts.map +1 -1
  36. package/lib/chart/core/chartViewport.js +40 -11
  37. package/lib/chart/core/chartViewport.js.map +1 -1
  38. package/lib/chart/core/guidePlacement.d.ts +52 -0
  39. package/lib/chart/core/guidePlacement.d.ts.map +1 -0
  40. package/lib/chart/core/guidePlacement.js +52 -0
  41. package/lib/chart/core/guidePlacement.js.map +1 -0
  42. package/lib/chart/core/index.d.ts +29 -2
  43. package/lib/chart/core/index.d.ts.map +1 -1
  44. package/lib/chart/core/index.js +19 -2
  45. package/lib/chart/core/index.js.map +1 -1
  46. package/lib/chart/core/labelStack.d.ts +27 -0
  47. package/lib/chart/core/labelStack.d.ts.map +1 -0
  48. package/lib/chart/core/labelStack.js +62 -0
  49. package/lib/chart/core/labelStack.js.map +1 -0
  50. package/lib/chart/core/legendBox.d.ts +152 -0
  51. package/lib/chart/core/legendBox.d.ts.map +1 -0
  52. package/lib/chart/core/legendBox.js +169 -0
  53. package/lib/chart/core/legendBox.js.map +1 -0
  54. package/lib/chart/core/selectionGeometry.d.ts +45 -0
  55. package/lib/chart/core/selectionGeometry.d.ts.map +1 -0
  56. package/lib/chart/core/selectionGeometry.js +49 -0
  57. package/lib/chart/core/selectionGeometry.js.map +1 -0
  58. package/lib/chart/core/spectrumColor.d.ts +80 -0
  59. package/lib/chart/core/spectrumColor.d.ts.map +1 -0
  60. package/lib/chart/core/spectrumColor.js +120 -0
  61. package/lib/chart/core/spectrumColor.js.map +1 -0
  62. package/lib/chart/core/stackCapacity.d.ts +136 -0
  63. package/lib/chart/core/stackCapacity.d.ts.map +1 -0
  64. package/lib/chart/core/stackCapacity.js +153 -0
  65. package/lib/chart/core/stackCapacity.js.map +1 -0
  66. package/lib/chart/core/svgPoint.d.ts +62 -0
  67. package/lib/chart/core/svgPoint.d.ts.map +1 -0
  68. package/lib/chart/core/svgPoint.js +43 -0
  69. package/lib/chart/core/svgPoint.js.map +1 -0
  70. package/lib/chart/core/tracePath.d.ts +94 -0
  71. package/lib/chart/core/tracePath.d.ts.map +1 -0
  72. package/lib/chart/core/tracePath.js +191 -0
  73. package/lib/chart/core/tracePath.js.map +1 -0
  74. package/lib/chart/core/trackerReadout.d.ts +55 -0
  75. package/lib/chart/core/trackerReadout.d.ts.map +1 -0
  76. package/lib/chart/core/trackerReadout.js +53 -0
  77. package/lib/chart/core/trackerReadout.js.map +1 -0
  78. package/lib/chart/core/viewTransform.d.ts +167 -0
  79. package/lib/chart/core/viewTransform.d.ts.map +1 -0
  80. package/lib/chart/core/viewTransform.js +188 -0
  81. package/lib/chart/core/viewTransform.js.map +1 -0
  82. package/lib/chart/core/zoomDomain.d.ts +127 -0
  83. package/lib/chart/core/zoomDomain.d.ts.map +1 -0
  84. package/lib/chart/core/zoomDomain.js +175 -0
  85. package/lib/chart/core/zoomDomain.js.map +1 -0
  86. package/lib/chart/ui/Axes.d.ts +104 -0
  87. package/lib/chart/ui/Axes.d.ts.map +1 -0
  88. package/lib/chart/ui/Axes.js +155 -0
  89. package/lib/chart/ui/Axes.js.map +1 -0
  90. package/lib/chart/ui/AxisGuide.d.ts +60 -0
  91. package/lib/chart/ui/AxisGuide.d.ts.map +1 -0
  92. package/lib/chart/ui/AxisGuide.js +111 -0
  93. package/lib/chart/ui/AxisGuide.js.map +1 -0
  94. package/lib/chart/ui/ChartStack.d.ts +81 -0
  95. package/lib/chart/ui/ChartStack.d.ts.map +1 -0
  96. package/lib/chart/ui/ChartStack.js +42 -0
  97. package/lib/chart/ui/ChartStack.js.map +1 -0
  98. package/lib/chart/ui/ChartTracker.d.ts +36 -0
  99. package/lib/chart/ui/ChartTracker.d.ts.map +1 -0
  100. package/lib/chart/ui/ChartTracker.js +27 -0
  101. package/lib/chart/ui/ChartTracker.js.map +1 -0
  102. package/lib/chart/ui/PlotCaption.d.ts +44 -0
  103. package/lib/chart/ui/PlotCaption.d.ts.map +1 -0
  104. package/lib/chart/ui/PlotCaption.js +68 -0
  105. package/lib/chart/ui/PlotCaption.js.map +1 -0
  106. package/lib/chart/ui/SelectionRect.d.ts +27 -0
  107. package/lib/chart/ui/SelectionRect.d.ts.map +1 -0
  108. package/lib/chart/ui/SelectionRect.js +31 -0
  109. package/lib/chart/ui/SelectionRect.js.map +1 -0
  110. package/lib/chart/ui/TraceLegend.d.ts +99 -0
  111. package/lib/chart/ui/TraceLegend.d.ts.map +1 -0
  112. package/lib/chart/ui/TraceLegend.js +45 -0
  113. package/lib/chart/ui/TraceLegend.js.map +1 -0
  114. package/lib/chart/ui/chartGestures.d.ts +158 -0
  115. package/lib/chart/ui/chartGestures.d.ts.map +1 -0
  116. package/lib/chart/ui/chartGestures.js +145 -0
  117. package/lib/chart/ui/chartGestures.js.map +1 -0
  118. package/lib/chart/ui/chartStackLevel.d.ts +115 -0
  119. package/lib/chart/ui/chartStackLevel.d.ts.map +1 -0
  120. package/lib/chart/ui/chartStackLevel.js +96 -0
  121. package/lib/chart/ui/chartStackLevel.js.map +1 -0
  122. package/lib/chart/ui/chartSurface.d.ts +35 -0
  123. package/lib/chart/ui/chartSurface.d.ts.map +1 -0
  124. package/lib/chart/ui/chartSurface.js +58 -0
  125. package/lib/chart/ui/chartSurface.js.map +1 -0
  126. package/lib/chart/ui/index.d.ts +24 -0
  127. package/lib/chart/ui/index.d.ts.map +1 -1
  128. package/lib/chart/ui/index.js +13 -0
  129. package/lib/chart/ui/index.js.map +1 -1
  130. package/lib/chart/ui/useChartPointer.d.ts +124 -0
  131. package/lib/chart/ui/useChartPointer.d.ts.map +1 -0
  132. package/lib/chart/ui/useChartPointer.js +152 -0
  133. package/lib/chart/ui/useChartPointer.js.map +1 -0
  134. package/lib/chart/ui/useChartSize.d.ts +49 -0
  135. package/lib/chart/ui/useChartSize.d.ts.map +1 -0
  136. package/lib/chart/ui/useChartSize.js +91 -0
  137. package/lib/chart/ui/useChartSize.js.map +1 -0
  138. package/lib/chart/ui/useChartWindow.d.ts +147 -0
  139. package/lib/chart/ui/useChartWindow.d.ts.map +1 -0
  140. package/lib/chart/ui/useChartWindow.js +135 -0
  141. package/lib/chart/ui/useChartWindow.js.map +1 -0
  142. package/lib/chart/ui/useChartZoom.d.ts +88 -0
  143. package/lib/chart/ui/useChartZoom.d.ts.map +1 -0
  144. package/lib/chart/ui/useChartZoom.js +142 -0
  145. package/lib/chart/ui/useChartZoom.js.map +1 -0
  146. package/lib/chart/ui/useWheelListener.d.ts +30 -0
  147. package/lib/chart/ui/useWheelListener.d.ts.map +1 -0
  148. package/lib/chart/ui/useWheelListener.js +57 -0
  149. package/lib/chart/ui/useWheelListener.js.map +1 -0
  150. package/lib/clipboard/core/copyPng.d.ts +13 -0
  151. package/lib/clipboard/core/copyPng.d.ts.map +1 -0
  152. package/lib/clipboard/core/copyPng.js +19 -0
  153. package/lib/clipboard/core/copyPng.js.map +1 -0
  154. package/lib/clipboard/core/index.d.ts +1 -0
  155. package/lib/clipboard/core/index.d.ts.map +1 -1
  156. package/lib/clipboard/core/index.js +1 -0
  157. package/lib/clipboard/core/index.js.map +1 -1
  158. package/lib/core.d.ts +1 -0
  159. package/lib/core.d.ts.map +1 -1
  160. package/lib/core.js +1 -0
  161. package/lib/core.js.map +1 -1
  162. package/lib/download/core/exportStyles.d.ts +22 -0
  163. package/lib/download/core/exportStyles.d.ts.map +1 -0
  164. package/lib/download/core/exportStyles.js +19 -0
  165. package/lib/download/core/exportStyles.js.map +1 -0
  166. package/lib/download/core/imageResolution.d.ts +88 -0
  167. package/lib/download/core/imageResolution.d.ts.map +1 -0
  168. package/lib/download/core/imageResolution.js +77 -0
  169. package/lib/download/core/imageResolution.js.map +1 -0
  170. package/lib/download/core/index.d.ts +13 -0
  171. package/lib/download/core/index.d.ts.map +1 -1
  172. package/lib/download/core/index.js +8 -0
  173. package/lib/download/core/index.js.map +1 -1
  174. package/lib/download/core/pictureExport.d.ts +93 -0
  175. package/lib/download/core/pictureExport.d.ts.map +1 -0
  176. package/lib/download/core/pictureExport.js +116 -0
  177. package/lib/download/core/pictureExport.js.map +1 -0
  178. package/lib/download/core/stackedDrawing.d.ts +36 -0
  179. package/lib/download/core/stackedDrawing.d.ts.map +1 -0
  180. package/lib/download/core/stackedDrawing.js +98 -0
  181. package/lib/download/core/stackedDrawing.js.map +1 -0
  182. package/lib/download/core/svgBounds.d.ts +44 -0
  183. package/lib/download/core/svgBounds.d.ts.map +1 -0
  184. package/lib/download/core/svgBounds.js +69 -0
  185. package/lib/download/core/svgBounds.js.map +1 -0
  186. package/lib/download/core/svgNamespace.d.ts +9 -0
  187. package/lib/download/core/svgNamespace.d.ts.map +1 -0
  188. package/lib/download/core/svgNamespace.js +10 -0
  189. package/lib/download/core/svgNamespace.js.map +1 -0
  190. package/lib/download/core/svgToPng.d.ts +43 -0
  191. package/lib/download/core/svgToPng.d.ts.map +1 -0
  192. package/lib/download/core/svgToPng.js +79 -0
  193. package/lib/download/core/svgToPng.js.map +1 -0
  194. package/lib/download/core/svgToString.d.ts +45 -0
  195. package/lib/download/core/svgToString.d.ts.map +1 -0
  196. package/lib/download/core/svgToString.js +58 -0
  197. package/lib/download/core/svgToString.js.map +1 -0
  198. package/lib/download/ui/ExportDialogFrame.d.ts +46 -0
  199. package/lib/download/ui/ExportDialogFrame.d.ts.map +1 -0
  200. package/lib/download/ui/ExportDialogFrame.js +24 -0
  201. package/lib/download/ui/ExportDialogFrame.js.map +1 -0
  202. package/lib/download/ui/ExportImageDialog.d.ts +47 -0
  203. package/lib/download/ui/ExportImageDialog.d.ts.map +1 -0
  204. package/lib/download/ui/ExportImageDialog.js +25 -0
  205. package/lib/download/ui/ExportImageDialog.js.map +1 -0
  206. package/lib/download/ui/ExportNameField.d.ts +29 -0
  207. package/lib/download/ui/ExportNameField.d.ts.map +1 -0
  208. package/lib/download/ui/ExportNameField.js +99 -0
  209. package/lib/download/ui/ExportNameField.js.map +1 -0
  210. package/lib/download/ui/ExportPictureSection.d.ts +38 -0
  211. package/lib/download/ui/ExportPictureSection.d.ts.map +1 -0
  212. package/lib/download/ui/ExportPictureSection.js +48 -0
  213. package/lib/download/ui/ExportPictureSection.js.map +1 -0
  214. package/lib/download/ui/index.d.ts +10 -0
  215. package/lib/download/ui/index.d.ts.map +1 -1
  216. package/lib/download/ui/index.js +5 -0
  217. package/lib/download/ui/index.js.map +1 -1
  218. package/lib/download/ui/useDrawingBox.d.ts +23 -0
  219. package/lib/download/ui/useDrawingBox.d.ts.map +1 -0
  220. package/lib/download/ui/useDrawingBox.js +21 -0
  221. package/lib/download/ui/useDrawingBox.js.map +1 -0
  222. package/lib/error/core/describeSource.d.ts +17 -0
  223. package/lib/error/core/describeSource.d.ts.map +1 -0
  224. package/lib/error/core/describeSource.js +19 -0
  225. package/lib/error/core/describeSource.js.map +1 -0
  226. package/lib/error/core/index.d.ts +1 -0
  227. package/lib/error/core/index.d.ts.map +1 -1
  228. package/lib/error/core/index.js +1 -0
  229. package/lib/error/core/index.js.map +1 -1
  230. package/lib/help/ui/HelpBody.d.ts +10 -1
  231. package/lib/help/ui/HelpBody.d.ts.map +1 -1
  232. package/lib/help/ui/HelpBody.js +24 -1
  233. package/lib/help/ui/HelpBody.js.map +1 -1
  234. package/lib/help/ui/index.d.ts +1 -1
  235. package/lib/help/ui/index.d.ts.map +1 -1
  236. package/lib/help/ui/index.js.map +1 -1
  237. package/lib/ir/core/analysisSpectra.d.ts +46 -0
  238. package/lib/ir/core/analysisSpectra.d.ts.map +1 -0
  239. package/lib/ir/core/analysisSpectra.js +187 -0
  240. package/lib/ir/core/analysisSpectra.js.map +1 -0
  241. package/lib/ir/core/assignBands.d.ts +83 -0
  242. package/lib/ir/core/assignBands.d.ts.map +1 -0
  243. package/lib/ir/core/assignBands.js +83 -0
  244. package/lib/ir/core/assignBands.js.map +1 -0
  245. package/lib/ir/core/bandAssignments.d.ts +47 -0
  246. package/lib/ir/core/bandAssignments.d.ts.map +1 -0
  247. package/lib/ir/core/bandAssignments.js +305 -0
  248. package/lib/ir/core/bandAssignments.js.map +1 -0
  249. package/lib/ir/core/bandLabelPlan.d.ts +93 -0
  250. package/lib/ir/core/bandLabelPlan.d.ts.map +1 -0
  251. package/lib/ir/core/bandLabelPlan.js +104 -0
  252. package/lib/ir/core/bandLabelPlan.js.map +1 -0
  253. package/lib/ir/core/detectIrFormat.d.ts +23 -0
  254. package/lib/ir/core/detectIrFormat.d.ts.map +1 -0
  255. package/lib/ir/core/detectIrFormat.js +133 -0
  256. package/lib/ir/core/detectIrFormat.js.map +1 -0
  257. package/lib/ir/core/downloadSpectra.d.ts +26 -0
  258. package/lib/ir/core/downloadSpectra.d.ts.map +1 -0
  259. package/lib/ir/core/downloadSpectra.js +37 -0
  260. package/lib/ir/core/downloadSpectra.js.map +1 -0
  261. package/lib/ir/core/fromJcamp.d.ts +35 -0
  262. package/lib/ir/core/fromJcamp.d.ts.map +1 -0
  263. package/lib/ir/core/fromJcamp.js +48 -0
  264. package/lib/ir/core/fromJcamp.js.map +1 -0
  265. package/lib/ir/core/fromSpc.d.ts +30 -0
  266. package/lib/ir/core/fromSpc.d.ts.map +1 -0
  267. package/lib/ir/core/fromSpc.js +40 -0
  268. package/lib/ir/core/fromSpc.js.map +1 -0
  269. package/lib/ir/core/index.d.ts +51 -0
  270. package/lib/ir/core/index.d.ts.map +1 -0
  271. package/lib/ir/core/index.js +35 -0
  272. package/lib/ir/core/index.js.map +1 -0
  273. package/lib/ir/core/irBand.d.ts +45 -0
  274. package/lib/ir/core/irBand.d.ts.map +1 -0
  275. package/lib/ir/core/irBand.js +30 -0
  276. package/lib/ir/core/irBand.js.map +1 -0
  277. package/lib/ir/core/irCommands.d.ts +168 -0
  278. package/lib/ir/core/irCommands.d.ts.map +1 -0
  279. package/lib/ir/core/irCommands.js +94 -0
  280. package/lib/ir/core/irCommands.js.map +1 -0
  281. package/lib/ir/core/irDomain.d.ts +63 -0
  282. package/lib/ir/core/irDomain.d.ts.map +1 -0
  283. package/lib/ir/core/irDomain.js +136 -0
  284. package/lib/ir/core/irDomain.js.map +1 -0
  285. package/lib/ir/core/irEditorApi.d.ts +42 -0
  286. package/lib/ir/core/irEditorApi.d.ts.map +1 -0
  287. package/lib/ir/core/irEditorApi.js +10 -0
  288. package/lib/ir/core/irEditorApi.js.map +1 -0
  289. package/lib/ir/core/irFormat.d.ts +42 -0
  290. package/lib/ir/core/irFormat.d.ts.map +1 -0
  291. package/lib/ir/core/irFormat.js +51 -0
  292. package/lib/ir/core/irFormat.js.map +1 -0
  293. package/lib/ir/core/irMode.d.ts +160 -0
  294. package/lib/ir/core/irMode.d.ts.map +1 -0
  295. package/lib/ir/core/irMode.js +175 -0
  296. package/lib/ir/core/irMode.js.map +1 -0
  297. package/lib/ir/core/irReducer.d.ts +101 -0
  298. package/lib/ir/core/irReducer.d.ts.map +1 -0
  299. package/lib/ir/core/irReducer.js +207 -0
  300. package/lib/ir/core/irReducer.js.map +1 -0
  301. package/lib/ir/core/irSidePanels.d.ts +22 -0
  302. package/lib/ir/core/irSidePanels.d.ts.map +1 -0
  303. package/lib/ir/core/irSidePanels.js +12 -0
  304. package/lib/ir/core/irSidePanels.js.map +1 -0
  305. package/lib/ir/core/irSpectrum.d.ts +140 -0
  306. package/lib/ir/core/irSpectrum.d.ts.map +1 -0
  307. package/lib/ir/core/irSpectrum.js +34 -0
  308. package/lib/ir/core/irSpectrum.js.map +1 -0
  309. package/lib/ir/core/irState.d.ts +119 -0
  310. package/lib/ir/core/irState.d.ts.map +1 -0
  311. package/lib/ir/core/irState.js +92 -0
  312. package/lib/ir/core/irState.js.map +1 -0
  313. package/lib/ir/core/loadIrSpectra.d.ts +36 -0
  314. package/lib/ir/core/loadIrSpectra.d.ts.map +1 -0
  315. package/lib/ir/core/loadIrSpectra.js +44 -0
  316. package/lib/ir/core/loadIrSpectra.js.map +1 -0
  317. package/lib/ir/core/nearestBand.d.ts +35 -0
  318. package/lib/ir/core/nearestBand.d.ts.map +1 -0
  319. package/lib/ir/core/nearestBand.js +47 -0
  320. package/lib/ir/core/nearestBand.js.map +1 -0
  321. package/lib/ir/core/pickBands.d.ts +70 -0
  322. package/lib/ir/core/pickBands.d.ts.map +1 -0
  323. package/lib/ir/core/pickBands.js +125 -0
  324. package/lib/ir/core/pickBands.js.map +1 -0
  325. package/lib/ir/core/spectrumJcamp.d.ts +58 -0
  326. package/lib/ir/core/spectrumJcamp.d.ts.map +1 -0
  327. package/lib/ir/core/spectrumJcamp.js +156 -0
  328. package/lib/ir/core/spectrumJcamp.js.map +1 -0
  329. package/lib/ir/core/toIrSpectrum.d.ts +59 -0
  330. package/lib/ir/core/toIrSpectrum.d.ts.map +1 -0
  331. package/lib/ir/core/toIrSpectrum.js +56 -0
  332. package/lib/ir/core/toIrSpectrum.js.map +1 -0
  333. package/lib/ir/ui/BandMarks.d.ts +52 -0
  334. package/lib/ir/ui/BandMarks.d.ts.map +1 -0
  335. package/lib/ir/ui/BandMarks.js +71 -0
  336. package/lib/ir/ui/BandMarks.js.map +1 -0
  337. package/lib/ir/ui/BandsPanel.d.ts +31 -0
  338. package/lib/ir/ui/BandsPanel.d.ts.map +1 -0
  339. package/lib/ir/ui/BandsPanel.js +94 -0
  340. package/lib/ir/ui/BandsPanel.js.map +1 -0
  341. package/lib/ir/ui/IrAboutDialog.d.ts +18 -0
  342. package/lib/ir/ui/IrAboutDialog.d.ts.map +1 -0
  343. package/lib/ir/ui/IrAboutDialog.js +32 -0
  344. package/lib/ir/ui/IrAboutDialog.js.map +1 -0
  345. package/lib/ir/ui/IrCanvas.d.ts +38 -0
  346. package/lib/ir/ui/IrCanvas.d.ts.map +1 -0
  347. package/lib/ir/ui/IrCanvas.js +41 -0
  348. package/lib/ir/ui/IrCanvas.js.map +1 -0
  349. package/lib/ir/ui/IrChart.d.ts +28 -0
  350. package/lib/ir/ui/IrChart.d.ts.map +1 -0
  351. package/lib/ir/ui/IrChart.js +114 -0
  352. package/lib/ir/ui/IrChart.js.map +1 -0
  353. package/lib/ir/ui/IrCommandProvider.d.ts +15 -0
  354. package/lib/ir/ui/IrCommandProvider.d.ts.map +1 -0
  355. package/lib/ir/ui/IrCommandProvider.js +14 -0
  356. package/lib/ir/ui/IrCommandProvider.js.map +1 -0
  357. package/lib/ir/ui/IrCommandTooltip.d.ts +16 -0
  358. package/lib/ir/ui/IrCommandTooltip.d.ts.map +1 -0
  359. package/lib/ir/ui/IrCommandTooltip.js +22 -0
  360. package/lib/ir/ui/IrCommandTooltip.js.map +1 -0
  361. package/lib/ir/ui/IrDocumentationDialog.d.ts +18 -0
  362. package/lib/ir/ui/IrDocumentationDialog.d.ts.map +1 -0
  363. package/lib/ir/ui/IrDocumentationDialog.js +68 -0
  364. package/lib/ir/ui/IrDocumentationDialog.js.map +1 -0
  365. package/lib/ir/ui/IrEditor.d.ts +60 -0
  366. package/lib/ir/ui/IrEditor.d.ts.map +1 -0
  367. package/lib/ir/ui/IrEditor.js +42 -0
  368. package/lib/ir/ui/IrEditor.js.map +1 -0
  369. package/lib/ir/ui/IrHeader.d.ts +13 -0
  370. package/lib/ir/ui/IrHeader.d.ts.map +1 -0
  371. package/lib/ir/ui/IrHeader.js +21 -0
  372. package/lib/ir/ui/IrHeader.js.map +1 -0
  373. package/lib/ir/ui/IrLogo.d.ts +20 -0
  374. package/lib/ir/ui/IrLogo.d.ts.map +1 -0
  375. package/lib/ir/ui/IrLogo.js +17 -0
  376. package/lib/ir/ui/IrLogo.js.map +1 -0
  377. package/lib/ir/ui/IrPointerTracker.d.ts +29 -0
  378. package/lib/ir/ui/IrPointerTracker.d.ts.map +1 -0
  379. package/lib/ir/ui/IrPointerTracker.js +47 -0
  380. package/lib/ir/ui/IrPointerTracker.js.map +1 -0
  381. package/lib/ir/ui/IrShell.d.ts +25 -0
  382. package/lib/ir/ui/IrShell.d.ts.map +1 -0
  383. package/lib/ir/ui/IrShell.js +178 -0
  384. package/lib/ir/ui/IrShell.js.map +1 -0
  385. package/lib/ir/ui/IrSidePanel.d.ts +26 -0
  386. package/lib/ir/ui/IrSidePanel.d.ts.map +1 -0
  387. package/lib/ir/ui/IrSidePanel.js +39 -0
  388. package/lib/ir/ui/IrSidePanel.js.map +1 -0
  389. package/lib/ir/ui/IrStateProvider.d.ts +19 -0
  390. package/lib/ir/ui/IrStateProvider.d.ts.map +1 -0
  391. package/lib/ir/ui/IrStateProvider.js +16 -0
  392. package/lib/ir/ui/IrStateProvider.js.map +1 -0
  393. package/lib/ir/ui/IrStatusBar.d.ts +14 -0
  394. package/lib/ir/ui/IrStatusBar.d.ts.map +1 -0
  395. package/lib/ir/ui/IrStatusBar.js +48 -0
  396. package/lib/ir/ui/IrStatusBar.js.map +1 -0
  397. package/lib/ir/ui/IrToolbar.d.ts +18 -0
  398. package/lib/ir/ui/IrToolbar.d.ts.map +1 -0
  399. package/lib/ir/ui/IrToolbar.js +32 -0
  400. package/lib/ir/ui/IrToolbar.js.map +1 -0
  401. package/lib/ir/ui/IrTraces.d.ts +63 -0
  402. package/lib/ir/ui/IrTraces.d.ts.map +1 -0
  403. package/lib/ir/ui/IrTraces.js +72 -0
  404. package/lib/ir/ui/IrTraces.js.map +1 -0
  405. package/lib/ir/ui/MetadataPanel.d.ts +15 -0
  406. package/lib/ir/ui/MetadataPanel.d.ts.map +1 -0
  407. package/lib/ir/ui/MetadataPanel.js +49 -0
  408. package/lib/ir/ui/MetadataPanel.js.map +1 -0
  409. package/lib/ir/ui/SpectraPanel.d.ts +20 -0
  410. package/lib/ir/ui/SpectraPanel.d.ts.map +1 -0
  411. package/lib/ir/ui/SpectraPanel.js +42 -0
  412. package/lib/ir/ui/SpectraPanel.js.map +1 -0
  413. package/lib/ir/ui/SpectrumRow.d.ts +26 -0
  414. package/lib/ir/ui/SpectrumRow.d.ts.map +1 -0
  415. package/lib/ir/ui/SpectrumRow.js +41 -0
  416. package/lib/ir/ui/SpectrumRow.js.map +1 -0
  417. package/lib/ir/ui/index.d.ts +56 -0
  418. package/lib/ir/ui/index.d.ts.map +1 -0
  419. package/lib/ir/ui/index.js +36 -0
  420. package/lib/ir/ui/index.js.map +1 -0
  421. package/lib/ir/ui/irActions.d.ts +52 -0
  422. package/lib/ir/ui/irActions.d.ts.map +1 -0
  423. package/lib/ir/ui/irActions.js +62 -0
  424. package/lib/ir/ui/irActions.js.map +1 -0
  425. package/lib/ir/ui/irChartProps.d.ts +116 -0
  426. package/lib/ir/ui/irChartProps.d.ts.map +1 -0
  427. package/lib/ir/ui/irChartProps.js +14 -0
  428. package/lib/ir/ui/irChartProps.js.map +1 -0
  429. package/lib/ir/ui/irCommandContext.d.ts +35 -0
  430. package/lib/ir/ui/irCommandContext.d.ts.map +1 -0
  431. package/lib/ir/ui/irCommandContext.js +44 -0
  432. package/lib/ir/ui/irCommandContext.js.map +1 -0
  433. package/lib/ir/ui/irStateContext.d.ts +26 -0
  434. package/lib/ir/ui/irStateContext.d.ts.map +1 -0
  435. package/lib/ir/ui/irStateContext.js +37 -0
  436. package/lib/ir/ui/irStateContext.js.map +1 -0
  437. package/lib/ir/ui/useIrEditor.d.ts +51 -0
  438. package/lib/ir/ui/useIrEditor.d.ts.map +1 -0
  439. package/lib/ir/ui/useIrEditor.js +88 -0
  440. package/lib/ir/ui/useIrEditor.js.map +1 -0
  441. package/lib/ir/ui/useIrPointer.d.ts +66 -0
  442. package/lib/ir/ui/useIrPointer.d.ts.map +1 -0
  443. package/lib/ir/ui/useIrPointer.js +53 -0
  444. package/lib/ir/ui/useIrPointer.js.map +1 -0
  445. package/lib/ir/ui/useIrShortcuts.d.ts +24 -0
  446. package/lib/ir/ui/useIrShortcuts.d.ts.map +1 -0
  447. package/lib/ir/ui/useIrShortcuts.js +73 -0
  448. package/lib/ir/ui/useIrShortcuts.js.map +1 -0
  449. package/lib/ir/ui/useIrZoom.d.ts +51 -0
  450. package/lib/ir/ui/useIrZoom.d.ts.map +1 -0
  451. package/lib/ir/ui/useIrZoom.js +46 -0
  452. package/lib/ir/ui/useIrZoom.js.map +1 -0
  453. package/lib/ir.d.ts +13 -0
  454. package/lib/ir.d.ts.map +1 -0
  455. package/lib/ir.js +13 -0
  456. package/lib/ir.js.map +1 -0
  457. package/lib/panel/core/dialogStyles.d.ts +13 -0
  458. package/lib/panel/core/dialogStyles.d.ts.map +1 -0
  459. package/lib/panel/core/dialogStyles.js +11 -0
  460. package/lib/panel/core/dialogStyles.js.map +1 -0
  461. package/lib/panel/core/index.d.ts +19 -0
  462. package/lib/panel/core/index.d.ts.map +1 -0
  463. package/lib/panel/core/index.js +18 -0
  464. package/lib/panel/core/index.js.map +1 -0
  465. package/lib/panel/core/isEditingField.d.ts +17 -0
  466. package/lib/panel/core/isEditingField.d.ts.map +1 -0
  467. package/lib/panel/core/isEditingField.js +25 -0
  468. package/lib/panel/core/isEditingField.js.map +1 -0
  469. package/lib/panel/core/panelStyles.d.ts +242 -0
  470. package/lib/panel/core/panelStyles.d.ts.map +1 -0
  471. package/lib/panel/core/panelStyles.js +228 -0
  472. package/lib/panel/core/panelStyles.js.map +1 -0
  473. package/lib/panel/core/rowSpacers.d.ts +38 -0
  474. package/lib/panel/core/rowSpacers.d.ts.map +1 -0
  475. package/lib/panel/core/rowSpacers.js +31 -0
  476. package/lib/panel/core/rowSpacers.js.map +1 -0
  477. package/lib/panel/core/statusBar.d.ts +44 -0
  478. package/lib/panel/core/statusBar.d.ts.map +1 -0
  479. package/lib/panel/core/statusBar.js +40 -0
  480. package/lib/panel/core/statusBar.js.map +1 -0
  481. package/lib/panel/core/textFilter.d.ts +22 -0
  482. package/lib/panel/core/textFilter.d.ts.map +1 -0
  483. package/lib/panel/core/textFilter.js +32 -0
  484. package/lib/panel/core/textFilter.js.map +1 -0
  485. package/lib/panel/core/yieldToPainting.d.ts +17 -0
  486. package/lib/panel/core/yieldToPainting.d.ts.map +1 -0
  487. package/lib/panel/core/yieldToPainting.js +21 -0
  488. package/lib/panel/core/yieldToPainting.js.map +1 -0
  489. package/lib/panel/ui/AboutDialogFrame.d.ts +36 -0
  490. package/lib/panel/ui/AboutDialogFrame.d.ts.map +1 -0
  491. package/lib/panel/ui/AboutDialogFrame.js +43 -0
  492. package/lib/panel/ui/AboutDialogFrame.js.map +1 -0
  493. package/lib/panel/ui/ClearButton.d.ts +28 -0
  494. package/lib/panel/ui/ClearButton.d.ts.map +1 -0
  495. package/lib/panel/ui/ClearButton.js +23 -0
  496. package/lib/panel/ui/ClearButton.js.map +1 -0
  497. package/lib/panel/ui/DocumentationDialogFrame.d.ts +39 -0
  498. package/lib/panel/ui/DocumentationDialogFrame.d.ts.map +1 -0
  499. package/lib/panel/ui/DocumentationDialogFrame.js +29 -0
  500. package/lib/panel/ui/DocumentationDialogFrame.js.map +1 -0
  501. package/lib/panel/ui/FilterInput.d.ts +31 -0
  502. package/lib/panel/ui/FilterInput.d.ts.map +1 -0
  503. package/lib/panel/ui/FilterInput.js +23 -0
  504. package/lib/panel/ui/FilterInput.js.map +1 -0
  505. package/lib/panel/ui/HelpLabel.d.ts +24 -0
  506. package/lib/panel/ui/HelpLabel.d.ts.map +1 -0
  507. package/lib/panel/ui/HelpLabel.js +23 -0
  508. package/lib/panel/ui/HelpLabel.js.map +1 -0
  509. package/lib/panel/ui/PanelMessage.d.ts +41 -0
  510. package/lib/panel/ui/PanelMessage.d.ts.map +1 -0
  511. package/lib/panel/ui/PanelMessage.js +30 -0
  512. package/lib/panel/ui/PanelMessage.js.map +1 -0
  513. package/lib/panel/ui/PanelRail.d.ts +41 -0
  514. package/lib/panel/ui/PanelRail.d.ts.map +1 -0
  515. package/lib/panel/ui/PanelRail.js +12 -0
  516. package/lib/panel/ui/PanelRail.js.map +1 -0
  517. package/lib/panel/ui/Section.d.ts +25 -0
  518. package/lib/panel/ui/Section.d.ts.map +1 -0
  519. package/lib/panel/ui/Section.js +41 -0
  520. package/lib/panel/ui/Section.js.map +1 -0
  521. package/lib/panel/ui/SidePanelStack.d.ts +62 -0
  522. package/lib/panel/ui/SidePanelStack.d.ts.map +1 -0
  523. package/lib/panel/ui/SidePanelStack.js +40 -0
  524. package/lib/panel/ui/SidePanelStack.js.map +1 -0
  525. package/lib/panel/ui/SpectrumColorSwatch.d.ts +33 -0
  526. package/lib/panel/ui/SpectrumColorSwatch.d.ts.map +1 -0
  527. package/lib/panel/ui/SpectrumColorSwatch.js +76 -0
  528. package/lib/panel/ui/SpectrumColorSwatch.js.map +1 -0
  529. package/lib/panel/ui/index.d.ts +37 -0
  530. package/lib/panel/ui/index.d.ts.map +1 -0
  531. package/lib/panel/ui/index.js +24 -0
  532. package/lib/panel/ui/index.js.map +1 -0
  533. package/lib/panel/ui/useConfirmOnEnter.d.ts +19 -0
  534. package/lib/panel/ui/useConfirmOnEnter.d.ts.map +1 -0
  535. package/lib/panel/ui/useConfirmOnEnter.js +64 -0
  536. package/lib/panel/ui/useConfirmOnEnter.js.map +1 -0
  537. package/lib/panel/ui/useFilterBox.d.ts +23 -0
  538. package/lib/panel/ui/useFilterBox.d.ts.map +1 -0
  539. package/lib/panel/ui/useFilterBox.js +22 -0
  540. package/lib/panel/ui/useFilterBox.js.map +1 -0
  541. package/lib/panel/ui/useVirtualRows.d.ts +46 -0
  542. package/lib/panel/ui/useVirtualRows.d.ts.map +1 -0
  543. package/lib/panel/ui/useVirtualRows.js +56 -0
  544. package/lib/panel/ui/useVirtualRows.js.map +1 -0
  545. package/lib/panel/ui/useVirtualWindowRows.d.ts +40 -0
  546. package/lib/panel/ui/useVirtualWindowRows.d.ts.map +1 -0
  547. package/lib/panel/ui/useVirtualWindowRows.js +65 -0
  548. package/lib/panel/ui/useVirtualWindowRows.js.map +1 -0
  549. package/lib/ui.d.ts +1 -0
  550. package/lib/ui.d.ts.map +1 -1
  551. package/lib/ui.js +1 -0
  552. package/lib/ui.js.map +1 -1
  553. package/package.json +8 -1
  554. package/src/chart/core/axisLabels.ts +117 -0
  555. package/src/chart/core/boxLayout.ts +126 -0
  556. package/src/chart/core/chartAxisScale.ts +92 -10
  557. package/src/chart/core/chartDomain.ts +185 -0
  558. package/src/chart/core/chartGeometry.ts +159 -0
  559. package/src/chart/core/chartPane.ts +10 -0
  560. package/src/chart/core/chartScale.ts +7 -4
  561. package/src/chart/core/chartTheme.ts +161 -0
  562. package/src/chart/core/chartViewport.ts +40 -13
  563. package/src/chart/core/guidePlacement.ts +66 -0
  564. package/src/chart/core/index.ts +121 -2
  565. package/src/chart/core/labelStack.ts +72 -0
  566. package/src/chart/core/legendBox.ts +263 -0
  567. package/src/chart/core/selectionGeometry.ts +68 -0
  568. package/src/chart/core/spectrumColor.ts +129 -0
  569. package/src/chart/core/stackCapacity.ts +162 -0
  570. package/src/chart/core/svgPoint.ts +77 -0
  571. package/src/chart/core/tracePath.ts +228 -0
  572. package/src/chart/core/trackerReadout.ts +78 -0
  573. package/src/chart/core/viewTransform.ts +287 -0
  574. package/src/chart/core/zoomDomain.ts +235 -0
  575. package/src/chart/ui/Axes.tsx +361 -0
  576. package/src/chart/ui/AxisGuide.tsx +187 -0
  577. package/src/chart/ui/ChartStack.tsx +130 -0
  578. package/src/chart/ui/ChartTracker.tsx +101 -0
  579. package/src/chart/ui/PlotCaption.tsx +108 -0
  580. package/src/chart/ui/SelectionRect.tsx +52 -0
  581. package/src/chart/ui/TraceLegend.tsx +193 -0
  582. package/src/chart/ui/chartGestures.ts +270 -0
  583. package/src/chart/ui/chartStackLevel.tsx +210 -0
  584. package/src/chart/ui/chartSurface.ts +66 -0
  585. package/src/chart/ui/index.ts +35 -0
  586. package/src/chart/ui/useChartPointer.ts +223 -0
  587. package/src/chart/ui/useChartSize.ts +115 -0
  588. package/src/chart/ui/useChartWindow.ts +240 -0
  589. package/src/chart/ui/useChartZoom.ts +255 -0
  590. package/src/chart/ui/useWheelListener.ts +62 -0
  591. package/src/clipboard/core/copyPng.ts +20 -0
  592. package/src/clipboard/core/index.ts +1 -0
  593. package/src/core.ts +1 -0
  594. package/src/download/core/exportStyles.ts +20 -0
  595. package/src/download/core/imageResolution.ts +118 -0
  596. package/src/download/core/index.ts +34 -0
  597. package/src/download/core/pictureExport.ts +207 -0
  598. package/src/download/core/stackedDrawing.ts +108 -0
  599. package/src/download/core/svgBounds.ts +80 -0
  600. package/src/download/core/svgNamespace.ts +9 -0
  601. package/src/download/core/svgToPng.ts +121 -0
  602. package/src/download/core/svgToString.ts +95 -0
  603. package/src/download/ui/ExportDialogFrame.tsx +86 -0
  604. package/src/download/ui/ExportImageDialog.tsx +91 -0
  605. package/src/download/ui/ExportNameField.tsx +148 -0
  606. package/src/download/ui/ExportPictureSection.tsx +142 -0
  607. package/src/download/ui/index.ts +11 -0
  608. package/src/download/ui/useDrawingBox.ts +37 -0
  609. package/src/error/core/describeSource.ts +18 -0
  610. package/src/error/core/index.ts +1 -0
  611. package/src/help/ui/HelpBody.tsx +41 -2
  612. package/src/help/ui/index.ts +6 -1
  613. package/src/ir/core/analysisSpectra.ts +231 -0
  614. package/src/ir/core/assignBands.ts +144 -0
  615. package/src/ir/core/bandAssignments.ts +329 -0
  616. package/src/ir/core/bandLabelPlan.ts +194 -0
  617. package/src/ir/core/detectIrFormat.ts +139 -0
  618. package/src/ir/core/downloadSpectra.ts +57 -0
  619. package/src/ir/core/fromJcamp.ts +70 -0
  620. package/src/ir/core/fromSpc.ts +61 -0
  621. package/src/ir/core/index.ts +113 -0
  622. package/src/ir/core/irBand.ts +57 -0
  623. package/src/ir/core/irCommands.ts +154 -0
  624. package/src/ir/core/irDomain.ts +163 -0
  625. package/src/ir/core/irEditorApi.ts +44 -0
  626. package/src/ir/core/irFormat.ts +57 -0
  627. package/src/ir/core/irMode.ts +203 -0
  628. package/src/ir/core/irReducer.ts +273 -0
  629. package/src/ir/core/irSidePanels.ts +20 -0
  630. package/src/ir/core/irSpectrum.ts +155 -0
  631. package/src/ir/core/irState.ts +173 -0
  632. package/src/ir/core/loadIrSpectra.ts +79 -0
  633. package/src/ir/core/nearestBand.ts +57 -0
  634. package/src/ir/core/pickBands.ts +181 -0
  635. package/src/ir/core/spectrumJcamp.ts +178 -0
  636. package/src/ir/core/toIrSpectrum.ts +102 -0
  637. package/src/ir/ui/BandMarks.tsx +166 -0
  638. package/src/ir/ui/BandsPanel.tsx +271 -0
  639. package/src/ir/ui/IrAboutDialog.tsx +121 -0
  640. package/src/ir/ui/IrCanvas.tsx +91 -0
  641. package/src/ir/ui/IrChart.tsx +215 -0
  642. package/src/ir/ui/IrCommandProvider.tsx +32 -0
  643. package/src/ir/ui/IrCommandTooltip.tsx +36 -0
  644. package/src/ir/ui/IrDocumentationDialog.tsx +174 -0
  645. package/src/ir/ui/IrEditor.tsx +99 -0
  646. package/src/ir/ui/IrHeader.tsx +39 -0
  647. package/src/ir/ui/IrLogo.tsx +49 -0
  648. package/src/ir/ui/IrPointerTracker.tsx +102 -0
  649. package/src/ir/ui/IrShell.tsx +285 -0
  650. package/src/ir/ui/IrSidePanel.tsx +78 -0
  651. package/src/ir/ui/IrStateProvider.tsx +32 -0
  652. package/src/ir/ui/IrStatusBar.tsx +97 -0
  653. package/src/ir/ui/IrToolbar.tsx +102 -0
  654. package/src/ir/ui/IrTraces.tsx +134 -0
  655. package/src/ir/ui/MetadataPanel.tsx +88 -0
  656. package/src/ir/ui/SpectraPanel.tsx +114 -0
  657. package/src/ir/ui/SpectrumRow.tsx +127 -0
  658. package/src/ir/ui/index.ts +56 -0
  659. package/src/ir/ui/irActions.ts +103 -0
  660. package/src/ir/ui/irChartProps.ts +118 -0
  661. package/src/ir/ui/irCommandContext.tsx +62 -0
  662. package/src/ir/ui/irStateContext.ts +48 -0
  663. package/src/ir/ui/useIrEditor.ts +139 -0
  664. package/src/ir/ui/useIrPointer.ts +109 -0
  665. package/src/ir/ui/useIrShortcuts.ts +95 -0
  666. package/src/ir/ui/useIrZoom.ts +86 -0
  667. package/src/ir.ts +13 -0
  668. package/src/panel/core/dialogStyles.ts +11 -0
  669. package/src/panel/core/index.ts +47 -0
  670. package/src/panel/core/isEditingField.ts +23 -0
  671. package/src/panel/core/panelStyles.ts +248 -0
  672. package/src/panel/core/rowSpacers.ts +50 -0
  673. package/src/panel/core/statusBar.ts +48 -0
  674. package/src/panel/core/textFilter.ts +33 -0
  675. package/src/panel/core/yieldToPainting.ts +20 -0
  676. package/src/panel/ui/AboutDialogFrame.tsx +100 -0
  677. package/src/panel/ui/ClearButton.tsx +42 -0
  678. package/src/panel/ui/DocumentationDialogFrame.tsx +86 -0
  679. package/src/panel/ui/FilterInput.tsx +60 -0
  680. package/src/panel/ui/HelpLabel.tsx +43 -0
  681. package/src/panel/ui/PanelMessage.tsx +64 -0
  682. package/src/panel/ui/PanelRail.tsx +64 -0
  683. package/src/panel/ui/Section.tsx +66 -0
  684. package/src/panel/ui/SidePanelStack.tsx +109 -0
  685. package/src/panel/ui/SpectrumColorSwatch.tsx +119 -0
  686. package/src/panel/ui/index.ts +47 -0
  687. package/src/panel/ui/useConfirmOnEnter.ts +68 -0
  688. package/src/panel/ui/useFilterBox.ts +35 -0
  689. package/src/panel/ui/useVirtualRows.ts +82 -0
  690. package/src/panel/ui/useVirtualWindowRows.ts +86 -0
  691. package/src/ui.ts +1 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"irState.js","sourceRoot":"","sources":["../../../src/ir/core/irState.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAuEH,6EAA6E;AAC7E,MAAM,CAAC,MAAM,kBAAkB,GAAkB,SAAS,CAAC;AAE3D;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAoB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AAEzE,iEAAiE;AACjE,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAG,CAAC;AAEvC,2CAA2C;AAC3C,MAAM,CAAC,MAAM,mBAAmB,GAAG,EAAE,CAAC;AAEtC,0DAA0D;AAC1D,MAAM,CAAC,MAAM,eAAe,GAAqB;IAC/C,iBAAiB,EAAE,IAAI;IACvB,YAAY,EAAE,CAAC;CAChB,CAAC;AAEF,gDAAgD;AAChD,MAAM,CAAC,MAAM,gBAAgB,GAAe;IAC1C,IAAI,EAAE,eAAe;IACrB,SAAS,EAAE,IAAI;IACf,OAAO,EAAE,eAAe;IACxB,eAAe,EAAE,KAAK;IACtB,UAAU,EAAE,mBAAmB;IAC/B,mBAAmB,EAAE,CAAC;CACvB,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,eAAe,CAC7B,OAAmB,EACnB,SAA8B,EAAE;IAEhC,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,IAAI,OAAO,CAAC,UAAU,CAAC;IACtD,MAAM,SAAS,GAAG,MAAM,CAAC,mBAAmB,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAC5E,OAAO;QACL,GAAG,OAAO;QACV,GAAG,MAAM;QACT,OAAO,EAAE,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,GAAG,MAAM,CAAC,OAAO,EAAE;QAClD,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;YAChC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,mBAAmB,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;YAC/D,CAAC,CAAC,OAAO,CAAC,UAAU;QACtB,mBAAmB,EACjB,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,SAAS,IAAI,CAAC;YAC1C,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,OAAO,CAAC,mBAAmB;KAClC,CAAC;AACJ,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,UAAU,CAAC,MAAgB;IACzC,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAClD,CAAC;AAED;;;;GAIG;AACH,SAAS,QAAQ,CAAC,MAAwB;IACxC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,MAAM,CAAC;IAC1B,OAAO,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,IAAI,GAAG,EAAE,CAAC;AACnE,CAAC"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * One entry point for whatever was dropped, opened or pasted.
3
+ *
4
+ * The format is decided from the bytes and the right reader is called, so a
5
+ * caller hands over a file and gets spectra back without knowing what it turned
6
+ * out to be. Each reader is imported only once the bytes turn out to need it, so
7
+ * a page that never opens an SPC never downloads its parser.
8
+ */
9
+ import type { LoadedIrSpectrum } from './analysisSpectra.ts';
10
+ import type { IrOrigin } from './irSpectrum.ts';
11
+ /** How a file is read. */
12
+ export interface LoadIrSpectraOptions {
13
+ /**
14
+ * The file's name, which decides the reader when the content is silent and is
15
+ * carried onto every spectrum read out of it.
16
+ * @default undefined
17
+ */
18
+ fileName?: string;
19
+ }
20
+ /** What a file turned out to hold. */
21
+ export interface LoadIrSpectraResult {
22
+ /** The spectra it held, in the order the file wrote them. */
23
+ spectra: LoadedIrSpectrum[];
24
+ /** What it turned out to be. */
25
+ format: IrOrigin['format'];
26
+ }
27
+ /**
28
+ * Read every infrared spectrum a file holds.
29
+ * @param data - The file, as bytes, or the pasted text.
30
+ * @param options - The file's name.
31
+ * @returns The spectra, and the format they were read from.
32
+ * @throws {Error} When nothing in the file names a format this can read, or when
33
+ * the reader for that format gave up on it.
34
+ */
35
+ export declare function loadIrSpectra(data: Uint8Array | string, options?: LoadIrSpectraOptions): Promise<LoadIrSpectraResult>;
36
+ //# sourceMappingURL=loadIrSpectra.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loadIrSpectra.d.ts","sourceRoot":"","sources":["../../../src/ir/core/loadIrSpectra.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAE7D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAEhD,0BAA0B;AAC1B,MAAM,WAAW,oBAAoB;IACnC;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,sCAAsC;AACtC,MAAM,WAAW,mBAAmB;IAClC,6DAA6D;IAC7D,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B,gCAAgC;IAChC,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;CAC5B;AAED;;;;;;;GAOG;AACH,wBAAsB,aAAa,CACjC,IAAI,EAAE,UAAU,GAAG,MAAM,EACzB,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,mBAAmB,CAAC,CAkC9B"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * One entry point for whatever was dropped, opened or pasted.
3
+ *
4
+ * The format is decided from the bytes and the right reader is called, so a
5
+ * caller hands over a file and gets spectra back without knowing what it turned
6
+ * out to be. Each reader is imported only once the bytes turn out to need it, so
7
+ * a page that never opens an SPC never downloads its parser.
8
+ */
9
+ import { describeSource } from "../../error/core/index.js";
10
+ import { detectIrFormat } from "./detectIrFormat.js";
11
+ /**
12
+ * Read every infrared spectrum a file holds.
13
+ * @param data - The file, as bytes, or the pasted text.
14
+ * @param options - The file's name.
15
+ * @returns The spectra, and the format they were read from.
16
+ * @throws {Error} When nothing in the file names a format this can read, or when
17
+ * the reader for that format gave up on it.
18
+ */
19
+ export async function loadIrSpectra(data, options = {}) {
20
+ const { fileName } = options;
21
+ const format = detectIrFormat(data, fileName);
22
+ if (format === 'jcamp') {
23
+ const { fromJcamp } = await import("./fromJcamp.js");
24
+ return { spectra: fromJcamp(data, options), format };
25
+ }
26
+ if (format === 'spc') {
27
+ if (typeof data === 'string') {
28
+ throw new Error(`${describeSource(fileName)} looks like an SPC file but arrived as text — SPC is binary, and reading it as text loses bytes it cannot get back.`);
29
+ }
30
+ const { fromSpc } = await import("./fromSpc.js");
31
+ return { spectra: fromSpc(data, options), format };
32
+ }
33
+ if (format === 'text') {
34
+ // Deliberately refused rather than half-read. `ir-spectrum` adds the
35
+ // absorbance and transmittance pair to everything `fromJcamp` and `fromSPC`
36
+ // produce, but not to `fromText`, so a two-column file arrives carrying only
37
+ // the axis it was written in. Deriving the other one here would put a second
38
+ // implementation of that conversion in this package, which is exactly what
39
+ // depending on `ir-spectrum` is meant to avoid.
40
+ throw new Error(`${describeSource(fileName)} is two columns of numbers, which this viewer cannot read yet: ir-spectrum derives the absorbance and transmittance pair for JCAMP-DX and SPC but not for plain text, and this package deliberately does not do that conversion itself. Export the spectrum as JCAMP-DX (.jdx) instead.`);
41
+ }
42
+ throw new Error(`${describeSource(fileName)} is not a spectrum this viewer can read — JCAMP-DX (.jdx, .dx) and Thermo Galactic SPC (.spc) are understood.`);
43
+ }
44
+ //# sourceMappingURL=loadIrSpectra.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loadIrSpectra.js","sourceRoot":"","sources":["../../../src/ir/core/loadIrSpectra.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAG3D,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAqBrD;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,IAAyB,EACzB,UAAgC,EAAE;IAElC,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;IAC7B,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAE9C,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;QACvB,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAC;QACrD,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACvD,CAAC;IAED,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;QACrB,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CACb,GAAG,cAAc,CAAC,QAAQ,CAAC,qHAAqH,CACjJ,CAAC;QACJ,CAAC;QACD,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC;QACjD,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACrD,CAAC;IAED,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACtB,qEAAqE;QACrE,4EAA4E;QAC5E,6EAA6E;QAC7E,6EAA6E;QAC7E,2EAA2E;QAC3E,gDAAgD;QAChD,MAAM,IAAI,KAAK,CACb,GAAG,cAAc,CAAC,QAAQ,CAAC,yRAAyR,CACrT,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,KAAK,CACb,GAAG,cAAc,CAAC,QAAQ,CAAC,+GAA+G,CAC3I,CAAC;AACJ,CAAC"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Which band the pointer is asking about.
3
+ *
4
+ * Found in pixels rather than in wavenumbers, because what a user means by
5
+ * "that band" is what is under the pointer on screen: at a full-scan zoom two
6
+ * bands thirty wavenumbers apart are three pixels apart and either will do,
7
+ * while at a deep zoom the same thirty wavenumbers is half the plot and only one
8
+ * of them is being pointed at.
9
+ */
10
+ import type { ChartScale } from '../../chart/core/chartScale.ts';
11
+ import type { IrBand } from './irBand.ts';
12
+ /**
13
+ * How close the pointer has to be to a band, in pixels.
14
+ *
15
+ * Eight is about a fingertip's worth of aim on a trackpad. Wider and the readout
16
+ * claims a band while the pointer is plainly on the baseline beside it; narrower
17
+ * and a band has to be hit exactly, which on a dense fingerprint region is not
18
+ * a gesture anyone can make.
19
+ */
20
+ export declare const BAND_HIT_RADIUS = 8;
21
+ /**
22
+ * The band nearest a place on the axis, when one is within reach.
23
+ *
24
+ * A plain scan rather than a binary search: a spectrum is picked down to a few
25
+ * dozen bands, so the whole list is shorter than the setup a search would need,
26
+ * and it stays correct if the bands ever arrive in another order.
27
+ * @param bands - The bands of every spectrum currently drawn.
28
+ * @param xScale - The wavenumber axis as it is currently zoomed, which may run
29
+ * either way round.
30
+ * @param pixelX - Where the pointer is, in user units of the SVG.
31
+ * @param radius - How close it has to be. Defaults to `BAND_HIT_RADIUS`.
32
+ * @returns The band, or `null` when none is within reach.
33
+ */
34
+ export declare function nearestBandAt(bands: readonly IrBand[], xScale: ChartScale, pixelX: number, radius?: number): IrBand | null;
35
+ //# sourceMappingURL=nearestBand.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nearestBand.d.ts","sourceRoot":"","sources":["../../../src/ir/core/nearestBand.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAGjE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe,IAAI,CAAC;AAEjC;;;;;;;;;;;;GAYG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,SAAS,MAAM,EAAE,EACxB,MAAM,EAAE,UAAU,EAClB,MAAM,EAAE,MAAM,EACd,MAAM,SAAkB,GACvB,MAAM,GAAG,IAAI,CAaf"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Which band the pointer is asking about.
3
+ *
4
+ * Found in pixels rather than in wavenumbers, because what a user means by
5
+ * "that band" is what is under the pointer on screen: at a full-scan zoom two
6
+ * bands thirty wavenumbers apart are three pixels apart and either will do,
7
+ * while at a deep zoom the same thirty wavenumbers is half the plot and only one
8
+ * of them is being pointed at.
9
+ */
10
+ import { chartPixel } from "../../chart/core/chartScale.js";
11
+ /**
12
+ * How close the pointer has to be to a band, in pixels.
13
+ *
14
+ * Eight is about a fingertip's worth of aim on a trackpad. Wider and the readout
15
+ * claims a band while the pointer is plainly on the baseline beside it; narrower
16
+ * and a band has to be hit exactly, which on a dense fingerprint region is not
17
+ * a gesture anyone can make.
18
+ */
19
+ export const BAND_HIT_RADIUS = 8;
20
+ /**
21
+ * The band nearest a place on the axis, when one is within reach.
22
+ *
23
+ * A plain scan rather than a binary search: a spectrum is picked down to a few
24
+ * dozen bands, so the whole list is shorter than the setup a search would need,
25
+ * and it stays correct if the bands ever arrive in another order.
26
+ * @param bands - The bands of every spectrum currently drawn.
27
+ * @param xScale - The wavenumber axis as it is currently zoomed, which may run
28
+ * either way round.
29
+ * @param pixelX - Where the pointer is, in user units of the SVG.
30
+ * @param radius - How close it has to be. Defaults to `BAND_HIT_RADIUS`.
31
+ * @returns The band, or `null` when none is within reach.
32
+ */
33
+ export function nearestBandAt(bands, xScale, pixelX, radius = BAND_HIT_RADIUS) {
34
+ let found = null;
35
+ let bestDistance = radius;
36
+ for (const band of bands) {
37
+ const distance = Math.abs(chartPixel(xScale, band.wavenumber) - pixelX);
38
+ // Strictly nearer, so the first of two bands at one wavenumber wins and the
39
+ // answer does not flicker between them as the pointer rests still.
40
+ if (distance < bestDistance) {
41
+ bestDistance = distance;
42
+ found = band;
43
+ }
44
+ }
45
+ return found;
46
+ }
47
+ //# sourceMappingURL=nearestBand.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nearestBand.js","sourceRoot":"","sources":["../../../src/ir/core/nearestBand.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAI5D;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC;AAEjC;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,aAAa,CAC3B,KAAwB,EACxB,MAAkB,EAClB,MAAc,EACd,MAAM,GAAG,eAAe;IAExB,IAAI,KAAK,GAAkB,IAAI,CAAC;IAChC,IAAI,YAAY,GAAG,MAAM,CAAC;IAC1B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,GAAG,MAAM,CAAC,CAAC;QACxE,4EAA4E;QAC5E,mEAAmE;QACnE,IAAI,QAAQ,GAAG,YAAY,EAAE,CAAC;YAC5B,YAAY,GAAG,QAAQ,CAAC;YACxB,KAAK,GAAG,IAAI,CAAC;QACf,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Finding the bands in a spectrum, which `ir-spectrum` does.
3
+ *
4
+ * Everything here is the two things that call needs and does not have: a
5
+ * `MeasurementXY` built out of the arrays the viewer holds, and the decision to
6
+ * pick on **absorbance** rather than on transmittance. That second one is the
7
+ * only judgement in the file and it is not a preference — peak picking finds
8
+ * maxima, and a band is a maximum in absorbance but a *minimum* in transmittance,
9
+ * so picking on transmittance would return the flat baseline between the bands
10
+ * and miss every band there is.
11
+ */
12
+ import type { IrBand } from './irBand.ts';
13
+ import type { IrSpectrum } from './irSpectrum.ts';
14
+ /** How the bands are picked. */
15
+ export interface PickBandsOptions {
16
+ /**
17
+ * Lowest wavenumber to pick in, in cm⁻¹.
18
+ * @default the start of the spectrum
19
+ */
20
+ from?: number;
21
+ /**
22
+ * Highest wavenumber to pick in, in cm⁻¹.
23
+ * @default the end of the spectrum
24
+ */
25
+ to?: number;
26
+ /**
27
+ * How tall a band must be against the tallest one to count, as a fraction.
28
+ *
29
+ * Two percent by default, which on a real ATR spectrum is a little above the
30
+ * noise and a long way below any band worth naming. Lowered, the fingerprint
31
+ * region fills with shoulders that have no assignment; raised past about a
32
+ * tenth, weak but diagnostic bands — a nitrile, an alkyne — stop being found.
33
+ * @default 0.02
34
+ */
35
+ minRelativeHeight?: number;
36
+ /**
37
+ * Narrowest band to keep, in cm⁻¹.
38
+ *
39
+ * A spike one point wide is a detector glitch rather than a vibration: real
40
+ * infrared bands are several wavenumbers across even at their sharpest.
41
+ * @default 4
42
+ */
43
+ minPeakWidth?: number;
44
+ /**
45
+ * At most how many bands to keep, the strongest first.
46
+ * @default every band found
47
+ */
48
+ limit?: number;
49
+ }
50
+ /**
51
+ * Pick the bands of one spectrum.
52
+ *
53
+ * The bands come back in ascending wavenumber, which is the order a spectrum is
54
+ * read in rather than the order they were found — `limit` cuts by height, and
55
+ * then what survives is put back in axis order, so a table of them reads like
56
+ * the chart.
57
+ *
58
+ * **A band centre is a sampled point, not an interpolated one.** `ir-spectrum`
59
+ * reports each picked band at the wavenumber of the sample it peaked on, so on a
60
+ * bench instrument's 4 cm⁻¹ grid a carbonyl centred at 1710 is reported at 1708
61
+ * or 1712. That is within the tolerance the assignment table is matched with, and
62
+ * refining it here would mean re-deriving a peak position this package has
63
+ * deliberately delegated — but it is why a band should never be quoted as though
64
+ * it were measured to the wavenumber.
65
+ * @param spectrum - The spectrum to pick from.
66
+ * @param options - Where to pick, and what to keep.
67
+ * @returns The bands, ascending by wavenumber.
68
+ */
69
+ export declare function pickBands(spectrum: IrSpectrum, options?: PickBandsOptions): IrBand[];
70
+ //# sourceMappingURL=pickBands.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pickBands.d.ts","sourceRoot":"","sources":["../../../src/ir/core/pickBands.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAMH,OAAO,KAAK,EAAE,MAAM,EAAkB,MAAM,aAAa,CAAC;AAC1D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD,gCAAgC;AAChC,MAAM,WAAW,gBAAgB;IAC/B;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ;;;;;;;;OAQG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,SAAS,CACvB,QAAQ,EAAE,UAAU,EACpB,OAAO,GAAE,gBAAqB,GAC7B,MAAM,EAAE,CAuCV"}
@@ -0,0 +1,125 @@
1
+ /**
2
+ * Finding the bands in a spectrum, which `ir-spectrum` does.
3
+ *
4
+ * Everything here is the two things that call needs and does not have: a
5
+ * `MeasurementXY` built out of the arrays the viewer holds, and the decision to
6
+ * pick on **absorbance** rather than on transmittance. That second one is the
7
+ * only judgement in the file and it is not a preference — peak picking finds
8
+ * maxima, and a band is a maximum in absorbance but a *minimum* in transmittance,
9
+ * so picking on transmittance would return the flat baseline between the bands
10
+ * and miss every band there is.
11
+ */
12
+ import { autoPeakPicking } from 'ir-spectrum';
13
+ import { xMaxValue, xMinValue } from 'ml-spectra-processing';
14
+ /**
15
+ * Pick the bands of one spectrum.
16
+ *
17
+ * The bands come back in ascending wavenumber, which is the order a spectrum is
18
+ * read in rather than the order they were found — `limit` cuts by height, and
19
+ * then what survives is put back in axis order, so a table of them reads like
20
+ * the chart.
21
+ *
22
+ * **A band centre is a sampled point, not an interpolated one.** `ir-spectrum`
23
+ * reports each picked band at the wavenumber of the sample it peaked on, so on a
24
+ * bench instrument's 4 cm⁻¹ grid a carbonyl centred at 1710 is reported at 1708
25
+ * or 1712. That is within the tolerance the assignment table is matched with, and
26
+ * refining it here would mean re-deriving a peak position this package has
27
+ * deliberately delegated — but it is why a band should never be quoted as though
28
+ * it were measured to the wavenumber.
29
+ * @param spectrum - The spectrum to pick from.
30
+ * @param options - Where to pick, and what to keep.
31
+ * @returns The bands, ascending by wavenumber.
32
+ */
33
+ export function pickBands(spectrum, options = {}) {
34
+ const { from, to, minRelativeHeight = 0.02, minPeakWidth = 4, limit, } = options;
35
+ if (spectrum.wavenumber.length < 2)
36
+ return [];
37
+ const picked = autoPeakPicking(measurementOf(spectrum), {
38
+ // Absorbance, because a band is a maximum there and a minimum in the other.
39
+ yVariable: 'a',
40
+ minMaxRatio: minRelativeHeight,
41
+ minPeakWidth,
42
+ ...(from === undefined ? {} : { from }),
43
+ ...(to === undefined ? {} : { to }),
44
+ });
45
+ const bands = [];
46
+ for (const peak of picked) {
47
+ if (!Number.isFinite(peak.wavenumber))
48
+ continue;
49
+ bands.push({
50
+ spectrumId: spectrum.id,
51
+ wavenumber: peak.wavenumber,
52
+ absorbance: peak.absorbance,
53
+ // `ConvertedPeak.transmittance` is a fraction where the spectrum's own
54
+ // transmittance is a percentage; brought onto the one scale here so that
55
+ // nothing downstream has to remember which of the two it is holding.
56
+ transmittance: peak.transmittance * 100,
57
+ strength: peak.kind,
58
+ });
59
+ }
60
+ const kept = limit === undefined || bands.length <= limit
61
+ ? bands
62
+ : bands.toSorted(byDescendingAbsorbance).slice(0, limit);
63
+ return kept.toSorted(byAscendingWavenumber);
64
+ }
65
+ /**
66
+ * The spectrum as `ir-spectrum` wants it.
67
+ *
68
+ * The `t` variable is given its extremes, because that is what the strength
69
+ * letter is worked out from: without them the conversion assumes a spectrum
70
+ * running the full 0 to 100 percent, and every band of a shallow ATR trace that
71
+ * never leaves the eighties comes back weak.
72
+ * @param spectrum - The spectrum the viewer holds.
73
+ * @returns A measurement carrying all three variables.
74
+ */
75
+ function measurementOf(spectrum) {
76
+ const transmittance = {
77
+ label: 'Transmittance (%)',
78
+ units: '%',
79
+ symbol: 't',
80
+ data: spectrum.transmittance,
81
+ min: xMinValue(spectrum.transmittance),
82
+ max: xMaxValue(spectrum.transmittance),
83
+ };
84
+ return {
85
+ variables: {
86
+ x: {
87
+ label: 'Wavenumber',
88
+ units: '1/cm',
89
+ symbol: 'x',
90
+ data: spectrum.wavenumber,
91
+ },
92
+ // `y` is required of every measurement, and stands for whichever axis was
93
+ // recorded. Nothing here reads it — the picking is told to use `a` and the
94
+ // strength letter is read off `t` — so it carries the transmittance rather
95
+ // than a third copy of anything.
96
+ y: transmittance,
97
+ a: {
98
+ label: 'Absorbance',
99
+ units: '',
100
+ symbol: 'a',
101
+ data: spectrum.absorbance,
102
+ },
103
+ t: transmittance,
104
+ },
105
+ };
106
+ }
107
+ /**
108
+ * Order two bands by height, tallest first.
109
+ * @param first - One band.
110
+ * @param second - The other.
111
+ * @returns The comparison.
112
+ */
113
+ function byDescendingAbsorbance(first, second) {
114
+ return second.absorbance - first.absorbance;
115
+ }
116
+ /**
117
+ * Order two bands along the axis, lowest wavenumber first.
118
+ * @param first - One band.
119
+ * @param second - The other.
120
+ * @returns The comparison.
121
+ */
122
+ function byAscendingWavenumber(first, second) {
123
+ return first.wavenumber - second.wavenumber;
124
+ }
125
+ //# sourceMappingURL=pickBands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pickBands.js","sourceRoot":"","sources":["../../../src/ir/core/pickBands.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Writing spectra back out as JCAMP-DX, so what was loaded can be taken away.
3
+ *
4
+ * JCAMP is the format to write rather than two columns of text because it says
5
+ * what its second column means: an infrared spectrum is read either as
6
+ * absorbance or as percent transmittance, the two are the same measurement
7
+ * turned inside out, and a bare column of numbers leaves whoever opens it next
8
+ * to guess which. `##YUNITS=` states it, and `ir-spectrum` reads it back and
9
+ * derives the other axis from it, so a spectrum written here returns carrying
10
+ * both.
11
+ *
12
+ * The points are written as an `##PEAK TABLE=` of explicit `x y` pairs rather
13
+ * than as a compressed `##XYDATA=` record. An XYDATA record states a first
14
+ * wavenumber and an increment and lets the reader rebuild the axis, which is
15
+ * exact only for an evenly sampled trace — and an interferogram transformed onto
16
+ * a wavenumber grid is evenly sampled only until somebody trims or splices it.
17
+ * Explicit pairs round trip whatever the spacing.
18
+ */
19
+ import type { IrMode, IrSpectrum } from './irSpectrum.ts';
20
+ /** The extension a written spectrum is saved under. */
21
+ export declare const JCAMP_EXTENSION = ".jdx";
22
+ /** What a JCAMP-DX file is served as. */
23
+ export declare const JCAMP_MIME_TYPE = "chemical/x-jcamp-dx";
24
+ /** How the technique is named when the file that was read named nothing. */
25
+ export declare const DEFAULT_DATA_TYPE = "INFRARED SPECTRUM";
26
+ /**
27
+ * Write one spectrum as a JCAMP-DX block.
28
+ *
29
+ * The axis written is the one the instrument recorded wherever the file said
30
+ * which that was, and only otherwise the one being read. Writing what is on
31
+ * screen instead would export a spectrum that had been through a logarithm it
32
+ * was never measured with — and, where a band bottoms out at zero transmittance,
33
+ * an absorbance of infinity that no reader can take back.
34
+ * @param spectrum - The spectrum.
35
+ * @param mode - The axis being read, used when the file named none.
36
+ * @returns The block, `##TITLE=` through `##END=`.
37
+ */
38
+ export declare function irSpectrumToJcamp(spectrum: IrSpectrum, mode: IrMode): string;
39
+ /**
40
+ * Write every spectrum of a list as one JCAMP-DX file.
41
+ *
42
+ * One file rather than one download per spectrum: a browser asked for six files
43
+ * in a row blocks all but the first, and a sample and its background are wanted
44
+ * back as the pair they were compared as. The blocks go inside a `LINK` block,
45
+ * which is what JCAMP has for a container and what the instruments that write a
46
+ * pair already use, so dropping the file back on the chart brings the whole list
47
+ * back.
48
+ *
49
+ * A list of one is written as that block alone: wrapping a single spectrum in a
50
+ * container gains nothing, and the file is then exactly what asking for that one
51
+ * spectrum would have written.
52
+ * @param spectra - The spectra, in the order the list holds them.
53
+ * @param mode - The axis being read, used for a spectrum whose file named none.
54
+ * @param title - What to call the file's own outer block.
55
+ * @returns The file.
56
+ */
57
+ export declare function irSpectraToJcamp(spectra: readonly IrSpectrum[], mode: IrMode, title?: string): string;
58
+ //# sourceMappingURL=spectrumJcamp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spectrumJcamp.d.ts","sourceRoot":"","sources":["../../../src/ir/core/spectrumJcamp.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAIH,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE1D,uDAAuD;AACvD,eAAO,MAAM,eAAe,SAAS,CAAC;AAEtC,yCAAyC;AACzC,eAAO,MAAM,eAAe,wBAAwB,CAAC;AAErD,4EAA4E;AAC5E,eAAO,MAAM,iBAAiB,sBAAsB,CAAC;AAErD;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAQ5E;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,SAAS,UAAU,EAAE,EAC9B,IAAI,EAAE,MAAM,EACZ,KAAK,SAAuC,GAC3C,MAAM,CAeR"}
@@ -0,0 +1,156 @@
1
+ /**
2
+ * Writing spectra back out as JCAMP-DX, so what was loaded can be taken away.
3
+ *
4
+ * JCAMP is the format to write rather than two columns of text because it says
5
+ * what its second column means: an infrared spectrum is read either as
6
+ * absorbance or as percent transmittance, the two are the same measurement
7
+ * turned inside out, and a bare column of numbers leaves whoever opens it next
8
+ * to guess which. `##YUNITS=` states it, and `ir-spectrum` reads it back and
9
+ * derives the other axis from it, so a spectrum written here returns carrying
10
+ * both.
11
+ *
12
+ * The points are written as an `##PEAK TABLE=` of explicit `x y` pairs rather
13
+ * than as a compressed `##XYDATA=` record. An XYDATA record states a first
14
+ * wavenumber and an increment and lets the reader rebuild the axis, which is
15
+ * exact only for an evenly sampled trace — and an interferogram transformed onto
16
+ * a wavenumber grid is evenly sampled only until somebody trims or splices it.
17
+ * Explicit pairs round trip whatever the spacing.
18
+ */
19
+ import { fromJSON } from 'convert-to-jcamp';
20
+ /** The extension a written spectrum is saved under. */
21
+ export const JCAMP_EXTENSION = '.jdx';
22
+ /** What a JCAMP-DX file is served as. */
23
+ export const JCAMP_MIME_TYPE = 'chemical/x-jcamp-dx';
24
+ /** How the technique is named when the file that was read named nothing. */
25
+ export const DEFAULT_DATA_TYPE = 'INFRARED SPECTRUM';
26
+ /**
27
+ * Write one spectrum as a JCAMP-DX block.
28
+ *
29
+ * The axis written is the one the instrument recorded wherever the file said
30
+ * which that was, and only otherwise the one being read. Writing what is on
31
+ * screen instead would export a spectrum that had been through a logarithm it
32
+ * was never measured with — and, where a band bottoms out at zero transmittance,
33
+ * an absorbance of infinity that no reader can take back.
34
+ * @param spectrum - The spectrum.
35
+ * @param mode - The axis being read, used when the file named none.
36
+ * @returns The block, `##TITLE=` through `##END=`.
37
+ */
38
+ export function irSpectrumToJcamp(spectrum, mode) {
39
+ const written = spectrum.origin.recorded ?? mode;
40
+ const values = written === 'absorbance' ? spectrum.absorbance : spectrum.transmittance;
41
+ return fromJSON({ x: spectrum.wavenumber, y: values }, { info: infoRecords(spectrum, written), meta: metaRecords(spectrum) });
42
+ }
43
+ /**
44
+ * Write every spectrum of a list as one JCAMP-DX file.
45
+ *
46
+ * One file rather than one download per spectrum: a browser asked for six files
47
+ * in a row blocks all but the first, and a sample and its background are wanted
48
+ * back as the pair they were compared as. The blocks go inside a `LINK` block,
49
+ * which is what JCAMP has for a container and what the instruments that write a
50
+ * pair already use, so dropping the file back on the chart brings the whole list
51
+ * back.
52
+ *
53
+ * A list of one is written as that block alone: wrapping a single spectrum in a
54
+ * container gains nothing, and the file is then exactly what asking for that one
55
+ * spectrum would have written.
56
+ * @param spectra - The spectra, in the order the list holds them.
57
+ * @param mode - The axis being read, used for a spectrum whose file named none.
58
+ * @param title - What to call the file's own outer block.
59
+ * @returns The file.
60
+ */
61
+ export function irSpectraToJcamp(spectra, mode, title = `${spectra.length} infrared spectra`) {
62
+ const only = spectra.length === 1 ? spectra[0] : undefined;
63
+ if (only !== undefined)
64
+ return irSpectrumToJcamp(only, mode);
65
+ const blocks = [];
66
+ for (const spectrum of spectra) {
67
+ blocks.push(irSpectrumToJcamp(spectrum, mode));
68
+ }
69
+ return `##TITLE=${recordValue(title)}
70
+ ##JCAMP-DX=4.24
71
+ ##DATA TYPE=LINK
72
+ ##BLOCKS=${blocks.length}
73
+ ${blocks.join('\n')}
74
+ ##END=
75
+ `;
76
+ }
77
+ /**
78
+ * The standard records of a block: what it is called, and what its axes are.
79
+ * @param spectrum - The spectrum.
80
+ * @param written - The axis being written.
81
+ * @returns The records, as `convert-to-jcamp` takes them.
82
+ */
83
+ function infoRecords(spectrum, written) {
84
+ return {
85
+ title: recordValue(spectrum.name),
86
+ // The technique as the file stated it, so a Raman spectrum that was opened
87
+ // here is not written back out claiming to be infrared.
88
+ dataType: technique(spectrum) ?? DEFAULT_DATA_TYPE,
89
+ xUnits: '1/CM',
90
+ // Spelled the way `ir-spectrum` reads it: it takes the axis to be
91
+ // transmittance when the label says `trans`, and to be a percentage rather
92
+ // than a fraction when it carries a `%`.
93
+ yUnits: written === 'absorbance' ? 'ABSORBANCE' : 'Transmittance (%)',
94
+ };
95
+ }
96
+ /**
97
+ * The `$`-prefixed records of a block: the acquisition, as the file stated it.
98
+ *
99
+ * The table's labels are the record names themselves — the reader lists whatever
100
+ * `##$` records a block carried, under their own names — so writing it back is a
101
+ * matter of putting the `$` in front again. `Technique` is the one row that is
102
+ * not a record of that bag: it is the block's `##DATA TYPE=`, and it goes back
103
+ * there rather than becoming a user-defined record of its own.
104
+ * @param spectrum - The spectrum.
105
+ * @returns The records, keyed without their `##$`.
106
+ */
107
+ function metaRecords(spectrum) {
108
+ const records = {};
109
+ const fields = spectrum.meta?.fields ?? [];
110
+ for (const field of fields) {
111
+ if (field.label === TECHNIQUE)
112
+ continue;
113
+ records[recordKey(field.label)] = recordValue(field.value);
114
+ }
115
+ return records;
116
+ }
117
+ /** The row of the table that holds the block's own data type. */
118
+ const TECHNIQUE = 'Technique';
119
+ /**
120
+ * What the file said the spectrum was, if it said.
121
+ * @param spectrum - The spectrum.
122
+ * @returns The technique, or `undefined` when the file stated none.
123
+ */
124
+ function technique(spectrum) {
125
+ for (const field of spectrum.meta?.fields ?? []) {
126
+ if (field.label === TECHNIQUE)
127
+ return recordValue(field.value);
128
+ }
129
+ return undefined;
130
+ }
131
+ /**
132
+ * A label put where a JCAMP record's name goes.
133
+ *
134
+ * A record name runs to the `=` and holds no whitespace, so a label that picked
135
+ * up a space on its way through some other tool would otherwise write a record
136
+ * whose name is its first word and whose value starts with the rest of it.
137
+ * @param label - The row's label.
138
+ * @returns It as a record name.
139
+ */
140
+ function recordKey(label) {
141
+ return label.replaceAll(/[\s=]+/g, '_');
142
+ }
143
+ /**
144
+ * A value put where a JCAMP record's value goes.
145
+ *
146
+ * A record is one line and `$$` opens a comment that runs to the end of it, so a
147
+ * value with a newline in it would otherwise either break the file in two or
148
+ * lose its tail. Both failures are silent on the way back in, which is why this
149
+ * is done to every value rather than to the ones known to be long.
150
+ * @param value - The value as it is held.
151
+ * @returns The value as one line, with no comment marker in it.
152
+ */
153
+ function recordValue(value) {
154
+ return value.replaceAll(/\s+/g, ' ').replaceAll('$$', '$').trim();
155
+ }
156
+ //# sourceMappingURL=spectrumJcamp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spectrumJcamp.js","sourceRoot":"","sources":["../../../src/ir/core/spectrumJcamp.ts"],"names":[],"mappings":"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"}