@teselagen/ove 0.0.14 → 0.0.15
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/index.umd.js +164777 -135861
- package/package.json +78 -2
- package/src/AlignmentTool/index.js +16 -0
- package/src/AlignmentView/AlignmentVisibilityTool.js +105 -0
- package/src/AlignmentView/EditTrackNameDialog.js +34 -0
- package/src/AlignmentView/HorizontalPanelDragHandle.js +35 -0
- package/src/AlignmentView/Minimap.js +520 -0
- package/src/AlignmentView/Mismatches.js +134 -0
- package/src/AlignmentView/PairwiseAlignmentView.js +68 -0
- package/src/AlignmentView/PerformantSelectionLayer.js +32 -0
- package/src/AlignmentView/coerceInitialValue.js +7 -0
- package/src/AlignmentView/getGapMap.js +12 -0
- package/src/AlignmentView/getGaps.js +27 -0
- package/src/AlignmentView/getPairwiseOverviewLinearViewOptions.js +38 -0
- package/src/AlignmentView/getTrackFromEvent.js +25 -0
- package/src/AlignmentView/index.js +2058 -0
- package/src/AlignmentView/isTargetWithinEl.js +6 -0
- package/src/AlignmentView/style.css +100 -0
- package/src/AlignmentView/updateTrackHelper.js +58 -0
- package/src/AutoAnnotate.js +500 -0
- package/src/AutoAnnotateBpMatchingDialog.js +208 -0
- package/src/CircularView/Axis.js +40 -0
- package/src/CircularView/AxisNumbers.js +35 -0
- package/src/CircularView/Caret.js +63 -0
- package/src/CircularView/CircularDnaSequence.js +73 -0
- package/src/CircularView/CircularZoomMinimap.js +16 -0
- package/src/CircularView/Cutsite.js +18 -0
- package/src/CircularView/Cutsites.js +113 -0
- package/src/CircularView/DeletionLayer.js +28 -0
- package/src/CircularView/Feature.js +83 -0
- package/src/CircularView/Labels/index.js +536 -0
- package/src/CircularView/Labels/relaxLabelAngles.js +157 -0
- package/src/CircularView/Labels/relaxLabels_DEPRECATED.js +105 -0
- package/src/CircularView/Labels/style.css +55 -0
- package/src/CircularView/Orf.js +25 -0
- package/src/CircularView/Part.js +34 -0
- package/src/CircularView/PositionAnnotationOnCircle.js +26 -0
- package/src/CircularView/Primer.js +41 -0
- package/src/CircularView/RotateCircularViewSlider.js +82 -0
- package/src/CircularView/SelectionLayer.js +132 -0
- package/src/CircularView/VeTopRightContainer.js +12 -0
- package/src/CircularView/ZoomCircularViewSlider.js +62 -0
- package/src/CircularView/drawAnnotations.js +433 -0
- package/src/CircularView/drawDirectedPiePiece.js +142 -0
- package/src/CircularView/getAngleForPositionMidpoint.js +3 -0
- package/src/CircularView/getInternalLabel.js +40 -0
- package/src/CircularView/getRangeAnglesSpecial.js +12 -0
- package/src/CircularView/getYOffset.js +15 -0
- package/src/CircularView/index.d.ts +20 -0
- package/src/CircularView/index.js +930 -0
- package/src/CircularView/normalizeAngle.js +3 -0
- package/src/CircularView/normalizeAngleRange.js +9 -0
- package/src/CircularView/positionCutsites.js +6 -0
- package/src/CircularView/shouldFlipText.js +4 -0
- package/src/CircularView/style.css +47 -0
- package/src/CircularView/utils/polarToSpecialCartesian.js +7 -0
- package/src/CreateAnnotationsPage.js +96 -0
- package/src/CreateCustomEnzyme/index.js +337 -0
- package/src/CreateCustomEnzyme/style.css +100 -0
- package/src/CutsiteFilter/AdditionalCutsiteInfoDialog.js +599 -0
- package/src/CutsiteFilter/index.js +408 -0
- package/src/CutsiteFilter/style.css +23 -0
- package/src/CutsiteFilter/withRestrictionEnzymes.js +15 -0
- package/src/DigestTool/AddLaddersDialog.js +82 -0
- package/src/DigestTool/DigestTool.js +223 -0
- package/src/DigestTool/Ladder.css +20 -0
- package/src/DigestTool/Ladder.js +303 -0
- package/src/DigestTool/createFragmentLines.js +120 -0
- package/src/DigestTool/ladderDefaults.js +26 -0
- package/src/DigestTool/ruler.css +89 -0
- package/src/Editor/CommandHotkeyHandler.js +44 -0
- package/src/Editor/DropHandler.css +21 -0
- package/src/Editor/DropHandler.js +64 -0
- package/src/Editor/FillWindow.js +46 -0
- package/src/Editor/darkmode.css +98 -0
- package/src/Editor/index.js +1005 -0
- package/src/Editor/style.css +235 -0
- package/src/Editor/userDefinedHandlersAndOpts.js +56 -0
- package/src/EnzymeViewer/index.js +81 -0
- package/src/EnzymeViewer/style.css +6 -0
- package/src/FindBar/index.js +411 -0
- package/src/FindBar/style.css +46 -0
- package/src/GlobalDialog.js +66 -0
- package/src/GlobalDialogUtils.js +85 -0
- package/src/LinearView/SequenceName.js +15 -0
- package/src/LinearView/ZoomLinearView.js +47 -0
- package/src/LinearView/index.js +374 -0
- package/src/LinearView/style.css +12 -0
- package/src/ManageEnzymes/index.js +326 -0
- package/src/ManageEnzymes/style.css +100 -0
- package/src/MenuBar/defaultConfig.js +149 -0
- package/src/MenuBar/index.js +98 -0
- package/src/MenuBar/viewSubmenu.js +479 -0
- package/src/PCRTool/PCRTool.js +173 -0
- package/src/Reflex/Browser.js +107 -0
- package/src/Reflex/ReflexContainer.js +802 -0
- package/src/Reflex/ReflexElement.js +160 -0
- package/src/Reflex/ReflexEvents.js +77 -0
- package/src/Reflex/ReflexSplitter.js +205 -0
- package/src/Reflex/index.js +5 -0
- package/src/Reflex/reflex-styles.css +128 -0
- package/src/Reflex/reflex-styles.css.map +9 -0
- package/src/RowItem/AnnotationContainerHolder.js +20 -0
- package/src/RowItem/AnnotationPositioner.js +27 -0
- package/src/RowItem/Axis.js +149 -0
- package/src/RowItem/Caret/index.js +64 -0
- package/src/RowItem/Caret/style.css +8 -0
- package/src/RowItem/Chromatograms/Chromatogram.js +289 -0
- package/src/RowItem/CutsiteSelectionLayers.js +47 -0
- package/src/RowItem/Cutsites.js +271 -0
- package/src/RowItem/DeletionLayers/index.js +113 -0
- package/src/RowItem/DeletionLayers/style.css +5 -0
- package/src/RowItem/Labels.js +327 -0
- package/src/RowItem/Orf.js +109 -0
- package/src/RowItem/Orfs.js +35 -0
- package/src/RowItem/ReplacementLayers/style.css +5 -0
- package/src/RowItem/SelectionLayer/index.js +184 -0
- package/src/RowItem/SelectionLayer/style.css +21 -0
- package/src/RowItem/Sequence.js +269 -0
- package/src/RowItem/StackedAnnotations/PointedAnnotation.js +347 -0
- package/src/RowItem/StackedAnnotations/getStructuredBases.js +97 -0
- package/src/RowItem/StackedAnnotations/index.js +182 -0
- package/src/RowItem/StackedAnnotations/primerBases.js +218 -0
- package/src/RowItem/StackedAnnotations/style.css +14 -0
- package/src/RowItem/Translations/AASliver.js +190 -0
- package/src/RowItem/Translations/Translation.js +162 -0
- package/src/RowItem/Translations/index.js +54 -0
- package/src/RowItem/Translations/style.css +3 -0
- package/src/RowItem/constants.js +3 -0
- package/src/RowItem/getCutsiteLabelHeights.js +56 -0
- package/src/RowItem/getXStartAndWidthFromNonCircularRange.js +12 -0
- package/src/RowItem/getXStartAndWidthOfRangeWrtRow.js +27 -0
- package/src/RowItem/getXStartAndWidthOfRowAnnotation.js +19 -0
- package/src/RowItem/index.js +647 -0
- package/src/RowItem/partOverhangs.js +6 -0
- package/src/RowItem/style.css +103 -0
- package/src/RowItem/utils.js +32 -0
- package/src/RowView/estimateRowHeight.js +184 -0
- package/src/RowView/index.d.ts +10 -0
- package/src/RowView/index.js +554 -0
- package/src/RowView/style.css +12 -0
- package/src/SimpleCircularOrLinearView.js +379 -0
- package/src/SimpleOligoPreview.js +39 -0
- package/src/StatusBar/MeltingTemp.js +81 -0
- package/src/StatusBar/index.js +275 -0
- package/src/StatusBar/style.css +38 -0
- package/src/ToolBar/ToolbarItem.js +194 -0
- package/src/ToolBar/alignmentTool.js +503 -0
- package/src/ToolBar/array_move.js +10 -0
- package/src/ToolBar/cutsiteTool.js +88 -0
- package/src/ToolBar/downloadTool.js +38 -0
- package/src/ToolBar/editTool.js +26 -0
- package/src/ToolBar/featureTool.js +34 -0
- package/src/ToolBar/findTool.js +2 -0
- package/src/ToolBar/importTool.js +27 -0
- package/src/ToolBar/index.js +231 -0
- package/src/ToolBar/inlineFindTool.js +38 -0
- package/src/ToolBar/oligoTool.js +30 -0
- package/src/ToolBar/orfTool.js +141 -0
- package/src/ToolBar/partTool.js +47 -0
- package/src/ToolBar/printTool.js +31 -0
- package/src/ToolBar/redoTool.js +30 -0
- package/src/ToolBar/saveTool.js +48 -0
- package/src/ToolBar/style.css +138 -0
- package/src/ToolBar/undoTool.js +30 -0
- package/src/ToolBar/veToolbarIcons/find.png +0 -0
- package/src/ToolBar/veToolbarIcons/fullscreen.png +0 -0
- package/src/ToolBar/veToolbarIcons/linear.png +0 -0
- package/src/ToolBar/veToolbarIcons/pie.png +0 -0
- package/src/ToolBar/veToolbarIcons/print.png +0 -0
- package/src/ToolBar/veToolbarIcons/save.png +0 -0
- package/src/ToolBar/veToolbarIcons/show_cut_sites.png +0 -0
- package/src/ToolBar/veToolbarIcons/show_features.png +0 -0
- package/src/ToolBar/veToolbarIcons/show_orfs.png +0 -0
- package/src/ToolBar/veToolbarIcons/show_primers.png +0 -0
- package/src/ToolBar/veToolbarIcons/toggle_views.svg +1 -0
- package/src/ToolBar/versionHistoryTool.js +20 -0
- package/src/ToolBar/visibilityTool.js +39 -0
- package/src/VersionHistoryView/index.js +215 -0
- package/src/addAlignment.js +6 -0
- package/src/commands/getOveHotkeyDefs.js +12 -0
- package/src/commands/index.js +1585 -0
- package/src/constants/constants.js +2 -0
- package/src/constants/dnaToColor.js +17 -0
- package/src/constants/draggableClassnames.js +5 -0
- package/src/constants/findToolConstants.js +1 -0
- package/src/constants/orfFrameToColorMap.js +10 -0
- package/src/constants/rowviewContants.js +3 -0
- package/src/constants/specialCutsiteFilterOptions.js +22 -0
- package/src/constants.js +1 -0
- package/src/createVectorEditor/index.js +138 -0
- package/src/createVectorEditor/makeStore.js +34 -0
- package/src/fileUtils.js +103 -0
- package/src/helperComponents/AddOrEditAnnotationDialog/index.js +711 -0
- package/src/helperComponents/AddOrEditAnnotationDialog/style.css +11 -0
- package/src/helperComponents/AddOrEditFeatureDialog/index.js +58 -0
- package/src/helperComponents/AddOrEditPartDialog/index.js +101 -0
- package/src/helperComponents/AddOrEditPrimerDialog/EditCaretPosition.js +234 -0
- package/src/helperComponents/AddOrEditPrimerDialog/index.js +329 -0
- package/src/helperComponents/AddOrEditPrimerDialog/style.css +41 -0
- package/src/helperComponents/EnzymesDialog/index.js +904 -0
- package/src/helperComponents/EnzymesDialog/style.css +21 -0
- package/src/helperComponents/GoToDialog.js +21 -0
- package/src/helperComponents/MergeFeaturesDialog/index.js +253 -0
- package/src/helperComponents/MergeFeaturesDialog/style.css +3 -0
- package/src/helperComponents/MultipleSeqsDetectedOnImportDialog.js +74 -0
- package/src/helperComponents/PinchHelper/PinchHelper.js +24 -0
- package/src/helperComponents/PrintDialog/index.js +396 -0
- package/src/helperComponents/PrintDialog/style.css +4 -0
- package/src/helperComponents/PropertiesDialog/ColorPicker.js +30 -0
- package/src/helperComponents/PropertiesDialog/CutsiteProperties.js +185 -0
- package/src/helperComponents/PropertiesDialog/FeatureProperties.js +6 -0
- package/src/helperComponents/PropertiesDialog/GenbankView.js +74 -0
- package/src/helperComponents/PropertiesDialog/GeneralProperties.js +140 -0
- package/src/helperComponents/PropertiesDialog/GenericAnnotationProperties.js +406 -0
- package/src/helperComponents/PropertiesDialog/OrfProperties.js +117 -0
- package/src/helperComponents/PropertiesDialog/PartProperties.js +9 -0
- package/src/helperComponents/PropertiesDialog/PrimerProperties.js +19 -0
- package/src/helperComponents/PropertiesDialog/SingleEnzymeCutsiteInfo.js +131 -0
- package/src/helperComponents/PropertiesDialog/TranslationProperties.js +149 -0
- package/src/helperComponents/PropertiesDialog/index.js +166 -0
- package/src/helperComponents/PropertiesDialog/style.css +68 -0
- package/src/helperComponents/PropertiesDialog/typeField.js +24 -0
- package/src/helperComponents/PropertiesDialog/utils.js +37 -0
- package/src/helperComponents/RemoveDuplicates/index.js +194 -0
- package/src/helperComponents/RenameSequenceDialog.js +7 -0
- package/src/helperComponents/SelectDialog.js +150 -0
- package/src/helperComponents/UncontrolledSliderWithPlusMinusBtns.css +5 -0
- package/src/helperComponents/UncontrolledSliderWithPlusMinusBtns.js +134 -0
- package/src/helperComponents/VeWarning/index.js +22 -0
- package/src/helperComponents/VeWarning/style.css +10 -0
- package/src/helperComponents/createSimpleDialog.js +89 -0
- package/src/helperComponents/partTagSearch.js +72 -0
- package/src/helperComponents/simpleDialog.css +13 -0
- package/src/helperComponents/withHover.js +90 -0
- package/src/index.js +60 -0
- package/src/redux/alignments.js +373 -0
- package/src/redux/annotationLabelVisibility.js +53 -0
- package/src/redux/annotationVisibility.js +196 -0
- package/src/redux/annotationsToSupport.js +104 -0
- package/src/redux/caretPosition.js +27 -0
- package/src/redux/charWidth.js +22 -0
- package/src/redux/copyOptions.js +34 -0
- package/src/redux/createYourOwnEnzyme.js +39 -0
- package/src/redux/deletionLayers.js +36 -0
- package/src/redux/digestTool.js +34 -0
- package/src/redux/featureLengthsToHide.js +27 -0
- package/src/redux/findTool.js +79 -0
- package/src/redux/frameTranslations.js +52 -0
- package/src/redux/hoveredAnnotation.js +24 -0
- package/src/redux/index.js +196 -0
- package/src/redux/labelLineIntensity.js +25 -0
- package/src/redux/labelSize.js +23 -0
- package/src/redux/lastSavedId.js +20 -0
- package/src/redux/middleware.js +112 -0
- package/src/redux/minimumOrfSize.js +24 -0
- package/src/redux/modalActions.js +3 -0
- package/src/redux/panelsShown.js +273 -0
- package/src/redux/partLengthsToHide.js +23 -0
- package/src/redux/primerLengthsToHide.js +27 -0
- package/src/redux/propertiesTool.js +40 -0
- package/src/redux/readOnly.js +28 -0
- package/src/redux/replacementLayers.js +36 -0
- package/src/redux/restrictionEnzymes.js +52 -0
- package/src/redux/selectedAnnotations.js +89 -0
- package/src/redux/selectedPartTags.js +21 -0
- package/src/redux/selectionLayer.js +46 -0
- package/src/redux/sequenceData/circular.js +19 -0
- package/src/redux/sequenceData/description.js +21 -0
- package/src/redux/sequenceData/features.js +19 -0
- package/src/redux/sequenceData/index.js +81 -0
- package/src/redux/sequenceData/lineageLines.js +11 -0
- package/src/redux/sequenceData/materiallyAvailable.js +19 -0
- package/src/redux/sequenceData/name.js +19 -0
- package/src/redux/sequenceData/parts.js +19 -0
- package/src/redux/sequenceData/primers.js +19 -0
- package/src/redux/sequenceData/sequence.js +12 -0
- package/src/redux/sequenceData/sharedActionCreators.js +0 -0
- package/src/redux/sequenceData/translations.js +20 -0
- package/src/redux/sequenceData/upsertDeleteActionGenerator.js +31 -0
- package/src/redux/sequenceDataHistory.js +43 -0
- package/src/redux/showGCContent.js +23 -0
- package/src/redux/toolBar.js +25 -0
- package/src/redux/uppercaseSequenceMapFont.js +25 -0
- package/src/redux/useAdditionalOrfStartCodons.js +24 -0
- package/src/redux/utils/addDashesForMatchStartAndEndForTracks/index.js +71 -0
- package/src/redux/utils/addMetaToActionCreators.js +12 -0
- package/src/redux/utils/createMergedDefaultStateReducer.js +30 -0
- package/src/redux/utils/createMetaAction.js +12 -0
- package/src/redux/versionHistory.js +27 -0
- package/src/selectors/annotationLabelVisibility.js +2 -0
- package/src/selectors/annotationSearchSelector.js +24 -0
- package/src/selectors/cdsFeaturesSelector.js +9 -0
- package/src/selectors/circularSelector.js +4 -0
- package/src/selectors/cutsiteLabelColorSelector.js +6 -0
- package/src/selectors/cutsitesByRangeSelector.js +5 -0
- package/src/selectors/cutsitesSelector.js +61 -0
- package/src/selectors/editorSelector.js +2 -0
- package/src/selectors/featuresSelector.js +8 -0
- package/src/selectors/filteredCutsitesSelector.js +137 -0
- package/src/selectors/filteredFeaturesSelector.js +32 -0
- package/src/selectors/filteredPartsSelector.js +57 -0
- package/src/selectors/filteredPrimersSelector.js +27 -0
- package/src/selectors/filteredRestrictionEnzymesSelector.js +1 -0
- package/src/selectors/getAdditionalEnzymesSelector.js +46 -0
- package/src/selectors/index.js +41 -0
- package/src/selectors/isEnzymeFilterAndSelector.js +1 -0
- package/src/selectors/minimumOrfSizeSelector.js +2 -0
- package/src/selectors/orfsSelector.js +15 -0
- package/src/selectors/partsSelector.js +8 -0
- package/src/selectors/primersSelector.js +8 -0
- package/src/selectors/restrictionEnzymesSelector.js +34 -0
- package/src/selectors/searchLayersSelector.js +71 -0
- package/src/selectors/selectedAnnotationsSelector.js +1 -0
- package/src/selectors/selectedCutsitesSelector.js +21 -0
- package/src/selectors/sequenceDataSelector.js +2 -0
- package/src/selectors/sequenceLengthSelector.js +5 -0
- package/src/selectors/sequenceSelector.js +4 -0
- package/src/selectors/tagsToBoldSelector.js +2 -0
- package/src/selectors/translationSearchMatchesSelector.js +14 -0
- package/src/selectors/translationsRawSelector.js +8 -0
- package/src/selectors/translationsSelector.js +137 -0
- package/src/style.css +82 -0
- package/src/updateEditor.js +198 -0
- package/src/utils/PassThrough.js +3 -0
- package/src/utils/addWrappedAddons.js +20 -0
- package/src/utils/annotationTypes.js +37 -0
- package/src/utils/arrayUtils.js +19 -0
- package/src/utils/calculateTickMarkPositionsForGivenRange.js +47 -0
- package/src/utils/cleanSequenceData_DEPRECATED/arrayToObjWithIds.js +17 -0
- package/src/utils/combineReducersDontIgnoreKeys.js +12 -0
- package/src/utils/commandUtils.js +18 -0
- package/src/utils/editorUtils.js +223 -0
- package/src/utils/getAnnotationClassnames.js +12 -0
- package/src/utils/getAnnotationNameAndStartStopString.js +61 -0
- package/src/utils/getVisibleStartEnd.js +7 -0
- package/src/utils/massageTickSpacing.js +19 -0
- package/src/utils/onlyUpdateForKeysDeep.js +31 -0
- package/src/utils/prepareRowData.js +64 -0
- package/src/utils/proteinUtils.js +3 -0
- package/src/utils/pureNoFunc.js +18 -0
- package/src/utils/selectionLayer.js +25 -0
- package/src/utils/shouldRerender.js +27 -0
- package/src/utils/showFileDialog.js +26 -0
- package/src/utils/updateLabelsForInViewFeatures.js +55 -0
- package/src/utils/updateLabelsForInViewFeaturesCircView.js +41 -0
- package/src/utils/useAAColorType.js +8 -0
- package/src/utils/useAnnotationLimits.js +42 -0
- package/src/utils/useChromatogramPrefs.js +31 -0
- package/src/utils/useLadders.js +6 -0
- package/src/utils/useMeltingTemp.js +7 -0
- package/src/utils/useTmType.js +10 -0
- package/src/withEditorInteractions/Keyboard.js +86 -0
- package/src/withEditorInteractions/clickAndDragUtils.js +576 -0
- package/src/withEditorInteractions/createSequenceInputPopup.js +296 -0
- package/src/withEditorInteractions/createSequenceInputPopupStyle.css +85 -0
- package/src/withEditorInteractions/getBpsPerRow.js +19 -0
- package/src/withEditorInteractions/index.js +1252 -0
- package/src/withEditorInteractions/isElementInViewport.js +29 -0
- package/src/withEditorInteractions/moveCaret.js +58 -0
- package/src/withEditorProps/index.js +1010 -0
- package/index.mjs +0 -193228
| @@ -0,0 +1,196 @@ | |
| 1 | 
            +
            import { merge } from "lodash";
         | 
