@teselagen/ove 0.0.14 → 0.0.16

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 +164825 -135871
  2. package/package.json +78 -9
  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,27 @@
1
+ import { createSelector } from "reselect";
2
+ import { omitBy } from "lodash";
3
+ import primersSelector from "./primersSelector";
4
+ import sequenceLengthSelector from "./sequenceLengthSelector";
5
+ import { hideAnnByLengthFilter } from "../utils/editorUtils";
6
+
7
+ function filteredPrimersSelector(
8
+ primers,
9
+ seqLen,
10
+ primerIndividualToHide,
11
+ lengthsToHide
12
+ ) {
13
+ return omitBy(primers, (ann) => {
14
+ const hideIndividually = primerIndividualToHide[ann.id];
15
+ return (
16
+ hideAnnByLengthFilter(lengthsToHide, ann, seqLen) || hideIndividually
17
+ );
18
+ });
19
+ }
20
+
21
+ export default createSelector(
22
+ primersSelector,
23
+ sequenceLengthSelector,
24
+ (state) => state.annotationVisibility.primerIndividualToHide,
25
+ (state) => state.primerLengthsToHide,
26
+ filteredPrimersSelector
27
+ );
@@ -0,0 +1 @@
1
+ export default state => state.restrictionEnzymes.filteredRestrictionEnzymes;
@@ -0,0 +1,46 @@
1
+ import { pickBy } from "lodash";
2
+ import { createSelector } from "reselect";
3
+ import { getLowerCaseObj } from "../utils/arrayUtils";
4
+ import { getCustomEnzymes } from "../utils/editorUtils";
5
+
6
+ export default createSelector(
7
+ () => window.localStorage.getItem("customEnzymes"),
8
+ (state, additionalEnzymes) => additionalEnzymes,
9
+ (customEnzymesString, additionalEnzymes) => {
10
+ return getLowerCaseObj(
11
+ pickBy(
12
+ {
13
+ ...additionalEnzymes,
14
+ ...getCustomEnzymes(customEnzymesString)
15
+ },
16
+ (val, key) => {
17
+ if (!val) {
18
+ console.error(
19
+ "43ti3523: Error: Missing enzyme data for key: ",
20
+ key,
21
+ "Ignoring this enzyme"
22
+ );
23
+ return false;
24
+ }
25
+
26
+ // eslint-disable-next-line no-unused-vars
27
+ for (const prop of [
28
+ "forwardRegex",
29
+ "reverseRegex",
30
+ "topSnipOffset",
31
+ "bottomSnipOffset",
32
+ "site"
33
+ ]) {
34
+ if (val[prop] === undefined || val[prop] === null) {
35
+ console.error(
36
+ `23483g93h Error: Missing property ${prop} for enzyme ${key}. Ignoring this enzyme`
37
+ );
38
+ return false;
39
+ }
40
+ }
41
+ return true;
42
+ }
43
+ )
44
+ );
45
+ }
46
+ );
@@ -0,0 +1,41 @@
1
+ import cutsitesSelector from "./cutsitesSelector";
2
+ import getAdditionalEnzymesSelector from "./getAdditionalEnzymesSelector";
3
+ import translationsSelector from "./translationsSelector";
4
+ import sequenceLengthSelector from "./sequenceLengthSelector";
5
+ import sequenceDataSelector from "./sequenceDataSelector";
6
+ import sequenceSelector from "./sequenceSelector";
7
+ import circularSelector from "./circularSelector";
8
+ import orfsSelector from "./orfsSelector";
9
+ import selectedCutsitesSelector from "./selectedCutsitesSelector";
10
+ import filteredRestrictionEnzymesSelector from "./filteredRestrictionEnzymesSelector";
11
+ import filteredCutsitesSelector from "./filteredCutsitesSelector";
12
+ import searchLayersSelector from "./searchLayersSelector";
13
+ import annotationSearchSelector from "./annotationSearchSelector";
14
+ import restrictionEnzymesSelector from "./restrictionEnzymesSelector";
15
+ import filteredFeaturesSelector from "./filteredFeaturesSelector";
16
+ import filteredPrimersSelector from "./filteredPrimersSelector";
17
+ import cutsiteLabelColorSelector from "./cutsiteLabelColorSelector";
18
+ import filteredPartsSelector from "./filteredPartsSelector";
19
+ import isEnzymeFilterAndSelector from "./isEnzymeFilterAndSelector";
20
+
21
+ export default {
22
+ translationsSelector,
23
+ getAdditionalEnzymesSelector,
24
+ cutsitesSelector,
25
+ sequenceDataSelector,
26
+ sequenceLengthSelector,
27
+ selectedCutsitesSelector,
28
+ orfsSelector,
29
+ circularSelector,
30
+ annotationSearchSelector,
31
+ searchLayersSelector,
32
+ filteredCutsitesSelector,
33
+ filteredRestrictionEnzymesSelector,
34
+ filteredPrimersSelector,
35
+ filteredFeaturesSelector,
36
+ filteredPartsSelector,
37
+ isEnzymeFilterAndSelector,
38
+ restrictionEnzymesSelector,
39
+ sequenceSelector,
40
+ cutsiteLabelColorSelector
41
+ };
@@ -0,0 +1 @@
1
+ export default (state) => state.restrictionEnzymes.isEnzymeFilterAnd;
@@ -0,0 +1,2 @@
1
+ const minimumOrfSizeSelector = state => state.minimumOrfSize;
2
+ export default minimumOrfSizeSelector;
@@ -0,0 +1,15 @@
1
+ import circularSelector from "./circularSelector";
2
+ import sequenceSelector from "./sequenceSelector";
3
+ import minimumOrfSizeSelector from "./minimumOrfSizeSelector";
4
+ import { findOrfsInPlasmid } from "@teselagen/sequence-utils";
5
+ import { createSelector } from "reselect";
6
+
7
+ export default createSelector(
8
+ sequenceSelector,
9
+ circularSelector,
10
+ minimumOrfSizeSelector,
11
+ (state) => state.useAdditionalOrfStartCodons,
12
+ findOrfsInPlasmid
13
+ );
14
+
15
+ //tiny
@@ -0,0 +1,8 @@
1
+ import { createSelector } from "reselect";
2
+ import sequenceDataSelector from "./sequenceDataSelector";
3
+
4
+ function partsRawSelector(sequenceData) {
5
+ return sequenceData.parts;
6
+ }
7
+
8
+ export default createSelector(sequenceDataSelector, partsRawSelector);
@@ -0,0 +1,8 @@
1
+ import { createSelector } from "reselect";
2
+ import sequenceDataSelector from "./sequenceDataSelector";
3
+
4
+ function primersRawSelector(sequenceData) {
5
+ return sequenceData.primers;
6
+ }
7
+
8
+ export default createSelector(sequenceDataSelector, primersRawSelector);
@@ -0,0 +1,34 @@
1
+ import { forEach } from "lodash";
2
+ import { createSelector } from "reselect";
3
+ import {
4
+ defaultEnzymesByName,
5
+ aliasedEnzymesByName
6
+ } from "@teselagen/sequence-utils";
7
+
8
+ export default createSelector(
9
+ () => defaultEnzymesByName,
10
+ (state, additionalEnzymes) => {
11
+ return additionalEnzymes;
12
+ },
13
+ () => localStorage.getItem("enzymeGroups"), //it should recompute if the enzyme groups change in localstorage
14
+ (defaultEnzymesByName, additionalEnzymes) => {
15
+ const enzymesFromGroups = {};
16
+ forEach(window.getExistingEnzymeGroups(), (group) => {
17
+ forEach(group, (enzymeName) => {
18
+ const enzyme = { ...aliasedEnzymesByName, ...additionalEnzymes }[
19
+ enzymeName.toLowerCase()
20
+ ];
21
+ if (!enzyme) {
22
+ console.warn("ruh roh, no enzyme found for: ", enzymeName);
23
+ } else {
24
+ enzymesFromGroups[enzymeName.toLowerCase()] = enzyme;
25
+ }
26
+ });
27
+ });
28
+ return {
29
+ ...defaultEnzymesByName,
30
+ ...additionalEnzymes,
31
+ ...enzymesFromGroups
32
+ };
33
+ }
34
+ );
@@ -0,0 +1,71 @@
1
+ import { findSequenceMatches } from "@teselagen/sequence-utils";
2
+ import sequenceSelector from "./sequenceSelector";
3
+ import { createSelector } from "reselect";
4
+ import circularSelector from "./circularSelector";
5
+
6
+ function searchLayersSelector(
7
+ sequence,
8
+ isCircular,
9
+ isOpen,
10
+ searchString,
11
+ ambiguousOrLiteral,
12
+ dnaOrAA,
13
+ isProtein,
14
+ proteinSequence
15
+ ) {
16
+ if (!searchString || !isOpen) {
17
+ return [];
18
+ }
19
+ if (isProtein) {
20
+ const searchingDna = dnaOrAA === "DNA";
21
+ const matches = findSequenceMatches(
22
+ searchingDna ? sequence : proteinSequence,
23
+ searchString,
24
+ {
25
+ isCircular: false,
26
+ isProteinSequence: true,
27
+ isAmbiguous: ambiguousOrLiteral === "AMBIGUOUS",
28
+ // isProteinSearch: dnaOrAA !== "DNA",
29
+ searchReverseStrand: false
30
+ }
31
+ ).sort(({ start }, { start: start2 }) => {
32
+ return start - start2;
33
+ });
34
+ return searchingDna
35
+ ? matches
36
+ : matches.map(({ start, end, ...rest }) => ({
37
+ ...rest,
38
+ isSearchLayer: true,
39
+ start: start * 3,
40
+ end: end * 3 + 2
41
+ }));
42
+ }
43
+ const matches = findSequenceMatches(sequence, searchString, {
44
+ isCircular,
45
+ isAmbiguous: ambiguousOrLiteral === "AMBIGUOUS",
46
+ isProteinSearch: dnaOrAA !== "DNA",
47
+ searchReverseStrand: true
48
+ }).sort(({ start }, { start: start2 }) => {
49
+ return start - start2;
50
+ });
51
+ return matches.map((match) => ({
52
+ ...match,
53
+ forward: !match.bottomStrand,
54
+ className:
55
+ "veSearchLayer " +
56
+ (match.bottomStrand ? " veSearchLayerBottomStrand" : ""),
57
+ isSearchLayer: true
58
+ }));
59
+ }
60
+
61
+ export default createSelector(
62
+ sequenceSelector,
63
+ circularSelector,
64
+ (state) => state.findTool && state.findTool.isOpen,
65
+ (state) => state.findTool && state.findTool.searchText,
66
+ (state) => state.findTool && state.findTool.ambiguousOrLiteral,
67
+ (state) => state.findTool && state.findTool.dnaOrAA,
68
+ (state) => state.sequenceData.isProtein,
69
+ (state) => state.sequenceData.proteinSequence,
70
+ searchLayersSelector
71
+ );
@@ -0,0 +1 @@
1
+ export default state => state.selectedAnnotations;
@@ -0,0 +1,21 @@
1
+ import { createSelector } from "reselect";
2
+ import selectedAnnotationsSelector from "./selectedAnnotationsSelector";
3
+
4
+ export default createSelector(
5
+ selectedAnnotationsSelector,
6
+ function (selectedAnnotations) {
7
+ const { idStack, idMap } = selectedAnnotations;
8
+ const cutsiteIdMap = {};
9
+ const cutsiteIdStack = idStack.filter(function (id) {
10
+ if (idMap[id].annotationType === "cutsite") {
11
+ cutsiteIdMap[id] = idMap[id];
12
+ return true;
13
+ }
14
+ return false;
15
+ });
16
+ return {
17
+ idStack: cutsiteIdStack,
18
+ idMap: cutsiteIdMap
19
+ };
20
+ }
21
+ );
@@ -0,0 +1,2 @@
1
+ const sequenceDataSelector = state => state.sequenceData;
2
+ export default sequenceDataSelector;
@@ -0,0 +1,5 @@
1
+ import sequenceSelector from "./sequenceSelector";
2
+
3
+ export default function(state) {
4
+ return sequenceSelector(state).length;
5
+ }
@@ -0,0 +1,4 @@
1
+ import sequenceDataSelector from "./sequenceDataSelector";
2
+ export default function(state) {
3
+ return sequenceDataSelector(state).sequence;
4
+ }
@@ -0,0 +1,2 @@
1
+ const tagsToBoldSelector = (state) => state.selectedPartTags.parts;
2
+ export default tagsToBoldSelector;
@@ -0,0 +1,14 @@
1
+ import { createSelector } from "reselect";
2
+ import searchLayersSelector from "./searchLayersSelector";
3
+
4
+ export default createSelector(
5
+ searchLayersSelector,
6
+ state => state.findTool && state.findTool.dnaOrAA,
7
+ state => state.findTool && state.findTool.highlightAll,
8
+ state => state.findTool && state.findTool.matchNumber,
9
+ (searchLayers, dnaOrAA, highlightAll, matchNumber) => {
10
+ if (dnaOrAA === "DNA") return [];
11
+ if (!highlightAll) return [searchLayers[matchNumber]];
12
+ return searchLayers;
13
+ }
14
+ );
@@ -0,0 +1,8 @@
1
+ import { createSelector } from "reselect";
2
+ import sequenceDataSelector from "./sequenceDataSelector";
3
+
4
+ function translationsRawSelector(sequenceData) {
5
+ return sequenceData.translations;
6
+ }
7
+
8
+ export default createSelector(sequenceDataSelector, translationsRawSelector);
@@ -0,0 +1,137 @@
1
+ import { reduce } from "lodash";
2
+ import uuid from "shortid";
3
+ import sequenceSelector from "./sequenceSelector";
4
+ import orfsSelector from "./orfsSelector";
5
+ import { createSelector } from "reselect";
6
+
7
+ import { getAminoAcidDataForEachBaseOfDna } from "@teselagen/sequence-utils";
8
+ import each from "lodash/each";
9
+ import translationsRawSelector from "./translationsRawSelector";
10
+ import translationSearchMatchesSelector from "./translationSearchMatchesSelector";
11
+ import { normalizePositionByRangeLength } from "@teselagen/range-utils";
12
+ import cdsFeaturesSelector from "./cdsFeaturesSelector";
13
+ import circularSelector from "./circularSelector";
14
+
15
+ function translationsSelector(
16
+ isCircular,
17
+ translationSearchMatches,
18
+ sequence,
19
+ orfs,
20
+ showOrfTranslations,
21
+ showOrfs,
22
+ cdsFeatures,
23
+ showCdsFeatureTranslations,
24
+ showFeatures,
25
+ translations,
26
+ frameTranslations
27
+ ) {
28
+ const translationsToPass = {
29
+ ...translationSearchMatches.reduce((acc, match) => {
30
+ if (!match) return acc;
31
+ const id = match.id || uuid();
32
+ acc[id] = {
33
+ ...match,
34
+ id,
35
+ translationType: "AA Search Match",
36
+ isOrf: true, //pass isOrf = true here in order to not have it show up in the properties window
37
+ forward: !match.bottomStrand
38
+ };
39
+ return acc;
40
+ }, {}),
41
+ ...reduce(
42
+ translations,
43
+ (acc, translation) => {
44
+ if (!translation.isOrf) {
45
+ acc[translation.id] = {
46
+ ...translation,
47
+ translationType: "User Created"
48
+ };
49
+ }
50
+ return acc;
51
+ },
52
+ {}
53
+ ),
54
+ ...(showOrfTranslations && showOrfs
55
+ ? reduce(
56
+ orfs,
57
+ (acc, orf) => {
58
+ acc[orf.id] = { ...orf, translationType: "ORF" };
59
+ return acc;
60
+ },
61
+ {}
62
+ )
63
+ : {}),
64
+ ...(showCdsFeatureTranslations &&
65
+ showFeatures &&
66
+ reduce(
67
+ cdsFeatures,
68
+ (acc, cdsFeature) => {
69
+ acc[cdsFeature.id] = {
70
+ ...cdsFeature,
71
+ translationType: "CDS Feature"
72
+ };
73
+ return acc;
74
+ },
75
+ {}
76
+ )),
77
+ ...reduce(
78
+ frameTranslations,
79
+ (acc, isActive, frameName) => {
80
+ const frameOffset = Number(frameName);
81
+ if (isActive) {
82
+ const id = uuid();
83
+ acc[id] = {
84
+ id,
85
+ start:
86
+ isCircular || frameOffset > 0
87
+ ? normalizePositionByRangeLength(
88
+ 0 + frameOffset + (frameOffset > 0 ? -1 : 1),
89
+ sequence.length
90
+ )
91
+ : 0,
92
+ end:
93
+ isCircular || frameOffset < 0
94
+ ? normalizePositionByRangeLength(
95
+ sequence.length -
96
+ 1 +
97
+ frameOffset +
98
+ (frameOffset > 0 ? -1 : 1),
99
+ sequence.length
100
+ )
101
+ : sequence.length - 1,
102
+ translationType: "Frame",
103
+ forward: frameOffset > 0,
104
+ isOrf: true //pass isOrf = true here in order to not have it show up in the properties window
105
+ };
106
+ }
107
+ return acc;
108
+ },
109
+ {}
110
+ )
111
+ };
112
+ each(translationsToPass, function (translation) {
113
+ translation.aminoAcids = getAminoAcidDataForEachBaseOfDna(
114
+ sequence,
115
+ translation.forward,
116
+ translation
117
+ );
118
+ });
119
+ return translationsToPass;
120
+ }
121
+
122
+ export default createSelector(
123
+ circularSelector,
124
+ translationSearchMatchesSelector,
125
+ sequenceSelector,
126
+ orfsSelector,
127
+ (state) => state.annotationVisibility.orfTranslations,
128
+ (state) => state.annotationVisibility.orfs,
129
+ cdsFeaturesSelector,
130
+ (state) => state.annotationVisibility.cdsFeatureTranslations,
131
+ (state) => state.annotationVisibility.features,
132
+ translationsRawSelector,
133
+ (state) => state.frameTranslations,
134
+ (state) => state.sequenceData.isProtein,
135
+ (state) => state.sequenceData.proteinSequence,
136
+ translationsSelector
137
+ );
package/src/style.css ADDED
@@ -0,0 +1,82 @@
1
+ .ve-monospace-font {
2
+ font-family: "Ubuntu Mono", "Lucida Console", Monaco, monospace;
3
+ font-size: 12px;
4
+ }
5
+ .rowViewTextContainer text {
6
+ user-select: none;
7
+ }
8
+ .translationLayer text {
9
+ user-select: none;
10
+ }
11
+ .ve-sequence-reverse {
12
+ fill: #b0b0b0;
13
+ }
14
+
15
+ .veCircularView .ve-monospace-font {
16
+ font-family: "Lucida Console", Monaco, monospace;
17
+ font-size: 14px;
18
+ }
19
+
20
+ .vespacer {
21
+ height: 15px;
22
+ }
23
+
24
+ .clickable {
25
+ cursor: pointer;
26
+ }
27
+
28
+ .openVeContextMenu .bp3-key {
29
+ box-shadow: none;
30
+ margin: 0px !important;
31
+ padding: 0px !important;
32
+ height: 11px;
33
+ line-height: 7px;
34
+ background: none;
35
+ }
36
+
37
+ .openVeContextMenu .bp3-icon-standard {
38
+ font-size: 10px;
39
+ height: 10px;
40
+ }
41
+
42
+ .veCutsiteLabel {
43
+ font-style: italic;
44
+ user-select: none;
45
+ }
46
+
47
+ .veCutsiteLabel:hover {
48
+ font-weight: bold;
49
+ }
50
+
51
+ /* .disable-hover .veRowItem {
52
+ pointer-events: none !important;
53
+ } */
54
+
55
+ .veWhiteBackground {
56
+ background: white;
57
+ }
58
+
59
+ .tg-min-width-dialog {
60
+ min-width: 300px;
61
+ }
62
+
63
+ /* this is necessary to allow the editor and its portals to sit at the top of the z-index stack for jbei */
64
+
65
+ .ove-portal {
66
+ z-index: 100000;
67
+ }
68
+ body.tg-no-scroll-body {
69
+ overflow-x: hidden;
70
+ overflow-y: hidden;
71
+ }
72
+
73
+ .veToolbar {
74
+ padding-top: 3px;
75
+ }
76
+ .veToolbar-outer {
77
+ padding-bottom: 1px;
78
+ background: #ebf1f5;
79
+ }
80
+ .bp3-dark .veToolbar-outer {
81
+ background: #202b33;
82
+ }