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,22 @@
1
+ import type { ReactElement } from 'react';
2
+ import type { DelimitedTextPanelProps } from './DelimitedTextPanel.tsx';
3
+ /** What the dialog hands over, and how. */
4
+ export interface DelimitedTextDialogProps extends DelimitedTextPanelProps {
5
+ /** Whether the dialog is open. */
6
+ isOpen: boolean;
7
+ /** Called when the dialog is dismissed. */
8
+ onClose: () => void;
9
+ /**
10
+ * Title of the dialog.
11
+ * @default 'Copy the table'
12
+ */
13
+ title?: string;
14
+ }
15
+ /**
16
+ * The dialog every site rebuilt to hand a table over: the text, a choice of
17
+ * separator, and a way to copy or save it.
18
+ * @param props - See {@link DelimitedTextDialogProps}.
19
+ * @returns The dialog.
20
+ */
21
+ export declare function DelimitedTextDialog(props: DelimitedTextDialogProps): ReactElement;
22
+ //# sourceMappingURL=DelimitedTextDialog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DelimitedTextDialog.d.ts","sourceRoot":"","sources":["../../../src/delimited/ui/DelimitedTextDialog.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAiB,YAAY,EAAE,MAAM,OAAO,CAAC;AAEzD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AAGxE,2CAA2C;AAC3C,MAAM,WAAW,wBAAyB,SAAQ,uBAAuB;IACvE,kCAAkC;IAClC,MAAM,EAAE,OAAO,CAAC;IAChB,2CAA2C;IAC3C,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,wBAAwB,GAC9B,YAAY,CAiBd"}
@@ -0,0 +1,17 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Button, Dialog, DialogBody, DialogFooter } from '@blueprintjs/core';
3
+ import { DelimitedTextPanel } from "./DelimitedTextPanel.js";
4
+ /**
5
+ * The dialog every site rebuilt to hand a table over: the text, a choice of
6
+ * separator, and a way to copy or save it.
7
+ * @param props - See {@link DelimitedTextDialogProps}.
8
+ * @returns The dialog.
9
+ */
10
+ export function DelimitedTextDialog(props) {
11
+ const { isOpen, onClose, title = 'Copy the table', ...panel } = props;
12
+ return (_jsxs(Dialog, { isOpen: isOpen, onClose: onClose, title: title, icon: "th", style: DIALOG_STYLE, children: [_jsx(DialogBody, { children: _jsx(DelimitedTextPanel, { ...panel, label: panel.label ?? title }) }), _jsx(DialogFooter, { actions: _jsx(Button, { text: "Close", onClick: onClose }) })] }));
13
+ }
14
+ const DIALOG_STYLE = {
15
+ width: 'min(900px, 92vw)',
16
+ };
17
+ //# sourceMappingURL=DelimitedTextDialog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DelimitedTextDialog.js","sourceRoot":"","sources":["../../../src/delimited/ui/DelimitedTextDialog.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAI7E,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAA0B,CAAC;AAe9D;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CACjC,KAA+B;IAE/B,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,GAAG,gBAAgB,EAAE,GAAG,KAAK,EAAE,GAAG,KAAK,CAAC;IAEtE,OAAO,CACL,MAAC,MAAM,IACL,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,KAAK,EACZ,IAAI,EAAC,IAAI,EACT,KAAK,EAAE,YAAY,aAEnB,KAAC,UAAU,cACT,KAAC,kBAAkB,OAAK,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,KAAK,GAAI,GACnD,EACb,KAAC,YAAY,IAAC,OAAO,EAAE,KAAC,MAAM,IAAC,IAAI,EAAC,OAAO,EAAC,OAAO,EAAE,OAAO,GAAI,GAAI,IAC7D,CACV,CAAC;AACJ,CAAC;AAED,MAAM,YAAY,GAAG;IACnB,KAAK,EAAE,kBAAkB;CACO,CAAC"}
@@ -0,0 +1,56 @@
1
+ import type { ReactElement, ReactNode } from 'react';
2
+ import type { DelimiterId } from '../core/delimiters.ts';
3
+ /** What a table handed over as text needs. */
4
+ export interface DelimitedTextPanelProps {
5
+ /** The cells, one array per line. */
6
+ rows: ReadonlyArray<readonly string[]>;
7
+ /**
8
+ * Column names, written as the first line.
9
+ * @default undefined — the table is handed over without a header line
10
+ */
11
+ header?: readonly string[];
12
+ /**
13
+ * What the visitor is told above the text. A sentence naming what the table
14
+ * holds beats the generic one, which only counts the rows.
15
+ * @default a line saying how many rows there are and what to do with them
16
+ */
17
+ description?: ReactNode;
18
+ /**
19
+ * Base name of the saved file, without the extension — the extension follows
20
+ * the chosen separator.
21
+ * @default 'table'
22
+ */
23
+ fileName?: string;
24
+ /**
25
+ * Which separator the panel opens on.
26
+ * @default 'tab'
27
+ */
28
+ defaultDelimiter?: DelimiterId;
29
+ /**
30
+ * Whether a save button is offered beside the copy one.
31
+ * @default true
32
+ */
33
+ downloadable?: boolean;
34
+ /**
35
+ * What the text area is called, for a screen reader reaching it.
36
+ * @default 'The table, as text'
37
+ */
38
+ label?: string;
39
+ /**
40
+ * Height of the text area, in pixels.
41
+ * @default 320
42
+ */
43
+ height?: number;
44
+ }
45
+ /**
46
+ * A whole table as text: read it, copy it, or save it.
47
+ *
48
+ * The text is shown rather than only downloaded, because a visitor can read
49
+ * what is being copied and because a page framed in a course site often cannot
50
+ * start a download at all. Every cell is escaped for the separator in force, so
51
+ * the file a spreadsheet opens holds the columns the page shows.
52
+ * @param props - See {@link DelimitedTextPanelProps}.
53
+ * @returns The panel.
54
+ */
55
+ export declare function DelimitedTextPanel(props: DelimitedTextPanelProps): ReactElement;
56
+ //# sourceMappingURL=DelimitedTextPanel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DelimitedTextPanel.d.ts","sourceRoot":"","sources":["../../../src/delimited/ui/DelimitedTextPanel.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAiB,YAAY,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAMpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAIzD,8CAA8C;AAC9C,MAAM,WAAW,uBAAuB;IACtC,qCAAqC;IACrC,IAAI,EAAE,aAAa,CAAC,SAAS,MAAM,EAAE,CAAC,CAAC;IACvC;;;OAGG;IACH,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B;;;;OAIG;IACH,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,gBAAgB,CAAC,EAAE,WAAW,CAAC;IAC/B;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,uBAAuB,GAC7B,YAAY,CA+Dd"}
@@ -0,0 +1,55 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Button, Callout, SegmentedControl } from '@blueprintjs/core';
3
+ import { useMemo, useState } from 'react';
4
+ import { CopyButton } from "../../clipboard/ui/CopyButton.js";
5
+ import { downloadText } from "../../download/core/downloadText.js";
6
+ import { sanitizeFileName } from "../../download/core/sanitizeFileName.js";
7
+ import { DELIMITER_CHOICES, delimiterChoice } from "../core/delimiters.js";
8
+ import { toDelimited } from "../core/toDelimited.js";
9
+ /**
10
+ * A whole table as text: read it, copy it, or save it.
11
+ *
12
+ * The text is shown rather than only downloaded, because a visitor can read
13
+ * what is being copied and because a page framed in a course site often cannot
14
+ * start a download at all. Every cell is escaped for the separator in force, so
15
+ * the file a spreadsheet opens holds the columns the page shows.
16
+ * @param props - See {@link DelimitedTextPanelProps}.
17
+ * @returns The panel.
18
+ */
19
+ export function DelimitedTextPanel(props) {
20
+ const { rows, header, description, fileName = 'table', defaultDelimiter = 'tab', downloadable = true, label = 'The table, as text', height = 320, } = props;
21
+ const [delimiterId, setDelimiterId] = useState(defaultDelimiter);
22
+ const choice = delimiterChoice(delimiterId);
23
+ const text = useMemo(() => toDelimited(rows, { delimiter: choice.delimiter, header }), [rows, header, choice.delimiter]);
24
+ return (_jsxs("div", { className: "delimited-text", children: [_jsx(Callout, { intent: "primary", compact: true, icon: "info-sign", children: description ?? defaultDescription(rows.length) }), _jsxs("div", { style: CONTROLS_STYLE, children: [_jsx("span", { style: LABEL_STYLE, children: "Separator" }), _jsx(SegmentedControl, { size: "small", options: DELIMITER_CHOICES.map((option) => ({
25
+ label: option.label,
26
+ value: option.id,
27
+ })), value: choice.id, onValueChange: setDelimiterId }), _jsx("span", { style: SPACER_STYLE }), downloadable ? (_jsx(Button, { icon: "download", text: "Save", size: "small", onClick: () => downloadText(text, `${sanitizeFileName(fileName, 'table')}.${choice.extension}`, `${choice.mimeType};charset=utf-8`) })) : null, _jsx(CopyButton, { content: text, label: "Copy", icon: "clipboard", small: true })] }), _jsx("textarea", { readOnly: true, value: text, spellCheck: false, "aria-label": label, className: "bp6-input", style: { ...TEXT_STYLE, height }, onFocus: (event) => event.currentTarget.select() })] }));
28
+ }
29
+ function defaultDescription(rowCount) {
30
+ const rows = rowCount === 1 ? '1 row' : `${rowCount.toLocaleString()} rows`;
31
+ return `${rows}, one per line. Copy them, then paste into a spreadsheet.`;
32
+ }
33
+ const CONTROLS_STYLE = {
34
+ display: 'flex',
35
+ flexWrap: 'wrap',
36
+ alignItems: 'center',
37
+ gap: 8,
38
+ marginTop: 12,
39
+ };
40
+ const LABEL_STYLE = {
41
+ color: '#5f6b7c',
42
+ fontSize: 12,
43
+ };
44
+ const SPACER_STYLE = { flex: 1 };
45
+ const TEXT_STYLE = {
46
+ width: '100%',
47
+ marginTop: 12,
48
+ boxSizing: 'border-box',
49
+ fontFamily: 'ui-monospace, SFMono-Regular, Menlo, monospace',
50
+ fontSize: 12,
51
+ overflowX: 'auto',
52
+ overflowWrap: 'normal',
53
+ whiteSpace: 'pre',
54
+ };
55
+ //# sourceMappingURL=DelimitedTextPanel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DelimitedTextPanel.js","sourceRoot":"","sources":["../../../src/delimited/ui/DelimitedTextPanel.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAEtE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAE1C,OAAO,EAAE,UAAU,EAAE,MAAM,kCAAmC,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAE3E,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC3E,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AA6CrD;;;;;;;;;GASG;AACH,MAAM,UAAU,kBAAkB,CAChC,KAA8B;IAE9B,MAAM,EACJ,IAAI,EACJ,MAAM,EACN,WAAW,EACX,QAAQ,GAAG,OAAO,EAClB,gBAAgB,GAAG,KAAK,EACxB,YAAY,GAAG,IAAI,EACnB,KAAK,GAAG,oBAAoB,EAC5B,MAAM,GAAG,GAAG,GACb,GAAG,KAAK,CAAC;IACV,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAS,gBAAgB,CAAC,CAAC;IAEzE,MAAM,MAAM,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;IAC5C,MAAM,IAAI,GAAG,OAAO,CAClB,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC,EAChE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC,CACjC,CAAC;IAEF,OAAO,CACL,eAAK,SAAS,EAAC,gBAAgB,aAC7B,KAAC,OAAO,IAAC,MAAM,EAAC,SAAS,EAAC,OAAO,QAAC,IAAI,EAAC,WAAW,YAC/C,WAAW,IAAI,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,GACvC,EACV,eAAK,KAAK,EAAE,cAAc,aACxB,eAAM,KAAK,EAAE,WAAW,0BAAkB,EAC1C,KAAC,gBAAgB,IACf,IAAI,EAAC,OAAO,EACZ,OAAO,EAAE,iBAAiB,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;4BAC1C,KAAK,EAAE,MAAM,CAAC,KAAK;4BACnB,KAAK,EAAE,MAAM,CAAC,EAAE;yBACjB,CAAC,CAAC,EACH,KAAK,EAAE,MAAM,CAAC,EAAE,EAChB,aAAa,EAAE,cAAc,GAC7B,EACF,eAAM,KAAK,EAAE,YAAY,GAAI,EAC5B,YAAY,CAAC,CAAC,CAAC,CACd,KAAC,MAAM,IACL,IAAI,EAAC,UAAU,EACf,IAAI,EAAC,MAAM,EACX,IAAI,EAAC,OAAO,EACZ,OAAO,EAAE,GAAG,EAAE,CACZ,YAAY,CACV,IAAI,EACJ,GAAG,gBAAgB,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,SAAS,EAAE,EAC5D,GAAG,MAAM,CAAC,QAAQ,gBAAgB,CACnC,GAEH,CACH,CAAC,CAAC,CAAC,IAAI,EACR,KAAC,UAAU,IAAC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAC,MAAM,EAAC,IAAI,EAAC,WAAW,EAAC,KAAK,SAAG,IAC7D,EACN,mBACE,QAAQ,QACR,KAAK,EAAE,IAAI,EACX,UAAU,EAAE,KAAK,gBACL,KAAK,EACjB,SAAS,EAAC,WAAW,EACrB,KAAK,EAAE,EAAE,GAAG,UAAU,EAAE,MAAM,EAAE,EAChC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,EAAE,GAChD,IACE,CACP,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CAAC,QAAgB;IAC1C,MAAM,IAAI,GAAG,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IAC5E,OAAO,GAAG,IAAI,2DAA2D,CAAC;AAC5E,CAAC;AAED,MAAM,cAAc,GAAG;IACrB,OAAO,EAAE,MAAM;IACf,QAAQ,EAAE,MAAM;IAChB,UAAU,EAAE,QAAQ;IACpB,GAAG,EAAE,CAAC;IACN,SAAS,EAAE,EAAE;CACmB,CAAC;AAEnC,MAAM,WAAW,GAAG;IAClB,KAAK,EAAE,SAAS;IAChB,QAAQ,EAAE,EAAE;CACoB,CAAC;AAEnC,MAAM,YAAY,GAAG,EAAE,IAAI,EAAE,CAAC,EAAmC,CAAC;AAElE,MAAM,UAAU,GAAG;IACjB,KAAK,EAAE,MAAM;IACb,SAAS,EAAE,EAAE;IACb,SAAS,EAAE,YAAY;IACvB,UAAU,EAAE,gDAAgD;IAC5D,QAAQ,EAAE,EAAE;IACZ,SAAS,EAAE,MAAM;IACjB,YAAY,EAAE,QAAQ;IACtB,UAAU,EAAE,KAAK;CACe,CAAC"}
@@ -0,0 +1,5 @@
1
+ export type { DelimitedTextDialogProps } from './DelimitedTextDialog.tsx';
2
+ export { DelimitedTextDialog } from './DelimitedTextDialog.tsx';
3
+ export type { DelimitedTextPanelProps } from './DelimitedTextPanel.tsx';
4
+ export { DelimitedTextPanel } from './DelimitedTextPanel.tsx';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/delimited/ui/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAC1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,YAAY,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AACxE,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { DelimitedTextDialog } from "./DelimitedTextDialog.js";
2
+ export { DelimitedTextPanel } from "./DelimitedTextPanel.js";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/delimited/ui/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA2B,CAAC;AAEhE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAA0B,CAAC"}
@@ -0,0 +1,57 @@
1
+ import type { IconName } from '@blueprintjs/core';
2
+ import type { ReactElement, ReactNode } from 'react';
3
+ /** What a titled section that folds away needs. */
4
+ export interface CollapsibleSectionProps {
5
+ /** The heading, which is also what opens and closes the section. */
6
+ title: ReactNode;
7
+ /** The body, shown only while the section is open. */
8
+ children: ReactNode;
9
+ /**
10
+ * Glyph before the title.
11
+ * @default undefined — only the chevron is drawn
12
+ */
13
+ icon?: IconName;
14
+ /**
15
+ * Whether the section starts open, when the caller does not drive it.
16
+ * @default true
17
+ */
18
+ defaultOpen?: boolean;
19
+ /**
20
+ * Controls beside the heading — a count, a copy button, a menu. They sit
21
+ * outside the heading button, so pressing one does not fold the section.
22
+ * @default undefined
23
+ */
24
+ rightElement?: ReactNode;
25
+ /**
26
+ * Whether the section is open, when a parent drives it — which is what an
27
+ * "expand all" button, or a badge that opens and scrolls to a section, needs.
28
+ * @default undefined — the section keeps its own state
29
+ */
30
+ isOpen?: boolean;
31
+ /**
32
+ * Called when the heading is pressed while a parent drives the section.
33
+ * @default undefined
34
+ */
35
+ onToggle?: () => void;
36
+ /**
37
+ * Identifier of the section element, so a link can jump to it.
38
+ * @default undefined
39
+ */
40
+ id?: string;
41
+ /**
42
+ * Class the section carries, in addition to `collapsible-section`.
43
+ * @default undefined
44
+ */
45
+ className?: string;
46
+ }
47
+ /**
48
+ * A titled block of a page that folds away when its heading is pressed.
49
+ *
50
+ * It works on its own or under a parent: pass `isOpen` and `onToggle` and the
51
+ * caller owns the state, which is what a page needs to open every section at
52
+ * once.
53
+ * @param props - See {@link CollapsibleSectionProps}.
54
+ * @returns The section.
55
+ */
56
+ export declare function CollapsibleSection(props: CollapsibleSectionProps): ReactElement;
57
+ //# sourceMappingURL=CollapsibleSection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CollapsibleSection.d.ts","sourceRoot":"","sources":["../../../src/disclosure/ui/CollapsibleSection.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAElD,OAAO,KAAK,EAAiB,YAAY,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGpE,mDAAmD;AACnD,MAAM,WAAW,uBAAuB;IACtC,oEAAoE;IACpE,KAAK,EAAE,SAAS,CAAC;IACjB,sDAAsD;IACtD,QAAQ,EAAE,SAAS,CAAC;IACpB;;;OAGG;IACH,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;;OAIG;IACH,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB;;;OAGG;IACH,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,uBAAuB,GAC7B,YAAY,CAmDd"}
@@ -0,0 +1,60 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Collapse, Icon } from '@blueprintjs/core';
3
+ import { useState } from 'react';
4
+ /**
5
+ * A titled block of a page that folds away when its heading is pressed.
6
+ *
7
+ * It works on its own or under a parent: pass `isOpen` and `onToggle` and the
8
+ * caller owns the state, which is what a page needs to open every section at
9
+ * once.
10
+ * @param props - See {@link CollapsibleSectionProps}.
11
+ * @returns The section.
12
+ */
13
+ export function CollapsibleSection(props) {
14
+ const { title, children, icon, defaultOpen = true, rightElement, isOpen: openProp, onToggle, id, className, } = props;
15
+ const [openState, setOpenState] = useState(defaultOpen);
16
+ const isControlled = openProp !== undefined;
17
+ const isOpen = isControlled ? openProp : openState;
18
+ function toggle() {
19
+ if (isControlled)
20
+ onToggle?.();
21
+ else
22
+ setOpenState((shown) => !shown);
23
+ }
24
+ return (_jsxs("section", { id: id, className: className === undefined
25
+ ? 'collapsible-section'
26
+ : `collapsible-section ${className}`, children: [_jsxs("div", { style: HEADER_STYLE, children: [_jsxs("button", { type: "button", style: BUTTON_STYLE, "aria-expanded": isOpen, onClick: toggle, children: [_jsx(Icon, { icon: isOpen ? 'chevron-down' : 'chevron-right', size: 14 }), icon === undefined ? null : _jsx(Icon, { icon: icon, size: 14 }), _jsx("span", { style: TITLE_STYLE, children: title })] }), rightElement === undefined ? null : (_jsx("div", { style: RIGHT_STYLE, children: rightElement }))] }), _jsx(Collapse, { isOpen: isOpen, children: _jsx("div", { style: BODY_STYLE, children: children }) })] }));
27
+ }
28
+ const HEADER_STYLE = {
29
+ display: 'flex',
30
+ alignItems: 'center',
31
+ gap: 8,
32
+ };
33
+ const BUTTON_STYLE = {
34
+ display: 'flex',
35
+ flex: '1 1 auto',
36
+ minWidth: 0,
37
+ alignItems: 'center',
38
+ padding: '4px 0',
39
+ border: 0,
40
+ background: 'none',
41
+ color: 'inherit',
42
+ font: 'inherit',
43
+ fontWeight: 600,
44
+ gap: 6,
45
+ textAlign: 'left',
46
+ cursor: 'pointer',
47
+ };
48
+ const TITLE_STYLE = {
49
+ overflow: 'hidden',
50
+ textOverflow: 'ellipsis',
51
+ whiteSpace: 'nowrap',
52
+ };
53
+ const RIGHT_STYLE = {
54
+ display: 'flex',
55
+ flex: '0 0 auto',
56
+ alignItems: 'center',
57
+ gap: 4,
58
+ };
59
+ const BODY_STYLE = { paddingTop: 4 };
60
+ //# sourceMappingURL=CollapsibleSection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CollapsibleSection.js","sourceRoot":"","sources":["../../../src/disclosure/ui/CollapsibleSection.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAEnD,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AA+CjC;;;;;;;;GAQG;AACH,MAAM,UAAU,kBAAkB,CAChC,KAA8B;IAE9B,MAAM,EACJ,KAAK,EACL,QAAQ,EACR,IAAI,EACJ,WAAW,GAAG,IAAI,EAClB,YAAY,EACZ,MAAM,EAAE,QAAQ,EAChB,QAAQ,EACR,EAAE,EACF,SAAS,GACV,GAAG,KAAK,CAAC;IACV,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC;IAExD,MAAM,YAAY,GAAG,QAAQ,KAAK,SAAS,CAAC;IAC5C,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;IAEnD,SAAS,MAAM;QACb,IAAI,YAAY;YAAE,QAAQ,EAAE,EAAE,CAAC;;YAC1B,YAAY,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;IACvC,CAAC;IAED,OAAO,CACL,mBACE,EAAE,EAAE,EAAE,EACN,SAAS,EACP,SAAS,KAAK,SAAS;YACrB,CAAC,CAAC,qBAAqB;YACvB,CAAC,CAAC,uBAAuB,SAAS,EAAE,aAGxC,eAAK,KAAK,EAAE,YAAY,aACtB,kBACE,IAAI,EAAC,QAAQ,EACb,KAAK,EAAE,YAAY,mBACJ,MAAM,EACrB,OAAO,EAAE,MAAM,aAEf,KAAC,IAAI,IAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,eAAe,EAAE,IAAI,EAAE,EAAE,GAAI,EAClE,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAC,IAAI,IAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,GAAI,EAC3D,eAAM,KAAK,EAAE,WAAW,YAAG,KAAK,GAAQ,IACjC,EACR,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CACnC,cAAK,KAAK,EAAE,WAAW,YAAG,YAAY,GAAO,CAC9C,IACG,EACN,KAAC,QAAQ,IAAC,MAAM,EAAE,MAAM,YACtB,cAAK,KAAK,EAAE,UAAU,YAAG,QAAQ,GAAO,GAC/B,IACH,CACX,CAAC;AACJ,CAAC;AAED,MAAM,YAAY,GAAG;IACnB,OAAO,EAAE,MAAM;IACf,UAAU,EAAE,QAAQ;IACpB,GAAG,EAAE,CAAC;CAC0B,CAAC;AAEnC,MAAM,YAAY,GAAG;IACnB,OAAO,EAAE,MAAM;IACf,IAAI,EAAE,UAAU;IAChB,QAAQ,EAAE,CAAC;IACX,UAAU,EAAE,QAAQ;IACpB,OAAO,EAAE,OAAO;IAChB,MAAM,EAAE,CAAC;IACT,UAAU,EAAE,MAAM;IAClB,KAAK,EAAE,SAAS;IAChB,IAAI,EAAE,SAAS;IACf,UAAU,EAAE,GAAG;IACf,GAAG,EAAE,CAAC;IACN,SAAS,EAAE,MAAM;IACjB,MAAM,EAAE,SAAS;CACe,CAAC;AAEnC,MAAM,WAAW,GAAG;IAClB,QAAQ,EAAE,QAAQ;IAClB,YAAY,EAAE,UAAU;IACxB,UAAU,EAAE,QAAQ;CACY,CAAC;AAEnC,MAAM,WAAW,GAAG;IAClB,OAAO,EAAE,MAAM;IACf,IAAI,EAAE,UAAU;IAChB,UAAU,EAAE,QAAQ;IACpB,GAAG,EAAE,CAAC;CAC0B,CAAC;AAEnC,MAAM,UAAU,GAAG,EAAE,UAAU,EAAE,CAAC,EAAmC,CAAC"}
@@ -0,0 +1,5 @@
1
+ export type { CollapsibleSectionProps } from './CollapsibleSection.tsx';
2
+ export { CollapsibleSection } from './CollapsibleSection.tsx';
3
+ export type { Disclosure } from './useDisclosure.ts';
4
+ export { useDisclosure } from './useDisclosure.ts';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/disclosure/ui/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AACxE,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,YAAY,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { CollapsibleSection } from "./CollapsibleSection.js";
2
+ export { useDisclosure } from "./useDisclosure.js";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/disclosure/ui/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAA0B,CAAC;AAE9D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,22 @@
1
+ /** Something that is either shown or not, and the three ways to change that. */
2
+ export interface Disclosure {
3
+ /** Whether the thing is currently shown. */
4
+ isOpen: boolean;
5
+ /** Show it, whatever it was doing. */
6
+ open: () => void;
7
+ /** Hide it, whatever it was doing. */
8
+ close: () => void;
9
+ /** Show it when it is hidden, hide it when it is shown. */
10
+ toggle: () => void;
11
+ }
12
+ /**
13
+ * The open state of a dialog, a menu, a panel or a section.
14
+ *
15
+ * The three actions keep the same identity for the life of the component, so
16
+ * passing `close` to a dialog or a keyboard handler does not re-subscribe it on
17
+ * every render.
18
+ * @param initialOpen - Whether it starts out shown.
19
+ * @returns The state and the three actions.
20
+ */
21
+ export declare function useDisclosure(initialOpen?: boolean): Disclosure;
22
+ //# sourceMappingURL=useDisclosure.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDisclosure.d.ts","sourceRoot":"","sources":["../../../src/disclosure/ui/useDisclosure.ts"],"names":[],"mappings":"AAEA,gFAAgF;AAChF,MAAM,WAAW,UAAU;IACzB,4CAA4C;IAC5C,MAAM,EAAE,OAAO,CAAC;IAChB,sCAAsC;IACtC,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,sCAAsC;IACtC,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,2DAA2D;IAC3D,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB;AAED;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,WAAW,UAAQ,GAAG,UAAU,CAW7D"}
@@ -0,0 +1,18 @@
1
+ import { useCallback, useMemo, useState } from 'react';
2
+ /**
3
+ * The open state of a dialog, a menu, a panel or a section.
4
+ *
5
+ * The three actions keep the same identity for the life of the component, so
6
+ * passing `close` to a dialog or a keyboard handler does not re-subscribe it on
7
+ * every render.
8
+ * @param initialOpen - Whether it starts out shown.
9
+ * @returns The state and the three actions.
10
+ */
11
+ export function useDisclosure(initialOpen = false) {
12
+ const [isOpen, setIsOpen] = useState(initialOpen);
13
+ const open = useCallback(() => setIsOpen(true), []);
14
+ const close = useCallback(() => setIsOpen(false), []);
15
+ const toggle = useCallback(() => setIsOpen((shown) => !shown), []);
16
+ return useMemo(() => ({ isOpen, open, close, toggle }), [isOpen, open, close, toggle]);
17
+ }
18
+ //# sourceMappingURL=useDisclosure.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDisclosure.js","sourceRoot":"","sources":["../../../src/disclosure/ui/useDisclosure.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAcvD;;;;;;;;GAQG;AACH,MAAM,UAAU,aAAa,CAAC,WAAW,GAAG,KAAK;IAC/C,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC;IAElD,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;IACpD,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;IACtD,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;IAEnE,OAAO,OAAO,CACZ,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EACvC,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,CAC9B,CAAC;AACJ,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Hand a blob to the browser as a file the visitor saves.
3
+ *
4
+ * The object URL is released as soon as the click is dispatched, so nothing a
5
+ * page ever downloads is kept alive in memory behind it.
6
+ * @param blob - The bytes to save.
7
+ * @param fileName - Name the browser gives the saved file, extension included.
8
+ */
9
+ export declare function downloadBlob(blob: Blob, fileName: string): void;
10
+ //# sourceMappingURL=downloadBlob.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"downloadBlob.d.ts","sourceRoot":"","sources":["../../../src/download/core/downloadBlob.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAU/D"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Hand a blob to the browser as a file the visitor saves.
3
+ *
4
+ * The object URL is released as soon as the click is dispatched, so nothing a
5
+ * page ever downloads is kept alive in memory behind it.
6
+ * @param blob - The bytes to save.
7
+ * @param fileName - Name the browser gives the saved file, extension included.
8
+ */
9
+ export function downloadBlob(blob, fileName) {
10
+ const url = URL.createObjectURL(blob);
11
+ const anchor = document.createElement('a');
12
+ anchor.href = url;
13
+ anchor.download = fileName;
14
+ // Some browsers ignore a click on an anchor that is not in the document.
15
+ document.body.append(anchor);
16
+ anchor.click();
17
+ anchor.remove();
18
+ URL.revokeObjectURL(url);
19
+ }
20
+ //# sourceMappingURL=downloadBlob.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"downloadBlob.js","sourceRoot":"","sources":["../../../src/download/core/downloadBlob.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,UAAU,YAAY,CAAC,IAAU,EAAE,QAAgB;IACvD,MAAM,GAAG,GAAG,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IACtC,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IAC3C,MAAM,CAAC,IAAI,GAAG,GAAG,CAAC;IAClB,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,yEAAyE;IACzE,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC7B,MAAM,CAAC,KAAK,EAAE,CAAC;IACf,MAAM,CAAC,MAAM,EAAE,CAAC;IAChB,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;AAC3B,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Hand a piece of text to the browser as a file the visitor saves.
3
+ * @param text - The content of the file.
4
+ * @param fileName - Name the browser gives the saved file, extension included.
5
+ * @param mimeType - What the content is, so the system opens it with the right
6
+ * application.
7
+ */
8
+ export declare function downloadText(text: string, fileName: string, mimeType?: string): void;
9
+ //# sourceMappingURL=downloadText.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"downloadText.d.ts","sourceRoot":"","sources":["../../../src/download/core/downloadText.ts"],"names":[],"mappings":"AAKA;;;;;;GAMG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,QAAQ,GAAE,MAA0B,GACnC,IAAI,CAEN"}
@@ -0,0 +1,14 @@
1
+ import { downloadBlob } from "./downloadBlob.js";
2
+ /** What a file of text is taken to be when the caller does not say. */
3
+ const DEFAULT_MIME_TYPE = 'text/plain;charset=utf-8';
4
+ /**
5
+ * Hand a piece of text to the browser as a file the visitor saves.
6
+ * @param text - The content of the file.
7
+ * @param fileName - Name the browser gives the saved file, extension included.
8
+ * @param mimeType - What the content is, so the system opens it with the right
9
+ * application.
10
+ */
11
+ export function downloadText(text, fileName, mimeType = DEFAULT_MIME_TYPE) {
12
+ downloadBlob(new Blob([text], { type: mimeType }), fileName);
13
+ }
14
+ //# sourceMappingURL=downloadText.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"downloadText.js","sourceRoot":"","sources":["../../../src/download/core/downloadText.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,uEAAuE;AACvE,MAAM,iBAAiB,GAAG,0BAA0B,CAAC;AAErD;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAC1B,IAAY,EACZ,QAAgB,EAChB,WAAmB,iBAAiB;IAEpC,YAAY,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC;AAC/D,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { downloadBlob } from './downloadBlob.ts';
2
+ export { downloadText } from './downloadText.ts';
3
+ export { sanitizeFileName } from './sanitizeFileName.ts';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/download/core/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { downloadBlob } from "./downloadBlob.js";
2
+ export { downloadText } from "./downloadText.js";
3
+ export { sanitizeFileName } from "./sanitizeFileName.js";
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/download/core/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Turn whatever a molecule, a list or a page is called into a name a file
3
+ * system takes.
4
+ *
5
+ * The name usually comes from something the visitor typed or from a record
6
+ * that was downloaded, so it may carry a path, a newline, or nothing at all.
7
+ * Path separators become hyphens rather than disappearing, so the parts of the
8
+ * name stay readable, and a name left empty falls back rather than saving a
9
+ * file with no name at all.
10
+ * @param name - What the file should be called.
11
+ * @param fallback - Name used when nothing usable is left.
12
+ * @returns A file name safe to pass to a download.
13
+ */
14
+ export declare function sanitizeFileName(name: string, fallback?: string): string;
15
+ //# sourceMappingURL=sanitizeFileName.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sanitizeFileName.d.ts","sourceRoot":"","sources":["../../../src/download/core/sanitizeFileName.ts"],"names":[],"mappings":"AAUA;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,SAAa,GAAG,MAAM,CAS5E"}
@@ -0,0 +1,33 @@
1
+ // Windows refuses these outright, and they read as syntax in a shell.
2
+ const RESERVED = /["*:<>?|]/gu;
3
+ const PATH_SEPARATOR = /[/\\]/gu;
4
+ // Control characters that are not whitespace: a newline is folded into a space
5
+ // below rather than dropped, so a pasted two-line name stays readable.
6
+ const CONTROL = /[^\P{Cc}\s]/gu;
7
+ const WHITESPACE = /\s+/gu;
8
+ const LEADING = /^[\s.-]+/u;
9
+ const TRAILING = /[\s.]+$/u;
10
+ /**
11
+ * Turn whatever a molecule, a list or a page is called into a name a file
12
+ * system takes.
13
+ *
14
+ * The name usually comes from something the visitor typed or from a record
15
+ * that was downloaded, so it may carry a path, a newline, or nothing at all.
16
+ * Path separators become hyphens rather than disappearing, so the parts of the
17
+ * name stay readable, and a name left empty falls back rather than saving a
18
+ * file with no name at all.
19
+ * @param name - What the file should be called.
20
+ * @param fallback - Name used when nothing usable is left.
21
+ * @returns A file name safe to pass to a download.
22
+ */
23
+ export function sanitizeFileName(name, fallback = 'download') {
24
+ const cleaned = name
25
+ .replaceAll(CONTROL, '')
26
+ .replaceAll(PATH_SEPARATOR, '-')
27
+ .replaceAll(RESERVED, '')
28
+ .replaceAll(WHITESPACE, ' ')
29
+ .replace(LEADING, '')
30
+ .replace(TRAILING, '');
31
+ return cleaned === '' ? fallback : cleaned;
32
+ }
33
+ //# sourceMappingURL=sanitizeFileName.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sanitizeFileName.js","sourceRoot":"","sources":["../../../src/download/core/sanitizeFileName.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,MAAM,QAAQ,GAAG,aAAa,CAAC;AAC/B,MAAM,cAAc,GAAG,SAAS,CAAC;AACjC,+EAA+E;AAC/E,uEAAuE;AACvE,MAAM,OAAO,GAAG,eAAe,CAAC;AAChC,MAAM,UAAU,GAAG,OAAO,CAAC;AAC3B,MAAM,OAAO,GAAG,WAAW,CAAC;AAC5B,MAAM,QAAQ,GAAG,UAAU,CAAC;AAE5B;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAY,EAAE,QAAQ,GAAG,UAAU;IAClE,MAAM,OAAO,GAAG,IAAI;SACjB,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC;SACvB,UAAU,CAAC,cAAc,EAAE,GAAG,CAAC;SAC/B,UAAU,CAAC,QAAQ,EAAE,EAAE,CAAC;SACxB,UAAU,CAAC,UAAU,EAAE,GAAG,CAAC;SAC3B,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;SACpB,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IACzB,OAAO,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;AAC7C,CAAC"}
@@ -1,3 +1,6 @@
1
+ export { renderEcosystemLinksHtml } from './links.ts';
2
+ export { findSiteByHost, siteById } from './lookup.ts';
1
3
  export type { EcosystemSite, SiteId, SiteMarkColors, SiteName, } from './sites.ts';
2
4
  export { ECOSYSTEM_SITES, siteUrl } from './sites.ts';
5
+ export { siteThemeColor, siteTokensCss } from './tokens.ts';
3
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ecosystem/core/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,aAAa,EACb,MAAM,EACN,cAAc,EACd,QAAQ,GACT,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ecosystem/core/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvD,YAAY,EACV,aAAa,EACb,MAAM,EACN,cAAc,EACd,QAAQ,GACT,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC"}
@@ -1,2 +1,5 @@
1
+ export { renderEcosystemLinksHtml } from "./links.js";
2
+ export { findSiteByHost, siteById } from "./lookup.js";
1
3
  export { ECOSYSTEM_SITES, siteUrl } from "./sites.js";
4
+ export { siteThemeColor, siteTokensCss } from "./tokens.js";
2
5
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/ecosystem/core/index.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/ecosystem/core/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAOvD,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Every site of the family as a plain list of links, for the `<noscript>` of a
3
+ * page whose body is an empty root element.
4
+ *
5
+ * A crawler that runs no script sees nothing else of the page, so this is the
6
+ * only path it has from one of our tools to the next — and each entry carries
7
+ * the line saying what it opens, as real text.
8
+ * @returns The `<ul>`, for the caller to place inside its own `<noscript>`.
9
+ */
10
+ export declare function renderEcosystemLinksHtml(): string;
11
+ //# sourceMappingURL=links.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"links.d.ts","sourceRoot":"","sources":["../../../src/ecosystem/core/links.ts"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,IAAI,MAAM,CASjD"}
@@ -0,0 +1,28 @@
1
+ import { ECOSYSTEM_SITES, siteUrl } from "./sites.js";
2
+ /**
3
+ * Every site of the family as a plain list of links, for the `<noscript>` of a
4
+ * page whose body is an empty root element.
5
+ *
6
+ * A crawler that runs no script sees nothing else of the page, so this is the
7
+ * only path it has from one of our tools to the next — and each entry carries
8
+ * the line saying what it opens, as real text.
9
+ * @returns The `<ul>`, for the caller to place inside its own `<noscript>`.
10
+ */
11
+ export function renderEcosystemLinksHtml() {
12
+ let html = '<ul class="ecosystem-links">\n';
13
+ for (const site of ECOSYSTEM_SITES) {
14
+ const href = escapeHtml(siteUrl(site));
15
+ const host = escapeHtml(site.host);
16
+ const tagline = escapeHtml(site.tagline);
17
+ html += `<li><a href="${href}">${host}</a> — ${tagline}</li>\n`;
18
+ }
19
+ return `${html}</ul>\n`;
20
+ }
21
+ function escapeHtml(value) {
22
+ return value
23
+ .replaceAll('&', '&amp;')
24
+ .replaceAll('<', '&lt;')
25
+ .replaceAll('>', '&gt;')
26
+ .replaceAll('"', '&quot;');
27
+ }
28
+ //# sourceMappingURL=links.js.map