diff --git a/.github/workflows/playwright-macromolecules.yml b/.github/workflows/playwright-macromolecules.yml
index 8653575d28..a825849d36 100644
--- a/.github/workflows/playwright-macromolecules.yml
+++ b/.github/workflows/playwright-macromolecules.yml
@@ -18,10 +18,10 @@ jobs:
timeout-minutes: 120
runs-on: self-hosted
steps:
- - uses: actions/checkout@v3
+ - uses: actions/checkout@v4
with:
fetch-depth: 0
- - uses: actions/setup-node@v3
+ - uses: actions/setup-node@v4
with:
node-version: 18.12.0
- name: Install dependencies
@@ -45,7 +45,7 @@ jobs:
- name: Run playwright tests in docker
run: cd ketcher-autotests && npm run docker:test
- - uses: actions/upload-artifact@v3
+ - uses: actions/upload-artifact@v4
# run even if previous steps fails
if: always()
with:
diff --git a/.github/workflows/playwright.yml b/.github/workflows/playwright.yml
index 864a61a7b5..374fc6d8c2 100644
--- a/.github/workflows/playwright.yml
+++ b/.github/workflows/playwright.yml
@@ -17,10 +17,10 @@ jobs:
timeout-minutes: 150
runs-on: self-hosted
steps:
- - uses: actions/checkout@v3
+ - uses: actions/checkout@v4
with:
fetch-depth: 0
- - uses: actions/setup-node@v3
+ - uses: actions/setup-node@v4
with:
node-version: 18.12.0
- name: Install dependencies
@@ -43,7 +43,7 @@ jobs:
- name: Run playwright tests in docker
run: cd ketcher-autotests && npm run docker:test
- - uses: actions/upload-artifact@v3
+ - uses: actions/upload-artifact@v4
# run even if previous steps fails
if: always()
with:
diff --git a/.github/workflows/run-tests.yml b/.github/workflows/run-tests.yml
index 9393844ea3..742fb9522f 100644
--- a/.github/workflows/run-tests.yml
+++ b/.github/workflows/run-tests.yml
@@ -30,7 +30,7 @@ jobs:
- name: Install dependencies
run: apt-get update -y && apt-get install -y git
- name: Checkout
- uses: actions/checkout@v3
+ uses: actions/checkout@v4
with:
fetch-depth: 1
- name: Git safe
@@ -40,7 +40,7 @@ jobs:
- name: Build all packages
run: npm run build:packages && npm run build:example:standalone
- name: Upload artifacts
- uses: actions/upload-artifact@v3
+ uses: actions/upload-artifact@v4
with:
name: ketcher-dist-micro
path: example/dist
@@ -54,7 +54,7 @@ jobs:
- name: Install dependencies
run: apt-get update -y && apt-get install -y git
- name: Checkout
- uses: actions/checkout@v3
+ uses: actions/checkout@v4
with:
fetch-depth: 1
- name: Git safe
@@ -64,7 +64,7 @@ jobs:
- name: Build all packages
run: npm run build:packages && npm run build:example:standalone
- name: Upload artifacts
- uses: actions/upload-artifact@v3
+ uses: actions/upload-artifact@v4
with:
name: ketcher-dist-macro
path: example/dist
@@ -81,7 +81,7 @@ jobs:
shardTotal: [2]
steps:
- name: Checkout
- uses: actions/checkout@v3
+ uses: actions/checkout@v4
with:
fetch-depth: 1
- name: Install dependencies
@@ -89,7 +89,7 @@ jobs:
- name: Create folder for dist
run: mkdir -p example/dist
- name: Download compiled ketcher
- uses: actions/download-artifact@v3
+ uses: actions/download-artifact@v4
with:
name: ketcher-dist-micro
path: example/dist/
@@ -113,7 +113,7 @@ jobs:
npm i
npx playwright install chromium
npx playwright test --shard=${{ matrix.shardIndex }}/${{ matrix.shardTotal }}
- - uses: actions/upload-artifact@v3
+ - uses: actions/upload-artifact@v4
# run even if previous steps fails
if: always()
with:
@@ -133,7 +133,7 @@ jobs:
shardTotal: [4]
steps:
- name: Checkout
- uses: actions/checkout@v3
+ uses: actions/checkout@v4
with:
fetch-depth: 1
- name: Install dependencies
@@ -141,7 +141,7 @@ jobs:
- name: Create folder for dist
run: mkdir -p example/dist
- name: Download compiled ketcher
- uses: actions/download-artifact@v3
+ uses: actions/download-artifact@v4
with:
name: ketcher-dist-macro
path: example/dist/
@@ -165,7 +165,7 @@ jobs:
npm i
npx playwright install chromium
npx playwright test --shard=${{ matrix.shardIndex }}/${{ matrix.shardTotal }}
- - uses: actions/upload-artifact@v3
+ - uses: actions/upload-artifact@v4
# run even if previous steps fails
if: always()
with:
diff --git a/.gitignore b/.gitignore
index bb6bc573cf..a7072e6526 100644
--- a/.gitignore
+++ b/.gitignore
@@ -37,6 +37,9 @@ yarn-error.log*
nohup.out
ketcher-autotests/results.json
+# ajv validation file generated with npm run ajv
+/packages/ketcher-core/src/domain/serializers/ket/compiledSchema.js
+
.pnp.*
.yarn/*
tests/test-data/KET/Nucleotide-Templates/01 - (R1) - Left only.ket
diff --git a/README.md b/README.md
index 4ef1e485bc..36f1d40b83 100644
--- a/README.md
+++ b/README.md
@@ -51,11 +51,12 @@ You can find the instruction for service installation
## Packages
-| Project | Status | Description |
-| --------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- |
-| [ketcher-core](https://github.com/epam/ketcher/tree/master/packages/ketcher-core) | [![npm version](https://badge.fury.io/js/ketcher-core.svg)](https://www.npmjs.com/package/ketcher-core) | Core functionality: domain, shared services, functions and interface declarations |
-| [ketcher-standalone](https://github.com/epam/ketcher/tree/master/packages/ketcher-standalone) | [![npm version](https://badge.fury.io/js/ketcher-standalone.svg)](https://www.npmjs.com/package/ketcher-standalone) | Contains only the functionality necessary to start Ketcher in standalone mode |
-| [ketcher-react](https://github.com/epam/ketcher/tree/master/packages/ketcher-react) | [![npm version](https://badge.fury.io/js/ketcher-react.svg)](https://www.npmjs.com/package/ketcher-react) | Package contains only the functionality necessary to define components. |
+| Project | Status | Description |
+|-------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------|
+| [ketcher-core](https://github.com/epam/ketcher/tree/master/packages/ketcher-core) | [![npm version](https://badge.fury.io/js/ketcher-core.svg)](https://www.npmjs.com/package/ketcher-core) | Core functionality: domain, shared services, functions and interface declarations |
+| [ketcher-standalone](https://github.com/epam/ketcher/tree/master/packages/ketcher-standalone) | [![npm version](https://badge.fury.io/js/ketcher-standalone.svg)](https://www.npmjs.com/package/ketcher-standalone) | Contains only the functionality necessary to start Ketcher in standalone mode |
+| [ketcher-react](https://github.com/epam/ketcher/tree/master/packages/ketcher-react) | [![npm version](https://badge.fury.io/js/ketcher-react.svg)](https://www.npmjs.com/package/ketcher-react) | Package contains only the functionality necessary to define components. |
+| [ketcher-macromolecules](https://github.com/epam/ketcher/tree/master/packages/ketcher-macromolecules) | [![npm version](https://badge.fury.io/js/ketcher-macromolecules.svg)](https://www.npmjs.com/package/ketcher-macromolecules) | Package contains the macromolecules editor functionality and UI components |
## 3D Viewer
@@ -64,6 +65,25 @@ Ketcher uses Miew-React for viewing and editing data in 3D.
You can find the latest version of Miew-React [here](https://github.com/epam/miew/tree/master/packages/miew-react).
The last checked version - [1.0.0](https://www.npmjs.com/package/miew-react).
+## Macromolecules mode
+Starting with version 3.0, Ketcher supports a new control in the top toolbar that allows switching to macromolecules editing mode. If you prefer having only small molecules editing mode available, you can remove the mode switcher from the toolbar by passing `disableMacromoleculesEditor` property to the `Editor` component.
+
+```js
+import { Editor } from 'ketcher-react';
+
+const App = () => {
+ return (
+
+ );
+};
+```
+
+Please refer to the `example/src/App.tsx` file for a complete example of how to integrate Ketcher editor into your application.
+
+
## Ketcher API
Ketcher can return drawn structures using the following methods:
diff --git a/demo/package.json b/demo/package.json
index b868cb3020..f9c6fa9412 100644
--- a/demo/package.json
+++ b/demo/package.json
@@ -4,7 +4,7 @@
"private": true,
"dependencies": {
"@testing-library/jest-dom": "^5.16.2",
- "@testing-library/react": "^12.1.3",
+ "@testing-library/react": "^15.0.7",
"@testing-library/user-event": "^13.5.0",
"@types/jest": "^27.4.1",
"@types/node": "^16.11.26",
diff --git a/documentation/help.md b/documentation/help.md
index a3987e6468..bd13f49eb1 100644
--- a/documentation/help.md
+++ b/documentation/help.md
@@ -1,674 +1,774 @@
-**Ketcher** is a tool to draw molecular structures and chemical
-reactions.
-
# Ketcher Overview
-**Ketcher** is a tool to draw molecular structures and chemical
-reactions. The application operates in two modes - Standalone and Remote:
+**Ketcher** is a tool used for drawing molecular structures and chemical reactions. It contains two modes:
-- Standalone mode is based on WASM and can be run as client-only application without a backend.
+- **Molecules mode** that allows drawing of and operations with small/organic molecules and reactions;
+- **Macromolecules mode** that allows drawing of and operations with biomolecules (nucleic acids and peptides).
-- Remote version requires Indigo Service as a backend server to perform complex calculations (When the server is not responding you can continue to work in the application although some of the functions will be unavailable).
+# Ketcher Molecules Mode
-**Ketcher** consists of the following elements:
-
+**Ketcher molecules mode** consists of the following elements:
-**Note** : Depending on the screen size, some tools on the _Tool
-palette_ can be displayed in expanded or collapsed forms.
+
-Using the _Tool palette_, you can
+**Note**: Depending on the screen size, some tools on the _Tool palette_ can be displayed in expanded or collapsed forms.
-- draw and edit a molecule or reaction by clicking on and dragging
- atoms, bonds, and other elements provided with the buttons on the
- _Atoms_ toolbar and _Tool palette_;
+Using the _Tool palette_, you can:
+- Draw and edit a molecule or a reaction by clicking on and dragging atoms, bonds, and other elements provided with the buttons on the _Atoms toolbar_ and _Tool palette_;
+- Delete any element of the drawing (atom or bond) by clicking on it with the _Erase tool_;
+- Delete the entire molecule or its fragment using the _Lasso_, _Rectangle_, or _Fragment selection tool_ and the _Erase tool_;
+- Draw special structures (see the following sections);
+- Select the entire molecule or its fragment in one of the following ways ( click on the bottom right corner to see the list of available options ![image] ):
+ - To select **one atom or bond**, click _Lasso_ (1) or _Rectangle Selection tool_ (2), and then click the atom or bond;
+ - To select the **entire structure**:
+ - Select the _Fragment Selection tool_ (3) and then click the object;
+ - Select the _Lasso_ or _Rectangle Selection tool_, and then drag the mouse to select the object;
+ -`Ctrl-click`with the _Lasso_ or _Rectangle Selection tool_.
+ - To select **multiple atoms, bonds, structures, or other objects**, do one of the following:
+ - `Shift-click` with the _Lasso_ or _Rectangle Selection tool_ selects some (connected or not) atoms/bonds;
+ - With the _Lasso_ or _Rectangle Selection tool_ click and drag the mouse around the atoms, bonds, or structures that you want to select.
-- delete any element of the drawing (atom or bond) by clicking on it
- with the Erase tool;
+ **Note**: `Ctrl+Shift-click` each structure with the _Lasso_ or _Rectangle Selection tool_ selects several structures.
-- delete the entire molecule or its fragment using the lasso,
- rectangle, or fragment selection and the Erase tool;
+You can use the buttons of the _Main_ toolbar:
-- draw special structures (see the following sections);
+
-- select the entire molecule or its fragment in one of the following
- ways (click on the button align=center to see the list of available options):
+- **Clear Canvas** (1) button to start clear the drawing area;
+- **Open…** (2) and **Save As…** (3) buttons to import a molecule from a molecular file or save it to a supported molecular file format;
+- **Copy** with additional abilties to **Copy As** (4), **Paste** (5), **Cut** (6) buttons to perform the corresponding actions;
+- **Undo** (7) / **Redo** (8) to manage the last actions taken on the canvas;
+- **Aromatize** (9) (`Alt+a`) / **Dearomatize** (10) (`Ctrl+Alt+a`) buttons to mark aromatic structures (to convert a structure to the aromatic or Kekule representation);
+- **Layout** button (11) to change the position of the structure to work with it with the most convenience;
+- **Clean Up** button (12) to improve the appearance of the structure by assigning them uniform bond lengths and angles;
+- **Calculate CIP** button (13) to determine R/S, r/s, and E/Z stereoconfigurations;
+- **Check Structure** button (14) (`Alt+s`) to check the bellow shown properties of the structure. Check will be conducted immediately when the operation is selected. You can check only the Settings you are interested in and check structure again with new settings by clicking on Check button. Apply button will save the Settings checked and they will be applied for the file saving;
-
+
-To select **one atom or bond**, click Lasso (1) or Rectangle Selection tool (2),
-and then click the atom or bond.
+- **Calculated Values** button (15) to display some properties of the structure;
-To select the **entire structure**:
+
-- Select the Fragment Selection tool (3) and then click the object.
+- **Add/Remove explicit hydrogens** button (16) to choose the representation of of explicit hydrogens (drawn with explicit bonds or associated with the atom label of the atom they are connected to);
+- **3D Viewer** button (17) to view the structure's in three-dimensional representation;
+- **Molecules/Macromolecules switcher** (18) to change between Ketcher's modes. Current mode always has a tick mark next to it. Clicking on the mode without a tick mark leads to it;
-- Select the Lasso or Rectangle Selection tool, and then drag the
- mouse to select the object.
+
--`Ctrl-click`with the Lasso or Rectangle Selection tool.
+- **Settings** button (19) to make some settings for molecular files;
-To select **multiple atoms, bonds, structures, or other objects**, do one
-of the following:
+
--`Shift-click`with the Lasso or Rectangle Selection tool selects
-some (connected or not) atoms/bonds.
+- **Help** button (20) to view Help;
+- **About** button (21) to display version and copyright information of the program;
+- **Fullscreen mode** button (22) allows to initiate displaying Ketcher window in the fullscreen mode;
+- **Zoom panel** (21) displays the current zoom percentage. Click to expand the Zoom panel and use the following actions: **Zoom percentage** (1) to set the view manually, **Zoom out** (2) / **Zoom in** (3) to scale the view gradually, **Zoom 100%** (4) to enable the default zoom setting.
-- With the Lasso or Rectangle Selection tool click and drag the
- mouse around the atoms, bonds, or structures that you want to
- select.
+
-**Note** :`Ctrl+Shift-click each structure`with the Lasso or Rectangle Selection tool
-selects several structures.
+## 3D Viewer
+The structure appears in a modal window after clicking on the **3D Viewer** button ) on the top panel:
-You can use the buttons of the _Main_ toolbar:
+
-![](images/4_main_toolbarn.png 'Main Toolbar')
-
+You can perform the following actions:
+- Rotate the structure holding the left mouse button;
+- Zoom In/Out the structure;
-- **Clear Canvas** (1) button to start drawing a new molecule; this
- command clears the drawing area;
+Ketcher Settings allow changing the appearance of the structure and background coloring on the 3D Viewer tab.
-- **Open…** (2) and **Save As…** (3) buttons to import a molecule
- from a molecular file or save it to a supported molecular file
- format;
+"Lines" drawing method, "Bright" atom name coloring method and "Light" background coloring are default.
-- **Copy** with additional abilties to **Copy As** (4), **Paste** (5), **Cut** (6) buttons to perform
- the corresponding actions;
+## Drawing Atoms
-- **Undo** (7) / **Redo** (8) to manage the last actions taken on the canvas;
+To draw/edit atoms you can:
+- Select an atom in the Atoms toolbar and click inside the drawing area;
+- If the desired atom is absent from the toolbar, click on the button to invoke the _Periodic Table_ and click on the desired atom (available options: _Single_ – selection of a single atom, _List_ – choose an atom from the list of selected options (To allow one atom from a list of atoms of your choice at that position), _Not List_ - exclude any atom on your list at that position);
-- **Aromatize** (Alt+a) / **Dearomatize** (Ctrl+Alt+a) buttons to mark aromatic
- structures (to convert a structure to the Aromatic or Kekule
- presentation);
+
-- **Layout** button (11) to change the position of the structure to
- work with it with the most convenience;
+- Add an atom to the existing molecule by selecting an atom in the _Atoms_ toolbar, clicking on an atom in the molecule, and dragging the cursor; the atom will be added with a single bond; vacant valences will be filled with the corresponding number of hydrogen atoms;
+- Change an atom by selecting an atom in the _Atoms_ toolbar and clicking on the atom to be changed; in the case a wrong valence appears the atom will be underlined in red;
+- Change an atom by clicking on an existing atom with the _Selection tool_ and starting to enter text after that;
-- **Clean Up** button (12) to improve the appearance of the
- structure by assigning them uniform bond lengths and angles.
+
-- **Calculate CIP** button (13) to determine R/S and E/Z
- configurations;
+- Change the charge of an atom by selecting the _Charge Plus_ or _Charge Minus tool_ and clicking consecutively on an atom to increase/decrease its charge;
-- **Check Structure** button (Alt+s) to check the following properties of the structure.
- Check will be conducted immediately when the operation is selected.
- You can check only the Settings you are interested in and check structure again with new settings by clicking on Check button.
- Apply button will save the Settings checked and they will be applied for the file saving.
+
-
+- Change an atom or its properties by double-clicking on the atom to invoke the _Atom Properties dialog_ (the dialog also provides atom query features);
-- **Calculated Values** button (15) to display some properties of
- the structure:
+
-
+- Click on the button to use the _Extended table_ and select a corresponding _Generic group_ or _Special Node_;
-- **3D Viewer** button (16) to open the structure in the three-dimensional
+
+## Drawing Bonds
-- **Settings** button (17) to make some settings for molecular
- files:
+To draw/edit bonds you can:
-
+- Click an arrow on the _Bond tool_ in the _Tool palette_ to open the drop-down list with the following bond types;
-- **Help** button (18) to view Help;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-- **About** button (19) to display version and copyright information
- of the program.
+- Select a bond type from the drop down list and click inside the drawing area; a bond of the selected type will be drawn;
+- Click on an atom in the molecule; a bond of the selected type will be added to the atom at the angle of 120 degrees;
+- Add a bond to the existing molecule by clicking on an atom in the molecule and dragging the cursor; in this case you can set the angle manually;
+- Change the bond type by clicking on it;
+- Use the _Chain Tool_ to draw consecutive single bonds;
+- Change a bond or its properties by double-clicking on the bond to invoke the _Bond Properties_ dialog:
-- **Fullscreen mode** button (20) allows to initiate displaying Ketcher window in the fullscreen mode.
+
-- **Zoom panel** (21) displays the current zoom percentage. Click to expand the Zoom panel and use the following actions: **Zoom percentage** (22) to set the view manually, **Zoom in** (23) / **Zoom out** (24) to scale the view gradually, **Zoom 100%** (25) to enable the default zoom setting.
+- Clicking on the drawn stereo and dative bonds change their direction;
+- Clicking with the _Single Bond tool_ or _Chain tool_ switches the bond type cyclically: Single-Double-Triple-Single.
-
+## Drawing R-Groups
-# 3D Viewer
+Use the _R-Group_ toolbox to draw R-groups in Markush structures:
-The structure appears in a modal window after clicking on the **3D
-Viewer** button on the top panel:
+
-
+Selecting the _R-Group_ _Label_ Tool (1) and clicking on an atom in the structure invokes the dialog to select the R-Group label for a current atom position in the structure:
-You can perform the following actions:
+
-- Rotate the structure holding the left mouse button;
+Selecting the R-Group label and clicking **Apply** converts the structure into a Markush structure with the selected R-Group label:
-- Zoom In/Out the structure;
+
-Ketcher Settings allow to change the appearance of the structure and background coloring on the 3D Viewer tab.
+**Note**: You can choose several R-Group labels simultaneously:
-"Lines" drawing method, "Bright" atom name coloring
-method and "Light" background coloring are default.
+
-# Drawing Atoms
+Particular chemical fragments that may be substituted for a given R-Group form a set of R-Group members. R-Group members can be any structural fragment, including functional groups and single atoms or atom lists.
-To draw/edit atoms you can:
+To create a set of R-Group members:
+1. Draw a structure to become an R-Group member;
+2. Select the structure using the _R-Group Fragment Tool_ (2) to invoke the _R-Group dialog_; in this dialog select the label of the R-Group to assign the fragment to;
+3. Click on **Apply** to convert the structure into an R-Group member.
-- select an atom in the Atoms toolbar and click inside the drawing
- area;
+Schematically, the entire process of the R-Group member creation can be presented as:
-- if the desired atom is absent in the toolbar, click on
- the ![](images/9_pt_icon.png) button to invoke the Periodic Table and
- click on the desired atom (available options: _Single_ – selection
- of a single atom, _List_ – choose an atom from the list of selected
- options (To allow one atom from a list of atoms of your choice at
- that position), _Not List_ - exclude any atom on your list at that
- position).
+
-
+### R-Group attachment point
-- add an atom to the existing molecule by selecting an atom in the
- _Atoms_ toolbar, clicking on an atom in the molecule, and dragging
- the cursor; the atom will be added with a single bond; vacant
- valences will be filled with the corresponding number of hydrogen
- atoms;
+An R-Group attachment point is the atom in an R-Group member fragment that attaches the fragment to the initial Markush structure.
-- change an atom by selecting an atom in the _Atoms_ toolbar and
- clicking on the atom to be changed; in the case a wrong valence
- appears the atom will be underlined in red;
+Selecting the _Attachment Point Tool_ (3) and clicking on an atom in the R-Group fragment converts this atom into an attachment point. If the R-Group contains more than one attachment point, you can specify one of them as primary and the other as secondary. You can select between either the primary or secondary attachment point using the dialog that appears after clicking on the atom:
-- change an atom by clicking on an existing atom with the
- _Selection_ tool and starting to enter text after that; type another atom symbol in the text box:
+
-
+Result view of R-Group attachment points (IUPAC style):
-- change the charge of an atom by selecting the Charge Plus or
- Charge Minus tool and clicking consecutively on an atom to
- increase/decrease its charge:
+
-
+If there are two attachment points on an R-Group member, there must be two corresponding attachments (bonds) to the R-Group atom that has the same R-Group label. Clicking on **Apply** in the above dialog creates the attachment points. Result view of R-Group attachment points both primary and secondary (IUPAC style):
-- change an atom or its properties by double-clicking on the atom to
- invoke the Atom Properties dialog (the dialog also provides atom
- query features):
+
-
+### R-Group Logic
-- click on the button to use the Extended table and
- select a corresponding Generic group or Special Node:
+**Ketcher** enables one to add logic when using R-Groups. To access the R-Group logic:
+1. Create an R-Group member fragment as described above;
+2. Move the cursor over the entire fragment for the green frame to appear, then click inside the fragment. The following dialog appears:
-
+
-# Drawing Bonds
+3. Specify **Occurrence** to define how many instances of an R-Group occur. If an R-Group atom appears several times in the initial structure, you will specify **Occurrence** > n, n being the number of occurrences; if it appears once, you see "R1 > 0".
+4. Specify H at **unoccupied** R-Group sites (**RestH**): check or clear the checkbox.
+5. Specify the logical **Condition**. Use the R-Group condition **If R(i) Then** to specify whether the presence of an R-Group is dependent on the presence of another R-Group.
-To draw/edit bonds you can:
+## Marking S-Groups
-- Click an arrow on the Bond tool in the Tool palette
- to open the drop-down list with the following bond types:
+To mark S-Groups, use the _S-Group tool_ and the following dialog that appears after selecting a fragment with this tool:
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-- select a bond type from the drop down list and click inside the
- drawing area; a bond of the selected type will be drawn;
+Available S-Group types:
+- _Data_ - an atom, a fragment, a multifragment, a single bond, or a group without the square brackets representation;
+- _Multiple group_ - indicates a number of replications of a fragment or a part of a structure in contracted form;
+- _SRU Polymer_ - the Structural Repeating Unit (SRU) brackets enclose the structural repeating of a polymer. You have three available patterns: head-to-tail (the default), head-to-head, and either/unknown;
+- _Superatom_ - part of the structure or the whole structure that will be abbreviated to a text label or expanded to see the group chemistry surrounded with square brackets;
+- _Queary component_ - a pair of square brackets enclosing the selected part(s) of the structure or whole structure(s), can be used to support SMARTS query properties.
-- click on an atom in the molecule; a bond of the selected type will
- be added to the atom at the angle of 120 degrees;
+### Superatom S-Group
-- add a bond to the existing molecule by clicking on an atom in the
- molecule and dragging the cursor; in this case you can set the angle
- manually;
+An abbreviated structure (abbreviation) is all or part of a structure (molecule or reaction component) that has been abbreviated to a text label. Structures that you abbreviate keep their chemical significance, but their underlying structure is hidden.
-- change the bond type by clicking on it;
+
-- use the Chain Tool to draw consecutive single
- bonds;
+After applying Superatom S-Group - there is ability to contract the S-Group, and ability to remove the abbreviation, from the right-click menu on the S-Group:
-- change a bond or its properties by double-clicking on the bond to
- invoke the Bond Properties dialog:
+
-
+### Data S-Groups
-- clicking on the drawn stereo and dative bonds change their direction.
+You can attach data to an atom, a fragment, a multifragment, a single bond, or a group. The defined set of _Names_ and _Values_ is introduced for each type of selected elements:
-- clicking with the Single Bond tool or Chain tool switches the bond type
- cyclically: Single-Double-Triple-Single.
+
-# Drawing R-Groups
+- Select the appropriate S-Group Field Name;
+- Select the appropriate Field Value;
+- Labels can be specified as Absolute, Relative or Attached.
-Use the _R-Group_ toolbox to draw R-groups in Markush
-structures:
+## Changing Structure Display
-
+
-Selecting the _R-Group_ _Label_ Tool (1) and clicking on an atom in the
-structure invokes the dialog to select the R-Group label for a current
-atom position in the structure:
+Use the _Rotate_ tool (1) to change the structure display:
-
+
-Selecting the R-Group label and clicking **OK** converts the structure
-into a Markush structure with the selected R-Group label:
+_Rotate tool_ allows rotating objects:
+- If some objects are selected, the tool rotates all the selected objects;
+- If no objects are selected, or all objects are selected, the tool rotates the whole canvas;
+- The default rotation step is 15 degrees (this can be changed in _Settings_);
+- Press and hold the Ctrl key for more gradual continuous rotation with 1 degree rotation step.
-![](images/rgroup-example1.png)
+Select any bond on the structure and click `Alt+H` to rotate the structure so that the selected bond is placed horizontally.
+Select any bond on the structure and click `Alt+V` to rotate the structure so that the selected bond is placed vertically.
-**Note** : You can choose several R-Group labels simultaneously:
+_Flip tool_ (2, 3) flips the objects horizontally or vertically:
+- If some objects are selected, the Horizontal Flip tool (`Alt+H`) flips all the selected objects horizontally;
+- If no objects are selected, or all objects are selected, the Horizontal Flip tool (`Alt+H`) flips each structure horizontally;
+- If some objects are selected, the Vertical Flip tool (`Alt+V`) flips the selected objects vertically;
+- If no objects are selected, or all objects are selected, the Vertical Flip tool (`Alt+V`) flips each structure vertically.
-![](images/rgroup-example2.png)
+_Erase_ (`Del` or `Backspace`) tool (4) deletes all of the selected elements.
-Particular chemical fragments that may be substituted for a given
-R-Group form a set of R-Group members. R-Group members can be any
-structural fragment, including functional groups and single atoms or
-atom lists.
+### Highlighting atoms and bonds
-To create a set of R-Group members:
+Right-clicking on an atom, a bond, or multiple selected atoms and bonds allows highlighting of those elements with one of eight available colours:
-1. Draw a structure to become an R-Group member.
+
-2. Select the structure using the _R-Group Fragment Tool_ (2) to invoke
- the R-Group dialog; in this dialog select the label of the
- R-Group to assign the fragment to.
+### ACS (American Chemical Society) Style
-3. Click on **Apply** to convert the structure into an R-Group member.
+
-Schematically, the entire process of the R-Group member creation can
-be presented as:
+From the _Settings_, the user is able to _Set ACS Settings_ (1). Structures on canvas will change their appearance to comply with the ACS style. The action can be undone by resetting the settings to the default values (2).
-![](images/rgroup-example3.png)
+Ketcher default style:
-![](images/rgroup-example4.png)
+
-## R-Group attachment point
-An R-Group attachment point is the atom in an R-Group member fragment
-that attaches the fragment to the initial Markush structure.
+ACS Style:
-Selecting the _Attachment Point Tool_ (3) and clicking on an atom in the
-R-Group fragment converts this atom into an attachment point. If the
-R-Group contains more than one attachment point, you can specify one
-of them as primary and the other as secondary. You can select between
-either the primary or secondary attachment point using the dialog that
-appears after clicking on the atom:
-
+
-Result view of RGroup attachment points (IUPAC style):\
-
+## Drawing Reactions
-If there are two attachment points on an R-Group member, there must be
-two corresponding attachments (bonds) to the R-Group atom that has the
-same R-Group label. Clicking on **Apply** in the above dialog creates the
-attachment points.
-Result view of RGroup attachment points both primary and secondary (IUPAC style):
+To draw/edit reactions you can:
+- Draw reagents and products as described above;
+- Use options of the _Reaction Arrow Tool_ to draw an arrow. Select the arrow needed from the list ;
+- Draw pluses in the reaction equation using the _Reaction Plus Tool_ ;
+- Map same atoms in reagents and products with the _Reaction Mapping Tools_ Explore the available reaction mapping tools
+ - _Reaction Auto-Mapping Tool_ (1);
+ - _Reaction Mapping Tool_ (2);
+ - _Reaction Unmapping Tool_ (3)
-
+### Drawing pathway reactions
-# R-Group Logic
+To draw pathway reactions you can:
+- Draw reagents and products as described above;
+- Use _Multi-Tailed Arrow Tool_ option from _Reaction Arrow Tool_;
+- Click anywhere on the canvas to add new multi-tailed arrow;
+- Adjust the length of the head or tail by grabbing its end and moving the cursor left and right;
+- Reposition the head or tail vertically by grabbing its end and moving the cursor up and down.
-**Ketcher** enables one to add logic when using R-Groups. To access
-the R-Group logic:
+## Drawing graphical objects
-1. Create an R-Group member fragment as described above.
+To draw graphical objects click the arrow on the _Shape Ellipse_ tool in the Tools palette to open the drop-down list with the following tools :
+- _Shape Ellipse_ (1);
+- _Shape Rectangle_ (2);
+- _Shape Line_ (3).
-2. Move the cursor over the entire fragment for the green frame to
- appear, then click inside the fragment. The following dialog
- appears:
+### Adding images on the canvas
-
+Select _Add Image_ tool in the Tools palette and click anywhere on the canvas.
+System dialog to choose image file will be opened and upon selection of supported format image will be added to the canvas.
+Center of the image will be at the place of the click.
+Supported image types are `.png` and `.svg`
-3. Specify **Occurrence** to define how many of an R-Group
- occurs. If an R-Group atom appears several times in the initial
- structure, you will specify **Occurrence**">n", n
- being the number of occurrences; if it appears once, you see
- "R1 > 0".
+### Adding text objects on the canvas
-4. Specify H at **unoccupied** R-Group sites ( **RestH** ): check or
- clear the checkbox.
+To add text to the canvas click the _Add text_ tool in the Tools palette and click the canvas to open the Text editor window:
-5. Specify the logical **Condition**. Use the R-Group condition **If
- R(i) Then** to specify whether the presence of an R-Group is
- dependent on the presence of another R-Group.
+
-# Marking S-Groups
+- To enter text, type in the Text editor field;
+- To edit text, double click the text object on the canvas;
+- Change the text style to bold and italic, make it subscript and superscript while typing or by selecting text and applying styles;
+- Add special symbols by clicking on omega:
-To mark S-Groups, use the _S-Group tool_ and the
-following dialog that appears after selecting a fragment with this
-tool:
+
-
+## Templates toolbar
-Available S-Group types:
+You can add templates (rings or other predefined structures) to the structure using the _Templates_ toolbar together with the _Custom Templates_ button located at the bottom:
+
+
+
+To add a ring to the molecule, select a ring from the toolbar and click inside the drawing area, or click on an atom or a bond in the molecule.
-_Generic_
+Rules of using templates:
+- Selecting a template and clicking on an atom in the existing structure adds the template to the structure connected through the selected atom resulting in a fused structure:
-Generic is a pair of brackets without any labels.
+
-_Multiple group_
+- Selecting a template and dragging the cursor from an atom in the existing structure adds the template to this atom connected through a single bond:
-A Multiple group indicates a number of replications of a fragment or a part of a
-structure in contracted form.
+
-_SRU Polymer_
+- Dragging the cursor from an atom in the existing structure results in the single bond attachment if the cursor is dragged to more than the bond length; otherwise the fused structure is drawn.
+- Selecting a template and clicking on a bond in the existing structure created a bond-to-bond fused structure:
-The Structural Repeating Unit (SRU) brackets enclose the structural
-repeating of a polymer. You have three available patterns:
-head-to-tail (the default), head-to-head, and either/unknown.
+
-## Superatom S-Group
+ - The bond in the initial structure is replaced with the bond in the template;
+ - This procedure doesn't change the length of the bond in the initial structure;
+ - Dragging the cursor relative to the initial bond applies the template at the corresponding side of the bond;
+ - The added template will be fused by the default attachment atom or bond preset in the program;
+ - User is able to define the attachment atom and bond by clickingthe Edit button for template structure in the Template Library.
-An abbreviated structure (abbreviation) is all or part of a structure
-(molecule or reaction component) that has been abbreviated to a text
-label. Structures that you abbreviate keep their chemical
-significance, but their underlying structure is hidden.
+The _Custom Templates_ button allows to view the list of templates available; both built-in and createdby user:
-
+
-After applying Superatom S-Group - there is ability to contract the S-Group,
-and ability to remove the abbreviation, from the right-click menu on the S-Group:
+To create a user template:
+- Draw a structure;
+- Click the _Save as..._ button;
+- Click the _Save to Templates_ button. _Template edit_ form will be displayed:
-
+
-## Data S-Groups
+- Enter a name and define the attachment atom and bond by clicking on the structure preview. Click on _Save_ button to save the template;
+- Saved template will be available in _User Templates_ subsection at the bottom of the _Template Library_ tab.
-You can attach data to an atom, a fragment, a multifragment, a single bond, or a
-group. The defined set of _Names_ and _Values_ is introduced for each
-type of selected elements:
+### Functional Groups
-
+Ketcher allows you to select and use Functional Groups to properly represent your structure on the canvas. Set of functional groups available is predefined and can't be changed right now.
-- Select the appropriate S-Group Field Name.
+Explore the list of the Functional Groups available in the Templates library. Open it using the icon in the bottom toolbar , Functional Groups tab.
-- Select the appropriate Field Value.
+To add a functional group to the canvas and join it to the structure do the following:
-- Labels can be specified as Absolute, Relative or Attached.
+1. Select the proper functional group in the _Functional Groups_ menu (you can filter them by name) and click on it to add it to the canvas:
-# Changing Structure Display
+
-Use the _Rotate_ tool to change the structure
-display:
+2. Click on the atom that the functional group should replace on the structure:
-
-
+
-_Rotate Tool_ (1)
-_Erase (Del)_ (4)
+3. You can just click on the canvas while having the functionaly group selected. To connect it with another structure on the canvas do the following:
+ - Select _Single Bond_ tool in the left Ketcher toolbar;
+ - Drag bond **from** the connection atom and drop it **to** the Functional Group on the canvas.
-This tool allows rotating objects.
+
-- If some objects are selected, the tool rotates the selected objects.
-- If no objects are selected, or all objects are selected, the tool rotates the whole canvas
-- The default rotation step is 15 degrees.
-- Press and hold the Ctrl key for more gradual continuous rotation with 1 degree rotation step
+#### Contracted s-group tooltip
-Select any bond on the structure and click Alt+H to rotate the structure so that the selected bond is placed horizontally.
-Select any bond on the structure and click Alt+V to rotate the structure so that the selected bond is placed vertically.
+Hover mouse cursor over the contracted S-group, and you will see the preview of the S-group.
-_Flip Tool_ (2, 3)
+
-This tool flips the objects horizontally or vertically.
+#### Expanding/Contracting S-group
-- If some objects are selected, the Horizontal Flip tool (or Alt+H) flips the selected objects horizontally
-- If no objects are selected, or all objects are selected, the Horizontal Flip tool (or Alt+H) flips each structure horizontally
-- If some objects are selected, the Vertical Flip tool (or Alt+V) flips the selected objects vertically
-- If no objects are selected, or all objects are selected, the Vertical Flip tool (or Alt+V) flips each structure vertically
+Functional Group on the canvas can be **Expanded** to view it's internal structure. Expanded group can be **Contracted** back to the compact presentation.
-# Drawing Reactions
+You can also **Remove the Abbreviation** on the group - it will allow you to work with the functional group atoms and bonds as with regular atoms and bonds on the canvas. To Expand, Contract and Remove Abbreviation:
-To draw/edit reactions you can:
+1. Click on the functional group with right mouse button:
-- draw reagents and products as described above
-- use options of the _Reaction Arrow Tool_ to draw an
- arrow. Select the arrow needed from the list
-- draw pluses in the reaction equation using the _Reaction Plus Tool_
-- map same atoms in reagents and products with the _Reaction Mapping Tools_ . Explore the available reaction mapping tools below:
+
- .
+2. Select the command from the context menu
-1 – Reaction Auto-Mapping Tool
+
-2 – Reaction Mapping Tool
+#### Inability to change S-group
-3 – Reaction Unmapping Tool
+Please, note that a lot of Ketcher's tools will not be able to be used on individual atoms and bonds of the functional group. Functional Groups can only be selected as a whole - they can only be deleted, moved, or rotated as an entire entity.
-# Drawing pathway reactions
+Ketcher will let you know if the tool is not applicable for the functional group and will suggest to Remove the Abbreviation immediately:
-To draw pathway reactions you can:
-* draw reagents and products as described above
-* use _Multi-Tailed Arrow Tool_ option from _Reaction Arrow Tool_
-* click anywhere on the canvas to add new multi-tailed arrow
-* adjust the length of the head or tail by grabbing its end and moving the cursor left and right
-* reposition the head or tail vertically by grabbing its end and moving the cursos up and down
+
+**Notes**:
+- _Aromatize_ & _Dearomatize_ operations will not be applied to the rings that are part of the functional group;
+- Functional groups will be considered as **super atoms** when opening and saving .mol files.
-# Drawing graphical objects
+## Stereochemistry
-To draw graphical objects click the arrow on the _Shape Ellipse_ tool in the Tools palette
-to open the drop-down list with the following tools:
+If a stereogenic center is on canvas, clicking on _Calculate CIP_ button on the main toolbar will assign stereo-labels to the stereocenters. Supported labels/stereochemistry types are S/R, s/r, and E/Z.
- .
+When the structure with the correct tetrahedral stereochemistry is created on the canvas you can open the _Enhanced Stereochemistry_ window by clicking the _Stereochemistry_ button and assign stereo marks:
-_Shape Ellipse_ (1), _Shape Rectangle_ (2), and _Shape Line_ (3).
+
-# Adding images on the canvas
-You can add images to the canvas. Select _Add Image_ tool in the Tools palette and click anywhere on the canvas.
-System dialog to choose image file will be opened and upon selection of supported format image will be added to the canvas.
-Center of the image will be at the place of the click.
-Supported image types are: `.png`, `.svg`
+In the _Stereochemistry tab_ in _Settings_ you can:
+- Enable/disable display of the Stereo flags;
+- Set the text of the Absolute/AND/OR/Mixed flags;
+- Change the style of the Label display at stereogenic centers;
+- Select the color of Absolute/AND/OR stereogenic centers;
+- Choose one of the four color display modes;
+- Enable/disable option when Chiral flag is ignored.
+
+
+When option _Ignore the chiral flag_ is _true_ it will affect opening of MDL V2000 and MDL V3000 files, as well as the display of labels at stereogenic centers and stereo flags:
-# Creating text objects on the canvas
+- Stereo flags are not displayed:
-To add text to the canvas click the _Add text_ tool
-in the Tools palette and click the canvas to open the Text editor window:
+
-
+- Labels at stereogenic centers are displayed only for non-absolute groups:
-- To enter text, type in the Text editor field.
-- To edit text, double click the text object on the canvas.
-- Change the text style to bold and italic, make it subscript and superscript while typing or by selecting text and applying styles.
+
-# Templates toolbar
+# Ketcher Macromolecules Mode
-You can add templates (rings or other predefined structures) to the
-structure using the _Templates_ toolbar together with the _Custom
-Templates_ button located at the bottom:
+**Ketcher Macromolecules Mode** consists of the following elements:
-
+
-To add a ring to the molecule, select a ring from the toolbar and
-click inside the drawing area, or click on an atom or a bond in the
-molecule.
+You can use the buttons on the main toolbar:
-Rules of using templates:
+
-- Selecting a template and clicking on an atom in the existing
- structure adds the template to the structure connected with a single
- bond:
+- **Clear Canvas** (1) button to clear the drawing area;
+- **Open…** (2) and **Save As…** (3) buttons to import a drawing from a molecular file or save it to a supported molecular file format;
+- **Undo** (4) / **Redo** (5) to manage the last actions taken on the canvas;
+- **Macromolecules modes switcher** (6) to change the macromolecules view to **sequence layout mode** (1), **snake layout mode** (2), or **flex layout mode** (3);
- ![](images/template-example1.png)
+
-- Selecting a template and dragging the cursor from an atom in the
- existing structure adds the template directly to this atom resulting
- in the fused structure:
+- **Sequence mode typing type switcher** (7) (available only in sequence layout mode) to change the way Ketcher interprets keyboard input (A can be a DNA nucleotide, and RNA nucleotide, or an amino acid);
+- **Molecules/Macromolecules switcher** (8) to change between Ketcher's modes. Current mode always has a tick mark next to it. Clicking on the mode without a tick mark leads to it;
+- **Fullscreen mode** (9) button allows to initiate displaying Ketcher window in the fullscreen mode;
+- **Zoom panel** (10) displays the current zoom percentage.
- ![](images/template-example2.png)
+The left toolbar consists of the following elements:
-- Dragging the cursor from an atom in the existing structure results
- in the single bond attachment if the cursor is dragged to more than
- the bond length; otherwise the fused structure is drawn.
-- Selecting a template and clicking on a bond in the existing
- structure created a bond-to-bond fused structure:
+
- ![](images/template-example3.png)
+- **Hand tool** (1) used to adjust the view and move around the canvas;
+- **Rectangle selection tool** (2) used to select elements on the canvas;
+- **Eraser** (3) used to delete elements on the canvas (disabled in sequence layout mode);
+- **Bond tool** (4) used to establish bonds (both single covalent (1) and hydrogen (2)) between elements on canvas in snake and flex layout modes:
-- The bond in the initial structure is replaced with the bond in the
- template.
+
-- This procedure doesn't change the length of the bond in the
- initial structure.
+## Macromolecules library
-- Dragging the cursor relative to the initial bond applies the
- template at the corresponding side of the bond.
+Macromolecules library has 4 tabs:
+- **Favorites tab** - by default the tab contains no elements, but the user can add them by clicking on the star in the monomer/preset library card;
+- **Peptides tab** - contains amino acid monomers organized alphabetically using the one letter symbol of the natural analogues (including the _X section_ for common N and C end modifications and amino acids with no natural analogue); the bottom of the section contains ambiguous amino acids;
+- **RNA tab** - contains RNA builder, a section containing presets, and monomers organized into sugars, bases, phosphates, and nucleotides sections;
+- **CHEM tab** - contains non-RNA and non-amino acid monomers, mostly linkers and tags.
-**Note** : The added template will be fused by the default attachment
-atom or bond preset in the program.
+
-**Note** : User is able to define the attachment atom and bond by clicking
-the Edit button for template structure in the Template Library.
+**Searching the library** is possible using monomer names, monomer symbols, or monomer IDT aliases:
-The _Custom Templates_ button allows to view the list of templates available; both built-in and created
-by user:
+
-
+Hovering over a library card will show the preview for that library element.
+In case of a non-ambiguous monomer the preview will contain the name, the chemical structure, the exact position and composition of attachment points, and the IDT alias(es) (if the monomer has IDT alias(es)):
-To create a user template:
+
-- draw a structure.
+In case of a preset, the symbol of the preset and the names and symbols of monomers making up that preset will be shown, as well as IDT alias(es) (if the preset has IDT alias(es)):
-- click the Save as button.
+
-- click the Save to Templates button. _Template edit_ form will be displayed
+In case of an ambiguous monomer, names of monomers making up that ambiguous monomer will be shown, as well as a type of ambiguous monomer (alternatives or mixed):
-
+
-- enter a name and define the attachment atom and bond by clicking on the structure preview. Click on Apply button to save the template.
+### RNA Builder
-Saved template will be available in User Templates tab in the list of templates.
+RNA builder can be found in the RNA section of the library. It can be used to create presets - a collection of 2 or 3 monomers together making up a nucleotide, nucleoside, or a sugar-phosphate pair. Once created and saved (in browser cache), presets can be added to the canvas as already assembled collections of monomers.
-# Functional Groups
+#### Creating presets
-Ketcher allows you to select and use Functional Groups to properly represent your structure on the canvas.
-Set of functional groups available is predefined and can't be changed right now.
+To create a preset either click on the downwards pointing arrow to open RNA Builder or on _New Preset_ in the Presets section of the library:
-Explore the list of the Functional Groups available in the Templates library.
-Open it using the icon in the bottom toolbar:\
-
+
-Navigate to the Functional Groups tab to explore the FGs available:
+Clicking on _Sugar_, _Base_, or _Phosphate_ will open appropriate sections of the library where monomers can be picked. Library search is also available while RNA builder is active.
-![](images/FG_tab.png)
+
-Filter Functional Groups by name:
-
+Name of the preset can be changed form the default form that is made up from symbols of the components in the format sugar(base)phosphate.
-To add Functional Group to the canvas and join it to the structure do the following:
+Clicking on _Add to Presets_ will save the preset and add it to the Presets section on the library:
-1. Select the proper FG in the FG menu and click _Add to canvas_\
-
-2. Click on the atom FG should connect with on the canvas:
- bond will be created automatically and FG will be joined to the structure.\
-
+
-You can just click on the canvas having the FG selected. To connect it with other structure on the canvas do the following:
+#### Modifying nucleotides in sequence mode
-1. Select Simple Bond tool in the left Ketcher toolbar
-2. Drag bond **from** the connection atom and drop it **to** the Functional Group on the canvas.
+Right clicking on selected presets in sequence mode gives the option to _Modify in RNA Builder..._
-
+
+
-### Contracted s-group tooltip
-Hover mouse cursor over the contracted s-group, and you will see the preview of the s-group.
+Clicking on _Sugar_, _Base_, or _Phosphate_ will again open appropriate sections of the library so that selected nucleotides can be conveniently modified.
-
+After choosing needed replacement(s), click on _Update_ and (in case of modifying multiple nucleotides) on _Yes_ in the warning message window.
-### Expanding/Contracting s-group
-Functional Group on the canvas can be **Expanded** to view it's internal structure. Expanded group can be **Contracted** back to the compact presentation.
+
+
-You can also **Remove the Abbreviation** on the group - it will allows you to work with the functional group atoms and bonds as with regular atoms and bonds on the canvas. To Expand, Contract and Remove Abbreviation:
+### RNA Builder
-1. Click on the FG with right mouse button:
-2. Select the command from the context menu
+New monomers can be added and already existing ones replaced using an API function (see [README.md](https://github.com/epam/ketcher/blob/6247-update-the-help-document/README.md))
-
+## Sequence mode
-### Disability to change s-group
-Please, note that a lot of Ketcher tools will be not applicable for the separate atoms and bonds of FG.
-FG can only be selected as a whole.
-It can also be deleted, moved, or rotated only as an entire entity.
+Sequence layout mode is a text-editor-like view mode for macromolecules. All nucleotides and amino acids are represented with single letter codes based on their natural analogue with accompanying information about modifications.
-Ketcher will let you know if the tool is not applicable for the FG and will suggest to Remove the Abbreviation immediately:
-
-
-Aromatize & Dearomatize operations will not be applied to the rings that are part of the FG.
+In case of nucleic acids, a gray background indicates a modified base, a black frame a modified sugar, and a dot a modified phosphate:
-Functional Groups will be considered as **super atoms** when opening and saving .mol files.
+
-# Working with Files
+For peptides, the modified amino acids are underlined:
-Ketcher supports the following molecular formats that can be entered
-either manually or from files:
+
-![](images/formats-table.png)
+All other elements on the canvas (not nucleotides, nucleosides, phosphates at the terminal positions, or amino acids) are represented with an @ symbol:
-You can use the _Open…_ and _Save As…_ buttons of the _Main_
-toolbar to import a molecule from a molecular file or save it to a
-supported molecular file format.
+
-The **_Open Structure_** dialog enables
-one to either browse for a file or manually input, e.g.
-the Molfile ctable for the molecule to be imported:
+Based on the typing type switcher appropriate entities are added to the canvas when the user types on the keyboard, or pastes text.
-
+
-The text editor form is initiated for the text from the Clipboard and when the file is selected for opening. It allows to immediately edit the text representation before opening the structure:
+Backbone connections (R1-R2) are established automatically within one sequence. For example, R1 of an amino acid is the hydrogen of the amino group, and R2 is the hydroxyl of a carboxyl group, thus making an R1-R2 connection a peptide bond.
-
+In addition to typing and pasting text formats who always result in natural monomers, other formats can also be pasted and monomers can be added by clicking on their library cards - this allows the user to add modified monomers to the canvas.
-Ketcher suggests 2 ways for structure to be opened:
+Already existing monomers can also be replaced by selecting them and clicking on a library card, or modified in RNA builder by choosing _Modify in RNA Builder..._ from the right-click drop-down menu (see above).
-_Open as New Project_ will clear the canvas and position new structure on it.
-_Add to Canvas_ will save the structure in the clipboard. Click on the canvas to place it.
+## Snake and flex modes
-The **_Save Structure_** dialog enables one to save the molecular file:
+As opposed to sequence mode where multiple monomers can be represented with one symbol, every single monomer is represented with a shape in snake and flex modes.
-
+In sequence mode:
-Select the format needed in the _File Format_ drop down.
- Check out the _Warnings_ tab if it's represented. It provides the list of chemical information that can't be saved properly to the format selected.
-
-You can save _a structure as image_ (in Standalone mode and in Remote mode when the server is available) by selectinig the _SVG Document_ or _PNG Image_ format.
-Please, note that saving structure to the image formats will results in chemical information loss in the file. You will not be able to open files in these formats in Ketcher. Supported graphics file formats are: _Portable Network Graphics (.png)_ and _Scalable Vector Graphics (.svg)_.
+
-
+In snake/flex mode:
-# Stereochemistry
+
-When the structure with the correct tetrahedral stereochemistry is created on the canvas you can open the ‘Enhanced Stereochemistry’ window by clicking the _Stereochemistry_ button and assign stereo marks:
+Different shapes of monomers indicate different monomer types:
-
+
-In the _Stereochemistry tab_ in _Settings_ you can:
+- **Hexagons** (1) represent amino acids; different natural analogues are coloured differently - acidic ones with shades of red, basic ones with shades of blue, polar neutral ones with shades of purple, and non-polar ones with shades of yellow and green;
+- **White boxes with a black outline** (2) represent CHEMs;
+- **Blue rounded squares** (3) represent sugars;
+- **Rhombuses** (4) represent bases; purines are shades of gray and pyrimidines are yellow (C), light orange (T), or dark purple (U);
+- **Coral circles** (5) represent phosphates;
+- **Pentagons** (6) represent unsplit nucleotides; logic for the colouring is the same as for bases;
+- **Dark rounded squares** (7) represent unresolved IDT nucleotides (see section _Working with files_).
-- enable/disable display of the Stereo flags
-- set the text of the Absolute/AND/OR/Mixed flags
-- change the style of the Label display at stereogenic centers
-- select the color of Absolute/AND/OR stereogenic centers
-- choose one of the four color display modes
-- enable/disable option when Chiral flag is ignored (_false_ by default)
+Modifications are also noted for amino acids, sugars, bases and phosphates using a banner over the monomer symbol:
-
+
-When option _Ignore the chiral flag_ is _true_ it will affect opening of MDL V2000 and MDL V3000 files, as well as the display of labels at stereogenic centers and stereo flags:
+### Establishing bonds
+
+In snake and flex modes monomers are added to the canvas by clicking on their library cards and then clicking on the canvas. Hovering over the monomers with a bond tool shows attachment points of that monomer:
+
+
+
+#### Covalent bonds
-- stereo flags are not displayed
+Covalent bonds can be **created** by connecting monomers with the _Bond tool_ either at their center (not choosing attachment points) or at their attachment points.
-
+- Connect attachment point to attachment point:
-- labels at stereogenic centers are displayed only for non-absolute groups
+
-
+- Connect center to attachment point:
-- MDL V2000 and MDL V3000 file formats will save stereo information according to the following table
+
-
+- Connect center to center:
-This parameter can be changed via _ketcher.setSettings()_ api, e.g. _ketcher.setSettings({ ignoreChiralFlag: true })_
+
+
+If a default bond cannot be established a _Select Connection Points_ dialog will open. Default bonds are:
+- R1-R2 between amino acids;
+- R1-R2 between sugars and phosphates;
+- R3-R1 between sugars and bases;
+- R1-R2 between unsplit nucleotides and sugars;
+- R1-R2 between unsplit nucleotides and phosphates;
+- A bond at any attachment points if there is only one available attachment point for both monomers.
+
+_Select Connection Point_ dialog contains structures of both monomers and allows the user to select the exact attachment points and by clicking on _Connect_ to establish a bond:
+
+
+
+
+Covalent bonds can be **eddited** by choosing _Edit Connection Points..._ from the right-click menu. _Edit Connection Points..._ allows the user to change the attachment points and reestablish the bond.
+
+
+
+
+#### Hydrogen bonds
+
+Hydrogen bonds can only be **created** between monomer centers at they do not require attachment points.
+
+
+
+Bond preview and _Edit Connection Points..._ dialog are not available for hydrogen bonds.
+
+#### Creating antisense chains
+
+When a chain is selected an option to _Create Antisense Strand_ exists in the right-click drop-down menu. An RNA antisense strand is added with the bases connected via hydrogen bonds:
+
+
+
+
+### Snake and flex modes differences
+
+There are two differences between snake and flex modes:
+1. **Different bond appearance** - all bonds in flex mode (left) are straight lines connecting monomer centers whereas in snake mode (right) some bonds are "snake-like" bonds with joints that do not overlap with other monomers:
+
+
+
+2. **Automatic layout upon entrance of the mode** - every time snake mode is entered, monomers on canvas get layouted; when flex mode is entered, no layout is applied.
+
+## Macromolecules and molecules mode integration
+
+Drawn macromolecules structures are visible (but not editable) when molecules mode is entered and drawn molecules are visible (but not editable) when macromolecules are entered.
+
+Macromolecules (snake) mode:
+
+
+
+Molecules mode:
+
+
+
+Currently the appearance of monomers in molecule mode is different than in macromolecules mode - the monomers are not represented with shapes (like in snake and flex) or with one letter codes (like in sequence), but with full abbreviations.
+
+### Establishing bonds between molecules and monomers
+
+To draw a structure contatining both monomers and monomers:
+1. Draw the needed structure in **molecules mode**;
+
+
+
+2. Draw the meeded structure in **macromolecules mode** (order of steps 1 and 2 is arbitrary);
+
+
+
+3. **In macromolecules mode** position the structures and establish a bond using the _Bond tool_ by dragging **from an attachment point of the monomer to the atom of the molecular structure**;
+
+
+
+Whole structure in macromolecules (snake) mode:
+
+
+
+Whole structure in molecules mode:
+
+
+
+### Expanding monomers in molecules mode
+
+After switching to molecules mode, right-clicking on a monomer gives the option to _Expand monomer_.
+
+
+
+
+Multiple monomers can be expanded at the same time.
+
+Expanded monomers behave like S-groups.
+
+# Working with Files
+
+In **molecules mode**, following file formats are supported:
+- Ket Format;
+- MDL Molfile V2000;
+- MDL Molfile V300O;
+- SDF V2000;
+- SDF V3000;
+- RDF V2000;
+- RDF V3000;
+- Daylight SMILES;
+- Extended SMILES;
+- CML;
+- InChI;
+- InChI AuxInfo;
+- InChIKey;
+- SVG Document;
+- PNG Image;
+- CDXML;
+- Base64 CDX;
+- CDX.
+
+In **macromolecules mode**, the supported file formats are:
+- Ket Format;
+- MDL Molfile V3000;
+- Sequence (1-letter code);
+- Sequence (3-letter code);
+- FASTA;
+- IDT*;
+- SVG Document;
+- HELM;
+
+* _IDT is a vendor of oligonucleotides where modifications are indicated in their own format._
+
+Structures can be opened using the _Open..._ button on the main toolbars of both modes:
+
+
+
+- _Paste From Clipboard_ allows pasting of the file contents (for both modes) and selecting of the format (only for macromolecules mode - in molecules mode the recondition of the format is possible unambiguously);
+
+
+
+- _Open from File_ allows browsing for a file. After the file is selected editable file contents are visible before the structure is added to the canvas;
+
+
+
+- _Open as New (Project)_ will clear the canvas and position the new structure on it.
+- _Add to Canvas_ will save the structure in the clipboard that can be added to the canvas via a click (for molecules mode) or add the structure to the canvas without the need to click on it (for macromolecules mode).
+
+The _Save as..._ dialog enables choosing of the file name and format, previewing the file contents and copying it to the clipboard:
+
+
+
+In Molecules mode an additional tab - _Warnings_ - may appear. It contains warning about the structure's inaccuracies:
+
+
# Hotkeys
-You can use keyboard hotkeys (including Numeric keypad) for some
-features/commands of the Editor. To display the hotkeys just place the
-cursor over a toolbar button. If a hotkey is available for the button,
-it will appear in brackets after the description of the button.
+You can use keyboard hotkeys (including Numeric keypad) for some features/commands of the Editor. To display the hotkeys just place the cursor over a toolbar button. If a hotkey is available for the button, it will appear in brackets after the description of the button.
_NOTE: `Mod` key is `Command` on OSX and `Ctrl` on PC systems_
@@ -772,15 +872,21 @@ _NOTE: `Mod` key is `Command` on OSX and `Ctrl` on PC systems_
| `Shift+t` | Structure Library |
| `t` | Rotate between: Benzene, Cyclopentadiene, Cyclohexane, Cyclopentane, Cyclopropane, Cyclobutane, Cycloheptane, Cyclooctane |
-**FunctionalGroups**
+**Functional Groups**
| Shortcut | Action |
| --------- | ----------------- |
| `Shift+f` | Functional Groups |
+**Macromolecules Specific Hotkeys**
+| Shortcut | Action |
+| --- | --- |
+| `Ctrl+Alt+R` | Change the sequence mode typing type to RNA |
+| `Ctrl+Alt+D` | Change the sequence mode typing type to DNA |
+| `Ctrl+Alt+P` | Change the sequence mode typing type to Peptide |
+
**Help**
| Shortcut | Action |
| --------------- | ------ |
| `?, &, Shift+/` | Help |
-**Note** : Please, use`Ctrl+V`to paste the selected object in
-Google Chrome and Mozilla Firefox browsers.
+**Note** : Please, use`Ctrl+V`to paste the selected object in Google Chrome and Mozilla Firefox browsers.
diff --git a/documentation/images/ACS-Style-3.0..png b/documentation/images/ACS-Style-3.0..png
new file mode 100644
index 0000000000..70cb091f03
Binary files /dev/null and b/documentation/images/ACS-Style-3.0..png differ
diff --git a/documentation/images/AP-to-AP-3.0..gif b/documentation/images/AP-to-AP-3.0..gif
new file mode 100644
index 0000000000..08300cbe73
Binary files /dev/null and b/documentation/images/AP-to-AP-3.0..gif differ
diff --git a/documentation/images/AS-chains-2-3.0..png b/documentation/images/AS-chains-2-3.0..png
new file mode 100644
index 0000000000..412f1bf031
Binary files /dev/null and b/documentation/images/AS-chains-2-3.0..png differ
diff --git a/documentation/images/AS-chains-3.0..png b/documentation/images/AS-chains-3.0..png
new file mode 100644
index 0000000000..72a227e12e
Binary files /dev/null and b/documentation/images/AS-chains-3.0..png differ
diff --git a/documentation/images/Ambiguous-Preview-3.0..png b/documentation/images/Ambiguous-Preview-3.0..png
new file mode 100644
index 0000000000..44a0e0419e
Binary files /dev/null and b/documentation/images/Ambiguous-Preview-3.0..png differ
diff --git a/documentation/images/Bond-Hover-3.0..png b/documentation/images/Bond-Hover-3.0..png
new file mode 100644
index 0000000000..21343131e0
Binary files /dev/null and b/documentation/images/Bond-Hover-3.0..png differ
diff --git a/documentation/images/Bond-Properties-3.0..png b/documentation/images/Bond-Properties-3.0..png
new file mode 100644
index 0000000000..2e3ba961b5
Binary files /dev/null and b/documentation/images/Bond-Properties-3.0..png differ
diff --git a/documentation/images/CIP-Button-3.0..png b/documentation/images/CIP-Button-3.0..png
new file mode 100644
index 0000000000..139421d1e3
Binary files /dev/null and b/documentation/images/CIP-Button-3.0..png differ
diff --git a/documentation/images/Caffeine-ACS-3.0..png b/documentation/images/Caffeine-ACS-3.0..png
new file mode 100644
index 0000000000..dd933be858
Binary files /dev/null and b/documentation/images/Caffeine-ACS-3.0..png differ
diff --git a/documentation/images/Caffeine-Ket-Default-3.0..png b/documentation/images/Caffeine-Ket-Default-3.0..png
new file mode 100644
index 0000000000..fe566af29d
Binary files /dev/null and b/documentation/images/Caffeine-Ket-Default-3.0..png differ
diff --git a/documentation/images/Center-to-AP-3.0..gif b/documentation/images/Center-to-AP-3.0..gif
new file mode 100644
index 0000000000..e87ff1ea2f
Binary files /dev/null and b/documentation/images/Center-to-AP-3.0..gif differ
diff --git a/documentation/images/Center-to-Center-3.0..gif b/documentation/images/Center-to-Center-3.0..gif
new file mode 100644
index 0000000000..c1c801c607
Binary files /dev/null and b/documentation/images/Center-to-Center-3.0..gif differ
diff --git a/documentation/images/Create-Preset-2-3.0..png b/documentation/images/Create-Preset-2-3.0..png
new file mode 100644
index 0000000000..645e882c50
Binary files /dev/null and b/documentation/images/Create-Preset-2-3.0..png differ
diff --git a/documentation/images/Create-Preset-3-3.0..png b/documentation/images/Create-Preset-3-3.0..png
new file mode 100644
index 0000000000..2d9acb404e
Binary files /dev/null and b/documentation/images/Create-Preset-3-3.0..png differ
diff --git a/documentation/images/Create-Preset-3.0..png b/documentation/images/Create-Preset-3.0..png
new file mode 100644
index 0000000000..927b6aac93
Binary files /dev/null and b/documentation/images/Create-Preset-3.0..png differ
diff --git a/documentation/images/Edit-CP-2-3.0..png b/documentation/images/Edit-CP-2-3.0..png
new file mode 100644
index 0000000000..011e1a4613
Binary files /dev/null and b/documentation/images/Edit-CP-2-3.0..png differ
diff --git a/documentation/images/Edit-CP-3.0..png b/documentation/images/Edit-CP-3.0..png
new file mode 100644
index 0000000000..84f69fabbe
Binary files /dev/null and b/documentation/images/Edit-CP-3.0..png differ
diff --git a/documentation/images/Expand-Monomer-2-3.0..png b/documentation/images/Expand-Monomer-2-3.0..png
new file mode 100644
index 0000000000..f8fa5235a6
Binary files /dev/null and b/documentation/images/Expand-Monomer-2-3.0..png differ
diff --git a/documentation/images/Expand-Monomer-3.0..png b/documentation/images/Expand-Monomer-3.0..png
new file mode 100644
index 0000000000..6c5334091e
Binary files /dev/null and b/documentation/images/Expand-Monomer-3.0..png differ
diff --git a/documentation/images/Functional-Groups-3.0..png b/documentation/images/Functional-Groups-3.0..png
new file mode 100644
index 0000000000..668b7a0b10
Binary files /dev/null and b/documentation/images/Functional-Groups-3.0..png differ
diff --git a/documentation/images/H-Bond-3.0..gif b/documentation/images/H-Bond-3.0..gif
new file mode 100644
index 0000000000..5034ad5a76
Binary files /dev/null and b/documentation/images/H-Bond-3.0..gif differ
diff --git a/documentation/images/Highlighting-3.0..png b/documentation/images/Highlighting-3.0..png
new file mode 100644
index 0000000000..371a311b25
Binary files /dev/null and b/documentation/images/Highlighting-3.0..png differ
diff --git a/documentation/images/Ketcher-Micro-Whole-Canvas.png b/documentation/images/Ketcher-Micro-Whole-Canvas.png
new file mode 100644
index 0000000000..1d469db38a
Binary files /dev/null and b/documentation/images/Ketcher-Micro-Whole-Canvas.png differ
diff --git a/documentation/images/Library-Search-3.0..png b/documentation/images/Library-Search-3.0..png
new file mode 100644
index 0000000000..db72ddc628
Binary files /dev/null and b/documentation/images/Library-Search-3.0..png differ
diff --git a/documentation/images/Library-Tabs-3.0..png b/documentation/images/Library-Tabs-3.0..png
new file mode 100644
index 0000000000..74eb598aef
Binary files /dev/null and b/documentation/images/Library-Tabs-3.0..png differ
diff --git a/documentation/images/Macro-Bonds-3.0..png b/documentation/images/Macro-Bonds-3.0..png
new file mode 100644
index 0000000000..acd3fc7728
Binary files /dev/null and b/documentation/images/Macro-Bonds-3.0..png differ
diff --git a/documentation/images/Macro-Canvas-3.0..png b/documentation/images/Macro-Canvas-3.0..png
new file mode 100644
index 0000000000..c62efe1b01
Binary files /dev/null and b/documentation/images/Macro-Canvas-3.0..png differ
diff --git a/documentation/images/Macro-Left-Toolbar-3.0..png b/documentation/images/Macro-Left-Toolbar-3.0..png
new file mode 100644
index 0000000000..49fda565da
Binary files /dev/null and b/documentation/images/Macro-Left-Toolbar-3.0..png differ
diff --git a/documentation/images/Macro-Micro-2-3.0..png b/documentation/images/Macro-Micro-2-3.0..png
new file mode 100644
index 0000000000..3f57355b18
Binary files /dev/null and b/documentation/images/Macro-Micro-2-3.0..png differ
diff --git a/documentation/images/Macro-Micro-3.0..png b/documentation/images/Macro-Micro-3.0..png
new file mode 100644
index 0000000000..87febc39cf
Binary files /dev/null and b/documentation/images/Macro-Micro-3.0..png differ
diff --git a/documentation/images/Macro-Toolbar-3.0..png b/documentation/images/Macro-Toolbar-3.0..png
new file mode 100644
index 0000000000..e30b8dd6ba
Binary files /dev/null and b/documentation/images/Macro-Toolbar-3.0..png differ
diff --git a/documentation/images/Macromolecules-Mode-Switcher-3.0..png b/documentation/images/Macromolecules-Mode-Switcher-3.0..png
new file mode 100644
index 0000000000..3beee5fff7
Binary files /dev/null and b/documentation/images/Macromolecules-Mode-Switcher-3.0..png differ
diff --git a/documentation/images/Micro-3.0.-Toolbar.png b/documentation/images/Micro-3.0.-Toolbar.png
new file mode 100644
index 0000000000..e401826c40
Binary files /dev/null and b/documentation/images/Micro-3.0.-Toolbar.png differ
diff --git a/documentation/images/Micro-Macro-Structure-2-3.0..png b/documentation/images/Micro-Macro-Structure-2-3.0..png
new file mode 100644
index 0000000000..6a0558c8e0
Binary files /dev/null and b/documentation/images/Micro-Macro-Structure-2-3.0..png differ
diff --git a/documentation/images/Micro-Macro-Structure-3-3.0..png b/documentation/images/Micro-Macro-Structure-3-3.0..png
new file mode 100644
index 0000000000..4d5705e7d2
Binary files /dev/null and b/documentation/images/Micro-Macro-Structure-3-3.0..png differ
diff --git a/documentation/images/Micro-Macro-Structure-3.0..png b/documentation/images/Micro-Macro-Structure-3.0..png
new file mode 100644
index 0000000000..24cc6315ba
Binary files /dev/null and b/documentation/images/Micro-Macro-Structure-3.0..png differ
diff --git a/documentation/images/Micro-Macro-Structure-4-3.0..png b/documentation/images/Micro-Macro-Structure-4-3.0..png
new file mode 100644
index 0000000000..1e69ff0d17
Binary files /dev/null and b/documentation/images/Micro-Macro-Structure-4-3.0..png differ
diff --git a/documentation/images/Micro-Macro-Structure-5-3.0..png b/documentation/images/Micro-Macro-Structure-5-3.0..png
new file mode 100644
index 0000000000..7de0cae6cd
Binary files /dev/null and b/documentation/images/Micro-Macro-Structure-5-3.0..png differ
diff --git a/documentation/images/Micro-Macro-Switcher.png b/documentation/images/Micro-Macro-Switcher.png
new file mode 100644
index 0000000000..cf5622ea0c
Binary files /dev/null and b/documentation/images/Micro-Macro-Switcher.png differ
diff --git a/documentation/images/Modify-in-RNA-Builder-2-3.0..png b/documentation/images/Modify-in-RNA-Builder-2-3.0..png
new file mode 100644
index 0000000000..a7fcc191b3
Binary files /dev/null and b/documentation/images/Modify-in-RNA-Builder-2-3.0..png differ
diff --git a/documentation/images/Modify-in-RNA-Builder-3-3.0..png b/documentation/images/Modify-in-RNA-Builder-3-3.0..png
new file mode 100644
index 0000000000..bff98e66db
Binary files /dev/null and b/documentation/images/Modify-in-RNA-Builder-3-3.0..png differ
diff --git a/documentation/images/Modify-in-RNA-Builder-3.0..png b/documentation/images/Modify-in-RNA-Builder-3.0..png
new file mode 100644
index 0000000000..1e34a250a9
Binary files /dev/null and b/documentation/images/Modify-in-RNA-Builder-3.0..png differ
diff --git a/documentation/images/Modify-in-RNA-Builder-4-3.0..png b/documentation/images/Modify-in-RNA-Builder-4-3.0..png
new file mode 100644
index 0000000000..06730a7200
Binary files /dev/null and b/documentation/images/Modify-in-RNA-Builder-4-3.0..png differ
diff --git a/documentation/images/Monomer-Hover-3.0..png b/documentation/images/Monomer-Hover-3.0..png
new file mode 100644
index 0000000000..47d40494e1
Binary files /dev/null and b/documentation/images/Monomer-Hover-3.0..png differ
diff --git a/documentation/images/Monomer-Preview-3.0..png b/documentation/images/Monomer-Preview-3.0..png
new file mode 100644
index 0000000000..845fdd21c7
Binary files /dev/null and b/documentation/images/Monomer-Preview-3.0..png differ
diff --git a/documentation/images/Og-Search.png b/documentation/images/Og-Search.png
new file mode 100644
index 0000000000..b6aeb90a4d
Binary files /dev/null and b/documentation/images/Og-Search.png differ
diff --git a/documentation/images/Open-Structure-3.0..png b/documentation/images/Open-Structure-3.0..png
new file mode 100644
index 0000000000..987555413a
Binary files /dev/null and b/documentation/images/Open-Structure-3.0..png differ
diff --git a/documentation/images/Open-Structure-Macro-2-3.0..png b/documentation/images/Open-Structure-Macro-2-3.0..png
new file mode 100644
index 0000000000..57c8ae66da
Binary files /dev/null and b/documentation/images/Open-Structure-Macro-2-3.0..png differ
diff --git a/documentation/images/Open-Structure-Macro-3.0..png b/documentation/images/Open-Structure-Macro-3.0..png
new file mode 100644
index 0000000000..6330e92c35
Binary files /dev/null and b/documentation/images/Open-Structure-Macro-3.0..png differ
diff --git a/documentation/images/Open-Structure-Micro-3.0..png b/documentation/images/Open-Structure-Micro-3.0..png
new file mode 100644
index 0000000000..24e3cea719
Binary files /dev/null and b/documentation/images/Open-Structure-Micro-3.0..png differ
diff --git a/documentation/images/PT-Button-3.0..png b/documentation/images/PT-Button-3.0..png
new file mode 100644
index 0000000000..07e9eb8274
Binary files /dev/null and b/documentation/images/PT-Button-3.0..png differ
diff --git a/documentation/images/Preset-Preview-3.0..png b/documentation/images/Preset-Preview-3.0..png
new file mode 100644
index 0000000000..e044f6b33a
Binary files /dev/null and b/documentation/images/Preset-Preview-3.0..png differ
diff --git a/documentation/images/R-Group-3.0..png b/documentation/images/R-Group-3.0..png
new file mode 100644
index 0000000000..950944c052
Binary files /dev/null and b/documentation/images/R-Group-3.0..png differ
diff --git a/documentation/images/R-group-2-3.0..png b/documentation/images/R-group-2-3.0..png
new file mode 100644
index 0000000000..9247f0fa7d
Binary files /dev/null and b/documentation/images/R-group-2-3.0..png differ
diff --git a/documentation/images/S-Group-Properties-2-3.0..png b/documentation/images/S-Group-Properties-2-3.0..png
new file mode 100644
index 0000000000..6e5cb8b00c
Binary files /dev/null and b/documentation/images/S-Group-Properties-2-3.0..png differ
diff --git a/documentation/images/S-Group-Properties-3.0..png b/documentation/images/S-Group-Properties-3.0..png
new file mode 100644
index 0000000000..95fdea486a
Binary files /dev/null and b/documentation/images/S-Group-Properties-3.0..png differ
diff --git a/documentation/images/Save-Structure-Macro-3.0..png b/documentation/images/Save-Structure-Macro-3.0..png
new file mode 100644
index 0000000000..c8d9059b42
Binary files /dev/null and b/documentation/images/Save-Structure-Macro-3.0..png differ
diff --git a/documentation/images/Save-Structure-Micro-2-3.0..png b/documentation/images/Save-Structure-Micro-2-3.0..png
new file mode 100644
index 0000000000..eeefdbbe61
Binary files /dev/null and b/documentation/images/Save-Structure-Micro-2-3.0..png differ
diff --git a/documentation/images/Save-Structure-Micro-3.0..png b/documentation/images/Save-Structure-Micro-3.0..png
new file mode 100644
index 0000000000..6cf3c58695
Binary files /dev/null and b/documentation/images/Save-Structure-Micro-3.0..png differ
diff --git a/documentation/images/Save-To-Templates-3.0..png b/documentation/images/Save-To-Templates-3.0..png
new file mode 100644
index 0000000000..2ef3a04141
Binary files /dev/null and b/documentation/images/Save-To-Templates-3.0..png differ
diff --git a/documentation/images/Select-Connectio-Points-2-3.0..png b/documentation/images/Select-Connectio-Points-2-3.0..png
new file mode 100644
index 0000000000..b52e07e3f4
Binary files /dev/null and b/documentation/images/Select-Connectio-Points-2-3.0..png differ
diff --git a/documentation/images/Select-Connection-Points-3.0..gif b/documentation/images/Select-Connection-Points-3.0..gif
new file mode 100644
index 0000000000..33e96cc989
Binary files /dev/null and b/documentation/images/Select-Connection-Points-3.0..gif differ
diff --git a/documentation/images/Sequence-Mode-2-3.0..png b/documentation/images/Sequence-Mode-2-3.0..png
new file mode 100644
index 0000000000..66673eb09b
Binary files /dev/null and b/documentation/images/Sequence-Mode-2-3.0..png differ
diff --git a/documentation/images/Sequence-Mode-3-3.0..png b/documentation/images/Sequence-Mode-3-3.0..png
new file mode 100644
index 0000000000..5b893ae2ff
Binary files /dev/null and b/documentation/images/Sequence-Mode-3-3.0..png differ
diff --git a/documentation/images/Sequence-Mode-3.0..png b/documentation/images/Sequence-Mode-3.0..png
new file mode 100644
index 0000000000..7f7d421dca
Binary files /dev/null and b/documentation/images/Sequence-Mode-3.0..png differ
diff --git a/documentation/images/Settings-3.0..png b/documentation/images/Settings-3.0..png
new file mode 100644
index 0000000000..d009123fa8
Binary files /dev/null and b/documentation/images/Settings-3.0..png differ
diff --git a/documentation/images/Snake-Flex-Diff-3.0..png b/documentation/images/Snake-Flex-Diff-3.0..png
new file mode 100644
index 0000000000..b030547776
Binary files /dev/null and b/documentation/images/Snake-Flex-Diff-3.0..png differ
diff --git a/documentation/images/Snake-and-Flex-2-3.0..png b/documentation/images/Snake-and-Flex-2-3.0..png
new file mode 100644
index 0000000000..a322f6311e
Binary files /dev/null and b/documentation/images/Snake-and-Flex-2-3.0..png differ
diff --git a/documentation/images/Snake-and-Flex-3-3.0..png b/documentation/images/Snake-and-Flex-3-3.0..png
new file mode 100644
index 0000000000..89ffb63bc7
Binary files /dev/null and b/documentation/images/Snake-and-Flex-3-3.0..png differ
diff --git a/documentation/images/Snake-and-Flex-3.0..png b/documentation/images/Snake-and-Flex-3.0..png
new file mode 100644
index 0000000000..6b9c77bb36
Binary files /dev/null and b/documentation/images/Snake-and-Flex-3.0..png differ
diff --git a/documentation/images/Snake-and-Flex-4-3.0..png b/documentation/images/Snake-and-Flex-4-3.0..png
new file mode 100644
index 0000000000..9506a8401b
Binary files /dev/null and b/documentation/images/Snake-and-Flex-4-3.0..png differ
diff --git a/documentation/images/Special-Symbols-3.0..png b/documentation/images/Special-Symbols-3.0..png
new file mode 100644
index 0000000000..968770cc5e
Binary files /dev/null and b/documentation/images/Special-Symbols-3.0..png differ
diff --git a/documentation/images/Structure-Check-3.0..png b/documentation/images/Structure-Check-3.0..png
new file mode 100644
index 0000000000..fc7c0db66d
Binary files /dev/null and b/documentation/images/Structure-Check-3.0..png differ
diff --git a/documentation/images/Structure-Library-3.0..png b/documentation/images/Structure-Library-3.0..png
new file mode 100644
index 0000000000..d05cf0a527
Binary files /dev/null and b/documentation/images/Structure-Library-3.0..png differ
diff --git a/documentation/images/Typing-Switcher-3.0..png b/documentation/images/Typing-Switcher-3.0..png
new file mode 100644
index 0000000000..696879a4c4
Binary files /dev/null and b/documentation/images/Typing-Switcher-3.0..png differ
diff --git a/documentation/images/Using-Templates-2-3.0..png b/documentation/images/Using-Templates-2-3.0..png
new file mode 100644
index 0000000000..4293ddb4cd
Binary files /dev/null and b/documentation/images/Using-Templates-2-3.0..png differ
diff --git a/documentation/images/Using-Templates-3-3.0..png b/documentation/images/Using-Templates-3-3.0..png
new file mode 100644
index 0000000000..05aa58069c
Binary files /dev/null and b/documentation/images/Using-Templates-3-3.0..png differ
diff --git a/documentation/images/Using-Templates-3.0..png b/documentation/images/Using-Templates-3.0..png
new file mode 100644
index 0000000000..6180def97f
Binary files /dev/null and b/documentation/images/Using-Templates-3.0..png differ
diff --git a/documentation/images/Zoom-3.0..png b/documentation/images/Zoom-3.0..png
new file mode 100644
index 0000000000..6988381a14
Binary files /dev/null and b/documentation/images/Zoom-3.0..png differ
diff --git a/example-separate-editors/.eslintignore b/example-separate-editors/.eslintignore
deleted file mode 100644
index a55244bff2..0000000000
--- a/example-separate-editors/.eslintignore
+++ /dev/null
@@ -1,4 +0,0 @@
-dist/
-public/
-build/
-config/
\ No newline at end of file
diff --git a/example-separate-editors/.eslintrc.json b/example-separate-editors/.eslintrc.json
deleted file mode 100644
index f78afb96b3..0000000000
--- a/example-separate-editors/.eslintrc.json
+++ /dev/null
@@ -1,34 +0,0 @@
-{
- "root": false,
- "env": {
- "browser": true
- },
- "extends": [
- "plugin:react/jsx-runtime",
- "plugin:jsx-a11y/recommended",
- "plugin:react-hooks/recommended",
- "plugin:jest/recommended"
- ],
- "rules": {
- "@typescript-eslint/ban-ts-comment": "warn",
- "jsx-a11y/label-has-associated-control": "warn",
- "jsx-a11y/no-static-element-interactions": "warn",
- "jsx-a11y/no-autofocus": "warn",
- "jsx-a11y/no-noninteractive-element-interactions": "warn",
- "jsx-a11y/alt-text": "warn",
- "jsx-a11y/click-events-have-key-events": "warn"
- },
- "overrides": [
- {
- "files": [
- "**/__tests__/**/*.[jt]s?(x)",
- "**/?(*.)+(spec|test).[jt]s?(x)"
- ],
- "extends": ["plugin:testing-library/react"],
- "rules": {
- "testing-library/no-container": "warn",
- "testing-library/no-node-access": "warn"
- }
- }
- ]
-}
diff --git a/example-separate-editors/.prettierignore b/example-separate-editors/.prettierignore
deleted file mode 100644
index edd9d60a7a..0000000000
--- a/example-separate-editors/.prettierignore
+++ /dev/null
@@ -1,2 +0,0 @@
-build/
-dist/
diff --git a/example-separate-editors/.stylelintignore b/example-separate-editors/.stylelintignore
deleted file mode 100644
index edd9d60a7a..0000000000
--- a/example-separate-editors/.stylelintignore
+++ /dev/null
@@ -1,2 +0,0 @@
-build/
-dist/
diff --git a/example-separate-editors/README.md b/example-separate-editors/README.md
deleted file mode 100644
index 3394f7cdee..0000000000
--- a/example-separate-editors/README.md
+++ /dev/null
@@ -1,6 +0,0 @@
-This example was bootstrapped with [Create React App](https://github.com/facebook/create-react-app).
-
-It is linked to the @ketcher/react package in the parent directory for development purposes.
-
-To run application for development purposes, please check instructions:
-[DEVNOTES.md](https://github.com/epam/ketcher/blob/master/DEVNOTES.md)
diff --git a/example-separate-editors/config/webpack.config.js b/example-separate-editors/config/webpack.config.js
deleted file mode 100644
index 48fcf2e56b..0000000000
--- a/example-separate-editors/config/webpack.config.js
+++ /dev/null
@@ -1,51 +0,0 @@
-const {
- override,
- addBundleVisualizer,
- addWebpackModuleRule,
- addWebpackPlugin,
-} = require('customize-cra');
-const webpack = require('webpack');
-const HtmlReplaceWebpackPlugin = require('html-replace-webpack-plugin');
-const GitRevisionPlugin = require('git-revision-webpack-plugin');
-const CopyPlugin = require('copy-webpack-plugin');
-
-const gitRevisionPlugin = new GitRevisionPlugin();
-const applicationVersion = gitRevisionPlugin.version().split('-')[0];
-
-const envVariables = {
- MODE: process.env.MODE || 'standalone',
- API_PATH: process.env.REACT_APP_API_PATH,
- ENABLE_POLYMER_EDITOR: !!process.env.ENABLE_POLYMER_EDITOR,
- KETCHER_ENABLE_REDUX_LOGGER: JSON.stringify(false),
-};
-
-module.exports = override(
- addBundleVisualizer({}, true),
- addWebpackModuleRule({
- test: /\.js$/,
- enforce: 'pre',
- loader: 'source-map-loader',
- exclude: /node_modules/,
- }),
- addWebpackPlugin(new webpack.EnvironmentPlugin(envVariables)),
- addWebpackPlugin(
- new HtmlReplaceWebpackPlugin([
- {
- pattern: '@@version',
- replacement: applicationVersion,
- },
- ]),
- ),
- addWebpackPlugin(
- new CopyPlugin({
- patterns: [
- {
- from: '../node_modules/ketcher-standalone/**/*.wasm',
- to: '[name][ext]',
- },
- ],
- }),
- ),
-);
-
-module.exports.envVariables = envVariables;
diff --git a/example-separate-editors/package.json b/example-separate-editors/package.json
deleted file mode 100644
index e7929d8611..0000000000
--- a/example-separate-editors/package.json
+++ /dev/null
@@ -1,94 +0,0 @@
-{
- "name": "example-separate-editors",
- "version": "1.0.0",
- "private": true,
- "scripts": {
- "dev:standalone": "cross-env MODE=standalone vite",
- "dev:standalone:macro": "cross-env ENABLE_POLYMER_EDITOR=true MODE=standalone vite",
- "dev:remote": "cross-env MODE=remote vite",
- "start:standalone": "cross-env MODE=standalone react-app-rewired start",
- "start:remote": "cross-env MODE=remote react-app-rewired start",
- "init:build": "shx mkdir -p build",
- "init:dist": "cross-env-shell shx mkdir -p dist/$MODE",
- "delete:dist": "cross-env-shell shx rm -rf dist/$MODE",
- "copy:build": "cross-env-shell shx cp -r build/. dist/$MODE",
- "prebuild": "cross-env-shell run-s init:build delete:dist init:dist",
- "postbuild": "cross-env-shell npm run copy:build",
- "build:remote": "cross-env-shell MODE=remote run-s prebuild build:react postbuild",
- "build:standalone": "cross-env-shell MODE=standalone run-s prebuild build:react postbuild",
- "build:react": "cross-env-shell MODE=$MODE react-app-rewired build && echo $MODE",
- "build:react:analyze": "react-app-rewired build --analyze",
- "build": "npm run build:standalone && npm run build:remote",
- "build:standalone:analyze": "cross-env MODE=standalone run-s prebuild build:react:analyze postbuild",
- "build:remote:analyze": "cross-env MODE=remote run-s prebuild build:react:analyze postbuild",
- "test": "run-s test:prettier test:stylelint test:eslint:quiet test:types test:unit",
- "test:eslint": "eslint . --ext .ts,.js,.jsx,.tsx",
- "test:eslint:quiet": "npm run test:eslint -- --quiet",
- "test:eslint:fix": "npm run test:eslint -- --fix",
- "test:types": "tsc --noEmit",
- "test:unit": "react-app-rewired test --passWithNoTests --watchAll=false",
- "test:stylelint": "stylelint \"./**/*.{css,less}\" --formatter",
- "test:prettier": "prettier --check \"./**/*.{js,ts,jsx,tsx,json}\"",
- "prettier:write": "prettier --write \"./**/*.{js,jsx,json,ts,tsx}\"",
- "stylelint:fix": "stylelint \"./**/*.{css,less}\" --formatter verbose --fix",
- "serve:remote": "serve -s dist/remote -l 4001",
- "serve:standalone": "serve -s dist/standalone -l 4002",
- "eject": "react-scripts eject"
- },
- "dependencies": {
- "ketcher-core": "*",
- "ketcher-macromolecules": "*",
- "ketcher-react": "*",
- "ketcher-standalone": "*",
- "normalize.css": "^8.0.1",
- "react": "^18.2.0",
- "react-app-polyfill": "^2.0.0",
- "react-dom": "^18.2.0"
- },
- "devDependencies": {
- "@rollup/plugin-replace": "^5.0.2",
- "@testing-library/jest-dom": "^4.2.4",
- "@testing-library/react": "^9.5.0",
- "@testing-library/user-event": "^7.2.1",
- "@types/jest": "^27.0.3",
- "@types/node": "^16.11.12",
- "@types/react": "^18.0.25",
- "@types/react-dom": "^18.0.8",
- "@vitejs/plugin-react": "^4.0.0",
- "@welldone-software/why-did-you-render": "^4.3.1",
- "copy-webpack-plugin": "^12.0.2",
- "cross-env": "^7.0.3",
- "customize-cra": "^1.0.0",
- "eslint": "^8.44.0",
- "git-revision-webpack-plugin": "^3.0.6",
- "html-replace-webpack-plugin": "^2.5.6",
- "npm-run-all": "^4.1.5",
- "prettier": "^2.5.1",
- "react-app-rewired": "^2.2.1",
- "react-scripts": "^5.0.1",
- "serve": "^13.0.2",
- "shx": "^0.3.3",
- "source-map-loader": "^3.0.1",
- "stylelint": "13.13.1",
- "typescript": "^4.5.2",
- "vite": "^4.5.5",
- "vite-plugin-html": "^3.2.0",
- "vite-plugin-raw": "^1.0.3",
- "vite-plugin-svgr": "^2.4.0",
- "webpack-bundle-analyzer": "^4.8.0"
- },
- "browserslist": {
- "production": [
- ">0.2%",
- "not dead",
- "not op_mini all"
- ],
- "development": [
- "ie 11",
- "last 1 chrome version",
- "last 1 firefox version",
- "last 1 safari version"
- ]
- },
- "config-overrides-path": "config/webpack.config.js"
-}
diff --git a/example-separate-editors/public/apple-touch-icon.png b/example-separate-editors/public/apple-touch-icon.png
deleted file mode 100644
index b1e8a31c89..0000000000
Binary files a/example-separate-editors/public/apple-touch-icon.png and /dev/null differ
diff --git a/example-separate-editors/public/favicon-16x16.png b/example-separate-editors/public/favicon-16x16.png
deleted file mode 100644
index b273a31a23..0000000000
Binary files a/example-separate-editors/public/favicon-16x16.png and /dev/null differ
diff --git a/example-separate-editors/public/favicon-32x32.png b/example-separate-editors/public/favicon-32x32.png
deleted file mode 100644
index c6778eeef5..0000000000
Binary files a/example-separate-editors/public/favicon-32x32.png and /dev/null differ
diff --git a/example-separate-editors/public/favicon.ico b/example-separate-editors/public/favicon.ico
deleted file mode 100644
index 87c2d93ba1..0000000000
Binary files a/example-separate-editors/public/favicon.ico and /dev/null differ
diff --git a/example-separate-editors/public/iframe.html b/example-separate-editors/public/iframe.html
deleted file mode 100644
index 16efd14912..0000000000
--- a/example-separate-editors/public/iframe.html
+++ /dev/null
@@ -1,149 +0,0 @@
-
-
-
-
-
-
- Document
-
-
-
-
-
-
-
diff --git a/example-separate-editors/public/logo.svg b/example-separate-editors/public/logo.svg
deleted file mode 100644
index 30316dee70..0000000000
--- a/example-separate-editors/public/logo.svg
+++ /dev/null
@@ -1 +0,0 @@
-Ketcher logo
diff --git a/example-separate-editors/public/manifest.json b/example-separate-editors/public/manifest.json
deleted file mode 100644
index 8361cda4f0..0000000000
--- a/example-separate-editors/public/manifest.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "short_name": "Ketcher",
- "name": "Ketcher",
- "icons": [
- {
- "src": "favicon.ico",
- "sizes": "64x64 32x32 24x24 16x16",
- "type": "image/x-icon"
- }
- ],
- "start_url": ".",
- "display": "standalone",
- "theme_color": "#000000",
- "background_color": "#ffffff"
-}
diff --git a/example-separate-editors/public/robots.txt b/example-separate-editors/public/robots.txt
deleted file mode 100644
index e9e57dc4d4..0000000000
--- a/example-separate-editors/public/robots.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-# https://www.robotstxt.org/robotstxt.html
-User-agent: *
-Disallow:
diff --git a/example-separate-editors/src/ModeControl/ModeControl.tsx b/example-separate-editors/src/ModeControl/ModeControl.tsx
deleted file mode 100644
index 9811fd29f5..0000000000
--- a/example-separate-editors/src/ModeControl/ModeControl.tsx
+++ /dev/null
@@ -1,228 +0,0 @@
-/****************************************************************************
- * Copyright 2021 EPAM Systems
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- ***************************************************************************/
-
-import { useState, useRef } from 'react';
-import styled from '@emotion/styled';
-import { Button, Popover } from '@mui/material';
-import {
- Icon,
- KETCHER_ROOT_NODE_CSS_SELECTOR,
- KETCHER_MACROMOLECULES_ROOT_NODE_SELECTOR,
-} from 'ketcher-react';
-
-interface IStyledIconProps {
- expanded?: boolean;
- hidden?: boolean;
-}
-const ElementAndDropdown = styled('div')`
- position: relative;
- width: 28px;
- padding: 2px;
- flexgrow: 1;
- display: flex;
- justifycontent: flex-end;
-
- @media only screen {
- @container (min-width: 900px) {
- width: 162px;
- padding: 6px 3px;
- }
- }
-`;
-
-const DropDownButton = styled(Button)(() => ({
- display: 'flex',
- justifyContent: 'space-between',
- color: '#000000',
- padding: '0px',
- width: '100%',
- minWidth: '0px',
-
- '& svg:first-of-type': {
- margin: '2px',
- width: '20px',
- height: '20px',
- },
-}));
-
-const StyledIcon = styled(Icon)`
- width: 16px;
- height: 16px;
- transform: ${({ expanded }) => (expanded ? 'rotate(180deg)' : 'none')};
- opacity: ${({ hidden }) => (hidden ? '0' : '100')};
-`;
-
-const StyledIconForMacromoleculesToggler = styled(StyledIcon)`
- display: none;
- @media only screen {
- @container (min-width: 900px) {
- display: flex;
- }
- }
-`;
-
-const CornerIcon = styled(Icon)`
- display: block;
- width: 7px;
- height: 7px;
- position: absolute;
- right: 0;
- bottom: 0;
- fill: @main-color;
- @media only screen {
- @container (min-width: 900px) {
- display: none;
- }
- }
-`;
-
-const ModeLabel = styled('span')`
- display: none;
- text-transform: none;
- font-size: 12px;
- text-align: left;
- flex-grow: 1;
- @media only screen {
- @container (min-width: 900px) {
- display: inline;
- }
- }
-`;
-
-const ModeControlButton = styled('div')`
- height: 28px;
- display: flex;
- align-items: center;
- justify-content: space-between;
- padding: 0 3px;
-
- :hover {
- background-color: #f3f8f9;
- }
-`;
-
-const ModeButtonLable = styled('span')`
- font-size: 12px;
- flex-grow: 1;
- text-align: start;
- text-transform: none;
-`;
-
-const Dropdown = styled(Popover)`
- & .MuiPopover-paper {
- padding: 3px 0px;
- width: 162px;
- border: none;
- border-radius: 0px 0px 4px 4px;
- box-shadow: 0px 30px 48px -17px rgba(160, 165, 174, 0.3);
- box-sizing: border-box;
- }
-`;
-
-const DropDownContent = styled('div')`
- display: flex;
- flex-direction: column;
- white-space: nowrap;
- word-break: keep-all;
- background: white;
- cursor: pointer;
-`;
-
-interface ModeProps {
- toggle: (isEnabled: boolean) => void;
- isPolymerEditor: boolean;
-}
-
-export const ModeControl = ({ toggle, isPolymerEditor }: ModeProps) => {
- const [isExpanded, setIsExpanded] = useState(false);
- const btnRef = useRef(null);
-
- const onClose = () => {
- setIsExpanded(false);
- };
-
- const onExpand = () => {
- setIsExpanded(true);
- };
-
- const modeLabel = isPolymerEditor ? 'Macromolecules' : 'Molecules';
- const modeIcon = isPolymerEditor ? 'macromolecules-mode' : 'molecules-mode';
- const title = isPolymerEditor
- ? 'Switch to Ketcher mode'
- : 'Switch to Macromolecule mode';
-
- return (
-
-
-
- <>
- {modeLabel}
-
- >
- <>
-
- >
-
-
-
- {
- toggle(false);
- onClose();
- }}
- >
-
- Molecules
- {!isPolymerEditor && }
-
-
- {
- toggle(true);
- onClose();
- }}
- >
-
- Macromolecules
- {isPolymerEditor && }
-
-
-
-
- );
-};
diff --git a/example-separate-editors/src/PolymerToggler/PolymerToggler.module.css b/example-separate-editors/src/PolymerToggler/PolymerToggler.module.css
deleted file mode 100644
index 857cb52b36..0000000000
--- a/example-separate-editors/src/PolymerToggler/PolymerToggler.module.css
+++ /dev/null
@@ -1,65 +0,0 @@
-/****************************************************************************
- * Copyright 2021 EPAM Systems
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- ***************************************************************************/
-
-.switch {
- position: fixed;
- display: block;
- width: 24px;
- height: 14px;
- right: 50px;
- bottom: 50px;
-}
-
-.switch input {
- display: none;
-}
-
-.slider {
- position: absolute;
- cursor: pointer;
- right: 0;
- bottom: 0;
- background-color: #c4c4c4;
- -webkit-transition: 0.4s;
- transition: background 0.4s;
- border-radius: 7px;
- width: 26px;
- height: 14px;
-}
-
-.slider::before {
- position: absolute;
- content: '';
- height: 10px;
- width: 10px;
- left: 2px;
- top: 2px;
- background-color: #343434;
- -webkit-transition: 0.4s;
- transition: transform 0.4s ease-in 0s;
- border-radius: 50%;
-}
-
-.switch input:checked + .slider {
- background-color: #343434;
-}
-
-.switch input:checked + .slider::before {
- background-color: #fff;
- -webkit-transform: translateX(12px);
- -ms-transform: translateX(12px);
- transform: translateX(12px);
-}
diff --git a/example-separate-editors/src/PolymerToggler/PolymerToggler.tsx b/example-separate-editors/src/PolymerToggler/PolymerToggler.tsx
deleted file mode 100644
index bc8181e1fc..0000000000
--- a/example-separate-editors/src/PolymerToggler/PolymerToggler.tsx
+++ /dev/null
@@ -1,34 +0,0 @@
-/****************************************************************************
- * Copyright 2021 EPAM Systems
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- ***************************************************************************/
-
-import styles from './PolymerToggler.module.css';
-
-export interface PolymerTogglerProps {
- toggle: (isEnabled: boolean) => void;
-}
-
-const PolymerToggler = ({ toggle }: PolymerTogglerProps): JSX.Element => {
- return (
-
- {/* eslint-disable jsx-a11y/label-has-associated-control */}
- toggle(e.target.checked)} />
-
- {/* eslint-enable jsx-a11y/label-has-associated-control */}
-
- );
-};
-
-export { PolymerToggler };
diff --git a/example-separate-editors/src/PolymerToggler/index.ts b/example-separate-editors/src/PolymerToggler/index.ts
deleted file mode 100644
index 14aa3eccb0..0000000000
--- a/example-separate-editors/src/PolymerToggler/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export * from './PolymerToggler';
diff --git a/example-separate-editors/src/index.css b/example-separate-editors/src/index.css
deleted file mode 100644
index b1ec6cace0..0000000000
--- a/example-separate-editors/src/index.css
+++ /dev/null
@@ -1,27 +0,0 @@
-@import 'normalize.css';
-
-body {
- margin: 0;
- padding: 0;
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
- 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
- sans-serif;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
-}
-
-code {
- font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',
- monospace;
-}
-
-#root {
- height: 100%;
- width: 100%;
-}
-
-html,
-body {
- height: 100%;
- width: 100%;
-}
diff --git a/example-separate-editors/src/react-app-env.d.ts b/example-separate-editors/src/react-app-env.d.ts
deleted file mode 100644
index 6431bc5fc6..0000000000
--- a/example-separate-editors/src/react-app-env.d.ts
+++ /dev/null
@@ -1 +0,0 @@
-///
diff --git a/example-separate-editors/src/setupTests.ts b/example-separate-editors/src/setupTests.ts
deleted file mode 100644
index 74b1a275a0..0000000000
--- a/example-separate-editors/src/setupTests.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-// jest-dom adds custom jest matchers for asserting on DOM nodes.
-// allows you to do things like:
-// expect(element).toHaveTextContent(/react/i)
-// learn more: https://github.com/testing-library/jest-dom
-import '@testing-library/jest-dom/extend-expect';
diff --git a/example-separate-editors/src/typing.d.ts b/example-separate-editors/src/typing.d.ts
deleted file mode 100644
index 265d2e960c..0000000000
--- a/example-separate-editors/src/typing.d.ts
+++ /dev/null
@@ -1,26 +0,0 @@
-import { Ketcher } from 'ketcher-core';
-
-declare global {
- export interface IMessage {
- eventType: string;
- data?: unknown;
- }
- export interface Window {
- isPolymerEditorTurnedOn: boolean;
- postMessage(
- message: IMessage,
- targetOrigin: string,
- transfer?: Transferable[] | undefined,
- ): void;
-
- ketcher?: Ketcher;
- }
-
- declare namespace NodeJS {
- export interface ProcessEnv {
- API_PATH?: string;
- REACT_APP_API_PATH: string;
- PUBLIC_URL: string;
- }
- }
-}
diff --git a/example-separate-editors/src/wdyr.ts b/example-separate-editors/src/wdyr.ts
deleted file mode 100644
index fc169882bb..0000000000
--- a/example-separate-editors/src/wdyr.ts
+++ /dev/null
@@ -1,9 +0,0 @@
-import React from 'react';
-
-if (process.env.NODE_ENV === 'development') {
- // eslint-disable-next-line @typescript-eslint/no-var-requires
- const whyDidYouRender = require('@welldone-software/why-did-you-render');
- whyDidYouRender(React, {
- trackAllPureComponents: true,
- });
-}
diff --git a/example-separate-editors/tsconfig.json b/example-separate-editors/tsconfig.json
deleted file mode 100644
index bb58a5d4c7..0000000000
--- a/example-separate-editors/tsconfig.json
+++ /dev/null
@@ -1,31 +0,0 @@
-{
- "compilerOptions": {
- "outDir": "dist",
- "module": "esnext",
- "lib": ["dom", "esnext"],
- "moduleResolution": "node",
- "jsx": "react-jsx",
- "sourceMap": true,
- "declaration": true,
- "esModuleInterop": true,
- "noImplicitReturns": true,
- "noImplicitThis": true,
- "noImplicitAny": true,
- "strictNullChecks": true,
- "suppressImplicitAnyIndexErrors": true,
- "noUnusedLocals": true,
- "noUnusedParameters": true,
- "allowSyntheticDefaultImports": true,
- "target": "es5",
- "allowJs": true,
- "skipLibCheck": true,
- "strict": true,
- "forceConsistentCasingInFileNames": true,
- "resolveJsonModule": true,
- "isolatedModules": true,
- "noEmit": true,
- "noFallthroughCasesInSwitch": true
- },
- "include": ["src"],
- "exclude": ["node_modules", "build"]
-}
diff --git a/example-separate-editors/vite.config.js b/example-separate-editors/vite.config.js
deleted file mode 100644
index 9f8fdbe00c..0000000000
--- a/example-separate-editors/vite.config.js
+++ /dev/null
@@ -1,215 +0,0 @@
-import replace from '@rollup/plugin-replace';
-import react from '@vitejs/plugin-react';
-import { resolve } from 'path';
-import { createLogger, defineConfig, loadEnv } from 'vite';
-import { createHtmlPlugin } from 'vite-plugin-html';
-import vitePluginRaw from 'vite-plugin-raw';
-import svgr from 'vite-plugin-svgr';
-import ketcherCoreTSConfig from '../packages/ketcher-core/tsconfig.json';
-import { valuesToReplace as polymerEditorValues } from '../packages/ketcher-macromolecules/rollup.config';
-import polymerEditorTSConfig from '../packages/ketcher-macromolecules/tsconfig.json';
-import { valuesToReplace as ketcherReactValues } from '../packages/ketcher-react/rollup.config';
-import ketcherReactTSConfig from '../packages/ketcher-react/tsconfig.json';
-import ketcherStandaloneTSConfig from '../packages/ketcher-standalone/tsconfig.json';
-import { envVariables as exampleEnv } from './config/webpack.config';
-
-const dotEnv = loadEnv('development', '.', '');
-Object.assign(process.env, dotEnv, exampleEnv);
-
-/**
- * To resolve alias in the range of the specific package,
- * notice that it can't be an arrow function,
- * see: https://github.com/rollup/plugins/blob/master/packages/alias/src/index.ts
- */
-function resolver(source, importer, options) {
- const packageName = importer.match(/packages[\\/](.*?)[\\/]/)[1];
- const updatedId = source.replace('%packageName%', packageName);
-
- return this.resolve(
- updatedId,
- importer,
- Object.assign({ skipSelf: true }, options),
- ).then((resolved) => resolved || { id: updatedId });
-}
-
-const getTSConfigByPackage = (packageName) => {
- return {
- 'ketcher-core': ketcherCoreTSConfig,
- 'ketcher-macromolecules': polymerEditorTSConfig,
- 'ketcher-react': ketcherReactTSConfig,
- 'ketcher-standalone': ketcherStandaloneTSConfig,
- }[packageName];
-};
-
-const getAliasesByPackage = (packageName) => {
- const aliases = getTSConfigByPackage(packageName).compilerOptions.paths || [];
- return Object.keys(aliases).map((alias) => {
- const find = alias.replace('/*', '');
- return {
- find,
- replacement: resolve(__dirname, `../packages/%packageName%/src/${find}`),
- customResolver: resolver,
- };
- });
-};
-
-const HtmlReplaceVitePlugin = () => {
- return {
- name: 'ketcher-html-transform',
- transformIndexHtml(html) {
- return html
- .replaceAll('%PUBLIC_URL%/', process.env.PUBLIC_URL)
- .replaceAll(
- '@@version',
- JSON.parse(ketcherReactValues['process.env.HELP_LINK']).split(
- '-',
- )[0] + ' (Vite)',
- );
- },
- };
-};
-
-const logger = createLogger();
-const loggerWarn = logger.warn;
-logger.warn = (msg, options) => {
- if (
- // This warning occurs when entry html is not at the root path
- msg.includes('files in the public directory are served at the root path.')
- ) {
- return;
- }
- loggerWarn(msg, options);
-};
-
-export default defineConfig({
- server: {
- open: true,
- },
- esbuild: {
- tsconfigRaw: {
- compilerOptions: {
- // doc: https://vitejs.dev/guide/features.html#usedefineforclassfields
- useDefineForClassFields: false,
- },
- },
- },
- css: {
- devSourcemap: true,
- },
- plugins: [
- react(),
- svgr({
- exportAsDefault: true,
- }),
- vitePluginRaw({
- match: /\.sdf|\.ket/,
- }),
- replace({
- include: '**/ketcher-react/src/**',
- preventAssignment: true,
- values: ketcherReactValues,
- }),
- replace({
- include: '**/ketcher-macromolecules/src/**',
- preventAssignment: true,
- values: polymerEditorValues,
- }),
- replace({
- include: '**/example/src/**',
- preventAssignment: true,
- values: {
- require: 'await import',
- },
- }),
- replace({
- include: '**/ketcher-core/src/**',
- preventAssignment: true,
- values: {
- require: 'await import',
- },
- }),
- createHtmlPlugin({
- entry: '/src/index.tsx',
- template: 'public/index.html',
- inject: {
- tags: [
- {
- /**
- * HACK: https://github.com/bevacqua/dragula/issues/602#issuecomment-1109840139
- * Fix: global is not defined
- */
- injectTo: 'body',
- tag: 'script',
- children: 'var global = global || window',
- },
- ],
- },
- }),
- HtmlReplaceVitePlugin(),
- ],
- define: {
- 'process.env': process.env,
- },
- resolve: {
- alias: [
- {
- // HACK: to ignore dist/index.css, you can set any file as replacement
- find: 'ketcher-react/dist/index.css',
- replacement: resolve(
- __dirname,
- '../packages/ketcher-react/src/index.less',
- ),
- },
- {
- find: 'ketcher-react',
- replacement: resolve(
- __dirname,
- '../packages/ketcher-react/src/index.tsx',
- ),
- },
- {
- find: 'ketcher-core',
- replacement: resolve(
- __dirname,
- '../packages/ketcher-core/src/index.ts',
- ),
- },
- {
- find: 'ketcher-standalone',
- replacement: resolve(
- __dirname,
- '../packages/ketcher-standalone/src/index.ts',
- ),
- },
- {
- find: 'ketcher-macromolecules',
- replacement: resolve(
- __dirname,
- '../packages/ketcher-macromolecules/src/index.tsx',
- ),
- },
-
- /** Get aliases from packages' tsconfig.json */
- ...getAliasesByPackage('ketcher-core'),
- ...getAliasesByPackage('ketcher-react'),
- ...getAliasesByPackage('ketcher-macromolecules'),
- ...getAliasesByPackage('ketcher-standalone'),
- {
- find: 'src', // every package has this implicit alias
- replacement: resolve(__dirname, `../packages/%packageName%/src`),
- customResolver: resolver,
- },
-
- /** Web worker in ketcher-standalone */
- {
- find: 'web-worker:./indigoWorker',
- replacement: './indigoWorker?worker',
- },
- {
- find: '_indigo-ketcher-import-alias_',
- replacement: 'indigo-ketcher',
- },
- ],
- },
- customLogger: logger,
-});
diff --git a/example/config/webpack.config.js b/example/config/webpack.config.js
index ed6cd2948e..e4d947c3a9 100644
--- a/example/config/webpack.config.js
+++ b/example/config/webpack.config.js
@@ -5,6 +5,7 @@ const {
addWebpackPlugin,
} = require('customize-cra');
const webpack = require('webpack');
+const HtmlWebpackPlugin = require('html-webpack-plugin');
const HtmlReplaceWebpackPlugin = require('html-replace-webpack-plugin');
const GitRevisionPlugin = require('git-revision-webpack-plugin');
const CopyPlugin = require('copy-webpack-plugin');
@@ -42,9 +43,44 @@ module.exports = override(
from: '../node_modules/ketcher-standalone/**/*.wasm',
to: '[name][ext]',
},
+ {
+ from: 'serve.json',
+ to: '.',
+ },
],
}),
),
+ (config) => {
+ config.plugins = config.plugins.filter(
+ (plugin) => !(plugin instanceof HtmlWebpackPlugin),
+ );
+ config.plugins.push(
+ new HtmlWebpackPlugin({
+ filename: 'index.html',
+ template: 'public/index.html',
+ chunks: ['main'],
+ inject: true,
+ }),
+ new HtmlWebpackPlugin({
+ filename: 'popup.html',
+ template: 'public/popup.html',
+ chunks: ['popup'],
+ inject: true,
+ }),
+ new HtmlWebpackPlugin({
+ filename: 'duo.html',
+ template: 'public/duo.html',
+ chunks: ['duo'],
+ inject: true,
+ }),
+ );
+ config.entry = {
+ main: './src/index.tsx',
+ popup: './src/popupIndex.tsx',
+ duo: './src/duoIndex.tsx',
+ };
+ return config;
+ },
);
module.exports.envVariables = envVariables;
diff --git a/example/package.json b/example/package.json
index c380e29411..12523311a5 100644
--- a/example/package.json
+++ b/example/package.json
@@ -30,8 +30,8 @@
"test:prettier": "prettier --check \"./**/*.{js,ts,jsx,tsx,json}\"",
"prettier:write": "prettier --write \"./**/*.{js,jsx,json,ts,tsx}\"",
"stylelint:fix": "stylelint \"./**/*.{css,less}\" --formatter verbose --fix",
- "serve:remote": "serve -s dist/remote -l 4001",
- "serve:standalone": "serve -s dist/standalone -l 4002",
+ "serve:remote": "serve dist/remote -c serve.json -p 4001",
+ "serve:standalone": "serve dist/standalone -c serve.json -p 4002",
"eject": "react-scripts eject"
},
"dependencies": {
@@ -39,6 +39,7 @@
"ketcher-macromolecules": "*",
"ketcher-react": "*",
"ketcher-standalone": "*",
+ "mui": "^0.0.1",
"normalize.css": "^8.0.1",
"react": "^18.2.0",
"react-app-polyfill": "^2.0.0",
@@ -65,12 +66,12 @@
"prettier": "^2.5.1",
"react-app-rewired": "^2.2.1",
"react-scripts": "^5.0.1",
- "serve": "^13.0.2",
+ "serve": "^14.2.4",
"shx": "^0.3.3",
"source-map-loader": "^3.0.1",
- "stylelint": "13.13.1",
"typescript": "^4.5.2",
"vite": "^4.5.5",
+ "vite-plugin-commonjs": "^0.10.4",
"vite-plugin-html": "^3.2.0",
"vite-plugin-raw": "^1.0.3",
"vite-plugin-svgr": "^2.4.0",
diff --git a/example-separate-editors/public/index.html b/example/public/duo.html
similarity index 96%
rename from example-separate-editors/public/index.html
rename to example/public/duo.html
index b647d9718b..659c256ba8 100644
--- a/example-separate-editors/public/index.html
+++ b/example/public/duo.html
@@ -35,7 +35,7 @@
user's mobile device or desktop. See https://developers.google.com/web/fundamentals/web-app-manifest/
-->
- Ketcher @@version
+ Duo Ketcher @@version
You need to enable JavaScript to run this app.
diff --git a/example/public/iframe.html b/example/public/iframe.html
index 16efd14912..020b6c5f97 100644
--- a/example/public/iframe.html
+++ b/example/public/iframe.html
@@ -104,7 +104,7 @@
width="784"
height="624"
id="iframe"
- src="env_url"
+ src="index.html"
sandbox="allow-scripts allow-same-origin"
>
diff --git a/example/public/popup.html b/example/public/popup.html
new file mode 100644
index 0000000000..c494d51deb
--- /dev/null
+++ b/example/public/popup.html
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Popup Ketcher @@version
+
+
+ You need to enable JavaScript to run this app.
+
+
+
diff --git a/example/serve.json b/example/serve.json
new file mode 100644
index 0000000000..3057b41504
--- /dev/null
+++ b/example/serve.json
@@ -0,0 +1,20 @@
+{
+ "rewrites": [
+ {
+ "source": "/popup",
+ "destination": "/popup.html"
+ },
+ {
+ "source": "/duo",
+ "destination": "/duo.html"
+ },
+ {
+ "source": "/iframe",
+ "destination": "/iframe.html"
+ },
+ {
+ "source": "!/**/*.html",
+ "destination": "/index.html"
+ }
+ ]
+}
diff --git a/example/src/App.tsx b/example/src/App.tsx
index 835de4790c..f1e1968e33 100644
--- a/example/src/App.tsx
+++ b/example/src/App.tsx
@@ -1,11 +1,12 @@
+import 'ketcher-react/dist/index.css';
+
import { useState } from 'react';
-import { ButtonsConfig, InfoModal } from 'ketcher-react';
+import { ButtonsConfig, Editor, InfoModal } from 'ketcher-react';
import {
Ketcher,
RemoteStructServiceProvider,
StructServiceProvider,
} from 'ketcher-core';
-import { KetcherEditors } from 'ketcher-macromolecules';
const getHiddenButtonsConfig = (): ButtonsConfig => {
const searchParams = new URLSearchParams(window.location.search);
@@ -54,7 +55,7 @@ const App = () => {
return (
<>
- {
setHasError(true);
setErrorMessage(message.toString());
diff --git a/example/src/DuoApp.tsx b/example/src/DuoApp.tsx
new file mode 100644
index 0000000000..60be1108d3
--- /dev/null
+++ b/example/src/DuoApp.tsx
@@ -0,0 +1,140 @@
+import 'ketcher-react/dist/index.css';
+import { useState } from 'react';
+import { ButtonsConfig, Editor, InfoModal } from 'ketcher-react';
+import {
+ Ketcher,
+ RemoteStructServiceProvider,
+ StructServiceProvider,
+} from 'ketcher-core';
+
+const getHiddenButtonsConfig = (): ButtonsConfig => {
+ const searchParams = new URLSearchParams(window.location.search);
+ const hiddenButtons = searchParams.get('hiddenControls');
+
+ if (!hiddenButtons) return {};
+
+ return hiddenButtons.split(',').reduce((acc, button) => {
+ if (button) acc[button] = { hidden: true };
+
+ return acc;
+ }, {});
+};
+
+let structServiceProvider: StructServiceProvider =
+ new RemoteStructServiceProvider(
+ process.env.API_PATH || process.env.REACT_APP_API_PATH,
+ );
+if (process.env.MODE === 'standalone') {
+ if (process.env.USE_SEPARATE_INDIGO_WASM === 'true') {
+ // It is possible to use just 'ketcher-standalone' instead of ketcher-standalone/dist/binaryWasm
+ // however, it will increase the size of the bundle more than two times because wasm will be
+ // included in ketcher bundle as base64 string.
+ // In case of usage ketcher-standalone/dist/binaryWasm additional build configuration required
+ // to copy .wasm files in build folder. Please check /example/config/webpack.config.js.
+ const {
+ StandaloneStructServiceProvider,
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
+ } = require('ketcher-standalone/dist/binaryWasm');
+ structServiceProvider =
+ new StandaloneStructServiceProvider() as StructServiceProvider;
+ } else {
+ const {
+ StandaloneStructServiceProvider,
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
+ } = require('ketcher-standalone');
+ structServiceProvider =
+ new StandaloneStructServiceProvider() as StructServiceProvider;
+ }
+}
+
+const DuoApp = () => {
+ const hiddenButtonsConfig = getHiddenButtonsConfig();
+ const [hasError, setHasError] = useState(false);
+ const [errorMessage, setErrorMessage] = useState('');
+
+ // setTimeout(() => {
+ // document
+ // .querySelector('.MuiPaper-root')
+ // ?.setAttribute('style', `min-width: 680px; min-height: 680px`);
+ // }, 500);
+
+ return (
+
+
+ {/* The first editor instance */}
+ {
+ setHasError(true);
+ setErrorMessage(message.toString());
+ }}
+ buttons={hiddenButtonsConfig}
+ staticResourcesUrl={process.env.PUBLIC_URL}
+ structServiceProvider={structServiceProvider}
+ onInit={(ketcher: Ketcher) => {
+ window.ketcher = ketcher;
+
+ window.parent.postMessage(
+ {
+ eventType: 'init',
+ },
+ '*',
+ );
+ window.scrollTo(0, 0);
+ }}
+ />
+ {hasError && (
+ {
+ setHasError(false);
+
+ // Focus on editor after modal is closed
+ const cliparea: HTMLElement | null =
+ document.querySelector('.cliparea');
+ cliparea?.focus();
+ }}
+ />
+ )}{' '}
+
+
+
+ {/* The first editor instance */}
+ {
+ setHasError(true);
+ setErrorMessage(message.toString());
+ }}
+ buttons={hiddenButtonsConfig}
+ staticResourcesUrl={process.env.PUBLIC_URL}
+ structServiceProvider={structServiceProvider}
+ onInit={(ketcher: Ketcher) => {
+ window.ketcher = ketcher;
+
+ window.parent.postMessage(
+ {
+ eventType: 'init',
+ },
+ '*',
+ );
+ window.scrollTo(0, 0);
+ }}
+ />
+ {hasError && (
+ {
+ setHasError(false);
+
+ // Focus on editor after modal is closed
+ const cliparea: HTMLElement | null =
+ document.querySelector('.cliparea');
+ cliparea?.focus();
+ }}
+ />
+ )}{' '}
+
+
+ );
+};
+
+export default DuoApp;
diff --git a/example-separate-editors/src/App.tsx b/example/src/PopupApp.tsx
similarity index 71%
rename from example-separate-editors/src/App.tsx
rename to example/src/PopupApp.tsx
index 8ad777ffde..bf95e3ce18 100644
--- a/example-separate-editors/src/App.tsx
+++ b/example/src/PopupApp.tsx
@@ -1,13 +1,13 @@
import 'ketcher-react/dist/index.css';
-import { useState, StrictMode } from 'react';
+import { useState } from 'react';
import { ButtonsConfig, Editor, InfoModal } from 'ketcher-react';
+import { Dialog } from '@mui/material';
import {
Ketcher,
RemoteStructServiceProvider,
StructServiceProvider,
} from 'ketcher-core';
-import { ModeControl } from './ModeControl';
const getHiddenButtonsConfig = (): ButtonsConfig => {
const searchParams = new URLSearchParams(window.location.search);
@@ -49,45 +49,24 @@ if (process.env.MODE === 'standalone') {
}
}
-const enablePolymerEditor = process.env.ENABLE_POLYMER_EDITOR === 'true';
-
-type PolymerType = ({
- togglerComponent,
-}: {
- togglerComponent?: JSX.Element;
-}) => JSX.Element | null;
-
-let PolymerEditor: PolymerType = () => null;
-if (enablePolymerEditor) {
- // eslint-disable-next-line @typescript-eslint/no-var-requires
- const { Editor } = require('ketcher-macromolecules');
- PolymerEditor = Editor as PolymerType;
-}
-
-const App = () => {
+const PopupApp = () => {
const hiddenButtonsConfig = getHiddenButtonsConfig();
const [hasError, setHasError] = useState(false);
const [errorMessage, setErrorMessage] = useState('');
- const [showPolymerEditor, setShowPolymerEditor] = useState(false);
-
- const togglePolymerEditor = (toggleValue: boolean) => {
- setShowPolymerEditor(toggleValue);
- window.isPolymerEditorTurnedOn = toggleValue;
- };
-
- const togglerComponent = enablePolymerEditor ? (
-
- ) : undefined;
- return showPolymerEditor ? (
- <>
-
- >
- ) : (
-
+ setTimeout(() => {
+ document
+ .querySelector('.MuiPaper-root')
+ ?.setAttribute('style', `min-width: 680px; min-height: 680px`);
+ }, 500);
+
+ return (
+
{
setHasError(true);
@@ -107,7 +86,6 @@ const App = () => {
);
window.scrollTo(0, 0);
}}
- togglerComponent={togglerComponent}
/>
{hasError && (
{
}}
/>
)}
-
+
);
};
-export default App;
+export default PopupApp;
diff --git a/example-separate-editors/src/index.tsx b/example/src/duoIndex.tsx
similarity index 83%
rename from example-separate-editors/src/index.tsx
rename to example/src/duoIndex.tsx
index bd02413343..8bdfb0415d 100644
--- a/example-separate-editors/src/index.tsx
+++ b/example/src/duoIndex.tsx
@@ -3,8 +3,8 @@ import 'react-app-polyfill/stable';
import 'url-search-params-polyfill';
import './index.css';
import { createRoot } from 'react-dom/client';
-import App from './App';
+import DuoApp from './DuoApp';
const container = document.getElementById('root');
const root = createRoot(container as HTMLElement);
-root.render( );
+root.render( );
diff --git a/example/src/index.css b/example/src/index.css
index b1ec6cace0..a1589da231 100644
--- a/example/src/index.css
+++ b/example/src/index.css
@@ -1,27 +1,54 @@
@import 'normalize.css';
body {
- margin: 0;
- padding: 0;
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
+ margin: 0;
+ padding: 0;
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
sans-serif;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
}
code {
- font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',
+ font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',
monospace;
}
#root {
- height: 100%;
- width: 100%;
+ height: 100%;
+ width: 100%;
}
html,
body {
- height: 100%;
- width: 100%;
+ height: 100%;
+ width: 100%;
}
+
+.MuiPaper-root.ketcher-dialog {
+ align-self: center;
+ width: 57rem;
+ height: 40rem;
+ z-index: 1002;
+ max-height: calc(100vh - 4.28571rem);
+ max-width: calc(100vw - 4.28571rem);
+ min-height: 19rem;
+ min-width: 19rem;
+}
+
+.container {
+ width: 100%;
+ height: 100%;
+ display: flex;
+ flex-direction: row;
+ justify-content: space-between;
+}
+
+.box {
+ min-width: 450px;
+ min-height: 350px;
+ flex-grow: 1;
+ margin: 20px;
+ box-shadow: 1px 4px 12px rgba(103, 104, 132, 0.18);
+}
\ No newline at end of file
diff --git a/example/src/popupIndex.tsx b/example/src/popupIndex.tsx
new file mode 100644
index 0000000000..bc2902552f
--- /dev/null
+++ b/example/src/popupIndex.tsx
@@ -0,0 +1,10 @@
+import 'react-app-polyfill/ie11';
+import 'react-app-polyfill/stable';
+import 'url-search-params-polyfill';
+import './index.css';
+import { createRoot } from 'react-dom/client';
+import PopupApp from './PopupApp';
+
+const container = document.getElementById('root');
+const root = createRoot(container as HTMLElement);
+root.render( );
diff --git a/example/vite.config.js b/example/vite.config.js
index 9f8fdbe00c..a9fae5b3ad 100644
--- a/example/vite.config.js
+++ b/example/vite.config.js
@@ -12,6 +12,7 @@ import { valuesToReplace as ketcherReactValues } from '../packages/ketcher-react
import ketcherReactTSConfig from '../packages/ketcher-react/tsconfig.json';
import ketcherStandaloneTSConfig from '../packages/ketcher-standalone/tsconfig.json';
import { envVariables as exampleEnv } from './config/webpack.config';
+import commonjs from 'vite-plugin-commonjs';
const dotEnv = loadEnv('development', '.', '');
Object.assign(process.env, dotEnv, exampleEnv);
@@ -146,6 +147,7 @@ export default defineConfig({
},
}),
HtmlReplaceVitePlugin(),
+ commonjs(),
],
define: {
'process.env': process.env,
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-1-15-Hydrogen-side-chain-for-1-Peptide-A--efbbb-e-that-have-extra-hydrogen-bond---R-nC6n8A-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-1-15-Hydrogen-side-chain-for-1-Peptide-A--efbbb-e-that-have-extra-hydrogen-bond---R-nC6n8A-1-chromium-linux.png
index ad19507c8d..57365f09cf 100644
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-1-15-Hydrogen-side-chain-for-1-Peptide-A--efbbb-e-that-have-extra-hydrogen-bond---R-nC6n8A-1-chromium-linux.png and b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-1-15-Hydrogen-side-chain-for-1-Peptide-A--efbbb-e-that-have-extra-hydrogen-bond---R-nC6n8A-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-1-16-Hydrogen-side-chain-for-1-Peptide-A--eed00--hydrogen-bond-and-phosphate-P---R-nC6n8A-P-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-1-16-Hydrogen-side-chain-for-1-Peptide-A--eed00--hydrogen-bond-and-phosphate-P---R-nC6n8A-P-1-chromium-linux.png
index 5efcdc3ed8..076b1b05a7 100644
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-1-16-Hydrogen-side-chain-for-1-Peptide-A--eed00--hydrogen-bond-and-phosphate-P---R-nC6n8A-P-1-chromium-linux.png and b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-1-16-Hydrogen-side-chain-for-1-Peptide-A--eed00--hydrogen-bond-and-phosphate-P---R-nC6n8A-P-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-10-15-Hydrogen-side-chain-for-10-Nucleosi-9911b-e-that-have-extra-hydrogen-bond---R-nC6n8A-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-10-15-Hydrogen-side-chain-for-10-Nucleosi-9911b-e-that-have-extra-hydrogen-bond---R-nC6n8A-1-chromium-linux.png
index 76269f93dd..1b15333a5f 100644
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-10-15-Hydrogen-side-chain-for-10-Nucleosi-9911b-e-that-have-extra-hydrogen-bond---R-nC6n8A-1-chromium-linux.png and b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-10-15-Hydrogen-side-chain-for-10-Nucleosi-9911b-e-that-have-extra-hydrogen-bond---R-nC6n8A-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-10-16-Hydrogen-side-chain-for-10-Nucleosi-5b27e--hydrogen-bond-and-phosphate-P---R-nC6n8A-P-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-10-16-Hydrogen-side-chain-for-10-Nucleosi-5b27e--hydrogen-bond-and-phosphate-P---R-nC6n8A-P-1-chromium-linux.png
index 6e4b251353..4e8ccf093e 100644
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-10-16-Hydrogen-side-chain-for-10-Nucleosi-5b27e--hydrogen-bond-and-phosphate-P---R-nC6n8A-P-1-chromium-linux.png and b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-10-16-Hydrogen-side-chain-for-10-Nucleosi-5b27e--hydrogen-bond-and-phosphate-P---R-nC6n8A-P-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-11-15-Hydrogen-side-chain-for-11-Nucleoti-aa37a-e-that-have-extra-hydrogen-bond---R-nC6n8A-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-11-15-Hydrogen-side-chain-for-11-Nucleoti-aa37a-e-that-have-extra-hydrogen-bond---R-nC6n8A-1-chromium-linux.png
index 3e36473016..cd670341d3 100644
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-11-15-Hydrogen-side-chain-for-11-Nucleoti-aa37a-e-that-have-extra-hydrogen-bond---R-nC6n8A-1-chromium-linux.png and b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-11-15-Hydrogen-side-chain-for-11-Nucleoti-aa37a-e-that-have-extra-hydrogen-bond---R-nC6n8A-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-11-16-Hydrogen-side-chain-for-11-Nucleoti-edc6c--hydrogen-bond-and-phosphate-P---R-nC6n8A-P-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-11-16-Hydrogen-side-chain-for-11-Nucleoti-edc6c--hydrogen-bond-and-phosphate-P---R-nC6n8A-P-1-chromium-linux.png
index 6519a03067..d63deb3a52 100644
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-11-16-Hydrogen-side-chain-for-11-Nucleoti-edc6c--hydrogen-bond-and-phosphate-P---R-nC6n8A-P-1-chromium-linux.png and b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-11-16-Hydrogen-side-chain-for-11-Nucleoti-edc6c--hydrogen-bond-and-phosphate-P---R-nC6n8A-P-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-12-15-Hydrogen-side-chain-for-12-Nucleoti-38964-e-that-have-extra-hydrogen-bond---R-nC6n8A-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-12-15-Hydrogen-side-chain-for-12-Nucleoti-38964-e-that-have-extra-hydrogen-bond---R-nC6n8A-1-chromium-linux.png
index bbc5e08821..50ae1b3074 100644
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-12-15-Hydrogen-side-chain-for-12-Nucleoti-38964-e-that-have-extra-hydrogen-bond---R-nC6n8A-1-chromium-linux.png and b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-12-15-Hydrogen-side-chain-for-12-Nucleoti-38964-e-that-have-extra-hydrogen-bond---R-nC6n8A-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-12-16-Hydrogen-side-chain-for-12-Nucleoti-9f3f6--hydrogen-bond-and-phosphate-P---R-nC6n8A-P-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-12-16-Hydrogen-side-chain-for-12-Nucleoti-9f3f6--hydrogen-bond-and-phosphate-P---R-nC6n8A-P-1-chromium-linux.png
index eb04bb7e45..36f8ecd7e3 100644
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-12-16-Hydrogen-side-chain-for-12-Nucleoti-9f3f6--hydrogen-bond-and-phosphate-P---R-nC6n8A-P-1-chromium-linux.png and b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-12-16-Hydrogen-side-chain-for-12-Nucleoti-9f3f6--hydrogen-bond-and-phosphate-P---R-nC6n8A-P-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-13-15-Hydrogen-side-chain-for-13-Nucleosi-afc29-e-that-have-extra-hydrogen-bond---R-nC6n8A-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-13-15-Hydrogen-side-chain-for-13-Nucleosi-afc29-e-that-have-extra-hydrogen-bond---R-nC6n8A-1-chromium-linux.png
index b437f085dc..af818117bd 100644
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-13-15-Hydrogen-side-chain-for-13-Nucleosi-afc29-e-that-have-extra-hydrogen-bond---R-nC6n8A-1-chromium-linux.png and b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-13-15-Hydrogen-side-chain-for-13-Nucleosi-afc29-e-that-have-extra-hydrogen-bond---R-nC6n8A-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-13-16-Hydrogen-side-chain-for-13-Nucleosi-5310b--hydrogen-bond-and-phosphate-P---R-nC6n8A-P-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-13-16-Hydrogen-side-chain-for-13-Nucleosi-5310b--hydrogen-bond-and-phosphate-P---R-nC6n8A-P-1-chromium-linux.png
index c215aac249..1408ddcfc1 100644
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-13-16-Hydrogen-side-chain-for-13-Nucleosi-5310b--hydrogen-bond-and-phosphate-P---R-nC6n8A-P-1-chromium-linux.png and b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-13-16-Hydrogen-side-chain-for-13-Nucleosi-5310b--hydrogen-bond-and-phosphate-P---R-nC6n8A-P-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-14-15-Hydrogen-side-chain-for-14-Nucleosi-9f827-e-that-have-extra-hydrogen-bond---R-nC6n8A-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-14-15-Hydrogen-side-chain-for-14-Nucleosi-9f827-e-that-have-extra-hydrogen-bond---R-nC6n8A-1-chromium-linux.png
index f29582a904..5b6597b453 100644
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-14-15-Hydrogen-side-chain-for-14-Nucleosi-9f827-e-that-have-extra-hydrogen-bond---R-nC6n8A-1-chromium-linux.png and b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-14-15-Hydrogen-side-chain-for-14-Nucleosi-9f827-e-that-have-extra-hydrogen-bond---R-nC6n8A-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-14-16-Hydrogen-side-chain-for-14-Nucleosi-ca833--hydrogen-bond-and-phosphate-P---R-nC6n8A-P-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-14-16-Hydrogen-side-chain-for-14-Nucleosi-ca833--hydrogen-bond-and-phosphate-P---R-nC6n8A-P-1-chromium-linux.png
index f57ada6fd6..ccff43d224 100644
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-14-16-Hydrogen-side-chain-for-14-Nucleosi-ca833--hydrogen-bond-and-phosphate-P---R-nC6n8A-P-1-chromium-linux.png and b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-14-16-Hydrogen-side-chain-for-14-Nucleosi-ca833--hydrogen-bond-and-phosphate-P---R-nC6n8A-P-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-15-1-Hydrogen-side-chain-for-15-Nucleosid-ed26c---R-nC6n8A-and-1-Peptide-A-from-library-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-15-1-Hydrogen-side-chain-for-15-Nucleosid-ed26c---R-nC6n8A-and-1-Peptide-A-from-library-1-chromium-linux.png
index 0a220e3b13..b45b73c312 100644
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-15-1-Hydrogen-side-chain-for-15-Nucleosid-ed26c---R-nC6n8A-and-1-Peptide-A-from-library-1-chromium-linux.png and b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-15-1-Hydrogen-side-chain-for-15-Nucleosid-ed26c---R-nC6n8A-and-1-Peptide-A-from-library-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-15-10-Hydrogen-side-chain-for-15-Nucleosi-4151f--bond---R-nC6n8A-and-10-Nucleoside---R-A-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-15-10-Hydrogen-side-chain-for-15-Nucleosi-4151f--bond---R-nC6n8A-and-10-Nucleoside---R-A-1-chromium-linux.png
index 465d23ab12..9eb465f8ad 100644
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-15-10-Hydrogen-side-chain-for-15-Nucleosi-4151f--bond---R-nC6n8A-and-10-Nucleoside---R-A-1-chromium-linux.png and b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-15-10-Hydrogen-side-chain-for-15-Nucleosi-4151f--bond---R-nC6n8A-and-10-Nucleoside---R-A-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-15-11-Hydrogen-side-chain-for-15-Nucleosi-a691f-nd---R-nC6n8A-and-11-Nucleotide-A---R-A-P-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-15-11-Hydrogen-side-chain-for-15-Nucleosi-a691f-nd---R-nC6n8A-and-11-Nucleotide-A---R-A-P-1-chromium-linux.png
index 3b04056f5d..7c727633b0 100644
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-15-11-Hydrogen-side-chain-for-15-Nucleosi-a691f-nd---R-nC6n8A-and-11-Nucleotide-A---R-A-P-1-chromium-linux.png and b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-15-11-Hydrogen-side-chain-for-15-Nucleosi-a691f-nd---R-nC6n8A-and-11-Nucleotide-A---R-A-P-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-15-12-Hydrogen-side-chain-for-15-Nucleosi-13249--N-with-sugar-R-and-phosphate-P---R-A-C-G-T-P-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-15-12-Hydrogen-side-chain-for-15-Nucleosi-13249--N-with-sugar-R-and-phosphate-P---R-A-C-G-T-P-1-chromium-linux.png
index 9e391ffa61..a9fca763db 100644
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-15-12-Hydrogen-side-chain-for-15-Nucleosi-13249--N-with-sugar-R-and-phosphate-P---R-A-C-G-T-P-1-chromium-linux.png and b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-15-12-Hydrogen-side-chain-for-15-Nucleosi-13249--N-with-sugar-R-and-phosphate-P---R-A-C-G-T-P-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-15-13-Hydrogen-side-chain-for-15-Nucleosi-887c5-e-that-have-extra-covalent-bond---R-nC6n8A-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-15-13-Hydrogen-side-chain-for-15-Nucleosi-887c5-e-that-have-extra-covalent-bond---R-nC6n8A-1-chromium-linux.png
index 7b3fce7e07..846ff888d9 100644
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-15-13-Hydrogen-side-chain-for-15-Nucleosi-887c5-e-that-have-extra-covalent-bond---R-nC6n8A-1-chromium-linux.png and b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-15-13-Hydrogen-side-chain-for-15-Nucleosi-887c5-e-that-have-extra-covalent-bond---R-nC6n8A-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-15-14-Hydrogen-side-chain-for-15-Nucleosi-13f68--covalent-bond-and-phosphate-P---R-nC6n8A-P-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-15-14-Hydrogen-side-chain-for-15-Nucleosi-13f68--covalent-bond-and-phosphate-P---R-nC6n8A-P-1-chromium-linux.png
index 592d52dba3..fe001be003 100644
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-15-14-Hydrogen-side-chain-for-15-Nucleosi-13f68--covalent-bond-and-phosphate-P---R-nC6n8A-P-1-chromium-linux.png and b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-15-14-Hydrogen-side-chain-for-15-Nucleosi-13f68--covalent-bond-and-phosphate-P---R-nC6n8A-P-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-15-15-Hydrogen-side-chain-for-15-Nucleosi-72390-e-that-have-extra-hydrogen-bond---R-nC6n8A-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-15-15-Hydrogen-side-chain-for-15-Nucleosi-72390-e-that-have-extra-hydrogen-bond---R-nC6n8A-1-chromium-linux.png
index 6df351dd04..91748409c6 100644
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-15-15-Hydrogen-side-chain-for-15-Nucleosi-72390-e-that-have-extra-hydrogen-bond---R-nC6n8A-1-chromium-linux.png and b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-15-15-Hydrogen-side-chain-for-15-Nucleosi-72390-e-that-have-extra-hydrogen-bond---R-nC6n8A-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-15-16-Hydrogen-side-chain-for-15-Nucleosi-c20ef--hydrogen-bond-and-phosphate-P---R-nC6n8A-P-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-15-16-Hydrogen-side-chain-for-15-Nucleosi-c20ef--hydrogen-bond-and-phosphate-P---R-nC6n8A-P-1-chromium-linux.png
index f73a04e579..dc9f81b9f7 100644
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-15-16-Hydrogen-side-chain-for-15-Nucleosi-c20ef--hydrogen-bond-and-phosphate-P---R-nC6n8A-P-1-chromium-linux.png and b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-15-16-Hydrogen-side-chain-for-15-Nucleosi-c20ef--hydrogen-bond-and-phosphate-P---R-nC6n8A-P-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-15-2-Hydrogen-side-chain-for-15-Nucleosid-91b43-iguous-peptide-X-alternatives-from-library-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-15-2-Hydrogen-side-chain-for-15-Nucleosid-91b43-iguous-peptide-X-alternatives-from-library-1-chromium-linux.png
index 8028352bb2..3d37854711 100644
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-15-2-Hydrogen-side-chain-for-15-Nucleosid-91b43-iguous-peptide-X-alternatives-from-library-1-chromium-linux.png and b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-15-2-Hydrogen-side-chain-for-15-Nucleosid-91b43-iguous-peptide-X-alternatives-from-library-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-15-3-Hydrogen-side-chain-for-15-Nucleosid-79164-d---R-nC6n8A-and-3-Sugar-R-from-library-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-15-3-Hydrogen-side-chain-for-15-Nucleosid-79164-d---R-nC6n8A-and-3-Sugar-R-from-library-1-chromium-linux.png
index 07c8ca4e86..58d6878029 100644
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-15-3-Hydrogen-side-chain-for-15-Nucleosid-79164-d---R-nC6n8A-and-3-Sugar-R-from-library-1-chromium-linux.png and b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-15-3-Hydrogen-side-chain-for-15-Nucleosid-79164-d---R-nC6n8A-and-3-Sugar-R-from-library-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-15-4-Hydrogen-side-chain-for-15-Nucleosid-bf0b4-nd---R-nC6n8A-and-4-Base-A-from-library-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-15-4-Hydrogen-side-chain-for-15-Nucleosid-bf0b4-nd---R-nC6n8A-and-4-Base-A-from-library-1-chromium-linux.png
index 0852b07842..94295c1560 100644
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-15-4-Hydrogen-side-chain-for-15-Nucleosid-bf0b4-nd---R-nC6n8A-and-4-Base-A-from-library-1-chromium-linux.png and b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-15-4-Hydrogen-side-chain-for-15-Nucleosid-bf0b4-nd---R-nC6n8A-and-4-Base-A-from-library-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-15-5-Hydrogen-side-chain-for-15-Nucleosid-16868-guous-DNA-Base-N-alternatives-from-library-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-15-5-Hydrogen-side-chain-for-15-Nucleosid-16868-guous-DNA-Base-N-alternatives-from-library-1-chromium-linux.png
index 804f5d75cb..4e0f89b26a 100644
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-15-5-Hydrogen-side-chain-for-15-Nucleosid-16868-guous-DNA-Base-N-alternatives-from-library-1-chromium-linux.png and b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-15-5-Hydrogen-side-chain-for-15-Nucleosid-16868-guous-DNA-Base-N-alternatives-from-library-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-15-6-Hydrogen-side-chain-for-15-Nucleosid-b77da-R-nC6n8A-and-6-Phosphate-P-from-library-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-15-6-Hydrogen-side-chain-for-15-Nucleosid-b77da-R-nC6n8A-and-6-Phosphate-P-from-library-1-chromium-linux.png
index b150784ada..4869abb12f 100644
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-15-6-Hydrogen-side-chain-for-15-Nucleosid-b77da-R-nC6n8A-and-6-Phosphate-P-from-library-1-chromium-linux.png and b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-15-6-Hydrogen-side-chain-for-15-Nucleosid-b77da-R-nC6n8A-and-6-Phosphate-P-from-library-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-15-7-Hydrogen-side-chain-for-15-Nucleosid-1f144-and-7-Unsplit-monomer-2-damdA-from-library-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-15-7-Hydrogen-side-chain-for-15-Nucleosid-1f144-and-7-Unsplit-monomer-2-damdA-from-library-1-chromium-linux.png
index c32a8e5bd5..ae8385aaa9 100644
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-15-7-Hydrogen-side-chain-for-15-Nucleosid-1f144-and-7-Unsplit-monomer-2-damdA-from-library-1-chromium-linux.png and b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-15-7-Hydrogen-side-chain-for-15-Nucleosid-1f144-and-7-Unsplit-monomer-2-damdA-from-library-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-15-8-Hydrogen-side-chain-for-15-Nucleosid-76b4d-gen-bond---R-nC6n8A-and-8-Unknown-monomer-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-15-8-Hydrogen-side-chain-for-15-Nucleosid-76b4d-gen-bond---R-nC6n8A-and-8-Unknown-monomer-1-chromium-linux.png
index 4183ea65b0..2693f458d2 100644
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-15-8-Hydrogen-side-chain-for-15-Nucleosid-76b4d-gen-bond---R-nC6n8A-and-8-Unknown-monomer-1-chromium-linux.png and b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-15-8-Hydrogen-side-chain-for-15-Nucleosid-76b4d-gen-bond---R-nC6n8A-and-8-Unknown-monomer-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-15-9-Hydrogen-side-chain-for-15-Nucleosid-04a67--nC6n8A-and-9-CHEM-4aPEGMal-from-library-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-15-9-Hydrogen-side-chain-for-15-Nucleosid-04a67--nC6n8A-and-9-CHEM-4aPEGMal-from-library-1-chromium-linux.png
index 45d04e6ad3..5aa2093be4 100644
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-15-9-Hydrogen-side-chain-for-15-Nucleosid-04a67--nC6n8A-and-9-CHEM-4aPEGMal-from-library-1-chromium-linux.png and b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-15-9-Hydrogen-side-chain-for-15-Nucleosid-04a67--nC6n8A-and-9-CHEM-4aPEGMal-from-library-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-16-1-Hydrogen-side-chain-for-16-Nucleosid-e29f9--R-nC6n8A-P-and-1-Peptide-A-from-library-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-16-1-Hydrogen-side-chain-for-16-Nucleosid-e29f9--R-nC6n8A-P-and-1-Peptide-A-from-library-1-chromium-linux.png
index 7db77040ba..498bf0903d 100644
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-16-1-Hydrogen-side-chain-for-16-Nucleosid-e29f9--R-nC6n8A-P-and-1-Peptide-A-from-library-1-chromium-linux.png and b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-16-1-Hydrogen-side-chain-for-16-Nucleosid-e29f9--R-nC6n8A-P-and-1-Peptide-A-from-library-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-16-10-Hydrogen-side-chain-for-16-Nucleosi-cad37-te-P---R-nC6n8A-P-and-10-Nucleoside---R-A-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-16-10-Hydrogen-side-chain-for-16-Nucleosi-cad37-te-P---R-nC6n8A-P-and-10-Nucleoside---R-A-1-chromium-linux.png
index 2166822650..5ae2a631f5 100644
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-16-10-Hydrogen-side-chain-for-16-Nucleosi-cad37-te-P---R-nC6n8A-P-and-10-Nucleoside---R-A-1-chromium-linux.png and b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-16-10-Hydrogen-side-chain-for-16-Nucleosi-cad37-te-P---R-nC6n8A-P-and-10-Nucleoside---R-A-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-16-11-Hydrogen-side-chain-for-16-Nucleosi-2e49f-P---R-nC6n8A-P-and-11-Nucleotide-A---R-A-P-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-16-11-Hydrogen-side-chain-for-16-Nucleosi-2e49f-P---R-nC6n8A-P-and-11-Nucleotide-A---R-A-P-1-chromium-linux.png
index 2b13536ed5..ce042f21a7 100644
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-16-11-Hydrogen-side-chain-for-16-Nucleosi-2e49f-P---R-nC6n8A-P-and-11-Nucleotide-A---R-A-P-1-chromium-linux.png and b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-16-11-Hydrogen-side-chain-for-16-Nucleosi-2e49f-P---R-nC6n8A-P-and-11-Nucleotide-A---R-A-P-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-16-12-Hydrogen-side-chain-for-16-Nucleosi-1d14e--N-with-sugar-R-and-phosphate-P---R-A-C-G-T-P-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-16-12-Hydrogen-side-chain-for-16-Nucleosi-1d14e--N-with-sugar-R-and-phosphate-P---R-A-C-G-T-P-1-chromium-linux.png
index f76c080b32..c10a5d38f0 100644
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-16-12-Hydrogen-side-chain-for-16-Nucleosi-1d14e--N-with-sugar-R-and-phosphate-P---R-A-C-G-T-P-1-chromium-linux.png and b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-16-12-Hydrogen-side-chain-for-16-Nucleosi-1d14e--N-with-sugar-R-and-phosphate-P---R-A-C-G-T-P-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-16-13-Hydrogen-side-chain-for-16-Nucleosi-82964-e-that-have-extra-covalent-bond---R-nC6n8A-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-16-13-Hydrogen-side-chain-for-16-Nucleosi-82964-e-that-have-extra-covalent-bond---R-nC6n8A-1-chromium-linux.png
index cd2854c183..88a2672fb8 100644
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-16-13-Hydrogen-side-chain-for-16-Nucleosi-82964-e-that-have-extra-covalent-bond---R-nC6n8A-1-chromium-linux.png and b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-16-13-Hydrogen-side-chain-for-16-Nucleosi-82964-e-that-have-extra-covalent-bond---R-nC6n8A-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-16-14-Hydrogen-side-chain-for-16-Nucleosi-88d74--covalent-bond-and-phosphate-P---R-nC6n8A-P-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-16-14-Hydrogen-side-chain-for-16-Nucleosi-88d74--covalent-bond-and-phosphate-P---R-nC6n8A-P-1-chromium-linux.png
index 89faf087d1..2f2cb8d837 100644
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-16-14-Hydrogen-side-chain-for-16-Nucleosi-88d74--covalent-bond-and-phosphate-P---R-nC6n8A-P-1-chromium-linux.png and b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-16-14-Hydrogen-side-chain-for-16-Nucleosi-88d74--covalent-bond-and-phosphate-P---R-nC6n8A-P-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-16-15-Hydrogen-side-chain-for-16-Nucleosi-1f474-e-that-have-extra-hydrogen-bond---R-nC6n8A-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-16-15-Hydrogen-side-chain-for-16-Nucleosi-1f474-e-that-have-extra-hydrogen-bond---R-nC6n8A-1-chromium-linux.png
index bded39a541..3e7a5cc865 100644
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-16-15-Hydrogen-side-chain-for-16-Nucleosi-1f474-e-that-have-extra-hydrogen-bond---R-nC6n8A-1-chromium-linux.png and b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-16-15-Hydrogen-side-chain-for-16-Nucleosi-1f474-e-that-have-extra-hydrogen-bond---R-nC6n8A-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-16-16-Hydrogen-side-chain-for-16-Nucleosi-7d5b2--hydrogen-bond-and-phosphate-P---R-nC6n8A-P-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-16-16-Hydrogen-side-chain-for-16-Nucleosi-7d5b2--hydrogen-bond-and-phosphate-P---R-nC6n8A-P-1-chromium-linux.png
index bf803b00b3..a4e2a1a903 100644
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-16-16-Hydrogen-side-chain-for-16-Nucleosi-7d5b2--hydrogen-bond-and-phosphate-P---R-nC6n8A-P-1-chromium-linux.png and b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-16-16-Hydrogen-side-chain-for-16-Nucleosi-7d5b2--hydrogen-bond-and-phosphate-P---R-nC6n8A-P-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-16-2-Hydrogen-side-chain-for-16-Nucleosid-f3e0e-iguous-peptide-X-alternatives-from-library-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-16-2-Hydrogen-side-chain-for-16-Nucleosid-f3e0e-iguous-peptide-X-alternatives-from-library-1-chromium-linux.png
index 5a69a949c2..42af3f4151 100644
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-16-2-Hydrogen-side-chain-for-16-Nucleosid-f3e0e-iguous-peptide-X-alternatives-from-library-1-chromium-linux.png and b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-16-2-Hydrogen-side-chain-for-16-Nucleosid-f3e0e-iguous-peptide-X-alternatives-from-library-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-16-3-Hydrogen-side-chain-for-16-Nucleosid-44a84----R-nC6n8A-P-and-3-Sugar-R-from-library-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-16-3-Hydrogen-side-chain-for-16-Nucleosid-44a84----R-nC6n8A-P-and-3-Sugar-R-from-library-1-chromium-linux.png
index a91235f8d3..f1914eb55f 100644
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-16-3-Hydrogen-side-chain-for-16-Nucleosid-44a84----R-nC6n8A-P-and-3-Sugar-R-from-library-1-chromium-linux.png and b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-16-3-Hydrogen-side-chain-for-16-Nucleosid-44a84----R-nC6n8A-P-and-3-Sugar-R-from-library-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-16-4-Hydrogen-side-chain-for-16-Nucleosid-e0cc1-P---R-nC6n8A-P-and-4-Base-A-from-library-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-16-4-Hydrogen-side-chain-for-16-Nucleosid-e0cc1-P---R-nC6n8A-P-and-4-Base-A-from-library-1-chromium-linux.png
index 93d438875b..c93ff4e99c 100644
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-16-4-Hydrogen-side-chain-for-16-Nucleosid-e0cc1-P---R-nC6n8A-P-and-4-Base-A-from-library-1-chromium-linux.png and b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-16-4-Hydrogen-side-chain-for-16-Nucleosid-e0cc1-P---R-nC6n8A-P-and-4-Base-A-from-library-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-16-5-Hydrogen-side-chain-for-16-Nucleosid-8defe-guous-DNA-Base-N-alternatives-from-library-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-16-5-Hydrogen-side-chain-for-16-Nucleosid-8defe-guous-DNA-Base-N-alternatives-from-library-1-chromium-linux.png
index b5a419c8bd..c247c1662d 100644
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-16-5-Hydrogen-side-chain-for-16-Nucleosid-8defe-guous-DNA-Base-N-alternatives-from-library-1-chromium-linux.png and b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-16-5-Hydrogen-side-chain-for-16-Nucleosid-8defe-guous-DNA-Base-N-alternatives-from-library-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-16-6-Hydrogen-side-chain-for-16-Nucleosid-8cc9b--nC6n8A-P-and-6-Phosphate-P-from-library-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-16-6-Hydrogen-side-chain-for-16-Nucleosid-8cc9b--nC6n8A-P-and-6-Phosphate-P-from-library-1-chromium-linux.png
index ce3c721576..3cd0fa3c2d 100644
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-16-6-Hydrogen-side-chain-for-16-Nucleosid-8cc9b--nC6n8A-P-and-6-Phosphate-P-from-library-1-chromium-linux.png and b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-16-6-Hydrogen-side-chain-for-16-Nucleosid-8cc9b--nC6n8A-P-and-6-Phosphate-P-from-library-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-16-7-Hydrogen-side-chain-for-16-Nucleosid-85bc7-and-7-Unsplit-monomer-2-damdA-from-library-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-16-7-Hydrogen-side-chain-for-16-Nucleosid-85bc7-and-7-Unsplit-monomer-2-damdA-from-library-1-chromium-linux.png
index d8b68af301..ac050964f8 100644
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-16-7-Hydrogen-side-chain-for-16-Nucleosid-85bc7-and-7-Unsplit-monomer-2-damdA-from-library-1-chromium-linux.png and b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-16-7-Hydrogen-side-chain-for-16-Nucleosid-85bc7-and-7-Unsplit-monomer-2-damdA-from-library-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-16-8-Hydrogen-side-chain-for-16-Nucleosid-e31e3-phate-P---R-nC6n8A-P-and-8-Unknown-monomer-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-16-8-Hydrogen-side-chain-for-16-Nucleosid-e31e3-phate-P---R-nC6n8A-P-and-8-Unknown-monomer-1-chromium-linux.png
index 5726ef9d2c..d288958e39 100644
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-16-8-Hydrogen-side-chain-for-16-Nucleosid-e31e3-phate-P---R-nC6n8A-P-and-8-Unknown-monomer-1-chromium-linux.png and b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-16-8-Hydrogen-side-chain-for-16-Nucleosid-e31e3-phate-P---R-nC6n8A-P-and-8-Unknown-monomer-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-16-9-Hydrogen-side-chain-for-16-Nucleosid-23b97-nC6n8A-P-and-9-CHEM-4aPEGMal-from-library-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-16-9-Hydrogen-side-chain-for-16-Nucleosid-23b97-nC6n8A-P-and-9-CHEM-4aPEGMal-from-library-1-chromium-linux.png
index e4c94122b6..4a12adefe0 100644
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-16-9-Hydrogen-side-chain-for-16-Nucleosid-23b97-nC6n8A-P-and-9-CHEM-4aPEGMal-from-library-1-chromium-linux.png and b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-16-9-Hydrogen-side-chain-for-16-Nucleosid-23b97-nC6n8A-P-and-9-CHEM-4aPEGMal-from-library-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-2-15-Hydrogen-side-chain-for-2-Ambiguous--e63d7-e-that-have-extra-hydrogen-bond---R-nC6n8A-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-2-15-Hydrogen-side-chain-for-2-Ambiguous--e63d7-e-that-have-extra-hydrogen-bond---R-nC6n8A-1-chromium-linux.png
index b913a0cdf0..318f88b41f 100644
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-2-15-Hydrogen-side-chain-for-2-Ambiguous--e63d7-e-that-have-extra-hydrogen-bond---R-nC6n8A-1-chromium-linux.png and b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-2-15-Hydrogen-side-chain-for-2-Ambiguous--e63d7-e-that-have-extra-hydrogen-bond---R-nC6n8A-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-2-16-Hydrogen-side-chain-for-2-Ambiguous--e7c2e--hydrogen-bond-and-phosphate-P---R-nC6n8A-P-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-2-16-Hydrogen-side-chain-for-2-Ambiguous--e7c2e--hydrogen-bond-and-phosphate-P---R-nC6n8A-P-1-chromium-linux.png
index dcd0e19a48..cd708b7ce2 100644
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-2-16-Hydrogen-side-chain-for-2-Ambiguous--e7c2e--hydrogen-bond-and-phosphate-P---R-nC6n8A-P-1-chromium-linux.png and b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-2-16-Hydrogen-side-chain-for-2-Ambiguous--e7c2e--hydrogen-bond-and-phosphate-P---R-nC6n8A-P-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-3-15-Hydrogen-side-chain-for-3-Sugar-R-f-b488b-e-that-have-extra-hydrogen-bond---R-nC6n8A-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-3-15-Hydrogen-side-chain-for-3-Sugar-R-f-b488b-e-that-have-extra-hydrogen-bond---R-nC6n8A-1-chromium-linux.png
index 105590410b..c09fb34c1d 100644
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-3-15-Hydrogen-side-chain-for-3-Sugar-R-f-b488b-e-that-have-extra-hydrogen-bond---R-nC6n8A-1-chromium-linux.png and b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-3-15-Hydrogen-side-chain-for-3-Sugar-R-f-b488b-e-that-have-extra-hydrogen-bond---R-nC6n8A-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-3-16-Hydrogen-side-chain-for-3-Sugar-R-f-ad38b--hydrogen-bond-and-phosphate-P---R-nC6n8A-P-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-3-16-Hydrogen-side-chain-for-3-Sugar-R-f-ad38b--hydrogen-bond-and-phosphate-P---R-nC6n8A-P-1-chromium-linux.png
index 36d5e30dcf..3233c77aa0 100644
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-3-16-Hydrogen-side-chain-for-3-Sugar-R-f-ad38b--hydrogen-bond-and-phosphate-P---R-nC6n8A-P-1-chromium-linux.png and b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-3-16-Hydrogen-side-chain-for-3-Sugar-R-f-ad38b--hydrogen-bond-and-phosphate-P---R-nC6n8A-P-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-4-15-Hydrogen-side-chain-for-4-Base-A-fr-0c36d-e-that-have-extra-hydrogen-bond---R-nC6n8A-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-4-15-Hydrogen-side-chain-for-4-Base-A-fr-0c36d-e-that-have-extra-hydrogen-bond---R-nC6n8A-1-chromium-linux.png
index 21a0c0bad0..ddf9460dfa 100644
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-4-15-Hydrogen-side-chain-for-4-Base-A-fr-0c36d-e-that-have-extra-hydrogen-bond---R-nC6n8A-1-chromium-linux.png and b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-4-15-Hydrogen-side-chain-for-4-Base-A-fr-0c36d-e-that-have-extra-hydrogen-bond---R-nC6n8A-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-4-16-Hydrogen-side-chain-for-4-Base-A-fr-13d8d--hydrogen-bond-and-phosphate-P---R-nC6n8A-P-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-4-16-Hydrogen-side-chain-for-4-Base-A-fr-13d8d--hydrogen-bond-and-phosphate-P---R-nC6n8A-P-1-chromium-linux.png
index 1c719808dd..1df80c84f4 100644
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-4-16-Hydrogen-side-chain-for-4-Base-A-fr-13d8d--hydrogen-bond-and-phosphate-P---R-nC6n8A-P-1-chromium-linux.png and b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-4-16-Hydrogen-side-chain-for-4-Base-A-fr-13d8d--hydrogen-bond-and-phosphate-P---R-nC6n8A-P-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-5-15-Hydrogen-side-chain-for-5-Ambiguous--1291c-e-that-have-extra-hydrogen-bond---R-nC6n8A-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-5-15-Hydrogen-side-chain-for-5-Ambiguous--1291c-e-that-have-extra-hydrogen-bond---R-nC6n8A-1-chromium-linux.png
index c084568da2..dc03767ad1 100644
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-5-15-Hydrogen-side-chain-for-5-Ambiguous--1291c-e-that-have-extra-hydrogen-bond---R-nC6n8A-1-chromium-linux.png and b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-5-15-Hydrogen-side-chain-for-5-Ambiguous--1291c-e-that-have-extra-hydrogen-bond---R-nC6n8A-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-5-16-Hydrogen-side-chain-for-5-Ambiguous--4463e--hydrogen-bond-and-phosphate-P---R-nC6n8A-P-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-5-16-Hydrogen-side-chain-for-5-Ambiguous--4463e--hydrogen-bond-and-phosphate-P---R-nC6n8A-P-1-chromium-linux.png
index 95319eee7d..3492550c30 100644
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-5-16-Hydrogen-side-chain-for-5-Ambiguous--4463e--hydrogen-bond-and-phosphate-P---R-nC6n8A-P-1-chromium-linux.png and b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-5-16-Hydrogen-side-chain-for-5-Ambiguous--4463e--hydrogen-bond-and-phosphate-P---R-nC6n8A-P-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-6-15-Hydrogen-side-chain-for-6-Phosphate--fc5d4-e-that-have-extra-hydrogen-bond---R-nC6n8A-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-6-15-Hydrogen-side-chain-for-6-Phosphate--fc5d4-e-that-have-extra-hydrogen-bond---R-nC6n8A-1-chromium-linux.png
index b4a06e7fe8..bdcf2d84f3 100644
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-6-15-Hydrogen-side-chain-for-6-Phosphate--fc5d4-e-that-have-extra-hydrogen-bond---R-nC6n8A-1-chromium-linux.png and b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-6-15-Hydrogen-side-chain-for-6-Phosphate--fc5d4-e-that-have-extra-hydrogen-bond---R-nC6n8A-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-6-16-Hydrogen-side-chain-for-6-Phosphate--971c9--hydrogen-bond-and-phosphate-P---R-nC6n8A-P-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-6-16-Hydrogen-side-chain-for-6-Phosphate--971c9--hydrogen-bond-and-phosphate-P---R-nC6n8A-P-1-chromium-linux.png
index 4f5ad53a51..4d18d402c0 100644
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-6-16-Hydrogen-side-chain-for-6-Phosphate--971c9--hydrogen-bond-and-phosphate-P---R-nC6n8A-P-1-chromium-linux.png and b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-6-16-Hydrogen-side-chain-for-6-Phosphate--971c9--hydrogen-bond-and-phosphate-P---R-nC6n8A-P-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-7-15-Hydrogen-side-chain-for-7-Unsplit-mo-fcd46-e-that-have-extra-hydrogen-bond---R-nC6n8A-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-7-15-Hydrogen-side-chain-for-7-Unsplit-mo-fcd46-e-that-have-extra-hydrogen-bond---R-nC6n8A-1-chromium-linux.png
index 10b89a81c9..f2993b7293 100644
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-7-15-Hydrogen-side-chain-for-7-Unsplit-mo-fcd46-e-that-have-extra-hydrogen-bond---R-nC6n8A-1-chromium-linux.png and b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-7-15-Hydrogen-side-chain-for-7-Unsplit-mo-fcd46-e-that-have-extra-hydrogen-bond---R-nC6n8A-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-7-16-Hydrogen-side-chain-for-7-Unsplit-mo-f8ef8--hydrogen-bond-and-phosphate-P---R-nC6n8A-P-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-7-16-Hydrogen-side-chain-for-7-Unsplit-mo-f8ef8--hydrogen-bond-and-phosphate-P---R-nC6n8A-P-1-chromium-linux.png
index f80a643969..f7e5b3da28 100644
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-7-16-Hydrogen-side-chain-for-7-Unsplit-mo-f8ef8--hydrogen-bond-and-phosphate-P---R-nC6n8A-P-1-chromium-linux.png and b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-7-16-Hydrogen-side-chain-for-7-Unsplit-mo-f8ef8--hydrogen-bond-and-phosphate-P---R-nC6n8A-P-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-8-15-Hydrogen-side-chain-for-8-Unknown-mo-d4479-e-that-have-extra-hydrogen-bond---R-nC6n8A-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-8-15-Hydrogen-side-chain-for-8-Unknown-mo-d4479-e-that-have-extra-hydrogen-bond---R-nC6n8A-1-chromium-linux.png
index 4ed7e79361..1e2b40704d 100644
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-8-15-Hydrogen-side-chain-for-8-Unknown-mo-d4479-e-that-have-extra-hydrogen-bond---R-nC6n8A-1-chromium-linux.png and b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-8-15-Hydrogen-side-chain-for-8-Unknown-mo-d4479-e-that-have-extra-hydrogen-bond---R-nC6n8A-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-8-16-Hydrogen-side-chain-for-8-Unknown-mo-40da4--hydrogen-bond-and-phosphate-P---R-nC6n8A-P-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-8-16-Hydrogen-side-chain-for-8-Unknown-mo-40da4--hydrogen-bond-and-phosphate-P---R-nC6n8A-P-1-chromium-linux.png
index 743289aedd..08a1118a26 100644
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-8-16-Hydrogen-side-chain-for-8-Unknown-mo-40da4--hydrogen-bond-and-phosphate-P---R-nC6n8A-P-1-chromium-linux.png and b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-8-16-Hydrogen-side-chain-for-8-Unknown-mo-40da4--hydrogen-bond-and-phosphate-P---R-nC6n8A-P-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-9-15-Hydrogen-side-chain-for-9-CHEM-4aPEG-a0987-e-that-have-extra-hydrogen-bond---R-nC6n8A-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-9-15-Hydrogen-side-chain-for-9-CHEM-4aPEG-a0987-e-that-have-extra-hydrogen-bond---R-nC6n8A-1-chromium-linux.png
index 069e20a24a..9859e59c7a 100644
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-9-15-Hydrogen-side-chain-for-9-CHEM-4aPEG-a0987-e-that-have-extra-hydrogen-bond---R-nC6n8A-1-chromium-linux.png and b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-9-15-Hydrogen-side-chain-for-9-CHEM-4aPEG-a0987-e-that-have-extra-hydrogen-bond---R-nC6n8A-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-9-16-Hydrogen-side-chain-for-9-CHEM-4aPEG-6c578--hydrogen-bond-and-phosphate-P---R-nC6n8A-P-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-9-16-Hydrogen-side-chain-for-9-CHEM-4aPEG-6c578--hydrogen-bond-and-phosphate-P---R-nC6n8A-P-1-chromium-linux.png
index 1f504bf1b1..005674efdf 100644
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-9-16-Hydrogen-side-chain-for-9-CHEM-4aPEG-6c578--hydrogen-bond-and-phosphate-P---R-nC6n8A-P-1-chromium-linux.png and b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chain-layout.spec.ts-snapshots/1-9-16-Hydrogen-side-chain-for-9-CHEM-4aPEG-6c578--hydrogen-bond-and-phosphate-P---R-nC6n8A-P-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chains.spec.ts-snapshots/13-Validate-that-creating-deleting-and-modi-8e642-se-chain-supports-the-undo-redo-functionality-5-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chains.spec.ts-snapshots/13-Validate-that-creating-deleting-and-modi-8e642-se-chain-supports-the-undo-redo-functionality-5-chromium-linux.png
index a41ab739c8..abeb4394ac 100644
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chains.spec.ts-snapshots/13-Validate-that-creating-deleting-and-modi-8e642-se-chain-supports-the-undo-redo-functionality-5-chromium-linux.png and b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chains.spec.ts-snapshots/13-Validate-that-creating-deleting-and-modi-8e642-se-chain-supports-the-undo-redo-functionality-5-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chains.spec.ts-snapshots/5-Check-that-all-non-R1-R2-connections-of-bac-7c17d-cept-R3-R1-for-sugar-and-base-are-ignored-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chains.spec.ts-snapshots/5-Check-that-all-non-R1-R2-connections-of-bac-7c17d-cept-R3-R1-for-sugar-and-base-are-ignored-1-chromium-linux.png
index 5a1d784692..ae85be2b03 100644
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chains.spec.ts-snapshots/5-Check-that-all-non-R1-R2-connections-of-bac-7c17d-cept-R3-R1-for-sugar-and-base-are-ignored-1-chromium-linux.png and b/ketcher-autotests/tests/Macromolecule-editor/Antisense-Chains/antisense-chains.spec.ts-snapshots/5-Check-that-all-non-R1-R2-connections-of-bac-7c17d-cept-R3-R1-for-sugar-and-base-are-ignored-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-fasta.spec.ts-snapshots/Import-Saving-fasta-Files-Import-FASTA-Verif-f9feb--will-be-lost-on-export---we-do-not-store-it-2-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-fasta.spec.ts-snapshots/Import-Saving-fasta-Files-Import-FASTA-Verif-f9feb--will-be-lost-on-export---we-do-not-store-it-2-chromium-linux.png
index dba1bb763e..05a056b7dd 100644
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-fasta.spec.ts-snapshots/Import-Saving-fasta-Files-Import-FASTA-Verif-f9feb--will-be-lost-on-export---we-do-not-store-it-2-chromium-linux.png and b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-fasta.spec.ts-snapshots/Import-Saving-fasta-Files-Import-FASTA-Verif-f9feb--will-be-lost-on-export---we-do-not-store-it-2-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts
index 36c0da6038..2ce0fe1188 100644
--- a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts
+++ b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts
@@ -442,6 +442,10 @@ const correctHELMStrings: IHELMString[] = [
shouldFail: true,
issueNumber: 'https://github.com/epam/Indigo/issues/2339',
},
+ {
+ helmDescription: '60. The character “*” represents 0..n unknown monomers',
+ HELMString: 'CHEM1{*}$$$$V2.0',
+ },
];
test.describe('Import correct HELM sequence: ', () => {
@@ -607,152 +611,148 @@ const incorrectHELMStrings: IHELMString[] = [
'23. The character “X” represents one single unknown amino acid in a PEPTIDE polymer.',
HELMString: 'PEPTIDE1{X}$$$$V2.0',
},
- {
- helmDescription: '24. The character “*” represents 0..n unknown monomers',
- HELMString: 'CHEM1{*}$$$$V2.0',
- },
{
helmDescription:
- '25. Unknown Polymers are marked as BLOB type polymers. These polymers do not contain a list of monomers ' +
+ '24. Unknown Polymers are marked as BLOB type polymers. These polymers do not contain a list of monomers ' +
'but they specify their type inside the curly braces. The polymer BLOB1{Bead} for example represents a polymer with the type “Bead”.',
HELMString: 'BLOB1{}V2.0',
},
{
- helmDescription: '26. No monomer index',
+ helmDescription: '25. No monomer index',
HELMString: 'BLOB{Bead}V2.0',
},
{
- helmDescription: '27. CHEM could be the chain of monomers',
+ helmDescription: '26. CHEM could be the chain of monomers',
HELMString:
'CHEM1{[A6OH].[Az].[EG].[MCC].[PEG2].[SMCC].[SMPEG2].[SS3].[hxy].[sDBL]}$$$$V2.0',
},
{
- helmDescription: '28. Missing ratio token (PEPTIDE)',
+ helmDescription: '27. Missing ratio token (PEPTIDE)',
HELMString: 'PEPTIDE1{(A:+C:0.1)}$$$$V2.0',
},
{
- helmDescription: '29. Wrong ratio token type (PEPTIDE)',
+ helmDescription: '28. Wrong ratio token type (PEPTIDE)',
HELMString: 'PEPTIDE1{(A:1.5+C:aaaa)}$$$$V2.0',
},
{
- helmDescription: '30. Negative ratio (PEPTIDE)',
+ helmDescription: '29. Negative ratio (PEPTIDE)',
HELMString: 'PEPTIDE1{(A:-10+C:0.1)}$$$$V2.0',
},
{
- helmDescription: '31. Missing ratio token (CHEM)',
+ helmDescription: '30. Missing ratio token (CHEM)',
HELMString: 'CHEM1{([A6OH]:+[Az]:0.1)}$$$$V2.0',
},
{
- helmDescription: '32. Wrong ratio token type (CHEM)',
+ helmDescription: '31. Wrong ratio token type (CHEM)',
HELMString: 'CHEM1{([A6OH]:1.5+[Az]:aaa)}$$$$V2.0',
},
{
- helmDescription: '33. Negative ratio (CHEM)',
+ helmDescription: '32. Negative ratio (CHEM)',
HELMString: 'CHEM1{([A6OH]:-10+[Az]:0.1)}$$$$V2.0',
},
{
- helmDescription: '34. Missing ratio token (RNA)',
+ helmDescription: '33. Missing ratio token (RNA)',
HELMString: 'RNA1{R(A:+C:200)P}$$$$V2.0',
},
{
- helmDescription: '35. Wrong ratio token type (RNA)',
+ helmDescription: '34. Wrong ratio token type (RNA)',
HELMString: 'RNA1{R(A:100+C:aaa)P}$$$$V2.0',
},
{
- helmDescription: '36. Negative ratio (RNA)',
+ helmDescription: '35. Negative ratio (RNA)',
HELMString: 'RNA1{R(A:-100+C:200)P}$$$$V2.0',
shouldFail: true,
issueNumber: 'https://github.com/epam/Indigo/issues/2270',
},
{
- helmDescription: '37. Missing probability token (PEPTIDE)',
+ helmDescription: '36. Missing probability token (PEPTIDE)',
HELMString: 'PEPTIDE1{(A:,C:20)}$$$$V2.0',
},
{
- helmDescription: '38. Wrong probability token type (PEPTIDE)',
+ helmDescription: '37. Wrong probability token type (PEPTIDE)',
HELMString: 'PEPTIDE1{(A:10,C:aaa)}$$$$V2.0',
},
{
- helmDescription: '39. Negative probability (PEPTIDE)',
+ helmDescription: '38. Negative probability (PEPTIDE)',
HELMString: 'PEPTIDE1{(A:-10,C:20)}$$$$V2.0',
},
{
- helmDescription: '40. Probability is greater than 100 (PEPTIDE)',
+ helmDescription: '39. Probability is greater than 100 (PEPTIDE)',
HELMString: 'PEPTIDE1{(A:10,C:1000)}$$$$V2.0',
},
{
- helmDescription: '41. Missing probability token (CHEM)',
+ helmDescription: '40. Missing probability token (CHEM)',
HELMString: 'CHEM1{([A6OH]:,[Az]:20)}$$$$V2.0',
},
{
- helmDescription: '42. Wrong probability token type (CHEM)',
+ helmDescription: '41. Wrong probability token type (CHEM)',
HELMString: 'CHEM1{([A6OH]:10,[Az]:aaa)}$$$$V2.0',
},
{
- helmDescription: '43. Negative probability (CHEM)',
+ helmDescription: '42. Negative probability (CHEM)',
HELMString: 'CHEM1{([A6OH]:-10,[Az]:20)}$$$$V2.0',
},
// {
- // helmDescription: '44. Probability is greater than 100 (CHEM)',
+ // helmDescription: '43. Probability is greater than 100 (CHEM)',
// HELMString: 'CHEM1{([A6OH]:10,[Az]:1000)}$$$$V2.0',
// },
// It is not a bug because of Aleksandr Savelev suggestion
{
- helmDescription: '45. Missing probability token (RNA)',
+ helmDescription: '44. Missing probability token (RNA)',
HELMString: 'RNA1{R(A:,C:90)P}$$$$V2.0',
},
{
- helmDescription: '46. Wrong probability token type (RNA)',
+ helmDescription: '45. Wrong probability token type (RNA)',
HELMString: 'RNA1{(R(A:10,C:aaa)P}$$$$V2.0',
},
{
- helmDescription: '47. Negative probability (RNA)',
+ helmDescription: '46. Negative probability (RNA)',
HELMString: 'RNA1{(R(A:-10,C:90)P}$$$$V2.0',
},
{
- helmDescription: '48. Probability is greater than 100 (RNA)',
+ helmDescription: '47. Probability is greater than 100 (RNA)',
HELMString: 'RNA1{(R(A:10,C:1000)P}$$$$V2.0',
},
{
helmDescription:
- '49. CHEM monomers cannot be at the terminus of a set of repeating monomers as the connection order is not defined for CHEMs.',
+ '48. CHEM monomers cannot be at the terminus of a set of repeating monomers as the connection order is not defined for CHEMs.',
HELMString: "CHEM1{[SMPEG2]'5'}$$$$V2.0",
},
{
- helmDescription: '50. Negative repeating number (RNA)',
+ helmDescription: '49. Negative repeating number (RNA)',
HELMString: "RNA1{[Sm5moe]([m2nprn])[mepo2]'-5'}$$$$V2.0",
shouldFail: true,
issueNumber: 'https://github.com/epam/Indigo/issues/2062',
},
{
- helmDescription: '51. Negative repeating number (PEPTIDE)',
+ helmDescription: '50. Negative repeating number (PEPTIDE)',
HELMString: "PEPTIDE1{[D-gGlu]'-5'}$$$$V2.0",
},
{
- helmDescription: '52. Negative repeating number (CHEM)',
+ helmDescription: '51. Negative repeating number (CHEM)',
HELMString: "CHEM1{[SMPEG2]'-5'}$$$$V2.0",
},
{
helmDescription:
- '53. Repeating in groups for CHEMS cannot be at the terminus of a set of repeating monomers as the connection order is not defined for CHEMs.',
+ '52. Repeating in groups for CHEMS cannot be at the terminus of a set of repeating monomers as the connection order is not defined for CHEMs.',
HELMString:
"CHEM1{[A6OH].[Az]'2'.[EG]'3'.[MCC]'4'.[PEG2]'5'.[SMCC]'6'}$$$$V2.0",
},
{
helmDescription:
- '54. Group of CHEM monomers cannot be at the terminus of a set of repeating monomers as the connection order is not defined for CHEMs.',
+ '53. Group of CHEM monomers cannot be at the terminus of a set of repeating monomers as the connection order is not defined for CHEMs.',
HELMString: "CHEM1{([Az]+[EG]+[MCC]+[PEG2]+[SMCC])'5'}$$$$V2.0",
},
{
- helmDescription: '55. Negative repeating number (PEPTIDE)',
+ helmDescription: '54. Negative repeating number (PEPTIDE)',
HELMString: "PEPTIDE1{([Aad]+[Abu]+[Aca]+[Aib]+[Apm])'-5'}$$$$V2.0",
},
{
- helmDescription: '56. Negative repeating number (CHEM)',
+ helmDescription: '55. Negative repeating number (CHEM)',
HELMString: "CHEM1{([Az]+[EG]+[MCC]+[PEG2]+[SMCC])'-5'}$$$$V2.0",
},
{
- helmDescription: '57. Negative repeating number',
+ helmDescription: '56. Negative repeating number',
HELMString:
"RNA1{([Sm5moe]([m2nprn])[mepo2]+[menoe2]([nobn6p])[m2nen]+[bnoe2r]([nC6n2G])[fl2me]+[m2nc2r]([nC6n8A])[mepo2])'-5'}$$$$V2.0",
shouldFail: true,
@@ -760,42 +760,42 @@ const incorrectHELMStrings: IHELMString[] = [
},
{
helmDescription:
- '58. CHEM monomers cannot be at the terminus of a set of repeating monomers as the connection order is not defined for CHEMs.',
+ '57. CHEM monomers cannot be at the terminus of a set of repeating monomers as the connection order is not defined for CHEMs.',
HELMString: "CHEM1{[SMPEG2]'3-7'}$$$$V2.0",
},
{
- helmDescription: '59. Invalid range (RNA)',
+ helmDescription: '58. Invalid range (RNA)',
HELMString: "RNA1{[Sm5moe]([m2nprn])[mepo2]'5-i'}$$$$V2.0",
shouldFail: true,
issueNumber: 'https://github.com/epam/Indigo/issues/2062',
},
{
- helmDescription: '60. Invalid range (PEPTIDE)',
+ helmDescription: '59. Invalid range (PEPTIDE)',
HELMString: "PEPTIDE1{[D-gGlu]'5-i'}$$$$V2.0",
},
{
- helmDescription: '61. Invalid range (CHEM)',
+ helmDescription: '60. Invalid range (CHEM)',
HELMString: "CHEM1{[SMPEG2]'5-i'}$$$$V2.0",
},
{
- helmDescription: '62. Range for CHEMS is impossible',
+ helmDescription: '61. Range for CHEMS is impossible',
HELMString:
"CHEM1{[A6OH]'1-2'.[Az]'2-3'.[EG]'3-4'.[MCC]'4-5'.[PEG2]'5-6'.[SMCC]'6-7'}$$$$V2.0",
},
{
- helmDescription: '63. Range for CHEMS is impossible',
+ helmDescription: '62. Range for CHEMS is impossible',
HELMString: "CHEM1{([Az]+[EG]+[MCC]+[PEG2]+[SMCC])'3-7'}$$$$V2.0",
},
{
- helmDescription: '64. Invalid range (PEPTIDE)',
+ helmDescription: '63. Invalid range (PEPTIDE)',
HELMString: "PEPTIDE1{([Aad]+[Abu]+[Aca]+[Aib]+[Apm])'5-i'}$$$$V2.0",
},
{
- helmDescription: '65. Invalid range (CHEM)',
+ helmDescription: '64. Invalid range (CHEM)',
HELMString: "CHEM1{([Az]+[EG]+[MCC]+[PEG2]+[SMCC])'5-i'}$$$$V2.0",
},
{
- helmDescription: '66. Invalid range (RNA)',
+ helmDescription: '65. Invalid range (RNA)',
HELMString:
"RNA1{([Sm5moe]([m2nprn])[mepo2]+[menoe2]([nobn6p])[m2nen]+[bnoe2r]([nC6n2G])[fl2me]+[m2nc2r]([nC6n8A])[mepo2])'5-i'}$$$$V2.0",
shouldFail: true,
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-correct-HELM-sequence-46-RNA-RA-with-single-inline-Extended-SMILES-A-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-correct-HELM-sequence-46-RNA-RA-with-single-inline-Extended-SMILES-A-1-chromium-linux.png
deleted file mode 100644
index f0d88e29ba..0000000000
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-correct-HELM-sequence-46-RNA-RA-with-single-inline-Extended-SMILES-A-1-chromium-linux.png and /dev/null differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-correct-HELM-sequence-47-RNA-RAP-with-single-inline-Extended-SMILES-A-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-correct-HELM-sequence-47-RNA-RAP-with-single-inline-Extended-SMILES-A-1-chromium-linux.png
deleted file mode 100644
index 9dfbcd9497..0000000000
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-correct-HELM-sequence-47-RNA-RAP-with-single-inline-Extended-SMILES-A-1-chromium-linux.png and /dev/null differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-correct-HELM-sequence-48-RNA-RP-with-single-inline-Extended-SMILES-P-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-correct-HELM-sequence-48-RNA-RP-with-single-inline-Extended-SMILES-P-1-chromium-linux.png
deleted file mode 100644
index 5f1dd15108..0000000000
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-correct-HELM-sequence-48-RNA-RP-with-single-inline-Extended-SMILES-P-1-chromium-linux.png and /dev/null differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-correct-HELM-sequence-50-RNA-RAP-with-single-inline-Extended-SMILES-P-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-correct-HELM-sequence-50-RNA-RAP-with-single-inline-Extended-SMILES-P-1-chromium-linux.png
deleted file mode 100644
index 31e2ebdd1c..0000000000
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-correct-HELM-sequence-50-RNA-RAP-with-single-inline-Extended-SMILES-P-1-chromium-linux.png and /dev/null differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-correct-HELM-sequence-52-Single-peptide-with-inline-SMILES-L-without-attachment-points-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-correct-HELM-sequence-52-Single-peptide-with-inline-SMILES-L-without-attachment-points-1-chromium-linux.png
deleted file mode 100644
index 0b09d71f16..0000000000
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-correct-HELM-sequence-52-Single-peptide-with-inline-SMILES-L-without-attachment-points-1-chromium-linux.png and /dev/null differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-correct-HELM-sequence-53-Single-peptide-with-inline-Extended-SMILES-L-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-correct-HELM-sequence-53-Single-peptide-with-inline-Extended-SMILES-L-1-chromium-linux.png
deleted file mode 100644
index 0b09d71f16..0000000000
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-correct-HELM-sequence-53-Single-peptide-with-inline-Extended-SMILES-L-1-chromium-linux.png and /dev/null differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-correct-HELM-sequence-54-Single-CHEM-with-inline-SMILES-A6OH-without-attachment-points-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-correct-HELM-sequence-54-Single-CHEM-with-inline-SMILES-A6OH-without-attachment-points-1-chromium-linux.png
deleted file mode 100644
index 0b09d71f16..0000000000
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-correct-HELM-sequence-54-Single-CHEM-with-inline-SMILES-A6OH-without-attachment-points-1-chromium-linux.png and /dev/null differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-correct-HELM-sequence-55-Single-CHEM-with-inline-Extended-SMILES-A6OH-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-correct-HELM-sequence-55-Single-CHEM-with-inline-Extended-SMILES-A6OH-1-chromium-linux.png
deleted file mode 100644
index 0b09d71f16..0000000000
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-correct-HELM-sequence-55-Single-CHEM-with-inline-Extended-SMILES-A6OH-1-chromium-linux.png and /dev/null differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-correct-HELM-sequence-56-List-of-peptide-of-inline-Extended-Smiles-A-C-D-L-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-correct-HELM-sequence-56-List-of-peptide-of-inline-Extended-Smiles-A-C-D-L-1-chromium-linux.png
deleted file mode 100644
index aff82666ec..0000000000
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-correct-HELM-sequence-56-List-of-peptide-of-inline-Extended-Smiles-A-C-D-L-1-chromium-linux.png and /dev/null differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-correct-HELM-sequence-57-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-correct-HELM-sequence-57-1-chromium-linux.png
deleted file mode 100644
index 62e92b60ea..0000000000
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-correct-HELM-sequence-57-1-chromium-linux.png and /dev/null differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-44-Probability-is-greater-than-100-CHEM-1-chromium-linux.png "b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-correct-HELM-sequence-60-The-character-\342\200\234-\342\200\235-represents-0-n-unknown-monomers-1-chromium-linux.png"
similarity index 62%
rename from ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-44-Probability-is-greater-than-100-CHEM-1-chromium-linux.png
rename to "ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-correct-HELM-sequence-60-The-character-\342\200\234-\342\200\235-represents-0-n-unknown-monomers-1-chromium-linux.png"
index 3862e870ef..a4da203dda 100644
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-44-Probability-is-greater-than-100-CHEM-1-chromium-linux.png and "b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-correct-HELM-sequence-60-The-character-\342\200\234-\342\200\235-represents-0-n-unknown-monomers-1-chromium-linux.png" differ
diff --git "a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-24-The-character-\342\200\234-\342\200\235-represents-0-n-unknown-monomers-1-chromium-linux.png" "b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-24-The-character-\342\200\234-\342\200\235-represents-0-n-unknown-monomers-1-chromium-linux.png"
deleted file mode 100644
index a56c937f20..0000000000
Binary files "a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-24-The-character-\342\200\234-\342\200\235-represents-0-n-unknown-monomers-1-chromium-linux.png" and /dev/null differ
diff --git "a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-24-Unknown-P-ad3df-le-represents-a-polymer-with-the-type-\342\200\234Bead\342\200\235-1-chromium-linux.png" "b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-24-Unknown-P-ad3df-le-represents-a-polymer-with-the-type-\342\200\234Bead\342\200\235-1-chromium-linux.png"
new file mode 100644
index 0000000000..44e4d2c154
Binary files /dev/null and "b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-24-Unknown-P-ad3df-le-represents-a-polymer-with-the-type-\342\200\234Bead\342\200\235-1-chromium-linux.png" differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-25-No-monomer-index-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-25-No-monomer-index-1-chromium-linux.png
new file mode 100644
index 0000000000..4db41d0537
Binary files /dev/null and b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-25-No-monomer-index-1-chromium-linux.png differ
diff --git "a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-25-Unknown-P-29e5e-le-represents-a-polymer-with-the-type-\342\200\234Bead\342\200\235-1-chromium-linux.png" "b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-25-Unknown-P-29e5e-le-represents-a-polymer-with-the-type-\342\200\234Bead\342\200\235-1-chromium-linux.png"
deleted file mode 100644
index 0be40c3d3e..0000000000
Binary files "a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-25-Unknown-P-29e5e-le-represents-a-polymer-with-the-type-\342\200\234Bead\342\200\235-1-chromium-linux.png" and /dev/null differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-26-CHEM-could-be-the-chain-of-monomers-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-26-CHEM-could-be-the-chain-of-monomers-1-chromium-linux.png
new file mode 100644
index 0000000000..8a8e11b293
Binary files /dev/null and b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-26-CHEM-could-be-the-chain-of-monomers-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-26-No-monomer-index-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-26-No-monomer-index-1-chromium-linux.png
deleted file mode 100644
index 17ac68d1b8..0000000000
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-26-No-monomer-index-1-chromium-linux.png and /dev/null differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-27-CHEM-could-be-the-chain-of-monomers-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-27-CHEM-could-be-the-chain-of-monomers-1-chromium-linux.png
deleted file mode 100644
index ddfbcf2b61..0000000000
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-27-CHEM-could-be-the-chain-of-monomers-1-chromium-linux.png and /dev/null differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-27-Missing-ratio-token-PEPTIDE-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-27-Missing-ratio-token-PEPTIDE-1-chromium-linux.png
new file mode 100644
index 0000000000..1d756b02ed
Binary files /dev/null and b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-27-Missing-ratio-token-PEPTIDE-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-28-Missing-ratio-token-PEPTIDE-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-28-Missing-ratio-token-PEPTIDE-1-chromium-linux.png
deleted file mode 100644
index 8f6478e078..0000000000
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-28-Missing-ratio-token-PEPTIDE-1-chromium-linux.png and /dev/null differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-28-Wrong-ratio-token-type-PEPTIDE-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-28-Wrong-ratio-token-type-PEPTIDE-1-chromium-linux.png
new file mode 100644
index 0000000000..1ab4d1e612
Binary files /dev/null and b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-28-Wrong-ratio-token-type-PEPTIDE-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-29-Negative-ratio-PEPTIDE-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-29-Negative-ratio-PEPTIDE-1-chromium-linux.png
new file mode 100644
index 0000000000..d0945a1496
Binary files /dev/null and b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-29-Negative-ratio-PEPTIDE-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-29-Wrong-ratio-token-type-PEPTIDE-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-29-Wrong-ratio-token-type-PEPTIDE-1-chromium-linux.png
deleted file mode 100644
index 63ca3c340d..0000000000
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-29-Wrong-ratio-token-type-PEPTIDE-1-chromium-linux.png and /dev/null differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-30-Missing-ratio-token-CHEM-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-30-Missing-ratio-token-CHEM-1-chromium-linux.png
new file mode 100644
index 0000000000..7b8ce1b0c2
Binary files /dev/null and b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-30-Missing-ratio-token-CHEM-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-30-Negative-ratio-PEPTIDE-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-30-Negative-ratio-PEPTIDE-1-chromium-linux.png
deleted file mode 100644
index cf1c22759e..0000000000
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-30-Negative-ratio-PEPTIDE-1-chromium-linux.png and /dev/null differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-31-Missing-ratio-token-CHEM-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-31-Missing-ratio-token-CHEM-1-chromium-linux.png
deleted file mode 100644
index a437a125f2..0000000000
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-31-Missing-ratio-token-CHEM-1-chromium-linux.png and /dev/null differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-31-Wrong-ratio-token-type-CHEM-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-31-Wrong-ratio-token-type-CHEM-1-chromium-linux.png
new file mode 100644
index 0000000000..6f7337b66a
Binary files /dev/null and b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-31-Wrong-ratio-token-type-CHEM-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-32-Negative-ratio-CHEM-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-32-Negative-ratio-CHEM-1-chromium-linux.png
new file mode 100644
index 0000000000..245d0bf437
Binary files /dev/null and b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-32-Negative-ratio-CHEM-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-32-Wrong-ratio-token-type-CHEM-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-32-Wrong-ratio-token-type-CHEM-1-chromium-linux.png
deleted file mode 100644
index 3c719c4a26..0000000000
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-32-Wrong-ratio-token-type-CHEM-1-chromium-linux.png and /dev/null differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-33-Missing-ratio-token-RNA-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-33-Missing-ratio-token-RNA-1-chromium-linux.png
new file mode 100644
index 0000000000..a01aff7f34
Binary files /dev/null and b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-33-Missing-ratio-token-RNA-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-33-Negative-ratio-CHEM-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-33-Negative-ratio-CHEM-1-chromium-linux.png
deleted file mode 100644
index 4df808baa4..0000000000
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-33-Negative-ratio-CHEM-1-chromium-linux.png and /dev/null differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-34-Missing-ratio-token-RNA-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-34-Missing-ratio-token-RNA-1-chromium-linux.png
deleted file mode 100644
index b608cabb18..0000000000
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-34-Missing-ratio-token-RNA-1-chromium-linux.png and /dev/null differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-34-Wrong-ratio-token-type-RNA-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-34-Wrong-ratio-token-type-RNA-1-chromium-linux.png
new file mode 100644
index 0000000000..b05e43e05e
Binary files /dev/null and b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-34-Wrong-ratio-token-type-RNA-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-35-Negative-ratio-RNA-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-35-Negative-ratio-RNA-1-chromium-linux.png
new file mode 100644
index 0000000000..755f8b7bf2
Binary files /dev/null and b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-35-Negative-ratio-RNA-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-35-Wrong-ratio-token-type-RNA-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-35-Wrong-ratio-token-type-RNA-1-chromium-linux.png
deleted file mode 100644
index 814917fbbe..0000000000
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-35-Wrong-ratio-token-type-RNA-1-chromium-linux.png and /dev/null differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-36-Missing-probability-token-PEPTIDE-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-36-Missing-probability-token-PEPTIDE-1-chromium-linux.png
new file mode 100644
index 0000000000..b965381a73
Binary files /dev/null and b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-36-Missing-probability-token-PEPTIDE-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-36-Negative-ratio-RNA-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-36-Negative-ratio-RNA-1-chromium-linux.png
deleted file mode 100644
index abab049817..0000000000
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-36-Negative-ratio-RNA-1-chromium-linux.png and /dev/null differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-37-Missing-probability-token-PEPTIDE-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-37-Missing-probability-token-PEPTIDE-1-chromium-linux.png
deleted file mode 100644
index 2010adc02a..0000000000
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-37-Missing-probability-token-PEPTIDE-1-chromium-linux.png and /dev/null differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-37-Wrong-probability-token-type-PEPTIDE-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-37-Wrong-probability-token-type-PEPTIDE-1-chromium-linux.png
new file mode 100644
index 0000000000..392422b360
Binary files /dev/null and b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-37-Wrong-probability-token-type-PEPTIDE-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-38-Negative-probability-PEPTIDE-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-38-Negative-probability-PEPTIDE-1-chromium-linux.png
new file mode 100644
index 0000000000..675458502d
Binary files /dev/null and b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-38-Negative-probability-PEPTIDE-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-38-Wrong-probability-token-type-PEPTIDE-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-38-Wrong-probability-token-type-PEPTIDE-1-chromium-linux.png
deleted file mode 100644
index 1cb55956b5..0000000000
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-38-Wrong-probability-token-type-PEPTIDE-1-chromium-linux.png and /dev/null differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-39-Negative-probability-PEPTIDE-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-39-Negative-probability-PEPTIDE-1-chromium-linux.png
deleted file mode 100644
index 3eb72da6c4..0000000000
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-39-Negative-probability-PEPTIDE-1-chromium-linux.png and /dev/null differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-40-Probability-is-greater-than-100-PEPTIDE-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-39-Probability-is-greater-than-100-PEPTIDE-1-chromium-linux.png
similarity index 100%
rename from ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-40-Probability-is-greater-than-100-PEPTIDE-1-chromium-linux.png
rename to ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-39-Probability-is-greater-than-100-PEPTIDE-1-chromium-linux.png
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-40-Missing-probability-token-CHEM-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-40-Missing-probability-token-CHEM-1-chromium-linux.png
new file mode 100644
index 0000000000..05c1b54d3a
Binary files /dev/null and b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-40-Missing-probability-token-CHEM-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-41-Missing-probability-token-CHEM-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-41-Missing-probability-token-CHEM-1-chromium-linux.png
deleted file mode 100644
index fbe17d5666..0000000000
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-41-Missing-probability-token-CHEM-1-chromium-linux.png and /dev/null differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-41-Wrong-probability-token-type-CHEM-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-41-Wrong-probability-token-type-CHEM-1-chromium-linux.png
new file mode 100644
index 0000000000..f7451804fa
Binary files /dev/null and b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-41-Wrong-probability-token-type-CHEM-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-42-Negative-probability-CHEM-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-42-Negative-probability-CHEM-1-chromium-linux.png
new file mode 100644
index 0000000000..356de04b02
Binary files /dev/null and b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-42-Negative-probability-CHEM-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-42-Wrong-probability-token-type-CHEM-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-42-Wrong-probability-token-type-CHEM-1-chromium-linux.png
deleted file mode 100644
index 13127caf6c..0000000000
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-42-Wrong-probability-token-type-CHEM-1-chromium-linux.png and /dev/null differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-43-Negative-probability-CHEM-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-43-Negative-probability-CHEM-1-chromium-linux.png
deleted file mode 100644
index 57d3d28f7a..0000000000
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-43-Negative-probability-CHEM-1-chromium-linux.png and /dev/null differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-44-Missing-probability-token-RNA-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-44-Missing-probability-token-RNA-1-chromium-linux.png
new file mode 100644
index 0000000000..cb8a46197d
Binary files /dev/null and b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-44-Missing-probability-token-RNA-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-45-Missing-probability-token-RNA-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-45-Missing-probability-token-RNA-1-chromium-linux.png
deleted file mode 100644
index 47ec5facad..0000000000
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-45-Missing-probability-token-RNA-1-chromium-linux.png and /dev/null differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-45-Wrong-probability-token-type-RNA-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-45-Wrong-probability-token-type-RNA-1-chromium-linux.png
new file mode 100644
index 0000000000..674843799b
Binary files /dev/null and b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-45-Wrong-probability-token-type-RNA-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-46-Negative-probability-RNA-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-46-Negative-probability-RNA-1-chromium-linux.png
new file mode 100644
index 0000000000..7445f83173
Binary files /dev/null and b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-46-Negative-probability-RNA-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-46-Wrong-probability-token-type-RNA-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-46-Wrong-probability-token-type-RNA-1-chromium-linux.png
deleted file mode 100644
index bf6fb10239..0000000000
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-46-Wrong-probability-token-type-RNA-1-chromium-linux.png and /dev/null differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-47-Negative-probability-RNA-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-47-Negative-probability-RNA-1-chromium-linux.png
deleted file mode 100644
index 7e4c8347db..0000000000
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-47-Negative-probability-RNA-1-chromium-linux.png and /dev/null differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-47-Probability-is-greater-than-100-RNA-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-47-Probability-is-greater-than-100-RNA-1-chromium-linux.png
new file mode 100644
index 0000000000..9066f0927c
Binary files /dev/null and b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-47-Probability-is-greater-than-100-RNA-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-48-CHEM-mono-51bd3-he-connection-order-is-not-defined-for-CHEMs-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-48-CHEM-mono-51bd3-he-connection-order-is-not-defined-for-CHEMs-1-chromium-linux.png
new file mode 100644
index 0000000000..288cae6123
Binary files /dev/null and b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-48-CHEM-mono-51bd3-he-connection-order-is-not-defined-for-CHEMs-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-48-Probability-is-greater-than-100-RNA-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-48-Probability-is-greater-than-100-RNA-1-chromium-linux.png
deleted file mode 100644
index 97970eda72..0000000000
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-48-Probability-is-greater-than-100-RNA-1-chromium-linux.png and /dev/null differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-49-Negative-repeating-number-RNA-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-49-Negative-repeating-number-RNA-1-chromium-linux.png
new file mode 100644
index 0000000000..0e9ac347c4
Binary files /dev/null and b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-49-Negative-repeating-number-RNA-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-50-Negative-repeating-number-PEPTIDE-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-50-Negative-repeating-number-PEPTIDE-1-chromium-linux.png
new file mode 100644
index 0000000000..0d8e281b62
Binary files /dev/null and b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-50-Negative-repeating-number-PEPTIDE-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-50-Negative-repeating-number-RNA-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-50-Negative-repeating-number-RNA-1-chromium-linux.png
deleted file mode 100644
index 138d86b17c..0000000000
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-50-Negative-repeating-number-RNA-1-chromium-linux.png and /dev/null differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-51-Negative-repeating-number-CHEM-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-51-Negative-repeating-number-CHEM-1-chromium-linux.png
new file mode 100644
index 0000000000..23b0efbee7
Binary files /dev/null and b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-51-Negative-repeating-number-CHEM-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-51-Negative-repeating-number-PEPTIDE-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-51-Negative-repeating-number-PEPTIDE-1-chromium-linux.png
deleted file mode 100644
index 6180670573..0000000000
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-51-Negative-repeating-number-PEPTIDE-1-chromium-linux.png and /dev/null differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-52-Negative-repeating-number-CHEM-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-52-Negative-repeating-number-CHEM-1-chromium-linux.png
deleted file mode 100644
index b3fc2c50ec..0000000000
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-52-Negative-repeating-number-CHEM-1-chromium-linux.png and /dev/null differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-52-Repeating-cb3c2-he-connection-order-is-not-defined-for-CHEMs-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-52-Repeating-cb3c2-he-connection-order-is-not-defined-for-CHEMs-1-chromium-linux.png
new file mode 100644
index 0000000000..d2880561be
Binary files /dev/null and b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-52-Repeating-cb3c2-he-connection-order-is-not-defined-for-CHEMs-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-54-Group-of--e38c3-he-connection-order-is-not-defined-for-CHEMs-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-53-Group-of--424a4-he-connection-order-is-not-defined-for-CHEMs-1-chromium-linux.png
similarity index 100%
rename from ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-54-Group-of--e38c3-he-connection-order-is-not-defined-for-CHEMs-1-chromium-linux.png
rename to ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-53-Group-of--424a4-he-connection-order-is-not-defined-for-CHEMs-1-chromium-linux.png
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-53-Repeating-bc91d-he-connection-order-is-not-defined-for-CHEMs-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-53-Repeating-bc91d-he-connection-order-is-not-defined-for-CHEMs-1-chromium-linux.png
deleted file mode 100644
index 4f3b676824..0000000000
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-53-Repeating-bc91d-he-connection-order-is-not-defined-for-CHEMs-1-chromium-linux.png and /dev/null differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-54-Negative-repeating-number-PEPTIDE-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-54-Negative-repeating-number-PEPTIDE-1-chromium-linux.png
new file mode 100644
index 0000000000..61923c7ae8
Binary files /dev/null and b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-54-Negative-repeating-number-PEPTIDE-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-56-Negative-repeating-number-CHEM-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-55-Negative-repeating-number-CHEM-1-chromium-linux.png
similarity index 100%
rename from ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-56-Negative-repeating-number-CHEM-1-chromium-linux.png
rename to ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-55-Negative-repeating-number-CHEM-1-chromium-linux.png
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-55-Negative-repeating-number-PEPTIDE-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-55-Negative-repeating-number-PEPTIDE-1-chromium-linux.png
deleted file mode 100644
index 21be7a97e3..0000000000
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-55-Negative-repeating-number-PEPTIDE-1-chromium-linux.png and /dev/null differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-56-Negative-repeating-number-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-56-Negative-repeating-number-1-chromium-linux.png
new file mode 100644
index 0000000000..850df3f259
Binary files /dev/null and b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-56-Negative-repeating-number-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-57-CHEM-mono-03e6d-he-connection-order-is-not-defined-for-CHEMs-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-57-CHEM-mono-03e6d-he-connection-order-is-not-defined-for-CHEMs-1-chromium-linux.png
new file mode 100644
index 0000000000..5ced91a550
Binary files /dev/null and b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-57-CHEM-mono-03e6d-he-connection-order-is-not-defined-for-CHEMs-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-57-Negative-repeating-number-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-57-Negative-repeating-number-1-chromium-linux.png
deleted file mode 100644
index f37eca0cd8..0000000000
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-57-Negative-repeating-number-1-chromium-linux.png and /dev/null differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-58-CHEM-mono-4c48f-he-connection-order-is-not-defined-for-CHEMs-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-58-CHEM-mono-4c48f-he-connection-order-is-not-defined-for-CHEMs-1-chromium-linux.png
deleted file mode 100644
index 9f89bdfa46..0000000000
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-58-CHEM-mono-4c48f-he-connection-order-is-not-defined-for-CHEMs-1-chromium-linux.png and /dev/null differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-58-Invalid-range-RNA-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-58-Invalid-range-RNA-1-chromium-linux.png
new file mode 100644
index 0000000000..55a4f4f719
Binary files /dev/null and b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-58-Invalid-range-RNA-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-59-Invalid-range-PEPTIDE-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-59-Invalid-range-PEPTIDE-1-chromium-linux.png
new file mode 100644
index 0000000000..8e36bf5f85
Binary files /dev/null and b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-59-Invalid-range-PEPTIDE-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-59-Invalid-range-RNA-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-59-Invalid-range-RNA-1-chromium-linux.png
deleted file mode 100644
index 73faac0ef8..0000000000
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-59-Invalid-range-RNA-1-chromium-linux.png and /dev/null differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-60-Invalid-range-CHEM-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-60-Invalid-range-CHEM-1-chromium-linux.png
new file mode 100644
index 0000000000..ecb15f7a6b
Binary files /dev/null and b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-60-Invalid-range-CHEM-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-60-Invalid-range-PEPTIDE-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-60-Invalid-range-PEPTIDE-1-chromium-linux.png
deleted file mode 100644
index d9e69fb0fa..0000000000
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-60-Invalid-range-PEPTIDE-1-chromium-linux.png and /dev/null differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-61-Invalid-range-CHEM-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-61-Invalid-range-CHEM-1-chromium-linux.png
deleted file mode 100644
index 02907df91d..0000000000
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-61-Invalid-range-CHEM-1-chromium-linux.png and /dev/null differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-61-Range-for-CHEMS-is-impossible-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-61-Range-for-CHEMS-is-impossible-1-chromium-linux.png
new file mode 100644
index 0000000000..3e9ed4dc38
Binary files /dev/null and b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-61-Range-for-CHEMS-is-impossible-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-62-Range-for-CHEMS-is-impossible-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-62-Range-for-CHEMS-is-impossible-1-chromium-linux.png
index 26b5fef09d..80a5c48e75 100644
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-62-Range-for-CHEMS-is-impossible-1-chromium-linux.png and b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-62-Range-for-CHEMS-is-impossible-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-63-Invalid-range-PEPTIDE-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-63-Invalid-range-PEPTIDE-1-chromium-linux.png
new file mode 100644
index 0000000000..d70ccf1257
Binary files /dev/null and b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-63-Invalid-range-PEPTIDE-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-63-Range-for-CHEMS-is-impossible-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-63-Range-for-CHEMS-is-impossible-1-chromium-linux.png
deleted file mode 100644
index 80a5c48e75..0000000000
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-63-Range-for-CHEMS-is-impossible-1-chromium-linux.png and /dev/null differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-65-Invalid-range-CHEM-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-64-Invalid-range-CHEM-1-chromium-linux.png
similarity index 100%
rename from ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-65-Invalid-range-CHEM-1-chromium-linux.png
rename to ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-64-Invalid-range-CHEM-1-chromium-linux.png
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-64-Invalid-range-PEPTIDE-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-64-Invalid-range-PEPTIDE-1-chromium-linux.png
deleted file mode 100644
index c40eabc321..0000000000
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-64-Invalid-range-PEPTIDE-1-chromium-linux.png and /dev/null differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-65-Invalid-range-RNA-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-65-Invalid-range-RNA-1-chromium-linux.png
new file mode 100644
index 0000000000..7df35a5acb
Binary files /dev/null and b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-65-Invalid-range-RNA-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-66-Invalid-range-RNA-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-66-Invalid-range-RNA-1-chromium-linux.png
deleted file mode 100644
index 3f0fccb79b..0000000000
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-helm.spec.ts-snapshots/Import-incorrect-HELM-sequence-66-Invalid-range-RNA-1-chromium-linux.png and /dev/null differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-idt.spec.ts b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-idt.spec.ts
index 87786ce96a..d40d50b05b 100644
--- a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-idt.spec.ts
+++ b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-idt.spec.ts
@@ -268,9 +268,9 @@ test.describe('Import-Saving .idt Files', () => {
const rnaNucleotides = [
`2-damdA___2,6-Diaminopurine`,
`5hMedC___Hydroxymethyl dC`,
- `Super G___8-aza-7-deazaguanosine`,
+ `Super-G___8-aza-7-deazaguanosine`,
`AmMC6T___Amino Modifier C6 dT`,
- `Super T___5-hydroxybutynl-2’-deoxyuridine`,
+ `Super-T___5-hydroxybutynl-2’-deoxyuridine`,
`5Br-dU___5-Bromo-deoxyuridine`,
`5NitInd___5-Nitroindole`,
];
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-idt.spec.ts-snapshots/Import-Saving-idt-Files-Check-IDT-aliases-wh-32fe3-Nucleotides-monomer-5hMedC-Hydroxymethyl-dC-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-idt.spec.ts-snapshots/Import-Saving-idt-Files-Check-IDT-aliases-wh-32fe3-Nucleotides-monomer-5hMedC-Hydroxymethyl-dC-1-chromium-linux.png
index b3f6884778..6bdbc7de29 100644
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-idt.spec.ts-snapshots/Import-Saving-idt-Files-Check-IDT-aliases-wh-32fe3-Nucleotides-monomer-5hMedC-Hydroxymethyl-dC-1-chromium-linux.png and b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-idt.spec.ts-snapshots/Import-Saving-idt-Files-Check-IDT-aliases-wh-32fe3-Nucleotides-monomer-5hMedC-Hydroxymethyl-dC-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-idt.spec.ts-snapshots/Import-Saving-idt-Files-Check-IDT-aliases-wh-330f7-eotides-monomer-AmMC6T-Amino-Modifier-C6-dT-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-idt.spec.ts-snapshots/Import-Saving-idt-Files-Check-IDT-aliases-wh-330f7-eotides-monomer-AmMC6T-Amino-Modifier-C6-dT-1-chromium-linux.png
index 08b179f400..1e316df8ea 100644
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-idt.spec.ts-snapshots/Import-Saving-idt-Files-Check-IDT-aliases-wh-330f7-eotides-monomer-AmMC6T-Amino-Modifier-C6-dT-1-chromium-linux.png and b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-idt.spec.ts-snapshots/Import-Saving-idt-Files-Check-IDT-aliases-wh-330f7-eotides-monomer-AmMC6T-Amino-Modifier-C6-dT-1-chromium-linux.png differ
diff --git "a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-idt.spec.ts-snapshots/Import-Saving-idt-Files-Check-IDT-aliases-wh-402dd-mer-Super-T-5-hydroxybutynl-2\342\200\231-deoxyuridine-1-chromium-linux.png" "b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-idt.spec.ts-snapshots/Import-Saving-idt-Files-Check-IDT-aliases-wh-402dd-mer-Super-T-5-hydroxybutynl-2\342\200\231-deoxyuridine-1-chromium-linux.png"
new file mode 100644
index 0000000000..8be64707b5
Binary files /dev/null and "b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-idt.spec.ts-snapshots/Import-Saving-idt-Files-Check-IDT-aliases-wh-402dd-mer-Super-T-5-hydroxybutynl-2\342\200\231-deoxyuridine-1-chromium-linux.png" differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-idt.spec.ts-snapshots/Import-Saving-idt-Files-Check-IDT-aliases-wh-507a2-cleotides-monomer-2-damdA-2-6-Diaminopurine-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-idt.spec.ts-snapshots/Import-Saving-idt-Files-Check-IDT-aliases-wh-507a2-cleotides-monomer-2-damdA-2-6-Diaminopurine-1-chromium-linux.png
index 27042a40f9..83c9e46e02 100644
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-idt.spec.ts-snapshots/Import-Saving-idt-Files-Check-IDT-aliases-wh-507a2-cleotides-monomer-2-damdA-2-6-Diaminopurine-1-chromium-linux.png and b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-idt.spec.ts-snapshots/Import-Saving-idt-Files-Check-IDT-aliases-wh-507a2-cleotides-monomer-2-damdA-2-6-Diaminopurine-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-idt.spec.ts-snapshots/Import-Saving-idt-Files-Check-IDT-aliases-wh-6c3db-ides-monomer-Super-G-8-aza-7-deazaguanosine-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-idt.spec.ts-snapshots/Import-Saving-idt-Files-Check-IDT-aliases-wh-6c3db-ides-monomer-Super-G-8-aza-7-deazaguanosine-1-chromium-linux.png
new file mode 100644
index 0000000000..85e9e05545
Binary files /dev/null and b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-idt.spec.ts-snapshots/Import-Saving-idt-Files-Check-IDT-aliases-wh-6c3db-ides-monomer-Super-G-8-aza-7-deazaguanosine-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-ket.spec.ts-snapshots/Verify-that-the-structure-in-macro-mode-can-be-92345-d-atoms-are-correctly-restored-when-re-loaded-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-ket.spec.ts-snapshots/Verify-that-the-structure-in-macro-mode-can-be-92345-d-atoms-are-correctly-restored-when-re-loaded-1-chromium-linux.png
index da0ab3758c..77d0d7733e 100644
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-ket.spec.ts-snapshots/Verify-that-the-structure-in-macro-mode-can-be-92345-d-atoms-are-correctly-restored-when-re-loaded-1-chromium-linux.png and b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-ket.spec.ts-snapshots/Verify-that-the-structure-in-macro-mode-can-be-92345-d-atoms-are-correctly-restored-when-re-loaded-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-ket.spec.ts-snapshots/Verify-that-the-structure-in-macro-mode-can-be-dede2-d-atoms-are-correctly-restored-when-re-loaded-2-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-ket.spec.ts-snapshots/Verify-that-the-structure-in-macro-mode-can-be-dede2-d-atoms-are-correctly-restored-when-re-loaded-2-chromium-linux.png
index da0ab3758c..77d0d7733e 100644
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-ket.spec.ts-snapshots/Verify-that-the-structure-in-macro-mode-can-be-dede2-d-atoms-are-correctly-restored-when-re-loaded-2-chromium-linux.png and b/ketcher-autotests/tests/Macromolecule-editor/Import-Saving-Files/import-saving-ket.spec.ts-snapshots/Verify-that-the-structure-in-macro-mode-can-be-dede2-d-atoms-are-correctly-restored-when-re-loaded-2-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Macro-Micro-Switcher/macro-micro-switcher.spec.ts-snapshots/Macro-Micro-Switcher-Check-that-the-Ket-struct-3dd89-e-file-in-Macro-mode-is-visible-in-Micro-mode-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Macro-Micro-Switcher/macro-micro-switcher.spec.ts-snapshots/Macro-Micro-Switcher-Check-that-the-Ket-struct-3dd89-e-file-in-Macro-mode-is-visible-in-Micro-mode-1-chromium-linux.png
index e697379dda..0427faa423 100644
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Macro-Micro-Switcher/macro-micro-switcher.spec.ts-snapshots/Macro-Micro-Switcher-Check-that-the-Ket-struct-3dd89-e-file-in-Macro-mode-is-visible-in-Micro-mode-1-chromium-linux.png and b/ketcher-autotests/tests/Macromolecule-editor/Macro-Micro-Switcher/macro-micro-switcher.spec.ts-snapshots/Macro-Micro-Switcher-Check-that-the-Ket-struct-3dd89-e-file-in-Macro-mode-is-visible-in-Micro-mode-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Macro-Micro-Switcher/macro-micro-switcher.spec.ts-snapshots/Macro-Micro-Switcher-Check-that-the-Mol-struct-10443-e-file-in-Macro-mode-is-visible-on-Micro-mode-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Macro-Micro-Switcher/macro-micro-switcher.spec.ts-snapshots/Macro-Micro-Switcher-Check-that-the-Mol-struct-10443-e-file-in-Macro-mode-is-visible-on-Micro-mode-1-chromium-linux.png
index efa72364c3..567f548058 100755
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Macro-Micro-Switcher/macro-micro-switcher.spec.ts-snapshots/Macro-Micro-Switcher-Check-that-the-Mol-struct-10443-e-file-in-Macro-mode-is-visible-on-Micro-mode-1-chromium-linux.png and b/ketcher-autotests/tests/Macromolecule-editor/Macro-Micro-Switcher/macro-micro-switcher.spec.ts-snapshots/Macro-Micro-Switcher-Check-that-the-Mol-struct-10443-e-file-in-Macro-mode-is-visible-on-Micro-mode-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Macro-Micro-Switcher/macro-micro-switcher2.spec.ts-snapshots/Macro-Micro-Switcher2-Check-that-switching-bet-407ef-A-with-modified-monomer-with-modyfied-monomer-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Macro-Micro-Switcher/macro-micro-switcher2.spec.ts-snapshots/Macro-Micro-Switcher2-Check-that-switching-bet-407ef-A-with-modified-monomer-with-modyfied-monomer-1-chromium-linux.png
index f9e1bffe14..5ae37cf8d9 100644
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Macro-Micro-Switcher/macro-micro-switcher2.spec.ts-snapshots/Macro-Micro-Switcher2-Check-that-switching-bet-407ef-A-with-modified-monomer-with-modyfied-monomer-1-chromium-linux.png and b/ketcher-autotests/tests/Macromolecule-editor/Macro-Micro-Switcher/macro-micro-switcher2.spec.ts-snapshots/Macro-Micro-Switcher2-Check-that-switching-bet-407ef-A-with-modified-monomer-with-modyfied-monomer-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Macro-Micro-Switcher/macro-micro-switcher4.spec.ts-snapshots/Verify-that-switching-between-micro-and-macro-modes-displays-molecules-without-structural-changes-2-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Macro-Micro-Switcher/macro-micro-switcher4.spec.ts-snapshots/Verify-that-switching-between-micro-and-macro-modes-displays-molecules-without-structural-changes-2-chromium-linux.png
index 22f2139806..48e4f89d54 100644
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Macro-Micro-Switcher/macro-micro-switcher4.spec.ts-snapshots/Verify-that-switching-between-micro-and-macro-modes-displays-molecules-without-structural-changes-2-chromium-linux.png and b/ketcher-autotests/tests/Macromolecule-editor/Macro-Micro-Switcher/macro-micro-switcher4.spec.ts-snapshots/Verify-that-switching-between-micro-and-macro-modes-displays-molecules-without-structural-changes-2-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Polymer-Bond-Tool/connection-rules-for-molecules-with-monomers.spec.ts-snapshots/Connection-rules-for-molecules-with-monomers--aff91-lish-connection-between-monomers-and-molecule-3-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Polymer-Bond-Tool/connection-rules-for-molecules-with-monomers.spec.ts-snapshots/Connection-rules-for-molecules-with-monomers--aff91-lish-connection-between-monomers-and-molecule-3-chromium-linux.png
index be0436315c..9cb24e2885 100644
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Polymer-Bond-Tool/connection-rules-for-molecules-with-monomers.spec.ts-snapshots/Connection-rules-for-molecules-with-monomers--aff91-lish-connection-between-monomers-and-molecule-3-chromium-linux.png and b/ketcher-autotests/tests/Macromolecule-editor/Polymer-Bond-Tool/connection-rules-for-molecules-with-monomers.spec.ts-snapshots/Connection-rules-for-molecules-with-monomers--aff91-lish-connection-between-monomers-and-molecule-3-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/RNA-Builder/rna-library.spec.ts b/ketcher-autotests/tests/Macromolecule-editor/RNA-Builder/rna-library.spec.ts
index 4d6c60c963..e4db86dbd0 100644
--- a/ketcher-autotests/tests/Macromolecule-editor/RNA-Builder/rna-library.spec.ts
+++ b/ketcher-autotests/tests/Macromolecule-editor/RNA-Builder/rna-library.spec.ts
@@ -1054,9 +1054,9 @@ test.describe('RNA Library', () => {
const rnaNucleotides = [
`2-damdA___2,6-Diaminopurine`,
`5hMedC___Hydroxymethyl dC`,
- `Super G___8-aza-7-deazaguanosine`,
+ `Super-G___8-aza-7-deazaguanosine`,
`AmMC6T___Amino Modifier C6 dT`,
- `Super T___5-hydroxybutynl-2’-deoxyuridine`,
+ `Super-T___5-hydroxybutynl-2’-deoxyuridine`,
`5Br-dU___5-Bromo-deoxyuridine`,
`5NitInd___5-Nitroindole`,
];
@@ -1149,9 +1149,9 @@ test.describe('RNA Library', () => {
const rnaNucleotides1 = [
`2-damdA___2,6-Diaminopurine`,
`5hMedC___Hydroxymethyl dC`,
- `Super G___8-aza-7-deazaguanosine`,
+ `Super-G___8-aza-7-deazaguanosine`,
`AmMC6T___Amino Modifier C6 dT`,
- `Super T___5-hydroxybutynl-2’-deoxyuridine`,
+ `Super-T___5-hydroxybutynl-2’-deoxyuridine`,
`5Br-dU___5-Bromo-deoxyuridine`,
`5NitInd___5-Nitroindole`,
];
@@ -1179,9 +1179,9 @@ test.describe('RNA Library', () => {
const rnaNucleotides2 = [
`2-damdA___2,6-Diaminopurine`,
`5hMedC___Hydroxymethyl dC`,
- `Super G___8-aza-7-deazaguanosine`,
+ `Super-G___8-aza-7-deazaguanosine`,
`AmMC6T___Amino Modifier C6 dT`,
- `Super T___5-hydroxybutynl-2’-deoxyuridine`,
+ `Super-T___5-hydroxybutynl-2’-deoxyuridine`,
`5Br-dU___5-Bromo-deoxyuridine`,
`5NitInd___5-Nitroindole`,
];
diff --git a/ketcher-autotests/tests/Macromolecule-editor/RNA-Builder/rna-library.spec.ts-snapshots/RNA-Library-Search-by-IDT-alias-3-Verify-search-with-a-single-symbol-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/RNA-Builder/rna-library.spec.ts-snapshots/RNA-Library-Search-by-IDT-alias-3-Verify-search-with-a-single-symbol-1-chromium-linux.png
index 7b941e0d31..054edf68a6 100644
Binary files a/ketcher-autotests/tests/Macromolecule-editor/RNA-Builder/rna-library.spec.ts-snapshots/RNA-Library-Search-by-IDT-alias-3-Verify-search-with-a-single-symbol-1-chromium-linux.png and b/ketcher-autotests/tests/Macromolecule-editor/RNA-Builder/rna-library.spec.ts-snapshots/RNA-Library-Search-by-IDT-alias-3-Verify-search-with-a-single-symbol-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/RNA-Builder/rna-library.spec.ts-snapshots/RNA-Library-Search-by-IDT-alias-7-Verify-se-63e8b-nomers-with-the-same-starting-symbol-Super-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/RNA-Builder/rna-library.spec.ts-snapshots/RNA-Library-Search-by-IDT-alias-7-Verify-se-63e8b-nomers-with-the-same-starting-symbol-Super-1-chromium-linux.png
index 98ebf6650b..49f09dcbdd 100644
Binary files a/ketcher-autotests/tests/Macromolecule-editor/RNA-Builder/rna-library.spec.ts-snapshots/RNA-Library-Search-by-IDT-alias-7-Verify-se-63e8b-nomers-with-the-same-starting-symbol-Super-1-chromium-linux.png and b/ketcher-autotests/tests/Macromolecule-editor/RNA-Builder/rna-library.spec.ts-snapshots/RNA-Library-Search-by-IDT-alias-7-Verify-se-63e8b-nomers-with-the-same-starting-symbol-Super-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/RNA-Builder/rna-library.spec.ts-snapshots/RNA-Library-Validate-that-Undo-redo-tool-works-0f322-t-nucleotide-Super-G-8-aza-7-deazaguanosine-2-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/RNA-Builder/rna-library.spec.ts-snapshots/RNA-Library-Validate-that-Undo-redo-tool-works-0f322-t-nucleotide-Super-G-8-aza-7-deazaguanosine-2-chromium-linux.png
new file mode 100644
index 0000000000..9ba98cd80a
Binary files /dev/null and b/ketcher-autotests/tests/Macromolecule-editor/RNA-Builder/rna-library.spec.ts-snapshots/RNA-Library-Validate-that-Undo-redo-tool-works-0f322-t-nucleotide-Super-G-8-aza-7-deazaguanosine-2-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/RNA-Builder/rna-library.spec.ts-snapshots/RNA-Library-Validate-that-Undo-redo-tool-works-39833-t-nucleotide-Super-G-8-aza-7-deazaguanosine-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/RNA-Builder/rna-library.spec.ts-snapshots/RNA-Library-Validate-that-Undo-redo-tool-works-39833-t-nucleotide-Super-G-8-aza-7-deazaguanosine-1-chromium-linux.png
new file mode 100644
index 0000000000..2405ef8c7d
Binary files /dev/null and b/ketcher-autotests/tests/Macromolecule-editor/RNA-Builder/rna-library.spec.ts-snapshots/RNA-Library-Validate-that-Undo-redo-tool-works-39833-t-nucleotide-Super-G-8-aza-7-deazaguanosine-1-chromium-linux.png differ
diff --git "a/ketcher-autotests/tests/Macromolecule-editor/RNA-Builder/rna-library.spec.ts-snapshots/RNA-Library-Validate-that-Undo-redo-tool-works-82bfe-ide-Super-T-5-hydroxybutynl-2\342\200\231-deoxyuridine-2-chromium-linux.png" "b/ketcher-autotests/tests/Macromolecule-editor/RNA-Builder/rna-library.spec.ts-snapshots/RNA-Library-Validate-that-Undo-redo-tool-works-82bfe-ide-Super-T-5-hydroxybutynl-2\342\200\231-deoxyuridine-2-chromium-linux.png"
new file mode 100644
index 0000000000..1623697fc8
Binary files /dev/null and "b/ketcher-autotests/tests/Macromolecule-editor/RNA-Builder/rna-library.spec.ts-snapshots/RNA-Library-Validate-that-Undo-redo-tool-works-82bfe-ide-Super-T-5-hydroxybutynl-2\342\200\231-deoxyuridine-2-chromium-linux.png" differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/RNA-Builder/rna-library.spec.ts-snapshots/RNA-Library-Validate-that-Undo-redo-tool-works-a1f97-t-nucleotide-Super-G-8-aza-7-deazaguanosine-3-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/RNA-Builder/rna-library.spec.ts-snapshots/RNA-Library-Validate-that-Undo-redo-tool-works-a1f97-t-nucleotide-Super-G-8-aza-7-deazaguanosine-3-chromium-linux.png
new file mode 100644
index 0000000000..73c13f1329
Binary files /dev/null and b/ketcher-autotests/tests/Macromolecule-editor/RNA-Builder/rna-library.spec.ts-snapshots/RNA-Library-Validate-that-Undo-redo-tool-works-a1f97-t-nucleotide-Super-G-8-aza-7-deazaguanosine-3-chromium-linux.png differ
diff --git "a/ketcher-autotests/tests/Macromolecule-editor/RNA-Builder/rna-library.spec.ts-snapshots/RNA-Library-Validate-that-Undo-redo-tool-works-a32de-ide-Super-T-5-hydroxybutynl-2\342\200\231-deoxyuridine-4-chromium-linux.png" "b/ketcher-autotests/tests/Macromolecule-editor/RNA-Builder/rna-library.spec.ts-snapshots/RNA-Library-Validate-that-Undo-redo-tool-works-a32de-ide-Super-T-5-hydroxybutynl-2\342\200\231-deoxyuridine-4-chromium-linux.png"
new file mode 100644
index 0000000000..1a22186984
Binary files /dev/null and "b/ketcher-autotests/tests/Macromolecule-editor/RNA-Builder/rna-library.spec.ts-snapshots/RNA-Library-Validate-that-Undo-redo-tool-works-a32de-ide-Super-T-5-hydroxybutynl-2\342\200\231-deoxyuridine-4-chromium-linux.png" differ
diff --git "a/ketcher-autotests/tests/Macromolecule-editor/RNA-Builder/rna-library.spec.ts-snapshots/RNA-Library-Validate-that-Undo-redo-tool-works-b7380-ide-Super-T-5-hydroxybutynl-2\342\200\231-deoxyuridine-3-chromium-linux.png" "b/ketcher-autotests/tests/Macromolecule-editor/RNA-Builder/rna-library.spec.ts-snapshots/RNA-Library-Validate-that-Undo-redo-tool-works-b7380-ide-Super-T-5-hydroxybutynl-2\342\200\231-deoxyuridine-3-chromium-linux.png"
new file mode 100644
index 0000000000..73c13f1329
Binary files /dev/null and "b/ketcher-autotests/tests/Macromolecule-editor/RNA-Builder/rna-library.spec.ts-snapshots/RNA-Library-Validate-that-Undo-redo-tool-works-b7380-ide-Super-T-5-hydroxybutynl-2\342\200\231-deoxyuridine-3-chromium-linux.png" differ
diff --git "a/ketcher-autotests/tests/Macromolecule-editor/RNA-Builder/rna-library.spec.ts-snapshots/RNA-Library-Validate-that-Undo-redo-tool-works-bab57-ide-Super-T-5-hydroxybutynl-2\342\200\231-deoxyuridine-1-chromium-linux.png" "b/ketcher-autotests/tests/Macromolecule-editor/RNA-Builder/rna-library.spec.ts-snapshots/RNA-Library-Validate-that-Undo-redo-tool-works-bab57-ide-Super-T-5-hydroxybutynl-2\342\200\231-deoxyuridine-1-chromium-linux.png"
new file mode 100644
index 0000000000..a3e9de4090
Binary files /dev/null and "b/ketcher-autotests/tests/Macromolecule-editor/RNA-Builder/rna-library.spec.ts-snapshots/RNA-Library-Validate-that-Undo-redo-tool-works-bab57-ide-Super-T-5-hydroxybutynl-2\342\200\231-deoxyuridine-1-chromium-linux.png" differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/RNA-Builder/rna-library.spec.ts-snapshots/RNA-Library-Validate-that-Undo-redo-tool-works-db45a-t-nucleotide-Super-G-8-aza-7-deazaguanosine-4-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/RNA-Builder/rna-library.spec.ts-snapshots/RNA-Library-Validate-that-Undo-redo-tool-works-db45a-t-nucleotide-Super-G-8-aza-7-deazaguanosine-4-chromium-linux.png
new file mode 100644
index 0000000000..824063dab9
Binary files /dev/null and b/ketcher-autotests/tests/Macromolecule-editor/RNA-Builder/rna-library.spec.ts-snapshots/RNA-Library-Validate-that-Undo-redo-tool-works-db45a-t-nucleotide-Super-G-8-aza-7-deazaguanosine-4-chromium-linux.png differ
diff --git "a/ketcher-autotests/tests/Macromolecule-editor/RNA-Builder/rna-library.spec.ts-snapshots/RNA-Library-Validate-that-preview-tooltip-is-s-3b823-ide-Super-T-5-hydroxybutynl-2\342\200\231-deoxyuridine-1-chromium-linux.png" "b/ketcher-autotests/tests/Macromolecule-editor/RNA-Builder/rna-library.spec.ts-snapshots/RNA-Library-Validate-that-preview-tooltip-is-s-3b823-ide-Super-T-5-hydroxybutynl-2\342\200\231-deoxyuridine-1-chromium-linux.png"
new file mode 100644
index 0000000000..6186665bc4
Binary files /dev/null and "b/ketcher-autotests/tests/Macromolecule-editor/RNA-Builder/rna-library.spec.ts-snapshots/RNA-Library-Validate-that-preview-tooltip-is-s-3b823-ide-Super-T-5-hydroxybutynl-2\342\200\231-deoxyuridine-1-chromium-linux.png" differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/RNA-Builder/rna-library.spec.ts-snapshots/RNA-Library-Validate-that-preview-tooltip-is-s-c486e-t-nucleotide-Super-G-8-aza-7-deazaguanosine-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/RNA-Builder/rna-library.spec.ts-snapshots/RNA-Library-Validate-that-preview-tooltip-is-s-c486e-t-nucleotide-Super-G-8-aza-7-deazaguanosine-1-chromium-linux.png
new file mode 100644
index 0000000000..d8a83815b9
Binary files /dev/null and b/ketcher-autotests/tests/Macromolecule-editor/RNA-Builder/rna-library.spec.ts-snapshots/RNA-Library-Validate-that-preview-tooltip-is-s-c486e-t-nucleotide-Super-G-8-aza-7-deazaguanosine-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/RNA-Builder/rna-library.spec.ts-snapshots/RNA-Library-Validate-that-you-can-put-unsplit--022b2-rom-library-select-it-and-move-it-delete-it-2-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/RNA-Builder/rna-library.spec.ts-snapshots/RNA-Library-Validate-that-you-can-put-unsplit--022b2-rom-library-select-it-and-move-it-delete-it-2-chromium-linux.png
new file mode 100644
index 0000000000..a3e9de4090
Binary files /dev/null and b/ketcher-autotests/tests/Macromolecule-editor/RNA-Builder/rna-library.spec.ts-snapshots/RNA-Library-Validate-that-you-can-put-unsplit--022b2-rom-library-select-it-and-move-it-delete-it-2-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/RNA-Builder/rna-library.spec.ts-snapshots/RNA-Library-Validate-that-you-can-put-unsplit--061f6-rom-library-select-it-and-move-it-delete-it-3-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/RNA-Builder/rna-library.spec.ts-snapshots/RNA-Library-Validate-that-you-can-put-unsplit--061f6-rom-library-select-it-and-move-it-delete-it-3-chromium-linux.png
new file mode 100644
index 0000000000..73c13f1329
Binary files /dev/null and b/ketcher-autotests/tests/Macromolecule-editor/RNA-Builder/rna-library.spec.ts-snapshots/RNA-Library-Validate-that-you-can-put-unsplit--061f6-rom-library-select-it-and-move-it-delete-it-3-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/RNA-Builder/rna-library.spec.ts-snapshots/RNA-Library-Validate-that-you-can-put-unsplit--88649-rom-library-select-it-and-move-it-delete-it-3-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/RNA-Builder/rna-library.spec.ts-snapshots/RNA-Library-Validate-that-you-can-put-unsplit--88649-rom-library-select-it-and-move-it-delete-it-3-chromium-linux.png
new file mode 100644
index 0000000000..73c13f1329
Binary files /dev/null and b/ketcher-autotests/tests/Macromolecule-editor/RNA-Builder/rna-library.spec.ts-snapshots/RNA-Library-Validate-that-you-can-put-unsplit--88649-rom-library-select-it-and-move-it-delete-it-3-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/RNA-Builder/rna-library.spec.ts-snapshots/RNA-Library-Validate-that-you-can-put-unsplit--9585c-rom-library-select-it-and-move-it-delete-it-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/RNA-Builder/rna-library.spec.ts-snapshots/RNA-Library-Validate-that-you-can-put-unsplit--9585c-rom-library-select-it-and-move-it-delete-it-1-chromium-linux.png
new file mode 100644
index 0000000000..d8a83815b9
Binary files /dev/null and b/ketcher-autotests/tests/Macromolecule-editor/RNA-Builder/rna-library.spec.ts-snapshots/RNA-Library-Validate-that-you-can-put-unsplit--9585c-rom-library-select-it-and-move-it-delete-it-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/RNA-Builder/rna-library.spec.ts-snapshots/RNA-Library-Validate-that-you-can-put-unsplit--bfcda-rom-library-select-it-and-move-it-delete-it-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/RNA-Builder/rna-library.spec.ts-snapshots/RNA-Library-Validate-that-you-can-put-unsplit--bfcda-rom-library-select-it-and-move-it-delete-it-1-chromium-linux.png
new file mode 100644
index 0000000000..6186665bc4
Binary files /dev/null and b/ketcher-autotests/tests/Macromolecule-editor/RNA-Builder/rna-library.spec.ts-snapshots/RNA-Library-Validate-that-you-can-put-unsplit--bfcda-rom-library-select-it-and-move-it-delete-it-1-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/RNA-Builder/rna-library.spec.ts-snapshots/RNA-Library-Validate-that-you-can-put-unsplit--e2caf-rom-library-select-it-and-move-it-delete-it-2-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/RNA-Builder/rna-library.spec.ts-snapshots/RNA-Library-Validate-that-you-can-put-unsplit--e2caf-rom-library-select-it-and-move-it-delete-it-2-chromium-linux.png
new file mode 100644
index 0000000000..2405ef8c7d
Binary files /dev/null and b/ketcher-autotests/tests/Macromolecule-editor/RNA-Builder/rna-library.spec.ts-snapshots/RNA-Library-Validate-that-you-can-put-unsplit--e2caf-rom-library-select-it-and-move-it-delete-it-2-chromium-linux.png differ
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Sequence-Mode/sequence-mode-edit.spec.ts b/ketcher-autotests/tests/Macromolecule-editor/Sequence-Mode/sequence-mode-edit.spec.ts
index d76bb3c584..88bfd9b839 100644
--- a/ketcher-autotests/tests/Macromolecule-editor/Sequence-Mode/sequence-mode-edit.spec.ts
+++ b/ketcher-autotests/tests/Macromolecule-editor/Sequence-Mode/sequence-mode-edit.spec.ts
@@ -404,7 +404,7 @@ test.describe('Sequence edit mode', () => {
*/
await page.getByTestId('RNA-TAB').click();
await toggleNucleotidesAccordion(page);
- await page.getByTestId('Super T___5-hydroxybutynl-2’-deoxyuridine').click();
+ await page.getByTestId('Super-T___5-hydroxybutynl-2’-deoxyuridine').click();
await takePageScreenshot(page);
});
diff --git a/ketcher-autotests/tests/Macromolecule-editor/Sequence-Mode/sequence-mode-edit.spec.ts-snapshots/Sequence-edit-mode-Validate-that-preview-tooltip-for-Nucleotide-type-of-monomer-in-the-library-1-chromium-linux.png b/ketcher-autotests/tests/Macromolecule-editor/Sequence-Mode/sequence-mode-edit.spec.ts-snapshots/Sequence-edit-mode-Validate-that-preview-tooltip-for-Nucleotide-type-of-monomer-in-the-library-1-chromium-linux.png
index fac6c9f780..a0556e0d9e 100644
Binary files a/ketcher-autotests/tests/Macromolecule-editor/Sequence-Mode/sequence-mode-edit.spec.ts-snapshots/Sequence-edit-mode-Validate-that-preview-tooltip-for-Nucleotide-type-of-monomer-in-the-library-1-chromium-linux.png and b/ketcher-autotests/tests/Macromolecule-editor/Sequence-Mode/sequence-mode-edit.spec.ts-snapshots/Sequence-edit-mode-Validate-that-preview-tooltip-for-Nucleotide-type-of-monomer-in-the-library-1-chromium-linux.png differ
diff --git a/package-lock.json b/package-lock.json
index d1b86aab59..19c58f2913 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -14,7 +14,6 @@
"ketcher-autotests",
"example",
"example-ssr",
- "example-separate-editors",
"demo"
],
"dependencies": {
@@ -36,11 +35,13 @@
"husky": "^8.0.3",
"lint-staged": "^12.1.2",
"npm-run-all": "^4.1.5",
+ "postcss": "^8.5.1",
+ "postcss-less": "^6.0.0",
"prettier": "2.8.0",
"prettier-config-standard": "^5.0.0",
- "stylelint": "^13.13.1",
- "stylelint-config-prettier": "^9.0.3",
- "stylelint-config-standard": "22.0.0"
+ "stylelint": "^14.16.1",
+ "stylelint-config-prettier": "^9.0.5",
+ "stylelint-config-standard": "^23.0.0"
},
"engines": {
"node": ">=16.0.0",
@@ -52,7 +53,7 @@
"version": "0.1.0",
"dependencies": {
"@testing-library/jest-dom": "^5.16.2",
- "@testing-library/react": "^12.1.3",
+ "@testing-library/react": "^15.0.7",
"@testing-library/user-event": "^13.5.0",
"@types/jest": "^27.4.1",
"@types/node": "^16.11.26",
@@ -72,20 +73,22 @@
}
},
"demo/node_modules/@testing-library/dom": {
- "version": "8.20.1",
+ "version": "10.4.0",
+ "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.0.tgz",
+ "integrity": "sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==",
"license": "MIT",
"dependencies": {
"@babel/code-frame": "^7.10.4",
"@babel/runtime": "^7.12.5",
"@types/aria-query": "^5.0.1",
- "aria-query": "5.1.3",
+ "aria-query": "5.3.0",
"chalk": "^4.1.0",
"dom-accessibility-api": "^0.5.9",
"lz-string": "^1.5.0",
"pretty-format": "^27.0.2"
},
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"demo/node_modules/@testing-library/dom/node_modules/ansi-styles": {
@@ -160,35 +163,27 @@
}
},
"demo/node_modules/@testing-library/react": {
- "version": "12.1.5",
+ "version": "15.0.7",
+ "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-15.0.7.tgz",
+ "integrity": "sha512-cg0RvEdD1TIhhkm1IeYMQxrzy0MtUNfa3minv4MjbgcYzJAZ7yD0i0lwoPOTPr+INtiXFezt2o8xMSnyHhEn2Q==",
"license": "MIT",
"dependencies": {
"@babel/runtime": "^7.12.5",
- "@testing-library/dom": "^8.0.0",
- "@types/react-dom": "<18.0.0"
+ "@testing-library/dom": "^10.0.0",
+ "@types/react-dom": "^18.0.0"
},
"engines": {
- "node": ">=12"
+ "node": ">=18"
},
"peerDependencies": {
- "react": "<18.0.0",
- "react-dom": "<18.0.0"
- }
- },
- "demo/node_modules/@testing-library/react/node_modules/@types/react": {
- "version": "17.0.75",
- "license": "MIT",
- "dependencies": {
- "@types/prop-types": "*",
- "@types/scheduler": "*",
- "csstype": "^3.0.2"
- }
- },
- "demo/node_modules/@testing-library/react/node_modules/@types/react-dom": {
- "version": "17.0.25",
- "license": "MIT",
- "dependencies": {
- "@types/react": "^17"
+ "@types/react": "^18.0.0",
+ "react": "^18.0.0",
+ "react-dom": "^18.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
}
},
"demo/node_modules/@testing-library/user-event": {
@@ -252,6 +247,15 @@
"dev": true,
"license": "MIT"
},
+ "demo/node_modules/aria-query": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz",
+ "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "dequal": "^2.0.3"
+ }
+ },
"demo/node_modules/boxen": {
"version": "7.0.0",
"dev": true,
@@ -559,6 +563,7 @@
"ketcher-macromolecules": "*",
"ketcher-react": "*",
"ketcher-standalone": "*",
+ "mui": "^0.0.1",
"normalize.css": "^8.0.1",
"react": "^18.2.0",
"react-app-polyfill": "^2.0.0",
@@ -585,12 +590,12 @@
"prettier": "^2.5.1",
"react-app-rewired": "^2.2.1",
"react-scripts": "^5.0.1",
- "serve": "^13.0.2",
+ "serve": "^14.2.4",
"shx": "^0.3.3",
"source-map-loader": "^3.0.1",
- "stylelint": "13.13.1",
"typescript": "^4.5.2",
"vite": "^4.5.5",
+ "vite-plugin-commonjs": "^0.10.4",
"vite-plugin-html": "^3.2.0",
"vite-plugin-raw": "^1.0.3",
"vite-plugin-svgr": "^2.4.0",
@@ -599,6 +604,7 @@
},
"example-separate-editors": {
"version": "1.0.0",
+ "extraneous": true,
"dependencies": {
"ketcher-core": "*",
"ketcher-macromolecules": "*",
@@ -685,6 +691,386 @@
"node": ">=14.17"
}
},
+ "example/node_modules/@zeit/schemas": {
+ "version": "2.36.0",
+ "resolved": "https://registry.npmjs.org/@zeit/schemas/-/schemas-2.36.0.tgz",
+ "integrity": "sha512-7kjMwcChYEzMKjeex9ZFXkt1AyNov9R5HZtjBKVsmVpw7pa7ZtlCGvCBC2vnnXctaYN+aRI61HjIqeetZW5ROg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "example/node_modules/ansi-regex": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
+ "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+ }
+ },
+ "example/node_modules/ansi-styles": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
+ "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "example/node_modules/arg": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz",
+ "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "example/node_modules/boxen": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/boxen/-/boxen-7.0.0.tgz",
+ "integrity": "sha512-j//dBVuyacJbvW+tvZ9HuH03fZ46QcaKvvhZickZqtB271DxJ7SNRSNxrV/dZX0085m7hISRZWbzWlJvx/rHSg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-align": "^3.0.1",
+ "camelcase": "^7.0.0",
+ "chalk": "^5.0.1",
+ "cli-boxes": "^3.0.0",
+ "string-width": "^5.1.2",
+ "type-fest": "^2.13.0",
+ "widest-line": "^4.0.1",
+ "wrap-ansi": "^8.0.1"
+ },
+ "engines": {
+ "node": ">=14.16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "example/node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "example/node_modules/camelcase": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-7.0.1.tgz",
+ "integrity": "sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=14.16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "example/node_modules/chalk": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.0.1.tgz",
+ "integrity": "sha512-Fo07WOYGqMfCWHOzSXOt2CxDbC6skS/jO9ynEcmpANMoPrD+W1r1K6Vx7iNm+AQmETU1Xr2t+n8nzkV9t6xh3w==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^12.17.0 || ^14.13 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "example/node_modules/cli-boxes": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz",
+ "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "example/node_modules/clipboardy": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-3.0.0.tgz",
+ "integrity": "sha512-Su+uU5sr1jkUy1sGRpLKjKrvEOVXgSgiSInwa/qeID6aJ07yh+5NWc3h2QfjHjBnfX4LhtFcuAWKUsJ3r+fjbg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "arch": "^2.2.0",
+ "execa": "^5.1.1",
+ "is-wsl": "^2.2.0"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "example/node_modules/compression": {
+ "version": "1.7.4",
+ "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz",
+ "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "accepts": "~1.3.5",
+ "bytes": "3.0.0",
+ "compressible": "~2.0.16",
+ "debug": "2.6.9",
+ "on-headers": "~1.0.2",
+ "safe-buffer": "5.1.2",
+ "vary": "~1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "example/node_modules/debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ms": "2.0.0"
+ }
+ },
+ "example/node_modules/execa": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
+ "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "cross-spawn": "^7.0.3",
+ "get-stream": "^6.0.0",
+ "human-signals": "^2.1.0",
+ "is-stream": "^2.0.0",
+ "merge-stream": "^2.0.0",
+ "npm-run-path": "^4.0.1",
+ "onetime": "^5.1.2",
+ "signal-exit": "^3.0.3",
+ "strip-final-newline": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sindresorhus/execa?sponsor=1"
+ }
+ },
+ "example/node_modules/get-stream": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
+ "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "example/node_modules/human-signals": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
+ "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=10.17.0"
+ }
+ },
+ "example/node_modules/mime-db": {
+ "version": "1.33.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz",
+ "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "example/node_modules/mime-types": {
+ "version": "2.1.18",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz",
+ "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "mime-db": "~1.33.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "example/node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "example/node_modules/ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "example/node_modules/path-to-regexp": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-3.3.0.tgz",
+ "integrity": "sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "example/node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "example/node_modules/serve": {
+ "version": "14.2.4",
+ "resolved": "https://registry.npmjs.org/serve/-/serve-14.2.4.tgz",
+ "integrity": "sha512-qy1S34PJ/fcY8gjVGszDB3EXiPSk5FKhUa7tQe0UPRddxRidc2V6cNHPNewbE1D7MAkgLuWEt3Vw56vYy73tzQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@zeit/schemas": "2.36.0",
+ "ajv": "8.12.0",
+ "arg": "5.0.2",
+ "boxen": "7.0.0",
+ "chalk": "5.0.1",
+ "chalk-template": "0.4.0",
+ "clipboardy": "3.0.0",
+ "compression": "1.7.4",
+ "is-port-reachable": "4.0.0",
+ "serve-handler": "6.1.6",
+ "update-check": "1.5.4"
+ },
+ "bin": {
+ "serve": "build/main.js"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "example/node_modules/serve-handler": {
+ "version": "6.1.6",
+ "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.6.tgz",
+ "integrity": "sha512-x5RL9Y2p5+Sh3D38Fh9i/iQ5ZK+e4xuXRd/pGbM4D13tgo/MGwbttUk8emytcr1YYzBYs+apnUngBDFYfpjPuQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "bytes": "3.0.0",
+ "content-disposition": "0.5.2",
+ "mime-types": "2.1.18",
+ "minimatch": "3.1.2",
+ "path-is-inside": "1.0.2",
+ "path-to-regexp": "3.3.0",
+ "range-parser": "1.2.0"
+ }
+ },
+ "example/node_modules/strip-ansi": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
+ "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/strip-ansi?sponsor=1"
+ }
+ },
+ "example/node_modules/type-fest": {
+ "version": "2.19.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz",
+ "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==",
+ "dev": true,
+ "license": "(MIT OR CC0-1.0)",
+ "engines": {
+ "node": ">=12.20"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "example/node_modules/update-check": {
+ "version": "1.5.4",
+ "resolved": "https://registry.npmjs.org/update-check/-/update-check-1.5.4.tgz",
+ "integrity": "sha512-5YHsflzHP4t1G+8WGPlvKbJEbAJGCgw+Em+dGR1KmBUbr1J36SJBqlHLjR7oob7sco5hWHGQVcr9B2poIVDDTQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "registry-auth-token": "3.3.2",
+ "registry-url": "3.1.0"
+ }
+ },
+ "example/node_modules/widest-line": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz",
+ "integrity": "sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "string-width": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "example/node_modules/wrap-ansi": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
+ "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^6.1.0",
+ "string-width": "^5.0.1",
+ "strip-ansi": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
"ketcher-autotests": {
"name": "playwright-testing",
"version": "1.0.0",
@@ -5960,35 +6346,6 @@
"@sinonjs/commons": "^1.7.0"
}
},
- "node_modules/@stylelint/postcss-css-in-js": {
- "version": "0.37.3",
- "resolved": "https://registry.npmjs.org/@stylelint/postcss-css-in-js/-/postcss-css-in-js-0.37.3.tgz",
- "integrity": "sha512-scLk3cSH1H9KggSniseb2KNAU5D9FWc3H7BxCSAIdtU9OWIyw0zkEZ9qEKHryRM+SExYXRKNb7tOOVNAsQ3iwg==",
- "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.",
- "dev": true,
- "dependencies": {
- "@babel/core": "^7.17.9"
- },
- "peerDependencies": {
- "postcss": ">=7.0.0",
- "postcss-syntax": ">=0.36.2"
- }
- },
- "node_modules/@stylelint/postcss-markdown": {
- "version": "0.36.2",
- "resolved": "https://registry.npmjs.org/@stylelint/postcss-markdown/-/postcss-markdown-0.36.2.tgz",
- "integrity": "sha512-2kGbqUVJUGE8dM+bMzXG/PYUWKkjLIkRLWNh39OaADkiabDRdw8ATFCgbMz5xdIcvwspPAluSL7uY+ZiTWdWmQ==",
- "deprecated": "Use the original unforked package instead: postcss-markdown",
- "dev": true,
- "dependencies": {
- "remark": "^13.0.0",
- "unist-util-find-all-after": "^3.0.2"
- },
- "peerDependencies": {
- "postcss": ">=7.0.0",
- "postcss-syntax": ">=0.36.2"
- }
- },
"node_modules/@surma/rollup-plugin-off-main-thread": {
"version": "2.2.3",
"resolved": "https://registry.npmjs.org/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz",
@@ -7409,7 +7766,6 @@
"version": "18.2.19",
"resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.19.tgz",
"integrity": "sha512-aZvQL6uUbIJpjZk4U8JZGbau9KDeAwMfmhyWorxgBkqDIEf6ROjRozcmPIicqsUwPUjbkDfHKgGee1Lq65APcA==",
- "dev": true,
"dependencies": {
"@types/react": "*"
}
@@ -8135,12 +8491,6 @@
"integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==",
"dev": true
},
- "node_modules/@zeit/schemas": {
- "version": "2.6.0",
- "resolved": "https://registry.npmjs.org/@zeit/schemas/-/schemas-2.6.0.tgz",
- "integrity": "sha512-uUrgZ8AxS+Lio0fZKAipJjAh415JyrOZowliZAzmnJSsf7piVL5w+G0+gFJ0KSu3QRhvui/7zuvpLz03YjXAhg==",
- "dev": true
- },
"node_modules/@zerollup/ts-helpers": {
"version": "1.7.18",
"resolved": "https://registry.npmjs.org/@zerollup/ts-helpers/-/ts-helpers-1.7.18.tgz",
@@ -8184,9 +8534,9 @@
}
},
"node_modules/acorn": {
- "version": "8.11.3",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz",
- "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==",
+ "version": "8.14.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz",
+ "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==",
"bin": {
"acorn": "bin/acorn"
},
@@ -8305,6 +8655,33 @@
"url": "https://github.com/sponsors/epoberezkin"
}
},
+ "node_modules/ajv-cli": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/ajv-cli/-/ajv-cli-5.0.0.tgz",
+ "integrity": "sha512-LY4m6dUv44HTyhV+u2z5uX4EhPYTM38Iv1jdgDJJJCyOOuqB8KtZEGjPZ2T+sh5ZIJrXUfgErYx/j3gLd3+PlQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ajv": "^8.0.0",
+ "fast-json-patch": "^2.0.0",
+ "glob": "^7.1.0",
+ "js-yaml": "^3.14.0",
+ "json-schema-migrate": "^2.0.0",
+ "json5": "^2.1.3",
+ "minimist": "^1.2.0"
+ },
+ "bin": {
+ "ajv": "dist/index.js"
+ },
+ "peerDependencies": {
+ "ts-node": ">=9.0.0"
+ },
+ "peerDependenciesMeta": {
+ "ts-node": {
+ "optional": true
+ }
+ }
+ },
"node_modules/ajv-formats": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz",
@@ -8407,8 +8784,7 @@
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/ansi-sequence-parser/-/ansi-sequence-parser-1.1.1.tgz",
"integrity": "sha512-vJXt3yiaUL4UU546s3rPXlsry/RnM730G1+HkpKE012AN0sx1eOrxSu95oKDIonskeLTijMgqWZ3uDEe3NFvyg==",
- "dev": true,
- "peer": true
+ "dev": true
},
"node_modules/ansi-styles": {
"version": "3.2.1",
@@ -8458,12 +8834,6 @@
}
]
},
- "node_modules/arg": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/arg/-/arg-2.0.0.tgz",
- "integrity": "sha512-XxNTUzKnz1ctK3ZIcI2XUPlD96wbHP2nGqkPKpvk/HNRlPveYrXIVSTk9m3LcqOgDPg3B1nMvdV/K8wZd7PG4w==",
- "dev": true
- },
"node_modules/argparse": {
"version": "1.0.10",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
@@ -8476,6 +8846,7 @@
"version": "5.1.3",
"resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz",
"integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==",
+ "dev": true,
"dependencies": {
"deep-equal": "^2.0.5"
}
@@ -9192,16 +9563,6 @@
"babel-plugin-transform-react-remove-prop-types": "^0.4.24"
}
},
- "node_modules/bail": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz",
- "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==",
- "dev": true,
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
"node_modules/balanced-match": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
@@ -9347,139 +9708,6 @@
"resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
"integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww=="
},
- "node_modules/boxen": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz",
- "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==",
- "dev": true,
- "dependencies": {
- "ansi-align": "^3.0.0",
- "camelcase": "^6.2.0",
- "chalk": "^4.1.0",
- "cli-boxes": "^2.2.1",
- "string-width": "^4.2.2",
- "type-fest": "^0.20.2",
- "widest-line": "^3.1.0",
- "wrap-ansi": "^7.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/boxen/node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/boxen/node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
- }
- },
- "node_modules/boxen/node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/boxen/node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "node_modules/boxen/node_modules/emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "dev": true
- },
- "node_modules/boxen/node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/boxen/node_modules/is-fullwidth-code-point": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/boxen/node_modules/string-width": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "dev": true,
- "dependencies": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/boxen/node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/boxen/node_modules/type-fest": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
- "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
- "dev": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/brace-expansion": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
@@ -9789,6 +10017,98 @@
"node": ">=4"
}
},
+ "node_modules/chalk-template": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/chalk-template/-/chalk-template-0.4.0.tgz",
+ "integrity": "sha512-/ghrgmhfY8RaSdeo43hNXxpoHAtxdbskUHjPpfqUWGttFgycUhYPGx3YZBCnUCvOa7Doivn1IZec3DEGFoMgLg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "chalk": "^4.1.2"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk-template?sponsor=1"
+ }
+ },
+ "node_modules/chalk-template/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/chalk-template/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/chalk-template/node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/chalk-template/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/chalk-template/node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/chalk-template/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/chalk/node_modules/escape-string-regexp": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
@@ -9959,18 +10279,6 @@
"node": ">=6"
}
},
- "node_modules/cli-boxes": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz",
- "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==",
- "dev": true,
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/cli-cursor": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
@@ -10004,138 +10312,6 @@
"resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz",
"integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA=="
},
- "node_modules/clipboardy": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-2.3.0.tgz",
- "integrity": "sha512-mKhiIL2DrQIsuXMgBgnfEHOZOryC7kY7YO//TN6c63wlEm3NG5tz+YgY5rVi29KCmq/QQjKYvM7a19+MDOTHOQ==",
- "dev": true,
- "dependencies": {
- "arch": "^2.1.1",
- "execa": "^1.0.0",
- "is-wsl": "^2.1.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/clipboardy/node_modules/cross-spawn": {
- "version": "6.0.5",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
- "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
- "dev": true,
- "dependencies": {
- "nice-try": "^1.0.4",
- "path-key": "^2.0.1",
- "semver": "^5.5.0",
- "shebang-command": "^1.2.0",
- "which": "^1.2.9"
- },
- "engines": {
- "node": ">=4.8"
- }
- },
- "node_modules/clipboardy/node_modules/execa": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz",
- "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==",
- "dev": true,
- "dependencies": {
- "cross-spawn": "^6.0.0",
- "get-stream": "^4.0.0",
- "is-stream": "^1.1.0",
- "npm-run-path": "^2.0.0",
- "p-finally": "^1.0.0",
- "signal-exit": "^3.0.0",
- "strip-eof": "^1.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/clipboardy/node_modules/get-stream": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
- "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
- "dev": true,
- "dependencies": {
- "pump": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/clipboardy/node_modules/is-stream": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
- "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/clipboardy/node_modules/npm-run-path": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
- "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==",
- "dev": true,
- "dependencies": {
- "path-key": "^2.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/clipboardy/node_modules/path-key": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
- "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/clipboardy/node_modules/semver": {
- "version": "5.7.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
- "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
- "dev": true,
- "bin": {
- "semver": "bin/semver"
- }
- },
- "node_modules/clipboardy/node_modules/shebang-command": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
- "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==",
- "dev": true,
- "dependencies": {
- "shebang-regex": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/clipboardy/node_modules/shebang-regex": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
- "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/clipboardy/node_modules/which": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
- "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
- "dev": true,
- "dependencies": {
- "isexe": "^2.0.0"
- },
- "bin": {
- "which": "bin/which"
- }
- },
"node_modules/cliui": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz",
@@ -10215,18 +10391,6 @@
"node": ">=8"
}
},
- "node_modules/clone-regexp": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/clone-regexp/-/clone-regexp-2.2.0.tgz",
- "integrity": "sha512-beMpP7BOtTipFuW8hrJvREQ2DrRu3BE7by0ZpibtfBA+qfHYvMGTc2Yb1JMYPKg/JUw0CHYvpg796aNTSW9z7Q==",
- "dev": true,
- "dependencies": {
- "is-regexp": "^2.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/clsx": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz",
@@ -10373,44 +10537,12 @@
"node": ">= 0.6"
}
},
- "node_modules/compression": {
- "version": "1.7.3",
- "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.3.tgz",
- "integrity": "sha512-HSjyBG5N1Nnz7tF2+O7A9XUhyjru71/fwgNb7oIsEVHR0WShfs2tIS/EySLgiTe98aOK18YDlMXpzjCXY/n9mg==",
- "dev": true,
- "dependencies": {
- "accepts": "~1.3.5",
- "bytes": "3.0.0",
- "compressible": "~2.0.14",
- "debug": "2.6.9",
- "on-headers": "~1.0.1",
- "safe-buffer": "5.1.2",
- "vary": "~1.1.2"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/compression/node_modules/debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "node_modules/concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
"dev": true,
- "dependencies": {
- "ms": "2.0.0"
- }
- },
- "node_modules/compression/node_modules/ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
- "dev": true
- },
- "node_modules/compression/node_modules/safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
- "dev": true
+ "license": "MIT"
},
"node_modules/concat-with-sourcemaps": {
"version": "1.1.0",
@@ -10750,6 +10882,16 @@
"postcss": "^8.0.9"
}
},
+ "node_modules/css-functions-list": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.3.tgz",
+ "integrity": "sha512-IQOkD3hbR5KrN93MtcYuad6YPuTSUhntLHDuLEbFWE+ff2/XSZNdZG+LcbbIW5AXKg/WFIfYItIzVoHngHXZzA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12 || >=16"
+ }
+ },
"node_modules/css-has-pseudo": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-3.0.4.tgz",
@@ -11619,6 +11761,7 @@
"version": "2.2.3",
"resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.3.tgz",
"integrity": "sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==",
+ "dev": true,
"dependencies": {
"array-buffer-byte-length": "^1.0.0",
"call-bind": "^1.0.5",
@@ -12343,6 +12486,7 @@
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz",
"integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==",
+ "dev": true,
"dependencies": {
"call-bind": "^1.0.2",
"get-intrinsic": "^1.1.3",
@@ -12384,9 +12528,9 @@
}
},
"node_modules/es-module-lexer": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.4.1.tgz",
- "integrity": "sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w=="
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.6.0.tgz",
+ "integrity": "sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ=="
},
"node_modules/es-set-tostringtag": {
"version": "2.0.3",
@@ -13565,10 +13709,6 @@
"node": ">=0.8.x"
}
},
- "node_modules/example-separate-editors": {
- "resolved": "example-separate-editors",
- "link": true
- },
"node_modules/example-ssr": {
"resolved": "example-ssr",
"link": true
@@ -13602,18 +13742,6 @@
"url": "https://github.com/sindresorhus/execa?sponsor=1"
}
},
- "node_modules/execall": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/execall/-/execall-2.0.0.tgz",
- "integrity": "sha512-0FU2hZ5Hh6iQnarpRtQurM/aAvp3RIbfvgLHrcqJYzhXyV2KFruhuChf9NC6waAhiUR7FFtlugkI4p7f2Fqlow==",
- "dev": true,
- "dependencies": {
- "clone-regexp": "^2.1.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/exit": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
@@ -13920,12 +14048,6 @@
"node": ">= 0.6"
}
},
- "node_modules/extend": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
- "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
- "dev": true
- },
"node_modules/extend-shallow": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
@@ -14028,6 +14150,26 @@
"node": ">= 6"
}
},
+ "node_modules/fast-json-patch": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/fast-json-patch/-/fast-json-patch-2.2.1.tgz",
+ "integrity": "sha512-4j5uBaTnsYAV5ebkidvxiLUYOwjQ+JSFljeqfTxCrH9bDmlCQaOJFS84oDJ2rAXZq2yskmk3ORfoP9DCwqFNig==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fast-deep-equal": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4.0"
+ }
+ },
+ "node_modules/fast-json-patch/node_modules/fast-deep-equal": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
+ "integrity": "sha512-bCK/2Z4zLidyB4ReuIsvALH6w31YfAQDmXMqMx6FyfHqvBxtjC0eRumeSu4Bs3XtXwpyIywtSTrVT99BxY1f9w==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/fast-json-stable-stringify": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
@@ -14738,18 +14880,6 @@
"node": ">=8.0.0"
}
},
- "node_modules/get-stdin": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz",
- "integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==",
- "dev": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/get-stream": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
@@ -14928,21 +15058,6 @@
"integrity": "sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==",
"dev": true
},
- "node_modules/gonzales-pe": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/gonzales-pe/-/gonzales-pe-4.3.0.tgz",
- "integrity": "sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ==",
- "dev": true,
- "dependencies": {
- "minimist": "^1.2.5"
- },
- "bin": {
- "gonzales": "bin/gonzales.js"
- },
- "engines": {
- "node": ">=0.6.0"
- }
- },
"node_modules/gopd": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
@@ -15675,9 +15790,9 @@
}
},
"node_modules/indigo-ketcher": {
- "version": "1.28.0-rc.1",
- "resolved": "https://registry.npmjs.org/indigo-ketcher/-/indigo-ketcher-1.28.0-rc.1.tgz",
- "integrity": "sha512-t2uuKOtcAj3pUQKbs0kpk0LR6NUbpiD0AR3Y4Pjq0dGKXp8PQ/QwgD4UOugYIHhnUjMwqAhjUQSaFW9ChEFTEQ=="
+ "version": "1.28.0-rc.3",
+ "resolved": "https://registry.npmjs.org/indigo-ketcher/-/indigo-ketcher-1.28.0-rc.3.tgz",
+ "integrity": "sha512-DarUsiUfPnKtDEVan/xcPT0PUf9YW528RFahpHRk76kC7bI6x+otmQCdfeNBtaDpctKc1mdTfYmWlV36spRrhQ=="
},
"node_modules/inflight": {
"version": "1.0.6",
@@ -15861,29 +15976,6 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/is-buffer": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz",
- "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "engines": {
- "node": ">=4"
- }
- },
"node_modules/is-builtin-module": {
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz",
@@ -16196,6 +16288,19 @@
"node": ">=0.10.0"
}
},
+ "node_modules/is-port-reachable": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-port-reachable/-/is-port-reachable-4.0.0.tgz",
+ "integrity": "sha512-9UoipoxYmSk6Xy7QFgRv2HDyaysmgSG75TFQs6S+3pDM7ZhKTF/bskZV+0UlABHzKjNVhPjYCLfeZUEg1wXxig==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/is-potential-custom-element-name": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz",
@@ -16225,15 +16330,6 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/is-regexp": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-2.1.0.tgz",
- "integrity": "sha512-OZ4IlER3zmRIoB9AqNhEggVxqIH4ofDns5nRrPS6yQxXE1TPCUpFznBfRQmQa8uC+pXqjMnukiJBxCisIxiLGA==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/is-root": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz",
@@ -16322,18 +16418,6 @@
"resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
"integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA=="
},
- "node_modules/is-unicode-supported": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
- "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==",
- "dev": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/is-weakmap": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz",
@@ -19125,6 +19209,16 @@
"resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz",
"integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA=="
},
+ "node_modules/json-schema-migrate": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/json-schema-migrate/-/json-schema-migrate-2.0.0.tgz",
+ "integrity": "sha512-r38SVTtojDRp4eD6WsCqiE0eNDt4v1WalBXb9cyZYw9ai5cGtBwzRNWjHzJl38w6TxFkXAIA7h+fyX3tnrAFhQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ajv": "^8.0.0"
+ }
+ },
"node_modules/json-schema-traverse": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
@@ -19259,12 +19353,6 @@
"node": ">= 8"
}
},
- "node_modules/known-css-properties": {
- "version": "0.21.0",
- "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.21.0.tgz",
- "integrity": "sha512-sZLUnTqimCkvkgRS+kbPlYW5o8q5w1cu+uIisKpEWkj31I8mx8kNG162DwRav8Zirkva6N5uoFsm9kzK4mUXjw==",
- "dev": true
- },
"node_modules/language-subtag-registry": {
"version": "0.3.22",
"resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz",
@@ -19728,92 +19816,6 @@
"resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
"integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ=="
},
- "node_modules/log-symbols": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
- "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==",
- "dev": true,
- "dependencies": {
- "chalk": "^4.1.0",
- "is-unicode-supported": "^0.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/log-symbols/node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/log-symbols/node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
- }
- },
- "node_modules/log-symbols/node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/log-symbols/node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "node_modules/log-symbols/node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/log-symbols/node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/log-update": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz",
@@ -20658,6 +20660,12 @@
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
},
+ "node_modules/mui": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/mui/-/mui-0.0.1.tgz",
+ "integrity": "sha512-iB9zfxsJBcMkZ/SY6X+HGSPr4fftCZIQ76ZMH8iSMfVkidVzRtZlLW2gbWXUe+IMcj8JLv1p+dGKvPVlgtiocA==",
+ "license": "MIT"
+ },
"node_modules/multicast-dns": {
"version": "7.2.5",
"resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz",
@@ -20681,15 +20689,16 @@
}
},
"node_modules/nanoid": {
- "version": "3.3.7",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz",
- "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==",
+ "version": "3.3.8",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz",
+ "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==",
"funding": [
{
"type": "github",
"url": "https://github.com/sponsors/ai"
}
],
+ "license": "MIT",
"bin": {
"nanoid": "bin/nanoid.cjs"
},
@@ -20798,6 +20807,34 @@
}
}
},
+ "node_modules/next/node_modules/postcss": {
+ "version": "8.4.31",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz",
+ "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/postcss"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "nanoid": "^3.3.6",
+ "picocolors": "^1.0.0",
+ "source-map-js": "^1.0.2"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ }
+ },
"node_modules/nice-try": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
@@ -20935,12 +20972,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/normalize-selector": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/normalize-selector/-/normalize-selector-0.2.0.tgz",
- "integrity": "sha512-dxvWdI8gw6eAvk9BlPffgEoGfM7AdijoCwOEJge3e3ulT2XLgmU7KvvxprOaCu05Q1uGRHmOhHe1r6emZoKyFw==",
- "dev": true
- },
"node_modules/normalize-url": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz",
@@ -21083,12 +21114,6 @@
"url": "https://github.com/fb55/nth-check?sponsor=1"
}
},
- "node_modules/num2fraction": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz",
- "integrity": "sha512-Y1wZESM7VUThYY+4W+X4ySH2maqcA+p7UR+w8VWNWVAd6lwuXXWz/w/Cz43J/dI2I+PS6wD5N+bJUF+gjWvIqg==",
- "dev": true
- },
"node_modules/nwsapi": {
"version": "2.2.7",
"resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz",
@@ -21740,9 +21765,10 @@
"integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow=="
},
"node_modules/picocolors": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
- "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
+ "license": "ISC"
},
"node_modules/picomatch": {
"version": "2.3.1",
@@ -21911,9 +21937,9 @@
}
},
"node_modules/postcss": {
- "version": "8.4.31",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz",
- "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==",
+ "version": "8.5.1",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.1.tgz",
+ "integrity": "sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ==",
"funding": [
{
"type": "opencollective",
@@ -21928,10 +21954,11 @@
"url": "https://github.com/sponsors/ai"
}
],
+ "license": "MIT",
"dependencies": {
- "nanoid": "^3.3.6",
- "picocolors": "^1.0.0",
- "source-map-js": "^1.0.2"
+ "nanoid": "^3.3.8",
+ "picocolors": "^1.1.1",
+ "source-map-js": "^1.2.1"
},
"engines": {
"node": "^10 || ^12 || >=14"
@@ -22287,95 +22314,6 @@
"postcss": "^8.2"
}
},
- "node_modules/postcss-html": {
- "version": "0.36.0",
- "resolved": "https://registry.npmjs.org/postcss-html/-/postcss-html-0.36.0.tgz",
- "integrity": "sha512-HeiOxGcuwID0AFsNAL0ox3mW6MHH5cstWN1Z3Y+n6H+g12ih7LHdYxWwEA/QmrebctLjo79xz9ouK3MroHwOJw==",
- "dev": true,
- "dependencies": {
- "htmlparser2": "^3.10.0"
- },
- "peerDependencies": {
- "postcss": ">=5.0.0",
- "postcss-syntax": ">=0.36.0"
- }
- },
- "node_modules/postcss-html/node_modules/dom-serializer": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz",
- "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==",
- "dev": true,
- "dependencies": {
- "domelementtype": "^2.0.1",
- "entities": "^2.0.0"
- }
- },
- "node_modules/postcss-html/node_modules/dom-serializer/node_modules/domelementtype": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz",
- "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/fb55"
- }
- ]
- },
- "node_modules/postcss-html/node_modules/dom-serializer/node_modules/entities": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz",
- "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==",
- "dev": true,
- "funding": {
- "url": "https://github.com/fb55/entities?sponsor=1"
- }
- },
- "node_modules/postcss-html/node_modules/domelementtype": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz",
- "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==",
- "dev": true
- },
- "node_modules/postcss-html/node_modules/domhandler": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz",
- "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==",
- "dev": true,
- "dependencies": {
- "domelementtype": "1"
- }
- },
- "node_modules/postcss-html/node_modules/domutils": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz",
- "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==",
- "dev": true,
- "dependencies": {
- "dom-serializer": "0",
- "domelementtype": "1"
- }
- },
- "node_modules/postcss-html/node_modules/entities": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz",
- "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==",
- "dev": true
- },
- "node_modules/postcss-html/node_modules/htmlparser2": {
- "version": "3.10.1",
- "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz",
- "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==",
- "dev": true,
- "dependencies": {
- "domelementtype": "^1.3.1",
- "domhandler": "^2.3.0",
- "domutils": "^1.5.1",
- "entities": "^1.1.1",
- "inherits": "^2.0.1",
- "readable-stream": "^3.1.1"
- }
- },
"node_modules/postcss-image-set-function": {
"version": "4.0.7",
"resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-4.0.7.tgz",
@@ -22456,15 +22394,16 @@
}
},
"node_modules/postcss-less": {
- "version": "3.1.4",
- "resolved": "https://registry.npmjs.org/postcss-less/-/postcss-less-3.1.4.tgz",
- "integrity": "sha512-7TvleQWNM2QLcHqvudt3VYjULVB49uiW6XzEUFmvwHzvsOEF5MwBrIXZDJQvJNFGjJQTzSzZnDoCJ8h/ljyGXA==",
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-less/-/postcss-less-6.0.0.tgz",
+ "integrity": "sha512-FPX16mQLyEjLzEuuJtxA8X3ejDLNGGEG503d2YGZR5Ask1SpDN8KmZUMpzCvyalWRywAn1n1VOA5dcqfCLo5rg==",
"dev": true,
- "dependencies": {
- "postcss": "^7.0.14"
- },
+ "license": "MIT",
"engines": {
- "node": ">=6.14.4"
+ "node": ">=12"
+ },
+ "peerDependencies": {
+ "postcss": "^8.3.5"
}
},
"node_modules/postcss-load-config": {
@@ -23097,40 +23036,6 @@
"integrity": "sha512-HvExULSwLqHLgUy1rl3ANIqCsvMS0WHss2UOsXhXnQaZ9VCc2oBvIpXrl00IUFT5ZDITME0o6oiXeiHr2SAIfw==",
"dev": true
},
- "node_modules/postcss-safe-parser": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-4.0.2.tgz",
- "integrity": "sha512-Uw6ekxSWNLCPesSv/cmqf2bY/77z11O7jZGPax3ycZMFU/oi2DMH9i89AdHc1tRwFg/arFoEwX0IS3LCUxJh1g==",
- "dev": true,
- "dependencies": {
- "postcss": "^7.0.26"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/postcss-sass": {
- "version": "0.4.4",
- "resolved": "https://registry.npmjs.org/postcss-sass/-/postcss-sass-0.4.4.tgz",
- "integrity": "sha512-BYxnVYx4mQooOhr+zer0qWbSPYnarAy8ZT7hAQtbxtgVf8gy+LSLT/hHGe35h14/pZDTw1DsxdbrwxBN++H+fg==",
- "dev": true,
- "dependencies": {
- "gonzales-pe": "^4.3.0",
- "postcss": "^7.0.21"
- }
- },
- "node_modules/postcss-scss": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-2.1.1.tgz",
- "integrity": "sha512-jQmGnj0hSGLd9RscFw9LyuSVAa5Bl1/KBPqG1NQw9w8ND55nY4ZEsdlVuYJvLPpV+y0nwTV5v/4rHPzZRihQbA==",
- "dev": true,
- "dependencies": {
- "postcss": "^7.0.6"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
"node_modules/postcss-selector-not": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-6.0.1.tgz",
@@ -23221,15 +23126,6 @@
"node": ">=10.13.0"
}
},
- "node_modules/postcss-syntax": {
- "version": "0.36.2",
- "resolved": "https://registry.npmjs.org/postcss-syntax/-/postcss-syntax-0.36.2.tgz",
- "integrity": "sha512-nBRg/i7E3SOHWxF3PpF5WnJM/jQ1YpY9000OaVXlAQj6Zp/kIqJxEDWIZ67tAd7NLuk7zqN4yqe9nc0oNAOs1w==",
- "dev": true,
- "peerDependencies": {
- "postcss": ">=5.0.0"
- }
- },
"node_modules/postcss-unique-selectors": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz",
@@ -25772,21 +25668,6 @@
"node": ">= 0.10"
}
},
- "node_modules/remark": {
- "version": "13.0.0",
- "resolved": "https://registry.npmjs.org/remark/-/remark-13.0.0.tgz",
- "integrity": "sha512-HDz1+IKGtOyWN+QgBiAT0kn+2s6ovOxHyPAFGKVE81VSzJ+mq7RwHFledEvB5F1p4iJvOah/LOKdFuzvRnNLCA==",
- "dev": true,
- "dependencies": {
- "remark-parse": "^9.0.0",
- "remark-stringify": "^9.0.0",
- "unified": "^9.1.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
"node_modules/remark-gfm": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-1.0.0.tgz",
@@ -25812,19 +25693,6 @@
"url": "https://opencollective.com/unified"
}
},
- "node_modules/remark-stringify": {
- "version": "9.0.1",
- "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-9.0.1.tgz",
- "integrity": "sha512-mWmNg3ZtESvZS8fv5PTvaPckdL4iNlCHTt8/e/8oN08nArHRHjNZMKzA/YW3+p7/lYqIw4nx1XsjCBo/AxNChg==",
- "dev": true,
- "dependencies": {
- "mdast-util-to-markdown": "^0.6.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
"node_modules/remove-trailing-separator": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
@@ -25996,6 +25864,29 @@
"resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz",
"integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A=="
},
+ "node_modules/resolve-url-loader/node_modules/picocolors": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz",
+ "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==",
+ "license": "ISC"
+ },
+ "node_modules/resolve-url-loader/node_modules/postcss": {
+ "version": "7.0.39",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz",
+ "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==",
+ "license": "MIT",
+ "dependencies": {
+ "picocolors": "^0.2.1",
+ "source-map": "^0.6.1"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ }
+ },
"node_modules/resolve-url-loader/node_modules/source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
@@ -27181,63 +27072,6 @@
"randombytes": "^2.1.0"
}
},
- "node_modules/serve": {
- "version": "13.0.4",
- "resolved": "https://registry.npmjs.org/serve/-/serve-13.0.4.tgz",
- "integrity": "sha512-Lj8rhXmphJCRQVv5qwu0NQZ2h+0MrRyRJxDZu5y3qLH2i/XY6a0FPj/VmjMUdkJb672MBfE8hJ274PU6JzBd0Q==",
- "dev": true,
- "dependencies": {
- "@zeit/schemas": "2.6.0",
- "ajv": "6.12.6",
- "arg": "2.0.0",
- "boxen": "5.1.2",
- "chalk": "2.4.1",
- "clipboardy": "2.3.0",
- "compression": "1.7.3",
- "serve-handler": "6.1.3",
- "update-check": "1.5.2"
- },
- "bin": {
- "serve": "bin/serve.js"
- }
- },
- "node_modules/serve-handler": {
- "version": "6.1.3",
- "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.3.tgz",
- "integrity": "sha512-FosMqFBNrLyeiIDvP1zgO6YoTzFYHxLDEIavhlmQ+knB2Z7l1t+kGLHkZIDN7UVWqQAmKI3D20A6F6jo3nDd4w==",
- "dev": true,
- "dependencies": {
- "bytes": "3.0.0",
- "content-disposition": "0.5.2",
- "fast-url-parser": "1.1.3",
- "mime-types": "2.1.18",
- "minimatch": "3.0.4",
- "path-is-inside": "1.0.2",
- "path-to-regexp": "2.2.1",
- "range-parser": "1.2.0"
- }
- },
- "node_modules/serve-handler/node_modules/mime-db": {
- "version": "1.33.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz",
- "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==",
- "dev": true,
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/serve-handler/node_modules/mime-types": {
- "version": "2.1.18",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz",
- "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==",
- "dev": true,
- "dependencies": {
- "mime-db": "~1.33.0"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
"node_modules/serve-index": {
"version": "1.9.1",
"resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz",
@@ -27322,51 +27156,6 @@
"node": ">= 0.8.0"
}
},
- "node_modules/serve/node_modules/ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
- "dev": true,
- "dependencies": {
- "fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
- }
- },
- "node_modules/serve/node_modules/chalk": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
- "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/serve/node_modules/escape-string-regexp": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
- "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
- "dev": true,
- "engines": {
- "node": ">=0.8.0"
- }
- },
- "node_modules/serve/node_modules/json-schema-traverse": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
- "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
- "dev": true
- },
"node_modules/set-blocking": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
@@ -27515,7 +27304,6 @@
"resolved": "https://registry.npmjs.org/shiki/-/shiki-0.14.7.tgz",
"integrity": "sha512-dNPAPrxSc87ua2sKJ3H5dQ/6ZaY8RNnaAqK+t0eG7p0Soi2ydiqbGOTaZCqaYvA/uZYfS1LJnemt3Q+mSfcPCg==",
"dev": true,
- "peer": true,
"dependencies": {
"ansi-sequence-parser": "^1.1.0",
"jsonc-parser": "^3.2.0",
@@ -27785,9 +27573,10 @@
}
},
"node_modules/source-map-js": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
- "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
+ "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
+ "license": "BSD-3-Clause",
"engines": {
"node": ">=0.10.0"
}
@@ -27916,15 +27705,6 @@
"wbuf": "^1.7.3"
}
},
- "node_modules/specificity": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/specificity/-/specificity-0.4.1.tgz",
- "integrity": "sha512-1klA3Gi5PD1Wv9Q0wUoOQN1IWAuPu0D1U03ThXTr0cJ20+/iq2tHSDnK7Kk/0LXJ1ztUB2/1Os0wKmfyNgUQfg==",
- "dev": true,
- "bin": {
- "specificity": "bin/specificity"
- }
- },
"node_modules/split-string": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
@@ -28115,6 +27895,7 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz",
"integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==",
+ "dev": true,
"dependencies": {
"internal-slot": "^1.0.4"
},
@@ -28480,65 +28261,56 @@
}
},
"node_modules/stylelint": {
- "version": "13.13.1",
- "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-13.13.1.tgz",
- "integrity": "sha512-Mv+BQr5XTUrKqAXmpqm6Ddli6Ief+AiPZkRsIrAoUKFuq/ElkUh9ZMYxXD0iQNZ5ADghZKLOWz1h7hTClB7zgQ==",
+ "version": "14.16.1",
+ "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-14.16.1.tgz",
+ "integrity": "sha512-ErlzR/T3hhbV+a925/gbfc3f3Fep9/bnspMiJPorfGEmcBbXdS+oo6LrVtoUZ/w9fqD6o6k7PtUlCOsCRdjX/A==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@stylelint/postcss-css-in-js": "^0.37.2",
- "@stylelint/postcss-markdown": "^0.36.2",
- "autoprefixer": "^9.8.6",
+ "@csstools/selector-specificity": "^2.0.2",
"balanced-match": "^2.0.0",
- "chalk": "^4.1.1",
- "cosmiconfig": "^7.0.0",
- "debug": "^4.3.1",
- "execall": "^2.0.0",
- "fast-glob": "^3.2.5",
- "fastest-levenshtein": "^1.0.12",
+ "colord": "^2.9.3",
+ "cosmiconfig": "^7.1.0",
+ "css-functions-list": "^3.1.0",
+ "debug": "^4.3.4",
+ "fast-glob": "^3.2.12",
+ "fastest-levenshtein": "^1.0.16",
"file-entry-cache": "^6.0.1",
- "get-stdin": "^8.0.0",
"global-modules": "^2.0.0",
- "globby": "^11.0.3",
+ "globby": "^11.1.0",
"globjoin": "^0.1.4",
- "html-tags": "^3.1.0",
- "ignore": "^5.1.8",
+ "html-tags": "^3.2.0",
+ "ignore": "^5.2.1",
"import-lazy": "^4.0.0",
"imurmurhash": "^0.1.4",
- "known-css-properties": "^0.21.0",
- "lodash": "^4.17.21",
- "log-symbols": "^4.1.0",
+ "is-plain-object": "^5.0.0",
+ "known-css-properties": "^0.26.0",
"mathml-tag-names": "^2.1.3",
"meow": "^9.0.0",
- "micromatch": "^4.0.4",
- "normalize-selector": "^0.2.0",
- "postcss": "^7.0.35",
- "postcss-html": "^0.36.0",
- "postcss-less": "^3.1.4",
+ "micromatch": "^4.0.5",
+ "normalize-path": "^3.0.0",
+ "picocolors": "^1.0.0",
+ "postcss": "^8.4.19",
"postcss-media-query-parser": "^0.2.3",
"postcss-resolve-nested-selector": "^0.1.1",
- "postcss-safe-parser": "^4.0.2",
- "postcss-sass": "^0.4.4",
- "postcss-scss": "^2.1.1",
- "postcss-selector-parser": "^6.0.5",
- "postcss-syntax": "^0.36.2",
- "postcss-value-parser": "^4.1.0",
+ "postcss-safe-parser": "^6.0.0",
+ "postcss-selector-parser": "^6.0.11",
+ "postcss-value-parser": "^4.2.0",
"resolve-from": "^5.0.0",
- "slash": "^3.0.0",
- "specificity": "^0.4.1",
- "string-width": "^4.2.2",
- "strip-ansi": "^6.0.0",
+ "string-width": "^4.2.3",
+ "strip-ansi": "^6.0.1",
"style-search": "^0.1.0",
- "sugarss": "^2.0.0",
+ "supports-hyperlinks": "^2.3.0",
"svg-tags": "^1.0.0",
- "table": "^6.6.0",
+ "table": "^6.8.1",
"v8-compile-cache": "^2.3.0",
- "write-file-atomic": "^3.0.3"
+ "write-file-atomic": "^4.0.2"
},
"bin": {
"stylelint": "bin/stylelint.js"
},
"engines": {
- "node": ">=10.13.0"
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
},
"funding": {
"type": "opencollective",
@@ -28562,61 +28334,26 @@
}
},
"node_modules/stylelint-config-recommended": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-5.0.0.tgz",
- "integrity": "sha512-c8aubuARSu5A3vEHLBeOSJt1udOdS+1iue7BmJDTSXoCBmfEQmmWX+59vYIj3NQdJBY6a/QRv1ozVFpaB9jaqA==",
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-6.0.0.tgz",
+ "integrity": "sha512-ZorSSdyMcxWpROYUvLEMm0vSZud2uB7tX1hzBZwvVY9SV/uly4AvvJPPhCcymZL3fcQhEQG5AELmrxWqtmzacw==",
"dev": true,
+ "license": "MIT",
"peerDependencies": {
- "stylelint": "^13.13.0"
+ "stylelint": "^14.0.0"
}
},
"node_modules/stylelint-config-standard": {
- "version": "22.0.0",
- "resolved": "https://registry.npmjs.org/stylelint-config-standard/-/stylelint-config-standard-22.0.0.tgz",
- "integrity": "sha512-uQVNi87SHjqTm8+4NIP5NMAyY/arXrBgimaaT7skvRfE9u3JKXRK9KBkbr4pVmeciuCcs64kAdjlxfq6Rur7Hw==",
+ "version": "23.0.0",
+ "resolved": "https://registry.npmjs.org/stylelint-config-standard/-/stylelint-config-standard-23.0.0.tgz",
+ "integrity": "sha512-8PDlk+nWuc1T66nVaODTdVodN0pjuE5TBlopi39Lt9EM36YJsRhqttMyUhnS78oc/59Q6n8iw2GJB4QcoFqtRg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "stylelint-config-recommended": "^5.0.0"
+ "stylelint-config-recommended": "^6.0.0"
},
"peerDependencies": {
- "stylelint": "^13.13.0"
- }
- },
- "node_modules/stylelint/node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/stylelint/node_modules/autoprefixer": {
- "version": "9.8.8",
- "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.8.tgz",
- "integrity": "sha512-eM9d/swFopRt5gdJ7jrpCwgvEMIayITpojhkkSMRsFHYuH5bkSQ4p/9qTEHtmNudUZh22Tehu7I6CxAW0IXTKA==",
- "dev": true,
- "dependencies": {
- "browserslist": "^4.12.0",
- "caniuse-lite": "^1.0.30001109",
- "normalize-range": "^0.1.2",
- "num2fraction": "^1.2.2",
- "picocolors": "^0.2.1",
- "postcss": "^7.0.32",
- "postcss-value-parser": "^4.1.0"
- },
- "bin": {
- "autoprefixer": "bin/autoprefixer"
- },
- "funding": {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/autoprefixer"
+ "stylelint": "^14.0.0"
}
},
"node_modules/stylelint/node_modules/balanced-match": {
@@ -28625,55 +28362,12 @@
"integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==",
"dev": true
},
- "node_modules/stylelint/node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
- }
- },
- "node_modules/stylelint/node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/stylelint/node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
"node_modules/stylelint/node_modules/emoji-regex": {
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
"dev": true
},
- "node_modules/stylelint/node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/stylelint/node_modules/is-fullwidth-code-point": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
@@ -28683,11 +28377,39 @@
"node": ">=8"
}
},
- "node_modules/stylelint/node_modules/picocolors": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz",
- "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==",
- "dev": true
+ "node_modules/stylelint/node_modules/is-plain-object": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz",
+ "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/stylelint/node_modules/known-css-properties": {
+ "version": "0.26.0",
+ "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.26.0.tgz",
+ "integrity": "sha512-5FZRzrZzNTBruuurWpvZnvP9pum+fe0HcK8z/ooo+U+Hmp4vtbyp1/QDsqmufirXy4egGzbaH/y2uCZf+6W5Kg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/stylelint/node_modules/postcss-safe-parser": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz",
+ "integrity": "sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ "peerDependencies": {
+ "postcss": "^8.3.3"
+ }
},
"node_modules/stylelint/node_modules/string-width": {
"version": "4.2.3",
@@ -28703,16 +28425,18 @@
"node": ">=8"
}
},
- "node_modules/stylelint/node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "node_modules/stylelint/node_modules/write-file-atomic": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz",
+ "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==",
"dev": true,
+ "license": "ISC",
"dependencies": {
- "has-flag": "^4.0.0"
+ "imurmurhash": "^0.1.4",
+ "signal-exit": "^3.0.7"
},
"engines": {
- "node": ">=8"
+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
}
},
"node_modules/stylis": {
@@ -28780,10 +28504,53 @@
"resolved": "https://registry.npmjs.org/sugarss/-/sugarss-2.0.0.tgz",
"integrity": "sha512-WfxjozUk0UVA4jm+U1d736AUpzSrNsQcIbyOkoE364GrtWmIrFdk5lksEupgWMD4VaT/0kVx1dobpiDumSgmJQ==",
"dev": true,
+ "optional": true,
+ "peer": true,
"dependencies": {
"postcss": "^7.0.2"
}
},
+ "node_modules/sugarss/node_modules/picocolors": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz",
+ "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==",
+ "dev": true,
+ "license": "ISC",
+ "optional": true,
+ "peer": true
+ },
+ "node_modules/sugarss/node_modules/postcss": {
+ "version": "7.0.39",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz",
+ "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "peer": true,
+ "dependencies": {
+ "picocolors": "^0.2.1",
+ "source-map": "^0.6.1"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ }
+ },
+ "node_modules/sugarss/node_modules/source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "optional": true,
+ "peer": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/supports-color": {
"version": "5.5.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
@@ -29482,16 +29249,6 @@
"node": ">=8"
}
},
- "node_modules/trough": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz",
- "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==",
- "dev": true,
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
"node_modules/tryer": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz",
@@ -29972,33 +29729,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/unified": {
- "version": "9.2.2",
- "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.2.tgz",
- "integrity": "sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ==",
- "dev": true,
- "dependencies": {
- "bail": "^1.0.0",
- "extend": "^3.0.0",
- "is-buffer": "^2.0.0",
- "is-plain-obj": "^2.0.0",
- "trough": "^1.0.0",
- "vfile": "^4.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/unified/node_modules/is-plain-obj": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz",
- "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/union-value": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz",
@@ -30034,19 +29764,6 @@
"node": ">=8"
}
},
- "node_modules/unist-util-find-all-after": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/unist-util-find-all-after/-/unist-util-find-all-after-3.0.2.tgz",
- "integrity": "sha512-xaTC/AGZ0rIM2gM28YVRAFPIZpzbpDtU3dRmp7EXlNVA8ziQc4hY3H7BHXM1J49nEmiqc3svnqMReW+PGqbZKQ==",
- "dev": true,
- "dependencies": {
- "unist-util-is": "^4.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
"node_modules/unist-util-is": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz",
@@ -30212,16 +29929,6 @@
"browserslist": ">= 4.21.0"
}
},
- "node_modules/update-check": {
- "version": "1.5.2",
- "resolved": "https://registry.npmjs.org/update-check/-/update-check-1.5.2.tgz",
- "integrity": "sha512-1TrmYLuLj/5ZovwUS7fFd1jMH3NnFDN1y1A8dboedIDt7zs/zJMo6TwwlhYKkSeEwzleeiSBV5/3c9ufAQWDaQ==",
- "dev": true,
- "dependencies": {
- "registry-auth-token": "3.3.2",
- "registry-url": "3.1.0"
- }
- },
"node_modules/uri-js": {
"version": "4.4.1",
"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
@@ -30392,36 +30099,6 @@
"node": ">= 0.8"
}
},
- "node_modules/vfile": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz",
- "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==",
- "dev": true,
- "dependencies": {
- "@types/unist": "^2.0.0",
- "is-buffer": "^2.0.0",
- "unist-util-stringify-position": "^2.0.0",
- "vfile-message": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/vfile-message": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz",
- "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==",
- "dev": true,
- "dependencies": {
- "@types/unist": "^2.0.0",
- "unist-util-stringify-position": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
"node_modules/vite": {
"version": "4.5.5",
"resolved": "https://registry.npmjs.org/vite/-/vite-4.5.5.tgz",
@@ -30477,6 +30154,47 @@
}
}
},
+ "node_modules/vite-plugin-commonjs": {
+ "version": "0.10.4",
+ "resolved": "https://registry.npmjs.org/vite-plugin-commonjs/-/vite-plugin-commonjs-0.10.4.tgz",
+ "integrity": "sha512-eWQuvQKCcx0QYB5e5xfxBNjQKyrjEWZIR9UOkOV6JAgxVhtbZvCOF+FNC2ZijBJ3U3Px04ZMMyyMyFBVWIJ5+g==",
+ "dev": true,
+ "dependencies": {
+ "acorn": "^8.12.1",
+ "magic-string": "^0.30.11",
+ "vite-plugin-dynamic-import": "^1.6.0"
+ }
+ },
+ "node_modules/vite-plugin-commonjs/node_modules/magic-string": {
+ "version": "0.30.17",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz",
+ "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==",
+ "dev": true,
+ "dependencies": {
+ "@jridgewell/sourcemap-codec": "^1.5.0"
+ }
+ },
+ "node_modules/vite-plugin-dynamic-import": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/vite-plugin-dynamic-import/-/vite-plugin-dynamic-import-1.6.0.tgz",
+ "integrity": "sha512-TM0sz70wfzTIo9YCxVFwS8OA9lNREsh+0vMHGSkWDTZ7bgd1Yjs5RV8EgB634l/91IsXJReg0xtmuQqP0mf+rg==",
+ "dev": true,
+ "dependencies": {
+ "acorn": "^8.12.1",
+ "es-module-lexer": "^1.5.4",
+ "fast-glob": "^3.3.2",
+ "magic-string": "^0.30.11"
+ }
+ },
+ "node_modules/vite-plugin-dynamic-import/node_modules/magic-string": {
+ "version": "0.30.17",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz",
+ "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==",
+ "dev": true,
+ "dependencies": {
+ "@jridgewell/sourcemap-codec": "^1.5.0"
+ }
+ },
"node_modules/vite-plugin-html": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/vite-plugin-html/-/vite-plugin-html-3.2.2.tgz",
@@ -30800,8 +30518,7 @@
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-8.0.0.tgz",
"integrity": "sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==",
- "dev": true,
- "peer": true
+ "dev": true
},
"node_modules/w3c-hr-time": {
"version": "1.0.2",
@@ -31355,47 +31072,6 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/widest-line": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz",
- "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==",
- "dev": true,
- "dependencies": {
- "string-width": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/widest-line/node_modules/emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "dev": true
- },
- "node_modules/widest-line/node_modules/is-fullwidth-code-point": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/widest-line/node_modules/string-width": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "dev": true,
- "dependencies": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/word-wrap": {
"version": "1.2.5",
"resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
@@ -32024,11 +31700,10 @@
}
},
"packages/ketcher-core": {
- "version": "3.0.0-rc.1",
+ "version": "3.0.0-rc.6",
"license": "Apache-2.0",
"dependencies": {
"@babel/runtime": "^7.17.9",
- "ajv": "^8.10.0",
"assert": "^2.0.0",
"d3": "^7.8.5",
"file-saver": "^2.0.5",
@@ -32052,6 +31727,7 @@
"@types/jest": "^27.0.3",
"@types/node": "^16.11.12",
"@zerollup/ts-transform-paths": "^1.7.18",
+ "ajv-cli": "^5.0.0",
"babel-jest": "26.6.0",
"cross-env": "^7.0.3",
"eslint": "^8.44.0",
@@ -32070,7 +31746,7 @@
"rollup-plugin-visualizer": "^5.5.2",
"ts-jest": "26.5.6",
"ttypescript": "^1.5.13",
- "typedoc": "^0.22.17",
+ "typedoc": "^0.24.8",
"typedoc-plugin-markdown": "^3.12.1",
"typescript": "^4.5.2"
},
@@ -32091,66 +31767,30 @@
"rollup": "^1.20.0 || ^2.0.0"
}
},
- "packages/ketcher-core/node_modules/glob": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
- "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
- "dev": true,
- "dependencies": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^5.0.1",
- "once": "^1.3.0"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "packages/ketcher-core/node_modules/shiki": {
- "version": "0.10.1",
- "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.10.1.tgz",
- "integrity": "sha512-VsY7QJVzU51j5o1+DguUd+6vmCmZ5v/6gYu4vyYAhzjuNQU6P/vmSy4uQaOhvje031qQMiW0d2BwgMH52vqMng==",
- "dev": true,
- "dependencies": {
- "jsonc-parser": "^3.0.0",
- "vscode-oniguruma": "^1.6.1",
- "vscode-textmate": "5.2.0"
- }
- },
"packages/ketcher-core/node_modules/typedoc": {
- "version": "0.22.18",
- "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.22.18.tgz",
- "integrity": "sha512-NK9RlLhRUGMvc6Rw5USEYgT4DVAUFk7IF7Q6MYfpJ88KnTZP7EneEa4RcP+tX1auAcz7QT1Iy0bUSZBYYHdoyA==",
+ "version": "0.24.8",
+ "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.24.8.tgz",
+ "integrity": "sha512-ahJ6Cpcvxwaxfu4KtjA8qZNqS43wYt6JL27wYiIgl1vd38WW/KWX11YuAeZhuz9v+ttrutSsgK+XO1CjL1kA3w==",
"dev": true,
+ "license": "Apache-2.0",
"dependencies": {
- "glob": "^8.0.3",
"lunr": "^2.3.9",
- "marked": "^4.0.16",
- "minimatch": "^5.1.0",
- "shiki": "^0.10.1"
+ "marked": "^4.3.0",
+ "minimatch": "^9.0.0",
+ "shiki": "^0.14.1"
},
"bin": {
"typedoc": "bin/typedoc"
},
"engines": {
- "node": ">= 12.10.0"
+ "node": ">= 14.14"
},
"peerDependencies": {
- "typescript": "4.0.x || 4.1.x || 4.2.x || 4.3.x || 4.4.x || 4.5.x || 4.6.x || 4.7.x"
+ "typescript": "4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x"
}
},
- "packages/ketcher-core/node_modules/vscode-textmate": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-5.2.0.tgz",
- "integrity": "sha512-Uw5ooOQxRASHgu6C7GVvUxisKXfSgW4oFlO+aa+PAkgmH89O3CXxEEzNRNtHSqtXFTl0nAC1uYj0GMSH27uwtQ==",
- "dev": true
- },
"packages/ketcher-macromolecules": {
- "version": "3.0.0-rc.1",
+ "version": "3.0.0-rc.6",
"license": "Apache-2.0",
"dependencies": {
"@babel/runtime": "^7.17.9",
@@ -32193,7 +31833,6 @@
"@types/node": "^16.11.12",
"@types/react": "^18.0.25",
"@types/react-dom": "^18.0.8",
- "@types/testing-library__jest-dom": "^5.14.2",
"autoprefixer": "^10.2.5",
"babel-jest": "^27.4.5",
"cross-env": "^7.0.3",
@@ -32207,7 +31846,6 @@
"jest": "^27.4.5",
"less": "^3.12.2",
"npm-run-all": "^4.1.5",
- "postcss": "^8.2.10",
"prettier": "^2.5.1",
"rollup": "^2.60.2",
"rollup-plugin-cleanup": "^3.2.1",
@@ -32216,7 +31854,6 @@
"rollup-plugin-postcss": "^4.0.2",
"rollup-plugin-typescript2": "^0.31.1",
"rollup-plugin-visualizer": "^5.5.2",
- "stylelint": "13.13.1",
"ts-jest": "^27.1.2",
"typescript": "^4.5.2"
},
@@ -33579,7 +33216,7 @@
}
},
"packages/ketcher-react": {
- "version": "3.0.0-rc.1",
+ "version": "3.0.0-rc.6",
"license": "Apache-2.0",
"dependencies": {
"@babel/runtime": "^7.17.9",
@@ -33595,7 +33232,7 @@
"file-saver": "^2.0.2",
"font-face-observer": "^1.0.0",
"hoist-non-react-statics": "^3.3.2",
- "intersection-observer": "^0.12.0",
+ "intersection-observer": "^0.12.2",
"ketcher-core": "*",
"lodash": "^4.17.21",
"miew-react": "^1.0.0",
@@ -33655,7 +33292,6 @@
"jest": "^27.4.5",
"less": "^3.12.2",
"npm-run-all": "^4.1.5",
- "postcss": "^8.2.10",
"prettier": "^2.5.1",
"rollup": "^2.60.2",
"rollup-plugin-cleanup": "^3.2.1",
@@ -33666,7 +33302,6 @@
"rollup-plugin-string": "^3.0.0",
"rollup-plugin-typescript2": "^0.31.1",
"rollup-plugin-visualizer": "^5.5.2",
- "stylelint": "13.13.1",
"ts-jest": "^27.1.2",
"typescript": "^4.5.2"
},
@@ -35314,11 +34949,11 @@
}
},
"packages/ketcher-standalone": {
- "version": "3.0.0-rc.1",
+ "version": "3.0.0-rc.6",
"license": "Apache-2.0",
"dependencies": {
"@babel/runtime": "^7.17.9",
- "indigo-ketcher": "1.28.0-rc.1",
+ "indigo-ketcher": "1.28.0-rc.3",
"ketcher-core": "*"
},
"devDependencies": {
diff --git a/package.json b/package.json
index 6efdad5902..e998c682bc 100644
--- a/package.json
+++ b/package.json
@@ -9,7 +9,6 @@
"ketcher-autotests",
"example",
"example-ssr",
- "example-separate-editors",
"demo"
],
"scripts": {
@@ -49,11 +48,13 @@
"husky": "^8.0.3",
"lint-staged": "^12.1.2",
"npm-run-all": "^4.1.5",
+ "postcss": "^8.5.1",
+ "postcss-less": "^6.0.0",
"prettier": "2.8.0",
"prettier-config-standard": "^5.0.0",
- "stylelint": "^13.13.1",
- "stylelint-config-prettier": "^9.0.3",
- "stylelint-config-standard": "22.0.0"
+ "stylelint": "^14.16.1",
+ "stylelint-config-prettier": "^9.0.5",
+ "stylelint-config-standard": "^23.0.0"
},
"resolutions": {
"react-error-overlay": "6.0.9"
@@ -65,10 +66,22 @@
},
"overrides": {
"minimatch": "^9.0.3",
- "nth-check": "^2.1.1",
- "postcss": "8.4.31"
+ "nth-check": "^2.1.1"
},
"dependencies": {
"@playwright/test": "^1.44.1"
+ },
+ "stylelint": {
+ "overrides": [
+ {
+ "files": [
+ "**/*.less"
+ ],
+ "customSyntax": "postcss-less"
+ }
+ ],
+ "rules": {
+ "selector-class-pattern": null
+ }
}
}
diff --git a/packages/ketcher-core/.eslintignore b/packages/ketcher-core/.eslintignore
index d65715f427..07b83127af 100644
--- a/packages/ketcher-core/.eslintignore
+++ b/packages/ketcher-core/.eslintignore
@@ -1,3 +1,6 @@
dist/
docs/
-node_modules/
\ No newline at end of file
+node_modules/
+
+# ajv validation file generated with npm run ajv
+src/domain/serializers/ket/compiledSchema.js
\ No newline at end of file
diff --git a/packages/ketcher-core/.prettierignore b/packages/ketcher-core/.prettierignore
index d65715f427..c5451140ee 100644
--- a/packages/ketcher-core/.prettierignore
+++ b/packages/ketcher-core/.prettierignore
@@ -1,3 +1,5 @@
dist/
docs/
-node_modules/
\ No newline at end of file
+node_modules/
+
+src/domain/serializers/ket/compiledSchema.js
\ No newline at end of file
diff --git a/packages/ketcher-core/package.json b/packages/ketcher-core/package.json
index 7d3bc974e3..f7b85000aa 100644
--- a/packages/ketcher-core/package.json
+++ b/packages/ketcher-core/package.json
@@ -1,6 +1,6 @@
{
"name": "ketcher-core",
- "version": "3.0.0-rc.1",
+ "version": "3.0.0-rc.6",
"description": "Web-based molecule sketcher",
"license": "Apache-2.0",
"homepage": "http://lifescience.opensource.epam.com/ketcher",
@@ -29,7 +29,10 @@
"node": ">=14"
},
"scripts": {
+ "ajv": "ajv compile -s src/domain/serializers/ket/schema.json -o src/domain/serializers/ket/compiledSchema.js",
+ "prebuild": "npm run ajv",
"build": "cross-env NODE_ENV=production rollup -c -m true",
+ "prestart": "npm run ajv",
"start": "cross-env NODE_ENV=development rollup -c -m true -w",
"test": "run-s test:prettier test:eslint:quiet test:types test:unit",
"test:eslint": "eslint . --ext .ts,.js",
@@ -44,7 +47,6 @@
},
"dependencies": {
"@babel/runtime": "^7.17.9",
- "ajv": "^8.10.0",
"assert": "^2.0.0",
"d3": "^7.8.5",
"file-saver": "^2.0.5",
@@ -68,6 +70,7 @@
"@types/jest": "^27.0.3",
"@types/node": "^16.11.12",
"@zerollup/ts-transform-paths": "^1.7.18",
+ "ajv-cli": "^5.0.0",
"babel-jest": "26.6.0",
"cross-env": "^7.0.3",
"eslint": "^8.44.0",
@@ -86,7 +89,7 @@
"rollup-plugin-visualizer": "^5.5.2",
"ts-jest": "26.5.6",
"ttypescript": "^1.5.13",
- "typedoc": "^0.22.17",
+ "typedoc": "^0.24.8",
"typedoc-plugin-markdown": "^3.12.1",
"typescript": "^4.5.2"
},
diff --git a/packages/ketcher-core/src/application/editor/MacromoleculesConverter.ts b/packages/ketcher-core/src/application/editor/MacromoleculesConverter.ts
index 4fa2aac34b..f6d228c1e8 100644
--- a/packages/ketcher-core/src/application/editor/MacromoleculesConverter.ts
+++ b/packages/ketcher-core/src/application/editor/MacromoleculesConverter.ts
@@ -294,6 +294,11 @@ export class MacromoleculesConverter {
reStruct?.bonds.set(bondId, new ReBond(bond));
});
+ struct.findConnectedComponents();
+ struct.setImplicitHydrogen();
+ struct.setStereoLabelsToAtoms();
+ struct.markFragments();
+
return { struct, reStruct, conversionErrorMessage };
}
diff --git a/packages/ketcher-core/src/application/editor/data/monomers.ket b/packages/ketcher-core/src/application/editor/data/monomers.ket
index df7070e117..401d3ff52a 100644
--- a/packages/ketcher-core/src/application/editor/data/monomers.ket
+++ b/packages/ketcher-core/src/application/editor/data/monomers.ket
@@ -2236,10 +2236,10 @@
"$ref": "monomerTemplate-5hMedC___5-Hydroxymethyl dC"
},
{
- "$ref": "monomerTemplate-Super-dG___Super G"
+ "$ref": "monomerTemplate-Super-dG___Super-G"
},
{
- "$ref": "monomerTemplate-Super-dT___Super T"
+ "$ref": "monomerTemplate-Super-dT___Super-T"
},
{
"$ref": "monomerTemplate-5Br-dU___5-Bromo-deoxyuridine"
@@ -170745,11 +170745,11 @@
}
]
},
- "monomerTemplate-Super-dG___Super G": {
+ "monomerTemplate-Super-dG___Super-G": {
"type": "monomerTemplate",
- "id": "Super-dG___Super G",
+ "id": "Super-dG___Super-G",
"fullName": "8-aza-7-deazaguanosine",
- "alias": "Super G",
+ "alias": "Super-G",
"naturalAnalogShort": "G",
"class": "RNA",
"classHELM": "RNA",
@@ -171161,11 +171161,11 @@
}
]
},
- "monomerTemplate-Super-dT___Super T": {
+ "monomerTemplate-Super-dT___Super-T": {
"type": "monomerTemplate",
- "id": "Super-dT___Super T",
+ "id": "Super-dT___Super-T",
"fullName": "5-hydroxybutynl-2’-deoxyuridine",
- "alias": "Super T",
+ "alias": "Super-T",
"naturalAnalogShort": "T",
"class": "RNA",
"classHELM": "RNA",
diff --git a/packages/ketcher-core/src/application/ketcher.ts b/packages/ketcher-core/src/application/ketcher.ts
index 7e6d600686..8a4289114c 100644
--- a/packages/ketcher-core/src/application/ketcher.ts
+++ b/packages/ketcher-core/src/application/ketcher.ts
@@ -371,8 +371,9 @@ export class Ketcher {
}
async setMolecule(structStr: string): Promise {
- if (CoreEditor.provideEditorInstance()?.isSequenceEditInRNABuilderMode)
- return;
+ const macromoleculesEditor = CoreEditor.provideEditorInstance();
+
+ if (macromoleculesEditor?.isSequenceEditInRNABuilderMode) return;
runAsyncAction(async () => {
assert(typeof structStr === 'string');
@@ -380,6 +381,7 @@ export class Ketcher {
if (window.isPolymerEditorTurnedOn) {
deleteAllEntitiesOnCanvas();
await parseAndAddMacromoleculesOnCanvas(structStr, this.structService);
+ macromoleculesEditor?.zoomToStructuresIfNeeded();
} else {
const struct: Struct = await prepareStructToRender(
structStr,
@@ -411,14 +413,22 @@ export class Ketcher {
}
async addFragment(structStr: string): Promise {
- if (CoreEditor.provideEditorInstance()?.isSequenceEditInRNABuilderMode)
- return;
+ const macromoleculesEditor = CoreEditor.provideEditorInstance();
+
+ if (macromoleculesEditor?.isSequenceEditInRNABuilderMode) return;
runAsyncAction(async () => {
assert(typeof structStr === 'string');
if (window.isPolymerEditorTurnedOn) {
+ const isCanvasEmptyBeforeOpenStructure =
+ !macromoleculesEditor.drawingEntitiesManager.hasDrawingEntities;
+
await parseAndAddMacromoleculesOnCanvas(structStr, this.structService);
+
+ if (isCanvasEmptyBeforeOpenStructure) {
+ macromoleculesEditor?.zoomToStructuresIfNeeded();
+ }
} else {
const struct: Struct = await prepareStructToRender(
structStr,
diff --git a/packages/ketcher-core/src/application/render/renderers/AtomRenderer.ts b/packages/ketcher-core/src/application/render/renderers/AtomRenderer.ts
index 17503cf073..123f2e1f45 100644
--- a/packages/ketcher-core/src/application/render/renderers/AtomRenderer.ts
+++ b/packages/ketcher-core/src/application/render/renderers/AtomRenderer.ts
@@ -1,5 +1,5 @@
import { BaseRenderer } from 'application/render/renderers/BaseRenderer';
-import { Atom } from 'domain/entities/CoreAtom';
+import { Atom, AtomRadical } from 'domain/entities/CoreAtom';
import { Coordinates } from 'application/editor/shared/coordinates';
import { CoreEditor, ZoomTool } from 'application/editor';
import { AtomLabel, ElementColor, Elements } from 'domain/constants';
@@ -163,7 +163,7 @@ export class AtomRenderer extends BaseRenderer {
const isAtomInMiddleOfChain = (atomNeighborsHalfEdges?.length || 0) >= 2;
const hasCharge = this.atom.hasCharge;
const hasRadical = this.atom.hasRadical;
- const hasAlias = this.atom.properties.alias;
+ const hasAlias = this.atom.hasAlias;
const hasExplicitValence = this.atom.hasExplicitValence;
const hasExplicitIsotope = this.atom.hasExplicitIsotope;
@@ -263,24 +263,27 @@ export class AtomRenderer extends BaseRenderer {
textElement
?.append('tspan')
.attr('dy', this.atom.hasExplicitIsotope ? 4 : 0)
- .text(this.atom.properties.alias || this.atom.label);
+ .text(this.labelText);
}
- if (hydrogenAmount > 0) {
+ if (!this.atom.hasAlias && hydrogenAmount > 0) {
textElement
?.append('tspan')
- .attr('dy', this.atom.hasExplicitIsotope ? 4 : 0)
+ .attr(
+ 'dy',
+ this.atom.hasExplicitIsotope && shouldHydrogenBeOnLeft ? 4 : 0,
+ )
.text('H');
- }
- if (hydrogenAmount > 1) {
- textElement?.append('tspan').text(hydrogenAmount).attr('dy', 3);
+ if (hydrogenAmount > 1) {
+ textElement?.append('tspan').text(hydrogenAmount).attr('dy', 3);
+ }
}
if (shouldHydrogenBeOnLeft) {
textElement
?.append('tspan')
- .text(this.atom.properties.alias || this.atom.label)
+ .text(this.labelText)
.attr('dy', hydrogenAmount > 1 ? -3 : 0);
}
@@ -345,7 +348,7 @@ export class AtomRenderer extends BaseRenderer {
?.append('tspan')
.text(
(Math.abs(charge) > 1 ? Math.abs(charge) : '') +
- (charge > 0 ? '+' : '-'),
+ (charge > 0 ? '+' : '–'),
)
.attr('fill', this.labelColor)
.attr('dy', -4);
@@ -362,7 +365,7 @@ export class AtomRenderer extends BaseRenderer {
this.radicalElement = this.rootElement?.append('g');
switch (radical) {
- case 1:
+ case AtomRadical.Single:
this.radicalElement
?.append('circle')
.attr('cx', 3)
@@ -376,7 +379,7 @@ export class AtomRenderer extends BaseRenderer {
.attr('r', 2)
.attr('fill', this.labelColor);
break;
- case 2:
+ case AtomRadical.Doublet:
this.radicalElement
?.append('circle')
.attr('cx', 0)
@@ -384,7 +387,7 @@ export class AtomRenderer extends BaseRenderer {
.attr('r', 2)
.attr('fill', this.labelColor);
break;
- case 3:
+ case AtomRadical.Triplet:
this.radicalElement
?.append('path')
.attr('d', `M 0 -5 L 2 -10 L 4 -5 M -6 -5 L -4 -10 L -2 -5`)
@@ -413,6 +416,12 @@ export class AtomRenderer extends BaseRenderer {
const explicitIsotope = this.atom.properties.isotope as number;
this.textElement
+ /*
+ * TODO: Currently it's always appended in front of the atom (1H3C or 1CH3), however, in micro mode isotope is placed before the exact atom, not the hydrogen (H31C or 1CH3)
+ * While the latter is displayed correctly, the former has to be fixed. Can go through all the tspans and use label tspan instead of :first-child here
+ * However, now it leads to the atom properties being positioned incorrectly due to 'dy' attribute being relative to the previous tspan
+ * Probably we could consider another approach for positioning the atom properties?
+ */
?.insert('tspan', ':first-child')
.text(explicitIsotope)
.attr('fill', this.labelColor)
diff --git a/packages/ketcher-core/src/domain/constants/monomers.ts b/packages/ketcher-core/src/domain/constants/monomers.ts
index ab39af2321..e4902be4df 100644
--- a/packages/ketcher-core/src/domain/constants/monomers.ts
+++ b/packages/ketcher-core/src/domain/constants/monomers.ts
@@ -22,6 +22,11 @@ export enum RnaDnaNaturalAnaloguesEnum {
URACIL = 'U',
}
+export enum RnaDnaBaseNames {
+ URACIL = 'Uracil',
+ THYMINE = 'Thymine',
+}
+
export enum StandardAmbiguousRnaBase {
N = 'N',
B = 'B',
diff --git a/packages/ketcher-core/src/domain/entities/CoreAtom.ts b/packages/ketcher-core/src/domain/entities/CoreAtom.ts
index 2c201bc002..e7bd787358 100644
--- a/packages/ketcher-core/src/domain/entities/CoreAtom.ts
+++ b/packages/ketcher-core/src/domain/entities/CoreAtom.ts
@@ -8,11 +8,18 @@ import { AtomRenderer } from 'application/render/renderers/AtomRenderer';
import { isNumber } from 'lodash';
import { MonomerToAtomBond } from './MonomerToAtomBond';
+export enum AtomRadical {
+ None,
+ Single,
+ Doublet,
+ Triplet,
+}
+
export interface AtomProperties {
charge?: number | null;
explicitValence?: number;
isotope?: number | null;
- radical?: number;
+ radical?: AtomRadical;
alias?: string | null;
}
export class Atom extends DrawingEntity {
@@ -86,6 +93,10 @@ export class Atom extends DrawingEntity {
return connectionsAmount;
}
+ public get hasAlias() {
+ return Boolean(this.properties.alias);
+ }
+
public get hasRadical() {
return isNumber(this.properties.radical) && this.properties.radical !== 0;
}
@@ -105,14 +116,108 @@ export class Atom extends DrawingEntity {
return isNumber(this.properties.isotope) && this.properties.isotope >= 0;
}
+ private get radicalAmount() {
+ switch (this.properties.radical) {
+ case AtomRadical.Single:
+ case AtomRadical.Triplet:
+ return 2;
+ case AtomRadical.Doublet:
+ return 1;
+ default:
+ return 0;
+ }
+ }
+
+ private get valenceWithoutHydrogen() {
+ const charge = this.properties.charge || 0;
+ const label = this.label;
+ const element = Elements.get(this.label);
+ // if (!element) {
+ // // query atom, skip
+ // this.implicitH = 0;
+ // return 0;
+ // }
+
+ const elementGroupNumber = element?.group;
+ const radicalAmount = this.radicalAmount;
+ const connectionAmount = this.calculateConnections();
+ const absoluteCharge = Math.abs(charge);
+
+ if (elementGroupNumber === 3) {
+ if (
+ label === AtomLabel.B ||
+ label === AtomLabel.Al ||
+ label === AtomLabel.Ga ||
+ label === AtomLabel.In
+ ) {
+ if (charge === -1) {
+ if (radicalAmount + connectionAmount <= 4) {
+ return radicalAmount + connectionAmount;
+ }
+ }
+ }
+ } else if (elementGroupNumber === 5) {
+ if (label === AtomLabel.N || label === AtomLabel.P) {
+ if (charge === 1 || charge === 2) {
+ return radicalAmount + connectionAmount;
+ }
+ } else if (
+ label === AtomLabel.Sb ||
+ label === AtomLabel.Bi ||
+ label === AtomLabel.As
+ ) {
+ if (charge === 1 || charge === 2) {
+ return radicalAmount + connectionAmount;
+ }
+ }
+ } else if (elementGroupNumber === 6) {
+ if (label === AtomLabel.O) {
+ if (charge >= 1) {
+ return radicalAmount + connectionAmount;
+ }
+ } else if (
+ label === AtomLabel.S ||
+ label === AtomLabel.Se ||
+ label === AtomLabel.Po
+ ) {
+ if (charge === 1) {
+ return radicalAmount + connectionAmount;
+ }
+ }
+ } else if (elementGroupNumber === 7) {
+ if (
+ label === AtomLabel.Cl ||
+ label === AtomLabel.Br ||
+ label === AtomLabel.I ||
+ label === AtomLabel.At
+ ) {
+ if (charge === 1) {
+ return radicalAmount + connectionAmount;
+ }
+ }
+ }
+
+ return radicalAmount + connectionAmount + absoluteCharge;
+ }
+
calculateValence() {
+ if (this.hasExplicitValence) {
+ const valence = this.properties.explicitValence as number;
+ const hydrogenAmount = valence - this.valenceWithoutHydrogen;
+
+ return {
+ valence,
+ hydrogenAmount,
+ };
+ }
+
const label = this.label;
const element = Elements.get(label);
const elementGroupNumber = element?.group;
const connectionAmount = this.calculateConnections();
- const radicalAmount = this.properties.radical || 0;
- const absCharge = 0;
+ const radicalAmount = this.radicalAmount;
const charge = this.properties.charge || 0;
+ const absCharge = Math.abs(charge);
let valence = connectionAmount;
let hydrogenAmount = 0;
@@ -358,6 +463,7 @@ export class Atom extends DrawingEntity {
if (connectionAmount + radicalAmount + absCharge === 0) valence = 1;
else hydrogenAmount = -1;
}
+
// if (Atom.isHeteroAtom(label) && this.implicitHCount !== null) {
// hydrogenAmount = this.implicitHCount;
// }
diff --git a/packages/ketcher-core/src/domain/entities/DrawingEntitiesManager.ts b/packages/ketcher-core/src/domain/entities/DrawingEntitiesManager.ts
index fbf257fb97..e67702a52e 100644
--- a/packages/ketcher-core/src/domain/entities/DrawingEntitiesManager.ts
+++ b/packages/ketcher-core/src/domain/entities/DrawingEntitiesManager.ts
@@ -51,13 +51,15 @@ import {
import { Coordinates, CoreEditor } from 'application/editor/internal';
import {
getNextMonomerInChain,
- getSugarFromRnaBase,
isAmbiguousMonomerLibraryItem,
isRnaBaseOrAmbiguousRnaBase,
isValidNucleoside,
isValidNucleotide,
} from 'domain/helpers/monomers';
-import { ChainsCollection } from 'domain/entities/monomer-chains/ChainsCollection';
+import {
+ ChainsCollection,
+ GrouppedChain,
+} from 'domain/entities/monomer-chains/ChainsCollection';
import { SequenceRenderer } from 'application/render/renderers/sequence/SequenceRenderer';
import { Nucleoside } from './Nucleoside';
import { Nucleotide } from './Nucleotide';
@@ -1628,6 +1630,7 @@ export class DrawingEntitiesManager {
command.merge(this.recalculateAntisenseChains());
+ // not only snake mode???
if (isSnakeMode) {
const rearrangedMonomersSet: Set = new Set();
let lastPosition = new Vec2({
@@ -1635,6 +1638,8 @@ export class DrawingEntitiesManager {
y: MONOMER_START_Y_POSITION,
});
let maxVerticalDistance = 0;
+ let isNeedRearrangeAntisense = true;
+
chainsCollection = ChainsCollection.fromMonomers([
...this.monomers.values(),
]);
@@ -1645,49 +1650,58 @@ export class DrawingEntitiesManager {
return;
}
- const complimentaryChainsWithData =
+ const currentWithComplementaryData =
chainsCollection.getComplimentaryChainsWithData(chain);
- const antisenseChainsWithData = complimentaryChainsWithData.filter(
- (complimentaryChainWithData) =>
- complimentaryChainWithData.complimentaryChain.firstMonomer
- ?.monomerItem.isAntisense,
- );
- const antisenseChainsStartIndexes = antisenseChainsWithData.map(
- (antisenseChainWithData) => {
- const firstConnectedAntisenseNodeIndex =
- antisenseChainWithData.complimentaryChain.nodes.findIndex(
- (node) => {
- return (
- node ===
- antisenseChainWithData.firstConnectedComplimentaryNode
- );
- },
+
+ const currentWithAntisenseConnectionComplementaryData =
+ currentWithComplementaryData.filter(
+ (currentWithComplementaryDataEach) =>
+ currentWithComplementaryDataEach.complimentaryChain.firstMonomer
+ ?.monomerItem.isAntisense,
+ );
+
+ const shiftAntisenseChainsStartIndexes =
+ currentWithAntisenseConnectionComplementaryData.map(
+ (currentWithAntisenseConnectionComplementaryDataEvery) => {
+ const firstConnectedAntisenseNodeIndex =
+ currentWithAntisenseConnectionComplementaryDataEvery.complimentaryChain.nodes.findIndex(
+ (node) => {
+ return (
+ node ===
+ currentWithAntisenseConnectionComplementaryDataEvery.firstConnectedComplimentaryNode
+ );
+ },
+ );
+ const senseNodeIndex = chain.nodes.indexOf(
+ currentWithAntisenseConnectionComplementaryDataEvery.firstConnectedNode,
);
- const senseNodeIndex = chain.nodes.indexOf(
- antisenseChainWithData.firstConnectedNode,
- );
- if (!isNumber(senseNodeIndex)) {
- return -1;
- }
+ if (!isNumber(senseNodeIndex)) {
+ return -1;
+ }
- return senseNodeIndex - firstConnectedAntisenseNodeIndex;
- },
- );
- const antisenseChainsStartIndexesMap = new Map(
- antisenseChainsStartIndexes.map(
- (antisenseChainsStartIndex, index) => [
- antisenseChainsStartIndex,
- antisenseChainsWithData[index],
+ return senseNodeIndex - firstConnectedAntisenseNodeIndex;
+ },
+ );
+ const shiftAntisenseChainsStartIndexesToComplimentaryChainMap = new Map(
+ shiftAntisenseChainsStartIndexes.map(
+ (shiftAntisenseChainsStartIndex, index) => [
+ shiftAntisenseChainsStartIndex,
+ currentWithAntisenseConnectionComplementaryData[index],
],
),
);
let restOfRowsWithAntisense = 0;
let isPreviousChainWithAntisense = false;
+ let isNextSenseBackboneSameLine = false;
+ const antisenseIndexShiftToLeft = Math.min(
+ 0,
+ ...shiftAntisenseChainsStartIndexes,
+ );
for (
- let nodeIndex = Math.min(0, ...antisenseChainsStartIndexes);
+ let nodeIndex = antisenseIndexShiftToLeft;
nodeIndex < chain.length;
nodeIndex++
) {
@@ -1697,13 +1711,35 @@ export class DrawingEntitiesManager {
return;
}
- const antisenseChainWithData =
- antisenseChainsStartIndexesMap.get(nodeIndex);
+ const currentWithComplementaryDataByShiftedIndex =
+ shiftAntisenseChainsStartIndexesToComplimentaryChainMap.get(
+ nodeIndex,
+ );
+
+ if (currentWithComplementaryDataByShiftedIndex) {
+ const antisenseChainsWithComplementaryData =
+ chainsCollection.getComplimentaryChainsWithData(
+ currentWithComplementaryDataByShiftedIndex.complimentaryChain,
+ );
+ if (antisenseChainsWithComplementaryData.length > 1) {
+ antisenseChainsWithComplementaryData.forEach((ch) => {
+ const nodeAntiSenseIndex =
+ nodeIndex - antisenseIndexShiftToLeft;
+ const antisenseHasNextConnectionToAnotherChain =
+ ch.chainIdxConnection > nodeAntiSenseIndex &&
+ ch.complimentaryChain !== chain;
+ if (antisenseHasNextConnectionToAnotherChain) {
+ isNextSenseBackboneSameLine = true;
+ }
+ });
+ }
- if (antisenseChainWithData) {
- const { rowsUsedByAntisense, command: rearrangedAntisenseCommand } =
- this.rearrangeAntisenseChain(
- antisenseChainWithData.complimentaryChain,
+ if (isNeedRearrangeAntisense) {
+ const {
+ rowsUsedByAntisense,
+ command: rearrangedAntisenseCommand,
+ } = this.rearrangeAntisenseChain(
+ currentWithComplementaryDataByShiftedIndex.complimentaryChain,
lastPosition,
canvasWidth,
rearrangedMonomersSet,
@@ -1711,8 +1747,10 @@ export class DrawingEntitiesManager {
needRepositionMonomers,
);
- restOfRowsWithAntisense = rowsUsedByAntisense;
- command.merge(rearrangedAntisenseCommand);
+ restOfRowsWithAntisense = rowsUsedByAntisense;
+ command.merge(rearrangedAntisenseCommand);
+ }
+
isPreviousChainWithAntisense = true;
}
@@ -1773,15 +1811,22 @@ export class DrawingEntitiesManager {
});
}
}
+ isNeedRearrangeAntisense = true;
- lastPosition = getFirstPosition(maxVerticalDistance, lastPosition);
- maxVerticalDistance = 0;
+ if (!isNextSenseBackboneSameLine) {
+ lastPosition = getFirstPosition(maxVerticalDistance, lastPosition);
+ maxVerticalDistance = 0;
- if (isPreviousChainWithAntisense) {
- lastPosition = lastPosition.add(
- new Vec2(0, SNAKE_LAYOUT_Y_OFFSET_BETWEEN_CHAINS),
- );
- isPreviousChainWithAntisense = false;
+ if (isPreviousChainWithAntisense) {
+ lastPosition = lastPosition.add(
+ new Vec2(0, SNAKE_LAYOUT_Y_OFFSET_BETWEEN_CHAINS),
+ );
+ isPreviousChainWithAntisense = false;
+ }
+ } else {
+ lastPosition = lastPosition.add(new Vec2(CELL_WIDTH, 0));
+ isNextSenseBackboneSameLine = false;
+ isNeedRearrangeAntisense = false;
}
});
@@ -1981,6 +2026,7 @@ export class DrawingEntitiesManager {
monomerToNewMonomer.get(atom.monomer) as BaseMonomer,
atom.atomIdInMicroMode,
atom.label,
+ atom.properties,
);
const addedAtom = atomAddCommand.operations[0].atom as Atom;
@@ -2704,7 +2750,6 @@ export class DrawingEntitiesManager {
const chainsCollection = ChainsCollection.fromMonomers([
...this.monomers.values(),
]);
- const senseToAntisenseChains = new Map();
const handledChains = new Set();
this.monomers.forEach((monomer) => {
@@ -2722,43 +2767,14 @@ export class DrawingEntitiesManager {
return;
}
- let senseChain: Chain;
- const complimentaryChainsWithData =
- chainsCollection.getComplimentaryChainsWithData(chain);
- const chainsToCheck = new Set();
-
- complimentaryChainsWithData.forEach((complimentaryChainWithData) => {
- const hasHydrogenBondWithRnaBase =
- complimentaryChainWithData.complimentaryChain.monomers.some(
- (monomer) => {
- return (
- (isRnaBaseOrAmbiguousRnaBase(monomer) &&
- Boolean(getSugarFromRnaBase(monomer)) &&
- monomer.hydrogenBonds.length > 0) ||
- monomer.hydrogenBonds.some((hydrogenBond) => {
- const anotherMonomer =
- hydrogenBond.getAnotherMonomer(monomer);
-
- return (
- isRnaBaseOrAmbiguousRnaBase(anotherMonomer) &&
- Boolean(getSugarFromRnaBase(anotherMonomer))
- );
- })
- );
- },
- );
-
- if (hasHydrogenBondWithRnaBase) {
- chainsToCheck.add(complimentaryChainWithData.complimentaryChain);
- }
- });
+ let senseChain: GrouppedChain;
+ const chainsToCheck =
+ chainsCollection.getAllChainsWithConnectionInBlock(chain);
- chainsToCheck.add(chain);
-
- const chainToMonomers = new Map();
+ const chainToMonomers = new Map();
chainsToCheck.forEach((chainToCheck) => {
- chainToMonomers.set(chainToCheck, chainToCheck.monomers);
+ chainToMonomers.set(chainToCheck, chainToCheck.chain.monomers);
});
const largestChainsMonomersAmount = Math.max(
@@ -2772,7 +2788,7 @@ export class DrawingEntitiesManager {
if (largestChains.length === 1) {
senseChain = largestChains[0][0];
} else {
- const chainsToCenters = new Map();
+ const chainsToCenters = new Map();
largestChains.forEach(([chainToCheck, monomers]) => {
const chainBbox = DrawingEntitiesManager.geStructureBbox(monomers);
@@ -2799,32 +2815,18 @@ export class DrawingEntitiesManager {
senseChain = chainWithLowestCenter[0];
}
- chainsToCheck.forEach((chainToCheck) => {
- if (chainToCheck === senseChain) {
- handledChains.add(chainToCheck);
-
- return;
- }
-
- if (!senseToAntisenseChains.has(senseChain)) {
- senseToAntisenseChains.set(senseChain, []);
+ const { group: senseGroup } = senseChain;
+ chainsToCheck.forEach(({ chain, group }) => {
+ handledChains.add(chain);
+ if (group === senseGroup) {
+ chain.monomers.forEach((monomer) => {
+ command.merge(this.markMonomerAsSense(monomer));
+ });
+ } else {
+ chain.monomers.forEach((monomer) => {
+ command.merge(this.markMonomerAsAntisense(monomer));
+ });
}
-
- senseToAntisenseChains.get(senseChain)?.push(chainToCheck);
-
- handledChains.add(chainToCheck);
- });
- });
-
- senseToAntisenseChains.forEach((antisenseChains, senseChain) => {
- senseChain.monomers.forEach((monomer) => {
- command.merge(this.markMonomerAsSense(monomer));
- });
-
- antisenseChains.forEach((antisenseChain) => {
- antisenseChain.monomers.forEach((monomer) => {
- command.merge(this.markMonomerAsAntisense(monomer));
- });
});
});
diff --git a/packages/ketcher-core/src/domain/entities/monomer-chains/ChainsCollection.ts b/packages/ketcher-core/src/domain/entities/monomer-chains/ChainsCollection.ts
index a9e7bec603..0339be368c 100644
--- a/packages/ketcher-core/src/domain/entities/monomer-chains/ChainsCollection.ts
+++ b/packages/ketcher-core/src/domain/entities/monomer-chains/ChainsCollection.ts
@@ -16,6 +16,7 @@ import {
getNextMonomerInChain,
getPreviousMonomerInChain,
getRnaBaseFromSugar,
+ getSugarFromRnaBase,
isMonomerConnectedToR2RnaBase,
isRnaBaseOrAmbiguousRnaBase,
} from 'domain/helpers/monomers';
@@ -28,8 +29,14 @@ export interface ComplimentaryChainsWithData {
chain: Chain;
firstConnectedNode: SubChainNode;
firstConnectedComplimentaryNode: SubChainNode;
+ chainIdxConnection: number;
}
+export type GrouppedChain = {
+ group: number;
+ chain: Chain;
+};
+
export class ChainsCollection {
public chains: Chain[] = [];
@@ -353,20 +360,82 @@ export class ChainsCollection {
const hydrogenBond = monomer.hydrogenBonds[0];
if (hydrogenBond) {
- return hydrogenBond.getAnotherMonomer(monomer);
+ return {
+ monomer,
+ complimentaryMonomer: hydrogenBond.getAnotherMonomer(monomer),
+ };
}
}
return undefined;
}
+ // for example
+ // 1 x x x
+ // |
+ // 2 x x
+ // |
+ // 3 x x x
+ // 4 x x
+ // |
+ // 5 x x
+ // in the picture we have 5 chains, if we pass number 1 it return 1, 2 and 3, if pass 5, return 4, 5
+ public getAllChainsWithConnectionInBlock(c: Chain) {
+ const chains: GrouppedChain[] = [{ group: 0, chain: c }];
+
+ const res: GrouppedChain[] = [{ group: 0, chain: c }];
+ const handledChains = new Set([c]);
+ const monomerToChain = this.monomerToChain;
+
+ while (chains.length) {
+ const { group, chain } = chains.pop() as GrouppedChain;
+ chain.forEachNode(({ node }) => {
+ const { monomer, complimentaryMonomer } =
+ this.getFirstAntisenseMonomerInNode(node) || {};
+ const complimentaryNode =
+ complimentaryMonomer && this.monomerToNode.get(complimentaryMonomer);
+ const complimentaryChain =
+ complimentaryMonomer && monomerToChain.get(complimentaryMonomer);
+
+ const isRnaMonomer =
+ isRnaBaseOrAmbiguousRnaBase(monomer) &&
+ Boolean(getSugarFromRnaBase(monomer));
+ const isRnaComplimentaryMonomer =
+ isRnaBaseOrAmbiguousRnaBase(complimentaryMonomer) &&
+ Boolean(getSugarFromRnaBase(complimentaryMonomer));
+
+ if (
+ !complimentaryNode ||
+ !complimentaryChain ||
+ !isRnaMonomer ||
+ !isRnaComplimentaryMonomer ||
+ handledChains.has(complimentaryChain)
+ ) {
+ return;
+ }
+
+ handledChains.add(complimentaryChain);
+ const el = { chain: complimentaryChain, group: Number(!group) };
+ chains.push(el);
+ res.push(el);
+ });
+ }
+
+ return res;
+ }
+
+ public getChainByMonomer(monomer: BaseMonomer) {
+ return this.monomerToChain.get(monomer);
+ }
+
public getComplimentaryChainsWithData(chain: Chain) {
const complimentaryChainsWithData: ComplimentaryChainsWithData[] = [];
const handledChains = new Set();
const monomerToChain = this.monomerToChain;
- chain.forEachNode(({ node }) => {
- const complimentaryMonomer = this.getFirstAntisenseMonomerInNode(node);
+ chain.forEachNode(({ node, nodeIndex }) => {
+ const { complimentaryMonomer } =
+ this.getFirstAntisenseMonomerInNode(node) || {};
const complimentaryNode =
complimentaryMonomer && this.monomerToNode.get(complimentaryMonomer);
const complimentaryChain =
@@ -386,6 +455,7 @@ export class ChainsCollection {
chain,
firstConnectedNode: node,
firstConnectedComplimentaryNode: complimentaryNode,
+ chainIdxConnection: nodeIndex,
});
});
diff --git a/packages/ketcher-core/src/domain/helpers/rna.ts b/packages/ketcher-core/src/domain/helpers/rna.ts
index 76b5e46ac4..9686ec36e1 100644
--- a/packages/ketcher-core/src/domain/helpers/rna.ts
+++ b/packages/ketcher-core/src/domain/helpers/rna.ts
@@ -1,6 +1,9 @@
import { CoreEditor } from 'application/editor/internal';
import { AmbiguousMonomer, SequenceType } from 'domain/entities';
-import { RNA_DNA_NON_MODIFIED_PART } from 'domain/constants/monomers';
+import {
+ RNA_DNA_NON_MODIFIED_PART,
+ RnaDnaBaseNames,
+} from 'domain/constants/monomers';
import { MONOMER_CONST } from 'application/editor';
import { isAmbiguousMonomerLibraryItem } from 'domain/helpers/monomers';
import { KetMonomerClass } from 'application/formatters';
@@ -10,15 +13,31 @@ export function getRnaPartLibraryItem(
rnaBaseName: string,
monomerClass?: KetMonomerClass,
) {
- return editor.monomersLibrary.find((libraryItem) =>
- isAmbiguousMonomerLibraryItem(libraryItem)
- ? (!monomerClass ||
- AmbiguousMonomer.getMonomerClass(libraryItem.monomers) ===
- monomerClass) &&
- libraryItem.label === rnaBaseName
- : (!monomerClass || libraryItem.props.MonomerClass === monomerClass) &&
- libraryItem.props.MonomerName === rnaBaseName,
- );
+ return editor.monomersLibrary.find((libraryItem) => {
+ if (isAmbiguousMonomerLibraryItem(libraryItem)) {
+ if (
+ monomerClass &&
+ AmbiguousMonomer.getMonomerClass(libraryItem.monomers) !== monomerClass
+ ) {
+ return false;
+ }
+
+ if (libraryItem.label !== rnaBaseName) {
+ return false;
+ }
+
+ return libraryItem.options.every(
+ (option) =>
+ option.templateId.includes(RnaDnaBaseNames.URACIL) ||
+ !option.templateId.includes(RnaDnaBaseNames.THYMINE),
+ );
+ }
+
+ return (
+ (!monomerClass || libraryItem.props.MonomerClass === monomerClass) &&
+ libraryItem.props.MonomerName === rnaBaseName
+ );
+ });
}
export function getPeptideLibraryItem(editor: CoreEditor, peptideName: string) {
diff --git a/packages/ketcher-core/src/domain/serializers/ket/validate.ts b/packages/ketcher-core/src/domain/serializers/ket/validate.ts
index f526a4f775..9ea7e9765f 100644
--- a/packages/ketcher-core/src/domain/serializers/ket/validate.ts
+++ b/packages/ketcher-core/src/domain/serializers/ket/validate.ts
@@ -14,13 +14,10 @@
* limitations under the License.
***************************************************************************/
-import Ajv from 'ajv';
-import schema from './schema.json';
+import compiledSchema from './compiledSchema';
import { validateMultitailArrows } from './multitailArrowsValidator';
export function validate(ket: any): boolean {
- const ajv = new Ajv();
- const validate = ajv.compile(schema);
- const result = validate(ket);
+ const result = compiledSchema(ket);
return result ? validateMultitailArrows(ket) : result;
}
diff --git a/packages/ketcher-macromolecules/package.json b/packages/ketcher-macromolecules/package.json
index b8a1f4d795..c4e639b3f7 100644
--- a/packages/ketcher-macromolecules/package.json
+++ b/packages/ketcher-macromolecules/package.json
@@ -1,6 +1,6 @@
{
"name": "ketcher-macromolecules",
- "version": "3.0.0-rc.1",
+ "version": "3.0.0-rc.6",
"description": "Web-based molecule sketcher",
"license": "Apache-2.0",
"homepage": "http://lifescience.opensource.epam.com/ketcher",
@@ -88,7 +88,6 @@
"@types/node": "^16.11.12",
"@types/react": "^18.0.25",
"@types/react-dom": "^18.0.8",
- "@types/testing-library__jest-dom": "^5.14.2",
"autoprefixer": "^10.2.5",
"babel-jest": "^27.4.5",
"cross-env": "^7.0.3",
@@ -102,7 +101,6 @@
"jest": "^27.4.5",
"less": "^3.12.2",
"npm-run-all": "^4.1.5",
- "postcss": "^8.2.10",
"prettier": "^2.5.1",
"rollup": "^2.60.2",
"rollup-plugin-cleanup": "^3.2.1",
@@ -111,7 +109,6 @@
"rollup-plugin-postcss": "^4.0.2",
"rollup-plugin-typescript2": "^0.31.1",
"rollup-plugin-visualizer": "^5.5.2",
- "stylelint": "13.13.1",
"ts-jest": "^27.1.2",
"typescript": "^4.5.2"
},
diff --git a/packages/ketcher-macromolecules/src/Editor.tsx b/packages/ketcher-macromolecules/src/Editor.tsx
index e51adfba1a..ef489d0635 100644
--- a/packages/ketcher-macromolecules/src/Editor.tsx
+++ b/packages/ketcher-macromolecules/src/Editor.tsx
@@ -302,11 +302,13 @@ function Editor({
+
+ setIsMonomerLibraryHidden((prev) => !prev)}
+ />
+
- setIsMonomerLibraryHidden((prev) => !prev)}
- />
@@ -333,4 +335,4 @@ function Editor({
);
}
-export { EditorContainer as Editor };
+export default EditorContainer;
diff --git a/packages/ketcher-macromolecules/src/KetcherEditors.tsx b/packages/ketcher-macromolecules/src/KetcherEditors.tsx
deleted file mode 100644
index acb9b39a24..0000000000
--- a/packages/ketcher-macromolecules/src/KetcherEditors.tsx
+++ /dev/null
@@ -1,36 +0,0 @@
-import 'ketcher-react/dist/index.css';
-
-import { StrictMode, useState } from 'react';
-import { ModeControl } from 'components/ModeControl';
-import { Editor, EditorProps } from 'ketcher-react';
-import { Editor as PolymerEditor } from './Editor';
-
-type Props = EditorProps & {
- macromoleculesDisabled?: boolean;
-};
-
-export const KetcherEditors = (props: Props) => {
- const [showPolymerEditor, setShowPolymerEditor] = useState(false);
-
- const togglePolymerEditor = (toggleValue: boolean) => {
- setShowPolymerEditor(toggleValue);
- window.isPolymerEditorTurnedOn = toggleValue;
- };
-
- const togglerComponent = !props.macromoleculesDisabled ? (
-
- ) : undefined;
-
- return showPolymerEditor ? (
- <>
-
- >
- ) : (
-
-
-
- );
-};
diff --git a/packages/ketcher-macromolecules/src/components/Layout/Layout.tsx b/packages/ketcher-macromolecules/src/components/Layout/Layout.tsx
index 2c6f3a810e..2a9a5ede2e 100644
--- a/packages/ketcher-macromolecules/src/components/Layout/Layout.tsx
+++ b/packages/ketcher-macromolecules/src/components/Layout/Layout.tsx
@@ -22,15 +22,18 @@ interface LayoutProps {
children: JSX.Element | Array;
}
-const Column = styled.div<{ fullWidth?: boolean }>(({ fullWidth }) => ({
- width: fullWidth ? '100%' : 'fit-content',
- display: 'flex',
- flexDirection: 'column',
- justifyContent: 'space-between',
-}));
+const Column = styled.div<{ fullWidth?: boolean; withPaddingRight?: boolean }>(
+ ({ fullWidth, withPaddingRight }) => ({
+ width: fullWidth ? '100%' : 'fit-content',
+ display: 'flex',
+ flexDirection: 'column',
+ justifyContent: 'space-between',
+ paddingRight: withPaddingRight ? '12px' : 0,
+ }),
+);
const RowMain = styled.div(({ theme }) => ({
- height: '100vh',
+ height: '100%',
width: '100%',
position: 'relative',
padding: '12px',
@@ -38,8 +41,8 @@ const RowMain = styled.div(({ theme }) => ({
backgroundColor: theme.ketcher.color.background.canvas,
display: 'flex',
justifyContent: 'space-between',
- columnGap: '12px',
containerType: 'size',
+ overflow: 'hidden',
}));
const Row = styled.div(({ theme }) => ({
@@ -84,11 +87,13 @@ const Main = styled.div({
position: 'relative',
});
+const InsideRoot = styled.div({});
+
const DummyDiv = styled.div({
height: '40px',
});
-type LayoutSection = 'Left' | 'Right' | 'Main' | 'Top';
+type LayoutSection = 'Left' | 'Right' | 'Main' | 'Top' | 'InsideRoot';
export const Layout = ({ children }: LayoutProps) => {
const subcomponents: Record = {
@@ -96,6 +101,7 @@ export const Layout = ({ children }: LayoutProps) => {
Main: null,
Right: null,
Top: null,
+ InsideRoot: null,
};
React.Children.forEach(children, (child) => {
if (child.type === Left) {
@@ -106,12 +112,14 @@ export const Layout = ({ children }: LayoutProps) => {
subcomponents.Top = child;
} else if (child.type === Main) {
subcomponents.Main = child;
+ } else if (child.type === InsideRoot) {
+ subcomponents.InsideRoot = child;
}
});
return (
-
+
{subcomponents.Top}
{subcomponents.Left}
@@ -120,6 +128,7 @@ export const Layout = ({ children }: LayoutProps) => {
{subcomponents.Right}
+ {subcomponents.InsideRoot}
);
};
@@ -128,3 +137,4 @@ Layout.Left = Left;
Layout.Top = Top;
Layout.Right = Right;
Layout.Main = Main;
+Layout.InsideRoot = InsideRoot;
diff --git a/packages/ketcher-macromolecules/src/components/ModeControl/index.ts b/packages/ketcher-macromolecules/src/components/ModeControl/index.ts
deleted file mode 100644
index 7c00e7bfa6..0000000000
--- a/packages/ketcher-macromolecules/src/components/ModeControl/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export * from './ModeControl';
diff --git a/packages/ketcher-macromolecules/src/components/modal/save/Save.tsx b/packages/ketcher-macromolecules/src/components/modal/save/Save.tsx
index 38fa7c369e..dd6cb4f315 100644
--- a/packages/ketcher-macromolecules/src/components/modal/save/Save.tsx
+++ b/packages/ketcher-macromolecules/src/components/modal/save/Save.tsx
@@ -48,7 +48,7 @@ import {
import styled from '@emotion/styled';
import { useAppDispatch } from 'hooks';
import { openErrorModal } from 'state/modal';
-
+// TODO: Make it type safe by using `SupportedFormats` as id
const options: Array = [
{ id: 'ket', label: 'Ket' },
{ id: 'mol', label: 'MDL Molfile V3000' },
diff --git a/packages/ketcher-macromolecules/src/helpers/formats/formatProperties.ts b/packages/ketcher-macromolecules/src/helpers/formats/formatProperties.ts
index f42f97bc5b..b4da05d4d6 100644
--- a/packages/ketcher-macromolecules/src/helpers/formats/formatProperties.ts
+++ b/packages/ketcher-macromolecules/src/helpers/formats/formatProperties.ts
@@ -24,6 +24,7 @@ export type SupportedFormats =
| 'ket'
| 'fasta'
| 'sequence'
+ | 'sequence-3-letter'
| 'idt'
| 'helm'
| 'svg';
@@ -61,6 +62,13 @@ const formatProperties: FormatProperties = {
false,
{},
),
+ 'sequence-3-letter': new SupportedFormatProperties(
+ 'SEQUENCE (3-letter code)',
+ ChemicalMimeType.Sequence,
+ ['.seq'],
+ false,
+ {},
+ ),
idt: new SupportedFormatProperties(
'IDT',
ChemicalMimeType.Idt,
diff --git a/packages/ketcher-macromolecules/src/index.tsx b/packages/ketcher-macromolecules/src/index.tsx
index 0367dae1a1..cc8e20f7c3 100644
--- a/packages/ketcher-macromolecules/src/index.tsx
+++ b/packages/ketcher-macromolecules/src/index.tsx
@@ -14,6 +14,4 @@
* limitations under the License.
***************************************************************************/
-export * from './Editor';
-export * from './KetcherEditors';
-export * from './constants';
+export { default } from './Editor';
diff --git a/packages/ketcher-react/package.json b/packages/ketcher-react/package.json
index 7f9ecb13ee..79f715a1b4 100644
--- a/packages/ketcher-react/package.json
+++ b/packages/ketcher-react/package.json
@@ -1,6 +1,6 @@
{
"name": "ketcher-react",
- "version": "3.0.0-rc.1",
+ "version": "3.0.0-rc.6",
"description": "Web-based molecule sketcher",
"license": "Apache-2.0",
"homepage": "http://lifescience.opensource.epam.com/ketcher",
@@ -21,8 +21,6 @@
"bugs": {
"url": "https://github.com/epam/ketcher/issues"
},
- "main": "dist/index.js",
- "module": "dist/index.modern.js",
"types": "dist/index.d.ts",
"source": "src/index.tsx",
"engines": {
@@ -61,7 +59,7 @@
"file-saver": "^2.0.2",
"font-face-observer": "^1.0.0",
"hoist-non-react-statics": "^3.3.2",
- "intersection-observer": "^0.12.0",
+ "intersection-observer": "^0.12.2",
"ketcher-core": "*",
"lodash": "^4.17.21",
"miew-react": "^1.0.0",
@@ -121,7 +119,6 @@
"jest": "^27.4.5",
"less": "^3.12.2",
"npm-run-all": "^4.1.5",
- "postcss": "^8.2.10",
"prettier": "^2.5.1",
"rollup": "^2.60.2",
"rollup-plugin-cleanup": "^3.2.1",
@@ -132,11 +129,20 @@
"rollup-plugin-string": "^3.0.0",
"rollup-plugin-typescript2": "^0.31.1",
"rollup-plugin-visualizer": "^5.5.2",
- "stylelint": "13.13.1",
"ts-jest": "^27.1.2",
"typescript": "^4.5.2"
},
"files": [
"dist"
- ]
+ ],
+ "exports": {
+ ".": {
+ "import": "./dist/index.js",
+ "require": "./dist/cjs/index.js"
+ },
+ "./dist/index.css": {
+ "import": "./dist/index.css",
+ "require": "./dist/index.css"
+ }
+ }
}
diff --git a/packages/ketcher-react/rollup.config.js b/packages/ketcher-react/rollup.config.js
index e3bae6810a..89bee6db45 100644
--- a/packages/ketcher-react/rollup.config.js
+++ b/packages/ketcher-react/rollup.config.js
@@ -7,7 +7,6 @@ import copy from 'rollup-plugin-copy';
import del from 'rollup-plugin-delete';
import json from '@rollup/plugin-json';
import nodeResolve from '@rollup/plugin-node-resolve';
-import path from 'path';
import peerDepsExternal from 'rollup-plugin-peer-deps-external';
import pkg from './package.json';
import postcss from 'rollup-plugin-postcss';
@@ -53,13 +52,13 @@ const config = {
input: pkg.source,
output: [
{
- file: pkg.main,
+ dir: 'dist/cjs',
exports: 'named',
format: 'cjs',
banner: license,
},
{
- file: pkg.module,
+ dir: 'dist',
exports: 'named',
format: 'es',
banner: license,
@@ -72,7 +71,7 @@ const config = {
}),
postcss({
plugins: [autoprefixer({ grid: 'autoplace' })],
- extract: path.resolve('dist/index.css'),
+ extract: 'index.css',
minimize: isProduction,
sourceMap: true,
include: includePattern,
diff --git a/packages/ketcher-react/src/Editor.module.less b/packages/ketcher-react/src/Editor.module.less
index daffa8fb61..02ac186f2a 100644
--- a/packages/ketcher-react/src/Editor.module.less
+++ b/packages/ketcher-react/src/Editor.module.less
@@ -161,6 +161,14 @@
}
}
+.switchingLoader {
+ height: 100%;
+ width: 100%;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+}
+
:global {
.blinking {
/* stylelint-disable-next-line selector-pseudo-class-no-unknown */
diff --git a/packages/ketcher-react/src/Editor.tsx b/packages/ketcher-react/src/Editor.tsx
index d3baafd735..7ccce5c3f3 100644
--- a/packages/ketcher-react/src/Editor.tsx
+++ b/packages/ketcher-react/src/Editor.tsx
@@ -1,122 +1,61 @@
-/****************************************************************************
- * Copyright 2021 EPAM Systems
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- ***************************************************************************/
+import { lazy, Suspense, useEffect, useState } from 'react';
+import { MicromoleculesEditor, EditorProps } from './MicromoleculesEditor';
+import { ModeControl } from './script/ui/views/toolbars/ModeControl';
+import { LoadingCircles } from './script/ui/views/components';
-import 'intersection-observer';
-import 'element-closest-polyfill';
-import 'regenerator-runtime/runtime';
-import 'url-search-params-polyfill';
-import 'whatwg-fetch';
-import './index.less';
+import styles from './Editor.module.less';
-import init, { Config } from './script';
-import { useEffect, useRef } from 'react';
-import { createRoot, Root } from 'react-dom/client';
-
-import { Ketcher, StructService } from 'ketcher-core';
-import classes from './Editor.module.less';
-import clsx from 'clsx';
-import { useResizeObserver } from './hooks';
-import {
- ketcherInitEventName,
- KETCHER_ROOT_NODE_CLASS_NAME,
-} from './constants';
-import { KetcherBuilder } from './script/builders';
-
-const mediaSizes = {
- smallWidth: 1040,
- smallHeight: 600,
+type Props = EditorProps & {
+ disableMacromoleculesEditor?: boolean;
};
-export interface EditorProps extends Omit {
- onInit?: (ketcher: Ketcher) => void;
-}
-
-function Editor(props: EditorProps) {
- const initPromiseRef = useRef | null>(null);
- const appRootRef = useRef(null);
- const cleanupRef = useRef<(() => unknown) | null>(null);
- const ketcherBuilderRef = useRef(null);
- // eslint-disable-next-line @typescript-eslint/no-empty-function
- const setServerRef = useRef<(structService: StructService) => void>(() => {});
- const structServiceProvider = props.structServiceProvider;
-
- const rootElRef = useRef(null);
-
- const { height, width } = useResizeObserver({
- ref: rootElRef,
- });
-
- useEffect(() => {
- ketcherBuilderRef.current?.reinitializeApi(
- props.structServiceProvider,
- setServerRef.current,
- );
- }, [structServiceProvider]);
-
- const initKetcher = () => {
- appRootRef.current = createRoot(rootElRef.current as HTMLDivElement);
-
- initPromiseRef.current = init({
- ...props,
- element: rootElRef.current,
- appRoot: appRootRef.current,
- });
+/*
+ * TODO:
+ * ketcher-macromolecules is imported asynchronously to avoid circular dependencies between it and ketcher-react
+ * and ts-ignore is needed to avoid TypeScript error as ketcher-react is built first
+ * so ketcher-macromolecules can't provide any typings while building ketcher-react.
+ * Consider refactoring/restructuring packages to avoid these two issues
+ */
+// eslint-disable-next-line @typescript-eslint/ban-ts-comment
+// @ts-ignore
+const MacromoleculesEditor = lazy(() => import('ketcher-macromolecules'));
+
+export const Editor = (props: Props) => {
+ const [showPolymerEditor, setShowPolymerEditor] = useState(false);
+
+ const togglePolymerEditor = (toggleValue: boolean) => {
+ setShowPolymerEditor(toggleValue);
+ window.isPolymerEditorTurnedOn = toggleValue;
+ };
- initPromiseRef.current?.then(
- ({ ketcher, ketcherId, cleanup, builder, setServer }) => {
- cleanupRef.current = cleanup;
- ketcherBuilderRef.current = builder;
- setServerRef.current = setServer;
+ const togglerComponent = !props.disableMacromoleculesEditor ? (
+
+ ) : undefined;
- if (typeof props.onInit === 'function' && ketcher) {
- props.onInit(ketcher);
- const ketcherInitEvent = new Event(ketcherInitEventName(ketcherId));
- window.dispatchEvent(ketcherInitEvent);
- }
- },
- );
- };
useEffect(() => {
- if (initPromiseRef.current === null) {
- initKetcher();
- } else {
- initPromiseRef.current?.finally(() => {
- initKetcher();
- });
- }
-
return () => {
- initPromiseRef.current?.then(() => {
- cleanupRef.current?.();
- appRootRef.current?.unmount();
- });
+ window.isPolymerEditorTurnedOn = false;
};
- // TODO: provide the list of dependencies after implementing unsubscribe function
}, []);
return (
-
+ <>
+ {showPolymerEditor ? (
+
+
+
+ }
+ >
+
+
+ ) : (
+
+ )}
+ >
);
-}
-
-export { Editor };
+};
diff --git a/packages/ketcher-react/src/MicromoleculesEditor.tsx b/packages/ketcher-react/src/MicromoleculesEditor.tsx
new file mode 100644
index 0000000000..9b91ed766c
--- /dev/null
+++ b/packages/ketcher-react/src/MicromoleculesEditor.tsx
@@ -0,0 +1,122 @@
+/****************************************************************************
+ * Copyright 2021 EPAM Systems
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ***************************************************************************/
+
+import 'intersection-observer';
+import 'element-closest-polyfill';
+import 'regenerator-runtime/runtime';
+import 'url-search-params-polyfill';
+import 'whatwg-fetch';
+import './index.less';
+
+import init, { Config } from './script';
+import { useEffect, useRef } from 'react';
+import { createRoot, Root } from 'react-dom/client';
+
+import { Ketcher, StructService } from 'ketcher-core';
+import classes from './Editor.module.less';
+import clsx from 'clsx';
+import { useResizeObserver } from './hooks';
+import {
+ ketcherInitEventName,
+ KETCHER_ROOT_NODE_CLASS_NAME,
+} from './constants';
+import { KetcherBuilder } from './script/builders';
+
+const mediaSizes = {
+ smallWidth: 1040,
+ smallHeight: 600,
+};
+
+export interface EditorProps extends Omit {
+ onInit?: (ketcher: Ketcher) => void;
+}
+
+function MicromoleculesEditor(props: EditorProps) {
+ const initPromiseRef = useRef | null>(null);
+ const appRootRef = useRef(null);
+ const cleanupRef = useRef<(() => unknown) | null>(null);
+ const ketcherBuilderRef = useRef(null);
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
+ const setServerRef = useRef<(structService: StructService) => void>(() => {});
+ const structServiceProvider = props.structServiceProvider;
+
+ const rootElRef = useRef(null);
+
+ const { height, width } = useResizeObserver({
+ ref: rootElRef,
+ });
+
+ useEffect(() => {
+ ketcherBuilderRef.current?.reinitializeApi(
+ props.structServiceProvider,
+ setServerRef.current,
+ );
+ }, [structServiceProvider]);
+
+ const initKetcher = () => {
+ appRootRef.current = createRoot(rootElRef.current as HTMLDivElement);
+
+ initPromiseRef.current = init({
+ ...props,
+ element: rootElRef.current,
+ appRoot: appRootRef.current,
+ });
+
+ initPromiseRef.current?.then(
+ ({ ketcher, ketcherId, cleanup, builder, setServer }) => {
+ cleanupRef.current = cleanup;
+ ketcherBuilderRef.current = builder;
+ setServerRef.current = setServer;
+
+ if (typeof props.onInit === 'function' && ketcher) {
+ props.onInit(ketcher);
+ const ketcherInitEvent = new Event(ketcherInitEventName(ketcherId));
+ window.dispatchEvent(ketcherInitEvent);
+ }
+ },
+ );
+ };
+ useEffect(() => {
+ if (initPromiseRef.current === null) {
+ initKetcher();
+ } else {
+ initPromiseRef.current?.finally(() => {
+ initKetcher();
+ });
+ }
+
+ return () => {
+ initPromiseRef.current?.then(() => {
+ cleanupRef.current?.();
+ appRootRef.current?.unmount();
+ });
+ };
+ // TODO: provide the list of dependencies after implementing unsubscribe function
+ }, []);
+
+ return (
+
+ );
+}
+
+export { MicromoleculesEditor };
diff --git a/packages/ketcher-macromolecules/src/components/ModeControl/ModeControl.tsx b/packages/ketcher-react/src/script/ui/views/toolbars/ModeControl/ModeControl.tsx
similarity index 98%
rename from packages/ketcher-macromolecules/src/components/ModeControl/ModeControl.tsx
rename to packages/ketcher-react/src/script/ui/views/toolbars/ModeControl/ModeControl.tsx
index 9811fd29f5..ddbfc40c68 100644
--- a/packages/ketcher-macromolecules/src/components/ModeControl/ModeControl.tsx
+++ b/packages/ketcher-react/src/script/ui/views/toolbars/ModeControl/ModeControl.tsx
@@ -17,11 +17,11 @@
import { useState, useRef } from 'react';
import styled from '@emotion/styled';
import { Button, Popover } from '@mui/material';
+import { Icon } from 'components';
import {
- Icon,
- KETCHER_ROOT_NODE_CSS_SELECTOR,
KETCHER_MACROMOLECULES_ROOT_NODE_SELECTOR,
-} from 'ketcher-react';
+ KETCHER_ROOT_NODE_CSS_SELECTOR,
+} from '../../../../../constants';
interface IStyledIconProps {
expanded?: boolean;
diff --git a/example-separate-editors/src/ModeControl/index.ts b/packages/ketcher-react/src/script/ui/views/toolbars/ModeControl/index.ts
similarity index 100%
rename from example-separate-editors/src/ModeControl/index.ts
rename to packages/ketcher-react/src/script/ui/views/toolbars/ModeControl/index.ts
diff --git a/packages/ketcher-standalone/package.json b/packages/ketcher-standalone/package.json
index 6107ce25e1..877e47b7c8 100644
--- a/packages/ketcher-standalone/package.json
+++ b/packages/ketcher-standalone/package.json
@@ -1,6 +1,6 @@
{
"name": "ketcher-standalone",
- "version": "3.0.0-rc.1",
+ "version": "3.0.0-rc.6",
"description": "Web-based molecule sketcher",
"license": "Apache-2.0",
"homepage": "http://lifescience.opensource.epam.com/ketcher",
@@ -42,7 +42,7 @@
},
"dependencies": {
"@babel/runtime": "^7.17.9",
- "indigo-ketcher": "1.28.0-rc.1",
+ "indigo-ketcher": "1.28.0-rc.3",
"ketcher-core": "*"
},
"devDependencies": {