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.
@@ -24,7 +24,7 @@ import _asyncToGenerator from '@babel/runtime/helpers/asyncToGenerator';
24
24
  import _regeneratorRuntime from '@babel/runtime/regenerator';
25
25
  import _classCallCheck from '@babel/runtime/helpers/classCallCheck';
26
26
  import _createClass from '@babel/runtime/helpers/createClass';
27
- import { KetSerializer, MolSerializer, Ketcher, FormatterFactory, StereLabelStyleType, StereoColoringType, ShowHydrogenLabels, Bond as Bond$2, Elements, AtomList, StereoLabel, isAttachmentBond, Atom as Atom$2, findStereoAtoms, RxnArrowMode, SimpleObjectMode, SGroup as SGroup$1, Pile, getStereoAtomsMap, identifyStructFormat, SupportedFormat, ChemicalMimeType, SdfSerializer, Render, FunctionalGroup, FunctionalGroupsProvider, SaltsAndSolventsProvider, KetcherAsyncEvents, ElementColor, fromAtomsAttrs, fracAngle, Vec2, Action, fromSgroupDeletion, fromFragmentDeletion, fromAtomAddition, fromBondAddition, fromOneBondDeletion, bondChangingAction, fromBondsAttrs, fromChain, getItemsToFuse, getHoverToFuse, fromItemsFuse, fromStereoFlagUpdate, Scale, checkOverlapping, fromSeveralSgroupAddition, SgContexts, fromSgroupAction, mergeMapOfItemsToSet, setExpandSGroup, fromSimpleObjectResizing, fromArrowResizing, fromMultipleMove, fromTextDeletion, fromTextUpdating, isCloseToEdgeOfCanvas, isCloseToEdgeOfScreen, getDirections, shiftAndExtendCanvasByVector, scrollByVector, fromOneAtomDeletion, fromArrowDeletion, fromPlusDeletion, fromSimpleObjectDeletion, fromPaste, fromTemplateOnAtom, RGroup as RGroup$2, fromRGroupFragment, fromUpdateIfThen, fromRGroupAttrs, fromArrowAddition, fromPlusAddition, fromRotate, fromFlip, fromBondAlign, fromSimpleObjectAddition, fromTemplateOnBondAction, fromTemplateOnCanvas, fromTextCreation, formatProperties, Fragment as Fragment$1, OperationType, fromHighlightCreate, fromHighlightClear, fromNewCanvas, Struct, fromDescriptorsAlign, getPropertiesByFormat, StereoFlag, getPropertiesByImgFormat, b64toBlob, Generics, TextCommand, DefaultStructServiceOptions } from 'ketcher-core';
27
+ import { KetSerializer, MolSerializer, Ketcher, FormatterFactory, StereLabelStyleType, StereoColoringType, ShowHydrogenLabels, Bond as Bond$2, Elements, AtomList, StereoLabel, isAttachmentBond, Atom as Atom$2, findStereoAtoms, RxnArrowMode, SimpleObjectMode, SGroup as SGroup$1, Pile, getStereoAtomsMap, identifyStructFormat, SupportedFormat, ChemicalMimeType, SdfSerializer, Render, Struct, FunctionalGroupsProvider, SaltsAndSolventsProvider, KetcherAsyncEvents, ElementColor, FunctionalGroup, fromAtomsAttrs, fracAngle, Vec2, Action, fromSgroupDeletion, fromFragmentDeletion, fromAtomAddition, fromBondAddition, fromOneBondDeletion, bondChangingAction, fromBondsAttrs, fromChain, getItemsToFuse, getHoverToFuse, fromItemsFuse, fromStereoFlagUpdate, Scale, checkOverlapping, fromSeveralSgroupAddition, SgContexts, fromSgroupAction, mergeMapOfItemsToSet, setExpandSGroup, fromSimpleObjectResizing, fromArrowResizing, fromMultipleMove, fromTextDeletion, fromTextUpdating, isCloseToEdgeOfCanvas, isCloseToEdgeOfScreen, getDirections, shiftAndExtendCanvasByVector, scrollByVector, fromOneAtomDeletion, fromArrowDeletion, fromPlusDeletion, fromSimpleObjectDeletion, fromPaste, fromTemplateOnAtom, RGroup as RGroup$2, fromRGroupFragment, fromUpdateIfThen, fromRGroupAttrs, fromArrowAddition, fromPlusAddition, fromRotate, fromFlip, fromBondAlign, fromSimpleObjectAddition, fromTemplateOnBondAction, fromTemplateOnCanvas, fromTextCreation, formatProperties, Fragment as Fragment$1, OperationType, fromHighlightCreate, fromHighlightClear, fromNewCanvas, fromDescriptorsAlign, getPropertiesByFormat, StereoFlag, getPropertiesByImgFormat, b64toBlob, Generics, TextCommand, DefaultStructServiceOptions } from 'ketcher-core';
28
28
  import * as React from 'react';
29
29
  import React__default, { createRef, Component, useState, useEffect, useRef, useMemo, createElement, forwardRef, useCallback, useLayoutEffect, Fragment as Fragment$2, PureComponent } from 'react';
30
30
  import _objectWithoutProperties from '@babel/runtime/helpers/objectWithoutProperties';
@@ -1932,9 +1932,9 @@ function toSgroup(sgroup) {
1932
1932
  };
1933
1933
  }
1934
1934
 
