react-cheminfo 0.38.0 → 0.39.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 (327) hide show
  1. package/lib/chart/ui/Axes.d.ts +19 -0
  2. package/lib/chart/ui/Axes.d.ts.map +1 -1
  3. package/lib/chart/ui/Axes.js +25 -5
  4. package/lib/chart/ui/Axes.js.map +1 -1
  5. package/lib/chrome/ui/NavMenuButton.d.ts.map +1 -1
  6. package/lib/chrome/ui/NavMenuButton.js +41 -11
  7. package/lib/chrome/ui/NavMenuButton.js.map +1 -1
  8. package/lib/chrome/ui/SiteHeader.js +24 -1
  9. package/lib/chrome/ui/SiteHeader.js.map +1 -1
  10. package/lib/chrome/ui/navItem.d.ts +7 -0
  11. package/lib/chrome/ui/navItem.d.ts.map +1 -1
  12. package/lib/chrome/ui/navItem.js.map +1 -1
  13. package/lib/citation/ui/entries.d.ts.map +1 -1
  14. package/lib/citation/ui/entries.js +6 -1
  15. package/lib/citation/ui/entries.js.map +1 -1
  16. package/lib/clipboard/ui/ClickToCopy.d.ts +11 -0
  17. package/lib/clipboard/ui/ClickToCopy.d.ts.map +1 -1
  18. package/lib/clipboard/ui/ClickToCopy.js +28 -10
  19. package/lib/clipboard/ui/ClickToCopy.js.map +1 -1
  20. package/lib/clipboard/ui/CopyButton.d.ts +2 -1
  21. package/lib/clipboard/ui/CopyButton.d.ts.map +1 -1
  22. package/lib/clipboard/ui/CopyButton.js +2 -1
  23. package/lib/clipboard/ui/CopyButton.js.map +1 -1
  24. package/lib/clipboard/ui/CopyableValue.d.ts +24 -4
  25. package/lib/clipboard/ui/CopyableValue.d.ts.map +1 -1
  26. package/lib/clipboard/ui/CopyableValue.js +35 -3
  27. package/lib/clipboard/ui/CopyableValue.js.map +1 -1
  28. package/lib/clipboard/ui/index.d.ts +1 -1
  29. package/lib/clipboard/ui/index.d.ts.map +1 -1
  30. package/lib/clipboard/ui/index.js.map +1 -1
  31. package/lib/confirm/ui/ConfirmButton.d.ts.map +1 -1
  32. package/lib/confirm/ui/ConfirmButton.js +2 -1
  33. package/lib/confirm/ui/ConfirmButton.js.map +1 -1
  34. package/lib/delimited/ui/TableDataButton.d.ts.map +1 -1
  35. package/lib/delimited/ui/TableDataButton.js +2 -1
  36. package/lib/delimited/ui/TableDataButton.js.map +1 -1
  37. package/lib/download/core/figureSvg.d.ts.map +1 -1
  38. package/lib/download/core/figureSvg.js +37 -12
  39. package/lib/download/core/figureSvg.js.map +1 -1
  40. package/lib/help/ui/HelpToolbarButton.d.ts.map +1 -1
  41. package/lib/help/ui/HelpToolbarButton.js +2 -1
  42. package/lib/help/ui/HelpToolbarButton.js.map +1 -1
  43. package/lib/i18n/core/chromeCatalog.d.ts +1 -1
  44. package/lib/i18n/core/chromeCatalog.d.ts.map +1 -1
  45. package/lib/locales/de.json +39 -4
  46. package/lib/locales/en.json +39 -4
  47. package/lib/locales/es.json +39 -4
  48. package/lib/locales/fr.json +39 -4
  49. package/lib/locales/it.json +39 -4
  50. package/lib/number/ui/NumberInput.js +1 -1
  51. package/lib/number/ui/NumberInput.js.map +1 -1
  52. package/lib/overlay/ui/OverlayIconButton.d.ts.map +1 -1
  53. package/lib/overlay/ui/OverlayIconButton.js +1 -1
  54. package/lib/overlay/ui/OverlayIconButton.js.map +1 -1
  55. package/lib/panel/ui/ClearButton.d.ts.map +1 -1
  56. package/lib/panel/ui/ClearButton.js +1 -1
  57. package/lib/panel/ui/ClearButton.js.map +1 -1
  58. package/lib/pedagogy/core/inlineMarks.d.ts +9 -5
  59. package/lib/pedagogy/core/inlineMarks.d.ts.map +1 -1
  60. package/lib/pedagogy/core/inlineMarks.js +14 -6
  61. package/lib/pedagogy/core/inlineMarks.js.map +1 -1
  62. package/lib/pedagogy/ui/GlossaryDefinition.d.ts +4 -10
  63. package/lib/pedagogy/ui/GlossaryDefinition.d.ts.map +1 -1
  64. package/lib/pedagogy/ui/GlossaryDefinition.js +7 -7
  65. package/lib/pedagogy/ui/GlossaryDefinition.js.map +1 -1
  66. package/lib/pedagogy/ui/GlossaryIndex.d.ts.map +1 -1
  67. package/lib/pedagogy/ui/GlossaryIndex.js +1 -1
  68. package/lib/pedagogy/ui/GlossaryIndex.js.map +1 -1
  69. package/lib/pedagogy/ui/GlossaryProvider.d.ts +7 -0
  70. package/lib/pedagogy/ui/GlossaryProvider.d.ts.map +1 -1
  71. package/lib/pedagogy/ui/GlossaryProvider.js +3 -2
  72. package/lib/pedagogy/ui/GlossaryProvider.js.map +1 -1
  73. package/lib/pedagogy/ui/GlossaryText.d.ts +7 -2
  74. package/lib/pedagogy/ui/GlossaryText.d.ts.map +1 -1
  75. package/lib/pedagogy/ui/GlossaryText.js +3 -2
  76. package/lib/pedagogy/ui/GlossaryText.js.map +1 -1
  77. package/lib/pedagogy/ui/InlineText.d.ts +8 -2
  78. package/lib/pedagogy/ui/InlineText.d.ts.map +1 -1
  79. package/lib/pedagogy/ui/InlineText.js +7 -2
  80. package/lib/pedagogy/ui/InlineText.js.map +1 -1
  81. package/lib/pedagogy/ui/ReferenceSectionBlock.d.ts +4 -1
  82. package/lib/pedagogy/ui/ReferenceSectionBlock.d.ts.map +1 -1
  83. package/lib/pedagogy/ui/ReferenceSectionBlock.js +2 -1
  84. package/lib/pedagogy/ui/ReferenceSectionBlock.js.map +1 -1
  85. package/lib/pedagogy/ui/SyntaxTooltip.d.ts.map +1 -1
  86. package/lib/pedagogy/ui/SyntaxTooltip.js +11 -10
  87. package/lib/pedagogy/ui/SyntaxTooltip.js.map +1 -1
  88. package/lib/pedagogy/ui/TutorialStepStrip.d.ts.map +1 -1
  89. package/lib/pedagogy/ui/TutorialStepStrip.js +18 -4
  90. package/lib/pedagogy/ui/TutorialStepStrip.js.map +1 -1
  91. package/lib/pedagogy/ui/glossaryContext.d.ts +7 -0
  92. package/lib/pedagogy/ui/glossaryContext.d.ts.map +1 -1
  93. package/lib/pedagogy/ui/glossaryContext.js.map +1 -1
  94. package/lib/pedagogy/ui/index.d.ts +1 -1
  95. package/lib/pedagogy/ui/index.d.ts.map +1 -1
  96. package/lib/pedagogy/ui/inlineSegments.d.ts +5 -0
  97. package/lib/pedagogy/ui/inlineSegments.d.ts.map +1 -1
  98. package/lib/pedagogy/ui/inlineSegments.js +2 -0
  99. package/lib/pedagogy/ui/inlineSegments.js.map +1 -1
  100. package/lib/pedagogy/ui/pedagogyStyle.d.ts +8 -9
  101. package/lib/pedagogy/ui/pedagogyStyle.d.ts.map +1 -1
  102. package/lib/pedagogy/ui/pedagogyStyle.js +10 -18
  103. package/lib/pedagogy/ui/pedagogyStyle.js.map +1 -1
  104. package/lib/seo/core/plainDescription.d.ts +2 -2
  105. package/lib/seo/core/plainDescription.js +5 -2
  106. package/lib/seo/core/plainDescription.js.map +1 -1
  107. package/lib/share/core/devices.d.ts +41 -0
  108. package/lib/share/core/devices.d.ts.map +1 -0
  109. package/lib/share/core/devices.js +58 -0
  110. package/lib/share/core/devices.js.map +1 -0
  111. package/lib/share/core/index.d.ts +4 -0
  112. package/lib/share/core/index.d.ts.map +1 -1
  113. package/lib/share/core/index.js +2 -0
  114. package/lib/share/core/index.js.map +1 -1
  115. package/lib/share/core/regions.d.ts +43 -0
  116. package/lib/share/core/regions.d.ts.map +1 -0
  117. package/lib/share/core/regions.js +71 -0
  118. package/lib/share/core/regions.js.map +1 -0
  119. package/lib/share/ui/HiddenPartsProvider.d.ts.map +1 -1
  120. package/lib/share/ui/HiddenPartsProvider.js +4 -1
  121. package/lib/share/ui/HiddenPartsProvider.js.map +1 -1
  122. package/lib/share/ui/PagePart.d.ts.map +1 -1
  123. package/lib/share/ui/PagePart.js +10 -1
  124. package/lib/share/ui/PagePart.js.map +1 -1
  125. package/lib/share/ui/ShareButton.d.ts.map +1 -1
  126. package/lib/share/ui/ShareButton.js +3 -4
  127. package/lib/share/ui/ShareButton.js.map +1 -1
  128. package/lib/share/ui/ShareConfigOptions.d.ts +6 -1
  129. package/lib/share/ui/ShareConfigOptions.d.ts.map +1 -1
  130. package/lib/share/ui/ShareConfigOptions.js +6 -13
  131. package/lib/share/ui/ShareConfigOptions.js.map +1 -1
  132. package/lib/share/ui/ShareDialog.d.ts +14 -0
  133. package/lib/share/ui/ShareDialog.d.ts.map +1 -1
  134. package/lib/share/ui/ShareDialog.js +3 -3
  135. package/lib/share/ui/ShareDialog.js.map +1 -1
  136. package/lib/share/ui/ShareDialogContent.d.ts +2 -2
  137. package/lib/share/ui/ShareDialogContent.d.ts.map +1 -1
  138. package/lib/share/ui/ShareDialogContent.js +36 -30
  139. package/lib/share/ui/ShareDialogContent.js.map +1 -1
  140. package/lib/share/ui/ShareLinkBar.d.ts +21 -0
  141. package/lib/share/ui/ShareLinkBar.d.ts.map +1 -0
  142. package/lib/share/ui/ShareLinkBar.js +32 -0
  143. package/lib/share/ui/ShareLinkBar.js.map +1 -0
  144. package/lib/share/ui/SharePanes.d.ts +17 -0
  145. package/lib/share/ui/SharePanes.d.ts.map +1 -0
  146. package/lib/share/ui/SharePanes.js +27 -0
  147. package/lib/share/ui/SharePanes.js.map +1 -0
  148. package/lib/share/ui/SharePartOptions.d.ts +9 -3
  149. package/lib/share/ui/SharePartOptions.d.ts.map +1 -1
  150. package/lib/share/ui/SharePartOptions.js +12 -16
  151. package/lib/share/ui/SharePartOptions.js.map +1 -1
  152. package/lib/share/ui/SharePartRow.d.ts +37 -0
  153. package/lib/share/ui/SharePartRow.d.ts.map +1 -0
  154. package/lib/share/ui/SharePartRow.js +25 -0
  155. package/lib/share/ui/SharePartRow.js.map +1 -0
  156. package/lib/share/ui/SharePresetTabs.d.ts +10 -7
  157. package/lib/share/ui/SharePresetTabs.d.ts.map +1 -1
  158. package/lib/share/ui/SharePresetTabs.js +17 -17
  159. package/lib/share/ui/SharePresetTabs.js.map +1 -1
  160. package/lib/share/ui/SharePreview.d.ts +32 -0
  161. package/lib/share/ui/SharePreview.d.ts.map +1 -0
  162. package/lib/share/ui/SharePreview.js +104 -0
  163. package/lib/share/ui/SharePreview.js.map +1 -0
  164. package/lib/share/ui/SharePreviewDevices.d.ts +20 -0
  165. package/lib/share/ui/SharePreviewDevices.d.ts.map +1 -0
  166. package/lib/share/ui/SharePreviewDevices.js +40 -0
  167. package/lib/share/ui/SharePreviewDevices.js.map +1 -0
  168. package/lib/share/ui/index.d.ts +1 -0
  169. package/lib/share/ui/index.d.ts.map +1 -1
  170. package/lib/share/ui/index.js.map +1 -1
  171. package/lib/share/ui/shareMarking.d.ts +14 -0
  172. package/lib/share/ui/shareMarking.d.ts.map +1 -0
  173. package/lib/share/ui/shareMarking.js +17 -0
  174. package/lib/share/ui/shareMarking.js.map +1 -0
  175. package/lib/share/ui/useShareRegionReports.d.ts +12 -0
  176. package/lib/share/ui/useShareRegionReports.d.ts.map +1 -0
  177. package/lib/share/ui/useShareRegionReports.js +73 -0
  178. package/lib/share/ui/useShareRegionReports.js.map +1 -0
  179. package/lib/shared/ui/ActionTooltip.d.ts +42 -0
  180. package/lib/shared/ui/ActionTooltip.d.ts.map +1 -0
  181. package/lib/shared/ui/ActionTooltip.js +21 -0
  182. package/lib/shared/ui/ActionTooltip.js.map +1 -0
  183. package/lib/shared/ui/index.d.ts +4 -0
  184. package/lib/shared/ui/index.d.ts.map +1 -1
  185. package/lib/shared/ui/index.js +2 -0
  186. package/lib/shared/ui/index.js.map +1 -1
  187. package/lib/shared/ui/useActionTooltip.d.ts +48 -0
  188. package/lib/shared/ui/useActionTooltip.d.ts.map +1 -0
  189. package/lib/shared/ui/useActionTooltip.js +78 -0
  190. package/lib/shared/ui/useActionTooltip.js.map +1 -0
  191. package/lib/structure/core/index.d.ts +2 -0
  192. package/lib/structure/core/index.d.ts.map +1 -1
  193. package/lib/structure/core/index.js +1 -0
  194. package/lib/structure/core/index.js.map +1 -1
  195. package/lib/structure/core/sourceMolecule.d.ts +18 -0
  196. package/lib/structure/core/sourceMolecule.d.ts.map +1 -0
  197. package/lib/structure/core/sourceMolecule.js +26 -0
  198. package/lib/structure/core/sourceMolecule.js.map +1 -0
  199. package/lib/structure/core/structureNotations.d.ts +57 -0
  200. package/lib/structure/core/structureNotations.d.ts.map +1 -0
  201. package/lib/structure/core/structureNotations.js +74 -0
  202. package/lib/structure/core/structureNotations.js.map +1 -0
  203. package/lib/structure/core/structurePicture.d.ts +49 -0
  204. package/lib/structure/core/structurePicture.d.ts.map +1 -0
  205. package/lib/structure/core/structurePicture.js +83 -0
  206. package/lib/structure/core/structurePicture.js.map +1 -0
  207. package/lib/structure/ui/EditorExportButton.d.ts +23 -0
  208. package/lib/structure/ui/EditorExportButton.d.ts.map +1 -0
  209. package/lib/structure/ui/EditorExportButton.js +23 -0
  210. package/lib/structure/ui/EditorExportButton.js.map +1 -0
  211. package/lib/structure/ui/EditorHelpButton.d.ts +5 -2
  212. package/lib/structure/ui/EditorHelpButton.d.ts.map +1 -1
  213. package/lib/structure/ui/EditorHelpButton.js +8 -9
  214. package/lib/structure/ui/EditorHelpButton.js.map +1 -1
  215. package/lib/structure/ui/StructureEditor.d.ts +8 -0
  216. package/lib/structure/ui/StructureEditor.d.ts.map +1 -1
  217. package/lib/structure/ui/StructureEditor.js +26 -3
  218. package/lib/structure/ui/StructureEditor.js.map +1 -1
  219. package/lib/structure/ui/StructureExportDialog.d.ts +34 -0
  220. package/lib/structure/ui/StructureExportDialog.d.ts.map +1 -0
  221. package/lib/structure/ui/StructureExportDialog.js +43 -0
  222. package/lib/structure/ui/StructureExportDialog.js.map +1 -0
  223. package/lib/structure/ui/StructureExportPanel.d.ts +37 -0
  224. package/lib/structure/ui/StructureExportPanel.d.ts.map +1 -0
  225. package/lib/structure/ui/StructureExportPanel.js +75 -0
  226. package/lib/structure/ui/StructureExportPanel.js.map +1 -0
  227. package/lib/structure/ui/StructureNotationRow.d.ts +22 -0
  228. package/lib/structure/ui/StructureNotationRow.d.ts.map +1 -0
  229. package/lib/structure/ui/StructureNotationRow.js +34 -0
  230. package/lib/structure/ui/StructureNotationRow.js.map +1 -0
  231. package/lib/structure/ui/StructurePicturePane.d.ts +23 -0
  232. package/lib/structure/ui/StructurePicturePane.d.ts.map +1 -0
  233. package/lib/structure/ui/StructurePicturePane.js +113 -0
  234. package/lib/structure/ui/StructurePicturePane.js.map +1 -0
  235. package/lib/structure/ui/StructureSvg.d.ts.map +1 -1
  236. package/lib/structure/ui/StructureSvg.js +2 -18
  237. package/lib/structure/ui/StructureSvg.js.map +1 -1
  238. package/lib/structure/ui/ToolbarTooltip.d.ts.map +1 -1
  239. package/lib/structure/ui/ToolbarTooltip.js +1 -2
  240. package/lib/structure/ui/ToolbarTooltip.js.map +1 -1
  241. package/lib/structure/ui/index.d.ts +7 -3
  242. package/lib/structure/ui/index.d.ts.map +1 -1
  243. package/lib/structure/ui/index.js +5 -3
  244. package/lib/structure/ui/index.js.map +1 -1
  245. package/lib/structure/ui/structureNotationText.d.ts +23 -0
  246. package/lib/structure/ui/structureNotationText.d.ts.map +1 -0
  247. package/lib/structure/ui/structureNotationText.js +42 -0
  248. package/lib/structure/ui/structureNotationText.js.map +1 -0
  249. package/lib/structure/ui/useEditorStructure.d.ts +37 -0
  250. package/lib/structure/ui/useEditorStructure.d.ts.map +1 -0
  251. package/lib/structure/ui/useEditorStructure.js +70 -0
  252. package/lib/structure/ui/useEditorStructure.js.map +1 -0
  253. package/package.json +1 -1
  254. package/src/chart/ui/Axes.tsx +53 -5
  255. package/src/chrome/ui/NavMenuButton.tsx +61 -18
  256. package/src/chrome/ui/SiteHeader.tsx +37 -1
  257. package/src/chrome/ui/navItem.ts +7 -0
  258. package/src/citation/ui/entries.tsx +10 -2
  259. package/src/clipboard/ui/ClickToCopy.tsx +47 -13
  260. package/src/clipboard/ui/CopyButton.tsx +4 -2
  261. package/src/clipboard/ui/CopyableValue.tsx +88 -13
  262. package/src/clipboard/ui/index.ts +5 -1
  263. package/src/confirm/ui/ConfirmButton.tsx +2 -0
  264. package/src/delimited/ui/TableDataButton.tsx +2 -1
  265. package/src/download/core/figureSvg.ts +42 -10
  266. package/src/help/ui/HelpToolbarButton.tsx +2 -1
  267. package/src/locales/de.json +39 -4
  268. package/src/locales/en.json +39 -4
  269. package/src/locales/es.json +39 -4
  270. package/src/locales/fr.json +39 -4
  271. package/src/locales/it.json +39 -4
  272. package/src/number/ui/NumberInput.tsx +1 -1
  273. package/src/overlay/ui/OverlayIconButton.tsx +1 -0
  274. package/src/panel/ui/ClearButton.tsx +1 -0
  275. package/src/pedagogy/core/inlineMarks.ts +15 -7
  276. package/src/pedagogy/ui/GlossaryDefinition.tsx +8 -18
  277. package/src/pedagogy/ui/GlossaryIndex.tsx +0 -1
  278. package/src/pedagogy/ui/GlossaryProvider.tsx +10 -2
  279. package/src/pedagogy/ui/GlossaryText.tsx +10 -2
  280. package/src/pedagogy/ui/InlineText.tsx +21 -4
  281. package/src/pedagogy/ui/ReferenceSectionBlock.tsx +8 -2
  282. package/src/pedagogy/ui/SyntaxTooltip.tsx +11 -9
  283. package/src/pedagogy/ui/TutorialStepStrip.tsx +50 -18
  284. package/src/pedagogy/ui/glossaryContext.ts +7 -0
  285. package/src/pedagogy/ui/index.ts +1 -1
  286. package/src/pedagogy/ui/inlineSegments.tsx +7 -0
  287. package/src/pedagogy/ui/pedagogyStyle.ts +12 -24
  288. package/src/seo/core/plainDescription.ts +4 -2
  289. package/src/share/core/devices.ts +80 -0
  290. package/src/share/core/index.ts +14 -0
  291. package/src/share/core/regions.ts +87 -0
  292. package/src/share/ui/HiddenPartsProvider.tsx +6 -1
  293. package/src/share/ui/PagePart.tsx +12 -1
  294. package/src/share/ui/ShareButton.tsx +3 -6
  295. package/src/share/ui/ShareConfigOptions.tsx +25 -16
  296. package/src/share/ui/ShareDialog.tsx +17 -3
  297. package/src/share/ui/ShareDialogContent.tsx +80 -77
  298. package/src/share/ui/ShareLinkBar.tsx +70 -0
  299. package/src/share/ui/SharePanes.tsx +62 -0
  300. package/src/share/ui/SharePartOptions.tsx +25 -26
  301. package/src/share/ui/SharePartRow.tsx +78 -0
  302. package/src/share/ui/SharePresetTabs.tsx +36 -43
  303. package/src/share/ui/SharePreview.tsx +204 -0
  304. package/src/share/ui/SharePreviewDevices.tsx +70 -0
  305. package/src/share/ui/index.ts +1 -0
  306. package/src/share/ui/shareMarking.ts +18 -0
  307. package/src/share/ui/useShareRegionReports.ts +84 -0
  308. package/src/shared/ui/ActionTooltip.tsx +70 -0
  309. package/src/shared/ui/index.ts +7 -0
  310. package/src/shared/ui/useActionTooltip.ts +103 -0
  311. package/src/structure/core/index.ts +5 -0
  312. package/src/structure/core/sourceMolecule.ts +26 -0
  313. package/src/structure/core/structureNotations.ts +125 -0
  314. package/src/structure/core/structurePicture.ts +119 -0
  315. package/src/structure/ui/EditorExportButton.tsx +62 -0
  316. package/src/structure/ui/EditorHelpButton.tsx +26 -30
  317. package/src/structure/ui/StructureEditor.tsx +51 -5
  318. package/src/structure/ui/StructureExportDialog.tsx +90 -0
  319. package/src/structure/ui/StructureExportPanel.tsx +156 -0
  320. package/src/structure/ui/StructureNotationRow.tsx +74 -0
  321. package/src/structure/ui/StructurePicturePane.tsx +208 -0
  322. package/src/structure/ui/StructureSvg.tsx +3 -12
  323. package/src/structure/ui/ToolbarTooltip.tsx +1 -1
  324. package/src/structure/ui/index.ts +7 -3
  325. package/src/structure/ui/structureNotationText.ts +56 -0
  326. package/src/structure/ui/useEditorStructure.ts +119 -0
  327. package/styles/chrome.css +414 -14
