@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,406 +0,0 @@
1
- import React from "react";
2
- import {
3
- DataTable,
4
- withSelectedEntities,
5
- CmdButton,
6
- getTagProps,
7
- getKeyedTagsAndTagOptions,
8
- DropdownButton,
9
- createCommandMenu,
10
- popoverOverflowModifiers,
11
- removeDuplicatesIcon
12
- } from "@teselagen/ui";
13
- import { map, upperFirst, pick, startCase, isFunction } from "lodash-es";
14
- import {
15
- AnchorButton,
16
- ButtonGroup,
17
- Icon,
18
- Menu,
19
- Tag,
20
- Tooltip
21
- } from "@blueprintjs/core";
22
- import { getRangeLength } from "@teselagen/range-utils";
23
- // import { Popover } from "@blueprintjs/core";
24
- // import ColorPicker from "./ColorPicker";
25
- import { connectToEditor } from "../../withEditorProps";
26
- import { compose } from "recompose";
27
- import commands from "../../commands";
28
- import { sizeSchema } from "./utils";
29
- import { showAddOrEditAnnotationDialog } from "../../GlobalDialogUtils";
30
- import { typeField } from "./typeField";
31
- import { getSequenceWithinRange } from "@teselagen/range-utils";
32
- import { getReverseComplementSequenceString } from "@teselagen/sequence-utils";
33
-
34
- const genericAnnotationProperties = ({
35
- annotationType,
36
- noType,
37
- visSubmenu,
38
- withTags,
39
- withBases,
40
- additionalFooterEls
41
- }) => {
42
- const annotationTypeUpper = upperFirst(annotationType);
43
- class AnnotationProperties extends React.Component {
44
- constructor(props) {
45
- super(props);
46
- this.commands = commands(this);
47
- }
48
- onRowSelect = ([record]) => {
49
- if (!record) return;
50
- const { dispatch, editorName } = this.props;
51
- dispatch({
52
- type: "SELECTION_LAYER_UPDATE",
53
- payload: record,
54
- meta: {
55
- editorName
56
- }
57
- });
58
- };
59
- render() {
60
- const {
61
- readOnly,
62
- annotations = {},
63
- annotationVisibility,
64
- sequenceLength,
65
- selectionLayer,
66
- sequence,
67
- isProtein,
68
- allPartTags,
69
- annotationPropertiesSelectedEntities:
70
- _annotationPropertiesSelectedEntities,
71
- selectedAnnotationId
72
- } = this.props;
73
- const annotationPropertiesSelectedEntities =
74
- _annotationPropertiesSelectedEntities.filter(a => annotations[a.id]);
75
-
76
- const deleteAnnotation = this.props[`delete${annotationTypeUpper}`];
77
-
78
- const annotationsToUse = map(annotations, annotation => {
79
- return {
80
- ...annotation,
81
- ...(annotation.strand === undefined && {
82
- strand: annotation.forward ? 1 : -1
83
- }),
84
- size: getRangeLength(annotation, sequenceLength)
85
- };
86
- });
87
-
88
- const keyedPartTags = getKeyedTagsAndTagOptions(allPartTags) ?? {};
89
-
90
- this.schema = {
91
- fields: [
92
- {
93
- path: "name",
94
- type: "string",
95
-
96
- render: (name, ann) => {
97
- const checked =
98
- !this.props.annotationVisibility[
99
- `${annotationType}IndividualToHide`
100
- ][ann.id];
101
-
102
- return (
103
- <>
104
- <Icon
105
- data-tip="Hide/Show"
106
- onClick={e => {
107
- e.stopPropagation();
108
- const upperType = startCase(annotationType);
109
- if (checked) {
110
- this.props[`hide${upperType}Individual`]([ann.id]);
111
- } else {
112
- this.props[`show${upperType}Individual`]([ann.id]);
113
- }
114
- }}
115
- style={{
116
- cursor: "pointer",
117
- marginRight: 4,
118
- marginTop: 3,
119
- color: "darkgray"
120
- }}
121
- icon={`eye-${checked ? "open" : "off"}`}
122
- ></Icon>
123
- {name}
124
- </>
125
- );
126
- }
127
- },
128
-
129
- ...(!withBases
130
- ? []
131
- : [
132
- {
133
- path: "bases",
134
- type: "string",
135
- render: (bases, primer) => {
136
- let bps = bases;
137
- if (!bases) {
138
- bps = getSequenceWithinRange(primer, this.props.sequence);
139
- if (!primer.forward) {
140
- bps = getReverseComplementSequenceString(bps);
141
- }
142
- }
143
- return bps;
144
- }
145
- }
146
- ]),
147
- ...(noType
148
- ? []
149
- : [
150
- typeField,
151
- {
152
- path: "color",
153
- type: "string",
154
- width: 50,
155
- render: color => {
156
- return (
157
- <div
158
- style={{ height: 20, width: 20, background: color }}
159
- />
160
- // <ColorPickerPopover>
161
- // <div style={{ height: 20, width: 20, background: color }} />
162
- // </ColorPickerPopover>
163
- );
164
- }
165
- }
166
- ]),
167
- sizeSchema(this.props.isProtein),
168
- ...(withTags && this.props.allPartTags
169
- ? [
170
- {
171
- path: "tags",
172
- type: "string",
173
- getValueToFilterOn: o => {
174
- const toRet = (o.tags || [])
175
- .map(tagId => {
176
- const tag = keyedPartTags[tagId];
177
- if (!tag) return "";
178
- return tag.label;
179
- })
180
- .join(" ");
181
- return toRet;
182
- },
183
- render: tags => {
184
- return (
185
- <div style={{ display: "flex" }}>
186
- {(tags || []).map((tagId, i) => {
187
- const tag = keyedPartTags[tagId];
188
- if (!tag) return null;
189
- return <Tag key={i} {...getTagProps(tag)}></Tag>;
190
- })}
191
- </div>
192
- );
193
- }
194
- }
195
- ]
196
- : []),
197
- { path: "strand", type: "number" }
198
- ]
199
- };
200
-
201
- return (
202
- <DataTable
203
- topLeftItems={getVisFilter(
204
- createCommandMenu(
205
- isFunction(visSubmenu) ? visSubmenu(this.props) : visSubmenu,
206
- this.commands,
207
- {
208
- useTicks: true
209
- }
210
- )
211
- )}
212
- annotationPropertiesSelectedEntities={
213
- annotationPropertiesSelectedEntities
214
- }
215
- leftOfSearchBarItems={
216
- <>
217
- {!readOnly && (
218
- <ButtonGroup style={{ marginTop: 3, marginRight: 4 }}>
219
- <Tooltip
220
- position="top"
221
- modifiers={popoverOverflowModifiers}
222
- content="New"
223
- >
224
- <AnchorButton
225
- disabled={!sequenceLength}
226
- icon="plus"
227
- className="tgNewAnnBtn"
228
- onClick={() => {
229
- showAddOrEditAnnotationDialog({
230
- type: annotationType,
231
- annotation: pick(
232
- selectionLayer,
233
- "start",
234
- "end",
235
- "forward"
236
- )
237
- });
238
- }}
239
- ></AnchorButton>
240
- </Tooltip>
241
- <Tooltip
242
- position="top"
243
- modifiers={popoverOverflowModifiers}
244
- content="Edit"
245
- >
246
- <AnchorButton
247
- onClick={() => {
248
- showAddOrEditAnnotationDialog({
249
- type: annotationType,
250
- annotation: annotationPropertiesSelectedEntities[0]
251
- });
252
- }}
253
- disabled={
254
- annotationPropertiesSelectedEntities.length !== 1
255
- }
256
- icon="edit"
257
- ></AnchorButton>
258
- </Tooltip>
259
-
260
- {["feature"].includes(annotationType) && (
261
- <CmdButton
262
- text=""
263
- icon="cog"
264
- data-tip="Configure Feature Types"
265
- cmd={this.commands.onConfigureFeatureTypesClick}
266
- />
267
- )}
268
- {["part", "primer", "feature"].includes(annotationType) && (
269
- <CmdButton
270
- text=""
271
- icon={removeDuplicatesIcon}
272
- data-tip="Remove Duplicates"
273
- cmd={
274
- this.commands[
275
- `showRemoveDuplicatesDialog${
276
- annotationTypeUpper + "s"
277
- }`
278
- ]
279
- }
280
- />
281
- )}
282
-
283
- {additionalFooterEls && additionalFooterEls(this.props)}
284
- <Tooltip
285
- position="top"
286
- modifiers={popoverOverflowModifiers}
287
- content="Delete"
288
- >
289
- <AnchorButton
290
- onClick={() => {
291
- deleteAnnotation(annotationPropertiesSelectedEntities);
292
- }}
293
- className="tgDeleteAnnsBtn"
294
- intent="danger"
295
- disabled={!annotationPropertiesSelectedEntities.length}
296
- icon="trash"
297
- ></AnchorButton>
298
- </Tooltip>
299
- </ButtonGroup>
300
- )}
301
- {/* {createCommandMenu(
302
- {
303
- cmd: "featureFilterIndividualCmd",
304
- // text: 'hahah',
305
- shouldDismissPopover: false
306
- },
307
- this.commands,
308
- {
309
- useTicks: true
310
- }
311
- )} */}
312
- {/* <CmdCheckbox
313
- prefix="Show "
314
- cmd={this.commands.featureFilterIndividualCmd}
315
- /> */}
316
- </>
317
- }
318
- onDoubleClick={annotation => {
319
- showAddOrEditAnnotationDialog({
320
- type: annotationType,
321
- annotation
322
- });
323
- }}
324
- withCheckboxes
325
- showFeatureIndividual={this.props.showFeatureIndividual} //we need to pass this in order to force the DT to rerenderannotationVisibility={annotationVisibility}
326
- hideFeatureIndividual={this.props.hideFeatureIndividual} //we need to pass this in order to force the DT to rerenderannotationVisibility={annotationVisibility}
327
- showPartIndividual={this.props.showPartIndividual} //we need to pass this in order to force the DT to rerenderannotationVisibility={annotationVisibility}
328
- hidePartIndividual={this.props.hidePartIndividual} //we need to pass this in order to force the DT to rerenderannotationVisibility={annotationVisibility}
329
- showPrimerIndividual={this.props.showPrimerIndividual} //we need to pass this in order to force the DT to rerenderannotationVisibility={annotationVisibility}
330
- hidePrimerIndividual={this.props.hidePrimerIndividual} //we need to pass this in order to force the DT to rerenderannotationVisibility={annotationVisibility}
331
- annotationVisibility={annotationVisibility} //we need to pass this in order to force the DT to rerenderannotationVisibility={annotationVisibility}
332
- featureLengthsToHide={this.props.featureLengthsToHide} //we need to pass this in order to force the DT to rerenderannotationVisibility={annotationVisibility}
333
- primerLengthsToHide={this.props.primerLengthsToHide} //we need to pass this in order to force the DT to rerenderannotationVisibility={annotationVisibility}
334
- partLengthsToHide={this.props.partLengthsToHide} //we need to pass this in order to force the DT to rerenderannotationVisibility={annotationVisibility}
335
- sequence={sequence} //we need to pass this in order to force the DT to rerenderannotationVisibility={annotationVisibility}
336
- noPadding
337
- noFullscreenButton
338
- onRowSelect={this.onRowSelect}
339
- selectedIds={selectedAnnotationId}
340
- formName="annotationProperties"
341
- noRouter
342
- isProtein={isProtein}
343
- compact
344
- isInfinite
345
- schema={this.schema}
346
- entities={annotationsToUse}
347
- />
348
- );
349
- }
350
- }
351
-
352
- return compose(
353
- connectToEditor(
354
- ({
355
- readOnly,
356
- annotationVisibility = {},
357
- sequenceData,
358
- selectionLayer,
359
- featureLengthsToHide,
360
- primerLengthsToHide,
361
- partLengthsToHide
362
- }) => {
363
- return {
364
- annotationVisibility,
365
- selectionLayer,
366
- readOnly,
367
- featureLengthsToHide,
368
- primerLengthsToHide,
369
- partLengthsToHide,
370
- sequenceData,
371
- sequence: sequenceData.sequence,
372
- annotations: sequenceData[annotationType + "s"],
373
- [annotationType + "s"]: sequenceData[annotationType + "s"],
374
- sequenceLength: sequenceData.sequence.length
375
- };
376
- }
377
- ),
378
- // withEditorProps,
379
- withSelectedEntities("annotationProperties")
380
- )(AnnotationProperties);
381
- };
382
-
383
- export default genericAnnotationProperties;
384
-
385
- // const ColorPickerPopover = ({ readOnly, onColorSelect, children }) => {
386
- // return (
387
- // <Popover
388
- // disabled={readOnly}
389
- // content={<ColorPicker onColorSelect={onColorSelect} />}
390
- // >
391
- // {children}
392
- // </Popover>
393
- // );
394
- // };
395
-
396
- export function getVisFilter(submenu) {
397
- return (
398
- <DropdownButton
399
- style={{ marginTop: 3 }}
400
- icon="eye-open"
401
- className="propertiesVisFilter"
402
- data-tip="Visibility Filter"
403
- menu={<Menu>{submenu}</Menu>}
404
- ></DropdownButton>
405
- );
406
- }
package/GlobalDialog.js DELETED
@@ -1,73 +0,0 @@
1
- import React, { useState, useEffect } from "react";
2
-
3
- import { dialogHolder, hideDialog } from "./GlobalDialogUtils";
4
-
5
- import RenameSequenceDialog from "./helperComponents/RenameSequenceDialog";
6
- import PrintDialog from "./helperComponents/PrintDialog";
7
- import RemoveDuplicates from "./helperComponents/RemoveDuplicates";
8
- import { MultipleSeqsDetectedOnImportDialog } from "./helperComponents/MultipleSeqsDetectedOnImportDialog";
9
- import GoToDialog from "./helperComponents/GoToDialog";
10
- import SelectDialog from "./helperComponents/SelectDialog";
11
- import EnzymesDialog from "./helperComponents/EnzymesDialog";
12
- import CreateCustomEnzyme from "./CreateCustomEnzyme";
13
- import {
14
- AdditionalCutsiteInfoDialog,
15
- CompareEnzymeGroupsDialog
16
- } from "./CutsiteFilter/AdditionalCutsiteInfoDialog";
17
- import { AlignmentToolDialog } from "./ToolBar/alignmentTool";
18
- import MergeFeaturesDialog from "./helperComponents/MergeFeaturesDialog";
19
- import AddOrEditPartDialog from "./helperComponents/AddOrEditPartDialog";
20
- import AddOrEditFeatureDialog from "./helperComponents/AddOrEditFeatureDialog";
21
- import AddOrEditPrimerDialog from "./helperComponents/AddOrEditPrimerDialog";
22
-
23
- const Dialogs = {
24
- RenameSequenceDialog,
25
- PrintDialog,
26
- MultipleSeqsDetectedOnImportDialog,
27
- RemoveDuplicates,
28
- GoToDialog,
29
- SelectDialog,
30
- EnzymesDialog,
31
- CreateCustomEnzyme,
32
- AdditionalCutsiteInfoDialog,
33
- CompareEnzymeGroupsDialog,
34
- AlignmentToolDialog,
35
- MergeFeaturesDialog,
36
- AddOrEditPartDialog,
37
- AddOrEditFeatureDialog,
38
- AddOrEditPrimerDialog
39
- };
40
-
41
- export function GlobalDialog(props) {
42
- const { dialogOverrides = {}, editorName } = props;
43
- const [uniqKey, setUniqKeyToForceRerender] = useState();
44
- useEffect(() => {
45
- //on unmount, clear the global dialog state..
46
- return () => {
47
- hideDialog();
48
- };
49
- }, []);
50
- if (
51
- dialogHolder.editorName &&
52
- editorName &&
53
- dialogHolder.editorName !== editorName
54
- ) {
55
- return null;
56
- }
57
- dialogHolder.setUniqKeyToForceRerender = setUniqKeyToForceRerender;
58
- const Comp =
59
- dialogHolder.CustomModalComponent ||
60
- dialogOverrides[dialogHolder.overrideName] ||
61
- Dialogs[dialogHolder.dialogType];
62
- if (!Comp) return null;
63
-
64
- return (
65
- <Comp
66
- key={uniqKey}
67
- hideDialog={hideDialog}
68
- hideModal={hideDialog}
69
- {...props}
70
- {...dialogHolder.props}
71
- ></Comp>
72
- );
73
- }
@@ -1,110 +0,0 @@
1
- import shortid from "shortid";
2
-
3
- import { cloneDeep, startCase } from "lodash-es";
4
- import { convertRangeTo1Based } from "@teselagen/range-utils";
5
-
6
- export const dialogHolder = {};
7
- //if an overrideName is passed, then that dialog can be overridden if an overriding dialog is passed as a prop to the <Editor/>
8
- export function showDialog({
9
- ModalComponent,
10
- dialogType,
11
- props,
12
- overrideName
13
- }) {
14
- dialogHolder.dialogType = dialogType;
15
- if (!dialogHolder.dialogType && ModalComponent) {
16
- dialogHolder.dialogType = "TGCustomModal";
17
- }
18
- // check if focused element in the dom is within a given editor and add an editor prop to the dialog
19
- if (document.activeElement && document.activeElement.closest(".veEditor")) {
20
- let editorName;
21
- document.activeElement
22
- .closest(".veEditor")
23
- ?.className.split(" ")
24
- .forEach(c => {
25
- if (!c.trim()) return;
26
- if (
27
- !c.trim().includes("veEditor") &&
28
- !c.trim().includes("previewModeFullscreen")
29
- ) {
30
- editorName = c;
31
- }
32
- });
33
- dialogHolder.editorName = editorName;
34
- }
35
-
36
- dialogHolder.CustomModalComponent = ModalComponent;
37
- dialogHolder.props = props;
38
- dialogHolder.overrideName = overrideName;
39
- dialogHolder.setUniqKeyToForceRerender(shortid());
40
- }
41
- export function hideDialog() {
42
- delete dialogHolder.dialogType;
43
- delete dialogHolder.CustomModalComponent;
44
- delete dialogHolder.props;
45
- delete dialogHolder.overrideName;
46
- delete dialogHolder.editorName;
47
- dialogHolder.setUniqKeyToForceRerender();
48
- }
49
-
50
- const typeToDialogType = {
51
- part: "AddOrEditPartDialog",
52
- feature: "AddOrEditFeatureDialog",
53
- primer: "AddOrEditPrimerDialog"
54
- };
55
-
56
- export function showAddOrEditAnnotationDialog({
57
- type,
58
- annotation: _annotation
59
- }) {
60
- // AddOrEditPartDialog
61
- // AddOrEditFeatureDialog
62
- // AddOrEditPrimerDialog
63
- const dialogType = typeToDialogType[type];
64
- if (Object.values(typeToDialogType).includes(dialogHolder.dialogType)) {
65
- return;
66
- }
67
- const nameUpper = startCase(type);
68
- const annotation = cloneDeep(_annotation);
69
- if (_annotation.isWrappedAddon) {
70
- delete annotation.isWrappedAddon;
71
- delete annotation.rangeTypeOverride;
72
- annotation.start = _annotation.end + 1;
73
- annotation.end = _annotation.start - 1;
74
- }
75
- const forward =
76
- annotation.strand === -1
77
- ? false
78
- : annotation.forward !== undefined
79
- ? !!annotation.forward
80
- : true;
81
- showDialog({
82
- overrideName: `AddOrEdit${nameUpper}DialogOverride`,
83
- dialogType,
84
- props: {
85
- ...(annotation.isEditLocked && {
86
- readOnly:
87
- typeof annotation.isEditLocked === "string"
88
- ? annotation.isEditLocked
89
- : "This annotation is locked"
90
- }),
91
- dialogProps: {
92
- title:
93
- annotation && annotation.id ? `Edit ${nameUpper}` : `New ${nameUpper}`
94
- },
95
- initialValues: {
96
- ...(annotation
97
- ? {
98
- ...convertRangeTo1Based(annotation),
99
- forward,
100
- arrowheadType:
101
- annotation.arrowheadType || (!forward ? "BOTTOM" : "TOP"),
102
- ...(annotation.locations && {
103
- locations: annotation.locations.map(convertRangeTo1Based)
104
- })
105
- }
106
- : {})
107
- }
108
- }
109
- });
110
- }
package/GoToDialog.js DELETED
@@ -1,25 +0,0 @@
1
- import createSimpleDialog from "./createSimpleDialog";
2
- import { NumericInputField } from "@teselagen/ui";
3
- import { get } from "lodash-es";
4
- import { tryToRefocusEditor } from "../utils/editorUtils";
5
-
6
- export default createSimpleDialog({
7
- formName: "goToDialog",
8
- fields: [
9
- {
10
- name: "sequencePosition",
11
- component: NumericInputField,
12
- validate: (val, vals, props) => {
13
- const { min, max } = get(props, "extraProps.sequencePosition", {});
14
- return (min && val < min) || (max && val > max)
15
- ? "Invalid position"
16
- : undefined;
17
- }
18
- }
19
- ],
20
- withDialogProps: {
21
- title: "Go To",
22
- height: 190,
23
- onCloseHook: tryToRefocusEditor
24
- }
25
- });
@@ -1,35 +0,0 @@
1
- import React, { useRef } from "react";
2
- export function HorizontalPanelDragHandle({ onDrag }) {
3
- const xStart = useRef(0);
4
-
5
- const resize = useRef(e => {
6
- const dx = xStart.current - e.clientX;
7
- onDrag({ dx });
8
- xStart.current = e.clientX;
9
- });
10
- const mouseup = useRef(() => {
11
- document.removeEventListener("mousemove", resize.current, false);
12
- document.removeEventListener("mousemove", mouseup.current, false);
13
- });
14
-
15
- return (
16
- <div
17
- onMouseDown={e => {
18
- xStart.current = e.clientX;
19
- document.addEventListener("mousemove", resize.current, false);
20
- document.addEventListener("mouseup", mouseup.current, false);
21
- }}
22
- style={{
23
- position: "absolute",
24
- top: 0,
25
- right: -1,
26
- zIndex: 1000,
27
- height: "100%",
28
- cursor: "ew-resize",
29
- width: 3,
30
- opacity: 0,
31
- background: "blue"
32
- }}
33
- ></div>
34
- );
35
- }