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,167 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sampling one atomic orbital onto the scalar field the isosurface renderer
|
|
3
|
+
* consumes.
|
|
4
|
+
*
|
|
5
|
+
* The box is sized from the orbital itself rather than fixed: a 1s on fluorine
|
|
6
|
+
* and a 4f on caesium differ by more than an order of magnitude in extent, and a
|
|
7
|
+
* box that suits one either buries the other in empty space or slices its lobes
|
|
8
|
+
* off at a face. {@link enclosingRadius} gives the sphere holding almost all of
|
|
9
|
+
* the electron, and the cube is drawn around that.
|
|
10
|
+
*
|
|
11
|
+
* Pure: no React, no molstar. `src/viewer` turns the returned field into a
|
|
12
|
+
* surface, and the worker calls this off the main thread.
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
import type { AtomicOrbital } from './atomicOrbitals.ts';
|
|
16
|
+
import { hydrogenicParametersOf } from './atomicOrbitals.ts';
|
|
17
|
+
import type { GridBox, OrbitalEvaluator, OrbitalGrid } from './grid.ts';
|
|
18
|
+
import { evaluateGrid } from './grid.ts';
|
|
19
|
+
import {
|
|
20
|
+
createRadialFunction,
|
|
21
|
+
enclosingRadius,
|
|
22
|
+
radialNodeRadii,
|
|
23
|
+
} from './hydrogenic.ts';
|
|
24
|
+
|
|
25
|
+
/** How finely, and how far out, an orbital is sampled. */
|
|
26
|
+
export interface AtomicGridOptions {
|
|
27
|
+
/**
|
|
28
|
+
* Samples along each edge of the cube. The cost is the cube of this, and 56
|
|
29
|
+
* resolves the radial node of a 3s while staying near 30 ms.
|
|
30
|
+
* @default 56
|
|
31
|
+
*/
|
|
32
|
+
resolution?: number;
|
|
33
|
+
/**
|
|
34
|
+
* Share of `∫ r²R² dr` the box must contain before padding.
|
|
35
|
+
* @default 0.985
|
|
36
|
+
*/
|
|
37
|
+
enclosedFraction?: number;
|
|
38
|
+
/**
|
|
39
|
+
* Multiplier applied to the enclosing radius, so the surface closes inside
|
|
40
|
+
* the box instead of touching a face.
|
|
41
|
+
* @default 1.15
|
|
42
|
+
*/
|
|
43
|
+
padding?: number;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Sample an atomic orbital onto a cubic grid centred on its nucleus.
|
|
48
|
+
* @param orbital - The orbital to draw.
|
|
49
|
+
* @param options - See {@link AtomicGridOptions}.
|
|
50
|
+
* @returns The signed field, its layout and its statistics.
|
|
51
|
+
* @throws {Error} When the resolution is below 2.
|
|
52
|
+
*/
|
|
53
|
+
export function sampleAtomicOrbital(
|
|
54
|
+
orbital: AtomicOrbital,
|
|
55
|
+
options: AtomicGridOptions = {},
|
|
56
|
+
): OrbitalGrid {
|
|
57
|
+
const {
|
|
58
|
+
resolution = DEFAULT_RESOLUTION,
|
|
59
|
+
enclosedFraction = DEFAULT_ENCLOSED_FRACTION,
|
|
60
|
+
padding = DEFAULT_PADDING,
|
|
61
|
+
} = options;
|
|
62
|
+
return evaluateGrid(
|
|
63
|
+
createAtomicOrbitalEvaluator(orbital),
|
|
64
|
+
atomicGridBox(orbital, enclosedFraction, padding),
|
|
65
|
+
resolution,
|
|
66
|
+
);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Build `ψ(x, y, z) = R(r) Y(x, y, z)` for one orbital, centred on the origin.
|
|
71
|
+
* @param orbital - The orbital to evaluate.
|
|
72
|
+
* @returns An allocation-free evaluator in ångström, returning Å^(-3/2).
|
|
73
|
+
*/
|
|
74
|
+
export function createAtomicOrbitalEvaluator(
|
|
75
|
+
orbital: AtomicOrbital,
|
|
76
|
+
): OrbitalEvaluator {
|
|
77
|
+
const radial = createRadialFunction(hydrogenicParametersOf(orbital));
|
|
78
|
+
const angular = orbital.harmonic.evaluate;
|
|
79
|
+
// Every ℓ > 0 harmonic divides by the radius, and the nucleus is a grid point
|
|
80
|
+
// whenever the resolution is odd, so the singularity is real and is answered
|
|
81
|
+
// here: only an s orbital has amplitude at r = 0.
|
|
82
|
+
const atNucleus = orbital.l === 0 ? radial(0) * angular(0, 0, 0, 1) : 0;
|
|
83
|
+
return (x, y, z) => {
|
|
84
|
+
const squared = x * x + y * y + z * z;
|
|
85
|
+
if (squared === 0) return atNucleus;
|
|
86
|
+
const radius = Math.sqrt(squared);
|
|
87
|
+
return radial(radius) * angular(x, y, z, radius);
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* The cube one orbital is sampled over.
|
|
93
|
+
* @param orbital - The orbital to fit.
|
|
94
|
+
* @param enclosedFraction - Share of the electron to contain.
|
|
95
|
+
* @param padding - Multiplier applied to the enclosing radius.
|
|
96
|
+
* @returns A cube centred on the nucleus.
|
|
97
|
+
*/
|
|
98
|
+
export function atomicGridBox(
|
|
99
|
+
orbital: AtomicOrbital,
|
|
100
|
+
enclosedFraction = DEFAULT_ENCLOSED_FRACTION,
|
|
101
|
+
padding = DEFAULT_PADDING,
|
|
102
|
+
): GridBox {
|
|
103
|
+
const half =
|
|
104
|
+
enclosingRadius(hydrogenicParametersOf(orbital), enclosedFraction) *
|
|
105
|
+
padding;
|
|
106
|
+
return {
|
|
107
|
+
origin: { x: -half, y: -half, z: -half },
|
|
108
|
+
size: { x: 2 * half, y: 2 * half, z: 2 * half },
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/** How finely one orbital may be sampled, whatever its shape asks for. */
|
|
113
|
+
export interface ResolutionLimits {
|
|
114
|
+
/** Samples per edge no orbital drops below. */
|
|
115
|
+
floor: number;
|
|
116
|
+
/** Samples per edge no orbital exceeds. */
|
|
117
|
+
cap: number;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* How finely this particular orbital has to be sampled.
|
|
122
|
+
*
|
|
123
|
+
* One resolution for a whole periodic table draws the nested orbitals badly.
|
|
124
|
+
* The box is sized by the outermost lobe, but a `4p` also has to separate two
|
|
125
|
+
* inner shells packed against the nucleus, and at 56 samples per edge xenon's
|
|
126
|
+
* innermost 4p lobe spans **6.6 voxels** while the outer one spans 41 — the
|
|
127
|
+
* inner shells come out as lumps and the outer surface visibly faceted. What
|
|
128
|
+
* sets the requirement is therefore the ratio between the box and the smallest
|
|
129
|
+
* feature in it, not the orbital's size, which is why a nodeless orbital
|
|
130
|
+
* (every `1s`, `2p`, `3d`, `4f`) stays on the floor and costs nothing extra.
|
|
131
|
+
*
|
|
132
|
+
* The cap is not a budget cheat: the innermost lobe of caesium's `7s` would
|
|
133
|
+
* need 858 samples per edge, and no uniform grid the browser can afford
|
|
134
|
+
* resolves it. Those orbitals are drawn as well as the cap allows.
|
|
135
|
+
* @param orbital - The orbital to draw.
|
|
136
|
+
* @param limits - See {@link ResolutionLimits}.
|
|
137
|
+
* @returns Samples along each edge of the cube.
|
|
138
|
+
*/
|
|
139
|
+
export function atomicGridResolution(
|
|
140
|
+
orbital: AtomicOrbital,
|
|
141
|
+
limits: ResolutionLimits,
|
|
142
|
+
): number {
|
|
143
|
+
const { floor, cap } = limits;
|
|
144
|
+
const parameters = hydrogenicParametersOf(orbital);
|
|
145
|
+
const innermost = radialNodeRadii(parameters)[0];
|
|
146
|
+
if (innermost === undefined || !(innermost > 0)) return Math.min(floor, cap);
|
|
147
|
+
const half = atomicGridBox(orbital).size.x / 2;
|
|
148
|
+
// The samples span the box edge to edge, so `resolution - 1` of them cover
|
|
149
|
+
// it: a lobe of radius r gets `r (resolution - 1) / half` across its diameter.
|
|
150
|
+
const needed = Math.ceil((INNER_LOBE_SAMPLES * half) / innermost) + 1;
|
|
151
|
+
return Math.min(cap, Math.max(floor, needed));
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
/** Samples per edge; the cost is the cube of it. */
|
|
155
|
+
const DEFAULT_RESOLUTION = 56;
|
|
156
|
+
|
|
157
|
+
/**
|
|
158
|
+
* Samples the innermost radial lobe is asked to span, edge to edge. Below
|
|
159
|
+
* about eight, marching cubes turns a sphere into a faceted blob.
|
|
160
|
+
*/
|
|
161
|
+
const INNER_LOBE_SAMPLES = 12;
|
|
162
|
+
|
|
163
|
+
/** A tail past this holds too little density to change the surface. */
|
|
164
|
+
const DEFAULT_ENCLOSED_FRACTION = 0.985;
|
|
165
|
+
|
|
166
|
+
/** Room for the surface to close before the box ends. */
|
|
167
|
+
const DEFAULT_PADDING = 1.15;
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Every orbital of one element, assembled from the four parts that describe it.
|
|
3
|
+
*
|
|
4
|
+
* The configuration says which subshells hold electrons, Slater's rules say how
|
|
5
|
+
* strongly each is bound, the hydrogen-like radial function gives it a size and
|
|
6
|
+
* its radial nodes, and a real spherical harmonic gives it a shape. This module
|
|
7
|
+
* is only the join — it computes nothing itself, which is what keeps each of
|
|
8
|
+
* those four testable on its own.
|
|
9
|
+
*
|
|
10
|
+
* Electrons inside a subshell are spread by Hund's rule: every orbital of the
|
|
11
|
+
* subshell takes one before any takes a second. That is why nitrogen shows
|
|
12
|
+
* three singly-occupied 2p orbitals and oxygen one pair and two singles.
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
import {
|
|
16
|
+
MADELUNG_ORDER,
|
|
17
|
+
configurationOf,
|
|
18
|
+
subshellLabel,
|
|
19
|
+
} from './electronConfiguration.ts';
|
|
20
|
+
import type { HydrogenicParameters } from './hydrogenic.ts';
|
|
21
|
+
import { meanRadius, orbitalEnergy, radialNodeCount } from './hydrogenic.ts';
|
|
22
|
+
import {
|
|
23
|
+
MINIMUM_CHARGE,
|
|
24
|
+
defaultMaximumShell,
|
|
25
|
+
hundDistribution,
|
|
26
|
+
outermostShell,
|
|
27
|
+
withoutOutermostElectron,
|
|
28
|
+
} from './occupancy.ts';
|
|
29
|
+
import type { RealHarmonic } from './realHarmonics.ts';
|
|
30
|
+
import { harmonicsOf, subshellLetter } from './realHarmonics.ts';
|
|
31
|
+
import { slaterScreening } from './screening.ts';
|
|
32
|
+
|
|
33
|
+
/** One atomic orbital of one element: a shape, a size and an occupancy. */
|
|
34
|
+
export interface AtomicOrbital {
|
|
35
|
+
/** Url-safe and unique within the element, e.g. `3dx2-y2`. */
|
|
36
|
+
id: string;
|
|
37
|
+
n: number;
|
|
38
|
+
/** Angular momentum quantum number: 0 = s, 1 = p, 2 = d, 3 = f. */
|
|
39
|
+
l: number;
|
|
40
|
+
/** Which of the `2ℓ + 1` real harmonics of the subshell. */
|
|
41
|
+
harmonic: RealHarmonic;
|
|
42
|
+
/** Subshell name without the subscript, e.g. `3d`. */
|
|
43
|
+
shell: string;
|
|
44
|
+
/** Electrons in this one orbital: 0, 1 or 2, after Hund's rule. */
|
|
45
|
+
electrons: number;
|
|
46
|
+
/** Electrons in the whole subshell. */
|
|
47
|
+
subshellElectrons: number;
|
|
48
|
+
/** Effective nuclear charge from Slater's rules. */
|
|
49
|
+
effectiveCharge: number;
|
|
50
|
+
/** Shielding `S` those rules produced. */
|
|
51
|
+
shielding: number;
|
|
52
|
+
/** `−13.6 Z_eff²/n²`, electronvolts. */
|
|
53
|
+
energy: number;
|
|
54
|
+
/** `n − ℓ − 1` spheres on which the wavefunction changes sign. */
|
|
55
|
+
radialNodes: number;
|
|
56
|
+
/** ℓ planes or cones on which it changes sign. */
|
|
57
|
+
angularNodes: number;
|
|
58
|
+
/** `⟨r⟩`, ångström. */
|
|
59
|
+
meanRadius: number;
|
|
60
|
+
/** True when the subshell is empty in the ground state. */
|
|
61
|
+
isVirtual: boolean;
|
|
62
|
+
/** True when this is the outermost occupied shell. */
|
|
63
|
+
isValence: boolean;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/** Options for {@link atomicOrbitalsOf}. */
|
|
67
|
+
export interface AtomicOrbitalOptions {
|
|
68
|
+
/**
|
|
69
|
+
* Highest principal quantum number to include. Defaults to one shell past
|
|
70
|
+
* the outermost occupied one, and never below 4 — a hydrogen atom whose list
|
|
71
|
+
* stopped at 2p would be missing exactly the 3d and 4f pictures it is famous
|
|
72
|
+
* for.
|
|
73
|
+
* @default max(4, outermost occupied n + 1), capped at 7
|
|
74
|
+
*/
|
|
75
|
+
maximumShell?: number;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Every orbital of an element, in Madelung (roughly energetic) order.
|
|
80
|
+
* @param atomicNumber - Proton count, 1 to 118.
|
|
81
|
+
* @param options - See {@link AtomicOrbitalOptions}.
|
|
82
|
+
* @returns The orbitals, occupied ones first in filling order and the empty
|
|
83
|
+
* ones after them in the same order.
|
|
84
|
+
* @throws {Error} When the atomic number is outside the periodic table.
|
|
85
|
+
*/
|
|
86
|
+
export function atomicOrbitalsOf(
|
|
87
|
+
atomicNumber: number,
|
|
88
|
+
options: AtomicOrbitalOptions = {},
|
|
89
|
+
): AtomicOrbital[] {
|
|
90
|
+
const configuration = configurationOf(atomicNumber);
|
|
91
|
+
const valenceShell = outermostShell(configuration);
|
|
92
|
+
const { maximumShell = defaultMaximumShell(valenceShell) } = options;
|
|
93
|
+
const occupancies = new Map<string, number>();
|
|
94
|
+
for (const entry of configuration) {
|
|
95
|
+
occupancies.set(`${entry.n}.${entry.l}`, entry.electrons);
|
|
96
|
+
}
|
|
97
|
+
const promoted = withoutOutermostElectron(configuration);
|
|
98
|
+
|
|
99
|
+
const orbitals: AtomicOrbital[] = [];
|
|
100
|
+
for (const subshell of MADELUNG_ORDER) {
|
|
101
|
+
if (subshell.n > maximumShell) continue;
|
|
102
|
+
const subshellElectrons =
|
|
103
|
+
occupancies.get(`${subshell.n}.${subshell.l}`) ?? 0;
|
|
104
|
+
// An empty orbital is the one an electron would be *promoted* into, so the
|
|
105
|
+
// electron doing the promoting is not also left behind to screen it. This
|
|
106
|
+
// is what makes hydrogen's 3s and 4f come out as the exact hydrogen
|
|
107
|
+
// orbitals every textbook draws, rather than as unbound ones: screened by
|
|
108
|
+
// its own single electron, hydrogen's 3s would see a nuclear charge of zero.
|
|
109
|
+
const screening = slaterScreening(
|
|
110
|
+
atomicNumber,
|
|
111
|
+
subshellElectrons === 0 ? promoted : configuration,
|
|
112
|
+
subshell,
|
|
113
|
+
);
|
|
114
|
+
// Slater's rules can still over-screen a far virtual orbital; a charge at
|
|
115
|
+
// or below zero has no bound radial function at all.
|
|
116
|
+
const charge = Math.max(screening.effectiveCharge, MINIMUM_CHARGE);
|
|
117
|
+
const parameters: HydrogenicParameters = {
|
|
118
|
+
n: subshell.n,
|
|
119
|
+
l: subshell.l,
|
|
120
|
+
charge,
|
|
121
|
+
};
|
|
122
|
+
const harmonics = harmonicsOf(subshell.l);
|
|
123
|
+
const spread = hundDistribution(subshellElectrons, harmonics.length);
|
|
124
|
+
for (let index = 0; index < harmonics.length; index++) {
|
|
125
|
+
const harmonic = harmonics[index] as RealHarmonic;
|
|
126
|
+
orbitals.push({
|
|
127
|
+
id: orbitalId(subshell.n, subshell.l, harmonic),
|
|
128
|
+
n: subshell.n,
|
|
129
|
+
l: subshell.l,
|
|
130
|
+
harmonic,
|
|
131
|
+
shell: subshellLabel(subshell),
|
|
132
|
+
electrons: spread[index] as number,
|
|
133
|
+
subshellElectrons,
|
|
134
|
+
effectiveCharge: charge,
|
|
135
|
+
shielding: screening.shielding,
|
|
136
|
+
energy: orbitalEnergy(parameters),
|
|
137
|
+
radialNodes: radialNodeCount(parameters),
|
|
138
|
+
angularNodes: subshell.l,
|
|
139
|
+
meanRadius: meanRadius(parameters),
|
|
140
|
+
isVirtual: subshellElectrons === 0,
|
|
141
|
+
isValence: subshellElectrons > 0 && subshell.n === valenceShell,
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
return orbitals;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
/**
|
|
149
|
+
* Find one orbital of an element by its id.
|
|
150
|
+
* @param orbitals - What {@link atomicOrbitalsOf} returned.
|
|
151
|
+
* @param id - Orbital id, e.g. `2px`.
|
|
152
|
+
* @returns The orbital, or `null` when the id names none.
|
|
153
|
+
*/
|
|
154
|
+
export function findAtomicOrbital(
|
|
155
|
+
orbitals: readonly AtomicOrbital[],
|
|
156
|
+
id: string,
|
|
157
|
+
): AtomicOrbital | null {
|
|
158
|
+
for (const orbital of orbitals) {
|
|
159
|
+
if (orbital.id === id) return orbital;
|
|
160
|
+
}
|
|
161
|
+
return null;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
/**
|
|
165
|
+
* The hydrogen-like parameters an orbital is drawn from.
|
|
166
|
+
* @param orbital - The orbital.
|
|
167
|
+
* @returns Its principal quantum number, ℓ and effective charge.
|
|
168
|
+
*/
|
|
169
|
+
export function hydrogenicParametersOf(
|
|
170
|
+
orbital: AtomicOrbital,
|
|
171
|
+
): HydrogenicParameters {
|
|
172
|
+
return { n: orbital.n, l: orbital.l, charge: orbital.effectiveCharge };
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
/**
|
|
176
|
+
* The id of one orbital, as it appears in a URL.
|
|
177
|
+
* @param n - Principal quantum number.
|
|
178
|
+
* @param l - Angular momentum quantum number.
|
|
179
|
+
* @param harmonic - Which real harmonic of the subshell.
|
|
180
|
+
* @returns The id, e.g. `4fxyz`.
|
|
181
|
+
*/
|
|
182
|
+
export function orbitalId(
|
|
183
|
+
n: number,
|
|
184
|
+
l: number,
|
|
185
|
+
harmonic: RealHarmonic,
|
|
186
|
+
): string {
|
|
187
|
+
return `${n}${subshellLetter(l)}${harmonic.key}`;
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
/**
|
|
191
|
+
* The orbital a student should land on when they pick an element: the first
|
|
192
|
+
* one of the outermost occupied subshell, which is what the element's chemistry
|
|
193
|
+
* is about.
|
|
194
|
+
* @param orbitals - What {@link atomicOrbitalsOf} returned.
|
|
195
|
+
* @returns Its id, or `null` when the list is empty.
|
|
196
|
+
*/
|
|
197
|
+
export function defaultOrbitalId(
|
|
198
|
+
orbitals: readonly AtomicOrbital[],
|
|
199
|
+
): string | null {
|
|
200
|
+
let candidate: AtomicOrbital | null = null;
|
|
201
|
+
for (const orbital of orbitals) {
|
|
202
|
+
if (orbital.electrons === 0) continue;
|
|
203
|
+
if (candidate === null) {
|
|
204
|
+
candidate = orbital;
|
|
205
|
+
} else if (orbital.n > candidate.n) {
|
|
206
|
+
candidate = orbital;
|
|
207
|
+
} else if (orbital.n === candidate.n && orbital.l > candidate.l) {
|
|
208
|
+
candidate = orbital;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
return (candidate ?? orbitals[0])?.id ?? null;
|
|
212
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The two physical constants the orbital maths is written in, and the units
|
|
3
|
+
* everything else here follows.
|
|
4
|
+
*
|
|
5
|
+
* Distances are **ångström** and amplitudes **Å^(-3/2)** throughout, so
|
|
6
|
+
* `∫|ψ|² dV` over a grid measured in ångström is one and nothing has to be
|
|
7
|
+
* converted on the way to a renderer. The Bohr radius therefore appears exactly
|
|
8
|
+
* once, in `hydrogenic.ts`.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
/** The Bohr radius in ångström (CODATA 2018). */
|
|
12
|
+
export const BOHR_IN_ANGSTROM = 0.529_177_210_903;
|
|
13
|
+
|
|
14
|
+
/** One rydberg in electronvolts (CODATA 2018). */
|
|
15
|
+
export const RYDBERG_ELECTRONVOLTS = 13.605_693_122_994;
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Share of an orbital's weight the default isosurface encloses.
|
|
19
|
+
*
|
|
20
|
+
* 0.85 is the contour a textbook draws: tight enough that the lobes are
|
|
21
|
+
* separate shapes, loose enough that the outer one of a 3s is still there.
|
|
22
|
+
*/
|
|
23
|
+
export const ENCLOSED_WEIGHT = 0.85;
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* A point in space, ångström.
|
|
27
|
+
*
|
|
28
|
+
* Declared here rather than taken from a geometry package: three numbers are
|
|
29
|
+
* not worth a dependency, and this one crosses a worker boundary as a plain
|
|
30
|
+
* object.
|
|
31
|
+
*/
|
|
32
|
+
export interface Vec3 {
|
|
33
|
+
x: number;
|
|
34
|
+
y: number;
|
|
35
|
+
z: number;
|
|
36
|
+
}
|
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ground-state electron configurations, by the Aufbau principle and the twenty
|
|
3
|
+
* elements that ignore it.
|
|
4
|
+
*
|
|
5
|
+
* Subshells fill in Madelung order — increasing `n + ℓ`, and increasing `n`
|
|
6
|
+
* within a tie — which is why 4s fills before 3d. That rule gets 98 of the 118
|
|
7
|
+
* elements right; the rest are measured, not derived, and live in
|
|
8
|
+
* {@link ELEMENT_ANOMALIES}. Chromium is the canonical one: Aufbau predicts
|
|
9
|
+
* `[Ar]3d⁴4s²` and the atom is `[Ar]3d⁵4s¹`.
|
|
10
|
+
*
|
|
11
|
+
* Configurations are returned sorted by `n` then `ℓ`, the order a textbook
|
|
12
|
+
* writes them in — `[Ar]3d⁵4s¹`, not `[Ar]4s¹3d⁵`.
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
import { subshellLetter } from './realHarmonics.ts';
|
|
16
|
+
|
|
17
|
+
/** One subshell, e.g. `{ n: 3, l: 2 }` for 3d. */
|
|
18
|
+
export interface Subshell {
|
|
19
|
+
n: number;
|
|
20
|
+
/** Angular momentum quantum number: 0 = s, 1 = p, 2 = d, 3 = f. */
|
|
21
|
+
l: number;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/** A subshell and how many electrons sit in it. */
|
|
25
|
+
export interface SubshellOccupancy extends Subshell {
|
|
26
|
+
electrons: number;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/** No known element occupies a shell above n = 7. */
|
|
30
|
+
const MAXIMUM_PRINCIPAL_NUMBER = 7;
|
|
31
|
+
|
|
32
|
+
/** Protons in the heaviest element that has been made. */
|
|
33
|
+
export const HIGHEST_ATOMIC_NUMBER = 118;
|
|
34
|
+
|
|
35
|
+
/** The atomic numbers of the noble gases, which a configuration abbreviates on. */
|
|
36
|
+
export const NOBLE_GASES: readonly number[] = [2, 10, 18, 36, 54, 86, 118];
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Reject an atomic number outside the periodic table.
|
|
40
|
+
* @param atomicNumber - Proton count to check.
|
|
41
|
+
* @throws {Error} When it is not an integer between 1 and 118.
|
|
42
|
+
*/
|
|
43
|
+
export function assertAtomicNumber(atomicNumber: number): void {
|
|
44
|
+
if (
|
|
45
|
+
!Number.isInteger(atomicNumber) ||
|
|
46
|
+
atomicNumber < 1 ||
|
|
47
|
+
atomicNumber > HIGHEST_ATOMIC_NUMBER
|
|
48
|
+
) {
|
|
49
|
+
throw new RangeError(`no element with atomic number ${atomicNumber}`);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Subshells in the order they fill, `s` to `f` and up to n = 7 — everything the
|
|
55
|
+
* 118 known elements use, plus the empty subshells a light atom's virtual
|
|
56
|
+
* orbitals come from.
|
|
57
|
+
*/
|
|
58
|
+
export const MADELUNG_ORDER: Subshell[] = buildMadelungOrder();
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* How many electrons a subshell holds: `2(2ℓ + 1)`.
|
|
62
|
+
* @param l - Angular momentum quantum number.
|
|
63
|
+
* @returns The capacity, `2(2ℓ + 1)`.
|
|
64
|
+
*/
|
|
65
|
+
export function subshellCapacity(l: number): number {
|
|
66
|
+
return 2 * (2 * l + 1);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* The measured ground states that Madelung order gets wrong, as the occupancy
|
|
71
|
+
* beyond the preceding noble gas.
|
|
72
|
+
*
|
|
73
|
+
* Half-filled and filled d shells are unusually stable, which is the story for
|
|
74
|
+
* Cr, Cu, Mo, Ag, Au and Gd; the early actinides are relativistic and 6d/5f sit
|
|
75
|
+
* almost on top of each other. Configurations past lawrencium are calculated
|
|
76
|
+
* rather than observed, so nothing beyond Z = 103 is listed here.
|
|
77
|
+
*/
|
|
78
|
+
export const ELEMENT_ANOMALIES: Record<number, SubshellOccupancy[]> = {
|
|
79
|
+
24: [o(3, 2, 5), o(4, 0, 1)],
|
|
80
|
+
29: [o(3, 2, 10), o(4, 0, 1)],
|
|
81
|
+
41: [o(4, 2, 4), o(5, 0, 1)],
|
|
82
|
+
42: [o(4, 2, 5), o(5, 0, 1)],
|
|
83
|
+
44: [o(4, 2, 7), o(5, 0, 1)],
|
|
84
|
+
45: [o(4, 2, 8), o(5, 0, 1)],
|
|
85
|
+
46: [o(4, 2, 10)],
|
|
86
|
+
47: [o(4, 2, 10), o(5, 0, 1)],
|
|
87
|
+
57: [o(5, 2, 1), o(6, 0, 2)],
|
|
88
|
+
58: [o(4, 3, 1), o(5, 2, 1), o(6, 0, 2)],
|
|
89
|
+
64: [o(4, 3, 7), o(5, 2, 1), o(6, 0, 2)],
|
|
90
|
+
78: [o(4, 3, 14), o(5, 2, 9), o(6, 0, 1)],
|
|
91
|
+
79: [o(4, 3, 14), o(5, 2, 10), o(6, 0, 1)],
|
|
92
|
+
89: [o(6, 2, 1), o(7, 0, 2)],
|
|
93
|
+
90: [o(6, 2, 2), o(7, 0, 2)],
|
|
94
|
+
91: [o(5, 3, 2), o(6, 2, 1), o(7, 0, 2)],
|
|
95
|
+
92: [o(5, 3, 3), o(6, 2, 1), o(7, 0, 2)],
|
|
96
|
+
93: [o(5, 3, 4), o(6, 2, 1), o(7, 0, 2)],
|
|
97
|
+
96: [o(5, 3, 7), o(6, 2, 1), o(7, 0, 2)],
|
|
98
|
+
103: [o(5, 3, 14), o(7, 0, 2), o(7, 1, 1)],
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* The ground-state configuration of a neutral atom.
|
|
103
|
+
* @param atomicNumber - Proton count, 1 to 118.
|
|
104
|
+
* @returns Its occupied subshells, sorted by `n` then `ℓ`.
|
|
105
|
+
* @throws {Error} When the atomic number is outside the table.
|
|
106
|
+
*/
|
|
107
|
+
export function configurationOf(atomicNumber: number): SubshellOccupancy[] {
|
|
108
|
+
assertAtomicNumber(atomicNumber);
|
|
109
|
+
const anomaly = ELEMENT_ANOMALIES[atomicNumber];
|
|
110
|
+
if (anomaly === undefined) return sortByShell(aufbauFill(atomicNumber));
|
|
111
|
+
const core = coreAtomicNumber(atomicNumber);
|
|
112
|
+
return sortByShell([
|
|
113
|
+
...aufbauFill(core),
|
|
114
|
+
...anomaly.map((entry) => ({ ...entry })),
|
|
115
|
+
]);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* Whether an element's ground state departs from Madelung order.
|
|
120
|
+
* @param atomicNumber - Proton count.
|
|
121
|
+
* @returns True for the twenty listed in {@link ELEMENT_ANOMALIES}.
|
|
122
|
+
*/
|
|
123
|
+
export function isAnomalous(atomicNumber: number): boolean {
|
|
124
|
+
return atomicNumber in ELEMENT_ANOMALIES;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* What Madelung order alone predicts, so the UI can show the two side by side.
|
|
129
|
+
* @param atomicNumber - Proton count, 1 to 118.
|
|
130
|
+
* @returns The predicted occupied subshells, sorted by `n` then `ℓ`.
|
|
131
|
+
*/
|
|
132
|
+
export function aufbauConfigurationOf(
|
|
133
|
+
atomicNumber: number,
|
|
134
|
+
): SubshellOccupancy[] {
|
|
135
|
+
return sortByShell(aufbauFill(atomicNumber));
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* The noble gas a configuration is abbreviated against.
|
|
140
|
+
* @param atomicNumber - Proton count.
|
|
141
|
+
* @returns The largest noble gas strictly below it, or 0 for hydrogen and
|
|
142
|
+
* helium, which are written out in full.
|
|
143
|
+
*/
|
|
144
|
+
export function coreAtomicNumber(atomicNumber: number): number {
|
|
145
|
+
let core = 0;
|
|
146
|
+
for (const noble of NOBLE_GASES) {
|
|
147
|
+
if (noble >= atomicNumber) break;
|
|
148
|
+
core = noble;
|
|
149
|
+
}
|
|
150
|
+
return core;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* Write a configuration the way a textbook does.
|
|
155
|
+
* @param occupancies - Subshells to write, in the order they should appear.
|
|
156
|
+
* @returns A string such as `1s² 2s² 2p⁶`.
|
|
157
|
+
*/
|
|
158
|
+
export function formatConfiguration(
|
|
159
|
+
occupancies: readonly SubshellOccupancy[],
|
|
160
|
+
): string {
|
|
161
|
+
const parts: string[] = [];
|
|
162
|
+
for (const occupancy of occupancies) parts.push(formatOccupancy(occupancy));
|
|
163
|
+
return parts.join(' ');
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
/**
|
|
167
|
+
* Write one subshell, e.g. `3d⁵`.
|
|
168
|
+
* @param occupancy - The subshell and its electron count.
|
|
169
|
+
* @returns The label with a superscript electron count.
|
|
170
|
+
*/
|
|
171
|
+
export function formatOccupancy(occupancy: SubshellOccupancy): string {
|
|
172
|
+
return `${subshellLabel(occupancy)}${superscript(occupancy.electrons)}`;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
/**
|
|
176
|
+
* Write one subshell without its electron count, e.g. `3d`.
|
|
177
|
+
* @param subshell - The subshell.
|
|
178
|
+
* @returns The principal quantum number followed by the subshell letter.
|
|
179
|
+
*/
|
|
180
|
+
export function subshellLabel(subshell: Subshell): string {
|
|
181
|
+
return `${subshell.n}${subshellLetter(subshell.l)}`;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
/**
|
|
185
|
+
* Render a number in unicode superscript digits.
|
|
186
|
+
* @param value - A non-negative integer.
|
|
187
|
+
* @returns The digits as superscripts, e.g. `14` becomes `¹⁴`.
|
|
188
|
+
*/
|
|
189
|
+
export function superscript(value: number): string {
|
|
190
|
+
let text = '';
|
|
191
|
+
for (const digit of String(value)) {
|
|
192
|
+
text += SUPERSCRIPT_DIGITS[Number(digit)] ?? digit;
|
|
193
|
+
}
|
|
194
|
+
return text;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
const SUPERSCRIPT_DIGITS = ['⁰', '¹', '²', '³', '⁴', '⁵', '⁶', '⁷', '⁸', '⁹'];
|
|
198
|
+
|
|
199
|
+
function o(n: number, l: number, electrons: number): SubshellOccupancy {
|
|
200
|
+
return { n, l, electrons };
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
/**
|
|
204
|
+
* Fill `count` electrons into {@link MADELUNG_ORDER}, lowest subshell first.
|
|
205
|
+
* @param count - Electrons to place.
|
|
206
|
+
* @returns The filled subshells, in Madelung order.
|
|
207
|
+
*/
|
|
208
|
+
function aufbauFill(count: number): SubshellOccupancy[] {
|
|
209
|
+
const filled: SubshellOccupancy[] = [];
|
|
210
|
+
let left = count;
|
|
211
|
+
for (const subshell of MADELUNG_ORDER) {
|
|
212
|
+
if (left <= 0) break;
|
|
213
|
+
const electrons = Math.min(left, subshellCapacity(subshell.l));
|
|
214
|
+
filled.push({ n: subshell.n, l: subshell.l, electrons });
|
|
215
|
+
left -= electrons;
|
|
216
|
+
}
|
|
217
|
+
return filled;
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
function sortByShell(occupancies: SubshellOccupancy[]): SubshellOccupancy[] {
|
|
221
|
+
return occupancies.toSorted((first, second) =>
|
|
222
|
+
first.n === second.n ? first.l - second.l : first.n - second.n,
|
|
223
|
+
);
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
/**
|
|
227
|
+
* Madelung order: ascending `n + ℓ`, then ascending `n`. Capped at ℓ = 3 — the
|
|
228
|
+
* g subshells a Madelung diagram shows after 8s are unoccupied in every known
|
|
229
|
+
* element, and this site has no g harmonics to draw them with.
|
|
230
|
+
* @returns The subshells, in filling order.
|
|
231
|
+
*/
|
|
232
|
+
function buildMadelungOrder(): Subshell[] {
|
|
233
|
+
const order: Subshell[] = [];
|
|
234
|
+
for (let sum = 1; sum <= 10; sum++) {
|
|
235
|
+
for (let l = Math.min(3, Math.ceil(sum / 2) - 1); l >= 0; l--) {
|
|
236
|
+
const n = sum - l;
|
|
237
|
+
if (n > MAXIMUM_PRINCIPAL_NUMBER || n <= l) continue;
|
|
238
|
+
order.push({ n, l });
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
return order;
|
|
242
|
+
}
|