@teselagen/ove 0.8.28 → 0.8.30

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.
package/index.es.js CHANGED
@@ -9237,6 +9237,195 @@ function DialogFooter({
9237
9237
  );
9238
9238
  }
9239
9239
  __name(DialogFooter, "DialogFooter");
9240
+ var NOT_FOUND = "NOT_FOUND";
9241
+ function createSingletonCache(equals) {
9242
+ var entry;
9243
+ return {
9244
+ get: /* @__PURE__ */ __name(function get7(key) {
9245
+ if (entry && equals(entry.key, key)) {
9246
+ return entry.value;
9247
+ }
9248
+ return NOT_FOUND;
9249
+ }, "get"),
9250
+ put: /* @__PURE__ */ __name(function put(key, value) {
9251
+ entry = {
9252
+ key,
9253
+ value
9254
+ };
9255
+ }, "put"),
9256
+ getEntries: /* @__PURE__ */ __name(function getEntries() {
9257
+ return entry ? [entry] : [];
9258
+ }, "getEntries"),
9259
+ clear: /* @__PURE__ */ __name(function clear3() {
9260
+ entry = void 0;
9261
+ }, "clear")
9262
+ };
9263
+ }
9264
+ __name(createSingletonCache, "createSingletonCache");
9265
+ function createLruCache(maxSize, equals) {
9266
+ var entries2 = [];
9267
+ function get7(key) {
9268
+ var cacheIndex = entries2.findIndex(function(entry2) {
9269
+ return equals(key, entry2.key);
9270
+ });
9271
+ if (cacheIndex > -1) {
9272
+ var entry = entries2[cacheIndex];
9273
+ if (cacheIndex > 0) {
9274
+ entries2.splice(cacheIndex, 1);
9275
+ entries2.unshift(entry);
9276
+ }
9277
+ return entry.value;
9278
+ }
9279
+ return NOT_FOUND;
9280
+ }
9281
+ __name(get7, "get");
9282
+ function put(key, value) {
9283
+ if (get7(key) === NOT_FOUND) {
9284
+ entries2.unshift({
9285
+ key,
9286
+ value
9287
+ });
9288
+ if (entries2.length > maxSize) {
9289
+ entries2.pop();
9290
+ }
9291
+ }
9292
+ }
9293
+ __name(put, "put");
9294
+ function getEntries() {
9295
+ return entries2;
9296
+ }
9297
+ __name(getEntries, "getEntries");
9298
+ function clear3() {
9299
+ entries2 = [];
9300
+ }
9301
+ __name(clear3, "clear");
9302
+ return {
9303
+ get: get7,
9304
+ put,
9305
+ getEntries,
9306
+ clear: clear3
9307
+ };
9308
+ }
9309
+ __name(createLruCache, "createLruCache");
9310
+ var defaultEqualityCheck = /* @__PURE__ */ __name(function defaultEqualityCheck2(a2, b3) {
9311
+ return a2 === b3;
9312
+ }, "defaultEqualityCheck");
9313
+ function createCacheKeyComparator(equalityCheck) {
9314
+ return /* @__PURE__ */ __name(function areArgumentsShallowlyEqual(prev, next) {
9315
+ if (prev === null || next === null || prev.length !== next.length) {
9316
+ return false;
9317
+ }
9318
+ var length = prev.length;
9319
+ for (var i = 0; i < length; i++) {
9320
+ if (!equalityCheck(prev[i], next[i])) {
9321
+ return false;
9322
+ }
9323
+ }
9324
+ return true;
9325
+ }, "areArgumentsShallowlyEqual");
9326
+ }
9327
+ __name(createCacheKeyComparator, "createCacheKeyComparator");
9328
+ function defaultMemoize(func, equalityCheckOrOptions) {
9329
+ var providedOptions = typeof equalityCheckOrOptions === "object" ? equalityCheckOrOptions : {
9330
+ equalityCheck: equalityCheckOrOptions
9331
+ };
9332
+ var _providedOptions$equa = providedOptions.equalityCheck, equalityCheck = _providedOptions$equa === void 0 ? defaultEqualityCheck : _providedOptions$equa, _providedOptions$maxS = providedOptions.maxSize, maxSize = _providedOptions$maxS === void 0 ? 1 : _providedOptions$maxS, resultEqualityCheck = providedOptions.resultEqualityCheck;
9333
+ var comparator = createCacheKeyComparator(equalityCheck);
9334
+ var cache2 = maxSize === 1 ? createSingletonCache(comparator) : createLruCache(maxSize, comparator);
9335
+ function memoized() {
9336
+ var value = cache2.get(arguments);
9337
+ if (value === NOT_FOUND) {
9338
+ value = func.apply(null, arguments);
9339
+ if (resultEqualityCheck) {
9340
+ var entries2 = cache2.getEntries();
9341
+ var matchingEntry = entries2.find(function(entry) {
9342
+ return resultEqualityCheck(entry.value, value);
9343
+ });
9344
+ if (matchingEntry) {
9345
+ value = matchingEntry.value;
9346
+ }
9347
+ }
9348
+ cache2.put(arguments, value);
9349
+ }
9350
+ return value;
9351
+ }
9352
+ __name(memoized, "memoized");
9353
+ memoized.clearCache = function() {
9354
+ return cache2.clear();
9355
+ };
9356
+ return memoized;
9357
+ }
9358
+ __name(defaultMemoize, "defaultMemoize");
9359
+ function getDependencies(funcs) {
9360
+ var dependencies = Array.isArray(funcs[0]) ? funcs[0] : funcs;
9361
+ if (!dependencies.every(function(dep) {
9362
+ return typeof dep === "function";
9363
+ })) {
9364
+ var dependencyTypes = dependencies.map(function(dep) {
9365
+ return typeof dep === "function" ? "function " + (dep.name || "unnamed") + "()" : typeof dep;
9366
+ }).join(", ");
9367
+ throw new Error("createSelector expects all input-selectors to be functions, but received the following types: [" + dependencyTypes + "]");
9368
+ }
9369
+ return dependencies;
9370
+ }
9371
+ __name(getDependencies, "getDependencies");
9372
+ function createSelectorCreator(memoize2) {
9373
+ for (var _len = arguments.length, memoizeOptionsFromArgs = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
9374
+ memoizeOptionsFromArgs[_key - 1] = arguments[_key];
9375
+ }
9376
+ var createSelector2 = /* @__PURE__ */ __name(function createSelector3() {
9377
+ for (var _len2 = arguments.length, funcs = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
9378
+ funcs[_key2] = arguments[_key2];
9379
+ }
9380
+ var _recomputations = 0;
9381
+ var _lastResult;
9382
+ var directlyPassedOptions = {
9383
+ memoizeOptions: void 0
9384
+ };
9385
+ var resultFunc = funcs.pop();
9386
+ if (typeof resultFunc === "object") {
9387
+ directlyPassedOptions = resultFunc;
9388
+ resultFunc = funcs.pop();
9389
+ }
9390
+ if (typeof resultFunc !== "function") {
9391
+ throw new Error("createSelector expects an output function after the inputs, but received: [" + typeof resultFunc + "]");
9392
+ }
9393
+ var _directlyPassedOption = directlyPassedOptions, _directlyPassedOption2 = _directlyPassedOption.memoizeOptions, memoizeOptions = _directlyPassedOption2 === void 0 ? memoizeOptionsFromArgs : _directlyPassedOption2;
9394
+ var finalMemoizeOptions = Array.isArray(memoizeOptions) ? memoizeOptions : [memoizeOptions];
9395
+ var dependencies = getDependencies(funcs);
9396
+ var memoizedResultFunc = memoize2.apply(void 0, [/* @__PURE__ */ __name(function recomputationWrapper() {
9397
+ _recomputations++;
9398
+ return resultFunc.apply(null, arguments);
9399
+ }, "recomputationWrapper")].concat(finalMemoizeOptions));
9400
+ var selector = memoize2(/* @__PURE__ */ __name(function dependenciesChecker() {
9401
+ var params = [];
9402
+ var length = dependencies.length;
9403
+ for (var i = 0; i < length; i++) {
9404
+ params.push(dependencies[i].apply(null, arguments));
9405
+ }
9406
+ _lastResult = memoizedResultFunc.apply(null, params);
9407
+ return _lastResult;
9408
+ }, "dependenciesChecker"));
9409
+ Object.assign(selector, {
9410
+ resultFunc,
9411
+ memoizedResultFunc,
9412
+ dependencies,
9413
+ lastResult: /* @__PURE__ */ __name(function lastResult() {
9414
+ return _lastResult;
9415
+ }, "lastResult"),
9416
+ recomputations: /* @__PURE__ */ __name(function recomputations() {
9417
+ return _recomputations;
9418
+ }, "recomputations"),
9419
+ resetRecomputations: /* @__PURE__ */ __name(function resetRecomputations() {
9420
+ return _recomputations = 0;
9421
+ }, "resetRecomputations")
9422
+ });
9423
+ return selector;
9424
+ }, "createSelector");
9425
+ return createSelector2;
9426
+ }
9427
+ __name(createSelectorCreator, "createSelectorCreator");
9428
+ var createSelector = /* @__PURE__ */ createSelectorCreator(defaultMemoize);
9240
9429
  function useCombinedRefs() {
9241
9430
  for (var _len = arguments.length, refs = new Array(_len), _key = 0; _key < _len; _key++) {
9242
9431
  refs[_key] = arguments[_key];
@@ -56633,21 +56822,27 @@ const DataTable = /* @__PURE__ */ __name((_w) => {
56633
56822
  }
56634
56823
  return false;
56635
56824
  });
56825
+ const dtFormParamsSelector = useMemo$1(
56826
+ () => createSelector(
56827
+ (state2) => formValueSelector(formName)(
56828
+ state2,
56829
+ "reduxFormCellValidation",
56830
+ "reduxFormEntities",
56831
+ "reduxFormQueryParams",
56832
+ "reduxFormSelectedEntityIdMap"
56833
+ ),
56834
+ (result) => result
56835
+ // identity, but memoized
56836
+ ),
56837
+ [formName]
56838
+ );
56636
56839
  const {
56637
56840
  reduxFormCellValidation: _reduxFormCellValidation,
56638
56841
  reduxFormEditingCell,
56639
56842
  reduxFormEntities,
56640
56843
  reduxFormQueryParams: _reduxFormQueryParams = {},
56641
56844
  reduxFormSelectedEntityIdMap: _reduxFormSelectedEntityIdMap = {}
56642
- } = useSelector(/* @__PURE__ */ __name(function dtFormParamsSelector(state2) {
56643
- return formValueSelector(formName)(
56644
- state2,
56645
- "reduxFormCellValidation",
56646
- "reduxFormEntities",
56647
- "reduxFormQueryParams",
56648
- "reduxFormSelectedEntityIdMap"
56649
- );
56650
- }, "dtFormParamsSelector"));
56845
+ } = useSelector(dtFormParamsSelector);
56651
56846
  const reduxFormCellValidation = useDeepEqualMemoIgnoreFns(
56652
56847
  _reduxFormCellValidation
56653
56848
  );
