ketcher-react 2.6.3 → 2.7.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.
Files changed (29) hide show
  1. package/dist/index.css +1 -1
  2. package/dist/index.css.map +1 -1
  3. package/dist/index.js +966 -505
  4. package/dist/index.js.map +1 -1
  5. package/dist/index.modern.js +967 -506
  6. package/dist/index.modern.js.map +1 -1
  7. package/dist/script/editor/Editor.d.ts +3 -1
  8. package/dist/script/editor/tool/atom.d.ts +2 -0
  9. package/dist/script/editor/tool/select.d.ts +6 -0
  10. package/dist/script/ui/action/atoms.d.ts +9 -0
  11. package/dist/script/ui/component/form/input.d.ts +2 -1
  12. package/dist/script/ui/component/structrender.d.ts +4 -1
  13. package/dist/script/ui/data/schema/sdata-schema.d.ts +1 -1
  14. package/dist/script/ui/dialog/template/TemplateDialog.d.ts +3 -11
  15. package/dist/script/ui/dialog/template/TemplateTable.d.ts +2 -2
  16. package/dist/script/ui/state/editor/index.d.ts +1 -0
  17. package/dist/script/ui/state/functionalGroups/index.d.ts +2 -0
  18. package/dist/script/ui/state/functionalGroups/selectors/index.d.ts +1 -0
  19. package/dist/script/ui/state/hotkeys.d.ts +19 -8
  20. package/dist/script/ui/state/modal/sdata.d.ts +1 -1
  21. package/dist/script/ui/state/options/index.d.ts +1 -0
  22. package/dist/script/ui/state/saltsAndSolvents/index.d.ts +23 -0
  23. package/dist/script/ui/state/saltsAndSolvents/selectors/index.d.ts +16 -0
  24. package/dist/script/ui/utils/index.d.ts +1 -1
  25. package/dist/script/ui/views/Editor.d.ts +1 -1
  26. package/dist/script/ui/views/components/StructEditor/InfoPanel.d.ts +29 -0
  27. package/dist/script/ui/views/components/StructEditor/StructEditor.d.ts +2 -0
  28. package/dist/script/ui/views/modal/components/document/Save/Save.d.ts +1 -1
  29. package/package.json +3 -2
package/dist/index.js CHANGED
@@ -52,6 +52,7 @@ var styled = require('@emotion/styled');
52
52
  var _taggedTemplateLiteral = require('@babel/runtime/helpers/taggedTemplateLiteral');
53
53
  var material = require('@mui/material');
54
54
  var KN = require('w3c-keyname');
55
+ var reactDeviceDetect = require('react-device-detect');
55
56
  var reactContextmenu = require('react-contextmenu');
56
57
  var _classPrivateFieldSet = require('@babel/runtime/helpers/classPrivateFieldSet');
57
58
  var _classPrivateFieldGet = require('@babel/runtime/helpers/classPrivateFieldGet');
@@ -173,9 +174,18 @@ var atomCuts = {
173
174
  P: 'p',
174
175
  F: 'f',
175
176
  Cl: 'Shift+c',
176
- Br: 'Shift+b',
177
+ Br: 'b',
177
178
  I: 'i',
178
- A: 'a'
179
+ A: 'a',
180
+ Q: 'q',
181
+ R: 'r',
182
+ K: 'k',
183
+ M: 'm',
184
+ Si: 'Shift+s',
185
+ Na: 'Shift+n',
186
+ X: 'x',
187
+ D: 'd',
188
+ B: 'Shift+b'
179
189
  };
