@teselagen/ove 0.3.30 → 0.3.43

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
@@ -18236,11 +18236,20 @@ var _fails = /* @__PURE__ */ __name(function(exec) {
18236
18236
  return true;
18237
18237
  }
18238
18238
  }, "_fails");
18239
- var _descriptors = !_fails(function() {
18240
- return Object.defineProperty({}, "a", { get: function() {
18241
- return 7;
18242
- } }).a != 7;
18243
- });
18239
+ var _descriptors;
18240
+ var hasRequired_descriptors;
18241
+ function require_descriptors() {
18242
+ if (hasRequired_descriptors)
18243
+ return _descriptors;
18244
+ hasRequired_descriptors = 1;
18245
+ _descriptors = !_fails(function() {
18246
+ return Object.defineProperty({}, "a", { get: function() {
18247
+ return 7;
18248
+ } }).a != 7;
18249
+ });
18250
+ return _descriptors;
18251
+ }
18252
+ __name(require_descriptors, "require_descriptors");
18244
18253
  var _domCreate;
18245
18254
  var hasRequired_domCreate;
18246
18255
  function require_domCreate() {
@@ -18256,7 +18265,7 @@ function require_domCreate() {
18256
18265
  return _domCreate;
18257
18266
  }
18258
18267
  __name(require_domCreate, "require_domCreate");
18259
- var _ie8DomDefine = !_descriptors && !_fails(function() {
18268
+ var _ie8DomDefine = !require_descriptors() && !_fails(function() {
18260
18269
  return Object.defineProperty(require_domCreate()("div"), "a", { get: function() {
18261
18270
  return 7;
18262
18271
  } }).a != 7;
@@ -18278,7 +18287,7 @@ var anObject$5 = _anObject;
18278
18287
  var IE8_DOM_DEFINE$1 = _ie8DomDefine;
18279
18288
  var toPrimitive$2 = _toPrimitive$1;
18280
18289
  var dP$3 = Object.defineProperty;
18281
- _objectDp.f = _descriptors ? Object.defineProperty : /* @__PURE__ */ __name(function defineProperty2(O2, P2, Attributes) {
18290
+ _objectDp.f = require_descriptors() ? Object.defineProperty : /* @__PURE__ */ __name(function defineProperty2(O2, P2, Attributes) {
18282
18291
  anObject$5(O2);
18283
18292
  P2 = toPrimitive$2(P2, true);
18284
18293
  anObject$5(Attributes);
@@ -18303,7 +18312,7 @@ var _propertyDesc = /* @__PURE__ */ __name(function(bitmap, value) {
18303
18312
  }, "_propertyDesc");
18304
18313
  var dP$2 = _objectDp;
18305
18314
  var createDesc$3 = _propertyDesc;
18306
- var _hide = _descriptors ? function(object3, key, value) {
18315
+ var _hide = require_descriptors() ? function(object3, key, value) {
18307
18316
  return dP$2.f(object3, key, createDesc$3(1, value));
18308
18317
  } : function(object3, key, value) {
18309
18318
  object3[key] = value;
@@ -18492,7 +18501,7 @@ function require_objectAssign() {
18492
18501
  if (hasRequired_objectAssign)
18493
18502
  return _objectAssign;
18494
18503
  hasRequired_objectAssign = 1;
18495
- var DESCRIPTORS2 = _descriptors;
18504
+ var DESCRIPTORS2 = require_descriptors();
18496
18505
  var getKeys2 = _objectKeys;
18497
18506
  var gOPS2 = _objectGops;
18498
18507
  var pIE2 = _objectPie;
@@ -18561,7 +18570,7 @@ var _redefine = _hide;
18561
18570
  var dP$1 = _objectDp;
18562
18571
  var anObject$4 = _anObject;
18563
18572
  var getKeys$1 = _objectKeys;
18564
- var _objectDps = _descriptors ? Object.defineProperties : /* @__PURE__ */ __name(function defineProperties(O2, Properties2) {
18573
+ var _objectDps = require_descriptors() ? Object.defineProperties : /* @__PURE__ */ __name(function defineProperties(O2, Properties2) {
18565
18574
  anObject$4(O2);
18566
18575
  var keys5 = getKeys$1(Properties2);
18567
18576
  var length = keys5.length;
@@ -19030,7 +19039,7 @@ var _default$8 = /* @__PURE__ */ __name(function(instance, Constructor) {
19030
19039
  }
19031
19040
  }, "_default$8");
19032
19041
  var $export$3 = _export;
19033
- $export$3($export$3.S + $export$3.F * !_descriptors, "Object", { defineProperty: _objectDp.f });
19042
+ $export$3($export$3.S + $export$3.F * !require_descriptors(), "Object", { defineProperty: _objectDp.f });
19034
19043
  var $Object$2 = _coreExports.Object;
19035
19044
  var defineProperty$c = /* @__PURE__ */ __name(function defineProperty3(it, key, desc) {
19036
19045
  return $Object$2.defineProperty(it, key, desc);
@@ -19180,7 +19189,7 @@ var toPrimitive$1 = _toPrimitive$1;
19180
19189
  var has$9 = _has;
19181
19190
  var IE8_DOM_DEFINE = _ie8DomDefine;
19182
19191
  var gOPD$5 = Object.getOwnPropertyDescriptor;
19183
- _objectGopd.f = _descriptors ? gOPD$5 : /* @__PURE__ */ __name(function getOwnPropertyDescriptor(O2, P2) {
19192
+ _objectGopd.f = require_descriptors() ? gOPD$5 : /* @__PURE__ */ __name(function getOwnPropertyDescriptor(O2, P2) {
19184
19193
  O2 = toIObject$1(O2);
19185
19194
  P2 = toPrimitive$1(P2, true);
19186
19195
  if (IE8_DOM_DEFINE)
@@ -19193,7 +19202,7 @@ _objectGopd.f = _descriptors ? gOPD$5 : /* @__PURE__ */ __name(function getOwnPr
19193
19202
  }, "getOwnPropertyDescriptor");
19194
19203
  var global$2 = _globalExports;
19195
19204
  var has$8 = _has;
19196
- var DESCRIPTORS = _descriptors;
19205
+ var DESCRIPTORS = require_descriptors();
19197
19206
  var $export$2 = _export;
19198
19207
  var redefine = _redefine;
19199
19208
  var META = _metaExports.KEY;
@@ -57090,7 +57099,7 @@ const _DataTable = class _DataTable extends React$2.Component {
57090
57099
  isEntityDisabled,
57091
57100
  entity
57092
57101
  });
57093
- const _isClean = entity._isClean && doNotValidateUntouchedRows;
57102
+ const _isClean = entity._isClean && doNotValidateUntouchedRows || isEntityClean(entity);
57094
57103
  const err2 = !_isClean && reduxFormCellValidation[cellId];
57095
57104
  let selectedTopBorder, selectedRightBorder, selectedBottomBorder, selectedLeftBorder;
57096
57105
  if (reduxFormSelectedCells[cellId]) {
@@ -59286,6 +59295,21 @@ function stripNumberAtEnd(str) {
59286
59295
  return str.replace(getNumberStrAtEnd(str), "");
59287
59296
  }
59288
59297
  __name(stripNumberAtEnd, "stripNumberAtEnd");
59298
+ function isEntityClean(e2) {
59299
+ let isClean = true;
59300
+ lodashExports.some(e2, (val2, key) => {
59301
+ if (key === "id")
59302
+ return;
59303
+ if (key === "_isClean")
59304
+ return;
59305
+ if (val2) {
59306
+ isClean = false;
59307
+ return true;
59308
+ }
59309
+ });
59310
+ return isClean;
59311
+ }
59312
+ __name(isEntityClean, "isEntityClean");
59289
59313
  const wrapDialog = /* @__PURE__ */ __name((topLevelDialogProps = {}) => (Component) => (props) => {
59290
59314
  const r2 = React$2.useRef();
59291
59315
  const memoedHotkeys = React$2.useMemo(
@@ -61800,7 +61824,7 @@ __name(asyncValidateHelper, "asyncValidateHelper");
61800
61824
  function removeCleanRows(reduxFormEntities, reduxFormCellValidation) {
61801
61825
  const toFilterOut = {};
61802
61826
  const entsToUse = (reduxFormEntities || []).filter((e2) => {
61803
- if (!e2._isClean)
61827
+ if (!(e2._isClean || isEntityClean(e2)))
61804
61828
  return true;
61805
61829
  else {
61806
61830
  toFilterOut[getIdOrCodeOrIndex(e2)] = true;
@@ -76765,7 +76789,9 @@ ptIconWrapper(
76765
76789
  ))),
76766
76790
  400
76767
76791
  );
76768
- const isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);
76792
+ const isSafari = /^((?!chrome|android).)*safari/i.test(
76793
+ navigator.userAgent
76794
+ );
76769
76795
  function genericCommandFactory(config) {
76770
76796
  const out = {};
76771
76797
  for (const cmdId in config.commandDefs) {
@@ -77818,6 +77844,7 @@ const minimumOrfSize$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.de
77818
77844
  minimumOrfSizeUpdate
77819
77845
  }, Symbol.toStringTag, { value: "Module" }));
77820
77846
  const protein_letters = "ACDEFGHIKLMNPQRSTVWY";
77847
+ const protein_letters_withUandX = "ACDEFGHIKLMNPQRSTVWYUX";
77821
77848
  const extended_protein_letters = "ACDEFGHIKLMNPQRSTVWYBXZJUO.*-";
77822
77849
  const ambiguous_dna_letters = "GATCRYWSMKHBVDN";
77823
77850
  const unambiguous_dna_letters = "GATC";
@@ -77886,6 +77913,7 @@ const bioData = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePrope
77886
77913
  extended_protein_letters,
77887
77914
  extended_protein_values,
77888
77915
  protein_letters,
77916
+ protein_letters_withUandX,
77889
77917
  unambiguous_dna_letters,
77890
77918
  unambiguous_rna_letters
77891
77919
  }, Symbol.toStringTag, { value: "Module" }));
@@ -83904,20 +83932,91 @@ const modifiableTypes = [
83904
83932
  "primers",
83905
83933
  "guides"
83906
83934
  ];
83907
- function filterSequenceString(sequenceString, additionalValidChars = "", charOverrides) {
83908
- if (sequenceString) {
83909
- return sequenceString.replace(
83910
- new RegExp(
83911
- `[^${charOverrides || `atgcyrswkmbvdhnu${additionalValidChars.split("").join("\\")}`}]`,
83912
- "gi"
83913
- ),
83914
- ""
83935
+ function filterSequenceString(sequenceString, {
83936
+ additionalValidChars = "",
83937
+ isOligo: isOligo2,
83938
+ name: name2,
83939
+ isProtein: isProtein2,
83940
+ isRna: isRna2,
83941
+ isMixedRnaAndDna,
83942
+ includeStopCodon
83943
+ } = {}) {
83944
+ const acceptedChars = getAcceptedChars({
83945
+ isOligo: isOligo2,
83946
+ isProtein: isProtein2,
83947
+ isRna: isRna2,
83948
+ isMixedRnaAndDna,
83949
+ includeStopCodon
83950
+ });
83951
+ const replaceChars = getReplaceChars({
83952
+ isOligo: isOligo2,
83953
+ isProtein: isProtein2,
83954
+ isRna: isRna2,
83955
+ isMixedRnaAndDna
83956
+ });
83957
+ let sanitizedVal = "";
83958
+ const invalidChars = [];
83959
+ const chars2 = `${acceptedChars}${additionalValidChars.split("").join("\\")}`;
83960
+ const warnings = [];
83961
+ const replaceCount = {};
83962
+ sequenceString.split("").forEach((letter) => {
83963
+ const lowerLetter = letter.toLowerCase();
83964
+ if (replaceChars && replaceChars[lowerLetter]) {
83965
+ if (!replaceCount[lowerLetter]) {
83966
+ replaceCount[lowerLetter] = 0;
83967
+ }
83968
+ replaceCount[lowerLetter]++;
83969
+ const isUpper = lowerLetter !== letter;
83970
+ sanitizedVal += isUpper ? replaceChars[lowerLetter].toUpperCase() : replaceChars[lowerLetter];
83971
+ } else if (chars2.includes(lowerLetter)) {
83972
+ sanitizedVal += letter;
83973
+ } else {
83974
+ invalidChars.push(letter);
83975
+ }
83976
+ });
83977
+ Object.keys(replaceCount).forEach((letter) => {
83978
+ warnings.push(
83979
+ `Replaced "${letter}" with "${replaceChars[letter]}"${replaceCount[letter] > 1 ? ` ${replaceCount[letter]} times` : ""}`
83915
83980
  );
83916
- } else {
83917
- return sequenceString;
83981
+ });
83982
+ if (sequenceString.length !== sanitizedVal.length) {
83983
+ warnings.push(
83984
+ `${name2 ? `Sequence ${name2}: ` : ""}Invalid character(s) detected and removed: ${invalidChars.slice(0, 100).join(", ")} `
83985
+ );
83986
+ }
83987
+ if (typeof window !== "undefined" && window.toastr && warnings.length) {
83988
+ warnings.forEach((warning2) => {
83989
+ window.toastr.warning(warning2);
83990
+ });
83918
83991
  }
83992
+ return [sanitizedVal, warnings];
83919
83993
  }
83920
83994
  __name(filterSequenceString, "filterSequenceString");
83995
+ function getAcceptedChars({
83996
+ isOligo: isOligo2,
83997
+ isProtein: isProtein2,
83998
+ isRna: isRna2,
83999
+ isMixedRnaAndDna,
84000
+ includeStopCodon
84001
+ } = {}) {
84002
+ return isProtein2 ? `${protein_letters_withUandX.toLowerCase()}${includeStopCodon ? "*." : ""}}` : isOligo2 ? ambiguous_rna_letters.toLowerCase() + "t" : isRna2 ? ambiguous_rna_letters.toLowerCase() + "t" : isMixedRnaAndDna ? ambiguous_rna_letters.toLowerCase() + ambiguous_dna_letters.toLowerCase() : (
84003
+ //just plain old dna
84004
+ ambiguous_rna_letters.toLowerCase() + ambiguous_dna_letters.toLowerCase()
84005
+ );
84006
+ }
84007
+ __name(getAcceptedChars, "getAcceptedChars");
84008
+ function getReplaceChars({
84009
+ isOligo: isOligo2,
84010
+ isProtein: isProtein2,
84011
+ isRna: isRna2,
84012
+ isMixedRnaAndDna
84013
+ } = {}) {
84014
+ return isProtein2 ? {} : isOligo2 ? {} : isRna2 ? { t: "u" } : isMixedRnaAndDna ? {} : (
84015
+ //just plain old dna
84016
+ {}
84017
+ );
84018
+ }
84019
+ __name(getReplaceChars, "getReplaceChars");
83921
84020
  function tidyUpAnnotation(_annotation, {
83922
84021
  sequenceData: sequenceData2 = {},
83923
84022
  convertAnnotationsFromAAIndices,
@@ -84046,14 +84145,6 @@ function coerceLocation({
84046
84145
  }
84047
84146
  }
84048
84147
  __name(coerceLocation, "coerceLocation");
84049
- function filterAminoAcidSequenceString(sequenceString, options) {
84050
- options = options || {};
84051
- if (options.includeStopCodon) {
84052
- return sequenceString == null ? void 0 : sequenceString.replace(/[^xtgalmfwkqespvicyhrndu.*]/gi, "");
84053
- }
84054
- return sequenceString == null ? void 0 : sequenceString.replace(/[^xtgalmfwkqespvicyhrndu]/gi, "");
84055
- }
84056
- __name(filterAminoAcidSequenceString, "filterAminoAcidSequenceString");
84057
84148
  function getDegenerateDnaStringFromAAString(aaString) {
84058
84149
  return aaString.split("").map((char) => aminoAcidToDegenerateDnaMap[char.toLowerCase()] || "nnn").join("");
84059
84150
  }
@@ -84065,11 +84156,10 @@ function tidyUpSequenceData(pSeqData, options = {}) {
84065
84156
  removeUnwantedChars,
84066
84157
  additionalValidChars,
84067
84158
  noTranslationData,
84068
- charOverrides,
84069
84159
  doNotProvideIdsForAnnotations,
84070
- proteinFilterOptions,
84071
84160
  noCdsTranslations,
84072
- convertAnnotationsFromAAIndices
84161
+ convertAnnotationsFromAAIndices,
84162
+ topLevelSeqData
84073
84163
  } = options;
84074
84164
  let seqData = lodashExports.cloneDeep(pSeqData);
84075
84165
  const response = {
@@ -84099,16 +84189,15 @@ function tidyUpSequenceData(pSeqData, options = {}) {
84099
84189
  }
84100
84190
  if (removeUnwantedChars) {
84101
84191
  if (seqData.isProtein) {
84102
- seqData.proteinSequence = filterAminoAcidSequenceString(
84103
- seqData.proteinSequence,
84104
- __spreadValues({ includeStopCodon: true }, proteinFilterOptions)
84105
- );
84192
+ const [newSeq] = filterSequenceString(seqData.proteinSequence, __spreadValues({
84193
+ includeStopCodon: true
84194
+ }, topLevelSeqData || seqData));
84195
+ seqData.proteinSequence = newSeq;
84106
84196
  } else {
84107
- seqData.sequence = filterSequenceString(
84108
- seqData.sequence,
84109
- `${additionalValidChars || ""}${seqData.isRna || seqData.isMixedRnaAndDna ? "u" : ""}`,
84110
- charOverrides
84111
- );
84197
+ const [newSeq] = filterSequenceString(seqData.sequence, __spreadValues({
84198
+ additionalValidChars
84199
+ }, topLevelSeqData || seqData));
84200
+ seqData.sequence = newSeq;
84112
84201
  }
84113
84202
  }
84114
84203
  if (seqData.isProtein) {
@@ -93455,7 +93544,8 @@ function validateSequence(sequence2, options = {}) {
93455
93544
  inclusive1BasedEnd,
93456
93545
  additionalValidChars,
93457
93546
  allowOverflowAnnotations,
93458
- coerceFeatureTypes
93547
+ coerceFeatureTypes,
93548
+ includeStopCodon
93459
93549
  } = options;
93460
93550
  [
93461
93551
  "isDNA",
@@ -93505,7 +93595,6 @@ function validateSequence(sequence2, options = {}) {
93505
93595
  response.messages.push("No sequence detected");
93506
93596
  sequence2.sequence = "";
93507
93597
  }
93508
- let validChars;
93509
93598
  if (sequence2.isProtein === void 0 && guessIfProtein) {
93510
93599
  sequence2.isProtein = !guessIfSequenceIsDnaAndNotProtein(
93511
93600
  sequence2.sequence,
@@ -93513,12 +93602,15 @@ function validateSequence(sequence2, options = {}) {
93513
93602
  );
93514
93603
  }
93515
93604
  if (sequence2.isProtein) {
93516
- validChars = filterAminoAcidSequenceString(sequence2.sequence);
93605
+ const [validChars, warnings] = filterSequenceString(sequence2.sequence, {
93606
+ name: sequence2.name,
93607
+ isProtein: true,
93608
+ additionalValidChars,
93609
+ includeStopCodon
93610
+ });
93517
93611
  if (validChars !== sequence2.sequence) {
93518
93612
  sequence2.sequence = validChars;
93519
- response.messages.push(
93520
- "Import Error: Illegal character(s) detected and removed from amino acid sequence. Allowed characters are: xtgalmfwkqespvicyhrndu"
93521
- );
93613
+ response.messages.push(...warnings);
93522
93614
  }
93523
93615
  sequence2.type = "PROTEIN";
93524
93616
  sequence2.isProtein = true;
@@ -93540,12 +93632,12 @@ function validateSequence(sequence2, options = {}) {
93540
93632
  } else {
93541
93633
  sequence2.type = "DNA";
93542
93634
  }
93543
- validChars = filterSequenceString(sequence2.sequence, additionalValidChars);
93635
+ const [validChars, warnings] = filterSequenceString(sequence2.sequence, __spreadValues({
93636
+ additionalValidChars
93637
+ }, sequence2));
93544
93638
  if (validChars !== sequence2.sequence) {
93545
93639
  sequence2.sequence = validChars;
93546
- response.messages.push(
93547
- "Import Error: Illegal character(s) detected and removed from sequence. Allowed characters are: atgcyrswkmbvdhn"
93548
- );
93640
+ response.messages.push(...warnings);
93549
93641
  }
93550
93642
  }
93551
93643
  if (!sequence2.size) {
@@ -109027,18 +109119,6 @@ function getSelFromWrappedAddon(selectionLayer2, sequenceLength) {
109027
109119
  return selToUse;
109028
109120
  }
109029
109121
  __name(getSelFromWrappedAddon, "getSelFromWrappedAddon");
109030
- function getAcceptedChars({
109031
- isOligo: isOligo2,
109032
- isProtein: isProtein2,
109033
- isRna: isRna2,
109034
- isMixedRnaAndDna
109035
- } = {}) {
109036
- return isProtein2 ? extended_protein_letters.toLowerCase() : isOligo2 ? ambiguous_rna_letters.toLowerCase() + "t" : isRna2 ? ambiguous_rna_letters.toLowerCase() : isMixedRnaAndDna ? ambiguous_rna_letters.toLowerCase() + ambiguous_dna_letters.toLowerCase() : (
109037
- //just plain old dna
109038
- ambiguous_dna_letters.toLowerCase()
109039
- );
109040
- }
109041
- __name(getAcceptedChars, "getAcceptedChars");
109042
109122
  function getStripedPattern({ color: color2 }) {
109043
109123
  return /* @__PURE__ */ React$2.createElement(
109044
109124
  "pattern",
@@ -125645,7 +125725,7 @@ function showFileDialog({ multiple = false, onSelect }) {
125645
125725
  }
125646
125726
  __name(showFileDialog, "showFileDialog");
125647
125727
  const name = "@teselagen/ove";
125648
- const version = "0.3.29";
125728
+ const version = "0.3.42";
125649
125729
  const main = "./src/index.js";
125650
125730
  const exports$1 = {
125651
125731
  ".": {
@@ -129398,9 +129478,8 @@ const _SequenceInputNoHotkeys = class _SequenceInputNoHotkeys extends React$2.Co
129398
129478
  selectionLayer: selectionLayer2,
129399
129479
  sequenceLength,
129400
129480
  isProtein: isProtein2,
129401
- replaceChars,
129402
129481
  caretPosition: caretPosition2,
129403
- acceptedChars,
129482
+ sequenceData: sequenceData2,
129404
129483
  maxInsertSize
129405
129484
  } = this.props;
129406
129485
  const { charsToInsert, hasTempError } = this.state;
@@ -129433,17 +129512,13 @@ const _SequenceInputNoHotkeys = class _SequenceInputNoHotkeys extends React$2.Co
129433
129512
  autoFocus: true,
129434
129513
  style: hasTempError ? { borderColor: "red" } : {},
129435
129514
  onChange: (e2) => {
129436
- let sanitizedVal = "";
129437
- e2.target.value.split("").forEach((letter) => {
129438
- const lowerLetter = letter.toLowerCase();
129439
- if (replaceChars && replaceChars[lowerLetter]) {
129440
- const isUpper = lowerLetter !== letter;
129441
- sanitizedVal += isUpper ? replaceChars[lowerLetter].toUpperCase() : replaceChars[lowerLetter];
129442
- } else if (acceptedChars.includes(lowerLetter)) {
129443
- sanitizedVal += letter;
129444
- }
129445
- });
129446
- if (e2.target.value.length !== sanitizedVal.length) {
129515
+ const [sanitizedVal, warnings] = filterSequenceString(
129516
+ e2.target.value,
129517
+ __spreadProps(__spreadValues({}, sequenceData2), {
129518
+ name: void 0
129519
+ })
129520
+ );
129521
+ if (warnings.length) {
129447
129522
  this.setState({
129448
129523
  hasTempError: true
129449
129524
  });
@@ -130318,7 +130393,8 @@ function VectorInteractionHOC(Component) {
130318
130393
  selectionLayer: selectionLayer2 = { start: -1, end: -1 },
130319
130394
  readOnly: readOnly2,
130320
130395
  onPaste,
130321
- disableBpEditing
130396
+ disableBpEditing,
130397
+ sequenceData: sequenceData2
130322
130398
  } = this.props;
130323
130399
  if (disableBpEditing) {
130324
130400
  return window.toastr.warning("Sorry the underlying sequence is locked");
@@ -130343,6 +130419,7 @@ function VectorInteractionHOC(Component) {
130343
130419
  };
130344
130420
  }
130345
130421
  seqDataToInsert = tidyUpSequenceData(seqDataToInsert, {
130422
+ topLevelSeqData: sequenceData2,
130346
130423
  provideNewIdsForAnnotations: true,
130347
130424
  annotationsAsObjects: true,
130348
130425
  removeUnwantedChars: true,
@@ -130438,8 +130515,7 @@ function VectorInteractionHOC(Component) {
130438
130515
  createSequenceInputPopup({
130439
130516
  useEventPositioning,
130440
130517
  isReplace,
130441
- replaceChars: sequenceData2.isRna ? { t: "u" } : void 0,
130442
- acceptedChars: getAcceptedChars(sequenceData2),
130518
+ sequenceData: sequenceData2,
130443
130519
  isProtein: sequenceData2.isProtein,
130444
130520
  selectionLayer: selectionLayer2,
130445
130521
  sequenceLength,
@@ -141932,14 +142008,8 @@ const CustomContentEditable = generateField(/* @__PURE__ */ __name(function Cust
141932
142008
  const newVal2 = e2.target.innerText;
141933
142009
  const savedCaretPosition = EditCaretPositioning.saveSelection(e2.currentTarget);
141934
142010
  setCaretPosition(savedCaretPosition);
141935
- const acceptedChars = getAcceptedChars(sequenceData2);
141936
- let newBases = "";
141937
- newVal2.split("").forEach((letter) => {
141938
- if (acceptedChars.includes(letter.toLowerCase())) {
141939
- newBases += letter;
141940
- }
141941
- });
141942
- if (newVal2.length !== newBases.length) {
142011
+ const [newBases, warnings] = filterSequenceString(newVal2, sequenceData2);
142012
+ if (warnings.length) {
141943
142013
  setTempError(true);
141944
142014
  setTimeout(() => {
141945
142015
  setTempError(false);