@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.mjs CHANGED
@@ -7404,7 +7404,7 @@ function getPlainObjectKeys(object) {
7404
7404
  var ownKeys$8 = typeof Reflect !== "undefined" && Reflect.ownKeys ? Reflect.ownKeys : hasGetOwnPropertySymbols ? function (obj) {
7405
7405
  return Object.getOwnPropertyNames(obj).concat(Object.getOwnPropertySymbols(obj));
7406
7406
  } : /* istanbul ignore next */Object.getOwnPropertyNames;
7407
- function toPrimitive$3(value) {
7407
+ function toPrimitive$2(value) {
7408
7408
  return value === null ? null : typeof value === "object" ? "" + value : value;
7409
7409
  }
7410
7410
  function hasProp(target, prop) {
@@ -8333,7 +8333,7 @@ var ObservableValue = /*#__PURE__*/function (_Atom) {
8333
8333
  return this.name_ + "[" + this.value_ + "]";
8334
8334
  };
8335
8335
  _proto.valueOf = function valueOf() {
8336
- return toPrimitive$3(this.get());
8336
+ return toPrimitive$2(this.get());
8337
8337
  };
8338
8338
  _proto[_Symbol$toPrimitive] = function () {
8339
8339
  return this.valueOf();
@@ -8561,7 +8561,7 @@ var ComputedValue = /*#__PURE__*/function () {
8561
8561
  return this.name_ + "[" + this.derivation.toString() + "]";
8562
8562
  };
8563
8563
  _proto.valueOf = function valueOf() {
8564
- return toPrimitive$3(this.get());
8564
+ return toPrimitive$2(this.get());
8565
8565
  };
8566
8566
  _proto[_Symbol$toPrimitive$1] = function () {
8567
8567
  return this.valueOf();
@@ -30258,10 +30258,18 @@ var _fails = function (exec) {
30258
30258
  }
30259
30259
  };
30260
30260
 
30261
- // Thank's IE8 for his funny defineProperty
30262
- var _descriptors = !_fails(function () {
30263
- return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;
30264
- });
30261
+ var _descriptors;
30262
+ var hasRequired_descriptors;
30263
+
30264
+ function require_descriptors () {
30265
+ if (hasRequired_descriptors) return _descriptors;
30266
+ hasRequired_descriptors = 1;
30267
+ // Thank's IE8 for his funny defineProperty
30268
+ _descriptors = !_fails(function () {
30269
+ return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;
30270
+ });
30271
+ return _descriptors;
30272
+ }
30265
30273
 
30266
30274
  var _domCreate;
30267
30275
  var hasRequired_domCreate;
@@ -30279,9 +30287,17 @@ function require_domCreate () {
30279
30287
  return _domCreate;
30280
30288
  }
30281
30289
 
30282
- var _ie8DomDefine = !_descriptors && !_fails(function () {
30283
- return Object.defineProperty(require_domCreate()('div'), 'a', { get: function () { return 7; } }).a != 7;
30284
- });
30290
+ var _ie8DomDefine;
30291
+ var hasRequired_ie8DomDefine;
30292
+
30293
+ function require_ie8DomDefine () {
30294
+ if (hasRequired_ie8DomDefine) return _ie8DomDefine;
30295
+ hasRequired_ie8DomDefine = 1;
30296
+ _ie8DomDefine = !require_descriptors() && !_fails(function () {
30297
+ return Object.defineProperty(require_domCreate()('div'), 'a', { get: function () { return 7; } }).a != 7;
30298
+ });
30299
+ return _ie8DomDefine;
30300
+ }
30285
30301
 
30286
30302
  // 7.1.1 ToPrimitive(input [, PreferredType])
30287
30303
  var isObject$d = _isObject;
@@ -30296,22 +30312,29 @@ var _toPrimitive$1 = function (it, S) {
30296
30312
  throw TypeError("Can't convert object to primitive value");
30297
30313
  };
30298
30314
 
30299
- var anObject$5 = _anObject;
30300
- var IE8_DOM_DEFINE$1 = _ie8DomDefine;
30301
- var toPrimitive$2 = _toPrimitive$1;
30302
- var dP$3 = Object.defineProperty;
30315
+ var hasRequired_objectDp;
30303
30316
 
30304
- _objectDp.f = _descriptors ? Object.defineProperty : function defineProperty(O, P, Attributes) {
30305
- anObject$5(O);
30306
- P = toPrimitive$2(P, true);
30307
- anObject$5(Attributes);
30308
- if (IE8_DOM_DEFINE$1) try {
30309
- return dP$3(O, P, Attributes);
30310
- } catch (e) { /* empty */ }
30311
- if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');
30312
- if ('value' in Attributes) O[P] = Attributes.value;
30313
- return O;
30314
- };
30317
+ function require_objectDp () {
30318
+ if (hasRequired_objectDp) return _objectDp;
30319
+ hasRequired_objectDp = 1;
30320
+ var anObject = _anObject;
30321
+ var IE8_DOM_DEFINE = require_ie8DomDefine();
30322
+ var toPrimitive = _toPrimitive$1;
30323
+ var dP = Object.defineProperty;
30324
+
30325
+ _objectDp.f = require_descriptors() ? Object.defineProperty : function defineProperty(O, P, Attributes) {
30326
+ anObject(O);
30327
+ P = toPrimitive(P, true);
30328
+ anObject(Attributes);
30329
+ if (IE8_DOM_DEFINE) try {
30330
+ return dP(O, P, Attributes);
30331
+ } catch (e) { /* empty */ }
30332
+ if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');
30333
+ if ('value' in Attributes) O[P] = Attributes.value;
30334
+ return O;
30335
+ };
30336
+ return _objectDp;
30337
+ }
30315
30338
 
30316
30339
  var _propertyDesc = function (bitmap, value) {
30317
30340
  return {
@@ -30322,9 +30345,9 @@ var _propertyDesc = function (bitmap, value) {
30322
30345
  };
30323
30346
  };
30324
30347
 
30325
- var dP$2 = _objectDp;
30348
+ var dP$2 = require_objectDp();
30326
30349
  var createDesc$3 = _propertyDesc;
30327
- var _hide = _descriptors ? function (object, key, value) {
30350
+ var _hide = require_descriptors() ? function (object, key, value) {
30328
30351
  return dP$2.f(object, key, createDesc$3(1, value));
30329
30352
  } : function (object, key, value) {
30330
30353
  object[key] = value;
@@ -30569,7 +30592,7 @@ function require_objectAssign () {
30569
30592
  if (hasRequired_objectAssign) return _objectAssign;
30570
30593
  hasRequired_objectAssign = 1;
30571
30594
  // 19.1.2.1 Object.assign(target, source, ...)
30572
- var DESCRIPTORS = _descriptors;
30595
+ var DESCRIPTORS = require_descriptors();
30573
30596
  var getKeys = _objectKeys;
30574
30597
  var gOPS = _objectGops;
30575
30598
  var pIE = require_objectPie();
@@ -30645,11 +30668,11 @@ var _iterators = {};
30645
30668
 
30646
30669
  var _redefine = _hide;
30647
30670
 
30648
- var dP$1 = _objectDp;
30671
+ var dP$1 = require_objectDp();
30649
30672
  var anObject$4 = _anObject;
30650
30673
  var getKeys$1 = _objectKeys;
30651
30674
 
30652
- var _objectDps = _descriptors ? Object.defineProperties : function defineProperties(O, Properties) {
30675
+ var _objectDps = require_descriptors() ? Object.defineProperties : function defineProperties(O, Properties) {
30653
30676
  anObject$4(O);
30654
30677
  var keys = getKeys$1(Properties);
30655
30678
  var length = keys.length;
@@ -30728,7 +30751,7 @@ $exports.store = store$2;
30728
30751
 
30729
30752
  var _wksExports = _wks.exports;
30730
30753
 
30731
- var def = _objectDp.f;
30754
+ var def = require_objectDp().f;
30732
30755
  var has$c = _has;
30733
30756
  var TAG$1 = _wksExports('toStringTag');
30734
30757
 
@@ -31042,7 +31065,7 @@ var _isArrayIter = function (it) {
31042
31065
  return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);
31043
31066
  };
31044
31067
 
31045
- var $defineProperty$2 = _objectDp;
31068
+ var $defineProperty$2 = require_objectDp();
31046
31069
  var createDesc$2 = _propertyDesc;
31047
31070
 
31048
31071
  var _createProperty = function (object, index, value) {
@@ -31175,7 +31198,7 @@ var _default$9 = function (instance, Constructor) {
31175
31198
 
31176
31199
  var $export$3 = _export;
31177
31200
  // 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)
31178
- $export$3($export$3.S + $export$3.F * !_descriptors, 'Object', { defineProperty: _objectDp.f });
31201
+ $export$3($export$3.S + $export$3.F * !require_descriptors(), 'Object', { defineProperty: require_objectDp().f });
31179
31202
 
31180
31203
  var $Object$2 = _coreExports.Object;
31181
31204
  var defineProperty$c = function defineProperty(it, key, desc) {
@@ -31223,7 +31246,7 @@ var _meta = {exports: {}};
31223
31246
  var META$1 = _uid('meta');
31224
31247
  var isObject$c = _isObject;
31225
31248
  var has$a = _has;
31226
- var setDesc = _objectDp.f;
31249
+ var setDesc = require_objectDp().f;
31227
31250
  var id$1 = 0;
31228
31251
  var isExtensible = Object.isExtensible || function () {
31229
31252
  return true;
@@ -31278,7 +31301,7 @@ var _metaExports = _meta.exports;
31278
31301
 
31279
31302
  var core = _coreExports;
31280
31303
  var wksExt$1 = _wksExt;
31281
- var defineProperty$a = _objectDp.f;
31304
+ var defineProperty$a = require_objectDp().f;
31282
31305
  var _wksDefine = function (name) {
31283
31306
  var $Symbol = core.Symbol || (core.Symbol = {} );
31284
31307
  if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty$a($Symbol, name, { value: wksExt$1.f(name) });
@@ -31345,10 +31368,10 @@ var createDesc$1 = _propertyDesc;
31345
31368
  var toIObject$1 = _toIobject;
31346
31369
  var toPrimitive$1 = _toPrimitive$1;
31347
31370
  var has$9 = _has;
31348
- var IE8_DOM_DEFINE = _ie8DomDefine;
31371
+ var IE8_DOM_DEFINE = require_ie8DomDefine();
31349
31372
  var gOPD$5 = Object.getOwnPropertyDescriptor;
31350
31373
 
31351
- _objectGopd.f = _descriptors ? gOPD$5 : function getOwnPropertyDescriptor(O, P) {
31374
+ _objectGopd.f = require_descriptors() ? gOPD$5 : function getOwnPropertyDescriptor(O, P) {
31352
31375
  O = toIObject$1(O);
31353
31376
  P = toPrimitive$1(P, true);
31354
31377
  if (IE8_DOM_DEFINE) try {
@@ -31360,7 +31383,7 @@ _objectGopd.f = _descriptors ? gOPD$5 : function getOwnPropertyDescriptor(O, P)
31360
31383
  // ECMAScript 6 symbols shim
31361
31384
  var global$2 = _globalExports;
31362
31385
  var has$8 = _has;
31363
- var DESCRIPTORS = _descriptors;
31386
+ var DESCRIPTORS = require_descriptors();
31364
31387
  var $export$2 = _export;
31365
31388
  var redefine = _redefine;
31366
31389
  var META = _metaExports.KEY;
@@ -31383,7 +31406,7 @@ var _create$1 = _objectCreate;
31383
31406
  var gOPNExt = _objectGopnExt;
31384
31407
  var $GOPD = _objectGopd;
31385
31408
  var $GOPS = _objectGops;
31386
- var $DP = _objectDp;
31409
+ var $DP = require_objectDp();
31387
31410
  var $keys$1 = _objectKeys;
31388
31411
  var gOPD$4 = $GOPD.f;
31389
31412
  var dP = $DP.f;
@@ -85352,13 +85375,7 @@ function withTableParams(compOrOpts, pTopLevelOpts) {
85352
85375
  return {};
85353
85376
  }
85354
85377
  const mergedOpts = getMergedOpts(topLevelOptions, ownProps);
85355
- const {
85356
- formName,
85357
- urlConnected,
85358
- history,
85359
- defaults,
85360
- onlyOneFilter
85361
- } = mergedOpts;
85378
+ const { formName, urlConnected, history, defaults, onlyOneFilter } = mergedOpts;
85362
85379
  function updateSearch(val) {
85363
85380
  setTimeout(function() {
85364
85381
  dispatch(change(formName, "reduxFormSearchInput", val || ""));
@@ -85397,12 +85414,7 @@ function withTableParams(compOrOpts, pTopLevelOpts) {
85397
85414
  action(...args, currentParams);
85398
85415
  };
85399
85416
  });
85400
- const {
85401
- variables,
85402
- selectedEntities,
85403
- mergedOpts,
85404
- ...restStateProps
85405
- } = stateProps;
85417
+ const { variables, selectedEntities, mergedOpts, ...restStateProps } = stateProps;
85406
85418
  const changeFormValue = (...args) => dispatchProps.dispatch(change(formName, ...args));
85407
85419
  const tableParams = {
85408
85420
  changeFormValue,
@@ -89298,7 +89310,9 @@ const wrapDialog = (topLevelDialogProps = {}) => (Component) => (props) => {
89298
89310
  return doNotTriggerClick();
89299
89311
  }
89300
89312
  const parentEl = r.current?.closest(".bp3-dialog-container");
89301
- const dialogs = document.querySelectorAll(".bp3-dialog-container");
89313
+ const dialogs = document.querySelectorAll(
89314
+ ".bp3-dialog-container"
89315
+ );
89302
89316
  const numDialogs = dialogs?.length;
89303
89317
  if (numDialogs > 1) {
89304
89318
  const topMostDialog = dialogs[numDialogs - 1];
@@ -89637,6 +89651,7 @@ function MatchHeaders({
89637
89651
  marginBottom: 10,
89638
89652
  marginLeft: 20,
89639
89653
  fontSize: 10
89654
+ /* color: Colors.RED1 */
89640
89655
  }
89641
89656
  },
89642
89657
  userMatchedHeader && [
@@ -91625,10 +91640,7 @@ const UploadCsvWizardDialog = compose(
91625
91640
  if (props.filesWIssues.length > 0) {
91626
91641
  const reduxFormEntitiesArray = [];
91627
91642
  const finishedFiles = props.filesWIssues.map((f, i) => {
91628
- const {
91629
- reduxFormEntities,
91630
- reduxFormCellValidation
91631
- } = formValueSelector(`editableCellTable-${i}`)(
91643
+ const { reduxFormEntities, reduxFormCellValidation } = formValueSelector(`editableCellTable-${i}`)(
91632
91644
  state,
91633
91645
  "reduxFormEntities",
91634
91646
  "reduxFormCellValidation"
@@ -103883,7 +103895,14 @@ const EnhancedMenuItem = compose(
103883
103895
  }
103884
103896
  }),
103885
103897
  branch(({ navTo }) => navTo, withRouter$1)
103886
- )(function({ navTo, context, staticContext, didMount, willUnmount, ...props }) {
103898
+ )(function({
103899
+ navTo,
103900
+ context,
103901
+ staticContext,
103902
+ didMount,
103903
+ willUnmount,
103904
+ ...props
103905
+ }) {
103887
103906
  let MenuItemComp = MenuItem;
103888
103907
  if (navTo) {
103889
103908
  MenuItemComp = MenuItemLink;
@@ -104941,11 +104960,7 @@ function getCommandHotkeyHandlers(commands) {
104941
104960
  return handlers;
104942
104961
  }
104943
104962
 
104944
- const withCommand = (mappings) => (WrappedComponent) => ({
104945
- cmd,
104946
- cmdOptions = {},
104947
- ...props
104948
- }) => {
104963
+ const withCommand = (mappings) => (WrappedComponent) => ({ cmd, cmdOptions = {}, ...props }) => {
104949
104964
  const mappedProps = {};
104950
104965
  Object.keys(mappings).forEach((k) => {
104951
104966
  mappedProps[k] = mappings[k] === "execute" ? (event) => cmd.execute({ event }) : typeof mappings[k] === "function" ? mappings[k](cmd, props) : cmd[mappings[k]];
@@ -106092,9 +106107,9 @@ const frameTranslations = createReducer(
106092
106107
  }
106093
106108
  },
106094
106109
  {
106095
- "1": false,
106096
- "2": false,
106097
- "3": false,
106110
+ 1: false,
106111
+ 2: false,
106112
+ 3: false,
106098
106113
  "-1": false,
106099
106114
  "-2": false,
106100
106115
  "-3": false
@@ -106823,9 +106838,14 @@ function checkIfNonCircularRangesOverlap(range, comparisonRange) {
106823
106838
 
106824
106839
  function checkIfPotentiallyCircularRangesOverlap(range, comparisonRange) {
106825
106840
  return splitRangeIntoTwoPartsIfItIsCircular(range, Infinity).some(function(splitRange) {
106826
- return splitRangeIntoTwoPartsIfItIsCircular(comparisonRange, Infinity).some(function(splitComparisonRange) {
106827
- return checkIfNonCircularRangesOverlap(splitRange, splitComparisonRange);
106828
- });
106841
+ return splitRangeIntoTwoPartsIfItIsCircular(comparisonRange, Infinity).some(
106842
+ function(splitComparisonRange) {
106843
+ return checkIfNonCircularRangesOverlap(
106844
+ splitRange,
106845
+ splitComparisonRange
106846
+ );
106847
+ }
106848
+ );
106829
106849
  });
106830
106850
  }
106831
106851
 
@@ -106835,15 +106855,19 @@ function collapseOverlapsGeneratedFromRangeComparisonIfPossible(overlaps, sequen
106835
106855
  return overlaps;
106836
106856
  } else if (overlaps.length === 2) {
106837
106857
  if (overlaps[0].start === 0 && overlaps[1].end + 1 === sequenceLength && !originalRangeLinear) {
106838
- return [{
106839
- start: overlaps[1].start,
106840
- end: overlaps[0].end
106841
- }];
106858
+ return [
106859
+ {
106860
+ start: overlaps[1].start,
106861
+ end: overlaps[0].end
106862
+ }
106863
+ ];
106842
106864
  } else if (overlaps[1].start === 0 && overlaps[0].end + 1 === sequenceLength && !originalRangeLinear) {
106843
- return [{
106844
- start: overlaps[0].start,
106845
- end: overlaps[1].end
106846
- }];
106865
+ return [
106866
+ {
106867
+ start: overlaps[0].start,
106868
+ end: overlaps[1].end
106869
+ }
106870
+ ];
106847
106871
  } else {
106848
106872
  return overlaps;
106849
106873
  }
@@ -106851,17 +106875,29 @@ function collapseOverlapsGeneratedFromRangeComparisonIfPossible(overlaps, sequen
106851
106875
  const firstOverlap = overlaps[0];
106852
106876
  const secondOverlap = overlaps[1];
106853
106877
  const thirdOverlap = overlaps[2];
106854
- let collapsedOverlaps = collapseOverlapsGeneratedFromRangeComparisonIfPossible([firstOverlap, secondOverlap], sequenceLength, optionalOriginalRange);
106878
+ let collapsedOverlaps = collapseOverlapsGeneratedFromRangeComparisonIfPossible(
106879
+ [firstOverlap, secondOverlap],
106880
+ sequenceLength,
106881
+ optionalOriginalRange
106882
+ );
106855
106883
  if (collapsedOverlaps.length === 1) {
106856
106884
  collapsedOverlaps.push(thirdOverlap);
106857
106885
  return collapsedOverlaps;
106858
106886
  } else {
106859
- collapsedOverlaps = collapseOverlapsGeneratedFromRangeComparisonIfPossible([firstOverlap, thirdOverlap], sequenceLength, optionalOriginalRange);
106887
+ collapsedOverlaps = collapseOverlapsGeneratedFromRangeComparisonIfPossible(
106888
+ [firstOverlap, thirdOverlap],
106889
+ sequenceLength,
106890
+ optionalOriginalRange
106891
+ );
106860
106892
  if (collapsedOverlaps.length === 1) {
106861
106893
  collapsedOverlaps.push(secondOverlap);
106862
106894
  return collapsedOverlaps;
106863
106895
  } else {
106864
- collapsedOverlaps = collapseOverlapsGeneratedFromRangeComparisonIfPossible([secondOverlap, thirdOverlap], sequenceLength, optionalOriginalRange);
106896
+ collapsedOverlaps = collapseOverlapsGeneratedFromRangeComparisonIfPossible(
106897
+ [secondOverlap, thirdOverlap],
106898
+ sequenceLength,
106899
+ optionalOriginalRange
106900
+ );
106865
106901
  if (collapsedOverlaps.length === 1) {
106866
106902
  collapsedOverlaps.push(firstOverlap);
106867
106903
  return collapsedOverlaps;
@@ -106883,11 +106919,18 @@ function convertRangeIndices(range, inputType, outputType) {
106883
106919
  }
106884
106920
 
106885
106921
  function convertRangeTo0Based(range) {
106886
- return convertRangeIndices(range, { inclusive1BasedStart: true, inclusive1BasedEnd: true });
106922
+ return convertRangeIndices(range, {
106923
+ inclusive1BasedStart: true,
106924
+ inclusive1BasedEnd: true
106925
+ });
106887
106926
  }
106888
106927
 
106889
106928
  function convertRangeTo1Based(range) {
106890
- return convertRangeIndices(range, {}, { inclusive1BasedStart: true, inclusive1BasedEnd: true });
106929
+ return convertRangeIndices(
106930
+ range,
106931
+ {},
106932
+ { inclusive1BasedStart: true, inclusive1BasedEnd: true }
106933
+ );
106891
106934
  }
106892
106935
 
106893
106936
  function provideInclusiveOptions(funToWrap) {
@@ -106992,7 +107035,11 @@ function expandOrContractCircularRangeToPosition(range, position, maxLength) {
106992
107035
  let endMoved = true;
106993
107036
  if (range.end >= position) {
106994
107037
  if (position + maxLength - range.start > range.end - position) {
106995
- newRange.end = normalizePositionByRangeLength(position - 1, maxLength, false);
107038
+ newRange.end = normalizePositionByRangeLength(
107039
+ position - 1,
107040
+ maxLength,
107041
+ false
107042
+ );
106996
107043
  } else {
106997
107044
  newRange.start = position;
106998
107045
  endMoved = false;
@@ -107065,19 +107112,31 @@ function expandOrContractRangeToPosition(range, position, maxLength) {
107065
107112
  if (range.start > range.end) {
107066
107113
  return expandOrContractCircularRangeToPosition(range, position, maxLength);
107067
107114
  } else {
107068
- return expandOrContractNonCircularRangeToPosition(range, position);
107115
+ return expandOrContractNonCircularRangeToPosition(
107116
+ range,
107117
+ position);
107069
107118
  }
107070
107119
  }
107071
107120
 
107072
107121
  function translateRange(rangeToBeAdjusted, translateBy, rangeLength) {
107073
107122
  return lodashExports.assign({}, rangeToBeAdjusted, {
107074
- start: normalizePositionByRangeLength(rangeToBeAdjusted.start + translateBy, rangeLength),
107075
- end: normalizePositionByRangeLength(rangeToBeAdjusted.end + translateBy, rangeLength)
107123
+ start: normalizePositionByRangeLength(
107124
+ rangeToBeAdjusted.start + translateBy,
107125
+ rangeLength
107126
+ ),
107127
+ end: normalizePositionByRangeLength(
107128
+ rangeToBeAdjusted.end + translateBy,
107129
+ rangeLength
107130
+ )
107076
107131
  });
107077
107132
  }
107078
107133
 
107079
107134
  function flipRelativeRange(innerRange, outerRange, sequenceLength, options) {
107080
- const isFullyContained = isRangeWithinRange(innerRange, outerRange, sequenceLength);
107135
+ const isFullyContained = isRangeWithinRange(
107136
+ innerRange,
107137
+ outerRange,
107138
+ sequenceLength
107139
+ );
107081
107140
  if (isFullyContained) {
107082
107141
  return flipFullyContainedRange(innerRange, outerRange, sequenceLength);
107083
107142
  } else {
@@ -107085,40 +107144,91 @@ function flipRelativeRange(innerRange, outerRange, sequenceLength, options) {
107085
107144
  }
107086
107145
  }
107087
107146
  function flipNonFullyContainedRange(innerRange, outerRange, sequenceLength, options) {
107088
- const outerFullyContained = isRangeWithinRange(outerRange, innerRange, sequenceLength);
107147
+ const outerFullyContained = isRangeWithinRange(
107148
+ outerRange,
107149
+ innerRange,
107150
+ sequenceLength
107151
+ );
107089
107152
  let flippedInnerRange;
107090
107153
  if (outerFullyContained) {
107091
- const expandBy1 = getRangeLength({
107092
- start: innerRange.start,
107093
- end: outerRange.start
107094
- }, sequenceLength) - 1;
107095
- flippedInnerRange = expandOrContractRangeByLength(outerRange, expandBy1, false, sequenceLength);
107096
- const expandBy2 = getRangeLength({
107097
- end: innerRange.end,
107098
- start: outerRange.end
107099
- }, sequenceLength) - 1;
107100
- flippedInnerRange = expandOrContractRangeByLength(flippedInnerRange, expandBy2, true, sequenceLength);
107154
+ const expandBy1 = getRangeLength(
107155
+ {
107156
+ start: innerRange.start,
107157
+ end: outerRange.start
107158
+ },
107159
+ sequenceLength
107160
+ ) - 1;
107161
+ flippedInnerRange = expandOrContractRangeByLength(
107162
+ outerRange,
107163
+ expandBy1,
107164
+ false,
107165
+ sequenceLength
107166
+ );
107167
+ const expandBy2 = getRangeLength(
107168
+ {
107169
+ end: innerRange.end,
107170
+ start: outerRange.end
107171
+ },
107172
+ sequenceLength
107173
+ ) - 1;
107174
+ flippedInnerRange = expandOrContractRangeByLength(
107175
+ flippedInnerRange,
107176
+ expandBy2,
107177
+ true,
107178
+ sequenceLength
107179
+ );
107101
107180
  } else {
107102
- const overlaps = getOverlapsOfPotentiallyCircularRanges(innerRange, outerRange, sequenceLength);
107181
+ const overlaps = getOverlapsOfPotentiallyCircularRanges(
107182
+ innerRange,
107183
+ outerRange,
107184
+ sequenceLength
107185
+ );
107103
107186
  if (overlaps.length >= 1) {
107104
107187
  let overlapExtendsForward;
107105
107188
  const firstOverlap = overlaps[0];
107106
107189
  overlapExtendsForward = firstOverlap.start !== outerRange.start;
107107
- const flippedTruncatedInner = flipFullyContainedRange(firstOverlap, outerRange, sequenceLength);
107190
+ const flippedTruncatedInner = flipFullyContainedRange(
107191
+ firstOverlap,
107192
+ outerRange,
107193
+ sequenceLength
107194
+ );
107108
107195
  const lengthToExtend = getRangeLength(innerRange, sequenceLength) - getRangeLength(flippedTruncatedInner, sequenceLength);
107109
- flippedInnerRange = expandOrContractRangeByLength(flippedTruncatedInner, lengthToExtend, overlapExtendsForward, sequenceLength);
107196
+ flippedInnerRange = expandOrContractRangeByLength(
107197
+ flippedTruncatedInner,
107198
+ lengthToExtend,
107199
+ overlapExtendsForward,
107200
+ sequenceLength
107201
+ );
107110
107202
  } else {
107111
- throw new Error("This case (relative ranges that do not overlap) is unsupported! ");
107203
+ throw new Error(
107204
+ "This case (relative ranges that do not overlap) is unsupported! "
107205
+ );
107112
107206
  }
107113
107207
  }
107114
107208
  return flippedInnerRange;
107115
107209
  }
107116
107210
  function flipFullyContainedRange(innerRange, outerRange, sequenceLength, options) {
107117
107211
  const translateBy = -outerRange.start;
107118
- const translatedOuterRange = translateRange(outerRange, translateBy, sequenceLength);
107119
- const translatedInnerRange = translateRange(innerRange, translateBy, sequenceLength);
107120
- const translatedFlippedInnerRange = flipNonOriginSpanningContainedRange(translatedInnerRange, translatedOuterRange, sequenceLength);
107121
- const flippedInnerRange = translateRange(translatedFlippedInnerRange, -translateBy, sequenceLength);
107212
+ const translatedOuterRange = translateRange(
107213
+ outerRange,
107214
+ translateBy,
107215
+ sequenceLength
107216
+ );
107217
+ const translatedInnerRange = translateRange(
107218
+ innerRange,
107219
+ translateBy,
107220
+ sequenceLength
107221
+ );
107222
+ const translatedFlippedInnerRange = flipNonOriginSpanningContainedRange(
107223
+ translatedInnerRange,
107224
+ translatedOuterRange,
107225
+ sequenceLength
107226
+ );
107227
+ const flippedInnerRange = translateRange(
107228
+ translatedFlippedInnerRange,
107229
+ -translateBy,
107230
+ sequenceLength
107231
+ );
107122
107232
  return flippedInnerRange;
107123
107233
  }
107124
107234
  function flipNonOriginSpanningContainedRange(innerRange, outerRange, sequenceLength) {
@@ -107290,9 +107400,15 @@ function trimNumberToFitWithin0ToAnotherNumber(numberToBeTrimmed, max) {
107290
107400
  }
107291
107401
 
107292
107402
  function zeroSubrangeByContainerRange(subRange, containerRange, sequenceLength) {
107293
- const trimmedSubRange = trimRangeByAnotherRange(subRange, containerRange, sequenceLength);
107403
+ const trimmedSubRange = trimRangeByAnotherRange(
107404
+ subRange,
107405
+ containerRange,
107406
+ sequenceLength
107407
+ );
107294
107408
  if (trimmedSubRange) {
107295
- throw new Error("subRange must be fully contained by containerRange! Otherwise this function does not make sense");
107409
+ throw new Error(
107410
+ "subRange must be fully contained by containerRange! Otherwise this function does not make sense"
107411
+ );
107296
107412
  }
107297
107413
  const newSubrange = {};
107298
107414
  newSubrange.start = subRange.start - containerRange.start;
@@ -107319,12 +107435,24 @@ function modulo(n, m) {
107319
107435
  }
107320
107436
 
107321
107437
  function getZeroedRangeOverlaps(annotation, selection, sequenceLength) {
107322
- const overlaps = collapseOverlapsGeneratedFromRangeComparisonIfPossible(getOverlapsOfPotentiallyCircularRanges(annotation, selection, sequenceLength), sequenceLength, annotation);
107438
+ const overlaps = collapseOverlapsGeneratedFromRangeComparisonIfPossible(
107439
+ getOverlapsOfPotentiallyCircularRanges(
107440
+ annotation,
107441
+ selection,
107442
+ sequenceLength
107443
+ ),
107444
+ sequenceLength,
107445
+ annotation
107446
+ );
107323
107447
  const zeroedOverlaps = overlaps.map((overlap) => {
107324
- return zeroSubrangeByContainerRange(overlap, {
107325
- start: selection.start,
107326
- end: normalizePositionByRangeLength(selection.start - 1, sequenceLength)
107327
- }, sequenceLength);
107448
+ return zeroSubrangeByContainerRange(
107449
+ overlap,
107450
+ {
107451
+ start: selection.start,
107452
+ end: normalizePositionByRangeLength(selection.start - 1, sequenceLength)
107453
+ },
107454
+ sequenceLength
107455
+ );
107328
107456
  });
107329
107457
  return zeroedOverlaps;
107330
107458
  }
@@ -114030,7 +114158,7 @@ const calcTmMethods = {
114030
114158
  calculateTemperature: function(sequence, type, A, R, C, Na) {
114031
114159
  if (typeof type === "undefined") {
114032
114160
  type = this.TABLE_BRESLAUER;
114033
- } else if (type != this.TABLE_BRESLAUER && (type != this.TABLE_UNIFIED && type != this.TABLE_SUGIMOTO)) {
114161
+ } else if (type != this.TABLE_BRESLAUER && type != this.TABLE_UNIFIED && type != this.TABLE_SUGIMOTO) {
114034
114162
  throw new Error("Invalid table type!");
114035
114163
  }
114036
114164
  if (!A) {
@@ -122289,12 +122417,7 @@ function findSequenceMatches(sequence, searchString, options = {}) {
122289
122417
  return matches;
122290
122418
  }
122291
122419
  function findSequenceMatchesTopStrand(sequence, searchString, options = {}) {
122292
- const {
122293
- isCircular,
122294
- isAmbiguous,
122295
- isProteinSequence,
122296
- isProteinSearch
122297
- } = options;
122420
+ const { isCircular, isAmbiguous, isProteinSequence, isProteinSearch } = options;
122298
122421
  let searchStringToUse = escapeStringRegexp(searchString);
122299
122422
  if (isAmbiguous) {
122300
122423
  if (isProteinSearch || isProteinSequence) {
@@ -122376,7 +122499,10 @@ function convertAmbiguousStringToRegex(string, isProtein) {
122376
122499
 
122377
122500
  function getComplementSequenceString(sequence, isRna) {
122378
122501
  let complementSeqString = "";
122379
- const complementMap = lodashExports.merge(DNAComplementMap, isRna ? { a: "u", A: "U" } : { a: "t", A: "T" });
122502
+ const complementMap = lodashExports.merge(
122503
+ DNAComplementMap,
122504
+ isRna ? { a: "u", A: "U" } : { a: "t", A: "T" }
122505
+ );
122380
122506
  for (let i = 0; i < sequence.length; i++) {
122381
122507
  let complementChar = complementMap[sequence[i]];
122382
122508
  if (!complementChar) {
@@ -135047,10 +135173,7 @@ async function geneiousXmlToJson(string, options) {
135047
135173
  });
135048
135174
  }
135049
135175
  });
135050
- const toRet = lodashExports.filter(
135051
- resultArray,
135052
- (r) => r?.parsedSequence?.sequence?.length
135053
- );
135176
+ const toRet = lodashExports.filter(resultArray, (r) => r?.parsedSequence?.sequence?.length);
135054
135177
  if (toRet.length)
135055
135178
  return toRet;
135056
135179
  return onFileParsed(resultArray);
@@ -135152,10 +135275,7 @@ async function jbeiXmlToJson(string, options) {
135152
135275
  messages: ["Error while parsing JBEI format"]
135153
135276
  });
135154
135277
  }
135155
- const toRet = lodashExports.filter(
135156
- resultArray,
135157
- (r) => r?.parsedSequence?.sequence?.length
135158
- );
135278
+ const toRet = lodashExports.filter(resultArray, (r) => r?.parsedSequence?.sequence?.length);
135159
135279
  if (toRet.length)
135160
135280
  return toRet;
135161
135281
  return onFileParsed(resultArray);
@@ -138430,10 +138550,7 @@ const lastSavedId$1 = /*#__PURE__*/Object.freeze(/*#__PURE__*/Object.definePrope
138430
138550
  lastSavedIdUpdate
138431
138551
  }, Symbol.toStringTag, { value: 'Module' }));
138432
138552
 
138433
- const toggleReadOnlyMode = createMetaAction(
138434
- "TOGGLE_READ_ONLY_MODE",
138435
- lodashExports.noop
138436
- );
138553
+ const toggleReadOnlyMode = createMetaAction("TOGGLE_READ_ONLY_MODE", lodashExports.noop);
138437
138554
  const updateReadOnlyMode = createMetaAction("UPDATE_READ_ONLY_MODE");
138438
138555
  const readOnly = createReducer(
138439
138556
  {
@@ -142146,6 +142263,9 @@ function showAddOrEditAnnotationDialog({
142146
142263
  overrideName: `AddOrEdit${nameUpper}DialogOverride`,
142147
142264
  dialogType,
142148
142265
  props: {
142266
+ ...annotation.isEditLocked && {
142267
+ readOnly: typeof annotation.isEditLocked === "string" ? annotation.isEditLocked : "This annotation is locked"
142268
+ },
142149
142269
  dialogProps: {
142150
142270
  title: annotation && annotation.id ? `Edit ${nameUpper}` : `New ${nameUpper}`
142151
142271
  },
@@ -142787,7 +142907,8 @@ function mapStateToProps(state, ownProps) {
142787
142907
  editorName,
142788
142908
  sequenceData: sequenceDataFromProps,
142789
142909
  allowSeqDataOverride,
142790
- allowMultipleFeatureDirections
142910
+ allowMultipleFeatureDirections,
142911
+ readOnly
142791
142912
  } = ownProps;
142792
142913
  const editorState = getEditorState(state, editorName);
142793
142914
  const meta = { editorName };
@@ -142847,6 +142968,7 @@ function mapStateToProps(state, ownProps) {
142847
142968
  const f = getFindTool(findTool, matchesTotal);
142848
142969
  return {
142849
142970
  ...editorState,
142971
+ readOnly: readOnly || editorState.readOnly,
142850
142972
  meta,
142851
142973
  annotationToAdd,
142852
142974
  ...newSelection && { selectionLayer: newSelection },
@@ -161031,7 +161153,7 @@ function showFileDialog({ multiple = false, onSelect }) {
161031
161153
  }
161032
161154
 
161033
161155
  const name = "@teselagen/ove";
161034
- const version = "0.3.10";
161156
+ const version = "0.3.11";
161035
161157
  const main = "./src/index.js";
161036
161158
  const exports$1 = {
161037
161159
  ".": {
@@ -161641,7 +161763,7 @@ const fileCommandDefs = {
161641
161763
  isHidden: isProtein
161642
161764
  },
161643
161765
  deleteSequence: {
161644
- isDisabled: (props) => props.readOnly && readOnlyDisabledTooltip || !props.onDelete,
161766
+ isDisabled: (props) => props.disableBpEditing && bpEditingDisabledTooltip || props.readOnly && readOnlyDisabledTooltip || !props.onDelete,
161645
161767
  isHidden: (props) => !props.onDelete,
161646
161768
  handler: (props) => props.onDelete(props.sequenceData)
161647
161769
  },
@@ -161840,6 +161962,7 @@ Object.keys(defaultCopyOptions).forEach((type) => {
161840
161962
  };
161841
161963
  });
161842
161964
  const readOnlyDisabledTooltip = "Sorry this function is not allowed in Read-Only Mode";
161965
+ const bpEditingDisabledTooltip = "Sequence Editing Disabled";
161843
161966
  const noSelection = ({ selectionLayer = {} }) => !(selectionLayer.start > -1 && selectionLayer.end > -1) && "Selection Required";
161844
161967
  const triggerClipboardCommand = (type) => {
161845
161968
  const wrapper = document.querySelector(".veVectorInteractionWrapper");
@@ -161871,8 +161994,8 @@ const editCommandDefs = {
161871
161994
  handler: lodashExports.noop
161872
161995
  },
161873
161996
  cut: {
161874
- isDisabled: (props) => props.readOnly && readOnlyDisabledTooltip || props.sequenceLength === 0,
161875
- isHidden: (props) => props.readOnly,
161997
+ isDisabled: (props) => props.disableBpEditing && bpEditingDisabledTooltip || props.readOnly && readOnlyDisabledTooltip || props.sequenceLength === 0,
161998
+ isHidden: (props) => props.readOnly || props.disableBpEditing,
161876
161999
  handler: () => {
161877
162000
  triggerClipboardCommand("cut");
161878
162001
  },
@@ -161897,7 +162020,7 @@ const editCommandDefs = {
161897
162020
  },
161898
162021
  paste: {
161899
162022
  isDisabled: (props) => props.readOnly && readOnlyDisabledTooltip,
161900
- isHidden: (props) => props.readOnly,
162023
+ isHidden: (props) => props.readOnly || props.disableBpEditing,
161901
162024
  handler: () => triggerClipboardCommand("paste"),
161902
162025
  hotkey: "mod+v"
161903
162026
  },
@@ -162051,12 +162174,12 @@ const editCommandDefs = {
162051
162174
  hotkey: "mod+i"
162052
162175
  },
162053
162176
  complementSelection: {
162054
- isHidden: (props) => props.readOnly || isProtein(props),
162177
+ isHidden: (props) => props.readOnly || isProtein(props) || props.disableBpEditing,
162055
162178
  isDisabled: (props) => props.readOnly && readOnlyDisabledTooltip || noSelection(props),
162056
162179
  handler: (props) => props.handleComplementSelection()
162057
162180
  },
162058
162181
  complementEntireSequence: {
162059
- isHidden: (props) => props.readOnly || isProtein(props),
162182
+ isHidden: (props) => props.readOnly || isProtein(props) || props.disableBpEditing,
162060
162183
  isDisabled: (props) => props.readOnly && readOnlyDisabledTooltip || props.sequenceLength === 0,
162061
162184
  handler: (props) => props.handleComplementSequence()
162062
162185
  },
@@ -162208,13 +162331,13 @@ const editCommandDefs = {
162208
162331
  // }
162209
162332
  // },
162210
162333
  reverseComplementSelection: {
162211
- isDisabled: (props) => props.readOnly && readOnlyDisabledTooltip || noSelection(props),
162334
+ isDisabled: (props) => props.readOnly && readOnlyDisabledTooltip || noSelection(props) || props.disableBpEditing,
162212
162335
  isHidden: (props) => props.readOnly || isProtein(props),
162213
162336
  handler: (props) => props.handleReverseComplementSelection(),
162214
162337
  hotkey: "mod+e"
162215
162338
  },
162216
162339
  reverseComplementEntireSequence: {
162217
- isHidden: (props) => props.readOnly || isProtein(props),
162340
+ isHidden: (props) => props.readOnly || isProtein(props) || props.disableBpEditing,
162218
162341
  isDisabled: (props) => props.readOnly && readOnlyDisabledTooltip || props.sequenceLength === 0,
162219
162342
  handler: (props) => props.handleReverseComplementSequence()
162220
162343
  },
@@ -162364,7 +162487,7 @@ const editCommandDefs = {
162364
162487
  isDisabled: (props) => props.readOnly && readOnlyDisabledTooltip || props.sequenceLength === 0
162365
162488
  },
162366
162489
  rotateToCaretPosition: {
162367
- isHidden: (props) => props.readOnly || isProtein(props),
162490
+ isHidden: (props) => props.readOnly || isProtein(props) || props.disableBpEditing,
162368
162491
  isDisabled: (props) => props.readOnly && readOnlyDisabledTooltip || props.caretPosition === -1 && "You must first place cursor" || !props.sequenceData.circular && "Disabled for Linear Sequences" || props.sequenceLength === 0,
162369
162492
  handler: (props) => props.handleRotateToCaretPosition(),
162370
162493
  hotkey: "mod+b"
@@ -162373,13 +162496,13 @@ const editCommandDefs = {
162373
162496
  };
162374
162497
  const cirularityCommandDefs = {
162375
162498
  circular: {
162376
- isHidden: (props) => props.readOnly || isProtein(props),
162499
+ isHidden: (props) => props.readOnly || isProtein(props) || props.disableBpEditing,
162377
162500
  isDisabled: (props) => props.readOnly && readOnlyDisabledTooltip,
162378
162501
  handler: (props) => props.updateCircular(true),
162379
162502
  isActive: (props) => props && props.sequenceData.circular
162380
162503
  },
162381
162504
  linear: {
162382
- isHidden: (props) => props.readOnly,
162505
+ isHidden: (props) => props.readOnly || props.disableBpEditing,
162383
162506
  isDisabled: (props) => props.readOnly && readOnlyDisabledTooltip,
162384
162507
  handler: (props) => props.updateCircular(false),
162385
162508
  isActive: (props) => props && !props.sequenceData.circular
@@ -162406,29 +162529,27 @@ const nicheAnnotations = [
162406
162529
  }
162407
162530
  ];
162408
162531
  const labelToggleCommandDefs = {};
162409
- ["feature", "part", "cutsite", "primer", ...nicheAnnotations].forEach(
162410
- (_type) => {
162411
- let rest = {};
162412
- let type = _type;
162413
- if (_type.type) {
162414
- type = _type.type.slice(0, -1);
162415
- rest = _type;
162416
- }
162417
- const cmdId = `toggle${lodashExports.upperFirst(type)}Labels`;
162418
- const plural = type + "s";
162419
- labelToggleCommandDefs[cmdId] = {
162420
- toggle: ["show", "hide"],
162421
- handler: (props) => props.annotationLabelVisibilityToggle(plural),
162422
- isHidden: (props) => {
162423
- return props && props.typesToOmit && props.typesToOmit[plural] === false;
162424
- },
162425
- ...rest,
162426
- isActive: (props) => {
162427
- return props && props.annotationLabelVisibility[plural];
162428
- }
162429
- };
162430
- }
162431
- );
162532
+ ["feature", "part", "cutsite", "primer", ...nicheAnnotations].forEach((_type) => {
162533
+ let rest = {};
162534
+ let type = _type;
162535
+ if (_type.type) {
162536
+ type = _type.type.slice(0, -1);
162537
+ rest = _type;
162538
+ }
162539
+ const cmdId = `toggle${lodashExports.upperFirst(type)}Labels`;
162540
+ const plural = type + "s";
162541
+ labelToggleCommandDefs[cmdId] = {
162542
+ toggle: ["show", "hide"],
162543
+ handler: (props) => props.annotationLabelVisibilityToggle(plural),
162544
+ isHidden: (props) => {
162545
+ return props && props.typesToOmit && props.typesToOmit[plural] === false;
162546
+ },
162547
+ ...rest,
162548
+ isActive: (props) => {
162549
+ return props && props.annotationLabelVisibility[plural];
162550
+ }
162551
+ };
162552
+ });
162432
162553
  const editAnnotationCommandDefs = ["feature", "part", "primer"].reduce(
162433
162554
  (acc, key) => {
162434
162555
  acc[`edit${lodashExports.upperFirst(key)}`] = {
@@ -166617,8 +166738,12 @@ function VectorInteractionHOC(Component) {
166617
166738
  caretPosition = -1,
166618
166739
  selectionLayer = { start: -1, end: -1 },
166619
166740
  readOnly,
166620
- onPaste
166741
+ onPaste,
166742
+ disableBpEditing
166621
166743
  } = this.props;
166744
+ if (disableBpEditing) {
166745
+ return window.toastr.warning("Sorry the underlying sequence is locked");
166746
+ }
166622
166747
  if (readOnly) {
166623
166748
  return window.toastr.warning("Sorry the sequence is Read-Only");
166624
166749
  }
@@ -166659,6 +166784,7 @@ function VectorInteractionHOC(Component) {
166659
166784
  sequenceData,
166660
166785
  selectionLayer,
166661
166786
  copyOptions,
166787
+ disableBpEditing,
166662
166788
  readOnly
166663
166789
  } = this.props;
166664
166790
  const onCut = this.props.onCut || this.props.onCopy || lodashExports.noop;
@@ -166684,7 +166810,7 @@ function VectorInteractionHOC(Component) {
166684
166810
  );
166685
166811
  if (!(this.sequenceDataToCopy || {}).textToCopy && !seqData.sequence.length)
166686
166812
  return window.toastr.warning(
166687
- `No Sequence Selected To ${isCut && !readOnly ? "Cut" : "Copy"}`
166813
+ `No Sequence Selected To ${isCut && !(readOnly || disableBpEditing) ? "Cut" : "Copy"}`
166688
166814
  );
166689
166815
  const clipboardData = e.clipboardData;
166690
166816
  const textToCopy = (this.sequenceDataToCopy || {}).textToCopy !== void 0 ? this.sequenceDataToCopy.textToCopy : seqData.isProtein ? seqData.proteinSequence : seqData.sequence;
@@ -166692,7 +166818,7 @@ function VectorInteractionHOC(Component) {
166692
166818
  clipboardData.setData("text/plain", textToCopy);
166693
166819
  clipboardData.setData("application/json", JSON.stringify(seqData));
166694
166820
  e.preventDefault();
166695
- if (isCut && !readOnly) {
166821
+ if (isCut && !(readOnly || disableBpEditing) && !disableBpEditing) {
166696
166822
  this.handleDnaDelete(false);
166697
166823
  onCut(
166698
166824
  e,
@@ -166705,7 +166831,7 @@ function VectorInteractionHOC(Component) {
166705
166831
  document.body.removeEventListener("copy", this.handleCopy);
166706
166832
  }
166707
166833
  window.toastr.success(
166708
- `Selection ${isCut && !readOnly ? "Cut" : "Copied"}`
166834
+ `Selection ${isCut && !(readOnly || disableBpEditing) && !disableBpEditing ? "Cut" : "Copied"}`
166709
166835
  );
166710
166836
  this.sequenceDataToCopy = void 0;
166711
166837
  };
@@ -166716,14 +166842,18 @@ function VectorInteractionHOC(Component) {
166716
166842
  caretPosition = -1,
166717
166843
  selectionLayer = { start: -1, end: -1 },
166718
166844
  sequenceData = { sequence: "" },
166719
- readOnly
166845
+ readOnly,
166846
+ disableBpEditing
166720
166847
  // updateSequenceData,
166721
166848
  // wrappedInsertSequenceDataAtPositionOrRange
166722
166849
  // handleInsert
166723
166850
  } = this.props;
166724
166851
  const sequenceLength = sequenceData.sequence.length;
166725
166852
  const isReplace = selectionLayer.start > -1;
166726
- if (readOnly) {
166853
+ if (disableBpEditing) {
166854
+ return window.toastr.warning("Sorry the underlying sequence is locked");
166855
+ }
166856
+ if (readOnly || disableBpEditing) {
166727
166857
  window.toastr.warning("Sorry the sequence is Read-Only");
166728
166858
  } else {
166729
166859
  createSequenceInputPopup({
@@ -166751,13 +166881,17 @@ function VectorInteractionHOC(Component) {
166751
166881
  selectionLayer = { start: -1, end: -1 },
166752
166882
  sequenceData = { sequence: "" },
166753
166883
  readOnly,
166884
+ disableBpEditing,
166754
166885
  updateSequenceData,
166755
166886
  wrappedInsertSequenceDataAtPositionOrRange,
166756
166887
  caretPositionUpdate
166757
166888
  // handleInsert
166758
166889
  } = this.props;
166759
166890
  const sequenceLength = sequenceData.sequence.length;
166760
- if (readOnly) {
166891
+ if (disableBpEditing) {
166892
+ return window.toastr.warning("Sorry the underlying sequence is locked");
166893
+ }
166894
+ if (readOnly || disableBpEditing) {
166761
166895
  return window.toastr.warning("Sorry the sequence is Read-Only");
166762
166896
  }
166763
166897
  if (sequenceLength > 0) {
@@ -166888,7 +167022,7 @@ function VectorInteractionHOC(Component) {
166888
167022
  };
166889
167023
  // eslint-disable-next-line no-unused-vars
166890
167024
  getCopyOptions = (annotation) => {
166891
- const { sequenceData, readOnly, selectionLayer } = this.props;
167025
+ const { sequenceData, readOnly, disableBpEditing, selectionLayer } = this.props;
166892
167026
  const { isProtein } = sequenceData;
166893
167027
  const makeTextCopyable = (transformFunc, className, action = "copy") => {
166894
167028
  return new Clipboard$1(`.${className}`, {
@@ -166948,7 +167082,7 @@ function VectorInteractionHOC(Component) {
166948
167082
  }
166949
167083
  };
166950
167084
  return [
166951
- ...readOnly ? [] : [
167085
+ ...readOnly || disableBpEditing ? [] : [
166952
167086
  {
166953
167087
  text: "Replace",
166954
167088
  ...this.insertHelper
@@ -167022,21 +167156,14 @@ function VectorInteractionHOC(Component) {
167022
167156
  this.openVeCopyAAReverse && this.openVeCopyAAReverse.destroy();
167023
167157
  },
167024
167158
  didMount: ({ className }) => {
167025
- this.openVeCopyAAReverse = makeTextCopyable(
167026
- (selectedSeqData) => {
167027
- const revSeqData = getReverseComplementSequenceAndAnnoations(
167028
- selectedSeqData
167029
- );
167030
- const textToCopy = isProtein ? revSeqData.proteinSequence.toUpperCase() : getAminoAcidStringFromSequenceString(
167031
- revSeqData.sequence
167032
- );
167033
- return {
167034
- ...revSeqData,
167035
- textToCopy
167036
- };
167037
- },
167038
- className
167039
- );
167159
+ this.openVeCopyAAReverse = makeTextCopyable((selectedSeqData) => {
167160
+ const revSeqData = getReverseComplementSequenceAndAnnoations(selectedSeqData);
167161
+ const textToCopy = isProtein ? revSeqData.proteinSequence.toUpperCase() : getAminoAcidStringFromSequenceString(revSeqData.sequence);
167162
+ return {
167163
+ ...revSeqData,
167164
+ textToCopy
167165
+ };
167166
+ }, className);
167040
167167
  }
167041
167168
  },
167042
167169
  {
@@ -167143,11 +167270,12 @@ function VectorInteractionHOC(Component) {
167143
167270
  ({ nearestCaretPos, shiftHeld, event }) => {
167144
167271
  this.updateSelectionOrCaret(shiftHeld, nearestCaretPos);
167145
167272
  const {
167146
- readOnly
167273
+ readOnly,
167274
+ disableBpEditing
167147
167275
  // sequenceData: { circular }
167148
167276
  } = this.props;
167149
167277
  const menu = [
167150
- ...readOnly ? [] : [
167278
+ ...readOnly || disableBpEditing ? [] : [
167151
167279
  {
167152
167280
  text: "Insert",
167153
167281
  ...this.insertHelper
@@ -167193,8 +167321,7 @@ function VectorInteractionHOC(Component) {
167193
167321
  overlapsSelf: annotation.overlapsSelf
167194
167322
  });
167195
167323
  return [
167196
- "editPart",
167197
- "deletePart",
167324
+ ...getEditDeleteHandlers("Part", annotation),
167198
167325
  "--",
167199
167326
  ...this.getSelectionMenuOptions(annotation),
167200
167327
  "--",
@@ -167236,8 +167363,7 @@ function VectorInteractionHOC(Component) {
167236
167363
  event.persist();
167237
167364
  const { readOnly, annotationsToSupport: { parts } = {} } = this.props;
167238
167365
  return [
167239
- "editFeature",
167240
- "deleteFeature",
167366
+ ...getEditDeleteHandlers("Feature", annotation),
167241
167367
  ...this.getSelectionMenuOptions(annotation),
167242
167368
  ...readOnly ? [] : [
167243
167369
  ...parts && [
@@ -167304,8 +167430,7 @@ function VectorInteractionHOC(Component) {
167304
167430
  end: annotation.end
167305
167431
  });
167306
167432
  return [
167307
- "editPrimer",
167308
- "deletePrimer",
167433
+ ...getEditDeleteHandlers("Primer", annotation),
167309
167434
  ...this.getSelectionMenuOptions(annotation),
167310
167435
  "showRemoveDuplicatesDialogPrimers",
167311
167436
  "viewPrimerProperties"
@@ -167515,6 +167640,28 @@ const insertAndSelectHelper = ({ seqDataToInsert, props }) => {
167515
167640
  end: newSelectionLayerEnd % newSeqData.sequence.length
167516
167641
  });
167517
167642
  };
167643
+ function getEditDeleteHandlers(type, annotation) {
167644
+ return [
167645
+ ...annotation.isEditLocked ? [
167646
+ {
167647
+ shouldDismissPopover: false,
167648
+ text: /* @__PURE__ */ React__default$1.createElement(
167649
+ "div",
167650
+ {
167651
+ style: {
167652
+ fontSize: 11,
167653
+ fontStyle: "italic",
167654
+ color: "rgba(0,0,0,.5)"
167655
+ }
167656
+ },
167657
+ typeof annotation.isEditLocked === "string" ? annotation.isEditLocked : `Note: This Annotation is Locked`
167658
+ )
167659
+ }
167660
+ ] : [],
167661
+ `edit${type}`,
167662
+ ...annotation.isEditLocked ? [] : [`delete${type}`]
167663
+ ];
167664
+ }
167518
167665
 
167519
167666
  const style$i = '';
167520
167667
 
@@ -174672,7 +174819,11 @@ const GoToDialog = createSimpleDialog({
174672
174819
  }
174673
174820
  }
174674
174821
  ],
174675
- withDialogProps: { title: "Go To", height: 190, onCloseHook: tryToRefocusEditor }
174822
+ withDialogProps: {
174823
+ title: "Go To",
174824
+ height: 190,
174825
+ onCloseHook: tryToRefocusEditor
174826
+ }
174676
174827
  });
174677
174828
 
174678
174829
  const validate$1 = (val, vals, props) => {
@@ -177332,6 +177483,7 @@ class AddOrEditAnnotationDialog extends React__default$1.Component {
177332
177483
  overlapsSelf,
177333
177484
  start,
177334
177485
  end,
177486
+ readOnly,
177335
177487
  getAdditionalEditAnnotationComps,
177336
177488
  advancedOptions,
177337
177489
  advancedDefaultOpen,
@@ -177426,10 +177578,11 @@ class AddOrEditAnnotationDialog extends React__default$1.Component {
177426
177578
  "tg-upsert-annotation"
177427
177579
  )
177428
177580
  },
177581
+ typeof readOnly === "string" ? /* @__PURE__ */ React__default$1.createElement(Callout, { intent: "primary", style: { marginBottom: 10 } }, readOnly) : null,
177429
177582
  /* @__PURE__ */ React__default$1.createElement(
177430
177583
  InputField,
177431
177584
  {
177432
- disabled: this.props.readOnly,
177585
+ disabled: readOnly,
177433
177586
  inlineLabel: true,
177434
177587
  tooltipError: true,
177435
177588
  autoFocus: true,
@@ -180367,15 +180520,15 @@ class Browser {
180367
180520
  }
180368
180521
  // Edge 20+
180369
180522
  static isEdge() {
180370
- return Browser.isBrowser() && (!Browser.isIE() && !!window.StyleMedia);
180523
+ return Browser.isBrowser() && !Browser.isIE() && !!window.StyleMedia;
180371
180524
  }
180372
180525
  // Chrome 1+
180373
180526
  static isChrome() {
180374
- return Browser.isBrowser() && (!!window.chrome && !!window.chrome.webstore);
180527
+ return Browser.isBrowser() && !!window.chrome && !!window.chrome.webstore;
180375
180528
  }
180376
180529
  // Blink engine detection
180377
180530
  static isBlink() {
180378
- return Browser.isBrowser() && ((Browser.isChrome() || Browser.isOpera()) && !!window.CSS);
180531
+ return Browser.isBrowser() && (Browser.isChrome() || Browser.isOpera()) && !!window.CSS;
180379
180532
  }
180380
180533
  static getUserAgent() {
180381
180534
  return typeof navigator === "undefined" ? "" : navigator.userAgent;
@@ -182968,6 +183121,8 @@ const userDefinedHandlersAndOpts = [
182968
183121
  "hideSingleImport",
182969
183122
  "beforeAnnotationCreate",
182970
183123
  "disableSetReadOnly",
183124
+ "allowAnnotationEditLocking",
183125
+ "disableBpEditing",
182971
183126
  "showReadOnly",
182972
183127
  "showCircularity",
182973
183128
  "onHiddenEnzymeAdd",
@@ -184381,9 +184536,7 @@ const genericAnnotationProperties = ({
184381
184536
  AnchorButton,
184382
184537
  {
184383
184538
  onClick: () => {
184384
- deleteAnnotation(
184385
- annotationPropertiesSelectedEntities
184386
- );
184539
+ deleteAnnotation(annotationPropertiesSelectedEntities);
184387
184540
  },
184388
184541
  className: "tgDeleteAnnsBtn",
184389
184542
  intent: "danger",