1935
- 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; } } }; }
1936
- 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); }
1937
- 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; }
1935
+ 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; } } }; }
1936
+ 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); }
1937
+ 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; }
1938
1938
  function isFlipDisabled(editor) {
1939
1939
  var selection = editor.selection();
1940
1940
  var restruct = editor.render.ctab;
@@ -1947,13 +1947,13 @@ function isFlipDisabled(editor) {
1947
1947
  atoms = _selection$atoms === void 0 ? [] : _selection$atoms;
1948
1948
  var getBondIdsForAttachmentAtoms = function getBondIdsForAttachmentAtoms() {
1949
1949
  var result = [];
1950
- var _iterator = _createForOfIteratorHelper$e(atoms),
1950
+ var _iterator = _createForOfIteratorHelper$d(atoms),
1951
1951
  _step;
1952
1952
  try {
1953
1953
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
1954
1954
  var atomId = _step.value;
1955
1955
  var atomBondIds = Atom$2.getConnectedBondIds(restruct.molecule, atomId);
1956
- var _iterator2 = _createForOfIteratorHelper$e(atomBondIds),
1956
+ var _iterator2 = _createForOfIteratorHelper$d(atomBondIds),
1957
1957
  _step2;
1958
1958
  try {
1959
1959
  for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
@@ -1979,7 +1979,7 @@ function isFlipDisabled(editor) {
1979
1979
  var getAmountOfAttachmentBonds = function getAmountOfAttachmentBonds() {
1980
1980
  var amountOfAttachmentBonds = 0;
1981
1981
  var totalBondIds = new Set([].concat(_toConsumableArray(bonds), _toConsumableArray(getBondIdsForAttachmentAtoms())));
1982
- var _iterator3 = _createForOfIteratorHelper$e(totalBondIds),
1982
+ var _iterator3 = _createForOfIteratorHelper$d(totalBondIds),
1983
1983
  _step3;
1984
1984
  try {
1985
1985
  for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
@@ -2469,6 +2469,10 @@ var KETCHER_SAVED_SETTINGS_KEY = 'ketcher_editor_saved_settings';
2469
2469
  var MODES = {
2470
2470
  FG: 'fg'
2471
2471
  };
2472
+ var STRUCT_TYPE = {
2473
+ atoms: 'atoms',
2474
+ bonds: 'bonds'
2475
+ };
2472
2476
 
2473
2477
  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; }
2474
2478
  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(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; }
@@ -2549,10 +2553,14 @@ function parseStruct(struct, server, options) {
2549
2553
  return Promise.resolve(struct);
2550
2554
  }
2551
2555
  }
2556
+ function removeStructAction() {
2557
+ var savedSelectedTool = SettingsManager.selectionTool;
2558
+ return onAction(savedSelectedTool || tools$1['select-rectangle'].action);
2559
+ }
2552
2560
  function load(struct, options) {
2553
2561
  return function () {
2554
2562
  var _ref = _asyncToGenerator( _regeneratorRuntime.mark(function _callee(dispatch, getState) {
2555
- var state, editor, server, errorHandler, parsedStruct, _options2, fragment, hasUnsupportedGroups, oldStruct, stereAtomsMap, savedSelectedTool;
2563
+ var state, editor, server, errorHandler, parsedStruct, _options2, fragment, hasUnsupportedGroups, oldStruct, stereAtomsMap;
2556
2564
  return _regeneratorRuntime.wrap(function _callee$(_context) {
2557
2565
  while (1) {
2558
2566
  switch (_context.prev = _context.next) {
@@ -2617,11 +2625,7 @@ function load(struct, options) {
2617
2625
  parsedStruct.markFragments();
2618
2626
  if (fragment) {
2619
2627
  if (parsedStruct.isBlank()) {
2620
- savedSelectedTool = SettingsManager.selectionTool;
2621
- dispatch({
2622
- type: 'ACTION',
2623
- action: savedSelectedTool || tools$1['select-rectangle'].action
2624
- });
2628
+ dispatch(removeStructAction());
2625
2629
  } else {
2626
2630
  dispatch(onAction({
2627
2631
  tool: 'paste',
@@ -3003,7 +3007,7 @@ var zoom = {
3003
3007
 
3004
3008
  var openHelpLink = function openHelpLink() {
3005
3009
  var _window$open;
3006
- 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();
3010
+ 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();
3007
3011
  };
3008
3012
  var help = {
3009
3013
  help: {
@@ -7880,9 +7884,11 @@ var RenderStruct = function () {
7880
7884
  var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
7881
7885
  if (el && struct) {
7882
7886
  var _options$cachePrefix = options.cachePrefix,
7883
- cachePrefix = _options$cachePrefix === void 0 ? '' : _options$cachePrefix;
7887
+ cachePrefix = _options$cachePrefix === void 0 ? '' : _options$cachePrefix,
7888
+ _options$needCache = options.needCache,
7889
+ needCache = _options$needCache === void 0 ? true : _options$needCache;
7884
7890
  var cacheKey = "".concat(cachePrefix).concat(struct.name);
7885
- if (renderCache.has(cacheKey)) {
7891
+ if (renderCache.has(cacheKey) && needCache) {
7886
7892
  el.innerHTML = renderCache.get(cacheKey);
7887
7893
  return;
7888
7894
  }
@@ -7896,7 +7902,9 @@ var RenderStruct = function () {
7896
7902
  }, options));
7897
7903
  rnd.setMolecule(preparedStruct);
7898
7904
  rnd.update(true, options.viewSz);
7899
- renderCache.set(cacheKey, rnd.clientArea.innerHTML);
7905
+ if (needCache) {
7906
+ renderCache.set(cacheKey, rnd.clientArea.innerHTML);
7907
+ }
7900
7908
  }
7901
7909
  }
7902
7910
  }]);
@@ -8023,6 +8031,26 @@ function memoizedDebounce(func) {
8023
8031
 
8024
8032
  var showTooltipTimer = null;
8025
8033
  var TOOLTIP_DELAY = 300;
8034
+ function makeStruct(editor, sGroup) {
8035
+ var existingStruct = editor.struct();
8036
+ var struct = new Struct();
8037
+ var atomsIdMapping = new Map();
8038
+ sGroup.atoms.forEach(function (atomId) {
8039
+ var atomIdInTooltip = struct.atoms.add(existingStruct.atoms.get(atomId));
8040
+ atomsIdMapping.set(atomId, atomIdInTooltip);
8041
+ });
8042
+ Array.from(existingStruct.bonds).forEach(function (value) {
8043
+ var _value = _slicedToArray(value, 2);
8044
+ _value[0];
8045
+ var bond = _value[1];
8046
+ var clonedBond = bond.clone(atomsIdMapping);
8047
+ var isInsideSGroup = sGroup.atoms.includes(bond.begin) || sGroup.atoms.includes(bond.end);
8048
+ if (isInsideSGroup) {
8049
+ struct.bonds.add(clonedBond);
8050
+ }
8051
+ });
8052
+ return struct;
8053
+ }
8026
8054
  function showTooltip(editor, infoPanelData) {
8027
8055
  editor.event.showInfo.dispatch(null);
8028
8056
  if (showTooltipTimer) {
@@ -8043,7 +8071,8 @@ function showFunctionalGroupsTooltip(editor) {
8043
8071
  var sGroup = (_editor$struct = editor.struct()) === null || _editor$struct === void 0 ? void 0 : _editor$struct.sgroups.get(closestCollapsibleStructures.id);
8044
8072
  if (sGroup && !sGroup.data.expanded && sGroup.hovering) {
8045
8073
  var groupName = sGroup.data.name;
8046
- var groupStruct = FunctionalGroup.getFunctionalGroupByName(groupName);
8074
+ var groupStruct = makeStruct(editor, sGroup);
8075
+ groupStruct.name = groupName;
8047
8076
  infoPanelData = {
8048
8077
  groupStruct: groupStruct,
8049
8078
  event: event,
@@ -10039,7 +10068,8 @@ var mapDispatchToProps$e = function mapDispatchToProps(dispatch) {
10039
10068
  return dispatchAction('open');
10040
10069
  },
10041
10070
  onSave: function onSave() {
10042
- return dispatchAction('save');
10071
+ dispatch(removeStructAction());
10072
+ dispatchAction('save');
10043
10073
  },
10044
10074
  onUndo: function onUndo() {
10045
10075
  return dispatchAction('undo');
@@ -10189,9 +10219,9 @@ function lookup(map, event) {
10189
10219
  }
10190
10220
  keyNorm.lookup = lookup;
10191
10221
 
10192
- 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; } } }; }
10193
- 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); }
10194
- 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; }
10222
+ 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; } } }; }
10223
+ 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); }
10224
+ 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; }
10195
10225
  var APointTool = function () {
10196
10226
  function APointTool(editor) {
10197
10227
  _classCallCheck(this, APointTool);
@@ -10227,7 +10257,7 @@ var APointTool = function () {
10227
10257
  }
10228
10258
  }
10229
10259
  if (atomResult.length > 0) {
10230
- var _iterator = _createForOfIteratorHelper$d(atomResult),
10260
+ var _iterator = _createForOfIteratorHelper$c(atomResult),
10231
10261
  _step;
10232
10262
  try {
10233
10263
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
@@ -10338,9 +10368,9 @@ var utils = {
10338
10368
  getNonGroupItemsAndAttachmentPoints: getNonGroupItemsAndAttachmentPoints
10339
10369
  };
10340
10370
 
10341
- 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; } } }; }
10342
- 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); }
10343
- 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; }
10371
+ 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; } } }; }
10372
+ 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); }
10373
+ 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; }
10344
10374
  function _classPrivateFieldInitSpec$2(obj, privateMap, value) { _checkPrivateRedeclaration$2(obj, privateMap); privateMap.set(obj, value); }
10345
10375
  function _checkPrivateRedeclaration$2(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
10346
10376
  var _bondProps = new WeakMap();
@@ -10417,7 +10447,7 @@ var AtomTool = function () {
10417
10447
  if (atomId !== null) atomResult.push(atomId);
10418
10448
  }
10419
10449
  if (atomResult.length > 0) {
10420
- var _iterator = _createForOfIteratorHelper$c(atomResult),
10450
+ var _iterator = _createForOfIteratorHelper$b(atomResult),
10421
10451
  _step;
10422
10452
  try {
10423
10453
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
@@ -10489,7 +10519,7 @@ var AtomTool = function () {
10489
10519
  if (atomId !== null) atomResult.push(atomId);
10490
10520
  }
10491
10521
  if (atomResult.length > 0) {
10492
- var _iterator2 = _createForOfIteratorHelper$c(atomResult),
10522
+ var _iterator2 = _createForOfIteratorHelper$b(atomResult),
10493
10523
  _step2;
10494
10524
  try {
10495
10525
  for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
@@ -10558,9 +10588,9 @@ function atomLongtapEvent(tool, render) {
10558
10588
  };
10559
10589
  }
10560
10590
 
10561
- 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; } } }; }
10562
- 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); }
10563
- 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; }
10591
+ 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; } } }; }
10592
+ 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); }
10593
+ 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; }
10564
10594
  var AttachTool = function () {
10565
10595
  function AttachTool(editor, attachPoints) {
10566
10596
  _classCallCheck(this, AttachTool);
@@ -10613,7 +10643,7 @@ var AttachTool = function () {
10613
10643
  }
10614
10644
  }
10615
10645
  if (atomResult.length > 0) {
10616
- var _iterator = _createForOfIteratorHelper$b(atomResult),
10646
+ var _iterator = _createForOfIteratorHelper$a(atomResult),
10617
10647
  _step;
10618
10648
  try {
10619
10649
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
@@ -10633,7 +10663,7 @@ var AttachTool = function () {
10633
10663
  });
10634
10664
  return;
10635
10665
  } else if (bondResult.length > 0) {
10636
- var _iterator2 = _createForOfIteratorHelper$b(bondResult),
10666
+ var _iterator2 = _createForOfIteratorHelper$a(bondResult),
10637
10667
  _step2;
10638
10668
  try {
10639
10669
  for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
@@ -10669,9 +10699,9 @@ var AttachTool = function () {
10669
10699
  return AttachTool;
10670
10700
  }();
10671
10701
 
10672
- 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; } } }; }
10673
- 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); }
10674
- 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; }
10702
+ 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; } } }; }
10703
+ 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); }
10704
+ 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; }
10675
10705
  var BondTool = function () {
10676
10706
  function BondTool(editor, bondProps) {
10677
10707
  var _editor$selection;
@@ -10708,7 +10738,7 @@ var BondTool = function () {
10708
10738
  if (bondId !== null) bondResult.push(bondId);
10709
10739
  }
10710
10740
  if (atomResult.length > 0) {
10711
- var _iterator = _createForOfIteratorHelper$a(atomResult),
10741
+ var _iterator = _createForOfIteratorHelper$9(atomResult),
10712
10742
  _step;
10713
10743
  try {
10714
10744
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
@@ -10728,7 +10758,7 @@ var BondTool = function () {
10728
10758
  });
10729
10759
  return;
10730
10760
  } else if (bondResult.length > 0) {
10731
- var _iterator2 = _createForOfIteratorHelper$a(bondResult),
10761
+ var _iterator2 = _createForOfIteratorHelper$9(bondResult),
10732
10762
  _step2;
10733
10763
  try {
10734
10764
  for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
@@ -10836,7 +10866,7 @@ var BondTool = function () {
10836
10866
  }
10837
10867
  }
10838
10868
  if (atomResult.length > 0) {
10839
- var _iterator3 = _createForOfIteratorHelper$a(atomResult),
10869
+ var _iterator3 = _createForOfIteratorHelper$9(atomResult),
10840
10870
  _step3;
10841
10871
  try {
10842
10872
  for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
@@ -10949,7 +10979,7 @@ var BondTool = function () {
10949
10979
  }, {
10950
10980
  key: "getExistingBond",
10951
10981
  value: function getExistingBond(struct, begin, end) {
10952
- var _iterator4 = _createForOfIteratorHelper$a(struct.bonds.entries()),
10982
+ var _iterator4 = _createForOfIteratorHelper$9(struct.bonds.entries()),
10953
10983
  _step4;
10954
10984
  try {
10955
10985
  for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
@@ -10972,9 +11002,9 @@ var BondTool = function () {
10972
11002
  return BondTool;
10973
11003
  }();
10974
11004
 
10975
- 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; } } }; }
10976
- 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); }
10977
- 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; }
11005
+ 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; } } }; }
11006
+ 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); }
11007
+ 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; }
10978
11008
  var ChainTool = function () {
10979
11009
  function ChainTool(editor) {
10980
11010
  _classCallCheck(this, ChainTool);
@@ -11006,7 +11036,7 @@ var ChainTool = function () {
11006
11036
  }
11007
11037
  }
11008
11038
  if (atomResult.length > 0) {
11009
- var _iterator = _createForOfIteratorHelper$9(atomResult),
11039
+ var _iterator = _createForOfIteratorHelper$8(atomResult),
11010
11040
  _step;
11011
11041
  try {
11012
11042
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
@@ -11026,7 +11056,7 @@ var ChainTool = function () {
11026
11056
  });
11027
11057
  return;
11028
11058
  } else if (bondResult.length > 0) {
11029
- var _iterator2 = _createForOfIteratorHelper$9(bondResult),
11059
+ var _iterator2 = _createForOfIteratorHelper$8(bondResult),
11030
11060
  _step2;
11031
11061
  try {
11032
11062
  for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
@@ -11131,7 +11161,7 @@ var ChainTool = function () {
11131
11161
  }
11132
11162
  }
11133
11163
  if (atomResult.length > 0) {
11134
- var _iterator3 = _createForOfIteratorHelper$9(atomResult),
11164
+ var _iterator3 = _createForOfIteratorHelper$8(atomResult),
11135
11165
  _step3;
11136
11166
  try {
11137
11167
  for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
@@ -11193,9 +11223,9 @@ var ChainTool = function () {
11193
11223
  return ChainTool;
11194
11224
  }();
11195
11225
 
11196
- 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; } } }; }
11197
- 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); }
11198
- 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; }
11226
+ 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; } } }; }
11227
+ 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); }
11228
+ 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; }
11199
11229
  var ChargeTool = function () {
11200
11230
  function ChargeTool(editor, charge) {
11201
11231
  _classCallCheck(this, ChargeTool);
@@ -11236,7 +11266,7 @@ var ChargeTool = function () {
11236
11266
  }
11237
11267
  }
11238
11268
  if (atomResult.length > 0) {
11239
- var _iterator = _createForOfIteratorHelper$8(atomResult),
11269
+ var _iterator = _createForOfIteratorHelper$7(atomResult),
11240
11270
  _step;
11241
11271
  try {
11242
11272
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
@@ -11599,9 +11629,9 @@ var LassoHelper = function () {
11599
11629
  return LassoHelper;
11600
11630
  }();
11601
11631
 
11602
- 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; } } }; }
11603
- 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); }
11604
- 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; }
11632
+ 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; } } }; }
11633
+ 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); }
11634
+ 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; }
11605
11635
  var searchMaps = ['atoms', 'bonds', 'sgroups', 'functionalGroups', 'sgroupData'];