| 2 | 
            +
            import * as createYourOwnEnzyme from "./createYourOwnEnzyme";
         | 
| 3 | 
            +
            import * as showGCContent from "./showGCContent";
         | 
| 4 | 
            +
            import * as annotationLabelVisibility from "./annotationLabelVisibility";
         | 
| 5 | 
            +
            import * as annotationsToSupport from "./annotationsToSupport";
         | 
| 6 | 
            +
            import * as annotationVisibility from "./annotationVisibility";
         | 
| 7 | 
            +
            import * as caretPosition from "./caretPosition";
         | 
| 8 | 
            +
            import * as copyOptions from "./copyOptions";
         | 
| 9 | 
            +
            import * as deletionLayers from "./deletionLayers";
         | 
| 10 | 
            +
            import * as digestTool from "./digestTool";
         | 
| 11 | 
            +
            import * as findTool from "./findTool";
         | 
| 12 | 
            +
            import * as toolBar from "./toolBar";
         | 
| 13 | 
            +
            import * as frameTranslations from "./frameTranslations";
         | 
| 14 | 
            +
            import * as hoveredAnnotation from "./hoveredAnnotation";
         | 
| 15 | 
            +
            import * as minimumOrfSize from "./minimumOrfSize";
         | 
| 16 | 
            +
            import * as alignments from "./alignments";
         | 
