react-cheminfo 0.76.0 → 0.78.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 (389) hide show
  1. package/README.md +141 -31
  2. package/lib/card/core/cardAddress.d.ts +19 -2
  3. package/lib/card/core/cardAddress.d.ts.map +1 -1
  4. package/lib/card/core/cardAddress.js +35 -2
  5. package/lib/card/core/cardAddress.js.map +1 -1
  6. package/lib/card/core/cardPageUrl.d.ts +7 -1
  7. package/lib/card/core/cardPageUrl.d.ts.map +1 -1
  8. package/lib/card/core/cardPageUrl.js +4 -2
  9. package/lib/card/core/cardPageUrl.js.map +1 -1
  10. package/lib/card/core/index.d.ts +1 -1
  11. package/lib/card/core/index.d.ts.map +1 -1
  12. package/lib/card/core/index.js +1 -1
  13. package/lib/card/core/index.js.map +1 -1
  14. package/lib/credits/core/credits.d.ts +30 -0
  15. package/lib/credits/core/credits.d.ts.map +1 -1
  16. package/lib/credits/core/credits.js +35 -0
  17. package/lib/credits/core/credits.js.map +1 -1
  18. package/lib/download/core/downloadFigure.d.ts +12 -1
  19. package/lib/download/core/downloadFigure.d.ts.map +1 -1
  20. package/lib/download/core/downloadFigure.js +21 -0
  21. package/lib/download/core/downloadFigure.js.map +1 -1
  22. package/lib/download/core/figureDpi.d.ts +59 -0
  23. package/lib/download/core/figureDpi.d.ts.map +1 -0
  24. package/lib/download/core/figureDpi.js +75 -0
  25. package/lib/download/core/figureDpi.js.map +1 -0
  26. package/lib/download/core/figurePng.d.ts +4 -1
  27. package/lib/download/core/figurePng.d.ts.map +1 -1
  28. package/lib/download/core/figurePng.js +11 -2
  29. package/lib/download/core/figurePng.js.map +1 -1
  30. package/lib/download/core/index.d.ts +4 -1
  31. package/lib/download/core/index.d.ts.map +1 -1
  32. package/lib/download/core/index.js +3 -1
  33. package/lib/download/core/index.js.map +1 -1
  34. package/lib/download/core/pngDpi.d.ts +22 -0
  35. package/lib/download/core/pngDpi.d.ts.map +1 -0
  36. package/lib/download/core/pngDpi.js +79 -0
  37. package/lib/download/core/pngDpi.js.map +1 -0
  38. package/lib/download/ui/FigureDownloadPanel.d.ts +13 -0
  39. package/lib/download/ui/FigureDownloadPanel.d.ts.map +1 -1
  40. package/lib/download/ui/FigureDownloadPanel.js +18 -34
  41. package/lib/download/ui/FigureDownloadPanel.js.map +1 -1
  42. package/lib/download/ui/figureDownloadHint.d.ts +5 -0
  43. package/lib/download/ui/figureDownloadHint.d.ts.map +1 -1
  44. package/lib/download/ui/figureDownloadHint.js +8 -0
  45. package/lib/download/ui/figureDownloadHint.js.map +1 -1
  46. package/lib/download/ui/figureDownloadOptions.d.ts +84 -0
  47. package/lib/download/ui/figureDownloadOptions.d.ts.map +1 -0
  48. package/lib/download/ui/figureDownloadOptions.js +2 -0
  49. package/lib/download/ui/figureDownloadOptions.js.map +1 -0
  50. package/lib/download/ui/resolutionChoices.d.ts +27 -0
  51. package/lib/download/ui/resolutionChoices.d.ts.map +1 -0
  52. package/lib/download/ui/resolutionChoices.js +48 -0
  53. package/lib/download/ui/resolutionChoices.js.map +1 -0
  54. package/lib/download/ui/useFigureActions.d.ts +4 -1
  55. package/lib/download/ui/useFigureActions.d.ts.map +1 -1
  56. package/lib/download/ui/useFigureActions.js +17 -8
  57. package/lib/download/ui/useFigureActions.js.map +1 -1
  58. package/lib/download/ui/useFigureDownload.d.ts +2 -55
  59. package/lib/download/ui/useFigureDownload.d.ts.map +1 -1
  60. package/lib/download/ui/useFigureDownload.js +45 -13
  61. package/lib/download/ui/useFigureDownload.js.map +1 -1
  62. package/lib/ecosystem/core/sites.d.ts.map +1 -1
  63. package/lib/ecosystem/core/sites.js +14 -0
  64. package/lib/ecosystem/core/sites.js.map +1 -1
  65. package/lib/ecosystem/core/types.d.ts +1 -1
  66. package/lib/ecosystem/core/types.d.ts.map +1 -1
  67. package/lib/ecosystem/ui/glyphs.d.ts.map +1 -1
  68. package/lib/ecosystem/ui/glyphs.js +3 -0
  69. package/lib/ecosystem/ui/glyphs.js.map +1 -1
  70. package/lib/host/core/connectHost.js +1 -1
  71. package/lib/host/core/connectHost.js.map +1 -1
  72. package/lib/host/core/connectTool.d.ts +103 -0
  73. package/lib/host/core/connectTool.d.ts.map +1 -0
  74. package/lib/host/core/connectTool.js +169 -0
  75. package/lib/host/core/connectTool.js.map +1 -0
  76. package/lib/host/core/hostOutputs.d.ts +16 -3
  77. package/lib/host/core/hostOutputs.d.ts.map +1 -1
  78. package/lib/host/core/hostOutputs.js +38 -4
  79. package/lib/host/core/hostOutputs.js.map +1 -1
  80. package/lib/host/core/index.d.ts +8 -2
  81. package/lib/host/core/index.d.ts.map +1 -1
  82. package/lib/host/core/index.js +4 -1
  83. package/lib/host/core/index.js.map +1 -1
  84. package/lib/host/core/kinds.d.ts +31 -3
  85. package/lib/host/core/kinds.d.ts.map +1 -1
  86. package/lib/host/core/kinds.js +35 -4
  87. package/lib/host/core/kinds.js.map +1 -1
  88. package/lib/host/core/messageValues.d.ts +29 -0
  89. package/lib/host/core/messageValues.d.ts.map +1 -0
  90. package/lib/host/core/messageValues.js +57 -0
  91. package/lib/host/core/messageValues.js.map +1 -0
  92. package/lib/host/core/protocol.d.ts +2 -5
  93. package/lib/host/core/protocol.d.ts.map +1 -1
  94. package/lib/host/core/protocol.js +3 -37
  95. package/lib/host/core/protocol.js.map +1 -1
  96. package/lib/host/core/resultKinds.d.ts +74 -0
  97. package/lib/host/core/resultKinds.d.ts.map +1 -0
  98. package/lib/host/core/resultKinds.js +40 -0
  99. package/lib/host/core/resultKinds.js.map +1 -0
  100. package/lib/host/core/toolMessages.d.ts +24 -0
  101. package/lib/host/core/toolMessages.d.ts.map +1 -0
  102. package/lib/host/core/toolMessages.js +136 -0
  103. package/lib/host/core/toolMessages.js.map +1 -0
  104. package/lib/host/ui/index.d.ts +2 -0
  105. package/lib/host/ui/index.d.ts.map +1 -1
  106. package/lib/host/ui/index.js +1 -0
  107. package/lib/host/ui/index.js.map +1 -1
  108. package/lib/host/ui/useFramedTool.d.ts +74 -0
  109. package/lib/host/ui/useFramedTool.d.ts.map +1 -0
  110. package/lib/host/ui/useFramedTool.js +125 -0
  111. package/lib/host/ui/useFramedTool.js.map +1 -0
  112. package/lib/i18n/core/chromeCatalog.d.ts +1 -1
  113. package/lib/i18n/core/chromeCatalog.d.ts.map +1 -1
  114. package/lib/locales/de.json +30 -1
  115. package/lib/locales/en.json +30 -1
  116. package/lib/locales/es.json +30 -1
  117. package/lib/locales/fr.json +30 -1
  118. package/lib/locales/it.json +30 -1
  119. package/lib/molecule3d/ui/Molecule3DStage.d.ts +4 -33
  120. package/lib/molecule3d/ui/Molecule3DStage.d.ts.map +1 -1
  121. package/lib/molecule3d/ui/Molecule3DStage.js +3 -37
  122. package/lib/molecule3d/ui/Molecule3DStage.js.map +1 -1
  123. package/lib/molecule3d/ui/MoleculeCanvas3D.d.ts.map +1 -1
  124. package/lib/molecule3d/ui/MoleculeCanvas3D.js +10 -2
  125. package/lib/molecule3d/ui/MoleculeCanvas3D.js.map +1 -1
  126. package/lib/molecule3d/ui/exportMoleculeImage.d.ts +10 -0
  127. package/lib/molecule3d/ui/exportMoleculeImage.d.ts.map +1 -1
  128. package/lib/molecule3d/ui/exportMoleculeImage.js +17 -0
  129. package/lib/molecule3d/ui/exportMoleculeImage.js.map +1 -1
  130. package/lib/molecule3d/ui/index.d.ts +1 -1
  131. package/lib/molecule3d/ui/index.d.ts.map +1 -1
  132. package/lib/molecule3d/ui/moleculeViewer3DProps.d.ts +23 -0
  133. package/lib/molecule3d/ui/moleculeViewer3DProps.d.ts.map +1 -1
  134. package/lib/molecule3d/ui/useImageExport.d.ts +3 -0
  135. package/lib/molecule3d/ui/useImageExport.d.ts.map +1 -1
  136. package/lib/molecule3d/ui/useImageExport.js +21 -3
  137. package/lib/molecule3d/ui/useImageExport.js.map +1 -1
  138. package/lib/osiris/core/barGeometry.d.ts +42 -0
  139. package/lib/osiris/core/barGeometry.d.ts.map +1 -0
  140. package/lib/osiris/core/barGeometry.js +46 -0
  141. package/lib/osiris/core/barGeometry.js.map +1 -0
  142. package/lib/osiris/core/computeProperties.d.ts +42 -0
  143. package/lib/osiris/core/computeProperties.d.ts.map +1 -0
  144. package/lib/osiris/core/computeProperties.js +115 -0
  145. package/lib/osiris/core/computeProperties.js.map +1 -0
  146. package/lib/osiris/core/constants.d.ts +70 -0
  147. package/lib/osiris/core/constants.d.ts.map +1 -0
  148. package/lib/osiris/core/constants.js +99 -0
  149. package/lib/osiris/core/constants.js.map +1 -0
  150. package/lib/osiris/core/fitness.d.ts +32 -0
  151. package/lib/osiris/core/fitness.d.ts.map +1 -0
  152. package/lib/osiris/core/fitness.js +48 -0
  153. package/lib/osiris/core/fitness.js.map +1 -0
  154. package/lib/osiris/core/index.d.ts +29 -0
  155. package/lib/osiris/core/index.d.ts.map +1 -0
  156. package/lib/osiris/core/index.js +19 -0
  157. package/lib/osiris/core/index.js.map +1 -0
  158. package/lib/osiris/core/poolSize.d.ts +17 -0
  159. package/lib/osiris/core/poolSize.d.ts.map +1 -0
  160. package/lib/osiris/core/poolSize.js +22 -0
  161. package/lib/osiris/core/poolSize.js.map +1 -0
  162. package/lib/osiris/core/poolTypes.d.ts +140 -0
  163. package/lib/osiris/core/poolTypes.d.ts.map +1 -0
  164. package/lib/osiris/core/poolTypes.js +12 -0
  165. package/lib/osiris/core/poolTypes.js.map +1 -0
  166. package/lib/osiris/core/predictIdCode.d.ts +39 -0
  167. package/lib/osiris/core/predictIdCode.d.ts.map +1 -0
  168. package/lib/osiris/core/predictIdCode.js +54 -0
  169. package/lib/osiris/core/predictIdCode.js.map +1 -0
  170. package/lib/osiris/core/predictProtocol.d.ts +67 -0
  171. package/lib/osiris/core/predictProtocol.d.ts.map +1 -0
  172. package/lib/osiris/core/predictProtocol.js +29 -0
  173. package/lib/osiris/core/predictProtocol.js.map +1 -0
  174. package/lib/osiris/core/predictionPool.d.ts +23 -0
  175. package/lib/osiris/core/predictionPool.d.ts.map +1 -0
  176. package/lib/osiris/core/predictionPool.js +186 -0
  177. package/lib/osiris/core/predictionPool.js.map +1 -0
  178. package/lib/osiris/core/predictionQueue.d.ts +46 -0
  179. package/lib/osiris/core/predictionQueue.d.ts.map +1 -0
  180. package/lib/osiris/core/predictionQueue.js +57 -0
  181. package/lib/osiris/core/predictionQueue.js.map +1 -0
  182. package/lib/osiris/core/predictors.d.ts +62 -0
  183. package/lib/osiris/core/predictors.d.ts.map +1 -0
  184. package/lib/osiris/core/predictors.js +100 -0
  185. package/lib/osiris/core/predictors.js.map +1 -0
  186. package/lib/osiris/core/propertyKeys.d.ts +32 -0
  187. package/lib/osiris/core/propertyKeys.d.ts.map +1 -0
  188. package/lib/osiris/core/propertyKeys.js +44 -0
  189. package/lib/osiris/core/propertyKeys.js.map +1 -0
  190. package/lib/osiris/core/riskAppearance.d.ts +60 -0
  191. package/lib/osiris/core/riskAppearance.d.ts.map +1 -0
  192. package/lib/osiris/core/riskAppearance.js +59 -0
  193. package/lib/osiris/core/riskAppearance.js.map +1 -0
  194. package/lib/osiris/core/riskDetail.d.ts +22 -0
  195. package/lib/osiris/core/riskDetail.d.ts.map +1 -0
  196. package/lib/osiris/core/riskDetail.js +86 -0
  197. package/lib/osiris/core/riskDetail.js.map +1 -0
  198. package/lib/osiris/core/riskDetailRequest.d.ts +31 -0
  199. package/lib/osiris/core/riskDetailRequest.d.ts.map +1 -0
  200. package/lib/osiris/core/riskDetailRequest.js +49 -0
  201. package/lib/osiris/core/riskDetailRequest.js.map +1 -0
  202. package/lib/osiris/core/riskFindings.d.ts +26 -0
  203. package/lib/osiris/core/riskFindings.d.ts.map +1 -0
  204. package/lib/osiris/core/riskFindings.js +79 -0
  205. package/lib/osiris/core/riskFindings.js.map +1 -0
  206. package/lib/osiris/core/runPredictionJob.d.ts +20 -0
  207. package/lib/osiris/core/runPredictionJob.d.ts.map +1 -0
  208. package/lib/osiris/core/runPredictionJob.js +43 -0
  209. package/lib/osiris/core/runPredictionJob.js.map +1 -0
  210. package/lib/osiris/core/scales.d.ts +70 -0
  211. package/lib/osiris/core/scales.d.ts.map +1 -0
  212. package/lib/osiris/core/scales.js +185 -0
  213. package/lib/osiris/core/scales.js.map +1 -0
  214. package/lib/osiris/core/types.d.ts +91 -0
  215. package/lib/osiris/core/types.d.ts.map +1 -0
  216. package/lib/osiris/core/types.js +19 -0
  217. package/lib/osiris/core/types.js.map +1 -0
  218. package/lib/osiris/core/valuation.d.ts +28 -0
  219. package/lib/osiris/core/valuation.d.ts.map +1 -0
  220. package/lib/osiris/core/valuation.js +39 -0
  221. package/lib/osiris/core/valuation.js.map +1 -0
  222. package/lib/osiris/ui/PropertyBar.d.ts +27 -0
  223. package/lib/osiris/ui/PropertyBar.d.ts.map +1 -0
  224. package/lib/osiris/ui/PropertyBar.js +27 -0
  225. package/lib/osiris/ui/PropertyBar.js.map +1 -0
  226. package/lib/osiris/ui/PropertyPanel.d.ts +91 -0
  227. package/lib/osiris/ui/PropertyPanel.d.ts.map +1 -0
  228. package/lib/osiris/ui/PropertyPanel.js +77 -0
  229. package/lib/osiris/ui/PropertyPanel.js.map +1 -0
  230. package/lib/osiris/ui/PropertyRows.d.ts +40 -0
  231. package/lib/osiris/ui/PropertyRows.d.ts.map +1 -0
  232. package/lib/osiris/ui/PropertyRows.js +23 -0
  233. package/lib/osiris/ui/PropertyRows.js.map +1 -0
  234. package/lib/osiris/ui/RiskFindings.d.ts +43 -0
  235. package/lib/osiris/ui/RiskFindings.d.ts.map +1 -0
  236. package/lib/osiris/ui/RiskFindings.js +51 -0
  237. package/lib/osiris/ui/RiskFindings.js.map +1 -0
  238. package/lib/osiris/ui/RiskPanel.d.ts +46 -0
  239. package/lib/osiris/ui/RiskPanel.d.ts.map +1 -0
  240. package/lib/osiris/ui/RiskPanel.js +32 -0
  241. package/lib/osiris/ui/RiskPanel.js.map +1 -0
  242. package/lib/osiris/ui/RiskSquare.d.ts +51 -0
  243. package/lib/osiris/ui/RiskSquare.d.ts.map +1 -0
  244. package/lib/osiris/ui/RiskSquare.js +23 -0
  245. package/lib/osiris/ui/RiskSquare.js.map +1 -0
  246. package/lib/osiris/ui/index.d.ts +15 -0
  247. package/lib/osiris/ui/index.d.ts.map +1 -0
  248. package/lib/osiris/ui/index.js +8 -0
  249. package/lib/osiris/ui/index.js.map +1 -0
  250. package/lib/osiris/ui/usePredictions.d.ts +81 -0
  251. package/lib/osiris/ui/usePredictions.d.ts.map +1 -0
  252. package/lib/osiris/ui/usePredictions.js +102 -0
  253. package/lib/osiris/ui/usePredictions.js.map +1 -0
  254. package/lib/osiris-ui.d.ts +11 -0
  255. package/lib/osiris-ui.d.ts.map +1 -0
  256. package/lib/osiris-ui.js +11 -0
  257. package/lib/osiris-ui.js.map +1 -0
  258. package/lib/osiris.d.ts +17 -0
  259. package/lib/osiris.d.ts.map +1 -0
  260. package/lib/osiris.js +17 -0
  261. package/lib/osiris.js.map +1 -0
  262. package/lib/panel/ui/FilterInput.d.ts.map +1 -1
  263. package/lib/panel/ui/FilterInput.js +3 -1
  264. package/lib/panel/ui/FilterInput.js.map +1 -1
  265. package/lib/panel/ui/SidePanelItem.d.ts +39 -0
  266. package/lib/panel/ui/SidePanelItem.d.ts.map +1 -0
  267. package/lib/panel/ui/SidePanelItem.js +63 -0
  268. package/lib/panel/ui/SidePanelItem.js.map +1 -0
  269. package/lib/panel/ui/SidePanelStack.d.ts +11 -10
  270. package/lib/panel/ui/SidePanelStack.d.ts.map +1 -1
  271. package/lib/panel/ui/SidePanelStack.js +22 -15
  272. package/lib/panel/ui/SidePanelStack.js.map +1 -1
  273. package/lib/panel/ui/SpectrumColorSwatch.d.ts.map +1 -1
  274. package/lib/panel/ui/SpectrumColorSwatch.js +4 -2
  275. package/lib/panel/ui/SpectrumColorSwatch.js.map +1 -1
  276. package/lib/panel/ui/usePanelFolds.d.ts +35 -0
  277. package/lib/panel/ui/usePanelFolds.d.ts.map +1 -0
  278. package/lib/panel/ui/usePanelFolds.js +73 -0
  279. package/lib/panel/ui/usePanelFolds.js.map +1 -0
  280. package/lib/shared/ui/FullscreenStage.d.ts +43 -0
  281. package/lib/shared/ui/FullscreenStage.d.ts.map +1 -0
  282. package/lib/shared/ui/FullscreenStage.js +38 -0
  283. package/lib/shared/ui/FullscreenStage.js.map +1 -0
  284. package/lib/shared/ui/canFillScreen.d.ts +7 -0
  285. package/lib/shared/ui/canFillScreen.d.ts.map +1 -0
  286. package/lib/shared/ui/canFillScreen.js +9 -0
  287. package/lib/shared/ui/canFillScreen.js.map +1 -0
  288. package/lib/shared/ui/index.d.ts +3 -0
  289. package/lib/shared/ui/index.d.ts.map +1 -1
  290. package/lib/shared/ui/index.js +2 -0
  291. package/lib/shared/ui/index.js.map +1 -1
  292. package/lib/split/ui/splitPanes.d.ts +3 -3
  293. package/lib/split/ui/splitPanes.js +1 -1
  294. package/lib/structure/core/structureNotations.d.ts +8 -1
  295. package/lib/structure/core/structureNotations.d.ts.map +1 -1
  296. package/lib/structure/core/structureNotations.js +14 -8
  297. package/lib/structure/core/structureNotations.js.map +1 -1
  298. package/lib/structure/ui/StructureExportPanel.d.ts +8 -0
  299. package/lib/structure/ui/StructureExportPanel.d.ts.map +1 -1
  300. package/lib/structure/ui/StructureExportPanel.js +9 -4
  301. package/lib/structure/ui/StructureExportPanel.js.map +1 -1
  302. package/lib/structure/ui/index.d.ts +1 -0
  303. package/lib/structure/ui/index.d.ts.map +1 -1
  304. package/lib/structure/ui/index.js.map +1 -1
  305. package/package.json +4 -1
  306. package/src/card/core/cardAddress.ts +39 -3
  307. package/src/card/core/cardPageUrl.ts +10 -3
  308. package/src/card/core/index.ts +7 -1
  309. package/src/credits/core/credits.ts +40 -0
  310. package/src/download/core/downloadFigure.ts +26 -1
  311. package/src/download/core/figureDpi.ts +94 -0
  312. package/src/download/core/figurePng.ts +11 -2
  313. package/src/download/core/index.ts +13 -1
  314. package/src/download/core/pngDpi.ts +84 -0
  315. package/src/download/ui/FigureDownloadPanel.tsx +41 -51
  316. package/src/download/ui/figureDownloadHint.ts +13 -0
  317. package/src/download/ui/figureDownloadOptions.ts +85 -0
  318. package/src/download/ui/resolutionChoices.ts +67 -0
  319. package/src/download/ui/useFigureActions.ts +24 -9
  320. package/src/download/ui/useFigureDownload.tsx +57 -71
  321. package/src/ecosystem/core/sites.ts +14 -0
  322. package/src/ecosystem/core/types.ts +2 -1
  323. package/src/ecosystem/ui/glyphs.tsx +20 -0
  324. package/src/host/core/connectHost.ts +1 -1
  325. package/src/host/core/connectTool.ts +285 -0
  326. package/src/host/core/hostOutputs.ts +47 -5
  327. package/src/host/core/index.ts +20 -1
  328. package/src/host/core/kinds.ts +53 -8
  329. package/src/host/core/messageValues.ts +58 -0
  330. package/src/host/core/protocol.ts +5 -37
  331. package/src/host/core/resultKinds.ts +65 -0
  332. package/src/host/core/toolMessages.ts +160 -0
  333. package/src/host/ui/index.ts +6 -0
  334. package/src/host/ui/useFramedTool.ts +213 -0
  335. package/src/locales/de.json +30 -1
  336. package/src/locales/en.json +30 -1
  337. package/src/locales/es.json +30 -1
  338. package/src/locales/fr.json +30 -1
  339. package/src/locales/it.json +30 -1
  340. package/src/molecule3d/ui/Molecule3DStage.tsx +4 -88
  341. package/src/molecule3d/ui/MoleculeCanvas3D.tsx +10 -1
  342. package/src/molecule3d/ui/exportMoleculeImage.ts +22 -0
  343. package/src/molecule3d/ui/index.ts +4 -1
  344. package/src/molecule3d/ui/moleculeViewer3DProps.ts +24 -0
  345. package/src/molecule3d/ui/useImageExport.ts +28 -2
  346. package/src/osiris/core/barGeometry.ts +74 -0
  347. package/src/osiris/core/computeProperties.ts +175 -0
  348. package/src/osiris/core/constants.ts +110 -0
  349. package/src/osiris/core/fitness.ts +59 -0
  350. package/src/osiris/core/index.ts +78 -0
  351. package/src/osiris/core/poolSize.ts +24 -0
  352. package/src/osiris/core/poolTypes.ts +140 -0
  353. package/src/osiris/core/predictIdCode.ts +69 -0
  354. package/src/osiris/core/predictProtocol.ts +78 -0
  355. package/src/osiris/core/predictionPool.ts +237 -0
  356. package/src/osiris/core/predictionQueue.ts +89 -0
  357. package/src/osiris/core/predictors.ts +142 -0
  358. package/src/osiris/core/propertyKeys.ts +54 -0
  359. package/src/osiris/core/riskAppearance.ts +86 -0
  360. package/src/osiris/core/riskDetail.ts +120 -0
  361. package/src/osiris/core/riskDetailRequest.ts +64 -0
  362. package/src/osiris/core/riskFindings.ts +92 -0
  363. package/src/osiris/core/runPredictionJob.ts +49 -0
  364. package/src/osiris/core/scales.ts +236 -0
  365. package/src/osiris/core/types.ts +103 -0
  366. package/src/osiris/core/valuation.ts +44 -0
  367. package/src/osiris/ui/PropertyBar.tsx +77 -0
  368. package/src/osiris/ui/PropertyPanel.tsx +227 -0
  369. package/src/osiris/ui/PropertyRows.tsx +92 -0
  370. package/src/osiris/ui/RiskFindings.tsx +137 -0
  371. package/src/osiris/ui/RiskPanel.tsx +81 -0
  372. package/src/osiris/ui/RiskSquare.tsx +108 -0
  373. package/src/osiris/ui/index.ts +17 -0
  374. package/src/osiris/ui/usePredictions.ts +194 -0
  375. package/src/osiris-ui.ts +11 -0
  376. package/src/osiris.ts +17 -0
  377. package/src/panel/ui/FilterInput.tsx +4 -1
  378. package/src/panel/ui/SidePanelItem.tsx +162 -0
  379. package/src/panel/ui/SidePanelStack.tsx +29 -36
  380. package/src/panel/ui/SpectrumColorSwatch.tsx +5 -3
  381. package/src/panel/ui/usePanelFolds.ts +103 -0
  382. package/src/shared/ui/FullscreenStage.tsx +96 -0
  383. package/src/shared/ui/canFillScreen.ts +8 -0
  384. package/src/shared/ui/index.ts +6 -0
  385. package/src/split/ui/splitPanes.tsx +4 -4
  386. package/src/structure/core/structureNotations.ts +25 -8
  387. package/src/structure/ui/StructureExportPanel.tsx +23 -4
  388. package/src/structure/ui/index.ts +4 -0
  389. package/styles/osiris.css +339 -0