11606
11636
  var SGroupTool = function () {
11607
11637
  function SGroupTool(editor) {
@@ -11633,7 +11663,7 @@ var SGroupTool = function () {
11633
11663
  return isEqual(sgroup.atoms, selectedAtoms);
11634
11664
  });
11635
11665
  if (selectedAtoms && functionalGroups.size) {
11636
- var _iterator = _createForOfIteratorHelper$7(selectedAtoms),
11666
+ var _iterator = _createForOfIteratorHelper$6(selectedAtoms),
11637
11667
  _step;
11638
11668
  try {
11639
11669
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
@@ -11645,7 +11675,7 @@ var SGroupTool = function () {
11645
11675
  }
11646
11676
  var atomFromStruct = atomId !== null && ((_struct$atoms$get = struct.atoms.get(atomId)) === null || _struct$atoms$get === void 0 ? void 0 : _struct$atoms$get.a);
11647
11677
  if (atomFromStruct) {
11648
- var _iterator2 = _createForOfIteratorHelper$7(atomFromStruct.sgs.values()),
11678
+ var _iterator2 = _createForOfIteratorHelper$6(atomFromStruct.sgs.values()),
11649
11679
  _step2;
11650
11680
  try {
11651
11681
  for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
@@ -11678,7 +11708,7 @@ var SGroupTool = function () {
11678
11708
  atomsResult = [];
11679
11709
  }
11680
11710
  if (atomsResult && atomsResult.length > 0) {
11681
- var _iterator3 = _createForOfIteratorHelper$7(atomsResult),
11711
+ var _iterator3 = _createForOfIteratorHelper$6(atomsResult),
11682
11712
  _step3;
11683
11713
  try {
11684
11714
  for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
@@ -11742,7 +11772,7 @@ var SGroupTool = function () {
11742
11772
  }
11743
11773
  }
11744
11774
  if (atomResult.length > 0) {
11745
- var _iterator4 = _createForOfIteratorHelper$7(atomResult),
11775
+ var _iterator4 = _createForOfIteratorHelper$6(atomResult),
11746
11776
  _step4;
11747
11777
  try {
11748
11778
  for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
@@ -11762,7 +11792,7 @@ var SGroupTool = function () {
11762
11792
  });
11763
11793
  return;
11764
11794
  } else if (bondResult.length > 0) {
11765
- var _iterator5 = _createForOfIteratorHelper$7(bondResult),
11795
+ var _iterator5 = _createForOfIteratorHelper$6(bondResult),
11766
11796
  _step5;
11767
11797
  try {
11768
11798
  for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
@@ -11824,7 +11854,7 @@ var SGroupTool = function () {
11824
11854
  var result = [];
11825
11855
  if (ci && ci.map === 'functionalGroups' && functionalGroups.size && FunctionalGroup.isContractedFunctionalGroup(ci.id, functionalGroups)) return;
11826
11856
  if (selected && functionalGroups.size && selected.atoms) {
11827
- var _iterator6 = _createForOfIteratorHelper$7(selected.atoms),
11857
+ var _iterator6 = _createForOfIteratorHelper$6(selected.atoms),
11828
11858
  _step6;
11829
11859
  try {
11830
11860
  for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
@@ -11836,7 +11866,7 @@ var SGroupTool = function () {
11836
11866
  }
11837
11867
  var atomFromStruct = atomId !== null && ((_struct$atoms$get3 = struct.atoms.get(atomId)) === null || _struct$atoms$get3 === void 0 ? void 0 : _struct$atoms$get3.a);
11838
11868
  if (atomFromStruct) {
11839
- var _iterator7 = _createForOfIteratorHelper$7(atomFromStruct.sgs.values()),
11869
+ var _iterator7 = _createForOfIteratorHelper$6(atomFromStruct.sgs.values()),
11840
11870
  _step7;
11841
11871
  try {
11842
11872
  for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {
@@ -11866,7 +11896,7 @@ var SGroupTool = function () {
11866
11896
  }
11867
11897
  }
11868
11898
  if (selected && functionalGroups.size && selected.bonds) {
11869
- var _iterator8 = _createForOfIteratorHelper$7(selected.bonds),
11899
+ var _iterator8 = _createForOfIteratorHelper$6(selected.bonds),
11870
11900
  _step8;
11871
11901
  try {
11872
11902
  for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {
@@ -11908,7 +11938,7 @@ var SGroupTool = function () {
11908
11938
  bondsResult = null;
11909
11939
  }
11910
11940
  if (atomsResult && atomsResult.length > 0) {
11911
- var _iterator9 = _createForOfIteratorHelper$7(atomsResult),
11941
+ var _iterator9 = _createForOfIteratorHelper$6(atomsResult),
11912
11942
  _step9;
11913
11943
  try {
11914
11944
  for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {
@@ -11925,7 +11955,7 @@ var SGroupTool = function () {
11925
11955
  }
11926
11956
  }
11927
11957
  if (bondsResult && bondsResult.length > 0) {
11928
- var _iterator10 = _createForOfIteratorHelper$7(bondsResult),
11958
+ var _iterator10 = _createForOfIteratorHelper$6(bondsResult),
11929
11959
  _step10;
11930
11960
  try {
11931
11961
  for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {
@@ -12078,6 +12108,9 @@ function fromContextType(id, editor, newSg, currSelection) {
12078
12108
  var sg = restruct.molecule.sgroups.get(id);
12079
12109
  var sourceAtoms = sg && sg.atoms || currSelection.atoms || [];
12080
12110
  var context = newSg.attrs.context;
12111
+ if (newSg.type === SGroup$1.TYPES.SUP) {
12112
+ newSg.attrs.expanded = true;
12113
+ }
12081
12114
  var result = fromSgroupAction(context, restruct, newSg, sourceAtoms, currSelection);
12082
12115
  result.selection = result.selection || currSelection;
12083
12116
  if (id !== null && id !== undefined) {
@@ -12138,7 +12171,7 @@ function getGroupIdsFromItemMaps(struct, mergeMaps) {
12138
12171
  });
12139
12172
  }
12140
12173
 
12141
- function dropAndMerge(editor, mergeItems, action) {
12174
+ function dropAndMerge(editor, mergeItems, action, resizeCanvas) {
12142
12175
  var _dropItemAction;
12143
12176
  var restruct = editor.render.ctab;
12144
12177
  var isMerging = !!mergeItems;
@@ -12163,7 +12196,7 @@ function dropAndMerge(editor, mergeItems, action) {
12163
12196
  if (isMerging) editor.selection(null);
12164
12197
  if (((_dropItemAction = dropItemAction) === null || _dropItemAction === void 0 ? void 0 : _dropItemAction.operations.length) > 0) {
12165
12198
  editor.update(dropItemAction, false, {
12166
- resizeCanvas: false
12199
+ resizeCanvas: !!resizeCanvas
12167
12200
  });
12168
12201
  }
12169
12202
  return dropItemAction;
@@ -12188,27 +12221,24 @@ function extractAttachmentAtom(mergeItems, editor) {
12188
12221
  atoms: new Map(mergeItems.atoms),
12189
12222
  bonds: new Map(mergeItems.bonds)
12190
12223
  };
12191
- var removeNonAttachmentAtoms = new Action();
12192
- var removeSGroup = new Action();
12224
+ var action = new Action();
12193
12225
  (_mergeItems$atomToFun = mergeItems.atomToFunctionalGroup) === null || _mergeItems$atomToFun === void 0 ? void 0 : _mergeItems$atomToFun.forEach(function (functionalGroupId, srcAtomId) {
12194
12226
  var sGroup = struct.sgroups.get(functionalGroupId);
12195
12227
  var attachmentAtomId = sGroup === null || sGroup === void 0 ? void 0 : sGroup.getAttAtomId(struct);
12196
- if (attachmentAtomId) {
12197
- var attachmentAtom = struct.atoms.get(attachmentAtomId);
12198
- if (SGroup$1.isAtomInContractedSGroup(attachmentAtom, struct.sgroups)) {
12199
- return;
12200
- }
12201
- newMergeItems.atoms.set(srcAtomId, attachmentAtomId);
12202
- removeNonAttachmentAtoms.mergeWith(fromFragmentDeletion(reStruct, {
12203
- atoms: _toConsumableArray(SGroup$1.getAtoms(struct, sGroup)).filter(function (atomId) {
12204
- return atomId !== attachmentAtomId;
12205
- }),
12206
- bonds: _toConsumableArray(SGroup$1.getBonds(struct, sGroup))
12228
+ if (attachmentAtomId !== undefined) {
12229
+ var atomsToDelete = _toConsumableArray(SGroup$1.getAtoms(struct, sGroup)).filter(function (atomId) {
12230
+ return atomId !== attachmentAtomId;
12231
+ });
12232
+ var bondsToDelete = _toConsumableArray(SGroup$1.getBonds(struct, sGroup));
12233
+ action.mergeWith(fromSgroupDeletion(reStruct, functionalGroupId));
12234
+ action.mergeWith(fromFragmentDeletion(reStruct, {
12235
+ atoms: atomsToDelete,
12236
+ bonds: bondsToDelete
12207
12237
  }));
12208
- removeSGroup.mergeWith(fromSgroupDeletion(reStruct, functionalGroupId));
12238
+ newMergeItems.atoms.set(srcAtomId, attachmentAtomId);
12209
12239
  }
12210
12240
  });
12211
- return [newMergeItems, removeNonAttachmentAtoms];
12241
+ return [newMergeItems, action];
12212
12242
  }
12213
12243
 
12214
12244
  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; }
@@ -12286,9 +12316,19 @@ function updateSelectedBonds(_ref) {
12286
12316
  }
12287
12317
  }
12288
12318
 
12289
- 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; } } }; }
12290
- 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); }
12291
- 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; }
12319
+ function hasAtomsOutsideCanvas(atoms, render, scale) {
12320
+ return atoms.some(function (atom) {
12321
+ var canvasSize = render.sz;
12322
+ var offset = render.options.offset;
12323
+ var xSize = atom.pp.x * scale;
12324
+ var ySize = atom.pp.y * scale;
12325
+ return xSize > canvasSize.x || xSize + offset.x < 0 || ySize > canvasSize.y || ySize + offset.y < 0;
12326
+ });
12327
+ }
12328
+
12329
+ 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; } } }; }
12330
+ 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); }
12331
+ 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; }
12292
12332
  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; }
12293
12333
  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(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; }
12294
12334
  function _classPrivateFieldInitSpec$1(obj, privateMap, value) { _checkPrivateRedeclaration$1(obj, privateMap); privateMap.set(obj, value); }
@@ -12459,7 +12499,9 @@ var SelectTool = function () {
12459
12499
  delete this.dragCtx;
12460
12500
  }
12461
12501
  if ((_this$dragCtx2 = this.dragCtx) !== null && _this$dragCtx2 !== void 0 && _this$dragCtx2.item) {
12462
- dropAndMerge(editor, this.dragCtx.mergeItems, this.dragCtx.action);
12502
+ var atoms = Array.from(editor.struct().atoms.values());
12503
+ var shouldResizeCanvas = hasAtomsOutsideCanvas(atoms, editor.render, editor.options().scale);
12504
+ dropAndMerge(editor, this.dragCtx.mergeItems, this.dragCtx.action, shouldResizeCanvas);
12463
12505
  delete this.dragCtx;
12464
12506
  } else if (_classPrivateFieldGet(this, _lassoHelper).running()) {
12465
12507
  this.selectElementsOnCanvas(newSelected, editor, event);
@@ -12497,7 +12539,7 @@ var SelectTool = function () {
12497
12539
  bondFromStruct, sgroups, functionalGroups)) bondResult.push(bondId);
12498
12540
  }
12499
12541
  if (atomResult.length > 0) {
12500
- var _iterator = _createForOfIteratorHelper$6(atomResult),
12542
+ var _iterator = _createForOfIteratorHelper$5(atomResult),
12501
12543
  _step;
12502
12544
  try {
12503
12545
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
@@ -12517,7 +12559,7 @@ var SelectTool = function () {
12517
12559
  });
12518
12560
  return;
12519
12561
  } else if (bondResult.length > 0) {
12520
- var _iterator2 = _createForOfIteratorHelper$6(bondResult),
12562
+ var _iterator2 = _createForOfIteratorHelper$5(bondResult),
12521
12563
  _step2;
12522
12564
  try {
12523
12565
  for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
@@ -12737,7 +12779,7 @@ function getNewSelectedItems(editor, selectedSgroups) {
12737
12779
  atoms: [],
12738
12780
  bonds: []
12739
12781
  };
12740
- var _iterator3 = _createForOfIteratorHelper$6(selectedSgroups),
12782
+ var _iterator3 = _createForOfIteratorHelper$5(selectedSgroups),
12741
12783
  _step3;
12742
12784
  try {
12743
12785
  for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
@@ -12759,9 +12801,9 @@ function getNewSelectedItems(editor, selectedSgroups) {
12759
12801
  return newSelected;
12760
12802
  }
12761
12803
 
12762
- 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; } } }; }
12763
- 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); }
12764
- 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; }
12804
+ 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; } } }; }
12805
+ 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); }
12806
+ 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; }
12765
12807
  var EraserTool = function () {
12766
12808
  function EraserTool(editor, mode) {
12767
12809
  _classCallCheck(this, EraserTool);
@@ -12809,7 +12851,7 @@ var EraserTool = function () {
12809
12851
  var bondsResult = [];
12810
12852
  var preResult = [];
12811
12853
  if (selected && functionalGroups.size && selected.atoms) {
12812
- var _iterator = _createForOfIteratorHelper$5(selected.atoms),
12854
+ var _iterator = _createForOfIteratorHelper$4(selected.atoms),
12813
12855
  _step;
12814
12856
  try {
12815
12857
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
@@ -12818,7 +12860,7 @@ var EraserTool = function () {
12818
12860
  var atomId = FunctionalGroup.atomsInFunctionalGroup(functionalGroups, atom);
12819
12861
  var atomFromStruct = atomId !== null && ((_struct$atoms$get = struct.atoms.get(atomId)) === null || _struct$atoms$get === void 0 ? void 0 : _struct$atoms$get.a);
12820
12862
  if (atomFromStruct) {
12821
- var _iterator2 = _createForOfIteratorHelper$5(atomFromStruct.sgs.values()),
12863
+ var _iterator2 = _createForOfIteratorHelper$4(atomFromStruct.sgs.values()),
12822
12864
  _step2;
12823
12865
  try {
12824
12866
  for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
@@ -12848,7 +12890,7 @@ var EraserTool = function () {
12848
12890
  }
12849
12891
  }
12850
12892
  if (selected && functionalGroups.size && selected.bonds) {
12851
- var _iterator3 = _createForOfIteratorHelper$5(selected.bonds),
12893
+ var _iterator3 = _createForOfIteratorHelper$4(selected.bonds),
12852
12894
  _step3;
12853
12895
  try {
12854
12896
  for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
@@ -12867,7 +12909,7 @@ var EraserTool = function () {
12867
12909
  }
12868
12910
  }
12869
12911
  if (atomsResult.length > 0) {
12870
- var _iterator4 = _createForOfIteratorHelper$5(atomsResult),
12912
+ var _iterator4 = _createForOfIteratorHelper$4(atomsResult),
12871
12913
  _step4;
12872
12914
  try {
12873
12915
  for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
@@ -12882,7 +12924,7 @@ var EraserTool = function () {
12882
12924
  }
12883
12925
  }
12884
12926
  if (bondsResult.length > 0) {
12885
- var _iterator5 = _createForOfIteratorHelper$5(bondsResult),
12927
+ var _iterator5 = _createForOfIteratorHelper$4(bondsResult),
12886
12928
  _step5;
12887
12929
  try {
12888
12930
  for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
@@ -12953,7 +12995,7 @@ var EraserTool = function () {
12953
12995
  }
12954
12996
  }
12955
12997
  if (atomResult.length) {
12956
- var _iterator6 = _createForOfIteratorHelper$5(atomResult),
12998
+ var _iterator6 = _createForOfIteratorHelper$4(atomResult),
12957
12999
  _step6;
12958
13000
  try {
12959
13001
  for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
@@ -12969,7 +13011,7 @@ var EraserTool = function () {
12969
13011
  _iterator6.f();
12970
13012
  }
12971
13013
  } else if (bondResult.length) {
12972
- var _iterator7 = _createForOfIteratorHelper$5(bondResult),
13014
+ var _iterator7 = _createForOfIteratorHelper$4(bondResult),
12973
13015
  _step7;
12974
13016
  try {
12975
13017
  for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {
@@ -13130,7 +13172,8 @@ function ownKeys$O(object, enumerableOnly) { var keys = Object.keys(object); if
13130
13172
  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(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; }
13131
13173
  var PasteTool = function () {
13132
13174
  function PasteTool(editor, struct) {
13133
- var _struct$functionalGro;
13175
+ var _struct$functionalGro,
13176
+ _this = this;
13134
13177
  _classCallCheck(this, PasteTool);
13135
13178
  this.editor = editor;
13136
13179
  this.editor.selection(null);
@@ -13150,6 +13193,15 @@ var PasteTool = function () {
13150
13193
  pasteItems = _fromPaste2[1];
13151
13194
  this.action = action;
13152
13195
  this.editor.update(this.action, true);
13196
+ struct.sgroups.forEach(function (sgroup) {
13197
+ var countAttachmentPoint = FunctionalGroup.getAttachmentPointCount(sgroup, _this.editor.render.ctab.molecule);
13198
+ if (countAttachmentPoint > 1) {
13199
+ action.mergeWith(setExpandSGroup(_this.editor.render.ctab, sgroup.id, {
13200
+ expanded: true
13201
+ }));
13202
+ }
13203
+ });
13204
+ this.editor.update(this.action, true);
13153
13205
  this.findItems = ['functionalGroups'];
13154
13206
  this.mergeItems = getItemsToFuse(this.editor, pasteItems);
13155
13207
  this.editor.hover(getHoverToFuse(this.mergeItems), this);
@@ -13183,6 +13235,7 @@ var PasteTool = function () {
13183
13235
  }, {
13184
13236
  key: "mousemove",
13185
13237
  value: function mousemove(event) {
13238
+ var _this2 = this;
13186
13239
  if (this.action) {
13187
13240
  var _this$action2;
13188
13241
  (_this$action2 = this.action) === null || _this$action2 === void 0 ? void 0 : _this$action2.perform(this.editor.render.ctab);
@@ -13213,6 +13266,12 @@ var PasteTool = function () {
13213
13266
  this.dragCtx.action = action;
13214
13267
  this.editor.update(this.dragCtx.action, true);
13215
13268
  } else {
13269
+ this.struct.sgroups.forEach(function (sgroup) {
13270
+ var countAttachmentPoint = FunctionalGroup.getAttachmentPointCount(sgroup, _this2.struct);
13271
+ if (countAttachmentPoint > 1) {
13272
+ sgroup.setAttr('expanded', true);
13273
+ }
13274
+ });
13216
13275
  var _fromPaste5 = fromPaste(this.editor.render.ctab, this.struct, this.editor.render.page2obj(event)),
13217
13276
  _fromPaste6 = _slicedToArray(_fromPaste5, 2),
13218
13277
  _action = _fromPaste6[0],
@@ -13253,7 +13312,7 @@ var PasteTool = function () {
13253
13312
  var action = this.action;
13254
13313
  delete this.action;
13255
13314
  if (!this.isSingleContractedGroup || !this.mergeItems) {
13256
- this.editor.update(dropAndMerge(this.editor, this.mergeItems, action));
13315
+ this.editor.update(dropAndMerge(this.editor, this.mergeItems, action, true));
13257
13316
  }
13258
13317
  }
13259
13318
  }
@@ -13293,9 +13352,9 @@ function prepareTemplateFromSingleGroup(molecule) {
13293
13352
  return template;
13294
13353
  }
13295
13354
 
13296
- 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; } } }; }
13297
- 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); }
13298
- 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; }
13355
+ 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; } } }; }
13356
+ 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); }
13357
+ 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; }
13299
13358
  var RGroupAtomTool = function () {
13300
13359
  function RGroupAtomTool(editor) {
13301
13360
  _classCallCheck(this, RGroupAtomTool);
@@ -13331,7 +13390,7 @@ var RGroupAtomTool = function () {
13331
13390
  }
13332
13391
  }
13333
13392
  if (atomResult.length > 0) {
13334
- var _iterator = _createForOfIteratorHelper$4(atomResult),
13393
+ var _iterator = _createForOfIteratorHelper$3(atomResult),
13335
13394
  _step;
13336
13395
  try {
13337
13396
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
@@ -13395,9 +13454,9 @@ function propsDialog$1(editor, id, pos) {
13395
13454
  });
13396
13455
  }
13397
13456
 
13398
- 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; } } }; }
13399
- 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); }
13400
- 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; }
13457
+ 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; } } }; }
13458
+ 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); }
13459
+ 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; }
13401
13460
  var RGroupFragmentTool = function () {
13402
13461
  function RGroupFragmentTool(editor) {
13403
13462
  _classCallCheck(this, RGroupFragmentTool);
@@ -13434,7 +13493,7 @@ var RGroupFragmentTool = function () {
13434
13493
  }
13435
13494
  }
13436
13495
  if (atomResult.length > 0) {
13437
- var _iterator = _createForOfIteratorHelper$3(atomResult),
13496
+ var _iterator = _createForOfIteratorHelper$2(atomResult),
13438
13497
  _step;
13439
13498
  try {
13440
13499
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
@@ -13454,7 +13513,7 @@ var RGroupFragmentTool = function () {
13454
13513
  });
13455
13514
  return;
13456
13515
  } else if (bondResult.length > 0) {
13457
- var _iterator2 = _createForOfIteratorHelper$3(bondResult),
13516
+ var _iterator2 = _createForOfIteratorHelper$2(bondResult),
13458
13517
  _step2;
13459
13518
  try {
13460
13519
  for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
@@ -14643,9 +14702,6 @@ var tools = {
14643
14702
  text: TextTool
14644
14703
  };
14645
14704
 
14646
- 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; } } }; }
14647
- 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); }
14648
- 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; }
14649
14705
  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; }
