react-cheminfo 0.28.0 → 0.29.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (691) hide show
  1. package/README.md +38 -25
  2. package/lib/chart/core/axisLabels.d.ts +82 -0
  3. package/lib/chart/core/axisLabels.d.ts.map +1 -0
  4. package/lib/chart/core/axisLabels.js +111 -0
  5. package/lib/chart/core/axisLabels.js.map +1 -0
  6. package/lib/chart/core/boxLayout.d.ts +53 -0
  7. package/lib/chart/core/boxLayout.d.ts.map +1 -0
  8. package/lib/chart/core/boxLayout.js +112 -0
  9. package/lib/chart/core/boxLayout.js.map +1 -0
  10. package/lib/chart/core/chartAxisScale.d.ts +23 -2
  11. package/lib/chart/core/chartAxisScale.d.ts.map +1 -1
  12. package/lib/chart/core/chartAxisScale.js +64 -13
  13. package/lib/chart/core/chartAxisScale.js.map +1 -1
  14. package/lib/chart/core/chartDomain.d.ts +160 -0
  15. package/lib/chart/core/chartDomain.d.ts.map +1 -0
  16. package/lib/chart/core/chartDomain.js +46 -0
  17. package/lib/chart/core/chartDomain.js.map +1 -0
  18. package/lib/chart/core/chartGeometry.d.ts +131 -0
  19. package/lib/chart/core/chartGeometry.d.ts.map +1 -0
  20. package/lib/chart/core/chartGeometry.js +101 -0
  21. package/lib/chart/core/chartGeometry.js.map +1 -0
  22. package/lib/chart/core/chartPane.d.ts +11 -0
  23. package/lib/chart/core/chartPane.d.ts.map +1 -0
  24. package/lib/chart/core/chartPane.js +11 -0
  25. package/lib/chart/core/chartPane.js.map +1 -0
  26. package/lib/chart/core/chartScale.d.ts +4 -1
  27. package/lib/chart/core/chartScale.d.ts.map +1 -1
  28. package/lib/chart/core/chartScale.js +8 -4
  29. package/lib/chart/core/chartScale.js.map +1 -1
  30. package/lib/chart/core/chartTheme.d.ts +156 -0
  31. package/lib/chart/core/chartTheme.d.ts.map +1 -0
  32. package/lib/chart/core/chartTheme.js +156 -0
  33. package/lib/chart/core/chartTheme.js.map +1 -0
  34. package/lib/chart/core/chartViewport.d.ts +32 -5
  35. package/lib/chart/core/chartViewport.d.ts.map +1 -1
  36. package/lib/chart/core/chartViewport.js +40 -11
  37. package/lib/chart/core/chartViewport.js.map +1 -1
  38. package/lib/chart/core/guidePlacement.d.ts +52 -0
  39. package/lib/chart/core/guidePlacement.d.ts.map +1 -0
  40. package/lib/chart/core/guidePlacement.js +52 -0
  41. package/lib/chart/core/guidePlacement.js.map +1 -0
  42. package/lib/chart/core/index.d.ts +29 -2
  43. package/lib/chart/core/index.d.ts.map +1 -1
  44. package/lib/chart/core/index.js +19 -2
  45. package/lib/chart/core/index.js.map +1 -1
  46. package/lib/chart/core/labelStack.d.ts +27 -0
  47. package/lib/chart/core/labelStack.d.ts.map +1 -0
  48. package/lib/chart/core/labelStack.js +62 -0
  49. package/lib/chart/core/labelStack.js.map +1 -0
  50. package/lib/chart/core/legendBox.d.ts +152 -0
  51. package/lib/chart/core/legendBox.d.ts.map +1 -0
  52. package/lib/chart/core/legendBox.js +169 -0
  53. package/lib/chart/core/legendBox.js.map +1 -0
  54. package/lib/chart/core/selectionGeometry.d.ts +45 -0
  55. package/lib/chart/core/selectionGeometry.d.ts.map +1 -0
  56. package/lib/chart/core/selectionGeometry.js +49 -0
  57. package/lib/chart/core/selectionGeometry.js.map +1 -0
  58. package/lib/chart/core/spectrumColor.d.ts +80 -0
  59. package/lib/chart/core/spectrumColor.d.ts.map +1 -0
  60. package/lib/chart/core/spectrumColor.js +120 -0
  61. package/lib/chart/core/spectrumColor.js.map +1 -0
  62. package/lib/chart/core/stackCapacity.d.ts +136 -0
  63. package/lib/chart/core/stackCapacity.d.ts.map +1 -0
  64. package/lib/chart/core/stackCapacity.js +153 -0
  65. package/lib/chart/core/stackCapacity.js.map +1 -0
  66. package/lib/chart/core/svgPoint.d.ts +62 -0
  67. package/lib/chart/core/svgPoint.d.ts.map +1 -0
  68. package/lib/chart/core/svgPoint.js +43 -0
  69. package/lib/chart/core/svgPoint.js.map +1 -0
  70. package/lib/chart/core/tracePath.d.ts +94 -0
  71. package/lib/chart/core/tracePath.d.ts.map +1 -0
  72. package/lib/chart/core/tracePath.js +191 -0
  73. package/lib/chart/core/tracePath.js.map +1 -0
  74. package/lib/chart/core/trackerReadout.d.ts +55 -0
  75. package/lib/chart/core/trackerReadout.d.ts.map +1 -0
  76. package/lib/chart/core/trackerReadout.js +53 -0
  77. package/lib/chart/core/trackerReadout.js.map +1 -0
  78. package/lib/chart/core/viewTransform.d.ts +167 -0
  79. package/lib/chart/core/viewTransform.d.ts.map +1 -0
  80. package/lib/chart/core/viewTransform.js +188 -0
  81. package/lib/chart/core/viewTransform.js.map +1 -0
  82. package/lib/chart/core/zoomDomain.d.ts +127 -0
  83. package/lib/chart/core/zoomDomain.d.ts.map +1 -0
  84. package/lib/chart/core/zoomDomain.js +175 -0
  85. package/lib/chart/core/zoomDomain.js.map +1 -0
  86. package/lib/chart/ui/Axes.d.ts +104 -0
  87. package/lib/chart/ui/Axes.d.ts.map +1 -0
  88. package/lib/chart/ui/Axes.js +155 -0
  89. package/lib/chart/ui/Axes.js.map +1 -0
  90. package/lib/chart/ui/AxisGuide.d.ts +60 -0
  91. package/lib/chart/ui/AxisGuide.d.ts.map +1 -0
  92. package/lib/chart/ui/AxisGuide.js +111 -0
  93. package/lib/chart/ui/AxisGuide.js.map +1 -0
  94. package/lib/chart/ui/ChartStack.d.ts +81 -0
  95. package/lib/chart/ui/ChartStack.d.ts.map +1 -0
  96. package/lib/chart/ui/ChartStack.js +42 -0
  97. package/lib/chart/ui/ChartStack.js.map +1 -0
  98. package/lib/chart/ui/ChartTracker.d.ts +36 -0
  99. package/lib/chart/ui/ChartTracker.d.ts.map +1 -0
  100. package/lib/chart/ui/ChartTracker.js +27 -0
  101. package/lib/chart/ui/ChartTracker.js.map +1 -0
  102. package/lib/chart/ui/PlotCaption.d.ts +44 -0
  103. package/lib/chart/ui/PlotCaption.d.ts.map +1 -0
  104. package/lib/chart/ui/PlotCaption.js +68 -0
  105. package/lib/chart/ui/PlotCaption.js.map +1 -0
  106. package/lib/chart/ui/SelectionRect.d.ts +27 -0
  107. package/lib/chart/ui/SelectionRect.d.ts.map +1 -0
  108. package/lib/chart/ui/SelectionRect.js +31 -0
  109. package/lib/chart/ui/SelectionRect.js.map +1 -0
  110. package/lib/chart/ui/TraceLegend.d.ts +99 -0
  111. package/lib/chart/ui/TraceLegend.d.ts.map +1 -0
  112. package/lib/chart/ui/TraceLegend.js +45 -0
  113. package/lib/chart/ui/TraceLegend.js.map +1 -0
  114. package/lib/chart/ui/chartGestures.d.ts +158 -0
  115. package/lib/chart/ui/chartGestures.d.ts.map +1 -0
  116. package/lib/chart/ui/chartGestures.js +145 -0
  117. package/lib/chart/ui/chartGestures.js.map +1 -0
  118. package/lib/chart/ui/chartStackLevel.d.ts +115 -0
  119. package/lib/chart/ui/chartStackLevel.d.ts.map +1 -0
  120. package/lib/chart/ui/chartStackLevel.js +96 -0
  121. package/lib/chart/ui/chartStackLevel.js.map +1 -0
  122. package/lib/chart/ui/chartSurface.d.ts +35 -0
  123. package/lib/chart/ui/chartSurface.d.ts.map +1 -0
  124. package/lib/chart/ui/chartSurface.js +58 -0
  125. package/lib/chart/ui/chartSurface.js.map +1 -0
  126. package/lib/chart/ui/index.d.ts +24 -0
  127. package/lib/chart/ui/index.d.ts.map +1 -1
  128. package/lib/chart/ui/index.js +13 -0
  129. package/lib/chart/ui/index.js.map +1 -1
  130. package/lib/chart/ui/useChartPointer.d.ts +124 -0
  131. package/lib/chart/ui/useChartPointer.d.ts.map +1 -0
  132. package/lib/chart/ui/useChartPointer.js +152 -0
  133. package/lib/chart/ui/useChartPointer.js.map +1 -0
  134. package/lib/chart/ui/useChartSize.d.ts +49 -0
  135. package/lib/chart/ui/useChartSize.d.ts.map +1 -0
  136. package/lib/chart/ui/useChartSize.js +91 -0
  137. package/lib/chart/ui/useChartSize.js.map +1 -0
  138. package/lib/chart/ui/useChartWindow.d.ts +147 -0
  139. package/lib/chart/ui/useChartWindow.d.ts.map +1 -0
  140. package/lib/chart/ui/useChartWindow.js +135 -0
  141. package/lib/chart/ui/useChartWindow.js.map +1 -0
  142. package/lib/chart/ui/useChartZoom.d.ts +88 -0
  143. package/lib/chart/ui/useChartZoom.d.ts.map +1 -0
  144. package/lib/chart/ui/useChartZoom.js +142 -0
  145. package/lib/chart/ui/useChartZoom.js.map +1 -0
  146. package/lib/chart/ui/useWheelListener.d.ts +30 -0
  147. package/lib/chart/ui/useWheelListener.d.ts.map +1 -0
  148. package/lib/chart/ui/useWheelListener.js +57 -0
  149. package/lib/chart/ui/useWheelListener.js.map +1 -0
  150. package/lib/clipboard/core/copyPng.d.ts +13 -0
  151. package/lib/clipboard/core/copyPng.d.ts.map +1 -0
  152. package/lib/clipboard/core/copyPng.js +19 -0
  153. package/lib/clipboard/core/copyPng.js.map +1 -0
  154. package/lib/clipboard/core/index.d.ts +1 -0
  155. package/lib/clipboard/core/index.d.ts.map +1 -1
  156. package/lib/clipboard/core/index.js +1 -0
  157. package/lib/clipboard/core/index.js.map +1 -1
  158. package/lib/core.d.ts +1 -0
  159. package/lib/core.d.ts.map +1 -1
  160. package/lib/core.js +1 -0
  161. package/lib/core.js.map +1 -1
  162. package/lib/download/core/exportStyles.d.ts +22 -0
  163. package/lib/download/core/exportStyles.d.ts.map +1 -0
  164. package/lib/download/core/exportStyles.js +19 -0
  165. package/lib/download/core/exportStyles.js.map +1 -0
  166. package/lib/download/core/imageResolution.d.ts +88 -0
  167. package/lib/download/core/imageResolution.d.ts.map +1 -0
  168. package/lib/download/core/imageResolution.js +77 -0
  169. package/lib/download/core/imageResolution.js.map +1 -0
  170. package/lib/download/core/index.d.ts +13 -0
  171. package/lib/download/core/index.d.ts.map +1 -1
  172. package/lib/download/core/index.js +8 -0
  173. package/lib/download/core/index.js.map +1 -1
  174. package/lib/download/core/pictureExport.d.ts +93 -0
  175. package/lib/download/core/pictureExport.d.ts.map +1 -0
  176. package/lib/download/core/pictureExport.js +116 -0
  177. package/lib/download/core/pictureExport.js.map +1 -0
  178. package/lib/download/core/stackedDrawing.d.ts +36 -0
  179. package/lib/download/core/stackedDrawing.d.ts.map +1 -0
  180. package/lib/download/core/stackedDrawing.js +98 -0
  181. package/lib/download/core/stackedDrawing.js.map +1 -0
  182. package/lib/download/core/svgBounds.d.ts +44 -0
  183. package/lib/download/core/svgBounds.d.ts.map +1 -0
  184. package/lib/download/core/svgBounds.js +69 -0
  185. package/lib/download/core/svgBounds.js.map +1 -0
  186. package/lib/download/core/svgNamespace.d.ts +9 -0
  187. package/lib/download/core/svgNamespace.d.ts.map +1 -0
  188. package/lib/download/core/svgNamespace.js +10 -0
  189. package/lib/download/core/svgNamespace.js.map +1 -0
  190. package/lib/download/core/svgToPng.d.ts +43 -0
  191. package/lib/download/core/svgToPng.d.ts.map +1 -0
  192. package/lib/download/core/svgToPng.js +79 -0
  193. package/lib/download/core/svgToPng.js.map +1 -0
  194. package/lib/download/core/svgToString.d.ts +45 -0
  195. package/lib/download/core/svgToString.d.ts.map +1 -0
  196. package/lib/download/core/svgToString.js +58 -0
  197. package/lib/download/core/svgToString.js.map +1 -0
  198. package/lib/download/ui/ExportDialogFrame.d.ts +46 -0
  199. package/lib/download/ui/ExportDialogFrame.d.ts.map +1 -0
  200. package/lib/download/ui/ExportDialogFrame.js +24 -0
  201. package/lib/download/ui/ExportDialogFrame.js.map +1 -0
  202. package/lib/download/ui/ExportImageDialog.d.ts +47 -0
  203. package/lib/download/ui/ExportImageDialog.d.ts.map +1 -0
  204. package/lib/download/ui/ExportImageDialog.js +25 -0
  205. package/lib/download/ui/ExportImageDialog.js.map +1 -0
  206. package/lib/download/ui/ExportNameField.d.ts +29 -0
  207. package/lib/download/ui/ExportNameField.d.ts.map +1 -0
  208. package/lib/download/ui/ExportNameField.js +99 -0
  209. package/lib/download/ui/ExportNameField.js.map +1 -0
  210. package/lib/download/ui/ExportPictureSection.d.ts +38 -0
  211. package/lib/download/ui/ExportPictureSection.d.ts.map +1 -0
  212. package/lib/download/ui/ExportPictureSection.js +48 -0
  213. package/lib/download/ui/ExportPictureSection.js.map +1 -0
  214. package/lib/download/ui/index.d.ts +10 -0
  215. package/lib/download/ui/index.d.ts.map +1 -1
  216. package/lib/download/ui/index.js +5 -0
  217. package/lib/download/ui/index.js.map +1 -1
  218. package/lib/download/ui/useDrawingBox.d.ts +23 -0
  219. package/lib/download/ui/useDrawingBox.d.ts.map +1 -0
  220. package/lib/download/ui/useDrawingBox.js +21 -0
  221. package/lib/download/ui/useDrawingBox.js.map +1 -0
  222. package/lib/error/core/describeSource.d.ts +17 -0
  223. package/lib/error/core/describeSource.d.ts.map +1 -0
  224. package/lib/error/core/describeSource.js +19 -0
  225. package/lib/error/core/describeSource.js.map +1 -0
  226. package/lib/error/core/index.d.ts +1 -0
  227. package/lib/error/core/index.d.ts.map +1 -1
  228. package/lib/error/core/index.js +1 -0
  229. package/lib/error/core/index.js.map +1 -1
  230. package/lib/help/ui/HelpBody.d.ts +10 -1
  231. package/lib/help/ui/HelpBody.d.ts.map +1 -1
  232. package/lib/help/ui/HelpBody.js +24 -1
  233. package/lib/help/ui/HelpBody.js.map +1 -1
  234. package/lib/help/ui/index.d.ts +1 -1
  235. package/lib/help/ui/index.d.ts.map +1 -1
  236. package/lib/help/ui/index.js.map +1 -1
  237. package/lib/ir/core/analysisSpectra.d.ts +46 -0
  238. package/lib/ir/core/analysisSpectra.d.ts.map +1 -0
  239. package/lib/ir/core/analysisSpectra.js +187 -0
  240. package/lib/ir/core/analysisSpectra.js.map +1 -0
  241. package/lib/ir/core/assignBands.d.ts +83 -0
  242. package/lib/ir/core/assignBands.d.ts.map +1 -0
  243. package/lib/ir/core/assignBands.js +83 -0
  244. package/lib/ir/core/assignBands.js.map +1 -0
  245. package/lib/ir/core/bandAssignments.d.ts +47 -0
  246. package/lib/ir/core/bandAssignments.d.ts.map +1 -0
  247. package/lib/ir/core/bandAssignments.js +305 -0
  248. package/lib/ir/core/bandAssignments.js.map +1 -0
  249. package/lib/ir/core/bandLabelPlan.d.ts +93 -0
  250. package/lib/ir/core/bandLabelPlan.d.ts.map +1 -0
  251. package/lib/ir/core/bandLabelPlan.js +104 -0
  252. package/lib/ir/core/bandLabelPlan.js.map +1 -0
  253. package/lib/ir/core/detectIrFormat.d.ts +23 -0
  254. package/lib/ir/core/detectIrFormat.d.ts.map +1 -0
  255. package/lib/ir/core/detectIrFormat.js +133 -0
  256. package/lib/ir/core/detectIrFormat.js.map +1 -0
  257. package/lib/ir/core/downloadSpectra.d.ts +26 -0
  258. package/lib/ir/core/downloadSpectra.d.ts.map +1 -0
  259. package/lib/ir/core/downloadSpectra.js +37 -0
  260. package/lib/ir/core/downloadSpectra.js.map +1 -0
  261. package/lib/ir/core/fromJcamp.d.ts +35 -0
  262. package/lib/ir/core/fromJcamp.d.ts.map +1 -0
  263. package/lib/ir/core/fromJcamp.js +48 -0
  264. package/lib/ir/core/fromJcamp.js.map +1 -0
  265. package/lib/ir/core/fromSpc.d.ts +30 -0
  266. package/lib/ir/core/fromSpc.d.ts.map +1 -0
  267. package/lib/ir/core/fromSpc.js +40 -0
  268. package/lib/ir/core/fromSpc.js.map +1 -0
  269. package/lib/ir/core/index.d.ts +51 -0
  270. package/lib/ir/core/index.d.ts.map +1 -0
  271. package/lib/ir/core/index.js +35 -0
  272. package/lib/ir/core/index.js.map +1 -0
  273. package/lib/ir/core/irBand.d.ts +45 -0
  274. package/lib/ir/core/irBand.d.ts.map +1 -0
  275. package/lib/ir/core/irBand.js +30 -0
  276. package/lib/ir/core/irBand.js.map +1 -0
  277. package/lib/ir/core/irCommands.d.ts +168 -0
  278. package/lib/ir/core/irCommands.d.ts.map +1 -0
  279. package/lib/ir/core/irCommands.js +94 -0
  280. package/lib/ir/core/irCommands.js.map +1 -0
  281. package/lib/ir/core/irDomain.d.ts +63 -0
  282. package/lib/ir/core/irDomain.d.ts.map +1 -0
  283. package/lib/ir/core/irDomain.js +136 -0
  284. package/lib/ir/core/irDomain.js.map +1 -0
  285. package/lib/ir/core/irEditorApi.d.ts +42 -0
  286. package/lib/ir/core/irEditorApi.d.ts.map +1 -0
  287. package/lib/ir/core/irEditorApi.js +10 -0
  288. package/lib/ir/core/irEditorApi.js.map +1 -0
  289. package/lib/ir/core/irFormat.d.ts +42 -0
  290. package/lib/ir/core/irFormat.d.ts.map +1 -0
  291. package/lib/ir/core/irFormat.js +51 -0
  292. package/lib/ir/core/irFormat.js.map +1 -0
  293. package/lib/ir/core/irMode.d.ts +160 -0
  294. package/lib/ir/core/irMode.d.ts.map +1 -0
  295. package/lib/ir/core/irMode.js +175 -0
  296. package/lib/ir/core/irMode.js.map +1 -0
  297. package/lib/ir/core/irReducer.d.ts +101 -0
  298. package/lib/ir/core/irReducer.d.ts.map +1 -0
  299. package/lib/ir/core/irReducer.js +207 -0
  300. package/lib/ir/core/irReducer.js.map +1 -0
  301. package/lib/ir/core/irSidePanels.d.ts +22 -0
  302. package/lib/ir/core/irSidePanels.d.ts.map +1 -0
  303. package/lib/ir/core/irSidePanels.js +12 -0
  304. package/lib/ir/core/irSidePanels.js.map +1 -0
  305. package/lib/ir/core/irSpectrum.d.ts +140 -0
  306. package/lib/ir/core/irSpectrum.d.ts.map +1 -0
  307. package/lib/ir/core/irSpectrum.js +34 -0
  308. package/lib/ir/core/irSpectrum.js.map +1 -0
  309. package/lib/ir/core/irState.d.ts +119 -0
  310. package/lib/ir/core/irState.d.ts.map +1 -0
  311. package/lib/ir/core/irState.js +92 -0
  312. package/lib/ir/core/irState.js.map +1 -0
  313. package/lib/ir/core/loadIrSpectra.d.ts +36 -0
  314. package/lib/ir/core/loadIrSpectra.d.ts.map +1 -0
  315. package/lib/ir/core/loadIrSpectra.js +44 -0
  316. package/lib/ir/core/loadIrSpectra.js.map +1 -0
  317. package/lib/ir/core/nearestBand.d.ts +35 -0
  318. package/lib/ir/core/nearestBand.d.ts.map +1 -0
  319. package/lib/ir/core/nearestBand.js +47 -0
  320. package/lib/ir/core/nearestBand.js.map +1 -0
  321. package/lib/ir/core/pickBands.d.ts +70 -0
  322. package/lib/ir/core/pickBands.d.ts.map +1 -0
  323. package/lib/ir/core/pickBands.js +125 -0
  324. package/lib/ir/core/pickBands.js.map +1 -0
  325. package/lib/ir/core/spectrumJcamp.d.ts +58 -0
  326. package/lib/ir/core/spectrumJcamp.d.ts.map +1 -0
  327. package/lib/ir/core/spectrumJcamp.js +156 -0
  328. package/lib/ir/core/spectrumJcamp.js.map +1 -0
  329. package/lib/ir/core/toIrSpectrum.d.ts +59 -0
  330. package/lib/ir/core/toIrSpectrum.d.ts.map +1 -0
  331. package/lib/ir/core/toIrSpectrum.js +56 -0
  332. package/lib/ir/core/toIrSpectrum.js.map +1 -0
  333. package/lib/ir/ui/BandMarks.d.ts +52 -0
  334. package/lib/ir/ui/BandMarks.d.ts.map +1 -0
  335. package/lib/ir/ui/BandMarks.js +71 -0
  336. package/lib/ir/ui/BandMarks.js.map +1 -0
  337. package/lib/ir/ui/BandsPanel.d.ts +31 -0
  338. package/lib/ir/ui/BandsPanel.d.ts.map +1 -0
  339. package/lib/ir/ui/BandsPanel.js +94 -0
  340. package/lib/ir/ui/BandsPanel.js.map +1 -0
  341. package/lib/ir/ui/IrAboutDialog.d.ts +18 -0
  342. package/lib/ir/ui/IrAboutDialog.d.ts.map +1 -0
  343. package/lib/ir/ui/IrAboutDialog.js +32 -0
  344. package/lib/ir/ui/IrAboutDialog.js.map +1 -0
  345. package/lib/ir/ui/IrCanvas.d.ts +38 -0
  346. package/lib/ir/ui/IrCanvas.d.ts.map +1 -0
  347. package/lib/ir/ui/IrCanvas.js +41 -0
  348. package/lib/ir/ui/IrCanvas.js.map +1 -0
  349. package/lib/ir/ui/IrChart.d.ts +28 -0
  350. package/lib/ir/ui/IrChart.d.ts.map +1 -0
  351. package/lib/ir/ui/IrChart.js +114 -0
  352. package/lib/ir/ui/IrChart.js.map +1 -0
  353. package/lib/ir/ui/IrCommandProvider.d.ts +15 -0
  354. package/lib/ir/ui/IrCommandProvider.d.ts.map +1 -0
  355. package/lib/ir/ui/IrCommandProvider.js +14 -0
  356. package/lib/ir/ui/IrCommandProvider.js.map +1 -0
  357. package/lib/ir/ui/IrCommandTooltip.d.ts +16 -0
  358. package/lib/ir/ui/IrCommandTooltip.d.ts.map +1 -0
  359. package/lib/ir/ui/IrCommandTooltip.js +22 -0
  360. package/lib/ir/ui/IrCommandTooltip.js.map +1 -0
  361. package/lib/ir/ui/IrDocumentationDialog.d.ts +18 -0
  362. package/lib/ir/ui/IrDocumentationDialog.d.ts.map +1 -0
  363. package/lib/ir/ui/IrDocumentationDialog.js +68 -0
  364. package/lib/ir/ui/IrDocumentationDialog.js.map +1 -0
  365. package/lib/ir/ui/IrEditor.d.ts +60 -0
  366. package/lib/ir/ui/IrEditor.d.ts.map +1 -0
  367. package/lib/ir/ui/IrEditor.js +42 -0
  368. package/lib/ir/ui/IrEditor.js.map +1 -0
  369. package/lib/ir/ui/IrHeader.d.ts +13 -0
  370. package/lib/ir/ui/IrHeader.d.ts.map +1 -0
  371. package/lib/ir/ui/IrHeader.js +21 -0
  372. package/lib/ir/ui/IrHeader.js.map +1 -0
  373. package/lib/ir/ui/IrLogo.d.ts +20 -0
  374. package/lib/ir/ui/IrLogo.d.ts.map +1 -0
  375. package/lib/ir/ui/IrLogo.js +17 -0
  376. package/lib/ir/ui/IrLogo.js.map +1 -0
  377. package/lib/ir/ui/IrPointerTracker.d.ts +29 -0
  378. package/lib/ir/ui/IrPointerTracker.d.ts.map +1 -0
  379. package/lib/ir/ui/IrPointerTracker.js +47 -0
  380. package/lib/ir/ui/IrPointerTracker.js.map +1 -0
  381. package/lib/ir/ui/IrShell.d.ts +25 -0
  382. package/lib/ir/ui/IrShell.d.ts.map +1 -0
  383. package/lib/ir/ui/IrShell.js +178 -0
  384. package/lib/ir/ui/IrShell.js.map +1 -0
  385. package/lib/ir/ui/IrSidePanel.d.ts +26 -0
  386. package/lib/ir/ui/IrSidePanel.d.ts.map +1 -0
  387. package/lib/ir/ui/IrSidePanel.js +39 -0
  388. package/lib/ir/ui/IrSidePanel.js.map +1 -0
  389. package/lib/ir/ui/IrStateProvider.d.ts +19 -0
  390. package/lib/ir/ui/IrStateProvider.d.ts.map +1 -0
  391. package/lib/ir/ui/IrStateProvider.js +16 -0
  392. package/lib/ir/ui/IrStateProvider.js.map +1 -0
  393. package/lib/ir/ui/IrStatusBar.d.ts +14 -0
  394. package/lib/ir/ui/IrStatusBar.d.ts.map +1 -0
  395. package/lib/ir/ui/IrStatusBar.js +48 -0
  396. package/lib/ir/ui/IrStatusBar.js.map +1 -0
  397. package/lib/ir/ui/IrToolbar.d.ts +18 -0
  398. package/lib/ir/ui/IrToolbar.d.ts.map +1 -0
  399. package/lib/ir/ui/IrToolbar.js +32 -0
  400. package/lib/ir/ui/IrToolbar.js.map +1 -0
  401. package/lib/ir/ui/IrTraces.d.ts +63 -0
  402. package/lib/ir/ui/IrTraces.d.ts.map +1 -0
  403. package/lib/ir/ui/IrTraces.js +72 -0
  404. package/lib/ir/ui/IrTraces.js.map +1 -0
  405. package/lib/ir/ui/MetadataPanel.d.ts +15 -0
  406. package/lib/ir/ui/MetadataPanel.d.ts.map +1 -0
  407. package/lib/ir/ui/MetadataPanel.js +49 -0
  408. package/lib/ir/ui/MetadataPanel.js.map +1 -0
  409. package/lib/ir/ui/SpectraPanel.d.ts +20 -0
  410. package/lib/ir/ui/SpectraPanel.d.ts.map +1 -0
  411. package/lib/ir/ui/SpectraPanel.js +42 -0
  412. package/lib/ir/ui/SpectraPanel.js.map +1 -0
  413. package/lib/ir/ui/SpectrumRow.d.ts +26 -0
  414. package/lib/ir/ui/SpectrumRow.d.ts.map +1 -0
  415. package/lib/ir/ui/SpectrumRow.js +41 -0
  416. package/lib/ir/ui/SpectrumRow.js.map +1 -0
  417. package/lib/ir/ui/index.d.ts +56 -0
  418. package/lib/ir/ui/index.d.ts.map +1 -0
  419. package/lib/ir/ui/index.js +36 -0
  420. package/lib/ir/ui/index.js.map +1 -0
  421. package/lib/ir/ui/irActions.d.ts +52 -0
  422. package/lib/ir/ui/irActions.d.ts.map +1 -0
  423. package/lib/ir/ui/irActions.js +62 -0
  424. package/lib/ir/ui/irActions.js.map +1 -0
  425. package/lib/ir/ui/irChartProps.d.ts +116 -0
  426. package/lib/ir/ui/irChartProps.d.ts.map +1 -0
  427. package/lib/ir/ui/irChartProps.js +14 -0
  428. package/lib/ir/ui/irChartProps.js.map +1 -0
  429. package/lib/ir/ui/irCommandContext.d.ts +35 -0
  430. package/lib/ir/ui/irCommandContext.d.ts.map +1 -0
  431. package/lib/ir/ui/irCommandContext.js +44 -0
  432. package/lib/ir/ui/irCommandContext.js.map +1 -0
  433. package/lib/ir/ui/irStateContext.d.ts +26 -0
  434. package/lib/ir/ui/irStateContext.d.ts.map +1 -0
  435. package/lib/ir/ui/irStateContext.js +37 -0
  436. package/lib/ir/ui/irStateContext.js.map +1 -0
  437. package/lib/ir/ui/useIrEditor.d.ts +51 -0
  438. package/lib/ir/ui/useIrEditor.d.ts.map +1 -0
  439. package/lib/ir/ui/useIrEditor.js +88 -0
  440. package/lib/ir/ui/useIrEditor.js.map +1 -0
  441. package/lib/ir/ui/useIrPointer.d.ts +66 -0
  442. package/lib/ir/ui/useIrPointer.d.ts.map +1 -0
  443. package/lib/ir/ui/useIrPointer.js +53 -0
  444. package/lib/ir/ui/useIrPointer.js.map +1 -0
  445. package/lib/ir/ui/useIrShortcuts.d.ts +24 -0
  446. package/lib/ir/ui/useIrShortcuts.d.ts.map +1 -0
  447. package/lib/ir/ui/useIrShortcuts.js +73 -0
  448. package/lib/ir/ui/useIrShortcuts.js.map +1 -0
  449. package/lib/ir/ui/useIrZoom.d.ts +51 -0
  450. package/lib/ir/ui/useIrZoom.d.ts.map +1 -0
  451. package/lib/ir/ui/useIrZoom.js +46 -0
  452. package/lib/ir/ui/useIrZoom.js.map +1 -0
  453. package/lib/ir.d.ts +13 -0
  454. package/lib/ir.d.ts.map +1 -0
  455. package/lib/ir.js +13 -0
  456. package/lib/ir.js.map +1 -0
  457. package/lib/panel/core/dialogStyles.d.ts +13 -0
  458. package/lib/panel/core/dialogStyles.d.ts.map +1 -0
  459. package/lib/panel/core/dialogStyles.js +11 -0
  460. package/lib/panel/core/dialogStyles.js.map +1 -0
  461. package/lib/panel/core/index.d.ts +19 -0
  462. package/lib/panel/core/index.d.ts.map +1 -0
  463. package/lib/panel/core/index.js +18 -0
  464. package/lib/panel/core/index.js.map +1 -0
  465. package/lib/panel/core/isEditingField.d.ts +17 -0
  466. package/lib/panel/core/isEditingField.d.ts.map +1 -0
  467. package/lib/panel/core/isEditingField.js +25 -0
  468. package/lib/panel/core/isEditingField.js.map +1 -0
  469. package/lib/panel/core/panelStyles.d.ts +242 -0
  470. package/lib/panel/core/panelStyles.d.ts.map +1 -0
  471. package/lib/panel/core/panelStyles.js +228 -0
  472. package/lib/panel/core/panelStyles.js.map +1 -0
  473. package/lib/panel/core/rowSpacers.d.ts +38 -0
  474. package/lib/panel/core/rowSpacers.d.ts.map +1 -0
  475. package/lib/panel/core/rowSpacers.js +31 -0
  476. package/lib/panel/core/rowSpacers.js.map +1 -0
  477. package/lib/panel/core/statusBar.d.ts +44 -0
  478. package/lib/panel/core/statusBar.d.ts.map +1 -0
  479. package/lib/panel/core/statusBar.js +40 -0
  480. package/lib/panel/core/statusBar.js.map +1 -0
  481. package/lib/panel/core/textFilter.d.ts +22 -0
  482. package/lib/panel/core/textFilter.d.ts.map +1 -0
  483. package/lib/panel/core/textFilter.js +32 -0
  484. package/lib/panel/core/textFilter.js.map +1 -0
  485. package/lib/panel/core/yieldToPainting.d.ts +17 -0
  486. package/lib/panel/core/yieldToPainting.d.ts.map +1 -0
  487. package/lib/panel/core/yieldToPainting.js +21 -0
  488. package/lib/panel/core/yieldToPainting.js.map +1 -0
  489. package/lib/panel/ui/AboutDialogFrame.d.ts +36 -0
  490. package/lib/panel/ui/AboutDialogFrame.d.ts.map +1 -0
  491. package/lib/panel/ui/AboutDialogFrame.js +43 -0
  492. package/lib/panel/ui/AboutDialogFrame.js.map +1 -0
  493. package/lib/panel/ui/ClearButton.d.ts +28 -0
  494. package/lib/panel/ui/ClearButton.d.ts.map +1 -0
  495. package/lib/panel/ui/ClearButton.js +23 -0
  496. package/lib/panel/ui/ClearButton.js.map +1 -0
  497. package/lib/panel/ui/DocumentationDialogFrame.d.ts +39 -0
  498. package/lib/panel/ui/DocumentationDialogFrame.d.ts.map +1 -0
  499. package/lib/panel/ui/DocumentationDialogFrame.js +29 -0
  500. package/lib/panel/ui/DocumentationDialogFrame.js.map +1 -0
  501. package/lib/panel/ui/FilterInput.d.ts +31 -0
  502. package/lib/panel/ui/FilterInput.d.ts.map +1 -0
  503. package/lib/panel/ui/FilterInput.js +23 -0
  504. package/lib/panel/ui/FilterInput.js.map +1 -0
  505. package/lib/panel/ui/HelpLabel.d.ts +24 -0
  506. package/lib/panel/ui/HelpLabel.d.ts.map +1 -0
  507. package/lib/panel/ui/HelpLabel.js +23 -0
  508. package/lib/panel/ui/HelpLabel.js.map +1 -0
  509. package/lib/panel/ui/PanelMessage.d.ts +41 -0
  510. package/lib/panel/ui/PanelMessage.d.ts.map +1 -0
  511. package/lib/panel/ui/PanelMessage.js +30 -0
  512. package/lib/panel/ui/PanelMessage.js.map +1 -0
  513. package/lib/panel/ui/PanelRail.d.ts +41 -0
  514. package/lib/panel/ui/PanelRail.d.ts.map +1 -0
  515. package/lib/panel/ui/PanelRail.js +12 -0
  516. package/lib/panel/ui/PanelRail.js.map +1 -0
  517. package/lib/panel/ui/Section.d.ts +25 -0
  518. package/lib/panel/ui/Section.d.ts.map +1 -0
  519. package/lib/panel/ui/Section.js +41 -0
  520. package/lib/panel/ui/Section.js.map +1 -0
  521. package/lib/panel/ui/SidePanelStack.d.ts +62 -0
  522. package/lib/panel/ui/SidePanelStack.d.ts.map +1 -0
  523. package/lib/panel/ui/SidePanelStack.js +40 -0
  524. package/lib/panel/ui/SidePanelStack.js.map +1 -0
  525. package/lib/panel/ui/SpectrumColorSwatch.d.ts +33 -0
  526. package/lib/panel/ui/SpectrumColorSwatch.d.ts.map +1 -0
  527. package/lib/panel/ui/SpectrumColorSwatch.js +76 -0
  528. package/lib/panel/ui/SpectrumColorSwatch.js.map +1 -0
  529. package/lib/panel/ui/index.d.ts +37 -0
  530. package/lib/panel/ui/index.d.ts.map +1 -0
  531. package/lib/panel/ui/index.js +24 -0
  532. package/lib/panel/ui/index.js.map +1 -0
  533. package/lib/panel/ui/useConfirmOnEnter.d.ts +19 -0
  534. package/lib/panel/ui/useConfirmOnEnter.d.ts.map +1 -0
  535. package/lib/panel/ui/useConfirmOnEnter.js +64 -0
  536. package/lib/panel/ui/useConfirmOnEnter.js.map +1 -0
  537. package/lib/panel/ui/useFilterBox.d.ts +23 -0
  538. package/lib/panel/ui/useFilterBox.d.ts.map +1 -0
  539. package/lib/panel/ui/useFilterBox.js +22 -0
  540. package/lib/panel/ui/useFilterBox.js.map +1 -0
  541. package/lib/panel/ui/useVirtualRows.d.ts +46 -0
  542. package/lib/panel/ui/useVirtualRows.d.ts.map +1 -0
  543. package/lib/panel/ui/useVirtualRows.js +56 -0
  544. package/lib/panel/ui/useVirtualRows.js.map +1 -0
  545. package/lib/panel/ui/useVirtualWindowRows.d.ts +40 -0
  546. package/lib/panel/ui/useVirtualWindowRows.d.ts.map +1 -0
  547. package/lib/panel/ui/useVirtualWindowRows.js +65 -0
  548. package/lib/panel/ui/useVirtualWindowRows.js.map +1 -0
  549. package/lib/ui.d.ts +1 -0
  550. package/lib/ui.d.ts.map +1 -1
  551. package/lib/ui.js +1 -0
  552. package/lib/ui.js.map +1 -1
  553. package/package.json +8 -1
  554. package/src/chart/core/axisLabels.ts +117 -0
  555. package/src/chart/core/boxLayout.ts +126 -0
  556. package/src/chart/core/chartAxisScale.ts +92 -10
  557. package/src/chart/core/chartDomain.ts +185 -0
  558. package/src/chart/core/chartGeometry.ts +159 -0
  559. package/src/chart/core/chartPane.ts +10 -0
  560. package/src/chart/core/chartScale.ts +7 -4
  561. package/src/chart/core/chartTheme.ts +161 -0
  562. package/src/chart/core/chartViewport.ts +40 -13
  563. package/src/chart/core/guidePlacement.ts +66 -0
  564. package/src/chart/core/index.ts +121 -2
  565. package/src/chart/core/labelStack.ts +72 -0
  566. package/src/chart/core/legendBox.ts +263 -0
  567. package/src/chart/core/selectionGeometry.ts +68 -0
  568. package/src/chart/core/spectrumColor.ts +129 -0
  569. package/src/chart/core/stackCapacity.ts +162 -0
  570. package/src/chart/core/svgPoint.ts +77 -0
  571. package/src/chart/core/tracePath.ts +228 -0
  572. package/src/chart/core/trackerReadout.ts +78 -0
  573. package/src/chart/core/viewTransform.ts +287 -0
  574. package/src/chart/core/zoomDomain.ts +235 -0
  575. package/src/chart/ui/Axes.tsx +361 -0
  576. package/src/chart/ui/AxisGuide.tsx +187 -0
  577. package/src/chart/ui/ChartStack.tsx +130 -0
  578. package/src/chart/ui/ChartTracker.tsx +101 -0
  579. package/src/chart/ui/PlotCaption.tsx +108 -0
  580. package/src/chart/ui/SelectionRect.tsx +52 -0
  581. package/src/chart/ui/TraceLegend.tsx +193 -0
  582. package/src/chart/ui/chartGestures.ts +270 -0
  583. package/src/chart/ui/chartStackLevel.tsx +210 -0
  584. package/src/chart/ui/chartSurface.ts +66 -0
  585. package/src/chart/ui/index.ts +35 -0
  586. package/src/chart/ui/useChartPointer.ts +223 -0
  587. package/src/chart/ui/useChartSize.ts +115 -0
  588. package/src/chart/ui/useChartWindow.ts +240 -0
  589. package/src/chart/ui/useChartZoom.ts +255 -0
  590. package/src/chart/ui/useWheelListener.ts +62 -0
  591. package/src/clipboard/core/copyPng.ts +20 -0
  592. package/src/clipboard/core/index.ts +1 -0
  593. package/src/core.ts +1 -0
  594. package/src/download/core/exportStyles.ts +20 -0
  595. package/src/download/core/imageResolution.ts +118 -0
  596. package/src/download/core/index.ts +34 -0
  597. package/src/download/core/pictureExport.ts +207 -0
  598. package/src/download/core/stackedDrawing.ts +108 -0
  599. package/src/download/core/svgBounds.ts +80 -0
  600. package/src/download/core/svgNamespace.ts +9 -0
  601. package/src/download/core/svgToPng.ts +121 -0
  602. package/src/download/core/svgToString.ts +95 -0
  603. package/src/download/ui/ExportDialogFrame.tsx +86 -0
  604. package/src/download/ui/ExportImageDialog.tsx +91 -0
  605. package/src/download/ui/ExportNameField.tsx +148 -0
  606. package/src/download/ui/ExportPictureSection.tsx +142 -0
  607. package/src/download/ui/index.ts +11 -0
  608. package/src/download/ui/useDrawingBox.ts +37 -0
  609. package/src/error/core/describeSource.ts +18 -0
  610. package/src/error/core/index.ts +1 -0
  611. package/src/help/ui/HelpBody.tsx +41 -2
  612. package/src/help/ui/index.ts +6 -1
  613. package/src/ir/core/analysisSpectra.ts +231 -0
  614. package/src/ir/core/assignBands.ts +144 -0
  615. package/src/ir/core/bandAssignments.ts +329 -0
  616. package/src/ir/core/bandLabelPlan.ts +194 -0
  617. package/src/ir/core/detectIrFormat.ts +139 -0
  618. package/src/ir/core/downloadSpectra.ts +57 -0
  619. package/src/ir/core/fromJcamp.ts +70 -0
  620. package/src/ir/core/fromSpc.ts +61 -0
  621. package/src/ir/core/index.ts +113 -0
  622. package/src/ir/core/irBand.ts +57 -0
  623. package/src/ir/core/irCommands.ts +154 -0
  624. package/src/ir/core/irDomain.ts +163 -0
  625. package/src/ir/core/irEditorApi.ts +44 -0
  626. package/src/ir/core/irFormat.ts +57 -0
  627. package/src/ir/core/irMode.ts +203 -0
  628. package/src/ir/core/irReducer.ts +273 -0
  629. package/src/ir/core/irSidePanels.ts +20 -0
  630. package/src/ir/core/irSpectrum.ts +155 -0
  631. package/src/ir/core/irState.ts +173 -0
  632. package/src/ir/core/loadIrSpectra.ts +79 -0
  633. package/src/ir/core/nearestBand.ts +57 -0
  634. package/src/ir/core/pickBands.ts +181 -0
  635. package/src/ir/core/spectrumJcamp.ts +178 -0
  636. package/src/ir/core/toIrSpectrum.ts +102 -0
  637. package/src/ir/ui/BandMarks.tsx +166 -0
  638. package/src/ir/ui/BandsPanel.tsx +271 -0
  639. package/src/ir/ui/IrAboutDialog.tsx +121 -0
  640. package/src/ir/ui/IrCanvas.tsx +91 -0
  641. package/src/ir/ui/IrChart.tsx +215 -0
  642. package/src/ir/ui/IrCommandProvider.tsx +32 -0
  643. package/src/ir/ui/IrCommandTooltip.tsx +36 -0
  644. package/src/ir/ui/IrDocumentationDialog.tsx +174 -0
  645. package/src/ir/ui/IrEditor.tsx +99 -0
  646. package/src/ir/ui/IrHeader.tsx +39 -0
  647. package/src/ir/ui/IrLogo.tsx +49 -0
  648. package/src/ir/ui/IrPointerTracker.tsx +102 -0
  649. package/src/ir/ui/IrShell.tsx +285 -0
  650. package/src/ir/ui/IrSidePanel.tsx +78 -0
  651. package/src/ir/ui/IrStateProvider.tsx +32 -0
  652. package/src/ir/ui/IrStatusBar.tsx +97 -0
  653. package/src/ir/ui/IrToolbar.tsx +102 -0
  654. package/src/ir/ui/IrTraces.tsx +134 -0
  655. package/src/ir/ui/MetadataPanel.tsx +88 -0
  656. package/src/ir/ui/SpectraPanel.tsx +114 -0
  657. package/src/ir/ui/SpectrumRow.tsx +127 -0
  658. package/src/ir/ui/index.ts +56 -0
  659. package/src/ir/ui/irActions.ts +103 -0
  660. package/src/ir/ui/irChartProps.ts +118 -0
  661. package/src/ir/ui/irCommandContext.tsx +62 -0
  662. package/src/ir/ui/irStateContext.ts +48 -0
  663. package/src/ir/ui/useIrEditor.ts +139 -0
  664. package/src/ir/ui/useIrPointer.ts +109 -0
  665. package/src/ir/ui/useIrShortcuts.ts +95 -0
  666. package/src/ir/ui/useIrZoom.ts +86 -0
  667. package/src/ir.ts +13 -0
  668. package/src/panel/core/dialogStyles.ts +11 -0
  669. package/src/panel/core/index.ts +47 -0
  670. package/src/panel/core/isEditingField.ts +23 -0
  671. package/src/panel/core/panelStyles.ts +248 -0
  672. package/src/panel/core/rowSpacers.ts +50 -0
  673. package/src/panel/core/statusBar.ts +48 -0
  674. package/src/panel/core/textFilter.ts +33 -0
  675. package/src/panel/core/yieldToPainting.ts +20 -0
  676. package/src/panel/ui/AboutDialogFrame.tsx +100 -0
  677. package/src/panel/ui/ClearButton.tsx +42 -0
  678. package/src/panel/ui/DocumentationDialogFrame.tsx +86 -0
  679. package/src/panel/ui/FilterInput.tsx +60 -0
  680. package/src/panel/ui/HelpLabel.tsx +43 -0
  681. package/src/panel/ui/PanelMessage.tsx +64 -0
  682. package/src/panel/ui/PanelRail.tsx +64 -0
  683. package/src/panel/ui/Section.tsx +66 -0
  684. package/src/panel/ui/SidePanelStack.tsx +109 -0
  685. package/src/panel/ui/SpectrumColorSwatch.tsx +119 -0
  686. package/src/panel/ui/index.ts +47 -0
  687. package/src/panel/ui/useConfirmOnEnter.ts +68 -0
  688. package/src/panel/ui/useFilterBox.ts +35 -0
  689. package/src/panel/ui/useVirtualRows.ts +82 -0
  690. package/src/panel/ui/useVirtualWindowRows.ts +86 -0
  691. package/src/ui.ts +1 -0
