ketcher-react 2.10.0-rc.1 → 2.10.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
@@ -1995,9 +1995,9 @@ function toSgroup(sgroup) {
1995
1995
  };
1996
1996
  }
1997
1997
 
1998
- function _createForOfIteratorHelper$e(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray$e(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
1999
- function _unsupportedIterableToArray$e(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray$e(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray$e(o, minLen); }
2000
- function _arrayLikeToArray$e(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
1998
+ function _createForOfIteratorHelper$d(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray$d(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
1999
+ function _unsupportedIterableToArray$d(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray$d(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray$d(o, minLen); }
2000
+ function _arrayLikeToArray$d(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
2001
2001
  function isFlipDisabled(editor) {
2002
2002
  var selection = editor.selection();
2003
2003
  var restruct = editor.render.ctab;
@@ -2010,13 +2010,13 @@ function isFlipDisabled(editor) {
2010
2010
  atoms = _selection$atoms === void 0 ? [] : _selection$atoms;
2011
2011
  var getBondIdsForAttachmentAtoms = function getBondIdsForAttachmentAtoms() {
2012
2012
  var result = [];
2013
- var _iterator = _createForOfIteratorHelper$e(atoms),
2013
+ var _iterator = _createForOfIteratorHelper$d(atoms),
2014
2014
  _step;
2015
2015
  try {
2016
2016
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
2017
2017
  var atomId = _step.value;
2018
2018
  var atomBondIds = ketcherCore.Atom.getConnectedBondIds(restruct.molecule, atomId);
2019
- var _iterator2 = _createForOfIteratorHelper$e(atomBondIds),
2019
+ var _iterator2 = _createForOfIteratorHelper$d(atomBondIds),
2020
2020
  _step2;
2021
2021
  try {
2022
2022
  for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
@@ -2042,7 +2042,7 @@ function isFlipDisabled(editor) {
2042
2042
  var getAmountOfAttachmentBonds = function getAmountOfAttachmentBonds() {
2043
2043
  var amountOfAttachmentBonds = 0;
2044
2044
  var totalBondIds = new Set([].concat(_toConsumableArray__default["default"](bonds), _toConsumableArray__default["default"](getBondIdsForAttachmentAtoms())));
2045
- var _iterator3 = _createForOfIteratorHelper$e(totalBondIds),
2045
+ var _iterator3 = _createForOfIteratorHelper$d(totalBondIds),
2046
2046
  _step3;
2047
2047
  try {
2048
2048
  for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
@@ -2532,6 +2532,10 @@ var KETCHER_SAVED_SETTINGS_KEY = 'ketcher_editor_saved_settings';
2532
2532
  var MODES = {
2533
2533
  FG: 'fg'
2534
2534
  };
2535
+ var STRUCT_TYPE = {
2536
+ atoms: 'atoms',
2537
+ bonds: 'bonds'
2538
+ };
2535
2539
 
2536
2540
  function ownKeys$1a(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
2537
2541
  function _objectSpread$1a(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$1a(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$1a(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
@@ -2612,10 +2616,14 @@ function parseStruct(struct, server, options) {
2612
2616
  return Promise.resolve(struct);
2613
2617
  }
2614
2618
  }
2619
+ function removeStructAction() {
2620
+ var savedSelectedTool = SettingsManager.selectionTool;
2621
+ return onAction(savedSelectedTool || tools$1['select-rectangle'].action);
2622
+ }
2615
2623
  function load(struct, options) {
2616
2624
  return function () {
2617
2625
  var _ref = _asyncToGenerator__default["default"]( _regeneratorRuntime__default["default"].mark(function _callee(dispatch, getState) {
2618
- var state, editor, server, errorHandler, parsedStruct, _options2, fragment, hasUnsupportedGroups, oldStruct, stereAtomsMap, savedSelectedTool;
2626
+ var state, editor, server, errorHandler, parsedStruct, _options2, fragment, hasUnsupportedGroups, oldStruct, stereAtomsMap;
2619
2627
  return _regeneratorRuntime__default["default"].wrap(function _callee$(_context) {
2620
2628
  while (1) {
2621
2629
  switch (_context.prev = _context.next) {
@@ -2680,11 +2688,7 @@ function load(struct, options) {
2680
2688
  parsedStruct.markFragments();
2681
2689
  if (fragment) {
2682
2690
  if (parsedStruct.isBlank()) {
2683
- savedSelectedTool = SettingsManager.selectionTool;
2684
- dispatch({
2685
- type: 'ACTION',
2686
- action: savedSelectedTool || tools$1['select-rectangle'].action
2687
- });
2691
+ dispatch(removeStructAction());
2688
2692
  } else {
2689
2693
  dispatch(onAction({
2690
2694
  tool: 'paste',
@@ -3066,7 +3070,7 @@ var zoom = {
3066
3070
 
3067
3071
  var openHelpLink = function openHelpLink() {
3068
3072
  var _window$open;
3069
- return (_window$open = window.open("https://github.com/epam/ketcher/blob/".concat("v2.10.0-rc.1\n", "/documentation/help.md#ketcher-overview"))) === null || _window$open === void 0 ? void 0 : _window$open.focus();
3073
+ return (_window$open = window.open("https://github.com/epam/ketcher/blob/".concat("v2.10.0-rc.2\n", "/documentation/help.md#ketcher-overview"))) === null || _window$open === void 0 ? void 0 : _window$open.focus();
3070
3074
  };
3071
3075
  var help = {
3072
3076
  help: {
@@ -7943,9 +7947,11 @@ var RenderStruct = function () {
7943
7947
  var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
7944
7948
  if (el && struct) {
7945
7949
  var _options$cachePrefix = options.cachePrefix,
7946
- cachePrefix = _options$cachePrefix === void 0 ? '' : _options$cachePrefix;
7950
+ cachePrefix = _options$cachePrefix === void 0 ? '' : _options$cachePrefix,
7951
+ _options$needCache = options.needCache,
7952
+ needCache = _options$needCache === void 0 ? true : _options$needCache;
7947
7953
  var cacheKey = "".concat(cachePrefix).concat(struct.name);
7948
- if (renderCache.has(cacheKey)) {
7954
+ if (renderCache.has(cacheKey) && needCache) {
7949
7955
  el.innerHTML = renderCache.get(cacheKey);
7950
7956
  return;
7951
7957
  }
@@ -7959,7 +7965,9 @@ var RenderStruct = function () {
7959
7965
  }, options));
7960
7966
  rnd.setMolecule(preparedStruct);
7961
7967
  rnd.update(true, options.viewSz);
7962
- renderCache.set(cacheKey, rnd.clientArea.innerHTML);
7968
+ if (needCache) {
7969
+ renderCache.set(cacheKey, rnd.clientArea.innerHTML);
7970
+ }
7963
7971
  }
7964
7972
  }
7965
7973
  }]);
@@ -8086,6 +8094,26 @@ function memoizedDebounce(func) {
8086
8094
 
8087
8095
  var showTooltipTimer = null;
8088
8096
  var TOOLTIP_DELAY = 300;
8097
+ function makeStruct(editor, sGroup) {
8098
+ var existingStruct = editor.struct();
8099
+ var struct = new ketcherCore.Struct();
8100
+ var atomsIdMapping = new Map();
8101
+ sGroup.atoms.forEach(function (atomId) {
8102
+ var atomIdInTooltip = struct.atoms.add(existingStruct.atoms.get(atomId));
8103
+ atomsIdMapping.set(atomId, atomIdInTooltip);
8104
+ });
8105
+ Array.from(existingStruct.bonds).forEach(function (value) {
8106
+ var _value = _slicedToArray__default["default"](value, 2);
8107
+ _value[0];
8108
+ var bond = _value[1];
8109
+ var clonedBond = bond.clone(atomsIdMapping);
8110
+ var isInsideSGroup = sGroup.atoms.includes(bond.begin) || sGroup.atoms.includes(bond.end);
8111
+ if (isInsideSGroup) {
8112
+ struct.bonds.add(clonedBond);
8113
+ }
8114
+ });
8115
+ return struct;
8116
+ }
8089
8117
  function showTooltip(editor, infoPanelData) {
8090
8118
  editor.event.showInfo.dispatch(null);
8091
8119
  if (showTooltipTimer) {
@@ -8106,7 +8134,8 @@ function showFunctionalGroupsTooltip(editor) {
8106
8134
  var sGroup = (_editor$struct = editor.struct()) === null || _editor$struct === void 0 ? void 0 : _editor$struct.sgroups.get(closestCollapsibleStructures.id);
8107
8135
  if (sGroup && !sGroup.data.expanded && sGroup.hovering) {
8108
8136
  var groupName = sGroup.data.name;
8109
- var groupStruct = ketcherCore.FunctionalGroup.getFunctionalGroupByName(groupName);
8137
+ var groupStruct = makeStruct(editor, sGroup);
8138
+ groupStruct.name = groupName;
8110
8139
  infoPanelData = {
8111
8140
  groupStruct: groupStruct,
8112
8141
  event: event,
@@ -10102,7 +10131,8 @@ var mapDispatchToProps$e = function mapDispatchToProps(dispatch) {
10102
10131
  return dispatchAction('open');
10103
10132
  },
10104
10133
  onSave: function onSave() {
10105
- return dispatchAction('save');
10134
+ dispatch(removeStructAction());
10135
+ dispatchAction('save');
10106
10136
  },
10107
10137
  onUndo: function onUndo() {
10108
10138
  return dispatchAction('undo');
@@ -10252,9 +10282,9 @@ function lookup(map, event) {
10252
10282
  }
10253
10283
  keyNorm.lookup = lookup;
10254
10284
 
10255
- function _createForOfIteratorHelper$d(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray$d(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
10256
- function _unsupportedIterableToArray$d(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray$d(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray$d(o, minLen); }
10257
- function _arrayLikeToArray$d(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
10285
+ function _createForOfIteratorHelper$c(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray$c(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
10286
+ function _unsupportedIterableToArray$c(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray$c(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray$c(o, minLen); }
10287
+ function _arrayLikeToArray$c(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
10258
10288
  var APointTool = function () {
10259
10289
  function APointTool(editor) {
10260
10290
  _classCallCheck__default["default"](this, APointTool);
@@ -10290,7 +10320,7 @@ var APointTool = function () {
10290
10320
  }
10291
10321
  }
10292
10322
  if (atomResult.length > 0) {
10293
- var _iterator = _createForOfIteratorHelper$d(atomResult),
10323
+ var _iterator = _createForOfIteratorHelper$c(atomResult),
10294
10324
  _step;
10295
10325
  try {
10296
10326
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
@@ -10401,9 +10431,9 @@ var utils = {
10401
10431
  getNonGroupItemsAndAttachmentPoints: getNonGroupItemsAndAttachmentPoints
10402
10432
  };
10403
10433
 
10404
- function _createForOfIteratorHelper$c(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray$c(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
10405
- function _unsupportedIterableToArray$c(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray$c(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray$c(o, minLen); }
10406
- function _arrayLikeToArray$c(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
10434
+ function _createForOfIteratorHelper$b(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray$b(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
10435
+ function _unsupportedIterableToArray$b(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray$b(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray$b(o, minLen); }
10436
+ function _arrayLikeToArray$b(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
10407
10437
  function _classPrivateFieldInitSpec$2(obj, privateMap, value) { _checkPrivateRedeclaration$2(obj, privateMap); privateMap.set(obj, value); }
10408
10438
  function _checkPrivateRedeclaration$2(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
10409
10439
  var _bondProps = new WeakMap();
@@ -10480,7 +10510,7 @@ var AtomTool = function () {
10480
10510
  if (atomId !== null) atomResult.push(atomId);
10481
10511
  }
10482
10512
  if (atomResult.length > 0) {
10483
- var _iterator = _createForOfIteratorHelper$c(atomResult),
10513
+ var _iterator = _createForOfIteratorHelper$b(atomResult),
10484
10514
  _step;
10485
10515
  try {
10486
10516
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
@@ -10552,7 +10582,7 @@ var AtomTool = function () {
10552
10582
  if (atomId !== null) atomResult.push(atomId);
10553
10583
  }
10554
10584
  if (atomResult.length > 0) {
10555
- var _iterator2 = _createForOfIteratorHelper$c(atomResult),
10585
+ var _iterator2 = _createForOfIteratorHelper$b(atomResult),
10556
10586
  _step2;
10557
10587
  try {
10558
10588
  for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
@@ -10621,9 +10651,9 @@ function atomLongtapEvent(tool, render) {
10621
10651
  };
10622
10652
  }
10623
10653
 
10624
- function _createForOfIteratorHelper$b(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray$b(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
10625
- function _unsupportedIterableToArray$b(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray$b(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray$b(o, minLen); }
10626
- function _arrayLikeToArray$b(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
10654
+ function _createForOfIteratorHelper$a(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray$a(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
10655
+ function _unsupportedIterableToArray$a(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray$a(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray$a(o, minLen); }
10656
+ function _arrayLikeToArray$a(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
10627
10657
  var AttachTool = function () {
10628
10658
  function AttachTool(editor, attachPoints) {
10629
10659
  _classCallCheck__default["default"](this, AttachTool);
@@ -10676,7 +10706,7 @@ var AttachTool = function () {
10676
10706
  }
10677
10707
  }
10678
10708
  if (atomResult.length > 0) {
10679
- var _iterator = _createForOfIteratorHelper$b(atomResult),
10709
+ var _iterator = _createForOfIteratorHelper$a(atomResult),
10680
10710
  _step;
10681
10711
  try {
10682
10712
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
@@ -10696,7 +10726,7 @@ var AttachTool = function () {
10696
10726
  });
10697
10727
  return;
10698
10728
  } else if (bondResult.length > 0) {
10699
- var _iterator2 = _createForOfIteratorHelper$b(bondResult),
10729
+ var _iterator2 = _createForOfIteratorHelper$a(bondResult),
10700
10730
  _step2;
10701
10731
  try {
10702
10732
  for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
@@ -10732,9 +10762,9 @@ var AttachTool = function () {
10732
10762
  return AttachTool;
10733
10763
  }();
10734
10764
 
10735
- function _createForOfIteratorHelper$a(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray$a(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
10736
- function _unsupportedIterableToArray$a(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray$a(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray$a(o, minLen); }
10737
- function _arrayLikeToArray$a(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
10765
+ function _createForOfIteratorHelper$9(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray$9(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
10766
+ function _unsupportedIterableToArray$9(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray$9(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray$9(o, minLen); }
10767
+ function _arrayLikeToArray$9(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
10738
10768
  var BondTool = function () {
10739
10769
  function BondTool(editor, bondProps) {
10740
10770
  var _editor$selection;
@@ -10771,7 +10801,7 @@ var BondTool = function () {
10771
10801
  if (bondId !== null) bondResult.push(bondId);
10772
10802
  }
10773
10803
  if (atomResult.length > 0) {
10774
- var _iterator = _createForOfIteratorHelper$a(atomResult),
10804
+ var _iterator = _createForOfIteratorHelper$9(atomResult),
10775
10805
  _step;
10776
10806
  try {
10777
10807
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
@@ -10791,7 +10821,7 @@ var BondTool = function () {
10791
10821
  });
10792
10822
  return;
10793
10823
  } else if (bondResult.length > 0) {
10794
- var _iterator2 = _createForOfIteratorHelper$a(bondResult),
10824
+ var _iterator2 = _createForOfIteratorHelper$9(bondResult),
10795
10825
  _step2;
10796
10826
  try {
10797
10827
  for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
@@ -10899,7 +10929,7 @@ var BondTool = function () {
10899
10929
  }
10900
10930
  }
10901
10931
  if (atomResult.length > 0) {
10902
- var _iterator3 = _createForOfIteratorHelper$a(atomResult),
10932
+ var _iterator3 = _createForOfIteratorHelper$9(atomResult),
10903
10933
  _step3;
10904
10934
  try {
10905
10935
  for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
@@ -11012,7 +11042,7 @@ var BondTool = function () {
11012
11042
  }, {
11013
11043
  key: "getExistingBond",
11014
11044
  value: function getExistingBond(struct, begin, end) {
11015
- var _iterator4 = _createForOfIteratorHelper$a(struct.bonds.entries()),
11045
+ var _iterator4 = _createForOfIteratorHelper$9(struct.bonds.entries()),
11016
11046
  _step4;
11017
11047
  try {
11018
11048
  for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
@@ -11035,9 +11065,9 @@ var BondTool = function () {
11035
11065
  return BondTool;
11036
11066
  }();
11037
11067
 
11038
- function _createForOfIteratorHelper$9(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray$9(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
11039
- function _unsupportedIterableToArray$9(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray$9(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray$9(o, minLen); }
11040
- function _arrayLikeToArray$9(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
11068
+ function _createForOfIteratorHelper$8(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray$8(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
11069
+ function _unsupportedIterableToArray$8(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray$8(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray$8(o, minLen); }
11070
+ function _arrayLikeToArray$8(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
11041
11071
  var ChainTool = function () {
11042
11072
  function ChainTool(editor) {
11043
11073
  _classCallCheck__default["default"](this, ChainTool);
@@ -11069,7 +11099,7 @@ var ChainTool = function () {
11069
11099
  }
11070
11100
  }
11071
11101
  if (atomResult.length > 0) {
11072
- var _iterator = _createForOfIteratorHelper$9(atomResult),
11102
+ var _iterator = _createForOfIteratorHelper$8(atomResult),
11073
11103
  _step;
11074
11104
  try {
11075
11105
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
@@ -11089,7 +11119,7 @@ var ChainTool = function () {
11089
11119
  });
11090
11120
  return;
11091
11121
  } else if (bondResult.length > 0) {
11092
- var _iterator2 = _createForOfIteratorHelper$9(bondResult),
11122
+ var _iterator2 = _createForOfIteratorHelper$8(bondResult),
11093
11123
  _step2;
11094
11124
  try {
11095
11125
  for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
@@ -11194,7 +11224,7 @@ var ChainTool = function () {
11194
11224
  }
11195
11225
  }
11196
11226
  if (atomResult.length > 0) {
11197
- var _iterator3 = _createForOfIteratorHelper$9(atomResult),
11227
+ var _iterator3 = _createForOfIteratorHelper$8(atomResult),
11198
11228
  _step3;
11199
11229
  try {
11200
11230
  for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
@@ -11256,9 +11286,9 @@ var ChainTool = function () {
11256
11286
  return ChainTool;
11257
11287
  }();
11258
11288
 
11259
- function _createForOfIteratorHelper$8(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray$8(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
11260
- function _unsupportedIterableToArray$8(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray$8(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray$8(o, minLen); }
11261
- function _arrayLikeToArray$8(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
11289
+ function _createForOfIteratorHelper$7(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray$7(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
11290
+ function _unsupportedIterableToArray$7(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray$7(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray$7(o, minLen); }
11291
+ function _arrayLikeToArray$7(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
11262
11292
  var ChargeTool = function () {
11263
11293
  function ChargeTool(editor, charge) {
11264
11294
  _classCallCheck__default["default"](this, ChargeTool);
@@ -11299,7 +11329,7 @@ var ChargeTool = function () {
11299
11329
  }
11300
11330
  }
11301
11331
  if (atomResult.length > 0) {
11302
- var _iterator = _createForOfIteratorHelper$8(atomResult),
11332
+ var _iterator = _createForOfIteratorHelper$7(atomResult),
11303
11333
  _step;
11304
11334
  try {
11305
11335
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
@@ -11662,9 +11692,9 @@ var LassoHelper = function () {
11662
11692
  return LassoHelper;
11663
11693
  }();
11664
11694
 
11665
- function _createForOfIteratorHelper$7(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray$7(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
11666
- function _unsupportedIterableToArray$7(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray$7(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray$7(o, minLen); }
11667
- function _arrayLikeToArray$7(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
11695
+ function _createForOfIteratorHelper$6(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray$6(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
11696
+ function _unsupportedIterableToArray$6(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray$6(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray$6(o, minLen); }
11697
+ function _arrayLikeToArray$6(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
11668
11698
  var searchMaps = ['atoms', 'bonds', 'sgroups', 'functionalGroups', 'sgroupData'];
11669
11699
  var SGroupTool = function () {
11670
11700
  function SGroupTool(editor) {
@@ -11696,7 +11726,7 @@ var SGroupTool = function () {
11696
11726
  return fp.isEqual(sgroup.atoms, selectedAtoms);
11697
11727
  });
11698
11728
  if (selectedAtoms && functionalGroups.size) {
11699
- var _iterator = _createForOfIteratorHelper$7(selectedAtoms),
11729
+ var _iterator = _createForOfIteratorHelper$6(selectedAtoms),
11700
11730
  _step;
11701
11731
  try {
11702
11732
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
@@ -11708,7 +11738,7 @@ var SGroupTool = function () {
11708
11738
  }
11709
11739
  var atomFromStruct = atomId !== null && ((_struct$atoms$get = struct.atoms.get(atomId)) === null || _struct$atoms$get === void 0 ? void 0 : _struct$atoms$get.a);
11710
11740
  if (atomFromStruct) {
11711
- var _iterator2 = _createForOfIteratorHelper$7(atomFromStruct.sgs.values()),
11741
+ var _iterator2 = _createForOfIteratorHelper$6(atomFromStruct.sgs.values()),
11712
11742
  _step2;
11713
11743
  try {
11714
11744
  for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
@@ -11741,7 +11771,7 @@ var SGroupTool = function () {
11741
11771
  atomsResult = [];
11742
11772
  }
11743
11773
  if (atomsResult && atomsResult.length > 0) {
11744
- var _iterator3 = _createForOfIteratorHelper$7(atomsResult),
11774
+ var _iterator3 = _createForOfIteratorHelper$6(atomsResult),
11745
11775
  _step3;
11746
11776
  try {
11747
11777
  for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
@@ -11805,7 +11835,7 @@ var SGroupTool = function () {
11805
11835
  }
11806
11836
  }
11807
11837
  if (atomResult.length > 0) {
11808
- var _iterator4 = _createForOfIteratorHelper$7(atomResult),
11838
+ var _iterator4 = _createForOfIteratorHelper$6(atomResult),
11809
11839
  _step4;
11810
11840
  try {
11811
11841
  for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
@@ -11825,7 +11855,7 @@ var SGroupTool = function () {
11825
11855
  });
11826
11856
  return;
11827
11857
  } else if (bondResult.length > 0) {
11828
- var _iterator5 = _createForOfIteratorHelper$7(bondResult),
11858
+ var _iterator5 = _createForOfIteratorHelper$6(bondResult),
11829
11859
  _step5;
11830
11860
  try {
11831
11861
  for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
@@ -11887,7 +11917,7 @@ var SGroupTool = function () {
11887
11917
  var result = [];
11888
11918
  if (ci && ci.map === 'functionalGroups' && functionalGroups.size && ketcherCore.FunctionalGroup.isContractedFunctionalGroup(ci.id, functionalGroups)) return;
11889
11919
  if (selected && functionalGroups.size && selected.atoms) {
11890
- var _iterator6 = _createForOfIteratorHelper$7(selected.atoms),
11920
+ var _iterator6 = _createForOfIteratorHelper$6(selected.atoms),
11891
11921
  _step6;
11892
11922
  try {
11893
11923
  for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
@@ -11899,7 +11929,7 @@ var SGroupTool = function () {
11899
11929
  }
11900
11930
  var atomFromStruct = atomId !== null && ((_struct$atoms$get3 = struct.atoms.get(atomId)) === null || _struct$atoms$get3 === void 0 ? void 0 : _struct$atoms$get3.a);
11901
11931
  if (atomFromStruct) {
11902
- var _iterator7 = _createForOfIteratorHelper$7(atomFromStruct.sgs.values()),
11932
+ var _iterator7 = _createForOfIteratorHelper$6(atomFromStruct.sgs.values()),
11903
11933
  _step7;
11904
11934
  try {
11905
11935
  for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {
@@ -11929,7 +11959,7 @@ var SGroupTool = function () {
11929
11959
  }
11930
11960
  }
11931
11961
  if (selected && functionalGroups.size && selected.bonds) {
11932
- var _iterator8 = _createForOfIteratorHelper$7(selected.bonds),
11962
+ var _iterator8 = _createForOfIteratorHelper$6(selected.bonds),
11933
11963
  _step8;
11934
11964
  try {
11935
11965
  for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {
@@ -11971,7 +12001,7 @@ var SGroupTool = function () {
11971
12001
  bondsResult = null;
11972
12002
  }
11973
12003
  if (atomsResult && atomsResult.length > 0) {
11974
- var _iterator9 = _createForOfIteratorHelper$7(atomsResult),
12004
+ var _iterator9 = _createForOfIteratorHelper$6(atomsResult),
11975
12005
  _step9;
11976
12006
  try {
11977
12007
  for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {
@@ -11988,7 +12018,7 @@ var SGroupTool = function () {
11988
12018
  }
11989
12019
  }
11990
12020
  if (bondsResult && bondsResult.length > 0) {
11991
- var _iterator10 = _createForOfIteratorHelper$7(bondsResult),
12021
+ var _iterator10 = _createForOfIteratorHelper$6(bondsResult),
11992
12022
  _step10;
11993
12023
  try {
11994
12024
  for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {
@@ -12141,6 +12171,9 @@ function fromContextType(id, editor, newSg, currSelection) {
12141
12171
  var sg = restruct.molecule.sgroups.get(id);
12142
12172
  var sourceAtoms = sg && sg.atoms || currSelection.atoms || [];
12143
12173
  var context = newSg.attrs.context;
12174
+ if (newSg.type === ketcherCore.SGroup.TYPES.SUP) {
12175
+ newSg.attrs.expanded = true;
12176
+ }
12144
12177
  var result = ketcherCore.fromSgroupAction(context, restruct, newSg, sourceAtoms, currSelection);
12145
12178
  result.selection = result.selection || currSelection;
12146
12179
  if (id !== null && id !== undefined) {
@@ -12201,7 +12234,7 @@ function getGroupIdsFromItemMaps(struct, mergeMaps) {
12201
12234
  });
12202
12235
  }
12203
12236
 
12204
- function dropAndMerge(editor, mergeItems, action) {
12237
+ function dropAndMerge(editor, mergeItems, action, resizeCanvas) {
12205
12238
  var _dropItemAction;
12206
12239
  var restruct = editor.render.ctab;
12207
12240
  var isMerging = !!mergeItems;
@@ -12226,7 +12259,7 @@ function dropAndMerge(editor, mergeItems, action) {
12226
12259
  if (isMerging) editor.selection(null);
12227
12260
  if (((_dropItemAction = dropItemAction) === null || _dropItemAction === void 0 ? void 0 : _dropItemAction.operations.length) > 0) {
12228
12261
  editor.update(dropItemAction, false, {
12229
- resizeCanvas: false
12262
+ resizeCanvas: !!resizeCanvas
12230
12263
  });
12231
12264
  }
12232
12265
  return dropItemAction;
@@ -12251,27 +12284,24 @@ function extractAttachmentAtom(mergeItems, editor) {
12251
12284
  atoms: new Map(mergeItems.atoms),
12252
12285
  bonds: new Map(mergeItems.bonds)
12253
12286
  };
12254
- var removeNonAttachmentAtoms = new ketcherCore.Action();
12255
- var removeSGroup = new ketcherCore.Action();
12287
+ var action = new ketcherCore.Action();
12256
12288
  (_mergeItems$atomToFun = mergeItems.atomToFunctionalGroup) === null || _mergeItems$atomToFun === void 0 ? void 0 : _mergeItems$atomToFun.forEach(function (functionalGroupId, srcAtomId) {
12257
12289
  var sGroup = struct.sgroups.get(functionalGroupId);
12258
12290
  var attachmentAtomId = sGroup === null || sGroup === void 0 ? void 0 : sGroup.getAttAtomId(struct);
12259
- if (attachmentAtomId) {
12260
- var attachmentAtom = struct.atoms.get(attachmentAtomId);
12261
- if (ketcherCore.SGroup.isAtomInContractedSGroup(attachmentAtom, struct.sgroups)) {
12262
- return;
12263
- }
12264
- newMergeItems.atoms.set(srcAtomId, attachmentAtomId);
12265
- removeNonAttachmentAtoms.mergeWith(ketcherCore.fromFragmentDeletion(reStruct, {
12266
- atoms: _toConsumableArray__default["default"](ketcherCore.SGroup.getAtoms(struct, sGroup)).filter(function (atomId) {
12267
- return atomId !== attachmentAtomId;
12268
- }),
12269
- bonds: _toConsumableArray__default["default"](ketcherCore.SGroup.getBonds(struct, sGroup))
12291
+ if (attachmentAtomId !== undefined) {
12292
+ var atomsToDelete = _toConsumableArray__default["default"](ketcherCore.SGroup.getAtoms(struct, sGroup)).filter(function (atomId) {
12293
+ return atomId !== attachmentAtomId;
12294
+ });
12295
+ var bondsToDelete = _toConsumableArray__default["default"](ketcherCore.SGroup.getBonds(struct, sGroup));
12296
+ action.mergeWith(ketcherCore.fromSgroupDeletion(reStruct, functionalGroupId));
12297
+ action.mergeWith(ketcherCore.fromFragmentDeletion(reStruct, {
12298
+ atoms: atomsToDelete,
12299
+ bonds: bondsToDelete
12270
12300
  }));
12271
- removeSGroup.mergeWith(ketcherCore.fromSgroupDeletion(reStruct, functionalGroupId));
12301
+ newMergeItems.atoms.set(srcAtomId, attachmentAtomId);
12272
12302
  }
12273
12303
  });
12274
- return [newMergeItems, removeNonAttachmentAtoms];
12304
+ return [newMergeItems, action];
12275
12305
  }
12276
12306
 
12277
12307
  function ownKeys$Q(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
@@ -12349,9 +12379,19 @@ function updateSelectedBonds(_ref) {
12349
12379
  }
12350
12380
  }
12351
12381
 
12352
- function _createForOfIteratorHelper$6(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray$6(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
12353
- function _unsupportedIterableToArray$6(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray$6(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray$6(o, minLen); }
12354
- function _arrayLikeToArray$6(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
12382
+ function hasAtomsOutsideCanvas(atoms, render, scale) {
12383
+ return atoms.some(function (atom) {
12384
+ var canvasSize = render.sz;
12385
+ var offset = render.options.offset;
12386
+ var xSize = atom.pp.x * scale;
12387
+ var ySize = atom.pp.y * scale;
12388
+ return xSize > canvasSize.x || xSize + offset.x < 0 || ySize > canvasSize.y || ySize + offset.y < 0;
12389
+ });
12390
+ }
12391
+
12392
+ function _createForOfIteratorHelper$5(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray$5(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
12393
+ function _unsupportedIterableToArray$5(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray$5(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray$5(o, minLen); }
12394
+ function _arrayLikeToArray$5(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
12355
12395
  function ownKeys$P(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
12356
12396
  function _objectSpread$P(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$P(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$P(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
12357
12397
  function _classPrivateFieldInitSpec$1(obj, privateMap, value) { _checkPrivateRedeclaration$1(obj, privateMap); privateMap.set(obj, value); }
@@ -12522,7 +12562,9 @@ var SelectTool = function () {
12522
12562
  delete this.dragCtx;
12523
12563
  }
12524
12564
  if ((_this$dragCtx2 = this.dragCtx) !== null && _this$dragCtx2 !== void 0 && _this$dragCtx2.item) {
12525
- dropAndMerge(editor, this.dragCtx.mergeItems, this.dragCtx.action);
12565
+ var atoms = Array.from(editor.struct().atoms.values());
12566
+ var shouldResizeCanvas = hasAtomsOutsideCanvas(atoms, editor.render, editor.options().scale);
12567
+ dropAndMerge(editor, this.dragCtx.mergeItems, this.dragCtx.action, shouldResizeCanvas);
12526
12568
  delete this.dragCtx;
12527
12569
  } else if (_classPrivateFieldGet__default["default"](this, _lassoHelper).running()) {
12528
12570
  this.selectElementsOnCanvas(newSelected, editor, event);
@@ -12560,7 +12602,7 @@ var SelectTool = function () {
12560
12602
  bondFromStruct, sgroups, functionalGroups)) bondResult.push(bondId);
12561
12603
  }
12562
12604
  if (atomResult.length > 0) {
12563
- var _iterator = _createForOfIteratorHelper$6(atomResult),
12605
+ var _iterator = _createForOfIteratorHelper$5(atomResult),
12564
12606
  _step;
12565
12607
  try {
12566
12608
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
@@ -12580,7 +12622,7 @@ var SelectTool = function () {
12580
12622
  });
12581
12623
  return;
12582
12624
  } else if (bondResult.length > 0) {
12583
- var _iterator2 = _createForOfIteratorHelper$6(bondResult),
12625
+ var _iterator2 = _createForOfIteratorHelper$5(bondResult),
12584
12626
  _step2;
12585
12627
  try {
12586
12628
  for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
@@ -12800,7 +12842,7 @@ function getNewSelectedItems(editor, selectedSgroups) {
12800
12842
  atoms: [],
12801
12843
  bonds: []
12802
12844
  };
12803
- var _iterator3 = _createForOfIteratorHelper$6(selectedSgroups),
12845
+ var _iterator3 = _createForOfIteratorHelper$5(selectedSgroups),
12804
12846
  _step3;
12805
12847
  try {
12806
12848
  for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
@@ -12822,9 +12864,9 @@ function getNewSelectedItems(editor, selectedSgroups) {
12822
12864
  return newSelected;
12823
12865
  }
12824
12866
 
12825
- function _createForOfIteratorHelper$5(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray$5(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
12826
- function _unsupportedIterableToArray$5(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray$5(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray$5(o, minLen); }
12827
- function _arrayLikeToArray$5(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
12867
+ function _createForOfIteratorHelper$4(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray$4(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
12868
+ function _unsupportedIterableToArray$4(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray$4(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray$4(o, minLen); }
12869
+ function _arrayLikeToArray$4(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
12828
12870
  var EraserTool = function () {
12829
12871
  function EraserTool(editor, mode) {
12830
12872
  _classCallCheck__default["default"](this, EraserTool);
@@ -12872,7 +12914,7 @@ var EraserTool = function () {
12872
12914
  var bondsResult = [];
12873
12915
  var preResult = [];
12874
12916
  if (selected && functionalGroups.size && selected.atoms) {
12875
- var _iterator = _createForOfIteratorHelper$5(selected.atoms),
12917
+ var _iterator = _createForOfIteratorHelper$4(selected.atoms),
12876
12918
  _step;
12877
12919
  try {
12878
12920
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
@@ -12881,7 +12923,7 @@ var EraserTool = function () {
12881
12923
  var atomId = ketcherCore.FunctionalGroup.atomsInFunctionalGroup(functionalGroups, atom);
12882
12924
  var atomFromStruct = atomId !== null && ((_struct$atoms$get = struct.atoms.get(atomId)) === null || _struct$atoms$get === void 0 ? void 0 : _struct$atoms$get.a);
12883
12925
  if (atomFromStruct) {
12884
- var _iterator2 = _createForOfIteratorHelper$5(atomFromStruct.sgs.values()),
12926
+ var _iterator2 = _createForOfIteratorHelper$4(atomFromStruct.sgs.values()),
12885
12927
  _step2;
12886
12928
  try {
12887
12929
  for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
@@ -12911,7 +12953,7 @@ var EraserTool = function () {
12911
12953
  }
12912
12954
  }
12913
12955
  if (selected && functionalGroups.size && selected.bonds) {
12914
- var _iterator3 = _createForOfIteratorHelper$5(selected.bonds),
12956
+ var _iterator3 = _createForOfIteratorHelper$4(selected.bonds),
12915
12957
  _step3;
12916
12958
  try {
12917
12959
  for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
@@ -12930,7 +12972,7 @@ var EraserTool = function () {
12930
12972
  }
12931
12973
  }
12932
12974
  if (atomsResult.length > 0) {
12933
- var _iterator4 = _createForOfIteratorHelper$5(atomsResult),
12975
+ var _iterator4 = _createForOfIteratorHelper$4(atomsResult),
12934
12976
  _step4;
12935
12977
  try {
12936
12978
  for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
@@ -12945,7 +12987,7 @@ var EraserTool = function () {
12945
12987
  }
12946
12988
  }
12947
12989
  if (bondsResult.length > 0) {
12948
- var _iterator5 = _createForOfIteratorHelper$5(bondsResult),
12990
+ var _iterator5 = _createForOfIteratorHelper$4(bondsResult),
12949
12991
  _step5;
12950
12992
  try {
12951
12993
  for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
@@ -13016,7 +13058,7 @@ var EraserTool = function () {
13016
13058
  }
13017
13059
  }
13018
13060
  if (atomResult.length) {
13019
- var _iterator6 = _createForOfIteratorHelper$5(atomResult),
13061
+ var _iterator6 = _createForOfIteratorHelper$4(atomResult),
13020
13062
  _step6;
13021
13063
  try {
13022
13064
  for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
@@ -13032,7 +13074,7 @@ var EraserTool = function () {
13032
13074
  _iterator6.f();
13033
13075
  }
13034
13076
  } else if (bondResult.length) {
13035
- var _iterator7 = _createForOfIteratorHelper$5(bondResult),
13077
+ var _iterator7 = _createForOfIteratorHelper$4(bondResult),
13036
13078
  _step7;
13037
13079
  try {
13038
13080
  for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {
@@ -13193,7 +13235,8 @@ function ownKeys$O(object, enumerableOnly) { var keys = Object.keys(object); if
13193
13235
  function _objectSpread$O(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$O(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$O(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
13194
13236
  var PasteTool = function () {
13195
13237
  function PasteTool(editor, struct) {
13196
- var _struct$functionalGro;
13238
+ var _struct$functionalGro,
13239
+ _this = this;
13197
13240
  _classCallCheck__default["default"](this, PasteTool);
13198
13241
  this.editor = editor;
13199
13242
  this.editor.selection(null);
@@ -13213,6 +13256,15 @@ var PasteTool = function () {
13213
13256
  pasteItems = _fromPaste2[1];
13214
13257
  this.action = action;
13215
13258
  this.editor.update(this.action, true);
13259
+ struct.sgroups.forEach(function (sgroup) {
13260
+ var countAttachmentPoint = ketcherCore.FunctionalGroup.getAttachmentPointCount(sgroup, _this.editor.render.ctab.molecule);
13261
+ if (countAttachmentPoint > 1) {
13262
+ action.mergeWith(ketcherCore.setExpandSGroup(_this.editor.render.ctab, sgroup.id, {
13263
+ expanded: true
13264
+ }));
13265
+ }
13266
+ });
13267
+ this.editor.update(this.action, true);
13216
13268
  this.findItems = ['functionalGroups'];
13217
13269
  this.mergeItems = ketcherCore.getItemsToFuse(this.editor, pasteItems);
13218
13270
  this.editor.hover(ketcherCore.getHoverToFuse(this.mergeItems), this);
@@ -13246,6 +13298,7 @@ var PasteTool = function () {
13246
13298
  }, {
13247
13299
  key: "mousemove",
13248
13300
  value: function mousemove(event) {
13301
+ var _this2 = this;
13249
13302
  if (this.action) {
13250
13303
  var _this$action2;
13251
13304
  (_this$action2 = this.action) === null || _this$action2 === void 0 ? void 0 : _this$action2.perform(this.editor.render.ctab);
@@ -13276,6 +13329,12 @@ var PasteTool = function () {
13276
13329
  this.dragCtx.action = action;
13277
13330
  this.editor.update(this.dragCtx.action, true);
13278
13331
  } else {
13332
+ this.struct.sgroups.forEach(function (sgroup) {
13333
+ var countAttachmentPoint = ketcherCore.FunctionalGroup.getAttachmentPointCount(sgroup, _this2.struct);
13334
+ if (countAttachmentPoint > 1) {
13335
+ sgroup.setAttr('expanded', true);
13336
+ }
13337
+ });
13279
13338
  var _fromPaste5 = ketcherCore.fromPaste(this.editor.render.ctab, this.struct, this.editor.render.page2obj(event)),
13280
13339
  _fromPaste6 = _slicedToArray__default["default"](_fromPaste5, 2),
13281
13340
  _action = _fromPaste6[0],
@@ -13316,7 +13375,7 @@ var PasteTool = function () {
13316
13375
  var action = this.action;
13317
13376
  delete this.action;
13318
13377
  if (!this.isSingleContractedGroup || !this.mergeItems) {
13319
- this.editor.update(dropAndMerge(this.editor, this.mergeItems, action));
13378
+ this.editor.update(dropAndMerge(this.editor, this.mergeItems, action, true));
13320
13379
  }
13321
13380
  }
13322
13381
  }
@@ -13356,9 +13415,9 @@ function prepareTemplateFromSingleGroup(molecule) {
13356
13415
  return template;
13357
13416
  }
13358
13417
 
13359
- function _createForOfIteratorHelper$4(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray$4(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
13360
- function _unsupportedIterableToArray$4(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray$4(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray$4(o, minLen); }
13361
- function _arrayLikeToArray$4(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
13418
+ function _createForOfIteratorHelper$3(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray$3(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
13419
+ function _unsupportedIterableToArray$3(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray$3(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray$3(o, minLen); }
13420
+ function _arrayLikeToArray$3(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
13362
13421
  var RGroupAtomTool = function () {
13363
13422
  function RGroupAtomTool(editor) {
13364
13423
  _classCallCheck__default["default"](this, RGroupAtomTool);
@@ -13394,7 +13453,7 @@ var RGroupAtomTool = function () {
13394
13453
  }
13395
13454
  }
13396
13455
  if (atomResult.length > 0) {
13397
- var _iterator = _createForOfIteratorHelper$4(atomResult),
13456
+ var _iterator = _createForOfIteratorHelper$3(atomResult),
13398
13457
  _step;
13399
13458
  try {
13400
13459
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
@@ -13458,9 +13517,9 @@ function propsDialog$1(editor, id, pos) {
13458
13517
  });
13459
13518
  }
13460
13519
 
13461
- function _createForOfIteratorHelper$3(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray$3(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
13462
- function _unsupportedIterableToArray$3(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray$3(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray$3(o, minLen); }
13463
- function _arrayLikeToArray$3(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
13520
+ function _createForOfIteratorHelper$2(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray$2(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
13521
+ function _unsupportedIterableToArray$2(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray$2(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray$2(o, minLen); }
13522
+ function _arrayLikeToArray$2(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
13464
13523
  var RGroupFragmentTool = function () {
13465
13524
  function RGroupFragmentTool(editor) {
13466
13525
  _classCallCheck__default["default"](this, RGroupFragmentTool);
@@ -13497,7 +13556,7 @@ var RGroupFragmentTool = function () {
13497
13556
  }
13498
13557
  }
13499
13558
  if (atomResult.length > 0) {
13500
- var _iterator = _createForOfIteratorHelper$3(atomResult),
13559
+ var _iterator = _createForOfIteratorHelper$2(atomResult),
13501
13560
  _step;
13502
13561
  try {
13503
13562
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
@@ -13517,7 +13576,7 @@ var RGroupFragmentTool = function () {
13517
13576
  });
13518
13577
  return;
13519
13578
  } else if (bondResult.length > 0) {
13520
- var _iterator2 = _createForOfIteratorHelper$3(bondResult),
13579
+ var _iterator2 = _createForOfIteratorHelper$2(bondResult),
13521
13580
  _step2;
13522
13581
  try {
13523
13582
  for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
@@ -14706,9 +14765,6 @@ var tools = {
14706
14765
  text: TextTool
14707
14766
  };
14708
14767
 
14709
- function _createForOfIteratorHelper$2(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray$2(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
14710
- function _unsupportedIterableToArray$2(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray$2(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray$2(o, minLen); }
14711
- function _arrayLikeToArray$2(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
14712
14768
  function ownKeys$M(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
14713
14769
  function _objectSpread$M(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$M(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$M(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
14714
14770
  function handleHotkeyOverItem(props) {
@@ -14727,18 +14783,44 @@ function handleOtherActions(_ref) {
14727
14783
  newAction = _ref.newAction;
14728
14784
  dispatch(onAction(newAction));
14729
14785
  }
14730
- function handleEraser(_ref2) {
14786
+ function eraseItem(_ref2) {
14731
14787
  var editor = _ref2.editor,
14732
- hoveredItem = _ref2.hoveredItem;
14733
- var action = ketcherCore.fromFragmentDeletion(editor.render.ctab, mapItemsToArrays(hoveredItem));
14788
+ item = _ref2.item;
14789
+ var action = ketcherCore.fromFragmentDeletion(editor.render.ctab, item);
14734
14790
  editor.update(action);
14735
14791
  editor.hover(null);
14736
14792
  }
14737
- function handleDialog(_ref3) {
14738
- var hoveredItem = _ref3.hoveredItem,
14793
+ function handleEraser(_ref3) {
14794
+ var editor = _ref3.editor,
14795
+ hoveredItem = _ref3.hoveredItem,
14739
14796
  newAction = _ref3.newAction,
14740
- editor = _ref3.editor,
14741
14797
  dispatch = _ref3.dispatch;
14798
+ var item = mapItemsToArrays(hoveredItem);
14799
+ var itemType = Object.keys(hoveredItem)[0];
14800
+ if ([STRUCT_TYPE.atoms, STRUCT_TYPE.bonds].includes(itemType)) {
14801
+ isFunctionalGroupChange({
14802
+ editor: editor,
14803
+ hoveredItemId: item[itemType][0],
14804
+ newAction: newAction,
14805
+ dispatch: dispatch
14806
+ }, itemType).then(function (res) {
14807
+ res && eraseItem({
14808
+ editor: editor,
14809
+ item: item
14810
+ });
14811
+ });
14812
+ return;
14813
+ }
14814
+ eraseItem({
14815
+ editor: editor,
14816
+ item: item
14817
+ });
14818
+ }
14819
+ function handleDialog(_ref4) {
14820
+ var hoveredItem = _ref4.hoveredItem,
14821
+ newAction = _ref4.newAction,
14822
+ editor = _ref4.editor,
14823
+ dispatch = _ref4.dispatch;
14742
14824
  var dialogType = Object.keys(hoveredItem)[0];
14743
14825
  var dialogHandler = getDialogHandler(dialogType);
14744
14826
  var hoveredItemId = hoveredItem[dialogType];
@@ -14764,11 +14846,11 @@ function getDialogHandler(itemType) {
14764
14846
  var dialog = dialogs[itemType];
14765
14847
  return dialog;
14766
14848
  }
14767
- function handleAtomPropsDialog(_ref4) {
14768
- var hoveredItemId = _ref4.hoveredItemId,
14769
- newAction = _ref4.newAction,
14770
- editor = _ref4.editor,
14771
- dispatch = _ref4.dispatch;
14849
+ function handleAtomPropsDialog(_ref5) {
14850
+ var hoveredItemId = _ref5.hoveredItemId,
14851
+ newAction = _ref5.newAction,
14852
+ editor = _ref5.editor,
14853
+ dispatch = _ref5.dispatch;
14772
14854
  var selection = editor.selection();
14773
14855
  var atomsSelected = selection === null || selection === void 0 ? void 0 : selection.atoms;
14774
14856
  var restruct = editor.render.ctab;
@@ -14791,11 +14873,11 @@ function handleAtomPropsDialog(_ref4) {
14791
14873
  });
14792
14874
  }
14793
14875
  }
14794
- function handleBondPropsDialog(_ref5) {
14795
- var hoveredItemId = _ref5.hoveredItemId,
14796
- newAction = _ref5.newAction,
14797
- editor = _ref5.editor,
14798
- dispatch = _ref5.dispatch;
14876
+ function handleBondPropsDialog(_ref6) {
14877
+ var hoveredItemId = _ref6.hoveredItemId,
14878
+ newAction = _ref6.newAction,
14879
+ editor = _ref6.editor,
14880
+ dispatch = _ref6.dispatch;
14799
14881
  var restruct = editor.render.ctab;
14800
14882
  var bondFromStruct = restruct.bonds.get(hoveredItemId);
14801
14883
  var convertedBondForModal = fromBond(bondFromStruct === null || bondFromStruct === void 0 ? void 0 : bondFromStruct.b);
@@ -14806,11 +14888,11 @@ function handleBondPropsDialog(_ref5) {
14806
14888
  return null;
14807
14889
  });
14808
14890
  }
14809
- function handleTool(_ref6) {
14810
- var hoveredItem = _ref6.hoveredItem,
14811
- newAction = _ref6.newAction,
14812
- editor = _ref6.editor,
14813
- dispatch = _ref6.dispatch;
14891
+ function handleTool(_ref7) {
14892
+ var hoveredItem = _ref7.hoveredItem,
14893
+ newAction = _ref7.newAction,
14894
+ editor = _ref7.editor,
14895
+ dispatch = _ref7.dispatch;
14814
14896
  var _loop = function _loop(item) {
14815
14897
  var toolHandler = getToolHandler(item, newAction.tool);
14816
14898
  var isChangeStructureTool = newAction.tool !== 'hand';
@@ -14822,7 +14904,7 @@ function handleTool(_ref6) {
14822
14904
  newAction: newAction,
14823
14905
  dispatch: dispatch
14824
14906
  };
14825
- isFunctionalGroupChange(props).then(function (result) {
14907
+ isFunctionalGroupChange(props, item).then(function (result) {
14826
14908
  if (!result && isChangeStructureTool) return;
14827
14909
  toolHandler(props);
14828
14910
  });
@@ -14832,17 +14914,17 @@ function handleTool(_ref6) {
14832
14914
  _loop(item);
14833
14915
  }
14834
14916
  }
14835
- function isFunctionalGroupChange(_x) {
14917
+ function isFunctionalGroupChange(_x, _x2) {
14836
14918
  return _isFunctionalGroupChange.apply(this, arguments);
14837
14919
  }
14838
14920
  function _isFunctionalGroupChange() {
14839
- _isFunctionalGroupChange = _asyncToGenerator__default["default"]( _regeneratorRuntime__default["default"].mark(function _callee(props) {
14921
+ _isFunctionalGroupChange = _asyncToGenerator__default["default"]( _regeneratorRuntime__default["default"].mark(function _callee(props, type) {
14840
14922
  return _regeneratorRuntime__default["default"].wrap(function _callee$(_context) {
14841
14923
  while (1) {
14842
14924
  switch (_context.prev = _context.next) {
14843
14925
  case 0:
14844
14926
  _context.next = 2;
14845
- return isChangingFunctionalGroup(props);
14927
+ return isChangingFunctionalGroup(props, type);
14846
14928
  case 2:
14847
14929
  return _context.abrupt("return", _context.sent);
14848
14930
  case 3:
@@ -14870,13 +14952,13 @@ function getToolHandler(itemType) {
14870
14952
  rgroupatom: function rgroupatom(props) {
14871
14953
  return handleRGroupAtomTool(props);
14872
14954
  },
14873
- sgroup: function sgroup(_ref7) {
14874
- var editor = _ref7.editor,
14875
- hoveredItemId = _ref7.hoveredItemId;
14955
+ sgroup: function sgroup(_ref8) {
14956
+ var editor = _ref8.editor,
14957
+ hoveredItemId = _ref8.hoveredItemId;
14876
14958
  tools.sgroup.sgroupDialog(editor, hoveredItemId);
14877
14959
  },
14878
- hand: function hand(_ref8) {
14879
- var dispatch = _ref8.dispatch;
14960
+ hand: function hand(_ref9) {
14961
+ var dispatch = _ref9.dispatch;
14880
14962
  return dispatch(onAction({
14881
14963
  tool: 'hand'
14882
14964
  }));
@@ -14890,28 +14972,28 @@ function getToolHandler(itemType) {
14890
14972
  }
14891
14973
  return items._default[toolName];
14892
14974
  }
14893
- function handleAtomTool(_ref9) {
14894
- var hoveredItemId = _ref9.hoveredItemId,
14895
- newAction = _ref9.newAction,
14896
- editor = _ref9.editor;
14975
+ function handleAtomTool(_ref10) {
14976
+ var hoveredItemId = _ref10.hoveredItemId,
14977
+ newAction = _ref10.newAction,
14978
+ editor = _ref10.editor;
14897
14979
  var atomProps = _objectSpread$M({}, newAction.opts);
14898
14980
  var updatedAtoms = ketcherCore.fromAtomsAttrs(editor.render.ctab, hoveredItemId, atomProps, true);
14899
14981
  editor.update(updatedAtoms);
14900
14982
  }
14901
- function handleBondTool(_ref10) {
14902
- var hoveredItemId = _ref10.hoveredItemId,
14903
- newAction = _ref10.newAction,
14904
- editor = _ref10.editor;
14983
+ function handleBondTool(_ref11) {
14984
+ var hoveredItemId = _ref11.hoveredItemId,
14985
+ newAction = _ref11.newAction,
14986
+ editor = _ref11.editor;
14905
14987
  var newBond = ketcherCore.fromBondAddition(editor.render.ctab, newAction.opts, hoveredItemId, {
14906
14988
  label: 'C'
14907
14989
  })[0];
14908
14990
  editor.update(newBond);
14909
14991
  }
14910
- function handleChargeTool(_ref11) {
14992
+ function handleChargeTool(_ref12) {
14911
14993
  var _editor$render$ctab$a;
14912
- var hoveredItemId = _ref11.hoveredItemId,
14913
- newAction = _ref11.newAction,
14914
- editor = _ref11.editor;
14994
+ var hoveredItemId = _ref12.hoveredItemId,
14995
+ newAction = _ref12.newAction,
14996
+ editor = _ref12.editor;
14915
14997
  var existingAtom = (_editor$render$ctab$a = editor.render.ctab.atoms.get(hoveredItemId)) === null || _editor$render$ctab$a === void 0 ? void 0 : _editor$render$ctab$a.a;
14916
14998
  if (existingAtom) {
14917
14999
  var updatedAtom = ketcherCore.fromAtomsAttrs(editor.render.ctab, hoveredItemId, {
@@ -14927,17 +15009,17 @@ function mapItemsToArrays(items) {
14927
15009
  }
14928
15010
  return mappedItems;
14929
15011
  }
14930
- function handleRGroupAtomTool(_x2) {
15012
+ function handleRGroupAtomTool(_x3) {
14931
15013
  return _handleRGroupAtomTool.apply(this, arguments);
14932
15014
  }
14933
15015
  function _handleRGroupAtomTool() {
14934
- _handleRGroupAtomTool = _asyncToGenerator__default["default"]( _regeneratorRuntime__default["default"].mark(function _callee2(_ref12) {
15016
+ _handleRGroupAtomTool = _asyncToGenerator__default["default"]( _regeneratorRuntime__default["default"].mark(function _callee2(_ref13) {
14935
15017
  var hoveredItemId, editor, struct, atom, rglabel, label, element;
14936
15018
  return _regeneratorRuntime__default["default"].wrap(function _callee2$(_context2) {
14937
15019
  while (1) {
14938
15020
  switch (_context2.prev = _context2.next) {
14939
15021
  case 0:
14940
- hoveredItemId = _ref12.hoveredItemId, editor = _ref12.editor;
15022
+ hoveredItemId = _ref13.hoveredItemId, editor = _ref13.editor;
14941
15023
  struct = editor.render.ctab.molecule;
14942
15024
  atom = hoveredItemId || hoveredItemId === 0 ? struct.atoms.get(hoveredItemId) : null;
14943
15025
  rglabel = atom ? atom.rglabel : 0;
@@ -14974,64 +15056,36 @@ function _handleRGroupAtomTool() {
14974
15056
  }));
14975
15057
  return _handleRGroupAtomTool.apply(this, arguments);
14976
15058
  }
14977
- function isChangingFunctionalGroup(_x3) {
15059
+ function getFunctionalGroupIdByItem(editor, hoveredItemId, type) {
15060
+ var molecule = editor.render.ctab.molecule;
15061
+ var functionalGroups = molecule.functionalGroups;
15062
+ return type === 'atoms' ? ketcherCore.FunctionalGroup.findFunctionalGroupByAtom(functionalGroups, hoveredItemId) : ketcherCore.FunctionalGroup.findFunctionalGroupByBond(molecule, functionalGroups, hoveredItemId);
15063
+ }
15064
+ function isChangingFunctionalGroup(_x4, _x5) {
14978
15065
  return _isChangingFunctionalGroup.apply(this, arguments);
14979
15066
  }
14980
15067
  function _isChangingFunctionalGroup() {
14981
- _isChangingFunctionalGroup = _asyncToGenerator__default["default"]( _regeneratorRuntime__default["default"].mark(function _callee3(_ref13) {
14982
- var _editor$render$ctab$a2;
14983
- var hoveredItemId, editor, atomResult, result, atom, molecule, functionalGroups, sgroupsOnCanvas, atomId, isFunctionalGroup, _iterator, _step, id, fgId;
15068
+ _isChangingFunctionalGroup = _asyncToGenerator__default["default"]( _regeneratorRuntime__default["default"].mark(function _callee3(_ref14, type) {
15069
+ var hoveredItemId, editor, fgId;
14984
15070
  return _regeneratorRuntime__default["default"].wrap(function _callee3$(_context3) {
14985
15071
  while (1) {
14986
15072
  switch (_context3.prev = _context3.next) {
14987
15073
  case 0:
14988
- hoveredItemId = _ref13.hoveredItemId, editor = _ref13.editor;
14989
- atomResult = [];
14990
- result = [];
14991
- atom = (_editor$render$ctab$a2 = editor.render.ctab.atoms.get(hoveredItemId)) === null || _editor$render$ctab$a2 === void 0 ? void 0 : _editor$render$ctab$a2.a;
14992
- molecule = editor.render.ctab.molecule;
14993
- functionalGroups = molecule.functionalGroups;
14994
- sgroupsOnCanvas = Array.from(molecule.sgroups.values());
14995
- if (atom && functionalGroups) {
14996
- atomId = ketcherCore.FunctionalGroup.atomsInFunctionalGroup(functionalGroups, hoveredItemId);
14997
- if (atomId !== null) {
14998
- atomResult.push(atomId);
14999
- }
15000
- }
15001
- isFunctionalGroup = atomResult.length > 0;
15002
- if (!isFunctionalGroup) {
15003
- _context3.next = 17;
15004
- break;
15005
- }
15006
- if (!ketcherCore.SGroup.isAtomInSaltOrSolvent(hoveredItemId, sgroupsOnCanvas)) {
15007
- _context3.next = 12;
15074
+ hoveredItemId = _ref14.hoveredItemId, editor = _ref14.editor;
15075
+ fgId = getFunctionalGroupIdByItem(editor, hoveredItemId, type);
15076
+ if (!(fgId !== null)) {
15077
+ _context3.next = 6;
15008
15078
  break;
15009
15079
  }
15010
- return _context3.abrupt("return", false);
15011
- case 12:
15012
- _iterator = _createForOfIteratorHelper$2(atomResult);
15013
- try {
15014
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
15015
- id = _step.value;
15016
- fgId = ketcherCore.FunctionalGroup.findFunctionalGroupByAtom(functionalGroups, id);
15017
- if (fgId !== null && !result.includes(fgId)) {
15018
- result.push(fgId);
15019
- }
15020
- }
15021
- } catch (err) {
15022
- _iterator.e(err);
15023
- } finally {
15024
- _iterator.f();
15025
- }
15026
- _context3.next = 16;
15080
+ _context3.next = 5;
15027
15081
  return editor.event.removeFG.dispatch({
15028
- fgIds: result
15082
+ fgIds: [fgId]
15029
15083
  });
15030
- case 16:
15031
- return _context3.abrupt("return", _context3.sent);
15032
- case 17:
15084
+ case 5:
15085
+ return _context3.abrupt("return", false);
15086
+ case 6:
15033
15087
  return _context3.abrupt("return", true);
15034
- case 18:
15088
+ case 7:
15035
15089
  case "end":
15036
15090
  return _context3.stop();
15037
15091
  }
@@ -15052,11 +15106,7 @@ function initKeydownListener(element) {
15052
15106
  function removeNotRenderedStruct(actionTool, group, dispatch) {
15053
15107
  var affectedTools = ['paste', 'template'];
15054
15108
  if (affectedTools.includes(actionTool.tool) && group !== null && group !== void 0 && group.includes('save')) {
15055
- var savedSelectedTool = SettingsManager.selectionTool;
15056
- dispatch({
15057
- type: 'ACTION',
15058
- action: savedSelectedTool || tools$1['select-rectangle'].action
15059
- });
15109
+ dispatch(removeStructAction());
15060
15110
  }
15061
15111
  }
15062
15112
  function keyHandle(dispatch, state, hotKeys, event) {
@@ -15722,7 +15772,7 @@ function findClosestFG(restruct, pos, skip) {
15722
15772
  reSGroupId = _step$value[0],
15723
15773
  reSGroup = _step$value[1];
15724
15774
  if (reSGroupId === skipId) continue;
15725
- var _reSGroup$getTextHigh = reSGroup.getTextHighlightDimensions(),
15775
+ var _reSGroup$getTextHigh = reSGroup.getTextHighlightDimensions(0, restruct.render),
15726
15776
  startX = _reSGroup$getTextHigh.startX,
15727
15777
  startY = _reSGroup$getTextHigh.startY,
15728
15778
  width = _reSGroup$getTextHigh.width,
@@ -17194,7 +17244,16 @@ var useFunctionalGroupEoc = function useFunctionalGroupEoc() {
17194
17244
  return toExpand ? functionalGroup.isExpanded : !functionalGroup.isExpanded;
17195
17245
  }));
17196
17246
  }, []);
17197
- return [handler, hidden];
17247
+ var disabled = React.useCallback(function (_ref3) {
17248
+ var _props$functionalGrou2;
17249
+ var props = _ref3.props;
17250
+ var editor = getKetcherInstance().editor;
17251
+ var molecule = editor.render.ctab.molecule;
17252
+ return Boolean(props === null || props === void 0 ? void 0 : (_props$functionalGrou2 = props.functionalGroups) === null || _props$functionalGrou2 === void 0 ? void 0 : _props$functionalGrou2.every(function (functionalGroup) {
17253
+ return ketcherCore.FunctionalGroup.getAttachmentPointCount(functionalGroup === null || functionalGroup === void 0 ? void 0 : functionalGroup.relatedSGroup, molecule) > 1;
17254
+ }));
17255
+ }, []);
17256
+ return [handler, hidden, disabled];
17198
17257
  };
17199
17258
 
17200
17259
  var useFunctionalGroupRemove = function useFunctionalGroupRemove() {
@@ -17222,12 +17281,16 @@ function ownKeys$G(object, enumerableOnly) { var keys = Object.keys(object); if
17222
17281
  function _objectSpread$G(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$G(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$G(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
17223
17282
  var FunctionalGroupMenuItems = function FunctionalGroupMenuItems(props) {
17224
17283
  var _useFunctionalGroupEo = useFunctionalGroupEoc(),
17225
- _useFunctionalGroupEo2 = _slicedToArray__default["default"](_useFunctionalGroupEo, 2),
17284
+ _useFunctionalGroupEo2 = _slicedToArray__default["default"](_useFunctionalGroupEo, 3),
17226
17285
  handleExpandOrContract = _useFunctionalGroupEo2[0],
17227
- ExpandOrContractHidden = _useFunctionalGroupEo2[1];
17286
+ ExpandOrContractHidden = _useFunctionalGroupEo2[1],
17287
+ ExpandOrContractDisabled = _useFunctionalGroupEo2[2];
17228
17288
  var handleRemove = useFunctionalGroupRemove();
17229
17289
  return jsxRuntime.jsxs(jsxRuntime.Fragment, {
17230
17290
  children: [jsxRuntime.jsx(reactContexify.Item, _objectSpread$G(_objectSpread$G({}, props), {}, {
17291
+ disabled: function disabled(params) {
17292
+ return ExpandOrContractDisabled(params);
17293
+ },
17231
17294
  hidden: function hidden(params) {
17232
17295
  return ExpandOrContractHidden(params, true);
17233
17296
  },
@@ -17236,6 +17299,9 @@ var FunctionalGroupMenuItems = function FunctionalGroupMenuItems(props) {
17236
17299
  },
17237
17300
  children: "Expand Abbreviation"
17238
17301
  })), jsxRuntime.jsx(reactContexify.Item, _objectSpread$G(_objectSpread$G({}, props), {}, {
17302
+ disabled: function disabled(params) {
17303
+ return ExpandOrContractDisabled(params);
17304
+ },
17239
17305
  hidden: function hidden(params) {
17240
17306
  return ExpandOrContractHidden(params, false);
17241
17307
  },
@@ -17747,6 +17813,7 @@ var InfoPanel = function InfoPanel(props) {
17747
17813
  autoScaleMargin: 0,
17748
17814
  rescaleAmount: 1,
17749
17815
  cachePrefix: 'infoPanel',
17816
+ needCache: false,
17750
17817
  viewSz: new ketcherCore.Vec2(width, height),
17751
17818
  width: width,
17752
17819
  height: height
@@ -24306,8 +24373,8 @@ var KetcherBuilder = function () {
24306
24373
  initApp(element, staticResourcesUrl, {
24307
24374
  buttons: buttons || {},
24308
24375
  errorHandler: errorHandler || null,
24309
- version: "2.10.0-rc.1" ,
24310
- buildDate: "2023-04-21T11:09:47" ,
24376
+ version: "2.10.0-rc.2" ,
24377
+ buildDate: "2023-05-03T14:52:11" ,
24311
24378
  buildNumber: ''
24312
24379
  }, structService, resolve);
24313
24380
  });
@@ -24421,4 +24488,5 @@ exports.Editor = Editor;
24421
24488
  exports.KETCHER_INIT_EVENT_NAME = KETCHER_INIT_EVENT_NAME;
24422
24489
  exports.KETCHER_SAVED_SETTINGS_KEY = KETCHER_SAVED_SETTINGS_KEY;
24423
24490
  exports.MODES = MODES;
24491
+ exports.STRUCT_TYPE = STRUCT_TYPE;
24424
24492
  //# sourceMappingURL=index.js.map