14650
14706
  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(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; }
14651
14707
  function handleHotkeyOverItem(props) {
@@ -14664,18 +14720,44 @@ function handleOtherActions(_ref) {
14664
14720
  newAction = _ref.newAction;
14665
14721
  dispatch(onAction(newAction));
14666
14722
  }
14667
- function handleEraser(_ref2) {
14723
+ function eraseItem(_ref2) {
14668
14724
  var editor = _ref2.editor,
14669
- hoveredItem = _ref2.hoveredItem;
14670
- var action = fromFragmentDeletion(editor.render.ctab, mapItemsToArrays(hoveredItem));
14725
+ item = _ref2.item;
14726
+ var action = fromFragmentDeletion(editor.render.ctab, item);
14671
14727
  editor.update(action);
14672
14728
  editor.hover(null);
14673
14729
  }
14674
- function handleDialog(_ref3) {
14675
- var hoveredItem = _ref3.hoveredItem,
14730
+ function handleEraser(_ref3) {
14731
+ var editor = _ref3.editor,
14732
+ hoveredItem = _ref3.hoveredItem,
14676
14733
  newAction = _ref3.newAction,
14677
- editor = _ref3.editor,
14678
14734
  dispatch = _ref3.dispatch;
14735
+ var item = mapItemsToArrays(hoveredItem);
14736
+ var itemType = Object.keys(hoveredItem)[0];
14737
+ if ([STRUCT_TYPE.atoms, STRUCT_TYPE.bonds].includes(itemType)) {
14738
+ isFunctionalGroupChange({
14739
+ editor: editor,
14740
+ hoveredItemId: item[itemType][0],
14741
+ newAction: newAction,
14742
+ dispatch: dispatch
14743
+ }, itemType).then(function (res) {
14744
+ res && eraseItem({
14745
+ editor: editor,
14746
+ item: item
14747
+ });
14748
+ });
14749
+ return;
14750
+ }
14751
+ eraseItem({
14752
+ editor: editor,
14753
+ item: item
14754
+ });
14755
+ }
14756
+ function handleDialog(_ref4) {
14757
+ var hoveredItem = _ref4.hoveredItem,
14758
+ newAction = _ref4.newAction,
14759
+ editor = _ref4.editor,
14760
+ dispatch = _ref4.dispatch;
14679
14761
  var dialogType = Object.keys(hoveredItem)[0];
14680
14762
  var dialogHandler = getDialogHandler(dialogType);
14681
14763
  var hoveredItemId = hoveredItem[dialogType];
@@ -14701,11 +14783,11 @@ function getDialogHandler(itemType) {
14701
14783
  var dialog = dialogs[itemType];
14702
14784
  return dialog;
14703
14785
  }
14704
- function handleAtomPropsDialog(_ref4) {
14705
- var hoveredItemId = _ref4.hoveredItemId,
14706
- newAction = _ref4.newAction,
14707
- editor = _ref4.editor,
14708
- dispatch = _ref4.dispatch;
14786
+ function handleAtomPropsDialog(_ref5) {
14787
+ var hoveredItemId = _ref5.hoveredItemId,
14788
+ newAction = _ref5.newAction,
14789
+ editor = _ref5.editor,
14790
+ dispatch = _ref5.dispatch;
14709
14791
  var selection = editor.selection();
14710
14792
  var atomsSelected = selection === null || selection === void 0 ? void 0 : selection.atoms;
14711
14793
  var restruct = editor.render.ctab;
@@ -14728,11 +14810,11 @@ function handleAtomPropsDialog(_ref4) {
14728
14810
  });
14729
14811
  }
14730
14812
  }
14731
- function handleBondPropsDialog(_ref5) {
14732
- var hoveredItemId = _ref5.hoveredItemId,
14733
- newAction = _ref5.newAction,
14734
- editor = _ref5.editor,
14735
- dispatch = _ref5.dispatch;
14813
+ function handleBondPropsDialog(_ref6) {
14814
+ var hoveredItemId = _ref6.hoveredItemId,
14815
+ newAction = _ref6.newAction,
14816
+ editor = _ref6.editor,
14817
+ dispatch = _ref6.dispatch;
14736
14818
  var restruct = editor.render.ctab;
14737
14819
  var bondFromStruct = restruct.bonds.get(hoveredItemId);
14738
14820
  var convertedBondForModal = fromBond(bondFromStruct === null || bondFromStruct === void 0 ? void 0 : bondFromStruct.b);
@@ -14743,11 +14825,11 @@ function handleBondPropsDialog(_ref5) {
14743
14825
  return null;
14744
14826
  });
14745
14827
  }
14746
- function handleTool(_ref6) {
14747
- var hoveredItem = _ref6.hoveredItem,
14748
- newAction = _ref6.newAction,
14749
- editor = _ref6.editor,
14750
- dispatch = _ref6.dispatch;
14828
+ function handleTool(_ref7) {
14829
+ var hoveredItem = _ref7.hoveredItem,
14830
+ newAction = _ref7.newAction,
14831
+ editor = _ref7.editor,
14832
+ dispatch = _ref7.dispatch;
14751
14833
  var _loop = function _loop(item) {
14752
14834
  var toolHandler = getToolHandler(item, newAction.tool);
14753
14835
  var isChangeStructureTool = newAction.tool !== 'hand';
@@ -14759,7 +14841,7 @@ function handleTool(_ref6) {
14759
14841
  newAction: newAction,
14760
14842
  dispatch: dispatch
14761
14843
  };
14762
- isFunctionalGroupChange(props).then(function (result) {
14844
+ isFunctionalGroupChange(props, item).then(function (result) {
14763
14845
  if (!result && isChangeStructureTool) return;
14764
14846
  toolHandler(props);
14765
14847
  });
@@ -14769,17 +14851,17 @@ function handleTool(_ref6) {
14769
14851
  _loop(item);
14770
14852
  }
14771
14853
  }
14772
- function isFunctionalGroupChange(_x) {
14854
+ function isFunctionalGroupChange(_x, _x2) {
14773
14855
  return _isFunctionalGroupChange.apply(this, arguments);
14774
14856
  }
14775
14857
  function _isFunctionalGroupChange() {
14776
- _isFunctionalGroupChange = _asyncToGenerator( _regeneratorRuntime.mark(function _callee(props) {
14858
+ _isFunctionalGroupChange = _asyncToGenerator( _regeneratorRuntime.mark(function _callee(props, type) {
14777
14859
  return _regeneratorRuntime.wrap(function _callee$(_context) {
14778
14860
  while (1) {
14779
14861
  switch (_context.prev = _context.next) {
14780
14862
  case 0:
14781
14863
  _context.next = 2;
14782
- return isChangingFunctionalGroup(props);
14864
+ return isChangingFunctionalGroup(props, type);
14783
14865
  case 2:
14784
14866
  return _context.abrupt("return", _context.sent);
14785
14867
  case 3:
@@ -14807,13 +14889,13 @@ function getToolHandler(itemType) {
14807
14889
  rgroupatom: function rgroupatom(props) {
14808
14890
  return handleRGroupAtomTool(props);
14809
14891
  },
14810
- sgroup: function sgroup(_ref7) {
14811
- var editor = _ref7.editor,
14812
- hoveredItemId = _ref7.hoveredItemId;
14892
+ sgroup: function sgroup(_ref8) {
14893
+ var editor = _ref8.editor,
14894
+ hoveredItemId = _ref8.hoveredItemId;
14813
14895
  tools.sgroup.sgroupDialog(editor, hoveredItemId);
14814
14896
  },
14815
- hand: function hand(_ref8) {
14816
- var dispatch = _ref8.dispatch;
14897
+ hand: function hand(_ref9) {
14898
+ var dispatch = _ref9.dispatch;
14817
14899
  return dispatch(onAction({
14818
14900
  tool: 'hand'
14819
14901
  }));
@@ -14827,28 +14909,28 @@ function getToolHandler(itemType) {
14827
14909
  }
14828
14910
  return items._default[toolName];
14829
14911
  }
14830
- function handleAtomTool(_ref9) {
14831
- var hoveredItemId = _ref9.hoveredItemId,
14832
- newAction = _ref9.newAction,
14833
- editor = _ref9.editor;
14912
+ function handleAtomTool(_ref10) {
14913
+ var hoveredItemId = _ref10.hoveredItemId,
14914
+ newAction = _ref10.newAction,
14915
+ editor = _ref10.editor;
14834
14916
  var atomProps = _objectSpread$M({}, newAction.opts);
14835
14917
  var updatedAtoms = fromAtomsAttrs(editor.render.ctab, hoveredItemId, atomProps, true);
14836
14918
  editor.update(updatedAtoms);
14837
14919
  }
14838
- function handleBondTool(_ref10) {
14839
- var hoveredItemId = _ref10.hoveredItemId,
14840
- newAction = _ref10.newAction,
14841
- editor = _ref10.editor;
14920
+ function handleBondTool(_ref11) {
14921
+ var hoveredItemId = _ref11.hoveredItemId,
14922
+ newAction = _ref11.newAction,
14923
+ editor = _ref11.editor;
14842
14924
  var newBond = fromBondAddition(editor.render.ctab, newAction.opts, hoveredItemId, {
14843
14925
  label: 'C'
14844
14926
  })[0];
14845
14927
  editor.update(newBond);
14846
14928
  }
14847
- function handleChargeTool(_ref11) {
14929
+ function handleChargeTool(_ref12) {
14848
14930
  var _editor$render$ctab$a;
14849
- var hoveredItemId = _ref11.hoveredItemId,
14850
- newAction = _ref11.newAction,
14851
- editor = _ref11.editor;
14931
+ var hoveredItemId = _ref12.hoveredItemId,
14932
+ newAction = _ref12.newAction,
14933
+ editor = _ref12.editor;
14852
14934
  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;
14853
14935
  if (existingAtom) {
14854
14936
  var updatedAtom = fromAtomsAttrs(editor.render.ctab, hoveredItemId, {
@@ -14864,17 +14946,17 @@ function mapItemsToArrays(items) {
14864
14946
  }
14865
14947
  return mappedItems;
14866
14948
  }
14867
- function handleRGroupAtomTool(_x2) {
14949
+ function handleRGroupAtomTool(_x3) {
14868
14950
  return _handleRGroupAtomTool.apply(this, arguments);
14869
14951
  }
14870
14952
  function _handleRGroupAtomTool() {
14871
- _handleRGroupAtomTool = _asyncToGenerator( _regeneratorRuntime.mark(function _callee2(_ref12) {
14953
+ _handleRGroupAtomTool = _asyncToGenerator( _regeneratorRuntime.mark(function _callee2(_ref13) {
14872
14954
  var hoveredItemId, editor, struct, atom, rglabel, label, element;
14873
14955
  return _regeneratorRuntime.wrap(function _callee2$(_context2) {
14874
14956
  while (1) {
14875
14957
  switch (_context2.prev = _context2.next) {
14876
14958
  case 0:
14877
- hoveredItemId = _ref12.hoveredItemId, editor = _ref12.editor;
14959
+ hoveredItemId = _ref13.hoveredItemId, editor = _ref13.editor;
14878
14960
  struct = editor.render.ctab.molecule;
14879
14961
  atom = hoveredItemId || hoveredItemId === 0 ? struct.atoms.get(hoveredItemId) : null;
14880
14962
  rglabel = atom ? atom.rglabel : 0;
@@ -14911,64 +14993,36 @@ function _handleRGroupAtomTool() {
14911
14993
  }));
14912
14994
  return _handleRGroupAtomTool.apply(this, arguments);
14913
14995
  }
14914
- function isChangingFunctionalGroup(_x3) {
14996
+ function getFunctionalGroupIdByItem(editor, hoveredItemId, type) {
14997
+ var molecule = editor.render.ctab.molecule;
14998
+ var functionalGroups = molecule.functionalGroups;
14999
+ return type === 'atoms' ? FunctionalGroup.findFunctionalGroupByAtom(functionalGroups, hoveredItemId) : FunctionalGroup.findFunctionalGroupByBond(molecule, functionalGroups, hoveredItemId);
15000
+ }
15001
+ function isChangingFunctionalGroup(_x4, _x5) {
14915
15002
  return _isChangingFunctionalGroup.apply(this, arguments);
14916
15003
  }
14917
15004
  function _isChangingFunctionalGroup() {
14918
- _isChangingFunctionalGroup = _asyncToGenerator( _regeneratorRuntime.mark(function _callee3(_ref13) {
14919
- var _editor$render$ctab$a2;
14920
- var hoveredItemId, editor, atomResult, result, atom, molecule, functionalGroups, sgroupsOnCanvas, atomId, isFunctionalGroup, _iterator, _step, id, fgId;
15005
+ _isChangingFunctionalGroup = _asyncToGenerator( _regeneratorRuntime.mark(function _callee3(_ref14, type) {
15006
+ var hoveredItemId, editor, fgId;
14921
15007
  return _regeneratorRuntime.wrap(function _callee3$(_context3) {
14922
15008
  while (1) {
14923
15009
  switch (_context3.prev = _context3.next) {
14924
15010
  case 0:
14925
- hoveredItemId = _ref13.hoveredItemId, editor = _ref13.editor;
14926
- atomResult = [];
14927
- result = [];
14928
- 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;
14929
- molecule = editor.render.ctab.molecule;
14930
- functionalGroups = molecule.functionalGroups;
14931
- sgroupsOnCanvas = Array.from(molecule.sgroups.values());
14932
- if (atom && functionalGroups) {
14933
- atomId = FunctionalGroup.atomsInFunctionalGroup(functionalGroups, hoveredItemId);
14934
- if (atomId !== null) {
14935
- atomResult.push(atomId);
14936
- }
14937
- }
14938
- isFunctionalGroup = atomResult.length > 0;
14939
- if (!isFunctionalGroup) {
14940
- _context3.next = 17;
14941
- break;
14942
- }
14943
- if (!SGroup$1.isAtomInSaltOrSolvent(hoveredItemId, sgroupsOnCanvas)) {
14944
- _context3.next = 12;
15011
+ hoveredItemId = _ref14.hoveredItemId, editor = _ref14.editor;
15012
+ fgId = getFunctionalGroupIdByItem(editor, hoveredItemId, type);
15013
+ if (!(fgId !== null)) {
15014
+ _context3.next = 6;
14945
15015
  break;
14946
15016
  }
14947
- return _context3.abrupt("return", false);
14948
- case 12:
14949
- _iterator = _createForOfIteratorHelper$2(atomResult);
14950
- try {
14951
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
14952
- id = _step.value;
14953
- fgId = FunctionalGroup.findFunctionalGroupByAtom(functionalGroups, id);
14954
- if (fgId !== null && !result.includes(fgId)) {
14955
- result.push(fgId);
14956
- }
14957
- }
14958
- } catch (err) {
14959
- _iterator.e(err);
14960
- } finally {
14961
- _iterator.f();
14962
- }
14963
- _context3.next = 16;
15017
+ _context3.next = 5;
14964
15018
  return editor.event.removeFG.dispatch({
14965
- fgIds: result
15019
+ fgIds: [fgId]
14966
15020
  });
14967
- case 16:
14968
- return _context3.abrupt("return", _context3.sent);
14969
- case 17:
15021
+ case 5:
15022
+ return _context3.abrupt("return", false);
15023
+ case 6:
14970
15024
  return _context3.abrupt("return", true);
14971
- case 18:
15025
+ case 7:
14972
15026
  case "end":
14973
15027
  return _context3.stop();
14974
15028
  }
@@ -14989,11 +15043,7 @@ function initKeydownListener(element) {
14989
15043
  function removeNotRenderedStruct(actionTool, group, dispatch) {
14990
15044
  var affectedTools = ['paste', 'template'];
14991
15045
  if (affectedTools.includes(actionTool.tool) && group !== null && group !== void 0 && group.includes('save')) {
14992
- var savedSelectedTool = SettingsManager.selectionTool;
14993
- dispatch({
14994
- type: 'ACTION',
14995
- action: savedSelectedTool || tools$1['select-rectangle'].action
14996
- });
15046
+ dispatch(removeStructAction());
14997
15047
  }
14998
15048
  }
14999
15049
  function keyHandle(dispatch, state, hotKeys, event) {
@@ -15659,7 +15709,7 @@ function findClosestFG(restruct, pos, skip) {
15659
15709
  reSGroupId = _step$value[0],
15660
15710
  reSGroup = _step$value[1];
15661
15711
  if (reSGroupId === skipId) continue;
15662
- var _reSGroup$getTextHigh = reSGroup.getTextHighlightDimensions(),
15712
+ var _reSGroup$getTextHigh = reSGroup.getTextHighlightDimensions(0, restruct.render),
15663
15713
  startX = _reSGroup$getTextHigh.startX,
15664
15714
  startY = _reSGroup$getTextHigh.startY,
15665
15715
  width = _reSGroup$getTextHigh.width,
@@ -17131,7 +17181,16 @@ var useFunctionalGroupEoc = function useFunctionalGroupEoc() {
17131
17181
  return toExpand ? functionalGroup.isExpanded : !functionalGroup.isExpanded;
17132
17182
  }));
17133
17183
  }, []);
17134
- return [handler, hidden];
17184
+ var disabled = useCallback(function (_ref3) {
17185
+ var _props$functionalGrou2;
17186
+ var props = _ref3.props;
17187
+ var editor = getKetcherInstance().editor;
17188
+ var molecule = editor.render.ctab.molecule;
17189
+ 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) {
17190
+ return FunctionalGroup.getAttachmentPointCount(functionalGroup === null || functionalGroup === void 0 ? void 0 : functionalGroup.relatedSGroup, molecule) > 1;
17191
+ }));
17192
+ }, []);
17193
+ return [handler, hidden, disabled];
17135
17194
  };
17136
17195
 
17137
17196
  var useFunctionalGroupRemove = function useFunctionalGroupRemove() {
@@ -17159,12 +17218,16 @@ function ownKeys$G(object, enumerableOnly) { var keys = Object.keys(object); if
17159
17218
  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(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; }
17160
17219
  var FunctionalGroupMenuItems = function FunctionalGroupMenuItems(props) {
17161
17220
  var _useFunctionalGroupEo = useFunctionalGroupEoc(),
17162
- _useFunctionalGroupEo2 = _slicedToArray(_useFunctionalGroupEo, 2),
17221
+ _useFunctionalGroupEo2 = _slicedToArray(_useFunctionalGroupEo, 3),
17163
17222
  handleExpandOrContract = _useFunctionalGroupEo2[0],
17164
- ExpandOrContractHidden = _useFunctionalGroupEo2[1];
17223
+ ExpandOrContractHidden = _useFunctionalGroupEo2[1],
17224
+ ExpandOrContractDisabled = _useFunctionalGroupEo2[2];
17165
17225
  var handleRemove = useFunctionalGroupRemove();
17166
17226
  return jsxs(Fragment, {
17167
17227
  children: [jsx(Item, _objectSpread$G(_objectSpread$G({}, props), {}, {
17228
+ disabled: function disabled(params) {
17229
+ return ExpandOrContractDisabled(params);
17230
+ },
17168
17231
  hidden: function hidden(params) {
17169
17232
  return ExpandOrContractHidden(params, true);
17170
17233
  },
@@ -17173,6 +17236,9 @@ var FunctionalGroupMenuItems = function FunctionalGroupMenuItems(props) {
17173
17236
  },
17174
17237
  children: "Expand Abbreviation"
17175
17238
  })), jsx(Item, _objectSpread$G(_objectSpread$G({}, props), {}, {
17239
+ disabled: function disabled(params) {
17240
+ return ExpandOrContractDisabled(params);
17241
+ },
17176
17242
  hidden: function hidden(params) {
17177
17243
  return ExpandOrContractHidden(params, false);
17178
17244
  },
@@ -17684,6 +17750,7 @@ var InfoPanel = function InfoPanel(props) {
17684
17750
  autoScaleMargin: 0,
17685
17751
  rescaleAmount: 1,
17686
17752
  cachePrefix: 'infoPanel',
17753
+ needCache: false,
17687
17754
  viewSz: new Vec2(width, height),
17688
17755
  width: width,
17689
17756
  height: height
@@ -24243,8 +24310,8 @@ var KetcherBuilder = function () {
24243
24310
  initApp(element, staticResourcesUrl, {
24244
24311
  buttons: buttons || {},
24245
24312
  errorHandler: errorHandler || null,
24246
- version: "2.10.0-rc.1" ,
24247
- buildDate: "2023-04-21T11:09:47" ,
24313
+ version: "2.10.0-rc.2" ,
24314
+ buildDate: "2023-05-03T14:52:11" ,
24248
24315
  buildNumber: ''
24249
24316
  }, structService, resolve);
24250
24317
  });
@@ -24354,5 +24421,5 @@ function Editor(props) {
24354
24421
  });
24355
24422
  }
24356
24423
 
24357
- export { Editor, KETCHER_INIT_EVENT_NAME, KETCHER_SAVED_SETTINGS_KEY, MODES };
24424
+ export { Editor, KETCHER_INIT_EVENT_NAME, KETCHER_SAVED_SETTINGS_KEY, MODES, STRUCT_TYPE };
24358
24425
  //# sourceMappingURL=index.modern.js.map