package/styles/chrome.css CHANGED
@@ -333,18 +333,361 @@ button {
333
333
  font-size: 0.75rem;
334
334
  }
335
335
 
336
- /* The share dialog's preset tabs sit on a rule, and wrap onto a second row
337
- rather than overflow a phone-width dialog. */
336
+ /* The share dialog: the link and its buttons above, never scrolled away, then
337
+ the options and the page they write, side by side. */
338
+ .share-dialog__body {
339
+ display: flex;
340
+ overflow: hidden;
341
+ min-height: 0;
342
+ flex: 1 1 auto;
343
+ flex-direction: column;
344
+ padding: 12px 16px 0;
345
+ gap: 12px;
346
+ }
347
+
348
+ /* The ready-made links and the three things one does with the link they write,
349
+ on one row: the tabs say which link, the buttons act on it. A dialog too
350
+ narrow for both wraps the buttons under the tabs rather than cutting them. */
351
+ .share-dialog__top {
352
+ display: flex;
353
+ flex-wrap: wrap;
354
+ align-items: flex-end;
355
+ justify-content: space-between;
356
+ border-bottom: 1px solid var(--border);
357
+ gap: 8px 16px;
358
+ }
359
+
360
+ .share-dialog__top > .share-presets {
361
+ flex: 1 1 auto;
362
+ min-width: 0;
363
+ }
364
+
365
+ /* The buttons end on the rule, as the tabs do, so the two read as one row
366
+ rather than as a row with something floating over it. */
367
+ .share-linkbar {
368
+ display: flex;
369
+ align-items: center;
370
+ flex: 0 0 auto;
371
+ gap: 8px;
372
+ }
373
+
374
+ .share-dialog__panes {
375
+ display: grid;
376
+ overflow: hidden;
377
+ min-height: 0;
378
+ flex: 1 1 auto;
379
+ gap: 16px;
380
+ grid-template-columns: minmax(0, 360px) minmax(0, 1fr);
381
+ padding-bottom: 12px;
382
+ }
383
+
384
+ .share-dialog__panes--single {
385
+ grid-template-columns: minmax(0, 1fr);
386
+ }
387
+
388
+ .share-dialog__options {
389
+ overflow-y: auto;
390
+ min-height: 0;
391
+ padding-right: 4px;
392
+ }
393
+
394
+ /* The tabs the two panes fold into on a narrow dialog. */
395
+ .share-dialog__tabs {
396
+ display: flex;
397
+ overflow: hidden;
398
+ min-height: 0;
399
+ flex: 1 1 auto;
400
+ flex-direction: column;
401
+ }
402
+
403
+ .share-dialog__tabs > .bp6-tab-panel {
404
+ display: flex;
405
+ overflow: hidden;
406
+ min-height: 0;
407
+ flex: 1 1 auto;
408
+ flex-direction: column;
409
+ margin-top: 8px;
410
+ }
411
+
412
+ /* One row per part: what it is on the left, whether the link keeps it on the
413
+ right. The switch says `On` or `Off` in so many words, because a tick means
414
+ nothing without the heading above the column, and the heading is the first
415
+ thing a reader scrolls past. */
416
+ .share-part {
417
+ display: flex;
418
+ flex-wrap: wrap;
419
+ align-items: center;
420
+ padding: 3px 0;
421
+ gap: 0 6px;
422
+ }
423
+
424
+ .share-part__label {
425
+ cursor: pointer;
426
+ font-weight: 500;
427
+ }
428
+
429
+ /* Pointing at a row marks it, so it is clear which of the nine is the one
430
+ drawn on the page beside it. */
431
+ .share-part:hover {
432
+ border-radius: var(--radius);
433
+ background: var(--surface-sunken);
434
+ box-shadow: 0 0 0 6px var(--surface-sunken);
435
+ }
436
+
437
+ /* The pill keeps the right edge, so the state of the whole page is one
438
+ vertical scan rather than a tick hunted for at the end of each label. */
439
+ .share-part__switch.bp6-control {
440
+ margin: 0 0 0 auto;
441
+ padding: 0;
442
+ }
443
+
444
+ .share-part__switch .bp6-control-indicator {
445
+ /* One width for both words, or the column shifts as rows are switched. */
446
+ min-width: 3.1em;
447
+ margin: 0;
448
+ }
449
+
450
+ /* On is the site's own colour, like every other thing that is current. */
451
+ .bp6-control.share-part__switch input:checked ~ .bp6-control-indicator {
452
+ background: var(--accent);
453
+ }
454
+
455
+ /* What switching the row off does, under the label it belongs to: a sentence
456
+ nobody has to hover for is a sentence that is read. */
457
+ .share-part__description {
458
+ flex: 1 0 100%;
459
+ margin: 0 0 2px;
460
+ color: var(--text-muted);
461
+ font-size: 12px;
462
+ line-height: 1.45;
463
+ }
464
+
465
+ /* The live page, laid out at the screen picked and scaled into the pane. */
466
+ .share-preview {
467
+ display: flex;
468
+ min-height: 0;
469
+ flex-direction: column;
470
+ padding-bottom: 12px;
471
+ gap: 8px;
472
+ }
473
+
474
+ /* The preview names itself: a page scaled into a pane otherwise reads as the
475
+ site, and a reader who takes it for the tool ticks a box in it and believes
476
+ the link now carries it. */
477
+ .share-preview__header {
478
+ display: flex;
479
+ flex: 0 0 auto;
480
+ align-items: center;
481
+ justify-content: space-between;
482
+ gap: 8px;
483
+ }
484
+
485
+ .share-preview__label.bp6-heading {
486
+ display: inline-flex;
487
+ align-items: center;
488
+ margin: 0;
489
+ gap: 5px;
490
+ }
491
+
492
+ .share-preview__devices.bp6-button-group {
493
+ flex: 0 0 auto;
494
+ }
495
+
496
+ /* The desk the window sits on: a shade deeper than the page behind it, so the
497
+ frame reads as a screen rather than as the dialog's own background. */
498
+ .share-preview__stage {
499
+ display: flex;
500
+ overflow: auto;
501
+ min-height: 0;
502
+ flex: 1 1 auto;
503
+ align-items: flex-start;
504
+ justify-content: center;
505
+ padding: 12px;
506
+ border: 1px solid var(--border);
507
+ border-radius: var(--radius);
508
+ background: color-mix(in oklab, var(--text) 14%, var(--surface-sunken));
509
+ }
510
+
511
+ /* The window the page is shown in: its own bar, then the page under it. It
512
+ keeps the room its scaled frame takes, so a phone reads as a phone on the
513
+ stage rather than as a column of empty grey beside it. */
514
+ .share-preview__device {
515
+ overflow: hidden;
516
+ flex: 0 0 auto;
517
+ border: 1px solid var(--border-strong);
518
+ border-radius: 6px;
519
+ background: var(--surface);
520
+ box-shadow: var(--shadow-md);
521
+ }
522
+
523
+ .share-preview__chrome {
524
+ display: flex;
525
+ height: 25px;
526
+ align-items: center;
527
+ padding: 0 8px;
528
+ border-bottom: 1px solid var(--border);
529
+ background: var(--surface-sunken);
530
+ color: var(--text-muted);
531
+ font-size: 11px;
532
+ gap: 6px;
533
+ }
534
+
535
+ .share-preview__address {
536
+ overflow: hidden;
537
+ flex: 1 1 auto;
538
+ text-overflow: ellipsis;
539
+ white-space: nowrap;
540
+ }
541
+
542
+ .share-preview__size {
543
+ flex: 0 0 auto;
544
+ font-variant-numeric: tabular-nums;
545
+ }
546
+
547
+ .share-preview__page {
548
+ position: relative;
549
+ overflow: hidden;
550
+ background: var(--surface);
551
+ }
552
+
553
+ /* What the row under the pointer names, drawn on the page itself: a list of
554
+ nine nouns is a list the reader has to map onto a page they can already
555
+ see. It is a mark, never a target — the preview stays the live page. */
556
+ .share-preview__region {
557
+ position: absolute;
558
+ border: 2px solid var(--accent);
559
+ border-radius: 4px;
560
+ background: color-mix(in oklab, var(--accent) 14%, transparent);
561
+ box-shadow: 0 0 0 9999px rgb(16 32 48 / 28%);
562
+ pointer-events: none;
563
+ }
564
+
565
+ .share-preview__region-name {
566
+ position: absolute;
567
+ top: -1px;
568
+ left: -1px;
569
+ padding: 1px 6px;
570
+ border-radius: 4px 0;
571
+ background: var(--accent);
572
+ color: var(--surface);
573
+ font-size: 11px;
574
+ font-weight: 600;
575
+ white-space: nowrap;
576
+ }
577
+
578
+ /* The dialog is dragged larger when a page needs the room: a tool a teacher
579
+ frames at 1920 is one they check at 1920. */
580
+ .share-dialog.bp6-dialog {
581
+ overflow: hidden;
582
+ min-width: 480px;
583
+ min-height: 420px;
584
+ max-width: 98vw;
585
+ max-height: 96dvh;
586
+ resize: both;
587
+ }
588
+
589
+ /* The ready-made links run the width of the dialog, above both panes: the
590
+ choice governs the preview as much as the switches, and in a third of the
591
+ width four tabs wrap onto a second row. A dialog narrow enough that they
592
+ still do not fit wraps rather than hiding the last of them. */
338
593
  .share-presets > .bp6-tab-list {
339
594
  flex-wrap: wrap;
340
595
  row-gap: 4px;
341
- box-shadow: inset 0 -1px 0 var(--border);
342
596
  }
