@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/Chromatogram.js DELETED
@@ -1,293 +0,0 @@
1
- import { showContextMenu } from "@teselagen/ui";
2
- import React, { useEffect, useRef, useState } from "react";
3
- import { Button } from "@blueprintjs/core";
4
- import {
5
- chromatogramMenu,
6
- useShowChromQualScores
7
- } from "../../utils/useChromatogramPrefs";
8
- import classNames from "classnames";
9
-
10
- export default function Chromatogram(props) {
11
- const { isRowView, chromatogramData, row, getGaps, charWidth } = props;
12
- const [showChromQualScores] = useShowChromQualScores();
13
- let [scalePct, setScalePct] = useState(0.05);
14
- const [hasDrawnOnce, setHasDrawnOnce] = useState(false);
15
- if (props.scalePct) scalePct = props.scalePct;
16
- if (props.setScalePct) setScalePct = props.setScalePct;
17
- const canvasRef = useRef();
18
- const gapsBeforeRow = getGaps(row.start).gapsBefore;
19
- useEffect(() => {
20
- if (
21
- !chromatogramData ||
22
- !chromatogramData.baseTraces ||
23
- !canvasRef.current
24
- ) {
25
- return true;
26
- }
27
- const painter = new drawTrace({
28
- isRowView,
29
- showChromQualScores,
30
- peakCanvas: canvasRef.current,
31
- traceData: chromatogramData,
32
- charWidth: charWidth,
33
- startBp: row.start,
34
- endBp: row.end,
35
- getGaps,
36
- gapsBeforeRow,
37
- scalePct: scalePct
38
- });
39
- painter.paintCanvas();
40
- setHasDrawnOnce(true);
41
- }, [
42
- setHasDrawnOnce,
43
- showChromQualScores,
44
- chromatogramData,
45
- charWidth,
46
- row.start,
47
- row.end,
48
- gapsBeforeRow,
49
- isRowView,
50
- scalePct,
51
- getGaps,
52
- canvasRef
53
- ]);
54
- const marginLeft = gapsBeforeRow * charWidth;
55
- if (chromatogramData.basePos && !chromatogramData.baseTraces) {
56
- throw new Error(
57
- 'Chromatogram data is missing "baseTraces". Be sure to call the convertBasePosTraceToPerBpTrace(_chromData) before passing it to the editor'
58
- );
59
- }
60
- return (
61
- <div
62
- className={classNames("chromatogram", {
63
- noQualityScores: !showChromQualScores
64
- })}
65
- style={{
66
- position: "relative"
67
- }}
68
- onContextMenu={e => {
69
- showContextMenu([chromatogramMenu], undefined, e);
70
- }}
71
- >
72
- <Button
73
- minimal
74
- data-tip="Scale Chromatogram Up"
75
- className="scaleChromatogramButtonUp"
76
- icon="caret-up"
77
- onClick={e => {
78
- e.stopPropagation();
79
- setScalePct(scalePct + 0.01);
80
- }}
81
- style={{
82
- zIndex: 10,
83
- position: "sticky",
84
- left: 145
85
- }}
86
- />
87
- <Button
88
- minimal
89
- data-tip="Scale Chromatogram Down"
90
- className="scaleChromatogramButtonDown"
91
- icon="caret-down"
92
- onClick={e => {
93
- e.stopPropagation();
94
- setScalePct(scalePct - 0.01);
95
- }}
96
- style={{
97
- zIndex: 10,
98
- position: "sticky",
99
- left: 175
100
- }}
101
- />
102
- <br />
103
-
104
- <div
105
- className={classNames({
106
- "chromatogram-trace": true,
107
- "chromatogram-trace-initialized": hasDrawnOnce
108
- })}
109
- style={{
110
- zIndex: 1,
111
- position: "relative",
112
- left: 0,
113
- // left: posOfSeqRead,
114
- display: "inline-block"
115
- }}
116
- // tnr comment back in for start of tooltip work
117
- // onMouseEnter={() => {
118
- // this.setState({ showTooltip: true });
119
- // }}
120
- // onMouseLeave={() => {
121
- // this.setState({ showTooltip: false });
122
- // }}
123
- // onMouseMove={(e) => {
124
- // const { row } = this.props;
125
- // const boundingRowRect =
126
- // this.chromatogramRef.getBoundingClientRect();
127
- // let nearestCaretPos;
128
- // if (
129
- // getClientY(e) > boundingRowRect.top &&
130
- // getClientY(e) < boundingRowRect.top + boundingRowRect.height
131
- // ) {
132
- // if (getClientX(e) - boundingRowRect.left < 0) {
133
- // nearestCaretPos = row.start;
134
- // } else {
135
- // const clickXPositionRelativeToRowContainer =
136
- // getClientX(e) - boundingRowRect.left;
137
- // const numberOfBPsInFromRowStart = Math.floor(
138
- // (clickXPositionRelativeToRowContainer + charWidth / 2) /
139
- // charWidth
140
- // );
141
- // nearestCaretPos = numberOfBPsInFromRowStart + row.start;
142
- // if (nearestCaretPos > row.end + 1) {
143
- // nearestCaretPos = row.end + 1;
144
- // }
145
- // }
146
- // this.setState({
147
- // nearestCaretPos
148
- // });
149
- // if (this.tooltipRef) {
150
- // this.tooltipRef.style.left =
151
- // getClientX(e) - boundingRowRect.left + "px";
152
- // this.tooltipRef.style.top =
153
- // getClientY(e) - boundingRowRect.top + "px";
154
- // }
155
- // if (this.tooltipHolderRef) {
156
- // this.tooltipHolderRef.reposition();
157
- // }
158
- // }
159
- // }}
160
- // ref={(n) => {
161
- // if (n) this.chromatogramRef = n;
162
- // }}
163
- >
164
- {/* tnr comment back in for start of tooltip work {this.state.showTooltip && (
165
- <div
166
- style={{
167
- position: "absolute",
168
- height: 1,
169
- width: 1,
170
- background: "white",
171
- top: this.state.tooltipTop,
172
- left: this.state.tooltipLeft
173
- }}
174
- ref={(n) => {
175
- if (n) this.tooltipRef = n;
176
- }}
177
- className="tg-chromatogram-tooltip"
178
- >
179
- <Tooltip
180
- hoverOpenDelay={300}
181
- ref={(n) => {
182
- if (n) this.tooltipHolderRef = n;
183
- }}
184
- isOpen={true}
185
- content={<div>{this.state.nearestCaretPos + 1}</div>}
186
- >
187
- <div></div>
188
- </Tooltip>
189
- </div>
190
- )} */}
191
-
192
- <canvas style={{ marginLeft }} ref={canvasRef} height="100" />
193
- </div>
194
- </div>
195
- );
196
- }
197
-
198
- function drawTrace({
199
- traceData,
200
- charWidth,
201
- startBp,
202
- peakCanvas,
203
- endBp,
204
- getGaps,
205
- gapsBeforeRow,
206
- showChromQualScores,
207
- // isRowView,
208
- scalePct
209
- }) {
210
- const colors = {
211
- adenine: "green",
212
- thymine: "red",
213
- guanine: "black",
214
- cytosine: "blue",
215
- other: "#ac68cc"
216
- };
217
- const ctx = peakCanvas.getContext("2d");
218
-
219
- const bottomBuffer = 0;
220
- const maxHeight = peakCanvas.height;
221
-
222
- const seqLengthWithGaps =
223
- endBp - startBp + 1 + getGaps(endBp).gapsBefore - gapsBeforeRow;
224
- const maxWidth = seqLengthWithGaps * charWidth;
225
-
226
- peakCanvas.width = maxWidth;
227
-
228
- const scaledHeight = maxHeight - bottomBuffer;
229
-
230
- this.drawPeaks = function (traceType, lineColor) {
231
- ctx.beginPath();
232
- //loop through base positions [ 43, 53, 70, 77, ...]
233
- // looping through the entire sequence length
234
- for (let baseIndex = startBp; baseIndex <= endBp; baseIndex++) {
235
- // each base's beginning and end of its peak
236
- // grab the start and end (43, 53) , (53, 70) ...
237
- // looping through each base's peak
238
- const traceForIndex = traceData.baseTraces[baseIndex][traceType];
239
- const gapsBefore = getGaps(baseIndex - 1).gapsBefore || 0;
240
- const gapsAt = getGaps(baseIndex).gapsBefore;
241
- const startXPosition =
242
- (baseIndex + gapsAt - startBp - gapsBeforeRow) * charWidth;
243
- const hasGaps = gapsBefore !== gapsAt;
244
- const traceLength = traceForIndex.length;
245
- const tracePointSpacing = charWidth / traceLength;
246
- // eslint-disable-next-line no-loop-func
247
- traceForIndex.forEach((_tracePoint, tracePointIndex) => {
248
- const tracePoint = scaledHeight - scalePct * _tracePoint;
249
- if (hasGaps && tracePointIndex === 0) {
250
- ctx.moveTo(startXPosition, tracePoint);
251
- }
252
- ctx.lineTo(
253
- startXPosition + tracePointSpacing * tracePointIndex,
254
- tracePoint
255
- );
256
- });
257
- }
258
- ctx.strokeStyle = lineColor;
259
- ctx.stroke();
260
- };
261
-
262
- this.drawQualityScoreHistogram = function () {
263
- if (!traceData.qualNums || !showChromQualScores) return;
264
- const qualMax = Math.max(...traceData.qualNums);
265
- const scalePctQual = scaledHeight / qualMax;
266
-
267
- for (let baseIndex = startBp; baseIndex <= endBp; baseIndex++) {
268
- const gapsAt = getGaps(baseIndex).gapsBefore;
269
- const startXPosition =
270
- (baseIndex + gapsAt - startBp - gapsBeforeRow) * charWidth;
271
-
272
- ctx.rect(
273
- startXPosition,
274
- scaledHeight - traceData.qualNums[baseIndex] * scalePctQual,
275
- charWidth,
276
- traceData.qualNums[baseIndex] * scalePctQual
277
- );
278
- }
279
- ctx.fillStyle = "#cfc3c3";
280
- ctx.fill();
281
- ctx.strokeStyle = "#e9e3f4";
282
- ctx.stroke();
283
- };
284
-
285
- this.paintCanvas = function () {
286
- this.drawQualityScoreHistogram();
287
- this.drawPeaks("aTrace", colors.adenine);
288
- this.drawPeaks("tTrace", colors.thymine);
289
- this.drawPeaks("gTrace", colors.guanine);
290
- this.drawPeaks("cTrace", colors.cytosine);
291
- ctx.closePath();
292
- };
293
- }
@@ -1,73 +0,0 @@
1
- import React from "react";
2
- import shouldFlipText from "./shouldFlipText";
3
- import { getComplementSequenceString } from "@teselagen/sequence-utils";
4
- import { getDnaColor } from "../constants/dnaToColor";
5
-
6
- export function CircularDnaSequence({
7
- rotationRadians,
8
- textHeightOffset = -5,
9
- annotation,
10
- showReverseSequence,
11
- showDnaColors,
12
- showSeqText,
13
- totalAngle,
14
- radius
15
- }) {
16
- const shouldFlip = shouldFlipText(annotation.startAngle + rotationRadians);
17
- const getShared = ({ textHeightOffset, isReverse }) => ({
18
- className: `ve-monospace-font ${isReverse ? "ve-sequence-reverse" : ""}`,
19
- transform:
20
- (shouldFlip ? "rotate(180)" : "") +
21
- ` translate(0, ${shouldFlip ? -textHeightOffset : textHeightOffset})`,
22
-
23
- style: {
24
- fontSize: 12,
25
- textAnchor: "middle",
26
- dominantBaseline: "central"
27
- }
28
- });
29
- let forward = null;
30
- let reverse = null;
31
- let dnaColors = null;
32
- if (showSeqText) {
33
- forward = (
34
- <text
35
- {...getShared({
36
- textHeightOffset: showReverseSequence
37
- ? textHeightOffset - 15
38
- : textHeightOffset
39
- })}
40
- >
41
- {annotation.letter}
42
- </text>
43
- );
44
- }
45
- if (showSeqText && showReverseSequence) {
46
- reverse = (
47
- <text {...getShared({ textHeightOffset, isReverse: true })}>
48
- {getComplementSequenceString(annotation.letter)}
49
- </text>
50
- );
51
- }
52
- if (!showSeqText || showDnaColors) {
53
- const height = showReverseSequence ? 30 : 15;
54
- const width = Math.max(totalAngle * radius);
55
- dnaColors = (
56
- <rect
57
- fill={getDnaColor(annotation.letter)}
58
- height={height}
59
- width={width}
60
- transform={`translate(-${width / 2}, -${height - 3})`}
61
- className="veDnaColor"
62
- ></rect>
63
- );
64
- }
65
-
66
- return (
67
- <g>
68
- {dnaColors}
69
- {forward}
70
- {reverse}
71
- </g>
72
- );
73
- }
@@ -1,16 +0,0 @@
1
- import React from "react";
2
-
3
- export function CircularZoomMinimap({ percentOfCircle, rotationRadians }) {
4
- const percent = Math.max(2, Math.min(45, percentOfCircle * 100 * 0.9));
5
- return (
6
- <div
7
- className="circularViewMinimap"
8
- style={{
9
- transform: `scale(-1,1) rotate(${
10
- (rotationRadians * 180) / Math.PI - percent * 1.8
11
- }deg)`,
12
- "--p": percent
13
- }}
14
- ></div>
15
- );
16
- }
package/ColorPicker.js DELETED
@@ -1,30 +0,0 @@
1
- import React from "react";
2
-
3
- export default class ColorPicker extends React.Component {
4
- render() {
5
- const { onColorSelect } = this.props;
6
- return (
7
- <div style={{ display: "flex", padding: 20, maxWidth: 300 }}>
8
- {["red", "blue", "green", "yellow", "pink"].map(color => {
9
- const isSelected = color === "blue";
10
- return (
11
- <div
12
- onClick={() => {
13
- onColorSelect(color);
14
- }}
15
- key={color}
16
- style={{
17
- margin: 10,
18
- height: 20,
19
- width: 20,
20
- padding: 3,
21
- background: color,
22
- ...(isSelected && { border: "1px solid black" })
23
- }}
24
- />
25
- );
26
- })}
27
- </div>
28
- );
29
- }
30
- }
@@ -1,44 +0,0 @@
1
- import React from "react";
2
- import { compose } from "redux";
3
- import withEditorProps from "../withEditorProps";
4
- import { withHotkeys } from "@teselagen/ui";
5
- import getCommands from "../commands";
6
- import {
7
- getCommandHotkeys,
8
- getCommandHotkeyHandlers,
9
- HotkeysDialog
10
- } from "@teselagen/ui";
11
-
12
- class CommandHotkeyHandler extends React.Component {
13
- constructor(props) {
14
- super(props);
15
- const commands = getCommands(this);
16
- // Don't bind clipboard shortcuts (use native ones directly)
17
- ["cut", "copy", "paste"].forEach(cmdId => delete commands[cmdId]);
18
- this.hotkeyDefs = getCommandHotkeys(commands);
19
- this.handlers = getCommandHotkeyHandlers(commands);
20
-
21
- this.Handler = withHotkeys(this.hotkeyDefs, this.handlers);
22
- }
23
-
24
- render() {
25
- return (
26
- <React.Fragment>
27
- <this.Handler key="handla" />
28
- <HotkeysDialog
29
- dialogTitle="Editor Hotkeys"
30
- key="hotkeyDialog"
31
- hotkeySets={{
32
- Editor: {
33
- "Search File Menu": this.props.menuSearchHotkey || "cmd+/",
34
- ...this.hotkeyDefs
35
- }
36
- }}
37
- {...this.props.hotkeyDialogProps}
38
- />
39
- </React.Fragment>
40
- );
41
- }
42
- }
43
-
44
- export default compose(withEditorProps)(CommandHotkeyHandler);
@@ -1,98 +0,0 @@
1
- import { compose } from "redux";
2
- import pluralize from "pluralize";
3
-
4
- import { formName } from "./constants";
5
- import { typeField } from "./helperComponents/PropertiesDialog/typeField";
6
- import {
7
- DataTable,
8
- DialogFooter,
9
- withSelectTableRecords,
10
- withSelectedEntities
11
- } from "@teselagen/ui";
12
- import { useEffect } from "react";
13
- import { hideDialog } from "./GlobalDialogUtils";
14
- import { startCase } from "lodash-es";
15
- import { tidyUpAnnotation } from "@teselagen/sequence-utils";
16
-
17
- const schemaFeatures = ["name", typeField, "start", "end", "strand"];
18
- const schemaOther = ["name", "start", "end", "strand"];
19
- export default compose(
20
- withSelectedEntities(formName),
21
- withSelectTableRecords(formName)
22
- )(function CreateAnnotationsPage(props) {
23
- const {
24
- newAnnotations,
25
- annotationType,
26
- annotationVisibilityShow,
27
- beforeAnnotationCreate,
28
- handleSubmit,
29
- selectTableRecords,
30
- sequenceData
31
- } = props;
32
- const ents = props[`${formName}SelectedEntities`];
33
- useEffect(() => {
34
- selectTableRecords(newAnnotations);
35
- }, [newAnnotations, selectTableRecords]);
36
- return (
37
- <div className="bp3-dialog-body">
38
- <div>
39
- The following {annotationType}
40
- {newAnnotations.length > 1 ? "s" : ""} will be added:
41
- <DataTable
42
- isInfinite
43
- formName={formName}
44
- entities={newAnnotations.map(e => ({
45
- ...e,
46
- start: e.start + 1,
47
- end: e.end + 1
48
- }))}
49
- withCheckboxes
50
- schema={annotationType === "feature" ? schemaFeatures : schemaOther}
51
- />
52
- </div>
53
- <DialogFooter
54
- hideModal={hideDialog}
55
- onClick={handleSubmit(async () => {
56
- const annotationTypePlural = pluralize(annotationType);
57
-
58
- ents.forEach((newAnnotation, i) => {
59
- beforeAnnotationCreate &&
60
- beforeAnnotationCreate({
61
- annotationTypePlural,
62
- annotation: newAnnotation,
63
- props: props
64
- });
65
-
66
- let conditionals = {};
67
- if (ents.length > 1) {
68
- if (i === 0) {
69
- conditionals = {
70
- batchUndoStart: true
71
- };
72
- } else if (i === ents.length - 1) {
73
- conditionals = {
74
- batchUndoEnd: true
75
- };
76
- } else {
77
- conditionals = {
78
- batchUndoMiddle: true
79
- };
80
- }
81
- }
82
- props[`upsert${startCase(annotationType)}`](
83
- tidyUpAnnotation(newAnnotation, {
84
- sequenceData,
85
- annotationType: annotationTypePlural
86
- }),
87
- conditionals
88
- );
89
- annotationVisibilityShow(annotationTypePlural);
90
- });
91
-
92
- hideDialog();
93
- })}
94
- text="Add"
95
- ></DialogFooter>
96
- </div>
97
- );
98
- });
package/Cutsite.js DELETED
@@ -1,18 +0,0 @@
1
- import React from "react";
2
-
3
- export default function Cutsite({
4
- annotationHeight,
5
- radius
6
- // totalAngle,
7
- // ...rest
8
- }) {
9
- return (
10
- <rect
11
- className={"veCutsite"}
12
- width={1}
13
- y={-radius - 4}
14
- height={annotationHeight}
15
- // {...rest}
16
- />
17
- );
18
- }