@teselagen/ove 0.7.28 → 0.7.29

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 (285) hide show
  1. package/index.cjs.js +1055 -996
  2. package/index.es.js +1055 -996
  3. package/index.umd.js +189036 -0
  4. package/ove.css +1 -1
  5. package/package.json +2 -6
  6. package/src/helperComponents/PropertiesDialog/TranslationProperties.js +1 -1
  7. package/AASliver.js +0 -187
  8. package/AddLaddersDialog.js +0 -82
  9. package/AdditionalCutsiteInfoDialog.js +0 -599
  10. package/AlignmentVisibilityTool.js +0 -105
  11. package/AnnotationContainerHolder.js +0 -20
  12. package/AnnotationPositioner.js +0 -27
  13. package/AutoAnnotate.js +0 -501
  14. package/AutoAnnotateBpMatchingDialog.js +0 -208
  15. package/Axis.js +0 -151
  16. package/AxisNumbers.js +0 -35
  17. package/Browser.js +0 -106
  18. package/Caret.js +0 -63
  19. package/Chromatogram.js +0 -293
  20. package/CircularDnaSequence.js +0 -73
  21. package/CircularZoomMinimap.js +0 -16
  22. package/ColorPicker.js +0 -30
  23. package/CommandHotkeyHandler.js +0 -44
  24. package/CreateAnnotationsPage.js +0 -98
  25. package/Cutsite.js +0 -18
  26. package/CutsiteProperties.js +0 -176
  27. package/CutsiteSelectionLayers.js +0 -47
  28. package/Cutsites.js +0 -271
  29. package/DeletionLayer.js +0 -28
  30. package/DropHandler.css +0 -21
  31. package/DropHandler.js +0 -64
  32. package/EditCaretPosition.js +0 -234
  33. package/EditTrackNameDialog.js +0 -30
  34. package/Feature.js +0 -83
  35. package/FeatureProperties.js +0 -6
  36. package/FillWindow.js +0 -47
  37. package/GenbankView.js +0 -74
  38. package/GeneralProperties.js +0 -117
  39. package/GenericAnnotationProperties.js +0 -406
  40. package/GlobalDialog.js +0 -73
  41. package/GlobalDialogUtils.js +0 -110
  42. package/GoToDialog.js +0 -25
  43. package/HorizontalPanelDragHandle.js +0 -35
  44. package/Keyboard.js +0 -85
  45. package/Labels.js +0 -327
  46. package/Ladder.css +0 -20
  47. package/Ladder.js +0 -303
  48. package/MeltingTemp.js +0 -85
  49. package/Menlo.ttf +0 -0
  50. package/Minimap.js +0 -515
  51. package/Mismatches.js +0 -134
  52. package/Monaco.ttf +0 -0
  53. package/MultipleSeqsDetectedOnImportDialog.js +0 -74
  54. package/Orf.js +0 -109
  55. package/OrfProperties.js +0 -117
  56. package/Orfs.js +0 -35
  57. package/PCRTool.js +0 -179
  58. package/PairwiseAlignmentView.js +0 -68
  59. package/Part.js +0 -34
  60. package/PartProperties.js +0 -9
  61. package/PassThrough.js +0 -3
  62. package/PerformantSelectionLayer.js +0 -32
  63. package/PinchHelper.js +0 -24
  64. package/PointedAnnotation.js +0 -347
  65. package/PositionAnnotationOnCircle.js +0 -26
  66. package/Primer.js +0 -41
  67. package/PrimerProperties.js +0 -19
  68. package/ReflexContainer.js +0 -802
  69. package/ReflexElement.js +0 -160
  70. package/ReflexEvents.js +0 -77
  71. package/ReflexSplitter.js +0 -205
  72. package/RenameSequenceDialog.js +0 -7
  73. package/RotateCircularViewSlider.js +0 -93
  74. package/SelectDialog.js +0 -150
  75. package/SequenceName.js +0 -15
  76. package/SimpleCircularOrLinearView.js +0 -381
  77. package/SimpleOligoPreview.js +0 -39
  78. package/SingleEnzymeCutsiteInfo.js +0 -139
  79. package/ToolbarItem.js +0 -192
  80. package/Translation.js +0 -198
  81. package/TranslationProperties.js +0 -149
  82. package/UncontrolledSliderWithPlusMinusBtns.css +0 -5
  83. package/UncontrolledSliderWithPlusMinusBtns.js +0 -134
  84. package/VeTopRightContainer.js +0 -12
  85. package/ZoomCircularViewSlider.js +0 -62
  86. package/ZoomLinearView.js +0 -47
  87. package/addAlignment.js +0 -6
  88. package/addMetaToActionCreators.js +0 -12
  89. package/addWrappedAddons.js +0 -20
  90. package/alignmentTool.js +0 -503
  91. package/alignments.js +0 -379
  92. package/annotationLabelVisibility.js +0 -2
  93. package/annotationSearchSelector.js +0 -24
  94. package/annotationTypes.js +0 -35
  95. package/annotationVisibility.js +0 -196
  96. package/annotationsToSupport.js +0 -104
  97. package/arrayToObjWithIds.js +0 -17
  98. package/arrayUtils.js +0 -19
  99. package/array_move.js +0 -10
  100. package/calculateTickMarkPositionsForGivenRange.js +0 -47
  101. package/caretPosition.js +0 -27
  102. package/cdsFeaturesSelector.js +0 -9
  103. package/charWidth.js +0 -22
  104. package/circular.js +0 -19
  105. package/circularSelector.js +0 -4
  106. package/clickAndDragUtils.js +0 -576
  107. package/coerceInitialValue.js +0 -7
  108. package/combineReducersDontIgnoreKeys.js +0 -12
  109. package/commandUtils.js +0 -20
  110. package/constants.js +0 -2
  111. package/copyOptions.js +0 -34
  112. package/createFragmentLines.js +0 -120
  113. package/createMergedDefaultStateReducer.js +0 -30
  114. package/createMetaAction.js +0 -12
  115. package/createSequenceInputPopup.js +0 -290
  116. package/createSequenceInputPopupStyle.css +0 -87
  117. package/createSimpleDialog.js +0 -89
  118. package/createYourOwnEnzyme.js +0 -39
  119. package/cutsiteLabelColorSelector.js +0 -6
  120. package/cutsiteTool.js +0 -88
  121. package/cutsitesByRangeSelector.js +0 -5
  122. package/cutsitesSelector.js +0 -61
  123. package/darkmode.css +0 -98
  124. package/defaultConfig.js +0 -150
  125. package/deletionLayers.js +0 -36
  126. package/description.js +0 -21
  127. package/digestTool.js +0 -34
  128. package/dnaToColor.js +0 -17
  129. package/downloadTool.js +0 -39
  130. package/draggableClassnames.js +0 -5
  131. package/drawAnnotations.js +0 -440
  132. package/drawDirectedPiePiece.js +0 -142
  133. package/editTool.js +0 -49
  134. package/editorSelector.js +0 -2
  135. package/editorUtils.js +0 -205
  136. package/estimateRowHeight.js +0 -184
  137. package/featureLengthsToHide.js +0 -27
  138. package/featureTool.js +0 -34
  139. package/features.js +0 -19
  140. package/featuresSelector.js +0 -8
  141. package/filteredCutsitesSelector.js +0 -136
  142. package/filteredFeaturesSelector.js +0 -32
  143. package/filteredPartsSelector.js +0 -57
  144. package/filteredPrimersSelector.js +0 -27
  145. package/filteredRestrictionEnzymesSelector.js +0 -1
  146. package/find.png +0 -0
  147. package/findTool.js +0 -79
  148. package/findToolConstants.js +0 -1
  149. package/frameTranslations.js +0 -52
  150. package/fullscreen.png +0 -0
  151. package/getAdditionalEnzymesSelector.js +0 -46
  152. package/getAngleForPositionMidpoint.js +0 -3
  153. package/getAnnotationClassnames.js +0 -12
  154. package/getAnnotationNameAndStartStopString.js +0 -61
  155. package/getBpsPerRow.js +0 -19
  156. package/getCutsiteLabelHeights.js +0 -56
  157. package/getGapMap.js +0 -12
  158. package/getGaps.js +0 -27
  159. package/getInternalLabel.js +0 -40
  160. package/getOveHotkeyDefs.js +0 -12
  161. package/getPairwiseOverviewLinearViewOptions.js +0 -38
  162. package/getRangeAnglesSpecial.js +0 -12
  163. package/getStructuredBases.js +0 -97
  164. package/getTrackFromEvent.js +0 -25
  165. package/getVisibleStartEnd.js +0 -7
  166. package/getXStartAndWidthFromNonCircularRange.js +0 -12
  167. package/getXStartAndWidthOfRangeWrtRow.js +0 -27
  168. package/getXStartAndWidthOfRowAnnotation.js +0 -19
  169. package/getYOffset.js +0 -15
  170. package/hoveredAnnotation.js +0 -24
  171. package/importTool.js +0 -27
  172. package/index.js +0 -71
  173. package/inlineFindTool.js +0 -38
  174. package/isElementInViewport.js +0 -29
  175. package/isEnzymeFilterAndSelector.js +0 -1
  176. package/isTargetWithinEl.js +0 -6
  177. package/labelLineIntensity.js +0 -25
  178. package/labelSize.js +0 -23
  179. package/ladderDefaults.js +0 -25
  180. package/lastSavedId.js +0 -20
  181. package/lineageLines.js +0 -11
  182. package/linear.png +0 -0
  183. package/makeStore.js +0 -34
  184. package/massageTickSpacing.js +0 -19
  185. package/materiallyAvailable.js +0 -19
  186. package/middleware.js +0 -112
  187. package/minimumOrfSize.js +0 -24
  188. package/minimumOrfSizeSelector.js +0 -2
  189. package/modalActions.js +0 -3
  190. package/moveCaret.js +0 -58
  191. package/name.js +0 -19
  192. package/normalizeAngle.js +0 -3
  193. package/normalizeAngleRange.js +0 -9
  194. package/oligoTool.js +0 -30
  195. package/onlyUpdateForKeysDeep.js +0 -31
  196. package/orfFrameToColorMap.js +0 -10
  197. package/orfTool.js +0 -136
  198. package/orfsSelector.js +0 -15
  199. package/panelsShown.js +0 -294
  200. package/partLengthsToHide.js +0 -23
  201. package/partOverhangs.js +0 -6
  202. package/partTagSearch.js +0 -69
  203. package/partTool.js +0 -45
  204. package/parts.js +0 -19
  205. package/partsSelector.js +0 -8
  206. package/pie.png +0 -0
  207. package/polarToSpecialCartesian.js +0 -7
  208. package/positionCutsites.js +0 -6
  209. package/prepareRowData.js +0 -64
  210. package/primerBases.js +0 -221
  211. package/primerLengthsToHide.js +0 -27
  212. package/primers.js +0 -19
  213. package/primersSelector.js +0 -8
  214. package/print.png +0 -0
  215. package/printTool.js +0 -31
  216. package/propertiesTool.js +0 -40
  217. package/proteinUtils.js +0 -3
  218. package/pureNoFunc.js +0 -18
  219. package/readOnly.js +0 -25
  220. package/redoTool.js +0 -30
  221. package/reflex-styles.css +0 -128
  222. package/reflex-styles.css.map +0 -9
  223. package/relaxLabelAngles.js +0 -157
  224. package/relaxLabels_DEPRECATED.js +0 -105
  225. package/replacementLayers.js +0 -36
  226. package/restrictionEnzymes.js +0 -52
  227. package/restrictionEnzymesSelector.js +0 -34
  228. package/rowviewContants.js +0 -3
  229. package/ruler.css +0 -89
  230. package/save.png +0 -0
  231. package/saveTool.js +0 -44
  232. package/searchLayersSelector.js +0 -71
  233. package/selectedAnnotations.js +0 -89
  234. package/selectedAnnotationsSelector.js +0 -1
  235. package/selectedCutsitesSelector.js +0 -21
  236. package/selectedPartTags.js +0 -21
  237. package/selectionLayer.js +0 -25
  238. package/sequence.js +0 -12
  239. package/sequenceDataHistory.js +0 -43
  240. package/sequenceDataSelector.js +0 -2
  241. package/sequenceLengthSelector.js +0 -5
  242. package/sequenceSelector.js +0 -4
  243. package/sharedActionCreators.js +0 -0
  244. package/shouldFlipText.js +0 -4
  245. package/shouldRerender.js +0 -27
  246. package/showFileDialog.js +0 -25
  247. package/showGCContent.js +0 -23
  248. package/show_cut_sites.png +0 -0
  249. package/show_features.png +0 -0
  250. package/show_orfs.png +0 -0
  251. package/show_primers.png +0 -0
  252. package/simpleDialog.css +0 -13
  253. package/specialCutsiteFilterOptions.js +0 -22
  254. package/style.css +0 -10
  255. package/tagsToBoldSelector.js +0 -2
  256. package/toggle_views.svg +0 -1
  257. package/toolBar.js +0 -23
  258. package/translationSearchMatchesSelector.js +0 -14
  259. package/translations.js +0 -20
  260. package/translationsRawSelector.js +0 -8
  261. package/translationsSelector.js +0 -137
  262. package/typeField.js +0 -24
  263. package/undoTool.js +0 -30
  264. package/updateEditor.js +0 -200
  265. package/updateLabelsForInViewFeatures.js +0 -55
  266. package/updateLabelsForInViewFeaturesCircView.js +0 -41
  267. package/updateTrackHelper.js +0 -58
  268. package/uppercaseSequenceMapFont.js +0 -25
  269. package/upsertDeleteActionGenerator.js +0 -31
  270. package/useAAColorType.js +0 -8
  271. package/useAdditionalOrfStartCodons.js +0 -24
  272. package/useAnnotationLimits.js +0 -42
  273. package/useChromatogramPrefs.js +0 -31
  274. package/useFormValue.js +0 -7
  275. package/useLadders.js +0 -6
  276. package/useMeltingTemp.js +0 -7
  277. package/useTmType.js +0 -10
  278. package/userDefinedHandlersAndOpts.js +0 -61
  279. package/utils.js +0 -37
  280. package/versionHistory.js +0 -26
  281. package/versionHistoryTool.js +0 -21
  282. package/viewSubmenu.js +0 -479
  283. package/visibilityTool.js +0 -39
  284. package/withHover.js +0 -113
  285. package/withRestrictionEnzymes.js +0 -15