@@ -56954,11 +57149,9 @@ const DataTable = /* @__PURE__ */ __name((_w) => {
56954
57149
  newTableConfig = {
56955
57150
  fieldOptions: []
56956
57151
  };
56957
- if (isEqual$3(prev, newTableConfig)) {
56958
- return prev;
56959
- } else {
56960
- return newTableConfig;
56961
- }
57152
+ }
57153
+ if (isEqual$3(prev, newTableConfig)) {
57154
+ return prev;
56962
57155
  } else {
56963
57156
  return newTableConfig;
56964
57157
  }
@@ -74955,14 +75148,16 @@ function filterSequenceString(sequenceString = "", {
74955
75148
  name: name2,
74956
75149
  isProtein: isProtein2,
74957
75150
  isRna: isRna2,
74958
- isMixedRnaAndDna
75151
+ isMixedRnaAndDna,
75152
+ getAcceptedInsertChars
74959
75153
  } = {}) {
74960
- const acceptedChars = getAcceptedChars({
75154
+ const sequenceTypeInfo = {
74961
75155
  isOligo: isOligo2,
74962
75156
  isProtein: isProtein2,
74963
75157
  isRna: isRna2,
74964
75158
  isMixedRnaAndDna
74965
- });
75159
+ };
75160
+ const acceptedChars = isFunction$2(getAcceptedInsertChars) ? getAcceptedInsertChars(sequenceTypeInfo) : getAcceptedChars(sequenceTypeInfo);
74966
75161
  const replaceChars = getReplaceChars({
74967
75162
  isOligo: isOligo2,
74968
75163
  isProtein: isProtein2,
@@ -75198,6 +75393,7 @@ function tidyUpSequenceData(pSeqData, options = {}) {
75198
75393
  doNotProvideIdsForAnnotations,
75199
75394
  noCdsTranslations,
75200
75395
  convertAnnotationsFromAAIndices,
75396
+ getAcceptedInsertChars,
75201
75397
  topLevelSeqData
75202
75398
  } = options;
75203
75399
  let seqData = cloneDeep(pSeqData);
@@ -75229,13 +75425,16 @@ function tidyUpSequenceData(pSeqData, options = {}) {
75229
75425
  if (!doNotRemoveInvalidChars) {
75230
75426
  if (seqData.isProtein) {
75231
75427
  const [newSeq] = filterSequenceString(seqData.proteinSequence, __spreadProps(__spreadValues({}, topLevelSeqData || seqData), {
75232
- isProtein: true
75428
+ isProtein: true,
75429
+ getAcceptedInsertChars
75233
75430
  }));
75234
75431
  seqData.proteinSequence = newSeq;
75235
75432
  } else {
75236
- const [newSeq] = filterSequenceString(seqData.sequence, __spreadValues({
75433
+ const [newSeq] = filterSequenceString(seqData.sequence, __spreadProps(__spreadValues({
75237
75434
  additionalValidChars
75238
- }, topLevelSeqData || seqData));
75435
+ }, topLevelSeqData || seqData), {
75436
+ getAcceptedInsertChars
75437
+ }));
75239
75438
  seqData.sequence = newSeq;
75240
75439
  }
75241
75440
  }
@@ -97591,195 +97790,6 @@ function sequenceSelector(state2) {
97591
97790
  return sequenceDataSelector(state2).sequence;
97592
97791
  }
97593
97792
  __name(sequenceSelector, "sequenceSelector");
97594
- var NOT_FOUND = "NOT_FOUND";
97595
- function createSingletonCache(equals) {
97596
- var entry;
97597
- return {
97598
- get: /* @__PURE__ */ __name(function get7(key) {
97599
- if (entry && equals(entry.key, key)) {
97600
- return entry.value;
97601
- }
97602
- return NOT_FOUND;
97603
- }, "get"),
97604
- put: /* @__PURE__ */ __name(function put(key, value) {
97605
- entry = {
97606
- key,
97607
- value
97608
- };
97609
- }, "put"),
97610
- getEntries: /* @__PURE__ */ __name(function getEntries() {
97611
- return entry ? [entry] : [];
97612
- }, "getEntries"),
97613
- clear: /* @__PURE__ */ __name(function clear3() {
97614
- entry = void 0;
97615
- }, "clear")
97616
- };
97617
- }
97618
- __name(createSingletonCache, "createSingletonCache");
97619
- function createLruCache(maxSize, equals) {
97620
- var entries2 = [];
97621
- function get7(key) {
97622
- var cacheIndex = entries2.findIndex(function(entry2) {
97623
- return equals(key, entry2.key);
97624
- });
97625
- if (cacheIndex > -1) {
97626
- var entry = entries2[cacheIndex];
97627
- if (cacheIndex > 0) {
97628
- entries2.splice(cacheIndex, 1);
97629
- entries2.unshift(entry);
97630
- }
97631
- return entry.value;
97632
- }
97633
- return NOT_FOUND;
97634
- }
97635
- __name(get7, "get");
97636
- function put(key, value) {
97637
- if (get7(key) === NOT_FOUND) {
97638
- entries2.unshift({
97639
- key,
97640
- value
97641
- });
97642
- if (entries2.length > maxSize) {
97643
- entries2.pop();
97644
- }
97645
- }
97646
- }
97647
- __name(put, "put");
97648
- function getEntries() {
97649
- return entries2;
97650
- }
97651
- __name(getEntries, "getEntries");
97652
- function clear3() {
97653
- entries2 = [];
97654
- }
97655
- __name(clear3, "clear");
97656
- return {
97657
- get: get7,
97658
- put,
97659
- getEntries,
97660
- clear: clear3
97661
- };
97662
- }
97663
- __name(createLruCache, "createLruCache");
97664
- var defaultEqualityCheck = /* @__PURE__ */ __name(function defaultEqualityCheck2(a2, b3) {
97665
- return a2 === b3;
97666
- }, "defaultEqualityCheck");
97667
- function createCacheKeyComparator(equalityCheck) {
97668
- return /* @__PURE__ */ __name(function areArgumentsShallowlyEqual(prev, next) {
97669
- if (prev === null || next === null || prev.length !== next.length) {
97670
- return false;
97671
- }
97672
- var length = prev.length;
97673
- for (var i = 0; i < length; i++) {
97674
- if (!equalityCheck(prev[i], next[i])) {
97675
- return false;
97676
- }
97677
- }
97678
- return true;
97679
- }, "areArgumentsShallowlyEqual");
97680
- }
97681
- __name(createCacheKeyComparator, "createCacheKeyComparator");
97682
- function defaultMemoize(func, equalityCheckOrOptions) {
97683
- var providedOptions = typeof equalityCheckOrOptions === "object" ? equalityCheckOrOptions : {
97684
- equalityCheck: equalityCheckOrOptions
97685
- };
97686
- var _providedOptions$equa = providedOptions.equalityCheck, equalityCheck = _providedOptions$equa === void 0 ? defaultEqualityCheck : _providedOptions$equa, _providedOptions$maxS = providedOptions.maxSize, maxSize = _providedOptions$maxS === void 0 ? 1 : _providedOptions$maxS, resultEqualityCheck = providedOptions.resultEqualityCheck;
97687
- var comparator = createCacheKeyComparator(equalityCheck);
97688
- var cache2 = maxSize === 1 ? createSingletonCache(comparator) : createLruCache(maxSize, comparator);
97689
- function memoized() {
97690
- var value = cache2.get(arguments);
97691
- if (value === NOT_FOUND) {
97692
- value = func.apply(null, arguments);
97693
- if (resultEqualityCheck) {
97694
- var entries2 = cache2.getEntries();
97695
- var matchingEntry = entries2.find(function(entry) {
97696
- return resultEqualityCheck(entry.value, value);
97697
- });
97698
- if (matchingEntry) {
97699
- value = matchingEntry.value;
97700
- }
97701
- }
97702
- cache2.put(arguments, value);
97703
- }
97704
- return value;
97705
- }
97706
- __name(memoized, "memoized");
97707
- memoized.clearCache = function() {
97708
- return cache2.clear();
97709
- };
97710
- return memoized;
97711
- }
97712
- __name(defaultMemoize, "defaultMemoize");
97713
- function getDependencies(funcs) {
97714
- var dependencies = Array.isArray(funcs[0]) ? funcs[0] : funcs;
97715
- if (!dependencies.every(function(dep) {
97716
- return typeof dep === "function";
97717
- })) {
97718
- var dependencyTypes = dependencies.map(function(dep) {
97719
- return typeof dep === "function" ? "function " + (dep.name || "unnamed") + "()" : typeof dep;
97720
- }).join(", ");
97721
- throw new Error("createSelector expects all input-selectors to be functions, but received the following types: [" + dependencyTypes + "]");
97722
- }
97723
- return dependencies;
97724
- }
97725
- __name(getDependencies, "getDependencies");
97726
- function createSelectorCreator(memoize2) {
97727
- for (var _len = arguments.length, memoizeOptionsFromArgs = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
97728
- memoizeOptionsFromArgs[_key - 1] = arguments[_key];
97729
- }
97730
- var createSelector2 = /* @__PURE__ */ __name(function createSelector3() {
97731
- for (var _len2 = arguments.length, funcs = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
97732
- funcs[_key2] = arguments[_key2];
97733
- }
97734
- var _recomputations = 0;
97735
- var _lastResult;
97736
- var directlyPassedOptions = {
97737
- memoizeOptions: void 0
97738
- };
97739
- var resultFunc = funcs.pop();
97740
- if (typeof resultFunc === "object") {
97741
- directlyPassedOptions = resultFunc;
97742
- resultFunc = funcs.pop();
97743
- }
97744
- if (typeof resultFunc !== "function") {
97745
- throw new Error("createSelector expects an output function after the inputs, but received: [" + typeof resultFunc + "]");
97746
- }
97747
- var _directlyPassedOption = directlyPassedOptions, _directlyPassedOption2 = _directlyPassedOption.memoizeOptions, memoizeOptions = _directlyPassedOption2 === void 0 ? memoizeOptionsFromArgs : _directlyPassedOption2;
97748
- var finalMemoizeOptions = Array.isArray(memoizeOptions) ? memoizeOptions : [memoizeOptions];
97749
- var dependencies = getDependencies(funcs);
97750
- var memoizedResultFunc = memoize2.apply(void 0, [/* @__PURE__ */ __name(function recomputationWrapper() {
97751
- _recomputations++;
97752
- return resultFunc.apply(null, arguments);
97753
- }, "recomputationWrapper")].concat(finalMemoizeOptions));
97754
- var selector = memoize2(/* @__PURE__ */ __name(function dependenciesChecker() {
97755
- var params = [];
97756
- var length = dependencies.length;
97757
- for (var i = 0; i < length; i++) {
97758
- params.push(dependencies[i].apply(null, arguments));
97759
- }
97760
- _lastResult = memoizedResultFunc.apply(null, params);
97761
- return _lastResult;
97762
- }, "dependenciesChecker"));
97763
- Object.assign(selector, {
97764
- resultFunc,
97765
- memoizedResultFunc,
97766
- dependencies,
97767
- lastResult: /* @__PURE__ */ __name(function lastResult() {
97768
- return _lastResult;
97769
- }, "lastResult"),
97770
- recomputations: /* @__PURE__ */ __name(function recomputations() {
97771
- return _recomputations;
97772
- }, "recomputations"),
97773
- resetRecomputations: /* @__PURE__ */ __name(function resetRecomputations() {
97774
- return _recomputations = 0;
97775
- }, "resetRecomputations")
97776
- });
97777
- return selector;
97778
- }, "createSelector");
97779
- return createSelector2;
97780
- }
97781
- __name(createSelectorCreator, "createSelectorCreator");
97782
- var createSelector = /* @__PURE__ */ createSelectorCreator(defaultMemoize);
97783
97793
  const restrictionEnzymesSelector = createSelector(
97784
97794
  () => defaultEnzymesByName,
97785
97795
  (state2, additionalEnzymes) => {
@@ -97805,7 +97815,34 @@ const restrictionEnzymesSelector = createSelector(
97805
97815
  const cutsiteLabelColorSelector = createSelector(sequenceDataSelector, function(sequenceData2) {
97806
97816
  return sequenceData2.cutsiteLabelColors;
97807
97817
  });
97808
- function cutsitesSelector(sequence2, circular2, enzymeList, cutsiteLabelColors) {
97818
+ const cutsitesCache = [];
97819
+ function getCachedResult(argsObj) {
97820
+ const idx = cutsitesCache.findIndex(
97821
+ (entry) => entry && isEqual$3(entry.args, argsObj)
97822
+ );
97823
+ if (idx === -1) return;
97824
+ const hit = cutsitesCache[idx];
97825
+ return hit.result;
97826
+ }
97827
+ __name(getCachedResult, "getCachedResult");
97828
+ function setCachedResult(argsObj, result, cacheSize = 1) {
97829
+ cutsitesCache.push({
97830
+ args: argsObj,
97831
+ result
97832
+ });
97833
+ if (cutsitesCache.length > cacheSize) cutsitesCache.shift();
97834
+ }
97835
+ __name(setCachedResult, "setCachedResult");
97836
+ function cutsitesSelector(sequence2, circular2, enzymeList, cutsiteLabelColors, editorSize = 1) {
97837
+ const cachedResult = getCachedResult({
97838
+ sequence: sequence2,
97839
+ circular: circular2,
97840
+ enzymeList,
97841
+ cutsiteLabelColors
97842
+ });
97843
+ if (cachedResult) {
97844
+ return cachedResult;
97845
+ }
97809
97846
  const cutsitesByName = getLowerCaseObj(
97810
97847
  getCutsitesFromSequence(sequence2, circular2, map$3(enzymeList))
97811
97848
  );
@@ -97838,11 +97875,22 @@ function cutsitesSelector(sequence2, circular2, enzymeList, cutsiteLabelColors)
97838
97875
  const cutsitesArray = flatMap(cutsitesByName, function(cutsitesForEnzyme) {
97839
97876
  return cutsitesForEnzyme;
97840
97877
  });
97841
- return {
97878
+ const result = {
97842
97879
  cutsitesByName,
97843
97880
  cutsitesById,
97844
97881
  cutsitesArray
97845
97882
  };
97883
+ setCachedResult(
97884
+ {
97885
+ sequence: sequence2,
97886
+ circular: circular2,
97887
+ enzymeList,
97888
+ cutsiteLabelColors
97889
+ },
97890
+ result,
97891
+ editorSize
97892
+ );
97893
+ return result;
97846
97894
  }
97847
97895
  __name(cutsitesSelector, "cutsitesSelector");
97848
97896
  const cutsitesSelector$1 = createSelector(
@@ -97850,6 +97898,7 @@ const cutsitesSelector$1 = createSelector(
97850
97898
  circularSelector,
97851
97899
  restrictionEnzymesSelector,
97852
97900
  cutsiteLabelColorSelector,
97901
+ (editorState) => editorState.editorSize,
97853
97902
  cutsitesSelector
97854
97903
  );
97855
97904
  function divideBy3(num, shouldDivideBy3) {
@@ -99265,11 +99314,12 @@ function showDialog({
99265
99314
  props,
99266
99315
  overrideName
99267
99316
  }) {
99268
- var _a2;
99317
+ var _a2, _b2, _c, _d;
99269
99318
  dialogHolder.dialogType = dialogType;
99270
99319
  if (!dialogHolder.dialogType && ModalComponent) {
99271
99320
  dialogHolder.dialogType = "TGCustomModal";
99272
99321
  }
99322
+ dialogHolder.editorName = props == null ? void 0 : props.editorName;
99273
99323
  if (document.activeElement && document.activeElement.closest(".veEditor")) {
99274
99324
  let editorName;
99275
99325
  (_a2 = document.activeElement.closest(".veEditor")) == null ? void 0 : _a2.className.split(" ").forEach((c2) => {
@@ -99283,16 +99333,28 @@ function showDialog({
99283
99333
  dialogHolder.CustomModalComponent = ModalComponent;
99284
99334
  dialogHolder.props = props;
99285
99335
  dialogHolder.overrideName = overrideName;
99286
- dialogHolder.setUniqKeyToForceRerender(uuid());
99336
+ if (dialogHolder.editorName && (dialogHolder == null ? void 0 : dialogHolder[dialogHolder.editorName])) {
99337
+ (_c = (_b2 = dialogHolder == null ? void 0 : dialogHolder[dialogHolder.editorName]) == null ? void 0 : _b2.setUniqKeyToForceRerender) == null ? void 0 : _c.call(
99338
+ _b2,
99339
+ uuid()
99340
+ );
99341
+ } else {
99342
+ (_d = dialogHolder == null ? void 0 : dialogHolder.setUniqKeyToForceRerender) == null ? void 0 : _d.call(dialogHolder, uuid());
99343
+ }
99287
99344
  }
99288
99345
  __name(showDialog, "showDialog");
99289
99346
  function hideDialog() {
99347
+ var _a2, _b2, _c;
99290
99348
  delete dialogHolder.dialogType;
99291
99349
  delete dialogHolder.CustomModalComponent;
99292
99350
  delete dialogHolder.props;
99293
99351
  delete dialogHolder.overrideName;
99352
+ if (dialogHolder.editorName && (dialogHolder == null ? void 0 : dialogHolder[dialogHolder.editorName])) {
99353
+ (_b2 = (_a2 = dialogHolder == null ? void 0 : dialogHolder[dialogHolder.editorName]) == null ? void 0 : _a2.setUniqKeyToForceRerender) == null ? void 0 : _b2.call(_a2);
99354
+ } else {
99355
+ (_c = dialogHolder == null ? void 0 : dialogHolder.setUniqKeyToForceRerender) == null ? void 0 : _c.call(dialogHolder);
99356
+ }
99294
99357
  delete dialogHolder.editorName;
99295
- dialogHolder.setUniqKeyToForceRerender();
99296
99358
  }
99297
99359
  __name(hideDialog, "hideDialog");
99298
99360
  const typeToDialogType = {
@@ -99567,7 +99629,8 @@ const handleSave = /* @__PURE__ */ __name((props) => (..._0) => __async(void 0,
99567
99629
  readOnly: readOnly2,
99568
99630
  alwaysAllowSave,
99569
99631
  sequenceData: sequenceData2,
99570
- lastSavedIdUpdate: lastSavedIdUpdate2
99632
+ lastSavedIdUpdate: lastSavedIdUpdate2,
99633
+ getAcceptedInsertChars
99571
99634
  } = props;
99572
99635
  const saveHandler = opts2.isSaveAs ? onSaveAs || onSave : onSave;
99573
99636
  const updateLastSavedIdToCurrent = /* @__PURE__ */ __name(() => {
@@ -99580,7 +99643,8 @@ const handleSave = /* @__PURE__ */ __name((props) => (..._0) => __async(void 0,
99580
99643
  opts2,
99581
99644
  tidyUpSequenceData(sequenceData2, {
99582
99645
  doNotRemoveInvalidChars: true,
99583
- annotationsAsObjects: true
99646
+ annotationsAsObjects: true,
99647
+ getAcceptedInsertChars
99584
99648
  }),
99585
99649
  props,
99586
99650
  updateLastSavedIdToCurrent
@@ -99762,8 +99826,8 @@ const withEditorProps = compose(
99762
99826
  caretPositionOrRange,
99763
99827
  options
99764
99828
  } = props.beforeSequenceInsertOrDelete ? (yield props.beforeSequenceInsertOrDelete(
99765
- tidyUpSequenceData(_sequenceDataToInsert),
99766
- tidyUpSequenceData(_existingSequenceData),
99829
+ tidyUpSequenceData(_sequenceDataToInsert, { getAcceptedInsertChars: props.getAcceptedInsertChars }),
99830
+ tidyUpSequenceData(_existingSequenceData, { getAcceptedInsertChars: props.getAcceptedInsertChars }),
99767
99831
  _caretPositionOrRange,
99768
99832
  _options
99769
99833
  )) || {} : {};
@@ -99926,7 +99990,11 @@ const getEditorState = createSelector(
99926
99990
  (state2) => state2.VectorEditor,
99927
99991
  (state2, editorName) => editorName,
99928
99992
  (VectorEditor, editorName) => {
99929
- return VectorEditor[editorName];
99993
+ const editorState = VectorEditor[editorName];
99994
+ editorState && (editorState.editorSize = Object.values(VectorEditor).filter(
99995
+ (editorItem) => editorItem == null ? void 0 : editorItem.sequenceData
99996
+ ).length);
99997
+ return editorState;
99930
99998
  }
99931
99999
  );
99932
100000
  function mapStateToProps(state2, ownProps) {
@@ -99963,6 +100031,9 @@ function mapStateToProps(state2, ownProps) {
99963
100031
  annotationTypePlural,
99964
100032
  sequenceLength
99965
100033
  );
100034
+ if (dialogHolder.editorName) {
100035
+ annotationToAdd = dialogHolder.editorName === editorName ? annotationToAdd : void 0;
100036
+ }
99966
100037
  }
99967
100038
  });
99968
100039
  const toReturn = __spreadProps(__spreadValues({}, editorState), {
@@ -100190,13 +100261,15 @@ function getShowGCContent(state2, ownProps) {
100190
100261
  return toRet;
100191
100262
  }
100192
100263
  __name(getShowGCContent, "getShowGCContent");
100193
- function jsonToJson(incomingJson) {
100264
+ function jsonToJson(incomingJson, options) {
100265
+ const { getAcceptedInsertChars } = options || {};
100194
100266
  return JSON.stringify(
100195
100267
  omit$1(
100196
100268
  cleanUpTeselagenJsonForExport(
100197
100269
  tidyUpSequenceData(incomingJson, {
100198
100270
  doNotRemoveInvalidChars: true,
100199
- annotationsAsObjects: false
100271
+ annotationsAsObjects: false,
100272
+ getAcceptedInsertChars
100200
100273
  })
100201
100274
  ),
100202
100275
  [
@@ -110882,9 +110955,19 @@ const _AnnotationPositioner = class _AnnotationPositioner extends React__default
110882
110955
  };
110883
110956
  __name(_AnnotationPositioner, "AnnotationPositioner");
110884
110957
  let AnnotationPositioner = _AnnotationPositioner;
110958
+ let measureCanvas;
110959
+ function getAnnotationTextWidth(text2, fontSize = ANNOTATION_LABEL_FONT_WIDTH, fontFamily = "monospace") {
110960
+ if (!measureCanvas) {
110961
+ measureCanvas = document.createElement("canvas");
110962
+ }
110963
+ const ctx = measureCanvas.getContext("2d");
110964
+ ctx.font = `${fontSize}px ${fontFamily}`;
110965
+ return ctx.measureText(text2).width;
110966
+ }
110967
+ __name(getAnnotationTextWidth, "getAnnotationTextWidth");
110885
110968
  const doesLabelFitInAnnotation = /* @__PURE__ */ __name((text2 = "", { range: range2, width }, charWidth2) => {
110886
- const textLength = text2.length * ANNOTATION_LABEL_FONT_WIDTH;
110887
- const widthMinusOne = (range2 ? getWidth(range2, charWidth2, 0) : width) - charWidth2;
110969
+ const textLength = getAnnotationTextWidth(text2);
110970
+ const widthMinusOne = range2 ? getWidth(range2, charWidth2, 0) - ANNOTATION_LABEL_FONT_WIDTH * 2 : width - ANNOTATION_LABEL_FONT_WIDTH * 2;
110888
110971
  return widthMinusOne > textLength;
110889
110972
  }, "doesLabelFitInAnnotation");
110890
110973
  function getAnnotationClassnames({ overlapsSelf }, { viewName, type: type2 }) {
@@ -110894,6 +110977,78 @@ function getAnnotationClassnames({ overlapsSelf }, { viewName, type: type2 }) {
110894
110977
  });
110895
110978
  }
110896
110979
  __name(getAnnotationClassnames, "getAnnotationClassnames");
110980
+ function getAnnotationTextOffset({
110981
+ width,
110982
+ nameToDisplay,
110983
+ hasAPoint,
110984
+ pointiness,
110985
+ forward
110986
+ }) {
110987
+ return width / 2 - getAnnotationTextWidth(nameToDisplay) / 2 - (hasAPoint ? (pointiness / 2 + ANNOTATION_LABEL_FONT_WIDTH / 2) * (forward ? 1 : -1) : 0);
110988
+ }
110989
+ __name(getAnnotationTextOffset, "getAnnotationTextOffset");
110990
+ function getAnnotationNameInfo({
110991
+ name: name2,
110992
+ width,
110993
+ hasAPoint,
110994
+ pointiness,
110995
+ forward,
110996
+ charWidth: charWidth2,
110997
+ truncateLabelsThatDoNotFit,
110998
+ onlyShowLabelsThatDoNotFit,
110999
+ annotation
111000
+ }) {
111001
+ let nameToDisplay = name2;
111002
+ let textOffset = getAnnotationTextOffset({
111003
+ width,
111004
+ nameToDisplay,
111005
+ hasAPoint,
111006
+ pointiness,
111007
+ forward
111008
+ });
111009
+ const widthAvailableForText = width - ANNOTATION_LABEL_FONT_WIDTH * 2;
111010
+ if (!doesLabelFitInAnnotation(name2, { width }, charWidth2) || !onlyShowLabelsThatDoNotFit && ["parts", "features"].includes(annotation.annotationTypePlural)) {
111011
+ if (truncateLabelsThatDoNotFit) {
111012
+ let left2 = 0;
111013
+ let right2 = name2.length;
111014
+ let bestFit = "";
111015
+ while (left2 <= right2) {
111016
+ const mid = Math.floor((left2 + right2) / 2);
111017
+ const candidate = name2.slice(0, mid);
111018
+ const candidateWidth = getAnnotationTextWidth(candidate);
111019
+ if (candidateWidth <= widthAvailableForText) {
111020
+ if (candidate.length > bestFit.length) {
111021
+ bestFit = candidate;
111022
+ }
111023
+ left2 = mid + 1;
111024
+ } else {
111025
+ right2 = mid - 1;
111026
+ }
111027
+ }
111028
+ if (bestFit.length < name2.length) {
111029
+ bestFit = bestFit.slice(0, -2) + "..";
111030
+ }
111031
+ nameToDisplay = bestFit;
111032
+ if (nameToDisplay.length <= 3) {
111033
+ textOffset = 0;
111034
+ nameToDisplay = "";
111035
+ } else {
111036
+ textOffset = getAnnotationTextOffset({
111037
+ width,
111038
+ nameToDisplay,
111039
+ hasAPoint,
111040
+ pointiness,
111041
+ forward
111042
+ });
111043
+ }
111044
+ } else {
111045
+ textOffset = 0;
111046
+ nameToDisplay = "";
111047
+ }
111048
+ }
111049
+ return { textOffset, nameToDisplay };
111050
+ }
111051
+ __name(getAnnotationNameInfo, "getAnnotationNameInfo");
110897
111052
  function PointedAnnotation(props) {
110898
111053
  const {
110899
111054
  className,
@@ -111029,27 +111184,17 @@ function PointedAnnotation(props) {
111029
111184
  Q ${pointiness},${height / 2} ${0},${0}
111030
111185
  z`;
111031
111186
  }
111032
- let nameToDisplay = name2;
111033
- let textOffset = width / 2 - name2.length * 5 / 2 - (hasAPoint ? pointiness / 2 * (forward ? 1 : -1) : 0);
111034
- if (!doesLabelFitInAnnotation(name2, { width }, charWidth2) || !onlyShowLabelsThatDoNotFit && ["parts", "features"].includes(annotation.annotationTypePlural)) {
111035
- if (truncateLabelsThatDoNotFit) {
111036
- const fractionToDisplay = width / (name2.length * ANNOTATION_LABEL_FONT_WIDTH);
111037
- const numLetters = Math.floor(fractionToDisplay * name2.length);
111038
- nameToDisplay = name2.slice(0, numLetters);
111039
- if (nameToDisplay.length > 3) {
111040
- if (nameToDisplay.length !== name2.length) {
111041
- nameToDisplay += "..";
111042
- }
111043
- textOffset = width / 2 - nameToDisplay.length * 5 / 2 - (hasAPoint ? pointiness / 2 * (forward ? 1 : -1) : 0);
111044
- } else {
111045
- textOffset = 0;
111046
- nameToDisplay = "";
111047
- }
111048
- } else {
111049
- textOffset = 0;
111050
- nameToDisplay = "";
111051
- }
111052
- }
111187
+ const { textOffset, nameToDisplay } = getAnnotationNameInfo({
111188
+ name: name2,
111189
+ width,
111190
+ hasAPoint,
111191
+ pointiness,
111192
+ forward,
111193
+ charWidth: charWidth2,
111194
+ truncateLabelsThatDoNotFit,
111195
+ onlyShowLabelsThatDoNotFit,
111196
+ annotation
111197
+ });
111053
111198
  let _textColor = textColor;
111054
111199
  if (!textColor) {
111055
111200
  try {
@@ -116968,7 +117113,7 @@ function showFileDialog({ multiple = false, onSelect }) {
116968
117113
  input.click();
116969
117114
  }
116970
117115
  __name(showFileDialog, "showFileDialog");
116971
- const version = "0.8.28";
117116
+ const version = "0.8.30";
116972
117117
  const packageJson = {
116973
117118
  version
116974
117119
  };
@@ -117886,7 +118031,7 @@ const fileCommandDefs = __spreadValues(__spreadProps(__spreadValues({
117886
118031
  },
117887
118032
  exportSequenceAsTeselagenJson: {
117888
118033
  name: "Download Teselagen JSON File",
117889
- handler: /* @__PURE__ */ __name((props) => props.exportSequenceToFile("teselagenJson"), "handler")
118034
+ handler: /* @__PURE__ */ __name((props) => props.exportSequenceToFile("teselagenJson", { getAcceptedInsertChars: props.getAcceptedInsertChars }), "handler")
117890
118035
  },
117891
118036
  viewProperties: {
117892
118037
  handler: /* @__PURE__ */ __name((props) => props.propertiesViewOpen(), "handler")
@@ -120697,6 +120842,7 @@ const _SequenceInputNoHotkeys = class _SequenceInputNoHotkeys extends React__def
120697
120842
  caretPosition: caretPosition2,
120698
120843
  sequenceData: sequenceData2,
120699
120844
  maxInsertSize,
120845
+ getAcceptedInsertChars,
120700
120846
  showAminoAcidUnitAsCodon
120701
120847
  } = this.props;
120702
120848
  const { charsToInsert, hasTempError } = this.state;
@@ -120732,7 +120878,8 @@ const _SequenceInputNoHotkeys = class _SequenceInputNoHotkeys extends React__def
120732
120878
  const [sanitizedVal, warnings] = filterSequenceString(
120733
120879
  e.target.value,
120734
120880
  __spreadProps(__spreadValues({}, sequenceData2), {
120735
- name: void 0
120881
+ name: void 0,
120882
+ getAcceptedInsertChars
120736
120883
  })
120737
120884
  );
120738
120885
  if (warnings.length) {
@@ -121611,7 +121758,8 @@ function VectorInteractionHOC(Component2) {
121611
121758
  onPaste,
121612
121759
  disableBpEditing,
121613
121760
  sequenceData: sequenceData2,
121614
- maxInsertSize
121761
+ maxInsertSize,
121762
+ getAcceptedInsertChars
121615
121763
  } = this.props;
121616
121764
  if (disableBpEditing) {
121617
121765
  return this.createDisableBpEditingMsg();
@@ -121650,7 +121798,8 @@ function VectorInteractionHOC(Component2) {
121650
121798
  topLevelSeqData: sequenceData2,
121651
121799
  provideNewIdsForAnnotations: true,
121652
121800
  annotationsAsObjects: true,
121653
- noCdsTranslations: true
121801
+ noCdsTranslations: true,
121802
+ getAcceptedInsertChars
121654
121803
  });
121655
121804
  if (!seqDataToInsert.sequence.length)
121656
121805
  return window.toastr.warning("Sorry no valid base pairs to paste");
@@ -121670,7 +121819,8 @@ function VectorInteractionHOC(Component2) {
121670
121819
  selectionLayer: selectionLayer2,
121671
121820
  copyOptions: copyOptions2,
121672
121821
  disableBpEditing,
121673
- readOnly: readOnly2
121822
+ readOnly: readOnly2,
121823
+ getAcceptedInsertChars
121674
121824
  } = this.props;
121675
121825
  const onCut = this.props.onCut || this.props.onCopy || noop$8;
121676
121826
  const seqData = tidyUpSequenceData(
@@ -121694,7 +121844,8 @@ function VectorInteractionHOC(Component2) {
121694
121844
  {
121695
121845
  doNotRemoveInvalidChars: true,
121696
121846
  annotationsAsObjects: true,
121697
- includeProteinSequence: true
121847
+ includeProteinSequence: true,
121848
+ getAcceptedInsertChars
121698
121849
  }
121699
121850
  );
121700
121851
  if (!(this.sequenceDataToCopy || {}).textToCopy && !seqData.sequence.length)
@@ -121712,7 +121863,8 @@ function VectorInteractionHOC(Component2) {
121712
121863
  e,
121713
121864
  tidyUpSequenceData(seqData, {
121714
121865
  doNotRemoveInvalidChars: true,
121715
- annotationsAsObjects: true
121866
+ annotationsAsObjects: true,
121867
+ getAcceptedInsertChars
121716
121868
  }),
121717
121869
  this.props
121718
121870
  );
@@ -121762,6 +121914,7 @@ function VectorInteractionHOC(Component2) {
121762
121914
  readOnly: readOnly2,
121763
121915
  disableBpEditing,
121764
121916
  maxInsertSize,
121917
+ getAcceptedInsertChars,
121765
121918
  showAminoAcidUnitAsCodon
121766
121919
  } = this.props;
121767
121920
  const sequenceLength = sequenceData2.sequence.length;
@@ -121781,6 +121934,7 @@ function VectorInteractionHOC(Component2) {
121781
121934
  sequenceLength,
121782
121935
  caretPosition: caretPosition2,
121783
121936
  maxInsertSize,
121937
+ getAcceptedInsertChars,
121784
121938
  showAminoAcidUnitAsCodon,
121785
121939
  handleInsert: /* @__PURE__ */ __name((seqDataToInsert) => __async(this, null, function* () {
121786
121940
  yield insertAndSelectHelper({
@@ -124387,6 +124541,8 @@ const __LinearView = class __LinearView extends React__default.Component {
124387
124541
  }));
124388
124542
  }
124389
124543
  getNearestCursorPositionToMouseEvent(rowData, event, callback2) {
124544
+ var _a2;
124545
+ const isProtein2 = (_a2 = this.props.sequenceData) == null ? void 0 : _a2.isProtein;
124390
124546
  let nearestCaretPos = 0;
124391
124547
  let rowDomNode = this.linearView;
124392
124548
  rowDomNode = rowDomNode.querySelector(".veRowItem");
@@ -124400,11 +124556,11 @@ const __LinearView = class __LinearView extends React__default.Component {
124400
124556
  (clickXPositionRelativeToRowContainer + this.charWidth / 2) / this.charWidth
124401
124557
  );
124402
124558
  nearestCaretPos = numberOfBPsInFromRowStart + 0;
124403
- if (nearestCaretPos > maxEnd + 1) {
124404
- nearestCaretPos = maxEnd + 1;
124559
+ if (nearestCaretPos > maxEnd) {
124560
+ nearestCaretPos = isProtein2 ? maxEnd + 1 : maxEnd;
124405
124561
  }
124406
124562
  }
124407
- if (this.props.sequenceData && this.props.sequenceData.isProtein) {
124563
+ if (isProtein2) {
124408
124564
  nearestCaretPos = Math.round(nearestCaretPos / 3) * 3;
124409
124565
  }
124410
124566
  if (maxEnd === 0) nearestCaretPos = 0;
@@ -127471,6 +127627,30 @@ const sizeSchema = /* @__PURE__ */ __name((isProtein2) => ({
127471
127627
  }) : /* @__PURE__ */ React__default.createElement("span", null, "(", base1Range.start, "-", base1Range.end, ")")));
127472
127628
  }, "render")
127473
127629
  }), "sizeSchema");
127630
+ const getMemoOrfs = /* @__PURE__ */ (() => {
127631
+ let lastDeps;
127632
+ let lastResult;
127633
+ return (editorState) => {
127634
+ const {
127635
+ sequenceData: sequenceData2,
127636
+ minimumOrfSize: minimumOrfSize2,
127637
+ useAdditionalOrfStartCodons: useAdditionalOrfStartCodons2
127638
+ } = editorState;
127639
+ const { sequence: sequence2, circular: circular2 } = sequenceData2;
127640
+ const deps = {
127641
+ sequence: sequence2,
127642
+ circular: circular2,
127643
+ minimumOrfSize: minimumOrfSize2,
127644
+ useAdditionalOrfStartCodons: useAdditionalOrfStartCodons2
127645
+ };
127646
+ if (lastResult && isEqual$3(deps, lastDeps)) {
127647
+ return lastResult;
127648
+ }
127649
+ lastResult = selectors.orfsSelector(editorState);
127650
+ lastDeps = deps;
127651
+ return lastResult;
127652
+ };
127653
+ })();
127474
127654
  var lodash$1 = { exports: {} };
127475
127655
  /**
127476
127656
  * @license
@@ -138026,10 +138206,16 @@ function GlobalDialog(props) {
138026
138206
  hideDialog();
138027
138207
  };
138028
138208
  }, []);
138209
+ useEffect(() => {
138210
+ dialogHolder.setUniqKeyToForceRerender = setUniqKeyToForceRerender;
138211
+ if (editorName) {
138212
+ const slot = dialogHolder[editorName] = dialogHolder[editorName] || {};
138213
+ slot.setUniqKeyToForceRerender = setUniqKeyToForceRerender;
138214
+ }
138215
+ }, [editorName]);
138029
138216
  if (dialogHolder.editorName && editorName && dialogHolder.editorName !== editorName) {
138030
138217
  return null;
138031
138218
  }
138032
- dialogHolder.setUniqKeyToForceRerender = setUniqKeyToForceRerender;
138033
138219
  const Comp = dialogHolder.CustomModalComponent || dialogOverrides[dialogHolder.overrideName] || Dialogs[dialogHolder.dialogType];
138034
138220
  if (!Comp) return null;
138035
138221
  return /* @__PURE__ */ React__default.createElement(
@@ -142793,6 +142979,8 @@ const userDefinedHandlersAndOpts = [
142793
142979
  "enzymeManageOverride",
142794
142980
  "enzymeGroupsOverride",
142795
142981
  "additionalEnzymes",
142982
+ "getAcceptedInsertChars",
142983
+ "maxInsertSize",
142796
142984
  "onDelete",
142797
142985
  "onCopy",
142798
142986
  "autoAnnotateFeatures",
@@ -144566,7 +144754,7 @@ const OrfProperties$1 = compose(
144566
144754
  readOnly: readOnly2,
144567
144755
  annotationVisibility: annotationVisibility2,
144568
144756
  useAdditionalOrfStartCodons: useAdditionalOrfStartCodons2,
144569
- orfs: selectors.orfsSelector(editorState),
144757
+ orfs: getMemoOrfs(editorState),
144570
144758
  sequenceLength: sequence2.length,
144571
144759
  sequenceData: sequenceData2,
144572
144760
  minimumOrfSize: minimumOrfSize2
@@ -144756,7 +144944,7 @@ const TranslationProperties$1 = compose(
144756
144944
  return {
144757
144945
  readOnly: readOnly2,
144758
144946
  translations: selectors.translationsSelector(editorState),
144759
- orfs: selectors.orfsSelector(editorState),
144947
+ orfs: getMemoOrfs(editorState),
144760
144948
  annotationVisibility: annotationVisibility2,
144761
144949
  sequenceLength: (sequenceData2.sequence || "").length,
144762
144950
  sequenceData: sequenceData2
@@ -146041,6 +146229,7 @@ const _Editor = class _Editor extends React__default.Component {
146041
146229
  hoveredId,
146042
146230
  isFullscreen,
146043
146231
  maxInsertSize,
146232
+ getAcceptedInsertChars,
146044
146233
  showAminoAcidUnitAsCodon,
146045
146234
  maxAnnotationsToDisplay,
146046
146235
  minHeight = 400,
@@ -146230,6 +146419,7 @@ const _Editor = class _Editor extends React__default.Component {
146230
146419
  }), panelPropsToSpread), {
146231
146420
  editorName,
146232
146421
  maxInsertSize,
146422
+ getAcceptedInsertChars,
146233
146423
  showAminoAcidUnitAsCodon,
146234
146424
  isProtein: sequenceData2.isProtein,
146235
146425
  onlyShowLabelsThatDoNotFit,