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

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.7\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;
@@ -12197,7 +12200,9 @@ function dropAndMerge(editor, mergeItems, action) {
12197
12200
  editor.hover(null);
12198
12201
  if (isMerging) editor.selection(null);
12199
12202
  if (((_dropItemAction = dropItemAction) === null || _dropItemAction === void 0 ? void 0 : _dropItemAction.operations.length) > 0) {
12200
- editor.update(dropItemAction);
12203
+ editor.update(dropItemAction, false, {
12204
+ resizeCanvas: false
12205
+ });
12201
12206
  }
12202
12207
  }
12203
12208
  function getExpandGroupsInMergeAction(restruct, mergeItems) {
@@ -12289,72 +12294,6 @@ function updateSelectedAtoms(_ref) {
12289
12294
  }
12290
12295
  }
12291
12296
 
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
12297
  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
12298
  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
12299
  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; }
@@ -12494,8 +12433,10 @@ var SelectTool = function () {
12494
12433
  dragCtx.action = ketcherCore.fromMultipleMove(restruct, expSel, editor.render.page2obj(event).sub(dragCtx.xy0));
12495
12434
  dragCtx.mergeItems = getMergeItems(editor, expSel);
12496
12435
  editor.hover(ketcherCore.getHoverToFuse(dragCtx.mergeItems));
12497
- extendCanvas(rnd, event);
12498
- editor.update(dragCtx.action, true);
12436
+ resizeCanvas(rnd, event);
12437
+ editor.update(dragCtx.action, true, {
12438
+ resizeCanvas: false
12439
+ });
12499
12440
  return true;
12500
12441
  }
12501
12442
  if (_classPrivateFieldGet__default["default"](this, _lassoHelper).running()) {
@@ -12694,47 +12635,52 @@ var SelectTool = function () {
12694
12635
  }]);
12695
12636
  return SelectTool;
12696
12637
  }();
