@teselagen/ove 0.3.11 → 0.3.12

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 (148) hide show
  1. package/index.js +362 -209
  2. package/index.mjs +362 -209
  3. package/index.umd.js +339 -232
  4. package/package.json +1 -1
  5. package/src/AlignmentView/AlignmentVisibilityTool.js +1 -1
  6. package/src/AlignmentView/EditTrackNameDialog.js +1 -5
  7. package/src/AlignmentView/HorizontalPanelDragHandle.js +2 -2
  8. package/src/AlignmentView/Minimap.js +12 -12
  9. package/src/AlignmentView/PairwiseAlignmentView.js +1 -1
  10. package/src/AlignmentView/getGapMap.js +1 -1
  11. package/src/AlignmentView/getTrackFromEvent.js +1 -1
  12. package/src/AlignmentView/index.js +32 -37
  13. package/src/AutoAnnotate.js +48 -48
  14. package/src/CircularView/Cutsites.js +3 -3
  15. package/src/CircularView/Labels/index.js +7 -7
  16. package/src/CircularView/Labels/relaxLabels_DEPRECATED.js +5 -5
  17. package/src/CircularView/RotateCircularViewSlider.js +1 -1
  18. package/src/CircularView/SelectionLayer.js +2 -2
  19. package/src/CircularView/drawAnnotations.js +3 -3
  20. package/src/CircularView/getAngleForPositionMidpoint.js +1 -1
  21. package/src/CircularView/index.d.ts +11 -11
  22. package/src/CircularView/index.js +9 -9
  23. package/src/CreateAnnotationsPage.js +7 -5
  24. package/src/CreateCustomEnzyme/index.js +1 -5
  25. package/src/CutsiteFilter/AdditionalCutsiteInfoDialog.js +11 -11
  26. package/src/CutsiteFilter/index.js +12 -12
  27. package/src/DigestTool/AddLaddersDialog.js +1 -1
  28. package/src/DigestTool/DigestTool.js +3 -3
  29. package/src/DigestTool/Ladder.js +8 -8
  30. package/src/DigestTool/ladderDefaults.js +1 -2
  31. package/src/Editor/CommandHotkeyHandler.js +1 -1
  32. package/src/Editor/DropHandler.js +2 -2
  33. package/src/Editor/index.js +14 -14
  34. package/src/Editor/userDefinedHandlersAndOpts.js +2 -0
  35. package/src/FindBar/index.js +6 -6
  36. package/src/GlobalDialogUtils.js +6 -0
  37. package/src/LinearView/ZoomLinearView.js +1 -1
  38. package/src/LinearView/index.js +7 -7
  39. package/src/MenuBar/index.js +1 -1
  40. package/src/MenuBar/viewSubmenu.js +1 -1
  41. package/src/PCRTool/PCRTool.js +19 -19
  42. package/src/Reflex/Browser.js +4 -5
  43. package/src/Reflex/ReflexContainer.js +3 -3
  44. package/src/Reflex/ReflexElement.js +2 -2
  45. package/src/RowItem/Axis.js +1 -1
  46. package/src/RowItem/Caret/index.js +1 -1
  47. package/src/RowItem/Chromatograms/Chromatogram.js +3 -3
  48. package/src/RowItem/CutsiteSelectionLayers.js +1 -1
  49. package/src/RowItem/Cutsites.js +1 -1
  50. package/src/RowItem/Labels.js +2 -2
  51. package/src/RowItem/Orfs.js +2 -2
  52. package/src/RowItem/Sequence.js +4 -4
  53. package/src/RowItem/StackedAnnotations/PointedAnnotation.js +3 -3
  54. package/src/RowItem/StackedAnnotations/getStructuredBases.js +1 -1
  55. package/src/RowItem/Translations/AASliver.js +71 -75
  56. package/src/RowItem/Translations/index.js +1 -1
  57. package/src/RowItem/getCutsiteLabelHeights.js +1 -1
  58. package/src/RowItem/index.js +14 -8
  59. package/src/RowView/estimateRowHeight.js +5 -5
  60. package/src/RowView/index.d.ts +7 -7
  61. package/src/RowView/index.js +11 -12
  62. package/src/SimpleCircularOrLinearView.js +6 -6
  63. package/src/StatusBar/MeltingTemp.js +3 -3
  64. package/src/ToolBar/ToolbarItem.js +2 -2
  65. package/src/ToolBar/alignmentTool.js +9 -9
  66. package/src/ToolBar/editTool.js +1 -1
  67. package/src/ToolBar/findTool.js +2 -2
  68. package/src/ToolBar/importTool.js +1 -1
  69. package/src/ToolBar/index.js +2 -2
  70. package/src/ToolBar/oligoTool.js +1 -1
  71. package/src/ToolBar/orfTool.js +1 -6
  72. package/src/ToolBar/printTool.js +2 -2
  73. package/src/ToolBar/visibilityTool.js +1 -1
  74. package/src/VersionHistoryView/index.js +2 -2
  75. package/src/commands/index.js +236 -230
  76. package/src/createVectorEditor/index.js +4 -4
  77. package/src/fileUtils.js +18 -18
  78. package/src/helperComponents/AddOrEditAnnotationDialog/index.js +22 -15
  79. package/src/helperComponents/AddOrEditFeatureDialog/index.js +2 -2
  80. package/src/helperComponents/AddOrEditPartDialog/index.js +2 -2
  81. package/src/helperComponents/AddOrEditPrimerDialog/index.js +5 -5
  82. package/src/helperComponents/EnzymesDialog/index.js +17 -22
  83. package/src/helperComponents/GoToDialog.js +5 -1
  84. package/src/helperComponents/MergeFeaturesDialog/index.js +3 -3
  85. package/src/helperComponents/PinchHelper/PinchHelper.js +1 -1
  86. package/src/helperComponents/PrintDialog/index.js +4 -4
  87. package/src/helperComponents/PropertiesDialog/CutsiteProperties.js +3 -3
  88. package/src/helperComponents/PropertiesDialog/GenbankView.js +1 -1
  89. package/src/helperComponents/PropertiesDialog/GeneralProperties.js +5 -5
  90. package/src/helperComponents/PropertiesDialog/GenericAnnotationProperties.js +136 -138
  91. package/src/helperComponents/PropertiesDialog/OrfProperties.js +3 -3
  92. package/src/helperComponents/PropertiesDialog/PrimerProperties.js +1 -1
  93. package/src/helperComponents/PropertiesDialog/TranslationProperties.js +2 -2
  94. package/src/helperComponents/PropertiesDialog/index.js +3 -3
  95. package/src/helperComponents/RemoveDuplicates/index.js +3 -3
  96. package/src/helperComponents/SelectDialog.js +3 -3
  97. package/src/helperComponents/UncontrolledSliderWithPlusMinusBtns.js +5 -5
  98. package/src/helperComponents/createSimpleDialog.js +1 -1
  99. package/src/helperComponents/partTagSearch.js +2 -5
  100. package/src/helperComponents/withHover.js +3 -3
  101. package/src/redux/alignments.js +6 -6
  102. package/src/redux/annotationVisibility.js +4 -4
  103. package/src/redux/featureLengthsToHide.js +1 -1
  104. package/src/redux/frameTranslations.js +3 -3
  105. package/src/redux/middleware.js +2 -2
  106. package/src/redux/panelsShown.js +19 -19
  107. package/src/redux/partLengthsToHide.js +1 -1
  108. package/src/redux/primerLengthsToHide.js +1 -1
  109. package/src/redux/readOnly.js +1 -4
  110. package/src/redux/selectionLayer.js +1 -1
  111. package/src/redux/sequenceData/features.js +1 -1
  112. package/src/redux/sequenceData/upsertDeleteActionGenerator.js +1 -1
  113. package/src/redux/sequenceDataHistory.js +5 -5
  114. package/src/redux/toolBar.js +2 -4
  115. package/src/redux/utils/createMetaAction.js +2 -2
  116. package/src/redux/versionHistory.js +1 -2
  117. package/src/selectors/annotationSearchSelector.js +4 -4
  118. package/src/selectors/circularSelector.js +1 -1
  119. package/src/selectors/cutsiteLabelColorSelector.js +1 -1
  120. package/src/selectors/filteredCutsitesSelector.js +6 -6
  121. package/src/selectors/filteredFeaturesSelector.js +4 -4
  122. package/src/selectors/filteredPartsSelector.js +5 -5
  123. package/src/selectors/filteredPrimersSelector.js +3 -3
  124. package/src/selectors/isEnzymeFilterAndSelector.js +1 -1
  125. package/src/selectors/orfsSelector.js +1 -1
  126. package/src/selectors/restrictionEnzymesSelector.js +2 -2
  127. package/src/selectors/searchLayersSelector.js +7 -7
  128. package/src/selectors/sequenceLengthSelector.js +1 -1
  129. package/src/selectors/sequenceSelector.js +1 -1
  130. package/src/selectors/tagsToBoldSelector.js +1 -1
  131. package/src/selectors/translationsSelector.js +7 -7
  132. package/src/updateEditor.js +1 -1
  133. package/src/utils/PassThrough.js +1 -1
  134. package/src/utils/addWrappedAddons.js +1 -1
  135. package/src/utils/annotationTypes.js +2 -2
  136. package/src/utils/combineReducersDontIgnoreKeys.js +1 -1
  137. package/src/utils/editorUtils.js +2 -2
  138. package/src/utils/massageTickSpacing.js +1 -1
  139. package/src/utils/onlyUpdateForKeysDeep.js +1 -1
  140. package/src/utils/pureNoFunc.js +1 -1
  141. package/src/utils/shouldRerender.js +1 -1
  142. package/src/utils/showFileDialog.js +6 -7
  143. package/src/utils/updateLabelsForInViewFeatures.js +1 -1
  144. package/src/utils/useAnnotationLimits.js +1 -1
  145. package/src/withEditorInteractions/Keyboard.js +2 -3
  146. package/src/withEditorInteractions/createSequenceInputPopup.js +4 -4
  147. package/src/withEditorInteractions/index.js +93 -55
  148. package/src/withEditorProps/index.js +40 -37