@@ -0,0 +1,47 @@
1
+ /**
2
+ * The chrome an editor is laid out with, below the components that wear it.
3
+ *
4
+ * A panel, a status bar and a dialog look the same in every editor of the
5
+ * family, and they have to: a reader who has learnt one editor has learnt the
6
+ * others, and that only holds while the parts are literally the same parts.
7
+ * What is here is the half that draws nothing — the style objects each part is
8
+ * built from, the questions the DOM is asked before a shortcut fires, and the
9
+ * sentences a reader is given when a file goes wrong.
10
+ */
11
+
12
+ export { listStyle, paragraphStyle } from './dialogStyles.ts';
13
+ export { isEditingField } from './isEditingField.ts';
14
+ export {
15
+ inlineLabelStyle,
16
+ labelRowStyle,
17
+ labelStyle,
18
+ panelBodyStyle,
19
+ panelCapsuleGroupStyle,
20
+ panelCapsuleRowStyle,
21
+ panelCapsulesStyle,
22
+ panelCellStyle,
23
+ panelColumnButtonStyle,
24
+ panelEmptyStyle,
25
+ panelHeaderCellStyle,
26
+ panelHeadingStyle,
27
+ panelNumberCellStyle,
28
+ panelScrollAreaStyle,
29
+ panelStickyHeaderStyle,
30
+ panelStyle,
31
+ panelTableStyle,
32
+ panelToolbarCountStyle,
33
+ panelToolbarStyle,
34
+ shortPanelStyle,
35
+ smallCapsuleStyle,
36
+ } from './panelStyles.ts';
37
+ export type { RowPlacement, RowSpacers } from './rowSpacers.ts';
38
+ export { rowSpacers } from './rowSpacers.ts';
39
+ export {
40
+ countLabel,
41
+ statusBarStyle,
42
+ statusItemStyle,
43
+ statusMutedStyle,
44
+ statusSpacerStyle,
45
+ } from './statusBar.ts';
46
+ export { filterNeedle, matchesNeedle } from './textFilter.ts';
47
+ export { yieldToPainting } from './yieldToPainting.ts';
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Whether an event belongs to something the user is typing in.
3
+ *
4
+ * An editor listens on the document for shortcuts and for pastes, so both have
5
+ * to keep their hands off every field on the page: an `f` typed into a mass box,
6
+ * a row filter or a sequence field is part of what is being written, not a chart
7
+ * being fitted or a glycan being drawn.
8
+ *
9
+ * `isContentEditable` is asked as well as the tag, because a rich text box is a
10
+ * `div` and swallowing its keys is the same mistake made less visibly. Two of
11
+ * the three copies this replaces had lost that line — one of them while keeping
12
+ * the sentence claiming it.
13
+ * @param target - What the event was delivered to.
14
+ * @returns Whether it should be left alone.
15
+ */
16
+ export function isEditingField(target: EventTarget | null): boolean {
17
+ if (!(target instanceof HTMLElement)) return false;
18
+ if (target.isContentEditable) return true;
19
+ return EDITING_TAGS.has(target.tagName);
20
+ }
21
+
22
+ /** Elements an event belongs to rather than to the editor around them. */
23
+ const EDITING_TAGS = new Set(['INPUT', 'TEXTAREA', 'SELECT']);
@@ -0,0 +1,248 @@
1
+ /**
2
+ * What every side panel is built out of, in every editor.
3
+ *
4
+ * A panel is the same three parts each time — the box it fills, a toolbar of
5
+ * its own actions under the header, and the body that scrolls — and the reason
6
+ * one file holds the measurements rather than each package holding its own is
7
+ * that a page shows the editors together: a glycan drawn beside its spectrum
8
+ * stacks panels from two packages in one accordion, and a panel that padded
9
+ * itself differently reads as a step in the column.
10
+ *
11
+ * Three copies of this file had already drifted — one had renamed half of it,
12
+ * one had lost a border, and their toolbars stood at two different heights — so
13
+ * the divergence is not hypothetical.
14
+ */
15
+
16
+ /** The box a panel fills: it takes the height it is given and never overflows it. */
17
+ export const panelStyle = {
18
+ display: 'flex',
19
+ flexDirection: 'column',
20
+ flex: '1 1 1px',
21
+ minHeight: 0,
22
+ } as const;
23
+
24
+ /**
25
+ * A panel that only holds what it holds, and is as tall as that.
26
+ *
27
+ * The stack gives it the height its content asks for rather than a share of the
28
+ * side, which is what a panel of a few rows wants.
29
+ */
30
+ export const shortPanelStyle = {
31
+ display: 'flex',
32
+ flexDirection: 'column',
33
+ gap: 6,
34
+ padding: 8,
35
+ } as const;
36
+
37
+ /**
38
+ * The row of a panel's own actions, directly under its header.
39
+ *
40
+ * The header carries shell chrome only, so what a panel switches on and off
41
+ * travels with the panel instead. No padding of its own: what sits in it is a
42
+ * `Toolbar`, which spaces its own items, and a row that padded them again stood
43
+ * taller than the same row in the editor next door.
44
+ */
45
+ export const panelToolbarStyle = {
46
+ display: 'flex',
47
+ borderBottom: '1px solid rgb(217 223 230)',
48
+ } as const;
49
+
50
+ /**
51
+ * How much of a list is left, at the far end of the panel's toolbar row.
52
+ *
53
+ * What a filter left is read while reaching for the filter rather than while
54
+ * reading the rows, so it belongs beside the actions; and at the end of the row,
55
+ * where it stays put as actions are added beside them.
56
+ */
57
+ export const panelToolbarCountStyle = {
58
+ marginLeft: 'auto',
59
+ display: 'flex',
60
+ alignItems: 'center',
61
+ padding: '0 8px',
62
+ fontSize: 11,
63
+ opacity: 0.7,
64
+ } as const;
65
+
66
+ /** What is under the toolbar: the panel's content, scrolling within its share. */
67
+ export const panelBodyStyle = {
68
+ display: 'flex',
69
+ flexDirection: 'column',
70
+ gap: 6,
71
+ padding: 8,
72
+ flex: '1 1 1px',
73
+ minHeight: 0,
74
+ overflow: 'auto',
75
+ } as const;
76
+
77
+ /**
78
+ * A list inside a panel body that scrolls on its own.
79
+ *
80
+ * A table with a sticky header cannot share the body's scroll, because a scroll
81
+ * container's padding is inside what it clips: the rows leaving the top show in
82
+ * the eight pixels above a header pinned to `top: 0`, so the list appears to run
83
+ * behind its own header instead of stopping at it. Scrolling the rows in a
84
+ * region with no padding of its own pins the header to the top of what is
85
+ * actually moving, and leaves whatever the panel wrote above the table — the
86
+ * count, the filter box — where it can still be read at the thousandth row.
87
+ */
88
+ export const panelScrollAreaStyle = {
89
+ flex: '1 1 1px',
90
+ minHeight: 0,
91
+ overflow: 'auto',
92
+ } as const;
93
+
94
+ /** A table of rows filling the width of the panel it is read in. */
95
+ export const panelTableStyle = {
96
+ width: '100%',
97
+ borderCollapse: 'collapse',
98
+ fontSize: 11,
99
+ fontVariantNumeric: 'tabular-nums',
100
+ } as const;
101
+
102
+ /**
103
+ * A heading cell that stays put while the rows scroll under it.
104
+ *
105
+ * It pads nothing, because what it holds is a button that pads itself: a
106
+ * heading that sorts has to be clickable across the whole cell, and padding the
107
+ * cell instead would leave a dead border around the target.
108
+ */
109
+ export const panelStickyHeaderStyle = {
110
+ position: 'sticky',
111
+ top: 0,
112
+ zIndex: 1,
113
+ background: 'rgb(255 255 255)',
114
+ textAlign: 'left',
115
+ padding: 0,
116
+ borderBottom: '1px solid rgb(217 223 230)',
117
+ } as const;
118
+
119
+ /** The same heading when it is plain text, which has to pad itself. */
120
+ export const panelHeaderCellStyle = {
121
+ ...panelStickyHeaderStyle,
122
+ padding: '2px 6px',
123
+ whiteSpace: 'nowrap',
124
+ } as const;
125
+
126
+ /**
127
+ * A column heading, which is also how the table is reordered.
128
+ *
129
+ * The headers sort rather than a select box above the table, because which order
130
+ * a table is read in changes with every question asked of it, and a select costs
131
+ * two clicks and a menu for what a column heading answers in one.
132
+ */
133
+ export const panelColumnButtonStyle = {
134
+ all: 'unset',
135
+ display: 'block',
136
+ width: '100%',
137
+ padding: '3px 4px',
138
+ cursor: 'pointer',
139
+ fontSize: 10,
140
+ fontWeight: 600,
141
+ textTransform: 'uppercase',
142
+ letterSpacing: '0.04em',
143
+ opacity: 0.6,
144
+ } as const;
145
+
146
+ /** An ordinary cell of such a table. */
147
+ export const panelCellStyle = {
148
+ padding: '1px 6px',
149
+ borderBottom: '1px solid rgb(238 241 245)',
150
+ whiteSpace: 'nowrap',
151
+ } as const;
152
+
153
+ /** A cell holding a number, read down the column against its neighbours. */
154
+ export const panelNumberCellStyle = {
155
+ ...panelCellStyle,
156
+ textAlign: 'right',
157
+ } as const;
158
+
159
+ /** What a value is, written small and quiet above it. */
160
+ export const labelStyle = {
161
+ fontSize: 11,
162
+ fontWeight: 600,
163
+ textTransform: 'uppercase',
164
+ letterSpacing: '0.04em',
165
+ opacity: 0.6,
166
+ } as const;
167
+
168
+ /** A label with whatever acts on the value it names pushed to the far end. */
169
+ export const labelRowStyle = {
170
+ display: 'flex',
171
+ alignItems: 'center',
172
+ justifyContent: 'space-between',
173
+ gap: 4,
174
+ } as const;
175
+
176
+ /** A row of capsules under such a label, wrapping when it runs out of width. */
177
+ export const panelCapsulesStyle = {
178
+ display: 'flex',
179
+ flexWrap: 'wrap',
180
+ alignItems: 'center',
181
+ gap: 4,
182
+ marginTop: 4,
183
+ } as const;
184
+
185
+ /**
186
+ * The same label written beside what it names rather than above it.
187
+ *
188
+ * A label costs a whole line of the panel where it stands on its own, and a
189
+ * choice of two or three capsules does not fill the line it is then given. Set
190
+ * beside them the label reads as the question the capsules answer, and two such
191
+ * questions fit in the height one used to take.
192
+ */
193
+ export const inlineLabelStyle = {
194
+ ...labelStyle,
195
+ fontSize: 10,
196
+ flex: '0 0 auto',
197
+ } as const;
198
+
199
+ /** One inline label and the capsules that answer it, kept on one line. */
200
+ export const panelCapsuleGroupStyle = {
201
+ display: 'flex',
202
+ flexWrap: 'wrap',
203
+ alignItems: 'center',
204
+ gap: 4,
205
+ } as const;
206
+
207
+ /**
208
+ * Several such groups on one line, wrapping group by group.
209
+ *
210
+ * The wider gap between groups than within one is what keeps them legible as
211
+ * separate questions once they share a line: capsules four pixels apart belong
212
+ * to the label on their left, and the group after it starts a hand's width
213
+ * further along.
214
+ */
215
+ export const panelCapsuleRowStyle = {
216
+ display: 'flex',
217
+ flexWrap: 'wrap',
218
+ alignItems: 'center',
219
+ gap: '4px 12px',
220
+ } as const;
221
+
222
+ /**
223
+ * A capsule sized for such a row.
224
+ *
225
+ * Blueprint's tag has no size below its medium one, so the smaller capsule is
226
+ * asked for here rather than through a prop. Written as a style so a capsule
227
+ * carrying a colour of its own can spread it over this one.
228
+ */
229
+ export const smallCapsuleStyle = {
230
+ minHeight: 0,
231
+ minWidth: 0,
232
+ padding: '1px 5px',
233
+ fontSize: 10,
234
+ lineHeight: '14px',
235
+ } as const;
236
+
237
+ /** The name of one group of a list, with the room a group needs above it. */
238
+ export const panelHeadingStyle = {
239
+ ...labelStyle,
240
+ padding: '6px 4px 2px',
241
+ } as const;
242
+
243
+ /** What a panel says instead of a list, when it has nothing to list. */
244
+ export const panelEmptyStyle = {
245
+ padding: 8,
246
+ fontSize: 12,
247
+ opacity: 0.7,
248
+ } as const;
@@ -0,0 +1,50 @@
1
+ /**
2
+ * The empty room a virtualised table leaves around the rows it actually drew.
3
+ *
4
+ * A table that draws twenty of five thousand rows must still be five thousand
5
+ * rows tall, or the scrollbar would say the list is a screenful long and the
6
+ * rows would jump under the thumb. Two empty rows carry that height — one above
7
+ * the drawn ones, one below — which keeps every cell in the column layout the
8
+ * browser computes for a real table, where absolutely positioning the rows
9
+ * would not.
10
+ */
11
+
12
+ /** Where one drawn row sits in the list, in pixels from the top of it. */
13
+ export interface RowPlacement {
14
+ /** Its top edge. */
15
+ start: number;
16
+ /** Its bottom edge. */
17
+ end: number;
18
+ }
19
+
20
+ /** The two empty rows standing in for everything that was not drawn. */
21
+ export interface RowSpacers {
22
+ /** How tall the one above the drawn rows is, in pixels. */
23
+ before: number;
24
+ /** How tall the one below them is. */
25
+ after: number;
26
+ }
27
+
28
+ /**
29
+ * The height of the empty row above the drawn rows and of the one below.
30
+ *
31
+ * With nothing drawn — the first render, before the scroll region has been
32
+ * measured, and every render of an empty table — the whole list becomes the
33
+ * lower spacer. That is what gives the region a scrollbar of the right length
34
+ * on the render before it knows which rows are in view, instead of a table that
35
+ * measures nothing because it is showing nothing.
36
+ * @param drawn - The rows being drawn, in order.
37
+ * @param total - How tall the whole list is, in pixels.
38
+ * @returns The height of each spacer.
39
+ */
40
+ export function rowSpacers(
41
+ drawn: readonly RowPlacement[],
42
+ total: number,
43
+ ): RowSpacers {
44
+ const first = drawn[0];
45
+ const last = drawn.at(-1);
46
+ if (first === undefined || last === undefined) {
47
+ return { before: 0, after: Math.max(0, total) };
48
+ }
49
+ return { before: first.start, after: Math.max(0, total - last.end) };
50
+ }
@@ -0,0 +1,48 @@
1
+ /**
2
+ * The strip along the foot of an editor, which every one of them writes alike.
3
+ *
4
+ * A status bar says what is open and what is under the pointer, in one line of
5
+ * small type over a rule. The geometry is the same in every viewer — that is
6
+ * what makes it read as one application rather than three — so it lives here,
7
+ * and each viewer adds only the items it has to write and whatever colour one
8
+ * of them needs.
9
+ */
10
+
11
+ /** The strip itself: one row, a rule above it, nothing wrapping. */
12
+ export const statusBarStyle = {
13
+ display: 'flex',
14
+ alignItems: 'center',
15
+ gap: 16,
16
+ padding: '4px 10px',
17
+ minHeight: 30,
18
+ borderTop: '1px solid rgb(217 223 230)',
19
+ fontSize: 13,
20
+ whiteSpace: 'nowrap',
21
+ } as const;
22
+
23
+ /** One thing the bar says, icon and text on one line. */
24
+ export const statusItemStyle = {
25
+ display: 'inline-flex',
26
+ alignItems: 'center',
27
+ } as const;
28
+
29
+ /** An item that is context rather than an answer. */
30
+ export const statusMutedStyle = { ...statusItemStyle, opacity: 0.6 } as const;
31
+
32
+ /** What pushes the items after it to the far end of the bar. */
33
+ export const statusSpacerStyle = { flex: 1 } as const;
34
+
35
+ /**
36
+ * A count with the noun it counts, singular where it has to be.
37
+ * @param count - How many.
38
+ * @param singular - What one of them is called.
39
+ * @param plural - What several are called.
40
+ * @returns The phrase, e.g. `1 peak` or `412 peaks`.
41
+ */
42
+ export function countLabel(
43
+ count: number,
44
+ singular: string,
45
+ plural: string,
46
+ ): string {
47
+ return `${count} ${count === 1 ? singular : plural}`;
48
+ }
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Read what the user typed into a filter box.
3
+ * @param filter - What was typed.
4
+ * @returns It trimmed and lowercased, which is what a match is made against.
5
+ * @example
6
+ * filterNeedle(' GlcNAc '); // 'glcnac'
7
+ */
8
+ export function filterNeedle(filter: string): string {
9
+ return filter.trim().toLowerCase();
10
+ }
11
+
12
+ /**
13
+ * Whether any of the things an entry is known by carries what was typed.
14
+ *
15
+ * Every list the editor filters is filtered the same way — case-insensitively,
16
+ * on a substring, across the few fields an entry is recognised by — so a
17
+ * residue, a template and a symbol all answer to the same test.
18
+ * @param needle - The filter, already through `filterNeedle`.
19
+ * @param values - What the entry is known by; an absent one never matches.
20
+ * @returns Whether the entry is worth showing, always true for an empty filter.
21
+ * @example
22
+ * matchesNeedle('nac', 'GlcNAc', 'N-acetylglucosamine'); // true
23
+ */
24
+ export function matchesNeedle(
25
+ needle: string,
26
+ ...values: ReadonlyArray<string | undefined>
27
+ ): boolean {
28
+ if (needle === '') return true;
29
+ for (const value of values) {
30
+ if (value?.toLowerCase().includes(needle)) return true;
31
+ }
32
+ return false;
33
+ }
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Give the browser a turn, in the middle of work that would otherwise hold it.
3
+ *
4
+ * A long read that reports its progress reports it into a page that never gets
5
+ * to draw: awaiting a value already in hand queues a microtask, and the browser
6
+ * paints between tasks, not between microtasks. So a loop over a run held in
7
+ * memory can walk twenty-six million peaks announcing each percent and leave
8
+ * the screen showing the percent it was at when the loop began.
9
+ *
10
+ * `setTimeout` and not `requestAnimationFrame`, for two reasons: these packages
11
+ * are tested without a DOM, so work that only advanced inside a browser could
12
+ * not be tested at all; and a tab in the background stops painting frames
13
+ * altogether, which would stop a read its owner is waiting for.
14
+ * @returns When the browser has had its turn.
15
+ */
16
+ export function yieldToPainting(): Promise<void> {
17
+ return new Promise((resolve) => {
18
+ setTimeout(resolve, 0);
19
+ });
20
+ }
@@ -0,0 +1,100 @@
1
+ /**
2
+ * The shape an editor's About dialog takes, so every viewer wears the same one.
3
+ *
4
+ * What differs between them is what they are and whose work they are built on;
5
+ * what does not is the frame — the mark beside the title, the mark again at
6
+ * full size beside a one-paragraph statement of what the editor does, then the
7
+ * sections crediting the parts, then a way out. A viewer hands over its words
8
+ * and its logo and writes none of that geometry itself.
9
+ */
10
+
11
+ import { Button, Dialog, DialogBody, DialogFooter } from '@blueprintjs/core';
12
+ import type { ReactNode } from 'react';
13
+
14
+ import { useConfirmOnEnter } from './useConfirmOnEnter.ts';
15
+
16
+ /** What an About dialog is given. */
17
+ export interface AboutDialogFrameProps {
18
+ /** Whether the dialog is showing. */
19
+ isOpen: boolean;
20
+ /** Called when it is dismissed. */
21
+ onClose: () => void;
22
+ /** What the title bar reads. */
23
+ title: string;
24
+ /** The editor's mark, at title size. */
25
+ mark: ReactNode;
26
+ /** The same mark, at the size the header shows it. */
27
+ logo: ReactNode;
28
+ /** What the editor is called, beside the logo. */
29
+ name: string;
30
+ /** One paragraph on what it does. */
31
+ intro: ReactNode;
32
+ /** The sections under it: credits, licence, whatever else is owed. */
33
+ children: ReactNode;
34
+ }
35
+
36
+ /**
37
+ * Draw an About dialog around a viewer's own words.
38
+ * @param props - The words, the mark, and how the dialog is opened and closed.
39
+ * @returns The dialog.
40
+ */
41
+ export function AboutDialogFrame(props: AboutDialogFrameProps): ReactNode {
42
+ const { isOpen, onClose, title, mark, logo, name, intro, children } = props;
43
+ useConfirmOnEnter(isOpen, onClose);
44
+
45
+ return (
46
+ <Dialog
47
+ isOpen={isOpen}
48
+ title={title}
49
+ icon={<span style={titleLogoStyle}>{mark}</span>}
50
+ style={dialogStyle}
51
+ onClose={onClose}
52
+ >
53
+ <DialogBody>
54
+ <div style={bodyStyle}>
55
+ <div style={headerStyle}>
56
+ <div style={logoStyle}>{logo}</div>
57
+ <div>
58
+ <div style={nameStyle}>{name}</div>
59
+ {intro}
60
+ </div>
61
+ </div>
62
+ {children}
63
+ </div>
64
+ </DialogBody>
65
+ <DialogFooter
66
+ actions={
67
+ <Button intent="primary" onClick={onClose}>
68
+ Close
69
+ </Button>
70
+ }
71
+ />
72
+ </Dialog>
73
+ );
74
+ }
75
+
76
+ const dialogStyle = { width: 480, maxWidth: '92vw' } as const;
77
+
78
+ const bodyStyle = {
79
+ display: 'flex',
80
+ flexDirection: 'column',
81
+ gap: 16,
82
+ } as const;
83
+
84
+ const headerStyle = { display: 'flex', alignItems: 'center', gap: 16 } as const;
85
+
86
+ /** A fixed size, not a share of the row: a flex item gives up its width first. */
87
+ const logoStyle = { flexShrink: 0 } as const;
88
+
89
+ /** The header spaces a Blueprint icon off the title; the mark is not one. */
90
+ const titleLogoStyle = {
91
+ display: 'inline-flex',
92
+ flexShrink: 0,
93
+ marginRight: 10,
94
+ } as const;
95
+
96
+ const nameStyle = {
97
+ fontSize: 16,
98
+ fontWeight: 600,
99
+ marginBottom: 4,
100
+ } as const;
@@ -0,0 +1,42 @@
1
+ import { Button } from '@blueprintjs/core';
2
+
3
+ export interface ClearButtonProps {
4
+ /**
5
+ * What emptying the box does, said as the thing it achieves rather than as
6
+ * "clear" — a screen reader and a hovering pointer both get this one line,
7
+ * and `Leave green out` says what `Clear` does not.
8
+ */
9
+ label: string;
10
+ /** Called when it is clicked, with the box left for the caller to empty. */
11
+ onClick: () => void;
12
+ }
13
+
14
+ /**
15
+ * The cross that empties a box, worn inside it as Blueprint's `rightElement`.
16
+ *
17
+ * Blueprint has no clearable input of its own; what it has is the slot, and a
18
+ * minimal cross button in it is the shape its own examples use. Which is why
19
+ * this carries no `size`: the input group sizes whatever is put in the slot
20
+ * from its own size class — 20 square inside a small box, 24 inside a medium
21
+ * one — so a button that stated a size of its own would only be able to
22
+ * disagree with the box it is in.
23
+ *
24
+ * One component rather than eight lines repeated at each box, because the
25
+ * cross has to be the same size, the same colour and in the same place
26
+ * everywhere or it reads as a different control each time.
27
+ * @param props - What clearing achieves, and what to do about it.
28
+ * @returns The button, for an `InputGroup`'s `rightElement`.
29
+ */
30
+ export function ClearButton(props: ClearButtonProps) {
31
+ const { label, onClick } = props;
32
+
33
+ return (
34
+ <Button
35
+ variant="minimal"
36
+ icon="cross"
37
+ aria-label={label}
38
+ title={label}
39
+ onClick={onClick}
40
+ />
41
+ );
42
+ }