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.
@@ -24,7 +24,7 @@ import _asyncToGenerator from '@babel/runtime/helpers/asyncToGenerator';
24
24
  import _regeneratorRuntime from '@babel/runtime/regenerator';
25
25
  import _classCallCheck from '@babel/runtime/helpers/classCallCheck';
26
26
  import _createClass from '@babel/runtime/helpers/createClass';
27
- import { KetSerializer, MolSerializer, Ketcher, FormatterFactory, StereLabelStyleType, StereoColoringType, Bond as Bond$2, Elements, AtomList, StereoLabel, isAttachmentBond, findStereoAtoms, RxnArrowMode, SimpleObjectMode, SGroup as SGroup$1, Pile, getStereoAtomsMap, identifyStructFormat, SupportedFormat, ChemicalMimeType, SdfSerializer, Render, FunctionalGroup, FunctionalGroupsProvider, SaltsAndSolventsProvider, KetcherAsyncEvents, ElementColor, fromAtomsAttrs, fracAngle, Vec2, Action, fromSgroupDeletion, fromFragmentDeletion, fromAtomAddition, fromBondAddition, Atom as Atom$2, fromOneBondDeletion, bondChangingAction, fromBondsAttrs, fromChain, getItemsToFuse, getHoverToFuse, fromItemsFuse, fromStereoFlagUpdate, Scale, checkOverlapping, fromSeveralSgroupAddition, SgContexts, fromSgroupAction, mergeMapOfItemsToSet, setExpandSGroup, fromSimpleObjectResizing, fromArrowResizing, fromMultipleMove, fromTextDeletion, fromTextUpdating, fromOneAtomDeletion, fromArrowDeletion, fromPlusDeletion, fromSimpleObjectDeletion, fromPaste, fromTemplateOnAtom, RGroup as RGroup$2, fromRGroupFragment, fromUpdateIfThen, fromRGroupAttrs, fromArrowAddition, fromPlusAddition, fromRotate, fromFlip, fromBondAlign, fromSimpleObjectAddition, fromTemplateOnBondAction, fromTemplateOnCanvas, fromTextCreation, formatProperties, Fragment as Fragment$1, OperationType, fromHighlightCreate, fromHighlightClear, fromNewCanvas, Struct, fromDescriptorsAlign, getPropertiesByFormat, StereoFlag, getPropertiesByImgFormat, b64toBlob, Generics, TextCommand, DefaultStructServiceOptions } from 'ketcher-core';
27
+ import { KetSerializer, MolSerializer, Ketcher, FormatterFactory, StereLabelStyleType, StereoColoringType, Bond as Bond$2, Elements, AtomList, StereoLabel, isAttachmentBond, findStereoAtoms, RxnArrowMode, SimpleObjectMode, SGroup as SGroup$1, Pile, getStereoAtomsMap, identifyStructFormat, SupportedFormat, ChemicalMimeType, SdfSerializer, Render, FunctionalGroup, FunctionalGroupsProvider, SaltsAndSolventsProvider, KetcherAsyncEvents, ElementColor, fromAtomsAttrs, fracAngle, Vec2, Action, fromSgroupDeletion, fromFragmentDeletion, fromAtomAddition, fromBondAddition, Atom as Atom$2, fromOneBondDeletion, bondChangingAction, fromBondsAttrs, fromChain, getItemsToFuse, getHoverToFuse, fromItemsFuse, fromStereoFlagUpdate, Scale, checkOverlapping, fromSeveralSgroupAddition, SgContexts, fromSgroupAction, mergeMapOfItemsToSet, setExpandSGroup, fromSimpleObjectResizing, fromArrowResizing, fromMultipleMove, fromTextDeletion, fromTextUpdating, isCloseToEdgeOfCanvas, isCloseToEdgeOfScreen, getDirections, shiftAndExtendCanvasByVector, scrollByVector, fromOneAtomDeletion, fromArrowDeletion, fromPlusDeletion, fromSimpleObjectDeletion, fromPaste, fromTemplateOnAtom, RGroup as RGroup$2, fromRGroupFragment, fromUpdateIfThen, fromRGroupAttrs, fromArrowAddition, fromPlusAddition, fromRotate, fromFlip, fromBondAlign, fromSimpleObjectAddition, fromTemplateOnBondAction, fromTemplateOnCanvas, fromTextCreation, formatProperties, Fragment as Fragment$1, OperationType, fromHighlightCreate, fromHighlightClear, fromNewCanvas, Struct, fromDescriptorsAlign, getPropertiesByFormat, StereoFlag, getPropertiesByImgFormat, b64toBlob, Generics, TextCommand, DefaultStructServiceOptions } from 'ketcher-core';
28
28
  import * as React from 'react';
29
29
  import React__default, { createRef, Component, useState, useEffect, useRef, useMemo, createElement, forwardRef, useCallback, useLayoutEffect, Fragment as Fragment$2, PureComponent } from 'react';
30
30
  import _objectWithoutProperties from '@babel/runtime/helpers/objectWithoutProperties';
