ketcher-react 3.8.0-rc.1 → 3.8.0-rc.2

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/dist/index.js CHANGED
@@ -27,7 +27,7 @@ import 'url-search-params-polyfill';
27
27
  import 'whatwg-fetch';
28
28
  import _classCallCheck$2 from '@babel/runtime/helpers/classCallCheck';
29
29
  import _createClass$2 from '@babel/runtime/helpers/createClass';
30
- import { KetSerializer, MolSerializer, KetcherLogger, ketcherProvider, defaultBondThickness, isClipboardAPIAvailable, notifyCopyCut, notifyRequestCompleted, isControlKey, StereLabelStyleType, StereoColoringType, ShowHydrogenLabels, ShowHydrogenLabelNames, SettingsManager, SdfSerializer, KETCHER_SAVED_OPTIONS_KEY, SUPERATOM_CLASS, Bond as Bond$2, Elements, AtomList, getAtomType, StereoLabel, isAttachmentBond, Atom as Atom$2, findStereoAtoms, RxnArrowMode, MULTITAIL_ARROW_TOOL_NAME, CREATE_MONOMER_TOOL_NAME, SimpleObjectMode, IMAGE_KEY, SGroup as SGroup$1, identifyStructFormat, SupportedFormat, FormatterFactory, MULTITAIL_ARROW_KEY, ChemicalMimeType, RenderStruct, Struct, ZoomTool, KETCHER_MACROMOLECULES_ROOT_NODE_SELECTOR, shortcutStr, MonomerMicromolecule, UnresolvedMonomer, FunctionalGroupsProvider, SaltsAndSolventsProvider, KetcherAsyncEvents, ElementColor, generateMenuShortcuts, Vec2, Scale, fromMultipleMove, FunctionalGroup, mergeMapOfItemsToSet, fromSgroupDeletion, fromFragmentDeletion, vectorUtils, fromBondAddition, Action, fromAtomAddition, fromAtomsAttrs, checkOverlapping, fromSeveralSgroupAddition, expandSGroupWithMultipleAttachmentPoint, SgContexts, Pile, fromSgroupAction, fromItemsFuse, ReBond, setExpandSGroup, fromBondsAttrs, OperationType, ReStruct, imageReferencePositionToCursor, multitailArrowReferenceLinesToCursor, multitailReferencePositionToCursor, CoordinateTransformation, MultitailArrowRefName, fromMultitailArrowHeadTailMove, fromMultitailArrowHeadTailsResize, fromMultitailArrowMove, fromArrowResizing, fromPaste, fromImageResize, fromSimpleObjectResizing, getItemsToFuse, getHoverToFuse, fromTextDeletion, fromTextUpdating, fromTemplateOnCanvas, fromTemplateOnBondAction, fromTemplateOnAtom, BondAttr, AtomAttr, formatProperties, runAsyncAction, getStructStringFromClipboardData, getStructure, initHotKeys, keyNorm, Fragment as Fragment$1, fromRGroupAttachmentPointUpdate, fromOneBondDeletion, bondChangingAction, fromChain, removeInfoLabelFromAtoms, fromStereoFlagUpdate, fromOneAtomDeletion, fromArrowDeletion, fromPlusDeletion, fromSimpleObjectDeletion, fromRGroupAttachmentPointDeletion, fromImageDeletion, fromMultitailArrowDeletion, notifyItemsToMergeInitializationComplete, RGroup as RGroup$2, fromRGroupFragment, fromUpdateIfThen, fromRGroupAttrs, fromArrowAddition, fromMultitailArrowCreation, fromPlusAddition, getRelSGroupsBySelection, RotateMonomerOperation, fromRotate, fromFlip, fromSimpleObjectAddition, fromTextCreation, fromImageMove, fromImageCreation, fromHighlightCreate, fromHighlightClear, getOptionsWithConvertedUnits, provideEditorSettings, fromNewCanvas, Render, Coordinates, genericsList, getAttachmentPointLabel, getNextFreeAttachmentPoint, AttachmentPointName, setMonomerTemplatePrefix, getHELMClassByKetMonomerClass, fillNaturalAnalogueForPhosphateAndSugar, KetTemplateType, normalizeMonomerAtomsPositions, monomerFactory, MacromoleculesConverter, fromSgroupAddition, fromDescriptorsAlign, MonomerCreationAttachmentPointClickEvent, atomGetAttr, fromBondFlipping, setExpandMonomerSGroup, fromMultitailArrowTailAdd, MultitailArrow, fromMultitailArrowTailRemove, AmbiguousMonomer, KetMonomerClass, CoreEditor, getAttachmentPointNumberFromLabel, getAtomCustomQuery, getFormatMimeTypeByFileName, getPropertiesByFormat, StereoFlag, getPropertiesByImgFormat, legacyCopy as legacyCopy$1, b64toBlob, Generics, TextCommand, Ketcher, DefaultStructServiceOptions } from 'ketcher-core';
30
+ import { KetSerializer, MolSerializer, KetcherLogger, ketcherProvider, defaultBondThickness, isClipboardAPIAvailable, notifyCopyCut, notifyRequestCompleted, isControlKey, StereLabelStyleType, StereoColoringType, ShowHydrogenLabels, ShowHydrogenLabelNames, SettingsManager, SdfSerializer, KETCHER_SAVED_OPTIONS_KEY, SUPERATOM_CLASS, Bond as Bond$2, Elements, AtomList, getAtomType, StereoLabel, isAttachmentBond, Atom as Atom$2, findStereoAtoms, RxnArrowMode, MULTITAIL_ARROW_TOOL_NAME, CREATE_MONOMER_TOOL_NAME, SimpleObjectMode, IMAGE_KEY, SGroup as SGroup$1, identifyStructFormat, SupportedFormat, FormatterFactory, MULTITAIL_ARROW_KEY, ChemicalMimeType, RenderStruct, Struct, ZoomTool, KETCHER_MACROMOLECULES_ROOT_NODE_SELECTOR, shortcutStr, MonomerMicromolecule, UnresolvedMonomer, FunctionalGroupsProvider, SaltsAndSolventsProvider, KetcherAsyncEvents, ElementColor, generateMenuShortcuts, Vec2, Scale, fromMultipleMove, FunctionalGroup, mergeMapOfItemsToSet, fromSgroupDeletion, fromFragmentDeletion, vectorUtils, fromBondAddition, Action, fromAtomAddition, fromAtomsAttrs, checkOverlapping, fromSeveralSgroupAddition, expandSGroupWithMultipleAttachmentPoint, SgContexts, Pile, fromSgroupAction, fromItemsFuse, ReBond, setExpandSGroup, fromBondsAttrs, OperationType, ReStruct, imageReferencePositionToCursor, multitailArrowReferenceLinesToCursor, multitailReferencePositionToCursor, CoordinateTransformation, MultitailArrowRefName, fromMultitailArrowHeadTailMove, fromMultitailArrowHeadTailsResize, fromMultitailArrowMove, fromArrowResizing, fromPaste, fromImageResize, fromSimpleObjectResizing, getItemsToFuse, getHoverToFuse, fromTextDeletion, fromTextUpdating, fromTemplateOnCanvas, fromTemplateOnBondAction, fromTemplateOnAtom, BondAttr, AtomAttr, formatProperties, runAsyncAction, getStructStringFromClipboardData, getStructure, initHotKeys, keyNorm, Fragment as Fragment$1, fromRGroupAttachmentPointUpdate, fromOneBondDeletion, bondChangingAction, fromChain, removeInfoLabelFromAtoms, fromStereoFlagUpdate, fromOneAtomDeletion, fromArrowDeletion, fromPlusDeletion, fromSimpleObjectDeletion, fromRGroupAttachmentPointDeletion, fromImageDeletion, fromMultitailArrowDeletion, notifyItemsToMergeInitializationComplete, RGroup as RGroup$2, fromRGroupFragment, fromUpdateIfThen, fromRGroupAttrs, fromArrowAddition, fromMultitailArrowCreation, fromPlusAddition, getRelSGroupsBySelection, RotateMonomerOperation, fromRotate, fromFlip, fromSimpleObjectAddition, fromTextCreation, fromImageMove, fromImageCreation, fromHighlightCreate, fromHighlightClear, getOptionsWithConvertedUnits, provideEditorSettings, fromNewCanvas, Render, Coordinates, genericsList, getAttachmentPointLabel, getNextFreeAttachmentPoint, AttachmentPointName, setMonomerTemplatePrefix, getHELMClassByKetMonomerClass, fillNaturalAnalogueForPhosphateAndSugar, KetTemplateType, normalizeMonomerAtomsPositions, monomerFactory, MacromoleculesConverter, fromSgroupAddition, fromDescriptorsAlign, MonomerCreationAttachmentPointClickEvent, atomGetAttr, fromBondFlipping, setExpandMonomerSGroup, fromMultitailArrowTailAdd, MultitailArrow, fromMultitailArrowTailRemove, AmbiguousMonomer, KetMonomerClass, AtomLabel, CoreEditor, getAttachmentPointNumberFromLabel, getAtomCustomQuery, getFormatMimeTypeByFileName, getPropertiesByFormat, StereoFlag, getPropertiesByImgFormat, legacyCopy as legacyCopy$1, b64toBlob, Generics, TextCommand, Ketcher, DefaultStructServiceOptions } from 'ketcher-core';
31
31
  export { EditorClassName, KETCHER_MACROMOLECULES_ROOT_NODE_SELECTOR } from 'ketcher-core';
