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,270 @@
1
+ /**
2
+ * A press on a chart, and what letting go of it answers.
3
+ *
4
+ * `useChartZoom` holds the React state — the window on screen, and the drag
5
+ * being made across it — and this holds the arithmetic that turns a release into
6
+ * an answer: a window to show, a range to report, a click to report, or nothing
7
+ * at all. Keeping the two apart is what lets the answer be tested without a
8
+ * renderer, which is how `zoomedDomain` beside it has always been read, and it
9
+ * is why this sits next to that file rather than inside the hook.
10
+ *
11
+ * The three things a host can be told about are here for the same reason. Only
12
+ * one of the four answers moves the window; the other three leave the chart
13
+ * exactly where it was, and deciding between them in one place is what stops a
14
+ * gesture reporting a range and a click for the same drag.
15
+ */
16
+
17
+ import type { PointerEvent as ReactPointerEvent } from 'react';
18
+
19
+ import type { ChartDomain, ZoomRules } from '../core/chartDomain.ts';
20
+ import type { PlotRect } from '../core/chartGeometry.ts';
21
+ import type { ChartScale } from '../core/chartScale.ts';
22
+ import { chartValue } from '../core/chartScale.ts';
23
+ import type { ChartPoint } from '../core/svgPoint.ts';
24
+ import { svgPointAt } from '../core/svgPoint.ts';
25
+ import type { DragBox } from '../core/zoomDomain.ts';
26
+ import { MINIMUM_DRAG, zoomedDomain } from '../core/zoomDomain.ts';
27
+
28
+ import { isInsidePlot } from './useChartPointer.ts';
29
+
30
+ /** One gesture on the SVG, as React hands it over. */
31
+ type PointerHandler = (event: ReactPointerEvent<SVGSVGElement>) => void;
32
+
33
+ /**
34
+ * Which keys were held as a click was let go.
35
+ *
36
+ * Reported rather than interpreted, because what a modifier *means* is a
37
+ * question about the measurement and not about the gesture layer: on a mass
38
+ * spectrum a held shift asks for the peak to be watched for, and on an infrared
39
+ * one it will mean something else entirely. The chart says which keys were
40
+ * down; whoever knows what is being measured decides what that asks for.
41
+ */
42
+ export interface ChartClickModifiers {
43
+ /** Whether shift was held. */
44
+ shift: boolean;
45
+ /** Whether alt — option on a Mac — was held. */
46
+ alt: boolean;
47
+ }
48
+
49
+ /** No key held, which is what a plain click reports. */
50
+ export const NO_MODIFIERS: ChartClickModifiers = { shift: false, alt: false };
51
+
52
+ /** What to spread onto the SVG for it to be zoomed. */
53
+ export interface ChartZoomHandlers {
54
+ onPointerDown: PointerHandler;
55
+ onPointerMove: PointerHandler;
56
+ onPointerUp: PointerHandler;
57
+ onPointerCancel: PointerHandler;
58
+ onDoubleClick: () => void;
59
+ }
60
+
61
+ /** What a host asks to be told, beyond the window it is shown anyway. */
62
+ export interface ChartGestureReports {
63
+ /**
64
+ * What to do with the two values a `select` drag swept out, in the units of
65
+ * the horizontal axis and stated low end first.
66
+ *
67
+ * The window is left exactly where it was: the gesture asked where a peak
68
+ * begins and ends, not to look closer at it, and a chart that zoomed to the
69
+ * boundaries as they were set would take the neighbouring peaks off the screen
70
+ * every time. The ends are sorted before anyone is told, because a drag made
71
+ * right to left is as ordinary as one made left to right and an axis drawn
72
+ * right to left inverts them again — a range of `[2.9, 2.4]` minutes
73
+ * integrates nothing.
74
+ * @default nothing is reported, and a select drag then does nothing at all
75
+ */
76
+ onSelectRange?: (range: [number, number]) => void;
77
+ /**
78
+ * What to do with a press that went nowhere, in the units the chart is
79
+ * measured in — an m/z, a wavenumber, a retention time and a value.
80
+ *
81
+ * Nowhere means nowhere on **either** axis: a press is a click when it
82
+ * travelled less than `MINIMUM_DRAG` across and less than `MINIMUM_DRAG` down.
83
+ * Only the horizontal travel decides whether there is a window to zoom to, so
84
+ * a drag of one pixel across and three hundred down asks for no window — but
85
+ * it is plainly a gesture that was made, and calling it a press that went
86
+ * nowhere would put a scan on the chart nobody pointed at.
87
+ *
88
+ * A `select` drag is never reported here at all. Its answer is a range or it
89
+ * is nothing, and a near-vertical integration drag that moved the cursor
90
+ * instead would be answering a question the chemist did not ask.
91
+ *
92
+ * There is no other way to be told about a click: hovering is a different
93
+ * question, answered continuously and by every tremor of a hand resting on the
94
+ * chart, and choosing the scan at 2.500 minutes is a decision made by pressing.
95
+ * Only a press let go over the plot is reported — the gestures are heard on the
96
+ * whole SVG, so the axis titles and the tick labels are under them too, and a
97
+ * click on the word `m/z` inverted through the scales lands at a value the
98
+ * chart is not even drawing.
99
+ * @default nothing is reported
100
+ */
101
+ onClick?: (point: ChartPoint, modifiers: ChartClickModifiers) => void;
102
+ /**
103
+ * Whether a press at this point of the SVG, in its own user units, begins a
104
+ * drag at all.
105
+ *
106
+ * In pixels rather than in data units because that is the question being
107
+ * asked: whatever else is drawn on the chart — an integration boundary to be
108
+ * taken hold of, a cursor to be slid — was placed in pixels, and `isInsidePlot`
109
+ * is here for exactly this. Refusing means the press is never captured, so it
110
+ * reaches whatever is under it and that thing keeps the rest of the gesture;
111
+ * captured first and refused afterwards, the handle would never see the move
112
+ * events that drag it.
113
+ * @default every press over the SVG begins a drag
114
+ */
115
+ shouldStartDrag?: (point: ChartPoint) => boolean;
116
+ }
117
+
118
+ /** A drag as it is held, tied to the pointer that started it. */
119
+ export interface Drag extends DragBox {
120
+ /** So a second finger cannot take a drag over from the first. */
121
+ pointerId: number;
122
+ }
123
+
124
+ /**
125
+ * What letting go of a drag comes to, told to the host on the way.
126
+ *
127
+ * One reading of the gesture answers all four outcomes, so what a select drag
128
+ * reports and what a zoom would have shown can never drift apart: the clamping
129
+ * to the plot, the `MINIMUM_DRAG` test and the sorting after inverting are done
130
+ * once, in `zoomedDomain`.
131
+ * @param current - The window in force, kept on the axis that is not asked for.
132
+ * @param released - The two corners as the button came up, in user units.
133
+ * @param plot - Where the plot sits inside the SVG.
134
+ * @param xScale - The x axis as the chart is currently zoomed.
135
+ * @param yScale - The y axis, likewise.
136
+ * @param rules - How the y axis behaves and what a drag means.
137
+ * @param reports - What the host asked to be told.
138
+ * @param modifiers
139
+ * @returns The window to show, `null` when the chart stays where it is.
140
+ */
141
+ export function answeredRelease(
142
+ current: ChartDomain,
143
+ released: DragBox,
144
+ plot: PlotRect,
145
+ xScale: ChartScale,
146
+ yScale: ChartScale,
147
+ rules: ZoomRules,
148
+ reports: ChartGestureReports,
149
+ modifiers: ChartClickModifiers = NO_MODIFIERS,
150
+ ): ChartDomain | null {
151
+ const mode = rules.drag ?? 'xAxis';
152
+ const next = zoomedDomain(current, released, plot, xScale, yScale, rules);
153
+ if (next === null) {
154
+ if (mode !== 'select') {
155
+ reportClick(released, plot, xScale, yScale, reports.onClick, modifiers);
156
+ }
157
+ return null;
158
+ }
159
+ if (mode === 'select') {
160
+ reports.onSelectRange?.(next.x);
161
+ return null;
162
+ }
163
+ return next;
164
+ }
165
+
166
+ /**
167
+ * The drag a press begins, `null` for a press that begins none.
168
+ *
169
+ * The host is asked before the pointer is captured rather than after it: a press
170
+ * taken from whatever it landed on cannot be handed back mid-gesture, so an
171
+ * integration boundary or a cursor drawn on the chart would never see the moves
172
+ * that drag it.
173
+ * @param event - The press.
174
+ * @param svg - The SVG it was made on, which is what places it in user units.
175
+ * @param shouldStartDrag - Whether the host lets the chart have it, absent when
176
+ * every press over the SVG is the chart's.
177
+ * @returns The drag, `null` when the press was not the chart's to take or the
178
+ * SVG cannot place the pointer.
179
+ */
180
+ export function startedDrag(
181
+ event: ReactPointerEvent<SVGSVGElement>,
182
+ svg: SVGSVGElement | null,
183
+ shouldStartDrag: ((point: ChartPoint) => boolean) | undefined,
184
+ ): Drag | null {
185
+ if (event.button !== LEFT_BUTTON) return null;
186
+ const point = svgPointAt(svg, event.clientX, event.clientY);
187
+ if (point === null) return null;
188
+ if (shouldStartDrag !== undefined && !shouldStartDrag(point)) return null;
189
+ // Captured so a drag running off the plot — which is how the y axis is asked
190
+ // for — keeps being reported.
191
+ event.currentTarget.setPointerCapture(event.pointerId);
192
+ return {
193
+ pointerId: event.pointerId,
194
+ fromX: point.x,
195
+ fromY: point.y,
196
+ toX: point.x,
197
+ toY: point.y,
198
+ };
199
+ }
200
+
201
+ /**
202
+ * Where a drag has got to, when the event belongs to it.
203
+ * @param drag - The drag being made, `null` when none is.
204
+ * @param event - The pointer event just received.
205
+ * @param svg - The SVG the gesture is made on.
206
+ * @returns The drag with its far corner moved, `null` when the event is not
207
+ * part of it or the SVG cannot place the pointer.
208
+ */
209
+ export function draggedTo(
210
+ drag: Drag | null,
211
+ event: ReactPointerEvent<SVGSVGElement>,
212
+ svg: SVGSVGElement | null,
213
+ ): Drag | null {
214
+ if (drag?.pointerId !== event.pointerId) return null;
215
+ const point = svgPointAt(svg, event.clientX, event.clientY);
216
+ if (point === null) return null;
217
+ return { ...drag, toX: point.x, toY: point.y };
218
+ }
219
+
220
+ /**
221
+ * Give the pointer back, so the next gesture reaches whatever it is aimed at.
222
+ * @param event - The event ending the drag.
223
+ */
224
+ export function releaseDrag(event: ReactPointerEvent<SVGSVGElement>): void {
225
+ if (event.currentTarget.hasPointerCapture(event.pointerId)) {
226
+ event.currentTarget.releasePointerCapture(event.pointerId);
227
+ }
228
+ }
229
+
230
+ /**
231
+ * Tell a host where a press that went nowhere landed, in the units the chart is
232
+ * measured in.
233
+ *
234
+ * The travel is measured as the hand made it, before any clamping to the plot: a
235
+ * gesture that ran out over the tick labels travelled however far it travelled,
236
+ * and one begun outside the plot is refused by `isInsidePlot` rather than by
237
+ * arithmetic that pretends it stopped at the edge.
238
+ * @param released - The gesture as it was let go, in user units of the SVG.
239
+ * @param plot - Where the plot sits inside that SVG, which a click has to be
240
+ * over for the values it inverts to be ones the chart is drawing.
241
+ * @param xScale - The horizontal axis as the chart is currently zoomed.
242
+ * @param yScale - The vertical axis, likewise.
243
+ * @param onClick - What the host asked to be told, absent when it asked for
244
+ * nothing.
245
+ * @param modifiers - Which keys were held as the button came up.
246
+ */
247
+ function reportClick(
248
+ released: DragBox,
249
+ plot: PlotRect,
250
+ xScale: ChartScale,
251
+ yScale: ChartScale,
252
+ onClick:
253
+ ((point: ChartPoint, modifiers: ChartClickModifiers) => void) | undefined,
254
+ modifiers: ChartClickModifiers,
255
+ ): void {
256
+ if (onClick === undefined) return;
257
+ if (Math.abs(released.toX - released.fromX) >= MINIMUM_DRAG) return;
258
+ if (Math.abs(released.toY - released.fromY) >= MINIMUM_DRAG) return;
259
+ // Where the button came up rather than where it went down: the two are within
260
+ // `MINIMUM_DRAG` of each other, and the release is where the user was looking.
261
+ const point = { x: released.toX, y: released.toY };
262
+ if (!isInsidePlot(plot, point)) return;
263
+ onClick(
264
+ { x: chartValue(xScale, point.x), y: chartValue(yScale, point.y) },
265
+ modifiers,
266
+ );
267
+ }
268
+
269
+ /** Which button drags a box; the others belong to menus and to panning. */
270
+ const LEFT_BUTTON = 0;
@@ -0,0 +1,210 @@
1
+ /**
2
+ * One level of a chart stack: the pane drawn at it, and everything under it.
3
+ *
4
+ * `SplitPane` takes exactly two children, so a stack is a recursion rather than
5
+ * a list — the pane at each level is the controlled side and is given a height
6
+ * in pixels, everything below it is the other side and takes what is left. It
7
+ * stands beside `ChartStack.tsx` rather than inside it so that the component is
8
+ * the state and this is the picture drawn from it. Why a height is held above a
9
+ * floor, and why every pane is wrapped in a box of its own, is in that file's
10
+ * header.
11
+ *
12
+ * The pane at the foot has nothing under it and so needs no split at all, and is
13
+ * given one regardless. React rebuilds whatever sits at a position the moment
14
+ * the element there changes type, so a pane drawn as a bare box while it is last
15
+ * and as a split once something is appended under it would be torn down and
16
+ * stood up again by the appending — and a chart stood up again is empty: it has
17
+ * to be measured, fitted and drawn from its twenty thousand points before it is
18
+ * a picture of anything. Every pane is therefore a split, the last one holding
19
+ * nothing on its other side, which is exactly what makes it draw no splitter and
20
+ * answer no drag.
21
+ */
22
+
23
+ import type { ReactNode } from 'react';
24
+ import type { SplitPaneSize } from 'react-science/ui';
25
+ import { SplitPane } from 'react-science/ui';
26
+
27
+ /** One pane of the stack, and how tall it stands. */
28
+ export interface ChartStackPane {
29
+ /**
30
+ * Identity, which is what a height is remembered against.
31
+ *
32
+ * A pane leaves the stack whenever what it draws stops existing, and comes
33
+ * back when it exists again. The height is held against this rather than
34
+ * against the pane's place in the array, so a pane that returns returns the
35
+ * size it was left at rather than at its default.
36
+ */
37
+ id: string;
38
+ /** What is drawn in it — a chart, and whatever bar is drawn over it. */
39
+ content: ReactNode;
40
+ /**
41
+ * How tall it stands the first time it is stacked, in pixels.
42
+ *
43
+ * A default rather than a controlled value: the stack holds the live height
44
+ * from then on, so a viewer restoring a layout it saved hands it in here and
45
+ * hears every later change back through `onHeightChange`. A change to this
46
+ * number afterwards is ignored, the way a defaulted prop always is — what is
47
+ * on screen is what a chemist dragged it to.
48
+ * @default 220
49
+ */
50
+ defaultHeight?: number;
51
+ /**
52
+ * The shortest it may be dragged to, in pixels.
53
+ *
54
+ * A hundred and twenty is a plot that still reads: `MARGIN` spends 44 of them
55
+ * on the tick row and the axis title, which leaves the trace the rest of it.
56
+ * @default 120
57
+ */
58
+ minimumHeight?: number;
59
+ }
60
+
61
+ /** Everything one level of the nesting needs to draw itself and the rest. */
62
+ export interface StackLevel {
63
+ /** Every pane of the stack, top to bottom. */
64
+ panes: readonly ChartStackPane[];
65
+ /**
66
+ * How tall a pane stands.
67
+ * @param pane - The pane to measure.
68
+ * @returns Its height, in pixels.
69
+ */
70
+ heightOf: (pane: ChartStackPane) => number;
71
+ /**
72
+ * Take what a drag in progress is asking for.
73
+ * @param pane - The pane being resized.
74
+ * @param asked - The size its splitter asked for.
75
+ */
76
+ resize: (pane: ChartStackPane, asked: SplitPaneSize) => void;
77
+ /**
78
+ * Take where a drag came to rest.
79
+ * @param pane - The pane that was resized.
80
+ * @param asked - The size its splitter was let go at.
81
+ */
82
+ rest: (pane: ChartStackPane, asked: SplitPaneSize) => void;
83
+ }
84
+
85
+ /**
86
+ * The pane at one level of the stack, and everything under it.
87
+ *
88
+ * The pane at the foot is given the whole of what it is handed rather than a
89
+ * height, since there is nothing under it to leave room for, and it is given
90
+ * neither a close threshold nor anywhere to report a drag: a split with nothing
91
+ * on its other side draws no splitter, so there is no drag to report and nothing
92
+ * to close it against — a threshold there would hide the only pane on a stack
93
+ * squeezed short.
94
+ * @param level - The panes and what is done with a drag on them.
95
+ * @param index - Which pane this level draws.
96
+ * @returns The pane split against the rest below it, the pane alone in a split
97
+ * of its own at the foot of the stack, and nothing at all for a stack of no
98
+ * panes.
99
+ */
100
+ export function stackFrom(level: StackLevel, index: number): ReactNode {
101
+ const { panes, heightOf, resize, rest } = level;
102
+ const pane = panes[index];
103
+ if (pane === undefined) return null;
104
+
105
+ const under = stackFrom(level, index + 1);
106
+ const isLast = under === null;
107
+
108
+ return (
109
+ <SplitPane
110
+ key={pane.id}
111
+ direction="vertical"
112
+ controlledSide="start"
113
+ size={isLast ? WHOLE_STACK : `${heightOf(pane)}px`}
114
+ onSizeChange={isLast ? undefined : (asked) => resize(pane, asked)}
115
+ onResize={isLast ? undefined : (asked) => rest(pane, asked)}
116
+ closeThreshold={isLast ? undefined : CLOSE_THRESHOLD}
117
+ unmountChildren={false}
118
+ >
119
+ <div key={pane.id} data-chart-pane={pane.id} style={paneStyle}>
120
+ {pane.content}
121
+ </div>
122
+ {under}
123
+ </SplitPane>
124
+ );
125
+ }
126
+
127
+ /**
128
+ * How tall a pane stands, given the height it was last left at.
129
+ *
130
+ * The floor is applied to the default as much as to a stored height: a pane
131
+ * asking for 40 pixels against a minimum of 150 would otherwise draw the stub
132
+ * with a full set of axes over it that the header of `ChartStack.tsx` describes,
133
+ * on its first render and until somebody touched a splitter.
134
+ * @param pane - The pane to measure.
135
+ * @param stored - The height it was left at, absent until one is dragged.
136
+ * @returns Its height, in pixels.
137
+ */
138
+ export function paneHeight(
139
+ pane: ChartStackPane,
140
+ stored: number | undefined,
141
+ ): number {
142
+ return Math.max(
143
+ stored ?? pane.defaultHeight ?? DEFAULT_PANE_HEIGHT,
144
+ floorOf(pane),
145
+ );
146
+ }
147
+
148
+ /**
149
+ * The height to keep, given what a splitter asked for.
150
+ * @param asked - The size the splitter reported, in the pixels it was handed.
151
+ * @param pane - The pane it belongs to, for its minimum.
152
+ * @returns The height to store, `null` for a size that is not a length at all.
153
+ */
154
+ export function keptHeight(
155
+ asked: SplitPaneSize,
156
+ pane: ChartStackPane,
157
+ ): number | null {
158
+ const value = Number.parseFloat(asked);
159
+ if (!Number.isFinite(value)) return null;
160
+ return Math.max(value, floorOf(pane));
161
+ }
162
+
163
+ /**
164
+ * The shortest a pane may stand, whether it said so itself or not.
165
+ * @param pane - The pane being held up.
166
+ * @returns Its floor, in pixels.
167
+ */
168
+ function floorOf(pane: ChartStackPane): number {
169
+ return pane.minimumHeight ?? MINIMUM_PANE_HEIGHT;
170
+ }
171
+
172
+ /** How tall a pane stands when nobody has said, in pixels. */
173
+ const DEFAULT_PANE_HEIGHT = 220;
174
+
175
+ /** The shortest a pane may be dragged to when nobody has said, in pixels. */
176
+ const MINIMUM_PANE_HEIGHT = 120;
177
+
178
+ /**
179
+ * What the pane at the foot is given, having nothing under it to leave room for.
180
+ *
181
+ * A share rather than a length: handed a percentage, `SplitPane` lays its
182
+ * controlled side out as a flexible share instead of at a fixed height, so the
183
+ * pane takes whatever the panes above it left rather than standing at some
184
+ * number and leaving a gap under itself.
185
+ */
186
+ const WHOLE_STACK: SplitPaneSize = '100%';
187
+
188
+ /**
189
+ * The height below which a split closes its pane rather than squeezing it.
190
+ *
191
+ * A stack squeezed to under ninety pixels has no room for a chart of any kind,
192
+ * and that is under the shortest pane this stack will otherwise keep.
193
+ * `SplitPane` stops doing this the moment a splitter is touched, so it settles
194
+ * what a pane does before anyone has an opinion and nothing after that.
195
+ */
196
+ const CLOSE_THRESHOLD = 90;
197
+
198
+ /**
199
+ * The box one pane fills — `minHeight: 0` is the whole reason it exists rather
200
+ * than the pane's content sitting in the split itself; see the header of
201
+ * `ChartStack.tsx`.
202
+ */
203
+ const paneStyle = {
204
+ display: 'flex',
205
+ flexDirection: 'column',
206
+ flex: '1 1 0%',
207
+ minWidth: 0,
208
+ minHeight: 0,
209
+ overflow: 'hidden',
210
+ } as const;
@@ -0,0 +1,66 @@
1
+ /**
2
+ * The style the SVG a chart is drawn on carries, and the one thing about it
3
+ * that moves: the cursor.
4
+ *
5
+ * A chart drawing its own crosshair has two pointers on it — the dashed rules
6
+ * that read the axes, and the operating system's arrow beside them — and only
7
+ * one of the two is saying anything. The arrow is also the one in the way: it
8
+ * is drawn down and to the right of its own hot spot, which is exactly where
9
+ * the crosshair meets and exactly the place being read. So the arrow is hidden
10
+ * while the crosshair is up, and it comes back the moment the pointer leaves
11
+ * the plot, where there is no crosshair and the margins are ordinary furniture.
12
+ *
13
+ * `target` is why this is a function rather than a constant. Something under
14
+ * the pointer can be opened — a ring on a peak a survey scan was fragmented at
15
+ * — and a cursor that never changes is a chart with no way of saying so. The
16
+ * hand wins over the hidden arrow, and the crosshair goes on being drawn under
17
+ * it, since where you are is still worth reading while you decide to click.
18
+ *
19
+ * One helper for every chart in this package rather than a `svgStyle` constant
20
+ * in each: a mass spectrum stacked under a chromatogram is two charts a reader
21
+ * takes to be one instrument, and an arrow over one of them and nothing over
22
+ * the other is the sort of difference that reads as a fault.
23
+ */
24
+
25
+ import type { CSSProperties } from 'react';
26
+
27
+ /**
28
+ * What the SVG a chart is drawn on is styled with.
29
+ * @param tracked - Whether the chart is drawing its crosshair where the pointer
30
+ * is, which is true exactly while the pointer is over the plot.
31
+ * @param target - Whether what is under the pointer can be clicked open.
32
+ * Defaults to `false`, which is every chart offering nothing to click.
33
+ * @returns The style, one of three objects that never change — a fresh one per
34
+ * pointer move would replace the `style` prop on every tremor of a hand.
35
+ */
36
+ export function chartSurfaceStyle(
37
+ tracked: boolean,
38
+ target = false,
39
+ ): CSSProperties {
40
+ if (!tracked) return IDLE_SURFACE;
41
+ return target ? TARGET_SURFACE : TRACKED_SURFACE;
42
+ }
43
+
44
+ /**
45
+ * Everything about the surface that is not the cursor.
46
+ *
47
+ * `touchAction` because every gesture is a pointer gesture and a browser that
48
+ * scrolled the page instead would take the drag with it; `userSelect` because a
49
+ * drag across a chart is a gesture and not a selection — without it the tick
50
+ * labels come up highlighted behind the rectangle, and stay highlighted in the
51
+ * picture the chart is exported as.
52
+ */
53
+ const SURFACE = {
54
+ display: 'block',
55
+ touchAction: 'none',
56
+ userSelect: 'none',
57
+ } as const;
58
+
59
+ /** The pointer is off the plot: whatever cursor the page would have shown. */
60
+ const IDLE_SURFACE: CSSProperties = { ...SURFACE };
61
+
62
+ /** The chart is drawing the crosshair, so the arrow beside it is hidden. */
63
+ const TRACKED_SURFACE: CSSProperties = { ...SURFACE, cursor: 'none' };
64
+
65
+ /** Something under the pointer can be opened. */
66
+ const TARGET_SURFACE: CSSProperties = { ...SURFACE, cursor: 'pointer' };
@@ -31,3 +31,38 @@ export { TrackedLineChart } from './TrackedLineChart.tsx';
31
31
  export type { ChartStickSeries } from './stickChartModel.ts';
