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,285 @@
1
+ import type { Ref } from 'react';
2
+ import { useCallback, useImperativeHandle, useMemo, useState } from 'react';
3
+ import { SplitPane, useFullscreen } from 'react-science/ui';
4
+
5
+ import { sanitizeFileName } from '../../download/core/sanitizeFileName.ts';
6
+ import { ExportImageDialog } from '../../download/ui/ExportImageDialog.tsx';
7
+ import { useDrawingBox } from '../../download/ui/useDrawingBox.ts';
8
+ import { PanelRail } from '../../panel/ui/PanelRail.tsx';
9
+ import type { IrBand } from '../core/irBand.ts';
10
+ import type { IrCommandHandlers } from '../core/irCommands.ts';
11
+ import { fullDomain } from '../core/irDomain.ts';
12
+ import type { IrEditorHandle, ZoomToBandOptions } from '../core/irEditorApi.ts';
13
+ import { otherIrMode, yAxisRules } from '../core/irMode.ts';
14
+ import { irSidePanels } from '../core/irSidePanels.ts';
15
+ import type { IrDomain, IrSpectrum } from '../core/irSpectrum.ts';
16
+ import { DEFAULT_SIDE_PANEL } from '../core/irState.ts';
17
+
18
+ import { IrAboutDialog } from './IrAboutDialog.tsx';
19
+ import { IrCanvas } from './IrCanvas.tsx';
20
+ import { IrCommandProvider } from './IrCommandProvider.tsx';
21
+ import { IrDocumentationDialog } from './IrDocumentationDialog.tsx';
22
+ import { IrHeader } from './IrHeader.tsx';
23
+ import { IrSidePanel } from './IrSidePanel.tsx';
24
+ import { IrToolbar } from './IrToolbar.tsx';
25
+ import { useIrActions, useIrEditorState } from './irStateContext.ts';
26
+ import { useIrShortcuts } from './useIrShortcuts.ts';
27
+
28
+ export interface IrShellProps {
29
+ /**
30
+ * The handle to fill in, once there is a state for it to act on.
31
+ * @default undefined
32
+ */
33
+ handle?: Ref<IrEditorHandle>;
34
+ }
35
+
36
+ /**
37
+ * The viewer's screen: a header, the rails, and the split between the chart and
38
+ * the panels.
39
+ *
40
+ * Kept apart from `IrEditor` so that the handle, the commands and the highlight —
41
+ * all of which need the state — sit below the providers rather than beside them,
42
+ * and so the sealed component above is nothing but its props.
43
+ *
44
+ * The panels run to the bottom edge while the status bar stops at the splitter,
45
+ * which is what says the bar belongs to the chart and the panels are their own
46
+ * column.
47
+ * @param props - Component props.
48
+ * @returns The screen.
49
+ */
50
+ export function IrShell(props: IrShellProps) {
51
+ const { handle } = props;
52
+
53
+ const { state, visibleSpectra, selectedSpectrum } = useIrEditorState();
54
+ const actions = useIrActions();
55
+ const { toggle: toggleFullScreen } = useFullscreen();
56
+ const { openPanelIds, tool, domain } = state.view;
57
+ const { mode, pickBands, showAssignments } = state.settings;
58
+
59
+ const [isAboutOpen, setIsAboutOpen] = useState(false);
60
+ const [isDocumentationOpen, setIsDocumentationOpen] = useState(false);
61
+ const [isExportImageOpen, setIsExportImageOpen] = useState(false);
62
+
63
+ // The chart is the picture, so the box it is drawn in is what the export
64
+ // dialog is pointed at: the viewer around it is full of SVG — every icon in
65
+ // every toolbar is one — and the first found there would be a magnifier.
66
+ const chart = useDrawingBox();
67
+ // The highlight is held here rather than in the reducer: what the pointer is
68
+ // resting on is not part of the document and changes on every move across the
69
+ // chart, so putting it through the reducer would run every panel's memo sixty
70
+ // times a second.
71
+ const [highlight, setHighlight] = useState<IrBand | null>(null);
72
+
73
+ /**
74
+ * ChartScale the value axis by a factor, about the baseline the mode hangs from.
75
+ * @param factor - Above one to zoom out.
76
+ */
77
+ const scaleValueAxis = useCallback(
78
+ (factor: number) => {
79
+ const shown = domain ?? fullDomain(visibleSpectra, mode);
80
+ // Asked of the mode rather than written out again here: the baseline a
81
+ // value axis is scaled about is `irMode`'s to know, and a second copy of
82
+ // it is a second thing to get wrong.
83
+ const { baseline = 0 } = yAxisRules(mode);
84
+ actions.setDomain({
85
+ x: shown.x,
86
+ y: [
87
+ baseline + (shown.y[0] - baseline) * factor,
88
+ baseline + (shown.y[1] - baseline) * factor,
89
+ ],
90
+ });
91
+ },
92
+ [actions, domain, visibleSpectra, mode],
93
+ );
94
+
95
+ const commands = useMemo<IrCommandHandlers>(
96
+ () => ({
97
+ about: () => setIsAboutOpen(true),
98
+ documentation: () => setIsDocumentationOpen(true),
99
+ fullScreen: toggleFullScreen,
100
+ readTool: () => actions.setTool('read'),
101
+ boxTool: () => actions.setTool(tool === 'box' ? 'read' : 'box'),
102
+ zoomIn: () => scaleValueAxis(1 / ZOOM_STEP),
103
+ zoomOut: () => scaleValueAxis(ZOOM_STEP),
104
+ resetZoom: () => actions.resetDomain(),
105
+ toggleMode: () => actions.setSettings({ mode: otherIrMode(mode) }),
106
+ togglePicking: () => actions.setSettings({ pickBands: !pickBands }),
107
+ toggleAssignments: () =>
108
+ actions.setSettings({ showAssignments: !showAssignments }),
109
+ exportImage: () => setIsExportImageOpen(true),
110
+ clear: () => actions.clear(),
111
+ }),
112
+ [
113
+ actions,
114
+ tool,
115
+ mode,
116
+ pickBands,
117
+ showAssignments,
118
+ scaleValueAxis,
119
+ toggleFullScreen,
120
+ ],
121
+ );
122
+
123
+ // The root is held as state rather than in a ref because the keys are bound to
124
+ // it from an effect: a ref filled in during the commit would leave the effect
125
+ // with nothing to listen on for the first render, and no reason ever to run
126
+ // again.
127
+ const [root, setRoot] = useState<HTMLElement | null>(null);
128
+ useIrShortcuts(root, commands);
129
+
130
+ useImperativeHandle(
131
+ handle,
132
+ (): IrEditorHandle => ({
133
+ getSpectra: () => state.data.spectra,
134
+ setSpectra: (spectra) => actions.setSpectra(spectra),
135
+ addSpectra: (spectra) => actions.addSpectra(spectra),
136
+ clear: () => actions.clear(),
137
+ setDomain: (next) => actions.setDomain(next),
138
+ resetDomain: () => actions.resetDomain(),
139
+ zoomToWavenumber: (wavenumber, options: ZoomToBandOptions = {}) => {
140
+ const { width = DEFAULT_FRAME_WIDTH } = options;
141
+ const shown: IrDomain = domain ?? fullDomain(visibleSpectra, mode);
142
+ actions.setDomain({
143
+ x: [wavenumber - width / 2, wavenumber + width / 2],
144
+ y: shown.y,
145
+ });
146
+ },
147
+ selectSpectrum: (id) => actions.selectSpectrum(id),
148
+ }),
149
+ [state.data.spectra, actions, domain, visibleSpectra, mode],
150
+ );
151
+
152
+ /**
153
+ * Open or close the side, as the splitter is dragged shut and back open.
154
+ * @param open - Whether the side is now open.
155
+ */
156
+ function setSideOpen(open: boolean): void {
157
+ if (!open) {
158
+ for (const panelId of openPanelIds) actions.togglePanel(panelId);
159
+ return;
160
+ }
161
+ // Dragging the splitter back open must land on something, or it opens on an
162
+ // empty column and reads as broken.
163
+ if (openPanelIds.length === 0) actions.togglePanel(DEFAULT_SIDE_PANEL);
164
+ }
165
+
166
+ return (
167
+ <IrCommandProvider handlers={commands}>
168
+ {/* `tabIndex` so a click anywhere in the viewer makes this the target the
169
+ shortcuts are heard on: keys are delivered to whatever holds the caret,
170
+ and an SVG never does. */}
171
+ <div ref={setRoot} tabIndex={-1} style={rootStyle}>
172
+ <IrHeader />
173
+
174
+ <div style={mainStyle}>
175
+ {/* The rails are chrome of a fixed width, and a flex child shrinks by
176
+ default: in a narrow viewer the row would take the width it is
177
+ short of out of them, and half an icon is what that looks like. */}
178
+ <div style={railStyle}>
179
+ <IrToolbar />
180
+ </div>
181
+
182
+ <SplitPane
183
+ direction="horizontal"
184
+ controlledSide="end"
185
+ defaultSize="360px"
186
+ open={openPanelIds.length > 0}
187
+ onOpenChange={setSideOpen}
188
+ >
189
+ <IrCanvas
190
+ highlight={highlight}
191
+ onHighlight={setHighlight}
192
+ attachChart={chart.attach}
193
+ />
194
+
195
+ <IrSidePanel highlight={highlight} onHighlight={setHighlight} />
196
+ </SplitPane>
197
+
198
+ {/* Outside the split, so the icons stay put against the right edge
199
+ while the panel beside them is resized or closed. */}
200
+ <div style={railStyle}>
201
+ <PanelRail
202
+ panels={irSidePanels}
203
+ openIds={openPanelIds}
204
+ onToggle={actions.togglePanel}
205
+ />
206
+ </div>
207
+ </div>
208
+ </div>
209
+
210
+ <IrAboutDialog
211
+ isOpen={isAboutOpen}
212
+ onClose={() => setIsAboutOpen(false)}
213
+ />
214
+ <IrDocumentationDialog
215
+ isOpen={isDocumentationOpen}
216
+ onClose={() => setIsDocumentationOpen(false)}
217
+ />
218
+
219
+ {/* `element`, not `content`: the chart is drawn to the box it was given,
220
+ so the box is the picture — measuring the marks inside it would crop
221
+ the frame to wherever the trace happens to reach and leave the axes
222
+ hanging. */}
223
+ <ExportImageDialog
224
+ isOpen={isExportImageOpen}
225
+ getDrawing={chart.getDrawing}
226
+ frame="element"
227
+ filename={pictureName(visibleSpectra, selectedSpectrum)}
228
+ label="Infrared spectrum"
229
+ onClose={() => setIsExportImageOpen(false)}
230
+ />
231
+ </IrCommandProvider>
232
+ );
233
+ }
234
+
235
+ /**
236
+ * What one press of zoom in or out is worth.
237
+ *
238
+ * A fifth, which is about what one notch of a mouse wheel does — so the button
239
+ * and the wheel feel like the same gesture at two speeds rather than two
240
+ * different ones.
241
+ */
242
+ const ZOOM_STEP = 1.2;
243
+
244
+ /** How wide a window a host gets when it asks to frame a band without saying. */
245
+ const DEFAULT_FRAME_WIDTH = 200;
246
+
247
+ /**
248
+ * What a picture of the chart is called before anything is typed in the box.
249
+ *
250
+ * The spectrum being looked at, since a figure of the chart is a figure of that
251
+ * spectrum, and a chemist who has one run open should not have to work out
252
+ * which of their downloads `spectra.png` was. A chart holding several and
253
+ * pointing at none of them is named after the lot.
254
+ * @param spectra - What is drawn.
255
+ * @param selected - The one being looked at, `null` when none is.
256
+ * @returns The name, without its extension.
257
+ */
258
+ function pictureName(
259
+ spectra: readonly IrSpectrum[],
260
+ selected: IrSpectrum | null,
261
+ ): string {
262
+ const named = selected ?? (spectra.length === 1 ? spectra[0] : undefined);
263
+ return named === undefined
264
+ ? 'spectra'
265
+ : sanitizeFileName(named.name, 'spectrum');
266
+ }
267
+
268
+ const rootStyle = {
269
+ display: 'flex',
270
+ flexDirection: 'column',
271
+ flex: '1 1 1px',
272
+ width: '100%',
273
+ height: '100%',
274
+ minHeight: 0,
275
+ outline: 'none',
276
+ } as const;
277
+
278
+ const mainStyle = {
279
+ display: 'flex',
280
+ flex: '1 1 1px',
281
+ minWidth: 0,
282
+ minHeight: 0,
283
+ } as const;
284
+
285
+ const railStyle = { flex: 'none' } as const;
@@ -0,0 +1,78 @@
1
+ import { SidePanelStack } from '../../panel/ui/SidePanelStack.tsx';
2
+ import type { IrBand } from '../core/irBand.ts';
3
+ import type { IrSidePanelId } from '../core/irSidePanels.ts';
4
+ import { irSidePanels } from '../core/irSidePanels.ts';
5
+
6
+ import { BandsPanel } from './BandsPanel.tsx';
7
+ import { MetadataPanel } from './MetadataPanel.tsx';
8
+ import { SpectraPanel } from './SpectraPanel.tsx';
9
+ import { useIrActions, useIrEditorState } from './irStateContext.ts';
10
+
11
+ export interface IrSidePanelProps {
12
+ /**
13
+ * The band the pointer is resting on.
14
+ * @default null
15
+ */
16
+ highlight?: IrBand | null;
17
+ /**
18
+ * Told when a row is hovered.
19
+ * @default undefined
20
+ */
21
+ onHighlight?: (band: IrBand | null) => void;
22
+ }
23
+
24
+ /**
25
+ * The panels that are open, stacked down the right.
26
+ *
27
+ * Every open panel gets a share of the height rather than a turn, because the
28
+ * things they hold are read together: which spectrum is selected and what its
29
+ * bands are is one question asked of two panels. The header carries the close
30
+ * button and nothing else — a panel's own actions are a toolbar inside its body,
31
+ * so they travel with it.
32
+ * @param props - Component props.
33
+ * @returns The panel stack.
34
+ */
35
+ export function IrSidePanel(props: IrSidePanelProps) {
36
+ const { highlight = null, onHighlight } = props;
37
+ const { state } = useIrEditorState();
38
+ const actions = useIrActions();
39
+ const { openPanelIds } = state.view;
40
+
41
+ return (
42
+ <SidePanelStack
43
+ panels={irSidePanels}
44
+ openPanelIds={openPanelIds}
45
+ onClose={actions.togglePanel}
46
+ >
47
+ {(panel) => (
48
+ <PanelBody
49
+ panelId={panel.id}
50
+ highlight={highlight}
51
+ onHighlight={onHighlight}
52
+ />
53
+ )}
54
+ </SidePanelStack>
55
+ );
56
+ }
57
+
58
+ interface PanelBodyProps {
59
+ /** Which panel to draw. */
60
+ panelId: IrSidePanelId;
61
+ /** The band the pointer is resting on. */
62
+ highlight: IrBand | null;
63
+ /** Told when a row is hovered. */
64
+ onHighlight?: (band: IrBand | null) => void;
65
+ }
66
+
67
+ /**
68
+ * Which panel a panel id is.
69
+ * @param props - Component props.
70
+ * @returns The panel's body.
71
+ */
72
+ function PanelBody(props: PanelBodyProps) {
73
+ const { panelId, highlight, onHighlight } = props;
74
+
75
+ if (panelId === 'spectra') return <SpectraPanel />;
76
+ if (panelId === 'metadata') return <MetadataPanel />;
77
+ return <BandsPanel highlight={highlight} onHighlight={onHighlight} />;
78
+ }
@@ -0,0 +1,32 @@
1
+ import type { ReactNode } from 'react';
2
+
3
+ import { actionsContext, stateContext } from './irStateContext.ts';
4
+ import type { IrEditorApi } from './useIrEditor.ts';
5
+
6
+ export interface IrStateProviderProps {
7
+ /** The viewer's state, as `useIrEditor` holds it. */
8
+ editor: IrEditorApi;
9
+ /** The viewer. */
10
+ children: ReactNode;
11
+ }
12
+
13
+ /**
14
+ * Put one viewer's state where its panels can reach it.
15
+ *
16
+ * The state and the actions go into separate contexts on purpose — see
17
+ * `irStateContext.ts` for why — and the actions are handed over as they are,
18
+ * since `useIrEditor` already keeps them stable for the life of the viewer.
19
+ * @param props - Component props.
20
+ * @returns The provider.
21
+ */
22
+ export function IrStateProvider(props: IrStateProviderProps) {
23
+ const { editor, children } = props;
24
+
25
+ return (
26
+ <stateContext.Provider value={editor}>
27
+ <actionsContext.Provider value={editor.actions}>
28
+ {children}
29
+ </actionsContext.Provider>
30
+ </stateContext.Provider>
31
+ );
32
+ }
@@ -0,0 +1,97 @@
1
+ import { Icon } from '@blueprintjs/core';
2
+
3
+ import {
4
+ countLabel,
5
+ statusBarStyle as barStyle,
6
+ statusItemStyle as itemStyle,
7
+ statusMutedStyle as mutedStyle,
8
+ statusSpacerStyle as spacerStyle,
9
+ } from '../../panel/core/statusBar.ts';
10
+ import { countAssigned } from '../core/assignBands.ts';
11
+ import { formatWavenumber } from '../core/irFormat.ts';
12
+ import { boxZoomOnly, yAxisTitle } from '../core/irMode.ts';
13
+
14
+ import { useIrEditorState } from './irStateContext.ts';
15
+
16
+ /**
17
+ * The one line under the chart: what is drawn, what was found, what went wrong.
18
+ *
19
+ * Everything in it is derived, so it is the cheapest place in the viewer to
20
+ * answer "did that work" — how many spectra are drawn of those open, how many
21
+ * bands the picking found and how many the table had something to say about, and
22
+ * the range the selected spectrum covers.
23
+ *
24
+ * The refusal is last and is the only red in the shell, so the eye that has just
25
+ * pressed something and seen nothing happen lands on the reason.
26
+ * @returns The status bar.
27
+ */
28
+ export function IrStatusBar() {
29
+ const { state, visibleSpectra, selectedSpectrum, assigned } =
30
+ useIrEditorState();
31
+ const { spectra } = state.data;
32
+ const { error, tool } = state.view;
33
+ const { mode, pickBands } = state.settings;
34
+
35
+ const range =
36
+ selectedSpectrum === null || selectedSpectrum.wavenumber.length === 0
37
+ ? null
38
+ : `${formatWavenumber(selectedSpectrum.wavenumber.at(-1) as number)}–${formatWavenumber(selectedSpectrum.wavenumber[0] as number)} cm⁻¹`;
39
+
40
+ return (
41
+ <div style={barStyle}>
42
+ <span style={itemStyle}>
43
+ {spectra.length === 0
44
+ ? 'no spectrum open'
45
+ : `${countLabel(visibleSpectra.length, 'spectrum', 'spectra')} drawn of ${spectra.length}`}
46
+ </span>
47
+
48
+ <span style={itemStyle}>{yAxisTitle(mode)}</span>
49
+
50
+ {selectedSpectrum === null ? null : (
51
+ <span style={nameStyle} title={selectedSpectrum.name}>
52
+ {selectedSpectrum.name}
53
+ </span>
54
+ )}
55
+
56
+ {range === null ? null : <span style={mutedStyle}>{range}</span>}
57
+
58
+ {pickBands && assigned.length > 0 ? (
59
+ <span style={itemStyle}>
60
+ {countLabel(assigned.length, 'band', 'bands')},{' '}
61
+ {countAssigned(assigned)} assigned
62
+ </span>
63
+ ) : null}
64
+
65
+ {boxZoomOnly(mode) || tool === 'box' ? (
66
+ <span style={mutedStyle}>square zoom: drag a rectangle</span>
67
+ ) : null}
68
+
69
+ <span style={spacerStyle} />
70
+
71
+ {error === null ? null : (
72
+ <span style={errorStyle} title={error}>
73
+ <Icon icon="warning-sign" size={12} />
74
+ {error}
75
+ </span>
76
+ )}
77
+ </div>
78
+ );
79
+ }
80
+
81
+ const nameStyle = {
82
+ ...itemStyle,
83
+ overflow: 'hidden',
84
+ textOverflow: 'ellipsis',
85
+ maxWidth: '32%',
86
+ fontWeight: 600,
87
+ } as const;
88
+
89
+ /** The one red in the shell: a refusal, and nothing else, is written in it. */
90
+ const errorStyle = {
91
+ ...itemStyle,
92
+ gap: 4,
93
+ color: '#C0392B',
94
+ overflow: 'hidden',
95
+ textOverflow: 'ellipsis',
96
+ maxWidth: '60%',
97
+ } as const;
@@ -0,0 +1,102 @@
1
+ import { Toolbar } from 'react-science/ui';
2
+
3
+ import { boxZoomOnly } from '../core/irMode.ts';
4
+
5
+ import { useIrCommandProps } from './irCommandContext.tsx';
6
+ import { useIrEditorState } from './irStateContext.ts';
7
+
8
+ /**
9
+ * The tools, down the left of the chart.
10
+ *
11
+ * Only what is done to the spectra: what is asked of the viewer itself — the
12
+ * mark, help, full screen — is in the header. The two **tools** — read and
13
+ * square zoom — come first and show which of the two a drag is currently
14
+ * running, then the zoom commands that act at once, then what is being read: the
15
+ * value axis, the picking, the assignments. Closing every spectrum is last and
16
+ * alone, being the only one that throws something away.
17
+ *
18
+ * Reading percent transmittance, the pair is settled rather than chosen: every
19
+ * drag on that axis is a rectangle, so both buttons go dead with the square zoom
20
+ * lit. Showing `read` as available there would offer a gesture the chart does not
21
+ * make, and showing it as *active* would name the wrong one.
22
+ * @returns The toolbar.
23
+ */
24
+ export function IrToolbar() {
25
+ const { state, selectedSpectrum } = useIrEditorState();
26
+ const command = useIrCommandProps();
27
+ const { spectra } = state.data;
28
+ const { domain, tool } = state.view;
29
+ const { mode, pickBands, showAssignments } = state.settings;
30
+
31
+ const isEmpty = spectra.length === 0;
32
+ const settled = boxZoomOnly(mode);
33
+
34
+ return (
35
+ // `collapse`, not the default `wrap`: a wrapping vertical toolbar measures
36
+ // itself and writes the result back as an inline width, so in a row short of
37
+ // space it settles at half an icon and stays there.
38
+ <Toolbar vertical overflow="collapse" aria-label="Infrared spectrum tools">
39
+ <Toolbar.Item
40
+ icon="trash"
41
+ intent="danger"
42
+ {...command('clear')}
43
+ disabled={isEmpty}
44
+ />
45
+ {/* The read tool drags along one axis, so it is drawn as that; the box
46
+ tool sweeps a rectangle, which is what a marquee icon means. */}
47
+ <Toolbar.Item
48
+ icon="arrows-horizontal"
49
+ active={!settled && tool === 'read'}
50
+ {...command('readTool')}
51
+ disabled={isEmpty || settled}
52
+ />
53
+ <Toolbar.Item
54
+ icon="select"
55
+ active={settled || tool === 'box'}
56
+ {...command('boxTool')}
57
+ disabled={isEmpty || settled}
58
+ />
59
+
60
+ <Toolbar.Item icon="zoom-in" {...command('zoomIn')} disabled={isEmpty} />
61
+ <Toolbar.Item
62
+ icon="zoom-out"
63
+ {...command('zoomOut')}
64
+ disabled={isEmpty}
65
+ />
66
+ <Toolbar.Item
67
+ icon="zoom-to-fit"
68
+ {...command('resetZoom')}
69
+ disabled={domain === null}
70
+ />
71
+
72
+ <Toolbar.Item
73
+ icon={mode === 'absorbance' ? 'arrow-up' : 'arrow-down'}
74
+ active={mode === 'absorbance'}
75
+ {...command('toggleMode')}
76
+ disabled={isEmpty}
77
+ />
78
+ <Toolbar.Item
79
+ icon="locate"
80
+ active={pickBands}
81
+ {...command('togglePicking')}
82
+ disabled={selectedSpectrum === null}
83
+ />
84
+ <Toolbar.Item
85
+ icon="label"
86
+ active={showAssignments}
87
+ {...command('toggleAssignments')}
88
+ disabled={!pickBands || selectedSpectrum === null}
89
+ />
90
+
91
+ {/* What the chart looks like right now is what a figure is of — the
92
+ window it was dragged to, the way up it is being read, the
93
+ assignments written under the bands — so the picture is taken here
94
+ rather than rebuilt from the spectra in a panel. */}
95
+ <Toolbar.Item
96
+ icon="media"
97
+ {...command('exportImage')}
98
+ disabled={isEmpty}
99
+ />
100
+ </Toolbar>
101
+ );
102
+ }