ketcher-react 2.9.0-rc.7 → 2.10.0-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (28) hide show
  1. package/dist/index.css +1 -1
  2. package/dist/index.css.map +1 -1
  3. package/dist/index.js +724 -529
  4. package/dist/index.js.map +1 -1
  5. package/dist/index.modern.js +726 -531
  6. package/dist/index.modern.js.map +1 -1
  7. package/dist/script/editor/Editor.d.ts +2 -1
  8. package/dist/script/editor/shared/closest.d.ts +3 -1
  9. package/dist/script/editor/tool/helper/dropAndMerge.d.ts +1 -6
  10. package/dist/script/editor/tool/select.d.ts +3 -1
  11. package/dist/script/editor/tool/template.d.ts +8 -1
  12. package/dist/script/ui/data/schema/struct-schema.d.ts +115 -98
  13. package/dist/script/ui/dialog/template/template-attach.d.ts +5 -0
  14. package/dist/script/ui/state/editor/index.d.ts +1 -1
  15. package/dist/script/ui/state/editor/utils/generateCommonProperties.d.ts +6 -0
  16. package/dist/script/ui/state/editor/utils/index.d.ts +1 -0
  17. package/dist/script/ui/state/modal/atoms.d.ts +0 -6
  18. package/dist/script/ui/state/modal/bonds.d.ts +6 -0
  19. package/dist/script/ui/state/modal/utils/index.d.ts +1 -0
  20. package/dist/script/ui/state/modal/utils/updateOnlyChangedProperties.d.ts +1 -0
  21. package/dist/script/ui/views/modal/components/ExtendedTable/components/GenericGroups/BoxWithLines.d.ts +1 -1
  22. package/dist/script/ui/views/modal/components/ExtendedTable/components/GenericGroups/GenGroup.d.ts +3 -2
  23. package/dist/script/ui/views/modal/components/ExtendedTable/components/GenericGroups/GenSet.d.ts +3 -2
  24. package/dist/script/ui/views/modal/components/ExtendedTable/components/GenericGroups/GenericGroups.d.ts +3 -2
  25. package/dist/script/ui/views/modal/components/ExtendedTable/components/GenericGroups/components/ButtonGenSet/ButtonGenSet.d.ts +25 -0
  26. package/dist/script/ui/views/modal/components/ExtendedTable/components/GenericGroups/components/ButtonGenSet/index.d.ts +16 -0
  27. package/dist/script/ui/views/modal/components/ExtendedTable/components/GenericGroups/index.d.ts +1 -1
  28. package/package.json +2 -2
package/dist/index.js CHANGED
@@ -39,8 +39,8 @@ var _typeof = require('@babel/runtime/helpers/typeof');
39
39
  var Ajv = require('ajv');
40
40
  var fp = require('lodash/fp');
41
41
  var _toConsumableArray = require('@babel/runtime/helpers/toConsumableArray');
42
- var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
43
42
  var reactDeviceDetect = require('react-device-detect');
43
+ var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
44
44
  var ReactDOM = require('react-dom');
45
45
  var reactRedux = require('react-redux');
46
46
  var redux = require('redux');
@@ -328,7 +328,7 @@ var debugObj = {
328
328
  }
329
329
  };
330
330
 
331
- var classes$N = {"cliparea":"cliparea-module_cliparea__GdPrN"};
331
+ var classes$O = {"cliparea":"cliparea-module_cliparea__GdPrN"};
332
332
 
