ketcher-react 2.6.4 → 2.7.0-rc.3

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 (31) hide show
  1. package/dist/index.css +7952 -1
  2. package/dist/index.css.map +1 -1
  3. package/dist/index.js +1025 -537
  4. package/dist/index.js.map +1 -1
  5. package/dist/index.modern.js +1026 -538
  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 +4 -12
  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/dist/script/ui/views/modal/components/meta/About/About.d.ts +1 -1
  30. package/dist/script/ui/views/modal/components/process/Recognize/Recognize.d.ts +1 -1
  31. package/package.json +4 -3
package/dist/index.js CHANGED
@@ -43,7 +43,7 @@ var ReactDOM = require('react-dom');
43
43
  var reactRedux = require('react-redux');
44
44
  var redux = require('redux');
45
45
  var _toConsumableArray = require('@babel/runtime/helpers/toConsumableArray');
46
- require('redux-logger');
46
+ var reduxLogger = require('redux-logger');
47
47
  var thunk = require('redux-thunk');
48
48
  var lodash = require('lodash');
49
49
  var useResizeObserver = require('use-resize-observer/polyfilled');
@@ -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
  ,
@@ -417,6 +427,7 @@ function _copy(cb, data) {
417
427
  cb.setData(fmt, data[fmt]);
418
428
  });
419
429
  } catch (ex) {
430
+ console.info("Could not write exact type ".concat(curFmt));
420
431
  }
421
432
  }
422
433
  }
@@ -447,8 +458,8 @@ function exec(action) {
447
458
  return enabled;
448
459
  }
