@teselagen/ove 0.7.26 → 0.7.28

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 (304) hide show
  1. package/AASliver.js +187 -0
  2. package/AddLaddersDialog.js +82 -0
  3. package/AdditionalCutsiteInfoDialog.js +599 -0
  4. package/AlignmentView/Mismatches.d.ts +3 -3
  5. package/AlignmentVisibilityTool.js +105 -0
  6. package/AnnotationContainerHolder.js +20 -0
  7. package/AnnotationPositioner.js +27 -0
  8. package/AutoAnnotate.js +501 -0
  9. package/AutoAnnotateBpMatchingDialog.js +208 -0
  10. package/Axis.js +151 -0
  11. package/AxisNumbers.js +35 -0
  12. package/Browser.js +106 -0
  13. package/Caret.js +63 -0
  14. package/Chromatogram.js +293 -0
  15. package/CircularDnaSequence.js +73 -0
  16. package/CircularView/Labels/index.d.ts +1 -1
  17. package/CircularView/index.d.ts +0 -1
  18. package/CircularZoomMinimap.js +16 -0
  19. package/ColorPicker.js +30 -0
  20. package/CommandHotkeyHandler.js +44 -0
  21. package/CreateAnnotationsPage.d.ts +4 -4
  22. package/CreateAnnotationsPage.js +98 -0
  23. package/Cutsite.js +18 -0
  24. package/CutsiteProperties.js +176 -0
  25. package/CutsiteSelectionLayers.js +47 -0
  26. package/Cutsites.js +271 -0
  27. package/DeletionLayer.js +28 -0
  28. package/DigestTool/Ladder.d.ts +1 -1
  29. package/DropHandler.css +21 -0
  30. package/DropHandler.js +64 -0
  31. package/EditCaretPosition.js +234 -0
  32. package/EditTrackNameDialog.js +30 -0
  33. package/Feature.js +83 -0
  34. package/FeatureProperties.js +6 -0
  35. package/FillWindow.js +47 -0
  36. package/GenbankView.js +74 -0
  37. package/GeneralProperties.js +117 -0
  38. package/GenericAnnotationProperties.js +406 -0
  39. package/GlobalDialog.js +73 -0
  40. package/GlobalDialogUtils.js +110 -0
  41. package/GoToDialog.js +25 -0
  42. package/HorizontalPanelDragHandle.js +35 -0
  43. package/Keyboard.js +85 -0
  44. package/Labels.js +327 -0
  45. package/Ladder.css +20 -0
  46. package/Ladder.js +303 -0
  47. package/MeltingTemp.js +85 -0
  48. package/Menlo.ttf +0 -0
  49. package/Minimap.js +515 -0
  50. package/Mismatches.js +134 -0
  51. package/Monaco.ttf +0 -0
  52. package/MultipleSeqsDetectedOnImportDialog.js +74 -0
  53. package/Orf.js +109 -0
  54. package/OrfProperties.js +117 -0
  55. package/Orfs.js +35 -0
  56. package/PCRTool.js +179 -0
  57. package/PairwiseAlignmentView.js +68 -0
  58. package/Part.js +34 -0
  59. package/PartProperties.js +9 -0
  60. package/PassThrough.js +3 -0
  61. package/PerformantSelectionLayer.js +32 -0
  62. package/PinchHelper.js +24 -0
  63. package/PointedAnnotation.js +347 -0
  64. package/PositionAnnotationOnCircle.js +26 -0
  65. package/Primer.js +41 -0
  66. package/PrimerProperties.js +19 -0
  67. package/Reflex/index.d.ts +0 -1
  68. package/ReflexContainer.js +802 -0
  69. package/ReflexElement.js +160 -0
  70. package/ReflexEvents.js +77 -0
  71. package/ReflexSplitter.js +205 -0
  72. package/RenameSequenceDialog.js +7 -0
  73. package/RotateCircularViewSlider.js +93 -0
  74. package/RowView/index.d.ts +0 -1
  75. package/SelectDialog.js +150 -0
  76. package/SequenceName.js +15 -0
  77. package/SimpleCircularOrLinearView.js +381 -0
  78. package/SimpleOligoPreview.js +39 -0
  79. package/SingleEnzymeCutsiteInfo.js +139 -0
  80. package/ToolBar/ToolbarItem.d.ts +1 -3
  81. package/ToolbarItem.js +192 -0
  82. package/Translation.js +198 -0
  83. package/TranslationProperties.js +149 -0
  84. package/UncontrolledSliderWithPlusMinusBtns.css +5 -0
  85. package/UncontrolledSliderWithPlusMinusBtns.js +134 -0
  86. package/VeTopRightContainer.js +12 -0
  87. package/ZoomCircularViewSlider.js +62 -0
  88. package/ZoomLinearView.js +47 -0
  89. package/addAlignment.js +6 -0
  90. package/addMetaToActionCreators.js +12 -0
  91. package/addWrappedAddons.js +20 -0
  92. package/alignmentTool.js +503 -0
  93. package/alignments.js +379 -0
  94. package/annotationLabelVisibility.js +2 -0
  95. package/annotationSearchSelector.js +24 -0
  96. package/annotationTypes.js +35 -0
  97. package/annotationVisibility.js +196 -0
  98. package/annotationsToSupport.js +104 -0
  99. package/arrayToObjWithIds.js +17 -0
  100. package/arrayUtils.js +19 -0
  101. package/array_move.js +10 -0
  102. package/calculateTickMarkPositionsForGivenRange.js +47 -0
  103. package/caretPosition.js +27 -0
  104. package/cdsFeaturesSelector.js +9 -0
  105. package/charWidth.js +22 -0
  106. package/circular.js +19 -0
  107. package/circularSelector.js +4 -0
  108. package/clickAndDragUtils.js +576 -0
  109. package/coerceInitialValue.js +7 -0
  110. package/combineReducersDontIgnoreKeys.js +12 -0
  111. package/commandUtils.js +20 -0
  112. package/constants.js +2 -0
  113. package/copyOptions.js +34 -0
  114. package/createFragmentLines.js +120 -0
  115. package/createMergedDefaultStateReducer.js +30 -0
  116. package/createMetaAction.js +12 -0
  117. package/createSequenceInputPopup.js +290 -0
  118. package/createSequenceInputPopupStyle.css +87 -0
  119. package/createSimpleDialog.js +89 -0
  120. package/createYourOwnEnzyme.js +39 -0
  121. package/cutsiteLabelColorSelector.js +6 -0
  122. package/cutsiteTool.js +88 -0
  123. package/cutsitesByRangeSelector.js +5 -0
  124. package/cutsitesSelector.js +61 -0
  125. package/darkmode.css +98 -0
  126. package/defaultConfig.js +150 -0
  127. package/deletionLayers.js +36 -0
  128. package/description.js +21 -0
  129. package/digestTool.js +34 -0
  130. package/dnaToColor.js +17 -0
  131. package/downloadTool.js +39 -0
  132. package/draggableClassnames.js +5 -0
  133. package/drawAnnotations.js +440 -0
  134. package/drawDirectedPiePiece.js +142 -0
  135. package/editTool.js +49 -0
  136. package/editorSelector.js +2 -0
  137. package/editorUtils.js +205 -0
  138. package/estimateRowHeight.js +184 -0
  139. package/featureLengthsToHide.js +27 -0
  140. package/featureTool.js +34 -0
  141. package/features.js +19 -0
  142. package/featuresSelector.js +8 -0
  143. package/filteredCutsitesSelector.js +136 -0
  144. package/filteredFeaturesSelector.js +32 -0
  145. package/filteredPartsSelector.js +57 -0
  146. package/filteredPrimersSelector.js +27 -0
  147. package/filteredRestrictionEnzymesSelector.js +1 -0
  148. package/find.png +0 -0
  149. package/findTool.js +79 -0
  150. package/findToolConstants.js +1 -0
  151. package/frameTranslations.js +52 -0
  152. package/fullscreen.png +0 -0
  153. package/getAdditionalEnzymesSelector.js +46 -0
  154. package/getAngleForPositionMidpoint.js +3 -0
  155. package/getAnnotationClassnames.js +12 -0
  156. package/getAnnotationNameAndStartStopString.js +61 -0
  157. package/getBpsPerRow.js +19 -0
  158. package/getCutsiteLabelHeights.js +56 -0
  159. package/getGapMap.js +12 -0
  160. package/getGaps.js +27 -0
  161. package/getInternalLabel.js +40 -0
  162. package/getOveHotkeyDefs.js +12 -0
  163. package/getPairwiseOverviewLinearViewOptions.js +38 -0
  164. package/getRangeAnglesSpecial.js +12 -0
  165. package/getStructuredBases.js +97 -0
  166. package/getTrackFromEvent.js +25 -0
  167. package/getVisibleStartEnd.js +7 -0
  168. package/getXStartAndWidthFromNonCircularRange.js +12 -0
  169. package/getXStartAndWidthOfRangeWrtRow.js +27 -0
  170. package/getXStartAndWidthOfRowAnnotation.js +19 -0
  171. package/getYOffset.js +15 -0
  172. package/hoveredAnnotation.js +24 -0
  173. package/{html2canvas.esm--JN4fLQL.js → html2canvas.esm-DiGWN1gP.js} +187 -229
  174. package/{html2canvas.esm-B7d7VJmQ.cjs → html2canvas.esm-J1esNpMJ.cjs} +187 -229
  175. package/importTool.js +27 -0
  176. package/index.cjs.js +48165 -47142
  177. package/index.es.js +47699 -46676
  178. package/index.js +71 -0
  179. package/inlineFindTool.js +38 -0
  180. package/isElementInViewport.js +29 -0
  181. package/isEnzymeFilterAndSelector.js +1 -0
  182. package/isTargetWithinEl.js +6 -0
  183. package/labelLineIntensity.js +25 -0
  184. package/labelSize.js +23 -0
  185. package/ladderDefaults.js +25 -0
  186. package/lastSavedId.js +20 -0
  187. package/lineageLines.js +11 -0
  188. package/linear.png +0 -0
  189. package/makeStore.js +34 -0
  190. package/massageTickSpacing.js +19 -0
  191. package/materiallyAvailable.js +19 -0
  192. package/middleware.js +112 -0
  193. package/minimumOrfSize.js +24 -0
  194. package/minimumOrfSizeSelector.js +2 -0
  195. package/modalActions.js +3 -0
  196. package/moveCaret.js +58 -0
  197. package/name.js +19 -0
  198. package/normalizeAngle.js +3 -0
  199. package/normalizeAngleRange.js +9 -0
  200. package/oligoTool.js +30 -0
  201. package/onlyUpdateForKeysDeep.js +31 -0
  202. package/orfFrameToColorMap.js +10 -0
  203. package/orfTool.js +136 -0
  204. package/orfsSelector.js +15 -0
  205. package/ove.css +12107 -0
  206. package/package.json +8 -7
  207. package/panelsShown.js +294 -0
  208. package/partLengthsToHide.js +23 -0
  209. package/partOverhangs.js +6 -0
  210. package/partTagSearch.js +69 -0
  211. package/partTool.js +45 -0
  212. package/parts.js +19 -0
  213. package/partsSelector.js +8 -0
  214. package/pie.png +0 -0
  215. package/polarToSpecialCartesian.js +7 -0
  216. package/positionCutsites.js +6 -0
  217. package/prepareRowData.js +64 -0
  218. package/primerBases.js +221 -0
  219. package/primerLengthsToHide.js +27 -0
  220. package/primers.js +19 -0
  221. package/primersSelector.js +8 -0
  222. package/print.png +0 -0
  223. package/printTool.js +31 -0
  224. package/propertiesTool.js +40 -0
  225. package/proteinUtils.js +3 -0
  226. package/pureNoFunc.js +18 -0
  227. package/readOnly.js +25 -0
  228. package/redoTool.js +30 -0
  229. package/reflex-styles.css +128 -0
  230. package/reflex-styles.css.map +9 -0
  231. package/relaxLabelAngles.js +157 -0
  232. package/relaxLabels_DEPRECATED.js +105 -0
  233. package/replacementLayers.js +36 -0
  234. package/restrictionEnzymes.js +52 -0
  235. package/restrictionEnzymesSelector.js +34 -0
  236. package/rowviewContants.js +3 -0
  237. package/ruler.css +89 -0
  238. package/save.png +0 -0
  239. package/saveTool.js +44 -0
  240. package/searchLayersSelector.js +71 -0
  241. package/selectedAnnotations.js +89 -0
  242. package/selectedAnnotationsSelector.js +1 -0
  243. package/selectedCutsitesSelector.js +21 -0
  244. package/selectedPartTags.js +21 -0
  245. package/selectionLayer.js +25 -0
  246. package/selectors/annotationSearchSelector.d.ts +1 -1
  247. package/sequence.js +12 -0
  248. package/sequenceDataHistory.js +43 -0
  249. package/sequenceDataSelector.js +2 -0
  250. package/sequenceLengthSelector.js +5 -0
  251. package/sequenceSelector.js +4 -0
  252. package/sharedActionCreators.js +0 -0
  253. package/shouldFlipText.js +4 -0
  254. package/shouldRerender.js +27 -0
  255. package/showFileDialog.js +25 -0
  256. package/showGCContent.js +23 -0
  257. package/show_cut_sites.png +0 -0
  258. package/show_features.png +0 -0
  259. package/show_orfs.png +0 -0
  260. package/show_primers.png +0 -0
  261. package/simpleDialog.css +13 -0
  262. package/specialCutsiteFilterOptions.js +22 -0
  263. package/src/Editor/DropHandler.js +2 -1
  264. package/src/Editor/index.js +0 -2
  265. package/src/RowItem/StackedAnnotations/getStructuredBases.js +20 -6
  266. package/src/ToolBar/cutsiteTool.js +1 -1
  267. package/src/helperComponents/PropertiesDialog/TranslationProperties.js +2 -1
  268. package/style.css +3 -12100
  269. package/tagsToBoldSelector.js +2 -0
  270. package/toggle_views.svg +1 -0
  271. package/toolBar.js +23 -0
  272. package/translationSearchMatchesSelector.js +14 -0
  273. package/translations.js +20 -0
  274. package/translationsRawSelector.js +8 -0
  275. package/translationsSelector.js +137 -0
  276. package/typeField.js +24 -0
  277. package/undoTool.js +30 -0
  278. package/updateEditor.d.ts +1 -3
  279. package/updateEditor.js +200 -0
  280. package/updateLabelsForInViewFeatures.js +55 -0
  281. package/updateLabelsForInViewFeaturesCircView.js +41 -0
  282. package/updateTrackHelper.js +58 -0
  283. package/uppercaseSequenceMapFont.js +25 -0
  284. package/upsertDeleteActionGenerator.js +31 -0
  285. package/useAAColorType.js +8 -0
  286. package/useAdditionalOrfStartCodons.js +24 -0
  287. package/useAnnotationLimits.js +42 -0
  288. package/useChromatogramPrefs.js +31 -0
  289. package/useFormValue.js +7 -0
  290. package/useLadders.js +6 -0
  291. package/useMeltingTemp.js +7 -0
  292. package/useTmType.js +10 -0
  293. package/userDefinedHandlersAndOpts.js +61 -0
  294. package/utils/getAnnotationNameAndStartStopString.d.ts +1 -5
  295. package/utils/selectionLayer.d.ts +2 -2
  296. package/utils.js +37 -0
  297. package/versionHistory.js +26 -0
  298. package/versionHistoryTool.js +21 -0
  299. package/viewSubmenu.js +479 -0
  300. package/visibilityTool.js +39 -0
  301. package/withEditorInteractions/getBpsPerRow.d.ts +1 -3
  302. package/withHover.js +113 -0
  303. package/withRestrictionEnzymes.js +15 -0
  304. package/index.umd.js +0 -188322
