@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.
Files changed (362) hide show
  1. package/index.umd.js +164777 -135861
  2. package/package.json +78 -2
  3. package/src/AlignmentTool/index.js +16 -0
  4. package/src/AlignmentView/AlignmentVisibilityTool.js +105 -0
  5. package/src/AlignmentView/EditTrackNameDialog.js +34 -0
  6. package/src/AlignmentView/HorizontalPanelDragHandle.js +35 -0
  7. package/src/AlignmentView/Minimap.js +520 -0
  8. package/src/AlignmentView/Mismatches.js +134 -0
  9. package/src/AlignmentView/PairwiseAlignmentView.js +68 -0
  10. package/src/AlignmentView/PerformantSelectionLayer.js +32 -0
  11. package/src/AlignmentView/coerceInitialValue.js +7 -0
  12. package/src/AlignmentView/getGapMap.js +12 -0
  13. package/src/AlignmentView/getGaps.js +27 -0
  14. package/src/AlignmentView/getPairwiseOverviewLinearViewOptions.js +38 -0
  15. package/src/AlignmentView/getTrackFromEvent.js +25 -0
  16. package/src/AlignmentView/index.js +2058 -0
  17. package/src/AlignmentView/isTargetWithinEl.js +6 -0
  18. package/src/AlignmentView/style.css +100 -0
  19. package/src/AlignmentView/updateTrackHelper.js +58 -0
  20. package/src/AutoAnnotate.js +500 -0
  21. package/src/AutoAnnotateBpMatchingDialog.js +208 -0
  22. package/src/CircularView/Axis.js +40 -0
  23. package/src/CircularView/AxisNumbers.js +35 -0
  24. package/src/CircularView/Caret.js +63 -0
  25. package/src/CircularView/CircularDnaSequence.js +73 -0
  26. package/src/CircularView/CircularZoomMinimap.js +16 -0
  27. package/src/CircularView/Cutsite.js +18 -0
  28. package/src/CircularView/Cutsites.js +113 -0
  29. package/src/CircularView/DeletionLayer.js +28 -0
  30. package/src/CircularView/Feature.js +83 -0
  31. package/src/CircularView/Labels/index.js +536 -0
  32. package/src/CircularView/Labels/relaxLabelAngles.js +157 -0
  33. package/src/CircularView/Labels/relaxLabels_DEPRECATED.js +105 -0
  34. package/src/CircularView/Labels/style.css +55 -0
  35. package/src/CircularView/Orf.js +25 -0
  36. package/src/CircularView/Part.js +34 -0
  37. package/src/CircularView/PositionAnnotationOnCircle.js +26 -0
  38. package/src/CircularView/Primer.js +41 -0
  39. package/src/CircularView/RotateCircularViewSlider.js +82 -0
  40. package/src/CircularView/SelectionLayer.js +132 -0
  41. package/src/CircularView/VeTopRightContainer.js +12 -0
  42. package/src/CircularView/ZoomCircularViewSlider.js +62 -0
  43. package/src/CircularView/drawAnnotations.js +433 -0
  44. package/src/CircularView/drawDirectedPiePiece.js +142 -0
  45. package/src/CircularView/getAngleForPositionMidpoint.js +3 -0
  46. package/src/CircularView/getInternalLabel.js +40 -0
  47. package/src/CircularView/getRangeAnglesSpecial.js +12 -0
  48. package/src/CircularView/getYOffset.js +15 -0
  49. package/src/CircularView/index.d.ts +20 -0
  50. package/src/CircularView/index.js +930 -0
  51. package/src/CircularView/normalizeAngle.js +3 -0
  52. package/src/CircularView/normalizeAngleRange.js +9 -0
  53. package/src/CircularView/positionCutsites.js +6 -0
  54. package/src/CircularView/shouldFlipText.js +4 -0
  55. package/src/CircularView/style.css +47 -0
  56. package/src/CircularView/utils/polarToSpecialCartesian.js +7 -0
  57. package/src/CreateAnnotationsPage.js +96 -0
  58. package/src/CreateCustomEnzyme/index.js +337 -0
  59. package/src/CreateCustomEnzyme/style.css +100 -0
  60. package/src/CutsiteFilter/AdditionalCutsiteInfoDialog.js +599 -0
  61. package/src/CutsiteFilter/index.js +408 -0
  62. package/src/CutsiteFilter/style.css +23 -0
  63. package/src/CutsiteFilter/withRestrictionEnzymes.js +15 -0
  64. package/src/DigestTool/AddLaddersDialog.js +82 -0
  65. package/src/DigestTool/DigestTool.js +223 -0
  66. package/src/DigestTool/Ladder.css +20 -0
  67. package/src/DigestTool/Ladder.js +303 -0
  68. package/src/DigestTool/createFragmentLines.js +120 -0
  69. package/src/DigestTool/ladderDefaults.js +26 -0
  70. package/src/DigestTool/ruler.css +89 -0
  71. package/src/Editor/CommandHotkeyHandler.js +44 -0
  72. package/src/Editor/DropHandler.css +21 -0
  73. package/src/Editor/DropHandler.js +64 -0
  74. package/src/Editor/FillWindow.js +46 -0
  75. package/src/Editor/darkmode.css +98 -0
  76. package/src/Editor/index.js +1005 -0
  77. package/src/Editor/style.css +235 -0
  78. package/src/Editor/userDefinedHandlersAndOpts.js +56 -0
  79. package/src/EnzymeViewer/index.js +81 -0
  80. package/src/EnzymeViewer/style.css +6 -0
  81. package/src/FindBar/index.js +411 -0
  82. package/src/FindBar/style.css +46 -0
  83. package/src/GlobalDialog.js +66 -0
  84. package/src/GlobalDialogUtils.js +85 -0
  85. package/src/LinearView/SequenceName.js +15 -0
  86. package/src/LinearView/ZoomLinearView.js +47 -0
  87. package/src/LinearView/index.js +374 -0
  88. package/src/LinearView/style.css +12 -0
  89. package/src/ManageEnzymes/index.js +326 -0
  90. package/src/ManageEnzymes/style.css +100 -0
  91. package/src/MenuBar/defaultConfig.js +149 -0
  92. package/src/MenuBar/index.js +98 -0
  93. package/src/MenuBar/viewSubmenu.js +479 -0
  94. package/src/PCRTool/PCRTool.js +173 -0
  95. package/src/Reflex/Browser.js +107 -0
  96. package/src/Reflex/ReflexContainer.js +802 -0
  97. package/src/Reflex/ReflexElement.js +160 -0
  98. package/src/Reflex/ReflexEvents.js +77 -0
  99. package/src/Reflex/ReflexSplitter.js +205 -0
  100. package/src/Reflex/index.js +5 -0
  101. package/src/Reflex/reflex-styles.css +128 -0
  102. package/src/Reflex/reflex-styles.css.map +9 -0
  103. package/src/RowItem/AnnotationContainerHolder.js +20 -0
  104. package/src/RowItem/AnnotationPositioner.js +27 -0
  105. package/src/RowItem/Axis.js +149 -0
  106. package/src/RowItem/Caret/index.js +64 -0
  107. package/src/RowItem/Caret/style.css +8 -0
  108. package/src/RowItem/Chromatograms/Chromatogram.js +289 -0
  109. package/src/RowItem/CutsiteSelectionLayers.js +47 -0
  110. package/src/RowItem/Cutsites.js +271 -0
  111. package/src/RowItem/DeletionLayers/index.js +113 -0
  112. package/src/RowItem/DeletionLayers/style.css +5 -0
  113. package/src/RowItem/Labels.js +327 -0
  114. package/src/RowItem/Orf.js +109 -0
  115. package/src/RowItem/Orfs.js +35 -0
  116. package/src/RowItem/ReplacementLayers/style.css +5 -0
  117. package/src/RowItem/SelectionLayer/index.js +184 -0
  118. package/src/RowItem/SelectionLayer/style.css +21 -0
  119. package/src/RowItem/Sequence.js +269 -0
  120. package/src/RowItem/StackedAnnotations/PointedAnnotation.js +347 -0
  121. package/src/RowItem/StackedAnnotations/getStructuredBases.js +97 -0
  122. package/src/RowItem/StackedAnnotations/index.js +182 -0
  123. package/src/RowItem/StackedAnnotations/primerBases.js +218 -0
  124. package/src/RowItem/StackedAnnotations/style.css +14 -0
  125. package/src/RowItem/Translations/AASliver.js +190 -0
  126. package/src/RowItem/Translations/Translation.js +162 -0
  127. package/src/RowItem/Translations/index.js +54 -0
  128. package/src/RowItem/Translations/style.css +3 -0
  129. package/src/RowItem/constants.js +3 -0
  130. package/src/RowItem/getCutsiteLabelHeights.js +56 -0
  131. package/src/RowItem/getXStartAndWidthFromNonCircularRange.js +12 -0
  132. package/src/RowItem/getXStartAndWidthOfRangeWrtRow.js +27 -0
  133. package/src/RowItem/getXStartAndWidthOfRowAnnotation.js +19 -0
  134. package/src/RowItem/index.js +647 -0
  135. package/src/RowItem/partOverhangs.js +6 -0
  136. package/src/RowItem/style.css +103 -0
  137. package/src/RowItem/utils.js +32 -0
  138. package/src/RowView/estimateRowHeight.js +184 -0
  139. package/src/RowView/index.d.ts +10 -0
  140. package/src/RowView/index.js +554 -0
  141. package/src/RowView/style.css +12 -0
  142. package/src/SimpleCircularOrLinearView.js +379 -0
  143. package/src/SimpleOligoPreview.js +39 -0
  144. package/src/StatusBar/MeltingTemp.js +81 -0
  145. package/src/StatusBar/index.js +275 -0
  146. package/src/StatusBar/style.css +38 -0
  147. package/src/ToolBar/ToolbarItem.js +194 -0
  148. package/src/ToolBar/alignmentTool.js +503 -0
  149. package/src/ToolBar/array_move.js +10 -0
  150. package/src/ToolBar/cutsiteTool.js +88 -0
  151. package/src/ToolBar/downloadTool.js +38 -0
  152. package/src/ToolBar/editTool.js +26 -0
  153. package/src/ToolBar/featureTool.js +34 -0
  154. package/src/ToolBar/findTool.js +2 -0
  155. package/src/ToolBar/importTool.js +27 -0
  156. package/src/ToolBar/index.js +231 -0
  157. package/src/ToolBar/inlineFindTool.js +38 -0
  158. package/src/ToolBar/oligoTool.js +30 -0
  159. package/src/ToolBar/orfTool.js +141 -0
  160. package/src/ToolBar/partTool.js +47 -0
  161. package/src/ToolBar/printTool.js +31 -0
  162. package/src/ToolBar/redoTool.js +30 -0
  163. package/src/ToolBar/saveTool.js +48 -0
  164. package/src/ToolBar/style.css +138 -0
  165. package/src/ToolBar/undoTool.js +30 -0
  166. package/src/ToolBar/veToolbarIcons/find.png +0 -0
  167. package/src/ToolBar/veToolbarIcons/fullscreen.png +0 -0
  168. package/src/ToolBar/veToolbarIcons/linear.png +0 -0
  169. package/src/ToolBar/veToolbarIcons/pie.png +0 -0
  170. package/src/ToolBar/veToolbarIcons/print.png +0 -0
  171. package/src/ToolBar/veToolbarIcons/save.png +0 -0
  172. package/src/ToolBar/veToolbarIcons/show_cut_sites.png +0 -0
  173. package/src/ToolBar/veToolbarIcons/show_features.png +0 -0
  174. package/src/ToolBar/veToolbarIcons/show_orfs.png +0 -0
  175. package/src/ToolBar/veToolbarIcons/show_primers.png +0 -0
  176. package/src/ToolBar/veToolbarIcons/toggle_views.svg +1 -0
  177. package/src/ToolBar/versionHistoryTool.js +20 -0
  178. package/src/ToolBar/visibilityTool.js +39 -0
  179. package/src/VersionHistoryView/index.js +215 -0
  180. package/src/addAlignment.js +6 -0
  181. package/src/commands/getOveHotkeyDefs.js +12 -0
  182. package/src/commands/index.js +1585 -0
  183. package/src/constants/constants.js +2 -0
  184. package/src/constants/dnaToColor.js +17 -0
  185. package/src/constants/draggableClassnames.js +5 -0
  186. package/src/constants/findToolConstants.js +1 -0
  187. package/src/constants/orfFrameToColorMap.js +10 -0
  188. package/src/constants/rowviewContants.js +3 -0
  189. package/src/constants/specialCutsiteFilterOptions.js +22 -0
  190. package/src/constants.js +1 -0
  191. package/src/createVectorEditor/index.js +138 -0
  192. package/src/createVectorEditor/makeStore.js +34 -0
  193. package/src/fileUtils.js +103 -0
  194. package/src/helperComponents/AddOrEditAnnotationDialog/index.js +711 -0
  195. package/src/helperComponents/AddOrEditAnnotationDialog/style.css +11 -0
  196. package/src/helperComponents/AddOrEditFeatureDialog/index.js +58 -0
  197. package/src/helperComponents/AddOrEditPartDialog/index.js +101 -0
  198. package/src/helperComponents/AddOrEditPrimerDialog/EditCaretPosition.js +234 -0
  199. package/src/helperComponents/AddOrEditPrimerDialog/index.js +329 -0
  200. package/src/helperComponents/AddOrEditPrimerDialog/style.css +41 -0
  201. package/src/helperComponents/EnzymesDialog/index.js +904 -0
  202. package/src/helperComponents/EnzymesDialog/style.css +21 -0
  203. package/src/helperComponents/GoToDialog.js +21 -0
  204. package/src/helperComponents/MergeFeaturesDialog/index.js +253 -0
  205. package/src/helperComponents/MergeFeaturesDialog/style.css +3 -0
  206. package/src/helperComponents/MultipleSeqsDetectedOnImportDialog.js +74 -0
  207. package/src/helperComponents/PinchHelper/PinchHelper.js +24 -0
  208. package/src/helperComponents/PrintDialog/index.js +396 -0
  209. package/src/helperComponents/PrintDialog/style.css +4 -0
  210. package/src/helperComponents/PropertiesDialog/ColorPicker.js +30 -0
  211. package/src/helperComponents/PropertiesDialog/CutsiteProperties.js +185 -0
  212. package/src/helperComponents/PropertiesDialog/FeatureProperties.js +6 -0
  213. package/src/helperComponents/PropertiesDialog/GenbankView.js +74 -0
  214. package/src/helperComponents/PropertiesDialog/GeneralProperties.js +140 -0
  215. package/src/helperComponents/PropertiesDialog/GenericAnnotationProperties.js +406 -0
  216. package/src/helperComponents/PropertiesDialog/OrfProperties.js +117 -0
  217. package/src/helperComponents/PropertiesDialog/PartProperties.js +9 -0
  218. package/src/helperComponents/PropertiesDialog/PrimerProperties.js +19 -0
  219. package/src/helperComponents/PropertiesDialog/SingleEnzymeCutsiteInfo.js +131 -0
  220. package/src/helperComponents/PropertiesDialog/TranslationProperties.js +149 -0
  221. package/src/helperComponents/PropertiesDialog/index.js +166 -0
  222. package/src/helperComponents/PropertiesDialog/style.css +68 -0
  223. package/src/helperComponents/PropertiesDialog/typeField.js +24 -0
  224. package/src/helperComponents/PropertiesDialog/utils.js +37 -0
  225. package/src/helperComponents/RemoveDuplicates/index.js +194 -0
  226. package/src/helperComponents/RenameSequenceDialog.js +7 -0
  227. package/src/helperComponents/SelectDialog.js +150 -0
  228. package/src/helperComponents/UncontrolledSliderWithPlusMinusBtns.css +5 -0
  229. package/src/helperComponents/UncontrolledSliderWithPlusMinusBtns.js +134 -0
  230. package/src/helperComponents/VeWarning/index.js +22 -0
  231. package/src/helperComponents/VeWarning/style.css +10 -0
  232. package/src/helperComponents/createSimpleDialog.js +89 -0
  233. package/src/helperComponents/partTagSearch.js +72 -0
  234. package/src/helperComponents/simpleDialog.css +13 -0
  235. package/src/helperComponents/withHover.js +90 -0
  236. package/src/index.js +60 -0
  237. package/src/redux/alignments.js +373 -0
  238. package/src/redux/annotationLabelVisibility.js +53 -0
  239. package/src/redux/annotationVisibility.js +196 -0
  240. package/src/redux/annotationsToSupport.js +104 -0
  241. package/src/redux/caretPosition.js +27 -0
  242. package/src/redux/charWidth.js +22 -0
  243. package/src/redux/copyOptions.js +34 -0
  244. package/src/redux/createYourOwnEnzyme.js +39 -0
  245. package/src/redux/deletionLayers.js +36 -0
  246. package/src/redux/digestTool.js +34 -0
  247. package/src/redux/featureLengthsToHide.js +27 -0
  248. package/src/redux/findTool.js +79 -0
  249. package/src/redux/frameTranslations.js +52 -0
  250. package/src/redux/hoveredAnnotation.js +24 -0
  251. package/src/redux/index.js +196 -0
  252. package/src/redux/labelLineIntensity.js +25 -0
  253. package/src/redux/labelSize.js +23 -0
  254. package/src/redux/lastSavedId.js +20 -0
  255. package/src/redux/middleware.js +112 -0
  256. package/src/redux/minimumOrfSize.js +24 -0
  257. package/src/redux/modalActions.js +3 -0
  258. package/src/redux/panelsShown.js +273 -0
  259. package/src/redux/partLengthsToHide.js +23 -0
  260. package/src/redux/primerLengthsToHide.js +27 -0
  261. package/src/redux/propertiesTool.js +40 -0
  262. package/src/redux/readOnly.js +28 -0
  263. package/src/redux/replacementLayers.js +36 -0
  264. package/src/redux/restrictionEnzymes.js +52 -0
  265. package/src/redux/selectedAnnotations.js +89 -0
  266. package/src/redux/selectedPartTags.js +21 -0
  267. package/src/redux/selectionLayer.js +46 -0
  268. package/src/redux/sequenceData/circular.js +19 -0
  269. package/src/redux/sequenceData/description.js +21 -0
  270. package/src/redux/sequenceData/features.js +19 -0
  271. package/src/redux/sequenceData/index.js +81 -0
  272. package/src/redux/sequenceData/lineageLines.js +11 -0
  273. package/src/redux/sequenceData/materiallyAvailable.js +19 -0
  274. package/src/redux/sequenceData/name.js +19 -0
  275. package/src/redux/sequenceData/parts.js +19 -0
  276. package/src/redux/sequenceData/primers.js +19 -0
  277. package/src/redux/sequenceData/sequence.js +12 -0
  278. package/src/redux/sequenceData/sharedActionCreators.js +0 -0
  279. package/src/redux/sequenceData/translations.js +20 -0
  280. package/src/redux/sequenceData/upsertDeleteActionGenerator.js +31 -0
  281. package/src/redux/sequenceDataHistory.js +43 -0
  282. package/src/redux/showGCContent.js +23 -0
  283. package/src/redux/toolBar.js +25 -0
  284. package/src/redux/uppercaseSequenceMapFont.js +25 -0
  285. package/src/redux/useAdditionalOrfStartCodons.js +24 -0
  286. package/src/redux/utils/addDashesForMatchStartAndEndForTracks/index.js +71 -0
  287. package/src/redux/utils/addMetaToActionCreators.js +12 -0
  288. package/src/redux/utils/createMergedDefaultStateReducer.js +30 -0
  289. package/src/redux/utils/createMetaAction.js +12 -0
  290. package/src/redux/versionHistory.js +27 -0
  291. package/src/selectors/annotationLabelVisibility.js +2 -0
  292. package/src/selectors/annotationSearchSelector.js +24 -0
  293. package/src/selectors/cdsFeaturesSelector.js +9 -0
  294. package/src/selectors/circularSelector.js +4 -0
  295. package/src/selectors/cutsiteLabelColorSelector.js +6 -0
  296. package/src/selectors/cutsitesByRangeSelector.js +5 -0
  297. package/src/selectors/cutsitesSelector.js +61 -0
  298. package/src/selectors/editorSelector.js +2 -0
  299. package/src/selectors/featuresSelector.js +8 -0
  300. package/src/selectors/filteredCutsitesSelector.js +137 -0
  301. package/src/selectors/filteredFeaturesSelector.js +32 -0
  302. package/src/selectors/filteredPartsSelector.js +57 -0
  303. package/src/selectors/filteredPrimersSelector.js +27 -0
  304. package/src/selectors/filteredRestrictionEnzymesSelector.js +1 -0
  305. package/src/selectors/getAdditionalEnzymesSelector.js +46 -0
  306. package/src/selectors/index.js +41 -0
  307. package/src/selectors/isEnzymeFilterAndSelector.js +1 -0
  308. package/src/selectors/minimumOrfSizeSelector.js +2 -0
  309. package/src/selectors/orfsSelector.js +15 -0
  310. package/src/selectors/partsSelector.js +8 -0
  311. package/src/selectors/primersSelector.js +8 -0
  312. package/src/selectors/restrictionEnzymesSelector.js +34 -0
  313. package/src/selectors/searchLayersSelector.js +71 -0
  314. package/src/selectors/selectedAnnotationsSelector.js +1 -0
  315. package/src/selectors/selectedCutsitesSelector.js +21 -0
  316. package/src/selectors/sequenceDataSelector.js +2 -0
  317. package/src/selectors/sequenceLengthSelector.js +5 -0
  318. package/src/selectors/sequenceSelector.js +4 -0
  319. package/src/selectors/tagsToBoldSelector.js +2 -0
  320. package/src/selectors/translationSearchMatchesSelector.js +14 -0
  321. package/src/selectors/translationsRawSelector.js +8 -0
  322. package/src/selectors/translationsSelector.js +137 -0
  323. package/src/style.css +82 -0
  324. package/src/updateEditor.js +198 -0
  325. package/src/utils/PassThrough.js +3 -0
  326. package/src/utils/addWrappedAddons.js +20 -0
  327. package/src/utils/annotationTypes.js +37 -0
  328. package/src/utils/arrayUtils.js +19 -0
  329. package/src/utils/calculateTickMarkPositionsForGivenRange.js +47 -0
  330. package/src/utils/cleanSequenceData_DEPRECATED/arrayToObjWithIds.js +17 -0
  331. package/src/utils/combineReducersDontIgnoreKeys.js +12 -0
  332. package/src/utils/commandUtils.js +18 -0
  333. package/src/utils/editorUtils.js +223 -0
  334. package/src/utils/getAnnotationClassnames.js +12 -0
  335. package/src/utils/getAnnotationNameAndStartStopString.js +61 -0
  336. package/src/utils/getVisibleStartEnd.js +7 -0
  337. package/src/utils/massageTickSpacing.js +19 -0
  338. package/src/utils/onlyUpdateForKeysDeep.js +31 -0
  339. package/src/utils/prepareRowData.js +64 -0
  340. package/src/utils/proteinUtils.js +3 -0
  341. package/src/utils/pureNoFunc.js +18 -0
  342. package/src/utils/selectionLayer.js +25 -0
  343. package/src/utils/shouldRerender.js +27 -0
  344. package/src/utils/showFileDialog.js +26 -0
  345. package/src/utils/updateLabelsForInViewFeatures.js +55 -0
  346. package/src/utils/updateLabelsForInViewFeaturesCircView.js +41 -0
  347. package/src/utils/useAAColorType.js +8 -0
  348. package/src/utils/useAnnotationLimits.js +42 -0
  349. package/src/utils/useChromatogramPrefs.js +31 -0
  350. package/src/utils/useLadders.js +6 -0
  351. package/src/utils/useMeltingTemp.js +7 -0
  352. package/src/utils/useTmType.js +10 -0
  353. package/src/withEditorInteractions/Keyboard.js +86 -0
  354. package/src/withEditorInteractions/clickAndDragUtils.js +576 -0
  355. package/src/withEditorInteractions/createSequenceInputPopup.js +296 -0
  356. package/src/withEditorInteractions/createSequenceInputPopupStyle.css +85 -0
  357. package/src/withEditorInteractions/getBpsPerRow.js +19 -0
  358. package/src/withEditorInteractions/index.js +1252 -0
  359. package/src/withEditorInteractions/isElementInViewport.js +29 -0
  360. package/src/withEditorInteractions/moveCaret.js +58 -0
  361. package/src/withEditorProps/index.js +1010 -0
  362. package/index.mjs +0 -193228
