react-cheminfo 0.28.0 → 0.30.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 (742) hide show
  1. package/README.md +79 -26
  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/chrome/ui/AccountButton.d.ts +76 -0
  151. package/lib/chrome/ui/AccountButton.d.ts.map +1 -0
  152. package/lib/chrome/ui/AccountButton.js +66 -0
  153. package/lib/chrome/ui/AccountButton.js.map +1 -0
  154. package/lib/chrome/ui/index.d.ts +2 -0
  155. package/lib/chrome/ui/index.d.ts.map +1 -1
  156. package/lib/chrome/ui/index.js +1 -0
  157. package/lib/chrome/ui/index.js.map +1 -1
  158. package/lib/clipboard/core/copyPng.d.ts +13 -0
  159. package/lib/clipboard/core/copyPng.d.ts.map +1 -0
  160. package/lib/clipboard/core/copyPng.js +19 -0
  161. package/lib/clipboard/core/copyPng.js.map +1 -0
  162. package/lib/clipboard/core/index.d.ts +1 -0
  163. package/lib/clipboard/core/index.d.ts.map +1 -1
  164. package/lib/clipboard/core/index.js +1 -0
  165. package/lib/clipboard/core/index.js.map +1 -1
  166. package/lib/clipboard/ui/ClickToCopy.d.ts +6 -0
  167. package/lib/clipboard/ui/ClickToCopy.d.ts.map +1 -1
  168. package/lib/clipboard/ui/ClickToCopy.js +3 -3
  169. package/lib/clipboard/ui/ClickToCopy.js.map +1 -1
  170. package/lib/core.d.ts +1 -0
  171. package/lib/core.d.ts.map +1 -1
  172. package/lib/core.js +1 -0
  173. package/lib/core.js.map +1 -1
  174. package/lib/download/core/exportStyles.d.ts +22 -0
  175. package/lib/download/core/exportStyles.d.ts.map +1 -0
  176. package/lib/download/core/exportStyles.js +19 -0
  177. package/lib/download/core/exportStyles.js.map +1 -0
  178. package/lib/download/core/imageResolution.d.ts +88 -0
  179. package/lib/download/core/imageResolution.d.ts.map +1 -0
  180. package/lib/download/core/imageResolution.js +77 -0
  181. package/lib/download/core/imageResolution.js.map +1 -0
  182. package/lib/download/core/index.d.ts +13 -0
  183. package/lib/download/core/index.d.ts.map +1 -1
  184. package/lib/download/core/index.js +8 -0
  185. package/lib/download/core/index.js.map +1 -1
  186. package/lib/download/core/pictureExport.d.ts +93 -0
  187. package/lib/download/core/pictureExport.d.ts.map +1 -0
  188. package/lib/download/core/pictureExport.js +116 -0
  189. package/lib/download/core/pictureExport.js.map +1 -0
  190. package/lib/download/core/stackedDrawing.d.ts +36 -0
  191. package/lib/download/core/stackedDrawing.d.ts.map +1 -0
  192. package/lib/download/core/stackedDrawing.js +98 -0
  193. package/lib/download/core/stackedDrawing.js.map +1 -0
  194. package/lib/download/core/svgBounds.d.ts +44 -0
  195. package/lib/download/core/svgBounds.d.ts.map +1 -0
  196. package/lib/download/core/svgBounds.js +69 -0
  197. package/lib/download/core/svgBounds.js.map +1 -0
  198. package/lib/download/core/svgNamespace.d.ts +9 -0
  199. package/lib/download/core/svgNamespace.d.ts.map +1 -0
  200. package/lib/download/core/svgNamespace.js +10 -0
  201. package/lib/download/core/svgNamespace.js.map +1 -0
  202. package/lib/download/core/svgToPng.d.ts +43 -0
  203. package/lib/download/core/svgToPng.d.ts.map +1 -0
  204. package/lib/download/core/svgToPng.js +79 -0
  205. package/lib/download/core/svgToPng.js.map +1 -0
  206. package/lib/download/core/svgToString.d.ts +45 -0
  207. package/lib/download/core/svgToString.d.ts.map +1 -0
  208. package/lib/download/core/svgToString.js +58 -0
  209. package/lib/download/core/svgToString.js.map +1 -0
  210. package/lib/download/ui/ExportDialogFrame.d.ts +46 -0
  211. package/lib/download/ui/ExportDialogFrame.d.ts.map +1 -0
  212. package/lib/download/ui/ExportDialogFrame.js +24 -0
  213. package/lib/download/ui/ExportDialogFrame.js.map +1 -0
  214. package/lib/download/ui/ExportImageDialog.d.ts +47 -0
  215. package/lib/download/ui/ExportImageDialog.d.ts.map +1 -0
  216. package/lib/download/ui/ExportImageDialog.js +25 -0
  217. package/lib/download/ui/ExportImageDialog.js.map +1 -0
  218. package/lib/download/ui/ExportNameField.d.ts +29 -0
  219. package/lib/download/ui/ExportNameField.d.ts.map +1 -0
  220. package/lib/download/ui/ExportNameField.js +99 -0
  221. package/lib/download/ui/ExportNameField.js.map +1 -0
  222. package/lib/download/ui/ExportPictureSection.d.ts +38 -0
  223. package/lib/download/ui/ExportPictureSection.d.ts.map +1 -0
  224. package/lib/download/ui/ExportPictureSection.js +48 -0
  225. package/lib/download/ui/ExportPictureSection.js.map +1 -0
  226. package/lib/download/ui/index.d.ts +10 -0
  227. package/lib/download/ui/index.d.ts.map +1 -1
  228. package/lib/download/ui/index.js +5 -0
  229. package/lib/download/ui/index.js.map +1 -1
  230. package/lib/download/ui/useDrawingBox.d.ts +23 -0
  231. package/lib/download/ui/useDrawingBox.d.ts.map +1 -0
  232. package/lib/download/ui/useDrawingBox.js +21 -0
  233. package/lib/download/ui/useDrawingBox.js.map +1 -0
  234. package/lib/error/core/describeSource.d.ts +17 -0
  235. package/lib/error/core/describeSource.d.ts.map +1 -0
  236. package/lib/error/core/describeSource.js +19 -0
  237. package/lib/error/core/describeSource.js.map +1 -0
  238. package/lib/error/core/index.d.ts +1 -0
  239. package/lib/error/core/index.d.ts.map +1 -1
  240. package/lib/error/core/index.js +1 -0
  241. package/lib/error/core/index.js.map +1 -1
  242. package/lib/help/ui/HelpBody.d.ts +10 -1
  243. package/lib/help/ui/HelpBody.d.ts.map +1 -1
  244. package/lib/help/ui/HelpBody.js +24 -1
  245. package/lib/help/ui/HelpBody.js.map +1 -1
  246. package/lib/help/ui/index.d.ts +1 -1
  247. package/lib/help/ui/index.d.ts.map +1 -1
  248. package/lib/help/ui/index.js.map +1 -1
  249. package/lib/i18n/core/chromeCatalog.d.ts +1 -1
  250. package/lib/i18n/core/chromeCatalog.d.ts.map +1 -1
  251. package/lib/ir/core/analysisSpectra.d.ts +46 -0
  252. package/lib/ir/core/analysisSpectra.d.ts.map +1 -0
  253. package/lib/ir/core/analysisSpectra.js +187 -0
  254. package/lib/ir/core/analysisSpectra.js.map +1 -0
  255. package/lib/ir/core/assignBands.d.ts +83 -0
  256. package/lib/ir/core/assignBands.d.ts.map +1 -0
  257. package/lib/ir/core/assignBands.js +83 -0
  258. package/lib/ir/core/assignBands.js.map +1 -0
  259. package/lib/ir/core/bandAssignments.d.ts +47 -0
  260. package/lib/ir/core/bandAssignments.d.ts.map +1 -0
  261. package/lib/ir/core/bandAssignments.js +305 -0
  262. package/lib/ir/core/bandAssignments.js.map +1 -0
  263. package/lib/ir/core/bandLabelPlan.d.ts +93 -0
  264. package/lib/ir/core/bandLabelPlan.d.ts.map +1 -0
  265. package/lib/ir/core/bandLabelPlan.js +104 -0
  266. package/lib/ir/core/bandLabelPlan.js.map +1 -0
  267. package/lib/ir/core/detectIrFormat.d.ts +23 -0
  268. package/lib/ir/core/detectIrFormat.d.ts.map +1 -0
  269. package/lib/ir/core/detectIrFormat.js +133 -0
  270. package/lib/ir/core/detectIrFormat.js.map +1 -0
  271. package/lib/ir/core/downloadSpectra.d.ts +26 -0
  272. package/lib/ir/core/downloadSpectra.d.ts.map +1 -0
  273. package/lib/ir/core/downloadSpectra.js +37 -0
  274. package/lib/ir/core/downloadSpectra.js.map +1 -0
  275. package/lib/ir/core/fromJcamp.d.ts +35 -0
  276. package/lib/ir/core/fromJcamp.d.ts.map +1 -0
  277. package/lib/ir/core/fromJcamp.js +48 -0
  278. package/lib/ir/core/fromJcamp.js.map +1 -0
  279. package/lib/ir/core/fromSpc.d.ts +30 -0
  280. package/lib/ir/core/fromSpc.d.ts.map +1 -0
  281. package/lib/ir/core/fromSpc.js +40 -0
  282. package/lib/ir/core/fromSpc.js.map +1 -0
  283. package/lib/ir/core/index.d.ts +51 -0
  284. package/lib/ir/core/index.d.ts.map +1 -0
  285. package/lib/ir/core/index.js +35 -0
  286. package/lib/ir/core/index.js.map +1 -0
  287. package/lib/ir/core/irBand.d.ts +45 -0
  288. package/lib/ir/core/irBand.d.ts.map +1 -0
  289. package/lib/ir/core/irBand.js +30 -0
  290. package/lib/ir/core/irBand.js.map +1 -0
  291. package/lib/ir/core/irCommands.d.ts +168 -0
  292. package/lib/ir/core/irCommands.d.ts.map +1 -0
  293. package/lib/ir/core/irCommands.js +94 -0
  294. package/lib/ir/core/irCommands.js.map +1 -0
  295. package/lib/ir/core/irDomain.d.ts +63 -0
  296. package/lib/ir/core/irDomain.d.ts.map +1 -0
  297. package/lib/ir/core/irDomain.js +136 -0
  298. package/lib/ir/core/irDomain.js.map +1 -0
  299. package/lib/ir/core/irEditorApi.d.ts +42 -0
  300. package/lib/ir/core/irEditorApi.d.ts.map +1 -0
  301. package/lib/ir/core/irEditorApi.js +10 -0
  302. package/lib/ir/core/irEditorApi.js.map +1 -0
  303. package/lib/ir/core/irFormat.d.ts +42 -0
  304. package/lib/ir/core/irFormat.d.ts.map +1 -0
  305. package/lib/ir/core/irFormat.js +51 -0
  306. package/lib/ir/core/irFormat.js.map +1 -0
  307. package/lib/ir/core/irMode.d.ts +160 -0
  308. package/lib/ir/core/irMode.d.ts.map +1 -0
  309. package/lib/ir/core/irMode.js +175 -0
  310. package/lib/ir/core/irMode.js.map +1 -0
  311. package/lib/ir/core/irReducer.d.ts +101 -0
  312. package/lib/ir/core/irReducer.d.ts.map +1 -0
  313. package/lib/ir/core/irReducer.js +207 -0
  314. package/lib/ir/core/irReducer.js.map +1 -0
  315. package/lib/ir/core/irSidePanels.d.ts +22 -0
  316. package/lib/ir/core/irSidePanels.d.ts.map +1 -0
  317. package/lib/ir/core/irSidePanels.js +12 -0
  318. package/lib/ir/core/irSidePanels.js.map +1 -0
  319. package/lib/ir/core/irSpectrum.d.ts +140 -0
  320. package/lib/ir/core/irSpectrum.d.ts.map +1 -0
  321. package/lib/ir/core/irSpectrum.js +34 -0
  322. package/lib/ir/core/irSpectrum.js.map +1 -0
  323. package/lib/ir/core/irState.d.ts +119 -0
  324. package/lib/ir/core/irState.d.ts.map +1 -0
  325. package/lib/ir/core/irState.js +92 -0
  326. package/lib/ir/core/irState.js.map +1 -0
  327. package/lib/ir/core/loadIrSpectra.d.ts +36 -0
  328. package/lib/ir/core/loadIrSpectra.d.ts.map +1 -0
  329. package/lib/ir/core/loadIrSpectra.js +44 -0
  330. package/lib/ir/core/loadIrSpectra.js.map +1 -0
  331. package/lib/ir/core/nearestBand.d.ts +35 -0
  332. package/lib/ir/core/nearestBand.d.ts.map +1 -0
  333. package/lib/ir/core/nearestBand.js +47 -0
  334. package/lib/ir/core/nearestBand.js.map +1 -0
  335. package/lib/ir/core/pickBands.d.ts +70 -0
  336. package/lib/ir/core/pickBands.d.ts.map +1 -0
  337. package/lib/ir/core/pickBands.js +125 -0
  338. package/lib/ir/core/pickBands.js.map +1 -0
  339. package/lib/ir/core/spectrumJcamp.d.ts +58 -0
  340. package/lib/ir/core/spectrumJcamp.d.ts.map +1 -0
  341. package/lib/ir/core/spectrumJcamp.js +156 -0
  342. package/lib/ir/core/spectrumJcamp.js.map +1 -0
  343. package/lib/ir/core/toIrSpectrum.d.ts +59 -0
  344. package/lib/ir/core/toIrSpectrum.d.ts.map +1 -0
  345. package/lib/ir/core/toIrSpectrum.js +56 -0
  346. package/lib/ir/core/toIrSpectrum.js.map +1 -0
  347. package/lib/ir/ui/BandMarks.d.ts +52 -0
  348. package/lib/ir/ui/BandMarks.d.ts.map +1 -0
  349. package/lib/ir/ui/BandMarks.js +71 -0
  350. package/lib/ir/ui/BandMarks.js.map +1 -0
  351. package/lib/ir/ui/BandsPanel.d.ts +31 -0
  352. package/lib/ir/ui/BandsPanel.d.ts.map +1 -0
  353. package/lib/ir/ui/BandsPanel.js +94 -0
  354. package/lib/ir/ui/BandsPanel.js.map +1 -0
  355. package/lib/ir/ui/IrAboutDialog.d.ts +18 -0
  356. package/lib/ir/ui/IrAboutDialog.d.ts.map +1 -0
  357. package/lib/ir/ui/IrAboutDialog.js +32 -0
  358. package/lib/ir/ui/IrAboutDialog.js.map +1 -0
  359. package/lib/ir/ui/IrCanvas.d.ts +38 -0
  360. package/lib/ir/ui/IrCanvas.d.ts.map +1 -0
  361. package/lib/ir/ui/IrCanvas.js +41 -0
  362. package/lib/ir/ui/IrCanvas.js.map +1 -0
  363. package/lib/ir/ui/IrChart.d.ts +28 -0
  364. package/lib/ir/ui/IrChart.d.ts.map +1 -0
  365. package/lib/ir/ui/IrChart.js +114 -0
  366. package/lib/ir/ui/IrChart.js.map +1 -0
  367. package/lib/ir/ui/IrCommandProvider.d.ts +15 -0
  368. package/lib/ir/ui/IrCommandProvider.d.ts.map +1 -0
  369. package/lib/ir/ui/IrCommandProvider.js +14 -0
  370. package/lib/ir/ui/IrCommandProvider.js.map +1 -0
  371. package/lib/ir/ui/IrCommandTooltip.d.ts +16 -0
  372. package/lib/ir/ui/IrCommandTooltip.d.ts.map +1 -0
  373. package/lib/ir/ui/IrCommandTooltip.js +22 -0
  374. package/lib/ir/ui/IrCommandTooltip.js.map +1 -0
  375. package/lib/ir/ui/IrDocumentationDialog.d.ts +18 -0
  376. package/lib/ir/ui/IrDocumentationDialog.d.ts.map +1 -0
  377. package/lib/ir/ui/IrDocumentationDialog.js +68 -0
  378. package/lib/ir/ui/IrDocumentationDialog.js.map +1 -0
  379. package/lib/ir/ui/IrEditor.d.ts +60 -0
  380. package/lib/ir/ui/IrEditor.d.ts.map +1 -0
  381. package/lib/ir/ui/IrEditor.js +42 -0
  382. package/lib/ir/ui/IrEditor.js.map +1 -0
  383. package/lib/ir/ui/IrHeader.d.ts +13 -0
  384. package/lib/ir/ui/IrHeader.d.ts.map +1 -0
  385. package/lib/ir/ui/IrHeader.js +21 -0
  386. package/lib/ir/ui/IrHeader.js.map +1 -0
  387. package/lib/ir/ui/IrLogo.d.ts +20 -0
  388. package/lib/ir/ui/IrLogo.d.ts.map +1 -0
  389. package/lib/ir/ui/IrLogo.js +17 -0
  390. package/lib/ir/ui/IrLogo.js.map +1 -0
  391. package/lib/ir/ui/IrPointerTracker.d.ts +29 -0
  392. package/lib/ir/ui/IrPointerTracker.d.ts.map +1 -0
  393. package/lib/ir/ui/IrPointerTracker.js +47 -0
  394. package/lib/ir/ui/IrPointerTracker.js.map +1 -0
  395. package/lib/ir/ui/IrShell.d.ts +25 -0
  396. package/lib/ir/ui/IrShell.d.ts.map +1 -0
  397. package/lib/ir/ui/IrShell.js +178 -0
  398. package/lib/ir/ui/IrShell.js.map +1 -0
  399. package/lib/ir/ui/IrSidePanel.d.ts +26 -0
  400. package/lib/ir/ui/IrSidePanel.d.ts.map +1 -0
  401. package/lib/ir/ui/IrSidePanel.js +39 -0
  402. package/lib/ir/ui/IrSidePanel.js.map +1 -0
  403. package/lib/ir/ui/IrStateProvider.d.ts +19 -0
  404. package/lib/ir/ui/IrStateProvider.d.ts.map +1 -0
  405. package/lib/ir/ui/IrStateProvider.js +16 -0
  406. package/lib/ir/ui/IrStateProvider.js.map +1 -0
  407. package/lib/ir/ui/IrStatusBar.d.ts +14 -0
  408. package/lib/ir/ui/IrStatusBar.d.ts.map +1 -0
  409. package/lib/ir/ui/IrStatusBar.js +48 -0
  410. package/lib/ir/ui/IrStatusBar.js.map +1 -0
  411. package/lib/ir/ui/IrToolbar.d.ts +18 -0
  412. package/lib/ir/ui/IrToolbar.d.ts.map +1 -0
  413. package/lib/ir/ui/IrToolbar.js +32 -0
  414. package/lib/ir/ui/IrToolbar.js.map +1 -0
  415. package/lib/ir/ui/IrTraces.d.ts +63 -0
  416. package/lib/ir/ui/IrTraces.d.ts.map +1 -0
  417. package/lib/ir/ui/IrTraces.js +72 -0
  418. package/lib/ir/ui/IrTraces.js.map +1 -0
  419. package/lib/ir/ui/MetadataPanel.d.ts +15 -0
  420. package/lib/ir/ui/MetadataPanel.d.ts.map +1 -0
  421. package/lib/ir/ui/MetadataPanel.js +49 -0
  422. package/lib/ir/ui/MetadataPanel.js.map +1 -0
  423. package/lib/ir/ui/SpectraPanel.d.ts +20 -0
  424. package/lib/ir/ui/SpectraPanel.d.ts.map +1 -0
  425. package/lib/ir/ui/SpectraPanel.js +42 -0
  426. package/lib/ir/ui/SpectraPanel.js.map +1 -0
  427. package/lib/ir/ui/SpectrumRow.d.ts +26 -0
  428. package/lib/ir/ui/SpectrumRow.d.ts.map +1 -0
  429. package/lib/ir/ui/SpectrumRow.js +41 -0
  430. package/lib/ir/ui/SpectrumRow.js.map +1 -0
  431. package/lib/ir/ui/index.d.ts +56 -0
  432. package/lib/ir/ui/index.d.ts.map +1 -0
  433. package/lib/ir/ui/index.js +36 -0
  434. package/lib/ir/ui/index.js.map +1 -0
  435. package/lib/ir/ui/irActions.d.ts +52 -0
  436. package/lib/ir/ui/irActions.d.ts.map +1 -0
  437. package/lib/ir/ui/irActions.js +62 -0
  438. package/lib/ir/ui/irActions.js.map +1 -0
  439. package/lib/ir/ui/irChartProps.d.ts +116 -0
  440. package/lib/ir/ui/irChartProps.d.ts.map +1 -0
  441. package/lib/ir/ui/irChartProps.js +14 -0
  442. package/lib/ir/ui/irChartProps.js.map +1 -0
  443. package/lib/ir/ui/irCommandContext.d.ts +35 -0
  444. package/lib/ir/ui/irCommandContext.d.ts.map +1 -0
  445. package/lib/ir/ui/irCommandContext.js +44 -0
  446. package/lib/ir/ui/irCommandContext.js.map +1 -0
  447. package/lib/ir/ui/irStateContext.d.ts +26 -0
  448. package/lib/ir/ui/irStateContext.d.ts.map +1 -0
  449. package/lib/ir/ui/irStateContext.js +37 -0
  450. package/lib/ir/ui/irStateContext.js.map +1 -0
  451. package/lib/ir/ui/useIrEditor.d.ts +51 -0
  452. package/lib/ir/ui/useIrEditor.d.ts.map +1 -0
  453. package/lib/ir/ui/useIrEditor.js +88 -0
  454. package/lib/ir/ui/useIrEditor.js.map +1 -0
  455. package/lib/ir/ui/useIrPointer.d.ts +66 -0
  456. package/lib/ir/ui/useIrPointer.d.ts.map +1 -0
  457. package/lib/ir/ui/useIrPointer.js +53 -0
  458. package/lib/ir/ui/useIrPointer.js.map +1 -0
  459. package/lib/ir/ui/useIrShortcuts.d.ts +24 -0
  460. package/lib/ir/ui/useIrShortcuts.d.ts.map +1 -0
  461. package/lib/ir/ui/useIrShortcuts.js +73 -0
  462. package/lib/ir/ui/useIrShortcuts.js.map +1 -0
  463. package/lib/ir/ui/useIrZoom.d.ts +51 -0
  464. package/lib/ir/ui/useIrZoom.d.ts.map +1 -0
  465. package/lib/ir/ui/useIrZoom.js +46 -0
  466. package/lib/ir/ui/useIrZoom.js.map +1 -0
  467. package/lib/ir.d.ts +13 -0
  468. package/lib/ir.d.ts.map +1 -0
  469. package/lib/ir.js +13 -0
  470. package/lib/ir.js.map +1 -0
  471. package/lib/locales/de.json +3 -0
  472. package/lib/locales/en.json +3 -0
  473. package/lib/locales/es.json +3 -0
  474. package/lib/locales/fr.json +3 -0
  475. package/lib/panel/core/dialogStyles.d.ts +13 -0
  476. package/lib/panel/core/dialogStyles.d.ts.map +1 -0
  477. package/lib/panel/core/dialogStyles.js +11 -0
  478. package/lib/panel/core/dialogStyles.js.map +1 -0
  479. package/lib/panel/core/index.d.ts +19 -0
  480. package/lib/panel/core/index.d.ts.map +1 -0
  481. package/lib/panel/core/index.js +18 -0
  482. package/lib/panel/core/index.js.map +1 -0
  483. package/lib/panel/core/isEditingField.d.ts +17 -0
  484. package/lib/panel/core/isEditingField.d.ts.map +1 -0
  485. package/lib/panel/core/isEditingField.js +25 -0
  486. package/lib/panel/core/isEditingField.js.map +1 -0
  487. package/lib/panel/core/panelStyles.d.ts +242 -0
  488. package/lib/panel/core/panelStyles.d.ts.map +1 -0
  489. package/lib/panel/core/panelStyles.js +228 -0
  490. package/lib/panel/core/panelStyles.js.map +1 -0
  491. package/lib/panel/core/rowSpacers.d.ts +38 -0
  492. package/lib/panel/core/rowSpacers.d.ts.map +1 -0
  493. package/lib/panel/core/rowSpacers.js +31 -0
  494. package/lib/panel/core/rowSpacers.js.map +1 -0
  495. package/lib/panel/core/statusBar.d.ts +44 -0
  496. package/lib/panel/core/statusBar.d.ts.map +1 -0
  497. package/lib/panel/core/statusBar.js +40 -0
  498. package/lib/panel/core/statusBar.js.map +1 -0
  499. package/lib/panel/core/textFilter.d.ts +22 -0
  500. package/lib/panel/core/textFilter.d.ts.map +1 -0
  501. package/lib/panel/core/textFilter.js +32 -0
  502. package/lib/panel/core/textFilter.js.map +1 -0
  503. package/lib/panel/core/yieldToPainting.d.ts +17 -0
  504. package/lib/panel/core/yieldToPainting.d.ts.map +1 -0
  505. package/lib/panel/core/yieldToPainting.js +21 -0
  506. package/lib/panel/core/yieldToPainting.js.map +1 -0
  507. package/lib/panel/ui/AboutDialogFrame.d.ts +36 -0
  508. package/lib/panel/ui/AboutDialogFrame.d.ts.map +1 -0
  509. package/lib/panel/ui/AboutDialogFrame.js +43 -0
  510. package/lib/panel/ui/AboutDialogFrame.js.map +1 -0
  511. package/lib/panel/ui/ClearButton.d.ts +28 -0
  512. package/lib/panel/ui/ClearButton.d.ts.map +1 -0
  513. package/lib/panel/ui/ClearButton.js +23 -0
  514. package/lib/panel/ui/ClearButton.js.map +1 -0
  515. package/lib/panel/ui/DocumentationDialogFrame.d.ts +39 -0
  516. package/lib/panel/ui/DocumentationDialogFrame.d.ts.map +1 -0
  517. package/lib/panel/ui/DocumentationDialogFrame.js +29 -0
  518. package/lib/panel/ui/DocumentationDialogFrame.js.map +1 -0
  519. package/lib/panel/ui/FilterInput.d.ts +31 -0
  520. package/lib/panel/ui/FilterInput.d.ts.map +1 -0
  521. package/lib/panel/ui/FilterInput.js +23 -0
  522. package/lib/panel/ui/FilterInput.js.map +1 -0
  523. package/lib/panel/ui/HelpLabel.d.ts +24 -0
  524. package/lib/panel/ui/HelpLabel.d.ts.map +1 -0
  525. package/lib/panel/ui/HelpLabel.js +23 -0
  526. package/lib/panel/ui/HelpLabel.js.map +1 -0
  527. package/lib/panel/ui/PanelMessage.d.ts +41 -0
  528. package/lib/panel/ui/PanelMessage.d.ts.map +1 -0
  529. package/lib/panel/ui/PanelMessage.js +30 -0
  530. package/lib/panel/ui/PanelMessage.js.map +1 -0
  531. package/lib/panel/ui/PanelRail.d.ts +41 -0
  532. package/lib/panel/ui/PanelRail.d.ts.map +1 -0
  533. package/lib/panel/ui/PanelRail.js +12 -0
  534. package/lib/panel/ui/PanelRail.js.map +1 -0
  535. package/lib/panel/ui/Section.d.ts +25 -0
  536. package/lib/panel/ui/Section.d.ts.map +1 -0
  537. package/lib/panel/ui/Section.js +41 -0
  538. package/lib/panel/ui/Section.js.map +1 -0
  539. package/lib/panel/ui/SidePanelStack.d.ts +62 -0
  540. package/lib/panel/ui/SidePanelStack.d.ts.map +1 -0
  541. package/lib/panel/ui/SidePanelStack.js +40 -0
  542. package/lib/panel/ui/SidePanelStack.js.map +1 -0
  543. package/lib/panel/ui/SpectrumColorSwatch.d.ts +33 -0
  544. package/lib/panel/ui/SpectrumColorSwatch.d.ts.map +1 -0
  545. package/lib/panel/ui/SpectrumColorSwatch.js +76 -0
  546. package/lib/panel/ui/SpectrumColorSwatch.js.map +1 -0
  547. package/lib/panel/ui/index.d.ts +37 -0
  548. package/lib/panel/ui/index.d.ts.map +1 -0
  549. package/lib/panel/ui/index.js +24 -0
  550. package/lib/panel/ui/index.js.map +1 -0
  551. package/lib/panel/ui/useConfirmOnEnter.d.ts +19 -0
  552. package/lib/panel/ui/useConfirmOnEnter.d.ts.map +1 -0
  553. package/lib/panel/ui/useConfirmOnEnter.js +64 -0
  554. package/lib/panel/ui/useConfirmOnEnter.js.map +1 -0
  555. package/lib/panel/ui/useFilterBox.d.ts +23 -0
  556. package/lib/panel/ui/useFilterBox.d.ts.map +1 -0
  557. package/lib/panel/ui/useFilterBox.js +22 -0
  558. package/lib/panel/ui/useFilterBox.js.map +1 -0
  559. package/lib/panel/ui/useVirtualRows.d.ts +46 -0
  560. package/lib/panel/ui/useVirtualRows.d.ts.map +1 -0
  561. package/lib/panel/ui/useVirtualRows.js +56 -0
  562. package/lib/panel/ui/useVirtualRows.js.map +1 -0
  563. package/lib/panel/ui/useVirtualWindowRows.d.ts +40 -0
  564. package/lib/panel/ui/useVirtualWindowRows.d.ts.map +1 -0
  565. package/lib/panel/ui/useVirtualWindowRows.js +65 -0
  566. package/lib/panel/ui/useVirtualWindowRows.js.map +1 -0
  567. package/lib/structure/core/conformerBoltzmann.d.ts +56 -0
  568. package/lib/structure/core/conformerBoltzmann.d.ts.map +1 -0
  569. package/lib/structure/core/conformerBoltzmann.js +96 -0
  570. package/lib/structure/core/conformerBoltzmann.js.map +1 -0
  571. package/lib/structure/core/conformerEnergy.d.ts +69 -0
  572. package/lib/structure/core/conformerEnergy.d.ts.map +1 -0
  573. package/lib/structure/core/conformerEnergy.js +47 -0
  574. package/lib/structure/core/conformerEnergy.js.map +1 -0
  575. package/lib/structure/core/index.d.ts +3 -0
  576. package/lib/structure/core/index.d.ts.map +1 -1
  577. package/lib/structure/core/index.js +2 -0
  578. package/lib/structure/core/index.js.map +1 -1
  579. package/lib/structure/ui/ConformerTable.d.ts +73 -0
  580. package/lib/structure/ui/ConformerTable.d.ts.map +1 -0
  581. package/lib/structure/ui/ConformerTable.js +259 -0
  582. package/lib/structure/ui/ConformerTable.js.map +1 -0
  583. package/lib/structure/ui/conformerColumns.d.ts +30 -0
  584. package/lib/structure/ui/conformerColumns.d.ts.map +1 -0
  585. package/lib/structure/ui/conformerColumns.js +37 -0
  586. package/lib/structure/ui/conformerColumns.js.map +1 -0
  587. package/lib/ui.d.ts +5 -0
  588. package/lib/ui.d.ts.map +1 -1
  589. package/lib/ui.js +3 -0
  590. package/lib/ui.js.map +1 -1
  591. package/package.json +8 -1
  592. package/src/chart/core/axisLabels.ts +117 -0
  593. package/src/chart/core/boxLayout.ts +126 -0
  594. package/src/chart/core/chartAxisScale.ts +92 -10
  595. package/src/chart/core/chartDomain.ts +185 -0
  596. package/src/chart/core/chartGeometry.ts +159 -0
  597. package/src/chart/core/chartPane.ts +10 -0
  598. package/src/chart/core/chartScale.ts +7 -4
  599. package/src/chart/core/chartTheme.ts +161 -0
  600. package/src/chart/core/chartViewport.ts +40 -13
  601. package/src/chart/core/guidePlacement.ts +66 -0
  602. package/src/chart/core/index.ts +121 -2
  603. package/src/chart/core/labelStack.ts +72 -0
  604. package/src/chart/core/legendBox.ts +263 -0
  605. package/src/chart/core/selectionGeometry.ts +68 -0
  606. package/src/chart/core/spectrumColor.ts +129 -0
  607. package/src/chart/core/stackCapacity.ts +162 -0
  608. package/src/chart/core/svgPoint.ts +77 -0
  609. package/src/chart/core/tracePath.ts +228 -0
  610. package/src/chart/core/trackerReadout.ts +78 -0
  611. package/src/chart/core/viewTransform.ts +287 -0
  612. package/src/chart/core/zoomDomain.ts +235 -0
  613. package/src/chart/ui/Axes.tsx +361 -0
  614. package/src/chart/ui/AxisGuide.tsx +187 -0
  615. package/src/chart/ui/ChartStack.tsx +130 -0
  616. package/src/chart/ui/ChartTracker.tsx +101 -0
  617. package/src/chart/ui/PlotCaption.tsx +108 -0
  618. package/src/chart/ui/SelectionRect.tsx +52 -0
  619. package/src/chart/ui/TraceLegend.tsx +193 -0
  620. package/src/chart/ui/chartGestures.ts +270 -0
  621. package/src/chart/ui/chartStackLevel.tsx +210 -0
  622. package/src/chart/ui/chartSurface.ts +66 -0
  623. package/src/chart/ui/index.ts +35 -0
  624. package/src/chart/ui/useChartPointer.ts +223 -0
  625. package/src/chart/ui/useChartSize.ts +115 -0
  626. package/src/chart/ui/useChartWindow.ts +240 -0
  627. package/src/chart/ui/useChartZoom.ts +255 -0
  628. package/src/chart/ui/useWheelListener.ts +62 -0
  629. package/src/chrome/ui/AccountButton.tsx +185 -0
  630. package/src/chrome/ui/index.ts +2 -0
  631. package/src/clipboard/core/copyPng.ts +20 -0
  632. package/src/clipboard/core/index.ts +1 -0
  633. package/src/clipboard/ui/ClickToCopy.tsx +9 -1
  634. package/src/core.ts +1 -0
  635. package/src/download/core/exportStyles.ts +20 -0
  636. package/src/download/core/imageResolution.ts +118 -0
  637. package/src/download/core/index.ts +34 -0
  638. package/src/download/core/pictureExport.ts +207 -0
  639. package/src/download/core/stackedDrawing.ts +108 -0
  640. package/src/download/core/svgBounds.ts +80 -0
  641. package/src/download/core/svgNamespace.ts +9 -0
  642. package/src/download/core/svgToPng.ts +121 -0
  643. package/src/download/core/svgToString.ts +95 -0
  644. package/src/download/ui/ExportDialogFrame.tsx +86 -0
  645. package/src/download/ui/ExportImageDialog.tsx +91 -0
  646. package/src/download/ui/ExportNameField.tsx +148 -0
  647. package/src/download/ui/ExportPictureSection.tsx +142 -0
  648. package/src/download/ui/index.ts +11 -0
  649. package/src/download/ui/useDrawingBox.ts +37 -0
  650. package/src/error/core/describeSource.ts +18 -0
  651. package/src/error/core/index.ts +1 -0
  652. package/src/help/ui/HelpBody.tsx +41 -2
  653. package/src/help/ui/index.ts +6 -1
  654. package/src/ir/core/analysisSpectra.ts +231 -0
  655. package/src/ir/core/assignBands.ts +144 -0
  656. package/src/ir/core/bandAssignments.ts +329 -0
  657. package/src/ir/core/bandLabelPlan.ts +194 -0
  658. package/src/ir/core/detectIrFormat.ts +139 -0
  659. package/src/ir/core/downloadSpectra.ts +57 -0
  660. package/src/ir/core/fromJcamp.ts +70 -0
  661. package/src/ir/core/fromSpc.ts +61 -0
  662. package/src/ir/core/index.ts +113 -0
  663. package/src/ir/core/irBand.ts +57 -0
  664. package/src/ir/core/irCommands.ts +154 -0
  665. package/src/ir/core/irDomain.ts +163 -0
  666. package/src/ir/core/irEditorApi.ts +44 -0
  667. package/src/ir/core/irFormat.ts +57 -0
  668. package/src/ir/core/irMode.ts +203 -0
  669. package/src/ir/core/irReducer.ts +273 -0
  670. package/src/ir/core/irSidePanels.ts +20 -0
  671. package/src/ir/core/irSpectrum.ts +155 -0
  672. package/src/ir/core/irState.ts +173 -0
  673. package/src/ir/core/loadIrSpectra.ts +79 -0
  674. package/src/ir/core/nearestBand.ts +57 -0
  675. package/src/ir/core/pickBands.ts +181 -0
  676. package/src/ir/core/spectrumJcamp.ts +178 -0
  677. package/src/ir/core/toIrSpectrum.ts +102 -0
  678. package/src/ir/ui/BandMarks.tsx +166 -0
  679. package/src/ir/ui/BandsPanel.tsx +271 -0
  680. package/src/ir/ui/IrAboutDialog.tsx +121 -0
  681. package/src/ir/ui/IrCanvas.tsx +91 -0
  682. package/src/ir/ui/IrChart.tsx +215 -0
  683. package/src/ir/ui/IrCommandProvider.tsx +32 -0
  684. package/src/ir/ui/IrCommandTooltip.tsx +36 -0
  685. package/src/ir/ui/IrDocumentationDialog.tsx +174 -0
  686. package/src/ir/ui/IrEditor.tsx +99 -0
  687. package/src/ir/ui/IrHeader.tsx +39 -0
  688. package/src/ir/ui/IrLogo.tsx +49 -0
  689. package/src/ir/ui/IrPointerTracker.tsx +102 -0
  690. package/src/ir/ui/IrShell.tsx +285 -0
  691. package/src/ir/ui/IrSidePanel.tsx +78 -0
  692. package/src/ir/ui/IrStateProvider.tsx +32 -0
  693. package/src/ir/ui/IrStatusBar.tsx +97 -0
  694. package/src/ir/ui/IrToolbar.tsx +102 -0
  695. package/src/ir/ui/IrTraces.tsx +134 -0
  696. package/src/ir/ui/MetadataPanel.tsx +88 -0
  697. package/src/ir/ui/SpectraPanel.tsx +114 -0
  698. package/src/ir/ui/SpectrumRow.tsx +127 -0
  699. package/src/ir/ui/index.ts +56 -0
  700. package/src/ir/ui/irActions.ts +103 -0
  701. package/src/ir/ui/irChartProps.ts +118 -0
  702. package/src/ir/ui/irCommandContext.tsx +62 -0
  703. package/src/ir/ui/irStateContext.ts +48 -0
  704. package/src/ir/ui/useIrEditor.ts +139 -0
  705. package/src/ir/ui/useIrPointer.ts +109 -0
  706. package/src/ir/ui/useIrShortcuts.ts +95 -0
  707. package/src/ir/ui/useIrZoom.ts +86 -0
  708. package/src/ir.ts +13 -0
  709. package/src/locales/de.json +3 -0
  710. package/src/locales/en.json +3 -0
  711. package/src/locales/es.json +3 -0
  712. package/src/locales/fr.json +3 -0
  713. package/src/panel/core/dialogStyles.ts +11 -0
  714. package/src/panel/core/index.ts +47 -0
  715. package/src/panel/core/isEditingField.ts +23 -0
  716. package/src/panel/core/panelStyles.ts +248 -0
  717. package/src/panel/core/rowSpacers.ts +50 -0
  718. package/src/panel/core/statusBar.ts +48 -0
  719. package/src/panel/core/textFilter.ts +33 -0
  720. package/src/panel/core/yieldToPainting.ts +20 -0
  721. package/src/panel/ui/AboutDialogFrame.tsx +100 -0
  722. package/src/panel/ui/ClearButton.tsx +42 -0
  723. package/src/panel/ui/DocumentationDialogFrame.tsx +86 -0
  724. package/src/panel/ui/FilterInput.tsx +60 -0
  725. package/src/panel/ui/HelpLabel.tsx +43 -0
  726. package/src/panel/ui/PanelMessage.tsx +64 -0
  727. package/src/panel/ui/PanelRail.tsx +64 -0
  728. package/src/panel/ui/Section.tsx +66 -0
  729. package/src/panel/ui/SidePanelStack.tsx +109 -0
  730. package/src/panel/ui/SpectrumColorSwatch.tsx +119 -0
  731. package/src/panel/ui/index.ts +47 -0
  732. package/src/panel/ui/useConfirmOnEnter.ts +68 -0
  733. package/src/panel/ui/useFilterBox.ts +35 -0
  734. package/src/panel/ui/useVirtualRows.ts +82 -0
  735. package/src/panel/ui/useVirtualWindowRows.ts +86 -0
  736. package/src/structure/core/conformerBoltzmann.ts +102 -0
  737. package/src/structure/core/conformerEnergy.ts +97 -0
  738. package/src/structure/core/index.ts +15 -0
  739. package/src/structure/ui/ConformerTable.tsx +429 -0
  740. package/src/structure/ui/conformerColumns.ts +55 -0
  741. package/src/ui.ts +13 -0
  742. package/styles/chrome.css +55 -0
