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,255 @@
1
+ /**
2
+ * The gestures that move the window a chart is showing.
3
+ *
4
+ * A drag zooms the x axis, because that is the axis a chemist reads: the
5
+ * question is nearly always "what is between 366 and 372", never "what is
6
+ * between forty and sixty percent". The y axis comes along only when the drag is
7
+ * released past the baseline, a gesture that cannot be made by accident and one
8
+ * the preview rectangle announces before the button is let go. The wheel scales
9
+ * the y axis on its own, bringing up the small features being asked about far
10
+ * more often than any box around them, and a double click puts the window back.
11
+ *
12
+ * Which of them a chart answers is `ZoomGestures`, and a viewer is free to offer
13
+ * fewer: a drag can be the rectangle it sweeps out, and the wheel can be left to
14
+ * the page. Neither is a preference to be toggled — it is what the measurement
15
+ * makes worth doing, and `chartDomain.ts` says why.
16
+ *
17
+ * Not every gesture moves the window. A drag can be asked to report the range it
18
+ * swept out, a press that went nowhere is a click, and a host can refuse a press
19
+ * outright so that a handle drawn on the chart keeps the gesture aimed at it;
20
+ * `chartGestures.ts` holds all three, and `zoomDomain.ts` holds what a gesture
21
+ * does to a window. Neither knows anything of React, which is what lets the
22
+ * answer to a gesture be read without a chart on screen.
23
+ *
24
+ * What the window is fitted *to* is handed in rather than worked out here, and
25
+ * that is what makes one hook serve every kind of spectrum: fitting reads the
26
+ * traces, and a mass spectrum's are two per spectrum where an infrared
27
+ * spectrum's are one in either of two units. `useChartWindow` then holds the
28
+ * answer each viewer hands over.
29
+ */
30
+
31
+ import type { PointerEvent as ReactPointerEvent, RefObject } from 'react';
32
+ import { useCallback, useMemo, useState } from 'react';
33
+
34
+ import type {
35
+ ChartDomain,
36
+ YAxisRules,
37
+ ZoomGestures,
38
+ ZoomRules,
39
+ } from '../core/chartDomain.ts';
40
+ import { DEFAULT_ZOOM_GESTURES } from '../core/chartDomain.ts';
41
+ import type { ChartScale } from '../core/chartScale.ts';
42
+ import { chartWheelFactor } from '../core/chartViewport.ts';
43
+ import type { ZoomSelection } from '../core/zoomDomain.ts';
44
+ import { scaledYAxis, zoomSelection } from '../core/zoomDomain.ts';
45
+
46
+ import type {
47
+ ChartGestureReports,
48
+ ChartZoomHandlers,
49
+ Drag,
50
+ } from './chartGestures.ts';
51
+ import {
52
+ answeredRelease,
53
+ draggedTo,
54
+ releaseDrag,
55
+ startedDrag,
56
+ } from './chartGestures.ts';
57
+ import type { ChartWindowOptions } from './useChartWindow.ts';
58
+ import { useChartWindow } from './useChartWindow.ts';
59
+ import { useWheelListener } from './useWheelListener.ts';
60
+
61
+ /** The chart, what it is fitted to, and which gestures it answers. */
62
+ export interface ChartZoomOptions
63
+ extends ChartWindowOptions, ChartGestureReports {
64
+ /** The SVG the gestures are made on, as it was handed to its `ref`. */
65
+ svgRef: RefObject<SVGSVGElement | null>;
66
+ /**
67
+ * How the y axis behaves under a gesture — where its baseline is, and whether
68
+ * that baseline is held in the window.
69
+ * @default a stick spectrum's: a baseline of zero, always kept
70
+ */
71
+ yAxis?: YAxisRules;
72
+ /**
73
+ * Which gestures the chart answers: what a drag asks for, and whether the
74
+ * wheel scales the value axis at all.
75
+ *
76
+ * Both together rather than one at a time, because they are one decision. A
77
+ * viewer that reads its data in more than one way — an infrared spectrum is
78
+ * read as absorbance or as percent transmittance — settles the whole set from
79
+ * whatever it is currently reading, and hands it over as it stands.
80
+ * @default every gesture: a drag along the horizontal axis, and the wheel
81
+ */
82
+ gestures?: ZoomGestures;
83
+ }
84
+
85
+ /** The window, the drag being made in it, and how to work both. */
86
+ export interface ChartZoom {
87
+ /** What the chart is showing. */
88
+ domain: ChartDomain;
89
+ /**
90
+ * The horizontal axis, as every gesture was measured against it: **draw with
91
+ * this rather than building one**, since a second scale beside it is a second
92
+ * chance to get a reversed axis the wrong way round.
93
+ */
94
+ xScale: ChartScale;
95
+ /** The vertical axis, likewise. */
96
+ yScale: ChartScale;
97
+ /** The drag being made, `null` when none is. */
98
+ selection: ZoomSelection | null;
99
+ /** Put the window back to everything that is drawn. */
100
+ reset: () => void;
101
+ /** Put on the SVG. */
102
+ handlers: ChartZoomHandlers;
103
+ }
104
+
105
+ /**
106
+ * Zoom a chart by dragging it, by the wheel and by double clicking it.
107
+ *
108
+ * Which window is on screen — the fit, the one a gesture arrived at, or the one
109
+ * a host imposes — is `useChartWindow`. What is here is what a gesture *is*: the
110
+ * drag as it is made, the rules it is read under, and the answer it comes to.
111
+ * @param options - The chart, the fit and how its y axis behaves.
112
+ * @returns The window and the gestures that move it.
113
+ */
114
+ export function useChartZoom(options: ChartZoomOptions): ChartZoom {
115
+ const {
116
+ fitted,
117
+ fitKey,
118
+ yFitKey,
119
+ svgRef,
120
+ plot,
121
+ yAxis,
122
+ gestures,
123
+ reverseX = false,
124
+ domain: imposed = null,
125
+ onSelectRange,
126
+ onClick,
127
+ shouldStartDrag,
128
+ } = options;
129
+
130
+ const { domain, xScale, yScale, show, reset } = useChartWindow({
131
+ fitted,
132
+ fitKey,
133
+ ...(yFitKey === undefined ? {} : { yFitKey }),
134
+ plot,
135
+ domain: imposed,
136
+ reverseX,
137
+ });
138
+
139
+ // Taken apart field by field rather than depending on the object, so a viewer
140
+ // rebuilding an equal `yAxis` or `gestures` on every render does not rebuild
141
+ // the rules and every callback hanging off them. Every field has to be listed
142
+ // here: one left out silently falls back to its default, which is how a
143
+ // transmittance chart came to answer a mass spectrum's question about its own
144
+ // baseline.
145
+ const baseline = yAxis?.baseline;
146
+ const keepBaseline = yAxis?.keepBaseline;
147
+ const pointsDown = yAxis?.pointsDown;
148
+ const dragMode = gestures?.drag ?? DEFAULT_ZOOM_GESTURES.drag;
149
+ const wheel = gestures?.wheel ?? DEFAULT_ZOOM_GESTURES.wheel;
150
+ const rules = useMemo<ZoomRules>(
151
+ () => ({ baseline, keepBaseline, pointsDown, drag: dragMode }),
152
+ [baseline, keepBaseline, pointsDown, dragMode],
153
+ );
154
+
155
+ const [drag, setDrag] = useState<Drag | null>(null);
156
+
157
+ const onWheel = useCallback(
158
+ (event: WheelEvent) => {
159
+ // Refused before the event is touched, so a chart that does not answer the
160
+ // wheel scrolls the page under the pointer exactly as the rest of it does.
161
+ // Swallowing the gesture and doing nothing with it would be the one
162
+ // outcome nobody asked for.
163
+ if (!wheel) return;
164
+ const factor = chartWheelFactor(event.deltaY, event.deltaMode);
165
+ if (factor === 1) return;
166
+ // Heard non-passively for exactly this: without the refusal the chart
167
+ // zooms and the page scrolls out from under it at the same time.
168
+ event.preventDefault();
169
+ show(scaledYAxis(domain, factor, rules.baseline));
170
+ },
171
+ [domain, rules.baseline, wheel, show],
172
+ );
173
+ useWheelListener(svgRef, onWheel);
174
+
175
+ const onPointerDown = useCallback(
176
+ (event: ReactPointerEvent<SVGSVGElement>) => {
177
+ const started = startedDrag(event, svgRef.current, shouldStartDrag);
178
+ if (started !== null) setDrag(started);
179
+ },
180
+ [svgRef, shouldStartDrag],
181
+ );
182
+
183
+ const onPointerMove = useCallback(
184
+ (event: ReactPointerEvent<SVGSVGElement>) => {
185
+ const moved = draggedTo(drag, event, svgRef.current);
186
+ if (moved !== null) setDrag(moved);
187
+ },
188
+ [drag, svgRef],
189
+ );
190
+
191
+ const onPointerUp = useCallback(
192
+ (event: ReactPointerEvent<SVGSVGElement>) => {
193
+ if (drag?.pointerId !== event.pointerId) return;
194
+ releaseDrag(event);
195
+ setDrag(null);
196
+ const released = draggedTo(drag, event, svgRef.current) ?? drag;
197
+ const next = answeredRelease(
198
+ domain,
199
+ released,
200
+ plot,
201
+ xScale,
202
+ yScale,
203
+ rules,
204
+ { onSelectRange, onClick },
205
+ // Read off the release rather than off the press, because that is where
206
+ // the reader was looking and what `reportClick` already inverts.
207
+ { shift: event.shiftKey, alt: event.altKey },
208
+ );
209
+ if (next !== null) show(next);
210
+ },
211
+ [
212
+ drag,
213
+ domain,
214
+ plot,
215
+ xScale,
216
+ yScale,
217
+ svgRef,
218
+ rules,
219
+ onSelectRange,
220
+ onClick,
221
+ show,
222
+ ],
223
+ );
224
+
225
+ const onPointerCancel = useCallback(
226
+ (event: ReactPointerEvent<SVGSVGElement>) => {
227
+ if (drag?.pointerId !== event.pointerId) return;
228
+ releaseDrag(event);
229
+ setDrag(null);
230
+ },
231
+ [drag],
232
+ );
233
+
234
+ const selection = useMemo(
235
+ () => zoomSelection(drag, yScale, rules),
236
+ [drag, yScale, rules],
237
+ );
238
+
239
+ return {
240
+ domain,
241
+ xScale,
242
+ yScale,
243
+ selection,
244
+ reset,
245
+ handlers: {
246
+ onPointerDown,
247
+ onPointerMove,
248
+ onPointerUp,
249
+ onPointerCancel,
250
+ onDoubleClick: reset,
251
+ },
252
+ };
253
+ }
254
+
255
+ export { type ChartZoomHandlers } from './chartGestures.ts';
@@ -0,0 +1,62 @@
1
+ /**
2
+ * The wheel over an element, heard loudly enough to refuse the page its
3
+ * scroll.
4
+ *
5
+ * React's `onWheel` is registered passively — the browser is told in advance
6
+ * that the page may scroll before the handler has had its say — so calling
7
+ * `preventDefault` inside it does nothing at all: the chart zooms and the page
8
+ * scrolls out from under it at the same time. The only way to be heard is to
9
+ * register the listener on the element directly with `{ passive: false }`,
10
+ * which is what this hook exists to do; nothing else about the gesture belongs
11
+ * here.
12
+ *
13
+ * The listener is attached once and reads the handler through a ref refreshed
14
+ * on every commit. Both halves are needed: attaching once is what keeps a
15
+ * pointer resting over the chart from re-registering a listener sixty times a
16
+ * second, and reading the handler live is what stops that one listener from
17
+ * zooming the window as it stood when the chart was mounted.
18
+ */
19
+
20
+ import type { RefObject } from 'react';
21
+ import { useEffect, useLayoutEffect, useRef } from 'react';
22
+
23
+ /**
24
+ * Hear the wheel over an element.
25
+ * @param ref - The element, as it was handed to its `ref`.
26
+ * @param handler - What to do with the wheel; free to be an inline arrow, since
27
+ * it is read at the moment the wheel turns rather than closed over when the
28
+ * listener is attached. It is the handler's own business to call
29
+ * `preventDefault` — the listener is registered so that the call is honoured,
30
+ * not so that it is made.
31
+ */
32
+ export function useWheelListener<T extends Element>(
33
+ ref: RefObject<T | null>,
34
+ handler: (event: WheelEvent) => void,
35
+ ): void {
36
+ const latest = useRef(handler);
37
+ useLayoutEffect(() => {
38
+ latest.current = handler;
39
+ });
40
+
41
+ useEffect(() => {
42
+ const element = ref.current;
43
+ if (element === null) return;
44
+ // Typed as the plain `Event` the element's own listener map hands it: an
45
+ // `Element` is not known to carry a wheel, so the narrowing is done here.
46
+ function onWheel(event: Event) {
47
+ if (event instanceof WheelEvent) latest.current(event);
48
+ }
49
+ element.addEventListener('wheel', onWheel, WHEEL_LISTENER);
50
+ return () => {
51
+ element.removeEventListener('wheel', onWheel);
52
+ };
53
+ }, [ref]);
54
+ }
55
+
56
+ /**
57
+ * Registered non-passively, which is the whole reason this hook exists. Nothing
58
+ * is passed back on removal: a listener is matched on its type, its function
59
+ * and its capture flag alone, and passing the options object there is a type
60
+ * error rather than a courtesy.
61
+ */
62
+ const WHEEL_LISTENER = { passive: false } as const;
@@ -0,0 +1,185 @@
1
+ import { Menu, MenuDivider, MenuItem, PopoverNext } from '@blueprintjs/core';
2
+ import type { ReactElement } from 'react';
3
+
4
+ import { useChromeT } from '../../i18n/ui/useT.ts';
5
+
6
+ import { NavLink } from './NavLink.tsx';
7
+ import type { NavItem } from './navItem.ts';
8
+ import { isModifiedClick } from './navItem.ts';
9
+
10
+ /** Who the site is answering to. */
11
+ export interface AccountIdentity {
12
+ /** What the person is called on screen. */
13
+ name: string;
14
+ /**
15
+ * What tells the account apart under that name — the address it is held at,
16
+ * the handle it was opened with.
17
+ * @default undefined
18
+ */
19
+ detail?: string;
20
+ /**
21
+ * The letters the mark is drawn with.
22
+ * @default the first letter of each of the first two words of `name`
23
+ */
24
+ initials?: string;
25
+ }
26
+
27
+ export interface AccountButtonProps {
28
+ /** Who is signed in, or `null` when nobody is. */
29
+ identity: AccountIdentity | null;
30
+ /**
31
+ * Whether the site has not heard back yet. Neither state is drawn until it
32
+ * has: a bar that offers to sign in and then turns into a name has told the
33
+ * visitor something false, and it is the state they act on first.
34
+ * @default false
35
+ */
36
+ loading?: boolean;
37
+ /**
38
+ * The address signing in happens at, for a site with a page of its own for
39
+ * it. Writing it keeps the entry a real link, so a middle click opens a tab.
40
+ * @default undefined
41
+ */
42
+ signInHref?: string;
43
+ /**
44
+ * What the site does when the invitation is picked — route to that page, or
45
+ * open a credentials dialog for a site that has no page.
46
+ * @default undefined
47
+ */
48
+ onSignIn?: () => void;
49
+ /**
50
+ * What the site does when Sign out is picked.
51
+ * @default undefined
52
+ */
53
+ onSignOut?: () => void;
54
+ /**
55
+ * What the invitation reads, for a site whose accounts are for one kind of
56
+ * person — "Teacher sign in". Two words: it is written out in the bar rather
57
+ * than folded into a glyph.
58
+ * @default the chrome's own word for it, in the language of the page
59
+ */
60
+ signInLabel?: string;
61
+ /**
62
+ * The account's own pages, listed above Sign out — a profile, a settings
63
+ * page.
64
+ * @default undefined
65
+ */
66
+ items?: readonly NavItem[];
67
+ }
68
+
69
+ /**
70
+ * The one utility of the bar that says who the site is answering to: an
71
+ * invitation when nobody is signed in, and the account's mark when somebody is.
72
+ *
73
+ * The two states are told apart by whether an identity is on screen, never by
74
+ * the direction of an arrow. Blueprint's `log-in` and `log-out` are the same
75
+ * arrow either side of the same door, and at 14 px among four other monochrome
76
+ * glyphs nobody reads which side it is on — a site drawing one reports the
77
+ * visitor as signed in while they are signed out. So the invitation is the
78
+ * words `Sign in`, which no mark can be mistaken for, and being signed in is
79
+ * the person's own initials.
80
+ * @param props - Who is signed in, what signing in and out do, and the pages
81
+ * the account's menu lists.
82
+ * @returns The entry, or nothing while the site is still asking.
83
+ */
84
+ export function AccountButton(props: AccountButtonProps): ReactElement | null {
85
+ const {
86
+ identity,
87
+ loading = false,
88
+ signInHref,
89
+ onSignIn,
90
+ onSignOut,
91
+ signInLabel,
92
+ items = [],
93
+ } = props;
94
+ const t = useChromeT();
95
+
96
+ if (loading) {
97
+ // The width of the mark, so the bar does not jump when the answer lands.
98
+ return <span className="account-button__pending" aria-hidden="true" />;
99
+ }
100
+
101
+ if (identity === null) {
102
+ return (
103
+ <NavLink
104
+ className="account-button account-button--out"
105
+ item={{
106
+ id: 'account',
107
+ label: signInLabel ?? t('account.signIn'),
108
+ href: signInHref,
109
+ onSelect: onSignIn,
110
+ }}
111
+ />
112
+ );
113
+ }
114
+
115
+ const { name, detail, initials = initialsOf(name) } = identity;
116
+
117
+ return (
118
+ <PopoverNext
119
+ placement="bottom-end"
120
+ content={
121
+ <Menu className="nav-menu account-menu">
122
+ <li className="account-menu__identity">
123
+ <span className="account-menu__name">{name}</span>
124
+ {detail === undefined ? null : (
125
+ <span className="account-menu__detail">{detail}</span>
126
+ )}
127
+ </li>
128
+ <MenuDivider />
129
+ {items.map((item) => (
130
+ <MenuItem
131
+ key={item.id}
132
+ icon={item.icon}
133
+ text={item.label}
134
+ href={item.href}
135
+ target={item.external ? '_blank' : undefined}
136
+ onClick={(event) => {
137
+ if (item.onSelect === undefined || isModifiedClick(event)) {
138
+ return;
139
+ }
140
+ event.preventDefault();
141
+ item.onSelect();
142
+ }}
143
+ />
144
+ ))}
145
+ {items.length === 0 ? null : <MenuDivider />}
146
+ <MenuItem
147
+ icon="log-out"
148
+ text={t('account.signOut')}
149
+ onClick={onSignOut}
150
+ />
151
+ </Menu>
152
+ }
153
+ >
154
+ <button
155
+ type="button"
156
+ className="nav-link nav-link--icon account-button account-button--in"
157
+ title={t('account.signedInAs', { name })}
158
+ aria-label={t('account.signedInAs', { name })}
159
+ >
160
+ <span className="account-mark">{initials}</span>
161
+ </button>
162
+ </PopoverNext>
163
+ );
164
+ }
165
+
166
+ /**
167
+ * The letters a name is marked with: the first of each of its first two words,
168
+ * or the first two letters of a name written as one word.
169
+ * @param name - What the person is called.
170
+ * @returns One or two letters, in capitals.
171
+ */
172
+ function initialsOf(name: string): string {
173
+ const [first, second] = name.split(/\s+/).filter((word) => word !== '');
174
+ if (first === undefined) return '?';
175
+ if (second === undefined) return firstWordInitials(first);
176
+ return `${first.charAt(0)}${second.charAt(0)}`.toUpperCase();
177
+ }
178
+
179
+ // A single word is usually a handle or an address, where the two letters say
180
+ // more than one does — but never the part after the `@`, which every account
181
+ // on the same domain would share.
182
+ function firstWordInitials(word: string): string {
183
+ const [local = ''] = word.split('@');
184
+ return (local === '' ? word : local).slice(0, 2).toUpperCase();
185
+ }
@@ -1,3 +1,5 @@
1
+ export type { AccountButtonProps, AccountIdentity } from './AccountButton.tsx';
2
+ export { AccountButton } from './AccountButton.tsx';
1
3
  export type { HeaderToggleOption, HeaderToggleProps } from './HeaderToggle.tsx';