| 17 | 
            +
            import * as panelsShown from "./panelsShown";
         | 
| 18 | 
            +
            import * as propertiesTool from "./propertiesTool";
         | 
| 19 | 
            +
            import * as lastSavedId from "./lastSavedId";
         | 
| 20 | 
            +
            import * as readOnly from "./readOnly";
         | 
| 21 | 
            +
            import * as versionHistory from "./versionHistory";
         | 
| 22 | 
            +
            import * as replacementLayers from "./replacementLayers";
         | 
| 23 | 
            +
            import * as restrictionEnzymes from "./restrictionEnzymes";
         | 
| 24 | 
            +
            import * as selectedAnnotations from "./selectedAnnotations";
         | 
| 25 | 
            +
            import * as selectionLayer from "./selectionLayer";
         | 
| 26 | 
            +
            import * as sequenceDataHistory from "./sequenceDataHistory";
         | 
| 27 | 
            +
            import * as sequenceData from "./sequenceData";
         | 
| 28 | 
            +
            import * as useAdditionalOrfStartCodons from "./useAdditionalOrfStartCodons";
         | 
| 29 | 
            +
            import * as uppercaseSequenceMapFont from "./uppercaseSequenceMapFont";
         | 
| 30 | 
            +
            import * as charWidth from "./charWidth";
         | 
