react-cheminfo 0.37.0 → 0.39.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 +77 -1
- package/bin/check-seo.mjs +43 -1
- package/lib/chart/ui/Axes.d.ts +19 -0
- package/lib/chart/ui/Axes.d.ts.map +1 -1
- package/lib/chart/ui/Axes.js +25 -5
- package/lib/chart/ui/Axes.js.map +1 -1
- package/lib/chrome/ui/NavMenuButton.d.ts.map +1 -1
- package/lib/chrome/ui/NavMenuButton.js +41 -11
- package/lib/chrome/ui/NavMenuButton.js.map +1 -1
- package/lib/chrome/ui/SiteHeader.js +24 -1
- package/lib/chrome/ui/SiteHeader.js.map +1 -1
- package/lib/chrome/ui/navItem.d.ts +7 -0
- package/lib/chrome/ui/navItem.d.ts.map +1 -1
- package/lib/chrome/ui/navItem.js.map +1 -1
- package/lib/citation/ui/entries.d.ts.map +1 -1
- package/lib/citation/ui/entries.js +6 -1
- package/lib/citation/ui/entries.js.map +1 -1
- package/lib/clipboard/ui/ClickToCopy.d.ts +11 -0
- package/lib/clipboard/ui/ClickToCopy.d.ts.map +1 -1
- package/lib/clipboard/ui/ClickToCopy.js +28 -10
- package/lib/clipboard/ui/ClickToCopy.js.map +1 -1
- package/lib/clipboard/ui/CopyButton.d.ts +2 -1
- package/lib/clipboard/ui/CopyButton.d.ts.map +1 -1
- package/lib/clipboard/ui/CopyButton.js +2 -1
- package/lib/clipboard/ui/CopyButton.js.map +1 -1
- package/lib/clipboard/ui/CopyableValue.d.ts +24 -4
- package/lib/clipboard/ui/CopyableValue.d.ts.map +1 -1
- package/lib/clipboard/ui/CopyableValue.js +35 -3
- package/lib/clipboard/ui/CopyableValue.js.map +1 -1
- package/lib/clipboard/ui/index.d.ts +1 -1
- package/lib/clipboard/ui/index.d.ts.map +1 -1
- package/lib/clipboard/ui/index.js.map +1 -1
- package/lib/confirm/ui/ConfirmButton.d.ts.map +1 -1
- package/lib/confirm/ui/ConfirmButton.js +2 -1
- package/lib/confirm/ui/ConfirmButton.js.map +1 -1
- package/lib/core.d.ts +1 -0
- package/lib/core.d.ts.map +1 -1
- package/lib/core.js +1 -0
- package/lib/core.js.map +1 -1
- package/lib/delimited/ui/TableDataButton.d.ts.map +1 -1
- package/lib/delimited/ui/TableDataButton.js +2 -1
- package/lib/delimited/ui/TableDataButton.js.map +1 -1
- package/lib/download/core/figureSvg.d.ts.map +1 -1
- package/lib/download/core/figureSvg.js +37 -12
- package/lib/download/core/figureSvg.js.map +1 -1
- package/lib/help/ui/HelpToolbarButton.d.ts.map +1 -1
- package/lib/help/ui/HelpToolbarButton.js +2 -1
- package/lib/help/ui/HelpToolbarButton.js.map +1 -1
- package/lib/i18n/core/chromeCatalog.d.ts +1 -1
- package/lib/i18n/core/chromeCatalog.d.ts.map +1 -1
- package/lib/locales/de.json +48 -5
- package/lib/locales/en.json +48 -5
- package/lib/locales/es.json +48 -5
- package/lib/locales/fr.json +48 -5
- package/lib/locales/it.json +48 -5
- package/lib/number/core/index.d.ts +1 -1
- package/lib/number/core/index.d.ts.map +1 -1
- package/lib/number/core/index.js +1 -1
- package/lib/number/core/index.js.map +1 -1
- package/lib/number/core/numberText.d.ts +13 -0
- package/lib/number/core/numberText.d.ts.map +1 -1
- package/lib/number/core/numberText.js +20 -0
- package/lib/number/core/numberText.js.map +1 -1
- package/lib/number/ui/NumberInput.js +1 -1
- package/lib/number/ui/NumberInput.js.map +1 -1
- package/lib/overlay/ui/OverlayIconButton.d.ts.map +1 -1
- package/lib/overlay/ui/OverlayIconButton.js +1 -1
- package/lib/overlay/ui/OverlayIconButton.js.map +1 -1
- package/lib/panel/ui/ClearButton.d.ts.map +1 -1
- package/lib/panel/ui/ClearButton.js +1 -1
- package/lib/panel/ui/ClearButton.js.map +1 -1
- package/lib/pedagogy/core/inlineMarks.d.ts +9 -5
- package/lib/pedagogy/core/inlineMarks.d.ts.map +1 -1
- package/lib/pedagogy/core/inlineMarks.js +14 -6
- package/lib/pedagogy/core/inlineMarks.js.map +1 -1
- package/lib/pedagogy/ui/GlossaryDefinition.d.ts +4 -10
- package/lib/pedagogy/ui/GlossaryDefinition.d.ts.map +1 -1
- package/lib/pedagogy/ui/GlossaryDefinition.js +7 -7
- package/lib/pedagogy/ui/GlossaryDefinition.js.map +1 -1
- package/lib/pedagogy/ui/GlossaryIndex.d.ts.map +1 -1
- package/lib/pedagogy/ui/GlossaryIndex.js +1 -1
- package/lib/pedagogy/ui/GlossaryIndex.js.map +1 -1
- package/lib/pedagogy/ui/GlossaryProvider.d.ts +7 -0
- package/lib/pedagogy/ui/GlossaryProvider.d.ts.map +1 -1
- package/lib/pedagogy/ui/GlossaryProvider.js +3 -2
- package/lib/pedagogy/ui/GlossaryProvider.js.map +1 -1
- package/lib/pedagogy/ui/GlossaryText.d.ts +7 -2
- package/lib/pedagogy/ui/GlossaryText.d.ts.map +1 -1
- package/lib/pedagogy/ui/GlossaryText.js +3 -2
- package/lib/pedagogy/ui/GlossaryText.js.map +1 -1
- package/lib/pedagogy/ui/InlineText.d.ts +8 -2
- package/lib/pedagogy/ui/InlineText.d.ts.map +1 -1
- package/lib/pedagogy/ui/InlineText.js +7 -2
- package/lib/pedagogy/ui/InlineText.js.map +1 -1
- package/lib/pedagogy/ui/ReferenceSectionBlock.d.ts +4 -1
- package/lib/pedagogy/ui/ReferenceSectionBlock.d.ts.map +1 -1
- package/lib/pedagogy/ui/ReferenceSectionBlock.js +2 -1
- package/lib/pedagogy/ui/ReferenceSectionBlock.js.map +1 -1
- package/lib/pedagogy/ui/SyntaxTooltip.d.ts.map +1 -1
- package/lib/pedagogy/ui/SyntaxTooltip.js +11 -10
- package/lib/pedagogy/ui/SyntaxTooltip.js.map +1 -1
- package/lib/pedagogy/ui/TutorialStepStrip.d.ts.map +1 -1
- package/lib/pedagogy/ui/TutorialStepStrip.js +18 -4
- package/lib/pedagogy/ui/TutorialStepStrip.js.map +1 -1
- package/lib/pedagogy/ui/glossaryContext.d.ts +7 -0
- package/lib/pedagogy/ui/glossaryContext.d.ts.map +1 -1
- package/lib/pedagogy/ui/glossaryContext.js.map +1 -1
- package/lib/pedagogy/ui/index.d.ts +1 -1
- package/lib/pedagogy/ui/index.d.ts.map +1 -1
- package/lib/pedagogy/ui/inlineSegments.d.ts +5 -0
- package/lib/pedagogy/ui/inlineSegments.d.ts.map +1 -1
- package/lib/pedagogy/ui/inlineSegments.js +2 -0
- package/lib/pedagogy/ui/inlineSegments.js.map +1 -1
- package/lib/pedagogy/ui/pedagogyStyle.d.ts +8 -9
- package/lib/pedagogy/ui/pedagogyStyle.d.ts.map +1 -1
- package/lib/pedagogy/ui/pedagogyStyle.js +10 -18
- package/lib/pedagogy/ui/pedagogyStyle.js.map +1 -1
- package/lib/range/core/index.d.ts +4 -0
- package/lib/range/core/index.d.ts.map +1 -0
- package/lib/range/core/index.js +3 -0
- package/lib/range/core/index.js.map +1 -0
- package/lib/range/core/rangeBounds.d.ts +79 -0
- package/lib/range/core/rangeBounds.d.ts.map +1 -0
- package/lib/range/core/rangeBounds.js +110 -0
- package/lib/range/core/rangeBounds.js.map +1 -0
- package/lib/range/core/rangeHistogram.d.ts +13 -0
- package/lib/range/core/rangeHistogram.d.ts.map +1 -0
- package/lib/range/core/rangeHistogram.js +39 -0
- package/lib/range/core/rangeHistogram.js.map +1 -0
- package/lib/range/ui/RangeHistogram.d.ts +20 -0
- package/lib/range/ui/RangeHistogram.d.ts.map +1 -0
- package/lib/range/ui/RangeHistogram.js +18 -0
- package/lib/range/ui/RangeHistogram.js.map +1 -0
- package/lib/range/ui/RangeSlider.d.ts +77 -0
- package/lib/range/ui/RangeSlider.d.ts.map +1 -0
- package/lib/range/ui/RangeSlider.js +60 -0
- package/lib/range/ui/RangeSlider.js.map +1 -0
- package/lib/range/ui/RangeValue.d.ts +41 -0
- package/lib/range/ui/RangeValue.d.ts.map +1 -0
- package/lib/range/ui/RangeValue.js +73 -0
- package/lib/range/ui/RangeValue.js.map +1 -0
- package/lib/range/ui/index.d.ts +3 -0
- package/lib/range/ui/index.d.ts.map +1 -0
- package/lib/range/ui/index.js +2 -0
- package/lib/range/ui/index.js.map +1 -0
- package/lib/seo/core/documentMeta.d.ts +16 -0
- package/lib/seo/core/documentMeta.d.ts.map +1 -1
- package/lib/seo/core/documentMeta.js +18 -0
- package/lib/seo/core/documentMeta.js.map +1 -1
- package/lib/seo/core/index.d.ts +3 -1
- package/lib/seo/core/index.d.ts.map +1 -1
- package/lib/seo/core/index.js +2 -1
- package/lib/seo/core/index.js.map +1 -1
- package/lib/seo/core/noscript.d.ts +8 -0
- package/lib/seo/core/noscript.d.ts.map +1 -1
- package/lib/seo/core/noscript.js +10 -3
- package/lib/seo/core/noscript.js.map +1 -1
- package/lib/seo/core/pageMeta.d.ts +10 -2
- package/lib/seo/core/pageMeta.d.ts.map +1 -1
- package/lib/seo/core/pageMeta.js +12 -3
- package/lib/seo/core/pageMeta.js.map +1 -1
- package/lib/seo/core/plainDescription.d.ts +2 -2
- package/lib/seo/core/plainDescription.js +5 -2
- package/lib/seo/core/plainDescription.js.map +1 -1
- package/lib/seo/core/siteFiles.d.ts +32 -3
- package/lib/seo/core/siteFiles.d.ts.map +1 -1
- package/lib/seo/core/siteFiles.js +13 -4
- package/lib/seo/core/siteFiles.js.map +1 -1
- package/lib/seo/core/startDocumentMeta.js +8 -7
- package/lib/seo/core/startDocumentMeta.js.map +1 -1
- package/lib/seo/vite/prerender.d.ts +26 -4
- package/lib/seo/vite/prerender.d.ts.map +1 -1
- package/lib/seo/vite/prerender.js +100 -30
- package/lib/seo/vite/prerender.js.map +1 -1
- package/lib/share/core/devices.d.ts +41 -0
- package/lib/share/core/devices.d.ts.map +1 -0
- package/lib/share/core/devices.js +58 -0
- package/lib/share/core/devices.js.map +1 -0
- package/lib/share/core/index.d.ts +4 -0
- package/lib/share/core/index.d.ts.map +1 -1
- package/lib/share/core/index.js +2 -0
- package/lib/share/core/index.js.map +1 -1
- package/lib/share/core/regions.d.ts +43 -0
- package/lib/share/core/regions.d.ts.map +1 -0
- package/lib/share/core/regions.js +71 -0
- package/lib/share/core/regions.js.map +1 -0
- package/lib/share/ui/HiddenPartsProvider.d.ts.map +1 -1
- package/lib/share/ui/HiddenPartsProvider.js +4 -1
- package/lib/share/ui/HiddenPartsProvider.js.map +1 -1
- package/lib/share/ui/PagePart.d.ts.map +1 -1
- package/lib/share/ui/PagePart.js +10 -1
- package/lib/share/ui/PagePart.js.map +1 -1
- package/lib/share/ui/ShareButton.d.ts.map +1 -1
- package/lib/share/ui/ShareButton.js +3 -4
- package/lib/share/ui/ShareButton.js.map +1 -1
- package/lib/share/ui/ShareConfigOptions.d.ts +6 -1
- package/lib/share/ui/ShareConfigOptions.d.ts.map +1 -1
- package/lib/share/ui/ShareConfigOptions.js +6 -13
- package/lib/share/ui/ShareConfigOptions.js.map +1 -1
- package/lib/share/ui/ShareDialog.d.ts +14 -0
- package/lib/share/ui/ShareDialog.d.ts.map +1 -1
- package/lib/share/ui/ShareDialog.js +3 -3
- package/lib/share/ui/ShareDialog.js.map +1 -1
- package/lib/share/ui/ShareDialogContent.d.ts +2 -2
- package/lib/share/ui/ShareDialogContent.d.ts.map +1 -1
- package/lib/share/ui/ShareDialogContent.js +36 -30
- package/lib/share/ui/ShareDialogContent.js.map +1 -1
- package/lib/share/ui/ShareLinkBar.d.ts +21 -0
- package/lib/share/ui/ShareLinkBar.d.ts.map +1 -0
- package/lib/share/ui/ShareLinkBar.js +32 -0
- package/lib/share/ui/ShareLinkBar.js.map +1 -0
- package/lib/share/ui/SharePanes.d.ts +17 -0
- package/lib/share/ui/SharePanes.d.ts.map +1 -0
- package/lib/share/ui/SharePanes.js +27 -0
- package/lib/share/ui/SharePanes.js.map +1 -0
- package/lib/share/ui/SharePartOptions.d.ts +9 -3
- package/lib/share/ui/SharePartOptions.d.ts.map +1 -1
- package/lib/share/ui/SharePartOptions.js +12 -16
- package/lib/share/ui/SharePartOptions.js.map +1 -1
- package/lib/share/ui/SharePartRow.d.ts +37 -0
- package/lib/share/ui/SharePartRow.d.ts.map +1 -0
- package/lib/share/ui/SharePartRow.js +25 -0
- package/lib/share/ui/SharePartRow.js.map +1 -0
- package/lib/share/ui/SharePresetTabs.d.ts +10 -7
- package/lib/share/ui/SharePresetTabs.d.ts.map +1 -1
- package/lib/share/ui/SharePresetTabs.js +17 -17
- package/lib/share/ui/SharePresetTabs.js.map +1 -1
- package/lib/share/ui/SharePreview.d.ts +32 -0
- package/lib/share/ui/SharePreview.d.ts.map +1 -0
- package/lib/share/ui/SharePreview.js +104 -0
- package/lib/share/ui/SharePreview.js.map +1 -0
- package/lib/share/ui/SharePreviewDevices.d.ts +20 -0
- package/lib/share/ui/SharePreviewDevices.d.ts.map +1 -0
- package/lib/share/ui/SharePreviewDevices.js +40 -0
- package/lib/share/ui/SharePreviewDevices.js.map +1 -0
- package/lib/share/ui/index.d.ts +1 -0
- package/lib/share/ui/index.d.ts.map +1 -1
- package/lib/share/ui/index.js.map +1 -1
- package/lib/share/ui/shareMarking.d.ts +14 -0
- package/lib/share/ui/shareMarking.d.ts.map +1 -0
- package/lib/share/ui/shareMarking.js +17 -0
- package/lib/share/ui/shareMarking.js.map +1 -0
- package/lib/share/ui/useShareRegionReports.d.ts +12 -0
- package/lib/share/ui/useShareRegionReports.d.ts.map +1 -0
- package/lib/share/ui/useShareRegionReports.js +73 -0
- package/lib/share/ui/useShareRegionReports.js.map +1 -0
- package/lib/shared/ui/ActionTooltip.d.ts +42 -0
- package/lib/shared/ui/ActionTooltip.d.ts.map +1 -0
- package/lib/shared/ui/ActionTooltip.js +21 -0
- package/lib/shared/ui/ActionTooltip.js.map +1 -0
- package/lib/shared/ui/index.d.ts +4 -0
- package/lib/shared/ui/index.d.ts.map +1 -1
- package/lib/shared/ui/index.js +2 -0
- package/lib/shared/ui/index.js.map +1 -1
- package/lib/shared/ui/useActionTooltip.d.ts +48 -0
- package/lib/shared/ui/useActionTooltip.d.ts.map +1 -0
- package/lib/shared/ui/useActionTooltip.js +78 -0
- package/lib/shared/ui/useActionTooltip.js.map +1 -0
- package/lib/structure/core/index.d.ts +2 -0
- package/lib/structure/core/index.d.ts.map +1 -1
- package/lib/structure/core/index.js +1 -0
- package/lib/structure/core/index.js.map +1 -1
- package/lib/structure/core/sourceMolecule.d.ts +18 -0
- package/lib/structure/core/sourceMolecule.d.ts.map +1 -0
- package/lib/structure/core/sourceMolecule.js +26 -0
- package/lib/structure/core/sourceMolecule.js.map +1 -0
- package/lib/structure/core/structureNotations.d.ts +57 -0
- package/lib/structure/core/structureNotations.d.ts.map +1 -0
- package/lib/structure/core/structureNotations.js +74 -0
- package/lib/structure/core/structureNotations.js.map +1 -0
- package/lib/structure/core/structurePicture.d.ts +49 -0
- package/lib/structure/core/structurePicture.d.ts.map +1 -0
- package/lib/structure/core/structurePicture.js +83 -0
- package/lib/structure/core/structurePicture.js.map +1 -0
- package/lib/structure/ui/EditorExportButton.d.ts +23 -0
- package/lib/structure/ui/EditorExportButton.d.ts.map +1 -0
- package/lib/structure/ui/EditorExportButton.js +23 -0
- package/lib/structure/ui/EditorExportButton.js.map +1 -0
- package/lib/structure/ui/EditorHelpButton.d.ts +5 -2
- package/lib/structure/ui/EditorHelpButton.d.ts.map +1 -1
- package/lib/structure/ui/EditorHelpButton.js +8 -9
- package/lib/structure/ui/EditorHelpButton.js.map +1 -1
- package/lib/structure/ui/StructureEditor.d.ts +8 -0
- package/lib/structure/ui/StructureEditor.d.ts.map +1 -1
- package/lib/structure/ui/StructureEditor.js +26 -3
- package/lib/structure/ui/StructureEditor.js.map +1 -1
- package/lib/structure/ui/StructureExportDialog.d.ts +34 -0
- package/lib/structure/ui/StructureExportDialog.d.ts.map +1 -0
- package/lib/structure/ui/StructureExportDialog.js +43 -0
- package/lib/structure/ui/StructureExportDialog.js.map +1 -0
- package/lib/structure/ui/StructureExportPanel.d.ts +37 -0
- package/lib/structure/ui/StructureExportPanel.d.ts.map +1 -0
- package/lib/structure/ui/StructureExportPanel.js +75 -0
- package/lib/structure/ui/StructureExportPanel.js.map +1 -0
- package/lib/structure/ui/StructureNotationRow.d.ts +22 -0
- package/lib/structure/ui/StructureNotationRow.d.ts.map +1 -0
- package/lib/structure/ui/StructureNotationRow.js +34 -0
- package/lib/structure/ui/StructureNotationRow.js.map +1 -0
- package/lib/structure/ui/StructurePicturePane.d.ts +23 -0
- package/lib/structure/ui/StructurePicturePane.d.ts.map +1 -0
- package/lib/structure/ui/StructurePicturePane.js +113 -0
- package/lib/structure/ui/StructurePicturePane.js.map +1 -0
- package/lib/structure/ui/StructureSvg.d.ts.map +1 -1
- package/lib/structure/ui/StructureSvg.js +2 -18
- package/lib/structure/ui/StructureSvg.js.map +1 -1
- package/lib/structure/ui/ToolbarTooltip.d.ts.map +1 -1
- package/lib/structure/ui/ToolbarTooltip.js +1 -2
- package/lib/structure/ui/ToolbarTooltip.js.map +1 -1
- package/lib/structure/ui/index.d.ts +7 -3
- package/lib/structure/ui/index.d.ts.map +1 -1
- package/lib/structure/ui/index.js +5 -3
- package/lib/structure/ui/index.js.map +1 -1
- package/lib/structure/ui/structureNotationText.d.ts +23 -0
- package/lib/structure/ui/structureNotationText.d.ts.map +1 -0
- package/lib/structure/ui/structureNotationText.js +42 -0
- package/lib/structure/ui/structureNotationText.js.map +1 -0
- package/lib/structure/ui/useEditorStructure.d.ts +37 -0
- package/lib/structure/ui/useEditorStructure.d.ts.map +1 -0
- package/lib/structure/ui/useEditorStructure.js +70 -0
- package/lib/structure/ui/useEditorStructure.js.map +1 -0
- package/lib/ui.d.ts +1 -0
- package/lib/ui.d.ts.map +1 -1
- package/lib/ui.js +1 -0
- package/lib/ui.js.map +1 -1
- package/package.json +1 -1
- package/src/chart/ui/Axes.tsx +53 -5
- package/src/chrome/ui/NavMenuButton.tsx +61 -18
- package/src/chrome/ui/SiteHeader.tsx +37 -1
- package/src/chrome/ui/navItem.ts +7 -0
- package/src/citation/ui/entries.tsx +10 -2
- package/src/clipboard/ui/ClickToCopy.tsx +47 -13
- package/src/clipboard/ui/CopyButton.tsx +4 -2
- package/src/clipboard/ui/CopyableValue.tsx +88 -13
- package/src/clipboard/ui/index.ts +5 -1
- package/src/confirm/ui/ConfirmButton.tsx +2 -0
- package/src/core.ts +1 -0
- package/src/delimited/ui/TableDataButton.tsx +2 -1
- package/src/download/core/figureSvg.ts +42 -10
- package/src/help/ui/HelpToolbarButton.tsx +2 -1
- package/src/locales/de.json +48 -5
- package/src/locales/en.json +48 -5
- package/src/locales/es.json +48 -5
- package/src/locales/fr.json +48 -5
- package/src/locales/it.json +48 -5
- package/src/number/core/index.ts +1 -0
- package/src/number/core/numberText.ts +20 -0
- package/src/number/ui/NumberInput.tsx +1 -1
- package/src/overlay/ui/OverlayIconButton.tsx +1 -0
- package/src/panel/ui/ClearButton.tsx +1 -0
- package/src/pedagogy/core/inlineMarks.ts +15 -7
- package/src/pedagogy/ui/GlossaryDefinition.tsx +8 -18
- package/src/pedagogy/ui/GlossaryIndex.tsx +0 -1
- package/src/pedagogy/ui/GlossaryProvider.tsx +10 -2
- package/src/pedagogy/ui/GlossaryText.tsx +10 -2
- package/src/pedagogy/ui/InlineText.tsx +21 -4
- package/src/pedagogy/ui/ReferenceSectionBlock.tsx +8 -2
- package/src/pedagogy/ui/SyntaxTooltip.tsx +11 -9
- package/src/pedagogy/ui/TutorialStepStrip.tsx +50 -18
- package/src/pedagogy/ui/glossaryContext.ts +7 -0
- package/src/pedagogy/ui/index.ts +1 -1
- package/src/pedagogy/ui/inlineSegments.tsx +7 -0
- package/src/pedagogy/ui/pedagogyStyle.ts +12 -24
- package/src/range/core/index.ts +11 -0
- package/src/range/core/rangeBounds.ts +143 -0
- package/src/range/core/rangeHistogram.ts +38 -0
- package/src/range/ui/RangeHistogram.tsx +49 -0
- package/src/range/ui/RangeSlider.tsx +209 -0
- package/src/range/ui/RangeValue.tsx +166 -0
- package/src/range/ui/index.ts +2 -0
- package/src/seo/core/documentMeta.ts +22 -0
- package/src/seo/core/index.ts +8 -1
- package/src/seo/core/noscript.ts +20 -2
- package/src/seo/core/pageMeta.ts +29 -5
- package/src/seo/core/plainDescription.ts +4 -2
- package/src/seo/core/siteFiles.ts +45 -10
- package/src/seo/core/startDocumentMeta.ts +9 -9
- package/src/seo/vite/prerender.ts +160 -36
- package/src/share/core/devices.ts +80 -0
- package/src/share/core/index.ts +14 -0
- package/src/share/core/regions.ts +87 -0
- package/src/share/ui/HiddenPartsProvider.tsx +6 -1
- package/src/share/ui/PagePart.tsx +12 -1
- package/src/share/ui/ShareButton.tsx +3 -6
- package/src/share/ui/ShareConfigOptions.tsx +25 -16
- package/src/share/ui/ShareDialog.tsx +17 -3
- package/src/share/ui/ShareDialogContent.tsx +80 -77
- package/src/share/ui/ShareLinkBar.tsx +70 -0
- package/src/share/ui/SharePanes.tsx +62 -0
- package/src/share/ui/SharePartOptions.tsx +25 -26
- package/src/share/ui/SharePartRow.tsx +78 -0
- package/src/share/ui/SharePresetTabs.tsx +36 -43
- package/src/share/ui/SharePreview.tsx +204 -0
- package/src/share/ui/SharePreviewDevices.tsx +70 -0
- package/src/share/ui/index.ts +1 -0
- package/src/share/ui/shareMarking.ts +18 -0
- package/src/share/ui/useShareRegionReports.ts +84 -0
- package/src/shared/ui/ActionTooltip.tsx +70 -0
- package/src/shared/ui/index.ts +7 -0
- package/src/shared/ui/useActionTooltip.ts +103 -0
- package/src/structure/core/index.ts +5 -0
- package/src/structure/core/sourceMolecule.ts +26 -0
- package/src/structure/core/structureNotations.ts +125 -0
- package/src/structure/core/structurePicture.ts +119 -0
- package/src/structure/ui/EditorExportButton.tsx +62 -0
- package/src/structure/ui/EditorHelpButton.tsx +26 -30
- package/src/structure/ui/StructureEditor.tsx +51 -5
- package/src/structure/ui/StructureExportDialog.tsx +90 -0
- package/src/structure/ui/StructureExportPanel.tsx +156 -0
- package/src/structure/ui/StructureNotationRow.tsx +74 -0
- package/src/structure/ui/StructurePicturePane.tsx +208 -0
- package/src/structure/ui/StructureSvg.tsx +3 -12
- package/src/structure/ui/ToolbarTooltip.tsx +1 -1
- package/src/structure/ui/index.ts +7 -3
- package/src/structure/ui/structureNotationText.ts +56 -0
- package/src/structure/ui/useEditorStructure.ts +119 -0
- package/src/ui.ts +1 -0
- package/styles/chrome.css +546 -11
package/README.md
CHANGED
|
@@ -97,7 +97,8 @@ through a wildcard subpath exactly as `react-science` serves its own.
|
|
|
97
97
|
| **Pedagogy** | `parseGlossaryMarkers`, `localStorageProgressStore`, `progressSummary`, `finishValidation` | `GlossaryText`, `SyntaxTooltip`, `HintLadder`, `ExerciseActions`, `ExerciseProgressHeader`, `TutorialStepStrip`, `ReferenceGrid`, `TestCaseList` |
|
|
98
98
|
| **Clipboard & files** | `writeToClipboard`, `downloadBlob`, `downloadText`, `sanitizeFileName`, `toDelimited`, `readDelimited`, `downloadFigure`, `figureSvg`, `figurePng`, `figureSize` | `ClickToCopy`, `CopyButton`, `CopyableValue`, `CodeBlock`, `DelimitedTextDialog`, `FigureDownload` |
|
|
99
99
|
| **Formatting & colour** | `formatInteger`, `formatDecimal`, `formatBytes`, `pluralize`, `readableInk`, `contrastRatio`, `COLOR_SCALES`, `resolveColorScale`, `formatColorScale`, `colorAt`, `swatchAt`, `sampleScale`, `colorScaleGradient`, `rgbToHsv` | `ColorScaleLegend`, `ColorScaleSelect`, `ColorScaleEditor`, `ColorScaleBar` |
|
|
100
|
-
| **Number entry** | `readNumber`, `numberText`, `isPartialNumber`, `stepNumber`
|
|
100
|
+
| **Number entry** | `readNumber`, `numberText`, `isPartialNumber`, `stepNumber`, `snapToStep` | `NumberInput` |
|
|
101
|
+
| **Range filter** | `isRangeBounded`, `isRangeDomain`, `rangeHandles`, `movedRange`, `settleHandles`, `sameRange`, `rangeHistogramPath`, `OPEN_RANGE` | `RangeSlider` |
|
|
101
102
|
| **Widgets** | `CREDITS`, `credits` | `ErrorBoundary`, `CollapsibleSection`, `CapsuleFilter`, `HelpTooltip`, `CreditsList` |
|
|
102
103
|
| **Hooks & state** | `createWorkerChannel`, `persistBucket`, `persistSignalBucket` | `useDebouncedValue`, `useContainerSize`, `useListKeyboardNavigation`, `useDisclosure` |
|
|
103
104
|
| **Chemistry** | `atomicOrbitalsOf`, `configurationOf`, `classifyMolfile`, `readStructure`, `toMolfileExport` | `AtomicOrbitalViewer` (`/orbital`), `StructureEditor`, `Structure` (`/structure`) |
|
|
@@ -337,6 +338,50 @@ The colours a name is set in are the site's own and are not retuned to reach the
|
|
|
337
338
|
4.5:1 of body text: ChemCalc's teal and NMRium's orange both land just under it,
|
|
338
339
|
which is why a name is set bold, where 3:1 is the threshold.
|
|
339
340
|
|
|
341
|
+
### `StructureEditor`
|
|
342
|
+
|
|
343
|
+
The canvas a structure is drawn on, sized so none of its toolbar is cut off, and
|
|
344
|
+
loaded from whatever notation the caller has.
|
|
345
|
+
|
|
346
|
+
```tsx
|
|
347
|
+
import { StructureEditor } from 'react-cheminfo/structure';
|
|
348
|
+
|
|
349
|
+
<StructureEditor
|
|
350
|
+
value={smiles}
|
|
351
|
+
inputFormat="smiles"
|
|
352
|
+
revision={revision}
|
|
353
|
+
minHeight={280}
|
|
354
|
+
onChange={(change) => setSmiles(change.smiles)}
|
|
355
|
+
/>;
|
|
356
|
+
```
|
|
357
|
+
|
|
358
|
+
- **The canvas takes a pasted structure itself, so a site needs no box beside it
|
|
359
|
+
to paste into.** Click the canvas and ⌘/Ctrl-V reads a molfile, a SMILES or an
|
|
360
|
+
idCode out of the clipboard and adds it to the drawing — openchemlib listens
|
|
361
|
+
for the paste on the editor and parses the text with `Molecule.fromText`.
|
|
362
|
+
Focus is what decides it, not the pointer: a paste while the caret is
|
|
363
|
+
elsewhere goes to that element and the canvas never sees it. ⌘/Ctrl-C copies
|
|
364
|
+
the structure back out. A box is still worth having where a structure arrives
|
|
365
|
+
as _text the visitor keeps_ — a share link, a value they read back — and not
|
|
366
|
+
merely to get a SMILES onto the canvas.
|
|
367
|
+
- **The editor is uncontrolled**: `value` is read at mount and again on every
|
|
368
|
+
change of `revision`, never on every render. Feeding the drawing back into
|
|
369
|
+
`value` would replace every coordinate under the pen, so bump `revision` when
|
|
370
|
+
an example, a share link or a Clear button loads a structure the editor did
|
|
371
|
+
not produce.
|
|
372
|
+
- `onChange` fires once the drawing has been still for `debounce` milliseconds
|
|
373
|
+
(300 by default) with every notation read out at once — idCode, SMILES,
|
|
374
|
+
molfile, formula.
|
|
375
|
+
- `minHeight` is a floor, not a height: the container grows to whatever the
|
|
376
|
+
toolbar needs, measured when the lazy canvas arrives rather than on a
|
|
377
|
+
deadline, so a slow chunk never leaves half the palette cut off.
|
|
378
|
+
- `help` (on by default) explains each toolbar button in a tooltip and puts a
|
|
379
|
+
guide to the mouse and the keyboard in the corner, which F1 opens too — the
|
|
380
|
+
paste and copy keys are listed there under **Anywhere**.
|
|
381
|
+
- The canvas sits behind `React.lazy`, so a page that never opens an editor
|
|
382
|
+
never downloads openchemlib, and `react-cheminfo/structure` stays importable
|
|
383
|
+
when those optional peers are absent.
|
|
384
|
+
|
|
340
385
|
### `ColorScaleSelect`
|
|
341
386
|
|
|
342
387
|
The colours a quantity is read with, chosen by looking at them rather than by
|
|
@@ -595,6 +640,37 @@ in a box of exactly that size.
|
|
|
595
640
|
`downloadFigure(target, options)`, `figureSvg` and `figurePng` are the same thing
|
|
596
641
|
without the button, for a site saving a figure from its own menu.
|
|
597
642
|
|
|
643
|
+
### `RangeSlider`
|
|
644
|
+
|
|
645
|
+
A range picked with two handles, its two values written under the track, where
|
|
646
|
+
a click turns either into a box to type an exact number.
|
|
647
|
+
|
|
648
|
+
```tsx
|
|
649
|
+
import { RangeSlider } from 'react-cheminfo/ui';
|
|
650
|
+
|
|
651
|
+
<RangeSlider
|
|
652
|
+
label="Molecular weight"
|
|
653
|
+
unit="g/mol"
|
|
654
|
+
domain={[0, 1000]}
|
|
655
|
+
step={10}
|
|
656
|
+
value={range}
|
|
657
|
+
histogram={counts}
|
|
658
|
+
onPreview={setCountRange}
|
|
659
|
+
onChange={setRange}
|
|
660
|
+
/>;
|
|
661
|
+
```
|
|
662
|
+
|
|
663
|
+
- **A handle at the end of the track is an open side.** The range is
|
|
664
|
+
`{ min, max }`, either side `null`; the track only covers the values the page
|
|
665
|
+
knows about, so a value past it is never cut by a filter nobody touched.
|
|
666
|
+
- **`onChange` fires when the range settles** — a handle released, a value
|
|
667
|
+
typed, the range cleared — so a page that fetches on it fetches once per
|
|
668
|
+
gesture. `onPreview` follows every step of a drag, for what is cheap to redraw.
|
|
669
|
+
- **The handles are Blueprint's**, so the keyboard, touch screens and screen
|
|
670
|
+
readers are handled there; the stylesheet dresses them in the brand colour.
|
|
671
|
+
- **`histogram`** takes one count per equal-width bin, drawn over the track with
|
|
672
|
+
the part the handles keep in the brand colour.
|
|
673
|
+
|
|
598
674
|
### `ParallelCoordinates`
|
|
599
675
|
|
|
600
676
|
Many rows against many properties at once: one vertical axis per column, one
|
package/bin/check-seo.mjs
CHANGED
|
@@ -69,6 +69,7 @@ if (pages.length === 0) {
|
|
|
69
69
|
const problems = [];
|
|
70
70
|
const deferred = [];
|
|
71
71
|
const excluded = [];
|
|
72
|
+
const written = new Set(pages.map((page) => page.address));
|
|
72
73
|
const titles = new Map();
|
|
73
74
|
const descriptions = new Map();
|
|
74
75
|
|
|
@@ -209,6 +210,48 @@ function checkHead(at, html) {
|
|
|
209
210
|
problems.push(`${at}: no twitter:card, so a shared link unfurls bare.`);
|
|
210
211
|
}
|
|
211
212
|
|
|
213
|
+
// A translated page points at its own language too, so a set that is there
|
|
214
|
+
// at all must name every address the build wrote for this page. One that
|
|
215
|
+
// points at a file nothing wrote is a soft 404 on every language at once,
|
|
216
|
+
// and a set missing its own address is ignored whole.
|
|
217
|
+
const alternates = [
|
|
218
|
+
...html.matchAll(
|
|
219
|
+
/<link\s+rel="alternate"\s+hreflang="([^"]*)"\s+href="([^"]*)"/gi,
|
|
220
|
+
),
|
|
221
|
+
];
|
|
222
|
+
if (alternates.length > 0) {
|
|
223
|
+
let self = false;
|
|
224
|
+
for (const [, hreflang, href] of alternates) {
|
|
225
|
+
const own = ownPath(href ?? '');
|
|
226
|
+
if (own === undefined) continue;
|
|
227
|
+
if (own === at) self = true;
|
|
228
|
+
if (!written.has(own)) {
|
|
229
|
+
problems.push(
|
|
230
|
+
`${at}: hreflang="${hreflang}" points at ${own}, which the build never wrote.`,
|
|
231
|
+
);
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
if (!self) {
|
|
235
|
+
problems.push(
|
|
236
|
+
`${at}: the hreflang set does not name this address — a set that leaves out the page it is on is ignored whole.`,
|
|
237
|
+
);
|
|
238
|
+
}
|
|
239
|
+
const prefix = /^\/(?<language>[a-z]{2}(?:-[A-Za-z]{2,8})?)(?:\/|$)/.exec(
|
|
240
|
+
at,
|
|
241
|
+
);
|
|
242
|
+
const named = prefix?.groups?.language;
|
|
243
|
+
const declared = tag(html, /<html[^>]*\slang="([^"]*)"/i);
|
|
244
|
+
if (
|
|
245
|
+
named !== undefined &&
|
|
246
|
+
alternates.some(([, hreflang]) => hreflang === named) &&
|
|
247
|
+
declared !== named
|
|
248
|
+
) {
|
|
249
|
+
problems.push(
|
|
250
|
+
`${at}: the address says ${named} and <html lang> says ${declared ?? 'nothing'} — a page whose lang lies is offered to the wrong reader.`,
|
|
251
|
+
);
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
|
|
212
255
|
const image = tag(html, /<meta\s+property="og:image"\s+content="([^"]*)"/i);
|
|
213
256
|
if (image === undefined) {
|
|
214
257
|
problems.push(`${at}: no og:image.`);
|
|
@@ -245,7 +288,6 @@ function checkSiteFiles() {
|
|
|
245
288
|
return;
|
|
246
289
|
}
|
|
247
290
|
const xml = readFileSync(sitemap, 'utf8');
|
|
248
|
-
const written = new Set(pages.map((page) => page.address));
|
|
249
291
|
const claimed = new Set();
|
|
250
292
|
let listed = 0;
|
|
251
293
|
for (const match of xml.matchAll(/<loc>([^<]+)<\/loc>/g)) {
|
package/lib/chart/ui/Axes.d.ts
CHANGED
|
@@ -70,6 +70,25 @@ export interface AxesProps {
|
|
|
70
70
|
* @default 44
|
|
71
71
|
*/
|
|
72
72
|
yTickSpacing?: number;
|
|
73
|
+
/**
|
|
74
|
+
* The values to rule the vertical axis at, instead of the ones the room
|
|
75
|
+
* allows.
|
|
76
|
+
*
|
|
77
|
+
* An axis whose ticks are decided by what is being measured rather than by
|
|
78
|
+
* how much space there is: a concentration read over fifteen decades is ruled
|
|
79
|
+
* at the decades, and a tick at 0.0037 between two of them says nothing. The
|
|
80
|
+
* values outside the window are dropped, so one list serves every zoom.
|
|
81
|
+
* @default the ticks worked out from the window and the room
|
|
82
|
+
*/
|
|
83
|
+
yTickValues?: readonly number[];
|
|
84
|
+
/**
|
|
85
|
+
* How a value up the side is written, instead of as a plain number.
|
|
86
|
+
*
|
|
87
|
+
* What goes with `yTickValues`: an axis ruled at the decades writes `10⁻³`,
|
|
88
|
+
* and the exponent is the only part of it a reader is reading.
|
|
89
|
+
* @default the notation the window's step calls for
|
|
90
|
+
*/
|
|
91
|
+
formatYTick?: (value: number) => string;
|
|
73
92
|
}
|
|
74
93
|
/**
|
|
75
94
|
* The frame the spectra are read against: two axis lines, a grid, and titles.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Axes.d.ts","sourceRoot":"","sources":["../../../src/chart/ui/Axes.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAM1C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAIxD,MAAM,WAAW,SAAS;IACxB,0CAA0C;IAC1C,IAAI,EAAE,QAAQ,CAAC;IACf,6EAA6E;IAC7E,OAAO,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,wEAAwE;IACxE,OAAO,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC;;;;OAIG;IACH,MAAM,EAAE,UAAU,CAAC;IACnB,mDAAmD;IACnD,MAAM,EAAE,UAAU,CAAC;IACnB;;;;;;;OAOG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;;;;;OAOG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;;;;OAOG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;;;OAMG;IACH,MAAM,EAAE,MAAM,CAAC;IACf,0EAA0E;IAC1E,MAAM,EAAE,MAAM,CAAC;IACf;;;;;;;;;;OAUG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"Axes.d.ts","sourceRoot":"","sources":["../../../src/chart/ui/Axes.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAM1C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAIxD,MAAM,WAAW,SAAS;IACxB,0CAA0C;IAC1C,IAAI,EAAE,QAAQ,CAAC;IACf,6EAA6E;IAC7E,OAAO,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,wEAAwE;IACxE,OAAO,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC;;;;OAIG;IACH,MAAM,EAAE,UAAU,CAAC;IACnB,mDAAmD;IACnD,MAAM,EAAE,UAAU,CAAC;IACnB;;;;;;;OAOG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;;;;;OAOG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;;;;OAOG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;;;OAMG;IACH,MAAM,EAAE,MAAM,CAAC;IACf,0EAA0E;IAC1E,MAAM,EAAE,MAAM,CAAC;IACf;;;;;;;;;;OAUG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;;;;;;OASG;IACH,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAChC;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;CACzC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,IAAI,CAAC,KAAK,EAAE,SAAS,GAAG,YAAY,CAyInD"}
|
package/lib/chart/ui/Axes.js
CHANGED
|
@@ -34,11 +34,15 @@ import { CHART_COLORS, CHART_FONT } from "../core/chartTheme.js";
|
|
|
34
34
|
* @returns The axes, as SVG.
|
|
35
35
|
*/
|
|
36
36
|
export function Axes(props) {
|
|
37
|
-
const { plot, xDomain, yDomain, xScale, yScale, absYTicks = false, showXTicks = true, showXTitle = true, xTitle, yTitle, xTickSpacing = X_TICK_SPACING, yTickSpacing = Y_TICK_SPACING, } = props;
|
|
37
|
+
const { plot, xDomain, yDomain, xScale, yScale, absYTicks = false, showXTicks = true, showXTitle = true, xTitle, yTitle, xTickSpacing = X_TICK_SPACING, yTickSpacing = Y_TICK_SPACING, yTickValues, formatYTick, } = props;
|
|
38
38
|
const xTicks = useMemo(() => spectrumAxis(xDomain, tickCount(plot.width, xTickSpacing)), [xDomain, plot.width, xTickSpacing]);
|
|
39
39
|
const yTicks = useMemo(() => spectrumAxis(yDomain, tickCount(plot.height, yTickSpacing)), [yDomain, plot.height, yTickSpacing]);
|
|
40
40
|
const writeXTick = useMemo(() => axisLabeller(xTicks), [xTicks]);
|
|
41
|
-
const
|
|
41
|
+
const labelYTick = useMemo(() => axisLabeller(yTicks), [yTicks]);
|
|
42
|
+
const writeYTick = formatYTick ?? labelYTick;
|
|
43
|
+
// Ruled where the quantity asks rather than where there is room; a value the
|
|
44
|
+
// zoom has left behind is dropped rather than drawn onto the margin.
|
|
45
|
+
const yRules = useMemo(() => (yTickValues ? insideWindow(yTickValues, yDomain) : yTicks.values), [yTickValues, yDomain, yTicks]);
|
|
42
46
|
const middleX = plot.left + plot.width / 2;
|
|
43
47
|
const middleY = plot.top + plot.height / 2;
|
|
44
48
|
// Beside the numbers rather than in a fixed column at the edge of the margin.
|
|
@@ -46,13 +50,29 @@ export function Axes(props) {
|
|
|
46
50
|
// title pinned where the wider of the two would leave it stands twenty pixels
|
|
47
51
|
// clear of the narrower — far enough to read as naming the chart rather than
|
|
48
52
|
// the axis.
|
|
49
|
-
const titleColumn = useMemo(() => valueTitleColumn(
|
|
53
|
+
const titleColumn = useMemo(() => valueTitleColumn(yRules, writeYTick, absYTicks, plot.left), [yRules, writeYTick, absYTicks, plot.left]);
|
|
50
54
|
// The rule a mirrored pair is reflected in only exists while both halves are
|
|
51
55
|
// on screen; on an ordinary chart zero is the baseline and already drawn.
|
|
52
56
|
const zero = chartPixel(yScale, 0);
|
|
53
57
|
const showsZeroRule = yDomain[0] < 0 && yDomain[1] > 0;
|
|
54
|
-
return (_jsxs("g", { pointerEvents: "none", children: [xTicks.values.map((tick) => (_jsx("line", { x1: chartPixel(xScale, tick), y1: plot.top, x2: chartPixel(xScale, tick), y2: plot.bottom, style: gridStyle }, tick))),
|
|
55
|
-
xTicks.values.map((tick) => (_jsx("text", { x: chartPixel(xScale, tick), y: plot.bottom + TICK_LABEL_GAP, textAnchor: "middle", dominantBaseline: "hanging", style: tickStyle, children: writeXTick(tick) }, tick))),
|
|
58
|
+
return (_jsxs("g", { pointerEvents: "none", children: [xTicks.values.map((tick) => (_jsx("line", { x1: chartPixel(xScale, tick), y1: plot.top, x2: chartPixel(xScale, tick), y2: plot.bottom, style: gridStyle }, tick))), yRules.map((tick) => (_jsx("line", { x1: plot.left, y1: chartPixel(yScale, tick), x2: plot.right, y2: chartPixel(yScale, tick), style: gridStyle }, tick))), showsZeroRule ? (_jsx("line", { x1: plot.left, y1: zero, x2: plot.right, y2: zero, style: zeroRuleStyle })) : null, _jsx("path", { d: `M${plot.left} ${plot.top}V${plot.bottom}H${plot.right}`, fill: "none", style: axisStyle }), showXTicks &&
|
|
59
|
+
xTicks.values.map((tick) => (_jsx("text", { x: chartPixel(xScale, tick), y: plot.bottom + TICK_LABEL_GAP, textAnchor: "middle", dominantBaseline: "hanging", style: tickStyle, children: writeXTick(tick) }, tick))), yRules.map((tick) => (_jsx("text", { x: plot.left - TICK_LABEL_GAP, y: chartPixel(yScale, tick), textAnchor: "end", dominantBaseline: "central", style: tickStyle, children: writeYTick(absYTicks ? Math.abs(tick) : tick) }, tick))), showXTitle && (_jsx("text", { x: middleX, y: plot.bottom + TITLE_GAP, textAnchor: "middle", dominantBaseline: "hanging", style: titleStyle, children: xTitle })), _jsx("text", { x: titleColumn, y: middleY, transform: `rotate(-90 ${titleColumn} ${middleY})`, textAnchor: "middle", dominantBaseline: "central", style: titleStyle, children: yTitle })] }));
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* The values of a given list that the window still shows.
|
|
63
|
+
* @param values - Every value the axis would be ruled at.
|
|
64
|
+
* @param domain - The window on screen, `[from, to]`.
|
|
65
|
+
* @returns Those inside it, in the order they were given.
|
|
66
|
+
*/
|
|
67
|
+
function insideWindow(values, domain) {
|
|
68
|
+
const low = Math.min(domain[0], domain[1]);
|
|
69
|
+
const high = Math.max(domain[0], domain[1]);
|
|
70
|
+
const inside = [];
|
|
71
|
+
for (const value of values) {
|
|
72
|
+
if (value >= low && value <= high)
|
|
73
|
+
inside.push(value);
|
|
74
|
+
}
|
|
75
|
+
return inside;
|
|
56
76
|
}
|
|
57
77
|
/**
|
|
58
78
|
* The ticks of one axis of a chart a reader has zoomed for themselves.
|
package/lib/chart/ui/Axes.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Axes.js","sourceRoot":"","sources":["../../../src/chart/ui/Axes.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAEhC,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAG3D,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"Axes.js","sourceRoot":"","sources":["../../../src/chart/ui/Axes.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NavMenuButton.d.ts","sourceRoot":"","sources":["../../../src/chrome/ui/NavMenuButton.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAEpE,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAErD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAG5C,MAAM,WAAW,kBAAkB;IACjC,uEAAuE;IACvE,KAAK,EAAE,MAAM,CAAC;IACd,4DAA4D;IAC5D,KAAK,EAAE,SAAS,OAAO,EAAE,CAAC;IAC1B;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB;;;OAGG;IACH,SAAS,CAAC,EAAE,gBAAgB,CAAC,WAAW,CAAC,CAAC;IAC1C;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;OAGG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,YAAY,
|
|
1
|
+
{"version":3,"file":"NavMenuButton.d.ts","sourceRoot":"","sources":["../../../src/chrome/ui/NavMenuButton.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAEpE,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAErD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAG5C,MAAM,WAAW,kBAAkB;IACjC,uEAAuE;IACvE,KAAK,EAAE,MAAM,CAAC;IACd,4DAA4D;IAC5D,KAAK,EAAE,SAAS,OAAO,EAAE,CAAC;IAC1B;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB;;;OAGG;IACH,SAAS,CAAC,EAAE,gBAAgB,CAAC,WAAW,CAAC,CAAC;IAC1C;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;OAGG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,YAAY,CAkDrE"}
|
|
@@ -11,7 +11,7 @@ import { isModifiedClick } from "./navItem.js";
|
|
|
11
11
|
*/
|
|
12
12
|
export function NavMenuButton(props) {
|
|
13
13
|
const { label, items, activeId, icon, placement = 'bottom-start', compact = false, children, } = props;
|
|
14
|
-
const holdsActive = items
|
|
14
|
+
const holdsActive = holdsId(items, activeId);
|
|
15
15
|
const classes = [
|
|
16
16
|
'nav-link',
|
|
17
17
|
icon === undefined ? null : 'nav-link--icon',
|
|
@@ -19,15 +19,45 @@ export function NavMenuButton(props) {
|
|
|
19
19
|
]
|
|
20
20
|
.filter((part) => part !== null)
|
|
21
21
|
.join(' ');
|
|
22
|
-
return (_jsx(PopoverNext, { placement: placement, content: _jsxs(Menu, { className: "nav-menu", children: [items.map((item) => (_jsx(
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
22
|
+
return (_jsx(PopoverNext, { placement: placement, content: _jsxs(Menu, { className: "nav-menu", children: [items.map((item) => (_jsx(NavMenuEntry, { item: item, activeId: activeId }, item.id))), children] }), children: _jsxs("button", { type: "button", className: classes, "aria-label": label, title: compact ? label : undefined, children: [icon === undefined ? (label) : (_jsxs(_Fragment, { children: [_jsx(Icon, { icon: icon, size: 14 }), compact ? null : _jsx("span", { className: "nav-link__label", children: label })] })), compact ? null : _jsx(Icon, { icon: "caret-down", size: 14 })] }) }));
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* One line of a header menu, holding a submenu of its own when the entry folds
|
|
26
|
+
* pages — which is how a bar entry that is already a menu reads once the whole
|
|
27
|
+
* bar has folded into one.
|
|
28
|
+
* @param props - The entry and the page on show.
|
|
29
|
+
* @param props.item - The entry.
|
|
30
|
+
* @param props.activeId - The page on show.
|
|
31
|
+
* @returns The line.
|
|
32
|
+
*/
|
|
33
|
+
function NavMenuEntry(props) {
|
|
34
|
+
const { item, activeId } = props;
|
|
35
|
+
return (_jsx(MenuItem, { icon: item.icon, text: item.label,
|
|
36
|
+
// A real address, so a crawler reaching the menu can follow it and a
|
|
37
|
+
// middle click opens a tab of its own.
|
|
38
|
+
href: item.href, target: item.external ? '_blank' : undefined, active: item.items === undefined
|
|
39
|
+
? item.id === activeId
|
|
40
|
+
: holdsId(item.items, activeId), onClick: (event) => {
|
|
41
|
+
if (item.onSelect === undefined || isModifiedClick(event))
|
|
42
|
+
return;
|
|
43
|
+
event.preventDefault();
|
|
44
|
+
item.onSelect();
|
|
45
|
+
}, children: item.items?.map((child) => (_jsx(NavMenuEntry, { item: child, activeId: activeId }, child.id))) }));
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Whether a run of entries holds the page on show, looking through the ones
|
|
49
|
+
* that are menus of their own.
|
|
50
|
+
* @param items - The entries.
|
|
51
|
+
* @param activeId - The page on show.
|
|
52
|
+
* @returns Whether one of them is it.
|
|
53
|
+
*/
|
|
54
|
+
function holdsId(items, activeId) {
|
|
55
|
+
for (const item of items) {
|
|
56
|
+
if (item.id === activeId)
|
|
57
|
+
return true;
|
|
58
|
+
if (item.items !== undefined && holdsId(item.items, activeId))
|
|
59
|
+
return true;
|
|
60
|
+
}
|
|
61
|
+
return false;
|
|
32
62
|
}
|
|
33
63
|
//# sourceMappingURL=NavMenuButton.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NavMenuButton.js","sourceRoot":"","sources":["../../../src/chrome/ui/NavMenuButton.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAItE,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAoC/C;;;;;;;GAOG;AACH,MAAM,UAAU,aAAa,CAAC,KAAyB;IACrD,MAAM,EACJ,KAAK,EACL,KAAK,EACL,QAAQ,EACR,IAAI,EACJ,SAAS,GAAG,cAAc,EAC1B,OAAO,GAAG,KAAK,EACf,QAAQ,GACT,GAAG,KAAK,CAAC;IAEV,MAAM,WAAW,GAAG,
|
|
1
|
+
{"version":3,"file":"NavMenuButton.js","sourceRoot":"","sources":["../../../src/chrome/ui/NavMenuButton.tsx"],"names":[],"mappings":"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"}
|
|
@@ -34,7 +34,30 @@ export function SiteHeader(props) {
|
|
|
34
34
|
return;
|
|
35
35
|
event.preventDefault();
|
|
36
36
|
onHome();
|
|
37
|
-
}, children: [mark ?? _jsx(SiteMark, { site: site, size: markSize }), _jsx(Wordmark, { site: site })] }), _jsx("nav", { className: "app-header-nav", children: nav.map((item) => (_jsx(Fragment, { children: renderNavItem === undefined ? (_jsx(
|
|
37
|
+
}, children: [mark ?? _jsx(SiteMark, { site: site, size: markSize }), _jsx(Wordmark, { site: site })] }), _jsx("nav", { className: "app-header-nav", children: nav.map((item) => (_jsx(Fragment, { children: renderNavItem === undefined ? (_jsx(NavEntry, { item: item, activeId: activeId })) : (renderNavItem(item, item.id === activeId)) }, item.id))) }), nav.length > 1 ? (_jsx("div", { className: "app-header-nav-menu", children: _jsx(NavMenuButton, { label: pagesLabel ?? t('chrome.pages'), icon: "menu", compact: true, items: nav, activeId: activeId }) })) : null, _jsx("span", { className: "spacer" }), actions === undefined ? null : (_jsx("div", { className: "app-header-actions", children: actions }))] }) }));
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* One page of the bar: a link, or the menu it opens when the entry folds pages
|
|
41
|
+
* of its own. A menu stands where its pages would, among them and not among the
|
|
42
|
+
* utilities, because picking one of them changes what the page shows.
|
|
43
|
+
* @param props - The entry and the page on show.
|
|
44
|
+
* @param props.item - The entry.
|
|
45
|
+
* @param props.activeId - The page on show.
|
|
46
|
+
* @returns The entry.
|
|
47
|
+
*/
|
|
48
|
+
function NavEntry(props) {
|
|
49
|
+
const { item, activeId } = props;
|
|
50
|
+
if (item.items === undefined) {
|
|
51
|
+
return _jsx(NavLink, { item: item, active: item.id === activeId });
|
|
52
|
+
}
|
|
53
|
+
return (_jsx(NavMenuButton, { label: menuLabel(item), icon: typeof item.icon === 'string' ? item.icon : undefined, items: item.items, activeId: activeId, placement: "bottom-start" }));
|
|
54
|
+
}
|
|
55
|
+
// The trigger names itself to a screen reader, so an entry drawn as a glyph
|
|
56
|
+
// alone says what it opens through its title rather than through its id.
|
|
57
|
+
function menuLabel(item) {
|
|
58
|
+
if (typeof item.label === 'string')
|
|
59
|
+
return item.label;
|
|
60
|
+
return item.title ?? item.id;
|
|
38
61
|
}
|
|
39
62
|
/** The two widths the bar's contents run at, as the classes that set them. */
|
|
40
63
|
const INNER_CLASS = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SiteHeader.js","sourceRoot":"","sources":["../../../src/chrome/ui/SiteHeader.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEjC,OAAO,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAE1D,OAAO,EAAE,QAAQ,EAAE,MAAM,gCAAiC,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA8B,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEnD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAe,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAqB,CAAC;AAEpD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAkF/C;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,UAAU,CAAC,KAAsB;IAC/C,MAAM,EACJ,MAAM,EACN,IAAI,EAAE,MAAM,EACZ,IAAI,EACJ,GAAG,EACH,QAAQ,EACR,OAAO,EACP,aAAa,EACb,QAAQ,GAAG,KAAK,EAChB,QAAQ,GAAG,GAAG,EACd,MAAM,EACN,QAAQ,GAAG,EAAE,EACb,KAAK,GAAG,MAAM,EACd,UAAU,GACX,GAAG,KAAK,CAAC;IACV,MAAM,CAAC,GAAG,UAAU,EAAE,CAAC;IAEvB,IAAI,QAAQ;QAAE,OAAO,IAAI,CAAC;IAE1B,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IAC7E,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;IAC3E,CAAC;IAED,OAAO,CACL,iBAAQ,SAAS,EAAC,qBAAqB,YACrC,eAAK,SAAS,EAAE,WAAW,CAAC,KAAK,CAAC,aAChC,aACE,SAAS,EAAC,OAAO,EACjB,IAAI,EAAE,QAAQ,EACd,KAAK,EAAE,IAAI,CAAC,IAAI,EAChB,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;wBACjB,IAAI,MAAM,KAAK,SAAS,IAAI,eAAe,CAAC,KAAK,CAAC;4BAAE,OAAO;wBAC3D,KAAK,CAAC,cAAc,EAAE,CAAC;wBACvB,MAAM,EAAE,CAAC;oBACX,CAAC,aAEA,IAAI,IAAI,KAAC,QAAQ,IAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,GAAI,EACjD,KAAC,QAAQ,IAAC,IAAI,EAAE,IAAI,GAAI,IACtB,EACJ,cAAK,SAAS,EAAC,gBAAgB,YAC5B,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CACjB,KAAC,QAAQ,cACN,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,CAC7B,KAAC,
|
|
1
|
+
{"version":3,"file":"SiteHeader.js","sourceRoot":"","sources":["../../../src/chrome/ui/SiteHeader.tsx"],"names":[],"mappings":"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"}
|
|
@@ -48,6 +48,13 @@ export interface NavItem {
|
|
|
48
48
|
* @default undefined
|
|
49
49
|
*/
|
|
50
50
|
after?: ReactNode;
|
|
51
|
+
/**
|
|
52
|
+
* The pages this entry folds, which make it a menu rather than a link: the
|
|
53
|
+
* run of pages that do not each need a place of their own in the bar. The
|
|
54
|
+
* entry takes the brand tint while one of them is the page on show.
|
|
55
|
+
* @default undefined
|
|
56
|
+
*/
|
|
57
|
+
items?: readonly NavItem[];
|
|
51
58
|
/**
|
|
52
59
|
* Whether the page cannot be opened yet — a view that needs data the site
|
|
53
60
|
* has not been given.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"navItem.d.ts","sourceRoot":"","sources":["../../../src/chrome/ui/navItem.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEjE;;;;GAIG;AACH,MAAM,WAAW,OAAO;IACtB,0EAA0E;IAC1E,EAAE,EAAE,MAAM,CAAC;IACX,4BAA4B;IAC5B,KAAK,EAAE,SAAS,CAAC;IACjB;;;;;OAKG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;;OAKG;IACH,IAAI,CAAC,EAAE,QAAQ,GAAG,YAAY,CAAC;IAC/B;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB;;;OAGG;IACH,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAE1D"}
|
|
1
|
+
{"version":3,"file":"navItem.d.ts","sourceRoot":"","sources":["../../../src/chrome/ui/navItem.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEjE;;;;GAIG;AACH,MAAM,WAAW,OAAO;IACtB,0EAA0E;IAC1E,EAAE,EAAE,MAAM,CAAC;IACX,4BAA4B;IAC5B,KAAK,EAAE,SAAS,CAAC;IACjB;;;;;OAKG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;;OAKG;IACH,IAAI,CAAC,EAAE,QAAQ,GAAG,YAAY,CAAC;IAC/B;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB;;;OAGG;IACH,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB;;;;;OAKG;IACH,KAAK,CAAC,EAAE,SAAS,OAAO,EAAE,CAAC;IAC3B;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAE1D"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"navItem.js","sourceRoot":"","sources":["../../../src/chrome/ui/navItem.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"navItem.js","sourceRoot":"","sources":["../../../src/chrome/ui/navItem.ts"],"names":[],"mappings":"AAwEA;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,KAAiB;IAC/C,OAAO,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,MAAM,CAAC;AAC1E,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entries.d.ts","sourceRoot":"","sources":["../../../src/citation/ui/entries.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE1D,OAAO,KAAK,EAAiB,YAAY,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"entries.d.ts","sourceRoot":"","sources":["../../../src/citation/ui/entries.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE1D,OAAO,KAAK,EAAiB,YAAY,EAAE,MAAM,OAAO,CAAC;AAKzD,OAAO,KAAK,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAC3E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAczD,4DAA4D;AAC5D,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,QAAQ,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,cAAc;IAC7B,+CAA+C;IAC/C,UAAU,EAAE,SAAS,SAAS,EAAE,CAAC;IACjC,mCAAmC;IACnC,MAAM,EAAE,cAAc,CAAC;IACvB;;;OAGG;IACH,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,sDAAsD;IACtD,KAAK,EAAE,SAAS,GAAG,IAAI,CAAC;IACxB,wCAAwC;IACxC,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,YAAY,CAgC7D;AAED,MAAM,WAAW,kBAAkB;IACjC,+CAA+C;IAC/C,UAAU,EAAE,SAAS,SAAS,EAAE,CAAC;IACjC,oDAAoD;IACpD,QAAQ,EAAE,gBAAgB,CAAC;CAC5B;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,YAAY,CAmBrE"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import { MenuItem, Tooltip } from '@blueprintjs/core';
|
|
3
3
|
import { useChromeT } from "../../i18n/ui/useT.js";
|
|
4
|
+
import { useActionTooltip } from "../../shared/ui/useActionTooltip.js";
|
|
4
5
|
import { downloadCitations } from "../core/download.js";
|
|
5
6
|
import { CitationPreview } from "./CitationPreview.js";
|
|
6
7
|
// An entry carrying its preview tooltip is also a popover target, and
|
|
@@ -51,6 +52,10 @@ export function DownloadEntry(props) {
|
|
|
51
52
|
*/
|
|
52
53
|
function PreviewTooltip(props) {
|
|
53
54
|
const { references, format, style, children } = props;
|
|
54
|
-
|
|
55
|
+
// Held rather than left to Blueprint: pressing an entry downloads or copies
|
|
56
|
+
// and closes the menu, and a preview opened by the hover that led to the
|
|
57
|
+
// press would outlive both — see `useActionTooltip`.
|
|
58
|
+
const { isOpen, target } = useActionTooltip(false, PREVIEW_OPEN_DELAY);
|
|
59
|
+
return (_jsx(Tooltip, { placement: "left", popoverClassName: "citation-tooltip", isOpen: isOpen, content: _jsx(CitationPreview, { reference: references, format: format, style: style?.id }), renderTarget: ({ isOpen: drawn, ...targetProps }) => children({ ...targetProps, ...target }) }));
|
|
55
60
|
}
|
|
56
61
|
//# sourceMappingURL=entries.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entries.js","sourceRoot":"","sources":["../../../src/citation/ui/entries.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"entries.js","sourceRoot":"","sources":["../../../src/citation/ui/entries.tsx"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,8 @@ import type { CSSProperties, ReactElement, ReactNode } from 'react';
|
|
|
2
2
|
import type { ClipboardContent } from '../core/writeToClipboard.ts';
|
|
3
3
|
/** The elements a {@link ClickToCopy} can be, so a table cell is its own target. */
|
|
4
4
|
export type ClickToCopyElement = 'span' | 'code' | 'div' | 'td' | 'th';
|
|
5
|
+
/** Where the glyph sits: past the value, or inside its right edge. */
|
|
6
|
+
export type ClickToCopyLayout = 'inline' | 'block';
|
|
5
7
|
/** What {@link ClickToCopy} copies, and how it reads. */
|
|
6
8
|
export interface ClickToCopyProps {
|
|
7
9
|
/**
|
|
@@ -30,6 +32,15 @@ export interface ClickToCopyProps {
|
|
|
30
32
|
* @default 'span'
|
|
31
33
|
*/
|
|
32
34
|
as?: ClickToCopyElement;
|
|
35
|
+
/**
|
|
36
|
+
* Where the glyph goes. A value in a line of text shows it just past itself,
|
|
37
|
+
* so the line keeps its spacing; one laid out as a block keeps room for it
|
|
38
|
+
* inside its right edge, because a glyph past the edge of a full-width block
|
|
39
|
+
* is a glyph past the edge of whatever holds it — which scrolls the page
|
|
40
|
+
* sideways by the width of the glyph.
|
|
41
|
+
* @default read from `as`: a `span` or a `code` is inline, the rest a block
|
|
42
|
+
*/
|
|
43
|
+
layout?: ClickToCopyLayout;
|
|
33
44
|
/**
|
|
34
45
|
* Whether the value is a tab stop and a button of its own, with the glyph a
|
|
35
46
|
* keyboard is shown instead of the cursor. Off when a copy button beside it
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClickToCopy.d.ts","sourceRoot":"","sources":["../../../src/clipboard/ui/ClickToCopy.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ClickToCopy.d.ts","sourceRoot":"","sources":["../../../src/clipboard/ui/ClickToCopy.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,aAAa,EAGb,YAAY,EACZ,SAAS,EACV,MAAM,OAAO,CAAC;AAOf,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAKpE,oFAAoF;AACpF,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC;AAEvE,sEAAsE;AACtE,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,OAAO,CAAC;AAEnD,yDAAyD;AACzD,MAAM,WAAW,gBAAgB;IAC/B;;;OAGG;IACH,KAAK,EAAE,gBAAgB,GAAG,CAAC,MAAM,gBAAgB,CAAC,CAAC;IACnD,iEAAiE;IACjE,QAAQ,EAAE,SAAS,CAAC;IACpB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;;;;OAOG;IACH,EAAE,CAAC,EAAE,kBAAkB,CAAC;IACxB;;;;;;;OAOG;IACH,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAYD;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,YAAY,CAmEjE"}
|
|
@@ -24,9 +24,10 @@ const NESTED_CONTROL = 'a[href], button, input, select, textarea, summary, label
|
|
|
24
24
|
* @returns The copyable value.
|
|
25
25
|
*/
|
|
26
26
|
export function ClickToCopy(props) {
|
|
27
|
-
const { value, children, label, title, as: Element = 'span', focusable = true, disabled = false, className, style, testId, } = props;
|
|
27
|
+
const { value, children, label, title, as: Element = 'span', layout, focusable = true, disabled = false, className, style, testId, } = props;
|
|
28
28
|
const t = useChromeT();
|
|
29
29
|
const { copied, failed, copy } = useCopyToClipboard();
|
|
30
|
+
const placing = layout ?? (INLINE.has(Element) ? 'inline' : 'block');
|
|
30
31
|
if (disabled) {
|
|
31
32
|
return (_jsx(Element, { className: className, style: style, "data-testid": testId, children: children }));
|
|
32
33
|
}
|
|
@@ -37,15 +38,32 @@ export function ClickToCopy(props) {
|
|
|
37
38
|
void copy(typeof value === 'function' ? () => writeToClipboard(value()) : value);
|
|
38
39
|
}
|
|
39
40
|
const outcome = copied ? 'copied' : failed ? 'failed' : undefined;
|
|
40
|
-
return (_jsxs(Element, { className: joinClassNames('click-to-copy',
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
41
|
+
return (_jsxs(Element, { className: joinClassNames('click-to-copy', `click-to-copy--${placing}`, className), style: style, "data-testid": testId, role: focusable && !CELLS.has(Element) ? 'button' : undefined, tabIndex: focusable ? 0 : undefined, title: title ?? copyTitle(value, label, t), "data-copy": outcome, onClick: activate, onKeyDown: onActivateKey(activate), children: [children, focusable ? (_jsx(Icon, { className: "click-to-copy__icon", icon: outcomeIcon(outcome), size: 16 })) : null, _jsx("span", { className: "click-to-copy__status", role: "status", children: outcomeStatus(outcome, t) })] }));
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* The glyph the value carries: the clipboard at rest, then the answer.
|
|
45
|
+
* @param outcome - How the last copy went.
|
|
46
|
+
* @returns The icon.
|
|
47
|
+
*/
|
|
48
|
+
function outcomeIcon(outcome) {
|
|
49
|
+
if (outcome === 'copied')
|
|
50
|
+
return 'tick';
|
|
51
|
+
if (outcome === 'failed')
|
|
52
|
+
return 'cross';
|
|
53
|
+
return 'clipboard';
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* What a screen reader is told once a copy has been attempted.
|
|
57
|
+
* @param outcome - How it went.
|
|
58
|
+
* @param t - The chrome's formatter.
|
|
59
|
+
* @returns The line, or nothing before anything was copied.
|
|
60
|
+
*/
|
|
61
|
+
function outcomeStatus(outcome, t) {
|
|
62
|
+
if (outcome === 'copied')
|
|
63
|
+
return t('clipboard.copied');
|
|
64
|
+
if (outcome === 'failed')
|
|
65
|
+
return t('clipboard.failed');
|
|
66
|
+
return null;
|
|
49
67
|
}
|
|
50
68
|
function isOnNestedControl(event) {
|
|
51
69
|
const { target, currentTarget } = event;
|