@teselagen/ove 0.7.28 → 0.7.30-beta.1

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 (301) hide show
  1. package/CreateAnnotationsPage.d.ts +4 -3
  2. package/README.md +1 -1
  3. package/fileUtils.d.ts +12 -0
  4. package/html2canvas.esm--JN4fLQL.js +7891 -0
  5. package/html2canvas.esm-B7d7VJmQ.cjs +7891 -0
  6. package/index.cjs.js +1305 -1121
  7. package/index.es.js +1305 -1121
  8. package/index.umd.js +189161 -0
  9. package/ove.css +17 -4
  10. package/package.json +5 -9
  11. package/redux/findTool.d.ts +1 -0
  12. package/selectors/searchLayersSelector.d.ts +1 -1
  13. package/src/AutoAnnotate.js +1 -1
  14. package/src/CreateAnnotationsPage.js +1 -2
  15. package/src/Editor/style.css +8 -3
  16. package/src/FindBar/index.js +32 -1
  17. package/src/RowItem/SelectionLayer/index.js +42 -4
  18. package/src/RowItem/SelectionLayer/style.css +8 -0
  19. package/src/fileUtils.js +103 -0
  20. package/src/helperComponents/PropertiesDialog/TranslationProperties.js +1 -1
  21. package/src/redux/findTool.js +9 -0
  22. package/src/selectors/searchLayersSelector.js +40 -2
  23. package/style.css +12098 -1
  24. package/AASliver.js +0 -187
  25. package/AddLaddersDialog.js +0 -82
  26. package/AdditionalCutsiteInfoDialog.js +0 -599
  27. package/AlignmentVisibilityTool.js +0 -105
  28. package/AnnotationContainerHolder.js +0 -20
  29. package/AnnotationPositioner.js +0 -27
  30. package/AutoAnnotate.js +0 -501
  31. package/AutoAnnotateBpMatchingDialog.js +0 -208
  32. package/Axis.js +0 -151
  33. package/AxisNumbers.js +0 -35
  34. package/Browser.js +0 -106
  35. package/Caret.js +0 -63
  36. package/Chromatogram.js +0 -293
  37. package/CircularDnaSequence.js +0 -73
  38. package/CircularZoomMinimap.js +0 -16
  39. package/ColorPicker.js +0 -30
  40. package/CommandHotkeyHandler.js +0 -44
  41. package/CreateAnnotationsPage.js +0 -98
  42. package/Cutsite.js +0 -18
  43. package/CutsiteProperties.js +0 -176
  44. package/CutsiteSelectionLayers.js +0 -47
  45. package/Cutsites.js +0 -271
  46. package/DeletionLayer.js +0 -28
  47. package/DropHandler.css +0 -21
  48. package/DropHandler.js +0 -64
  49. package/EditCaretPosition.js +0 -234
  50. package/EditTrackNameDialog.js +0 -30
  51. package/Feature.js +0 -83
  52. package/FeatureProperties.js +0 -6
  53. package/FillWindow.js +0 -47
  54. package/GenbankView.js +0 -74
  55. package/GeneralProperties.js +0 -117
  56. package/GenericAnnotationProperties.js +0 -406
  57. package/GlobalDialog.js +0 -73
  58. package/GlobalDialogUtils.js +0 -110
  59. package/GoToDialog.js +0 -25
  60. package/HorizontalPanelDragHandle.js +0 -35
  61. package/Keyboard.js +0 -85
  62. package/Labels.js +0 -327
  63. package/Ladder.css +0 -20
  64. package/Ladder.js +0 -303
  65. package/MeltingTemp.js +0 -85
  66. package/Menlo.ttf +0 -0
  67. package/Minimap.js +0 -515
  68. package/Mismatches.js +0 -134
  69. package/Monaco.ttf +0 -0
  70. package/MultipleSeqsDetectedOnImportDialog.js +0 -74
  71. package/Orf.js +0 -109
  72. package/OrfProperties.js +0 -117
  73. package/Orfs.js +0 -35
  74. package/PCRTool.js +0 -179
  75. package/PairwiseAlignmentView.js +0 -68
  76. package/Part.js +0 -34
  77. package/PartProperties.js +0 -9
  78. package/PassThrough.js +0 -3
  79. package/PerformantSelectionLayer.js +0 -32
  80. package/PinchHelper.js +0 -24
  81. package/PointedAnnotation.js +0 -347
  82. package/PositionAnnotationOnCircle.js +0 -26
  83. package/Primer.js +0 -41
  84. package/PrimerProperties.js +0 -19
  85. package/ReflexContainer.js +0 -802
  86. package/ReflexElement.js +0 -160
  87. package/ReflexEvents.js +0 -77
  88. package/ReflexSplitter.js +0 -205
  89. package/RenameSequenceDialog.js +0 -7
  90. package/RotateCircularViewSlider.js +0 -93
  91. package/SelectDialog.js +0 -150
  92. package/SequenceName.js +0 -15
  93. package/SimpleCircularOrLinearView.js +0 -381
  94. package/SimpleOligoPreview.js +0 -39
  95. package/SingleEnzymeCutsiteInfo.js +0 -139
  96. package/ToolbarItem.js +0 -192
  97. package/Translation.js +0 -198
  98. package/TranslationProperties.js +0 -149
  99. package/UncontrolledSliderWithPlusMinusBtns.css +0 -5
  100. package/UncontrolledSliderWithPlusMinusBtns.js +0 -134
  101. package/VeTopRightContainer.js +0 -12
  102. package/ZoomCircularViewSlider.js +0 -62
  103. package/ZoomLinearView.js +0 -47
  104. package/addAlignment.js +0 -6
  105. package/addMetaToActionCreators.js +0 -12
  106. package/addWrappedAddons.js +0 -20
  107. package/alignmentTool.js +0 -503
  108. package/alignments.js +0 -379
  109. package/annotationLabelVisibility.js +0 -2
  110. package/annotationSearchSelector.js +0 -24
  111. package/annotationTypes.js +0 -35
  112. package/annotationVisibility.js +0 -196
  113. package/annotationsToSupport.js +0 -104
  114. package/arrayToObjWithIds.js +0 -17
  115. package/arrayUtils.js +0 -19
  116. package/array_move.js +0 -10
  117. package/calculateTickMarkPositionsForGivenRange.js +0 -47
  118. package/caretPosition.js +0 -27
  119. package/cdsFeaturesSelector.js +0 -9
  120. package/charWidth.js +0 -22
  121. package/circular.js +0 -19
  122. package/circularSelector.js +0 -4
  123. package/clickAndDragUtils.js +0 -576
  124. package/coerceInitialValue.js +0 -7
  125. package/combineReducersDontIgnoreKeys.js +0 -12
  126. package/commandUtils.js +0 -20
  127. package/constants.js +0 -2
  128. package/copyOptions.js +0 -34
  129. package/createFragmentLines.js +0 -120
  130. package/createMergedDefaultStateReducer.js +0 -30
  131. package/createMetaAction.js +0 -12
  132. package/createSequenceInputPopup.js +0 -290
  133. package/createSequenceInputPopupStyle.css +0 -87
  134. package/createSimpleDialog.js +0 -89
  135. package/createYourOwnEnzyme.js +0 -39
  136. package/cutsiteLabelColorSelector.js +0 -6
  137. package/cutsiteTool.js +0 -88
  138. package/cutsitesByRangeSelector.js +0 -5
  139. package/cutsitesSelector.js +0 -61
  140. package/darkmode.css +0 -98
  141. package/defaultConfig.js +0 -150
  142. package/deletionLayers.js +0 -36
  143. package/description.js +0 -21
  144. package/digestTool.js +0 -34
  145. package/dnaToColor.js +0 -17
  146. package/downloadTool.js +0 -39
  147. package/draggableClassnames.js +0 -5
  148. package/drawAnnotations.js +0 -440
  149. package/drawDirectedPiePiece.js +0 -142
  150. package/editTool.js +0 -49
  151. package/editorSelector.js +0 -2
  152. package/editorUtils.js +0 -205
  153. package/estimateRowHeight.js +0 -184
  154. package/featureLengthsToHide.js +0 -27
  155. package/featureTool.js +0 -34
  156. package/features.js +0 -19
  157. package/featuresSelector.js +0 -8
  158. package/filteredCutsitesSelector.js +0 -136
  159. package/filteredFeaturesSelector.js +0 -32
  160. package/filteredPartsSelector.js +0 -57
  161. package/filteredPrimersSelector.js +0 -27
  162. package/filteredRestrictionEnzymesSelector.js +0 -1
  163. package/find.png +0 -0
  164. package/findTool.js +0 -79
  165. package/findToolConstants.js +0 -1
  166. package/frameTranslations.js +0 -52
  167. package/fullscreen.png +0 -0
  168. package/getAdditionalEnzymesSelector.js +0 -46
  169. package/getAngleForPositionMidpoint.js +0 -3
  170. package/getAnnotationClassnames.js +0 -12
  171. package/getAnnotationNameAndStartStopString.js +0 -61
  172. package/getBpsPerRow.js +0 -19
  173. package/getCutsiteLabelHeights.js +0 -56
  174. package/getGapMap.js +0 -12
  175. package/getGaps.js +0 -27
  176. package/getInternalLabel.js +0 -40
  177. package/getOveHotkeyDefs.js +0 -12
  178. package/getPairwiseOverviewLinearViewOptions.js +0 -38
  179. package/getRangeAnglesSpecial.js +0 -12
  180. package/getStructuredBases.js +0 -97
  181. package/getTrackFromEvent.js +0 -25
  182. package/getVisibleStartEnd.js +0 -7
  183. package/getXStartAndWidthFromNonCircularRange.js +0 -12
  184. package/getXStartAndWidthOfRangeWrtRow.js +0 -27
  185. package/getXStartAndWidthOfRowAnnotation.js +0 -19
  186. package/getYOffset.js +0 -15
  187. package/hoveredAnnotation.js +0 -24
  188. package/importTool.js +0 -27
  189. package/index.js +0 -71
  190. package/inlineFindTool.js +0 -38
  191. package/isElementInViewport.js +0 -29
  192. package/isEnzymeFilterAndSelector.js +0 -1
  193. package/isTargetWithinEl.js +0 -6
  194. package/labelLineIntensity.js +0 -25
  195. package/labelSize.js +0 -23
  196. package/ladderDefaults.js +0 -25
  197. package/lastSavedId.js +0 -20
  198. package/lineageLines.js +0 -11
  199. package/linear.png +0 -0
  200. package/makeStore.js +0 -34
  201. package/massageTickSpacing.js +0 -19
  202. package/materiallyAvailable.js +0 -19
  203. package/middleware.js +0 -112
  204. package/minimumOrfSize.js +0 -24
  205. package/minimumOrfSizeSelector.js +0 -2
  206. package/modalActions.js +0 -3
  207. package/moveCaret.js +0 -58
  208. package/name.js +0 -19
  209. package/normalizeAngle.js +0 -3
  210. package/normalizeAngleRange.js +0 -9
  211. package/oligoTool.js +0 -30
  212. package/onlyUpdateForKeysDeep.js +0 -31
  213. package/orfFrameToColorMap.js +0 -10
  214. package/orfTool.js +0 -136
  215. package/orfsSelector.js +0 -15
  216. package/panelsShown.js +0 -294
  217. package/partLengthsToHide.js +0 -23
  218. package/partOverhangs.js +0 -6
  219. package/partTagSearch.js +0 -69
  220. package/partTool.js +0 -45
  221. package/parts.js +0 -19
  222. package/partsSelector.js +0 -8
  223. package/pie.png +0 -0
  224. package/polarToSpecialCartesian.js +0 -7
  225. package/positionCutsites.js +0 -6
  226. package/prepareRowData.js +0 -64
  227. package/primerBases.js +0 -221
  228. package/primerLengthsToHide.js +0 -27
  229. package/primers.js +0 -19
  230. package/primersSelector.js +0 -8
  231. package/print.png +0 -0
  232. package/printTool.js +0 -31
  233. package/propertiesTool.js +0 -40
  234. package/proteinUtils.js +0 -3
  235. package/pureNoFunc.js +0 -18
  236. package/readOnly.js +0 -25
  237. package/redoTool.js +0 -30
  238. package/reflex-styles.css +0 -128
  239. package/reflex-styles.css.map +0 -9
  240. package/relaxLabelAngles.js +0 -157
  241. package/relaxLabels_DEPRECATED.js +0 -105
  242. package/replacementLayers.js +0 -36
  243. package/restrictionEnzymes.js +0 -52
  244. package/restrictionEnzymesSelector.js +0 -34
  245. package/rowviewContants.js +0 -3
  246. package/ruler.css +0 -89
  247. package/save.png +0 -0
  248. package/saveTool.js +0 -44
  249. package/searchLayersSelector.js +0 -71
  250. package/selectedAnnotations.js +0 -89
  251. package/selectedAnnotationsSelector.js +0 -1
  252. package/selectedCutsitesSelector.js +0 -21
  253. package/selectedPartTags.js +0 -21
  254. package/selectionLayer.js +0 -25
  255. package/sequence.js +0 -12
  256. package/sequenceDataHistory.js +0 -43
  257. package/sequenceDataSelector.js +0 -2
  258. package/sequenceLengthSelector.js +0 -5
  259. package/sequenceSelector.js +0 -4
  260. package/sharedActionCreators.js +0 -0
  261. package/shouldFlipText.js +0 -4
  262. package/shouldRerender.js +0 -27
  263. package/showFileDialog.js +0 -25
  264. package/showGCContent.js +0 -23
  265. package/show_cut_sites.png +0 -0
  266. package/show_features.png +0 -0
  267. package/show_orfs.png +0 -0
  268. package/show_primers.png +0 -0
  269. package/simpleDialog.css +0 -13
  270. package/specialCutsiteFilterOptions.js +0 -22
  271. package/tagsToBoldSelector.js +0 -2
  272. package/toggle_views.svg +0 -1
  273. package/toolBar.js +0 -23
  274. package/translationSearchMatchesSelector.js +0 -14
  275. package/translations.js +0 -20
  276. package/translationsRawSelector.js +0 -8
  277. package/translationsSelector.js +0 -137
  278. package/typeField.js +0 -24
  279. package/undoTool.js +0 -30
  280. package/updateEditor.js +0 -200
  281. package/updateLabelsForInViewFeatures.js +0 -55
  282. package/updateLabelsForInViewFeaturesCircView.js +0 -41
  283. package/updateTrackHelper.js +0 -58
  284. package/uppercaseSequenceMapFont.js +0 -25
  285. package/upsertDeleteActionGenerator.js +0 -31
  286. package/useAAColorType.js +0 -8
  287. package/useAdditionalOrfStartCodons.js +0 -24
  288. package/useAnnotationLimits.js +0 -42
  289. package/useChromatogramPrefs.js +0 -31
  290. package/useFormValue.js +0 -7
  291. package/useLadders.js +0 -6
  292. package/useMeltingTemp.js +0 -7
  293. package/useTmType.js +0 -10
  294. package/userDefinedHandlersAndOpts.js +0 -61
  295. package/utils.js +0 -37
  296. package/versionHistory.js +0 -26
  297. package/versionHistoryTool.js +0 -21
  298. package/viewSubmenu.js +0 -479
  299. package/visibilityTool.js +0 -39
  300. package/withHover.js +0 -113
  301. package/withRestrictionEnzymes.js +0 -15