@@ -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,21 @@
1
+ import { createReducer } from "redux-act";
2
+ import createAction from "./utils/createMetaAction";
3
+
4
+ // ------------------------------------
5
+ // Actions
6
+ // ------------------------------------
7
+
8
+ export const updateSelectedPartTags = createAction("UPDATE_SELECTED_PART_TAGS");
9
+
10
+ // ------------------------------------
11
+ // Reducer
12
+ // ------------------------------------
13
+
14
+ export default createReducer(
15
+ {
16
+ [updateSelectedPartTags]: (state, payload) => {
17
+ return { ...state, parts: payload };
18
+ }
19
+ },
20
+ {}
21
+ );
@@ -0,0 +1,25 @@
1
+ export function getAllSelectionLayers({
2
+ additionalSelectionLayers = [],
3
+ searchLayers = [],
4
+ selectionLayer
5
+ }) {
6
+ const selectionLayers = [
7
+ ...additionalSelectionLayers,
8
+ ...searchLayers,
9
+ ...(Array.isArray(selectionLayer) ? selectionLayer : [selectionLayer])
10
+ ];
11
+ const doubleWrappedColor = "#edb2f1";
12
+ // const doubleWrappedColor = "#abdbfb";
13
+
14
+ if (selectionLayer.overlapsSelf) {
15
+ selectionLayers.push({
16
+ start: selectionLayer.end + 1,
17
+ end: selectionLayer.start - 1,
18
+ color: selectionLayer.isWrappedAddon ? undefined : doubleWrappedColor
19
+ });
20
+ if (selectionLayer.isWrappedAddon) {
21
+ selectionLayer.color = doubleWrappedColor;
22
+ }
23
+ }
24
+ return selectionLayers;
25
+ }
@@ -1,5 +1,5 @@
1
1
  export const searchableTypes: string[];
