react-cheminfo 0.3.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +111 -23
- 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 +11 -0
- package/lib/core.d.ts.map +1 -1
- package/lib/core.js +11 -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 +2 -0
- package/lib/ecosystem/core/sites.d.ts.map +1 -1
- package/lib/ecosystem/core/sites.js +15 -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/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 +13 -3
- 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 +27 -0
- package/lib/orbital/core/atomicGrid.d.ts.map +1 -1
- package/lib/orbital/core/atomicGrid.js +37 -1
- package/lib/orbital/core/atomicGrid.js.map +1 -1
- package/lib/orbital/core/index.d.ts +9 -7
- package/lib/orbital/core/index.d.ts.map +1 -1
- package/lib/orbital/core/index.js +7 -6
- package/lib/orbital/core/index.js.map +1 -1
- 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/sample.d.ts +15 -1
- package/lib/orbital/core/sample.d.ts.map +1 -1
- package/lib/orbital/core/sample.js +10 -3
- package/lib/orbital/core/sample.js.map +1 -1
- package/lib/orbital/ui/AtomicOrbitalCanvas.d.ts +6 -1
- package/lib/orbital/ui/AtomicOrbitalCanvas.d.ts.map +1 -1
- package/lib/orbital/ui/AtomicOrbitalCanvas.js +12 -2
- package/lib/orbital/ui/AtomicOrbitalCanvas.js.map +1 -1
- package/lib/orbital/ui/AtomicOrbitalViewer.d.ts +5 -1
- package/lib/orbital/ui/AtomicOrbitalViewer.d.ts.map +1 -1
- package/lib/orbital/ui/AtomicOrbitalViewer.js.map +1 -1
- package/lib/orbital/ui/renderVolume.d.ts +6 -3
- package/lib/orbital/ui/renderVolume.d.ts.map +1 -1
- package/lib/orbital/ui/renderVolume.js +14 -15
- package/lib/orbital/ui/renderVolume.js.map +1 -1
- package/lib/orbital/ui/viewer.d.ts +3 -1
- package/lib/orbital/ui/viewer.d.ts.map +1 -1
- package/lib/orbital/ui/viewer.js +3 -2
- package/lib/orbital/ui/viewer.js.map +1 -1
- package/lib/orbital/ui/volumeField.d.ts +5 -21
- package/lib/orbital/ui/volumeField.d.ts.map +1 -1
- package/lib/orbital/ui/volumeField.js +5 -45
- package/lib/orbital/ui/volumeField.js.map +1 -1
- 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 +18 -5
- 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 +11 -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 +17 -0
- 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/index.ts +4 -0
- package/src/ecosystem/ui/marks.tsx +54 -15
- 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 +53 -1
- package/src/orbital/core/index.ts +7 -16
- package/src/orbital/core/isovalue.ts +146 -0
- package/src/orbital/core/sample.ts +25 -5
- package/src/orbital/ui/AtomicOrbitalCanvas.tsx +19 -3
- package/src/orbital/ui/AtomicOrbitalViewer.tsx +5 -1
- package/src/orbital/ui/renderVolume.ts +29 -16
- package/src/orbital/ui/viewer.ts +6 -1
- package/src/orbital/ui/volumeField.ts +5 -49
- 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,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The two shades each level of the guided tour is painted in.
|
|
3
|
+
*
|
|
4
|
+
* Green, amber, pink — the same three the level tags use, in the pale weights a
|
|
5
|
+
* strip of buttons can sit on. They are shared so a student moving from one of
|
|
6
|
+
* our tools to the next reads the shape of the course the same way.
|
|
7
|
+
*/
|
|
8
|
+
import type { ExerciseLevel } from '../core/types.ts';
|
|
9
|
+
/** How one level is painted. */
|
|
10
|
+
export interface TutorialLevelColours {
|
|
11
|
+
/** Behind the whole strip. */
|
|
12
|
+
background: string;
|
|
13
|
+
/** Behind the step that is open, which is the darker of the two. */
|
|
14
|
+
activeBackground: string;
|
|
15
|
+
}
|
|
16
|
+
/** The palette of the three levels. */
|
|
17
|
+
export declare const TUTORIAL_LEVEL_COLOURS: Record<ExerciseLevel, TutorialLevelColours>;
|
|
18
|
+
//# sourceMappingURL=tutorialLevels.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tutorialLevels.d.ts","sourceRoot":"","sources":["../../../src/pedagogy/ui/tutorialLevels.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEtD,gCAAgC;AAChC,MAAM,WAAW,oBAAoB;IACnC,8BAA8B;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,oEAAoE;IACpE,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,uCAAuC;AACvC,eAAO,MAAM,sBAAsB,EAAE,MAAM,CACzC,aAAa,EACb,oBAAoB,CAKrB,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The two shades each level of the guided tour is painted in.
|
|
3
|
+
*
|
|
4
|
+
* Green, amber, pink — the same three the level tags use, in the pale weights a
|
|
5
|
+
* strip of buttons can sit on. They are shared so a student moving from one of
|
|
6
|
+
* our tools to the next reads the shape of the course the same way.
|
|
7
|
+
*/
|
|
8
|
+
/** The palette of the three levels. */
|
|
9
|
+
export const TUTORIAL_LEVEL_COLOURS = {
|
|
10
|
+
beginner: { background: '#d1fae5', activeBackground: '#6ee7b7' },
|
|
11
|
+
intermediate: { background: '#fef3c7', activeBackground: '#fcd34d' },
|
|
12
|
+
advanced: { background: '#fce7f3', activeBackground: '#f9a8d4' },
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=tutorialLevels.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tutorialLevels.js","sourceRoot":"","sources":["../../../src/pedagogy/ui/tutorialLevels.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAYH,uCAAuC;AACvC,MAAM,CAAC,MAAM,sBAAsB,GAG/B;IACF,QAAQ,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,gBAAgB,EAAE,SAAS,EAAE;IAChE,YAAY,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,gBAAgB,EAAE,SAAS,EAAE;IACpE,QAAQ,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,gBAAgB,EAAE,SAAS,EAAE;CACjE,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/** An address cut into the three parts a router reads separately. */
|
|
2
|
+
export interface AddressParts {
|
|
3
|
+
/** Path of the address, `/` when it carries none. */
|
|
4
|
+
path: string;
|
|
5
|
+
/** Query string, without its leading `?`. */
|
|
6
|
+
search: string;
|
|
7
|
+
/** Fragment, without its leading `#`. */
|
|
8
|
+
fragment: string;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Cut an address into its path, its query and its fragment.
|
|
12
|
+
*
|
|
13
|
+
* The fragment is taken first, so a `?` inside it — an old hash link of the
|
|
14
|
+
* shape `#/tutorial/3?step=2` — stays part of the fragment rather than being
|
|
15
|
+
* read as the query of the page.
|
|
16
|
+
* @param address - A path, a full address, or a bare query string.
|
|
17
|
+
* @returns The three parts, each without its separator.
|
|
18
|
+
*/
|
|
19
|
+
export declare function splitAddress(address: string): AddressParts;
|
|
20
|
+
/**
|
|
21
|
+
* The decoded, non-empty segments of a path.
|
|
22
|
+
* @param path - Path of an address, with or without its leading slash.
|
|
23
|
+
* @returns One entry per segment, `[]` for the root.
|
|
24
|
+
*/
|
|
25
|
+
export declare function splitPath(path: string): string[];
|
|
26
|
+
/**
|
|
27
|
+
* A path in the one shape the lookups compare: a leading slash, no trailing
|
|
28
|
+
* one, its segments decoded, and neither query nor fragment.
|
|
29
|
+
* @param path - Path of an address.
|
|
30
|
+
* @returns The same address, normalized.
|
|
31
|
+
*/
|
|
32
|
+
export declare function normalizePath(path: string): string;
|
|
33
|
+
/**
|
|
34
|
+
* Decode one component of an address, tolerating an escape that is not one.
|
|
35
|
+
*
|
|
36
|
+
* `decodeURIComponent` throws on a lone `%`, and an address is hand-editable:
|
|
37
|
+
* the raw text is closer to what its author meant than an error page.
|
|
38
|
+
* @param value - Raw, percent-encoded text.
|
|
39
|
+
* @returns The decoded text, or the raw text when it does not decode.
|
|
40
|
+
*/
|
|
41
|
+
export declare function safeDecode(value: string): string;
|
|
42
|
+
//# sourceMappingURL=address.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"address.d.ts","sourceRoot":"","sources":["../../../src/router/core/address.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,MAAM,WAAW,YAAY;IAC3B,qDAAqD;IACrD,IAAI,EAAE,MAAM,CAAC;IACb,6CAA6C;IAC7C,MAAM,EAAE,MAAM,CAAC;IACf,yCAAyC;IACzC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,CAc1D;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAMhD;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGlD;AAED;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMhD"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cut an address into its path, its query and its fragment.
|
|
3
|
+
*
|
|
4
|
+
* The fragment is taken first, so a `?` inside it — an old hash link of the
|
|
5
|
+
* shape `#/tutorial/3?step=2` — stays part of the fragment rather than being
|
|
6
|
+
* read as the query of the page.
|
|
7
|
+
* @param address - A path, a full address, or a bare query string.
|
|
8
|
+
* @returns The three parts, each without its separator.
|
|
9
|
+
*/
|
|
10
|
+
export function splitAddress(address) {
|
|
11
|
+
const hashIndex = address.indexOf('#');
|
|
12
|
+
const beforeHash = hashIndex === -1 ? address : address.slice(0, hashIndex);
|
|
13
|
+
const fragment = hashIndex === -1 ? '' : address.slice(hashIndex + 1);
|
|
14
|
+
const queryIndex = beforeHash.indexOf('?');
|
|
15
|
+
if (queryIndex === -1) {
|
|
16
|
+
return { path: beforeHash === '' ? '/' : beforeHash, search: '', fragment };
|
|
17
|
+
}
|
|
18
|
+
const path = beforeHash.slice(0, queryIndex);
|
|
19
|
+
return {
|
|
20
|
+
path: path === '' ? '/' : path,
|
|
21
|
+
search: beforeHash.slice(queryIndex + 1),
|
|
22
|
+
fragment,
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* The decoded, non-empty segments of a path.
|
|
27
|
+
* @param path - Path of an address, with or without its leading slash.
|
|
28
|
+
* @returns One entry per segment, `[]` for the root.
|
|
29
|
+
*/
|
|
30
|
+
export function splitPath(path) {
|
|
31
|
+
const segments = [];
|
|
32
|
+
for (const raw of path.split('/')) {
|
|
33
|
+
if (raw !== '')
|
|
34
|
+
segments.push(safeDecode(raw));
|
|
35
|
+
}
|
|
36
|
+
return segments;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* A path in the one shape the lookups compare: a leading slash, no trailing
|
|
40
|
+
* one, its segments decoded, and neither query nor fragment.
|
|
41
|
+
* @param path - Path of an address.
|
|
42
|
+
* @returns The same address, normalized.
|
|
43
|
+
*/
|
|
44
|
+
export function normalizePath(path) {
|
|
45
|
+
const segments = splitPath(splitAddress(path).path);
|
|
46
|
+
return segments.length === 0 ? '/' : `/${segments.join('/')}`;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Decode one component of an address, tolerating an escape that is not one.
|
|
50
|
+
*
|
|
51
|
+
* `decodeURIComponent` throws on a lone `%`, and an address is hand-editable:
|
|
52
|
+
* the raw text is closer to what its author meant than an error page.
|
|
53
|
+
* @param value - Raw, percent-encoded text.
|
|
54
|
+
* @returns The decoded text, or the raw text when it does not decode.
|
|
55
|
+
*/
|
|
56
|
+
export function safeDecode(value) {
|
|
57
|
+
try {
|
|
58
|
+
return decodeURIComponent(value);
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
return value;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=address.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"address.js","sourceRoot":"","sources":["../../../src/router/core/address.ts"],"names":[],"mappings":"AAUA;;;;;;;;GAQG;AACH,MAAM,UAAU,YAAY,CAAC,OAAe;IAC1C,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACvC,MAAM,UAAU,GAAG,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;IAC5E,MAAM,QAAQ,GAAG,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;IACtE,MAAM,UAAU,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC3C,IAAI,UAAU,KAAK,CAAC,CAAC,EAAE,CAAC;QACtB,OAAO,EAAE,IAAI,EAAE,UAAU,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC;IAC9E,CAAC;IACD,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;IAC7C,OAAO;QACL,IAAI,EAAE,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI;QAC9B,MAAM,EAAE,UAAU,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC;QACxC,QAAQ;KACT,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QAClC,IAAI,GAAG,KAAK,EAAE;YAAE,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;IACjD,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,MAAM,QAAQ,GAAG,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;IACpD,OAAO,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;AAChE,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,UAAU,CAAC,KAAa;IACtC,IAAI,CAAC;QACH,OAAO,kBAAkB,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Where a site is mounted, read off the page rather than off the build.
|
|
3
|
+
*
|
|
4
|
+
* The build is mount-agnostic — vite is given a relative base, so the same
|
|
5
|
+
* `dist` serves `https://surge.cheminfo.org/` and
|
|
6
|
+
* `https://www.cheminfo.org/surge/`. What tells the two apart is the `<base>`
|
|
7
|
+
* the deployment stamps into the page it hands out, and `document.baseURI`
|
|
8
|
+
* resolves it against the address actually opened. So this answers correctly
|
|
9
|
+
* whether or not a slash closes the address, and on an address the SPA
|
|
10
|
+
* fallback answered.
|
|
11
|
+
* @returns The mount path, in the shape {@link normalizeBasePath} returns.
|
|
12
|
+
*/
|
|
13
|
+
export declare function readMountPath(): string;
|
|
14
|
+
/**
|
|
15
|
+
* The path half of a site's address, as a mount path.
|
|
16
|
+
*
|
|
17
|
+
* A deployment names where it serves the site in full — origin and path in one
|
|
18
|
+
* value — because the origin is what the canonical link and the sitemap need.
|
|
19
|
+
* This is the other half of it.
|
|
20
|
+
* @param siteUrl - The absolute address the site is served at.
|
|
21
|
+
* @returns The mount path, in the shape {@link normalizeBasePath} returns.
|
|
22
|
+
*/
|
|
23
|
+
export declare function basePathOf(siteUrl: string): string;
|
|
24
|
+
/**
|
|
25
|
+
* A mount path in the shape the other helpers assume: the empty string when the
|
|
26
|
+
* site owns the root of its host, `/surge` when it is one tool among several on
|
|
27
|
+
* a shared one.
|
|
28
|
+
* @param basePath - The mount path however it was written: `surge`, `/surge`, `/surge/`.
|
|
29
|
+
* @returns The normalized mount path, without a trailing slash.
|
|
30
|
+
*/
|
|
31
|
+
export declare function normalizeBasePath(basePath: string): string;
|
|
32
|
+
/**
|
|
33
|
+
* Move one of the site's own addresses under the path it is mounted at.
|
|
34
|
+
* @param basePath - The mount path, in any of the shapes {@link normalizeBasePath} accepts.
|
|
35
|
+
* @param path - An address from the site's own root, e.g. `/exercises`.
|
|
36
|
+
* @returns The address the browser and the server see, e.g. `/surge/exercises`.
|
|
37
|
+
*/
|
|
38
|
+
export declare function joinBasePath(basePath: string, path: string): string;
|
|
39
|
+
/**
|
|
40
|
+
* Read one of the site's own addresses back out of a browser path.
|
|
41
|
+
*
|
|
42
|
+
* A path that does not sit under the mount is handed back untouched, so a
|
|
43
|
+
* deployment served from somewhere else than the build was told still routes.
|
|
44
|
+
* @param basePath - The mount path, in any of the shapes {@link normalizeBasePath} accepts.
|
|
45
|
+
* @param pathname - The path the browser is on, e.g. `/surge/exercises`.
|
|
46
|
+
* @returns The address from the site's own root, `/` for the mount itself.
|
|
47
|
+
*/
|
|
48
|
+
export declare function stripBasePath(basePath: string, pathname: string): string;
|
|
49
|
+
//# sourceMappingURL=basePath.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"basePath.d.ts","sourceRoot":"","sources":["../../../src/router/core/basePath.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAItC;AAED;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAElD;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAK1D;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAKnE;AAED;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAQxE"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Where a site is mounted, read off the page rather than off the build.
|
|
3
|
+
*
|
|
4
|
+
* The build is mount-agnostic — vite is given a relative base, so the same
|
|
5
|
+
* `dist` serves `https://surge.cheminfo.org/` and
|
|
6
|
+
* `https://www.cheminfo.org/surge/`. What tells the two apart is the `<base>`
|
|
7
|
+
* the deployment stamps into the page it hands out, and `document.baseURI`
|
|
8
|
+
* resolves it against the address actually opened. So this answers correctly
|
|
9
|
+
* whether or not a slash closes the address, and on an address the SPA
|
|
10
|
+
* fallback answered.
|
|
11
|
+
* @returns The mount path, in the shape {@link normalizeBasePath} returns.
|
|
12
|
+
*/
|
|
13
|
+
export function readMountPath() {
|
|
14
|
+
const baseUri = globalThis.document?.baseURI;
|
|
15
|
+
if (!baseUri)
|
|
16
|
+
return '';
|
|
17
|
+
return normalizeBasePath(new URL(baseUri).pathname);
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* The path half of a site's address, as a mount path.
|
|
21
|
+
*
|
|
22
|
+
* A deployment names where it serves the site in full — origin and path in one
|
|
23
|
+
* value — because the origin is what the canonical link and the sitemap need.
|
|
24
|
+
* This is the other half of it.
|
|
25
|
+
* @param siteUrl - The absolute address the site is served at.
|
|
26
|
+
* @returns The mount path, in the shape {@link normalizeBasePath} returns.
|
|
27
|
+
*/
|
|
28
|
+
export function basePathOf(siteUrl) {
|
|
29
|
+
return normalizeBasePath(new URL(siteUrl).pathname);
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* A mount path in the shape the other helpers assume: the empty string when the
|
|
33
|
+
* site owns the root of its host, `/surge` when it is one tool among several on
|
|
34
|
+
* a shared one.
|
|
35
|
+
* @param basePath - The mount path however it was written: `surge`, `/surge`, `/surge/`.
|
|
36
|
+
* @returns The normalized mount path, without a trailing slash.
|
|
37
|
+
*/
|
|
38
|
+
export function normalizeBasePath(basePath) {
|
|
39
|
+
const trimmed = basePath.trim();
|
|
40
|
+
if (trimmed === '' || trimmed === '/')
|
|
41
|
+
return '';
|
|
42
|
+
const opened = trimmed.startsWith('/') ? trimmed : `/${trimmed}`;
|
|
43
|
+
return opened.replace(/\/+$/, '');
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Move one of the site's own addresses under the path it is mounted at.
|
|
47
|
+
* @param basePath - The mount path, in any of the shapes {@link normalizeBasePath} accepts.
|
|
48
|
+
* @param path - An address from the site's own root, e.g. `/exercises`.
|
|
49
|
+
* @returns The address the browser and the server see, e.g. `/surge/exercises`.
|
|
50
|
+
*/
|
|
51
|
+
export function joinBasePath(basePath, path) {
|
|
52
|
+
const base = normalizeBasePath(basePath);
|
|
53
|
+
const opened = path === '' || !path.startsWith('/') ? `/${path}` : path;
|
|
54
|
+
if (base === '')
|
|
55
|
+
return opened;
|
|
56
|
+
return opened === '/' ? `${base}/` : `${base}${opened}`;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Read one of the site's own addresses back out of a browser path.
|
|
60
|
+
*
|
|
61
|
+
* A path that does not sit under the mount is handed back untouched, so a
|
|
62
|
+
* deployment served from somewhere else than the build was told still routes.
|
|
63
|
+
* @param basePath - The mount path, in any of the shapes {@link normalizeBasePath} accepts.
|
|
64
|
+
* @param pathname - The path the browser is on, e.g. `/surge/exercises`.
|
|
65
|
+
* @returns The address from the site's own root, `/` for the mount itself.
|
|
66
|
+
*/
|
|
67
|
+
export function stripBasePath(basePath, pathname) {
|
|
68
|
+
const base = normalizeBasePath(basePath);
|
|
69
|
+
const path = pathname === '' ? '/' : pathname;
|
|
70
|
+
if (base === '')
|
|
71
|
+
return path;
|
|
72
|
+
if (path === base || path === `${base}/`)
|
|
73
|
+
return '/';
|
|
74
|
+
// `/surgeon` is not a page of a site mounted at `/surge`, so the mount only
|
|
75
|
+
// matches when what follows it is a path of its own.
|
|
76
|
+
return path.startsWith(`${base}/`) ? path.slice(base.length) : path;
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=basePath.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"basePath.js","sourceRoot":"","sources":["../../../src/router/core/basePath.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,aAAa;IAC3B,MAAM,OAAO,GAAG,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC7C,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,CAAC;IACxB,OAAO,iBAAiB,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC;AACtD,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,UAAU,CAAC,OAAe;IACxC,OAAO,iBAAiB,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC;AACtD,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAAC,QAAgB;IAChD,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;IAChC,IAAI,OAAO,KAAK,EAAE,IAAI,OAAO,KAAK,GAAG;QAAE,OAAO,EAAE,CAAC;IACjD,MAAM,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,OAAO,EAAE,CAAC;IACjE,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AACpC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,QAAgB,EAAE,IAAY;IACzD,MAAM,IAAI,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IACzC,MAAM,MAAM,GAAG,IAAI,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACxE,IAAI,IAAI,KAAK,EAAE;QAAE,OAAO,MAAM,CAAC;IAC/B,OAAO,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,MAAM,EAAE,CAAC;AAC1D,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,aAAa,CAAC,QAAgB,EAAE,QAAgB;IAC9D,MAAM,IAAI,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IACzC,MAAM,IAAI,GAAG,QAAQ,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC;IAC9C,IAAI,IAAI,KAAK,EAAE;QAAE,OAAO,IAAI,CAAC;IAC7B,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,GAAG,IAAI,GAAG;QAAE,OAAO,GAAG,CAAC;IACrD,4EAA4E;IAC5E,qDAAqD;IACrD,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACtE,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { basePathOf, joinBasePath, normalizeBasePath, readMountPath, stripBasePath, } from './basePath.ts';
|
|
2
|
+
export type { AdoptLegacyHashOptions, LegacyHashOptions, } from './legacyHash.ts';
|
|
3
|
+
export { adoptLegacyHashAddress, pathFromLegacyHash } from './legacyHash.ts';
|
|
4
|
+
export type { PageAddresses, PageAddressesOptions, PageWithPath, } from './pageAddresses.ts';
|
|
5
|
+
export { createPageAddresses } from './pageAddresses.ts';
|
|
6
|
+
export type { TabDefinition, TabRoute, TabRouteInput, TabRouter, TabRouterOptions, } from './tabRouter.ts';
|
|
7
|
+
export { createTabRouter } from './tabRouter.ts';
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/router/core/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,YAAY,EACZ,iBAAiB,EACjB,aAAa,EACb,aAAa,GACd,MAAM,eAAe,CAAC;AACvB,YAAY,EACV,sBAAsB,EACtB,iBAAiB,GAClB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAC7E,YAAY,EACV,aAAa,EACb,oBAAoB,EACpB,YAAY,GACb,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,YAAY,EACV,aAAa,EACb,QAAQ,EACR,aAAa,EACb,SAAS,EACT,gBAAgB,GACjB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { basePathOf, joinBasePath, normalizeBasePath, readMountPath, stripBasePath, } from "./basePath.js";
|
|
2
|
+
export { adoptLegacyHashAddress, pathFromLegacyHash } from "./legacyHash.js";
|
|
3
|
+
export { createPageAddresses } from "./pageAddresses.js";
|
|
4
|
+
export { createTabRouter } from "./tabRouter.js";
|
|
5
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/router/core/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,YAAY,EACZ,iBAAiB,EACjB,aAAa,EACb,aAAa,GACd,MAAM,eAAe,CAAC;AAKvB,OAAO,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAM7E,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAQzD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/** How a legacy hash link is turned into the path it means. */
|
|
2
|
+
export interface LegacyHashOptions {
|
|
3
|
+
/**
|
|
4
|
+
* Carry the query string of the address over to the path. The share
|
|
5
|
+
* configuration lives there, so an embed stays configured across the move.
|
|
6
|
+
* A query written inside the fragment itself always wins over it.
|
|
7
|
+
* @default true
|
|
8
|
+
*/
|
|
9
|
+
keepSearch?: boolean;
|
|
10
|
+
}
|
|
11
|
+
/** How an address is read when adopting the path a legacy hash link meant. */
|
|
12
|
+
export interface AdoptLegacyHashOptions extends LegacyHashOptions {
|
|
13
|
+
/**
|
|
14
|
+
* The path the site is mounted at, so a legacy link to a tool served under
|
|
15
|
+
* one is recognised as sitting on its root.
|
|
16
|
+
* @default ''
|
|
17
|
+
*/
|
|
18
|
+
basePath?: string;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* The path a link written before the site routed by path points at.
|
|
22
|
+
*
|
|
23
|
+
* Those links are in course pages, in bookmarks and inside other people's
|
|
24
|
+
* iframes, so they are answered rather than dropped. Only a fragment shaped
|
|
25
|
+
* like a path is one: an anchor such as `#results` names a place inside a page
|
|
26
|
+
* and comes back `null`.
|
|
27
|
+
* @param address - A full address, or the fragment on its own, e.g. `/#/tutorial/3`.
|
|
28
|
+
* @param options - Whether the query string is carried over.
|
|
29
|
+
* @returns The path form of the address, or `null` when it names no page.
|
|
30
|
+
*/
|
|
31
|
+
export declare function pathFromLegacyHash(address: string, options?: LegacyHashOptions): string | null;
|
|
32
|
+
/**
|
|
33
|
+
* The address to put in the bar in place of a legacy hash link, before anything
|
|
34
|
+
* reads it.
|
|
35
|
+
*
|
|
36
|
+
* Called once at startup with `location.pathname + location.search +
|
|
37
|
+
* location.hash`, so nothing downstream has to know the site ever routed by the
|
|
38
|
+
* hash. Only a visitor sitting on the site's root is moved: a fragment on a
|
|
39
|
+
* real page is an anchor of that page, not an address of its own.
|
|
40
|
+
* @param address - The address the browser is on.
|
|
41
|
+
* @param options - Whether the query is carried over, and the site's mount path.
|
|
42
|
+
* @returns The address to replace it with, or `null` when there is nothing to adopt.
|
|
43
|
+
*/
|
|
44
|
+
export declare function adoptLegacyHashAddress(address: string, options?: AdoptLegacyHashOptions): string | null;
|
|
45
|
+
//# sourceMappingURL=legacyHash.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"legacyHash.d.ts","sourceRoot":"","sources":["../../../src/router/core/legacyHash.ts"],"names":[],"mappings":"AAGA,+DAA+D;AAC/D,MAAM,WAAW,iBAAiB;IAChC;;;;;OAKG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,8EAA8E;AAC9E,MAAM,WAAW,sBAAuB,SAAQ,iBAAiB;IAC/D;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,iBAAsB,GAC9B,MAAM,GAAG,IAAI,CAUf;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,sBAA2B,GACnC,MAAM,GAAG,IAAI,CAWf"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { splitAddress } from "./address.js";
|
|
2
|
+
import { normalizeBasePath, stripBasePath } from "./basePath.js";
|
|
3
|
+
/**
|
|
4
|
+
* The path a link written before the site routed by path points at.
|
|
5
|
+
*
|
|
6
|
+
* Those links are in course pages, in bookmarks and inside other people's
|
|
7
|
+
* iframes, so they are answered rather than dropped. Only a fragment shaped
|
|
8
|
+
* like a path is one: an anchor such as `#results` names a place inside a page
|
|
9
|
+
* and comes back `null`.
|
|
10
|
+
* @param address - A full address, or the fragment on its own, e.g. `/#/tutorial/3`.
|
|
11
|
+
* @param options - Whether the query string is carried over.
|
|
12
|
+
* @returns The path form of the address, or `null` when it names no page.
|
|
13
|
+
*/
|
|
14
|
+
export function pathFromLegacyHash(address, options = {}) {
|
|
15
|
+
const outer = splitAddress(address);
|
|
16
|
+
if (outer.fragment === '' || !outer.fragment.startsWith('/'))
|
|
17
|
+
return null;
|
|
18
|
+
const inner = splitAddress(outer.fragment);
|
|
19
|
+
if (inner.path === '/')
|
|
20
|
+
return null;
|
|
21
|
+
const keepSearch = options.keepSearch ?? true;
|
|
22
|
+
const search = inner.search || (keepSearch ? outer.search : '');
|
|
23
|
+
return search === '' ? inner.path : `${inner.path}?${search}`;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* The address to put in the bar in place of a legacy hash link, before anything
|
|
27
|
+
* reads it.
|
|
28
|
+
*
|
|
29
|
+
* Called once at startup with `location.pathname + location.search +
|
|
30
|
+
* location.hash`, so nothing downstream has to know the site ever routed by the
|
|
31
|
+
* hash. Only a visitor sitting on the site's root is moved: a fragment on a
|
|
32
|
+
* real page is an anchor of that page, not an address of its own.
|
|
33
|
+
* @param address - The address the browser is on.
|
|
34
|
+
* @param options - Whether the query is carried over, and the site's mount path.
|
|
35
|
+
* @returns The address to replace it with, or `null` when there is nothing to adopt.
|
|
36
|
+
*/
|
|
37
|
+
export function adoptLegacyHashAddress(address, options = {}) {
|
|
38
|
+
const basePath = normalizeBasePath(options.basePath ?? '');
|
|
39
|
+
if (stripBasePath(basePath, splitAddress(address).path) !== '/')
|
|
40
|
+
return null;
|
|
41
|
+
const path = pathFromLegacyHash(address, options);
|
|
42
|
+
if (path === null)
|
|
43
|
+
return null;
|
|
44
|
+
if (basePath === '')
|
|
45
|
+
return path;
|
|
46
|
+
const { path: adopted, search } = splitAddress(path);
|
|
47
|
+
const mounted = `${basePath}${adopted}`;
|
|
48
|
+
return search === '' ? mounted : `${mounted}?${search}`;
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=legacyHash.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"legacyHash.js","sourceRoot":"","sources":["../../../src/router/core/legacyHash.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAuBjE;;;;;;;;;;GAUG;AACH,MAAM,UAAU,kBAAkB,CAChC,OAAe,EACf,UAA6B,EAAE;IAE/B,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IACpC,IAAI,KAAK,CAAC,QAAQ,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAE1E,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC3C,IAAI,KAAK,CAAC,IAAI,KAAK,GAAG;QAAE,OAAO,IAAI,CAAC;IAEpC,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,IAAI,CAAC;IAC9C,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAChE,OAAO,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,MAAM,EAAE,CAAC;AAChE,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,sBAAsB,CACpC,OAAe,EACf,UAAkC,EAAE;IAEpC,MAAM,QAAQ,GAAG,iBAAiB,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;IAC3D,IAAI,aAAa,CAAC,QAAQ,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG;QAAE,OAAO,IAAI,CAAC;IAE7E,MAAM,IAAI,GAAG,kBAAkB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAClD,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAC/B,IAAI,QAAQ,KAAK,EAAE;QAAE,OAAO,IAAI,CAAC;IAEjC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IACrD,MAAM,OAAO,GAAG,GAAG,QAAQ,GAAG,OAAO,EAAE,CAAC;IACxC,OAAO,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,IAAI,MAAM,EAAE,CAAC;AAC1D,CAAC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The table of everything the site answers, read by the three things that must
|
|
3
|
+
* agree on it: the build, which writes one HTML file per entry and the sitemap
|
|
4
|
+
* listing them; the server or the entrypoint, which titles the page it hands
|
|
5
|
+
* out; and the running app, which retitles the tab after an in-app move.
|
|
6
|
+
*
|
|
7
|
+
* Pure and DOM-free, so the prerender script imports the same table under Node
|
|
8
|
+
* that the browser imports at run time. A page missing from it is a page a
|
|
9
|
+
* search engine only ever sees as the home page.
|
|
10
|
+
* @param options - The pages, in the order the site presents them.
|
|
11
|
+
* @returns The three lookups the build and the app share.
|
|
12
|
+
*/
|
|
13
|
+
export declare function createPageAddresses<Page extends PageWithPath>(options: PageAddressesOptions<Page>): PageAddresses<Page>;
|
|
14
|
+
/** The one thing a page must carry: the address it is reachable at. */
|
|
15
|
+
export interface PageWithPath {
|
|
16
|
+
/** Address from the site's own root, e.g. `/exercises`. */
|
|
17
|
+
path: string;
|
|
18
|
+
}
|
|
19
|
+
/** How a site's pages are turned into addresses. */
|
|
20
|
+
export interface PageAddressesOptions<Page extends PageWithPath> {
|
|
21
|
+
/**
|
|
22
|
+
* Every page, deep addresses included. The first is the home page, and is
|
|
23
|
+
* what an address the site does not know opens.
|
|
24
|
+
*/
|
|
25
|
+
pages: readonly Page[];
|
|
26
|
+
/**
|
|
27
|
+
* The path the site is served under: nothing on a host of its own, `/surge`
|
|
28
|
+
* as one tool among several on a shared one.
|
|
29
|
+
* @default ''
|
|
30
|
+
*/
|
|
31
|
+
basePath?: string;
|
|
32
|
+
}
|
|
33
|
+
/** The lookups a site's pages answer. */
|
|
34
|
+
export interface PageAddresses<Page extends PageWithPath> {
|
|
35
|
+
/** Every page, in the order given: what the sitemap lists and the build writes. */
|
|
36
|
+
everyPage: () => readonly Page[];
|
|
37
|
+
/**
|
|
38
|
+
* The address a page is indexed under, mount path included and query string
|
|
39
|
+
* dropped — a structure being edited and a share configuration are not pages.
|
|
40
|
+
*/
|
|
41
|
+
canonicalPathOf: (page: Page) => string;
|
|
42
|
+
/**
|
|
43
|
+
* The page an address opens. An address below a page it does not list is that
|
|
44
|
+
* page — a link written before an exercise was renamed still opens, and is
|
|
45
|
+
* indexed as the exercises — and an address it knows nothing about is the
|
|
46
|
+
* home page.
|
|
47
|
+
*/
|
|
48
|
+
pageAt: (address: string) => Page;
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=pageAddresses.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pageAddresses.d.ts","sourceRoot":"","sources":["../../../src/router/core/pageAddresses.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,SAAS,YAAY,EAC3D,OAAO,EAAE,oBAAoB,CAAC,IAAI,CAAC,GAClC,aAAa,CAAC,IAAI,CAAC,CAgCrB;AAED,uEAAuE;AACvE,MAAM,WAAW,YAAY;IAC3B,2DAA2D;IAC3D,IAAI,EAAE,MAAM,CAAC;CACd;AAED,oDAAoD;AACpD,MAAM,WAAW,oBAAoB,CAAC,IAAI,SAAS,YAAY;IAC7D;;;OAGG;IACH,KAAK,EAAE,SAAS,IAAI,EAAE,CAAC;IACvB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,yCAAyC;AACzC,MAAM,WAAW,aAAa,CAAC,IAAI,SAAS,YAAY;IACtD,mFAAmF;IACnF,SAAS,EAAE,MAAM,SAAS,IAAI,EAAE,CAAC;IACjC;;;OAGG;IACH,eAAe,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,MAAM,CAAC;IACxC;;;;;OAKG;IACH,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACnC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { normalizePath, splitAddress } from "./address.js";
|
|
2
|
+
import { joinBasePath, normalizeBasePath, stripBasePath } from "./basePath.js";
|
|
3
|
+
/**
|
|
4
|
+
* The table of everything the site answers, read by the three things that must
|
|
5
|
+
* agree on it: the build, which writes one HTML file per entry and the sitemap
|
|
6
|
+
* listing them; the server or the entrypoint, which titles the page it hands
|
|
7
|
+
* out; and the running app, which retitles the tab after an in-app move.
|
|
8
|
+
*
|
|
9
|
+
* Pure and DOM-free, so the prerender script imports the same table under Node
|
|
10
|
+
* that the browser imports at run time. A page missing from it is a page a
|
|
11
|
+
* search engine only ever sees as the home page.
|
|
12
|
+
* @param options - The pages, in the order the site presents them.
|
|
13
|
+
* @returns The three lookups the build and the app share.
|
|
14
|
+
*/
|
|
15
|
+
export function createPageAddresses(options) {
|
|
16
|
+
const pages = options.pages;
|
|
17
|
+
const first = pages[0];
|
|
18
|
+
if (first === undefined) {
|
|
19
|
+
throw new Error('createPageAddresses needs at least one page');
|
|
20
|
+
}
|
|
21
|
+
const home = first;
|
|
22
|
+
const basePath = normalizeBasePath(options.basePath ?? '');
|
|
23
|
+
const byPath = new Map();
|
|
24
|
+
for (const page of pages) {
|
|
25
|
+
byPath.set(normalizePath(page.path), page);
|
|
26
|
+
}
|
|
27
|
+
function everyPage() {
|
|
28
|
+
return pages;
|
|
29
|
+
}
|
|
30
|
+
function canonicalPathOf(page) {
|
|
31
|
+
return joinBasePath(basePath, normalizePath(page.path));
|
|
32
|
+
}
|
|
33
|
+
function pageAt(address) {
|
|
34
|
+
const path = normalizePath(stripBasePath(basePath, splitAddress(address).path));
|
|
35
|
+
const exact = byPath.get(path);
|
|
36
|
+
if (exact !== undefined)
|
|
37
|
+
return exact;
|
|
38
|
+
return deepestPageUnder(pages, path) ?? home;
|
|
39
|
+
}
|
|
40
|
+
return { everyPage, canonicalPathOf, pageAt };
|
|
41
|
+
}
|
|
42
|
+
function deepestPageUnder(pages, path) {
|
|
43
|
+
let deepest;
|
|
44
|
+
let depth = 0;
|
|
45
|
+
for (const page of pages) {
|
|
46
|
+
const candidate = normalizePath(page.path);
|
|
47
|
+
if (candidate === '/' || candidate.length <= depth)
|
|
48
|
+
continue;
|
|
49
|
+
if (path.startsWith(`${candidate}/`)) {
|
|
50
|
+
deepest = page;
|
|
51
|
+
depth = candidate.length;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return deepest;
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=pageAddresses.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pageAddresses.js","sourceRoot":"","sources":["../../../src/router/core/pageAddresses.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE/E;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,mBAAmB,CACjC,OAAmC;IAEnC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAC5B,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACvB,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IACjE,CAAC;IACD,MAAM,IAAI,GAAS,KAAK,CAAC;IACzB,MAAM,QAAQ,GAAG,iBAAiB,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;IAE3D,MAAM,MAAM,GAAG,IAAI,GAAG,EAAgB,CAAC;IACvC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;IAC7C,CAAC;IAED,SAAS,SAAS;QAChB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,SAAS,eAAe,CAAC,IAAU;QACjC,OAAO,YAAY,CAAC,QAAQ,EAAE,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC1D,CAAC;IAED,SAAS,MAAM,CAAC,OAAe;QAC7B,MAAM,IAAI,GAAG,aAAa,CACxB,aAAa,CAAC,QAAQ,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CACpD,CAAC;QACF,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC/B,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC;QACtC,OAAO,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC;IAC/C,CAAC;IAED,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,EAAE,CAAC;AAChD,CAAC;AAyCD,SAAS,gBAAgB,CACvB,KAAsB,EACtB,IAAY;IAEZ,IAAI,OAAyB,CAAC;IAC9B,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,SAAS,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3C,IAAI,SAAS,KAAK,GAAG,IAAI,SAAS,CAAC,MAAM,IAAI,KAAK;YAAE,SAAS;QAC7D,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,SAAS,GAAG,CAAC,EAAE,CAAC;YACrC,OAAO,GAAG,IAAI,CAAC;YACf,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC;QAC3B,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/** How a query string is read and written. */
|
|
2
|
+
export interface QueryStringOptions {
|
|
3
|
+
/**
|
|
4
|
+
* Keep a `+` in a value as the character it is, rather than reading it as
|
|
5
|
+
* the space `URLSearchParams` decodes it to. A SMILES carries `+` for a
|
|
6
|
+
* charged atom, and `CC[N+](C)(C)C` handed out in a link has to survive.
|
|
7
|
+
* @default true
|
|
8
|
+
*/
|
|
9
|
+
literalPlus?: boolean;
|
|
10
|
+
/**
|
|
11
|
+
* Write a parameter carrying nothing back as the bare key, so a hand-typed
|
|
12
|
+
* flag such as `?embed` survives the round trip. Left off, an empty value is
|
|
13
|
+
* dropped and an unconfigured link stays clean.
|
|
14
|
+
* @default false
|
|
15
|
+
*/
|
|
16
|
+
keepEmptyValues?: boolean;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Read a query string.
|
|
20
|
+
*
|
|
21
|
+
* Forgiving by design, because the address is hand-editable and arrives from
|
|
22
|
+
* bookmarks, course pages and lecture slides: a repeated key keeps its last
|
|
23
|
+
* value, a key carrying nothing is kept as an empty value so a bare `?embed`
|
|
24
|
+
* reads as present, and an escape that does not decode is taken literally.
|
|
25
|
+
* @param search - The query string, with or without its leading `?`.
|
|
26
|
+
* @param options - How the values are decoded.
|
|
27
|
+
* @returns One entry per key, decoded.
|
|
28
|
+
*/
|
|
29
|
+
export declare function parseQueryString(search: string, options?: QueryStringOptions): Record<string, string>;
|
|
30
|
+
/**
|
|
31
|
+
* Write a query string.
|
|
32
|
+
*
|
|
33
|
+
* A parameter left at nothing is dropped unless `keepEmptyValues` asks for it,
|
|
34
|
+
* and `undefined` or `null` removes a parameter outright, so a page can hand
|
|
35
|
+
* its whole state to this function and get back only what it actually carries.
|
|
36
|
+
* @param params - The parameters, in the order they should be written.
|
|
37
|
+
* @param options - How the values are encoded.
|
|
38
|
+
* @returns The query string, without its leading `?`, empty when nothing is carried.
|
|
39
|
+
*/
|
|
40
|
+
export declare function formatQueryString(params: Readonly<Record<string, string | undefined | null>>, options?: QueryStringOptions): string;
|
|
41
|
+
//# sourceMappingURL=query.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../../src/router/core/query.ts"],"names":[],"mappings":"AAEA,8CAA8C;AAC9C,MAAM,WAAW,kBAAkB;IACjC;;;;;OAKG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;;;OAKG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,kBAAuB,GAC/B,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAcxB;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC,CAAC,EAC3D,OAAO,GAAE,kBAAuB,GAC/B,MAAM,CAYR"}
|