@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.js CHANGED
@@ -7425,7 +7425,7 @@ function getPlainObjectKeys(object) {
7425
7425
  var ownKeys$8 = typeof Reflect !== "undefined" && Reflect.ownKeys ? Reflect.ownKeys : hasGetOwnPropertySymbols ? function (obj) {
7426
7426
  return Object.getOwnPropertyNames(obj).concat(Object.getOwnPropertySymbols(obj));
7427
7427
  } : /* istanbul ignore next */Object.getOwnPropertyNames;
7428
- function toPrimitive$3(value) {
7428
+ function toPrimitive$2(value) {
7429
7429
  return value === null ? null : typeof value === "object" ? "" + value : value;
7430
7430
  }
7431
7431
  function hasProp(target, prop) {
@@ -8354,7 +8354,7 @@ var ObservableValue = /*#__PURE__*/function (_Atom) {
8354
8354
  return this.name_ + "[" + this.value_ + "]";
8355
8355
  };
8356
8356
  _proto.valueOf = function valueOf() {
8357
- return toPrimitive$3(this.get());
8357
+ return toPrimitive$2(this.get());
8358
8358
  };
8359
8359
  _proto[_Symbol$toPrimitive] = function () {
8360
8360
  return this.valueOf();
@@ -8582,7 +8582,7 @@ var ComputedValue = /*#__PURE__*/function () {
8582
8582
  return this.name_ + "[" + this.derivation.toString() + "]";
8583
8583
  };
8584
8584
  _proto.valueOf = function valueOf() {
8585
- return toPrimitive$3(this.get());
8585
+ return toPrimitive$2(this.get());
8586
8586
  };
8587
8587
  _proto[_Symbol$toPrimitive$1] = function () {
8588
8588
  return this.valueOf();
@@ -30279,10 +30279,18 @@ var _fails = function (exec) {
30279
30279
  }
30280
30280
  };
30281
30281
 
30282
- // Thank's IE8 for his funny defineProperty
30283
- var _descriptors = !_fails(function () {
30284
- return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;
30285
- });
30282
+ var _descriptors;
30283
+ var hasRequired_descriptors;
30284
+
30285
+ function require_descriptors () {
30286
+ if (hasRequired_descriptors) return _descriptors;
30287
+ hasRequired_descriptors = 1;
30288
+ // Thank's IE8 for his funny defineProperty
30289
+ _descriptors = !_fails(function () {
30290
+ return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;
30291
+ });
30292
+ return _descriptors;
30293
+ }
30286
30294
 
30287
30295
  var _domCreate;
30288
30296
  var hasRequired_domCreate;
@@ -30300,9 +30308,17 @@ function require_domCreate () {
30300
30308
  return _domCreate;
30301
30309
  }
30302
30310
 
30303
- var _ie8DomDefine = !_descriptors && !_fails(function () {
30304
- return Object.defineProperty(require_domCreate()('div'), 'a', { get: function () { return 7; } }).a != 7;
30305
- });
30311
+ var _ie8DomDefine;
30312
+ var hasRequired_ie8DomDefine;
30313
+
30314
+ function require_ie8DomDefine () {
30315
+ if (hasRequired_ie8DomDefine) return _ie8DomDefine;
30316
+ hasRequired_ie8DomDefine = 1;
30317
+ _ie8DomDefine = !require_descriptors() && !_fails(function () {
30318
+ return Object.defineProperty(require_domCreate()('div'), 'a', { get: function () { return 7; } }).a != 7;
30319
+ });
30320
+ return _ie8DomDefine;
30321
+ }
30306
30322
 
30307
30323
  // 7.1.1 ToPrimitive(input [, PreferredType])
30308
30324
  var isObject$d = _isObject;
@@ -30317,22 +30333,29 @@ var _toPrimitive$1 = function (it, S) {
30317
30333
  throw TypeError("Can't convert object to primitive value");
30318
30334
  };
30319
30335
 
30320
- var anObject$5 = _anObject;
30321
- var IE8_DOM_DEFINE$1 = _ie8DomDefine;
30322
- var toPrimitive$2 = _toPrimitive$1;
30323
- var dP$3 = Object.defineProperty;
30336
+ var hasRequired_objectDp;
30324
30337
 
30325
- _objectDp.f = _descriptors ? Object.defineProperty : function defineProperty(O, P, Attributes) {
30326
- anObject$5(O);
30327
- P = toPrimitive$2(P, true);
30328
- anObject$5(Attributes);
30329
- if (IE8_DOM_DEFINE$1) try {
30330
- return dP$3(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
- };
30338
+ function require_objectDp () {
30339
+ if (hasRequired_objectDp) return _objectDp;
30340
+ hasRequired_objectDp = 1;
30341
+ var anObject = _anObject;
30342
+ var IE8_DOM_DEFINE = require_ie8DomDefine();
30343
+ var toPrimitive = _toPrimitive$1;
30344
+ var dP = Object.defineProperty;
30345
+
30346
+ _objectDp.f = require_descriptors() ? Object.defineProperty : function defineProperty(O, P, Attributes) {
30347
+ anObject(O);
30348
+ P = toPrimitive(P, true);
30349
+ anObject(Attributes);
30350
+ if (IE8_DOM_DEFINE) try {
30351
+ return dP(O, P, Attributes);
30352
+ } catch (e) { /* empty */ }
30353
+ if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');
30354
+ if ('value' in Attributes) O[P] = Attributes.value;
30355
+ return O;
30356
+ };
30357
+ return _objectDp;
30358
+ }
30336
30359
 
30337
30360
  var _propertyDesc = function (bitmap, value) {
30338
30361
  return {
@@ -30343,9 +30366,9 @@ var _propertyDesc = function (bitmap, value) {
30343
30366
  };
30344
30367
  };
30345
30368
 
30346
- var dP$2 = _objectDp;
30369
+ var dP$2 = require_objectDp();
30347
30370
  var createDesc$3 = _propertyDesc;
30348
- var _hide = _descriptors ? function (object, key, value) {
30371
+ var _hide = require_descriptors() ? function (object, key, value) {
30349
30372
  return dP$2.f(object, key, createDesc$3(1, value));
30350
30373
  } : function (object, key, value) {
30351
30374
  object[key] = value;
@@ -30590,7 +30613,7 @@ function require_objectAssign () {
30590
30613
  if (hasRequired_objectAssign) return _objectAssign;
30591
30614
  hasRequired_objectAssign = 1;
30592
30615
  // 19.1.2.1 Object.assign(target, source, ...)
30593
- var DESCRIPTORS = _descriptors;
30616
+ var DESCRIPTORS = require_descriptors();
30594
30617
  var getKeys = _objectKeys;
30595
30618
  var gOPS = _objectGops;
30596
30619
  var pIE = require_objectPie();
@@ -30666,11 +30689,11 @@ var _iterators = {};
30666
30689
 
30667
30690
  var _redefine = _hide;
30668
30691
 
30669
- var dP$1 = _objectDp;
30692
+ var dP$1 = require_objectDp();
30670
30693
  var anObject$4 = _anObject;
30671
30694
  var getKeys$1 = _objectKeys;
30672
30695
 
30673
- var _objectDps = _descriptors ? Object.defineProperties : function defineProperties(O, Properties) {
30696
+ var _objectDps = require_descriptors() ? Object.defineProperties : function defineProperties(O, Properties) {
30674
30697
  anObject$4(O);
30675
30698
  var keys = getKeys$1(Properties);
30676
30699
  var length = keys.length;
@@ -30749,7 +30772,7 @@ $exports.store = store$2;
30749
30772
 
30750
30773
  var _wksExports = _wks.exports;
30751
30774
 
30752
- var def = _objectDp.f;
30775
+ var def = require_objectDp().f;
30753
30776
  var has$c = _has;
30754
30777
  var TAG$1 = _wksExports('toStringTag');
30755
30778
 
@@ -31063,7 +31086,7 @@ var _isArrayIter = function (it) {
31063
31086
  return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);
31064
31087
  };
31065
31088
 
31066
- var $defineProperty$2 = _objectDp;
31089
+ var $defineProperty$2 = require_objectDp();
31067
31090
  var createDesc$2 = _propertyDesc;
31068
31091
 
31069
31092
  var _createProperty = function (object, index, value) {
@@ -31196,7 +31219,7 @@ var _default$9 = function (instance, Constructor) {
31196
31219
 
31197
31220
  var $export$3 = _export;
31198
31221
  // 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)
31199
- $export$3($export$3.S + $export$3.F * !_descriptors, 'Object', { defineProperty: _objectDp.f });
31222
+ $export$3($export$3.S + $export$3.F * !require_descriptors(), 'Object', { defineProperty: require_objectDp().f });
31200
31223
 
31201
31224
  var $Object$2 = _coreExports.Object;
31202
31225
  var defineProperty$c = function defineProperty(it, key, desc) {
@@ -31244,7 +31267,7 @@ var _meta = {exports: {}};
31244
31267
  var META$1 = _uid('meta');
31245
31268
  var isObject$c = _isObject;
31246
31269
  var has$a = _has;
31247
- var setDesc = _objectDp.f;
31270
+ var setDesc = require_objectDp().f;
31248
31271
  var id$1 = 0;
31249
31272
  var isExtensible = Object.isExtensible || function () {
31250
31273
  return true;
@@ -31299,7 +31322,7 @@ var _metaExports = _meta.exports;
31299
31322
 
31300
31323
  var core = _coreExports;
31301
31324
  var wksExt$1 = _wksExt;
31302
- var defineProperty$a = _objectDp.f;
31325
+ var defineProperty$a = require_objectDp().f;
31303
31326
  var _wksDefine = function (name) {
31304
31327
  var $Symbol = core.Symbol || (core.Symbol = {} );
31305
31328
  if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty$a($Symbol, name, { value: wksExt$1.f(name) });
@@ -31366,10 +31389,10 @@ var createDesc$1 = _propertyDesc;
31366
31389
  var toIObject$1 = _toIobject;
31367
31390
  var toPrimitive$1 = _toPrimitive$1;
31368
31391
  var has$9 = _has;
31369
- var IE8_DOM_DEFINE = _ie8DomDefine;
31392
+ var IE8_DOM_DEFINE = require_ie8DomDefine();
31370
31393
  var gOPD$5 = Object.getOwnPropertyDescriptor;
31371
31394
 
31372
- _objectGopd.f = _descriptors ? gOPD$5 : function getOwnPropertyDescriptor(O, P) {
31395
+ _objectGopd.f = require_descriptors() ? gOPD$5 : function getOwnPropertyDescriptor(O, P) {
31373
31396
  O = toIObject$1(O);
31374
31397
  P = toPrimitive$1(P, true);
31375
31398
  if (IE8_DOM_DEFINE) try {
@@ -31381,7 +31404,7 @@ _objectGopd.f = _descriptors ? gOPD$5 : function getOwnPropertyDescriptor(O, P)
31381
31404
  // ECMAScript 6 symbols shim
31382
31405
  var global$2 = _globalExports;
31383
31406
  var has$8 = _has;
31384
- var DESCRIPTORS = _descriptors;
31407
+ var DESCRIPTORS = require_descriptors();
31385
31408
  var $export$2 = _export;
31386
31409
  var redefine = _redefine;
31387
31410
  var META = _metaExports.KEY;
@@ -31404,7 +31427,7 @@ var _create$1 = _objectCreate;
31404
31427
  var gOPNExt = _objectGopnExt;
31405
31428
  var $GOPD = _objectGopd;
31406
31429
  var $GOPS = _objectGops;
31407
- var $DP = _objectDp;
31430
+ var $DP = require_objectDp();
31408
31431
  var $keys$1 = _objectKeys;
31409
31432
  var gOPD$4 = $GOPD.f;
31410
31433
  var dP = $DP.f;
@@ -85373,13 +85396,7 @@ function withTableParams(compOrOpts, pTopLevelOpts) {
85373
85396
  return {};
85374
85397
  }
85375
85398
  const mergedOpts = getMergedOpts(topLevelOptions, ownProps);
85376
- const {
85377
- formName,
85378
- urlConnected,
85379
- history,
85380
- defaults,
85381
- onlyOneFilter
85382
- } = mergedOpts;
85399
+ const { formName, urlConnected, history, defaults, onlyOneFilter } = mergedOpts;
85383
85400
  function updateSearch(val) {
85384
85401
  setTimeout(function() {
85385
85402
  dispatch(reduxForm.change(formName, "reduxFormSearchInput", val || ""));
@@ -85418,12 +85435,7 @@ function withTableParams(compOrOpts, pTopLevelOpts) {
85418
85435
  action(...args, currentParams);
85419
85436
  };
85420
85437
  });
85421
- const {
85422
- variables,
85423
- selectedEntities,
85424
- mergedOpts,
85425
- ...restStateProps
85426
- } = stateProps;
85438
+ const { variables, selectedEntities, mergedOpts, ...restStateProps } = stateProps;
85427
85439
  const changeFormValue = (...args) => dispatchProps.dispatch(reduxForm.change(formName, ...args));
85428
85440
  const tableParams = {
85429
85441
  changeFormValue,
@@ -89319,7 +89331,9 @@ const wrapDialog = (topLevelDialogProps = {}) => (Component) => (props) => {
89319
89331
  return doNotTriggerClick();
89320
89332
  }
89321
89333
  const parentEl = r.current?.closest(".bp3-dialog-container");
89322
- const dialogs = document.querySelectorAll(".bp3-dialog-container");
89334
+ const dialogs = document.querySelectorAll(
89335
+ ".bp3-dialog-container"
89336
+ );
89323
89337
  const numDialogs = dialogs?.length;
89324
89338
  if (numDialogs > 1) {
89325
89339
  const topMostDialog = dialogs[numDialogs - 1];
@@ -89658,6 +89672,7 @@ function MatchHeaders({
89658
89672
  marginBottom: 10,
89659
89673
  marginLeft: 20,
89660
89674
  fontSize: 10
89675
+ /* color: Colors.RED1 */
89661
89676
  }
89662
89677
  },
89663
89678
  userMatchedHeader && [
@@ -91646,10 +91661,7 @@ const UploadCsvWizardDialog = compose(
91646
91661
  if (props.filesWIssues.length > 0) {
91647
91662
  const reduxFormEntitiesArray = [];
91648
91663
  const finishedFiles = props.filesWIssues.map((f, i) => {
91649
- const {
91650
- reduxFormEntities,
91651
- reduxFormCellValidation
91652
- } = reduxForm.formValueSelector(`editableCellTable-${i}`)(
91664
+ const { reduxFormEntities, reduxFormCellValidation } = reduxForm.formValueSelector(`editableCellTable-${i}`)(
91653
91665
  state,
91654
91666
  "reduxFormEntities",
91655
91667
  "reduxFormCellValidation"
@@ -103904,7 +103916,14 @@ const EnhancedMenuItem = compose(
103904
103916
  }
103905
103917
  }),
103906
103918
  branch(({ navTo }) => navTo, withRouter$1)
103907
- )(function({ navTo, context, staticContext, didMount, willUnmount, ...props }) {
103919
+ )(function({
103920
+ navTo,
103921
+ context,
103922
+ staticContext,
103923
+ didMount,
103924
+ willUnmount,
103925
+ ...props
103926
+ }) {
103908
103927
  let MenuItemComp = core$5.MenuItem;
103909
103928
  if (navTo) {
103910
103929
  MenuItemComp = MenuItemLink;
@@ -104962,11 +104981,7 @@ function getCommandHotkeyHandlers(commands) {
104962
104981
  return handlers;
104963
104982
  }
104964
104983
 
104965
- const withCommand = (mappings) => (WrappedComponent) => ({
104966
- cmd,
104967
- cmdOptions = {},
104968
- ...props
104969
- }) => {
104984
+ const withCommand = (mappings) => (WrappedComponent) => ({ cmd, cmdOptions = {}, ...props }) => {
104970
104985
  const mappedProps = {};
104971
104986
  Object.keys(mappings).forEach((k) => {
104972
104987
  mappedProps[k] = mappings[k] === "execute" ? (event) => cmd.execute({ event }) : typeof mappings[k] === "function" ? mappings[k](cmd, props) : cmd[mappings[k]];
@@ -106113,9 +106128,9 @@ const frameTranslations = createReducer(
106113
106128
  }
106114
106129
  },
106115
106130
  {
106116
- "1": false,
106117
- "2": false,
106118
- "3": false,
106131
+ 1: false,
106132
+ 2: false,
106133
+ 3: false,
106119
106134
  "-1": false,
106120
106135
  "-2": false,
106121
106136
  "-3": false
@@ -106844,9 +106859,14 @@ function checkIfNonCircularRangesOverlap(range, comparisonRange) {
106844
106859
 
106845
106860
  function checkIfPotentiallyCircularRangesOverlap(range, comparisonRange) {
106846
106861
  return splitRangeIntoTwoPartsIfItIsCircular(range, Infinity).some(function(splitRange) {
106847
- return splitRangeIntoTwoPartsIfItIsCircular(comparisonRange, Infinity).some(function(splitComparisonRange) {
106848
- return checkIfNonCircularRangesOverlap(splitRange, splitComparisonRange);
106849
- });
106862
+ return splitRangeIntoTwoPartsIfItIsCircular(comparisonRange, Infinity).some(
106863
+ function(splitComparisonRange) {
106864
+ return checkIfNonCircularRangesOverlap(
106865
+ splitRange,
106866
+ splitComparisonRange
106867
+ );
106868
+ }
106869
+ );
106850
106870
  });
106851
106871
  }
106852
106872
 
@@ -106856,15 +106876,19 @@ function collapseOverlapsGeneratedFromRangeComparisonIfPossible(overlaps, sequen
106856
106876
  return overlaps;
106857
106877
  } else if (overlaps.length === 2) {
106858
106878
  if (overlaps[0].start === 0 && overlaps[1].end + 1 === sequenceLength && !originalRangeLinear) {
106859
- return [{
106860
- start: overlaps[1].start,
106861
- end: overlaps[0].end
106862
- }];
106879
+ return [
106880
+ {
106881
+ start: overlaps[1].start,
106882
+ end: overlaps[0].end
106883
+ }
106884
+ ];
106863
106885
  } else if (overlaps[1].start === 0 && overlaps[0].end + 1 === sequenceLength && !originalRangeLinear) {
106864
- return [{
106865
- start: overlaps[0].start,
106866
- end: overlaps[1].end
106867
- }];
106886
+ return [
106887
+ {
106888
+ start: overlaps[0].start,
106889
+ end: overlaps[1].end
106890
+ }
106891
+ ];
106868
106892
  } else {
106869
106893
  return overlaps;
106870
106894
  }
@@ -106872,17 +106896,29 @@ function collapseOverlapsGeneratedFromRangeComparisonIfPossible(overlaps, sequen
106872
106896
  const firstOverlap = overlaps[0];
106873
106897
  const secondOverlap = overlaps[1];
106874
106898
  const thirdOverlap = overlaps[2];
106875
- let collapsedOverlaps = collapseOverlapsGeneratedFromRangeComparisonIfPossible([firstOverlap, secondOverlap], sequenceLength, optionalOriginalRange);
106899
+ let collapsedOverlaps = collapseOverlapsGeneratedFromRangeComparisonIfPossible(
106900
+ [firstOverlap, secondOverlap],
106901
+ sequenceLength,
106902
+ optionalOriginalRange
106903
+ );
106876
106904
  if (collapsedOverlaps.length === 1) {
106877
106905
  collapsedOverlaps.push(thirdOverlap);
106878
106906
  return collapsedOverlaps;
106879
106907
  } else {
106880
- collapsedOverlaps = collapseOverlapsGeneratedFromRangeComparisonIfPossible([firstOverlap, thirdOverlap], sequenceLength, optionalOriginalRange);
106908
+ collapsedOverlaps = collapseOverlapsGeneratedFromRangeComparisonIfPossible(
106909
+ [firstOverlap, thirdOverlap],
106910
+ sequenceLength,
106911
+ optionalOriginalRange
106912
+ );
106881
106913
  if (collapsedOverlaps.length === 1) {
106882
106914
  collapsedOverlaps.push(secondOverlap);
106883
106915
  return collapsedOverlaps;
106884
106916
  } else {
106885
- collapsedOverlaps = collapseOverlapsGeneratedFromRangeComparisonIfPossible([secondOverlap, thirdOverlap], sequenceLength, optionalOriginalRange);
106917
+ collapsedOverlaps = collapseOverlapsGeneratedFromRangeComparisonIfPossible(
106918
+ [secondOverlap, thirdOverlap],
106919
+ sequenceLength,
106920
+ optionalOriginalRange
106921
+ );
106886
106922
  if (collapsedOverlaps.length === 1) {
106887
106923
  collapsedOverlaps.push(firstOverlap);
106888
106924
  return collapsedOverlaps;
@@ -106904,11 +106940,18 @@ function convertRangeIndices(range, inputType, outputType) {
106904
106940
  }
106905
106941
 
106906
106942
  function convertRangeTo0Based(range) {
106907
- return convertRangeIndices(range, { inclusive1BasedStart: true, inclusive1BasedEnd: true });
106943
+ return convertRangeIndices(range, {
106944
+ inclusive1BasedStart: true,
106945
+ inclusive1BasedEnd: true
106946
+ });
106908
106947
  }
106909
106948
 
106910
106949
  function convertRangeTo1Based(range) {
106911
- return convertRangeIndices(range, {}, { inclusive1BasedStart: true, inclusive1BasedEnd: true });
106950
+ return convertRangeIndices(
106951
+ range,
106952
+ {},
106953
+ { inclusive1BasedStart: true, inclusive1BasedEnd: true }
106954
+ );
106912
106955
  }
106913
106956
 
106914
106957
  function provideInclusiveOptions(funToWrap) {
@@ -107013,7 +107056,11 @@ function expandOrContractCircularRangeToPosition(range, position, maxLength) {
107013
107056
  let endMoved = true;
107014
107057
  if (range.end >= position) {
107015
107058
  if (position + maxLength - range.start > range.end - position) {
107016
- newRange.end = normalizePositionByRangeLength(position - 1, maxLength, false);
107059
+ newRange.end = normalizePositionByRangeLength(
107060
+ position - 1,
107061
+ maxLength,
107062
+ false
107063
+ );
107017
107064
  } else {
107018
107065
  newRange.start = position;
107019
107066
  endMoved = false;
@@ -107086,19 +107133,31 @@ function expandOrContractRangeToPosition(range, position, maxLength) {
107086
107133
  if (range.start > range.end) {
107087
107134
  return expandOrContractCircularRangeToPosition(range, position, maxLength);
107088
107135
  } else {
107089
- return expandOrContractNonCircularRangeToPosition(range, position);
107136
+ return expandOrContractNonCircularRangeToPosition(
107137
+ range,
107138
+ position);
107090
107139
  }
107091
107140
  }
107092
107141
 
107093
107142
  function translateRange(rangeToBeAdjusted, translateBy, rangeLength) {
107094
107143
  return lodashExports.assign({}, rangeToBeAdjusted, {
107095
- start: normalizePositionByRangeLength(rangeToBeAdjusted.start + translateBy, rangeLength),
107096
- end: normalizePositionByRangeLength(rangeToBeAdjusted.end + translateBy, rangeLength)
107144
+ start: normalizePositionByRangeLength(
107145
+ rangeToBeAdjusted.start + translateBy,
107146
+ rangeLength
107147
+ ),
107148
+ end: normalizePositionByRangeLength(
107149
+ rangeToBeAdjusted.end + translateBy,
107150
+ rangeLength
107151
+ )
107097
107152
  });
107098
107153
  }
107099
107154
 
107100
107155
  function flipRelativeRange(innerRange, outerRange, sequenceLength, options) {
107101
- const isFullyContained = isRangeWithinRange(innerRange, outerRange, sequenceLength);
107156
+ const isFullyContained = isRangeWithinRange(
107157
+ innerRange,
107158
+ outerRange,
107159
+ sequenceLength
107160
+ );
107102
107161
  if (isFullyContained) {
107103
107162
  return flipFullyContainedRange(innerRange, outerRange, sequenceLength);
107104
107163
  } else {
@@ -107106,40 +107165,91 @@ function flipRelativeRange(innerRange, outerRange, sequenceLength, options) {
107106
107165
  }
107107
107166
  }
107108
107167
  function flipNonFullyContainedRange(innerRange, outerRange, sequenceLength, options) {
107109
- const outerFullyContained = isRangeWithinRange(outerRange, innerRange, sequenceLength);
107168
+ const outerFullyContained = isRangeWithinRange(
107169
+ outerRange,
107170
+ innerRange,
107171
+ sequenceLength
107172
+ );
107110
107173
  let flippedInnerRange;
107111
107174
  if (outerFullyContained) {
107112
- const expandBy1 = getRangeLength({
107113
- start: innerRange.start,
107114
- end: outerRange.start
107115
- }, sequenceLength) - 1;
107116
- flippedInnerRange = expandOrContractRangeByLength(outerRange, expandBy1, false, sequenceLength);
107117
- const expandBy2 = getRangeLength({
107118
- end: innerRange.end,
107119
- start: outerRange.end
107120
- }, sequenceLength) - 1;
107121
- flippedInnerRange = expandOrContractRangeByLength(flippedInnerRange, expandBy2, true, sequenceLength);
107175
+ const expandBy1 = getRangeLength(
107176
+ {
107177
+ start: innerRange.start,
107178
+ end: outerRange.start
107179
+ },
107180
+ sequenceLength
107181
+ ) - 1;
107182
+ flippedInnerRange = expandOrContractRangeByLength(
107183
+ outerRange,
107184
+ expandBy1,
107185
+ false,
107186
+ sequenceLength
107187
+ );
107188
+ const expandBy2 = getRangeLength(
107189
+ {
107190
+ end: innerRange.end,
107191
+ start: outerRange.end
107192
+ },
107193
+ sequenceLength
107194
+ ) - 1;
107195
+ flippedInnerRange = expandOrContractRangeByLength(
107196
+ flippedInnerRange,
107197
+ expandBy2,
107198
+ true,
107199
+ sequenceLength
107200
+ );
107122
107201
  } else {
107123
- const overlaps = getOverlapsOfPotentiallyCircularRanges(innerRange, outerRange, sequenceLength);
107202
+ const overlaps = getOverlapsOfPotentiallyCircularRanges(
107203
+ innerRange,
107204
+ outerRange,
107205
+ sequenceLength
107206
+ );
107124
107207
  if (overlaps.length >= 1) {
107125
107208
  let overlapExtendsForward;
107126
107209
  const firstOverlap = overlaps[0];
107127
107210
  overlapExtendsForward = firstOverlap.start !== outerRange.start;
107128
- const flippedTruncatedInner = flipFullyContainedRange(firstOverlap, outerRange, sequenceLength);
107211
+ const flippedTruncatedInner = flipFullyContainedRange(
107212
+ firstOverlap,
107213
+ outerRange,
107214
+ sequenceLength
107215
+ );
107129
107216
  const lengthToExtend = getRangeLength(innerRange, sequenceLength) - getRangeLength(flippedTruncatedInner, sequenceLength);
107130
- flippedInnerRange = expandOrContractRangeByLength(flippedTruncatedInner, lengthToExtend, overlapExtendsForward, sequenceLength);
107217
+ flippedInnerRange = expandOrContractRangeByLength(
107218
+ flippedTruncatedInner,
107219
+ lengthToExtend,
107220
+ overlapExtendsForward,
107221
+ sequenceLength
107222
+ );
107131
107223
  } else {
107132
- throw new Error("This case (relative ranges that do not overlap) is unsupported! ");
107224
+ throw new Error(
107225
+ "This case (relative ranges that do not overlap) is unsupported! "
107226
+ );
107133
107227
  }
107134
107228
  }
107135
107229
  return flippedInnerRange;
107136
107230
  }
107137
107231
  function flipFullyContainedRange(innerRange, outerRange, sequenceLength, options) {
107138
107232
  const translateBy = -outerRange.start;
107139
- const translatedOuterRange = translateRange(outerRange, translateBy, sequenceLength);
107140
- const translatedInnerRange = translateRange(innerRange, translateBy, sequenceLength);
107141
- const translatedFlippedInnerRange = flipNonOriginSpanningContainedRange(translatedInnerRange, translatedOuterRange, sequenceLength);
107142
- const flippedInnerRange = translateRange(translatedFlippedInnerRange, -translateBy, sequenceLength);
107233
+ const translatedOuterRange = translateRange(
107234
+ outerRange,
107235
+ translateBy,
107236
+ sequenceLength
107237
+ );
107238
+ const translatedInnerRange = translateRange(
107239
+ innerRange,
107240
+ translateBy,
107241
+ sequenceLength
107242
+ );
107243
+ const translatedFlippedInnerRange = flipNonOriginSpanningContainedRange(
107244
+ translatedInnerRange,
107245
+ translatedOuterRange,
107246
+ sequenceLength
107247
+ );
107248
+ const flippedInnerRange = translateRange(
107249
+ translatedFlippedInnerRange,
107250
+ -translateBy,
107251
+ sequenceLength
107252
+ );
107143
107253
  return flippedInnerRange;
107144
107254
  }
107145
107255
  function flipNonOriginSpanningContainedRange(innerRange, outerRange, sequenceLength) {
@@ -107311,9 +107421,15 @@ function trimNumberToFitWithin0ToAnotherNumber(numberToBeTrimmed, max) {
107311
107421
  }
107312
107422
 
107313
107423
  function zeroSubrangeByContainerRange(subRange, containerRange, sequenceLength) {
107314
- const trimmedSubRange = trimRangeByAnotherRange(subRange, containerRange, sequenceLength);
107424
+ const trimmedSubRange = trimRangeByAnotherRange(
107425
+ subRange,
107426
+ containerRange,
107427
+ sequenceLength
107428
+ );
107315
107429
  if (trimmedSubRange) {
107316
- throw new Error("subRange must be fully contained by containerRange! Otherwise this function does not make sense");
107430
+ throw new Error(
107431
+ "subRange must be fully contained by containerRange! Otherwise this function does not make sense"
107432
+ );
107317
107433
  }
107318
107434
  const newSubrange = {};
107319
107435
  newSubrange.start = subRange.start - containerRange.start;
@@ -107340,12 +107456,24 @@ function modulo(n, m) {
107340
107456
  }
107341
107457
 
107342
107458
  function getZeroedRangeOverlaps(annotation, selection, sequenceLength) {
107343
- const overlaps = collapseOverlapsGeneratedFromRangeComparisonIfPossible(getOverlapsOfPotentiallyCircularRanges(annotation, selection, sequenceLength), sequenceLength, annotation);
107459
+ const overlaps = collapseOverlapsGeneratedFromRangeComparisonIfPossible(
107460
+ getOverlapsOfPotentiallyCircularRanges(
107461
+ annotation,
107462
+ selection,
107463
+ sequenceLength
107464
+ ),
107465
+ sequenceLength,
107466
+ annotation
107467
+ );
107344
107468
  const zeroedOverlaps = overlaps.map((overlap) => {
107345
- return zeroSubrangeByContainerRange(overlap, {
107346
- start: selection.start,
107347
- end: normalizePositionByRangeLength(selection.start - 1, sequenceLength)
107348
- }, sequenceLength);
107469
+ return zeroSubrangeByContainerRange(
107470
+ overlap,
107471
+ {
107472
+ start: selection.start,
107473
+ end: normalizePositionByRangeLength(selection.start - 1, sequenceLength)
107474
+ },
107475
+ sequenceLength
107476
+ );
107349
107477
  });
107350
107478
  return zeroedOverlaps;
107351
107479
  }
@@ -114051,7 +114179,7 @@ const calcTmMethods = {
114051
114179
  calculateTemperature: function(sequence, type, A, R, C, Na) {
114052
114180
  if (typeof type === "undefined") {
114053
114181
  type = this.TABLE_BRESLAUER;
114054
- } else if (type != this.TABLE_BRESLAUER && (type != this.TABLE_UNIFIED && type != this.TABLE_SUGIMOTO)) {
114182
+ } else if (type != this.TABLE_BRESLAUER && type != this.TABLE_UNIFIED && type != this.TABLE_SUGIMOTO) {
114055
114183
  throw new Error("Invalid table type!");
114056
114184
  }
114057
114185
  if (!A) {
@@ -122310,12 +122438,7 @@ function findSequenceMatches(sequence, searchString, options = {}) {
122310
122438
  return matches;
122311
122439
  }
122312
122440
  function findSequenceMatchesTopStrand(sequence, searchString, options = {}) {
122313
- const {
122314
- isCircular,
122315
- isAmbiguous,
122316
- isProteinSequence,
122317
- isProteinSearch
122318
- } = options;
122441
+ const { isCircular, isAmbiguous, isProteinSequence, isProteinSearch } = options;
122319
122442
  let searchStringToUse = escapeStringRegexp(searchString);
122320
122443
  if (isAmbiguous) {
122321
122444
  if (isProteinSearch || isProteinSequence) {
@@ -122397,7 +122520,10 @@ function convertAmbiguousStringToRegex(string, isProtein) {
122397
122520
 
122398
122521
  function getComplementSequenceString(sequence, isRna) {
122399
122522
  let complementSeqString = "";
122400
- const complementMap = lodashExports.merge(DNAComplementMap, isRna ? { a: "u", A: "U" } : { a: "t", A: "T" });
122523
+ const complementMap = lodashExports.merge(
122524
+ DNAComplementMap,
122525
+ isRna ? { a: "u", A: "U" } : { a: "t", A: "T" }
122526
+ );
122401
122527
  for (let i = 0; i < sequence.length; i++) {
122402
122528
  let complementChar = complementMap[sequence[i]];
122403
122529
  if (!complementChar) {
@@ -135068,10 +135194,7 @@ async function geneiousXmlToJson(string, options) {
135068
135194
  });
135069
135195
  }
135070
135196
  });
135071
- const toRet = lodashExports.filter(
135072
- resultArray,
135073
- (r) => r?.parsedSequence?.sequence?.length
135074
- );
135197
+ const toRet = lodashExports.filter(resultArray, (r) => r?.parsedSequence?.sequence?.length);
135075
135198
  if (toRet.length)
135076
135199
  return toRet;
135077
135200
  return onFileParsed(resultArray);
@@ -135173,10 +135296,7 @@ async function jbeiXmlToJson(string, options) {
135173
135296
  messages: ["Error while parsing JBEI format"]
135174
135297
  });
135175
135298
  }
135176
- const toRet = lodashExports.filter(
135177
- resultArray,
135178
- (r) => r?.parsedSequence?.sequence?.length
135179
- );
135299
+ const toRet = lodashExports.filter(resultArray, (r) => r?.parsedSequence?.sequence?.length);
135180
135300
  if (toRet.length)
135181
135301
  return toRet;
135182
135302
  return onFileParsed(resultArray);
@@ -138451,10 +138571,7 @@ const lastSavedId$1 = /*#__PURE__*/Object.freeze(/*#__PURE__*/Object.definePrope
138451
138571
  lastSavedIdUpdate
138452
138572
  }, Symbol.toStringTag, { value: 'Module' }));
138453
138573
 
138454
- const toggleReadOnlyMode = createMetaAction(
138455
- "TOGGLE_READ_ONLY_MODE",
138456
- lodashExports.noop
138457
- );
138574
+ const toggleReadOnlyMode = createMetaAction("TOGGLE_READ_ONLY_MODE", lodashExports.noop);
138458
138575
  const updateReadOnlyMode = createMetaAction("UPDATE_READ_ONLY_MODE");
138459
138576
  const readOnly = createReducer(
138460
138577
  {
@@ -142167,6 +142284,9 @@ function showAddOrEditAnnotationDialog({
142167
142284
  overrideName: `AddOrEdit${nameUpper}DialogOverride`,
142168
142285
  dialogType,
142169
142286
  props: {
142287
+ ...annotation.isEditLocked && {
142288
+ readOnly: typeof annotation.isEditLocked === "string" ? annotation.isEditLocked : "This annotation is locked"
142289
+ },
142170
142290
  dialogProps: {
142171
142291
  title: annotation && annotation.id ? `Edit ${nameUpper}` : `New ${nameUpper}`
142172
142292
  },
@@ -142808,7 +142928,8 @@ function mapStateToProps(state, ownProps) {
142808
142928
  editorName,
142809
142929
  sequenceData: sequenceDataFromProps,
142810
142930
  allowSeqDataOverride,
142811
- allowMultipleFeatureDirections
142931
+ allowMultipleFeatureDirections,
142932
+ readOnly
142812
142933
  } = ownProps;
142813
142934
  const editorState = getEditorState(state, editorName);
142814
142935
  const meta = { editorName };
@@ -142868,6 +142989,7 @@ function mapStateToProps(state, ownProps) {
142868
142989
  const f = getFindTool(findTool, matchesTotal);
142869
142990
  return {
142870
142991
  ...editorState,
142992
+ readOnly: readOnly || editorState.readOnly,
142871
142993
  meta,
142872
142994
  annotationToAdd,
142873
142995
  ...newSelection && { selectionLayer: newSelection },
@@ -161052,7 +161174,7 @@ function showFileDialog({ multiple = false, onSelect }) {
161052
161174
  }
161053
161175
 
161054
161176
  const name = "@teselagen/ove";
161055
- const version = "0.3.10";
161177
+ const version = "0.3.11";
161056
161178
  const main = "./src/index.js";
161057
161179
  const exports$1 = {
161058
161180
  ".": {
@@ -161662,7 +161784,7 @@ const fileCommandDefs = {
161662
161784
  isHidden: isProtein
161663
161785
  },
161664
161786
  deleteSequence: {
161665
- isDisabled: (props) => props.readOnly && readOnlyDisabledTooltip || !props.onDelete,
161787
+ isDisabled: (props) => props.disableBpEditing && bpEditingDisabledTooltip || props.readOnly && readOnlyDisabledTooltip || !props.onDelete,
161666
161788
  isHidden: (props) => !props.onDelete,
161667
161789
  handler: (props) => props.onDelete(props.sequenceData)
161668
161790
  },
@@ -161861,6 +161983,7 @@ Object.keys(defaultCopyOptions).forEach((type) => {
161861
161983
  };
161862
161984
  });
161863
161985
  const readOnlyDisabledTooltip = "Sorry this function is not allowed in Read-Only Mode";
161986
+ const bpEditingDisabledTooltip = "Sequence Editing Disabled";
161864
161987
  const noSelection = ({ selectionLayer = {} }) => !(selectionLayer.start > -1 && selectionLayer.end > -1) && "Selection Required";
161865
161988
  const triggerClipboardCommand = (type) => {
161866
161989
  const wrapper = document.querySelector(".veVectorInteractionWrapper");
@@ -161892,8 +162015,8 @@ const editCommandDefs = {
161892
162015
  handler: lodashExports.noop
161893
162016
  },
161894
162017
  cut: {
161895
- isDisabled: (props) => props.readOnly && readOnlyDisabledTooltip || props.sequenceLength === 0,
161896
- isHidden: (props) => props.readOnly,
162018
+ isDisabled: (props) => props.disableBpEditing && bpEditingDisabledTooltip || props.readOnly && readOnlyDisabledTooltip || props.sequenceLength === 0,
162019
+ isHidden: (props) => props.readOnly || props.disableBpEditing,
161897
162020
  handler: () => {
161898
162021
  triggerClipboardCommand("cut");
161899
162022
  },
@@ -161918,7 +162041,7 @@ const editCommandDefs = {
161918
162041
  },
161919
162042
  paste: {
161920
162043
  isDisabled: (props) => props.readOnly && readOnlyDisabledTooltip,
161921
- isHidden: (props) => props.readOnly,
162044
+ isHidden: (props) => props.readOnly || props.disableBpEditing,
161922
162045
  handler: () => triggerClipboardCommand("paste"),
161923
162046
  hotkey: "mod+v"
161924
162047
  },
@@ -162072,12 +162195,12 @@ const editCommandDefs = {
162072
162195
  hotkey: "mod+i"
162073
162196
  },
162074
162197
  complementSelection: {
162075
- isHidden: (props) => props.readOnly || isProtein(props),
162198
+ isHidden: (props) => props.readOnly || isProtein(props) || props.disableBpEditing,
162076
162199
  isDisabled: (props) => props.readOnly && readOnlyDisabledTooltip || noSelection(props),
162077
162200
  handler: (props) => props.handleComplementSelection()
162078
162201
  },
162079
162202
  complementEntireSequence: {
162080
- isHidden: (props) => props.readOnly || isProtein(props),
162203
+ isHidden: (props) => props.readOnly || isProtein(props) || props.disableBpEditing,
162081
162204
  isDisabled: (props) => props.readOnly && readOnlyDisabledTooltip || props.sequenceLength === 0,
162082
162205
  handler: (props) => props.handleComplementSequence()
162083
162206
  },
@@ -162229,13 +162352,13 @@ const editCommandDefs = {
162229
162352
  // }
162230
162353
  // },
162231
162354
  reverseComplementSelection: {
162232
- isDisabled: (props) => props.readOnly && readOnlyDisabledTooltip || noSelection(props),
162355
+ isDisabled: (props) => props.readOnly && readOnlyDisabledTooltip || noSelection(props) || props.disableBpEditing,
162233
162356
  isHidden: (props) => props.readOnly || isProtein(props),
162234
162357
  handler: (props) => props.handleReverseComplementSelection(),
162235
162358
  hotkey: "mod+e"
162236
162359
  },
162237
162360
  reverseComplementEntireSequence: {
162238
- isHidden: (props) => props.readOnly || isProtein(props),
162361
+ isHidden: (props) => props.readOnly || isProtein(props) || props.disableBpEditing,
162239
162362
  isDisabled: (props) => props.readOnly && readOnlyDisabledTooltip || props.sequenceLength === 0,
162240
162363
  handler: (props) => props.handleReverseComplementSequence()
162241
162364
  },
@@ -162385,7 +162508,7 @@ const editCommandDefs = {
162385
162508
  isDisabled: (props) => props.readOnly && readOnlyDisabledTooltip || props.sequenceLength === 0
162386
162509
  },
162387
162510
  rotateToCaretPosition: {
162388
- isHidden: (props) => props.readOnly || isProtein(props),
162511
+ isHidden: (props) => props.readOnly || isProtein(props) || props.disableBpEditing,
162389
162512
  isDisabled: (props) => props.readOnly && readOnlyDisabledTooltip || props.caretPosition === -1 && "You must first place cursor" || !props.sequenceData.circular && "Disabled for Linear Sequences" || props.sequenceLength === 0,
162390
162513
  handler: (props) => props.handleRotateToCaretPosition(),
162391
162514
  hotkey: "mod+b"
@@ -162394,13 +162517,13 @@ const editCommandDefs = {
162394
162517
  };
162395
162518
  const cirularityCommandDefs = {
162396
162519
  circular: {
162397
- isHidden: (props) => props.readOnly || isProtein(props),
162520
+ isHidden: (props) => props.readOnly || isProtein(props) || props.disableBpEditing,
162398
162521
  isDisabled: (props) => props.readOnly && readOnlyDisabledTooltip,
162399
162522
  handler: (props) => props.updateCircular(true),
162400
162523
  isActive: (props) => props && props.sequenceData.circular
162401
162524
  },
162402
162525
  linear: {
162403
- isHidden: (props) => props.readOnly,
162526
+ isHidden: (props) => props.readOnly || props.disableBpEditing,
162404
162527
  isDisabled: (props) => props.readOnly && readOnlyDisabledTooltip,
162405
162528
  handler: (props) => props.updateCircular(false),
162406
162529
  isActive: (props) => props && !props.sequenceData.circular
@@ -162427,29 +162550,27 @@ const nicheAnnotations = [
162427
162550
  }
162428
162551
  ];
162429
162552
  const labelToggleCommandDefs = {};
162430
- ["feature", "part", "cutsite", "primer", ...nicheAnnotations].forEach(
162431
- (_type) => {
162432
- let rest = {};
162433
- let type = _type;
162434
- if (_type.type) {
162435
- type = _type.type.slice(0, -1);
162436
- rest = _type;
162437
- }
162438
- const cmdId = `toggle${lodashExports.upperFirst(type)}Labels`;
162439
- const plural = type + "s";
162440
- labelToggleCommandDefs[cmdId] = {
162441
- toggle: ["show", "hide"],
162442
- handler: (props) => props.annotationLabelVisibilityToggle(plural),
162443
- isHidden: (props) => {
162444
- return props && props.typesToOmit && props.typesToOmit[plural] === false;
162445
- },
162446
- ...rest,
162447
- isActive: (props) => {
162448
- return props && props.annotationLabelVisibility[plural];
162449
- }
162450
- };
162451
- }
162452
- );
162553
+ ["feature", "part", "cutsite", "primer", ...nicheAnnotations].forEach((_type) => {
162554
+ let rest = {};
162555
+ let type = _type;
162556
+ if (_type.type) {
162557
+ type = _type.type.slice(0, -1);
162558
+ rest = _type;
162559
+ }
162560
+ const cmdId = `toggle${lodashExports.upperFirst(type)}Labels`;
162561
+ const plural = type + "s";
162562
+ labelToggleCommandDefs[cmdId] = {
162563
+ toggle: ["show", "hide"],
162564
+ handler: (props) => props.annotationLabelVisibilityToggle(plural),
162565
+ isHidden: (props) => {
162566
+ return props && props.typesToOmit && props.typesToOmit[plural] === false;
162567
+ },
162568
+ ...rest,
162569
+ isActive: (props) => {
162570
+ return props && props.annotationLabelVisibility[plural];
162571
+ }
162572
+ };
162573
+ });
162453
162574
  const editAnnotationCommandDefs = ["feature", "part", "primer"].reduce(
162454
162575
  (acc, key) => {
162455
162576
  acc[`edit${lodashExports.upperFirst(key)}`] = {
@@ -166638,8 +166759,12 @@ function VectorInteractionHOC(Component) {
166638
166759
  caretPosition = -1,
166639
166760
  selectionLayer = { start: -1, end: -1 },
166640
166761
  readOnly,
166641
- onPaste
166762
+ onPaste,
166763
+ disableBpEditing
166642
166764
  } = this.props;
166765
+ if (disableBpEditing) {
166766
+ return window.toastr.warning("Sorry the underlying sequence is locked");
166767
+ }
166643
166768
  if (readOnly) {
166644
166769
  return window.toastr.warning("Sorry the sequence is Read-Only");
166645
166770
  }
@@ -166680,6 +166805,7 @@ function VectorInteractionHOC(Component) {
166680
166805
  sequenceData,
166681
166806
  selectionLayer,
166682
166807
  copyOptions,
166808
+ disableBpEditing,
166683
166809
  readOnly
166684
166810
  } = this.props;
166685
166811
  const onCut = this.props.onCut || this.props.onCopy || lodashExports.noop;
@@ -166705,7 +166831,7 @@ function VectorInteractionHOC(Component) {
166705
166831
  );
166706
166832
  if (!(this.sequenceDataToCopy || {}).textToCopy && !seqData.sequence.length)
166707
166833
  return window.toastr.warning(
166708
- `No Sequence Selected To ${isCut && !readOnly ? "Cut" : "Copy"}`
166834
+ `No Sequence Selected To ${isCut && !(readOnly || disableBpEditing) ? "Cut" : "Copy"}`
166709
166835
  );
166710
166836
  const clipboardData = e.clipboardData;
166711
166837
  const textToCopy = (this.sequenceDataToCopy || {}).textToCopy !== void 0 ? this.sequenceDataToCopy.textToCopy : seqData.isProtein ? seqData.proteinSequence : seqData.sequence;
@@ -166713,7 +166839,7 @@ function VectorInteractionHOC(Component) {
166713
166839
  clipboardData.setData("text/plain", textToCopy);
166714
166840
  clipboardData.setData("application/json", JSON.stringify(seqData));
166715
166841
  e.preventDefault();
166716
- if (isCut && !readOnly) {
166842
+ if (isCut && !(readOnly || disableBpEditing) && !disableBpEditing) {
166717
166843
  this.handleDnaDelete(false);
166718
166844
  onCut(
166719
166845
  e,
@@ -166726,7 +166852,7 @@ function VectorInteractionHOC(Component) {
166726
166852
  document.body.removeEventListener("copy", this.handleCopy);
166727
166853
  }
166728
166854
  window.toastr.success(
166729
- `Selection ${isCut && !readOnly ? "Cut" : "Copied"}`
166855
+ `Selection ${isCut && !(readOnly || disableBpEditing) && !disableBpEditing ? "Cut" : "Copied"}`
166730
166856
  );
166731
166857
  this.sequenceDataToCopy = void 0;
166732
166858
  };
@@ -166737,14 +166863,18 @@ function VectorInteractionHOC(Component) {
166737
166863
  caretPosition = -1,
166738
166864
  selectionLayer = { start: -1, end: -1 },
166739
166865
  sequenceData = { sequence: "" },
166740
- readOnly
166866
+ readOnly,
166867
+ disableBpEditing
166741
166868
  // updateSequenceData,
166742
166869
  // wrappedInsertSequenceDataAtPositionOrRange
166743
166870
  // handleInsert
166744
166871
  } = this.props;
166745
166872
  const sequenceLength = sequenceData.sequence.length;
166746
166873
  const isReplace = selectionLayer.start > -1;
166747
- if (readOnly) {
166874
+ if (disableBpEditing) {
166875
+ return window.toastr.warning("Sorry the underlying sequence is locked");
166876
+ }
166877
+ if (readOnly || disableBpEditing) {
166748
166878
  window.toastr.warning("Sorry the sequence is Read-Only");
166749
166879
  } else {
166750
166880
  createSequenceInputPopup({
@@ -166772,13 +166902,17 @@ function VectorInteractionHOC(Component) {
166772
166902
  selectionLayer = { start: -1, end: -1 },
166773
166903
  sequenceData = { sequence: "" },
166774
166904
  readOnly,
166905
+ disableBpEditing,
166775
166906
  updateSequenceData,
166776
166907
  wrappedInsertSequenceDataAtPositionOrRange,
166777
166908
  caretPositionUpdate
166778
166909
  // handleInsert
166779
166910
  } = this.props;
166780
166911
  const sequenceLength = sequenceData.sequence.length;
166781
- if (readOnly) {
166912
+ if (disableBpEditing) {
166913
+ return window.toastr.warning("Sorry the underlying sequence is locked");
166914
+ }
166915
+ if (readOnly || disableBpEditing) {
166782
166916
  return window.toastr.warning("Sorry the sequence is Read-Only");
166783
166917
  }
166784
166918
  if (sequenceLength > 0) {
@@ -166909,7 +167043,7 @@ function VectorInteractionHOC(Component) {
166909
167043
  };
166910
167044
  // eslint-disable-next-line no-unused-vars
166911
167045
  getCopyOptions = (annotation) => {
166912
- const { sequenceData, readOnly, selectionLayer } = this.props;
167046
+ const { sequenceData, readOnly, disableBpEditing, selectionLayer } = this.props;
166913
167047
  const { isProtein } = sequenceData;
166914
167048
  const makeTextCopyable = (transformFunc, className, action = "copy") => {
166915
167049
  return new Clipboard$1(`.${className}`, {
@@ -166969,7 +167103,7 @@ function VectorInteractionHOC(Component) {
166969
167103
  }
166970
167104
  };
166971
167105
  return [
166972
- ...readOnly ? [] : [
167106
+ ...readOnly || disableBpEditing ? [] : [
166973
167107
  {
166974
167108
  text: "Replace",
166975
167109
  ...this.insertHelper
@@ -167043,21 +167177,14 @@ function VectorInteractionHOC(Component) {
167043
167177
  this.openVeCopyAAReverse && this.openVeCopyAAReverse.destroy();
167044
167178
  },
167045
167179
  didMount: ({ className }) => {
167046
- this.openVeCopyAAReverse = makeTextCopyable(
167047
- (selectedSeqData) => {
167048
- const revSeqData = getReverseComplementSequenceAndAnnoations(
167049
- selectedSeqData
167050
- );
167051
- const textToCopy = isProtein ? revSeqData.proteinSequence.toUpperCase() : getAminoAcidStringFromSequenceString(
167052
- revSeqData.sequence
167053
- );
167054
- return {
167055
- ...revSeqData,
167056
- textToCopy
167057
- };
167058
- },
167059
- className
167060
- );
167180
+ this.openVeCopyAAReverse = makeTextCopyable((selectedSeqData) => {
167181
+ const revSeqData = getReverseComplementSequenceAndAnnoations(selectedSeqData);
167182
+ const textToCopy = isProtein ? revSeqData.proteinSequence.toUpperCase() : getAminoAcidStringFromSequenceString(revSeqData.sequence);
167183
+ return {
167184
+ ...revSeqData,
167185
+ textToCopy
167186
+ };
167187
+ }, className);
167061
167188
  }
167062
167189
  },
167063
167190
  {
@@ -167164,11 +167291,12 @@ function VectorInteractionHOC(Component) {
167164
167291
  ({ nearestCaretPos, shiftHeld, event }) => {
167165
167292
  this.updateSelectionOrCaret(shiftHeld, nearestCaretPos);
167166
167293
  const {
167167
- readOnly
167294
+ readOnly,
167295
+ disableBpEditing
167168
167296
  // sequenceData: { circular }
167169
167297
  } = this.props;
167170
167298
  const menu = [
167171
- ...readOnly ? [] : [
167299
+ ...readOnly || disableBpEditing ? [] : [
167172
167300
  {
167173
167301
  text: "Insert",
167174
167302
  ...this.insertHelper
@@ -167214,8 +167342,7 @@ function VectorInteractionHOC(Component) {
167214
167342
  overlapsSelf: annotation.overlapsSelf
167215
167343
  });
167216
167344
  return [
167217
- "editPart",
167218
- "deletePart",
167345
+ ...getEditDeleteHandlers("Part", annotation),
167219
167346
  "--",
167220
167347
  ...this.getSelectionMenuOptions(annotation),
167221
167348
  "--",
@@ -167257,8 +167384,7 @@ function VectorInteractionHOC(Component) {
167257
167384
  event.persist();
167258
167385
  const { readOnly, annotationsToSupport: { parts } = {} } = this.props;
167259
167386
  return [
167260
- "editFeature",
167261
- "deleteFeature",
167387
+ ...getEditDeleteHandlers("Feature", annotation),
167262
167388
  ...this.getSelectionMenuOptions(annotation),
167263
167389
  ...readOnly ? [] : [
167264
167390
  ...parts && [
@@ -167325,8 +167451,7 @@ function VectorInteractionHOC(Component) {
167325
167451
  end: annotation.end
167326
167452
  });
167327
167453
  return [
167328
- "editPrimer",
167329
- "deletePrimer",
167454
+ ...getEditDeleteHandlers("Primer", annotation),
167330
167455
  ...this.getSelectionMenuOptions(annotation),
167331
167456
  "showRemoveDuplicatesDialogPrimers",
167332
167457
  "viewPrimerProperties"
@@ -167536,6 +167661,28 @@ const insertAndSelectHelper = ({ seqDataToInsert, props }) => {
167536
167661
  end: newSelectionLayerEnd % newSeqData.sequence.length
167537
167662
  });
167538
167663
  };
167664
+ function getEditDeleteHandlers(type, annotation) {
167665
+ return [
167666
+ ...annotation.isEditLocked ? [
167667
+ {
167668
+ shouldDismissPopover: false,
167669
+ text: /* @__PURE__ */ React$3.createElement(
167670
+ "div",
167671
+ {
167672
+ style: {
167673
+ fontSize: 11,
167674
+ fontStyle: "italic",
167675
+ color: "rgba(0,0,0,.5)"
167676
+ }
167677
+ },
167678
+ typeof annotation.isEditLocked === "string" ? annotation.isEditLocked : `Note: This Annotation is Locked`
167679
+ )
167680
+ }
167681
+ ] : [],
167682
+ `edit${type}`,
167683
+ ...annotation.isEditLocked ? [] : [`delete${type}`]
167684
+ ];
167685
+ }
167539
167686
 
167540
167687
  const style$i = '';
167541
167688
 
@@ -174693,7 +174840,11 @@ const GoToDialog = createSimpleDialog({
174693
174840
  }
174694
174841
  }
174695
174842
  ],
174696
- withDialogProps: { title: "Go To", height: 190, onCloseHook: tryToRefocusEditor }
174843
+ withDialogProps: {
174844
+ title: "Go To",
174845
+ height: 190,
174846
+ onCloseHook: tryToRefocusEditor
174847
+ }
174697
174848
  });
174698
174849
 
174699
174850
  const validate$1 = (val, vals, props) => {
@@ -177353,6 +177504,7 @@ class AddOrEditAnnotationDialog extends React$3.Component {
177353
177504
  overlapsSelf,
177354
177505
  start,
177355
177506
  end,
177507
+ readOnly,
177356
177508
  getAdditionalEditAnnotationComps,
177357
177509
  advancedOptions,
177358
177510
  advancedDefaultOpen,
@@ -177447,10 +177599,11 @@ class AddOrEditAnnotationDialog extends React$3.Component {
177447
177599
  "tg-upsert-annotation"
177448
177600
  )
177449
177601
  },
177602
+ typeof readOnly === "string" ? /* @__PURE__ */ React$3.createElement(core$5.Callout, { intent: "primary", style: { marginBottom: 10 } }, readOnly) : null,
177450
177603
  /* @__PURE__ */ React$3.createElement(
177451
177604
  InputField,
177452
177605
  {
177453
- disabled: this.props.readOnly,
177606
+ disabled: readOnly,
177454
177607
  inlineLabel: true,
177455
177608
  tooltipError: true,
177456
177609
  autoFocus: true,
@@ -180388,15 +180541,15 @@ class Browser {
180388
180541
  }
180389
180542
  // Edge 20+
180390
180543
  static isEdge() {
180391
- return Browser.isBrowser() && (!Browser.isIE() && !!window.StyleMedia);
180544
+ return Browser.isBrowser() && !Browser.isIE() && !!window.StyleMedia;
180392
180545
  }
180393
180546
  // Chrome 1+
180394
180547
  static isChrome() {
180395
- return Browser.isBrowser() && (!!window.chrome && !!window.chrome.webstore);
180548
+ return Browser.isBrowser() && !!window.chrome && !!window.chrome.webstore;
180396
180549
  }
180397
180550
  // Blink engine detection
180398
180551
  static isBlink() {
180399
- return Browser.isBrowser() && ((Browser.isChrome() || Browser.isOpera()) && !!window.CSS);
180552
+ return Browser.isBrowser() && (Browser.isChrome() || Browser.isOpera()) && !!window.CSS;
180400
180553
  }
180401
180554
  static getUserAgent() {
180402
180555
  return typeof navigator === "undefined" ? "" : navigator.userAgent;
@@ -182989,6 +183142,8 @@ const userDefinedHandlersAndOpts = [
182989
183142
  "hideSingleImport",
182990
183143
  "beforeAnnotationCreate",
182991
183144
  "disableSetReadOnly",
183145
+ "allowAnnotationEditLocking",
183146
+ "disableBpEditing",
182992
183147
  "showReadOnly",
182993
183148
  "showCircularity",
182994
183149
  "onHiddenEnzymeAdd",
@@ -184402,9 +184557,7 @@ const genericAnnotationProperties = ({
184402
184557
  core$5.AnchorButton,
184403
184558
  {
184404
184559
  onClick: () => {
184405
- deleteAnnotation(
184406
- annotationPropertiesSelectedEntities
184407
- );
184560
+ deleteAnnotation(annotationPropertiesSelectedEntities);
184408
184561
  },
184409
184562
  className: "tgDeleteAnnsBtn",
184410
184563
  intent: "danger",