@@ -2,6 +2,7 @@ import type { ChromeKey } from '../../i18n/core/chromeCatalog.ts';
2
2
  import type { Translate } from '../../i18n/ui/useT.ts';
3
3
  import type { FigureNotice } from '../core/copyFigure.ts';
4
4
  import type { FigureFormat } from '../core/downloadFigure.ts';
5
+ import type { FigureResolutionUnit } from '../core/figureDpi.ts';
5
6
  import type { FigurePixels } from '../core/figureScale.ts';
6
7
  /** What the line at the foot of the panel is written from. */
7
8
  export interface HintState {
@@ -17,6 +18,10 @@ export interface HintState {
17
18
  notice: FigureNotice | null;
18
19
  /** Whether the SVG embeds a rendered picture. */
19
20
  rasterSvg: boolean;
21
+ /** How the resolution is offered; in dpi, the printed size is written out. */
22
+ unit: FigureResolutionUnit;
23
+ /** The language of the page, which the printed size is written in. */
24
+ language: string;
20
25
  }
21
26
  /**
22
27
  * The line at the foot of the panel: what pressing save is about to do, or
@@ -1 +1 @@
1
- {"version":3,"file":"figureDownloadHint.d.ts","sourceRoot":"","sources":["../../../src/download/ui/figureDownloadHint.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAClE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAG3D,8DAA8D;AAC9D,MAAM,WAAW,SAAS;IACxB,+CAA+C;IAC/C,MAAM,EAAE,YAAY,CAAC;IACrB,gDAAgD;IAChD,IAAI,EAAE,YAAY,GAAG,IAAI,CAAC;IAC1B,mCAAmC;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,8CAA8C;IAC9C,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,+CAA+C;IAC/C,MAAM,EAAE,YAAY,GAAG,IAAI,CAAC;IAC5B,iDAAiD;IACjD,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;;GAOG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,GAAG,MAAM,CAmBxE"}
1
+ {"version":3,"file":"figureDownloadHint.d.ts","sourceRoot":"","sources":["../../../src/download/ui/figureDownloadHint.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAClE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAEjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAG3D,8DAA8D;AAC9D,MAAM,WAAW,SAAS;IACxB,+CAA+C;IAC/C,MAAM,EAAE,YAAY,CAAC;IACrB,gDAAgD;IAChD,IAAI,EAAE,YAAY,GAAG,IAAI,CAAC;IAC1B,mCAAmC;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,8CAA8C;IAC9C,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,+CAA+C;IAC/C,MAAM,EAAE,YAAY,GAAG,IAAI,CAAC;IAC5B,iDAAiD;IACjD,SAAS,EAAE,OAAO,CAAC;IACnB,8EAA8E;IAC9E,IAAI,EAAE,oBAAoB,CAAC;IAC3B,sEAAsE;IACtE,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;GAOG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,GAAG,MAAM,CA0BxE"}
@@ -1,3 +1,4 @@
1
+ import { formatFigureCentimetres } from "../core/figureDpi.js";
1
2
  import { figurePixels, formatFigurePixels } from "../core/figureScale.js";
2
3
  /**
3
4
  * The line at the foot of the panel: what pressing save is about to do, or
@@ -9,6 +10,7 @@ import { figurePixels, formatFigurePixels } from "../core/figureScale.js";
9
10
  */
10
11
  export function hintOf(state, t) {
11
12
  const { format, size, scale, failure, notice, rasterSvg } = state;
13
+ const { unit, language } = state;
12
14
  if (failure !== null)
13
15
  return failure;
14
16
  if (size === null)
@@ -26,6 +28,12 @@ export function hintOf(state, t) {
26
28
  });
27
29
  }