2
- declare const _default: ((state: any) => any[][]) & import('reselect').OutputSelectorFields<(args_0: any, args_1: any, ...args_2: any[]) => any[][], {
2
+ declare const _default: ((state: any) => any[][]) & import('reselect').OutputSelectorFields<(args_0: any, args_1: any, ...args: any[]) => any[][], {
3
3
  clearCache: () => void;
4
4
  }> & {
5
5
  clearCache: () => void;
package/sequence.js ADDED
@@ -0,0 +1,12 @@
1
+ import { createReducer } from "redux-act";
2
+ import createAction from "../utils/createMetaAction";
3
+
4
+ // ------------------------------------
5
+ // Actions
6
+ // ------------------------------------
7
+ export const addBps = createAction("addBps");
8
+
9
+ // ------------------------------------
10
+ // Reducer
11
+ // ------------------------------------
12
+ export default createReducer({}, "");
@@ -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,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
+ }
File without changes
@@ -0,0 +1,4 @@
1
+ export default function shouldFlipText(_angle) {
2
+ const angle = _angle > 2 * Math.PI ? _angle - 2 * Math.PI : _angle;
3
+ return angle > Math.PI * 0.5 && angle < Math.PI * 1.5;
4
+ }
@@ -0,0 +1,27 @@
1
+ import { pick, isEqualWith, isFunction } from "lodash-es";
2
+ const shouldRerender = (propKeys, stateKeys, that) => {
3
+ if (!that.hasRendered) {
4
+ that.hasRendered = true;
5
+ return true;
6
+ }
7
+ const nextProps = that.props;
8
+ const oldProps = that.oldProps || {};
9
+ const a = !isEq(pick(nextProps, propKeys), pick(oldProps, propKeys));
10
+ that.oldProps = nextProps;
11
+ const nextState = that.state;
12
+ const oldState = that.oldState || {};
13
+ const b =
14
+ !isEq(pick(nextState, stateKeys), pick(oldState, stateKeys)) || !isEq;
15
+ that.oldState = nextState;
16
+ return a || b;
17
+ };
18
+ export default shouldRerender;
19
+
20
+ const isEq = (o1, o2) => {
21
+ const isEq = isEqualWith(o1, o2, function (val1, val2) {
22
+ if (isFunction(val1) && isFunction(val2)) {
23
+ return val1 === val2 || val1.toString() === val2.toString();
24
+ }
25
+ });
26
+ return isEq;
27
+ };
@@ -0,0 +1,25 @@
1
+ // TODO maybe move to TRC or elsewhere
2
+ let hiddenInput;
3
+ let callback;
4
+
5
+ function getInput(multiple) {
6
+ if (!hiddenInput) {
7
+ hiddenInput = document.createElement("input");
8
+ hiddenInput.type = "file";
9
+ hiddenInput.style.position = "absolute";
10
+ hiddenInput.style.visibility = "hidden";
11
+ hiddenInput.addEventListener("change", event => {
12
+ callback(event.target.files);
13
+ });
14
+
15
+ document.body.appendChild(hiddenInput);
16
+ }
17
+ hiddenInput.multiple = multiple ? "multiple" : undefined;
18
+ return hiddenInput;
19
+ }
20
+
21
+ export default function showFileDialog({ multiple = false, onSelect }) {
22
+ const input = getInput(multiple);
23
+ callback = onSelect;
24
+ input.click();
25
+ }
@@ -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
+ );
Binary file
Binary file
package/show_orfs.png ADDED
Binary file
Binary file
@@ -0,0 +1,13 @@
1
+ .simple-dialog .dialog-buttons {
2
+ display: flex;
3
+ flex-direction: row;
4
+ justify-content: flex-end;
5
+ }
6
+
7
+ .simple-dialog .dialog-buttons > * {
8
+ margin-left: 10px;
9
+ }
10
+
11
+ .simple-dialog .bp3-form-content {
12
+ height: 40px;
13
+ }
@@ -0,0 +1,22 @@
1
+ export default {
2
+ type2s: {
3
+ value: "type2s",
4
+ label: "Type IIS Enzymes",
5
+ isSpecialGroup: true
6
+ },
7
+ single: {
8
+ value: "single",
9
+ label: "Single cutters",
10
+ cutsThisManyTimes: 1
11
+ },
12
+ double: {
13
+ value: "double",
14
+ label: "Double cutters",
15
+ cutsThisManyTimes: 2
16
+ },
17
+ triple: {
18
+ value: "triple",
19
+ label: "Triple cutters",
20
+ cutsThisManyTimes: 3
21
+ }
22
+ };
@@ -28,7 +28,8 @@ export default class DropHandler extends React.Component {
28
28
  ".dna",
29
29
  ".prot",
30
30
  ".ab1",
31
- ".json"
31
+ ".json",
32
+ ".fastq"
32
33
  ]}