12697
- function extendCanvas(render, event) {
12638
+ function resizeCanvas(render, event) {
12698
12639
  var offset = 1;
12699
- var _isCloseToEdgeOfCanva = isCloseToEdgeOfCanvas(event, render.sz),
12640
+ var _isCloseToEdgeOfCanva = ketcherCore.isCloseToEdgeOfCanvas(event, render.sz),
12700
12641
  isCloseToLeftEdgeOfCanvas = _isCloseToEdgeOfCanva.isCloseToLeftEdgeOfCanvas,
12701
12642
  isCloseToTopEdgeOfCanvas = _isCloseToEdgeOfCanva.isCloseToTopEdgeOfCanvas,
12702
12643
  isCloseToRightEdgeOfCanvas = _isCloseToEdgeOfCanva.isCloseToRightEdgeOfCanvas,
12703
12644
  isCloseToBottomEdgeOfCanvas = _isCloseToEdgeOfCanva.isCloseToBottomEdgeOfCanvas;
12704
- var _isCloseToEdgeOfScree = isCloseToEdgeOfScreen(event),
12645
+ var _isCloseToEdgeOfScree = ketcherCore.isCloseToEdgeOfScreen(event),
12705
12646
  isCloseToLeftEdgeOfScreen = _isCloseToEdgeOfScree.isCloseToLeftEdgeOfScreen,
12706
12647
  isCloseToTopEdgeOfScreen = _isCloseToEdgeOfScree.isCloseToTopEdgeOfScreen,
12707
12648
  isCloseToRightEdgeOfScreen = _isCloseToEdgeOfScree.isCloseToRightEdgeOfScreen,
12708
12649
  isCloseToBottomEdgeOfScreen = _isCloseToEdgeOfScree.isCloseToBottomEdgeOfScreen;
12709
- if (isCloseToLeftEdgeOfCanvas) {
12710
- shiftAndExtendCanvasByVector(new ketcherCore.Vec2(-offset, 0, 0), render);
12650
+ var _getDirections = ketcherCore.getDirections(event),
12651
+ isMovingLeft = _getDirections.isMovingLeft,
12652
+ isMovingRight = _getDirections.isMovingRight,
12653
+ isMovingTop = _getDirections.isMovingTop,
12654
+ isMovingBottom = _getDirections.isMovingBottom;
12655
+ if (isCloseToLeftEdgeOfCanvas && isMovingLeft) {
12656
+ ketcherCore.shiftAndExtendCanvasByVector(new ketcherCore.Vec2(-offset, 0, 0), render);
12711
12657
  }
12712
- if (isCloseToTopEdgeOfCanvas) {
12713
- shiftAndExtendCanvasByVector(new ketcherCore.Vec2(0, -offset, 0), render);
12658
+ if (isCloseToTopEdgeOfCanvas && isMovingTop) {
12659
+ ketcherCore.shiftAndExtendCanvasByVector(new ketcherCore.Vec2(0, -offset, 0), render);
12714
12660
  }
12715
- if (isCloseToRightEdgeOfCanvas) {
12716
- shiftAndExtendCanvasByVector(new ketcherCore.Vec2(offset, 0, 0), render);
12661
+ if (isCloseToRightEdgeOfCanvas && isMovingRight) {
12662
+ ketcherCore.shiftAndExtendCanvasByVector(new ketcherCore.Vec2(offset, 0, 0), render);
12717
12663
  }
12718
- if (isCloseToBottomEdgeOfCanvas) {
12719
- shiftAndExtendCanvasByVector(new ketcherCore.Vec2(0, offset, 0), render);
12664
+ if (isCloseToBottomEdgeOfCanvas && isMovingBottom) {
12665
+ ketcherCore.shiftAndExtendCanvasByVector(new ketcherCore.Vec2(0, offset, 0), render);
12720
12666
  }
12721
- var isCloseToSomeEdgeOfCanvas = [isCloseToTopEdgeOfCanvas, isCloseToRightEdgeOfCanvas, isCloseToBottomEdgeOfCanvas, isCloseToLeftEdgeOfCanvas].some(function (isCloseToEdge) {
12667
+ var isCloseToSomeEdgeOfCanvas = [isCloseToTopEdgeOfCanvas && isMovingTop, isCloseToRightEdgeOfCanvas && isMovingRight, isCloseToBottomEdgeOfCanvas && isMovingBottom, isCloseToLeftEdgeOfCanvas && isMovingLeft].some(function (isCloseToEdge) {
12722
12668
  return isCloseToEdge;
12723
12669
  });
12724
12670
  if (isCloseToSomeEdgeOfCanvas) {
12725
12671
  return;
12726
12672
  }
12727
- if (isCloseToTopEdgeOfScreen) {
12728
- scrollByVector(new ketcherCore.Vec2(0, -offset), render);
12673
+ if (isCloseToTopEdgeOfScreen && isMovingTop) {
12674
+ ketcherCore.scrollByVector(new ketcherCore.Vec2(0, -offset), render);
12729
12675
  }
12730
- if (isCloseToBottomEdgeOfScreen) {
12731
- scrollByVector(new ketcherCore.Vec2(0, offset), render);
12676
+ if (isCloseToBottomEdgeOfScreen && isMovingBottom) {
12677
+ ketcherCore.scrollByVector(new ketcherCore.Vec2(0, offset), render);
12732
12678
  }
12733
- if (isCloseToLeftEdgeOfScreen) {
12734
- scrollByVector(new ketcherCore.Vec2(-offset, 0), render);
12679
+ if (isCloseToLeftEdgeOfScreen && isMovingLeft) {
12680
+ ketcherCore.scrollByVector(new ketcherCore.Vec2(-offset, 0), render);
12735
12681
  }
12736
- if (isCloseToRightEdgeOfScreen) {
12737
- scrollByVector(new ketcherCore.Vec2(offset, 0), render);
12682
+ if (isCloseToRightEdgeOfScreen && isMovingRight) {
12683
+ ketcherCore.scrollByVector(new ketcherCore.Vec2(offset, 0), render);
12738
12684
  }
12739
12685
  }
12740
12686
  function closestToSel(ci) {
@@ -13277,7 +13223,7 @@ var PasteTool = function () {
13277
13223
  pasteItems = _fromPaste6[1];
13278
13224
  this.action = _action;
13279
13225
  this.editor.update(this.action, true, {
13280
- extendCanvas: false
13226
+ resizeCanvas: false
13281
13227
  });
13282
13228
  this.mergeItems = getMergeItems(this.editor, pasteItems);
13283
13229
  this.editor.hover(ketcherCore.getHoverToFuse(this.mergeItems));
@@ -14158,7 +14104,7 @@ var TemplateTool = function () {
14158
14104
  this.findItems.push('atoms');
14159
14105
  }
14160
14106
  var bond = frag.bonds.get(this.template.bid);
14161
- if (bond && this.mode !== 'fg') {
14107
+ if (bond && !this.isModeFunctionalGroup) {
14162
14108
  this.template.sign = getSign(frag, bond, this.template.xy0);
14163
14109
  this.findItems.push('bonds');
14164
14110
  }
@@ -14172,73 +14118,119 @@ var TemplateTool = function () {
14172
14118
  editor.hoverIcon.updatePosition();
14173
14119
  }
14174
14120
  _createClass__default["default"](TemplateTool, [{
14121
+ key: "showRemoveAbbreviationPopup",
14122
+ value: function showRemoveAbbreviationPopup() {
14123
+ var _this = this;
14124
+ return this.editor.event.removeFG.dispatch({
14125
+ fgIds: this.targetGroupsIds
14126
+ }).then(function () {
14127
+ _this.targetGroupsIds.length = 0;
14128
+ return Promise.resolve();
14129
+ });
14130
+ }
14131
+ }, {
14132
+ key: "isModeFunctionalGroup",
14133
+ get: function get() {
14134
+ return this.mode === MODES.FG;
14135
+ }
14136
+ }, {
14175
14137
  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++;
14138
+ value: function () {
14139
+ 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;
14142
+ return _regeneratorRuntime__default["default"].wrap(function _callee$(_context) {
14143
+ while (1) {
14144
+ switch (_context.prev = _context.next) {
14145
+ 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]
14154
+ }));
14155
+ 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);
14158
+ }
14159
+ }
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;
14164
+ break;
14165
+ }
14166
+ _context.next = 9;
14167
+ return this.showRemoveAbbreviationPopup();
14168
+ case 9:
14169
+ return _context.abrupt("return");
14170
+ case 10:
14171
+ this.editor.hover(null);
14172
+ this.dragCtx = {
14173
+ xy0: this.editor.render.page2obj(event),
14174
+ item: this.editor.findItem(event, this.findItems)
14175
+ };
14176
+ dragCtx = this.dragCtx;
14177
+ ci = dragCtx.item;
14178
+ if (!(!ci || this.isSaltOrSolvent)) {
14179
+ _context.next = 17;
14180
+ break;
14181
+ }
14182
+ delete dragCtx.item;
14183
+ return _context.abrupt("return");
14184
+ case 17:
14185
+ if (ci.map === 'bonds' && !this.isModeFunctionalGroup) {
14186
+ 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);
14190
+ 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;
14192
+ 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;
14194
+ }
14195
+ 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;
14197
+ 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;
14200
+ if (halfBondBegin) {
14201
+ var hbbAtom = struct.atoms.get(halfBondBegin);
14202
+ if (hbbAtom) {
14203
+ xy0.add_(hbbAtom.pp);
14204
+ count++;
14205
+ }
14206
+ }
14207
+ });
14208
+ } else {
14209
+ frIds.forEach(function (id) {
14210
+ var atomById = struct.atoms.get(id);
14211
+ if (atomById) {
14212
+ xy0.add_(atomById.pp);
14213
+ count++;
14214
+ }
14215
+ });
14216
+ }
14217
+ dragCtx.v0 = xy0.scaled(1 / count);
14218
+ sign = getSign(struct, bond, dragCtx.v0);
14219
+ dragCtx.sign1 = sign || 1;
14220
+ dragCtx.sign2 = this.template.sign;
14221
+ }
14222
+ case 18:
14223
+ case "end":
14224
+ return _context.stop();
14233
14225
  }
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;
14226
+ }
14227
+ }, _callee, this);
14228
+ }));
14229
+ function mousedown(_x) {
14230
+ return _mousedown.apply(this, arguments);
14240
14231
  }
14241
- }
14232
+ return mousedown;
14233
+ }()
14242
14234
  }, {
14243
14235
  key: "mousemove",
14244
14236
  value: function mousemove(event) {
@@ -14253,7 +14245,7 @@ var TemplateTool = function () {
14253
14245
  var targetPos = null;
14254
14246
  var eventPos = this.editor.render.page2obj(event);
14255
14247
  var struct = this.editor.render.ctab.molecule;
14256
- if (ci && ci.map === 'bonds' && this.mode !== 'fg') {
14248
+ if (ci && ci.map === 'bonds' && !this.isModeFunctionalGroup) {
14257
14249
  var bond = struct.bonds.get(ci.id);
14258
14250
  var sign = getSign(struct, bond, eventPos);
14259
14251
  if (dragCtx.sign1 * this.template.sign > 0) {
@@ -14284,7 +14276,7 @@ var TemplateTool = function () {
14284
14276
  var atom = struct.atoms.get(atomId);
14285
14277
  targetPos = atom === null || atom === void 0 ? void 0 : atom.pp;
14286
14278
  if (targetPos) {
14287
- extraBond = this.mode === 'fg' ? true : ketcherCore.Vec2.dist(targetPos, eventPos) > 1;
14279
+ extraBond = this.isModeFunctionalGroup ? true : ketcherCore.Vec2.dist(targetPos, eventPos) > 1;
14288
14280
  }
14289
14281
  }
14290
14282
  }
@@ -14330,7 +14322,7 @@ var TemplateTool = function () {
14330
14322
  }
14331
14323
  dragCtx.action = action;
14332
14324
  this.editor.update(dragCtx.action, true);
14333
- if (this.mode !== 'fg') {
14325
+ if (!this.isModeFunctionalGroup) {
14334
14326
  dragCtx.mergeItems = ketcherCore.getItemsToFuse(this.editor, pasteItems);
14335
14327
  this.editor.hover(ketcherCore.getHoverToFuse(dragCtx.mergeItems));
14336
14328
  }
@@ -14340,15 +14332,9 @@ var TemplateTool = function () {
14340
14332
  }, {
14341
14333
  key: "mouseup",
14342
14334
  value: function mouseup(event) {
14343
- var _this = this,
14335
+ var _this2 = this,
14344
14336
  _ci;
14345
14337
  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
14338
  if (!dragCtx) {
14353
14339
  return true;
14354
14340
  }
@@ -14357,16 +14343,16 @@ var TemplateTool = function () {
14357
14343
  var struct = restruct.molecule;
14358
14344
  var ci = dragCtx.item;
14359
14345
  var functionalGroups = struct.functionalGroups;
14360
- if (dragCtx.action && ci && ci.map === 'bonds' && this.mode !== 'fg') {
14346
+ if (dragCtx.action && ci && ci.map === 'bonds' && !this.isModeFunctionalGroup) {
14361
14347
  dragCtx.action.perform(restruct);
14362
14348
  var promise = ketcherCore.fromTemplateOnBondAction(restruct, this.template, ci.id, this.editor.event, dragCtx.sign1 * dragCtx.sign2 > 0, true);
14363
14349
  promise.then(function (_ref) {
14364
14350
  var _ref2 = _slicedToArray__default["default"](_ref, 2),
14365
14351
  action = _ref2[0],
14366
14352
  pasteItems = _ref2[1];
14367
- var mergeItems = ketcherCore.getItemsToFuse(_this.editor, pasteItems);
14353
+ var mergeItems = ketcherCore.getItemsToFuse(_this2.editor, pasteItems);
14368
14354
  action = ketcherCore.fromItemsFuse(restruct, mergeItems).mergeWith(action);
14369
- _this.editor.update(action);
14355
+ _this2.editor.update(action);
14370
14356
  });
14371
14357
  return true;
14372
14358
  }
@@ -14375,7 +14361,7 @@ var TemplateTool = function () {
14375
14361
  if (this.isSaltOrSolvent) {
14376
14362
  addSaltsAndSolventsOnCanvasWithoutMerge(restruct, this.template, dragCtx, this.editor);
14377
14363
  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) {
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) {
14379
14365
  functionalGroupRemoveAction = new ketcherCore.Action();
14380
14366
  var _struct = this.editor.struct();
14381
14367
  var _restruct = this.editor.render.ctab;
@@ -14423,23 +14409,23 @@ var TemplateTool = function () {
14423
14409
  action = functionalGroupRemoveAction.mergeWith(action);
14424
14410
  }
14425
14411
  dragCtx.action = action;
14426
- } else if (ci.map === 'bonds' && this.mode !== 'fg') {
14412
+ } else if (ci.map === 'bonds' && !this.isModeFunctionalGroup) {
14427
14413
  var _promise = ketcherCore.fromTemplateOnBondAction(restruct, this.template, ci.id, this.editor.event, dragCtx.sign1 * dragCtx.sign2 > 0, true);
14428
14414
  _promise.then(function (_ref3) {
14429
14415
  var _ref4 = _slicedToArray__default["default"](_ref3, 2),
14430
14416
  action = _ref4[0],
14431
14417
  pasteItems = _ref4[1];
14432
- if (_this.mode !== 'fg') {
14433
- var mergeItems = ketcherCore.getItemsToFuse(_this.editor, pasteItems);
14418
+ if (!_this2.isModeFunctionalGroup) {
14419
+ var mergeItems = ketcherCore.getItemsToFuse(_this2.editor, pasteItems);
14434
14420
  action = ketcherCore.fromItemsFuse(restruct, mergeItems).mergeWith(action);
14435
- _this.editor.update(action);
14421
+ _this2.editor.update(action);
14436
14422
  }
14437
14423
  });
14438
14424
  return true;
14439
14425
  }
14440
14426
  }
14441
14427
  this.editor.selection(null);
14442
- if (!dragCtx.mergeItems && pasteItems && this.mode !== 'fg') {
14428
+ if (!dragCtx.mergeItems && pasteItems && !this.isModeFunctionalGroup) {
14443
14429
  dragCtx.mergeItems = ketcherCore.getItemsToFuse(this.editor, pasteItems);
14444
14430
  }
14445
14431
  dragCtx.action = dragCtx.action ? ketcherCore.fromItemsFuse(restruct, dragCtx.mergeItems).mergeWith(dragCtx.action) : ketcherCore.fromItemsFuse(restruct, dragCtx.mergeItems);
@@ -14480,8 +14466,12 @@ function addSaltsAndSolventsOnCanvasWithoutMerge(restruct, template, dragCtx, ed
14480
14466
  }
14481
14467
  function getTemplateMode(tmpl) {
14482
14468
  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';
14469
+ if (tmpl.mode) {
14470
+ return tmpl.mode;
14471
+ }
14472
+ if (['Functional Groups', 'Salts and Solvents'].includes((_tmpl$props = tmpl.props) === null || _tmpl$props === void 0 ? void 0 : _tmpl$props.group)) {
14473
+ return MODES.FG;
14474
+ }
14485
14475
  return null;
14486
14476
  }
14487
14477
  function getSign(molecule, bond, v) {
@@ -16000,7 +15990,7 @@ var HoverIcon = function () {
16000
15990
  }, {
16001
15991
  key: "onMouseLeave",
16002
15992
  value: function onMouseLeave(event) {
16003
- if (!this.isOverLoader(event)) {
15993
+ if (!this.isOverLoader(event) && this.isShown) {
16004
15994
  this.shouldBeShownWhenMouseBack = true;
16005
15995
  this.hide();
16006
15996
  }
@@ -16025,9 +16015,12 @@ var HoverIcon = function () {
16025
16015
  }
16026
16016
  }, {
16027
16017
  key: "hide",
16028
- value: function hide() {
16018
+ value: function hide(restShouldBeShownWhenMouseBack) {
16029
16019
  this.element.hide();
16030
16020
  this.isShown = false;
16021
+ if (restShouldBeShownWhenMouseBack) {
16022
+ this.shouldBeShownWhenMouseBack = false;
16023
+ }
16031
16024
  }
16032
16025
  }, {
16033
16026
  key: "initialize",
@@ -16052,9 +16045,8 @@ var HoverIcon = function () {
16052
16045
  this.element = icon.element;
16053
16046
  this._fill = icon.fill;
16054
16047
  this._label = icon.label;
16055
- this.isShown = true;
16056
16048
  this.shouldBeShownWhenMouseBack = false;
16057
- this.updatePosition();
16049
+ this.hide();
16058
16050
  }
16059
16051
  }]);
16060
16052
  return HoverIcon;
@@ -16159,7 +16151,7 @@ var Editor$3 = function () {
16159
16151
  var tool = new tools[name](this, opts);
16160
16152
  var isAtomToolChosen = name === 'atom';
16161
16153
  if (!isAtomToolChosen) {
16162
- this.hoverIcon.hide();
16154
+ this.hoverIcon.hide(true);
16163
16155
  }
16164
16156
  if (!tool || tool.isNotActiveTool) {
16165
16157
  return null;
@@ -16218,7 +16210,7 @@ var Editor$3 = function () {
16218
16210
  this.render = new ketcherCore.Render(this.render.clientArea, Object.assign({
16219
16211
  scale: SCALE
16220
16212
  }, value));
16221
- this.render.setMolecule(struct);
16213
+ this.struct(struct);
16222
16214
  this.render.setZoom(zoom);
16223
16215
  this.render.update();
16224
16216
  return this.render.options;
@@ -16272,7 +16264,9 @@ var Editor$3 = function () {
16272
16264
  }
16273
16265
  this.render.ctab.setSelection(this._selection);
16274
16266
  this.event.selectionChange.dispatch(this._selection);
16275
- this.render.update();
16267
+ this.render.update(false, null, {
16268
+ resizeCanvas: false
16269
+ });
16276
16270
  return this._selection;
16277
16271
  }
16278
16272
  }, {
@@ -16291,7 +16285,7 @@ var Editor$3 = function () {
16291
16285
  key: "update",
16292
16286
  value: function update(action, ignoreHistory) {
16293
16287
  var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {
16294
- extendCanvas: true
16288
+ resizeCanvas: true
16295
16289
  };
16296
16290
  if (action === true) {
16297
16291
  this.render.update(true, null, options);
@@ -18054,8 +18048,7 @@ function ownKeys$A(object, enumerableOnly) { var keys = Object.keys(object); if
18054
18048
  function _objectSpread$A(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$A(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$A(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
18055
18049
  function GenericInput(_ref) {
18056
18050
  _ref.schema;
18057
- var _ref$value = _ref.value,
18058
- value = _ref$value === void 0 ? '' : _ref$value,
18051
+ var value = _ref.value,
18059
18052
  onChange = _ref.onChange,
18060
18053
  innerRef = _ref.innerRef,
18061
18054
  _ref$type = _ref.type,
@@ -18077,7 +18070,7 @@ function GenericInput(_ref) {
18077
18070
  return jsxRuntime.jsxs(jsxRuntime.Fragment, {
18078
18071
  children: [jsxRuntime.jsx("input", _objectSpread$A({
18079
18072
  type: type,
18080
- value: value,
18073
+ value: value !== null && value !== void 0 ? value : '',
18081
18074
  onInput: onChange,
18082
18075
  onChange: onChange,
18083
18076
  className: clsx__default["default"](classes$A.input, classes$A.genericInput),
@@ -24118,8 +24111,8 @@ var KetcherBuilder = function () {
24118
24111
  initApp(element, staticResourcesUrl, {
24119
24112
  buttons: buttons || {},
24120
24113
  errorHandler: errorHandler || null,
24121
- version: "2.9.0-rc.5-dev.1" ,
24122
- buildDate: "2023-03-30T12:13:55" ,
24114
+ version: "2.9.0-rc.7" ,
24115
+ buildDate: "2023-04-19T07:45:20" ,
24123
24116
  buildNumber: ''
24124
24117
  }, structService, resolve);
24125
24118
  });
@@ -24232,4 +24225,5 @@ function Editor(props) {
24232
24225
  exports.Editor = Editor;
24233
24226
  exports.KETCHER_INIT_EVENT_NAME = KETCHER_INIT_EVENT_NAME;
24234
24227
  exports.KETCHER_SAVED_SETTINGS_KEY = KETCHER_SAVED_SETTINGS_KEY;
24228
+ exports.MODES = MODES;
24235
24229
  //# sourceMappingURL=index.js.map