2
4
  export { HeaderToggle } from './HeaderToggle.tsx';
3
5
  export type { NavItem } from './navItem.ts';
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Put a PNG on the clipboard.
3
+ *
4
+ * The image is handed over as a promise rather than as a blob on purpose:
5
+ * Safari only allows a clipboard write that the click itself started, so the
6
+ * item has to be built while the handler is still running and the
7
+ * rasterization awaited by the clipboard rather than before it.
8
+ * @param png - The image being rasterized.
9
+ * @returns Whether it was copied. `false` outside a secure context, and in a
10
+ * browser whose clipboard takes text only.
11
+ */
12
+ export async function writeImageToClipboard(
13
+ png: Promise<Blob>,
14
+ ): Promise<boolean> {
15
+ if (typeof ClipboardItem === 'undefined' || !navigator.clipboard?.write) {
16
+ return false;
17
+ }
18
+ await navigator.clipboard.write([new ClipboardItem({ 'image/png': png })]);
19
+ return true;
20
+ }
@@ -1,3 +1,4 @@
1
+ export { writeImageToClipboard } from './copyPng.ts';
1
2
  export type { WriteBlobToClipboardOptions } from './writeBlobToClipboard.ts';
2
3
  export { writeBlobToClipboard } from './writeBlobToClipboard.ts';
