@teselagen/ove 0.7.27 → 0.7.28

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (304) hide show
  1. package/AASliver.js +187 -0
  2. package/AddLaddersDialog.js +82 -0
  3. package/AdditionalCutsiteInfoDialog.js +599 -0
  4. package/AlignmentView/Mismatches.d.ts +3 -3
  5. package/AlignmentVisibilityTool.js +105 -0
  6. package/AnnotationContainerHolder.js +20 -0
  7. package/AnnotationPositioner.js +27 -0
  8. package/AutoAnnotate.js +501 -0
  9. package/AutoAnnotateBpMatchingDialog.js +208 -0
  10. package/Axis.js +151 -0
  11. package/AxisNumbers.js +35 -0
  12. package/Browser.js +106 -0
  13. package/Caret.js +63 -0
  14. package/Chromatogram.js +293 -0
  15. package/CircularDnaSequence.js +73 -0
  16. package/CircularView/Labels/index.d.ts +1 -1
  17. package/CircularView/index.d.ts +0 -1
  18. package/CircularZoomMinimap.js +16 -0
  19. package/ColorPicker.js +30 -0
  20. package/CommandHotkeyHandler.js +44 -0
  21. package/CreateAnnotationsPage.d.ts +4 -4
  22. package/CreateAnnotationsPage.js +98 -0
  23. package/Cutsite.js +18 -0
  24. package/CutsiteProperties.js +176 -0
  25. package/CutsiteSelectionLayers.js +47 -0
  26. package/Cutsites.js +271 -0
  27. package/DeletionLayer.js +28 -0
  28. package/DigestTool/Ladder.d.ts +1 -1
  29. package/DropHandler.css +21 -0
  30. package/DropHandler.js +64 -0
  31. package/EditCaretPosition.js +234 -0
  32. package/EditTrackNameDialog.js +30 -0
  33. package/Feature.js +83 -0
  34. package/FeatureProperties.js +6 -0
  35. package/FillWindow.js +47 -0
  36. package/GenbankView.js +74 -0
  37. package/GeneralProperties.js +117 -0
  38. package/GenericAnnotationProperties.js +406 -0
  39. package/GlobalDialog.js +73 -0
  40. package/GlobalDialogUtils.js +110 -0
  41. package/GoToDialog.js +25 -0
  42. package/HorizontalPanelDragHandle.js +35 -0
  43. package/Keyboard.js +85 -0
  44. package/Labels.js +327 -0
  45. package/Ladder.css +20 -0
  46. package/Ladder.js +303 -0
  47. package/MeltingTemp.js +85 -0
  48. package/Menlo.ttf +0 -0
  49. package/Minimap.js +515 -0
  50. package/Mismatches.js +134 -0
  51. package/Monaco.ttf +0 -0
  52. package/MultipleSeqsDetectedOnImportDialog.js +74 -0
  53. package/Orf.js +109 -0
  54. package/OrfProperties.js +117 -0
  55. package/Orfs.js +35 -0
  56. package/PCRTool.js +179 -0
  57. package/PairwiseAlignmentView.js +68 -0
  58. package/Part.js +34 -0
  59. package/PartProperties.js +9 -0
  60. package/PassThrough.js +3 -0
  61. package/PerformantSelectionLayer.js +32 -0
  62. package/PinchHelper.js +24 -0
  63. package/PointedAnnotation.js +347 -0
  64. package/PositionAnnotationOnCircle.js +26 -0
  65. package/Primer.js +41 -0
  66. package/PrimerProperties.js +19 -0
  67. package/Reflex/index.d.ts +0 -1
  68. package/ReflexContainer.js +802 -0
  69. package/ReflexElement.js +160 -0
  70. package/ReflexEvents.js +77 -0
  71. package/ReflexSplitter.js +205 -0
  72. package/RenameSequenceDialog.js +7 -0
  73. package/RotateCircularViewSlider.js +93 -0
  74. package/RowView/index.d.ts +0 -1
  75. package/SelectDialog.js +150 -0
  76. package/SequenceName.js +15 -0
  77. package/SimpleCircularOrLinearView.js +381 -0
  78. package/SimpleOligoPreview.js +39 -0
  79. package/SingleEnzymeCutsiteInfo.js +139 -0
  80. package/ToolBar/ToolbarItem.d.ts +1 -3
  81. package/ToolbarItem.js +192 -0
  82. package/Translation.js +198 -0
  83. package/TranslationProperties.js +149 -0
  84. package/UncontrolledSliderWithPlusMinusBtns.css +5 -0
  85. package/UncontrolledSliderWithPlusMinusBtns.js +134 -0
  86. package/VeTopRightContainer.js +12 -0
  87. package/ZoomCircularViewSlider.js +62 -0
  88. package/ZoomLinearView.js +47 -0
  89. package/addAlignment.js +6 -0
  90. package/addMetaToActionCreators.js +12 -0
  91. package/addWrappedAddons.js +20 -0
  92. package/alignmentTool.js +503 -0
  93. package/alignments.js +379 -0
  94. package/annotationLabelVisibility.js +2 -0
  95. package/annotationSearchSelector.js +24 -0
  96. package/annotationTypes.js +35 -0
  97. package/annotationVisibility.js +196 -0
  98. package/annotationsToSupport.js +104 -0
  99. package/arrayToObjWithIds.js +17 -0
  100. package/arrayUtils.js +19 -0
  101. package/array_move.js +10 -0
  102. package/calculateTickMarkPositionsForGivenRange.js +47 -0
  103. package/caretPosition.js +27 -0
  104. package/cdsFeaturesSelector.js +9 -0
  105. package/charWidth.js +22 -0
  106. package/circular.js +19 -0
  107. package/circularSelector.js +4 -0
  108. package/clickAndDragUtils.js +576 -0
  109. package/coerceInitialValue.js +7 -0
  110. package/combineReducersDontIgnoreKeys.js +12 -0
  111. package/commandUtils.js +20 -0
  112. package/constants.js +2 -0
  113. package/copyOptions.js +34 -0
  114. package/createFragmentLines.js +120 -0
  115. package/createMergedDefaultStateReducer.js +30 -0
  116. package/createMetaAction.js +12 -0
  117. package/createSequenceInputPopup.js +290 -0
  118. package/createSequenceInputPopupStyle.css +87 -0
  119. package/createSimpleDialog.js +89 -0
  120. package/createYourOwnEnzyme.js +39 -0
  121. package/cutsiteLabelColorSelector.js +6 -0
  122. package/cutsiteTool.js +88 -0
  123. package/cutsitesByRangeSelector.js +5 -0
  124. package/cutsitesSelector.js +61 -0
  125. package/darkmode.css +98 -0
  126. package/defaultConfig.js +150 -0
  127. package/deletionLayers.js +36 -0
  128. package/description.js +21 -0
  129. package/digestTool.js +34 -0
  130. package/dnaToColor.js +17 -0
  131. package/downloadTool.js +39 -0
  132. package/draggableClassnames.js +5 -0
  133. package/drawAnnotations.js +440 -0
  134. package/drawDirectedPiePiece.js +142 -0
  135. package/editTool.js +49 -0
  136. package/editorSelector.js +2 -0
  137. package/editorUtils.js +205 -0
  138. package/estimateRowHeight.js +184 -0
  139. package/featureLengthsToHide.js +27 -0
  140. package/featureTool.js +34 -0
  141. package/features.js +19 -0
  142. package/featuresSelector.js +8 -0
  143. package/filteredCutsitesSelector.js +136 -0
  144. package/filteredFeaturesSelector.js +32 -0
  145. package/filteredPartsSelector.js +57 -0
  146. package/filteredPrimersSelector.js +27 -0
  147. package/filteredRestrictionEnzymesSelector.js +1 -0
  148. package/find.png +0 -0
  149. package/findTool.js +79 -0
  150. package/findToolConstants.js +1 -0
  151. package/frameTranslations.js +52 -0
  152. package/fullscreen.png +0 -0
  153. package/getAdditionalEnzymesSelector.js +46 -0
  154. package/getAngleForPositionMidpoint.js +3 -0
  155. package/getAnnotationClassnames.js +12 -0
  156. package/getAnnotationNameAndStartStopString.js +61 -0
  157. package/getBpsPerRow.js +19 -0
  158. package/getCutsiteLabelHeights.js +56 -0
  159. package/getGapMap.js +12 -0
  160. package/getGaps.js +27 -0
  161. package/getInternalLabel.js +40 -0
  162. package/getOveHotkeyDefs.js +12 -0
  163. package/getPairwiseOverviewLinearViewOptions.js +38 -0
  164. package/getRangeAnglesSpecial.js +12 -0
  165. package/getStructuredBases.js +97 -0
  166. package/getTrackFromEvent.js +25 -0
  167. package/getVisibleStartEnd.js +7 -0
  168. package/getXStartAndWidthFromNonCircularRange.js +12 -0
  169. package/getXStartAndWidthOfRangeWrtRow.js +27 -0
  170. package/getXStartAndWidthOfRowAnnotation.js +19 -0
  171. package/getYOffset.js +15 -0
  172. package/hoveredAnnotation.js +24 -0
  173. package/{html2canvas.esm--JN4fLQL.js → html2canvas.esm-DiGWN1gP.js} +187 -229
  174. package/{html2canvas.esm-B7d7VJmQ.cjs → html2canvas.esm-J1esNpMJ.cjs} +187 -229
  175. package/importTool.js +27 -0
  176. package/index.cjs.js +48165 -47142
  177. package/index.es.js +47699 -46676
  178. package/index.js +71 -0
  179. package/inlineFindTool.js +38 -0
  180. package/isElementInViewport.js +29 -0
  181. package/isEnzymeFilterAndSelector.js +1 -0
  182. package/isTargetWithinEl.js +6 -0
  183. package/labelLineIntensity.js +25 -0
  184. package/labelSize.js +23 -0
  185. package/ladderDefaults.js +25 -0
  186. package/lastSavedId.js +20 -0
  187. package/lineageLines.js +11 -0
  188. package/linear.png +0 -0
  189. package/makeStore.js +34 -0
  190. package/massageTickSpacing.js +19 -0
  191. package/materiallyAvailable.js +19 -0
  192. package/middleware.js +112 -0
  193. package/minimumOrfSize.js +24 -0
  194. package/minimumOrfSizeSelector.js +2 -0
  195. package/modalActions.js +3 -0
  196. package/moveCaret.js +58 -0
  197. package/name.js +19 -0
  198. package/normalizeAngle.js +3 -0
  199. package/normalizeAngleRange.js +9 -0
  200. package/oligoTool.js +30 -0
  201. package/onlyUpdateForKeysDeep.js +31 -0
  202. package/orfFrameToColorMap.js +10 -0
  203. package/orfTool.js +136 -0
  204. package/orfsSelector.js +15 -0
  205. package/ove.css +12107 -0
  206. package/package.json +6 -5
  207. package/panelsShown.js +294 -0
  208. package/partLengthsToHide.js +23 -0
  209. package/partOverhangs.js +6 -0
  210. package/partTagSearch.js +69 -0
  211. package/partTool.js +45 -0
  212. package/parts.js +19 -0
  213. package/partsSelector.js +8 -0
  214. package/pie.png +0 -0
  215. package/polarToSpecialCartesian.js +7 -0
  216. package/positionCutsites.js +6 -0
  217. package/prepareRowData.js +64 -0
  218. package/primerBases.js +221 -0
  219. package/primerLengthsToHide.js +27 -0
  220. package/primers.js +19 -0
  221. package/primersSelector.js +8 -0
  222. package/print.png +0 -0
  223. package/printTool.js +31 -0
  224. package/propertiesTool.js +40 -0
  225. package/proteinUtils.js +3 -0
  226. package/pureNoFunc.js +18 -0
  227. package/readOnly.js +25 -0
  228. package/redoTool.js +30 -0
  229. package/reflex-styles.css +128 -0
  230. package/reflex-styles.css.map +9 -0
  231. package/relaxLabelAngles.js +157 -0
  232. package/relaxLabels_DEPRECATED.js +105 -0
  233. package/replacementLayers.js +36 -0
  234. package/restrictionEnzymes.js +52 -0
  235. package/restrictionEnzymesSelector.js +34 -0
  236. package/rowviewContants.js +3 -0
  237. package/ruler.css +89 -0
  238. package/save.png +0 -0
  239. package/saveTool.js +44 -0
  240. package/searchLayersSelector.js +71 -0
  241. package/selectedAnnotations.js +89 -0
  242. package/selectedAnnotationsSelector.js +1 -0
  243. package/selectedCutsitesSelector.js +21 -0
  244. package/selectedPartTags.js +21 -0
  245. package/selectionLayer.js +25 -0
  246. package/selectors/annotationSearchSelector.d.ts +1 -1
  247. package/sequence.js +12 -0
  248. package/sequenceDataHistory.js +43 -0
  249. package/sequenceDataSelector.js +2 -0
  250. package/sequenceLengthSelector.js +5 -0
  251. package/sequenceSelector.js +4 -0
  252. package/sharedActionCreators.js +0 -0
  253. package/shouldFlipText.js +4 -0
  254. package/shouldRerender.js +27 -0
  255. package/showFileDialog.js +25 -0
  256. package/showGCContent.js +23 -0
  257. package/show_cut_sites.png +0 -0
  258. package/show_features.png +0 -0
  259. package/show_orfs.png +0 -0
  260. package/show_primers.png +0 -0
  261. package/simpleDialog.css +13 -0
  262. package/specialCutsiteFilterOptions.js +22 -0
  263. package/src/Editor/DropHandler.js +2 -1
  264. package/src/Editor/index.js +0 -2
  265. package/src/RowItem/StackedAnnotations/getStructuredBases.js +20 -6
  266. package/src/ToolBar/cutsiteTool.js +1 -1
  267. package/src/helperComponents/PropertiesDialog/TranslationProperties.js +2 -1
  268. package/style.css +3 -12100
  269. package/tagsToBoldSelector.js +2 -0
  270. package/toggle_views.svg +1 -0
  271. package/toolBar.js +23 -0
  272. package/translationSearchMatchesSelector.js +14 -0
  273. package/translations.js +20 -0
  274. package/translationsRawSelector.js +8 -0
  275. package/translationsSelector.js +137 -0
  276. package/typeField.js +24 -0
  277. package/undoTool.js +30 -0
  278. package/updateEditor.d.ts +1 -3
  279. package/updateEditor.js +200 -0
  280. package/updateLabelsForInViewFeatures.js +55 -0
  281. package/updateLabelsForInViewFeaturesCircView.js +41 -0
  282. package/updateTrackHelper.js +58 -0
  283. package/uppercaseSequenceMapFont.js +25 -0
  284. package/upsertDeleteActionGenerator.js +31 -0
  285. package/useAAColorType.js +8 -0
  286. package/useAdditionalOrfStartCodons.js +24 -0
  287. package/useAnnotationLimits.js +42 -0
  288. package/useChromatogramPrefs.js +31 -0
  289. package/useFormValue.js +7 -0
  290. package/useLadders.js +6 -0
  291. package/useMeltingTemp.js +7 -0
  292. package/useTmType.js +10 -0
  293. package/userDefinedHandlersAndOpts.js +61 -0
  294. package/utils/getAnnotationNameAndStartStopString.d.ts +1 -5
  295. package/utils/selectionLayer.d.ts +2 -2
  296. package/utils.js +37 -0
  297. package/versionHistory.js +26 -0
  298. package/versionHistoryTool.js +21 -0
  299. package/viewSubmenu.js +479 -0
  300. package/visibilityTool.js +39 -0
  301. package/withEditorInteractions/getBpsPerRow.d.ts +1 -3
  302. package/withHover.js +113 -0
  303. package/withRestrictionEnzymes.js +15 -0
  304. package/index.umd.js +0 -188322
