react-cheminfo 0.3.0 → 0.4.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 (806) hide show
  1. package/README.md +111 -23
  2. package/lib/capsule/ui/CapsuleFilter.d.ts +61 -0
  3. package/lib/capsule/ui/CapsuleFilter.d.ts.map +1 -0
  4. package/lib/capsule/ui/CapsuleFilter.js +33 -0
  5. package/lib/capsule/ui/CapsuleFilter.js.map +1 -0
  6. package/lib/capsule/ui/index.d.ts +3 -0
  7. package/lib/capsule/ui/index.d.ts.map +1 -0
  8. package/lib/capsule/ui/index.js +2 -0
  9. package/lib/capsule/ui/index.js.map +1 -0
  10. package/lib/chrome/ui/NavLink.d.ts +27 -0
  11. package/lib/chrome/ui/NavLink.d.ts.map +1 -0
  12. package/lib/chrome/ui/NavLink.js +36 -0
  13. package/lib/chrome/ui/NavLink.js.map +1 -0
  14. package/lib/chrome/ui/NavMenuButton.d.ts +40 -0
  15. package/lib/chrome/ui/NavMenuButton.d.ts.map +1 -0
  16. package/lib/chrome/ui/NavMenuButton.js +26 -0
  17. package/lib/chrome/ui/NavMenuButton.js.map +1 -0
  18. package/lib/chrome/ui/SiteFooter.d.ts +39 -0
  19. package/lib/chrome/ui/SiteFooter.d.ts.map +1 -0
  20. package/lib/chrome/ui/SiteFooter.js +17 -0
  21. package/lib/chrome/ui/SiteFooter.js.map +1 -0
  22. package/lib/chrome/ui/SiteHeader.d.ts +59 -0
  23. package/lib/chrome/ui/SiteHeader.d.ts.map +1 -0
  24. package/lib/chrome/ui/SiteHeader.js +28 -0
  25. package/lib/chrome/ui/SiteHeader.js.map +1 -0
  26. package/lib/chrome/ui/index.d.ts +12 -0
  27. package/lib/chrome/ui/index.d.ts.map +1 -0
  28. package/lib/chrome/ui/index.js +6 -0
  29. package/lib/chrome/ui/index.js.map +1 -0
  30. package/lib/chrome/ui/navItem.d.ts +57 -0
  31. package/lib/chrome/ui/navItem.d.ts.map +1 -0
  32. package/lib/chrome/ui/navItem.js +10 -0
  33. package/lib/chrome/ui/navItem.js.map +1 -0
  34. package/lib/chrome/ui/useCompactHeader.d.ts +31 -0
  35. package/lib/chrome/ui/useCompactHeader.d.ts.map +1 -0
  36. package/lib/chrome/ui/useCompactHeader.js +50 -0
  37. package/lib/chrome/ui/useCompactHeader.js.map +1 -0
  38. package/lib/citation/core/clipboard.d.ts +12 -3
  39. package/lib/citation/core/clipboard.d.ts.map +1 -1
  40. package/lib/citation/core/clipboard.js +21 -10
  41. package/lib/citation/core/clipboard.js.map +1 -1
  42. package/lib/citation/core/download.d.ts +11 -3
  43. package/lib/citation/core/download.d.ts.map +1 -1
  44. package/lib/citation/core/download.js +17 -13
  45. package/lib/citation/core/download.js.map +1 -1
  46. package/lib/citation/core/index.d.ts +4 -3
  47. package/lib/citation/core/index.d.ts.map +1 -1
  48. package/lib/citation/core/index.js +3 -3
  49. package/lib/citation/core/index.js.map +1 -1
  50. package/lib/citation/core/works.d.ts +44 -0
  51. package/lib/citation/core/works.d.ts.map +1 -0
  52. package/lib/citation/core/works.js +51 -0
  53. package/lib/citation/core/works.js.map +1 -0
  54. package/lib/citation/ui/CitationMenu.d.ts +20 -3
  55. package/lib/citation/ui/CitationMenu.d.ts.map +1 -1
  56. package/lib/citation/ui/CitationMenu.js +60 -49
  57. package/lib/citation/ui/CitationMenu.js.map +1 -1
  58. package/lib/citation/ui/CitationPreview.d.ts +5 -2
  59. package/lib/citation/ui/CitationPreview.d.ts.map +1 -1
  60. package/lib/citation/ui/CitationPreview.js +9 -4
  61. package/lib/citation/ui/CitationPreview.js.map +1 -1
  62. package/lib/citation/ui/CiteButton.d.ts +13 -6
  63. package/lib/citation/ui/CiteButton.d.ts.map +1 -1
  64. package/lib/citation/ui/CiteButton.js +5 -4
  65. package/lib/citation/ui/CiteButton.js.map +1 -1
  66. package/lib/citation/ui/CopyFormatEntries.d.ts +31 -0
  67. package/lib/citation/ui/CopyFormatEntries.d.ts.map +1 -0
  68. package/lib/citation/ui/CopyFormatEntries.js +29 -0
  69. package/lib/citation/ui/CopyFormatEntries.js.map +1 -0
  70. package/lib/citation/ui/WorkEntry.d.ts +18 -0
  71. package/lib/citation/ui/WorkEntry.d.ts.map +1 -0
  72. package/lib/citation/ui/WorkEntry.js +32 -0
  73. package/lib/citation/ui/WorkEntry.js.map +1 -0
  74. package/lib/citation/ui/entries.d.ts +7 -7
  75. package/lib/citation/ui/entries.d.ts.map +1 -1
  76. package/lib/citation/ui/entries.js +11 -13
  77. package/lib/citation/ui/entries.js.map +1 -1
  78. package/lib/citation/ui/index.d.ts +2 -2
  79. package/lib/citation/ui/index.d.ts.map +1 -1
  80. package/lib/citation/ui/index.js.map +1 -1
  81. package/lib/citation/ui/useCopyFeedback.d.ts +20 -0
  82. package/lib/citation/ui/useCopyFeedback.d.ts.map +1 -0
  83. package/lib/citation/ui/useCopyFeedback.js +49 -0
  84. package/lib/citation/ui/useCopyFeedback.js.map +1 -0
  85. package/lib/clipboard/core/index.d.ts +2 -0
  86. package/lib/clipboard/core/index.d.ts.map +1 -0
  87. package/lib/clipboard/core/index.js +2 -0
  88. package/lib/clipboard/core/index.js.map +1 -0
  89. package/lib/clipboard/core/writeToClipboard.d.ts +12 -0
  90. package/lib/clipboard/core/writeToClipboard.d.ts.map +1 -0
  91. package/lib/clipboard/core/writeToClipboard.js +49 -0
  92. package/lib/clipboard/core/writeToClipboard.js.map +1 -0
  93. package/lib/clipboard/ui/CodeBlock.d.ts +43 -0
  94. package/lib/clipboard/ui/CodeBlock.d.ts.map +1 -0
  95. package/lib/clipboard/ui/CodeBlock.js +49 -0
  96. package/lib/clipboard/ui/CodeBlock.js.map +1 -0
  97. package/lib/clipboard/ui/CopyButton.d.ts +64 -0
  98. package/lib/clipboard/ui/CopyButton.d.ts.map +1 -0
  99. package/lib/clipboard/ui/CopyButton.js +21 -0
  100. package/lib/clipboard/ui/CopyButton.js.map +1 -0
  101. package/lib/clipboard/ui/index.d.ts +7 -0
  102. package/lib/clipboard/ui/index.d.ts.map +1 -0
  103. package/lib/clipboard/ui/index.js +4 -0
  104. package/lib/clipboard/ui/index.js.map +1 -0
  105. package/lib/clipboard/ui/useCopyToClipboard.d.ts +24 -0
  106. package/lib/clipboard/ui/useCopyToClipboard.d.ts.map +1 -0
  107. package/lib/clipboard/ui/useCopyToClipboard.js +36 -0
  108. package/lib/clipboard/ui/useCopyToClipboard.js.map +1 -0
  109. package/lib/color/core/contrast.d.ts +43 -0
  110. package/lib/color/core/contrast.d.ts.map +1 -0
  111. package/lib/color/core/contrast.js +61 -0
  112. package/lib/color/core/contrast.js.map +1 -0
  113. package/lib/color/core/hex.d.ts +26 -0
  114. package/lib/color/core/hex.d.ts.map +1 -0
  115. package/lib/color/core/hex.js +44 -0
  116. package/lib/color/core/hex.js.map +1 -0
  117. package/lib/color/core/index.d.ts +5 -0
  118. package/lib/color/core/index.d.ts.map +1 -0
  119. package/lib/color/core/index.js +3 -0
  120. package/lib/color/core/index.js.map +1 -0
  121. package/lib/color/core/scale.d.ts +52 -0
  122. package/lib/color/core/scale.d.ts.map +1 -0
  123. package/lib/color/core/scale.js +96 -0
  124. package/lib/color/core/scale.js.map +1 -0
  125. package/lib/color/ui/ColorScaleLegend.d.ts +38 -0
  126. package/lib/color/ui/ColorScaleLegend.d.ts.map +1 -0
  127. package/lib/color/ui/ColorScaleLegend.js +68 -0
  128. package/lib/color/ui/ColorScaleLegend.js.map +1 -0
  129. package/lib/color/ui/index.d.ts +3 -0
  130. package/lib/color/ui/index.d.ts.map +1 -0
  131. package/lib/color/ui/index.js +2 -0
  132. package/lib/color/ui/index.js.map +1 -0
  133. package/lib/core.d.ts +11 -0
  134. package/lib/core.d.ts.map +1 -1
  135. package/lib/core.js +11 -0
  136. package/lib/core.js.map +1 -1
  137. package/lib/credits/core/credits.d.ts +144 -0
  138. package/lib/credits/core/credits.d.ts.map +1 -0
  139. package/lib/credits/core/credits.js +156 -0
  140. package/lib/credits/core/credits.js.map +1 -0
  141. package/lib/credits/core/index.d.ts +3 -0
  142. package/lib/credits/core/index.d.ts.map +1 -0
  143. package/lib/credits/core/index.js +2 -0
  144. package/lib/credits/core/index.js.map +1 -0
  145. package/lib/credits/ui/CreditsList.d.ts +29 -0
  146. package/lib/credits/ui/CreditsList.d.ts.map +1 -0
  147. package/lib/credits/ui/CreditsList.js +33 -0
  148. package/lib/credits/ui/CreditsList.js.map +1 -0
  149. package/lib/credits/ui/index.d.ts +3 -0
  150. package/lib/credits/ui/index.d.ts.map +1 -0
  151. package/lib/credits/ui/index.js +2 -0
  152. package/lib/credits/ui/index.js.map +1 -0
  153. package/lib/delimited/core/delimiters.d.ts +31 -0
  154. package/lib/delimited/core/delimiters.d.ts.map +1 -0
  155. package/lib/delimited/core/delimiters.js +46 -0
  156. package/lib/delimited/core/delimiters.js.map +1 -0
  157. package/lib/delimited/core/index.d.ts +9 -0
  158. package/lib/delimited/core/index.d.ts.map +1 -0
  159. package/lib/delimited/core/index.js +5 -0
  160. package/lib/delimited/core/index.js.map +1 -0
  161. package/lib/delimited/core/readDelimited.d.ts +32 -0
  162. package/lib/delimited/core/readDelimited.d.ts.map +1 -0
  163. package/lib/delimited/core/readDelimited.js +122 -0
  164. package/lib/delimited/core/readDelimited.js.map +1 -0
  165. package/lib/delimited/core/rowsToDelimited.d.ts +59 -0
  166. package/lib/delimited/core/rowsToDelimited.d.ts.map +1 -0
  167. package/lib/delimited/core/rowsToDelimited.js +87 -0
  168. package/lib/delimited/core/rowsToDelimited.js.map +1 -0
  169. package/lib/delimited/core/toDelimited.d.ts +38 -0
  170. package/lib/delimited/core/toDelimited.d.ts.map +1 -0
  171. package/lib/delimited/core/toDelimited.js +45 -0
  172. package/lib/delimited/core/toDelimited.js.map +1 -0
  173. package/lib/delimited/ui/DelimitedTextDialog.d.ts +22 -0
  174. package/lib/delimited/ui/DelimitedTextDialog.d.ts.map +1 -0
  175. package/lib/delimited/ui/DelimitedTextDialog.js +17 -0
  176. package/lib/delimited/ui/DelimitedTextDialog.js.map +1 -0
  177. package/lib/delimited/ui/DelimitedTextPanel.d.ts +56 -0
  178. package/lib/delimited/ui/DelimitedTextPanel.d.ts.map +1 -0
  179. package/lib/delimited/ui/DelimitedTextPanel.js +55 -0
  180. package/lib/delimited/ui/DelimitedTextPanel.js.map +1 -0
  181. package/lib/delimited/ui/index.d.ts +5 -0
  182. package/lib/delimited/ui/index.d.ts.map +1 -0
  183. package/lib/delimited/ui/index.js +3 -0
  184. package/lib/delimited/ui/index.js.map +1 -0
  185. package/lib/disclosure/ui/CollapsibleSection.d.ts +57 -0
  186. package/lib/disclosure/ui/CollapsibleSection.d.ts.map +1 -0
  187. package/lib/disclosure/ui/CollapsibleSection.js +60 -0
  188. package/lib/disclosure/ui/CollapsibleSection.js.map +1 -0
  189. package/lib/disclosure/ui/index.d.ts +5 -0
  190. package/lib/disclosure/ui/index.d.ts.map +1 -0
  191. package/lib/disclosure/ui/index.js +3 -0
  192. package/lib/disclosure/ui/index.js.map +1 -0
  193. package/lib/disclosure/ui/useDisclosure.d.ts +22 -0
  194. package/lib/disclosure/ui/useDisclosure.d.ts.map +1 -0
  195. package/lib/disclosure/ui/useDisclosure.js +18 -0
  196. package/lib/disclosure/ui/useDisclosure.js.map +1 -0
  197. package/lib/download/core/downloadBlob.d.ts +10 -0
  198. package/lib/download/core/downloadBlob.d.ts.map +1 -0
  199. package/lib/download/core/downloadBlob.js +20 -0
  200. package/lib/download/core/downloadBlob.js.map +1 -0
  201. package/lib/download/core/downloadText.d.ts +9 -0
  202. package/lib/download/core/downloadText.d.ts.map +1 -0
  203. package/lib/download/core/downloadText.js +14 -0
  204. package/lib/download/core/downloadText.js.map +1 -0
  205. package/lib/download/core/index.d.ts +4 -0
  206. package/lib/download/core/index.d.ts.map +1 -0
  207. package/lib/download/core/index.js +4 -0
  208. package/lib/download/core/index.js.map +1 -0
  209. package/lib/download/core/sanitizeFileName.d.ts +15 -0
  210. package/lib/download/core/sanitizeFileName.d.ts.map +1 -0
  211. package/lib/download/core/sanitizeFileName.js +33 -0
  212. package/lib/download/core/sanitizeFileName.js.map +1 -0
  213. package/lib/ecosystem/core/index.d.ts +3 -0
  214. package/lib/ecosystem/core/index.d.ts.map +1 -1
  215. package/lib/ecosystem/core/index.js +3 -0
  216. package/lib/ecosystem/core/index.js.map +1 -1
  217. package/lib/ecosystem/core/links.d.ts +11 -0
  218. package/lib/ecosystem/core/links.d.ts.map +1 -0
  219. package/lib/ecosystem/core/links.js +28 -0
  220. package/lib/ecosystem/core/links.js.map +1 -0
  221. package/lib/ecosystem/core/lookup.d.ts +21 -0
  222. package/lib/ecosystem/core/lookup.d.ts.map +1 -0
  223. package/lib/ecosystem/core/lookup.js +40 -0
  224. package/lib/ecosystem/core/lookup.js.map +1 -0
  225. package/lib/ecosystem/core/sites.d.ts +2 -0
  226. package/lib/ecosystem/core/sites.d.ts.map +1 -1
  227. package/lib/ecosystem/core/sites.js +15 -0
  228. package/lib/ecosystem/core/sites.js.map +1 -1
  229. package/lib/ecosystem/core/tokens.d.ts +21 -0
  230. package/lib/ecosystem/core/tokens.d.ts.map +1 -0
  231. package/lib/ecosystem/core/tokens.js +42 -0
  232. package/lib/ecosystem/core/tokens.js.map +1 -0
  233. package/lib/ecosystem/ui/SiteTheme.d.ts +18 -0
  234. package/lib/ecosystem/ui/SiteTheme.d.ts.map +1 -0
  235. package/lib/ecosystem/ui/SiteTheme.js +16 -0
  236. package/lib/ecosystem/ui/SiteTheme.js.map +1 -0
  237. package/lib/ecosystem/ui/Wordmark.d.ts +30 -0
  238. package/lib/ecosystem/ui/Wordmark.d.ts.map +1 -0
  239. package/lib/ecosystem/ui/Wordmark.js +26 -0
  240. package/lib/ecosystem/ui/Wordmark.js.map +1 -0
  241. package/lib/ecosystem/ui/index.d.ts +4 -0
  242. package/lib/ecosystem/ui/index.d.ts.map +1 -1
  243. package/lib/ecosystem/ui/index.js +2 -0
  244. package/lib/ecosystem/ui/index.js.map +1 -1
  245. package/lib/ecosystem/ui/marks.d.ts +30 -4
  246. package/lib/ecosystem/ui/marks.d.ts.map +1 -1
  247. package/lib/ecosystem/ui/marks.js +13 -3
  248. package/lib/ecosystem/ui/marks.js.map +1 -1
  249. package/lib/error/ui/ErrorBoundary.d.ts +60 -0
  250. package/lib/error/ui/ErrorBoundary.d.ts.map +1 -0
  251. package/lib/error/ui/ErrorBoundary.js +59 -0
  252. package/lib/error/ui/ErrorBoundary.js.map +1 -0
  253. package/lib/error/ui/ErrorFallback.d.ts +38 -0
  254. package/lib/error/ui/ErrorFallback.d.ts.map +1 -0
  255. package/lib/error/ui/ErrorFallback.js +16 -0
  256. package/lib/error/ui/ErrorFallback.js.map +1 -0
  257. package/lib/error/ui/index.d.ts +5 -0
  258. package/lib/error/ui/index.d.ts.map +1 -0
  259. package/lib/error/ui/index.js +3 -0
  260. package/lib/error/ui/index.js.map +1 -0
  261. package/lib/error/ui/toError.d.ts +11 -0
  262. package/lib/error/ui/toError.d.ts.map +1 -0
  263. package/lib/error/ui/toError.js +35 -0
  264. package/lib/error/ui/toError.js.map +1 -0
  265. package/lib/format/core/index.d.ts +5 -0
  266. package/lib/format/core/index.d.ts.map +1 -0
  267. package/lib/format/core/index.js +5 -0
  268. package/lib/format/core/index.js.map +1 -0
  269. package/lib/format/core/missing.d.ts +7 -0
  270. package/lib/format/core/missing.d.ts.map +1 -0
  271. package/lib/format/core/missing.js +7 -0
  272. package/lib/format/core/missing.js.map +1 -0
  273. package/lib/format/core/numbers.d.ts +40 -0
  274. package/lib/format/core/numbers.d.ts.map +1 -0
  275. package/lib/format/core/numbers.js +81 -0
  276. package/lib/format/core/numbers.js.map +1 -0
  277. package/lib/format/core/units.d.ts +17 -0
  278. package/lib/format/core/units.d.ts.map +1 -0
  279. package/lib/format/core/units.js +54 -0
  280. package/lib/format/core/units.js.map +1 -0
  281. package/lib/format/core/words.d.ts +12 -0
  282. package/lib/format/core/words.d.ts.map +1 -0
  283. package/lib/format/core/words.js +14 -0
  284. package/lib/format/core/words.js.map +1 -0
  285. package/lib/help/ui/HelpBody.d.ts +57 -0
  286. package/lib/help/ui/HelpBody.d.ts.map +1 -0
  287. package/lib/help/ui/HelpBody.js +44 -0
  288. package/lib/help/ui/HelpBody.js.map +1 -0
  289. package/lib/help/ui/HelpIcon.d.ts +33 -0
  290. package/lib/help/ui/HelpIcon.d.ts.map +1 -0
  291. package/lib/help/ui/HelpIcon.js +16 -0
  292. package/lib/help/ui/HelpIcon.js.map +1 -0
  293. package/lib/help/ui/HelpToolbarButton.d.ts +45 -0
  294. package/lib/help/ui/HelpToolbarButton.d.ts.map +1 -0
  295. package/lib/help/ui/HelpToolbarButton.js +17 -0
  296. package/lib/help/ui/HelpToolbarButton.js.map +1 -0
  297. package/lib/help/ui/HelpTooltip.d.ts +36 -0
  298. package/lib/help/ui/HelpTooltip.d.ts.map +1 -0
  299. package/lib/help/ui/HelpTooltip.js +24 -0
  300. package/lib/help/ui/HelpTooltip.js.map +1 -0
  301. package/lib/help/ui/index.d.ts +9 -0
  302. package/lib/help/ui/index.d.ts.map +1 -0
  303. package/lib/help/ui/index.js +5 -0
  304. package/lib/help/ui/index.js.map +1 -0
  305. package/lib/hooks/ui/index.d.ts +7 -0
  306. package/lib/hooks/ui/index.d.ts.map +1 -0
  307. package/lib/hooks/ui/index.js +5 -0
  308. package/lib/hooks/ui/index.js.map +1 -0
  309. package/lib/hooks/ui/listNavigation.d.ts +54 -0
  310. package/lib/hooks/ui/listNavigation.d.ts.map +1 -0
  311. package/lib/hooks/ui/listNavigation.js +77 -0
  312. package/lib/hooks/ui/listNavigation.js.map +1 -0
  313. package/lib/hooks/ui/useContainerSize.d.ts +15 -0
  314. package/lib/hooks/ui/useContainerSize.d.ts.map +1 -0
  315. package/lib/hooks/ui/useContainerSize.js +24 -0
  316. package/lib/hooks/ui/useContainerSize.js.map +1 -0
  317. package/lib/hooks/ui/useDebouncedValue.d.ts +12 -0
  318. package/lib/hooks/ui/useDebouncedValue.d.ts.map +1 -0
  319. package/lib/hooks/ui/useDebouncedValue.js +24 -0
  320. package/lib/hooks/ui/useDebouncedValue.js.map +1 -0
  321. package/lib/hooks/ui/useListKeyboardNavigation.d.ts +17 -0
  322. package/lib/hooks/ui/useListKeyboardNavigation.d.ts.map +1 -0
  323. package/lib/hooks/ui/useListKeyboardNavigation.js +25 -0
  324. package/lib/hooks/ui/useListKeyboardNavigation.js.map +1 -0
  325. package/lib/hooks/ui/useResizeObserver.d.ts +20 -0
  326. package/lib/hooks/ui/useResizeObserver.d.ts.map +1 -0
  327. package/lib/hooks/ui/useResizeObserver.js +37 -0
  328. package/lib/hooks/ui/useResizeObserver.js.map +1 -0
  329. package/lib/orbital/core/atomicGrid.d.ts +27 -0
  330. package/lib/orbital/core/atomicGrid.d.ts.map +1 -1
  331. package/lib/orbital/core/atomicGrid.js +37 -1
  332. package/lib/orbital/core/atomicGrid.js.map +1 -1
  333. package/lib/orbital/core/index.d.ts +9 -7
  334. package/lib/orbital/core/index.d.ts.map +1 -1
  335. package/lib/orbital/core/index.js +7 -6
  336. package/lib/orbital/core/index.js.map +1 -1
  337. package/lib/orbital/core/isovalue.d.ts +60 -0
  338. package/lib/orbital/core/isovalue.d.ts.map +1 -0
  339. package/lib/orbital/core/isovalue.js +128 -0
  340. package/lib/orbital/core/isovalue.js.map +1 -0
  341. package/lib/orbital/core/sample.d.ts +15 -1
  342. package/lib/orbital/core/sample.d.ts.map +1 -1
  343. package/lib/orbital/core/sample.js +10 -3
  344. package/lib/orbital/core/sample.js.map +1 -1
  345. package/lib/orbital/ui/AtomicOrbitalCanvas.d.ts +6 -1
  346. package/lib/orbital/ui/AtomicOrbitalCanvas.d.ts.map +1 -1
  347. package/lib/orbital/ui/AtomicOrbitalCanvas.js +12 -2
  348. package/lib/orbital/ui/AtomicOrbitalCanvas.js.map +1 -1
  349. package/lib/orbital/ui/AtomicOrbitalViewer.d.ts +5 -1
  350. package/lib/orbital/ui/AtomicOrbitalViewer.d.ts.map +1 -1
  351. package/lib/orbital/ui/AtomicOrbitalViewer.js.map +1 -1
  352. package/lib/orbital/ui/renderVolume.d.ts +6 -3
  353. package/lib/orbital/ui/renderVolume.d.ts.map +1 -1
  354. package/lib/orbital/ui/renderVolume.js +14 -15
  355. package/lib/orbital/ui/renderVolume.js.map +1 -1
  356. package/lib/orbital/ui/viewer.d.ts +3 -1
  357. package/lib/orbital/ui/viewer.d.ts.map +1 -1
  358. package/lib/orbital/ui/viewer.js +3 -2
  359. package/lib/orbital/ui/viewer.js.map +1 -1
  360. package/lib/orbital/ui/volumeField.d.ts +5 -21
  361. package/lib/orbital/ui/volumeField.d.ts.map +1 -1
  362. package/lib/orbital/ui/volumeField.js +5 -45
  363. package/lib/orbital/ui/volumeField.js.map +1 -1
  364. package/lib/pedagogy/core/glossary.d.ts +79 -0
  365. package/lib/pedagogy/core/glossary.d.ts.map +1 -0
  366. package/lib/pedagogy/core/glossary.js +71 -0
  367. package/lib/pedagogy/core/glossary.js.map +1 -0
  368. package/lib/pedagogy/core/index.d.ts +8 -0
  369. package/lib/pedagogy/core/index.d.ts.map +1 -0
  370. package/lib/pedagogy/core/index.js +4 -0
  371. package/lib/pedagogy/core/index.js.map +1 -0
  372. package/lib/pedagogy/core/jsonStorage.d.ts +21 -0
  373. package/lib/pedagogy/core/jsonStorage.d.ts.map +1 -0
  374. package/lib/pedagogy/core/jsonStorage.js +55 -0
  375. package/lib/pedagogy/core/jsonStorage.js.map +1 -0
  376. package/lib/pedagogy/core/progress.d.ts +116 -0
  377. package/lib/pedagogy/core/progress.d.ts.map +1 -0
  378. package/lib/pedagogy/core/progress.js +122 -0
  379. package/lib/pedagogy/core/progress.js.map +1 -0
  380. package/lib/pedagogy/core/types.d.ts +74 -0
  381. package/lib/pedagogy/core/types.d.ts.map +1 -0
  382. package/lib/pedagogy/core/types.js +8 -0
  383. package/lib/pedagogy/core/types.js.map +1 -0
  384. package/lib/pedagogy/core/validation.d.ts +79 -0
  385. package/lib/pedagogy/core/validation.d.ts.map +1 -0
  386. package/lib/pedagogy/core/validation.js +47 -0
  387. package/lib/pedagogy/core/validation.js.map +1 -0
  388. package/lib/pedagogy/ui/ExerciseActions.d.ts +74 -0
  389. package/lib/pedagogy/ui/ExerciseActions.d.ts.map +1 -0
  390. package/lib/pedagogy/ui/ExerciseActions.js +22 -0
  391. package/lib/pedagogy/ui/ExerciseActions.js.map +1 -0
  392. package/lib/pedagogy/ui/ExerciseProgressHeader.d.ts +43 -0
  393. package/lib/pedagogy/ui/ExerciseProgressHeader.d.ts.map +1 -0
  394. package/lib/pedagogy/ui/ExerciseProgressHeader.js +43 -0
  395. package/lib/pedagogy/ui/ExerciseProgressHeader.js.map +1 -0
  396. package/lib/pedagogy/ui/ExerciseTags.d.ts +49 -0
  397. package/lib/pedagogy/ui/ExerciseTags.d.ts.map +1 -0
  398. package/lib/pedagogy/ui/ExerciseTags.js +22 -0
  399. package/lib/pedagogy/ui/ExerciseTags.js.map +1 -0
  400. package/lib/pedagogy/ui/GlossaryProvider.d.ts +19 -0
  401. package/lib/pedagogy/ui/GlossaryProvider.d.ts.map +1 -0
  402. package/lib/pedagogy/ui/GlossaryProvider.js +16 -0
  403. package/lib/pedagogy/ui/GlossaryProvider.js.map +1 -0
  404. package/lib/pedagogy/ui/GlossaryText.d.ts +50 -0
  405. package/lib/pedagogy/ui/GlossaryText.d.ts.map +1 -0
  406. package/lib/pedagogy/ui/GlossaryText.js +79 -0
  407. package/lib/pedagogy/ui/GlossaryText.js.map +1 -0
  408. package/lib/pedagogy/ui/HintLadder.d.ts +38 -0
  409. package/lib/pedagogy/ui/HintLadder.d.ts.map +1 -0
  410. package/lib/pedagogy/ui/HintLadder.js +33 -0
  411. package/lib/pedagogy/ui/HintLadder.js.map +1 -0
  412. package/lib/pedagogy/ui/ReferenceGrid.d.ts +31 -0
  413. package/lib/pedagogy/ui/ReferenceGrid.d.ts.map +1 -0
  414. package/lib/pedagogy/ui/ReferenceGrid.js +25 -0
  415. package/lib/pedagogy/ui/ReferenceGrid.js.map +1 -0
  416. package/lib/pedagogy/ui/ReferenceSectionBlock.d.ts +64 -0
  417. package/lib/pedagogy/ui/ReferenceSectionBlock.d.ts.map +1 -0
  418. package/lib/pedagogy/ui/ReferenceSectionBlock.js +78 -0
  419. package/lib/pedagogy/ui/ReferenceSectionBlock.js.map +1 -0
  420. package/lib/pedagogy/ui/SyntaxTooltip.d.ts +94 -0
  421. package/lib/pedagogy/ui/SyntaxTooltip.d.ts.map +1 -0
  422. package/lib/pedagogy/ui/SyntaxTooltip.js +79 -0
  423. package/lib/pedagogy/ui/SyntaxTooltip.js.map +1 -0
  424. package/lib/pedagogy/ui/TestCaseList.d.ts +35 -0
  425. package/lib/pedagogy/ui/TestCaseList.d.ts.map +1 -0
  426. package/lib/pedagogy/ui/TestCaseList.js +63 -0
  427. package/lib/pedagogy/ui/TestCaseList.js.map +1 -0
  428. package/lib/pedagogy/ui/TutorialStepStrip.d.ts +42 -0
  429. package/lib/pedagogy/ui/TutorialStepStrip.d.ts.map +1 -0
  430. package/lib/pedagogy/ui/TutorialStepStrip.js +98 -0
  431. package/lib/pedagogy/ui/TutorialStepStrip.js.map +1 -0
  432. package/lib/pedagogy/ui/exerciseMeta.d.ts +24 -0
  433. package/lib/pedagogy/ui/exerciseMeta.d.ts.map +1 -0
  434. package/lib/pedagogy/ui/exerciseMeta.js +38 -0
  435. package/lib/pedagogy/ui/exerciseMeta.js.map +1 -0
  436. package/lib/pedagogy/ui/glossaryContext.d.ts +17 -0
  437. package/lib/pedagogy/ui/glossaryContext.d.ts.map +1 -0
  438. package/lib/pedagogy/ui/glossaryContext.js +19 -0
  439. package/lib/pedagogy/ui/glossaryContext.js.map +1 -0
  440. package/lib/pedagogy/ui/index.d.ts +27 -0
  441. package/lib/pedagogy/ui/index.d.ts.map +1 -0
  442. package/lib/pedagogy/ui/index.js +15 -0
  443. package/lib/pedagogy/ui/index.js.map +1 -0
  444. package/lib/pedagogy/ui/tutorialLevels.d.ts +18 -0
  445. package/lib/pedagogy/ui/tutorialLevels.d.ts.map +1 -0
  446. package/lib/pedagogy/ui/tutorialLevels.js +14 -0
  447. package/lib/pedagogy/ui/tutorialLevels.js.map +1 -0
  448. package/lib/router/core/address.d.ts +42 -0
  449. package/lib/router/core/address.d.ts.map +1 -0
  450. package/lib/router/core/address.js +64 -0
  451. package/lib/router/core/address.js.map +1 -0
  452. package/lib/router/core/basePath.d.ts +49 -0
  453. package/lib/router/core/basePath.d.ts.map +1 -0
  454. package/lib/router/core/basePath.js +78 -0
  455. package/lib/router/core/basePath.js.map +1 -0
  456. package/lib/router/core/index.d.ts +8 -0
  457. package/lib/router/core/index.d.ts.map +1 -0
  458. package/lib/router/core/index.js +5 -0
  459. package/lib/router/core/index.js.map +1 -0
  460. package/lib/router/core/legacyHash.d.ts +45 -0
  461. package/lib/router/core/legacyHash.d.ts.map +1 -0
  462. package/lib/router/core/legacyHash.js +50 -0
  463. package/lib/router/core/legacyHash.js.map +1 -0
  464. package/lib/router/core/pageAddresses.d.ts +50 -0
  465. package/lib/router/core/pageAddresses.d.ts.map +1 -0
  466. package/lib/router/core/pageAddresses.js +56 -0
  467. package/lib/router/core/pageAddresses.js.map +1 -0
  468. package/lib/router/core/query.d.ts +41 -0
  469. package/lib/router/core/query.d.ts.map +1 -0
  470. package/lib/router/core/query.js +64 -0
  471. package/lib/router/core/query.js.map +1 -0
  472. package/lib/router/core/tabRouter.d.ts +111 -0
  473. package/lib/router/core/tabRouter.d.ts.map +1 -0
  474. package/lib/router/core/tabRouter.js +87 -0
  475. package/lib/router/core/tabRouter.js.map +1 -0
  476. package/lib/seo/core/documentMeta.d.ts +45 -0
  477. package/lib/seo/core/documentMeta.d.ts.map +1 -0
  478. package/lib/seo/core/documentMeta.js +69 -0
  479. package/lib/seo/core/documentMeta.js.map +1 -0
  480. package/lib/seo/core/index.d.ts +3 -0
  481. package/lib/seo/core/index.d.ts.map +1 -0
  482. package/lib/seo/core/index.js +2 -0
  483. package/lib/seo/core/index.js.map +1 -0
  484. package/lib/share/core/config.d.ts +63 -0
  485. package/lib/share/core/config.d.ts.map +1 -0
  486. package/lib/share/core/config.js +125 -0
  487. package/lib/share/core/config.js.map +1 -0
  488. package/lib/share/core/escape.d.ts +15 -0
  489. package/lib/share/core/escape.d.ts.map +1 -0
  490. package/lib/share/core/escape.js +22 -0
  491. package/lib/share/core/escape.js.map +1 -0
  492. package/lib/share/core/index.d.ts +9 -0
  493. package/lib/share/core/index.d.ts.map +1 -0
  494. package/lib/share/core/index.js +5 -0
  495. package/lib/share/core/index.js.map +1 -0
  496. package/lib/share/core/params.d.ts +93 -0
  497. package/lib/share/core/params.d.ts.map +1 -0
  498. package/lib/share/core/params.js +111 -0
  499. package/lib/share/core/params.js.map +1 -0
  500. package/lib/share/core/query.d.ts +30 -0
  501. package/lib/share/core/query.d.ts.map +1 -0
  502. package/lib/share/core/query.js +68 -0
  503. package/lib/share/core/query.js.map +1 -0
  504. package/lib/share/core/url.d.ts +57 -0
  505. package/lib/share/core/url.d.ts.map +1 -0
  506. package/lib/share/core/url.js +49 -0
  507. package/lib/share/core/url.js.map +1 -0
  508. package/lib/share/core/vocabulary.d.ts +51 -0
  509. package/lib/share/core/vocabulary.d.ts.map +1 -0
  510. package/lib/share/core/vocabulary.js +2 -0
  511. package/lib/share/core/vocabulary.js.map +1 -0
  512. package/lib/share/ui/HiddenPartsProvider.d.ts +19 -0
  513. package/lib/share/ui/HiddenPartsProvider.d.ts.map +1 -0
  514. package/lib/share/ui/HiddenPartsProvider.js +15 -0
  515. package/lib/share/ui/HiddenPartsProvider.js.map +1 -0
  516. package/lib/share/ui/PagePart.d.ts +18 -0
  517. package/lib/share/ui/PagePart.d.ts.map +1 -0
  518. package/lib/share/ui/PagePart.js +16 -0
  519. package/lib/share/ui/PagePart.js.map +1 -0
  520. package/lib/share/ui/ShareButton.d.ts +42 -0
  521. package/lib/share/ui/ShareButton.d.ts.map +1 -0
  522. package/lib/share/ui/ShareButton.js +18 -0
  523. package/lib/share/ui/ShareButton.js.map +1 -0
  524. package/lib/share/ui/ShareDialog.d.ts +73 -0
  525. package/lib/share/ui/ShareDialog.d.ts.map +1 -0
  526. package/lib/share/ui/ShareDialog.js +19 -0
  527. package/lib/share/ui/ShareDialog.js.map +1 -0
  528. package/lib/share/ui/ShareDialogContent.d.ts +13 -0
  529. package/lib/share/ui/ShareDialogContent.d.ts.map +1 -0
  530. package/lib/share/ui/ShareDialogContent.js +71 -0
  531. package/lib/share/ui/ShareDialogContent.js.map +1 -0
  532. package/lib/share/ui/SharePartOptions.d.ts +18 -0
  533. package/lib/share/ui/SharePartOptions.d.ts.map +1 -0
  534. package/lib/share/ui/SharePartOptions.js +22 -0
  535. package/lib/share/ui/SharePartOptions.js.map +1 -0
  536. package/lib/share/ui/draft.d.ts +13 -0
  537. package/lib/share/ui/draft.d.ts.map +1 -0
  538. package/lib/share/ui/draft.js +16 -0
  539. package/lib/share/ui/draft.js.map +1 -0
  540. package/lib/share/ui/hiddenParts.d.ts +17 -0
  541. package/lib/share/ui/hiddenParts.d.ts.map +1 -0
  542. package/lib/share/ui/hiddenParts.js +21 -0
  543. package/lib/share/ui/hiddenParts.js.map +1 -0
  544. package/lib/share/ui/index.d.ts +10 -0
  545. package/lib/share/ui/index.d.ts.map +1 -0
  546. package/lib/share/ui/index.js +6 -0
  547. package/lib/share/ui/index.js.map +1 -0
  548. package/lib/shared/ui/index.d.ts +2 -1
  549. package/lib/shared/ui/index.d.ts.map +1 -1
  550. package/lib/shared/ui/index.js +1 -1
  551. package/lib/shared/ui/index.js.map +1 -1
  552. package/lib/state/ui/index.d.ts +3 -0
  553. package/lib/state/ui/index.d.ts.map +1 -0
  554. package/lib/state/ui/index.js +2 -0
  555. package/lib/state/ui/index.js.map +1 -0
  556. package/lib/state/ui/mergeStored.d.ts +27 -0
  557. package/lib/state/ui/mergeStored.d.ts.map +1 -0
  558. package/lib/state/ui/mergeStored.js +82 -0
  559. package/lib/state/ui/mergeStored.js.map +1 -0
  560. package/lib/state/ui/persistBucket.d.ts +65 -0
  561. package/lib/state/ui/persistBucket.d.ts.map +1 -0
  562. package/lib/state/ui/persistBucket.js +90 -0
  563. package/lib/state/ui/persistBucket.js.map +1 -0
  564. package/lib/structure/core/editorValue.d.ts +69 -0
  565. package/lib/structure/core/editorValue.d.ts.map +1 -0
  566. package/lib/structure/core/editorValue.js +72 -0
  567. package/lib/structure/core/editorValue.js.map +1 -0
  568. package/lib/structure/core/fragmentQuery.d.ts +33 -0
  569. package/lib/structure/core/fragmentQuery.d.ts.map +1 -0
  570. package/lib/structure/core/fragmentQuery.js +37 -0
  571. package/lib/structure/core/fragmentQuery.js.map +1 -0
  572. package/lib/structure/core/index.d.ts +11 -0
  573. package/lib/structure/core/index.d.ts.map +1 -0
  574. package/lib/structure/core/index.js +6 -0
  575. package/lib/structure/core/index.js.map +1 -0
  576. package/lib/structure/core/molfile.d.ts +42 -0
  577. package/lib/structure/core/molfile.d.ts.map +1 -0
  578. package/lib/structure/core/molfile.js +74 -0
  579. package/lib/structure/core/molfile.js.map +1 -0
  580. package/lib/structure/core/readStructure.d.ts +37 -0
  581. package/lib/structure/core/readStructure.d.ts.map +1 -0
  582. package/lib/structure/core/readStructure.js +59 -0
  583. package/lib/structure/core/readStructure.js.map +1 -0
  584. package/lib/structure/core/structureSource.d.ts +34 -0
  585. package/lib/structure/core/structureSource.d.ts.map +1 -0
  586. package/lib/structure/core/structureSource.js +32 -0
  587. package/lib/structure/core/structureSource.js.map +1 -0
  588. package/lib/structure/core/toolbarFloor.d.ts +16 -0
  589. package/lib/structure/core/toolbarFloor.d.ts.map +1 -0
  590. package/lib/structure/core/toolbarFloor.js +27 -0
  591. package/lib/structure/core/toolbarFloor.js.map +1 -0
  592. package/lib/structure/ui/EditorCanvas.d.ts +55 -0
  593. package/lib/structure/ui/EditorCanvas.d.ts.map +1 -0
  594. package/lib/structure/ui/EditorCanvas.js +41 -0
  595. package/lib/structure/ui/EditorCanvas.js.map +1 -0
  596. package/lib/structure/ui/Structure.d.ts +122 -0
  597. package/lib/structure/ui/Structure.d.ts.map +1 -0
  598. package/lib/structure/ui/Structure.js +28 -0
  599. package/lib/structure/ui/Structure.js.map +1 -0
  600. package/lib/structure/ui/StructureEditor.d.ts +75 -0
  601. package/lib/structure/ui/StructureEditor.d.ts.map +1 -0
  602. package/lib/structure/ui/StructureEditor.js +83 -0
  603. package/lib/structure/ui/StructureEditor.js.map +1 -0
  604. package/lib/structure/ui/StructurePlaceholder.d.ts +29 -0
  605. package/lib/structure/ui/StructurePlaceholder.d.ts.map +1 -0
  606. package/lib/structure/ui/StructurePlaceholder.js +19 -0
  607. package/lib/structure/ui/StructurePlaceholder.js.map +1 -0
  608. package/lib/structure/ui/StructureSvg.d.ts +58 -0
  609. package/lib/structure/ui/StructureSvg.d.ts.map +1 -0
  610. package/lib/structure/ui/StructureSvg.js +33 -0
  611. package/lib/structure/ui/StructureSvg.js.map +1 -0
  612. package/lib/structure/ui/index.d.ts +19 -0
  613. package/lib/structure/ui/index.d.ts.map +1 -0
  614. package/lib/structure/ui/index.js +15 -0
  615. package/lib/structure/ui/index.js.map +1 -0
  616. package/lib/structure/ui/useToolbarFloor.d.ts +26 -0
  617. package/lib/structure/ui/useToolbarFloor.d.ts.map +1 -0
  618. package/lib/structure/ui/useToolbarFloor.js +70 -0
  619. package/lib/structure/ui/useToolbarFloor.js.map +1 -0
  620. package/lib/structure.d.ts +3 -0
  621. package/lib/structure.d.ts.map +1 -0
  622. package/lib/structure.js +3 -0
  623. package/lib/structure.js.map +1 -0
  624. package/lib/ui.d.ts +13 -0
  625. package/lib/ui.d.ts.map +1 -1
  626. package/lib/ui.js +13 -0
  627. package/lib/ui.js.map +1 -1
  628. package/lib/worker/core/errors.d.ts +15 -0
  629. package/lib/worker/core/errors.d.ts.map +1 -0
  630. package/lib/worker/core/errors.js +15 -0
  631. package/lib/worker/core/errors.js.map +1 -0
  632. package/lib/worker/core/index.d.ts +5 -0
  633. package/lib/worker/core/index.d.ts.map +1 -0
  634. package/lib/worker/core/index.js +3 -0
  635. package/lib/worker/core/index.js.map +1 -0
  636. package/lib/worker/core/messages.d.ts +48 -0
  637. package/lib/worker/core/messages.d.ts.map +1 -0
  638. package/lib/worker/core/messages.js +2 -0
  639. package/lib/worker/core/messages.js.map +1 -0
  640. package/lib/worker/core/workerChannel.d.ts +69 -0
  641. package/lib/worker/core/workerChannel.d.ts.map +1 -0
  642. package/lib/worker/core/workerChannel.js +121 -0
  643. package/lib/worker/core/workerChannel.js.map +1 -0
  644. package/package.json +18 -5
  645. package/src/capsule/ui/CapsuleFilter.tsx +119 -0
  646. package/src/capsule/ui/index.ts +2 -0
  647. package/src/chrome/ui/NavLink.tsx +88 -0
  648. package/src/chrome/ui/NavMenuButton.tsx +95 -0
  649. package/src/chrome/ui/SiteFooter.tsx +65 -0
  650. package/src/chrome/ui/SiteHeader.tsx +119 -0
  651. package/src/chrome/ui/index.ts +11 -0
  652. package/src/chrome/ui/navItem.ts +60 -0
  653. package/src/chrome/ui/useCompactHeader.ts +81 -0
  654. package/src/citation/core/clipboard.ts +27 -11
  655. package/src/citation/core/download.ts +25 -15
  656. package/src/citation/core/index.ts +8 -3
  657. package/src/citation/core/works.ts +81 -0
  658. package/src/citation/ui/CitationMenu.tsx +104 -89
  659. package/src/citation/ui/CitationPreview.tsx +18 -8
  660. package/src/citation/ui/CiteButton.tsx +24 -9
  661. package/src/citation/ui/CopyFormatEntries.tsx +84 -0
  662. package/src/citation/ui/WorkEntry.tsx +80 -0
  663. package/src/citation/ui/entries.tsx +18 -20
  664. package/src/citation/ui/index.ts +10 -2
  665. package/src/citation/ui/useCopyFeedback.ts +76 -0
  666. package/src/clipboard/core/index.ts +1 -0
  667. package/src/clipboard/core/writeToClipboard.ts +47 -0
  668. package/src/clipboard/ui/CodeBlock.tsx +110 -0
  669. package/src/clipboard/ui/CopyButton.tsx +111 -0
  670. package/src/clipboard/ui/index.ts +9 -0
  671. package/src/clipboard/ui/useCopyToClipboard.ts +57 -0
  672. package/src/color/core/contrast.ts +85 -0
  673. package/src/color/core/hex.ts +57 -0
  674. package/src/color/core/index.ts +4 -0
  675. package/src/color/core/scale.ts +132 -0
  676. package/src/color/ui/ColorScaleLegend.tsx +144 -0
  677. package/src/color/ui/index.ts +2 -0
  678. package/src/core.ts +11 -0
  679. package/src/credits/core/credits.ts +183 -0
  680. package/src/credits/core/index.ts +2 -0
  681. package/src/credits/ui/CreditsList.tsx +82 -0
  682. package/src/credits/ui/index.ts +2 -0
  683. package/src/delimited/core/delimiters.ts +64 -0
  684. package/src/delimited/core/index.ts +11 -0
  685. package/src/delimited/core/readDelimited.ts +132 -0
  686. package/src/delimited/core/rowsToDelimited.ts +135 -0
  687. package/src/delimited/core/toDelimited.ts +69 -0
  688. package/src/delimited/ui/DelimitedTextDialog.tsx +49 -0
  689. package/src/delimited/ui/DelimitedTextPanel.tsx +161 -0
  690. package/src/delimited/ui/index.ts +4 -0
  691. package/src/disclosure/ui/CollapsibleSection.tsx +150 -0
  692. package/src/disclosure/ui/index.ts +4 -0
  693. package/src/disclosure/ui/useDisclosure.ts +35 -0
  694. package/src/download/core/downloadBlob.ts +19 -0
  695. package/src/download/core/downloadText.ts +19 -0
  696. package/src/download/core/index.ts +3 -0
  697. package/src/download/core/sanitizeFileName.ts +33 -0
  698. package/src/ecosystem/core/index.ts +3 -0
  699. package/src/ecosystem/core/links.ts +29 -0
  700. package/src/ecosystem/core/lookup.ts +41 -0
  701. package/src/ecosystem/core/sites.ts +17 -0
  702. package/src/ecosystem/core/tokens.ts +47 -0
  703. package/src/ecosystem/ui/SiteTheme.tsx +23 -0
  704. package/src/ecosystem/ui/Wordmark.tsx +65 -0
  705. package/src/ecosystem/ui/index.ts +4 -0
  706. package/src/ecosystem/ui/marks.tsx +54 -15
  707. package/src/error/ui/ErrorBoundary.tsx +94 -0
  708. package/src/error/ui/ErrorFallback.tsx +64 -0
  709. package/src/error/ui/index.ts +4 -0
  710. package/src/error/ui/toError.ts +33 -0
  711. package/src/format/core/index.ts +9 -0
  712. package/src/format/core/missing.ts +6 -0
  713. package/src/format/core/numbers.ts +84 -0
  714. package/src/format/core/units.ts +60 -0
  715. package/src/format/core/words.ts +17 -0
  716. package/src/help/ui/HelpBody.tsx +130 -0
  717. package/src/help/ui/HelpIcon.tsx +53 -0
  718. package/src/help/ui/HelpToolbarButton.tsx +72 -0
  719. package/src/help/ui/HelpTooltip.tsx +72 -0
  720. package/src/help/ui/index.ts +8 -0
  721. package/src/hooks/ui/index.ts +6 -0
  722. package/src/hooks/ui/listNavigation.ts +116 -0
  723. package/src/hooks/ui/useContainerSize.ts +32 -0
  724. package/src/hooks/ui/useDebouncedValue.ts +29 -0
  725. package/src/hooks/ui/useListKeyboardNavigation.ts +37 -0
  726. package/src/hooks/ui/useResizeObserver.ts +50 -0
  727. package/src/orbital/core/atomicGrid.ts +53 -1
  728. package/src/orbital/core/index.ts +7 -16
  729. package/src/orbital/core/isovalue.ts +146 -0
  730. package/src/orbital/core/sample.ts +25 -5
  731. package/src/orbital/ui/AtomicOrbitalCanvas.tsx +19 -3
  732. package/src/orbital/ui/AtomicOrbitalViewer.tsx +5 -1
  733. package/src/orbital/ui/renderVolume.ts +29 -16
  734. package/src/orbital/ui/viewer.ts +6 -1
  735. package/src/orbital/ui/volumeField.ts +5 -49
  736. package/src/pedagogy/core/glossary.ts +122 -0
  737. package/src/pedagogy/core/index.ts +28 -0
  738. package/src/pedagogy/core/jsonStorage.ts +51 -0
  739. package/src/pedagogy/core/progress.ts +205 -0
  740. package/src/pedagogy/core/types.ts +78 -0
  741. package/src/pedagogy/core/validation.ts +109 -0
  742. package/src/pedagogy/ui/ExerciseActions.tsx +129 -0
  743. package/src/pedagogy/ui/ExerciseProgressHeader.tsx +135 -0
  744. package/src/pedagogy/ui/ExerciseTags.tsx +85 -0
  745. package/src/pedagogy/ui/GlossaryProvider.tsx +31 -0
  746. package/src/pedagogy/ui/GlossaryText.tsx +164 -0
  747. package/src/pedagogy/ui/HintLadder.tsx +95 -0
  748. package/src/pedagogy/ui/ReferenceGrid.tsx +69 -0
  749. package/src/pedagogy/ui/ReferenceSectionBlock.tsx +175 -0
  750. package/src/pedagogy/ui/SyntaxTooltip.tsx +222 -0
  751. package/src/pedagogy/ui/TestCaseList.tsx +122 -0
  752. package/src/pedagogy/ui/TutorialStepStrip.tsx +230 -0
  753. package/src/pedagogy/ui/exerciseMeta.ts +45 -0
  754. package/src/pedagogy/ui/glossaryContext.ts +23 -0
  755. package/src/pedagogy/ui/index.ts +37 -0
  756. package/src/pedagogy/ui/tutorialLevels.ts +27 -0
  757. package/src/router/core/address.ts +74 -0
  758. package/src/router/core/basePath.ts +76 -0
  759. package/src/router/core/index.ts +26 -0
  760. package/src/router/core/legacyHash.ts +77 -0
  761. package/src/router/core/pageAddresses.ts +106 -0
  762. package/src/router/core/query.ts +87 -0
  763. package/src/router/core/tabRouter.ts +214 -0
  764. package/src/seo/core/documentMeta.ts +92 -0
  765. package/src/seo/core/index.ts +6 -0
  766. package/src/share/core/config.ts +165 -0
  767. package/src/share/core/escape.ts +22 -0
  768. package/src/share/core/index.ts +31 -0
  769. package/src/share/core/params.ts +176 -0
  770. package/src/share/core/query.ts +72 -0
  771. package/src/share/core/url.ts +105 -0
  772. package/src/share/core/vocabulary.ts +60 -0
  773. package/src/share/ui/HiddenPartsProvider.tsx +34 -0
  774. package/src/share/ui/PagePart.tsx +26 -0
  775. package/src/share/ui/ShareButton.tsx +84 -0
  776. package/src/share/ui/ShareDialog.tsx +114 -0
  777. package/src/share/ui/ShareDialogContent.tsx +189 -0
  778. package/src/share/ui/SharePartOptions.tsx +51 -0
  779. package/src/share/ui/draft.ts +19 -0
  780. package/src/share/ui/hiddenParts.ts +22 -0
  781. package/src/share/ui/index.ts +9 -0
  782. package/src/shared/ui/index.ts +2 -1
  783. package/src/state/ui/index.ts +6 -0
  784. package/src/state/ui/mergeStored.ts +87 -0
  785. package/src/state/ui/persistBucket.ts +147 -0
  786. package/src/structure/core/editorValue.ts +116 -0
  787. package/src/structure/core/fragmentQuery.ts +50 -0
  788. package/src/structure/core/index.ts +13 -0
  789. package/src/structure/core/molfile.ts +90 -0
  790. package/src/structure/core/readStructure.ts +73 -0
  791. package/src/structure/core/structureSource.ts +57 -0
  792. package/src/structure/core/toolbarFloor.ts +31 -0
  793. package/src/structure/ui/EditorCanvas.tsx +130 -0
  794. package/src/structure/ui/Structure.tsx +183 -0
  795. package/src/structure/ui/StructureEditor.tsx +196 -0
  796. package/src/structure/ui/StructurePlaceholder.tsx +48 -0
  797. package/src/structure/ui/StructureSvg.tsx +110 -0
  798. package/src/structure/ui/index.ts +22 -0
  799. package/src/structure/ui/useToolbarFloor.ts +93 -0
  800. package/src/structure.ts +2 -0
  801. package/src/ui.ts +13 -0
  802. package/src/worker/core/errors.ts +15 -0
  803. package/src/worker/core/index.ts +8 -0
  804. package/src/worker/core/messages.ts +47 -0
  805. package/src/worker/core/workerChannel.ts +218 -0
  806. package/styles/chrome.css +223 -0