package/index.umd.js CHANGED
@@ -23998,7 +23998,7 @@
23998
23998
  var ownKeys$9 = typeof Reflect !== "undefined" && Reflect.ownKeys ? Reflect.ownKeys : hasGetOwnPropertySymbols ? function (obj) {
23999
23999
  return Object.getOwnPropertyNames(obj).concat(Object.getOwnPropertySymbols(obj));
24000
24000
  } : /* istanbul ignore next */Object.getOwnPropertyNames;
24001
- function toPrimitive$2(value) {
24001
+ function toPrimitive$3(value) {
24002
24002
  return value === null ? null : typeof value === "object" ? "" + value : value;
24003
24003
  }
24004
24004
  function hasProp(target, prop) {
@@ -24927,7 +24927,7 @@
24927
24927
  return this.name_ + "[" + this.value_ + "]";
24928
24928
  };
24929
24929
  _proto.valueOf = function valueOf() {
24930
- return toPrimitive$2(this.get());
24930
+ return toPrimitive$3(this.get());
24931
24931
  };
24932
24932
  _proto[_Symbol$toPrimitive] = function () {
24933
24933
  return this.valueOf();
@@ -25155,7 +25155,7 @@
25155
25155
  return this.name_ + "[" + this.derivation.toString() + "]";
25156
25156
  };
25157
25157
  _proto.valueOf = function valueOf() {
25158
- return toPrimitive$2(this.get());
25158
+ return toPrimitive$3(this.get());
25159
25159
  };
25160
25160
  _proto[_Symbol$toPrimitive$1] = function () {
25161
25161
  return this.valueOf();
@@ -57023,18 +57023,10 @@
57023
57023
  }
57024
57024
  };
57025
57025
 
57026
- var _descriptors;
57027
- var hasRequired_descriptors;
57028
-
57029
- function require_descriptors () {
57030
- if (hasRequired_descriptors) return _descriptors;
57031
- hasRequired_descriptors = 1;
57032
- // Thank's IE8 for his funny defineProperty
57033
- _descriptors = !_fails(function () {
57034
- return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;
57035
- });
57036
- return _descriptors;
57037
- }
57026
+ // Thank's IE8 for his funny defineProperty
57027
+ var _descriptors = !_fails(function () {
57028
+ return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;
57029
+ });
57038
57030
 
57039
57031
  var _domCreate;
57040
57032
  var hasRequired_domCreate;
@@ -57052,17 +57044,9 @@
57052
57044
  return _domCreate;
57053
57045
  }
57054
57046
 
57055
- var _ie8DomDefine;
57056
- var hasRequired_ie8DomDefine;
57057
-
57058
- function require_ie8DomDefine () {
57059
- if (hasRequired_ie8DomDefine) return _ie8DomDefine;
57060
- hasRequired_ie8DomDefine = 1;
57061
- _ie8DomDefine = !require_descriptors() && !_fails(function () {
57062
- return Object.defineProperty(require_domCreate()('div'), 'a', { get: function () { return 7; } }).a != 7;
57063
- });
57064
- return _ie8DomDefine;
57065
- }
57047
+ var _ie8DomDefine = !_descriptors && !_fails(function () {
57048
+ return Object.defineProperty(require_domCreate()('div'), 'a', { get: function () { return 7; } }).a != 7;
57049
+ });
57066
57050
 
57067
57051
  // 7.1.1 ToPrimitive(input [, PreferredType])
57068
57052
  var isObject$6 = _isObject;
@@ -57077,29 +57061,22 @@
57077
57061
  throw TypeError("Can't convert object to primitive value");
57078
57062
  };
57079
57063
 
57080
- var hasRequired_objectDp;
57081
-
57082
- function require_objectDp () {
57083
- if (hasRequired_objectDp) return _objectDp;
57084
- hasRequired_objectDp = 1;
57085
- var anObject = _anObject;
57086
- var IE8_DOM_DEFINE = require_ie8DomDefine();
57087
- var toPrimitive = _toPrimitive$1;
57088
- var dP = Object.defineProperty;
57064
+ var anObject$5 = _anObject;
57065
+ var IE8_DOM_DEFINE$1 = _ie8DomDefine;
57066
+ var toPrimitive$2 = _toPrimitive$1;
57067
+ var dP$3 = Object.defineProperty;
57089
57068
 
57090
- _objectDp.f = require_descriptors() ? Object.defineProperty : function defineProperty(O, P, Attributes) {
57091
- anObject(O);
57092
- P = toPrimitive(P, true);
57093
- anObject(Attributes);
57094
- if (IE8_DOM_DEFINE) try {
57095
- return dP(O, P, Attributes);
57096
- } catch (e) { /* empty */ }
57097
- if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');
57098
- if ('value' in Attributes) O[P] = Attributes.value;
57099
- return O;
57100
- };
57101
- return _objectDp;
57102
- }
57069
+ _objectDp.f = _descriptors ? Object.defineProperty : function defineProperty(O, P, Attributes) {
57070
+ anObject$5(O);
57071
+ P = toPrimitive$2(P, true);
57072
+ anObject$5(Attributes);
57073
+ if (IE8_DOM_DEFINE$1) try {
57074
+ return dP$3(O, P, Attributes);
57075
+ } catch (e) { /* empty */ }
57076
+ if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');
57077
+ if ('value' in Attributes) O[P] = Attributes.value;
57078
+ return O;
57079
+ };
57103
57080
 
57104
57081
  var _propertyDesc = function (bitmap, value) {
57105
57082
  return {
@@ -57110,9 +57087,9 @@
57110
57087
  };
57111
57088
  };
57112
57089
 
57113
- var dP$2 = require_objectDp();
57090
+ var dP$2 = _objectDp;
57114
57091
  var createDesc$3 = _propertyDesc;