3
4
  export type { ClipboardContent, ClipboardText } from './writeToClipboard.ts';
@@ -71,6 +71,12 @@ export interface ClickToCopyProps {
71
71
  * @default undefined
72
72
  */
73
73
  style?: CSSProperties;
74
+ /**
75
+ * `data-testid` the element carries, so an end-to-end suite can select the
76
+ * value without depending on the text inside it.
77
+ * @default undefined
78
+ */
79
+ testId?: string;
74
80
  }
75
81
 
76
82
  /** Past this length the value is left out of the title: a molfile is no tooltip. */
@@ -106,13 +112,14 @@ export function ClickToCopy(props: ClickToCopyProps): ReactElement {
106
112
  disabled = false,
107
113
  className,
108
114
  style,
115
+ testId,
109
116
  } = props;
110
117
  const t = useChromeT();
111
118
  const { copied, failed, copy } = useCopyToClipboard();
112
119
 
113
120
  if (disabled) {
114
121
  return (
115
- <Element className={className} style={style}>
122
+ <Element className={className} style={style} data-testid={testId}>
116
123
  {children}
117
124
  </Element>
118
125
  );
@@ -138,6 +145,7 @@ export function ClickToCopy(props: ClickToCopyProps): ReactElement {
138
145
  className,
139
146
  )}