@@ -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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"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Turning what a reader produced into what the viewer holds.
3
+ *
4
+ * A reader answers about a file and knows nothing about the session it is being
5
+ * read into — which spectra are already open, what colours they took, what this
6
+ * one should be called. That is the gap this closes, and it is the only place an
7
+ * identity or a colour is invented.
8
+ */
9
+ import type { LoadedIrSpectrum } from './analysisSpectra.ts';
10
+ import type { IrSpectrum } from './irSpectrum.ts';
11
+ /** What has to be decided for a loaded spectrum to become a held one. */
12
+ export interface ToIrSpectrumOptions {
13
+ /**
14
+ * Identity, which every later edit and selection is keyed on.
15
+ * @default a fresh UUID
16
+ */
17
+ id?: string;
18
+ /**
19
+ * The colour to draw it in.
20
+ * @default the lowest hue not in `taken`
21
+ */
22
+ color?: string;
23
+ /**
24
+ * The colours the spectra already open have taken, so a new one is told apart
25
+ * from them. Ignored when `color` says outright.
26
+ * @default no colours taken
27
+ */
28
+ taken?: readonly string[];
29
+ /**
30
+ * What to call it, overriding the file's own title.
31
+ * @default the file's title, then its name, then `spectrum`
32
+ */
33
+ name?: string;
34
+ /**
35
+ * Whether it is drawn as soon as it is added.
36
+ * @default true
37
+ */
38
+ visible?: boolean;
39
+ }
40
+ /**
41
+ * Make a held spectrum out of a read one.
42
+ * @param loaded - What the reader produced.
43
+ * @param options - The identity, colour and name to give it.
44
+ * @returns The spectrum as the viewer holds it.
45
+ */
46
+ export declare function toIrSpectrum(loaded: LoadedIrSpectrum, options?: ToIrSpectrumOptions): IrSpectrum;
47
+ /**
48
+ * Make held spectra out of everything one file held.
49
+ *
50
+ * The colours are handed out one at a time against a growing list, so a file
51
+ * carrying a sample and its background gives two spectra of two colours rather
52
+ * than two of the same — `nextSpectrumColor` can only answer that if it is told
53
+ * what the previous call took.
54
+ * @param loaded - What the reader produced, in file order.
55
+ * @param options - The colours already taken, and whether the spectra are drawn.
56
+ * @returns The spectra, in the same order.
57
+ */
58
+ export declare function toIrSpectra(loaded: readonly LoadedIrSpectrum[], options?: Pick<ToIrSpectrumOptions, 'taken' | 'visible'>): IrSpectrum[];
59
+ //# sourceMappingURL=toIrSpectrum.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toIrSpectrum.d.ts","sourceRoot":"","sources":["../../../src/ir/core/toIrSpectrum.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD,yEAAyE;AACzE,MAAM,WAAW,mBAAmB;IAClC;;;OAGG;IACH,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1B;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,gBAAgB,EACxB,OAAO,GAAE,mBAAwB,GAChC,UAAU,CAmBZ;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,WAAW,CACzB,MAAM,EAAE,SAAS,gBAAgB,EAAE,EACnC,OAAO,GAAE,IAAI,CAAC,mBAAmB,EAAE,OAAO,GAAG,SAAS,CAAM,GAC3D,UAAU,EAAE,CAad"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Turning what a reader produced into what the viewer holds.
3
+ *
4
+ * A reader answers about a file and knows nothing about the session it is being
5
+ * read into — which spectra are already open, what colours they took, what this
6
+ * one should be called. That is the gap this closes, and it is the only place an
7
+ * identity or a colour is invented.
8
+ */
9
+ import { nextSpectrumColor } from "../../chart/core/spectrumColor.js";
10
+ /**
11
+ * Make a held spectrum out of a read one.
12
+ * @param loaded - What the reader produced.
13
+ * @param options - The identity, colour and name to give it.
14
+ * @returns The spectrum as the viewer holds it.
15
+ */
16
+ export function toIrSpectrum(loaded, options = {}) {
17
+ const { id = crypto.randomUUID(), taken = [], name, visible = true, } = options;
18
+ const color = options.color ?? nextSpectrumColor(taken);
19
+ return {
20
+ id,
21
+ name: name ?? loaded.name ?? loaded.origin.fileName ?? 'spectrum',
22
+ color,
23
+ wavenumber: loaded.wavenumber,
24
+ absorbance: loaded.absorbance,
25
+ transmittance: loaded.transmittance,
26
+ meta: loaded.meta,
27
+ origin: loaded.origin,
28
+ visible,
29
+ };
30
+ }
31
+ /**
32
+ * Make held spectra out of everything one file held.
33
+ *
34
+ * The colours are handed out one at a time against a growing list, so a file
35
+ * carrying a sample and its background gives two spectra of two colours rather
36
+ * than two of the same — `nextSpectrumColor` can only answer that if it is told
37
+ * what the previous call took.
38
+ * @param loaded - What the reader produced, in file order.
39
+ * @param options - The colours already taken, and whether the spectra are drawn.
40
+ * @returns The spectra, in the same order.
41
+ */
42
+ export function toIrSpectra(loaded, options = {}) {
43
+ const { taken = [], visible } = options;
44
+ const colors = [...taken];
45
+ const spectra = [];
46
+ for (const entry of loaded) {
47
+ const spectrum = toIrSpectrum(entry, {
48
+ taken: colors,
49
+ ...(visible === undefined ? {} : { visible }),
50
+ });
51
+ colors.push(spectrum.color);
52
+ spectra.push(spectrum);
53
+ }
54
+ return spectra;
55
+ }
56
+ //# sourceMappingURL=toIrSpectrum.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toIrSpectrum.js","sourceRoot":"","sources":["../../../src/ir/core/toIrSpectrum.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAmCtE;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAC1B,MAAwB,EACxB,UAA+B,EAAE;IAEjC,MAAM,EACJ,EAAE,GAAG,MAAM,CAAC,UAAU,EAAE,EACxB,KAAK,GAAG,EAAE,EACV,IAAI,EACJ,OAAO,GAAG,IAAI,GACf,GAAG,OAAO,CAAC;IACZ,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,iBAAiB,CAAC,KAAK,CAAC,CAAC;IACxD,OAAO;QACL,EAAE;QACF,IAAI,EAAE,IAAI,IAAI,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,IAAI,UAAU;QACjE,KAAK;QACL,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,aAAa,EAAE,MAAM,CAAC,aAAa;QACnC,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,OAAO;KACR,CAAC;AACJ,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,WAAW,CACzB,MAAmC,EACnC,UAA0D,EAAE;IAE5D,MAAM,EAAE,KAAK,GAAG,EAAE,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IACxC,MAAM,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;IAC1B,MAAM,OAAO,GAAiB,EAAE,CAAC;IACjC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,YAAY,CAAC,KAAK,EAAE;YACnC,KAAK,EAAE,MAAM;YACb,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC;SAC9C,CAAC,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC5B,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACzB,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,52 @@
1
+ import type { ReactElement } from 'react';
2
+ import type { PlotRect } from '../../chart/core/chartGeometry.ts';
3
+ import type { ChartScale } from '../../chart/core/chartScale.ts';
4
+ import type { AssignedBand } from '../core/assignBands.ts';
5
+ import type { IrBand } from '../core/irBand.ts';
6
+ import type { IrMode } from '../core/irSpectrum.ts';
7
+ export interface BandMarksProps {
8
+ /** The bands to mark, with whatever the table said about them. */
9
+ assigned: readonly AssignedBand[];
10
+ /** Where the plot sits inside the SVG. */
11
+ plot: PlotRect;
12
+ /** The wavenumber axis as it is currently zoomed. */
13
+ xScale: ChartScale;
14
+ /** The value axis as it is currently zoomed. */
15
+ yScale: ChartScale;
16
+ /** Which value axis is being drawn. */
17
+ mode: IrMode;
18
+ /**
19
+ * Whether each label names the assignment as well as the wavenumber.
20
+ * @default false
21
+ */
22
+ showAssignments?: boolean;
23
+ /**
24
+ * At most how many bands are named. Marks are drawn on all of them.
25
+ * @default 12
26
+ */
27
+ limit?: number;
28
+ /**
29
+ * The band the pointer has come to rest on, drawn larger, `null` for none.
30
+ * @default null
31
+ */
32
+ highlight?: IrBand | null;
33
+ }
34
+ /**
35
+ * A mark on every band, and a label on the ones there is room for.
36
+ *
37
+ * The mark reaches *away* from the label, into the band, because the clear space
38
+ * on the label's side is where the numbers are written and the mark is there to
39
+ * say which band they are about. So in transmittance both hang downwards from a
40
+ * dip and in absorbance both rise from a maximum, and the pair reads the same way
41
+ * up in either.
42
+ *
43
+ * A leader line is drawn only when a label had to be slid off its band to clear
44
+ * its neighbours — a leader from a label that is already directly above its band
45
+ * is a line saying what the position already said. A label slid too far is not
46
+ * drawn at all; the mark still says the band is there, which is the honest
47
+ * outcome, where a label hanging over a band it says nothing about is not.
48
+ * @param props - Component props.
49
+ * @returns The marks and labels, as SVG.
50
+ */
51
+ export declare function BandMarks(props: BandMarksProps): ReactElement;
52
+ //# sourceMappingURL=BandMarks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BandMarks.d.ts","sourceRoot":"","sources":["../../../src/ir/ui/BandMarks.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAG1C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAC;AAClE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAMjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAE3D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAGhD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAEpD,MAAM,WAAW,cAAc;IAC7B,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,uCAAuC;IACvC,IAAI,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,YAAY,CAyE7D"}