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
@@ -24,7 +24,7 @@ import _asyncToGenerator from '@babel/runtime/helpers/asyncToGenerator';
24
24
  import _regeneratorRuntime from '@babel/runtime/regenerator';
25
25
  import _classCallCheck from '@babel/runtime/helpers/classCallCheck';
26
26
  import _createClass from '@babel/runtime/helpers/createClass';
27
- import { KetSerializer, MolSerializer, Ketcher, FormatterFactory, StereLabelStyleType, StereoColoringType, Bond as Bond$2, Elements, AtomList, StereoLabel, findStereoAtoms, RxnArrowMode, SimpleObjectMode, SGroup, Pile, getStereoAtomsMap, identifyStructFormat, ChemicalMimeType, SdfSerializer, FunctionalGroupsProvider, KetcherAsyncEvents, ElementColor, formatProperties, Vec2, FunctionalGroup, Fragment as Fragment$1, OperationType, fromAtomsAttrs, fracAngle, Action, fromSgroupDeletion, fromFragmentDeletion, fromAtomAddition, fromBondAddition, Atom as Atom$2, bondChangingAction, fromBondsAttrs, fromChain, getItemsToFuse, getHoverToFuse, fromItemsFuse, fromStereoFlagUpdate, Scale, checkOverlapping, fromSeveralSgroupAddition, SgContexts, fromSgroupAction, fromSimpleObjectResizing, fromArrowResizing, fromMultipleMove, fromTextDeletion, fromTextUpdating, fromOneAtomDeletion, fromOneBondDeletion, fromArrowDeletion, fromPlusDeletion, fromSimpleObjectDeletion, fromPaste, RGroup as RGroup$2, fromRGroupFragment, fromUpdateIfThen, fromRGroupAttrs, fromArrowAddition, fromPlusAddition, fromRotate, fromFlip, fromBondAlign, fromSimpleObjectAddition, fromTemplateOnBondAction, fromTemplateOnCanvas, fromTemplateOnAtom, fromTextCreation, fromHighlightCreate, fromHighlightClear, fromNewCanvas, Struct, Render, fromDescriptorsAlign, setExpandSGroup, getPropertiesByFormat, StereoFlag, getPropertiesByImgFormat, Generics, TextCommand } from 'ketcher-core';
27
+ import { KetSerializer, MolSerializer, Ketcher, FormatterFactory, StereLabelStyleType, StereoColoringType, Bond as Bond$2, Elements, AtomList, StereoLabel, findStereoAtoms, RxnArrowMode, SimpleObjectMode, SGroup, Pile, getStereoAtomsMap, identifyStructFormat, SupportedFormat, ChemicalMimeType, SdfSerializer, FunctionalGroupsProvider, SaltsAndSolventsProvider, KetcherAsyncEvents, ElementColor, formatProperties, fromAtomsAttrs, Vec2, FunctionalGroup, Fragment as Fragment$1, OperationType, fracAngle, Action, fromSgroupDeletion, fromFragmentDeletion, fromAtomAddition, fromBondAddition, Atom as Atom$2, bondChangingAction, fromBondsAttrs, fromChain, getItemsToFuse, getHoverToFuse, fromItemsFuse, fromStereoFlagUpdate, Scale, checkOverlapping, fromSeveralSgroupAddition, SgContexts, fromSgroupAction, fromSimpleObjectResizing, fromArrowResizing, fromMultipleMove, fromTextDeletion, fromTextUpdating, fromOneAtomDeletion, fromOneBondDeletion, fromArrowDeletion, fromPlusDeletion, fromSimpleObjectDeletion, fromPaste, RGroup as RGroup$2, fromRGroupFragment, fromUpdateIfThen, fromRGroupAttrs, fromArrowAddition, fromPlusAddition, fromRotate, fromFlip, fromBondAlign, fromSimpleObjectAddition, fromTemplateOnBondAction, fromTemplateOnCanvas, fromTemplateOnAtom, fromTextCreation, fromHighlightCreate, fromHighlightClear, fromNewCanvas, Struct, Render, fromDescriptorsAlign, setExpandSGroup, getPropertiesByFormat, StereoFlag, getPropertiesByImgFormat, Generics, TextCommand } from 'ketcher-core';
28
28
  import * as React from 'react';
29
29
  import React__default, { createRef, Component, useState, useEffect, useRef, useMemo, createElement, forwardRef, useCallback, useLayoutEffect, Fragment as Fragment$2 } from 'react';
30
30
  import _objectWithoutProperties from '@babel/runtime/helpers/objectWithoutProperties';
@@ -40,7 +40,7 @@ import ReactDOM from 'react-dom';
40
40
  import { connect, useDispatch, useSelector, Provider } from 'react-redux';
41
41
  import { combineReducers, createStore as createStore$1, applyMiddleware } from 'redux';
42
42
  import _toConsumableArray from '@babel/runtime/helpers/toConsumableArray';
43
- import 'redux-logger';
43
+ import { logger } from 'redux-logger';
44
44
  import thunk from 'redux-thunk';
45
45
  import { throttle as throttle$1, inRange, isEqual as isEqual$1, range as range$1 } from 'lodash';
46
46
  import useResizeObserver from 'use-resize-observer/polyfilled';
@@ -49,6 +49,7 @@ import styled from '@emotion/styled';
49
49
  import _taggedTemplateLiteral from '@babel/runtime/helpers/taggedTemplateLiteral';
50
50
  import { IconButton as IconButton$1, Collapse, ClickAwayListener, Button as Button$1, Popover, createTheme, ThemeProvider } from '@mui/material';
51
51
  import * as KN from 'w3c-keyname';
52
+ import { isIE } from 'react-device-detect';
52
53
  import { ContextMenu, MenuItem, ContextMenuTrigger, hideMenu } from 'react-contextmenu';
53
54
  import _classPrivateFieldSet from '@babel/runtime/helpers/classPrivateFieldSet';
54
55
  import _classPrivateFieldGet from '@babel/runtime/helpers/classPrivateFieldGet';
@@ -112,9 +113,18 @@ var atomCuts = {
112
113
  P: 'p',
113
114
  F: 'f',
114
115
  Cl: 'Shift+c',
115
- Br: 'Shift+b',
116
+ Br: 'b',
116
117
  I: 'i',
117
- A: 'a'
118
+ A: 'a',
119
+ Q: 'q',
120
+ R: 'r',
121
+ K: 'k',
122
+ M: 'm',
123
+ Si: 'Shift+s',
124
+ Na: 'Shift+n',
125
+ X: 'x',
126
+ D: 'd',
127
+ B: 'Shift+b'
118
128
  };