140
147
  style={style}
148
+ data-testid={testId}
141
149
  role={focusable && !CELLS.has(Element) ? 'button' : undefined}
142
150
  tabIndex={focusable ? 0 : undefined}
143
151
  title={title ?? copyTitle(value, label, t)}
package/src/core.ts CHANGED
@@ -14,6 +14,7 @@ export * from './i18n/core/index.ts';
14
14
  export * from './language/core/index.ts';
15
15
  export * from './orbital/core/index.ts';
16
16
  export * from './overlay/core/index.ts';
17
+ export * from './panel/core/index.ts';
17
18
  export * from './parallel/core/index.ts';
18
19
  export * from './pedagogy/core/index.ts';
19
20
  export * from './periodic/core/index.ts';
@@ -0,0 +1,20 @@
1
+ /**
2
+ * A row of buttons with the name box among them, wrapping when the dialog is
3
+ * too narrow for them.
4
+ */
5
+ export const exportButtonsStyle = {
6
+ display: 'flex',
7
+ flexWrap: 'wrap',
8
+ alignItems: 'center',
9
+ gap: 6,
10
+ } as const;
11
+
12
+ /** One group of an export dialog: what it offers, in a column. */
13
+ export const exportSectionStyle = {
14
+ display: 'flex',
15
+ flexDirection: 'column',
16
+ gap: 8,
17
+ } as const;
18
+
19
+ /** Text that says something about a control rather than being one. */
20
+ export const exportNoteStyle = { fontSize: 12, opacity: 0.7 } as const;