| 31 | 
            +
            import * as labelLineIntensity from "./labelLineIntensity";
         | 
| 32 | 
            +
            import * as labelSize from "./labelSize";
         | 
| 33 | 
            +
            import * as featureLengthsToHide from "./featureLengthsToHide";
         | 
| 34 | 
            +
            import * as primerLengthsToHide from "./primerLengthsToHide";
         | 
| 35 | 
            +
            import * as partLengthsToHide from "./partLengthsToHide";
         | 
| 36 | 
            +
            import * as selectedPartTags from "./selectedPartTags";
         | 
| 37 | 
            +
            import { combineReducers } from "redux";
         | 
| 38 | 
            +
            import createAction from "./utils/createMetaAction";
         | 
| 39 | 
            +
            export { default as vectorEditorMiddleware } from "./middleware";
         | 
| 40 | 
            +
             | 
| 41 | 
            +
            const subReducers = {
         | 
| 42 | 
            +
              createYourOwnEnzyme,
         | 
| 43 | 
            +
              annotationLabelVisibility,
         | 
| 44 | 
            +
              annotationsToSupport,
         | 
| 45 | 
            +
              annotationVisibility,
         | 
| 46 | 
            +
              caretPosition,
         | 
| 47 | 
            +
              copyOptions,
         | 
| 48 | 
            +
              deletionLayers,
         | 
| 49 | 
            +
              digestTool,
         | 
| 50 | 
            +
              toolBar,
         | 
| 51 | 
            +
              findTool,
         | 
| 52 | 
            +
              frameTranslations,
         | 
| 53 | 
            +
              hoveredAnnotation,
         | 
| 54 | 
            +
              minimumOrfSize,
         | 
| 55 | 
            +
              panelsShown,
         | 
| 56 | 
            +
              propertiesTool,
         | 
| 57 | 
            +
              lastSavedId,
         | 
| 58 | 
            +
              readOnly,
         | 
| 59 | 
            +
              versionHistory,
         | 
| 60 | 
            +
              replacementLayers,
         | 
| 61 | 
            +
              restrictionEnzymes,
         | 
| 62 | 
            +
              selectedAnnotations,
         | 
| 63 | 
            +
              selectionLayer,
         | 
| 64 | 
            +
              sequenceDataHistory,
         | 
| 65 | 
            +
              sequenceData,
         | 
| 66 | 
            +
              useAdditionalOrfStartCodons,
         | 
| 67 | 
            +
              charWidth,
         | 
| 68 | 
            +
              uppercaseSequenceMapFont,
         | 
| 69 | 
            +
              showGCContent,
         | 
| 70 | 
            +
              labelLineIntensity,
         | 
| 71 | 
            +
              labelSize,
         | 
| 72 | 
            +
              partLengthsToHide,
         | 
| 73 | 
            +
              primerLengthsToHide,
         | 
| 74 | 
            +
              featureLengthsToHide,
         | 
| 75 | 
            +
              selectedPartTags
         | 
| 76 | 
            +
            };
         | 
| 77 | 
            +
             | 
| 78 | 
            +
            const vectorEditorInitialize = createAction("VECTOR_EDITOR_UPDATE");
         | 
| 79 | 
            +
            const vectorEditorClear = createAction("VECTOR_EDITOR_CLEAR");
         | 
| 80 | 
            +
             | 
| 81 | 
            +
            //export the actions for use elsewhere
         | 
| 82 | 
            +
            export const actions = {
         | 
| 83 | 
            +
              ...Object.keys(subReducers).reduce(
         | 
| 84 | 
            +
                (acc, k) => ({
         | 
| 85 | 
            +
                  ...acc,
         | 
| 86 | 
            +
                  ...subReducers[k]
         | 
| 87 | 
            +
                }),
         | 
| 88 | 
            +
                {}
         | 
| 89 | 
            +
              ),
         | 
| 90 | 
            +
              ...alignments,
         | 
| 91 | 
            +
              vectorEditorInitialize,
         | 
| 92 | 
            +
              vectorEditorClear
         | 
| 93 | 
            +
            };
         | 
| 94 | 
            +
             | 
| 95 | 
            +
            const mergeDeepKeys = [];
         | 
| 96 | 
            +
            //define the reducer
         | 
| 97 | 
            +
            const reducers = {
         | 
| 98 | 
            +
              ...Object.keys(subReducers).reduce((acc, k) => {
         | 
| 99 | 
            +
                if (
         | 
| 100 | 
            +
                  subReducers[k].default &&
         | 
| 101 | 
            +
                  subReducers[k].default.__shouldUseMergedState
         | 
| 102 | 
            +
                ) {
         | 
| 103 | 
            +
                  mergeDeepKeys.push(k);
         | 
| 104 | 
            +
                }
         | 
| 105 | 
            +
                return {
         | 
| 106 | 
            +
                  ...acc,
         | 
| 107 | 
            +
                  [k]: subReducers[k].default
         | 
| 108 | 
            +
                };
         | 
| 109 | 
            +
              }, {}),
         | 
| 110 | 
            +
              instantiated: () => true
         | 
| 111 | 
            +
            };
         | 
| 112 | 
            +
             | 
| 113 | 
            +
            export const editorReducer = combineReducers(reducers);
         | 
| 114 | 
            +
            const customDeepMerge = (state = {}, newState = {}) => {
         | 
| 115 | 
            +
              return {
         | 
| 116 | 
            +
                ...state,
         | 
| 117 | 
            +
                ...newState,
         | 
| 118 | 
            +
                ...mergeDeepKeys.reduce((acc, key) => {
         | 
| 119 | 
            +
                  acc[key] = merge(state[key], newState[key]);
         | 
| 120 | 
            +
                  return acc;
         | 
| 121 | 
            +
                }, {})
         | 
| 122 | 
            +
              };
         | 
| 123 | 
            +
            };
         | 
| 124 | 
            +
             | 
| 125 | 
            +
            export default function reducerFactory(initialState = {}) {
         | 
| 126 | 
            +
              // if (!initialState || !Object.keys(initialState).length) {
         | 
| 127 | 
            +
              //   throw new Error(
         | 
| 128 | 
            +
              //     "Please pass an initial state to the vector editor reducer like: {DemoEditor: {}}!"
         | 
| 129 | 
            +
              //   );
         | 
| 130 | 
            +
              // }
         | 
| 131 | 
            +
              return function (state = initialState, action) {
         | 
| 132 | 
            +
                let editorNames;
         | 
| 133 | 
            +
                const newState = {};
         | 
| 134 | 
            +
                if (action.meta && action.meta.editorName) {
         | 
| 135 | 
            +
                  editorNames = Array.isArray(action.meta.editorName)
         | 
| 136 | 
            +
                    ? action.meta.editorName
         | 
| 137 | 
            +
                    : [action.meta.editorName];
         | 
| 138 | 
            +
                }
         | 
| 139 | 
            +
                let stateToReturn;
         | 
| 140 | 
            +
                if (editorNames) {
         | 
| 141 | 
            +
                  //we're dealing with an action specific to a given editor
         | 
| 142 | 
            +
                  editorNames.forEach(function (editorName) {
         | 
| 143 | 
            +
                    let currentState = state[editorName];
         | 
| 144 | 
            +
                    if (action.type === "VECTOR_EDITOR_UPDATE") {
         | 
| 145 | 
            +
                      //deep merge certain parts of the exisiting state with the new payload of props
         | 
| 146 | 
            +
                      //(if you want to do a clean wipe, use VECTOR_EDITOR_CLEAR)
         | 
| 147 | 
            +
                      currentState = customDeepMerge(state[editorName], action.payload);
         | 
| 148 | 
            +
                    }
         | 
| 149 | 
            +
                    if (action.type === "VECTOR_EDITOR_CLEAR") {
         | 
| 150 | 
            +
                      currentState = undefined;
         | 
| 151 | 
            +
                    }
         | 
| 152 | 
            +
                    newState[editorName] = editorReducer(currentState, action);
         | 
| 153 | 
            +
                  });
         | 
| 154 | 
            +
                  stateToReturn = {
         | 
| 155 | 
            +
                    ...state,
         | 
| 156 | 
            +
                    ...newState
         | 
| 157 | 
            +
                  };
         | 
| 158 | 
            +
                } else {
         | 
| 159 | 
            +
                  //just a normal action
         | 
| 160 | 
            +
                  Object.keys(state).forEach(function (editorName) {
         | 
| 161 | 
            +
                    if (editorName === "__allEditorsOptions") return; //we deal with __allEditorsOptions below so don't pass it here
         | 
| 162 | 
            +
                    newState[editorName] = editorReducer(state[editorName], action);
         | 
| 163 | 
            +
                  });
         | 
| 164 | 
            +
                  stateToReturn = newState;
         | 
| 165 | 
            +
                }
         | 
| 166 | 
            +
                return {
         | 
| 167 | 
            +
                  ...stateToReturn,
         | 
| 168 | 
            +
                  //these are reducers that are not editor specific (aka shared across editor instances)
         | 
| 169 | 
            +
                  __allEditorsOptions: [
         | 
| 170 | 
            +
                    ["createYourOwnEnzyme", createYourOwnEnzyme],
         | 
| 171 | 
            +
                    ["uppercaseSequenceMapFont", uppercaseSequenceMapFont],
         | 
| 172 | 
            +
                    ["showGCContent", showGCContent],
         | 
| 173 | 
            +
                    ["labelLineIntensity", labelLineIntensity],
         | 
| 174 | 
            +
                    ["labelSize", labelSize],
         | 
| 175 | 
            +
                    ["alignments", alignments]
         | 
| 176 | 
            +
                  ].reduce((acc, [key, val]) => {
         | 
| 177 | 
            +
                    acc[key] = val.default(
         | 
| 178 | 
            +
                      !state.__allEditorsOptions
         | 
| 179 | 
            +
                        ? undefined
         | 
| 180 | 
            +
                        : state.__allEditorsOptions[key],
         | 
| 181 | 
            +
                      action
         | 
| 182 | 
            +
                    );
         | 
| 183 | 
            +
                    return acc;
         | 
| 184 | 
            +
                  }, {})
         | 
| 185 | 
            +
                };
         | 
| 186 | 
            +
              };
         | 
| 187 | 
            +
            }
         | 
