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,83 @@
1
+ /**
2
+ * Matching picked bands against the correlation table.
3
+ *
4
+ * Every assignment whose range contains the band is kept, and that is the whole
5
+ * design: infrared assignment is not a lookup with one answer, and a viewer that
6
+ * showed only the best-fitting vibration would be asserting a structure the
7
+ * spectrum does not determine. A band at 1715 cm⁻¹ comes back as four
8
+ * candidates, ordered so the most specific claim reads first, and choosing
9
+ * between them is the chemist's job — which is what the `note` on each is for.
10
+ */
11
+ import type { BandAssignment } from './bandAssignments.ts';
12
+ import type { IrBand } from './irBand.ts';
13
+ /** One band, with everything it might be. */
14
+ export interface AssignedBand {
15
+ /** The band that was picked. */
16
+ band: IrBand;
17
+ /**
18
+ * Every vibration whose range contains it, narrowest range first.
19
+ *
20
+ * Narrowest first because a narrow range is a more specific claim: at
21
+ * 1745 cm⁻¹ the ester's fifteen-wavenumber window says more than the
22
+ * anhydride's ninety, so it is the one worth reading first. Empty for a band
23
+ * in a region the table says nothing about, which is most of the fingerprint.
24
+ */
25
+ candidates: BandAssignment[];
26
+ }
27
+ /** How bands are assigned. */
28
+ export interface AssignBandsOptions {
29
+ /**
30
+ * The table to match against.
31
+ * @default BAND_ASSIGNMENTS
32
+ */
33
+ assignments?: readonly BandAssignment[];
34
+ /**
35
+ * How far outside a range a band may still fall, in cm⁻¹.
36
+ *
37
+ * The ranges are conventional values rounded to tens, and a real band sits a
38
+ * few wavenumbers either side of where a table puts it — a ketone at 1703 is
39
+ * a ketone. Widening every range by a little is honest about that, where
40
+ * matching exactly would leave the strongest band in the spectrum unassigned
41
+ * for being two wavenumbers low.
42
+ * @default 5
43
+ */
44
+ tolerance?: number;
45
+ /**
46
+ * Whether a band whose strength disagrees with the table is still offered.
47
+ *
48
+ * It is, by default. A weak band where the table expects a strong one is
49
+ * evidence about concentration or about the assignment being wrong, and either
50
+ * way it is evidence the reader should see rather than have filtered away.
51
+ * @default true
52
+ */
53
+ keepStrengthMismatch?: boolean;
54
+ }
55
+ /**
56
+ * Assign every band, keeping every candidate.
57
+ * @param bands - The bands that were picked.
58
+ * @param options - The table, and how tightly to match it.
59
+ * @returns One entry per band, in the order the bands were given.
60
+ */
61
+ export declare function assignBands(bands: readonly IrBand[], options?: AssignBandsOptions): AssignedBand[];
62
+ /**
63
+ * How many of the bands the table had something to say about.
64
+ *
65
+ * Reported as a count rather than a fraction, because the denominator is the
66
+ * number of bands picked and that follows the picking threshold — a coverage
67
+ * percentage would move when somebody adjusted a slider, and read as the
68
+ * assignment having improved.
69
+ * @param assigned - The assigned bands.
70
+ * @returns How many carry at least one candidate.
71
+ */
72
+ export declare function countAssigned(assigned: readonly AssignedBand[]): number;
73
+ /**
74
+ * The name to write on a band, when there is room for one line.
75
+ *
76
+ * The narrowest candidate's group and vibration, which is the first of the
77
+ * ranked list — the same order the panel shows, so the chart and the table never
78
+ * disagree about which claim leads.
79
+ * @param entry - One assigned band.
80
+ * @returns The label, or `null` when nothing was assigned.
81
+ */
82
+ export declare function bandLabel(entry: AssignedBand): string | null;
83
+ //# sourceMappingURL=assignBands.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assignBands.d.ts","sourceRoot":"","sources":["../../../src/ir/core/assignBands.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,6CAA6C;AAC7C,MAAM,WAAW,YAAY;IAC3B,gCAAgC;IAChC,IAAI,EAAE,MAAM,CAAC;IACb;;;;;;;OAOG;IACH,UAAU,EAAE,cAAc,EAAE,CAAC;CAC9B;AAED,8BAA8B;AAC9B,MAAM,WAAW,kBAAkB;IACjC;;;OAGG;IACH,WAAW,CAAC,EAAE,SAAS,cAAc,EAAE,CAAC;IACxC;;;;;;;;;OASG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;;;OAOG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,SAAS,MAAM,EAAE,EACxB,OAAO,GAAE,kBAAuB,GAC/B,YAAY,EAAE,CA6BhB;AAED;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,SAAS,YAAY,EAAE,GAAG,MAAM,CAMvE;AAED;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,GAAG,IAAI,CAI5D"}
@@ -0,0 +1,83 @@
1
+ /**
2
+ * Matching picked bands against the correlation table.
3
+ *
4
+ * Every assignment whose range contains the band is kept, and that is the whole
5
+ * design: infrared assignment is not a lookup with one answer, and a viewer that
6
+ * showed only the best-fitting vibration would be asserting a structure the
7
+ * spectrum does not determine. A band at 1715 cm⁻¹ comes back as four
8
+ * candidates, ordered so the most specific claim reads first, and choosing
9
+ * between them is the chemist's job — which is what the `note` on each is for.
10
+ */
11
+ import { BAND_ASSIGNMENTS } from "./bandAssignments.js";
12
+ /**
13
+ * Assign every band, keeping every candidate.
14
+ * @param bands - The bands that were picked.
15
+ * @param options - The table, and how tightly to match it.
16
+ * @returns One entry per band, in the order the bands were given.
17
+ */
18
+ export function assignBands(bands, options = {}) {
19
+ const { assignments = BAND_ASSIGNMENTS, tolerance = 5, keepStrengthMismatch = true, } = options;
20
+ const assigned = new Array(bands.length);
21
+ for (let index = 0; index < bands.length; index++) {
22
+ const band = bands[index];
23
+ const candidates = [];
24
+ for (const assignment of assignments) {
25
+ if (band.wavenumber < assignment.from - tolerance ||
26
+ band.wavenumber > assignment.to + tolerance) {
27
+ continue;
28
+ }
29
+ if (!keepStrengthMismatch && assignment.strength !== band.strength) {
30
+ continue;
31
+ }
32
+ candidates.push(assignment);
33
+ }
34
+ assigned[index] = {
35
+ band,
36
+ candidates: candidates.toSorted(byNarrowestRange),
37
+ };
38
+ }
39
+ return assigned;
40
+ }
41
+ /**
42
+ * How many of the bands the table had something to say about.
43
+ *
44
+ * Reported as a count rather than a fraction, because the denominator is the
45
+ * number of bands picked and that follows the picking threshold — a coverage
46
+ * percentage would move when somebody adjusted a slider, and read as the
47
+ * assignment having improved.
48
+ * @param assigned - The assigned bands.
49
+ * @returns How many carry at least one candidate.
50
+ */
51
+ export function countAssigned(assigned) {
52
+ let count = 0;
53
+ for (const entry of assigned) {
54
+ if (entry.candidates.length > 0)
55
+ count++;
56
+ }
57
+ return count;
58
+ }
59
+ /**
60
+ * The name to write on a band, when there is room for one line.
61
+ *
62
+ * The narrowest candidate's group and vibration, which is the first of the
63
+ * ranked list — the same order the panel shows, so the chart and the table never
64
+ * disagree about which claim leads.
65
+ * @param entry - One assigned band.
66
+ * @returns The label, or `null` when nothing was assigned.
67
+ */
68
+ export function bandLabel(entry) {
69
+ const best = entry.candidates[0];
70
+ if (best === undefined)
71
+ return null;
72
+ return `${best.group} ${best.vibration}`;
73
+ }
74
+ /**
75
+ * Order two assignments by how specific they are, narrowest range first.
76
+ * @param first - One assignment.
77
+ * @param second - The other.
78
+ * @returns The comparison; equal widths keep the table's own order.
79
+ */
80
+ function byNarrowestRange(first, second) {
81
+ return first.to - first.from - (second.to - second.from);
82
+ }
83
+ //# sourceMappingURL=assignBands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assignBands.js","sourceRoot":"","sources":["../../../src/ir/core/assignBands.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AA+CxD;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CACzB,KAAwB,EACxB,UAA8B,EAAE;IAEhC,MAAM,EACJ,WAAW,GAAG,gBAAgB,EAC9B,SAAS,GAAG,CAAC,EACb,oBAAoB,GAAG,IAAI,GAC5B,GAAG,OAAO,CAAC;IAEZ,MAAM,QAAQ,GAAmB,IAAI,KAAK,CAAe,KAAK,CAAC,MAAM,CAAC,CAAC;IACvE,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;QAClD,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAW,CAAC;QACpC,MAAM,UAAU,GAAqB,EAAE,CAAC;QACxC,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;YACrC,IACE,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,IAAI,GAAG,SAAS;gBAC7C,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,EAAE,GAAG,SAAS,EAC3C,CAAC;gBACD,SAAS;YACX,CAAC;YACD,IAAI,CAAC,oBAAoB,IAAI,UAAU,CAAC,QAAQ,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACnE,SAAS;YACX,CAAC;YACD,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC9B,CAAC;QACD,QAAQ,CAAC,KAAK,CAAC,GAAG;YAChB,IAAI;YACJ,UAAU,EAAE,UAAU,CAAC,QAAQ,CAAC,gBAAgB,CAAC;SAClD,CAAC;IACJ,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,aAAa,CAAC,QAAiC;IAC7D,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;QAC7B,IAAI,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC;YAAE,KAAK,EAAE,CAAC;IAC3C,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,SAAS,CAAC,KAAmB;IAC3C,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IACjC,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACpC,OAAO,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;AAC3C,CAAC;AAED;;;;;GAKG;AACH,SAAS,gBAAgB,CACvB,KAAqB,EACrB,MAAsB;IAEtB,OAAO,KAAK,CAAC,EAAE,GAAG,KAAK,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;AAC3D,CAAC"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * The correlation table: which vibration a band at a given wavenumber may be.
3
+ *
4
+ * This is the infrared analogue of a fragment set — what a producer *claims*
5
+ * about a spectrum — with one difference that shapes the whole design: a mass
6
+ * fragment claims one m/z, while a vibration claims a **range**, and the ranges
7
+ * overlap heavily on purpose. A band at 1715 cm⁻¹ is an ester, an aldehyde, a
8
+ * ketone and a carboxylic acid until something else decides between them, and a
9
+ * table that returned one answer there would be inventing chemistry.
10
+ *
11
+ * The ranges are the conventional teaching values, rounded to the tens that a
12
+ * printed table uses. They are deliberately not narrowed to look precise: a
13
+ * conjugated ketone really does absorb below an unconjugated one, and a table
14
+ * that excluded it would read as ruling the ketone out.
15
+ */
16
+ import type { IrBandStrength } from './irBand.ts';
17
+ /** One vibration a band may be, as a correlation table states it. */
18
+ export interface BandAssignment {
19
+ /** Identity, stable so a selection survives a re-pick. */
20
+ id: string;
21
+ /** The functional group it belongs to, as a chemist names it. */
22
+ group: string;
23
+ /** The motion itself: which bond, and how it moves. */
24
+ vibration: string;
25
+ /** Lowest wavenumber of the range, in cm⁻¹. */
26
+ from: number;
27
+ /** Highest wavenumber of the range, in cm⁻¹. */
28
+ to: number;
29
+ /** How strong the band usually is, in the table's own letters. */
30
+ strength: IrBandStrength;
31
+ /**
32
+ * What tells this assignment apart from the others it overlaps — the shape of
33
+ * the band, a partner band elsewhere, a region it must be absent from.
34
+ * @default undefined
35
+ */
36
+ note?: string;
37
+ }
38
+ /**
39
+ * The table, in ascending order of the low end of each range.
40
+ *
41
+ * Ordered so that a reader scanning it moves along the axis, and so that the
42
+ * fingerprint region below 1500 cm⁻¹ — where assignments are least decisive —
43
+ * sits together at the top rather than being interleaved with the diagnostic
44
+ * stretches above it.
45
+ */
46
+ export declare const BAND_ASSIGNMENTS: readonly BandAssignment[];
47
+ //# sourceMappingURL=bandAssignments.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bandAssignments.d.ts","sourceRoot":"","sources":["../../../src/ir/core/bandAssignments.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD,qEAAqE;AACrE,MAAM,WAAW,cAAc;IAC7B,0DAA0D;IAC1D,EAAE,EAAE,MAAM,CAAC;IACX,iEAAiE;IACjE,KAAK,EAAE,MAAM,CAAC;IACd,uDAAuD;IACvD,SAAS,EAAE,MAAM,CAAC;IAClB,+CAA+C;IAC/C,IAAI,EAAE,MAAM,CAAC;IACb,gDAAgD;IAChD,EAAE,EAAE,MAAM,CAAC;IACX,kEAAkE;IAClE,QAAQ,EAAE,cAAc,CAAC;IACzB;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,gBAAgB,EAAE,SAAS,cAAc,EAwRrD,CAAC"}
@@ -0,0 +1,305 @@
1
+ /**
2
+ * The correlation table: which vibration a band at a given wavenumber may be.
3
+ *
4
+ * This is the infrared analogue of a fragment set — what a producer *claims*
5
+ * about a spectrum — with one difference that shapes the whole design: a mass
6
+ * fragment claims one m/z, while a vibration claims a **range**, and the ranges
7
+ * overlap heavily on purpose. A band at 1715 cm⁻¹ is an ester, an aldehyde, a
8
+ * ketone and a carboxylic acid until something else decides between them, and a
9
+ * table that returned one answer there would be inventing chemistry.
10
+ *
11
+ * The ranges are the conventional teaching values, rounded to the tens that a
12
+ * printed table uses. They are deliberately not narrowed to look precise: a
13
+ * conjugated ketone really does absorb below an unconjugated one, and a table
14
+ * that excluded it would read as ruling the ketone out.
15
+ */
16
+ /**
17
+ * The table, in ascending order of the low end of each range.
18
+ *
19
+ * Ordered so that a reader scanning it moves along the axis, and so that the
20
+ * fingerprint region below 1500 cm⁻¹ — where assignments are least decisive —
21
+ * sits together at the top rather than being interleaved with the diagnostic
22
+ * stretches above it.
23
+ */
24
+ export const BAND_ASSIGNMENTS = [
25
+ {
26
+ id: 'c-br-stretch',
27
+ group: 'alkyl bromide',
28
+ vibration: 'C–Br stretch',
29
+ from: 500,
30
+ to: 600,
31
+ strength: 'S',
32
+ },
33
+ {
34
+ id: 'c-cl-stretch',
35
+ group: 'alkyl chloride',
36
+ vibration: 'C–Cl stretch',
37
+ from: 600,
38
+ to: 800,
39
+ strength: 'S',
40
+ },
41
+ {
42
+ id: 'aromatic-ch-oop',
43
+ group: 'arene',
44
+ vibration: 'C–H out-of-plane bend',
45
+ from: 690,
46
+ to: 900,
47
+ strength: 'S',
48
+ note: 'How many bands, and where, is what tells a substitution pattern apart',
49
+ },
50
+ {
51
+ id: 'alkene-ch-oop',
52
+ group: 'alkene',
53
+ vibration: '=C–H out-of-plane bend',
54
+ from: 890,
55
+ to: 990,
56
+ strength: 'S',
57
+ note: 'A terminal vinyl gives two, near 910 and 990',
58
+ },
59
+ {
60
+ id: 'c-o-stretch',
61
+ group: 'alcohol, ether, ester',
62
+ vibration: 'C–O stretch',
63
+ from: 1000,
64
+ to: 1300,
65
+ strength: 'S',
66
+ note: 'Strong and broad; an ester shows two, the higher one near 1200',
67
+ },
68
+ {
69
+ id: 'c-f-stretch',
70
+ group: 'alkyl fluoride',
71
+ vibration: 'C–F stretch',
72
+ from: 1000,
73
+ to: 1400,
74
+ strength: 'S',
75
+ },
76
+ {
77
+ id: 'c-n-stretch',
78
+ group: 'amine, amide',
79
+ vibration: 'C–N stretch',
80
+ from: 1080,
81
+ to: 1360,
82
+ strength: 'm',
83
+ },
84
+ {
85
+ id: 'nitro-symmetric',
86
+ group: 'nitro',
87
+ vibration: 'N–O symmetric stretch',
88
+ from: 1300,
89
+ to: 1390,
90
+ strength: 'S',
91
+ note: 'Never alone: the asymmetric partner sits near 1500–1560',
92
+ },
93
+ {
94
+ id: 'oh-bend',
95
+ group: 'alcohol',
96
+ vibration: 'O–H bend',
97
+ from: 1330,
98
+ to: 1430,
99
+ strength: 'm',
100
+ },
101
+ {
102
+ id: 'alkane-ch-bend',
103
+ group: 'alkane',
104
+ vibration: 'C–H bend',
105
+ from: 1370,
106
+ to: 1470,
107
+ strength: 'm',
108
+ note: 'A gem-dimethyl splits the 1380 band in two',
109
+ },
110
+ {
111
+ id: 'aromatic-cc-stretch',
112
+ group: 'arene',
113
+ vibration: 'C=C aromatic stretch',
114
+ from: 1450,
115
+ to: 1600,
116
+ strength: 'm',
117
+ note: 'Usually a pair, near 1500 and 1600',
118
+ },
119
+ {
120
+ id: 'nitro-asymmetric',
121
+ group: 'nitro',
122
+ vibration: 'N–O asymmetric stretch',
123
+ from: 1500,
124
+ to: 1560,
125
+ strength: 'S',
126
+ },
127
+ {
128
+ id: 'nh-bend',
129
+ group: 'amine, amide',
130
+ vibration: 'N–H bend',
131
+ from: 1550,
132
+ to: 1640,
133
+ strength: 'm',
134
+ },
135
+ {
136
+ id: 'alkene-cc-stretch',
137
+ group: 'alkene',
138
+ vibration: 'C=C stretch',
139
+ from: 1620,
140
+ to: 1680,
141
+ strength: 'w',
142
+ note: 'Weak, and absent altogether on a symmetric alkene',
143
+ },
144
+ {
145
+ id: 'amide-co-stretch',
146
+ group: 'amide',
147
+ vibration: 'C=O stretch',
148
+ from: 1630,
149
+ to: 1690,
150
+ strength: 'S',
151
+ note: 'The lowest carbonyl there is; look for N–H above 3300 to confirm',
152
+ },
153
+ {
154
+ id: 'acid-co-stretch',
155
+ group: 'carboxylic acid',
156
+ vibration: 'C=O stretch',
157
+ from: 1700,
158
+ to: 1725,
159
+ strength: 'S',
160
+ note: 'Confirmed by the very broad O–H between 2500 and 3300',
161
+ },
162
+ {
163
+ id: 'ketone-co-stretch',
164
+ group: 'ketone',
165
+ vibration: 'C=O stretch',
166
+ from: 1705,
167
+ to: 1725,
168
+ strength: 'S',
169
+ note: 'Conjugation drops it by about 30; a strained ring raises it',
170
+ },
171
+ {
172
+ id: 'aldehyde-co-stretch',
173
+ group: 'aldehyde',
174
+ vibration: 'C=O stretch',
175
+ from: 1720,
176
+ to: 1740,
177
+ strength: 'S',
178
+ note: 'Confirmed by the C–H pair near 2720 and 2820',
179
+ },
180
+ {
181
+ id: 'ester-co-stretch',
182
+ group: 'ester',
183
+ vibration: 'C=O stretch',
184
+ from: 1735,
185
+ to: 1750,
186
+ strength: 'S',
187
+ note: 'Confirmed by the strong C–O between 1000 and 1300',
188
+ },
189
+ {
190
+ id: 'acid-chloride-co-stretch',
191
+ group: 'acid chloride',
192
+ vibration: 'C=O stretch',
193
+ from: 1770,
194
+ to: 1815,
195
+ strength: 'S',
196
+ },
197
+ {
198
+ id: 'anhydride-co-stretch',
199
+ group: 'anhydride',
200
+ vibration: 'C=O stretch',
201
+ from: 1740,
202
+ to: 1830,
203
+ strength: 'S',
204
+ note: 'Two bands, about 60 apart, which is what names it',
205
+ },
206
+ {
207
+ id: 'nitrile-stretch',
208
+ group: 'nitrile',
209
+ vibration: 'C≡N stretch',
210
+ from: 2210,
211
+ to: 2260,
212
+ strength: 'm',
213
+ note: 'Sharp, and in a region almost nothing else occupies',
214
+ },
215
+ {
216
+ id: 'alkyne-cc-stretch',
217
+ group: 'alkyne',
218
+ vibration: 'C≡C stretch',
219
+ from: 2100,
220
+ to: 2260,
221
+ strength: 'w',
222
+ note: 'Weak, and absent on a symmetric internal alkyne',
223
+ },
224
+ {
225
+ id: 'aldehyde-ch-stretch',
226
+ group: 'aldehyde',
227
+ vibration: 'C–H stretch',
228
+ from: 2695,
229
+ to: 2830,
230
+ strength: 'm',
231
+ note: 'The diagnostic pair near 2720 and 2820',
232
+ },
233
+ {
234
+ id: 'acid-oh-stretch',
235
+ group: 'carboxylic acid',
236
+ vibration: 'O–H stretch',
237
+ from: 2500,
238
+ to: 3300,
239
+ strength: 'S',
240
+ note: 'Very broad — it runs under the C–H bands rather than beside them',
241
+ },
242
+ {
243
+ id: 'alkane-ch-stretch',
244
+ group: 'alkane',
245
+ vibration: 'C–H stretch',
246
+ from: 2850,
247
+ to: 3000,
248
+ strength: 'S',
249
+ note: 'Below 3000, which is what separates it from an alkene C–H',
250
+ },
251
+ {
252
+ id: 'alkene-ch-stretch',
253
+ group: 'alkene',
254
+ vibration: '=C–H stretch',
255
+ from: 3000,
256
+ to: 3100,
257
+ strength: 'm',
258
+ note: 'Above 3000, and never alone: the C=C sits near 1650',
259
+ },
260
+ {
261
+ id: 'aromatic-ch-stretch',
262
+ group: 'arene',
263
+ vibration: 'C–H stretch',
264
+ from: 3000,
265
+ to: 3100,
266
+ strength: 'm',
267
+ },
268
+ {
269
+ id: 'alkyne-ch-stretch',
270
+ group: 'alkyne',
271
+ vibration: '≡C–H stretch',
272
+ from: 3260,
273
+ to: 3330,
274
+ strength: 'S',
275
+ note: 'Sharp, where an O–H in the same place is broad',
276
+ },
277
+ {
278
+ id: 'alcohol-oh-stretch',
279
+ group: 'alcohol',
280
+ vibration: 'O–H stretch',
281
+ from: 3200,
282
+ to: 3600,
283
+ strength: 'S',
284
+ note: 'Broad when hydrogen bonded, which is nearly always',
285
+ },
286
+ {
287
+ id: 'nh-stretch',
288
+ group: 'amine, amide',
289
+ vibration: 'N–H stretch',
290
+ from: 3300,
291
+ to: 3500,
292
+ strength: 'm',
293
+ note: 'A primary amine gives two bands, a secondary one',
294
+ },
295
+ {
296
+ id: 'free-oh-stretch',
297
+ group: 'alcohol',
298
+ vibration: 'O–H stretch, not hydrogen bonded',
299
+ from: 3580,
300
+ to: 3650,
301
+ strength: 'm',
302
+ note: 'Sharp, and only in a dilute or gas-phase spectrum',
303
+ },
304
+ ];
305
+ //# sourceMappingURL=bandAssignments.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bandAssignments.js","sourceRoot":"","sources":["../../../src/ir/core/bandAssignments.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,93 @@
1
+ /**
2
+ * Where every band's mark and label go, worked out before anything is drawn.
3
+ *
4
+ * Kept apart from the component because it is the part worth testing: which
5
+ * bands get a label, which way their lines stack, how far a crowded label may
6
+ * slide from the band it names, and which are dropped rather than drawn
7
+ * somewhere misleading. All of that is arithmetic over numbers, and none of it
8
+ * needs a DOM.
9
+ */
10
+ import type { PlotRect } from '../../chart/core/chartGeometry.ts';
11
+ import type { ChartScale } from '../../chart/core/chartScale.ts';
12
+ import type { AssignedBand } from './assignBands.ts';
13
+ import type { IrBand } from './irBand.ts';
14
+ import type { IrMode } from './irSpectrum.ts';
15
+ /** One band, and where everything about it is drawn. */
16
+ export interface BandLabelPlan {
17
+ /** The band itself. */
18
+ band: IrBand;
19
+ /** Where its tip sits horizontally, in user units of the SVG. */
20
+ tipX: number;
21
+ /** Where its tip sits vertically. */
22
+ tipY: number;
23
+ /**
24
+ * Where its label is centred, `NaN` when the label was dropped for having
25
+ * been slid too far from the band to belong to it.
26
+ */
27
+ labelX: number;
28
+ /** The baseline of each line of the label, in the order the lines are given. */
29
+ baselines: Float64Array;
30
+ /** What the label says, farthest line from the band first. */
31
+ lines: string[];
32
+ }
33
+ /** What the plan is worked out from. */
34
+ export interface BandLabelPlanOptions {
35
+ /** The bands to name, with whatever the table said about them. */
36
+ assigned: readonly AssignedBand[];
37
+ /** Where the plot sits inside the SVG. */
38
+ plot: PlotRect;
39
+ /** The wavenumber axis as it is currently zoomed. */
40
+ xScale: ChartScale;
41
+ /** The value axis as it is currently zoomed. */
42
+ yScale: ChartScale;
43
+ /** Which value axis is being drawn, which decides which way labels stack. */
44
+ mode: IrMode;
45
+ /**
46
+ * Whether each label names the assignment as well as the wavenumber.
47
+ *
48
+ * The assignment is the longer line by far — `carboxylic acid C=O stretch`
49
+ * against `1710` — so a chart showing a dozen bands is legible with the
50
+ * wavenumbers alone and unreadable with both.
51
+ * @default false
52
+ */
53
+ showAssignments?: boolean;
54
+ /**
55
+ * At most how many bands to name.
56
+ *
57
+ * Marks are drawn on every band regardless; this only bounds the labels, since
58
+ * a mark costs three pixels and a two-line label costs sixty.
59
+ * @default 12
60
+ */
61
+ limit?: number;
62
+ }
63
+ /**
64
+ * Work out where every band's label goes.
65
+ *
66
+ * Only the bands inside the window are considered, so a zoom into one region
67
+ * gives its bands the whole width to be named in rather than sharing it with the
68
+ * hundred outside the plot.
69
+ *
70
+ * The strongest bands win the labels when there are more than `limit`, because a
71
+ * strong band is the one a reader is looking for; but they come back in ascending
72
+ * wavenumber — the order `pickBands` returns and the order a band table lists —
73
+ * rather than in the order they were chosen. Which is right to left on screen,
74
+ * since the axis is drawn backwards; nothing depends on it, because the declutter
75
+ * sweep sorts by pixel itself.
76
+ * @param options - The bands, the axes and how much to say.
77
+ * @returns One plan per band that is inside the window, in axis order.
78
+ */
79
+ export declare function planBandLabels(options: BandLabelPlanOptions): BandLabelPlan[];
80
+ /**
81
+ * How wide a label is taken to be while it is being spaced out.
82
+ *
83
+ * A wavenumber is four digits and an assignment is far wider, but the width used
84
+ * for spacing is the wavenumber's: spacing on the longer line would push every
85
+ * label so far apart that only three fit, and an assignment is only ever shown
86
+ * when a handful of bands are named.
87
+ */
88
+ export declare const LABEL_WIDTH = 34;
89
+ /** The clear space kept between two neighbouring labels. */
90
+ export declare const LABEL_GAP = 6;
91
+ /** How far the mark reaches from the tip of a band, in pixels. */
92
+ export declare const BAND_MARK: 10;
93
+ //# sourceMappingURL=bandLabelPlan.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bandLabelPlan.d.ts","sourceRoot":"","sources":["../../../src/ir/core/bandLabelPlan.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAC;AAClE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAKjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAErD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAG1C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAE9C,wDAAwD;AACxD,MAAM,WAAW,aAAa;IAC5B,uBAAuB;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,iEAAiE;IACjE,IAAI,EAAE,MAAM,CAAC;IACb,qCAAqC;IACrC,IAAI,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,MAAM,EAAE,MAAM,CAAC;IACf,gFAAgF;IAChF,SAAS,EAAE,YAAY,CAAC;IACxB,8DAA8D;IAC9D,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,wCAAwC;AACxC,MAAM,WAAW,oBAAoB;IACnC,kEAAkE;IAClE,QAAQ,EAAE,SAAS,YAAY,EAAE,CAAC;IAClC,0CAA0C;IAC1C,IAAI,EAAE,QAAQ,CAAC;IACf,qDAAqD;IACrD,MAAM,EAAE,UAAU,CAAC;IACnB,gDAAgD;IAChD,MAAM,EAAE,UAAU,CAAC;IACnB,6EAA6E;IAC7E,IAAI,EAAE,MAAM,CAAC;IACb;;;;;;;OAOG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;;;;OAMG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,oBAAoB,GAAG,aAAa,EAAE,CAuE7E;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,WAAW,KAAK,CAAC;AAE9B,4DAA4D;AAC5D,eAAO,MAAM,SAAS,IAAI,CAAC;AAE3B,kEAAkE;AAClE,eAAO,MAAM,SAAS,IAAqB,CAAC"}