package/primerBases.js ADDED
@@ -0,0 +1,221 @@
1
+ import React from "react";
2
+ import { map } from "lodash-es";
3
+ import { fudge2, realCharWidth } from "../constants";
4
+ import getYOffset from "../../CircularView/getYOffset";
5
+ import { getRangeLength } from "@teselagen/range-utils";
6
+ import { getStructuredBases } from "./getStructuredBases";
7
+
8
+ export function getBasesToShow({
9
+ hidePrimerBases,
10
+ annotation,
11
+ annotationRange,
12
+ charWidth,
13
+ bpsPerRow,
14
+ fullSequence,
15
+ iTree,
16
+ sequenceLength
17
+ }) {
18
+ if (hidePrimerBases) return {};
19
+ const basesToShow = {};
20
+ if (annotation && annotation.bases) {
21
+ const fudge = charWidth - realCharWidth;
22
+ const { forward, primerBindsOn } = annotation;
23
+
24
+ const { basesNoInsertsWithMetaData, inserts, aRange } = getStructuredBases({
25
+ ...annotation,
26
+ fullSequence,
27
+ annotationRange,
28
+ sequenceLength
29
+ });
30
+
31
+ const annLen = getRangeLength(annotation, sequenceLength);
32
+ const aRangeLen = getRangeLength(annotationRange, sequenceLength);
33
+ const startOffset = annotationRange.start % bpsPerRow;
34
+ const endOffset = bpsPerRow - (annotationRange.end % bpsPerRow);
35
+ basesToShow.insertPaths = "";
36
+ basesToShow.insertTicks = "";
37
+ basesToShow.flipAnnotation = !forward;
38
+ basesToShow.extraHeight = 0;
39
+ const insertText = [];
40
+ const level1Height = -10;
41
+ const level2Height = 11;
42
+ inserts.forEach((i, n) => {
43
+ //loop thru all inserts
44
+ const indexToUse = forward ? i.index : annLen - i.index - 1;
45
+ if (
46
+ aRange.start - (primerBindsOn === "5prime" ? 1 : 0) <= indexToUse &&
47
+ aRange.end + (primerBindsOn === "5prime" ? 1 : 0) >= indexToUse
48
+ ) {
49
+ //only draw if insert falls within the annotation range
50
+ let xStart = i.index - aRange.start - Math.ceil(0.5 * i.bases.length); //calculate initial xStart
51
+ let xEnd = i.index - aRange.start + Math.floor(0.5 * i.bases.length);
52
+ if (aRange.end + 3 < xEnd) {
53
+ xStart -= xEnd - aRange.end - 3;
54
+ xEnd -= xEnd - aRange.end - 3;
55
+ }
56
+ if (i.index === 0) {
57
+ //for the first chunk, try to make it hang off the end if possible
58
+ xStart -= xEnd - 1;
59
+ xEnd -= xEnd - 1;
60
+ }
61
+ const forwAnd3Prime = forward;
62
+
63
+ if (xStart < -(forwAnd3Prime ? startOffset : endOffset)) {
64
+ //if the xStart is going to fall off the row to the left, correct it by moving the xStart to the right
65
+ const offsetLeft =
66
+ -(forwAnd3Prime ? startOffset : endOffset) - xStart;
67
+ xStart += offsetLeft;
68
+ xEnd += offsetLeft;
69
+ } else if (
70
+ xEnd + (forwAnd3Prime ? startOffset : endOffset) >
71
+ bpsPerRow
72
+ ) {
73
+ //if the xStart is going to fall off the row to the right, correct it by moving the xStart to the left
74
+ const offsetLeft =
75
+ bpsPerRow - xEnd - (forwAnd3Prime ? startOffset : endOffset);
76
+ xStart += offsetLeft;
77
+ xEnd += offsetLeft;
78
+ }
79
+ // use an interval tree to determine the level the primer insert should be on to not overlap with other inserts
80
+ const yOffset = getYOffset(iTree, xStart, xEnd);
81
+ iTree.insert(xStart, xEnd, {
82
+ //tnr: pass an initial level in the case that the underlying primer ranges themselves are overlapping
83
+ ...annotationRange,
84
+ yOffset
85
+ });
86
+
87
+ basesToShow.extraHeight = Math.max(
88
+ basesToShow.extraHeight,
89
+ 15 + yOffset * 20
90
+ );
91
+ const insertStart =
92
+ (indexToUse - (forward ? aRange.start : aRange.end)) *
93
+ (!forward && primerBindsOn === "5prime" ? -1 : 1);
94
+ basesToShow.insertPaths += getInsertPath({
95
+ xStart,
96
+ xEnd,
97
+ charWidth,
98
+ level: yOffset,
99
+ insertStart
100
+ });
101
+
102
+ if (indexToUse !== aRange.end + 1 && indexToUse !== -1) {
103
+ basesToShow.insertTicks += getInsertTick({
104
+ charWidth,
105
+ height: level2Height,
106
+ insertStart
107
+ });
108
+ }
109
+ const textLength = Math.max(
110
+ 0,
111
+ charWidth * i.bases.length - fudge - fudge2
112
+ );
113
+ insertText.push(
114
+ <text
115
+ style={{ pointerEvents: "none" }}
116
+ data-insert-bases={i.bases}
117
+ className="ve-monospace-font tg-primer-bases-insert"
118
+ textLength={textLength}
119
+ transform={
120
+ forward
121
+ ? ""
122
+ : `translate(${aRangeLen * charWidth},-5) scale(-1,-1) `
123
+ }
124
+ key={n}
125
+ x={
126
+ forward
127
+ ? (xStart - 1) * charWidth + fudge
128
+ : xStart * charWidth - fudge / 2
129
+ }
130
+ y={level1Height - yOffset * 20 - (forward ? 0 : 5)}
131
+ >
132
+ {i.bases.split("").map((b, i) => (
133
+ <tspan
134
+ key={i}
135
+ rotate={forward ? 0 : 180}
136
+ className="tg-no-match-seq"
137
+ textLength={textLength}
138
+ >
139
+ {b}
140
+ </tspan>
141
+ ))}
142
+ </text>
143
+ );
144
+ }
145
+ });
146
+
147
+ const textLength =
148
+ charWidth * basesNoInsertsWithMetaData.length - fudge - fudge2;
149
+ basesToShow.baseEl = (
150
+ <React.Fragment>
151
+ <text
152
+ {...{
153
+ textLength,
154
+ y: forward ? level2Height : -(basesToShow.extraHeight - 5),
155
+ x: forward ? fudge / 2 : fudge / 2 + 0.2 /* + diffLen * charWidth */
156
+ }}
157
+ style={{ pointerEvents: "none" }}
158
+ className="ve-monospace-font tg-primer-bases"
159
+ >
160
+ {map(
161
+ basesNoInsertsWithMetaData,
162
+ ({ b, isMatch, isAmbiguousMatch }, i) => {
163
+ return (
164
+ <tspan
165
+ key={i}
166
+ className={
167
+ b === "&"
168
+ ? "tg-no-show-seq"
169
+ : isMatch
170
+ ? ""
171
+ : isAmbiguousMatch
172
+ ? "tg-ambiguous-match-seq"
173
+ : "tg-no-match-seq"
174
+ }
175
+ textLength={textLength}
176
+ >
177
+ {b}
178
+ </tspan>
179
+ );
180
+ }
181
+ )}
182
+ </text>
183
+ {insertText}
184
+ </React.Fragment>
185
+ );
186
+ }
187
+ return basesToShow;
188
+ }
189
+
190
+ function getInsertTick({ insertStart, charWidth, height }) {
191
+ if (insertStart === 0) return "";
192
+ const insertLocation = insertStart * charWidth;
193
+
194
+ const jutUp = `
195
+ L ${insertLocation - 1},${height + 5}
196
+ L ${insertLocation - 1},${height - 4}
197
+ L ${insertLocation - 1},${height + 5}
198
+ `;
199
+ return jutUp;
200
+ }
201
+
202
+ function getInsertPath({ charWidth, xStart, xEnd, insertStart, level = 0 }) {
203
+ const insertLocation = insertStart * charWidth;
204
+ const insertHeight = 15;
205
+ const levelHeight = -5 - level * 20;
206
+ const leftX = (xStart - 1) * charWidth;
207
+ const rightX = (xEnd - 1) * charWidth;
208
+
209
+ const jutUp = `
210
+ L ${insertLocation - 6},${0}
211
+ L ${insertLocation - 6},${levelHeight}
212
+ L ${leftX},${levelHeight}
213
+ L ${leftX},${-insertHeight + levelHeight}
214
+
215
+ L ${rightX},${-insertHeight + levelHeight}
216
+ L ${rightX},${levelHeight}
217
+ L ${insertLocation + 4},${levelHeight}
218
+ L ${insertLocation + 4},${0}
219
+ `;
220
+ return jutUp;
221
+ }
@@ -0,0 +1,27 @@
1
+ import createMergedDefaultStateReducer from "./utils/createMergedDefaultStateReducer";
2
+ import createAction from "./utils/createMetaAction";
3
+
4
+ // ------------------------------------
5
+ // Actions
6
+ // ------------------------------------
7
+ export const updatePrimerLengthsToHide = createAction(
8
+ "updatePrimerLengthsToHide"
9
+ );
10
+ export const togglePrimerLengthsToHide = createAction(
11
+ "togglePrimerLengthsToHide"
12
+ );
13
+
14
+ // ------------------------------------
15
+ // Reducer
16
+ // ------------------------------------
17
+ export default createMergedDefaultStateReducer(
18
+ {
19
+ [updatePrimerLengthsToHide]: (state, payload) => {
20
+ return { ...state, ...payload };
21
+ },
22
+ [togglePrimerLengthsToHide]: state => {
23
+ return { ...state, enabled: !state["enabled"] };
24
+ }
25
+ },
26
+ { enabled: false, min: 0, max: 40 }
27
+ );
package/primers.js ADDED
@@ -0,0 +1,19 @@
1
+ import { createReducer } from "redux-act";
2
+ import createAction from "../utils/createMetaAction";
3
+ import upsertDeleteActionGenerator from "./upsertDeleteActionGenerator";
4
+
5
+ // ------------------------------------
6
+ // Actions
7
+ // ------------------------------------
8
+ export const upsertPrimer = createAction("UPSERT_PRIMER");
9
+ export const deletePrimer = createAction("DELETE_PRIMER");
10
+
11
+ // ------------------------------------
12
+ // Reducer
13
+ // ------------------------------------
14
+ export default createReducer(
15
+ {
16
+ ...upsertDeleteActionGenerator(upsertPrimer, deletePrimer)
17
+ },
18
+ {}
19
+ );
@@ -0,0 +1,8 @@
1
+ import { createSelector } from "reselect";
2
+ import sequenceDataSelector from "./sequenceDataSelector";
3
+
4
+ function primersRawSelector(sequenceData) {
5
+ return sequenceData.primers;
6
+ }
7
+
8
+ export default createSelector(sequenceDataSelector, primersRawSelector);
package/print.png ADDED
Binary file
package/printTool.js ADDED
@@ -0,0 +1,31 @@
1
+ //TNRTODO this needs to be fixed and implemented
2
+ import React from "react";
3
+ import print from "./veToolbarIcons/print.png";
4
+
5
+ export default () => {
6
+ return {
7
+ Icon: <img src={print} alt="Print Vector" />,
8
+ onIconClick: function () {
9
+ // var myPrintContent = document.getElementById('printdiv');
10
+ // var myPrintWindow = window.open(windowUrl, windowName, 'left=300,top=100,width=400,height=400');
11
+ // myPrintWindow.document.write(myPrintContent.innerHTML);
12
+ // myPrintWindow.document.getElementById('hidden_div').style.display='block'
13
+ // myPrintWindow.document.close();
14
+ // myPrintWindow.focus();
15
+ // myPrintWindow.print();
16
+ // myPrintWindow.close();
17
+ // return false;
18
+ // print();
19
+ // var content = document.getElementById("divcontents");
20
+ // document.appendChild(con)
21
+ // var pri = document.getElementById("ifmcontentstoprint").contentWindow;
22
+ // pri.document.open();
23
+ // pri.document.write(content.innerHTML);
24
+ // pri.document.close();
25
+ // pri.focus();
26
+ // pri.print();
27
+ // downloadSequenceData(sequenceData || )
28
+ },
29
+ tooltip: "Print Vector"
30
+ };
31
+ };
@@ -0,0 +1,40 @@
1
+ import createAction from "./utils/createMetaAction";
2
+ import createMergedDefaultStateReducer from "./utils/createMergedDefaultStateReducer";
3
+
4
+ // ------------------------------------
5
+ // Actions
6
+ // ------------------------------------
7
+ // export const propertiesViewToggle = createAction(
8
+ // "TOGGLE_PROPERTIES_VIEW",
9
+ // () => {}
10
+ // ); //NOTE!!:: second argument sanitizes actions so no payload is passed
11
+ // export const propertiesViewOpen = createAction(
12
+ // "Open_PROPERTIES_VIEW",
13
+ // () => {}
14
+ // ); //NOTE!!:: second argument sanitizes actions so no payload is passed
15
+ export const propertiesViewTabUpdate = createAction("propertiesViewTabUpdate"); //NOTE!!:: second argument sanitizes actions so no payload is passed
16
+
17
+ // ------------------------------------
18
+ // Reducer
19
+ // ------------------------------------
20
+ export default createMergedDefaultStateReducer(
21
+ {
22
+ [propertiesViewTabUpdate]: (
23
+ state,
24
+ tabId,
25
+ selectedAnnotationOrAnnotationId
26
+ ) => {
27
+ return {
28
+ ...state,
29
+ selectedAnnotationId: selectedAnnotationOrAnnotationId
30
+ ? selectedAnnotationOrAnnotationId.id ||
31
+ selectedAnnotationOrAnnotationId
32
+ : undefined,
33
+ tabId
34
+ };
35
+ }
36
+ },
37
+ {
38
+ tabId: "general"
39
+ }
40
+ );
@@ -0,0 +1,3 @@
1
+ export function divideBy3(num, shouldDivideBy3) {
2
+ return shouldDivideBy3 ? Math.floor(num / 3) : num;
3
+ }
package/pureNoFunc.js ADDED
@@ -0,0 +1,18 @@
1
+ import { shouldUpdate } from "recompose";
2
+ import { isEqualWith, isFunction } from "lodash-es";
3
+
4
+ const isEq = (o1, o2) => {
5
+ const isEq = isEqualWith(o1, o2, function (val1, val2) {
6
+ if (isFunction(val1) && isFunction(val2)) {
7
+ return val1 === val2 || val1.toString() === val2.toString();
8
+ }
9
+ });
10
+ return isEq;
11
+ };
12
+
13
+ const pure = BaseComponent => {
14
+ const hoc = shouldUpdate((props, nextProps) => !isEq(props, nextProps));
15
+ return hoc(BaseComponent);
16
+ };
17
+
18
+ export default pure;
package/readOnly.js ADDED
@@ -0,0 +1,25 @@
1
+ //./caretPosition.js
2
+ import { createReducer } from "redux-act";
3
+ import createAction from "./utils/createMetaAction";
4
+ import { noop } from "lodash-es";
5
+
6
+ // ------------------------------------
7
+ // Actions
8
+ // ------------------------------------
9
+ export const toggleReadOnlyMode = createAction("TOGGLE_READ_ONLY_MODE", noop); //NOTE!!:: second argument sanitizes actions so no payload is passed
10
+ export const updateReadOnlyMode = createAction("UPDATE_READ_ONLY_MODE");
11
+
12
+ // ------------------------------------
13
+ // Reducer
14
+ // ------------------------------------
15
+ export default createReducer(
16
+ {
17
+ [updateReadOnlyMode]: (state, payload) => {
18
+ return payload;
19
+ },
20
+ [toggleReadOnlyMode]: state => {
21
+ return !state;
22
+ }
23
+ },
24
+ true
25
+ );
package/redoTool.js ADDED
@@ -0,0 +1,30 @@
1
+ import React from "react";
2
+ import { Icon } from "@blueprintjs/core";
3
+ import ToolbarItem from "./ToolbarItem";
4
+ import { connectToEditor } from "../withEditorProps";
5
+
6
+ export default connectToEditor(editorState => {
7
+ return {
8
+ disabled: !(
9
+ editorState.sequenceDataHistory &&
10
+ editorState.sequenceDataHistory.future &&
11
+ editorState.sequenceDataHistory.future.length
12
+ )
13
+ };
14
+ })(({ toolbarItemProps, redo, disabled }) => {
15
+ return (
16
+ <ToolbarItem
17
+ {...{
18
+ Icon: <Icon data-test="veRedoTool" icon="redo" />,
19
+ disabled,
20
+ onIconClick: redo,
21
+ tooltip: (
22
+ <span>
23
+ Redo <span style={{ fontSize: 10 }}>(Cmd/Ctrl+Shift+Z)</span>
24
+ </span>
25
+ ),
26
+ ...toolbarItemProps
27
+ }}
28
+ />
29
+ );
30
+ });
@@ -0,0 +1,128 @@
1
+ .reflex-layout.reflex-container {
2
+ justify-content: flex-start;
3
+ /* align items in Main Axis */
4
+ align-items: stretch;
5
+ /* align items in Cross Axis */
6
+ align-content: stretch;
7
+ display: -webkit-box;
8
+ /* OLD - iOS 6-, Safari 3.1-6 */
9
+ display: -moz-box;
10
+ /* OLD - Firefox 19- (buggy but mostly works) */
11
+ display: -ms-flexbox;
12
+ /* TWEENER - IE 10 */
13
+ display: -webkit-flex;
14
+ /* NEW - Chrome */
15
+ display: flex;
16
+ position: relative;
17
+ height: 100%;
18
+ width: 100%;
19
+ }
20
+
21
+ .reflex-layout.reflex-container.horizontal {
22
+ flex-direction: column;
23
+ }
24
+
25
+ .reflex-layout.reflex-container.vertical {
26
+ flex-direction: row;
27
+ }
28
+
29
+ .reflex-layout > .reflex-element {
30
+ position: relative;
31
+ overflow: auto;
32
+ height: 100%;
33
+ width: 100%;
34
+ }
35
+
36
+ .reflex-layout > .reflex-splitter {
37
+ background-color: #f1f1f1;
38
+ z-index: 100;
39
+ }
40
+
41
+ .reflex-layout > .reflex-splitter.active,
42
+ .reflex-layout > .reflex-splitter:hover {
43
+ background-color: #cccccc;
44
+ transition: all 1s ease;
45
+ }
46
+
47
+ .reflex-layout.horizontal > .reflex-splitter {
48
+ border-bottom: 1px solid #f1f1f1;
49
+ border-top: 1px solid #f1f1f1;
50
+ cursor: row-resize;
51
+ width: 100%;
52
+ height: 2px;
53
+ }
54
+
55
+ .reflex-layout.horizontal > .reflex-splitter:hover,
56
+ .reflex-layout.horizontal > .reflex-splitter.active {
57
+ border-bottom: 1px solid #cccccc;
58
+ border-top: 1px solid #cccccc;
59
+ }
60
+
61
+ .reflex-layout.vertical > .reflex-splitter {
62
+ border-right: 1px solid #f1f1f1;
63
+ border-left: 1px solid #f1f1f1;
64
+ cursor: col-resize;
65
+ height: 95%;
66
+ width: 2px;
67
+ margin-top: 33px;
68
+ }
69
+ .bp3-dark .reflex-layout.vertical > .reflex-splitter {
70
+ border-right: 1px solid #4a4b4b;
71
+ border-left: 1px solid #4a4b4b;
72
+ }
73
+
74
+ .reflex-layout.vertical > .reflex-splitter:hover,
75
+ .reflex-layout.vertical > .reflex-splitter.active {
76
+ border-right: 1px solid #cccccc;
77
+ border-left: 1px solid #cccccc;
78
+ }
79
+
80
+ .reflex-layout > .reflex-splitter.reflex-thin {
81
+ -moz-box-sizing: border-box;
82
+ -webkit-box-sizing: border-box;
83
+ box-sizing: border-box;
84
+ background: #000;
85
+ -moz-background-clip: padding;
86
+ -webkit-background-clip: padding;
87
+ background-clip: padding-box;
88
+ opacity: 0.2;
89
+ z-index: 100;
90
+ }
91
+
92
+ .reflex-layout
93
+ > .reflex-splitter.reflex-thin.active
94
+ .reflex-layout
95
+ > .reflex-splitter.reflex-thin:hover {
96
+ transition: all 1.5s ease;
97
+ opacity: 0.5;
98
+ }
99
+
100
+ .reflex-layout.horizontal > .reflex-splitter.reflex-thin {
101
+ border-bottom: 8px solid rgba(255, 255, 255, 0);
102
+ border-top: 8px solid rgba(255, 255, 255, 0);
103
+ height: 17px !important;
104
+ cursor: row-resize;
105
+ margin: -8px 0;
106
+ width: 100%;
107
+ }
108
+
109
+ .reflex-layout.horizontal > .reflex-splitter.reflex-thin.active,
110
+ .reflex-layout.horizontal > .reflex-splitter.reflex-thin:hover {
111
+ border-bottom: 8px solid #e4e4e4;
112
+ border-top: 8px solid #e4e4e4;
113
+ }
114
+
115
+ .reflex-layout.vertical > .reflex-splitter.reflex-thin {
116
+ border-right: 8px solid rgba(255, 255, 255, 0);
117
+ border-left: 8px solid rgba(255, 255, 255, 0);
118
+ width: 17px !important;
119
+ cursor: col-resize;
120
+ margin: 0 -8px;
121
+ height: 100%;
122
+ }
123
+
124
+ .reflex-layout.vertical > .reflex-splitter.reflex-thin.active,
125
+ .reflex-layout.vertical > .reflex-splitter.reflex-thin:hover {
126
+ border-right: 8px solid #e4e4e4;
127
+ border-left: 8px solid #e4e4e4;
128
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "version": 3,
3
+ "mappings": "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",
4
+ "sources": [
5
+ "reflex-styles.scss"
6
+ ],
7
+ "names": [],
8
+ "file": "reflex-styles.css"
9
+ }