449
460
 
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; }
461
+ 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; }
462
+ 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
463
  var editor = {
453
464
  resetToSelect: {
454
465
  title: 'Reset to Select Tool',
@@ -696,7 +707,7 @@ var optionsSchema = {
696
707
  title: 'Settings',
697
708
  type: 'object',
698
709
  required: [],
699
- properties: _objectSpread$12(_objectSpread$12(_objectSpread$12(_objectSpread$12(_objectSpread$12({}, editor), render), server), debug), miew)
710
+ properties: _objectSpread$15(_objectSpread$15(_objectSpread$15(_objectSpread$15(_objectSpread$15({}, editor), render), server), debug), miew)
700
711
  };
701
712
  function getDefaultOptions() {
702
713
  if (!optionsSchema.properties) return {};
@@ -742,6 +753,7 @@ var storage = {
742
753
  try {
743
754
  item = JSON.parse(localStorage.getItem(key));
744
755
  } catch (ex) {
756
+ console.info('LocalStorage:', ex.name);
745
757
  }
746
758
  return item;
747
759
  },
@@ -751,19 +763,21 @@ var storage = {
751
763
  localStorage.setItem(key, JSON.stringify(data));
752
764
  isSet = true;
753
765
  } catch (ex) {
766
+ console.info('LocalStorage:', ex.name);
754
767
  isSet = false;
755
768
  }
756
769
  return isSet;
757
770
  }
758
771
  };
759
772
 
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; }
773
+ 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; }
774
+ 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
775
  var initOptionsState = {
763
776
  app: {
764
777
  server: false,
765
778
  templates: false,
766
- functionalGroups: false
779
+ functionalGroups: false,
780
+ saltsAndSolvents: false
767
781
  },
768
782
  analyse: {
769
783
  values: null,
@@ -854,27 +868,27 @@ function optionsReducer() {
854
868
  var action = arguments.length > 1 ? arguments[1] : undefined;
855
869
  var type = action.type,
856
870
  data = action.data;
857
- if (type === 'APP_OPTIONS') return _objectSpread$11(_objectSpread$11({}, state), {}, {
858
- app: _objectSpread$11(_objectSpread$11({}, state.app), data)
871
+ if (type === 'APP_OPTIONS') return _objectSpread$14(_objectSpread$14({}, state), {}, {
872
+ app: _objectSpread$14(_objectSpread$14({}, state.app), data)
859
873
  });
860
- if (type === 'SAVE_SETTINGS') return _objectSpread$11(_objectSpread$11({}, state), {}, {
874
+ if (type === 'SAVE_SETTINGS') return _objectSpread$14(_objectSpread$14({}, state), {}, {
861
875
  settings: data
862
876
  });
863
- if (type === 'SAVE_CHECK_OPTS') return _objectSpread$11(_objectSpread$11({}, state), {}, {
877
+ if (type === 'SAVE_CHECK_OPTS') return _objectSpread$14(_objectSpread$14({}, state), {}, {
864
878
  check: data
865
879
  });
866
- if (type === 'CHANGE_ANALYSE') return _objectSpread$11(_objectSpread$11({}, state), {}, {
867
- analyse: _objectSpread$11(_objectSpread$11(_objectSpread$11({}, state.analyse), data), {}, {
880
+ if (type === 'CHANGE_ANALYSE') return _objectSpread$14(_objectSpread$14({}, state), {}, {
881
+ analyse: _objectSpread$14(_objectSpread$14(_objectSpread$14({}, state.analyse), data), {}, {
868
882
  loading: false
869
883
  })
870
884
  });
871
- if (type === 'ANALYSE_LOADING') return _objectSpread$11(_objectSpread$11({}, state), {}, {
872
- analyse: _objectSpread$11(_objectSpread$11({}, state.analyse), {}, {
885
+ if (type === 'ANALYSE_LOADING') return _objectSpread$14(_objectSpread$14({}, state), {}, {
886
+ analyse: _objectSpread$14(_objectSpread$14({}, state.analyse), {}, {
873
887
  loading: true
874
888
  })
875
889
  });
876
- if (recognizeActions.includes(type)) return _objectSpread$11(_objectSpread$11({}, state), {}, {
877
- recognize: _objectSpread$11(_objectSpread$11({}, state.recognize), data)
890
+ if (recognizeActions.includes(type)) return _objectSpread$14(_objectSpread$14({}, state), {}, {
891
+ recognize: _objectSpread$14(_objectSpread$14({}, state.recognize), data)
878
892
  });
879
893
  return state;
880
894
  }
@@ -884,6 +898,7 @@ function constant(schema, prop) {
884
898
  return desc.constant || desc["enum"][0];
885
899
  }
886
900
  function mapOf(schema, prop) {
901
+ console.assert(schema.oneOf);
887
902
  return schema.oneOf.reduce(function (res, desc) {
888
903
  res[constant(desc, prop)] = desc;
889
904
  return res;
@@ -1130,7 +1145,7 @@ var sdataCustomSchema = {
1130
1145
  },
1131
1146
  context: {
1132
1147
  title: 'Context',
1133
- "enum": ['Fragment', 'Multifragment', 'Bond', 'Atom', 'Group'],
1148
+ "enum": ['Atom', 'Bond', 'Fragment', 'Group', 'Multifragment'],
1134
1149
  "default": 'Fragment'
1135
1150
  },
1136
1151
  fieldName: {
@@ -1164,18 +1179,26 @@ var sdataSchema = Object.keys(sData).reduce(function (acc, title) {
1164
1179
  function firstKeyOf(obj) {
1165
1180
  return Object.keys(obj)[0];
1166
1181
  }
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);
1182
+ function getSdataDefault() {
1183
+ var schema = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : sdataSchema;
1184
+ var context = arguments.length > 1 ? arguments[1] : undefined;
1185
+ var fieldName = arguments.length > 2 ? arguments[2] : undefined;
1186
+ if (schema.key === 'Custom') {
1187
+ var _schema$properties$co;
1188
+ return (_schema$properties$co = schema.properties[context]) === null || _schema$properties$co === void 0 ? void 0 : _schema$properties$co["default"];
1189
+ }
1190
+ if (!context && !fieldName) return firstKeyOf(schema);
1191
+ if (!fieldName) return firstKeyOf(schema[context]);
1192
+ return schema[context][fieldName] ? schema[context][fieldName].properties.fieldValue["default"] : '';
1193
+ }
1194
+
1195
+ 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; }
1196
+ 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; }
1197
+ var initSdata = function initSdata(schema) {
1198
+ var isCustomShema = schema.key === 'Custom';
1199
+ var context = isCustomShema ? getSdataDefault(sdataCustomSchema, 'context') : getSdataDefault(sdataSchema);
1200
+ var fieldName = isCustomShema ? getSdataDefault(sdataCustomSchema, 'fieldName') : getSdataDefault(sdataSchema, context);
1201
+ var fieldValue = isCustomShema ? getSdataDefault(sdataCustomSchema, 'fieldValue') : getSdataDefault(sdataSchema, context, fieldName);
1179
1202
  var radiobuttons = 'Absolute';
1180
1203
  return {
1181
1204
  errors: {},
@@ -1191,7 +1214,7 @@ var initSdata = function initSdata() {
1191
1214
  };
1192
1215
  function sdataReducer(state, action) {
1193
1216
  if (action.data.result.init) {
1194
- return correctErrors(_objectSpread$10(_objectSpread$10({}, state), {}, {
1217
+ return correctErrors(_objectSpread$13(_objectSpread$13({}, state), {}, {
1195
1218
  result: Object.assign({}, state.result, action.data.result)
1196
1219
  }), action.data);
1197
1220
  }
@@ -1199,7 +1222,7 @@ function sdataReducer(state, action) {
1199
1222
  var actionFieldName = action.data.result.fieldName;
1200
1223
  var newstate = null;
1201
1224
  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), {}, {
1225
+ newstate = newstate || _objectSpread$13(_objectSpread$13({}, state), {}, {
1203
1226
  result: Object.assign({}, state.result, action.data.result)
1204
1227
  });
1205
1228
  return correctErrors(newstate, action.data);
@@ -1219,11 +1242,11 @@ var correctErrors = function correctErrors(state, payload) {
1219
1242
  var onContextChange = function onContextChange(state, payload) {
1220
1243
  var context = payload.context,
1221
1244
  fieldValue = payload.fieldValue;
1222
- var fieldName = getSdataDefault(context);
1245
+ var fieldName = getSdataDefault(sdataCustomSchema, 'fieldName');
1223
1246
  var fValue = fieldValue;
1224
- if (fValue === state.result.fieldValue) fValue = getSdataDefault(context, fieldName);
1247
+ if (fValue === state.result.fieldValue) fValue = getSdataDefault(sdataCustomSchema, 'fieldValue');
1225
1248
  return {
1226
- result: _objectSpread$10(_objectSpread$10({}, payload), {}, {
1249
+ result: _objectSpread$13(_objectSpread$13({}, payload), {}, {
1227
1250
  context: context,
1228
1251
  fieldName: fieldName,
1229
1252
  fieldValue: fValue
@@ -1234,10 +1257,10 @@ var onFieldNameChange = function onFieldNameChange(state, payload) {
1234
1257
  var fieldName = payload.fieldName;
1235
1258
  var context = state.result.context;
1236
1259
  var fieldValue = payload.fieldValue;
1237
- if (sdataSchema[context][fieldName]) fieldValue = getSdataDefault(context, fieldName);
1260
+ if (sdataSchema[context][fieldName]) fieldValue = getSdataDefault(sdataSchema, context, fieldName);
1238
1261
  if (fieldValue === state.result.fieldValue && sdataSchema[context][state.result.fieldName]) fieldValue = '';
1239
1262
  return {
1240
- result: _objectSpread$10(_objectSpread$10({}, payload), {}, {
1263
+ result: _objectSpread$13(_objectSpread$13({}, payload), {}, {
1241
1264
  fieldName: fieldName,
1242
1265
  fieldValue: fieldValue
1243
1266
  })
@@ -1341,7 +1364,7 @@ var formsState = {
1341
1364
  valid: true,
1342
1365
  result: {}
1343
1366
  },
1344
- sdata: initSdata()
1367
+ sdata: initSdata(sdataCustomSchema)
1345
1368
  };
1346
1369
  function updateFormState(data) {
1347
1370
  return {
@@ -1375,8 +1398,8 @@ function formReducer(state, action, formName) {
1375
1398
  var INDIGO_VERIFICATION = 'INDIGO_VERIFICATION';
1376
1399
  var ANALYZING_FILE = 'ANALYZING_FILE';
1377
1400
 
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; }
1401
+ 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; }
1402
+ 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
1403
  function indigoVerification(data) {
1381
1404
  return {
1382
1405
  type: INDIGO_VERIFICATION,
@@ -1389,25 +1412,25 @@ function setAnalyzingFile(data) {
1389
1412
  data: data
1390
1413
  };
1391
1414
  }
1392
- var initialState$1 = {
1415
+ var initialState$2 = {
1393
1416
  indigoVerification: false,
1394
1417
  isAnalyzingFile: false
1395
1418
  };
1396
1419
  function requestReducer () {
1397
- var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState$1;
1420
+ var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState$2;
1398
1421
  var action = arguments.length > 1 ? arguments[1] : undefined;
1399
1422
  var type = action.type,
1400
1423
  data = action.data;
1401
1424
  switch (type) {
1402
1425
  case INDIGO_VERIFICATION:
1403
1426
  {
1404
- return _objectSpread$$(_objectSpread$$({}, state), {}, {
1427
+ return _objectSpread$12(_objectSpread$12({}, state), {}, {
1405
1428
  indigoVerification: data
1406
1429
  });
1407
1430
  }
1408
1431
  case ANALYZING_FILE:
1409
1432
  {
1410
- return _objectSpread$$(_objectSpread$$({}, state), {}, {
1433
+ return _objectSpread$12(_objectSpread$12({}, state), {}, {
1411
1434
  isAnalyzingFile: data
1412
1435
  });
1413
1436
  }
@@ -1680,12 +1703,12 @@ var attachSchema = {
1680
1703
  };
1681
1704
 
1682
1705
  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; }
1706
+ 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; }
1707
+ 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
1708
  var DefaultStereoGroupNumber = 1;
1686
1709
  function fromElement(selem) {
1687
1710
  if (selem.label === 'R#') {
1688
- return _objectSpread$_({
1711
+ return _objectSpread$11({
1689
1712
  type: 'rlabel',
1690
1713
  values: fromRlabel(selem.rglabel)
1691
1714
  }, selem);
@@ -1845,7 +1868,7 @@ function fromBond(sbond) {
1845
1868
  };
1846
1869
  }
1847
1870
  function toBond(bond) {
1848
- return _objectSpread$_({
1871
+ return _objectSpread$11({
1849
1872
  topology: bond.topology,
1850
1873
  reactingCenterStatus: bond.center
1851
1874
  }, toBondType(bond.type));
@@ -1935,7 +1958,7 @@ function toSgroup(sgroup) {
1935
1958
  var type = sgroup.type,
1936
1959
  radiobuttons = sgroup.radiobuttons,
1937
1960
  props = _objectWithoutProperties__default["default"](sgroup, _excluded$E);
1938
- var attrs = _objectSpread$_({}, props);
1961
+ var attrs = _objectSpread$11({}, props);
1939
1962
  var absolute = 'absolute';
1940
1963
  var attached = 'attached';
1941
1964
  switch (radiobuttons) {
@@ -2436,8 +2459,8 @@ var tools$1 = typeSchema$1["enum"].reduce(function (res, type, i) {
2436
2459
  }, toolActions);
2437
2460
 
2438
2461
  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; }
2462
+ 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; }
2463
+ 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
2464
  function onAction(action) {
2442
2465
  if (action && action.dialog) {
2443
2466
  return {
@@ -2464,6 +2487,9 @@ function parseStruct(struct, server, options) {
2464
2487
  _options.fragment;
2465
2488
  var formatterOptions = _objectWithoutProperties__default["default"](_options, _excluded$D);
2466
2489
  var format = ketcherCore.identifyStructFormat(struct);
2490
+ if (format === ketcherCore.SupportedFormat.cdx) {
2491
+ struct = "base64::".concat(struct.replace(/\s/g, ''));
2492
+ }
2467
2493
  var factory = new ketcherCore.FormatterFactory(server);
2468
2494
  var service = factory.create(format, formatterOptions);
2469
2495
  return service.getStructureFromStringAsync(struct);
@@ -2484,7 +2510,7 @@ function load(struct, options) {
2484
2510
  server = state.server;
2485
2511
  errorHandler = editor.errorHandler;
2486
2512
  options = options || {};
2487
- options = _objectSpread$Z(_objectSpread$Z({}, options), {}, {
2513
+ options = _objectSpread$10(_objectSpread$10({}, options), {}, {
2488
2514
  'dearomatize-on-load': editor.options()['dearomatize-on-load']
2489
2515
  });
2490
2516
  dispatch(setAnalyzingFile(true));
@@ -2912,7 +2938,7 @@ var zoom = {
2912
2938
 
2913
2939
  var openHelpLink = function openHelpLink() {
2914
2940
  var _window$open;
2915
- return (_window$open = window.open("https://github.com/epam/ketcher/blob/".concat("v2.6.3\n", "/documentation/help.md#ketcher-overview"))) === null || _window$open === void 0 ? void 0 : _window$open.focus();
2941
+ return (_window$open = window.open("https://github.com/epam/ketcher/blob/".concat("v2.7.0-rc.3\n", "/documentation/help.md#ketcher-overview"))) === null || _window$open === void 0 ? void 0 : _window$open.focus();
2916
2942
  };
2917
2943
  var help = {
2918
2944
  help: {
@@ -2973,9 +2999,9 @@ var fullscreen = {
2973
2999
  }
2974
3000
  };
2975
3001
 
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({
3002
+ 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; }
3003
+ 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; }
3004
+ var config = _objectSpread$$(_objectSpread$$(_objectSpread$$(_objectSpread$$(_objectSpread$$(_objectSpread$$(_objectSpread$$(_objectSpread$$(_objectSpread$$({
2979
3005
  clear: {
2980
3006
  shortcut: 'Mod+Delete',
2981
3007
  title: 'Clear Canvas',
@@ -5318,7 +5344,7 @@ function SvgTransformFlipH(props) {
5318
5344
  fill: "none",
5319
5345
  xmlns: "http://www.w3.org/2000/svg"
5320
5346
  }, 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",
5347
+ 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
5348
  fill: "#231F20"
5323
5349
  })));
5324
5350
  }
@@ -5335,7 +5361,7 @@ function SvgTransformFlipV(props) {
5335
5361
  fill: "none",
5336
5362
  xmlns: "http://www.w3.org/2000/svg"
5337
5363
  }, 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",
5364
+ 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
5365
  fill: "#231F20"
5340
5366
  })));
5341
5367
  }
@@ -6881,16 +6907,16 @@ function findIconByName(name) {
6881
6907
  }
6882
6908
 
6883
6909
  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; }
6910
+ 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; }
6911
+ 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
6912
  function Icon(_ref) {
6887
6913
  var name = _ref.name,
6888
6914
  props = _objectWithoutProperties__default["default"](_ref, _excluded$C);
6889
6915
  var Component = findIconByName(name);
6890
- return jsxRuntime.jsx(Component, _objectSpread$X({}, props));
6916
+ return jsxRuntime.jsx(Component, _objectSpread$_({}, props));
6891
6917
  }
6892
6918
 
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"};
6919
+ 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
6920
 
6895
6921
  var isMac = /Mac/.test(navigator.platform);
6896
6922
  var shortcutAliasMap = {
@@ -6934,7 +6960,7 @@ var ActionButton = function ActionButton(props) {
6934
6960
  disabled: disabled,
6935
6961
  onClick: handleClick,
6936
6962
  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),
6963
+ className: clsx__default["default"](classes$N.button, _defineProperty__default["default"]({}, classes$N.selected, selected), className),
6938
6964
  children: [jsxRuntime.jsx(Icon, {
6939
6965
  name: name
6940
6966
  }), jsxRuntime.jsx("kbd", {
@@ -7090,7 +7116,7 @@ var DefaultMultiTool = function DefaultMultiTool(props) {
7090
7116
  });
7091
7117
  };
7092
7118
 
7093
- var classes$L = {"group":"GroupedMultiTool-module_group__BJQAU"};
7119
+ var classes$M = {"group":"GroupedMultiTool-module_group__BJQAU"};
7094
7120
 
7095
7121
  var GroupedMultiTool = function GroupedMultiTool(props) {
7096
7122
  var groups = props.groups,
@@ -7105,7 +7131,7 @@ var GroupedMultiTool = function GroupedMultiTool(props) {
7105
7131
  return jsxRuntime.jsx(jsxRuntime.Fragment, {
7106
7132
  children: groups.map(function (descriptor) {
7107
7133
  return jsxRuntime.jsx("div", {
7108
- className: classes$L.group,
7134
+ className: classes$M.group,
7109
7135
  children: options.slice(descriptor.start, descriptor.end).map(function (toolbarItem) {
7110
7136
  var currentStatus = status[toolbarItem.id];
7111
7137
  return jsxRuntime.jsx(ActionButton, {
@@ -7135,7 +7161,7 @@ function chooseMultiTool() {
7135
7161
  }
7136
7162
  }
7137
7163
 
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"};
7164
+ 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
7165
 
7140
7166
  function usePortalOpening(_ref) {
7141
7167
  var _ref2 = _slicedToArray__default["default"](_ref, 3),
@@ -7183,8 +7209,8 @@ function usePortalStyle(_ref) {
7183
7209
  return [portalStyle];
7184
7210
  }
7185
7211
 
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; }
7212
+ 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; }
7213
+ 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
7214
  var ToolbarMultiToolItem = function ToolbarMultiToolItem(props) {
7189
7215
  var id = props.id,
7190
7216
  options = props.options,
@@ -7245,20 +7271,20 @@ var ToolbarMultiToolItem = function ToolbarMultiToolItem(props) {
7245
7271
  portalClassName = _chooseMultiTool2[1];
7246
7272
  return displayMultiToolItem ? jsxRuntime.jsxs("div", {
7247
7273
  ref: ref,
7248
- className: classes$K.root,
7249
- children: [jsxRuntime.jsx(ActionButton, _objectSpread$W(_objectSpread$W({}, actionButtonProps), {}, {
7274
+ className: classes$L.root,
7275
+ children: [jsxRuntime.jsx(ActionButton, _objectSpread$Z(_objectSpread$Z({}, actionButtonProps), {}, {
7250
7276
  className: className,
7251
7277
  name: currentId,
7252
7278
  action: config[currentId],
7253
7279
  status: currentStatus,
7254
7280
  selected: selected
7255
7281
  })), !isOpen && jsxRuntime.jsx(Icon, {
7256
- className: "".concat(classes$K.icon, " ").concat((currentStatus === null || currentStatus === void 0 ? void 0 : currentStatus.selected) && classes$K.iconSelected),
7282
+ className: "".concat(classes$L.icon, " ").concat((currentStatus === null || currentStatus === void 0 ? void 0 : currentStatus.selected) && classes$L.iconSelected),
7257
7283
  name: "dropdown",
7258
7284
  onClick: onOpenOptions
7259
7285
  }), isOpen ? jsxRuntime.jsx(Portal, {
7260
7286
  isOpen: isOpen,
7261
- className: clsx__default["default"](classes$K.portal, vertical && classes$K['portal-vertical'], portalClassName),
7287
+ className: clsx__default["default"](classes$L.portal, vertical && classes$L['portal-vertical'], portalClassName),
7262
7288
  style: portalStyle,
7263
7289
  children: jsxRuntime.jsx(Component, {
7264
7290
  options: options,
@@ -7343,16 +7369,16 @@ var TemplatesList = function TemplatesList(props) {
7343
7369
  });
7344
7370
  };
7345
7371
 
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"};
7372
+ 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
7373
 
7348
7374
  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; }
7375
+ 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; }
7376
+ 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
7377
  var Group$1 = function Group(_ref) {
7352
7378
  var children = _ref.children,
7353
7379
  className = _ref.className;
7354
7380
  return jsxRuntime.jsx("div", {
7355
- className: clsx__default["default"](classes$J.group, className),
7381
+ className: clsx__default["default"](classes$K.group, className),
7356
7382
  children: children
7357
7383
  });
7358
7384
  };
@@ -7364,7 +7390,7 @@ var BottomToolbar = function BottomToolbar(props) {
7364
7390
  indigoVerification = rest.indigoVerification,
7365
7391
  onAction = rest.onAction;
7366
7392
  return jsxRuntime.jsxs("div", {
7367
- className: clsx__default["default"](classes$J.root, className),
7393
+ className: clsx__default["default"](classes$K.root, className),
7368
7394
  children: [jsxRuntime.jsx(Group$1, {
7369
7395
  children: jsxRuntime.jsx(TemplatesList, {
7370
7396
  active: active,
@@ -7373,7 +7399,7 @@ var BottomToolbar = function BottomToolbar(props) {
7373
7399
  onAction: onAction
7374
7400
  })
7375
7401
  }), jsxRuntime.jsx(Group$1, {
7376
- children: jsxRuntime.jsx(ToolbarGroupItem, _objectSpread$V({
7402
+ children: jsxRuntime.jsx(ToolbarGroupItem, _objectSpread$Y({
7377
7403
  id: "template-lib"
7378
7404
  }, rest))
7379
7405
  })]
@@ -7468,15 +7494,15 @@ function prefetchRender(tmpls, baseUrl, cacheEl) {
7468
7494
  });
7469
7495
  }
7470
7496
 
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; }
7497
+ 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; }
7498
+ 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
7499
  function openDialog(dispatch, dialogName, props) {
7474
7500
  return new Promise(function (resolve, reject) {
7475
7501
  dispatch({
7476
7502
  type: 'MODAL_OPEN',
7477
7503
  data: {
7478
7504
  name: dialogName,
7479
- prop: _objectSpread$U(_objectSpread$U({}, props), {}, {
7505
+ prop: _objectSpread$X(_objectSpread$X({}, props), {}, {
7480
7506
  onResult: resolve,
7481
7507
  onCancel: reject
7482
7508
  })
@@ -7494,7 +7520,7 @@ function modalReducer() {
7494
7520
  return null;
7495
7521
  }
7496
7522
  var formState = formReducer(state.form, action, state.name);
7497
- return _objectSpread$U(_objectSpread$U({}, state), {}, {
7523
+ return _objectSpread$X(_objectSpread$X({}, state), {}, {
7498
7524
  form: formState
7499
7525
  });
7500
7526
  }
@@ -7512,8 +7538,8 @@ function modalReducer() {
7512
7538
  }
7513
7539
  }
7514
7540
 
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; }
7541
+ 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; }
7542
+ 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
7543
  function selectTmpl(tmpl) {
7518
7544
  return {
7519
7545
  type: 'TMPL_SELECT',
@@ -7535,7 +7561,7 @@ function changeFilter(filter) {
7535
7561
  return {
7536
7562
  type: 'TMPL_CHANGE_FILTER',
7537
7563
  data: {
7538
- filter: filter.trim(),
7564
+ filter: filter,
7539
7565
  selected: null
7540
7566
  }
7541
7567
  };
@@ -7613,7 +7639,7 @@ function saveUserTmpl(struct) {
7613
7639
  var name = _ref.name,
7614
7640
  attach = _ref.attach;
7615
7641
  tmpl.struct.name = name.trim();
7616
- tmpl.props = _objectSpread$T(_objectSpread$T({}, attach), {}, {
7642
+ tmpl.props = _objectSpread$W(_objectSpread$W({}, attach), {}, {
7617
7643
  group: 'User Templates'
7618
7644
  });
7619
7645
  var lib = getState().templates.lib.concat(tmpl);
@@ -7652,7 +7678,7 @@ function templatesReducer() {
7652
7678
  if (tmplActions.includes(action.type)) return Object.assign({}, state, action.data);
7653
7679
  if (attachActions.includes(action.type)) {
7654
7680
  var attach = Object.assign({}, state.attach, action.data);
7655
- return _objectSpread$T(_objectSpread$T({}, state), {}, {
7681
+ return _objectSpread$W(_objectSpread$W({}, state), {}, {
7656
7682
  attach: attach
7657
7683
  });
7658
7684
  }
@@ -7661,7 +7687,7 @@ function templatesReducer() {
7661
7687
  var lib = currentState.lib.filter(function (value) {
7662
7688
  return value !== action.data.tmpl;
7663
7689
  });
7664
- return _objectSpread$T(_objectSpread$T({}, currentState), {}, {
7690
+ return _objectSpread$W(_objectSpread$W({}, currentState), {}, {
7665
7691
  lib: lib
7666
7692
  });
7667
7693
  }
@@ -7669,8 +7695,8 @@ function templatesReducer() {
7669
7695
  }
7670
7696
 
7671
7697
  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; }
7698
+ 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; }
7699
+ 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
7700
  function execute(activeTool, _ref) {
7675
7701
  var action = _ref.action,
7676
7702
  editor = _ref.editor,
@@ -7682,7 +7708,9 @@ function execute(activeTool, _ref) {
7682
7708
  }
7683
7709
  } else if (typeof action === 'function') {
7684
7710
  action(editor, server, options);
7685
- } else ;
7711
+ } else {
7712
+ console.info('no action');
7713
+ }
7686
7714
  return activeTool;
7687
7715
  }
7688
7716
  function selected(actObj, activeTool, _ref2) {
@@ -7724,7 +7752,7 @@ function actionStateReducer () {
7724
7752
  case 'INIT':
7725
7753
  action = config['select-rectangle'].action;
7726
7754
  case 'ACTION':
7727
- activeTool = execute(state && state.activeTool, _objectSpread$S(_objectSpread$S({}, params), {}, {
7755
+ activeTool = execute(state && state.activeTool, _objectSpread$V(_objectSpread$V({}, params), {}, {
7728
7756
  action: action
7729
7757
  }));
7730
7758
  case 'UPDATE':
@@ -7740,20 +7768,25 @@ function actionStateReducer () {
7740
7768
  }
7741
7769
  }
7742
7770
 
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 = {
7771
+ 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; }
7772
+ 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; }
7773
+ var initialState$1 = {
7746
7774
  lib: [],
7775
+ functionalGroupInfo: null,
7747
7776
  mode: 'fg'
7748
7777
  };
7749
7778
  var functionalGroupsReducer = function functionalGroupsReducer() {
7750
- var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState;
7779
+ var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState$1;
7751
7780
  var _ref = arguments.length > 1 ? arguments[1] : undefined,
7752
7781
  type = _ref.type,
7753
7782
  payload = _ref.payload;
7754
7783
  switch (type) {
7755
7784
  case 'FG_INIT':
7756
- return _objectSpread$R(_objectSpread$R({}, state), payload);
7785
+ return _objectSpread$U(_objectSpread$U({}, state), payload);
7786
+ case 'FG_HIGHLIGHT':
7787
+ return _objectSpread$U(_objectSpread$U({}, state), {}, {
7788
+ functionalGroupInfo: payload
7789
+ });
7757
7790
  default:
7758
7791
  return state;
7759
7792
  }
@@ -7766,6 +7799,15 @@ var initFGroups = function initFGroups(lib) {
7766
7799
  }
7767
7800
  };
7768
7801
  };
7802
+ var highlightFGroup = function highlightFGroup(group) {
7803
+ return {
7804
+ type: 'FG_HIGHLIGHT',
7805
+ payload: group
7806
+ };
7807
+ };
7808
+ function highlightFG(dispatch, group) {
7809
+ dispatch(highlightFGroup(group));
7810
+ }
7769
7811
  function initFGTemplates(baseUrl) {
7770
7812
  return function () {
7771
7813
  var _ref2 = _asyncToGenerator__default["default"]( _regeneratorRuntime__default["default"].mark(function _callee(dispatch) {
@@ -7805,8 +7847,78 @@ function initFGTemplates(baseUrl) {
7805
7847
  }();
7806
7848
  }
7807
7849
 
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; }
7850
+ 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; }
7851
+ 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; }
7852
+ var initialState = {
7853
+ lib: [],
7854
+ mode: 'fg'
7855
+ };
7856
+ var saltsAndSolventsReducer = function saltsAndSolventsReducer() {
7857
+ var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState;
7858
+ var _ref = arguments.length > 1 ? arguments[1] : undefined,
7859
+ type = _ref.type,
7860
+ payload = _ref.payload;
7861
+ switch (type) {
7862
+ case 'SALTS_AND_SOLVENTS_INIT':
7863
+ return _objectSpread$T(_objectSpread$T({}, state), payload);
7864
+ default:
7865
+ return state;
7866
+ }
7867
+ };
7868
+ var initSaltsAndSolvents = function initSaltsAndSolvents(lib) {
7869
+ return {
7870
+ type: 'SALTS_AND_SOLVENTS_INIT',
7871
+ payload: {
7872
+ lib: lib
7873
+ }
7874
+ };
7875
+ };
7876
+ function initSaltsAndSolventsTemplates(baseUrl) {
7877
+ return function () {
7878
+ var _ref2 = _asyncToGenerator__default["default"]( _regeneratorRuntime__default["default"].mark(function _callee(dispatch) {
7879
+ var fileName, url, saltsAndSolventsProvider, functionalGroupsProvider, sdfSerializer, text, templates, saltsAndSolvents;
7880
+ return _regeneratorRuntime__default["default"].wrap(function _callee$(_context) {
7881
+ while (1) {
7882
+ switch (_context.prev = _context.next) {
7883
+ case 0:
7884
+ fileName = 'salts-and-solvents.sdf';
7885
+ url = "".concat(baseUrl, "/templates/").concat(fileName);
7886
+ saltsAndSolventsProvider = ketcherCore.SaltsAndSolventsProvider.getInstance();
7887
+ functionalGroupsProvider = ketcherCore.FunctionalGroupsProvider.getInstance();
7888
+ sdfSerializer = new ketcherCore.SdfSerializer();
7889
+ _context.next = 7;
7890
+ return prefetchStatic(url);
7891
+ case 7:
7892
+ text = _context.sent;
7893
+ templates = sdfSerializer.deserialize(text);
7894
+ saltsAndSolvents = templates.reduce(function (acc, _ref3) {
7895
+ var struct = _ref3.struct,
7896
+ props = _ref3.props;
7897
+ struct.abbreviation = String(props.abbreviation);
7898
+ acc.push(struct);
7899
+ return acc;
7900
+ }, []);
7901
+ saltsAndSolventsProvider.setSaltsAndSolventsList(saltsAndSolvents);
7902
+ functionalGroupsProvider.addToFunctionalGroupsList(saltsAndSolvents);
7903
+ dispatch(initSaltsAndSolvents(templates));
7904
+ dispatch(appUpdate({
7905
+ saltsAndSolvents: true
7906
+ }));
7907
+ case 14:
7908
+ case "end":
7909
+ return _context.stop();
7910
+ }
7911
+ }
7912
+ }, _callee);
7913
+ }));
7914
+ return function (_x) {
7915
+ return _ref2.apply(this, arguments);
7916
+ };
7917
+ }();
7918
+ }
7919
+
7920
+ 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; }
7921
+ 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
7922
  var initial = {
7811
7923
  freqAtoms: [],
7812
7924
  currentAtom: 0,
@@ -7826,7 +7938,7 @@ function updateVisibleTools(visibleTool, activeTool) {
7826
7938
  if (key === 'shape' && menuHeight > 900) return res;
7827
7939
  if (!key.match(regExp) || menuHeight > 700) res[key] = visibleTool[key];
7828
7940
  return res;
7829
- }, _objectSpread$Q({}, activeTool));
7941
+ }, _objectSpread$S({}, activeTool));
7830
7942
  }
7831
7943
  function initResize() {
7832
7944
  return function (dispatch, getState) {
@@ -7850,41 +7962,41 @@ function toolbarReducer () {
7850
7962
  case 'ACTION':
7851
7963
  {
7852
7964
  var visibleTool = toolInMenu(action.action);
7853
- return visibleTool ? _objectSpread$Q(_objectSpread$Q({}, state), {}, {
7965
+ return visibleTool ? _objectSpread$S(_objectSpread$S({}, state), {}, {
7854
7966
  opened: null,
7855
- visibleTools: _objectSpread$Q(_objectSpread$Q({}, state.visibleTools), visibleTool)
7856
- }) : _objectSpread$Q(_objectSpread$Q({}, state), {}, {
7967
+ visibleTools: _objectSpread$S(_objectSpread$S({}, state.visibleTools), visibleTool)
7968
+ }) : _objectSpread$S(_objectSpread$S({}, state), {}, {
7857
7969
  opened: null
7858
7970
  });
7859
7971
  }
7860
7972
  case 'ADD_ATOMS':
7861
7973
  {
7862
7974
  var newState = addFreqAtom(data, state.freqAtoms, state.currentAtom);
7863
- return _objectSpread$Q(_objectSpread$Q({}, state), newState);
7975
+ return _objectSpread$S(_objectSpread$S({}, state), newState);
7864
7976
  }
7865
7977
  case 'CLEAR_VISIBLE':
7866
7978
  {
7867
7979
  var activeTool = toolInMenu(action.data);
7868
7980
  var correctTools = updateVisibleTools(state.visibleTools, activeTool);
7869
- return _objectSpread$Q(_objectSpread$Q({}, state), {}, {
7981
+ return _objectSpread$S(_objectSpread$S({}, state), {}, {
7870
7982
  opened: null,
7871
- visibleTools: _objectSpread$Q({}, correctTools)
7983
+ visibleTools: _objectSpread$S({}, correctTools)
7872
7984
  });
7873
7985
  }
7874
7986
  case 'OPENED':
7875
7987
  {
7876
- return data.isSelected && state.opened ? _objectSpread$Q(_objectSpread$Q({}, state), {}, {
7988
+ return data.isSelected && state.opened ? _objectSpread$S(_objectSpread$S({}, state), {}, {
7877
7989
  opened: null
7878
- }) : _objectSpread$Q(_objectSpread$Q({}, state), {}, {
7990
+ }) : _objectSpread$S(_objectSpread$S({}, state), {}, {
7879
7991
  opened: data.menuName
7880
7992
  });
7881
7993
  }
7882
7994
  case 'UPDATE':
7883
- return _objectSpread$Q(_objectSpread$Q({}, state), {}, {
7995
+ return _objectSpread$S(_objectSpread$S({}, state), {}, {
7884
7996
  opened: null
7885
7997
  });
7886
7998
  case 'MODAL_OPEN':
7887
- return _objectSpread$Q(_objectSpread$Q({}, state), {}, {
7999
+ return _objectSpread$S(_objectSpread$S({}, state), {}, {
7888
8000
  opened: null
7889
8001
  });
7890
8002
  default:
@@ -7928,9 +8040,9 @@ function hiddenAncestor(el, base) {
7928
8040
  }
7929
8041
 
7930
8042
  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; }
8043
+ _excluded2$5 = ["buttons"];
8044
+ 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; }
8045
+ 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
8046
  var shared = redux.combineReducers({
7935
8047
  actionState: actionStateReducer,
7936
8048
  toolbar: toolbarReducer,
@@ -7946,6 +8058,7 @@ var shared = redux.combineReducers({
7946
8058
  options: optionsReducer,
7947
8059
  templates: templatesReducer,
7948
8060
  functionalGroups: functionalGroupsReducer,
8061
+ saltsAndSolvents: saltsAndSolventsReducer,
7949
8062
  requestsStatuses: requestReducer
7950
8063
  });
7951
8064
  function getRootReducer(setEditor) {
@@ -7956,10 +8069,10 @@ function getRootReducer(setEditor) {
7956
8069
  case 'UPDATE':
7957
8070
  action.type;
7958
8071
  var data = _objectWithoutProperties__default["default"](action, _excluded$z);
7959
- if (data) state = _objectSpread$P(_objectSpread$P({}, state), data);
8072
+ if (data) state = _objectSpread$R(_objectSpread$R({}, state), data);
7960
8073
  }
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);
8074
+ var sh = shared(state, _objectSpread$R(_objectSpread$R({}, action), fp.pick(['editor', 'server', 'options'], state)));
8075
+ var finalState = sh === state.shared ? state : _objectSpread$R(_objectSpread$R({}, state), sh);
7963
8076
  global.currentState = finalState;
7964
8077
  return finalState;
7965
8078
  };
@@ -7967,7 +8080,7 @@ function getRootReducer(setEditor) {
7967
8080
  function createStore (options, server, setEditor) {
7968
8081
  var _options$buttons = options.buttons,
7969
8082
  buttons = _options$buttons === void 0 ? {} : _options$buttons,
7970
- restOptions = _objectWithoutProperties__default["default"](options, _excluded2$6);
8083
+ restOptions = _objectWithoutProperties__default["default"](options, _excluded2$5);
7971
8084
  var initState = {
7972
8085
  actionState: null,
7973
8086
  editor: null,
@@ -7980,6 +8093,9 @@ function createStore (options, server, setEditor) {
7980
8093
  templates: initTmplsState
7981
8094
  };
7982
8095
  var middleware = [thunk__default["default"]];
8096
+ if (process.env.KETCHER_ENABLE_REDUX_LOGGER === 'true') {
8097
+ middleware.push(reduxLogger.logger);
8098
+ }
7983
8099
  var rootReducer = getRootReducer(setEditor);
7984
8100
  return redux.createStore(rootReducer, initState, redux.applyMiddleware.apply(void 0, middleware));
7985
8101
  }
@@ -8042,14 +8158,14 @@ var selectOptions$2 = makeItems(['select-rectangle', 'select-lasso', 'select-fra
8042
8158
  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
8159
  var mappingOptions = makeItems(['reaction-map', 'reaction-unmap', 'reaction-automap']);
8044
8160
 
8045
- var classes$I = {"scroll":"ArrowScroll-module_scroll__h9kCx","button":"ArrowScroll-module_button__ygMgL","down":"ArrowScroll-module_down__yDzZX","up":"ArrowScroll-module_up__Q1ubd"};
8161
+ var classes$J = {"scroll":"ArrowScroll-module_scroll__h9kCx","button":"ArrowScroll-module_button__ygMgL","down":"ArrowScroll-module_down__yDzZX","up":"ArrowScroll-module_up__Q1ubd"};
8046
8162
 
8047
8163
  function useSettingsContext() {
8048
8164
  return React__default["default"].useContext(settingsContext);
8049
8165
  }
8050
8166
 
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; }
8167
+ 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; }
8168
+ 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
8169
  var throttleMilliseconds = 100;
8054
8170
  function useThrottleResizeObserver() {
8055
8171
  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
@@ -8063,11 +8179,11 @@ function useThrottleResizeObserver() {
8063
8179
  var onResize = React.useMemo(function () {
8064
8180
  return lodash.throttle(setSize, throttleMilliseconds);
8065
8181
  }, []);
8066
- var _useResizeObserver = useResizeObserver__default["default"](_objectSpread$O({
8182
+ var _useResizeObserver = useResizeObserver__default["default"](_objectSpread$Q({
8067
8183
  onResize: onResize
8068
8184
  }, options)),
8069
8185
  ref = _useResizeObserver.ref;
8070
- return _objectSpread$O({
8186
+ return _objectSpread$Q({
8071
8187
  ref: ref
8072
8188
  }, size);
8073
8189
  }
@@ -8163,7 +8279,7 @@ var ArrowScroll = function ArrowScroll(_ref) {
8163
8279
  };
8164
8280
  }, [endInView]);
8165
8281
  return jsxRuntime.jsxs("div", {
8166
- className: classes$I.scroll,
8282
+ className: classes$J.scroll,
8167
8283
  children: [endInView ? jsxRuntime.jsx(jsxRuntime.Fragment, {}) : jsxRuntime.jsx("button", {
8168
8284
  onClick: function onClick() {
8169
8285
  return scrollDown();
@@ -8174,7 +8290,7 @@ var ArrowScroll = function ArrowScroll(_ref) {
8174
8290
  onMouseDown: function onMouseDown() {
8175
8291
  return setScrollDown(true);
8176
8292
  },
8177
- className: clsx__default["default"](classes$I.button, classes$I.down),
8293
+ className: clsx__default["default"](classes$J.button, classes$J.down),
8178
8294
  children: "\u25BC"
8179
8295
  }), startInView ? jsxRuntime.jsx(jsxRuntime.Fragment, {}) : jsxRuntime.jsx("button", {
8180
8296
  onClick: function onClick() {
@@ -8186,7 +8302,7 @@ var ArrowScroll = function ArrowScroll(_ref) {
8186
8302
  onMouseDown: function onMouseDown() {
8187
8303
  return setScrollUp(true);
8188
8304
  },
8189
- className: clsx__default["default"](classes$I.button, classes$I.up),
8305
+ className: clsx__default["default"](classes$J.button, classes$J.up),
8190
8306
  children: "\u25B2"
8191
8307
  })]
8192
8308
  });
@@ -8201,13 +8317,13 @@ var mediaSizes$2 = {
8201
8317
  };
8202
8318
 
8203
8319
  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; }
8320
+ 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; }
8321
+ 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
8322
  var Bond$1 = function Bond(props) {
8207
8323
  var height = props.height,
8208
8324
  rest = _objectWithoutProperties__default["default"](props, _excluded$y);
8209
8325
  if (height && height <= mediaSizes$2.bondCollapsableHeight) {
8210
- return jsxRuntime.jsx(ToolbarMultiToolItem, _objectSpread$N({
8326
+ return jsxRuntime.jsx(ToolbarMultiToolItem, _objectSpread$P({
8211
8327
  id: "bonds",
8212
8328
  options: groupOptions,
8213
8329
  variant: "grouped",
@@ -8215,68 +8331,68 @@ var Bond$1 = function Bond(props) {
8215
8331
  }, rest));
8216
8332
  }
8217
8333
  return jsxRuntime.jsxs(jsxRuntime.Fragment, {
8218
- children: [jsxRuntime.jsx(ToolbarMultiToolItem, _objectSpread$N({
8334
+ children: [jsxRuntime.jsx(ToolbarMultiToolItem, _objectSpread$P({
8219
8335
  id: "bond-common",
8220
8336
  options: bondCommon
8221
- }, rest)), jsxRuntime.jsx(ToolbarMultiToolItem, _objectSpread$N({
8337
+ }, rest)), jsxRuntime.jsx(ToolbarMultiToolItem, _objectSpread$P({
8222
8338
  id: "bond-stereo",
8223
8339
  options: bondStereo
8224
- }, rest)), jsxRuntime.jsx(ToolbarMultiToolItem, _objectSpread$N({
8340
+ }, rest)), jsxRuntime.jsx(ToolbarMultiToolItem, _objectSpread$P({
8225
8341
  id: "bond-query",
8226
8342
  options: bondQuery
8227
- }, rest)), jsxRuntime.jsx(ToolbarMultiToolItem, _objectSpread$N({
8343
+ }, rest)), jsxRuntime.jsx(ToolbarMultiToolItem, _objectSpread$P({
8228
8344
  id: "bond-special",
8229
8345
  options: bondSpecial
8230
8346
  }, rest))]
8231
8347
  });
8232
8348
  };
8233
8349
 
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; }
8350
+ 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; }
8351
+ 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
8352
  var RGroup$1 = function RGroup(props) {
8237
- return jsxRuntime.jsx(ToolbarGroupItem, _objectSpread$M({
8353
+ return jsxRuntime.jsx(ToolbarGroupItem, _objectSpread$O({
8238
8354
  id: "rgroup",
8239
8355
  options: rGroupOptions
8240
8356
  }, props));
8241
8357
  };
8242
8358
 
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; }
8359
+ 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; }
8360
+ 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
8361
  var Shape = function Shape(props) {
8246
- return jsxRuntime.jsx(ToolbarGroupItem, _objectSpread$L({
8362
+ return jsxRuntime.jsx(ToolbarGroupItem, _objectSpread$N({
8247
8363
  id: "shapes",
8248
8364
  options: shapeOptions
8249
8365
  }, props));
8250
8366
  };
8251
8367
 
8252
8368
  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; }
8369
+ 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; }
8370
+ 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
8371
  var Transform = function Transform(props) {
8256
8372
  var height = props.height,
8257
8373
  rest = _objectWithoutProperties__default["default"](props, _excluded$x);
8258
8374
  if (height && height <= mediaSizes$2.transformCollapsableHeight) {
8259
- return jsxRuntime.jsx(ToolbarGroupItem, _objectSpread$K({
8375
+ return jsxRuntime.jsx(ToolbarGroupItem, _objectSpread$M({
8260
8376
  id: "transforms",
8261
8377
  options: transformOptions
8262
8378
  }, rest));
8263
8379
  }
8264
8380
  return jsxRuntime.jsxs(jsxRuntime.Fragment, {
8265
- children: [jsxRuntime.jsx(ToolbarGroupItem, _objectSpread$K({
8381
+ children: [jsxRuntime.jsx(ToolbarGroupItem, _objectSpread$M({
8266
8382
  id: "transform-rotate"
8267
- }, rest)), jsxRuntime.jsx(ToolbarGroupItem, _objectSpread$K({
8383
+ }, rest)), jsxRuntime.jsx(ToolbarGroupItem, _objectSpread$M({
8268
8384
  id: "transform-flip-h"
8269
- }, rest)), jsxRuntime.jsx(ToolbarGroupItem, _objectSpread$K({
8385
+ }, rest)), jsxRuntime.jsx(ToolbarGroupItem, _objectSpread$M({
8270
8386
  id: "transform-flip-v"
8271
8387
  }, rest))]
8272
8388
  });
8273
8389
  };
8274
8390
 
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"};
8391
+ 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
8392
 
8277
8393
  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; }
8394
+ 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; }
8395
+ 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
8396
  var LeftToolbar = function LeftToolbar(props) {
8281
8397
  var className = props.className,
8282
8398
  rest = _objectWithoutProperties__default["default"](props, _excluded$w);
@@ -8300,7 +8416,7 @@ var LeftToolbar = function LeftToolbar(props) {
8300
8416
  var Item = function Item(_ref) {
8301
8417
  var id = _ref.id,
8302
8418
  options = _ref.options;
8303
- return ToolbarGroupItem(_objectSpread$J({
8419
+ return ToolbarGroupItem(_objectSpread$L({
8304
8420
  id: id,
8305
8421
  options: options
8306
8422
  }, rest));
@@ -8332,25 +8448,25 @@ var LeftToolbar = function LeftToolbar(props) {
8332
8448
  });
8333
8449
  }
8334
8450
  return visibleItems.length ? jsxRuntime.jsx("div", {
8335
- className: clsx__default["default"](classes$H.group, className),
8451
+ className: clsx__default["default"](classes$I.group, className),
8336
8452
  children: visibleItems.map(function (item) {
8337
8453
  switch (item.id) {
8338
8454
  case 'bond-common':
8339
- return React.createElement(Bond$1, _objectSpread$J(_objectSpread$J({}, rest), {}, {
8455
+ return React.createElement(Bond$1, _objectSpread$L(_objectSpread$L({}, rest), {}, {
8340
8456
  height: height,
8341
8457
  key: item.id
8342
8458
  }));
8343
8459
  case 'transform-rotate':
8344
- return React.createElement(Transform, _objectSpread$J(_objectSpread$J({}, rest), {}, {
8460
+ return React.createElement(Transform, _objectSpread$L(_objectSpread$L({}, rest), {}, {
8345
8461
  height: height,
8346
8462
  key: item.id
8347
8463
  }));
8348
8464
  case 'rgroup':
8349
- return React.createElement(RGroup$1, _objectSpread$J(_objectSpread$J({}, rest), {}, {
8465
+ return React.createElement(RGroup$1, _objectSpread$L(_objectSpread$L({}, rest), {}, {
8350
8466
  key: item.id
8351
8467
  }));
8352
8468
  case 'shapes':
8353
- return React.createElement(Shape, _objectSpread$J(_objectSpread$J({}, rest), {}, {
8469
+ return React.createElement(Shape, _objectSpread$L(_objectSpread$L({}, rest), {}, {
8354
8470
  key: item.id
8355
8471
  }));
8356
8472
  default:
@@ -8363,16 +8479,16 @@ var LeftToolbar = function LeftToolbar(props) {
8363
8479
  }) : null;
8364
8480
  };
8365
8481
  return jsxRuntime.jsxs("div", {
8366
- className: clsx__default["default"](classes$H.root, className),
8482
+ className: clsx__default["default"](classes$I.root, className),
8367
8483
  ref: ref,
8368
8484
  children: [jsxRuntime.jsxs("div", {
8369
- className: classes$H.buttons,
8485
+ className: classes$I.buttons,
8370
8486
  ref: scrollRef,
8371
8487
  children: [jsxRuntime.jsx("div", {
8372
- className: classes$H.listener,
8488
+ className: classes$I.listener,
8373
8489
  ref: startRef,
8374
8490
  children: jsxRuntime.jsx(Group, {
8375
- className: classes$H.groupItem,
8491
+ className: classes$I.groupItem,
8376
8492
  items: [{
8377
8493
  id: 'hand'
8378
8494
  }, {
@@ -8383,7 +8499,7 @@ var LeftToolbar = function LeftToolbar(props) {
8383
8499
  }]
8384
8500
  })
8385
8501
  }), jsxRuntime.jsx(Group, {
8386
- className: classes$H.groupItem,
8502
+ className: classes$I.groupItem,
8387
8503
  items: [{
8388
8504
  id: 'bonds',
8389
8505
  options: [].concat(_toConsumableArray__default["default"](bondCommon), _toConsumableArray__default["default"](bondQuery), _toConsumableArray__default["default"](bondSpecial), _toConsumableArray__default["default"](bondStereo))
@@ -8391,27 +8507,27 @@ var LeftToolbar = function LeftToolbar(props) {
8391
8507
  id: 'chain'
8392
8508
  }]
8393
8509
  }), jsxRuntime.jsx(Group, {
8394
- className: classes$H.groupItem,
8510
+ className: classes$I.groupItem,
8395
8511
  items: [{
8396
8512
  id: 'charge-plus'
8397
8513
  }, {
8398
8514
  id: 'charge-minus'
8399
8515
  }]
8400
8516
  }), jsxRuntime.jsx(Group, {
8401
- className: classes$H.groupItem,
8517
+ className: classes$I.groupItem,
8402
8518
  items: [{
8403
8519
  id: 'transforms',
8404
8520
  options: transformOptions
8405
8521
  }]
8406
8522
  }), jsxRuntime.jsx(Group, {
8407
- className: classes$H.groupItem,
8523
+ className: classes$I.groupItem,
8408
8524
  items: [{
8409
8525
  id: 'sgroup'
8410
8526
  }, {
8411
8527
  id: 'sgroup-data'
8412
8528
  }]
8413
8529
  }), jsxRuntime.jsx(Group, {
8414
- className: classes$H.groupItem,
8530
+ className: classes$I.groupItem,
8415
8531
  items: [{
8416
8532
  id: 'reaction-plus'
8417
8533
  }, {
@@ -8422,17 +8538,17 @@ var LeftToolbar = function LeftToolbar(props) {
8422
8538
  options: mappingOptions
8423
8539
  }]
8424
8540
  }), jsxRuntime.jsx("div", {
8425
- className: classes$H.listener,
8541
+ className: classes$I.listener,
8426
8542
  ref: sizeRef,
8427
8543
  children: jsxRuntime.jsx(Group, {
8428
- className: classes$H.groupItem,
8544
+ className: classes$I.groupItem,
8429
8545
  items: [{
8430
8546
  id: 'rgroup',
8431
8547
  options: rGroupOptions
8432
8548
  }]
8433
8549
  })
8434
8550
  }), jsxRuntime.jsx(Group, {
8435
- className: classes$H.groupItem,
8551
+ className: classes$I.groupItem,
8436
8552
  items: [{
8437
8553
  id: 'shapes',
8438
8554
  options: shapeOptions
@@ -8440,7 +8556,7 @@ var LeftToolbar = function LeftToolbar(props) {
8440
8556
  }), jsxRuntime.jsx("div", {
8441
8557
  ref: endRef,
8442
8558
  children: jsxRuntime.jsx(Group, {
8443
- className: classes$H.groupItem,
8559
+ className: classes$I.groupItem,
8444
8560
  items: [{
8445
8561
  id: 'text'
8446
8562
  }]
@@ -8481,19 +8597,19 @@ var mapDispatchToProps$h = function mapDispatchToProps(dispatch) {
8481
8597
  };
8482
8598
  var LeftToolbarContainer = reactRedux.connect(mapStateToProps$i, mapDispatchToProps$h)(LeftToolbar);
8483
8599
 
8484
- var classes$G = {"button-common-styles":"Atom-module_button-common-styles__j3EUJ","scrollbar":"Atom-module_scrollbar__iO-Ni","atom":"Atom-module_atom__g2RUu"};
8600
+ var classes$H = {"button-common-styles":"Atom-module_button-common-styles__j3EUJ","scrollbar":"Atom-module_scrollbar__iO-Ni","atom":"Atom-module_atom__g2RUu"};
8485
8601
 
8486
8602
  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; }
8603
+ 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; }
8604
+ 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
8605
  function Atom$1(_ref) {
8490
8606
  var el = _ref.el,
8491
8607
  shortcut = _ref.shortcut,
8492
8608
  selected = _ref.selected,
8493
8609
  props = _objectWithoutProperties__default["default"](_ref, _excluded$v);
8494
- return jsxRuntime.jsx("button", _objectSpread$I(_objectSpread$I({
8610
+ return jsxRuntime.jsx("button", _objectSpread$K(_objectSpread$K({
8495
8611
  title: shortcut ? "".concat(el.title, " (").concat(shortcut, ")") : el.title,
8496
- className: clsx__default["default"](classes$G.atom, {
8612
+ className: clsx__default["default"](classes$H.atom, {
8497
8613
  selected: selected
8498
8614
  }),
8499
8615
  value: el.number
@@ -8872,16 +8988,16 @@ var AtomsList = React.forwardRef(function (props, ref) {
8872
8988
  });
8873
8989
  });
8874
8990
 
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"};
8991
+ 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
8992
 
8877
8993
  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; }
8994
+ 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; }
8995
+ 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
8996
  var Group = function Group(_ref) {
8881
8997
  var children = _ref.children,
8882
8998
  className = _ref.className;
8883
8999
  return jsxRuntime.jsx("div", {
8884
- className: clsx__default["default"](classes$F.group, className),
9000
+ className: clsx__default["default"](classes$G.group, className),
8885
9001
  children: children
8886
9002
  });
8887
9003
  };
@@ -8912,12 +9028,12 @@ var RightToolbar = function RightToolbar(props) {
8912
9028
  scrollRef.current.scrollTop += sizeRef.current.offsetHeight;
8913
9029
  };
8914
9030
  return jsxRuntime.jsxs("div", {
8915
- className: clsx__default["default"](classes$F.root, className),
9031
+ className: clsx__default["default"](classes$G.root, className),
8916
9032
  children: [jsxRuntime.jsxs("div", {
8917
- className: classes$F.buttons,
9033
+ className: classes$G.buttons,
8918
9034
  ref: scrollRef,
8919
9035
  children: [jsxRuntime.jsxs(Group, {
8920
- className: classes$F.atomsList,
9036
+ className: classes$G.atomsList,
8921
9037
  children: [jsxRuntime.jsx(AtomsList, {
8922
9038
  ref: startRef,
8923
9039
  atoms: basicAtoms,
@@ -8927,15 +9043,15 @@ var RightToolbar = function RightToolbar(props) {
8927
9043
  atoms: freqAtoms,
8928
9044
  active: active,
8929
9045
  onAction: onAction
8930
- }), jsxRuntime.jsx(ToolbarGroupItem, _objectSpread$H({
9046
+ }), jsxRuntime.jsx(ToolbarGroupItem, _objectSpread$J({
8931
9047
  id: "period-table"
8932
9048
  }, rest))]
8933
9049
  }), jsxRuntime.jsx(Group, {
8934
9050
  children: jsxRuntime.jsxs("div", {
8935
9051
  ref: sizeRef,
8936
- children: [jsxRuntime.jsx(ToolbarGroupItem, _objectSpread$H({
9052
+ children: [jsxRuntime.jsx(ToolbarGroupItem, _objectSpread$J({
8937
9053
  id: "any-atom"
8938
- }, rest)), jsxRuntime.jsx(ToolbarGroupItem, _objectSpread$H({
9054
+ }, rest)), jsxRuntime.jsx(ToolbarGroupItem, _objectSpread$J({
8939
9055
  id: "extended-table"
8940
9056
  }, rest))]
8941
9057
  })
@@ -9566,6 +9682,7 @@ var TopToolbar = function TopToolbar(_ref) {
9566
9682
  isCollapsed: width < collapseLimit
9567
9683
  }), jsxRuntime.jsx(SystemControls, {
9568
9684
  onHistoryClick: function onHistoryClick() {
9685
+ console.log('History button clicked');
9569
9686
  },
9570
9687
  onSettingsOpen: onSettingsOpen,
9571
9688
  onFullscreen: onFullscreen,
@@ -9787,6 +9904,11 @@ function lookup(map, event) {
9787
9904
  }
9788
9905
  keyNorm.lookup = lookup;
9789
9906
 
9907
+ 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; } } }; }
9908
+ 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); }
9909
+ 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; }
9910
+ 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; }
9911
+ 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
9912
  function initKeydownListener(element) {
9791
9913
  return function (dispatch, getState) {
9792
9914
  var hotKeys = initHotKeys();
@@ -9798,6 +9920,7 @@ function initKeydownListener(element) {
9798
9920
  function keyHandle(dispatch, state, hotKeys, event) {
9799
9921
  if (state.modal) return;
9800
9922
  var editor = state.editor;
9923
+ var render = editor.render;
9801
9924
  var actionState = state.actionState;
9802
9925
  var actionTool = actionState.activeTool;
9803
9926
  var key = keyNorm(event);
@@ -9817,7 +9940,8 @@ function keyHandle(dispatch, state, hotKeys, event) {
9817
9940
  event.preventDefault();
9818
9941
  } else if ((group = keyNorm.lookup(hotKeys, event)) !== undefined) {
9819
9942
  var index = checkGroupOnTool(group, actionTool);
9820
- index = (index + 1) % group.length;
9943
+ var groupLength = group !== null ? group.length : 1;
9944
+ index = (index + 1) % groupLength;
9821
9945
  var actName = group[index];
9822
9946
  if (actionState[actName] && actionState[actName].disabled === true) {
9823
9947
  event.preventDefault();
@@ -9825,13 +9949,38 @@ function keyHandle(dispatch, state, hotKeys, event) {
9825
9949
  }
9826
9950
  if (actions.indexOf(actName) === -1) {
9827
9951
  var newAction = config[actName].action;
9828
- dispatch(onAction(newAction));
9952
+ var hoverItemId = getHoveredAtomId(render.ctab.atoms);
9953
+ var isHoveringOverAtom = hoverItemId !== null;
9954
+ if (isHoveringOverAtom) {
9955
+ var atomProps = _objectSpread$I({}, newAction.opts);
9956
+ var updatedAtoms = ketcherCore.fromAtomsAttrs(render.ctab, hoverItemId, atomProps, true);
9957
+ editor.update(updatedAtoms);
9958
+ } else {
9959
+ dispatch(onAction(newAction));
9960
+ }
9829
9961
  event.preventDefault();
9830
- } else if (window.clipboardData) {
9962
+ } else if (reactDeviceDetect.isIE) {
9831
9963
  exec(event);
9832
9964
  }
9833
9965
  }
9834
9966
  }
9967
+ function getHoveredAtomId(atoms) {
9968
+ var _iterator = _createForOfIteratorHelper$e(atoms.entries()),
9969
+ _step;
9970
+ try {
9971
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
9972
+ var _step$value = _slicedToArray__default["default"](_step.value, 2),
9973
+ id = _step$value[0],
9974
+ atom = _step$value[1];
9975
+ if (atom.hover) return id;
9976
+ }
9977
+ } catch (err) {
9978
+ _iterator.e(err);
9979
+ } finally {
9980
+ _iterator.f();
9981
+ }
9982
+ return null;
9983
+ }
9835
9984
  function setHotKey(key, actName, hotKeys) {
9836
9985
  if (Array.isArray(hotKeys[key])) hotKeys[key].push(actName);else hotKeys[key] = [actName];
9837
9986
  }
@@ -9859,7 +10008,7 @@ function checkGroupOnTool(group, actionTool) {
9859
10008
  return index;
9860
10009
  }
9861
10010
  var rxnTextPlain = /\$RXN\n+\s+0\s+0\s+0\n*/;
9862
- function initClipboard(dispatch, getState) {
10011
+ function initClipboard(dispatch) {
9863
10012
  var formats = Object.keys(ketcherCore.formatProperties).map(function (format) {
9864
10013
  return ketcherCore.formatProperties[format].mime;
9865
10014
  });
@@ -9906,7 +10055,7 @@ function clipData(editor) {
9906
10055
  var errorHandler = editor.errorHandler;
9907
10056
  if (struct.isBlank()) return null;
9908
10057
  var simpleObjectOrText = Boolean(struct.simpleObjects.size || struct.texts.size);
9909
- if (simpleObjectOrText && window.clipboardData) {
10058
+ if (simpleObjectOrText && reactDeviceDetect.isIE) {
9910
10059
  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
10060
  return null;
9912
10061
  }
@@ -9920,8 +10069,8 @@ function clipData(editor) {
9920
10069
  res['text/plain'] = data;
9921
10070
  res[type] = data;
9922
10071
  return res;
9923
- } catch (ex) {
9924
- errorHandler(ex.message);
10072
+ } catch (e) {
10073
+ errorHandler(e.message);
9925
10074
  }
9926
10075
  return null;
9927
10076
  }
@@ -9955,7 +10104,7 @@ var mapDispatchToProps$d = function mapDispatchToProps(dispatch) {
9955
10104
  };
9956
10105
  var AppHiddenContainer = reactRedux.connect(null, mapDispatchToProps$d)(AppHidden);
9957
10106
 
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"};
10107
+ 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
10108
 
9960
10109
  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
10110
 
@@ -9967,8 +10116,8 @@ var mediaSizes$1 = {
9967
10116
  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
10117
 
9969
10118
  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; }
10119
+ 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; }
10120
+ 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
10121
  var Dialog = function Dialog(props) {
9973
10122
  var children = props.children,
9974
10123
  title = props.title,
@@ -10021,7 +10170,7 @@ var Dialog = function Dialog(props) {
10021
10170
  event.stopPropagation();
10022
10171
  }
10023
10172
  };
10024
- return jsxRuntime.jsxs("div", _objectSpread$G(_objectSpread$G({
10173
+ return jsxRuntime.jsxs("div", _objectSpread$H(_objectSpread$H({
10025
10174
  ref: dialogRef,
10026
10175
  role: "dialog",
10027
10176
  onSubmit: function onSubmit(event) {
@@ -10078,8 +10227,8 @@ var LoadingCircles = function LoadingCircles() {
10078
10227
  };
10079
10228
 
10080
10229
  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; }
10230
+ 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; }
10231
+ 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
10232
  var SELECTION_DISTANCE_COEFFICIENT = 0.4;
10084
10233
  var SELECTION_WITHIN_TEXT = 0;
10085
10234
  var findMaps = {
@@ -10414,7 +10563,7 @@ function findClosestItem(restruct, pos, maps, skip, scale) {
10414
10563
  var id = item.id,
10415
10564
  dist = item.dist,
10416
10565
  other = _objectWithoutProperties__default["default"](item, _excluded$s);
10417
- return _objectSpread$F({
10566
+ return _objectSpread$G({
10418
10567
  map: mp,
10419
10568
  id: id,
10420
10569
  dist: dist
@@ -10741,6 +10890,7 @@ var AtomTool = function () {
10741
10890
  type: 1,
10742
10891
  stereo: ketcherCore.Bond.PATTERN.STEREO.NONE
10743
10892
  });
10893
+ this.editor.hoverIcon.show().attr('text', "".concat(atomProps.label)).attr('fill', "".concat(ketcherCore.ElementColor[atomProps.label]));
10744
10894
  if (editor.selection()) {
10745
10895
  var _editor$selection;
10746
10896
  if ((_editor$selection = editor.selection()) !== null && _editor$selection !== void 0 && _editor$selection.atoms) {
@@ -10824,12 +10974,31 @@ var AtomTool = function () {
10824
10974
  };
10825
10975
  }
10826
10976
  }
10977
+ }, {
10978
+ key: "mouseleave",
10979
+ value: function mouseleave() {
10980
+ this.editor.hoverIcon.hide();
10981
+ }
10982
+ }, {
10983
+ key: "mouseover",
10984
+ value: function mouseover() {
10985
+ this.editor.hoverIcon.show();
10986
+ }
10827
10987
  }, {
10828
10988
  key: "mousemove",
10829
10989
  value: function mousemove(event) {
10830
10990
  var rnd = this.editor.render;
10991
+ var layerX = event.layerX,
10992
+ layerY = event.layerY;
10831
10993
  if (!this.dragCtx || !this.dragCtx.item) {
10832
- this.editor.hover(this.editor.findItem(event, ['atoms', 'functionalGroups']));
10994
+ var _this$editor$hoverIco = this.editor.hoverIcon.getBBox(),
10995
+ height = _this$editor$hoverIco.height,
10996
+ width = _this$editor$hoverIco.width;
10997
+ this.editor.hoverIcon.attr({
10998
+ x: layerX - width / 2,
10999
+ y: layerY - height / 2
11000
+ });
11001
+ this.editor.hover(this.editor.findItem(event, ['atoms', 'functionalGroups']), null, event);
10833
11002
  return;
10834
11003
  }
10835
11004
  var dragCtx = this.dragCtx;
@@ -11231,12 +11400,16 @@ var BondTool = function () {
11231
11400
  beginPos = utils.calcNewAtomPos(atom === null || atom === void 0 ? void 0 : atom.pp.get_xy0(), xy1, event.ctrlKey);
11232
11401
  }
11233
11402
  }
11234
- if (dist > 0.3) dragCtx.action = ketcherCore.fromBondAddition(rnd.ctab, this.bondProps, beginAtom, endAtom, beginPos, endPos)[0];else delete dragCtx.action;
11403
+ if (dist > 0.3) {
11404
+ dragCtx.action = ketcherCore.fromBondAddition(rnd.ctab, this.bondProps, beginAtom, endAtom, beginPos, endPos)[0];
11405
+ } else {
11406
+ delete dragCtx.action;
11407
+ }
11235
11408
  this.editor.update(dragCtx.action, true);
11236
11409
  return true;
11237
11410
  }
11238
11411
  }
11239
- this.editor.hover(this.editor.findItem(event, ['atoms', 'bonds']));
11412
+ this.editor.hover(this.editor.findItem(event, ['atoms', 'bonds']), null, event);
11240
11413
  return true;
11241
11414
  }
11242
11415
  }, {
@@ -11370,7 +11543,7 @@ var ChainTool = function () {
11370
11543
  var editor = this.editor;
11371
11544
  var restruct = editor.render.ctab;
11372
11545
  var dragCtx = this.dragCtx;
11373
- editor.hover(this.editor.findItem(event, ['atoms', 'bonds']));
11546
+ editor.hover(this.editor.findItem(event, ['atoms', 'bonds']), null, event);
11374
11547
  if (!dragCtx) {
11375
11548
  return true;
11376
11549
  }
@@ -11504,7 +11677,7 @@ var ChargeTool = function () {
11504
11677
  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
11678
  this.editor.hover(ci);
11506
11679
  } else {
11507
- this.editor.hover(null);
11680
+ this.editor.hover(null, null, event);
11508
11681
  }
11509
11682
  return true;
11510
11683
  }
@@ -12286,6 +12459,7 @@ function sgroupDialog(editor, id, defaultType) {
12286
12459
  var type = sg ? sg.type : defaultType;
12287
12460
  var eventName = type === 'DAT' ? 'sdataEdit' : 'sgroupEdit';
12288
12461
  if (!selection.atoms && !selection.bonds && !sg) {
12462
+ console.info('There is no selection or sgroup');
12289
12463
  return;
12290
12464
  }
12291
12465
  var attrs;
@@ -12404,8 +12578,8 @@ function countOfSelectedComponents(restruct, atoms) {
12404
12578
  }, 0);
12405
12579
  }
12406
12580
 
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; }
12581
+ 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; }
12582
+ 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
12583
  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
12584
  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
12585
  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 +12763,7 @@ var SelectTool = function () {
12589
12763
  return true;
12590
12764
  }
12591
12765
  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));
12766
+ editor.hover(editor.findItem(event, maps, null), null, event);
12593
12767
  return true;
12594
12768
  }
12595
12769
  }, {
@@ -12675,6 +12849,16 @@ var SelectTool = function () {
12675
12849
  }
12676
12850
  var dragCtx = this.dragCtx;
12677
12851
  if (dragCtx && dragCtx.stopTapping) dragCtx.stopTapping();
12852
+ var possibleSaltOrSolvent = struct.sgroups.get(actualSgroupId);
12853
+ var isDraggingSaltOrSolventOnStructure = ketcherCore.SGroup.isSaltOrSolvent(possibleSaltOrSolvent === null || possibleSaltOrSolvent === void 0 ? void 0 : possibleSaltOrSolvent.item.data.name);
12854
+ if ((isDraggingSaltOrSolventOnStructure || this.isDraggingStructureOnSaltOrSolvent(dragCtx, struct.sgroups)) && dragCtx) {
12855
+ preventSaltAndSolventsMerge(struct, dragCtx, editor);
12856
+ delete this.dragCtx;
12857
+ if (_classPrivateFieldGet__default["default"](this, _lassoHelper).running()) {
12858
+ this.selectElementsOnCanvas(newSelected, editor, event);
12859
+ }
12860
+ return true;
12861
+ }
12678
12862
  if (dragCtx && dragCtx.item) {
12679
12863
  dragCtx.action = dragCtx.action ? ketcherCore.fromItemsFuse(struct, dragCtx.mergeItems).mergeWith(dragCtx.action) : ketcherCore.fromItemsFuse(struct, dragCtx.mergeItems);
12680
12864
  editor.hover(null);
@@ -12682,8 +12866,7 @@ var SelectTool = function () {
12682
12866
  if (dragCtx.action.operations.length !== 0) editor.update(dragCtx.action);
12683
12867
  delete this.dragCtx;
12684
12868
  } 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));
12869
+ this.selectElementsOnCanvas(newSelected, editor, event);
12687
12870
  } else if (_classPrivateFieldGet__default["default"](this, _lassoHelper).fragment) {
12688
12871
  if (!event.shiftKey) editor.selection(null);
12689
12872
  }
@@ -12799,7 +12982,7 @@ var SelectTool = function () {
12799
12982
  } else if (ci.map === 'texts') {
12800
12983
  editor.selection(closestToSel(ci));
12801
12984
  var text = molecule.texts.get(ci.id);
12802
- var dialog = editor.event.elementEdit.dispatch(_objectSpread$E(_objectSpread$E({}, text), {}, {
12985
+ var dialog = editor.event.elementEdit.dispatch(_objectSpread$F(_objectSpread$F({}, text), {}, {
12803
12986
  type: 'text'
12804
12987
  }));
12805
12988
  dialog.then(function (_ref) {
@@ -12827,6 +13010,33 @@ var SelectTool = function () {
12827
13010
  delete this.dragCtx;
12828
13011
  this.editor.hover(null);
12829
13012
  }
13013
+ }, {
13014
+ key: "selectElementsOnCanvas",
13015
+ value: function selectElementsOnCanvas(elements, editor, event) {
13016
+ var sel = elements.atoms.length > 0 ? selMerge(_classPrivateFieldGet__default["default"](this, _lassoHelper).end(), elements, false) : _classPrivateFieldGet__default["default"](this, _lassoHelper).end();
13017
+ editor.selection(!event.shiftKey ? sel : selMerge(sel, editor.selection(), false));
13018
+ }
13019
+ }, {
13020
+ key: "isDraggingStructureOnSaltOrSolvent",
13021
+ value: function isDraggingStructureOnSaltOrSolvent(dragCtx, sgroups) {
13022
+ var isDraggingOnSaltOrSolventAtom;
13023
+ var isDraggingOnSaltOrSolventBond;
13024
+ if (dragCtx !== null && dragCtx !== void 0 && dragCtx.mergeItems) {
13025
+ var mergeAtoms = Array.from(dragCtx.mergeItems.atoms.values());
13026
+ var mergeBonds = Array.from(dragCtx.mergeItems.bonds.values());
13027
+ var sgroupsOnCanvas = Array.from(sgroups.values()).map(function (_ref2) {
13028
+ var item = _ref2.item;
13029
+ return item;
13030
+ });
13031
+ isDraggingOnSaltOrSolventAtom = mergeAtoms.some(function (atomId) {
13032
+ return ketcherCore.SGroup.isAtomInSaltOrSolvent(atomId, sgroupsOnCanvas);
13033
+ });
13034
+ isDraggingOnSaltOrSolventBond = mergeBonds.some(function (bondId) {
13035
+ return ketcherCore.SGroup.isBondInSaltOrSolvent(bondId, sgroupsOnCanvas);
13036
+ });
13037
+ }
13038
+ return isDraggingOnSaltOrSolventAtom || isDraggingOnSaltOrSolventBond;
13039
+ }
12830
13040
  }]);
12831
13041
  return SelectTool;
12832
13042
  }();
@@ -12852,6 +13062,17 @@ function uniqArray(dest, add, reversible) {
12852
13062
  return dest;
12853
13063
  }, []);
12854
13064
  }
13065
+ function preventSaltAndSolventsMerge(struct, dragCtx, editor) {
13066
+ var action = dragCtx.action ? ketcherCore.fromItemsFuse(struct, null).mergeWith(dragCtx.action) : ketcherCore.fromItemsFuse(struct, null);
13067
+ editor.hover(null);
13068
+ if (dragCtx.mergeItems) {
13069
+ editor.selection(null);
13070
+ }
13071
+ editor.update(action);
13072
+ editor.event.message.dispatch({
13073
+ info: false
13074
+ });
13075
+ }
12855
13076
 
12856
13077
  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
13078
  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); }
@@ -13116,6 +13337,7 @@ var EraserTool = function () {
13116
13337
  } else if (ci.map === 'texts') {
13117
13338
  this.editor.update(ketcherCore.fromTextDeletion(restruct, ci.id));
13118
13339
  } else {
13340
+ console.error('EraserTool: unable to delete the object ' + ci.map + '[' + ci.id + ']');
13119
13341
  return;
13120
13342
  }
13121
13343
  this.editor.selection(null);
@@ -13650,7 +13872,7 @@ var ReactionArrowTool = function () {
13650
13872
  }
13651
13873
  } else {
13652
13874
  var items = this.editor.findItem(event, ['rxnArrows']);
13653
- this.editor.hover(items);
13875
+ this.editor.hover(items, null, event);
13654
13876
  }
13655
13877
  }
13656
13878
  }, {
@@ -14355,7 +14577,7 @@ var TemplateTool = function () {
14355
14577
  value: function mousemove(event) {
14356
14578
  var restruct = this.editor.render.ctab;
14357
14579
  if (!this.dragCtx) {
14358
- this.editor.hover(this.editor.findItem(event, this.findItems));
14580
+ this.editor.hover(this.editor.findItem(event, this.findItems), null, event);
14359
14581
  return true;
14360
14582
  }
14361
14583
  var dragCtx = this.dragCtx;
@@ -14461,6 +14683,10 @@ var TemplateTool = function () {
14461
14683
  }
14462
14684
  var action;
14463
14685
  var pasteItems = null;
14686
+ if (ketcherCore.SGroup.isSaltOrSolvent(this.template.molecule.name)) {
14687
+ addSaltsAndSolventsOnCanvasWithoutMerge(restruct, this.template, dragCtx, this.editor);
14688
+ return true;
14689
+ }
14464
14690
  if (!dragCtx.action) {
14465
14691
  if (!ci) {
14466
14692
  var _fromTemplateOnCanvas3 = ketcherCore.fromTemplateOnCanvas(restruct, this.template, dragCtx.xy0, 0);
@@ -14508,11 +14734,15 @@ var TemplateTool = function () {
14508
14734
  }
14509
14735
  }
14510
14736
  this.editor.selection(null);
14511
- if (!dragCtx.mergeItems && pasteItems && this.mode !== 'fg') dragCtx.mergeItems = ketcherCore.getItemsToFuse(this.editor, pasteItems);
14737
+ if (!dragCtx.mergeItems && pasteItems && this.mode !== 'fg') {
14738
+ dragCtx.mergeItems = ketcherCore.getItemsToFuse(this.editor, pasteItems);
14739
+ }
14512
14740
  dragCtx.action = dragCtx.action ? ketcherCore.fromItemsFuse(restruct, dragCtx.mergeItems).mergeWith(dragCtx.action) : ketcherCore.fromItemsFuse(restruct, dragCtx.mergeItems);
14513
14741
  this.editor.hover(null);
14514
14742
  var completeAction = dragCtx.action;
14515
- if (completeAction && !completeAction.isDummy()) this.editor.update(completeAction);
14743
+ if (completeAction && !completeAction.isDummy()) {
14744
+ this.editor.update(completeAction);
14745
+ }
14516
14746
  this.editor.event.message.dispatch({
14517
14747
  info: false
14518
14748
  });
@@ -14531,6 +14761,17 @@ var TemplateTool = function () {
14531
14761
  }]);
14532
14762
  return TemplateTool;
14533
14763
  }();
14764
+ function addSaltsAndSolventsOnCanvasWithoutMerge(restruct, template, dragCtx, editor) {
14765
+ var _fromTemplateOnCanvas5 = ketcherCore.fromTemplateOnCanvas(restruct, template, dragCtx.xy0, 0),
14766
+ _fromTemplateOnCanvas6 = _slicedToArray__default["default"](_fromTemplateOnCanvas5, 1),
14767
+ action = _fromTemplateOnCanvas6[0];
14768
+ editor.update(action);
14769
+ editor.selection(null);
14770
+ editor.hover(null);
14771
+ editor.event.message.dispatch({
14772
+ info: false
14773
+ });
14774
+ }
14534
14775
  function getSign(molecule, bond, v) {
14535
14776
  var begin = molecule.atoms.get(bond.begin).pp;
14536
14777
  var end = molecule.atoms.get(bond.end).pp;
@@ -14578,7 +14819,7 @@ var TextTool = function () {
14578
14819
  this.dragCtx.action = ketcherCore.fromMultipleMove(render.ctab, this.editor.selection() || {}, render.page2obj(event).sub(this.dragCtx.xy0));
14579
14820
  this.editor.update(this.dragCtx.action, true);
14580
14821
  } else {
14581
- this.editor.hover(this.editor.findItem(event, ['texts']));
14822
+ this.editor.hover(this.editor.findItem(event, ['texts']), null, event);
14582
14823
  }
14583
14824
  }
14584
14825
  }, {
@@ -14756,6 +14997,7 @@ function _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedec
14756
14997
  function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
14757
14998
  var SCALE = 40;
14758
14999
  var HISTORY_SIZE = 32;
15000
+ var HOVER_ICON_OPACITY = 0.7;
14759
15001
  var structObjects = ['atoms', 'bonds', 'frags', 'sgroups', 'sgroupData', 'rgroups', 'rxnArrows', 'rxnPluses', 'enhancedFlags', 'simpleObjects', 'texts'];
14760
15002
  var highlightTargets = ['atoms', 'bonds', 'rxnArrows', 'rxnPluses', 'functionalGroups', 'frags', 'merge', 'rgroups', 'sgroups', 'sgroupData', 'enhancedFlags', 'simpleObjects', 'texts'];
14761
15003
  function selectStereoFlagsIfNecessary(atoms, expAtoms) {
@@ -14792,6 +15034,7 @@ var Editor$3 = function () {
14792
15034
  this.highlights = new Highlighter(this);
14793
15035
  this.renderAndRecoordinateStruct = this.renderAndRecoordinateStruct.bind(this);
14794
15036
  this.setOptions = this.setOptions.bind(this);
15037
+ this.hoverIcon = this.render.paper.text(0, 0, '').attr('font-size', options.fontsz).attr('opacity', HOVER_ICON_OPACITY);
14795
15038
  this.event = {
14796
15039
  message: new subscription.Subscription(),
14797
15040
  elementEdit: new subscription.PipelineSubscription(),
@@ -14808,7 +15051,8 @@ var Editor$3 = function () {
14808
15051
  dearomatizeStruct: new subscription.PipelineSubscription(),
14809
15052
  enhancedStereoEdit: new subscription.PipelineSubscription(),
14810
15053
  confirm: new subscription.PipelineSubscription(),
14811
- cursor: new subscription.PipelineSubscription()
15054
+ cursor: new subscription.PipelineSubscription(),
15055
+ showInfo: new subscription.PipelineSubscription()
14812
15056
  };
14813
15057
  domEventSetup(this, clientArea);
14814
15058
  }
@@ -14838,6 +15082,10 @@ var Editor$3 = function () {
14838
15082
  this._tool.cancel();
14839
15083
  }
14840
15084
  var tool = new tools[name](this, opts);
15085
+ var isAtomToolChosen = name === 'atom';
15086
+ if (!isAtomToolChosen) {
15087
+ this.hoverIcon.hide();
15088
+ }
14841
15089
  if (!tool || tool.isNotActiveTool) {
14842
15090
  return null;
14843
15091
  }
@@ -14854,8 +15102,8 @@ var Editor$3 = function () {
14854
15102
  value: function renderAndRecoordinateStruct(struct) {
14855
15103
  var action = ketcherCore.fromNewCanvas(this.render.ctab, struct);
14856
15104
  this.update(action);
14857
- getStructCenter(this.render.ctab);
14858
- recoordinate(this);
15105
+ var structCenter = getStructCenter(this.render.ctab);
15106
+ recoordinate(this, structCenter);
14859
15107
  return this.render.ctab.molecule;
14860
15108
  }
14861
15109
  }, {
@@ -14904,8 +15152,8 @@ var Editor$3 = function () {
14904
15152
  }
14905
15153
  this.render.setZoom(value);
14906
15154
  var selection = this.selection();
14907
- getStructCenter(this.render.ctab, selection);
14908
- recoordinate(this);
15155
+ var structCenter = getStructCenter(this.render.ctab, selection);
15156
+ recoordinate(this, structCenter);
14909
15157
  this.render.update();
14910
15158
  return this.render.options.zoom;
14911
15159
  }
@@ -14950,13 +15198,35 @@ var Editor$3 = function () {
14950
15198
  }
14951
15199
  }, {
14952
15200
  key: "hover",
14953
- value: function hover(ci, newTool) {
15201
+ value: function hover(ci, newTool, event) {
14954
15202
  var tool = newTool || this._tool;
15203
+ var infoPanelData = null;
14955
15204
  if ('ci' in tool && (!ci || tool.ci.map !== ci.map || tool.ci.id !== ci.id)) {
14956
15205
  setHover(tool.ci, false, this.render);
14957
15206
  delete tool.ci;
14958
15207
  }
14959
15208
  if (ci && setHover(ci, true, this.render)) tool.ci = ci;
15209
+ if (!event) return;
15210
+ var checkFunctionGroupTypes = ['sgroups', 'functionalGroups'];
15211
+ var closestCollapsibleStructures = this.findItem(event, checkFunctionGroupTypes);
15212
+ if (closestCollapsibleStructures) {
15213
+ var _this$struct;
15214
+ var sGroup = (_this$struct = this.struct()) === null || _this$struct === void 0 ? void 0 : _this$struct.sgroups.get(closestCollapsibleStructures.id);
15215
+ if (sGroup && !sGroup.data.expanded) {
15216
+ var groupName = sGroup.data.name;
15217
+ var groupStruct = ketcherCore.FunctionalGroup.getFunctionalGroupByName(groupName);
15218
+ infoPanelData = {
15219
+ groupStruct: groupStruct,
15220
+ event: event,
15221
+ sGroup: sGroup
15222
+ };
15223
+ }
15224
+ }
15225
+ if (infoPanelData) {
15226
+ this.event.showInfo.dispatch(infoPanelData);
15227
+ } else {
15228
+ this.event.showInfo.dispatch(null);
15229
+ }
14960
15230
  }
14961
15231
  }, {
14962
15232
  key: "update",
@@ -15143,7 +15413,12 @@ function domEventSetup(editor, clientArea) {
15143
15413
  }
15144
15414
  function recoordinate(editor, rp
15145
15415
  ) {
15146
- editor.render.setScrollOffset(0, 0);
15416
+ console.assert(rp, 'Reference point not specified');
15417
+ if (rp) {
15418
+ editor.render.setScrollOffset(rp.x, rp.y);
15419
+ } else {
15420
+ editor.render.setScrollOffset(0, 0);
15421
+ }
15147
15422
  }
15148
15423
  function getStructCenter(ReStruct, selection) {
15149
15424
  var bb = ReStruct.getVBoxObj(selection || {});
@@ -15185,11 +15460,12 @@ function setHover(ci, visible, render) {
15185
15460
  return true;
15186
15461
  }
15187
15462
 
15188
- var classes$D = {"isHidden":"ContextMenu-module_isHidden__eOjF4"};
15463
+ var classes$E = {"isHidden":"ContextMenu-module_isHidden__eOjF4"};
15189
15464
 
15190
15465
  var FGContextMenu = function FGContextMenu() {
15191
15466
  var _useAppContext = useAppContext(),
15192
15467
  getKetcherInstance = _useAppContext.getKetcherInstance;
15468
+ var dispatch = reactRedux.useDispatch();
15193
15469
  var handleExpand = function handleExpand() {
15194
15470
  var editor = getKetcherInstance().editor;
15195
15471
  var action = new ketcherCore.Action();
@@ -15202,6 +15478,10 @@ var FGContextMenu = function FGContextMenu() {
15202
15478
  editor.update(action);
15203
15479
  setShowSGroupMenu(false);
15204
15480
  setTargetItems([]);
15481
+ highlightFG(dispatch, {
15482
+ group: null,
15483
+ id: null
15484
+ });
15205
15485
  };
15206
15486
  var handleRemove = function handleRemove() {
15207
15487
  var editor = getKetcherInstance().editor;
@@ -15283,7 +15563,7 @@ var FGContextMenu = function FGContextMenu() {
15283
15563
  onShow: function onShow(e) {
15284
15564
  return showMenu(e);
15285
15565
  },
15286
- className: clsx__default["default"](_defineProperty__default["default"]({}, classes$D.isHidden, !showSGroupMenu)),
15566
+ className: clsx__default["default"](_defineProperty__default["default"]({}, classes$E.isHidden, !showSGroupMenu)),
15287
15567
  children: [jsxRuntime.jsxs(reactContextmenu.MenuItem, {
15288
15568
  onClick: handleExpand,
15289
15569
  children: [targetItems.length && targetItems[0].isExpanded ? 'Contract ' : 'Expand ', "Abbreviation"]
@@ -15296,7 +15576,7 @@ var FGContextMenu = function FGContextMenu() {
15296
15576
  });
15297
15577
  };
15298
15578
 
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"};
15579
+ 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
15580
 
15301
15581
  var Cursor = function Cursor(_ref) {
15302
15582
  var Icon = _ref.Icon,
@@ -15368,38 +15648,269 @@ var Cursor = function Cursor(_ref) {
15368
15648
  });
15369
15649
  };
15370
15650
 
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; }
15651
+ var _excluded$r = ["struct", "Tag"];
15374
15652
  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
15653
  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; } }
15376
- function setupEditor(editor, props) {
15377
- var oldProps = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
15378
- var struct = props.struct,
15379
- tool = props.tool,
15380
- toolOpts = props.toolOpts,
15381
- options = props.options;
15382
- if (struct !== oldProps.struct) editor.struct(struct);
15383
- if (tool !== oldProps.tool || toolOpts !== oldProps.toolOpts) {
15384
- editor.tool(tool, toolOpts);
15385
- if (toolOpts !== oldProps.toolOpts) {
15386
- editor.event.message.dispatch({
15387
- info: JSON.stringify(toolOpts)
15388
- });
15389
- }
15654
+ 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; }
15655
+ 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; }
15656
+ function prepareStruct(struct) {
15657
+ if (struct.sgroups.size > 0) {
15658
+ var newStruct = struct.clone();
15659
+ newStruct.sgroups["delete"](0);
15660
+ return newStruct;
15390
15661
  }
15391
- if (oldProps.options && options !== oldProps.options) editor.options(options);
15392
- Object.keys(editor.event).forEach(function (name) {
15393
- var eventName = "on".concat(fp.upperFirst(name));
15394
- if (props[eventName] !== oldProps[eventName]) {
15395
- if (oldProps[eventName]) {
15396
- editor.event[name].remove(oldProps[eventName]);
15397
- }
15398
- if (props[eventName]) {
15399
- editor.event[name].add(props[eventName]);
15400
- }
15401
- }
15402
- });
15662
+ return struct;
15663
+ }
15664
+ var renderCache = new Map();
15665
+ function renderStruct(el, struct) {
15666
+ var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
15667
+ if (el && struct) {
15668
+ var _options$cachePrefix = options.cachePrefix,
15669
+ cachePrefix = _options$cachePrefix === void 0 ? '' : _options$cachePrefix;
15670
+ var cacheKey = "".concat(cachePrefix).concat(struct.name);
15671
+ if (renderCache.has(cacheKey)) {
15672
+ el.innerHTML = renderCache.get(cacheKey);
15673
+ return;
15674
+ }
15675
+ var preparedStruct = prepareStruct(struct);
15676
+ preparedStruct.initHalfBonds();
15677
+ preparedStruct.initNeighbors();
15678
+ preparedStruct.setImplicitHydrogen();
15679
+ preparedStruct.markFragments();
15680
+ var rnd = new ketcherCore.Render(el, _objectSpread$E({
15681
+ autoScale: true
15682
+ }, options));
15683
+ rnd.setMolecule(preparedStruct);
15684
+ rnd.update(true, options.viewSz);
15685
+ renderCache.set(cacheKey, rnd.clientArea.innerHTML);
15686
+ }
15687
+ }
15688
+ var StructRender = function (_Component) {
15689
+ _inherits__default["default"](StructRender, _Component);
15690
+ var _super = _createSuper$a(StructRender);
15691
+ function StructRender(props) {
15692
+ var _this;
15693
+ _classCallCheck__default["default"](this, StructRender);
15694
+ _this = _super.call(this, props);
15695
+ _this.tagRef = React.createRef();
15696
+ return _this;
15697
+ }
15698
+ _createClass__default["default"](StructRender, [{
15699
+ key: "shouldComponentUpdate",
15700
+ value: function shouldComponentUpdate(previousProps) {
15701
+ return Boolean(this.props.id && this.props.id !== previousProps.id);
15702
+ }
15703
+ }, {
15704
+ key: "update",
15705
+ value: function update() {
15706
+ var el = this.tagRef.current;
15707
+ var _this$props = this.props,
15708
+ struct = _this$props.struct,
15709
+ options = _this$props.options;
15710
+ var parsedStruct;
15711
+ if (!(struct instanceof ketcherCore.Struct)) {
15712
+ try {
15713
+ var molSerialzer = new ketcherCore.MolSerializer();
15714
+ parsedStruct = molSerialzer.deserialize(struct);
15715
+ } catch (e) {
15716
+ parsedStruct = null;
15717
+ }
15718
+ } else {
15719
+ parsedStruct = struct;
15720
+ }
15721
+ el === null || el === void 0 ? void 0 : el.childNodes.forEach(function (node) {
15722
+ node.remove();
15723
+ });
15724
+ renderStruct(el, parsedStruct, options);
15725
+ }
15726
+ }, {
15727
+ key: "componentDidMount",
15728
+ value: function componentDidMount() {
15729
+ this.update();
15730
+ }
15731
+ }, {
15732
+ key: "componentDidUpdate",
15733
+ value: function componentDidUpdate() {
15734
+ this.update();
15735
+ }
15736
+ }, {
15737
+ key: "render",
15738
+ value: function render() {
15739
+ var _this$props2 = this.props,
15740
+ struct = _this$props2.struct,
15741
+ _this$props2$Tag = _this$props2.Tag,
15742
+ Tag = _this$props2$Tag === void 0 ? 'div' : _this$props2$Tag,
15743
+ props = _objectWithoutProperties__default["default"](_this$props2, _excluded$r);
15744
+ return jsxRuntime.jsx(Tag, _objectSpread$E(_objectSpread$E({
15745
+ ref: this.tagRef
15746
+ }, props), {}, {
15747
+ children: struct ? null : 'No molecule'
15748
+ }));
15749
+ }
15750
+ }]);
15751
+ return StructRender;
15752
+ }(React.Component);
15753
+
15754
+ var functionalGroupsSelector = function functionalGroupsSelector(state) {
15755
+ return state.functionalGroups.lib;
15756
+ };
15757
+ var functionGroupInfoSelector = function functionGroupInfoSelector(state) {
15758
+ return state.functionalGroups.functionalGroupInfo;
15759
+ };
15760
+
15761
+ var classes$C = {"infoPanel":"InfoPanel-module_infoPanel__irvZL"};
15762
+
15763
+ 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; }
15764
+ 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; }
15765
+ var HOVER_DELAY = 400;
15766
+ var HOVER_PANEL_PADDING = 20;
15767
+ function getSGroupFirstAtom(sGroup, render) {
15768
+ var _render$ctab$atoms, _render$ctab$atoms$ge;
15769
+ var firstSgroupAtom = sGroup.firstSgroupAtom;
15770
+ if (firstSgroupAtom) return firstSgroupAtom.pp;
15771
+ var _sGroup$atoms = _slicedToArray__default["default"](sGroup.atoms, 1),
15772
+ firstAtomId = _sGroup$atoms[0];
15773
+ 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);
15774
+ }
15775
+ function getPanelPosition(clientX, clientY, render, sGroup) {
15776
+ var width = 0;
15777
+ var height = 0;
15778
+ var x = 0;
15779
+ var y = 0;
15780
+ if (sGroup) {
15781
+ var _render$clientArea, _render$clientArea2, _render$options$offse, _render$clientArea3, _render$options, _render$options$offse2, _render$clientArea4;
15782
+ var groupBoundingBox = sGroup.areas[0];
15783
+ var start = ketcherCore.Scale.obj2scaled(groupBoundingBox.p0, render.options);
15784
+ var end = ketcherCore.Scale.obj2scaled(groupBoundingBox.p1, render.options);
15785
+ width = end.x - start.x;
15786
+ height = end.y - start.y;
15787
+ var firstAtomPosition = getSGroupFirstAtom(sGroup, render);
15788
+ var panelPosition = ketcherCore.Scale.obj2scaled(firstAtomPosition, {
15789
+ scale: render.options.scale * render.options.zoom
15790
+ });
15791
+ x = panelPosition.x - width / 2 - HOVER_PANEL_PADDING;
15792
+ y = panelPosition.y + HOVER_PANEL_PADDING;
15793
+ 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;
15794
+ var viewportLeftLimit = HOVER_PANEL_PADDING * 2 + width / 2;
15795
+ var viewportBottomLimit = (render === null || render === void 0 ? void 0 : (_render$clientArea2 = render.clientArea) === null || _render$clientArea2 === void 0 ? void 0 : _render$clientArea2.clientHeight) - height;
15796
+ if (clientX > viewportRightLimit) {
15797
+ x = panelPosition.x - width - HOVER_PANEL_PADDING;
15798
+ } else if (clientX < viewportLeftLimit) {
15799
+ x = panelPosition.x - HOVER_PANEL_PADDING;
15800
+ }
15801
+ if (clientY > viewportBottomLimit) {
15802
+ y = panelPosition.y - height - HOVER_PANEL_PADDING * 3;
15803
+ }
15804
+ 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);
15805
+ 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);
15806
+ x += scrollOffsetX;
15807
+ y += scrollOffsetY;
15808
+ }
15809
+ return [new ketcherCore.Vec2(x, y), new ketcherCore.Vec2(width, height)];
15810
+ }
15811
+ var InfoPanel = function InfoPanel(props) {
15812
+ var _sGroup$data;
15813
+ var _props$clientX = props.clientX,
15814
+ clientX = _props$clientX === void 0 ? 0 : _props$clientX,
15815
+ _props$clientY = props.clientY,
15816
+ clientY = _props$clientY === void 0 ? 0 : _props$clientY,
15817
+ render = props.render,
15818
+ className = props.className,
15819
+ groupStruct = props.groupStruct,
15820
+ sGroup = props.sGroup;
15821
+ var _useState = React.useState(null),
15822
+ _useState2 = _slicedToArray__default["default"](_useState, 2),
15823
+ molecule = _useState2[0],
15824
+ setMolecule = _useState2[1];
15825
+ var childRef = React.useRef(null);
15826
+ var groupName = sGroup === null || sGroup === void 0 ? void 0 : (_sGroup$data = sGroup.data) === null || _sGroup$data === void 0 ? void 0 : _sGroup$data.name;
15827
+ var timer;
15828
+ React.useEffect(function () {
15829
+ if (groupStruct) {
15830
+ timer = setTimeout(function () {
15831
+ setMolecule(groupStruct.clone());
15832
+ }, HOVER_DELAY);
15833
+ } else {
15834
+ setMolecule(null);
15835
+ }
15836
+ return function () {
15837
+ return clearTimeout(timer);
15838
+ };
15839
+ }, [groupName]);
15840
+ var _getPanelPosition = getPanelPosition(clientX, clientY, render, sGroup),
15841
+ _getPanelPosition2 = _slicedToArray__default["default"](_getPanelPosition, 2),
15842
+ position = _getPanelPosition2[0],
15843
+ size = _getPanelPosition2[1];
15844
+ var x = position.x,
15845
+ y = position.y;
15846
+ var width = size.x;
15847
+ var height = size.y;
15848
+ return molecule && jsxRuntime.jsx("div", {
15849
+ style: {
15850
+ left: x + 'px',
15851
+ top: y + 'px'
15852
+ },
15853
+ className: clsx__default["default"](classes$C.infoPanel, className),
15854
+ children: jsxRuntime.jsx(StructRender, _objectSpread$D(_objectSpread$D({
15855
+ struct: molecule
15856
+ }, props), {}, {
15857
+ id: groupName,
15858
+ ref: childRef,
15859
+ options: _objectSpread$D(_objectSpread$D({}, render.options), {}, {
15860
+ autoScale: true,
15861
+ autoScaleMargin: 0,
15862
+ rescaleAmount: 1,
15863
+ cachePrefix: 'infoPanel',
15864
+ viewSz: new ketcherCore.Vec2(width, height),
15865
+ width: width,
15866
+ height: height
15867
+ })
15868
+ }))
15869
+ });
15870
+ };
15871
+ var InfoPanel$1 = reactRedux.connect(function (store) {
15872
+ var _functionGroupInfoSel, _functionGroupInfoSel2, _functionGroupInfoSel3, _functionGroupInfoSel4, _functionGroupInfoSel5, _functionGroupInfoSel6, _store$editor, _store$editor$render, _store$editor$render$;
15873
+ return {
15874
+ clientX: ((_functionGroupInfoSel = functionGroupInfoSelector(store)) === null || _functionGroupInfoSel === void 0 ? void 0 : (_functionGroupInfoSel2 = _functionGroupInfoSel.event) === null || _functionGroupInfoSel2 === void 0 ? void 0 : _functionGroupInfoSel2.clientX) || 0,
15875
+ clientY: ((_functionGroupInfoSel3 = functionGroupInfoSelector(store)) === null || _functionGroupInfoSel3 === void 0 ? void 0 : (_functionGroupInfoSel4 = _functionGroupInfoSel3.event) === null || _functionGroupInfoSel4 === void 0 ? void 0 : _functionGroupInfoSel4.clientY) || 0,
15876
+ groupStruct: ((_functionGroupInfoSel5 = functionGroupInfoSelector(store)) === null || _functionGroupInfoSel5 === void 0 ? void 0 : _functionGroupInfoSel5.groupStruct) || null,
15877
+ sGroup: ((_functionGroupInfoSel6 = functionGroupInfoSelector(store)) === null || _functionGroupInfoSel6 === void 0 ? void 0 : _functionGroupInfoSel6.sGroup) || null,
15878
+ 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
15879
+ };
15880
+ })(InfoPanel);
15881
+
15882
+ 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"];
15883
+ 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; }
15884
+ 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; }
15885
+ 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); }; }
15886
+ 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; } }
15887
+ function setupEditor(editor, props) {
15888
+ var oldProps = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
15889
+ var struct = props.struct,
15890
+ tool = props.tool,
15891
+ toolOpts = props.toolOpts,
15892
+ options = props.options;
15893
+ if (struct !== oldProps.struct) editor.struct(struct);
15894
+ if (tool !== oldProps.tool || toolOpts !== oldProps.toolOpts) {
15895
+ editor.tool(tool, toolOpts);
15896
+ if (toolOpts !== oldProps.toolOpts) {
15897
+ editor.event.message.dispatch({
15898
+ info: JSON.stringify(toolOpts)
15899
+ });
15900
+ }
15901
+ }
15902
+ if (oldProps.options && options !== oldProps.options) editor.options(options);
15903
+ Object.keys(editor.event).forEach(function (name) {
15904
+ var eventName = "on".concat(fp.upperFirst(name));
15905
+ if (props[eventName] !== oldProps[eventName]) {
15906
+ if (oldProps[eventName]) {
15907
+ editor.event[name].remove(oldProps[eventName]);
15908
+ }
15909
+ if (props[eventName]) {
15910
+ editor.event[name].add(props[eventName]);
15911
+ }
15912
+ }
15913
+ });
15403
15914
  }
15404
15915
  function removeEditorHandlers(editor, props) {
15405
15916
  Object.keys(editor.event).forEach(function (name) {
@@ -15409,13 +15920,15 @@ function removeEditorHandlers(editor, props) {
15409
15920
  }
15410
15921
  var StructEditor = function (_Component) {
15411
15922
  _inherits__default["default"](StructEditor, _Component);
15412
- var _super = _createSuper$a(StructEditor);
15923
+ var _super = _createSuper$9(StructEditor);
15413
15924
  function StructEditor(props) {
15414
15925
  var _this;
15415
15926
  _classCallCheck__default["default"](this, StructEditor);
15416
15927
  _this = _super.call(this, props);
15417
15928
  _this.state = {
15418
- enableCursor: false
15929
+ enableCursor: false,
15930
+ clientX: 0,
15931
+ clientY: 0
15419
15932
  };
15420
15933
  _this.editorRef = React.createRef();
15421
15934
  _this.logRef = React.createRef();
@@ -15435,7 +15948,7 @@ var StructEditor = function (_Component) {
15435
15948
  key: "componentDidMount",
15436
15949
  value: function componentDidMount() {
15437
15950
  var _this2 = this;
15438
- this.editor = new Editor$3(this.editorRef.current, _objectSpread$D({}, this.props.options));
15951
+ this.editor = new Editor$3(this.editorRef.current, _objectSpread$C({}, this.props.options));
15439
15952
  setupEditor(this.editor, this.props);
15440
15953
  if (this.props.onInit) this.props.onInit(this.editor);
15441
15954
  this.editor.event.message.add(function (msg) {
@@ -15447,15 +15960,15 @@ var StructEditor = function (_Component) {
15447
15960
  } catch (_unused) {
15448
15961
  el.innerHTML = msg.info;
15449
15962
  }
15450
- el.classList.add(classes$C.visible);
15963
+ el.classList.add(classes$D.visible);
15451
15964
  } else {
15452
- el.classList.remove(classes$C.visible);
15965
+ el.classList.remove(classes$D.visible);
15453
15966
  }
15454
15967
  });
15455
15968
  this.editor.event.cursor.add(function (csr) {
15456
15969
  switch (csr.status) {
15457
15970
  case 'enable':
15458
- _this2.editorRef.current.classList.add(classes$C.enableCursor);
15971
+ _this2.editorRef.current.classList.add(classes$D.enableCursor);
15459
15972
  var _this2$editorRef$curr = _this2.editorRef.current.getBoundingClientRect(),
15460
15973
  left = _this2$editorRef$curr.left,
15461
15974
  top = _this2$editorRef$curr.top,
@@ -15472,25 +15985,27 @@ var StructEditor = function (_Component) {
15472
15985
  }
15473
15986
  break;
15474
15987
  case 'move':
15475
- _this2.editorRef.current.classList.add(classes$C.enableCursor);
15988
+ _this2.editorRef.current.classList.add(classes$D.enableCursor);
15476
15989
  _this2.setState({
15477
- enableCursor: true
15990
+ enableCursor: true,
15991
+ clientX: clientX,
15992
+ clientY: clientY
15478
15993
  });
15479
15994
  break;
15480
15995
  case 'disable':
15481
- _this2.editorRef.current.classList.remove(classes$C.enableCursor);
15996
+ _this2.editorRef.current.classList.remove(classes$D.enableCursor);
15482
15997
  _this2.setState({
15483
15998
  enableCursor: false
15484
15999
  });
15485
16000
  break;
15486
16001
  case 'leave':
15487
- _this2.editorRef.current.classList.remove(classes$C.enableCursor);
16002
+ _this2.editorRef.current.classList.remove(classes$D.enableCursor);
15488
16003
  _this2.setState({
15489
16004
  enableCursor: false
15490
16005
  });
15491
16006
  break;
15492
16007
  case 'mouseover':
15493
- _this2.editorRef.current.classList.add(classes$C.enableCursor);
16008
+ _this2.editorRef.current.classList.add(classes$D.enableCursor);
15494
16009
  _this2.setState({
15495
16010
  enableCursor: true
15496
16011
  });
@@ -15534,10 +16049,11 @@ var StructEditor = function (_Component) {
15534
16049
  _this$props.onCipChange;
15535
16050
  var className = _this$props.className;
15536
16051
  _this$props.onConfirm;
16052
+ _this$props.onShowInfo;
15537
16053
  _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),
16054
+ var props = _objectWithoutProperties__default["default"](_this$props, _excluded$q);
16055
+ return jsxRuntime.jsxs(Tag, _objectSpread$C(_objectSpread$C({
16056
+ className: clsx__default["default"](classes$D.canvas, className),
15541
16057
  onMouseDown: function onMouseDown(event) {
15542
16058
  return event.preventDefault();
15543
16059
  }
@@ -15550,7 +16066,7 @@ var StructEditor = function (_Component) {
15550
16066
  holdToDisplay: -1,
15551
16067
  children: [jsxRuntime.jsx("div", {
15552
16068
  ref: this.editorRef,
15553
- className: clsx__default["default"](classes$C.intermediateCanvas),
16069
+ className: clsx__default["default"](classes$D.intermediateCanvas),
15554
16070
  onMouseDown: function onMouseDown(event) {
15555
16071
  return event.preventDefault();
15556
16072
  }
@@ -15559,13 +16075,13 @@ var StructEditor = function (_Component) {
15559
16075
  PressedIcon: SvgCompressedHand,
15560
16076
  enableHandTool: this.state.enableCursor
15561
16077
  }), jsxRuntime.jsx("div", {
15562
- className: classes$C.measureLog,
16078
+ className: classes$D.measureLog,
15563
16079
  ref: this.logRef
15564
16080
  }), indigoVerification && jsxRuntime.jsx("div", {
15565
- className: classes$C.spinnerOverlay,
16081
+ className: classes$D.spinnerOverlay,
15566
16082
  children: jsxRuntime.jsx(LoadingCircles, {})
15567
16083
  })]
15568
- }), jsxRuntime.jsx(FGContextMenu, {})]
16084
+ }), jsxRuntime.jsx(InfoPanel$1, _objectSpread$C(_objectSpread$C({}, this.state), this.props)), jsxRuntime.jsx(FGContextMenu, {})]
15569
16085
  }));
15570
16086
  }
15571
16087
  }]);
@@ -15758,19 +16274,19 @@ var ErrorPopover = function ErrorPopover(_ref) {
15758
16274
  });
15759
16275
  };
15760
16276
 
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"};
16277
+ 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
16278
 
15763
- var _excluded$q = ["schema", "value", "onChange", "type"],
15764
- _excluded2$5 = ["schema", "value", "onChange"],
16279
+ var _excluded$p = ["schema", "value", "onChange", "type", "isFocused"],
16280
+ _excluded2$4 = ["schema", "value", "onChange"],
15765
16281
  _excluded3$1 = ["schema", "value", "onChange"],
15766
16282
  _excluded4$1 = ["schema", "value", "selected", "onSelect", "type", "checked"],
15767
16283
  _excluded5$1 = ["value", "onChange", "name"],
15768
16284
  _excluded6 = ["children", "onChange", "style"],
15769
16285
  _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; }
16286
+ 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); }; }
16287
+ 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; } }
16288
+ 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; }
16289
+ 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
16290
  function GenericInput(_ref) {
15775
16291
  _ref.schema;
15776
16292
  var _ref$value = _ref.value,
@@ -15778,14 +16294,21 @@ function GenericInput(_ref) {
15778
16294
  onChange = _ref.onChange,
15779
16295
  _ref$type = _ref.type,
15780
16296
  type = _ref$type === void 0 ? 'text' : _ref$type,
15781
- props = _objectWithoutProperties__default["default"](_ref, _excluded$q);
16297
+ _ref$isFocused = _ref.isFocused,
16298
+ isFocused = _ref$isFocused === void 0 ? false : _ref$isFocused,
16299
+ props = _objectWithoutProperties__default["default"](_ref, _excluded$p);
16300
+ var inputRef = React.useRef(null);
16301
+ React.useEffect(function () {
16302
+ if (inputRef.current && isFocused) inputRef.current.focus();
16303
+ }, [inputRef, isFocused]);
15782
16304
  return jsxRuntime.jsxs(jsxRuntime.Fragment, {
15783
- children: [jsxRuntime.jsx("input", _objectSpread$C({
16305
+ children: [jsxRuntime.jsx("input", _objectSpread$B({
15784
16306
  type: type,
15785
16307
  value: value,
15786
16308
  onInput: onChange,
15787
16309
  onChange: onChange,
15788
- className: classes$A.input
16310
+ className: clsx__default["default"](classes$A.input, classes$A.genericInput),
16311
+ ref: inputRef
15789
16312
  }, props)), type === 'checkbox' && jsxRuntime.jsx("span", {
15790
16313
  className: classes$A.checkbox
15791
16314
  }), type === 'radio' && jsxRuntime.jsx("span", {
@@ -15803,8 +16326,8 @@ function TextArea(_ref2) {
15803
16326
  _ref2.schema;
15804
16327
  var value = _ref2.value,
15805
16328
  onChange = _ref2.onChange,
15806
- rest = _objectWithoutProperties__default["default"](_ref2, _excluded2$5);
15807
- return jsxRuntime.jsx("textarea", _objectSpread$C({
16329
+ rest = _objectWithoutProperties__default["default"](_ref2, _excluded2$4);
16330
+ return jsxRuntime.jsx("textarea", _objectSpread$B({
15808
16331
  value: value,
15809
16332
  onInput: onChange
15810
16333
  }, rest));
@@ -15820,11 +16343,12 @@ function CheckBox(_ref3) {
15820
16343
  rest = _objectWithoutProperties__default["default"](_ref3, _excluded3$1);
15821
16344
  return jsxRuntime.jsxs("div", {
15822
16345
  className: classes$A.fieldSetItem,
15823
- children: [jsxRuntime.jsx("input", _objectSpread$C({
16346
+ children: [jsxRuntime.jsx("input", _objectSpread$B({
15824
16347
  type: "checkbox",
15825
16348
  checked: value,
15826
16349
  onClick: onChange,
15827
- onChange: onChange
16350
+ onChange: onChange,
16351
+ className: classes$A.input
15828
16352
  }, rest)), jsxRuntime.jsx("span", {
15829
16353
  className: classes$A.checkbox
15830
16354
  })]
@@ -15874,16 +16398,16 @@ function FieldSet(_ref5) {
15874
16398
  rest = _objectWithoutProperties__default["default"](_ref5, _excluded4$1);
15875
16399
  return jsxRuntime.jsx("fieldset", {
15876
16400
  onClick: onSelect,
15877
- className: "radio",
15878
16401
  children: enumSchema(schema, function (title, val) {
15879
16402
  return jsxRuntime.jsx("li", {
15880
16403
  className: classes$A.fieldSetItem,
15881
16404
  children: jsxRuntime.jsxs("label", {
15882
16405
  className: classes$A.fieldSetLabel,
15883
- children: [jsxRuntime.jsx("input", _objectSpread$C({
16406
+ children: [jsxRuntime.jsx("input", _objectSpread$B({
15884
16407
  type: type,
15885
16408
  defaultChecked: type === 'radio' ? selected(val, checked) : selected(val, value),
15886
- value: _typeof__default["default"](val) !== 'object' && val
16409
+ value: _typeof__default["default"](val) !== 'object' && val,
16410
+ className: classes$A.input
15887
16411
  }, rest)), type === 'checkbox' && jsxRuntime.jsx("span", {
15888
16412
  className: classes$A.checkbox
15889
16413
  }), type === 'radio' && jsxRuntime.jsx("span", {
@@ -15913,7 +16437,7 @@ function Slider(_ref6) {
15913
16437
  rest = _objectWithoutProperties__default["default"](_ref6, _excluded5$1);
15914
16438
  return jsxRuntime.jsxs("div", {
15915
16439
  className: classes$A.slider,
15916
- children: [jsxRuntime.jsx("input", _objectSpread$C({
16440
+ children: [jsxRuntime.jsx("input", _objectSpread$B({
15917
16441
  type: "checkbox",
15918
16442
  checked: value,
15919
16443
  onClick: onChange,
@@ -15946,7 +16470,7 @@ function inputCtrl(component, schema, _onChange) {
15946
16470
  type: 'text'
15947
16471
  };
15948
16472
  }
15949
- return _objectSpread$C({
16473
+ return _objectSpread$B({
15950
16474
  onChange: function onChange(ev) {
15951
16475
  var val = !component.val ? ev : component.val(ev, schema);
15952
16476
  _onChange(val);
@@ -16016,7 +16540,7 @@ function shallowCompare(a, b) {
16016
16540
  }
16017
16541
  var Input = function (_Component) {
16018
16542
  _inherits__default["default"](Input, _Component);
16019
- var _super = _createSuper$9(Input);
16543
+ var _super = _createSuper$8(Input);
16020
16544
  function Input() {
16021
16545
  _classCallCheck__default["default"](this, Input);
16022
16546
  return _super.apply(this, arguments);
@@ -16042,7 +16566,7 @@ var Input = function (_Component) {
16042
16566
  _this$props.onChange;
16043
16567
  var props = _objectWithoutProperties__default["default"](_this$props, _excluded7);
16044
16568
  var Component = this.component;
16045
- return jsxRuntime.jsx(Component, _objectSpread$C(_objectSpread$C({}, this.ctrl), props));
16569
+ return jsxRuntime.jsx(Component, _objectSpread$B(_objectSpread$B({}, this.ctrl), props));
16046
16570
  }
16047
16571
  }]);
16048
16572
  return Input;
@@ -16125,17 +16649,18 @@ function fileOpener(server) {
16125
16649
  });
16126
16650
  }
16127
16651
  function throughFileReader(file) {
16652
+ var isCDX = file.name.endsWith('cdx');
16128
16653
  return new Promise(function (resolve, reject) {
16129
16654
  var rd = new FileReader();
16130
16655
  rd.onload = function () {
16131
- var content = rd.result;
16656
+ var content = isCDX ? rd.result.slice(37) : rd.result;
16132
16657
  if (file.msClose) file.msClose();
16133
16658
  resolve(content);
16134
16659
  };
16135
16660
  rd.onerror = function (event) {
16136
16661
  reject(event);
16137
16662
  };
16138
- rd.readAsText(file, 'UTF-8');
16663
+ isCDX ? rd.readAsDataURL(file) : rd.readAsText(file, 'UTF-8');
16139
16664
  });
16140
16665
  }
16141
16666
  function throughFileSystemObject(fso, file) {
@@ -16160,18 +16685,28 @@ function greekify(str) {
16160
16685
  });
16161
16686
  }
16162
16687
  function filterLib(lib, filter) {
16163
- var re = new RegExp(fp.escapeRegExp(greekify(filter)), 'i');
16688
+ console.warn('Filter', filter);
16689
+ var trimmedFilter = filter.trim();
16690
+ var re = new RegExp(fp.escapeRegExp(greekify(trimmedFilter)), 'i');
16164
16691
  return fp.flow(fp.filter(function (item) {
16165
- return !filter || re.test(greekify(item.struct.name)) || re.test(greekify(item.props.group));
16692
+ return !trimmedFilter || re.test(greekify(item.struct.name)) || re.test(greekify(item.props.group));
16166
16693
  }), fp.reduce(function (res, item) {
16167
16694
  if (!res[item.props.group]) res[item.props.group] = [item];else res[item.props.group].push(item);
16168
16695
  return res;
16169
16696
  }, {}))(lib);
16170
16697
  }
16171
16698
  function filterFGLib(lib, filter) {
16172
- var re = new RegExp(fp.escapeRegExp(greekify(filter)), 'i');
16699
+ console.warn('Filter', filter);
16700
+ var trimmedFilter = filter.trim();
16701
+ var re = new RegExp(fp.escapeRegExp(greekify(trimmedFilter)), 'i');
16702
+ var searchFunction = function searchFunction(item) {
16703
+ var fields = [item.struct.name, item.props.abbreviation, item.props.name].filter(Boolean);
16704
+ return fields.some(function (field) {
16705
+ return re.test(greekify(field));
16706
+ });
16707
+ };
16173
16708
  return fp.flow(fp.filter(function (item) {
16174
- return !filter || re.test(greekify(item.struct.name));
16709
+ return !trimmedFilter || searchFunction(item);
16175
16710
  }), fp.reduce(function (res, item) {
16176
16711
  if (!res[item.props.group]) res[item.props.group] = [item];else res[item.props.group].push(item);
16177
16712
  return res;
@@ -16188,18 +16723,18 @@ var getSelectOptionsFromSchema = function getSelectOptionsFromSchema(schema) {
16188
16723
  }, []);
16189
16724
  };
16190
16725
 
16191
- var _excluded$p = ["schema", "result", "customValid"],
16192
- _excluded2$4 = ["labelPos", "title", "children"],
16726
+ var _excluded$o = ["schema", "result", "customValid"],
16727
+ _excluded2$3 = ["labelPos", "title", "children"],
16193
16728
  _excluded3 = ["name", "onChange", "component", "labelPos", "className"],
16194
16729
  _excluded4 = ["dataError"],
16195
16730
  _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; } }
16731
+ 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; }
16732
+ 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; }
16733
+ 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); }; }
16734
+ 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
16735
  var Form = function (_Component) {
16201
16736
  _inherits__default["default"](Form, _Component);
16202
- var _super = _createSuper$8(Form);
16737
+ var _super = _createSuper$7(Form);
16203
16738
  function Form(props) {
16204
16739
  var _this;
16205
16740
  _classCallCheck__default["default"](this, Form);
@@ -16214,7 +16749,7 @@ var Form = function (_Component) {
16214
16749
  valid = _this$schema$serializ.valid,
16215
16750
  errors = _this$schema$serializ.errors;
16216
16751
  var errs = getErrorsObj(errors);
16217
- var initialState = _objectSpread$B(_objectSpread$B({}, init), {}, {
16752
+ var initialState = _objectSpread$A(_objectSpread$A({}, init), {}, {
16218
16753
  init: true
16219
16754
  });
16220
16755
  onUpdate(initialState, valid, errs);
@@ -16228,7 +16763,7 @@ var Form = function (_Component) {
16228
16763
  schema = _this$props2.schema,
16229
16764
  result = _this$props2.result;
16230
16765
  _this$props2.customValid;
16231
- var rest = _objectWithoutProperties__default["default"](_this$props2, _excluded$p);
16766
+ var rest = _objectWithoutProperties__default["default"](_this$props2, _excluded$o);
16232
16767
  if (schema.key && schema.key !== prevProps.schema.key) {
16233
16768
  this.schema = propSchema(schema, rest);
16234
16769
  this.schema.serialize(result);
@@ -16298,8 +16833,8 @@ function Label(_ref) {
16298
16833
  var labelPos = _ref.labelPos,
16299
16834
  title = _ref.title,
16300
16835
  children = _ref.children,
16301
- props = _objectWithoutProperties__default["default"](_ref, _excluded2$4);
16302
- return jsxRuntime.jsxs("label", _objectSpread$B(_objectSpread$B({}, props), {}, {
16836
+ props = _objectWithoutProperties__default["default"](_ref, _excluded2$3);
16837
+ return jsxRuntime.jsxs("label", _objectSpread$A(_objectSpread$A({}, props), {}, {
16303
16838
  children: [title && labelPos !== 'after' ? jsxRuntime.jsx("span", {
16304
16839
  children: title
16305
16840
  }) : '', children, title && labelPos === 'after' ? jsxRuntime.jsx("span", {
@@ -16332,10 +16867,10 @@ function Field(props) {
16332
16867
  dataError = _stateStore$field.dataError,
16333
16868
  fieldOpts = _objectWithoutProperties__default["default"](_stateStore$field, _excluded4);
16334
16869
  var Component = component;
16335
- var formField = component ? jsxRuntime.jsx(Component, _objectSpread$B(_objectSpread$B({
16870
+ var formField = component ? jsxRuntime.jsx(Component, _objectSpread$A(_objectSpread$A({
16336
16871
  name: name,
16337
16872
  schema: desc
16338
- }, fieldOpts), rest)) : jsxRuntime.jsx(Input, _objectSpread$B(_objectSpread$B({
16873
+ }, fieldOpts), rest)) : jsxRuntime.jsx(Input, _objectSpread$A(_objectSpread$A({
16339
16874
  name: name,
16340
16875
  schema: desc
16341
16876
  }, fieldOpts), rest));
@@ -16372,7 +16907,7 @@ var SelectOneOf = function SelectOneOf(props) {
16372
16907
  selectDesc["enum"].push(item);
16373
16908
  selectDesc.enumNames.push(schema[item].title || item);
16374
16909
  });
16375
- return jsxRuntime.jsx(Field, _objectSpread$B(_objectSpread$B({
16910
+ return jsxRuntime.jsx(Field, _objectSpread$A(_objectSpread$A({
16376
16911
  name: name,
16377
16912
  options: getSelectOptionsFromSchema(selectDesc),
16378
16913
  title: title
@@ -16395,7 +16930,7 @@ function propSchema(schema, _ref2) {
16395
16930
  schema = Object.assign({}, schema);
16396
16931
  schema.properties = Object.keys(customValid).reduce(function (res, prop) {
16397
16932
  ajv.addFormat(customValid[prop].name, customValid[prop]);
16398
- res[prop] = _objectSpread$B({
16933
+ res[prop] = _objectSpread$A({
16399
16934
  format: prop
16400
16935
  }, res[prop]);
16401
16936
  return res;
@@ -16557,9 +17092,9 @@ var ColorPicker = function ColorPicker(props) {
16557
17092
 
16558
17093
  var styles$a = {"measureInput":"measure-input-module_measureInput__uZQ-j","select":"measure-input-module_select__1ZFmv"};
16559
17094
 
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; }
17095
+ var _excluded$n = ["schema", "value", "onChange", "name"];
17096
+ 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; }
17097
+ 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
17098
  var selectOptions$1 = getSelectOptionsFromSchema({
16564
17099
  "enum": ['cm', 'px', 'pt', 'inch']
16565
17100
  });
@@ -16568,7 +17103,7 @@ var MeasureInput = function MeasureInput(_ref) {
16568
17103
  value = _ref.value,
16569
17104
  onChange = _ref.onChange,
16570
17105
  name = _ref.name,
16571
- rest = _objectWithoutProperties__default["default"](_ref, _excluded$o);
17106
+ rest = _objectWithoutProperties__default["default"](_ref, _excluded$n);
16572
17107
  var _useState = React.useState('px'),
16573
17108
  _useState2 = _slicedToArray__default["default"](_useState, 2),
16574
17109
  measure = _useState2[0],
@@ -16602,7 +17137,7 @@ var MeasureInput = function MeasureInput(_ref) {
16602
17137
  calcValue();
16603
17138
  }, [value, measure, calcValue]);
16604
17139
  var desc = schema || schema.properties[name];
16605
- return jsxRuntime.jsxs("div", _objectSpread$A(_objectSpread$A({
17140
+ return jsxRuntime.jsxs("div", _objectSpread$z(_objectSpread$z({
16606
17141
  className: styles$a.measureInput
16607
17142
  }, rest), {}, {
16608
17143
  children: [jsxRuntime.jsx("span", {
@@ -16638,14 +17173,14 @@ function convertValue(value, measureFrom, measureTo) {
16638
17173
 
16639
17174
  var classes$x = {"button-common-styles":"buttons-module_button-common-styles__qWDOz","scrollbar":"buttons-module_scrollbar__SpaVV","openButton":"buttons-module_openButton__wErm9"};
16640
17175
 
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; } }
17176
+ var _excluded$m = ["children", "type", "server", "className"];
17177
+ 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; }
17178
+ 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; }
17179
+ 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); }; }
17180
+ 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
17181
  var OpenButton = function (_Component) {
16647
17182
  _inherits__default["default"](OpenButton, _Component);
16648
- var _super = _createSuper$7(OpenButton);
17183
+ var _super = _createSuper$6(OpenButton);
16649
17184
  function OpenButton(props) {
16650
17185
  var _this;
16651
17186
  _classCallCheck__default["default"](this, OpenButton);
@@ -16685,8 +17220,8 @@ var OpenButton = function (_Component) {
16685
17220
  type = _this$props2.type;
16686
17221
  _this$props2.server;
16687
17222
  var className = _this$props2.className,
16688
- props = _objectWithoutProperties__default["default"](_this$props2, _excluded$n);
16689
- return jsxRuntime.jsxs("button", _objectSpread$z(_objectSpread$z({
17223
+ props = _objectWithoutProperties__default["default"](_this$props2, _excluded$m);
17224
+ return jsxRuntime.jsxs("button", _objectSpread$y(_objectSpread$y({
16690
17225
  onClick: function onClick() {
16691
17226
  return _this2.btn.click();
16692
17227
  },
@@ -16708,8 +17243,8 @@ var OpenButton = function (_Component) {
16708
17243
  return OpenButton;
16709
17244
  }(React.Component);
16710
17245
 
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; }
17246
+ 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; }
17247
+ 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
17248
  var SaveButton$1 = function SaveButton(props) {
16714
17249
  var noop = function noop() {
16715
17250
  return null;
@@ -16763,7 +17298,7 @@ var SaveButton$1 = function SaveButton(props) {
16763
17298
  onError(error);
16764
17299
  });
16765
17300
  };
16766
- return jsxRuntime.jsx("button", _objectSpread$y(_objectSpread$y({
17301
+ return jsxRuntime.jsx("button", _objectSpread$x(_objectSpread$x({
16767
17302
  className: className,
16768
17303
  onClick: function onClick(event) {
16769
17304
  save(event);
@@ -16942,9 +17477,9 @@ var fieldGroups = {
16942
17477
  showLoopIds: 'Options for Debugging'
16943
17478
  };
16944
17479
 
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; }
17480
+ var _excluded$l = ["initState", "formState", "server", "onOpenFile", "onReset", "appOpts"];
17481
+ 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; }
17482
+ 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
17483
  var defaultSettings = getDefaultOptions();
16949
17484
  var HeaderContent$1 = function HeaderContent(_ref) {
16950
17485
  var server = _ref.server,
@@ -16995,7 +17530,7 @@ var SettingsDialog = function SettingsDialog(props) {
16995
17530
  onOpenFile = props.onOpenFile,
16996
17531
  onReset = props.onReset,
16997
17532
  appOpts = props.appOpts,
16998
- prop = _objectWithoutProperties__default["default"](props, _excluded$m);
17533
+ prop = _objectWithoutProperties__default["default"](props, _excluded$l);
16999
17534
  var _useState = React.useState(new Set()),
17000
17535
  _useState2 = _slicedToArray__default["default"](_useState, 2),
17001
17536
  changedGroups = _useState2[0],
@@ -17189,7 +17724,7 @@ var SettingsDialog = function SettingsDialog(props) {
17189
17724
  formState: formState,
17190
17725
  initState: initState
17191
17726
  }),
17192
- children: jsxRuntime.jsx(Form$1, _objectSpread$x(_objectSpread$x({
17727
+ children: jsxRuntime.jsx(Form$1, _objectSpread$w(_objectSpread$w({
17193
17728
  schema: optionsSchema,
17194
17729
  init: initState
17195
17730
  }, formState), {}, {
@@ -17217,6 +17752,7 @@ var mapDispatchToProps$b = function mapDispatchToProps(dispatch, ownProps) {
17217
17752
  result: JSON.parse(newOpts)
17218
17753
  }));
17219
17754
  } catch (ex) {
17755
+ console.info('Bad file');
17220
17756
  }
17221
17757
  },
17222
17758
  onReset: function onReset() {
@@ -17260,9 +17796,9 @@ function ErrorsCheck(props) {
17260
17796
 
17261
17797
  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
17798
 
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; }
17799
+ var _excluded$k = ["formState", "checkState", "onCheck", "onApply", "onCancel"];
17800
+ 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; }
17801
+ 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
17802
  var checkSchema = {
17267
17803
  title: 'Check',
17268
17804
  type: 'object',
@@ -17320,7 +17856,7 @@ function CheckDialog(props) {
17320
17856
  onCheck = props.onCheck,
17321
17857
  onApply = props.onApply,
17322
17858
  onCancel = props.onCancel,
17323
- restProps = _objectWithoutProperties__default["default"](props, _excluded$l);
17859
+ restProps = _objectWithoutProperties__default["default"](props, _excluded$k);
17324
17860
  var _formState$result = formState.result,
17325
17861
  result = _formState$result === void 0 ? checkState : _formState$result,
17326
17862
  moleculeErrors = formState.moleculeErrors;
@@ -17356,7 +17892,7 @@ function CheckDialog(props) {
17356
17892
  return jsxRuntime.jsx(Dialog, {
17357
17893
  title: "Structure Check",
17358
17894
  className: style.dialog_body,
17359
- params: _objectSpread$w(_objectSpread$w({}, restProps), {}, {
17895
+ params: _objectSpread$v(_objectSpread$v({}, restProps), {}, {
17360
17896
  onCancel: onCancel
17361
17897
  }),
17362
17898
  buttons: [],
@@ -17368,7 +17904,7 @@ function CheckDialog(props) {
17368
17904
  isCheckedWithNewSettings: isCheckedWithNewSettings
17369
17905
  }),
17370
17906
  withDivider: true,
17371
- children: jsxRuntime.jsx(Form$1, _objectSpread$w(_objectSpread$w({
17907
+ children: jsxRuntime.jsx(Form$1, _objectSpread$v(_objectSpread$v({
17372
17908
  schema: checkSchema,
17373
17909
  init: checkState
17374
17910
  }, formState), {}, {
@@ -17494,9 +18030,9 @@ function FrozenInput(_ref) {
17494
18030
 
17495
18031
  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
18032
 
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; } }
18033
+ var _excluded$j = ["values", "round", "loading", "onAnalyse", "onChangeRound"];
18034
+ 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); }; }
18035
+ 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
18036
  function roundOff(value, round) {
17501
18037
  if (typeof value === 'number') return value.toFixed(round);
17502
18038
  return value.replace(/[0-9]*\.[0-9]+/g, function (str) {
@@ -17508,7 +18044,7 @@ var selectOptions = getSelectOptionsFromSchema({
17508
18044
  });
17509
18045
  var AnalyseDialog = function (_Component) {
17510
18046
  _inherits__default["default"](AnalyseDialog, _Component);
17511
- var _super = _createSuper$6(AnalyseDialog);
18047
+ var _super = _createSuper$5(AnalyseDialog);
17512
18048
  function AnalyseDialog() {
17513
18049
  _classCallCheck__default["default"](this, AnalyseDialog);
17514
18050
  return _super.apply(this, arguments);
@@ -17527,7 +18063,7 @@ var AnalyseDialog = function (_Component) {
17527
18063
  loading = _this$props.loading;
17528
18064
  _this$props.onAnalyse;
17529
18065
  var onChangeRound = _this$props.onChangeRound,
17530
- props = _objectWithoutProperties__default["default"](_this$props, _excluded$k);
18066
+ props = _objectWithoutProperties__default["default"](_this$props, _excluded$j);
17531
18067
  return jsxRuntime.jsx(Dialog, {
17532
18068
  title: "Calculated Values",
17533
18069
  className: classes$u.analyse,
@@ -17622,80 +18158,6 @@ var mapDispatchToProps$9 = function mapDispatchToProps(dispatch) {
17622
18158
  };
17623
18159
  var Analyse = reactRedux.connect(mapStateToProps$c, mapDispatchToProps$9)(AnalyseDialog);
17624
18160
 
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
18161
  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
18162
 
17701
18163
  var DialogActionButton = function DialogActionButton(_ref) {
@@ -17715,7 +18177,7 @@ var DialogActionButton = function DialogActionButton(_ref) {
17715
18177
  };
17716
18178
 
17717
18179
  var _excluded$i = ["file", "structStr", "fragment", "version", "imagoVersions", "onOk"],
17718
- _excluded2$3 = ["onRecognize", "isFragment", "onImage", "onChangeImago"];
18180
+ _excluded2$2 = ["onRecognize", "isFragment", "onImage", "onChangeImago"];
17719
18181
  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
18182
  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
18183
  function isImage(file) {
@@ -17766,7 +18228,7 @@ function RecognizeDialog(prop) {
17766
18228
  partProps.isFragment;
17767
18229
  var onImage = partProps.onImage,
17768
18230
  onChangeImago = partProps.onChangeImago,
17769
- props = _objectWithoutProperties__default["default"](partProps, _excluded2$3);
18231
+ props = _objectWithoutProperties__default["default"](partProps, _excluded2$2);
17770
18232
  var _useState = React.useState(true),
17771
18233
  _useState2 = _slicedToArray__default["default"](_useState, 2),
17772
18234
  canPreviewImage = _useState2[0],
@@ -17985,7 +18447,7 @@ var MiewDialog = function MiewDialog(_ref) {
17985
18447
  var onMiewInit = React.useCallback(function (miew) {
17986
18448
  miewRef.current = miew;
17987
18449
  var factory = new ketcherCore.FormatterFactory(server);
17988
- var service = factory.create('cml');
18450
+ var service = factory.create(ketcherCore.SupportedFormat.cml);
17989
18451
  service.getStructureFromStructAsync(struct).then(function (res) {
17990
18452
  return miew.load(res, {
17991
18453
  sourceType: 'immediate',
@@ -17994,7 +18456,7 @@ var MiewDialog = function MiewDialog(_ref) {
17994
18456
  }).then(function () {
17995
18457
  return miew.setOptions(miewOpts);
17996
18458
  })["catch"](function (ex) {
17997
- return (void 0);
18459
+ return console.error(ex.message);
17998
18460
  });
17999
18461
  }, [miewOpts, server, struct]);
18000
18462
  var exportCML = React.useCallback(function () {
@@ -19225,7 +19687,8 @@ var SaveDialog = function (_Component) {
19225
19687
  _this.isRxn = _this.props.struct.hasRxnArrow();
19226
19688
  _this.textAreaRef = React.createRef();
19227
19689
  var formats = [_this.isRxn ? 'rxn' : 'mol', 'smiles', 'ket'];
19228
- if (_this.props.server) formats.push(_this.isRxn ? 'rxnV3000' : 'molV3000', 'smilesExt', 'smarts', 'inChI', 'inChIAuxInfo', 'cml', 'svg', 'png', 'cdxml');
19690
+ if (_this.props.server) formats.push(_this.isRxn ? 'rxnV3000' : 'molV3000', 'smilesExt', 'smarts', 'inChI', 'inChIAuxInfo', 'cml', 'svg', 'png', 'cdxml'
19691
+ );
19229
19692
  _this.saveSchema = saveSchema;
19230
19693
  _this.saveSchema.properties.format = Object.assign(_this.saveSchema.properties.format, {
19231
19694
  "enum": formats,
@@ -20350,51 +20813,27 @@ var Rgroup = reactRedux.connect(function (store) {
20350
20813
 
20351
20814
  var classes$9 = {"button-common-styles":"sgroup-module_button-common-styles__MAeEP","scrollbar":"sgroup-module_scrollbar__T3fpf","sgroup":"sgroup-module_sgroup__Kh2Xj"};
20352
20815
 
20353
- var _excluded$5 = ["title", "name", "schema"],
20354
- _excluded2$2 = ["context", "fieldName", "fieldValue", "type", "radiobuttons", "formState"];
20816
+ var _excluded$5 = ["context", "fieldName", "fieldValue", "type", "radiobuttons", "formState"];
20355
20817
  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
20818
  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,
20819
+ function SData(_ref) {
20820
+ var context = _ref.context,
20821
+ fieldName = _ref.fieldName,
20822
+ fieldValue = _ref.fieldValue,
20823
+ type = _ref.type,
20824
+ radiobuttons = _ref.radiobuttons,
20825
+ formState = _ref.formState,
20361
20826
  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
20827
  var _result = formState.result,
20389
20828
  _valid = formState.valid;
20829
+ var formSchema = sdataCustomSchema;
20390
20830
  var init = {
20391
- context: context,
20392
- fieldName: fieldName || getSdataDefault(context),
20831
+ context: context || getSdataDefault(formSchema, 'context'),
20832
+ fieldName: fieldName || getSdataDefault(formSchema, 'fieldName'),
20393
20833
  type: type,
20394
- radiobuttons: radiobuttons
20834
+ radiobuttons: radiobuttons || getSdataDefault(formSchema, 'radiobuttons')
20395
20835
  };
20396
- init.fieldValue = fieldValue || getSdataDefault(context, init.fieldName);
20397
- var formSchema = sdataSchema[_result.context][_result.fieldName] || sdataCustomSchema;
20836
+ init.fieldValue = fieldValue || getSdataDefault(formSchema, 'fieldValue');
20398
20837
  var serialize = {
20399
20838
  context: _result.context.trim(),
20400
20839
  fieldName: _result.fieldName.trim(),
@@ -20422,20 +20861,20 @@ function SData(_ref2) {
20422
20861
  init: init
20423
20862
  }, formState), {}, {
20424
20863
  children: jsxRuntime.jsxs("fieldset", {
20425
- children: [jsxRuntime.jsx(SelectOneOf, {
20426
- title: "Context",
20864
+ className: "sdata",
20865
+ children: [jsxRuntime.jsx(Field, {
20427
20866
  name: "context",
20428
- schema: sdataSchema
20429
- }), jsxRuntime.jsx(SelectInput, {
20430
- title: "Field name",
20867
+ options: getSelectOptionsFromSchema(formSchema.properties.context),
20868
+ component: Select
20869
+ }), jsxRuntime.jsx(Field, {
20431
20870
  name: "fieldName",
20432
- schema: sdataSchema[_result.context]
20433
- }), content$1(formSchema, _result.context, _result.fieldName, radiobuttons)]
20871
+ placeholder: "Enter name"
20872
+ }), content$1(formSchema, _result.context, _result.fieldName, _result.fieldValue, radiobuttons)]
20434
20873
  })
20435
20874
  }))
20436
20875
  });
20437
20876
  }
20438
- var content$1 = function content(schema, context, fieldName, checked) {
20877
+ var content$1 = function content(schema, context, fieldName, fieldValue, checked) {
20439
20878
  return Object.keys(schema.properties).filter(function (prop) {
20440
20879
  return prop !== 'type' && prop !== 'context' && prop !== 'fieldName';
20441
20880
  }).map(function (prop) {
@@ -20444,10 +20883,9 @@ var content$1 = function content(schema, context, fieldName, checked) {
20444
20883
  checked: checked,
20445
20884
  type: "radio",
20446
20885
  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),
20886
+ }, "".concat(context, "-").concat(fieldName, "-").concat(prop, "-radio")) : prop === 'fieldValue' ? jsxRuntime.jsx(Field, {
20449
20887
  name: prop,
20450
- component: Select
20888
+ placeholder: "Enter value"
20451
20889
  }, "".concat(context, "-").concat(fieldName, "-").concat(prop, "-select")) : jsxRuntime.jsx(Field, {
20452
20890
  name: prop,
20453
20891
  type: "textarea"
@@ -20756,7 +21194,22 @@ function _objectSpread$5(target) { for (var i = 1; i < arguments.length; i++) {
20756
21194
  var getSettingsSelector = function getSettingsSelector(state) {
20757
21195
  return state.options.settings;
20758
21196
  };
21197
+ var isSaltOrSolventTemplate = function isSaltOrSolventTemplate(template) {
21198
+ return template.props.group === 'Salts and Solvents';
21199
+ };
21200
+ var isFunctionalGroupTemplate = function isFunctionalGroupTemplate(template) {
21201
+ return template.props.group === 'Functional Groups';
21202
+ };
21203
+ function getTemplateTitle(template, index) {
21204
+ if (isSaltOrSolventTemplate(template)) {
21205
+ return template.props.name;
21206
+ }
21207
+ return template.struct.name || "".concat(template.props.group, " template ").concat(index + 1);
21208
+ }
20759
21209
  function tmplName(tmpl, i) {
21210
+ if (isSaltOrSolventTemplate(tmpl)) {
21211
+ return tmpl.props.abbreviation;
21212
+ }
20760
21213
  return tmpl.struct.name || "".concat(tmpl.props.group, " template ").concat(i + 1);
20761
21214
  }
20762
21215
  var RenderTmpl = function RenderTmpl(_ref) {
@@ -20764,7 +21217,7 @@ var RenderTmpl = function RenderTmpl(_ref) {
20764
21217
  options = _ref.options,
20765
21218
  props = _objectWithoutProperties__default["default"](_ref, _excluded$2);
20766
21219
  return jsxRuntime.jsx(StructRender, _objectSpread$5({
20767
- struct: tmpl.modifiedStruct || tmpl.struct,
21220
+ struct: tmpl.struct,
20768
21221
  options: _objectSpread$5(_objectSpread$5({}, options), {}, {
20769
21222
  autoScaleMargin: 15
20770
21223
  })
@@ -20776,7 +21229,6 @@ var TemplateTable = function TemplateTable(props) {
20776
21229
  onSelect = props.onSelect,
20777
21230
  onDelete = props.onDelete,
20778
21231
  onAttach = props.onAttach,
20779
- _onDoubleClick = props.onDoubleClick,
20780
21232
  _props$titleRows = props.titleRows,
20781
21233
  titleRows = _props$titleRows === void 0 ? 2 : _props$titleRows;
20782
21234
  var options = reactRedux.useSelector(function (state) {
@@ -20787,13 +21239,10 @@ var TemplateTable = function TemplateTable(props) {
20787
21239
  children: templates.map(function (tmpl, i) {
20788
21240
  return jsxRuntime.jsxs("div", {
20789
21241
  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)),
21242
+ title: greekify(getTemplateTitle(tmpl, i)),
20791
21243
  onClick: function onClick() {
20792
21244
  return onSelect(tmpl);
20793
21245
  },
20794
- onDoubleClick: function onDoubleClick() {
20795
- return _onDoubleClick(tmpl);
20796
- },
20797
21246
  children: [jsxRuntime.jsx(RenderTmpl, {
20798
21247
  tmpl: tmpl,
20799
21248
  options: options,
@@ -20809,7 +21258,7 @@ var TemplateTable = function TemplateTable(props) {
20809
21258
  children: jsxRuntime.jsx(Icon, {
20810
21259
  name: "delete"
20811
21260
  })
20812
- }), tmpl.props.group !== 'Functional Groups' && jsxRuntime.jsx("button", {
21261
+ }), !isFunctionalGroupTemplate(tmpl) && !isSaltOrSolventTemplate(tmpl) && jsxRuntime.jsx("button", {
20813
21262
  className: "".concat(classes$7.button, " ").concat(classes$7.editButton),
20814
21263
  onClick: function onClick() {
20815
21264
  return onAttach(tmpl);
@@ -20823,8 +21272,8 @@ var TemplateTable = function TemplateTable(props) {
20823
21272
  });
20824
21273
  };
20825
21274
 
20826
- var functionalGroupsSelector = function functionalGroupsSelector(state) {
20827
- return state.functionalGroups.lib;
21275
+ var saltsAndSolventsSelector = function saltsAndSolventsSelector(state) {
21276
+ return state.saltsAndSolvents.lib;
20828
21277
  };
20829
21278
 
20830
21279
  var classes$6 = {"emptySearch":"emptySearchResult-module_emptySearch__aUSew"};
@@ -20842,7 +21291,7 @@ var EmptySearchResult = function EmptySearchResult(_ref) {
20842
21291
  };
20843
21292
 
20844
21293
  var _excluded$1 = ["children", "value", "index"],
20845
- _excluded2 = ["filter", "onFilter", "onChangeGroup", "mode", "initialTab", "functionalGroups", "lib"];
21294
+ _excluded2 = ["filter", "onFilter", "onChangeGroup", "mode", "initialTab", "functionalGroups", "lib", "saltsAndSolvents"];
20846
21295
  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
21296
  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
21297
  function TabPanel(props) {
@@ -20870,6 +21319,7 @@ var TemplateTabs;
20870
21319
  (function (TemplateTabs) {
20871
21320
  TemplateTabs[TemplateTabs["TemplateLibrary"] = 0] = "TemplateLibrary";
20872
21321
  TemplateTabs[TemplateTabs["FunctionalGroupLibrary"] = 1] = "FunctionalGroupLibrary";
21322
+ TemplateTabs[TemplateTabs["SaltsAndSolvents"] = 2] = "SaltsAndSolvents";
20873
21323
  })(TemplateTabs || (TemplateTabs = {}));
20874
21324
  var filterLibSelector = reselect.createSelector(function (props) {
20875
21325
  return props.lib;
@@ -20877,6 +21327,7 @@ var filterLibSelector = reselect.createSelector(function (props) {
20877
21327
  return props.filter;
20878
21328
  }, filterLib);
20879
21329
  var FUNCTIONAL_GROUPS = 'Functional Groups';
21330
+ var SALTS_AND_SOLVENTS = 'Salts and Solvents';
20880
21331
  var HeaderContent = function HeaderContent() {
20881
21332
  return jsxRuntime.jsxs("div", {
20882
21333
  className: classes$8.dialogHeader,
@@ -20890,26 +21341,37 @@ var HeaderContent = function HeaderContent() {
20890
21341
  var FooterContent = function FooterContent(_ref) {
20891
21342
  var data = _ref.data,
20892
21343
  tab = _ref.tab;
20893
- return jsxRuntime.jsx("div", {
21344
+ var clickToAddToCanvas = jsxRuntime.jsx("span", {
21345
+ children: "Click to add to canvas"
21346
+ });
21347
+ if (tab === TemplateTabs.SaltsAndSolvents) {
21348
+ return clickToAddToCanvas;
21349
+ }
21350
+ return jsxRuntime.jsxs("div", {
20894
21351
  style: {
20895
- flexGrow: 1
21352
+ flexGrow: 1,
21353
+ display: 'flex',
21354
+ justifyContent: 'space-between',
21355
+ alignItems: 'center'
20896
21356
  },
20897
- children: jsxRuntime.jsx(SaveButton$1, {
21357
+ children: [jsxRuntime.jsx(SaveButton$1, {
20898
21358
  data: data,
20899
21359
  className: classes$8.saveButton,
20900
21360
  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")
21361
+ children: "Save to SDF"
21362
+ }, "save-to-SDF"), clickToAddToCanvas]
20903
21363
  });
20904
21364
  };
20905
21365
  var TemplateDialog = function TemplateDialog(props) {
21366
+ var _serializerMapper;
20906
21367
  var filter = props.filter,
20907
21368
  onFilter = props.onFilter,
20908
- onChangeGroup = props.onChangeGroup,
20909
- mode = props.mode,
20910
- initialTab = props.initialTab,
21369
+ onChangeGroup = props.onChangeGroup;
21370
+ props.mode;
21371
+ var initialTab = props.initialTab,
20911
21372
  functionalGroups = props.functionalGroups,
20912
21373
  templateLib = props.lib,
21374
+ saltsAndSolvents = props.saltsAndSolvents,
20913
21375
  rest = _objectWithoutProperties__default["default"](props, _excluded2);
20914
21376
  var _useState = React.useState(initialTab !== null && initialTab !== void 0 ? initialTab : TemplateTabs.TemplateLibrary),
20915
21377
  _useState2 = _slicedToArray__default["default"](_useState, 2),
@@ -20923,10 +21385,17 @@ var TemplateDialog = function TemplateDialog(props) {
20923
21385
  _useState6 = _slicedToArray__default["default"](_useState5, 2),
20924
21386
  filteredFG = _useState6[0],
20925
21387
  setFilteredFG = _useState6[1];
21388
+ var _useState7 = React.useState(saltsAndSolvents[SALTS_AND_SOLVENTS]),
21389
+ _useState8 = _slicedToArray__default["default"](_useState7, 2),
21390
+ filteredSaltsAndSolvents = _useState8[0],
21391
+ setFilteredSaltsAndSolvents = _useState8[1];
20926
21392
  var filteredTemplateLib = filterLibSelector(props);
20927
21393
  React.useEffect(function () {
20928
21394
  setFilteredFG(filterFGLib(functionalGroups, filter)[FUNCTIONAL_GROUPS]);
20929
21395
  }, [functionalGroups, filter]);
21396
+ React.useEffect(function () {
21397
+ setFilteredSaltsAndSolvents(filterFGLib(saltsAndSolvents, filter)[SALTS_AND_SOLVENTS]);
21398
+ }, [saltsAndSolvents, filter]);
20930
21399
  var handleTabChange = function handleTabChange(_, tab) {
20931
21400
  setTab(tab);
20932
21401
  props.onSelect(null);
@@ -20938,21 +21407,12 @@ var TemplateDialog = function TemplateDialog(props) {
20938
21407
  }));
20939
21408
  };
20940
21409
  };
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
21410
  var sdfSerializer = new ketcherCore.SdfSerializer();
20951
- var data = tab === TemplateTabs.TemplateLibrary ? sdfSerializer.serialize(templateLib) : sdfSerializer.serialize(functionalGroups);
21411
+ 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);
21412
+ var data = sdfSerializer.serialize(serializerMapper[tab]);
20952
21413
  var select = function select(tmpl) {
20953
- var activateImmediately = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
20954
21414
  onChangeGroup(tmpl.props.group);
20955
- if (activateImmediately) props.onOk(_result());else props.onSelect(tmpl);
21415
+ props.onSelect(tmpl);
20956
21416
  };
20957
21417
  return jsxRuntime.jsxs(Dialog, {
20958
21418
  headerContent: jsxRuntime.jsx(HeaderContent, {}),
@@ -20962,13 +21422,7 @@ var TemplateDialog = function TemplateDialog(props) {
20962
21422
  }),
20963
21423
  className: "".concat(classes$8.dialog_body),
20964
21424
  params: fp.omit(['group'], rest),
20965
- result: function result() {
20966
- return _result();
20967
- },
20968
- buttons: ['OK'],
20969
- buttonsNameMap: {
20970
- OK: 'Add to canvas'
20971
- },
21425
+ buttons: [],
20972
21426
  needMargin: false,
20973
21427
  children: [jsxRuntime.jsxs("div", {
20974
21428
  className: classes$8.inputContainer,
@@ -20979,7 +21433,8 @@ var TemplateDialog = function TemplateDialog(props) {
20979
21433
  onChange: function onChange(value) {
20980
21434
  return onFilter(value);
20981
21435
  },
20982
- placeholder: "Search by elements..."
21436
+ placeholder: "Search by elements...",
21437
+ isFocused: true
20983
21438
  }), jsxRuntime.jsx(Icon, {
20984
21439
  name: "search",
20985
21440
  className: classes$8.searchIcon
@@ -20992,7 +21447,9 @@ var TemplateDialog = function TemplateDialog(props) {
20992
21447
  label: "Template Library"
20993
21448
  }, a11yProps(TemplateTabs.TemplateLibrary))), jsxRuntime.jsx(Tab__default["default"], _objectSpread$4({
20994
21449
  label: "Functional Groups"
20995
- }, a11yProps(TemplateTabs.FunctionalGroupLibrary)))]
21450
+ }, a11yProps(TemplateTabs.FunctionalGroupLibrary))), jsxRuntime.jsx(Tab__default["default"], _objectSpread$4({
21451
+ label: "Salts and Solvents"
21452
+ }, a11yProps(TemplateTabs.SaltsAndSolvents)))]
20996
21453
  }), jsxRuntime.jsxs("div", {
20997
21454
  className: classes$8.tabsContent,
20998
21455
  children: [jsxRuntime.jsx(TabPanel, {
@@ -21021,9 +21478,6 @@ var TemplateDialog = function TemplateDialog(props) {
21021
21478
  onSelect: function onSelect(templ) {
21022
21479
  return select(templ);
21023
21480
  },
21024
- onDoubleClick: function onDoubleClick(templ) {
21025
- return select(templ, true);
21026
- },
21027
21481
  selected: props.selected,
21028
21482
  onDelete: props.onDelete,
21029
21483
  onAttach: props.onAttach
@@ -21044,9 +21498,6 @@ var TemplateDialog = function TemplateDialog(props) {
21044
21498
  className: classes$8.resultsContainer,
21045
21499
  children: jsxRuntime.jsx(TemplateTable, {
21046
21500
  titleRows: 1,
21047
- onDoubleClick: function onDoubleClick(templ) {
21048
- return select(templ, true);
21049
- },
21050
21501
  templates: filteredFG,
21051
21502
  onSelect: function onSelect(templ) {
21052
21503
  return select(templ);
@@ -21059,21 +21510,45 @@ var TemplateDialog = function TemplateDialog(props) {
21059
21510
  textInfo: "No items found"
21060
21511
  })
21061
21512
  })
21513
+ }), jsxRuntime.jsx(TabPanel, {
21514
+ value: tab,
21515
+ index: TemplateTabs.SaltsAndSolvents,
21516
+ children: filteredSaltsAndSolvents !== null && filteredSaltsAndSolvents !== void 0 && filteredSaltsAndSolvents.length ? jsxRuntime.jsx("div", {
21517
+ className: classes$8.resultsContainer,
21518
+ children: jsxRuntime.jsx(TemplateTable, {
21519
+ titleRows: 1,
21520
+ templates: filteredSaltsAndSolvents,
21521
+ onSelect: function onSelect(templ) {
21522
+ return select(templ);
21523
+ },
21524
+ selected: props.selected
21525
+ })
21526
+ }) : jsxRuntime.jsx("div", {
21527
+ className: classes$8.resultsContainer,
21528
+ children: jsxRuntime.jsx(EmptySearchResult, {
21529
+ textInfo: "No items found"
21530
+ })
21531
+ })
21062
21532
  })]
21063
21533
  })]
21064
21534
  });
21065
21535
  };
21536
+ var selectTemplate = function selectTemplate(template, props, dispatch) {
21537
+ dispatch(selectTmpl(null));
21538
+ if (!template) return;
21539
+ dispatch(selectTmpl(template));
21540
+ dispatch(onAction({
21541
+ tool: 'template',
21542
+ opts: template
21543
+ }));
21544
+ props.onOk(template);
21545
+ };
21066
21546
  var TemplatesDialog = reactRedux.connect(function (store) {
21067
21547
  var _store$modal, _store$modal$prop;
21068
21548
  return _objectSpread$4(_objectSpread$4({}, fp.omit(['attach'], store.templates)), {}, {
21069
21549
  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
- })
21550
+ functionalGroups: functionalGroupsSelector(store),
21551
+ saltsAndSolvents: saltsAndSolventsSelector(store)
21077
21552
  });
21078
21553
  }, function (dispatch, props) {
21079
21554
  return {
@@ -21081,7 +21556,7 @@ var TemplatesDialog = reactRedux.connect(function (store) {
21081
21556
  return dispatch(changeFilter(filter));
21082
21557
  },
21083
21558
  onSelect: function onSelect(tmpl) {
21084
- return dispatch(selectTmpl(tmpl));
21559
+ return selectTemplate(tmpl, props, dispatch);
21085
21560
  },
21086
21561
  onChangeGroup: function onChangeGroup(group) {
21087
21562
  return dispatch(changeGroup(group));
@@ -21091,13 +21566,6 @@ var TemplatesDialog = reactRedux.connect(function (store) {
21091
21566
  },
21092
21567
  onDelete: function onDelete(tmpl) {
21093
21568
  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
21569
  }
21102
21570
  };
21103
21571
  })(TemplateDialog);
@@ -21461,10 +21929,10 @@ function Modal(props) {
21461
21929
  var Component = modals[modal.name];
21462
21930
  if (!Component) throw new Error("There is no modal window named ".concat(modal.name));
21463
21931
  return jsxRuntime.jsx("div", {
21464
- className: clsx__default["default"](classes$E.modalOverlay, selectClasses.selectContainer),
21932
+ className: clsx__default["default"](classes$F.modalOverlay, selectClasses.selectContainer),
21465
21933
  ref: containerRef,
21466
21934
  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))
21935
+ className: clsx__default["default"](_defineProperty__default["default"]({}, classes$F.smallScreen, height && height <= mediaSizes$1.smallHeight || width && width <= mediaSizes$1.smallWidth))
21468
21936
  }, rest))
21469
21937
  });
21470
21938
  }
@@ -21673,6 +22141,24 @@ function initEditor(dispatch, getState) {
21673
22141
  },
21674
22142
  onConfirm: function onConfirm() {
21675
22143
  return openDialog(dispatch, 'confirm');
22144
+ },
22145
+ onShowInfo: function onShowInfo(payload) {
22146
+ if (payload) {
22147
+ var groupStruct = payload.groupStruct,
22148
+ event = payload.event,
22149
+ sGroup = payload.sGroup;
22150
+ highlightFG(dispatch, {
22151
+ groupStruct: groupStruct,
22152
+ event: event,
22153
+ sGroup: sGroup
22154
+ });
22155
+ } else {
22156
+ highlightFG(dispatch, {
22157
+ groupStruct: null,
22158
+ event: null,
22159
+ sGroup: null
22160
+ });
22161
+ }
21676
22162
  }
21677
22163
  };
21678
22164
  }
@@ -21706,6 +22192,8 @@ var App = function App(props) {
21706
22192
  React.useEffect(function () {
21707
22193
  checkServer();
21708
22194
  dispatch(initFGTemplates(staticResourcesUrl));
22195
+ dispatch(initSaltsAndSolventsTemplates(staticResourcesUrl));
22196
+ window.scrollTo(0, 0);
21709
22197
  }, []);
21710
22198
  return jsxRuntime.jsx(material.ThemeProvider, {
21711
22199
  theme: muiTheme,
@@ -21814,8 +22302,8 @@ var KetcherBuilder = function () {
21814
22302
  initApp(element, staticResourcesUrl, {
21815
22303
  buttons: buttons || {},
21816
22304
  errorHandler: errorHandler || null,
21817
- version: "2.6.4" ,
21818
- buildDate: "2022-12-01T13:14:40" ,
22305
+ version: "2.7.0-rc.2" ,
22306
+ buildDate: "2022-12-16T15:41:03" ,
21819
22307
  buildNumber: ''
21820
22308
  }, structService, resolve);
21821
22309
  });