ketcher-react 3.7.0-rc.1 → 3.7.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.
Files changed (35) hide show
  1. package/dist/cjs/constants.d.ts +2 -2
  2. package/dist/cjs/index.css +1 -1
  3. package/dist/cjs/index.css.map +1 -1
  4. package/dist/cjs/index.js +263 -108
  5. package/dist/cjs/index.js.map +1 -1
  6. package/dist/cjs/{index.modern-5eda67eb.js → index.modern-c52e0e6a.js} +636 -210
  7. package/dist/cjs/index.modern-c52e0e6a.js.map +1 -0
  8. package/dist/cjs/script/editor/Editor.d.ts +1 -1
  9. package/dist/cjs/script/editor/tool/create-monomer.d.ts +1 -0
  10. package/dist/cjs/script/index.d.ts +2 -0
  11. package/dist/cjs/script/ui/component/form/Select/Select.d.ts +2 -1
  12. package/dist/cjs/script/ui/views/components/MonomerCreationWizard/MonomerCreationWizard.constants.d.ts +5 -0
  13. package/dist/cjs/script/ui/views/components/MonomerCreationWizard/MonomerCreationWizard.types.d.ts +5 -1
  14. package/dist/cjs/script/ui/views/components/MonomerCreationWizard/components/NaturalAnaloguePicker/NaturalAnaloguePicker.d.ts +1 -0
  15. package/dist/cjs/script/ui/views/toolbars/ArrowScroll/ArrowScroll.d.ts +4 -3
  16. package/dist/cjs/script/ui/views/toolbars/ToolbarGroupItem/ToolbarMultiToolItem/usePortalStyle.d.ts +2 -2
  17. package/dist/constants.d.ts +2 -2
  18. package/dist/index.css +1 -1
  19. package/dist/index.css.map +1 -1
  20. package/dist/index.js +254 -106
  21. package/dist/index.js.map +1 -1
  22. package/dist/{index.modern-eab54238.js → index.modern-43985e95.js} +637 -211
  23. package/dist/index.modern-43985e95.js.map +1 -0
  24. package/dist/script/editor/Editor.d.ts +1 -1
  25. package/dist/script/editor/tool/create-monomer.d.ts +1 -0
  26. package/dist/script/index.d.ts +2 -0
  27. package/dist/script/ui/component/form/Select/Select.d.ts +2 -1
  28. package/dist/script/ui/views/components/MonomerCreationWizard/MonomerCreationWizard.constants.d.ts +5 -0
  29. package/dist/script/ui/views/components/MonomerCreationWizard/MonomerCreationWizard.types.d.ts +5 -1
  30. package/dist/script/ui/views/components/MonomerCreationWizard/components/NaturalAnaloguePicker/NaturalAnaloguePicker.d.ts +1 -0
  31. package/dist/script/ui/views/toolbars/ArrowScroll/ArrowScroll.d.ts +4 -3
  32. package/dist/script/ui/views/toolbars/ToolbarGroupItem/ToolbarMultiToolItem/usePortalStyle.d.ts +2 -2
  33. package/package.json +1 -1
  34. package/dist/cjs/index.modern-5eda67eb.js.map +0 -1
  35. package/dist/index.modern-eab54238.js.map +0 -1
