@teselagen/ove 0.8.29 → 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.cjs.js CHANGED
@@ -9255,6 +9255,195 @@ function DialogFooter({
9255
9255
  );
9256
9256
  }
9257
9257
  __name(DialogFooter, "DialogFooter");
9258
+ var NOT_FOUND = "NOT_FOUND";
9259
+ function createSingletonCache(equals) {
9260
+ var entry;
9261
+ return {
9262
+ get: /* @__PURE__ */ __name(function get7(key) {
9263
+ if (entry && equals(entry.key, key)) {
9264
+ return entry.value;
9265
+ }
9266
+ return NOT_FOUND;
9267
+ }, "get"),
9268
+ put: /* @__PURE__ */ __name(function put(key, value) {
9269
+ entry = {
9270
+ key,
9271
+ value
9272
+ };
9273
+ }, "put"),
9274
+ getEntries: /* @__PURE__ */ __name(function getEntries() {
9275
+ return entry ? [entry] : [];
9276
+ }, "getEntries"),
9277
+ clear: /* @__PURE__ */ __name(function clear3() {
9278
+ entry = void 0;
9279
+ }, "clear")
9280
+ };
9281
+ }
9282
+ __name(createSingletonCache, "createSingletonCache");
9283
+ function createLruCache(maxSize, equals) {
9284
+ var entries2 = [];
9285
+ function get7(key) {
9286
+ var cacheIndex = entries2.findIndex(function(entry2) {
9287
+ return equals(key, entry2.key);
9288
+ });
9289
+ if (cacheIndex > -1) {
9290
+ var entry = entries2[cacheIndex];
9291
+ if (cacheIndex > 0) {
9292
+ entries2.splice(cacheIndex, 1);
9293
+ entries2.unshift(entry);
9294
+ }
9295
+ return entry.value;
9296
+ }
9297
+ return NOT_FOUND;
9298
+ }
9299
+ __name(get7, "get");
9300
+ function put(key, value) {
9301
+ if (get7(key) === NOT_FOUND) {
9302
+ entries2.unshift({
9303
+ key,
9304
+ value
9305
+ });
9306
+ if (entries2.length > maxSize) {
9307
+ entries2.pop();
9308
+ }
9309
+ }
9310
+ }
9311
+ __name(put, "put");
9312
+ function getEntries() {
9313
+ return entries2;
9314
+ }
9315
+ __name(getEntries, "getEntries");
9316
+ function clear3() {
9317
+ entries2 = [];
9318
+ }
9319
+ __name(clear3, "clear");
9320
+ return {
9321
+ get: get7,
9322
+ put,
9323
+ getEntries,
9324
+ clear: clear3
9325
+ };
9326
+ }
9327
+ __name(createLruCache, "createLruCache");
9328
+ var defaultEqualityCheck = /* @__PURE__ */ __name(function defaultEqualityCheck2(a2, b3) {
9329
+ return a2 === b3;
9330
+ }, "defaultEqualityCheck");
9331
+ function createCacheKeyComparator(equalityCheck) {
9332
+ return /* @__PURE__ */ __name(function areArgumentsShallowlyEqual(prev, next) {
9333
+ if (prev === null || next === null || prev.length !== next.length) {
9334
+ return false;
9335
+ }
9336
+ var length = prev.length;
9337
+ for (var i = 0; i < length; i++) {
9338
+ if (!equalityCheck(prev[i], next[i])) {
9339
+ return false;
9340
+ }
9341
+ }
9342
+ return true;
9343
+ }, "areArgumentsShallowlyEqual");
9344
+ }
9345
+ __name(createCacheKeyComparator, "createCacheKeyComparator");
9346
+ function defaultMemoize(func, equalityCheckOrOptions) {
9347
+ var providedOptions = typeof equalityCheckOrOptions === "object" ? equalityCheckOrOptions : {
9348
+ equalityCheck: equalityCheckOrOptions
9349
+ };
9350
+ 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;
9351
+ var comparator = createCacheKeyComparator(equalityCheck);
9352
+ var cache2 = maxSize === 1 ? createSingletonCache(comparator) : createLruCache(maxSize, comparator);
9353
+ function memoized() {
9354
+ var value = cache2.get(arguments);
9355
+ if (value === NOT_FOUND) {
9356
+ value = func.apply(null, arguments);
9357
+ if (resultEqualityCheck) {
9358
+ var entries2 = cache2.getEntries();
9359
+ var matchingEntry = entries2.find(function(entry) {
9360
+ return resultEqualityCheck(entry.value, value);
9361
+ });
9362
+ if (matchingEntry) {
9363
+ value = matchingEntry.value;
9364
+ }
9365
+ }
9366
+ cache2.put(arguments, value);
9367
+ }
9368
+ return value;
9369
+ }
9370
+ __name(memoized, "memoized");
9371
+ memoized.clearCache = function() {
9372
+ return cache2.clear();
9373
+ };
9374
+ return memoized;
9375
+ }
9376
+ __name(defaultMemoize, "defaultMemoize");
9377
+ function getDependencies(funcs) {
9378
+ var dependencies = Array.isArray(funcs[0]) ? funcs[0] : funcs;
9379
+ if (!dependencies.every(function(dep) {
9380
+ return typeof dep === "function";
9381
+ })) {
9382
+ var dependencyTypes = dependencies.map(function(dep) {
9383
+ return typeof dep === "function" ? "function " + (dep.name || "unnamed") + "()" : typeof dep;
9384
+ }).join(", ");
9385
+ throw new Error("createSelector expects all input-selectors to be functions, but received the following types: [" + dependencyTypes + "]");
9386
+ }
9387
+ return dependencies;
9388
+ }
9389
+ __name(getDependencies, "getDependencies");
9390
+ function createSelectorCreator(memoize2) {
9391
+ for (var _len = arguments.length, memoizeOptionsFromArgs = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
9392
+ memoizeOptionsFromArgs[_key - 1] = arguments[_key];
9393
+ }
9394
+ var createSelector2 = /* @__PURE__ */ __name(function createSelector3() {
9395
+ for (var _len2 = arguments.length, funcs = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
9396
+ funcs[_key2] = arguments[_key2];
9397
+ }
9398
+ var _recomputations = 0;
9399
+ var _lastResult;
9400
+ var directlyPassedOptions = {
9401
+ memoizeOptions: void 0
9402
+ };
9403
+ var resultFunc = funcs.pop();
9404
+ if (typeof resultFunc === "object") {
9405
+ directlyPassedOptions = resultFunc;
9406
+ resultFunc = funcs.pop();
9407
+ }
9408
+ if (typeof resultFunc !== "function") {
9409
+ throw new Error("createSelector expects an output function after the inputs, but received: [" + typeof resultFunc + "]");
9410
+ }
9411
+ var _directlyPassedOption = directlyPassedOptions, _directlyPassedOption2 = _directlyPassedOption.memoizeOptions, memoizeOptions = _directlyPassedOption2 === void 0 ? memoizeOptionsFromArgs : _directlyPassedOption2;
9412
+ var finalMemoizeOptions = Array.isArray(memoizeOptions) ? memoizeOptions : [memoizeOptions];
9413
+ var dependencies = getDependencies(funcs);
9414
+ var memoizedResultFunc = memoize2.apply(void 0, [/* @__PURE__ */ __name(function recomputationWrapper() {
9415
+ _recomputations++;
9416
+ return resultFunc.apply(null, arguments);
9417
+ }, "recomputationWrapper")].concat(finalMemoizeOptions));
9418
+ var selector = memoize2(/* @__PURE__ */ __name(function dependenciesChecker() {
9419
+ var params = [];
9420
+ var length = dependencies.length;
9421
+ for (var i = 0; i < length; i++) {
9422
+ params.push(dependencies[i].apply(null, arguments));
9423
+ }
9424
+ _lastResult = memoizedResultFunc.apply(null, params);
9425
+ return _lastResult;
9426
+ }, "dependenciesChecker"));
9427
+ Object.assign(selector, {
9428
+ resultFunc,
9429
+ memoizedResultFunc,
9430
+ dependencies,
9431
+ lastResult: /* @__PURE__ */ __name(function lastResult() {
9432
+ return _lastResult;
9433
+ }, "lastResult"),
9434
+ recomputations: /* @__PURE__ */ __name(function recomputations() {
9435
+ return _recomputations;
9436
+ }, "recomputations"),
9437
+ resetRecomputations: /* @__PURE__ */ __name(function resetRecomputations() {
9438
+ return _recomputations = 0;
9439
+ }, "resetRecomputations")
9440
+ });
9441
+ return selector;
9442
+ }, "createSelector");
9443
+ return createSelector2;
9444
+ }
9445
+ __name(createSelectorCreator, "createSelectorCreator");
9446
+ var createSelector = /* @__PURE__ */ createSelectorCreator(defaultMemoize);
9258
9447
  function useCombinedRefs() {
9259
9448
  for (var _len = arguments.length, refs = new Array(_len), _key = 0; _key < _len; _key++) {
9260
9449
  refs[_key] = arguments[_key];
@@ -56651,21 +56840,27 @@ const DataTable = /* @__PURE__ */ __name((_w) => {
56651
56840
  }
56652
56841
  return false;
56653
56842
  });
56843
+ const dtFormParamsSelector = React.useMemo(
56844
+ () => createSelector(
56845
+ (state2) => reduxForm.formValueSelector(formName)(
56846
+ state2,
56847
+ "reduxFormCellValidation",
56848
+ "reduxFormEntities",
56849
+ "reduxFormQueryParams",
56850
+ "reduxFormSelectedEntityIdMap"
56851
+ ),
56852
+ (result) => result
56853
+ // identity, but memoized
56854
+ ),
56855
+ [formName]
56856
+ );
56654
56857
  const {
56655
56858
  reduxFormCellValidation: _reduxFormCellValidation,
56656
56859
  reduxFormEditingCell,
56657
56860
  reduxFormEntities,
56658
56861
  reduxFormQueryParams: _reduxFormQueryParams = {},
56659
56862
  reduxFormSelectedEntityIdMap: _reduxFormSelectedEntityIdMap = {}
56660
- } = reactRedux.useSelector(/* @__PURE__ */ __name(function dtFormParamsSelector(state2) {
56661
- return reduxForm.formValueSelector(formName)(
56662
- state2,
56663
- "reduxFormCellValidation",
56664
- "reduxFormEntities",
56665
- "reduxFormQueryParams",
56666
- "reduxFormSelectedEntityIdMap"
56667
- );
56668
- }, "dtFormParamsSelector"));
56863
+ } = reactRedux.useSelector(dtFormParamsSelector);
56669
56864
  const reduxFormCellValidation = useDeepEqualMemoIgnoreFns(
56670
56865
  _reduxFormCellValidation
56671
56866
  );
