ketcher-react 3.1.0-rc.9 → 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;
@@ -77,10 +78,10 @@ declare class Editor implements KetcherEditor {
77
78
  setOrigin(): void;
78
79
  tool(name?: any, opts?: any): Tool | null;
79
80
  clear(): void;
80
- renderAndRecoordinateStruct(struct: Struct, needToCenterStruct?: boolean): Struct;
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
- struct(value?: Struct, needToCenterStruct?: boolean): Struct;
83
- structToAddFragment(value: Struct): Struct;
83
+ struct(value?: Struct, needToCenterStruct?: boolean, 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,7 +89,9 @@ declare class Editor implements KetcherEditor {
88
89
  private updateToolAfterOptionsChange;
89
90
  zoom(value?: any, event?: WheelEvent): number;
90
91
  centerStruct(): void;
91
- zoomAccordingContent(struct: Struct): void;
92
+ centerViewportAccordingToStruct(struct?: Struct): void;
93
+ positionStruct(x: number, y: number): void;
94
+ zoomAccordingContent(struct: Struct): boolean;
92
95
  selection(ci?: any): Selection | null;
93
96
  hover(ci: {
94
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.1.0-rc.9\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(),
@@ -24553,10 +24554,14 @@ var Editor$3 = function () {
24553
24554
  key: "renderAndRecoordinateStruct",
24554
24555
  value: function renderAndRecoordinateStruct(struct) {
24555
24556
  var needToCenterStruct = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
24557
+ var x = arguments.length > 2 ? arguments[2] : undefined;
24558
+ var y = arguments.length > 3 ? arguments[3] : undefined;
24556
24559
  var action = fromNewCanvas(this.render.ctab, struct);
24557
24560
  this.update(action);
24558
24561
  if (needToCenterStruct) {
24559
24562
  this.centerStruct();
24563
+ } else if (x != null && y != null) {
24564
+ this.positionStruct(x, y);
24560
24565
  }
24561
24566
  return this.render.ctab.molecule;
24562
24567
  }
@@ -24564,22 +24569,34 @@ var Editor$3 = function () {
24564
24569
  key: "struct",
24565
24570
  value: function struct(value) {
24566
24571
  var needToCenterStruct = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
24572
+ var x = arguments.length > 2 ? arguments[2] : undefined;
24573
+ var y = arguments.length > 3 ? arguments[3] : undefined;
24567
24574
  if (arguments.length === 0) {
24568
24575
  return this.render.ctab.molecule;
24569
24576
  }
24570
24577
  KetcherLogger.log('Editor.struct(), start', value, needToCenterStruct);
24571
24578
  this.selection(null);
24572
24579
  var struct = value || new Struct();
24573
- var molecule = this.renderAndRecoordinateStruct(struct, needToCenterStruct);
24580
+ var molecule = this.renderAndRecoordinateStruct(struct, needToCenterStruct, x, y);
24574
24581
  this.hoverIcon.create();
24575
24582
  KetcherLogger.log('Editor.struct(), end');
24576
24583
  return molecule;
24577
24584
  }
24578
24585
  }, {
24579
24586
  key: "structToAddFragment",
24580
- value: function structToAddFragment(value) {
24581
- var superStruct = value.mergeInto(this.render.ctab.molecule.clone());
24582
- return this.renderAndRecoordinateStruct(superStruct);
24587
+ value: function structToAddFragment(struct, x, y) {
24588
+ if (x != null && y != null) {
24589
+ var position = new Vec2(x, y);
24590
+ var _fromPaste = fromPaste(this.render.ctab, struct, position, 0, false, true),
24591
+ _fromPaste2 = _slicedToArray$1(_fromPaste, 1),
24592
+ action = _fromPaste2[0];
24593
+ this.update(action, true);
24594
+ } else {
24595
+ var superStruct = struct.mergeInto(this.render.ctab.molecule.clone());
24596
+ this.renderAndRecoordinateStruct(superStruct);
24597
+ }
24598
+ this.centerViewportAccordingToStruct();
24599
+ return this.render.ctab.molecule;
24583
24600
  }
24584
24601
  }, {
24585
24602
  key: "setOptions",
@@ -24649,6 +24666,32 @@ var Editor$3 = function () {
24649
24666
  var action = fromMultipleMove(structure, structureToMove, shiftVector);
24650
24667
  this.update(action, true);
24651
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
+ }
24683
+ }, {
24684
+ key: "positionStruct",
24685
+ value: function positionStruct(x, y) {
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);
24692
+ this.update(action, true);
24693
+ this.centerViewportAccordingToStruct();
24694
+ }
24652
24695
  }, {
24653
24696
  key: "zoomAccordingContent",
24654
24697
  value: function zoomAccordingContent(struct) {
@@ -24663,15 +24706,17 @@ var Editor$3 = function () {
24663
24706
  };
24664
24707
  var clientAreaBoundingBox = this.render.clientArea.getBoundingClientRect();
24665
24708
  if (parsedStructSizeInPixels.width + MARGIN_IN_PIXELS < clientAreaBoundingBox.width && parsedStructSizeInPixels.height + MARGIN_IN_PIXELS < clientAreaBoundingBox.height) {
24666
- return;
24709
+ return true;
24667
24710
  }
24668
24711
  var newZoomValue = this.render.options.zoom / (parsedStructSizeInPixels.height - clientAreaBoundingBox.height > parsedStructSizeInPixels.width - clientAreaBoundingBox.width ? parsedStructSizeInPixels.height / clientAreaBoundingBox.height : parsedStructSizeInPixels.width / clientAreaBoundingBox.width);
24669
24712
  if (newZoomValue >= MAX_ZOOM_VALUE) {
24670
24713
  this.zoom(MAX_ZOOM_VALUE);
24671
- return;
24714
+ return true;
24672
24715
  }
24673
24716
  newZoomValue -= MARGIN_IN_PIXELS / clientAreaBoundingBox.width;
24674
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;
24675
24720
  }
24676
24721
  }, {
24677
24722
  key: "selection",
@@ -27126,7 +27171,7 @@ var InfoTooltip$1 = connect(function (store) {
27126
27171
  };
27127
27172
  })(InfoTooltip);
27128
27173
 
27129
- 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"];
27130
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; }
27131
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; }
27132
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)); }
@@ -27359,6 +27404,7 @@ var StructEditor = function (_Component) {
27359
27404
  _this$props.onBondEdit;
27360
27405
  _this$props.onZoomIn;
27361
27406
  _this$props.onZoomOut;
27407
+ _this$props.onZoomChanged;
27362
27408
  _this$props.onRgroupEdit;
27363
27409
  _this$props.onSgroupEdit;
27364
27410
  _this$props.onRemoveFG;
@@ -34468,6 +34514,7 @@ function initEditor(dispatch, getState) {
34468
34514
  }),
34469
34515
  onZoomIn: updateAction,
34470
34516
  onZoomOut: updateAction,
34517
+ onZoomChanged: updateAction,
34471
34518
  onShowMacromoleculesErrorMessage: function onShowMacromoleculesErrorMessage(payload) {
34472
34519
  return dispatch(openInfoModalWithCustomMessage(payload));
34473
34520
  }
@@ -35019,8 +35066,8 @@ var KetcherBuilder = function () {
35019
35066
  cleanup = initApp(element, appRoot, staticResourcesUrl, {
35020
35067
  buttons: buttons || {},
35021
35068
  errorHandler: errorHandler || null,
35022
- version: "3.1.0-rc.9" ,
35023
- buildDate: "2025-03-11T17:54:08" ,
35069
+ version: "3.2.0-rc.2" ,
35070
+ buildDate: "2025-03-17T18:47:38" ,
35024
35071
  buildNumber: '',
35025
35072
  customButtons: customButtons || []
35026
35073
  }, structService, resolve, togglerComponent);
@@ -35312,7 +35359,7 @@ var ModeControl = function ModeControl(_ref3) {
35312
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; }
35313
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; }
35314
35361
  var MacromoleculesEditor = lazy(function () {
35315
- return import('./index.modern-b4203ed1.js');
35362
+ return import('./index.modern-ef6b0e2f.js');
35316
35363
  });
35317
35364
  var Editor = function Editor(props) {
35318
35365
  var _useState = useState(false),