| 188 | 
            +
             | 
| 189 | 
            +
            // export const getBlankEditor = (state) => (state.blankEditor)
         | 
| 190 | 
            +
            export const getEditorByName = (state, editorName) => state[editorName];
         | 
| 191 | 
            +
             | 
| 192 | 
            +
            // export default connect((state, ownProps) => {
         | 
| 193 | 
            +
            //   return {
         | 
| 194 | 
            +
            //     toggled: state.VectorEditor[ownProps.editorName].annotationVisibility.features
         | 
| 195 | 
            +
            //   }
         | 
| 196 | 
            +
            // })()
         | 
| @@ -0,0 +1,25 @@ | |
| 1 | 
            +
            import { createReducer } from "redux-act";
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            import createAction from "./utils/createMetaAction";
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            // ------------------------------------
         | 
| 6 | 
            +
            // Actions
         | 
| 7 | 
            +
            // ------------------------------------
         | 
| 8 | 
            +
            export const changeLabelLineIntensity = createAction(
         | 
| 9 | 
            +
              "changeLabelLineIntensity"
         | 
| 10 | 
            +
            );
         | 
| 11 | 
            +
             | 
| 12 | 
            +
            const newVal = window.localStorage.getItem("labelLineIntensity");
         | 
| 13 | 
            +
             | 
| 14 | 
            +
            // ------------------------------------
         | 
| 15 | 
            +
            // Reducer
         | 
| 16 | 
            +
            // ------------------------------------
         | 
| 17 | 
            +
            export default createReducer(
         | 
| 18 | 
            +
              {
         | 
| 19 | 
            +
                [changeLabelLineIntensity]: (state, payload) => {
         | 
| 20 | 
            +
                  localStorage.setItem("labelLineIntensity", payload);
         | 
| 21 | 
            +
                  return payload;
         | 
| 22 | 
            +
                }
         | 
| 23 | 
            +
              },
         | 
| 24 | 
            +
              newVal ? parseFloat(newVal) : 0.1 //  0.1 (low) || 0.4 (med) || 0.7 (high) || 1.0 (full)
         | 
| 25 | 
            +
            );
         | 
| @@ -0,0 +1,23 @@ | |
| 1 | 
            +
            import { createReducer } from "redux-act";
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            import createAction from "./utils/createMetaAction";
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            // ------------------------------------
         | 
| 6 | 
            +
            // Actions
         | 
| 7 | 
            +
            // ------------------------------------
         | 
| 8 | 
            +
            export const changeLabelSize = createAction("changeLabelSize");
         | 
| 9 | 
            +
             | 
| 10 | 
            +
            const newVal = window.localStorage.getItem("labelSize");
         | 
| 11 | 
            +
             | 
| 12 | 
            +
            // ------------------------------------
         | 
| 13 | 
            +
            // Reducer
         | 
| 14 | 
            +
            // ------------------------------------
         | 
| 15 | 
            +
            export default createReducer(
         | 
| 16 | 
            +
              {
         | 
| 17 | 
            +
                [changeLabelSize]: (state, payload) => {
         | 
| 18 | 
            +
                  localStorage.setItem("labelSize", payload);
         | 
| 19 | 
            +
                  return payload;
         | 
| 20 | 
            +
                }
         | 
| 21 | 
            +
              },
         | 
| 22 | 
            +
              newVal ? parseInt(newVal) : 8 //  8 is 100% label size
         | 
| 23 | 
            +
            );
         | 
| @@ -0,0 +1,20 @@ | |
| 1 | 
            +
            //./caretPosition.js
         | 
| 2 | 
            +
            import { createReducer } from "redux-act";
         | 
| 3 | 
            +
            import createAction from "./utils/createMetaAction";
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            // ------------------------------------
         | 
| 6 | 
            +
            // Actions
         | 
| 7 | 
            +
            // ------------------------------------
         | 
| 8 | 
            +
            export const lastSavedIdUpdate = createAction("lastSavedIdUpdate"); //NOTE!!:: second argument sanitizes actions so no payload is passed
         | 
| 9 | 
            +
             | 
| 10 | 
            +
            // ------------------------------------
         | 
| 11 | 
            +
            // Reducer
         | 
| 12 | 
            +
            // ------------------------------------
         | 
| 13 | 
            +
            export default createReducer(
         | 
| 14 | 
            +
              {
         | 
| 15 | 
            +
                [lastSavedIdUpdate]: (state, payload) => {
         | 
| 16 | 
            +
                  return payload;
         | 
| 17 | 
            +
                }
         | 
| 18 | 
            +
              },
         | 
| 19 | 
            +
              null
         | 
| 20 | 
            +
            );
         | 
| @@ -0,0 +1,112 @@ | |
| 1 | 
            +
            //vectorEditorMiddleware
         | 
| 2 | 
            +
            //used to add undo/redo abilities to OVE
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            // To Batch actions together use this api:
         | 
| 5 | 
            +
            // deleteFeature([id1, id2], {
         | 
| 6 | 
            +
            //   batchUndoStart: true
         | 
| 7 | 
            +
            // });
         | 
| 8 | 
            +
            // upsertFeature(
         | 
| 9 | 
            +
            // {
         | 
| 10 | 
            +
            //   ...feat1,
         | 
| 11 | 
            +
            //   id: uuid(),
         | 
| 12 | 
            +
            //   start: start - 1,
         | 
| 13 | 
            +
            //   end: end - 1,
         | 
| 14 | 
            +
            //   name
         | 
| 15 | 
            +
            // },
         | 
| 16 | 
            +
            // {
         | 
| 17 | 
            +
            //   batchUndoEnd: true
         | 
| 18 | 
            +
            // }
         | 
| 19 | 
            +
            // );
         | 
| 20 | 
            +
             | 
