react-cheminfo 0.2.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.
- package/README.md +139 -10
- package/lib/capsule/ui/CapsuleFilter.d.ts +61 -0
- package/lib/capsule/ui/CapsuleFilter.d.ts.map +1 -0
- package/lib/capsule/ui/CapsuleFilter.js +33 -0
- package/lib/capsule/ui/CapsuleFilter.js.map +1 -0
- package/lib/capsule/ui/index.d.ts +3 -0
- package/lib/capsule/ui/index.d.ts.map +1 -0
- package/lib/capsule/ui/index.js +2 -0
- package/lib/capsule/ui/index.js.map +1 -0
- package/lib/chrome/ui/NavLink.d.ts +27 -0
- package/lib/chrome/ui/NavLink.d.ts.map +1 -0
- package/lib/chrome/ui/NavLink.js +36 -0
- package/lib/chrome/ui/NavLink.js.map +1 -0
- package/lib/chrome/ui/NavMenuButton.d.ts +40 -0
- package/lib/chrome/ui/NavMenuButton.d.ts.map +1 -0
- package/lib/chrome/ui/NavMenuButton.js +26 -0
- package/lib/chrome/ui/NavMenuButton.js.map +1 -0
- package/lib/chrome/ui/SiteFooter.d.ts +39 -0
- package/lib/chrome/ui/SiteFooter.d.ts.map +1 -0
- package/lib/chrome/ui/SiteFooter.js +17 -0
- package/lib/chrome/ui/SiteFooter.js.map +1 -0
- package/lib/chrome/ui/SiteHeader.d.ts +59 -0
- package/lib/chrome/ui/SiteHeader.d.ts.map +1 -0
- package/lib/chrome/ui/SiteHeader.js +28 -0
- package/lib/chrome/ui/SiteHeader.js.map +1 -0
- package/lib/chrome/ui/index.d.ts +12 -0
- package/lib/chrome/ui/index.d.ts.map +1 -0
- package/lib/chrome/ui/index.js +6 -0
- package/lib/chrome/ui/index.js.map +1 -0
- package/lib/chrome/ui/navItem.d.ts +57 -0
- package/lib/chrome/ui/navItem.d.ts.map +1 -0
- package/lib/chrome/ui/navItem.js +10 -0
- package/lib/chrome/ui/navItem.js.map +1 -0
- package/lib/chrome/ui/useCompactHeader.d.ts +31 -0
- package/lib/chrome/ui/useCompactHeader.d.ts.map +1 -0
- package/lib/chrome/ui/useCompactHeader.js +50 -0
- package/lib/chrome/ui/useCompactHeader.js.map +1 -0
- package/lib/citation/core/clipboard.d.ts +12 -3
- package/lib/citation/core/clipboard.d.ts.map +1 -1
- package/lib/citation/core/clipboard.js +21 -10
- package/lib/citation/core/clipboard.js.map +1 -1
- package/lib/citation/core/download.d.ts +11 -3
- package/lib/citation/core/download.d.ts.map +1 -1
- package/lib/citation/core/download.js +17 -13
- package/lib/citation/core/download.js.map +1 -1
- package/lib/citation/core/index.d.ts +4 -3
- package/lib/citation/core/index.d.ts.map +1 -1
- package/lib/citation/core/index.js +3 -3
- package/lib/citation/core/index.js.map +1 -1
- package/lib/citation/core/works.d.ts +44 -0
- package/lib/citation/core/works.d.ts.map +1 -0
- package/lib/citation/core/works.js +51 -0
- package/lib/citation/core/works.js.map +1 -0
- package/lib/citation/ui/CitationMenu.d.ts +20 -3
- package/lib/citation/ui/CitationMenu.d.ts.map +1 -1
- package/lib/citation/ui/CitationMenu.js +60 -49
- package/lib/citation/ui/CitationMenu.js.map +1 -1
- package/lib/citation/ui/CitationPreview.d.ts +5 -2
- package/lib/citation/ui/CitationPreview.d.ts.map +1 -1
- package/lib/citation/ui/CitationPreview.js +9 -4
- package/lib/citation/ui/CitationPreview.js.map +1 -1
- package/lib/citation/ui/CiteButton.d.ts +13 -6
- package/lib/citation/ui/CiteButton.d.ts.map +1 -1
- package/lib/citation/ui/CiteButton.js +5 -4
- package/lib/citation/ui/CiteButton.js.map +1 -1
- package/lib/citation/ui/CopyFormatEntries.d.ts +31 -0
- package/lib/citation/ui/CopyFormatEntries.d.ts.map +1 -0
- package/lib/citation/ui/CopyFormatEntries.js +29 -0
- package/lib/citation/ui/CopyFormatEntries.js.map +1 -0
- package/lib/citation/ui/WorkEntry.d.ts +18 -0
- package/lib/citation/ui/WorkEntry.d.ts.map +1 -0
- package/lib/citation/ui/WorkEntry.js +32 -0
- package/lib/citation/ui/WorkEntry.js.map +1 -0
- package/lib/citation/ui/entries.d.ts +7 -7
- package/lib/citation/ui/entries.d.ts.map +1 -1
- package/lib/citation/ui/entries.js +11 -13
- package/lib/citation/ui/entries.js.map +1 -1
- package/lib/citation/ui/index.d.ts +2 -2
- package/lib/citation/ui/index.d.ts.map +1 -1
- package/lib/citation/ui/index.js.map +1 -1
- package/lib/citation/ui/useCopyFeedback.d.ts +20 -0
- package/lib/citation/ui/useCopyFeedback.d.ts.map +1 -0
- package/lib/citation/ui/useCopyFeedback.js +49 -0
- package/lib/citation/ui/useCopyFeedback.js.map +1 -0
- package/lib/clipboard/core/index.d.ts +2 -0
- package/lib/clipboard/core/index.d.ts.map +1 -0
- package/lib/clipboard/core/index.js +2 -0
- package/lib/clipboard/core/index.js.map +1 -0
- package/lib/clipboard/core/writeToClipboard.d.ts +12 -0
- package/lib/clipboard/core/writeToClipboard.d.ts.map +1 -0
- package/lib/clipboard/core/writeToClipboard.js +49 -0
- package/lib/clipboard/core/writeToClipboard.js.map +1 -0
- package/lib/clipboard/ui/CodeBlock.d.ts +43 -0
- package/lib/clipboard/ui/CodeBlock.d.ts.map +1 -0
- package/lib/clipboard/ui/CodeBlock.js +49 -0
- package/lib/clipboard/ui/CodeBlock.js.map +1 -0
- package/lib/clipboard/ui/CopyButton.d.ts +64 -0
- package/lib/clipboard/ui/CopyButton.d.ts.map +1 -0
- package/lib/clipboard/ui/CopyButton.js +21 -0
- package/lib/clipboard/ui/CopyButton.js.map +1 -0
- package/lib/clipboard/ui/index.d.ts +7 -0
- package/lib/clipboard/ui/index.d.ts.map +1 -0
- package/lib/clipboard/ui/index.js +4 -0
- package/lib/clipboard/ui/index.js.map +1 -0
- package/lib/clipboard/ui/useCopyToClipboard.d.ts +24 -0
- package/lib/clipboard/ui/useCopyToClipboard.d.ts.map +1 -0
- package/lib/clipboard/ui/useCopyToClipboard.js +36 -0
- package/lib/clipboard/ui/useCopyToClipboard.js.map +1 -0
- package/lib/color/core/contrast.d.ts +43 -0
- package/lib/color/core/contrast.d.ts.map +1 -0
- package/lib/color/core/contrast.js +61 -0
- package/lib/color/core/contrast.js.map +1 -0
- package/lib/color/core/hex.d.ts +26 -0
- package/lib/color/core/hex.d.ts.map +1 -0
- package/lib/color/core/hex.js +44 -0
- package/lib/color/core/hex.js.map +1 -0
- package/lib/color/core/index.d.ts +5 -0
- package/lib/color/core/index.d.ts.map +1 -0
- package/lib/color/core/index.js +3 -0
- package/lib/color/core/index.js.map +1 -0
- package/lib/color/core/scale.d.ts +52 -0
- package/lib/color/core/scale.d.ts.map +1 -0
- package/lib/color/core/scale.js +96 -0
- package/lib/color/core/scale.js.map +1 -0
- package/lib/color/ui/ColorScaleLegend.d.ts +38 -0
- package/lib/color/ui/ColorScaleLegend.d.ts.map +1 -0
- package/lib/color/ui/ColorScaleLegend.js +68 -0
- package/lib/color/ui/ColorScaleLegend.js.map +1 -0
- package/lib/color/ui/index.d.ts +3 -0
- package/lib/color/ui/index.d.ts.map +1 -0
- package/lib/color/ui/index.js +2 -0
- package/lib/color/ui/index.js.map +1 -0
- package/lib/core.d.ts +12 -0
- package/lib/core.d.ts.map +1 -1
- package/lib/core.js +12 -0
- package/lib/core.js.map +1 -1
- package/lib/credits/core/credits.d.ts +144 -0
- package/lib/credits/core/credits.d.ts.map +1 -0
- package/lib/credits/core/credits.js +156 -0
- package/lib/credits/core/credits.js.map +1 -0
- package/lib/credits/core/index.d.ts +3 -0
- package/lib/credits/core/index.d.ts.map +1 -0
- package/lib/credits/core/index.js +2 -0
- package/lib/credits/core/index.js.map +1 -0
- package/lib/credits/ui/CreditsList.d.ts +29 -0
- package/lib/credits/ui/CreditsList.d.ts.map +1 -0
- package/lib/credits/ui/CreditsList.js +33 -0
- package/lib/credits/ui/CreditsList.js.map +1 -0
- package/lib/credits/ui/index.d.ts +3 -0
- package/lib/credits/ui/index.d.ts.map +1 -0
- package/lib/credits/ui/index.js +2 -0
- package/lib/credits/ui/index.js.map +1 -0
- package/lib/delimited/core/delimiters.d.ts +31 -0
- package/lib/delimited/core/delimiters.d.ts.map +1 -0
- package/lib/delimited/core/delimiters.js +46 -0
- package/lib/delimited/core/delimiters.js.map +1 -0
- package/lib/delimited/core/index.d.ts +9 -0
- package/lib/delimited/core/index.d.ts.map +1 -0
- package/lib/delimited/core/index.js +5 -0
- package/lib/delimited/core/index.js.map +1 -0
- package/lib/delimited/core/readDelimited.d.ts +32 -0
- package/lib/delimited/core/readDelimited.d.ts.map +1 -0
- package/lib/delimited/core/readDelimited.js +122 -0
- package/lib/delimited/core/readDelimited.js.map +1 -0
- package/lib/delimited/core/rowsToDelimited.d.ts +59 -0
- package/lib/delimited/core/rowsToDelimited.d.ts.map +1 -0
- package/lib/delimited/core/rowsToDelimited.js +87 -0
- package/lib/delimited/core/rowsToDelimited.js.map +1 -0
- package/lib/delimited/core/toDelimited.d.ts +38 -0
- package/lib/delimited/core/toDelimited.d.ts.map +1 -0
- package/lib/delimited/core/toDelimited.js +45 -0
- package/lib/delimited/core/toDelimited.js.map +1 -0
- package/lib/delimited/ui/DelimitedTextDialog.d.ts +22 -0
- package/lib/delimited/ui/DelimitedTextDialog.d.ts.map +1 -0
- package/lib/delimited/ui/DelimitedTextDialog.js +17 -0
- package/lib/delimited/ui/DelimitedTextDialog.js.map +1 -0
- package/lib/delimited/ui/DelimitedTextPanel.d.ts +56 -0
- package/lib/delimited/ui/DelimitedTextPanel.d.ts.map +1 -0
- package/lib/delimited/ui/DelimitedTextPanel.js +55 -0
- package/lib/delimited/ui/DelimitedTextPanel.js.map +1 -0
- package/lib/delimited/ui/index.d.ts +5 -0
- package/lib/delimited/ui/index.d.ts.map +1 -0
- package/lib/delimited/ui/index.js +3 -0
- package/lib/delimited/ui/index.js.map +1 -0
- package/lib/disclosure/ui/CollapsibleSection.d.ts +57 -0
- package/lib/disclosure/ui/CollapsibleSection.d.ts.map +1 -0
- package/lib/disclosure/ui/CollapsibleSection.js +60 -0
- package/lib/disclosure/ui/CollapsibleSection.js.map +1 -0
- package/lib/disclosure/ui/index.d.ts +5 -0
- package/lib/disclosure/ui/index.d.ts.map +1 -0
- package/lib/disclosure/ui/index.js +3 -0
- package/lib/disclosure/ui/index.js.map +1 -0
- package/lib/disclosure/ui/useDisclosure.d.ts +22 -0
- package/lib/disclosure/ui/useDisclosure.d.ts.map +1 -0
- package/lib/disclosure/ui/useDisclosure.js +18 -0
- package/lib/disclosure/ui/useDisclosure.js.map +1 -0
- package/lib/download/core/downloadBlob.d.ts +10 -0
- package/lib/download/core/downloadBlob.d.ts.map +1 -0
- package/lib/download/core/downloadBlob.js +20 -0
- package/lib/download/core/downloadBlob.js.map +1 -0
- package/lib/download/core/downloadText.d.ts +9 -0
- package/lib/download/core/downloadText.d.ts.map +1 -0
- package/lib/download/core/downloadText.js +14 -0
- package/lib/download/core/downloadText.js.map +1 -0
- package/lib/download/core/index.d.ts +4 -0
- package/lib/download/core/index.d.ts.map +1 -0
- package/lib/download/core/index.js +4 -0
- package/lib/download/core/index.js.map +1 -0
- package/lib/download/core/sanitizeFileName.d.ts +15 -0
- package/lib/download/core/sanitizeFileName.d.ts.map +1 -0
- package/lib/download/core/sanitizeFileName.js +33 -0
- package/lib/download/core/sanitizeFileName.js.map +1 -0
- package/lib/ecosystem/core/index.d.ts +3 -0
- package/lib/ecosystem/core/index.d.ts.map +1 -1
- package/lib/ecosystem/core/index.js +3 -0
- package/lib/ecosystem/core/index.js.map +1 -1
- package/lib/ecosystem/core/links.d.ts +11 -0
- package/lib/ecosystem/core/links.d.ts.map +1 -0
- package/lib/ecosystem/core/links.js +28 -0
- package/lib/ecosystem/core/links.js.map +1 -0
- package/lib/ecosystem/core/lookup.d.ts +21 -0
- package/lib/ecosystem/core/lookup.d.ts.map +1 -0
- package/lib/ecosystem/core/lookup.js +40 -0
- package/lib/ecosystem/core/lookup.js.map +1 -0
- package/lib/ecosystem/core/sites.d.ts +3 -1
- package/lib/ecosystem/core/sites.d.ts.map +1 -1
- package/lib/ecosystem/core/sites.js +33 -0
- package/lib/ecosystem/core/sites.js.map +1 -1
- package/lib/ecosystem/core/tokens.d.ts +21 -0
- package/lib/ecosystem/core/tokens.d.ts.map +1 -0
- package/lib/ecosystem/core/tokens.js +42 -0
- package/lib/ecosystem/core/tokens.js.map +1 -0
- package/lib/ecosystem/ui/SiteTheme.d.ts +18 -0
- package/lib/ecosystem/ui/SiteTheme.d.ts.map +1 -0
- package/lib/ecosystem/ui/SiteTheme.js +16 -0
- package/lib/ecosystem/ui/SiteTheme.js.map +1 -0
- package/lib/ecosystem/ui/Wordmark.d.ts +30 -0
- package/lib/ecosystem/ui/Wordmark.d.ts.map +1 -0
- package/lib/ecosystem/ui/Wordmark.js +26 -0
- package/lib/ecosystem/ui/Wordmark.js.map +1 -0
- package/lib/ecosystem/ui/glyphs.d.ts +16 -0
- package/lib/ecosystem/ui/glyphs.d.ts.map +1 -0
- package/lib/ecosystem/ui/glyphs.js +41 -0
- package/lib/ecosystem/ui/glyphs.js.map +1 -0
- package/lib/ecosystem/ui/index.d.ts +4 -0
- package/lib/ecosystem/ui/index.d.ts.map +1 -1
- package/lib/ecosystem/ui/index.js +2 -0
- package/lib/ecosystem/ui/index.js.map +1 -1
- package/lib/ecosystem/ui/marks.d.ts +30 -4
- package/lib/ecosystem/ui/marks.d.ts.map +1 -1
- package/lib/ecosystem/ui/marks.js +15 -36
- package/lib/ecosystem/ui/marks.js.map +1 -1
- package/lib/error/ui/ErrorBoundary.d.ts +60 -0
- package/lib/error/ui/ErrorBoundary.d.ts.map +1 -0
- package/lib/error/ui/ErrorBoundary.js +59 -0
- package/lib/error/ui/ErrorBoundary.js.map +1 -0
- package/lib/error/ui/ErrorFallback.d.ts +38 -0
- package/lib/error/ui/ErrorFallback.d.ts.map +1 -0
- package/lib/error/ui/ErrorFallback.js +16 -0
- package/lib/error/ui/ErrorFallback.js.map +1 -0
- package/lib/error/ui/index.d.ts +5 -0
- package/lib/error/ui/index.d.ts.map +1 -0
- package/lib/error/ui/index.js +3 -0
- package/lib/error/ui/index.js.map +1 -0
- package/lib/error/ui/toError.d.ts +11 -0
- package/lib/error/ui/toError.d.ts.map +1 -0
- package/lib/error/ui/toError.js +35 -0
- package/lib/error/ui/toError.js.map +1 -0
- package/lib/format/core/index.d.ts +5 -0
- package/lib/format/core/index.d.ts.map +1 -0
- package/lib/format/core/index.js +5 -0
- package/lib/format/core/index.js.map +1 -0
- package/lib/format/core/missing.d.ts +7 -0
- package/lib/format/core/missing.d.ts.map +1 -0
- package/lib/format/core/missing.js +7 -0
- package/lib/format/core/missing.js.map +1 -0
- package/lib/format/core/numbers.d.ts +40 -0
- package/lib/format/core/numbers.d.ts.map +1 -0
- package/lib/format/core/numbers.js +81 -0
- package/lib/format/core/numbers.js.map +1 -0
- package/lib/format/core/units.d.ts +17 -0
- package/lib/format/core/units.d.ts.map +1 -0
- package/lib/format/core/units.js +54 -0
- package/lib/format/core/units.js.map +1 -0
- package/lib/format/core/words.d.ts +12 -0
- package/lib/format/core/words.d.ts.map +1 -0
- package/lib/format/core/words.js +14 -0
- package/lib/format/core/words.js.map +1 -0
- package/lib/help/ui/HelpBody.d.ts +57 -0
- package/lib/help/ui/HelpBody.d.ts.map +1 -0
- package/lib/help/ui/HelpBody.js +44 -0
- package/lib/help/ui/HelpBody.js.map +1 -0
- package/lib/help/ui/HelpIcon.d.ts +33 -0
- package/lib/help/ui/HelpIcon.d.ts.map +1 -0
- package/lib/help/ui/HelpIcon.js +16 -0
- package/lib/help/ui/HelpIcon.js.map +1 -0
- package/lib/help/ui/HelpToolbarButton.d.ts +45 -0
- package/lib/help/ui/HelpToolbarButton.d.ts.map +1 -0
- package/lib/help/ui/HelpToolbarButton.js +17 -0
- package/lib/help/ui/HelpToolbarButton.js.map +1 -0
- package/lib/help/ui/HelpTooltip.d.ts +36 -0
- package/lib/help/ui/HelpTooltip.d.ts.map +1 -0
- package/lib/help/ui/HelpTooltip.js +24 -0
- package/lib/help/ui/HelpTooltip.js.map +1 -0
- package/lib/help/ui/index.d.ts +9 -0
- package/lib/help/ui/index.d.ts.map +1 -0
- package/lib/help/ui/index.js +5 -0
- package/lib/help/ui/index.js.map +1 -0
- package/lib/hooks/ui/index.d.ts +7 -0
- package/lib/hooks/ui/index.d.ts.map +1 -0
- package/lib/hooks/ui/index.js +5 -0
- package/lib/hooks/ui/index.js.map +1 -0
- package/lib/hooks/ui/listNavigation.d.ts +54 -0
- package/lib/hooks/ui/listNavigation.d.ts.map +1 -0
- package/lib/hooks/ui/listNavigation.js +77 -0
- package/lib/hooks/ui/listNavigation.js.map +1 -0
- package/lib/hooks/ui/useContainerSize.d.ts +15 -0
- package/lib/hooks/ui/useContainerSize.d.ts.map +1 -0
- package/lib/hooks/ui/useContainerSize.js +24 -0
- package/lib/hooks/ui/useContainerSize.js.map +1 -0
- package/lib/hooks/ui/useDebouncedValue.d.ts +12 -0
- package/lib/hooks/ui/useDebouncedValue.d.ts.map +1 -0
- package/lib/hooks/ui/useDebouncedValue.js +24 -0
- package/lib/hooks/ui/useDebouncedValue.js.map +1 -0
- package/lib/hooks/ui/useListKeyboardNavigation.d.ts +17 -0
- package/lib/hooks/ui/useListKeyboardNavigation.d.ts.map +1 -0
- package/lib/hooks/ui/useListKeyboardNavigation.js +25 -0
- package/lib/hooks/ui/useListKeyboardNavigation.js.map +1 -0
- package/lib/hooks/ui/useResizeObserver.d.ts +20 -0
- package/lib/hooks/ui/useResizeObserver.d.ts.map +1 -0
- package/lib/hooks/ui/useResizeObserver.js +37 -0
- package/lib/hooks/ui/useResizeObserver.js.map +1 -0
- package/lib/orbital/core/atomicGrid.d.ts +85 -0
- package/lib/orbital/core/atomicGrid.d.ts.map +1 -0
- package/lib/orbital/core/atomicGrid.js +105 -0
- package/lib/orbital/core/atomicGrid.js.map +1 -0
- package/lib/orbital/core/atomicOrbitals.d.ts +97 -0
- package/lib/orbital/core/atomicOrbitals.d.ts.map +1 -0
- package/lib/orbital/core/atomicOrbitals.js +135 -0
- package/lib/orbital/core/atomicOrbitals.js.map +1 -0
- package/lib/orbital/core/constants.d.ts +33 -0
- package/lib/orbital/core/constants.d.ts.map +1 -0
- package/lib/orbital/core/constants.js +21 -0
- package/lib/orbital/core/constants.js.map +1 -0
- package/lib/orbital/core/electronConfiguration.d.ts +106 -0
- package/lib/orbital/core/electronConfiguration.d.ts.map +1 -0
- package/lib/orbital/core/electronConfiguration.js +207 -0
- package/lib/orbital/core/electronConfiguration.js.map +1 -0
- package/lib/orbital/core/grid.d.ts +60 -0
- package/lib/orbital/core/grid.d.ts.map +1 -0
- package/lib/orbital/core/grid.js +81 -0
- package/lib/orbital/core/grid.js.map +1 -0
- package/lib/orbital/core/hydrogenic.d.ts +99 -0
- package/lib/orbital/core/hydrogenic.d.ts.map +1 -0
- package/lib/orbital/core/hydrogenic.js +181 -0
- package/lib/orbital/core/hydrogenic.js.map +1 -0
- package/lib/orbital/core/index.d.ts +24 -0
- package/lib/orbital/core/index.d.ts.map +1 -0
- package/lib/orbital/core/index.js +13 -0
- package/lib/orbital/core/index.js.map +1 -0
- package/lib/orbital/core/isovalue.d.ts +60 -0
- package/lib/orbital/core/isovalue.d.ts.map +1 -0
- package/lib/orbital/core/isovalue.js +128 -0
- package/lib/orbital/core/isovalue.js.map +1 -0
- package/lib/orbital/core/numerics.d.ts +39 -0
- package/lib/orbital/core/numerics.d.ts.map +1 -0
- package/lib/orbital/core/numerics.js +75 -0
- package/lib/orbital/core/numerics.js.map +1 -0
- package/lib/orbital/core/occupancy.d.ts +44 -0
- package/lib/orbital/core/occupancy.d.ts.map +1 -0
- package/lib/orbital/core/occupancy.js +85 -0
- package/lib/orbital/core/occupancy.js.map +1 -0
- package/lib/orbital/core/palette.d.ts +36 -0
- package/lib/orbital/core/palette.d.ts.map +1 -0
- package/lib/orbital/core/palette.js +37 -0
- package/lib/orbital/core/palette.js.map +1 -0
- package/lib/orbital/core/realHarmonics.d.ts +57 -0
- package/lib/orbital/core/realHarmonics.d.ts.map +1 -0
- package/lib/orbital/core/realHarmonics.js +144 -0
- package/lib/orbital/core/realHarmonics.js.map +1 -0
- package/lib/orbital/core/sample.d.ts +66 -0
- package/lib/orbital/core/sample.d.ts.map +1 -0
- package/lib/orbital/core/sample.js +61 -0
- package/lib/orbital/core/sample.js.map +1 -0
- package/lib/orbital/core/screening.d.ts +46 -0
- package/lib/orbital/core/screening.d.ts.map +1 -0
- package/lib/orbital/core/screening.js +72 -0
- package/lib/orbital/core/screening.js.map +1 -0
- package/lib/orbital/ui/AtomicOrbitalCanvas.d.ts +62 -0
- package/lib/orbital/ui/AtomicOrbitalCanvas.d.ts.map +1 -0
- package/lib/orbital/ui/AtomicOrbitalCanvas.js +115 -0
- package/lib/orbital/ui/AtomicOrbitalCanvas.js.map +1 -0
- package/lib/orbital/ui/AtomicOrbitalViewer.d.ts +77 -0
- package/lib/orbital/ui/AtomicOrbitalViewer.d.ts.map +1 -0
- package/lib/orbital/ui/AtomicOrbitalViewer.js +49 -0
- package/lib/orbital/ui/AtomicOrbitalViewer.js.map +1 -0
- package/lib/orbital/ui/camera.d.ts +36 -0
- package/lib/orbital/ui/camera.d.ts.map +1 -0
- package/lib/orbital/ui/camera.js +98 -0
- package/lib/orbital/ui/camera.js.map +1 -0
- package/lib/orbital/ui/capability.d.ts +28 -0
- package/lib/orbital/ui/capability.d.ts.map +1 -0
- package/lib/orbital/ui/capability.js +77 -0
- package/lib/orbital/ui/capability.js.map +1 -0
- package/lib/orbital/ui/index.d.ts +17 -0
- package/lib/orbital/ui/index.d.ts.map +1 -0
- package/lib/orbital/ui/index.js +13 -0
- package/lib/orbital/ui/index.js.map +1 -0
- package/lib/orbital/ui/renderVolume.d.ts +60 -0
- package/lib/orbital/ui/renderVolume.d.ts.map +1 -0
- package/lib/orbital/ui/renderVolume.js +119 -0
- package/lib/orbital/ui/renderVolume.js.map +1 -0
- package/lib/orbital/ui/viewer.d.ts +88 -0
- package/lib/orbital/ui/viewer.d.ts.map +1 -0
- package/lib/orbital/ui/viewer.js +156 -0
- package/lib/orbital/ui/viewer.js.map +1 -0
- package/lib/orbital/ui/volumeField.d.ts +33 -0
- package/lib/orbital/ui/volumeField.d.ts.map +1 -0
- package/lib/orbital/ui/volumeField.js +68 -0
- package/lib/orbital/ui/volumeField.js.map +1 -0
- package/lib/orbital.d.ts +11 -0
- package/lib/orbital.d.ts.map +1 -0
- package/lib/orbital.js +11 -0
- package/lib/orbital.js.map +1 -0
- package/lib/pedagogy/core/glossary.d.ts +79 -0
- package/lib/pedagogy/core/glossary.d.ts.map +1 -0
- package/lib/pedagogy/core/glossary.js +71 -0
- package/lib/pedagogy/core/glossary.js.map +1 -0
- package/lib/pedagogy/core/index.d.ts +8 -0
- package/lib/pedagogy/core/index.d.ts.map +1 -0
- package/lib/pedagogy/core/index.js +4 -0
- package/lib/pedagogy/core/index.js.map +1 -0
- package/lib/pedagogy/core/jsonStorage.d.ts +21 -0
- package/lib/pedagogy/core/jsonStorage.d.ts.map +1 -0
- package/lib/pedagogy/core/jsonStorage.js +55 -0
- package/lib/pedagogy/core/jsonStorage.js.map +1 -0
- package/lib/pedagogy/core/progress.d.ts +116 -0
- package/lib/pedagogy/core/progress.d.ts.map +1 -0
- package/lib/pedagogy/core/progress.js +122 -0
- package/lib/pedagogy/core/progress.js.map +1 -0
- package/lib/pedagogy/core/types.d.ts +74 -0
- package/lib/pedagogy/core/types.d.ts.map +1 -0
- package/lib/pedagogy/core/types.js +8 -0
- package/lib/pedagogy/core/types.js.map +1 -0
- package/lib/pedagogy/core/validation.d.ts +79 -0
- package/lib/pedagogy/core/validation.d.ts.map +1 -0
- package/lib/pedagogy/core/validation.js +47 -0
- package/lib/pedagogy/core/validation.js.map +1 -0
- package/lib/pedagogy/ui/ExerciseActions.d.ts +74 -0
- package/lib/pedagogy/ui/ExerciseActions.d.ts.map +1 -0
- package/lib/pedagogy/ui/ExerciseActions.js +22 -0
- package/lib/pedagogy/ui/ExerciseActions.js.map +1 -0
- package/lib/pedagogy/ui/ExerciseProgressHeader.d.ts +43 -0
- package/lib/pedagogy/ui/ExerciseProgressHeader.d.ts.map +1 -0
- package/lib/pedagogy/ui/ExerciseProgressHeader.js +43 -0
- package/lib/pedagogy/ui/ExerciseProgressHeader.js.map +1 -0
- package/lib/pedagogy/ui/ExerciseTags.d.ts +49 -0
- package/lib/pedagogy/ui/ExerciseTags.d.ts.map +1 -0
- package/lib/pedagogy/ui/ExerciseTags.js +22 -0
- package/lib/pedagogy/ui/ExerciseTags.js.map +1 -0
- package/lib/pedagogy/ui/GlossaryProvider.d.ts +19 -0
- package/lib/pedagogy/ui/GlossaryProvider.d.ts.map +1 -0
- package/lib/pedagogy/ui/GlossaryProvider.js +16 -0
- package/lib/pedagogy/ui/GlossaryProvider.js.map +1 -0
- package/lib/pedagogy/ui/GlossaryText.d.ts +50 -0
- package/lib/pedagogy/ui/GlossaryText.d.ts.map +1 -0
- package/lib/pedagogy/ui/GlossaryText.js +79 -0
- package/lib/pedagogy/ui/GlossaryText.js.map +1 -0
- package/lib/pedagogy/ui/HintLadder.d.ts +38 -0
- package/lib/pedagogy/ui/HintLadder.d.ts.map +1 -0
- package/lib/pedagogy/ui/HintLadder.js +33 -0
- package/lib/pedagogy/ui/HintLadder.js.map +1 -0
- package/lib/pedagogy/ui/ReferenceGrid.d.ts +31 -0
- package/lib/pedagogy/ui/ReferenceGrid.d.ts.map +1 -0
- package/lib/pedagogy/ui/ReferenceGrid.js +25 -0
- package/lib/pedagogy/ui/ReferenceGrid.js.map +1 -0
- package/lib/pedagogy/ui/ReferenceSectionBlock.d.ts +64 -0
- package/lib/pedagogy/ui/ReferenceSectionBlock.d.ts.map +1 -0
- package/lib/pedagogy/ui/ReferenceSectionBlock.js +78 -0
- package/lib/pedagogy/ui/ReferenceSectionBlock.js.map +1 -0
- package/lib/pedagogy/ui/SyntaxTooltip.d.ts +94 -0
- package/lib/pedagogy/ui/SyntaxTooltip.d.ts.map +1 -0
- package/lib/pedagogy/ui/SyntaxTooltip.js +79 -0
- package/lib/pedagogy/ui/SyntaxTooltip.js.map +1 -0
- package/lib/pedagogy/ui/TestCaseList.d.ts +35 -0
- package/lib/pedagogy/ui/TestCaseList.d.ts.map +1 -0
- package/lib/pedagogy/ui/TestCaseList.js +63 -0
- package/lib/pedagogy/ui/TestCaseList.js.map +1 -0
- package/lib/pedagogy/ui/TutorialStepStrip.d.ts +42 -0
- package/lib/pedagogy/ui/TutorialStepStrip.d.ts.map +1 -0
- package/lib/pedagogy/ui/TutorialStepStrip.js +98 -0
- package/lib/pedagogy/ui/TutorialStepStrip.js.map +1 -0
- package/lib/pedagogy/ui/exerciseMeta.d.ts +24 -0
- package/lib/pedagogy/ui/exerciseMeta.d.ts.map +1 -0
- package/lib/pedagogy/ui/exerciseMeta.js +38 -0
- package/lib/pedagogy/ui/exerciseMeta.js.map +1 -0
- package/lib/pedagogy/ui/glossaryContext.d.ts +17 -0
- package/lib/pedagogy/ui/glossaryContext.d.ts.map +1 -0
- package/lib/pedagogy/ui/glossaryContext.js +19 -0
- package/lib/pedagogy/ui/glossaryContext.js.map +1 -0
- package/lib/pedagogy/ui/index.d.ts +27 -0
- package/lib/pedagogy/ui/index.d.ts.map +1 -0
- package/lib/pedagogy/ui/index.js +15 -0
- package/lib/pedagogy/ui/index.js.map +1 -0
- package/lib/pedagogy/ui/tutorialLevels.d.ts +18 -0
- package/lib/pedagogy/ui/tutorialLevels.d.ts.map +1 -0
- package/lib/pedagogy/ui/tutorialLevels.js +14 -0
- package/lib/pedagogy/ui/tutorialLevels.js.map +1 -0
- package/lib/router/core/address.d.ts +42 -0
- package/lib/router/core/address.d.ts.map +1 -0
- package/lib/router/core/address.js +64 -0
- package/lib/router/core/address.js.map +1 -0
- package/lib/router/core/basePath.d.ts +49 -0
- package/lib/router/core/basePath.d.ts.map +1 -0
- package/lib/router/core/basePath.js +78 -0
- package/lib/router/core/basePath.js.map +1 -0
- package/lib/router/core/index.d.ts +8 -0
- package/lib/router/core/index.d.ts.map +1 -0
- package/lib/router/core/index.js +5 -0
- package/lib/router/core/index.js.map +1 -0
- package/lib/router/core/legacyHash.d.ts +45 -0
- package/lib/router/core/legacyHash.d.ts.map +1 -0
- package/lib/router/core/legacyHash.js +50 -0
- package/lib/router/core/legacyHash.js.map +1 -0
- package/lib/router/core/pageAddresses.d.ts +50 -0
- package/lib/router/core/pageAddresses.d.ts.map +1 -0
- package/lib/router/core/pageAddresses.js +56 -0
- package/lib/router/core/pageAddresses.js.map +1 -0
- package/lib/router/core/query.d.ts +41 -0
- package/lib/router/core/query.d.ts.map +1 -0
- package/lib/router/core/query.js +64 -0
- package/lib/router/core/query.js.map +1 -0
- package/lib/router/core/tabRouter.d.ts +111 -0
- package/lib/router/core/tabRouter.d.ts.map +1 -0
- package/lib/router/core/tabRouter.js +87 -0
- package/lib/router/core/tabRouter.js.map +1 -0
- package/lib/seo/core/documentMeta.d.ts +45 -0
- package/lib/seo/core/documentMeta.d.ts.map +1 -0
- package/lib/seo/core/documentMeta.js +69 -0
- package/lib/seo/core/documentMeta.js.map +1 -0
- package/lib/seo/core/index.d.ts +3 -0
- package/lib/seo/core/index.d.ts.map +1 -0
- package/lib/seo/core/index.js +2 -0
- package/lib/seo/core/index.js.map +1 -0
- package/lib/share/core/config.d.ts +63 -0
- package/lib/share/core/config.d.ts.map +1 -0
- package/lib/share/core/config.js +125 -0
- package/lib/share/core/config.js.map +1 -0
- package/lib/share/core/escape.d.ts +15 -0
- package/lib/share/core/escape.d.ts.map +1 -0
- package/lib/share/core/escape.js +22 -0
- package/lib/share/core/escape.js.map +1 -0
- package/lib/share/core/index.d.ts +9 -0
- package/lib/share/core/index.d.ts.map +1 -0
- package/lib/share/core/index.js +5 -0
- package/lib/share/core/index.js.map +1 -0
- package/lib/share/core/params.d.ts +93 -0
- package/lib/share/core/params.d.ts.map +1 -0
- package/lib/share/core/params.js +111 -0
- package/lib/share/core/params.js.map +1 -0
- package/lib/share/core/query.d.ts +30 -0
- package/lib/share/core/query.d.ts.map +1 -0
- package/lib/share/core/query.js +68 -0
- package/lib/share/core/query.js.map +1 -0
- package/lib/share/core/url.d.ts +57 -0
- package/lib/share/core/url.d.ts.map +1 -0
- package/lib/share/core/url.js +49 -0
- package/lib/share/core/url.js.map +1 -0
- package/lib/share/core/vocabulary.d.ts +51 -0
- package/lib/share/core/vocabulary.d.ts.map +1 -0
- package/lib/share/core/vocabulary.js +2 -0
- package/lib/share/core/vocabulary.js.map +1 -0
- package/lib/share/ui/HiddenPartsProvider.d.ts +19 -0
- package/lib/share/ui/HiddenPartsProvider.d.ts.map +1 -0
- package/lib/share/ui/HiddenPartsProvider.js +15 -0
- package/lib/share/ui/HiddenPartsProvider.js.map +1 -0
- package/lib/share/ui/PagePart.d.ts +18 -0
- package/lib/share/ui/PagePart.d.ts.map +1 -0
- package/lib/share/ui/PagePart.js +16 -0
- package/lib/share/ui/PagePart.js.map +1 -0
- package/lib/share/ui/ShareButton.d.ts +42 -0
- package/lib/share/ui/ShareButton.d.ts.map +1 -0
- package/lib/share/ui/ShareButton.js +18 -0
- package/lib/share/ui/ShareButton.js.map +1 -0
- package/lib/share/ui/ShareDialog.d.ts +73 -0
- package/lib/share/ui/ShareDialog.d.ts.map +1 -0
- package/lib/share/ui/ShareDialog.js +19 -0
- package/lib/share/ui/ShareDialog.js.map +1 -0
- package/lib/share/ui/ShareDialogContent.d.ts +13 -0
- package/lib/share/ui/ShareDialogContent.d.ts.map +1 -0
- package/lib/share/ui/ShareDialogContent.js +71 -0
- package/lib/share/ui/ShareDialogContent.js.map +1 -0
- package/lib/share/ui/SharePartOptions.d.ts +18 -0
- package/lib/share/ui/SharePartOptions.d.ts.map +1 -0
- package/lib/share/ui/SharePartOptions.js +22 -0
- package/lib/share/ui/SharePartOptions.js.map +1 -0
- package/lib/share/ui/draft.d.ts +13 -0
- package/lib/share/ui/draft.d.ts.map +1 -0
- package/lib/share/ui/draft.js +16 -0
- package/lib/share/ui/draft.js.map +1 -0
- package/lib/share/ui/hiddenParts.d.ts +17 -0
- package/lib/share/ui/hiddenParts.d.ts.map +1 -0
- package/lib/share/ui/hiddenParts.js +21 -0
- package/lib/share/ui/hiddenParts.js.map +1 -0
- package/lib/share/ui/index.d.ts +10 -0
- package/lib/share/ui/index.d.ts.map +1 -0
- package/lib/share/ui/index.js +6 -0
- package/lib/share/ui/index.js.map +1 -0
- package/lib/shared/ui/index.d.ts +2 -1
- package/lib/shared/ui/index.d.ts.map +1 -1
- package/lib/shared/ui/index.js +1 -1
- package/lib/shared/ui/index.js.map +1 -1
- package/lib/state/ui/index.d.ts +3 -0
- package/lib/state/ui/index.d.ts.map +1 -0
- package/lib/state/ui/index.js +2 -0
- package/lib/state/ui/index.js.map +1 -0
- package/lib/state/ui/mergeStored.d.ts +27 -0
- package/lib/state/ui/mergeStored.d.ts.map +1 -0
- package/lib/state/ui/mergeStored.js +82 -0
- package/lib/state/ui/mergeStored.js.map +1 -0
- package/lib/state/ui/persistBucket.d.ts +65 -0
- package/lib/state/ui/persistBucket.d.ts.map +1 -0
- package/lib/state/ui/persistBucket.js +90 -0
- package/lib/state/ui/persistBucket.js.map +1 -0
- package/lib/structure/core/editorValue.d.ts +69 -0
- package/lib/structure/core/editorValue.d.ts.map +1 -0
- package/lib/structure/core/editorValue.js +72 -0
- package/lib/structure/core/editorValue.js.map +1 -0
- package/lib/structure/core/fragmentQuery.d.ts +33 -0
- package/lib/structure/core/fragmentQuery.d.ts.map +1 -0
- package/lib/structure/core/fragmentQuery.js +37 -0
- package/lib/structure/core/fragmentQuery.js.map +1 -0
- package/lib/structure/core/index.d.ts +11 -0
- package/lib/structure/core/index.d.ts.map +1 -0
- package/lib/structure/core/index.js +6 -0
- package/lib/structure/core/index.js.map +1 -0
- package/lib/structure/core/molfile.d.ts +42 -0
- package/lib/structure/core/molfile.d.ts.map +1 -0
- package/lib/structure/core/molfile.js +74 -0
- package/lib/structure/core/molfile.js.map +1 -0
- package/lib/structure/core/readStructure.d.ts +37 -0
- package/lib/structure/core/readStructure.d.ts.map +1 -0
- package/lib/structure/core/readStructure.js +59 -0
- package/lib/structure/core/readStructure.js.map +1 -0
- package/lib/structure/core/structureSource.d.ts +34 -0
- package/lib/structure/core/structureSource.d.ts.map +1 -0
- package/lib/structure/core/structureSource.js +32 -0
- package/lib/structure/core/structureSource.js.map +1 -0
- package/lib/structure/core/toolbarFloor.d.ts +16 -0
- package/lib/structure/core/toolbarFloor.d.ts.map +1 -0
- package/lib/structure/core/toolbarFloor.js +27 -0
- package/lib/structure/core/toolbarFloor.js.map +1 -0
- package/lib/structure/ui/EditorCanvas.d.ts +55 -0
- package/lib/structure/ui/EditorCanvas.d.ts.map +1 -0
- package/lib/structure/ui/EditorCanvas.js +41 -0
- package/lib/structure/ui/EditorCanvas.js.map +1 -0
- package/lib/structure/ui/Structure.d.ts +122 -0
- package/lib/structure/ui/Structure.d.ts.map +1 -0
- package/lib/structure/ui/Structure.js +28 -0
- package/lib/structure/ui/Structure.js.map +1 -0
- package/lib/structure/ui/StructureEditor.d.ts +75 -0
- package/lib/structure/ui/StructureEditor.d.ts.map +1 -0
- package/lib/structure/ui/StructureEditor.js +83 -0
- package/lib/structure/ui/StructureEditor.js.map +1 -0
- package/lib/structure/ui/StructurePlaceholder.d.ts +29 -0
- package/lib/structure/ui/StructurePlaceholder.d.ts.map +1 -0
- package/lib/structure/ui/StructurePlaceholder.js +19 -0
- package/lib/structure/ui/StructurePlaceholder.js.map +1 -0
- package/lib/structure/ui/StructureSvg.d.ts +58 -0
- package/lib/structure/ui/StructureSvg.d.ts.map +1 -0
- package/lib/structure/ui/StructureSvg.js +33 -0
- package/lib/structure/ui/StructureSvg.js.map +1 -0
- package/lib/structure/ui/index.d.ts +19 -0
- package/lib/structure/ui/index.d.ts.map +1 -0
- package/lib/structure/ui/index.js +15 -0
- package/lib/structure/ui/index.js.map +1 -0
- package/lib/structure/ui/useToolbarFloor.d.ts +26 -0
- package/lib/structure/ui/useToolbarFloor.d.ts.map +1 -0
- package/lib/structure/ui/useToolbarFloor.js +70 -0
- package/lib/structure/ui/useToolbarFloor.js.map +1 -0
- package/lib/structure.d.ts +3 -0
- package/lib/structure.d.ts.map +1 -0
- package/lib/structure.js +3 -0
- package/lib/structure.js.map +1 -0
- package/lib/ui.d.ts +13 -0
- package/lib/ui.d.ts.map +1 -1
- package/lib/ui.js +13 -0
- package/lib/ui.js.map +1 -1
- package/lib/worker/core/errors.d.ts +15 -0
- package/lib/worker/core/errors.d.ts.map +1 -0
- package/lib/worker/core/errors.js +15 -0
- package/lib/worker/core/errors.js.map +1 -0
- package/lib/worker/core/index.d.ts +5 -0
- package/lib/worker/core/index.d.ts.map +1 -0
- package/lib/worker/core/index.js +3 -0
- package/lib/worker/core/index.js.map +1 -0
- package/lib/worker/core/messages.d.ts +48 -0
- package/lib/worker/core/messages.d.ts.map +1 -0
- package/lib/worker/core/messages.js +2 -0
- package/lib/worker/core/messages.js.map +1 -0
- package/lib/worker/core/workerChannel.d.ts +69 -0
- package/lib/worker/core/workerChannel.d.ts.map +1 -0
- package/lib/worker/core/workerChannel.js +121 -0
- package/lib/worker/core/workerChannel.js.map +1 -0
- package/package.json +25 -4
- package/src/capsule/ui/CapsuleFilter.tsx +119 -0
- package/src/capsule/ui/index.ts +2 -0
- package/src/chrome/ui/NavLink.tsx +88 -0
- package/src/chrome/ui/NavMenuButton.tsx +95 -0
- package/src/chrome/ui/SiteFooter.tsx +65 -0
- package/src/chrome/ui/SiteHeader.tsx +119 -0
- package/src/chrome/ui/index.ts +11 -0
- package/src/chrome/ui/navItem.ts +60 -0
- package/src/chrome/ui/useCompactHeader.ts +81 -0
- package/src/citation/core/clipboard.ts +27 -11
- package/src/citation/core/download.ts +25 -15
- package/src/citation/core/index.ts +8 -3
- package/src/citation/core/works.ts +81 -0
- package/src/citation/ui/CitationMenu.tsx +104 -89
- package/src/citation/ui/CitationPreview.tsx +18 -8
- package/src/citation/ui/CiteButton.tsx +24 -9
- package/src/citation/ui/CopyFormatEntries.tsx +84 -0
- package/src/citation/ui/WorkEntry.tsx +80 -0
- package/src/citation/ui/entries.tsx +18 -20
- package/src/citation/ui/index.ts +10 -2
- package/src/citation/ui/useCopyFeedback.ts +76 -0
- package/src/clipboard/core/index.ts +1 -0
- package/src/clipboard/core/writeToClipboard.ts +47 -0
- package/src/clipboard/ui/CodeBlock.tsx +110 -0
- package/src/clipboard/ui/CopyButton.tsx +111 -0
- package/src/clipboard/ui/index.ts +9 -0
- package/src/clipboard/ui/useCopyToClipboard.ts +57 -0
- package/src/color/core/contrast.ts +85 -0
- package/src/color/core/hex.ts +57 -0
- package/src/color/core/index.ts +4 -0
- package/src/color/core/scale.ts +132 -0
- package/src/color/ui/ColorScaleLegend.tsx +144 -0
- package/src/color/ui/index.ts +2 -0
- package/src/core.ts +12 -0
- package/src/credits/core/credits.ts +183 -0
- package/src/credits/core/index.ts +2 -0
- package/src/credits/ui/CreditsList.tsx +82 -0
- package/src/credits/ui/index.ts +2 -0
- package/src/delimited/core/delimiters.ts +64 -0
- package/src/delimited/core/index.ts +11 -0
- package/src/delimited/core/readDelimited.ts +132 -0
- package/src/delimited/core/rowsToDelimited.ts +135 -0
- package/src/delimited/core/toDelimited.ts +69 -0
- package/src/delimited/ui/DelimitedTextDialog.tsx +49 -0
- package/src/delimited/ui/DelimitedTextPanel.tsx +161 -0
- package/src/delimited/ui/index.ts +4 -0
- package/src/disclosure/ui/CollapsibleSection.tsx +150 -0
- package/src/disclosure/ui/index.ts +4 -0
- package/src/disclosure/ui/useDisclosure.ts +35 -0
- package/src/download/core/downloadBlob.ts +19 -0
- package/src/download/core/downloadText.ts +19 -0
- package/src/download/core/index.ts +3 -0
- package/src/download/core/sanitizeFileName.ts +33 -0
- package/src/ecosystem/core/index.ts +3 -0
- package/src/ecosystem/core/links.ts +29 -0
- package/src/ecosystem/core/lookup.ts +41 -0
- package/src/ecosystem/core/sites.ts +38 -1
- package/src/ecosystem/core/tokens.ts +47 -0
- package/src/ecosystem/ui/SiteTheme.tsx +23 -0
- package/src/ecosystem/ui/Wordmark.tsx +65 -0
- package/src/ecosystem/ui/glyphs.tsx +246 -0
- package/src/ecosystem/ui/index.ts +4 -0
- package/src/ecosystem/ui/marks.tsx +56 -214
- package/src/error/ui/ErrorBoundary.tsx +94 -0
- package/src/error/ui/ErrorFallback.tsx +64 -0
- package/src/error/ui/index.ts +4 -0
- package/src/error/ui/toError.ts +33 -0
- package/src/format/core/index.ts +9 -0
- package/src/format/core/missing.ts +6 -0
- package/src/format/core/numbers.ts +84 -0
- package/src/format/core/units.ts +60 -0
- package/src/format/core/words.ts +17 -0
- package/src/help/ui/HelpBody.tsx +130 -0
- package/src/help/ui/HelpIcon.tsx +53 -0
- package/src/help/ui/HelpToolbarButton.tsx +72 -0
- package/src/help/ui/HelpTooltip.tsx +72 -0
- package/src/help/ui/index.ts +8 -0
- package/src/hooks/ui/index.ts +6 -0
- package/src/hooks/ui/listNavigation.ts +116 -0
- package/src/hooks/ui/useContainerSize.ts +32 -0
- package/src/hooks/ui/useDebouncedValue.ts +29 -0
- package/src/hooks/ui/useListKeyboardNavigation.ts +37 -0
- package/src/hooks/ui/useResizeObserver.ts +50 -0
- package/src/orbital/core/atomicGrid.ts +167 -0
- package/src/orbital/core/atomicOrbitals.ts +212 -0
- package/src/orbital/core/constants.ts +36 -0
- package/src/orbital/core/electronConfiguration.ts +242 -0
- package/src/orbital/core/grid.ts +126 -0
- package/src/orbital/core/hydrogenic.ts +222 -0
- package/src/orbital/core/index.ts +63 -0
- package/src/orbital/core/isovalue.ts +146 -0
- package/src/orbital/core/numerics.ts +79 -0
- package/src/orbital/core/occupancy.ts +100 -0
- package/src/orbital/core/palette.ts +56 -0
- package/src/orbital/core/realHarmonics.ts +172 -0
- package/src/orbital/core/sample.ts +111 -0
- package/src/orbital/core/screening.ts +90 -0
- package/src/orbital/ui/AtomicOrbitalCanvas.tsx +197 -0
- package/src/orbital/ui/AtomicOrbitalViewer.tsx +154 -0
- package/src/orbital/ui/camera.ts +125 -0
- package/src/orbital/ui/capability.ts +102 -0
- package/src/orbital/ui/index.ts +17 -0
- package/src/orbital/ui/renderVolume.ts +203 -0
- package/src/orbital/ui/viewer.ts +191 -0
- package/src/orbital/ui/volumeField.ts +84 -0
- package/src/orbital.ts +11 -0
- package/src/pedagogy/core/glossary.ts +122 -0
- package/src/pedagogy/core/index.ts +28 -0
- package/src/pedagogy/core/jsonStorage.ts +51 -0
- package/src/pedagogy/core/progress.ts +205 -0
- package/src/pedagogy/core/types.ts +78 -0
- package/src/pedagogy/core/validation.ts +109 -0
- package/src/pedagogy/ui/ExerciseActions.tsx +129 -0
- package/src/pedagogy/ui/ExerciseProgressHeader.tsx +135 -0
- package/src/pedagogy/ui/ExerciseTags.tsx +85 -0
- package/src/pedagogy/ui/GlossaryProvider.tsx +31 -0
- package/src/pedagogy/ui/GlossaryText.tsx +164 -0
- package/src/pedagogy/ui/HintLadder.tsx +95 -0
- package/src/pedagogy/ui/ReferenceGrid.tsx +69 -0
- package/src/pedagogy/ui/ReferenceSectionBlock.tsx +175 -0
- package/src/pedagogy/ui/SyntaxTooltip.tsx +222 -0
- package/src/pedagogy/ui/TestCaseList.tsx +122 -0
- package/src/pedagogy/ui/TutorialStepStrip.tsx +230 -0
- package/src/pedagogy/ui/exerciseMeta.ts +45 -0
- package/src/pedagogy/ui/glossaryContext.ts +23 -0
- package/src/pedagogy/ui/index.ts +37 -0
- package/src/pedagogy/ui/tutorialLevels.ts +27 -0
- package/src/router/core/address.ts +74 -0
- package/src/router/core/basePath.ts +76 -0
- package/src/router/core/index.ts +26 -0
- package/src/router/core/legacyHash.ts +77 -0
- package/src/router/core/pageAddresses.ts +106 -0
- package/src/router/core/query.ts +87 -0
- package/src/router/core/tabRouter.ts +214 -0
- package/src/seo/core/documentMeta.ts +92 -0
- package/src/seo/core/index.ts +6 -0
- package/src/share/core/config.ts +165 -0
- package/src/share/core/escape.ts +22 -0
- package/src/share/core/index.ts +31 -0
- package/src/share/core/params.ts +176 -0
- package/src/share/core/query.ts +72 -0
- package/src/share/core/url.ts +105 -0
- package/src/share/core/vocabulary.ts +60 -0
- package/src/share/ui/HiddenPartsProvider.tsx +34 -0
- package/src/share/ui/PagePart.tsx +26 -0
- package/src/share/ui/ShareButton.tsx +84 -0
- package/src/share/ui/ShareDialog.tsx +114 -0
- package/src/share/ui/ShareDialogContent.tsx +189 -0
- package/src/share/ui/SharePartOptions.tsx +51 -0
- package/src/share/ui/draft.ts +19 -0
- package/src/share/ui/hiddenParts.ts +22 -0
- package/src/share/ui/index.ts +9 -0
- package/src/shared/ui/index.ts +2 -1
- package/src/state/ui/index.ts +6 -0
- package/src/state/ui/mergeStored.ts +87 -0
- package/src/state/ui/persistBucket.ts +147 -0
- package/src/structure/core/editorValue.ts +116 -0
- package/src/structure/core/fragmentQuery.ts +50 -0
- package/src/structure/core/index.ts +13 -0
- package/src/structure/core/molfile.ts +90 -0
- package/src/structure/core/readStructure.ts +73 -0
- package/src/structure/core/structureSource.ts +57 -0
- package/src/structure/core/toolbarFloor.ts +31 -0
- package/src/structure/ui/EditorCanvas.tsx +130 -0
- package/src/structure/ui/Structure.tsx +183 -0
- package/src/structure/ui/StructureEditor.tsx +196 -0
- package/src/structure/ui/StructurePlaceholder.tsx +48 -0
- package/src/structure/ui/StructureSvg.tsx +110 -0
- package/src/structure/ui/index.ts +22 -0
- package/src/structure/ui/useToolbarFloor.ts +93 -0
- package/src/structure.ts +2 -0
- package/src/ui.ts +13 -0
- package/src/worker/core/errors.ts +15 -0
- package/src/worker/core/index.ts +8 -0
- package/src/worker/core/messages.ts +47 -0
- package/src/worker/core/workerChannel.ts +218 -0
- package/styles/chrome.css +223 -0
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import type { RefObject } from 'react';
|
|
2
|
+
import { useLayoutEffect, useRef } from 'react';
|
|
3
|
+
|
|
4
|
+
import { toolbarFloorHeight } from '../core/toolbarFloor.ts';
|
|
5
|
+
|
|
6
|
+
export interface ToolbarFloorOptions {
|
|
7
|
+
/**
|
|
8
|
+
* Smallest height of the drawing area, in pixels. Raised to whatever the
|
|
9
|
+
* toolbar needs, which is usually more.
|
|
10
|
+
* @default 320
|
|
11
|
+
*/
|
|
12
|
+
minHeight?: number;
|
|
13
|
+
/**
|
|
14
|
+
* Bumped to look for the toolbar again, which a caller does after the editor
|
|
15
|
+
* has been remounted and the previous toolbar element has gone.
|
|
16
|
+
* @default 0
|
|
17
|
+
*/
|
|
18
|
+
revision?: number;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Give an editor's container a minimum height that shows the whole toolbar.
|
|
23
|
+
*
|
|
24
|
+
* The height is measured rather than written down, so a different button count
|
|
25
|
+
* — a fragment editor, a reaction editor, a future release — keeps working
|
|
26
|
+
* instead of clipping its last buttons behind whatever follows the editor.
|
|
27
|
+
* @param options - The height the caller asked for, and when to look again.
|
|
28
|
+
* @returns The ref to put on the element wrapping the editor.
|
|
29
|
+
*/
|
|
30
|
+
export function useToolbarFloor(
|
|
31
|
+
options: ToolbarFloorOptions = {},
|
|
32
|
+
): RefObject<HTMLDivElement | null> {
|
|
33
|
+
const { minHeight = 320, revision = 0 } = options;
|
|
34
|
+
const containerRef = useRef<HTMLDivElement>(null);
|
|
35
|
+
|
|
36
|
+
useLayoutEffect(() => {
|
|
37
|
+
const container = containerRef.current;
|
|
38
|
+
if (container === null) return;
|
|
39
|
+
|
|
40
|
+
let observer: ResizeObserver | null = null;
|
|
41
|
+
let frame = 0;
|
|
42
|
+
let attempts = 0;
|
|
43
|
+
|
|
44
|
+
// The editor builds itself asynchronously, so the toolbar is usually not
|
|
45
|
+
// there yet on the first look; watching for it is what keeps a slow first
|
|
46
|
+
// paint from leaving the container at its unmeasured height for good.
|
|
47
|
+
const attach = (): void => {
|
|
48
|
+
const toolbar = findToolbar(container);
|
|
49
|
+
if (toolbar === null) {
|
|
50
|
+
attempts++;
|
|
51
|
+
if (attempts > MAX_ATTEMPTS) return;
|
|
52
|
+
frame = globalThis.requestAnimationFrame(attach);
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
observer = new ResizeObserver(() => {
|
|
56
|
+
// offsetHeight, because a dialog opens under a scaling transform and a
|
|
57
|
+
// measured rectangle would be that of the half drawn toolbar.
|
|
58
|
+
const floor = toolbarFloorHeight(toolbar.offsetHeight, minHeight);
|
|
59
|
+
container.style.minHeight = `${floor}px`;
|
|
60
|
+
});
|
|
61
|
+
observer.observe(toolbar);
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
attach();
|
|
65
|
+
|
|
66
|
+
return () => {
|
|
67
|
+
if (frame !== 0) globalThis.cancelAnimationFrame(frame);
|
|
68
|
+
observer?.disconnect();
|
|
69
|
+
};
|
|
70
|
+
}, [minHeight, revision]);
|
|
71
|
+
|
|
72
|
+
return containerRef;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/** Roughly two seconds of frames, after which the editor is not coming. */
|
|
76
|
+
const MAX_ATTEMPTS = 120;
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Find the toolbar canvas of the editor.
|
|
80
|
+
*
|
|
81
|
+
* The editor builds itself inside a shadow root and puts the toolbar there as
|
|
82
|
+
* a direct child, the drawing canvas being nested deeper.
|
|
83
|
+
* @param container - The element wrapping the editor.
|
|
84
|
+
* @returns The toolbar canvas, or null while the editor has not drawn one.
|
|
85
|
+
*/
|
|
86
|
+
function findToolbar(container: HTMLElement): HTMLCanvasElement | null {
|
|
87
|
+
for (const element of container.querySelectorAll('*')) {
|
|
88
|
+
for (const child of element.shadowRoot?.children ?? []) {
|
|
89
|
+
if (child instanceof HTMLCanvasElement) return child;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
return null;
|
|
93
|
+
}
|
package/src/structure.ts
ADDED
package/src/ui.ts
CHANGED
|
@@ -1,3 +1,16 @@
|
|
|
1
|
+
export * from './capsule/ui/index.ts';
|
|
2
|
+
export * from './chrome/ui/index.ts';
|
|
1
3
|
export * from './citation/ui/index.ts';
|
|
4
|
+
export * from './clipboard/ui/index.ts';
|
|
5
|
+
export * from './color/ui/index.ts';
|
|
6
|
+
export * from './credits/ui/index.ts';
|
|
7
|
+
export * from './delimited/ui/index.ts';
|
|
8
|
+
export * from './disclosure/ui/index.ts';
|
|
2
9
|
export * from './ecosystem/ui/index.ts';
|
|
10
|
+
export * from './error/ui/index.ts';
|
|
11
|
+
export * from './help/ui/index.ts';
|
|
12
|
+
export * from './hooks/ui/index.ts';
|
|
13
|
+
export * from './pedagogy/ui/index.ts';
|
|
14
|
+
export * from './share/ui/index.ts';
|
|
3
15
|
export * from './shared/ui/index.ts';
|
|
16
|
+
export * from './state/ui/index.ts';
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rejection of a request nobody is waiting for any more: its signal was
|
|
3
|
+
* aborted, or the channel it was posted on was terminated.
|
|
4
|
+
*
|
|
5
|
+
* It is the normal outcome of dragging a slider or clicking through a list, so
|
|
6
|
+
* a caller catches it and draws nothing rather than reporting a failure.
|
|
7
|
+
*/
|
|
8
|
+
export class CancelledRequestError extends Error {
|
|
9
|
+
override name = 'CancelledRequestError';
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
/** Rejection of a request that outlived its budget and was given up on. */
|
|
13
|
+
export class RequestTimeoutError extends Error {
|
|
14
|
+
override name = 'RequestTimeoutError';
|
|
15
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { CancelledRequestError, RequestTimeoutError } from './errors.ts';
|
|
2
|
+
export type { WorkerLike } from './messages.ts';
|
|
3
|
+
export type {
|
|
4
|
+
WorkerChannel,
|
|
5
|
+
WorkerChannelOptions,
|
|
6
|
+
WorkerRequestOptions,
|
|
7
|
+
} from './workerChannel.ts';
|
|
8
|
+
export { createWorkerChannel } from './workerChannel.ts';
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/** What a channel posts to its worker: one job, tagged with an identifier. */
|
|
2
|
+
export interface WorkerRequestMessage<TRequest> {
|
|
3
|
+
/** Serial number of the request, which the answer must echo. */
|
|
4
|
+
id: number;
|
|
5
|
+
/** The job itself, exactly as the caller wrote it. */
|
|
6
|
+
request: TRequest;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* What a worker posts back. An `Error` does not survive the boundary, so a
|
|
11
|
+
* failure travels as its message and becomes an `Error` again on this side.
|
|
12
|
+
*/
|
|
13
|
+
export type WorkerResponseMessage<TResponse> =
|
|
14
|
+
| { id: number; ok: true; response: TResponse }
|
|
15
|
+
| { id: number; ok: false; message: string };
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* As much of a `Worker` as a channel uses. A real `Worker` satisfies it, and so
|
|
19
|
+
* does anything else that speaks the same three calls — which is what lets the
|
|
20
|
+
* scheduling be unit-tested without a thread.
|
|
21
|
+
*/
|
|
22
|
+
export interface WorkerLike {
|
|
23
|
+
/** Send one message to the worker. */
|
|
24
|
+
postMessage(message: unknown): void;
|
|
25
|
+
/** Listen to what the worker answers, or to its failing outright. */
|
|
26
|
+
addEventListener(
|
|
27
|
+
type: 'message' | 'error',
|
|
28
|
+
listener: (event: WorkerEventLike) => void,
|
|
29
|
+
): void;
|
|
30
|
+
/** Stop the worker; whatever it was doing is lost. */
|
|
31
|
+
terminate(): void;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/** As much of a worker event as a channel reads. */
|
|
35
|
+
export interface WorkerEventLike {
|
|
36
|
+
/**
|
|
37
|
+
* The message the worker posted, before anything checks it against the
|
|
38
|
+
* protocol. Absent on an error event.
|
|
39
|
+
* @default undefined
|
|
40
|
+
*/
|
|
41
|
+
readonly data?: unknown;
|
|
42
|
+
/**
|
|
43
|
+
* What went wrong, on an error event. Absent on a message event.
|
|
44
|
+
* @default undefined
|
|
45
|
+
*/
|
|
46
|
+
readonly message?: string;
|
|
47
|
+
}
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
import { CancelledRequestError, RequestTimeoutError } from './errors.ts';
|
|
2
|
+
import type {
|
|
3
|
+
WorkerLike,
|
|
4
|
+
WorkerRequestMessage,
|
|
5
|
+
WorkerResponseMessage,
|
|
6
|
+
} from './messages.ts';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Turn a worker into something a page can await.
|
|
10
|
+
*
|
|
11
|
+
* Several requests may be in flight at once; each one is tagged with an
|
|
12
|
+
* identifier the answer echoes, so replies are matched to callers whatever
|
|
13
|
+
* order they arrive in. A request that rejects — cancelled, timed out, or
|
|
14
|
+
* failed — drops out of the pending map at that moment, so a page that fires
|
|
15
|
+
* one job per keystroke never accumulates them.
|
|
16
|
+
*
|
|
17
|
+
* The worker is the caller's: the channel posts to it and terminates it when
|
|
18
|
+
* asked, but never creates one, which is what lets a site keep its own lazy
|
|
19
|
+
* construction and its own in-process fallback.
|
|
20
|
+
* @param worker - The worker to talk to, or anything that speaks its three calls.
|
|
21
|
+
* @param options - See {@link WorkerChannelOptions}.
|
|
22
|
+
* @returns The channel.
|
|
23
|
+
*/
|
|
24
|
+
export function createWorkerChannel<TRequest, TResponse>(
|
|
25
|
+
worker: WorkerLike,
|
|
26
|
+
options: WorkerChannelOptions = {},
|
|
27
|
+
): WorkerChannel<TRequest, TResponse> {
|
|
28
|
+
const name = options.name ?? 'worker';
|
|
29
|
+
const defaultTimeoutMs = positiveMilliseconds(
|
|
30
|
+
options.defaultTimeoutMs,
|
|
31
|
+
DEFAULT_TIMEOUT_MS,
|
|
32
|
+
);
|
|
33
|
+
|
|
34
|
+
const pending = new Map<number, PendingRequest<TResponse>>();
|
|
35
|
+
let nextId = 0;
|
|
36
|
+
let terminated = false;
|
|
37
|
+
|
|
38
|
+
function settle(id: number): PendingRequest<TResponse> | undefined {
|
|
39
|
+
const entry = pending.get(id);
|
|
40
|
+
if (entry === undefined) return undefined;
|
|
41
|
+
pending.delete(id);
|
|
42
|
+
entry.dispose();
|
|
43
|
+
return entry;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
function rejectAll(error: Error): void {
|
|
47
|
+
for (const entry of pending.values()) {
|
|
48
|
+
entry.dispose();
|
|
49
|
+
entry.reject(error);
|
|
50
|
+
}
|
|
51
|
+
pending.clear();
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
worker.addEventListener('message', (event) => {
|
|
55
|
+
const message = event.data;
|
|
56
|
+
if (!isResponseMessage(message)) return;
|
|
57
|
+
const entry = settle(message.id);
|
|
58
|
+
if (entry === undefined) return;
|
|
59
|
+
if (message.ok) entry.resolve(message.response as TResponse);
|
|
60
|
+
else entry.reject(new Error(message.message));
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
worker.addEventListener('error', (event) => {
|
|
64
|
+
const detail = event.message ?? '';
|
|
65
|
+
rejectAll(
|
|
66
|
+
new Error(detail === '' ? `${name} failed` : `${name} failed: ${detail}`),
|
|
67
|
+
);
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
return {
|
|
71
|
+
get pendingCount() {
|
|
72
|
+
return pending.size;
|
|
73
|
+
},
|
|
74
|
+
request: (payload: TRequest, requestOptions: WorkerRequestOptions = {}) => {
|
|
75
|
+
const { signal, timeoutMs } = requestOptions;
|
|
76
|
+
if (terminated) {
|
|
77
|
+
return Promise.reject(
|
|
78
|
+
new CancelledRequestError(`${name} was terminated`),
|
|
79
|
+
);
|
|
80
|
+
}
|
|
81
|
+
if (signal?.aborted === true) {
|
|
82
|
+
return Promise.reject(
|
|
83
|
+
new CancelledRequestError(`${name} request was cancelled`),
|
|
84
|
+
);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
nextId += 1;
|
|
88
|
+
const id = nextId;
|
|
89
|
+
const budget = positiveMilliseconds(timeoutMs, defaultTimeoutMs);
|
|
90
|
+
|
|
91
|
+
return new Promise<TResponse>((resolve, reject) => {
|
|
92
|
+
const timeout = setTimeout(() => {
|
|
93
|
+
settle(id)?.reject(
|
|
94
|
+
new RequestTimeoutError(
|
|
95
|
+
`${name} request ${id} timed out after ${budget} ms`,
|
|
96
|
+
),
|
|
97
|
+
);
|
|
98
|
+
}, budget);
|
|
99
|
+
const onAbort = () => {
|
|
100
|
+
settle(id)?.reject(
|
|
101
|
+
new CancelledRequestError(`${name} request ${id} was cancelled`),
|
|
102
|
+
);
|
|
103
|
+
};
|
|
104
|
+
signal?.addEventListener('abort', onAbort);
|
|
105
|
+
|
|
106
|
+
pending.set(id, {
|
|
107
|
+
resolve,
|
|
108
|
+
reject,
|
|
109
|
+
dispose: () => {
|
|
110
|
+
clearTimeout(timeout);
|
|
111
|
+
signal?.removeEventListener('abort', onAbort);
|
|
112
|
+
},
|
|
113
|
+
});
|
|
114
|
+
|
|
115
|
+
const message: WorkerRequestMessage<TRequest> = {
|
|
116
|
+
id,
|
|
117
|
+
request: payload,
|
|
118
|
+
};
|
|
119
|
+
try {
|
|
120
|
+
worker.postMessage(message);
|
|
121
|
+
} catch (error) {
|
|
122
|
+
settle(id);
|
|
123
|
+
reject(error instanceof Error ? error : new Error(String(error)));
|
|
124
|
+
}
|
|
125
|
+
});
|
|
126
|
+
},
|
|
127
|
+
terminate: () => {
|
|
128
|
+
terminated = true;
|
|
129
|
+
rejectAll(new CancelledRequestError(`${name} was terminated`));
|
|
130
|
+
worker.terminate();
|
|
131
|
+
},
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/** How a channel names itself and how long it waits. */
|
|
136
|
+
export interface WorkerChannelOptions {
|
|
137
|
+
/**
|
|
138
|
+
* What the channel is called in the message of an error it raises, e.g.
|
|
139
|
+
* `conformers`.
|
|
140
|
+
* @default 'worker'
|
|
141
|
+
*/
|
|
142
|
+
name?: string;
|
|
143
|
+
/**
|
|
144
|
+
* Milliseconds a request waits before it is given up on, when the call passes
|
|
145
|
+
* no budget of its own. A value that is not a positive finite number falls
|
|
146
|
+
* back to two minutes.
|
|
147
|
+
* @default 120000
|
|
148
|
+
*/
|
|
149
|
+
defaultTimeoutMs?: number;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
/** What one call may ask of the channel. */
|
|
153
|
+
export interface WorkerRequestOptions {
|
|
154
|
+
/**
|
|
155
|
+
* Abort the call. Its promise then rejects with a
|
|
156
|
+
* {@link CancelledRequestError}; the worker itself is left alone, since a job
|
|
157
|
+
* already running cannot be interrupted from outside.
|
|
158
|
+
* @default undefined
|
|
159
|
+
*/
|
|
160
|
+
signal?: AbortSignal;
|
|
161
|
+
/**
|
|
162
|
+
* Milliseconds this call alone waits, overriding the channel default —
|
|
163
|
+
* a calculation budget is often a user preference. A value that is not a
|
|
164
|
+
* positive finite number falls back to the channel default.
|
|
165
|
+
* @default the channel's defaultTimeoutMs
|
|
166
|
+
*/
|
|
167
|
+
timeoutMs?: number;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
/** A channel to one worker, over which several jobs may be in flight. */
|
|
171
|
+
export interface WorkerChannel<TRequest, TResponse> {
|
|
172
|
+
/**
|
|
173
|
+
* Post one job and wait for the answer that carries its identifier.
|
|
174
|
+
* @param payload - The job.
|
|
175
|
+
* @param options - Per-call signal and budget.
|
|
176
|
+
* @returns What the worker answered.
|
|
177
|
+
*/
|
|
178
|
+
request: (
|
|
179
|
+
payload: TRequest,
|
|
180
|
+
options?: WorkerRequestOptions,
|
|
181
|
+
) => Promise<TResponse>;
|
|
182
|
+
/** How many requests are still waiting for an answer. */
|
|
183
|
+
readonly pendingCount: number;
|
|
184
|
+
/**
|
|
185
|
+
* Terminate the worker, rejecting everything still waiting with a
|
|
186
|
+
* {@link CancelledRequestError}. The channel accepts no further request.
|
|
187
|
+
*/
|
|
188
|
+
terminate: () => void;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
interface PendingRequest<TResponse> {
|
|
192
|
+
resolve: (response: TResponse) => void;
|
|
193
|
+
reject: (error: Error) => void;
|
|
194
|
+
dispose: () => void;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
const DEFAULT_TIMEOUT_MS = 120_000;
|
|
198
|
+
|
|
199
|
+
function isResponseMessage(
|
|
200
|
+
message: unknown,
|
|
201
|
+
): message is WorkerResponseMessage<unknown> {
|
|
202
|
+
if (typeof message !== 'object' || message === null) return false;
|
|
203
|
+
const candidate = message as {
|
|
204
|
+
id?: unknown;
|
|
205
|
+
ok?: unknown;
|
|
206
|
+
message?: unknown;
|
|
207
|
+
};
|
|
208
|
+
if (typeof candidate.id !== 'number' || typeof candidate.ok !== 'boolean') {
|
|
209
|
+
return false;
|
|
210
|
+
}
|
|
211
|
+
return candidate.ok || typeof candidate.message === 'string';
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
function positiveMilliseconds(value: number | undefined, fallback: number) {
|
|
215
|
+
return typeof value === 'number' && Number.isFinite(value) && value > 0
|
|
216
|
+
? value
|
|
217
|
+
: fallback;
|
|
218
|
+
}
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* The chrome every *.cheminfo.org site carries: the neutrals, the geometry and
|
|
3
|
+
* the type the family shares, then the bar, the menu and the footer drawn from
|
|
4
|
+
* them. A site imports this once and adds only the two colours it owns —
|
|
5
|
+
* `--brand`, `--brand-alt`, the readable `--brand-alt-text` when the second one
|
|
6
|
+
* is too light for text, and `--accent: var(--brand)`.
|
|
7
|
+
*
|
|
8
|
+
* The page background, the box-sizing reset and the focus policy stay with the
|
|
9
|
+
* site: a rule shipped from a package cannot be relied on to lose the cascade
|
|
10
|
+
* against the page importing it.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
:root {
|
|
14
|
+
/* The neutrals, the geometry and the depth are identical on every site of
|
|
15
|
+
the family, so two of them opened side by side read as one house. */
|
|
16
|
+
--surface: #ffffff;
|
|
17
|
+
--surface-sunken: #f5f7fa;
|
|
18
|
+
--surface-raised: #ffffff;
|
|
19
|
+
--border: #dfe3e8;
|
|
20
|
+
--border-strong: #c3cad3;
|
|
21
|
+
--text: #16202c;
|
|
22
|
+
--text-muted: #5b6875;
|
|
23
|
+
--text-faint: #8a96a3;
|
|
24
|
+
|
|
25
|
+
--radius: 10px;
|
|
26
|
+
--radius-lg: 16px;
|
|
27
|
+
--shadow-sm: 0 1px 2px rgb(16 32 48 / 8%);
|
|
28
|
+
--shadow-md: 0 4px 14px rgb(16 32 48 / 10%);
|
|
29
|
+
--shadow-lg: 0 12px 32px rgb(16 32 48 / 16%);
|
|
30
|
+
|
|
31
|
+
--header-height: 3.5rem;
|
|
32
|
+
--page-max: 84rem;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/* The size goes on `body`, never on `html`: `rem` has to stay the browser's
|
|
36
|
+
16px, or every measurement written here shrinks by 6.25% and the bar renders
|
|
37
|
+
52.5px tall on one site and 56px on its sibling. */
|
|
38
|
+
body {
|
|
39
|
+
font-family:
|
|
40
|
+
-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial,
|
|
41
|
+
sans-serif;
|
|
42
|
+
font-size: 15px;
|
|
43
|
+
line-height: 1.5;
|
|
44
|
+
-webkit-font-smoothing: antialiased;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/* A form control does not inherit the page font: it would otherwise be set in
|
|
48
|
+
the UA's Helvetica beside text in ours. */
|
|
49
|
+
input,
|
|
50
|
+
textarea,
|
|
51
|
+
select,
|
|
52
|
+
button {
|
|
53
|
+
font-family: inherit;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/* ── The bar ─────────────────────────────────────────────────────────────── */
|
|
57
|
+
|
|
58
|
+
.app-header {
|
|
59
|
+
position: sticky;
|
|
60
|
+
z-index: 20;
|
|
61
|
+
top: 0;
|
|
62
|
+
flex: none;
|
|
63
|
+
border-bottom: 1px solid var(--border);
|
|
64
|
+
background: var(--surface);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
.app-header__inner {
|
|
68
|
+
display: flex;
|
|
69
|
+
height: var(--header-height);
|
|
70
|
+
max-width: var(--page-max);
|
|
71
|
+
align-items: center;
|
|
72
|
+
padding: 0 1.25rem;
|
|
73
|
+
margin: 0 auto;
|
|
74
|
+
gap: 1rem;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
.brand {
|
|
78
|
+
display: flex;
|
|
79
|
+
align-items: center;
|
|
80
|
+
color: var(--text);
|
|
81
|
+
font-weight: 700;
|
|
82
|
+
gap: 0.55rem;
|
|
83
|
+
text-decoration: none;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
.brand:hover {
|
|
87
|
+
color: var(--text);
|
|
88
|
+
text-decoration: none;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
.brand-mark {
|
|
92
|
+
display: block;
|
|
93
|
+
flex: none;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
.wordmark {
|
|
97
|
+
font-size: 1.0625rem;
|
|
98
|
+
letter-spacing: -0.01em;
|
|
99
|
+
white-space: nowrap;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
.wordmark__lead {
|
|
103
|
+
color: var(--brand);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/* Neutral, so the two coloured halves read as the name rather than as three
|
|
107
|
+
equal parts. */
|
|
108
|
+
.wordmark__dot {
|
|
109
|
+
color: var(--text-faint);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/* The answering colour of several sites is an amber or a yellow sitting around
|
|
113
|
+
2:1 on white, so the name takes the darkened form wherever there is one. */
|
|
114
|
+
.wordmark__alt {
|
|
115
|
+
color: var(--brand-alt-text, var(--brand-alt));
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/* The pages start at the brand and scroll on a narrow window rather than
|
|
119
|
+
pushing the utilities off the edge. */
|
|
120
|
+
.app-header-nav {
|
|
121
|
+
display: flex;
|
|
122
|
+
flex: 1 1 auto;
|
|
123
|
+
min-width: 0;
|
|
124
|
+
align-items: center;
|
|
125
|
+
justify-content: flex-start;
|
|
126
|
+
overflow-x: auto;
|
|
127
|
+
overflow-y: hidden;
|
|
128
|
+
gap: 0.15rem;
|
|
129
|
+
scrollbar-width: thin;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/* The utilities keep the right edge, and never scroll with the pages. */
|
|
133
|
+
.app-header-actions {
|
|
134
|
+
display: flex;
|
|
135
|
+
flex: 0 0 auto;
|
|
136
|
+
align-items: center;
|
|
137
|
+
gap: 0.15rem;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/* Only needed when the pages do not grow — a bar with no page links at all. */
|
|
141
|
+
.spacer {
|
|
142
|
+
flex: 1;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/* Carried by a link and by a button alike, so the whole row reads as one menu
|
|
146
|
+
rather than as a button dropped among addresses. */
|
|
147
|
+
.nav-link {
|
|
148
|
+
display: inline-flex;
|
|
149
|
+
align-items: center;
|
|
150
|
+
padding: 0.4rem 0.7rem;
|
|
151
|
+
border: 0;
|
|
152
|
+
border-radius: 8px;
|
|
153
|
+
background: none;
|
|
154
|
+
color: var(--text-muted);
|
|
155
|
+
font-size: 0.875rem;
|
|
156
|
+
font-weight: 600;
|
|
157
|
+
white-space: nowrap;
|
|
158
|
+
gap: 0.4rem;
|
|
159
|
+
cursor: pointer;
|
|
160
|
+
text-decoration: none;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
.nav-link:hover {
|
|
164
|
+
background: var(--surface-sunken);
|
|
165
|
+
color: var(--text);
|
|
166
|
+
text-decoration: none;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
/* The brand tint is what says "you are here", so hovering never impersonates
|
|
170
|
+
the page you are on. */
|
|
171
|
+
.nav-link--active,
|
|
172
|
+
.nav-link--active:hover {
|
|
173
|
+
background: color-mix(in oklab, var(--accent) 12%, white);
|
|
174
|
+
color: var(--accent);
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
.nav-link svg {
|
|
178
|
+
width: 14px;
|
|
179
|
+
height: 14px;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
/* The Cite and Tools buttons arrive already dressed as bar items, so only their
|
|
183
|
+
type is brought to the one the links beside them are set in. */
|
|
184
|
+
.citation-button .bp6-button,
|
|
185
|
+
.ecosystem-button .bp6-button {
|
|
186
|
+
padding: 0.4rem 0.7rem;
|
|
187
|
+
border-radius: 8px;
|
|
188
|
+
color: var(--text-muted);
|
|
189
|
+
font-size: 0.875rem;
|
|
190
|
+
font-weight: 600;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
/* The brand marks the current entry of a header menu too, not Blueprint's own
|
|
194
|
+
blue. */
|
|
195
|
+
.nav-menu .bp6-menu-item.bp6-active,
|
|
196
|
+
.nav-menu .bp6-menu-item.bp6-active:hover {
|
|
197
|
+
background: color-mix(in oklab, var(--accent) 12%, white);
|
|
198
|
+
color: var(--accent);
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
/* ── The footer ──────────────────────────────────────────────────────────── */
|
|
202
|
+
|
|
203
|
+
/* The family, in the page rather than only behind the Tools button: this is
|
|
204
|
+
what lets a crawler — and a reader — walk from one of our tools to the next. */
|
|
205
|
+
.app-footer {
|
|
206
|
+
border-top: 1px solid var(--border);
|
|
207
|
+
background: var(--surface);
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
.app-footer__inner {
|
|
211
|
+
max-width: var(--page-max);
|
|
212
|
+
padding: 1.25rem;
|
|
213
|
+
margin: 0 auto;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
/* ── Printing ────────────────────────────────────────────────────────────── */
|
|
217
|
+
|
|
218
|
+
/* Students print the cheatsheet. Let them, without the chrome. */
|
|
219
|
+
@media print {
|
|
220
|
+
.no-print {
|
|
221
|
+
display: none !important;
|
|
222
|
+
}
|
|
223
|
+
}
|