57115
- var _hide = require_descriptors() ? function (object, key, value) {
57092
+ var _hide = _descriptors ? function (object, key, value) {
57116
57093
  return dP$2.f(object, key, createDesc$3(1, value));
57117
57094
  } : function (object, key, value) {
57118
57095
  object[key] = value;
@@ -57349,7 +57326,7 @@
57349
57326
  if (hasRequired_objectAssign) return _objectAssign;
57350
57327
  hasRequired_objectAssign = 1;
57351
57328
  // 19.1.2.1 Object.assign(target, source, ...)
57352
- var DESCRIPTORS = require_descriptors();
57329
+ var DESCRIPTORS = _descriptors;
57353
57330
  var getKeys = _objectKeys;
57354
57331
  var gOPS = _objectGops;
57355
57332
  var pIE = require_objectPie();
@@ -57425,11 +57402,11 @@
57425
57402
 
57426
57403
  var _redefine = _hide;
57427
57404
 
57428
- var dP$1 = require_objectDp();
57405
+ var dP$1 = _objectDp;
57429
57406
  var anObject$4 = _anObject;
57430
57407
  var getKeys$1 = _objectKeys;
57431
57408
 
57432
- var _objectDps = require_descriptors() ? Object.defineProperties : function defineProperties(O, Properties) {
57409
+ var _objectDps = _descriptors ? Object.defineProperties : function defineProperties(O, Properties) {
57433
57410
  anObject$4(O);
57434
57411
  var keys = getKeys$1(Properties);
57435
57412
  var length = keys.length;
@@ -57508,7 +57485,7 @@
57508
57485
 
57509
57486
  var _wksExports = _wks.exports;
57510
57487
 
57511
- var def = require_objectDp().f;
57488
+ var def = _objectDp.f;
57512
57489
  var has$b = _has;
57513
57490
  var TAG$1 = _wksExports('toStringTag');
57514
57491
 
@@ -57822,7 +57799,7 @@
57822
57799
  return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);
57823
57800
  };
57824
57801
 
57825
- var $defineProperty$1 = require_objectDp();
57802
+ var $defineProperty$1 = _objectDp;
57826
57803
  var createDesc$2 = _propertyDesc;
57827
57804
 
57828
57805
  var _createProperty = function (object, index, value) {
@@ -57955,7 +57932,7 @@
57955
57932
 
57956
57933
  var $export$3 = _export;
57957
57934
  // 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)
57958
- $export$3($export$3.S + $export$3.F * !require_descriptors(), 'Object', { defineProperty: require_objectDp().f });
57935
+ $export$3($export$3.S + $export$3.F * !_descriptors, 'Object', { defineProperty: _objectDp.f });
57959
57936
 
57960
57937
  var $Object$1 = _coreExports.Object;
57961
57938
  var defineProperty$6 = function defineProperty(it, key, desc) {
@@ -58003,7 +57980,7 @@
58003
57980
  var META$1 = _uid('meta');
58004
57981
  var isObject$5 = _isObject;
58005
57982
  var has$9 = _has;
58006
- var setDesc = require_objectDp().f;
57983
+ var setDesc = _objectDp.f;
58007
57984
  var id$1 = 0;
58008
57985
  var isExtensible = Object.isExtensible || function () {
58009
57986
  return true;
@@ -58058,7 +58035,7 @@
58058
58035
 
58059
58036
  var core = _coreExports;
58060
58037
  var wksExt$1 = _wksExt;
58061
- var defineProperty$4 = require_objectDp().f;
58038
+ var defineProperty$4 = _objectDp.f;
58062
58039
  var _wksDefine = function (name) {
58063
58040
  var $Symbol = core.Symbol || (core.Symbol = {} );
58064
58041
  if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty$4($Symbol, name, { value: wksExt$1.f(name) });
@@ -58125,10 +58102,10 @@
58125
58102
  var toIObject$1 = _toIobject;
58126
58103
  var toPrimitive$1 = _toPrimitive$1;
58127
58104
  var has$8 = _has;
58128
- var IE8_DOM_DEFINE = require_ie8DomDefine();
58105
+ var IE8_DOM_DEFINE = _ie8DomDefine;
58129
58106
  var gOPD$2 = Object.getOwnPropertyDescriptor;
58130
58107
 
58131
- _objectGopd.f = require_descriptors() ? gOPD$2 : function getOwnPropertyDescriptor(O, P) {
58108
+ _objectGopd.f = _descriptors ? gOPD$2 : function getOwnPropertyDescriptor(O, P) {
58132
58109
  O = toIObject$1(O);
58133
58110
  P = toPrimitive$1(P, true);
58134
58111
  if (IE8_DOM_DEFINE) try {
@@ -58140,7 +58117,7 @@
58140
58117
  // ECMAScript 6 symbols shim
58141
58118
  var global$1 = _globalExports;
58142
58119
  var has$7 = _has;
58143
- var DESCRIPTORS = require_descriptors();
58120
+ var DESCRIPTORS = _descriptors;
58144
58121
  var $export$2 = _export;
58145
58122
  var redefine = _redefine;
58146
58123
  var META = _metaExports.KEY;
@@ -58163,7 +58140,7 @@
58163
58140
  var gOPNExt = _objectGopnExt;
58164
58141
  var $GOPD = _objectGopd;
58165
58142
  var $GOPS = _objectGops;
58166
- var $DP = require_objectDp();
58143
+ var $DP = _objectDp;
58167
58144
  var $keys$1 = _objectKeys;
58168
58145
  var gOPD$1 = $GOPD.f;
58169
58146
  var dP = $DP.f;
@@ -113755,13 +113732,7 @@
113755
113732
  return {};
113756
113733
  }
113757
113734
  const mergedOpts = getMergedOpts(topLevelOptions, ownProps);
113758
- const {
113759
- formName,
113760
- urlConnected,
113761
- history,
113762
- defaults,
113763
- onlyOneFilter
113764
- } = mergedOpts;
113735
+ const { formName, urlConnected, history, defaults, onlyOneFilter } = mergedOpts;
113765
113736
  function updateSearch(val) {
113766
113737
  setTimeout(function() {
113767
113738
  dispatch(change(formName, "reduxFormSearchInput", val || ""));
@@ -113800,12 +113771,7 @@
113800
113771
  action(...args, currentParams);
113801
113772
  };
113802
113773
  });
113803
- const {
113804
- variables,
113805
- selectedEntities,
113806
- mergedOpts,
113807
- ...restStateProps
113808
- } = stateProps;
113774
+ const { variables, selectedEntities, mergedOpts, ...restStateProps } = stateProps;
113809
113775
  const changeFormValue = (...args) => dispatchProps.dispatch(change(formName, ...args));
113810
113776
  const tableParams = {
113811
113777
  changeFormValue,
@@ -117701,7 +117667,9 @@
117701
117667
  return doNotTriggerClick();
117702
117668
  }
117703
117669
  const parentEl = r.current?.closest(".bp3-dialog-container");
117704
- const dialogs = document.querySelectorAll(".bp3-dialog-container");
117670
+ const dialogs = document.querySelectorAll(
117671
+ ".bp3-dialog-container"
117672
+ );
117705
117673
  const numDialogs = dialogs?.length;
117706
117674
  if (numDialogs > 1) {
117707
117675
  const topMostDialog = dialogs[numDialogs - 1];
@@ -118040,6 +118008,7 @@
118040
118008
  marginBottom: 10,
118041
118009
  marginLeft: 20,
118042
118010
  fontSize: 10
118011
+ /* color: Colors.RED1 */
118043
118012
  }
118044
118013
  },
118045
118014
  userMatchedHeader && [
@@ -120028,10 +119997,7 @@
120028
119997
  if (props.filesWIssues.length > 0) {
120029
119998
  const reduxFormEntitiesArray = [];
120030
119999
  const finishedFiles = props.filesWIssues.map((f, i) => {
120031
- const {
120032
- reduxFormEntities,
120033
- reduxFormCellValidation
120034
- } = formValueSelector(`editableCellTable-${i}`)(
120000
+ const { reduxFormEntities, reduxFormCellValidation } = formValueSelector(`editableCellTable-${i}`)(
120035
120001
  state,
120036
120002
  "reduxFormEntities",
120037
120003
  "reduxFormCellValidation"
@@ -132275,7 +132241,14 @@
132275
132241
  }
132276
132242
  }),
132277
132243
  branch(({ navTo }) => navTo, withRouter$1)
132278
- )(function({ navTo, context, staticContext, didMount, willUnmount, ...props }) {
132244
+ )(function({
132245
+ navTo,
132246
+ context,
132247
+ staticContext,
132248
+ didMount,
132249
+ willUnmount,
132250
+ ...props
132251
+ }) {
132279
132252
  let MenuItemComp = MenuItem;
132280
132253
  if (navTo) {
132281
132254
  MenuItemComp = MenuItemLink;
@@ -133333,11 +133306,7 @@
133333
133306
  return handlers;
133334
133307
  }
133335
133308
 
133336
- const withCommand = (mappings) => (WrappedComponent) => ({
133337
- cmd,
133338
- cmdOptions = {},
133339
- ...props
133340
- }) => {
133309
+ const withCommand = (mappings) => (WrappedComponent) => ({ cmd, cmdOptions = {}, ...props }) => {
133341
133310
  const mappedProps = {};
133342
133311
  Object.keys(mappings).forEach((k) => {
133343
133312
  mappedProps[k] = mappings[k] === "execute" ? (event) => cmd.execute({ event }) : typeof mappings[k] === "function" ? mappings[k](cmd, props) : cmd[mappings[k]];
@@ -134484,9 +134453,9 @@
134484
134453
  }
134485
134454
  },
134486
134455
  {
134487
- "1": false,
134488
- "2": false,
134489
- "3": false,
134456
+ 1: false,
134457
+ 2: false,
134458
+ 3: false,
134490
134459
  "-1": false,
134491
134460
  "-2": false,
134492
134461
  "-3": false
@@ -135215,9 +135184,14 @@
135215
135184
 
135216
135185
  function checkIfPotentiallyCircularRangesOverlap(range, comparisonRange) {
135217
135186
  return splitRangeIntoTwoPartsIfItIsCircular(range, Infinity).some(function(splitRange) {
135218
- return splitRangeIntoTwoPartsIfItIsCircular(comparisonRange, Infinity).some(function(splitComparisonRange) {
135219
- return checkIfNonCircularRangesOverlap(splitRange, splitComparisonRange);
135220
- });
135187
+ return splitRangeIntoTwoPartsIfItIsCircular(comparisonRange, Infinity).some(
135188
+ function(splitComparisonRange) {
135189
+ return checkIfNonCircularRangesOverlap(
135190
+ splitRange,
135191
+ splitComparisonRange
135192
+ );
135193
+ }
135194
+ );
135221
135195
  });
135222
135196
  }
135223
135197
 
@@ -135227,15 +135201,19 @@
135227
135201
  return overlaps;
135228
135202
  } else if (overlaps.length === 2) {
135229
135203
  if (overlaps[0].start === 0 && overlaps[1].end + 1 === sequenceLength && !originalRangeLinear) {
135230
- return [{
135231
- start: overlaps[1].start,
135232
- end: overlaps[0].end
135233
- }];
135204
+ return [
135205
+ {
135206
+ start: overlaps[1].start,
135207
+ end: overlaps[0].end
135208
+ }
135209
+ ];
135234
135210
  } else if (overlaps[1].start === 0 && overlaps[0].end + 1 === sequenceLength && !originalRangeLinear) {
135235
- return [{
135236
- start: overlaps[0].start,
135237
- end: overlaps[1].end
135238
- }];
135211
+ return [
135212
+ {
135213
+ start: overlaps[0].start,
135214
+ end: overlaps[1].end
135215
+ }
135216
+ ];
135239
135217
  } else {
135240
135218
  return overlaps;
135241
135219
  }
@@ -135243,17 +135221,29 @@
135243
135221
  const firstOverlap = overlaps[0];
135244
135222
  const secondOverlap = overlaps[1];
135245
135223
  const thirdOverlap = overlaps[2];
135246
- let collapsedOverlaps = collapseOverlapsGeneratedFromRangeComparisonIfPossible([firstOverlap, secondOverlap], sequenceLength, optionalOriginalRange);
135224
+ let collapsedOverlaps = collapseOverlapsGeneratedFromRangeComparisonIfPossible(
135225
+ [firstOverlap, secondOverlap],
135226
+ sequenceLength,
135227
+ optionalOriginalRange
135228
+ );
135247
135229
  if (collapsedOverlaps.length === 1) {
135248
135230
  collapsedOverlaps.push(thirdOverlap);
135249
135231
  return collapsedOverlaps;
135250
135232
  } else {
135251
- collapsedOverlaps = collapseOverlapsGeneratedFromRangeComparisonIfPossible([firstOverlap, thirdOverlap], sequenceLength, optionalOriginalRange);
135233
+ collapsedOverlaps = collapseOverlapsGeneratedFromRangeComparisonIfPossible(
135234
+ [firstOverlap, thirdOverlap],
135235
+ sequenceLength,
135236
+ optionalOriginalRange
135237
+ );
135252
135238
  if (collapsedOverlaps.length === 1) {
135253
135239
  collapsedOverlaps.push(secondOverlap);
135254
135240
  return collapsedOverlaps;
135255
135241
  } else {
135256
- collapsedOverlaps = collapseOverlapsGeneratedFromRangeComparisonIfPossible([secondOverlap, thirdOverlap], sequenceLength, optionalOriginalRange);
135242
+ collapsedOverlaps = collapseOverlapsGeneratedFromRangeComparisonIfPossible(
135243
+ [secondOverlap, thirdOverlap],
135244
+ sequenceLength,
135245
+ optionalOriginalRange
135246
+ );
135257
135247
  if (collapsedOverlaps.length === 1) {
135258
135248
  collapsedOverlaps.push(firstOverlap);
135259
135249
  return collapsedOverlaps;
@@ -135275,11 +135265,18 @@
135275
135265
  }
135276
135266
 
135277
135267
  function convertRangeTo0Based(range) {
135278
- return convertRangeIndices(range, { inclusive1BasedStart: true, inclusive1BasedEnd: true });
135268
+ return convertRangeIndices(range, {
135269
+ inclusive1BasedStart: true,
135270
+ inclusive1BasedEnd: true
135271
+ });
135279
135272
  }
135280
135273
 
135281
135274
  function convertRangeTo1Based(range) {
135282
- return convertRangeIndices(range, {}, { inclusive1BasedStart: true, inclusive1BasedEnd: true });
135275
+ return convertRangeIndices(
135276
+ range,
135277
+ {},
135278
+ { inclusive1BasedStart: true, inclusive1BasedEnd: true }
135279
+ );
135283
135280
  }
135284
135281
 
135285
135282
  function provideInclusiveOptions(funToWrap) {
@@ -135384,7 +135381,11 @@
135384
135381
  let endMoved = true;
135385
135382
  if (range.end >= position) {
135386
135383
  if (position + maxLength - range.start > range.end - position) {
135387
- newRange.end = normalizePositionByRangeLength(position - 1, maxLength, false);
135384
+ newRange.end = normalizePositionByRangeLength(
135385
+ position - 1,
135386
+ maxLength,
135387
+ false
135388
+ );
135388
135389
  } else {
135389
135390
  newRange.start = position;
135390
135391
  endMoved = false;
@@ -135457,19 +135458,31 @@
135457
135458
  if (range.start > range.end) {
135458
135459
  return expandOrContractCircularRangeToPosition(range, position, maxLength);
135459
135460
  } else {
135460
- return expandOrContractNonCircularRangeToPosition(range, position);
135461
+ return expandOrContractNonCircularRangeToPosition(
135462
+ range,
135463
+ position);
135461
135464
  }
135462
135465
  }
135463
135466
 
135464
135467
  function translateRange(rangeToBeAdjusted, translateBy, rangeLength) {
135465
135468
  return lodashExports.assign({}, rangeToBeAdjusted, {
135466
- start: normalizePositionByRangeLength(rangeToBeAdjusted.start + translateBy, rangeLength),
135467
- end: normalizePositionByRangeLength(rangeToBeAdjusted.end + translateBy, rangeLength)
135469
+ start: normalizePositionByRangeLength(
135470
+ rangeToBeAdjusted.start + translateBy,
135471
+ rangeLength
135472
+ ),
135473
+ end: normalizePositionByRangeLength(
135474
+ rangeToBeAdjusted.end + translateBy,
135475
+ rangeLength
135476
+ )
135468
135477
  });
135469
135478
  }
135470
135479
 
135471
135480
  function flipRelativeRange(innerRange, outerRange, sequenceLength, options) {
135472
- const isFullyContained = isRangeWithinRange(innerRange, outerRange, sequenceLength);
135481
+ const isFullyContained = isRangeWithinRange(
135482
+ innerRange,
135483
+ outerRange,
135484
+ sequenceLength
135485
+ );
135473
135486
  if (isFullyContained) {
135474
135487
  return flipFullyContainedRange(innerRange, outerRange, sequenceLength);
135475
135488
  } else {
@@ -135477,40 +135490,91 @@
135477
135490
  }
135478
135491
  }
135479
135492
  function flipNonFullyContainedRange(innerRange, outerRange, sequenceLength, options) {
135480
- const outerFullyContained = isRangeWithinRange(outerRange, innerRange, sequenceLength);
135493
+ const outerFullyContained = isRangeWithinRange(
135494
+ outerRange,
135495
+ innerRange,
135496
+ sequenceLength
135497
+ );
135481
135498
  let flippedInnerRange;
135482
135499
  if (outerFullyContained) {
135483
- const expandBy1 = getRangeLength({
135484
- start: innerRange.start,
135485
- end: outerRange.start
135486
- }, sequenceLength) - 1;
135487
- flippedInnerRange = expandOrContractRangeByLength(outerRange, expandBy1, false, sequenceLength);
135488
- const expandBy2 = getRangeLength({
135489
- end: innerRange.end,
135490
- start: outerRange.end
135491
- }, sequenceLength) - 1;
135492
- flippedInnerRange = expandOrContractRangeByLength(flippedInnerRange, expandBy2, true, sequenceLength);
135500
+ const expandBy1 = getRangeLength(
135501
+ {
135502
+ start: innerRange.start,
135503
+ end: outerRange.start
135504
+ },
135505
+ sequenceLength
135506
+ ) - 1;
135507
+ flippedInnerRange = expandOrContractRangeByLength(
135508
+ outerRange,
135509
+ expandBy1,
135510
+ false,
135511
+ sequenceLength
135512
+ );
135513
+ const expandBy2 = getRangeLength(
135514
+ {
135515
+ end: innerRange.end,
135516
+ start: outerRange.end
135517
+ },
135518
+ sequenceLength
135519
+ ) - 1;
135520
+ flippedInnerRange = expandOrContractRangeByLength(
135521
+ flippedInnerRange,
135522
+ expandBy2,
135523
+ true,
135524
+ sequenceLength
135525
+ );
135493
135526
  } else {
135494
- const overlaps = getOverlapsOfPotentiallyCircularRanges(innerRange, outerRange, sequenceLength);
135527
+ const overlaps = getOverlapsOfPotentiallyCircularRanges(
135528
+ innerRange,
135529
+ outerRange,
135530
+ sequenceLength
135531
+ );
135495
135532
  if (overlaps.length >= 1) {
135496
135533
  let overlapExtendsForward;
135497
135534
  const firstOverlap = overlaps[0];
135498
135535
  overlapExtendsForward = firstOverlap.start !== outerRange.start;
135499
- const flippedTruncatedInner = flipFullyContainedRange(firstOverlap, outerRange, sequenceLength);
135536
+ const flippedTruncatedInner = flipFullyContainedRange(
135537
+ firstOverlap,
135538
+ outerRange,
135539
+ sequenceLength
135540
+ );
135500
135541
  const lengthToExtend = getRangeLength(innerRange, sequenceLength) - getRangeLength(flippedTruncatedInner, sequenceLength);
135501
- flippedInnerRange = expandOrContractRangeByLength(flippedTruncatedInner, lengthToExtend, overlapExtendsForward, sequenceLength);
135542
+ flippedInnerRange = expandOrContractRangeByLength(
135543
+ flippedTruncatedInner,
135544
+ lengthToExtend,
135545
+ overlapExtendsForward,
135546
+ sequenceLength
135547
+ );
135502
135548
  } else {
135503
- throw new Error("This case (relative ranges that do not overlap) is unsupported! ");
135549
+ throw new Error(
135550
+ "This case (relative ranges that do not overlap) is unsupported! "
135551
+ );
135504
135552
  }
135505
135553
  }
135506
135554
  return flippedInnerRange;
135507
135555
  }
135508
135556
  function flipFullyContainedRange(innerRange, outerRange, sequenceLength, options) {
135509
135557
  const translateBy = -outerRange.start;
135510
- const translatedOuterRange = translateRange(outerRange, translateBy, sequenceLength);
135511
- const translatedInnerRange = translateRange(innerRange, translateBy, sequenceLength);
135512
- const translatedFlippedInnerRange = flipNonOriginSpanningContainedRange(translatedInnerRange, translatedOuterRange, sequenceLength);
135513
- const flippedInnerRange = translateRange(translatedFlippedInnerRange, -translateBy, sequenceLength);
135558
+ const translatedOuterRange = translateRange(
135559
+ outerRange,
135560
+ translateBy,
135561
+ sequenceLength
135562
+ );
135563
+ const translatedInnerRange = translateRange(
135564
+ innerRange,
135565
+ translateBy,
135566
+ sequenceLength
135567
+ );
135568
+ const translatedFlippedInnerRange = flipNonOriginSpanningContainedRange(
135569
+ translatedInnerRange,
135570
+ translatedOuterRange,
135571
+ sequenceLength
135572
+ );
135573
+ const flippedInnerRange = translateRange(
135574
+ translatedFlippedInnerRange,
135575
+ -translateBy,
135576
+ sequenceLength
135577
+ );
135514
135578
  return flippedInnerRange;
135515
135579
  }
135516
135580
  function flipNonOriginSpanningContainedRange(innerRange, outerRange, sequenceLength) {
@@ -135682,9 +135746,15 @@
135682
135746
  }
135683
135747
 
135684
135748
  function zeroSubrangeByContainerRange(subRange, containerRange, sequenceLength) {
135685
- const trimmedSubRange = trimRangeByAnotherRange(subRange, containerRange, sequenceLength);
135749
+ const trimmedSubRange = trimRangeByAnotherRange(
135750
+ subRange,
135751
+ containerRange,
135752
+ sequenceLength
135753
+ );
135686
135754
  if (trimmedSubRange) {
135687
- throw new Error("subRange must be fully contained by containerRange! Otherwise this function does not make sense");
135755
+ throw new Error(
135756
+ "subRange must be fully contained by containerRange! Otherwise this function does not make sense"
135757
+ );
135688
135758
  }
135689
135759
  const newSubrange = {};
135690
135760
  newSubrange.start = subRange.start - containerRange.start;
@@ -135711,12 +135781,24 @@
135711
135781
  }
135712
135782
 
135713
135783
  function getZeroedRangeOverlaps(annotation, selection, sequenceLength) {
135714
- const overlaps = collapseOverlapsGeneratedFromRangeComparisonIfPossible(getOverlapsOfPotentiallyCircularRanges(annotation, selection, sequenceLength), sequenceLength, annotation);
135784
+ const overlaps = collapseOverlapsGeneratedFromRangeComparisonIfPossible(
135785
+ getOverlapsOfPotentiallyCircularRanges(
135786
+ annotation,
135787
+ selection,
135788
+ sequenceLength
135789
+ ),
135790
+ sequenceLength,
135791
+ annotation
135792
+ );
135715
135793
  const zeroedOverlaps = overlaps.map((overlap) => {
135716
- return zeroSubrangeByContainerRange(overlap, {
135717
- start: selection.start,
135718
- end: normalizePositionByRangeLength(selection.start - 1, sequenceLength)
135719
- }, sequenceLength);
135794
+ return zeroSubrangeByContainerRange(
135795
+ overlap,
135796
+ {
135797
+ start: selection.start,
135798
+ end: normalizePositionByRangeLength(selection.start - 1, sequenceLength)
135799
+ },
135800
+ sequenceLength
135801
+ );
135720
135802
  });
135721
135803
  return zeroedOverlaps;
135722
135804
  }
@@ -142422,7 +142504,7 @@
142422
142504
  calculateTemperature: function(sequence, type, A, R, C, Na) {
142423
142505
  if (typeof type === "undefined") {
142424
142506
  type = this.TABLE_BRESLAUER;
142425
- } else if (type != this.TABLE_BRESLAUER && (type != this.TABLE_UNIFIED && type != this.TABLE_SUGIMOTO)) {
142507
+ } else if (type != this.TABLE_BRESLAUER && type != this.TABLE_UNIFIED && type != this.TABLE_SUGIMOTO) {
142426
142508
  throw new Error("Invalid table type!");
142427
142509
  }
142428
142510
  if (!A) {
@@ -150681,12 +150763,7 @@
150681
150763
  return matches;
150682
150764
  }
150683
150765
  function findSequenceMatchesTopStrand(sequence, searchString, options = {}) {
150684
- const {
150685
- isCircular,
150686
- isAmbiguous,
150687
- isProteinSequence,
150688
- isProteinSearch
150689
- } = options;
150766
+ const { isCircular, isAmbiguous, isProteinSequence, isProteinSearch } = options;
150690
150767
  let searchStringToUse = escapeStringRegexp(searchString);
150691
150768
  if (isAmbiguous) {
150692
150769
  if (isProteinSearch || isProteinSequence) {
@@ -150768,7 +150845,10 @@
150768
150845
 
150769
150846
  function getComplementSequenceString(sequence, isRna) {
150770
150847
  let complementSeqString = "";
150771
- const complementMap = lodashExports.merge(DNAComplementMap, isRna ? { a: "u", A: "U" } : { a: "t", A: "T" });
150848
+ const complementMap = lodashExports.merge(
150849
+ DNAComplementMap,
150850
+ isRna ? { a: "u", A: "U" } : { a: "t", A: "T" }
150851
+ );
150772
150852
  for (let i = 0; i < sequence.length; i++) {
150773
150853
  let complementChar = complementMap[sequence[i]];
150774
150854
  if (!complementChar) {
@@ -163439,10 +163519,7 @@
163439
163519
  });
163440
163520
  }
163441
163521
  });
163442
- const toRet = lodashExports.filter(
163443
- resultArray,
163444
- (r) => r?.parsedSequence?.sequence?.length
163445
- );
163522
+ const toRet = lodashExports.filter(resultArray, (r) => r?.parsedSequence?.sequence?.length);
163446
163523
  if (toRet.length)
163447
163524
  return toRet;
163448
163525
  return onFileParsed(resultArray);
@@ -163544,10 +163621,7 @@
163544
163621
  messages: ["Error while parsing JBEI format"]
163545
163622
  });
163546
163623
  }
163547
- const toRet = lodashExports.filter(
163548
- resultArray,
163549
- (r) => r?.parsedSequence?.sequence?.length
163550
- );
163624
+ const toRet = lodashExports.filter(resultArray, (r) => r?.parsedSequence?.sequence?.length);
163551
163625
  if (toRet.length)
163552
163626
  return toRet;
163553
163627
  return onFileParsed(resultArray);
@@ -166822,10 +166896,7 @@
166822
166896
  lastSavedIdUpdate
166823
166897
  }, Symbol.toStringTag, { value: 'Module' }));
166824
166898
 
166825
- const toggleReadOnlyMode = createMetaAction(
166826
- "TOGGLE_READ_ONLY_MODE",
166827
- lodashExports.noop
166828
- );
166899
+ const toggleReadOnlyMode = createMetaAction("TOGGLE_READ_ONLY_MODE", lodashExports.noop);
166829
166900
  const updateReadOnlyMode = createMetaAction("UPDATE_READ_ONLY_MODE");
166830
166901
  const readOnly = createReducer(
166831
166902
  {
@@ -169804,6 +169875,9 @@
169804
169875
  overrideName: `AddOrEdit${nameUpper}DialogOverride`,
169805
169876
  dialogType,
169806
169877
  props: {
169878
+ ...annotation.isEditLocked && {
169879
+ readOnly: typeof annotation.isEditLocked === "string" ? annotation.isEditLocked : "This annotation is locked"
169880
+ },
169807
169881
  dialogProps: {
169808
169882
  title: annotation && annotation.id ? `Edit ${nameUpper}` : `New ${nameUpper}`
169809
169883
  },
@@ -170445,7 +170519,8 @@
170445
170519
  editorName,
170446
170520
  sequenceData: sequenceDataFromProps,
170447
170521
  allowSeqDataOverride,
170448
- allowMultipleFeatureDirections
170522
+ allowMultipleFeatureDirections,
170523
+ readOnly
170449
170524
  } = ownProps;
170450
170525
  const editorState = getEditorState(state, editorName);
170451
170526
  const meta = { editorName };
@@ -170505,6 +170580,7 @@
170505
170580
  const f = getFindTool(findTool, matchesTotal);
170506
170581
  return {
170507
170582
  ...editorState,
170583
+ readOnly: readOnly || editorState.readOnly,
170508
170584
  meta,
170509
170585
  annotationToAdd,
170510
170586
  ...newSelection && { selectionLayer: newSelection },
@@ -188651,7 +188727,7 @@ double click --> edit`}`;
188651
188727
  }
188652
188728
 
188653
188729
  const name = "@teselagen/ove";
188654
- const version = "0.3.10";
188730
+ const version = "0.3.11";
188655
188731
  const main = "./src/index.js";
188656
188732
  const exports$1 = {
188657
188733
  ".": {
@@ -189261,7 +189337,7 @@ double click --> edit`}`;
189261
189337
  isHidden: isProtein
189262
189338
  },
189263
189339
  deleteSequence: {
189264
- isDisabled: (props) => props.readOnly && readOnlyDisabledTooltip || !props.onDelete,
189340
+ isDisabled: (props) => props.disableBpEditing && bpEditingDisabledTooltip || props.readOnly && readOnlyDisabledTooltip || !props.onDelete,
189265
189341
  isHidden: (props) => !props.onDelete,
189266
189342
  handler: (props) => props.onDelete(props.sequenceData)
189267
189343
  },
@@ -189460,6 +189536,7 @@ double click --> edit`}`;
189460
189536
  };
189461
189537
  });
189462
189538
  const readOnlyDisabledTooltip = "Sorry this function is not allowed in Read-Only Mode";
189539
+ const bpEditingDisabledTooltip = "Sequence Editing Disabled";
189463
189540
  const noSelection = ({ selectionLayer = {} }) => !(selectionLayer.start > -1 && selectionLayer.end > -1) && "Selection Required";
189464
189541
  const triggerClipboardCommand = (type) => {
189465
189542
  const wrapper = document.querySelector(".veVectorInteractionWrapper");
@@ -189491,8 +189568,8 @@ double click --> edit`}`;
189491
189568
  handler: lodashExports.noop
189492
189569
  },
189493
189570
  cut: {
189494
- isDisabled: (props) => props.readOnly && readOnlyDisabledTooltip || props.sequenceLength === 0,
189495
- isHidden: (props) => props.readOnly,
189571
+ isDisabled: (props) => props.disableBpEditing && bpEditingDisabledTooltip || props.readOnly && readOnlyDisabledTooltip || props.sequenceLength === 0,
189572
+ isHidden: (props) => props.readOnly || props.disableBpEditing,
189496
189573
  handler: () => {
189497
189574
  triggerClipboardCommand("cut");
189498
189575
  },
@@ -189517,7 +189594,7 @@ double click --> edit`}`;
189517
189594
  },
189518
189595
  paste: {
189519
189596
  isDisabled: (props) => props.readOnly && readOnlyDisabledTooltip,
189520
- isHidden: (props) => props.readOnly,
189597
+ isHidden: (props) => props.readOnly || props.disableBpEditing,
189521
189598
  handler: () => triggerClipboardCommand("paste"),
189522
189599
  hotkey: "mod+v"
189523
189600
  },
@@ -189671,12 +189748,12 @@ double click --> edit`}`;
189671
189748
  hotkey: "mod+i"
189672
189749
  },
189673
189750
  complementSelection: {
189674
- isHidden: (props) => props.readOnly || isProtein(props),
189751
+ isHidden: (props) => props.readOnly || isProtein(props) || props.disableBpEditing,
189675
189752
  isDisabled: (props) => props.readOnly && readOnlyDisabledTooltip || noSelection(props),
189676
189753
  handler: (props) => props.handleComplementSelection()
189677
189754
  },
189678
189755
  complementEntireSequence: {
189679
- isHidden: (props) => props.readOnly || isProtein(props),
189756
+ isHidden: (props) => props.readOnly || isProtein(props) || props.disableBpEditing,
189680
189757
  isDisabled: (props) => props.readOnly && readOnlyDisabledTooltip || props.sequenceLength === 0,
189681
189758
  handler: (props) => props.handleComplementSequence()
189682
189759
  },
@@ -189828,13 +189905,13 @@ double click --> edit`}`;
189828
189905
  // }
189829
189906
  // },
189830
189907
  reverseComplementSelection: {
189831
- isDisabled: (props) => props.readOnly && readOnlyDisabledTooltip || noSelection(props),
189908
+ isDisabled: (props) => props.readOnly && readOnlyDisabledTooltip || noSelection(props) || props.disableBpEditing,
189832
189909
  isHidden: (props) => props.readOnly || isProtein(props),
189833
189910
  handler: (props) => props.handleReverseComplementSelection(),
189834
189911
  hotkey: "mod+e"
189835
189912
  },
189836
189913
  reverseComplementEntireSequence: {
189837
- isHidden: (props) => props.readOnly || isProtein(props),
189914
+ isHidden: (props) => props.readOnly || isProtein(props) || props.disableBpEditing,
189838
189915
  isDisabled: (props) => props.readOnly && readOnlyDisabledTooltip || props.sequenceLength === 0,
189839
189916
  handler: (props) => props.handleReverseComplementSequence()
189840
189917
  },
@@ -189984,7 +190061,7 @@ double click --> edit`}`;
189984
190061
  isDisabled: (props) => props.readOnly && readOnlyDisabledTooltip || props.sequenceLength === 0
189985
190062
  },
189986
190063
  rotateToCaretPosition: {
189987
- isHidden: (props) => props.readOnly || isProtein(props),
190064
+ isHidden: (props) => props.readOnly || isProtein(props) || props.disableBpEditing,
189988
190065
  isDisabled: (props) => props.readOnly && readOnlyDisabledTooltip || props.caretPosition === -1 && "You must first place cursor" || !props.sequenceData.circular && "Disabled for Linear Sequences" || props.sequenceLength === 0,
189989
190066
  handler: (props) => props.handleRotateToCaretPosition(),
189990
190067
  hotkey: "mod+b"
@@ -189993,13 +190070,13 @@ double click --> edit`}`;
189993
190070
  };
189994
190071
  const cirularityCommandDefs = {
189995
190072
  circular: {
189996
- isHidden: (props) => props.readOnly || isProtein(props),
190073
+ isHidden: (props) => props.readOnly || isProtein(props) || props.disableBpEditing,
189997
190074
  isDisabled: (props) => props.readOnly && readOnlyDisabledTooltip,
189998
190075
  handler: (props) => props.updateCircular(true),
189999
190076
  isActive: (props) => props && props.sequenceData.circular
190000
190077
  },
190001
190078
  linear: {
190002
- isHidden: (props) => props.readOnly,
190079
+ isHidden: (props) => props.readOnly || props.disableBpEditing,
190003
190080
  isDisabled: (props) => props.readOnly && readOnlyDisabledTooltip,
190004
190081
  handler: (props) => props.updateCircular(false),
190005
190082
  isActive: (props) => props && !props.sequenceData.circular
@@ -190026,29 +190103,27 @@ double click --> edit`}`;
190026
190103
  }
190027
190104
  ];
190028
190105
  const labelToggleCommandDefs = {};
190029
- ["feature", "part", "cutsite", "primer", ...nicheAnnotations].forEach(
190030
- (_type) => {
190031
- let rest = {};
190032
- let type = _type;
190033
- if (_type.type) {
190034
- type = _type.type.slice(0, -1);
190035
- rest = _type;
190036
- }
190037
- const cmdId = `toggle${lodashExports.upperFirst(type)}Labels`;
190038
- const plural = type + "s";
190039
- labelToggleCommandDefs[cmdId] = {
190040
- toggle: ["show", "hide"],
190041
- handler: (props) => props.annotationLabelVisibilityToggle(plural),
190042
- isHidden: (props) => {
190043
- return props && props.typesToOmit && props.typesToOmit[plural] === false;
190044
- },
190045
- ...rest,
190046
- isActive: (props) => {
190047
- return props && props.annotationLabelVisibility[plural];
190048
- }
190049
- };
190050
- }
190051
- );
190106
+ ["feature", "part", "cutsite", "primer", ...nicheAnnotations].forEach((_type) => {
190107
+ let rest = {};
190108
+ let type = _type;
190109
+ if (_type.type) {
190110
+ type = _type.type.slice(0, -1);
190111
+ rest = _type;
190112
+ }
190113
+ const cmdId = `toggle${lodashExports.upperFirst(type)}Labels`;
190114
+ const plural = type + "s";
190115
+ labelToggleCommandDefs[cmdId] = {
190116
+ toggle: ["show", "hide"],
190117
+ handler: (props) => props.annotationLabelVisibilityToggle(plural),
190118
+ isHidden: (props) => {
190119
+ return props && props.typesToOmit && props.typesToOmit[plural] === false;
190120
+ },
190121
+ ...rest,
190122
+ isActive: (props) => {
190123
+ return props && props.annotationLabelVisibility[plural];
190124
+ }
190125
+ };
190126
+ });
190052
190127
  const editAnnotationCommandDefs = ["feature", "part", "primer"].reduce(
190053
190128
  (acc, key) => {
190054
190129
  acc[`edit${lodashExports.upperFirst(key)}`] = {
@@ -191621,8 +191696,12 @@ double click --> edit`}`;
191621
191696
  caretPosition = -1,
191622
191697
  selectionLayer = { start: -1, end: -1 },
191623
191698
  readOnly,
191624
- onPaste
191699
+ onPaste,
191700
+ disableBpEditing
191625
191701
  } = this.props;
191702
+ if (disableBpEditing) {
191703
+ return window.toastr.warning("Sorry the underlying sequence is locked");
191704
+ }
191626
191705
  if (readOnly) {
191627
191706
  return window.toastr.warning("Sorry the sequence is Read-Only");
191628
191707
  }
@@ -191663,6 +191742,7 @@ double click --> edit`}`;
191663
191742
  sequenceData,
191664
191743
  selectionLayer,
191665
191744
  copyOptions,
191745
+ disableBpEditing,
191666
191746
  readOnly
191667
191747
  } = this.props;
191668
191748
  const onCut = this.props.onCut || this.props.onCopy || lodashExports.noop;
@@ -191688,7 +191768,7 @@ double click --> edit`}`;
191688
191768
  );
191689
191769
  if (!(this.sequenceDataToCopy || {}).textToCopy && !seqData.sequence.length)
191690
191770
  return window.toastr.warning(
191691
- `No Sequence Selected To ${isCut && !readOnly ? "Cut" : "Copy"}`
191771
+ `No Sequence Selected To ${isCut && !(readOnly || disableBpEditing) ? "Cut" : "Copy"}`
191692
191772
  );
191693
191773
  const clipboardData = e.clipboardData;
191694
191774
  const textToCopy = (this.sequenceDataToCopy || {}).textToCopy !== void 0 ? this.sequenceDataToCopy.textToCopy : seqData.isProtein ? seqData.proteinSequence : seqData.sequence;
@@ -191696,7 +191776,7 @@ double click --> edit`}`;
191696
191776
  clipboardData.setData("text/plain", textToCopy);
191697
191777
  clipboardData.setData("application/json", JSON.stringify(seqData));
191698
191778
  e.preventDefault();
191699
- if (isCut && !readOnly) {
191779
+ if (isCut && !(readOnly || disableBpEditing) && !disableBpEditing) {
191700
191780
  this.handleDnaDelete(false);
191701
191781
  onCut(
191702
191782
  e,
@@ -191709,7 +191789,7 @@ double click --> edit`}`;
191709
191789
  document.body.removeEventListener("copy", this.handleCopy);
191710
191790
  }
191711
191791
  window.toastr.success(
191712
- `Selection ${isCut && !readOnly ? "Cut" : "Copied"}`
191792
+ `Selection ${isCut && !(readOnly || disableBpEditing) && !disableBpEditing ? "Cut" : "Copied"}`
191713
191793
  );
191714
191794
  this.sequenceDataToCopy = void 0;
191715
191795
  };
@@ -191720,14 +191800,18 @@ double click --> edit`}`;
191720
191800
  caretPosition = -1,
191721
191801
  selectionLayer = { start: -1, end: -1 },
191722
191802
  sequenceData = { sequence: "" },
191723
- readOnly
191803
+ readOnly,
191804
+ disableBpEditing
191724
191805
  // updateSequenceData,
191725
191806
  // wrappedInsertSequenceDataAtPositionOrRange
191726
191807
  // handleInsert
191727
191808
  } = this.props;
191728
191809
  const sequenceLength = sequenceData.sequence.length;
191729
191810
  const isReplace = selectionLayer.start > -1;
191730
- if (readOnly) {
191811
+ if (disableBpEditing) {
191812
+ return window.toastr.warning("Sorry the underlying sequence is locked");
191813
+ }
191814
+ if (readOnly || disableBpEditing) {
191731
191815
  window.toastr.warning("Sorry the sequence is Read-Only");
191732
191816
  } else {
191733
191817
  createSequenceInputPopup({
@@ -191755,13 +191839,17 @@ double click --> edit`}`;
191755
191839
  selectionLayer = { start: -1, end: -1 },
191756
191840
  sequenceData = { sequence: "" },
191757
191841
  readOnly,
191842
+ disableBpEditing,
191758
191843
  updateSequenceData,
191759
191844
  wrappedInsertSequenceDataAtPositionOrRange,
191760
191845
  caretPositionUpdate
191761
191846
  // handleInsert
191762
191847
  } = this.props;
191763
191848
  const sequenceLength = sequenceData.sequence.length;
191764
- if (readOnly) {
191849
+ if (disableBpEditing) {
191850
+ return window.toastr.warning("Sorry the underlying sequence is locked");
191851
+ }
191852
+ if (readOnly || disableBpEditing) {
191765
191853
  return window.toastr.warning("Sorry the sequence is Read-Only");
191766
191854
  }
191767
191855
  if (sequenceLength > 0) {
@@ -191892,7 +191980,7 @@ double click --> edit`}`;
191892
191980
  };
191893
191981
  // eslint-disable-next-line no-unused-vars
191894
191982
  getCopyOptions = (annotation) => {
191895
- const { sequenceData, readOnly, selectionLayer } = this.props;
191983
+ const { sequenceData, readOnly, disableBpEditing, selectionLayer } = this.props;
191896
191984
  const { isProtein } = sequenceData;
191897
191985
  const makeTextCopyable = (transformFunc, className, action = "copy") => {
191898
191986
  return new Clipboard$1(`.${className}`, {
@@ -191952,7 +192040,7 @@ double click --> edit`}`;
191952
192040
  }
191953
192041
  };
191954
192042
  return [
191955
- ...readOnly ? [] : [
192043
+ ...readOnly || disableBpEditing ? [] : [
191956
192044
  {
191957
192045
  text: "Replace",
191958
192046
  ...this.insertHelper
@@ -192026,21 +192114,14 @@ double click --> edit`}`;
192026
192114
  this.openVeCopyAAReverse && this.openVeCopyAAReverse.destroy();
192027
192115
  },
192028
192116
  didMount: ({ className }) => {
192029
- this.openVeCopyAAReverse = makeTextCopyable(
192030
- (selectedSeqData) => {
192031
- const revSeqData = getReverseComplementSequenceAndAnnoations(
192032
- selectedSeqData
192033
- );
192034
- const textToCopy = isProtein ? revSeqData.proteinSequence.toUpperCase() : getAminoAcidStringFromSequenceString(
192035
- revSeqData.sequence
192036
- );
192037
- return {
192038
- ...revSeqData,
192039
- textToCopy
192040
- };
192041
- },
192042
- className
192043
- );
192117
+ this.openVeCopyAAReverse = makeTextCopyable((selectedSeqData) => {
192118
+ const revSeqData = getReverseComplementSequenceAndAnnoations(selectedSeqData);
192119
+ const textToCopy = isProtein ? revSeqData.proteinSequence.toUpperCase() : getAminoAcidStringFromSequenceString(revSeqData.sequence);
192120
+ return {
192121
+ ...revSeqData,
192122
+ textToCopy
192123
+ };
192124
+ }, className);
192044
192125
  }
192045
192126
  },
192046
192127
  {
@@ -192147,11 +192228,12 @@ double click --> edit`}`;
192147
192228
  ({ nearestCaretPos, shiftHeld, event }) => {
192148
192229
  this.updateSelectionOrCaret(shiftHeld, nearestCaretPos);
192149
192230
  const {
192150
- readOnly
192231
+ readOnly,
192232
+ disableBpEditing
192151
192233
  // sequenceData: { circular }
192152
192234
  } = this.props;
192153
192235
  const menu = [
192154
- ...readOnly ? [] : [
192236
+ ...readOnly || disableBpEditing ? [] : [
192155
192237
  {
192156
192238
  text: "Insert",
192157
192239
  ...this.insertHelper
@@ -192197,8 +192279,7 @@ double click --> edit`}`;
192197
192279
  overlapsSelf: annotation.overlapsSelf
192198
192280
  });
192199
192281
  return [
192200
- "editPart",
192201
- "deletePart",
192282
+ ...getEditDeleteHandlers("Part", annotation),
192202
192283
  "--",
192203
192284
  ...this.getSelectionMenuOptions(annotation),
192204
192285
  "--",
@@ -192240,8 +192321,7 @@ double click --> edit`}`;
192240
192321
  event.persist();
192241
192322
  const { readOnly, annotationsToSupport: { parts } = {} } = this.props;
192242
192323
  return [
192243
- "editFeature",
192244
- "deleteFeature",
192324
+ ...getEditDeleteHandlers("Feature", annotation),
192245
192325
  ...this.getSelectionMenuOptions(annotation),
192246
192326
  ...readOnly ? [] : [
192247
192327
  ...parts && [
@@ -192308,8 +192388,7 @@ double click --> edit`}`;
192308
192388
  end: annotation.end
192309
192389
  });
192310
192390
  return [
192311
- "editPrimer",
192312
- "deletePrimer",
192391
+ ...getEditDeleteHandlers("Primer", annotation),
192313
192392
  ...this.getSelectionMenuOptions(annotation),
192314
192393
  "showRemoveDuplicatesDialogPrimers",
192315
192394
  "viewPrimerProperties"
@@ -192519,6 +192598,28 @@ double click --> edit`}`;
192519
192598
  end: newSelectionLayerEnd % newSeqData.sequence.length
192520
192599
  });
192521
192600
  };
192601
+ function getEditDeleteHandlers(type, annotation) {
192602
+ return [
192603
+ ...annotation.isEditLocked ? [
192604
+ {
192605
+ shouldDismissPopover: false,
192606
+ text: /* @__PURE__ */ React$3.createElement(
192607
+ "div",
192608
+ {
192609
+ style: {
192610
+ fontSize: 11,
192611
+ fontStyle: "italic",
192612
+ color: "rgba(0,0,0,.5)"
192613
+ }
192614
+ },
192615
+ typeof annotation.isEditLocked === "string" ? annotation.isEditLocked : `Note: This Annotation is Locked`
192616
+ )
192617
+ }
192618
+ ] : [],
192619
+ `edit${type}`,
192620
+ ...annotation.isEditLocked ? [] : [`delete${type}`]
192621
+ ];
192622
+ }
192522
192623
 
192523
192624
  const style$i = '';
192524
192625
 
@@ -199676,7 +199777,11 @@ double click --> edit`}`;
199676
199777
  }
199677
199778
  }
199678
199779
  ],
199679
- withDialogProps: { title: "Go To", height: 190, onCloseHook: tryToRefocusEditor }
199780
+ withDialogProps: {
199781
+ title: "Go To",
199782
+ height: 190,
199783
+ onCloseHook: tryToRefocusEditor
199784
+ }
199680
199785
  });
199681
199786
 
199682
199787
  const validate$1 = (val, vals, props) => {
@@ -202336,6 +202441,7 @@ double click --> edit`}`;
202336
202441
  overlapsSelf,
202337
202442
  start,
202338
202443
  end,
202444
+ readOnly,
202339
202445
  getAdditionalEditAnnotationComps,
202340
202446
  advancedOptions,
202341
202447
  advancedDefaultOpen,
@@ -202430,10 +202536,11 @@ double click --> edit`}`;
202430
202536
  "tg-upsert-annotation"
202431
202537
  )
202432
202538
  },
202539
+ typeof readOnly === "string" ? /* @__PURE__ */ React$3.createElement(Callout, { intent: "primary", style: { marginBottom: 10 } }, readOnly) : null,
202433
202540
  /* @__PURE__ */ React$3.createElement(
202434
202541
  InputField,
202435
202542
  {
202436
- disabled: this.props.readOnly,
202543
+ disabled: readOnly,
202437
202544
  inlineLabel: true,
202438
202545
  tooltipError: true,
202439
202546
  autoFocus: true,
@@ -205371,15 +205478,15 @@ ${seqDataToCopy}\r
205371
205478
  }
205372
205479
  // Edge 20+
205373
205480
  static isEdge() {
205374
- return Browser.isBrowser() && (!Browser.isIE() && !!window.StyleMedia);
205481
+ return Browser.isBrowser() && !Browser.isIE() && !!window.StyleMedia;
205375
205482
  }
205376
205483
  // Chrome 1+
205377
205484
  static isChrome() {
205378
- return Browser.isBrowser() && (!!window.chrome && !!window.chrome.webstore);
205485
+ return Browser.isBrowser() && !!window.chrome && !!window.chrome.webstore;
205379
205486
  }
205380
205487
  // Blink engine detection
205381
205488
  static isBlink() {
205382
- return Browser.isBrowser() && ((Browser.isChrome() || Browser.isOpera()) && !!window.CSS);
205489
+ return Browser.isBrowser() && (Browser.isChrome() || Browser.isOpera()) && !!window.CSS;
205383
205490
  }
205384
205491
  static getUserAgent() {
205385
205492
  return typeof navigator === "undefined" ? "" : navigator.userAgent;
@@ -207045,6 +207152,8 @@ ${seqDataToCopy}\r
207045
207152
  "hideSingleImport",
207046
207153
  "beforeAnnotationCreate",
207047
207154
  "disableSetReadOnly",
207155
+ "allowAnnotationEditLocking",
207156
+ "disableBpEditing",
207048
207157
  "showReadOnly",
207049
207158
  "showCircularity",
207050
207159
  "onHiddenEnzymeAdd",
@@ -208458,9 +208567,7 @@ ${seqDataToCopy}\r
208458
208567
  AnchorButton,
208459
208568
  {
208460
208569
  onClick: () => {
208461
- deleteAnnotation(
208462
- annotationPropertiesSelectedEntities
208463
- );
208570
+ deleteAnnotation(annotationPropertiesSelectedEntities);
208464
208571
  },
208465
208572
  className: "tgDeleteAnnsBtn",
208466
208573
  intent: "danger",