package/dist/cjs/index.js CHANGED
@@ -344,6 +344,16 @@ function _isNativeReflectConstruct$g() { try { var t = !Boolean.prototype.valueO
344
344
  var ieCb = typeof window !== 'undefined' ? window.clipboardData : {};
345
345
  var CLIP_AREA_BASE_CLASS = 'cliparea';
346
346
  var needSkipCopyEvent = false;
347
+ var isUserEditing = function isUserEditing() {
348
+ var el = document.activeElement;
349
+ if (!el) {
350
+ return false;
351
+ }
352
+ if (el.hasAttribute && el.hasAttribute('data-cliparea')) {
353
+ return false;
354
+ }
355
+ return Boolean(el.tagName === 'TEXTAREA' || el.tagName === 'INPUT' && el.type !== 'button' && el.type !== 'submit' && el.type !== 'reset' || el.contentEditable === 'true');
356
+ };
347
357
  var ClipArea = function (_Component) {
348
358
  _inherits__default["default"](ClipArea, _Component);
349
359
  function ClipArea(props) {
@@ -369,7 +379,7 @@ var ClipArea = function (_Component) {
369
379
  if (event.shiftKey && !isActiveElement(event.target)) event.preventDefault();
370
380
  },
371
381
  copy: function copy(event) {
372
- if (!_this2.props.focused()) {
382
+ if (!_this2.props.focused() || isUserEditing()) {
373
383
  return;
374
384
  }
375
385
  if (ketcherCore.isClipboardAPIAvailable()) {
@@ -406,7 +416,7 @@ var ClipArea = function (_Component) {
406
416
  return _regeneratorRuntime__default["default"].wrap(function _callee$(_context) {
407
417
  while (1) switch (_context.prev = _context.next) {
408
418
  case 0:
409
- if (_this2.props.focused()) {
419
+ if (!(!_this2.props.focused() || isUserEditing())) {
410
420
  _context.next = 2;
411
421
  break;
412
422
  }
@@ -441,7 +451,7 @@ var ClipArea = function (_Component) {
441
451
  return cut;
442
452
  }(),
443
453
  paste: function paste(event) {
444
- if (!_this2.props.focused()) {
454
+ if (!_this2.props.focused() || isUserEditing()) {
445
455
  return;
446
456
  }
447
457
  if (ketcherCore.isClipboardAPIAvailable()) {
@@ -532,6 +542,7 @@ var ClipArea = function (_Component) {
532
542
  return jsxRuntime.jsx("textarea", {
533
543
  ref: this.textAreaRef,
534
544
  className: clsx__default["default"](CLIP_AREA_BASE_CLASS, classes$Q.cliparea),
545
+ "data-cliparea": true,
535
546
  contentEditable: true,
536
547
  autoFocus: true
537
548
  ,
@@ -3840,7 +3851,7 @@ var zoom = {
3840
3851
 
3841
3852
  var openHelpLink = function openHelpLink() {
3842
3853
  var _window$open;
3843
- return (_window$open = window.open("https://github.com/epam/ketcher/blob/".concat("v3.7.0-rc.1\n", "/documentation/help.md#ketcher-overview"))) === null || _window$open === void 0 ? void 0 : _window$open.focus();
3854
+ return (_window$open = window.open("https://github.com/epam/ketcher/blob/".concat("v3.7.0-rc.2\n", "/documentation/help.md#ketcher-overview"))) === null || _window$open === void 0 ? void 0 : _window$open.focus();
3844
3855
  };
3845
3856
  var help = {
3846
3857
  help: {
@@ -3867,8 +3878,6 @@ var STRUCT_TYPE = {
3867
3878
  };
3868
3879
  var KETCHER_ROOT_NODE_CLASS_NAME = 'Ketcher-root';
3869
3880
  var KETCHER_ROOT_NODE_CSS_SELECTOR = ".".concat(KETCHER_ROOT_NODE_CLASS_NAME);
3870
- var EditorClassName = 'Ketcher-polymer-editor-root';
3871
- var KETCHER_MACROMOLECULES_ROOT_NODE_SELECTOR = ".".concat(EditorClassName);
3872
3881
  var STRUCT_SERVICE_NO_RENDER_INITIALIZED_EVENT = 'struct-service-no-render-initialized';
3873
3882
  var STRUCT_SERVICE_INITIALIZED_EVENT = 'struct-service-initialized';
3874
3883
  var ACS_STYLE_DEFAULT_SETTINGS = {
@@ -3948,6 +3957,9 @@ var disableIfViewOnly = function disableIfViewOnly(editor) {
3948
3957
  var disableIfMonomerCreationWizardActive = function disableIfMonomerCreationWizardActive(editor) {
3949
3958
  return editor.isMonomerCreationWizardActive;
3950
3959
  };
3960
+ var combinedDisable = function combinedDisable(editor) {
3961
+ return disableIfViewOnly(editor) || disableIfMonomerCreationWizardActive(editor);
3962
+ };
3951
3963
  var updateConfigItem = function updateConfigItem(item) {
3952
3964
  if (typeof item.disabled === 'boolean' || item.enabledInViewOnly === true) {
3953
3965
  return item;
@@ -3960,7 +3972,7 @@ var updateConfigItem = function updateConfigItem(item) {
3960
3972
  });
3961
3973
  } else {
3962
3974
  return _objectSpread$1p(_objectSpread$1p({}, item), {}, {
3963
- disabled: disableIfViewOnly || disableIfMonomerCreationWizardActive
3975
+ disabled: combinedDisable
3964
3976
  });
3965
3977
  }
3966
3978
  };
@@ -13432,7 +13444,7 @@ assert.strict.strict = assert.strict;
13432
13444
  var calculateMonomerPreviewTop = createCalculatePreviewTopFunction(preview.height);
13433
13445
  var calculateNucleoElementPreviewTop = createCalculatePreviewTopFunction(preview.heightForNucleotide);
13434
13446
  function calculateTop(target, height) {
13435
- var ketcherEditorRoot = document.querySelector(KETCHER_MACROMOLECULES_ROOT_NODE_SELECTOR);
13447
+ var ketcherEditorRoot = document.querySelector(ketcherCore.KETCHER_MACROMOLECULES_ROOT_NODE_SELECTOR);
13436
13448
  var ketcherEditorRootBoundingClientRect = ketcherEditorRoot === null || ketcherEditorRoot === void 0 ? void 0 : ketcherEditorRoot.getBoundingClientRect();
13437
13449
  var relativeTargetTop = target.top - ((ketcherEditorRootBoundingClientRect === null || ketcherEditorRootBoundingClientRect === void 0 ? void 0 : ketcherEditorRootBoundingClientRect.top) || 0);
13438
13450
  var relativeTargetBottom = target.bottom - ((ketcherEditorRootBoundingClientRect === null || ketcherEditorRootBoundingClientRect === void 0 ? void 0 : ketcherEditorRootBoundingClientRect.top) || 0);
@@ -13771,9 +13783,11 @@ function usePortalOpening(_ref) {
13771
13783
  }
13772
13784
 
13773
13785
  function usePortalStyle(_ref) {
13774
- var _ref2 = _slicedToArray__default["default"](_ref, 2),
13786
+ var _ref2 = _slicedToArray__default["default"](_ref, 4),
13775
13787
  ref = _ref2[0],
13776
- isOpen = _ref2[1];
13788
+ isOpen = _ref2[1],
13789
+ isTop = _ref2[2],
13790
+ rootElementSelector = _ref2[3];
13777
13791
  var _useState = React.useState({}),
13778
13792
  _useState2 = _slicedToArray__default["default"](_useState, 2),
13779
13793
  portalStyle = _useState2[0],
@@ -13783,19 +13797,20 @@ function usePortalStyle(_ref) {
13783
13797
  if (!ref.current) {
13784
13798
  return;
13785
13799
  }
13786
- var editorRect = ((_document$querySelect = document.querySelector(KETCHER_ROOT_NODE_CSS_SELECTOR)) === null || _document$querySelect === void 0 ? void 0 : _document$querySelect.getBoundingClientRect()) || {
13800
+ var editorRect = ((_document$querySelect = document.querySelector(rootElementSelector || KETCHER_ROOT_NODE_CSS_SELECTOR)) === null || _document$querySelect === void 0 ? void 0 : _document$querySelect.getBoundingClientRect()) || {
13787
13801
  top: 0,
13788
13802
  left: 0
13789
13803
  };
13790
13804
  var menuItemRect = ref.current.getBoundingClientRect();
13791
- var top = menuItemRect.top - editorRect.top;
13792
13805
  var spaceBetween = 4;
13793
- var left = menuItemRect.left - editorRect.left + menuItemRect.width + spaceBetween;
13806
+ var alignmentOffset = 2;
13807
+ var top = menuItemRect.top - editorRect.top + (isTop ? spaceBetween + menuItemRect.height : 0) - (isTop ? 0 : alignmentOffset);
13808
+ var left = menuItemRect.left - editorRect.left + (isTop ? 0 : spaceBetween + menuItemRect.width) - (isTop ? alignmentOffset : 0);
13794
13809
  setPortalStyle({
13795
13810
  top: "".concat(top, "px"),
13796
13811
  left: "".concat(left, "px")
13797
13812
  });
13798
- }, [ref, isOpen]);
13813
+ }, [ref, isOpen, isTop, rootElementSelector]);
13799
13814
  return [portalStyle];
13800
13815
  }
13801
13816
 
@@ -15135,7 +15150,7 @@ var selectOptions$2 = makeItems(['select-rectangle', 'select-lasso', 'select-fra
15135
15150
  var arrowsOptions = makeItems(['reaction-arrow-open-angle', 'reaction-arrow-filled-triangle', 'reaction-arrow-filled-bow', 'reaction-arrow-dashed-open-angle', 'reaction-arrow-failed', 'reaction-arrow-retrosynthetic', 'reaction-arrow-both-ends-filled-triangle', 'reaction-arrow-equilibrium-filled-half-bow', 'reaction-arrow-equilibrium-filled-triangle', 'reaction-arrow-equilibrium-open-angle', 'reaction-arrow-unbalanced-equilibrium-filled-half-bow', 'reaction-arrow-unbalanced-equilibrium-open-half-angle', 'reaction-arrow-unbalanced-equilibrium-large-filled-half-bow', 'reaction-arrow-unbalanced-equilibrium-filled-half-triangle', 'reaction-arrow-elliptical-arc-arrow-filled-bow', 'reaction-arrow-elliptical-arc-arrow-filled-triangle', 'reaction-arrow-elliptical-arc-arrow-open-angle', 'reaction-arrow-elliptical-arc-arrow-open-half-angle', ketcherCore.MULTITAIL_ARROW_TOOL_NAME]);
15136
15151
  var mappingOptions = makeItems(['reaction-map', 'reaction-unmap', 'reaction-automap']);
15137
15152
 
15138
- var classes$L = {"scroll":"ArrowScroll-module_scroll__h9kCx","button":"ArrowScroll-module_button__ygMgL","down":"ArrowScroll-module_down__yDzZX","up":"ArrowScroll-module_up__Q1ubd"};
15153
+ var classes$L = {"scroll":"ArrowScroll-module_scroll__h9kCx","upDown":"ArrowScroll-module_upDown__zT-Uf","button":"ArrowScroll-module_button__ygMgL","down":"ArrowScroll-module_down__yDzZX","up":"ArrowScroll-module_up__Q1ubd","left":"ArrowScroll-module_left__ND2ZB","right":"ArrowScroll-module_right__A3fNm"};
15139
15154
 
15140
15155
  function useSettingsContext() {
15141
15156
  return React__default["default"].useContext(settingsContext);
@@ -15230,8 +15245,9 @@ var useSubscriptionOnEvents = function useSubscriptionOnEvents() {
15230
15245
  var ArrowScroll = function ArrowScroll(_ref) {
15231
15246
  var startInView = _ref.startInView,
15232
15247
  endInView = _ref.endInView,
15233
- scrollUp = _ref.scrollUp,
15234
- scrollDown = _ref.scrollDown;
15248
+ scrollForward = _ref.scrollForward,
15249
+ scrollBack = _ref.scrollBack,
15250
+ isLeftRight = _ref.isLeftRight;
15235
15251
  var _useState = React.useState(false),
15236
15252
  _useState2 = _slicedToArray__default["default"](_useState, 2),
15237
15253
  isScrollDown = _useState2[0],
@@ -15240,8 +15256,8 @@ var ArrowScroll = function ArrowScroll(_ref) {
15240
15256
  _useState4 = _slicedToArray__default["default"](_useState3, 2),
15241
15257
  isScrollUp = _useState4[0],
15242
15258
  setScrollUp = _useState4[1];
15243
- useInterval(scrollDown, isScrollDown ? 100 : null);
15244
- useInterval(scrollUp, isScrollUp ? 100 : null);
15259
+ useInterval(scrollBack, isScrollDown ? 100 : null);
15260
+ useInterval(scrollForward, isScrollUp ? 100 : null);
15245
15261
  React.useEffect(function () {
15246
15262
  return function () {
15247
15263
  setScrollUp(false);
@@ -15253,31 +15269,27 @@ var ArrowScroll = function ArrowScroll(_ref) {
15253
15269
  };
15254
15270
  }, [endInView]);
15255
15271
  return jsxRuntime.jsxs("div", {
15256
- className: classes$L.scroll,
15272
+ className: [classes$L.scroll, isLeftRight ? classes$L.leftRight : classes$L.upDown].join(' '),
15257
15273
  children: [endInView ? jsxRuntime.jsx(jsxRuntime.Fragment, {}) : jsxRuntime.jsx("button", {
15258
- onClick: function onClick() {
15259
- return scrollDown();
15260
- },
15274
+ onClick: scrollForward,
15261
15275
  onMouseUp: function onMouseUp() {
15262
15276
  return setScrollDown(false);
15263
15277
  },
15264
15278
  onMouseDown: function onMouseDown() {
15265
15279
  return setScrollDown(true);
15266
15280
  },
15267
- className: clsx__default["default"](classes$L.button, classes$L.down),
15268
- children: "\u25BC"
15281
+ className: clsx__default["default"](classes$L.button, isLeftRight ? classes$L.right : classes$L.down),
15282
+ children: isLeftRight ? '►' : '▼'
15269
15283
  }), startInView ? jsxRuntime.jsx(jsxRuntime.Fragment, {}) : jsxRuntime.jsx("button", {
15270
- onClick: function onClick() {
15271
- return scrollUp();
15272
- },
15284
+ onClick: scrollBack,
15273
15285
  onMouseUp: function onMouseUp() {
15274
15286
  return setScrollUp(false);
15275
15287
  },
15276
15288
  onMouseDown: function onMouseDown() {
15277
15289
  return setScrollUp(true);
15278
15290
  },
15279
- className: clsx__default["default"](classes$L.button, classes$L.up),
15280
- children: "\u25B2"
15291
+ className: clsx__default["default"](classes$L.button, isLeftRight ? classes$L.left : classes$L.up),
15292
+ children: isLeftRight ? '◄' : '▲'
15281
15293
  })]
15282
15294
  });
15283
15295
  };
@@ -15511,8 +15523,8 @@ var LeftToolbar = function LeftToolbar(props) {
15511
15523
  }), height && (scrollRef === null || scrollRef === void 0 || (_scrollRef$current = scrollRef.current) === null || _scrollRef$current === void 0 ? void 0 : _scrollRef$current.scrollHeight) > height && jsxRuntime.jsx(ArrowScroll, {
15512
15524
  startInView: startInView,
15513
15525
  endInView: endInView,
15514
- scrollUp: scrollUp,
15515
- scrollDown: scrollDown
15526
+ scrollForward: scrollDown,
15527
+ scrollBack: scrollUp
15516
15528
  })]
15517
15529
  });
15518
15530
  };
@@ -15715,8 +15727,8 @@ var RightToolbar = function RightToolbar(props) {
15715
15727
  }), height && (scrollRef === null || scrollRef === void 0 || (_scrollRef$current = scrollRef.current) === null || _scrollRef$current === void 0 ? void 0 : _scrollRef$current.scrollHeight) > height && jsxRuntime.jsx(ArrowScroll, {
15716
15728
  startInView: startInView,
15717
15729
  endInView: endInView,
15718
- scrollUp: scrollUp,
15719
- scrollDown: scrollDown
15730
+ scrollForward: scrollDown,
15731
+ scrollBack: scrollUp
15720
15732
  })]
15721
15733
  });
15722
15734
  };
@@ -16073,7 +16085,7 @@ var ZoomControls = function ZoomControls(_ref) {
16073
16085
  open: isExpanded,
16074
16086
  onClose: onClose,
16075
16087
  anchorEl: containerRef.current,
16076
- container: document.querySelector(KETCHER_ROOT_NODE_CSS_SELECTOR) || document.querySelector(KETCHER_MACROMOLECULES_ROOT_NODE_SELECTOR),
16088
+ container: document.querySelector(KETCHER_ROOT_NODE_CSS_SELECTOR) || document.querySelector(ketcherCore.KETCHER_MACROMOLECULES_ROOT_NODE_SELECTOR),
16077
16089
  anchorOrigin: {
16078
16090
  vertical: 'bottom',
16079
16091
  horizontal: 'left'
@@ -24136,6 +24148,10 @@ var CreateMonomerTool = function () {
24136
24148
  value: function cancel() {
24137
24149
  this.editor.closeMonomerCreationWizard();
24138
24150
  }
24151
+ }, {
24152
+ key: "mousemove",
24153
+ value: function mousemove() {
24154
+ }
24139
24155
  }]);
24140
24156
  return CreateMonomerTool;
24141
24157
  }();
@@ -25365,13 +25381,27 @@ var Editor$3 = function () {
25365
25381
  }, {
25366
25382
  key: "isMonomerCreationWizardEnabled",
25367
25383
  get: function get() {
25368
- var _selection$atoms, _selection$bonds;
25384
+ var _selection$atoms,
25385
+ _selection$bonds,
25386
+ _this = this;
25369
25387
  if (this._monomerCreationState) {
25370
25388
  return true;
25371
25389
  }
25372
- var selection = this.explicitSelected();
25390
+ var selection = this.explicitSelected(false);
25373
25391
  if (selection && (_selection$atoms = selection.atoms) !== null && _selection$atoms !== void 0 && _selection$atoms.length && (_selection$bonds = selection.bonds) !== null && _selection$bonds !== void 0 && _selection$bonds.length) {
25374
25392
  var currentStruct = this.render.ctab.molecule;
25393
+ var selectionInvalid = selection.atoms.some(function (atomId) {
25394
+ var atom = _this.render.ctab.molecule.atoms.get(atomId);
25395
+ if (!atom) {
25396
+ return false;
25397
+ }
25398
+ return atom.sgs.size > 0 || ketcherCore.genericsList.includes(atom.label) || _this.render.ctab.molecule.rgroups.some(function (rgroup) {
25399
+ return rgroup.frags.has(atom.fragment);
25400
+ });
25401
+ });
25402
+ if (selectionInvalid) {
25403
+ return false;
25404
+ }
25375
25405
  var isSelectionContinuous = Editor.isSelectionContinuous(selection, currentStruct);
25376
25406
  if (!isSelectionContinuous) {
25377
25407
  return false;
@@ -25380,9 +25410,12 @@ var Editor$3 = function () {
25380
25410
  var bondsToOutside = currentStruct.bonds.filter(function (_, bond) {
25381
25411
  return selectionAtoms.has(bond.begin) && !selectionAtoms.has(bond.end) || selectionAtoms.has(bond.end) && !selectionAtoms.has(bond.begin);
25382
25412
  });
25383
- this.singleBondsToOutsideOfSelection = bondsToOutside.filter(function (_, bond) {
25384
- return bond.type === ketcherCore.Bond.PATTERN.TYPE.SINGLE;
25385
- });
25413
+ if (bondsToOutside.some(function (bond) {
25414
+ return bond.type !== ketcherCore.Bond.PATTERN.TYPE.SINGLE;
25415
+ })) {
25416
+ return false;
25417
+ }
25418
+ this.singleBondsToOutsideOfSelection = bondsToOutside;
25386
25419
  return this.singleBondsToOutsideOfSelection.size > 0 && this.singleBondsToOutsideOfSelection.size <= 8;
25387
25420
  }
25388
25421
  return false;
@@ -25391,7 +25424,7 @@ var Editor$3 = function () {
25391
25424
  key: "openMonomerCreationWizard",
25392
25425
  value: function openMonomerCreationWizard() {
25393
25426
  var _selection$atoms2,
25394
- _this = this;
25427
+ _this2 = this;
25395
25428
  var currentStruct = this.render.ctab.molecule;
25396
25429
  var selection = this.explicitSelected();
25397
25430
  this.originalSelection = selection;
@@ -25403,7 +25436,7 @@ var Editor$3 = function () {
25403
25436
  return a - b;
25404
25437
  }).forEach(function (atomId, i) {
25405
25438
  atomIdsMap.set(atomId, i);
25406
- _this.atomIdsMap.set(i, atomId);
25439
+ _this2.atomIdsMap.set(i, atomId);
25407
25440
  });
25408
25441
  var attachmentPoints = new Map();
25409
25442
  this.singleBondsToOutsideOfSelection.forEach(function (bond) {
@@ -25415,7 +25448,7 @@ var Editor$3 = function () {
25415
25448
  pp: leavingAtom === null || leavingAtom === void 0 ? void 0 : leavingAtom.pp
25416
25449
  });
25417
25450
  var newLeavingAtomId = selectedStruct.atoms.add(newLeavingAtom);
25418
- _this.atomIdsMap.set(newLeavingAtomId, leavingAtomId);
25451
+ _this2.atomIdsMap.set(newLeavingAtomId, leavingAtomId);
25419
25452
  var bondEdgeForAttachmentAtom = bondEdgeForLeavingAtom === 'end' ? 'begin' : 'end';
25420
25453
  var attachmentAtomId = bond[bondEdgeForAttachmentAtom];
25421
25454
  var attachmentAtomIdInSelectedStruct = atomIdsMap.get(attachmentAtomId);
@@ -25429,10 +25462,10 @@ var Editor$3 = function () {
25429
25462
  });
25430
25463
  selectedStruct.bonds.add(newBond);
25431
25464
  attachmentPoints.set(attachmentAtomIdInSelectedStruct, newLeavingAtomId);
25432
- _this.atomIdsMap.set(attachmentAtomIdInSelectedStruct, attachmentAtomId);
25465
+ _this2.atomIdsMap.set(attachmentAtomIdInSelectedStruct, attachmentAtomId);
25433
25466
  });
25434
25467
  this._monomerCreationState = {
25435
- originalStruct: currentStruct.clone(),
25468
+ originalStruct: currentStruct,
25436
25469
  attachmentAtomIdToLeavingAtomId: attachmentPoints
25437
25470
  };
25438
25471
  this.render.monomerCreationRenderState = {
@@ -25454,6 +25487,8 @@ var Editor$3 = function () {
25454
25487
  }, {
25455
25488
  key: "saveNewMonomer",
25456
25489
  value: function saveNewMonomer(data) {
25490
+ var _this$originalSelecti,
25491
+ _this3 = this;
25457
25492
  if (!this._monomerCreationState) {
25458
25493
  throw new Error('Monomer creation wizard is not active, cannot save new monomer');
25459
25494
  }
@@ -25477,6 +25512,7 @@ var Editor$3 = function () {
25477
25512
  var monomerId = "".concat(symbol, "___").concat(name);
25478
25513
  var monomerRef = ketcherCore.setMonomerTemplatePrefix(monomerId);
25479
25514
  var monomerHELMClass = ketcherCore.getHELMClassByKetMonomerClass(type);
25515
+ var naturalAnalogueToUse = ketcherCore.fillNaturalAnalogueForPhosphateAndSugar(naturalAnalogue, type);
25480
25516
  var monomerTemplate = {
25481
25517
  type: ketcherCore.KetTemplateType.MONOMER_TEMPLATE,
25482
25518
  id: monomerId,
@@ -25484,8 +25520,8 @@ var Editor$3 = function () {
25484
25520
  classHELM: monomerHELMClass,
25485
25521
  alias: symbol,
25486
25522
  fullName: name,
25487
- naturalAnalogShort: naturalAnalogue,
25488
- atoms: ketMicromolecule.mol0.atoms,
25523
+ naturalAnalogShort: naturalAnalogueToUse,
25524
+ atoms: ketcherCore.normalizeMonomerAtomsPositions(ketMicromolecule.mol0.atoms),
25489
25525
  bonds: ketMicromolecule.mol0.bonds,
25490
25526
  attachmentPoints: attachmentPoints,
25491
25527
  root: {
@@ -25510,9 +25546,24 @@ var Editor$3 = function () {
25510
25546
  var monomerPosition = new ketcherCore.Vec2((this.selectionBBox.min.x + this.selectionBBox.max.x) / 2, (this.selectionBBox.min.y + this.selectionBBox.max.y) / 2);
25511
25547
  var monomer = new Monomer(monomerItem, monomerPosition);
25512
25548
  this.closeMonomerCreationWizard();
25549
+ var sGroupAttachmentPoints = ketcherCore.MacromoleculesConverter.convertMonomerAttachmentPointsToSGroupAttachmentPoints(monomer, this.atomIdsMap);
25550
+ this.singleBondsToOutsideOfSelection.forEach(function (bond) {
25551
+ var attachmentPointToBond = sGroupAttachmentPoints.find(function (point) {
25552
+ return point.atomId === bond.begin || point.atomId === bond.end;
25553
+ });
25554
+ if (attachmentPointToBond) {
25555
+ bond.beginSuperatomAttachmentPointNumber = attachmentPointToBond.attachmentPointNumber;
25556
+ }
25557
+ });
25513
25558
  var action = ketcherCore.fromSgroupAddition(this.render.ctab, ketcherCore.SGroup.TYPES.SUP, this.originalSelection.atoms, {
25514
25559
  expanded: true
25515
- }, this.render.ctab.molecule.sgroups.newId(), ketcherCore.MacromoleculesConverter.convertMonomerAttachmentPointsToSGroupAttachmentPoints(monomer, this.atomIdsMap), monomer.position, true, monomer.monomerItem.props.MonomerName, null, monomer);
25560
+ }, this.render.ctab.molecule.sgroups.newId(), sGroupAttachmentPoints, monomer.position, true, monomer.monomerItem.props.MonomerName, null, monomer);
25561
+ (_this$originalSelecti = this.originalSelection.atoms) === null || _this$originalSelecti === void 0 || _this$originalSelecti.forEach(function (atomId) {
25562
+ var atom = _this3.render.ctab.molecule.atoms.get(atomId);
25563
+ if (atom) {
25564
+ atom.fragment = -1;
25565
+ }
25566
+ });
25516
25567
  this.update(action);
25517
25568
  }
25518
25569
  }, {
@@ -25700,6 +25751,11 @@ var Editor$3 = function () {
25700
25751
  ketcherCore.ketcherProvider.getKetcher(this.ketcherId).changeEvent.add(subscribeFuncWrapper);
25701
25752
  break;
25702
25753
  }
25754
+ case 'libraryUpdate':
25755
+ {
25756
+ ketcherCore.ketcherProvider.getKetcher(this.ketcherId).libraryUpdateEvent.add(handler);
25757
+ break;
25758
+ }
25703
25759
  default:
25704
25760
  this.event[eventName].add(handler);
25705
25761
  }
@@ -25725,6 +25781,7 @@ var Editor$3 = function () {
25725
25781
  }, {
25726
25782
  key: "explicitSelected",
25727
25783
  value: function explicitSelected() {
25784
+ var autoSelectBonds = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
25728
25785
  var selection = this.selection() || {};
25729
25786
  var res = structObjects.reduce(function (acc, key) {
25730
25787
  acc[key] = selection[key] ? selection[key].slice() : [];
@@ -25745,7 +25802,7 @@ var Editor$3 = function () {
25745
25802
  }
25746
25803
  });
25747
25804
  }
25748
- if (res.atoms && res.bonds) {
25805
+ if (autoSelectBonds && res.atoms && res.bonds) {
25749
25806
  struct.bonds.forEach(function (bond, bid) {
25750
25807
  if (res.bonds.indexOf(bid) < 0 && res.atoms.indexOf(bond.begin) >= 0 && res.atoms.indexOf(bond.end) >= 0) {
25751
25808
  res.bonds = res.bonds || [];
@@ -27696,6 +27753,47 @@ function getMenuPropsForSelection(selection, selectedFunctionalGroups, ketcherId
27696
27753
  }
27697
27754
  }
27698
27755
 
27756
+ var MonomerTypeSelectConfig = [{
27757
+ value: ketcherCore.KetMonomerClass.AminoAcid,
27758
+ label: 'Amino acid',
27759
+ iconName: 'peptide'
27760
+ }, {
27761
+ value: ketcherCore.KetMonomerClass.Sugar,
27762
+ label: 'Sugar',
27763
+ iconName: 'sugar'
27764
+ }, {
27765
+ value: ketcherCore.KetMonomerClass.Base,
27766
+ label: 'Base',
27767
+ iconName: 'base'
27768
+ }, {
27769
+ value: ketcherCore.KetMonomerClass.Phosphate,
27770
+ label: 'Phosphate',
27771
+ iconName: 'phosphate'
27772
+ }, {
27773
+ value: ketcherCore.KetMonomerClass.RNA,
27774
+ label: 'Nucleotide',
27775
+ iconName: 'nucleotide'
27776
+ }, {
27777
+ value: ketcherCore.KetMonomerClass.CHEM,
27778
+ label: 'CHEM',
27779
+ iconName: 'chem'
27780
+ }];
27781
+ var NotificationMessages = {
27782
+ defaultAttachmentPoints: 'Attachment points are set by default with hydrogens as leaving groups.',
27783
+ emptyMandatoryFields: 'Mandatory fields must be filled.',
27784
+ invalidSymbol: 'The monomer symbol must consist only of uppercase and lowercase letters, numbers, hyphens (-), underscores (_), and asterisks (*).',
27785
+ symbolExists: 'The symbol must be unique amongst peptide, RNA, or CHEM monomers.',
27786
+ editingIsNotAllowed: 'Editing of the structure is not allowed.'
27787
+ };
27788
+ var NotificationTypes = {
27789
+ defaultAttachmentPoints: 'info',
27790
+ emptyMandatoryFields: 'error',
27791
+ invalidSymbol: 'error',
27792
+ symbolExists: 'error',
27793
+ editingIsNotAllowed: 'error'
27794
+ };
27795
+ var MonomerCreationExternalNotificationAction = 'MonomerCreationExternalNotification';
27796
+
27699
27797
  function ownKeys$J(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; }
27700
27798
  function _objectSpread$J(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$J(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$J(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
27701
27799
  var ContextMenuTrigger = function ContextMenuTrigger(_ref) {
@@ -27728,6 +27826,12 @@ var ContextMenuTrigger = function ContextMenuTrigger(_ref) {
27728
27826
  event.preventDefault();
27729
27827
  var ketcher = ketcherCore.ketcherProvider.getKetcher(ketcherId);
27730
27828
  var editor = ketcher.editor;
27829
+ if (editor.monomerCreationState !== null) {
27830
+ window.dispatchEvent(new CustomEvent(MonomerCreationExternalNotificationAction, {
27831
+ detail: 'editingIsNotAllowed'
27832
+ }));
27833
+ return;
27834
+ }
27731
27835
  if (editor.render.options.viewOnlyMode) {
27732
27836
  return;
27733
27837
  }
@@ -28161,7 +28265,8 @@ var Select$1 = function Select(_ref2) {
28161
28265
  formName = _ref2.formName,
28162
28266
  name = _ref2.name,
28163
28267
  placeholder = _ref2.placeholder,
28164
- testId = _ref2['data-testid'];
28268
+ testId = _ref2['data-testid'],
28269
+ error = _ref2.error;
28165
28270
  var _useState = React.useState(),
28166
28271
  _useState2 = _slicedToArray__default["default"](_useState, 2),
28167
28272
  currentValue = _useState2[0],
@@ -28190,6 +28295,7 @@ var Select$1 = function Select(_ref2) {
28190
28295
  },
28191
28296
  IconComponent: ChevronIcon$1,
28192
28297
  "data-testid": testId,
28298
+ error: error,
28193
28299
  children: options && options.map(function (option) {
28194
28300
  var _option$children;
28195
28301
  var isDivider = typeof (option === null || option === void 0 ? void 0 : option.value) === 'string' ? option.value.includes('Divider') : false;
@@ -28360,7 +28466,8 @@ var NaturalAnaloguePicker = function NaturalAnaloguePicker(_ref2) {
28360
28466
  var monomerType = _ref2.monomerType,
28361
28467
  value = _ref2.value,
28362
28468
  onChange = _ref2.onChange,
28363
- className = _ref2.className;
28469
+ className = _ref2.className,
28470
+ error = _ref2.error;
28364
28471
  var disabled = !isNaturalAnalogueRequired(monomerType);
28365
28472
  var options = monomerType === ketcherCore.KetMonomerClass.AminoAcid ? aminoAcidOptions : rnaOptions;
28366
28473
  var renderValue = React.useCallback(function (selected) {
@@ -28404,6 +28511,7 @@ var NaturalAnaloguePicker = function NaturalAnaloguePicker(_ref2) {
28404
28511
  IconComponent: ChevronIcon,
28405
28512
  "data-testid": "natural-analogue-picker",
28406
28513
  disabled: disabled,
28514
+ error: error,
28407
28515
  children: options.map(function (option) {
28408
28516
  return jsxRuntime.jsx(MenuItem__default["default"], {
28409
28517
  value: option.value,
@@ -28448,7 +28556,7 @@ var AttributeField = function AttributeField(_ref) {
28448
28556
  });
28449
28557
  };
28450
28558
 
28451
- var styles$f = {"notification":"Notification-module_notification__yHqXk","notificationStrip":"Notification-module_notificationStrip__gSCg2","info":"Notification-module_info__M2qqL","infoStrip":"Notification-module_infoStrip__Bkztz","error":"Notification-module_error__I3OUR","errorStrip":"Notification-module_errorStrip__VlAys","notificationIcon":"Notification-module_notificationIcon__weZ-g","notificationText":"Notification-module_notificationText__4-qhV","notificationButton":"Notification-module_notificationButton__Bgw5u"};
28559
+ var styles$f = {"notification":"Notification-module_notification__yHqXk","notificationStrip":"Notification-module_notificationStrip__gSCg2","info":"Notification-module_info__M2qqL","error":"Notification-module_error__I3OUR","notificationIcon":"Notification-module_notificationIcon__weZ-g","notificationText":"Notification-module_notificationText__4-qhV","notificationButton":"Notification-module_notificationButton__Bgw5u"};
28452
28560
 
28453
28561
  var iconMap = {
28454
28562
  info: 'checkFilled',
@@ -28485,37 +28593,6 @@ var Notification = function Notification(_ref) {
28485
28593
 
28486
28594
  function ownKeys$H(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; }
28487
28595
  function _objectSpread$H(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$H(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$H(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
28488
- var MonomerTypeSelectConfig = [{
28489
- value: ketcherCore.KetMonomerClass.AminoAcid,
28490
- label: 'Amino acid',
28491
- iconName: 'peptide'
28492
- }, {
28493
- value: ketcherCore.KetMonomerClass.Sugar,
28494
- label: 'Sugar',
28495
- iconName: 'sugar'
28496
- }, {
28497
- value: ketcherCore.KetMonomerClass.Base,
28498
- label: 'Base',
28499
- iconName: 'base'
28500
- }, {
28501
- value: ketcherCore.KetMonomerClass.Phosphate,
28502
- label: 'Phosphate',
28503
- iconName: 'phosphate'
28504
- }, {
28505
- value: ketcherCore.KetMonomerClass.RNA,
28506
- label: 'Nucleotide',
28507
- iconName: 'nucleotide'
28508
- }, {
28509
- value: ketcherCore.KetMonomerClass.CHEM,
28510
- label: 'CHEM',
28511
- iconName: 'chem'
28512
- }];
28513
- var notificationMessages = {
28514
- defaultAttachmentPoints: 'Attachment points are set by default with hydrogens as leaving groups.',
28515
- emptyMandatoryFields: 'Mandatory fields must be filled.',
28516
- invalidSymbol: 'The monomer symbol must consist only of uppercase and lowercase letters, numbers, hyphens (-), underscores (_), and asterisks (*).',
28517
- symbolExists: 'The symbol must be unique amongst peptide, RNA, or CHEM monomers.'
28518
- };
28519
28596
  var initialWizardState = {
28520
28597
  values: {
28521
28598
  type: undefined,
@@ -28526,7 +28603,7 @@ var initialWizardState = {
28526
28603
  errors: {},
28527
28604
  notifications: new Map([['defaultAttachmentPoints', {
28528
28605
  type: 'info',
28529
- message: notificationMessages.defaultAttachmentPoints
28606
+ message: NotificationMessages.defaultAttachmentPoints
28530
28607
  }]])
28531
28608
  };
28532
28609
  var wizardReducer = function wizardReducer(state, action) {
@@ -28535,8 +28612,12 @@ var wizardReducer = function wizardReducer(state, action) {
28535
28612
  {
28536
28613
  var fieldId = action.fieldId,
28537
28614
  value = action.value;
28615
+ var values = _objectSpread$H(_objectSpread$H({}, state.values), {}, _defineProperty__default["default"]({}, fieldId, value));
28616
+ if (fieldId === 'type') {
28617
+ values.naturalAnalogue = '';
28618
+ }
28538
28619
  return _objectSpread$H(_objectSpread$H({}, state), {}, {
28539
- values: _objectSpread$H(_objectSpread$H({}, state.values), {}, _defineProperty__default["default"]({}, fieldId, value)),
28620
+ values: values,
28540
28621
  errors: _objectSpread$H(_objectSpread$H({}, state.errors), {}, _defineProperty__default["default"]({}, fieldId, undefined))
28541
28622
  });
28542
28623
  }
@@ -28552,6 +28633,20 @@ var wizardReducer = function wizardReducer(state, action) {
28552
28633
  notifications: new Map([].concat(_toConsumableArray__default["default"](state.notifications), _toConsumableArray__default["default"](action.notifications)))
28553
28634
  });
28554
28635
  }
28636
+ case 'AddNotification':
28637
+ {
28638
+ var notifications = new Map(state.notifications);
28639
+ var id = action.id;
28640
+ if (!notifications.has(id)) {
28641
+ notifications.set(id, {
28642
+ type: NotificationTypes[id],
28643
+ message: NotificationMessages[id]
28644
+ });
28645
+ }
28646
+ return _objectSpread$H(_objectSpread$H({}, state), {}, {
28647
+ notifications: notifications
28648
+ });
28649
+ }
28555
28650
  case 'ResetErrors':
28556
28651
  {
28557
28652
  return _objectSpread$H(_objectSpread$H({}, state), {}, {
@@ -28564,10 +28659,10 @@ var wizardReducer = function wizardReducer(state, action) {
28564
28659
  }
28565
28660
  case 'RemoveNotification':
28566
28661
  {
28567
- var notifications = new Map(state.notifications);
28568
- notifications["delete"](action.id);
28662
+ var _notifications = new Map(state.notifications);
28663
+ _notifications["delete"](action.id);
28569
28664
  return _objectSpread$H(_objectSpread$H({}, state), {}, {
28570
- notifications: notifications
28665
+ notifications: _notifications
28571
28666
  });
28572
28667
  }
28573
28668
  default:
@@ -28586,7 +28681,7 @@ var validateInputs = function validateInputs(values) {
28586
28681
  errors[key] = true;
28587
28682
  notifications.set('emptyMandatoryFields', {
28588
28683
  type: 'error',
28589
- message: notificationMessages.emptyMandatoryFields
28684
+ message: NotificationMessages.emptyMandatoryFields
28590
28685
  });
28591
28686
  }
28592
28687
  return;
@@ -28597,7 +28692,16 @@ var validateInputs = function validateInputs(values) {
28597
28692
  errors[key] = true;
28598
28693
  notifications.set('invalidSymbol', {
28599
28694
  type: 'error',
28600
- message: notificationMessages.invalidSymbol
28695
+ message: NotificationMessages.invalidSymbol
28696
+ });
28697
+ return;
28698
+ }
28699
+ var editor = ketcherCore.CoreEditor.provideEditorInstance();
28700
+ if (editor.checkIfMonomerSymbolClassPairExists(value, values.type)) {
28701
+ errors[key] = true;
28702
+ notifications.set('symbolExists', {
28703
+ type: 'error',
28704
+ message: NotificationMessages.symbolExists
28601
28705
  });
28602
28706
  }
28603
28707
  }
@@ -28620,6 +28724,21 @@ var MonomerCreationWizard = function MonomerCreationWizard() {
28620
28724
  symbol = values.symbol,
28621
28725
  name = values.name,
28622
28726
  naturalAnalogue = values.naturalAnalogue;
28727
+ React.useEffect(function () {
28728
+ var externalNotificationEventListener = function externalNotificationEventListener(event) {
28729
+ var notificationId = event.detail;
28730
+ if (notificationId) {
28731
+ wizardStateDispatch({
28732
+ type: 'AddNotification',
28733
+ id: notificationId
28734
+ });
28735
+ }
28736
+ };
28737
+ window.addEventListener(MonomerCreationExternalNotificationAction, externalNotificationEventListener);
28738
+ return function () {
28739
+ window.removeEventListener(MonomerCreationExternalNotificationAction, externalNotificationEventListener);
28740
+ };
28741
+ }, []);
28623
28742
  var handleFieldChange = function handleFieldChange(fieldId, value) {
28624
28743
  if (fieldId === 'type') {
28625
28744
  wizardStateDispatch({
@@ -28724,13 +28843,14 @@ var MonomerCreationWizard = function MonomerCreationWizard() {
28724
28843
  children: [jsxRuntime.jsx(AttributeField, {
28725
28844
  title: "Type",
28726
28845
  control: jsxRuntime.jsx(Select$1, {
28727
- className: clsx__default["default"](styles$j.input, errors.type && styles$j.error),
28846
+ className: styles$j.input,
28728
28847
  options: monomerTypeSelectOptions,
28729
28848
  placeholder: "Select monomer type",
28730
28849
  value: type,
28731
28850
  onChange: function onChange(value) {
28732
28851
  return handleFieldChange('type', value);
28733
- }
28852
+ },
28853
+ error: errors.type
28734
28854
  }),
28735
28855
  required: true
28736
28856
  }), jsxRuntime.jsx(AttributeField, {
@@ -28738,7 +28858,7 @@ var MonomerCreationWizard = function MonomerCreationWizard() {
28738
28858
  control: jsxRuntime.jsx("input", {
28739
28859
  type: "text",
28740
28860
  className: clsx__default["default"](styles$j.input, errors.symbol && styles$j.error),
28741
- placeholder: "ex.: Azs980uX",
28861
+ placeholder: "e.g. PEG-2",
28742
28862
  value: symbol,
28743
28863
  onChange: function onChange(event) {
28744
28864
  return handleFieldChange('symbol', event.target.value);
@@ -28750,7 +28870,7 @@ var MonomerCreationWizard = function MonomerCreationWizard() {
28750
28870
  control: jsxRuntime.jsx("input", {
28751
28871
  type: "text",
28752
28872
  className: clsx__default["default"](styles$j.input, errors.name && styles$j.error),
28753
- placeholder: "ex.: 5-hydroxymethyl dC-12",
28873
+ placeholder: "e.g. Diethylene Glycol",
28754
28874
  value: name,
28755
28875
  onChange: function onChange(event) {
28756
28876
  return handleFieldChange('name', event.target.value);
@@ -28760,12 +28880,12 @@ var MonomerCreationWizard = function MonomerCreationWizard() {
28760
28880
  }), jsxRuntime.jsx(AttributeField, {
28761
28881
  title: "Natural analogue",
28762
28882
  control: jsxRuntime.jsx(NaturalAnaloguePicker, {
28763
- className: clsx__default["default"](errors.type && styles$j.error),
28764
28883
  monomerType: type,
28765
28884
  value: naturalAnalogue,
28766
28885
  onChange: function onChange(value) {
28767
28886
  return handleFieldChange('naturalAnalogue', value);
28768
- }
28887
+ },
28888
+ error: errors.naturalAnalogue
28769
28889
  }),
28770
28890
  disabled: !isNaturalAnalogueRequired(type),
28771
28891
  required: true
@@ -36795,8 +36915,8 @@ var KetcherBuilder = function () {
36795
36915
  cleanup = initApp(prevKetcherId, ketcherId, element, appRoot, staticResourcesUrl, {
36796
36916
  buttons: buttons || {},
36797
36917
  errorHandler: errorHandler || null,
36798
- version: "3.7.0-rc.1" ,
36799
- buildDate: "2025-08-04T22:55:26" ,
36918
+ version: "3.7.0-rc.2" ,
36919
+ buildDate: "2025-08-20T17:19:11" ,
36800
36920
  buildNumber: '',
36801
36921
  customButtons: customButtons || []
36802
36922
  }, structService, resolve, togglerComponent);
@@ -37091,7 +37211,7 @@ var ModeControl = function ModeControl(_ref3) {
37091
37211
  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; }
37092
37212
  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__default["default"](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; }
37093
37213
  var MacromoleculesEditorComponent = React.lazy(function () {
37094
- return Promise.resolve().then(function () { return require('./index.modern-5eda67eb.js'); });
37214
+ return Promise.resolve().then(function () { return require('./index.modern-c52e0e6a.js'); });
37095
37215
  });
37096
37216
  var Editor = function Editor(props) {
37097
37217
  var _useState = React.useState(false),
@@ -37104,12 +37224,16 @@ var Editor = function Editor(props) {
37104
37224
  setMoleculesEditor = _useState4[1];
37105
37225
  var _useState5 = React.useState(),
37106
37226
  _useState6 = _slicedToArray__default["default"](_useState5, 2),
37107
- macromoleculesEditor = _useState6[0],
37108
- setMacromoleculesEditor = _useState6[1];
37109
- var _useState7 = React.useState(''),
37227
+ ketcher = _useState6[0],
37228
+ setKetcher = _useState6[1];
37229
+ var _useState7 = React.useState(),
37110
37230
  _useState8 = _slicedToArray__default["default"](_useState7, 2),
37111
- ketcherId = _useState8[0],
37112
- setKetcherId = _useState8[1];
37231
+ macromoleculesEditor = _useState8[0],
37232
+ setMacromoleculesEditor = _useState8[1];
37233
+ var _useState9 = React.useState(''),
37234
+ _useState10 = _slicedToArray__default["default"](_useState9, 2),
37235
+ ketcherId = _useState10[0],
37236
+ setKetcherId = _useState10[1];
37113
37237
  var togglePolymerEditor = function togglePolymerEditor(toggleValue) {
37114
37238
  setShowPolymerEditor(toggleValue);
37115
37239
  window.isPolymerEditorTurnedOn = toggleValue;
@@ -37118,6 +37242,24 @@ var Editor = function Editor(props) {
37118
37242
  toggle: togglePolymerEditor,
37119
37243
  isPolymerEditor: showPolymerEditor
37120
37244
  }) : undefined;
37245
+ React.useEffect(function () {
37246
+ var switchToMacromoleculesModeHandler = function switchToMacromoleculesModeHandler() {
37247
+ togglePolymerEditor(true);
37248
+ };
37249
+ var switchToMoleculesModeHandler = function switchToMoleculesModeHandler() {
37250
+ togglePolymerEditor(false);
37251
+ };
37252
+ if (macromoleculesEditor) {
37253
+ macromoleculesEditor.events.switchToMacromoleculesMode.add(switchToMacromoleculesModeHandler);
37254
+ macromoleculesEditor.events.switchToMoleculesMode.add(switchToMoleculesModeHandler);
37255
+ }
37256
+ return function () {
37257
+ if (macromoleculesEditor) {
37258
+ macromoleculesEditor.events.switchToMacromoleculesMode.remove(switchToMacromoleculesModeHandler);
37259
+ macromoleculesEditor.events.switchToMoleculesMode.remove(switchToMoleculesModeHandler);
37260
+ }
37261
+ };
37262
+ }, [macromoleculesEditor]);
37121
37263
  React.useEffect(function () {
37122
37264
  return function () {
37123
37265
  window.isPolymerEditorTurnedOn = false;
@@ -37133,9 +37275,14 @@ var Editor = function Editor(props) {
37133
37275
  }
37134
37276
  }
37135
37277
  }, [showPolymerEditor]);
37278
+ React.useEffect(function () {
37279
+ if (ketcher && moleculesEditor && (macromoleculesEditor || props.disableMacromoleculesEditor)) {
37280
+ var _props$onInit;
37281
+ (_props$onInit = props.onInit) === null || _props$onInit === void 0 || _props$onInit.call(props, ketcher);
37282
+ }
37283
+ }, [moleculesEditor, macromoleculesEditor]);
37136
37284
  var onInitMoleculesEditor = function onInitMoleculesEditor(ketcher) {
37137
- var _props$onInit;
37138
- (_props$onInit = props.onInit) === null || _props$onInit === void 0 || _props$onInit.call(props, ketcher);
37285
+ setKetcher(ketcher);
37139
37286
  setMoleculesEditor(ketcher.editor);
37140
37287
  };
37141
37288
  var onInitMacromoleculesEditor = function onInitMacromoleculesEditor(macromoleculesEditor) {
@@ -37174,17 +37321,25 @@ var Editor = function Editor(props) {
37174
37321
  });
37175
37322
  };
37176
37323
 
37324
+ Object.defineProperty(exports, 'EditorClassName', {
37325
+ enumerable: true,
37326
+ get: function () { return ketcherCore.EditorClassName; }
37327
+ });
37328
+ Object.defineProperty(exports, 'KETCHER_MACROMOLECULES_ROOT_NODE_SELECTOR', {
37329
+ enumerable: true,
37330
+ get: function () { return ketcherCore.KETCHER_MACROMOLECULES_ROOT_NODE_SELECTOR; }
37331
+ });
37177
37332
  exports.ACS_STYLE_DEFAULT_SETTINGS = ACS_STYLE_DEFAULT_SETTINGS;
37178
37333
  exports.Accordion = Accordion$1;
37179
37334
  exports.AmbiguousMonomerPreview = AmbiguousMonomerPreview;
37180
37335
  exports.AppContext = appContext;
37336
+ exports.ArrowScroll = ArrowScroll;
37181
37337
  exports.Button = Button;
37182
37338
  exports.Container = Container;
37183
37339
  exports.Content = Content;
37184
37340
  exports.ContentLine = ContentLine;
37185
37341
  exports.Dialog = Dialog;
37186
37342
  exports.Editor = Editor;
37187
- exports.EditorClassName = EditorClassName;
37188
37343
  exports.Header = Header$1;
37189
37344
  exports.Icon = Icon;
37190
37345
  exports.IconButton = IconButton;
@@ -37192,7 +37347,6 @@ exports.IconButtonCustomIcon = IconButtonCustomIcon;
37192
37347
  exports.IndigoProvider = IndigoProvider;
37193
37348
  exports.InfoModal = InfoModal$1;
37194
37349
  exports.Input = Input$2;
37195
- exports.KETCHER_MACROMOLECULES_ROOT_NODE_SELECTOR = KETCHER_MACROMOLECULES_ROOT_NODE_SELECTOR;
37196
37350
  exports.KETCHER_ROOT_NODE_CLASS_NAME = KETCHER_ROOT_NODE_CLASS_NAME;
37197
37351
  exports.KETCHER_ROOT_NODE_CSS_SELECTOR = KETCHER_ROOT_NODE_CSS_SELECTOR;
37198
37352
  exports.MODES = MODES;
@@ -37210,4 +37364,5 @@ exports.calculateNucleoElementPreviewTop = calculateNucleoElementPreviewTop;
37210
37364
  exports.getIconName = getIconName;
37211
37365
  exports.ketcherInitEventName = ketcherInitEventName;
37212
37366
  exports.preview = preview;
37367
+ exports.usePortalStyle = usePortalStyle;
37213
37368
  //# sourceMappingURL=index.js.map