@@ -0,0 +1,183 @@
1
+ /**
2
+ * A read-only depiction of a structure, whichever notation the caller has.
3
+ *
4
+ * Which notation is drawn, and what is shown when there is nothing to draw, is
5
+ * decided here; the drawing itself sits behind `React.lazy`, so a page that
6
+ * never renders a structure never downloads react-ocl and openchemlib for one.
7
+ * That is also what lets `react-cheminfo/structure` be imported at all when
8
+ * those optional peers are not installed.
9
+ */
10
+
11
+ import type { ReactElement, ReactNode } from 'react';
12
+ import { Suspense, lazy } from 'react';
13
+
14
+ import { structureSource } from '../core/structureSource.ts';
15
+
16
+ import { StructurePlaceholder } from './StructurePlaceholder.tsx';
17
+
18
+ const StructureSvg = lazy(async () => {
19
+ const module = await import('./StructureSvg.tsx');
20
+ return { default: module.StructureSvg };
21
+ });
22
+
23
+ /** What is written on a depiction besides the atoms and the bonds. */
24
+ export interface StructureLabels {
25
+ /**
26
+ * Write the index of every atom next to it.
27
+ * @default false
28
+ */
29
+ atoms?: boolean;
30
+ /**
31
+ * Write the index of every bond next to it.
32
+ * @default false
33
+ */
34
+ bonds?: boolean;
35
+ /**
36
+ * Write the reaction mapping number of every mapped atom.
37
+ * @default false
38
+ */
39
+ mapping?: boolean;
40
+ /**
41
+ * A caption drawn inside the picture, under the structure.
42
+ * @default undefined
43
+ */
44
+ caption?: string;
45
+ }
46
+
47
+ export interface StructureProps {
48
+ /**
49
+ * A canonical openchemlib idCode, coordinates included or not. The most
50
+ * exact notation, so it is drawn in preference to the others.
51
+ * @default undefined
52
+ */
53
+ idCode?: string;
54
+ /**
55
+ * Encoded 2D coordinates, when they did not travel with the idCode.
56
+ * @default undefined
57
+ */
58
+ coordinates?: string;
59
+ /**
60
+ * A molfile, V2000 or V3000, drawn when there is no usable idCode.
61
+ * @default undefined
62
+ */
63
+ molfile?: string;
64
+ /**
65
+ * A SMILES, drawn when there is neither an idCode nor a molfile. The layout
66
+ * is invented, so two depictions of the same molecule may differ.
67
+ * @default undefined
68
+ */
69
+ smiles?: string;
70
+ /**
71
+ * Width of the picture, in pixels.
72
+ * @default 200
73
+ */
74
+ width?: number;
75
+ /**
76
+ * Height of the picture, in pixels.
77
+ * @default 140
78
+ */
79
+ height?: number;
80
+ /**
81
+ * What is written on the picture besides the structure itself.
82
+ * @default {}
83
+ */
84
+ labels?: StructureLabels;
85
+ /**
86
+ * Crop the picture to the atoms rather than centring them in the box.
87
+ * @default true
88
+ */
89
+ autoCrop?: boolean;
90
+ /**
91
+ * Blank space kept around the structure when it is cropped, in pixels.
92
+ * @default 4
93
+ */
94
+ autoCropMargin?: number;
95
+ /**
96
+ * Atoms to paint, which is how a substructure match is shown.
97
+ * @default undefined
98
+ */
99
+ atomHighlight?: number[];
100
+ /**
101
+ * The colour the highlighted atoms are painted.
102
+ * @default '#a5d8ff'
103
+ */
104
+ atomHighlightColor?: string;
105
+ /**
106
+ * Bonds to paint.
107
+ * @default undefined
108
+ */
109
+ bondHighlight?: number[];
110
+ /**
111
+ * The colour the highlighted bonds are painted.
112
+ * @default '#ffd8a8'
113
+ */
114
+ bondHighlightColor?: string;
115
+ /**
116
+ * What is shown when there is no structure, or when the one supplied cannot
117
+ * be read. An em dash rather than a red box: a missing structure is a row of
118
+ * a table far more often than it is a bug worth shouting about.
119
+ * @default '—'
120
+ */
121
+ fallback?: ReactNode;
122
+ }
123
+
124
+ /**
125
+ * Draw a structure, from whichever notation the caller has.
126
+ *
127
+ * Nothing here throws and nothing renders a broken box: a blank value, a
128
+ * molfile with an empty atom block and a SMILES with a typo in it all come out
129
+ * as the same quiet placeholder, sized like the picture that would have been
130
+ * drawn so a list of structures keeps its rhythm. The box the renderers load
131
+ * into is that same placeholder, so nothing moves once they arrive.
132
+ * @param props - The structure, its size and what is written on it.
133
+ * @returns The picture, or the placeholder.
134
+ */
135
+ export function Structure(props: StructureProps): ReactElement {
136
+ const {
137
+ idCode,
138
+ coordinates,
139
+ molfile,
140
+ smiles,
141
+ width = 200,
142
+ height = 140,
143
+ labels = {},
144
+ autoCrop = true,
145
+ autoCropMargin = 4,
146
+ atomHighlight,
147
+ atomHighlightColor = '#a5d8ff',
148
+ bondHighlight,
149
+ bondHighlightColor = '#ffd8a8',
150
+ fallback = '—',
151
+ } = props;
152
+
153
+ const source = structureSource({ idCode, coordinates, molfile, smiles });
154
+
155
+ if (source.kind === 'empty') {
156
+ return (
157
+ <StructurePlaceholder width={width} height={height}>
158
+ {fallback}
159
+ </StructurePlaceholder>
160
+ );
161
+ }
162
+
163
+ return (
164
+ <Suspense fallback={<StructurePlaceholder width={width} height={height} />}>
165
+ <StructureSvg
166
+ source={source}
167
+ width={width}
168
+ height={height}
169
+ autoCrop={autoCrop}
170
+ autoCropMargin={autoCropMargin}
171
+ atomHighlight={atomHighlight}
172
+ atomHighlightColor={atomHighlightColor}
173
+ bondHighlight={bondHighlight}
174
+ bondHighlightColor={bondHighlightColor}
175
+ showAtomNumber={labels.atoms ?? false}
176
+ showBondNumber={labels.bonds ?? false}
177
+ showMapping={labels.mapping ?? false}
178
+ label={labels.caption}
179
+ fallback={fallback}
180
+ />
181
+ </Suspense>
182
+ );
183
+ }
@@ -0,0 +1,196 @@
1
+ /**
2
+ * The canvas structure editor and the box it is drawn in.
3
+ *
4
+ * The canvas itself sits behind `React.lazy`: it is the half that imports
5
+ * react-ocl, so a page that never opens an editor never downloads openchemlib,
6
+ * and `react-cheminfo/structure` stays importable when those optional peers
7
+ * are absent.
8
+ */
9
+
10
+ import type { CSSProperties, ReactElement } from 'react';
11
+ import { Suspense, lazy, useCallback, useEffect, useRef } from 'react';
12
+ import type { CanvasEditorInputFormat } from 'react-ocl';
13
+
14
+ import type {
15
+ StructureEditorChange,
16
+ StructureEditorMode,
17
+ } from './EditorCanvas.tsx';
18
+ import { useToolbarFloor } from './useToolbarFloor.ts';
19
+
20
+ const EditorCanvas = lazy(async () => {
21
+ const module = await import('./EditorCanvas.tsx');
22
+ return { default: module.EditorCanvas };
23
+ });
24
+
25
+ export interface StructureEditorProps {
26
+ /**
27
+ * Called after every edit, once the drawing has been still for `debounce`
28
+ * milliseconds, with every notation read out of the editor.
29
+ */
30
+ onChange: (change: StructureEditorChange) => void;
31
+ /**
32
+ * Draw a query fragment rather than a whole structure, which is what a
33
+ * substructure filter needs.
34
+ * @default false
35
+ */
36
+ fragment?: boolean;
37
+ /**
38
+ * How `value` is written.
39
+ * @default 'idcode'
40
+ */
41
+ inputFormat?: CanvasEditorInputFormat;
42
+ /**
43
+ * What the canvas holds. Read once, when the editor appears and again on
44
+ * every change of `revision`: the editor is uncontrolled, so feeding the
45
+ * drawing back into it would replace the structure and reset every
46
+ * coordinate under the pen.
47
+ * @default ''
48
+ */
49
+ value?: string;
50
+ /**
51
+ * Bumped by the caller to load `value` into the canvas again, which is what
52
+ * an example, a share link or a Clear button does. Changing it discards
53
+ * whatever was being drawn.
54
+ * @default 0
55
+ */
56
+ revision?: number;
57
+ /**
58
+ * How long the drawing has to be still before `onChange` is called, in
59
+ * milliseconds. Long enough that drawing a ring does not publish six
60
+ * structures; `0` reports every stroke.
61
+ * @default 300
62
+ */
63
+ debounce?: number;
64
+ /**
65
+ * Smallest height of the drawing area, in pixels. Raised to whatever the
66
+ * toolbar needs, which is usually more.
67
+ * @default 320
68
+ */
69
+ minHeight?: number;
70
+ /**
71
+ * Whether the editor draws one structure or a reaction. A reaction canvas
72
+ * has its own toolbar and its own arrow.
73
+ * @default 'molecule'
74
+ */
75
+ mode?: StructureEditorMode;
76
+ /** Class the container carries, so a site can reach it from its stylesheet. */
77
+ className?: string;
78
+ /** Extra style for the container, merged over the packaged one. */
79
+ style?: CSSProperties;
80
+ }
81
+
82
+ /**
83
+ * The canvas structure editor, sized to fill its container and never to hide
84
+ * part of its toolbar.
85
+ * @param props - What to draw, when to reload it, and where to send it.
86
+ * @returns The editor.
87
+ */
88
+ export function StructureEditor(props: StructureEditorProps): ReactElement {
89
+ const {
90
+ onChange,
91
+ fragment = false,
92
+ inputFormat = 'idcode',
93
+ value = '',
94
+ revision = 0,
95
+ debounce = 300,
96
+ minHeight = 320,
97
+ mode = 'molecule',
98
+ className,
99
+ style,
100
+ } = props;
101
+
102
+ const containerRef = useToolbarFloor({ minHeight, revision });
103
+ const handleChange = useDebounced(onChange, debounce, revision);
104
+
105
+ return (
106
+ <div
107
+ ref={containerRef}
108
+ className={className}
109
+ style={{ ...ROOT_STYLE, minHeight, ...style }}
110
+ >
111
+ <Suspense fallback={<div style={LOADING_STYLE}>Loading the editor…</div>}>
112
+ <EditorCanvas
113
+ key={revision}
114
+ onChange={handleChange}
115
+ fragment={fragment}
116
+ inputFormat={inputFormat}
117
+ value={value}
118
+ mode={mode}
119
+ />
120
+ </Suspense>
121
+ </div>
122
+ );
123
+ }
124
+
125
+ /**
126
+ * Report the last edit of a burst rather than every one of them.
127
+ *
128
+ * The editor's own event is read out before the wait starts, so what arrives
129
+ * late is a plain object rather than a handle on an editor that has moved on.
130
+ * @param onChange - What the caller wants told.
131
+ * @param delay - How long the drawing has to be still, in milliseconds.
132
+ * @param resetKey - Dropped edits: a burst still waiting when the caller
133
+ * replaces the structure describes a canvas that no longer exists.
134
+ * @returns The handler to give the canvas.
135
+ */
136
+ function useDebounced(
137
+ onChange: (change: StructureEditorChange) => void,
138
+ delay: number,
139
+ resetKey: number,
140
+ ): (change: StructureEditorChange) => void {
141
+ const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null);
142
+ const onChangeRef = useRef(onChange);
143
+ useEffect(() => {
144
+ onChangeRef.current = onChange;
145
+ });
146
+ useEffect(() => {
147
+ return () => {
148
+ if (timerRef.current !== null) {
149
+ clearTimeout(timerRef.current);
150
+ timerRef.current = null;
151
+ }
152
+ };
153
+ }, [resetKey]);
154
+
155
+ return useCallback(
156
+ (change: StructureEditorChange) => {
157
+ if (timerRef.current !== null) clearTimeout(timerRef.current);
158
+ if (delay <= 0) {
159
+ onChangeRef.current(change);
160
+ return;
161
+ }
162
+ timerRef.current = setTimeout(() => {
163
+ timerRef.current = null;
164
+ onChangeRef.current(change);
165
+ }, delay);
166
+ },
167
+ [delay],
168
+ );
169
+ }
170
+
171
+ /**
172
+ * The canvas is positioned out of the height computation, so the container's
173
+ * own height is what the measured toolbar floor writes on it. The `minHeight`
174
+ * prop is applied on top of this at first render: without a height before the
175
+ * toolbar has been measured, the editor is built at zero size and never paints
176
+ * the structure it was given.
177
+ */
178
+ const ROOT_STYLE: CSSProperties = {
179
+ position: 'relative',
180
+ overflow: 'hidden',
181
+ boxSizing: 'border-box',
182
+ border: '1px solid #d3d8de',
183
+ borderRadius: 6,
184
+ background: '#fff',
185
+ };
186
+
187
+ /** The box the canvas will fill, so its arrival moves nothing. */
188
+ const LOADING_STYLE: CSSProperties = {
189
+ position: 'absolute',
190
+ inset: 0,
191
+ display: 'flex',
192
+ alignItems: 'center',
193
+ justifyContent: 'center',
194
+ color: '#8a96a3',
195
+ fontSize: 13,
196
+ };
@@ -0,0 +1,48 @@
1
+ /**
2
+ * The box a depiction leaves behind when there is no picture in it — nothing
3
+ * to draw, a notation that cannot be read, or the moment before the renderers
4
+ * have been downloaded.
5
+ *
6
+ * It is kept apart from the renderers on purpose: it pulls nothing in, so both
7
+ * sides of the `React.lazy` boundary in `Structure` can use it.
8
+ */
9
+
10
+ import type { CSSProperties, ReactElement, ReactNode } from 'react';
11
+
12
+ /** Props of {@link StructurePlaceholder}. */
13
+ export interface StructurePlaceholderProps {
14
+ /** Width of the box, in pixels: the width the picture would have had. */
15
+ width: number;
16
+ /** Height of the box, in pixels. */
17
+ height: number;
18
+ /**
19
+ * What is written in the middle of the box.
20
+ * @default undefined
21
+ */
22
+ children?: ReactNode;
23
+ }
24
+
25
+ /**
26
+ * A box the size of the picture that is not there, holding whatever the caller
27
+ * wants said instead.
28
+ * @param props - See {@link StructurePlaceholderProps}.
29
+ * @returns The placeholder.
30
+ */
31
+ export function StructurePlaceholder(
32
+ props: StructurePlaceholderProps,
33
+ ): ReactElement {
34
+ const { width, height, children } = props;
35
+ return (
36
+ <span style={{ ...PLACEHOLDER_STYLE, width, height }} aria-hidden="true">
37
+ {children}
38
+ </span>
39
+ );
40
+ }
41
+
42
+ const PLACEHOLDER_STYLE: CSSProperties = {
43
+ display: 'inline-flex',
44
+ alignItems: 'center',
45
+ justifyContent: 'center',
46
+ color: '#8a96a3',
47
+ fontSize: '0.75rem',
48
+ };
@@ -0,0 +1,110 @@
1
+ /**
2
+ * The react-ocl depiction of a structure whose notation has already been
3
+ * picked.
4
+ *
5
+ * `Structure` holds it behind `React.lazy`, and the barrel deliberately does
6
+ * not export it: this is the file that value-imports react-ocl, so
7
+ * anything able to reach it statically drags openchemlib into every bundle,
8
+ * including the ones that only ever wanted the Tools menu.
9
+ */
10
+
11
+ import type { ComponentType, ReactElement, ReactNode } from 'react';
12
+ import { useMemo } from 'react';
13
+ import type { ErrorComponentProps } from 'react-ocl';
14
+ import {
15
+ IdcodeSvgRenderer,
16
+ MolfileSvgRenderer,
17
+ SmilesSvgRenderer,
18
+ } from 'react-ocl';
19
+
20
+ import type { StructureSource } from '../core/structureSource.ts';
21
+
22
+ import { StructurePlaceholder } from './StructurePlaceholder.tsx';
23
+
24
+ /** Props of {@link StructureSvg}. */
25
+ export interface StructureSvgProps {
26
+ /** The notation to draw, as `structureSource` picked it. */
27
+ source: StructureSource;
28
+ /** Width of the picture, in pixels. */
29
+ width: number;
30
+ /** Height of the picture, in pixels. */
31
+ height: number;
32
+ /** Crop the picture to the atoms rather than centring them in the box. */
33
+ autoCrop: boolean;
34
+ /** Blank space kept around the structure when it is cropped, in pixels. */
35
+ autoCropMargin: number;
36
+ /**
37
+ * Atoms to paint, which is how a substructure match is shown.
38
+ * @default undefined
39
+ */
40
+ atomHighlight?: number[];
41
+ /** The colour the highlighted atoms are painted. */
42
+ atomHighlightColor: string;
43
+ /**
44
+ * Bonds to paint.
45
+ * @default undefined
46
+ */
47
+ bondHighlight?: number[];
48
+ /** The colour the highlighted bonds are painted. */
49
+ bondHighlightColor: string;
50
+ /** Write the index of every atom next to it. */
51
+ showAtomNumber: boolean;
52
+ /** Write the index of every bond next to it. */
53
+ showBondNumber: boolean;
54
+ /** Write the reaction mapping number of every mapped atom. */
55
+ showMapping: boolean;
56
+ /**
57
+ * A caption drawn inside the picture, under the structure.
58
+ * @default undefined
59
+ */
60
+ label?: string;
61
+ /** What is shown in place of a structure react-ocl refuses to read. */
62
+ fallback: ReactNode;
63
+ }
64
+
65
+ /**
66
+ * Draw the picture with the renderer the notation calls for.
67
+ * @param props - See {@link StructureSvgProps}.
68
+ * @returns The svg, or the placeholder when the notation cannot be read.
69
+ */
70
+ export function StructureSvg(props: StructureSvgProps): ReactElement {
71
+ const { source, fallback, ...rest } = props;
72
+
73
+ const ErrorComponent = useMemo(
74
+ () => createFallbackRenderer(fallback),
75
+ [fallback],
76
+ );
77
+ const shared = { ...rest, ErrorComponent };
78
+
79
+ if (source.kind === 'idcode') {
80
+ return (
81
+ <IdcodeSvgRenderer
82
+ idcode={source.value}
83
+ coordinates={source.coordinates}
84
+ {...shared}
85
+ />
86
+ );
87
+ }
88
+ if (source.kind === 'molfile') {
89
+ return <MolfileSvgRenderer molfile={source.value} {...shared} />;
90
+ }
91
+ return <SmilesSvgRenderer smiles={source.value} {...shared} />;
92
+ }
93
+
94
+ /**
95
+ * Build the renderer react-ocl falls back to, so a structure it refuses looks
96
+ * like one that was never supplied rather than like an error.
97
+ * @param fallback - What the caller wants shown instead of the structure.
98
+ * @returns The component react-ocl renders in place of the picture.
99
+ */
100
+ function createFallbackRenderer(
101
+ fallback: ReactNode,
102
+ ): ComponentType<ErrorComponentProps> {
103
+ return function StructureFallback(props: ErrorComponentProps): ReactElement {
104
+ return (
105
+ <StructurePlaceholder width={props.width} height={props.height}>
106
+ {fallback}
107
+ </StructurePlaceholder>
108
+ );
109
+ };
110
+ }
@@ -0,0 +1,22 @@
1
+ /**
2
+ * What a site imports to show or to draw a structure.
3
+ *
4
+ * **Nothing exported here may pull react-ocl or openchemlib in statically.**
5
+ * `StructureSvg` and `EditorCanvas` are deliberately absent: re-exporting
6
+ * either would make react-ocl reachable from this barrel, the `React.lazy`
7
+ * boundaries inside `Structure` and `StructureEditor` would be defeated, and
8
+ * `react-cheminfo/structure` would stop being importable at all when those
9
+ * optional peers are not installed — which is what a site wanting only the
10
+ * Tools menu does. Type-only re-exports are erased and so are safe.
11
+ */
12
+
13
+ export type {
14
+ StructureEditorChange,
15
+ StructureEditorMode,
16
+ } from './EditorCanvas.tsx';
17
+ export type { StructureLabels, StructureProps } from './Structure.tsx';
18
+ export { Structure } from './Structure.tsx';
19
+ export type { StructureEditorProps } from './StructureEditor.tsx';
20
+ export { StructureEditor } from './StructureEditor.tsx';
21
+ export type { ToolbarFloorOptions } from './useToolbarFloor.ts';
22
+ export { useToolbarFloor } from './useToolbarFloor.ts';
@@ -0,0 +1,93 @@
1
+ import type { RefObject } from 'react';
2
+ import { useLayoutEffect, useRef } from 'react';
3
+
4
+ import { toolbarFloorHeight } from '../core/toolbarFloor.ts';
5
+
6
+ export interface ToolbarFloorOptions {
7
+ /**
8
+ * Smallest height of the drawing area, in pixels. Raised to whatever the
9
+ * toolbar needs, which is usually more.
10
+ * @default 320
11
+ */
12
+ minHeight?: number;
13
+ /**
14
+ * Bumped to look for the toolbar again, which a caller does after the editor
15
+ * has been remounted and the previous toolbar element has gone.
16
+ * @default 0
17
+ */
18
+ revision?: number;
19
+ }
20
+
21
+ /**
22
+ * Give an editor's container a minimum height that shows the whole toolbar.
23
+ *
24
+ * The height is measured rather than written down, so a different button count
25
+ * — a fragment editor, a reaction editor, a future release — keeps working
26
+ * instead of clipping its last buttons behind whatever follows the editor.
27
+ * @param options - The height the caller asked for, and when to look again.
28
+ * @returns The ref to put on the element wrapping the editor.
29
+ */
30
+ export function useToolbarFloor(
31
+ options: ToolbarFloorOptions = {},
32
+ ): RefObject<HTMLDivElement | null> {
33
+ const { minHeight = 320, revision = 0 } = options;
34
+ const containerRef = useRef<HTMLDivElement>(null);
35
+
36
+ useLayoutEffect(() => {
37
+ const container = containerRef.current;
38
+ if (container === null) return;
39
+
40
+ let observer: ResizeObserver | null = null;
41
+ let frame = 0;
42
+ let attempts = 0;
43
+
44
+ // The editor builds itself asynchronously, so the toolbar is usually not
45
+ // there yet on the first look; watching for it is what keeps a slow first
46
+ // paint from leaving the container at its unmeasured height for good.
47
+ const attach = (): void => {
48
+ const toolbar = findToolbar(container);
49
+ if (toolbar === null) {
50
+ attempts++;
51
+ if (attempts > MAX_ATTEMPTS) return;
52
+ frame = globalThis.requestAnimationFrame(attach);
53
+ return;
54
+ }
55
+ observer = new ResizeObserver(() => {
56
+ // offsetHeight, because a dialog opens under a scaling transform and a
57
+ // measured rectangle would be that of the half drawn toolbar.
58
+ const floor = toolbarFloorHeight(toolbar.offsetHeight, minHeight);
59
+ container.style.minHeight = `${floor}px`;
60
+ });
61
+ observer.observe(toolbar);
62
+ };
63
+
64
+ attach();
65
+
66
+ return () => {
67
+ if (frame !== 0) globalThis.cancelAnimationFrame(frame);
68
+ observer?.disconnect();
69
+ };
70
+ }, [minHeight, revision]);
71
+
72
+ return containerRef;
73
+ }
74
+
75
+ /** Roughly two seconds of frames, after which the editor is not coming. */
76
+ const MAX_ATTEMPTS = 120;
77
+
78
+ /**
79
+ * Find the toolbar canvas of the editor.
80
+ *
81
+ * The editor builds itself inside a shadow root and puts the toolbar there as
82
+ * a direct child, the drawing canvas being nested deeper.
83
+ * @param container - The element wrapping the editor.
84
+ * @returns The toolbar canvas, or null while the editor has not drawn one.
85
+ */
86
+ function findToolbar(container: HTMLElement): HTMLCanvasElement | null {
87
+ for (const element of container.querySelectorAll('*')) {
88
+ for (const child of element.shadowRoot?.children ?? []) {
89
+ if (child instanceof HTMLCanvasElement) return child;
90
+ }
91
+ }
92
+ return null;
93
+ }
@@ -0,0 +1,2 @@
1
+ export * from './structure/core/index.ts';
2
+ export * from './structure/ui/index.ts';
package/src/ui.ts CHANGED
@@ -1,3 +1,16 @@
1
+ export * from './capsule/ui/index.ts';
2
+ export * from './chrome/ui/index.ts';
1
3
  export * from './citation/ui/index.ts';
