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,43 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Alert, Button, ProgressBar } from '@blueprintjs/core';
3
+ import { useState } from 'react';
4
+ /**
5
+ * How much of a set is solved, its bar, and the one way to wipe it.
6
+ *
7
+ * Wiping goes through a real dialog rather than `confirm()`: the button throws
8
+ * away a week of somebody's work, and a native prompt is both unstyled and
9
+ * dismissed by reflex.
10
+ * @param props - The counts, and what clearing does.
11
+ * @returns The header.
12
+ */
13
+ export function ExerciseProgressHeader(props) {
14
+ const { summary, onClearAll, clearLabel = 'Clear all answers', clearWarning = DEFAULT_WARNING, clearDisabled = false, className, } = props;
15
+ const [confirming, setConfirming] = useState(false);
16
+ const complete = summary.total > 0 && summary.solved === summary.total;
17
+ return (_jsxs("div", { className: className, style: ROOT_STYLE, children: [_jsxs("div", { style: ROW_STYLE, children: [_jsx("span", { style: COUNT_STYLE, children: `${summary.solved} / ${summary.total} solved` }), _jsx("span", { style: PERCENT_STYLE, children: `${Math.round(summary.ratio * 100)}%` }), onClearAll !== undefined && (_jsx(Button, { size: "small", variant: "minimal", intent: "danger", icon: "trash", text: clearLabel, disabled: clearDisabled, onClick: () => {
18
+ setConfirming(true);
19
+ } }))] }), _jsx(ProgressBar, { animate: false, stripes: false, intent: complete ? 'success' : 'primary', value: summary.ratio }), onClearAll !== undefined && (_jsx(Alert, { isOpen: confirming, intent: "danger", icon: "trash", cancelButtonText: "Keep my answers", confirmButtonText: "Clear everything", onCancel: () => {
20
+ setConfirming(false);
21
+ }, onConfirm: () => {
22
+ onClearAll();
23
+ setConfirming(false);
24
+ }, children: clearWarning }))] }));
25
+ }
26
+ const DEFAULT_WARNING = 'This forgets every answer, every revealed hint and every solved exercise, on this browser. There is no undo.';
27
+ const ROOT_STYLE = {
28
+ display: 'flex',
29
+ flexDirection: 'column',
30
+ gap: 6,
31
+ };
32
+ const ROW_STYLE = {
33
+ display: 'flex',
34
+ alignItems: 'center',
35
+ gap: 8,
36
+ };
37
+ const COUNT_STYLE = { fontWeight: 600 };
38
+ const PERCENT_STYLE = {
39
+ color: '#5b6875',
40
+ flex: '1 1 auto',
41
+ fontSize: 12,
42
+ };
43
+ //# sourceMappingURL=ExerciseProgressHeader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExerciseProgressHeader.js","sourceRoot":"","sources":["../../../src/pedagogy/ui/ExerciseProgressHeader.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAE/D,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAmCjC;;;;;;;;GAQG;AACH,MAAM,UAAU,sBAAsB,CACpC,KAAkC;IAElC,MAAM,EACJ,OAAO,EACP,UAAU,EACV,UAAU,GAAG,mBAAmB,EAChC,YAAY,GAAG,eAAe,EAC9B,aAAa,GAAG,KAAK,EACrB,SAAS,GACV,GAAG,KAAK,CAAC;IACV,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACpD,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,GAAG,CAAC,IAAI,OAAO,CAAC,MAAM,KAAK,OAAO,CAAC,KAAK,CAAC;IAEvE,OAAO,CACL,eAAK,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,aAC1C,eAAK,KAAK,EAAE,SAAS,aACnB,eAAM,KAAK,EAAE,WAAW,YACrB,GAAG,OAAO,CAAC,MAAM,MAAM,OAAO,CAAC,KAAK,SAAS,GACzC,EACP,eACE,KAAK,EAAE,aAAa,YACpB,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,GAAQ,EAC9C,UAAU,KAAK,SAAS,IAAI,CAC3B,KAAC,MAAM,IACL,IAAI,EAAC,OAAO,EACZ,OAAO,EAAC,SAAS,EACjB,MAAM,EAAC,QAAQ,EACf,IAAI,EAAC,OAAO,EACZ,IAAI,EAAE,UAAU,EAChB,QAAQ,EAAE,aAAa,EACvB,OAAO,EAAE,GAAG,EAAE;4BACZ,aAAa,CAAC,IAAI,CAAC,CAAC;wBACtB,CAAC,GACD,CACH,IACG,EAEN,KAAC,WAAW,IACV,OAAO,EAAE,KAAK,EACd,OAAO,EAAE,KAAK,EACd,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,EACxC,KAAK,EAAE,OAAO,CAAC,KAAK,GACpB,EAED,UAAU,KAAK,SAAS,IAAI,CAC3B,KAAC,KAAK,IACJ,MAAM,EAAE,UAAU,EAClB,MAAM,EAAC,QAAQ,EACf,IAAI,EAAC,OAAO,EACZ,gBAAgB,EAAC,iBAAiB,EAClC,iBAAiB,EAAC,kBAAkB,EACpC,QAAQ,EAAE,GAAG,EAAE;oBACb,aAAa,CAAC,KAAK,CAAC,CAAC;gBACvB,CAAC,EACD,SAAS,EAAE,GAAG,EAAE;oBACd,UAAU,EAAE,CAAC;oBACb,aAAa,CAAC,KAAK,CAAC,CAAC;gBACvB,CAAC,YAEA,YAAY,GACP,CACT,IACG,CACP,CAAC;AACJ,CAAC;AAED,MAAM,eAAe,GACnB,8GAA8G,CAAC;AAEjH,MAAM,UAAU,GAAkB;IAChC,OAAO,EAAE,MAAM;IACf,aAAa,EAAE,QAAQ;IACvB,GAAG,EAAE,CAAC;CACP,CAAC;AAEF,MAAM,SAAS,GAAkB;IAC/B,OAAO,EAAE,MAAM;IACf,UAAU,EAAE,QAAQ;IACpB,GAAG,EAAE,CAAC;CACP,CAAC;AAEF,MAAM,WAAW,GAAkB,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC;AAEvD,MAAM,aAAa,GAAkB;IACnC,KAAK,EAAE,SAAS;IAChB,IAAI,EAAE,UAAU;IAChB,QAAQ,EAAE,EAAE;CACb,CAAC"}
@@ -0,0 +1,49 @@
1
+ import type { ReactElement } from 'react';
2
+ import type { ExerciseLevel, ExerciseStatus } from '../core/types.ts';
3
+ export interface ExerciseLevelTagProps {
4
+ level: ExerciseLevel;
5
+ /**
6
+ * What the tag reads.
7
+ * @default the level itself — `beginner`, `intermediate`, `advanced`
8
+ */
9
+ label?: string;
10
+ /**
11
+ * Whether the tag is the one currently selected, which fills it in rather
12
+ * than leaving it minimal. Its colour does not depend on this: a level that
13
+ * is filtered out is still that level, and a tag that dropped to `none` when
14
+ * switched off would say the difficulty had changed.
15
+ * @default false
16
+ */
17
+ active?: boolean;
18
+ /**
19
+ * Called when the tag is clicked, which also makes it interactive.
20
+ * @default undefined — the tag only reports the level
21
+ */
22
+ onClick?: () => void;
23
+ }
24
+ /**
25
+ * The difficulty of an exercise or a step, as a coloured tag.
26
+ * @param props - The level, and whether it is the selected one.
27
+ * @returns The tag.
28
+ */
29
+ export declare function ExerciseLevelTag(props: ExerciseLevelTagProps): ReactElement;
30
+ export interface ExerciseStatusIconProps {
31
+ status: ExerciseStatus;
32
+ /**
33
+ * What the pointer and a screen reader are told.
34
+ * @default the status itself — `idle`, `attempted`, `solved`
35
+ */
36
+ title?: string;
37
+ /**
38
+ * Size of the glyph, in pixels.
39
+ * @default undefined — Blueprint's standard 16
40
+ */
41
+ size?: number;
42
+ }
43
+ /**
44
+ * Where a student stands on one exercise, as the glyph in front of its title.
45
+ * @param props - The status, and how it is announced.
46
+ * @returns The icon.
47
+ */
48
+ export declare function ExerciseStatusIcon(props: ExerciseStatusIconProps): ReactElement;
49
+ //# sourceMappingURL=ExerciseTags.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExerciseTags.d.ts","sourceRoot":"","sources":["../../../src/pedagogy/ui/ExerciseTags.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAE1C,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAItE,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,aAAa,CAAC;IACrB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,GAAG,YAAY,CAe3E;AAED,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,cAAc,CAAC;IACvB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,uBAAuB,GAC7B,YAAY,CAYd"}
@@ -0,0 +1,22 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Icon, Tag } from '@blueprintjs/core';
3
+ import { LEVEL_INTENT, STATUS_ICON, STATUS_INTENT } from "./exerciseMeta.js";
4
+ /**
5
+ * The difficulty of an exercise or a step, as a coloured tag.
6
+ * @param props - The level, and whether it is the selected one.
7
+ * @returns The tag.
8
+ */
9
+ export function ExerciseLevelTag(props) {
10
+ const { level, label = level, active = false, onClick } = props;
11
+ return (_jsx(Tag, { round: true, minimal: !active, active: active, intent: LEVEL_INTENT[level], interactive: onClick !== undefined, onClick: onClick, children: label }));
12
+ }
13
+ /**
14
+ * Where a student stands on one exercise, as the glyph in front of its title.
15
+ * @param props - The status, and how it is announced.
16
+ * @returns The icon.
17
+ */
18
+ export function ExerciseStatusIcon(props) {
19
+ const { status, title = status, size } = props;
20
+ return (_jsx(Icon, { icon: STATUS_ICON[status], intent: STATUS_INTENT[status], size: size, title: title, "aria-label": title }));
21
+ }
22
+ //# sourceMappingURL=ExerciseTags.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExerciseTags.js","sourceRoot":"","sources":["../../../src/pedagogy/ui/ExerciseTags.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAK9C,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAwB7E;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAA4B;IAC3D,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,KAAK,EAAE,MAAM,GAAG,KAAK,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;IAEhE,OAAO,CACL,KAAC,GAAG,IACF,KAAK,QACL,OAAO,EAAE,CAAC,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,YAAY,CAAC,KAAK,CAAC,EAC3B,WAAW,EAAE,OAAO,KAAK,SAAS,EAClC,OAAO,EAAE,OAAO,YAEf,KAAK,GACF,CACP,CAAC;AACJ,CAAC;AAgBD;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAChC,KAA8B;IAE9B,MAAM,EAAE,MAAM,EAAE,KAAK,GAAG,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC;IAE/C,OAAO,CACL,KAAC,IAAI,IACH,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,EACzB,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,EAC7B,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,KAAK,gBACA,KAAK,GACjB,CACH,CAAC;AACJ,CAAC"}
@@ -0,0 +1,19 @@
1
+ import type { ReactElement, ReactNode } from 'react';
2
+ import type { Glossary } from '../core/glossary.ts';
3
+ export interface GlossaryProviderProps {
4
+ /** Every term the site defines, keyed by the lowercased text of a marker. */
5
+ glossary: Glossary;
6
+ /** The part of the page whose prose resolves its markers against it. */
7
+ children: ReactNode;
8
+ }
9
+ /**
10
+ * Hand a glossary to every piece of prose below it.
11
+ *
12
+ * Wrap the whole tool once, high enough that a tutorial step, an exercise
13
+ * description and a revealed hint all sit under it: they are the three places
14
+ * jargon is linked, and they must define a term the same way.
15
+ * @param props - The terms, and the tree that uses them.
16
+ * @returns The tree, with the glossary in reach.
17
+ */
18
+ export declare function GlossaryProvider(props: GlossaryProviderProps): ReactElement;
19
+ //# sourceMappingURL=GlossaryProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GlossaryProvider.d.ts","sourceRoot":"","sources":["../../../src/pedagogy/ui/GlossaryProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAErD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAIpD,MAAM,WAAW,qBAAqB;IACpC,6EAA6E;IAC7E,QAAQ,EAAE,QAAQ,CAAC;IACnB,wEAAwE;IACxE,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,GAAG,YAAY,CAQ3E"}
@@ -0,0 +1,16 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { GlossaryContext } from "./glossaryContext.js";
3
+ /**
4
+ * Hand a glossary to every piece of prose below it.
5
+ *
6
+ * Wrap the whole tool once, high enough that a tutorial step, an exercise
7
+ * description and a revealed hint all sit under it: they are the three places
8
+ * jargon is linked, and they must define a term the same way.
9
+ * @param props - The terms, and the tree that uses them.
10
+ * @returns The tree, with the glossary in reach.
11
+ */
12
+ export function GlossaryProvider(props) {
13
+ const { glossary, children } = props;
14
+ return (_jsx(GlossaryContext.Provider, { value: glossary, children: children }));
15
+ }
16
+ //# sourceMappingURL=GlossaryProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GlossaryProvider.js","sourceRoot":"","sources":["../../../src/pedagogy/ui/GlossaryProvider.tsx"],"names":[],"mappings":";AAIA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AASvD;;;;;;;;GAQG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAA4B;IAC3D,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;IAErC,OAAO,CACL,KAAC,eAAe,CAAC,QAAQ,IAAC,KAAK,EAAE,QAAQ,YACtC,QAAQ,GACgB,CAC5B,CAAC;AACJ,CAAC"}
@@ -0,0 +1,50 @@
1
+ import type { Placement } from '@blueprintjs/core';
2
+ import type { ReactElement } from 'react';
3
+ import type { Glossary, GlossaryEntry } from '../core/glossary.ts';
4
+ export interface GlossaryTextProps {
5
+ /**
6
+ * Authored prose. Every `[[term]]` — or `[[term|displayed text]]` — the
7
+ * glossary knows becomes a hoverable chip.
8
+ */
9
+ text: string;
10
+ /**
11
+ * Terms to resolve against, instead of the ones the surrounding provider
12
+ * holds. A page showing two vocabularies side by side passes its own here.
13
+ * @default undefined — the glossary of the surrounding `GlossaryProvider`
14
+ */
15
+ glossary?: Glossary;
16
+ /**
17
+ * Side the definition opens on.
18
+ * @default 'bottom'
19
+ */
20
+ placement?: Placement;
21
+ /**
22
+ * Class every chip carries, so a site can reach them from its stylesheet.
23
+ * @default 'glossary-term'
24
+ */
25
+ className?: string;
26
+ }
27
+ /**
28
+ * Render authored prose, turning its markers into hoverable definitions.
29
+ *
30
+ * A term the glossary has no entry for renders as its plain text, never as the
31
+ * brackets: prose is allowed to link a word months before anybody writes its
32
+ * definition, and the page must keep reading in the meantime.
33
+ * @param props - The prose, and where its terms are defined.
34
+ * @returns The prose, with the known terms made hoverable.
35
+ */
36
+ export declare function GlossaryText(props: GlossaryTextProps): ReactElement;
37
+ export interface GlossaryTooltipBodyProps {
38
+ /** The term to explain, already resolved from a marker. */
39
+ entry: GlossaryEntry;
40
+ }
41
+ /**
42
+ * The definition itself: the term, one paragraph, then the worked examples.
43
+ *
44
+ * Exported on its own so a glossary page can list every term with the body it
45
+ * shows on hover, rather than describing the same entry twice.
46
+ * @param props - The entry to show.
47
+ * @returns The body of the tooltip.
48
+ */
49
+ export declare function GlossaryTooltipBody(props: GlossaryTooltipBodyProps): ReactElement;
50
+ //# sourceMappingURL=GlossaryText.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GlossaryText.d.ts","sourceRoot":"","sources":["../../../src/pedagogy/ui/GlossaryText.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD,OAAO,KAAK,EAAiB,YAAY,EAAa,MAAM,OAAO,CAAC;AAGpE,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAKnE,MAAM,WAAW,iBAAiB;IAChC;;;OAGG;IACH,IAAI,EAAE,MAAM,CAAC;IACb;;;;OAIG;IACH,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB;;;OAGG;IACH,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,YAAY,CAmCnE;AAED,MAAM,WAAW,wBAAwB;IACvC,2DAA2D;IAC3D,KAAK,EAAE,aAAa,CAAC;CACtB;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,wBAAwB,GAC9B,YAAY,CAwBd"}
@@ -0,0 +1,79 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Tooltip } from '@blueprintjs/core';
3
+ import { Fragment } from 'react';
4
+ import { lookupGlossaryTerm, parseGlossaryMarkers } from "../core/glossary.js";
5
+ import { useGlossary } from "./glossaryContext.js";
6
+ /**
7
+ * Render authored prose, turning its markers into hoverable definitions.
8
+ *
9
+ * A term the glossary has no entry for renders as its plain text, never as the
10
+ * brackets: prose is allowed to link a word months before anybody writes its
11
+ * definition, and the page must keep reading in the meantime.
12
+ * @param props - The prose, and where its terms are defined.
13
+ * @returns The prose, with the known terms made hoverable.
14
+ */
15
+ export function GlossaryText(props) {
16
+ const { text, glossary, placement = 'bottom', className = 'glossary-term', } = props;
17
+ const fromProvider = useGlossary();
18
+ const terms = glossary ?? fromProvider;
19
+ const pieces = [];
20
+ for (const segment of parseGlossaryMarkers(text)) {
21
+ const entry = segment.kind === 'term'
22
+ ? lookupGlossaryTerm(terms, segment.term)
23
+ : undefined;
24
+ if (entry === undefined) {
25
+ pieces.push(_jsx(Fragment, { children: segment.text }, segment.start));
26
+ continue;
27
+ }
28
+ pieces.push(_jsx(Tooltip, { content: _jsx(GlossaryTooltipBody, { entry: entry }), hoverOpenDelay: HOVER_OPEN_DELAY, placement: placement, children: _jsx("span", { className: className, style: TERM_STYLE, children: segment.text }) }, segment.start));
29
+ }
30
+ return _jsx(_Fragment, { children: pieces });
31
+ }
32
+ /**
33
+ * The definition itself: the term, one paragraph, then the worked examples.
34
+ *
35
+ * Exported on its own so a glossary page can list every term with the body it
36
+ * shows on hover, rather than describing the same entry twice.
37
+ * @param props - The entry to show.
38
+ * @returns The body of the tooltip.
39
+ */
40
+ export function GlossaryTooltipBody(props) {
41
+ const { entry } = props;
42
+ return (_jsxs("div", { style: BODY_STYLE, children: [_jsx("div", { style: TITLE_STYLE, children: entry.title }), _jsx("div", { style: SUMMARY_STYLE, children: entry.summary }), entry.examples.length > 0 && (_jsx("ul", { style: LIST_STYLE, children: entry.examples.map((example) => (_jsxs("li", { children: [_jsx("code", { style: CODE_STYLE, children: example.code }), example.input !== undefined && (_jsx("span", { style: INPUT_STYLE, children: ` on ${example.input}` })), example.note !== undefined && (_jsx("div", { style: NOTE_STYLE, children: example.note }))] }, `${example.code}::${example.input ?? ''}`))) }))] }));
43
+ }
44
+ /** Long enough that the pointer can cross a chip without opening it. */
45
+ const HOVER_OPEN_DELAY = 150;
46
+ const TERM_STYLE = {
47
+ borderBottom: '1px dotted currentColor',
48
+ color: 'var(--accent, inherit)',
49
+ cursor: 'help',
50
+ };
51
+ const BODY_STYLE = {
52
+ display: 'flex',
53
+ flexDirection: 'column',
54
+ gap: 6,
55
+ maxWidth: 340,
56
+ };
57
+ const TITLE_STYLE = { fontWeight: 600, fontSize: 13 };
58
+ const SUMMARY_STYLE = {
59
+ fontSize: 12,
60
+ lineHeight: 1.45,
61
+ color: '#d3d8de',
62
+ };
63
+ const LIST_STYLE = {
64
+ display: 'flex',
65
+ flexDirection: 'column',
66
+ gap: 4,
67
+ margin: 0,
68
+ paddingLeft: 16,
69
+ fontSize: 12,
70
+ lineHeight: 1.4,
71
+ };
72
+ const CODE_STYLE = {
73
+ fontFamily: 'ui-monospace, SFMono-Regular, Menlo, Consolas, monospace',
74
+ fontWeight: 600,
75
+ color: '#8abbff',
76
+ };
77
+ const INPUT_STYLE = { color: '#f6f7f9' };
78
+ const NOTE_STYLE = { fontStyle: 'italic', color: '#abb3bf' };
79
+ //# sourceMappingURL=GlossaryText.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GlossaryText.js","sourceRoot":"","sources":["../../../src/pedagogy/ui/GlossaryText.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import type { ReactElement } from 'react';
2
+ export interface HintLadderProps {
3
+ /** Every hint of the exercise, ordered from a nudge to almost the answer. */
4
+ hints: readonly string[];
5
+ /**
6
+ * How many the student has asked for. A count outside the ladder is read as
7
+ * one of its ends, so a stored value from a shorter or longer ladder still
8
+ * opens the page.
9
+ */
10
+ revealed: number;
11
+ /**
12
+ * Opens the next hint. Leave it out where the button lives elsewhere — in
13
+ * `ExerciseActions`, say — and the ladder only shows what is already open.
14
+ * @default undefined — no button
15
+ */
16
+ onReveal?: () => void;
17
+ /**
18
+ * Text of the button, before its count.
19
+ * @default 'Reveal hint'
20
+ */
21
+ revealLabel?: string;
22
+ /**
23
+ * Heading over the hints.
24
+ * @default 'Hints'
25
+ */
26
+ title?: string;
27
+ }
28
+ /**
29
+ * The hints asked for so far, and the button that opens the next one.
30
+ *
31
+ * One at a time, in order: a ladder that dumped all four at once is a solution
32
+ * with extra steps. The prose goes through the glossary, so a hint may link its
33
+ * jargon exactly like the statement above it.
34
+ * @param props - The ladder, how much of it is open, and how to open more.
35
+ * @returns The hints, or nothing while none is open and none can be.
36
+ */
37
+ export declare function HintLadder(props: HintLadderProps): ReactElement | null;
38
+ //# sourceMappingURL=HintLadder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HintLadder.d.ts","sourceRoot":"","sources":["../../../src/pedagogy/ui/HintLadder.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAiB,YAAY,EAAE,MAAM,OAAO,CAAC;AAIzD,MAAM,WAAW,eAAe;IAC9B,6EAA6E;IAC7E,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB;;;;OAIG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,YAAY,GAAG,IAAI,CAsCtE"}
@@ -0,0 +1,33 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Button, Callout } from '@blueprintjs/core';
3
+ import { GlossaryText } from "./GlossaryText.js";
4
+ /**
5
+ * The hints asked for so far, and the button that opens the next one.
6
+ *
7
+ * One at a time, in order: a ladder that dumped all four at once is a solution
8
+ * with extra steps. The prose goes through the glossary, so a hint may link its
9
+ * jargon exactly like the statement above it.
10
+ * @param props - The ladder, how much of it is open, and how to open more.
11
+ * @returns The hints, or nothing while none is open and none can be.
12
+ */
13
+ export function HintLadder(props) {
14
+ const { hints, revealed, onReveal, revealLabel = 'Reveal hint', title = 'Hints', } = props;
15
+ const open = clampRevealed(revealed, hints.length);
16
+ const exhausted = open >= hints.length;
17
+ if (open === 0 && (onReveal === undefined || hints.length === 0))
18
+ return null;
19
+ return (_jsxs("div", { style: ROOT_STYLE, children: [onReveal !== undefined && hints.length > 0 && (_jsx("div", { children: _jsx(Button, { icon: "lightbulb", text: `${revealLabel} (${open}/${hints.length})`, disabled: exhausted, onClick: onReveal }) })), open > 0 && (_jsx(Callout, { intent: "primary", icon: "lightbulb", title: title, children: _jsx("ol", { style: LIST_STYLE, children: hints.slice(0, open).map((hint) => (_jsx("li", { style: ITEM_STYLE, children: _jsx(GlossaryText, { text: hint }) }, hint))) }) }))] }));
20
+ }
21
+ function clampRevealed(revealed, total) {
22
+ if (!Number.isFinite(revealed) || revealed <= 0)
23
+ return 0;
24
+ return Math.min(Math.floor(revealed), total);
25
+ }
26
+ const ROOT_STYLE = {
27
+ display: 'flex',
28
+ flexDirection: 'column',
29
+ gap: 8,
30
+ };
31
+ const LIST_STYLE = { margin: 0, paddingLeft: 18 };
32
+ const ITEM_STYLE = { lineHeight: 1.45 };
33
+ //# sourceMappingURL=HintLadder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HintLadder.js","sourceRoot":"","sources":["../../../src/pedagogy/ui/HintLadder.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAGpD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAoB,CAAC;AA6BlD;;;;;;;;GAQG;AACH,MAAM,UAAU,UAAU,CAAC,KAAsB;IAC/C,MAAM,EACJ,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,WAAW,GAAG,aAAa,EAC3B,KAAK,GAAG,OAAO,GAChB,GAAG,KAAK,CAAC;IACV,MAAM,IAAI,GAAG,aAAa,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACnD,MAAM,SAAS,GAAG,IAAI,IAAI,KAAK,CAAC,MAAM,CAAC;IACvC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAE9E,OAAO,CACL,eAAK,KAAK,EAAE,UAAU,aACnB,QAAQ,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,CAC7C,wBACE,KAAC,MAAM,IACL,IAAI,EAAC,WAAW,EAChB,IAAI,EAAE,GAAG,WAAW,KAAK,IAAI,IAAI,KAAK,CAAC,MAAM,GAAG,EAChD,QAAQ,EAAE,SAAS,EACnB,OAAO,EAAE,QAAQ,GACjB,GACE,CACP,EAEA,IAAI,GAAG,CAAC,IAAI,CACX,KAAC,OAAO,IAAC,MAAM,EAAC,SAAS,EAAC,IAAI,EAAC,WAAW,EAAC,KAAK,EAAE,KAAK,YACrD,aAAI,KAAK,EAAE,UAAU,YAClB,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAClC,aAAe,KAAK,EAAE,UAAU,YAC9B,KAAC,YAAY,IAAC,IAAI,EAAE,IAAI,GAAI,IADrB,IAAI,CAER,CACN,CAAC,GACC,GACG,CACX,IACG,CACP,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,QAAgB,EAAE,KAAa;IACpD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,QAAQ,IAAI,CAAC;QAAE,OAAO,CAAC,CAAC;IAC1D,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,GAAkB;IAChC,OAAO,EAAE,MAAM;IACf,aAAa,EAAE,QAAQ;IACvB,GAAG,EAAE,CAAC;CACP,CAAC;AAEF,MAAM,UAAU,GAAkB,EAAE,MAAM,EAAE,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;AAEjE,MAAM,UAAU,GAAkB,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC"}
@@ -0,0 +1,31 @@
1
+ import type { ReactElement } from 'react';
2
+ import type { ReferenceSection } from './ReferenceSectionBlock.tsx';
3
+ export interface ReferenceGridProps {
4
+ /** The blocks of the cheatsheet, in reading order. */
5
+ sections: readonly ReferenceSection[];
6
+ /**
7
+ * Width under which a column wraps to the next line, in pixels.
8
+ * @default 320
9
+ */
10
+ minColumnWidth?: number;
11
+ /**
12
+ * Width of the syntax column of every block, so they line up across columns.
13
+ * @default 150
14
+ */
15
+ syntaxWidth?: number | string;
16
+ /**
17
+ * Class the grid carries, in addition to `reference-grid`.
18
+ * @default undefined
19
+ */
20
+ className?: string;
21
+ }
22
+ /**
23
+ * The whole cheatsheet: as many columns as the paper or the window allows.
24
+ *
25
+ * Students print this page and take it into an exam room, so the columns
26
+ * reflow to the sheet and every block is kept off a page break.
27
+ * @param props - The sections, and how they are laid out.
28
+ * @returns The grid.
29
+ */
30
+ export declare function ReferenceGrid(props: ReferenceGridProps): ReactElement;
31
+ //# sourceMappingURL=ReferenceGrid.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReferenceGrid.d.ts","sourceRoot":"","sources":["../../../src/pedagogy/ui/ReferenceGrid.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAiB,YAAY,EAAE,MAAM,OAAO,CAAC;AAEzD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAGpE,MAAM,WAAW,kBAAkB;IACjC,sDAAsD;IACtD,QAAQ,EAAE,SAAS,gBAAgB,EAAE,CAAC;IACtC;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC9B;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,YAAY,CA0BrE"}
@@ -0,0 +1,25 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { ReferenceSectionBlock } from "./ReferenceSectionBlock.js";
3
+ /**
4
+ * The whole cheatsheet: as many columns as the paper or the window allows.
5
+ *
6
+ * Students print this page and take it into an exam room, so the columns
7
+ * reflow to the sheet and every block is kept off a page break.
8
+ * @param props - The sections, and how they are laid out.
9
+ * @returns The grid.
10
+ */
11
+ export function ReferenceGrid(props) {
12
+ const { sections, minColumnWidth = 320, syntaxWidth = 150, className, } = props;
13
+ return (_jsx("div", { className: className === undefined
14
+ ? 'reference-grid'
15
+ : `reference-grid ${className}`, style: gridStyle(minColumnWidth), children: sections.map((section) => (_jsx(ReferenceSectionBlock, { section: section, syntaxWidth: syntaxWidth }, section.id))) }));
16
+ }
17
+ function gridStyle(minColumnWidth) {
18
+ return {
19
+ display: 'grid',
20
+ gridTemplateColumns: `repeat(auto-fit, minmax(${minColumnWidth}px, 1fr))`,
21
+ gap: '10px 24px',
22
+ alignItems: 'start',
23
+ };
24
+ }
25
+ //# sourceMappingURL=ReferenceGrid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReferenceGrid.js","sourceRoot":"","sources":["../../../src/pedagogy/ui/ReferenceGrid.tsx"],"names":[],"mappings":";AAGA,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA6B,CAAC;AAsBpE;;;;;;;GAOG;AACH,MAAM,UAAU,aAAa,CAAC,KAAyB;IACrD,MAAM,EACJ,QAAQ,EACR,cAAc,GAAG,GAAG,EACpB,WAAW,GAAG,GAAG,EACjB,SAAS,GACV,GAAG,KAAK,CAAC;IAEV,OAAO,CACL,cACE,SAAS,EACP,SAAS,KAAK,SAAS;YACrB,CAAC,CAAC,gBAAgB;YAClB,CAAC,CAAC,kBAAkB,SAAS,EAAE,EAEnC,KAAK,EAAE,SAAS,CAAC,cAAc,CAAC,YAE/B,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CACzB,KAAC,qBAAqB,IAEpB,OAAO,EAAE,OAAO,EAChB,WAAW,EAAE,WAAW,IAFnB,OAAO,CAAC,EAAE,CAGf,CACH,CAAC,GACE,CACP,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,cAAsB;IACvC,OAAO;QACL,OAAO,EAAE,MAAM;QACf,mBAAmB,EAAE,2BAA2B,cAAc,WAAW;QACzE,GAAG,EAAE,WAAW;QAChB,UAAU,EAAE,OAAO;KACpB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,64 @@
1
+ import type { ReactElement } from 'react';
2
+ import type { SyntaxTooltipContent } from './SyntaxTooltip.tsx';
3
+ /** One line of the cheatsheet: a construct and what it does. */
4
+ export interface ReferenceRow {
5
+ /** The construct itself, set in monospace. */
6
+ syntax: string;
7
+ /** What it does, in one line — short enough to read on paper. */
8
+ description: string;
9
+ /**
10
+ * The longer story, opened by hovering the row. A sparse section is meant to
11
+ * ship and be enriched later, so a row without one is plain text rather than
12
+ * a chip that opens nothing.
13
+ * @default undefined — the row is not interactive
14
+ */
15
+ tooltip?: SyntaxTooltipContent;
16
+ }
17
+ /** One titled block of the cheatsheet. */
18
+ export interface ReferenceSection {
19
+ /** Stable and URL-safe: a heading can be linked to. */
20
+ id: string;
21
+ title: string;
22
+ /**
23
+ * One line under the heading, when the block needs framing.
24
+ * @default undefined
25
+ */
26
+ intro?: string;
27
+ /**
28
+ * Colour of the heading and of the rule under it, which is how the sections
29
+ * are told apart at a glance.
30
+ * @default undefined — the heading takes the surrounding text colour
31
+ */
32
+ color?: string;
33
+ rows: ReferenceRow[];
34
+ /**
35
+ * Whether the block is dropped from the printed sheet — a section that is
36
+ * only useful with a pointer, or one the site keeps for the screen.
37
+ * @default false
38
+ */
39
+ noPrint?: boolean;
40
+ }
41
+ export interface ReferenceSectionBlockProps {
42
+ section: ReferenceSection;
43
+ /**
44
+ * Width of the syntax column, so the blocks of one grid line up.
45
+ * @default 150
46
+ */
47
+ syntaxWidth?: number | string;
48
+ /**
49
+ * Class the block carries, in addition to `reference-section`.
50
+ * @default undefined
51
+ */
52
+ className?: string;
53
+ }
54
+ /**
55
+ * A titled block of reference rows.
56
+ *
57
+ * The rows are spans in a flex column rather than a table: a tooltip target is
58
+ * wrapped in a `<span>`, which a browser hoists straight out of a `<tbody>`,
59
+ * and a table also breaks across pages far worse than a column does.
60
+ * @param props - The section, and how wide its syntax column is.
61
+ * @returns The block, kept whole across a page break.
62
+ */
63
+ export declare function ReferenceSectionBlock(props: ReferenceSectionBlockProps): ReactElement;
64
+ //# sourceMappingURL=ReferenceSectionBlock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReferenceSectionBlock.d.ts","sourceRoot":"","sources":["../../../src/pedagogy/ui/ReferenceSectionBlock.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAiB,YAAY,EAAE,MAAM,OAAO,CAAC;AAEzD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAGhE,gEAAgE;AAChE,MAAM,WAAW,YAAY;IAC3B,8CAA8C;IAC9C,MAAM,EAAE,MAAM,CAAC;IACf,iEAAiE;IACjE,WAAW,EAAE,MAAM,CAAC;IACpB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,oBAAoB,CAAC;CAChC;AAED,0CAA0C;AAC1C,MAAM,WAAW,gBAAgB;IAC/B,uDAAuD;IACvD,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,YAAY,EAAE,CAAC;IACrB;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,0BAA0B;IACzC,OAAO,EAAE,gBAAgB,CAAC;IAC1B;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC9B;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,0BAA0B,GAChC,YAAY,CAkBd"}
@@ -0,0 +1,78 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { SyntaxTooltip } from "./SyntaxTooltip.js";
3
+ /**
4
+ * A titled block of reference rows.
5
+ *
6
+ * The rows are spans in a flex column rather than a table: a tooltip target is
7
+ * wrapped in a `<span>`, which a browser hoists straight out of a `<tbody>`,
8
+ * and a table also breaks across pages far worse than a column does.
9
+ * @param props - The section, and how wide its syntax column is.
10
+ * @returns The block, kept whole across a page break.
11
+ */
12
+ export function ReferenceSectionBlock(props) {
13
+ const { section, syntaxWidth = 150, className } = props;
14
+ return (_jsxs("section", { id: section.id, className: blockClassName(section, className), style: SECTION_STYLE, children: [_jsx("h4", { style: headingStyle(section.color), children: section.title }), section.intro !== undefined && (_jsx("p", { style: INTRO_STYLE, children: section.intro })), section.rows.map((row) => (_jsx(ReferenceRowLine, { row: row, width: syntaxWidth }, row.syntax)))] }));
15
+ }
16
+ function ReferenceRowLine(props) {
17
+ const { row, width } = props;
18
+ const interactive = row.tooltip !== undefined;
19
+ const line = (_jsxs("span", { style: interactive ? INTERACTIVE_ROW_STYLE : ROW_STYLE, children: [_jsx("span", { style: syntaxStyle(width, interactive), children: row.syntax }), _jsx("span", { style: DESCRIPTION_STYLE, children: row.description })] }));
20
+ if (row.tooltip === undefined)
21
+ return line;
22
+ return (_jsx(SyntaxTooltip, { content: row.tooltip, placement: "right", children: line }));
23
+ }
24
+ function blockClassName(section, className) {
25
+ const names = ['reference-section'];
26
+ if (section.noPrint === true)
27
+ names.push('no-print');
28
+ if (className !== undefined)
29
+ names.push(className);
30
+ return names.join(' ');
31
+ }
32
+ function headingStyle(color) {
33
+ return {
34
+ margin: '0 0 4px',
35
+ paddingBottom: 2,
36
+ fontSize: 13,
37
+ ...(color === undefined
38
+ ? {}
39
+ : { color, borderBottom: `2px solid ${color}` }),
40
+ };
41
+ }
42
+ function syntaxStyle(width, interactive) {
43
+ return {
44
+ flex: `0 0 ${typeof width === 'number' ? `${width}px` : width}`,
45
+ fontFamily: 'ui-monospace, SFMono-Regular, Menlo, Consolas, monospace',
46
+ fontSize: 12,
47
+ fontWeight: 600,
48
+ color: '#1c2127',
49
+ ...(interactive
50
+ ? { borderBottom: '1px dotted #5b6875', alignSelf: 'flex-start' }
51
+ : {}),
52
+ };
53
+ }
54
+ const SECTION_STYLE = {
55
+ display: 'flex',
56
+ flexDirection: 'column',
57
+ breakInside: 'avoid',
58
+ };
59
+ const INTRO_STYLE = {
60
+ margin: '0 0 4px',
61
+ color: '#5b6875',
62
+ fontSize: 12,
63
+ };
64
+ const ROW_STYLE = {
65
+ display: 'flex',
66
+ gap: 8,
67
+ padding: '3px 0',
68
+ borderTop: '1px solid #e5e7eb',
69
+ width: '100%',
70
+ };
71
+ const INTERACTIVE_ROW_STYLE = { ...ROW_STYLE, cursor: 'help' };
72
+ const DESCRIPTION_STYLE = {
73
+ flex: '1 1 auto',
74
+ fontSize: 12,
75
+ lineHeight: 1.4,
76
+ color: '#404854',
77
+ };
78
+ //# sourceMappingURL=ReferenceSectionBlock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReferenceSectionBlock.js","sourceRoot":"","sources":["../../../src/pedagogy/ui/ReferenceSectionBlock.tsx"],"names":[],"mappings":"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"}