33
34
  onDropRejected={() => {
34
35
  window.toastr.error("Error: Incorrect File Type");
@@ -55,8 +55,6 @@ import { getClientX, getClientY } from "../utils/editorUtils";
55
55
  import PCRTool from "../PCRTool/PCRTool";
56
56
  import classNames from "classnames";
57
57
 
58
-
59
-
60
58
  // if (process.env.NODE_ENV !== 'production') {
61
59
  // const {whyDidYouUpdate} = require('why-did-you-update');
62
60
  // whyDidYouUpdate(React);
@@ -28,11 +28,25 @@ export function getStructuredBases({
28
28
  }
29
29
  }
30
30
  }
31
- const aRange = {
32
- //tnr: this probably needs to be changed in case annotation wraps origin
33
- start: annotationRange.start - start,
34
- end: annotationRange.end - start
35
- };
31
+
32
+ const wrapsOrigin = start > end;
33
+ let aRange;
34
+ if (!wrapsOrigin) {
35
+ aRange = {
36
+ //tnr: this probably needs to be changed in case annotation wraps origin
37
+ start: annotationRange.start - start,
38
+ end: annotationRange.end - start
39
+ };
40
+ } else {
41
+ aRange = {
42
+ start: annotationRange.start === 0 ? sequenceLength - start : 0,
43
+ end:
44
+ annotationRange.start === 0
45
+ ? annLen - 1
46
+ : getRangeLength(annotationRange) - 1
47
+ };
48
+ }
49
+
36
50
  const r = {
37
51
  aRange,
38
52
  basesNoInserts: basesToUse,
@@ -63,7 +77,7 @@ export function getStructuredBases({
63
77
  forward ? r.basesNoInserts : r.basesNoInserts.split("").reverse().join("")
64
78
  );
65
79
  r.basesNoInsertsWithMetaData = basesForRange.split("").map((b, i) => {
66
- const indexOfBase = i + annotationRange.start;
80
+ const indexOfBase = (i + annotationRange.start) % sequenceLength;
67
81
  let seqForBase = (fullSequence && fullSequence[indexOfBase]) || "";
68
82
  if (!forward) {
69
83
  seqForBase = getComplementSequenceString(seqForBase);
@@ -69,7 +69,7 @@ function CutsiteToolDropDown({
69
69
  onChangeHook={function () {
70
70
  annotationVisibilityShow("cutsites");
71
71
  }}
72
- closeDropDown={toggleDropdown}
72
+ closeDropDown={() => toggleDropdown({ forceClose: true })}
73
73
  />
74
74
  {withDigestTool && (
75
75
  <Button
@@ -44,7 +44,8 @@ class TranslationProperties extends React.Component {
44
44
  const translationsToUse = map(translations, translation => {
45
45
  let aaString = "";
46
46
  for (let i = 0; i < translation.aminoAcids.length; i++) {
47
- aaString += translation.aminoAcids[i].aminoAcid.value;
47
+ // sometimes the `translation.aminoAcids[i].aminoAcid` is null
48
+ aaString += translation.aminoAcids[i].aminoAcid?.value || '';
48
49
  }
49
50
  return {
50
51
  ...translation,