333
333
  function _createSuper$c(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$c(); return function _createSuperInternal() { var Super = _getPrototypeOf__default["default"](Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf__default["default"](this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn__default["default"](this, result); }; }
334
334
  function _isNativeReflectConstruct$c() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
@@ -402,7 +402,7 @@ var ClipArea = function (_Component) {
402
402
  value: function render() {
403
403
  return jsxRuntime.jsx("textarea", {
404
404
  ref: this.textAreaRef,
405
- className: clsx__default["default"]('cliparea', classes$N.cliparea),
405
+ className: clsx__default["default"]('cliparea', classes$O.cliparea),
406
406
  contentEditable: true,
407
407
  autoFocus: true
408
408
  ,
@@ -596,8 +596,8 @@ var render = {
596
596
  },
597
597
  showHydrogenLabels: {
598
598
  title: 'Show hydrogen labels',
599
- "enum": ['off', 'Hetero', 'Terminal', 'Terminal and Hetero', 'on'],
600
- "default": 'on'
599
+ "enum": Object.values(ketcherCore.ShowHydrogenLabels),
600
+ "default": ketcherCore.ShowHydrogenLabels.TerminalAndHetero
601
601
  },
602
602
  aromaticCircle: {
603
603
  title: 'Aromatic Bonds as circle',
@@ -1494,6 +1494,11 @@ var atom = {
1494
1494
  enumNames: ['', 'Monoradical', 'Diradical (singlet)', 'Diradical (triplet)'],
1495
1495
  "default": 0
1496
1496
  },
1497
+ cip: {
1498
+ title: 'CIP',
1499
+ type: 'string',
1500
+ "enum": ['R', 'S', 'r', 's']
1501
+ },
1497
1502
  ringBondCount: {
1498
1503
  title: 'Ring bond count',
1499
1504
  "enum": [0, -2, -1, 2, 3, 4],
@@ -1580,8 +1585,8 @@ var bond = {
1580
1585
  properties: {
1581
1586
  type: {
1582
1587
  title: 'Type',
1583
- "enum": ['single', 'up', 'down', 'updown', 'double', 'crossed', 'triple', 'aromatic', 'any', 'hydrogen', 'singledouble', 'singlearomatic', 'doublearomatic', 'dative'],
1584
- enumNames: ['Single', 'Single Up', 'Single Down', 'Single Up/Down', 'Double', 'Double Cis/Trans', 'Triple', 'Aromatic', 'Any', 'Hydrogen', 'Single/Double', 'Single/Aromatic', 'Double/Aromatic', 'Dative'],
1588
+ "enum": ['', 'single', 'up', 'down', 'updown', 'double', 'crossed', 'triple', 'aromatic', 'any', 'hydrogen', 'singledouble', 'singlearomatic', 'doublearomatic', 'dative'],
1589
+ enumNames: ['', 'Single', 'Single Up', 'Single Down', 'Single Up/Down', 'Double', 'Double Cis/Trans', 'Triple', 'Aromatic', 'Any', 'Hydrogen', 'Single/Double', 'Single/Aromatic', 'Double/Aromatic', 'Dative'],
1585
1590
  "default": 'single'
1586
1591
  },
1587
1592
  topology: {
@@ -1595,6 +1600,11 @@ var bond = {
1595
1600
  "enum": [0, -1, 1, 2, 4, 8, 12],
1596
1601
  enumNames: ['Unmarked', 'Not center', 'Center', 'No change', 'Made/broken', 'Order changes', 'Made/broken and changes'],
1597
1602
  "default": 0
1603
+ },
1604
+ cip: {
1605
+ title: 'CIP',
1606
+ type: 'string',
1607
+ "enum": ['E', 'Z', 'M', 'P']
1598
1608
  }
1599
1609
  }
1600
1610
  };
@@ -1875,7 +1885,7 @@ function fromBondType(type, stereo) {
1875
1885
  for (var caption in bondCaptionMap) {
1876
1886
  if (bondCaptionMap[caption].type === type && bondCaptionMap[caption].stereo === stereo) return caption;
1877
1887
  }
1878
- throw Error('No such bond caption');
1888
+ return '';
1879
1889
  }
1880
1890
  var bondCaptionMap = {
1881
1891
  single: {
@@ -1998,74 +2008,54 @@ function isFlipDisabled(editor) {
1998
2008
  bonds = _selection$bonds === void 0 ? [] : _selection$bonds,
1999
2009
  _selection$atoms = selection.atoms,
2000
2010
  atoms = _selection$atoms === void 0 ? [] : _selection$atoms;
2001
- var getBondIdsForAtom = function getBondIdsForAtom(atomId) {
2011
+ var getBondIdsForAttachmentAtoms = function getBondIdsForAttachmentAtoms() {
2002
2012
  var result = [];
2003
- var _iterator = _createForOfIteratorHelper$e(restruct.bonds.entries()),
2013
+ var _iterator = _createForOfIteratorHelper$e(atoms),
2004
2014
  _step;
2005
2015
  try {
2006
2016
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
2007
- var _step$value = _slicedToArray__default["default"](_step.value, 2),
2008
- bondId = _step$value[0],
2009
- bond = _step$value[1];
2010
- if (bond.b.begin === atomId || bond.b.end === atomId) {
2011
- result.push(bondId);
2012
- }
2013
- }
2014
- } catch (err) {
2015
- _iterator.e(err);
2016
- } finally {
2017
- _iterator.f();
2018
- }
2019
- return result;
2020
- };
2021
- var getBondIdsForAttachmentAtoms = function getBondIdsForAttachmentAtoms() {
2022
- var result = [];
2023
- var _iterator2 = _createForOfIteratorHelper$e(atoms),
2024
- _step2;
2025
- try {
2026
- for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
2027
- var atomId = _step2.value;
2028
- var atomBondIds = getBondIdsForAtom(atomId);
2029
- var _iterator3 = _createForOfIteratorHelper$e(atomBondIds),
2030
- _step3;
2017
+ var atomId = _step.value;
2018
+ var atomBondIds = ketcherCore.Atom.getConnectedBondIds(restruct.molecule, atomId);
2019
+ var _iterator2 = _createForOfIteratorHelper$e(atomBondIds),
2020
+ _step2;
2031
2021
  try {
2032
- for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
2033
- var atomBondId = _step3.value;
2022
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
2023
+ var atomBondId = _step2.value;
2034
2024
  var bond = restruct.bonds.get(atomBondId);
2035
2025
  if (bond && ketcherCore.isAttachmentBond(bond.b, selection)) {
2036
2026
  result.push(atomBondId);
2037
2027
  }
2038
2028
  }
2039
2029
  } catch (err) {
2040
- _iterator3.e(err);
2030
+ _iterator2.e(err);
2041
2031
  } finally {
2042
- _iterator3.f();
2032
+ _iterator2.f();
2043
2033
  }
2044
2034
  }
2045
2035
  } catch (err) {
2046
- _iterator2.e(err);
2036
+ _iterator.e(err);
2047
2037
  } finally {
2048
- _iterator2.f();
2038
+ _iterator.f();
2049
2039
  }
2050
2040
  return result;
2051
2041
  };
2052
2042
  var getAmountOfAttachmentBonds = function getAmountOfAttachmentBonds() {
2053
2043
  var amountOfAttachmentBonds = 0;
2054
2044
  var totalBondIds = new Set([].concat(_toConsumableArray__default["default"](bonds), _toConsumableArray__default["default"](getBondIdsForAttachmentAtoms())));
2055
- var _iterator4 = _createForOfIteratorHelper$e(totalBondIds),
2056
- _step4;
2045
+ var _iterator3 = _createForOfIteratorHelper$e(totalBondIds),
2046
+ _step3;
2057
2047
  try {
2058
- for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
2059
- var bondId = _step4.value;
2048
+ for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
2049
+ var bondId = _step3.value;
2060
2050
  var bond = restruct.bonds.get(bondId);
2061
2051
  if (bond && ketcherCore.isAttachmentBond(bond.b, selection)) {
2062
2052
  amountOfAttachmentBonds++;
2063
2053
  }
2064
2054
  }
2065
2055
  } catch (err) {
2066
- _iterator4.e(err);
2056
+ _iterator3.e(err);
2067
2057
  } finally {
2068
- _iterator4.f();
2058
+ _iterator3.f();
2069
2059
  }
2070
2060
  return amountOfAttachmentBonds;
2071
2061
  };
@@ -3022,7 +3012,7 @@ var templates = templates$1.reduce(function (res, struct, i) {
3022
3012
  var zoomList = [0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1, 1.1, 1.2, 1.3, 1.4, 1.5, 1.7, 2, 2.5, 3, 3.5, 4];
3023
3013
  var zoom = {
3024
3014
  zoom: {
3025
- shortcut: ['Mod+Shift+0'],
3015
+ shortcut: ['Mod+0'],
3026
3016
  selected: function selected(editor) {
3027
3017
  return editor.zoom();
3028
3018
  },
@@ -3076,7 +3066,7 @@ var zoom = {
3076
3066
 
3077
3067
  var openHelpLink = function openHelpLink() {
3078
3068
  var _window$open;
3079
- return (_window$open = window.open("https://github.com/epam/ketcher/blob/".concat("v2.9.0-rc.7\n", "/documentation/help.md#ketcher-overview"))) === null || _window$open === void 0 ? void 0 : _window$open.focus();
3069
+ return (_window$open = window.open("https://github.com/epam/ketcher/blob/".concat("v2.10.0-rc.1\n", "/documentation/help.md#ketcher-overview"))) === null || _window$open === void 0 ? void 0 : _window$open.focus();
3080
3070
  };
3081
3071
  var help = {
3082
3072
  help: {
@@ -7055,7 +7045,7 @@ function Icon(_ref) {
7055
7045
  return jsxRuntime.jsx(Component, _objectSpread$17({}, props));
7056
7046
  }
7057
7047
 
7058
- var classes$M = {"button-common-styles":"ActionButton-module_button-common-styles__y-hng","scrollbar":"ActionButton-module_scrollbar__lD3MH","button":"ActionButton-module_button__nfoWQ","selected":"ActionButton-module_selected__kPCxA"};
7048
+ var classes$N = {"button-common-styles":"ActionButton-module_button-common-styles__y-hng","scrollbar":"ActionButton-module_scrollbar__lD3MH","button":"ActionButton-module_button__nfoWQ","selected":"ActionButton-module_selected__kPCxA"};
7059
7049
 
7060
7050
  var shortcutAliasMap = {
7061
7051
  Escape: 'Esc',
@@ -7094,10 +7084,11 @@ var ActionButton = function ActionButton(props) {
7094
7084
  }
7095
7085
  };
7096
7086
  return jsxRuntime.jsxs("button", {
7087
+ "data-testid": name,
7097
7088
  disabled: disabled,
7098
7089
  onClick: handleClick,
7099
7090
  title: shortcut ? "".concat(action === null || action === void 0 ? void 0 : action.title, " (").concat(shortcut, ")") : action === null || action === void 0 ? void 0 : action.title,
7100
- className: clsx__default["default"](classes$M.button, _defineProperty__default["default"]({}, classes$M.selected, selected), className),
7091
+ className: clsx__default["default"](classes$N.button, _defineProperty__default["default"]({}, classes$N.selected, selected), className),
7101
7092
  children: [jsxRuntime.jsx(Icon, {
7102
7093
  name: name
7103
7094
  }), jsxRuntime.jsx("kbd", {
@@ -7253,7 +7244,7 @@ var DefaultMultiTool = function DefaultMultiTool(props) {
7253
7244
  });
7254
7245
  };
7255
7246
 
7256
- var classes$L = {"group":"GroupedMultiTool-module_group__BJQAU"};
7247
+ var classes$M = {"group":"GroupedMultiTool-module_group__BJQAU"};
7257
7248
 
7258
7249
  var GroupedMultiTool = function GroupedMultiTool(props) {
7259
7250
  var groups = props.groups,
@@ -7268,7 +7259,7 @@ var GroupedMultiTool = function GroupedMultiTool(props) {
7268
7259
  return jsxRuntime.jsx(jsxRuntime.Fragment, {
7269
7260
  children: groups.map(function (descriptor) {
7270
7261
  return jsxRuntime.jsx("div", {
7271
- className: classes$L.group,
7262
+ className: classes$M.group,
7272
7263
  children: options.slice(descriptor.start, descriptor.end).map(function (toolbarItem) {
7273
7264
  var currentStatus = status[toolbarItem.id];
7274
7265
  return jsxRuntime.jsx(ActionButton, {
@@ -7298,7 +7289,7 @@ function chooseMultiTool() {
7298
7289
  }
7299
7290
  }
7300
7291
 
7301
- var classes$K = {"button-common-styles":"ToolbarMultiToolItem-module_button-common-styles__Fuxbo","scrollbar":"ToolbarMultiToolItem-module_scrollbar__XTmfz","icon":"ToolbarMultiToolItem-module_icon__-HQal","iconSelected":"ToolbarMultiToolItem-module_iconSelected__hlO0J","portal":"ToolbarMultiToolItem-module_portal__2XJgz","portal-vertical":"ToolbarMultiToolItem-module_portal-vertical__A0DVe"};
7292
+ var classes$L = {"button-common-styles":"ToolbarMultiToolItem-module_button-common-styles__Fuxbo","scrollbar":"ToolbarMultiToolItem-module_scrollbar__XTmfz","icon":"ToolbarMultiToolItem-module_icon__-HQal","iconSelected":"ToolbarMultiToolItem-module_iconSelected__hlO0J","portal":"ToolbarMultiToolItem-module_portal__2XJgz","portal-vertical":"ToolbarMultiToolItem-module_portal-vertical__A0DVe"};
7302
7293
 
7303
7294
  function usePortalOpening(_ref) {
7304
7295
  var _ref2 = _slicedToArray__default["default"](_ref, 3),
@@ -7417,7 +7408,7 @@ var ToolbarMultiToolItem = function ToolbarMultiToolItem(props) {
7417
7408
  portalClassName = _chooseMultiTool2[1];
7418
7409
  return displayMultiToolItem ? jsxRuntime.jsxs("div", {
7419
7410
  ref: ref,
7420
- className: classes$K.root,
7411
+ className: classes$L.root,
7421
7412
  children: [jsxRuntime.jsx(ActionButton, _objectSpread$16(_objectSpread$16({}, actionButtonProps), {}, {
7422
7413
  className: className,
7423
7414
  name: currentId,
@@ -7425,12 +7416,12 @@ var ToolbarMultiToolItem = function ToolbarMultiToolItem(props) {
7425
7416
  status: currentStatus,
7426
7417
  selected: selected
7427
7418
  })), !isOpen && jsxRuntime.jsx(Icon, {
7428
- className: "".concat(classes$K.icon, " ").concat((currentStatus === null || currentStatus === void 0 ? void 0 : currentStatus.selected) && classes$K.iconSelected),
7419
+ className: "".concat(classes$L.icon, " ").concat((currentStatus === null || currentStatus === void 0 ? void 0 : currentStatus.selected) && classes$L.iconSelected),
7429
7420
  name: "dropdown",
7430
7421
  onClick: onOpenOptions
7431
7422
  }), isOpen ? jsxRuntime.jsx(Portal, {
7432
7423
  isOpen: isOpen,
7433
- className: clsx__default["default"](classes$K.portal, vertical && classes$K['portal-vertical'], portalClassName),
7424
+ className: clsx__default["default"](classes$L.portal, vertical && classes$L['portal-vertical'], portalClassName),
7434
7425
  style: portalStyle,
7435
7426
  children: jsxRuntime.jsx(Component, {
7436
7427
  options: options,
@@ -7515,7 +7506,7 @@ var TemplatesList = function TemplatesList(props) {
7515
7506
  });
7516
7507
  };
7517
7508
 
7518
- var classes$J = {"button-common-styles":"BottomToolbar-module_button-common-styles__PbtE9","scrollbar":"BottomToolbar-module_scrollbar__i1f8P","group":"BottomToolbar-module_group__b-pGt","root":"BottomToolbar-module_root__kjkSm"};
7509
+ var classes$K = {"button-common-styles":"BottomToolbar-module_button-common-styles__PbtE9","scrollbar":"BottomToolbar-module_scrollbar__i1f8P","group":"BottomToolbar-module_group__b-pGt","root":"BottomToolbar-module_root__kjkSm"};
7519
7510
 
7520
7511
  var _excluded$A = ["className"];
7521
7512
  function ownKeys$15(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; }
@@ -7524,7 +7515,7 @@ var Group$1 = function Group(_ref) {
7524
7515
  var children = _ref.children,
7525
7516
  className = _ref.className;
7526
7517
  return jsxRuntime.jsx("div", {
7527
- className: clsx__default["default"](classes$J.group, className),
7518
+ className: clsx__default["default"](classes$K.group, className),
7528
7519
  children: children
7529
7520
  });
7530
7521
  };
@@ -7536,7 +7527,7 @@ var BottomToolbar = function BottomToolbar(props) {
7536
7527
  indigoVerification = rest.indigoVerification,
7537
7528
  onAction = rest.onAction;
7538
7529
  return jsxRuntime.jsxs("div", {
7539
- className: clsx__default["default"](classes$J.root, className),
7530
+ className: clsx__default["default"](classes$K.root, className),
7540
7531
  children: [jsxRuntime.jsx(Group$1, {
7541
7532
  children: jsxRuntime.jsx(TemplatesList, {
7542
7533
  active: active,
@@ -8113,7 +8104,7 @@ function showFunctionalGroupsTooltip(editor) {
8113
8104
  if (closestCollapsibleStructures) {
8114
8105
  var _editor$struct;
8115
8106
  var sGroup = (_editor$struct = editor.struct()) === null || _editor$struct === void 0 ? void 0 : _editor$struct.sgroups.get(closestCollapsibleStructures.id);
8116
- if (sGroup && !sGroup.data.expanded) {
8107
+ if (sGroup && !sGroup.data.expanded && sGroup.hovering) {
8117
8108
  var groupName = sGroup.data.name;
8118
8109
  var groupStruct = ketcherCore.FunctionalGroup.getFunctionalGroupByName(groupName);
8119
8110
  infoPanelData = {
@@ -8522,7 +8513,7 @@ var selectOptions$2 = makeItems(['select-rectangle', 'select-lasso', 'select-fra
8522
8513
  var arrowsOptions = makeItems(['reaction-arrow-open-angle', 'reaction-arrow-filled-triangle', 'reaction-arrow-filled-bow', 'reaction-arrow-dashed-open-angle', 'reaction-arrow-failed', 'reaction-arrow-both-ends-filled-triangle', 'reaction-arrow-equilibrium-filled-half-bow', 'reaction-arrow-equilibrium-filled-triangle', 'reaction-arrow-equilibrium-open-angle', 'reaction-arrow-unbalanced-equilibrium-filled-half-bow', 'reaction-arrow-unbalanced-equilibrium-open-half-angle', 'reaction-arrow-unbalanced-equilibrium-large-filled-half-bow', 'reaction-arrow-unbalanced-equilibrium-filled-half-triangle', 'reaction-arrow-elliptical-arc-arrow-filled-bow', 'reaction-arrow-elliptical-arc-arrow-filled-triangle', 'reaction-arrow-elliptical-arc-arrow-open-angle', 'reaction-arrow-elliptical-arc-arrow-open-half-angle']);
8523
8514
  var mappingOptions = makeItems(['reaction-map', 'reaction-unmap', 'reaction-automap']);
8524
8515
 
8525
- var classes$I = {"scroll":"ArrowScroll-module_scroll__h9kCx","button":"ArrowScroll-module_button__ygMgL","down":"ArrowScroll-module_down__yDzZX","up":"ArrowScroll-module_up__Q1ubd"};
8516
+ var classes$J = {"scroll":"ArrowScroll-module_scroll__h9kCx","button":"ArrowScroll-module_button__ygMgL","down":"ArrowScroll-module_down__yDzZX","up":"ArrowScroll-module_up__Q1ubd"};
8526
8517
 
8527
8518
  function useSettingsContext() {
8528
8519
  return React__default["default"].useContext(settingsContext);
@@ -8641,7 +8632,7 @@ var ArrowScroll = function ArrowScroll(_ref) {
8641
8632
  };
8642
8633
  }, [endInView]);
8643
8634
  return jsxRuntime.jsxs("div", {
8644
- className: classes$I.scroll,
8635
+ className: classes$J.scroll,
8645
8636
  children: [endInView ? jsxRuntime.jsx(jsxRuntime.Fragment, {}) : jsxRuntime.jsx("button", {
8646
8637
  onClick: function onClick() {
8647
8638
  return scrollDown();
@@ -8652,7 +8643,7 @@ var ArrowScroll = function ArrowScroll(_ref) {
8652
8643
  onMouseDown: function onMouseDown() {
8653
8644
  return setScrollDown(true);
8654
8645
  },
8655
- className: clsx__default["default"](classes$I.button, classes$I.down),
8646
+ className: clsx__default["default"](classes$J.button, classes$J.down),
8656
8647
  children: "\u25BC"
8657
8648
  }), startInView ? jsxRuntime.jsx(jsxRuntime.Fragment, {}) : jsxRuntime.jsx("button", {
8658
8649
  onClick: function onClick() {
@@ -8664,7 +8655,7 @@ var ArrowScroll = function ArrowScroll(_ref) {
8664
8655
  onMouseDown: function onMouseDown() {
8665
8656
  return setScrollUp(true);
8666
8657
  },
8667
- className: clsx__default["default"](classes$I.button, classes$I.up),
8658
+ className: clsx__default["default"](classes$J.button, classes$J.up),
8668
8659
  children: "\u25B2"
8669
8660
  })]
8670
8661
  });
@@ -8750,7 +8741,7 @@ var Transform = function Transform(props) {
8750
8741
  });
8751
8742
  };
8752
8743
 
8753
- var classes$H = {"button-common-styles":"LeftToolbar-module_button-common-styles__WgnON","scrollbar":"LeftToolbar-module_scrollbar__OBwid","group":"LeftToolbar-module_group__0s41t","root":"LeftToolbar-module_root__yhhZm","buttons":"LeftToolbar-module_buttons__lnIjn","borderOff":"LeftToolbar-module_borderOff__om425","groupItem":"LeftToolbar-module_groupItem__OqQu0"};
8744
+ var classes$I = {"button-common-styles":"LeftToolbar-module_button-common-styles__WgnON","scrollbar":"LeftToolbar-module_scrollbar__OBwid","group":"LeftToolbar-module_group__0s41t","root":"LeftToolbar-module_root__yhhZm","buttons":"LeftToolbar-module_buttons__lnIjn","borderOff":"LeftToolbar-module_borderOff__om425","groupItem":"LeftToolbar-module_groupItem__OqQu0"};
8754
8745
 
8755
8746
  var _excluded$v = ["className"];
8756
8747
  function ownKeys$T(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; }
@@ -8810,7 +8801,7 @@ var LeftToolbar = function LeftToolbar(props) {
8810
8801
  });
8811
8802
  }
8812
8803
  return visibleItems.length ? jsxRuntime.jsx("div", {
8813
- className: clsx__default["default"](classes$H.group, className),
8804
+ className: clsx__default["default"](classes$I.group, className),
8814
8805
  children: visibleItems.map(function (item) {
8815
8806
  switch (item.id) {
8816
8807
  case 'bond-common':
@@ -8841,16 +8832,16 @@ var LeftToolbar = function LeftToolbar(props) {
8841
8832
  }) : null;
8842
8833
  };
8843
8834
  return jsxRuntime.jsxs("div", {
8844
- className: clsx__default["default"](classes$H.root, className),
8835
+ className: clsx__default["default"](classes$I.root, className),
8845
8836
  ref: ref,
8846
8837
  children: [jsxRuntime.jsxs("div", {
8847
- className: classes$H.buttons,
8838
+ className: classes$I.buttons,
8848
8839
  ref: scrollRef,
8849
8840
  children: [jsxRuntime.jsx("div", {
8850
- className: classes$H.listener,
8841
+ className: classes$I.listener,
8851
8842
  ref: startRef,
8852
8843
  children: jsxRuntime.jsx(Group, {
8853
- className: classes$H.groupItem,
8844
+ className: classes$I.groupItem,
8854
8845
  items: [{
8855
8846
  id: 'hand'
8856
8847
  }, {
@@ -8861,7 +8852,7 @@ var LeftToolbar = function LeftToolbar(props) {
8861
8852
  }]
8862
8853
  })
8863
8854
  }), jsxRuntime.jsx(Group, {
8864
- className: classes$H.groupItem,
8855
+ className: classes$I.groupItem,
8865
8856
  items: [{
8866
8857
  id: 'bonds',
8867
8858
  options: [].concat(_toConsumableArray__default["default"](bondCommon), _toConsumableArray__default["default"](bondQuery), _toConsumableArray__default["default"](bondSpecial), _toConsumableArray__default["default"](bondStereo))
@@ -8869,30 +8860,30 @@ var LeftToolbar = function LeftToolbar(props) {
8869
8860
  id: 'chain'
8870
8861
  }]
8871
8862
  }), jsxRuntime.jsx(Group, {
8872
- className: classes$H.groupItem,
8863
+ className: classes$I.groupItem,
8873
8864
  items: [{
8874
8865
  id: 'enhanced-stereo'
8875
8866
  }]
8876
8867
  }), jsxRuntime.jsx(Group, {
8877
- className: classes$H.groupItem,
8868
+ className: classes$I.groupItem,
8878
8869
  items: [{
8879
8870
  id: 'charge-plus'
8880
8871
  }, {
8881
8872
  id: 'charge-minus'
8882
8873
  }]
8883
8874
  }), jsxRuntime.jsx(Group, {
8884
- className: classes$H.groupItem,
8875
+ className: classes$I.groupItem,
8885
8876
  items: [{
8886
8877
  id: 'transforms',
8887
8878
  options: transformOptions
8888
8879
  }]
8889
8880
  }), jsxRuntime.jsx(Group, {
8890
- className: classes$H.groupItem,
8881
+ className: classes$I.groupItem,
8891
8882
  items: [{
8892
8883
  id: 'sgroup'
8893
8884
  }]
8894
8885
  }), jsxRuntime.jsx(Group, {
8895
- className: classes$H.groupItem,
8886
+ className: classes$I.groupItem,
8896
8887
  items: [{
8897
8888
  id: 'reaction-plus'
8898
8889
  }, {
@@ -8903,17 +8894,17 @@ var LeftToolbar = function LeftToolbar(props) {
8903
8894
  options: mappingOptions
8904
8895
  }]
8905
8896
  }), jsxRuntime.jsx("div", {
8906
- className: classes$H.listener,
8897
+ className: classes$I.listener,
8907
8898
  ref: sizeRef,
8908
8899
  children: jsxRuntime.jsx(Group, {
8909
- className: classes$H.groupItem,
8900
+ className: classes$I.groupItem,
8910
8901
  items: [{
8911
8902
  id: 'rgroup',
8912
8903
  options: rGroupOptions
8913
8904
  }]
8914
8905
  })
8915
8906
  }), jsxRuntime.jsx(Group, {
8916
- className: classes$H.groupItem,
8907
+ className: classes$I.groupItem,
8917
8908
  items: [{
8918
8909
  id: 'shapes',
8919
8910
  options: shapeOptions
@@ -8921,7 +8912,7 @@ var LeftToolbar = function LeftToolbar(props) {
8921
8912
  }), jsxRuntime.jsx("div", {
8922
8913
  ref: endRef,
8923
8914
  children: jsxRuntime.jsx(Group, {
8924
- className: classes$H.groupItem,
8915
+ className: classes$I.groupItem,
8925
8916
  items: [{
8926
8917
  id: 'text'
8927
8918
  }]
@@ -8962,7 +8953,7 @@ var mapDispatchToProps$h = function mapDispatchToProps(dispatch) {
8962
8953
  };
8963
8954
  var LeftToolbarContainer = reactRedux.connect(mapStateToProps$i, mapDispatchToProps$h)(LeftToolbar);
8964
8955
 
8965
- var classes$G = {"button-common-styles":"Atom-module_button-common-styles__j3EUJ","scrollbar":"Atom-module_scrollbar__iO-Ni","atom":"Atom-module_atom__g2RUu"};
8956
+ var classes$H = {"button-common-styles":"Atom-module_button-common-styles__j3EUJ","scrollbar":"Atom-module_scrollbar__iO-Ni","atom":"Atom-module_atom__g2RUu"};
8966
8957
 
8967
8958
  var _excluded$u = ["el", "shortcut", "selected"];
8968
8959
  function ownKeys$S(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; }
@@ -8974,7 +8965,7 @@ function Atom$1(_ref) {
8974
8965
  props = _objectWithoutProperties__default["default"](_ref, _excluded$u);
8975
8966
  return jsxRuntime.jsx("button", _objectSpread$S(_objectSpread$S({
8976
8967
  title: shortcut ? "".concat(el.title, " (").concat(shortcut, ")") : el.title,
8977
- className: clsx__default["default"](classes$G.atom, {
8968
+ className: clsx__default["default"](classes$H.atom, {
8978
8969
  selected: selected
8979
8970
  }),
8980
8971
  value: el.number
@@ -9353,7 +9344,7 @@ var AtomsList = React.forwardRef(function (props, ref) {
9353
9344
  });
9354
9345
  });
9355
9346
 
9356
- var classes$F = {"button-common-styles":"RightToolbar-module_button-common-styles__fNlqY","scrollbar":"RightToolbar-module_scrollbar__2Q0UU","group":"RightToolbar-module_group__3mhUx","root":"RightToolbar-module_root__1D5hp","atomsList":"RightToolbar-module_atomsList__ar08-","buttons":"RightToolbar-module_buttons__YxRHI"};
9347
+ var classes$G = {"button-common-styles":"RightToolbar-module_button-common-styles__fNlqY","scrollbar":"RightToolbar-module_scrollbar__2Q0UU","group":"RightToolbar-module_group__3mhUx","root":"RightToolbar-module_root__1D5hp","atomsList":"RightToolbar-module_atomsList__ar08-","buttons":"RightToolbar-module_buttons__YxRHI"};
9357
9348
 
9358
9349
  var _excluded$t = ["className"];
9359
9350
  function ownKeys$R(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; }
@@ -9362,7 +9353,7 @@ var Group = function Group(_ref) {
9362
9353
  var children = _ref.children,
9363
9354
  className = _ref.className;
9364
9355
  return jsxRuntime.jsx("div", {
9365
- className: clsx__default["default"](classes$F.group, className),
9356
+ className: clsx__default["default"](classes$G.group, className),
9366
9357
  children: children
9367
9358
  });
9368
9359
  };
@@ -9393,12 +9384,12 @@ var RightToolbar = function RightToolbar(props) {
9393
9384
  scrollRef.current.scrollTop += sizeRef.current.offsetHeight;
9394
9385
  };
9395
9386
  return jsxRuntime.jsxs("div", {
9396
- className: clsx__default["default"](classes$F.root, className),
9387
+ className: clsx__default["default"](classes$G.root, className),
9397
9388
  children: [jsxRuntime.jsxs("div", {
9398
- className: classes$F.buttons,
9389
+ className: classes$G.buttons,
9399
9390
  ref: scrollRef,
9400
9391
  children: [jsxRuntime.jsxs(Group, {
9401
- className: classes$F.atomsList,
9392
+ className: classes$G.atomsList,
9402
9393
  children: [jsxRuntime.jsx(AtomsList, {
9403
9394
  ref: startRef,
9404
9395
  atoms: basicAtoms,
@@ -10520,12 +10511,14 @@ var AtomTool = function () {
10520
10511
  }, {
10521
10512
  key: "mousemove",
10522
10513
  value: function mousemove(event) {
10523
- this.editor.hoverIcon.show();
10524
10514
  var rnd = this.editor.render;
10525
10515
  if (!this.dragCtx || !this.dragCtx.item) {
10516
+ this.editor.hoverIcon.show();
10526
10517
  this.editor.hoverIcon.updatePosition();
10527
10518
  this.editor.hover(this.editor.findItem(event, ['atoms', 'functionalGroups']), null, event);
10528
10519
  return;
10520
+ } else {
10521
+ this.editor.hoverIcon.hide();
10529
10522
  }
10530
10523
  var dragCtx = this.dragCtx;
10531
10524
  var ci = this.editor.findItem(event, ['atoms']);
@@ -10542,7 +10535,7 @@ var AtomTool = function () {
10542
10535
  });
10543
10536
  var newAtomPos = utils.calcNewAtomPos(atom === null || atom === void 0 ? void 0 : atom.pp, rnd.page2obj(event), event.ctrlKey);
10544
10537
  if (dragCtx.action) dragCtx.action.perform(rnd.ctab);
10545
- dragCtx.action = ketcherCore.fromBondAddition(rnd.ctab, _classPrivateFieldGet__default["default"](this, _bondProps), dragCtx.item.id, Object.assign({}, this.atomProps), newAtomPos, newAtomPos)[0];
10538
+ dragCtx.action = ketcherCore.fromBondAddition(rnd.ctab, _classPrivateFieldGet__default["default"](this, _bondProps), dragCtx.item.id, Object.assign({}, this.atomProps), undefined, newAtomPos)[0];
10546
10539
  this.editor.update(dragCtx.action, true);
10547
10540
  }
10548
10541
  }, {
@@ -10765,7 +10758,7 @@ var BondTool = function () {
10765
10758
  var struct = this.editor.render.ctab;
10766
10759
  var molecule = struct.molecule;
10767
10760
  var functionalGroups = molecule.functionalGroups;
10768
- var ci = this.editor.findItem(event, ['atoms', 'bonds']);
10761
+ var ci = this.editor.findItem(event, ['atoms', 'bonds', 'functionalGroups']);
10769
10762
  var atomResult = [];
10770
10763
  var bondResult = [];
10771
10764
  var result = [];
@@ -10818,12 +10811,19 @@ var BondTool = function () {
10818
10811
  });
10819
10812
  return;
10820
10813
  }
10814
+ var attachmentAtomId;
10815
+ if ((ci === null || ci === void 0 ? void 0 : ci.map) === 'functionalGroups') {
10816
+ attachmentAtomId = ketcherCore.SGroup.getAttachmentAtomIdBySGroupId(ci.id, molecule);
10817
+ }
10821
10818
  var rnd = this.editor.render;
10822
10819
  this.editor.hover(null);
10823
10820
  this.editor.selection(null);
10824
10821
  this.dragCtx = {
10825
10822
  xy0: rnd.page2obj(event),
10826
- item: this.editor.findItem(event, ['atoms', 'bonds'])
10823
+ item: attachmentAtomId === undefined ? ci : {
10824
+ map: 'atoms',
10825
+ id: attachmentAtomId
10826
+ }
10827
10827
  };
10828
10828
  if (!this.dragCtx.item)
10829
10829
  delete this.dragCtx.item;
@@ -10848,24 +10848,26 @@ var BondTool = function () {
10848
10848
  info: degrees + 'º'
10849
10849
  });
10850
10850
  if (!('item' in dragCtx) || dragCtx.item.map === 'atoms') {
10851
- var _endAtom;
10851
+ var _endAtom2;
10852
10852
  if ('action' in dragCtx) dragCtx.action.perform(rnd.ctab);
10853
10853
  var beginAtom;
10854
10854
  var endAtom;
10855
10855
  var beginPos;
10856
10856
  var endPos;
10857
- var extraNeighbour = [];
10858
10857
  if ('item' in dragCtx && dragCtx.item.map === 'atoms') {
10859
10858
  beginAtom = dragCtx.item.id;
10860
10859
  endAtom = editor.findItem(event, ['atoms'], dragCtx.item);
10861
10860
  var closestSGroup = editor.findItem(event, ['functionalGroups']);
10862
10861
  if (closestSGroup && ketcherCore.FunctionalGroup.isContractedFunctionalGroup(closestSGroup.id, functionalGroups)) {
10863
- var sGroup = sgroups.get(closestSGroup.id);
10864
- var sGroupAtoms = ketcherCore.SGroup.getAtoms(molecule, sGroup === null || sGroup === void 0 ? void 0 : sGroup.item);
10865
- endAtom = {
10866
- id: sGroupAtoms[0],
10867
- map: 'atoms'
10868
- };
10862
+ var closestAttachmentAtomId = ketcherCore.SGroup.getAttachmentAtomIdBySGroupId(closestSGroup.id, molecule);
10863
+ var isSaltOrSolvent = closestAttachmentAtomId === undefined;
10864
+ var isBeginFunctionalGroupItself = closestAttachmentAtomId === beginAtom;
10865
+ if (!isSaltOrSolvent && !isBeginFunctionalGroupItself) {
10866
+ endAtom = {
10867
+ id: closestAttachmentAtomId,
10868
+ map: 'atoms'
10869
+ };
10870
+ }
10869
10871
  }
10870
10872
  var fGroupId = endAtom && ketcherCore.FunctionalGroup.findFunctionalGroupByAtom(functionalGroups, endAtom.id);
10871
10873
  var fGroup = typeof fGroupId === 'number' && sgroups.get(fGroupId);
@@ -10876,24 +10878,25 @@ var BondTool = function () {
10876
10878
  });
10877
10879
  endAtom = null;
10878
10880
  }
10879
- if (endAtom && fGroup && endAtom.id === (fGroupAtoms === null || fGroupAtoms === void 0 ? void 0 : fGroupAtoms[0])) {
10880
- var atomNeighbours = molecule.atomGetNeighbors(endAtom.id);
10881
- atomNeighbours === null || atomNeighbours === void 0 ? void 0 : atomNeighbours.forEach(function (nei) {
10882
- !(fGroupAtoms !== null && fGroupAtoms !== void 0 && fGroupAtoms.includes(nei.aid)) && !extraNeighbour.includes(nei.aid) && extraNeighbour.push(nei.aid);
10883
- });
10884
- }
10885
- if (extraNeighbour.length >= 1) {
10886
- endAtom = null;
10887
- }
10888
10881
  } else {
10882
+ var _endAtom;
10889
10883
  beginAtom = this.atomProps;
10890
10884
  beginPos = dragCtx.xy0;
10891
- endAtom = editor.findItem(event, ['atoms']);
10885
+ endAtom = editor.findItem(event, ['atoms', 'functionalGroups']);
10892
10886
  var atomResult = [];
10893
10887
  var result = [];
10894
10888
  if (endAtom && endAtom.map === 'atoms' && functionalGroups.size && this.dragCtx) {
10895
10889
  var atomId = ketcherCore.FunctionalGroup.atomsInFunctionalGroup(functionalGroups, endAtom.id);
10896
10890
  if (atomId !== null) atomResult.push(atomId);
10891
+ } else if (((_endAtom = endAtom) === null || _endAtom === void 0 ? void 0 : _endAtom.map) === 'functionalGroups') {
10892
+ var functionalGroup = molecule.functionalGroups.get(endAtom.id);
10893
+ if (!ketcherCore.SGroup.isSaltOrSolvent((functionalGroup === null || functionalGroup === void 0 ? void 0 : functionalGroup.name) || '')) {
10894
+ var attachmentAtomId = ketcherCore.SGroup.getAttachmentAtomIdBySGroupId(endAtom.id, molecule);
10895
+ endAtom = attachmentAtomId === undefined ? null : {
10896
+ map: 'atoms',
10897
+ id: attachmentAtomId
10898
+ };
10899
+ }
10897
10900
  }
10898
10901
  if (atomResult.length > 0) {
10899
10902
  var _iterator3 = _createForOfIteratorHelper$a(atomResult),
@@ -10919,7 +10922,7 @@ var BondTool = function () {
10919
10922
  }
10920
10923
  }
10921
10924
  var dist = Number.MAX_VALUE;
10922
- if (((_endAtom = endAtom) === null || _endAtom === void 0 ? void 0 : _endAtom.map) === 'atoms') {
10925
+ if (((_endAtom2 = endAtom) === null || _endAtom2 === void 0 ? void 0 : _endAtom2.map) === 'atoms') {
10923
10926
  endAtom = endAtom.id;
10924
10927
  } else {
10925
10928
  endAtom = this.atomProps;
@@ -10929,7 +10932,7 @@ var BondTool = function () {
10929
10932
  endPos = utils.calcNewAtomPos(beginPos, xy1, event.ctrlKey);
10930
10933
  } else {
10931
10934
  var atom = rnd.ctab.molecule.atoms.get(beginAtom);
10932
- beginPos = utils.calcNewAtomPos(atom === null || atom === void 0 ? void 0 : atom.pp.get_xy0(), xy1, event.ctrlKey);
10935
+ endPos = utils.calcNewAtomPos(atom === null || atom === void 0 ? void 0 : atom.pp.get_xy0(), xy1, event.ctrlKey);
10933
10936
  }
10934
10937
  }
10935
10938
  if (dist > 0.3) {
@@ -10950,7 +10953,7 @@ var BondTool = function () {
10950
10953
  return true;
10951
10954
  }
10952
10955
  }
10953
- this.editor.hover(this.editor.findItem(event, ['atoms', 'bonds']), null, event);
10956
+ this.editor.hover(this.editor.findItem(event, ['atoms', 'bonds', 'functionalGroups']), null, event);
10954
10957
  return true;
10955
10958
  }
10956
10959
  }, {
@@ -10973,7 +10976,9 @@ var BondTool = function () {
10973
10976
  }, ketcherCore.Vec2.diff(xy, v), ketcherCore.Vec2.sum(xy, v));
10974
10977
  this.editor.update(bondAddition[0]);
10975
10978
  } else if (dragCtx.item.map === 'atoms') {
10976
- this.editor.update(ketcherCore.fromBondAddition(rnd.ctab, this.bondProps, dragCtx.item.id, undefined)[0]);
10979
+ this.editor.update(ketcherCore.fromBondAddition(rnd.ctab, this.bondProps, dragCtx.item.id, {
10980
+ label: 'C'
10981
+ })[0]);
10977
10982
  delete this.dragCtx.existedBond;
10978
10983
  } else if (dragCtx.item.map === 'bonds') {
10979
10984
  var bondProps = Object.assign({}, this.bondProps);
@@ -11047,7 +11052,7 @@ var ChainTool = function () {
11047
11052
  var molecule = struct.molecule;
11048
11053
  var functionalGroups = molecule.functionalGroups;
11049
11054
  var rnd = this.editor.render;
11050
- var ci = this.editor.findItem(event, ['atoms', 'bonds']);
11055
+ var ci = this.editor.findItem(event, ['atoms', 'bonds', 'functionalGroups']);
11051
11056
  var atomResult = [];
11052
11057
  var bondResult = [];
11053
11058
  var result = [];
@@ -11115,6 +11120,18 @@ var ChainTool = function () {
11115
11120
  });
11116
11121
  atomLongtapEvent(this, rnd);
11117
11122
  }
11123
+ if ((ci === null || ci === void 0 ? void 0 : ci.map) === 'functionalGroups') {
11124
+ var functionalGroup = molecule.functionalGroups.get(ci.id);
11125
+ if (!ketcherCore.SGroup.isSaltOrSolvent((functionalGroup === null || functionalGroup === void 0 ? void 0 : functionalGroup.name) || '')) {
11126
+ var sGroupId = ci.id;
11127
+ var sGroup = molecule.sgroups.get(sGroupId);
11128
+ var attachmentAtomId = sGroup === null || sGroup === void 0 ? void 0 : sGroup.getAttAtomId(molecule);
11129
+ this.dragCtx.item = {
11130
+ map: 'atoms',
11131
+ id: attachmentAtomId
11132
+ };
11133
+ }
11134
+ }
11118
11135
  if (!this.dragCtx.item)
11119
11136
  delete this.dragCtx.item;
11120
11137
  return true;
@@ -11125,7 +11142,7 @@ var ChainTool = function () {
11125
11142
  var editor = this.editor;
11126
11143
  var restruct = editor.render.ctab;
11127
11144
  var dragCtx = this.dragCtx;
11128
- editor.hover(this.editor.findItem(event, ['atoms', 'bonds']), null, event);
11145
+ editor.hover(this.editor.findItem(event, ['atoms', 'bonds', 'functionalGroups']), null, event);
11129
11146
  if (!dragCtx) {
11130
11147
  return true;
11131
11148
  }
@@ -11704,7 +11721,7 @@ var SGroupTool = function () {
11704
11721
  _iterator2.f();
11705
11722
  }
11706
11723
  }
11707
- if (atomFromStruct && ketcherCore.FunctionalGroup.isAtomInContractedFunctionalGroup(atomFromStruct, sgroups, functionalGroups, false)) {
11724
+ if (atomFromStruct && (ketcherCore.FunctionalGroup.isAtomInContractedFunctionalGroup(atomFromStruct, sgroups, functionalGroups, false) || ketcherCore.SGroup.isAtomInContractedSGroup(atomFromStruct, sgroups))) {
11708
11725
  var _newSelected$atoms, _newSelected$bonds;
11709
11726
  var sgroupAtoms = actualSgroupId !== undefined && ketcherCore.SGroup.getAtoms(molecule, sgroups.get(actualSgroupId));
11710
11727
  var sgroupBonds = actualSgroupId !== undefined && ketcherCore.SGroup.getBonds(molecule, sgroups.get(actualSgroupId));
@@ -11766,7 +11783,7 @@ var SGroupTool = function () {
11766
11783
  var _struct$atoms$get2;
11767
11784
  var atomId = ketcherCore.FunctionalGroup.atomsInFunctionalGroup(functionalGroups, ci.id);
11768
11785
  var atomFromStruct = atomId !== null && ((_struct$atoms$get2 = struct.atoms.get(atomId)) === null || _struct$atoms$get2 === void 0 ? void 0 : _struct$atoms$get2.a);
11769
- if (atomFromStruct && !ketcherCore.FunctionalGroup.isAtomInContractedFunctionalGroup(atomFromStruct, sgroups, functionalGroups, true)) {
11786
+ if (atomFromStruct && !(ketcherCore.FunctionalGroup.isAtomInContractedFunctionalGroup(atomFromStruct, sgroups, functionalGroups, true) || ketcherCore.SGroup.isAtomInContractedSGroup(atomFromStruct, sgroups))) {
11770
11787
  atomResult.push(atomId);
11771
11788
  }
11772
11789
  }
@@ -11774,7 +11791,7 @@ var SGroupTool = function () {
11774
11791
  var _struct$bonds$get;
11775
11792
  var bondId = ketcherCore.FunctionalGroup.bondsInFunctionalGroup(molecule, functionalGroups, ci.id);
11776
11793
  var bondFromStruct = bondId !== null && ((_struct$bonds$get = struct.bonds.get(bondId)) === null || _struct$bonds$get === void 0 ? void 0 : _struct$bonds$get.b);
11777
- if (bondFromStruct && !ketcherCore.FunctionalGroup.isBondInContractedFunctionalGroup(bondFromStruct, sgroups, functionalGroups)) {
11794
+ if (bondFromStruct && !(ketcherCore.FunctionalGroup.isBondInContractedFunctionalGroup(bondFromStruct, sgroups, functionalGroups) || ketcherCore.SGroup.isBondInContractedSGroup(bondFromStruct, sgroups))) {
11778
11795
  bondResult.push(bondId);
11779
11796
  }
11780
11797
  }
@@ -11895,7 +11912,7 @@ var SGroupTool = function () {
11895
11912
  _iterator7.f();
11896
11913
  }
11897
11914
  }
11898
- if (atomFromStruct && ketcherCore.FunctionalGroup.isAtomInContractedFunctionalGroup(atomFromStruct, sgroups, functionalGroups, true)) {
11915
+ if (atomFromStruct && (ketcherCore.FunctionalGroup.isAtomInContractedFunctionalGroup(atomFromStruct, sgroups, functionalGroups, true) || ketcherCore.SGroup.isAtomInContractedSGroup(atomFromStruct, sgroups))) {
11899
11916
  var _struct$sgroups$get, _struct$sgroups$get2, _newSelected$atoms2, _newSelected$bonds2;
11900
11917
  var sgroupAtoms = actualSgroupId !== undefined && ketcherCore.SGroup.getAtoms(molecule, (_struct$sgroups$get = struct.sgroups.get(actualSgroupId)) === null || _struct$sgroups$get === void 0 ? void 0 : _struct$sgroups$get.item);
11901
11918
  var sgroupBonds = actualSgroupId !== undefined && ketcherCore.SGroup.getBonds(molecule, (_struct$sgroups$get2 = struct.sgroups.get(actualSgroupId)) === null || _struct$sgroups$get2 === void 0 ? void 0 : _struct$sgroups$get2.item);
@@ -12192,8 +12209,16 @@ function dropAndMerge(editor, mergeItems, action) {
12192
12209
  if (isMerging) {
12193
12210
  var expandGroupsAction = getExpandGroupsInMergeAction(editor.render.ctab, mergeItems);
12194
12211
  dropItemAction = dropItemAction.mergeWith(expandGroupsAction);
12212
+ if (mergeItems.atomToFunctionalGroup) {
12213
+ var _extractAttachmentAto = extractAttachmentAtom(mergeItems, editor),
12214
+ _extractAttachmentAto2 = _slicedToArray__default["default"](_extractAttachmentAto, 2),
12215
+ newMergeItems = _extractAttachmentAto2[0],
12216
+ extractAttachmentAtomAction = _extractAttachmentAto2[1];
12217
+ mergeItems = newMergeItems;
12218
+ dropItemAction = dropItemAction.mergeWith(extractAttachmentAtomAction);
12219
+ }
12220
+ dropItemAction = ketcherCore.fromItemsFuse(restruct, mergeItems).mergeWith(dropItemAction);
12195
12221
  }
12196
- dropItemAction = ketcherCore.fromItemsFuse(restruct, mergeItems).mergeWith(dropItemAction);
12197
12222
  if (action) {
12198
12223
  dropItemAction = dropItemAction.mergeWith(action);
12199
12224
  }
@@ -12204,6 +12229,7 @@ function dropAndMerge(editor, mergeItems, action) {
12204
12229
  resizeCanvas: false
12205
12230
  });
12206
12231
  }
12232
+ return dropItemAction;
12207
12233
  }
12208
12234
  function getExpandGroupsInMergeAction(restruct, mergeItems) {
12209
12235
  var action = new ketcherCore.Action();
@@ -12217,6 +12243,36 @@ function getExpandGroupsInMergeAction(restruct, mergeItems) {
12217
12243
  }
12218
12244
  return action;
12219
12245
  }
12246
+ function extractAttachmentAtom(mergeItems, editor) {
12247
+ var _mergeItems$atomToFun;
12248
+ var struct = editor.struct();
12249
+ var reStruct = editor.render.ctab;
12250
+ var newMergeItems = {
12251
+ atoms: new Map(mergeItems.atoms),
12252
+ bonds: new Map(mergeItems.bonds)
12253
+ };
12254
+ var removeNonAttachmentAtoms = new ketcherCore.Action();
12255
+ var removeSGroup = new ketcherCore.Action();
12256
+ (_mergeItems$atomToFun = mergeItems.atomToFunctionalGroup) === null || _mergeItems$atomToFun === void 0 ? void 0 : _mergeItems$atomToFun.forEach(function (functionalGroupId, srcAtomId) {
12257
+ var sGroup = struct.sgroups.get(functionalGroupId);
12258
+ var attachmentAtomId = sGroup === null || sGroup === void 0 ? void 0 : sGroup.getAttAtomId(struct);
12259
+ if (attachmentAtomId) {
12260
+ var attachmentAtom = struct.atoms.get(attachmentAtomId);
12261
+ if (ketcherCore.SGroup.isAtomInContractedSGroup(attachmentAtom, struct.sgroups)) {
12262
+ return;
12263
+ }
12264
+ newMergeItems.atoms.set(srcAtomId, attachmentAtomId);
12265
+ removeNonAttachmentAtoms.mergeWith(ketcherCore.fromFragmentDeletion(reStruct, {
12266
+ atoms: _toConsumableArray__default["default"](ketcherCore.SGroup.getAtoms(struct, sGroup)).filter(function (atomId) {
12267
+ return atomId !== attachmentAtomId;
12268
+ }),
12269
+ bonds: _toConsumableArray__default["default"](ketcherCore.SGroup.getBonds(struct, sGroup))
12270
+ }));
12271
+ removeSGroup.mergeWith(ketcherCore.fromSgroupDeletion(reStruct, functionalGroupId));
12272
+ }
12273
+ });
12274
+ return [newMergeItems, removeNonAttachmentAtoms];
12275
+ }
12220
12276
 
12221
12277
  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; }
12222
12278
  function _objectSpread$Q(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$Q(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$Q(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
@@ -12225,29 +12281,6 @@ function getMergeItems(editor, items) {
12225
12281
  return ketcherCore.getItemsToFuse(editor, nonGroupItemsAndAttachPoints);
12226
12282
  }
12227
12283
 
12228
- function isAtomsArray(selectedElements) {
12229
- return Array.isArray(selectedElements) && (selectedElements === null || selectedElements === void 0 ? void 0 : selectedElements.every(function (element) {
12230
- return element instanceof ketcherCore.Atom;
12231
- }));
12232
- }
12233
- function generateCommonProperties(selectedElements) {
12234
- var normalizedAtom = fromElement(selectedElements[0]);
12235
- var properties = Object.getOwnPropertyNames(normalizedAtom);
12236
- var resultAtomAttributes = {};
12237
- properties.forEach(function (property) {
12238
- var uniqueValues = new Set();
12239
- selectedElements.forEach(function (element) {
12240
- uniqueValues.add(element[property]);
12241
- });
12242
- var allAtomsHaveTheSameValue = uniqueValues.size === 1;
12243
- if (allAtomsHaveTheSameValue) {
12244
- resultAtomAttributes[property] = normalizedAtom[property];
12245
- } else {
12246
- resultAtomAttributes[property] = '';
12247
- }
12248
- });
12249
- return resultAtomAttributes;
12250
- }
12251
12284
  function castAtomPropToType(property, value) {
12252
12285
  var typesMapping = {
12253
12286
  charge: Number,
@@ -12259,21 +12292,21 @@ function castAtomPropToType(property, value) {
12259
12292
  }
12260
12293
  return value;
12261
12294
  }
12262
- function updateOnlyChangedProperties(atomId, userChangedAtom, molecule) {
12263
- var unchangedAtom = molecule.atoms.get(atomId);
12264
- var updatedKeys = Object.getOwnPropertyNames(userChangedAtom).filter(function (key) {
12265
- return userChangedAtom[key] !== '';
12295
+ function updateOnlyChangedProperties(unchangedElement, userChangedElement) {
12296
+ var updatedKeys = Object.getOwnPropertyNames(userChangedElement).filter(function (key) {
12297
+ return userChangedElement[key] !== '';
12266
12298
  });
12267
- return Object.getOwnPropertyNames(unchangedAtom).reduce(function (updatedAtom, key) {
12268
- var isPropertyChanged = updatedKeys.includes(key);
12269
- if (isPropertyChanged) {
12270
- updatedAtom[key] = castAtomPropToType(key, userChangedAtom[key]);
12271
- } else {
12272
- updatedAtom[key] = unchangedAtom[key];
12273
- }
12274
- return updatedAtom;
12299
+ return Object.getOwnPropertyNames(unchangedElement).reduce(function (updatedElement, key) {
12300
+ updatedElement[key] = updatedKeys.includes(key) ? castAtomPropToType(key, userChangedElement[key]) : unchangedElement[key];
12301
+ return updatedElement;
12275
12302
  }, {});
12276
12303
  }
12304
+
12305
+ function isAtomsArray(selectedElements) {
12306
+ return Array.isArray(selectedElements) && (selectedElements === null || selectedElements === void 0 ? void 0 : selectedElements.every(function (element) {
12307
+ return element instanceof ketcherCore.Atom;
12308
+ }));
12309
+ }
12277
12310
  function updateSelectedAtoms(_ref) {
12278
12311
  var atoms = _ref.atoms,
12279
12312
  changeAtomPromise = _ref.changeAtomPromise,
@@ -12284,7 +12317,8 @@ function updateSelectedAtoms(_ref) {
12284
12317
  if (atoms) {
12285
12318
  Promise.resolve(changeAtomPromise).then(function (userChangedAtom) {
12286
12319
  atoms.forEach(function (atomId) {
12287
- var atomWithChangedProperties = updateOnlyChangedProperties(atomId, userChangedAtom, molecule);
12320
+ var unchangedAtom = molecule.atoms.get(atomId);
12321
+ var atomWithChangedProperties = updateOnlyChangedProperties(unchangedAtom, userChangedAtom);
12288
12322
  action.mergeWith(ketcherCore.fromAtomsAttrs(struct, atomId, atomWithChangedProperties, false));
12289
12323
  });
12290
12324
  editor.update(action);
@@ -12294,6 +12328,27 @@ function updateSelectedAtoms(_ref) {
12294
12328
  }
12295
12329
  }
12296
12330
 
12331
+ function updateSelectedBonds(_ref) {
12332
+ var bonds = _ref.bonds,
12333
+ changeBondPromise = _ref.changeBondPromise,
12334
+ editor = _ref.editor;
12335
+ var action = new ketcherCore.Action();
12336
+ var struct = editor.render.ctab;
12337
+ var molecule = struct.molecule;
12338
+ if (bonds) {
12339
+ Promise.resolve(changeBondPromise).then(function (userChangedBond) {
12340
+ bonds.forEach(function (bondId) {
12341
+ var unchangedBond = molecule.bonds.get(bondId);
12342
+ var bondWithChangedProperties = updateOnlyChangedProperties(unchangedBond, userChangedBond);
12343
+ action.mergeWith(ketcherCore.fromBondsAttrs(struct, bondId, bondWithChangedProperties, false));
12344
+ });
12345
+ editor.update(action);
12346
+ })["catch"](function () {
12347
+ return null;
12348
+ });
12349
+ }
12350
+ }
12351
+
12297
12352
  function _createForOfIteratorHelper$6(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray$6(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
12298
12353
  function _unsupportedIterableToArray$6(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray$6(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray$6(o, minLen); }
12299
12354
  function _arrayLikeToArray$6(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
@@ -12461,7 +12516,8 @@ var SelectTool = function () {
12461
12516
  if ((_this$dragCtx = this.dragCtx) !== null && _this$dragCtx !== void 0 && _this$dragCtx.stopTapping) this.dragCtx.stopTapping();
12462
12517
  var possibleSaltOrSolvent = struct.sgroups.get(selectedSgroups[selectedSgroups.length - 1]);
12463
12518
  var isDraggingSaltOrSolventOnStructure = ketcherCore.SGroup.isSaltOrSolvent(possibleSaltOrSolvent === null || possibleSaltOrSolvent === void 0 ? void 0 : possibleSaltOrSolvent.item.data.name);
12464
- if (this.dragCtx && (isDraggingSaltOrSolventOnStructure || this.isDraggingStructureOnSaltOrSolvent(this.dragCtx, struct.sgroups))) {
12519
+ var isDraggingCustomSgroupOnStructure = ketcherCore.SGroup.isSuperAtom(possibleSaltOrSolvent === null || possibleSaltOrSolvent === void 0 ? void 0 : possibleSaltOrSolvent.item) && !ketcherCore.FunctionalGroup.isFunctionalGroup(possibleSaltOrSolvent === null || possibleSaltOrSolvent === void 0 ? void 0 : possibleSaltOrSolvent.item);
12520
+ if (this.dragCtx && (isDraggingCustomSgroupOnStructure || isDraggingSaltOrSolventOnStructure || this.isDraggingStructureOnSaltOrSolvent(this.dragCtx, struct.sgroups))) {
12465
12521
  preventSaltAndSolventsMerge(struct, this.dragCtx, editor);
12466
12522
  delete this.dragCtx;
12467
12523
  }
@@ -12485,7 +12541,6 @@ var SelectTool = function () {
12485
12541
  var molecule = struct.molecule,
12486
12542
  sgroups = struct.sgroups;
12487
12543
  var functionalGroups = molecule.functionalGroups;
12488
- var rnd = editor.render;
12489
12544
  var ci = editor.findItem(event, ['atoms', 'bonds', 'sgroups', 'functionalGroups', 'sgroupData', 'texts'], null);
12490
12545
  var atomResult = [];
12491
12546
  var bondResult = [];
@@ -12494,7 +12549,7 @@ var SelectTool = function () {
12494
12549
  var _struct$atoms$get;
12495
12550
  var atomId = ketcherCore.FunctionalGroup.atomsInFunctionalGroup(functionalGroups, ci.id);
12496
12551
  var atomFromStruct = atomId !== null && ((_struct$atoms$get = struct.atoms.get(atomId)) === null || _struct$atoms$get === void 0 ? void 0 : _struct$atoms$get.a);
12497
- if (atomId !== null && !ketcherCore.FunctionalGroup.isAtomInContractedFunctionalGroup(
12552
+ if (atomFromStruct && !ketcherCore.FunctionalGroup.isAtomInContractedFunctionalGroup(
12498
12553
  atomFromStruct, sgroups, functionalGroups, true)) atomResult.push(atomId);
12499
12554
  }
12500
12555
  if (ci && functionalGroups && ci.map === 'bonds') {
@@ -12556,21 +12611,13 @@ var SelectTool = function () {
12556
12611
  changeAtomPromise: changeAtomPromise
12557
12612
  });
12558
12613
  } else if (ci.map === 'bonds') {
12559
- var _rnd$ctab$bonds$get;
12560
- var bond = (_rnd$ctab$bonds$get = rnd.ctab.bonds.get(ci.id)) === null || _rnd$ctab$bonds$get === void 0 ? void 0 : _rnd$ctab$bonds$get.b;
12561
- var rb = editor.event.bondEdit.dispatch(bond);
12562
- if (selection !== null && selection !== void 0 && selection.bonds) {
12563
- var action = new ketcherCore.Action();
12564
- var bondsSelection = selection.bonds;
12565
- Promise.resolve(rb).then(function (newbond) {
12566
- bondsSelection.forEach(function (bid) {
12567
- action.mergeWith(ketcherCore.fromBondsAttrs(struct, bid, newbond));
12568
- });
12569
- editor.update(action);
12570
- })["catch"](function () {
12571
- return null;
12572
- });
12573
- }
12614
+ var bonds = getSelectedBonds(selection, molecule);
12615
+ var changeBondPromise = editor.event.bondEdit.dispatch(bonds);
12616
+ updateSelectedBonds({
12617
+ bonds: (selection === null || selection === void 0 ? void 0 : selection.bonds) || [],
12618
+ changeBondPromise: changeBondPromise,
12619
+ editor: editor
12620
+ });
12574
12621
  } else if (ci.map === 'sgroups' && !ketcherCore.FunctionalGroup.isFunctionalGroup(molecule.sgroups.get(ci.id)) || ci.map === 'sgroupData') {
12575
12622
  editor.selection(closestToSel(ci));
12576
12623
  SGroupTool.sgroupDialog(editor, ci.id);
@@ -12705,12 +12752,24 @@ function getSelectedAtoms(selection, molecule) {
12705
12752
  }
12706
12753
  return [];
12707
12754
  }
12755
+ function getSelectedBonds(selection, molecule) {
12756
+ if (selection !== null && selection !== void 0 && selection.bonds) {
12757
+ return mapBondIdsToBonds(selection === null || selection === void 0 ? void 0 : selection.bonds, molecule);
12758
+ }
12759
+ return [];
12760
+ }
12708
12761
  function mapAtomIdsToAtoms(atomsIds, molecule) {
12709
12762
  return atomsIds.map(function (atomId) {
12710
12763
  var atomOrReAtom = molecule.atoms.get(atomId);
12711
12764
  return atomOrReAtom.a || atomOrReAtom;
12712
12765
  });
12713
12766
  }
12767
+ function mapBondIdsToBonds(bondsIds, molecule) {
12768
+ return bondsIds.map(function (bondId) {
12769
+ var bondOrReBond = molecule.bonds.get(bondId);
12770
+ return (bondOrReBond === null || bondOrReBond === void 0 ? void 0 : bondOrReBond.b) || bondOrReBond;
12771
+ });
12772
+ }
12714
12773
  function uniqArray(dest, add, reversible) {
12715
12774
  return add.reduce(function (_, item) {
12716
12775
  if (reversible) dest = fp.xor(dest, [item]);else if (!dest.includes(item)) dest.push(item);
@@ -13256,7 +13315,9 @@ var PasteTool = function () {
13256
13315
  } else {
13257
13316
  var action = this.action;
13258
13317
  delete this.action;
13259
- dropAndMerge(this.editor, this.mergeItems, action);
13318
+ if (!this.isSingleContractedGroup || !this.mergeItems) {
13319
+ this.editor.update(dropAndMerge(this.editor, this.mergeItems, action));
13320
+ }
13260
13321
  }
13261
13322
  }
13262
13323
  }, {
@@ -14118,6 +14179,47 @@ var TemplateTool = function () {
14118
14179
  editor.hoverIcon.updatePosition();
14119
14180
  }
14120
14181
  _createClass__default["default"](TemplateTool, [{
14182
+ key: "struct",
14183
+ get: function get() {
14184
+ return this.editor.render.ctab.molecule;
14185
+ }
14186
+ }, {
14187
+ key: "functionalGroups",
14188
+ get: function get() {
14189
+ return this.struct.functionalGroups;
14190
+ }
14191
+ }, {
14192
+ key: "isModeFunctionalGroup",
14193
+ get: function get() {
14194
+ return this.mode === MODES.FG;
14195
+ }
14196
+ }, {
14197
+ key: "closestItem",
14198
+ get: function get() {
14199
+ return this.editor.findItem(this.event, ['atoms', 'bonds', 'sgroups', 'functionalGroups']);
14200
+ }
14201
+ }, {
14202
+ key: "isNeedToShowRemoveAbbreviationPopup",
14203
+ get: function get() {
14204
+ var _this$closestItem, _this$functionalGroup;
14205
+ var targetId = this.findKeyOfRelatedGroupId((_this$closestItem = this.closestItem) === null || _this$closestItem === void 0 ? void 0 : _this$closestItem.id);
14206
+ var isTargetExpanded = (_this$functionalGroup = this.functionalGroups.get(targetId)) === null || _this$functionalGroup === void 0 ? void 0 : _this$functionalGroup.isExpanded;
14207
+ var isTargetAtomOrBond = this.targetGroupsIds.length && !this.isModeFunctionalGroup;
14208
+ return Boolean(isTargetExpanded || isTargetAtomOrBond);
14209
+ }
14210
+ }, {
14211
+ key: "findKeyOfRelatedGroupId",
14212
+ value: function findKeyOfRelatedGroupId(clickedClosestItemId) {
14213
+ var targetId;
14214
+ var relatedGroupId = ketcherCore.FunctionalGroup.findFunctionalGroupByAtom(this.functionalGroups, clickedClosestItemId);
14215
+ this.functionalGroups.forEach(function (fg, key) {
14216
+ if (fg.relatedSGroupId === relatedGroupId) {
14217
+ targetId = key;
14218
+ }
14219
+ });
14220
+ return targetId;
14221
+ }
14222
+ }, {
14121
14223
  key: "showRemoveAbbreviationPopup",
14122
14224
  value: function showRemoveAbbreviationPopup() {
14123
14225
  var _this = this;
@@ -14128,77 +14230,68 @@ var TemplateTool = function () {
14128
14230
  return Promise.resolve();
14129
14231
  });
14130
14232
  }
14131
- }, {
14132
- key: "isModeFunctionalGroup",
14133
- get: function get() {
14134
- return this.mode === MODES.FG;
14135
- }
14136
14233
  }, {
14137
14234
  key: "mousedown",
14138
14235
  value: function () {
14139
14236
  var _mousedown = _asyncToGenerator__default["default"]( _regeneratorRuntime__default["default"].mark(function _callee(event) {
14140
- var _struct$functionalGro;
14141
- var closestItem, ctab, struct, isTargetExpanded, isTargetAtomOrBond, dragCtx, ci, _struct$atoms$get, _struct$halfBonds$get, xy0, bond, frid, frIds, count, loop, _struct$halfBonds$get2, _struct$loops$get, loopHbs, sign;
14237
+ var _this2 = this;
14238
+ var _this$closestItem2, _this$closestItem3, _this$closestItem4, dragCtx, ci, _this$struct$atoms$ge, _this$struct$halfBond, xy0, bond, frid, frIds, count, loop, _this$struct$halfBond2, _this$struct$loops$ge, loopHbs, sign;
14142
14239
  return _regeneratorRuntime__default["default"].wrap(function _callee$(_context) {
14143
14240
  while (1) {
14144
14241
  switch (_context.prev = _context.next) {
14145
14242
  case 0:
14146
- closestItem = this.editor.findItem(event, ['atoms', 'bonds', 'sgroups', 'functionalGroups']);
14147
- ctab = this.editor.render.ctab;
14148
- struct = ctab.molecule;
14149
- if (struct.functionalGroups.size) {
14150
- this.targetGroupsIds = getGroupIdsFromItemArrays(struct, _objectSpread$N(_objectSpread$N({}, (closestItem === null || closestItem === void 0 ? void 0 : closestItem.map) === 'atoms' && {
14151
- atoms: [closestItem.id]
14152
- }), (closestItem === null || closestItem === void 0 ? void 0 : closestItem.map) === 'bonds' && {
14153
- bonds: [closestItem.id]
14243
+ this.event = event;
14244
+ if (this.functionalGroups.size) {
14245
+ this.targetGroupsIds = getGroupIdsFromItemArrays(this.struct, _objectSpread$N(_objectSpread$N({}, ((_this$closestItem2 = this.closestItem) === null || _this$closestItem2 === void 0 ? void 0 : _this$closestItem2.map) === 'atoms' && {
14246
+ atoms: [this.closestItem.id]
14247
+ }), ((_this$closestItem3 = this.closestItem) === null || _this$closestItem3 === void 0 ? void 0 : _this$closestItem3.map) === 'bonds' && {
14248
+ bonds: [this.closestItem.id]
14154
14249
  }));
14155
14250
  if (
14156
- (closestItem === null || closestItem === void 0 ? void 0 : closestItem.map) === 'functionalGroups' && ketcherCore.FunctionalGroup.isContractedFunctionalGroup(closestItem.id, struct.functionalGroups)) {
14157
- this.targetGroupsIds.push(closestItem.id);
14251
+ ((_this$closestItem4 = this.closestItem) === null || _this$closestItem4 === void 0 ? void 0 : _this$closestItem4.map) === 'functionalGroups' && ketcherCore.FunctionalGroup.isContractedFunctionalGroup(this.closestItem.id, this.functionalGroups)) {
14252
+ this.targetGroupsIds.push(this.closestItem.id);
14158
14253
  }
14159
14254
  }
14160
- isTargetExpanded = (_struct$functionalGro = struct.functionalGroups.get(this.targetGroupsIds[0])) === null || _struct$functionalGro === void 0 ? void 0 : _struct$functionalGro.isExpanded;
14161
- isTargetAtomOrBond = this.targetGroupsIds.length && !this.isModeFunctionalGroup;
14162
- if (!(isTargetAtomOrBond || isTargetExpanded)) {
14163
- _context.next = 10;
14255
+ if (!this.isNeedToShowRemoveAbbreviationPopup) {
14256
+ _context.next = 6;
14164
14257
  break;
14165
14258
  }
14166
- _context.next = 9;
14259
+ _context.next = 5;
14167
14260
  return this.showRemoveAbbreviationPopup();
14168
- case 9:
14261
+ case 5:
14169
14262
  return _context.abrupt("return");
14170
- case 10:
14263
+ case 6:
14171
14264
  this.editor.hover(null);
14172
14265
  this.dragCtx = {
14173
- xy0: this.editor.render.page2obj(event),
14174
- item: this.editor.findItem(event, this.findItems)
14266
+ xy0: this.editor.render.page2obj(this.event),
14267
+ item: this.editor.findItem(this.event, this.findItems)
14175
14268
  };
14176
14269
  dragCtx = this.dragCtx;
14177
14270
  ci = dragCtx.item;
14178
14271
  if (!(!ci || this.isSaltOrSolvent)) {
14179
- _context.next = 17;
14272
+ _context.next = 13;
14180
14273
  break;
14181
14274
  }
14182
14275
  delete dragCtx.item;
14183
14276
  return _context.abrupt("return");
14184
- case 17:
14277
+ case 13:
14185
14278
  if (ci.map === 'bonds' && !this.isModeFunctionalGroup) {
14186
14279
  xy0 = new ketcherCore.Vec2();
14187
- bond = struct.bonds.get(ci.id);
14188
- frid = (_struct$atoms$get = struct.atoms.get(bond === null || bond === void 0 ? void 0 : bond.begin)) === null || _struct$atoms$get === void 0 ? void 0 : _struct$atoms$get.fragment;
14189
- frIds = struct.getFragmentIds(frid);
14280
+ bond = this.struct.bonds.get(ci.id);
14281
+ frid = (_this$struct$atoms$ge = this.struct.atoms.get(bond === null || bond === void 0 ? void 0 : bond.begin)) === null || _this$struct$atoms$ge === void 0 ? void 0 : _this$struct$atoms$ge.fragment;
14282
+ frIds = this.struct.getFragmentIds(frid);
14190
14283
  count = 0;
14191
- loop = (_struct$halfBonds$get = struct.halfBonds.get(bond === null || bond === void 0 ? void 0 : bond.hb1)) === null || _struct$halfBonds$get === void 0 ? void 0 : _struct$halfBonds$get.loop;
14284
+ loop = (_this$struct$halfBond = this.struct.halfBonds.get(bond === null || bond === void 0 ? void 0 : bond.hb1)) === null || _this$struct$halfBond === void 0 ? void 0 : _this$struct$halfBond.loop;
14192
14285
  if (loop && loop < 0) {
14193
- loop = (_struct$halfBonds$get2 = struct.halfBonds.get(bond === null || bond === void 0 ? void 0 : bond.hb2)) === null || _struct$halfBonds$get2 === void 0 ? void 0 : _struct$halfBonds$get2.loop;
14286
+ loop = (_this$struct$halfBond2 = this.struct.halfBonds.get(bond === null || bond === void 0 ? void 0 : bond.hb2)) === null || _this$struct$halfBond2 === void 0 ? void 0 : _this$struct$halfBond2.loop;
14194
14287
  }
14195
14288
  if (loop && loop >= 0) {
14196
- loopHbs = (_struct$loops$get = struct.loops.get(loop)) === null || _struct$loops$get === void 0 ? void 0 : _struct$loops$get.hbs;
14289
+ loopHbs = (_this$struct$loops$ge = this.struct.loops.get(loop)) === null || _this$struct$loops$ge === void 0 ? void 0 : _this$struct$loops$ge.hbs;
14197
14290
  loopHbs === null || loopHbs === void 0 ? void 0 : loopHbs.forEach(function (hb) {
14198
- var _struct$halfBonds$get3;
14199
- var halfBondBegin = (_struct$halfBonds$get3 = struct.halfBonds.get(hb)) === null || _struct$halfBonds$get3 === void 0 ? void 0 : _struct$halfBonds$get3.begin;
14291
+ var _this2$struct$halfBon;
14292
+ var halfBondBegin = (_this2$struct$halfBon = _this2.struct.halfBonds.get(hb)) === null || _this2$struct$halfBon === void 0 ? void 0 : _this2$struct$halfBon.begin;
14200
14293
  if (halfBondBegin) {
14201
- var hbbAtom = struct.atoms.get(halfBondBegin);
14294
+ var hbbAtom = _this2.struct.atoms.get(halfBondBegin);
14202
14295
  if (hbbAtom) {
14203
14296
  xy0.add_(hbbAtom.pp);
14204
14297
  count++;
@@ -14207,7 +14300,7 @@ var TemplateTool = function () {
14207
14300
  });
14208
14301
  } else {
14209
14302
  frIds.forEach(function (id) {
14210
- var atomById = struct.atoms.get(id);
14303
+ var atomById = _this2.struct.atoms.get(id);
14211
14304
  if (atomById) {
14212
14305
  xy0.add_(atomById.pp);
14213
14306
  count++;
@@ -14215,11 +14308,11 @@ var TemplateTool = function () {
14215
14308
  });
14216
14309
  }
14217
14310
  dragCtx.v0 = xy0.scaled(1 / count);
14218
- sign = getSign(struct, bond, dragCtx.v0);
14311
+ sign = getSign(this.struct, bond, dragCtx.v0);
14219
14312
  dragCtx.sign1 = sign || 1;
14220
14313
  dragCtx.sign2 = this.template.sign;
14221
14314
  }
14222
- case 18:
14315
+ case 14:
14223
14316
  case "end":
14224
14317
  return _context.stop();
14225
14318
  }
@@ -14244,10 +14337,9 @@ var TemplateTool = function () {
14244
14337
  var ci = dragCtx.item;
14245
14338
  var targetPos = null;
14246
14339
  var eventPos = this.editor.render.page2obj(event);
14247
- var struct = this.editor.render.ctab.molecule;
14248
14340
  if (ci && ci.map === 'bonds' && !this.isModeFunctionalGroup) {
14249
- var bond = struct.bonds.get(ci.id);
14250
- var sign = getSign(struct, bond, eventPos);
14341
+ var bond = this.struct.bonds.get(ci.id);
14342
+ var sign = getSign(this.struct, bond, eventPos);
14251
14343
  if (dragCtx.sign1 * this.template.sign > 0) {
14252
14344
  sign = -sign;
14253
14345
  }
@@ -14271,9 +14363,9 @@ var TemplateTool = function () {
14271
14363
  if (!ci) {
14272
14364
  targetPos = dragCtx.xy0;
14273
14365
  } else if (ci.map === 'atoms' || ci.map === 'functionalGroups') {
14274
- var atomId = getTargetAtomId(struct, ci);
14366
+ var atomId = getTargetAtomId(this.struct, ci);
14275
14367
  if (atomId !== undefined) {
14276
- var atom = struct.atoms.get(atomId);
14368
+ var atom = this.struct.atoms.get(atomId);
14277
14369
  targetPos = atom === null || atom === void 0 ? void 0 : atom.pp;
14278
14370
  if (targetPos) {
14279
14371
  extraBond = this.isModeFunctionalGroup ? true : ketcherCore.Vec2.dist(targetPos, eventPos) > 1;
@@ -14313,7 +14405,7 @@ var TemplateTool = function () {
14313
14405
  action = _fromTemplateOnCanvas2[0];
14314
14406
  pasteItems = _fromTemplateOnCanvas2[1];
14315
14407
  } else if ((ci === null || ci === void 0 ? void 0 : ci.map) === 'atoms' || (ci === null || ci === void 0 ? void 0 : ci.map) === 'functionalGroups') {
14316
- var _atomId = getTargetAtomId(struct, ci);
14408
+ var _atomId = getTargetAtomId(this.struct, ci);
14317
14409
  var _fromTemplateOnAtom = ketcherCore.fromTemplateOnAtom(this.editor.render.ctab, this.template, _atomId, angle, extraBond);
14318
14410
  var _fromTemplateOnAtom2 = _slicedToArray__default["default"](_fromTemplateOnAtom, 2);
14319
14411
  action = _fromTemplateOnAtom2[0];
@@ -14332,7 +14424,7 @@ var TemplateTool = function () {
14332
14424
  }, {
14333
14425
  key: "mouseup",
14334
14426
  value: function mouseup(event) {
14335
- var _this2 = this,
14427
+ var _this3 = this,
14336
14428
  _ci;
14337
14429
  var dragCtx = this.dragCtx;
14338
14430
  if (!dragCtx) {
@@ -14340,9 +14432,7 @@ var TemplateTool = function () {
14340
14432
  }
14341
14433
  delete this.dragCtx;
14342
14434
  var restruct = this.editor.render.ctab;
14343
- var struct = restruct.molecule;
14344
14435
  var ci = dragCtx.item;
14345
- var functionalGroups = struct.functionalGroups;
14346
14436
  if (dragCtx.action && ci && ci.map === 'bonds' && !this.isModeFunctionalGroup) {
14347
14437
  dragCtx.action.perform(restruct);
14348
14438
  var promise = ketcherCore.fromTemplateOnBondAction(restruct, this.template, ci.id, this.editor.event, dragCtx.sign1 * dragCtx.sign2 > 0, true);
@@ -14350,9 +14440,9 @@ var TemplateTool = function () {
14350
14440
  var _ref2 = _slicedToArray__default["default"](_ref, 2),
14351
14441
  action = _ref2[0],
14352
14442
  pasteItems = _ref2[1];
14353
- var mergeItems = ketcherCore.getItemsToFuse(_this2.editor, pasteItems);
14443
+ var mergeItems = ketcherCore.getItemsToFuse(_this3.editor, pasteItems);
14354
14444
  action = ketcherCore.fromItemsFuse(restruct, mergeItems).mergeWith(action);
14355
- _this2.editor.update(action);
14445
+ _this3.editor.update(action);
14356
14446
  });
14357
14447
  return true;
14358
14448
  }
@@ -14360,14 +14450,14 @@ var TemplateTool = function () {
14360
14450
  var pasteItems = null;
14361
14451
  if (this.isSaltOrSolvent) {
14362
14452
  addSaltsAndSolventsOnCanvasWithoutMerge(restruct, this.template, dragCtx, this.editor);
14453
+ this.editor.hover(this.editor.findItem(event, this.findItems), null, event);
14363
14454
  return true;
14364
- } else if (((_ci = ci) === null || _ci === void 0 ? void 0 : _ci.map) === 'functionalGroups' && ketcherCore.FunctionalGroup.isContractedFunctionalGroup(ci.id, functionalGroups) && this.isModeFunctionalGroup && this.targetGroupsIds.length) {
14455
+ } else if (((_ci = ci) === null || _ci === void 0 ? void 0 : _ci.map) === 'functionalGroups' && ketcherCore.FunctionalGroup.isContractedFunctionalGroup(ci.id, this.functionalGroups) && this.isModeFunctionalGroup && this.targetGroupsIds.length) {
14365
14456
  functionalGroupRemoveAction = new ketcherCore.Action();
14366
- var _struct = this.editor.struct();
14367
14457
  var _restruct = this.editor.render.ctab;
14368
- var functionalGroupToReplace = _struct.sgroups.get(ci.id);
14369
- var attachmentAtomId = functionalGroupToReplace.getAttAtomId(_struct);
14370
- var atomsWithoutAttachmentAtom = ketcherCore.SGroup.getAtoms(_struct, functionalGroupToReplace).filter(function (id) {
14458
+ var functionalGroupToReplace = this.struct.sgroups.get(ci.id);
14459
+ var attachmentAtomId = functionalGroupToReplace.getAttAtomId(this.struct);
14460
+ var atomsWithoutAttachmentAtom = ketcherCore.SGroup.getAtoms(this.struct, functionalGroupToReplace).filter(function (id) {
14371
14461
  return id !== attachmentAtomId;
14372
14462
  });
14373
14463
  functionalGroupRemoveAction.mergeWith(ketcherCore.fromSgroupDeletion(_restruct, ci.id));
@@ -14393,10 +14483,10 @@ var TemplateTool = function () {
14393
14483
  if (degree && degree > 1) {
14394
14484
  angle = null;
14395
14485
  } else if (degree === 1) {
14396
- var _struct$halfBonds$get4;
14397
- var atom = struct.atoms.get(ci.id);
14398
- var neiId = atom && ((_struct$halfBonds$get4 = struct.halfBonds.get(atom.neighbors[0])) === null || _struct$halfBonds$get4 === void 0 ? void 0 : _struct$halfBonds$get4.end);
14399
- var nei = (neiId || neiId === 0) && struct.atoms.get(neiId);
14486
+ var _this$struct$halfBond3;
14487
+ var atom = this.struct.atoms.get(ci.id);
14488
+ var neiId = atom && ((_this$struct$halfBond3 = this.struct.halfBonds.get(atom.neighbors[0])) === null || _this$struct$halfBond3 === void 0 ? void 0 : _this$struct$halfBond3.end);
14489
+ var nei = (neiId || neiId === 0) && this.struct.atoms.get(neiId);
14400
14490
  angle = event.ctrlKey ? utils.calcAngle(nei === null || nei === void 0 ? void 0 : nei.pp, atom === null || atom === void 0 ? void 0 : atom.pp) : utils.fracAngle(utils.calcAngle(nei.pp, atom === null || atom === void 0 ? void 0 : atom.pp), null);
14401
14491
  } else {
14402
14492
  angle = 0;
@@ -14415,10 +14505,10 @@ var TemplateTool = function () {
14415
14505
  var _ref4 = _slicedToArray__default["default"](_ref3, 2),
14416
14506
  action = _ref4[0],
14417
14507
  pasteItems = _ref4[1];
14418
- if (!_this2.isModeFunctionalGroup) {
14419
- var mergeItems = ketcherCore.getItemsToFuse(_this2.editor, pasteItems);
14508
+ if (!_this3.isModeFunctionalGroup) {
14509
+ var mergeItems = ketcherCore.getItemsToFuse(_this3.editor, pasteItems);
14420
14510
  action = ketcherCore.fromItemsFuse(restruct, mergeItems).mergeWith(action);
14421
- _this2.editor.update(action);
14511
+ _this3.editor.update(action);
14422
14512
  }
14423
14513
  });
14424
14514
  return true;
@@ -14628,20 +14718,27 @@ function handleHotkeyOverItem(props) {
14628
14718
  handleDialog(props);
14629
14719
  } else if (props.newAction.tool) {
14630
14720
  handleTool(props);
14721
+ } else {
14722
+ handleOtherActions(props);
14631
14723
  }
14632
14724
  }
14633
- function handleEraser(_ref) {
14634
- var editor = _ref.editor,
14635
- hoveredItem = _ref.hoveredItem;
14725
+ function handleOtherActions(_ref) {
14726
+ var dispatch = _ref.dispatch,
14727
+ newAction = _ref.newAction;
14728
+ dispatch(onAction(newAction));
14729
+ }
14730
+ function handleEraser(_ref2) {
14731
+ var editor = _ref2.editor,
14732
+ hoveredItem = _ref2.hoveredItem;
14636
14733
  var action = ketcherCore.fromFragmentDeletion(editor.render.ctab, mapItemsToArrays(hoveredItem));
14637
14734
  editor.update(action);
14638
14735
  editor.hover(null);
14639
14736
  }
14640
- function handleDialog(_ref2) {
14641
- var hoveredItem = _ref2.hoveredItem,
14642
- newAction = _ref2.newAction,
14643
- editor = _ref2.editor,
14644
- dispatch = _ref2.dispatch;
14737
+ function handleDialog(_ref3) {
14738
+ var hoveredItem = _ref3.hoveredItem,
14739
+ newAction = _ref3.newAction,
14740
+ editor = _ref3.editor,
14741
+ dispatch = _ref3.dispatch;
14645
14742
  var dialogType = Object.keys(hoveredItem)[0];
14646
14743
  var dialogHandler = getDialogHandler(dialogType);
14647
14744
  var hoveredItemId = hoveredItem[dialogType];
@@ -14667,11 +14764,11 @@ function getDialogHandler(itemType) {
14667
14764
  var dialog = dialogs[itemType];
14668
14765
  return dialog;
14669
14766
  }
14670
- function handleAtomPropsDialog(_ref3) {
14671
- var hoveredItemId = _ref3.hoveredItemId,
14672
- newAction = _ref3.newAction,
14673
- editor = _ref3.editor,
14674
- dispatch = _ref3.dispatch;
14767
+ function handleAtomPropsDialog(_ref4) {
14768
+ var hoveredItemId = _ref4.hoveredItemId,
14769
+ newAction = _ref4.newAction,
14770
+ editor = _ref4.editor,
14771
+ dispatch = _ref4.dispatch;
14675
14772
  var selection = editor.selection();
14676
14773
  var atomsSelected = selection === null || selection === void 0 ? void 0 : selection.atoms;
14677
14774
  var restruct = editor.render.ctab;
@@ -14694,11 +14791,11 @@ function handleAtomPropsDialog(_ref3) {
14694
14791
  });
14695
14792
  }
14696
14793
  }
14697
- function handleBondPropsDialog(_ref4) {
14698
- var hoveredItemId = _ref4.hoveredItemId,
14699
- newAction = _ref4.newAction,
14700
- editor = _ref4.editor,
14701
- dispatch = _ref4.dispatch;
14794
+ function handleBondPropsDialog(_ref5) {
14795
+ var hoveredItemId = _ref5.hoveredItemId,
14796
+ newAction = _ref5.newAction,
14797
+ editor = _ref5.editor,
14798
+ dispatch = _ref5.dispatch;
14702
14799
  var restruct = editor.render.ctab;
14703
14800
  var bondFromStruct = restruct.bonds.get(hoveredItemId);
14704
14801
  var convertedBondForModal = fromBond(bondFromStruct === null || bondFromStruct === void 0 ? void 0 : bondFromStruct.b);
@@ -14709,11 +14806,11 @@ function handleBondPropsDialog(_ref4) {
14709
14806
  return null;
14710
14807
  });
14711
14808
  }
14712
- function handleTool(_ref5) {
14713
- var hoveredItem = _ref5.hoveredItem,
14714
- newAction = _ref5.newAction,
14715
- editor = _ref5.editor,
14716
- dispatch = _ref5.dispatch;
14809
+ function handleTool(_ref6) {
14810
+ var hoveredItem = _ref6.hoveredItem,
14811
+ newAction = _ref6.newAction,
14812
+ editor = _ref6.editor,
14813
+ dispatch = _ref6.dispatch;
14717
14814
  var _loop = function _loop(item) {
14718
14815
  var toolHandler = getToolHandler(item, newAction.tool);
14719
14816
  var isChangeStructureTool = newAction.tool !== 'hand';
@@ -14773,13 +14870,13 @@ function getToolHandler(itemType) {
14773
14870
  rgroupatom: function rgroupatom(props) {
14774
14871
  return handleRGroupAtomTool(props);
14775
14872
  },
14776
- sgroup: function sgroup(_ref6) {
14777
- var editor = _ref6.editor,
14778
- hoveredItemId = _ref6.hoveredItemId;
14873
+ sgroup: function sgroup(_ref7) {
14874
+ var editor = _ref7.editor,
14875
+ hoveredItemId = _ref7.hoveredItemId;
14779
14876
  tools.sgroup.sgroupDialog(editor, hoveredItemId);
14780
14877
  },
14781
- hand: function hand(_ref7) {
14782
- var dispatch = _ref7.dispatch;
14878
+ hand: function hand(_ref8) {
14879
+ var dispatch = _ref8.dispatch;
14783
14880
  return dispatch(onAction({
14784
14881
  tool: 'hand'
14785
14882
  }));
@@ -14793,26 +14890,28 @@ function getToolHandler(itemType) {
14793
14890
  }
14794
14891
  return items._default[toolName];
14795
14892
  }
14796
- function handleAtomTool(_ref8) {
14797
- var hoveredItemId = _ref8.hoveredItemId,
14798
- newAction = _ref8.newAction,
14799
- editor = _ref8.editor;
14800
- var atomProps = _objectSpread$M({}, newAction.opts);
14801
- var updatedAtoms = ketcherCore.fromAtomsAttrs(editor.render.ctab, hoveredItemId, atomProps, true);
14802
- editor.update(updatedAtoms);
14803
- }
14804
- function handleBondTool(_ref9) {
14893
+ function handleAtomTool(_ref9) {
14805
14894
  var hoveredItemId = _ref9.hoveredItemId,
14806
14895
  newAction = _ref9.newAction,
14807
14896
  editor = _ref9.editor;
14808
- var newBond = ketcherCore.fromBondAddition(editor.render.ctab, newAction.opts, hoveredItemId, undefined)[0];
14809
- editor.update(newBond);
14897
+ var atomProps = _objectSpread$M({}, newAction.opts);
14898
+ var updatedAtoms = ketcherCore.fromAtomsAttrs(editor.render.ctab, hoveredItemId, atomProps, true);
14899
+ editor.update(updatedAtoms);
14810
14900
  }
14811
- function handleChargeTool(_ref10) {
14812
- var _editor$render$ctab$a;
14901
+ function handleBondTool(_ref10) {
14813
14902
  var hoveredItemId = _ref10.hoveredItemId,
14814
14903
  newAction = _ref10.newAction,
14815
14904
  editor = _ref10.editor;
14905
+ var newBond = ketcherCore.fromBondAddition(editor.render.ctab, newAction.opts, hoveredItemId, {
14906
+ label: 'C'
14907
+ })[0];
14908
+ editor.update(newBond);
14909
+ }
14910
+ function handleChargeTool(_ref11) {
14911
+ var _editor$render$ctab$a;
14912
+ var hoveredItemId = _ref11.hoveredItemId,
14913
+ newAction = _ref11.newAction,
14914
+ editor = _ref11.editor;
14816
14915
  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;
14817
14916
  if (existingAtom) {
14818
14917
  var updatedAtom = ketcherCore.fromAtomsAttrs(editor.render.ctab, hoveredItemId, {
@@ -14832,13 +14931,13 @@ function handleRGroupAtomTool(_x2) {
14832
14931
  return _handleRGroupAtomTool.apply(this, arguments);
14833
14932
  }
14834
14933
  function _handleRGroupAtomTool() {
14835
- _handleRGroupAtomTool = _asyncToGenerator__default["default"]( _regeneratorRuntime__default["default"].mark(function _callee2(_ref11) {
14934
+ _handleRGroupAtomTool = _asyncToGenerator__default["default"]( _regeneratorRuntime__default["default"].mark(function _callee2(_ref12) {
14836
14935
  var hoveredItemId, editor, struct, atom, rglabel, label, element;
14837
14936
  return _regeneratorRuntime__default["default"].wrap(function _callee2$(_context2) {
14838
14937
  while (1) {
14839
14938
  switch (_context2.prev = _context2.next) {
14840
14939
  case 0:
14841
- hoveredItemId = _ref11.hoveredItemId, editor = _ref11.editor;
14940
+ hoveredItemId = _ref12.hoveredItemId, editor = _ref12.editor;
14842
14941
  struct = editor.render.ctab.molecule;
14843
14942
  atom = hoveredItemId || hoveredItemId === 0 ? struct.atoms.get(hoveredItemId) : null;
14844
14943
  rglabel = atom ? atom.rglabel : 0;
@@ -14879,14 +14978,14 @@ function isChangingFunctionalGroup(_x3) {
14879
14978
  return _isChangingFunctionalGroup.apply(this, arguments);
14880
14979
  }
14881
14980
  function _isChangingFunctionalGroup() {
14882
- _isChangingFunctionalGroup = _asyncToGenerator__default["default"]( _regeneratorRuntime__default["default"].mark(function _callee3(_ref12) {
14981
+ _isChangingFunctionalGroup = _asyncToGenerator__default["default"]( _regeneratorRuntime__default["default"].mark(function _callee3(_ref13) {
14883
14982
  var _editor$render$ctab$a2;
14884
14983
  var hoveredItemId, editor, atomResult, result, atom, molecule, functionalGroups, sgroupsOnCanvas, atomId, isFunctionalGroup, _iterator, _step, id, fgId;
14885
14984
  return _regeneratorRuntime__default["default"].wrap(function _callee3$(_context3) {
14886
14985
  while (1) {
14887
14986
  switch (_context3.prev = _context3.next) {
14888
14987
  case 0:
14889
- hoveredItemId = _ref12.hoveredItemId, editor = _ref12.editor;
14988
+ hoveredItemId = _ref13.hoveredItemId, editor = _ref13.editor;
14890
14989
  atomResult = [];
14891
14990
  result = [];
14892
14991
  atom = (_editor$render$ctab$a2 = editor.render.ctab.atoms.get(hoveredItemId)) === null || _editor$render$ctab$a2 === void 0 ? void 0 : _editor$render$ctab$a2.a;
@@ -14950,10 +15049,9 @@ function initKeydownListener(element) {
14950
15049
  });
14951
15050
  };
14952
15051
  }
14953
- function removeNotRenderedStruct(actionTool, event, dispatch) {
14954
- var code = event.code,
14955
- metaKey = event.metaKey;
14956
- if (actionTool.tool === 'paste' && code === 'KeyS' && metaKey) {
15052
+ function removeNotRenderedStruct(actionTool, group, dispatch) {
15053
+ var affectedTools = ['paste', 'template'];
15054
+ if (affectedTools.includes(actionTool.tool) && group !== null && group !== void 0 && group.includes('save')) {
14957
15055
  var savedSelectedTool = SettingsManager.selectionTool;
14958
15056
  dispatch({
14959
15057
  type: 'ACTION',
@@ -15010,7 +15108,7 @@ function keyHandle(dispatch, state, hotKeys, event) {
15010
15108
  event.preventDefault();
15011
15109
  return;
15012
15110
  }
15013
- removeNotRenderedStruct(actionTool, event, dispatch);
15111
+ removeNotRenderedStruct(actionTool, group, dispatch);
15014
15112
  if (actions.indexOf(actName) === -1) {
15015
15113
  var newAction = config[actName].action;
15016
15114
  var _hoveredItem = getHoveredItem(render.ctab);
@@ -15180,7 +15278,7 @@ var mapDispatchToProps$d = function mapDispatchToProps(dispatch) {
15180
15278
  };
15181
15279
  var AppHiddenContainer = reactRedux.connect(null, mapDispatchToProps$d)(AppHidden);
15182
15280
 
15183
- var classes$E = {"button-common-styles":"Modal-module_button-common-styles__ko9E5","scrollbar":"Modal-module_scrollbar__yPIJc","modalOverlay":"Modal-module_modalOverlay__AzVeg","animate":"Modal-module_animate__pnPNj","hide":"Modal-module_hide__0CTey","smallScreen":"Modal-module_smallScreen__nzt2L"};
15281
+ var classes$F = {"button-common-styles":"Modal-module_button-common-styles__ko9E5","scrollbar":"Modal-module_scrollbar__yPIJc","modalOverlay":"Modal-module_modalOverlay__AzVeg","animate":"Modal-module_animate__pnPNj","hide":"Modal-module_hide__0CTey","smallScreen":"Modal-module_smallScreen__nzt2L"};
15184
15282
 
15185
15283
  var selectClasses = {"button-common-styles":"Select-module_button-common-styles__cgaVz","scrollbar":"Select-module_scrollbar__cA89D","dropdownList":"Select-module_dropdownList__rdcrH","listDivider":"Select-module_listDivider__4vJyh","selectContainer":"Select-module_selectContainer__yXT-t"};
15186
15284
 
@@ -15439,7 +15537,7 @@ function findClosestBond(restruct, pos, skip, minDist, scale) {
15439
15537
  if (bid === skipId) return;
15440
15538
  var a1 = restruct.atoms.get(bond.b.begin).a;
15441
15539
  var a2 = restruct.atoms.get(bond.b.end).a;
15442
- if (ketcherCore.FunctionalGroup.isBondInContractedFunctionalGroup(bond.b, sGroups, functionalGroups)) return null;
15540
+ if (ketcherCore.FunctionalGroup.isBondInContractedFunctionalGroup(bond.b, sGroups, functionalGroups) || ketcherCore.SGroup.isBondInContractedSGroup(bond.b, sGroups)) return null;
15443
15541
  var mid = ketcherCore.Vec2.lc2(a1.pp, 0.5, a2.pp, 0.5);
15444
15542
  var cdist = ketcherCore.Vec2.dist(pos, mid);
15445
15543
  if (cdist < minCDist) {
@@ -15449,7 +15547,7 @@ function findClosestBond(restruct, pos, skip, minDist, scale) {
15449
15547
  });
15450
15548
  restruct.bonds.forEach(function (bond, bid) {
15451
15549
  if (bid === skipId) return;
15452
- if (ketcherCore.FunctionalGroup.isBondInContractedFunctionalGroup(bond.b, sGroups, functionalGroups)) return null;
15550
+ if (ketcherCore.FunctionalGroup.isBondInContractedFunctionalGroup(bond.b, sGroups, functionalGroups) || ketcherCore.SGroup.isBondInContractedSGroup(bond.b, sGroups)) return null;
15453
15551
  var hb = restruct.molecule.halfBonds.get(bond.b.hb1);
15454
15552
  var dir = hb.dir;
15455
15553
  var norm = hb.norm;
@@ -15685,20 +15783,55 @@ function findCloseMerge(restruct, selected) {
15685
15783
  var bond = struct.bonds.get(bid);
15686
15784
  pos.bonds.set(bid, ketcherCore.Vec2.lc2(struct.atoms.get(bond.begin).pp, 0.5, struct.atoms.get(bond.end).pp, 0.5));
15687
15785
  });
15688
- var result = {};
15689
- maps.forEach(function (mp) {
15690
- result[mp] = Array.from(pos[mp].keys()).reduce(function (res, srcId) {
15691
- var skip = {
15692
- map: mp,
15693
- id: srcId
15694
- };
15695
- var item = findMaps[mp](restruct, pos[mp].get(srcId), skip, null, scale);
15696
- if (item && !selected[mp].includes(item.id)) res.set(srcId, item.id);
15697
- return res;
15698
- }, new Map());
15786
+ var result = {
15787
+ atoms: new Map(),
15788
+ atomToFunctionalGroup: new Map()
15789
+ };
15790
+ maps.forEach(function (map) {
15791
+ if (map === 'atoms') {
15792
+ Array.from(pos.atoms.keys()).forEach(function (atomId) {
15793
+ var atomPosition = pos.atoms.get(atomId);
15794
+ mergeAtomToAtom(atomId, restruct, atomPosition, selected, result) || mergeAtomToFunctionalGroup(atomId, restruct, atomPosition, result);
15795
+ });
15796
+ } else {
15797
+ result[map] = Array.from(pos[map].keys()).reduce(function (res, srcId) {
15798
+ var skip = {
15799
+ map: map,
15800
+ id: srcId
15801
+ };
15802
+ var item = findMaps[map](restruct, pos[map].get(srcId), skip, null, scale);
15803
+ if (item && !selected[map].includes(item.id)) {
15804
+ res.set(srcId, item.id);
15805
+ }
15806
+ return res;
15807
+ }, new Map());
15808
+ }
15699
15809
  });
15700
15810
  return result;
15701
15811
  }
15812
+ function mergeAtomToAtom(atomId, restruct, atomPosition, selected, result) {
15813
+ var skip = {
15814
+ map: 'atoms',
15815
+ id: atomId
15816
+ };
15817
+ var closestAtom = findClosestAtom(restruct, atomPosition, skip, null);
15818
+ if (closestAtom && !selected.atoms.includes(closestAtom.id)) {
15819
+ result.atoms.set(atomId, closestAtom.id);
15820
+ return true;
15821
+ }
15822
+ return false;
15823
+ }
15824
+ function mergeAtomToFunctionalGroup(atomId, restruct, atomPosition, result) {
15825
+ if (ketcherCore.FunctionalGroup.isAttachmentPointAtom(atomId, restruct.molecule)) {
15826
+ return false;
15827
+ }
15828
+ var closestFunctionalGroup = findClosestFG(restruct, atomPosition, null);
15829
+ if (closestFunctionalGroup) {
15830
+ result.atomToFunctionalGroup.set(atomId, closestFunctionalGroup.id);
15831
+ return true;
15832
+ }
15833
+ return false;
15834
+ }
15702
15835
  var closest = {
15703
15836
  atom: findClosestAtom,
15704
15837
  item: findClosestItem,
@@ -16577,7 +16710,7 @@ function setHover(ci, visible, render) {
16577
16710
  return true;
16578
16711
  }
16579
16712
 
16580
- var classes$D = {"button-common-styles":"StructEditor-module_button-common-styles__3P7PO","scrollbar":"StructEditor-module_scrollbar__SUs-o","spinnerOverlay":"StructEditor-module_spinnerOverlay__5H1IM","canvas":"StructEditor-module_canvas__LLnzh","measureLog":"StructEditor-module_measureLog__B2wuy","visible":"StructEditor-module_visible__3eFNB","intermediateCanvas":"StructEditor-module_intermediateCanvas__fR3ws","enableCursor":"StructEditor-module_enableCursor__Qla0A"};
16713
+ var classes$E = {"button-common-styles":"StructEditor-module_button-common-styles__3P7PO","scrollbar":"StructEditor-module_scrollbar__SUs-o","spinnerOverlay":"StructEditor-module_spinnerOverlay__5H1IM","canvas":"StructEditor-module_canvas__LLnzh","measureLog":"StructEditor-module_measureLog__B2wuy","visible":"StructEditor-module_visible__3eFNB","intermediateCanvas":"StructEditor-module_intermediateCanvas__fR3ws","enableCursor":"StructEditor-module_enableCursor__Qla0A"};
16581
16714
 
16582
16715
  var Cursor = function Cursor(_ref) {
16583
16716
  var Icon = _ref.Icon,
@@ -16839,8 +16972,7 @@ var useBondEdit = function useBondEdit() {
16839
16972
  getKetcherInstance = _useAppContext.getKetcherInstance;
16840
16973
  var handler = React.useCallback( function () {
16841
16974
  var _ref2 = _asyncToGenerator__default["default"]( _regeneratorRuntime__default["default"].mark(function _callee(_ref) {
16842
- var _editor$render$ctab$b;
16843
- var props, editor, bondIds, bond, newBond;
16975
+ var props, editor, bondIds, molecule, bonds, changeBondPromise;
16844
16976
  return _regeneratorRuntime__default["default"].wrap(function _callee$(_context) {
16845
16977
  while (1) {
16846
16978
  switch (_context.prev = _context.next) {
@@ -16848,24 +16980,29 @@ var useBondEdit = function useBondEdit() {
16848
16980
  props = _ref.props;
16849
16981
  editor = getKetcherInstance().editor;
16850
16982
  bondIds = (props === null || props === void 0 ? void 0 : props.bondIds) || [];
16851
- bond = (_editor$render$ctab$b = editor.render.ctab.bonds.get(bondIds[0])) === null || _editor$render$ctab$b === void 0 ? void 0 : _editor$render$ctab$b.b;
16983
+ molecule = editor.render.ctab;
16852
16984
  _context.prev = 4;
16853
- _context.next = 7;
16854
- return editor.event.bondEdit.dispatch(bond);
16855
- case 7:
16856
- newBond = _context.sent;
16857
- editor.update(ketcherCore.fromBondsAttrs(editor.render.ctab, bondIds, newBond));
16858
- _context.next = 14;
16985
+ bonds = mapBondIdsToBonds(bondIds, molecule);
16986
+ _context.next = 8;
16987
+ return editor.event.bondEdit.dispatch(bonds);
16988
+ case 8:
16989
+ changeBondPromise = _context.sent;
16990
+ updateSelectedBonds({
16991
+ bonds: bondIds,
16992
+ changeBondPromise: changeBondPromise,
16993
+ editor: editor
16994
+ });
16995
+ _context.next = 15;
16859
16996
  break;
16860
- case 11:
16861
- _context.prev = 11;
16997
+ case 12:
16998
+ _context.prev = 12;
16862
16999
  _context.t0 = _context["catch"](4);
16863
- case 14:
17000
+ case 15:
16864
17001
  case "end":
16865
17002
  return _context.stop();
16866
17003
  }
16867
17004
  }
16868
- }, _callee, null, [[4, 11]]);
17005
+ }, _callee, null, [[4, 12]]);
16869
17006
  }));
16870
17007
  return function (_x) {
16871
17008
  return _ref2.apply(this, arguments);
@@ -17393,7 +17530,7 @@ var StructRender = function (_Component) {
17393
17530
  return StructRender;
17394
17531
  }(React.Component);
17395
17532
 
17396
- var classes$C = {"infoPanel":"InfoPanel-module_infoPanel__irvZL"};
17533
+ var classes$D = {"infoPanel":"InfoPanel-module_infoPanel__irvZL"};
17397
17534
 
17398
17535
  var X_COORD_INDEX = 0;
17399
17536
  var Y_COORD_INDEX = 1;
@@ -17498,7 +17635,7 @@ var SGroupDataRender = function SGroupDataRender(props) {
17498
17635
  left: panelCoordinate.x + 'px',
17499
17636
  top: panelCoordinate.y + 'px'
17500
17637
  },
17501
- className: clsx__default["default"](classes$C.infoPanel, className),
17638
+ className: clsx__default["default"](classes$D.infoPanel, className),
17502
17639
  children: sGroupData
17503
17640
  }) : null;
17504
17641
  };
@@ -17574,11 +17711,9 @@ var InfoPanel = function InfoPanel(props) {
17574
17711
  var childRef = React.useRef(null);
17575
17712
  var groupName = sGroup === null || sGroup === void 0 ? void 0 : (_sGroup$data = sGroup.data) === null || _sGroup$data === void 0 ? void 0 : _sGroup$data.name;
17576
17713
  React.useEffect(function () {
17577
- var _sGroup$data2;
17578
- var CIP_FIELD_NAME = 'INDIGO_CIP_DESC';
17579
- if (!groupStruct && (sGroup === null || sGroup === void 0 ? void 0 : sGroup.type) === 'DAT' && ((_sGroup$data2 = sGroup.data) === null || _sGroup$data2 === void 0 ? void 0 : _sGroup$data2.fieldName) !== CIP_FIELD_NAME) {
17580
- var _sGroup$data3, _sGroup$data4;
17581
- setSGroupData("".concat((_sGroup$data3 = sGroup.data) === null || _sGroup$data3 === void 0 ? void 0 : _sGroup$data3.fieldName, "=").concat((_sGroup$data4 = sGroup.data) === null || _sGroup$data4 === void 0 ? void 0 : _sGroup$data4.fieldValue));
17714
+ if (!groupStruct && (sGroup === null || sGroup === void 0 ? void 0 : sGroup.type) === 'DAT') {
17715
+ var _sGroup$data2, _sGroup$data3;
17716
+ setSGroupData("".concat((_sGroup$data2 = sGroup.data) === null || _sGroup$data2 === void 0 ? void 0 : _sGroup$data2.fieldName, "=").concat((_sGroup$data3 = sGroup.data) === null || _sGroup$data3 === void 0 ? void 0 : _sGroup$data3.fieldValue));
17582
17717
  } else {
17583
17718
  setSGroupData(null);
17584
17719
  }
@@ -17602,7 +17737,7 @@ var InfoPanel = function InfoPanel(props) {
17602
17737
  left: x + 'px',
17603
17738
  top: y + 'px'
17604
17739
  },
17605
- className: clsx__default["default"](classes$C.infoPanel, className),
17740
+ className: clsx__default["default"](classes$D.infoPanel, className),
17606
17741
  children: jsxRuntime.jsx(StructRender, {
17607
17742
  struct: molecule,
17608
17743
  id: groupName,
@@ -17719,15 +17854,15 @@ var StructEditor = function (_Component) {
17719
17854
  } catch (_unused) {
17720
17855
  el.innerHTML = msg.info;
17721
17856
  }
17722
- el.classList.add(classes$D.visible);
17857
+ el.classList.add(classes$E.visible);
17723
17858
  } else {
17724
- el.classList.remove(classes$D.visible);
17859
+ el.classList.remove(classes$E.visible);
17725
17860
  }
17726
17861
  });
17727
17862
  this.editor.event.cursor.add(function (csr) {
17728
17863
  switch (csr.status) {
17729
17864
  case 'enable':
17730
- _this2.editorRef.current.classList.add(classes$D.enableCursor);
17865
+ _this2.editorRef.current.classList.add(classes$E.enableCursor);
17731
17866
  var _this2$editorRef$curr = _this2.editorRef.current.getBoundingClientRect(),
17732
17867
  left = _this2$editorRef$curr.left,
17733
17868
  top = _this2$editorRef$curr.top,
@@ -17744,7 +17879,7 @@ var StructEditor = function (_Component) {
17744
17879
  }
17745
17880
  break;
17746
17881
  case 'move':
17747
- _this2.editorRef.current.classList.add(classes$D.enableCursor);
17882
+ _this2.editorRef.current.classList.add(classes$E.enableCursor);
17748
17883
  _this2.setState({
17749
17884
  enableCursor: true,
17750
17885
  clientX: clientX,
@@ -17752,19 +17887,19 @@ var StructEditor = function (_Component) {
17752
17887
  });
17753
17888
  break;
17754
17889
  case 'disable':
17755
- _this2.editorRef.current.classList.remove(classes$D.enableCursor);
17890
+ _this2.editorRef.current.classList.remove(classes$E.enableCursor);
17756
17891
  _this2.setState({
17757
17892
  enableCursor: false
17758
17893
  });
17759
17894
  break;
17760
17895
  case 'leave':
17761
- _this2.editorRef.current.classList.remove(classes$D.enableCursor);
17896
+ _this2.editorRef.current.classList.remove(classes$E.enableCursor);
17762
17897
  _this2.setState({
17763
17898
  enableCursor: false
17764
17899
  });
17765
17900
  break;
17766
17901
  case 'mouseover':
17767
- _this2.editorRef.current.classList.add(classes$D.enableCursor);
17902
+ _this2.editorRef.current.classList.add(classes$E.enableCursor);
17768
17903
  _this2.setState({
17769
17904
  enableCursor: true
17770
17905
  });
@@ -17817,22 +17952,22 @@ var StructEditor = function (_Component) {
17817
17952
  _this$state$clientY = _this$state.clientY,
17818
17953
  clientY = _this$state$clientY === void 0 ? 0 : _this$state$clientY;
17819
17954
  return jsxRuntime.jsxs(Tag, _objectSpread$B(_objectSpread$B({
17820
- className: clsx__default["default"](classes$D.canvas, className)
17955
+ className: clsx__default["default"](classes$E.canvas, className)
17821
17956
  }, props), {}, {
17822
17957
  children: [jsxRuntime.jsx(ContextMenuTrigger, {
17823
17958
  children: jsxRuntime.jsx("div", {
17824
17959
  ref: this.editorRef,
17825
- className: clsx__default["default"](classes$D.intermediateCanvas)
17960
+ className: clsx__default["default"](classes$E.intermediateCanvas)
17826
17961
  })
17827
17962
  }), jsxRuntime.jsx(Cursor, {
17828
17963
  Icon: SvgHand,
17829
17964
  PressedIcon: SvgCompressedHand,
17830
17965
  enableHandTool: this.state.enableCursor
17831
17966
  }), jsxRuntime.jsx("div", {
17832
- className: classes$D.measureLog,
17967
+ className: classes$E.measureLog,
17833
17968
  ref: this.logRef
17834
17969
  }), indigoVerification && jsxRuntime.jsx("div", {
17835
- className: "".concat(classes$D.spinnerOverlay, " loading-spinner"),
17970
+ className: "".concat(classes$E.spinnerOverlay, " loading-spinner"),
17836
17971
  children: jsxRuntime.jsx(LoadingCircles, {})
17837
17972
  }), jsxRuntime.jsx(InfoPanel$1, {
17838
17973
  clientX: clientX,
@@ -17897,35 +18032,35 @@ function SvgLogo(props) {
17897
18032
  })))));
17898
18033
  }
17899
18034
 
17900
- var classes$B = {"button-common-styles":"About-module_button-common-styles__XmSbT","scrollbar":"About-module_scrollbar__4-AeI","dialog_body":"About-module_dialog_body__ebQu-","about":"About-module_about__ZVesh","body":"About-module_body__8VOc3","versionName":"About-module_versionName__1gqJr","firstline":"About-module_firstline__h5XMW","links":"About-module_links__sMpyx","infoLinks":"About-module_infoLinks__4-Tot","indigoVersion":"About-module_indigoVersion__WKFlu","headerContent":"About-module_headerContent__YclOx","title":"About-module_title__k-6Zg","indigoFirstLine":"About-module_indigoFirstLine__-86rb","okButton":"About-module_okButton__FMcEk"};
18035
+ var classes$C = {"button-common-styles":"About-module_button-common-styles__XmSbT","scrollbar":"About-module_scrollbar__4-AeI","dialog_body":"About-module_dialog_body__ebQu-","about":"About-module_about__ZVesh","body":"About-module_body__8VOc3","versionName":"About-module_versionName__1gqJr","firstline":"About-module_firstline__h5XMW","links":"About-module_links__sMpyx","infoLinks":"About-module_infoLinks__4-Tot","indigoVersion":"About-module_indigoVersion__WKFlu","headerContent":"About-module_headerContent__YclOx","title":"About-module_title__k-6Zg","indigoFirstLine":"About-module_indigoFirstLine__-86rb","okButton":"About-module_okButton__FMcEk"};
17901
18036
 
17902
18037
  function AboutDialog(props) {
17903
18038
  var indigoInfo = props.indigoVersion && props.indigoVersion.split('.r');
17904
18039
  return jsxRuntime.jsxs(Dialog, {
17905
- className: "".concat(classes$B.about, " ").concat(classes$B.dialog_body),
18040
+ className: "".concat(classes$C.about, " ").concat(classes$C.dialog_body),
17906
18041
  params: props,
17907
18042
  buttons: [jsxRuntime.jsx("button", {
17908
18043
  onClick: props.onOk,
17909
- className: classes$B.okButton,
18044
+ className: classes$C.okButton,
17910
18045
  children: "Ok"
17911
18046
  }, "ok")],
17912
18047
  children: [jsxRuntime.jsx("div", {
17913
- className: classes$B.headerContent,
18048
+ className: classes$C.headerContent,
17914
18049
  children: jsxRuntime.jsxs("a", {
17915
18050
  href: props.overviewLink,
17916
18051
  target: "_blank",
17917
18052
  rel: "noopener noreferrer",
17918
18053
  children: [jsxRuntime.jsx(SvgLogo, {}), jsxRuntime.jsx("span", {
17919
- className: classes$B.title,
18054
+ className: classes$C.title,
17920
18055
  children: "Ketcher"
17921
18056
  })]
17922
18057
  })
17923
18058
  }), jsxRuntime.jsx("div", {
17924
- className: classes$B.body,
18059
+ className: classes$C.body,
17925
18060
  children: jsxRuntime.jsx("div", {
17926
- className: classes$B.verionsInfo,
18061
+ className: classes$C.verionsInfo,
17927
18062
  children: jsxRuntime.jsxs("dl", {
17928
- className: classes$B.ketcherVersionInfo,
18063
+ className: classes$C.ketcherVersionInfo,
17929
18064
  children: [jsxRuntime.jsx("dt", {
17930
18065
  children: jsxRuntime.jsxs("a", {
17931
18066
  href: props.overviewLink,
@@ -17938,7 +18073,7 @@ function AboutDialog(props) {
17938
18073
  children: props.date
17939
18074
  })]
17940
18075
  }), jsxRuntime.jsxs("div", {
17941
- className: classes$B.infoLinks,
18076
+ className: classes$C.infoLinks,
17942
18077
  children: [jsxRuntime.jsx("dt", {
17943
18078
  children: jsxRuntime.jsx("a", {
17944
18079
  href: props.feedbackLink,
@@ -17955,7 +18090,7 @@ function AboutDialog(props) {
17955
18090
  })
17956
18091
  })]
17957
18092
  }), jsxRuntime.jsx("br", {}), jsxRuntime.jsxs("div", {
17958
- className: classes$B.indigoVersion,
18093
+ className: classes$C.indigoVersion,
17959
18094
  children: [jsxRuntime.jsxs("a", {
17960
18095
  href: "http://lifescience.opensource.epam.com/indigo/",
17961
18096
  target: "_blank",
@@ -18033,7 +18168,7 @@ var ErrorPopover = function ErrorPopover(_ref) {
18033
18168
  });
18034
18169
  };
18035
18170
 
18036
- var classes$A = {"fieldSetLabel":"input-module_fieldSetLabel__DxKa5","input":"input-module_input__WzHgL","checkbox":"input-module_checkbox__CowSc","radioButton":"input-module_radioButton__2eHO0","slider":"input-module_slider__-Xsc0","select":"input-module_select__GhgBs","genericInput":"input-module_genericInput__XdZ2R"};
18171
+ var classes$B = {"fieldSetLabel":"input-module_fieldSetLabel__DxKa5","input":"input-module_input__WzHgL","checkbox":"input-module_checkbox__CowSc","radioButton":"input-module_radioButton__2eHO0","slider":"input-module_slider__-Xsc0","select":"input-module_select__GhgBs","genericInput":"input-module_genericInput__XdZ2R"};
18037
18172
 
18038
18173
  var _excluded$o = ["schema", "value", "onChange", "innerRef", "type", "isFocused"],
18039
18174
  _excluded2$4 = ["schema", "value", "onChange"],
@@ -18073,12 +18208,12 @@ function GenericInput(_ref) {
18073
18208
  value: value !== null && value !== void 0 ? value : '',
18074
18209
  onInput: onChange,
18075
18210
  onChange: onChange,
18076
- className: clsx__default["default"](classes$A.input, classes$A.genericInput),
18211
+ className: clsx__default["default"](classes$B.input, classes$B.genericInput),
18077
18212
  ref: inputRef
18078
18213
  }, props)), type === 'checkbox' && jsxRuntime.jsx("span", {
18079
- className: classes$A.checkbox
18214
+ className: classes$B.checkbox
18080
18215
  }), type === 'radio' && jsxRuntime.jsx("span", {
18081
- className: classes$A.radioButton
18216
+ className: classes$B.radioButton
18082
18217
  })]
18083
18218
  });
18084
18219
  }
@@ -18109,16 +18244,16 @@ function CheckBox(_ref3) {
18109
18244
  innerRef = _ref3.innerRef,
18110
18245
  rest = _objectWithoutProperties__default["default"](_ref3, _excluded3$1);
18111
18246
  return jsxRuntime.jsxs("div", {
18112
- className: classes$A.fieldSetItem,
18247
+ className: classes$B.fieldSetItem,
18113
18248
  children: [jsxRuntime.jsx("input", _objectSpread$A({
18114
18249
  type: "checkbox",
18115
18250
  checked: Boolean(value),
18116
18251
  onClick: onChange,
18117
18252
  onChange: onChange,
18118
- className: classes$A.input,
18253
+ className: classes$B.input,
18119
18254
  ref: innerRef
18120
18255
  }, rest)), jsxRuntime.jsx("span", {
18121
- className: classes$A.checkbox
18256
+ className: classes$B.checkbox
18122
18257
  })]
18123
18258
  });
18124
18259
  }
@@ -18139,7 +18274,7 @@ function Select$1(_ref4) {
18139
18274
  value: value,
18140
18275
  name: name,
18141
18276
  multiple: multiple,
18142
- className: clsx__default["default"](classes$A.select, className),
18277
+ className: clsx__default["default"](classes$B.select, className),
18143
18278
  children: enumSchema(schema, function (title, val) {
18144
18279
  return jsxRuntime.jsx("option", {
18145
18280
  value: val,
@@ -18169,18 +18304,18 @@ function FieldSet(_ref5) {
18169
18304
  onClick: onSelect,
18170
18305
  children: enumSchema(schema, function (title, val) {
18171
18306
  return jsxRuntime.jsx("li", {
18172
- className: classes$A.fieldSetItem,
18307
+ className: classes$B.fieldSetItem,
18173
18308
  children: jsxRuntime.jsxs("label", {
18174
- className: classes$A.fieldSetLabel,
18309
+ className: classes$B.fieldSetLabel,
18175
18310
  children: [jsxRuntime.jsx("input", _objectSpread$A({
18176
18311
  type: type,
18177
18312
  defaultChecked: type === 'radio' ? selected(val, checked) : selected(val, value),
18178
18313
  value: _typeof__default["default"](val) !== 'object' && val,
18179
- className: classes$A.input
18314
+ className: classes$B.input
18180
18315
  }, rest)), type === 'checkbox' && jsxRuntime.jsx("span", {
18181
- className: classes$A.checkbox
18316
+ className: classes$B.checkbox
18182
18317
  }), type === 'radio' && jsxRuntime.jsx("span", {
18183
- className: classes$A.radioButton
18318
+ className: classes$B.radioButton
18184
18319
  }), title]
18185
18320
  })
18186
18321
  }, title);
@@ -18210,7 +18345,7 @@ function Slider(_ref6) {
18210
18345
  name = _ref6.name,
18211
18346
  rest = _objectWithoutProperties__default["default"](_ref6, _excluded5$1);
18212
18347
  return jsxRuntime.jsxs("div", {
18213
- className: classes$A.slider,
18348
+ className: classes$B.slider,
18214
18349
  children: [jsxRuntime.jsx("input", _objectSpread$A({
18215
18350
  type: "checkbox",
18216
18351
  checked: value,
@@ -18397,7 +18532,7 @@ var Select = function Select(_ref2) {
18397
18532
  });
18398
18533
  };
18399
18534
 
18400
- var classes$z = {"button-common-styles":"form-module_button-common-styles__BvKSn","scrollbar":"form-module_scrollbar__MgLtc","dataError":"form-module_dataError__IXK1h","inputWrapper":"form-module_inputWrapper__sIDHH"};
18535
+ var classes$A = {"button-common-styles":"form-module_button-common-styles__BvKSn","scrollbar":"form-module_scrollbar__MgLtc","dataError":"form-module_dataError__IXK1h","inputWrapper":"form-module_inputWrapper__sIDHH"};
18401
18536
 
18402
18537
  var _excluded$n = ["schema", "result", "customValid"],
18403
18538
  _excluded2$3 = ["labelPos", "title", "children"],
@@ -18556,13 +18691,13 @@ function Field(props) {
18556
18691
  }, fieldOpts), rest));
18557
18692
  if (labelPos === false) return formField;
18558
18693
  return jsxRuntime.jsxs(Label, {
18559
- className: clsx__default["default"](_defineProperty__default["default"]({}, classes$z.dataError, dataError), className),
18694
+ className: clsx__default["default"](_defineProperty__default["default"]({}, classes$A.dataError, dataError), className),
18560
18695
  error: dataError,
18561
18696
  title: rest.title || desc.title,
18562
18697
  labelPos: labelPos,
18563
18698
  tooltip: rest === null || rest === void 0 ? void 0 : rest.tooltip,
18564
18699
  children: [jsxRuntime.jsx("span", {
18565
- className: classes$z.inputWrapper,
18700
+ className: classes$A.inputWrapper,
18566
18701
  onMouseEnter: handlePopoverOpen,
18567
18702
  onMouseLeave: handlePopoverClose,
18568
18703
  children: formField
@@ -18669,7 +18804,7 @@ function getErrorsObj(errors) {
18669
18804
  return errs;
18670
18805
  }
18671
18806
 
18672
- var classes$y = {"colorPickerInput":"ColorPicker-module_colorPickerInput__voi2r","selectedInput":"ColorPicker-module_selectedInput__Ykcjd","colorPickerWrap":"ColorPicker-module_colorPickerWrap__IAQVo","withPalette":"ColorPicker-module_withPalette__gTwNu","colorPicker":"ColorPicker-module_colorPicker__Uz3PM","colorPickerBtn":"ColorPicker-module_colorPickerBtn__nr6ph","colorPickerPreview":"ColorPicker-module_colorPickerPreview__-Rf-i","colorPickerOverlay":"ColorPicker-module_colorPickerOverlay__WzC-w","colorContainer":"ColorPicker-module_colorContainer__ib5up","hex":"ColorPicker-module_hex__mE9my","presetColors":"ColorPicker-module_presetColors__J-ysq","chooseColor":"ColorPicker-module_chooseColor__fdzt8","clicked":"ColorPicker-module_clicked__8BNoN","expandIcon":"ColorPicker-module_expandIcon__oH4ka","turnedIcon":"ColorPicker-module_turnedIcon__-zaq-","colorPickerWrapper":"ColorPicker-module_colorPickerWrapper__GJm87"};
18807
+ var classes$z = {"colorPickerInput":"ColorPicker-module_colorPickerInput__voi2r","selectedInput":"ColorPicker-module_selectedInput__Ykcjd","colorPickerWrap":"ColorPicker-module_colorPickerWrap__IAQVo","withPalette":"ColorPicker-module_withPalette__gTwNu","colorPicker":"ColorPicker-module_colorPicker__Uz3PM","colorPickerBtn":"ColorPicker-module_colorPickerBtn__nr6ph","colorPickerPreview":"ColorPicker-module_colorPickerPreview__-Rf-i","colorPickerOverlay":"ColorPicker-module_colorPickerOverlay__WzC-w","colorContainer":"ColorPicker-module_colorContainer__ib5up","hex":"ColorPicker-module_hex__mE9my","presetColors":"ColorPicker-module_presetColors__J-ysq","chooseColor":"ColorPicker-module_chooseColor__fdzt8","clicked":"ColorPicker-module_clicked__8BNoN","expandIcon":"ColorPicker-module_expandIcon__oH4ka","turnedIcon":"ColorPicker-module_turnedIcon__-zaq-","colorPickerWrapper":"ColorPicker-module_colorPickerWrapper__GJm87"};
18673
18808
 
18674
18809
  var presetColors = ['#FF4545', '#FFAD31', '#68D442', '#3ACACC', '#4434FF', '#9C9C9C', '#000000'];
18675
18810
  var ColorPicker = function ColorPicker(props) {
@@ -18718,32 +18853,32 @@ var ColorPicker = function ColorPicker(props) {
18718
18853
  }
18719
18854
  };
18720
18855
  return jsxRuntime.jsxs("div", {
18721
- className: classes$y.colorPickerWrapper,
18856
+ className: classes$z.colorPickerWrapper,
18722
18857
  "data-testid": isOpen ? 'color-picker-field-open' : 'color-picker-field',
18723
18858
  onClick: function onClick(e) {
18724
18859
  return e.preventDefault();
18725
18860
  },
18726
18861
  children: [jsxRuntime.jsxs("div", {
18727
- className: clsx__default["default"]((_clsx = {}, _defineProperty__default["default"](_clsx, classes$y.colorPickerInput, true), _defineProperty__default["default"](_clsx, classes$y.selectedInput, isOpen), _clsx)),
18862
+ className: clsx__default["default"]((_clsx = {}, _defineProperty__default["default"](_clsx, classes$z.colorPickerInput, true), _defineProperty__default["default"](_clsx, classes$z.selectedInput, isOpen), _clsx)),
18728
18863
  onClick: handleClick,
18729
18864
  children: [jsxRuntime.jsx("div", {
18730
- className: classes$y.colorPickerPreview,
18865
+ className: classes$z.colorPickerPreview,
18731
18866
  "data-testid": "color-picker-preview",
18732
18867
  style: {
18733
18868
  backgroundColor: value
18734
18869
  }
18735
18870
  }), jsxRuntime.jsx(Icon, {
18736
- className: clsx__default["default"]((_clsx2 = {}, _defineProperty__default["default"](_clsx2, classes$y.expandIcon, true), _defineProperty__default["default"](_clsx2, classes$y.turnedIcon, !isOpen), _clsx2)),
18871
+ className: clsx__default["default"]((_clsx2 = {}, _defineProperty__default["default"](_clsx2, classes$z.expandIcon, true), _defineProperty__default["default"](_clsx2, classes$z.turnedIcon, !isOpen), _clsx2)),
18737
18872
  name: "chevron"
18738
18873
  })]
18739
18874
  }), isOpen && jsxRuntime.jsxs("div", {
18740
- className: clsx__default["default"](classes$y.colorPickerWrap, isPaletteOpen && classes$y.withPalette),
18875
+ className: clsx__default["default"](classes$z.colorPickerWrap, isPaletteOpen && classes$z.withPalette),
18741
18876
  onBlur: handleBlur,
18742
18877
  "data-testid": "color-picker-preset",
18743
18878
  children: [jsxRuntime.jsxs("div", {
18744
- className: classes$y.presetColors,
18879
+ className: classes$z.presetColors,
18745
18880
  children: [jsxRuntime.jsx("button", {
18746
- className: clsx__default["default"](classes$y.chooseColor, isPaletteOpen && classes$y.clicked),
18881
+ className: clsx__default["default"](classes$z.chooseColor, isPaletteOpen && classes$z.clicked),
18747
18882
  onClick: handlePaletteOpen,
18748
18883
  autoFocus: true,
18749
18884
  "data-testid": "color-picker-btn"
@@ -18755,19 +18890,19 @@ var ColorPicker = function ColorPicker(props) {
18755
18890
  style: {
18756
18891
  backgroundColor: color
18757
18892
  },
18758
- className: classes$y.presetColor
18893
+ className: classes$z.presetColor
18759
18894
  }, color);
18760
18895
  })]
18761
18896
  }), isPaletteOpen && jsxRuntime.jsxs("div", {
18762
- className: classes$y.colorPicker,
18897
+ className: classes$z.colorPicker,
18763
18898
  "data-testid": "color-palette",
18764
18899
  children: [jsxRuntime.jsx(reactColorful.HexColorPicker, {
18765
18900
  color: value,
18766
18901
  onChange: handleChange
18767
18902
  }), jsxRuntime.jsxs("div", {
18768
- className: classes$y.colorContainer,
18903
+ className: classes$z.colorContainer,
18769
18904
  children: [jsxRuntime.jsx("span", {
18770
- className: classes$y.hex,
18905
+ className: classes$z.hex,
18771
18906
  children: "HEX"
18772
18907
  }), jsxRuntime.jsx(reactColorful.HexColorInput, {
18773
18908
  "data-testid": "color-picker-input",
@@ -18861,7 +18996,7 @@ function convertValue(value, measureFrom, measureTo) {
18861
18996
  return measureTo === 'px' || measureTo === 'pt' ? (value * measureMap[measureFrom] / measureMap[measureTo]).toFixed() - 0 : (value * measureMap[measureFrom] / measureMap[measureTo]).toFixed(3) - 0;
18862
18997
  }
18863
18998
 
18864
- var classes$x = {"button-common-styles":"buttons-module_button-common-styles__qWDOz","scrollbar":"buttons-module_scrollbar__SpaVV","openButton":"buttons-module_openButton__wErm9"};
18999
+ var classes$y = {"button-common-styles":"buttons-module_button-common-styles__qWDOz","scrollbar":"buttons-module_scrollbar__SpaVV","openButton":"buttons-module_openButton__wErm9"};
18865
19000
 
18866
19001
  var _excluded$l = ["children", "type", "server", "className"];
18867
19002
  function ownKeys$x(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; }
@@ -18915,7 +19050,7 @@ var OpenButton = function (_Component) {
18915
19050
  onClick: function onClick() {
18916
19051
  return _this2.btn.click();
18917
19052
  },
18918
- className: clsx__default["default"](classes$x.openButton, className)
19053
+ className: clsx__default["default"](classes$y.openButton, className)
18919
19054
  }, props), {}, {
18920
19055
  children: [jsxRuntime.jsx("input", {
18921
19056
  onChange: function onChange(ev) {
@@ -19017,7 +19152,7 @@ var fileSaver = function fileSaver(server) {
19017
19152
  });
19018
19153
  };
19019
19154
 
19020
- var classes$w = {"button-common-styles":"Accordion-module_button-common-styles__enTfZ","scrollbar":"Accordion-module_scrollbar__lJTa6","accordionWrapper":"Accordion-module_accordionWrapper__RKk00","expandIcon":"Accordion-module_expandIcon__ncUKv","turnedIcon":"Accordion-module_turnedIcon__v1sCA","accordionSummaryWrapper":"Accordion-module_accordionSummaryWrapper__roIRd","accordionSummary":"Accordion-module_accordionSummary__1Gq0d","accordionDetailsWrapper":"Accordion-module_accordionDetailsWrapper__fnSnc","hiddenAccordion":"Accordion-module_hiddenAccordion__WZFcJ","accordionDetails":"Accordion-module_accordionDetails__g2RM0","groupIcon":"Accordion-module_groupIcon__1g1lx","groupLabel":"Accordion-module_groupLabel__23y4U","changeMarker":"Accordion-module_changeMarker__UPtGx"};
19155
+ var classes$x = {"button-common-styles":"Accordion-module_button-common-styles__enTfZ","scrollbar":"Accordion-module_scrollbar__lJTa6","accordionWrapper":"Accordion-module_accordionWrapper__RKk00","expandIcon":"Accordion-module_expandIcon__ncUKv","turnedIcon":"Accordion-module_turnedIcon__v1sCA","accordionSummaryWrapper":"Accordion-module_accordionSummaryWrapper__roIRd","accordionSummary":"Accordion-module_accordionSummary__1Gq0d","accordionDetailsWrapper":"Accordion-module_accordionDetailsWrapper__fnSnc","hiddenAccordion":"Accordion-module_hiddenAccordion__WZFcJ","accordionDetails":"Accordion-module_accordionDetails__g2RM0","groupIcon":"Accordion-module_groupIcon__1g1lx","groupLabel":"Accordion-module_groupLabel__23y4U","changeMarker":"Accordion-module_changeMarker__UPtGx"};
19021
19156
 
19022
19157
  var Accordion = function Accordion(_ref) {
19023
19158
  var tabs = _ref.tabs,
@@ -19036,7 +19171,7 @@ var Accordion = function Accordion(_ref) {
19036
19171
  };
19037
19172
  };
19038
19173
  return jsxRuntime.jsx("div", {
19039
- className: clsx__default["default"](classes$w.accordionWrapper, className),
19174
+ className: clsx__default["default"](classes$x.accordionWrapper, className),
19040
19175
  children: tabs.map(function (_ref2) {
19041
19176
  var _clsx, _clsx2;
19042
19177
  var label = _ref2.label,
@@ -19046,28 +19181,28 @@ var Accordion = function Accordion(_ref) {
19046
19181
  return jsxRuntime.jsxs("div", {
19047
19182
  children: [jsxRuntime.jsx("div", {
19048
19183
  onClick: handleAccordionChange(label),
19049
- className: classes$w.accordionSummaryWrapper,
19184
+ className: classes$x.accordionSummaryWrapper,
19050
19185
  children: jsxRuntime.jsxs("div", {
19051
- className: classes$w.accordionSummary,
19186
+ className: classes$x.accordionSummary,
19052
19187
  children: [jsxRuntime.jsx(Icon, {
19053
- className: clsx__default["default"]((_clsx = {}, _defineProperty__default["default"](_clsx, classes$w.expandIcon, true), _defineProperty__default["default"](_clsx, classes$w.turnedIcon, !shouldGroupBeRended), _clsx)),
19188
+ className: clsx__default["default"]((_clsx = {}, _defineProperty__default["default"](_clsx, classes$x.expandIcon, true), _defineProperty__default["default"](_clsx, classes$x.turnedIcon, !shouldGroupBeRended), _clsx)),
19054
19189
  name: "chevron"
19055
19190
  }), jsxRuntime.jsxs("div", {
19056
- className: classes$w.groupLabel,
19191
+ className: classes$x.groupLabel,
19057
19192
  children: [jsxRuntime.jsx(Icon, {
19058
19193
  name: "elements-group",
19059
- className: classes$w.groupIcon
19194
+ className: classes$x.groupIcon
19060
19195
  }), jsxRuntime.jsx("span", {
19061
19196
  children: label
19062
19197
  })]
19063
19198
  }), changedGroups.has(label) && jsxRuntime.jsx("span", {
19064
- className: classes$w.changeMarker
19199
+ className: classes$x.changeMarker
19065
19200
  })]
19066
19201
  })
19067
19202
  }), jsxRuntime.jsx("div", {
19068
- className: clsx__default["default"]((_clsx2 = {}, _defineProperty__default["default"](_clsx2, classes$w.accordionDetailsWrapper, true), _defineProperty__default["default"](_clsx2, classes$w.hiddenAccordion, !shouldGroupBeRended), _clsx2)),
19203
+ className: clsx__default["default"]((_clsx2 = {}, _defineProperty__default["default"](_clsx2, classes$x.accordionDetailsWrapper, true), _defineProperty__default["default"](_clsx2, classes$x.hiddenAccordion, !shouldGroupBeRended), _clsx2)),
19069
19204
  children: jsxRuntime.jsx("div", {
19070
- className: classes$w.accordionDetails,
19205
+ className: classes$x.accordionDetails,
19071
19206
  children: content
19072
19207
  })
19073
19208
  })]
@@ -19125,7 +19260,7 @@ function SystemFonts(props) {
19125
19260
  });
19126
19261
  }
19127
19262
 
19128
- var classes$v = {"headerContent":"Settings-module_headerContent__wBYFf","title":"Settings-module_title__a6mod","button":"Settings-module_button__VZ2w7","accordion":"Settings-module_accordion__1uSYy","settings":"Settings-module_settings__Z5btc"};
19263
+ var classes$w = {"headerContent":"Settings-module_headerContent__wBYFf","title":"Settings-module_title__a6mod","button":"Settings-module_button__VZ2w7","accordion":"Settings-module_accordion__1uSYy","settings":"Settings-module_settings__Z5btc"};
19129
19264
 
19130
19265
  var fieldGroups = {
19131
19266
  resetToSelect: 'General',
@@ -19183,15 +19318,15 @@ var HeaderContent$1 = function HeaderContent(_ref) {
19183
19318
  if (formState.result.init) return _.isEqual(defaultSettings, initState);else return _.isEqual(defaultSettings, formState.result);
19184
19319
  };
19185
19320
  return jsxRuntime.jsxs("div", {
19186
- className: classes$v.headerContent,
19321
+ className: classes$w.headerContent,
19187
19322
  children: [jsxRuntime.jsx("span", {
19188
- className: classes$v.title,
19323
+ className: classes$w.title,
19189
19324
  children: " Settings"
19190
19325
  }), jsxRuntime.jsx(OpenButton, {
19191
19326
  title: "Open from File",
19192
19327
  server: server,
19193
19328
  onLoad: onOpenFile,
19194
- className: classes$v.button,
19329
+ className: classes$w.button,
19195
19330
  children: jsxRuntime.jsx(Icon, {
19196
19331
  name: "open-1"
19197
19332
  })
@@ -19199,14 +19334,14 @@ var HeaderContent$1 = function HeaderContent(_ref) {
19199
19334
  title: "Save to File",
19200
19335
  data: JSON.stringify(formState.result),
19201
19336
  filename: "ketcher-settings",
19202
- className: classes$v.button,
19337
+ className: classes$w.button,
19203
19338
  children: jsxRuntime.jsx(Icon, {
19204
19339
  name: "save-1"
19205
19340
  })
19206
19341
  }, "ketcher-settings"), jsxRuntime.jsx("button", {
19207
19342
  title: "Reset",
19208
19343
  onClick: onReset,
19209
- className: classes$v.button,
19344
+ className: classes$w.button,
19210
19345
  disabled: getIsResetDisabled(),
19211
19346
  children: jsxRuntime.jsx(Icon, {
19212
19347
  name: "reset"
@@ -19365,7 +19500,7 @@ var SettingsDialog = function SettingsDialog(props) {
19365
19500
  label: '3D Viewer',
19366
19501
  content:
19367
19502
  jsxRuntime.jsxs("fieldset", {
19368
- className: classes$v.viewer,
19503
+ className: classes$w.viewer,
19369
19504
  children: [jsxRuntime.jsx(Field, {
19370
19505
  name: "miewMode",
19371
19506
  component: Select,
@@ -19398,7 +19533,7 @@ var SettingsDialog = function SettingsDialog(props) {
19398
19533
  };
19399
19534
  var tabs = [generalTab, stereoTab, atomsTab, bondsTab, serverTab, threeDViewerTab, debuggingTab];
19400
19535
  return jsxRuntime.jsx(Dialog, {
19401
- className: classes$v.settings,
19536
+ className: classes$w.settings,
19402
19537
  result: function result() {
19403
19538
  return formState.result;
19404
19539
  },
@@ -19425,7 +19560,7 @@ var SettingsDialog = function SettingsDialog(props) {
19425
19560
  }, formState), {}, {
19426
19561
  children: jsxRuntime.jsx(Accordion, {
19427
19562
  tabs: tabs,
19428
- className: classes$v.accordion,
19563
+ className: classes$w.accordion,
19429
19564
  changedGroups: changedGroups
19430
19565
  })
19431
19566
  }))
@@ -19722,7 +19857,7 @@ function FrozenInput(_ref) {
19722
19857
  });
19723
19858
  }
19724
19859
 
19725
- var classes$u = {"button-common-styles":"Analyse-module_button-common-styles__8No07","scrollbar":"Analyse-module_scrollbar__UAaIN","analyse":"Analyse-module_analyse__MR-Tu","inputWrapper":"Analyse-module_inputWrapper__uR995","contentWrapper":"Analyse-module_contentWrapper__B4WCi","selectWrapper":"Analyse-module_selectWrapper__xEkKL","select":"Analyse-module_select__c6hFt"};
19860
+ var classes$v = {"button-common-styles":"Analyse-module_button-common-styles__8No07","scrollbar":"Analyse-module_scrollbar__UAaIN","analyse":"Analyse-module_analyse__MR-Tu","inputWrapper":"Analyse-module_inputWrapper__uR995","contentWrapper":"Analyse-module_contentWrapper__B4WCi","selectWrapper":"Analyse-module_selectWrapper__xEkKL","select":"Analyse-module_select__c6hFt"};
19726
19861
 
19727
19862
  var _excluded$i = ["values", "round", "loading", "onAnalyse", "onChangeRound"];
19728
19863
  function _createSuper$5(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$5(); return function _createSuperInternal() { var Super = _getPrototypeOf__default["default"](Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf__default["default"](this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn__default["default"](this, result); }; }
@@ -19760,7 +19895,7 @@ var AnalyseDialog = function (_Component) {
19760
19895
  props = _objectWithoutProperties__default["default"](_this$props, _excluded$i);
19761
19896
  return jsxRuntime.jsx(Dialog, {
19762
19897
  title: "Calculated Values",
19763
- className: classes$u.analyse,
19898
+ className: classes$v.analyse,
19764
19899
  withDivider: true,
19765
19900
  needMargin: true,
19766
19901
  valid: function valid() {
@@ -19793,9 +19928,9 @@ var AnalyseDialog = function (_Component) {
19793
19928
  withSelector: false
19794
19929
  }].map(function (item) {
19795
19930
  return jsxRuntime.jsxs("li", {
19796
- className: classes$u.contentWrapper,
19931
+ className: classes$v.contentWrapper,
19797
19932
  children: [jsxRuntime.jsxs("div", {
19798
- className: classes$u.inputWrapper,
19933
+ className: classes$v.inputWrapper,
19799
19934
  children: [jsxRuntime.jsxs("label", {
19800
19935
  children: [item.name, ":"]
19801
19936
  }), item.key === 'gross' ? jsxRuntime.jsx(FormulaInput, {
@@ -19808,7 +19943,7 @@ var AnalyseDialog = function (_Component) {
19808
19943
  value: values && !loading ? roundOff(values[item.key], round[item.round]) : 0
19809
19944
  })]
19810
19945
  }), item.withSelector ? jsxRuntime.jsxs("div", {
19811
- className: classes$u.selectWrapper,
19946
+ className: classes$v.selectWrapper,
19812
19947
  children: [jsxRuntime.jsx("span", {
19813
19948
  children: "Decimal places"
19814
19949
  }), jsxRuntime.jsx(Select, {
@@ -19817,7 +19952,7 @@ var AnalyseDialog = function (_Component) {
19817
19952
  onChange: function onChange(val) {
19818
19953
  return onChangeRound(item.round, val);
19819
19954
  },
19820
- className: classes$u.select
19955
+ className: classes$v.select
19821
19956
  })]
19822
19957
  }) : null]
19823
19958
  }, item.key);
@@ -19852,7 +19987,7 @@ var mapDispatchToProps$9 = function mapDispatchToProps(dispatch) {
19852
19987
  };
19853
19988
  var Analyse = reactRedux.connect(mapStateToProps$c, mapDispatchToProps$9)(AnalyseDialog);
19854
19989
 
19855
- var classes$t = {"button-common-styles":"Recognize-module_button-common-styles__B04E6","scrollbar":"Recognize-module_scrollbar__rohcP","recognize":"Recognize-module_recognize__66jG2","footerContent":"Recognize-module_footerContent__0MAC7","imagoVersion":"Recognize-module_imagoVersion__nBIj6","openButton":"Recognize-module_openButton__H-j5I","imagesContainer":"Recognize-module_imagesContainer__rXWWk","topBody":"Recognize-module_topBody__ZCCjN","output":"Recognize-module_output__WgRnP","picture":"Recognize-module_picture__x2Y7S","filename":"Recognize-module_filename__-1HIU","messageContainer":"Recognize-module_messageContainer__tMvyb","primaryButton":"Recognize-module_primaryButton__rzm03","secondaryButton":"Recognize-module_secondaryButton__H1Q28","struct":"Recognize-module_struct__W55TL"};
19990
+ var classes$u = {"button-common-styles":"Recognize-module_button-common-styles__B04E6","scrollbar":"Recognize-module_scrollbar__rohcP","recognize":"Recognize-module_recognize__66jG2","footerContent":"Recognize-module_footerContent__0MAC7","imagoVersion":"Recognize-module_imagoVersion__nBIj6","openButton":"Recognize-module_openButton__H-j5I","imagesContainer":"Recognize-module_imagesContainer__rXWWk","topBody":"Recognize-module_topBody__ZCCjN","output":"Recognize-module_output__WgRnP","picture":"Recognize-module_picture__x2Y7S","filename":"Recognize-module_filename__-1HIU","messageContainer":"Recognize-module_messageContainer__tMvyb","primaryButton":"Recognize-module_primaryButton__rzm03","secondaryButton":"Recognize-module_secondaryButton__H1Q28","struct":"Recognize-module_struct__W55TL"};
19856
19991
 
19857
19992
  var DialogActionButton = function DialogActionButton(_ref) {
19858
19993
  var clickHandler = _ref.clickHandler,
@@ -19884,11 +20019,11 @@ function FooterContent$3(_ref) {
19884
20019
  openHandler = _ref.openHandler,
19885
20020
  copyHandler = _ref.copyHandler;
19886
20021
  return jsxRuntime.jsxs("div", {
19887
- className: classes$t.footerContent,
20022
+ className: classes$u.footerContent,
19888
20023
  children: [jsxRuntime.jsxs(OpenButton, {
19889
20024
  onLoad: onImage,
19890
20025
  type: "image/*",
19891
- className: classes$t.openButton,
20026
+ className: classes$u.openButton,
19892
20027
  children: [jsxRuntime.jsx(Icon, {
19893
20028
  name: "open"
19894
20029
  }), jsxRuntime.jsx("span", {
@@ -19898,12 +20033,12 @@ function FooterContent$3(_ref) {
19898
20033
  children: [jsxRuntime.jsx(DialogActionButton, {
19899
20034
  disabled: !structStr,
19900
20035
  clickHandler: openHandler,
19901
- styles: classes$t.secondaryButton,
20036
+ styles: classes$u.secondaryButton,
19902
20037
  label: "Open as new Project"
19903
20038
  }, "openButton"), jsxRuntime.jsx(DialogActionButton, {
19904
20039
  disabled: !structStr,
19905
20040
  clickHandler: copyHandler,
19906
- styles: classes$t.primaryButton,
20041
+ styles: classes$u.primaryButton,
19907
20042
  label: "Add to Canvas",
19908
20043
  title: "Structure will be loaded as fragment and added to Clipboard"
19909
20044
  }, "copyButton")]
@@ -19954,7 +20089,7 @@ function RecognizeDialog(prop) {
19954
20089
  };
19955
20090
  return jsxRuntime.jsxs(Dialog, {
19956
20091
  title: "Import Structure from Image",
19957
- className: classes$t.recognize,
20092
+ className: classes$u.recognize,
19958
20093
  params: _objectSpread$u(_objectSpread$u({}, props), {}, {
19959
20094
  onOk: onOk
19960
20095
  }),
@@ -19971,9 +20106,9 @@ function RecognizeDialog(prop) {
19971
20106
  }),
19972
20107
  buttons: [],
19973
20108
  children: [jsxRuntime.jsxs("div", {
19974
- className: classes$t.topBody,
20109
+ className: classes$u.topBody,
19975
20110
  children: [jsxRuntime.jsxs("label", {
19976
- className: classes$t.imagoVersion,
20111
+ className: classes$u.imagoVersion,
19977
20112
  children: ["Imago version", jsxRuntime.jsx(Input$1, {
19978
20113
  schema: {
19979
20114
  "enum": imagoVersions,
@@ -19990,9 +20125,9 @@ function RecognizeDialog(prop) {
19990
20125
  children: "Recognized structure preview"
19991
20126
  })]
19992
20127
  }), jsxRuntime.jsxs("div", {
19993
- className: classes$t.imagesContainer,
20128
+ className: classes$u.imagesContainer,
19994
20129
  children: [jsxRuntime.jsxs("div", {
19995
- className: classes$t.picture,
20130
+ className: classes$u.picture,
19996
20131
  children: [file && isImage(file) && canPreviewImage && jsxRuntime.jsx("img", {
19997
20132
  alt: "",
19998
20133
  id: "pic",
@@ -20001,27 +20136,27 @@ function RecognizeDialog(prop) {
20001
20136
  setCanPreviewImage(false);
20002
20137
  }
20003
20138
  }), jsxRuntime.jsxs("span", {
20004
- className: classes$t.filename,
20139
+ className: classes$u.filename,
20005
20140
  children: [" ", file ? file.name : null, " "]
20006
20141
  }), file && isImage(file) && !canPreviewImage && jsxRuntime.jsx("div", {
20007
- className: classes$t.messageContainer,
20142
+ className: classes$u.messageContainer,
20008
20143
  children: jsxRuntime.jsxs("p", {
20009
20144
  children: ["Preview of '", file.type, "' MIME type is not supported by current browser"]
20010
20145
  })
20011
20146
  }), (!file || !isImage(file) && clearFile()) && jsxRuntime.jsx("div", {
20012
- className: classes$t.messageContainer,
20147
+ className: classes$u.messageContainer,
20013
20148
  children: jsxRuntime.jsx("p", {
20014
20149
  children: "Please choose image"
20015
20150
  })
20016
20151
  })]
20017
20152
  }), jsxRuntime.jsx("div", {
20018
- className: classes$t.output,
20153
+ className: classes$u.output,
20019
20154
  children: structStr && (
20020
20155
  structStr instanceof Promise || typeof structStr !== 'string' ? jsxRuntime.jsx("div", {
20021
- className: classes$t.messageContainer,
20156
+ className: classes$u.messageContainer,
20022
20157
  children: jsxRuntime.jsx(LoadingCircles, {})
20023
20158
  }) : jsxRuntime.jsx(StructRender, {
20024
- className: classes$t.struct,
20159
+ className: classes$u.struct,
20025
20160
  struct: structStr
20026
20161
  }))
20027
20162
  })]
@@ -20067,7 +20202,7 @@ var mapDispatchToProps$8 = function mapDispatchToProps(dispatch) {
20067
20202
  };
20068
20203
  var Recognize = reactRedux.connect(mapStateToProps$b, mapDispatchToProps$8)(RecognizeDialog);
20069
20204
 
20070
- var classes$s = {"button-common-styles":"Miew-module_button-common-styles__8FE-p","scrollbar":"Miew-module_scrollbar__ZMWH-","warning":"Miew-module_warning__IDl5F","applyButton":"Miew-module_applyButton__ZDE-i","miewDialog":"Miew-module_miewDialog__gHvYc","miewContainer":"Miew-module_miewContainer__2SNw3","miewDarkTheme":"Miew-module_miewDarkTheme__kMFzc"};
20205
+ var classes$t = {"button-common-styles":"Miew-module_button-common-styles__8FE-p","scrollbar":"Miew-module_scrollbar__ZMWH-","warning":"Miew-module_warning__IDl5F","applyButton":"Miew-module_applyButton__ZDE-i","miewDialog":"Miew-module_miewDialog__gHvYc","miewContainer":"Miew-module_miewContainer__2SNw3","miewDarkTheme":"Miew-module_miewDarkTheme__kMFzc"};
20071
20206
 
20072
20207
  var _excluded$g = ["miewOpts", "server", "struct", "onExportCML", "miewTheme"];
20073
20208
  var BACKGROUND_COLOR = {
@@ -20125,7 +20260,7 @@ function createMiewOptions(userOpts) {
20125
20260
  var CHANGING_WARNING = 'Stereocenters can be changed after the strong 3D rotation';
20126
20261
  var FooterContent$2 = function FooterContent() {
20127
20262
  return jsxRuntime.jsx("div", {
20128
- className: classes$s.warning,
20263
+ className: classes$t.warning,
20129
20264
  children: CHANGING_WARNING
20130
20265
  });
20131
20266
  };
@@ -20167,14 +20302,14 @@ var MiewDialog = function MiewDialog(_ref) {
20167
20302
  params: prop,
20168
20303
  buttons: ['Cancel', jsxRuntime.jsx("button", {
20169
20304
  onClick: exportCML,
20170
- className: classes$s.applyButton,
20305
+ className: classes$t.applyButton,
20171
20306
  children: "Apply"
20172
20307
  }, "apply")],
20173
20308
  footerContent: jsxRuntime.jsx(FooterContent$2, {}),
20174
- className: classes$s.miewDialog,
20309
+ className: classes$t.miewDialog,
20175
20310
  children: jsxRuntime.jsx("div", {
20176
20311
  children: jsxRuntime.jsx("div", {
20177
- className: "".concat(classes$s.miewContainer, " ").concat(miewTheme === 'dark' ? classes$s.miewDarkTheme : ''),
20312
+ className: "".concat(classes$t.miewContainer, " ").concat(miewTheme === 'dark' ? classes$t.miewDarkTheme : ''),
20178
20313
  children: jsxRuntime.jsx(Viewer__default["default"], {
20179
20314
  onInit: onMiewInit
20180
20315
  })
@@ -20214,7 +20349,7 @@ var ElementNumber = function ElementNumber(props) {
20214
20349
  });
20215
20350
  };
20216
20351
 
20217
- var classes$r = {"button-common-styles":"Atom-module_button-common-styles__ipWaI","scrollbar":"Atom-module_scrollbar__z5cVx","atomProps":"Atom-module_atomProps__pqBjY","accordionWrapper":"Atom-module_accordionWrapper__MSuU7","expandIcon":"Atom-module_expandIcon__mPszC","turnedIcon":"Atom-module_turnedIcon__0Kzwy","accordionSummaryWrapper":"Atom-module_accordionSummaryWrapper__MGqsq","accordionSummary":"Atom-module_accordionSummary__HMKzl","accordionDetailsWrapper":"Atom-module_accordionDetailsWrapper__p6EI7","hiddenAccordion":"Atom-module_hiddenAccordion__pDNdM","accordionDetails":"Atom-module_accordionDetails__-B3jK","checkbox":"Atom-module_checkbox__Vup40","reactionFlags":"Atom-module_reactionFlags__gdNb1","querySpecific":"Atom-module_querySpecific__7XxMr"};
20352
+ var classes$s = {"button-common-styles":"Atom-module_button-common-styles__ipWaI","scrollbar":"Atom-module_scrollbar__z5cVx","atomProps":"Atom-module_atomProps__pqBjY","accordionWrapper":"Atom-module_accordionWrapper__MSuU7","expandIcon":"Atom-module_expandIcon__mPszC","turnedIcon":"Atom-module_turnedIcon__0Kzwy","accordionSummaryWrapper":"Atom-module_accordionSummaryWrapper__MGqsq","accordionSummary":"Atom-module_accordionSummary__HMKzl","accordionDetailsWrapper":"Atom-module_accordionDetailsWrapper__p6EI7","hiddenAccordion":"Atom-module_hiddenAccordion__pDNdM","accordionDetails":"Atom-module_accordionDetails__-B3jK","checkbox":"Atom-module_checkbox__Vup40","reactionFlags":"Atom-module_reactionFlags__gdNb1","querySpecific":"Atom-module_querySpecific__7XxMr"};
20218
20353
 
20219
20354
  var _excluded$f = ["formState", "stereoParity", "isMultipleAtoms"];
20220
20355
  function ownKeys$t(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; }
@@ -20274,7 +20409,7 @@ var Atom = function Atom(props) {
20274
20409
  }, {
20275
20410
  groupName: 'Query specific',
20276
20411
  component: jsxRuntime.jsxs("div", {
20277
- className: classes$r.querySpecific,
20412
+ className: classes$s.querySpecific,
20278
20413
  children: [jsxRuntime.jsx(Field, {
20279
20414
  name: "ringBondCount",
20280
20415
  component: Select,
@@ -20290,13 +20425,13 @@ var Atom = function Atom(props) {
20290
20425
  }), jsxRuntime.jsx(Field, {
20291
20426
  name: "unsaturatedAtom",
20292
20427
  labelPos: "before",
20293
- className: classes$r.checkbox
20428
+ className: classes$s.checkbox
20294
20429
  })]
20295
20430
  })
20296
20431
  }, {
20297
20432
  groupName: 'Reaction flags',
20298
20433
  component: jsxRuntime.jsxs("div", {
20299
- className: classes$r.reactionFlags,
20434
+ className: classes$s.reactionFlags,
20300
20435
  children: [jsxRuntime.jsx(Field, {
20301
20436
  name: "invRet",
20302
20437
  component: Select,
@@ -20304,13 +20439,13 @@ var Atom = function Atom(props) {
20304
20439
  }), jsxRuntime.jsx(Field, {
20305
20440
  name: "exactChangeFlag",
20306
20441
  labelPos: "before",
20307
- className: classes$r.checkbox
20442
+ className: classes$s.checkbox
20308
20443
  })]
20309
20444
  })
20310
20445
  }];
20311
20446
  return jsxRuntime.jsx(Dialog, {
20312
20447
  title: "Atom Properties",
20313
- className: classes$r.atomProps,
20448
+ className: classes$s.atomProps,
20314
20449
  result: function result() {
20315
20450
  return formState.result;
20316
20451
  },
@@ -20336,7 +20471,7 @@ var Atom = function Atom(props) {
20336
20471
  init: rest
20337
20472
  }, formState), {}, {
20338
20473
  children: jsxRuntime.jsx("div", {
20339
- className: classes$r.accordionWrapper,
20474
+ className: classes$s.accordionWrapper,
20340
20475
  children: itemGroups.map(function (_ref) {
20341
20476
  var _clsx, _clsx2;
20342
20477
  var groupName = _ref.groupName,
@@ -20345,20 +20480,20 @@ var Atom = function Atom(props) {
20345
20480
  return jsxRuntime.jsxs("div", {
20346
20481
  children: [jsxRuntime.jsx("div", {
20347
20482
  onClick: handleAccordionChange(groupName),
20348
- className: classes$r.accordionSummaryWrapper,
20483
+ className: classes$s.accordionSummaryWrapper,
20349
20484
  children: jsxRuntime.jsxs("div", {
20350
- className: classes$r.accordionSummary,
20485
+ className: classes$s.accordionSummary,
20351
20486
  children: [jsxRuntime.jsx("span", {
20352
20487
  children: groupName
20353
20488
  }), jsxRuntime.jsx(Icon, {
20354
- className: clsx__default["default"]((_clsx = {}, _defineProperty__default["default"](_clsx, classes$r.expandIcon, true), _defineProperty__default["default"](_clsx, classes$r.turnedIcon, !shouldGroupBeRended), _clsx)),
20489
+ className: clsx__default["default"]((_clsx = {}, _defineProperty__default["default"](_clsx, classes$s.expandIcon, true), _defineProperty__default["default"](_clsx, classes$s.turnedIcon, !shouldGroupBeRended), _clsx)),
20355
20490
  name: "chevron"
20356
20491
  })]
20357
20492
  })
20358
20493
  }), jsxRuntime.jsx("div", {
20359
- className: clsx__default["default"]((_clsx2 = {}, _defineProperty__default["default"](_clsx2, classes$r.accordionDetailsWrapper, true), _defineProperty__default["default"](_clsx2, classes$r.hiddenAccordion, !shouldGroupBeRended), _clsx2)),
20494
+ className: clsx__default["default"]((_clsx2 = {}, _defineProperty__default["default"](_clsx2, classes$s.accordionDetailsWrapper, true), _defineProperty__default["default"](_clsx2, classes$s.hiddenAccordion, !shouldGroupBeRended), _clsx2)),
20360
20495
  children: jsxRuntime.jsx("div", {
20361
- className: classes$r.accordionDetails,
20496
+ className: classes$s.accordionDetails,
20362
20497
  children: component
20363
20498
  })
20364
20499
  })]
@@ -20392,7 +20527,7 @@ var mapStateToProps$9 = function mapStateToProps(state) {
20392
20527
  };
20393
20528
  var AtomContainer = reactRedux.connect(mapStateToProps$9)(Atom);
20394
20529
 
20395
- var classes$q = {"attachPoints":"Attach-module_attachPoints__5QEAv"};
20530
+ var classes$r = {"attachPoints":"Attach-module_attachPoints__5QEAv"};
20396
20531
 
20397
20532
  var _excluded$e = ["formState"];
20398
20533
  function ownKeys$s(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; }
@@ -20402,7 +20537,7 @@ var AttachPoints = function AttachPoints(props) {
20402
20537
  rest = _objectWithoutProperties__default["default"](props, _excluded$e);
20403
20538
  return jsxRuntime.jsx(Dialog, {
20404
20539
  title: "Attachment Points",
20405
- className: classes$q.attachPoints,
20540
+ className: classes$r.attachPoints,
20406
20541
  result: function result() {
20407
20542
  return formState.result;
20408
20543
  },
@@ -20435,7 +20570,7 @@ var mapStateToProps$8 = function mapStateToProps(state) {
20435
20570
  };
20436
20571
  var AttachPointsContainer = reactRedux.connect(mapStateToProps$8)(AttachPoints);
20437
20572
 
20438
- var classes$p = {"automap":"Automap-module_automap__531ko"};
20573
+ var classes$q = {"automap":"Automap-module_automap__531ko"};
20439
20574
 
20440
20575
  var _excluded$d = ["formState"];
20441
20576
  function ownKeys$r(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; }
@@ -20458,7 +20593,7 @@ var Automap = function Automap(props) {
20458
20593
  rest = _objectWithoutProperties__default["default"](props, _excluded$d);
20459
20594
  return jsxRuntime.jsx(Dialog, {
20460
20595
  title: "Reaction Auto-Mapping",
20461
- className: classes$p.automap,
20596
+ className: classes$q.automap,
20462
20597
  result: function result() {
20463
20598
  return formState.result;
20464
20599
  },
@@ -20499,7 +20634,7 @@ var mapDispatchToProps$6 = function mapDispatchToProps(dispatch, ownProps) {
20499
20634
  };
20500
20635
  var AutomapContainer = reactRedux.connect(mapStateToProps$7, mapDispatchToProps$6)(Automap);
20501
20636
 
20502
- var classes$o = {"bond":"Bond-module_bond__EDfLY"};
20637
+ var classes$p = {"bond":"Bond-module_bond__EDfLY"};
20503
20638
 
20504
20639
  var _excluded$c = ["formState"];
20505
20640
  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; }
@@ -20510,7 +20645,7 @@ var Bond = function Bond(props) {
20510
20645
  var bondProps = bond.properties;
20511
20646
  return jsxRuntime.jsx(Dialog, {
20512
20647
  title: "Bond Properties",
20513
- className: classes$o.bond,
20648
+ className: classes$p.bond,
20514
20649
  result: function result() {
20515
20650
  return formState.result;
20516
20651
  },
@@ -20551,7 +20686,7 @@ var mapStateToProps$6 = function mapStateToProps(state) {
20551
20686
  };
20552
20687
  var BondContainer = reactRedux.connect(mapStateToProps$6)(Bond);
20553
20688
 
20554
- var classes$n = {"field":"IfThenSelect-module_field__9YaPA"};
20689
+ var classes$o = {"field":"IfThenSelect-module_field__9YaPA"};
20555
20690
 
20556
20691
  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; }
20557
20692
  function _objectSpread$p(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$p(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$p(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
@@ -20574,14 +20709,14 @@ var IfThenSelect = function IfThenSelect(props) {
20574
20709
  });
20575
20710
  return jsxRuntime.jsx(Field, _objectSpread$p(_objectSpread$p({
20576
20711
  schema: desc,
20577
- className: classes$n.field
20712
+ className: classes$o.field
20578
20713
  }, props), {}, {
20579
20714
  component: Select,
20580
20715
  options: getSelectOptionsFromSchema(desc)
20581
20716
  }));
20582
20717
  };
20583
20718
 
20584
- var classes$m = {"button-common-styles":"RgroupLogic-module_button-common-styles__P-ABP","scrollbar":"RgroupLogic-module_scrollbar__gDniy","rgroupLogic":"RgroupLogic-module_rgroupLogic__q4RTy","resth":"RgroupLogic-module_resth__RL2qE"};
20719
+ var classes$n = {"button-common-styles":"RgroupLogic-module_button-common-styles__P-ABP","scrollbar":"RgroupLogic-module_scrollbar__gDniy","rgroupLogic":"RgroupLogic-module_rgroupLogic__q4RTy","resth":"RgroupLogic-module_resth__RL2qE"};
20585
20720
 
20586
20721
  var _excluded$b = ["formState", "label", "rgroupLabels"];
20587
20722
  function ownKeys$o(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; }
@@ -20593,7 +20728,7 @@ var RgroupLogic = function RgroupLogic(props) {
20593
20728
  rest = _objectWithoutProperties__default["default"](props, _excluded$b);
20594
20729
  return jsxRuntime.jsx(Dialog, {
20595
20730
  title: "R-Group Logic Condition",
20596
- className: classes$m.rgroupLogic,
20731
+ className: classes$n.rgroupLogic,
20597
20732
  result: function result() {
20598
20733
  return formState.result;
20599
20734
  },
@@ -20620,7 +20755,7 @@ var RgroupLogic = function RgroupLogic(props) {
20620
20755
  }), jsxRuntime.jsx(Field, {
20621
20756
  name: "resth",
20622
20757
  labelPos: "after",
20623
- className: classes$m.resth
20758
+ className: classes$n.resth
20624
20759
  }), jsxRuntime.jsx(IfThenSelect, {
20625
20760
  name: "ifthen",
20626
20761
  label: label,
@@ -20643,7 +20778,7 @@ var mapStateToProps$5 = function mapStateToProps(state) {
20643
20778
  };
20644
20779
  var RgroupLogicContainer = reactRedux.connect(mapStateToProps$5)(RgroupLogic);
20645
20780
 
20646
- var classes$l = {"button-common-styles":"Open-module_button-common-styles__NBSQP","scrollbar":"Open-module_scrollbar__sRvYM","open":"Open-module_open__m8V9g","textareaEditor":"Open-module_textareaEditor__ZbEVj","footerContent":"Open-module_footerContent__Q0hTw","buttonsContainer":"Open-module_buttonsContainer__L1HqU","openButton":"Open-module_openButton__cj3oU","cancelButton":"Open-module_cancelButton__0TQzA","copyButton":"Open-module_copyButton__KlXKd"};
20781
+ var classes$m = {"button-common-styles":"Open-module_button-common-styles__NBSQP","scrollbar":"Open-module_scrollbar__sRvYM","open":"Open-module_open__m8V9g","textareaEditor":"Open-module_textareaEditor__ZbEVj","footerContent":"Open-module_footerContent__Q0hTw","buttonsContainer":"Open-module_buttonsContainer__L1HqU","openButton":"Open-module_openButton__cj3oU","cancelButton":"Open-module_cancelButton__0TQzA","copyButton":"Open-module_copyButton__KlXKd"};
20647
20782
 
20648
20783
  var styles$8 = {"analyzingFileWrapper":"AnalyzingFile-module_analyzingFileWrapper__j0Ltf","fileBox":"AnalyzingFile-module_fileBox__ywFIh"};
20649
20784
 
@@ -20780,7 +20915,7 @@ var TextEditor = function TextEditor(_ref) {
20780
20915
  autoFocus = _ref$autoFocus === void 0 ? false : _ref$autoFocus;
20781
20916
  return jsxRuntime.jsx(jsxRuntime.Fragment, {
20782
20917
  children: jsxRuntime.jsx("textarea", {
20783
- className: classes$l.textareaEditor,
20918
+ className: classes$m.textareaEditor,
20784
20919
  value: structStr,
20785
20920
  onChange: function onChange(event) {
20786
20921
  return inputHandler(event.target.value);
@@ -20823,22 +20958,22 @@ var FooterContent$1 = function FooterContent(_ref) {
20823
20958
  copyHandler = _ref.copyHandler,
20824
20959
  onCancel = _ref.onCancel;
20825
20960
  return jsxRuntime.jsxs("div", {
20826
- className: classes$l.footerContent,
20961
+ className: classes$m.footerContent,
20827
20962
  children: [jsxRuntime.jsx("button", {
20828
20963
  onClick: onCancel,
20829
- className: classes$l.cancelButton,
20964
+ className: classes$m.cancelButton,
20830
20965
  children: "Cancel"
20831
20966
  }), jsxRuntime.jsxs("div", {
20832
- className: classes$l.buttonsContainer,
20967
+ className: classes$m.buttonsContainer,
20833
20968
  children: [jsxRuntime.jsx(DialogActionButton, {
20834
20969
  disabled: !structStr,
20835
20970
  clickHandler: openHandler,
20836
- styles: classes$l.openButton,
20971
+ styles: classes$m.openButton,
20837
20972
  label: "Open as New Project"
20838
20973
  }, "openButton"), jsxRuntime.jsx(DialogActionButton, {
20839
20974
  disabled: !structStr,
20840
20975
  clickHandler: copyHandler,
20841
- styles: classes$l.copyButton,
20976
+ styles: classes$m.copyButton,
20842
20977
  label: "Add to Canvas",
20843
20978
  title: "Structure will be loaded as fragment and added to Clipboard"
20844
20979
  }, "copyButton")]
@@ -20912,7 +21047,7 @@ var Open = function Open(props) {
20912
21047
  }
20913
21048
  return jsxRuntime.jsx(Dialog, {
20914
21049
  title: "Open structure",
20915
- className: classes$l.open,
21050
+ className: classes$m.open,
20916
21051
  params: rest,
20917
21052
  result: function result() {
20918
21053
  return null;
@@ -21036,7 +21171,7 @@ function couldBeSaved(struct, format) {
21036
21171
  return null;
21037
21172
  }
21038
21173
 
21039
- var classes$k = {"tabs":"Tabs-module_tabs__PuztJ","active":"Tabs-module_active__eeyNd"};
21174
+ var classes$l = {"tabs":"Tabs-module_tabs__PuztJ","active":"Tabs-module_active__eeyNd"};
21040
21175
 
21041
21176
  function ownKeys$k(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; }
21042
21177
  function _objectSpread$k(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$k(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$k(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
@@ -21088,10 +21223,10 @@ var Tabs = function (_Component) {
21088
21223
  className: className,
21089
21224
  tabIndex: tabIndex,
21090
21225
  children: jsxRuntime.jsx("li", {
21091
- className: classes$k.tabs,
21226
+ className: classes$l.tabs,
21092
21227
  children: tabs.map(function (tabPanel, index) {
21093
21228
  return jsxRuntime.jsx("a", {
21094
- className: clsx__default["default"](_defineProperty__default["default"]({}, classes$k.active, _this2.state.tabIndex === index)),
21229
+ className: clsx__default["default"](_defineProperty__default["default"]({}, classes$l.active, _this2.state.tabIndex === index)),
21095
21230
  onClick: function onClick(ev) {
21096
21231
  return _this2.changeTab(ev, index);
21097
21232
  },
@@ -21109,7 +21244,7 @@ var Tabs = function (_Component) {
21109
21244
  return Tabs;
21110
21245
  }(React.Component);
21111
21246
 
21112
- var classes$j = {"button-common-styles":"Save-module_button-common-styles__mpLS8","scrollbar":"Save-module_scrollbar__XMf7I","dialog":"Save-module_dialog__of-0M","formContainer":"Save-module_formContainer__v1pIq","tabs":"Save-module_tabs__TOB-R","warnings":"Save-module_warnings__1PxJT","warningsContainer":"Save-module_warningsContainer__-3yVy","warningsArr":"Save-module_warningsArr__bKUFY","previewBackground":"Save-module_previewBackground__AbaUf","previewArea":"Save-module_previewArea__-0SLb","loadingCirclesContainer":"Save-module_loadingCirclesContainer__COUKN","imageContainer":"Save-module_imageContainer__gFELk","previewMessage":"Save-module_previewMessage__CZfZB","ok":"Save-module_ok__SgeCM","cancel":"Save-module_cancel__SMkEV","saveTmpl":"Save-module_saveTmpl__O-d0T"};
21247
+ var classes$k = {"button-common-styles":"Save-module_button-common-styles__mpLS8","scrollbar":"Save-module_scrollbar__XMf7I","dialog":"Save-module_dialog__of-0M","formContainer":"Save-module_formContainer__v1pIq","tabs":"Save-module_tabs__TOB-R","warnings":"Save-module_warnings__1PxJT","warningsContainer":"Save-module_warningsContainer__-3yVy","warningsArr":"Save-module_warningsArr__bKUFY","previewBackground":"Save-module_previewBackground__AbaUf","previewArea":"Save-module_previewArea__-0SLb","loadingCirclesContainer":"Save-module_loadingCirclesContainer__COUKN","imageContainer":"Save-module_imageContainer__gFELk","previewMessage":"Save-module_previewMessage__CZfZB","ok":"Save-module_ok__SgeCM","cancel":"Save-module_cancel__SMkEV","saveTmpl":"Save-module_saveTmpl__O-d0T"};
21113
21248
 
21114
21249
  function ownKeys$j(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; }
21115
21250
  function _objectSpread$j(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$j(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$j(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
@@ -21261,7 +21396,7 @@ var SaveDialog = function (_Component) {
21261
21396
  tabIndex: 1
21262
21397
  }];
21263
21398
  return jsxRuntime.jsxs("div", {
21264
- className: classes$j.formContainer,
21399
+ className: classes$k.formContainer,
21265
21400
  children: [jsxRuntime.jsxs(Form$1, _objectSpread$j(_objectSpread$j({
21266
21401
  schema: _this.saveSchema,
21267
21402
  init: {
@@ -21278,7 +21413,7 @@ var SaveDialog = function (_Component) {
21278
21413
  component: Select
21279
21414
  })]
21280
21415
  })), jsxRuntime.jsx(Tabs, {
21281
- className: classes$j.tabs,
21416
+ className: classes$k.tabs,
21282
21417
  captions: tabs,
21283
21418
  tabIndex: _this.state.tabIndex,
21284
21419
  changeTab: _this.changeTab,
@@ -21299,13 +21434,13 @@ var SaveDialog = function (_Component) {
21299
21434
  var isCleanStruct = _this.props.struct.isBlank();
21300
21435
  var LoadingState = function LoadingState() {
21301
21436
  return jsxRuntime.jsx("div", {
21302
- className: classes$j.loadingCirclesContainer,
21437
+ className: classes$k.loadingCirclesContainer,
21303
21438
  children: jsxRuntime.jsx(LoadingCircles, {})
21304
21439
  });
21305
21440
  };
21306
21441
  var ImageContent = function ImageContent() {
21307
21442
  return jsxRuntime.jsx("div", {
21308
- className: classes$j.imageContainer,
21443
+ className: classes$k.imageContainer,
21309
21444
  children: !isCleanStruct && jsxRuntime.jsx("img", {
21310
21445
  src: "data:image/".concat(format, "+xml;base64,").concat(imageSrc),
21311
21446
  alt: "".concat(format, " preview")
@@ -21314,10 +21449,10 @@ var SaveDialog = function (_Component) {
21314
21449
  };
21315
21450
  var BinaryContent = function BinaryContent() {
21316
21451
  return jsxRuntime.jsx("div", {
21317
- className: classes$j.previewBackground,
21452
+ className: classes$k.previewBackground,
21318
21453
  children: jsxRuntime.jsx("textarea", {
21319
21454
  value: "Can not display binary content",
21320
- className: classes$j.previewArea,
21455
+ className: classes$k.previewArea,
21321
21456
  readOnly: true,
21322
21457
  ref: _this.textAreaRef
21323
21458
  })
@@ -21325,10 +21460,10 @@ var SaveDialog = function (_Component) {
21325
21460
  };
21326
21461
  var PreviewContent = function PreviewContent() {
21327
21462
  return jsxRuntime.jsx("div", {
21328
- className: classes$j.previewBackground,
21463
+ className: classes$k.previewBackground,
21329
21464
  children: jsxRuntime.jsx("textarea", {
21330
21465
  value: structStr,
21331
- className: classes$j.previewArea,
21466
+ className: classes$k.previewArea,
21332
21467
  readOnly: true,
21333
21468
  ref: _this.textAreaRef
21334
21469
  })
@@ -21351,12 +21486,12 @@ var SaveDialog = function (_Component) {
21351
21486
  var format = _formState$result3.format;
21352
21487
  var warnings = _this.getWarnings(format);
21353
21488
  return warnings.length ? jsxRuntime.jsx("div", {
21354
- className: classes$j.warnings,
21489
+ className: classes$k.warnings,
21355
21490
  children: warnings.map(function (warning) {
21356
21491
  return jsxRuntime.jsx("div", {
21357
- className: classes$j.warningsContainer,
21492
+ className: classes$k.warningsContainer,
21358
21493
  children: jsxRuntime.jsx("span", {
21359
- className: classes$j.warningsArr,
21494
+ className: classes$k.warningsArr,
21360
21495
  children: warning
21361
21496
  })
21362
21497
  });
@@ -21377,7 +21512,7 @@ var SaveDialog = function (_Component) {
21377
21512
  var savingStruct = _this.isBinaryCdxFormat(format) && !isLoading ? ketcherCore.b64toBlob(structStr) : structStr;
21378
21513
  var isMoleculeContain = _this.props.struct.atoms.size && _this.props.struct.bonds.size;
21379
21514
  var buttons = [jsxRuntime.jsx("button", {
21380
- className: classes$j.saveTmpl,
21515
+ className: classes$k.saveTmpl,
21381
21516
  disabled: disableControls || isCleanStruct || !isMoleculeContain,
21382
21517
  onClick: function onClick() {
21383
21518
  return _this.props.onTmplSave(_this.props.struct);
@@ -21386,7 +21521,7 @@ var SaveDialog = function (_Component) {
21386
21521
  }, "save-tmpl")];
21387
21522
  buttons.push( jsxRuntime.jsx("button", {
21388
21523
  mode: "onCancel",
21389
- className: classes$j.cancel,
21524
+ className: classes$k.cancel,
21390
21525
  onClick: function onClick() {
21391
21526
  return _this.props.onOk({});
21392
21527
  },
@@ -21402,7 +21537,7 @@ var SaveDialog = function (_Component) {
21402
21537
  type: "image/".concat(format, "+xml"),
21403
21538
  onSave: _this.props.onOk,
21404
21539
  disabled: disableControls || !formState.valid || isCleanStruct || !_this.props.server,
21405
- className: classes$j.ok,
21540
+ className: classes$k.ok,
21406
21541
  children: "Save"
21407
21542
  }, "save-image-button"));
21408
21543
  } else {
@@ -21414,7 +21549,7 @@ var SaveDialog = function (_Component) {
21414
21549
  server: _this.props.server,
21415
21550
  onSave: _this.props.onOk,
21416
21551
  disabled: disableControls || !formState.valid || isCleanStruct,
21417
- className: classes$j.ok,
21552
+ className: classes$k.ok,
21418
21553
  children: "Save"
21419
21554
  }, "save-file-button"));
21420
21555
  }
@@ -21458,7 +21593,7 @@ var SaveDialog = function (_Component) {
21458
21593
  key: "render",
21459
21594
  value: function render() {
21460
21595
  return jsxRuntime.jsx(Dialog, {
21461
- className: classes$j.dialog,
21596
+ className: classes$k.dialog,
21462
21597
  title: "Save Structure",
21463
21598
  params: this.props,
21464
21599
  buttons: this.getButtons(),
@@ -21497,7 +21632,7 @@ var mapDispatchToProps$4 = function mapDispatchToProps(dispatch) {
21497
21632
  };
21498
21633
  var Save = reactRedux.connect(mapStateToProps$3, mapDispatchToProps$4)(SaveDialog);
21499
21634
 
21500
- var classes$i = {"enhancedStereo":"enhancedStereo-module_enhancedStereo__8FLSY","stereoLabelItem":"enhancedStereo-module_stereoLabelItem__lEf-0","labelGroupSelect":"enhancedStereo-module_labelGroupSelect__K7TYC"};
21635
+ var classes$j = {"enhancedStereo":"enhancedStereo-module_enhancedStereo__8FLSY","stereoLabelItem":"enhancedStereo-module_stereoLabelItem__lEf-0","labelGroupSelect":"enhancedStereo-module_labelGroupSelect__K7TYC"};
21501
21636
 
21502
21637
  var _excluded$8 = ["struct", "formState", "init"];
21503
21638
  function ownKeys$i(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; }
@@ -21529,7 +21664,7 @@ var EnhancedStereo = function EnhancedStereo(props) {
21529
21664
  };
21530
21665
  return jsxRuntime.jsx(Dialog, {
21531
21666
  title: "Enhanced Stereochemistry",
21532
- className: classes$i.enhancedStereo,
21667
+ className: classes$j.enhancedStereo,
21533
21668
  params: rest,
21534
21669
  result: function result() {
21535
21670
  return _result;
@@ -21566,7 +21701,7 @@ var EnhancedStereo = function EnhancedStereo(props) {
21566
21701
  name: "andNumber",
21567
21702
  schema: _.range(1, maxAnd + 1),
21568
21703
  type: "text",
21569
- className: classes$i.labelGroupSelect
21704
+ className: classes$j.labelGroupSelect
21570
21705
  }), "Group"]
21571
21706
  }), maxOr !== 0 && jsxRuntime.jsxs("label", {
21572
21707
  children: [jsxRuntime.jsx(Field, {
@@ -21579,7 +21714,7 @@ var EnhancedStereo = function EnhancedStereo(props) {
21579
21714
  name: "orNumber",
21580
21715
  schema: _.range(1, maxOr + 1),
21581
21716
  type: "text",
21582
- className: classes$i.labelGroupSelect
21717
+ className: classes$j.labelGroupSelect
21583
21718
  }), "Group"]
21584
21719
  }), jsxRuntime.jsxs("label", {
21585
21720
  children: [jsxRuntime.jsx(Field, {
@@ -21724,7 +21859,7 @@ var LabelEdit$1 = reactRedux.connect(function (store) {
21724
21859
  };
21725
21860
  })(LabelEdit);
21726
21861
 
21727
- var classes$h = {"button-common-styles":"AtomInfo-module_button-common-styles__x3ucv","scrollbar":"AtomInfo-module_scrollbar__8GiyC","ket_atom_info":"AtomInfo-module_ket_atom_info__GOuZ6","none":"AtomInfo-module_none__PRuzx"};
21862
+ var classes$i = {"button-common-styles":"AtomInfo-module_button-common-styles__x3ucv","scrollbar":"AtomInfo-module_scrollbar__8GiyC","ket_atom_info":"AtomInfo-module_ket_atom_info__GOuZ6","none":"AtomInfo-module_none__PRuzx"};
21728
21863
 
21729
21864
  function AtomInfo(_ref) {
21730
21865
  var el = _ref.el,
@@ -21739,7 +21874,7 @@ function AtomInfo(_ref) {
21739
21874
  fontSize: '18px'
21740
21875
  };
21741
21876
  return jsxRuntime.jsxs("div", {
21742
- className: clsx__default["default"](classes$h.ket_atom_info, !isInfo && classes$h.none),
21877
+ className: clsx__default["default"](classes$i.ket_atom_info, !isInfo && classes$i.none),
21743
21878
  children: [jsxRuntime.jsx("div", {
21744
21879
  style: numberStyle,
21745
21880
  children: el.number
@@ -21972,13 +22107,35 @@ var VerticalBoxWithLines = function VerticalBoxWithLines() {
21972
22107
  });
21973
22108
  };
21974
22109
 
21975
- var classes$g = {"button-common-styles":"GenSet-module_button-common-styles__0Ro-U","scrollbar":"GenSet-module_scrollbar__Ev8Uz","genGroupLegendBox":"GenSet-module_genGroupLegendBox__CSTQr","legendBox":"GenSet-module_legendBox__0zIAk","SpecialNodes":"GenSet-module_SpecialNodes__oFKp3","AtomGenerics":"GenSet-module_AtomGenerics__MoQCf","GroupGenerics":"GenSet-module_GroupGenerics__pFPtX","Cyclic":"GenSet-module_Cyclic__VJRtt","Acyclic":"GenSet-module_Acyclic__R97MM","CyclicCarbo":"GenSet-module_CyclicCarbo__Aanb0","AcyclicCarbo":"GenSet-module_AcyclicCarbo__nowGn","CyclicHetero":"GenSet-module_CyclicHetero__bbOnT","AcyclicHetero":"GenSet-module_AcyclicHetero__hnr4G","button":"GenSet-module_button__TCbeM","selected":"GenSet-module_selected__58d2u"};
22110
+ var classes$h = {"button-common-styles":"GenSet-module_button-common-styles__0Ro-U","scrollbar":"GenSet-module_scrollbar__Ev8Uz","genGroupLegendBox":"GenSet-module_genGroupLegendBox__CSTQr","legendBox":"GenSet-module_legendBox__0zIAk","SpecialNodes":"GenSet-module_SpecialNodes__oFKp3","AtomGenerics":"GenSet-module_AtomGenerics__MoQCf","GroupGenerics":"GenSet-module_GroupGenerics__pFPtX","Cyclic":"GenSet-module_Cyclic__VJRtt","Acyclic":"GenSet-module_Acyclic__R97MM","CyclicCarbo":"GenSet-module_CyclicCarbo__Aanb0","AcyclicCarbo":"GenSet-module_AcyclicCarbo__nowGn","CyclicHetero":"GenSet-module_CyclicHetero__bbOnT","AcyclicHetero":"GenSet-module_AcyclicHetero__hnr4G"};
21976
22111
 
21977
22112
  var isGenericGroup = function isGenericGroup(group) {
21978
22113
  var cyclicGroups = ['Acyclic', 'Cyclic', 'Acyclic Carbo', 'Cyclic Carbo', 'Acyclic Hetero', 'Cyclic Hetero'];
21979
22114
  return cyclicGroups.includes(group);
21980
22115
  };
21981
22116
 
22117
+ var classes$g = {"button-common-styles":"ButtonGenSet-module_button-common-styles__3bEj7","scrollbar":"ButtonGenSet-module_scrollbar__CKIcM","button":"ButtonGenSet-module_button__hBoCQ","selected":"ButtonGenSet-module_selected__XAfYj"};
22118
+
22119
+ var ButtonGenSet = function ButtonGenSet(_ref) {
22120
+ var button = _ref.button,
22121
+ onAtomSelect = _ref.onAtomSelect,
22122
+ selected = _ref.selected,
22123
+ disabled = _ref.disabled;
22124
+ var titleText = disabled ? "".concat(button.label, " is disabled") : button.description || button.label;
22125
+ return jsxRuntime.jsx("button", {
22126
+ onClick: function onClick() {
22127
+ return onAtomSelect(button.label, false);
22128
+ },
22129
+ onDoubleClick: function onDoubleClick() {
22130
+ return onAtomSelect(button.label, true);
22131
+ },
22132
+ title: titleText,
22133
+ disabled: disabled,
22134
+ className: clsx__default["default"](_defineProperty__default["default"]({}, classes$g.selected, selected(button.label)), classes$g.button),
22135
+ children: button.label
22136
+ });
22137
+ };
22138
+
21982
22139
  var getGroupClassName = function getGroupClassName(groupName) {
21983
22140
  return groupName.replaceAll(' ', '');
21984
22141
  };
@@ -21987,7 +22144,8 @@ function GenSet(_ref) {
21987
22144
  selected = _ref.selected,
21988
22145
  onAtomSelect = _ref.onAtomSelect,
21989
22146
  className = _ref.className,
21990
- group = _ref.group;
22147
+ group = _ref.group,
22148
+ disabledQueryElements = _ref.disabledQueryElements;
21991
22149
  return jsxRuntime.jsx(jsxRuntime.Fragment, {
21992
22150
  children: labels.map(function (item, index) {
21993
22151
  var buttons = item.items;
@@ -21995,29 +22153,24 @@ function GenSet(_ref) {
21995
22153
  return jsxRuntime.jsxs("fieldset", {
21996
22154
  className: className,
21997
22155
  children: [jsxRuntime.jsx("div", {
21998
- className: classes$g[getGroupClassName(group)],
22156
+ className: classes$h[getGroupClassName(group)],
21999
22157
  children: buttons.map(function (button, index) {
22000
- return jsxRuntime.jsx("button", {
22001
- onClick: function onClick() {
22002
- return onAtomSelect(button.label, false);
22003
- },
22004
- onDoubleClick: function onDoubleClick() {
22005
- return onAtomSelect(button.label, true);
22006
- },
22007
- title: button.description || button.label,
22008
- className: clsx__default["default"](_defineProperty__default["default"]({}, classes$g.selected, selected(button.label)), classes$g.button),
22009
- children: button.label
22158
+ return jsxRuntime.jsx(ButtonGenSet, {
22159
+ button: button,
22160
+ onAtomSelect: onAtomSelect,
22161
+ selected: selected,
22162
+ disabled: Boolean(disabledQueryElements === null || disabledQueryElements === void 0 ? void 0 : disabledQueryElements.includes(button.label))
22010
22163
  }, index);
22011
22164
  })
22012
22165
  }), !isGenericGroup(group) && caption && jsxRuntime.jsx("div", {
22013
- className: classes$g.legendBox,
22166
+ className: classes$h.legendBox,
22014
22167
  children: jsxRuntime.jsx("legend", {
22015
22168
  children: caption
22016
22169
  })
22017
22170
  }), isGenericGroup(group) && caption && jsxRuntime.jsx("div", {
22018
- className: classes$g.genGroupLegendBox,
22171
+ className: classes$h.genGroupLegendBox,
22019
22172
  children: jsxRuntime.jsx("legend", {
22020
- className: classes$g.genGroupLegend,
22173
+ className: classes$h.genGroupLegend,
22021
22174
  children: caption
22022
22175
  })
22023
22176
  })]
@@ -22036,7 +22189,8 @@ var getLegendClassname = function getLegendClassname(title) {
22036
22189
  var GenGroup = function GenGroup(_ref) {
22037
22190
  var group = _ref.group,
22038
22191
  onAtomSelect = _ref.onAtomSelect,
22039
- selected = _ref.selected;
22192
+ selected = _ref.selected,
22193
+ disabledQueryElements = _ref.disabledQueryElements;
22040
22194
  return jsxRuntime.jsx("div", {
22041
22195
  className: styles$2.fieldFlexWrapper,
22042
22196
  children: jsxRuntime.jsxs("fieldset", {
@@ -22051,7 +22205,8 @@ var GenGroup = function GenGroup(_ref) {
22051
22205
  selected: selected,
22052
22206
  onAtomSelect: onAtomSelect,
22053
22207
  className: styles$2.subGroup,
22054
- group: group.title
22208
+ group: group.title,
22209
+ disabledQueryElements: disabledQueryElements
22055
22210
  })
22056
22211
  })]
22057
22212
  })
@@ -22074,36 +22229,38 @@ var getGenericsGroupsMap = function getGenericsGroupsMap(tree) {
22074
22229
  }
22075
22230
  return newGroups;
22076
22231
  };
22077
- var renderGenGroupComponent = function renderGenGroupComponent(group, selected, onAtomSelect) {
22232
+ var renderGenGroupComponent = function renderGenGroupComponent(group, selected, onAtomSelect, disabledQueryElements) {
22078
22233
  return jsxRuntime.jsx(GenGroup, {
22079
22234
  group: groupsMap[group],
22080
22235
  selected: selected,
22081
- onAtomSelect: onAtomSelect
22236
+ onAtomSelect: onAtomSelect,
22237
+ disabledQueryElements: disabledQueryElements
22082
22238
  });
22083
22239
  };
22084
22240
  var groupsMap = getGenericsGroupsMap(ketcherCore.Generics);
22085
22241
  function GenericGroups(_ref) {
22086
22242
  var selected = _ref.selected,
22087
- onAtomSelect = _ref.onAtomSelect;
22243
+ onAtomSelect = _ref.onAtomSelect,
22244
+ disabledQueryElements = _ref.disabledQueryElements;
22088
22245
  return jsxRuntime.jsxs("div", {
22089
22246
  className: classes$f.genericGroups,
22090
22247
  children: [jsxRuntime.jsxs("div", {
22091
22248
  className: classes$f.topGroupsContainer,
22092
- children: [renderGenGroupComponent(groupNames.atomsGen, selected, onAtomSelect), renderGenGroupComponent(groupNames.specialNodes, selected, onAtomSelect)]
22093
- }), renderGenGroupComponent(groupNames.groupGen, selected, onAtomSelect), jsxRuntime.jsx(HorizontalBoxWithLines, {}), jsxRuntime.jsxs("div", {
22249
+ children: [renderGenGroupComponent(groupNames.atomsGen, selected, onAtomSelect, disabledQueryElements), renderGenGroupComponent(groupNames.specialNodes, selected, onAtomSelect, disabledQueryElements)]
22250
+ }), renderGenGroupComponent(groupNames.groupGen, selected, onAtomSelect, disabledQueryElements), jsxRuntime.jsx(HorizontalBoxWithLines, {}), jsxRuntime.jsxs("div", {
22094
22251
  className: classes$f.groupGenerics,
22095
22252
  children: [jsxRuntime.jsxs("div", {
22096
- children: [renderGenGroupComponent(groupNames.groupAcyclic, selected, onAtomSelect), jsxRuntime.jsxs("div", {
22253
+ children: [renderGenGroupComponent(groupNames.groupAcyclic, selected, onAtomSelect, disabledQueryElements), jsxRuntime.jsxs("div", {
22097
22254
  className: classes$f.subgroupContainer,
22098
22255
  children: [jsxRuntime.jsx(VerticalBoxWithLines, {}), jsxRuntime.jsxs("div", {
22099
- children: [renderGenGroupComponent(groupNames.acyclicCarbo, selected, onAtomSelect), renderGenGroupComponent(groupNames.acyclicHetero, selected, onAtomSelect)]
22256
+ children: [renderGenGroupComponent(groupNames.acyclicCarbo, selected, onAtomSelect, disabledQueryElements), renderGenGroupComponent(groupNames.acyclicHetero, selected, onAtomSelect, disabledQueryElements)]
22100
22257
  })]
22101
22258
  })]
22102
22259
  }), jsxRuntime.jsxs("div", {
22103
- children: [renderGenGroupComponent(groupNames.groupCyclic, selected, onAtomSelect), jsxRuntime.jsxs("div", {
22260
+ children: [renderGenGroupComponent(groupNames.groupCyclic, selected, onAtomSelect, disabledQueryElements), jsxRuntime.jsxs("div", {
22104
22261
  className: classes$f.subgroupContainer,
22105
22262
  children: [jsxRuntime.jsx(VerticalBoxWithLines, {}), jsxRuntime.jsxs("div", {
22106
- children: [renderGenGroupComponent(groupNames.cyclicCarbo, selected, onAtomSelect), renderGenGroupComponent(groupNames.cyclicHetero, selected, onAtomSelect)]
22263
+ children: [renderGenGroupComponent(groupNames.cyclicCarbo, selected, onAtomSelect, disabledQueryElements), renderGenGroupComponent(groupNames.cyclicHetero, selected, onAtomSelect, disabledQueryElements)]
22107
22264
  })]
22108
22265
  })]
22109
22266
  })]
@@ -22384,7 +22541,8 @@ var Table = function Table(props) {
22384
22541
  needMargin: false,
22385
22542
  children: jsxRuntime.jsx(GenericGroups, {
22386
22543
  selected: selected,
22387
- onAtomSelect: onAtomSelect
22544
+ onAtomSelect: onAtomSelect,
22545
+ disabledQueryElements: props.disabledQueryElements
22388
22546
  })
22389
22547
  });
22390
22548
  };
@@ -22399,10 +22557,14 @@ function mapSelectionToProps(editor) {
22399
22557
  return {};
22400
22558
  }
22401
22559
  var mapStateToProps$1 = function mapStateToProps(state, ownProps) {
22560
+ var editor = state.editor;
22402
22561
  if (ownProps.values || ownProps.label) {
22403
22562
  return {};
22404
22563
  }
22405
- return mapSelectionToProps(state.editor);
22564
+ var disabledQueryElements = editor.render.options.disableQueryElements;
22565
+ return _objectSpread$a({
22566
+ disabledQueryElements: disabledQueryElements
22567
+ }, mapSelectionToProps(editor));
22406
22568
  };
22407
22569
  var mapDispatchToProps$2 = function mapDispatchToProps(dispatch, ownProps) {
22408
22570
  return {
@@ -22701,7 +22863,7 @@ var classes$8 = {"button-common-styles":"template-lib-module_button-common-style
22701
22863
 
22702
22864
  var _excluded$3 = ["onInit"],
22703
22865
  _excluded2$1 = ["name", "onNameEdit", "onAttachEdit"];
22704
- var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8, _templateObject9, _templateObject10, _templateObject11;
22866
+ var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8, _templateObject9, _templateObject10, _templateObject11, _templateObject12;
22705
22867
  function ownKeys$6(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; }
22706
22868
  function _objectSpread$6(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$6(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$6(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
22707
22869
  function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf__default["default"](Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf__default["default"](this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn__default["default"](this, result); }; }
@@ -22709,14 +22871,15 @@ function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Re
22709
22871
  var TemplateEditDialog = styled__default["default"](Dialog)(_templateObject || (_templateObject = _taggedTemplateLiteral__default["default"](["\n background-color: #fff;\n\n & header {\n text-transform: none;\n border-bottom: 1px solid #e1e5ea;\n margin: 0;\n padding: 12px;\n }\n\n & form {\n display: flex;\n\n & label::after {\n top: 92px;\n margin-right: 12px;\n }\n }\n"])));
22710
22872
  var Editor$2 = styled__default["default"]('div')(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral__default["default"](["\n border: 1px solid #b4b9d6;\n background-color: #ffff;\n border-radius: 5px;\n position: relative;\n height: 300px;\n width: 330px;\n overflow: hidden;\n\n & .structEditor {\n height: 100%;\n width: 100%;\n border: none;\n }\n"])));
22711
22873
  var Warning = styled__default["default"]('div')(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral__default["default"](["\n padding: 0 5px;\n"])));
22712
- var LeftColumn = styled__default["default"]('div')(_templateObject4 || (_templateObject4 = _taggedTemplateLiteral__default["default"](["\n padding: 12px;\n border-radius: 0 0 0 8px;\n background-color: #eff2f5;\n"])));
22713
- var RightColumn = styled__default["default"]('div')(_templateObject5 || (_templateObject5 = _taggedTemplateLiteral__default["default"](["\n width: 40%;\n min-width: 200px;\n box-sizing: border-box;\n padding: 12px;\n display: flex;\n flex-direction: column;\n"])));
22714
- var NameInput = styled__default["default"](Field)(_templateObject6 || (_templateObject6 = _taggedTemplateLiteral__default["default"](["\n display: flex;\n flex-direction: column;\n margin-bottom: 12px;\n\n & > input[type='text'] {\n display: block;\n width: 100%;\n box-sizing: border-box;\n padding: 4px 16px 4px 8px;\n border: 1px solid #cad3dd;\n border-radius: 4px;\n line-height: 16px;\n font-size: 14px;\n margin-top: 2px;\n\n &:hover {\n border-color: #43b5c0;\n }\n\n &:hover,\n :focus {\n box-shadow: none;\n }\n }\n\n & span {\n display: block;\n width: 100%;\n }\n"])));
22715
- var AttachmentOutput = styled__default["default"]('span')(_templateObject7 || (_templateObject7 = _taggedTemplateLiteral__default["default"](["\n display: block;\n width: 100%;\n height: 24px;\n box-sizing: border-box;\n padding: 4px 8px;\n border: 1px solid #cad3dd;\n border-radius: 4px;\n line-height: 14px;\n font-size: 14px;\n background-color: #eff2f5;\n margin-top: 2px;\n"])));
22716
- var Buttons = styled__default["default"]('div')(_templateObject8 || (_templateObject8 = _taggedTemplateLiteral__default["default"](["\n display: flex;\n flex-direction: row;\n margin-top: auto;\n justify-content: flex-end;\n gap: 8px;\n"])));
22717
- var buttonCommonStyles = react.css(_templateObject9 || (_templateObject9 = _taggedTemplateLiteral__default["default"](["\n width: fit-content;\n padding: 5px 8px;\n text-transform: none;\n font-size: 12px;\n line-height: 14px;\n box-shadow: none;\n"])));
22718
- var SaveButton = styled__default["default"](material.Button)(_templateObject10 || (_templateObject10 = _taggedTemplateLiteral__default["default"](["\n ", "\n background-color: #167782;\n\n &:hover {\n background-color: #43b5c0;\n box-shadow: none;\n }\n\n &:disabled {\n background-color: #e1e5ea;\n color: #333333;\n }\n"])), buttonCommonStyles);
22719
- var CancelButton = styled__default["default"](material.Button)(_templateObject11 || (_templateObject11 = _taggedTemplateLiteral__default["default"](["\n ", "\n border-color: #585858;\n color: #585858;\n\n &:hover {\n border-color: #333333;\n color: #333333;\n box-shadow: none;\n }\n"])), buttonCommonStyles);
22874
+ var Message = styled__default["default"]('div')(_templateObject4 || (_templateObject4 = _taggedTemplateLiteral__default["default"](["\n background-color: #e1e5ea;\n color: #333333;\n padding: 10px 12px;\n border-top: 1px solid #cad3dd;\n border-bottom: 1px solid #cad3dd;\n"])));
22875
+ var LeftColumn = styled__default["default"]('div')(_templateObject5 || (_templateObject5 = _taggedTemplateLiteral__default["default"](["\n padding: 12px;\n border-radius: 0 0 0 8px;\n background-color: #eff2f5;\n"])));
22876
+ var RightColumn = styled__default["default"]('div')(_templateObject6 || (_templateObject6 = _taggedTemplateLiteral__default["default"](["\n width: 40%;\n min-width: 200px;\n box-sizing: border-box;\n padding: 12px;\n display: flex;\n flex-direction: column;\n"])));
22877
+ var NameInput = styled__default["default"](Field)(_templateObject7 || (_templateObject7 = _taggedTemplateLiteral__default["default"](["\n display: flex;\n flex-direction: column;\n margin-bottom: 12px;\n\n & input[type='text'] {\n display: block;\n width: 100%;\n box-sizing: border-box;\n border: 1px solid #cad3dd;\n border-radius: 4px;\n line-height: 16px;\n font-size: 14px;\n margin-top: 4px;\n\n &:hover {\n border-color: #43b5c0;\n }\n\n &:hover,\n :focus {\n box-shadow: none;\n }\n }\n\n & span {\n display: block;\n width: 100%;\n }\n"])));
22878
+ var AttachmentOutput = styled__default["default"]('span')(_templateObject8 || (_templateObject8 = _taggedTemplateLiteral__default["default"](["\n display: block;\n width: 100%;\n height: 24px;\n box-sizing: border-box;\n padding: 4px 8px;\n border: 1px solid #cad3dd;\n border-radius: 4px;\n line-height: 14px;\n font-size: 14px;\n background-color: #eff2f5;\n margin-top: 4px;\n"])));
22879
+ var Buttons = styled__default["default"]('div')(_templateObject9 || (_templateObject9 = _taggedTemplateLiteral__default["default"](["\n display: flex;\n flex-direction: row;\n margin-top: auto;\n justify-content: flex-end;\n gap: 8px;\n"])));
22880
+ var buttonCommonStyles = react.css(_templateObject10 || (_templateObject10 = _taggedTemplateLiteral__default["default"](["\n width: fit-content;\n padding: 5px 8px;\n text-transform: none;\n font-size: 12px;\n line-height: 14px;\n box-shadow: none;\n"])));
22881
+ var SaveButton = styled__default["default"](material.Button)(_templateObject11 || (_templateObject11 = _taggedTemplateLiteral__default["default"](["\n ", "\n background-color: #167782;\n\n &:hover {\n background-color: #43b5c0;\n box-shadow: none;\n }\n\n &:disabled {\n background-color: #e1e5ea;\n color: #333333;\n }\n"])), buttonCommonStyles);
22882
+ var CancelButton = styled__default["default"](material.Button)(_templateObject12 || (_templateObject12 = _taggedTemplateLiteral__default["default"](["\n ", "\n border-color: #585858;\n color: #585858;\n\n &:hover {\n border-color: #333333;\n color: #333333;\n box-shadow: none;\n }\n"])), buttonCommonStyles);
22720
22883
  var editorStyles = {
22721
22884
  selectionStyle: {
22722
22885
  fill: '#167782',
@@ -22740,6 +22903,11 @@ var Attach = function (_Component) {
22740
22903
  props = _objectWithoutProperties__default["default"](_ref, _excluded$3);
22741
22904
  _classCallCheck__default["default"](this, Attach);
22742
22905
  _this = _super.call(this);
22906
+ _defineProperty__default["default"](_assertThisInitialized__default["default"](_this), "MODES", {
22907
+ SAVE: 'save',
22908
+ EDIT: 'edit'
22909
+ });
22910
+ _this.mode = _.isEmpty(props.tmpl.props) ? _this.MODES.SAVE : _this.MODES.EDIT;
22743
22911
  _this.tmpl = initTmpl(props.tmpl);
22744
22912
  onInit(_this.tmpl.struct.name, _this.tmpl.props);
22745
22913
  _this.onResult = _this.onResult.bind(_assertThisInitialized__default["default"](_this));
@@ -22783,8 +22951,10 @@ var Attach = function (_Component) {
22783
22951
  var options = Object.assign(editorStyles, this.props.globalSettings, {
22784
22952
  scale: getScale(struct)
22785
22953
  });
22786
- return jsxRuntime.jsx(TemplateEditDialog, {
22787
- title: "Template edit",
22954
+ var dialogTitle = this.mode === this.MODES.SAVE ? 'Save to Templates' : 'Template Edit';
22955
+ var warningObject = this.mode === this.MODES.SAVE ? 'Templates' : 'Edited templates';
22956
+ return jsxRuntime.jsxs(TemplateEditDialog, {
22957
+ title: dialogTitle,
22788
22958
  result: this.onResult,
22789
22959
  valid: function valid() {
22790
22960
  return _this2.props.formState.valid && name;
@@ -22792,7 +22962,13 @@ var Attach = function (_Component) {
22792
22962
  params: prop,
22793
22963
  buttons: [],
22794
22964
  needMargin: false,
22795
- children: jsxRuntime.jsxs(Form$1, _objectSpread$6(_objectSpread$6({
22965
+ children: [jsxRuntime.jsxs(Message, {
22966
+ children: [jsxRuntime.jsxs("div", {
22967
+ children: [warningObject, " are saved locally and cannot be accessed on different browsers or computers."]
22968
+ }), jsxRuntime.jsx("div", {
22969
+ children: "Be aware that other users of the same computer and browser can access them as well."
22970
+ })]
22971
+ }), jsxRuntime.jsxs(Form$1, _objectSpread$6(_objectSpread$6({
22796
22972
  schema: attachSchema,
22797
22973
  customValid: {
22798
22974
  name: function name(_name) {
@@ -22844,11 +23020,11 @@ var Attach = function (_Component) {
22844
23020
  },
22845
23021
  className: classes$8.button,
22846
23022
  disabled: !this.checkIsValidName(name),
22847
- children: "Apply"
23023
+ children: this.mode === this.MODES.SAVE ? 'Save' : 'Edit'
22848
23024
  })]
22849
23025
  })]
22850
23026
  })]
22851
- }))
23027
+ }))]
22852
23028
  });
22853
23029
  }
22854
23030
  }]);
@@ -23743,10 +23919,10 @@ function Modal(props) {
23743
23919
  var Component = modals[modal.name];
23744
23920
  if (!Component) throw new Error("There is no modal window named ".concat(modal.name));
23745
23921
  return jsxRuntime.jsx("div", {
23746
- className: clsx__default["default"](classes$E.modalOverlay, selectClasses.selectContainer),
23922
+ className: clsx__default["default"](classes$F.modalOverlay, selectClasses.selectContainer),
23747
23923
  ref: containerRef,
23748
23924
  children: jsxRuntime.jsx(Component, _objectSpread$3({
23749
- className: clsx__default["default"](_defineProperty__default["default"]({}, classes$E.smallScreen, height && height <= mediaSizes$1.smallHeight || width && width <= mediaSizes$1.smallWidth))
23925
+ className: clsx__default["default"](_defineProperty__default["default"]({}, classes$F.smallScreen, height && height <= mediaSizes$1.smallHeight || width && width <= mediaSizes$1.smallWidth))
23750
23926
  }, rest))
23751
23927
  });
23752
23928
  }
@@ -23790,6 +23966,24 @@ var mergeProps = function mergeProps(stateProps, dispatchProps) {
23790
23966
  };
23791
23967
  var ModalContainer = reactRedux.connect(mapStateToProps, mapDispatchToProps$1, mergeProps)(Modal);
23792
23968
 
23969
+ function generateCommonProperties(selectedElements, normalizedElement) {
23970
+ var properties = Object.getOwnPropertyNames(normalizedElement);
23971
+ var resultElementAttributes = {};
23972
+ properties.forEach(function (property) {
23973
+ var uniqueValues = new Set();
23974
+ selectedElements.forEach(function (element) {
23975
+ uniqueValues.add(element[property]);
23976
+ });
23977
+ var allElementsHaveTheSameValue = uniqueValues.size === 1;
23978
+ if (allElementsHaveTheSameValue) {
23979
+ resultElementAttributes[property] = normalizedElement[property];
23980
+ } else {
23981
+ resultElementAttributes[property] = '';
23982
+ }
23983
+ });
23984
+ return resultElementAttributes;
23985
+ }
23986
+
23793
23987
  function ownKeys$1(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; }
23794
23988
  function _objectSpread$1(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$1(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$1(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
23795
23989
  function initEditor(dispatch, getState) {
@@ -23833,7 +24027,7 @@ function initEditor(dispatch, getState) {
23833
24027
  },
23834
24028
  onElementEdit: function onElementEdit(selem) {
23835
24029
  if (isAtomsArray(selem)) {
23836
- var atomAttributes = generateCommonProperties(selem);
24030
+ var atomAttributes = generateCommonProperties(selem, fromAtom(selem[0]));
23837
24031
  return openDialog(dispatch, 'atomProps', _objectSpread$1(_objectSpread$1({}, atomAttributes), {}, {
23838
24032
  isMultipleAtoms: true
23839
24033
  })).then(toElement);
@@ -23896,8 +24090,9 @@ function initEditor(dispatch, getState) {
23896
24090
  onQuickEdit: function onQuickEdit(atom) {
23897
24091
  return openDialog(dispatch, 'labelEdit', atom);
23898
24092
  },
23899
- onBondEdit: function onBondEdit(bond) {
23900
- return openDialog(dispatch, 'bondProps', fromBond(bond)).then(toBond);
24093
+ onBondEdit: function onBondEdit(bonds) {
24094
+ var bondsAttributes = generateCommonProperties(bonds, bonds[0]);
24095
+ return openDialog(dispatch, 'bondProps', fromBond(bondsAttributes)).then(toBond);
23901
24096
  },
23902
24097
  onRgroupEdit: function onRgroupEdit(rgroup) {
23903
24098
  var struct = getState().editor.struct();
@@ -24111,8 +24306,8 @@ var KetcherBuilder = function () {
24111
24306
  initApp(element, staticResourcesUrl, {
24112
24307
  buttons: buttons || {},
24113
24308
  errorHandler: errorHandler || null,
24114
- version: "2.9.0-rc.7" ,
24115
- buildDate: "2023-04-19T07:45:20" ,
24309
+ version: "2.10.0-rc.1" ,
24310
+ buildDate: "2023-04-21T11:09:47" ,
24116
24311
  buildNumber: ''
24117
24312
  }, structService, resolve);
24118
24313
  });