@@ -56972,11 +57167,9 @@ const DataTable = /* @__PURE__ */ __name((_w) => {
56972
57167
  newTableConfig = {
56973
57168
  fieldOptions: []
56974
57169
  };
56975
- if (isEqual$3(prev, newTableConfig)) {
56976
- return prev;
56977
- } else {
56978
- return newTableConfig;
56979
- }
57170
+ }
57171
+ if (isEqual$3(prev, newTableConfig)) {
57172
+ return prev;
56980
57173
  } else {
56981
57174
  return newTableConfig;
56982
57175
  }
@@ -74973,14 +75166,16 @@ function filterSequenceString(sequenceString = "", {
74973
75166
  name: name2,
74974
75167
  isProtein: isProtein2,
74975
75168
  isRna: isRna2,
74976
- isMixedRnaAndDna
75169
+ isMixedRnaAndDna,
75170
+ getAcceptedInsertChars
74977
75171
  } = {}) {
74978
- const acceptedChars = getAcceptedChars({
75172
+ const sequenceTypeInfo = {
74979
75173
  isOligo: isOligo2,
74980
75174
  isProtein: isProtein2,
74981
75175
  isRna: isRna2,
74982
75176
  isMixedRnaAndDna
74983
- });
75177
+ };
75178
+ const acceptedChars = isFunction$2(getAcceptedInsertChars) ? getAcceptedInsertChars(sequenceTypeInfo) : getAcceptedChars(sequenceTypeInfo);
74984
75179
  const replaceChars = getReplaceChars({
74985
75180
  isOligo: isOligo2,
74986
75181
  isProtein: isProtein2,
@@ -75216,6 +75411,7 @@ function tidyUpSequenceData(pSeqData, options = {}) {
75216
75411
  doNotProvideIdsForAnnotations,
75217
75412
  noCdsTranslations,
75218
75413
  convertAnnotationsFromAAIndices,
75414
+ getAcceptedInsertChars,
75219
75415
  topLevelSeqData
75220
75416
  } = options;
75221
75417
  let seqData = cloneDeep(pSeqData);
@@ -75247,13 +75443,16 @@ function tidyUpSequenceData(pSeqData, options = {}) {
75247
75443
  if (!doNotRemoveInvalidChars) {
75248
75444
  if (seqData.isProtein) {
75249
75445
  const [newSeq] = filterSequenceString(seqData.proteinSequence, __spreadProps(__spreadValues({}, topLevelSeqData || seqData), {
75250
- isProtein: true
75446
+ isProtein: true,
75447
+ getAcceptedInsertChars
75251
75448
  }));
75252
75449
  seqData.proteinSequence = newSeq;
75253
75450
  } else {
75254
- const [newSeq] = filterSequenceString(seqData.sequence, __spreadValues({
75451
+ const [newSeq] = filterSequenceString(seqData.sequence, __spreadProps(__spreadValues({
75255
75452
  additionalValidChars
75256
- }, topLevelSeqData || seqData));
75453
+ }, topLevelSeqData || seqData), {
75454
+ getAcceptedInsertChars
75455
+ }));
75257
75456
  seqData.sequence = newSeq;
75258
75457
  }
75259
75458
  }
@@ -97609,195 +97808,6 @@ function sequenceSelector(state2) {
97609
97808
  return sequenceDataSelector(state2).sequence;
97610
97809
  }
97611
97810
  __name(sequenceSelector, "sequenceSelector");
97612
- var NOT_FOUND = "NOT_FOUND";
97613
- function createSingletonCache(equals) {
97614
- var entry;
97615
- return {
97616
- get: /* @__PURE__ */ __name(function get7(key) {
97617
- if (entry && equals(entry.key, key)) {
97618
- return entry.value;
97619
- }
97620
- return NOT_FOUND;
97621
- }, "get"),
97622
- put: /* @__PURE__ */ __name(function put(key, value) {
97623
- entry = {
97624
- key,
97625
- value
97626
- };
97627
- }, "put"),
97628
- getEntries: /* @__PURE__ */ __name(function getEntries() {
97629
- return entry ? [entry] : [];
97630
- }, "getEntries"),
97631
- clear: /* @__PURE__ */ __name(function clear3() {
97632
- entry = void 0;
97633
- }, "clear")
97634
- };
97635
- }
97636
- __name(createSingletonCache, "createSingletonCache");
97637
- function createLruCache(maxSize, equals) {
97638
- var entries2 = [];
97639
- function get7(key) {
97640
- var cacheIndex = entries2.findIndex(function(entry2) {
97641
- return equals(key, entry2.key);
97642
- });
97643
- if (cacheIndex > -1) {
97644
- var entry = entries2[cacheIndex];
97645
- if (cacheIndex > 0) {
97646
- entries2.splice(cacheIndex, 1);
97647
- entries2.unshift(entry);
97648
- }
97649
- return entry.value;
97650
- }
97651
- return NOT_FOUND;
97652
- }
97653
- __name(get7, "get");
97654
- function put(key, value) {
97655
- if (get7(key) === NOT_FOUND) {
97656
- entries2.unshift({
97657
- key,
97658
- value
97659
- });
97660
- if (entries2.length > maxSize) {
97661
- entries2.pop();
97662
- }
97663
- }
97664
- }
97665
- __name(put, "put");
97666
- function getEntries() {
97667
- return entries2;
97668
- }
97669
- __name(getEntries, "getEntries");
97670
- function clear3() {
97671
- entries2 = [];
97672
- }
97673
- __name(clear3, "clear");
97674
- return {
97675
- get: get7,
97676
- put,
97677
- getEntries,
97678
- clear: clear3
97679
- };
97680
- }
97681
- __name(createLruCache, "createLruCache");
97682
- var defaultEqualityCheck = /* @__PURE__ */ __name(function defaultEqualityCheck2(a2, b3) {
97683
- return a2 === b3;
97684
- }, "defaultEqualityCheck");
97685
- function createCacheKeyComparator(equalityCheck) {
97686
- return /* @__PURE__ */ __name(function areArgumentsShallowlyEqual(prev, next) {
97687
- if (prev === null || next === null || prev.length !== next.length) {
97688
- return false;
97689
- }
97690
- var length = prev.length;
97691
- for (var i = 0; i < length; i++) {
97692
- if (!equalityCheck(prev[i], next[i])) {
97693
- return false;
97694
- }
97695
- }
97696
- return true;
97697
- }, "areArgumentsShallowlyEqual");
97698
- }
97699
- __name(createCacheKeyComparator, "createCacheKeyComparator");
97700
- function defaultMemoize(func, equalityCheckOrOptions) {
97701
- var providedOptions = typeof equalityCheckOrOptions === "object" ? equalityCheckOrOptions : {
97702
- equalityCheck: equalityCheckOrOptions
97703
- };
97704
- 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;
97705
- var comparator = createCacheKeyComparator(equalityCheck);
97706
- var cache2 = maxSize === 1 ? createSingletonCache(comparator) : createLruCache(maxSize, comparator);
97707
- function memoized() {
97708
- var value = cache2.get(arguments);
97709
- if (value === NOT_FOUND) {
97710
- value = func.apply(null, arguments);
97711
- if (resultEqualityCheck) {
97712
- var entries2 = cache2.getEntries();
97713
- var matchingEntry = entries2.find(function(entry) {
97714
- return resultEqualityCheck(entry.value, value);
97715
- });
97716
- if (matchingEntry) {
97717
- value = matchingEntry.value;
97718
- }
97719
- }
97720
- cache2.put(arguments, value);
97721
- }
97722
- return value;
97723
- }
97724
- __name(memoized, "memoized");
97725
- memoized.clearCache = function() {
97726
- return cache2.clear();
97727
- };
97728
- return memoized;
97729
- }
97730
- __name(defaultMemoize, "defaultMemoize");
97731
- function getDependencies(funcs) {
97732
- var dependencies = Array.isArray(funcs[0]) ? funcs[0] : funcs;
97733
- if (!dependencies.every(function(dep) {
97734
- return typeof dep === "function";
97735
- })) {
97736
- var dependencyTypes = dependencies.map(function(dep) {
97737
- return typeof dep === "function" ? "function " + (dep.name || "unnamed") + "()" : typeof dep;
97738
- }).join(", ");
97739
- throw new Error("createSelector expects all input-selectors to be functions, but received the following types: [" + dependencyTypes + "]");
97740
- }
97741
- return dependencies;
97742
- }
97743
- __name(getDependencies, "getDependencies");
97744
- function createSelectorCreator(memoize2) {
97745
- for (var _len = arguments.length, memoizeOptionsFromArgs = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
97746
- memoizeOptionsFromArgs[_key - 1] = arguments[_key];
97747
- }
97748
- var createSelector2 = /* @__PURE__ */ __name(function createSelector3() {
97749
- for (var _len2 = arguments.length, funcs = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
97750
- funcs[_key2] = arguments[_key2];
97751
- }
97752
- var _recomputations = 0;
97753
- var _lastResult;
97754
- var directlyPassedOptions = {
97755
- memoizeOptions: void 0
97756
- };
97757
- var resultFunc = funcs.pop();
97758
- if (typeof resultFunc === "object") {
97759
- directlyPassedOptions = resultFunc;
97760
- resultFunc = funcs.pop();
97761
- }
97762
- if (typeof resultFunc !== "function") {
97763
- throw new Error("createSelector expects an output function after the inputs, but received: [" + typeof resultFunc + "]");
97764
- }
97765
- var _directlyPassedOption = directlyPassedOptions, _directlyPassedOption2 = _directlyPassedOption.memoizeOptions, memoizeOptions = _directlyPassedOption2 === void 0 ? memoizeOptionsFromArgs : _directlyPassedOption2;
97766
- var finalMemoizeOptions = Array.isArray(memoizeOptions) ? memoizeOptions : [memoizeOptions];
97767
- var dependencies = getDependencies(funcs);
97768
- var memoizedResultFunc = memoize2.apply(void 0, [/* @__PURE__ */ __name(function recomputationWrapper() {
97769
- _recomputations++;
97770
- return resultFunc.apply(null, arguments);
97771
- }, "recomputationWrapper")].concat(finalMemoizeOptions));
97772
- var selector = memoize2(/* @__PURE__ */ __name(function dependenciesChecker() {
97773
- var params = [];
97774
- var length = dependencies.length;
97775
- for (var i = 0; i < length; i++) {
97776
- params.push(dependencies[i].apply(null, arguments));
97777
- }
97778
- _lastResult = memoizedResultFunc.apply(null, params);
97779
- return _lastResult;
97780
- }, "dependenciesChecker"));
97781
- Object.assign(selector, {
97782
- resultFunc,
97783
- memoizedResultFunc,
97784
- dependencies,
97785
- lastResult: /* @__PURE__ */ __name(function lastResult() {
97786
- return _lastResult;
97787
- }, "lastResult"),
97788
- recomputations: /* @__PURE__ */ __name(function recomputations() {
97789
- return _recomputations;
97790
- }, "recomputations"),
97791
- resetRecomputations: /* @__PURE__ */ __name(function resetRecomputations() {
97792
- return _recomputations = 0;
97793
- }, "resetRecomputations")
97794
- });
97795
- return selector;
97796
- }, "createSelector");
97797
- return createSelector2;
97798
- }
97799
- __name(createSelectorCreator, "createSelectorCreator");
97800
- var createSelector = /* @__PURE__ */ createSelectorCreator(defaultMemoize);
97801
97811
  const restrictionEnzymesSelector = createSelector(
97802
97812
  () => defaultEnzymesByName,
97803
97813
  (state2, additionalEnzymes) => {
@@ -97823,7 +97833,34 @@ const restrictionEnzymesSelector = createSelector(
97823
97833
  const cutsiteLabelColorSelector = createSelector(sequenceDataSelector, function(sequenceData2) {
97824
97834
  return sequenceData2.cutsiteLabelColors;
97825
97835
  });
97826
- function cutsitesSelector(sequence2, circular2, enzymeList, cutsiteLabelColors) {
97836
+ const cutsitesCache = [];
97837
+ function getCachedResult(argsObj) {
97838
+ const idx = cutsitesCache.findIndex(
97839
+ (entry) => entry && isEqual$3(entry.args, argsObj)
97840
+ );
97841
+ if (idx === -1) return;
97842
+ const hit = cutsitesCache[idx];
97843
+ return hit.result;
97844
+ }
97845
+ __name(getCachedResult, "getCachedResult");
97846
+ function setCachedResult(argsObj, result, cacheSize = 1) {
97847
+ cutsitesCache.push({
97848
+ args: argsObj,
97849
+ result
97850
+ });
97851
+ if (cutsitesCache.length > cacheSize) cutsitesCache.shift();
97852
+ }
97853
+ __name(setCachedResult, "setCachedResult");
97854
+ function cutsitesSelector(sequence2, circular2, enzymeList, cutsiteLabelColors, editorSize = 1) {
97855
+ const cachedResult = getCachedResult({
97856
+ sequence: sequence2,
97857
+ circular: circular2,
97858
+ enzymeList,
97859
+ cutsiteLabelColors
97860
+ });
97861
+ if (cachedResult) {
97862
+ return cachedResult;
97863
+ }
97827
97864
  const cutsitesByName = getLowerCaseObj(
97828
97865
  getCutsitesFromSequence(sequence2, circular2, map$3(enzymeList))
97829
97866
  );
@@ -97856,11 +97893,22 @@ function cutsitesSelector(sequence2, circular2, enzymeList, cutsiteLabelColors)
97856
97893
  const cutsitesArray = flatMap(cutsitesByName, function(cutsitesForEnzyme) {
97857
97894
  return cutsitesForEnzyme;
97858
97895
  });
97859
- return {
97896
+ const result = {
97860
97897
  cutsitesByName,
97861
97898
  cutsitesById,
97862
97899
  cutsitesArray
97863
97900
  };
97901
+ setCachedResult(
97902
+ {
97903
+ sequence: sequence2,
97904
+ circular: circular2,
97905
+ enzymeList,
97906
+ cutsiteLabelColors
97907
+ },
97908
+ result,
97909
+ editorSize
97910
+ );
97911
+ return result;
97864
97912
  }
97865
97913
  __name(cutsitesSelector, "cutsitesSelector");
97866
97914
  const cutsitesSelector$1 = createSelector(
@@ -97868,6 +97916,7 @@ const cutsitesSelector$1 = createSelector(
97868
97916
  circularSelector,
97869
97917
  restrictionEnzymesSelector,
97870
97918
  cutsiteLabelColorSelector,
97919
+ (editorState) => editorState.editorSize,
97871
97920
  cutsitesSelector
97872
97921
  );
97873
97922
  function divideBy3(num, shouldDivideBy3) {
@@ -99283,11 +99332,12 @@ function showDialog({
99283
99332
  props,
99284
99333
  overrideName
99285
99334
  }) {
99286
- var _a2;
99335
+ var _a2, _b2, _c, _d;
99287
99336
  dialogHolder.dialogType = dialogType;
99288
99337
  if (!dialogHolder.dialogType && ModalComponent) {
99289
99338
  dialogHolder.dialogType = "TGCustomModal";
99290
99339
  }
99340
+ dialogHolder.editorName = props == null ? void 0 : props.editorName;
99291
99341
  if (document.activeElement && document.activeElement.closest(".veEditor")) {
99292
99342
  let editorName;
99293
99343
  (_a2 = document.activeElement.closest(".veEditor")) == null ? void 0 : _a2.className.split(" ").forEach((c2) => {
@@ -99301,16 +99351,28 @@ function showDialog({
99301
99351
  dialogHolder.CustomModalComponent = ModalComponent;
99302
99352
  dialogHolder.props = props;
99303
99353
  dialogHolder.overrideName = overrideName;
99304
- dialogHolder.setUniqKeyToForceRerender(uuid());
99354
+ if (dialogHolder.editorName && (dialogHolder == null ? void 0 : dialogHolder[dialogHolder.editorName])) {
99355
+ (_c = (_b2 = dialogHolder == null ? void 0 : dialogHolder[dialogHolder.editorName]) == null ? void 0 : _b2.setUniqKeyToForceRerender) == null ? void 0 : _c.call(
99356
+ _b2,
99357
+ uuid()
99358
+ );
99359
+ } else {
99360
+ (_d = dialogHolder == null ? void 0 : dialogHolder.setUniqKeyToForceRerender) == null ? void 0 : _d.call(dialogHolder, uuid());
99361
+ }
99305
99362
  }
99306
99363
  __name(showDialog, "showDialog");
99307
99364
  function hideDialog() {
99365
+ var _a2, _b2, _c;
99308
99366
  delete dialogHolder.dialogType;
99309
99367
  delete dialogHolder.CustomModalComponent;
99310
99368
  delete dialogHolder.props;
99311
99369
  delete dialogHolder.overrideName;
99370
+ if (dialogHolder.editorName && (dialogHolder == null ? void 0 : dialogHolder[dialogHolder.editorName])) {
99371
+ (_b2 = (_a2 = dialogHolder == null ? void 0 : dialogHolder[dialogHolder.editorName]) == null ? void 0 : _a2.setUniqKeyToForceRerender) == null ? void 0 : _b2.call(_a2);
99372
+ } else {
99373
+ (_c = dialogHolder == null ? void 0 : dialogHolder.setUniqKeyToForceRerender) == null ? void 0 : _c.call(dialogHolder);
99374
+ }
99312
99375
  delete dialogHolder.editorName;
99313
- dialogHolder.setUniqKeyToForceRerender();
99314
99376
  }
99315
99377
  __name(hideDialog, "hideDialog");
99316
99378
  const typeToDialogType = {
@@ -99585,7 +99647,8 @@ const handleSave = /* @__PURE__ */ __name((props) => (..._0) => __async(exports,
99585
99647
  readOnly: readOnly2,
99586
99648
  alwaysAllowSave,
99587
99649
  sequenceData: sequenceData2,
99588
- lastSavedIdUpdate: lastSavedIdUpdate2
99650
+ lastSavedIdUpdate: lastSavedIdUpdate2,
99651
+ getAcceptedInsertChars
99589
99652
  } = props;
99590
99653
  const saveHandler = opts2.isSaveAs ? onSaveAs || onSave : onSave;
99591
99654
  const updateLastSavedIdToCurrent = /* @__PURE__ */ __name(() => {
@@ -99598,7 +99661,8 @@ const handleSave = /* @__PURE__ */ __name((props) => (..._0) => __async(exports,
99598
99661
  opts2,
99599
99662
  tidyUpSequenceData(sequenceData2, {
99600
99663
  doNotRemoveInvalidChars: true,
99601
- annotationsAsObjects: true
99664
+ annotationsAsObjects: true,
99665
+ getAcceptedInsertChars
99602
99666
  }),
99603
99667
  props,
99604
99668
  updateLastSavedIdToCurrent
@@ -99780,8 +99844,8 @@ const withEditorProps = compose(
99780
99844
  caretPositionOrRange,
99781
99845
  options
99782
99846
  } = props.beforeSequenceInsertOrDelete ? (yield props.beforeSequenceInsertOrDelete(
99783
- tidyUpSequenceData(_sequenceDataToInsert),
99784
- tidyUpSequenceData(_existingSequenceData),
99847
+ tidyUpSequenceData(_sequenceDataToInsert, { getAcceptedInsertChars: props.getAcceptedInsertChars }),
99848
+ tidyUpSequenceData(_existingSequenceData, { getAcceptedInsertChars: props.getAcceptedInsertChars }),
99785
99849
  _caretPositionOrRange,
99786
99850
  _options
99787
99851
  )) || {} : {};
@@ -99944,7 +100008,11 @@ const getEditorState = createSelector(
99944
100008
  (state2) => state2.VectorEditor,
99945
100009
  (state2, editorName) => editorName,
99946
100010
  (VectorEditor, editorName) => {
99947
- return VectorEditor[editorName];
100011
+ const editorState = VectorEditor[editorName];
100012
+ editorState && (editorState.editorSize = Object.values(VectorEditor).filter(
100013
+ (editorItem) => editorItem == null ? void 0 : editorItem.sequenceData
100014
+ ).length);
100015
+ return editorState;
99948
100016
  }
99949
100017
  );
99950
100018
  function mapStateToProps(state2, ownProps) {
@@ -99981,6 +100049,9 @@ function mapStateToProps(state2, ownProps) {
99981
100049
  annotationTypePlural,
99982
100050
  sequenceLength
99983
100051
  );
100052
+ if (dialogHolder.editorName) {
100053
+ annotationToAdd = dialogHolder.editorName === editorName ? annotationToAdd : void 0;
100054
+ }
99984
100055
  }
99985
100056
  });
99986
100057
  const toReturn = __spreadProps(__spreadValues({}, editorState), {
@@ -100208,13 +100279,15 @@ function getShowGCContent(state2, ownProps) {
100208
100279
  return toRet;
100209
100280
  }
100210
100281
  __name(getShowGCContent, "getShowGCContent");
100211
- function jsonToJson(incomingJson) {
100282
+ function jsonToJson(incomingJson, options) {
100283
+ const { getAcceptedInsertChars } = options || {};
100212
100284
  return JSON.stringify(
100213
100285
  omit$1(
100214
100286
  cleanUpTeselagenJsonForExport(
100215
100287
  tidyUpSequenceData(incomingJson, {
100216
100288
  doNotRemoveInvalidChars: true,
100217
- annotationsAsObjects: false
100289
+ annotationsAsObjects: false,
100290
+ getAcceptedInsertChars
100218
100291
  })
100219
100292
  ),
100220
100293
  [
@@ -110900,9 +110973,19 @@ const _AnnotationPositioner = class _AnnotationPositioner extends React.PureComp
110900
110973
  };
110901
110974
  __name(_AnnotationPositioner, "AnnotationPositioner");
110902
110975
  let AnnotationPositioner = _AnnotationPositioner;
110976
+ let measureCanvas;
110977
+ function getAnnotationTextWidth(text2, fontSize = ANNOTATION_LABEL_FONT_WIDTH, fontFamily = "monospace") {
110978
+ if (!measureCanvas) {
110979
+ measureCanvas = document.createElement("canvas");
110980
+ }
110981
+ const ctx = measureCanvas.getContext("2d");
110982
+ ctx.font = `${fontSize}px ${fontFamily}`;
110983
+ return ctx.measureText(text2).width;
110984
+ }
110985
+ __name(getAnnotationTextWidth, "getAnnotationTextWidth");
110903
110986
  const doesLabelFitInAnnotation = /* @__PURE__ */ __name((text2 = "", { range: range2, width }, charWidth2) => {
110904
- const textLength = text2.length * ANNOTATION_LABEL_FONT_WIDTH;
110905
- const widthMinusOne = (range2 ? getWidth(range2, charWidth2, 0) : width) - charWidth2;
110987
+ const textLength = getAnnotationTextWidth(text2);
110988
+ const widthMinusOne = range2 ? getWidth(range2, charWidth2, 0) - ANNOTATION_LABEL_FONT_WIDTH * 2 : width - ANNOTATION_LABEL_FONT_WIDTH * 2;
110906
110989
  return widthMinusOne > textLength;
110907
110990
  }, "doesLabelFitInAnnotation");
110908
110991
  function getAnnotationClassnames({ overlapsSelf }, { viewName, type: type2 }) {
@@ -110912,6 +110995,78 @@ function getAnnotationClassnames({ overlapsSelf }, { viewName, type: type2 }) {
110912
110995
  });
110913
110996
  }
110914
110997
  __name(getAnnotationClassnames, "getAnnotationClassnames");
110998
+ function getAnnotationTextOffset({
110999
+ width,
111000
+ nameToDisplay,
111001
+ hasAPoint,
111002
+ pointiness,
111003
+ forward
111004
+ }) {
111005
+ return width / 2 - getAnnotationTextWidth(nameToDisplay) / 2 - (hasAPoint ? (pointiness / 2 + ANNOTATION_LABEL_FONT_WIDTH / 2) * (forward ? 1 : -1) : 0);
111006
+ }
111007
+ __name(getAnnotationTextOffset, "getAnnotationTextOffset");
111008
+ function getAnnotationNameInfo({
111009
+ name: name2,
111010
+ width,
111011
+ hasAPoint,
111012
+ pointiness,
111013
+ forward,
111014
+ charWidth: charWidth2,
111015
+ truncateLabelsThatDoNotFit,
111016
+ onlyShowLabelsThatDoNotFit,
111017
+ annotation
111018
+ }) {
111019
+ let nameToDisplay = name2;
111020
+ let textOffset = getAnnotationTextOffset({
111021
+ width,
111022
+ nameToDisplay,
111023
+ hasAPoint,
111024
+ pointiness,
111025
+ forward
111026
+ });
111027
+ const widthAvailableForText = width - ANNOTATION_LABEL_FONT_WIDTH * 2;
111028
+ if (!doesLabelFitInAnnotation(name2, { width }, charWidth2) || !onlyShowLabelsThatDoNotFit && ["parts", "features"].includes(annotation.annotationTypePlural)) {
111029
+ if (truncateLabelsThatDoNotFit) {
111030
+ let left2 = 0;
111031
+ let right2 = name2.length;
111032
+ let bestFit = "";
111033
+ while (left2 <= right2) {
111034
+ const mid = Math.floor((left2 + right2) / 2);
111035
+ const candidate = name2.slice(0, mid);
111036
+ const candidateWidth = getAnnotationTextWidth(candidate);
111037
+ if (candidateWidth <= widthAvailableForText) {
111038
+ if (candidate.length > bestFit.length) {
111039
+ bestFit = candidate;
111040
+ }
111041
+ left2 = mid + 1;
111042
+ } else {
111043
+ right2 = mid - 1;
111044
+ }
111045
+ }
111046
+ if (bestFit.length < name2.length) {
111047
+ bestFit = bestFit.slice(0, -2) + "..";
111048
+ }
111049
+ nameToDisplay = bestFit;
111050
+ if (nameToDisplay.length <= 3) {
111051
+ textOffset = 0;
111052
+ nameToDisplay = "";
111053
+ } else {
111054
+ textOffset = getAnnotationTextOffset({
111055
+ width,
111056
+ nameToDisplay,
111057
+ hasAPoint,
111058
+ pointiness,
111059
+ forward
111060
+ });
111061
+ }
111062
+ } else {
111063
+ textOffset = 0;
111064
+ nameToDisplay = "";
111065
+ }
111066
+ }
111067
+ return { textOffset, nameToDisplay };
111068
+ }
111069
+ __name(getAnnotationNameInfo, "getAnnotationNameInfo");
110915
111070
  function PointedAnnotation(props) {
110916
111071
  const {
110917
111072
  className,
@@ -111047,27 +111202,17 @@ function PointedAnnotation(props) {
111047
111202
  Q ${pointiness},${height / 2} ${0},${0}
111048
111203
  z`;
111049
111204
  }
111050
- let nameToDisplay = name2;
111051
- let textOffset = width / 2 - name2.length * 5 / 2 - (hasAPoint ? pointiness / 2 * (forward ? 1 : -1) : 0);
111052
- if (!doesLabelFitInAnnotation(name2, { width }, charWidth2) || !onlyShowLabelsThatDoNotFit && ["parts", "features"].includes(annotation.annotationTypePlural)) {
111053
- if (truncateLabelsThatDoNotFit) {
111054
- const fractionToDisplay = width / (name2.length * ANNOTATION_LABEL_FONT_WIDTH);
111055
- const numLetters = Math.floor(fractionToDisplay * name2.length);
111056
- nameToDisplay = name2.slice(0, numLetters);
111057
- if (nameToDisplay.length > 3) {
111058
- if (nameToDisplay.length !== name2.length) {
111059
- nameToDisplay += "..";
111060
- }
111061
- textOffset = width / 2 - nameToDisplay.length * 5 / 2 - (hasAPoint ? pointiness / 2 * (forward ? 1 : -1) : 0);
111062
- } else {
111063
- textOffset = 0;
111064
- nameToDisplay = "";
111065
- }
111066
- } else {
111067
- textOffset = 0;
111068
- nameToDisplay = "";
111069
- }
111070
- }
111205
+ const { textOffset, nameToDisplay } = getAnnotationNameInfo({
111206
+ name: name2,
111207
+ width,
111208
+ hasAPoint,
111209
+ pointiness,
111210
+ forward,
111211
+ charWidth: charWidth2,
111212
+ truncateLabelsThatDoNotFit,
111213
+ onlyShowLabelsThatDoNotFit,
111214
+ annotation
111215
+ });
111071
111216
  let _textColor = textColor;
111072
111217
  if (!textColor) {
111073
111218
  try {
@@ -116986,7 +117131,7 @@ function showFileDialog({ multiple = false, onSelect }) {
116986
117131
  input.click();
116987
117132
  }
116988
117133
  __name(showFileDialog, "showFileDialog");
116989
- const version = "0.8.29";
117134
+ const version = "0.8.30";
116990
117135
  const packageJson = {
116991
117136
  version
116992
117137
  };
@@ -117904,7 +118049,7 @@ const fileCommandDefs = __spreadValues(__spreadProps(__spreadValues({
117904
118049
  },
117905
118050
  exportSequenceAsTeselagenJson: {
117906
118051
  name: "Download Teselagen JSON File",
117907
- handler: /* @__PURE__ */ __name((props) => props.exportSequenceToFile("teselagenJson"), "handler")
118052
+ handler: /* @__PURE__ */ __name((props) => props.exportSequenceToFile("teselagenJson", { getAcceptedInsertChars: props.getAcceptedInsertChars }), "handler")
117908
118053
  },
117909
118054
  viewProperties: {
117910
118055
  handler: /* @__PURE__ */ __name((props) => props.propertiesViewOpen(), "handler")
@@ -120715,6 +120860,7 @@ const _SequenceInputNoHotkeys = class _SequenceInputNoHotkeys extends React.Comp
120715
120860
  caretPosition: caretPosition2,
120716
120861
  sequenceData: sequenceData2,
120717
120862
  maxInsertSize,
120863
+ getAcceptedInsertChars,
120718
120864
  showAminoAcidUnitAsCodon
120719
120865
  } = this.props;
120720
120866
  const { charsToInsert, hasTempError } = this.state;
@@ -120750,7 +120896,8 @@ const _SequenceInputNoHotkeys = class _SequenceInputNoHotkeys extends React.Comp
120750
120896
  const [sanitizedVal, warnings] = filterSequenceString(
120751
120897
  e.target.value,
120752
120898
  __spreadProps(__spreadValues({}, sequenceData2), {
120753
- name: void 0
120899
+ name: void 0,
120900
+ getAcceptedInsertChars
120754
120901
  })
120755
120902
  );
120756
120903
  if (warnings.length) {
@@ -121629,7 +121776,8 @@ function VectorInteractionHOC(Component) {
121629
121776
  onPaste,
121630
121777
  disableBpEditing,
121631
121778
  sequenceData: sequenceData2,
121632
- maxInsertSize
121779
+ maxInsertSize,
121780
+ getAcceptedInsertChars
121633
121781
  } = this.props;
121634
121782
  if (disableBpEditing) {
121635
121783
  return this.createDisableBpEditingMsg();
@@ -121668,7 +121816,8 @@ function VectorInteractionHOC(Component) {
121668
121816
  topLevelSeqData: sequenceData2,
121669
121817
  provideNewIdsForAnnotations: true,
121670
121818
  annotationsAsObjects: true,
121671
- noCdsTranslations: true
121819
+ noCdsTranslations: true,
121820
+ getAcceptedInsertChars
121672
121821
  });
121673
121822
  if (!seqDataToInsert.sequence.length)
121674
121823
  return window.toastr.warning("Sorry no valid base pairs to paste");
@@ -121688,7 +121837,8 @@ function VectorInteractionHOC(Component) {
121688
121837
  selectionLayer: selectionLayer2,
121689
121838
  copyOptions: copyOptions2,
121690
121839
  disableBpEditing,
121691
- readOnly: readOnly2
121840
+ readOnly: readOnly2,
121841
+ getAcceptedInsertChars
121692
121842
  } = this.props;
121693
121843
  const onCut = this.props.onCut || this.props.onCopy || noop$8;
121694
121844
  const seqData = tidyUpSequenceData(
@@ -121712,7 +121862,8 @@ function VectorInteractionHOC(Component) {
121712
121862
  {
121713
121863
  doNotRemoveInvalidChars: true,
121714
121864
  annotationsAsObjects: true,
121715
- includeProteinSequence: true
121865
+ includeProteinSequence: true,
121866
+ getAcceptedInsertChars
121716
121867
  }
121717
121868
  );
121718
121869
  if (!(this.sequenceDataToCopy || {}).textToCopy && !seqData.sequence.length)
@@ -121730,7 +121881,8 @@ function VectorInteractionHOC(Component) {
121730
121881
  e,
121731
121882
  tidyUpSequenceData(seqData, {
121732
121883
  doNotRemoveInvalidChars: true,
121733
- annotationsAsObjects: true
121884
+ annotationsAsObjects: true,
121885
+ getAcceptedInsertChars
121734
121886
  }),
121735
121887
  this.props
121736
121888
  );
@@ -121780,6 +121932,7 @@ function VectorInteractionHOC(Component) {
121780
121932
  readOnly: readOnly2,
121781
121933
  disableBpEditing,
121782
121934
  maxInsertSize,
121935
+ getAcceptedInsertChars,
121783
121936
  showAminoAcidUnitAsCodon
121784
121937
  } = this.props;
121785
121938
  const sequenceLength = sequenceData2.sequence.length;
@@ -121799,6 +121952,7 @@ function VectorInteractionHOC(Component) {
121799
121952
  sequenceLength,
121800
121953
  caretPosition: caretPosition2,
121801
121954
  maxInsertSize,
121955
+ getAcceptedInsertChars,
121802
121956
  showAminoAcidUnitAsCodon,
121803
121957
  handleInsert: /* @__PURE__ */ __name((seqDataToInsert) => __async(this, null, function* () {
121804
121958
  yield insertAndSelectHelper({
@@ -127491,6 +127645,30 @@ const sizeSchema = /* @__PURE__ */ __name((isProtein2) => ({
127491
127645
  }) : /* @__PURE__ */ React.createElement("span", null, "(", base1Range.start, "-", base1Range.end, ")")));
127492
127646
  }, "render")
127493
127647
  }), "sizeSchema");
127648
+ const getMemoOrfs = /* @__PURE__ */ (() => {
127649
+ let lastDeps;
127650
+ let lastResult;
127651
+ return (editorState) => {
127652
+ const {
127653
+ sequenceData: sequenceData2,
127654
+ minimumOrfSize: minimumOrfSize2,
127655
+ useAdditionalOrfStartCodons: useAdditionalOrfStartCodons2
127656
+ } = editorState;
127657
+ const { sequence: sequence2, circular: circular2 } = sequenceData2;
127658
+ const deps = {
127659
+ sequence: sequence2,
127660
+ circular: circular2,
127661
+ minimumOrfSize: minimumOrfSize2,
127662
+ useAdditionalOrfStartCodons: useAdditionalOrfStartCodons2
127663
+ };
127664
+ if (lastResult && isEqual$3(deps, lastDeps)) {
127665
+ return lastResult;
127666
+ }
127667
+ lastResult = selectors.orfsSelector(editorState);
127668
+ lastDeps = deps;
127669
+ return lastResult;
127670
+ };
127671
+ })();
127494
127672
  var lodash$1 = { exports: {} };
127495
127673
  /**
127496
127674
  * @license
@@ -138046,10 +138224,16 @@ function GlobalDialog(props) {
138046
138224
  hideDialog();
138047
138225
  };
138048
138226
  }, []);
138227
+ React.useEffect(() => {
138228
+ dialogHolder.setUniqKeyToForceRerender = setUniqKeyToForceRerender;
138229
+ if (editorName) {
138230
+ const slot = dialogHolder[editorName] = dialogHolder[editorName] || {};
138231
+ slot.setUniqKeyToForceRerender = setUniqKeyToForceRerender;
138232
+ }
138233
+ }, [editorName]);
138049
138234
  if (dialogHolder.editorName && editorName && dialogHolder.editorName !== editorName) {
138050
138235
  return null;
138051
138236
  }
138052
- dialogHolder.setUniqKeyToForceRerender = setUniqKeyToForceRerender;
138053
138237
  const Comp = dialogHolder.CustomModalComponent || dialogOverrides[dialogHolder.overrideName] || Dialogs[dialogHolder.dialogType];
138054
138238
  if (!Comp) return null;
138055
138239
  return /* @__PURE__ */ React.createElement(
@@ -142813,6 +142997,8 @@ const userDefinedHandlersAndOpts = [
142813
142997
  "enzymeManageOverride",
142814
142998
  "enzymeGroupsOverride",
142815
142999
  "additionalEnzymes",
143000
+ "getAcceptedInsertChars",
143001
+ "maxInsertSize",
142816
143002
  "onDelete",
142817
143003
  "onCopy",
142818
143004
  "autoAnnotateFeatures",
@@ -144586,7 +144772,7 @@ const OrfProperties$1 = compose(
144586
144772
  readOnly: readOnly2,
144587
144773
  annotationVisibility: annotationVisibility2,
144588
144774
  useAdditionalOrfStartCodons: useAdditionalOrfStartCodons2,
144589
- orfs: selectors.orfsSelector(editorState),
144775
+ orfs: getMemoOrfs(editorState),
144590
144776
  sequenceLength: sequence2.length,
144591
144777
  sequenceData: sequenceData2,
144592
144778
  minimumOrfSize: minimumOrfSize2
@@ -144776,7 +144962,7 @@ const TranslationProperties$1 = compose(
144776
144962
  return {
144777
144963
  readOnly: readOnly2,
144778
144964
  translations: selectors.translationsSelector(editorState),
144779
- orfs: selectors.orfsSelector(editorState),
144965
+ orfs: getMemoOrfs(editorState),
144780
144966
  annotationVisibility: annotationVisibility2,
144781
144967
  sequenceLength: (sequenceData2.sequence || "").length,
144782
144968
  sequenceData: sequenceData2
@@ -146061,6 +146247,7 @@ const _Editor = class _Editor extends React.Component {
146061
146247
  hoveredId,
146062
146248
  isFullscreen,
146063
146249
  maxInsertSize,
146250
+ getAcceptedInsertChars,
146064
146251
  showAminoAcidUnitAsCodon,
146065
146252
  maxAnnotationsToDisplay,
146066
146253
  minHeight = 400,
@@ -146250,6 +146437,7 @@ const _Editor = class _Editor extends React.Component {
146250
146437
  }), panelPropsToSpread), {
146251
146438
  editorName,
146252
146439
  maxInsertSize,
146440
+ getAcceptedInsertChars,
146253
146441
  showAminoAcidUnitAsCodon,
146254
146442
  isProtein: sequenceData2.isProtein,
146255
146443
  onlyShowLabelsThatDoNotFit,