119
129
  var atoms = Object.keys(atomCuts).reduce(function (res, label) {
120
130
  res["atom-".concat(label.toLowerCase())] = {
@@ -252,7 +262,7 @@ var debugObj = {
252
262
  }
253
263
  };
254
264
 
255
- var classes$N = {"cliparea":"cliparea-module_cliparea__GdPrN"};
265
+ var classes$O = {"cliparea":"cliparea-module_cliparea__GdPrN"};
256
266
 
257
267
  function _createSuper$c(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$c(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
258
268
  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; } }
@@ -326,7 +336,7 @@ var ClipArea = function (_Component) {
326
336
  value: function render() {
327
337
  return jsx("textarea", {
328
338
  ref: this.textAreaRef,
329
- className: clsx('cliparea', classes$N.cliparea),
339
+ className: clsx('cliparea', classes$O.cliparea),
330
340
  contentEditable: true,
331
341
  autoFocus: true
332
342
  ,
@@ -356,6 +366,7 @@ function _copy(cb, data) {
356
366
  cb.setData(fmt, data[fmt]);
357
367
  });
358
368
  } catch (ex) {
369
+ console.info("Could not write exact type ".concat(curFmt));
359
370
  }
360
371
  }
361
372
  }
@@ -386,8 +397,8 @@ function exec(action) {
386
397
  return enabled;
387
398
  }
388
399
 
389
- 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; }
390
- 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(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; }
400
+ 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; }
401
+ 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(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; }
391
402
  var editor = {
392
403
  resetToSelect: {
393
404
  title: 'Reset to Select Tool',
@@ -635,7 +646,7 @@ var optionsSchema = {
635
646
  title: 'Settings',
636
647
  type: 'object',
637
648
  required: [],
638
- properties: _objectSpread$12(_objectSpread$12(_objectSpread$12(_objectSpread$12(_objectSpread$12({}, editor), render), server), debug), miew)
649
+ properties: _objectSpread$15(_objectSpread$15(_objectSpread$15(_objectSpread$15(_objectSpread$15({}, editor), render), server), debug), miew)
639
650
  };
640
651
  function getDefaultOptions() {
641
652
  if (!optionsSchema.properties) return {};
@@ -681,6 +692,7 @@ var storage = {
681
692
  try {
682
693
  item = JSON.parse(localStorage.getItem(key));
683
694
  } catch (ex) {
695
+ console.info('LocalStorage:', ex.name);
684
696
  }
685
697
  return item;
686
698
  },
@@ -690,19 +702,21 @@ var storage = {
690
702
  localStorage.setItem(key, JSON.stringify(data));
691
703
  isSet = true;
692
704
  } catch (ex) {
705
+ console.info('LocalStorage:', ex.name);
693
706
  isSet = false;
694
707
  }
695
708
  return isSet;
696
709
  }
697
710
  };
698
711
 
699
- 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; }
700
- 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(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; }
712
+ 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; }
713
+ 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(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; }
701
714
  var initOptionsState = {
702
715
  app: {
703
716
  server: false,
704
717
  templates: false,
705
- functionalGroups: false
718
+ functionalGroups: false,
719
+ saltsAndSolvents: false
706
720
  },
707
721
  analyse: {
708
722
  values: null,
@@ -793,27 +807,27 @@ function optionsReducer() {
793
807
  var action = arguments.length > 1 ? arguments[1] : undefined;
794
808
  var type = action.type,
795
809
  data = action.data;
796
- if (type === 'APP_OPTIONS') return _objectSpread$11(_objectSpread$11({}, state), {}, {
797
- app: _objectSpread$11(_objectSpread$11({}, state.app), data)
810
+ if (type === 'APP_OPTIONS') return _objectSpread$14(_objectSpread$14({}, state), {}, {
811
+ app: _objectSpread$14(_objectSpread$14({}, state.app), data)
798
812
  });
799
- if (type === 'SAVE_SETTINGS') return _objectSpread$11(_objectSpread$11({}, state), {}, {
813
+ if (type === 'SAVE_SETTINGS') return _objectSpread$14(_objectSpread$14({}, state), {}, {
800
814
  settings: data
801
815
  });
802
- if (type === 'SAVE_CHECK_OPTS') return _objectSpread$11(_objectSpread$11({}, state), {}, {
816
+ if (type === 'SAVE_CHECK_OPTS') return _objectSpread$14(_objectSpread$14({}, state), {}, {
803
817
  check: data
804
818
  });
805
- if (type === 'CHANGE_ANALYSE') return _objectSpread$11(_objectSpread$11({}, state), {}, {
806
- analyse: _objectSpread$11(_objectSpread$11(_objectSpread$11({}, state.analyse), data), {}, {
819
+ if (type === 'CHANGE_ANALYSE') return _objectSpread$14(_objectSpread$14({}, state), {}, {
820
+ analyse: _objectSpread$14(_objectSpread$14(_objectSpread$14({}, state.analyse), data), {}, {
807
821
  loading: false
808
822
  })
809
823
  });
810
- if (type === 'ANALYSE_LOADING') return _objectSpread$11(_objectSpread$11({}, state), {}, {
811
- analyse: _objectSpread$11(_objectSpread$11({}, state.analyse), {}, {
824
+ if (type === 'ANALYSE_LOADING') return _objectSpread$14(_objectSpread$14({}, state), {}, {
825
+ analyse: _objectSpread$14(_objectSpread$14({}, state.analyse), {}, {
812
826
  loading: true
813
827
  })
814
828
  });
815
- if (recognizeActions.includes(type)) return _objectSpread$11(_objectSpread$11({}, state), {}, {
816
- recognize: _objectSpread$11(_objectSpread$11({}, state.recognize), data)
829
+ if (recognizeActions.includes(type)) return _objectSpread$14(_objectSpread$14({}, state), {}, {
830
+ recognize: _objectSpread$14(_objectSpread$14({}, state.recognize), data)
817
831
  });
818
832
  return state;
819
833
  }
@@ -823,6 +837,7 @@ function constant(schema, prop) {
823
837
  return desc.constant || desc["enum"][0];
824
838
  }
825
839
  function mapOf(schema, prop) {
840
+ console.assert(schema.oneOf);
826
841
  return schema.oneOf.reduce(function (res, desc) {
827
842
  res[constant(desc, prop)] = desc;
828
843
  return res;
@@ -1069,7 +1084,7 @@ var sdataCustomSchema = {
1069
1084
  },
1070
1085
  context: {
1071
1086
  title: 'Context',
1072
- "enum": ['Fragment', 'Multifragment', 'Bond', 'Atom', 'Group'],
1087
+ "enum": ['Atom', 'Bond', 'Fragment', 'Group', 'Multifragment'],
1073
1088
  "default": 'Fragment'
1074
1089
  },
1075
1090
  fieldName: {
@@ -1103,18 +1118,26 @@ var sdataSchema = Object.keys(sData).reduce(function (acc, title) {
1103
1118
  function firstKeyOf(obj) {
1104
1119
  return Object.keys(obj)[0];
1105
1120
  }
1106
- function getSdataDefault(context, fieldName) {
1107
- if (!context && !fieldName) return firstKeyOf(sdataSchema);
1108
- if (!fieldName) return firstKeyOf(sdataSchema[context]);
1109
- return sdataSchema[context][fieldName] ? sdataSchema[context][fieldName].properties.fieldValue["default"] : '';
1110
- }
1111
-
1112
- 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; }
1113
- 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(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; }
1114
- var initSdata = function initSdata() {
1115
- var context = getSdataDefault();
1116
- var fieldName = getSdataDefault(context);
1117
- var fieldValue = getSdataDefault(context, fieldName);
1121
+ function getSdataDefault() {
1122
+ var schema = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : sdataSchema;
1123
+ var context = arguments.length > 1 ? arguments[1] : undefined;
1124
+ var fieldName = arguments.length > 2 ? arguments[2] : undefined;
1125
+ if (schema.key === 'Custom') {
1126
+ var _schema$properties$co;
1127
+ return (_schema$properties$co = schema.properties[context]) === null || _schema$properties$co === void 0 ? void 0 : _schema$properties$co["default"];
1128
+ }
1129
+ if (!context && !fieldName) return firstKeyOf(schema);
1130
+ if (!fieldName) return firstKeyOf(schema[context]);
1131
+ return schema[context][fieldName] ? schema[context][fieldName].properties.fieldValue["default"] : '';
1132
+ }
1133
+
1134
+ 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; }
1135
+ 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(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; }
1136
+ var initSdata = function initSdata(schema) {
1137
+ var isCustomShema = schema.key === 'Custom';
1138
+ var context = isCustomShema ? getSdataDefault(sdataCustomSchema, 'context') : getSdataDefault(sdataSchema);
1139
+ var fieldName = isCustomShema ? getSdataDefault(sdataCustomSchema, 'fieldName') : getSdataDefault(sdataSchema, context);
1140
+ var fieldValue = isCustomShema ? getSdataDefault(sdataCustomSchema, 'fieldValue') : getSdataDefault(sdataSchema, context, fieldName);
1118
1141
  var radiobuttons = 'Absolute';
1119
1142
  return {
1120
1143
  errors: {},
@@ -1130,7 +1153,7 @@ var initSdata = function initSdata() {
1130
1153
  };
1131
1154
  function sdataReducer(state, action) {
1132
1155
  if (action.data.result.init) {
1133
- return correctErrors(_objectSpread$10(_objectSpread$10({}, state), {}, {
1156
+ return correctErrors(_objectSpread$13(_objectSpread$13({}, state), {}, {
1134
1157
  result: Object.assign({}, state.result, action.data.result)
1135
1158
  }), action.data);
1136
1159
  }
@@ -1138,7 +1161,7 @@ function sdataReducer(state, action) {
1138
1161
  var actionFieldName = action.data.result.fieldName;
1139
1162
  var newstate = null;
1140
1163
  if (actionContext !== state.result.context) newstate = onContextChange(state, action.data.result);else if (actionFieldName !== state.result.fieldName) newstate = onFieldNameChange(state, action.data.result);
1141
- newstate = newstate || _objectSpread$10(_objectSpread$10({}, state), {}, {
1164
+ newstate = newstate || _objectSpread$13(_objectSpread$13({}, state), {}, {
1142
1165
  result: Object.assign({}, state.result, action.data.result)
1143
1166
  });
1144
1167
  return correctErrors(newstate, action.data);
@@ -1158,11 +1181,11 @@ var correctErrors = function correctErrors(state, payload) {
1158
1181
  var onContextChange = function onContextChange(state, payload) {
1159
1182
  var context = payload.context,
1160
1183
  fieldValue = payload.fieldValue;
1161
- var fieldName = getSdataDefault(context);
1184
+ var fieldName = getSdataDefault(sdataCustomSchema, 'fieldName');
1162
1185
  var fValue = fieldValue;
1163
- if (fValue === state.result.fieldValue) fValue = getSdataDefault(context, fieldName);
1186
+ if (fValue === state.result.fieldValue) fValue = getSdataDefault(sdataCustomSchema, 'fieldValue');
1164
1187
  return {
1165
- result: _objectSpread$10(_objectSpread$10({}, payload), {}, {
1188
+ result: _objectSpread$13(_objectSpread$13({}, payload), {}, {
1166
1189
  context: context,
1167
1190
  fieldName: fieldName,
1168
1191
  fieldValue: fValue
@@ -1173,10 +1196,10 @@ var onFieldNameChange = function onFieldNameChange(state, payload) {
1173
1196
  var fieldName = payload.fieldName;
1174
1197
  var context = state.result.context;
1175
1198
  var fieldValue = payload.fieldValue;
1176
- if (sdataSchema[context][fieldName]) fieldValue = getSdataDefault(context, fieldName);
1199
+ if (sdataSchema[context][fieldName]) fieldValue = getSdataDefault(sdataSchema, context, fieldName);
1177
1200
  if (fieldValue === state.result.fieldValue && sdataSchema[context][state.result.fieldName]) fieldValue = '';
1178
1201
  return {
1179
- result: _objectSpread$10(_objectSpread$10({}, payload), {}, {
1202
+ result: _objectSpread$13(_objectSpread$13({}, payload), {}, {
1180
1203
  fieldName: fieldName,
1181
1204
  fieldValue: fieldValue
1182
1205
  })
@@ -1280,7 +1303,7 @@ var formsState = {
1280
1303
  valid: true,
1281
1304
  result: {}
1282
1305
  },
1283
- sdata: initSdata()
1306
+ sdata: initSdata(sdataCustomSchema)
1284
1307
  };
1285
1308
  function updateFormState(data) {
1286
1309
  return {
@@ -1314,8 +1337,8 @@ function formReducer(state, action, formName) {
1314
1337
  var INDIGO_VERIFICATION = 'INDIGO_VERIFICATION';
1315
1338
  var ANALYZING_FILE = 'ANALYZING_FILE';
1316
1339
 
1317
- 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; }
1318
- 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(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; }
1340
+ 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; }
1341
+ 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(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; }
1319
1342
  function indigoVerification(data) {
1320
1343
  return {
1321
1344
  type: INDIGO_VERIFICATION,
@@ -1328,25 +1351,25 @@ function setAnalyzingFile(data) {
1328
1351
  data: data
1329
1352
  };
1330
1353
  }
1331
- var initialState$1 = {
1354
+ var initialState$2 = {
1332
1355
  indigoVerification: false,
1333
1356
  isAnalyzingFile: false
1334
1357
  };
1335
1358
  function requestReducer () {
1336
- var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState$1;
1359
+ var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState$2;
1337
1360
  var action = arguments.length > 1 ? arguments[1] : undefined;
1338
1361
  var type = action.type,
1339
1362
  data = action.data;
1340
1363
  switch (type) {
1341
1364
  case INDIGO_VERIFICATION:
1342
1365
  {
1343
- return _objectSpread$$(_objectSpread$$({}, state), {}, {
1366
+ return _objectSpread$12(_objectSpread$12({}, state), {}, {
1344
1367
  indigoVerification: data
1345
1368
  });
1346
1369
  }
1347
1370
  case ANALYZING_FILE:
1348
1371
  {
1349
- return _objectSpread$$(_objectSpread$$({}, state), {}, {
1372
+ return _objectSpread$12(_objectSpread$12({}, state), {}, {
1350
1373
  isAnalyzingFile: data
1351
1374
  });
1352
1375
  }
@@ -1619,12 +1642,12 @@ var attachSchema = {
1619
1642
  };
1620
1643
 
1621
1644
  var _excluded$E = ["type", "radiobuttons"];
1622
- 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; }
1623
- 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(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; }
1645
+ 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; }
1646
+ 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(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; }
1624
1647
  var DefaultStereoGroupNumber = 1;
1625
1648
  function fromElement(selem) {
1626
1649
  if (selem.label === 'R#') {
1627
- return _objectSpread$_({
1650
+ return _objectSpread$11({
1628
1651
  type: 'rlabel',
1629
1652
  values: fromRlabel(selem.rglabel)
1630
1653
  }, selem);
@@ -1784,7 +1807,7 @@ function fromBond(sbond) {
1784
1807
  };
1785
1808
  }
1786
1809
  function toBond(bond) {
1787
- return _objectSpread$_({
1810
+ return _objectSpread$11({
1788
1811
  topology: bond.topology,
1789
1812
  reactingCenterStatus: bond.center
1790
1813
  }, toBondType(bond.type));
@@ -1874,7 +1897,7 @@ function toSgroup(sgroup) {
1874
1897
  var type = sgroup.type,
1875
1898
  radiobuttons = sgroup.radiobuttons,
1876
1899
  props = _objectWithoutProperties(sgroup, _excluded$E);
1877
- var attrs = _objectSpread$_({}, props);
1900
+ var attrs = _objectSpread$11({}, props);
1878
1901
  var absolute = 'absolute';
1879
1902
  var attached = 'attached';
1880
1903
  switch (radiobuttons) {
@@ -2375,8 +2398,8 @@ var tools$1 = typeSchema$1["enum"].reduce(function (res, type, i) {
2375
2398
  }, toolActions);
2376
2399
 
2377
2400
  var _excluded$D = ["rescale", "fragment"];
2378
- 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; }
2379
- 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(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; }
2401
+ 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; }
2402
+ 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(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; }
2380
2403
  function onAction(action) {
2381
2404
  if (action && action.dialog) {
2382
2405
  return {
@@ -2403,6 +2426,9 @@ function parseStruct(struct, server, options) {
2403
2426
  _options.fragment;
2404
2427
  var formatterOptions = _objectWithoutProperties(_options, _excluded$D);
2405
2428
  var format = identifyStructFormat(struct);
2429
+ if (format === SupportedFormat.cdx) {
2430
+ struct = "base64::".concat(struct.replace(/\s/g, ''));
2431
+ }
2406
2432
  var factory = new FormatterFactory(server);
2407
2433
  var service = factory.create(format, formatterOptions);
2408
2434
  return service.getStructureFromStringAsync(struct);
@@ -2423,7 +2449,7 @@ function load(struct, options) {
2423
2449
  server = state.server;
2424
2450
  errorHandler = editor.errorHandler;
2425
2451
  options = options || {};
2426
- options = _objectSpread$Z(_objectSpread$Z({}, options), {}, {
2452
+ options = _objectSpread$10(_objectSpread$10({}, options), {}, {
2427
2453
  'dearomatize-on-load': editor.options()['dearomatize-on-load']
2428
2454
  });
2429
2455
  dispatch(setAnalyzingFile(true));
@@ -2851,7 +2877,7 @@ var zoom = {
2851
2877
 
2852
2878
  var openHelpLink = function openHelpLink() {
2853
2879
  var _window$open;
2854
- 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();
2880
+ 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();
2855
2881
  };
2856
2882
  var help = {
2857
2883
  help: {
@@ -2912,9 +2938,9 @@ var fullscreen = {
2912
2938
  }
2913
2939
  };
2914
2940
 
2915
- 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; }
2916
- 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(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; }
2917
- var config = _objectSpread$Y(_objectSpread$Y(_objectSpread$Y(_objectSpread$Y(_objectSpread$Y(_objectSpread$Y(_objectSpread$Y(_objectSpread$Y(_objectSpread$Y({
2941
+ 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; }
2942
+ 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(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; }
2943
+ var config = _objectSpread$$(_objectSpread$$(_objectSpread$$(_objectSpread$$(_objectSpread$$(_objectSpread$$(_objectSpread$$(_objectSpread$$(_objectSpread$$({
2918
2944
  clear: {
2919
2945
  shortcut: 'Mod+Delete',
2920
2946
  title: 'Clear Canvas',
@@ -5257,7 +5283,7 @@ function SvgTransformFlipH(props) {
5257
5283
  fill: "none",
5258
5284
  xmlns: "http://www.w3.org/2000/svg"
5259
5285
  }, props), _path$1c || (_path$1c = /*#__PURE__*/React.createElement("path", {
5260
- 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",
5286
+ 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",
5261
5287
  fill: "#231F20"
5262
5288
  })));
5263
5289
  }
@@ -5274,7 +5300,7 @@ function SvgTransformFlipV(props) {
5274
5300
  fill: "none",
5275
5301
  xmlns: "http://www.w3.org/2000/svg"
5276
5302
  }, props), _path$1b || (_path$1b = /*#__PURE__*/React.createElement("path", {
5277
- 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",
5303
+ 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",
5278
5304
  fill: "#231F20"
5279
5305
  })));
5280
5306
  }
@@ -6820,16 +6846,16 @@ function findIconByName(name) {
6820
6846
  }
6821
6847
 
6822
6848
  var _excluded$C = ["name"];
6823
- 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; }
6824
- 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(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; }
6849
+ 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; }
6850
+ 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(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; }
6825
6851
  function Icon(_ref) {
6826
6852
  var name = _ref.name,
6827
6853
  props = _objectWithoutProperties(_ref, _excluded$C);
6828
6854
  var Component = findIconByName(name);
6829
- return jsx(Component, _objectSpread$X({}, props));
6855
+ return jsx(Component, _objectSpread$_({}, props));
6830
6856
  }
6831
6857
 
6832
- 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"};
6858
+ 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"};
6833
6859
 
6834
6860
  var isMac = /Mac/.test(navigator.platform);
6835
6861
  var shortcutAliasMap = {
@@ -6873,7 +6899,7 @@ var ActionButton = function ActionButton(props) {
6873
6899
  disabled: disabled,
6874
6900
  onClick: handleClick,
6875
6901
  title: shortcut ? "".concat(action === null || action === void 0 ? void 0 : action.title, " (").concat(shortcut, ")") : action === null || action === void 0 ? void 0 : action.title,
6876
- className: clsx(classes$M.button, _defineProperty({}, classes$M.selected, selected), className),
6902
+ className: clsx(classes$N.button, _defineProperty({}, classes$N.selected, selected), className),
6877
6903
  children: [jsx(Icon, {
6878
6904
  name: name
6879
6905
  }), jsx("kbd", {
@@ -7029,7 +7055,7 @@ var DefaultMultiTool = function DefaultMultiTool(props) {
7029
7055
  });
7030
7056
  };
7031
7057
 
7032
- var classes$L = {"group":"GroupedMultiTool-module_group__BJQAU"};
7058
+ var classes$M = {"group":"GroupedMultiTool-module_group__BJQAU"};
7033
7059
 
7034
7060
  var GroupedMultiTool = function GroupedMultiTool(props) {
7035
7061
  var groups = props.groups,
@@ -7044,7 +7070,7 @@ var GroupedMultiTool = function GroupedMultiTool(props) {
7044
7070
  return jsx(Fragment, {
7045
7071
  children: groups.map(function (descriptor) {
7046
7072
  return jsx("div", {
7047
- className: classes$L.group,
7073
+ className: classes$M.group,
7048
7074
  children: options.slice(descriptor.start, descriptor.end).map(function (toolbarItem) {
7049
7075
  var currentStatus = status[toolbarItem.id];
7050
7076
  return jsx(ActionButton, {
@@ -7074,7 +7100,7 @@ function chooseMultiTool() {
7074
7100
  }
7075
7101
  }
7076
7102
 
7077
- 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"};
7103
+ 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"};
7078
7104
 
7079
7105
  function usePortalOpening(_ref) {
7080
7106
  var _ref2 = _slicedToArray(_ref, 3),
@@ -7122,8 +7148,8 @@ function usePortalStyle(_ref) {
7122
7148
  return [portalStyle];
7123
7149
  }
7124
7150
 
7125
- 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; }
7126
- 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(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; }
7151
+ 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; }
7152
+ 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(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; }
7127
7153
  var ToolbarMultiToolItem = function ToolbarMultiToolItem(props) {
7128
7154
  var id = props.id,
7129
7155
  options = props.options,
@@ -7184,20 +7210,20 @@ var ToolbarMultiToolItem = function ToolbarMultiToolItem(props) {
7184
7210
  portalClassName = _chooseMultiTool2[1];
7185
7211
  return displayMultiToolItem ? jsxs("div", {
7186
7212
  ref: ref,
7187
- className: classes$K.root,
7188
- children: [jsx(ActionButton, _objectSpread$W(_objectSpread$W({}, actionButtonProps), {}, {
7213
+ className: classes$L.root,
7214
+ children: [jsx(ActionButton, _objectSpread$Z(_objectSpread$Z({}, actionButtonProps), {}, {
7189
7215
  className: className,
7190
7216
  name: currentId,
7191
7217
  action: config[currentId],
7192
7218
  status: currentStatus,
7193
7219
  selected: selected
7194
7220
  })), !isOpen && jsx(Icon, {
7195
- className: "".concat(classes$K.icon, " ").concat((currentStatus === null || currentStatus === void 0 ? void 0 : currentStatus.selected) && classes$K.iconSelected),
7221
+ className: "".concat(classes$L.icon, " ").concat((currentStatus === null || currentStatus === void 0 ? void 0 : currentStatus.selected) && classes$L.iconSelected),
7196
7222
  name: "dropdown",
7197
7223
  onClick: onOpenOptions
7198
7224
  }), isOpen ? jsx(Portal, {
7199
7225
  isOpen: isOpen,
7200
- className: clsx(classes$K.portal, vertical && classes$K['portal-vertical'], portalClassName),
7226
+ className: clsx(classes$L.portal, vertical && classes$L['portal-vertical'], portalClassName),
7201
7227
  style: portalStyle,
7202
7228
  children: jsx(Component, {
7203
7229
  options: options,
@@ -7282,16 +7308,16 @@ var TemplatesList = function TemplatesList(props) {
7282
7308
  });
7283
7309
  };
7284
7310
 
7285
- 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"};
7311
+ 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"};
7286
7312
 
7287
7313
  var _excluded$B = ["className"];
7288
- 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; }
7289
- 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(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; }
7314
+ 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; }
7315
+ 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(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; }
7290
7316
  var Group$1 = function Group(_ref) {
7291
7317
  var children = _ref.children,
7292
7318
  className = _ref.className;
7293
7319
  return jsx("div", {
7294
- className: clsx(classes$J.group, className),
7320
+ className: clsx(classes$K.group, className),
7295
7321
  children: children
7296
7322
  });
7297
7323
  };
@@ -7303,7 +7329,7 @@ var BottomToolbar = function BottomToolbar(props) {
7303
7329
  indigoVerification = rest.indigoVerification,
7304
7330
  onAction = rest.onAction;
7305
7331
  return jsxs("div", {
7306
- className: clsx(classes$J.root, className),
7332
+ className: clsx(classes$K.root, className),
7307
7333
  children: [jsx(Group$1, {
7308
7334
  children: jsx(TemplatesList, {
7309
7335
  active: active,
@@ -7312,7 +7338,7 @@ var BottomToolbar = function BottomToolbar(props) {
7312
7338
  onAction: onAction
7313
7339
  })
7314
7340
  }), jsx(Group$1, {
7315
- children: jsx(ToolbarGroupItem, _objectSpread$V({
7341
+ children: jsx(ToolbarGroupItem, _objectSpread$Y({
7316
7342
  id: "template-lib"
7317
7343
  }, rest))
7318
7344
  })]
@@ -7407,15 +7433,15 @@ function prefetchRender(tmpls, baseUrl, cacheEl) {
7407
7433
  });
7408
7434
  }
7409
7435
 
7410
- 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; }
7411
- 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(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; }
7436
+ 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; }
7437
+ 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(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; }
7412
7438
  function openDialog(dispatch, dialogName, props) {
7413
7439
  return new Promise(function (resolve, reject) {
7414
7440
  dispatch({
7415
7441
  type: 'MODAL_OPEN',
7416
7442
  data: {
7417
7443
  name: dialogName,
7418
- prop: _objectSpread$U(_objectSpread$U({}, props), {}, {
7444
+ prop: _objectSpread$X(_objectSpread$X({}, props), {}, {
7419
7445
  onResult: resolve,
7420
7446
  onCancel: reject
7421
7447
  })
@@ -7433,7 +7459,7 @@ function modalReducer() {
7433
7459
  return null;
7434
7460
  }
7435
7461
  var formState = formReducer(state.form, action, state.name);
7436
- return _objectSpread$U(_objectSpread$U({}, state), {}, {
7462
+ return _objectSpread$X(_objectSpread$X({}, state), {}, {
7437
7463
  form: formState
7438
7464
  });
7439
7465
  }
@@ -7451,8 +7477,8 @@ function modalReducer() {
7451
7477
  }
7452
7478
  }
7453
7479
 
7454
- 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; }
7455
- 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(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; }
7480
+ 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; }
7481
+ 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(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; }
7456
7482
  function selectTmpl(tmpl) {
7457
7483
  return {
7458
7484
  type: 'TMPL_SELECT',
@@ -7474,7 +7500,7 @@ function changeFilter(filter) {
7474
7500
  return {
7475
7501
  type: 'TMPL_CHANGE_FILTER',
7476
7502
  data: {
7477
- filter: filter.trim(),
7503
+ filter: filter,
7478
7504
  selected: null
7479
7505
  }
7480
7506
  };
@@ -7552,7 +7578,7 @@ function saveUserTmpl(struct) {
7552
7578
  var name = _ref.name,
7553
7579
  attach = _ref.attach;
7554
7580
  tmpl.struct.name = name.trim();
7555
- tmpl.props = _objectSpread$T(_objectSpread$T({}, attach), {}, {
7581
+ tmpl.props = _objectSpread$W(_objectSpread$W({}, attach), {}, {
7556
7582
  group: 'User Templates'
7557
7583
  });
7558
7584
  var lib = getState().templates.lib.concat(tmpl);
@@ -7591,7 +7617,7 @@ function templatesReducer() {
7591
7617
  if (tmplActions.includes(action.type)) return Object.assign({}, state, action.data);
7592
7618
  if (attachActions.includes(action.type)) {
7593
7619
  var attach = Object.assign({}, state.attach, action.data);
7594
- return _objectSpread$T(_objectSpread$T({}, state), {}, {
7620
+ return _objectSpread$W(_objectSpread$W({}, state), {}, {
7595
7621
  attach: attach
7596
7622
  });
7597
7623
  }
@@ -7600,7 +7626,7 @@ function templatesReducer() {
7600
7626
  var lib = currentState.lib.filter(function (value) {
7601
7627
  return value !== action.data.tmpl;
7602
7628
  });
7603
- return _objectSpread$T(_objectSpread$T({}, currentState), {}, {
7629
+ return _objectSpread$W(_objectSpread$W({}, currentState), {}, {
7604
7630
  lib: lib
7605
7631
  });
7606
7632
  }
@@ -7608,8 +7634,8 @@ function templatesReducer() {
7608
7634
  }
7609
7635
 
7610
7636
  var _excluded$A = ["type", "action"];
7611
- 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; }
7612
- 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(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; }
7637
+ 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; }
7638
+ 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(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; }
7613
7639
  function execute(activeTool, _ref) {
7614
7640
  var action = _ref.action,
7615
7641
  editor = _ref.editor,
@@ -7621,7 +7647,9 @@ function execute(activeTool, _ref) {
7621
7647
  }
7622
7648
  } else if (typeof action === 'function') {
7623
7649
  action(editor, server, options);
7624
- } else ;
7650
+ } else {
7651
+ console.info('no action');
7652
+ }
7625
7653
  return activeTool;
7626
7654
  }
7627
7655
  function selected(actObj, activeTool, _ref2) {
@@ -7663,7 +7691,7 @@ function actionStateReducer () {
7663
7691
  case 'INIT':
7664
7692
  action = config['select-rectangle'].action;
7665
7693
  case 'ACTION':
7666
- activeTool = execute(state && state.activeTool, _objectSpread$S(_objectSpread$S({}, params), {}, {
7694
+ activeTool = execute(state && state.activeTool, _objectSpread$V(_objectSpread$V({}, params), {}, {
7667
7695
  action: action
7668
7696
  }));
7669
7697
  case 'UPDATE':
@@ -7679,20 +7707,25 @@ function actionStateReducer () {
7679
7707
  }
7680
7708
  }
7681
7709
 
7682
- 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; }
7683
- 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(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; }
7684
- var initialState = {
7710
+ 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; }
7711
+ 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(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; }
7712
+ var initialState$1 = {
7685
7713
  lib: [],
7714
+ functionalGroupInfo: null,
7686
7715
  mode: 'fg'
7687
7716
  };
7688
7717
  var functionalGroupsReducer = function functionalGroupsReducer() {
7689
- var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState;
7718
+ var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState$1;
7690
7719
  var _ref = arguments.length > 1 ? arguments[1] : undefined,
7691
7720
  type = _ref.type,
7692
7721
  payload = _ref.payload;
7693
7722
  switch (type) {
7694
7723
  case 'FG_INIT':
7695
- return _objectSpread$R(_objectSpread$R({}, state), payload);
7724
+ return _objectSpread$U(_objectSpread$U({}, state), payload);
7725
+ case 'FG_HIGHLIGHT':
7726
+ return _objectSpread$U(_objectSpread$U({}, state), {}, {
7727
+ functionalGroupInfo: payload
7728
+ });
7696
7729
  default:
7697
7730
  return state;
7698
7731
  }
@@ -7705,6 +7738,15 @@ var initFGroups = function initFGroups(lib) {
7705
7738
  }
7706
7739
  };
7707
7740
  };
7741
+ var highlightFGroup = function highlightFGroup(group) {
7742
+ return {
7743
+ type: 'FG_HIGHLIGHT',
7744
+ payload: group
7745
+ };
7746
+ };
7747
+ function highlightFG(dispatch, group) {
7748
+ dispatch(highlightFGroup(group));
7749
+ }
7708
7750
  function initFGTemplates(baseUrl) {
7709
7751
  return function () {
7710
7752
  var _ref2 = _asyncToGenerator( _regeneratorRuntime.mark(function _callee(dispatch) {
@@ -7744,8 +7786,78 @@ function initFGTemplates(baseUrl) {
7744
7786
  }();
7745
7787
  }
7746
7788
 
7747
- 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; }
7748
- 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(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; }
7789
+ 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; }
7790
+ 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(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; }
7791
+ var initialState = {
7792
+ lib: [],
7793
+ mode: 'fg'
7794
+ };
7795
+ var saltsAndSolventsReducer = function saltsAndSolventsReducer() {
7796
+ var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState;
7797
+ var _ref = arguments.length > 1 ? arguments[1] : undefined,
7798
+ type = _ref.type,
7799
+ payload = _ref.payload;
7800
+ switch (type) {
7801
+ case 'SALTS_AND_SOLVENTS_INIT':
7802
+ return _objectSpread$T(_objectSpread$T({}, state), payload);
7803
+ default:
7804
+ return state;
7805
+ }
7806
+ };
7807
+ var initSaltsAndSolvents = function initSaltsAndSolvents(lib) {
7808
+ return {
7809
+ type: 'SALTS_AND_SOLVENTS_INIT',
7810
+ payload: {
7811
+ lib: lib
7812
+ }
7813
+ };
7814
+ };
7815
+ function initSaltsAndSolventsTemplates(baseUrl) {
7816
+ return function () {
7817
+ var _ref2 = _asyncToGenerator( _regeneratorRuntime.mark(function _callee(dispatch) {
7818
+ var fileName, url, saltsAndSolventsProvider, functionalGroupsProvider, sdfSerializer, text, templates, saltsAndSolvents;
7819
+ return _regeneratorRuntime.wrap(function _callee$(_context) {
7820
+ while (1) {
7821
+ switch (_context.prev = _context.next) {
7822
+ case 0:
7823
+ fileName = 'salts-and-solvents.sdf';
7824
+ url = "".concat(baseUrl, "/templates/").concat(fileName);
7825
+ saltsAndSolventsProvider = SaltsAndSolventsProvider.getInstance();
7826
+ functionalGroupsProvider = FunctionalGroupsProvider.getInstance();
7827
+ sdfSerializer = new SdfSerializer();
7828
+ _context.next = 7;
7829
+ return prefetchStatic(url);
7830
+ case 7:
7831
+ text = _context.sent;
7832
+ templates = sdfSerializer.deserialize(text);
7833
+ saltsAndSolvents = templates.reduce(function (acc, _ref3) {
7834
+ var struct = _ref3.struct,
7835
+ props = _ref3.props;
7836
+ struct.abbreviation = String(props.abbreviation);
7837
+ acc.push(struct);
7838
+ return acc;
7839
+ }, []);
7840
+ saltsAndSolventsProvider.setSaltsAndSolventsList(saltsAndSolvents);
7841
+ functionalGroupsProvider.addToFunctionalGroupsList(saltsAndSolvents);
7842
+ dispatch(initSaltsAndSolvents(templates));
7843
+ dispatch(appUpdate({
7844
+ saltsAndSolvents: true
7845
+ }));
7846
+ case 14:
7847
+ case "end":
7848
+ return _context.stop();
7849
+ }
7850
+ }
7851
+ }, _callee);
7852
+ }));
7853
+ return function (_x) {
7854
+ return _ref2.apply(this, arguments);
7855
+ };
7856
+ }();
7857
+ }
7858
+
7859
+ 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; }
7860
+ 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(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; }
7749
7861
  var initial = {
7750
7862
  freqAtoms: [],
7751
7863
  currentAtom: 0,
@@ -7765,7 +7877,7 @@ function updateVisibleTools(visibleTool, activeTool) {
7765
7877
  if (key === 'shape' && menuHeight > 900) return res;
7766
7878
  if (!key.match(regExp) || menuHeight > 700) res[key] = visibleTool[key];
7767
7879
  return res;
7768
- }, _objectSpread$Q({}, activeTool));
7880
+ }, _objectSpread$S({}, activeTool));
7769
7881
  }
7770
7882
  function initResize() {
7771
7883
  return function (dispatch, getState) {
@@ -7789,41 +7901,41 @@ function toolbarReducer () {
7789
7901
  case 'ACTION':
7790
7902
  {
7791
7903
  var visibleTool = toolInMenu(action.action);
7792
- return visibleTool ? _objectSpread$Q(_objectSpread$Q({}, state), {}, {
7904
+ return visibleTool ? _objectSpread$S(_objectSpread$S({}, state), {}, {
7793
7905
  opened: null,
7794
- visibleTools: _objectSpread$Q(_objectSpread$Q({}, state.visibleTools), visibleTool)
7795
- }) : _objectSpread$Q(_objectSpread$Q({}, state), {}, {
7906
+ visibleTools: _objectSpread$S(_objectSpread$S({}, state.visibleTools), visibleTool)
7907
+ }) : _objectSpread$S(_objectSpread$S({}, state), {}, {
7796
7908
  opened: null
7797
7909
  });
7798
7910
  }
7799
7911
  case 'ADD_ATOMS':
7800
7912
  {
7801
7913
  var newState = addFreqAtom(data, state.freqAtoms, state.currentAtom);
7802
- return _objectSpread$Q(_objectSpread$Q({}, state), newState);
7914
+ return _objectSpread$S(_objectSpread$S({}, state), newState);
7803
7915
  }
7804
7916
  case 'CLEAR_VISIBLE':
7805
7917
  {
7806
7918
  var activeTool = toolInMenu(action.data);
7807
7919
  var correctTools = updateVisibleTools(state.visibleTools, activeTool);
7808
- return _objectSpread$Q(_objectSpread$Q({}, state), {}, {
7920
+ return _objectSpread$S(_objectSpread$S({}, state), {}, {
7809
7921
  opened: null,
7810
- visibleTools: _objectSpread$Q({}, correctTools)
7922
+ visibleTools: _objectSpread$S({}, correctTools)
7811
7923
  });
7812
7924
  }
7813
7925
  case 'OPENED':
7814
7926
  {
7815
- return data.isSelected && state.opened ? _objectSpread$Q(_objectSpread$Q({}, state), {}, {
7927
+ return data.isSelected && state.opened ? _objectSpread$S(_objectSpread$S({}, state), {}, {
7816
7928
  opened: null
7817
- }) : _objectSpread$Q(_objectSpread$Q({}, state), {}, {
7929
+ }) : _objectSpread$S(_objectSpread$S({}, state), {}, {
7818
7930
  opened: data.menuName
7819
7931
  });
7820
7932
  }
7821
7933
  case 'UPDATE':
7822
- return _objectSpread$Q(_objectSpread$Q({}, state), {}, {
7934
+ return _objectSpread$S(_objectSpread$S({}, state), {}, {
7823
7935
  opened: null
7824
7936
  });
7825
7937
  case 'MODAL_OPEN':
7826
- return _objectSpread$Q(_objectSpread$Q({}, state), {}, {
7938
+ return _objectSpread$S(_objectSpread$S({}, state), {}, {
7827
7939
  opened: null
7828
7940
  });
7829
7941
  default:
@@ -7867,9 +7979,9 @@ function hiddenAncestor(el, base) {
7867
7979
  }
7868
7980
 
7869
7981
  var _excluded$z = ["type"],
7870
- _excluded2$6 = ["buttons"];
7871
- 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; }
7872
- 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(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; }
7982
+ _excluded2$5 = ["buttons"];
7983
+ 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; }
7984
+ 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(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; }
7873
7985
  var shared = combineReducers({
7874
7986
  actionState: actionStateReducer,
7875
7987
  toolbar: toolbarReducer,
@@ -7885,6 +7997,7 @@ var shared = combineReducers({
7885
7997
  options: optionsReducer,
7886
7998
  templates: templatesReducer,
7887
7999
  functionalGroups: functionalGroupsReducer,
8000
+ saltsAndSolvents: saltsAndSolventsReducer,
7888
8001
  requestsStatuses: requestReducer
7889
8002
  });
7890
8003
  function getRootReducer(setEditor) {
@@ -7895,10 +8008,10 @@ function getRootReducer(setEditor) {
7895
8008
  case 'UPDATE':
7896
8009
  action.type;
7897
8010
  var data = _objectWithoutProperties(action, _excluded$z);
7898
- if (data) state = _objectSpread$P(_objectSpread$P({}, state), data);
8011
+ if (data) state = _objectSpread$R(_objectSpread$R({}, state), data);
7899
8012
  }
7900
- var sh = shared(state, _objectSpread$P(_objectSpread$P({}, action), pick(['editor', 'server', 'options'], state)));
7901
- var finalState = sh === state.shared ? state : _objectSpread$P(_objectSpread$P({}, state), sh);
8013
+ var sh = shared(state, _objectSpread$R(_objectSpread$R({}, action), pick(['editor', 'server', 'options'], state)));
8014
+ var finalState = sh === state.shared ? state : _objectSpread$R(_objectSpread$R({}, state), sh);
7902
8015
  global.currentState = finalState;
7903
8016
  return finalState;
7904
8017
  };
@@ -7906,7 +8019,7 @@ function getRootReducer(setEditor) {
7906
8019
  function createStore (options, server, setEditor) {
7907
8020
  var _options$buttons = options.buttons,
7908
8021
  buttons = _options$buttons === void 0 ? {} : _options$buttons,
7909
- restOptions = _objectWithoutProperties(options, _excluded2$6);
8022
+ restOptions = _objectWithoutProperties(options, _excluded2$5);
7910
8023
  var initState = {
7911
8024
  actionState: null,
7912
8025
  editor: null,
@@ -7919,6 +8032,9 @@ function createStore (options, server, setEditor) {
7919
8032
  templates: initTmplsState
7920
8033
  };
7921
8034
  var middleware = [thunk];
8035
+ if (process.env.KETCHER_ENABLE_REDUX_LOGGER === 'true') {
8036
+ middleware.push(logger);
8037
+ }
7922
8038
  var rootReducer = getRootReducer(setEditor);
7923
8039
  return createStore$1(rootReducer, initState, applyMiddleware.apply(void 0, middleware));
7924
8040
  }
@@ -7981,14 +8097,14 @@ var selectOptions$2 = makeItems(['select-rectangle', 'select-lasso', 'select-fra
7981
8097
  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']);
7982
8098
  var mappingOptions = makeItems(['reaction-map', 'reaction-unmap', 'reaction-automap']);
7983
8099
 
7984
- var classes$I = {"scroll":"ArrowScroll-module_scroll__h9kCx","button":"ArrowScroll-module_button__ygMgL","down":"ArrowScroll-module_down__yDzZX","up":"ArrowScroll-module_up__Q1ubd"};
8100
+ var classes$J = {"scroll":"ArrowScroll-module_scroll__h9kCx","button":"ArrowScroll-module_button__ygMgL","down":"ArrowScroll-module_down__yDzZX","up":"ArrowScroll-module_up__Q1ubd"};
7985
8101
 
7986
8102
  function useSettingsContext() {
7987
8103
  return React__default.useContext(settingsContext);
7988
8104
  }
7989
8105
 
7990
- 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; }
7991
- 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(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; }
8106
+ 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; }
8107
+ 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(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; }
7992
8108
  var throttleMilliseconds = 100;
7993
8109
  function useThrottleResizeObserver() {
7994
8110
  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
@@ -8002,11 +8118,11 @@ function useThrottleResizeObserver() {
8002
8118
  var onResize = useMemo(function () {
8003
8119
  return throttle$1(setSize, throttleMilliseconds);
8004
8120
  }, []);
8005
- var _useResizeObserver = useResizeObserver(_objectSpread$O({
8121
+ var _useResizeObserver = useResizeObserver(_objectSpread$Q({
8006
8122
  onResize: onResize
8007
8123
  }, options)),
8008
8124
  ref = _useResizeObserver.ref;
8009
- return _objectSpread$O({
8125
+ return _objectSpread$Q({
8010
8126
  ref: ref
8011
8127
  }, size);
8012
8128
  }
@@ -8102,7 +8218,7 @@ var ArrowScroll = function ArrowScroll(_ref) {
8102
8218
  };
8103
8219
  }, [endInView]);
8104
8220
  return jsxs("div", {
8105
- className: classes$I.scroll,
8221
+ className: classes$J.scroll,
8106
8222
  children: [endInView ? jsx(Fragment, {}) : jsx("button", {
8107
8223
  onClick: function onClick() {
8108
8224
  return scrollDown();
@@ -8113,7 +8229,7 @@ var ArrowScroll = function ArrowScroll(_ref) {
8113
8229
  onMouseDown: function onMouseDown() {
8114
8230
  return setScrollDown(true);
8115
8231
  },
8116
- className: clsx(classes$I.button, classes$I.down),
8232
+ className: clsx(classes$J.button, classes$J.down),
8117
8233
  children: "\u25BC"
8118
8234
  }), startInView ? jsx(Fragment, {}) : jsx("button", {
8119
8235
  onClick: function onClick() {
@@ -8125,7 +8241,7 @@ var ArrowScroll = function ArrowScroll(_ref) {
8125
8241
  onMouseDown: function onMouseDown() {
8126
8242
  return setScrollUp(true);
8127
8243
  },
8128
- className: clsx(classes$I.button, classes$I.up),
8244
+ className: clsx(classes$J.button, classes$J.up),
8129
8245
  children: "\u25B2"
8130
8246
  })]
8131
8247
  });
@@ -8140,13 +8256,13 @@ var mediaSizes$2 = {
8140
8256
  };
8141
8257
 
8142
8258
  var _excluded$y = ["height"];
8143
- 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; }
8144
- 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(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; }
8259
+ 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; }
8260
+ 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(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; }
8145
8261
  var Bond$1 = function Bond(props) {
8146
8262
  var height = props.height,
8147
8263
  rest = _objectWithoutProperties(props, _excluded$y);
8148
8264
  if (height && height <= mediaSizes$2.bondCollapsableHeight) {
8149
- return jsx(ToolbarMultiToolItem, _objectSpread$N({
8265
+ return jsx(ToolbarMultiToolItem, _objectSpread$P({
8150
8266
  id: "bonds",
8151
8267
  options: groupOptions,
8152
8268
  variant: "grouped",
@@ -8154,68 +8270,68 @@ var Bond$1 = function Bond(props) {
8154
8270
  }, rest));
8155
8271
  }
8156
8272
  return jsxs(Fragment, {
8157
- children: [jsx(ToolbarMultiToolItem, _objectSpread$N({
8273
+ children: [jsx(ToolbarMultiToolItem, _objectSpread$P({
8158
8274
  id: "bond-common",
8159
8275
  options: bondCommon
8160
- }, rest)), jsx(ToolbarMultiToolItem, _objectSpread$N({
8276
+ }, rest)), jsx(ToolbarMultiToolItem, _objectSpread$P({
8161
8277
  id: "bond-stereo",
8162
8278
  options: bondStereo
8163
- }, rest)), jsx(ToolbarMultiToolItem, _objectSpread$N({
8279
+ }, rest)), jsx(ToolbarMultiToolItem, _objectSpread$P({
8164
8280
  id: "bond-query",
8165
8281
  options: bondQuery
8166
- }, rest)), jsx(ToolbarMultiToolItem, _objectSpread$N({
8282
+ }, rest)), jsx(ToolbarMultiToolItem, _objectSpread$P({
8167
8283
  id: "bond-special",
8168
8284
  options: bondSpecial
8169
8285
  }, rest))]
8170
8286
  });
8171
8287
  };
8172
8288
 
8173
- 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; }
8174
- 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(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; }
8289
+ 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; }
8290
+ 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(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; }
8175
8291
  var RGroup$1 = function RGroup(props) {
8176
- return jsx(ToolbarGroupItem, _objectSpread$M({
8292
+ return jsx(ToolbarGroupItem, _objectSpread$O({
8177
8293
  id: "rgroup",
8178
8294
  options: rGroupOptions
8179
8295
  }, props));
8180
8296
  };
8181
8297
 
8182
- 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; }
8183
- 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(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; }
8298
+ 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; }
8299
+ 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(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; }
8184
8300
  var Shape = function Shape(props) {
8185
- return jsx(ToolbarGroupItem, _objectSpread$L({
8301
+ return jsx(ToolbarGroupItem, _objectSpread$N({
8186
8302
  id: "shapes",
8187
8303
  options: shapeOptions
8188
8304
  }, props));
8189
8305
  };
8190
8306
 
8191
8307
  var _excluded$x = ["height"];
8192
- 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; }
8193
- 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(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; }
8308
+ 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; }
8309
+ 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(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; }
8194
8310
  var Transform = function Transform(props) {
8195
8311
  var height = props.height,
8196
8312
  rest = _objectWithoutProperties(props, _excluded$x);
8197
8313
  if (height && height <= mediaSizes$2.transformCollapsableHeight) {
8198
- return jsx(ToolbarGroupItem, _objectSpread$K({
8314
+ return jsx(ToolbarGroupItem, _objectSpread$M({
8199
8315
  id: "transforms",
8200
8316
  options: transformOptions
8201
8317
  }, rest));
8202
8318
  }
8203
8319
  return jsxs(Fragment, {
8204
- children: [jsx(ToolbarGroupItem, _objectSpread$K({
8320
+ children: [jsx(ToolbarGroupItem, _objectSpread$M({
8205
8321
  id: "transform-rotate"
8206
- }, rest)), jsx(ToolbarGroupItem, _objectSpread$K({
8322
+ }, rest)), jsx(ToolbarGroupItem, _objectSpread$M({
8207
8323
  id: "transform-flip-h"
8208
- }, rest)), jsx(ToolbarGroupItem, _objectSpread$K({
8324
+ }, rest)), jsx(ToolbarGroupItem, _objectSpread$M({
8209
8325
  id: "transform-flip-v"
8210
8326
  }, rest))]
8211
8327
  });
8212
8328
  };
8213
8329
 
8214
- 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"};
8330
+ 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"};
8215
8331
 
8216
8332
  var _excluded$w = ["className"];
8217
- 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; }
8218
- 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(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; }
8333
+ 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; }
8334
+ 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(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; }
8219
8335
  var LeftToolbar = function LeftToolbar(props) {
8220
8336
  var className = props.className,
8221
8337
  rest = _objectWithoutProperties(props, _excluded$w);
@@ -8239,7 +8355,7 @@ var LeftToolbar = function LeftToolbar(props) {
8239
8355
  var Item = function Item(_ref) {
8240
8356
  var id = _ref.id,
8241
8357
  options = _ref.options;
8242
- return ToolbarGroupItem(_objectSpread$J({
8358
+ return ToolbarGroupItem(_objectSpread$L({
8243
8359
  id: id,
8244
8360
  options: options
8245
8361
  }, rest));
@@ -8271,25 +8387,25 @@ var LeftToolbar = function LeftToolbar(props) {
8271
8387
  });
8272
8388
  }
8273
8389
  return visibleItems.length ? jsx("div", {
8274
- className: clsx(classes$H.group, className),
8390
+ className: clsx(classes$I.group, className),
8275
8391
  children: visibleItems.map(function (item) {
8276
8392
  switch (item.id) {
8277
8393
  case 'bond-common':
8278
- return createElement(Bond$1, _objectSpread$J(_objectSpread$J({}, rest), {}, {
8394
+ return createElement(Bond$1, _objectSpread$L(_objectSpread$L({}, rest), {}, {
8279
8395
  height: height,
8280
8396
  key: item.id
8281
8397
  }));
8282
8398
  case 'transform-rotate':
8283
- return createElement(Transform, _objectSpread$J(_objectSpread$J({}, rest), {}, {
8399
+ return createElement(Transform, _objectSpread$L(_objectSpread$L({}, rest), {}, {
8284
8400
  height: height,
8285
8401
  key: item.id
8286
8402
  }));
8287
8403
  case 'rgroup':
8288
- return createElement(RGroup$1, _objectSpread$J(_objectSpread$J({}, rest), {}, {
8404
+ return createElement(RGroup$1, _objectSpread$L(_objectSpread$L({}, rest), {}, {
8289
8405
  key: item.id
8290
8406
  }));
8291
8407
  case 'shapes':
8292
- return createElement(Shape, _objectSpread$J(_objectSpread$J({}, rest), {}, {
8408
+ return createElement(Shape, _objectSpread$L(_objectSpread$L({}, rest), {}, {
8293
8409
  key: item.id
8294
8410
  }));
8295
8411
  default:
@@ -8302,16 +8418,16 @@ var LeftToolbar = function LeftToolbar(props) {
8302
8418
  }) : null;
8303
8419
  };
8304
8420
  return jsxs("div", {
8305
- className: clsx(classes$H.root, className),
8421
+ className: clsx(classes$I.root, className),
8306
8422
  ref: ref,
8307
8423
  children: [jsxs("div", {
8308
- className: classes$H.buttons,
8424
+ className: classes$I.buttons,
8309
8425
  ref: scrollRef,
8310
8426
  children: [jsx("div", {
8311
- className: classes$H.listener,
8427
+ className: classes$I.listener,
8312
8428
  ref: startRef,
8313
8429
  children: jsx(Group, {
8314
- className: classes$H.groupItem,
8430
+ className: classes$I.groupItem,
8315
8431
  items: [{
8316
8432
  id: 'hand'
8317
8433
  }, {
@@ -8322,7 +8438,7 @@ var LeftToolbar = function LeftToolbar(props) {
8322
8438
  }]
8323
8439
  })
8324
8440
  }), jsx(Group, {
8325
- className: classes$H.groupItem,
8441
+ className: classes$I.groupItem,
8326
8442
  items: [{
8327
8443
  id: 'bonds',
8328
8444
  options: [].concat(_toConsumableArray(bondCommon), _toConsumableArray(bondQuery), _toConsumableArray(bondSpecial), _toConsumableArray(bondStereo))
@@ -8330,27 +8446,27 @@ var LeftToolbar = function LeftToolbar(props) {
8330
8446
  id: 'chain'
8331
8447
  }]
8332
8448
  }), jsx(Group, {
8333
- className: classes$H.groupItem,
8449
+ className: classes$I.groupItem,
8334
8450
  items: [{
8335
8451
  id: 'charge-plus'
8336
8452
  }, {
8337
8453
  id: 'charge-minus'
8338
8454
  }]
8339
8455
  }), jsx(Group, {
8340
- className: classes$H.groupItem,
8456
+ className: classes$I.groupItem,
8341
8457
  items: [{
8342
8458
  id: 'transforms',
8343
8459
  options: transformOptions
8344
8460
  }]
8345
8461
  }), jsx(Group, {
8346
- className: classes$H.groupItem,
8462
+ className: classes$I.groupItem,
8347
8463
  items: [{
8348
8464
  id: 'sgroup'
8349
8465
  }, {
8350
8466
  id: 'sgroup-data'
8351
8467
  }]
8352
8468
  }), jsx(Group, {
8353
- className: classes$H.groupItem,
8469
+ className: classes$I.groupItem,
8354
8470
  items: [{
8355
8471
  id: 'reaction-plus'
8356
8472
  }, {
@@ -8361,17 +8477,17 @@ var LeftToolbar = function LeftToolbar(props) {
8361
8477
  options: mappingOptions
8362
8478
  }]
8363
8479
  }), jsx("div", {
8364
- className: classes$H.listener,
8480
+ className: classes$I.listener,
8365
8481
  ref: sizeRef,
8366
8482
  children: jsx(Group, {
8367
- className: classes$H.groupItem,
8483
+ className: classes$I.groupItem,
8368
8484
  items: [{
8369
8485
  id: 'rgroup',
8370
8486
  options: rGroupOptions
8371
8487
  }]
8372
8488
  })
8373
8489
  }), jsx(Group, {
8374
- className: classes$H.groupItem,
8490
+ className: classes$I.groupItem,
8375
8491
  items: [{
8376
8492
  id: 'shapes',
8377
8493
  options: shapeOptions
@@ -8379,7 +8495,7 @@ var LeftToolbar = function LeftToolbar(props) {
8379
8495
  }), jsx("div", {
8380
8496
  ref: endRef,
8381
8497
  children: jsx(Group, {
8382
- className: classes$H.groupItem,
8498
+ className: classes$I.groupItem,
8383
8499
  items: [{
8384
8500
  id: 'text'
8385
8501
  }]
@@ -8420,19 +8536,19 @@ var mapDispatchToProps$h = function mapDispatchToProps(dispatch) {
8420
8536
  };
8421
8537
  var LeftToolbarContainer = connect(mapStateToProps$i, mapDispatchToProps$h)(LeftToolbar);
8422
8538
 
8423
- var classes$G = {"button-common-styles":"Atom-module_button-common-styles__j3EUJ","scrollbar":"Atom-module_scrollbar__iO-Ni","atom":"Atom-module_atom__g2RUu"};
8539
+ var classes$H = {"button-common-styles":"Atom-module_button-common-styles__j3EUJ","scrollbar":"Atom-module_scrollbar__iO-Ni","atom":"Atom-module_atom__g2RUu"};
8424
8540
 
8425
8541
  var _excluded$v = ["el", "shortcut", "selected"];
8426
- 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; }
8427
- 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(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; }
8542
+ 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; }
8543
+ 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(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; }
8428
8544
  function Atom$1(_ref) {
8429
8545
  var el = _ref.el,
8430
8546
  shortcut = _ref.shortcut,
8431
8547
  selected = _ref.selected,
8432
8548
  props = _objectWithoutProperties(_ref, _excluded$v);
8433
- return jsx("button", _objectSpread$I(_objectSpread$I({
8549
+ return jsx("button", _objectSpread$K(_objectSpread$K({
8434
8550
  title: shortcut ? "".concat(el.title, " (").concat(shortcut, ")") : el.title,
8435
- className: clsx(classes$G.atom, {
8551
+ className: clsx(classes$H.atom, {
8436
8552
  selected: selected
8437
8553
  }),
8438
8554
  value: el.number
@@ -8811,16 +8927,16 @@ var AtomsList = forwardRef(function (props, ref) {
8811
8927
  });
8812
8928
  });
8813
8929
 
8814
- 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"};
8930
+ 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"};
8815
8931
 
8816
8932
  var _excluded$u = ["className"];
8817
- 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; }
8818
- 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(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; }
8933
+ 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; }
8934
+ 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(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; }
8819
8935
  var Group = function Group(_ref) {
8820
8936
  var children = _ref.children,
8821
8937
  className = _ref.className;
8822
8938
  return jsx("div", {
8823
- className: clsx(classes$F.group, className),
8939
+ className: clsx(classes$G.group, className),
8824
8940
  children: children
8825
8941
  });
8826
8942
  };
@@ -8851,12 +8967,12 @@ var RightToolbar = function RightToolbar(props) {
8851
8967
  scrollRef.current.scrollTop += sizeRef.current.offsetHeight;
8852
8968
  };
8853
8969
  return jsxs("div", {
8854
- className: clsx(classes$F.root, className),
8970
+ className: clsx(classes$G.root, className),
8855
8971
  children: [jsxs("div", {
8856
- className: classes$F.buttons,
8972
+ className: classes$G.buttons,
8857
8973
  ref: scrollRef,
8858
8974
  children: [jsxs(Group, {
8859
- className: classes$F.atomsList,
8975
+ className: classes$G.atomsList,
8860
8976
  children: [jsx(AtomsList, {
8861
8977
  ref: startRef,
8862
8978
  atoms: basicAtoms,
@@ -8866,15 +8982,15 @@ var RightToolbar = function RightToolbar(props) {
8866
8982
  atoms: freqAtoms,
8867
8983
  active: active,
8868
8984
  onAction: onAction
8869
- }), jsx(ToolbarGroupItem, _objectSpread$H({
8985
+ }), jsx(ToolbarGroupItem, _objectSpread$J({
8870
8986
  id: "period-table"
8871
8987
  }, rest))]
8872
8988
  }), jsx(Group, {
8873
8989
  children: jsxs("div", {
8874
8990
  ref: sizeRef,
8875
- children: [jsx(ToolbarGroupItem, _objectSpread$H({
8991
+ children: [jsx(ToolbarGroupItem, _objectSpread$J({
8876
8992
  id: "any-atom"
8877
- }, rest)), jsx(ToolbarGroupItem, _objectSpread$H({
8993
+ }, rest)), jsx(ToolbarGroupItem, _objectSpread$J({
8878
8994
  id: "extended-table"
8879
8995
  }, rest))]
8880
8996
  })
@@ -9505,6 +9621,7 @@ var TopToolbar = function TopToolbar(_ref) {
9505
9621
  isCollapsed: width < collapseLimit
9506
9622
  }), jsx(SystemControls, {
9507
9623
  onHistoryClick: function onHistoryClick() {
9624
+ console.log('History button clicked');
9508
9625
  },
9509
9626
  onSettingsOpen: onSettingsOpen,
9510
9627
  onFullscreen: onFullscreen,
@@ -9726,6 +9843,11 @@ function lookup(map, event) {
9726
9843
  }
9727
9844
  keyNorm.lookup = lookup;
9728
9845
 
9846
+ 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; } } }; }
9847
+ 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); }
9848
+ 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; }
9849
+ 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; }
9850
+ 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(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; }
9729
9851
  function initKeydownListener(element) {
9730
9852
  return function (dispatch, getState) {
9731
9853
  var hotKeys = initHotKeys();
@@ -9737,6 +9859,7 @@ function initKeydownListener(element) {
9737
9859
  function keyHandle(dispatch, state, hotKeys, event) {
9738
9860
  if (state.modal) return;
9739
9861
  var editor = state.editor;
9862
+ var render = editor.render;
9740
9863
  var actionState = state.actionState;
9741
9864
  var actionTool = actionState.activeTool;
9742
9865
  var key = keyNorm(event);
@@ -9756,7 +9879,8 @@ function keyHandle(dispatch, state, hotKeys, event) {
9756
9879
  event.preventDefault();
9757
9880
  } else if ((group = keyNorm.lookup(hotKeys, event)) !== undefined) {
9758
9881
  var index = checkGroupOnTool(group, actionTool);
9759
- index = (index + 1) % group.length;
9882
+ var groupLength = group !== null ? group.length : 1;
9883
+ index = (index + 1) % groupLength;
9760
9884
  var actName = group[index];
9761
9885
  if (actionState[actName] && actionState[actName].disabled === true) {
9762
9886
  event.preventDefault();
@@ -9764,13 +9888,38 @@ function keyHandle(dispatch, state, hotKeys, event) {
9764
9888
  }
9765
9889
  if (actions.indexOf(actName) === -1) {
9766
9890
  var newAction = config[actName].action;
9767
- dispatch(onAction(newAction));
9891
+ var hoverItemId = getHoveredAtomId(render.ctab.atoms);
9892
+ var isHoveringOverAtom = hoverItemId !== null;
9893
+ if (isHoveringOverAtom) {
9894
+ var atomProps = _objectSpread$I({}, newAction.opts);
9895
+ var updatedAtoms = fromAtomsAttrs(render.ctab, hoverItemId, atomProps, true);
9896
+ editor.update(updatedAtoms);
9897
+ } else {
9898
+ dispatch(onAction(newAction));
9899
+ }
9768
9900
  event.preventDefault();
9769
- } else if (window.clipboardData) {
9901
+ } else if (isIE) {
9770
9902
  exec(event);
9771
9903
  }
9772
9904
  }
9773
9905
  }
9906
+ function getHoveredAtomId(atoms) {
9907
+ var _iterator = _createForOfIteratorHelper$e(atoms.entries()),
9908
+ _step;
9909
+ try {
9910
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
9911
+ var _step$value = _slicedToArray(_step.value, 2),
9912
+ id = _step$value[0],
9913
+ atom = _step$value[1];
9914
+ if (atom.hover) return id;
9915
+ }
9916
+ } catch (err) {
9917
+ _iterator.e(err);
9918
+ } finally {
9919
+ _iterator.f();
9920
+ }
9921
+ return null;
9922
+ }
9774
9923
  function setHotKey(key, actName, hotKeys) {
9775
9924
  if (Array.isArray(hotKeys[key])) hotKeys[key].push(actName);else hotKeys[key] = [actName];
9776
9925
  }
@@ -9798,7 +9947,7 @@ function checkGroupOnTool(group, actionTool) {
9798
9947
  return index;
9799
9948
  }
9800
9949
  var rxnTextPlain = /\$RXN\n+\s+0\s+0\s+0\n*/;
9801
- function initClipboard(dispatch, getState) {
9950
+ function initClipboard(dispatch) {
9802
9951
  var formats = Object.keys(formatProperties).map(function (format) {
9803
9952
  return formatProperties[format].mime;
9804
9953
  });
@@ -9845,7 +9994,7 @@ function clipData(editor) {
9845
9994
  var errorHandler = editor.errorHandler;
9846
9995
  if (struct.isBlank()) return null;
9847
9996
  var simpleObjectOrText = Boolean(struct.simpleObjects.size || struct.texts.size);
9848
- if (simpleObjectOrText && window.clipboardData) {
9997
+ if (simpleObjectOrText && isIE) {
9849
9998
  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');
9850
9999
  return null;
9851
10000
  }
@@ -9859,8 +10008,8 @@ function clipData(editor) {
9859
10008
  res['text/plain'] = data;
9860
10009
  res[type] = data;
9861
10010
  return res;
9862
- } catch (ex) {
9863
- errorHandler(ex.message);
10011
+ } catch (e) {
10012
+ errorHandler(e.message);
9864
10013
  }
9865
10014
  return null;
9866
10015
  }
@@ -9894,7 +10043,7 @@ var mapDispatchToProps$d = function mapDispatchToProps(dispatch) {
9894
10043
  };
9895
10044
  var AppHiddenContainer = connect(null, mapDispatchToProps$d)(AppHidden);
9896
10045
 
9897
- 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"};
10046
+ 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"};
9898
10047
 
9899
10048
  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"};
9900
10049
 
@@ -9906,8 +10055,8 @@ var mediaSizes$1 = {
9906
10055
  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"};
9907
10056
 
9908
10057
  var _excluded$t = ["children", "title", "params", "result", "valid", "buttons", "headerContent", "footerContent", "className", "buttonsNameMap", "needMargin", "withDivider", "focusable"];
9909
- 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; }
9910
- 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(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; }
10058
+ 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; }
10059
+ 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(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; }
9911
10060
  var Dialog = function Dialog(props) {
9912
10061
  var children = props.children,
9913
10062
  title = props.title,
@@ -9960,7 +10109,7 @@ var Dialog = function Dialog(props) {
9960
10109
  event.stopPropagation();
9961
10110
  }
9962
10111
  };
9963
- return jsxs("div", _objectSpread$G(_objectSpread$G({
10112
+ return jsxs("div", _objectSpread$H(_objectSpread$H({
9964
10113
  ref: dialogRef,
9965
10114
  role: "dialog",
9966
10115
  onSubmit: function onSubmit(event) {
@@ -10017,8 +10166,8 @@ var LoadingCircles = function LoadingCircles() {
10017
10166
  };
10018
10167
 
10019
10168
  var _excluded$s = ["id", "dist"];
10020
- 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; }
10021
- 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(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; }
10169
+ 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; }
10170
+ 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(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; }
10022
10171
  var SELECTION_DISTANCE_COEFFICIENT = 0.4;
10023
10172
  var SELECTION_WITHIN_TEXT = 0;
10024
10173
  var findMaps = {
@@ -10353,7 +10502,7 @@ function findClosestItem(restruct, pos, maps, skip, scale) {
10353
10502
  var id = item.id,
10354
10503
  dist = item.dist,
10355
10504
  other = _objectWithoutProperties(item, _excluded$s);
10356
- return _objectSpread$F({
10505
+ return _objectSpread$G({
10357
10506
  map: mp,
10358
10507
  id: id,
10359
10508
  dist: dist
@@ -10680,6 +10829,7 @@ var AtomTool = function () {
10680
10829
  type: 1,
10681
10830
  stereo: Bond$2.PATTERN.STEREO.NONE
10682
10831
  });
10832
+ this.editor.hoverIcon.show().attr('text', "".concat(atomProps.label)).attr('fill', "".concat(ElementColor[atomProps.label]));
10683
10833
  if (editor.selection()) {
10684
10834
  var _editor$selection;
10685
10835
  if ((_editor$selection = editor.selection()) !== null && _editor$selection !== void 0 && _editor$selection.atoms) {
@@ -10763,12 +10913,31 @@ var AtomTool = function () {
10763
10913
  };
10764
10914
  }
10765
10915
  }
10916
+ }, {
10917
+ key: "mouseleave",
10918
+ value: function mouseleave() {
10919
+ this.editor.hoverIcon.hide();
10920
+ }
10921
+ }, {
10922
+ key: "mouseover",
10923
+ value: function mouseover() {
10924
+ this.editor.hoverIcon.show();
10925
+ }
10766
10926
  }, {
10767
10927
  key: "mousemove",
10768
10928
  value: function mousemove(event) {
10769
10929
  var rnd = this.editor.render;
10930
+ var layerX = event.layerX,
10931
+ layerY = event.layerY;
10770
10932
  if (!this.dragCtx || !this.dragCtx.item) {
10771
- this.editor.hover(this.editor.findItem(event, ['atoms', 'functionalGroups']));
10933
+ var _this$editor$hoverIco = this.editor.hoverIcon.getBBox(),
10934
+ height = _this$editor$hoverIco.height,
10935
+ width = _this$editor$hoverIco.width;
10936
+ this.editor.hoverIcon.attr({
10937
+ x: layerX - width / 2,
10938
+ y: layerY - height / 2
10939
+ });
10940
+ this.editor.hover(this.editor.findItem(event, ['atoms', 'functionalGroups']), null, event);
10772
10941
  return;
10773
10942
  }
10774
10943
  var dragCtx = this.dragCtx;
@@ -11170,12 +11339,16 @@ var BondTool = function () {
11170
11339
  beginPos = utils.calcNewAtomPos(atom === null || atom === void 0 ? void 0 : atom.pp.get_xy0(), xy1, event.ctrlKey);
11171
11340
  }
11172
11341
  }
11173
- if (dist > 0.3) dragCtx.action = fromBondAddition(rnd.ctab, this.bondProps, beginAtom, endAtom, beginPos, endPos)[0];else delete dragCtx.action;
11342
+ if (dist > 0.3) {
11343
+ dragCtx.action = fromBondAddition(rnd.ctab, this.bondProps, beginAtom, endAtom, beginPos, endPos)[0];
11344
+ } else {
11345
+ delete dragCtx.action;
11346
+ }
11174
11347
  this.editor.update(dragCtx.action, true);
11175
11348
  return true;
11176
11349
  }
11177
11350
  }
11178
- this.editor.hover(this.editor.findItem(event, ['atoms', 'bonds']));
11351
+ this.editor.hover(this.editor.findItem(event, ['atoms', 'bonds']), null, event);
11179
11352
  return true;
11180
11353
  }
11181
11354
  }, {
@@ -11309,7 +11482,7 @@ var ChainTool = function () {
11309
11482
  var editor = this.editor;
11310
11483
  var restruct = editor.render.ctab;
11311
11484
  var dragCtx = this.dragCtx;
11312
- editor.hover(this.editor.findItem(event, ['atoms', 'bonds']));
11485
+ editor.hover(this.editor.findItem(event, ['atoms', 'bonds']), null, event);
11313
11486
  if (!dragCtx) {
11314
11487
  return true;
11315
11488
  }
@@ -11443,7 +11616,7 @@ var ChargeTool = function () {
11443
11616
  if (ci && ci.map === 'atoms' && Elements.get((_molecule$atoms$get = molecule.atoms.get(ci.id)) === null || _molecule$atoms$get === void 0 ? void 0 : _molecule$atoms$get.label)) {
11444
11617
  this.editor.hover(ci);
11445
11618
  } else {
11446
- this.editor.hover(null);
11619
+ this.editor.hover(null, null, event);
11447
11620
  }
11448
11621
  return true;
11449
11622
  }
@@ -12225,6 +12398,7 @@ function sgroupDialog(editor, id, defaultType) {
12225
12398
  var type = sg ? sg.type : defaultType;
12226
12399
  var eventName = type === 'DAT' ? 'sdataEdit' : 'sgroupEdit';
12227
12400
  if (!selection.atoms && !selection.bonds && !sg) {
12401
+ console.info('There is no selection or sgroup');
12228
12402
  return;
12229
12403
  }
12230
12404
  var attrs;
@@ -12343,8 +12517,8 @@ function countOfSelectedComponents(restruct, atoms) {
12343
12517
  }, 0);
12344
12518
  }
12345
12519
 
12346
- 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; }
12347
- 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(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; }
12520
+ 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; }
12521
+ 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(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; }
12348
12522
  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; } } }; }
12349
12523
  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); }
12350
12524
  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; }
@@ -12528,7 +12702,7 @@ var SelectTool = function () {
12528
12702
  return true;
12529
12703
  }
12530
12704
  var maps = _classPrivateFieldGet(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'];
12531
- editor.hover(editor.findItem(event, maps, null));
12705
+ editor.hover(editor.findItem(event, maps, null), null, event);
12532
12706
  return true;
12533
12707
  }
12534
12708
  }, {
@@ -12614,6 +12788,16 @@ var SelectTool = function () {
12614
12788
  }
12615
12789
  var dragCtx = this.dragCtx;
12616
12790
  if (dragCtx && dragCtx.stopTapping) dragCtx.stopTapping();
12791
+ var possibleSaltOrSolvent = struct.sgroups.get(actualSgroupId);
12792
+ var isDraggingSaltOrSolventOnStructure = SGroup.isSaltOrSolvent(possibleSaltOrSolvent === null || possibleSaltOrSolvent === void 0 ? void 0 : possibleSaltOrSolvent.item.data.name);
12793
+ if ((isDraggingSaltOrSolventOnStructure || this.isDraggingStructureOnSaltOrSolvent(dragCtx, struct.sgroups)) && dragCtx) {
12794
+ preventSaltAndSolventsMerge(struct, dragCtx, editor);
12795
+ delete this.dragCtx;
12796
+ if (_classPrivateFieldGet(this, _lassoHelper).running()) {
12797
+ this.selectElementsOnCanvas(newSelected, editor, event);
12798
+ }
12799
+ return true;
12800
+ }
12617
12801
  if (dragCtx && dragCtx.item) {
12618
12802
  dragCtx.action = dragCtx.action ? fromItemsFuse(struct, dragCtx.mergeItems).mergeWith(dragCtx.action) : fromItemsFuse(struct, dragCtx.mergeItems);
12619
12803
  editor.hover(null);
@@ -12621,8 +12805,7 @@ var SelectTool = function () {
12621
12805
  if (dragCtx.action.operations.length !== 0) editor.update(dragCtx.action);
12622
12806
  delete this.dragCtx;
12623
12807
  } else if (_classPrivateFieldGet(this, _lassoHelper).running()) {
12624
- var sel = newSelected.atoms.length > 0 ? selMerge(_classPrivateFieldGet(this, _lassoHelper).end(), newSelected, false) : _classPrivateFieldGet(this, _lassoHelper).end();
12625
- editor.selection(!event.shiftKey ? sel : selMerge(sel, editor.selection(), false));
12808
+ this.selectElementsOnCanvas(newSelected, editor, event);
12626
12809
  } else if (_classPrivateFieldGet(this, _lassoHelper).fragment) {
12627
12810
  if (!event.shiftKey) editor.selection(null);
12628
12811
  }
@@ -12738,7 +12921,7 @@ var SelectTool = function () {
12738
12921
  } else if (ci.map === 'texts') {
12739
12922
  editor.selection(closestToSel(ci));
12740
12923
  var text = molecule.texts.get(ci.id);
12741
- var dialog = editor.event.elementEdit.dispatch(_objectSpread$E(_objectSpread$E({}, text), {}, {
12924
+ var dialog = editor.event.elementEdit.dispatch(_objectSpread$F(_objectSpread$F({}, text), {}, {
12742
12925
  type: 'text'
12743
12926
  }));
12744
12927
  dialog.then(function (_ref) {
@@ -12766,6 +12949,33 @@ var SelectTool = function () {
12766
12949
  delete this.dragCtx;
12767
12950
  this.editor.hover(null);
12768
12951
  }
12952
+ }, {
12953
+ key: "selectElementsOnCanvas",
12954
+ value: function selectElementsOnCanvas(elements, editor, event) {
12955
+ var sel = elements.atoms.length > 0 ? selMerge(_classPrivateFieldGet(this, _lassoHelper).end(), elements, false) : _classPrivateFieldGet(this, _lassoHelper).end();
12956
+ editor.selection(!event.shiftKey ? sel : selMerge(sel, editor.selection(), false));
12957
+ }
12958
+ }, {
12959
+ key: "isDraggingStructureOnSaltOrSolvent",
12960
+ value: function isDraggingStructureOnSaltOrSolvent(dragCtx, sgroups) {
12961
+ var isDraggingOnSaltOrSolventAtom;
12962
+ var isDraggingOnSaltOrSolventBond;
12963
+ if (dragCtx !== null && dragCtx !== void 0 && dragCtx.mergeItems) {
12964
+ var mergeAtoms = Array.from(dragCtx.mergeItems.atoms.values());
12965
+ var mergeBonds = Array.from(dragCtx.mergeItems.bonds.values());
12966
+ var sgroupsOnCanvas = Array.from(sgroups.values()).map(function (_ref2) {
12967
+ var item = _ref2.item;
12968
+ return item;
12969
+ });
12970
+ isDraggingOnSaltOrSolventAtom = mergeAtoms.some(function (atomId) {
12971
+ return SGroup.isAtomInSaltOrSolvent(atomId, sgroupsOnCanvas);
12972
+ });
12973
+ isDraggingOnSaltOrSolventBond = mergeBonds.some(function (bondId) {
12974
+ return SGroup.isBondInSaltOrSolvent(bondId, sgroupsOnCanvas);
12975
+ });
12976
+ }
12977
+ return isDraggingOnSaltOrSolventAtom || isDraggingOnSaltOrSolventBond;
12978
+ }
12769
12979
  }]);
12770
12980
  return SelectTool;
12771
12981
  }();
@@ -12791,6 +13001,17 @@ function uniqArray(dest, add, reversible) {
12791
13001
  return dest;
12792
13002
  }, []);
12793
13003
  }
13004
+ function preventSaltAndSolventsMerge(struct, dragCtx, editor) {
13005
+ var action = dragCtx.action ? fromItemsFuse(struct, null).mergeWith(dragCtx.action) : fromItemsFuse(struct, null);
13006
+ editor.hover(null);
13007
+ if (dragCtx.mergeItems) {
13008
+ editor.selection(null);
13009
+ }
13010
+ editor.update(action);
13011
+ editor.event.message.dispatch({
13012
+ info: false
13013
+ });
13014
+ }
12794
13015
 
12795
13016
  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; } } }; }
12796
13017
  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); }
@@ -13055,6 +13276,7 @@ var EraserTool = function () {
13055
13276
  } else if (ci.map === 'texts') {
13056
13277
  this.editor.update(fromTextDeletion(restruct, ci.id));
13057
13278
  } else {
13279
+ console.error('EraserTool: unable to delete the object ' + ci.map + '[' + ci.id + ']');
13058
13280
  return;
13059
13281
  }
13060
13282
  this.editor.selection(null);
@@ -13589,7 +13811,7 @@ var ReactionArrowTool = function () {
13589
13811
  }
13590
13812
  } else {
13591
13813
  var items = this.editor.findItem(event, ['rxnArrows']);
13592
- this.editor.hover(items);
13814
+ this.editor.hover(items, null, event);
13593
13815
  }
13594
13816
  }
13595
13817
  }, {
@@ -14294,7 +14516,7 @@ var TemplateTool = function () {
14294
14516
  value: function mousemove(event) {
14295
14517
  var restruct = this.editor.render.ctab;
14296
14518
  if (!this.dragCtx) {
14297
- this.editor.hover(this.editor.findItem(event, this.findItems));
14519
+ this.editor.hover(this.editor.findItem(event, this.findItems), null, event);
14298
14520
  return true;
14299
14521
  }
14300
14522
  var dragCtx = this.dragCtx;
@@ -14400,6 +14622,10 @@ var TemplateTool = function () {
14400
14622
  }
14401
14623
  var action;
14402
14624
  var pasteItems = null;
14625
+ if (SGroup.isSaltOrSolvent(this.template.molecule.name)) {
14626
+ addSaltsAndSolventsOnCanvasWithoutMerge(restruct, this.template, dragCtx, this.editor);
14627
+ return true;
14628
+ }
14403
14629
  if (!dragCtx.action) {
14404
14630
  if (!ci) {
14405
14631
  var _fromTemplateOnCanvas3 = fromTemplateOnCanvas(restruct, this.template, dragCtx.xy0, 0);
@@ -14447,11 +14673,15 @@ var TemplateTool = function () {
14447
14673
  }
14448
14674
  }
14449
14675
  this.editor.selection(null);
14450
- if (!dragCtx.mergeItems && pasteItems && this.mode !== 'fg') dragCtx.mergeItems = getItemsToFuse(this.editor, pasteItems);
14676
+ if (!dragCtx.mergeItems && pasteItems && this.mode !== 'fg') {
14677
+ dragCtx.mergeItems = getItemsToFuse(this.editor, pasteItems);
14678
+ }
14451
14679
  dragCtx.action = dragCtx.action ? fromItemsFuse(restruct, dragCtx.mergeItems).mergeWith(dragCtx.action) : fromItemsFuse(restruct, dragCtx.mergeItems);
14452
14680
  this.editor.hover(null);
14453
14681
  var completeAction = dragCtx.action;
14454
- if (completeAction && !completeAction.isDummy()) this.editor.update(completeAction);
14682
+ if (completeAction && !completeAction.isDummy()) {
14683
+ this.editor.update(completeAction);
14684
+ }
14455
14685
  this.editor.event.message.dispatch({
14456
14686
  info: false
14457
14687
  });
@@ -14470,6 +14700,17 @@ var TemplateTool = function () {
14470
14700
  }]);
14471
14701
  return TemplateTool;
14472
14702
  }();
14703
+ function addSaltsAndSolventsOnCanvasWithoutMerge(restruct, template, dragCtx, editor) {
14704
+ var _fromTemplateOnCanvas5 = fromTemplateOnCanvas(restruct, template, dragCtx.xy0, 0),
14705
+ _fromTemplateOnCanvas6 = _slicedToArray(_fromTemplateOnCanvas5, 1),
14706
+ action = _fromTemplateOnCanvas6[0];
14707
+ editor.update(action);
14708
+ editor.selection(null);
14709
+ editor.hover(null);
14710
+ editor.event.message.dispatch({
14711
+ info: false
14712
+ });
14713
+ }
14473
14714
  function getSign(molecule, bond, v) {
14474
14715
  var begin = molecule.atoms.get(bond.begin).pp;
14475
14716
  var end = molecule.atoms.get(bond.end).pp;
@@ -14517,7 +14758,7 @@ var TextTool = function () {
14517
14758
  this.dragCtx.action = fromMultipleMove(render.ctab, this.editor.selection() || {}, render.page2obj(event).sub(this.dragCtx.xy0));
14518
14759
  this.editor.update(this.dragCtx.action, true);
14519
14760
  } else {
14520
- this.editor.hover(this.editor.findItem(event, ['texts']));
14761
+ this.editor.hover(this.editor.findItem(event, ['texts']), null, event);
14521
14762
  }
14522
14763
  }
14523
14764
  }, {
@@ -14695,6 +14936,7 @@ function _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedec
14695
14936
  function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
14696
14937
  var SCALE = 40;
14697
14938
  var HISTORY_SIZE = 32;
14939
+ var HOVER_ICON_OPACITY = 0.7;
14698
14940
  var structObjects = ['atoms', 'bonds', 'frags', 'sgroups', 'sgroupData', 'rgroups', 'rxnArrows', 'rxnPluses', 'enhancedFlags', 'simpleObjects', 'texts'];
14699
14941
  var highlightTargets = ['atoms', 'bonds', 'rxnArrows', 'rxnPluses', 'functionalGroups', 'frags', 'merge', 'rgroups', 'sgroups', 'sgroupData', 'enhancedFlags', 'simpleObjects', 'texts'];
14700
14942
  function selectStereoFlagsIfNecessary(atoms, expAtoms) {
@@ -14731,6 +14973,7 @@ var Editor$3 = function () {
14731
14973
  this.highlights = new Highlighter(this);
14732
14974
  this.renderAndRecoordinateStruct = this.renderAndRecoordinateStruct.bind(this);
14733
14975
  this.setOptions = this.setOptions.bind(this);
14976
+ this.hoverIcon = this.render.paper.text(0, 0, '').attr('font-size', options.fontsz).attr('opacity', HOVER_ICON_OPACITY);
14734
14977
  this.event = {
14735
14978
  message: new Subscription(),
14736
14979
  elementEdit: new PipelineSubscription(),
@@ -14747,7 +14990,8 @@ var Editor$3 = function () {
14747
14990
  dearomatizeStruct: new PipelineSubscription(),
14748
14991
  enhancedStereoEdit: new PipelineSubscription(),
14749
14992
  confirm: new PipelineSubscription(),
14750
- cursor: new PipelineSubscription()
14993
+ cursor: new PipelineSubscription(),
14994
+ showInfo: new PipelineSubscription()
14751
14995
  };
14752
14996
  domEventSetup(this, clientArea);
14753
14997
  }
@@ -14777,6 +15021,10 @@ var Editor$3 = function () {
14777
15021
  this._tool.cancel();
14778
15022
  }
14779
15023
  var tool = new tools[name](this, opts);
15024
+ var isAtomToolChosen = name === 'atom';
15025
+ if (!isAtomToolChosen) {
15026
+ this.hoverIcon.hide();
15027
+ }
14780
15028
  if (!tool || tool.isNotActiveTool) {
14781
15029
  return null;
14782
15030
  }
@@ -14793,8 +15041,8 @@ var Editor$3 = function () {
14793
15041
  value: function renderAndRecoordinateStruct(struct) {
14794
15042
  var action = fromNewCanvas(this.render.ctab, struct);
14795
15043
  this.update(action);
14796
- getStructCenter(this.render.ctab);
14797
- recoordinate(this);
15044
+ var structCenter = getStructCenter(this.render.ctab);
15045
+ recoordinate(this, structCenter);
14798
15046
  return this.render.ctab.molecule;
14799
15047
  }
14800
15048
  }, {
@@ -14843,8 +15091,8 @@ var Editor$3 = function () {
14843
15091
  }
14844
15092
  this.render.setZoom(value);
14845
15093
  var selection = this.selection();
14846
- getStructCenter(this.render.ctab, selection);
14847
- recoordinate(this);
15094
+ var structCenter = getStructCenter(this.render.ctab, selection);
15095
+ recoordinate(this, structCenter);
14848
15096
  this.render.update();
14849
15097
  return this.render.options.zoom;
14850
15098
  }
@@ -14889,13 +15137,35 @@ var Editor$3 = function () {
14889
15137
  }
14890
15138
  }, {
14891
15139
  key: "hover",
14892
- value: function hover(ci, newTool) {
15140
+ value: function hover(ci, newTool, event) {
14893
15141
  var tool = newTool || this._tool;
15142
+ var infoPanelData = null;
14894
15143
  if ('ci' in tool && (!ci || tool.ci.map !== ci.map || tool.ci.id !== ci.id)) {
14895
15144
  setHover(tool.ci, false, this.render);
14896
15145
  delete tool.ci;
14897
15146
  }
14898
15147
  if (ci && setHover(ci, true, this.render)) tool.ci = ci;
15148
+ if (!event) return;
15149
+ var checkFunctionGroupTypes = ['sgroups', 'functionalGroups'];
15150
+ var closestCollapsibleStructures = this.findItem(event, checkFunctionGroupTypes);
15151
+ if (closestCollapsibleStructures) {
15152
+ var _this$struct;
15153
+ var sGroup = (_this$struct = this.struct()) === null || _this$struct === void 0 ? void 0 : _this$struct.sgroups.get(closestCollapsibleStructures.id);
15154
+ if (sGroup && !sGroup.data.expanded) {
15155
+ var groupName = sGroup.data.name;
15156
+ var groupStruct = FunctionalGroup.getFunctionalGroupByName(groupName);
15157
+ infoPanelData = {
15158
+ groupStruct: groupStruct,
15159
+ event: event,
15160
+ sGroup: sGroup
15161
+ };
15162
+ }
15163
+ }
15164
+ if (infoPanelData) {
15165
+ this.event.showInfo.dispatch(infoPanelData);
15166
+ } else {
15167
+ this.event.showInfo.dispatch(null);
15168
+ }
14899
15169
  }
14900
15170
  }, {
14901
15171
  key: "update",
@@ -15082,7 +15352,12 @@ function domEventSetup(editor, clientArea) {
15082
15352
  }
15083
15353
  function recoordinate(editor, rp
15084
15354
  ) {
15085
- editor.render.setScrollOffset(0, 0);
15355
+ console.assert(rp, 'Reference point not specified');
15356
+ if (rp) {
15357
+ editor.render.setScrollOffset(rp.x, rp.y);
15358
+ } else {
15359
+ editor.render.setScrollOffset(0, 0);
15360
+ }
15086
15361
  }
15087
15362
  function getStructCenter(ReStruct, selection) {
15088
15363
  var bb = ReStruct.getVBoxObj(selection || {});
@@ -15124,11 +15399,12 @@ function setHover(ci, visible, render) {
15124
15399
  return true;
15125
15400
  }
15126
15401
 
15127
- var classes$D = {"isHidden":"ContextMenu-module_isHidden__eOjF4"};
15402
+ var classes$E = {"isHidden":"ContextMenu-module_isHidden__eOjF4"};
15128
15403
 
15129
15404
  var FGContextMenu = function FGContextMenu() {
15130
15405
  var _useAppContext = useAppContext(),
15131
15406
  getKetcherInstance = _useAppContext.getKetcherInstance;
15407
+ var dispatch = useDispatch();
15132
15408
  var handleExpand = function handleExpand() {
15133
15409
  var editor = getKetcherInstance().editor;
15134
15410
  var action = new Action();
@@ -15141,6 +15417,10 @@ var FGContextMenu = function FGContextMenu() {
15141
15417
  editor.update(action);
15142
15418
  setShowSGroupMenu(false);
15143
15419
  setTargetItems([]);
15420
+ highlightFG(dispatch, {
15421
+ group: null,
15422
+ id: null
15423
+ });
15144
15424
  };
15145
15425
  var handleRemove = function handleRemove() {
15146
15426
  var editor = getKetcherInstance().editor;
@@ -15222,7 +15502,7 @@ var FGContextMenu = function FGContextMenu() {
15222
15502
  onShow: function onShow(e) {
15223
15503
  return showMenu(e);
15224
15504
  },
15225
- className: clsx(_defineProperty({}, classes$D.isHidden, !showSGroupMenu)),
15505
+ className: clsx(_defineProperty({}, classes$E.isHidden, !showSGroupMenu)),
15226
15506
  children: [jsxs(MenuItem, {
15227
15507
  onClick: handleExpand,
15228
15508
  children: [targetItems.length && targetItems[0].isExpanded ? 'Contract ' : 'Expand ', "Abbreviation"]
@@ -15235,7 +15515,7 @@ var FGContextMenu = function FGContextMenu() {
15235
15515
  });
15236
15516
  };
15237
15517
 
15238
- 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"};
15518
+ 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"};
15239
15519
 
15240
15520
  var Cursor = function Cursor(_ref) {
15241
15521
  var Icon = _ref.Icon,
@@ -15307,38 +15587,269 @@ var Cursor = function Cursor(_ref) {
15307
15587
  });
15308
15588
  };
15309
15589
 
15310
- 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"];
15311
- 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; }
15312
- 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(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; }
15590
+ var _excluded$r = ["struct", "Tag"];
15313
15591
  function _createSuper$a(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$a(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
15314
15592
  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; } }
15315
- function setupEditor(editor, props) {
15316
- var oldProps = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
15317
- var struct = props.struct,
15318
- tool = props.tool,
15319
- toolOpts = props.toolOpts,
15320
- options = props.options;
15321
- if (struct !== oldProps.struct) editor.struct(struct);
15322
- if (tool !== oldProps.tool || toolOpts !== oldProps.toolOpts) {
15323
- editor.tool(tool, toolOpts);
15324
- if (toolOpts !== oldProps.toolOpts) {
15325
- editor.event.message.dispatch({
15326
- info: JSON.stringify(toolOpts)
15327
- });
15328
- }
15593
+ 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; }
15594
+ 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(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; }
15595
+ function prepareStruct(struct) {
15596
+ if (struct.sgroups.size > 0) {
15597
+ var newStruct = struct.clone();
15598
+ newStruct.sgroups["delete"](0);
15599
+ return newStruct;
15329
15600
  }
15330
- if (oldProps.options && options !== oldProps.options) editor.options(options);
15331
- Object.keys(editor.event).forEach(function (name) {
15332
- var eventName = "on".concat(upperFirst(name));
15333
- if (props[eventName] !== oldProps[eventName]) {
15334
- if (oldProps[eventName]) {
15335
- editor.event[name].remove(oldProps[eventName]);
15336
- }
15337
- if (props[eventName]) {
15338
- editor.event[name].add(props[eventName]);
15339
- }
15340
- }
15341
- });
15601
+ return struct;
15602
+ }
15603
+ var renderCache = new Map();
15604
+ function renderStruct(el, struct) {
15605
+ var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
15606
+ if (el && struct) {
15607
+ var _options$cachePrefix = options.cachePrefix,
15608
+ cachePrefix = _options$cachePrefix === void 0 ? '' : _options$cachePrefix;
15609
+ var cacheKey = "".concat(cachePrefix).concat(struct.name);
15610
+ if (renderCache.has(cacheKey)) {
15611
+ el.innerHTML = renderCache.get(cacheKey);
15612
+ return;
15613
+ }
15614
+ var preparedStruct = prepareStruct(struct);
15615
+ preparedStruct.initHalfBonds();
15616
+ preparedStruct.initNeighbors();
15617
+ preparedStruct.setImplicitHydrogen();
15618
+ preparedStruct.markFragments();
15619
+ var rnd = new Render(el, _objectSpread$E({
15620
+ autoScale: true
15621
+ }, options));
15622
+ rnd.setMolecule(preparedStruct);
15623
+ rnd.update(true, options.viewSz);
15624
+ renderCache.set(cacheKey, rnd.clientArea.innerHTML);
15625
+ }
15626
+ }
15627
+ var StructRender = function (_Component) {
15628
+ _inherits(StructRender, _Component);
15629
+ var _super = _createSuper$a(StructRender);
15630
+ function StructRender(props) {
15631
+ var _this;
15632
+ _classCallCheck(this, StructRender);
15633
+ _this = _super.call(this, props);
15634
+ _this.tagRef = createRef();
15635
+ return _this;
15636
+ }
15637
+ _createClass(StructRender, [{
15638
+ key: "shouldComponentUpdate",
15639
+ value: function shouldComponentUpdate(previousProps) {
15640
+ return Boolean(this.props.id && this.props.id !== previousProps.id);
15641
+ }
15642
+ }, {
15643
+ key: "update",
15644
+ value: function update() {
15645
+ var el = this.tagRef.current;
15646
+ var _this$props = this.props,
15647
+ struct = _this$props.struct,
15648
+ options = _this$props.options;
15649
+ var parsedStruct;
15650
+ if (!(struct instanceof Struct)) {
15651
+ try {
15652
+ var molSerialzer = new MolSerializer();
15653
+ parsedStruct = molSerialzer.deserialize(struct);
15654
+ } catch (e) {
15655
+ parsedStruct = null;
15656
+ }
15657
+ } else {
15658
+ parsedStruct = struct;
15659
+ }
15660
+ el === null || el === void 0 ? void 0 : el.childNodes.forEach(function (node) {
15661
+ node.remove();
15662
+ });
15663
+ renderStruct(el, parsedStruct, options);
15664
+ }
15665
+ }, {
15666
+ key: "componentDidMount",
15667
+ value: function componentDidMount() {
15668
+ this.update();
15669
+ }
15670
+ }, {
15671
+ key: "componentDidUpdate",
15672
+ value: function componentDidUpdate() {
15673
+ this.update();
15674
+ }
15675
+ }, {
15676
+ key: "render",
15677
+ value: function render() {
15678
+ var _this$props2 = this.props,
15679
+ struct = _this$props2.struct,
15680
+ _this$props2$Tag = _this$props2.Tag,
15681
+ Tag = _this$props2$Tag === void 0 ? 'div' : _this$props2$Tag,
15682
+ props = _objectWithoutProperties(_this$props2, _excluded$r);
15683
+ return jsx(Tag, _objectSpread$E(_objectSpread$E({
15684
+ ref: this.tagRef
15685
+ }, props), {}, {
15686
+ children: struct ? null : 'No molecule'
15687
+ }));
15688
+ }
15689
+ }]);
15690
+ return StructRender;
15691
+ }(Component);
15692
+
15693
+ var functionalGroupsSelector = function functionalGroupsSelector(state) {
15694
+ return state.functionalGroups.lib;
15695
+ };
15696
+ var functionGroupInfoSelector = function functionGroupInfoSelector(state) {
15697
+ return state.functionalGroups.functionalGroupInfo;
15698
+ };
15699
+
15700
+ var classes$C = {"infoPanel":"InfoPanel-module_infoPanel__irvZL"};
15701
+
15702
+ 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; }
15703
+ 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(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; }
15704
+ var HOVER_DELAY = 400;
15705
+ var HOVER_PANEL_PADDING = 20;
15706
+ function getSGroupFirstAtom(sGroup, render) {
15707
+ var _render$ctab$atoms, _render$ctab$atoms$ge;
15708
+ var firstSgroupAtom = sGroup.firstSgroupAtom;
15709
+ if (firstSgroupAtom) return firstSgroupAtom.pp;
15710
+ var _sGroup$atoms = _slicedToArray(sGroup.atoms, 1),
15711
+ firstAtomId = _sGroup$atoms[0];
15712
+ 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 Vec2(0, 0);
15713
+ }
15714
+ function getPanelPosition(clientX, clientY, render, sGroup) {
15715
+ var width = 0;
15716
+ var height = 0;
15717
+ var x = 0;
15718
+ var y = 0;
15719
+ if (sGroup) {
15720
+ var _render$clientArea, _render$clientArea2, _render$options$offse, _render$clientArea3, _render$options, _render$options$offse2, _render$clientArea4;
15721
+ var groupBoundingBox = sGroup.areas[0];
15722
+ var start = Scale.obj2scaled(groupBoundingBox.p0, render.options);
15723
+ var end = Scale.obj2scaled(groupBoundingBox.p1, render.options);
15724
+ width = end.x - start.x;
15725
+ height = end.y - start.y;
15726
+ var firstAtomPosition = getSGroupFirstAtom(sGroup, render);
15727
+ var panelPosition = Scale.obj2scaled(firstAtomPosition, {
15728
+ scale: render.options.scale * render.options.zoom
15729
+ });
15730
+ x = panelPosition.x - width / 2 - HOVER_PANEL_PADDING;
15731
+ y = panelPosition.y + HOVER_PANEL_PADDING;
15732
+ 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;
15733
+ var viewportLeftLimit = HOVER_PANEL_PADDING * 2 + width / 2;
15734
+ var viewportBottomLimit = (render === null || render === void 0 ? void 0 : (_render$clientArea2 = render.clientArea) === null || _render$clientArea2 === void 0 ? void 0 : _render$clientArea2.clientHeight) - height;
15735
+ if (clientX > viewportRightLimit) {
15736
+ x = panelPosition.x - width - HOVER_PANEL_PADDING;
15737
+ } else if (clientX < viewportLeftLimit) {
15738
+ x = panelPosition.x - HOVER_PANEL_PADDING;
15739
+ }
15740
+ if (clientY > viewportBottomLimit) {
15741
+ y = panelPosition.y - height - HOVER_PANEL_PADDING * 3;
15742
+ }
15743
+ 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);
15744
+ 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);
15745
+ x += scrollOffsetX;
15746
+ y += scrollOffsetY;
15747
+ }
15748
+ return [new Vec2(x, y), new Vec2(width, height)];
15749
+ }
15750
+ var InfoPanel = function InfoPanel(props) {
15751
+ var _sGroup$data;
15752
+ var _props$clientX = props.clientX,
15753
+ clientX = _props$clientX === void 0 ? 0 : _props$clientX,
15754
+ _props$clientY = props.clientY,
15755
+ clientY = _props$clientY === void 0 ? 0 : _props$clientY,
15756
+ render = props.render,
15757
+ className = props.className,
15758
+ groupStruct = props.groupStruct,
15759
+ sGroup = props.sGroup;
15760
+ var _useState = useState(null),
15761
+ _useState2 = _slicedToArray(_useState, 2),
15762
+ molecule = _useState2[0],
15763
+ setMolecule = _useState2[1];
15764
+ var childRef = useRef(null);
15765
+ var groupName = sGroup === null || sGroup === void 0 ? void 0 : (_sGroup$data = sGroup.data) === null || _sGroup$data === void 0 ? void 0 : _sGroup$data.name;
15766
+ var timer;
15767
+ useEffect(function () {
15768
+ if (groupStruct) {
15769
+ timer = setTimeout(function () {
15770
+ setMolecule(groupStruct.clone());
15771
+ }, HOVER_DELAY);
15772
+ } else {
15773
+ setMolecule(null);
15774
+ }
15775
+ return function () {
15776
+ return clearTimeout(timer);
15777
+ };
15778
+ }, [groupName]);
15779
+ var _getPanelPosition = getPanelPosition(clientX, clientY, render, sGroup),
15780
+ _getPanelPosition2 = _slicedToArray(_getPanelPosition, 2),
15781
+ position = _getPanelPosition2[0],
15782
+ size = _getPanelPosition2[1];
15783
+ var x = position.x,
15784
+ y = position.y;
15785
+ var width = size.x;
15786
+ var height = size.y;
15787
+ return molecule && jsx("div", {
15788
+ style: {
15789
+ left: x + 'px',
15790
+ top: y + 'px'
15791
+ },
15792
+ className: clsx(classes$C.infoPanel, className),
15793
+ children: jsx(StructRender, _objectSpread$D(_objectSpread$D({
15794
+ struct: molecule
15795
+ }, props), {}, {
15796
+ id: groupName,
15797
+ ref: childRef,
15798
+ options: _objectSpread$D(_objectSpread$D({}, render.options), {}, {
15799
+ autoScale: true,
15800
+ autoScaleMargin: 0,
15801
+ rescaleAmount: 1,
15802
+ cachePrefix: 'infoPanel',
15803
+ viewSz: new Vec2(width, height),
15804
+ width: width,
15805
+ height: height
15806
+ })
15807
+ }))
15808
+ });
15809
+ };
15810
+ var InfoPanel$1 = connect(function (store) {
15811
+ var _functionGroupInfoSel, _functionGroupInfoSel2, _functionGroupInfoSel3, _functionGroupInfoSel4, _functionGroupInfoSel5, _functionGroupInfoSel6, _store$editor, _store$editor$render, _store$editor$render$;
15812
+ return {
15813
+ clientX: ((_functionGroupInfoSel = functionGroupInfoSelector(store)) === null || _functionGroupInfoSel === void 0 ? void 0 : (_functionGroupInfoSel2 = _functionGroupInfoSel.event) === null || _functionGroupInfoSel2 === void 0 ? void 0 : _functionGroupInfoSel2.clientX) || 0,
15814
+ clientY: ((_functionGroupInfoSel3 = functionGroupInfoSelector(store)) === null || _functionGroupInfoSel3 === void 0 ? void 0 : (_functionGroupInfoSel4 = _functionGroupInfoSel3.event) === null || _functionGroupInfoSel4 === void 0 ? void 0 : _functionGroupInfoSel4.clientY) || 0,
15815
+ groupStruct: ((_functionGroupInfoSel5 = functionGroupInfoSelector(store)) === null || _functionGroupInfoSel5 === void 0 ? void 0 : _functionGroupInfoSel5.groupStruct) || null,
15816
+ sGroup: ((_functionGroupInfoSel6 = functionGroupInfoSelector(store)) === null || _functionGroupInfoSel6 === void 0 ? void 0 : _functionGroupInfoSel6.sGroup) || null,
15817
+ 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
15818
+ };
15819
+ })(InfoPanel);
15820
+
15821
+ 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"];
15822
+ 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; }
15823
+ 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(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; }
15824
+ function _createSuper$9(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$9(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
15825
+ 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; } }
15826
+ function setupEditor(editor, props) {
15827
+ var oldProps = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
15828
+ var struct = props.struct,
15829
+ tool = props.tool,
15830
+ toolOpts = props.toolOpts,
15831
+ options = props.options;
15832
+ if (struct !== oldProps.struct) editor.struct(struct);
15833
+ if (tool !== oldProps.tool || toolOpts !== oldProps.toolOpts) {
15834
+ editor.tool(tool, toolOpts);
15835
+ if (toolOpts !== oldProps.toolOpts) {
15836
+ editor.event.message.dispatch({
15837
+ info: JSON.stringify(toolOpts)
15838
+ });
15839
+ }
15840
+ }
15841
+ if (oldProps.options && options !== oldProps.options) editor.options(options);
15842
+ Object.keys(editor.event).forEach(function (name) {
15843
+ var eventName = "on".concat(upperFirst(name));
15844
+ if (props[eventName] !== oldProps[eventName]) {
15845
+ if (oldProps[eventName]) {
15846
+ editor.event[name].remove(oldProps[eventName]);
15847
+ }
15848
+ if (props[eventName]) {
15849
+ editor.event[name].add(props[eventName]);
15850
+ }
15851
+ }
15852
+ });
15342
15853
  }
15343
15854
  function removeEditorHandlers(editor, props) {
15344
15855
  Object.keys(editor.event).forEach(function (name) {
@@ -15348,13 +15859,15 @@ function removeEditorHandlers(editor, props) {
15348
15859
  }
15349
15860
  var StructEditor = function (_Component) {
15350
15861
  _inherits(StructEditor, _Component);
15351
- var _super = _createSuper$a(StructEditor);
15862
+ var _super = _createSuper$9(StructEditor);
15352
15863
  function StructEditor(props) {
15353
15864
  var _this;
15354
15865
  _classCallCheck(this, StructEditor);
15355
15866
  _this = _super.call(this, props);
15356
15867
  _this.state = {
15357
- enableCursor: false
15868
+ enableCursor: false,
15869
+ clientX: 0,
15870
+ clientY: 0
15358
15871
  };
15359
15872
  _this.editorRef = createRef();
15360
15873
  _this.logRef = createRef();
@@ -15374,7 +15887,7 @@ var StructEditor = function (_Component) {
15374
15887
  key: "componentDidMount",
15375
15888
  value: function componentDidMount() {
15376
15889
  var _this2 = this;
15377
- this.editor = new Editor$3(this.editorRef.current, _objectSpread$D({}, this.props.options));
15890
+ this.editor = new Editor$3(this.editorRef.current, _objectSpread$C({}, this.props.options));
15378
15891
  setupEditor(this.editor, this.props);
15379
15892
  if (this.props.onInit) this.props.onInit(this.editor);
15380
15893
  this.editor.event.message.add(function (msg) {
@@ -15386,15 +15899,15 @@ var StructEditor = function (_Component) {
15386
15899
  } catch (_unused) {
15387
15900
  el.innerHTML = msg.info;
15388
15901
  }
15389
- el.classList.add(classes$C.visible);
15902
+ el.classList.add(classes$D.visible);
15390
15903
  } else {
15391
- el.classList.remove(classes$C.visible);
15904
+ el.classList.remove(classes$D.visible);
15392
15905
  }
15393
15906
  });
15394
15907
  this.editor.event.cursor.add(function (csr) {
15395
15908
  switch (csr.status) {
15396
15909
  case 'enable':
15397
- _this2.editorRef.current.classList.add(classes$C.enableCursor);
15910
+ _this2.editorRef.current.classList.add(classes$D.enableCursor);
15398
15911
  var _this2$editorRef$curr = _this2.editorRef.current.getBoundingClientRect(),
15399
15912
  left = _this2$editorRef$curr.left,
15400
15913
  top = _this2$editorRef$curr.top,
@@ -15411,25 +15924,27 @@ var StructEditor = function (_Component) {
15411
15924
  }
15412
15925
  break;
15413
15926
  case 'move':
15414
- _this2.editorRef.current.classList.add(classes$C.enableCursor);
15927
+ _this2.editorRef.current.classList.add(classes$D.enableCursor);
15415
15928
  _this2.setState({
15416
- enableCursor: true
15929
+ enableCursor: true,
15930
+ clientX: clientX,
15931
+ clientY: clientY
15417
15932
  });
15418
15933
  break;
15419
15934
  case 'disable':
15420
- _this2.editorRef.current.classList.remove(classes$C.enableCursor);
15935
+ _this2.editorRef.current.classList.remove(classes$D.enableCursor);
15421
15936
  _this2.setState({
15422
15937
  enableCursor: false
15423
15938
  });
15424
15939
  break;
15425
15940
  case 'leave':
15426
- _this2.editorRef.current.classList.remove(classes$C.enableCursor);
15941
+ _this2.editorRef.current.classList.remove(classes$D.enableCursor);
15427
15942
  _this2.setState({
15428
15943
  enableCursor: false
15429
15944
  });
15430
15945
  break;
15431
15946
  case 'mouseover':
15432
- _this2.editorRef.current.classList.add(classes$C.enableCursor);
15947
+ _this2.editorRef.current.classList.add(classes$D.enableCursor);
15433
15948
  _this2.setState({
15434
15949
  enableCursor: true
15435
15950
  });
@@ -15473,10 +15988,11 @@ var StructEditor = function (_Component) {
15473
15988
  _this$props.onCipChange;
15474
15989
  var className = _this$props.className;
15475
15990
  _this$props.onConfirm;
15991
+ _this$props.onShowInfo;
15476
15992
  _this$props.showAttachmentPoints;
15477
- var props = _objectWithoutProperties(_this$props, _excluded$r);
15478
- return jsxs(Tag, _objectSpread$D(_objectSpread$D({
15479
- className: clsx(classes$C.canvas, className),
15993
+ var props = _objectWithoutProperties(_this$props, _excluded$q);
15994
+ return jsxs(Tag, _objectSpread$C(_objectSpread$C({
15995
+ className: clsx(classes$D.canvas, className),
15480
15996
  onMouseDown: function onMouseDown(event) {
15481
15997
  return event.preventDefault();
15482
15998
  }
@@ -15489,7 +16005,7 @@ var StructEditor = function (_Component) {
15489
16005
  holdToDisplay: -1,
15490
16006
  children: [jsx("div", {
15491
16007
  ref: this.editorRef,
15492
- className: clsx(classes$C.intermediateCanvas),
16008
+ className: clsx(classes$D.intermediateCanvas),
15493
16009
  onMouseDown: function onMouseDown(event) {
15494
16010
  return event.preventDefault();
15495
16011
  }
@@ -15498,13 +16014,13 @@ var StructEditor = function (_Component) {
15498
16014
  PressedIcon: SvgCompressedHand,
15499
16015
  enableHandTool: this.state.enableCursor
15500
16016
  }), jsx("div", {
15501
- className: classes$C.measureLog,
16017
+ className: classes$D.measureLog,
15502
16018
  ref: this.logRef
15503
16019
  }), indigoVerification && jsx("div", {
15504
- className: classes$C.spinnerOverlay,
16020
+ className: classes$D.spinnerOverlay,
15505
16021
  children: jsx(LoadingCircles, {})
15506
16022
  })]
15507
- }), jsx(FGContextMenu, {})]
16023
+ }), jsx(InfoPanel$1, _objectSpread$C(_objectSpread$C({}, this.state), this.props)), jsx(FGContextMenu, {})]
15508
16024
  }));
15509
16025
  }
15510
16026
  }]);
@@ -15697,19 +16213,19 @@ var ErrorPopover = function ErrorPopover(_ref) {
15697
16213
  });
15698
16214
  };
15699
16215
 
15700
- 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"};
16216
+ 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"};
15701
16217
 
15702
- var _excluded$q = ["schema", "value", "onChange", "type"],
15703
- _excluded2$5 = ["schema", "value", "onChange"],
16218
+ var _excluded$p = ["schema", "value", "onChange", "type", "isFocused"],
16219
+ _excluded2$4 = ["schema", "value", "onChange"],
15704
16220
  _excluded3$1 = ["schema", "value", "onChange"],
15705
16221
  _excluded4$1 = ["schema", "value", "selected", "onSelect", "type", "checked"],
15706
16222
  _excluded5$1 = ["value", "onChange", "name"],
15707
16223
  _excluded6 = ["children", "onChange", "style"],
15708
16224
  _excluded7 = ["children", "onChange"];
15709
- function _createSuper$9(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$9(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
15710
- 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; } }
15711
- 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; }
15712
- 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(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; }
16225
+ function _createSuper$8(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$8(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
16226
+ 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; } }
16227
+ 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; }
16228
+ 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(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; }
15713
16229
  function GenericInput(_ref) {
15714
16230
  _ref.schema;
15715
16231
  var _ref$value = _ref.value,
@@ -15717,14 +16233,21 @@ function GenericInput(_ref) {
15717
16233
  onChange = _ref.onChange,
15718
16234
  _ref$type = _ref.type,
15719
16235
  type = _ref$type === void 0 ? 'text' : _ref$type,
15720
- props = _objectWithoutProperties(_ref, _excluded$q);
16236
+ _ref$isFocused = _ref.isFocused,
16237
+ isFocused = _ref$isFocused === void 0 ? false : _ref$isFocused,
16238
+ props = _objectWithoutProperties(_ref, _excluded$p);
16239
+ var inputRef = useRef(null);
16240
+ useEffect(function () {
16241
+ if (inputRef.current && isFocused) inputRef.current.focus();
16242
+ }, [inputRef, isFocused]);
15721
16243
  return jsxs(Fragment, {
15722
- children: [jsx("input", _objectSpread$C({
16244
+ children: [jsx("input", _objectSpread$B({
15723
16245
  type: type,
15724
16246
  value: value,
15725
16247
  onInput: onChange,
15726
16248
  onChange: onChange,
15727
- className: classes$A.input
16249
+ className: clsx(classes$A.input, classes$A.genericInput),
16250
+ ref: inputRef
15728
16251
  }, props)), type === 'checkbox' && jsx("span", {
15729
16252
  className: classes$A.checkbox
15730
16253
  }), type === 'radio' && jsx("span", {
@@ -15742,8 +16265,8 @@ function TextArea(_ref2) {
15742
16265
  _ref2.schema;
15743
16266
  var value = _ref2.value,
15744
16267
  onChange = _ref2.onChange,
15745
- rest = _objectWithoutProperties(_ref2, _excluded2$5);
15746
- return jsx("textarea", _objectSpread$C({
16268
+ rest = _objectWithoutProperties(_ref2, _excluded2$4);
16269
+ return jsx("textarea", _objectSpread$B({
15747
16270
  value: value,
15748
16271
  onInput: onChange
15749
16272
  }, rest));
@@ -15759,11 +16282,12 @@ function CheckBox(_ref3) {
15759
16282
  rest = _objectWithoutProperties(_ref3, _excluded3$1);
15760
16283
  return jsxs("div", {
15761
16284
  className: classes$A.fieldSetItem,
15762
- children: [jsx("input", _objectSpread$C({
16285
+ children: [jsx("input", _objectSpread$B({
15763
16286
  type: "checkbox",
15764
16287
  checked: value,
15765
16288
  onClick: onChange,
15766
- onChange: onChange
16289
+ onChange: onChange,
16290
+ className: classes$A.input
15767
16291
  }, rest)), jsx("span", {
15768
16292
  className: classes$A.checkbox
15769
16293
  })]
@@ -15813,16 +16337,16 @@ function FieldSet(_ref5) {
15813
16337
  rest = _objectWithoutProperties(_ref5, _excluded4$1);
15814
16338
  return jsx("fieldset", {
15815
16339
  onClick: onSelect,
15816
- className: "radio",
15817
16340
  children: enumSchema(schema, function (title, val) {
15818
16341
  return jsx("li", {
15819
16342
  className: classes$A.fieldSetItem,
15820
16343
  children: jsxs("label", {
15821
16344
  className: classes$A.fieldSetLabel,
15822
- children: [jsx("input", _objectSpread$C({
16345
+ children: [jsx("input", _objectSpread$B({
15823
16346
  type: type,
15824
16347
  defaultChecked: type === 'radio' ? selected(val, checked) : selected(val, value),
15825
- value: _typeof(val) !== 'object' && val
16348
+ value: _typeof(val) !== 'object' && val,
16349
+ className: classes$A.input
15826
16350
  }, rest)), type === 'checkbox' && jsx("span", {
15827
16351
  className: classes$A.checkbox
15828
16352
  }), type === 'radio' && jsx("span", {
@@ -15852,7 +16376,7 @@ function Slider(_ref6) {
15852
16376
  rest = _objectWithoutProperties(_ref6, _excluded5$1);
15853
16377
  return jsxs("div", {
15854
16378
  className: classes$A.slider,
15855
- children: [jsx("input", _objectSpread$C({
16379
+ children: [jsx("input", _objectSpread$B({
15856
16380
  type: "checkbox",
15857
16381
  checked: value,
15858
16382
  onClick: onChange,
@@ -15885,7 +16409,7 @@ function inputCtrl(component, schema, _onChange) {
15885
16409
  type: 'text'
15886
16410
  };
15887
16411
  }
15888
- return _objectSpread$C({
16412
+ return _objectSpread$B({
15889
16413
  onChange: function onChange(ev) {
15890
16414
  var val = !component.val ? ev : component.val(ev, schema);
15891
16415
  _onChange(val);
@@ -15955,7 +16479,7 @@ function shallowCompare(a, b) {
15955
16479
  }
15956
16480
  var Input = function (_Component) {
15957
16481
  _inherits(Input, _Component);
15958
- var _super = _createSuper$9(Input);
16482
+ var _super = _createSuper$8(Input);
15959
16483
  function Input() {
15960
16484
  _classCallCheck(this, Input);
15961
16485
  return _super.apply(this, arguments);
@@ -15981,7 +16505,7 @@ var Input = function (_Component) {
15981
16505
  _this$props.onChange;
15982
16506
  var props = _objectWithoutProperties(_this$props, _excluded7);
15983
16507
  var Component = this.component;
15984
- return jsx(Component, _objectSpread$C(_objectSpread$C({}, this.ctrl), props));
16508
+ return jsx(Component, _objectSpread$B(_objectSpread$B({}, this.ctrl), props));
15985
16509
  }
15986
16510
  }]);
15987
16511
  return Input;
@@ -16064,17 +16588,18 @@ function fileOpener(server) {
16064
16588
  });
16065
16589
  }
16066
16590
  function throughFileReader(file) {
16591
+ var isCDX = file.name.endsWith('cdx');
16067
16592
  return new Promise(function (resolve, reject) {
16068
16593
  var rd = new FileReader();
16069
16594
  rd.onload = function () {
16070
- var content = rd.result;
16595
+ var content = isCDX ? rd.result.slice(37) : rd.result;
16071
16596
  if (file.msClose) file.msClose();
16072
16597
  resolve(content);
16073
16598
  };
16074
16599
  rd.onerror = function (event) {
16075
16600
  reject(event);
16076
16601
  };
16077
- rd.readAsText(file, 'UTF-8');
16602
+ isCDX ? rd.readAsDataURL(file) : rd.readAsText(file, 'UTF-8');
16078
16603
  });
16079
16604
  }
16080
16605
  function throughFileSystemObject(fso, file) {
@@ -16099,18 +16624,28 @@ function greekify(str) {
16099
16624
  });
16100
16625
  }
16101
16626
  function filterLib(lib, filter$1) {
16102
- var re = new RegExp(escapeRegExp(greekify(filter$1)), 'i');
16627
+ console.warn('Filter', filter$1);
16628
+ var trimmedFilter = filter$1.trim();
16629
+ var re = new RegExp(escapeRegExp(greekify(trimmedFilter)), 'i');
16103
16630
  return flow(filter(function (item) {
16104
- return !filter$1 || re.test(greekify(item.struct.name)) || re.test(greekify(item.props.group));
16631
+ return !trimmedFilter || re.test(greekify(item.struct.name)) || re.test(greekify(item.props.group));
16105
16632
  }), reduce(function (res, item) {
16106
16633
  if (!res[item.props.group]) res[item.props.group] = [item];else res[item.props.group].push(item);
16107
16634
  return res;
16108
16635
  }, {}))(lib);
16109
16636
  }
16110
16637
  function filterFGLib(lib, filter$1) {
16111
- var re = new RegExp(escapeRegExp(greekify(filter$1)), 'i');
16638
+ console.warn('Filter', filter$1);
16639
+ var trimmedFilter = filter$1.trim();
16640
+ var re = new RegExp(escapeRegExp(greekify(trimmedFilter)), 'i');
16641
+ var searchFunction = function searchFunction(item) {
16642
+ var fields = [item.struct.name, item.props.abbreviation, item.props.name].filter(Boolean);
16643
+ return fields.some(function (field) {
16644
+ return re.test(greekify(field));
16645
+ });
16646
+ };
16112
16647
  return flow(filter(function (item) {
16113
- return !filter$1 || re.test(greekify(item.struct.name));
16648
+ return !trimmedFilter || searchFunction(item);
16114
16649
  }), reduce(function (res, item) {
16115
16650
  if (!res[item.props.group]) res[item.props.group] = [item];else res[item.props.group].push(item);
16116
16651
  return res;
@@ -16127,18 +16662,18 @@ var getSelectOptionsFromSchema = function getSelectOptionsFromSchema(schema) {
16127
16662
  }, []);
16128
16663
  };
16129
16664
 
16130
- var _excluded$p = ["schema", "result", "customValid"],
16131
- _excluded2$4 = ["labelPos", "title", "children"],
16665
+ var _excluded$o = ["schema", "result", "customValid"],
16666
+ _excluded2$3 = ["labelPos", "title", "children"],
16132
16667
  _excluded3 = ["name", "onChange", "component", "labelPos", "className"],
16133
16668
  _excluded4 = ["dataError"],
16134
16669
  _excluded5 = ["title", "name", "schema"];
16135
- 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; }
16136
- 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(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; }
16137
- function _createSuper$8(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$8(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
16138
- 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; } }
16670
+ 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; }
16671
+ 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(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; }
16672
+ function _createSuper$7(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$7(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
16673
+ 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; } }
16139
16674
  var Form = function (_Component) {
16140
16675
  _inherits(Form, _Component);
16141
- var _super = _createSuper$8(Form);
16676
+ var _super = _createSuper$7(Form);
16142
16677
  function Form(props) {
16143
16678
  var _this;
16144
16679
  _classCallCheck(this, Form);
@@ -16153,7 +16688,7 @@ var Form = function (_Component) {
16153
16688
  valid = _this$schema$serializ.valid,
16154
16689
  errors = _this$schema$serializ.errors;
16155
16690
  var errs = getErrorsObj(errors);
16156
- var initialState = _objectSpread$B(_objectSpread$B({}, init), {}, {
16691
+ var initialState = _objectSpread$A(_objectSpread$A({}, init), {}, {
16157
16692
  init: true
16158
16693
  });
16159
16694
  onUpdate(initialState, valid, errs);
@@ -16167,7 +16702,7 @@ var Form = function (_Component) {
16167
16702
  schema = _this$props2.schema,
16168
16703
  result = _this$props2.result;
16169
16704
  _this$props2.customValid;
16170
- var rest = _objectWithoutProperties(_this$props2, _excluded$p);
16705
+ var rest = _objectWithoutProperties(_this$props2, _excluded$o);
16171
16706
  if (schema.key && schema.key !== prevProps.schema.key) {
16172
16707
  this.schema = propSchema(schema, rest);
16173
16708
  this.schema.serialize(result);
@@ -16237,8 +16772,8 @@ function Label(_ref) {
16237
16772
  var labelPos = _ref.labelPos,
16238
16773
  title = _ref.title,
16239
16774
  children = _ref.children,
16240
- props = _objectWithoutProperties(_ref, _excluded2$4);
16241
- return jsxs("label", _objectSpread$B(_objectSpread$B({}, props), {}, {
16775
+ props = _objectWithoutProperties(_ref, _excluded2$3);
16776
+ return jsxs("label", _objectSpread$A(_objectSpread$A({}, props), {}, {
16242
16777
  children: [title && labelPos !== 'after' ? jsx("span", {
16243
16778
  children: title
16244
16779
  }) : '', children, title && labelPos === 'after' ? jsx("span", {
@@ -16271,10 +16806,10 @@ function Field(props) {
16271
16806
  dataError = _stateStore$field.dataError,
16272
16807
  fieldOpts = _objectWithoutProperties(_stateStore$field, _excluded4);
16273
16808
  var Component = component;
16274
- var formField = component ? jsx(Component, _objectSpread$B(_objectSpread$B({
16809
+ var formField = component ? jsx(Component, _objectSpread$A(_objectSpread$A({
16275
16810
  name: name,
16276
16811
  schema: desc
16277
- }, fieldOpts), rest)) : jsx(Input, _objectSpread$B(_objectSpread$B({
16812
+ }, fieldOpts), rest)) : jsx(Input, _objectSpread$A(_objectSpread$A({
16278
16813
  name: name,
16279
16814
  schema: desc
16280
16815
  }, fieldOpts), rest));
@@ -16311,7 +16846,7 @@ var SelectOneOf = function SelectOneOf(props) {
16311
16846
  selectDesc["enum"].push(item);
16312
16847
  selectDesc.enumNames.push(schema[item].title || item);
16313
16848
  });
16314
- return jsx(Field, _objectSpread$B(_objectSpread$B({
16849
+ return jsx(Field, _objectSpread$A(_objectSpread$A({
16315
16850
  name: name,
16316
16851
  options: getSelectOptionsFromSchema(selectDesc),
16317
16852
  title: title
@@ -16334,7 +16869,7 @@ function propSchema(schema, _ref2) {
16334
16869
  schema = Object.assign({}, schema);
16335
16870
  schema.properties = Object.keys(customValid).reduce(function (res, prop) {
16336
16871
  ajv.addFormat(customValid[prop].name, customValid[prop]);
16337
- res[prop] = _objectSpread$B({
16872
+ res[prop] = _objectSpread$A({
16338
16873
  format: prop
16339
16874
  }, res[prop]);
16340
16875
  return res;
@@ -16496,9 +17031,9 @@ var ColorPicker = function ColorPicker(props) {
16496
17031
 
16497
17032
  var styles$a = {"measureInput":"measure-input-module_measureInput__uZQ-j","select":"measure-input-module_select__1ZFmv"};
16498
17033
 
16499
- var _excluded$o = ["schema", "value", "onChange", "name"];
16500
- 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; }
16501
- 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(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; }
17034
+ var _excluded$n = ["schema", "value", "onChange", "name"];
17035
+ 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; }
17036
+ 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(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; }
16502
17037
  var selectOptions$1 = getSelectOptionsFromSchema({
16503
17038
  "enum": ['cm', 'px', 'pt', 'inch']
16504
17039
  });
@@ -16507,7 +17042,7 @@ var MeasureInput = function MeasureInput(_ref) {
16507
17042
  value = _ref.value,
16508
17043
  onChange = _ref.onChange,
16509
17044
  name = _ref.name,
16510
- rest = _objectWithoutProperties(_ref, _excluded$o);
17045
+ rest = _objectWithoutProperties(_ref, _excluded$n);
16511
17046
  var _useState = useState('px'),
16512
17047
  _useState2 = _slicedToArray(_useState, 2),
16513
17048
  measure = _useState2[0],
@@ -16541,7 +17076,7 @@ var MeasureInput = function MeasureInput(_ref) {
16541
17076
  calcValue();
16542
17077
  }, [value, measure, calcValue]);
16543
17078
  var desc = schema || schema.properties[name];
16544
- return jsxs("div", _objectSpread$A(_objectSpread$A({
17079
+ return jsxs("div", _objectSpread$z(_objectSpread$z({
16545
17080
  className: styles$a.measureInput
16546
17081
  }, rest), {}, {
16547
17082
  children: [jsx("span", {
@@ -16577,14 +17112,14 @@ function convertValue(value, measureFrom, measureTo) {
16577
17112
 
16578
17113
  var classes$x = {"button-common-styles":"buttons-module_button-common-styles__qWDOz","scrollbar":"buttons-module_scrollbar__SpaVV","openButton":"buttons-module_openButton__wErm9"};
16579
17114
 
16580
- var _excluded$n = ["children", "type", "server", "className"];
16581
- 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; }
16582
- 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(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; }
16583
- function _createSuper$7(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$7(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
16584
- 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; } }
17115
+ var _excluded$m = ["children", "type", "server", "className"];
17116
+ 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; }
17117
+ 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(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; }
17118
+ function _createSuper$6(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$6(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
17119
+ 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; } }
16585
17120
  var OpenButton = function (_Component) {
16586
17121
  _inherits(OpenButton, _Component);
16587
- var _super = _createSuper$7(OpenButton);
17122
+ var _super = _createSuper$6(OpenButton);
16588
17123
  function OpenButton(props) {
16589
17124
  var _this;
16590
17125
  _classCallCheck(this, OpenButton);
@@ -16624,8 +17159,8 @@ var OpenButton = function (_Component) {
16624
17159
  type = _this$props2.type;
16625
17160
  _this$props2.server;
16626
17161
  var className = _this$props2.className,
16627
- props = _objectWithoutProperties(_this$props2, _excluded$n);
16628
- return jsxs("button", _objectSpread$z(_objectSpread$z({
17162
+ props = _objectWithoutProperties(_this$props2, _excluded$m);
17163
+ return jsxs("button", _objectSpread$y(_objectSpread$y({
16629
17164
  onClick: function onClick() {
16630
17165
  return _this2.btn.click();
16631
17166
  },
@@ -16647,8 +17182,8 @@ var OpenButton = function (_Component) {
16647
17182
  return OpenButton;
16648
17183
  }(Component);
16649
17184
 
16650
- 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; }
16651
- 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(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; }
17185
+ 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; }
17186
+ 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(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; }
16652
17187
  var SaveButton$1 = function SaveButton(props) {
16653
17188
  var noop = function noop() {
16654
17189
  return null;
@@ -16702,7 +17237,7 @@ var SaveButton$1 = function SaveButton(props) {
16702
17237
  onError(error);
16703
17238
  });
16704
17239
  };
16705
- return jsx("button", _objectSpread$y(_objectSpread$y({
17240
+ return jsx("button", _objectSpread$x(_objectSpread$x({
16706
17241
  className: className,
16707
17242
  onClick: function onClick(event) {
16708
17243
  save(event);
@@ -16881,9 +17416,9 @@ var fieldGroups = {
16881
17416
  showLoopIds: 'Options for Debugging'
16882
17417
  };
16883
17418
 
16884
- var _excluded$m = ["initState", "formState", "server", "onOpenFile", "onReset", "appOpts"];
16885
- 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; }
16886
- 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(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; }
17419
+ var _excluded$l = ["initState", "formState", "server", "onOpenFile", "onReset", "appOpts"];
17420
+ 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; }
17421
+ 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(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; }
16887
17422
  var defaultSettings = getDefaultOptions();
16888
17423
  var HeaderContent$1 = function HeaderContent(_ref) {
16889
17424
  var server = _ref.server,
@@ -16934,7 +17469,7 @@ var SettingsDialog = function SettingsDialog(props) {
16934
17469
  onOpenFile = props.onOpenFile,
16935
17470
  onReset = props.onReset,
16936
17471
  appOpts = props.appOpts,
16937
- prop = _objectWithoutProperties(props, _excluded$m);
17472
+ prop = _objectWithoutProperties(props, _excluded$l);
16938
17473
  var _useState = useState(new Set()),
16939
17474
  _useState2 = _slicedToArray(_useState, 2),
16940
17475
  changedGroups = _useState2[0],
@@ -17128,7 +17663,7 @@ var SettingsDialog = function SettingsDialog(props) {
17128
17663
  formState: formState,
17129
17664
  initState: initState
17130
17665
  }),
17131
- children: jsx(Form$1, _objectSpread$x(_objectSpread$x({
17666
+ children: jsx(Form$1, _objectSpread$w(_objectSpread$w({
17132
17667
  schema: optionsSchema,
17133
17668
  init: initState
17134
17669
  }, formState), {}, {
@@ -17156,6 +17691,7 @@ var mapDispatchToProps$b = function mapDispatchToProps(dispatch, ownProps) {
17156
17691
  result: JSON.parse(newOpts)
17157
17692
  }));
17158
17693
  } catch (ex) {
17694
+ console.info('Bad file');
17159
17695
  }
17160
17696
  },
17161
17697
  onReset: function onReset() {
@@ -17199,9 +17735,9 @@ function ErrorsCheck(props) {
17199
17735
 
17200
17736
  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"};
17201
17737
 
17202
- var _excluded$l = ["formState", "checkState", "onCheck", "onApply", "onCancel"];
17203
- 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; }
17204
- 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(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; }
17738
+ var _excluded$k = ["formState", "checkState", "onCheck", "onApply", "onCancel"];
17739
+ 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; }
17740
+ 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(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; }
17205
17741
  var checkSchema = {
17206
17742
  title: 'Check',
17207
17743
  type: 'object',
@@ -17259,7 +17795,7 @@ function CheckDialog(props) {
17259
17795
  onCheck = props.onCheck,
17260
17796
  onApply = props.onApply,
17261
17797
  onCancel = props.onCancel,
17262
- restProps = _objectWithoutProperties(props, _excluded$l);
17798
+ restProps = _objectWithoutProperties(props, _excluded$k);
17263
17799
  var _formState$result = formState.result,
17264
17800
  result = _formState$result === void 0 ? checkState : _formState$result,
17265
17801
  moleculeErrors = formState.moleculeErrors;
@@ -17295,7 +17831,7 @@ function CheckDialog(props) {
17295
17831
  return jsx(Dialog, {
17296
17832
  title: "Structure Check",
17297
17833
  className: style.dialog_body,
17298
- params: _objectSpread$w(_objectSpread$w({}, restProps), {}, {
17834
+ params: _objectSpread$v(_objectSpread$v({}, restProps), {}, {
17299
17835
  onCancel: onCancel
17300
17836
  }),
17301
17837
  buttons: [],
@@ -17307,7 +17843,7 @@ function CheckDialog(props) {
17307
17843
  isCheckedWithNewSettings: isCheckedWithNewSettings
17308
17844
  }),
17309
17845
  withDivider: true,
17310
- children: jsx(Form$1, _objectSpread$w(_objectSpread$w({
17846
+ children: jsx(Form$1, _objectSpread$v(_objectSpread$v({
17311
17847
  schema: checkSchema,
17312
17848
  init: checkState
17313
17849
  }, formState), {}, {
@@ -17433,9 +17969,9 @@ function FrozenInput(_ref) {
17433
17969
 
17434
17970
  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"};
17435
17971
 
17436
- var _excluded$k = ["values", "round", "loading", "onAnalyse", "onChangeRound"];
17437
- function _createSuper$6(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$6(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
17438
- 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; } }
17972
+ var _excluded$j = ["values", "round", "loading", "onAnalyse", "onChangeRound"];
17973
+ function _createSuper$5(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$5(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
17974
+ 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; } }
17439
17975
  function roundOff(value, round) {
17440
17976
  if (typeof value === 'number') return value.toFixed(round);
17441
17977
  return value.replace(/[0-9]*\.[0-9]+/g, function (str) {
@@ -17447,7 +17983,7 @@ var selectOptions = getSelectOptionsFromSchema({
17447
17983
  });
17448
17984
  var AnalyseDialog = function (_Component) {
17449
17985
  _inherits(AnalyseDialog, _Component);
17450
- var _super = _createSuper$6(AnalyseDialog);
17986
+ var _super = _createSuper$5(AnalyseDialog);
17451
17987
  function AnalyseDialog() {
17452
17988
  _classCallCheck(this, AnalyseDialog);
17453
17989
  return _super.apply(this, arguments);
@@ -17466,7 +18002,7 @@ var AnalyseDialog = function (_Component) {
17466
18002
  loading = _this$props.loading;
17467
18003
  _this$props.onAnalyse;
17468
18004
  var onChangeRound = _this$props.onChangeRound,
17469
- props = _objectWithoutProperties(_this$props, _excluded$k);
18005
+ props = _objectWithoutProperties(_this$props, _excluded$j);
17470
18006
  return jsx(Dialog, {
17471
18007
  title: "Calculated Values",
17472
18008
  className: classes$u.analyse,
@@ -17561,80 +18097,6 @@ var mapDispatchToProps$9 = function mapDispatchToProps(dispatch) {
17561
18097
  };
17562
18098
  var Analyse = connect(mapStateToProps$c, mapDispatchToProps$9)(AnalyseDialog);
17563
18099
 
17564
- var _excluded$j = ["struct", "Tag"];
17565
- function _createSuper$5(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$5(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
17566
- 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; } }
17567
- 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; }
17568
- 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(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; }
17569
- function renderStruct(el, struct) {
17570
- var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
17571
- if (el) {
17572
- if (struct) {
17573
- struct.initHalfBonds();
17574
- struct.initNeighbors();
17575
- struct.setImplicitHydrogen();
17576
- struct.markFragments();
17577
- var rnd = new Render(el, _objectSpread$v({
17578
- autoScale: true
17579
- }, options));
17580
- rnd.setMolecule(struct);
17581
- rnd.update();
17582
- }
17583
- }
17584
- }
17585
- var StructRender = function (_Component) {
17586
- _inherits(StructRender, _Component);
17587
- var _super = _createSuper$5(StructRender);
17588
- function StructRender(props) {
17589
- var _this;
17590
- _classCallCheck(this, StructRender);
17591
- _this = _super.call(this, props);
17592
- _this.tagRef = createRef();
17593
- return _this;
17594
- }
17595
- _createClass(StructRender, [{
17596
- key: "shouldComponentUpdate",
17597
- value: function shouldComponentUpdate() {
17598
- return false;
17599
- }
17600
- }, {
17601
- key: "componentDidMount",
17602
- value: function componentDidMount() {
17603
- var el = this.tagRef.current;
17604
- var _this$props = this.props,
17605
- struct = _this$props.struct,
17606
- options = _this$props.options;
17607
- var parsedStruct;
17608
- if (!(struct instanceof Struct)) {
17609
- try {
17610
- var molSerialzer = new MolSerializer();
17611
- parsedStruct = molSerialzer.deserialize(struct);
17612
- } catch (e) {
17613
- parsedStruct = null;
17614
- }
17615
- } else {
17616
- parsedStruct = struct;
17617
- }
17618
- renderStruct(el, parsedStruct, options);
17619
- }
17620
- }, {
17621
- key: "render",
17622
- value: function render() {
17623
- var _this$props2 = this.props,
17624
- struct = _this$props2.struct,
17625
- _this$props2$Tag = _this$props2.Tag,
17626
- Tag = _this$props2$Tag === void 0 ? 'div' : _this$props2$Tag,
17627
- props = _objectWithoutProperties(_this$props2, _excluded$j);
17628
- return jsx(Tag, _objectSpread$v(_objectSpread$v({
17629
- ref: this.tagRef
17630
- }, props), {}, {
17631
- children: struct ? null : 'No molecule'
17632
- }));
17633
- }
17634
- }]);
17635
- return StructRender;
17636
- }(Component);
17637
-
17638
18100
  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"};
17639
18101
 
17640
18102
  var DialogActionButton = function DialogActionButton(_ref) {
@@ -17654,7 +18116,7 @@ var DialogActionButton = function DialogActionButton(_ref) {
17654
18116
  };
17655
18117
 
17656
18118
  var _excluded$i = ["file", "structStr", "fragment", "version", "imagoVersions", "onOk"],
17657
- _excluded2$3 = ["onRecognize", "isFragment", "onImage", "onChangeImago"];
18119
+ _excluded2$2 = ["onRecognize", "isFragment", "onImage", "onChangeImago"];
17658
18120
  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; }
17659
18121
  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(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; }
17660
18122
  function isImage(file) {
@@ -17705,7 +18167,7 @@ function RecognizeDialog(prop) {
17705
18167
  partProps.isFragment;
17706
18168
  var onImage = partProps.onImage,
17707
18169
  onChangeImago = partProps.onChangeImago,
17708
- props = _objectWithoutProperties(partProps, _excluded2$3);
18170
+ props = _objectWithoutProperties(partProps, _excluded2$2);
17709
18171
  var _useState = useState(true),
17710
18172
  _useState2 = _slicedToArray(_useState, 2),
17711
18173
  canPreviewImage = _useState2[0],
@@ -17924,7 +18386,7 @@ var MiewDialog = function MiewDialog(_ref) {
17924
18386
  var onMiewInit = useCallback(function (miew) {
17925
18387
  miewRef.current = miew;
17926
18388
  var factory = new FormatterFactory(server);
17927
- var service = factory.create('cml');
18389
+ var service = factory.create(SupportedFormat.cml);
17928
18390
  service.getStructureFromStructAsync(struct).then(function (res) {
17929
18391
  return miew.load(res, {
17930
18392
  sourceType: 'immediate',
@@ -17933,7 +18395,7 @@ var MiewDialog = function MiewDialog(_ref) {
17933
18395
  }).then(function () {
17934
18396
  return miew.setOptions(miewOpts);
17935
18397
  })["catch"](function (ex) {
17936
- return (void 0);
18398
+ return console.error(ex.message);
17937
18399
  });
17938
18400
  }, [miewOpts, server, struct]);
17939
18401
  var exportCML = useCallback(function () {
@@ -19164,7 +19626,8 @@ var SaveDialog = function (_Component) {
19164
19626
  _this.isRxn = _this.props.struct.hasRxnArrow();
19165
19627
  _this.textAreaRef = createRef();
19166
19628
  var formats = [_this.isRxn ? 'rxn' : 'mol', 'smiles', 'ket'];
19167
- if (_this.props.server) formats.push(_this.isRxn ? 'rxnV3000' : 'molV3000', 'smilesExt', 'smarts', 'inChI', 'inChIAuxInfo', 'cml', 'svg', 'png', 'cdxml');
19629
+ if (_this.props.server) formats.push(_this.isRxn ? 'rxnV3000' : 'molV3000', 'smilesExt', 'smarts', 'inChI', 'inChIAuxInfo', 'cml', 'svg', 'png', 'cdxml'
19630
+ );
19168
19631
  _this.saveSchema = saveSchema;
19169
19632
  _this.saveSchema.properties.format = Object.assign(_this.saveSchema.properties.format, {
19170
19633
  "enum": formats,
@@ -20289,51 +20752,27 @@ var Rgroup = connect(function (store) {
20289
20752
 
20290
20753
  var classes$9 = {"button-common-styles":"sgroup-module_button-common-styles__MAeEP","scrollbar":"sgroup-module_scrollbar__T3fpf","sgroup":"sgroup-module_sgroup__Kh2Xj"};
20291
20754
 
20292
- var _excluded$5 = ["title", "name", "schema"],
20293
- _excluded2$2 = ["context", "fieldName", "fieldValue", "type", "radiobuttons", "formState"];
20755
+ var _excluded$5 = ["context", "fieldName", "fieldValue", "type", "radiobuttons", "formState"];
20294
20756
  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; }
20295
20757
  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(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; }
20296
- function SelectInput(_ref) {
20297
- var title = _ref.title,
20298
- name = _ref.name,
20299
- schema = _ref.schema,
20758
+ function SData(_ref) {
20759
+ var context = _ref.context,
20760
+ fieldName = _ref.fieldName,
20761
+ fieldValue = _ref.fieldValue,
20762
+ type = _ref.type,
20763
+ radiobuttons = _ref.radiobuttons,
20764
+ formState = _ref.formState,
20300
20765
  prop = _objectWithoutProperties(_ref, _excluded$5);
20301
- var inputSelect = Object.keys(schema).reduce(function (acc, item) {
20302
- acc["enum"].push(item);
20303
- acc.enumNames.push(schema[item].title || item);
20304
- return acc;
20305
- }, {
20306
- title: title,
20307
- type: 'string',
20308
- "default": '',
20309
- minLength: 1,
20310
- "enum": [],
20311
- enumNames: []
20312
- });
20313
- return jsx(Field, _objectSpread$8({
20314
- name: name,
20315
- options: getSelectOptionsFromSchema(inputSelect),
20316
- component: Select
20317
- }, prop));
20318
- }
20319
- function SData(_ref2) {
20320
- var context = _ref2.context,
20321
- fieldName = _ref2.fieldName,
20322
- fieldValue = _ref2.fieldValue,
20323
- type = _ref2.type,
20324
- radiobuttons = _ref2.radiobuttons,
20325
- formState = _ref2.formState,
20326
- prop = _objectWithoutProperties(_ref2, _excluded2$2);
20327
20766
  var _result = formState.result,
20328
20767
  _valid = formState.valid;
20768
+ var formSchema = sdataCustomSchema;
20329
20769
  var init = {
20330
- context: context,
20331
- fieldName: fieldName || getSdataDefault(context),
20770
+ context: context || getSdataDefault(formSchema, 'context'),
20771
+ fieldName: fieldName || getSdataDefault(formSchema, 'fieldName'),
20332
20772
  type: type,
20333
- radiobuttons: radiobuttons
20773
+ radiobuttons: radiobuttons || getSdataDefault(formSchema, 'radiobuttons')
20334
20774
  };
20335
- init.fieldValue = fieldValue || getSdataDefault(context, init.fieldName);
20336
- var formSchema = sdataSchema[_result.context][_result.fieldName] || sdataCustomSchema;
20775
+ init.fieldValue = fieldValue || getSdataDefault(formSchema, 'fieldValue');
20337
20776
  var serialize = {
20338
20777
  context: _result.context.trim(),
20339
20778
  fieldName: _result.fieldName.trim(),
@@ -20361,20 +20800,20 @@ function SData(_ref2) {
20361
20800
  init: init
20362
20801
  }, formState), {}, {
20363
20802
  children: jsxs("fieldset", {
20364
- children: [jsx(SelectOneOf, {
20365
- title: "Context",
20803
+ className: "sdata",
20804
+ children: [jsx(Field, {
20366
20805
  name: "context",
20367
- schema: sdataSchema
20368
- }), jsx(SelectInput, {
20369
- title: "Field name",
20806
+ options: getSelectOptionsFromSchema(formSchema.properties.context),
20807
+ component: Select
20808
+ }), jsx(Field, {
20370
20809
  name: "fieldName",
20371
- schema: sdataSchema[_result.context]
20372
- }), content$1(formSchema, _result.context, _result.fieldName, radiobuttons)]
20810
+ placeholder: "Enter name"
20811
+ }), content$1(formSchema, _result.context, _result.fieldName, _result.fieldValue, radiobuttons)]
20373
20812
  })
20374
20813
  }))
20375
20814
  });
20376
20815
  }
20377
- var content$1 = function content(schema, context, fieldName, checked) {
20816
+ var content$1 = function content(schema, context, fieldName, fieldValue, checked) {
20378
20817
  return Object.keys(schema.properties).filter(function (prop) {
20379
20818
  return prop !== 'type' && prop !== 'context' && prop !== 'fieldName';
20380
20819
  }).map(function (prop) {
@@ -20383,10 +20822,9 @@ var content$1 = function content(schema, context, fieldName, checked) {
20383
20822
  checked: checked,
20384
20823
  type: "radio",
20385
20824
  labelPos: false
20386
- }, "".concat(context, "-").concat(fieldName, "-").concat(prop, "-radio")) : prop === 'fieldValue' && schema.properties.fieldValue["enum"] ? jsx(Field, {
20387
- options: getSelectOptionsFromSchema(schema.properties.fieldValue),
20825
+ }, "".concat(context, "-").concat(fieldName, "-").concat(prop, "-radio")) : prop === 'fieldValue' ? jsx(Field, {
20388
20826
  name: prop,
20389
- component: Select
20827
+ placeholder: "Enter value"
20390
20828
  }, "".concat(context, "-").concat(fieldName, "-").concat(prop, "-select")) : jsx(Field, {
20391
20829
  name: prop,
20392
20830
  type: "textarea"
@@ -20695,7 +21133,22 @@ function _objectSpread$5(target) { for (var i = 1; i < arguments.length; i++) {
20695
21133
  var getSettingsSelector = function getSettingsSelector(state) {
20696
21134
  return state.options.settings;
20697
21135
  };
21136
+ var isSaltOrSolventTemplate = function isSaltOrSolventTemplate(template) {
21137
+ return template.props.group === 'Salts and Solvents';
21138
+ };
21139
+ var isFunctionalGroupTemplate = function isFunctionalGroupTemplate(template) {
21140
+ return template.props.group === 'Functional Groups';
21141
+ };
21142
+ function getTemplateTitle(template, index) {
21143
+ if (isSaltOrSolventTemplate(template)) {
21144
+ return template.props.name;
21145
+ }
21146
+ return template.struct.name || "".concat(template.props.group, " template ").concat(index + 1);
21147
+ }
20698
21148
  function tmplName(tmpl, i) {
21149
+ if (isSaltOrSolventTemplate(tmpl)) {
21150
+ return tmpl.props.abbreviation;
21151
+ }
20699
21152
  return tmpl.struct.name || "".concat(tmpl.props.group, " template ").concat(i + 1);
20700
21153
  }
20701
21154
  var RenderTmpl = function RenderTmpl(_ref) {
@@ -20703,7 +21156,7 @@ var RenderTmpl = function RenderTmpl(_ref) {
20703
21156
  options = _ref.options,
20704
21157
  props = _objectWithoutProperties(_ref, _excluded$2);
20705
21158
  return jsx(StructRender, _objectSpread$5({
20706
- struct: tmpl.modifiedStruct || tmpl.struct,
21159
+ struct: tmpl.struct,
20707
21160
  options: _objectSpread$5(_objectSpread$5({}, options), {}, {
20708
21161
  autoScaleMargin: 15
20709
21162
  })
@@ -20715,7 +21168,6 @@ var TemplateTable = function TemplateTable(props) {
20715
21168
  onSelect = props.onSelect,
20716
21169
  onDelete = props.onDelete,
20717
21170
  onAttach = props.onAttach,
20718
- _onDoubleClick = props.onDoubleClick,
20719
21171
  _props$titleRows = props.titleRows,
20720
21172
  titleRows = _props$titleRows === void 0 ? 2 : _props$titleRows;
20721
21173
  var options = useSelector(function (state) {
@@ -20726,13 +21178,10 @@ var TemplateTable = function TemplateTable(props) {
20726
21178
  children: templates.map(function (tmpl, i) {
20727
21179
  return jsxs("div", {
20728
21180
  className: tmpl.struct !== (selected === null || selected === void 0 ? void 0 : selected.struct) ? classes$7.td : "".concat(classes$7.td, " ").concat(classes$7.selected),
20729
- title: greekify(tmplName(tmpl, i)),
21181
+ title: greekify(getTemplateTitle(tmpl, i)),
20730
21182
  onClick: function onClick() {
20731
21183
  return onSelect(tmpl);
20732
21184
  },
20733
- onDoubleClick: function onDoubleClick() {
20734
- return _onDoubleClick(tmpl);
20735
- },
20736
21185
  children: [jsx(RenderTmpl, {
20737
21186
  tmpl: tmpl,
20738
21187
  options: options,
@@ -20748,7 +21197,7 @@ var TemplateTable = function TemplateTable(props) {
20748
21197
  children: jsx(Icon, {
20749
21198
  name: "delete"
20750
21199
  })
20751
- }), tmpl.props.group !== 'Functional Groups' && jsx("button", {
21200
+ }), !isFunctionalGroupTemplate(tmpl) && !isSaltOrSolventTemplate(tmpl) && jsx("button", {
20752
21201
  className: "".concat(classes$7.button, " ").concat(classes$7.editButton),
20753
21202
  onClick: function onClick() {
20754
21203
  return onAttach(tmpl);
@@ -20762,8 +21211,8 @@ var TemplateTable = function TemplateTable(props) {
20762
21211
  });
20763
21212
  };
20764
21213
 
20765
- var functionalGroupsSelector = function functionalGroupsSelector(state) {
20766
- return state.functionalGroups.lib;
21214
+ var saltsAndSolventsSelector = function saltsAndSolventsSelector(state) {
21215
+ return state.saltsAndSolvents.lib;
20767
21216
  };
20768
21217
 
20769
21218
  var classes$6 = {"emptySearch":"emptySearchResult-module_emptySearch__aUSew"};
@@ -20781,7 +21230,7 @@ var EmptySearchResult = function EmptySearchResult(_ref) {
20781
21230
  };
20782
21231
 
20783
21232
  var _excluded$1 = ["children", "value", "index"],
20784
- _excluded2 = ["filter", "onFilter", "onChangeGroup", "mode", "initialTab", "functionalGroups", "lib"];
21233
+ _excluded2 = ["filter", "onFilter", "onChangeGroup", "mode", "initialTab", "functionalGroups", "lib", "saltsAndSolvents"];
20785
21234
  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; }
20786
21235
  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(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; }
20787
21236
  function TabPanel(props) {
@@ -20809,6 +21258,7 @@ var TemplateTabs;
20809
21258
  (function (TemplateTabs) {
20810
21259
  TemplateTabs[TemplateTabs["TemplateLibrary"] = 0] = "TemplateLibrary";
20811
21260
  TemplateTabs[TemplateTabs["FunctionalGroupLibrary"] = 1] = "FunctionalGroupLibrary";
21261
+ TemplateTabs[TemplateTabs["SaltsAndSolvents"] = 2] = "SaltsAndSolvents";
20812
21262
  })(TemplateTabs || (TemplateTabs = {}));
20813
21263
  var filterLibSelector = createSelector(function (props) {
20814
21264
  return props.lib;
@@ -20816,6 +21266,7 @@ var filterLibSelector = createSelector(function (props) {
20816
21266
  return props.filter;
20817
21267
  }, filterLib);
20818
21268
  var FUNCTIONAL_GROUPS = 'Functional Groups';
21269
+ var SALTS_AND_SOLVENTS = 'Salts and Solvents';
20819
21270
  var HeaderContent = function HeaderContent() {
20820
21271
  return jsxs("div", {
20821
21272
  className: classes$8.dialogHeader,
@@ -20829,26 +21280,37 @@ var HeaderContent = function HeaderContent() {
20829
21280
  var FooterContent = function FooterContent(_ref) {
20830
21281
  var data = _ref.data,
20831
21282
  tab = _ref.tab;
20832
- return jsx("div", {
21283
+ var clickToAddToCanvas = jsx("span", {
21284
+ children: "Click to add to canvas"
21285
+ });
21286
+ if (tab === TemplateTabs.SaltsAndSolvents) {
21287
+ return clickToAddToCanvas;
21288
+ }
21289
+ return jsxs("div", {
20833
21290
  style: {
20834
- flexGrow: 1
21291
+ flexGrow: 1,
21292
+ display: 'flex',
21293
+ justifyContent: 'space-between',
21294
+ alignItems: 'center'
20835
21295
  },
20836
- children: jsx(SaveButton$1, {
21296
+ children: [jsx(SaveButton$1, {
20837
21297
  data: data,
20838
21298
  className: classes$8.saveButton,
20839
21299
  filename: tab === TemplateTabs.TemplateLibrary ? 'ketcher-tmpls.sdf' : 'ketcher-fg-tmpls.sdf',
20840
- children: tab === TemplateTabs.TemplateLibrary ? 'Save template library to SDF' : 'Save functional groups to SDF'
20841
- }, "save-to-SDF")
21300
+ children: "Save to SDF"
21301
+ }, "save-to-SDF"), clickToAddToCanvas]
20842
21302
  });
20843
21303
  };
20844
21304
  var TemplateDialog = function TemplateDialog(props) {
21305
+ var _serializerMapper;
20845
21306
  var filter = props.filter,
20846
21307
  onFilter = props.onFilter,
20847
- onChangeGroup = props.onChangeGroup,
20848
- mode = props.mode,
20849
- initialTab = props.initialTab,
21308
+ onChangeGroup = props.onChangeGroup;
21309
+ props.mode;
21310
+ var initialTab = props.initialTab,
20850
21311
  functionalGroups = props.functionalGroups,
20851
21312
  templateLib = props.lib,
21313
+ saltsAndSolvents = props.saltsAndSolvents,
20852
21314
  rest = _objectWithoutProperties(props, _excluded2);
20853
21315
  var _useState = useState(initialTab !== null && initialTab !== void 0 ? initialTab : TemplateTabs.TemplateLibrary),
20854
21316
  _useState2 = _slicedToArray(_useState, 2),
@@ -20862,10 +21324,17 @@ var TemplateDialog = function TemplateDialog(props) {
20862
21324
  _useState6 = _slicedToArray(_useState5, 2),
20863
21325
  filteredFG = _useState6[0],
20864
21326
  setFilteredFG = _useState6[1];
21327
+ var _useState7 = useState(saltsAndSolvents[SALTS_AND_SOLVENTS]),
21328
+ _useState8 = _slicedToArray(_useState7, 2),
21329
+ filteredSaltsAndSolvents = _useState8[0],
21330
+ setFilteredSaltsAndSolvents = _useState8[1];
20865
21331
  var filteredTemplateLib = filterLibSelector(props);
20866
21332
  useEffect(function () {
20867
21333
  setFilteredFG(filterFGLib(functionalGroups, filter)[FUNCTIONAL_GROUPS]);
20868
21334
  }, [functionalGroups, filter]);
21335
+ useEffect(function () {
21336
+ setFilteredSaltsAndSolvents(filterFGLib(saltsAndSolvents, filter)[SALTS_AND_SOLVENTS]);
21337
+ }, [saltsAndSolvents, filter]);
20869
21338
  var handleTabChange = function handleTabChange(_, tab) {
20870
21339
  setTab(tab);
20871
21340
  props.onSelect(null);
@@ -20877,21 +21346,12 @@ var TemplateDialog = function TemplateDialog(props) {
20877
21346
  }));
20878
21347
  };
20879
21348
  };
20880
- var _result = function result() {
20881
- var tmpl = props.selected;
20882
- return tmpl ? {
20883
- struct: tmpl.struct,
20884
- aid: parseInt(String(tmpl.props.atomid)) || null,
20885
- bid: parseInt(String(tmpl.props.bondid)) || null,
20886
- mode: mode
20887
- } : null;
20888
- };
20889
21349
  var sdfSerializer = new SdfSerializer();
20890
- var data = tab === TemplateTabs.TemplateLibrary ? sdfSerializer.serialize(templateLib) : sdfSerializer.serialize(functionalGroups);
21350
+ var serializerMapper = (_serializerMapper = {}, _defineProperty(_serializerMapper, TemplateTabs.TemplateLibrary, templateLib), _defineProperty(_serializerMapper, TemplateTabs.FunctionalGroupLibrary, functionalGroups), _defineProperty(_serializerMapper, TemplateTabs.SaltsAndSolvents, saltsAndSolvents), _serializerMapper);
21351
+ var data = sdfSerializer.serialize(serializerMapper[tab]);
20891
21352
  var select = function select(tmpl) {
20892
- var activateImmediately = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
20893
21353
  onChangeGroup(tmpl.props.group);
20894
- if (activateImmediately) props.onOk(_result());else props.onSelect(tmpl);
21354
+ props.onSelect(tmpl);
20895
21355
  };
20896
21356
  return jsxs(Dialog, {
20897
21357
  headerContent: jsx(HeaderContent, {}),
@@ -20901,13 +21361,7 @@ var TemplateDialog = function TemplateDialog(props) {
20901
21361
  }),
20902
21362
  className: "".concat(classes$8.dialog_body),
20903
21363
  params: omit(['group'], rest),
20904
- result: function result() {
20905
- return _result();
20906
- },
20907
- buttons: ['OK'],
20908
- buttonsNameMap: {
20909
- OK: 'Add to canvas'
20910
- },
21364
+ buttons: [],
20911
21365
  needMargin: false,
20912
21366
  children: [jsxs("div", {
20913
21367
  className: classes$8.inputContainer,
@@ -20918,7 +21372,8 @@ var TemplateDialog = function TemplateDialog(props) {
20918
21372
  onChange: function onChange(value) {
20919
21373
  return onFilter(value);
20920
21374
  },
20921
- placeholder: "Search by elements..."
21375
+ placeholder: "Search by elements...",
21376
+ isFocused: true
20922
21377
  }), jsx(Icon, {
20923
21378
  name: "search",
20924
21379
  className: classes$8.searchIcon
@@ -20931,7 +21386,9 @@ var TemplateDialog = function TemplateDialog(props) {
20931
21386
  label: "Template Library"
20932
21387
  }, a11yProps(TemplateTabs.TemplateLibrary))), jsx(Tab, _objectSpread$4({
20933
21388
  label: "Functional Groups"
20934
- }, a11yProps(TemplateTabs.FunctionalGroupLibrary)))]
21389
+ }, a11yProps(TemplateTabs.FunctionalGroupLibrary))), jsx(Tab, _objectSpread$4({
21390
+ label: "Salts and Solvents"
21391
+ }, a11yProps(TemplateTabs.SaltsAndSolvents)))]
20935
21392
  }), jsxs("div", {
20936
21393
  className: classes$8.tabsContent,
20937
21394
  children: [jsx(TabPanel, {
@@ -20960,9 +21417,6 @@ var TemplateDialog = function TemplateDialog(props) {
20960
21417
  onSelect: function onSelect(templ) {
20961
21418
  return select(templ);
20962
21419
  },
20963
- onDoubleClick: function onDoubleClick(templ) {
20964
- return select(templ, true);
20965
- },
20966
21420
  selected: props.selected,
20967
21421
  onDelete: props.onDelete,
20968
21422
  onAttach: props.onAttach
@@ -20983,9 +21437,6 @@ var TemplateDialog = function TemplateDialog(props) {
20983
21437
  className: classes$8.resultsContainer,
20984
21438
  children: jsx(TemplateTable, {
20985
21439
  titleRows: 1,
20986
- onDoubleClick: function onDoubleClick(templ) {
20987
- return select(templ, true);
20988
- },
20989
21440
  templates: filteredFG,
20990
21441
  onSelect: function onSelect(templ) {
20991
21442
  return select(templ);
@@ -20998,21 +21449,45 @@ var TemplateDialog = function TemplateDialog(props) {
20998
21449
  textInfo: "No items found"
20999
21450
  })
21000
21451
  })
21452
+ }), jsx(TabPanel, {
21453
+ value: tab,
21454
+ index: TemplateTabs.SaltsAndSolvents,
21455
+ children: filteredSaltsAndSolvents !== null && filteredSaltsAndSolvents !== void 0 && filteredSaltsAndSolvents.length ? jsx("div", {
21456
+ className: classes$8.resultsContainer,
21457
+ children: jsx(TemplateTable, {
21458
+ titleRows: 1,
21459
+ templates: filteredSaltsAndSolvents,
21460
+ onSelect: function onSelect(templ) {
21461
+ return select(templ);
21462
+ },
21463
+ selected: props.selected
21464
+ })
21465
+ }) : jsx("div", {
21466
+ className: classes$8.resultsContainer,
21467
+ children: jsx(EmptySearchResult, {
21468
+ textInfo: "No items found"
21469
+ })
21470
+ })
21001
21471
  })]
21002
21472
  })]
21003
21473
  });
21004
21474
  };
21475
+ var selectTemplate = function selectTemplate(template, props, dispatch) {
21476
+ dispatch(selectTmpl(null));
21477
+ if (!template) return;
21478
+ dispatch(selectTmpl(template));
21479
+ dispatch(onAction({
21480
+ tool: 'template',
21481
+ opts: template
21482
+ }));
21483
+ props.onOk(template);
21484
+ };
21005
21485
  var TemplatesDialog = connect(function (store) {
21006
21486
  var _store$modal, _store$modal$prop;
21007
21487
  return _objectSpread$4(_objectSpread$4({}, omit(['attach'], store.templates)), {}, {
21008
21488
  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,
21009
- functionalGroups: functionalGroupsSelector(store).map(function (template) {
21010
- var struct = template.struct.clone();
21011
- struct.sgroups["delete"](0);
21012
- return _objectSpread$4(_objectSpread$4({}, template), {}, {
21013
- modifiedStruct: struct
21014
- });
21015
- })
21489
+ functionalGroups: functionalGroupsSelector(store),
21490
+ saltsAndSolvents: saltsAndSolventsSelector(store)
21016
21491
  });
21017
21492
  }, function (dispatch, props) {
21018
21493
  return {
@@ -21020,7 +21495,7 @@ var TemplatesDialog = connect(function (store) {
21020
21495
  return dispatch(changeFilter(filter));
21021
21496
  },
21022
21497
  onSelect: function onSelect(tmpl) {
21023
- return dispatch(selectTmpl(tmpl));
21498
+ return selectTemplate(tmpl, props, dispatch);
21024
21499
  },
21025
21500
  onChangeGroup: function onChangeGroup(group) {
21026
21501
  return dispatch(changeGroup(group));
@@ -21030,13 +21505,6 @@ var TemplatesDialog = connect(function (store) {
21030
21505
  },
21031
21506
  onDelete: function onDelete(tmpl) {
21032
21507
  return dispatch(deleteTmpl(tmpl));
21033
- },
21034
- onOk: function onOk(res) {
21035
- dispatch(onAction({
21036
- tool: 'template',
21037
- opts: res
21038
- }));
21039
- props.onOk(res);
21040
21508
  }
21041
21509
  };
21042
21510
  })(TemplateDialog);
@@ -21400,10 +21868,10 @@ function Modal(props) {
21400
21868
  var Component = modals[modal.name];
21401
21869
  if (!Component) throw new Error("There is no modal window named ".concat(modal.name));
21402
21870
  return jsx("div", {
21403
- className: clsx(classes$E.modalOverlay, selectClasses.selectContainer),
21871
+ className: clsx(classes$F.modalOverlay, selectClasses.selectContainer),
21404
21872
  ref: containerRef,
21405
21873
  children: jsx(Component, _objectSpread$3({
21406
- className: clsx(_defineProperty({}, classes$E.smallScreen, height && height <= mediaSizes$1.smallHeight || width && width <= mediaSizes$1.smallWidth))
21874
+ className: clsx(_defineProperty({}, classes$F.smallScreen, height && height <= mediaSizes$1.smallHeight || width && width <= mediaSizes$1.smallWidth))
21407
21875
  }, rest))
21408
21876
  });
21409
21877
  }
@@ -21612,6 +22080,24 @@ function initEditor(dispatch, getState) {
21612
22080
  },
21613
22081
  onConfirm: function onConfirm() {
21614
22082
  return openDialog(dispatch, 'confirm');
22083
+ },
22084
+ onShowInfo: function onShowInfo(payload) {
22085
+ if (payload) {
22086
+ var groupStruct = payload.groupStruct,
22087
+ event = payload.event,
22088
+ sGroup = payload.sGroup;
22089
+ highlightFG(dispatch, {
22090
+ groupStruct: groupStruct,
22091
+ event: event,
22092
+ sGroup: sGroup
22093
+ });
22094
+ } else {
22095
+ highlightFG(dispatch, {
22096
+ groupStruct: null,
22097
+ event: null,
22098
+ sGroup: null
22099
+ });
22100
+ }
21615
22101
  }
21616
22102
  };
21617
22103
  }
@@ -21645,6 +22131,8 @@ var App = function App(props) {
21645
22131
  useEffect(function () {
21646
22132
  checkServer();
21647
22133
  dispatch(initFGTemplates(staticResourcesUrl));
22134
+ dispatch(initSaltsAndSolventsTemplates(staticResourcesUrl));
22135
+ window.scrollTo(0, 0);
21648
22136
  }, []);
21649
22137
  return jsx(ThemeProvider, {
21650
22138
  theme: muiTheme,
@@ -21753,8 +22241,8 @@ var KetcherBuilder = function () {
21753
22241
  initApp(element, staticResourcesUrl, {
21754
22242
  buttons: buttons || {},
21755
22243
  errorHandler: errorHandler || null,
21756
- version: "2.6.4" ,
21757
- buildDate: "2022-12-01T13:14:40" ,
22244
+ version: "2.7.0-rc.2" ,
22245
+ buildDate: "2022-12-16T15:41:03" ,
21758
22246
  buildNumber: ''
21759
22247
  }, structService, resolve);
21760
22248
  });