| 21 | 
            +
            export default (store) => (next) => (action) => {
         | 
| 22 | 
            +
              if (action.meta && action.meta.disregardUndo) {
         | 
| 23 | 
            +
                return next(action);
         | 
| 24 | 
            +
              }
         | 
| 25 | 
            +
              const disregardUndo = true;
         | 
| 26 | 
            +
              if (action.type === "VE_UNDO" || action.type === "VE_REDO") {
         | 
| 27 | 
            +
                const { VectorEditor } = store.getState();
         | 
| 28 | 
            +
                const editorName = action.meta.editorName;
         | 
| 29 | 
            +
                const editorState = VectorEditor[editorName];
         | 
| 30 | 
            +
                const stack =
         | 
| 31 | 
            +
                  editorState.sequenceDataHistory[
         | 
| 32 | 
            +
                    action.type === "VE_UNDO" ? "past" : "future"
         | 
| 33 | 
            +
                  ] || [];
         | 
| 34 | 
            +
                const stateToUse = stack[stack.length - 1];
         | 
| 35 | 
            +
                store.dispatch({
         | 
| 36 | 
            +
                  type: action.type === "VE_UNDO" ? "VE_UNDO_META" : "VE_REDO_META",
         | 
| 37 | 
            +
                  payload: {
         | 
| 38 | 
            +
                    sequenceData: editorState.sequenceData,
         | 
| 39 | 
            +
                    selectionLayer: editorState.selectionLayer,
         | 
| 40 | 
            +
                    caretPosition: editorState.caretPosition
         | 
| 41 | 
            +
                  },
         | 
| 42 | 
            +
                  meta: { editorName, disregardUndo }
         | 
| 43 | 
            +
                });
         | 
| 44 | 
            +
                store.dispatch({
         | 
| 45 | 
            +
                  type: "SEQUENCE_DATA_UPDATE",
         | 
| 46 | 
            +
                  payload: stateToUse.sequenceData,
         | 
| 47 | 
            +
                  meta: { editorName, disregardUndo }
         | 
| 48 | 
            +
                });
         | 
| 49 | 
            +
                if (stateToUse.caretPosition > -1) {
         | 
| 50 | 
            +
                  store.dispatch({
         | 
| 51 | 
            +
                    type: "CARET_POSITION_UPDATE",
         | 
| 52 | 
            +
                    payload: stateToUse.caretPosition,
         | 
| 53 | 
            +
                    meta: { editorName, disregardUndo }
         | 
| 54 | 
            +
                  });
         | 
| 55 | 
            +
                } else {
         | 
| 56 | 
            +
                  store.dispatch({
         | 
| 57 | 
            +
                    type: "SELECTION_LAYER_UPDATE",
         | 
| 58 | 
            +
                    payload: { ...stateToUse.selectionLayer, forceUpdate: Math.random() },
         | 
| 59 | 
            +
                    meta: { editorName, disregardUndo }
         | 
| 60 | 
            +
                  });
         | 
| 61 | 
            +
                }
         | 
| 62 | 
            +
                store.dispatch({
         | 
| 63 | 
            +
                  type: "VE_SEQUENCE_CHANGED", //used for external autosave functionality
         | 
| 64 | 
            +
                  payload: {
         | 
| 65 | 
            +
                    sequenceData: stateToUse.sequenceData,
         | 
| 66 | 
            +
                    editorName
         | 
| 67 | 
            +
                  },
         | 
| 68 | 
            +
                  meta: { editorName, disregardUndo: true }
         | 
| 69 | 
            +
                });
         | 
| 70 | 
            +
                return next(action);
         | 
| 71 | 
            +
              } else {
         | 
| 72 | 
            +
                //pass batchUndoStart, batchUndoMiddle and batchUndoEnd to group actions together
         | 
| 73 | 
            +
                const { batchUndoEnd, batchUndoStart, batchUndoMiddle } = action.meta || {};
         | 
| 74 | 
            +
                //get editor state(s)
         | 
| 75 | 
            +
                const OldVectorEditor = store.getState().VectorEditor;
         | 
| 76 | 
            +
                const result = next(action);
         | 
| 77 | 
            +
                const NewVectorEditor = store.getState().VectorEditor;
         | 
| 78 | 
            +
                Object.keys(NewVectorEditor).forEach((editorName) => {
         | 
| 79 | 
            +
                  const newEditorState = NewVectorEditor[editorName];
         | 
| 80 | 
            +
                  const oldEditorState = OldVectorEditor[editorName];
         | 
| 81 | 
            +
                  if (
         | 
| 82 | 
            +
                    oldEditorState &&
         | 
| 83 | 
            +
                    oldEditorState.sequenceData &&
         | 
| 84 | 
            +
                    oldEditorState.sequenceData !== newEditorState.sequenceData
         | 
| 85 | 
            +
                  ) {
         | 
| 86 | 
            +
                    const { sequenceData, selectionLayer, caretPosition } = oldEditorState;
         | 
| 87 | 
            +
                    !batchUndoEnd &&
         | 
| 88 | 
            +
                      !batchUndoMiddle &&
         | 
| 89 | 
            +
                      store.dispatch({
         | 
| 90 | 
            +
                        type: "ADD_TO_UNDO_STACK",
         | 
| 91 | 
            +
                        payload: {
         | 
| 92 | 
            +
                          selectionLayer,
         | 
| 93 | 
            +
                          sequenceData,
         | 
| 94 | 
            +
                          caretPosition
         | 
| 95 | 
            +
                        },
         | 
| 96 | 
            +
                        meta: { editorName, disregardUndo }
         | 
| 97 | 
            +
                      });
         | 
| 98 | 
            +
                    !batchUndoStart &&
         | 
| 99 | 
            +
                      !batchUndoMiddle &&
         | 
| 100 | 
            +
                      store.dispatch({
         | 
| 101 | 
            +
                        type: "VE_SEQUENCE_CHANGED", //used for external autosave functionality
         | 
| 102 | 
            +
                        payload: {
         | 
| 103 | 
            +
                          sequenceData: newEditorState.sequenceData,
         | 
| 104 | 
            +
                          editorName
         | 
| 105 | 
            +
                        },
         | 
| 106 | 
            +
                        meta: { editorName, disregardUndo: true }
         | 
| 107 | 
            +
                      });
         | 
| 108 | 
            +
                  }
         | 
| 109 | 
            +
                });
         | 
| 110 | 
            +
                return result;
         | 
| 111 | 
            +
              }
         | 
| 112 | 
            +
            };
         | 
| @@ -0,0 +1,24 @@ | |
| 1 | 
            +
            //./caretPosition.js
         | 
| 2 | 
            +
            import { createReducer } from "redux-act";
         | 
| 3 | 
            +
            import createAction from "./utils/createMetaAction";
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            // ------------------------------------
         | 
| 6 | 
            +
            // Actions
         | 
| 7 | 
            +
            // ------------------------------------
         | 
| 8 | 
            +
            export const minimumOrfSizeUpdate = createAction("minimumOrfSizeUpdate");
         | 
| 9 | 
            +
             | 
| 10 | 
            +
            // ------------------------------------
         | 
| 11 | 
            +
            // Reducer
         | 
| 12 | 
            +
            // ------------------------------------
         | 
| 13 | 
            +
            export default createReducer(
         | 
| 14 | 
            +
              {
         | 
| 15 | 
            +
                [minimumOrfSizeUpdate]: (state, payload) => {
         | 
| 16 | 
            +
                  return payload;
         | 
| 17 | 
            +
                }
         | 
| 18 | 
            +
              },
         | 
| 19 | 
            +
              300
         | 
| 20 | 
            +
            );
         | 
| 21 | 
            +
             | 
| 22 | 
            +
            export function getMinimumOrfSize(state) {
         | 
| 23 | 
            +
              return state;
         | 
| 24 | 
            +
            }
         | 
| @@ -0,0 +1,273 @@ | |
| 1 | 
            +
            import { map, flatMap } from "lodash";
         | 
| 2 | 
            +
            import { createReducer } from "redux-act";
         | 
| 3 | 
            +
            import createAction from "./utils/createMetaAction";
         | 
| 4 | 
            +
            import { removeItem } from "../utils/arrayUtils";
         | 
| 5 | 
            +
            import immer from "immer";
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            //manages which tab panels are shown in the editor
         | 
| 8 | 
            +
             | 
| 9 | 
            +
            // ------------------------------------
         | 
| 10 | 
            +
            // Actions
         | 
| 11 | 
            +
            // ------------------------------------
         | 
| 12 | 
            +
            export const panelsShownUpdate = createAction("PANELS_SHOWN_UPDATE");
         | 
| 13 | 
            +
            export const addPanelIfItDoesntAlreadyExist = createAction(
         | 
| 14 | 
            +
              "addPanelIfItDoesntAlreadyExist"
         | 
| 15 | 
            +
            );
         | 
| 16 | 
            +
            export const togglePanelFullScreen = createAction("togglePanelFullScreen");
         | 
| 17 | 
            +
            export const collapsePanel = createAction("collapsePanel");
         | 
