ketcher-react 3.2.0-rc.1 → 3.2.0-rc.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -51,6 +51,7 @@ declare class Editor implements KetcherEditor {
51
51
  elementEdit: PipelineSubscription;
52
52
  zoomIn: PipelineSubscription;
53
53
  zoomOut: PipelineSubscription;
54
+ zoomChanged: PipelineSubscription;
54
55
  bondEdit: PipelineSubscription;
55
56
  rgroupEdit: PipelineSubscription;
56
57
  sgroupEdit: PipelineSubscription;
@@ -80,7 +81,7 @@ declare class Editor implements KetcherEditor {
80
81
  renderAndRecoordinateStruct(struct: Struct, needToCenterStruct?: boolean, x?: number, y?: number): Struct;
81
82
  /** Apply {@link value}: {@link Struct} if provided to {@link render} and */
82
83
  struct(value?: Struct, needToCenterStruct?: boolean, x?: number, y?: number): Struct;
83
- structToAddFragment(value: Struct, x?: number, y?: number): Struct;
84
+ structToAddFragment(struct: Struct, x?: number, y?: number): Struct;
84
85
  setOptions(opts: string): false | import("ketcher-core").RenderOptions;
85
86
  /** Apply options from {@link value} */
86
87
  options(value?: any): import("ketcher-core").RenderOptions;
@@ -88,8 +89,9 @@ declare class Editor implements KetcherEditor {
88
89
  private updateToolAfterOptionsChange;
89
90
  zoom(value?: any, event?: WheelEvent): number;
90
91
  centerStruct(): void;
92
+ centerViewportAccordingToStruct(struct?: Struct): void;
91
93
  positionStruct(x: number, y: number): void;
92
- zoomAccordingContent(struct: Struct): void;
94
+ zoomAccordingContent(struct: Struct): boolean;
93
95
  selection(ci?: any): Selection | null;
94
96
  hover(ci: {
95
97
  id: number;
@@ -24,5 +24,6 @@ export default function initEditor(dispatch: any, getState: any): {
24
24
  onUpdateFloatingTools: (...args: any[]) => void;
25
25
  onZoomIn: import("lodash").DebouncedFunc<() => any>;
26
26
  onZoomOut: import("lodash").DebouncedFunc<() => any>;
27
+ onZoomChanged: import("lodash").DebouncedFunc<() => any>;
27
28
  onShowMacromoleculesErrorMessage: (payload: any) => any;
28
29
  };
package/dist/index.js CHANGED
@@ -27,7 +27,7 @@ import _asyncToGenerator from '@babel/runtime/helpers/asyncToGenerator';
27
27
  import _regeneratorRuntime from '@babel/runtime/regenerator';
28
28
  import _classCallCheck$2 from '@babel/runtime/helpers/classCallCheck';
29
29
  import _createClass$2 from '@babel/runtime/helpers/createClass';
30
- import { KetSerializer, MolSerializer, KetcherLogger, Ketcher, defaultBondThickness, FormatterFactory, isClipboardAPIAvailable, notifyCopyCut, notifyRequestCompleted, isControlKey, StereLabelStyleType, StereoColoringType, ShowHydrogenLabels, ShowHydrogenLabelNames, SettingsManager, SdfSerializer, KETCHER_SAVED_OPTIONS_KEY, Bond as Bond$2, Elements, AtomList, getAtomType, StereoLabel, isAttachmentBond, Atom as Atom$2, findStereoAtoms, RxnArrowMode, MULTITAIL_ARROW_TOOL_NAME, SimpleObjectMode, IMAGE_KEY, SGroup as SGroup$1, Pile, identifyStructFormat, SupportedFormat, MULTITAIL_ARROW_KEY, ChemicalMimeType, RenderStruct, Struct, ZoomTool, shortcutStr, MonomerMicromolecule, UnresolvedMonomer, FunctionalGroupsProvider, SaltsAndSolventsProvider, KetcherAsyncEvents, ElementColor, ketcherProvider, generateMenuShortcuts, Vec2, Scale, fromMultipleMove, FunctionalGroup, mergeMapOfItemsToSet, fromSgroupDeletion, fromFragmentDeletion, vectorUtils, fromBondAddition, Action, fromAtomAddition, fromAtomsAttrs, checkOverlapping, fromSeveralSgroupAddition, expandSGroupWithMultipleAttachmentPoint, SgContexts, fromSgroupAction, fromItemsFuse, ReBond, setExpandSGroup, fromBondsAttrs, OperationType, ReStruct, imageReferencePositionToCursor, multitailArrowReferenceLinesToCursor, multitailReferencePositionToCursor, CoordinateTransformation, MultitailArrowRefName, fromMultitailArrowHeadTailMove, fromMultitailArrowHeadTailsResize, fromMultitailArrowMove, fromArrowResizing, fromPaste, fromImageResize, fromSimpleObjectResizing, getItemsToFuse, getHoverToFuse, fromTextDeletion, fromTextUpdating, fromTemplateOnCanvas, fromTemplateOnBondAction, fromTemplateOnAtom, BondAttr, AtomAttr, formatProperties, runAsyncAction, getStructStringFromClipboardData, getStructure, initHotKeys, keyNorm, Fragment as Fragment$1, fromRGroupAttachmentPointUpdate, fromOneBondDeletion, bondChangingAction, fromChain, removeInfoLabelFromAtoms, fromStereoFlagUpdate, fromOneAtomDeletion, fromArrowDeletion, fromPlusDeletion, fromSimpleObjectDeletion, fromRGroupAttachmentPointDeletion, fromImageDeletion, fromMultitailArrowDeletion, notifyItemsToMergeInitializationComplete, RGroup as RGroup$2, fromRGroupFragment, fromUpdateIfThen, fromRGroupAttrs, fromArrowAddition, fromMultitailArrowCreation, fromPlusAddition, fromRotate, fromFlip, fromSimpleObjectAddition, fromTextCreation, fromImageMove, fromImageCreation, fromHighlightCreate, fromHighlightClear, getOptionsWithConvertedUnits, provideEditorSettings, fromNewCanvas, Render, fromDescriptorsAlign, fromSgroupAttachmentPointAddition, SGroupAttachmentPoint, fromSgroupAddition, atomGetAttr, fromBondFlipping, setExpandMonomerSGroup, fromMultitailArrowTailAdd, MultitailArrow, fromMultitailArrowTailRemove, AmbiguousMonomer, genericsList, getAtomCustomQuery, getFormatMimeTypeByFileName, getPropertiesByFormat, StereoFlag, getPropertiesByImgFormat, legacyCopy as legacyCopy$1, b64toBlob, Generics, TextCommand, DefaultStructServiceOptions } from 'ketcher-core';
30
+ import { KetSerializer, MolSerializer, KetcherLogger, Ketcher, defaultBondThickness, FormatterFactory, isClipboardAPIAvailable, notifyCopyCut, notifyRequestCompleted, isControlKey, StereLabelStyleType, StereoColoringType, ShowHydrogenLabels, ShowHydrogenLabelNames, SettingsManager, SdfSerializer, KETCHER_SAVED_OPTIONS_KEY, Bond as Bond$2, Elements, AtomList, getAtomType, StereoLabel, isAttachmentBond, Atom as Atom$2, findStereoAtoms, RxnArrowMode, MULTITAIL_ARROW_TOOL_NAME, SimpleObjectMode, IMAGE_KEY, SGroup as SGroup$1, Pile, identifyStructFormat, SupportedFormat, MULTITAIL_ARROW_KEY, ChemicalMimeType, RenderStruct, Struct, ZoomTool, shortcutStr, MonomerMicromolecule, UnresolvedMonomer, FunctionalGroupsProvider, SaltsAndSolventsProvider, KetcherAsyncEvents, ElementColor, ketcherProvider, generateMenuShortcuts, Vec2, Scale, fromMultipleMove, FunctionalGroup, mergeMapOfItemsToSet, fromSgroupDeletion, fromFragmentDeletion, vectorUtils, fromBondAddition, Action, fromAtomAddition, fromAtomsAttrs, checkOverlapping, fromSeveralSgroupAddition, expandSGroupWithMultipleAttachmentPoint, SgContexts, fromSgroupAction, fromItemsFuse, ReBond, setExpandSGroup, fromBondsAttrs, OperationType, ReStruct, imageReferencePositionToCursor, multitailArrowReferenceLinesToCursor, multitailReferencePositionToCursor, CoordinateTransformation, MultitailArrowRefName, fromMultitailArrowHeadTailMove, fromMultitailArrowHeadTailsResize, fromMultitailArrowMove, fromArrowResizing, fromPaste, fromImageResize, fromSimpleObjectResizing, getItemsToFuse, getHoverToFuse, fromTextDeletion, fromTextUpdating, fromTemplateOnCanvas, fromTemplateOnBondAction, fromTemplateOnAtom, BondAttr, AtomAttr, formatProperties, runAsyncAction, getStructStringFromClipboardData, getStructure, initHotKeys, keyNorm, Fragment as Fragment$1, fromRGroupAttachmentPointUpdate, fromOneBondDeletion, bondChangingAction, fromChain, removeInfoLabelFromAtoms, fromStereoFlagUpdate, fromOneAtomDeletion, fromArrowDeletion, fromPlusDeletion, fromSimpleObjectDeletion, fromRGroupAttachmentPointDeletion, fromImageDeletion, fromMultitailArrowDeletion, notifyItemsToMergeInitializationComplete, RGroup as RGroup$2, fromRGroupFragment, fromUpdateIfThen, fromRGroupAttrs, fromArrowAddition, fromMultitailArrowCreation, fromPlusAddition, fromRotate, fromFlip, fromSimpleObjectAddition, fromTextCreation, fromImageMove, fromImageCreation, fromHighlightCreate, fromHighlightClear, getOptionsWithConvertedUnits, provideEditorSettings, fromNewCanvas, Render, Coordinates, fromDescriptorsAlign, fromSgroupAttachmentPointAddition, SGroupAttachmentPoint, fromSgroupAddition, atomGetAttr, fromBondFlipping, setExpandMonomerSGroup, fromMultitailArrowTailAdd, MultitailArrow, fromMultitailArrowTailRemove, AmbiguousMonomer, genericsList, getAtomCustomQuery, getFormatMimeTypeByFileName, getPropertiesByFormat, StereoFlag, getPropertiesByImgFormat, legacyCopy as legacyCopy$1, b64toBlob, Generics, TextCommand, DefaultStructServiceOptions } from 'ketcher-core';
31
31
  import _objectWithoutProperties from '@babel/runtime/helpers/objectWithoutProperties';
32
32
  import _possibleConstructorReturn$2 from '@babel/runtime/helpers/possibleConstructorReturn';
33
33
  import _getPrototypeOf$2 from '@babel/runtime/helpers/getPrototypeOf';
@@ -3743,7 +3743,7 @@ var zoom = {
3743
3743
 
3744
3744
  var openHelpLink = function openHelpLink() {
3745
3745
  var _window$open;
3746
- return (_window$open = window.open("https://github.com/epam/ketcher/blob/".concat("v3.2.0-rc.1\n", "/documentation/help.md#ketcher-overview"))) === null || _window$open === void 0 ? void 0 : _window$open.focus();
3746
+ return (_window$open = window.open("https://github.com/epam/ketcher/blob/".concat("v3.2.0-rc.2\n", "/documentation/help.md#ketcher-overview"))) === null || _window$open === void 0 ? void 0 : _window$open.focus();
3747
3747
  };
3748
3748
  var help = {
3749
3749
  help: {
@@ -24483,6 +24483,7 @@ var Editor$3 = function () {
24483
24483
  bondEdit: new PipelineSubscription(),
24484
24484
  zoomIn: new PipelineSubscription(),
24485
24485
  zoomOut: new PipelineSubscription(),
24486
+ zoomChanged: new PipelineSubscription(),
24486
24487
  rgroupEdit: new PipelineSubscription(),
24487
24488
  sgroupEdit: new PipelineSubscription(),
24488
24489
  sdataEdit: new PipelineSubscription(),
@@ -24583,18 +24584,19 @@ var Editor$3 = function () {
24583
24584
  }
24584
24585
  }, {
24585
24586
  key: "structToAddFragment",
24586
- value: function structToAddFragment(value, x, y) {
24587
+ value: function structToAddFragment(struct, x, y) {
24587
24588
  if (x != null && y != null) {
24588
24589
  var position = new Vec2(x, y);
24589
- var _fromPaste = fromPaste(this.render.ctab, value, position, 0),
24590
+ var _fromPaste = fromPaste(this.render.ctab, struct, position, 0, false, true),
24590
24591
  _fromPaste2 = _slicedToArray$1(_fromPaste, 1),
24591
24592
  action = _fromPaste2[0];
24592
24593
  this.update(action, true);
24593
- return this.render.ctab.molecule;
24594
24594
  } else {
24595
- var superStruct = value.mergeInto(this.render.ctab.molecule.clone());
24596
- return this.renderAndRecoordinateStruct(superStruct);
24595
+ var superStruct = struct.mergeInto(this.render.ctab.molecule.clone());
24596
+ this.renderAndRecoordinateStruct(superStruct);
24597
24597
  }
24598
+ this.centerViewportAccordingToStruct();
24599
+ return this.render.ctab.molecule;
24598
24600
  }
24599
24601
  }, {
24600
24602
  key: "setOptions",
@@ -24664,16 +24666,31 @@ var Editor$3 = function () {
24664
24666
  var action = fromMultipleMove(structure, structureToMove, shiftVector);
24665
24667
  this.update(action, true);
24666
24668
  }
24669
+ }, {
24670
+ key: "centerViewportAccordingToStruct",
24671
+ value: function centerViewportAccordingToStruct() {
24672
+ var struct = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.struct();
24673
+ var isFitMinZoom = this.zoomAccordingContent(struct);
24674
+ var structBbox = struct.getCoordBoundingBox();
24675
+ var newScrollCoordinates = Coordinates.modelToCanvas(isFitMinZoom ? new Vec2(structBbox.min.x + (structBbox.max.x - structBbox.min.x) / 2, structBbox.min.y + (structBbox.max.y - structBbox.min.y) / 2) : new Vec2(structBbox.min.x, structBbox.min.y)).sub(new Vec2(this.render.viewBox.width / 2, this.render.viewBox.height / 2));
24676
+ this.render.setViewBox(function (viewBox) {
24677
+ return _objectSpread$Q(_objectSpread$Q({}, viewBox), {}, {
24678
+ minX: newScrollCoordinates.x,
24679
+ minY: newScrollCoordinates.y
24680
+ });
24681
+ });
24682
+ }
24667
24683
  }, {
24668
24684
  key: "positionStruct",
24669
24685
  value: function positionStruct(x, y) {
24670
- var structure = this.render.ctab;
24671
- var structCenter = getStructCenter(structure);
24672
- var viewBoxCenter = new Vec2(this.render.viewBox.minX + x, this.render.viewBox.minY + y);
24673
- var shiftVector = viewBoxCenter.sub(structCenter);
24674
- var structureToMove = getSelectionMap(structure);
24675
- var action = fromMultipleMove(structure, structureToMove, shiftVector);
24686
+ var struct = this.struct();
24687
+ var reStruct = this.render.ctab;
24688
+ var structBbox = struct.getCoordBoundingBox();
24689
+ var shiftVector = new Vec2(x, y).sub(structBbox.min);
24690
+ var structureToMove = getSelectionMap(reStruct);
24691
+ var action = fromMultipleMove(reStruct, structureToMove, shiftVector);
24676
24692
  this.update(action, true);
24693
+ this.centerViewportAccordingToStruct();
24677
24694
  }
24678
24695
  }, {
24679
24696
  key: "zoomAccordingContent",
@@ -24689,15 +24706,17 @@ var Editor$3 = function () {
24689
24706
  };
24690
24707
  var clientAreaBoundingBox = this.render.clientArea.getBoundingClientRect();
24691
24708
  if (parsedStructSizeInPixels.width + MARGIN_IN_PIXELS < clientAreaBoundingBox.width && parsedStructSizeInPixels.height + MARGIN_IN_PIXELS < clientAreaBoundingBox.height) {
24692
- return;
24709
+ return true;
24693
24710
  }
24694
24711
  var newZoomValue = this.render.options.zoom / (parsedStructSizeInPixels.height - clientAreaBoundingBox.height > parsedStructSizeInPixels.width - clientAreaBoundingBox.width ? parsedStructSizeInPixels.height / clientAreaBoundingBox.height : parsedStructSizeInPixels.width / clientAreaBoundingBox.width);
24695
24712
  if (newZoomValue >= MAX_ZOOM_VALUE) {
24696
24713
  this.zoom(MAX_ZOOM_VALUE);
24697
- return;
24714
+ return true;
24698
24715
  }
24699
24716
  newZoomValue -= MARGIN_IN_PIXELS / clientAreaBoundingBox.width;
24700
24717
  this.zoom(newZoomValue < MIN_ZOOM_VALUE ? MIN_ZOOM_VALUE : Number(newZoomValue.toFixed(2)));
24718
+ this.event.zoomChanged.dispatch();
24719
+ return newZoomValue > MIN_ZOOM_VALUE;
24701
24720
  }
24702
24721
  }, {
24703
24722
  key: "selection",
@@ -27152,7 +27171,7 @@ var InfoTooltip$1 = connect(function (store) {
27152
27171
  };
27153
27172
  })(InfoTooltip);
27154
27173
 
27155
- var _excluded$o = ["Tag", "className", "indigoVerification", "struct", "tool", "toolOpts", "options", "onInit", "onSelectionChange", "onElementEdit", "onEnhancedStereoEdit", "onQuickEdit", "onBondEdit", "onZoomIn", "onZoomOut", "onRgroupEdit", "onSgroupEdit", "onRemoveFG", "onMessage", "onAromatizeStruct", "onDearomatizeStruct", "onAttachEdit", "onCipChange", "onConfirm", "onShowInfo", "onApiSettings", "showAttachmentPoints", "onUpdateFloatingTools", "onShowMacromoleculesErrorMessage", "serverSettings"];
27174
+ var _excluded$o = ["Tag", "className", "indigoVerification", "struct", "tool", "toolOpts", "options", "onInit", "onSelectionChange", "onElementEdit", "onEnhancedStereoEdit", "onQuickEdit", "onBondEdit", "onZoomIn", "onZoomOut", "onZoomChanged", "onRgroupEdit", "onSgroupEdit", "onRemoveFG", "onMessage", "onAromatizeStruct", "onDearomatizeStruct", "onAttachEdit", "onCipChange", "onConfirm", "onShowInfo", "onApiSettings", "showAttachmentPoints", "onUpdateFloatingTools", "onShowMacromoleculesErrorMessage", "serverSettings"];
27156
27175
  function ownKeys$G(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
27157
27176
  function _objectSpread$G(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$G(Object(t), !0).forEach(function (r) { _defineProperty$1(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$G(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
27158
27177
  function _callSuper$9(t, o, e) { return o = _getPrototypeOf$2(o), _possibleConstructorReturn$2(t, _isNativeReflectConstruct$9() ? Reflect.construct(o, e || [], _getPrototypeOf$2(t).constructor) : o.apply(t, e)); }
@@ -27385,6 +27404,7 @@ var StructEditor = function (_Component) {
27385
27404
  _this$props.onBondEdit;
27386
27405
  _this$props.onZoomIn;
27387
27406
  _this$props.onZoomOut;
27407
+ _this$props.onZoomChanged;
27388
27408
  _this$props.onRgroupEdit;
27389
27409
  _this$props.onSgroupEdit;
27390
27410
  _this$props.onRemoveFG;
@@ -34494,6 +34514,7 @@ function initEditor(dispatch, getState) {
34494
34514
  }),
34495
34515
  onZoomIn: updateAction,
34496
34516
  onZoomOut: updateAction,
34517
+ onZoomChanged: updateAction,
34497
34518
  onShowMacromoleculesErrorMessage: function onShowMacromoleculesErrorMessage(payload) {
34498
34519
  return dispatch(openInfoModalWithCustomMessage(payload));
34499
34520
  }
@@ -35045,8 +35066,8 @@ var KetcherBuilder = function () {
35045
35066
  cleanup = initApp(element, appRoot, staticResourcesUrl, {
35046
35067
  buttons: buttons || {},
35047
35068
  errorHandler: errorHandler || null,
35048
- version: "3.2.0-rc.1" ,
35049
- buildDate: "2025-03-04T14:36:10" ,
35069
+ version: "3.2.0-rc.2" ,
35070
+ buildDate: "2025-03-17T18:47:38" ,
35050
35071
  buildNumber: '',
35051
35072
  customButtons: customButtons || []
35052
35073
  }, structService, resolve, togglerComponent);
@@ -35338,7 +35359,7 @@ var ModeControl = function ModeControl(_ref3) {
35338
35359
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
35339
35360
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty$1(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
35340
35361
  var MacromoleculesEditor = lazy(function () {
35341
- return import('./index.modern-17b0bd64.js');
35362
+ return import('./index.modern-ef6b0e2f.js');
35342
35363
  });
35343
35364
  var Editor = function Editor(props) {
35344
35365
  var _useState = useState(false),