@@ -1,176 +0,0 @@
1
- import React, { useCallback, useMemo } from "react";
2
- import { DataTable, createCommandMenu } from "@teselagen/ui";
3
- import { get } from "lodash-es";
4
- import CutsiteFilter from "../../CutsiteFilter";
5
- import { Button, ButtonGroup } from "@blueprintjs/core";
6
- import { connectToEditor } from "../../withEditorProps";
7
- import { compose } from "recompose";
8
- import selectors from "../../selectors";
9
- import _commands from "../../commands";
10
- import { userDefinedHandlersAndOpts } from "../../Editor/userDefinedHandlersAndOpts";
11
- import { pick } from "lodash-es";
12
- import SingleEnzymeCutsiteInfo from "./SingleEnzymeCutsiteInfo";
13
- import { withRestrictionEnzymes } from "../../CutsiteFilter/withRestrictionEnzymes";
14
- import { cutsitesSubmenu } from "../../MenuBar/viewSubmenu";
15
- import { getVisFilter } from "./GenericAnnotationProperties";
16
-
17
- const schema = {
18
- fields: [
19
- { path: "name", type: "string" },
20
- { path: "numberOfCuts", type: "number" },
21
- { path: "groups", type: "string" }
22
- ]
23
- };
24
-
25
- const defaultValues = { order: ["numberOfCuts"] };
26
-
27
- const CutsiteProperties = props => {
28
- const commands = _commands({ props });
29
- const {
30
- allRestrictionEnzymes,
31
- allCutsites,
32
- annotationVisibilityShow,
33
- createNewDigest,
34
- dispatch,
35
- editorName,
36
- filteredCutsites,
37
- selectedAnnotationId
38
- } = props;
39
-
40
- const SubComponent = useCallback(
41
- row => (
42
- <SingleEnzymeCutsiteInfo
43
- allRestrictionEnzymes={allRestrictionEnzymes}
44
- allCutsites={allCutsites}
45
- filteredCutsites={filteredCutsites}
46
- editorName={editorName}
47
- dispatch={dispatch}
48
- selectedAnnotationId={selectedAnnotationId}
49
- cutsiteGroup={row.original.cutsiteGroup}
50
- enzyme={row.original.enzyme}
51
- />
52
- ),
53
- [
54
- allCutsites,
55
- allRestrictionEnzymes,
56
- dispatch,
57
- editorName,
58
- filteredCutsites,
59
- selectedAnnotationId
60
- ]
61
- );
62
-
63
- const onChangeHook = useCallback(() => {
64
- annotationVisibilityShow("cutsites");
65
- }, [annotationVisibilityShow]);
66
-
67
- const { cutsitesByName, cutsitesById } = filteredCutsites;
68
-
69
- const cutsitesToUse = useMemo(
70
- () =>
71
- Object.values(cutsitesByName || {}).map(cutsiteGroup => {
72
- const name = cutsiteGroup[0].restrictionEnzyme.name;
73
- let groups = "";
74
- const exisitingEnzymeGroups = window.getExistingEnzymeGroups();
75
-
76
- Object.keys(exisitingEnzymeGroups).forEach(key => {
77
- if (exisitingEnzymeGroups[key].includes(name)) groups += key;
78
- groups += " ";
79
- });
80
-
81
- return {
82
- cutsiteGroup,
83
- id: name,
84
- name,
85
- numberOfCuts: cutsiteGroup.length,
86
- enzyme: cutsiteGroup[0].restrictionEnzyme,
87
- groups
88
- };
89
- }),
90
- [cutsitesByName]
91
- );
92
-
93
- const selectedIds = useMemo(
94
- () => get(cutsitesById[selectedAnnotationId], "restrictionEnzyme.name"),
95
- [cutsitesById, selectedAnnotationId]
96
- );
97
-
98
- return (
99
- <>
100
- <div
101
- style={{
102
- marginBottom: 10,
103
- paddingTop: 3,
104
- display: "flex",
105
- // flexWrap: 'wrap',
106
- width: "100%",
107
- // justifyContent: "space-between",
108
- alignItems: "center"
109
- }}
110
- >
111
- {getVisFilter(
112
- createCommandMenu(cutsitesSubmenu, commands, {
113
- useTicks: true
114
- })
115
- )}
116
- <ButtonGroup>
117
- <Button
118
- intent="success"
119
- data-tip="Virtual Digest"
120
- icon="cut"
121
- style={{ marginLeft: 15, flexGrow: -1 }}
122
- onClick={() => {
123
- createNewDigest();
124
- }}
125
- />
126
- </ButtonGroup>
127
- <CutsiteFilter
128
- {...pick(props, userDefinedHandlersAndOpts)}
129
- style={{ marginLeft: "auto", marginRight: 3 }}
130
- editorName={editorName}
131
- manageEnzymesToLeft
132
- onChangeHook={onChangeHook}
133
- />
134
- </div>
135
- <DataTable
136
- selectedIds={selectedIds}
137
- compact
138
- noSelect
139
- noHeader
140
- noFooter
141
- withExpandAndCollapseAllButton
142
- noFullscreenButton
143
- noPadding
144
- defaults={defaultValues}
145
- formName="cutsiteProperties"
146
- noRouter
147
- withSearch={false}
148
- SubComponent={SubComponent}
149
- isInfinite
150
- schema={schema}
151
- entities={cutsitesToUse}
152
- />
153
- </>
154
- );
155
- };
156
-
157
- export default compose(
158
- connectToEditor((editorState, ownProps) => {
159
- const cutsites = selectors.filteredCutsitesSelector(
160
- editorState,
161
- ownProps.additionalEnzymes,
162
- ownProps.enzymeGroupsOverride
163
- );
164
- const allCutsites = selectors.cutsitesSelector(
165
- editorState,
166
- ownProps.additionalEnzymes
167
- );
168
- return {
169
- annotationVisibility: editorState.annotationVisibility || {},
170
- filteredCutsites: cutsites,
171
- allCutsites,
172
- cutsites: cutsites.cutsitesArray
173
- };
174
- }),
175
- withRestrictionEnzymes
176
- )(CutsiteProperties);
@@ -1,47 +0,0 @@
1
- import React from "react";
2
- import SelectionLayer from "./SelectionLayer";
3
- import { connectToEditor } from "../withEditorProps";
4
- import classNames from "classnames";
5
-
6
- export const CutsiteSelectionLayers = connectToEditor(
7
- ({ hoveredAnnotation }) => ({
8
- hoveredAnnotation
9
- })
10
- )(function CutsiteSelectionLayersInner({
11
- hoveredAnnotation,
12
- cutsites,
13
- annotationCommonProps,
14
- showReverseSequence,
15
- sequenceHeight,
16
- alignmentData,
17
- row
18
- }) {
19
- return Object.keys(cutsites)
20
- .sort(a => (cutsites[a].id === hoveredAnnotation ? 1 : -1))
21
- .map(function (id, index) {
22
- const cutsite = cutsites[id];
23
- const isHovered = hoveredAnnotation === cutsite.id;
24
- const layer = cutsite.annotation.recognitionSiteRange;
25
- return (
26
- layer.start > -1 && (
27
- <SelectionLayer
28
- hideTitle
29
- key={"restrictionSiteRange" + index}
30
- {...annotationCommonProps}
31
- {...{
32
- id: cutsite.id,
33
- height: showReverseSequence ? sequenceHeight * 2 : sequenceHeight,
34
- regions: [layer],
35
- row: alignmentData
36
- ? { start: 0, end: alignmentData.sequence.length - 1 }
37
- : row,
38
- className: classNames("cutsiteLabelSelectionLayer", {
39
- cutsiteLabelSelectionLayerHovered: isHovered
40
- }),
41
- hideCarets: true
42
- }}
43
- />
44
- )
45
- );
46
- });
47
- });
package/Cutsites.js DELETED
@@ -1,271 +0,0 @@
1
- import { isPositionWithinRange } from "@teselagen/range-utils";
2
- import assign from "lodash/assign";
3
- import React from "react";
4
- import areNonNegativeIntegers from "validate.io-nonnegative-integer-array";
5
- import { getOverlapsOfPotentiallyCircularRanges } from "@teselagen/range-utils";
6
- import getXStartAndWidthOfRangeWrtRow from "./getXStartAndWidthOfRangeWrtRow";
7
- import pureNoFunc from "../utils/pureNoFunc";
8
- import { connectToEditor } from "../withEditorProps";
9
-
10
- let snipStyle = {
11
- height: "100%",
12
- // background: 'black',
13
- position: "absolute",
14
- width: "2px"
15
- };
16
- let snipConnectorStyle = {
17
- height: "2px",
18
- // background: 'black',
19
- position: "absolute",
20
- top: -1
21
- };
22
-
23
- // var cursor = getCursorForRow(caretPosition, row, bpsPerRow, snipStyle, charWidth, true);
24
-
25
- function getSnipForRow(
26
- isTopStrand,
27
- isHovered,
28
- snipPosition,
29
- row,
30
- sequenceLength,
31
- bpsPerRow,
32
- snipStyle,
33
- charWidth,
34
- index
35
- ) {
36
- if (!isPositionWithinRange(snipPosition, row)) return;
37
-
38
- const { xStart } = getXStartAndWidthOfRangeWrtRow({
39
- range: { start: snipPosition, end: snipPosition },
40
- row,
41
- charWidth,
42
- sequenceLength
43
- });
44
-
45
- const newCursorStyle = assign({}, snipStyle, {
46
- left: xStart
47
- });
48
- const cursorEl = (
49
- <div
50
- key={index}
51
- className={`veRowViewCutsite snip ${
52
- isTopStrand ? "topStrandSnip" : "bottomStrandSnip"
53
- } ${isHovered ? "snipHovered" : ""} snipPosition-${snipPosition}`}
54
- style={newCursorStyle}
55
- />
56
- );
57
- return cursorEl;
58
- }
59
-
60
- function getSnipConnector(
61
- isHovered,
62
- snipRange,
63
- row,
64
- sequenceLength,
65
- bpsPerRow,
66
- snipConnectorStyle,
67
- charWidth,
68
- index
69
- ) {
70
- //tnr: we basically need to first determine what the range start and end are..
71
- // var _snipRange = {
72
- // ...snipRange,
73
- // end: norm(snipRange.end-1,sequenceLength)
74
- // }
75
- //then mask the range by the row
76
-
77
- const overlaps = getOverlapsOfPotentiallyCircularRanges(
78
- snipRange,
79
- { ...row, end: row.end + 1 },
80
- sequenceLength
81
- );
82
- return overlaps.map(function (overlap, index2) {
83
- let { xStart, width } = getXStartAndWidthOfRangeWrtRow({
84
- range: overlap,
85
- row,
86
- charWidth,
87
- sequenceLength
88
- });
89
- width -= charWidth;
90
- //the second logical operator catches the special case where we're at the very end of the sequence..
91
- const newCursorStyle = assign({}, snipConnectorStyle, {
92
- left: xStart,
93
- width
94
- });
95
- const cursorEl = (
96
- <div
97
- key={index + index2}
98
- className={`veRowViewCutsite snipConnector ${
99
- isHovered ? "snipHovered" : ""
100
- } `}
101
- style={newCursorStyle}
102
- />
103
- );
104
- return cursorEl;
105
- });
106
- }
107
-
108
- function Cutsites(props) {
109
- const {
110
- annotationRanges,
111
- charWidth,
112
- bpsPerRow,
113
- row,
114
- sequenceLength,
115
- topStrand,
116
- hoveredAnnotation
117
- } = props;
118
- const snips = [];
119
- const snipConnectors = [];
120
- Object.keys(annotationRanges)
121
- .sort(a =>
122
- annotationRanges[a].annotation.id === hoveredAnnotation ? 1 : -1
123
- )
124
- .forEach(function (key) {
125
- const annotationRange = annotationRanges[key];
126
- let { annotation } = annotationRange;
127
- if (!annotation) {
128
- annotation = annotationRange;
129
- }
130
- let {
131
- topSnipPosition,
132
- bottomSnipPosition,
133
- upstreamBottomSnip,
134
- upstreamTopSnip,
135
- upstreamTopBeforeBottom,
136
- topSnipBeforeBottom
137
- } = annotation;
138
- topSnipPosition = topSnipPosition && Number(topSnipPosition);
139
- bottomSnipPosition = bottomSnipPosition && Number(bottomSnipPosition);
140
- upstreamTopSnip = upstreamTopSnip && Number(upstreamTopSnip);
141
- upstreamBottomSnip = upstreamBottomSnip && Number(upstreamBottomSnip);
142
- const isHovered = annotation.id === hoveredAnnotation;
143
- snipStyle = {
144
- ...snipStyle,
145
- background: annotation.restrictionEnzyme.color
146
- };
147
- snipConnectorStyle = {
148
- ...snipConnectorStyle,
149
- background: annotation.restrictionEnzyme.color
150
- };
151
-
152
- let newSnip;
153
- let newConnector;
154
- const snipRange = {};
155
-
156
- if (areNonNegativeIntegers([bottomSnipPosition, topSnipPosition])) {
157
- if (topStrand) {
158
- newSnip = getSnipForRow(
159
- true,
160
- isHovered,
161
- topSnipPosition,
162
- row,
163
- sequenceLength,
164
- bpsPerRow,
165
- snipStyle,
166
- charWidth,
167
- key + "downstream"
168
- );
169
- if (newSnip) {
170
- snips.push(newSnip);
171
- }
172
- } else {
173
- newSnip = getSnipForRow(
174
- false,
175
- isHovered,
176
- bottomSnipPosition,
177
- row,
178
- sequenceLength,
179
- bpsPerRow,
180
- snipStyle,
181
- charWidth,
182
- key + "downstream"
183
- );
184
- if (newSnip) {
185
- snips.push(newSnip);
186
- }
187
- if (topSnipBeforeBottom) {
188
- snipRange.start = topSnipPosition;
189
- snipRange.end = bottomSnipPosition;
190
- } else {
191
- snipRange.start = bottomSnipPosition;
192
- snipRange.end = topSnipPosition;
193
- }
194
- newConnector = getSnipConnector(
195
- isHovered,
196
- snipRange,
197
- row,
198
- sequenceLength,
199
- bpsPerRow,
200
- snipConnectorStyle,
201
- charWidth,
202
- key + "downstreamConnector"
203
- );
204
- snipConnectors.push(newConnector);
205
- }
206
- }
207
- if (areNonNegativeIntegers([upstreamBottomSnip, upstreamTopSnip])) {
208
- if (topStrand) {
209
- newSnip = getSnipForRow(
210
- true,
211
- isHovered,
212
- upstreamTopSnip,
213
- row,
214
- sequenceLength,
215
- bpsPerRow,
216
- snipStyle,
217
- charWidth,
218
- key + "upstream"
219
- );
220
- if (newSnip) {
221
- snips.push(newSnip);
222
- }
223
- } else {
224
- newSnip = getSnipForRow(
225
- false,
226
- isHovered,
227
- upstreamBottomSnip,
228
- row,
229
- sequenceLength,
230
- bpsPerRow,
231
- snipStyle,
232
- charWidth,
233
- key + "upstream"
234
- );
235
- if (newSnip) {
236
- snips.push(newSnip);
237
- }
238
- if (upstreamTopBeforeBottom) {
239
- snipRange.start = upstreamTopSnip;
240
- snipRange.end = upstreamBottomSnip;
241
- } else {
242
- snipRange.start = upstreamBottomSnip;
243
- snipRange.end = upstreamTopSnip;
244
- }
245
- newConnector = getSnipConnector(
246
- isHovered,
247
- snipRange,
248
- row,
249
- sequenceLength,
250
- bpsPerRow,
251
- snipConnectorStyle,
252
- charWidth,
253
- key + "upstreamConnector"
254
- );
255
- snipConnectors.push(newConnector);
256
- }
257
- }
258
- });
259
- return (
260
- <div>
261
- {snips}
262
- {snipConnectors}
263
- </div>
264
- );
265
- }
266
-
267
- export default pureNoFunc(
268
- connectToEditor(({ hoveredAnnotation }) => ({
269
- hoveredAnnotation
270
- }))(Cutsites)
271
- );
package/DeletionLayer.js DELETED
@@ -1,28 +0,0 @@
1
- import React from "react";
2
- import drawDirectedPiePiece from "./drawDirectedPiePiece";
3
-
4
- export default function DeletionLayer({
5
- color = "orange",
6
- radius,
7
- arrowheadLength = 0.5,
8
- annotationHeight,
9
- totalAngle,
10
- ...rest
11
- }) {
12
- const path = drawDirectedPiePiece({
13
- radius,
14
- annotationHeight,
15
- totalAngle,
16
- arrowheadLength,
17
- tailThickness: 1 //feature specific
18
- });
19
- return (
20
- <path
21
- {...rest}
22
- strokeWidth=".5"
23
- stroke="black"
24
- fill={color}
25
- d={path.print()}
26
- />
27
- );
28
- }
package/DropHandler.css DELETED
@@ -1,21 +0,0 @@
1
- .dropzone-dragging-message {
2
- position: absolute;
3
- z-index: -1;
4
- margin-left: auto;
5
- margin-right: auto;
6
- left: 0;
7
- right: 0;
8
- top: 30%;
9
- width: 310px;
10
- border-radius: 3px;
11
- border: 7px dotted lightblue;
12
- background: rgb(232, 232, 232);
13
- padding: 30px;
14
- font-size: 24px;
15
- opacity: 0;
16
- transition: 0.5s all;
17
- }
18
- .veEditor.isActive .dropzone-dragging-message {
19
- z-index: 10;
20
- opacity: 1;
21
- }
package/DropHandler.js DELETED
@@ -1,64 +0,0 @@
1
- import React from "react";
2
- import Dropzone from "react-dropzone";
3
- import classNames from "classnames";
4
- import "./DropHandler.css";
5
-
6
- export default class DropHandler extends React.Component {
7
- handleDrop = files => {
8
- if (!files || !files.length) {
9
- return window.toastr.warning("Unrecognized File Type");
10
- }
11
- this.props.importSequenceFromFile(files[0]);
12
- };
13
- render() {
14
- const { children, style, className, disabled } = this.props;
15
- return (
16
- <Dropzone
17
- disabled={disabled}
18
- onClick={evt => evt.preventDefault()}
19
- multiple={false}
20
- accept={[
21
- ".gb",
22
- ".gbk",
23
- ".fasta",
24
- ".fa",
25
- ".geneious",
26
- ".gp",
27
- ".txt",
28
- ".dna",
29
- ".prot",
30
- ".ab1",
31
- ".json"
32
- ]}
33
- onDropRejected={() => {
34
- window.toastr.error("Error: Incorrect File Type");
35
- }}
36
- onDrop={this.handleDrop}
37
- >
38
- {({ getRootProps, isDragActive, isDragReject }) => (
39
- <div
40
- {...getRootProps()}
41
- {...{
42
- style,
43
- className: classNames(className, {
44
- isActive: isDragActive,
45
- isRejected: isDragReject
46
- })
47
- }}
48
- >
49
- <DraggingMessage />
50
- {children}
51
- </div>
52
- )}
53
- </Dropzone>
54
- );
55
- }
56
- }
57
- function DraggingMessage() {
58
- return (
59
- <div className="dropzone-dragging-message">
60
- Drop Fasta or Genbank files to view them in the editor. The following
61
- extensions are accepted: .gb .gbk .fasta .fa .gp .txt
62
- </div>
63
- );
64
- }