ketcher-react 3.8.0-rc.2 → 3.8.0-rc.4

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.
@@ -5947,6 +5947,8 @@ var PresetPosition;
5947
5947
  PresetPosition["ChainEnd"] = "chainEnd";
5948
5948
  })(PresetPosition || (PresetPosition = {}));
5949
5949
 
5950
+ var SELECT_SUBMENU_ID = 'select-submenu';
5951
+
5950
5952
  function ownKeys$r(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; }
5951
5953
  function _objectSpread$r(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$r(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$r(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
5952
5954
  var MolarMeasurementUnit;
@@ -5977,11 +5979,12 @@ var initialState$3 = {
5977
5979
  unipositiveIonsValue: 140,
5978
5980
  oligonucleotidesValue: 200,
5979
5981
  app: {
5980
- buildDate: "2025-09-05T18:51:37" ,
5982
+ buildDate: "2025-09-17T17:05:47" ,
5981
5983
  indigoVersion: process.env.INDIGO_VERSION || '',
5982
5984
  indigoMachine: process.env.INDIGO_MACHINE || '',
5983
- version: "3.8.0-rc.2"
5984
- }
5985
+ version: "3.8.0-rc.4"
5986
+ },
5987
+ selectedMenuGroupItems: {}
5985
5988
  };
5986
5989
  var editorSlice = createSlice({
5987
5990
  name: 'editor',
@@ -6056,6 +6059,9 @@ var editorSlice = createSlice({
6056
6059
  },
6057
6060
  setAppMeta: function setAppMeta(state, action) {
6058
6061
  state.app = action.payload;
6062
+ },
6063
+ setSelectedMenuGroupItem: function setSelectedMenuGroupItem(state, action) {
6064
+ state.selectedMenuGroupItems = _objectSpread$r(_objectSpread$r({}, state.selectedMenuGroupItems), {}, _defineProperty__default["default"]({}, action.payload.groupName, action.payload.activeItemName));
6059
6065
  }
6060
6066
  }
6061
6067
  });
@@ -6078,7 +6084,8 @@ var _editorSlice$actions = editorSlice.actions;
6078
6084
  setEditorLineLength = _editorSlice$actions.setEditorLineLength,
6079
6085
  setUnipositiveIonsValue = _editorSlice$actions.setUnipositiveIonsValue,
6080
6086
  setOligonucleotidesValue = _editorSlice$actions.setOligonucleotidesValue,
6081
- setAppMeta = _editorSlice$actions.setAppMeta;
6087
+ setAppMeta = _editorSlice$actions.setAppMeta,
6088
+ setSelectedMenuGroupItem = _editorSlice$actions.setSelectedMenuGroupItem;
6082
6089
  var selectShowPreview = function selectShowPreview(state) {
6083
6090
  return state.editor.preview;
6084
6091
  };
@@ -6137,6 +6144,14 @@ var selectEditorLineLength = function selectEditorLineLength(state) {
6137
6144
  var selectAppMeta = function selectAppMeta(state) {
6138
6145
  return state.editor.app;
6139
6146
  };
6147
+ var selectSelectedMenuGroupItem = function selectSelectedMenuGroupItem(groupItemName) {
6148
+ return function (state) {
6149
+ return state.editor.selectedMenuGroupItems[groupItemName];
6150
+ };
6151
+ };
6152
+ var selectLastSelectedSelectionMenuItem = function selectLastSelectedSelectionMenuItem(state) {
6153
+ return state.editor.selectedMenuGroupItems[SELECT_SUBMENU_ID] || 'select-rectangle';
6154
+ };
6140
6155
  var editorReducer = editorSlice.reducer;
6141
6156
 
6142
6157
  var MONOMER_LIBRARY_FAVORITES = 'FAVORITES';
@@ -8349,8 +8364,9 @@ var useLibraryItemDrag = function useLibraryItemDrag(item, itemRef) {
8349
8364
  var cardMouseOverHandler = function cardMouseOverHandler(editor, libraryItem, setAutochainErrorMessage) {
8350
8365
  setAutochainErrorMessage('');
8351
8366
  var _editor$getDataForAut = editor.getDataForAutochain(),
8352
- selectedMonomersWithFreeR2 = _editor$getDataForAut.selectedMonomersWithFreeR2;
8353
- if (selectedMonomersWithFreeR2.length > 1) {
8367
+ selectedMonomersWithFreeR2 = _editor$getDataForAut.selectedMonomersWithFreeR2,
8368
+ selectedMonomers = _editor$getDataForAut.selectedMonomers;
8369
+ if (selectedMonomers.length > 0 && selectedMonomersWithFreeR2.length !== 1) {
8354
8370
  setAutochainErrorMessage('Select a monomer or a chain that has one R2 available.');
8355
8371
  return;
8356
8372
  }
@@ -14415,7 +14431,9 @@ var SubMenu = function SubMenu(_ref) {
14415
14431
  _ref$layoutModeButton = _ref.layoutModeButton,
14416
14432
  layoutModeButton = _ref$layoutModeButton === void 0 ? false : _ref$layoutModeButton,
14417
14433
  generalTitle = _ref.generalTitle,
14418
- activeItem = _ref.activeItem;
14434
+ activeItem = _ref.activeItem,
14435
+ subMenuId = _ref.subMenuId;
14436
+ var dispatch = useAppDispatch();
14419
14437
  var ref = React.useRef(null);
14420
14438
  var _useState = React.useState(false),
14421
14439
  _useState2 = _slicedToArray__default["default"](_useState, 2),
@@ -14426,6 +14444,9 @@ var SubMenu = function SubMenu(_ref) {
14426
14444
  var _usePortalStyle = ketcherReact.usePortalStyle([ref, open, vertical, ketcherReact.KETCHER_MACROMOLECULES_ROOT_NODE_SELECTOR]),
14427
14445
  _usePortalStyle2 = _slicedToArray__default["default"](_usePortalStyle, 1),
14428
14446
  portalStyle = _usePortalStyle2[0];
14447
+ var selectedMenuGroupItem = useAppSelector(
14448
+ selectSelectedMenuGroupItem(subMenuId));
14449
+ var lastActiveOption = subMenuId ? selectedMenuGroupItem : null;
14429
14450
  var handleDropDownClick = function handleDropDownClick() {
14430
14451
  if (disabled) return;
14431
14452
  setOpen(function (prev) {
@@ -14443,10 +14464,17 @@ var SubMenu = function SubMenu(_ref) {
14443
14464
  }).filter(function (item) {
14444
14465
  return item;
14445
14466
  });
14446
- var activeOption = options.filter(function (itemKey) {
14467
+ var activeOptions = options.filter(function (itemKey) {
14447
14468
  return isActive(itemKey);
14448
14469
  });
14449
- var visibleItemId = activeItem !== null && activeItem !== void 0 ? activeItem : activeOption.length ? activeOption[0] : options[0];
14470
+ var activeOption = activeOptions[0];
14471
+ if (subMenuId && activeOption && activeOption !== lastActiveOption) {
14472
+ dispatch(setSelectedMenuGroupItem({
14473
+ groupName: subMenuId,
14474
+ activeItemName: activeOption
14475
+ }));
14476
+ }
14477
+ var visibleItemId = activeItem !== null && activeItem !== void 0 ? activeItem : activeOption || lastActiveOption || options[0];
14450
14478
  var visibleItem = subComponents.find(function (option) {
14451
14479
  return option.props.itemId === visibleItemId;
14452
14480
  });
@@ -17215,6 +17243,7 @@ function TopMenuComponent() {
17215
17243
  setAntisenseActiveOption = _useState6[1];
17216
17244
  var activeMenuItems = [activeTool];
17217
17245
  var isDisabled = isSequenceEditInRNABuilderMode;
17246
+ var lastSelectedSelectionMenuItem = useAppSelector(selectLastSelectedSelectionMenuItem);
17218
17247
  React.useEffect(function () {
17219
17248
  var selectEntitiesHandler = function selectEntitiesHandler(selectedEntities) {
17220
17249
  setSelectedEntities(selectedEntities);
@@ -17242,8 +17271,8 @@ function TopMenuComponent() {
17242
17271
  editor === null || editor === void 0 || editor.events.selectHistory.dispatch(name);
17243
17272
  } else if (name === 'clear') {
17244
17273
  editor === null || editor === void 0 || editor.events.selectTool.dispatch([name]);
17245
- dispatch(selectTool('select-rectangle'));
17246
- editor === null || editor === void 0 || editor.events.selectTool.dispatch(['select-rectangle']);
17274
+ dispatch(selectTool(lastSelectedSelectionMenuItem));
17275
+ editor === null || editor === void 0 || editor.events.selectTool.dispatch([lastSelectedSelectionMenuItem]);
17247
17276
  if (isSequenceEditInRNABuilderMode) resetRnaBuilderAfterSequenceUpdate(dispatch, editor);
17248
17277
  } else if (name === 'antisenseRnaStrand' || name === 'antisenseDnaStrand') {
17249
17278
  editor === null || editor === void 0 || editor.events.createAntisenseChain.dispatch(name === 'antisenseDnaStrand');
@@ -17336,18 +17365,19 @@ function LeftMenuComponent() {
17336
17365
  }), jsxRuntime.jsx(Menu.Group, {
17337
17366
  children: jsxRuntime.jsxs(Menu.Submenu, {
17338
17367
  testId: "select-drop-down-button",
17368
+ subMenuId: SELECT_SUBMENU_ID,
17339
17369
  needOpenByMenuItemClick: false,
17340
17370
  children: [jsxRuntime.jsx(Menu.Item, {
17341
17371
  itemId: "select-rectangle",
17342
- title: "Select Rectangle (".concat(hotkeysShortcuts.exit, ")"),
17372
+ title: "Select Rectangle (".concat(hotkeysShortcuts.switchSelectTool, ")"),
17343
17373
  testId: "select-rectangle"
17344
17374
  }), jsxRuntime.jsx(Menu.Item, {
17345
17375
  itemId: "select-lasso",
17346
- title: "Lasso selection (".concat(hotkeysShortcuts.exit, ")"),
17376
+ title: "Lasso selection (".concat(hotkeysShortcuts.switchSelectTool, ")"),
17347
17377
  testId: "select-lasso"
17348
17378
  }), jsxRuntime.jsx(Menu.Item, {
17349
17379
  itemId: "select-fragment",
17350
- title: "Fragment selection (".concat(hotkeysShortcuts.exit, ")"),
17380
+ title: "Fragment selection (".concat(hotkeysShortcuts.switchSelectTool, ")"),
17351
17381
  testId: "select-fragment"
17352
17382
  })]
17353
17383
  })
@@ -17635,6 +17665,7 @@ var EditorEvents = function EditorEvents() {
17635
17665
  var dispatch = useAppDispatch();
17636
17666
  var presets = useAppSelector(selectAllPresets);
17637
17667
  var hasAtLeastOneAntisense = useAppSelector(hasAntisenseChains);
17668
+ var lastSelectedSelectionMenuItem = useAppSelector(selectLastSelectedSelectionMenuItem);
17638
17669
  var handleMonomersLibraryUpdate = React.useCallback(function () {
17639
17670
  dispatch(loadMonomerLibrary(editor === null || editor === void 0 ? void 0 : editor.monomersLibrary));
17640
17671
  }, [editor]);
@@ -17644,6 +17675,18 @@ var EditorEvents = function EditorEvents() {
17644
17675
  editor === null || editor === void 0 || editor.events.updateMonomersLibrary.remove(handleMonomersLibraryUpdate);
17645
17676
  };
17646
17677
  }, [editor]);
17678
+ React.useEffect(function () {
17679
+ var onSelectSelectionTool = function onSelectSelectionTool() {
17680
+ editor === null || editor === void 0 || editor.events.selectTool.dispatch([lastSelectedSelectionMenuItem]);
17681
+ dispatch(selectTool(lastSelectedSelectionMenuItem));
17682
+ };
17683
+ if (editor) {
17684
+ editor.events.selectSelectionTool.add(onSelectSelectionTool);
17685
+ }
17686
+ return function () {
17687
+ editor === null || editor === void 0 || editor.events.selectSelectionTool.remove(onSelectSelectionTool);
17688
+ };
17689
+ }, [dispatch, editor, lastSelectedSelectionMenuItem]);
17647
17690
  React.useEffect(function () {
17648
17691
  var handler = function handler(_ref) {
17649
17692
  var _ref2 = _slicedToArray__default["default"](_ref, 1),
@@ -17817,6 +17860,8 @@ var EditorEvents = function EditorEvents() {
17817
17860
  React.useEffect(function () {
17818
17861
  editor === null || editor === void 0 || editor.events.mouseOverMonomer.add(handleOpenPreview);
17819
17862
  editor === null || editor === void 0 || editor.events.mouseLeaveMonomer.add(handleClosePreview);
17863
+ editor === null || editor === void 0 || editor.events.mouseLeaveAttachmentPoint.add(handleClosePreview);
17864
+ editor === null || editor === void 0 || editor.events.mouseDownAttachmentPoint.add(handleClosePreview);
17820
17865
  editor === null || editor === void 0 || editor.events.mouseOverSequenceItem.add(handleOpenPreview);
17821
17866
  editor === null || editor === void 0 || editor.events.mouseLeaveSequenceItem.add(handleClosePreview);
17822
17867
  editor === null || editor === void 0 || editor.events.mouseOverPolymerBond.add(handleOpenPreview);
@@ -17829,17 +17874,20 @@ var EditorEvents = function EditorEvents() {
17829
17874
  }
17830
17875
  };
17831
17876
  editor === null || editor === void 0 || editor.events.mouseOnMoveMonomer.add(onMoveHandler);
17877
+ editor === null || editor === void 0 || editor.events.mouseMoveAttachmentPoint.add(onMoveHandler);
17832
17878
  editor === null || editor === void 0 || editor.events.mouseOnMoveSequenceItem.add(onMoveHandler);
17833
17879
  editor === null || editor === void 0 || editor.events.mouseOnMovePolymerBond.add(onMoveHandler);
17834
17880
  window.addEventListener('hidePreview', handleClosePreview);
17835
17881
  return function () {
17836
17882
  editor === null || editor === void 0 || editor.events.mouseOverMonomer.remove(handleOpenPreview);
17837
17883
  editor === null || editor === void 0 || editor.events.mouseLeaveMonomer.remove(handleClosePreview);
17884
+ editor === null || editor === void 0 || editor.events.mouseLeaveAttachmentPoint.remove(handleClosePreview);
17838
17885
  editor === null || editor === void 0 || editor.events.mouseOverSequenceItem.remove(handleOpenPreview);
17839
17886
  editor === null || editor === void 0 || editor.events.mouseLeaveSequenceItem.remove(handleClosePreview);
17840
17887
  editor === null || editor === void 0 || editor.events.mouseOverPolymerBond.remove(handleOpenPreview);
17841
17888
  editor === null || editor === void 0 || editor.events.mouseLeavePolymerBond.remove(handleClosePreview);
17842
17889
  editor === null || editor === void 0 || editor.events.mouseOnMoveMonomer.remove(onMoveHandler);
17890
+ editor === null || editor === void 0 || editor.events.mouseMoveAttachmentPoint.remove(onMoveHandler);
17843
17891
  editor === null || editor === void 0 || editor.events.mouseOnMoveSequenceItem.remove(onMoveHandler);
17844
17892
  editor === null || editor === void 0 || editor.events.mouseOnMovePolymerBond.remove(onMoveHandler);
17845
17893
  window.removeEventListener('hidePreview', handleClosePreview);
@@ -19357,4 +19405,4 @@ function Editor(_ref2) {
19357
19405
  }
19358
19406
 
19359
19407
  exports["default"] = EditorContainer;
19360
- //# sourceMappingURL=index.modern-30f7e490.js.map
19408
+ //# sourceMappingURL=index.modern-7604afae.js.map