180
190
  var atoms = Object.keys(atomCuts).reduce(function (res, label) {
181
191
  res["atom-".concat(label.toLowerCase())] = {
@@ -313,7 +323,7 @@ var debugObj = {
313
323
  }
314
324
  };
315
325
 
316
- var classes$N = {"cliparea":"cliparea-module_cliparea__GdPrN"};
326
+ var classes$O = {"cliparea":"cliparea-module_cliparea__GdPrN"};
317
327
 
318
328
  function _createSuper$c(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$c(); return function _createSuperInternal() { var Super = _getPrototypeOf__default["default"](Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf__default["default"](this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn__default["default"](this, result); }; }
319
329
  function _isNativeReflectConstruct$c() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
@@ -387,7 +397,7 @@ var ClipArea = function (_Component) {
387
397
  value: function render() {
388
398
  return jsxRuntime.jsx("textarea", {
389
399
  ref: this.textAreaRef,
390
- className: clsx__default["default"]('cliparea', classes$N.cliparea),
400
+ className: clsx__default["default"]('cliparea', classes$O.cliparea),
391
401
  contentEditable: true,
392
402
  autoFocus: true
393
403
  ,
@@ -447,8 +457,8 @@ function exec(action) {
447
457
  return enabled;
448
458
  }
449
459
 
450
- function ownKeys$12(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; }
451
- function _objectSpread$12(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$12(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$12(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
460
+ function ownKeys$15(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; }
461
+ function _objectSpread$15(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$15(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$15(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
452
462
  var editor = {
453
463
  resetToSelect: {
454
464
  title: 'Reset to Select Tool',
@@ -696,7 +706,7 @@ var optionsSchema = {
696
706
  title: 'Settings',
697
707
  type: 'object',
698
708
  required: [],
699
- properties: _objectSpread$12(_objectSpread$12(_objectSpread$12(_objectSpread$12(_objectSpread$12({}, editor), render), server), debug), miew)
709
+ properties: _objectSpread$15(_objectSpread$15(_objectSpread$15(_objectSpread$15(_objectSpread$15({}, editor), render), server), debug), miew)
700
710
  };
701
711
  function getDefaultOptions() {
702
712
  if (!optionsSchema.properties) return {};
@@ -757,13 +767,14 @@ var storage = {
757
767
  }
758
768
  };
759
769
 
760
- function ownKeys$11(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; }
761
- function _objectSpread$11(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$11(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$11(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
770
+ function ownKeys$14(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; }
771
+ function _objectSpread$14(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$14(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$14(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
762
772
  var initOptionsState = {
763
773
  app: {
764
774
  server: false,
765
775
  templates: false,
766
- functionalGroups: false
776
+ functionalGroups: false,
777
+ saltsAndSolvents: false
767
778
  },
768
779
  analyse: {
769
780
  values: null,
@@ -854,27 +865,27 @@ function optionsReducer() {
854
865
  var action = arguments.length > 1 ? arguments[1] : undefined;
855
866
  var type = action.type,
856
867
  data = action.data;
857
- if (type === 'APP_OPTIONS') return _objectSpread$11(_objectSpread$11({}, state), {}, {
858
- app: _objectSpread$11(_objectSpread$11({}, state.app), data)
868
+ if (type === 'APP_OPTIONS') return _objectSpread$14(_objectSpread$14({}, state), {}, {
869
+ app: _objectSpread$14(_objectSpread$14({}, state.app), data)
859
870
  });
860
- if (type === 'SAVE_SETTINGS') return _objectSpread$11(_objectSpread$11({}, state), {}, {
871
+ if (type === 'SAVE_SETTINGS') return _objectSpread$14(_objectSpread$14({}, state), {}, {
861
872
  settings: data
862
873
  });
863
- if (type === 'SAVE_CHECK_OPTS') return _objectSpread$11(_objectSpread$11({}, state), {}, {
874
+ if (type === 'SAVE_CHECK_OPTS') return _objectSpread$14(_objectSpread$14({}, state), {}, {
864
875
  check: data
865
876
  });
866
- if (type === 'CHANGE_ANALYSE') return _objectSpread$11(_objectSpread$11({}, state), {}, {
867
- analyse: _objectSpread$11(_objectSpread$11(_objectSpread$11({}, state.analyse), data), {}, {
877
+ if (type === 'CHANGE_ANALYSE') return _objectSpread$14(_objectSpread$14({}, state), {}, {
878
+ analyse: _objectSpread$14(_objectSpread$14(_objectSpread$14({}, state.analyse), data), {}, {
868
879
  loading: false
869
880
  })
870
881
  });
871
- if (type === 'ANALYSE_LOADING') return _objectSpread$11(_objectSpread$11({}, state), {}, {
872
- analyse: _objectSpread$11(_objectSpread$11({}, state.analyse), {}, {
882
+ if (type === 'ANALYSE_LOADING') return _objectSpread$14(_objectSpread$14({}, state), {}, {
883
+ analyse: _objectSpread$14(_objectSpread$14({}, state.analyse), {}, {
873
884
  loading: true
874
885
  })
875
886
  });
876
- if (recognizeActions.includes(type)) return _objectSpread$11(_objectSpread$11({}, state), {}, {
877
- recognize: _objectSpread$11(_objectSpread$11({}, state.recognize), data)
887
+ if (recognizeActions.includes(type)) return _objectSpread$14(_objectSpread$14({}, state), {}, {
888
+ recognize: _objectSpread$14(_objectSpread$14({}, state.recognize), data)
878
889
  });
879
890
  return state;
880
891
  }
@@ -1130,7 +1141,7 @@ var sdataCustomSchema = {
1130
1141
  },
1131
1142
  context: {
1132
1143
  title: 'Context',
1133
- "enum": ['Fragment', 'Multifragment', 'Bond', 'Atom', 'Group'],
1144
+ "enum": ['Atom', 'Bond', 'Fragment', 'Group', 'Multifragment'],
1134
1145
  "default": 'Fragment'
1135
1146
  },
1136
1147
  fieldName: {
@@ -1164,18 +1175,26 @@ var sdataSchema = Object.keys(sData).reduce(function (acc, title) {
1164
1175
  function firstKeyOf(obj) {
1165
1176
  return Object.keys(obj)[0];
1166
1177
  }
1167
- function getSdataDefault(context, fieldName) {
1168
- if (!context && !fieldName) return firstKeyOf(sdataSchema);
1169
- if (!fieldName) return firstKeyOf(sdataSchema[context]);
1170
- return sdataSchema[context][fieldName] ? sdataSchema[context][fieldName].properties.fieldValue["default"] : '';
1171
- }
1172
-
1173
- function ownKeys$10(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; }
1174
- function _objectSpread$10(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$10(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$10(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
1175
- var initSdata = function initSdata() {
1176
- var context = getSdataDefault();
1177
- var fieldName = getSdataDefault(context);
1178
- var fieldValue = getSdataDefault(context, fieldName);
1178
+ function getSdataDefault() {
1179
+ var schema = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : sdataSchema;
1180
+ var context = arguments.length > 1 ? arguments[1] : undefined;
1181
+ var fieldName = arguments.length > 2 ? arguments[2] : undefined;
1182
+ if (schema.key === 'Custom') {
1183
+ var _schema$properties$co;
1184
+ return (_schema$properties$co = schema.properties[context]) === null || _schema$properties$co === void 0 ? void 0 : _schema$properties$co["default"];
1185
+ }
1186
+ if (!context && !fieldName) return firstKeyOf(schema);
1187
+ if (!fieldName) return firstKeyOf(schema[context]);
1188
+ return schema[context][fieldName] ? schema[context][fieldName].properties.fieldValue["default"] : '';
1189
+ }
1190
+
1191
+ function ownKeys$13(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; }
1192
+ function _objectSpread$13(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$13(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$13(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
1193
+ var initSdata = function initSdata(schema) {
1194
+ var isCustomShema = schema.key === 'Custom';
1195
+ var context = isCustomShema ? getSdataDefault(sdataCustomSchema, 'context') : getSdataDefault(sdataSchema);
1196
+ var fieldName = isCustomShema ? getSdataDefault(sdataCustomSchema, 'fieldName') : getSdataDefault(sdataSchema, context);
1197
+ var fieldValue = isCustomShema ? getSdataDefault(sdataCustomSchema, 'fieldValue') : getSdataDefault(sdataSchema, context, fieldName);
1179
1198
  var radiobuttons = 'Absolute';
1180
1199
  return {
1181
1200
  errors: {},
@@ -1191,7 +1210,7 @@ var initSdata = function initSdata() {
1191
1210
  };
1192
1211
  function sdataReducer(state, action) {
1193
1212
  if (action.data.result.init) {
1194
- return correctErrors(_objectSpread$10(_objectSpread$10({}, state), {}, {
1213
+ return correctErrors(_objectSpread$13(_objectSpread$13({}, state), {}, {
1195
1214
  result: Object.assign({}, state.result, action.data.result)
1196
1215
  }), action.data);
1197
1216
  }
@@ -1199,7 +1218,7 @@ function sdataReducer(state, action) {
1199
1218
  var actionFieldName = action.data.result.fieldName;
1200
1219
  var newstate = null;
1201
1220
  if (actionContext !== state.result.context) newstate = onContextChange(state, action.data.result);else if (actionFieldName !== state.result.fieldName) newstate = onFieldNameChange(state, action.data.result);
1202
- newstate = newstate || _objectSpread$10(_objectSpread$10({}, state), {}, {
1221
+ newstate = newstate || _objectSpread$13(_objectSpread$13({}, state), {}, {
1203
1222
  result: Object.assign({}, state.result, action.data.result)
1204
1223
  });
1205
1224
  return correctErrors(newstate, action.data);
@@ -1219,11 +1238,11 @@ var correctErrors = function correctErrors(state, payload) {
1219
1238
  var onContextChange = function onContextChange(state, payload) {
1220
1239
  var context = payload.context,
1221
1240
  fieldValue = payload.fieldValue;
1222
- var fieldName = getSdataDefault(context);
1241
+ var fieldName = getSdataDefault(sdataCustomSchema, 'fieldName');
1223
1242
  var fValue = fieldValue;
1224
- if (fValue === state.result.fieldValue) fValue = getSdataDefault(context, fieldName);
1243
+ if (fValue === state.result.fieldValue) fValue = getSdataDefault(sdataCustomSchema, 'fieldValue');
1225
1244
  return {
1226
- result: _objectSpread$10(_objectSpread$10({}, payload), {}, {
1245
+ result: _objectSpread$13(_objectSpread$13({}, payload), {}, {
1227
1246
  context: context,
1228
1247
  fieldName: fieldName,
1229
1248
  fieldValue: fValue
@@ -1234,10 +1253,10 @@ var onFieldNameChange = function onFieldNameChange(state, payload) {
1234
1253
  var fieldName = payload.fieldName;
1235
1254
  var context = state.result.context;
1236
1255
  var fieldValue = payload.fieldValue;
1237
- if (sdataSchema[context][fieldName]) fieldValue = getSdataDefault(context, fieldName);
1256
+ if (sdataSchema[context][fieldName]) fieldValue = getSdataDefault(sdataSchema, context, fieldName);
1238
1257
  if (fieldValue === state.result.fieldValue && sdataSchema[context][state.result.fieldName]) fieldValue = '';
1239
1258
  return {
1240
- result: _objectSpread$10(_objectSpread$10({}, payload), {}, {
1259
+ result: _objectSpread$13(_objectSpread$13({}, payload), {}, {
1241
1260
  fieldName: fieldName,
1242
1261
  fieldValue: fieldValue
1243
1262
  })
@@ -1341,7 +1360,7 @@ var formsState = {
1341
1360
  valid: true,
1342
1361
  result: {}
1343
1362
  },
1344
- sdata: initSdata()
1363
+ sdata: initSdata(sdataCustomSchema)
1345
1364
  };
1346
1365
  function updateFormState(data) {
1347
1366
  return {
@@ -1375,8 +1394,8 @@ function formReducer(state, action, formName) {
1375
1394
  var INDIGO_VERIFICATION = 'INDIGO_VERIFICATION';
1376
1395
  var ANALYZING_FILE = 'ANALYZING_FILE';
1377
1396
 
1378
- function ownKeys$$(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; }
1379
- 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__default["default"](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; }
1397
+ function ownKeys$12(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; }
1398
+ function _objectSpread$12(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$12(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$12(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
1380
1399
  function indigoVerification(data) {
1381
1400
  return {
1382
1401
  type: INDIGO_VERIFICATION,
@@ -1389,25 +1408,25 @@ function setAnalyzingFile(data) {
1389
1408
  data: data
1390
1409
  };
1391
1410
  }
1392
- var initialState$1 = {
1411
+ var initialState$2 = {
1393
1412
  indigoVerification: false,
1394
1413
  isAnalyzingFile: false
1395
1414
  };
1396
1415
  function requestReducer () {
1397
- var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState$1;
1416
+ var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState$2;
1398
1417
  var action = arguments.length > 1 ? arguments[1] : undefined;
1399
1418
  var type = action.type,
1400
1419
  data = action.data;
1401
1420
  switch (type) {
1402
1421
  case INDIGO_VERIFICATION:
1403
1422
  {
1404
- return _objectSpread$$(_objectSpread$$({}, state), {}, {
1423
+ return _objectSpread$12(_objectSpread$12({}, state), {}, {
1405
1424
  indigoVerification: data
1406
1425
  });
1407
1426
  }
1408
1427
  case ANALYZING_FILE:
1409
1428
  {
1410
- return _objectSpread$$(_objectSpread$$({}, state), {}, {
1429
+ return _objectSpread$12(_objectSpread$12({}, state), {}, {
1411
1430
  isAnalyzingFile: data
1412
1431
  });
1413
1432
  }
@@ -1680,12 +1699,12 @@ var attachSchema = {
1680
1699
  };
1681
1700
 
1682
1701
  var _excluded$E = ["type", "radiobuttons"];
1683
- function ownKeys$_(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; }
1684
- 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__default["default"](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; }
1702
+ function ownKeys$11(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; }
1703
+ function _objectSpread$11(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$11(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$11(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
1685
1704
  var DefaultStereoGroupNumber = 1;
1686
1705
  function fromElement(selem) {
1687
1706
  if (selem.label === 'R#') {
1688
- return _objectSpread$_({
1707
+ return _objectSpread$11({
1689
1708
  type: 'rlabel',
1690
1709
  values: fromRlabel(selem.rglabel)
1691
1710
  }, selem);
@@ -1845,7 +1864,7 @@ function fromBond(sbond) {
1845
1864
  };
1846
1865
  }
1847
1866
  function toBond(bond) {
1848
- return _objectSpread$_({
1867
+ return _objectSpread$11({
1849
1868
  topology: bond.topology,
1850
1869
  reactingCenterStatus: bond.center
1851
1870
  }, toBondType(bond.type));
@@ -1935,7 +1954,7 @@ function toSgroup(sgroup) {
1935
1954
  var type = sgroup.type,
1936
1955
  radiobuttons = sgroup.radiobuttons,
1937
1956
  props = _objectWithoutProperties__default["default"](sgroup, _excluded$E);
1938
- var attrs = _objectSpread$_({}, props);
1957
+ var attrs = _objectSpread$11({}, props);
1939
1958
  var absolute = 'absolute';
1940
1959
  var attached = 'attached';
1941
1960
  switch (radiobuttons) {
@@ -2436,8 +2455,8 @@ var tools$1 = typeSchema$1["enum"].reduce(function (res, type, i) {
2436
2455
  }, toolActions);
2437
2456
 
2438
2457
  var _excluded$D = ["rescale", "fragment"];
2439
- function ownKeys$Z(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; }
2440
- function _objectSpread$Z(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$Z(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$Z(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
2458
+ function ownKeys$10(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; }
2459
+ function _objectSpread$10(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$10(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$10(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
2441
2460
  function onAction(action) {
2442
2461
  if (action && action.dialog) {
2443
2462
  return {
@@ -2484,7 +2503,7 @@ function load(struct, options) {
2484
2503
  server = state.server;
2485
2504
  errorHandler = editor.errorHandler;
2486
2505
  options = options || {};
2487
- options = _objectSpread$Z(_objectSpread$Z({}, options), {}, {
2506
+ options = _objectSpread$10(_objectSpread$10({}, options), {}, {
2488
2507
  'dearomatize-on-load': editor.options()['dearomatize-on-load']
2489
2508
  });
2490
2509
  dispatch(setAnalyzingFile(true));
@@ -2912,7 +2931,7 @@ var zoom = {
2912
2931
 
2913
2932
  var openHelpLink = function openHelpLink() {
2914
2933
  var _window$open;
2915
- return (_window$open = window.open("https://github.com/epam/ketcher/blob/".concat("v2.6.2\n", "/documentation/help.md#ketcher-overview"))) === null || _window$open === void 0 ? void 0 : _window$open.focus();
2934
+ return (_window$open = window.open("https://github.com/epam/ketcher/blob/".concat("v2.7.0-rc.2\n", "/documentation/help.md#ketcher-overview"))) === null || _window$open === void 0 ? void 0 : _window$open.focus();
2916
2935
  };
2917
2936
  var help = {
2918
2937
  help: {
@@ -2973,9 +2992,9 @@ var fullscreen = {
2973
2992
  }
2974
2993
  };
2975
2994
 
2976
- function ownKeys$Y(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; }
2977
- function _objectSpread$Y(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$Y(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$Y(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
2978
- var config = _objectSpread$Y(_objectSpread$Y(_objectSpread$Y(_objectSpread$Y(_objectSpread$Y(_objectSpread$Y(_objectSpread$Y(_objectSpread$Y(_objectSpread$Y({
2995
+ function ownKeys$$(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; }
2996
+ 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__default["default"](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; }
2997
+ var config = _objectSpread$$(_objectSpread$$(_objectSpread$$(_objectSpread$$(_objectSpread$$(_objectSpread$$(_objectSpread$$(_objectSpread$$(_objectSpread$$({
2979
2998
  clear: {
2980
2999
  shortcut: 'Mod+Delete',
2981
3000
  title: 'Clear Canvas',
@@ -5318,7 +5337,7 @@ function SvgTransformFlipH(props) {
5318
5337
  fill: "none",
5319
5338
  xmlns: "http://www.w3.org/2000/svg"
5320
5339
  }, props), _path$1c || (_path$1c = /*#__PURE__*/React__namespace.createElement("path", {
5321
- d: "M42 22H6v4h36v-4zM40 18.27h-4V12H12v6.27H8V11.6A3.6 3.6 0 0111.6 8h24.8a3.6 3.6 0 013.6 3.6v6.67zM40 36.016v.4a3.6 3.6 0 01-3.6 3.6H36v-4h4zM12 40.016h-.4a3.6 3.6 0 01-3.6-3.6v-.4h4v4zM12 34.55v-4.534H8v4.534h4zM40 34.55v-4.534h-4v4.534h4zM33.4 36.016h-4.535v4H33.4v-4zM26.267 36.016h-4.534v4h4.534v-4zM19.135 36.016H14.6v4h4.534v-4z",
5340
+ d: "M22.001 6v36h4V6h-4zM18.271 40h-6.67a3.6 3.6 0 01-3.6-3.6V11.6a3.6 3.6 0 013.6-3.6h6.67v4h-6.27v24h6.27v4zM36.001 8h.4a3.6 3.6 0 013.6 3.6v.4h-4V8zM40.001 36v.4a3.6 3.6 0 01-3.6 3.6h-.4v-4h4zM34.535 36h-4.534v4h4.534v-4zM34.535 8h-4.534v4h4.534V8zM36.001 14.598v4.534h4v-4.534h-4zM36.001 21.732v4.534h4v-4.534h-4zM36.001 28.866V33.4h4v-4.534h-4z",
5322
5341
  fill: "#231F20"
5323
5342
  })));
5324
5343
  }
@@ -5335,7 +5354,7 @@ function SvgTransformFlipV(props) {
5335
5354
  fill: "none",
5336
5355
  xmlns: "http://www.w3.org/2000/svg"
5337
5356
  }, props), _path$1b || (_path$1b = /*#__PURE__*/React__namespace.createElement("path", {
5338
- d: "M22.001 6v36h4V6h-4zM18.271 40h-6.67a3.6 3.6 0 01-3.6-3.6V11.6a3.6 3.6 0 013.6-3.6h6.67v4h-6.27v24h6.27v4zM36.001 8h.4a3.6 3.6 0 013.6 3.6v.4h-4V8zM40.001 36v.4a3.6 3.6 0 01-3.6 3.6h-.4v-4h4zM34.535 36h-4.534v4h4.534v-4zM34.535 8h-4.534v4h4.534V8zM36.001 14.598v4.534h4v-4.534h-4zM36.001 21.732v4.534h4v-4.534h-4zM36.001 28.866V33.4h4v-4.534h-4z",
5357
+ d: "M42 22H6v4h36v-4zM40 18.27h-4V12H12v6.27H8V11.6A3.6 3.6 0 0111.6 8h24.8a3.6 3.6 0 013.6 3.6v6.67zM40 36.016v.4a3.6 3.6 0 01-3.6 3.6H36v-4h4zM12 40.016h-.4a3.6 3.6 0 01-3.6-3.6v-.4h4v4zM12 34.55v-4.534H8v4.534h4zM40 34.55v-4.534h-4v4.534h4zM33.4 36.016h-4.535v4H33.4v-4zM26.267 36.016h-4.534v4h4.534v-4zM19.135 36.016H14.6v4h4.534v-4z",
5339
5358
  fill: "#231F20"
5340
5359
  })));
5341
5360
  }
@@ -6881,16 +6900,16 @@ function findIconByName(name) {
6881
6900
  }
6882
6901
 
6883
6902
  var _excluded$C = ["name"];
6884
- function ownKeys$X(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; }
6885
- function _objectSpread$X(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$X(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$X(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
6903
+ function ownKeys$_(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; }
6904
+ 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__default["default"](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; }
6886
6905
  function Icon(_ref) {
6887
6906
  var name = _ref.name,
6888
6907
  props = _objectWithoutProperties__default["default"](_ref, _excluded$C);
6889
6908
  var Component = findIconByName(name);
6890
- return jsxRuntime.jsx(Component, _objectSpread$X({}, props));
6909
+ return jsxRuntime.jsx(Component, _objectSpread$_({}, props));
6891
6910
  }
6892
6911
 
6893
- var classes$M = {"button-common-styles":"ActionButton-module_button-common-styles__y-hng","scrollbar":"ActionButton-module_scrollbar__lD3MH","button":"ActionButton-module_button__nfoWQ","selected":"ActionButton-module_selected__kPCxA"};
6912
+ var classes$N = {"button-common-styles":"ActionButton-module_button-common-styles__y-hng","scrollbar":"ActionButton-module_scrollbar__lD3MH","button":"ActionButton-module_button__nfoWQ","selected":"ActionButton-module_selected__kPCxA"};
6894
6913
 
6895
6914
  var isMac = /Mac/.test(navigator.platform);
6896
6915
  var shortcutAliasMap = {
@@ -6934,7 +6953,7 @@ var ActionButton = function ActionButton(props) {
6934
6953
  disabled: disabled,
6935
6954
  onClick: handleClick,
6936
6955
  title: shortcut ? "".concat(action === null || action === void 0 ? void 0 : action.title, " (").concat(shortcut, ")") : action === null || action === void 0 ? void 0 : action.title,
6937
- className: clsx__default["default"](classes$M.button, _defineProperty__default["default"]({}, classes$M.selected, selected), className),
6956
+ className: clsx__default["default"](classes$N.button, _defineProperty__default["default"]({}, classes$N.selected, selected), className),
6938
6957
  children: [jsxRuntime.jsx(Icon, {
6939
6958
  name: name
6940
6959
  }), jsxRuntime.jsx("kbd", {
@@ -7090,7 +7109,7 @@ var DefaultMultiTool = function DefaultMultiTool(props) {
7090
7109
  });
7091
7110
  };
7092
7111
 
7093
- var classes$L = {"group":"GroupedMultiTool-module_group__BJQAU"};
7112
+ var classes$M = {"group":"GroupedMultiTool-module_group__BJQAU"};
7094
7113
 
7095
7114
  var GroupedMultiTool = function GroupedMultiTool(props) {
7096
7115
  var groups = props.groups,
@@ -7105,7 +7124,7 @@ var GroupedMultiTool = function GroupedMultiTool(props) {
7105
7124
  return jsxRuntime.jsx(jsxRuntime.Fragment, {
7106
7125
  children: groups.map(function (descriptor) {
7107
7126
  return jsxRuntime.jsx("div", {
7108
- className: classes$L.group,
7127
+ className: classes$M.group,
7109
7128
  children: options.slice(descriptor.start, descriptor.end).map(function (toolbarItem) {
7110
7129
  var currentStatus = status[toolbarItem.id];
7111
7130
  return jsxRuntime.jsx(ActionButton, {
@@ -7135,7 +7154,7 @@ function chooseMultiTool() {
7135
7154
  }
7136
7155
  }
7137
7156
 
7138
- var classes$K = {"button-common-styles":"ToolbarMultiToolItem-module_button-common-styles__Fuxbo","scrollbar":"ToolbarMultiToolItem-module_scrollbar__XTmfz","icon":"ToolbarMultiToolItem-module_icon__-HQal","iconSelected":"ToolbarMultiToolItem-module_iconSelected__hlO0J","portal":"ToolbarMultiToolItem-module_portal__2XJgz","portal-vertical":"ToolbarMultiToolItem-module_portal-vertical__A0DVe"};
7157
+ var classes$L = {"button-common-styles":"ToolbarMultiToolItem-module_button-common-styles__Fuxbo","scrollbar":"ToolbarMultiToolItem-module_scrollbar__XTmfz","icon":"ToolbarMultiToolItem-module_icon__-HQal","iconSelected":"ToolbarMultiToolItem-module_iconSelected__hlO0J","portal":"ToolbarMultiToolItem-module_portal__2XJgz","portal-vertical":"ToolbarMultiToolItem-module_portal-vertical__A0DVe"};
7139
7158
 
7140
7159
  function usePortalOpening(_ref) {
7141
7160
  var _ref2 = _slicedToArray__default["default"](_ref, 3),
@@ -7183,8 +7202,8 @@ function usePortalStyle(_ref) {
7183
7202
  return [portalStyle];
7184
7203
  }
7185
7204
 
7186
- function ownKeys$W(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; }
7187
- function _objectSpread$W(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$W(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$W(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
7205
+ function ownKeys$Z(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; }
7206
+ function _objectSpread$Z(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$Z(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$Z(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
7188
7207
  var ToolbarMultiToolItem = function ToolbarMultiToolItem(props) {
7189
7208
  var id = props.id,
7190
7209
  options = props.options,
@@ -7245,20 +7264,20 @@ var ToolbarMultiToolItem = function ToolbarMultiToolItem(props) {
7245
7264
  portalClassName = _chooseMultiTool2[1];
7246
7265
  return displayMultiToolItem ? jsxRuntime.jsxs("div", {
7247
7266
  ref: ref,
7248
- className: classes$K.root,
7249
- children: [jsxRuntime.jsx(ActionButton, _objectSpread$W(_objectSpread$W({}, actionButtonProps), {}, {
7267
+ className: classes$L.root,
7268
+ children: [jsxRuntime.jsx(ActionButton, _objectSpread$Z(_objectSpread$Z({}, actionButtonProps), {}, {
7250
7269
  className: className,
7251
7270
  name: currentId,
7252
7271
  action: config[currentId],
7253
7272
  status: currentStatus,
7254
7273
  selected: selected
7255
7274
  })), !isOpen && jsxRuntime.jsx(Icon, {
7256
- className: "".concat(classes$K.icon, " ").concat((currentStatus === null || currentStatus === void 0 ? void 0 : currentStatus.selected) && classes$K.iconSelected),
7275
+ className: "".concat(classes$L.icon, " ").concat((currentStatus === null || currentStatus === void 0 ? void 0 : currentStatus.selected) && classes$L.iconSelected),
7257
7276
  name: "dropdown",
7258
7277
  onClick: onOpenOptions
7259
7278
  }), isOpen ? jsxRuntime.jsx(Portal, {
7260
7279
  isOpen: isOpen,
7261
- className: clsx__default["default"](classes$K.portal, vertical && classes$K['portal-vertical'], portalClassName),
7280
+ className: clsx__default["default"](classes$L.portal, vertical && classes$L['portal-vertical'], portalClassName),
7262
7281
  style: portalStyle,
7263
7282
  children: jsxRuntime.jsx(Component, {
7264
7283
  options: options,
@@ -7343,16 +7362,16 @@ var TemplatesList = function TemplatesList(props) {
7343
7362
  });
7344
7363
  };
7345
7364
 
7346
- var classes$J = {"button-common-styles":"BottomToolbar-module_button-common-styles__PbtE9","scrollbar":"BottomToolbar-module_scrollbar__i1f8P","group":"BottomToolbar-module_group__b-pGt","root":"BottomToolbar-module_root__kjkSm"};
7365
+ var classes$K = {"button-common-styles":"BottomToolbar-module_button-common-styles__PbtE9","scrollbar":"BottomToolbar-module_scrollbar__i1f8P","group":"BottomToolbar-module_group__b-pGt","root":"BottomToolbar-module_root__kjkSm"};
7347
7366
 
7348
7367
  var _excluded$B = ["className"];
7349
- function ownKeys$V(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; }
7350
- function _objectSpread$V(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$V(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$V(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
7368
+ function ownKeys$Y(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; }
7369
+ function _objectSpread$Y(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$Y(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$Y(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
7351
7370
  var Group$1 = function Group(_ref) {
7352
7371
  var children = _ref.children,
7353
7372
  className = _ref.className;
7354
7373
  return jsxRuntime.jsx("div", {
7355
- className: clsx__default["default"](classes$J.group, className),
7374
+ className: clsx__default["default"](classes$K.group, className),
7356
7375
  children: children
7357
7376
  });
7358
7377
  };
@@ -7364,7 +7383,7 @@ var BottomToolbar = function BottomToolbar(props) {
7364
7383
  indigoVerification = rest.indigoVerification,
7365
7384
  onAction = rest.onAction;
7366
7385
  return jsxRuntime.jsxs("div", {
7367
- className: clsx__default["default"](classes$J.root, className),
7386
+ className: clsx__default["default"](classes$K.root, className),
7368
7387
  children: [jsxRuntime.jsx(Group$1, {
7369
7388
  children: jsxRuntime.jsx(TemplatesList, {
7370
7389
  active: active,
@@ -7373,7 +7392,7 @@ var BottomToolbar = function BottomToolbar(props) {
7373
7392
  onAction: onAction
7374
7393
  })
7375
7394
  }), jsxRuntime.jsx(Group$1, {
7376
- children: jsxRuntime.jsx(ToolbarGroupItem, _objectSpread$V({
7395
+ children: jsxRuntime.jsx(ToolbarGroupItem, _objectSpread$Y({
7377
7396
  id: "template-lib"
7378
7397
  }, rest))
7379
7398
  })]
@@ -7468,15 +7487,15 @@ function prefetchRender(tmpls, baseUrl, cacheEl) {
7468
7487
  });
7469
7488
  }
7470
7489
 
7471
- function ownKeys$U(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; }
7472
- function _objectSpread$U(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$U(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$U(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
7490
+ function ownKeys$X(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; }
7491
+ function _objectSpread$X(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$X(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$X(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
7473
7492
  function openDialog(dispatch, dialogName, props) {
7474
7493
  return new Promise(function (resolve, reject) {
7475
7494
  dispatch({
7476
7495
  type: 'MODAL_OPEN',
7477
7496
  data: {
7478
7497
  name: dialogName,
7479
- prop: _objectSpread$U(_objectSpread$U({}, props), {}, {
7498
+ prop: _objectSpread$X(_objectSpread$X({}, props), {}, {
7480
7499
  onResult: resolve,
7481
7500
  onCancel: reject
7482
7501
  })
@@ -7494,7 +7513,7 @@ function modalReducer() {
7494
7513
  return null;
7495
7514
  }
7496
7515
  var formState = formReducer(state.form, action, state.name);
7497
- return _objectSpread$U(_objectSpread$U({}, state), {}, {
7516
+ return _objectSpread$X(_objectSpread$X({}, state), {}, {
7498
7517
  form: formState
7499
7518
  });
7500
7519
  }
@@ -7512,8 +7531,8 @@ function modalReducer() {
7512
7531
  }
7513
7532
  }
7514
7533
 
7515
- function ownKeys$T(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; }
7516
- function _objectSpread$T(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$T(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$T(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
7534
+ function ownKeys$W(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; }
7535
+ function _objectSpread$W(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$W(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$W(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
7517
7536
  function selectTmpl(tmpl) {
7518
7537
  return {
7519
7538
  type: 'TMPL_SELECT',
@@ -7535,7 +7554,7 @@ function changeFilter(filter) {
7535
7554
  return {
7536
7555
  type: 'TMPL_CHANGE_FILTER',
7537
7556
  data: {
7538
- filter: filter.trim(),
7557
+ filter: filter,
7539
7558
  selected: null
7540
7559
  }
7541
7560
  };
@@ -7613,7 +7632,7 @@ function saveUserTmpl(struct) {
7613
7632
  var name = _ref.name,
7614
7633
  attach = _ref.attach;
7615
7634
  tmpl.struct.name = name.trim();
7616
- tmpl.props = _objectSpread$T(_objectSpread$T({}, attach), {}, {
7635
+ tmpl.props = _objectSpread$W(_objectSpread$W({}, attach), {}, {
7617
7636
  group: 'User Templates'
7618
7637
  });
7619
7638
  var lib = getState().templates.lib.concat(tmpl);
@@ -7652,7 +7671,7 @@ function templatesReducer() {
7652
7671
  if (tmplActions.includes(action.type)) return Object.assign({}, state, action.data);
7653
7672
  if (attachActions.includes(action.type)) {
7654
7673
  var attach = Object.assign({}, state.attach, action.data);
7655
- return _objectSpread$T(_objectSpread$T({}, state), {}, {
7674
+ return _objectSpread$W(_objectSpread$W({}, state), {}, {
7656
7675
  attach: attach
7657
7676
  });
7658
7677
  }
@@ -7661,7 +7680,7 @@ function templatesReducer() {
7661
7680
  var lib = currentState.lib.filter(function (value) {
7662
7681
  return value !== action.data.tmpl;
7663
7682
  });
7664
- return _objectSpread$T(_objectSpread$T({}, currentState), {}, {
7683
+ return _objectSpread$W(_objectSpread$W({}, currentState), {}, {
7665
7684
  lib: lib
7666
7685
  });
7667
7686
  }
@@ -7669,8 +7688,8 @@ function templatesReducer() {
7669
7688
  }
7670
7689
 
7671
7690
  var _excluded$A = ["type", "action"];
7672
- function ownKeys$S(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; }
7673
- function _objectSpread$S(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$S(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$S(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
7691
+ function ownKeys$V(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; }
7692
+ function _objectSpread$V(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$V(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$V(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
7674
7693
  function execute(activeTool, _ref) {
7675
7694
  var action = _ref.action,
7676
7695
  editor = _ref.editor,
@@ -7724,7 +7743,7 @@ function actionStateReducer () {
7724
7743
  case 'INIT':
7725
7744
  action = config['select-rectangle'].action;
7726
7745
  case 'ACTION':
7727
- activeTool = execute(state && state.activeTool, _objectSpread$S(_objectSpread$S({}, params), {}, {
7746
+ activeTool = execute(state && state.activeTool, _objectSpread$V(_objectSpread$V({}, params), {}, {
7728
7747
  action: action
7729
7748
  }));
7730
7749
  case 'UPDATE':
@@ -7740,20 +7759,25 @@ function actionStateReducer () {
7740
7759
  }
7741
7760
  }
7742
7761
 
7743
- function ownKeys$R(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; }
7744
- function _objectSpread$R(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$R(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$R(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
7745
- var initialState = {
7762
+ function ownKeys$U(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; }
7763
+ function _objectSpread$U(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$U(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$U(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
7764
+ var initialState$1 = {
7746
7765
  lib: [],
7766
+ functionalGroupInfo: null,
7747
7767
  mode: 'fg'
7748
7768
  };
7749
7769
  var functionalGroupsReducer = function functionalGroupsReducer() {
7750
- var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState;
7770
+ var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState$1;
7751
7771
  var _ref = arguments.length > 1 ? arguments[1] : undefined,
7752
7772
  type = _ref.type,
7753
7773
  payload = _ref.payload;
7754
7774
  switch (type) {
7755
7775
  case 'FG_INIT':
7756
- return _objectSpread$R(_objectSpread$R({}, state), payload);
7776
+ return _objectSpread$U(_objectSpread$U({}, state), payload);
7777
+ case 'FG_HIGHLIGHT':
7778
+ return _objectSpread$U(_objectSpread$U({}, state), {}, {
7779
+ functionalGroupInfo: payload
7780
+ });
7757
7781
  default:
7758
7782
  return state;
7759
7783
  }
@@ -7766,6 +7790,15 @@ var initFGroups = function initFGroups(lib) {
7766
7790
  }
7767
7791
  };
7768
7792
  };
7793
+ var highlightFGroup = function highlightFGroup(group) {
7794
+ return {
7795
+ type: 'FG_HIGHLIGHT',
7796
+ payload: group
7797
+ };
7798
+ };
7799
+ function highlightFG(dispatch, group) {
7800
+ dispatch(highlightFGroup(group));
7801
+ }
7769
7802
  function initFGTemplates(baseUrl) {
7770
7803
  return function () {
7771
7804
  var _ref2 = _asyncToGenerator__default["default"]( _regeneratorRuntime__default["default"].mark(function _callee(dispatch) {
@@ -7805,8 +7838,78 @@ function initFGTemplates(baseUrl) {
7805
7838
  }();
7806
7839
  }
7807
7840
 
7808
- function ownKeys$Q(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; }
7809
- function _objectSpread$Q(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$Q(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$Q(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
7841
+ function ownKeys$T(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; }
7842
+ function _objectSpread$T(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$T(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$T(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
7843
+ var initialState = {
7844
+ lib: [],
7845
+ mode: 'fg'
7846
+ };
7847
+ var saltsAndSolventsReducer = function saltsAndSolventsReducer() {
7848
+ var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState;
7849
+ var _ref = arguments.length > 1 ? arguments[1] : undefined,
7850
+ type = _ref.type,
7851
+ payload = _ref.payload;
7852
+ switch (type) {
7853
+ case 'SALTS_AND_SOLVENTS_INIT':
7854
+ return _objectSpread$T(_objectSpread$T({}, state), payload);
7855
+ default:
7856
+ return state;
7857
+ }
7858
+ };
7859
+ var initSaltsAndSolvents = function initSaltsAndSolvents(lib) {
7860
+ return {
7861
+ type: 'SALTS_AND_SOLVENTS_INIT',
7862
+ payload: {
7863
+ lib: lib
7864
+ }
7865
+ };
7866
+ };
7867
+ function initSaltsAndSolventsTemplates(baseUrl) {
7868
+ return function () {
7869
+ var _ref2 = _asyncToGenerator__default["default"]( _regeneratorRuntime__default["default"].mark(function _callee(dispatch) {
7870
+ var fileName, url, saltsAndSolventsProvider, functionalGroupsProvider, sdfSerializer, text, templates, saltsAndSolvents;
7871
+ return _regeneratorRuntime__default["default"].wrap(function _callee$(_context) {
7872
+ while (1) {
7873
+ switch (_context.prev = _context.next) {
7874
+ case 0:
7875
+ fileName = 'salts-and-solvents.sdf';
7876
+ url = "".concat(baseUrl, "/templates/").concat(fileName);
7877
+ saltsAndSolventsProvider = ketcherCore.SaltsAndSolventsProvider.getInstance();
7878
+ functionalGroupsProvider = ketcherCore.FunctionalGroupsProvider.getInstance();
7879
+ sdfSerializer = new ketcherCore.SdfSerializer();
7880
+ _context.next = 7;
7881
+ return prefetchStatic(url);
7882
+ case 7:
7883
+ text = _context.sent;
7884
+ templates = sdfSerializer.deserialize(text);
7885
+ saltsAndSolvents = templates.reduce(function (acc, _ref3) {
7886
+ var struct = _ref3.struct,
7887
+ props = _ref3.props;
7888
+ struct.abbreviation = String(props.abbreviation);
7889
+ acc.push(struct);
7890
+ return acc;
7891
+ }, []);
7892
+ saltsAndSolventsProvider.setSaltsAndSolventsList(saltsAndSolvents);
7893
+ functionalGroupsProvider.addToFunctionalGroupsList(saltsAndSolvents);
7894
+ dispatch(initSaltsAndSolvents(templates));
7895
+ dispatch(appUpdate({
7896
+ saltsAndSolvents: true
7897
+ }));
7898
+ case 14:
7899
+ case "end":
7900
+ return _context.stop();
7901
+ }
7902
+ }
7903
+ }, _callee);
7904
+ }));
7905
+ return function (_x) {
7906
+ return _ref2.apply(this, arguments);
7907
+ };
7908
+ }();
7909
+ }
7910
+
7911
+ function ownKeys$S(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; }
7912
+ function _objectSpread$S(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$S(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$S(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
7810
7913
  var initial = {
7811
7914
  freqAtoms: [],
7812
7915
  currentAtom: 0,
@@ -7826,7 +7929,7 @@ function updateVisibleTools(visibleTool, activeTool) {
7826
7929
  if (key === 'shape' && menuHeight > 900) return res;
7827
7930
  if (!key.match(regExp) || menuHeight > 700) res[key] = visibleTool[key];
7828
7931
  return res;
7829
- }, _objectSpread$Q({}, activeTool));
7932
+ }, _objectSpread$S({}, activeTool));
7830
7933
  }
7831
7934
  function initResize() {
7832
7935
  return function (dispatch, getState) {
@@ -7850,41 +7953,41 @@ function toolbarReducer () {
7850
7953
  case 'ACTION':
7851
7954
  {
7852
7955
  var visibleTool = toolInMenu(action.action);
7853
- return visibleTool ? _objectSpread$Q(_objectSpread$Q({}, state), {}, {
7956
+ return visibleTool ? _objectSpread$S(_objectSpread$S({}, state), {}, {
7854
7957
  opened: null,
7855
- visibleTools: _objectSpread$Q(_objectSpread$Q({}, state.visibleTools), visibleTool)
7856
- }) : _objectSpread$Q(_objectSpread$Q({}, state), {}, {
7958
+ visibleTools: _objectSpread$S(_objectSpread$S({}, state.visibleTools), visibleTool)
7959
+ }) : _objectSpread$S(_objectSpread$S({}, state), {}, {
7857
7960
  opened: null
7858
7961
  });
7859
7962
  }
7860
7963
  case 'ADD_ATOMS':
7861
7964
  {
7862
7965
  var newState = addFreqAtom(data, state.freqAtoms, state.currentAtom);
7863
- return _objectSpread$Q(_objectSpread$Q({}, state), newState);
7966
+ return _objectSpread$S(_objectSpread$S({}, state), newState);
7864
7967
  }
7865
7968
  case 'CLEAR_VISIBLE':
7866
7969
  {
7867
7970
  var activeTool = toolInMenu(action.data);
7868
7971
  var correctTools = updateVisibleTools(state.visibleTools, activeTool);
7869
- return _objectSpread$Q(_objectSpread$Q({}, state), {}, {
7972
+ return _objectSpread$S(_objectSpread$S({}, state), {}, {
7870
7973
  opened: null,
7871
- visibleTools: _objectSpread$Q({}, correctTools)
7974
+ visibleTools: _objectSpread$S({}, correctTools)
7872
7975
  });
7873
7976
  }
7874
7977
  case 'OPENED':
7875
7978
  {
7876
- return data.isSelected && state.opened ? _objectSpread$Q(_objectSpread$Q({}, state), {}, {
7979
+ return data.isSelected && state.opened ? _objectSpread$S(_objectSpread$S({}, state), {}, {
7877
7980
  opened: null
7878
- }) : _objectSpread$Q(_objectSpread$Q({}, state), {}, {
7981
+ }) : _objectSpread$S(_objectSpread$S({}, state), {}, {
7879
7982
  opened: data.menuName
7880
7983
  });
7881
7984
  }
7882
7985
  case 'UPDATE':
7883
- return _objectSpread$Q(_objectSpread$Q({}, state), {}, {
7986
+ return _objectSpread$S(_objectSpread$S({}, state), {}, {
7884
7987
  opened: null
7885
7988
  });
7886
7989
  case 'MODAL_OPEN':
7887
- return _objectSpread$Q(_objectSpread$Q({}, state), {}, {
7990
+ return _objectSpread$S(_objectSpread$S({}, state), {}, {
7888
7991
  opened: null
7889
7992
  });
7890
7993
  default:
@@ -7928,9 +8031,9 @@ function hiddenAncestor(el, base) {
7928
8031
  }
7929
8032
 
7930
8033
  var _excluded$z = ["type"],
7931
- _excluded2$6 = ["buttons"];
7932
- function ownKeys$P(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; }
7933
- function _objectSpread$P(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$P(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$P(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
8034
+ _excluded2$5 = ["buttons"];
8035
+ function ownKeys$R(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; }
8036
+ function _objectSpread$R(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$R(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$R(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
7934
8037
  var shared = redux.combineReducers({
7935
8038
  actionState: actionStateReducer,
7936
8039
  toolbar: toolbarReducer,
@@ -7946,6 +8049,7 @@ var shared = redux.combineReducers({
7946
8049
  options: optionsReducer,
7947
8050
  templates: templatesReducer,
7948
8051
  functionalGroups: functionalGroupsReducer,
8052
+ saltsAndSolvents: saltsAndSolventsReducer,
7949
8053
  requestsStatuses: requestReducer
7950
8054
  });
7951
8055
  function getRootReducer(setEditor) {
@@ -7956,10 +8060,10 @@ function getRootReducer(setEditor) {
7956
8060
  case 'UPDATE':
7957
8061
  action.type;
7958
8062
  var data = _objectWithoutProperties__default["default"](action, _excluded$z);
7959
- if (data) state = _objectSpread$P(_objectSpread$P({}, state), data);
8063
+ if (data) state = _objectSpread$R(_objectSpread$R({}, state), data);
7960
8064
  }
7961
- var sh = shared(state, _objectSpread$P(_objectSpread$P({}, action), fp.pick(['editor', 'server', 'options'], state)));
7962
- var finalState = sh === state.shared ? state : _objectSpread$P(_objectSpread$P({}, state), sh);
8065
+ var sh = shared(state, _objectSpread$R(_objectSpread$R({}, action), fp.pick(['editor', 'server', 'options'], state)));
8066
+ var finalState = sh === state.shared ? state : _objectSpread$R(_objectSpread$R({}, state), sh);
7963
8067
  global.currentState = finalState;
7964
8068
  return finalState;
7965
8069
  };
@@ -7967,7 +8071,7 @@ function getRootReducer(setEditor) {
7967
8071
  function createStore (options, server, setEditor) {
7968
8072
  var _options$buttons = options.buttons,
7969
8073
  buttons = _options$buttons === void 0 ? {} : _options$buttons,
7970
- restOptions = _objectWithoutProperties__default["default"](options, _excluded2$6);
8074
+ restOptions = _objectWithoutProperties__default["default"](options, _excluded2$5);
7971
8075
  var initState = {
7972
8076
  actionState: null,
7973
8077
  editor: null,
@@ -8042,14 +8146,14 @@ var selectOptions$2 = makeItems(['select-rectangle', 'select-lasso', 'select-fra
8042
8146
  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-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']);
8043
8147
  var mappingOptions = makeItems(['reaction-map', 'reaction-unmap', 'reaction-automap']);
8044
8148
 
8045
- var classes$I = {"scroll":"ArrowScroll-module_scroll__h9kCx","button":"ArrowScroll-module_button__ygMgL","down":"ArrowScroll-module_down__yDzZX","up":"ArrowScroll-module_up__Q1ubd"};
8149
+ var classes$J = {"scroll":"ArrowScroll-module_scroll__h9kCx","button":"ArrowScroll-module_button__ygMgL","down":"ArrowScroll-module_down__yDzZX","up":"ArrowScroll-module_up__Q1ubd"};
8046
8150
 
8047
8151
  function useSettingsContext() {
8048
8152
  return React__default["default"].useContext(settingsContext);
8049
8153
  }
8050
8154
 
8051
- function ownKeys$O(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; }
8052
- function _objectSpread$O(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$O(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$O(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
8155
+ function ownKeys$Q(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; }
8156
+ function _objectSpread$Q(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$Q(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$Q(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
8053
8157
  var throttleMilliseconds = 100;
8054
8158
  function useThrottleResizeObserver() {
8055
8159
  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
@@ -8063,11 +8167,11 @@ function useThrottleResizeObserver() {
8063
8167
  var onResize = React.useMemo(function () {
8064
8168
  return lodash.throttle(setSize, throttleMilliseconds);
8065
8169
  }, []);
8066
- var _useResizeObserver = useResizeObserver__default["default"](_objectSpread$O({
8170
+ var _useResizeObserver = useResizeObserver__default["default"](_objectSpread$Q({
8067
8171
  onResize: onResize
8068
8172
  }, options)),
8069
8173
  ref = _useResizeObserver.ref;
8070
- return _objectSpread$O({
8174
+ return _objectSpread$Q({
8071
8175
  ref: ref
8072
8176
  }, size);
8073
8177
  }
@@ -8163,7 +8267,7 @@ var ArrowScroll = function ArrowScroll(_ref) {
8163
8267
  };
8164
8268
  }, [endInView]);
8165
8269
  return jsxRuntime.jsxs("div", {
8166
- className: classes$I.scroll,
8270
+ className: classes$J.scroll,
8167
8271
  children: [endInView ? jsxRuntime.jsx(jsxRuntime.Fragment, {}) : jsxRuntime.jsx("button", {
8168
8272
  onClick: function onClick() {
8169
8273
  return scrollDown();
@@ -8174,7 +8278,7 @@ var ArrowScroll = function ArrowScroll(_ref) {
8174
8278
  onMouseDown: function onMouseDown() {
8175
8279
  return setScrollDown(true);
8176
8280
  },
8177
- className: clsx__default["default"](classes$I.button, classes$I.down),
8281
+ className: clsx__default["default"](classes$J.button, classes$J.down),
8178
8282
  children: "\u25BC"
8179
8283
  }), startInView ? jsxRuntime.jsx(jsxRuntime.Fragment, {}) : jsxRuntime.jsx("button", {
8180
8284
  onClick: function onClick() {
@@ -8186,7 +8290,7 @@ var ArrowScroll = function ArrowScroll(_ref) {
8186
8290
  onMouseDown: function onMouseDown() {
8187
8291
  return setScrollUp(true);
8188
8292
  },
8189
- className: clsx__default["default"](classes$I.button, classes$I.up),
8293
+ className: clsx__default["default"](classes$J.button, classes$J.up),
8190
8294
  children: "\u25B2"
8191
8295
  })]
8192
8296
  });
@@ -8201,13 +8305,13 @@ var mediaSizes$2 = {
8201
8305
  };
8202
8306
 
8203
8307
  var _excluded$y = ["height"];
8204
- function ownKeys$N(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; }
8205
- function _objectSpread$N(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$N(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$N(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
8308
+ function ownKeys$P(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; }
8309
+ function _objectSpread$P(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$P(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$P(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
8206
8310
  var Bond$1 = function Bond(props) {
8207
8311
  var height = props.height,
8208
8312
  rest = _objectWithoutProperties__default["default"](props, _excluded$y);
8209
8313
  if (height && height <= mediaSizes$2.bondCollapsableHeight) {
8210
- return jsxRuntime.jsx(ToolbarMultiToolItem, _objectSpread$N({
8314
+ return jsxRuntime.jsx(ToolbarMultiToolItem, _objectSpread$P({
8211
8315
  id: "bonds",
8212
8316
  options: groupOptions,
8213
8317
  variant: "grouped",
@@ -8215,68 +8319,68 @@ var Bond$1 = function Bond(props) {
8215
8319
  }, rest));
8216
8320
  }
8217
8321
  return jsxRuntime.jsxs(jsxRuntime.Fragment, {
8218
- children: [jsxRuntime.jsx(ToolbarMultiToolItem, _objectSpread$N({
8322
+ children: [jsxRuntime.jsx(ToolbarMultiToolItem, _objectSpread$P({
8219
8323
  id: "bond-common",
8220
8324
  options: bondCommon
8221
- }, rest)), jsxRuntime.jsx(ToolbarMultiToolItem, _objectSpread$N({
8325
+ }, rest)), jsxRuntime.jsx(ToolbarMultiToolItem, _objectSpread$P({
8222
8326
  id: "bond-stereo",
8223
8327
  options: bondStereo
8224
- }, rest)), jsxRuntime.jsx(ToolbarMultiToolItem, _objectSpread$N({
8328
+ }, rest)), jsxRuntime.jsx(ToolbarMultiToolItem, _objectSpread$P({
8225
8329
  id: "bond-query",
8226
8330
  options: bondQuery
8227
- }, rest)), jsxRuntime.jsx(ToolbarMultiToolItem, _objectSpread$N({
8331
+ }, rest)), jsxRuntime.jsx(ToolbarMultiToolItem, _objectSpread$P({
8228
8332
  id: "bond-special",
8229
8333
  options: bondSpecial
8230
8334
  }, rest))]
8231
8335
  });
8232
8336
  };
8233
8337
 
8234
- function ownKeys$M(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; }
8235
- function _objectSpread$M(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$M(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$M(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
8338
+ function ownKeys$O(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; }
8339
+ function _objectSpread$O(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$O(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$O(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
8236
8340
  var RGroup$1 = function RGroup(props) {
8237
- return jsxRuntime.jsx(ToolbarGroupItem, _objectSpread$M({
8341
+ return jsxRuntime.jsx(ToolbarGroupItem, _objectSpread$O({
8238
8342
  id: "rgroup",
8239
8343
  options: rGroupOptions
8240
8344
  }, props));
8241
8345
  };
8242
8346
 
8243
- function ownKeys$L(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; }
8244
- function _objectSpread$L(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$L(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$L(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
8347
+ function ownKeys$N(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; }
8348
+ function _objectSpread$N(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$N(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$N(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
8245
8349
  var Shape = function Shape(props) {
8246
- return jsxRuntime.jsx(ToolbarGroupItem, _objectSpread$L({
8350
+ return jsxRuntime.jsx(ToolbarGroupItem, _objectSpread$N({
8247
8351
  id: "shapes",
8248
8352
  options: shapeOptions
8249
8353
  }, props));
8250
8354
  };
8251
8355
 
8252
8356
  var _excluded$x = ["height"];
8253
- function ownKeys$K(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; }
8254
- function _objectSpread$K(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$K(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$K(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
8357
+ function ownKeys$M(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; }
8358
+ function _objectSpread$M(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$M(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$M(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
8255
8359
  var Transform = function Transform(props) {
8256
8360
  var height = props.height,
8257
8361
  rest = _objectWithoutProperties__default["default"](props, _excluded$x);
8258
8362
  if (height && height <= mediaSizes$2.transformCollapsableHeight) {
8259
- return jsxRuntime.jsx(ToolbarGroupItem, _objectSpread$K({
8363
+ return jsxRuntime.jsx(ToolbarGroupItem, _objectSpread$M({
8260
8364
  id: "transforms",
8261
8365
  options: transformOptions
8262
8366
  }, rest));
8263
8367
  }
8264
8368
  return jsxRuntime.jsxs(jsxRuntime.Fragment, {
8265
- children: [jsxRuntime.jsx(ToolbarGroupItem, _objectSpread$K({
8369
+ children: [jsxRuntime.jsx(ToolbarGroupItem, _objectSpread$M({
8266
8370
  id: "transform-rotate"
8267
- }, rest)), jsxRuntime.jsx(ToolbarGroupItem, _objectSpread$K({
8371
+ }, rest)), jsxRuntime.jsx(ToolbarGroupItem, _objectSpread$M({
8268
8372
  id: "transform-flip-h"
8269
- }, rest)), jsxRuntime.jsx(ToolbarGroupItem, _objectSpread$K({
8373
+ }, rest)), jsxRuntime.jsx(ToolbarGroupItem, _objectSpread$M({
8270
8374
  id: "transform-flip-v"
8271
8375
  }, rest))]
8272
8376
  });
8273
8377
  };
8274
8378
 
8275
- var classes$H = {"button-common-styles":"LeftToolbar-module_button-common-styles__WgnON","scrollbar":"LeftToolbar-module_scrollbar__OBwid","group":"LeftToolbar-module_group__0s41t","root":"LeftToolbar-module_root__yhhZm","buttons":"LeftToolbar-module_buttons__lnIjn","borderOff":"LeftToolbar-module_borderOff__om425","groupItem":"LeftToolbar-module_groupItem__OqQu0"};
8379
+ var classes$I = {"button-common-styles":"LeftToolbar-module_button-common-styles__WgnON","scrollbar":"LeftToolbar-module_scrollbar__OBwid","group":"LeftToolbar-module_group__0s41t","root":"LeftToolbar-module_root__yhhZm","buttons":"LeftToolbar-module_buttons__lnIjn","borderOff":"LeftToolbar-module_borderOff__om425","groupItem":"LeftToolbar-module_groupItem__OqQu0"};
8276
8380
 
8277
8381
  var _excluded$w = ["className"];
8278
- function ownKeys$J(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; }
8279
- function _objectSpread$J(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$J(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$J(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
8382
+ function ownKeys$L(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; }
8383
+ function _objectSpread$L(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$L(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$L(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
8280
8384
  var LeftToolbar = function LeftToolbar(props) {
8281
8385
  var className = props.className,
8282
8386
  rest = _objectWithoutProperties__default["default"](props, _excluded$w);
@@ -8300,7 +8404,7 @@ var LeftToolbar = function LeftToolbar(props) {
8300
8404
  var Item = function Item(_ref) {
8301
8405
  var id = _ref.id,
8302
8406
  options = _ref.options;
8303
- return ToolbarGroupItem(_objectSpread$J({
8407
+ return ToolbarGroupItem(_objectSpread$L({
8304
8408
  id: id,
8305
8409
  options: options
8306
8410
  }, rest));
@@ -8332,25 +8436,25 @@ var LeftToolbar = function LeftToolbar(props) {
8332
8436
  });
8333
8437
  }
8334
8438
  return visibleItems.length ? jsxRuntime.jsx("div", {
8335
- className: clsx__default["default"](classes$H.group, className),
8439
+ className: clsx__default["default"](classes$I.group, className),
8336
8440
  children: visibleItems.map(function (item) {
8337
8441
  switch (item.id) {
8338
8442
  case 'bond-common':
8339
- return React.createElement(Bond$1, _objectSpread$J(_objectSpread$J({}, rest), {}, {
8443
+ return React.createElement(Bond$1, _objectSpread$L(_objectSpread$L({}, rest), {}, {
8340
8444
  height: height,
8341
8445
  key: item.id
8342
8446
  }));
8343
8447
  case 'transform-rotate':
8344
- return React.createElement(Transform, _objectSpread$J(_objectSpread$J({}, rest), {}, {
8448
+ return React.createElement(Transform, _objectSpread$L(_objectSpread$L({}, rest), {}, {
8345
8449
  height: height,
8346
8450
  key: item.id
8347
8451
  }));
8348
8452
  case 'rgroup':
8349
- return React.createElement(RGroup$1, _objectSpread$J(_objectSpread$J({}, rest), {}, {
8453
+ return React.createElement(RGroup$1, _objectSpread$L(_objectSpread$L({}, rest), {}, {
8350
8454
  key: item.id
8351
8455
  }));
8352
8456
  case 'shapes':
8353
- return React.createElement(Shape, _objectSpread$J(_objectSpread$J({}, rest), {}, {
8457
+ return React.createElement(Shape, _objectSpread$L(_objectSpread$L({}, rest), {}, {
8354
8458
  key: item.id
8355
8459
  }));
8356
8460
  default:
@@ -8363,16 +8467,16 @@ var LeftToolbar = function LeftToolbar(props) {
8363
8467
  }) : null;
8364
8468
  };
8365
8469
  return jsxRuntime.jsxs("div", {
8366
- className: clsx__default["default"](classes$H.root, className),
8470
+ className: clsx__default["default"](classes$I.root, className),
8367
8471
  ref: ref,
8368
8472
  children: [jsxRuntime.jsxs("div", {
8369
- className: classes$H.buttons,
8473
+ className: classes$I.buttons,
8370
8474
  ref: scrollRef,
8371
8475
  children: [jsxRuntime.jsx("div", {
8372
- className: classes$H.listener,
8476
+ className: classes$I.listener,
8373
8477
  ref: startRef,
8374
8478
  children: jsxRuntime.jsx(Group, {
8375
- className: classes$H.groupItem,
8479
+ className: classes$I.groupItem,
8376
8480
  items: [{
8377
8481
  id: 'hand'
8378
8482
  }, {
@@ -8383,7 +8487,7 @@ var LeftToolbar = function LeftToolbar(props) {
8383
8487
  }]
8384
8488
  })
8385
8489
  }), jsxRuntime.jsx(Group, {
8386
- className: classes$H.groupItem,
8490
+ className: classes$I.groupItem,
8387
8491
  items: [{
8388
8492
  id: 'bonds',
8389
8493
  options: [].concat(_toConsumableArray__default["default"](bondCommon), _toConsumableArray__default["default"](bondQuery), _toConsumableArray__default["default"](bondSpecial), _toConsumableArray__default["default"](bondStereo))
@@ -8391,27 +8495,27 @@ var LeftToolbar = function LeftToolbar(props) {
8391
8495
  id: 'chain'
8392
8496
  }]
8393
8497
  }), jsxRuntime.jsx(Group, {
8394
- className: classes$H.groupItem,
8498
+ className: classes$I.groupItem,
8395
8499
  items: [{
8396
8500
  id: 'charge-plus'
8397
8501
  }, {
8398
8502
  id: 'charge-minus'
8399
8503
  }]
8400
8504
  }), jsxRuntime.jsx(Group, {
8401
- className: classes$H.groupItem,
8505
+ className: classes$I.groupItem,
8402
8506
  items: [{
8403
8507
  id: 'transforms',
8404
8508
  options: transformOptions
8405
8509
  }]
8406
8510
  }), jsxRuntime.jsx(Group, {
8407
- className: classes$H.groupItem,
8511
+ className: classes$I.groupItem,
8408
8512
  items: [{
8409
8513
  id: 'sgroup'
8410
8514
  }, {
8411
8515
  id: 'sgroup-data'
8412
8516
  }]
8413
8517
  }), jsxRuntime.jsx(Group, {
8414
- className: classes$H.groupItem,
8518
+ className: classes$I.groupItem,
8415
8519
  items: [{
8416
8520
  id: 'reaction-plus'
8417
8521
  }, {
@@ -8422,17 +8526,17 @@ var LeftToolbar = function LeftToolbar(props) {
8422
8526
  options: mappingOptions
8423
8527
  }]
8424
8528
  }), jsxRuntime.jsx("div", {
8425
- className: classes$H.listener,
8529
+ className: classes$I.listener,
8426
8530
  ref: sizeRef,
8427
8531
  children: jsxRuntime.jsx(Group, {
8428
- className: classes$H.groupItem,
8532
+ className: classes$I.groupItem,
8429
8533
  items: [{
8430
8534
  id: 'rgroup',
8431
8535
  options: rGroupOptions
8432
8536
  }]
8433
8537
  })
8434
8538
  }), jsxRuntime.jsx(Group, {
8435
- className: classes$H.groupItem,
8539
+ className: classes$I.groupItem,
8436
8540
  items: [{
8437
8541
  id: 'shapes',
8438
8542
  options: shapeOptions
@@ -8440,7 +8544,7 @@ var LeftToolbar = function LeftToolbar(props) {
8440
8544
  }), jsxRuntime.jsx("div", {
8441
8545
  ref: endRef,
8442
8546
  children: jsxRuntime.jsx(Group, {
8443
- className: classes$H.groupItem,
8547
+ className: classes$I.groupItem,
8444
8548
  items: [{
8445
8549
  id: 'text'
8446
8550
  }]
@@ -8481,19 +8585,19 @@ var mapDispatchToProps$h = function mapDispatchToProps(dispatch) {
8481
8585
  };
8482
8586
  var LeftToolbarContainer = reactRedux.connect(mapStateToProps$i, mapDispatchToProps$h)(LeftToolbar);
8483
8587
 
8484
- var classes$G = {"button-common-styles":"Atom-module_button-common-styles__j3EUJ","scrollbar":"Atom-module_scrollbar__iO-Ni","atom":"Atom-module_atom__g2RUu"};
8588
+ var classes$H = {"button-common-styles":"Atom-module_button-common-styles__j3EUJ","scrollbar":"Atom-module_scrollbar__iO-Ni","atom":"Atom-module_atom__g2RUu"};
8485
8589
 
8486
8590
  var _excluded$v = ["el", "shortcut", "selected"];
8487
- function ownKeys$I(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; }
8488
- function _objectSpread$I(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$I(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$I(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
8591
+ function ownKeys$K(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; }
8592
+ function _objectSpread$K(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$K(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$K(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
8489
8593
  function Atom$1(_ref) {
8490
8594
  var el = _ref.el,
8491
8595
  shortcut = _ref.shortcut,
8492
8596
  selected = _ref.selected,
8493
8597
  props = _objectWithoutProperties__default["default"](_ref, _excluded$v);
8494
- return jsxRuntime.jsx("button", _objectSpread$I(_objectSpread$I({
8598
+ return jsxRuntime.jsx("button", _objectSpread$K(_objectSpread$K({
8495
8599
  title: shortcut ? "".concat(el.title, " (").concat(shortcut, ")") : el.title,
8496
- className: clsx__default["default"](classes$G.atom, {
8600
+ className: clsx__default["default"](classes$H.atom, {
8497
8601
  selected: selected
8498
8602
  }),
8499
8603
  value: el.number
@@ -8872,16 +8976,16 @@ var AtomsList = React.forwardRef(function (props, ref) {
8872
8976
  });
8873
8977
  });
8874
8978
 
8875
- var classes$F = {"button-common-styles":"RightToolbar-module_button-common-styles__fNlqY","scrollbar":"RightToolbar-module_scrollbar__2Q0UU","group":"RightToolbar-module_group__3mhUx","root":"RightToolbar-module_root__1D5hp","atomsList":"RightToolbar-module_atomsList__ar08-","buttons":"RightToolbar-module_buttons__YxRHI"};
8979
+ var classes$G = {"button-common-styles":"RightToolbar-module_button-common-styles__fNlqY","scrollbar":"RightToolbar-module_scrollbar__2Q0UU","group":"RightToolbar-module_group__3mhUx","root":"RightToolbar-module_root__1D5hp","atomsList":"RightToolbar-module_atomsList__ar08-","buttons":"RightToolbar-module_buttons__YxRHI"};
8876
8980
 
8877
8981
  var _excluded$u = ["className"];
8878
- function ownKeys$H(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; }
8879
- function _objectSpread$H(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$H(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$H(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
8982
+ function ownKeys$J(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; }
8983
+ function _objectSpread$J(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$J(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$J(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
8880
8984
  var Group = function Group(_ref) {
8881
8985
  var children = _ref.children,
8882
8986
  className = _ref.className;
8883
8987
  return jsxRuntime.jsx("div", {
8884
- className: clsx__default["default"](classes$F.group, className),
8988
+ className: clsx__default["default"](classes$G.group, className),
8885
8989
  children: children
8886
8990
  });
8887
8991
  };
@@ -8912,12 +9016,12 @@ var RightToolbar = function RightToolbar(props) {
8912
9016
  scrollRef.current.scrollTop += sizeRef.current.offsetHeight;
8913
9017
  };
8914
9018
  return jsxRuntime.jsxs("div", {
8915
- className: clsx__default["default"](classes$F.root, className),
9019
+ className: clsx__default["default"](classes$G.root, className),
8916
9020
  children: [jsxRuntime.jsxs("div", {
8917
- className: classes$F.buttons,
9021
+ className: classes$G.buttons,
8918
9022
  ref: scrollRef,
8919
9023
  children: [jsxRuntime.jsxs(Group, {
8920
- className: classes$F.atomsList,
9024
+ className: classes$G.atomsList,
8921
9025
  children: [jsxRuntime.jsx(AtomsList, {
8922
9026
  ref: startRef,
8923
9027
  atoms: basicAtoms,
@@ -8927,15 +9031,15 @@ var RightToolbar = function RightToolbar(props) {
8927
9031
  atoms: freqAtoms,
8928
9032
  active: active,
8929
9033
  onAction: onAction
8930
- }), jsxRuntime.jsx(ToolbarGroupItem, _objectSpread$H({
9034
+ }), jsxRuntime.jsx(ToolbarGroupItem, _objectSpread$J({
8931
9035
  id: "period-table"
8932
9036
  }, rest))]
8933
9037
  }), jsxRuntime.jsx(Group, {
8934
9038
  children: jsxRuntime.jsxs("div", {
8935
9039
  ref: sizeRef,
8936
- children: [jsxRuntime.jsx(ToolbarGroupItem, _objectSpread$H({
9040
+ children: [jsxRuntime.jsx(ToolbarGroupItem, _objectSpread$J({
8937
9041
  id: "any-atom"
8938
- }, rest)), jsxRuntime.jsx(ToolbarGroupItem, _objectSpread$H({
9042
+ }, rest)), jsxRuntime.jsx(ToolbarGroupItem, _objectSpread$J({
8939
9043
  id: "extended-table"
8940
9044
  }, rest))]
8941
9045
  })
@@ -9787,6 +9891,11 @@ function lookup(map, event) {
9787
9891
  }
9788
9892
  keyNorm.lookup = lookup;
9789
9893
 
9894
+ function _createForOfIteratorHelper$e(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray$e(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; } } }; }
9895
+ function _unsupportedIterableToArray$e(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray$e(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$e(o, minLen); }
9896
+ function _arrayLikeToArray$e(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; }
9897
+ function ownKeys$I(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; }
9898
+ function _objectSpread$I(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$I(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$I(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
9790
9899
  function initKeydownListener(element) {
9791
9900
  return function (dispatch, getState) {
9792
9901
  var hotKeys = initHotKeys();
@@ -9798,6 +9907,7 @@ function initKeydownListener(element) {
9798
9907
  function keyHandle(dispatch, state, hotKeys, event) {
9799
9908
  if (state.modal) return;
9800
9909
  var editor = state.editor;
9910
+ var render = editor.render;
9801
9911
  var actionState = state.actionState;
9802
9912
  var actionTool = actionState.activeTool;
9803
9913
  var key = keyNorm(event);
@@ -9817,7 +9927,8 @@ function keyHandle(dispatch, state, hotKeys, event) {
9817
9927
  event.preventDefault();
9818
9928
  } else if ((group = keyNorm.lookup(hotKeys, event)) !== undefined) {
9819
9929
  var index = checkGroupOnTool(group, actionTool);
9820
- index = (index + 1) % group.length;
9930
+ var groupLength = group !== null ? group.length : 1;
9931
+ index = (index + 1) % groupLength;
9821
9932
  var actName = group[index];
9822
9933
  if (actionState[actName] && actionState[actName].disabled === true) {
9823
9934
  event.preventDefault();
@@ -9825,13 +9936,38 @@ function keyHandle(dispatch, state, hotKeys, event) {
9825
9936
  }
9826
9937
  if (actions.indexOf(actName) === -1) {
9827
9938
  var newAction = config[actName].action;
9828
- dispatch(onAction(newAction));
9939
+ var hoverItemId = getHoveredAtomId(render.ctab.atoms);
9940
+ var isHoveringOverAtom = hoverItemId !== null;
9941
+ if (isHoveringOverAtom) {
9942
+ var atomProps = _objectSpread$I({}, newAction.opts);
9943
+ var updatedAtoms = ketcherCore.fromAtomsAttrs(render.ctab, hoverItemId, atomProps, true);
9944
+ editor.update(updatedAtoms);
9945
+ } else {
9946
+ dispatch(onAction(newAction));
9947
+ }
9829
9948
  event.preventDefault();
9830
- } else if (window.clipboardData) {
9949
+ } else if (reactDeviceDetect.isIE) {
9831
9950
  exec(event);
9832
9951
  }
9833
9952
  }
9834
9953
  }
9954
+ function getHoveredAtomId(atoms) {
9955
+ var _iterator = _createForOfIteratorHelper$e(atoms.entries()),
9956
+ _step;
9957
+ try {
9958
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
9959
+ var _step$value = _slicedToArray__default["default"](_step.value, 2),
9960
+ id = _step$value[0],
9961
+ atom = _step$value[1];
9962
+ if (atom.hover) return id;
9963
+ }
9964
+ } catch (err) {
9965
+ _iterator.e(err);
9966
+ } finally {
9967
+ _iterator.f();
9968
+ }
9969
+ return null;
9970
+ }
9835
9971
  function setHotKey(key, actName, hotKeys) {
9836
9972
  if (Array.isArray(hotKeys[key])) hotKeys[key].push(actName);else hotKeys[key] = [actName];
9837
9973
  }
@@ -9859,7 +9995,7 @@ function checkGroupOnTool(group, actionTool) {
9859
9995
  return index;
9860
9996
  }
9861
9997
  var rxnTextPlain = /\$RXN\n+\s+0\s+0\s+0\n*/;
9862
- function initClipboard(dispatch, getState) {
9998
+ function initClipboard(dispatch) {
9863
9999
  var formats = Object.keys(ketcherCore.formatProperties).map(function (format) {
9864
10000
  return ketcherCore.formatProperties[format].mime;
9865
10001
  });
@@ -9906,7 +10042,7 @@ function clipData(editor) {
9906
10042
  var errorHandler = editor.errorHandler;
9907
10043
  if (struct.isBlank()) return null;
9908
10044
  var simpleObjectOrText = Boolean(struct.simpleObjects.size || struct.texts.size);
9909
- if (simpleObjectOrText && window.clipboardData) {
10045
+ if (simpleObjectOrText && reactDeviceDetect.isIE) {
9910
10046
  errorHandler('The structure you are trying to copy contains Simple object or/and Text object.' + 'To copy Simple object or Text object in Internet Explorer try "Copy as KET" button');
9911
10047
  return null;
9912
10048
  }
@@ -9920,8 +10056,8 @@ function clipData(editor) {
9920
10056
  res['text/plain'] = data;
9921
10057
  res[type] = data;
9922
10058
  return res;
9923
- } catch (ex) {
9924
- errorHandler(ex.message);
10059
+ } catch (e) {
10060
+ errorHandler(e.message);
9925
10061
  }
9926
10062
  return null;
9927
10063
  }
@@ -9955,7 +10091,7 @@ var mapDispatchToProps$d = function mapDispatchToProps(dispatch) {
9955
10091
  };
9956
10092
  var AppHiddenContainer = reactRedux.connect(null, mapDispatchToProps$d)(AppHidden);
9957
10093
 
9958
- var classes$E = {"button-common-styles":"Modal-module_button-common-styles__ko9E5","scrollbar":"Modal-module_scrollbar__yPIJc","modalOverlay":"Modal-module_modalOverlay__AzVeg","animate":"Modal-module_animate__pnPNj","hide":"Modal-module_hide__0CTey","smallScreen":"Modal-module_smallScreen__nzt2L"};
10094
+ var classes$F = {"button-common-styles":"Modal-module_button-common-styles__ko9E5","scrollbar":"Modal-module_scrollbar__yPIJc","modalOverlay":"Modal-module_modalOverlay__AzVeg","animate":"Modal-module_animate__pnPNj","hide":"Modal-module_hide__0CTey","smallScreen":"Modal-module_smallScreen__nzt2L"};
9959
10095
 
9960
10096
  var selectClasses = {"button-common-styles":"Select-module_button-common-styles__cgaVz","scrollbar":"Select-module_scrollbar__cA89D","dropdownList":"Select-module_dropdownList__rdcrH","selectContainer":"Select-module_selectContainer__yXT-t"};
9961
10097
 
@@ -9967,8 +10103,8 @@ var mediaSizes$1 = {
9967
10103
  var styles$c = {"button-common-styles":"Dialog-module_button-common-styles__HcaFV","scrollbar":"Dialog-module_scrollbar__9Iy27","dialog":"Dialog-module_dialog__IafFQ","hide":"Dialog-module_hide__6R16B","header":"Dialog-module_header__T7-24","btnContainer":"Dialog-module_btnContainer__TOLPx","buttonTop":"Dialog-module_buttonTop__ZhwZQ","closeButton":"Dialog-module_closeButton__Ch6UT","footer":"Dialog-module_footer__NTq5o","ok":"Dialog-module_ok__T4j7Z","cancel":"Dialog-module_cancel__RcR-D","withDivider":"Dialog-module_withDivider__8LsbA","body":"Dialog-module_body__YgzDR","withMargin":"Dialog-module_withMargin__SDH61"};
9968
10104
 
9969
10105
  var _excluded$t = ["children", "title", "params", "result", "valid", "buttons", "headerContent", "footerContent", "className", "buttonsNameMap", "needMargin", "withDivider", "focusable"];
9970
- function ownKeys$G(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; }
9971
- function _objectSpread$G(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$G(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$G(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
10106
+ function ownKeys$H(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; }
10107
+ function _objectSpread$H(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$H(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$H(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
9972
10108
  var Dialog = function Dialog(props) {
9973
10109
  var children = props.children,
9974
10110
  title = props.title,
@@ -10021,7 +10157,7 @@ var Dialog = function Dialog(props) {
10021
10157
  event.stopPropagation();
10022
10158
  }
10023
10159
  };
10024
- return jsxRuntime.jsxs("div", _objectSpread$G(_objectSpread$G({
10160
+ return jsxRuntime.jsxs("div", _objectSpread$H(_objectSpread$H({
10025
10161
  ref: dialogRef,
10026
10162
  role: "dialog",
10027
10163
  onSubmit: function onSubmit(event) {
@@ -10078,8 +10214,8 @@ var LoadingCircles = function LoadingCircles() {
10078
10214
  };
10079
10215
 
10080
10216
  var _excluded$s = ["id", "dist"];
10081
- function ownKeys$F(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; }
10082
- function _objectSpread$F(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$F(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$F(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
10217
+ function ownKeys$G(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; }
10218
+ function _objectSpread$G(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$G(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$G(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
10083
10219
  var SELECTION_DISTANCE_COEFFICIENT = 0.4;
10084
10220
  var SELECTION_WITHIN_TEXT = 0;
10085
10221
  var findMaps = {
@@ -10414,7 +10550,7 @@ function findClosestItem(restruct, pos, maps, skip, scale) {
10414
10550
  var id = item.id,
10415
10551
  dist = item.dist,
10416
10552
  other = _objectWithoutProperties__default["default"](item, _excluded$s);
10417
- return _objectSpread$F({
10553
+ return _objectSpread$G({
10418
10554
  map: mp,
10419
10555
  id: id,
10420
10556
  dist: dist
@@ -10741,6 +10877,7 @@ var AtomTool = function () {
10741
10877
  type: 1,
10742
10878
  stereo: ketcherCore.Bond.PATTERN.STEREO.NONE
10743
10879
  });
10880
+ this.editor.hoverIcon.show().attr('text', "".concat(atomProps.label)).attr('fill', "".concat(ketcherCore.ElementColor[atomProps.label]));
10744
10881
  if (editor.selection()) {
10745
10882
  var _editor$selection;
10746
10883
  if ((_editor$selection = editor.selection()) !== null && _editor$selection !== void 0 && _editor$selection.atoms) {
@@ -10824,12 +10961,31 @@ var AtomTool = function () {
10824
10961
  };
10825
10962
  }
10826
10963
  }
10964
+ }, {
10965
+ key: "mouseleave",
10966
+ value: function mouseleave() {
10967
+ this.editor.hoverIcon.hide();
10968
+ }
10969
+ }, {
10970
+ key: "mouseover",
10971
+ value: function mouseover() {
10972
+ this.editor.hoverIcon.show();
10973
+ }
10827
10974
  }, {
10828
10975
  key: "mousemove",
10829
10976
  value: function mousemove(event) {
10830
10977
  var rnd = this.editor.render;
10978
+ var layerX = event.layerX,
10979
+ layerY = event.layerY;
10831
10980
  if (!this.dragCtx || !this.dragCtx.item) {
10832
- this.editor.hover(this.editor.findItem(event, ['atoms', 'functionalGroups']));
10981
+ var _this$editor$hoverIco = this.editor.hoverIcon.getBBox(),
10982
+ height = _this$editor$hoverIco.height,
10983
+ width = _this$editor$hoverIco.width;
10984
+ this.editor.hoverIcon.attr({
10985
+ x: layerX - width / 2,
10986
+ y: layerY - height / 2
10987
+ });
10988
+ this.editor.hover(this.editor.findItem(event, ['atoms', 'functionalGroups']), null, event);
10833
10989
  return;
10834
10990
  }
10835
10991
  var dragCtx = this.dragCtx;
@@ -11231,12 +11387,16 @@ var BondTool = function () {
11231
11387
  beginPos = utils.calcNewAtomPos(atom === null || atom === void 0 ? void 0 : atom.pp.get_xy0(), xy1, event.ctrlKey);
11232
11388
  }
11233
11389
  }
11234
- if (dist > 0.3) dragCtx.action = ketcherCore.fromBondAddition(rnd.ctab, this.bondProps, beginAtom, endAtom, beginPos, endPos)[0];else delete dragCtx.action;
11390
+ if (dist > 0.3) {
11391
+ dragCtx.action = ketcherCore.fromBondAddition(rnd.ctab, this.bondProps, beginAtom, endAtom, beginPos, endPos)[0];
11392
+ } else {
11393
+ delete dragCtx.action;
11394
+ }
11235
11395
  this.editor.update(dragCtx.action, true);
11236
11396
  return true;
11237
11397
  }
11238
11398
  }
11239
- this.editor.hover(this.editor.findItem(event, ['atoms', 'bonds']));
11399
+ this.editor.hover(this.editor.findItem(event, ['atoms', 'bonds']), null, event);
11240
11400
  return true;
11241
11401
  }
11242
11402
  }, {
@@ -11370,7 +11530,7 @@ var ChainTool = function () {
11370
11530
  var editor = this.editor;
11371
11531
  var restruct = editor.render.ctab;
11372
11532
  var dragCtx = this.dragCtx;
11373
- editor.hover(this.editor.findItem(event, ['atoms', 'bonds']));
11533
+ editor.hover(this.editor.findItem(event, ['atoms', 'bonds']), null, event);
11374
11534
  if (!dragCtx) {
11375
11535
  return true;
11376
11536
  }
@@ -11504,7 +11664,7 @@ var ChargeTool = function () {
11504
11664
  if (ci && ci.map === 'atoms' && ketcherCore.Elements.get((_molecule$atoms$get = molecule.atoms.get(ci.id)) === null || _molecule$atoms$get === void 0 ? void 0 : _molecule$atoms$get.label)) {
11505
11665
  this.editor.hover(ci);
11506
11666
  } else {
11507
- this.editor.hover(null);
11667
+ this.editor.hover(null, null, event);
11508
11668
  }
11509
11669
  return true;
11510
11670
  }
@@ -12404,8 +12564,8 @@ function countOfSelectedComponents(restruct, atoms) {
12404
12564
  }, 0);
12405
12565
  }
12406
12566
 
12407
- function ownKeys$E(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; }
12408
- function _objectSpread$E(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$E(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$E(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
12567
+ function ownKeys$F(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; }
12568
+ function _objectSpread$F(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$F(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$F(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
12409
12569
  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; } } }; }
12410
12570
  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); }
12411
12571
  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; }
@@ -12589,7 +12749,7 @@ var SelectTool = function () {
12589
12749
  return true;
12590
12750
  }
12591
12751
  var maps = _classPrivateFieldGet__default["default"](this, _lassoHelper).fragment || event.ctrlKey ? ['frags', 'sgroups', 'functionalGroups', 'sgroupData', 'rgroups', 'rxnArrows', 'rxnPluses', 'enhancedFlags', 'simpleObjects', 'texts'] : ['atoms', 'bonds', 'sgroups', 'functionalGroups', 'sgroupData', 'rgroups', 'rxnArrows', 'rxnPluses', 'enhancedFlags', 'simpleObjects', 'texts'];
12592
- editor.hover(editor.findItem(event, maps, null));
12752
+ editor.hover(editor.findItem(event, maps, null), null, event);
12593
12753
  return true;
12594
12754
  }
12595
12755
  }, {
@@ -12675,6 +12835,16 @@ var SelectTool = function () {
12675
12835
  }
12676
12836
  var dragCtx = this.dragCtx;
12677
12837
  if (dragCtx && dragCtx.stopTapping) dragCtx.stopTapping();
12838
+ var possibleSaltOrSolvent = struct.sgroups.get(actualSgroupId);
12839
+ var isDraggingSaltOrSolventOnStructure = ketcherCore.SGroup.isSaltOrSolvent(possibleSaltOrSolvent === null || possibleSaltOrSolvent === void 0 ? void 0 : possibleSaltOrSolvent.item.data.name);
12840
+ if ((isDraggingSaltOrSolventOnStructure || this.isDraggingStructureOnSaltOrSolvent(dragCtx, struct.sgroups)) && dragCtx) {
12841
+ preventSaltAndSolventsMerge(struct, dragCtx, editor);
12842
+ delete this.dragCtx;
12843
+ if (_classPrivateFieldGet__default["default"](this, _lassoHelper).running()) {
12844
+ this.selectElementsOnCanvas(newSelected, editor, event);
12845
+ }
12846
+ return true;
12847
+ }
12678
12848
  if (dragCtx && dragCtx.item) {
12679
12849
  dragCtx.action = dragCtx.action ? ketcherCore.fromItemsFuse(struct, dragCtx.mergeItems).mergeWith(dragCtx.action) : ketcherCore.fromItemsFuse(struct, dragCtx.mergeItems);
12680
12850
  editor.hover(null);
@@ -12682,8 +12852,7 @@ var SelectTool = function () {
12682
12852
  if (dragCtx.action.operations.length !== 0) editor.update(dragCtx.action);
12683
12853
  delete this.dragCtx;
12684
12854
  } else if (_classPrivateFieldGet__default["default"](this, _lassoHelper).running()) {
12685
- var sel = newSelected.atoms.length > 0 ? selMerge(_classPrivateFieldGet__default["default"](this, _lassoHelper).end(), newSelected, false) : _classPrivateFieldGet__default["default"](this, _lassoHelper).end();
12686
- editor.selection(!event.shiftKey ? sel : selMerge(sel, editor.selection(), false));
12855
+ this.selectElementsOnCanvas(newSelected, editor, event);
12687
12856
  } else if (_classPrivateFieldGet__default["default"](this, _lassoHelper).fragment) {
12688
12857
  if (!event.shiftKey) editor.selection(null);
12689
12858
  }
@@ -12799,7 +12968,7 @@ var SelectTool = function () {
12799
12968
  } else if (ci.map === 'texts') {
12800
12969
  editor.selection(closestToSel(ci));
12801
12970
  var text = molecule.texts.get(ci.id);
12802
- var dialog = editor.event.elementEdit.dispatch(_objectSpread$E(_objectSpread$E({}, text), {}, {
12971
+ var dialog = editor.event.elementEdit.dispatch(_objectSpread$F(_objectSpread$F({}, text), {}, {
12803
12972
  type: 'text'
12804
12973
  }));
12805
12974
  dialog.then(function (_ref) {
@@ -12827,6 +12996,33 @@ var SelectTool = function () {
12827
12996
  delete this.dragCtx;
12828
12997
  this.editor.hover(null);
12829
12998
  }
12999
+ }, {
13000
+ key: "selectElementsOnCanvas",
13001
+ value: function selectElementsOnCanvas(elements, editor, event) {
13002
+ var sel = elements.atoms.length > 0 ? selMerge(_classPrivateFieldGet__default["default"](this, _lassoHelper).end(), elements, false) : _classPrivateFieldGet__default["default"](this, _lassoHelper).end();
13003
+ editor.selection(!event.shiftKey ? sel : selMerge(sel, editor.selection(), false));
13004
+ }
13005
+ }, {
13006
+ key: "isDraggingStructureOnSaltOrSolvent",
13007
+ value: function isDraggingStructureOnSaltOrSolvent(dragCtx, sgroups) {
13008
+ var isDraggingOnSaltOrSolventAtom;
13009
+ var isDraggingOnSaltOrSolventBond;
13010
+ if (dragCtx !== null && dragCtx !== void 0 && dragCtx.mergeItems) {
13011
+ var mergeAtoms = Array.from(dragCtx.mergeItems.atoms.values());
13012
+ var mergeBonds = Array.from(dragCtx.mergeItems.bonds.values());
13013
+ var sgroupsOnCanvas = Array.from(sgroups.values()).map(function (_ref2) {
13014
+ var item = _ref2.item;
13015
+ return item;
13016
+ });
13017
+ isDraggingOnSaltOrSolventAtom = mergeAtoms.some(function (atomId) {
13018
+ return ketcherCore.SGroup.isAtomInSaltOrSolvent(atomId, sgroupsOnCanvas);
13019
+ });
13020
+ isDraggingOnSaltOrSolventBond = mergeBonds.some(function (bondId) {
13021
+ return ketcherCore.SGroup.isBondInSaltOrSolvent(bondId, sgroupsOnCanvas);
13022
+ });
13023
+ }
13024
+ return isDraggingOnSaltOrSolventAtom || isDraggingOnSaltOrSolventBond;
13025
+ }
12830
13026
  }]);
12831
13027
  return SelectTool;
12832
13028
  }();
@@ -12852,6 +13048,17 @@ function uniqArray(dest, add, reversible) {
12852
13048
  return dest;
12853
13049
  }, []);
12854
13050
  }
13051
+ function preventSaltAndSolventsMerge(struct, dragCtx, editor) {
13052
+ var action = dragCtx.action ? ketcherCore.fromItemsFuse(struct, null).mergeWith(dragCtx.action) : ketcherCore.fromItemsFuse(struct, null);
13053
+ editor.hover(null);
13054
+ if (dragCtx.mergeItems) {
13055
+ editor.selection(null);
13056
+ }
13057
+ editor.update(action);
13058
+ editor.event.message.dispatch({
13059
+ info: false
13060
+ });
13061
+ }
12855
13062
 
12856
13063
  function _createForOfIteratorHelper$5(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray$5(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; } } }; }
12857
13064
  function _unsupportedIterableToArray$5(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray$5(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$5(o, minLen); }
@@ -13650,7 +13857,7 @@ var ReactionArrowTool = function () {
13650
13857
  }
13651
13858
  } else {
13652
13859
  var items = this.editor.findItem(event, ['rxnArrows']);
13653
- this.editor.hover(items);
13860
+ this.editor.hover(items, null, event);
13654
13861
  }
13655
13862
  }
13656
13863
  }, {
@@ -14355,7 +14562,7 @@ var TemplateTool = function () {
14355
14562
  value: function mousemove(event) {
14356
14563
  var restruct = this.editor.render.ctab;
14357
14564
  if (!this.dragCtx) {
14358
- this.editor.hover(this.editor.findItem(event, this.findItems));
14565
+ this.editor.hover(this.editor.findItem(event, this.findItems), null, event);
14359
14566
  return true;
14360
14567
  }
14361
14568
  var dragCtx = this.dragCtx;
@@ -14461,6 +14668,10 @@ var TemplateTool = function () {
14461
14668
  }
14462
14669
  var action;
14463
14670
  var pasteItems = null;
14671
+ if (ketcherCore.SGroup.isSaltOrSolvent(this.template.molecule.name)) {
14672
+ addSaltsAndSolventsOnCanvasWithoutMerge(restruct, this.template, dragCtx, this.editor);
14673
+ return true;
14674
+ }
14464
14675
  if (!dragCtx.action) {
14465
14676
  if (!ci) {
14466
14677
  var _fromTemplateOnCanvas3 = ketcherCore.fromTemplateOnCanvas(restruct, this.template, dragCtx.xy0, 0);
@@ -14508,11 +14719,15 @@ var TemplateTool = function () {
14508
14719
  }
14509
14720
  }
14510
14721
  this.editor.selection(null);
14511
- if (!dragCtx.mergeItems && pasteItems && this.mode !== 'fg') dragCtx.mergeItems = ketcherCore.getItemsToFuse(this.editor, pasteItems);
14722
+ if (!dragCtx.mergeItems && pasteItems && this.mode !== 'fg') {
14723
+ dragCtx.mergeItems = ketcherCore.getItemsToFuse(this.editor, pasteItems);
14724
+ }
14512
14725
  dragCtx.action = dragCtx.action ? ketcherCore.fromItemsFuse(restruct, dragCtx.mergeItems).mergeWith(dragCtx.action) : ketcherCore.fromItemsFuse(restruct, dragCtx.mergeItems);
14513
14726
  this.editor.hover(null);
14514
14727
  var completeAction = dragCtx.action;
14515
- if (completeAction && !completeAction.isDummy()) this.editor.update(completeAction);
14728
+ if (completeAction && !completeAction.isDummy()) {
14729
+ this.editor.update(completeAction);
14730
+ }
14516
14731
  this.editor.event.message.dispatch({
14517
14732
  info: false
14518
14733
  });
@@ -14531,6 +14746,17 @@ var TemplateTool = function () {
14531
14746
  }]);
14532
14747
  return TemplateTool;
14533
14748
  }();
14749
+ function addSaltsAndSolventsOnCanvasWithoutMerge(restruct, template, dragCtx, editor) {
14750
+ var _fromTemplateOnCanvas5 = ketcherCore.fromTemplateOnCanvas(restruct, template, dragCtx.xy0, 0),
14751
+ _fromTemplateOnCanvas6 = _slicedToArray__default["default"](_fromTemplateOnCanvas5, 1),
14752
+ action = _fromTemplateOnCanvas6[0];
14753
+ editor.update(action);
14754
+ editor.selection(null);
14755
+ editor.hover(null);
14756
+ editor.event.message.dispatch({
14757
+ info: false
14758
+ });
14759
+ }
14534
14760
  function getSign(molecule, bond, v) {
14535
14761
  var begin = molecule.atoms.get(bond.begin).pp;
14536
14762
  var end = molecule.atoms.get(bond.end).pp;
@@ -14578,7 +14804,7 @@ var TextTool = function () {
14578
14804
  this.dragCtx.action = ketcherCore.fromMultipleMove(render.ctab, this.editor.selection() || {}, render.page2obj(event).sub(this.dragCtx.xy0));
14579
14805
  this.editor.update(this.dragCtx.action, true);
14580
14806
  } else {
14581
- this.editor.hover(this.editor.findItem(event, ['texts']));
14807
+ this.editor.hover(this.editor.findItem(event, ['texts']), null, event);
14582
14808
  }
14583
14809
  }
14584
14810
  }, {
@@ -14756,6 +14982,7 @@ function _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedec
14756
14982
  function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
14757
14983
  var SCALE = 40;
14758
14984
  var HISTORY_SIZE = 32;
14985
+ var HOVER_ICON_OPACITY = 0.7;
14759
14986
  var structObjects = ['atoms', 'bonds', 'frags', 'sgroups', 'sgroupData', 'rgroups', 'rxnArrows', 'rxnPluses', 'enhancedFlags', 'simpleObjects', 'texts'];
14760
14987
  var highlightTargets = ['atoms', 'bonds', 'rxnArrows', 'rxnPluses', 'functionalGroups', 'frags', 'merge', 'rgroups', 'sgroups', 'sgroupData', 'enhancedFlags', 'simpleObjects', 'texts'];
14761
14988
  function selectStereoFlagsIfNecessary(atoms, expAtoms) {
@@ -14792,6 +15019,7 @@ var Editor$3 = function () {
14792
15019
  this.highlights = new Highlighter(this);
14793
15020
  this.renderAndRecoordinateStruct = this.renderAndRecoordinateStruct.bind(this);
14794
15021
  this.setOptions = this.setOptions.bind(this);
15022
+ this.hoverIcon = this.render.paper.text(0, 0, '').attr('font-size', options.fontsz).attr('opacity', HOVER_ICON_OPACITY);
14795
15023
  this.event = {
14796
15024
  message: new subscription.Subscription(),
14797
15025
  elementEdit: new subscription.PipelineSubscription(),
@@ -14808,7 +15036,8 @@ var Editor$3 = function () {
14808
15036
  dearomatizeStruct: new subscription.PipelineSubscription(),
14809
15037
  enhancedStereoEdit: new subscription.PipelineSubscription(),
14810
15038
  confirm: new subscription.PipelineSubscription(),
14811
- cursor: new subscription.PipelineSubscription()
15039
+ cursor: new subscription.PipelineSubscription(),
15040
+ showInfo: new subscription.PipelineSubscription()
14812
15041
  };
14813
15042
  domEventSetup(this, clientArea);
14814
15043
  }
@@ -14838,6 +15067,10 @@ var Editor$3 = function () {
14838
15067
  this._tool.cancel();
14839
15068
  }
14840
15069
  var tool = new tools[name](this, opts);
15070
+ var isAtomToolChosen = name === 'atom';
15071
+ if (!isAtomToolChosen) {
15072
+ this.hoverIcon.hide();
15073
+ }
14841
15074
  if (!tool || tool.isNotActiveTool) {
14842
15075
  return null;
14843
15076
  }
@@ -14854,8 +15087,8 @@ var Editor$3 = function () {
14854
15087
  value: function renderAndRecoordinateStruct(struct) {
14855
15088
  var action = ketcherCore.fromNewCanvas(this.render.ctab, struct);
14856
15089
  this.update(action);
14857
- getStructCenter(this.render.ctab);
14858
- recoordinate(this);
15090
+ var structCenter = getStructCenter(this.render.ctab);
15091
+ recoordinate(this, structCenter);
14859
15092
  return this.render.ctab.molecule;
14860
15093
  }
14861
15094
  }, {
@@ -14904,8 +15137,8 @@ var Editor$3 = function () {
14904
15137
  }
14905
15138
  this.render.setZoom(value);
14906
15139
  var selection = this.selection();
14907
- getStructCenter(this.render.ctab, selection);
14908
- recoordinate(this);
15140
+ var structCenter = getStructCenter(this.render.ctab, selection);
15141
+ recoordinate(this, structCenter);
14909
15142
  this.render.update();
14910
15143
  return this.render.options.zoom;
14911
15144
  }
@@ -14950,13 +15183,35 @@ var Editor$3 = function () {
14950
15183
  }
14951
15184
  }, {
14952
15185
  key: "hover",
14953
- value: function hover(ci, newTool) {
15186
+ value: function hover(ci, newTool, event) {
14954
15187
  var tool = newTool || this._tool;
15188
+ var infoPanelData = null;
14955
15189
  if ('ci' in tool && (!ci || tool.ci.map !== ci.map || tool.ci.id !== ci.id)) {
14956
15190
  setHover(tool.ci, false, this.render);
14957
15191
  delete tool.ci;
14958
15192
  }
14959
15193
  if (ci && setHover(ci, true, this.render)) tool.ci = ci;
15194
+ if (!event) return;
15195
+ var checkFunctionGroupTypes = ['sgroups', 'functionalGroups'];
15196
+ var closestCollapsibleStructures = this.findItem(event, checkFunctionGroupTypes);
15197
+ if (closestCollapsibleStructures) {
15198
+ var _this$struct;
15199
+ var sGroup = (_this$struct = this.struct()) === null || _this$struct === void 0 ? void 0 : _this$struct.sgroups.get(closestCollapsibleStructures.id);
15200
+ if (sGroup && !sGroup.data.expanded) {
15201
+ var groupName = sGroup.data.name;
15202
+ var groupStruct = ketcherCore.FunctionalGroup.getFunctionalGroupByName(groupName);
15203
+ infoPanelData = {
15204
+ groupStruct: groupStruct,
15205
+ event: event,
15206
+ sGroup: sGroup
15207
+ };
15208
+ }
15209
+ }
15210
+ if (infoPanelData) {
15211
+ this.event.showInfo.dispatch(infoPanelData);
15212
+ } else {
15213
+ this.event.showInfo.dispatch(null);
15214
+ }
14960
15215
  }
14961
15216
  }, {
14962
15217
  key: "update",
@@ -15143,7 +15398,11 @@ function domEventSetup(editor, clientArea) {
15143
15398
  }
15144
15399
  function recoordinate(editor, rp
15145
15400
  ) {
15146
- editor.render.setScrollOffset(0, 0);
15401
+ if (rp) {
15402
+ editor.render.setScrollOffset(rp.x, rp.y);
15403
+ } else {
15404
+ editor.render.setScrollOffset(0, 0);
15405
+ }
15147
15406
  }
15148
15407
  function getStructCenter(ReStruct, selection) {
15149
15408
  var bb = ReStruct.getVBoxObj(selection || {});
@@ -15185,11 +15444,12 @@ function setHover(ci, visible, render) {
15185
15444
  return true;
15186
15445
  }
15187
15446
 
15188
- var classes$D = {"isHidden":"ContextMenu-module_isHidden__eOjF4"};
15447
+ var classes$E = {"isHidden":"ContextMenu-module_isHidden__eOjF4"};
15189
15448
 
15190
15449
  var FGContextMenu = function FGContextMenu() {
15191
15450
  var _useAppContext = useAppContext(),
15192
15451
  getKetcherInstance = _useAppContext.getKetcherInstance;
15452
+ var dispatch = reactRedux.useDispatch();
15193
15453
  var handleExpand = function handleExpand() {
15194
15454
  var editor = getKetcherInstance().editor;
15195
15455
  var action = new ketcherCore.Action();
@@ -15202,6 +15462,10 @@ var FGContextMenu = function FGContextMenu() {
15202
15462
  editor.update(action);
15203
15463
  setShowSGroupMenu(false);
15204
15464
  setTargetItems([]);
15465
+ highlightFG(dispatch, {
15466
+ group: null,
15467
+ id: null
15468
+ });
15205
15469
  };
15206
15470
  var handleRemove = function handleRemove() {
15207
15471
  var editor = getKetcherInstance().editor;
@@ -15283,7 +15547,7 @@ var FGContextMenu = function FGContextMenu() {
15283
15547
  onShow: function onShow(e) {
15284
15548
  return showMenu(e);
15285
15549
  },
15286
- className: clsx__default["default"](_defineProperty__default["default"]({}, classes$D.isHidden, !showSGroupMenu)),
15550
+ className: clsx__default["default"](_defineProperty__default["default"]({}, classes$E.isHidden, !showSGroupMenu)),
15287
15551
  children: [jsxRuntime.jsxs(reactContextmenu.MenuItem, {
15288
15552
  onClick: handleExpand,
15289
15553
  children: [targetItems.length && targetItems[0].isExpanded ? 'Contract ' : 'Expand ', "Abbreviation"]
@@ -15296,7 +15560,7 @@ var FGContextMenu = function FGContextMenu() {
15296
15560
  });
15297
15561
  };
15298
15562
 
15299
- var classes$C = {"button-common-styles":"StructEditor-module_button-common-styles__3P7PO","scrollbar":"StructEditor-module_scrollbar__SUs-o","spinnerOverlay":"StructEditor-module_spinnerOverlay__5H1IM","canvas":"StructEditor-module_canvas__LLnzh","measureLog":"StructEditor-module_measureLog__B2wuy","visible":"StructEditor-module_visible__3eFNB","intermediateCanvas":"StructEditor-module_intermediateCanvas__fR3ws","enableCursor":"StructEditor-module_enableCursor__Qla0A"};
15563
+ var classes$D = {"button-common-styles":"StructEditor-module_button-common-styles__3P7PO","scrollbar":"StructEditor-module_scrollbar__SUs-o","spinnerOverlay":"StructEditor-module_spinnerOverlay__5H1IM","canvas":"StructEditor-module_canvas__LLnzh","measureLog":"StructEditor-module_measureLog__B2wuy","visible":"StructEditor-module_visible__3eFNB","intermediateCanvas":"StructEditor-module_intermediateCanvas__fR3ws","enableCursor":"StructEditor-module_enableCursor__Qla0A"};
15300
15564
 
15301
15565
  var Cursor = function Cursor(_ref) {
15302
15566
  var Icon = _ref.Icon,
@@ -15368,11 +15632,242 @@ var Cursor = function Cursor(_ref) {
15368
15632
  });
15369
15633
  };
15370
15634
 
15371
- var _excluded$r = ["Tag", "struct", "tool", "toolOpts", "options", "onInit", "onSelectionChange", "onElementEdit", "onEnhancedStereoEdit", "onQuickEdit", "onBondEdit", "onRgroupEdit", "onSgroupEdit", "onSdataEdit", "onRemoveFG", "onMessage", "onAromatizeStruct", "onDearomatizeStruct", "onAttachEdit", "indigoVerification", "onCipChange", "className", "onConfirm", "showAttachmentPoints"];
15372
- function ownKeys$D(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; }
15373
- function _objectSpread$D(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$D(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$D(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
15635
+ var _excluded$r = ["struct", "Tag"];
15374
15636
  function _createSuper$a(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$a(); return function _createSuperInternal() { var Super = _getPrototypeOf__default["default"](Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf__default["default"](this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn__default["default"](this, result); }; }
15375
15637
  function _isNativeReflectConstruct$a() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
15638
+ function ownKeys$E(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; }
15639
+ function _objectSpread$E(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$E(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$E(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
15640
+ function prepareStruct(struct) {
15641
+ if (struct.sgroups.size > 0) {
15642
+ var newStruct = struct.clone();
15643
+ newStruct.sgroups["delete"](0);
15644
+ return newStruct;
15645
+ }
15646
+ return struct;
15647
+ }
15648
+ var renderCache = new Map();
15649
+ function renderStruct(el, struct) {
15650
+ var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
15651
+ if (el && struct) {
15652
+ var _options$cachePrefix = options.cachePrefix,
15653
+ cachePrefix = _options$cachePrefix === void 0 ? '' : _options$cachePrefix;
15654
+ var cacheKey = "".concat(cachePrefix).concat(struct.name);
15655
+ if (renderCache.has(cacheKey)) {
15656
+ el.innerHTML = renderCache.get(cacheKey);
15657
+ return;
15658
+ }
15659
+ var preparedStruct = prepareStruct(struct);
15660
+ preparedStruct.initHalfBonds();
15661
+ preparedStruct.initNeighbors();
15662
+ preparedStruct.setImplicitHydrogen();
15663
+ preparedStruct.markFragments();
15664
+ var rnd = new ketcherCore.Render(el, _objectSpread$E({
15665
+ autoScale: true
15666
+ }, options));
15667
+ rnd.setMolecule(preparedStruct);
15668
+ rnd.update(true, options.viewSz);
15669
+ renderCache.set(cacheKey, rnd.clientArea.innerHTML);
15670
+ }
15671
+ }
15672
+ var StructRender = function (_Component) {
15673
+ _inherits__default["default"](StructRender, _Component);
15674
+ var _super = _createSuper$a(StructRender);
15675
+ function StructRender(props) {
15676
+ var _this;
15677
+ _classCallCheck__default["default"](this, StructRender);
15678
+ _this = _super.call(this, props);
15679
+ _this.tagRef = React.createRef();
15680
+ return _this;
15681
+ }
15682
+ _createClass__default["default"](StructRender, [{
15683
+ key: "shouldComponentUpdate",
15684
+ value: function shouldComponentUpdate(previousProps) {
15685
+ return Boolean(this.props.id && this.props.id !== previousProps.id);
15686
+ }
15687
+ }, {
15688
+ key: "update",
15689
+ value: function update() {
15690
+ var el = this.tagRef.current;
15691
+ var _this$props = this.props,
15692
+ struct = _this$props.struct,
15693
+ options = _this$props.options;
15694
+ var parsedStruct;
15695
+ if (!(struct instanceof ketcherCore.Struct)) {
15696
+ try {
15697
+ var molSerialzer = new ketcherCore.MolSerializer();
15698
+ parsedStruct = molSerialzer.deserialize(struct);
15699
+ } catch (e) {
15700
+ parsedStruct = null;
15701
+ }
15702
+ } else {
15703
+ parsedStruct = struct;
15704
+ }
15705
+ el === null || el === void 0 ? void 0 : el.childNodes.forEach(function (node) {
15706
+ node.remove();
15707
+ });
15708
+ renderStruct(el, parsedStruct, options);
15709
+ }
15710
+ }, {
15711
+ key: "componentDidMount",
15712
+ value: function componentDidMount() {
15713
+ this.update();
15714
+ }
15715
+ }, {
15716
+ key: "componentDidUpdate",
15717
+ value: function componentDidUpdate() {
15718
+ this.update();
15719
+ }
15720
+ }, {
15721
+ key: "render",
15722
+ value: function render() {
15723
+ var _this$props2 = this.props,
15724
+ struct = _this$props2.struct,
15725
+ _this$props2$Tag = _this$props2.Tag,
15726
+ Tag = _this$props2$Tag === void 0 ? 'div' : _this$props2$Tag,
15727
+ props = _objectWithoutProperties__default["default"](_this$props2, _excluded$r);
15728
+ return jsxRuntime.jsx(Tag, _objectSpread$E(_objectSpread$E({
15729
+ ref: this.tagRef
15730
+ }, props), {}, {
15731
+ children: struct ? null : 'No molecule'
15732
+ }));
15733
+ }
15734
+ }]);
15735
+ return StructRender;
15736
+ }(React.Component);
15737
+
15738
+ var functionalGroupsSelector = function functionalGroupsSelector(state) {
15739
+ return state.functionalGroups.lib;
15740
+ };
15741
+ var functionGroupInfoSelector = function functionGroupInfoSelector(state) {
15742
+ return state.functionalGroups.functionalGroupInfo;
15743
+ };
15744
+
15745
+ var classes$C = {"infoPanel":"InfoPanel-module_infoPanel__irvZL"};
15746
+
15747
+ function ownKeys$D(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; }
15748
+ function _objectSpread$D(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$D(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$D(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
15749
+ var HOVER_DELAY = 400;
15750
+ var HOVER_PANEL_PADDING = 20;
15751
+ function getSGroupFirstAtom(sGroup, render) {
15752
+ var _render$ctab$atoms, _render$ctab$atoms$ge;
15753
+ var firstSgroupAtom = sGroup.firstSgroupAtom;
15754
+ if (firstSgroupAtom) return firstSgroupAtom.pp;
15755
+ var _sGroup$atoms = _slicedToArray__default["default"](sGroup.atoms, 1),
15756
+ firstAtomId = _sGroup$atoms[0];
15757
+ return ((_render$ctab$atoms = render.ctab.atoms) === null || _render$ctab$atoms === void 0 ? void 0 : (_render$ctab$atoms$ge = _render$ctab$atoms.get(firstAtomId)) === null || _render$ctab$atoms$ge === void 0 ? void 0 : _render$ctab$atoms$ge.a.pp) || new ketcherCore.Vec2(0, 0);
15758
+ }
15759
+ function getPanelPosition(clientX, clientY, render, sGroup) {
15760
+ var width = 0;
15761
+ var height = 0;
15762
+ var x = 0;
15763
+ var y = 0;
15764
+ if (sGroup) {
15765
+ var _render$clientArea, _render$clientArea2, _render$options$offse, _render$clientArea3, _render$options, _render$options$offse2, _render$clientArea4;
15766
+ var groupBoundingBox = sGroup.areas[0];
15767
+ var start = ketcherCore.Scale.obj2scaled(groupBoundingBox.p0, render.options);
15768
+ var end = ketcherCore.Scale.obj2scaled(groupBoundingBox.p1, render.options);
15769
+ width = end.x - start.x;
15770
+ height = end.y - start.y;
15771
+ var firstAtomPosition = getSGroupFirstAtom(sGroup, render);
15772
+ var panelPosition = ketcherCore.Scale.obj2scaled(firstAtomPosition, {
15773
+ scale: render.options.scale * render.options.zoom
15774
+ });
15775
+ x = panelPosition.x - width / 2 - HOVER_PANEL_PADDING;
15776
+ y = panelPosition.y + HOVER_PANEL_PADDING;
15777
+ var viewportRightLimit = (render === null || render === void 0 ? void 0 : (_render$clientArea = render.clientArea) === null || _render$clientArea === void 0 ? void 0 : _render$clientArea.clientWidth) - width / 2;
15778
+ var viewportLeftLimit = HOVER_PANEL_PADDING * 2 + width / 2;
15779
+ var viewportBottomLimit = (render === null || render === void 0 ? void 0 : (_render$clientArea2 = render.clientArea) === null || _render$clientArea2 === void 0 ? void 0 : _render$clientArea2.clientHeight) - height;
15780
+ if (clientX > viewportRightLimit) {
15781
+ x = panelPosition.x - width - HOVER_PANEL_PADDING;
15782
+ } else if (clientX < viewportLeftLimit) {
15783
+ x = panelPosition.x - HOVER_PANEL_PADDING;
15784
+ }
15785
+ if (clientY > viewportBottomLimit) {
15786
+ y = panelPosition.y - height - HOVER_PANEL_PADDING * 3;
15787
+ }
15788
+ var scrollOffsetX = (render === null || render === void 0 ? void 0 : (_render$options$offse = render.options.offset) === null || _render$options$offse === void 0 ? void 0 : _render$options$offse.x) - (render === null || render === void 0 ? void 0 : (_render$clientArea3 = render.clientArea) === null || _render$clientArea3 === void 0 ? void 0 : _render$clientArea3.scrollLeft);
15789
+ var scrollOffsetY = (render === null || render === void 0 ? void 0 : (_render$options = render.options) === null || _render$options === void 0 ? void 0 : (_render$options$offse2 = _render$options.offset) === null || _render$options$offse2 === void 0 ? void 0 : _render$options$offse2.y) - (render === null || render === void 0 ? void 0 : (_render$clientArea4 = render.clientArea) === null || _render$clientArea4 === void 0 ? void 0 : _render$clientArea4.scrollTop);
15790
+ x += scrollOffsetX;
15791
+ y += scrollOffsetY;
15792
+ }
15793
+ return [new ketcherCore.Vec2(x, y), new ketcherCore.Vec2(width, height)];
15794
+ }
15795
+ var InfoPanel = function InfoPanel(props) {
15796
+ var _sGroup$data;
15797
+ var _props$clientX = props.clientX,
15798
+ clientX = _props$clientX === void 0 ? 0 : _props$clientX,
15799
+ _props$clientY = props.clientY,
15800
+ clientY = _props$clientY === void 0 ? 0 : _props$clientY,
15801
+ render = props.render,
15802
+ className = props.className,
15803
+ groupStruct = props.groupStruct,
15804
+ sGroup = props.sGroup;
15805
+ var _useState = React.useState(null),
15806
+ _useState2 = _slicedToArray__default["default"](_useState, 2),
15807
+ molecule = _useState2[0],
15808
+ setMolecule = _useState2[1];
15809
+ var childRef = React.useRef(null);
15810
+ var groupName = sGroup === null || sGroup === void 0 ? void 0 : (_sGroup$data = sGroup.data) === null || _sGroup$data === void 0 ? void 0 : _sGroup$data.name;
15811
+ var timer;
15812
+ React.useEffect(function () {
15813
+ if (groupStruct) {
15814
+ timer = setTimeout(function () {
15815
+ setMolecule(groupStruct.clone());
15816
+ }, HOVER_DELAY);
15817
+ } else {
15818
+ setMolecule(null);
15819
+ }
15820
+ return function () {
15821
+ return clearTimeout(timer);
15822
+ };
15823
+ }, [groupName]);
15824
+ var _getPanelPosition = getPanelPosition(clientX, clientY, render, sGroup),
15825
+ _getPanelPosition2 = _slicedToArray__default["default"](_getPanelPosition, 2),
15826
+ position = _getPanelPosition2[0],
15827
+ size = _getPanelPosition2[1];
15828
+ var x = position.x,
15829
+ y = position.y;
15830
+ var width = size.x;
15831
+ var height = size.y;
15832
+ return molecule && jsxRuntime.jsx("div", {
15833
+ style: {
15834
+ left: x + 'px',
15835
+ top: y + 'px'
15836
+ },
15837
+ className: clsx__default["default"](classes$C.infoPanel, className),
15838
+ children: jsxRuntime.jsx(StructRender, _objectSpread$D(_objectSpread$D({
15839
+ struct: molecule
15840
+ }, props), {}, {
15841
+ id: groupName,
15842
+ ref: childRef,
15843
+ options: _objectSpread$D(_objectSpread$D({}, render.options), {}, {
15844
+ autoScale: true,
15845
+ autoScaleMargin: 0,
15846
+ rescaleAmount: 1,
15847
+ cachePrefix: 'infoPanel',
15848
+ viewSz: new ketcherCore.Vec2(width, height),
15849
+ width: width,
15850
+ height: height
15851
+ })
15852
+ }))
15853
+ });
15854
+ };
15855
+ var InfoPanel$1 = reactRedux.connect(function (store) {
15856
+ var _functionGroupInfoSel, _functionGroupInfoSel2, _functionGroupInfoSel3, _functionGroupInfoSel4, _functionGroupInfoSel5, _functionGroupInfoSel6, _store$editor, _store$editor$render, _store$editor$render$;
15857
+ return {
15858
+ clientX: ((_functionGroupInfoSel = functionGroupInfoSelector(store)) === null || _functionGroupInfoSel === void 0 ? void 0 : (_functionGroupInfoSel2 = _functionGroupInfoSel.event) === null || _functionGroupInfoSel2 === void 0 ? void 0 : _functionGroupInfoSel2.clientX) || 0,
15859
+ clientY: ((_functionGroupInfoSel3 = functionGroupInfoSelector(store)) === null || _functionGroupInfoSel3 === void 0 ? void 0 : (_functionGroupInfoSel4 = _functionGroupInfoSel3.event) === null || _functionGroupInfoSel4 === void 0 ? void 0 : _functionGroupInfoSel4.clientY) || 0,
15860
+ groupStruct: ((_functionGroupInfoSel5 = functionGroupInfoSelector(store)) === null || _functionGroupInfoSel5 === void 0 ? void 0 : _functionGroupInfoSel5.groupStruct) || null,
15861
+ sGroup: ((_functionGroupInfoSel6 = functionGroupInfoSelector(store)) === null || _functionGroupInfoSel6 === void 0 ? void 0 : _functionGroupInfoSel6.sGroup) || null,
15862
+ render: (_store$editor = store.editor) === null || _store$editor === void 0 ? void 0 : (_store$editor$render = _store$editor.render) === null || _store$editor$render === void 0 ? void 0 : (_store$editor$render$ = _store$editor$render.ctab) === null || _store$editor$render$ === void 0 ? void 0 : _store$editor$render$.render
15863
+ };
15864
+ })(InfoPanel);
15865
+
15866
+ var _excluded$q = ["Tag", "struct", "tool", "toolOpts", "options", "onInit", "onSelectionChange", "onElementEdit", "onEnhancedStereoEdit", "onQuickEdit", "onBondEdit", "onRgroupEdit", "onSgroupEdit", "onSdataEdit", "onRemoveFG", "onMessage", "onAromatizeStruct", "onDearomatizeStruct", "onAttachEdit", "indigoVerification", "onCipChange", "className", "onConfirm", "onShowInfo", "showAttachmentPoints"];
15867
+ function ownKeys$C(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; }
15868
+ function _objectSpread$C(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$C(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$C(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
15869
+ function _createSuper$9(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$9(); return function _createSuperInternal() { var Super = _getPrototypeOf__default["default"](Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf__default["default"](this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn__default["default"](this, result); }; }
15870
+ function _isNativeReflectConstruct$9() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
15376
15871
  function setupEditor(editor, props) {
15377
15872
  var oldProps = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
15378
15873
  var struct = props.struct,
@@ -15409,13 +15904,15 @@ function removeEditorHandlers(editor, props) {
15409
15904
  }
15410
15905
  var StructEditor = function (_Component) {
15411
15906
  _inherits__default["default"](StructEditor, _Component);
15412
- var _super = _createSuper$a(StructEditor);
15907
+ var _super = _createSuper$9(StructEditor);
15413
15908
  function StructEditor(props) {
15414
15909
  var _this;
15415
15910
  _classCallCheck__default["default"](this, StructEditor);
15416
15911
  _this = _super.call(this, props);
15417
15912
  _this.state = {
15418
- enableCursor: false
15913
+ enableCursor: false,
15914
+ clientX: 0,
15915
+ clientY: 0
15419
15916
  };
15420
15917
  _this.editorRef = React.createRef();
15421
15918
  _this.logRef = React.createRef();
@@ -15435,7 +15932,7 @@ var StructEditor = function (_Component) {
15435
15932
  key: "componentDidMount",
15436
15933
  value: function componentDidMount() {
15437
15934
  var _this2 = this;
15438
- this.editor = new Editor$3(this.editorRef.current, _objectSpread$D({}, this.props.options));
15935
+ this.editor = new Editor$3(this.editorRef.current, _objectSpread$C({}, this.props.options));
15439
15936
  setupEditor(this.editor, this.props);
15440
15937
  if (this.props.onInit) this.props.onInit(this.editor);
15441
15938
  this.editor.event.message.add(function (msg) {
@@ -15447,15 +15944,15 @@ var StructEditor = function (_Component) {
15447
15944
  } catch (_unused) {
15448
15945
  el.innerHTML = msg.info;
15449
15946
  }
15450
- el.classList.add(classes$C.visible);
15947
+ el.classList.add(classes$D.visible);
15451
15948
  } else {
15452
- el.classList.remove(classes$C.visible);
15949
+ el.classList.remove(classes$D.visible);
15453
15950
  }
15454
15951
  });
15455
15952
  this.editor.event.cursor.add(function (csr) {
15456
15953
  switch (csr.status) {
15457
15954
  case 'enable':
15458
- _this2.editorRef.current.classList.add(classes$C.enableCursor);
15955
+ _this2.editorRef.current.classList.add(classes$D.enableCursor);
15459
15956
  var _this2$editorRef$curr = _this2.editorRef.current.getBoundingClientRect(),
15460
15957
  left = _this2$editorRef$curr.left,
15461
15958
  top = _this2$editorRef$curr.top,
@@ -15472,25 +15969,27 @@ var StructEditor = function (_Component) {
15472
15969
  }
15473
15970
  break;
15474
15971
  case 'move':
15475
- _this2.editorRef.current.classList.add(classes$C.enableCursor);
15972
+ _this2.editorRef.current.classList.add(classes$D.enableCursor);
15476
15973
  _this2.setState({
15477
- enableCursor: true
15974
+ enableCursor: true,
15975
+ clientX: clientX,
15976
+ clientY: clientY
15478
15977
  });
15479
15978
  break;
15480
15979
  case 'disable':
15481
- _this2.editorRef.current.classList.remove(classes$C.enableCursor);
15980
+ _this2.editorRef.current.classList.remove(classes$D.enableCursor);
15482
15981
  _this2.setState({
15483
15982
  enableCursor: false
15484
15983
  });
15485
15984
  break;
15486
15985
  case 'leave':
15487
- _this2.editorRef.current.classList.remove(classes$C.enableCursor);
15986
+ _this2.editorRef.current.classList.remove(classes$D.enableCursor);
15488
15987
  _this2.setState({
15489
15988
  enableCursor: false
15490
15989
  });
15491
15990
  break;
15492
15991
  case 'mouseover':
15493
- _this2.editorRef.current.classList.add(classes$C.enableCursor);
15992
+ _this2.editorRef.current.classList.add(classes$D.enableCursor);
15494
15993
  _this2.setState({
15495
15994
  enableCursor: true
15496
15995
  });
@@ -15534,10 +16033,11 @@ var StructEditor = function (_Component) {
15534
16033
  _this$props.onCipChange;
15535
16034
  var className = _this$props.className;
15536
16035
  _this$props.onConfirm;
16036
+ _this$props.onShowInfo;
15537
16037
  _this$props.showAttachmentPoints;
15538
- var props = _objectWithoutProperties__default["default"](_this$props, _excluded$r);
15539
- return jsxRuntime.jsxs(Tag, _objectSpread$D(_objectSpread$D({
15540
- className: clsx__default["default"](classes$C.canvas, className),
16038
+ var props = _objectWithoutProperties__default["default"](_this$props, _excluded$q);
16039
+ return jsxRuntime.jsxs(Tag, _objectSpread$C(_objectSpread$C({
16040
+ className: clsx__default["default"](classes$D.canvas, className),
15541
16041
  onMouseDown: function onMouseDown(event) {
15542
16042
  return event.preventDefault();
15543
16043
  }
@@ -15550,7 +16050,7 @@ var StructEditor = function (_Component) {
15550
16050
  holdToDisplay: -1,
15551
16051
  children: [jsxRuntime.jsx("div", {
15552
16052
  ref: this.editorRef,
15553
- className: clsx__default["default"](classes$C.intermediateCanvas),
16053
+ className: clsx__default["default"](classes$D.intermediateCanvas),
15554
16054
  onMouseDown: function onMouseDown(event) {
15555
16055
  return event.preventDefault();
15556
16056
  }
@@ -15559,13 +16059,13 @@ var StructEditor = function (_Component) {
15559
16059
  PressedIcon: SvgCompressedHand,
15560
16060
  enableHandTool: this.state.enableCursor
15561
16061
  }), jsxRuntime.jsx("div", {
15562
- className: classes$C.measureLog,
16062
+ className: classes$D.measureLog,
15563
16063
  ref: this.logRef
15564
16064
  }), indigoVerification && jsxRuntime.jsx("div", {
15565
- className: classes$C.spinnerOverlay,
16065
+ className: classes$D.spinnerOverlay,
15566
16066
  children: jsxRuntime.jsx(LoadingCircles, {})
15567
16067
  })]
15568
- }), jsxRuntime.jsx(FGContextMenu, {})]
16068
+ }), jsxRuntime.jsx(InfoPanel$1, _objectSpread$C(_objectSpread$C({}, this.state), this.props)), jsxRuntime.jsx(FGContextMenu, {})]
15569
16069
  }));
15570
16070
  }
15571
16071
  }]);
@@ -15758,19 +16258,19 @@ var ErrorPopover = function ErrorPopover(_ref) {
15758
16258
  });
15759
16259
  };
15760
16260
 
15761
- var classes$A = {"fieldSetLabel":"input-module_fieldSetLabel__DxKa5","checkbox":"input-module_checkbox__CowSc","radioButton":"input-module_radioButton__2eHO0","slider":"input-module_slider__-Xsc0","select":"input-module_select__GhgBs","input":"input-module_input__WzHgL"};
16261
+ var classes$A = {"fieldSetLabel":"input-module_fieldSetLabel__DxKa5","input":"input-module_input__WzHgL","checkbox":"input-module_checkbox__CowSc","radioButton":"input-module_radioButton__2eHO0","slider":"input-module_slider__-Xsc0","select":"input-module_select__GhgBs","genericInput":"input-module_genericInput__XdZ2R"};
15762
16262
 
15763
- var _excluded$q = ["schema", "value", "onChange", "type"],
15764
- _excluded2$5 = ["schema", "value", "onChange"],
16263
+ var _excluded$p = ["schema", "value", "onChange", "type", "isFocused"],
16264
+ _excluded2$4 = ["schema", "value", "onChange"],
15765
16265
  _excluded3$1 = ["schema", "value", "onChange"],
15766
16266
  _excluded4$1 = ["schema", "value", "selected", "onSelect", "type", "checked"],
15767
16267
  _excluded5$1 = ["value", "onChange", "name"],
15768
16268
  _excluded6 = ["children", "onChange", "style"],
15769
16269
  _excluded7 = ["children", "onChange"];
15770
- function _createSuper$9(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$9(); return function _createSuperInternal() { var Super = _getPrototypeOf__default["default"](Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf__default["default"](this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn__default["default"](this, result); }; }
15771
- function _isNativeReflectConstruct$9() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
15772
- function ownKeys$C(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; }
15773
- function _objectSpread$C(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$C(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$C(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
16270
+ function _createSuper$8(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$8(); return function _createSuperInternal() { var Super = _getPrototypeOf__default["default"](Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf__default["default"](this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn__default["default"](this, result); }; }
16271
+ function _isNativeReflectConstruct$8() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
16272
+ function ownKeys$B(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; }
16273
+ function _objectSpread$B(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$B(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$B(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
15774
16274
  function GenericInput(_ref) {
15775
16275
  _ref.schema;
15776
16276
  var _ref$value = _ref.value,
@@ -15778,14 +16278,21 @@ function GenericInput(_ref) {
15778
16278
  onChange = _ref.onChange,
15779
16279
  _ref$type = _ref.type,
15780
16280
  type = _ref$type === void 0 ? 'text' : _ref$type,
15781
- props = _objectWithoutProperties__default["default"](_ref, _excluded$q);
16281
+ _ref$isFocused = _ref.isFocused,
16282
+ isFocused = _ref$isFocused === void 0 ? false : _ref$isFocused,
16283
+ props = _objectWithoutProperties__default["default"](_ref, _excluded$p);
16284
+ var inputRef = React.useRef(null);
16285
+ React.useEffect(function () {
16286
+ if (inputRef.current && isFocused) inputRef.current.focus();
16287
+ }, [inputRef, isFocused]);
15782
16288
  return jsxRuntime.jsxs(jsxRuntime.Fragment, {
15783
- children: [jsxRuntime.jsx("input", _objectSpread$C({
16289
+ children: [jsxRuntime.jsx("input", _objectSpread$B({
15784
16290
  type: type,
15785
16291
  value: value,
15786
16292
  onInput: onChange,
15787
16293
  onChange: onChange,
15788
- className: classes$A.input
16294
+ className: clsx__default["default"](classes$A.input, classes$A.genericInput),
16295
+ ref: inputRef
15789
16296
  }, props)), type === 'checkbox' && jsxRuntime.jsx("span", {
15790
16297
  className: classes$A.checkbox
15791
16298
  }), type === 'radio' && jsxRuntime.jsx("span", {
@@ -15803,8 +16310,8 @@ function TextArea(_ref2) {
15803
16310
  _ref2.schema;
15804
16311
  var value = _ref2.value,
15805
16312
  onChange = _ref2.onChange,
15806
- rest = _objectWithoutProperties__default["default"](_ref2, _excluded2$5);
15807
- return jsxRuntime.jsx("textarea", _objectSpread$C({
16313
+ rest = _objectWithoutProperties__default["default"](_ref2, _excluded2$4);
16314
+ return jsxRuntime.jsx("textarea", _objectSpread$B({
15808
16315
  value: value,
15809
16316
  onInput: onChange
15810
16317
  }, rest));
@@ -15820,11 +16327,12 @@ function CheckBox(_ref3) {
15820
16327
  rest = _objectWithoutProperties__default["default"](_ref3, _excluded3$1);
15821
16328
  return jsxRuntime.jsxs("div", {
15822
16329
  className: classes$A.fieldSetItem,
15823
- children: [jsxRuntime.jsx("input", _objectSpread$C({
16330
+ children: [jsxRuntime.jsx("input", _objectSpread$B({
15824
16331
  type: "checkbox",
15825
16332
  checked: value,
15826
16333
  onClick: onChange,
15827
- onChange: onChange
16334
+ onChange: onChange,
16335
+ className: classes$A.input
15828
16336
  }, rest)), jsxRuntime.jsx("span", {
15829
16337
  className: classes$A.checkbox
15830
16338
  })]
@@ -15874,16 +16382,16 @@ function FieldSet(_ref5) {
15874
16382
  rest = _objectWithoutProperties__default["default"](_ref5, _excluded4$1);
15875
16383
  return jsxRuntime.jsx("fieldset", {
15876
16384
  onClick: onSelect,
15877
- className: "radio",
15878
16385
  children: enumSchema(schema, function (title, val) {
15879
16386
  return jsxRuntime.jsx("li", {
15880
16387
  className: classes$A.fieldSetItem,
15881
16388
  children: jsxRuntime.jsxs("label", {
15882
16389
  className: classes$A.fieldSetLabel,
15883
- children: [jsxRuntime.jsx("input", _objectSpread$C({
16390
+ children: [jsxRuntime.jsx("input", _objectSpread$B({
15884
16391
  type: type,
15885
16392
  defaultChecked: type === 'radio' ? selected(val, checked) : selected(val, value),
15886
- value: _typeof__default["default"](val) !== 'object' && val
16393
+ value: _typeof__default["default"](val) !== 'object' && val,
16394
+ className: classes$A.input
15887
16395
  }, rest)), type === 'checkbox' && jsxRuntime.jsx("span", {
15888
16396
  className: classes$A.checkbox
15889
16397
  }), type === 'radio' && jsxRuntime.jsx("span", {
@@ -15913,7 +16421,7 @@ function Slider(_ref6) {
15913
16421
  rest = _objectWithoutProperties__default["default"](_ref6, _excluded5$1);
15914
16422
  return jsxRuntime.jsxs("div", {
15915
16423
  className: classes$A.slider,
15916
- children: [jsxRuntime.jsx("input", _objectSpread$C({
16424
+ children: [jsxRuntime.jsx("input", _objectSpread$B({
15917
16425
  type: "checkbox",
15918
16426
  checked: value,
15919
16427
  onClick: onChange,
@@ -15946,7 +16454,7 @@ function inputCtrl(component, schema, _onChange) {
15946
16454
  type: 'text'
15947
16455
  };
15948
16456
  }
15949
- return _objectSpread$C({
16457
+ return _objectSpread$B({
15950
16458
  onChange: function onChange(ev) {
15951
16459
  var val = !component.val ? ev : component.val(ev, schema);
15952
16460
  _onChange(val);
@@ -16016,7 +16524,7 @@ function shallowCompare(a, b) {
16016
16524
  }
16017
16525
  var Input = function (_Component) {
16018
16526
  _inherits__default["default"](Input, _Component);
16019
- var _super = _createSuper$9(Input);
16527
+ var _super = _createSuper$8(Input);
16020
16528
  function Input() {
16021
16529
  _classCallCheck__default["default"](this, Input);
16022
16530
  return _super.apply(this, arguments);
@@ -16042,7 +16550,7 @@ var Input = function (_Component) {
16042
16550
  _this$props.onChange;
16043
16551
  var props = _objectWithoutProperties__default["default"](_this$props, _excluded7);
16044
16552
  var Component = this.component;
16045
- return jsxRuntime.jsx(Component, _objectSpread$C(_objectSpread$C({}, this.ctrl), props));
16553
+ return jsxRuntime.jsx(Component, _objectSpread$B(_objectSpread$B({}, this.ctrl), props));
16046
16554
  }
16047
16555
  }]);
16048
16556
  return Input;
@@ -16160,18 +16668,26 @@ function greekify(str) {
16160
16668
  });
16161
16669
  }
16162
16670
  function filterLib(lib, filter) {
16163
- var re = new RegExp(fp.escapeRegExp(greekify(filter)), 'i');
16671
+ var trimmedFilter = filter.trim();
16672
+ var re = new RegExp(fp.escapeRegExp(greekify(trimmedFilter)), 'i');
16164
16673
  return fp.flow(fp.filter(function (item) {
16165
- return !filter || re.test(greekify(item.struct.name)) || re.test(greekify(item.props.group));
16674
+ return !trimmedFilter || re.test(greekify(item.struct.name)) || re.test(greekify(item.props.group));
16166
16675
  }), fp.reduce(function (res, item) {
16167
16676
  if (!res[item.props.group]) res[item.props.group] = [item];else res[item.props.group].push(item);
16168
16677
  return res;
16169
16678
  }, {}))(lib);
16170
16679
  }
16171
16680
  function filterFGLib(lib, filter) {
16172
- var re = new RegExp(fp.escapeRegExp(greekify(filter)), 'i');
16681
+ var trimmedFilter = filter.trim();
16682
+ var re = new RegExp(fp.escapeRegExp(greekify(trimmedFilter)), 'i');
16683
+ var searchFunction = function searchFunction(item) {
16684
+ var fields = [item.struct.name, item.props.abbreviation, item.props.name].filter(Boolean);
16685
+ return fields.some(function (field) {
16686
+ return re.test(greekify(field));
16687
+ });
16688
+ };
16173
16689
  return fp.flow(fp.filter(function (item) {
16174
- return !filter || re.test(greekify(item.struct.name));
16690
+ return !trimmedFilter || searchFunction(item);
16175
16691
  }), fp.reduce(function (res, item) {
16176
16692
  if (!res[item.props.group]) res[item.props.group] = [item];else res[item.props.group].push(item);
16177
16693
  return res;
@@ -16188,18 +16704,18 @@ var getSelectOptionsFromSchema = function getSelectOptionsFromSchema(schema) {
16188
16704
  }, []);
16189
16705
  };
16190
16706
 
16191
- var _excluded$p = ["schema", "result", "customValid"],
16192
- _excluded2$4 = ["labelPos", "title", "children"],
16707
+ var _excluded$o = ["schema", "result", "customValid"],
16708
+ _excluded2$3 = ["labelPos", "title", "children"],
16193
16709
  _excluded3 = ["name", "onChange", "component", "labelPos", "className"],
16194
16710
  _excluded4 = ["dataError"],
16195
16711
  _excluded5 = ["title", "name", "schema"];
16196
- function ownKeys$B(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; }
16197
- function _objectSpread$B(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$B(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$B(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
16198
- function _createSuper$8(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$8(); return function _createSuperInternal() { var Super = _getPrototypeOf__default["default"](Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf__default["default"](this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn__default["default"](this, result); }; }
16199
- function _isNativeReflectConstruct$8() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
16712
+ function ownKeys$A(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; }
16713
+ 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__default["default"](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; }
16714
+ function _createSuper$7(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$7(); return function _createSuperInternal() { var Super = _getPrototypeOf__default["default"](Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf__default["default"](this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn__default["default"](this, result); }; }
16715
+ function _isNativeReflectConstruct$7() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
16200
16716
  var Form = function (_Component) {
16201
16717
  _inherits__default["default"](Form, _Component);
16202
- var _super = _createSuper$8(Form);
16718
+ var _super = _createSuper$7(Form);
16203
16719
  function Form(props) {
16204
16720
  var _this;
16205
16721
  _classCallCheck__default["default"](this, Form);
@@ -16214,7 +16730,7 @@ var Form = function (_Component) {
16214
16730
  valid = _this$schema$serializ.valid,
16215
16731
  errors = _this$schema$serializ.errors;
16216
16732
  var errs = getErrorsObj(errors);
16217
- var initialState = _objectSpread$B(_objectSpread$B({}, init), {}, {
16733
+ var initialState = _objectSpread$A(_objectSpread$A({}, init), {}, {
16218
16734
  init: true
16219
16735
  });
16220
16736
  onUpdate(initialState, valid, errs);
@@ -16228,7 +16744,7 @@ var Form = function (_Component) {
16228
16744
  schema = _this$props2.schema,
16229
16745
  result = _this$props2.result;
16230
16746
  _this$props2.customValid;
16231
- var rest = _objectWithoutProperties__default["default"](_this$props2, _excluded$p);
16747
+ var rest = _objectWithoutProperties__default["default"](_this$props2, _excluded$o);
16232
16748
  if (schema.key && schema.key !== prevProps.schema.key) {
16233
16749
  this.schema = propSchema(schema, rest);
16234
16750
  this.schema.serialize(result);
@@ -16298,8 +16814,8 @@ function Label(_ref) {
16298
16814
  var labelPos = _ref.labelPos,
16299
16815
  title = _ref.title,
16300
16816
  children = _ref.children,
16301
- props = _objectWithoutProperties__default["default"](_ref, _excluded2$4);
16302
- return jsxRuntime.jsxs("label", _objectSpread$B(_objectSpread$B({}, props), {}, {
16817
+ props = _objectWithoutProperties__default["default"](_ref, _excluded2$3);
16818
+ return jsxRuntime.jsxs("label", _objectSpread$A(_objectSpread$A({}, props), {}, {
16303
16819
  children: [title && labelPos !== 'after' ? jsxRuntime.jsx("span", {
16304
16820
  children: title
16305
16821
  }) : '', children, title && labelPos === 'after' ? jsxRuntime.jsx("span", {
@@ -16332,10 +16848,10 @@ function Field(props) {
16332
16848
  dataError = _stateStore$field.dataError,
16333
16849
  fieldOpts = _objectWithoutProperties__default["default"](_stateStore$field, _excluded4);
16334
16850
  var Component = component;
16335
- var formField = component ? jsxRuntime.jsx(Component, _objectSpread$B(_objectSpread$B({
16851
+ var formField = component ? jsxRuntime.jsx(Component, _objectSpread$A(_objectSpread$A({
16336
16852
  name: name,
16337
16853
  schema: desc
16338
- }, fieldOpts), rest)) : jsxRuntime.jsx(Input, _objectSpread$B(_objectSpread$B({
16854
+ }, fieldOpts), rest)) : jsxRuntime.jsx(Input, _objectSpread$A(_objectSpread$A({
16339
16855
  name: name,
16340
16856
  schema: desc
16341
16857
  }, fieldOpts), rest));
@@ -16372,7 +16888,7 @@ var SelectOneOf = function SelectOneOf(props) {
16372
16888
  selectDesc["enum"].push(item);
16373
16889
  selectDesc.enumNames.push(schema[item].title || item);
16374
16890
  });
16375
- return jsxRuntime.jsx(Field, _objectSpread$B(_objectSpread$B({
16891
+ return jsxRuntime.jsx(Field, _objectSpread$A(_objectSpread$A({
16376
16892
  name: name,
16377
16893
  options: getSelectOptionsFromSchema(selectDesc),
16378
16894
  title: title
@@ -16395,7 +16911,7 @@ function propSchema(schema, _ref2) {
16395
16911
  schema = Object.assign({}, schema);
16396
16912
  schema.properties = Object.keys(customValid).reduce(function (res, prop) {
16397
16913
  ajv.addFormat(customValid[prop].name, customValid[prop]);
16398
- res[prop] = _objectSpread$B({
16914
+ res[prop] = _objectSpread$A({
16399
16915
  format: prop
16400
16916
  }, res[prop]);
16401
16917
  return res;
@@ -16557,9 +17073,9 @@ var ColorPicker = function ColorPicker(props) {
16557
17073
 
16558
17074
  var styles$a = {"measureInput":"measure-input-module_measureInput__uZQ-j","select":"measure-input-module_select__1ZFmv"};
16559
17075
 
16560
- var _excluded$o = ["schema", "value", "onChange", "name"];
16561
- function ownKeys$A(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; }
16562
- 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__default["default"](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; }
17076
+ var _excluded$n = ["schema", "value", "onChange", "name"];
17077
+ function ownKeys$z(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; }
17078
+ function _objectSpread$z(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$z(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$z(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
16563
17079
  var selectOptions$1 = getSelectOptionsFromSchema({
16564
17080
  "enum": ['cm', 'px', 'pt', 'inch']
16565
17081
  });
@@ -16568,7 +17084,7 @@ var MeasureInput = function MeasureInput(_ref) {
16568
17084
  value = _ref.value,
16569
17085
  onChange = _ref.onChange,
16570
17086
  name = _ref.name,
16571
- rest = _objectWithoutProperties__default["default"](_ref, _excluded$o);
17087
+ rest = _objectWithoutProperties__default["default"](_ref, _excluded$n);
16572
17088
  var _useState = React.useState('px'),
16573
17089
  _useState2 = _slicedToArray__default["default"](_useState, 2),
16574
17090
  measure = _useState2[0],
@@ -16602,7 +17118,7 @@ var MeasureInput = function MeasureInput(_ref) {
16602
17118
  calcValue();
16603
17119
  }, [value, measure, calcValue]);
16604
17120
  var desc = schema || schema.properties[name];
16605
- return jsxRuntime.jsxs("div", _objectSpread$A(_objectSpread$A({
17121
+ return jsxRuntime.jsxs("div", _objectSpread$z(_objectSpread$z({
16606
17122
  className: styles$a.measureInput
16607
17123
  }, rest), {}, {
16608
17124
  children: [jsxRuntime.jsx("span", {
@@ -16638,14 +17154,14 @@ function convertValue(value, measureFrom, measureTo) {
16638
17154
 
16639
17155
  var classes$x = {"button-common-styles":"buttons-module_button-common-styles__qWDOz","scrollbar":"buttons-module_scrollbar__SpaVV","openButton":"buttons-module_openButton__wErm9"};
16640
17156
 
16641
- var _excluded$n = ["children", "type", "server", "className"];
16642
- function ownKeys$z(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; }
16643
- function _objectSpread$z(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$z(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$z(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
16644
- function _createSuper$7(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$7(); return function _createSuperInternal() { var Super = _getPrototypeOf__default["default"](Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf__default["default"](this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn__default["default"](this, result); }; }
16645
- function _isNativeReflectConstruct$7() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
17157
+ var _excluded$m = ["children", "type", "server", "className"];
17158
+ function ownKeys$y(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; }
17159
+ function _objectSpread$y(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$y(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$y(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
17160
+ function _createSuper$6(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$6(); return function _createSuperInternal() { var Super = _getPrototypeOf__default["default"](Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf__default["default"](this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn__default["default"](this, result); }; }
17161
+ function _isNativeReflectConstruct$6() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
16646
17162
  var OpenButton = function (_Component) {
16647
17163
  _inherits__default["default"](OpenButton, _Component);
16648
- var _super = _createSuper$7(OpenButton);
17164
+ var _super = _createSuper$6(OpenButton);
16649
17165
  function OpenButton(props) {
16650
17166
  var _this;
16651
17167
  _classCallCheck__default["default"](this, OpenButton);
@@ -16685,8 +17201,8 @@ var OpenButton = function (_Component) {
16685
17201
  type = _this$props2.type;
16686
17202
  _this$props2.server;
16687
17203
  var className = _this$props2.className,
16688
- props = _objectWithoutProperties__default["default"](_this$props2, _excluded$n);
16689
- return jsxRuntime.jsxs("button", _objectSpread$z(_objectSpread$z({
17204
+ props = _objectWithoutProperties__default["default"](_this$props2, _excluded$m);
17205
+ return jsxRuntime.jsxs("button", _objectSpread$y(_objectSpread$y({
16690
17206
  onClick: function onClick() {
16691
17207
  return _this2.btn.click();
16692
17208
  },
@@ -16708,8 +17224,8 @@ var OpenButton = function (_Component) {
16708
17224
  return OpenButton;
16709
17225
  }(React.Component);
16710
17226
 
16711
- function ownKeys$y(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; }
16712
- function _objectSpread$y(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$y(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$y(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
17227
+ function ownKeys$x(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; }
17228
+ function _objectSpread$x(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$x(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$x(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
16713
17229
  var SaveButton$1 = function SaveButton(props) {
16714
17230
  var noop = function noop() {
16715
17231
  return null;
@@ -16763,7 +17279,7 @@ var SaveButton$1 = function SaveButton(props) {
16763
17279
  onError(error);
16764
17280
  });
16765
17281
  };
16766
- return jsxRuntime.jsx("button", _objectSpread$y(_objectSpread$y({
17282
+ return jsxRuntime.jsx("button", _objectSpread$x(_objectSpread$x({
16767
17283
  className: className,
16768
17284
  onClick: function onClick(event) {
16769
17285
  save(event);
@@ -16942,9 +17458,9 @@ var fieldGroups = {
16942
17458
  showLoopIds: 'Options for Debugging'
16943
17459
  };
16944
17460
 
16945
- var _excluded$m = ["initState", "formState", "server", "onOpenFile", "onReset", "appOpts"];
16946
- function ownKeys$x(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; }
16947
- function _objectSpread$x(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$x(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$x(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
17461
+ var _excluded$l = ["initState", "formState", "server", "onOpenFile", "onReset", "appOpts"];
17462
+ function ownKeys$w(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; }
17463
+ function _objectSpread$w(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$w(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$w(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
16948
17464
  var defaultSettings = getDefaultOptions();
16949
17465
  var HeaderContent$1 = function HeaderContent(_ref) {
16950
17466
  var server = _ref.server,
@@ -16995,7 +17511,7 @@ var SettingsDialog = function SettingsDialog(props) {
16995
17511
  onOpenFile = props.onOpenFile,
16996
17512
  onReset = props.onReset,
16997
17513
  appOpts = props.appOpts,
16998
- prop = _objectWithoutProperties__default["default"](props, _excluded$m);
17514
+ prop = _objectWithoutProperties__default["default"](props, _excluded$l);
16999
17515
  var _useState = React.useState(new Set()),
17000
17516
  _useState2 = _slicedToArray__default["default"](_useState, 2),
17001
17517
  changedGroups = _useState2[0],
@@ -17189,7 +17705,7 @@ var SettingsDialog = function SettingsDialog(props) {
17189
17705
  formState: formState,
17190
17706
  initState: initState
17191
17707
  }),
17192
- children: jsxRuntime.jsx(Form$1, _objectSpread$x(_objectSpread$x({
17708
+ children: jsxRuntime.jsx(Form$1, _objectSpread$w(_objectSpread$w({
17193
17709
  schema: optionsSchema,
17194
17710
  init: initState
17195
17711
  }, formState), {}, {
@@ -17260,9 +17776,9 @@ function ErrorsCheck(props) {
17260
17776
 
17261
17777
  var style = {"button-common-styles":"Check-module_button-common-styles__WPocW","scrollbar":"Check-module_scrollbar__3jzOc","dialog_body":"Check-module_dialog_body__wHZMM","buttons":"Check-module_buttons__cjuqO","buttonSecondary":"Check-module_buttonSecondary__2482r","buttonPrimary":"Check-module_buttonPrimary__1h5p1","buttonsRight":"Check-module_buttonsRight__L1v9A","wrapper":"Check-module_wrapper__27SOp","checkInfo":"Check-module_checkInfo__Iqq6t","settings":"Check-module_settings__knuQF","warnings":"Check-module_warnings__b4ozd","centeredContainer":"Check-module_centeredContainer__t61r8","warningsContainer":"Check-module_warningsContainer__vSbyK","checkBoxesDisabled":"Check-module_checkBoxesDisabled__EAdRo"};
17262
17778
 
17263
- var _excluded$l = ["formState", "checkState", "onCheck", "onApply", "onCancel"];
17264
- function ownKeys$w(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; }
17265
- function _objectSpread$w(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$w(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$w(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
17779
+ var _excluded$k = ["formState", "checkState", "onCheck", "onApply", "onCancel"];
17780
+ function ownKeys$v(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; }
17781
+ function _objectSpread$v(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$v(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$v(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
17266
17782
  var checkSchema = {
17267
17783
  title: 'Check',
17268
17784
  type: 'object',
@@ -17320,7 +17836,7 @@ function CheckDialog(props) {
17320
17836
  onCheck = props.onCheck,
17321
17837
  onApply = props.onApply,
17322
17838
  onCancel = props.onCancel,
17323
- restProps = _objectWithoutProperties__default["default"](props, _excluded$l);
17839
+ restProps = _objectWithoutProperties__default["default"](props, _excluded$k);
17324
17840
  var _formState$result = formState.result,
17325
17841
  result = _formState$result === void 0 ? checkState : _formState$result,
17326
17842
  moleculeErrors = formState.moleculeErrors;
@@ -17356,7 +17872,7 @@ function CheckDialog(props) {
17356
17872
  return jsxRuntime.jsx(Dialog, {
17357
17873
  title: "Structure Check",
17358
17874
  className: style.dialog_body,
17359
- params: _objectSpread$w(_objectSpread$w({}, restProps), {}, {
17875
+ params: _objectSpread$v(_objectSpread$v({}, restProps), {}, {
17360
17876
  onCancel: onCancel
17361
17877
  }),
17362
17878
  buttons: [],
@@ -17368,7 +17884,7 @@ function CheckDialog(props) {
17368
17884
  isCheckedWithNewSettings: isCheckedWithNewSettings
17369
17885
  }),
17370
17886
  withDivider: true,
17371
- children: jsxRuntime.jsx(Form$1, _objectSpread$w(_objectSpread$w({
17887
+ children: jsxRuntime.jsx(Form$1, _objectSpread$v(_objectSpread$v({
17372
17888
  schema: checkSchema,
17373
17889
  init: checkState
17374
17890
  }, formState), {}, {
@@ -17494,9 +18010,9 @@ function FrozenInput(_ref) {
17494
18010
 
17495
18011
  var classes$u = {"button-common-styles":"Analyse-module_button-common-styles__8No07","scrollbar":"Analyse-module_scrollbar__UAaIN","analyse":"Analyse-module_analyse__MR-Tu","inputWrapper":"Analyse-module_inputWrapper__uR995","contentWrapper":"Analyse-module_contentWrapper__B4WCi","selectWrapper":"Analyse-module_selectWrapper__xEkKL","select":"Analyse-module_select__c6hFt"};
17496
18012
 
17497
- var _excluded$k = ["values", "round", "loading", "onAnalyse", "onChangeRound"];
17498
- function _createSuper$6(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$6(); return function _createSuperInternal() { var Super = _getPrototypeOf__default["default"](Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf__default["default"](this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn__default["default"](this, result); }; }
17499
- function _isNativeReflectConstruct$6() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
18013
+ var _excluded$j = ["values", "round", "loading", "onAnalyse", "onChangeRound"];
18014
+ function _createSuper$5(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$5(); return function _createSuperInternal() { var Super = _getPrototypeOf__default["default"](Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf__default["default"](this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn__default["default"](this, result); }; }
18015
+ function _isNativeReflectConstruct$5() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
17500
18016
  function roundOff(value, round) {
17501
18017
  if (typeof value === 'number') return value.toFixed(round);
17502
18018
  return value.replace(/[0-9]*\.[0-9]+/g, function (str) {
@@ -17508,7 +18024,7 @@ var selectOptions = getSelectOptionsFromSchema({
17508
18024
  });
17509
18025
  var AnalyseDialog = function (_Component) {
17510
18026
  _inherits__default["default"](AnalyseDialog, _Component);
17511
- var _super = _createSuper$6(AnalyseDialog);
18027
+ var _super = _createSuper$5(AnalyseDialog);
17512
18028
  function AnalyseDialog() {
17513
18029
  _classCallCheck__default["default"](this, AnalyseDialog);
17514
18030
  return _super.apply(this, arguments);
@@ -17527,7 +18043,7 @@ var AnalyseDialog = function (_Component) {
17527
18043
  loading = _this$props.loading;
17528
18044
  _this$props.onAnalyse;
17529
18045
  var onChangeRound = _this$props.onChangeRound,
17530
- props = _objectWithoutProperties__default["default"](_this$props, _excluded$k);
18046
+ props = _objectWithoutProperties__default["default"](_this$props, _excluded$j);
17531
18047
  return jsxRuntime.jsx(Dialog, {
17532
18048
  title: "Calculated Values",
17533
18049
  className: classes$u.analyse,
@@ -17622,80 +18138,6 @@ var mapDispatchToProps$9 = function mapDispatchToProps(dispatch) {
17622
18138
  };
17623
18139
  var Analyse = reactRedux.connect(mapStateToProps$c, mapDispatchToProps$9)(AnalyseDialog);
17624
18140
 
17625
- var _excluded$j = ["struct", "Tag"];
17626
- function _createSuper$5(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$5(); return function _createSuperInternal() { var Super = _getPrototypeOf__default["default"](Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf__default["default"](this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn__default["default"](this, result); }; }
17627
- function _isNativeReflectConstruct$5() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
17628
- function ownKeys$v(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; }
17629
- function _objectSpread$v(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$v(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$v(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
17630
- function renderStruct(el, struct) {
17631
- var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
17632
- if (el) {
17633
- if (struct) {
17634
- struct.initHalfBonds();
17635
- struct.initNeighbors();
17636
- struct.setImplicitHydrogen();
17637
- struct.markFragments();
17638
- var rnd = new ketcherCore.Render(el, _objectSpread$v({
17639
- autoScale: true
17640
- }, options));
17641
- rnd.setMolecule(struct);
17642
- rnd.update();
17643
- }
17644
- }
17645
- }
17646
- var StructRender = function (_Component) {
17647
- _inherits__default["default"](StructRender, _Component);
17648
- var _super = _createSuper$5(StructRender);
17649
- function StructRender(props) {
17650
- var _this;
17651
- _classCallCheck__default["default"](this, StructRender);
17652
- _this = _super.call(this, props);
17653
- _this.tagRef = React.createRef();
17654
- return _this;
17655
- }
17656
- _createClass__default["default"](StructRender, [{
17657
- key: "shouldComponentUpdate",
17658
- value: function shouldComponentUpdate() {
17659
- return false;
17660
- }
17661
- }, {
17662
- key: "componentDidMount",
17663
- value: function componentDidMount() {
17664
- var el = this.tagRef.current;
17665
- var _this$props = this.props,
17666
- struct = _this$props.struct,
17667
- options = _this$props.options;
17668
- var parsedStruct;
17669
- if (!(struct instanceof ketcherCore.Struct)) {
17670
- try {
17671
- var molSerialzer = new ketcherCore.MolSerializer();
17672
- parsedStruct = molSerialzer.deserialize(struct);
17673
- } catch (e) {
17674
- parsedStruct = null;
17675
- }
17676
- } else {
17677
- parsedStruct = struct;
17678
- }
17679
- renderStruct(el, parsedStruct, options);
17680
- }
17681
- }, {
17682
- key: "render",
17683
- value: function render() {
17684
- var _this$props2 = this.props,
17685
- struct = _this$props2.struct,
17686
- _this$props2$Tag = _this$props2.Tag,
17687
- Tag = _this$props2$Tag === void 0 ? 'div' : _this$props2$Tag,
17688
- props = _objectWithoutProperties__default["default"](_this$props2, _excluded$j);
17689
- return jsxRuntime.jsx(Tag, _objectSpread$v(_objectSpread$v({
17690
- ref: this.tagRef
17691
- }, props), {}, {
17692
- children: struct ? null : 'No molecule'
17693
- }));
17694
- }
17695
- }]);
17696
- return StructRender;
17697
- }(React.Component);
17698
-
17699
18141
  var classes$t = {"button-common-styles":"Recognize-module_button-common-styles__B04E6","scrollbar":"Recognize-module_scrollbar__rohcP","recognize":"Recognize-module_recognize__66jG2","footerContent":"Recognize-module_footerContent__0MAC7","imagoVersion":"Recognize-module_imagoVersion__nBIj6","openButton":"Recognize-module_openButton__H-j5I","imagesContainer":"Recognize-module_imagesContainer__rXWWk","topBody":"Recognize-module_topBody__ZCCjN","output":"Recognize-module_output__WgRnP","picture":"Recognize-module_picture__x2Y7S","filename":"Recognize-module_filename__-1HIU","messageContainer":"Recognize-module_messageContainer__tMvyb","primaryButton":"Recognize-module_primaryButton__rzm03","secondaryButton":"Recognize-module_secondaryButton__H1Q28","struct":"Recognize-module_struct__W55TL"};
17700
18142
 
17701
18143
  var DialogActionButton = function DialogActionButton(_ref) {
@@ -17715,7 +18157,7 @@ var DialogActionButton = function DialogActionButton(_ref) {
17715
18157
  };
17716
18158
 
17717
18159
  var _excluded$i = ["file", "structStr", "fragment", "version", "imagoVersions", "onOk"],
17718
- _excluded2$3 = ["onRecognize", "isFragment", "onImage", "onChangeImago"];
18160
+ _excluded2$2 = ["onRecognize", "isFragment", "onImage", "onChangeImago"];
17719
18161
  function ownKeys$u(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; }
17720
18162
  function _objectSpread$u(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$u(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$u(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
17721
18163
  function isImage(file) {
@@ -17766,7 +18208,7 @@ function RecognizeDialog(prop) {
17766
18208
  partProps.isFragment;
17767
18209
  var onImage = partProps.onImage,
17768
18210
  onChangeImago = partProps.onChangeImago,
17769
- props = _objectWithoutProperties__default["default"](partProps, _excluded2$3);
18211
+ props = _objectWithoutProperties__default["default"](partProps, _excluded2$2);
17770
18212
  var _useState = React.useState(true),
17771
18213
  _useState2 = _slicedToArray__default["default"](_useState, 2),
17772
18214
  canPreviewImage = _useState2[0],
@@ -17985,7 +18427,7 @@ var MiewDialog = function MiewDialog(_ref) {
17985
18427
  var onMiewInit = React.useCallback(function (miew) {
17986
18428
  miewRef.current = miew;
17987
18429
  var factory = new ketcherCore.FormatterFactory(server);
17988
- var service = factory.create('cml');
18430
+ var service = factory.create(ketcherCore.SupportedFormat.cml);
17989
18431
  service.getStructureFromStructAsync(struct).then(function (res) {
17990
18432
  return miew.load(res, {
17991
18433
  sourceType: 'immediate',
@@ -20350,51 +20792,27 @@ var Rgroup = reactRedux.connect(function (store) {
20350
20792
 
20351
20793
  var classes$9 = {"button-common-styles":"sgroup-module_button-common-styles__MAeEP","scrollbar":"sgroup-module_scrollbar__T3fpf","sgroup":"sgroup-module_sgroup__Kh2Xj"};
20352
20794
 
20353
- var _excluded$5 = ["title", "name", "schema"],
20354
- _excluded2$2 = ["context", "fieldName", "fieldValue", "type", "radiobuttons", "formState"];
20795
+ var _excluded$5 = ["context", "fieldName", "fieldValue", "type", "radiobuttons", "formState"];
20355
20796
  function ownKeys$8(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; }
20356
20797
  function _objectSpread$8(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$8(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$8(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
20357
- function SelectInput(_ref) {
20358
- var title = _ref.title,
20359
- name = _ref.name,
20360
- schema = _ref.schema,
20798
+ function SData(_ref) {
20799
+ var context = _ref.context,
20800
+ fieldName = _ref.fieldName,
20801
+ fieldValue = _ref.fieldValue,
20802
+ type = _ref.type,
20803
+ radiobuttons = _ref.radiobuttons,
20804
+ formState = _ref.formState,
20361
20805
  prop = _objectWithoutProperties__default["default"](_ref, _excluded$5);
20362
- var inputSelect = Object.keys(schema).reduce(function (acc, item) {
20363
- acc["enum"].push(item);
20364
- acc.enumNames.push(schema[item].title || item);
20365
- return acc;
20366
- }, {
20367
- title: title,
20368
- type: 'string',
20369
- "default": '',
20370
- minLength: 1,
20371
- "enum": [],
20372
- enumNames: []
20373
- });
20374
- return jsxRuntime.jsx(Field, _objectSpread$8({
20375
- name: name,
20376
- options: getSelectOptionsFromSchema(inputSelect),
20377
- component: Select
20378
- }, prop));
20379
- }
20380
- function SData(_ref2) {
20381
- var context = _ref2.context,
20382
- fieldName = _ref2.fieldName,
20383
- fieldValue = _ref2.fieldValue,
20384
- type = _ref2.type,
20385
- radiobuttons = _ref2.radiobuttons,
20386
- formState = _ref2.formState,
20387
- prop = _objectWithoutProperties__default["default"](_ref2, _excluded2$2);
20388
20806
  var _result = formState.result,
20389
20807
  _valid = formState.valid;
20808
+ var formSchema = sdataCustomSchema;
20390
20809
  var init = {
20391
- context: context,
20392
- fieldName: fieldName || getSdataDefault(context),
20810
+ context: context || getSdataDefault(formSchema, 'context'),
20811
+ fieldName: fieldName || getSdataDefault(formSchema, 'fieldName'),
20393
20812
  type: type,
20394
- radiobuttons: radiobuttons
20813
+ radiobuttons: radiobuttons || getSdataDefault(formSchema, 'radiobuttons')
20395
20814
  };
20396
- init.fieldValue = fieldValue || getSdataDefault(context, init.fieldName);
20397
- var formSchema = sdataSchema[_result.context][_result.fieldName] || sdataCustomSchema;
20815
+ init.fieldValue = fieldValue || getSdataDefault(formSchema, 'fieldValue');
20398
20816
  var serialize = {
20399
20817
  context: _result.context.trim(),
20400
20818
  fieldName: _result.fieldName.trim(),
@@ -20422,20 +20840,19 @@ function SData(_ref2) {
20422
20840
  init: init
20423
20841
  }, formState), {}, {
20424
20842
  children: jsxRuntime.jsxs("fieldset", {
20425
- children: [jsxRuntime.jsx(SelectOneOf, {
20426
- title: "Context",
20843
+ children: [jsxRuntime.jsx(Field, {
20427
20844
  name: "context",
20428
- schema: sdataSchema
20429
- }), jsxRuntime.jsx(SelectInput, {
20430
- title: "Field name",
20845
+ options: getSelectOptionsFromSchema(formSchema.properties.context),
20846
+ component: Select
20847
+ }), jsxRuntime.jsx(Field, {
20431
20848
  name: "fieldName",
20432
- schema: sdataSchema[_result.context]
20433
- }), content$1(formSchema, _result.context, _result.fieldName, radiobuttons)]
20849
+ placeholder: "Enter name"
20850
+ }), content$1(formSchema, _result.context, _result.fieldName, _result.fieldValue, radiobuttons)]
20434
20851
  })
20435
20852
  }))
20436
20853
  });
20437
20854
  }
20438
- var content$1 = function content(schema, context, fieldName, checked) {
20855
+ var content$1 = function content(schema, context, fieldName, fieldValue, checked) {
20439
20856
  return Object.keys(schema.properties).filter(function (prop) {
20440
20857
  return prop !== 'type' && prop !== 'context' && prop !== 'fieldName';
20441
20858
  }).map(function (prop) {
@@ -20444,10 +20861,9 @@ var content$1 = function content(schema, context, fieldName, checked) {
20444
20861
  checked: checked,
20445
20862
  type: "radio",
20446
20863
  labelPos: false
20447
- }, "".concat(context, "-").concat(fieldName, "-").concat(prop, "-radio")) : prop === 'fieldValue' && schema.properties.fieldValue["enum"] ? jsxRuntime.jsx(Field, {
20448
- options: getSelectOptionsFromSchema(schema.properties.fieldValue),
20864
+ }, "".concat(context, "-").concat(fieldName, "-").concat(prop, "-radio")) : prop === 'fieldValue' ? jsxRuntime.jsx(Field, {
20449
20865
  name: prop,
20450
- component: Select
20866
+ placeholder: "Enter value"
20451
20867
  }, "".concat(context, "-").concat(fieldName, "-").concat(prop, "-select")) : jsxRuntime.jsx(Field, {
20452
20868
  name: prop,
20453
20869
  type: "textarea"
@@ -20756,7 +21172,22 @@ function _objectSpread$5(target) { for (var i = 1; i < arguments.length; i++) {
20756
21172
  var getSettingsSelector = function getSettingsSelector(state) {
20757
21173
  return state.options.settings;
20758
21174
  };
21175
+ var isSaltOrSolventTemplate = function isSaltOrSolventTemplate(template) {
21176
+ return template.props.group === 'Salts and Solvents';
21177
+ };
21178
+ var isFunctionalGroupTemplate = function isFunctionalGroupTemplate(template) {
21179
+ return template.props.group === 'Functional Groups';
21180
+ };
21181
+ function getTemplateTitle(template, index) {
21182
+ if (isSaltOrSolventTemplate(template)) {
21183
+ return template.props.name;
21184
+ }
21185
+ return template.struct.name || "".concat(template.props.group, " template ").concat(index + 1);
21186
+ }
20759
21187
  function tmplName(tmpl, i) {
21188
+ if (isSaltOrSolventTemplate(tmpl)) {
21189
+ return tmpl.props.abbreviation;
21190
+ }
20760
21191
  return tmpl.struct.name || "".concat(tmpl.props.group, " template ").concat(i + 1);
20761
21192
  }
20762
21193
  var RenderTmpl = function RenderTmpl(_ref) {
@@ -20764,7 +21195,7 @@ var RenderTmpl = function RenderTmpl(_ref) {
20764
21195
  options = _ref.options,
20765
21196
  props = _objectWithoutProperties__default["default"](_ref, _excluded$2);
20766
21197
  return jsxRuntime.jsx(StructRender, _objectSpread$5({
20767
- struct: tmpl.modifiedStruct || tmpl.struct,
21198
+ struct: tmpl.struct,
20768
21199
  options: _objectSpread$5(_objectSpread$5({}, options), {}, {
20769
21200
  autoScaleMargin: 15
20770
21201
  })
@@ -20776,7 +21207,6 @@ var TemplateTable = function TemplateTable(props) {
20776
21207
  onSelect = props.onSelect,
20777
21208
  onDelete = props.onDelete,
20778
21209
  onAttach = props.onAttach,
20779
- _onDoubleClick = props.onDoubleClick,
20780
21210
  _props$titleRows = props.titleRows,
20781
21211
  titleRows = _props$titleRows === void 0 ? 2 : _props$titleRows;
20782
21212
  var options = reactRedux.useSelector(function (state) {
@@ -20787,13 +21217,10 @@ var TemplateTable = function TemplateTable(props) {
20787
21217
  children: templates.map(function (tmpl, i) {
20788
21218
  return jsxRuntime.jsxs("div", {
20789
21219
  className: tmpl.struct !== (selected === null || selected === void 0 ? void 0 : selected.struct) ? classes$7.td : "".concat(classes$7.td, " ").concat(classes$7.selected),
20790
- title: greekify(tmplName(tmpl, i)),
21220
+ title: greekify(getTemplateTitle(tmpl, i)),
20791
21221
  onClick: function onClick() {
20792
21222
  return onSelect(tmpl);
20793
21223
  },
20794
- onDoubleClick: function onDoubleClick() {
20795
- return _onDoubleClick(tmpl);
20796
- },
20797
21224
  children: [jsxRuntime.jsx(RenderTmpl, {
20798
21225
  tmpl: tmpl,
20799
21226
  options: options,
@@ -20809,7 +21236,7 @@ var TemplateTable = function TemplateTable(props) {
20809
21236
  children: jsxRuntime.jsx(Icon, {
20810
21237
  name: "delete"
20811
21238
  })
20812
- }), tmpl.props.group !== 'Functional Groups' && jsxRuntime.jsx("button", {
21239
+ }), !isFunctionalGroupTemplate(tmpl) && !isSaltOrSolventTemplate(tmpl) && jsxRuntime.jsx("button", {
20813
21240
  className: "".concat(classes$7.button, " ").concat(classes$7.editButton),
20814
21241
  onClick: function onClick() {
20815
21242
  return onAttach(tmpl);
@@ -20823,8 +21250,8 @@ var TemplateTable = function TemplateTable(props) {
20823
21250
  });
20824
21251
  };
20825
21252
 
20826
- var functionalGroupsSelector = function functionalGroupsSelector(state) {
20827
- return state.functionalGroups.lib;
21253
+ var saltsAndSolventsSelector = function saltsAndSolventsSelector(state) {
21254
+ return state.saltsAndSolvents.lib;
20828
21255
  };
20829
21256
 
20830
21257
  var classes$6 = {"emptySearch":"emptySearchResult-module_emptySearch__aUSew"};
@@ -20842,7 +21269,7 @@ var EmptySearchResult = function EmptySearchResult(_ref) {
20842
21269
  };
20843
21270
 
20844
21271
  var _excluded$1 = ["children", "value", "index"],
20845
- _excluded2 = ["filter", "onFilter", "onChangeGroup", "mode", "initialTab", "functionalGroups", "lib"];
21272
+ _excluded2 = ["filter", "onFilter", "onChangeGroup", "mode", "initialTab", "functionalGroups", "lib", "saltsAndSolvents"];
20846
21273
  function ownKeys$4(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; }
20847
21274
  function _objectSpread$4(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$4(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$4(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
20848
21275
  function TabPanel(props) {
@@ -20870,6 +21297,7 @@ var TemplateTabs;
20870
21297
  (function (TemplateTabs) {
20871
21298
  TemplateTabs[TemplateTabs["TemplateLibrary"] = 0] = "TemplateLibrary";
20872
21299
  TemplateTabs[TemplateTabs["FunctionalGroupLibrary"] = 1] = "FunctionalGroupLibrary";
21300
+ TemplateTabs[TemplateTabs["SaltsAndSolvents"] = 2] = "SaltsAndSolvents";
20873
21301
  })(TemplateTabs || (TemplateTabs = {}));
20874
21302
  var filterLibSelector = reselect.createSelector(function (props) {
20875
21303
  return props.lib;
@@ -20877,6 +21305,7 @@ var filterLibSelector = reselect.createSelector(function (props) {
20877
21305
  return props.filter;
20878
21306
  }, filterLib);
20879
21307
  var FUNCTIONAL_GROUPS = 'Functional Groups';
21308
+ var SALTS_AND_SOLVENTS = 'Salts and Solvents';
20880
21309
  var HeaderContent = function HeaderContent() {
20881
21310
  return jsxRuntime.jsxs("div", {
20882
21311
  className: classes$8.dialogHeader,
@@ -20890,26 +21319,37 @@ var HeaderContent = function HeaderContent() {
20890
21319
  var FooterContent = function FooterContent(_ref) {
20891
21320
  var data = _ref.data,
20892
21321
  tab = _ref.tab;
20893
- return jsxRuntime.jsx("div", {
21322
+ var clickToAddToCanvas = jsxRuntime.jsx("span", {
21323
+ children: "Click to add to canvas"
21324
+ });
21325
+ if (tab === TemplateTabs.SaltsAndSolvents) {
21326
+ return clickToAddToCanvas;
21327
+ }
21328
+ return jsxRuntime.jsxs("div", {
20894
21329
  style: {
20895
- flexGrow: 1
21330
+ flexGrow: 1,
21331
+ display: 'flex',
21332
+ justifyContent: 'space-between',
21333
+ alignItems: 'center'
20896
21334
  },
20897
- children: jsxRuntime.jsx(SaveButton$1, {
21335
+ children: [jsxRuntime.jsx(SaveButton$1, {
20898
21336
  data: data,
20899
21337
  className: classes$8.saveButton,
20900
21338
  filename: tab === TemplateTabs.TemplateLibrary ? 'ketcher-tmpls.sdf' : 'ketcher-fg-tmpls.sdf',
20901
- children: tab === TemplateTabs.TemplateLibrary ? 'Save template library to SDF' : 'Save functional groups to SDF'
20902
- }, "save-to-SDF")
21339
+ children: "Save to SDF"
21340
+ }, "save-to-SDF"), clickToAddToCanvas]
20903
21341
  });
20904
21342
  };
20905
21343
  var TemplateDialog = function TemplateDialog(props) {
21344
+ var _serializerMapper;
20906
21345
  var filter = props.filter,
20907
21346
  onFilter = props.onFilter,
20908
- onChangeGroup = props.onChangeGroup,
20909
- mode = props.mode,
20910
- initialTab = props.initialTab,
21347
+ onChangeGroup = props.onChangeGroup;
21348
+ props.mode;
21349
+ var initialTab = props.initialTab,
20911
21350
  functionalGroups = props.functionalGroups,
20912
21351
  templateLib = props.lib,
21352
+ saltsAndSolvents = props.saltsAndSolvents,
20913
21353
  rest = _objectWithoutProperties__default["default"](props, _excluded2);
20914
21354
  var _useState = React.useState(initialTab !== null && initialTab !== void 0 ? initialTab : TemplateTabs.TemplateLibrary),
20915
21355
  _useState2 = _slicedToArray__default["default"](_useState, 2),
@@ -20923,10 +21363,17 @@ var TemplateDialog = function TemplateDialog(props) {
20923
21363
  _useState6 = _slicedToArray__default["default"](_useState5, 2),
20924
21364
  filteredFG = _useState6[0],
20925
21365
  setFilteredFG = _useState6[1];
21366
+ var _useState7 = React.useState(saltsAndSolvents[SALTS_AND_SOLVENTS]),
21367
+ _useState8 = _slicedToArray__default["default"](_useState7, 2),
21368
+ filteredSaltsAndSolvents = _useState8[0],
21369
+ setFilteredSaltsAndSolvents = _useState8[1];
20926
21370
  var filteredTemplateLib = filterLibSelector(props);
20927
21371
  React.useEffect(function () {
20928
21372
  setFilteredFG(filterFGLib(functionalGroups, filter)[FUNCTIONAL_GROUPS]);
20929
21373
  }, [functionalGroups, filter]);
21374
+ React.useEffect(function () {
21375
+ setFilteredSaltsAndSolvents(filterFGLib(saltsAndSolvents, filter)[SALTS_AND_SOLVENTS]);
21376
+ }, [saltsAndSolvents, filter]);
20930
21377
  var handleTabChange = function handleTabChange(_, tab) {
20931
21378
  setTab(tab);
20932
21379
  props.onSelect(null);
@@ -20938,21 +21385,12 @@ var TemplateDialog = function TemplateDialog(props) {
20938
21385
  }));
20939
21386
  };
20940
21387
  };
20941
- var _result = function result() {
20942
- var tmpl = props.selected;
20943
- return tmpl ? {
20944
- struct: tmpl.struct,
20945
- aid: parseInt(String(tmpl.props.atomid)) || null,
20946
- bid: parseInt(String(tmpl.props.bondid)) || null,
20947
- mode: mode
20948
- } : null;
20949
- };
20950
21388
  var sdfSerializer = new ketcherCore.SdfSerializer();
20951
- var data = tab === TemplateTabs.TemplateLibrary ? sdfSerializer.serialize(templateLib) : sdfSerializer.serialize(functionalGroups);
21389
+ var serializerMapper = (_serializerMapper = {}, _defineProperty__default["default"](_serializerMapper, TemplateTabs.TemplateLibrary, templateLib), _defineProperty__default["default"](_serializerMapper, TemplateTabs.FunctionalGroupLibrary, functionalGroups), _defineProperty__default["default"](_serializerMapper, TemplateTabs.SaltsAndSolvents, saltsAndSolvents), _serializerMapper);
21390
+ var data = sdfSerializer.serialize(serializerMapper[tab]);
20952
21391
  var select = function select(tmpl) {
20953
- var activateImmediately = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
20954
21392
  onChangeGroup(tmpl.props.group);
20955
- if (activateImmediately) props.onOk(_result());else props.onSelect(tmpl);
21393
+ props.onSelect(tmpl);
20956
21394
  };
20957
21395
  return jsxRuntime.jsxs(Dialog, {
20958
21396
  headerContent: jsxRuntime.jsx(HeaderContent, {}),
@@ -20962,13 +21400,7 @@ var TemplateDialog = function TemplateDialog(props) {
20962
21400
  }),
20963
21401
  className: "".concat(classes$8.dialog_body),
20964
21402
  params: fp.omit(['group'], rest),
20965
- result: function result() {
20966
- return _result();
20967
- },
20968
- buttons: ['OK'],
20969
- buttonsNameMap: {
20970
- OK: 'Add to canvas'
20971
- },
21403
+ buttons: [],
20972
21404
  needMargin: false,
20973
21405
  children: [jsxRuntime.jsxs("div", {
20974
21406
  className: classes$8.inputContainer,
@@ -20979,7 +21411,8 @@ var TemplateDialog = function TemplateDialog(props) {
20979
21411
  onChange: function onChange(value) {
20980
21412
  return onFilter(value);
20981
21413
  },
20982
- placeholder: "Search by elements..."
21414
+ placeholder: "Search by elements...",
21415
+ isFocused: true
20983
21416
  }), jsxRuntime.jsx(Icon, {
20984
21417
  name: "search",
20985
21418
  className: classes$8.searchIcon
@@ -20992,7 +21425,9 @@ var TemplateDialog = function TemplateDialog(props) {
20992
21425
  label: "Template Library"
20993
21426
  }, a11yProps(TemplateTabs.TemplateLibrary))), jsxRuntime.jsx(Tab__default["default"], _objectSpread$4({
20994
21427
  label: "Functional Groups"
20995
- }, a11yProps(TemplateTabs.FunctionalGroupLibrary)))]
21428
+ }, a11yProps(TemplateTabs.FunctionalGroupLibrary))), jsxRuntime.jsx(Tab__default["default"], _objectSpread$4({
21429
+ label: "Salts and Solvents"
21430
+ }, a11yProps(TemplateTabs.SaltsAndSolvents)))]
20996
21431
  }), jsxRuntime.jsxs("div", {
20997
21432
  className: classes$8.tabsContent,
20998
21433
  children: [jsxRuntime.jsx(TabPanel, {
@@ -21021,9 +21456,6 @@ var TemplateDialog = function TemplateDialog(props) {
21021
21456
  onSelect: function onSelect(templ) {
21022
21457
  return select(templ);
21023
21458
  },
21024
- onDoubleClick: function onDoubleClick(templ) {
21025
- return select(templ, true);
21026
- },
21027
21459
  selected: props.selected,
21028
21460
  onDelete: props.onDelete,
21029
21461
  onAttach: props.onAttach
@@ -21044,9 +21476,6 @@ var TemplateDialog = function TemplateDialog(props) {
21044
21476
  className: classes$8.resultsContainer,
21045
21477
  children: jsxRuntime.jsx(TemplateTable, {
21046
21478
  titleRows: 1,
21047
- onDoubleClick: function onDoubleClick(templ) {
21048
- return select(templ, true);
21049
- },
21050
21479
  templates: filteredFG,
21051
21480
  onSelect: function onSelect(templ) {
21052
21481
  return select(templ);
@@ -21059,6 +21488,25 @@ var TemplateDialog = function TemplateDialog(props) {
21059
21488
  textInfo: "No items found"
21060
21489
  })
21061
21490
  })
21491
+ }), jsxRuntime.jsx(TabPanel, {
21492
+ value: tab,
21493
+ index: TemplateTabs.SaltsAndSolvents,
21494
+ children: filteredSaltsAndSolvents !== null && filteredSaltsAndSolvents !== void 0 && filteredSaltsAndSolvents.length ? jsxRuntime.jsx("div", {
21495
+ className: classes$8.resultsContainer,
21496
+ children: jsxRuntime.jsx(TemplateTable, {
21497
+ titleRows: 1,
21498
+ templates: filteredSaltsAndSolvents,
21499
+ onSelect: function onSelect(templ) {
21500
+ return select(templ);
21501
+ },
21502
+ selected: props.selected
21503
+ })
21504
+ }) : jsxRuntime.jsx("div", {
21505
+ className: classes$8.resultsContainer,
21506
+ children: jsxRuntime.jsx(EmptySearchResult, {
21507
+ textInfo: "No items found"
21508
+ })
21509
+ })
21062
21510
  })]
21063
21511
  })]
21064
21512
  });
@@ -21067,13 +21515,8 @@ var TemplatesDialog = reactRedux.connect(function (store) {
21067
21515
  var _store$modal, _store$modal$prop;
21068
21516
  return _objectSpread$4(_objectSpread$4({}, fp.omit(['attach'], store.templates)), {}, {
21069
21517
  initialTab: (_store$modal = store.modal) === null || _store$modal === void 0 ? void 0 : (_store$modal$prop = _store$modal.prop) === null || _store$modal$prop === void 0 ? void 0 : _store$modal$prop.tab,
21070
- functionalGroups: functionalGroupsSelector(store).map(function (template) {
21071
- var struct = template.struct.clone();
21072
- struct.sgroups["delete"](0);
21073
- return _objectSpread$4(_objectSpread$4({}, template), {}, {
21074
- modifiedStruct: struct
21075
- });
21076
- })
21518
+ functionalGroups: functionalGroupsSelector(store),
21519
+ saltsAndSolvents: saltsAndSolventsSelector(store)
21077
21520
  });
21078
21521
  }, function (dispatch, props) {
21079
21522
  return {
@@ -21081,7 +21524,12 @@ var TemplatesDialog = reactRedux.connect(function (store) {
21081
21524
  return dispatch(changeFilter(filter));
21082
21525
  },
21083
21526
  onSelect: function onSelect(tmpl) {
21084
- return dispatch(selectTmpl(tmpl));
21527
+ dispatch(selectTmpl(tmpl));
21528
+ dispatch(onAction({
21529
+ tool: 'template',
21530
+ opts: tmpl
21531
+ }));
21532
+ props.onOk(tmpl);
21085
21533
  },
21086
21534
  onChangeGroup: function onChangeGroup(group) {
21087
21535
  return dispatch(changeGroup(group));
@@ -21091,13 +21539,6 @@ var TemplatesDialog = reactRedux.connect(function (store) {
21091
21539
  },
21092
21540
  onDelete: function onDelete(tmpl) {
21093
21541
  return dispatch(deleteTmpl(tmpl));
21094
- },
21095
- onOk: function onOk(res) {
21096
- dispatch(onAction({
21097
- tool: 'template',
21098
- opts: res
21099
- }));
21100
- props.onOk(res);
21101
21542
  }
21102
21543
  };
21103
21544
  })(TemplateDialog);
@@ -21461,10 +21902,10 @@ function Modal(props) {
21461
21902
  var Component = modals[modal.name];
21462
21903
  if (!Component) throw new Error("There is no modal window named ".concat(modal.name));
21463
21904
  return jsxRuntime.jsx("div", {
21464
- className: clsx__default["default"](classes$E.modalOverlay, selectClasses.selectContainer),
21905
+ className: clsx__default["default"](classes$F.modalOverlay, selectClasses.selectContainer),
21465
21906
  ref: containerRef,
21466
21907
  children: jsxRuntime.jsx(Component, _objectSpread$3({
21467
- className: clsx__default["default"](_defineProperty__default["default"]({}, classes$E.smallScreen, height && height <= mediaSizes$1.smallHeight || width && width <= mediaSizes$1.smallWidth))
21908
+ className: clsx__default["default"](_defineProperty__default["default"]({}, classes$F.smallScreen, height && height <= mediaSizes$1.smallHeight || width && width <= mediaSizes$1.smallWidth))
21468
21909
  }, rest))
21469
21910
  });
21470
21911
  }
@@ -21673,6 +22114,24 @@ function initEditor(dispatch, getState) {
21673
22114
  },
21674
22115
  onConfirm: function onConfirm() {
21675
22116
  return openDialog(dispatch, 'confirm');
22117
+ },
22118
+ onShowInfo: function onShowInfo(payload) {
22119
+ if (payload) {
22120
+ var groupStruct = payload.groupStruct,
22121
+ event = payload.event,
22122
+ sGroup = payload.sGroup;
22123
+ highlightFG(dispatch, {
22124
+ groupStruct: groupStruct,
22125
+ event: event,
22126
+ sGroup: sGroup
22127
+ });
22128
+ } else {
22129
+ highlightFG(dispatch, {
22130
+ groupStruct: null,
22131
+ event: null,
22132
+ sGroup: null
22133
+ });
22134
+ }
21676
22135
  }
21677
22136
  };
21678
22137
  }
@@ -21706,6 +22165,8 @@ var App = function App(props) {
21706
22165
  React.useEffect(function () {
21707
22166
  checkServer();
21708
22167
  dispatch(initFGTemplates(staticResourcesUrl));
22168
+ dispatch(initSaltsAndSolventsTemplates(staticResourcesUrl));
22169
+ window.scrollTo(0, 0);
21709
22170
  }, []);
21710
22171
  return jsxRuntime.jsx(material.ThemeProvider, {
21711
22172
  theme: muiTheme,
@@ -21814,8 +22275,8 @@ var KetcherBuilder = function () {
21814
22275
  initApp(element, staticResourcesUrl, {
21815
22276
  buttons: buttons || {},
21816
22277
  errorHandler: errorHandler || null,
21817
- version: "2.6.3" ,
21818
- buildDate: "2022-11-29T12:22:11" ,
22278
+ version: "2.7.0-rc.2" ,
22279
+ buildDate: "2022-12-15T15:05:13" ,
21819
22280
  buildNumber: ''
21820
22281
  }, structService, resolve);
21821
22282
  });