4
+ export * from './clipboard/ui/index.ts';
5
+ export * from './color/ui/index.ts';
6
+ export * from './credits/ui/index.ts';
7
+ export * from './delimited/ui/index.ts';
8
+ export * from './disclosure/ui/index.ts';
2
9
  export * from './ecosystem/ui/index.ts';
10
+ export * from './error/ui/index.ts';
11
+ export * from './help/ui/index.ts';
12
+ export * from './hooks/ui/index.ts';
13
+ export * from './pedagogy/ui/index.ts';
14
+ export * from './share/ui/index.ts';
3
15
  export * from './shared/ui/index.ts';
16
+ export * from './state/ui/index.ts';
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Rejection of a request nobody is waiting for any more: its signal was
3
+ * aborted, or the channel it was posted on was terminated.
4
+ *
5
+ * It is the normal outcome of dragging a slider or clicking through a list, so
6
+ * a caller catches it and draws nothing rather than reporting a failure.
7
+ */
8
+ export class CancelledRequestError extends Error {
9
+ override name = 'CancelledRequestError';
10
+ }
11
+
12
+ /** Rejection of a request that outlived its budget and was given up on. */
13
+ export class RequestTimeoutError extends Error {
14
+ override name = 'RequestTimeoutError';
15
+ }
@@ -0,0 +1,8 @@
1
+ export { CancelledRequestError, RequestTimeoutError } from './errors.ts';
2
+ export type { WorkerLike } from './messages.ts';
3
+ export type {
4
+ WorkerChannel,
5
+ WorkerChannelOptions,
6
+ WorkerRequestOptions,
7
+ } from './workerChannel.ts';
8
+ export { createWorkerChannel } from './workerChannel.ts';