343
597
 
344
- .share-presets > .bp6-tab-panel {
598
+ /* The sentence saying what the open preset hands out, where the switches are
599
+ when none is. */
600
+ .share-dialog__preset {
601
+ margin-top: 0;
602
+ color: var(--text-muted);
603
+ }
604
+
605
+ /* The structure export dialog: the picture of the structure on the left, with
606
+ the resolution it leaves at, and every notation of it stacked on the right. */
607
+ .structure-export__body {
608
+ padding: 12px 16px 16px;
609
+ }
610
+
611
+ .structure-export__panes {
612
+ display: grid;
613
+ gap: 20px;
614
+ grid-template-columns: minmax(0, 15rem) minmax(0, 1fr);
615
+ }
616
+
617
+ /* The picture holds its place while the notations scroll past it: what is
618
+ being exported has to stay on screen while the molfile beside it is read. */
619
+ .structure-export__picture {
620
+ position: sticky;
621
+ top: 0;
622
+ display: flex;
623
+ flex-direction: column;
624
+ align-self: start;
625
+ align-items: flex-start;
626
+ gap: 8px;
627
+ }
628
+
629
+ /* The preview is the file: the very SVG the save button writes, laid out
630
+ smaller. A box of a fixed height rather than one that follows the drawing,
631
+ so a tall molecule does not push the resolution and the buttons under it off
632
+ the dialog — the structure is centred in it at whatever shape it has. */
633
+ .structure-export__stage {
634
+ display: block;
635
+ width: 100%;
636
+ height: 10rem;
637
+ box-sizing: border-box;
638
+ padding: 6px;
639
+ border: 1px solid var(--border);
640
+ border-radius: var(--radius);
641
+ background: var(--surface);
642
+ object-fit: contain;
643
+ }
644
+
645
+ .structure-export__row {
646
+ display: flex;
647
+ flex-wrap: wrap;
648
+ align-items: center;
649
+ gap: 8px;
650
+ }
651
+
652
+ /* Two columns, so the three buttons are one size: a row of buttons whose
653
+ widths are set by the length of their labels reads as three unrelated
654
+ controls. */
655
+ .structure-export__actions {
656
+ display: grid;
657
+ margin-top: 2px;
658
+ gap: 6px;
659
+ grid-template-columns: repeat(2, minmax(0, 1fr));
660
+ }
661
+
662
+ /* One notation per row, with enough air between them that a molfile's block
663
+ does not read as part of the row under it. */
664
+ .structure-export__notations {
665
+ display: flex;
666
+ flex-direction: column;
667
+ gap: 14px;
668
+ }
669
+
670
+ .structure-export__identifiers {
671
+ padding-top: 6px;
672
+ border-top: 1px solid var(--border);
673
+ }
674
+
675
+ /* The folded identifiers are rows like the ones above them, so they keep the
676
+ same rhythm once the section is open. */
677
+ .structure-export__identifiers
678
+ .structure-export__notation
679
+ + .structure-export__notation {
345
680
  margin-top: 12px;
346
681
  }
347
682
 
683
+ /* Below this the two panes stop fitting side by side, and the picture — the
684
+ thing being exported — stays first. */
685
+ @media (max-width: 44rem) {
686
+ .structure-export__panes {
687
+ grid-template-columns: minmax(0, 1fr);
688
+ }
689
+ }
690
+
348
691
  /* ── A narrow bar ────────────────────────────────────────────────────────── */
349
692
 
350
693
  /* The menu the pages fold into, drawn only once they no longer fit. */
@@ -564,12 +907,6 @@ select,
564
907
  white-space: nowrap;
565
908
  }