32
32
  import _objectWithoutProperties from '@babel/runtime/helpers/objectWithoutProperties';
33
33
  import _possibleConstructorReturn$2 from '@babel/runtime/helpers/possibleConstructorReturn';
@@ -3787,7 +3787,7 @@ var zoom = {
3787
3787
 
3788
3788
  var openHelpLink = function openHelpLink() {
3789
3789
  var _window$open;
3790
- return (_window$open = window.open("https://github.com/epam/ketcher/blob/".concat("v3.8.0-rc.1\n", "/documentation/help.md#ketcher-overview"))) === null || _window$open === void 0 ? void 0 : _window$open.focus();
3790
+ return (_window$open = window.open("https://github.com/epam/ketcher/blob/".concat("v3.8.0-rc.2\n", "/documentation/help.md#ketcher-overview"))) === null || _window$open === void 0 ? void 0 : _window$open.focus();
3791
3791
  };
3792
3792
  var help = {
3793
3793
  help: {
@@ -25403,7 +25403,6 @@ var Editor$3 = function () {
25403
25403
  _this2.selectedToOriginalAtomsIdMap.set(i, atomId);
25404
25404
  });
25405
25405
  var assignedAttachmentPoints = new Map();
25406
- var potentialAttachmentPoints = new Map();
25407
25406
  this.terminalRGroupAtoms.forEach(function (atomId, i) {
25408
25407
  var _selectedStruct$halfB;
25409
25408
  var selectedStructLeavingAtomId = originalToSelectedAtomsIdMap.get(atomId);
@@ -25418,32 +25417,41 @@ var Editor$3 = function () {
25418
25417
  assert_1(selectedStructAttachmentAtomId !== undefined);
25419
25418
  assignedAttachmentPoints.set(attachmentPointName, [selectedStructAttachmentAtomId, selectedStructLeavingAtomId]);
25420
25419
  });
25421
- this.potentialLeavingAtoms.forEach(function (atomId) {
25422
- var _selectedStruct$atoms, _selectedStruct$atoms2, _currentStruct$halfBo;
25420
+ this.potentialLeavingAtoms.forEach(function (atomId, i) {
25421
+ var _selectedStruct$atoms, _selectedStruct$atoms2;
25423
25422
  var leavingAtom = currentStruct.atoms.get(atomId);
25424
25423
  assert_1(leavingAtom);
25424
+ var attachmentAtomId = -1;
25425
+ leavingAtom.neighbors.forEach(function (halfBondId) {
25426
+ var _selection$atoms3;
25427
+ var halfBond = currentStruct.halfBonds.get(halfBondId);
25428
+ assert_1(halfBond !== undefined);
25429
+ if ((_selection$atoms3 = selection.atoms) !== null && _selection$atoms3 !== void 0 && _selection$atoms3.includes(halfBond.end)) {
25430
+ attachmentAtomId = halfBond.end;
25431
+ }
25432
+ });
25433
+ if (attachmentAtomId === -1) {
25434
+ return;
25435
+ }
25425
25436
  var selectedStructLeavingAtom = leavingAtom.clone();
25426
25437
  selectedStructLeavingAtom.fragment = (_selectedStruct$atoms = (_selectedStruct$atoms2 = selectedStruct.atoms.get(0)) === null || _selectedStruct$atoms2 === void 0 ? void 0 : _selectedStruct$atoms2.fragment) !== null && _selectedStruct$atoms !== void 0 ? _selectedStruct$atoms : 0;
25427
25438
  var selectedStructLeavingAtomId = selectedStruct.atoms.add(selectedStructLeavingAtom);
25428
25439
  _this2.selectedToOriginalAtomsIdMap.set(selectedStructLeavingAtomId, atomId);
25429
- var neighborHalfBondId = leavingAtom === null || leavingAtom === void 0 ? void 0 : leavingAtom.neighbors[0];
25430
- assert_1(neighborHalfBondId !== undefined);
25431
- var attachmentAtomId = (_currentStruct$halfBo = currentStruct.halfBonds.get(neighborHalfBondId)) === null || _currentStruct$halfBo === void 0 ? void 0 : _currentStruct$halfBo.end;
25432
- assert_1(attachmentAtomId !== undefined);
25433
25440
  var selectedStructAttachmentAtomId = originalToSelectedAtomsIdMap.get(attachmentAtomId);
25434
25441
  assert_1(selectedStructAttachmentAtomId !== undefined);
25442
+ _this2.selectedToOriginalAtomsIdMap.set(selectedStructAttachmentAtomId, attachmentAtomId);
25435
25443
  var newBond = new Bond$2({
25436
25444
  type: Bond$2.PATTERN.TYPE.SINGLE,
25437
25445
  begin: selectedStructAttachmentAtomId,
25438
25446
  end: selectedStructLeavingAtomId
25439
25447
  });
25440
25448
  selectedStruct.bonds.add(newBond);
25441
- potentialAttachmentPoints.set(selectedStructAttachmentAtomId, selectedStructLeavingAtomId);
25442
- _this2.selectedToOriginalAtomsIdMap.set(selectedStructAttachmentAtomId, attachmentAtomId);
25449
+ var attachmentPointName = getAttachmentPointLabel(_this2.terminalRGroupAtoms.length + i + 1);
25450
+ assignedAttachmentPoints.set(attachmentPointName, [selectedStructAttachmentAtomId, selectedStructLeavingAtomId]);
25443
25451
  });
25444
25452
  this.monomerCreationState = {
25445
25453
  assignedAttachmentPoints: assignedAttachmentPoints,
25446
- potentialAttachmentPoints: potentialAttachmentPoints
25454
+ potentialAttachmentPoints: new Map()
25447
25455
  };
25448
25456
  this.originalStruct = currentStruct;
25449
25457
  this.struct(selectedStruct);
@@ -25480,8 +25488,6 @@ var Editor$3 = function () {
25480
25488
  leavingAtomId = _atomPairForLeavingGr2[1];
25481
25489
  var leavingAtom = this.render.ctab.molecule.atoms.get(leavingAtomId);
25482
25490
  assert_1(leavingAtom);
25483
- leavingAtom.label = 'H';
25484
- this.render.ctab.molecule.calcImplicitHydrogen(leavingAtomId);
25485
25491
  var attachmentPointName = getNextFreeAttachmentPoint(Array.from(this.monomerCreationState.assignedAttachmentPoints.keys()));
25486
25492
  this.monomerCreationState.assignedAttachmentPoints.set(attachmentPointName, atomPairForLeavingGroup);
25487
25493
  this.monomerCreationState.potentialAttachmentPoints["delete"](attachmentAtomId);
@@ -25501,8 +25507,8 @@ var Editor$3 = function () {
25501
25507
  }, {
25502
25508
  key: "saveNewMonomer",
25503
25509
  value: function saveNewMonomer(data) {
25504
- var _this$originalSelecti,
25505
- _this3 = this;
25510
+ var _this3 = this,
25511
+ _this$originalSelecti;
25506
25512
  if (!this.monomerCreationState) {
25507
25513
  throw new Error('Monomer creation wizard is not active, cannot save new monomer');
25508
25514
  }
@@ -25555,6 +25561,20 @@ var Editor$3 = function () {
25555
25561
  Monomer = _monomerFactory2[0];
25556
25562
  var monomerPosition = new Vec2((this.selectionBBox.min.x + this.selectionBBox.max.x) / 2, (this.selectionBBox.min.y + this.selectionBBox.max.y) / 2);
25557
25563
  var monomer = new Monomer(monomerItem, monomerPosition);
25564
+ var finalAttachmentPoints = this.monomerCreationState.assignedAttachmentPoints;
25565
+ finalAttachmentPoints.forEach(function (atomPair) {
25566
+ var _atomPair2 = _slicedToArray$1(atomPair, 2),
25567
+ leavingAtomId = _atomPair2[1];
25568
+ var leavingAtom = _this3.struct().atoms.get(leavingAtomId);
25569
+ assert_1(leavingAtom);
25570
+ var originalLeavingAtomId = _this3.selectedToOriginalAtomsIdMap.get(leavingAtomId);
25571
+ assert_1(originalLeavingAtomId);
25572
+ var originalLeavingAtom = _this3.originalStruct.atoms.get(originalLeavingAtomId);
25573
+ assert_1(originalLeavingAtom);
25574
+ originalLeavingAtom.rglabel = null;
25575
+ originalLeavingAtom.label = leavingAtom.label;
25576
+ _this3.originalStruct.calcImplicitHydrogen(originalLeavingAtomId);
25577
+ });
25558
25578
  this.closeMonomerCreationWizard();
25559
25579
  (_this$originalSelecti = this.originalSelection.atoms) === null || _this$originalSelecti === void 0 || _this$originalSelecti.forEach(function (atomId) {
25560
25580
  var atom = _this3.render.ctab.molecule.atoms.get(atomId);
@@ -26441,20 +26461,22 @@ var useMakeLeavingGroupAtomMenuItem = function useMakeLeavingGroupAtomMenuItem(_
26441
26461
  };
26442
26462
  return isAtomAssignedAttachmentPoint ? jsxs(Fragment, {
26443
26463
  children: [jsxs(Item, {
26464
+ "data-testid": "edit-connection-point",
26465
+ onClick: handleEditClick,
26444
26466
  children: [jsx(Icon, {
26445
26467
  name: "editMenu",
26446
- className: styles$m.icon,
26447
- onClick: handleEditClick
26468
+ className: styles$m.icon
26448
26469
  }), "Edit connection point"]
26449
26470
  }), jsxs(Item, {
26471
+ "data-testid": "remove-assignment",
26472
+ onClick: handleRemoveClick,
26450
26473
  children: [jsx(Icon, {
26451
26474
  name: "deleteMenu",
26452
- className: styles$m.icon,
26453
- onClick: handleRemoveClick
26475
+ className: styles$m.icon
26454
26476
  }), "Remove assignment"]
26455
26477
  })]
26456
26478
  }) : jsxs(Item, _objectSpread$S(_objectSpread$S({}, props), {}, {
26457
- "data-testid": "Assign as a leaving group",
26479
+ "data-testid": "assign-as-a-leaving-group",
26458
26480
  onClick: handleMakeLeavingGroupAtomClick,
26459
26481
  disabled: attachmentPointsLimitReached,
26460
26482
  children: [jsx(Icon, {
@@ -28555,19 +28577,19 @@ var attachmentPointNameOptions = Array.from({
28555
28577
  };
28556
28578
  });
28557
28579
  var attachmentPointAtomOptions = [{
28558
- value: 'H',
28580
+ value: AtomLabel.H,
28559
28581
  label: 'H'
28560
28582
  }, {
28561
- value: 'O',
28583
+ value: AtomLabel.O,
28562
28584
  label: 'OH'
28563
28585
  }, {
28564
- value: 'N',
28586
+ value: AtomLabel.N,
28565
28587
  label: 'NH2'
28566
28588
  }, {
28567
- value: 'Cl',
28589
+ value: AtomLabel.Cl,
28568
28590
  label: 'Cl'
28569
28591
  }, {
28570
- value: 'F',
28592
+ value: AtomLabel.F,
28571
28593
  label: 'F'
28572
28594
  }];
28573
28595
  var AttachmentPointEditPopup = function AttachmentPointEditPopup(_ref) {
@@ -37089,8 +37111,8 @@ var KetcherBuilder = function () {
37089
37111
  cleanup = initApp(prevKetcherId, ketcherId, element, appRoot, staticResourcesUrl, {
37090
37112
  buttons: buttons || {},
37091
37113
  errorHandler: errorHandler || null,
37092
- version: "3.8.0-rc.1" ,
37093
- buildDate: "2025-09-03T08:19:34" ,
37114
+ version: "3.8.0-rc.2" ,
37115
+ buildDate: "2025-09-05T18:59:48" ,
37094
37116
  buildNumber: '',
37095
37117
  customButtons: customButtons || []
37096
37118
  }, structService, resolve, togglerComponent);
@@ -37385,7 +37407,7 @@ var ModeControl = function ModeControl(_ref3) {
37385
37407
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
37386
37408
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty$1(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
37387
37409
  var MacromoleculesEditorComponent = lazy(function () {
37388
- return import('./index.modern-1aebb8e6.js');
37410
+ return import('./index.modern-7694d091.js');
37389
37411
  });
37390
37412
  var Editor = function Editor(props) {
37391
37413
  var _useState = useState(false),