@@ -2476,6 +2476,9 @@ var tools$1 = typeSchema$1["enum"].reduce(function (res, type, i) {
2476
2476
 
2477
2477
  var KETCHER_INIT_EVENT_NAME = 'ketcher-init';
2478
2478
  var KETCHER_SAVED_SETTINGS_KEY = 'ketcher_editor_saved_settings';
2479
+ var MODES = {
2480
+ FG: 'fg'
2481
+ };
2479
2482
 
2480
2483
  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; }
2481
2484
  function _objectSpread$1a(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$1a(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$1a(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
@@ -3010,7 +3013,7 @@ var zoom = {
3010
3013
 
3011
3014
  var openHelpLink = function openHelpLink() {
3012
3015
  var _window$open;
3013
- 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();
3016
+ 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();
3014
3017
  };
3015
3018
  var help = {
3016
3019
  help: {
@@ -3035,7 +3038,7 @@ var functionalGroupsLib = {
3035
3038
  }
3036
3039
  },
3037
3040
  selected: function selected(editor) {
3038
- return editor._tool.mode === 'fg';
3041
+ return editor._tool.mode === MODES.FG;
3039
3042
  },
3040
3043
  disabled: function disabled(_, __, options) {
3041
3044
  return !options.app.functionalGroups;
@@ -8065,7 +8068,7 @@ function _objectSpread$10(target) { for (var i = 1; i < arguments.length; i++) {
8065
8068
  var initialState$1 = {
8066
8069
  lib: [],
8067
8070
  functionalGroupInfo: null,
8068
- mode: 'fg'
8071
+ mode: MODES.FG
8069
8072
  };
8070
8073
  var functionalGroupsReducer = function functionalGroupsReducer() {
8071
8074
  var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState$1;
@@ -8140,7 +8143,7 @@ function ownKeys$$(object, enumerableOnly) { var keys = Object.keys(object); if
8140
8143
  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(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; }
8141
8144
  var initialState = {
8142
8145
  lib: [],
8143
- mode: 'fg'
8146
+ mode: MODES.FG
8144
8147
  };
8145
8148
  var saltsAndSolventsReducer = function saltsAndSolventsReducer() {
8146
8149
  var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState;
@@ -12134,7 +12137,9 @@ function dropAndMerge(editor, mergeItems, action) {
12134
12137
  editor.hover(null);
12135
12138
  if (isMerging) editor.selection(null);
12136
12139
  if (((_dropItemAction = dropItemAction) === null || _dropItemAction === void 0 ? void 0 : _dropItemAction.operations.length) > 0) {
12137
- editor.update(dropItemAction);
12140
+ editor.update(dropItemAction, false, {
12141
+ resizeCanvas: false
12142
+ });
12138
12143
  }
12139
12144
  }
12140
12145
  function getExpandGroupsInMergeAction(restruct, mergeItems) {
@@ -12226,72 +12231,6 @@ function updateSelectedAtoms(_ref) {
12226
12231
  }
12227
12232
  }
12228
12233
 
12229
- var edgeOffset = 150;
12230
- function isCloseToEdgeOfScreen(event) {
12231
- var clientX = event.clientX,
12232
- clientY = event.clientY;
12233
- var body = document.body;
12234
- var isCloseToLeftEdgeOfScreen = clientX <= edgeOffset;
12235
- var isCloseToTopEdgeOfScreen = clientY <= edgeOffset;
12236
- var isCloseToRightEdgeOfScreen = body.clientWidth - clientX <= edgeOffset;
12237
- var isCloseToBottomEdgeOfScreen = body.clientHeight - clientY <= edgeOffset;
12238
- return {
12239
- isCloseToLeftEdgeOfScreen: isCloseToLeftEdgeOfScreen,
12240
- isCloseToTopEdgeOfScreen: isCloseToTopEdgeOfScreen,
12241
- isCloseToRightEdgeOfScreen: isCloseToRightEdgeOfScreen,
12242
- isCloseToBottomEdgeOfScreen: isCloseToBottomEdgeOfScreen
12243
- };
12244
- }
12245
- function isCloseToEdgeOfCanvas(event, canvasSize) {
12246
- var layerX = event.layerX,
12247
- layerY = event.layerY;
12248
- var isCloseToLeftEdgeOfCanvas = layerX <= edgeOffset;
12249
- var isCloseToTopEdgeOfCanvas = layerY <= edgeOffset;
12250
- var isCloseToRightEdgeOfCanvas = canvasSize.x - layerX <= edgeOffset;
12251
- var isCloseToBottomEdgeOfCanvas = canvasSize.y - layerY <= edgeOffset;
12252
- return {
12253
- isCloseToLeftEdgeOfCanvas: isCloseToLeftEdgeOfCanvas,
12254
- isCloseToTopEdgeOfCanvas: isCloseToTopEdgeOfCanvas,
12255
- isCloseToRightEdgeOfCanvas: isCloseToRightEdgeOfCanvas,
12256
- isCloseToBottomEdgeOfCanvas: isCloseToBottomEdgeOfCanvas
12257
- };
12258
- }
12259
- function calculateCanvasExtension(clientArea, currentCanvasSize, extensionVector) {
12260
- var newHorizontalScrollPosition = clientArea.scrollLeft + extensionVector.x;
12261
- var newVerticalScrollPosition = clientArea.scrollTop + extensionVector.y;
12262
- var horizontalExtension = 0;
12263
- var verticalExtension = 0;
12264
- if (newHorizontalScrollPosition > currentCanvasSize.x) {
12265
- horizontalExtension = newHorizontalScrollPosition - currentCanvasSize.x;
12266
- }
12267
- if (newHorizontalScrollPosition < 0) {
12268
- horizontalExtension = Math.abs(newHorizontalScrollPosition);
12269
- }
12270
- if (newVerticalScrollPosition > currentCanvasSize.y) {
12271
- verticalExtension = newVerticalScrollPosition - currentCanvasSize.y;
12272
- }
12273
- if (newVerticalScrollPosition < 0) {
12274
- verticalExtension = Math.abs(newVerticalScrollPosition);
12275
- }
12276
- return new Vec2(horizontalExtension, verticalExtension, 0);
12277
- }
12278
- function shiftAndExtendCanvasByVector(vector, render) {
12279
- var clientArea = render.clientArea;
12280
- var extensionVector = calculateCanvasExtension(clientArea, render.sz.scaled(render.options.zoom), vector).scaled(1 / render.options.zoom);
12281
- if (extensionVector.x > 0 || extensionVector.y > 0) {
12282
- render.setPaperSize(render.sz.add(extensionVector));
12283
- render.setOffset(render.options.offset.add(vector));
12284
- render.ctab.translate(vector);
12285
- }
12286
- scrollByVector(vector, render);
12287
- render.update(false);
12288
- }
12289
- function scrollByVector(vector, render) {
12290
- var clientArea = render.clientArea;
12291
- clientArea.scrollLeft += vector.x * render.options.scale;
12292
- clientArea.scrollTop += vector.y * render.options.scale;
12293
- }
12294
-
12295
12234
  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; } } }; }
12296
12235
  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); }
12297
12236
  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; }
@@ -12431,8 +12370,10 @@ var SelectTool = function () {
12431
12370
  dragCtx.action = fromMultipleMove(restruct, expSel, editor.render.page2obj(event).sub(dragCtx.xy0));
12432
12371
  dragCtx.mergeItems = getMergeItems(editor, expSel);
12433
12372
  editor.hover(getHoverToFuse(dragCtx.mergeItems));
12434
- extendCanvas(rnd, event);
12435
- editor.update(dragCtx.action, true);
12373
+ resizeCanvas(rnd, event);
12374
+ editor.update(dragCtx.action, true, {
12375
+ resizeCanvas: false
12376
+ });
12436
12377
  return true;
12437
12378
  }
12438
12379
  if (_classPrivateFieldGet(this, _lassoHelper).running()) {
@@ -12631,7 +12572,7 @@ var SelectTool = function () {
12631
12572
  }]);
12632
12573
  return SelectTool;
12633
12574
  }();
12634
- function extendCanvas(render, event) {
12575
+ function resizeCanvas(render, event) {
12635
12576
  var offset = 1;
12636
12577
  var _isCloseToEdgeOfCanva = isCloseToEdgeOfCanvas(event, render.sz),
12637
12578
  isCloseToLeftEdgeOfCanvas = _isCloseToEdgeOfCanva.isCloseToLeftEdgeOfCanvas,
@@ -12643,34 +12584,39 @@ function extendCanvas(render, event) {
12643
12584
  isCloseToTopEdgeOfScreen = _isCloseToEdgeOfScree.isCloseToTopEdgeOfScreen,
12644
12585
  isCloseToRightEdgeOfScreen = _isCloseToEdgeOfScree.isCloseToRightEdgeOfScreen,
12645
12586
  isCloseToBottomEdgeOfScreen = _isCloseToEdgeOfScree.isCloseToBottomEdgeOfScreen;
12646
- if (isCloseToLeftEdgeOfCanvas) {
12587
+ var _getDirections = getDirections(event),
12588
+ isMovingLeft = _getDirections.isMovingLeft,
12589
+ isMovingRight = _getDirections.isMovingRight,
12590
+ isMovingTop = _getDirections.isMovingTop,
12591
+ isMovingBottom = _getDirections.isMovingBottom;
12592
+ if (isCloseToLeftEdgeOfCanvas && isMovingLeft) {
12647
12593
  shiftAndExtendCanvasByVector(new Vec2(-offset, 0, 0), render);
12648
12594
  }
12649
- if (isCloseToTopEdgeOfCanvas) {
12595
+ if (isCloseToTopEdgeOfCanvas && isMovingTop) {
12650
12596
  shiftAndExtendCanvasByVector(new Vec2(0, -offset, 0), render);
12651
12597
  }
12652
- if (isCloseToRightEdgeOfCanvas) {
12598
+ if (isCloseToRightEdgeOfCanvas && isMovingRight) {
12653
12599
  shiftAndExtendCanvasByVector(new Vec2(offset, 0, 0), render);
12654
12600
  }
12655
- if (isCloseToBottomEdgeOfCanvas) {
12601
+ if (isCloseToBottomEdgeOfCanvas && isMovingBottom) {
12656
12602
  shiftAndExtendCanvasByVector(new Vec2(0, offset, 0), render);
12657
12603
  }
12658
- var isCloseToSomeEdgeOfCanvas = [isCloseToTopEdgeOfCanvas, isCloseToRightEdgeOfCanvas, isCloseToBottomEdgeOfCanvas, isCloseToLeftEdgeOfCanvas].some(function (isCloseToEdge) {
12604
+ var isCloseToSomeEdgeOfCanvas = [isCloseToTopEdgeOfCanvas && isMovingTop, isCloseToRightEdgeOfCanvas && isMovingRight, isCloseToBottomEdgeOfCanvas && isMovingBottom, isCloseToLeftEdgeOfCanvas && isMovingLeft].some(function (isCloseToEdge) {
12659
12605
  return isCloseToEdge;
12660
12606
  });
12661
12607
  if (isCloseToSomeEdgeOfCanvas) {
12662
12608
  return;
12663
12609
  }
12664
- if (isCloseToTopEdgeOfScreen) {
12610
+ if (isCloseToTopEdgeOfScreen && isMovingTop) {
12665
12611
  scrollByVector(new Vec2(0, -offset), render);
12666
12612
  }
12667
- if (isCloseToBottomEdgeOfScreen) {
12613
+ if (isCloseToBottomEdgeOfScreen && isMovingBottom) {
12668
12614
  scrollByVector(new Vec2(0, offset), render);
12669
12615
  }
12670
- if (isCloseToLeftEdgeOfScreen) {
12616
+ if (isCloseToLeftEdgeOfScreen && isMovingLeft) {
12671
12617
  scrollByVector(new Vec2(-offset, 0), render);
12672
12618
  }
12673
- if (isCloseToRightEdgeOfScreen) {
12619
+ if (isCloseToRightEdgeOfScreen && isMovingRight) {
12674
12620
  scrollByVector(new Vec2(offset, 0), render);
12675
12621
  }
12676
12622
  }
@@ -13214,7 +13160,7 @@ var PasteTool = function () {
13214
13160
  pasteItems = _fromPaste6[1];
13215
13161
  this.action = _action;
13216
13162
  this.editor.update(this.action, true, {
13217
- extendCanvas: false
13163
+ resizeCanvas: false
13218
13164
  });
13219
13165
  this.mergeItems = getMergeItems(this.editor, pasteItems);
13220
13166
  this.editor.hover(getHoverToFuse(this.mergeItems));
@@ -14095,7 +14041,7 @@ var TemplateTool = function () {
14095
14041
  this.findItems.push('atoms');
14096
14042
  }
14097
14043
  var bond = frag.bonds.get(this.template.bid);
14098
- if (bond && this.mode !== 'fg') {
14044
+ if (bond && !this.isModeFunctionalGroup) {
14099
14045
  this.template.sign = getSign(frag, bond, this.template.xy0);
14100
14046
  this.findItems.push('bonds');
14101
14047
  }
@@ -14109,73 +14055,119 @@ var TemplateTool = function () {
14109
14055
  editor.hoverIcon.updatePosition();
14110
14056
  }
14111
14057
  _createClass(TemplateTool, [{
14058
+ key: "showRemoveAbbreviationPopup",
14059
+ value: function showRemoveAbbreviationPopup() {
14060
+ var _this = this;
14061
+ return this.editor.event.removeFG.dispatch({
14062
+ fgIds: this.targetGroupsIds
14063
+ }).then(function () {
14064
+ _this.targetGroupsIds.length = 0;
14065
+ return Promise.resolve();
14066
+ });
14067
+ }
14068
+ }, {
14069
+ key: "isModeFunctionalGroup",
14070
+ get: function get() {
14071
+ return this.mode === MODES.FG;
14072
+ }
14073
+ }, {
14112
14074
  key: "mousedown",
14113
- value: function mousedown(event) {
14114
- var closestItem = this.editor.findItem(event, ['atoms', 'bonds', 'sgroups', 'functionalGroups']);
14115
- var ctab = this.editor.render.ctab;
14116
- var struct = ctab.molecule;
14117
- if (struct.functionalGroups.size) {
14118
- this.targetGroupsIds = getGroupIdsFromItemArrays(struct, _objectSpread$N(_objectSpread$N({}, (closestItem === null || closestItem === void 0 ? void 0 : closestItem.map) === 'atoms' && {
14119
- atoms: [closestItem.id]
14120
- }), (closestItem === null || closestItem === void 0 ? void 0 : closestItem.map) === 'bonds' && {
14121
- bonds: [closestItem.id]
14122
- }));
14123
- if ((closestItem === null || closestItem === void 0 ? void 0 : closestItem.map) === 'functionalGroups' && FunctionalGroup.isContractedFunctionalGroup(closestItem.id, struct.functionalGroups)) {
14124
- this.targetGroupsIds.push(closestItem.id);
14125
- }
14126
- }
14127
- this.editor.hover(null);
14128
- this.dragCtx = {
14129
- xy0: this.editor.render.page2obj(event),
14130
- item: this.editor.findItem(event, this.findItems)
14131
- };
14132
- var dragCtx = this.dragCtx;
14133
- var ci = dragCtx.item;
14134
- if (!ci || this.isSaltOrSolvent) {
14135
- delete dragCtx.item;
14136
- return;
14137
- }
14138
- if (ci.map === 'bonds' && this.mode !== 'fg') {
14139
- var _struct$atoms$get, _struct$halfBonds$get;
14140
- var xy0 = new Vec2();
14141
- var bond = struct.bonds.get(ci.id);
14142
- 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;
14143
- var frIds = struct.getFragmentIds(frid);
14144
- var count = 0;
14145
- 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;
14146
- if (loop && loop < 0) {
14147
- var _struct$halfBonds$get2;
14148
- 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;
14149
- }
14150
- if (loop && loop >= 0) {
14151
- var _struct$loops$get;
14152
- var loopHbs = (_struct$loops$get = struct.loops.get(loop)) === null || _struct$loops$get === void 0 ? void 0 : _struct$loops$get.hbs;
14153
- loopHbs === null || loopHbs === void 0 ? void 0 : loopHbs.forEach(function (hb) {
14154
- var _struct$halfBonds$get3;
14155
- var halfBondBegin = (_struct$halfBonds$get3 = struct.halfBonds.get(hb)) === null || _struct$halfBonds$get3 === void 0 ? void 0 : _struct$halfBonds$get3.begin;
14156
- if (halfBondBegin) {
14157
- var hbbAtom = struct.atoms.get(halfBondBegin);
14158
- if (hbbAtom) {
14159
- xy0.add_(hbbAtom.pp);
14160
- count++;
14161
- }
14162
- }
14163
- });
14164
- } else {
14165
- frIds.forEach(function (id) {
14166
- var atomById = struct.atoms.get(id);
14167
- if (atomById) {
14168
- xy0.add_(atomById.pp);
14169
- count++;
14075
+ value: function () {
14076
+ var _mousedown = _asyncToGenerator( _regeneratorRuntime.mark(function _callee(event) {
14077
+ var _struct$functionalGro;
14078
+ 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;
14079
+ return _regeneratorRuntime.wrap(function _callee$(_context) {
14080
+ while (1) {
14081
+ switch (_context.prev = _context.next) {
14082
+ case 0:
14083
+ closestItem = this.editor.findItem(event, ['atoms', 'bonds', 'sgroups', 'functionalGroups']);
14084
+ ctab = this.editor.render.ctab;
14085
+ struct = ctab.molecule;
14086
+ if (struct.functionalGroups.size) {
14087
+ this.targetGroupsIds = getGroupIdsFromItemArrays(struct, _objectSpread$N(_objectSpread$N({}, (closestItem === null || closestItem === void 0 ? void 0 : closestItem.map) === 'atoms' && {
14088
+ atoms: [closestItem.id]
14089
+ }), (closestItem === null || closestItem === void 0 ? void 0 : closestItem.map) === 'bonds' && {
14090
+ bonds: [closestItem.id]
14091
+ }));
14092
+ if (
14093
+ (closestItem === null || closestItem === void 0 ? void 0 : closestItem.map) === 'functionalGroups' && FunctionalGroup.isContractedFunctionalGroup(closestItem.id, struct.functionalGroups)) {
14094
+ this.targetGroupsIds.push(closestItem.id);
14095
+ }
14096
+ }
14097
+ isTargetExpanded = (_struct$functionalGro = struct.functionalGroups.get(this.targetGroupsIds[0])) === null || _struct$functionalGro === void 0 ? void 0 : _struct$functionalGro.isExpanded;
14098
+ isTargetAtomOrBond = this.targetGroupsIds.length && !this.isModeFunctionalGroup;
14099
+ if (!(isTargetAtomOrBond || isTargetExpanded)) {
14100
+ _context.next = 10;
14101
+ break;
14102
+ }
14103
+ _context.next = 9;
14104
+ return this.showRemoveAbbreviationPopup();
14105
+ case 9:
14106
+ return _context.abrupt("return");
14107
+ case 10:
14108
+ this.editor.hover(null);
14109
+ this.dragCtx = {
14110
+ xy0: this.editor.render.page2obj(event),
14111
+ item: this.editor.findItem(event, this.findItems)
14112
+ };
14113
+ dragCtx = this.dragCtx;
14114
+ ci = dragCtx.item;
14115
+ if (!(!ci || this.isSaltOrSolvent)) {
14116
+ _context.next = 17;
14117
+ break;
14118
+ }
14119
+ delete dragCtx.item;
14120
+ return _context.abrupt("return");
14121
+ case 17:
14122
+ if (ci.map === 'bonds' && !this.isModeFunctionalGroup) {
14123
+ xy0 = new Vec2();
14124
+ bond = struct.bonds.get(ci.id);
14125
+ 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;
14126
+ frIds = struct.getFragmentIds(frid);
14127
+ count = 0;
14128
+ 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;
14129
+ if (loop && loop < 0) {
14130
+ 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;
14131
+ }
14132
+ if (loop && loop >= 0) {
14133
+ loopHbs = (_struct$loops$get = struct.loops.get(loop)) === null || _struct$loops$get === void 0 ? void 0 : _struct$loops$get.hbs;
14134
+ loopHbs === null || loopHbs === void 0 ? void 0 : loopHbs.forEach(function (hb) {
14135
+ var _struct$halfBonds$get3;
14136
+ var halfBondBegin = (_struct$halfBonds$get3 = struct.halfBonds.get(hb)) === null || _struct$halfBonds$get3 === void 0 ? void 0 : _struct$halfBonds$get3.begin;
14137
+ if (halfBondBegin) {
14138
+ var hbbAtom = struct.atoms.get(halfBondBegin);
14139
+ if (hbbAtom) {
14140
+ xy0.add_(hbbAtom.pp);
14141
+ count++;
14142
+ }
14143
+ }
14144
+ });
14145
+ } else {
14146
+ frIds.forEach(function (id) {
14147
+ var atomById = struct.atoms.get(id);
14148
+ if (atomById) {
14149
+ xy0.add_(atomById.pp);
14150
+ count++;
14151
+ }
14152
+ });
14153
+ }
14154
+ dragCtx.v0 = xy0.scaled(1 / count);
14155
+ sign = getSign(struct, bond, dragCtx.v0);
14156
+ dragCtx.sign1 = sign || 1;
14157
+ dragCtx.sign2 = this.template.sign;
14158
+ }
14159
+ case 18:
14160
+ case "end":
14161
+ return _context.stop();
14170
14162
  }
14171
- });
14172
- }
14173
- dragCtx.v0 = xy0.scaled(1 / count);
14174
- var sign = getSign(struct, bond, dragCtx.v0);
14175
- dragCtx.sign1 = sign || 1;
14176
- dragCtx.sign2 = this.template.sign;
14163
+ }
14164
+ }, _callee, this);
14165
+ }));
14166
+ function mousedown(_x) {
14167
+ return _mousedown.apply(this, arguments);
14177
14168
  }
14178
- }
14169
+ return mousedown;
14170
+ }()
14179
14171
  }, {
14180
14172
  key: "mousemove",
14181
14173
  value: function mousemove(event) {
@@ -14190,7 +14182,7 @@ var TemplateTool = function () {
14190
14182
  var targetPos = null;
14191
14183
  var eventPos = this.editor.render.page2obj(event);
14192
14184
  var struct = this.editor.render.ctab.molecule;
14193
- if (ci && ci.map === 'bonds' && this.mode !== 'fg') {
14185
+ if (ci && ci.map === 'bonds' && !this.isModeFunctionalGroup) {
14194
14186
  var bond = struct.bonds.get(ci.id);
14195
14187
  var sign = getSign(struct, bond, eventPos);
14196
14188
  if (dragCtx.sign1 * this.template.sign > 0) {
@@ -14221,7 +14213,7 @@ var TemplateTool = function () {
14221
14213
  var atom = struct.atoms.get(atomId);
14222
14214
  targetPos = atom === null || atom === void 0 ? void 0 : atom.pp;
14223
14215
  if (targetPos) {
14224
- extraBond = this.mode === 'fg' ? true : Vec2.dist(targetPos, eventPos) > 1;
14216
+ extraBond = this.isModeFunctionalGroup ? true : Vec2.dist(targetPos, eventPos) > 1;
14225
14217
  }
14226
14218
  }
14227
14219
  }
@@ -14267,7 +14259,7 @@ var TemplateTool = function () {
14267
14259
  }
14268
14260
  dragCtx.action = action;
14269
14261
  this.editor.update(dragCtx.action, true);
14270
- if (this.mode !== 'fg') {
14262
+ if (!this.isModeFunctionalGroup) {
14271
14263
  dragCtx.mergeItems = getItemsToFuse(this.editor, pasteItems);
14272
14264
  this.editor.hover(getHoverToFuse(dragCtx.mergeItems));
14273
14265
  }
@@ -14277,15 +14269,9 @@ var TemplateTool = function () {
14277
14269
  }, {
14278
14270
  key: "mouseup",
14279
14271
  value: function mouseup(event) {
14280
- var _this = this,
14272
+ var _this2 = this,
14281
14273
  _ci;
14282
14274
  var dragCtx = this.dragCtx;
14283
- if (this.targetGroupsIds.length && this.mode !== 'fg') {
14284
- this.editor.event.removeFG.dispatch({
14285
- fgIds: this.targetGroupsIds
14286
- });
14287
- return;
14288
- }
14289
14275
  if (!dragCtx) {
14290
14276
  return true;
14291
14277
  }
@@ -14294,16 +14280,16 @@ var TemplateTool = function () {
14294
14280
  var struct = restruct.molecule;
14295
14281
  var ci = dragCtx.item;
14296
14282
  var functionalGroups = struct.functionalGroups;
14297
- if (dragCtx.action && ci && ci.map === 'bonds' && this.mode !== 'fg') {
14283
+ if (dragCtx.action && ci && ci.map === 'bonds' && !this.isModeFunctionalGroup) {
14298
14284
  dragCtx.action.perform(restruct);
14299
14285
  var promise = fromTemplateOnBondAction(restruct, this.template, ci.id, this.editor.event, dragCtx.sign1 * dragCtx.sign2 > 0, true);
14300
14286
  promise.then(function (_ref) {
14301
14287
  var _ref2 = _slicedToArray(_ref, 2),
14302
14288
  action = _ref2[0],
14303
14289
  pasteItems = _ref2[1];
14304
- var mergeItems = getItemsToFuse(_this.editor, pasteItems);
14290
+ var mergeItems = getItemsToFuse(_this2.editor, pasteItems);
14305
14291
  action = fromItemsFuse(restruct, mergeItems).mergeWith(action);
14306
- _this.editor.update(action);
14292
+ _this2.editor.update(action);
14307
14293
  });
14308
14294
  return true;
14309
14295
  }
@@ -14312,7 +14298,7 @@ var TemplateTool = function () {
14312
14298
  if (this.isSaltOrSolvent) {
14313
14299
  addSaltsAndSolventsOnCanvasWithoutMerge(restruct, this.template, dragCtx, this.editor);
14314
14300
  return true;
14315
- } else if (((_ci = ci) === null || _ci === void 0 ? void 0 : _ci.map) === 'functionalGroups' && FunctionalGroup.isContractedFunctionalGroup(ci.id, functionalGroups) && this.mode === 'fg' && this.targetGroupsIds.length) {
14301
+ } else if (((_ci = ci) === null || _ci === void 0 ? void 0 : _ci.map) === 'functionalGroups' && FunctionalGroup.isContractedFunctionalGroup(ci.id, functionalGroups) && this.isModeFunctionalGroup && this.targetGroupsIds.length) {
14316
14302
  functionalGroupRemoveAction = new Action();
14317
14303
  var _struct = this.editor.struct();
14318
14304
  var _restruct = this.editor.render.ctab;
@@ -14360,23 +14346,23 @@ var TemplateTool = function () {
14360
14346
  action = functionalGroupRemoveAction.mergeWith(action);
14361
14347
  }
14362
14348
  dragCtx.action = action;
14363
- } else if (ci.map === 'bonds' && this.mode !== 'fg') {
14349
+ } else if (ci.map === 'bonds' && !this.isModeFunctionalGroup) {
14364
14350
  var _promise = fromTemplateOnBondAction(restruct, this.template, ci.id, this.editor.event, dragCtx.sign1 * dragCtx.sign2 > 0, true);
14365
14351
  _promise.then(function (_ref3) {
14366
14352
  var _ref4 = _slicedToArray(_ref3, 2),
14367
14353
  action = _ref4[0],
14368
14354
  pasteItems = _ref4[1];
14369
- if (_this.mode !== 'fg') {
14370
- var mergeItems = getItemsToFuse(_this.editor, pasteItems);
14355
+ if (!_this2.isModeFunctionalGroup) {
14356
+ var mergeItems = getItemsToFuse(_this2.editor, pasteItems);
14371
14357
  action = fromItemsFuse(restruct, mergeItems).mergeWith(action);
14372
- _this.editor.update(action);
14358
+ _this2.editor.update(action);
14373
14359
  }
14374
14360
  });
14375
14361
  return true;
14376
14362
  }
14377
14363
  }
14378
14364
  this.editor.selection(null);
14379
- if (!dragCtx.mergeItems && pasteItems && this.mode !== 'fg') {
14365
+ if (!dragCtx.mergeItems && pasteItems && !this.isModeFunctionalGroup) {
14380
14366
  dragCtx.mergeItems = getItemsToFuse(this.editor, pasteItems);
14381
14367
  }
14382
14368
  dragCtx.action = dragCtx.action ? fromItemsFuse(restruct, dragCtx.mergeItems).mergeWith(dragCtx.action) : fromItemsFuse(restruct, dragCtx.mergeItems);
@@ -14417,8 +14403,12 @@ function addSaltsAndSolventsOnCanvasWithoutMerge(restruct, template, dragCtx, ed
14417
14403
  }
14418
14404
  function getTemplateMode(tmpl) {
14419
14405
  var _tmpl$props;
14420
- if (tmpl.mode) return tmpl.mode;
14421
- if (['Functional Groups', 'Salts and Solvents'].includes((_tmpl$props = tmpl.props) === null || _tmpl$props === void 0 ? void 0 : _tmpl$props.group)) return 'fg';
14406
+ if (tmpl.mode) {
14407
+ return tmpl.mode;
14408
+ }
14409
+ if (['Functional Groups', 'Salts and Solvents'].includes((_tmpl$props = tmpl.props) === null || _tmpl$props === void 0 ? void 0 : _tmpl$props.group)) {
14410
+ return MODES.FG;
14411
+ }
14422
14412
  return null;
14423
14413
  }
14424
14414
  function getSign(molecule, bond, v) {
@@ -15937,7 +15927,7 @@ var HoverIcon = function () {
15937
15927
  }, {
15938
15928
  key: "onMouseLeave",
15939
15929
  value: function onMouseLeave(event) {
15940
- if (!this.isOverLoader(event)) {
15930
+ if (!this.isOverLoader(event) && this.isShown) {
15941
15931
  this.shouldBeShownWhenMouseBack = true;
15942
15932
  this.hide();
15943
15933
  }
@@ -15962,9 +15952,12 @@ var HoverIcon = function () {
15962
15952
  }
15963
15953
  }, {
15964
15954
  key: "hide",
15965
- value: function hide() {
15955
+ value: function hide(restShouldBeShownWhenMouseBack) {
15966
15956
  this.element.hide();
15967
15957
  this.isShown = false;
15958
+ if (restShouldBeShownWhenMouseBack) {
15959
+ this.shouldBeShownWhenMouseBack = false;
15960
+ }
15968
15961
  }
15969
15962
  }, {
15970
15963
  key: "initialize",
@@ -15989,9 +15982,8 @@ var HoverIcon = function () {
15989
15982
  this.element = icon.element;
15990
15983
  this._fill = icon.fill;
15991
15984
  this._label = icon.label;
15992
- this.isShown = true;
15993
15985
  this.shouldBeShownWhenMouseBack = false;
15994
- this.updatePosition();
15986
+ this.hide();
15995
15987
  }
15996
15988
  }]);
15997
15989
  return HoverIcon;
@@ -16096,7 +16088,7 @@ var Editor$3 = function () {
16096
16088
  var tool = new tools[name](this, opts);
16097
16089
  var isAtomToolChosen = name === 'atom';
16098
16090
  if (!isAtomToolChosen) {
16099
- this.hoverIcon.hide();
16091
+ this.hoverIcon.hide(true);
16100
16092
  }
16101
16093
  if (!tool || tool.isNotActiveTool) {
16102
16094
  return null;
@@ -16155,7 +16147,7 @@ var Editor$3 = function () {
16155
16147
  this.render = new Render(this.render.clientArea, Object.assign({
16156
16148
  scale: SCALE
16157
16149
  }, value));
16158
- this.render.setMolecule(struct);
16150
+ this.struct(struct);
16159
16151
  this.render.setZoom(zoom);
16160
16152
  this.render.update();
16161
16153
  return this.render.options;
@@ -16209,7 +16201,9 @@ var Editor$3 = function () {
16209
16201
  }
16210
16202
  this.render.ctab.setSelection(this._selection);
16211
16203
  this.event.selectionChange.dispatch(this._selection);
16212
- this.render.update();
16204
+ this.render.update(false, null, {
16205
+ resizeCanvas: false
16206
+ });
16213
16207
  return this._selection;
16214
16208
  }
16215
16209
  }, {
@@ -16228,7 +16222,7 @@ var Editor$3 = function () {
16228
16222
  key: "update",
16229
16223
  value: function update(action, ignoreHistory) {
16230
16224
  var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {
16231
- extendCanvas: true
16225
+ resizeCanvas: true
16232
16226
  };
16233
16227
  if (action === true) {
16234
16228
  this.render.update(true, null, options);
@@ -17991,8 +17985,7 @@ function ownKeys$A(object, enumerableOnly) { var keys = Object.keys(object); if
17991
17985
  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(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; }
17992
17986
  function GenericInput(_ref) {
17993
17987
  _ref.schema;
17994
- var _ref$value = _ref.value,
17995
- value = _ref$value === void 0 ? '' : _ref$value,
17988
+ var value = _ref.value,
17996
17989
  onChange = _ref.onChange,
17997
17990
  innerRef = _ref.innerRef,
17998
17991
  _ref$type = _ref.type,
@@ -18014,7 +18007,7 @@ function GenericInput(_ref) {
18014
18007
  return jsxs(Fragment, {
18015
18008
  children: [jsx("input", _objectSpread$A({
18016
18009
  type: type,
18017
- value: value,
18010
+ value: value !== null && value !== void 0 ? value : '',
18018
18011
  onInput: onChange,
18019
18012
  onChange: onChange,
18020
18013
  className: clsx(classes$A.input, classes$A.genericInput),
@@ -24055,8 +24048,8 @@ var KetcherBuilder = function () {
24055
24048
  initApp(element, staticResourcesUrl, {
24056
24049
  buttons: buttons || {},
24057
24050
  errorHandler: errorHandler || null,
24058
- version: "2.9.0-rc.5-dev.1" ,
24059
- buildDate: "2023-03-30T12:13:55" ,
24051
+ version: "2.9.0-rc.7" ,
24052
+ buildDate: "2023-04-19T07:45:20" ,
24060
24053
  buildNumber: ''
24061
24054
  }, structService, resolve);
24062
24055
  });
@@ -24166,5 +24159,5 @@ function Editor(props) {
24166
24159
  });
24167
24160
  }
24168
24161
 
24169
- export { Editor, KETCHER_INIT_EVENT_NAME, KETCHER_SAVED_SETTINGS_KEY };
24162
+ export { Editor, KETCHER_INIT_EVENT_NAME, KETCHER_SAVED_SETTINGS_KEY, MODES };
24170
24163
  //# sourceMappingURL=index.modern.js.map