@@ -0,0 +1,43 @@
1
+ //./selectionLayer.js
2
+ import { createReducer } from "redux-act";
3
+ import createAction from "./utils/createMetaAction";
4
+
5
+ // ------------------------------------
6
+ // Actions
7
+ // ------------------------------------
8
+ export const addToUndoStack = createAction("ADD_TO_UNDO_STACK");
9
+ export const veUndo = createAction("VE_UNDO_META");
10
+ export const veRedo = createAction("VE_REDO_META");
11
+
12
+ // ------------------------------------
13
+ // Reducer
14
+ // ------------------------------------
15
+ export default createReducer(
16
+ {
17
+ [addToUndoStack]: (state, payload) => {
18
+ return {
19
+ ...state,
20
+ future: [],
21
+ past: [...(state.past||[]), payload]
22
+ };
23
+ },
24
+ [veUndo]: (state, presentState) => {
25
+ return {
26
+ ...state,
27
+ past: (state.past||[]).slice(0, -1),
28
+ future: (state.future||[]).concat(presentState)
29
+ };
30
+ },
31
+ [veRedo]: (state, presentState) => {
32
+ return {
33
+ ...state,
34
+ future: (state.future||[]).slice(0, -1),
35
+ past: (state.past||[]).concat(presentState)
36
+ };
37
+ }
38
+ },
39
+ {
40
+ past: [],
41
+ future: []
42
+ }
43
+ );
@@ -0,0 +1,23 @@
1
+ import { createReducer } from "redux-act";
2
+
3
+ //./caretPosition.js
4
+ import createAction from "./utils/createMetaAction";
5
+ // import createReducer from "./utils/createMergedDefaultStateReducer";
6
+
7
+ // ------------------------------------
8
+ // Actions
9
+ // ------------------------------------
10
+ export const toggleShowGCContent = createAction("toggleShowGCContent");
11
+
12
+ // ------------------------------------
13
+ // Reducer
14
+ // ------------------------------------
15
+ export default createReducer(
16
+ {
17
+ [toggleShowGCContent]: (state, val) => {
18
+ localStorage.setItem("showGCContent", val);
19
+ return val;
20
+ }
21
+ },
22
+ window.localStorage.getItem("showGCContent")
23
+ );
@@ -0,0 +1,25 @@
1
+ import createAction from "./utils/createMetaAction";
2
+ import createMergedDefaultStateReducer from "./utils/createMergedDefaultStateReducer";
3
+ // ------------------------------------
4
+ // Actions
5
+ // ------------------------------------
6
+ export const openToolbarItemUpdate = createAction("openToolbarItemUpdate");
7
+
8
+ // ------------------------------------
9
+ // Reducer
10
+ // ------------------------------------
11
+ export default createMergedDefaultStateReducer(
12
+ {
13
+
14
+ [openToolbarItemUpdate]: (state, payload) => {
15
+ return {
16
+ ...state,
17
+ openItem: payload
18
+ };
19
+ },
20
+
21
+ },
22
+ {
23
+ openItem: "",
24
+ }
25
+ );
@@ -0,0 +1,25 @@
1
+ import { createReducer } from "redux-act";
2
+
3
+ //./caretPosition.js
4
+ import createAction from "./utils/createMetaAction";
5
+ // import createReducer from "./utils/createMergedDefaultStateReducer";
6
+
7
+ // ------------------------------------
8
+ // Actions
9
+ // ------------------------------------
10
+ export const updateSequenceCase = createAction("updateSequenceCase");
11
+
12
+ const newVal = window.localStorage.getItem("uppercaseSequenceMapFont");
13
+
14
+ // ------------------------------------
15
+ // Reducer
16
+ // ------------------------------------
17
+ export default createReducer(
18
+ {
19
+ [updateSequenceCase]: (state, payload) => {
20
+ localStorage.setItem("uppercaseSequenceMapFont", payload);
21
+ return payload;
22
+ }
23
+ },
24
+ newVal || "noPreference" // noPreference || uppercase || lowercase
25
+ );
@@ -0,0 +1,24 @@
1
+ //./caretPosition.js
2
+ import { createReducer } from "redux-act";
3
+ import createAction from "./utils/createMetaAction";
4
+ import { noop } from "lodash";
5
+
6
+ // ------------------------------------
7
+ // Actions
8
+ // ------------------------------------
9
+ export const useAdditionalOrfStartCodonsToggle = createAction(
10
+ "useAdditionalOrfStartCodonsToggle",
11
+ noop
12
+ );
13
+
14
+ // ------------------------------------
15
+ // Reducer
16
+ // ------------------------------------
17
+ export default createReducer(
18
+ {
19
+ [useAdditionalOrfStartCodonsToggle]: state => {
20
+ return !state;
21
+ }
22
+ },
23
+ false
24
+ );
@@ -0,0 +1,71 @@
1
+ import { getReverseComplementSequenceAndAnnotations } from "@teselagen/sequence-utils";
2
+
3
+ export default function addDashesForMatchStartAndEndForTracks(alignmentTracks) {
4
+ return alignmentTracks.map((track, i) => {
5
+ // .filter by the user-specified mismatch overrides (initially [])
6
+ return {
7
+ ...track,
8
+ ...addDashesForMatchStartAndEnd(
9
+ track,
10
+ alignmentTracks[0], //send in the ref/template seq every time
11
+ i === 0
12
+ )
13
+ };
14
+ });
15
+ }
16
+
17
+ function addDashesForMatchStartAndEnd(
18
+ { alignmentData, sequenceData: _sequenceData },
19
+ template,
20
+ isTemplate
21
+ ) {
22
+ let sequenceData = _sequenceData;
23
+ const {
24
+ sequenceData: sequenceDataTemplate,
25
+ alignmentData: alignmentDataTemplate
26
+ } = template;
27
+ let { matchStart = 0, matchEnd = 0, strand } = alignmentData;
28
+ if (strand === -1) {
29
+ sequenceData = getReverseComplementSequenceAndAnnotations(sequenceData);
30
+ const oldMatchEnd = matchEnd;
31
+ const oldMatchStart = matchStart;
32
+ matchStart = sequenceData.sequence.length - oldMatchStart;
33
+ matchEnd = sequenceData.sequence.length - oldMatchEnd;
34
+ }
35
+ const { matchStart: matchStartTemplate = 0, matchEnd: matchEndTemplate = 0 } =
36
+ alignmentDataTemplate;
37
+ let newAlignmentData;
38
+ if (isTemplate) {
39
+ newAlignmentData = {
40
+ ...alignmentData,
41
+ sequence:
42
+ sequenceDataTemplate.sequence.slice(0, matchStartTemplate) +
43
+ alignmentData.sequence +
44
+ sequenceDataTemplate.sequence.slice(matchEndTemplate + 1)
45
+ };
46
+ } else {
47
+ newAlignmentData = {
48
+ ...alignmentData,
49
+ sequence:
50
+ sequenceData.sequence.slice(0, matchStart) +
51
+ alignmentData.sequence +
52
+ sequenceData.sequence.slice(matchEnd + 1)
53
+ };
54
+ newAlignmentData = {
55
+ ...alignmentData,
56
+ sequence:
57
+ "-".repeat(Math.max(matchStartTemplate - matchStart, 0)) +
58
+ newAlignmentData.sequence +
59
+ "-".repeat(
60
+ Math.max(
61
+ sequenceDataTemplate.sequence.slice(matchEndTemplate + 1).length -
62
+ (sequenceData.sequence.length - matchEnd) +
63
+ 1,
64
+ 0
65
+ )
66
+ )
67
+ };
68
+ }
69
+
70
+ return { alignmentData: newAlignmentData, sequenceData: sequenceData };
71
+ }
@@ -0,0 +1,12 @@
1
+ export default function addMetaToActionCreators(actions, meta) {
2
+ const metaActions = {};
3
+ Object.keys(actions).forEach(function (actionName) {
4
+ metaActions[actionName] = function (firstArg, additionalMeta) {
5
+ return actions[actionName](firstArg, {
6
+ ...meta,
7
+ ...(additionalMeta || {})
8
+ });
9
+ };
10
+ });
11
+ return metaActions;
12
+ }
@@ -0,0 +1,30 @@
1
+ import { createReducer } from "redux-act";
2
+ //simple wrapper function around createReducer to keep around the default state if type === VECTOR_EDITOR_UPDATE or meta.mergeStateDeep=true
3
+ // example:
4
+ // defaultState = {features: true, parts: true}
5
+ // newState = {features: false}
6
+ // stateToUse = {features: false, parts: true}
7
+ // instead of
8
+ // stateToUse = {features: false}
9
+ // these will also be handled differently in the reducer. The __shouldUseMergedState
10
+ // attribute will make them not clear unless full overwritten
11
+ export default function createMergedDefaultStateReducer(
12
+ handlers,
13
+ defaultState
14
+ ) {
15
+ const reducer = createReducer(handlers);
16
+ function enhancedReducer(newState = {}, action) {
17
+ const stateToUse =
18
+ action &&
19
+ (action.type === "VECTOR_EDITOR_UPDATE" ||
20
+ (action.meta && action.meta.mergeStateDeep))
21
+ ? {
22
+ ...defaultState,
23
+ ...newState
24
+ }
25
+ : newState;
26
+ return reducer(stateToUse, action);
27
+ }
28
+ enhancedReducer.__shouldUseMergedState = true;
29
+ return enhancedReducer;
30
+ }
@@ -0,0 +1,12 @@
1
+ import { createAction } from "redux-act";
2
+
3
+ //this makes it so we can call our actionCreator like:
4
+ //addFeature(myFeatureData, {editorName})
5
+ export default function createMetaAction(actionName, payloadHelper) {
6
+ return createAction(actionName, payloadHelper, function(unused, meta) {
7
+ return {
8
+ ...meta,
9
+ editorName: meta.editorName
10
+ };
11
+ });
12
+ }
@@ -0,0 +1,27 @@
1
+ //./caretPosition.js
2
+ import { createReducer } from "redux-act";
3
+ import createAction from "./utils/createMetaAction";
4
+ import { noop } from "lodash";
5
+
6
+ // ------------------------------------
7
+ // Actions
8
+ // ------------------------------------
9
+ export const toggleViewVersionHistory = createAction(
10
+ "TOGGLE_VIEW_VERSION_HISTORY",
11
+ noop
12
+ ); //NOTE!!:: second argument sanitizes actions so no payload is passed
13
+
14
+ // ------------------------------------
15
+ // Reducer
16
+ // ------------------------------------
17
+ export default createReducer(
18
+ {
19
+
20
+ [toggleViewVersionHistory]: state => {
21
+ return {viewVersionHistory: !state.viewVersionHistory};
22
+ }
23
+ },
24
+ {
25
+ viewVersionHistory: false
26
+ }
27
+ );
@@ -0,0 +1,2 @@
1
+ const sequenceDataSelector = state => state.sequenceData;
2
+ export default sequenceDataSelector;
@@ -0,0 +1,24 @@
1
+ import { createSelector } from "reselect";
2
+ import { filter } from "lodash";
3
+ export const searchableTypes = ["parts", "features", "primers"];
4
+
5
+ function annotationSearchSelector(isOpen, searchString, ...rest) {
6
+ if (!searchString || !isOpen) {
7
+ return [];
8
+ }
9
+ return searchableTypes.map((type, i) => {
10
+ const annotations = rest[i];
11
+ return filter(annotations, (ann) =>
12
+ ann.name
13
+ .toLowerCase()
14
+ .includes(searchString ? searchString.toLowerCase() : "")
15
+ );
16
+ });
17
+ }
18
+
19
+ export default createSelector(
20
+ (state) => state.findTool && state.findTool.isOpen,
21
+ (state) => state.findTool && state.findTool.searchText,
22
+ ...searchableTypes.map((type) => (state) => state.sequenceData[type]),
23
+ annotationSearchSelector
24
+ );
@@ -0,0 +1,9 @@
1
+ import { createSelector } from "reselect";
2
+ import { filter } from "lodash";
3
+ import featuresSelector from "./featuresSelector";
4
+
5
+ function cdsFeaturesRawSelector(features) {
6
+ return filter(features, ({ type }) => type && type.toUpperCase() === "CDS");
7
+ }
8
+
9
+ export default createSelector(featuresSelector, cdsFeaturesRawSelector);
@@ -0,0 +1,4 @@
1
+ import sequenceDataSelector from "./sequenceDataSelector";
2
+ export default function(state) {
3
+ return sequenceDataSelector(state).circular;
4
+ }
@@ -0,0 +1,6 @@
1
+ import { createSelector } from "reselect";
2
+ import sequenceDataSelector from "./sequenceDataSelector";
3
+
4
+ export default createSelector(sequenceDataSelector, function(sequenceData) {
5
+ return sequenceData.cutsiteLabelColors;
6
+ });
@@ -0,0 +1,5 @@
1
+ // import cutsitesSelector from './cutsitesSelector';
2
+ // export default function (state) {
3
+ // var {cutsites} = cutsitesSelector(state)
4
+
5
+ // }
@@ -0,0 +1,61 @@
1
+ import shortid from "shortid";
2
+ import circularSelector from "./circularSelector";
3
+ import sequenceSelector from "./sequenceSelector";
4
+ import restrictionEnzymesSelector from "./restrictionEnzymesSelector";
5
+ import cutsiteLabelColorSelector from "./cutsiteLabelColorSelector";
6
+ import { createSelector } from "reselect";
7
+
8
+ import { flatMap as flatmap, map } from "lodash";
9
+ import { getCutsitesFromSequence } from "@teselagen/sequence-utils";
10
+ import { getLowerCaseObj } from "../utils/arrayUtils";
11
+
12
+ function cutsitesSelector(sequence, circular, enzymeList, cutsiteLabelColors) {
13
+ //get the cutsites grouped by enzyme
14
+ const cutsitesByName = getLowerCaseObj(
15
+ getCutsitesFromSequence(sequence, circular, map(enzymeList))
16
+ );
17
+ //tag each cutsite with a unique id
18
+ const cutsitesById = {};
19
+ Object.keys(cutsitesByName).forEach(function (enzymeName) {
20
+ const cutsitesForEnzyme = cutsitesByName[enzymeName];
21
+ cutsitesForEnzyme.forEach(function (cutsite) {
22
+ const numberOfCuts = cutsitesByName[enzymeName].length;
23
+ const uniqueId = shortid();
24
+ cutsite.id = uniqueId;
25
+ cutsite.numberOfCuts = numberOfCuts;
26
+ cutsite.annotationType = "cutsite";
27
+ cutsitesById[uniqueId] = cutsite;
28
+ const mergedCutsiteColors = Object.assign(
29
+ { single: "salmon", double: "lightblue", multi: "lightgrey" },
30
+ cutsiteLabelColors
31
+ );
32
+ if (numberOfCuts === 1) {
33
+ cutsite.labelColor = mergedCutsiteColors.single;
34
+ cutsite.labelClassname = "singleCutter";
35
+ } else if (numberOfCuts === 2) {
36
+ cutsite.labelColor = mergedCutsiteColors.double;
37
+ cutsite.labelClassname = "doubleCutter";
38
+ } else {
39
+ cutsite.labelColor = mergedCutsiteColors.multi;
40
+ cutsite.labelClassname = "multiCutter";
41
+ }
42
+ });
43
+ });
44
+ // create an array of the cutsites
45
+ const cutsitesArray = flatmap(cutsitesByName, function (cutsitesForEnzyme) {
46
+ return cutsitesForEnzyme;
47
+ });
48
+ return {
49
+ cutsitesByName,
50
+ cutsitesById,
51
+ cutsitesArray
52
+ };
53
+ }
54
+
55
+ export default createSelector(
56
+ sequenceSelector,
57
+ circularSelector,
58
+ restrictionEnzymesSelector,
59
+ cutsiteLabelColorSelector,
60
+ cutsitesSelector
61
+ );
@@ -0,0 +1,2 @@
1
+ const sequenceDataSelector = state => state.sequenceData;
2
+ export default sequenceDataSelector;
@@ -0,0 +1,8 @@
1
+ import { createSelector } from "reselect";
2
+ import sequenceDataSelector from "./sequenceDataSelector";
3
+
4
+ function featuresRawSelector(sequenceData) {
5
+ return sequenceData.features;
6
+ }
7
+
8
+ export default createSelector(sequenceDataSelector, featuresRawSelector);
@@ -0,0 +1,137 @@
1
+ import flatmap from "lodash/flatMap";
2
+ import { createSelector } from "reselect";
3
+ import cutsitesSelector from "./cutsitesSelector";
4
+ import filteredRestrictionEnzymesSelector from "./filteredRestrictionEnzymesSelector";
5
+ import specialCutsiteFilterOptions from "../constants/specialCutsiteFilterOptions";
6
+ import { flatMap } from "lodash";
7
+ import isEnzymeFilterAndSelector from "./isEnzymeFilterAndSelector";
8
+
9
+ export default createSelector(
10
+ cutsitesSelector,
11
+ filteredRestrictionEnzymesSelector,
12
+ isEnzymeFilterAndSelector,
13
+ (state, addEnzs, enzymeGroupsOverride) => enzymeGroupsOverride,
14
+ function (
15
+ { cutsitesByName },
16
+ filteredRestrictionEnzymes,
17
+ isEnzymeFilterAnd,
18
+ enzymeGroupsOverride
19
+ ) {
20
+ const returnVal = {
21
+ cutsitesByName: {}
22
+ };
23
+ // const cutsitesByName = getLowerCaseObj(cutsitesByName);
24
+ const hiddenEnzymesByName = {};
25
+ let filteredEnzymes = [];
26
+ let enzymesFromGroups = [];
27
+ let hasUserGroup;
28
+ let groupCount = 0;
29
+ //handle adding enzymes that are included in user created groups
30
+ filteredRestrictionEnzymes.forEach((e) => {
31
+ if (e.value.includes("__userCreatedGroup")) {
32
+ hasUserGroup = true;
33
+ const existingGroups = {
34
+ ...window.getExistingEnzymeGroups(),
35
+ ...enzymeGroupsOverride
36
+ };
37
+ const enzymes =
38
+ existingGroups[e.value.replace("__userCreatedGroup", "")] || [];
39
+ const zs = flatMap(enzymes, (e) => (e ? { value: e } : []));
40
+ filteredEnzymes = filteredEnzymes.concat(zs);
41
+ enzymesFromGroups = enzymesFromGroups.concat(zs);
42
+ groupCount += 1;
43
+ } else if (e.isHidden) {
44
+ hiddenEnzymesByName[e.value] = e;
45
+ } else {
46
+ if (!e) return;
47
+ groupCount += 1;
48
+ filteredEnzymes.push(e);
49
+ }
50
+ });
51
+ const cutSiteList = [];
52
+ if (!filteredEnzymes || (filteredEnzymes.length === 0 && !hasUserGroup)) {
53
+ returnVal.cutsitesByName = cutsitesByName;
54
+ } else {
55
+ //loop through each filter option ('Single Cutters', 'BamHI')
56
+ filteredEnzymes.forEach(function ({ value, ...rest }) {
57
+ if (!value) {
58
+ console.error(`Missing value for filtered enzyme`, rest);
59
+ return;
60
+ }
61
+ const lowerValue = value.toLowerCase();
62
+ const cutsThisManyTimes =
63
+ specialCutsiteFilterOptions[value] &&
64
+ specialCutsiteFilterOptions[value].cutsThisManyTimes;
65
+ if (value === "type2s") {
66
+ Object.keys(cutsitesByName).forEach(function (key) {
67
+ if (hiddenEnzymesByName[key]) return; //don't show that cutsite
68
+ if (
69
+ cutsitesByName[key].length &&
70
+ cutsitesByName[key][0]?.restrictionEnzyme?.isType2S
71
+ ) {
72
+ cutSiteList.push(key);
73
+ returnVal.cutsitesByName[key] = cutsitesByName[key];
74
+ }
75
+ });
76
+ } else if (cutsThisManyTimes > 0) {
77
+ //the cutter type is either 1,2,3 for single, double or triple cutters
78
+ Object.keys(cutsitesByName).forEach(function (key) {
79
+ if (hiddenEnzymesByName[key]) return; //don't show that cutsite
80
+ if (cutsitesByName[key].length === cutsThisManyTimes) {
81
+ cutSiteList.push(key);
82
+ returnVal.cutsitesByName[key] = cutsitesByName[key];
83
+ }
84
+ });
85
+ } else {
86
+ if (hiddenEnzymesByName[lowerValue]) return; //don't show that cutsite
87
+ //normal enzyme ('BamHI')
88
+ if (!cutsitesByName[lowerValue]) return;
89
+ cutSiteList.push(lowerValue);
90
+ returnVal.cutsitesByName[lowerValue] = cutsitesByName[lowerValue];
91
+ }
92
+ });
93
+ }
94
+
95
+ const enzymeCounts = {};
96
+ cutSiteList.forEach(
97
+ (enzyme) =>
98
+ (enzymeCounts[enzyme] = enzymeCounts[enzyme]
99
+ ? enzymeCounts[enzyme] + 1
100
+ : 1)
101
+ );
102
+
103
+ const intersectionCutSites = [];
104
+ Object.keys(enzymeCounts).forEach((key) => {
105
+ if (enzymeCounts[key] === groupCount) intersectionCutSites.push(key);
106
+ });
107
+
108
+ returnVal.cutsiteIntersectionCount = intersectionCutSites.length;
109
+
110
+ const cutsbyname_AND = {};
111
+ intersectionCutSites.forEach((value) => {
112
+ cutsbyname_AND[value] = cutsitesByName[value];
113
+ });
114
+
115
+ returnVal.cutsiteTotalCount = Object.keys(returnVal.cutsitesByName).length;
116
+
117
+ if (isEnzymeFilterAnd && returnVal.cutsiteIntersectionCount > 0) {
118
+ returnVal.cutsitesByName = cutsbyname_AND;
119
+ }
120
+
121
+ returnVal.cutsitesArray = flatmap(
122
+ returnVal.cutsitesByName,
123
+ (cutsitesByNameArray) => cutsitesByNameArray
124
+ );
125
+ returnVal.cutsitesById = returnVal.cutsitesArray.reduce(function (
126
+ obj,
127
+ item
128
+ ) {
129
+ if (item && item.id) {
130
+ obj[item.id] = item;
131
+ }
132
+ return obj;
133
+ },
134
+ {});
135
+ return returnVal;
136
+ }
137
+ );
@@ -0,0 +1,32 @@
1
+ import { createSelector } from "reselect";
2
+ import { omitBy } from "lodash";
3
+ import featuresSelector from "./featuresSelector";
4
+ import sequenceLengthSelector from "./sequenceLengthSelector";
5
+ import { hideAnnByLengthFilter } from "../utils/editorUtils";
6
+
7
+ function filteredFeaturesSelector(
8
+ features,
9
+ seqLen,
10
+ featureIndividualToHide,
11
+ featureTypesToHide,
12
+ lengthsToHide
13
+ ) {
14
+ return omitBy(features, (ann) => {
15
+ const hideIndividually = featureIndividualToHide[ann.id];
16
+ const hideFeaturesByType = featureTypesToHide[ann.type];
17
+ return (
18
+ hideAnnByLengthFilter(lengthsToHide, ann, seqLen) ||
19
+ hideFeaturesByType ||
20
+ hideIndividually
21
+ );
22
+ });
23
+ }
24
+
25
+ export default createSelector(
26
+ featuresSelector,
27
+ sequenceLengthSelector,
28
+ (state) => state.annotationVisibility.featureIndividualToHide,
29
+ (state) => state.annotationVisibility.featureTypesToHide,
30
+ (state) => state.featureLengthsToHide,
31
+ filteredFeaturesSelector
32
+ );
@@ -0,0 +1,57 @@
1
+ import { createSelector } from "reselect";
2
+ import partsSelector from "./partsSelector";
3
+ import tagsToBoldSelector from "./tagsToBoldSelector";
4
+ import { some, keyBy, omitBy } from "lodash";
5
+ import { map } from "lodash";
6
+ import sequenceLengthSelector from "./sequenceLengthSelector";
7
+ import { hideAnnByLengthFilter } from "../utils/editorUtils";
8
+ import { addWrappedAddons } from "../utils/addWrappedAddons";
9
+
10
+ function filteredPartsSelector(
11
+ parts,
12
+ seqLen,
13
+ partIndividualToHide,
14
+ tagsToBold,
15
+ lengthsToHide
16
+ ) {
17
+ if (tagsToBold) {
18
+ const keyedTagsToBold = keyBy(tagsToBold, "value");
19
+
20
+ return map(parts || {}, (p) => {
21
+ if (p.tags) {
22
+ if (
23
+ some(p.tags, (tagId) => {
24
+ return keyedTagsToBold[tagId];
25
+ })
26
+ ) {
27
+ return {
28
+ ...p,
29
+ className: "partWithSelectedTag",
30
+ labelClassName: "partWithSelectedTag",
31
+ highPriorityLabel: true
32
+ };
33
+ } else {
34
+ return p;
35
+ }
36
+ }
37
+ });
38
+ }
39
+
40
+ const toRet = map(
41
+ omitBy(parts, (ann) => {
42
+ const hideIndividually = partIndividualToHide[ann.id];
43
+ return (
44
+ hideAnnByLengthFilter(lengthsToHide, ann, seqLen) || hideIndividually
45
+ );
46
+ })
47
+ );
48
+ return addWrappedAddons(toRet, seqLen);
49
+ }
50
+ export default createSelector(
51
+ partsSelector,
52
+ sequenceLengthSelector,
53
+ (state) => state.annotationVisibility.partIndividualToHide,
54
+ tagsToBoldSelector,
55
+ (state) => state.partLengthsToHide,
56
+ filteredPartsSelector
57
+ );