ketcher-react 2.9.0-rc.5-dev.1 → 2.9.0-rc.6

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.
@@ -15,3 +15,6 @@
15
15
  ***************************************************************************/
16
16
  export declare const KETCHER_INIT_EVENT_NAME = "ketcher-init";
17
17
  export declare const KETCHER_SAVED_SETTINGS_KEY = "ketcher_editor_saved_settings";
18
+ export declare const MODES: {
19
+ FG: string;
20
+ };
package/dist/index.js CHANGED
@@ -2539,6 +2539,9 @@ var tools$1 = typeSchema$1["enum"].reduce(function (res, type, i) {
2539
2539
 
2540
2540
  var KETCHER_INIT_EVENT_NAME = 'ketcher-init';
2541
2541
  var KETCHER_SAVED_SETTINGS_KEY = 'ketcher_editor_saved_settings';
2542
+ var MODES = {
2543
+ FG: 'fg'
2544
+ };
2542
2545
 
2543
2546
  function ownKeys$1a(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
2544
2547
  function _objectSpread$1a(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$1a(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$1a(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
@@ -3073,7 +3076,7 @@ var zoom = {
3073
3076
 
3074
3077
  var openHelpLink = function openHelpLink() {
3075
3078
  var _window$open;
3076
- return (_window$open = window.open("https://github.com/epam/ketcher/blob/".concat("v2.9.0-rc.5-dev.1\n", "/documentation/help.md#ketcher-overview"))) === null || _window$open === void 0 ? void 0 : _window$open.focus();
3079
+ return (_window$open = window.open("https://github.com/epam/ketcher/blob/".concat("v2.9.0-rc.6\n", "/documentation/help.md#ketcher-overview"))) === null || _window$open === void 0 ? void 0 : _window$open.focus();
3077
3080
  };
3078
3081
  var help = {
3079
3082
  help: {
@@ -3098,7 +3101,7 @@ var functionalGroupsLib = {
3098
3101
  }
3099
3102
  },
3100
3103
  selected: function selected(editor) {
3101
- return editor._tool.mode === 'fg';
3104
+ return editor._tool.mode === MODES.FG;
3102
3105
  },
3103
3106
  disabled: function disabled(_, __, options) {
3104
3107
  return !options.app.functionalGroups;
@@ -8128,7 +8131,7 @@ function _objectSpread$10(target) { for (var i = 1; i < arguments.length; i++) {
8128
8131
  var initialState$1 = {
8129
8132
  lib: [],
8130
8133
  functionalGroupInfo: null,
8131
- mode: 'fg'
8134
+ mode: MODES.FG
8132
8135
  };
8133
8136
  var functionalGroupsReducer = function functionalGroupsReducer() {
8134
8137
  var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState$1;
@@ -8203,7 +8206,7 @@ function ownKeys$$(object, enumerableOnly) { var keys = Object.keys(object); if
8203
8206
  function _objectSpread$$(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$$(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$$(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
8204
8207
  var initialState = {
8205
8208
  lib: [],
8206
- mode: 'fg'
8209
+ mode: MODES.FG
8207
8210
  };
8208
8211
  var saltsAndSolventsReducer = function saltsAndSolventsReducer() {
8209
8212
  var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState;
@@ -12289,72 +12292,6 @@ function updateSelectedAtoms(_ref) {
12289
12292
  }
12290
12293
  }
12291
12294
 
12292
- var edgeOffset = 150;
12293
- function isCloseToEdgeOfScreen(event) {
12294
- var clientX = event.clientX,
12295
- clientY = event.clientY;
12296
- var body = document.body;
12297
- var isCloseToLeftEdgeOfScreen = clientX <= edgeOffset;
12298
- var isCloseToTopEdgeOfScreen = clientY <= edgeOffset;
12299
- var isCloseToRightEdgeOfScreen = body.clientWidth - clientX <= edgeOffset;
12300
- var isCloseToBottomEdgeOfScreen = body.clientHeight - clientY <= edgeOffset;
12301
- return {
12302
- isCloseToLeftEdgeOfScreen: isCloseToLeftEdgeOfScreen,
12303
- isCloseToTopEdgeOfScreen: isCloseToTopEdgeOfScreen,
12304
- isCloseToRightEdgeOfScreen: isCloseToRightEdgeOfScreen,
12305
- isCloseToBottomEdgeOfScreen: isCloseToBottomEdgeOfScreen
12306
- };
12307
- }
12308
- function isCloseToEdgeOfCanvas(event, canvasSize) {
12309
- var layerX = event.layerX,
12310
- layerY = event.layerY;
12311
- var isCloseToLeftEdgeOfCanvas = layerX <= edgeOffset;
12312
- var isCloseToTopEdgeOfCanvas = layerY <= edgeOffset;
12313
- var isCloseToRightEdgeOfCanvas = canvasSize.x - layerX <= edgeOffset;
12314
- var isCloseToBottomEdgeOfCanvas = canvasSize.y - layerY <= edgeOffset;
12315
- return {
12316
- isCloseToLeftEdgeOfCanvas: isCloseToLeftEdgeOfCanvas,
12317
- isCloseToTopEdgeOfCanvas: isCloseToTopEdgeOfCanvas,
12318
- isCloseToRightEdgeOfCanvas: isCloseToRightEdgeOfCanvas,
12319
- isCloseToBottomEdgeOfCanvas: isCloseToBottomEdgeOfCanvas
12320
- };
12321
- }
12322
- function calculateCanvasExtension(clientArea, currentCanvasSize, extensionVector) {
12323
- var newHorizontalScrollPosition = clientArea.scrollLeft + extensionVector.x;
12324
- var newVerticalScrollPosition = clientArea.scrollTop + extensionVector.y;
12325
- var horizontalExtension = 0;
12326
- var verticalExtension = 0;
12327
- if (newHorizontalScrollPosition > currentCanvasSize.x) {
12328
- horizontalExtension = newHorizontalScrollPosition - currentCanvasSize.x;
12329
- }
12330
- if (newHorizontalScrollPosition < 0) {
12331
- horizontalExtension = Math.abs(newHorizontalScrollPosition);
12332
- }
12333
- if (newVerticalScrollPosition > currentCanvasSize.y) {
12334
- verticalExtension = newVerticalScrollPosition - currentCanvasSize.y;
12335
- }
12336
- if (newVerticalScrollPosition < 0) {
12337
- verticalExtension = Math.abs(newVerticalScrollPosition);
12338
- }
12339
- return new ketcherCore.Vec2(horizontalExtension, verticalExtension, 0);
12340
- }
12341
- function shiftAndExtendCanvasByVector(vector, render) {
12342
- var clientArea = render.clientArea;
12343
- var extensionVector = calculateCanvasExtension(clientArea, render.sz.scaled(render.options.zoom), vector).scaled(1 / render.options.zoom);
12344
- if (extensionVector.x > 0 || extensionVector.y > 0) {
12345
- render.setPaperSize(render.sz.add(extensionVector));
12346
- render.setOffset(render.options.offset.add(vector));
12347
- render.ctab.translate(vector);
12348
- }
12349
- scrollByVector(vector, render);
12350
- render.update(false);
12351
- }
12352
- function scrollByVector(vector, render) {
12353
- var clientArea = render.clientArea;
12354
- clientArea.scrollLeft += vector.x * render.options.scale;
12355
- clientArea.scrollTop += vector.y * render.options.scale;
12356
- }
12357
-
12358
12295
  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; } } }; }
12359
12296
  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); }
12360
12297
  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; }
@@ -12495,7 +12432,9 @@ var SelectTool = function () {
12495
12432
  dragCtx.mergeItems = getMergeItems(editor, expSel);
12496
12433
  editor.hover(ketcherCore.getHoverToFuse(dragCtx.mergeItems));
12497
12434
  extendCanvas(rnd, event);
12498
- editor.update(dragCtx.action, true);
12435
+ editor.update(dragCtx.action, true, {
12436
+ extendCanvas: false
12437
+ });
12499
12438
  return true;
12500
12439
  }
12501
12440
  if (_classPrivateFieldGet__default["default"](this, _lassoHelper).running()) {
@@ -12696,45 +12635,50 @@ var SelectTool = function () {
12696
12635
  }();
12697
12636
  function extendCanvas(render, event) {
12698
12637
  var offset = 1;
12699
- var _isCloseToEdgeOfCanva = isCloseToEdgeOfCanvas(event, render.sz),
12638
+ var _isCloseToEdgeOfCanva = ketcherCore.isCloseToEdgeOfCanvas(event, render.sz),
12700
12639
  isCloseToLeftEdgeOfCanvas = _isCloseToEdgeOfCanva.isCloseToLeftEdgeOfCanvas,
12701
12640
  isCloseToTopEdgeOfCanvas = _isCloseToEdgeOfCanva.isCloseToTopEdgeOfCanvas,
12702
12641
  isCloseToRightEdgeOfCanvas = _isCloseToEdgeOfCanva.isCloseToRightEdgeOfCanvas,
12703
12642
  isCloseToBottomEdgeOfCanvas = _isCloseToEdgeOfCanva.isCloseToBottomEdgeOfCanvas;
12704
- var _isCloseToEdgeOfScree = isCloseToEdgeOfScreen(event),
12643
+ var _isCloseToEdgeOfScree = ketcherCore.isCloseToEdgeOfScreen(event),
12705
12644
  isCloseToLeftEdgeOfScreen = _isCloseToEdgeOfScree.isCloseToLeftEdgeOfScreen,
12706
12645
  isCloseToTopEdgeOfScreen = _isCloseToEdgeOfScree.isCloseToTopEdgeOfScreen,
12707
12646
  isCloseToRightEdgeOfScreen = _isCloseToEdgeOfScree.isCloseToRightEdgeOfScreen,
12708
12647
  isCloseToBottomEdgeOfScreen = _isCloseToEdgeOfScree.isCloseToBottomEdgeOfScreen;
12709
- if (isCloseToLeftEdgeOfCanvas) {
12710
- shiftAndExtendCanvasByVector(new ketcherCore.Vec2(-offset, 0, 0), render);
12648
+ var _getDirections = ketcherCore.getDirections(event),
12649
+ isMovingLeft = _getDirections.isMovingLeft,
12650
+ isMovingRight = _getDirections.isMovingRight,
12651
+ isMovingTop = _getDirections.isMovingTop,
12652
+ isMovingBottom = _getDirections.isMovingBottom;
12653
+ if (isCloseToLeftEdgeOfCanvas && isMovingLeft) {
12654
+ ketcherCore.shiftAndExtendCanvasByVector(new ketcherCore.Vec2(-offset, 0, 0), render);
12711
12655
  }
12712
- if (isCloseToTopEdgeOfCanvas) {
12713
- shiftAndExtendCanvasByVector(new ketcherCore.Vec2(0, -offset, 0), render);
12656
+ if (isCloseToTopEdgeOfCanvas && isMovingTop) {
12657
+ ketcherCore.shiftAndExtendCanvasByVector(new ketcherCore.Vec2(0, -offset, 0), render);
12714
12658
  }
12715
- if (isCloseToRightEdgeOfCanvas) {
12716
- shiftAndExtendCanvasByVector(new ketcherCore.Vec2(offset, 0, 0), render);
12659
+ if (isCloseToRightEdgeOfCanvas && isMovingRight) {
12660
+ ketcherCore.shiftAndExtendCanvasByVector(new ketcherCore.Vec2(offset, 0, 0), render);
12717
12661
  }
12718
- if (isCloseToBottomEdgeOfCanvas) {
12719
- shiftAndExtendCanvasByVector(new ketcherCore.Vec2(0, offset, 0), render);
12662
+ if (isCloseToBottomEdgeOfCanvas && isMovingBottom) {
12663
+ ketcherCore.shiftAndExtendCanvasByVector(new ketcherCore.Vec2(0, offset, 0), render);
12720
12664
  }
12721
- var isCloseToSomeEdgeOfCanvas = [isCloseToTopEdgeOfCanvas, isCloseToRightEdgeOfCanvas, isCloseToBottomEdgeOfCanvas, isCloseToLeftEdgeOfCanvas].some(function (isCloseToEdge) {
12665
+ var isCloseToSomeEdgeOfCanvas = [isCloseToTopEdgeOfCanvas && isMovingTop, isCloseToRightEdgeOfCanvas && isMovingRight, isCloseToBottomEdgeOfCanvas && isMovingBottom, isCloseToLeftEdgeOfCanvas && isMovingLeft].some(function (isCloseToEdge) {
12722
12666
  return isCloseToEdge;
12723
12667
  });
12724
12668
  if (isCloseToSomeEdgeOfCanvas) {
12725
12669
  return;
12726
12670
  }
12727
- if (isCloseToTopEdgeOfScreen) {
12728
- scrollByVector(new ketcherCore.Vec2(0, -offset), render);
12671
+ if (isCloseToTopEdgeOfScreen && isMovingTop) {
12672
+ ketcherCore.scrollByVector(new ketcherCore.Vec2(0, -offset), render);
12729
12673
  }
12730
- if (isCloseToBottomEdgeOfScreen) {
12731
- scrollByVector(new ketcherCore.Vec2(0, offset), render);
12674
+ if (isCloseToBottomEdgeOfScreen && isMovingBottom) {
12675
+ ketcherCore.scrollByVector(new ketcherCore.Vec2(0, offset), render);
12732
12676
  }
12733
- if (isCloseToLeftEdgeOfScreen) {
12734
- scrollByVector(new ketcherCore.Vec2(-offset, 0), render);
12677
+ if (isCloseToLeftEdgeOfScreen && isMovingLeft) {
12678
+ ketcherCore.scrollByVector(new ketcherCore.Vec2(-offset, 0), render);
12735
12679
  }
12736
- if (isCloseToRightEdgeOfScreen) {
12737
- scrollByVector(new ketcherCore.Vec2(offset, 0), render);
12680
+ if (isCloseToRightEdgeOfScreen && isMovingRight) {
12681
+ ketcherCore.scrollByVector(new ketcherCore.Vec2(offset, 0), render);
12738
12682
  }
12739
12683
  }
12740
12684
  function closestToSel(ci) {
@@ -14158,7 +14102,7 @@ var TemplateTool = function () {
14158
14102
  this.findItems.push('atoms');
14159
14103
  }
14160
14104
  var bond = frag.bonds.get(this.template.bid);
14161
- if (bond && this.mode !== 'fg') {
14105
+ if (bond && !this.isModeFunctionalGroup) {
14162
14106
  this.template.sign = getSign(frag, bond, this.template.xy0);
14163
14107
  this.findItems.push('bonds');
14164
14108
  }
@@ -14172,73 +14116,119 @@ var TemplateTool = function () {
14172
14116
  editor.hoverIcon.updatePosition();
14173
14117
  }
14174
14118
  _createClass__default["default"](TemplateTool, [{
14119
+ key: "showRemoveAbbreviationPopup",
14120
+ value: function showRemoveAbbreviationPopup() {
14121
+ var _this = this;
14122
+ return this.editor.event.removeFG.dispatch({
14123
+ fgIds: this.targetGroupsIds
14124
+ }).then(function () {
14125
+ _this.targetGroupsIds.length = 0;
14126
+ return Promise.resolve();
14127
+ });
14128
+ }
14129
+ }, {
14130
+ key: "isModeFunctionalGroup",
14131
+ get: function get() {
14132
+ return this.mode === MODES.FG;
14133
+ }
14134
+ }, {
14175
14135
  key: "mousedown",
14176
- value: function mousedown(event) {
14177
- var closestItem = this.editor.findItem(event, ['atoms', 'bonds', 'sgroups', 'functionalGroups']);
14178
- var ctab = this.editor.render.ctab;
14179
- var struct = ctab.molecule;
14180
- if (struct.functionalGroups.size) {
14181
- this.targetGroupsIds = getGroupIdsFromItemArrays(struct, _objectSpread$N(_objectSpread$N({}, (closestItem === null || closestItem === void 0 ? void 0 : closestItem.map) === 'atoms' && {
14182
- atoms: [closestItem.id]
14183
- }), (closestItem === null || closestItem === void 0 ? void 0 : closestItem.map) === 'bonds' && {
14184
- bonds: [closestItem.id]
14185
- }));
14186
- if ((closestItem === null || closestItem === void 0 ? void 0 : closestItem.map) === 'functionalGroups' && ketcherCore.FunctionalGroup.isContractedFunctionalGroup(closestItem.id, struct.functionalGroups)) {
14187
- this.targetGroupsIds.push(closestItem.id);
14188
- }
14189
- }
14190
- this.editor.hover(null);
14191
- this.dragCtx = {
14192
- xy0: this.editor.render.page2obj(event),
14193
- item: this.editor.findItem(event, this.findItems)
14194
- };
14195
- var dragCtx = this.dragCtx;
14196
- var ci = dragCtx.item;
14197
- if (!ci || this.isSaltOrSolvent) {
14198
- delete dragCtx.item;
14199
- return;
14200
- }
14201
- if (ci.map === 'bonds' && this.mode !== 'fg') {
14202
- var _struct$atoms$get, _struct$halfBonds$get;
14203
- var xy0 = new ketcherCore.Vec2();
14204
- var bond = struct.bonds.get(ci.id);
14205
- var 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;
14206
- var frIds = struct.getFragmentIds(frid);
14207
- var count = 0;
14208
- var 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;
14209
- if (loop && loop < 0) {
14210
- var _struct$halfBonds$get2;
14211
- 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;
14212
- }
14213
- if (loop && loop >= 0) {
14214
- var _struct$loops$get;
14215
- var loopHbs = (_struct$loops$get = struct.loops.get(loop)) === null || _struct$loops$get === void 0 ? void 0 : _struct$loops$get.hbs;
14216
- loopHbs === null || loopHbs === void 0 ? void 0 : loopHbs.forEach(function (hb) {
14217
- var _struct$halfBonds$get3;
14218
- var halfBondBegin = (_struct$halfBonds$get3 = struct.halfBonds.get(hb)) === null || _struct$halfBonds$get3 === void 0 ? void 0 : _struct$halfBonds$get3.begin;
14219
- if (halfBondBegin) {
14220
- var hbbAtom = struct.atoms.get(halfBondBegin);
14221
- if (hbbAtom) {
14222
- xy0.add_(hbbAtom.pp);
14223
- count++;
14224
- }
14225
- }
14226
- });
14227
- } else {
14228
- frIds.forEach(function (id) {
14229
- var atomById = struct.atoms.get(id);
14230
- if (atomById) {
14231
- xy0.add_(atomById.pp);
14232
- count++;
14136
+ value: function () {
14137
+ var _mousedown = _asyncToGenerator__default["default"]( _regeneratorRuntime__default["default"].mark(function _callee(event) {
14138
+ var _struct$functionalGro;
14139
+ 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;
14140
+ return _regeneratorRuntime__default["default"].wrap(function _callee$(_context) {
14141
+ while (1) {
14142
+ switch (_context.prev = _context.next) {
14143
+ case 0:
14144
+ closestItem = this.editor.findItem(event, ['atoms', 'bonds', 'sgroups', 'functionalGroups']);
14145
+ ctab = this.editor.render.ctab;
14146
+ struct = ctab.molecule;
14147
+ if (struct.functionalGroups.size) {
14148
+ this.targetGroupsIds = getGroupIdsFromItemArrays(struct, _objectSpread$N(_objectSpread$N({}, (closestItem === null || closestItem === void 0 ? void 0 : closestItem.map) === 'atoms' && {
14149
+ atoms: [closestItem.id]
14150
+ }), (closestItem === null || closestItem === void 0 ? void 0 : closestItem.map) === 'bonds' && {
14151
+ bonds: [closestItem.id]
14152
+ }));
14153
+ if (
14154
+ (closestItem === null || closestItem === void 0 ? void 0 : closestItem.map) === 'functionalGroups' && ketcherCore.FunctionalGroup.isContractedFunctionalGroup(closestItem.id, struct.functionalGroups)) {
14155
+ this.targetGroupsIds.push(closestItem.id);
14156
+ }
14157
+ }
14158
+ isTargetExpanded = (_struct$functionalGro = struct.functionalGroups.get(this.targetGroupsIds[0])) === null || _struct$functionalGro === void 0 ? void 0 : _struct$functionalGro.isExpanded;
14159
+ isTargetAtomOrBond = this.targetGroupsIds.length && !this.isModeFunctionalGroup;
14160
+ if (!(isTargetAtomOrBond || isTargetExpanded)) {
14161
+ _context.next = 10;
14162
+ break;
14163
+ }
14164
+ _context.next = 9;
14165
+ return this.showRemoveAbbreviationPopup();
14166
+ case 9:
14167
+ return _context.abrupt("return");
14168
+ case 10:
14169
+ this.editor.hover(null);
14170
+ this.dragCtx = {
14171
+ xy0: this.editor.render.page2obj(event),
14172
+ item: this.editor.findItem(event, this.findItems)
14173
+ };
14174
+ dragCtx = this.dragCtx;
14175
+ ci = dragCtx.item;
14176
+ if (!(!ci || this.isSaltOrSolvent)) {
14177
+ _context.next = 17;
14178
+ break;
14179
+ }
14180
+ delete dragCtx.item;
14181
+ return _context.abrupt("return");
14182
+ case 17:
14183
+ if (ci.map === 'bonds' && !this.isModeFunctionalGroup) {
14184
+ xy0 = new ketcherCore.Vec2();
14185
+ bond = struct.bonds.get(ci.id);
14186
+ 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;
14187
+ frIds = struct.getFragmentIds(frid);
14188
+ count = 0;
14189
+ 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;
14190
+ if (loop && loop < 0) {
14191
+ 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;
14192
+ }
14193
+ if (loop && loop >= 0) {
14194
+ loopHbs = (_struct$loops$get = struct.loops.get(loop)) === null || _struct$loops$get === void 0 ? void 0 : _struct$loops$get.hbs;
14195
+ loopHbs === null || loopHbs === void 0 ? void 0 : loopHbs.forEach(function (hb) {
14196
+ var _struct$halfBonds$get3;
14197
+ var halfBondBegin = (_struct$halfBonds$get3 = struct.halfBonds.get(hb)) === null || _struct$halfBonds$get3 === void 0 ? void 0 : _struct$halfBonds$get3.begin;
14198
+ if (halfBondBegin) {
14199
+ var hbbAtom = struct.atoms.get(halfBondBegin);
14200
+ if (hbbAtom) {
14201
+ xy0.add_(hbbAtom.pp);
14202
+ count++;
14203
+ }
14204
+ }
14205
+ });
14206
+ } else {
14207
+ frIds.forEach(function (id) {
14208
+ var atomById = struct.atoms.get(id);
14209
+ if (atomById) {
14210
+ xy0.add_(atomById.pp);
14211
+ count++;
14212
+ }
14213
+ });
14214
+ }
14215
+ dragCtx.v0 = xy0.scaled(1 / count);
14216
+ sign = getSign(struct, bond, dragCtx.v0);
14217
+ dragCtx.sign1 = sign || 1;
14218
+ dragCtx.sign2 = this.template.sign;
14219
+ }
14220
+ case 18:
14221
+ case "end":
14222
+ return _context.stop();
14233
14223
  }
14234
- });
14235
- }
14236
- dragCtx.v0 = xy0.scaled(1 / count);
14237
- var sign = getSign(struct, bond, dragCtx.v0);
14238
- dragCtx.sign1 = sign || 1;
14239
- dragCtx.sign2 = this.template.sign;
14224
+ }
14225
+ }, _callee, this);
14226
+ }));
14227
+ function mousedown(_x) {
14228
+ return _mousedown.apply(this, arguments);
14240
14229
  }
14241
- }
14230
+ return mousedown;
14231
+ }()
14242
14232
  }, {
14243
14233
  key: "mousemove",
14244
14234
  value: function mousemove(event) {
@@ -14253,7 +14243,7 @@ var TemplateTool = function () {
14253
14243
  var targetPos = null;
14254
14244
  var eventPos = this.editor.render.page2obj(event);
14255
14245
  var struct = this.editor.render.ctab.molecule;
14256
- if (ci && ci.map === 'bonds' && this.mode !== 'fg') {
14246
+ if (ci && ci.map === 'bonds' && !this.isModeFunctionalGroup) {
14257
14247
  var bond = struct.bonds.get(ci.id);
14258
14248
  var sign = getSign(struct, bond, eventPos);
14259
14249
  if (dragCtx.sign1 * this.template.sign > 0) {
@@ -14284,7 +14274,7 @@ var TemplateTool = function () {
14284
14274
  var atom = struct.atoms.get(atomId);
14285
14275
  targetPos = atom === null || atom === void 0 ? void 0 : atom.pp;
14286
14276
  if (targetPos) {
14287
- extraBond = this.mode === 'fg' ? true : ketcherCore.Vec2.dist(targetPos, eventPos) > 1;
14277
+ extraBond = this.isModeFunctionalGroup ? true : ketcherCore.Vec2.dist(targetPos, eventPos) > 1;
14288
14278
  }
14289
14279
  }
14290
14280
  }
@@ -14330,7 +14320,7 @@ var TemplateTool = function () {
14330
14320
  }
14331
14321
  dragCtx.action = action;
14332
14322
  this.editor.update(dragCtx.action, true);
14333
- if (this.mode !== 'fg') {
14323
+ if (!this.isModeFunctionalGroup) {
14334
14324
  dragCtx.mergeItems = ketcherCore.getItemsToFuse(this.editor, pasteItems);
14335
14325
  this.editor.hover(ketcherCore.getHoverToFuse(dragCtx.mergeItems));
14336
14326
  }
@@ -14340,15 +14330,9 @@ var TemplateTool = function () {
14340
14330
  }, {
14341
14331
  key: "mouseup",
14342
14332
  value: function mouseup(event) {
14343
- var _this = this,
14333
+ var _this2 = this,
14344
14334
  _ci;
14345
14335
  var dragCtx = this.dragCtx;
14346
- if (this.targetGroupsIds.length && this.mode !== 'fg') {
14347
- this.editor.event.removeFG.dispatch({
14348
- fgIds: this.targetGroupsIds
14349
- });
14350
- return;
14351
- }
14352
14336
  if (!dragCtx) {
14353
14337
  return true;
14354
14338
  }
@@ -14357,16 +14341,16 @@ var TemplateTool = function () {
14357
14341
  var struct = restruct.molecule;
14358
14342
  var ci = dragCtx.item;
14359
14343
  var functionalGroups = struct.functionalGroups;
14360
- if (dragCtx.action && ci && ci.map === 'bonds' && this.mode !== 'fg') {
14344
+ if (dragCtx.action && ci && ci.map === 'bonds' && !this.isModeFunctionalGroup) {
14361
14345
  dragCtx.action.perform(restruct);
14362
14346
  var promise = ketcherCore.fromTemplateOnBondAction(restruct, this.template, ci.id, this.editor.event, dragCtx.sign1 * dragCtx.sign2 > 0, true);
14363
14347
  promise.then(function (_ref) {
14364
14348
  var _ref2 = _slicedToArray__default["default"](_ref, 2),
14365
14349
  action = _ref2[0],
14366
14350
  pasteItems = _ref2[1];
14367
- var mergeItems = ketcherCore.getItemsToFuse(_this.editor, pasteItems);
14351
+ var mergeItems = ketcherCore.getItemsToFuse(_this2.editor, pasteItems);
14368
14352
  action = ketcherCore.fromItemsFuse(restruct, mergeItems).mergeWith(action);
14369
- _this.editor.update(action);
14353
+ _this2.editor.update(action);
14370
14354
  });
14371
14355
  return true;
14372
14356
  }
@@ -14375,7 +14359,7 @@ var TemplateTool = function () {
14375
14359
  if (this.isSaltOrSolvent) {
14376
14360
  addSaltsAndSolventsOnCanvasWithoutMerge(restruct, this.template, dragCtx, this.editor);
14377
14361
  return true;
14378
- } else if (((_ci = ci) === null || _ci === void 0 ? void 0 : _ci.map) === 'functionalGroups' && ketcherCore.FunctionalGroup.isContractedFunctionalGroup(ci.id, functionalGroups) && this.mode === 'fg' && this.targetGroupsIds.length) {
14362
+ } else if (((_ci = ci) === null || _ci === void 0 ? void 0 : _ci.map) === 'functionalGroups' && ketcherCore.FunctionalGroup.isContractedFunctionalGroup(ci.id, functionalGroups) && this.isModeFunctionalGroup && this.targetGroupsIds.length) {
14379
14363
  functionalGroupRemoveAction = new ketcherCore.Action();
14380
14364
  var _struct = this.editor.struct();
14381
14365
  var _restruct = this.editor.render.ctab;
@@ -14423,23 +14407,23 @@ var TemplateTool = function () {
14423
14407
  action = functionalGroupRemoveAction.mergeWith(action);
14424
14408
  }
14425
14409
  dragCtx.action = action;
14426
- } else if (ci.map === 'bonds' && this.mode !== 'fg') {
14410
+ } else if (ci.map === 'bonds' && !this.isModeFunctionalGroup) {
14427
14411
  var _promise = ketcherCore.fromTemplateOnBondAction(restruct, this.template, ci.id, this.editor.event, dragCtx.sign1 * dragCtx.sign2 > 0, true);
14428
14412
  _promise.then(function (_ref3) {
14429
14413
  var _ref4 = _slicedToArray__default["default"](_ref3, 2),
14430
14414
  action = _ref4[0],
14431
14415
  pasteItems = _ref4[1];
14432
- if (_this.mode !== 'fg') {
14433
- var mergeItems = ketcherCore.getItemsToFuse(_this.editor, pasteItems);
14416
+ if (!_this2.isModeFunctionalGroup) {
14417
+ var mergeItems = ketcherCore.getItemsToFuse(_this2.editor, pasteItems);
14434
14418
  action = ketcherCore.fromItemsFuse(restruct, mergeItems).mergeWith(action);
14435
- _this.editor.update(action);
14419
+ _this2.editor.update(action);
14436
14420
  }
14437
14421
  });
14438
14422
  return true;
14439
14423
  }
14440
14424
  }
14441
14425
  this.editor.selection(null);
14442
- if (!dragCtx.mergeItems && pasteItems && this.mode !== 'fg') {
14426
+ if (!dragCtx.mergeItems && pasteItems && !this.isModeFunctionalGroup) {
14443
14427
  dragCtx.mergeItems = ketcherCore.getItemsToFuse(this.editor, pasteItems);
14444
14428
  }
14445
14429
  dragCtx.action = dragCtx.action ? ketcherCore.fromItemsFuse(restruct, dragCtx.mergeItems).mergeWith(dragCtx.action) : ketcherCore.fromItemsFuse(restruct, dragCtx.mergeItems);
@@ -14480,8 +14464,12 @@ function addSaltsAndSolventsOnCanvasWithoutMerge(restruct, template, dragCtx, ed
14480
14464
  }
14481
14465
  function getTemplateMode(tmpl) {
14482
14466
  var _tmpl$props;
14483
- if (tmpl.mode) return tmpl.mode;
14484
- if (['Functional Groups', 'Salts and Solvents'].includes((_tmpl$props = tmpl.props) === null || _tmpl$props === void 0 ? void 0 : _tmpl$props.group)) return 'fg';
14467
+ if (tmpl.mode) {
14468
+ return tmpl.mode;
14469
+ }
14470
+ if (['Functional Groups', 'Salts and Solvents'].includes((_tmpl$props = tmpl.props) === null || _tmpl$props === void 0 ? void 0 : _tmpl$props.group)) {
14471
+ return MODES.FG;
14472
+ }
14485
14473
  return null;
14486
14474
  }
14487
14475
  function getSign(molecule, bond, v) {
@@ -16000,7 +15988,7 @@ var HoverIcon = function () {
16000
15988
  }, {
16001
15989
  key: "onMouseLeave",
16002
15990
  value: function onMouseLeave(event) {
16003
- if (!this.isOverLoader(event)) {
15991
+ if (!this.isOverLoader(event) && this.isShown) {
16004
15992
  this.shouldBeShownWhenMouseBack = true;
16005
15993
  this.hide();
16006
15994
  }
@@ -16025,9 +16013,12 @@ var HoverIcon = function () {
16025
16013
  }
16026
16014
  }, {
16027
16015
  key: "hide",
16028
- value: function hide() {
16016
+ value: function hide(restShouldBeShownWhenMouseBack) {
16029
16017
  this.element.hide();
16030
16018
  this.isShown = false;
16019
+ if (restShouldBeShownWhenMouseBack) {
16020
+ this.shouldBeShownWhenMouseBack = false;
16021
+ }
16031
16022
  }
16032
16023
  }, {
16033
16024
  key: "initialize",
@@ -16052,9 +16043,8 @@ var HoverIcon = function () {
16052
16043
  this.element = icon.element;
16053
16044
  this._fill = icon.fill;
16054
16045
  this._label = icon.label;
16055
- this.isShown = true;
16056
16046
  this.shouldBeShownWhenMouseBack = false;
16057
- this.updatePosition();
16047
+ this.hide();
16058
16048
  }
16059
16049
  }]);
16060
16050
  return HoverIcon;
@@ -16159,7 +16149,7 @@ var Editor$3 = function () {
16159
16149
  var tool = new tools[name](this, opts);
16160
16150
  var isAtomToolChosen = name === 'atom';
16161
16151
  if (!isAtomToolChosen) {
16162
- this.hoverIcon.hide();
16152
+ this.hoverIcon.hide(true);
16163
16153
  }
16164
16154
  if (!tool || tool.isNotActiveTool) {
16165
16155
  return null;
@@ -16218,7 +16208,7 @@ var Editor$3 = function () {
16218
16208
  this.render = new ketcherCore.Render(this.render.clientArea, Object.assign({
16219
16209
  scale: SCALE
16220
16210
  }, value));
16221
- this.render.setMolecule(struct);
16211
+ this.struct(struct);
16222
16212
  this.render.setZoom(zoom);
16223
16213
  this.render.update();
16224
16214
  return this.render.options;
@@ -24118,8 +24108,8 @@ var KetcherBuilder = function () {
24118
24108
  initApp(element, staticResourcesUrl, {
24119
24109
  buttons: buttons || {},
24120
24110
  errorHandler: errorHandler || null,
24121
- version: "2.9.0-rc.5-dev.1" ,
24122
- buildDate: "2023-03-30T12:13:55" ,
24111
+ version: "2.9.0-rc.6" ,
24112
+ buildDate: "2023-04-10T13:09:58" ,
24123
24113
  buildNumber: ''
24124
24114
  }, structService, resolve);
24125
24115
  });
@@ -24232,4 +24222,5 @@ function Editor(props) {
24232
24222
  exports.Editor = Editor;
24233
24223
  exports.KETCHER_INIT_EVENT_NAME = KETCHER_INIT_EVENT_NAME;
24234
24224
  exports.KETCHER_SAVED_SETTINGS_KEY = KETCHER_SAVED_SETTINGS_KEY;
24225
+ exports.MODES = MODES;
24235
24226
  //# sourceMappingURL=index.js.map