ketcher-react 2.6.4 → 2.7.0-rc.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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, 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, SupportedFormat, 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';
@@ -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
  ,
@@ -386,8 +396,8 @@ function exec(action) {
386
396
  return enabled;
387
397
  }
388
398
 
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; }
399
+ 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; }
400
+ 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
401
  var editor = {
392
402
  resetToSelect: {
393
403
  title: 'Reset to Select Tool',
@@ -635,7 +645,7 @@ var optionsSchema = {
635
645
  title: 'Settings',
636
646
  type: 'object',
637
647
  required: [],
638
- properties: _objectSpread$12(_objectSpread$12(_objectSpread$12(_objectSpread$12(_objectSpread$12({}, editor), render), server), debug), miew)
648
+ properties: _objectSpread$15(_objectSpread$15(_objectSpread$15(_objectSpread$15(_objectSpread$15({}, editor), render), server), debug), miew)
639
649
  };
640
650
  function getDefaultOptions() {
641
651
  if (!optionsSchema.properties) return {};
@@ -696,13 +706,14 @@ var storage = {
696
706
  }
697
707
  };
698
708
 
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; }
709
+ 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; }
710
+ 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
711
  var initOptionsState = {
702
712
  app: {
703
713
  server: false,
704
714
  templates: false,
705
- functionalGroups: false
715
+ functionalGroups: false,
716
+ saltsAndSolvents: false
706
717
  },
707
718
  analyse: {
708
719
  values: null,
@@ -793,27 +804,27 @@ function optionsReducer() {
793
804
  var action = arguments.length > 1 ? arguments[1] : undefined;
794
805
  var type = action.type,
795
806
  data = action.data;
796
- if (type === 'APP_OPTIONS') return _objectSpread$11(_objectSpread$11({}, state), {}, {
797
- app: _objectSpread$11(_objectSpread$11({}, state.app), data)
807
+ if (type === 'APP_OPTIONS') return _objectSpread$14(_objectSpread$14({}, state), {}, {
808
+ app: _objectSpread$14(_objectSpread$14({}, state.app), data)
798
809
  });
799
- if (type === 'SAVE_SETTINGS') return _objectSpread$11(_objectSpread$11({}, state), {}, {
810
+ if (type === 'SAVE_SETTINGS') return _objectSpread$14(_objectSpread$14({}, state), {}, {
800
811
  settings: data
801
812
  });
802
- if (type === 'SAVE_CHECK_OPTS') return _objectSpread$11(_objectSpread$11({}, state), {}, {
813
+ if (type === 'SAVE_CHECK_OPTS') return _objectSpread$14(_objectSpread$14({}, state), {}, {
803
814
  check: data
804
815
  });
805
- if (type === 'CHANGE_ANALYSE') return _objectSpread$11(_objectSpread$11({}, state), {}, {
806
- analyse: _objectSpread$11(_objectSpread$11(_objectSpread$11({}, state.analyse), data), {}, {
816
+ if (type === 'CHANGE_ANALYSE') return _objectSpread$14(_objectSpread$14({}, state), {}, {
817
+ analyse: _objectSpread$14(_objectSpread$14(_objectSpread$14({}, state.analyse), data), {}, {
807
818
  loading: false
808
819
  })
809
820
  });
810
- if (type === 'ANALYSE_LOADING') return _objectSpread$11(_objectSpread$11({}, state), {}, {
811
- analyse: _objectSpread$11(_objectSpread$11({}, state.analyse), {}, {
821
+ if (type === 'ANALYSE_LOADING') return _objectSpread$14(_objectSpread$14({}, state), {}, {
822
+ analyse: _objectSpread$14(_objectSpread$14({}, state.analyse), {}, {
812
823
  loading: true
813
824
  })
814
825
  });
815
- if (recognizeActions.includes(type)) return _objectSpread$11(_objectSpread$11({}, state), {}, {
816
- recognize: _objectSpread$11(_objectSpread$11({}, state.recognize), data)
826
+ if (recognizeActions.includes(type)) return _objectSpread$14(_objectSpread$14({}, state), {}, {
827
+ recognize: _objectSpread$14(_objectSpread$14({}, state.recognize), data)
817
828
  });
818
829
  return state;
819
830
  }
@@ -1069,7 +1080,7 @@ var sdataCustomSchema = {
1069
1080
  },
1070
1081
  context: {
1071
1082
  title: 'Context',
1072
- "enum": ['Fragment', 'Multifragment', 'Bond', 'Atom', 'Group'],
1083
+ "enum": ['Atom', 'Bond', 'Fragment', 'Group', 'Multifragment'],
1073
1084
  "default": 'Fragment'
1074
1085
  },
1075
1086
  fieldName: {
@@ -1103,18 +1114,26 @@ var sdataSchema = Object.keys(sData).reduce(function (acc, title) {
1103
1114
  function firstKeyOf(obj) {
1104
1115
  return Object.keys(obj)[0];
1105
1116
  }
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);
1117
+ function getSdataDefault() {
1118
+ var schema = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : sdataSchema;
1119
+ var context = arguments.length > 1 ? arguments[1] : undefined;
1120
+ var fieldName = arguments.length > 2 ? arguments[2] : undefined;
1121
+ if (schema.key === 'Custom') {
1122
+ var _schema$properties$co;
1123
+ return (_schema$properties$co = schema.properties[context]) === null || _schema$properties$co === void 0 ? void 0 : _schema$properties$co["default"];
1124
+ }
1125
+ if (!context && !fieldName) return firstKeyOf(schema);
1126
+ if (!fieldName) return firstKeyOf(schema[context]);
1127
+ return schema[context][fieldName] ? schema[context][fieldName].properties.fieldValue["default"] : '';
1128
+ }
1129
+
1130
+ 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; }
1131
+ 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; }
1132
+ var initSdata = function initSdata(schema) {
1133
+ var isCustomShema = schema.key === 'Custom';
1134
+ var context = isCustomShema ? getSdataDefault(sdataCustomSchema, 'context') : getSdataDefault(sdataSchema);
1135
+ var fieldName = isCustomShema ? getSdataDefault(sdataCustomSchema, 'fieldName') : getSdataDefault(sdataSchema, context);
1136
+ var fieldValue = isCustomShema ? getSdataDefault(sdataCustomSchema, 'fieldValue') : getSdataDefault(sdataSchema, context, fieldName);
1118
1137
  var radiobuttons = 'Absolute';
1119
1138
  return {
1120
1139
  errors: {},
@@ -1130,7 +1149,7 @@ var initSdata = function initSdata() {
1130
1149
  };
1131
1150
  function sdataReducer(state, action) {
1132
1151
  if (action.data.result.init) {
1133
- return correctErrors(_objectSpread$10(_objectSpread$10({}, state), {}, {
1152
+ return correctErrors(_objectSpread$13(_objectSpread$13({}, state), {}, {
1134
1153
  result: Object.assign({}, state.result, action.data.result)
1135
1154
  }), action.data);
1136
1155
  }
@@ -1138,7 +1157,7 @@ function sdataReducer(state, action) {
1138
1157
  var actionFieldName = action.data.result.fieldName;
1139
1158
  var newstate = null;
1140
1159
  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), {}, {
1160
+ newstate = newstate || _objectSpread$13(_objectSpread$13({}, state), {}, {
1142
1161
  result: Object.assign({}, state.result, action.data.result)
1143
1162
  });
1144
1163
  return correctErrors(newstate, action.data);
@@ -1158,11 +1177,11 @@ var correctErrors = function correctErrors(state, payload) {
1158
1177
  var onContextChange = function onContextChange(state, payload) {
1159
1178
  var context = payload.context,
1160
1179
  fieldValue = payload.fieldValue;
1161
- var fieldName = getSdataDefault(context);
1180
+ var fieldName = getSdataDefault(sdataCustomSchema, 'fieldName');
1162
1181
  var fValue = fieldValue;
1163
- if (fValue === state.result.fieldValue) fValue = getSdataDefault(context, fieldName);
1182
+ if (fValue === state.result.fieldValue) fValue = getSdataDefault(sdataCustomSchema, 'fieldValue');
1164
1183
  return {
1165
- result: _objectSpread$10(_objectSpread$10({}, payload), {}, {
1184
+ result: _objectSpread$13(_objectSpread$13({}, payload), {}, {
1166
1185
  context: context,
1167
1186
  fieldName: fieldName,
1168
1187
  fieldValue: fValue
@@ -1173,10 +1192,10 @@ var onFieldNameChange = function onFieldNameChange(state, payload) {
1173
1192
  var fieldName = payload.fieldName;
1174
1193
  var context = state.result.context;
1175
1194
  var fieldValue = payload.fieldValue;
1176
- if (sdataSchema[context][fieldName]) fieldValue = getSdataDefault(context, fieldName);
1195
+ if (sdataSchema[context][fieldName]) fieldValue = getSdataDefault(sdataSchema, context, fieldName);
1177
1196
  if (fieldValue === state.result.fieldValue && sdataSchema[context][state.result.fieldName]) fieldValue = '';
1178
1197
  return {
1179
- result: _objectSpread$10(_objectSpread$10({}, payload), {}, {
1198
+ result: _objectSpread$13(_objectSpread$13({}, payload), {}, {
1180
1199
  fieldName: fieldName,
1181
1200
  fieldValue: fieldValue
1182
1201
  })
@@ -1280,7 +1299,7 @@ var formsState = {
1280
1299
  valid: true,
1281
1300
  result: {}
1282
1301
  },
1283
- sdata: initSdata()
1302
+ sdata: initSdata(sdataCustomSchema)
1284
1303
  };
1285
1304
  function updateFormState(data) {
1286
1305
  return {
@@ -1314,8 +1333,8 @@ function formReducer(state, action, formName) {
1314
1333
  var INDIGO_VERIFICATION = 'INDIGO_VERIFICATION';
1315
1334
  var ANALYZING_FILE = 'ANALYZING_FILE';
1316
1335
 
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; }
1336
+ 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; }
1337
+ 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
1338
  function indigoVerification(data) {
1320
1339
  return {
1321
1340
  type: INDIGO_VERIFICATION,
@@ -1328,25 +1347,25 @@ function setAnalyzingFile(data) {
1328
1347
  data: data
1329
1348
  };
1330
1349
  }
1331
- var initialState$1 = {
1350
+ var initialState$2 = {
1332
1351
  indigoVerification: false,
1333
1352
  isAnalyzingFile: false
1334
1353
  };
1335
1354
  function requestReducer () {
1336
- var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState$1;
1355
+ var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState$2;
1337
1356
  var action = arguments.length > 1 ? arguments[1] : undefined;
1338
1357
  var type = action.type,
1339
1358
  data = action.data;
1340
1359
  switch (type) {
1341
1360
  case INDIGO_VERIFICATION:
1342
1361
  {
1343
- return _objectSpread$$(_objectSpread$$({}, state), {}, {
1362
+ return _objectSpread$12(_objectSpread$12({}, state), {}, {
1344
1363
  indigoVerification: data
1345
1364
  });
1346
1365
  }
1347
1366
  case ANALYZING_FILE:
1348
1367
  {
1349
- return _objectSpread$$(_objectSpread$$({}, state), {}, {
1368
+ return _objectSpread$12(_objectSpread$12({}, state), {}, {
1350
1369
  isAnalyzingFile: data
1351
1370
  });
1352
1371
  }
@@ -1619,12 +1638,12 @@ var attachSchema = {
1619
1638
  };
1620
1639
 
1621
1640
  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; }
1641
+ 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; }
1642
+ 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
1643
  var DefaultStereoGroupNumber = 1;
1625
1644
  function fromElement(selem) {
1626
1645
  if (selem.label === 'R#') {
1627
- return _objectSpread$_({
1646
+ return _objectSpread$11({
1628
1647
  type: 'rlabel',
1629
1648
  values: fromRlabel(selem.rglabel)
1630
1649
  }, selem);
@@ -1784,7 +1803,7 @@ function fromBond(sbond) {
1784
1803
  };
1785
1804
  }
1786
1805
  function toBond(bond) {
1787
- return _objectSpread$_({
1806
+ return _objectSpread$11({
1788
1807
  topology: bond.topology,
1789
1808
  reactingCenterStatus: bond.center
1790
1809
  }, toBondType(bond.type));
@@ -1874,7 +1893,7 @@ function toSgroup(sgroup) {
1874
1893
  var type = sgroup.type,
1875
1894
  radiobuttons = sgroup.radiobuttons,
1876
1895
  props = _objectWithoutProperties(sgroup, _excluded$E);
1877
- var attrs = _objectSpread$_({}, props);
1896
+ var attrs = _objectSpread$11({}, props);
1878
1897
  var absolute = 'absolute';
1879
1898
  var attached = 'attached';
1880
1899
  switch (radiobuttons) {
@@ -2375,8 +2394,8 @@ var tools$1 = typeSchema$1["enum"].reduce(function (res, type, i) {
2375
2394
  }, toolActions);
2376
2395
 
2377
2396
  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; }
2397
+ 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; }
2398
+ 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
2399
  function onAction(action) {
2381
2400
  if (action && action.dialog) {
2382
2401
  return {
@@ -2423,7 +2442,7 @@ function load(struct, options) {
2423
2442
  server = state.server;
2424
2443
  errorHandler = editor.errorHandler;
2425
2444
  options = options || {};
2426
- options = _objectSpread$Z(_objectSpread$Z({}, options), {}, {
2445
+ options = _objectSpread$10(_objectSpread$10({}, options), {}, {
2427
2446
  'dearomatize-on-load': editor.options()['dearomatize-on-load']
2428
2447
  });
2429
2448
  dispatch(setAnalyzingFile(true));
@@ -2851,7 +2870,7 @@ var zoom = {
2851
2870
 
2852
2871
  var openHelpLink = function openHelpLink() {
2853
2872
  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();
2873
+ return (_window$open = window.open("https://github.com/epam/ketcher/blob/".concat("v2.7.0-rc.2\n", "/documentation/help.md#ketcher-overview"))) === null || _window$open === void 0 ? void 0 : _window$open.focus();
2855
2874
  };
2856
2875
  var help = {
2857
2876
  help: {
@@ -2912,9 +2931,9 @@ var fullscreen = {
2912
2931
  }
2913
2932
  };
2914
2933
 
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({
2934
+ 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; }
2935
+ 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; }
2936
+ var config = _objectSpread$$(_objectSpread$$(_objectSpread$$(_objectSpread$$(_objectSpread$$(_objectSpread$$(_objectSpread$$(_objectSpread$$(_objectSpread$$({
2918
2937
  clear: {
2919
2938
  shortcut: 'Mod+Delete',
2920
2939
  title: 'Clear Canvas',
@@ -5257,7 +5276,7 @@ function SvgTransformFlipH(props) {
5257
5276
  fill: "none",
5258
5277
  xmlns: "http://www.w3.org/2000/svg"
5259
5278
  }, 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",
5279
+ 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
5280
  fill: "#231F20"
5262
5281
  })));
5263
5282
  }
@@ -5274,7 +5293,7 @@ function SvgTransformFlipV(props) {
5274
5293
  fill: "none",
5275
5294
  xmlns: "http://www.w3.org/2000/svg"
5276
5295
  }, 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",
5296
+ 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
5297
  fill: "#231F20"
5279
5298
  })));
5280
5299
  }
@@ -6820,16 +6839,16 @@ function findIconByName(name) {
6820
6839
  }
6821
6840
 
6822
6841
  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; }
6842
+ 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; }
6843
+ 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
6844
  function Icon(_ref) {
6826
6845
  var name = _ref.name,
6827
6846
  props = _objectWithoutProperties(_ref, _excluded$C);
6828
6847
  var Component = findIconByName(name);
6829
- return jsx(Component, _objectSpread$X({}, props));
6848
+ return jsx(Component, _objectSpread$_({}, props));
6830
6849
  }
6831
6850
 
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"};
6851
+ 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
6852
 
6834
6853
  var isMac = /Mac/.test(navigator.platform);
6835
6854
  var shortcutAliasMap = {
@@ -6873,7 +6892,7 @@ var ActionButton = function ActionButton(props) {
6873
6892
  disabled: disabled,
6874
6893
  onClick: handleClick,
6875
6894
  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),
6895
+ className: clsx(classes$N.button, _defineProperty({}, classes$N.selected, selected), className),
6877
6896
  children: [jsx(Icon, {
6878
6897
  name: name
6879
6898
  }), jsx("kbd", {
@@ -7029,7 +7048,7 @@ var DefaultMultiTool = function DefaultMultiTool(props) {
7029
7048
  });
7030
7049
  };
7031
7050
 
7032
- var classes$L = {"group":"GroupedMultiTool-module_group__BJQAU"};
7051
+ var classes$M = {"group":"GroupedMultiTool-module_group__BJQAU"};
7033
7052
 
7034
7053
  var GroupedMultiTool = function GroupedMultiTool(props) {
7035
7054
  var groups = props.groups,
@@ -7044,7 +7063,7 @@ var GroupedMultiTool = function GroupedMultiTool(props) {
7044
7063
  return jsx(Fragment, {
7045
7064
  children: groups.map(function (descriptor) {
7046
7065
  return jsx("div", {
7047
- className: classes$L.group,
7066
+ className: classes$M.group,
7048
7067
  children: options.slice(descriptor.start, descriptor.end).map(function (toolbarItem) {
7049
7068
  var currentStatus = status[toolbarItem.id];
7050
7069
  return jsx(ActionButton, {
@@ -7074,7 +7093,7 @@ function chooseMultiTool() {
7074
7093
  }
7075
7094
  }
7076
7095
 
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"};
7096
+ 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
7097
 
7079
7098
  function usePortalOpening(_ref) {
7080
7099
  var _ref2 = _slicedToArray(_ref, 3),
@@ -7122,8 +7141,8 @@ function usePortalStyle(_ref) {
7122
7141
  return [portalStyle];
7123
7142
  }
7124
7143
 
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; }
7144
+ 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; }
7145
+ 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
7146
  var ToolbarMultiToolItem = function ToolbarMultiToolItem(props) {
7128
7147
  var id = props.id,
7129
7148
  options = props.options,
@@ -7184,20 +7203,20 @@ var ToolbarMultiToolItem = function ToolbarMultiToolItem(props) {
7184
7203
  portalClassName = _chooseMultiTool2[1];
7185
7204
  return displayMultiToolItem ? jsxs("div", {
7186
7205
  ref: ref,
7187
- className: classes$K.root,
7188
- children: [jsx(ActionButton, _objectSpread$W(_objectSpread$W({}, actionButtonProps), {}, {
7206
+ className: classes$L.root,
7207
+ children: [jsx(ActionButton, _objectSpread$Z(_objectSpread$Z({}, actionButtonProps), {}, {
7189
7208
  className: className,
7190
7209
  name: currentId,
7191
7210
  action: config[currentId],
7192
7211
  status: currentStatus,
7193
7212
  selected: selected
7194
7213
  })), !isOpen && jsx(Icon, {
7195
- className: "".concat(classes$K.icon, " ").concat((currentStatus === null || currentStatus === void 0 ? void 0 : currentStatus.selected) && classes$K.iconSelected),
7214
+ className: "".concat(classes$L.icon, " ").concat((currentStatus === null || currentStatus === void 0 ? void 0 : currentStatus.selected) && classes$L.iconSelected),
7196
7215
  name: "dropdown",
7197
7216
  onClick: onOpenOptions
7198
7217
  }), isOpen ? jsx(Portal, {
7199
7218
  isOpen: isOpen,
7200
- className: clsx(classes$K.portal, vertical && classes$K['portal-vertical'], portalClassName),
7219
+ className: clsx(classes$L.portal, vertical && classes$L['portal-vertical'], portalClassName),
7201
7220
  style: portalStyle,
7202
7221
  children: jsx(Component, {
7203
7222
  options: options,
@@ -7282,16 +7301,16 @@ var TemplatesList = function TemplatesList(props) {
7282
7301
  });
7283
7302
  };
7284
7303
 
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"};
7304
+ 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
7305
 
7287
7306
  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; }
7307
+ 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; }
7308
+ 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
7309
  var Group$1 = function Group(_ref) {
7291
7310
  var children = _ref.children,
7292
7311
  className = _ref.className;
7293
7312
  return jsx("div", {
7294
- className: clsx(classes$J.group, className),
7313
+ className: clsx(classes$K.group, className),
7295
7314
  children: children
7296
7315
  });
7297
7316
  };
@@ -7303,7 +7322,7 @@ var BottomToolbar = function BottomToolbar(props) {
7303
7322
  indigoVerification = rest.indigoVerification,
7304
7323
  onAction = rest.onAction;
7305
7324
  return jsxs("div", {
7306
- className: clsx(classes$J.root, className),
7325
+ className: clsx(classes$K.root, className),
7307
7326
  children: [jsx(Group$1, {
7308
7327
  children: jsx(TemplatesList, {
7309
7328
  active: active,
@@ -7312,7 +7331,7 @@ var BottomToolbar = function BottomToolbar(props) {
7312
7331
  onAction: onAction
7313
7332
  })
7314
7333
  }), jsx(Group$1, {
7315
- children: jsx(ToolbarGroupItem, _objectSpread$V({
7334
+ children: jsx(ToolbarGroupItem, _objectSpread$Y({
7316
7335
  id: "template-lib"
7317
7336
  }, rest))
7318
7337
  })]
@@ -7407,15 +7426,15 @@ function prefetchRender(tmpls, baseUrl, cacheEl) {
7407
7426
  });
7408
7427
  }
7409
7428
 
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; }
7429
+ 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; }
7430
+ 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
7431
  function openDialog(dispatch, dialogName, props) {
7413
7432
  return new Promise(function (resolve, reject) {
7414
7433
  dispatch({
7415
7434
  type: 'MODAL_OPEN',
7416
7435
  data: {
7417
7436
  name: dialogName,
7418
- prop: _objectSpread$U(_objectSpread$U({}, props), {}, {
7437
+ prop: _objectSpread$X(_objectSpread$X({}, props), {}, {
7419
7438
  onResult: resolve,
7420
7439
  onCancel: reject
7421
7440
  })
@@ -7433,7 +7452,7 @@ function modalReducer() {
7433
7452
  return null;
7434
7453
  }
7435
7454
  var formState = formReducer(state.form, action, state.name);
7436
- return _objectSpread$U(_objectSpread$U({}, state), {}, {
7455
+ return _objectSpread$X(_objectSpread$X({}, state), {}, {
7437
7456
  form: formState
7438
7457
  });
7439
7458
  }
@@ -7451,8 +7470,8 @@ function modalReducer() {
7451
7470
  }
7452
7471
  }
7453
7472
 
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; }
7473
+ 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; }
7474
+ 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
7475
  function selectTmpl(tmpl) {
7457
7476
  return {
7458
7477
  type: 'TMPL_SELECT',
@@ -7474,7 +7493,7 @@ function changeFilter(filter) {
7474
7493
  return {
7475
7494
  type: 'TMPL_CHANGE_FILTER',
7476
7495
  data: {
7477
- filter: filter.trim(),
7496
+ filter: filter,
7478
7497
  selected: null
7479
7498
  }
7480
7499
  };
@@ -7552,7 +7571,7 @@ function saveUserTmpl(struct) {
7552
7571
  var name = _ref.name,
7553
7572
  attach = _ref.attach;
7554
7573
  tmpl.struct.name = name.trim();
7555
- tmpl.props = _objectSpread$T(_objectSpread$T({}, attach), {}, {
7574
+ tmpl.props = _objectSpread$W(_objectSpread$W({}, attach), {}, {
7556
7575
  group: 'User Templates'
7557
7576
  });
7558
7577
  var lib = getState().templates.lib.concat(tmpl);
@@ -7591,7 +7610,7 @@ function templatesReducer() {
7591
7610
  if (tmplActions.includes(action.type)) return Object.assign({}, state, action.data);
7592
7611
  if (attachActions.includes(action.type)) {
7593
7612
  var attach = Object.assign({}, state.attach, action.data);
7594
- return _objectSpread$T(_objectSpread$T({}, state), {}, {
7613
+ return _objectSpread$W(_objectSpread$W({}, state), {}, {
7595
7614
  attach: attach
7596
7615
  });
7597
7616
  }
@@ -7600,7 +7619,7 @@ function templatesReducer() {
7600
7619
  var lib = currentState.lib.filter(function (value) {
7601
7620
  return value !== action.data.tmpl;
7602
7621
  });
7603
- return _objectSpread$T(_objectSpread$T({}, currentState), {}, {
7622
+ return _objectSpread$W(_objectSpread$W({}, currentState), {}, {
7604
7623
  lib: lib
7605
7624
  });
7606
7625
  }
@@ -7608,8 +7627,8 @@ function templatesReducer() {
7608
7627
  }
7609
7628
 
7610
7629
  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; }
7630
+ 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; }
7631
+ 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
7632
  function execute(activeTool, _ref) {
7614
7633
  var action = _ref.action,
7615
7634
  editor = _ref.editor,
@@ -7663,7 +7682,7 @@ function actionStateReducer () {
7663
7682
  case 'INIT':
7664
7683
  action = config['select-rectangle'].action;
7665
7684
  case 'ACTION':
7666
- activeTool = execute(state && state.activeTool, _objectSpread$S(_objectSpread$S({}, params), {}, {
7685
+ activeTool = execute(state && state.activeTool, _objectSpread$V(_objectSpread$V({}, params), {}, {
7667
7686
  action: action
7668
7687
  }));
7669
7688
  case 'UPDATE':
@@ -7679,20 +7698,25 @@ function actionStateReducer () {
7679
7698
  }
7680
7699
  }
7681
7700
 
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 = {
7701
+ 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; }
7702
+ 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; }
7703
+ var initialState$1 = {
7685
7704
  lib: [],
7705
+ functionalGroupInfo: null,
7686
7706
  mode: 'fg'
7687
7707
  };
7688
7708
  var functionalGroupsReducer = function functionalGroupsReducer() {
7689
- var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState;
7709
+ var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState$1;
7690
7710
  var _ref = arguments.length > 1 ? arguments[1] : undefined,
7691
7711
  type = _ref.type,
7692
7712
  payload = _ref.payload;
7693
7713
  switch (type) {
7694
7714
  case 'FG_INIT':
7695
- return _objectSpread$R(_objectSpread$R({}, state), payload);
7715
+ return _objectSpread$U(_objectSpread$U({}, state), payload);
7716
+ case 'FG_HIGHLIGHT':
7717
+ return _objectSpread$U(_objectSpread$U({}, state), {}, {
7718
+ functionalGroupInfo: payload
7719
+ });
7696
7720
  default:
7697
7721
  return state;
7698
7722
  }
@@ -7705,6 +7729,15 @@ var initFGroups = function initFGroups(lib) {
7705
7729
  }
7706
7730
  };
7707
7731
  };
7732
+ var highlightFGroup = function highlightFGroup(group) {
7733
+ return {
7734
+ type: 'FG_HIGHLIGHT',
7735
+ payload: group
7736
+ };
7737
+ };
7738
+ function highlightFG(dispatch, group) {
7739
+ dispatch(highlightFGroup(group));
7740
+ }
7708
7741
  function initFGTemplates(baseUrl) {
7709
7742
  return function () {
7710
7743
  var _ref2 = _asyncToGenerator( _regeneratorRuntime.mark(function _callee(dispatch) {
@@ -7744,8 +7777,78 @@ function initFGTemplates(baseUrl) {
7744
7777
  }();
7745
7778
  }
7746
7779
 
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; }
7780
+ 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; }
7781
+ 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; }
7782
+ var initialState = {
7783
+ lib: [],
7784
+ mode: 'fg'
7785
+ };
7786
+ var saltsAndSolventsReducer = function saltsAndSolventsReducer() {
7787
+ var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState;
7788
+ var _ref = arguments.length > 1 ? arguments[1] : undefined,
7789
+ type = _ref.type,
7790
+ payload = _ref.payload;
7791
+ switch (type) {
7792
+ case 'SALTS_AND_SOLVENTS_INIT':
7793
+ return _objectSpread$T(_objectSpread$T({}, state), payload);
7794
+ default:
7795
+ return state;
7796
+ }
7797
+ };
7798
+ var initSaltsAndSolvents = function initSaltsAndSolvents(lib) {
7799
+ return {
7800
+ type: 'SALTS_AND_SOLVENTS_INIT',
7801
+ payload: {
7802
+ lib: lib
7803
+ }
7804
+ };
7805
+ };
7806
+ function initSaltsAndSolventsTemplates(baseUrl) {
7807
+ return function () {
7808
+ var _ref2 = _asyncToGenerator( _regeneratorRuntime.mark(function _callee(dispatch) {
7809
+ var fileName, url, saltsAndSolventsProvider, functionalGroupsProvider, sdfSerializer, text, templates, saltsAndSolvents;
7810
+ return _regeneratorRuntime.wrap(function _callee$(_context) {
7811
+ while (1) {
7812
+ switch (_context.prev = _context.next) {
7813
+ case 0:
7814
+ fileName = 'salts-and-solvents.sdf';
7815
+ url = "".concat(baseUrl, "/templates/").concat(fileName);
7816
+ saltsAndSolventsProvider = SaltsAndSolventsProvider.getInstance();
7817
+ functionalGroupsProvider = FunctionalGroupsProvider.getInstance();
7818
+ sdfSerializer = new SdfSerializer();
7819
+ _context.next = 7;
7820
+ return prefetchStatic(url);
7821
+ case 7:
7822
+ text = _context.sent;
7823
+ templates = sdfSerializer.deserialize(text);
7824
+ saltsAndSolvents = templates.reduce(function (acc, _ref3) {
7825
+ var struct = _ref3.struct,
7826
+ props = _ref3.props;
7827
+ struct.abbreviation = String(props.abbreviation);
7828
+ acc.push(struct);
7829
+ return acc;
7830
+ }, []);
7831
+ saltsAndSolventsProvider.setSaltsAndSolventsList(saltsAndSolvents);
7832
+ functionalGroupsProvider.addToFunctionalGroupsList(saltsAndSolvents);
7833
+ dispatch(initSaltsAndSolvents(templates));
7834
+ dispatch(appUpdate({
7835
+ saltsAndSolvents: true
7836
+ }));
7837
+ case 14:
7838
+ case "end":
7839
+ return _context.stop();
7840
+ }
7841
+ }
7842
+ }, _callee);
7843
+ }));
7844
+ return function (_x) {
7845
+ return _ref2.apply(this, arguments);
7846
+ };
7847
+ }();
7848
+ }
7849
+
7850
+ 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; }
7851
+ 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
7852
  var initial = {
7750
7853
  freqAtoms: [],
7751
7854
  currentAtom: 0,
@@ -7765,7 +7868,7 @@ function updateVisibleTools(visibleTool, activeTool) {
7765
7868
  if (key === 'shape' && menuHeight > 900) return res;
7766
7869
  if (!key.match(regExp) || menuHeight > 700) res[key] = visibleTool[key];
7767
7870
  return res;
7768
- }, _objectSpread$Q({}, activeTool));
7871
+ }, _objectSpread$S({}, activeTool));
7769
7872
  }
7770
7873
  function initResize() {
7771
7874
  return function (dispatch, getState) {
@@ -7789,41 +7892,41 @@ function toolbarReducer () {
7789
7892
  case 'ACTION':
7790
7893
  {
7791
7894
  var visibleTool = toolInMenu(action.action);
7792
- return visibleTool ? _objectSpread$Q(_objectSpread$Q({}, state), {}, {
7895
+ return visibleTool ? _objectSpread$S(_objectSpread$S({}, state), {}, {
7793
7896
  opened: null,
7794
- visibleTools: _objectSpread$Q(_objectSpread$Q({}, state.visibleTools), visibleTool)
7795
- }) : _objectSpread$Q(_objectSpread$Q({}, state), {}, {
7897
+ visibleTools: _objectSpread$S(_objectSpread$S({}, state.visibleTools), visibleTool)
7898
+ }) : _objectSpread$S(_objectSpread$S({}, state), {}, {
7796
7899
  opened: null
7797
7900
  });
7798
7901
  }
7799
7902
  case 'ADD_ATOMS':
7800
7903
  {
7801
7904
  var newState = addFreqAtom(data, state.freqAtoms, state.currentAtom);
7802
- return _objectSpread$Q(_objectSpread$Q({}, state), newState);
7905
+ return _objectSpread$S(_objectSpread$S({}, state), newState);
7803
7906
  }
7804
7907
  case 'CLEAR_VISIBLE':
7805
7908
  {
7806
7909
  var activeTool = toolInMenu(action.data);
7807
7910
  var correctTools = updateVisibleTools(state.visibleTools, activeTool);
7808
- return _objectSpread$Q(_objectSpread$Q({}, state), {}, {
7911
+ return _objectSpread$S(_objectSpread$S({}, state), {}, {
7809
7912
  opened: null,
7810
- visibleTools: _objectSpread$Q({}, correctTools)
7913
+ visibleTools: _objectSpread$S({}, correctTools)
7811
7914
  });
7812
7915
  }
7813
7916
  case 'OPENED':
7814
7917
  {
7815
- return data.isSelected && state.opened ? _objectSpread$Q(_objectSpread$Q({}, state), {}, {
7918
+ return data.isSelected && state.opened ? _objectSpread$S(_objectSpread$S({}, state), {}, {
7816
7919
  opened: null
7817
- }) : _objectSpread$Q(_objectSpread$Q({}, state), {}, {
7920
+ }) : _objectSpread$S(_objectSpread$S({}, state), {}, {
7818
7921
  opened: data.menuName
7819
7922
  });
7820
7923
  }
7821
7924
  case 'UPDATE':
7822
- return _objectSpread$Q(_objectSpread$Q({}, state), {}, {
7925
+ return _objectSpread$S(_objectSpread$S({}, state), {}, {
7823
7926
  opened: null
7824
7927
  });
7825
7928
  case 'MODAL_OPEN':
7826
- return _objectSpread$Q(_objectSpread$Q({}, state), {}, {
7929
+ return _objectSpread$S(_objectSpread$S({}, state), {}, {
7827
7930
  opened: null
7828
7931
  });
7829
7932
  default:
@@ -7867,9 +7970,9 @@ function hiddenAncestor(el, base) {
7867
7970
  }
7868
7971
 
7869
7972
  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; }
7973
+ _excluded2$5 = ["buttons"];
7974
+ 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; }
7975
+ 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
7976
  var shared = combineReducers({
7874
7977
  actionState: actionStateReducer,
7875
7978
  toolbar: toolbarReducer,
@@ -7885,6 +7988,7 @@ var shared = combineReducers({
7885
7988
  options: optionsReducer,
7886
7989
  templates: templatesReducer,
7887
7990
  functionalGroups: functionalGroupsReducer,
7991
+ saltsAndSolvents: saltsAndSolventsReducer,
7888
7992
  requestsStatuses: requestReducer
7889
7993
  });
7890
7994
  function getRootReducer(setEditor) {
@@ -7895,10 +7999,10 @@ function getRootReducer(setEditor) {
7895
7999
  case 'UPDATE':
7896
8000
  action.type;
7897
8001
  var data = _objectWithoutProperties(action, _excluded$z);
7898
- if (data) state = _objectSpread$P(_objectSpread$P({}, state), data);
8002
+ if (data) state = _objectSpread$R(_objectSpread$R({}, state), data);
7899
8003
  }
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);
8004
+ var sh = shared(state, _objectSpread$R(_objectSpread$R({}, action), pick(['editor', 'server', 'options'], state)));
8005
+ var finalState = sh === state.shared ? state : _objectSpread$R(_objectSpread$R({}, state), sh);
7902
8006
  global.currentState = finalState;
7903
8007
  return finalState;
7904
8008
  };
@@ -7906,7 +8010,7 @@ function getRootReducer(setEditor) {
7906
8010
  function createStore (options, server, setEditor) {
7907
8011
  var _options$buttons = options.buttons,
7908
8012
  buttons = _options$buttons === void 0 ? {} : _options$buttons,
7909
- restOptions = _objectWithoutProperties(options, _excluded2$6);
8013
+ restOptions = _objectWithoutProperties(options, _excluded2$5);
7910
8014
  var initState = {
7911
8015
  actionState: null,
7912
8016
  editor: null,
@@ -7981,14 +8085,14 @@ var selectOptions$2 = makeItems(['select-rectangle', 'select-lasso', 'select-fra
7981
8085
  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
8086
  var mappingOptions = makeItems(['reaction-map', 'reaction-unmap', 'reaction-automap']);
7983
8087
 
7984
- var classes$I = {"scroll":"ArrowScroll-module_scroll__h9kCx","button":"ArrowScroll-module_button__ygMgL","down":"ArrowScroll-module_down__yDzZX","up":"ArrowScroll-module_up__Q1ubd"};
8088
+ var classes$J = {"scroll":"ArrowScroll-module_scroll__h9kCx","button":"ArrowScroll-module_button__ygMgL","down":"ArrowScroll-module_down__yDzZX","up":"ArrowScroll-module_up__Q1ubd"};
7985
8089
 
7986
8090
  function useSettingsContext() {
7987
8091
  return React__default.useContext(settingsContext);
7988
8092
  }
7989
8093
 
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; }
8094
+ 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; }
8095
+ 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
8096
  var throttleMilliseconds = 100;
7993
8097
  function useThrottleResizeObserver() {
7994
8098
  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
@@ -8002,11 +8106,11 @@ function useThrottleResizeObserver() {
8002
8106
  var onResize = useMemo(function () {
8003
8107
  return throttle$1(setSize, throttleMilliseconds);
8004
8108
  }, []);
8005
- var _useResizeObserver = useResizeObserver(_objectSpread$O({
8109
+ var _useResizeObserver = useResizeObserver(_objectSpread$Q({
8006
8110
  onResize: onResize
8007
8111
  }, options)),
8008
8112
  ref = _useResizeObserver.ref;
8009
- return _objectSpread$O({
8113
+ return _objectSpread$Q({
8010
8114
  ref: ref
8011
8115
  }, size);
8012
8116
  }
@@ -8102,7 +8206,7 @@ var ArrowScroll = function ArrowScroll(_ref) {
8102
8206
  };
8103
8207
  }, [endInView]);
8104
8208
  return jsxs("div", {
8105
- className: classes$I.scroll,
8209
+ className: classes$J.scroll,
8106
8210
  children: [endInView ? jsx(Fragment, {}) : jsx("button", {
8107
8211
  onClick: function onClick() {
8108
8212
  return scrollDown();
@@ -8113,7 +8217,7 @@ var ArrowScroll = function ArrowScroll(_ref) {
8113
8217
  onMouseDown: function onMouseDown() {
8114
8218
  return setScrollDown(true);
8115
8219
  },
8116
- className: clsx(classes$I.button, classes$I.down),
8220
+ className: clsx(classes$J.button, classes$J.down),
8117
8221
  children: "\u25BC"
8118
8222
  }), startInView ? jsx(Fragment, {}) : jsx("button", {
8119
8223
  onClick: function onClick() {
@@ -8125,7 +8229,7 @@ var ArrowScroll = function ArrowScroll(_ref) {
8125
8229
  onMouseDown: function onMouseDown() {
8126
8230
  return setScrollUp(true);
8127
8231
  },
8128
- className: clsx(classes$I.button, classes$I.up),
8232
+ className: clsx(classes$J.button, classes$J.up),
8129
8233
  children: "\u25B2"
8130
8234
  })]
8131
8235
  });
@@ -8140,13 +8244,13 @@ var mediaSizes$2 = {
8140
8244
  };
8141
8245
 
8142
8246
  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; }
8247
+ 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; }
8248
+ 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
8249
  var Bond$1 = function Bond(props) {
8146
8250
  var height = props.height,
8147
8251
  rest = _objectWithoutProperties(props, _excluded$y);
8148
8252
  if (height && height <= mediaSizes$2.bondCollapsableHeight) {
8149
- return jsx(ToolbarMultiToolItem, _objectSpread$N({
8253
+ return jsx(ToolbarMultiToolItem, _objectSpread$P({
8150
8254
  id: "bonds",
8151
8255
  options: groupOptions,
8152
8256
  variant: "grouped",
@@ -8154,68 +8258,68 @@ var Bond$1 = function Bond(props) {
8154
8258
  }, rest));
8155
8259
  }
8156
8260
  return jsxs(Fragment, {
8157
- children: [jsx(ToolbarMultiToolItem, _objectSpread$N({
8261
+ children: [jsx(ToolbarMultiToolItem, _objectSpread$P({
8158
8262
  id: "bond-common",
8159
8263
  options: bondCommon
8160
- }, rest)), jsx(ToolbarMultiToolItem, _objectSpread$N({
8264
+ }, rest)), jsx(ToolbarMultiToolItem, _objectSpread$P({
8161
8265
  id: "bond-stereo",
8162
8266
  options: bondStereo
8163
- }, rest)), jsx(ToolbarMultiToolItem, _objectSpread$N({
8267
+ }, rest)), jsx(ToolbarMultiToolItem, _objectSpread$P({
8164
8268
  id: "bond-query",
8165
8269
  options: bondQuery
8166
- }, rest)), jsx(ToolbarMultiToolItem, _objectSpread$N({
8270
+ }, rest)), jsx(ToolbarMultiToolItem, _objectSpread$P({
8167
8271
  id: "bond-special",
8168
8272
  options: bondSpecial
8169
8273
  }, rest))]
8170
8274
  });
8171
8275
  };
8172
8276
 
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; }
8277
+ 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; }
8278
+ 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
8279
  var RGroup$1 = function RGroup(props) {
8176
- return jsx(ToolbarGroupItem, _objectSpread$M({
8280
+ return jsx(ToolbarGroupItem, _objectSpread$O({
8177
8281
  id: "rgroup",
8178
8282
  options: rGroupOptions
8179
8283
  }, props));
8180
8284
  };
8181
8285
 
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; }
8286
+ 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; }
8287
+ 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
8288
  var Shape = function Shape(props) {
8185
- return jsx(ToolbarGroupItem, _objectSpread$L({
8289
+ return jsx(ToolbarGroupItem, _objectSpread$N({
8186
8290
  id: "shapes",
8187
8291
  options: shapeOptions
8188
8292
  }, props));
8189
8293
  };
8190
8294
 
8191
8295
  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; }
8296
+ 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; }
8297
+ 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
8298
  var Transform = function Transform(props) {
8195
8299
  var height = props.height,
8196
8300
  rest = _objectWithoutProperties(props, _excluded$x);
8197
8301
  if (height && height <= mediaSizes$2.transformCollapsableHeight) {
8198
- return jsx(ToolbarGroupItem, _objectSpread$K({
8302
+ return jsx(ToolbarGroupItem, _objectSpread$M({
8199
8303
  id: "transforms",
8200
8304
  options: transformOptions
8201
8305
  }, rest));
8202
8306
  }
8203
8307
  return jsxs(Fragment, {
8204
- children: [jsx(ToolbarGroupItem, _objectSpread$K({
8308
+ children: [jsx(ToolbarGroupItem, _objectSpread$M({
8205
8309
  id: "transform-rotate"
8206
- }, rest)), jsx(ToolbarGroupItem, _objectSpread$K({
8310
+ }, rest)), jsx(ToolbarGroupItem, _objectSpread$M({
8207
8311
  id: "transform-flip-h"
8208
- }, rest)), jsx(ToolbarGroupItem, _objectSpread$K({
8312
+ }, rest)), jsx(ToolbarGroupItem, _objectSpread$M({
8209
8313
  id: "transform-flip-v"
8210
8314
  }, rest))]
8211
8315
  });
8212
8316
  };
8213
8317
 
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"};
8318
+ 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
8319
 
8216
8320
  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; }
8321
+ 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; }
8322
+ 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
8323
  var LeftToolbar = function LeftToolbar(props) {
8220
8324
  var className = props.className,
8221
8325
  rest = _objectWithoutProperties(props, _excluded$w);
@@ -8239,7 +8343,7 @@ var LeftToolbar = function LeftToolbar(props) {
8239
8343
  var Item = function Item(_ref) {
8240
8344
  var id = _ref.id,
8241
8345
  options = _ref.options;
8242
- return ToolbarGroupItem(_objectSpread$J({
8346
+ return ToolbarGroupItem(_objectSpread$L({
8243
8347
  id: id,
8244
8348
  options: options
8245
8349
  }, rest));
@@ -8271,25 +8375,25 @@ var LeftToolbar = function LeftToolbar(props) {
8271
8375
  });
8272
8376
  }
8273
8377
  return visibleItems.length ? jsx("div", {
8274
- className: clsx(classes$H.group, className),
8378
+ className: clsx(classes$I.group, className),
8275
8379
  children: visibleItems.map(function (item) {
8276
8380
  switch (item.id) {
8277
8381
  case 'bond-common':
8278
- return createElement(Bond$1, _objectSpread$J(_objectSpread$J({}, rest), {}, {
8382
+ return createElement(Bond$1, _objectSpread$L(_objectSpread$L({}, rest), {}, {
8279
8383
  height: height,
8280
8384
  key: item.id
8281
8385
  }));
8282
8386
  case 'transform-rotate':
8283
- return createElement(Transform, _objectSpread$J(_objectSpread$J({}, rest), {}, {
8387
+ return createElement(Transform, _objectSpread$L(_objectSpread$L({}, rest), {}, {
8284
8388
  height: height,
8285
8389
  key: item.id
8286
8390
  }));
8287
8391
  case 'rgroup':
8288
- return createElement(RGroup$1, _objectSpread$J(_objectSpread$J({}, rest), {}, {
8392
+ return createElement(RGroup$1, _objectSpread$L(_objectSpread$L({}, rest), {}, {
8289
8393
  key: item.id
8290
8394
  }));
8291
8395
  case 'shapes':
8292
- return createElement(Shape, _objectSpread$J(_objectSpread$J({}, rest), {}, {
8396
+ return createElement(Shape, _objectSpread$L(_objectSpread$L({}, rest), {}, {
8293
8397
  key: item.id
8294
8398
  }));
8295
8399
  default:
@@ -8302,16 +8406,16 @@ var LeftToolbar = function LeftToolbar(props) {
8302
8406
  }) : null;
8303
8407
  };
8304
8408
  return jsxs("div", {
8305
- className: clsx(classes$H.root, className),
8409
+ className: clsx(classes$I.root, className),
8306
8410
  ref: ref,
8307
8411
  children: [jsxs("div", {
8308
- className: classes$H.buttons,
8412
+ className: classes$I.buttons,
8309
8413
  ref: scrollRef,
8310
8414
  children: [jsx("div", {
8311
- className: classes$H.listener,
8415
+ className: classes$I.listener,
8312
8416
  ref: startRef,
8313
8417
  children: jsx(Group, {
8314
- className: classes$H.groupItem,
8418
+ className: classes$I.groupItem,
8315
8419
  items: [{
8316
8420
  id: 'hand'
8317
8421
  }, {
@@ -8322,7 +8426,7 @@ var LeftToolbar = function LeftToolbar(props) {
8322
8426
  }]
8323
8427
  })
8324
8428
  }), jsx(Group, {
8325
- className: classes$H.groupItem,
8429
+ className: classes$I.groupItem,
8326
8430
  items: [{
8327
8431
  id: 'bonds',
8328
8432
  options: [].concat(_toConsumableArray(bondCommon), _toConsumableArray(bondQuery), _toConsumableArray(bondSpecial), _toConsumableArray(bondStereo))
@@ -8330,27 +8434,27 @@ var LeftToolbar = function LeftToolbar(props) {
8330
8434
  id: 'chain'
8331
8435
  }]
8332
8436
  }), jsx(Group, {
8333
- className: classes$H.groupItem,
8437
+ className: classes$I.groupItem,
8334
8438
  items: [{
8335
8439
  id: 'charge-plus'
8336
8440
  }, {
8337
8441
  id: 'charge-minus'
8338
8442
  }]
8339
8443
  }), jsx(Group, {
8340
- className: classes$H.groupItem,
8444
+ className: classes$I.groupItem,
8341
8445
  items: [{
8342
8446
  id: 'transforms',
8343
8447
  options: transformOptions
8344
8448
  }]
8345
8449
  }), jsx(Group, {
8346
- className: classes$H.groupItem,
8450
+ className: classes$I.groupItem,
8347
8451
  items: [{
8348
8452
  id: 'sgroup'
8349
8453
  }, {
8350
8454
  id: 'sgroup-data'
8351
8455
  }]
8352
8456
  }), jsx(Group, {
8353
- className: classes$H.groupItem,
8457
+ className: classes$I.groupItem,
8354
8458
  items: [{
8355
8459
  id: 'reaction-plus'
8356
8460
  }, {
@@ -8361,17 +8465,17 @@ var LeftToolbar = function LeftToolbar(props) {
8361
8465
  options: mappingOptions
8362
8466
  }]
8363
8467
  }), jsx("div", {
8364
- className: classes$H.listener,
8468
+ className: classes$I.listener,
8365
8469
  ref: sizeRef,
8366
8470
  children: jsx(Group, {
8367
- className: classes$H.groupItem,
8471
+ className: classes$I.groupItem,
8368
8472
  items: [{
8369
8473
  id: 'rgroup',
8370
8474
  options: rGroupOptions
8371
8475
  }]
8372
8476
  })
8373
8477
  }), jsx(Group, {
8374
- className: classes$H.groupItem,
8478
+ className: classes$I.groupItem,
8375
8479
  items: [{
8376
8480
  id: 'shapes',
8377
8481
  options: shapeOptions
@@ -8379,7 +8483,7 @@ var LeftToolbar = function LeftToolbar(props) {
8379
8483
  }), jsx("div", {
8380
8484
  ref: endRef,
8381
8485
  children: jsx(Group, {
8382
- className: classes$H.groupItem,
8486
+ className: classes$I.groupItem,
8383
8487
  items: [{
8384
8488
  id: 'text'
8385
8489
  }]
@@ -8420,19 +8524,19 @@ var mapDispatchToProps$h = function mapDispatchToProps(dispatch) {
8420
8524
  };
8421
8525
  var LeftToolbarContainer = connect(mapStateToProps$i, mapDispatchToProps$h)(LeftToolbar);
8422
8526
 
8423
- var classes$G = {"button-common-styles":"Atom-module_button-common-styles__j3EUJ","scrollbar":"Atom-module_scrollbar__iO-Ni","atom":"Atom-module_atom__g2RUu"};
8527
+ var classes$H = {"button-common-styles":"Atom-module_button-common-styles__j3EUJ","scrollbar":"Atom-module_scrollbar__iO-Ni","atom":"Atom-module_atom__g2RUu"};
8424
8528
 
8425
8529
  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; }
8530
+ 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; }
8531
+ 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
8532
  function Atom$1(_ref) {
8429
8533
  var el = _ref.el,
8430
8534
  shortcut = _ref.shortcut,
8431
8535
  selected = _ref.selected,
8432
8536
  props = _objectWithoutProperties(_ref, _excluded$v);
8433
- return jsx("button", _objectSpread$I(_objectSpread$I({
8537
+ return jsx("button", _objectSpread$K(_objectSpread$K({
8434
8538
  title: shortcut ? "".concat(el.title, " (").concat(shortcut, ")") : el.title,
8435
- className: clsx(classes$G.atom, {
8539
+ className: clsx(classes$H.atom, {
8436
8540
  selected: selected
8437
8541
  }),
8438
8542
  value: el.number
@@ -8811,16 +8915,16 @@ var AtomsList = forwardRef(function (props, ref) {
8811
8915
  });
8812
8916
  });
8813
8917
 
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"};
8918
+ 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
8919
 
8816
8920
  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; }
8921
+ 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; }
8922
+ 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
8923
  var Group = function Group(_ref) {
8820
8924
  var children = _ref.children,
8821
8925
  className = _ref.className;
8822
8926
  return jsx("div", {
8823
- className: clsx(classes$F.group, className),
8927
+ className: clsx(classes$G.group, className),
8824
8928
  children: children
8825
8929
  });
8826
8930
  };
@@ -8851,12 +8955,12 @@ var RightToolbar = function RightToolbar(props) {
8851
8955
  scrollRef.current.scrollTop += sizeRef.current.offsetHeight;
8852
8956
  };
8853
8957
  return jsxs("div", {
8854
- className: clsx(classes$F.root, className),
8958
+ className: clsx(classes$G.root, className),
8855
8959
  children: [jsxs("div", {
8856
- className: classes$F.buttons,
8960
+ className: classes$G.buttons,
8857
8961
  ref: scrollRef,
8858
8962
  children: [jsxs(Group, {
8859
- className: classes$F.atomsList,
8963
+ className: classes$G.atomsList,
8860
8964
  children: [jsx(AtomsList, {
8861
8965
  ref: startRef,
8862
8966
  atoms: basicAtoms,
@@ -8866,15 +8970,15 @@ var RightToolbar = function RightToolbar(props) {
8866
8970
  atoms: freqAtoms,
8867
8971
  active: active,
8868
8972
  onAction: onAction
8869
- }), jsx(ToolbarGroupItem, _objectSpread$H({
8973
+ }), jsx(ToolbarGroupItem, _objectSpread$J({
8870
8974
  id: "period-table"
8871
8975
  }, rest))]
8872
8976
  }), jsx(Group, {
8873
8977
  children: jsxs("div", {
8874
8978
  ref: sizeRef,
8875
- children: [jsx(ToolbarGroupItem, _objectSpread$H({
8979
+ children: [jsx(ToolbarGroupItem, _objectSpread$J({
8876
8980
  id: "any-atom"
8877
- }, rest)), jsx(ToolbarGroupItem, _objectSpread$H({
8981
+ }, rest)), jsx(ToolbarGroupItem, _objectSpread$J({
8878
8982
  id: "extended-table"
8879
8983
  }, rest))]
8880
8984
  })
@@ -9726,6 +9830,11 @@ function lookup(map, event) {
9726
9830
  }
9727
9831
  keyNorm.lookup = lookup;
9728
9832
 
9833
+ 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; } } }; }
9834
+ 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); }
9835
+ 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; }
9836
+ 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; }
9837
+ 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
9838
  function initKeydownListener(element) {
9730
9839
  return function (dispatch, getState) {
9731
9840
  var hotKeys = initHotKeys();
@@ -9737,6 +9846,7 @@ function initKeydownListener(element) {
9737
9846
  function keyHandle(dispatch, state, hotKeys, event) {
9738
9847
  if (state.modal) return;
9739
9848
  var editor = state.editor;
9849
+ var render = editor.render;
9740
9850
  var actionState = state.actionState;
9741
9851
  var actionTool = actionState.activeTool;
9742
9852
  var key = keyNorm(event);
@@ -9756,7 +9866,8 @@ function keyHandle(dispatch, state, hotKeys, event) {
9756
9866
  event.preventDefault();
9757
9867
  } else if ((group = keyNorm.lookup(hotKeys, event)) !== undefined) {
9758
9868
  var index = checkGroupOnTool(group, actionTool);
9759
- index = (index + 1) % group.length;
9869
+ var groupLength = group !== null ? group.length : 1;
9870
+ index = (index + 1) % groupLength;
9760
9871
  var actName = group[index];
9761
9872
  if (actionState[actName] && actionState[actName].disabled === true) {
9762
9873
  event.preventDefault();
@@ -9764,13 +9875,38 @@ function keyHandle(dispatch, state, hotKeys, event) {
9764
9875
  }
9765
9876
  if (actions.indexOf(actName) === -1) {
9766
9877
  var newAction = config[actName].action;
9767
- dispatch(onAction(newAction));
9878
+ var hoverItemId = getHoveredAtomId(render.ctab.atoms);
9879
+ var isHoveringOverAtom = hoverItemId !== null;
9880
+ if (isHoveringOverAtom) {
9881
+ var atomProps = _objectSpread$I({}, newAction.opts);
9882
+ var updatedAtoms = fromAtomsAttrs(render.ctab, hoverItemId, atomProps, true);
9883
+ editor.update(updatedAtoms);
9884
+ } else {
9885
+ dispatch(onAction(newAction));
9886
+ }
9768
9887
  event.preventDefault();
9769
- } else if (window.clipboardData) {
9888
+ } else if (isIE) {
9770
9889
  exec(event);
9771
9890
  }
9772
9891
  }
9773
9892
  }
9893
+ function getHoveredAtomId(atoms) {
9894
+ var _iterator = _createForOfIteratorHelper$e(atoms.entries()),
9895
+ _step;
9896
+ try {
9897
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
9898
+ var _step$value = _slicedToArray(_step.value, 2),
9899
+ id = _step$value[0],
9900
+ atom = _step$value[1];
9901
+ if (atom.hover) return id;
9902
+ }
9903
+ } catch (err) {
9904
+ _iterator.e(err);
9905
+ } finally {
9906
+ _iterator.f();
9907
+ }
9908
+ return null;
9909
+ }
9774
9910
  function setHotKey(key, actName, hotKeys) {
9775
9911
  if (Array.isArray(hotKeys[key])) hotKeys[key].push(actName);else hotKeys[key] = [actName];
9776
9912
  }
@@ -9798,7 +9934,7 @@ function checkGroupOnTool(group, actionTool) {
9798
9934
  return index;
9799
9935
  }
9800
9936
  var rxnTextPlain = /\$RXN\n+\s+0\s+0\s+0\n*/;
9801
- function initClipboard(dispatch, getState) {
9937
+ function initClipboard(dispatch) {
9802
9938
  var formats = Object.keys(formatProperties).map(function (format) {
9803
9939
  return formatProperties[format].mime;
9804
9940
  });
@@ -9845,7 +9981,7 @@ function clipData(editor) {
9845
9981
  var errorHandler = editor.errorHandler;
9846
9982
  if (struct.isBlank()) return null;
9847
9983
  var simpleObjectOrText = Boolean(struct.simpleObjects.size || struct.texts.size);
9848
- if (simpleObjectOrText && window.clipboardData) {
9984
+ if (simpleObjectOrText && isIE) {
9849
9985
  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
9986
  return null;
9851
9987
  }
@@ -9859,8 +9995,8 @@ function clipData(editor) {
9859
9995
  res['text/plain'] = data;
9860
9996
  res[type] = data;
9861
9997
  return res;
9862
- } catch (ex) {
9863
- errorHandler(ex.message);
9998
+ } catch (e) {
9999
+ errorHandler(e.message);
9864
10000
  }
9865
10001
  return null;
9866
10002
  }
@@ -9894,7 +10030,7 @@ var mapDispatchToProps$d = function mapDispatchToProps(dispatch) {
9894
10030
  };
9895
10031
  var AppHiddenContainer = connect(null, mapDispatchToProps$d)(AppHidden);
9896
10032
 
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"};
10033
+ 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
10034
 
9899
10035
  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
10036
 
@@ -9906,8 +10042,8 @@ var mediaSizes$1 = {
9906
10042
  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
10043
 
9908
10044
  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; }
10045
+ 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; }
10046
+ 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
10047
  var Dialog = function Dialog(props) {
9912
10048
  var children = props.children,
9913
10049
  title = props.title,
@@ -9960,7 +10096,7 @@ var Dialog = function Dialog(props) {
9960
10096
  event.stopPropagation();
9961
10097
  }
9962
10098
  };
9963
- return jsxs("div", _objectSpread$G(_objectSpread$G({
10099
+ return jsxs("div", _objectSpread$H(_objectSpread$H({
9964
10100
  ref: dialogRef,
9965
10101
  role: "dialog",
9966
10102
  onSubmit: function onSubmit(event) {
@@ -10017,8 +10153,8 @@ var LoadingCircles = function LoadingCircles() {
10017
10153
  };
10018
10154
 
10019
10155
  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; }
10156
+ 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; }
10157
+ 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
10158
  var SELECTION_DISTANCE_COEFFICIENT = 0.4;
10023
10159
  var SELECTION_WITHIN_TEXT = 0;
10024
10160
  var findMaps = {
@@ -10353,7 +10489,7 @@ function findClosestItem(restruct, pos, maps, skip, scale) {
10353
10489
  var id = item.id,
10354
10490
  dist = item.dist,
10355
10491
  other = _objectWithoutProperties(item, _excluded$s);
10356
- return _objectSpread$F({
10492
+ return _objectSpread$G({
10357
10493
  map: mp,
10358
10494
  id: id,
10359
10495
  dist: dist
@@ -10680,6 +10816,7 @@ var AtomTool = function () {
10680
10816
  type: 1,
10681
10817
  stereo: Bond$2.PATTERN.STEREO.NONE
10682
10818
  });
10819
+ this.editor.hoverIcon.show().attr('text', "".concat(atomProps.label)).attr('fill', "".concat(ElementColor[atomProps.label]));
10683
10820
  if (editor.selection()) {
10684
10821
  var _editor$selection;
10685
10822
  if ((_editor$selection = editor.selection()) !== null && _editor$selection !== void 0 && _editor$selection.atoms) {
@@ -10763,12 +10900,31 @@ var AtomTool = function () {
10763
10900
  };
10764
10901
  }
10765
10902
  }
10903
+ }, {
10904
+ key: "mouseleave",
10905
+ value: function mouseleave() {
10906
+ this.editor.hoverIcon.hide();
10907
+ }
10908
+ }, {
10909
+ key: "mouseover",
10910
+ value: function mouseover() {
10911
+ this.editor.hoverIcon.show();
10912
+ }
10766
10913
  }, {
10767
10914
  key: "mousemove",
10768
10915
  value: function mousemove(event) {
10769
10916
  var rnd = this.editor.render;
10917
+ var layerX = event.layerX,
10918
+ layerY = event.layerY;
10770
10919
  if (!this.dragCtx || !this.dragCtx.item) {
10771
- this.editor.hover(this.editor.findItem(event, ['atoms', 'functionalGroups']));
10920
+ var _this$editor$hoverIco = this.editor.hoverIcon.getBBox(),
10921
+ height = _this$editor$hoverIco.height,
10922
+ width = _this$editor$hoverIco.width;
10923
+ this.editor.hoverIcon.attr({
10924
+ x: layerX - width / 2,
10925
+ y: layerY - height / 2
10926
+ });
10927
+ this.editor.hover(this.editor.findItem(event, ['atoms', 'functionalGroups']), null, event);
10772
10928
  return;
10773
10929
  }
10774
10930
  var dragCtx = this.dragCtx;
@@ -11170,12 +11326,16 @@ var BondTool = function () {
11170
11326
  beginPos = utils.calcNewAtomPos(atom === null || atom === void 0 ? void 0 : atom.pp.get_xy0(), xy1, event.ctrlKey);
11171
11327
  }
11172
11328
  }
11173
- if (dist > 0.3) dragCtx.action = fromBondAddition(rnd.ctab, this.bondProps, beginAtom, endAtom, beginPos, endPos)[0];else delete dragCtx.action;
11329
+ if (dist > 0.3) {
11330
+ dragCtx.action = fromBondAddition(rnd.ctab, this.bondProps, beginAtom, endAtom, beginPos, endPos)[0];
11331
+ } else {
11332
+ delete dragCtx.action;
11333
+ }
11174
11334
  this.editor.update(dragCtx.action, true);
11175
11335
  return true;
11176
11336
  }
11177
11337
  }
11178
- this.editor.hover(this.editor.findItem(event, ['atoms', 'bonds']));
11338
+ this.editor.hover(this.editor.findItem(event, ['atoms', 'bonds']), null, event);
11179
11339
  return true;
11180
11340
  }
11181
11341
  }, {
@@ -11309,7 +11469,7 @@ var ChainTool = function () {
11309
11469
  var editor = this.editor;
11310
11470
  var restruct = editor.render.ctab;
11311
11471
  var dragCtx = this.dragCtx;
11312
- editor.hover(this.editor.findItem(event, ['atoms', 'bonds']));
11472
+ editor.hover(this.editor.findItem(event, ['atoms', 'bonds']), null, event);
11313
11473
  if (!dragCtx) {
11314
11474
  return true;
11315
11475
  }
@@ -11443,7 +11603,7 @@ var ChargeTool = function () {
11443
11603
  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
11604
  this.editor.hover(ci);
11445
11605
  } else {
11446
- this.editor.hover(null);
11606
+ this.editor.hover(null, null, event);
11447
11607
  }
11448
11608
  return true;
11449
11609
  }
@@ -12343,8 +12503,8 @@ function countOfSelectedComponents(restruct, atoms) {
12343
12503
  }, 0);
12344
12504
  }
12345
12505
 
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; }
12506
+ 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; }
12507
+ 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
12508
  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
12509
  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
12510
  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 +12688,7 @@ var SelectTool = function () {
12528
12688
  return true;
12529
12689
  }
12530
12690
  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));
12691
+ editor.hover(editor.findItem(event, maps, null), null, event);
12532
12692
  return true;
12533
12693
  }
12534
12694
  }, {
@@ -12614,6 +12774,16 @@ var SelectTool = function () {
12614
12774
  }
12615
12775
  var dragCtx = this.dragCtx;
12616
12776
  if (dragCtx && dragCtx.stopTapping) dragCtx.stopTapping();
12777
+ var possibleSaltOrSolvent = struct.sgroups.get(actualSgroupId);
12778
+ var isDraggingSaltOrSolventOnStructure = SGroup.isSaltOrSolvent(possibleSaltOrSolvent === null || possibleSaltOrSolvent === void 0 ? void 0 : possibleSaltOrSolvent.item.data.name);
12779
+ if ((isDraggingSaltOrSolventOnStructure || this.isDraggingStructureOnSaltOrSolvent(dragCtx, struct.sgroups)) && dragCtx) {
12780
+ preventSaltAndSolventsMerge(struct, dragCtx, editor);
12781
+ delete this.dragCtx;
12782
+ if (_classPrivateFieldGet(this, _lassoHelper).running()) {
12783
+ this.selectElementsOnCanvas(newSelected, editor, event);
12784
+ }
12785
+ return true;
12786
+ }
12617
12787
  if (dragCtx && dragCtx.item) {
12618
12788
  dragCtx.action = dragCtx.action ? fromItemsFuse(struct, dragCtx.mergeItems).mergeWith(dragCtx.action) : fromItemsFuse(struct, dragCtx.mergeItems);
12619
12789
  editor.hover(null);
@@ -12621,8 +12791,7 @@ var SelectTool = function () {
12621
12791
  if (dragCtx.action.operations.length !== 0) editor.update(dragCtx.action);
12622
12792
  delete this.dragCtx;
12623
12793
  } 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));
12794
+ this.selectElementsOnCanvas(newSelected, editor, event);
12626
12795
  } else if (_classPrivateFieldGet(this, _lassoHelper).fragment) {
12627
12796
  if (!event.shiftKey) editor.selection(null);
12628
12797
  }
@@ -12738,7 +12907,7 @@ var SelectTool = function () {
12738
12907
  } else if (ci.map === 'texts') {
12739
12908
  editor.selection(closestToSel(ci));
12740
12909
  var text = molecule.texts.get(ci.id);
12741
- var dialog = editor.event.elementEdit.dispatch(_objectSpread$E(_objectSpread$E({}, text), {}, {
12910
+ var dialog = editor.event.elementEdit.dispatch(_objectSpread$F(_objectSpread$F({}, text), {}, {
12742
12911
  type: 'text'
12743
12912
  }));
12744
12913
  dialog.then(function (_ref) {
@@ -12766,6 +12935,33 @@ var SelectTool = function () {
12766
12935
  delete this.dragCtx;
12767
12936
  this.editor.hover(null);
12768
12937
  }
12938
+ }, {
12939
+ key: "selectElementsOnCanvas",
12940
+ value: function selectElementsOnCanvas(elements, editor, event) {
12941
+ var sel = elements.atoms.length > 0 ? selMerge(_classPrivateFieldGet(this, _lassoHelper).end(), elements, false) : _classPrivateFieldGet(this, _lassoHelper).end();
12942
+ editor.selection(!event.shiftKey ? sel : selMerge(sel, editor.selection(), false));
12943
+ }
12944
+ }, {
12945
+ key: "isDraggingStructureOnSaltOrSolvent",
12946
+ value: function isDraggingStructureOnSaltOrSolvent(dragCtx, sgroups) {
12947
+ var isDraggingOnSaltOrSolventAtom;
12948
+ var isDraggingOnSaltOrSolventBond;
12949
+ if (dragCtx !== null && dragCtx !== void 0 && dragCtx.mergeItems) {
12950
+ var mergeAtoms = Array.from(dragCtx.mergeItems.atoms.values());
12951
+ var mergeBonds = Array.from(dragCtx.mergeItems.bonds.values());
12952
+ var sgroupsOnCanvas = Array.from(sgroups.values()).map(function (_ref2) {
12953
+ var item = _ref2.item;
12954
+ return item;
12955
+ });
12956
+ isDraggingOnSaltOrSolventAtom = mergeAtoms.some(function (atomId) {
12957
+ return SGroup.isAtomInSaltOrSolvent(atomId, sgroupsOnCanvas);
12958
+ });
12959
+ isDraggingOnSaltOrSolventBond = mergeBonds.some(function (bondId) {
12960
+ return SGroup.isBondInSaltOrSolvent(bondId, sgroupsOnCanvas);
12961
+ });
12962
+ }
12963
+ return isDraggingOnSaltOrSolventAtom || isDraggingOnSaltOrSolventBond;
12964
+ }
12769
12965
  }]);
12770
12966
  return SelectTool;
12771
12967
  }();
@@ -12791,6 +12987,17 @@ function uniqArray(dest, add, reversible) {
12791
12987
  return dest;
12792
12988
  }, []);
12793
12989
  }
12990
+ function preventSaltAndSolventsMerge(struct, dragCtx, editor) {
12991
+ var action = dragCtx.action ? fromItemsFuse(struct, null).mergeWith(dragCtx.action) : fromItemsFuse(struct, null);
12992
+ editor.hover(null);
12993
+ if (dragCtx.mergeItems) {
12994
+ editor.selection(null);
12995
+ }
12996
+ editor.update(action);
12997
+ editor.event.message.dispatch({
12998
+ info: false
12999
+ });
13000
+ }
12794
13001
 
12795
13002
  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
13003
  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); }
@@ -13589,7 +13796,7 @@ var ReactionArrowTool = function () {
13589
13796
  }
13590
13797
  } else {
13591
13798
  var items = this.editor.findItem(event, ['rxnArrows']);
13592
- this.editor.hover(items);
13799
+ this.editor.hover(items, null, event);
13593
13800
  }
13594
13801
  }
13595
13802
  }, {
@@ -14294,7 +14501,7 @@ var TemplateTool = function () {
14294
14501
  value: function mousemove(event) {
14295
14502
  var restruct = this.editor.render.ctab;
14296
14503
  if (!this.dragCtx) {
14297
- this.editor.hover(this.editor.findItem(event, this.findItems));
14504
+ this.editor.hover(this.editor.findItem(event, this.findItems), null, event);
14298
14505
  return true;
14299
14506
  }
14300
14507
  var dragCtx = this.dragCtx;
@@ -14400,6 +14607,10 @@ var TemplateTool = function () {
14400
14607
  }
14401
14608
  var action;
14402
14609
  var pasteItems = null;
14610
+ if (SGroup.isSaltOrSolvent(this.template.molecule.name)) {
14611
+ addSaltsAndSolventsOnCanvasWithoutMerge(restruct, this.template, dragCtx, this.editor);
14612
+ return true;
14613
+ }
14403
14614
  if (!dragCtx.action) {
14404
14615
  if (!ci) {
14405
14616
  var _fromTemplateOnCanvas3 = fromTemplateOnCanvas(restruct, this.template, dragCtx.xy0, 0);
@@ -14447,11 +14658,15 @@ var TemplateTool = function () {
14447
14658
  }
14448
14659
  }
14449
14660
  this.editor.selection(null);
14450
- if (!dragCtx.mergeItems && pasteItems && this.mode !== 'fg') dragCtx.mergeItems = getItemsToFuse(this.editor, pasteItems);
14661
+ if (!dragCtx.mergeItems && pasteItems && this.mode !== 'fg') {
14662
+ dragCtx.mergeItems = getItemsToFuse(this.editor, pasteItems);
14663
+ }
14451
14664
  dragCtx.action = dragCtx.action ? fromItemsFuse(restruct, dragCtx.mergeItems).mergeWith(dragCtx.action) : fromItemsFuse(restruct, dragCtx.mergeItems);
14452
14665
  this.editor.hover(null);
14453
14666
  var completeAction = dragCtx.action;
14454
- if (completeAction && !completeAction.isDummy()) this.editor.update(completeAction);
14667
+ if (completeAction && !completeAction.isDummy()) {
14668
+ this.editor.update(completeAction);
14669
+ }
14455
14670
  this.editor.event.message.dispatch({
14456
14671
  info: false
14457
14672
  });
@@ -14470,6 +14685,17 @@ var TemplateTool = function () {
14470
14685
  }]);
14471
14686
  return TemplateTool;
14472
14687
  }();
14688
+ function addSaltsAndSolventsOnCanvasWithoutMerge(restruct, template, dragCtx, editor) {
14689
+ var _fromTemplateOnCanvas5 = fromTemplateOnCanvas(restruct, template, dragCtx.xy0, 0),
14690
+ _fromTemplateOnCanvas6 = _slicedToArray(_fromTemplateOnCanvas5, 1),
14691
+ action = _fromTemplateOnCanvas6[0];
14692
+ editor.update(action);
14693
+ editor.selection(null);
14694
+ editor.hover(null);
14695
+ editor.event.message.dispatch({
14696
+ info: false
14697
+ });
14698
+ }
14473
14699
  function getSign(molecule, bond, v) {
14474
14700
  var begin = molecule.atoms.get(bond.begin).pp;
14475
14701
  var end = molecule.atoms.get(bond.end).pp;
@@ -14517,7 +14743,7 @@ var TextTool = function () {
14517
14743
  this.dragCtx.action = fromMultipleMove(render.ctab, this.editor.selection() || {}, render.page2obj(event).sub(this.dragCtx.xy0));
14518
14744
  this.editor.update(this.dragCtx.action, true);
14519
14745
  } else {
14520
- this.editor.hover(this.editor.findItem(event, ['texts']));
14746
+ this.editor.hover(this.editor.findItem(event, ['texts']), null, event);
14521
14747
  }
14522
14748
  }
14523
14749
  }, {
@@ -14695,6 +14921,7 @@ function _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedec
14695
14921
  function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
14696
14922
  var SCALE = 40;
14697
14923
  var HISTORY_SIZE = 32;
14924
+ var HOVER_ICON_OPACITY = 0.7;
14698
14925
  var structObjects = ['atoms', 'bonds', 'frags', 'sgroups', 'sgroupData', 'rgroups', 'rxnArrows', 'rxnPluses', 'enhancedFlags', 'simpleObjects', 'texts'];
14699
14926
  var highlightTargets = ['atoms', 'bonds', 'rxnArrows', 'rxnPluses', 'functionalGroups', 'frags', 'merge', 'rgroups', 'sgroups', 'sgroupData', 'enhancedFlags', 'simpleObjects', 'texts'];
14700
14927
  function selectStereoFlagsIfNecessary(atoms, expAtoms) {
@@ -14731,6 +14958,7 @@ var Editor$3 = function () {
14731
14958
  this.highlights = new Highlighter(this);
14732
14959
  this.renderAndRecoordinateStruct = this.renderAndRecoordinateStruct.bind(this);
14733
14960
  this.setOptions = this.setOptions.bind(this);
14961
+ this.hoverIcon = this.render.paper.text(0, 0, '').attr('font-size', options.fontsz).attr('opacity', HOVER_ICON_OPACITY);
14734
14962
  this.event = {
14735
14963
  message: new Subscription(),
14736
14964
  elementEdit: new PipelineSubscription(),
@@ -14747,7 +14975,8 @@ var Editor$3 = function () {
14747
14975
  dearomatizeStruct: new PipelineSubscription(),
14748
14976
  enhancedStereoEdit: new PipelineSubscription(),
14749
14977
  confirm: new PipelineSubscription(),
14750
- cursor: new PipelineSubscription()
14978
+ cursor: new PipelineSubscription(),
14979
+ showInfo: new PipelineSubscription()
14751
14980
  };
14752
14981
  domEventSetup(this, clientArea);
14753
14982
  }
@@ -14777,6 +15006,10 @@ var Editor$3 = function () {
14777
15006
  this._tool.cancel();
14778
15007
  }
14779
15008
  var tool = new tools[name](this, opts);
15009
+ var isAtomToolChosen = name === 'atom';
15010
+ if (!isAtomToolChosen) {
15011
+ this.hoverIcon.hide();
15012
+ }
14780
15013
  if (!tool || tool.isNotActiveTool) {
14781
15014
  return null;
14782
15015
  }
@@ -14793,8 +15026,8 @@ var Editor$3 = function () {
14793
15026
  value: function renderAndRecoordinateStruct(struct) {
14794
15027
  var action = fromNewCanvas(this.render.ctab, struct);
14795
15028
  this.update(action);
14796
- getStructCenter(this.render.ctab);
14797
- recoordinate(this);
15029
+ var structCenter = getStructCenter(this.render.ctab);
15030
+ recoordinate(this, structCenter);
14798
15031
  return this.render.ctab.molecule;
14799
15032
  }
14800
15033
  }, {
@@ -14843,8 +15076,8 @@ var Editor$3 = function () {
14843
15076
  }
14844
15077
  this.render.setZoom(value);
14845
15078
  var selection = this.selection();
14846
- getStructCenter(this.render.ctab, selection);
14847
- recoordinate(this);
15079
+ var structCenter = getStructCenter(this.render.ctab, selection);
15080
+ recoordinate(this, structCenter);
14848
15081
  this.render.update();
14849
15082
  return this.render.options.zoom;
14850
15083
  }
@@ -14889,13 +15122,35 @@ var Editor$3 = function () {
14889
15122
  }
14890
15123
  }, {
14891
15124
  key: "hover",
14892
- value: function hover(ci, newTool) {
15125
+ value: function hover(ci, newTool, event) {
14893
15126
  var tool = newTool || this._tool;
15127
+ var infoPanelData = null;
14894
15128
  if ('ci' in tool && (!ci || tool.ci.map !== ci.map || tool.ci.id !== ci.id)) {
14895
15129
  setHover(tool.ci, false, this.render);
14896
15130
  delete tool.ci;
14897
15131
  }
14898
15132
  if (ci && setHover(ci, true, this.render)) tool.ci = ci;
15133
+ if (!event) return;
15134
+ var checkFunctionGroupTypes = ['sgroups', 'functionalGroups'];
15135
+ var closestCollapsibleStructures = this.findItem(event, checkFunctionGroupTypes);
15136
+ if (closestCollapsibleStructures) {
15137
+ var _this$struct;
15138
+ var sGroup = (_this$struct = this.struct()) === null || _this$struct === void 0 ? void 0 : _this$struct.sgroups.get(closestCollapsibleStructures.id);
15139
+ if (sGroup && !sGroup.data.expanded) {
15140
+ var groupName = sGroup.data.name;
15141
+ var groupStruct = FunctionalGroup.getFunctionalGroupByName(groupName);
15142
+ infoPanelData = {
15143
+ groupStruct: groupStruct,
15144
+ event: event,
15145
+ sGroup: sGroup
15146
+ };
15147
+ }
15148
+ }
15149
+ if (infoPanelData) {
15150
+ this.event.showInfo.dispatch(infoPanelData);
15151
+ } else {
15152
+ this.event.showInfo.dispatch(null);
15153
+ }
14899
15154
  }
14900
15155
  }, {
14901
15156
  key: "update",
@@ -15082,7 +15337,11 @@ function domEventSetup(editor, clientArea) {
15082
15337
  }
15083
15338
  function recoordinate(editor, rp
15084
15339
  ) {
15085
- editor.render.setScrollOffset(0, 0);
15340
+ if (rp) {
15341
+ editor.render.setScrollOffset(rp.x, rp.y);
15342
+ } else {
15343
+ editor.render.setScrollOffset(0, 0);
15344
+ }
15086
15345
  }
15087
15346
  function getStructCenter(ReStruct, selection) {
15088
15347
  var bb = ReStruct.getVBoxObj(selection || {});
@@ -15124,11 +15383,12 @@ function setHover(ci, visible, render) {
15124
15383
  return true;
15125
15384
  }
15126
15385
 
15127
- var classes$D = {"isHidden":"ContextMenu-module_isHidden__eOjF4"};
15386
+ var classes$E = {"isHidden":"ContextMenu-module_isHidden__eOjF4"};
15128
15387
 
15129
15388
  var FGContextMenu = function FGContextMenu() {
15130
15389
  var _useAppContext = useAppContext(),
15131
15390
  getKetcherInstance = _useAppContext.getKetcherInstance;
15391
+ var dispatch = useDispatch();
15132
15392
  var handleExpand = function handleExpand() {
15133
15393
  var editor = getKetcherInstance().editor;
15134
15394
  var action = new Action();
@@ -15141,6 +15401,10 @@ var FGContextMenu = function FGContextMenu() {
15141
15401
  editor.update(action);
15142
15402
  setShowSGroupMenu(false);
15143
15403
  setTargetItems([]);
15404
+ highlightFG(dispatch, {
15405
+ group: null,
15406
+ id: null
15407
+ });
15144
15408
  };
15145
15409
  var handleRemove = function handleRemove() {
15146
15410
  var editor = getKetcherInstance().editor;
@@ -15222,7 +15486,7 @@ var FGContextMenu = function FGContextMenu() {
15222
15486
  onShow: function onShow(e) {
15223
15487
  return showMenu(e);
15224
15488
  },
15225
- className: clsx(_defineProperty({}, classes$D.isHidden, !showSGroupMenu)),
15489
+ className: clsx(_defineProperty({}, classes$E.isHidden, !showSGroupMenu)),
15226
15490
  children: [jsxs(MenuItem, {
15227
15491
  onClick: handleExpand,
15228
15492
  children: [targetItems.length && targetItems[0].isExpanded ? 'Contract ' : 'Expand ', "Abbreviation"]
@@ -15235,7 +15499,7 @@ var FGContextMenu = function FGContextMenu() {
15235
15499
  });
15236
15500
  };
15237
15501
 
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"};
15502
+ 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
15503
 
15240
15504
  var Cursor = function Cursor(_ref) {
15241
15505
  var Icon = _ref.Icon,
@@ -15307,11 +15571,242 @@ var Cursor = function Cursor(_ref) {
15307
15571
  });
15308
15572
  };
15309
15573
 
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; }
15574
+ var _excluded$r = ["struct", "Tag"];
15313
15575
  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
15576
  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; } }
15577
+ 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; }
15578
+ 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; }
15579
+ function prepareStruct(struct) {
15580
+ if (struct.sgroups.size > 0) {
15581
+ var newStruct = struct.clone();
15582
+ newStruct.sgroups["delete"](0);
15583
+ return newStruct;
15584
+ }
15585
+ return struct;
15586
+ }
15587
+ var renderCache = new Map();
15588
+ function renderStruct(el, struct) {
15589
+ var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
15590
+ if (el && struct) {
15591
+ var _options$cachePrefix = options.cachePrefix,
15592
+ cachePrefix = _options$cachePrefix === void 0 ? '' : _options$cachePrefix;
15593
+ var cacheKey = "".concat(cachePrefix).concat(struct.name);
15594
+ if (renderCache.has(cacheKey)) {
15595
+ el.innerHTML = renderCache.get(cacheKey);
15596
+ return;
15597
+ }
15598
+ var preparedStruct = prepareStruct(struct);
15599
+ preparedStruct.initHalfBonds();
15600
+ preparedStruct.initNeighbors();
15601
+ preparedStruct.setImplicitHydrogen();
15602
+ preparedStruct.markFragments();
15603
+ var rnd = new Render(el, _objectSpread$E({
15604
+ autoScale: true
15605
+ }, options));
15606
+ rnd.setMolecule(preparedStruct);
15607
+ rnd.update(true, options.viewSz);
15608
+ renderCache.set(cacheKey, rnd.clientArea.innerHTML);
15609
+ }
15610
+ }
15611
+ var StructRender = function (_Component) {
15612
+ _inherits(StructRender, _Component);
15613
+ var _super = _createSuper$a(StructRender);
15614
+ function StructRender(props) {
15615
+ var _this;
15616
+ _classCallCheck(this, StructRender);
15617
+ _this = _super.call(this, props);
15618
+ _this.tagRef = createRef();
15619
+ return _this;
15620
+ }
15621
+ _createClass(StructRender, [{
15622
+ key: "shouldComponentUpdate",
15623
+ value: function shouldComponentUpdate(previousProps) {
15624
+ return Boolean(this.props.id && this.props.id !== previousProps.id);
15625
+ }
15626
+ }, {
15627
+ key: "update",
15628
+ value: function update() {
15629
+ var el = this.tagRef.current;
15630
+ var _this$props = this.props,
15631
+ struct = _this$props.struct,
15632
+ options = _this$props.options;
15633
+ var parsedStruct;
15634
+ if (!(struct instanceof Struct)) {
15635
+ try {
15636
+ var molSerialzer = new MolSerializer();
15637
+ parsedStruct = molSerialzer.deserialize(struct);
15638
+ } catch (e) {
15639
+ parsedStruct = null;
15640
+ }
15641
+ } else {
15642
+ parsedStruct = struct;
15643
+ }
15644
+ el === null || el === void 0 ? void 0 : el.childNodes.forEach(function (node) {
15645
+ node.remove();
15646
+ });
15647
+ renderStruct(el, parsedStruct, options);
15648
+ }
15649
+ }, {
15650
+ key: "componentDidMount",
15651
+ value: function componentDidMount() {
15652
+ this.update();
15653
+ }
15654
+ }, {
15655
+ key: "componentDidUpdate",
15656
+ value: function componentDidUpdate() {
15657
+ this.update();
15658
+ }
15659
+ }, {
15660
+ key: "render",
15661
+ value: function render() {
15662
+ var _this$props2 = this.props,
15663
+ struct = _this$props2.struct,
15664
+ _this$props2$Tag = _this$props2.Tag,
15665
+ Tag = _this$props2$Tag === void 0 ? 'div' : _this$props2$Tag,
15666
+ props = _objectWithoutProperties(_this$props2, _excluded$r);
15667
+ return jsx(Tag, _objectSpread$E(_objectSpread$E({
15668
+ ref: this.tagRef
15669
+ }, props), {}, {
15670
+ children: struct ? null : 'No molecule'
15671
+ }));
15672
+ }
15673
+ }]);
15674
+ return StructRender;
15675
+ }(Component);
15676
+
15677
+ var functionalGroupsSelector = function functionalGroupsSelector(state) {
15678
+ return state.functionalGroups.lib;
15679
+ };
15680
+ var functionGroupInfoSelector = function functionGroupInfoSelector(state) {
15681
+ return state.functionalGroups.functionalGroupInfo;
15682
+ };
15683
+
15684
+ var classes$C = {"infoPanel":"InfoPanel-module_infoPanel__irvZL"};
15685
+
15686
+ 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; }
15687
+ 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; }
15688
+ var HOVER_DELAY = 400;
15689
+ var HOVER_PANEL_PADDING = 20;
15690
+ function getSGroupFirstAtom(sGroup, render) {
15691
+ var _render$ctab$atoms, _render$ctab$atoms$ge;
15692
+ var firstSgroupAtom = sGroup.firstSgroupAtom;
15693
+ if (firstSgroupAtom) return firstSgroupAtom.pp;
15694
+ var _sGroup$atoms = _slicedToArray(sGroup.atoms, 1),
15695
+ firstAtomId = _sGroup$atoms[0];
15696
+ 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);
15697
+ }
15698
+ function getPanelPosition(clientX, clientY, render, sGroup) {
15699
+ var width = 0;
15700
+ var height = 0;
15701
+ var x = 0;
15702
+ var y = 0;
15703
+ if (sGroup) {
15704
+ var _render$clientArea, _render$clientArea2, _render$options$offse, _render$clientArea3, _render$options, _render$options$offse2, _render$clientArea4;
15705
+ var groupBoundingBox = sGroup.areas[0];
15706
+ var start = Scale.obj2scaled(groupBoundingBox.p0, render.options);
15707
+ var end = Scale.obj2scaled(groupBoundingBox.p1, render.options);
15708
+ width = end.x - start.x;
15709
+ height = end.y - start.y;
15710
+ var firstAtomPosition = getSGroupFirstAtom(sGroup, render);
15711
+ var panelPosition = Scale.obj2scaled(firstAtomPosition, {
15712
+ scale: render.options.scale * render.options.zoom
15713
+ });
15714
+ x = panelPosition.x - width / 2 - HOVER_PANEL_PADDING;
15715
+ y = panelPosition.y + HOVER_PANEL_PADDING;
15716
+ 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;
15717
+ var viewportLeftLimit = HOVER_PANEL_PADDING * 2 + width / 2;
15718
+ var viewportBottomLimit = (render === null || render === void 0 ? void 0 : (_render$clientArea2 = render.clientArea) === null || _render$clientArea2 === void 0 ? void 0 : _render$clientArea2.clientHeight) - height;
15719
+ if (clientX > viewportRightLimit) {
15720
+ x = panelPosition.x - width - HOVER_PANEL_PADDING;
15721
+ } else if (clientX < viewportLeftLimit) {
15722
+ x = panelPosition.x - HOVER_PANEL_PADDING;
15723
+ }
15724
+ if (clientY > viewportBottomLimit) {
15725
+ y = panelPosition.y - height - HOVER_PANEL_PADDING * 3;
15726
+ }
15727
+ 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);
15728
+ 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);
15729
+ x += scrollOffsetX;
15730
+ y += scrollOffsetY;
15731
+ }
15732
+ return [new Vec2(x, y), new Vec2(width, height)];
15733
+ }
15734
+ var InfoPanel = function InfoPanel(props) {
15735
+ var _sGroup$data;
15736
+ var _props$clientX = props.clientX,
15737
+ clientX = _props$clientX === void 0 ? 0 : _props$clientX,
15738
+ _props$clientY = props.clientY,
15739
+ clientY = _props$clientY === void 0 ? 0 : _props$clientY,
15740
+ render = props.render,
15741
+ className = props.className,
15742
+ groupStruct = props.groupStruct,
15743
+ sGroup = props.sGroup;
15744
+ var _useState = useState(null),
15745
+ _useState2 = _slicedToArray(_useState, 2),
15746
+ molecule = _useState2[0],
15747
+ setMolecule = _useState2[1];
15748
+ var childRef = useRef(null);
15749
+ var groupName = sGroup === null || sGroup === void 0 ? void 0 : (_sGroup$data = sGroup.data) === null || _sGroup$data === void 0 ? void 0 : _sGroup$data.name;
15750
+ var timer;
15751
+ useEffect(function () {
15752
+ if (groupStruct) {
15753
+ timer = setTimeout(function () {
15754
+ setMolecule(groupStruct.clone());
15755
+ }, HOVER_DELAY);
15756
+ } else {
15757
+ setMolecule(null);
15758
+ }
15759
+ return function () {
15760
+ return clearTimeout(timer);
15761
+ };
15762
+ }, [groupName]);
15763
+ var _getPanelPosition = getPanelPosition(clientX, clientY, render, sGroup),
15764
+ _getPanelPosition2 = _slicedToArray(_getPanelPosition, 2),
15765
+ position = _getPanelPosition2[0],
15766
+ size = _getPanelPosition2[1];
15767
+ var x = position.x,
15768
+ y = position.y;
15769
+ var width = size.x;
15770
+ var height = size.y;
15771
+ return molecule && jsx("div", {
15772
+ style: {
15773
+ left: x + 'px',
15774
+ top: y + 'px'
15775
+ },
15776
+ className: clsx(classes$C.infoPanel, className),
15777
+ children: jsx(StructRender, _objectSpread$D(_objectSpread$D({
15778
+ struct: molecule
15779
+ }, props), {}, {
15780
+ id: groupName,
15781
+ ref: childRef,
15782
+ options: _objectSpread$D(_objectSpread$D({}, render.options), {}, {
15783
+ autoScale: true,
15784
+ autoScaleMargin: 0,
15785
+ rescaleAmount: 1,
15786
+ cachePrefix: 'infoPanel',
15787
+ viewSz: new Vec2(width, height),
15788
+ width: width,
15789
+ height: height
15790
+ })
15791
+ }))
15792
+ });
15793
+ };
15794
+ var InfoPanel$1 = connect(function (store) {
15795
+ var _functionGroupInfoSel, _functionGroupInfoSel2, _functionGroupInfoSel3, _functionGroupInfoSel4, _functionGroupInfoSel5, _functionGroupInfoSel6, _store$editor, _store$editor$render, _store$editor$render$;
15796
+ return {
15797
+ clientX: ((_functionGroupInfoSel = functionGroupInfoSelector(store)) === null || _functionGroupInfoSel === void 0 ? void 0 : (_functionGroupInfoSel2 = _functionGroupInfoSel.event) === null || _functionGroupInfoSel2 === void 0 ? void 0 : _functionGroupInfoSel2.clientX) || 0,
15798
+ clientY: ((_functionGroupInfoSel3 = functionGroupInfoSelector(store)) === null || _functionGroupInfoSel3 === void 0 ? void 0 : (_functionGroupInfoSel4 = _functionGroupInfoSel3.event) === null || _functionGroupInfoSel4 === void 0 ? void 0 : _functionGroupInfoSel4.clientY) || 0,
15799
+ groupStruct: ((_functionGroupInfoSel5 = functionGroupInfoSelector(store)) === null || _functionGroupInfoSel5 === void 0 ? void 0 : _functionGroupInfoSel5.groupStruct) || null,
15800
+ sGroup: ((_functionGroupInfoSel6 = functionGroupInfoSelector(store)) === null || _functionGroupInfoSel6 === void 0 ? void 0 : _functionGroupInfoSel6.sGroup) || null,
15801
+ 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
15802
+ };
15803
+ })(InfoPanel);
15804
+
15805
+ 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"];
15806
+ 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; }
15807
+ 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; }
15808
+ 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); }; }
15809
+ 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; } }
15315
15810
  function setupEditor(editor, props) {
15316
15811
  var oldProps = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
15317
15812
  var struct = props.struct,
@@ -15348,13 +15843,15 @@ function removeEditorHandlers(editor, props) {
15348
15843
  }
15349
15844
  var StructEditor = function (_Component) {
15350
15845
  _inherits(StructEditor, _Component);
15351
- var _super = _createSuper$a(StructEditor);
15846
+ var _super = _createSuper$9(StructEditor);
15352
15847
  function StructEditor(props) {
15353
15848
  var _this;
15354
15849
  _classCallCheck(this, StructEditor);
15355
15850
  _this = _super.call(this, props);
15356
15851
  _this.state = {
15357
- enableCursor: false
15852
+ enableCursor: false,
15853
+ clientX: 0,
15854
+ clientY: 0
15358
15855
  };
15359
15856
  _this.editorRef = createRef();
15360
15857
  _this.logRef = createRef();
@@ -15374,7 +15871,7 @@ var StructEditor = function (_Component) {
15374
15871
  key: "componentDidMount",
15375
15872
  value: function componentDidMount() {
15376
15873
  var _this2 = this;
15377
- this.editor = new Editor$3(this.editorRef.current, _objectSpread$D({}, this.props.options));
15874
+ this.editor = new Editor$3(this.editorRef.current, _objectSpread$C({}, this.props.options));
15378
15875
  setupEditor(this.editor, this.props);
15379
15876
  if (this.props.onInit) this.props.onInit(this.editor);
15380
15877
  this.editor.event.message.add(function (msg) {
@@ -15386,15 +15883,15 @@ var StructEditor = function (_Component) {
15386
15883
  } catch (_unused) {
15387
15884
  el.innerHTML = msg.info;
15388
15885
  }
15389
- el.classList.add(classes$C.visible);
15886
+ el.classList.add(classes$D.visible);
15390
15887
  } else {
15391
- el.classList.remove(classes$C.visible);
15888
+ el.classList.remove(classes$D.visible);
15392
15889
  }
15393
15890
  });
15394
15891
  this.editor.event.cursor.add(function (csr) {
15395
15892
  switch (csr.status) {
15396
15893
  case 'enable':
15397
- _this2.editorRef.current.classList.add(classes$C.enableCursor);
15894
+ _this2.editorRef.current.classList.add(classes$D.enableCursor);
15398
15895
  var _this2$editorRef$curr = _this2.editorRef.current.getBoundingClientRect(),
15399
15896
  left = _this2$editorRef$curr.left,
15400
15897
  top = _this2$editorRef$curr.top,
@@ -15411,25 +15908,27 @@ var StructEditor = function (_Component) {
15411
15908
  }
15412
15909
  break;
15413
15910
  case 'move':
15414
- _this2.editorRef.current.classList.add(classes$C.enableCursor);
15911
+ _this2.editorRef.current.classList.add(classes$D.enableCursor);
15415
15912
  _this2.setState({
15416
- enableCursor: true
15913
+ enableCursor: true,
15914
+ clientX: clientX,
15915
+ clientY: clientY
15417
15916
  });
15418
15917
  break;
15419
15918
  case 'disable':
15420
- _this2.editorRef.current.classList.remove(classes$C.enableCursor);
15919
+ _this2.editorRef.current.classList.remove(classes$D.enableCursor);
15421
15920
  _this2.setState({
15422
15921
  enableCursor: false
15423
15922
  });
15424
15923
  break;
15425
15924
  case 'leave':
15426
- _this2.editorRef.current.classList.remove(classes$C.enableCursor);
15925
+ _this2.editorRef.current.classList.remove(classes$D.enableCursor);
15427
15926
  _this2.setState({
15428
15927
  enableCursor: false
15429
15928
  });
15430
15929
  break;
15431
15930
  case 'mouseover':
15432
- _this2.editorRef.current.classList.add(classes$C.enableCursor);
15931
+ _this2.editorRef.current.classList.add(classes$D.enableCursor);
15433
15932
  _this2.setState({
15434
15933
  enableCursor: true
15435
15934
  });
@@ -15473,10 +15972,11 @@ var StructEditor = function (_Component) {
15473
15972
  _this$props.onCipChange;
15474
15973
  var className = _this$props.className;
15475
15974
  _this$props.onConfirm;
15975
+ _this$props.onShowInfo;
15476
15976
  _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),
15977
+ var props = _objectWithoutProperties(_this$props, _excluded$q);
15978
+ return jsxs(Tag, _objectSpread$C(_objectSpread$C({
15979
+ className: clsx(classes$D.canvas, className),
15480
15980
  onMouseDown: function onMouseDown(event) {
15481
15981
  return event.preventDefault();
15482
15982
  }
@@ -15489,7 +15989,7 @@ var StructEditor = function (_Component) {
15489
15989
  holdToDisplay: -1,
15490
15990
  children: [jsx("div", {
15491
15991
  ref: this.editorRef,
15492
- className: clsx(classes$C.intermediateCanvas),
15992
+ className: clsx(classes$D.intermediateCanvas),
15493
15993
  onMouseDown: function onMouseDown(event) {
15494
15994
  return event.preventDefault();
15495
15995
  }
@@ -15498,13 +15998,13 @@ var StructEditor = function (_Component) {
15498
15998
  PressedIcon: SvgCompressedHand,
15499
15999
  enableHandTool: this.state.enableCursor
15500
16000
  }), jsx("div", {
15501
- className: classes$C.measureLog,
16001
+ className: classes$D.measureLog,
15502
16002
  ref: this.logRef
15503
16003
  }), indigoVerification && jsx("div", {
15504
- className: classes$C.spinnerOverlay,
16004
+ className: classes$D.spinnerOverlay,
15505
16005
  children: jsx(LoadingCircles, {})
15506
16006
  })]
15507
- }), jsx(FGContextMenu, {})]
16007
+ }), jsx(InfoPanel$1, _objectSpread$C(_objectSpread$C({}, this.state), this.props)), jsx(FGContextMenu, {})]
15508
16008
  }));
15509
16009
  }
15510
16010
  }]);
@@ -15697,19 +16197,19 @@ var ErrorPopover = function ErrorPopover(_ref) {
15697
16197
  });
15698
16198
  };
15699
16199
 
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"};
16200
+ 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
16201
 
15702
- var _excluded$q = ["schema", "value", "onChange", "type"],
15703
- _excluded2$5 = ["schema", "value", "onChange"],
16202
+ var _excluded$p = ["schema", "value", "onChange", "type", "isFocused"],
16203
+ _excluded2$4 = ["schema", "value", "onChange"],
15704
16204
  _excluded3$1 = ["schema", "value", "onChange"],
15705
16205
  _excluded4$1 = ["schema", "value", "selected", "onSelect", "type", "checked"],
15706
16206
  _excluded5$1 = ["value", "onChange", "name"],
15707
16207
  _excluded6 = ["children", "onChange", "style"],
15708
16208
  _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; }
16209
+ 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); }; }
16210
+ 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; } }
16211
+ 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; }
16212
+ 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
16213
  function GenericInput(_ref) {
15714
16214
  _ref.schema;
15715
16215
  var _ref$value = _ref.value,
@@ -15717,14 +16217,21 @@ function GenericInput(_ref) {
15717
16217
  onChange = _ref.onChange,
15718
16218
  _ref$type = _ref.type,
15719
16219
  type = _ref$type === void 0 ? 'text' : _ref$type,
15720
- props = _objectWithoutProperties(_ref, _excluded$q);
16220
+ _ref$isFocused = _ref.isFocused,
16221
+ isFocused = _ref$isFocused === void 0 ? false : _ref$isFocused,
16222
+ props = _objectWithoutProperties(_ref, _excluded$p);
16223
+ var inputRef = useRef(null);
16224
+ useEffect(function () {
16225
+ if (inputRef.current && isFocused) inputRef.current.focus();
16226
+ }, [inputRef, isFocused]);
15721
16227
  return jsxs(Fragment, {
15722
- children: [jsx("input", _objectSpread$C({
16228
+ children: [jsx("input", _objectSpread$B({
15723
16229
  type: type,
15724
16230
  value: value,
15725
16231
  onInput: onChange,
15726
16232
  onChange: onChange,
15727
- className: classes$A.input
16233
+ className: clsx(classes$A.input, classes$A.genericInput),
16234
+ ref: inputRef
15728
16235
  }, props)), type === 'checkbox' && jsx("span", {
15729
16236
  className: classes$A.checkbox
15730
16237
  }), type === 'radio' && jsx("span", {
@@ -15742,8 +16249,8 @@ function TextArea(_ref2) {
15742
16249
  _ref2.schema;
15743
16250
  var value = _ref2.value,
15744
16251
  onChange = _ref2.onChange,
15745
- rest = _objectWithoutProperties(_ref2, _excluded2$5);
15746
- return jsx("textarea", _objectSpread$C({
16252
+ rest = _objectWithoutProperties(_ref2, _excluded2$4);
16253
+ return jsx("textarea", _objectSpread$B({
15747
16254
  value: value,
15748
16255
  onInput: onChange
15749
16256
  }, rest));
@@ -15759,11 +16266,12 @@ function CheckBox(_ref3) {
15759
16266
  rest = _objectWithoutProperties(_ref3, _excluded3$1);
15760
16267
  return jsxs("div", {
15761
16268
  className: classes$A.fieldSetItem,
15762
- children: [jsx("input", _objectSpread$C({
16269
+ children: [jsx("input", _objectSpread$B({
15763
16270
  type: "checkbox",
15764
16271
  checked: value,
15765
16272
  onClick: onChange,
15766
- onChange: onChange
16273
+ onChange: onChange,
16274
+ className: classes$A.input
15767
16275
  }, rest)), jsx("span", {
15768
16276
  className: classes$A.checkbox
15769
16277
  })]
@@ -15813,16 +16321,16 @@ function FieldSet(_ref5) {
15813
16321
  rest = _objectWithoutProperties(_ref5, _excluded4$1);
15814
16322
  return jsx("fieldset", {
15815
16323
  onClick: onSelect,
15816
- className: "radio",
15817
16324
  children: enumSchema(schema, function (title, val) {
15818
16325
  return jsx("li", {
15819
16326
  className: classes$A.fieldSetItem,
15820
16327
  children: jsxs("label", {
15821
16328
  className: classes$A.fieldSetLabel,
15822
- children: [jsx("input", _objectSpread$C({
16329
+ children: [jsx("input", _objectSpread$B({
15823
16330
  type: type,
15824
16331
  defaultChecked: type === 'radio' ? selected(val, checked) : selected(val, value),
15825
- value: _typeof(val) !== 'object' && val
16332
+ value: _typeof(val) !== 'object' && val,
16333
+ className: classes$A.input
15826
16334
  }, rest)), type === 'checkbox' && jsx("span", {
15827
16335
  className: classes$A.checkbox
15828
16336
  }), type === 'radio' && jsx("span", {
@@ -15852,7 +16360,7 @@ function Slider(_ref6) {
15852
16360
  rest = _objectWithoutProperties(_ref6, _excluded5$1);
15853
16361
  return jsxs("div", {
15854
16362
  className: classes$A.slider,
15855
- children: [jsx("input", _objectSpread$C({
16363
+ children: [jsx("input", _objectSpread$B({
15856
16364
  type: "checkbox",
15857
16365
  checked: value,
15858
16366
  onClick: onChange,
@@ -15885,7 +16393,7 @@ function inputCtrl(component, schema, _onChange) {
15885
16393
  type: 'text'
15886
16394
  };
15887
16395
  }
15888
- return _objectSpread$C({
16396
+ return _objectSpread$B({
15889
16397
  onChange: function onChange(ev) {
15890
16398
  var val = !component.val ? ev : component.val(ev, schema);
15891
16399
  _onChange(val);
@@ -15955,7 +16463,7 @@ function shallowCompare(a, b) {
15955
16463
  }
15956
16464
  var Input = function (_Component) {
15957
16465
  _inherits(Input, _Component);
15958
- var _super = _createSuper$9(Input);
16466
+ var _super = _createSuper$8(Input);
15959
16467
  function Input() {
15960
16468
  _classCallCheck(this, Input);
15961
16469
  return _super.apply(this, arguments);
@@ -15981,7 +16489,7 @@ var Input = function (_Component) {
15981
16489
  _this$props.onChange;
15982
16490
  var props = _objectWithoutProperties(_this$props, _excluded7);
15983
16491
  var Component = this.component;
15984
- return jsx(Component, _objectSpread$C(_objectSpread$C({}, this.ctrl), props));
16492
+ return jsx(Component, _objectSpread$B(_objectSpread$B({}, this.ctrl), props));
15985
16493
  }
15986
16494
  }]);
15987
16495
  return Input;
@@ -16099,18 +16607,26 @@ function greekify(str) {
16099
16607
  });
16100
16608
  }
16101
16609
  function filterLib(lib, filter$1) {
16102
- var re = new RegExp(escapeRegExp(greekify(filter$1)), 'i');
16610
+ var trimmedFilter = filter$1.trim();
16611
+ var re = new RegExp(escapeRegExp(greekify(trimmedFilter)), 'i');
16103
16612
  return flow(filter(function (item) {
16104
- return !filter$1 || re.test(greekify(item.struct.name)) || re.test(greekify(item.props.group));
16613
+ return !trimmedFilter || re.test(greekify(item.struct.name)) || re.test(greekify(item.props.group));
16105
16614
  }), reduce(function (res, item) {
16106
16615
  if (!res[item.props.group]) res[item.props.group] = [item];else res[item.props.group].push(item);
16107
16616
  return res;
16108
16617
  }, {}))(lib);
16109
16618
  }
16110
16619
  function filterFGLib(lib, filter$1) {
16111
- var re = new RegExp(escapeRegExp(greekify(filter$1)), 'i');
16620
+ var trimmedFilter = filter$1.trim();
16621
+ var re = new RegExp(escapeRegExp(greekify(trimmedFilter)), 'i');
16622
+ var searchFunction = function searchFunction(item) {
16623
+ var fields = [item.struct.name, item.props.abbreviation, item.props.name].filter(Boolean);
16624
+ return fields.some(function (field) {
16625
+ return re.test(greekify(field));
16626
+ });
16627
+ };
16112
16628
  return flow(filter(function (item) {
16113
- return !filter$1 || re.test(greekify(item.struct.name));
16629
+ return !trimmedFilter || searchFunction(item);
16114
16630
  }), reduce(function (res, item) {
16115
16631
  if (!res[item.props.group]) res[item.props.group] = [item];else res[item.props.group].push(item);
16116
16632
  return res;
@@ -16127,18 +16643,18 @@ var getSelectOptionsFromSchema = function getSelectOptionsFromSchema(schema) {
16127
16643
  }, []);
16128
16644
  };
16129
16645
 
16130
- var _excluded$p = ["schema", "result", "customValid"],
16131
- _excluded2$4 = ["labelPos", "title", "children"],
16646
+ var _excluded$o = ["schema", "result", "customValid"],
16647
+ _excluded2$3 = ["labelPos", "title", "children"],
16132
16648
  _excluded3 = ["name", "onChange", "component", "labelPos", "className"],
16133
16649
  _excluded4 = ["dataError"],
16134
16650
  _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; } }
16651
+ 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; }
16652
+ 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; }
16653
+ 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); }; }
16654
+ 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
16655
  var Form = function (_Component) {
16140
16656
  _inherits(Form, _Component);
16141
- var _super = _createSuper$8(Form);
16657
+ var _super = _createSuper$7(Form);
16142
16658
  function Form(props) {
16143
16659
  var _this;
16144
16660
  _classCallCheck(this, Form);
@@ -16153,7 +16669,7 @@ var Form = function (_Component) {
16153
16669
  valid = _this$schema$serializ.valid,
16154
16670
  errors = _this$schema$serializ.errors;
16155
16671
  var errs = getErrorsObj(errors);
16156
- var initialState = _objectSpread$B(_objectSpread$B({}, init), {}, {
16672
+ var initialState = _objectSpread$A(_objectSpread$A({}, init), {}, {
16157
16673
  init: true
16158
16674
  });
16159
16675
  onUpdate(initialState, valid, errs);
@@ -16167,7 +16683,7 @@ var Form = function (_Component) {
16167
16683
  schema = _this$props2.schema,
16168
16684
  result = _this$props2.result;
16169
16685
  _this$props2.customValid;
16170
- var rest = _objectWithoutProperties(_this$props2, _excluded$p);
16686
+ var rest = _objectWithoutProperties(_this$props2, _excluded$o);
16171
16687
  if (schema.key && schema.key !== prevProps.schema.key) {
16172
16688
  this.schema = propSchema(schema, rest);
16173
16689
  this.schema.serialize(result);
@@ -16237,8 +16753,8 @@ function Label(_ref) {
16237
16753
  var labelPos = _ref.labelPos,
16238
16754
  title = _ref.title,
16239
16755
  children = _ref.children,
16240
- props = _objectWithoutProperties(_ref, _excluded2$4);
16241
- return jsxs("label", _objectSpread$B(_objectSpread$B({}, props), {}, {
16756
+ props = _objectWithoutProperties(_ref, _excluded2$3);
16757
+ return jsxs("label", _objectSpread$A(_objectSpread$A({}, props), {}, {
16242
16758
  children: [title && labelPos !== 'after' ? jsx("span", {
16243
16759
  children: title
16244
16760
  }) : '', children, title && labelPos === 'after' ? jsx("span", {
@@ -16271,10 +16787,10 @@ function Field(props) {
16271
16787
  dataError = _stateStore$field.dataError,
16272
16788
  fieldOpts = _objectWithoutProperties(_stateStore$field, _excluded4);
16273
16789
  var Component = component;
16274
- var formField = component ? jsx(Component, _objectSpread$B(_objectSpread$B({
16790
+ var formField = component ? jsx(Component, _objectSpread$A(_objectSpread$A({
16275
16791
  name: name,
16276
16792
  schema: desc
16277
- }, fieldOpts), rest)) : jsx(Input, _objectSpread$B(_objectSpread$B({
16793
+ }, fieldOpts), rest)) : jsx(Input, _objectSpread$A(_objectSpread$A({
16278
16794
  name: name,
16279
16795
  schema: desc
16280
16796
  }, fieldOpts), rest));
@@ -16311,7 +16827,7 @@ var SelectOneOf = function SelectOneOf(props) {
16311
16827
  selectDesc["enum"].push(item);
16312
16828
  selectDesc.enumNames.push(schema[item].title || item);
16313
16829
  });
16314
- return jsx(Field, _objectSpread$B(_objectSpread$B({
16830
+ return jsx(Field, _objectSpread$A(_objectSpread$A({
16315
16831
  name: name,
16316
16832
  options: getSelectOptionsFromSchema(selectDesc),
16317
16833
  title: title
@@ -16334,7 +16850,7 @@ function propSchema(schema, _ref2) {
16334
16850
  schema = Object.assign({}, schema);
16335
16851
  schema.properties = Object.keys(customValid).reduce(function (res, prop) {
16336
16852
  ajv.addFormat(customValid[prop].name, customValid[prop]);
16337
- res[prop] = _objectSpread$B({
16853
+ res[prop] = _objectSpread$A({
16338
16854
  format: prop
16339
16855
  }, res[prop]);
16340
16856
  return res;
@@ -16496,9 +17012,9 @@ var ColorPicker = function ColorPicker(props) {
16496
17012
 
16497
17013
  var styles$a = {"measureInput":"measure-input-module_measureInput__uZQ-j","select":"measure-input-module_select__1ZFmv"};
16498
17014
 
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; }
17015
+ var _excluded$n = ["schema", "value", "onChange", "name"];
17016
+ 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; }
17017
+ 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
17018
  var selectOptions$1 = getSelectOptionsFromSchema({
16503
17019
  "enum": ['cm', 'px', 'pt', 'inch']
16504
17020
  });
@@ -16507,7 +17023,7 @@ var MeasureInput = function MeasureInput(_ref) {
16507
17023
  value = _ref.value,
16508
17024
  onChange = _ref.onChange,
16509
17025
  name = _ref.name,
16510
- rest = _objectWithoutProperties(_ref, _excluded$o);
17026
+ rest = _objectWithoutProperties(_ref, _excluded$n);
16511
17027
  var _useState = useState('px'),
16512
17028
  _useState2 = _slicedToArray(_useState, 2),
16513
17029
  measure = _useState2[0],
@@ -16541,7 +17057,7 @@ var MeasureInput = function MeasureInput(_ref) {
16541
17057
  calcValue();
16542
17058
  }, [value, measure, calcValue]);
16543
17059
  var desc = schema || schema.properties[name];
16544
- return jsxs("div", _objectSpread$A(_objectSpread$A({
17060
+ return jsxs("div", _objectSpread$z(_objectSpread$z({
16545
17061
  className: styles$a.measureInput
16546
17062
  }, rest), {}, {
16547
17063
  children: [jsx("span", {
@@ -16577,14 +17093,14 @@ function convertValue(value, measureFrom, measureTo) {
16577
17093
 
16578
17094
  var classes$x = {"button-common-styles":"buttons-module_button-common-styles__qWDOz","scrollbar":"buttons-module_scrollbar__SpaVV","openButton":"buttons-module_openButton__wErm9"};
16579
17095
 
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; } }
17096
+ var _excluded$m = ["children", "type", "server", "className"];
17097
+ 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; }
17098
+ 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; }
17099
+ 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); }; }
17100
+ 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
17101
  var OpenButton = function (_Component) {
16586
17102
  _inherits(OpenButton, _Component);
16587
- var _super = _createSuper$7(OpenButton);
17103
+ var _super = _createSuper$6(OpenButton);
16588
17104
  function OpenButton(props) {
16589
17105
  var _this;
16590
17106
  _classCallCheck(this, OpenButton);
@@ -16624,8 +17140,8 @@ var OpenButton = function (_Component) {
16624
17140
  type = _this$props2.type;
16625
17141
  _this$props2.server;
16626
17142
  var className = _this$props2.className,
16627
- props = _objectWithoutProperties(_this$props2, _excluded$n);
16628
- return jsxs("button", _objectSpread$z(_objectSpread$z({
17143
+ props = _objectWithoutProperties(_this$props2, _excluded$m);
17144
+ return jsxs("button", _objectSpread$y(_objectSpread$y({
16629
17145
  onClick: function onClick() {
16630
17146
  return _this2.btn.click();
16631
17147
  },
@@ -16647,8 +17163,8 @@ var OpenButton = function (_Component) {
16647
17163
  return OpenButton;
16648
17164
  }(Component);
16649
17165
 
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; }
17166
+ 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; }
17167
+ 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
17168
  var SaveButton$1 = function SaveButton(props) {
16653
17169
  var noop = function noop() {
16654
17170
  return null;
@@ -16702,7 +17218,7 @@ var SaveButton$1 = function SaveButton(props) {
16702
17218
  onError(error);
16703
17219
  });
16704
17220
  };
16705
- return jsx("button", _objectSpread$y(_objectSpread$y({
17221
+ return jsx("button", _objectSpread$x(_objectSpread$x({
16706
17222
  className: className,
16707
17223
  onClick: function onClick(event) {
16708
17224
  save(event);
@@ -16881,9 +17397,9 @@ var fieldGroups = {
16881
17397
  showLoopIds: 'Options for Debugging'
16882
17398
  };
16883
17399
 
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; }
17400
+ var _excluded$l = ["initState", "formState", "server", "onOpenFile", "onReset", "appOpts"];
17401
+ 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; }
17402
+ 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
17403
  var defaultSettings = getDefaultOptions();
16888
17404
  var HeaderContent$1 = function HeaderContent(_ref) {
16889
17405
  var server = _ref.server,
@@ -16934,7 +17450,7 @@ var SettingsDialog = function SettingsDialog(props) {
16934
17450
  onOpenFile = props.onOpenFile,
16935
17451
  onReset = props.onReset,
16936
17452
  appOpts = props.appOpts,
16937
- prop = _objectWithoutProperties(props, _excluded$m);
17453
+ prop = _objectWithoutProperties(props, _excluded$l);
16938
17454
  var _useState = useState(new Set()),
16939
17455
  _useState2 = _slicedToArray(_useState, 2),
16940
17456
  changedGroups = _useState2[0],
@@ -17128,7 +17644,7 @@ var SettingsDialog = function SettingsDialog(props) {
17128
17644
  formState: formState,
17129
17645
  initState: initState
17130
17646
  }),
17131
- children: jsx(Form$1, _objectSpread$x(_objectSpread$x({
17647
+ children: jsx(Form$1, _objectSpread$w(_objectSpread$w({
17132
17648
  schema: optionsSchema,
17133
17649
  init: initState
17134
17650
  }, formState), {}, {
@@ -17199,9 +17715,9 @@ function ErrorsCheck(props) {
17199
17715
 
17200
17716
  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
17717
 
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; }
17718
+ var _excluded$k = ["formState", "checkState", "onCheck", "onApply", "onCancel"];
17719
+ 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; }
17720
+ 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
17721
  var checkSchema = {
17206
17722
  title: 'Check',
17207
17723
  type: 'object',
@@ -17259,7 +17775,7 @@ function CheckDialog(props) {
17259
17775
  onCheck = props.onCheck,
17260
17776
  onApply = props.onApply,
17261
17777
  onCancel = props.onCancel,
17262
- restProps = _objectWithoutProperties(props, _excluded$l);
17778
+ restProps = _objectWithoutProperties(props, _excluded$k);
17263
17779
  var _formState$result = formState.result,
17264
17780
  result = _formState$result === void 0 ? checkState : _formState$result,
17265
17781
  moleculeErrors = formState.moleculeErrors;
@@ -17295,7 +17811,7 @@ function CheckDialog(props) {
17295
17811
  return jsx(Dialog, {
17296
17812
  title: "Structure Check",
17297
17813
  className: style.dialog_body,
17298
- params: _objectSpread$w(_objectSpread$w({}, restProps), {}, {
17814
+ params: _objectSpread$v(_objectSpread$v({}, restProps), {}, {
17299
17815
  onCancel: onCancel
17300
17816
  }),
17301
17817
  buttons: [],
@@ -17307,7 +17823,7 @@ function CheckDialog(props) {
17307
17823
  isCheckedWithNewSettings: isCheckedWithNewSettings
17308
17824
  }),
17309
17825
  withDivider: true,
17310
- children: jsx(Form$1, _objectSpread$w(_objectSpread$w({
17826
+ children: jsx(Form$1, _objectSpread$v(_objectSpread$v({
17311
17827
  schema: checkSchema,
17312
17828
  init: checkState
17313
17829
  }, formState), {}, {
@@ -17433,9 +17949,9 @@ function FrozenInput(_ref) {
17433
17949
 
17434
17950
  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
17951
 
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; } }
17952
+ var _excluded$j = ["values", "round", "loading", "onAnalyse", "onChangeRound"];
17953
+ 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); }; }
17954
+ 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
17955
  function roundOff(value, round) {
17440
17956
  if (typeof value === 'number') return value.toFixed(round);
17441
17957
  return value.replace(/[0-9]*\.[0-9]+/g, function (str) {
@@ -17447,7 +17963,7 @@ var selectOptions = getSelectOptionsFromSchema({
17447
17963
  });
17448
17964
  var AnalyseDialog = function (_Component) {
17449
17965
  _inherits(AnalyseDialog, _Component);
17450
- var _super = _createSuper$6(AnalyseDialog);
17966
+ var _super = _createSuper$5(AnalyseDialog);
17451
17967
  function AnalyseDialog() {
17452
17968
  _classCallCheck(this, AnalyseDialog);
17453
17969
  return _super.apply(this, arguments);
@@ -17466,7 +17982,7 @@ var AnalyseDialog = function (_Component) {
17466
17982
  loading = _this$props.loading;
17467
17983
  _this$props.onAnalyse;
17468
17984
  var onChangeRound = _this$props.onChangeRound,
17469
- props = _objectWithoutProperties(_this$props, _excluded$k);
17985
+ props = _objectWithoutProperties(_this$props, _excluded$j);
17470
17986
  return jsx(Dialog, {
17471
17987
  title: "Calculated Values",
17472
17988
  className: classes$u.analyse,
@@ -17561,80 +18077,6 @@ var mapDispatchToProps$9 = function mapDispatchToProps(dispatch) {
17561
18077
  };
17562
18078
  var Analyse = connect(mapStateToProps$c, mapDispatchToProps$9)(AnalyseDialog);
17563
18079
 
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
18080
  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
18081
 
17640
18082
  var DialogActionButton = function DialogActionButton(_ref) {
@@ -17654,7 +18096,7 @@ var DialogActionButton = function DialogActionButton(_ref) {
17654
18096
  };
17655
18097
 
17656
18098
  var _excluded$i = ["file", "structStr", "fragment", "version", "imagoVersions", "onOk"],
17657
- _excluded2$3 = ["onRecognize", "isFragment", "onImage", "onChangeImago"];
18099
+ _excluded2$2 = ["onRecognize", "isFragment", "onImage", "onChangeImago"];
17658
18100
  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
18101
  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
18102
  function isImage(file) {
@@ -17705,7 +18147,7 @@ function RecognizeDialog(prop) {
17705
18147
  partProps.isFragment;
17706
18148
  var onImage = partProps.onImage,
17707
18149
  onChangeImago = partProps.onChangeImago,
17708
- props = _objectWithoutProperties(partProps, _excluded2$3);
18150
+ props = _objectWithoutProperties(partProps, _excluded2$2);
17709
18151
  var _useState = useState(true),
17710
18152
  _useState2 = _slicedToArray(_useState, 2),
17711
18153
  canPreviewImage = _useState2[0],
@@ -17924,7 +18366,7 @@ var MiewDialog = function MiewDialog(_ref) {
17924
18366
  var onMiewInit = useCallback(function (miew) {
17925
18367
  miewRef.current = miew;
17926
18368
  var factory = new FormatterFactory(server);
17927
- var service = factory.create('cml');
18369
+ var service = factory.create(SupportedFormat.cml);
17928
18370
  service.getStructureFromStructAsync(struct).then(function (res) {
17929
18371
  return miew.load(res, {
17930
18372
  sourceType: 'immediate',
@@ -20289,51 +20731,27 @@ var Rgroup = connect(function (store) {
20289
20731
 
20290
20732
  var classes$9 = {"button-common-styles":"sgroup-module_button-common-styles__MAeEP","scrollbar":"sgroup-module_scrollbar__T3fpf","sgroup":"sgroup-module_sgroup__Kh2Xj"};
20291
20733
 
20292
- var _excluded$5 = ["title", "name", "schema"],
20293
- _excluded2$2 = ["context", "fieldName", "fieldValue", "type", "radiobuttons", "formState"];
20734
+ var _excluded$5 = ["context", "fieldName", "fieldValue", "type", "radiobuttons", "formState"];
20294
20735
  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
20736
  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,
20737
+ function SData(_ref) {
20738
+ var context = _ref.context,
20739
+ fieldName = _ref.fieldName,
20740
+ fieldValue = _ref.fieldValue,
20741
+ type = _ref.type,
20742
+ radiobuttons = _ref.radiobuttons,
20743
+ formState = _ref.formState,
20300
20744
  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
20745
  var _result = formState.result,
20328
20746
  _valid = formState.valid;
20747
+ var formSchema = sdataCustomSchema;
20329
20748
  var init = {
20330
- context: context,
20331
- fieldName: fieldName || getSdataDefault(context),
20749
+ context: context || getSdataDefault(formSchema, 'context'),
20750
+ fieldName: fieldName || getSdataDefault(formSchema, 'fieldName'),
20332
20751
  type: type,
20333
- radiobuttons: radiobuttons
20752
+ radiobuttons: radiobuttons || getSdataDefault(formSchema, 'radiobuttons')
20334
20753
  };
20335
- init.fieldValue = fieldValue || getSdataDefault(context, init.fieldName);
20336
- var formSchema = sdataSchema[_result.context][_result.fieldName] || sdataCustomSchema;
20754
+ init.fieldValue = fieldValue || getSdataDefault(formSchema, 'fieldValue');
20337
20755
  var serialize = {
20338
20756
  context: _result.context.trim(),
20339
20757
  fieldName: _result.fieldName.trim(),
@@ -20361,20 +20779,19 @@ function SData(_ref2) {
20361
20779
  init: init
20362
20780
  }, formState), {}, {
20363
20781
  children: jsxs("fieldset", {
20364
- children: [jsx(SelectOneOf, {
20365
- title: "Context",
20782
+ children: [jsx(Field, {
20366
20783
  name: "context",
20367
- schema: sdataSchema
20368
- }), jsx(SelectInput, {
20369
- title: "Field name",
20784
+ options: getSelectOptionsFromSchema(formSchema.properties.context),
20785
+ component: Select
20786
+ }), jsx(Field, {
20370
20787
  name: "fieldName",
20371
- schema: sdataSchema[_result.context]
20372
- }), content$1(formSchema, _result.context, _result.fieldName, radiobuttons)]
20788
+ placeholder: "Enter name"
20789
+ }), content$1(formSchema, _result.context, _result.fieldName, _result.fieldValue, radiobuttons)]
20373
20790
  })
20374
20791
  }))
20375
20792
  });
20376
20793
  }
20377
- var content$1 = function content(schema, context, fieldName, checked) {
20794
+ var content$1 = function content(schema, context, fieldName, fieldValue, checked) {
20378
20795
  return Object.keys(schema.properties).filter(function (prop) {
20379
20796
  return prop !== 'type' && prop !== 'context' && prop !== 'fieldName';
20380
20797
  }).map(function (prop) {
@@ -20383,10 +20800,9 @@ var content$1 = function content(schema, context, fieldName, checked) {
20383
20800
  checked: checked,
20384
20801
  type: "radio",
20385
20802
  labelPos: false
20386
- }, "".concat(context, "-").concat(fieldName, "-").concat(prop, "-radio")) : prop === 'fieldValue' && schema.properties.fieldValue["enum"] ? jsx(Field, {
20387
- options: getSelectOptionsFromSchema(schema.properties.fieldValue),
20803
+ }, "".concat(context, "-").concat(fieldName, "-").concat(prop, "-radio")) : prop === 'fieldValue' ? jsx(Field, {
20388
20804
  name: prop,
20389
- component: Select
20805
+ placeholder: "Enter value"
20390
20806
  }, "".concat(context, "-").concat(fieldName, "-").concat(prop, "-select")) : jsx(Field, {
20391
20807
  name: prop,
20392
20808
  type: "textarea"
@@ -20695,7 +21111,22 @@ function _objectSpread$5(target) { for (var i = 1; i < arguments.length; i++) {
20695
21111
  var getSettingsSelector = function getSettingsSelector(state) {
20696
21112
  return state.options.settings;
20697
21113
  };
21114
+ var isSaltOrSolventTemplate = function isSaltOrSolventTemplate(template) {
21115
+ return template.props.group === 'Salts and Solvents';
21116
+ };
21117
+ var isFunctionalGroupTemplate = function isFunctionalGroupTemplate(template) {
21118
+ return template.props.group === 'Functional Groups';
21119
+ };
21120
+ function getTemplateTitle(template, index) {
21121
+ if (isSaltOrSolventTemplate(template)) {
21122
+ return template.props.name;
21123
+ }
21124
+ return template.struct.name || "".concat(template.props.group, " template ").concat(index + 1);
21125
+ }
20698
21126
  function tmplName(tmpl, i) {
21127
+ if (isSaltOrSolventTemplate(tmpl)) {
21128
+ return tmpl.props.abbreviation;
21129
+ }
20699
21130
  return tmpl.struct.name || "".concat(tmpl.props.group, " template ").concat(i + 1);
20700
21131
  }
20701
21132
  var RenderTmpl = function RenderTmpl(_ref) {
@@ -20703,7 +21134,7 @@ var RenderTmpl = function RenderTmpl(_ref) {
20703
21134
  options = _ref.options,
20704
21135
  props = _objectWithoutProperties(_ref, _excluded$2);
20705
21136
  return jsx(StructRender, _objectSpread$5({
20706
- struct: tmpl.modifiedStruct || tmpl.struct,
21137
+ struct: tmpl.struct,
20707
21138
  options: _objectSpread$5(_objectSpread$5({}, options), {}, {
20708
21139
  autoScaleMargin: 15
20709
21140
  })
@@ -20715,7 +21146,6 @@ var TemplateTable = function TemplateTable(props) {
20715
21146
  onSelect = props.onSelect,
20716
21147
  onDelete = props.onDelete,
20717
21148
  onAttach = props.onAttach,
20718
- _onDoubleClick = props.onDoubleClick,
20719
21149
  _props$titleRows = props.titleRows,
20720
21150
  titleRows = _props$titleRows === void 0 ? 2 : _props$titleRows;
20721
21151
  var options = useSelector(function (state) {
@@ -20726,13 +21156,10 @@ var TemplateTable = function TemplateTable(props) {
20726
21156
  children: templates.map(function (tmpl, i) {
20727
21157
  return jsxs("div", {
20728
21158
  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)),
21159
+ title: greekify(getTemplateTitle(tmpl, i)),
20730
21160
  onClick: function onClick() {
20731
21161
  return onSelect(tmpl);
20732
21162
  },
20733
- onDoubleClick: function onDoubleClick() {
20734
- return _onDoubleClick(tmpl);
20735
- },
20736
21163
  children: [jsx(RenderTmpl, {
20737
21164
  tmpl: tmpl,
20738
21165
  options: options,
@@ -20748,7 +21175,7 @@ var TemplateTable = function TemplateTable(props) {
20748
21175
  children: jsx(Icon, {
20749
21176
  name: "delete"
20750
21177
  })
20751
- }), tmpl.props.group !== 'Functional Groups' && jsx("button", {
21178
+ }), !isFunctionalGroupTemplate(tmpl) && !isSaltOrSolventTemplate(tmpl) && jsx("button", {
20752
21179
  className: "".concat(classes$7.button, " ").concat(classes$7.editButton),
20753
21180
  onClick: function onClick() {
20754
21181
  return onAttach(tmpl);
@@ -20762,8 +21189,8 @@ var TemplateTable = function TemplateTable(props) {
20762
21189
  });
20763
21190
  };
20764
21191
 
20765
- var functionalGroupsSelector = function functionalGroupsSelector(state) {
20766
- return state.functionalGroups.lib;
21192
+ var saltsAndSolventsSelector = function saltsAndSolventsSelector(state) {
21193
+ return state.saltsAndSolvents.lib;
20767
21194
  };
20768
21195
 
20769
21196
  var classes$6 = {"emptySearch":"emptySearchResult-module_emptySearch__aUSew"};
@@ -20781,7 +21208,7 @@ var EmptySearchResult = function EmptySearchResult(_ref) {
20781
21208
  };
20782
21209
 
20783
21210
  var _excluded$1 = ["children", "value", "index"],
20784
- _excluded2 = ["filter", "onFilter", "onChangeGroup", "mode", "initialTab", "functionalGroups", "lib"];
21211
+ _excluded2 = ["filter", "onFilter", "onChangeGroup", "mode", "initialTab", "functionalGroups", "lib", "saltsAndSolvents"];
20785
21212
  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
21213
  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
21214
  function TabPanel(props) {
@@ -20809,6 +21236,7 @@ var TemplateTabs;
20809
21236
  (function (TemplateTabs) {
20810
21237
  TemplateTabs[TemplateTabs["TemplateLibrary"] = 0] = "TemplateLibrary";
20811
21238
  TemplateTabs[TemplateTabs["FunctionalGroupLibrary"] = 1] = "FunctionalGroupLibrary";
21239
+ TemplateTabs[TemplateTabs["SaltsAndSolvents"] = 2] = "SaltsAndSolvents";
20812
21240
  })(TemplateTabs || (TemplateTabs = {}));
20813
21241
  var filterLibSelector = createSelector(function (props) {
20814
21242
  return props.lib;
@@ -20816,6 +21244,7 @@ var filterLibSelector = createSelector(function (props) {
20816
21244
  return props.filter;
20817
21245
  }, filterLib);
20818
21246
  var FUNCTIONAL_GROUPS = 'Functional Groups';
21247
+ var SALTS_AND_SOLVENTS = 'Salts and Solvents';
20819
21248
  var HeaderContent = function HeaderContent() {
20820
21249
  return jsxs("div", {
20821
21250
  className: classes$8.dialogHeader,
@@ -20829,26 +21258,37 @@ var HeaderContent = function HeaderContent() {
20829
21258
  var FooterContent = function FooterContent(_ref) {
20830
21259
  var data = _ref.data,
20831
21260
  tab = _ref.tab;
20832
- return jsx("div", {
21261
+ var clickToAddToCanvas = jsx("span", {
21262
+ children: "Click to add to canvas"
21263
+ });
21264
+ if (tab === TemplateTabs.SaltsAndSolvents) {
21265
+ return clickToAddToCanvas;
21266
+ }
21267
+ return jsxs("div", {
20833
21268
  style: {
20834
- flexGrow: 1
21269
+ flexGrow: 1,
21270
+ display: 'flex',
21271
+ justifyContent: 'space-between',
21272
+ alignItems: 'center'
20835
21273
  },
20836
- children: jsx(SaveButton$1, {
21274
+ children: [jsx(SaveButton$1, {
20837
21275
  data: data,
20838
21276
  className: classes$8.saveButton,
20839
21277
  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")
21278
+ children: "Save to SDF"
21279
+ }, "save-to-SDF"), clickToAddToCanvas]
20842
21280
  });
20843
21281
  };
20844
21282
  var TemplateDialog = function TemplateDialog(props) {
21283
+ var _serializerMapper;
20845
21284
  var filter = props.filter,
20846
21285
  onFilter = props.onFilter,
20847
- onChangeGroup = props.onChangeGroup,
20848
- mode = props.mode,
20849
- initialTab = props.initialTab,
21286
+ onChangeGroup = props.onChangeGroup;
21287
+ props.mode;
21288
+ var initialTab = props.initialTab,
20850
21289
  functionalGroups = props.functionalGroups,
20851
21290
  templateLib = props.lib,
21291
+ saltsAndSolvents = props.saltsAndSolvents,
20852
21292
  rest = _objectWithoutProperties(props, _excluded2);
20853
21293
  var _useState = useState(initialTab !== null && initialTab !== void 0 ? initialTab : TemplateTabs.TemplateLibrary),
20854
21294
  _useState2 = _slicedToArray(_useState, 2),
@@ -20862,10 +21302,17 @@ var TemplateDialog = function TemplateDialog(props) {
20862
21302
  _useState6 = _slicedToArray(_useState5, 2),
20863
21303
  filteredFG = _useState6[0],
20864
21304
  setFilteredFG = _useState6[1];
21305
+ var _useState7 = useState(saltsAndSolvents[SALTS_AND_SOLVENTS]),
21306
+ _useState8 = _slicedToArray(_useState7, 2),
21307
+ filteredSaltsAndSolvents = _useState8[0],
21308
+ setFilteredSaltsAndSolvents = _useState8[1];
20865
21309
  var filteredTemplateLib = filterLibSelector(props);
20866
21310
  useEffect(function () {
20867
21311
  setFilteredFG(filterFGLib(functionalGroups, filter)[FUNCTIONAL_GROUPS]);
20868
21312
  }, [functionalGroups, filter]);
21313
+ useEffect(function () {
21314
+ setFilteredSaltsAndSolvents(filterFGLib(saltsAndSolvents, filter)[SALTS_AND_SOLVENTS]);
21315
+ }, [saltsAndSolvents, filter]);
20869
21316
  var handleTabChange = function handleTabChange(_, tab) {
20870
21317
  setTab(tab);
20871
21318
  props.onSelect(null);
@@ -20877,21 +21324,12 @@ var TemplateDialog = function TemplateDialog(props) {
20877
21324
  }));
20878
21325
  };
20879
21326
  };
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
21327
  var sdfSerializer = new SdfSerializer();
20890
- var data = tab === TemplateTabs.TemplateLibrary ? sdfSerializer.serialize(templateLib) : sdfSerializer.serialize(functionalGroups);
21328
+ var serializerMapper = (_serializerMapper = {}, _defineProperty(_serializerMapper, TemplateTabs.TemplateLibrary, templateLib), _defineProperty(_serializerMapper, TemplateTabs.FunctionalGroupLibrary, functionalGroups), _defineProperty(_serializerMapper, TemplateTabs.SaltsAndSolvents, saltsAndSolvents), _serializerMapper);
21329
+ var data = sdfSerializer.serialize(serializerMapper[tab]);
20891
21330
  var select = function select(tmpl) {
20892
- var activateImmediately = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
20893
21331
  onChangeGroup(tmpl.props.group);
20894
- if (activateImmediately) props.onOk(_result());else props.onSelect(tmpl);
21332
+ props.onSelect(tmpl);
20895
21333
  };
20896
21334
  return jsxs(Dialog, {
20897
21335
  headerContent: jsx(HeaderContent, {}),
@@ -20901,13 +21339,7 @@ var TemplateDialog = function TemplateDialog(props) {
20901
21339
  }),
20902
21340
  className: "".concat(classes$8.dialog_body),
20903
21341
  params: omit(['group'], rest),
20904
- result: function result() {
20905
- return _result();
20906
- },
20907
- buttons: ['OK'],
20908
- buttonsNameMap: {
20909
- OK: 'Add to canvas'
20910
- },
21342
+ buttons: [],
20911
21343
  needMargin: false,
20912
21344
  children: [jsxs("div", {
20913
21345
  className: classes$8.inputContainer,
@@ -20918,7 +21350,8 @@ var TemplateDialog = function TemplateDialog(props) {
20918
21350
  onChange: function onChange(value) {
20919
21351
  return onFilter(value);
20920
21352
  },
20921
- placeholder: "Search by elements..."
21353
+ placeholder: "Search by elements...",
21354
+ isFocused: true
20922
21355
  }), jsx(Icon, {
20923
21356
  name: "search",
20924
21357
  className: classes$8.searchIcon
@@ -20931,7 +21364,9 @@ var TemplateDialog = function TemplateDialog(props) {
20931
21364
  label: "Template Library"
20932
21365
  }, a11yProps(TemplateTabs.TemplateLibrary))), jsx(Tab, _objectSpread$4({
20933
21366
  label: "Functional Groups"
20934
- }, a11yProps(TemplateTabs.FunctionalGroupLibrary)))]
21367
+ }, a11yProps(TemplateTabs.FunctionalGroupLibrary))), jsx(Tab, _objectSpread$4({
21368
+ label: "Salts and Solvents"
21369
+ }, a11yProps(TemplateTabs.SaltsAndSolvents)))]
20935
21370
  }), jsxs("div", {
20936
21371
  className: classes$8.tabsContent,
20937
21372
  children: [jsx(TabPanel, {
@@ -20960,9 +21395,6 @@ var TemplateDialog = function TemplateDialog(props) {
20960
21395
  onSelect: function onSelect(templ) {
20961
21396
  return select(templ);
20962
21397
  },
20963
- onDoubleClick: function onDoubleClick(templ) {
20964
- return select(templ, true);
20965
- },
20966
21398
  selected: props.selected,
20967
21399
  onDelete: props.onDelete,
20968
21400
  onAttach: props.onAttach
@@ -20983,9 +21415,6 @@ var TemplateDialog = function TemplateDialog(props) {
20983
21415
  className: classes$8.resultsContainer,
20984
21416
  children: jsx(TemplateTable, {
20985
21417
  titleRows: 1,
20986
- onDoubleClick: function onDoubleClick(templ) {
20987
- return select(templ, true);
20988
- },
20989
21418
  templates: filteredFG,
20990
21419
  onSelect: function onSelect(templ) {
20991
21420
  return select(templ);
@@ -20998,6 +21427,25 @@ var TemplateDialog = function TemplateDialog(props) {
20998
21427
  textInfo: "No items found"
20999
21428
  })
21000
21429
  })
21430
+ }), jsx(TabPanel, {
21431
+ value: tab,
21432
+ index: TemplateTabs.SaltsAndSolvents,
21433
+ children: filteredSaltsAndSolvents !== null && filteredSaltsAndSolvents !== void 0 && filteredSaltsAndSolvents.length ? jsx("div", {
21434
+ className: classes$8.resultsContainer,
21435
+ children: jsx(TemplateTable, {
21436
+ titleRows: 1,
21437
+ templates: filteredSaltsAndSolvents,
21438
+ onSelect: function onSelect(templ) {
21439
+ return select(templ);
21440
+ },
21441
+ selected: props.selected
21442
+ })
21443
+ }) : jsx("div", {
21444
+ className: classes$8.resultsContainer,
21445
+ children: jsx(EmptySearchResult, {
21446
+ textInfo: "No items found"
21447
+ })
21448
+ })
21001
21449
  })]
21002
21450
  })]
21003
21451
  });
@@ -21006,13 +21454,8 @@ var TemplatesDialog = connect(function (store) {
21006
21454
  var _store$modal, _store$modal$prop;
21007
21455
  return _objectSpread$4(_objectSpread$4({}, omit(['attach'], store.templates)), {}, {
21008
21456
  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
- })
21457
+ functionalGroups: functionalGroupsSelector(store),
21458
+ saltsAndSolvents: saltsAndSolventsSelector(store)
21016
21459
  });
21017
21460
  }, function (dispatch, props) {
21018
21461
  return {
@@ -21020,7 +21463,12 @@ var TemplatesDialog = connect(function (store) {
21020
21463
  return dispatch(changeFilter(filter));
21021
21464
  },
21022
21465
  onSelect: function onSelect(tmpl) {
21023
- return dispatch(selectTmpl(tmpl));
21466
+ dispatch(selectTmpl(tmpl));
21467
+ dispatch(onAction({
21468
+ tool: 'template',
21469
+ opts: tmpl
21470
+ }));
21471
+ props.onOk(tmpl);
21024
21472
  },
21025
21473
  onChangeGroup: function onChangeGroup(group) {
21026
21474
  return dispatch(changeGroup(group));
@@ -21030,13 +21478,6 @@ var TemplatesDialog = connect(function (store) {
21030
21478
  },
21031
21479
  onDelete: function onDelete(tmpl) {
21032
21480
  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
21481
  }
21041
21482
  };
21042
21483
  })(TemplateDialog);
@@ -21400,10 +21841,10 @@ function Modal(props) {
21400
21841
  var Component = modals[modal.name];
21401
21842
  if (!Component) throw new Error("There is no modal window named ".concat(modal.name));
21402
21843
  return jsx("div", {
21403
- className: clsx(classes$E.modalOverlay, selectClasses.selectContainer),
21844
+ className: clsx(classes$F.modalOverlay, selectClasses.selectContainer),
21404
21845
  ref: containerRef,
21405
21846
  children: jsx(Component, _objectSpread$3({
21406
- className: clsx(_defineProperty({}, classes$E.smallScreen, height && height <= mediaSizes$1.smallHeight || width && width <= mediaSizes$1.smallWidth))
21847
+ className: clsx(_defineProperty({}, classes$F.smallScreen, height && height <= mediaSizes$1.smallHeight || width && width <= mediaSizes$1.smallWidth))
21407
21848
  }, rest))
21408
21849
  });
21409
21850
  }
@@ -21612,6 +22053,24 @@ function initEditor(dispatch, getState) {
21612
22053
  },
21613
22054
  onConfirm: function onConfirm() {
21614
22055
  return openDialog(dispatch, 'confirm');
22056
+ },
22057
+ onShowInfo: function onShowInfo(payload) {
22058
+ if (payload) {
22059
+ var groupStruct = payload.groupStruct,
22060
+ event = payload.event,
22061
+ sGroup = payload.sGroup;
22062
+ highlightFG(dispatch, {
22063
+ groupStruct: groupStruct,
22064
+ event: event,
22065
+ sGroup: sGroup
22066
+ });
22067
+ } else {
22068
+ highlightFG(dispatch, {
22069
+ groupStruct: null,
22070
+ event: null,
22071
+ sGroup: null
22072
+ });
22073
+ }
21615
22074
  }
21616
22075
  };
21617
22076
  }
@@ -21645,6 +22104,8 @@ var App = function App(props) {
21645
22104
  useEffect(function () {
21646
22105
  checkServer();
21647
22106
  dispatch(initFGTemplates(staticResourcesUrl));
22107
+ dispatch(initSaltsAndSolventsTemplates(staticResourcesUrl));
22108
+ window.scrollTo(0, 0);
21648
22109
  }, []);
21649
22110
  return jsx(ThemeProvider, {
21650
22111
  theme: muiTheme,
@@ -21753,8 +22214,8 @@ var KetcherBuilder = function () {
21753
22214
  initApp(element, staticResourcesUrl, {
21754
22215
  buttons: buttons || {},
21755
22216
  errorHandler: errorHandler || null,
21756
- version: "2.6.4" ,
21757
- buildDate: "2022-12-01T13:14:40" ,
22217
+ version: "2.7.0-rc.2" ,
22218
+ buildDate: "2022-12-15T15:05:13" ,
21758
22219
  buildNumber: ''
21759
22220
  }, structService, resolve);
21760
22221
  });