32
32
  export type { TrackedStickChartProps } from './TrackedStickChart.tsx';
33
33
  export { TrackedStickChart } from './TrackedStickChart.tsx';
34
+
35
+ export type { AxesProps } from './Axes.tsx';
36
+ export { Axes } from './Axes.tsx';
37
+ export type { AxisGuideProps } from './AxisGuide.tsx';
38
+ export { AxisGuide } from './AxisGuide.tsx';
39
+ export type { ChartStackPane, ChartStackProps } from './ChartStack.tsx';
40
+ export { ChartStack } from './ChartStack.tsx';
41
+ export type { ChartTrackerProps } from './ChartTracker.tsx';
42
+ export { ChartTracker } from './ChartTracker.tsx';
43
+ export type { PlotCaptionProps } from './PlotCaption.tsx';
44
+ export { PlotCaption } from './PlotCaption.tsx';
45
+ export type { SelectionRectProps } from './SelectionRect.tsx';
46
+ export { SelectionRect } from './SelectionRect.tsx';
47
+ export type { LegendEntry, TraceLegendProps } from './TraceLegend.tsx';
48
+ export { TraceLegend } from './TraceLegend.tsx';
49
+ export type { ChartClickModifiers } from './chartGestures.ts';
50
+ export { NO_MODIFIERS } from './chartGestures.ts';
51
+ export { chartSurfaceStyle } from './chartSurface.ts';
52
+ export type { ChartPointer, ChartPointerOptions } from './useChartPointer.ts';
53
+ export {
54
+ isInsidePlot,
55
+ leftChart,
56
+ nextChartPointer,
57
+ sameReading,
58
+ useChartPointer,
59
+ } from './useChartPointer.ts';
60
+ export type { ChartSizeHandle } from './useChartSize.ts';
61
+ export { nextChartSize, useChartSize } from './useChartSize.ts';
62
+ export type {
63
+ ChartZoom,
64
+ ChartZoomHandlers,
65
+ ChartZoomOptions,
66
+ } from './useChartZoom.ts';
67
+ export { useChartZoom } from './useChartZoom.ts';
68
+ export { useWheelListener } from './useWheelListener.ts';