| 18 | 
            +
            export const closePanel = createAction("closePanel");
         | 
| 19 | 
            +
            export const _collapseSplitScreen = createAction("_collapseSplitScreen");
         | 
| 20 | 
            +
            export const setPanelAsActive = createAction("setPanelAsActive");
         | 
| 21 | 
            +
            export const flipActiveTabFromLinearOrCircularIfNecessary = createAction(
         | 
| 22 | 
            +
              "flipActiveTabFromLinearOrCircularIfNecessary"
         | 
| 23 | 
            +
            );
         | 
| 24 | 
            +
            export const expandTabToSplitScreen = createAction("expandTabToSplitScreen");
         | 
| 25 | 
            +
            export const propertiesViewOpen = (unused, meta) => {
         | 
| 26 | 
            +
              return setPanelAsActive("properties", meta);
         | 
| 27 | 
            +
            };
         | 
| 28 | 
            +
            export const createNewDigest = (unused, meta) => {
         | 
| 29 | 
            +
              return (dispatch) => {
         | 
| 30 | 
            +
                dispatch(
         | 
| 31 | 
            +
                  addPanelIfItDoesntAlreadyExist(
         | 
| 32 | 
            +
                    {
         | 
| 33 | 
            +
                      id: "digestTool",
         | 
| 34 | 
            +
                      name: "New Digest",
         | 
| 35 | 
            +
                      active: true,
         | 
| 36 | 
            +
                      canClose: true
         | 
| 37 | 
            +
                    },
         | 
| 38 | 
            +
                    meta
         | 
| 39 | 
            +
                  )
         | 
| 40 | 
            +
                );
         | 
| 41 | 
            +
                dispatch(setPanelAsActive("digestTool", meta));
         | 
| 42 | 
            +
              };
         | 
| 43 | 
            +
            };
         | 
| 44 | 
            +
            export const createNewPCR = (unused, meta) => {
         | 
| 45 | 
            +
              return (dispatch) => {
         | 
| 46 | 
            +
                dispatch(
         | 
| 47 | 
            +
                  addPanelIfItDoesntAlreadyExist(
         | 
| 48 | 
            +
                    {
         | 
| 49 | 
            +
                      id: "pcrTool",
         | 
| 50 | 
            +
                      name: "New PCR",
         | 
| 51 | 
            +
                      active: true,
         | 
| 52 | 
            +
                      canClose: true
         | 
| 53 | 
            +
                    },
         | 
| 54 | 
            +
                    meta
         | 
| 55 | 
            +
                  )
         | 
| 56 | 
            +
                );
         | 
| 57 | 
            +
                dispatch(setPanelAsActive("pcrTool", meta));
         | 
| 58 | 
            +
              };
         | 
| 59 | 
            +
            };
         | 
| 60 | 
            +
             | 
| 61 | 
            +
            export const createNewAlignment = (payload, meta) => {
         | 
| 62 | 
            +
              return (dispatch) => {
         | 
| 63 | 
            +
                dispatch(
         | 
| 64 | 
            +
                  addPanelIfItDoesntAlreadyExist(
         | 
| 65 | 
            +
                    {
         | 
| 66 | 
            +
                      type: "alignment",
         | 
| 67 | 
            +
                      name: "New Alignment",
         | 
| 68 | 
            +
                      active: true,
         | 
| 69 | 
            +
                      canClose: true,
         | 
| 70 | 
            +
                      ...payload
         | 
| 71 | 
            +
                    },
         | 
| 72 | 
            +
                    meta
         | 
| 73 | 
            +
                  )
         | 
| 74 | 
            +
                );
         | 
| 75 | 
            +
                dispatch(setPanelAsActive(payload.id, meta));
         | 
| 76 | 
            +
              };
         | 
| 77 | 
            +
            };
         | 
| 78 | 
            +
             | 
| 79 | 
            +
            export const createNewMismatchesList = (payload, meta) => {
         | 
| 80 | 
            +
              return (dispatch) => {
         | 
| 81 | 
            +
                dispatch(
         | 
| 82 | 
            +
                  addPanelIfItDoesntAlreadyExist(
         | 
| 83 | 
            +
                    {
         | 
| 84 | 
            +
                      type: "mismatches",
         | 
| 85 | 
            +
                      name: "Mismatches",
         | 
| 86 | 
            +
                      active: true,
         | 
| 87 | 
            +
                      canClose: true,
         | 
| 88 | 
            +
                      ...payload
         | 
| 89 | 
            +
                    },
         | 
| 90 | 
            +
                    meta
         | 
| 91 | 
            +
                  )
         | 
| 92 | 
            +
                );
         | 
| 93 | 
            +
                dispatch(setPanelAsActive(payload.id, meta));
         | 
| 94 | 
            +
              };
         | 
| 95 | 
            +
            };
         | 
| 96 | 
            +
             | 
| 97 | 
            +
            export const collapseSplitScreen = (activePanelId, meta) => {
         | 
| 98 | 
            +
              return (dispatch) => {
         | 
| 99 | 
            +
                dispatch(_collapseSplitScreen(activePanelId, meta));
         | 
| 100 | 
            +
                activePanelId && dispatch(setPanelAsActive(activePanelId, meta));
         | 
| 101 | 
            +
              };
         | 
| 102 | 
            +
            };
         | 
| 103 | 
            +
             | 
| 104 | 
            +
            // ------------------------------------
         | 
| 105 | 
            +
            // Reducer
         | 
| 106 | 
            +
            // ------------------------------------
         | 