566
909
 
567
- @media print {
568
- .click-to-copy__icon {
569
- display: none;
570
- }
571
- }
572
-
573
910
  /* ── Range slider ────────────────────────────────────────────────────────── */
574
911
 
575
912
  .range-slider {
@@ -732,12 +1069,24 @@ select,
732
1069
  }
733
1070
 
734
1071
  /*
1072
+ A card holding a picture — a structure, a grid of them — at the one measure
1073
+ below would show it at a third of its size. It keeps every other property of
1074
+ the card and takes a wider measure, so the two still read as one thing.
1075
+ */
1076
+ .help-tooltip--wide .bp6-popover-content {
1077
+ width: 460px;
1078
+ }
1079
+
1080
+ /*
1081
+ The selector is `.bp6-popover`, which a tooltip carries too, so a card opened
1082
+ by a popover — a row of a cheatsheet, a preview — is the same card.
1083
+
735
1084
  Blueprint opens a tooltip by transitioning it from `scale(0.8)`, and under
736
1085
  React 19 that transition is created but never ticks: it sits at time zero for
737
1086
  as long as the card is open, so the card and its type stay at four fifths of
738
1087
  the size they were drawn at. Help opens without an animation instead.
739
1088
  */
740
- .help-tooltip.bp6-tooltip {
1089
+ .help-tooltip.bp6-popover {
741
1090
  border-radius: var(--radius);
742
1091
  box-shadow: var(--shadow-md);
743
1092
  transform: scale(1);
@@ -758,7 +1107,38 @@ select,
758
1107
  box-shadow: none;
759
1108
  }
760
1109
 
761
- .help-tooltip .help-body a {
1110
+ /*
1111
+ Blueprint styles a tooltip's contents as if the plate under them were dark:
1112
+ `.bp6-tooltip .bp6-key` is a near-black cap, muted and disabled text are set
1113
+ in light greys, a link is pale blue, and inline code is white on a wash. None
1114
+ of that is readable on this card, and a component that writes a key cap or a
1115
+ muted line has no way of knowing it is in a tooltip. So the card puts them
1116
+ back on the light ground here, once, for everything it ever holds.
1117
+ */
1118
+ .help-tooltip .bp6-text-muted {
1119
+ color: var(--text-muted);
1120
+ }
1121
+
1122
+ .help-tooltip .bp6-text-disabled {
1123
+ color: var(--text-faint);
1124
+ }
1125
+
1126
+ .help-tooltip .bp6-key,
1127
+ .help-tooltip .bp6-running-text kbd {
1128
+ border: 1px solid var(--border-strong);
1129
+ background: var(--surface);
1130
+ box-shadow: none;
1131
+ color: var(--text-muted);
1132
+ }
1133
+
1134
+ .help-tooltip .bp6-code,
1135
+ .help-tooltip .bp6-running-text code {
1136
+ background: var(--surface-sunken);
1137
+ box-shadow: none;
1138
+ color: var(--text);
1139
+ }
1140
+
1141
+ .help-tooltip a {
762
1142
  color: var(--accent);
763
1143
  }
764
1144
 
@@ -778,9 +1158,29 @@ select,
778
1158
 
779
1159
  /* ── Printing ────────────────────────────────────────────────────────────── */
780
1160
 
781
- /* Students print the cheatsheet. Let them, without the chrome. */
1161
+ /*
1162
+ A printed page carries no control. A question mark nobody can hover, a button
1163
+ that copies, saves or shares, a stepper's two arrows: each says nothing on
1164
+ paper, and each costs a line of the thing that was printed. So every control
1165
+ the family ships keeps itself off a print — by one of the classes named here,
1166
+ or by carrying `no-print` — and a site marks its own with that same class. No
1167
+ site writes a print rule of its own.
1168
+
1169
+ What does print is whatever carries a value: a field and the number in it, a
1170
+ toggle saying which option is on, a legend, a caption, a table. Hiding one of
1171
+ those takes information off the page, which is the opposite of the rule.
1172
+
1173
+ Each class is written three times on purpose. How the glyph sits in its row
1174
+ is the site's business, so a site may legitimately lay it out with a compound
1175
+ selector of its own — `.help-icon.bp6-popover-target`, which is how Blueprint
1176
+ has to be out-specified — and `!important` on one class would then lose the
1177
+ tie to a stylesheet that is imported after this one. Three classes outrank
1178
+ any such rule, so the print behaviour does not depend on import order.
1179
+ */
782
1180
  @media print {
783
- .no-print {
1181
+ .no-print.no-print.no-print,
1182
+ .help-icon.help-icon.help-icon,
1183
+ .click-to-copy__icon.click-to-copy__icon.click-to-copy__icon {
784
1184
  display: none !important;
785
1185
  }
786
1186
  }