@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.es.js CHANGED
@@ -18218,11 +18218,20 @@ var _fails = /* @__PURE__ */ __name(function(exec) {
18218
18218
  return true;
18219
18219
  }
18220
18220
  }, "_fails");
18221
- var _descriptors = !_fails(function() {
18222
- return Object.defineProperty({}, "a", { get: function() {
18223
- return 7;
18224
- } }).a != 7;
18225
- });
18221
+ var _descriptors;
18222
+ var hasRequired_descriptors;
18223
+ function require_descriptors() {
18224
+ if (hasRequired_descriptors)
18225
+ return _descriptors;
18226
+ hasRequired_descriptors = 1;
18227
+ _descriptors = !_fails(function() {
18228
+ return Object.defineProperty({}, "a", { get: function() {
18229
+ return 7;
18230
+ } }).a != 7;
18231
+ });
18232
+ return _descriptors;
18233
+ }
18234
+ __name(require_descriptors, "require_descriptors");
18226
18235
  var _domCreate;
18227
18236
  var hasRequired_domCreate;
18228
18237
  function require_domCreate() {
@@ -18238,7 +18247,7 @@ function require_domCreate() {
18238
18247
  return _domCreate;
18239
18248
  }
18240
18249
  __name(require_domCreate, "require_domCreate");
18241
- var _ie8DomDefine = !_descriptors && !_fails(function() {
18250
+ var _ie8DomDefine = !require_descriptors() && !_fails(function() {
18242
18251
  return Object.defineProperty(require_domCreate()("div"), "a", { get: function() {
18243
18252
  return 7;
18244
18253
  } }).a != 7;
@@ -18260,7 +18269,7 @@ var anObject$5 = _anObject;
18260
18269
  var IE8_DOM_DEFINE$1 = _ie8DomDefine;
18261
18270
  var toPrimitive$2 = _toPrimitive$1;
18262
18271
  var dP$3 = Object.defineProperty;
18263
- _objectDp.f = _descriptors ? Object.defineProperty : /* @__PURE__ */ __name(function defineProperty2(O2, P2, Attributes) {
18272
+ _objectDp.f = require_descriptors() ? Object.defineProperty : /* @__PURE__ */ __name(function defineProperty2(O2, P2, Attributes) {
18264
18273
  anObject$5(O2);
18265
18274
  P2 = toPrimitive$2(P2, true);
18266
18275
  anObject$5(Attributes);
@@ -18285,7 +18294,7 @@ var _propertyDesc = /* @__PURE__ */ __name(function(bitmap, value) {
18285
18294
  }, "_propertyDesc");
18286
18295
  var dP$2 = _objectDp;
18287
18296
  var createDesc$3 = _propertyDesc;
18288
- var _hide = _descriptors ? function(object3, key, value) {
18297
+ var _hide = require_descriptors() ? function(object3, key, value) {
18289
18298
  return dP$2.f(object3, key, createDesc$3(1, value));
18290
18299
  } : function(object3, key, value) {
18291
18300
  object3[key] = value;
@@ -18474,7 +18483,7 @@ function require_objectAssign() {
18474
18483
  if (hasRequired_objectAssign)
18475
18484
  return _objectAssign;
18476
18485
  hasRequired_objectAssign = 1;
18477
- var DESCRIPTORS2 = _descriptors;
18486
+ var DESCRIPTORS2 = require_descriptors();
18478
18487
  var getKeys2 = _objectKeys;
18479
18488
  var gOPS2 = _objectGops;
18480
18489
  var pIE2 = _objectPie;
@@ -18543,7 +18552,7 @@ var _redefine = _hide;
18543
18552
  var dP$1 = _objectDp;
18544
18553
  var anObject$4 = _anObject;
18545
18554
  var getKeys$1 = _objectKeys;
18546
- var _objectDps = _descriptors ? Object.defineProperties : /* @__PURE__ */ __name(function defineProperties(O2, Properties2) {
18555
+ var _objectDps = require_descriptors() ? Object.defineProperties : /* @__PURE__ */ __name(function defineProperties(O2, Properties2) {
18547
18556
  anObject$4(O2);
18548
18557
  var keys5 = getKeys$1(Properties2);
18549
18558
  var length = keys5.length;
@@ -19012,7 +19021,7 @@ var _default$8 = /* @__PURE__ */ __name(function(instance, Constructor) {
19012
19021
  }
19013
19022
  }, "_default$8");
19014
19023
  var $export$3 = _export;
19015
- $export$3($export$3.S + $export$3.F * !_descriptors, "Object", { defineProperty: _objectDp.f });
19024
+ $export$3($export$3.S + $export$3.F * !require_descriptors(), "Object", { defineProperty: _objectDp.f });
19016
19025
  var $Object$2 = _coreExports.Object;
19017
19026
  var defineProperty$c = /* @__PURE__ */ __name(function defineProperty3(it, key, desc) {
19018
19027
  return $Object$2.defineProperty(it, key, desc);
@@ -19162,7 +19171,7 @@ var toPrimitive$1 = _toPrimitive$1;
19162
19171
  var has$9 = _has;
19163
19172
  var IE8_DOM_DEFINE = _ie8DomDefine;
19164
19173
  var gOPD$5 = Object.getOwnPropertyDescriptor;
19165
- _objectGopd.f = _descriptors ? gOPD$5 : /* @__PURE__ */ __name(function getOwnPropertyDescriptor(O2, P2) {
19174
+ _objectGopd.f = require_descriptors() ? gOPD$5 : /* @__PURE__ */ __name(function getOwnPropertyDescriptor(O2, P2) {
19166
19175
  O2 = toIObject$1(O2);
19167
19176
  P2 = toPrimitive$1(P2, true);
19168
19177
  if (IE8_DOM_DEFINE)
@@ -19175,7 +19184,7 @@ _objectGopd.f = _descriptors ? gOPD$5 : /* @__PURE__ */ __name(function getOwnPr
19175
19184
  }, "getOwnPropertyDescriptor");
19176
19185
  var global$2 = _globalExports;
19177
19186
  var has$8 = _has;
19178
- var DESCRIPTORS = _descriptors;
19187
+ var DESCRIPTORS = require_descriptors();
19179
19188
  var $export$2 = _export;
19180
19189
  var redefine = _redefine;
19181
19190
  var META = _metaExports.KEY;
@@ -57072,7 +57081,7 @@ const _DataTable = class _DataTable extends React__default$1.Component {
57072
57081
  isEntityDisabled,
57073
57082
  entity
57074
57083
  });
57075
- const _isClean = entity._isClean && doNotValidateUntouchedRows;
57084
+ const _isClean = entity._isClean && doNotValidateUntouchedRows || isEntityClean(entity);
57076
57085
  const err2 = !_isClean && reduxFormCellValidation[cellId];
57077
57086
  let selectedTopBorder, selectedRightBorder, selectedBottomBorder, selectedLeftBorder;
57078
57087
  if (reduxFormSelectedCells[cellId]) {
@@ -59268,6 +59277,21 @@ function stripNumberAtEnd(str) {
59268
59277
  return str.replace(getNumberStrAtEnd(str), "");
59269
59278
  }
59270
59279
  __name(stripNumberAtEnd, "stripNumberAtEnd");
59280
+ function isEntityClean(e2) {
59281
+ let isClean = true;
59282
+ lodashExports.some(e2, (val2, key) => {
59283
+ if (key === "id")
59284
+ return;
59285
+ if (key === "_isClean")
59286
+ return;
59287
+ if (val2) {
59288
+ isClean = false;
59289
+ return true;
59290
+ }
59291
+ });
59292
+ return isClean;
59293
+ }
59294
+ __name(isEntityClean, "isEntityClean");
59271
59295
  const wrapDialog = /* @__PURE__ */ __name((topLevelDialogProps = {}) => (Component2) => (props) => {
59272
59296
  const r2 = useRef();
59273
59297
  const memoedHotkeys = useMemo$1(
@@ -61782,7 +61806,7 @@ __name(asyncValidateHelper, "asyncValidateHelper");
61782
61806
  function removeCleanRows(reduxFormEntities, reduxFormCellValidation) {
61783
61807
  const toFilterOut = {};
61784
61808
  const entsToUse = (reduxFormEntities || []).filter((e2) => {
61785
- if (!e2._isClean)
61809
+ if (!(e2._isClean || isEntityClean(e2)))
61786
61810
  return true;
61787
61811
  else {
61788
61812
  toFilterOut[getIdOrCodeOrIndex(e2)] = true;
@@ -76747,7 +76771,9 @@ ptIconWrapper(
76747
76771
  ))),
76748
76772
  400
76749
76773
  );
76750
- const isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);
76774
+ const isSafari = /^((?!chrome|android).)*safari/i.test(
76775
+ navigator.userAgent
76776
+ );
76751
76777
  function genericCommandFactory(config) {
76752
76778
  const out = {};
76753
76779
  for (const cmdId in config.commandDefs) {
@@ -77800,6 +77826,7 @@ const minimumOrfSize$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.de
77800
77826
  minimumOrfSizeUpdate
77801
77827
  }, Symbol.toStringTag, { value: "Module" }));
77802
77828
  const protein_letters = "ACDEFGHIKLMNPQRSTVWY";
77829
+ const protein_letters_withUandX = "ACDEFGHIKLMNPQRSTVWYUX";
77803
77830
  const extended_protein_letters = "ACDEFGHIKLMNPQRSTVWYBXZJUO.*-";
77804
77831
  const ambiguous_dna_letters = "GATCRYWSMKHBVDN";
77805
77832
  const unambiguous_dna_letters = "GATC";
@@ -77868,6 +77895,7 @@ const bioData = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePrope
77868
77895
  extended_protein_letters,
77869
77896
  extended_protein_values,
77870
77897
  protein_letters,
77898
+ protein_letters_withUandX,
77871
77899
  unambiguous_dna_letters,
77872
77900
  unambiguous_rna_letters
77873
77901
  }, Symbol.toStringTag, { value: "Module" }));
@@ -83886,20 +83914,91 @@ const modifiableTypes = [
83886
83914
  "primers",
83887
83915
  "guides"
83888
83916
  ];
83889
- function filterSequenceString(sequenceString, additionalValidChars = "", charOverrides) {
83890
- if (sequenceString) {
83891
- return sequenceString.replace(
83892
- new RegExp(
83893
- `[^${charOverrides || `atgcyrswkmbvdhnu${additionalValidChars.split("").join("\\")}`}]`,
83894
- "gi"
83895
- ),
83896
- ""
83917
+ function filterSequenceString(sequenceString, {
83918
+ additionalValidChars = "",
83919
+ isOligo: isOligo2,
83920
+ name: name2,
83921
+ isProtein: isProtein2,
83922
+ isRna: isRna2,
83923
+ isMixedRnaAndDna,
83924
+ includeStopCodon
83925
+ } = {}) {
83926
+ const acceptedChars = getAcceptedChars({
83927
+ isOligo: isOligo2,
83928
+ isProtein: isProtein2,
83929
+ isRna: isRna2,
83930
+ isMixedRnaAndDna,
83931
+ includeStopCodon
83932
+ });
83933
+ const replaceChars = getReplaceChars({
83934
+ isOligo: isOligo2,
83935
+ isProtein: isProtein2,
83936
+ isRna: isRna2,
83937
+ isMixedRnaAndDna
83938
+ });
83939
+ let sanitizedVal = "";
83940
+ const invalidChars = [];
83941
+ const chars2 = `${acceptedChars}${additionalValidChars.split("").join("\\")}`;
83942
+ const warnings = [];
83943
+ const replaceCount = {};
83944
+ sequenceString.split("").forEach((letter) => {
83945
+ const lowerLetter = letter.toLowerCase();
83946
+ if (replaceChars && replaceChars[lowerLetter]) {
83947
+ if (!replaceCount[lowerLetter]) {
83948
+ replaceCount[lowerLetter] = 0;
83949
+ }
83950
+ replaceCount[lowerLetter]++;
83951
+ const isUpper = lowerLetter !== letter;
83952
+ sanitizedVal += isUpper ? replaceChars[lowerLetter].toUpperCase() : replaceChars[lowerLetter];
83953
+ } else if (chars2.includes(lowerLetter)) {
83954
+ sanitizedVal += letter;
83955
+ } else {
83956
+ invalidChars.push(letter);
83957
+ }
83958
+ });
83959
+ Object.keys(replaceCount).forEach((letter) => {
83960
+ warnings.push(
83961
+ `Replaced "${letter}" with "${replaceChars[letter]}"${replaceCount[letter] > 1 ? ` ${replaceCount[letter]} times` : ""}`
83897
83962
  );
83898
- } else {
83899
- return sequenceString;
83963
+ });
83964
+ if (sequenceString.length !== sanitizedVal.length) {
83965
+ warnings.push(
83966
+ `${name2 ? `Sequence ${name2}: ` : ""}Invalid character(s) detected and removed: ${invalidChars.slice(0, 100).join(", ")} `
83967
+ );
83968
+ }
83969
+ if (typeof window !== "undefined" && window.toastr && warnings.length) {
83970
+ warnings.forEach((warning2) => {
83971
+ window.toastr.warning(warning2);
83972
+ });
83900
83973
  }
83974
+ return [sanitizedVal, warnings];
83901
83975
  }
83902
83976
  __name(filterSequenceString, "filterSequenceString");
83977
+ function getAcceptedChars({
83978
+ isOligo: isOligo2,
83979
+ isProtein: isProtein2,
83980
+ isRna: isRna2,
83981
+ isMixedRnaAndDna,
83982
+ includeStopCodon
83983
+ } = {}) {
83984
+ 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() : (
83985
+ //just plain old dna
83986
+ ambiguous_rna_letters.toLowerCase() + ambiguous_dna_letters.toLowerCase()
83987
+ );
83988
+ }
83989
+ __name(getAcceptedChars, "getAcceptedChars");
83990
+ function getReplaceChars({
83991
+ isOligo: isOligo2,
83992
+ isProtein: isProtein2,
83993
+ isRna: isRna2,
83994
+ isMixedRnaAndDna
83995
+ } = {}) {
83996
+ return isProtein2 ? {} : isOligo2 ? {} : isRna2 ? { t: "u" } : isMixedRnaAndDna ? {} : (
83997
+ //just plain old dna
83998
+ {}
83999
+ );
84000
+ }
84001
+ __name(getReplaceChars, "getReplaceChars");
83903
84002
  function tidyUpAnnotation(_annotation, {
83904
84003
  sequenceData: sequenceData2 = {},
83905
84004
  convertAnnotationsFromAAIndices,
@@ -84028,14 +84127,6 @@ function coerceLocation({
84028
84127
  }
84029
84128
  }
84030
84129
  __name(coerceLocation, "coerceLocation");
84031
- function filterAminoAcidSequenceString(sequenceString, options) {
84032
- options = options || {};
84033
- if (options.includeStopCodon) {
84034
- return sequenceString == null ? void 0 : sequenceString.replace(/[^xtgalmfwkqespvicyhrndu.*]/gi, "");
84035
- }
84036
- return sequenceString == null ? void 0 : sequenceString.replace(/[^xtgalmfwkqespvicyhrndu]/gi, "");
84037
- }
84038
- __name(filterAminoAcidSequenceString, "filterAminoAcidSequenceString");
84039
84130
  function getDegenerateDnaStringFromAAString(aaString) {
84040
84131
  return aaString.split("").map((char) => aminoAcidToDegenerateDnaMap[char.toLowerCase()] || "nnn").join("");
84041
84132
  }
@@ -84047,11 +84138,10 @@ function tidyUpSequenceData(pSeqData, options = {}) {
84047
84138
  removeUnwantedChars,
84048
84139
  additionalValidChars,
84049
84140
  noTranslationData,
84050
- charOverrides,
84051
84141
  doNotProvideIdsForAnnotations,
84052
- proteinFilterOptions,
84053
84142
  noCdsTranslations,
84054
- convertAnnotationsFromAAIndices
84143
+ convertAnnotationsFromAAIndices,
84144
+ topLevelSeqData
84055
84145
  } = options;
84056
84146
  let seqData = lodashExports.cloneDeep(pSeqData);
84057
84147
  const response = {
@@ -84081,16 +84171,15 @@ function tidyUpSequenceData(pSeqData, options = {}) {
84081
84171
  }
84082
84172
  if (removeUnwantedChars) {
84083
84173
  if (seqData.isProtein) {
84084
- seqData.proteinSequence = filterAminoAcidSequenceString(
84085
- seqData.proteinSequence,
84086
- __spreadValues({ includeStopCodon: true }, proteinFilterOptions)
84087
- );
84174
+ const [newSeq] = filterSequenceString(seqData.proteinSequence, __spreadValues({
84175
+ includeStopCodon: true
84176
+ }, topLevelSeqData || seqData));
84177
+ seqData.proteinSequence = newSeq;
84088
84178
  } else {
84089
- seqData.sequence = filterSequenceString(
84090
- seqData.sequence,
84091
- `${additionalValidChars || ""}${seqData.isRna || seqData.isMixedRnaAndDna ? "u" : ""}`,
84092
- charOverrides
84093
- );
84179
+ const [newSeq] = filterSequenceString(seqData.sequence, __spreadValues({
84180
+ additionalValidChars
84181
+ }, topLevelSeqData || seqData));
84182
+ seqData.sequence = newSeq;
84094
84183
  }
84095
84184
  }
84096
84185
  if (seqData.isProtein) {
@@ -93437,7 +93526,8 @@ function validateSequence(sequence2, options = {}) {
93437
93526
  inclusive1BasedEnd,
93438
93527
  additionalValidChars,
93439
93528
  allowOverflowAnnotations,
93440
- coerceFeatureTypes
93529
+ coerceFeatureTypes,
93530
+ includeStopCodon
93441
93531
  } = options;
93442
93532
  [
93443
93533
  "isDNA",
@@ -93487,7 +93577,6 @@ function validateSequence(sequence2, options = {}) {
93487
93577
  response.messages.push("No sequence detected");
93488
93578
  sequence2.sequence = "";
93489
93579
  }
93490
- let validChars;
93491
93580
  if (sequence2.isProtein === void 0 && guessIfProtein) {
93492
93581
  sequence2.isProtein = !guessIfSequenceIsDnaAndNotProtein(
93493
93582
  sequence2.sequence,
@@ -93495,12 +93584,15 @@ function validateSequence(sequence2, options = {}) {
93495
93584
  );
93496
93585
  }
93497
93586
  if (sequence2.isProtein) {
93498
- validChars = filterAminoAcidSequenceString(sequence2.sequence);
93587
+ const [validChars, warnings] = filterSequenceString(sequence2.sequence, {
93588
+ name: sequence2.name,
93589
+ isProtein: true,
93590
+ additionalValidChars,
93591
+ includeStopCodon
93592
+ });
93499
93593
  if (validChars !== sequence2.sequence) {
93500
93594
  sequence2.sequence = validChars;
93501
- response.messages.push(
93502
- "Import Error: Illegal character(s) detected and removed from amino acid sequence. Allowed characters are: xtgalmfwkqespvicyhrndu"
93503
- );
93595
+ response.messages.push(...warnings);
93504
93596
  }
93505
93597
  sequence2.type = "PROTEIN";
93506
93598
  sequence2.isProtein = true;
@@ -93522,12 +93614,12 @@ function validateSequence(sequence2, options = {}) {
93522
93614
  } else {
93523
93615
  sequence2.type = "DNA";
93524
93616
  }
93525
- validChars = filterSequenceString(sequence2.sequence, additionalValidChars);
93617
+ const [validChars, warnings] = filterSequenceString(sequence2.sequence, __spreadValues({
93618
+ additionalValidChars
93619
+ }, sequence2));
93526
93620
  if (validChars !== sequence2.sequence) {
93527
93621
  sequence2.sequence = validChars;
93528
- response.messages.push(
93529
- "Import Error: Illegal character(s) detected and removed from sequence. Allowed characters are: atgcyrswkmbvdhn"
93530
- );
93622
+ response.messages.push(...warnings);
93531
93623
  }
93532
93624
  }
93533
93625
  if (!sequence2.size) {
@@ -109009,18 +109101,6 @@ function getSelFromWrappedAddon(selectionLayer2, sequenceLength) {
109009
109101
  return selToUse;
109010
109102
  }
109011
109103
  __name(getSelFromWrappedAddon, "getSelFromWrappedAddon");
109012
- function getAcceptedChars({
109013
- isOligo: isOligo2,
109014
- isProtein: isProtein2,
109015
- isRna: isRna2,
109016
- isMixedRnaAndDna
109017
- } = {}) {
109018
- 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() : (
109019
- //just plain old dna
109020
- ambiguous_dna_letters.toLowerCase()
109021
- );
109022
- }
109023
- __name(getAcceptedChars, "getAcceptedChars");
109024
109104
  function getStripedPattern({ color: color2 }) {
109025
109105
  return /* @__PURE__ */ React__default$1.createElement(
109026
109106
  "pattern",
@@ -125627,7 +125707,7 @@ function showFileDialog({ multiple = false, onSelect }) {
125627
125707
  }
125628
125708
  __name(showFileDialog, "showFileDialog");
125629
125709
  const name = "@teselagen/ove";
125630
- const version = "0.3.29";
125710
+ const version = "0.3.42";
125631
125711
  const main = "./src/index.js";
125632
125712
  const exports$1 = {
125633
125713
  ".": {
@@ -129380,9 +129460,8 @@ const _SequenceInputNoHotkeys = class _SequenceInputNoHotkeys extends React__def
129380
129460
  selectionLayer: selectionLayer2,
129381
129461
  sequenceLength,
129382
129462
  isProtein: isProtein2,
129383
- replaceChars,
129384
129463
  caretPosition: caretPosition2,
129385
- acceptedChars,
129464
+ sequenceData: sequenceData2,
129386
129465
  maxInsertSize
129387
129466
  } = this.props;
129388
129467
  const { charsToInsert, hasTempError } = this.state;
@@ -129415,17 +129494,13 @@ const _SequenceInputNoHotkeys = class _SequenceInputNoHotkeys extends React__def
129415
129494
  autoFocus: true,
129416
129495
  style: hasTempError ? { borderColor: "red" } : {},
129417
129496
  onChange: (e2) => {
129418
- let sanitizedVal = "";
129419
- e2.target.value.split("").forEach((letter) => {
129420
- const lowerLetter = letter.toLowerCase();
129421
- if (replaceChars && replaceChars[lowerLetter]) {
129422
- const isUpper = lowerLetter !== letter;
129423
- sanitizedVal += isUpper ? replaceChars[lowerLetter].toUpperCase() : replaceChars[lowerLetter];
129424
- } else if (acceptedChars.includes(lowerLetter)) {
129425
- sanitizedVal += letter;
129426
- }
129427
- });
129428
- if (e2.target.value.length !== sanitizedVal.length) {
129497
+ const [sanitizedVal, warnings] = filterSequenceString(
129498
+ e2.target.value,
129499
+ __spreadProps(__spreadValues({}, sequenceData2), {
129500
+ name: void 0
129501
+ })
129502
+ );
129503
+ if (warnings.length) {
129429
129504
  this.setState({
129430
129505
  hasTempError: true
129431
129506
  });
@@ -130300,7 +130375,8 @@ function VectorInteractionHOC(Component2) {
130300
130375
  selectionLayer: selectionLayer2 = { start: -1, end: -1 },
130301
130376
  readOnly: readOnly2,
130302
130377
  onPaste,
130303
- disableBpEditing
130378
+ disableBpEditing,
130379
+ sequenceData: sequenceData2
130304
130380
  } = this.props;
130305
130381
  if (disableBpEditing) {
130306
130382
  return window.toastr.warning("Sorry the underlying sequence is locked");
@@ -130325,6 +130401,7 @@ function VectorInteractionHOC(Component2) {
130325
130401
  };
130326
130402
  }
130327
130403
  seqDataToInsert = tidyUpSequenceData(seqDataToInsert, {
130404
+ topLevelSeqData: sequenceData2,
130328
130405
  provideNewIdsForAnnotations: true,
130329
130406
  annotationsAsObjects: true,
130330
130407
  removeUnwantedChars: true,
@@ -130420,8 +130497,7 @@ function VectorInteractionHOC(Component2) {
130420
130497
  createSequenceInputPopup({
130421
130498
  useEventPositioning,
130422
130499
  isReplace,
130423
- replaceChars: sequenceData2.isRna ? { t: "u" } : void 0,
130424
- acceptedChars: getAcceptedChars(sequenceData2),
130500
+ sequenceData: sequenceData2,
130425
130501
  isProtein: sequenceData2.isProtein,
130426
130502
  selectionLayer: selectionLayer2,
130427
130503
  sequenceLength,
@@ -141914,14 +141990,8 @@ const CustomContentEditable = generateField(/* @__PURE__ */ __name(function Cust
141914
141990
  const newVal2 = e2.target.innerText;
141915
141991
  const savedCaretPosition = EditCaretPositioning.saveSelection(e2.currentTarget);
141916
141992
  setCaretPosition(savedCaretPosition);
141917
- const acceptedChars = getAcceptedChars(sequenceData2);
141918
- let newBases = "";
141919
- newVal2.split("").forEach((letter) => {
141920
- if (acceptedChars.includes(letter.toLowerCase())) {
141921
- newBases += letter;
141922
- }
141923
- });
141924
- if (newVal2.length !== newBases.length) {
141993
+ const [newBases, warnings] = filterSequenceString(newVal2, sequenceData2);
141994
+ if (warnings.length) {
141925
141995
  setTempError(true);
141926
141996
  setTimeout(() => {
141927
141997
  setTempError(false);