28
30
  const pixels = formatFigurePixels(figurePixels(size, scale));
31
+ if (unit === 'dpi') {
32
+ const printed = formatFigureCentimetres(size, language);
33
+ return format === 'svg'
34
+ ? t('download.hintSvgDpi', printed)
35
+ : t('download.hintPngDpi', { pixels, ...printed });
36
+ }
29
37
  return format === 'svg'
30
38
  ? t('download.hintSvg', { pixels })
31
39
  : t('download.hintPng', { pixels });
@@ -1 +1 @@
1
- {"version":3,"file":"figureDownloadHint.js","sourceRoot":"","sources":["../../../src/download/ui/figureDownloadHint.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAkB1E;;;;;;;GAOG;AACH,MAAM,UAAU,MAAM,CAAC,KAAgB,EAAE,CAAuB;IAC9D,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;IAClE,IAAI,OAAO,KAAK,IAAI;QAAE,OAAO,OAAO,CAAC;IACrC,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,CAAC,CAAC,mBAAmB,CAAC,CAAC;IACjD,IAAI,MAAM,KAAK,iBAAiB;QAAE,OAAO,CAAC,CAAC,0BAA0B,CAAC,CAAC;IACvE,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QACxB,OAAO,CAAC,CAAC,qBAAqB,EAAE;YAC9B,MAAM,EAAE,kBAAkB,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;SACtD,CAAC,CAAC;IACL,CAAC;IACD,IAAI,MAAM,KAAK,KAAK,IAAI,SAAS,EAAE,CAAC;QAClC,OAAO,CAAC,CAAC,wBAAwB,EAAE;YACjC,MAAM,EAAE,kBAAkB,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;SACtD,CAAC,CAAC;IACL,CAAC;IACD,MAAM,MAAM,GAAG,kBAAkB,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;IAC7D,OAAO,MAAM,KAAK,KAAK;QACrB,CAAC,CAAC,CAAC,CAAC,kBAAkB,EAAE,EAAE,MAAM,EAAE,CAAC;QACnC,CAAC,CAAC,CAAC,CAAC,kBAAkB,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;AACxC,CAAC"}
1
+ {"version":3,"file":"figureDownloadHint.js","sourceRoot":"","sources":["../../../src/download/ui/figureDownloadHint.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAE/D,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAsB1E;;;;;;;GAOG;AACH,MAAM,UAAU,MAAM,CAAC,KAAgB,EAAE,CAAuB;IAC9D,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;IAClE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;IACjC,IAAI,OAAO,KAAK,IAAI;QAAE,OAAO,OAAO,CAAC;IACrC,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,CAAC,CAAC,mBAAmB,CAAC,CAAC;IACjD,IAAI,MAAM,KAAK,iBAAiB;QAAE,OAAO,CAAC,CAAC,0BAA0B,CAAC,CAAC;IACvE,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QACxB,OAAO,CAAC,CAAC,qBAAqB,EAAE;YAC9B,MAAM,EAAE,kBAAkB,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;SACtD,CAAC,CAAC;IACL,CAAC;IACD,IAAI,MAAM,KAAK,KAAK,IAAI,SAAS,EAAE,CAAC;QAClC,OAAO,CAAC,CAAC,wBAAwB,EAAE;YACjC,MAAM,EAAE,kBAAkB,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;SACtD,CAAC,CAAC;IACL,CAAC;IACD,MAAM,MAAM,GAAG,kBAAkB,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;IAC7D,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;QACnB,MAAM,OAAO,GAAG,uBAAuB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACxD,OAAO,MAAM,KAAK,KAAK;YACrB,CAAC,CAAC,CAAC,CAAC,qBAAqB,EAAE,OAAO,CAAC;YACnC,CAAC,CAAC,CAAC,CAAC,qBAAqB,EAAE,EAAE,MAAM,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;IACvD,CAAC;IACD,OAAO,MAAM,KAAK,KAAK;QACrB,CAAC,CAAC,CAAC,CAAC,kBAAkB,EAAE,EAAE,MAAM,EAAE,CAAC;QACnC,CAAC,CAAC,CAAC,CAAC,kBAAkB,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;AACxC,CAAC"}
@@ -0,0 +1,84 @@
1
+ import type { FigureFormat } from '../core/downloadFigure.ts';
2
+ import type { FigureResolutionUnit } from '../core/figureDpi.ts';
3
+ import type { FigureSvg } from '../core/figureSvg.ts';
4
+ import type { FigureRenderer } from './useFigureRedraw.tsx';
5
+ /** What the "Save figure" panel is set up with. */
6
+ export interface FigureDownloadOptions {
7
+ /**
8
+ * The `id` of the box the figure is mounted in. Everything drawn inside it
9
+ * is saved — sixteen charts of a pair grid as readily as one scatter plot —
10
+ * and the controls floating over it are left behind. Give this or
11
+ * `writeFigure`.
12
+ * @default undefined
13
+ */
14
+ targetId?: string;
15
+ /**
16
+ * Writes the figure as an SVG document, in place of reading it off the
17
+ * page: for a drawing whose file carries more than its picture, such as the
18
+ * chemistry behind a structure. It is called when the panel opens, to
19
+ * measure the figure, and again for every save and copy. The SVG is saved as
20
+ * written, at the size it states; the resolution paints the PNG alone.
21
+ * @default undefined
22
+ */
23
+ writeFigure?: () => Promise<FigureSvg>;
24
+ /**
25
+ * What the saved file is called, without its extension. Name it after the
26
+ * data rather than after the tool: a reader with four of these in a
27
+ * downloads folder cannot tell four `figure.png` apart.
28
+ * @default 'figure'
29
+ */
30
+ fileName?: string;
31
+ /**
32
+ * The format it opens on.
33
+ * @default 'png'
34
+ */
35
+ defaultFormat?: FigureFormat;
36
+ /**
37
+ * How the resolution is offered: as multiples of the figure on screen, or —
38
+ * for a figure drawn to the size it prints at — in dots per inch. In dots
39
+ * per inch an SVG keeps the size it states, and 1× is 96 dpi.
40
+ * @default 'multiple'
41
+ */
42
+ unit?: FigureResolutionUnit;
43
+ /**
44
+ * The resolution a PNG opens on, as a multiple of the figure on screen:
45
+ * `dpiScale(600)` opens on 600 dpi. An SVG opens at 1×, the size it has on
46
+ * screen, and each format keeps the multiple the reader last picked for it.
47
+ * @default 2, or 300 dpi
48
+ */
49
+ defaultScale?: number;
50
+ /**
51
+ * The resolutions offered, as multiples of the figure on screen.
52
+ * @default [1, 2, 3, 4], or 150, 300, 600 and 1200 dpi
53
+ */
54
+ scales?: readonly number[];
55
+ /**
56
+ * Called with the multiple a PNG is set to, for a page that keeps the
57
+ * reader's choice — to paint its own PNGs at it, or to open on it next time.
58
+ * @default undefined
59
+ */
60
+ onScaleChange?: (scale: number) => void;
61
+ /**
62
+ * What is painted under the figure. `transparent` leaves it unpainted, for a
63
+ * figure going onto a coloured slide. A written figure paints its own.
64
+ * @default the surface the figure is drawn on
65
+ */
66
+ background?: string;
67
+ /**
68
+ * What the panel is called.
69
+ * @default the chrome's own line, in the language of the page
70
+ */
71
+ title?: string;
72
+ /**
73
+ * Draws the figure at a size, for a file. When it is given the panel offers
74
+ * a size — as shown, 4:3, 16:9, a journal column, or typed — and a figure
75
+ * saved at a size other than its own is drawn again at that size, off the
76
+ * page, so its axes and labels are laid out for the new shape rather than
77
+ * stretched into it. Draw exactly what is on screen, with the same data,
78
+ * zoom and colours; only the box changes. A written figure has the size it
79
+ * states, and is offered none.
80
+ * @default undefined — the figure is saved at the size it has on screen
81
+ */
82
+ renderFigure?: FigureRenderer;
83
+ }
84
+ //# sourceMappingURL=figureDownloadOptions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"figureDownloadOptions.d.ts","sourceRoot":"","sources":["../../../src/download/ui/figureDownloadOptions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEtD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5D,mDAAmD;AACnD,MAAM,WAAW,qBAAqB;IACpC;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;;;OAOG;IACH,WAAW,CAAC,EAAE,MAAM,OAAO,CAAC,SAAS,CAAC,CAAC;IACvC;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,aAAa,CAAC,EAAE,YAAY,CAAC;IAC7B;;;;;OAKG;IACH,IAAI,CAAC,EAAE,oBAAoB,CAAC;IAC5B;;;;;OAKG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;OAGG;IACH,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B;;;;OAIG;IACH,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;;;;;;OASG;IACH,YAAY,CAAC,EAAE,cAAc,CAAC;CAC/B"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=figureDownloadOptions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"figureDownloadOptions.js","sourceRoot":"","sources":["../../../src/download/ui/figureDownloadOptions.ts"],"names":[],"mappings":""}
@@ -0,0 +1,27 @@
1
+ import type { HelpContent } from '../../help/ui/HelpBody.tsx';
2
+ import type { ChromeKey } from '../../i18n/core/chromeCatalog.ts';
3
+ import type { Translate } from '../../i18n/ui/useT.ts';
4
+ import type { OverlayOption } from '../../overlay/ui/OverlayRow.tsx';
5
+ import type { FigureResolutionUnit } from '../core/figureDpi.ts';
6
+ import type { FigurePixels } from '../core/figureScale.ts';
7
+ /**
8
+ * The resolutions offered, each saying what it would actually produce.
9
+ *
10
+ * One too large for the browser to paint is greyed rather than dropped, so the
11
+ * reader learns the ceiling exists before they meet it as a blank file. An SVG
12
+ * is not painted, so it has no such ceiling.
13
+ * @param scales - The multiples the caller offers.
14
+ * @param size - How big the figure is drawn for the file.
15
+ * @param painted - Whether the file is painted into pixels.
16
+ * @param unit - How the resolution reads.
17
+ * @returns The choices, in the order offered.
18
+ */
19
+ export declare function scaleChoices(scales: readonly number[], size: FigurePixels | null, painted: boolean, unit: FigureResolutionUnit): readonly OverlayOption[];
20
+ /**
21
+ * What the resolution means, in the unit it is offered in.
22
+ * @param unit - How the resolution reads.
23
+ * @param t - The chrome's formatter.
24
+ * @returns The help of the row.
25
+ */
26
+ export declare function resolutionHelp(unit: FigureResolutionUnit, t: Translate<ChromeKey>): HelpContent;
27
+ //# sourceMappingURL=resolutionChoices.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolutionChoices.d.ts","sourceRoot":"","sources":["../../../src/download/ui/resolutionChoices.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAClE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAEjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAO3D;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,SAAS,MAAM,EAAE,EACzB,IAAI,EAAE,YAAY,GAAG,IAAI,EACzB,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,oBAAoB,GACzB,SAAS,aAAa,EAAE,CAY1B;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,oBAAoB,EAC1B,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,GACtB,WAAW,CAab"}
@@ -0,0 +1,48 @@
1
+ import { figureResolutionLabel } from "../core/figureDpi.js";
2
+ import { figurePixels, figureScaleFits, formatFigurePixels, } from "../core/figureScale.js";
3
+ /**
4
+ * The resolutions offered, each saying what it would actually produce.
5
+ *
6
+ * One too large for the browser to paint is greyed rather than dropped, so the
7
+ * reader learns the ceiling exists before they meet it as a blank file. An SVG
8
+ * is not painted, so it has no such ceiling.
9
+ * @param scales - The multiples the caller offers.
10
+ * @param size - How big the figure is drawn for the file.
11
+ * @param painted - Whether the file is painted into pixels.
12
+ * @param unit - How the resolution reads.
13
+ * @returns The choices, in the order offered.
14
+ */
15
+ export function scaleChoices(scales, size, painted, unit) {
16
+ const choices = [];
17
+ for (const scale of scales) {
18
+ const pixels = size === null ? null : figurePixels(size, scale);
19
+ choices.push({
20
+ value: String(scale),
21
+ label: figureResolutionLabel(scale, unit),
22
+ title: pixels === null ? undefined : formatFigurePixels(pixels),
23
+ disabled: painted && size !== null && !figureScaleFits(size, scale),
24
+ });
25
+ }
26
+ return choices;
27
+ }
28
+ /**
29
+ * What the resolution means, in the unit it is offered in.
30
+ * @param unit - How the resolution reads.
31
+ * @param t - The chrome's formatter.
32
+ * @returns The help of the row.
33
+ */
34
+ export function resolutionHelp(unit, t) {
35
+ const title = t('download.resolution');
36
+ return unit === 'dpi'
37
+ ? {
38
+ title,
39
+ body: t('download.resolutionDpiHelp'),
40
+ example: { code: '300 dpi', note: t('download.resolutionDpiExample') },
41
+ }
42
+ : {
43
+ title,
44
+ body: t('download.resolutionHelp'),
45
+ example: { code: '2×', note: t('download.resolutionExample') },
46
+ };
47
+ }
48
+ //# sourceMappingURL=resolutionChoices.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolutionChoices.js","sourceRoot":"","sources":["../../../src/download/ui/resolutionChoices.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAE7D,OAAO,EACL,YAAY,EACZ,eAAe,EACf,kBAAkB,GACnB,MAAM,wBAAwB,CAAC;AAEhC;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,YAAY,CAC1B,MAAyB,EACzB,IAAyB,EACzB,OAAgB,EAChB,IAA0B;IAE1B,MAAM,OAAO,GAAoB,EAAE,CAAC;IACpC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAChE,OAAO,CAAC,IAAI,CAAC;YACX,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC;YACpB,KAAK,EAAE,qBAAqB,CAAC,KAAK,EAAE,IAAI,CAAC;YACzC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,kBAAkB,CAAC,MAAM,CAAC;YAC/D,QAAQ,EAAE,OAAO,IAAI,IAAI,KAAK,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,KAAK,CAAC;SACpE,CAAC,CAAC;IACL,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAC5B,IAA0B,EAC1B,CAAuB;IAEvB,MAAM,KAAK,GAAG,CAAC,CAAC,qBAAqB,CAAC,CAAC;IACvC,OAAO,IAAI,KAAK,KAAK;QACnB,CAAC,CAAC;YACE,KAAK;YACL,IAAI,EAAE,CAAC,CAAC,4BAA4B,CAAC;YACrC,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,+BAA+B,CAAC,EAAE;SACvE;QACH,CAAC,CAAC;YACE,KAAK;YACL,IAAI,EAAE,CAAC,CAAC,yBAAyB,CAAC;YAClC,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,4BAA4B,CAAC,EAAE;SAC/D,CAAC;AACR,CAAC"}
@@ -1,11 +1,14 @@
1
1
  import type { FigureFormat } from '../core/downloadFigure.ts';
2
2
  import type { FigurePixels } from '../core/figureScale.ts';
3
+ import type { FigureSvg } from '../core/figureSvg.ts';
3
4
  import type { FigureRedraw } from './useFigureRedraw.tsx';
4
5
  import type { FigureTask } from './useFigureTask.ts';
5
6
  /** What {@link useFigureActions} works from. */
6
7
  export interface FigureActionsOptions {
7
8
  /** The `id` of the box the figure is mounted in. */
8
- targetId: string;
9
+ targetId?: string;
10
+ /** Writes the figure, in place of reading it off the page. */
11
+ writeFigure?: () => Promise<FigureSvg>;
9
12
  /** Which file save writes. */
10
13
  format: FigureFormat;
11
14
  /** The multiple of the figure on screen it is painted at. */
@@ -1 +1 @@
1
- {"version":3,"file":"useFigureActions.d.ts","sourceRoot":"","sources":["../../../src/download/ui/useFigureActions.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAG9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAG3D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAGrD,gDAAgD;AAChD,MAAM,WAAW,oBAAoB;IACnC,oDAAoD;IACpD,QAAQ,EAAE,MAAM,CAAC;IACjB,8BAA8B;IAC9B,MAAM,EAAE,YAAY,CAAC;IACrB,6DAA6D;IAC7D,KAAK,EAAE,MAAM,CAAC;IACd,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,wCAAwC;IACxC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,QAAQ,EAAE,YAAY,GAAG,IAAI,CAAC;IAC9B,yDAAyD;IACzD,MAAM,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAC;CAChC;AAED,gDAAgD;AAChD,MAAM,WAAW,aAAc,SAAQ,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC;IAC5D,wDAAwD;IACxD,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,0EAA0E;IAC1E,IAAI,EAAE,MAAM,IAAI,CAAC;CAClB;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,oBAAoB,GAAG,aAAa,CA4B7E"}
1
+ {"version":3,"file":"useFigureActions.d.ts","sourceRoot":"","sources":["../../../src/download/ui/useFigureActions.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAG9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAGtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAGrD,gDAAgD;AAChD,MAAM,WAAW,oBAAoB;IACnC,oDAAoD;IACpD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,8DAA8D;IAC9D,WAAW,CAAC,EAAE,MAAM,OAAO,CAAC,SAAS,CAAC,CAAC;IACvC,8BAA8B;IAC9B,MAAM,EAAE,YAAY,CAAC;IACrB,6DAA6D;IAC7D,KAAK,EAAE,MAAM,CAAC;IACd,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,wCAAwC;IACxC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,QAAQ,EAAE,YAAY,GAAG,IAAI,CAAC;IAC9B,yDAAyD;IACzD,MAAM,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAC;CAChC;AAED,gDAAgD;AAChD,MAAM,WAAW,aAAc,SAAQ,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC;IAC5D,wDAAwD;IACxD,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,0EAA0E;IAC1E,IAAI,EAAE,MAAM,IAAI,CAAC;CAClB;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,oBAAoB,GAAG,aAAa,CAwC7E"}
@@ -1,5 +1,5 @@
1
1
  import { copyFigure } from "../core/copyFigure.js";
2
- import { downloadFigure } from "../core/downloadFigure.js";
2
+ import { downloadFigure, downloadFigureSvg } from "../core/downloadFigure.js";
3
3
  import { figurePng } from "../core/figurePng.js";
4
4
  import { figureSvg } from "../core/figureSvg.js";
5
5
  import { useFigureTask } from "./useFigureTask.js";
@@ -12,26 +12,35 @@ import { useFigureTask } from "./useFigureTask.js";
12
12
  * @returns See {@link FigureActions}.
13
13
  */
14
14
  export function useFigureActions(options) {
15
- const { targetId, format, scale, fileName, background } = options;
15
+ const { targetId, writeFigure, format, scale, fileName, background } = options;
16
16
  const { redrawAt, redraw } = options;
17
17
  const { run, busy, failure, notice, clear } = useFigureTask();
18
- function withFigure(write) {
18
+ async function withFigure(write) {
19
+ if (targetId === undefined)
20
+ throw new Error('There is no figure to save.');
19
21
  return redrawAt === null
20
22
  ? write(targetId)
21
23
  : redraw(targetId, redrawAt, write);
22
24
  }
23
25
  function save() {
26
+ if (writeFigure !== undefined) {
27
+ const written = writeFigure().then((figure) => downloadFigureSvg(figure, { format, scale, fileName }));
28
+ run(written.then(() => null));
29
+ return;
30
+ }
24
31
  const options = { format, scale, fileName, background };
25
32
  run(withFigure((box) => downloadFigure(box, options)).then(() => null));
26
33
  }
27
34
  function copy() {
28
35
  // The clipboard is written before anything is awaited, with the picture
29
36
  // still being painted: Safari only allows a write the click itself started.
30
- const png = new Promise((resolve, reject) => {
31
- withFigure(async (box) => {
32
- resolve(await figurePng(figureSvg(box, { background }), scale));
33
- }).catch(reject);
34
- });
37
+ const png = writeFigure === undefined
38
+ ? new Promise((resolve, reject) => {
39
+ withFigure(async (box) => {
40
+ resolve(await figurePng(figureSvg(box, { background }), scale));
41
+ }).catch(reject);
42
+ })
43
+ : writeFigure().then((figure) => figurePng(figure, scale));
35
44
  run(copyFigure(png));
36
45
  }
37
46
  return { save, copy, busy, failure, notice, clear };
@@ -1 +1 @@
1
- {"version":3,"file":"useFigureActions.js","sourceRoot":"","sources":["../../../src/download/ui/useFigureActions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEnD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAIjD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AA+BnD;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAA6B;IAC5D,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;IAClE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IACrC,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,aAAa,EAAE,CAAC;IAE9D,SAAS,UAAU,CAAC,KAA+C;QACjE,OAAO,QAAQ,KAAK,IAAI;YACtB,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC;YACjB,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;IACxC,CAAC;IAED,SAAS,IAAI;QACX,MAAM,OAAO,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC;QACxD,GAAG,CAAC,UAAU,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,cAAc,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAC1E,CAAC;IAED,SAAS,IAAI;QACX,wEAAwE;QACxE,4EAA4E;QAC5E,MAAM,GAAG,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAChD,UAAU,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;gBACvB,OAAO,CAAC,MAAM,SAAS,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;YAClE,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACnB,CAAC,CAAC,CAAC;QACH,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;AACtD,CAAC"}
1
+ {"version":3,"file":"useFigureActions.js","sourceRoot":"","sources":["../../../src/download/ui/useFigureActions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEnD,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9E,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAGjD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAIjD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAiCnD;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAA6B;IAC5D,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,GAClE,OAAO,CAAC;IACV,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IACrC,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,aAAa,EAAE,CAAC;IAE9D,KAAK,UAAU,UAAU,CAAC,KAA+C;QACvE,IAAI,QAAQ,KAAK,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;QAC3E,OAAO,QAAQ,KAAK,IAAI;YACtB,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC;YACjB,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;IACxC,CAAC;IAED,SAAS,IAAI;QACX,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC9B,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAC5C,iBAAiB,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CACvD,CAAC;YACF,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;YAC9B,OAAO;QACT,CAAC;QACD,MAAM,OAAO,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC;QACxD,GAAG,CAAC,UAAU,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,cAAc,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAC1E,CAAC;IAED,SAAS,IAAI;QACX,wEAAwE;QACxE,4EAA4E;QAC5E,MAAM,GAAG,GACP,WAAW,KAAK,SAAS;YACvB,CAAC,CAAC,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBACpC,UAAU,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;oBACvB,OAAO,CAAC,MAAM,SAAS,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;gBAClE,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACnB,CAAC,CAAC;YACJ,CAAC,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;QAC/D,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;AACtD,CAAC"}
@@ -1,60 +1,7 @@
1
1
  import type { ReactElement, ReactNode } from 'react';
2
2
  import type { FigureFormat } from '../core/downloadFigure.ts';
3
- import type { FigureRenderer } from './useFigureRedraw.tsx';
4
- /** What the "Save figure" panel is set up with. */
5
- export interface FigureDownloadOptions {
6
- /**
7
- * The `id` of the box the figure is mounted in. Everything drawn inside it
8
- * is saved — sixteen charts of a pair grid as readily as one scatter plot —
9
- * and the controls floating over it are left behind.
10
- */
11
- targetId: string;
12
- /**
13
- * What the saved file is called, without its extension. Name it after the
14
- * data rather than after the tool: a reader with four of these in a
15
- * downloads folder cannot tell four `figure.png` apart.
16
- * @default 'figure'
17
- */
18
- fileName?: string;
19
- /**
20
- * The format it opens on.
21
- * @default 'png'
22
- */
23
- defaultFormat?: FigureFormat;
24
- /**
25
- * The resolution a PNG opens on, as a multiple of the figure on screen. An
26
- * SVG opens at 1×, the size it has on screen, and each format keeps the
27
- * multiple the reader last picked for it.
28
- * @default 2
29
- */
30
- defaultScale?: number;
31
- /**
32
- * The resolutions offered.
33
- * @default [1, 2, 3, 4]
34
- */
35
- scales?: readonly number[];
36
- /**
37
- * What is painted under the figure. `transparent` leaves it unpainted, for a
38
- * figure going onto a coloured slide.
39
- * @default the surface the figure is drawn on
40
- */
41
- background?: string;
42
- /**
43
- * What the panel is called.
44
- * @default the chrome's own line, in the language of the page
45
- */
46
- title?: string;
47
- /**
48
- * Draws the figure at a size, for a file. When it is given the panel offers
49
- * a size — as shown, 4:3, 16:9, a journal column, or typed — and a figure
50
- * saved at a size other than its own is drawn again at that size, off the
51
- * page, so its axes and labels are laid out for the new shape rather than
52
- * stretched into it. Draw exactly what is on screen, with the same data,
53
- * zoom and colours; only the box changes.
54
- * @default undefined — the figure is saved at the size it has on screen
55
- */
56
- renderFigure?: FigureRenderer;
57
- }
3
+ import type { FigureDownloadOptions } from './figureDownloadOptions.ts';
4
+ export type { FigureDownloadOptions } from './figureDownloadOptions.ts';
58
5
  /** What {@link useFigureDownload} hands back. */
59
6
  export interface FigureDownloadState {
60
7
  /** Whether the panel is showing. */
@@ -1 +1 @@
1
- {"version":3,"file":"useFigureDownload.d.ts","sourceRoot":"","sources":["../../../src/download/ui/useFigureDownload.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAa9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAG5D,mDAAmD;AACnD,MAAM,WAAW,qBAAqB;IACpC;;;;OAIG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,aAAa,CAAC,EAAE,YAAY,CAAC;IAC7B;;;;;OAKG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;OAGG;IACH,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;;;;;OAQG;IACH,YAAY,CAAC,EAAE,cAAc,CAAC;CAC/B;AAED,iDAAiD;AACjD,MAAM,WAAW,mBAAmB;IAClC,oCAAoC;IACpC,MAAM,EAAE,OAAO,CAAC;IAChB;;;OAGG;IACH,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACjC,8CAA8C;IAC9C,KAAK,EAAE,YAAY,CAAC;IACpB,sDAAsD;IACtD,MAAM,EAAE,YAAY,CAAC;IACrB;;;OAGG;IACH,MAAM,EAAE,SAAS,CAAC;CACnB;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,qBAAqB,GAC7B,mBAAmB,CAsFrB"}
1
+ {"version":3,"file":"useFigureDownload.d.ts","sourceRoot":"","sources":["../../../src/download/ui/useFigureDownload.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAiB9D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAIxE,YAAY,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAExE,iDAAiD;AACjD,MAAM,WAAW,mBAAmB;IAClC,oCAAoC;IACpC,MAAM,EAAE,OAAO,CAAC;IAChB;;;OAGG;IACH,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACjC,8CAA8C;IAC9C,KAAK,EAAE,YAAY,CAAC;IACpB,sDAAsD;IACtD,MAAM,EAAE,YAAY,CAAC;IACrB;;;OAGG;IACH,MAAM,EAAE,SAAS,CAAC;CACnB;AAKD;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,qBAAqB,GAC7B,mBAAmB,CAqHrB"}
@@ -1,12 +1,15 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
- import { useCallback, useState } from 'react';
2
+ import { useCallback, useRef, useState } from 'react';
3
3
  import { useChromeT } from "../../i18n/ui/useT.js";
4
+ import { DEFAULT_FIGURE_DPI, FIGURE_DPIS, dpiScale, } from "../core/figureDpi.js";
4
5
  import { figureLayoutRedraws, figureLayoutSize } from "../core/figureLayout.js";
5
6
  import { DEFAULT_FIGURE_SCALE, FIGURE_SCALES, defaultFigureScale, } from "../core/figureScale.js";
6
7
  import { figureSize } from "../core/figureTarget.js";
7
8
  import { FigureDownloadPanel } from "./FigureDownloadPanel.js";
8
9
  import { useFigureActions } from "./useFigureActions.js";
9
10
  import { useFigureRedraw } from "./useFigureRedraw.js";
11
+ /** The dots per inch offered, as the multiples the figure is painted at. */
12
+ const DPI_SCALES = FIGURE_DPIS.map(dpiScale);
10
13
  /**
11
14
  * The "Save figure" panel — save as PNG or SVG, or copy as PNG — for a caller
12
15
  * that brings its own trigger, such as a button in an editor's toolbar.
@@ -15,9 +18,17 @@ import { useFigureRedraw } from "./useFigureRedraw.js";
15
18
  * @returns See {@link FigureDownloadState}.
16
19
  */
17
20
  export function useFigureDownload(options) {
18
- const { targetId, fileName, background, scales = FIGURE_SCALES } = options;
19
- const { defaultFormat = 'png', defaultScale = DEFAULT_FIGURE_SCALE } = options;
20
- const { title, renderFigure } = options;
21
+ const { targetId, writeFigure, fileName, background } = options;
22
+ const { unit = 'multiple', defaultFormat = 'png' } = options;
23
+ const { title, renderFigure, onScaleChange } = options;
24
+ const dpi = unit === 'dpi';
25
+ const scales = options.scales ?? (dpi ? DPI_SCALES : FIGURE_SCALES);
26
+ const defaultScale = options.defaultScale ??
27
+ (dpi ? dpiScale(DEFAULT_FIGURE_DPI) : DEFAULT_FIGURE_SCALE);
28
+ // A figure with a printed size, or one its page wrote, keeps the size its
29
+ // SVG states: the resolution is then the PNG's alone.
30
+ const svgAtOwnSize = dpi || writeFigure !== undefined;
31
+ const redraws = renderFigure !== undefined && writeFigure === undefined;
21
32
  const t = useChromeT();
22
33
  const [isOpen, setIsOpen] = useState(false);
23
34
  const [format, setFormat] = useState(defaultFormat);
@@ -25,18 +36,20 @@ export function useFigureDownload(options) {
25
36
  png: defaultScale,
26
37
  svg: defaultFigureScale('svg'),
27
38
  }));
28
- const scale = picked[format];
39
+ const scale = format === 'svg' && svgAtOwnSize ? 1 : picked[format];
29
40
  const [size, setSize] = useState(null);
41
+ const opening = useRef(0);
30
42
  const [layout, setLayout] = useState('screen');
31
43
  const [custom, setCustom] = useState(null);
32
- const { redraw, portal } = useFigureRedraw(renderFigure);
33
- const redrawAt = renderFigure !== undefined &&
44
+ const { redraw, portal } = useFigureRedraw(redraws ? renderFigure : undefined);
45
+ const redrawAt = redraws &&
34
46
  size !== null &&
35
47
  figureLayoutRedraws(layout, size, custom ?? size)
36
48
  ? figureLayoutSize(layout, size, custom ?? size)
37
49
  : null;
38
50
  const { save, copy, busy, failure, notice, clear } = useFigureActions({
39
51
  targetId,
52
+ writeFigure,
40
53
  format,
41
54
  scale,
42
55
  fileName,
@@ -52,9 +65,24 @@ export function useFigureDownload(options) {
52
65
  setIsOpen(next);
53
66
  if (!next)
54
67
  return;
55
- setSize(figureSize(targetId));
56
68
  clear();
57
- }, [targetId, clear]);
69
+ if (writeFigure === undefined) {
70
+ setSize(targetId === undefined ? null : figureSize(targetId));
71
+ return;
72
+ }
73
+ // A written figure is measured once it is written; only the last
74
+ // opening is answered.
75
+ opening.current += 1;
76
+ const ticket = opening.current;
77
+ writeFigure().then((figure) => {
78
+ if (ticket !== opening.current)
79
+ return;
80
+ setSize({ width: figure.width, height: figure.height });
81
+ }, () => {
82
+ if (ticket === opening.current)
83
+ setSize(null);
84
+ });
85
+ }, [targetId, writeFigure, clear]);
58
86
  // What the last copy came to only describes the choices it was made with.
59
87
  function changed(apply) {
60
88
  return (value) => {
@@ -62,14 +90,18 @@ export function useFigureDownload(options) {
62
90
  apply(value);
63
91
  };
64
92
  }
65
- const panel = (_jsx(FigureDownloadPanel, { title: title ?? t('download.saveFigure'), format: format, scale: scale, scales: scales, size: size, failure: failure, notice: notice, saving: busy, onFormatChange: changed(setFormat), onScaleChange: changed((next) => setPicked((current) => ({ ...current, [format]: next }))), onSave: save, onCopy: copy, sizing: renderFigure === undefined
66
- ? undefined
67
- : {
93
+ const panel = (_jsx(FigureDownloadPanel, { title: title ?? t('download.saveFigure'), format: format, scale: scale, scales: scales, unit: unit, svgAtOwnSize: svgAtOwnSize, size: size, failure: failure, notice: notice, saving: busy, onFormatChange: changed(setFormat), onScaleChange: changed((next) => {
94
+ setPicked((current) => ({ ...current, [format]: next }));
95
+ if (format === 'png')
96
+ onScaleChange?.(next);
97
+ }), onSave: save, onCopy: copy, sizing: redraws
98
+ ? {
68
99
  layout,
69
100
  custom,
70
101
  onLayoutChange: changed(setLayout),
71
102
  onCustomChange: changed(setCustom),
72
- } }));
103
+ }
104
+ : undefined }));
73
105
  return { isOpen, setOpen, panel, format, portal };
74
106
  }
75
107
  //# sourceMappingURL=useFigureDownload.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useFigureDownload.js","sourceRoot":"","sources":["../../../src/download/ui/useFigureDownload.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useFigureDownload.js","sourceRoot":"","sources":["../../../src/download/ui/useFigureDownload.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEtD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEnD,OAAO,EACL,kBAAkB,EAClB,WAAW,EACX,QAAQ,GACT,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAEhF,OAAO,EACL,oBAAoB,EACpB,aAAa,EACb,kBAAkB,GACnB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAErD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA2B,CAAC;AAEhE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAuB,CAAC;AAwBxD,4EAA4E;AAC5E,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAE7C;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAC/B,OAA8B;IAE9B,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;IAChE,MAAM,EAAE,IAAI,GAAG,UAAU,EAAE,aAAa,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC;IAC7D,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC;IACvD,MAAM,GAAG,GAAG,IAAI,KAAK,KAAK,CAAC;IAC3B,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;IACpE,MAAM,YAAY,GAChB,OAAO,CAAC,YAAY;QACpB,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC;IAC9D,0EAA0E;IAC1E,sDAAsD;IACtD,MAAM,YAAY,GAAG,GAAG,IAAI,WAAW,KAAK,SAAS,CAAC;IACtD,MAAM,OAAO,GAAG,YAAY,KAAK,SAAS,IAAI,WAAW,KAAK,SAAS,CAAC;IAExE,MAAM,CAAC,GAAG,UAAU,EAAE,CAAC;IACvB,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC5C,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAe,aAAa,CAAC,CAAC;IAClE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAA+B,GAAG,EAAE,CAAC,CAAC;QACxE,GAAG,EAAE,YAAY;QACjB,GAAG,EAAE,kBAAkB,CAAC,KAAK,CAAC;KAC/B,CAAC,CAAC,CAAC;IACJ,MAAM,KAAK,GAAG,MAAM,KAAK,KAAK,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACpE,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAsB,IAAI,CAAC,CAAC;IAC5D,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IAC1B,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAe,QAAQ,CAAC,CAAC;IAC7D,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAsB,IAAI,CAAC,CAAC;IAChE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,eAAe,CACxC,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CACnC,CAAC;IACF,MAAM,QAAQ,GACZ,OAAO;QACP,IAAI,KAAK,IAAI;QACb,mBAAmB,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,IAAI,IAAI,CAAC;QAC/C,CAAC,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,IAAI,IAAI,CAAC;QAChD,CAAC,CAAC,IAAI,CAAC;IACX,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,gBAAgB,CAAC;QACpE,QAAQ;QACR,WAAW;QACX,MAAM;QACN,KAAK;QACL,QAAQ;QACR,UAAU;QACV,QAAQ;QACR,MAAM;KACP,CAAC,CAAC;IAEH,2EAA2E;IAC3E,yEAAyE;IACzE,4EAA4E;IAC5E,kEAAkE;IAClE,MAAM,OAAO,GAAG,WAAW,CACzB,CAAC,IAAa,EAAE,EAAE;QAChB,SAAS,CAAC,IAAI,CAAC,CAAC;QAChB,IAAI,CAAC,IAAI;YAAE,OAAO;QAClB,KAAK,EAAE,CAAC;QACR,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC9B,OAAO,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;YAC9D,OAAO;QACT,CAAC;QACD,iEAAiE;QACjE,uBAAuB;QACvB,OAAO,CAAC,OAAO,IAAI,CAAC,CAAC;QACrB,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;QAC/B,WAAW,EAAE,CAAC,IAAI,CAChB,CAAC,MAAM,EAAE,EAAE;YACT,IAAI,MAAM,KAAK,OAAO,CAAC,OAAO;gBAAE,OAAO;YACvC,OAAO,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QAC1D,CAAC,EACD,GAAG,EAAE;YACH,IAAI,MAAM,KAAK,OAAO,CAAC,OAAO;gBAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QAChD,CAAC,CACF,CAAC;IACJ,CAAC,EACD,CAAC,QAAQ,EAAE,WAAW,EAAE,KAAK,CAAC,CAC/B,CAAC;IAEF,0EAA0E;IAC1E,SAAS,OAAO,CAAI,KAAyB;QAC3C,OAAO,CAAC,KAAK,EAAE,EAAE;YACf,KAAK,EAAE,CAAC;YACR,KAAK,CAAC,KAAK,CAAC,CAAC;QACf,CAAC,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG,CACZ,KAAC,mBAAmB,IAClB,KAAK,EAAE,KAAK,IAAI,CAAC,CAAC,qBAAqB,CAAC,EACxC,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,IAAI,EACV,YAAY,EAAE,YAAY,EAC1B,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,IAAI,EACZ,cAAc,EAAE,OAAO,CAAC,SAAS,CAAC,EAClC,aAAa,EAAE,OAAO,CAAC,CAAC,IAAY,EAAE,EAAE;YACtC,SAAS,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YACzD,IAAI,MAAM,KAAK,KAAK;gBAAE,aAAa,EAAE,CAAC,IAAI,CAAC,CAAC;QAC9C,CAAC,CAAC,EACF,MAAM,EAAE,IAAI,EACZ,MAAM,EAAE,IAAI,EACZ,MAAM,EACJ,OAAO;YACL,CAAC,CAAC;gBACE,MAAM;gBACN,MAAM;gBACN,cAAc,EAAE,OAAO,CAAC,SAAS,CAAC;gBAClC,cAAc,EAAE,OAAO,CAAC,SAAS,CAAC;aACnC;YACH,CAAC,CAAC,SAAS,GAEf,CACH,CAAC;IAEF,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AACpD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"sites.d.ts","sourceRoot":"","sources":["../../../src/ecosystem/core/sites.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE5D,YAAY,EACV,aAAa,EACb,MAAM,EACN,cAAc,EACd,QAAQ,EACR,UAAU,GACX,MAAM,YAAY,CAAC;AAEpB;;;GAGG;AACH,eAAO,MAAM,eAAe,EAAE,SAAS,aAAa,EA+UnD,CAAC;AAEF,+DAA+D;AAC/D,MAAM,WAAW,cAAc;IAC7B;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;GAKG;AACH,wBAAgB,OAAO,CACrB,IAAI,EAAE,UAAU,EAChB,OAAO,GAAE,cAAmB,GAC3B,MAAM,CAER"}
1
+ {"version":3,"file":"sites.d.ts","sourceRoot":"","sources":["../../../src/ecosystem/core/sites.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE5D,YAAY,EACV,aAAa,EACb,MAAM,EACN,cAAc,EACd,QAAQ,EACR,UAAU,GACX,MAAM,YAAY,CAAC;AAEpB;;;GAGG;AACH,eAAO,MAAM,eAAe,EAAE,SAAS,aAAa,EA6VnD,CAAC;AAEF,+DAA+D;AAC/D,MAAM,WAAW,cAAc;IAC7B;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;GAKG;AACH,wBAAgB,OAAO,CACrB,IAAI,EAAE,UAAU,EAChB,OAAO,GAAE,cAAmB,GAC3B,MAAM,CAER"}
@@ -338,6 +338,20 @@ export const ECOSYSTEM_SITES = [
338
338
  brandAlt: '#a16207',
339
339
  mark: { plate: '#0072b2', accent: '#e69f00' },
340
340
  },
341
+ {
342
+ id: 'draw',
343
+ name: { lead: 'draw', alt: 'cheminfo', dot: true },
344
+ host: 'draw.cheminfo.org',
345
+ tagline: 'Journal-grade structures, in an SVG that keeps the chemistry.',
346
+ group: 'computing',
347
+ // The ink a structure is printed in.
348
+ brand: '#1f2a44',
349
+ // The red curly arrows are taught in, at 5.9:1 on white.
350
+ brandAlt: '#c0261d',
351
+ // Ink and red on paper: a red nib on the navy stays under 4:1, where on
352
+ // white it reads at 5.9:1.
353
+ mark: { plate: '#ffffff', accent: '#c0261d', edge: '#dfe3e8' },
354
+ },
341
355
  ];
342
356
  /**
343
357
  * The address of a site, which is its host over https.
@@ -1 +1 @@
1
- {"version":3,"file":"sites.js","sourceRoot":"","sources":["../../../src/ecosystem/core/sites.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sites.js","sourceRoot":"","sources":["../../../src/ecosystem/core/sites.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import type { SiteGroupId } from './groups.ts';
2
2
  /** The sites of the family, whether the menu links to them yet or not. */
3
- export type SiteId = 'learn' | 'inchi' | 'vcl' | 'smiles' | 'iupac-name' | 'openbabel' | 'chemcalc' | 'dbe' | 'nmrium' | 'metabo' | 'derepflow' | 'isomers' | 'tex' | 'lcao' | 'regexp' | 'pdb' | 'elucidation' | 'spectroscopy' | 'equilibrium' | 'polycarp' | '3d' | 'periodic-table' | 'database' | 'molecules' | 'symmetry' | 'osiris' | 'atoms' | 'moles' | 'inorganic' | 'slides' | 'chembio' | 'wikidata' | 'mz' | 'vibrations';
3
+ export type SiteId = 'learn' | 'inchi' | 'vcl' | 'smiles' | 'iupac-name' | 'openbabel' | 'chemcalc' | 'dbe' | 'nmrium' | 'metabo' | 'derepflow' | 'isomers' | 'tex' | 'lcao' | 'regexp' | 'pdb' | 'elucidation' | 'spectroscopy' | 'equilibrium' | 'polycarp' | '3d' | 'periodic-table' | 'database' | 'molecules' | 'symmetry' | 'osiris' | 'atoms' | 'moles' | 'inorganic' | 'slides' | 'chembio' | 'wikidata' | 'mz' | 'vibrations' | 'draw';
4
4
  /** A site's name, split the way its own wordmark splits it. */
5
5
  export interface SiteName {
6
6
  /**