| 107 | 
            +
            export default createReducer(
         | 
| 108 | 
            +
              {
         | 
| 109 | 
            +
                [addPanelIfItDoesntAlreadyExist]: (state, panelToAdd) => {
         | 
| 110 | 
            +
                  if (
         | 
| 111 | 
            +
                    !state.some((panelGroup) => {
         | 
| 112 | 
            +
                      return panelGroup.some(({ id }) => {
         | 
| 113 | 
            +
                        return id === panelToAdd.id;
         | 
| 114 | 
            +
                      });
         | 
| 115 | 
            +
                    })
         | 
| 116 | 
            +
                  ) {
         | 
| 117 | 
            +
                    return state.map((panelGroup, index) => {
         | 
| 118 | 
            +
                      if (index === 0) return [panelToAdd, ...panelGroup];
         | 
| 119 | 
            +
                      return panelGroup;
         | 
| 120 | 
            +
                    });
         | 
| 121 | 
            +
                  }
         | 
| 122 | 
            +
                  return state;
         | 
| 123 | 
            +
                },
         | 
| 124 | 
            +
                [panelsShownUpdate]: (state, payload) => {
         | 
| 125 | 
            +
                  return payload.filter((group) => group.length); //filter out any empty groups
         | 
| 126 | 
            +
                },
         | 
| 127 | 
            +
                [flipActiveTabFromLinearOrCircularIfNecessary]: (state, setCircActive) => {
         | 
| 128 | 
            +
                  const newState = immer(state, (s) => {
         | 
| 129 | 
            +
                    s.forEach((g) => {
         | 
| 130 | 
            +
                      flipActiveForGroup(g, setCircActive);
         | 
| 131 | 
            +
                    });
         | 
| 132 | 
            +
                  });
         | 
| 133 | 
            +
             | 
| 134 | 
            +
                  return newState;
         | 
| 135 | 
            +
                },
         | 
| 136 | 
            +
                [closePanel]: (state, idToClose) => {
         | 
| 137 | 
            +
                  const newState = state.map((group) => {
         | 
| 138 | 
            +
                    let indexToClose;
         | 
| 139 | 
            +
                    group.forEach(({ id }, i) => {
         | 
| 140 | 
            +
                      if (id === idToClose) indexToClose = i;
         | 
| 141 | 
            +
                    });
         | 
| 142 | 
            +
                    if (indexToClose > -1) {
         | 
| 143 | 
            +
                      return removeItem(group, indexToClose).map((tab, i) => {
         | 
| 144 | 
            +
                        if (i === 0) return { ...tab, active: true };
         | 
| 145 | 
            +
                        else {
         | 
| 146 | 
            +
                          return tab;
         | 
| 147 | 
            +
                        }
         | 
| 148 | 
            +
                      });
         | 
| 149 | 
            +
                    }
         | 
| 150 | 
            +
                    return group;
         | 
| 151 | 
            +
                  });
         | 
| 152 | 
            +
                  return newState.filter((group) => group.length); //filter out any empty groups
         | 
| 153 | 
            +
                },
         | 
| 154 | 
            +
                [_collapseSplitScreen]: (state) => {
         | 
| 155 | 
            +
                  return [flatMap(state)];
         | 
| 156 | 
            +
                },
         | 
| 157 | 
            +
                [expandTabToSplitScreen]: (state, activePanelId) => {
         | 
| 158 | 
            +
                  let panelToMove;
         | 
| 159 | 
            +
                  return [
         | 
| 160 | 
            +
                    state[0]
         | 
| 161 | 
            +
                      .filter((panel) => {
         | 
| 162 | 
            +
                        if (panel.id === activePanelId) {
         | 
| 163 | 
            +
                          panelToMove = panel;
         | 
| 164 | 
            +
                          return false;
         | 
| 165 | 
            +
                        }
         | 
| 166 | 
            +
                        return true;
         | 
| 167 | 
            +
                      })
         | 
| 168 | 
            +
                      .map((panel, i) => {
         | 
| 169 | 
            +
                        return i === 0 ? { ...panel, active: true } : panel;
         | 
| 170 | 
            +
                      }),
         | 
| 171 | 
            +
                    [{ ...panelToMove, active: true }]
         | 
| 172 | 
            +
                  ];
         | 
| 173 | 
            +
                },
         | 
| 174 | 
            +
                [setPanelAsActive]: (state, panelId) => {
         | 
| 175 | 
            +
                  return map(state, (panelGroup) => {
         | 
| 176 | 
            +
                    const isPanelInGroup = panelGroup.some(({ id }) => {
         | 
| 177 | 
            +
                      return panelId === id;
         | 
| 178 | 
            +
                    });
         | 
| 179 | 
            +
                    return panelGroup.map((panel) => {
         | 
| 180 | 
            +
                      return {
         | 
| 181 | 
            +
                        ...panel,
         | 
| 182 | 
            +
                        active:
         | 
| 183 | 
            +
                          panelId === panel.id
         | 
| 184 | 
            +
                            ? true
         | 
| 185 | 
            +
                            : isPanelInGroup
         | 
| 186 | 
            +
                            ? false
         | 
| 187 | 
            +
                            : panel.active
         | 
| 188 | 
            +
                      };
         | 
| 189 | 
            +
                    });
         | 
| 190 | 
            +
                  });
         | 
| 191 | 
            +
                },
         | 
| 192 | 
            +
                [togglePanelFullScreen]: (state, panelId) => {
         | 
| 193 | 
            +
                  return map(state, (panelGroup) => {
         | 
| 194 | 
            +
                    const isPanelInGroup = panelGroup.some(({ id }) => {
         | 
| 195 | 
            +
                      return panelId === id;
         | 
| 196 | 
            +
                    });
         | 
| 197 | 
            +
                    return panelGroup.map((panel) => {
         | 
| 198 | 
            +
                      return {
         | 
| 199 | 
            +
                        ...panel,
         | 
| 200 | 
            +
                        active:
         | 
| 201 | 
            +
                          panelId === panel.id
         | 
| 202 | 
            +
                            ? true
         | 
| 203 | 
            +
                            : isPanelInGroup
         | 
| 204 | 
            +
                            ? false
         | 
| 205 | 
            +
                            : panel.active,
         | 
| 206 | 
            +
                        fullScreen:
         | 
| 207 | 
            +
                          panelId === panel.id
         | 
| 208 | 
            +
                            ? !panel.fullScreen
         | 
| 209 | 
            +
                            : isPanelInGroup
         | 
| 210 | 
            +
                            ? false
         | 
| 211 | 
            +
                            : panel.fullScreen
         | 
| 212 | 
            +
                      };
         | 
| 213 | 
            +
                    });
         | 
| 214 | 
            +
                  });
         | 
| 215 | 
            +
                },
         | 
| 216 | 
            +
                [collapsePanel]: (state, panelToCloseId) => {
         | 
| 217 | 
            +
                  return [
         | 
| 218 | 
            +
                    flatMap(state, (panelGroup) => {
         | 
| 219 | 
            +
                      return panelGroup;
         | 
| 220 | 
            +
                    }).map((panel) => {
         | 
| 221 | 
            +
                      if (panel.id === panelToCloseId) {
         | 
| 222 | 
            +
                        return {
         | 
| 223 | 
            +
                          ...panel,
         | 
| 224 | 
            +
                          active: false
         | 
| 225 | 
            +
                        };
         | 
| 226 | 
            +
                      }
         | 
| 227 | 
            +
                      return panel;
         | 
| 228 | 
            +
                    })
         | 
| 229 | 
            +
                  ];
         | 
| 230 | 
            +
                }
         | 
| 231 | 
            +
              },
         | 
| 232 | 
            +
              [
         | 
| 233 | 
            +
                [
         | 
| 234 | 
            +
                  {
         | 
| 235 | 
            +
                    id: "circular",
         | 
| 236 | 
            +
                    name: "Circular Map",
         | 
| 237 | 
            +
                    active: true
         | 
| 238 | 
            +
                    //   canClose: true
         | 
| 239 | 
            +
                  },
         | 
| 240 | 
            +
                  {
         | 
| 241 | 
            +
                    id: "rail",
         | 
| 242 | 
            +
                    name: "Linear Map",
         | 
| 243 | 
            +
                    active: false
         | 
| 244 | 
            +
                  }
         | 
| 245 | 
            +
                ],
         | 
| 246 | 
            +
                [
         | 
| 247 | 
            +
                  {
         | 
| 248 | 
            +
                    id: "sequence",
         | 
| 249 | 
            +
                    name: "Sequence Map",
         | 
| 250 | 
            +
                    active: true
         | 
| 251 | 
            +
                  },
         | 
| 252 | 
            +
                  {
         | 
| 253 | 
            +
                    id: "properties",
         | 
| 254 | 
            +
                    name: "Properties",
         | 
| 255 | 
            +
                    active: false
         | 
| 256 | 
            +
                  }
         | 
| 257 | 
            +
                ]
         | 
| 258 | 
            +
              ]
         | 
| 259 | 
            +
            );
         | 
| 260 | 
            +
             | 
| 261 | 
            +
            function flipActiveForGroup(group, setCircActive) {
         | 
| 262 | 
            +
              const activeTab = group.find(({ active }) => active);
         | 
| 263 | 
            +
              if (activeTab?.id === (setCircActive ? "rail" : "circular")) {
         | 
| 264 | 
            +
                //we're on the wrong tab type so check if the other tab is in
         | 
| 265 | 
            +
                const newTabToActivate = group.find(
         | 
| 266 | 
            +
                  ({ id }) => id === (setCircActive ? "circular" : "rail")
         | 
| 267 | 
            +
                );
         | 
| 268 | 
            +
                if (newTabToActivate) {
         | 
| 269 | 
            +
                  newTabToActivate.active = true;
         | 
| 270 | 
            +
                  activeTab.active = false;
         | 
| 271 | 
            +
                }
         | 
| 272 | 
            +
              }
         | 
| 273 | 
            +
            }
         | 
| @@ -0,0 +1,23 @@ | |
| 1 | 
            +
            import createMergedDefaultStateReducer from "./utils/createMergedDefaultStateReducer";
         | 
| 2 | 
            +
            import createAction from "./utils/createMetaAction";
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            // ------------------------------------
         | 
| 5 | 
            +
            // Actions
         | 
| 6 | 
            +
            // ------------------------------------
         | 
| 7 | 
            +
            export const updatePartLengthsToHide = createAction("updatePartLengthsToHide");
         | 
| 8 | 
            +
            export const togglePartLengthsToHide = createAction("togglePartLengthsToHide");
         | 
| 9 | 
            +
             | 
| 10 | 
            +
            // ------------------------------------
         | 
| 11 | 
            +
            // Reducer
         | 
| 12 | 
            +
            // ------------------------------------
         | 
| 13 | 
            +
            export default createMergedDefaultStateReducer(
         | 
| 14 | 
            +
              {
         | 
| 15 | 
            +
                [updatePartLengthsToHide]: (state, payload) => {
         | 
| 16 | 
            +
                  return { ...state, ...payload };
         | 
| 17 | 
            +
                },
         | 
| 18 | 
            +
                [togglePartLengthsToHide]: (state) => {
         | 
| 19 | 
            +
                  return { ...state, enabled: !state["enabled"] };
         | 
| 20 | 
            +
                }
         | 
| 21 | 
            +
              },
         | 
| 22 | 
            +
              { enabled: false, min: 0, max: 800 }
         | 
| 23 | 
            +
            );
         |