ketcher-react 2.26.0-rc.6 → 2.27.0-rc.1

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.
@@ -3733,7 +3733,7 @@ var zoom = {
3733
3733
 
3734
3734
  var openHelpLink = function openHelpLink() {
3735
3735
  var _window$open;
3736
- return (_window$open = window.open("https://github.com/epam/ketcher/blob/".concat("v2.26.0-rc.6\n", "/documentation/help.md#ketcher-overview"))) === null || _window$open === void 0 ? void 0 : _window$open.focus();
3736
+ return (_window$open = window.open("https://github.com/epam/ketcher/blob/".concat("v2.27.0-rc.1\n", "/documentation/help.md#ketcher-overview"))) === null || _window$open === void 0 ? void 0 : _window$open.focus();
3737
3737
  };
3738
3738
  var help = {
3739
3739
  help: {
@@ -8250,11 +8250,6 @@ var DetailsContainer = styled.div({
8250
8250
  overflowX: 'hidden',
8251
8251
  overflowY: 'auto',
8252
8252
  transition: 'all .3s'
8253
- }, function (_ref) {
8254
- var expanded = _ref.expanded;
8255
- return {
8256
- maxHeight: expanded ? '9999px' : '0'
8257
- };
8258
8253
  });
8259
8254
 
8260
8255
  var Accordion$1 = function Accordion(_ref) {
@@ -8269,7 +8264,7 @@ var Accordion$1 = function Accordion(_ref) {
8269
8264
  children: [jsx(SummaryContainer, {
8270
8265
  onClick: onSummaryClick,
8271
8266
  children: summary
8272
- }), jsx(DetailsContainer, {
8267
+ }), expanded && jsx(DetailsContainer, {
8273
8268
  "data-testid": dataTestIdDetails,
8274
8269
  expanded: expanded,
8275
8270
  children: details
@@ -8436,7 +8431,8 @@ var MonomerName = styled.div(_templateObject6$2 || (_templateObject6$2 = _tagged
8436
8431
 
8437
8432
  var AmbiguousMonomerPreview = function AmbiguousMonomerPreview(_ref) {
8438
8433
  var className = _ref.className,
8439
- preview = _ref.preview;
8434
+ preview = _ref.preview,
8435
+ style = _ref.style;
8440
8436
  var monomer = preview.monomer,
8441
8437
  presetMonomers = preview.presetMonomers;
8442
8438
  var isAlternatives = monomer.subtype === 'alternatives';
@@ -8494,6 +8490,7 @@ var AmbiguousMonomerPreview = function AmbiguousMonomerPreview(_ref) {
8494
8490
  return sortedData.slice(0, 5);
8495
8491
  }, [previewData, isAlternatives]);
8496
8492
  return jsxs(Container, {
8493
+ style: style,
8497
8494
  className: className,
8498
8495
  "data-testid": "polymer-library-preview",
8499
8496
  children: [jsx(Header$1, {
@@ -14560,7 +14557,7 @@ var groupDescriptors = groups.reduce(function (accum, group, index) {
14560
14557
  var rGroupOptions = makeItems(['rgroup-label', 'rgroup-fragment', 'rgroup-attpoints']);
14561
14558
  var shapeOptions = makeItems(['shape-ellipse', 'shape-rectangle', 'shape-line']);
14562
14559
  var selectOptions$2 = makeItems(['select-rectangle', 'select-lasso', 'select-fragment']);
14563
- var arrowsOptions = makeItems(['reaction-arrow-open-angle', 'reaction-arrow-filled-triangle', 'reaction-arrow-filled-bow', 'reaction-arrow-dashed-open-angle', 'reaction-arrow-failed', 'reaction-arrow-retrosynthetic', 'reaction-arrow-both-ends-filled-triangle', 'reaction-arrow-equilibrium-filled-half-bow', 'reaction-arrow-equilibrium-filled-triangle', 'reaction-arrow-equilibrium-open-angle', 'reaction-arrow-unbalanced-equilibrium-filled-half-bow', 'reaction-arrow-unbalanced-equilibrium-open-half-angle', 'reaction-arrow-unbalanced-equilibrium-large-filled-half-bow', 'reaction-arrow-unbalanced-equilibrium-filled-half-triangle', 'reaction-arrow-elliptical-arc-arrow-open-angle', 'reaction-arrow-elliptical-arc-arrow-filled-triangle', 'reaction-arrow-elliptical-arc-arrow-filled-bow', 'reaction-arrow-elliptical-arc-arrow-open-half-angle', MULTITAIL_ARROW_TOOL_NAME]);
14560
+ var arrowsOptions = makeItems(['reaction-arrow-open-angle', 'reaction-arrow-filled-triangle', 'reaction-arrow-filled-bow', 'reaction-arrow-dashed-open-angle', 'reaction-arrow-failed', 'reaction-arrow-retrosynthetic', 'reaction-arrow-both-ends-filled-triangle', 'reaction-arrow-equilibrium-filled-half-bow', 'reaction-arrow-equilibrium-filled-triangle', 'reaction-arrow-equilibrium-open-angle', 'reaction-arrow-unbalanced-equilibrium-filled-half-bow', 'reaction-arrow-unbalanced-equilibrium-open-half-angle', 'reaction-arrow-unbalanced-equilibrium-large-filled-half-bow', 'reaction-arrow-unbalanced-equilibrium-filled-half-triangle', 'reaction-arrow-elliptical-arc-arrow-filled-bow', 'reaction-arrow-elliptical-arc-arrow-filled-triangle', 'reaction-arrow-elliptical-arc-arrow-open-angle', 'reaction-arrow-elliptical-arc-arrow-open-half-angle', MULTITAIL_ARROW_TOOL_NAME]);
14564
14561
  var mappingOptions = makeItems(['reaction-map', 'reaction-unmap', 'reaction-automap']);
14565
14562
 
14566
14563
  var classes$M = {"scroll":"ArrowScroll-module_scroll__h9kCx","button":"ArrowScroll-module_button__ygMgL","down":"ArrowScroll-module_down__yDzZX","up":"ArrowScroll-module_up__Q1ubd"};
@@ -15345,14 +15342,16 @@ var UndoRedo = function UndoRedo(_ref) {
15345
15342
  iconName: "undo",
15346
15343
  disabled: disabledButtons.includes('undo'),
15347
15344
  isHidden: hiddenButtons.includes('undo'),
15348
- shortcut: shortcuts.undo
15345
+ shortcut: shortcuts.undo,
15346
+ testId: "undo"
15349
15347
  }), jsx(TopToolbarIconButton, {
15350
15348
  title: "Redo",
15351
15349
  onClick: onRedo,
15352
15350
  iconName: "redo",
15353
15351
  disabled: disabledButtons.includes('redo'),
15354
15352
  isHidden: hiddenButtons.includes('redo'),
15355
- shortcut: shortcuts.redo
15353
+ shortcut: shortcuts.redo,
15354
+ testId: "redo"
15356
15355
  }), jsx(Divider$1, {})]
15357
15356
  });
15358
15357
  };
@@ -16150,22 +16149,34 @@ function getElementsInRectangle(restruct, p0, p1) {
16150
16149
  var bottomLeftPosition = new Vec2(x0, y1);
16151
16150
  var polygon = [topLeftPosition, topRightPosition, bottomRightPosition, bottomLeftPosition];
16152
16151
  restruct.bonds.forEach(function (bond, bid) {
16153
- if (struct.isBondFromMacromolecule(bid)) {
16152
+ if (FunctionalGroup.isBondInContractedFunctionalGroup(bond.b, sGroups, functionalGroups)) {
16154
16153
  return;
16155
16154
  }
16156
- var centre = Vec2.lc2(
16157
- restruct.atoms.get(bond.b.begin).a.pp, 0.5,
16158
- restruct.atoms.get(bond.b.end).a.pp, 0.5);
16159
- if (centre.x > x0 && centre.x < x1 && centre.y > y0 && centre.y < y1 && !FunctionalGroup.isBondInContractedFunctionalGroup(bond.b, sGroups, functionalGroups)) {
16155
+ var center;
16156
+ if (bond.b.isExternalBondBetweenMonomers(struct)) {
16157
+ var firstMonomer = struct.getGroupFromAtomId(bond.b.begin);
16158
+ var secondMonomer = struct.getGroupFromAtomId(bond.b.end);
16159
+ assert_1(firstMonomer);
16160
+ assert_1(secondMonomer);
16161
+ center = firstMonomer.pp && secondMonomer.pp ? Vec2.centre(firstMonomer.pp, secondMonomer.pp) : bond.b.center;
16162
+ } else {
16163
+ center = bond.b.center;
16164
+ }
16165
+ if (center.x > x0 && center.x < x1 && center.y > y0 && center.y < y1) {
16160
16166
  bondList.push(bid);
16161
16167
  }
16162
16168
  });
16163
16169
  restruct.atoms.forEach(function (atom, aid) {
16164
16170
  var relatedFGId = FunctionalGroup.findFunctionalGroupByAtom(functionalGroups, aid);
16165
- var reSGroup = restruct.sgroups.get(relatedFGId);
16166
- if (atom.a.pp.x > x0 && atom.a.pp.x < x1 && atom.a.pp.y > y0 && atom.a.pp.y < y1 && (!FunctionalGroup.isAtomInContractedFunctionalGroup(atom.a, sGroups, functionalGroups, true) ||
16167
- aid === reSGroup.item.atoms[0])) {
16168
- atomList.push(aid);
16171
+ var sGroup = struct.sgroups.get(relatedFGId);
16172
+ if (struct.isAtomFromMacromolecule(aid)) {
16173
+ if (sGroup && sGroup.pp && sGroup.pp.x > x0 && sGroup.pp.x < x1 && sGroup.pp.y > y0 && sGroup.pp.y < y1) {
16174
+ atomList.push(aid);
16175
+ }
16176
+ } else {
16177
+ if (atom.a.pp.x > x0 && atom.a.pp.x < x1 && atom.a.pp.y > y0 && atom.a.pp.y < y1 && (!FunctionalGroup.isAtomInContractedFunctionalGroup(atom.a, sGroups, functionalGroups, true) || aid === (sGroup === null || sGroup === void 0 ? void 0 : sGroup.atoms[0]))) {
16178
+ atomList.push(aid);
16179
+ }
16169
16180
  }
16170
16181
  });
16171
16182
  var rxnArrowsList = [];
@@ -16260,22 +16271,34 @@ function getElementsInPolygon(restruct, rr) {
16260
16271
  r[i] = new Vec2(rr[i].x, rr[i].y);
16261
16272
  }
16262
16273
  restruct.bonds.forEach(function (bond, bid) {
16263
- if (struct.isAtomFromMacromolecule(bond.b.begin) || struct.isAtomFromMacromolecule(bond.b.end)) {
16274
+ if (FunctionalGroup.isBondInContractedFunctionalGroup(bond.b, sGroups, functionalGroups)) {
16264
16275
  return;
16265
16276
  }
16266
- var centre = Vec2.lc2(
16267
- restruct.atoms.get(bond.b.begin).a.pp, 0.5,
16268
- restruct.atoms.get(bond.b.end).a.pp, 0.5);
16269
- if (isPointInPolygon(r, centre) && !FunctionalGroup.isBondInContractedFunctionalGroup(bond.b, sGroups, functionalGroups)) {
16277
+ var center;
16278
+ if (bond.b.isExternalBondBetweenMonomers(struct)) {
16279
+ var firstMonomer = struct.getGroupFromAtomId(bond.b.begin);
16280
+ var secondMonomer = struct.getGroupFromAtomId(bond.b.end);
16281
+ assert_1(firstMonomer);
16282
+ assert_1(secondMonomer);
16283
+ center = firstMonomer !== null && firstMonomer !== void 0 && firstMonomer.pp && secondMonomer !== null && secondMonomer !== void 0 && secondMonomer.pp ? Vec2.centre(firstMonomer.pp, secondMonomer.pp) : bond.b.center;
16284
+ } else {
16285
+ center = bond.b.center;
16286
+ }
16287
+ if (isPointInPolygon(r, center)) {
16270
16288
  bondList.push(bid);
16271
16289
  }
16272
16290
  });
16273
16291
  restruct.atoms.forEach(function (atom, aid) {
16274
16292
  var relatedFGId = FunctionalGroup.findFunctionalGroupByAtom(functionalGroups, aid);
16275
- var reSGroup = restruct.sgroups.get(relatedFGId);
16276
- if (isPointInPolygon(r, atom.a.pp) && (!FunctionalGroup.isAtomInContractedFunctionalGroup(atom.a, sGroups, functionalGroups, true) ||
16277
- aid === reSGroup.item.atoms[0])) {
16278
- atomList.push(aid);
16293
+ var sGroup = struct.sgroups.get(relatedFGId);
16294
+ if (struct.isAtomFromMacromolecule(aid)) {
16295
+ if (sGroup && sGroup.pp && isPointInPolygon(r, sGroup.pp)) {
16296
+ atomList.push(aid);
16297
+ }
16298
+ } else {
16299
+ if (isPointInPolygon(r, atom.a.pp) && (!FunctionalGroup.isAtomInContractedFunctionalGroup(atom.a, sGroups, functionalGroups, true) || aid === (sGroup === null || sGroup === void 0 ? void 0 : sGroup.atoms[0]))) {
16300
+ atomList.push(aid);
16301
+ }
16279
16302
  }
16280
16303
  });
16281
16304
  var rxnArrowsList = [];
@@ -21462,7 +21485,12 @@ var EnhancedStereoTool = function () {
21462
21485
  }
21463
21486
  var action = stereoAtoms.reduce(function (acc, stereoAtom) {
21464
21487
  var _struct$atoms$get;
21465
- return acc.mergeWith(fromStereoFlagUpdate(restruct, (_struct$atoms$get = struct.atoms.get(stereoAtom)) === null || _struct$atoms$get === void 0 ? void 0 : _struct$atoms$get.fragment));
21488
+ var frid = (_struct$atoms$get = struct.atoms.get(stereoAtom)) === null || _struct$atoms$get === void 0 ? void 0 : _struct$atoms$get.fragment;
21489
+ var frag = frid !== undefined ? restruct.molecule.frags.get(frid) : null;
21490
+ if (frag && frag.stereoAtoms) {
21491
+ return acc.mergeWith(fromStereoFlagUpdate(restruct, frid));
21492
+ }
21493
+ return acc;
21466
21494
  }, fromAtomsAttrs(restruct, stereoAtoms, {
21467
21495
  stereoLabel: stereoLabel
21468
21496
  }, false));
@@ -23498,23 +23526,26 @@ var Highlighter = function () {
23498
23526
  args.forEach(function (arg) {
23499
23527
  var atoms = arg.atoms,
23500
23528
  bonds = arg.bonds,
23529
+ rgroupAttachmentPoints = arg.rgroupAttachmentPoints,
23501
23530
  color = arg.color;
23502
23531
  if (typeof color !== 'string') {
23503
23532
  return;
23504
23533
  }
23505
- if (!atoms && !bonds) {
23534
+ if (!atoms && !bonds && !rgroupAttachmentPoints) {
23506
23535
  return;
23507
23536
  }
23508
23537
  var restruct = _this.editor.render.ctab;
23509
- var _getValidInputOnly = getValidInputOnly(restruct.molecule, atoms, bonds),
23538
+ var _getValidInputOnly = getValidInputOnly(restruct.molecule, atoms, bonds, rgroupAttachmentPoints),
23510
23539
  validAtoms = _getValidInputOnly.validAtoms,
23511
- validBonds = _getValidInputOnly.validBonds;
23512
- if (validAtoms.length === 0 && validBonds.length === 0) {
23540
+ validBonds = _getValidInputOnly.validBonds,
23541
+ validRgroupAttachmentPoints = _getValidInputOnly.validRgroupAttachmentPoints;
23542
+ if (validAtoms.length === 0 && validBonds.length === 0 && validRgroupAttachmentPoints.length === 0) {
23513
23543
  return;
23514
23544
  }
23515
23545
  createdHighlights.push({
23516
23546
  atoms: validAtoms,
23517
23547
  bonds: validBonds,
23548
+ rgroupAttachmentPoints: validRgroupAttachmentPoints,
23518
23549
  color: color
23519
23550
  });
23520
23551
  });
@@ -23530,15 +23561,19 @@ var Highlighter = function () {
23530
23561
  }]);
23531
23562
  return Highlighter;
23532
23563
  }();
23533
- function getValidInputOnly(struct, atoms, bonds) {
23564
+ function getValidInputOnly(struct, atoms, bonds, rgroupAttachmentPoints) {
23534
23565
  if (!Array.isArray(atoms)) {
23535
23566
  atoms = [];
23536
23567
  }
23537
23568
  if (!Array.isArray(bonds)) {
23538
23569
  bonds = [];
23539
23570
  }
23571
+ if (!Array.isArray(rgroupAttachmentPoints)) {
23572
+ rgroupAttachmentPoints = [];
23573
+ }
23540
23574
  var structAtoms = struct.atoms,
23541
- structBonds = struct.bonds;
23575
+ structBonds = struct.bonds,
23576
+ structRgroupAttachmentPoints = struct.rgroupAttachmentPoints;
23542
23577
  if (atoms.length > 0) {
23543
23578
  atoms = atoms.filter(function (aid) {
23544
23579
  return structAtoms.has(aid);
@@ -23549,9 +23584,15 @@ function getValidInputOnly(struct, atoms, bonds) {
23549
23584
  return structBonds.has(bid);
23550
23585
  });
23551
23586
  }
23587
+ if (rgroupAttachmentPoints.length > 0) {
23588
+ rgroupAttachmentPoints = rgroupAttachmentPoints.filter(function (rgroupAPId) {
23589
+ return structRgroupAttachmentPoints.has(rgroupAPId);
23590
+ });
23591
+ }
23552
23592
  return {
23553
23593
  validAtoms: atoms,
23554
- validBonds: bonds
23594
+ validBonds: bonds,
23595
+ validRgroupAttachmentPoints: rgroupAttachmentPoints
23555
23596
  };
23556
23597
  }
23557
23598
 
@@ -24337,7 +24378,7 @@ function _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedec
24337
24378
  function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
24338
24379
  var SCALE = provideEditorSettings().microModeScale;
24339
24380
  var HISTORY_SIZE = 32;
24340
- var structObjects = ['atoms', 'bonds', 'frags', 'sgroups', 'sgroupData', 'rgroups', 'rxnArrows', 'rxnPluses', 'enhancedFlags', 'simpleObjects', 'texts', IMAGE_KEY, MULTITAIL_ARROW_KEY];
24381
+ var structObjects = ['atoms', 'bonds', 'frags', 'sgroups', 'sgroupData', 'rgroups', 'rxnArrows', 'rxnPluses', 'enhancedFlags', 'simpleObjects', 'texts', 'rgroupAttachmentPoints', IMAGE_KEY, MULTITAIL_ARROW_KEY];
24341
24382
  var highlightTargets = ['atoms', 'bonds', 'rxnArrows', 'rxnPluses', 'functionalGroups', 'frags', 'merge', 'rgroups', 'rgroupAttachmentPoints', 'sgroups', 'sgroupData', 'enhancedFlags', 'simpleObjects', 'texts', IMAGE_KEY, MULTITAIL_ARROW_KEY];
24342
24383
  function selectStereoFlagsIfNecessary(atoms, expAtoms) {
24343
24384
  var atomsOfFragments = {};
@@ -24581,21 +24622,13 @@ var Editor$3 = function () {
24581
24622
  if (arguments.length === 0) {
24582
24623
  return this._selection;
24583
24624
  }
24584
- var struct = this.struct();
24585
24625
  var ReStruct = this.render.ctab;
24586
24626
  var selectAll = false;
24587
24627
  this._selection = null;
24588
24628
  if (ci === 'all') {
24589
24629
  selectAll = true;
24590
24630
  ci = structObjects.reduce(function (res, key) {
24591
- var restructItemsIds = Array.from(ReStruct[key].keys());
24592
- restructItemsIds = restructItemsIds.filter(function (restructItemId) {
24593
- return !struct.isTargetFromMacromolecule({
24594
- map: key,
24595
- id: restructItemId
24596
- });
24597
- });
24598
- res[key] = restructItemsIds;
24631
+ res[key] = Array.from(ReStruct[key].keys());
24599
24632
  return res;
24600
24633
  }, {});
24601
24634
  }
@@ -25518,15 +25551,20 @@ var AtomMenuItems = function AtomMenuItems(props) {
25518
25551
  var atomIds = ((_props$propsFromTrigg6 = props.propsFromTrigger) === null || _props$propsFromTrigg6 === void 0 ? void 0 : _props$propsFromTrigg6.atomIds) || [];
25519
25552
  editor.highlights.create({
25520
25553
  atoms: atomIds,
25554
+ rgroupAttachmentPoints: [],
25521
25555
  bonds: [],
25522
25556
  color: color === '' ? 'transparent' : color
25523
25557
  });
25524
25558
  };
25525
25559
  if (isAtomSuperatomLeavingGroup && onlyOneAtomSelected) {
25526
- return jsx(Item, _objectSpread$O(_objectSpread$O({}, props), {}, {
25527
- onClick: handleDelete,
25528
- children: "Delete"
25529
- }));
25560
+ return jsxs(Fragment, {
25561
+ children: [jsx(HighlightMenu, {
25562
+ onHighlight: highlightAtomWithColor
25563
+ }), jsx(Item, _objectSpread$O(_objectSpread$O({}, props), {}, {
25564
+ onClick: handleDelete,
25565
+ children: "Delete"
25566
+ }))]
25567
+ });
25530
25568
  }
25531
25569
  return jsxs(Fragment, {
25532
25570
  children: [jsx(Item, _objectSpread$O(_objectSpread$O({}, props), {}, {
@@ -25640,6 +25678,7 @@ var useBondSGroupAttach = function useBondSGroupAttach() {
25640
25678
  SGroupTool.sgroupDialog(editor, null);
25641
25679
  }, [getKetcherInstance]);
25642
25680
  var hidden = useCallback(function (_ref2) {
25681
+ var _struct$sgroups$get;
25643
25682
  var props = _ref2.props;
25644
25683
  var editor = getKetcherInstance().editor;
25645
25684
  var struct = editor.render.ctab;
@@ -25649,6 +25688,12 @@ var useBondSGroupAttach = function useBondSGroupAttach() {
25649
25688
  }
25650
25689
  var bond = struct.bonds.get(bondIds[0]);
25651
25690
  var attachedSGroups = bond.b.getAttachedSGroups(struct.molecule);
25691
+ var _attachedSGroups = _slicedToArray$1(attachedSGroups, 1),
25692
+ sgGroupId = _attachedSGroups[0];
25693
+ var sgroup = (_struct$sgroups$get = struct.sgroups.get(sgGroupId)) === null || _struct$sgroups$get === void 0 ? void 0 : _struct$sgroups$get.item;
25694
+ if (sgroup !== null && sgroup !== void 0 && sgroup.isSuperatomWithoutLabel) {
25695
+ return false;
25696
+ }
25652
25697
  return attachedSGroups.size > 0;
25653
25698
  }, [getKetcherInstance]);
25654
25699
  return [handler, hidden];
@@ -25676,8 +25721,17 @@ var useBondSGroupEdit = function useBondSGroupEdit() {
25676
25721
  return sGroupsRef.current.size > 1;
25677
25722
  }, [getKetcherInstance]);
25678
25723
  var hidden = useCallback(function () {
25724
+ var _struct$sgroups$get;
25725
+ var editor = getKetcherInstance().editor;
25726
+ var struct = editor.render.ctab;
25727
+ var _sGroupsRef$current = _slicedToArray$1(sGroupsRef.current, 1),
25728
+ sgGroupId = _sGroupsRef$current[0];
25729
+ var sgroup = (_struct$sgroups$get = struct.sgroups.get(sgGroupId)) === null || _struct$sgroups$get === void 0 ? void 0 : _struct$sgroups$get.item;
25730
+ if (sgroup !== null && sgroup !== void 0 && sgroup.isSuperatomWithoutLabel) {
25731
+ return true;
25732
+ }
25679
25733
  return sGroupsRef.current.size === 0;
25680
- }, []);
25734
+ }, [getKetcherInstance]);
25681
25735
  return [handler, disabled, hidden];
25682
25736
  };
25683
25737
 
@@ -25793,6 +25847,7 @@ var BondMenuItems = function BondMenuItems(props) {
25793
25847
  editor.highlights.create({
25794
25848
  atoms: [],
25795
25849
  bonds: bondIds,
25850
+ rgroupAttachmentPoints: [],
25796
25851
  color: color === '' ? 'transparent' : color
25797
25852
  });
25798
25853
  };
@@ -25983,12 +26038,14 @@ var SelectionMenuItems = function SelectionMenuItems(props) {
25983
26038
  atomStereoDisabled = _useAtomStereo2[1];
25984
26039
  var handleDelete = useDelete$1();
25985
26040
  var highlightBondWithColor = function highlightBondWithColor(color) {
25986
- var _props$propsFromTrigg, _props$propsFromTrigg2;
26041
+ var _props$propsFromTrigg, _props$propsFromTrigg2, _props$propsFromTrigg3;
25987
26042
  var bondIds = ((_props$propsFromTrigg = props.propsFromTrigger) === null || _props$propsFromTrigg === void 0 ? void 0 : _props$propsFromTrigg.bondIds) || [];
25988
26043
  var atomIds = ((_props$propsFromTrigg2 = props.propsFromTrigger) === null || _props$propsFromTrigg2 === void 0 ? void 0 : _props$propsFromTrigg2.atomIds) || [];
26044
+ var rgroupAttachmentPoints = ((_props$propsFromTrigg3 = props.propsFromTrigger) === null || _props$propsFromTrigg3 === void 0 ? void 0 : _props$propsFromTrigg3.rgroupAttachmentPoints) || [];
25989
26045
  editor.highlights.create({
25990
26046
  atoms: atomIds,
25991
26047
  bonds: bondIds,
26048
+ rgroupAttachmentPoints: rgroupAttachmentPoints,
25992
26049
  color: color === '' ? 'transparent' : color
25993
26050
  });
25994
26051
  };
@@ -26110,19 +26167,34 @@ var useRGroupAttachmentPointEdit = function useRGroupAttachmentPointEdit() {
26110
26167
  function ownKeys$K(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; }
26111
26168
  function _objectSpread$K(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$K(Object(t), !0).forEach(function (r) { _defineProperty$1(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$K(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
26112
26169
  var RGroupAttachmentPointMenuItems = function RGroupAttachmentPointMenuItems(props) {
26170
+ var _useAppContext = useAppContext(),
26171
+ getKetcherInstance = _useAppContext.getKetcherInstance;
26113
26172
  var handleRemove = useDelete();
26114
26173
  var _useRGroupAttachmentP = useRGroupAttachmentPointEdit(),
26115
26174
  _useRGroupAttachmentP2 = _slicedToArray$1(_useRGroupAttachmentP, 3),
26116
26175
  handleEditRGroupAttachmentPoint = _useRGroupAttachmentP2[0],
26117
26176
  rgroupAttachmentPointDisabled = _useRGroupAttachmentP2[1],
26118
26177
  rgroupAttachmentPointHidden = _useRGroupAttachmentP2[2];
26178
+ var editor = getKetcherInstance().editor;
26179
+ var highlight = function highlight(color) {
26180
+ var _props$propsFromTrigg;
26181
+ var rgroupAttachmentPoints = ((_props$propsFromTrigg = props.propsFromTrigger) === null || _props$propsFromTrigg === void 0 ? void 0 : _props$propsFromTrigg.rgroupAttachmentPoints) || [];
26182
+ editor.highlights.create({
26183
+ rgroupAttachmentPoints: rgroupAttachmentPoints,
26184
+ atoms: [],
26185
+ bonds: [],
26186
+ color: color === '' ? 'transparent' : color
26187
+ });
26188
+ };
26119
26189
  return jsxs(Fragment, {
26120
26190
  children: [jsx(Item, _objectSpread$K(_objectSpread$K({}, props), {}, {
26121
26191
  disabled: rgroupAttachmentPointDisabled,
26122
26192
  hidden: rgroupAttachmentPointHidden,
26123
26193
  onClick: handleEditRGroupAttachmentPoint,
26124
26194
  children: "Edit..."
26125
- })), jsx(Item, _objectSpread$K(_objectSpread$K({}, props), {}, {
26195
+ })), jsx(HighlightMenu, {
26196
+ onHighlight: highlight
26197
+ }), jsx(Item, _objectSpread$K(_objectSpread$K({}, props), {}, {
26126
26198
  onClick: handleRemove,
26127
26199
  children: "Remove"
26128
26200
  }))]
@@ -26226,10 +26298,14 @@ var useMonomerExpansionHandlers = function useMonomerExpansionHandlers() {
26226
26298
  function ownKeys$I(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; }
26227
26299
  function _objectSpread$I(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$I(Object(t), !0).forEach(function (r) { _defineProperty$1(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$I(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
26228
26300
  var MacromoleculeMenuItems = function MacromoleculeMenuItems(props) {
26301
+ var _props$propsFromTrigg;
26229
26302
  var _useMonomerExpansionH = useMonomerExpansionHandlers(),
26230
26303
  _useMonomerExpansionH2 = _slicedToArray$1(_useMonomerExpansionH, 2),
26231
26304
  action = _useMonomerExpansionH2[0],
26232
26305
  _hidden = _useMonomerExpansionH2[1];
26306
+ var multipleMonomersSelected = (props === null || props === void 0 || (_props$propsFromTrigg = props.propsFromTrigger) === null || _props$propsFromTrigg === void 0 ? void 0 : _props$propsFromTrigg.functionalGroups) && props.propsFromTrigger.functionalGroups.length > 1;
26307
+ var expandText = multipleMonomersSelected ? 'Expand monomers' : 'Expand monomer';
26308
+ var collapseText = multipleMonomersSelected ? 'Collapse monomers' : 'Collapse monomer';
26233
26309
  return jsxs(Fragment, {
26234
26310
  children: [jsx(Item, _objectSpread$I(_objectSpread$I({}, props), {}, {
26235
26311
  hidden: function hidden(params) {
@@ -26238,7 +26314,7 @@ var MacromoleculeMenuItems = function MacromoleculeMenuItems(props) {
26238
26314
  onClick: function onClick(params) {
26239
26315
  return action(params, true);
26240
26316
  },
26241
- children: "Expand monomer"
26317
+ children: expandText
26242
26318
  })), jsx(Item, _objectSpread$I(_objectSpread$I({}, props), {}, {
26243
26319
  hidden: function hidden(params) {
26244
26320
  return _hidden(params, false);
@@ -26246,7 +26322,7 @@ var MacromoleculeMenuItems = function MacromoleculeMenuItems(props) {
26246
26322
  onClick: function onClick(params) {
26247
26323
  return action(params, false);
26248
26324
  },
26249
- children: "Collapse monomer"
26325
+ children: collapseText
26250
26326
  }))]
26251
26327
  });
26252
26328
  };
@@ -26409,24 +26485,46 @@ function getMenuPropsForClosestItem(editor, closestItem) {
26409
26485
  case 'bonds':
26410
26486
  {
26411
26487
  var functionalGroup = FunctionalGroup.findFunctionalGroupByBond(struct, struct.functionalGroups, closestItem.id, true);
26412
- return functionalGroup === null || functionalGroup !== null && functionalGroup !== void 0 && functionalGroup.relatedSGroup.isSuperatomWithoutLabel ? {
26413
- id: CONTEXT_MENU_ID.FOR_BONDS,
26414
- bondIds: [closestItem.id]
26415
- } : {
26416
- id: CONTEXT_MENU_ID.FOR_FUNCTIONAL_GROUPS,
26417
- functionalGroups: [functionalGroup]
26418
- };
26488
+ var noFunctionalGroup = functionalGroup === null || (functionalGroup === null || functionalGroup === void 0 ? void 0 : functionalGroup.relatedSGroup.isSuperatomWithoutLabel);
26489
+ var isMonomer = (functionalGroup === null || functionalGroup === void 0 ? void 0 : functionalGroup.relatedSGroup) instanceof MonomerMicromolecule;
26490
+ if (noFunctionalGroup) {
26491
+ return {
26492
+ id: CONTEXT_MENU_ID.FOR_BONDS,
26493
+ bondIds: [closestItem.id]
26494
+ };
26495
+ } else if (isMonomer) {
26496
+ return {
26497
+ id: CONTEXT_MENU_ID.FOR_MACROMOLECULE,
26498
+ functionalGroups: [functionalGroup]
26499
+ };
26500
+ } else {
26501
+ return {
26502
+ id: CONTEXT_MENU_ID.FOR_FUNCTIONAL_GROUPS,
26503
+ functionalGroups: [functionalGroup]
26504
+ };
26505
+ }
26419
26506
  }
26420
26507
  case 'atoms':
26421
26508
  {
26422
26509
  var _functionalGroup = FunctionalGroup.findFunctionalGroupByAtom(struct.functionalGroups, closestItem.id, true);
26423
- return _functionalGroup === null || _functionalGroup !== null && _functionalGroup !== void 0 && _functionalGroup.relatedSGroup.isSuperatomWithoutLabel ? {
26424
- id: CONTEXT_MENU_ID.FOR_ATOMS,
26425
- atomIds: [closestItem.id]
26426
- } : {
26427
- id: CONTEXT_MENU_ID.FOR_FUNCTIONAL_GROUPS,
26428
- functionalGroups: [_functionalGroup]
26429
- };
26510
+ var _noFunctionalGroup = _functionalGroup === null || (_functionalGroup === null || _functionalGroup === void 0 ? void 0 : _functionalGroup.relatedSGroup.isSuperatomWithoutLabel);
26511
+ var _isMonomer = (_functionalGroup === null || _functionalGroup === void 0 ? void 0 : _functionalGroup.relatedSGroup) instanceof MonomerMicromolecule;
26512
+ if (_noFunctionalGroup) {
26513
+ return {
26514
+ id: CONTEXT_MENU_ID.FOR_ATOMS,
26515
+ atomIds: [closestItem.id]
26516
+ };
26517
+ } else if (_isMonomer) {
26518
+ return {
26519
+ id: CONTEXT_MENU_ID.FOR_MACROMOLECULE,
26520
+ functionalGroups: [_functionalGroup]
26521
+ };
26522
+ } else {
26523
+ return {
26524
+ id: CONTEXT_MENU_ID.FOR_FUNCTIONAL_GROUPS,
26525
+ functionalGroups: [_functionalGroup]
26526
+ };
26527
+ }
26430
26528
  }
26431
26529
  case 'sgroups':
26432
26530
  case 'functionalGroups':
@@ -26507,7 +26605,8 @@ function getMenuPropsForSelection(selection, selectedFunctionalGroups) {
26507
26605
  return {
26508
26606
  id: CONTEXT_MENU_ID.FOR_SELECTION,
26509
26607
  bondIds: bonds,
26510
- atomIds: atoms
26608
+ atomIds: atoms,
26609
+ rgroupAttachmentPoints: rgroupAttachmentPoints
26511
26610
  };
26512
26611
  }
26513
26612
  }
@@ -26808,16 +26907,17 @@ var InfoPanel = function InfoPanel(props) {
26808
26907
  return isAmbiguousMonomer ? jsx(AmbiguousMonomerPreview, {
26809
26908
  preview: {
26810
26909
  type: PreviewType.AmbiguousMonomer,
26811
- monomer: sGroup.monomer.variantMonomerItem,
26812
- style: {
26813
- left: "".concat(clientX - 50, "px"),
26814
- top: calculateAmbiguousMonomerPreviewTop(sGroup.monomer.variantMonomerItem)({
26815
- left: clientX - 50,
26816
- top: clientY - 65,
26817
- bottom: clientY - 25
26818
- }),
26819
- transform: 'translate(-50%, 0)'
26820
- }
26910
+ monomer: sGroup.monomer.variantMonomerItem
26911
+ },
26912
+ style: {
26913
+ position: 'absolute',
26914
+ left: "".concat(clientX - 50, "px"),
26915
+ top: calculateAmbiguousMonomerPreviewTop(sGroup.monomer.variantMonomerItem)({
26916
+ left: clientX - 50,
26917
+ top: clientY - 65,
26918
+ bottom: clientY - 25
26919
+ }),
26920
+ transform: 'translate(-50%, 0)'
26821
26921
  }
26822
26922
  }) : showMolecule ? jsx("div", {
26823
26923
  style: {
@@ -34784,8 +34884,8 @@ var KetcherBuilder = function () {
34784
34884
  cleanup = initApp(element, appRoot, staticResourcesUrl, {
34785
34885
  buttons: buttons || {},
34786
34886
  errorHandler: errorHandler || null,
34787
- version: "2.26.0-rc.6" ,
34788
- buildDate: "2024-10-25T09:50:21" ,
34887
+ version: "2.27.0-rc.1" ,
34888
+ buildDate: "2024-11-05T14:46:09" ,
34789
34889
  buildNumber: '',
34790
34890
  customButtons: customButtons || []
34791
34891
  }, structService, resolve, togglerComponent);