react-msaview 7.0.0 → 8.1.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 +11 -10
- package/bundle/index.js +122 -111
- package/bundle/index.js.map +4 -4
- package/dist/calculateBlocks.js +5 -3
- package/dist/calculateBlocks.js.map +1 -1
- package/dist/colorSchemes.js +1 -2
- package/dist/colorSchemes.js.map +1 -1
- package/dist/columnStats.d.ts +28 -0
- package/dist/columnStats.js +34 -0
- package/dist/columnStats.js.map +1 -0
- package/dist/components/DragHandle.d.ts +3 -2
- package/dist/components/DragHandle.js +11 -5
- package/dist/components/DragHandle.js.map +1 -1
- package/dist/components/Loading.js +2 -8
- package/dist/components/Loading.js.map +1 -1
- package/dist/components/MSAView.js +17 -6
- package/dist/components/MSAView.js.map +1 -1
- package/dist/components/MSAViewer.d.ts +64 -7
- package/dist/components/MSAViewer.js +128 -23
- package/dist/components/MSAViewer.js.map +1 -1
- package/dist/components/PortalTooltip.d.ts +11 -0
- package/dist/components/PortalTooltip.js +29 -0
- package/dist/components/PortalTooltip.js.map +1 -0
- package/dist/components/ResizeHandles.js +11 -29
- package/dist/components/ResizeHandles.js.map +1 -1
- package/dist/components/SequenceTextArea.js +3 -4
- package/dist/components/SequenceTextArea.js.map +1 -1
- package/dist/components/Track.js +43 -24
- package/dist/components/Track.js.map +1 -1
- package/dist/components/dialogs/AboutDialog.js +6 -6
- package/dist/components/dialogs/AboutDialog.js.map +1 -1
- package/dist/components/dialogs/AnnotationFileDialog.js +5 -2
- package/dist/components/dialogs/AnnotationFileDialog.js.map +1 -1
- package/dist/components/dialogs/ExportSVGDialog.js +6 -4
- package/dist/components/dialogs/ExportSVGDialog.js.map +1 -1
- package/dist/components/dialogs/FeatureDialog.js +8 -3
- package/dist/components/dialogs/FeatureDialog.js.map +1 -1
- package/dist/components/dialogs/TrackInfoDialog.js +1 -1
- package/dist/components/dialogs/TrackInfoDialog.js.map +1 -1
- package/dist/components/header/GappynessSlider.js +6 -11
- package/dist/components/header/GappynessSlider.js.map +1 -1
- package/dist/components/header/Header.js +4 -1
- package/dist/components/header/Header.js.map +1 -1
- package/dist/components/header/LoadWarnings.js +6 -23
- package/dist/components/header/LoadWarnings.js.map +1 -1
- package/dist/components/header/ScrollZoomIcons.d.ts +6 -0
- package/dist/components/header/ScrollZoomIcons.js +35 -0
- package/dist/components/header/ScrollZoomIcons.js.map +1 -0
- package/dist/components/header/TreeSettingsMenu.js +1 -3
- package/dist/components/header/TreeSettingsMenu.js.map +1 -1
- package/dist/components/header/UnshareableDataWarning.js +2 -4
- package/dist/components/header/UnshareableDataWarning.js.map +1 -1
- package/dist/components/header/ZoomControls.js +49 -6
- package/dist/components/header/ZoomControls.js.map +1 -1
- package/dist/components/header/getAnnotationsMenu.js +3 -6
- package/dist/components/header/getAnnotationsMenu.js.map +1 -1
- package/dist/components/header/settingsMenuItems.js +12 -9
- package/dist/components/header/settingsMenuItems.js.map +1 -1
- package/dist/components/import/ImportForm.js +1 -1
- package/dist/components/import/ImportForm.js.map +1 -1
- package/dist/components/import/util.js +1 -2
- package/dist/components/import/util.js.map +1 -1
- package/dist/components/minimap/Minimap.js +1 -2
- package/dist/components/minimap/Minimap.js.map +1 -1
- package/dist/components/msa/AnnotationLegend.js +27 -19
- package/dist/components/msa/AnnotationLegend.js.map +1 -1
- package/dist/components/msa/MSACanvas.js +2 -4
- package/dist/components/msa/MSACanvas.js.map +1 -1
- package/dist/components/msa/MSACanvasBlock.js +13 -15
- package/dist/components/msa/MSACanvasBlock.js.map +1 -1
- package/dist/components/msa/MSAMouseoverCanvas.js +2 -1
- package/dist/components/msa/MSAMouseoverCanvas.js.map +1 -1
- package/dist/components/msa/domainBandCursor.d.ts +7 -11
- package/dist/components/msa/domainBandCursor.js +7 -11
- package/dist/components/msa/domainBandCursor.js.map +1 -1
- package/dist/components/msa/drawFeatureSpans.d.ts +59 -0
- package/dist/components/msa/drawFeatureSpans.js +113 -0
- package/dist/components/msa/drawFeatureSpans.js.map +1 -0
- package/dist/components/msa/legendRows.d.ts +8 -0
- package/dist/components/msa/legendRows.js +16 -0
- package/dist/components/msa/legendRows.js.map +1 -0
- package/dist/components/msa/msaRaster.d.ts +24 -31
- package/dist/components/msa/msaRaster.js +30 -39
- package/dist/components/msa/msaRaster.js.map +1 -1
- package/dist/components/msa/packDomainLanes.d.ts +20 -0
- package/dist/components/msa/packDomainLanes.js +33 -0
- package/dist/components/msa/packDomainLanes.js.map +1 -0
- package/dist/components/msa/renderBoxFeatureCanvasBlock.d.ts +3 -1
- package/dist/components/msa/renderBoxFeatureCanvasBlock.js +50 -87
- package/dist/components/msa/renderBoxFeatureCanvasBlock.js.map +1 -1
- package/dist/components/msa/renderHighlights.d.ts +15 -13
- package/dist/components/msa/renderHighlights.js +43 -20
- package/dist/components/msa/renderHighlights.js.map +1 -1
- package/dist/components/msa/renderMSABlock.js +12 -12
- package/dist/components/msa/renderMSABlock.js.map +1 -1
- package/dist/components/msa/tileColor.js +4 -7
- package/dist/components/msa/tileColor.js.map +1 -1
- package/dist/components/msa/useMsaBlockMouse.d.ts +5 -3
- package/dist/components/msa/useMsaBlockMouse.js +6 -6
- package/dist/components/msa/useMsaBlockMouse.js.map +1 -1
- package/dist/components/rowpanels/RowPanelBlock.d.ts +9 -0
- package/dist/components/rowpanels/RowPanelBlock.js +86 -0
- package/dist/components/rowpanels/RowPanelBlock.js.map +1 -0
- package/dist/components/rowpanels/RowPanelHeaders.d.ts +12 -0
- package/dist/components/rowpanels/RowPanelHeaders.js +38 -0
- package/dist/components/rowpanels/RowPanelHeaders.js.map +1 -0
- package/dist/components/{msa/ColumnStats.d.ts → rowpanels/RowPanels.d.ts} +2 -2
- package/dist/components/rowpanels/RowPanels.js +32 -0
- package/dist/components/rowpanels/RowPanels.js.map +1 -0
- package/dist/components/rowpanels/headerLayout.d.ts +1 -0
- package/dist/components/rowpanels/headerLayout.js +5 -0
- package/dist/components/rowpanels/headerLayout.js.map +1 -0
- package/dist/components/rowpanels/renderFeaturePanel.d.ts +21 -0
- package/dist/components/rowpanels/renderFeaturePanel.js +37 -0
- package/dist/components/rowpanels/renderFeaturePanel.js.map +1 -0
- package/dist/components/rowpanels/renderRowPanel.d.ts +23 -0
- package/dist/components/rowpanels/renderRowPanel.js +22 -0
- package/dist/components/rowpanels/renderRowPanel.js.map +1 -0
- package/dist/components/rowpanels/renderStrip.d.ts +20 -0
- package/dist/components/rowpanels/renderStrip.js +26 -0
- package/dist/components/rowpanels/renderStrip.js.map +1 -0
- package/dist/components/tracks/TrackBlocks.js +3 -5
- package/dist/components/tracks/TrackBlocks.js.map +1 -1
- package/dist/components/tracks/TrackTooltipContent.d.ts +15 -0
- package/dist/components/tracks/TrackTooltipContent.js +109 -0
- package/dist/components/tracks/TrackTooltipContent.js.map +1 -0
- package/dist/components/tracks/drawTracks.d.ts +4 -4
- package/dist/components/tracks/drawTracks.js +25 -39
- package/dist/components/tracks/drawTracks.js.map +1 -1
- package/dist/components/tracks/useTrackHover.d.ts +22 -0
- package/dist/components/tracks/useTrackHover.js +30 -0
- package/dist/components/tracks/useTrackHover.js.map +1 -0
- package/dist/components/tree/CladeLabels.d.ts +12 -0
- package/dist/components/tree/CladeLabels.js +48 -0
- package/dist/components/tree/CladeLabels.js.map +1 -0
- package/dist/components/tree/TreeBranchMenu.js +1 -1
- package/dist/components/tree/TreeBranchMenu.js.map +1 -1
- package/dist/components/tree/TreeCanvas.js +5 -4
- package/dist/components/tree/TreeCanvas.js.map +1 -1
- package/dist/components/tree/TreeCanvasBlock.js +4 -21
- package/dist/components/tree/TreeCanvasBlock.js.map +1 -1
- package/dist/components/tree/TreeNodeMenu.js +1 -1
- package/dist/components/tree/TreeNodeMenu.js.map +1 -1
- package/dist/components/tree/TreeOverview.d.ts +14 -0
- package/dist/components/tree/TreeOverview.js +75 -0
- package/dist/components/tree/TreeOverview.js.map +1 -0
- package/dist/components/tree/TreeRuler.js +9 -13
- package/dist/components/tree/TreeRuler.js.map +1 -1
- package/dist/components/tree/cladeBrackets.d.ts +25 -0
- package/dist/components/tree/cladeBrackets.js +51 -0
- package/dist/components/tree/cladeBrackets.js.map +1 -0
- package/dist/components/tree/dialogs/TreeNodeInfoDialog.js +2 -2
- package/dist/components/tree/dialogs/TreeNodeInfoDialog.js.map +1 -1
- package/dist/components/tree/renderTreeCanvas.js +160 -25
- package/dist/components/tree/renderTreeCanvas.js.map +1 -1
- package/dist/components/tree/renderTreeOverview.d.ts +52 -0
- package/dist/components/tree/renderTreeOverview.js +138 -0
- package/dist/components/tree/renderTreeOverview.js.map +1 -0
- package/dist/components/tree/useTreeHover.js +2 -4
- package/dist/components/tree/useTreeHover.js.map +1 -1
- package/dist/constants.d.ts +16 -0
- package/dist/constants.js +52 -22
- package/dist/constants.js.map +1 -1
- package/dist/createPaletteMap.d.ts +7 -6
- package/dist/createPaletteMap.js +10 -9
- package/dist/createPaletteMap.js.map +1 -1
- package/dist/element.d.ts +13 -0
- package/dist/element.js +269 -0
- package/dist/element.js.map +1 -0
- package/dist/featureFields.d.ts +11 -0
- package/dist/featureFields.js +17 -0
- package/dist/featureFields.js.map +1 -0
- package/dist/flatToTree.js +1 -2
- package/dist/flatToTree.js.map +1 -1
- package/dist/ggplotPalettes.d.ts +10 -0
- package/dist/ggplotPalettes.js +58 -0
- package/dist/ggplotPalettes.js.map +1 -1
- package/dist/hierarchy.d.ts +27 -0
- package/dist/hierarchy.js +66 -9
- package/dist/hierarchy.js.map +1 -1
- package/dist/index.d.ts +9 -1
- package/dist/index.js +5 -3
- package/dist/index.js.map +1 -1
- package/dist/model/DataModel.js +2 -5
- package/dist/model/DataModel.js.map +1 -1
- package/dist/model/msaModel.d.ts +3 -2
- package/dist/model/msaModel.js +3 -2
- package/dist/model/msaModel.js.map +1 -1
- package/dist/model/treeModel.d.ts +30 -0
- package/dist/model/treeModel.js +37 -1
- package/dist/model/treeModel.js.map +1 -1
- package/dist/model.d.ts +549 -294
- package/dist/model.js +1412 -621
- package/dist/model.js.map +1 -1
- package/dist/mount.d.ts +11 -0
- package/dist/mount.js +22 -0
- package/dist/mount.js.map +1 -0
- package/dist/neighborJoining.js +8 -32
- package/dist/neighborJoining.js.map +1 -1
- package/dist/renderToStaticMarkup.d.ts +10 -19
- package/dist/renderToStaticMarkup.js +13 -24
- package/dist/renderToStaticMarkup.js.map +1 -1
- package/dist/renderToSvg.js +180 -56
- package/dist/renderToSvg.js.map +1 -1
- package/dist/rowCoordinateCalculations.d.ts +4 -6
- package/dist/rowCoordinateCalculations.js +4 -6
- package/dist/rowCoordinateCalculations.js.map +1 -1
- package/dist/scales.d.ts +22 -0
- package/dist/scales.js +30 -0
- package/dist/scales.js.map +1 -0
- package/dist/seqPosToGlobalCol.d.ts +2 -3
- package/dist/seqPosToGlobalCol.js +2 -3
- package/dist/seqPosToGlobalCol.js.map +1 -1
- package/dist/sequenceLogo.d.ts +6 -11
- package/dist/sequenceLogo.js +6 -11
- package/dist/sequenceLogo.js.map +1 -1
- package/dist/stripDefault.d.ts +7 -14
- package/dist/stripDefault.js +7 -14
- package/dist/stripDefault.js.map +1 -1
- package/dist/svgTestUtil.d.ts +186 -70
- package/dist/types.d.ts +221 -21
- package/dist/umd.d.ts +2 -0
- package/dist/umd.js +4 -2
- package/dist/umd.js.map +1 -1
- package/dist/useCanvasAutorun.d.ts +5 -10
- package/dist/useCanvasAutorun.js +5 -10
- package/dist/useCanvasAutorun.js.map +1 -1
- package/dist/useMsaSvgFigure.d.ts +20 -0
- package/dist/useMsaSvgFigure.js +46 -0
- package/dist/useMsaSvgFigure.js.map +1 -0
- package/dist/useWheelScroll.js +0 -4
- package/dist/useWheelScroll.js.map +1 -1
- package/dist/util.d.ts +5 -6
- package/dist/util.js +13 -6
- package/dist/util.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +19 -12
- package/src/calculateBlocks.ts +5 -3
- package/src/colorSchemes.ts +1 -2
- package/src/columnStats.ts +58 -0
- package/src/components/DragHandle.tsx +18 -7
- package/src/components/Loading.tsx +4 -36
- package/src/components/MSAView.tsx +19 -5
- package/src/components/MSAViewer.tsx +240 -28
- package/src/components/PortalTooltip.tsx +47 -0
- package/src/components/ResizeHandles.tsx +17 -32
- package/src/components/SequenceTextArea.tsx +3 -4
- package/src/components/Track.tsx +57 -19
- package/src/components/dialogs/AboutDialog.tsx +35 -6
- package/src/components/dialogs/AnnotationFileDialog.tsx +10 -1
- package/src/components/dialogs/ExportSVGDialog.tsx +8 -3
- package/src/components/dialogs/FeatureDialog.tsx +11 -3
- package/src/components/dialogs/TrackInfoDialog.tsx +1 -1
- package/src/components/header/GappynessSlider.tsx +6 -11
- package/src/components/header/Header.tsx +7 -1
- package/src/components/header/LoadWarnings.tsx +11 -25
- package/src/components/header/ScrollZoomIcons.tsx +52 -0
- package/src/components/header/TreeSettingsMenu.tsx +1 -3
- package/src/components/header/UnshareableDataWarning.tsx +2 -4
- package/src/components/header/ZoomControls.tsx +74 -14
- package/src/components/header/getAnnotationsMenu.ts +3 -6
- package/src/components/header/settingsMenuItems.ts +13 -8
- package/src/components/import/ImportForm.tsx +3 -5
- package/src/components/import/ImportFormExamples.tsx +2 -2
- package/src/components/import/util.ts +1 -2
- package/src/components/minimap/Minimap.tsx +1 -2
- package/src/components/msa/AnnotationLegend.tsx +48 -38
- package/src/components/msa/MSACanvas.tsx +3 -8
- package/src/components/msa/MSACanvasBlock.tsx +13 -16
- package/src/components/msa/MSAMouseoverCanvas.tsx +2 -1
- package/src/components/msa/domainBandCursor.ts +7 -11
- package/src/components/msa/drawFeatureSpans.ts +205 -0
- package/src/components/msa/legendRows.ts +24 -0
- package/src/components/msa/msaRaster.ts +30 -39
- package/src/components/msa/packDomainLanes.ts +36 -0
- package/src/components/msa/renderBoxFeatureCanvasBlock.ts +67 -123
- package/src/components/msa/renderHighlights.ts +53 -20
- package/src/components/msa/renderMSABlock.ts +14 -11
- package/src/components/msa/tileColor.ts +4 -7
- package/src/components/msa/useMsaBlockMouse.ts +6 -6
- package/src/components/rowpanels/RowPanelBlock.tsx +139 -0
- package/src/components/rowpanels/RowPanelHeaders.tsx +57 -0
- package/src/components/rowpanels/RowPanels.tsx +77 -0
- package/src/components/rowpanels/headerLayout.ts +5 -0
- package/src/components/rowpanels/renderFeaturePanel.ts +66 -0
- package/src/components/rowpanels/renderRowPanel.ts +41 -0
- package/src/components/rowpanels/renderStrip.ts +46 -0
- package/src/components/tracks/TrackBlocks.tsx +3 -5
- package/src/components/tracks/TrackTooltipContent.tsx +156 -0
- package/src/components/tracks/drawTracks.ts +25 -50
- package/src/components/tracks/useTrackHover.ts +42 -0
- package/src/components/tree/CladeLabels.tsx +77 -0
- package/src/components/tree/TreeBranchMenu.tsx +1 -2
- package/src/components/tree/TreeCanvas.tsx +2 -3
- package/src/components/tree/TreeCanvasBlock.tsx +8 -32
- package/src/components/tree/TreeNodeMenu.tsx +1 -2
- package/src/components/tree/TreeOverview.tsx +106 -0
- package/src/components/tree/TreeRuler.tsx +11 -22
- package/src/components/tree/cladeBrackets.ts +73 -0
- package/src/components/tree/dialogs/TreeNodeInfoDialog.tsx +2 -2
- package/src/components/tree/renderTreeCanvas.ts +242 -21
- package/src/components/tree/renderTreeOverview.ts +212 -0
- package/src/components/tree/useTreeHover.ts +2 -4
- package/src/constants.ts +61 -22
- package/src/createPaletteMap.ts +10 -9
- package/src/element.ts +321 -0
- package/src/featureFields.ts +19 -0
- package/src/flatToTree.ts +1 -2
- package/src/ggplotPalettes.ts +60 -0
- package/src/hierarchy.ts +77 -9
- package/src/index.ts +31 -7
- package/src/model/DataModel.ts +2 -5
- package/src/model/msaModel.ts +3 -2
- package/src/model/treeModel.ts +42 -0
- package/src/model.ts +1677 -643
- package/src/mount.tsx +32 -0
- package/src/neighborJoining.ts +8 -32
- package/src/renderToStaticMarkup.ts +13 -24
- package/src/renderToSvg.tsx +335 -68
- package/src/rowCoordinateCalculations.ts +4 -6
- package/src/scales.ts +47 -0
- package/src/seqPosToGlobalCol.ts +2 -3
- package/src/sequenceLogo.ts +6 -11
- package/src/stripDefault.ts +7 -14
- package/src/types.ts +260 -45
- package/src/umd.ts +4 -2
- package/src/useCanvasAutorun.ts +5 -10
- package/src/useMsaSvgFigure.ts +72 -0
- package/src/useWheelScroll.ts +0 -4
- package/src/util.ts +15 -6
- package/src/version.ts +1 -1
- package/dist/components/msa/ColumnStats.js +0 -42
- package/dist/components/msa/ColumnStats.js.map +0 -1
- package/src/components/msa/ColumnStats.tsx +0 -54
package/dist/constants.js
CHANGED
|
@@ -5,21 +5,21 @@ export const defaultHeight = 550;
|
|
|
5
5
|
export const defaultScrollX = 0;
|
|
6
6
|
export const defaultScrollY = 0;
|
|
7
7
|
export const defaultCurrentAlignment = 0;
|
|
8
|
-
//
|
|
9
|
-
//
|
|
10
|
-
// the "no" is stored, a shared link with the overlay hidden reopens hidden, and
|
|
11
|
-
// one that never mentions it opens showing whatever annotations it carries.
|
|
8
|
+
// Only a hidden overlay is stored, so a link that never mentions it opens
|
|
9
|
+
// showing its annotations.
|
|
12
10
|
export const defaultShowDomains = true;
|
|
13
11
|
export const defaultShowDomainLegend = true;
|
|
14
12
|
export const defaultHideGaps = true;
|
|
15
13
|
export const defaultAllowedGappyness = 100;
|
|
16
14
|
export const defaultSubFeatureRows = false;
|
|
17
|
-
//
|
|
15
|
+
// height of one sub-row when subFeatureRows is on, unless the row has more
|
|
16
|
+
// lanes than fit at this height (see renderBoxFeatureCanvasBlock)
|
|
18
17
|
export const subFeatureRowHeight = 4;
|
|
19
|
-
//
|
|
20
|
-
|
|
21
|
-
//
|
|
22
|
-
//
|
|
18
|
+
// height of the bar the overlay draws under a row in letter-color mode
|
|
19
|
+
export const domainUnderlineHeight = 3;
|
|
20
|
+
// Feature types that are ordinal segments of one transcript. The overlay
|
|
21
|
+
// alternates two shades across them and labels them by number, where a domain
|
|
22
|
+
// type gets its own hue and legend row.
|
|
23
23
|
export const segmentFeatureTypes = new Set([
|
|
24
24
|
'exon',
|
|
25
25
|
'CDS',
|
|
@@ -32,11 +32,20 @@ export const segmentFeatureTypes = new Set([
|
|
|
32
32
|
export const segmentShades = ['#9fb6d4', '#d4dcea'];
|
|
33
33
|
export const defaultDrawMsaLetters = true;
|
|
34
34
|
export const defaultScrollZoom = false;
|
|
35
|
+
// Which cell dimensions a wheel zoom scales. 'horizontal' holds the row height,
|
|
36
|
+
// which fixes the label and letter font size while the columns compress.
|
|
37
|
+
// 'vertical' does the reverse.
|
|
38
|
+
export const scrollZoomAxes = ['both', 'horizontal', 'vertical'];
|
|
39
|
+
export const defaultScrollZoomAxis = 'both';
|
|
35
40
|
// Cell size floors for drawing residue letters and tree labels. Below these a
|
|
36
|
-
// 500px block holds thousands of glyphs, and fillText
|
|
37
|
-
//
|
|
41
|
+
// 500px block holds thousands of glyphs, and fillText dominates every zoom
|
|
42
|
+
// frame. A sprite atlas measured slower.
|
|
38
43
|
export const minLetterRowHeight = 8;
|
|
39
44
|
export const minLetterColWidth = 5;
|
|
45
|
+
// A feature span draws its label at two pixels under its height, capped at 11,
|
|
46
|
+
// so a span shorter than this holds no readable text: an underline bar, a
|
|
47
|
+
// sub-row band or a features panel over small rows
|
|
48
|
+
export const minFeatureLabelHeight = 9;
|
|
40
49
|
// Tree labels are measured once at this size and scaled to the current font
|
|
41
50
|
// size, so a vertical zoom never re-measures the tree.
|
|
42
51
|
export const labelReferenceFontSize = 16;
|
|
@@ -58,17 +67,38 @@ export const defaultTreeWidth = 300;
|
|
|
58
67
|
export const defaultShowBranchLen = true;
|
|
59
68
|
export const defaultDrawTree = true;
|
|
60
69
|
export const defaultDrawNodeBubbles = true;
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
//
|
|
65
|
-
//
|
|
66
|
-
//
|
|
70
|
+
export const defaultDrawNodeLabels = false;
|
|
71
|
+
export const defaultShowTreeOverview = false;
|
|
72
|
+
export const defaultOverviewHeight = 120;
|
|
73
|
+
// Neighbor joining does not run above this many rows. The distance matrix is
|
|
74
|
+
// O(n^2*L) and the join loop O(n^3), both on the main thread with no progress
|
|
75
|
+
// and no cancel: 400 rows measured 1.5s, 800 rows 10s, and 1600 would be about
|
|
76
|
+
// seventy. See agent-docs/ideas/neighbor-joining-scaling.md.
|
|
67
77
|
export const maxNeighborJoiningRows = 500;
|
|
68
|
-
// The
|
|
69
|
-
//
|
|
70
|
-
//
|
|
71
|
-
|
|
72
|
-
//
|
|
78
|
+
// The opacity a `rowTint` encoding draws its scale's color at, so the residues
|
|
79
|
+
// under the wash stay readable. A color the producer already gave an alpha
|
|
80
|
+
// keeps it.
|
|
81
|
+
export const rowTintAlpha = 0.25;
|
|
82
|
+
// The fill a `clades` record with the `highlight` mark draws behind its rows,
|
|
83
|
+
// and the opacity a producer's own color takes when it carries none.
|
|
84
|
+
export const cladeHighlightColor = '#fff3c4';
|
|
85
|
+
export const cladeHighlightAlpha = 0.6;
|
|
86
|
+
// The largest inline document the snapshot carries. A larger pasted or
|
|
87
|
+
// locally-opened file stays in the live model and out of the snapshot, keeping
|
|
88
|
+
// shared URLs sendable. `unshareableData` warns using the same number.
|
|
73
89
|
export const maxInlineSnapshotBytes = 50_000;
|
|
90
|
+
// Height of the band the `rowPanels` headers draw in, above the strips in the
|
|
91
|
+
// top area beside the tree ruler and the minimap. A panel wider than the band
|
|
92
|
+
// is tall writes its header across, where it has more room.
|
|
93
|
+
export const rowPanelHeaderHeight = 56;
|
|
94
|
+
// Height of the branch-length scale bar above the tree.
|
|
95
|
+
export const treeScaleBarHeight = 22;
|
|
96
|
+
// Width of a `features` row panel that names none, wide enough for a gene
|
|
97
|
+
// neighborhood of a few arrows to read.
|
|
98
|
+
export const defaultFeaturePanelWidth = 200;
|
|
99
|
+
// The alignment's overlay canvas draws the mouseover, the persisted highlights
|
|
100
|
+
// and the row tints over the residues, and the legend key floats above that,
|
|
101
|
+
// so a tint reaching the top right corner leaves the key readable.
|
|
102
|
+
export const msaOverlayZIndex = 1000;
|
|
103
|
+
export const legendZIndex = msaOverlayZIndex + 1;
|
|
74
104
|
//# sourceMappingURL=constants.js.map
|
package/dist/constants.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,sBAAsB;AACtB,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,CAAA;AAClC,MAAM,CAAC,MAAM,eAAe,GAAG,EAAE,CAAA;AACjC,MAAM,CAAC,MAAM,aAAa,GAAG,GAAG,CAAA;AAChC,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAA;AAC/B,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAA;AAC/B,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAA;AACxC,
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Creates a map from keys to colors.
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
2
|
+
* Creates a map from keys to colors. `palette` names the colors to take in
|
|
3
|
+
* order, such as the list a scale asked for by name; without it the keys take
|
|
4
|
+
* the ggplot palette of their own size. Beyond the colors available — a
|
|
5
|
+
* gene-structure overlay with one feature per exon, or nine keys on an
|
|
6
|
+
* eight-color palette — every key gets an evenly spaced HSL hue instead, so no
|
|
7
|
+
* two keys share a color.
|
|
7
8
|
*/
|
|
8
|
-
export declare function createPaletteMap(keys: string[]): {
|
|
9
|
+
export declare function createPaletteMap(keys: string[], palette?: readonly string[]): {
|
|
9
10
|
[k: string]: string;
|
|
10
11
|
};
|
package/dist/createPaletteMap.js
CHANGED
|
@@ -1,17 +1,18 @@
|
|
|
1
1
|
import { colord } from 'colord';
|
|
2
2
|
import palettes from './ggplotPalettes.js';
|
|
3
3
|
/**
|
|
4
|
-
* Creates a map from keys to colors.
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
4
|
+
* Creates a map from keys to colors. `palette` names the colors to take in
|
|
5
|
+
* order, such as the list a scale asked for by name; without it the keys take
|
|
6
|
+
* the ggplot palette of their own size. Beyond the colors available — a
|
|
7
|
+
* gene-structure overlay with one feature per exon, or nine keys on an
|
|
8
|
+
* eight-color palette — every key gets an evenly spaced HSL hue instead, so no
|
|
9
|
+
* two keys share a color.
|
|
9
10
|
*/
|
|
10
|
-
export function createPaletteMap(keys) {
|
|
11
|
+
export function createPaletteMap(keys, palette) {
|
|
11
12
|
const n = keys.length;
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
return Object.fromEntries(keys.map((key, i) => [key,
|
|
13
|
+
const colors = palette ?? palettes[n - 1];
|
|
14
|
+
if (colors && n <= colors.length) {
|
|
15
|
+
return Object.fromEntries(keys.map((key, i) => [key, colors[i]]));
|
|
15
16
|
}
|
|
16
17
|
return Object.fromEntries(keys.map((key, i) => [
|
|
17
18
|
key,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createPaletteMap.js","sourceRoot":"","sources":["../src/createPaletteMap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAE/B,OAAO,QAAQ,MAAM,qBAAqB,CAAA;AAE1C
|
|
1
|
+
{"version":3,"file":"createPaletteMap.js","sourceRoot":"","sources":["../src/createPaletteMap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAE/B,OAAO,QAAQ,MAAM,qBAAqB,CAAA;AAE1C;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAc,EAAE,OAA2B;IAC1E,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAA;IACrB,MAAM,MAAM,GAAG,OAAO,IAAI,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;IACzC,IAAI,MAAM,IAAI,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QACjC,OAAO,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,CAAA;IACpE,CAAC;IACD,OAAO,MAAM,CAAC,WAAW,CACvB,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QACnB,GAAG;QACH,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE;KACnD,CAAC,CACH,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Registers a custom element that renders MSAViewer, for pages with no React.
|
|
3
|
+
* Attributes: msa-url, tree-url, gff-url, color-scheme, height, hide-header,
|
|
4
|
+
* theme, tree-area-width and reference-row. Properties: msa, tree and gff text, highlights,
|
|
5
|
+
* columnTracks and residueMappings. Events: cell-hover, cell-click and
|
|
6
|
+
* viewport-change, each with the MSAViewer callback's value as detail.
|
|
7
|
+
*
|
|
8
|
+
* Inside a <nightingale-manager>, the element registers with it and speaks its
|
|
9
|
+
* protocol: it follows the display-start, display-end and highlight attributes
|
|
10
|
+
* the manager writes, and reports its own range and hovered residue as change
|
|
11
|
+
* events. Positions are residues of reference-row, or columns without one.
|
|
12
|
+
*/
|
|
13
|
+
export declare function defineMsaElement(tagName?: string): CustomElementConstructor;
|
package/dist/element.js
ADDED
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
import { when } from 'mobx';
|
|
2
|
+
import { mount } from './mount.js';
|
|
3
|
+
const ownAttributes = [
|
|
4
|
+
'msa-url',
|
|
5
|
+
'tree-url',
|
|
6
|
+
'gff-url',
|
|
7
|
+
'color-scheme',
|
|
8
|
+
'height',
|
|
9
|
+
'hide-header',
|
|
10
|
+
'theme',
|
|
11
|
+
'reference-row',
|
|
12
|
+
'tree-area-width',
|
|
13
|
+
];
|
|
14
|
+
// the attributes a <nightingale-manager> writes on the elements it holds
|
|
15
|
+
const nightingaleAttributes = ['display-start', 'display-end', 'highlight'];
|
|
16
|
+
function location(uri) {
|
|
17
|
+
return uri ? { uri, locationType: 'UriLocation' } : undefined;
|
|
18
|
+
}
|
|
19
|
+
function numberAttribute(value) {
|
|
20
|
+
const n = value ? Number(value) : Number.NaN;
|
|
21
|
+
return Number.isFinite(n) ? n : undefined;
|
|
22
|
+
}
|
|
23
|
+
// Nightingale writes a highlight as "start:end,start:end", 1-based inclusive
|
|
24
|
+
function parseHighlight(value, row) {
|
|
25
|
+
return (value ?? '').split(',').flatMap(span => {
|
|
26
|
+
const [start, end] = span.split(':').map(numberAttribute);
|
|
27
|
+
return start === undefined ? [] : [{ row, start, end: end ?? start }];
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
function residueAtColumn(model, row, column) {
|
|
31
|
+
const visible = model.globalColToVisibleCol(column - 1);
|
|
32
|
+
return visible === undefined
|
|
33
|
+
? undefined
|
|
34
|
+
: model.visibleColToSeqPosOneBased(row, visible);
|
|
35
|
+
}
|
|
36
|
+
// the first and last residues of `row` inside the viewport's columns
|
|
37
|
+
function residueRange(model, row, viewport) {
|
|
38
|
+
let start;
|
|
39
|
+
let end;
|
|
40
|
+
for (let c = viewport.startColumn; c <= viewport.endColumn && !start; c++) {
|
|
41
|
+
start = residueAtColumn(model, row, c);
|
|
42
|
+
}
|
|
43
|
+
for (let c = viewport.endColumn; c >= viewport.startColumn && !end; c--) {
|
|
44
|
+
end = residueAtColumn(model, row, c);
|
|
45
|
+
}
|
|
46
|
+
return start && end ? { start, end } : undefined;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Registers a custom element that renders MSAViewer, for pages with no React.
|
|
50
|
+
* Attributes: msa-url, tree-url, gff-url, color-scheme, height, hide-header,
|
|
51
|
+
* theme, tree-area-width and reference-row. Properties: msa, tree and gff text, highlights,
|
|
52
|
+
* columnTracks and residueMappings. Events: cell-hover, cell-click and
|
|
53
|
+
* viewport-change, each with the MSAViewer callback's value as detail.
|
|
54
|
+
*
|
|
55
|
+
* Inside a <nightingale-manager>, the element registers with it and speaks its
|
|
56
|
+
* protocol: it follows the display-start, display-end and highlight attributes
|
|
57
|
+
* the manager writes, and reports its own range and hovered residue as change
|
|
58
|
+
* events. Positions are residues of reference-row, or columns without one.
|
|
59
|
+
*/
|
|
60
|
+
export function defineMsaElement(tagName = 'jbrowse-msa') {
|
|
61
|
+
const existing = customElements.get(tagName);
|
|
62
|
+
if (existing) {
|
|
63
|
+
return existing;
|
|
64
|
+
}
|
|
65
|
+
class MsaElement extends HTMLElement {
|
|
66
|
+
static observedAttributes = [...ownAttributes, ...nightingaleAttributes];
|
|
67
|
+
#viewer;
|
|
68
|
+
#model;
|
|
69
|
+
#manager;
|
|
70
|
+
#cancelRange;
|
|
71
|
+
#rangePending = false;
|
|
72
|
+
#reported;
|
|
73
|
+
#data = {};
|
|
74
|
+
get msa() {
|
|
75
|
+
return this.#data.msa;
|
|
76
|
+
}
|
|
77
|
+
set msa(value) {
|
|
78
|
+
this.#setData({ msa: value });
|
|
79
|
+
}
|
|
80
|
+
get tree() {
|
|
81
|
+
return this.#data.tree;
|
|
82
|
+
}
|
|
83
|
+
set tree(value) {
|
|
84
|
+
this.#setData({ tree: value });
|
|
85
|
+
}
|
|
86
|
+
get gff() {
|
|
87
|
+
return this.#data.gff;
|
|
88
|
+
}
|
|
89
|
+
set gff(value) {
|
|
90
|
+
this.#setData({ gff: value });
|
|
91
|
+
}
|
|
92
|
+
get highlights() {
|
|
93
|
+
return this.#data.highlights;
|
|
94
|
+
}
|
|
95
|
+
set highlights(value) {
|
|
96
|
+
this.#setData({ highlights: value });
|
|
97
|
+
}
|
|
98
|
+
get columnTracks() {
|
|
99
|
+
return this.#data.columnTracks;
|
|
100
|
+
}
|
|
101
|
+
set columnTracks(value) {
|
|
102
|
+
this.#setData({ columnTracks: value });
|
|
103
|
+
}
|
|
104
|
+
get residueMappings() {
|
|
105
|
+
return this.#data.residueMappings;
|
|
106
|
+
}
|
|
107
|
+
set residueMappings(value) {
|
|
108
|
+
this.#setData({ residueMappings: value });
|
|
109
|
+
}
|
|
110
|
+
get #referenceRow() {
|
|
111
|
+
return this.getAttribute('reference-row') ?? undefined;
|
|
112
|
+
}
|
|
113
|
+
#setData(data) {
|
|
114
|
+
this.#data = { ...this.#data, ...data };
|
|
115
|
+
this.#viewer?.update(this.#props());
|
|
116
|
+
}
|
|
117
|
+
#props() {
|
|
118
|
+
const theme = this.getAttribute('theme');
|
|
119
|
+
return {
|
|
120
|
+
...this.#data,
|
|
121
|
+
msaFilehandle: location(this.getAttribute('msa-url')),
|
|
122
|
+
treeFilehandle: location(this.getAttribute('tree-url')),
|
|
123
|
+
gffFilehandle: location(this.getAttribute('gff-url')),
|
|
124
|
+
colorScheme: this.getAttribute('color-scheme') ?? undefined,
|
|
125
|
+
height: numberAttribute(this.getAttribute('height')),
|
|
126
|
+
treeAreaWidth: numberAttribute(this.getAttribute('tree-area-width')),
|
|
127
|
+
hideHeader: this.hasAttribute('hide-header'),
|
|
128
|
+
theme: theme === 'dark' ? 'dark' : 'light',
|
|
129
|
+
onCellHover: cell => {
|
|
130
|
+
this.#emit('cell-hover', cell);
|
|
131
|
+
this.#reportHover(cell);
|
|
132
|
+
},
|
|
133
|
+
onCellClick: cell => {
|
|
134
|
+
this.#emit('cell-click', cell);
|
|
135
|
+
},
|
|
136
|
+
onViewportChange: viewport => {
|
|
137
|
+
this.#emit('viewport-change', viewport);
|
|
138
|
+
this.#reportRange(viewport);
|
|
139
|
+
},
|
|
140
|
+
onModel: model => {
|
|
141
|
+
this.#model = model;
|
|
142
|
+
this.#followRange();
|
|
143
|
+
this.#followHighlight();
|
|
144
|
+
},
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
#emit(type, detail) {
|
|
148
|
+
this.dispatchEvent(new CustomEvent(type, { detail }));
|
|
149
|
+
}
|
|
150
|
+
#nightingaleChange(detail) {
|
|
151
|
+
if (this.#manager) {
|
|
152
|
+
this.dispatchEvent(new CustomEvent('change', {
|
|
153
|
+
detail,
|
|
154
|
+
bubbles: true,
|
|
155
|
+
cancelable: true,
|
|
156
|
+
}));
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
#reportHover(cell) {
|
|
160
|
+
const model = this.#model;
|
|
161
|
+
const row = this.#referenceRow;
|
|
162
|
+
const position = cell && model && row
|
|
163
|
+
? residueAtColumn(model, row, cell.column)
|
|
164
|
+
: cell?.column;
|
|
165
|
+
this.#nightingaleChange({
|
|
166
|
+
type: 'highlight',
|
|
167
|
+
value: position === undefined ? null : `${position}:${position}`,
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
#reportRange(viewport) {
|
|
171
|
+
const model = this.#model;
|
|
172
|
+
const row = this.#referenceRow;
|
|
173
|
+
if (!viewport || !model) {
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
176
|
+
const range = row
|
|
177
|
+
? residueRange(model, row, viewport)
|
|
178
|
+
: { start: viewport.startColumn, end: viewport.endColumn };
|
|
179
|
+
const shownStart = numberAttribute(this.getAttribute('display-start'));
|
|
180
|
+
const shownEnd = numberAttribute(this.getAttribute('display-end'));
|
|
181
|
+
// a range the manager just wrote comes back within a column of itself,
|
|
182
|
+
// since the viewer shows whole columns
|
|
183
|
+
const echo = range &&
|
|
184
|
+
shownStart !== undefined &&
|
|
185
|
+
shownEnd !== undefined &&
|
|
186
|
+
Math.abs(range.start - shownStart) <= 1 &&
|
|
187
|
+
Math.abs(range.end - shownEnd) <= 1;
|
|
188
|
+
if (range && !echo) {
|
|
189
|
+
this.#reported = range;
|
|
190
|
+
this.#nightingaleChange({
|
|
191
|
+
'display-start': range.start,
|
|
192
|
+
'display-end': range.end,
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
#followRange() {
|
|
197
|
+
const model = this.#model;
|
|
198
|
+
const start = numberAttribute(this.getAttribute('display-start'));
|
|
199
|
+
const end = numberAttribute(this.getAttribute('display-end'));
|
|
200
|
+
const reported = this.#reported;
|
|
201
|
+
// the manager writes the range this element reported back onto it, and
|
|
202
|
+
// zooming to it again would snap the reader's own zoom to whole residues
|
|
203
|
+
if (reported && reported.start === start && reported.end === end) {
|
|
204
|
+
return;
|
|
205
|
+
}
|
|
206
|
+
this.#cancelRange?.();
|
|
207
|
+
if (model && start !== undefined && end !== undefined) {
|
|
208
|
+
const row = this.#referenceRow;
|
|
209
|
+
this.#cancelRange = when(() => model.viewInitialized && model.numColumns > 0, () => {
|
|
210
|
+
model.zoomToRegion({ row, start, end });
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
#followHighlight() {
|
|
215
|
+
const spans = parseHighlight(this.getAttribute('highlight'), this.#referenceRow);
|
|
216
|
+
if (spans.length) {
|
|
217
|
+
this.#model?.applyHighlight('nightingale', spans);
|
|
218
|
+
}
|
|
219
|
+
else {
|
|
220
|
+
this.#model?.clearHighlight('nightingale');
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
connectedCallback() {
|
|
224
|
+
if (!this.style.display) {
|
|
225
|
+
this.style.display = 'block';
|
|
226
|
+
}
|
|
227
|
+
this.#viewer = mount(this, this.#props());
|
|
228
|
+
const manager = this.closest('nightingale-manager');
|
|
229
|
+
if (manager) {
|
|
230
|
+
void customElements.whenDefined('nightingale-manager').then(() => {
|
|
231
|
+
if (this.isConnected) {
|
|
232
|
+
this.#manager = manager;
|
|
233
|
+
manager.register(this);
|
|
234
|
+
}
|
|
235
|
+
});
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
disconnectedCallback() {
|
|
239
|
+
this.#manager?.unregister(this);
|
|
240
|
+
this.#manager = undefined;
|
|
241
|
+
this.#cancelRange?.();
|
|
242
|
+
this.#viewer?.destroy();
|
|
243
|
+
this.#viewer = undefined;
|
|
244
|
+
this.#model = undefined;
|
|
245
|
+
}
|
|
246
|
+
attributeChangedCallback(name) {
|
|
247
|
+
if (name === 'display-start' || name === 'display-end') {
|
|
248
|
+
// the manager writes the two attributes one after the other, and a
|
|
249
|
+
// zoom between them reports a range that overwrites the second
|
|
250
|
+
if (!this.#rangePending) {
|
|
251
|
+
this.#rangePending = true;
|
|
252
|
+
queueMicrotask(() => {
|
|
253
|
+
this.#rangePending = false;
|
|
254
|
+
this.#followRange();
|
|
255
|
+
});
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
else if (name === 'highlight') {
|
|
259
|
+
this.#followHighlight();
|
|
260
|
+
}
|
|
261
|
+
else {
|
|
262
|
+
this.#viewer?.update(this.#props());
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
customElements.define(tagName, MsaElement);
|
|
267
|
+
return MsaElement;
|
|
268
|
+
}
|
|
269
|
+
//# sourceMappingURL=element.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"element.js","sourceRoot":"","sources":["../src/element.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAE3B,OAAO,EAAE,KAAK,EAAE,MAAM,YAAa,CAAA;AAuBnC,MAAM,aAAa,GAAG;IACpB,SAAS;IACT,UAAU;IACV,SAAS;IACT,cAAc;IACd,QAAQ;IACR,aAAa;IACb,OAAO;IACP,eAAe;IACf,iBAAiB;CACT,CAAA;AAEV,yEAAyE;AACzE,MAAM,qBAAqB,GAAG,CAAC,eAAe,EAAE,aAAa,EAAE,WAAW,CAAC,CAAA;AAE3E,SAAS,QAAQ,CAAC,GAAkB;IAClC,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,YAAY,EAAE,aAAsB,EAAE,CAAC,CAAC,CAAC,SAAS,CAAA;AACxE,CAAC;AAED,SAAS,eAAe,CAAC,KAAgC;IACvD,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAA;IAC5C,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;AAC3C,CAAC;AAED,6EAA6E;AAC7E,SAAS,cAAc,CAAC,KAAoB,EAAE,GAAY;IACxD,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QAC7C,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,CAAA;QACzD,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,IAAI,KAAK,EAAE,CAAC,CAAA;IACvE,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,KAAmB,EAAE,GAAW,EAAE,MAAc;IACvE,MAAM,OAAO,GAAG,KAAK,CAAC,qBAAqB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IACvD,OAAO,OAAO,KAAK,SAAS;QAC1B,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,KAAK,CAAC,0BAA0B,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;AACpD,CAAC;AAED,qEAAqE;AACrE,SAAS,YAAY,CAAC,KAAmB,EAAE,GAAW,EAAE,QAAkB;IACxE,IAAI,KAAyB,CAAA;IAC7B,IAAI,GAAuB,CAAA;IAC3B,KAAK,IAAI,CAAC,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC,IAAI,QAAQ,CAAC,SAAS,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;QAC1E,KAAK,GAAG,eAAe,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,CAAA;IACxC,CAAC;IACD,KAAK,IAAI,CAAC,GAAG,QAAQ,CAAC,SAAS,EAAE,CAAC,IAAI,QAAQ,CAAC,WAAW,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QACxE,GAAG,GAAG,eAAe,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,CAAA;IACtC,CAAC;IACD,OAAO,KAAK,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,SAAS,CAAA;AAClD,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAO,GAAG,aAAa;IACtD,MAAM,QAAQ,GAAG,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;IAC5C,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,QAAQ,CAAA;IACjB,CAAC;IAED,MAAM,UAAW,SAAQ,WAAW;QAClC,MAAM,CAAC,kBAAkB,GAAG,CAAC,GAAG,aAAa,EAAE,GAAG,qBAAqB,CAAC,CAAA;QAExE,OAAO,CAAgB;QACvB,MAAM,CAAe;QACrB,QAAQ,CAAqB;QAC7B,YAAY,CAAa;QACzB,aAAa,GAAG,KAAK,CAAA;QACrB,SAAS,CAAiC;QAC1C,KAAK,GAAgB,EAAE,CAAA;QAEvB,IAAI,GAAG;YACL,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAA;QACvB,CAAC;QACD,IAAI,GAAG,CAAC,KAAyB;YAC/B,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAA;QAC/B,CAAC;QACD,IAAI,IAAI;YACN,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAA;QACxB,CAAC;QACD,IAAI,IAAI,CAAC,KAAyB;YAChC,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;QAChC,CAAC;QACD,IAAI,GAAG;YACL,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAA;QACvB,CAAC;QACD,IAAI,GAAG,CAAC,KAAyB;YAC/B,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAA;QAC/B,CAAC;QACD,IAAI,UAAU;YACZ,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAA;QAC9B,CAAC;QACD,IAAI,UAAU,CAAC,KAA8B;YAC3C,IAAI,CAAC,QAAQ,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAA;QACtC,CAAC;QACD,IAAI,YAAY;YACd,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAA;QAChC,CAAC;QACD,IAAI,YAAY,CAAC,KAAoC;YACnD,IAAI,CAAC,QAAQ,CAAC,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,CAAA;QACxC,CAAC;QACD,IAAI,eAAe;YACjB,OAAO,IAAI,CAAC,KAAK,CAAC,eAAe,CAAA;QACnC,CAAC;QACD,IAAI,eAAe,CAAC,KAAmC;YACrD,IAAI,CAAC,QAAQ,CAAC,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC,CAAA;QAC3C,CAAC;QAED,IAAI,aAAa;YACf,OAAO,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,IAAI,SAAS,CAAA;QACxD,CAAC;QAED,QAAQ,CAAC,IAAiB;YACxB,IAAI,CAAC,KAAK,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,GAAG,IAAI,EAAE,CAAA;YACvC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAA;QACrC,CAAC;QAED,MAAM;YACJ,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAA;YACxC,OAAO;gBACL,GAAG,IAAI,CAAC,KAAK;gBACb,aAAa,EAAE,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;gBACrD,cAAc,EAAE,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;gBACvD,aAAa,EAAE,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;gBACrD,WAAW,EAAE,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,IAAI,SAAS;gBAC3D,MAAM,EAAE,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;gBACpD,aAAa,EAAE,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC;gBACpE,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC;gBAC5C,KAAK,EAAE,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO;gBAC1C,WAAW,EAAE,IAAI,CAAC,EAAE;oBAClB,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,IAAI,CAAC,CAAA;oBAC9B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAA;gBACzB,CAAC;gBACD,WAAW,EAAE,IAAI,CAAC,EAAE;oBAClB,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,IAAI,CAAC,CAAA;gBAChC,CAAC;gBACD,gBAAgB,EAAE,QAAQ,CAAC,EAAE;oBAC3B,IAAI,CAAC,KAAK,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAA;oBACvC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAA;gBAC7B,CAAC;gBACD,OAAO,EAAE,KAAK,CAAC,EAAE;oBACf,IAAI,CAAC,MAAM,GAAG,KAAK,CAAA;oBACnB,IAAI,CAAC,YAAY,EAAE,CAAA;oBACnB,IAAI,CAAC,gBAAgB,EAAE,CAAA;gBACzB,CAAC;aACF,CAAA;QACH,CAAC;QAED,KAAK,CAAC,IAAY,EAAE,MAAe;YACjC,IAAI,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,CAAA;QACvD,CAAC;QAED,kBAAkB,CAAC,MAA+B;YAChD,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAClB,IAAI,CAAC,aAAa,CAChB,IAAI,WAAW,CAAC,QAAQ,EAAE;oBACxB,MAAM;oBACN,OAAO,EAAE,IAAI;oBACb,UAAU,EAAE,IAAI;iBACjB,CAAC,CACH,CAAA;YACH,CAAC;QACH,CAAC;QAED,YAAY,CAAC,IAAsB;YACjC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAA;YACzB,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAA;YAC9B,MAAM,QAAQ,GACZ,IAAI,IAAI,KAAK,IAAI,GAAG;gBAClB,CAAC,CAAC,eAAe,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC;gBAC1C,CAAC,CAAC,IAAI,EAAE,MAAM,CAAA;YAClB,IAAI,CAAC,kBAAkB,CAAC;gBACtB,IAAI,EAAE,WAAW;gBACjB,KAAK,EAAE,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,QAAQ,IAAI,QAAQ,EAAE;aACjE,CAAC,CAAA;QACJ,CAAC;QAED,YAAY,CAAC,QAA8B;YACzC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAA;YACzB,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAA;YAC9B,IAAI,CAAC,QAAQ,IAAI,CAAC,KAAK,EAAE,CAAC;gBACxB,OAAM;YACR,CAAC;YACD,MAAM,KAAK,GAAG,GAAG;gBACf,CAAC,CAAC,YAAY,CAAC,KAAK,EAAE,GAAG,EAAE,QAAQ,CAAC;gBACpC,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE,QAAQ,CAAC,SAAS,EAAE,CAAA;YAC5D,MAAM,UAAU,GAAG,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC,CAAA;YACtE,MAAM,QAAQ,GAAG,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC,CAAA;YAClE,uEAAuE;YACvE,uCAAuC;YACvC,MAAM,IAAI,GACR,KAAK;gBACL,UAAU,KAAK,SAAS;gBACxB,QAAQ,KAAK,SAAS;gBACtB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC;gBACvC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAA;YACrC,IAAI,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;gBACnB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAA;gBACtB,IAAI,CAAC,kBAAkB,CAAC;oBACtB,eAAe,EAAE,KAAK,CAAC,KAAK;oBAC5B,aAAa,EAAE,KAAK,CAAC,GAAG;iBACzB,CAAC,CAAA;YACJ,CAAC;QACH,CAAC;QAED,YAAY;YACV,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAA;YACzB,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC,CAAA;YACjE,MAAM,GAAG,GAAG,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC,CAAA;YAC7D,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAA;YAC/B,uEAAuE;YACvE,yEAAyE;YACzE,IAAI,QAAQ,IAAI,QAAQ,CAAC,KAAK,KAAK,KAAK,IAAI,QAAQ,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC;gBACjE,OAAM;YACR,CAAC;YACD,IAAI,CAAC,YAAY,EAAE,EAAE,CAAA;YACrB,IAAI,KAAK,IAAI,KAAK,KAAK,SAAS,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;gBACtD,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAA;gBAC9B,IAAI,CAAC,YAAY,GAAG,IAAI,CACtB,GAAG,EAAE,CAAC,KAAK,CAAC,eAAe,IAAI,KAAK,CAAC,UAAU,GAAG,CAAC,EACnD,GAAG,EAAE;oBACH,KAAK,CAAC,YAAY,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAA;gBACzC,CAAC,CACF,CAAA;YACH,CAAC;QACH,CAAC;QAED,gBAAgB;YACd,MAAM,KAAK,GAAG,cAAc,CAC1B,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,EAC9B,IAAI,CAAC,aAAa,CACnB,CAAA;YACD,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;gBACjB,IAAI,CAAC,MAAM,EAAE,cAAc,CAAC,aAAa,EAAE,KAAK,CAAC,CAAA;YACnD,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,MAAM,EAAE,cAAc,CAAC,aAAa,CAAC,CAAA;YAC5C,CAAC;QACH,CAAC;QAED,iBAAiB;YACf,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;gBACxB,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAA;YAC9B,CAAC;YACD,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAA;YACzC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAqB,qBAAqB,CAAC,CAAA;YACvE,IAAI,OAAO,EAAE,CAAC;gBACZ,KAAK,cAAc,CAAC,WAAW,CAAC,qBAAqB,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE;oBAC/D,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;wBACrB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAA;wBACvB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;oBACxB,CAAC;gBACH,CAAC,CAAC,CAAA;YACJ,CAAC;QACH,CAAC;QAED,oBAAoB;YAClB,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,IAAI,CAAC,CAAA;YAC/B,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAA;YACzB,IAAI,CAAC,YAAY,EAAE,EAAE,CAAA;YACrB,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,CAAA;YACvB,IAAI,CAAC,OAAO,GAAG,SAAS,CAAA;YACxB,IAAI,CAAC,MAAM,GAAG,SAAS,CAAA;QACzB,CAAC;QAED,wBAAwB,CAAC,IAAY;YACnC,IAAI,IAAI,KAAK,eAAe,IAAI,IAAI,KAAK,aAAa,EAAE,CAAC;gBACvD,mEAAmE;gBACnE,+DAA+D;gBAC/D,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;oBACxB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAA;oBACzB,cAAc,CAAC,GAAG,EAAE;wBAClB,IAAI,CAAC,aAAa,GAAG,KAAK,CAAA;wBAC1B,IAAI,CAAC,YAAY,EAAE,CAAA;oBACrB,CAAC,CAAC,CAAA;gBACJ,CAAC;YACH,CAAC;iBAAM,IAAI,IAAI,KAAK,WAAW,EAAE,CAAC;gBAChC,IAAI,CAAC,gBAAgB,EAAE,CAAA;YACzB,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAA;YACrC,CAAC;QACH,CAAC;KACF;IAED,cAAc,CAAC,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,CAAA;IAC1C,OAAO,UAAU,CAAA;AACnB,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Annotation } from './types.ts';
|
|
2
|
+
/**
|
|
3
|
+
* The value a feature gives an encoded field: an Annotation property, else one
|
|
4
|
+
* of the GFF attributes the parser kept.
|
|
5
|
+
*/
|
|
6
|
+
export declare function featureField(annotation: Annotation, field: string): string | undefined;
|
|
7
|
+
/**
|
|
8
|
+
* The name a feature answers to in a transform: its GFF `Name` attribute, else
|
|
9
|
+
* the name the parser gave it.
|
|
10
|
+
*/
|
|
11
|
+
export declare function featureName(annotation: Annotation): string | undefined;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The value a feature gives an encoded field: an Annotation property, else one
|
|
3
|
+
* of the GFF attributes the parser kept.
|
|
4
|
+
*/
|
|
5
|
+
export function featureField(annotation, field) {
|
|
6
|
+
const own = annotation[field];
|
|
7
|
+
const value = own ?? annotation.attributes?.[field];
|
|
8
|
+
return typeof value === 'string' ? value : undefined;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* The name a feature answers to in a transform: its GFF `Name` attribute, else
|
|
12
|
+
* the name the parser gave it.
|
|
13
|
+
*/
|
|
14
|
+
export function featureName(annotation) {
|
|
15
|
+
return featureField(annotation, 'Name') ?? featureField(annotation, 'name');
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=featureFields.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"featureFields.js","sourceRoot":"","sources":["../src/featureFields.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,UAAsB,EAAE,KAAa;IAChE,MAAM,GAAG,GAAI,UAAiD,CAAC,KAAK,CAAC,CAAA;IACrE,MAAM,KAAK,GAAG,GAAG,IAAI,UAAU,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,CAAA;IACnD,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAA;AACtD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,UAAsB;IAChD,OAAO,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,IAAI,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;AAC7E,CAAC"}
|
package/dist/flatToTree.js
CHANGED
|
@@ -5,8 +5,7 @@ export function flatToTree(items) {
|
|
|
5
5
|
item.id,
|
|
6
6
|
{
|
|
7
7
|
id: `${item.id}`,
|
|
8
|
-
//
|
|
9
|
-
// node id would render a tree of bare numbers
|
|
8
|
+
// NCBI's tree viewer shows the label
|
|
10
9
|
name: item.label || `${item.id}`,
|
|
11
10
|
...(length !== undefined && Number.isFinite(length)
|
|
12
11
|
? { length }
|
package/dist/flatToTree.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flatToTree.js","sourceRoot":"","sources":["../src/flatToTree.ts"],"names":[],"mappings":"AAgBA,MAAM,UAAU,UAAU,CAAC,KAAiB;IAC1C,MAAM,OAAO,GAAG,IAAI,GAAG,CACrB,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;QACf,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACtE,OAAO;YACL,IAAI,CAAC,EAAE;YACP;gBACE,EAAE,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE;gBAChB,
|
|
1
|
+
{"version":3,"file":"flatToTree.js","sourceRoot":"","sources":["../src/flatToTree.ts"],"names":[],"mappings":"AAgBA,MAAM,UAAU,UAAU,CAAC,KAAiB;IAC1C,MAAM,OAAO,GAAG,IAAI,GAAG,CACrB,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;QACf,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACtE,OAAO;YACL,IAAI,CAAC,EAAE;YACP;gBACE,EAAE,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE;gBAChB,qCAAqC;gBACrC,IAAI,EAAE,IAAI,CAAC,KAAK,IAAI,GAAG,IAAI,CAAC,EAAE,EAAE;gBAChC,GAAG,CAAC,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;oBACjD,CAAC,CAAC,EAAE,MAAM,EAAE;oBACZ,CAAC,CAAC,EAAE,CAAC;gBACP,QAAQ,EAAE,EAAgB;aAC3B;SACF,CAAA;IACH,CAAC,CAAC,CACH,CAAA;IAED,IAAI,IAA0B,CAAA;IAC9B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAE,CAAA;QAClC,MAAM,MAAM,GACV,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;QAClE,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC5B,CAAC;aAAM,CAAC;YACN,IAAI,KAAK,IAAI,CAAA;QACf,CAAC;IACH,CAAC;IAED,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,2EAA2E;QAC3E,2EAA2E;QAC3E,qEAAqE;QACrE,MAAM,IAAI,KAAK,CACb,sGAAsG,CACvG,CAAA;IACH,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC"}
|
package/dist/ggplotPalettes.d.ts
CHANGED
|
@@ -1,2 +1,12 @@
|
|
|
1
1
|
declare const palettes: string[][];
|
|
2
2
|
export default palettes;
|
|
3
|
+
/**
|
|
4
|
+
* Fixed categorical palettes a scale names. `ggplot` is not one of them: it is
|
|
5
|
+
* the ramp above, which picks its colors from the number of keys.
|
|
6
|
+
*/
|
|
7
|
+
export declare const namedPalettes: Record<string, readonly string[]>;
|
|
8
|
+
/**
|
|
9
|
+
* The colors a palette name asks for. `ggplot`, an unknown name, and no name at
|
|
10
|
+
* all give undefined, which `createPaletteMap` answers with the hue ramp.
|
|
11
|
+
*/
|
|
12
|
+
export declare function paletteNamed(name?: string): readonly string[] | undefined;
|
package/dist/ggplotPalettes.js
CHANGED
|
@@ -18,4 +18,62 @@ const palettes = [
|
|
|
18
18
|
],
|
|
19
19
|
];
|
|
20
20
|
export default palettes;
|
|
21
|
+
/**
|
|
22
|
+
* Fixed categorical palettes a scale names. `ggplot` is not one of them: it is
|
|
23
|
+
* the ramp above, which picks its colors from the number of keys.
|
|
24
|
+
*/
|
|
25
|
+
export const namedPalettes = {
|
|
26
|
+
set1: [
|
|
27
|
+
'#e41a1c',
|
|
28
|
+
'#377eb8',
|
|
29
|
+
'#4daf4a',
|
|
30
|
+
'#984ea3',
|
|
31
|
+
'#ff7f00',
|
|
32
|
+
'#ffff33',
|
|
33
|
+
'#a65628',
|
|
34
|
+
'#f781bf',
|
|
35
|
+
'#999999',
|
|
36
|
+
],
|
|
37
|
+
dark2: [
|
|
38
|
+
'#1b9e77',
|
|
39
|
+
'#d95f02',
|
|
40
|
+
'#7570b3',
|
|
41
|
+
'#e7298a',
|
|
42
|
+
'#66a61e',
|
|
43
|
+
'#e6ab02',
|
|
44
|
+
'#a6761d',
|
|
45
|
+
'#666666',
|
|
46
|
+
],
|
|
47
|
+
// Okabe-Ito, which stays distinguishable under the common forms of color
|
|
48
|
+
// blindness
|
|
49
|
+
okabeito: [
|
|
50
|
+
'#e69f00',
|
|
51
|
+
'#56b4e9',
|
|
52
|
+
'#009e73',
|
|
53
|
+
'#f0e442',
|
|
54
|
+
'#0072b2',
|
|
55
|
+
'#d55e00',
|
|
56
|
+
'#cc79a7',
|
|
57
|
+
'#000000',
|
|
58
|
+
],
|
|
59
|
+
tableau: [
|
|
60
|
+
'#4e79a7',
|
|
61
|
+
'#f28e2b',
|
|
62
|
+
'#e15759',
|
|
63
|
+
'#76b7b2',
|
|
64
|
+
'#59a14f',
|
|
65
|
+
'#edc948',
|
|
66
|
+
'#b07aa1',
|
|
67
|
+
'#ff9da7',
|
|
68
|
+
'#9c755f',
|
|
69
|
+
'#bab0ac',
|
|
70
|
+
],
|
|
71
|
+
};
|
|
72
|
+
/**
|
|
73
|
+
* The colors a palette name asks for. `ggplot`, an unknown name, and no name at
|
|
74
|
+
* all give undefined, which `createPaletteMap` answers with the hue ramp.
|
|
75
|
+
*/
|
|
76
|
+
export function paletteNamed(name) {
|
|
77
|
+
return name === undefined ? undefined : namedPalettes[name];
|
|
78
|
+
}
|
|
21
79
|
//# sourceMappingURL=ggplotPalettes.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ggplotPalettes.js","sourceRoot":"","sources":["../src/ggplotPalettes.ts"],"names":[],"mappings":"AAAA,MAAM,QAAQ,GAAG;IACf,CAAC,SAAS,CAAC;IACX,CAAC,SAAS,EAAE,SAAS,CAAC;IACtB,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC;IACjC,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC;IAC5C,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC;IACvD,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC;IAClE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC;IAC7E;QACE,SAAS;QACT,SAAS;QACT,SAAS;QACT,SAAS;QACT,SAAS;QACT,SAAS;QACT,SAAS;QACT,SAAS;KACV;CACF,CAAA;AAED,eAAe,QAAQ,CAAA"}
|
|
1
|
+
{"version":3,"file":"ggplotPalettes.js","sourceRoot":"","sources":["../src/ggplotPalettes.ts"],"names":[],"mappings":"AAAA,MAAM,QAAQ,GAAG;IACf,CAAC,SAAS,CAAC;IACX,CAAC,SAAS,EAAE,SAAS,CAAC;IACtB,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC;IACjC,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC;IAC5C,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC;IACvD,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC;IAClE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC;IAC7E;QACE,SAAS;QACT,SAAS;QACT,SAAS;QACT,SAAS;QACT,SAAS;QACT,SAAS;QACT,SAAS;QACT,SAAS;KACV;CACF,CAAA;AAED,eAAe,QAAQ,CAAA;AAEvB;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAAsC;IAC9D,IAAI,EAAE;QACJ,SAAS;QACT,SAAS;QACT,SAAS;QACT,SAAS;QACT,SAAS;QACT,SAAS;QACT,SAAS;QACT,SAAS;QACT,SAAS;KACV;IACD,KAAK,EAAE;QACL,SAAS;QACT,SAAS;QACT,SAAS;QACT,SAAS;QACT,SAAS;QACT,SAAS;QACT,SAAS;QACT,SAAS;KACV;IACD,yEAAyE;IACzE,YAAY;IACZ,QAAQ,EAAE;QACR,SAAS;QACT,SAAS;QACT,SAAS;QACT,SAAS;QACT,SAAS;QACT,SAAS;QACT,SAAS;QACT,SAAS;KACV;IACD,OAAO,EAAE;QACP,SAAS;QACT,SAAS;QACT,SAAS;QACT,SAAS;QACT,SAAS;QACT,SAAS;QACT,SAAS;QACT,SAAS;QACT,SAAS;QACT,SAAS;KACV;CACF,CAAA;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,IAAa;IACxC,OAAO,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,CAAA;AAC7D,CAAC"}
|