package/SelectDialog.js DELETED
@@ -1,150 +0,0 @@
1
- import { convertRangeTo0Based } from "@teselagen/range-utils";
2
- import classNames from "classnames";
3
- import React from "react";
4
-
5
- import { reduxForm } from "redux-form";
6
- import { tgFormValues, wrapDialog } from "@teselagen/ui";
7
- import { compose } from "redux";
8
- import { Button, Intent, Classes } from "@blueprintjs/core";
9
-
10
- import { NumericInputField } from "@teselagen/ui";
11
- import { get } from "lodash-es";
12
- import { getRangeLength } from "@teselagen/range-utils";
13
- import { tryToRefocusEditor } from "../utils/editorUtils";
14
-
15
- // Single validation function - from & to have the same range
16
- const validate = (val, vals, props) => {
17
- const { min, max } = get(props, "extraProps.from", {});
18
- const circular = get(props, "extraProps.circular");
19
- if ((min && val < min) || (max && val > max)) {
20
- return "Invalid position";
21
- }
22
- if (!circular && Number(vals.from) > Number(vals.to)) {
23
- return "Wrong from/to order";
24
- }
25
- };
26
- // const selector = formValueSelector("selectDialog");
27
- export default compose(
28
- wrapDialog({
29
- isDraggable: true,
30
- width: 400,
31
- title: "Select Range",
32
- height: 270,
33
- onCloseHook: tryToRefocusEditor
34
- }),
35
- reduxForm({
36
- form: "selectDialog"
37
- }),
38
- tgFormValues("from", "to")
39
- )(
40
- class SelectDialog extends React.Component {
41
- updateTempHighlight =
42
- ({ isStart, isEnd } = {}) =>
43
- val => {
44
- const { selectionLayerUpdate, from, to, invalid } = this.props;
45
- if (invalid) return;
46
- selectionLayerUpdate(
47
- convertRangeTo0Based({
48
- start: isStart ? Math.round(val) : from,
49
- end: isEnd ? Math.round(val) : to
50
- })
51
- );
52
- };
53
- componentDidMount() {
54
- const { from, to, initialCaretPosition } = this.props;
55
- this.initialSelection = { from, to, initialCaretPosition };
56
- this.updateTempHighlight()();
57
- }
58
- render() {
59
- const {
60
- hideModal,
61
- onSubmit,
62
- selectionLayerUpdate,
63
- from,
64
- to,
65
- initialCaretPosition,
66
- caretPositionUpdate,
67
- sequenceLength,
68
- extraProps,
69
- isProtein,
70
- invalid,
71
- handleSubmit
72
- } = this.props;
73
- const selectionLength = getRangeLength(
74
- {
75
- start: Number(from),
76
- end: Number(to)
77
- },
78
- sequenceLength
79
- );
80
-
81
- return (
82
- <form
83
- onSubmit={handleSubmit(data => {
84
- if (onSubmit) onSubmit(data);
85
- hideModal();
86
- tryToRefocusEditor();
87
- })}
88
- className={classNames(
89
- Classes.DIALOG_BODY,
90
- "tg-min-width-dialog simple-dialog"
91
- )}
92
- >
93
- <NumericInputField
94
- autoFocus
95
- minorStepSize={1}
96
- label="From:"
97
- clampValueOnBlur
98
- {...extraProps.to}
99
- validate={validate}
100
- //tnrtodo this normalization will actually work when https://github.com/palantir/blueprint/issues/3553 gets resolved
101
- normalize={normalizeToInt}
102
- onAnyNumberChange={this.updateTempHighlight({ isStart: true })}
103
- name="from"
104
- />
105
- <NumericInputField
106
- label="To:"
107
- clampValueOnBlur
108
- minorStepSize={1}
109
- {...extraProps.from}
110
- validate={validate}
111
- normalize={normalizeToInt}
112
- onAnyNumberChange={this.updateTempHighlight({ isEnd: true })}
113
- name="to"
114
- />
115
- <div className="dialog-buttons">
116
- <Button
117
- onClick={() => {
118
- if (initialCaretPosition > -1) {
119
- caretPositionUpdate(initialCaretPosition);
120
- } else {
121
- selectionLayerUpdate({
122
- start: this.initialSelection.from,
123
- end: this.initialSelection.to
124
- });
125
- }
126
- hideModal();
127
- tryToRefocusEditor();
128
- }}
129
- text="Cancel"
130
- />
131
- <Button
132
- type="submit"
133
- intent={Intent.PRIMARY}
134
- text={`Select ${invalid ? 0 : selectionLength} ${
135
- isProtein ? "AA" : "BP"
136
- }${selectionLength === 1 ? "" : "s"}`}
137
- disabled={invalid}
138
- />
139
- </div>
140
- </form>
141
- );
142
- }
143
- }
144
- );
145
-
146
- const normalizeToInt = val => {
147
- const int = Math.round(val);
148
- const normalizedVal = `${int >= 0 ? int : 1}`;
149
- return normalizedVal;
150
- };
package/SequenceName.js DELETED
@@ -1,15 +0,0 @@
1
- import React from "react";
2
-
3
- export function SequenceName({ sequenceName, sequenceLength, isProtein }) {
4
- return (
5
- <div key="sequenceNameText" className="sequenceNameText">
6
- <span>{sequenceName} </span>
7
- <br />
8
- <span>
9
- {isProtein
10
- ? `${Math.floor(sequenceLength / 3)} AAs`
11
- : `${sequenceLength} bps`}
12
- </span>
13
- </div>
14
- );
15
- }
@@ -1,381 +0,0 @@
1
- import React, { useState } from "react";
2
- import {
3
- showContextMenu,
4
- commandMenuEnhancer,
5
- FillWindow
6
- } from "@teselagen/ui";
7
-
8
- import { CircularView } from "./CircularView";
9
- import { LinearView } from "./LinearView";
10
- import { RowView } from "./RowView";
11
-
12
- import { HoveredIdContext } from "./helperComponents/withHover";
13
- import { visibilityDefaultValues } from "./redux/annotationVisibility";
14
- import { addWrappedAddons } from "./utils/addWrappedAddons";
15
- import { SimpleOligoPreview } from "./SimpleOligoPreview";
16
- import { cloneDeep, flatMap, map, startCase } from "lodash-es";
17
- import {
18
- Button,
19
- ButtonGroup,
20
- Menu,
21
- MenuItem,
22
- Popover,
23
- Tooltip
24
- } from "@blueprintjs/core";
25
- import getCommands from "./commands";
26
- import { withHandlers } from "recompose";
27
- import { exportSequenceToFile } from "./withEditorProps";
28
- import {
29
- editorClicked,
30
- updateSelectionOrCaret
31
- } from "./withEditorInteractions/clickAndDragUtils";
32
-
33
- //this view is meant to be a helper for showing a simple (non-redux connected) circular or linear view!
34
- export default props => {
35
- let {
36
- sequenceData: _sequenceData,
37
- annotationVisibility: _annotationVisibility = {},
38
- noWarnings = true,
39
- withDownload,
40
- withChoosePreviewType,
41
- withCaretEnabled,
42
- withSelectionEnabled,
43
- smallSlider,
44
- withVisibilityOptions,
45
- minimalPreviewTypeBtns,
46
- withFullscreen,
47
- selectionLayer,
48
- selectionLayerUpdate,
49
- caretPositionUpdate,
50
- editorName = "tg-simple-dna-view"
51
- } = props;
52
- const [previewType, setPreviewType] = useState(
53
- _sequenceData.circular ? "circular" : "linear"
54
- );
55
- const [isPopoverOpen, setPopoverOpen] = useState(false);
56
- const [isFullscreen, setFullscreen] = useState(false);
57
- const [visibilityOptions, setVisibilityOptions] = useState({});
58
- const [caretPosition, _caretPositionUpdate] = useState(
59
- withCaretEnabled ? -1 : undefined
60
- );
61
- const [_selectionLayer, _selectionLayerUpdate] = useState(
62
- withSelectionEnabled ? { start: -1, end: -1 } : undefined
63
- );
64
- const sequenceLength = _sequenceData.noSequence
65
- ? _sequenceData.size
66
- : _sequenceData.sequence.length;
67
- selectionLayer = selectionLayer || _selectionLayer;
68
-
69
- const selectionLayerUpdateOld = selectionLayerUpdate || _selectionLayerUpdate;
70
- const caretPositionUpdateOld = caretPositionUpdate || _caretPositionUpdate;
71
-
72
- selectionLayerUpdate = (newSel, dontTrigger) => {
73
- if (!dontTrigger && newSel.start > -1) {
74
- caretPositionUpdate(-1, true);
75
- }
76
- selectionLayerUpdateOld(newSel);
77
- };
78
- caretPositionUpdate = (newCaret, dontTrigger) => {
79
- if (!dontTrigger && newCaret > -1) {
80
- selectionLayerUpdate({ start: -1, end: -1 }, true);
81
- }
82
- caretPositionUpdateOld(newCaret);
83
- };
84
- function annotationClicked({ annotation, event }) {
85
- event.stopPropagation();
86
- event.preventDefault();
87
- withSelectionEnabled &&
88
- updateSelectionOrCaret({
89
- doNotWrapOrigin: !sequenceData.circular,
90
- shiftHeld: event.shiftKey,
91
- sequenceLength,
92
- newRangeOrCaret: annotation,
93
- caretPosition,
94
- selectionLayer,
95
- selectionLayerUpdate: selectionLayerUpdate,
96
- caretPositionUpdate: caretPositionUpdate
97
- });
98
- }
99
-
100
- let tickSpacing = undefined;
101
- let Component = (
102
- withChoosePreviewType ? previewType === "circular" : _sequenceData.circular
103
- )
104
- ? CircularView
105
- : _sequenceData.isOligo && _sequenceData.sequence
106
- ? SimpleOligoPreview
107
- : LinearView;
108
- if (withChoosePreviewType && previewType === "row") {
109
- Component = RowView;
110
- tickSpacing = undefined;
111
- }
112
-
113
- let sequenceData = cloneDeep(_sequenceData);
114
- const annotationVisibility = {
115
- ...visibilityDefaultValues,
116
- ..._annotationVisibility,
117
- ...visibilityOptions
118
- };
119
-
120
- //here we're making it possible to not pass a sequenceData.sequence
121
- //we can just pass a .size property to save having to send the whole sequence if it isn't needed!
122
- if (sequenceData.noSequence) {
123
- annotationVisibility.sequence = false;
124
- annotationVisibility.reverseSequence = false;
125
- if (sequenceData.size === undefined) {
126
- return (
127
- <div>
128
- Error: No sequenceData.size detected when using noSequence flag{" "}
129
- </div>
130
- );
131
- }
132
- sequenceData = {
133
- ...sequenceData,
134
- sequence: {
135
- length: sequenceData.size
136
- }
137
- };
138
- }
139
- sequenceData.parts = addWrappedAddons(
140
- sequenceData.parts,
141
- sequenceData.sequence.length
142
- );
143
- const inner = ({ width, height }) => (
144
- <HoveredIdContext.Provider value={{ hoveredId: props.hoveredId }}>
145
- <div style={{ width: "fit-content" }}>
146
- {(withDownload ||
147
- withChoosePreviewType ||
148
- withFullscreen ||
149
- VisibilityOptions) && (
150
- <div
151
- style={{
152
- marginLeft: 10,
153
- marginBottom: 5,
154
- ...(isFullscreen && {
155
- marginRight: 10,
156
- paddingTop: 10
157
- }),
158
- display: "flex",
159
- justifyContent: "end"
160
- }}
161
- >
162
- {withDownload && <DownloadBtn {...props}></DownloadBtn>}
163
- {withVisibilityOptions && (
164
- <VisibilityOptions
165
- {...{
166
- ...props,
167
- sequenceData,
168
- annotationVisibility,
169
- setVisibilityOptions,
170
- isPopoverOpen,
171
- setPopoverOpen
172
- }}
173
- ></VisibilityOptions>
174
- )}
175
-
176
- {withChoosePreviewType && (
177
- <ButtonGroup>
178
- <Tooltip content="Circular View">
179
- <Button
180
- minimal={minimalPreviewTypeBtns}
181
- className="tgPreviewTypeCircular"
182
- active={previewType === "circular"}
183
- intent="primary"
184
- onClick={() => setPreviewType("circular")}
185
- icon="circle"
186
- ></Button>
187
- </Tooltip>
188
- <Tooltip content="Linear View">
189
- <Button
190
- minimal={minimalPreviewTypeBtns}
191
- className="tgPreviewTypeLinear"
192
- active={previewType === "linear"}
193
- intent="primary"
194
- onClick={() => setPreviewType("linear")}
195
- icon="layout-linear"
196
- ></Button>
197
- </Tooltip>
198
- <Tooltip content="Sequence View">
199
- <Button
200
- minimal={minimalPreviewTypeBtns}
201
- className="tgPreviewTypeRow"
202
- active={previewType === "row"}
203
- intent="primary"
204
- onClick={() => setPreviewType("row")}
205
- icon="menu"
206
- ></Button>
207
- </Tooltip>
208
- </ButtonGroup>
209
- )}
210
- {withFullscreen && (
211
- <FullscreenBtn
212
- {...{ setFullscreen, isFullscreen }}
213
- ></FullscreenBtn>
214
- )}
215
- </div>
216
- )}
217
- <Component
218
- {...{
219
- showCicularViewInternalLabels: true,
220
- className: `${editorName} veEditor tg-simple-dna-view`,
221
- width: 300,
222
- height: 300,
223
- noWarnings,
224
- partClicked: annotationClicked,
225
- featureClicked: annotationClicked,
226
- primerClicked: annotationClicked,
227
- ...props,
228
- ...(isFullscreen && {
229
- width: width - 10,
230
- height: height - 10
231
- }),
232
- smartCircViewLabelRender: true,
233
- caretPosition,
234
- smallSlider,
235
- ...(withSelectionEnabled && {
236
- selectionLayer,
237
- selectionLayerUpdate
238
- }),
239
- readOnly: true,
240
- editorClicked: ({ nearestCaretPos, event } = {}) => {
241
- if (!withCaretEnabled) {
242
- if (!withSelectionEnabled) return;
243
- if (!event.shiftKey) return;
244
- if (!(selectionLayer.start > -1)) return;
245
- }
246
-
247
- editorClicked({
248
- nearestCaretPos,
249
- shiftHeld: !withSelectionEnabled ? false : event.shiftKey,
250
- updateSelectionOrCaret: (shiftHeld, newRangeOrCaret) => {
251
- updateSelectionOrCaret({
252
- doNotWrapOrigin: !sequenceData.circular,
253
- sequenceLength,
254
- shiftHeld,
255
- newRangeOrCaret,
256
- caretPosition,
257
- selectionLayer,
258
- selectionLayerUpdate: selectionLayerUpdate,
259
- caretPositionUpdate: caretPositionUpdate
260
- });
261
- }
262
- });
263
- },
264
- instantiated: true,
265
- tickSpacing,
266
- hoveredId: props.hoveredId,
267
- annotationVisibility,
268
- sequenceData,
269
- showTitle: true
270
- }}
271
- />
272
- </div>
273
- </HoveredIdContext.Provider>
274
- );
275
- if (isFullscreen) {
276
- return (
277
- <FillWindow asPortal className="tgSimpleViewFullscreen">
278
- {inner}
279
- </FillWindow>
280
- );
281
- }
282
- return inner({});
283
- };
284
-
285
- const DownloadBtn = withHandlers({ exportSequenceToFile })(props => {
286
- return (
287
- <Tooltip content="Download">
288
- <Button
289
- className="veDownloadButton"
290
- style={{ marginRight: 10 }}
291
- onClick={event =>
292
- showContextMenu(
293
- [
294
- "exportSequenceAsGenbank",
295
- "exportDNASequenceAsFasta",
296
- "exportProteinSequenceAsFasta",
297
- "exportSequenceAsTeselagenJson"
298
- ],
299
- [
300
- commandMenuEnhancer(getCommands({ props }), {
301
- useTicks: true,
302
- omitIcons: true
303
- })
304
- ],
305
- event
306
- )
307
- }
308
- minimal
309
- intent="primary"
310
- icon="download"
311
- ></Button>
312
- </Tooltip>
313
- );
314
- });
315
- const FullscreenBtn = ({ setFullscreen, isFullscreen }) => {
316
- return (
317
- <Tooltip content={`${isFullscreen ? "Close " : ""}Fullscreen`}>
318
- <Button
319
- className="veFullscreenButton"
320
- style={{ marginLeft: 10, marginRight: 10 }}
321
- onClick={() => {
322
- setFullscreen(!isFullscreen);
323
- }}
324
- minimal
325
- intent="primary"
326
- icon={!isFullscreen ? "maximize" : "minimize"}
327
- ></Button>
328
- </Tooltip>
329
- );
330
- };
331
- const VisibilityOptions = ({
332
- annotationVisibility,
333
- sequenceData,
334
- setVisibilityOptions,
335
- isPopoverOpen,
336
- setPopoverOpen
337
- }) => {
338
- return (
339
- <Tooltip disabled={isPopoverOpen} content="Visibility Options">
340
- <Popover
341
- minimal
342
- onInteraction={isOpen => {
343
- setPopoverOpen(isOpen);
344
- }}
345
- isOpen={isPopoverOpen}
346
- content={
347
- <Menu>
348
- {flatMap(
349
- ["features", "parts", "primers", "translations", "cutsites"],
350
- name => {
351
- if (!map(sequenceData[name]).length) return [];
352
- return (
353
- <MenuItem
354
- onClick={e => {
355
- setVisibilityOptions({
356
- ...annotationVisibility,
357
- [name]: !annotationVisibility[name]
358
- });
359
- e.stopPropagation();
360
- }}
361
- icon={annotationVisibility[name] ? "tick" : "blank"}
362
- key={name}
363
- text={startCase(name)}
364
- ></MenuItem>
365
- );
366
- }
367
- )}
368
- </Menu>
369
- }
370
- >
371
- <Button
372
- className="veSimpleVisibilityBtn"
373
- style={{ marginLeft: 10, marginRight: 10 }}
374
- minimal
375
- intent="primary"
376
- icon="eye-open"
377
- ></Button>
378
- </Popover>
379
- </Tooltip>
380
- );
381
- };
@@ -1,39 +0,0 @@
1
- import React from "react";
2
- import { SequenceName } from "./LinearView/SequenceName";
3
- import classNames from "classnames";
4
-
5
- export function SimpleOligoPreview({
6
- className,
7
- width,
8
- height,
9
- sequenceData,
10
- showTitle
11
- }) {
12
- return (
13
- <div
14
- style={{
15
- width,
16
- height,
17
- paddingLeft: 5,
18
- display: "flex",
19
- flexDirection: "column"
20
- }}
21
- className={classNames("tg-simple-oligo-viewer", className)}
22
- >
23
- {showTitle && (
24
- <SequenceName
25
- {...{
26
- isProtein: sequenceData.isProtein,
27
- sequenceName: sequenceData.name || "",
28
- sequenceLength: sequenceData.sequence
29
- ? sequenceData.sequence.length
30
- : 0
31
- }}
32
- />
33
- )}
34
- <div style={{ height: "100%", overflow: "auto", wordBreak: "break-all" }}>
35
- {sequenceData.sequence || ""}
36
- </div>
37
- </div>
38
- );
39
- }