react-cheminfo 0.73.0 → 0.74.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/i18n/core/chromeCatalog.d.ts +1 -1
- package/lib/i18n/core/chromeCatalog.d.ts.map +1 -1
- package/lib/locales/de.json +22 -0
- package/lib/locales/en.json +22 -0
- package/lib/locales/es.json +22 -0
- package/lib/locales/fr.json +22 -0
- package/lib/locales/it.json +22 -0
- package/lib/structure/core/fragmentIdCode.d.ts +15 -0
- package/lib/structure/core/fragmentIdCode.d.ts.map +1 -0
- package/lib/structure/core/fragmentIdCode.js +25 -0
- package/lib/structure/core/fragmentIdCode.js.map +1 -0
- package/lib/structure/core/index.d.ts +2 -0
- package/lib/structure/core/index.d.ts.map +1 -1
- package/lib/structure/core/index.js +1 -0
- package/lib/structure/core/index.js.map +1 -1
- package/lib/structure/core/structureSearch.d.ts +44 -0
- package/lib/structure/core/structureSearch.d.ts.map +1 -0
- package/lib/structure/core/structureSearch.js +31 -0
- package/lib/structure/core/structureSearch.js.map +1 -0
- package/lib/structure/core/substructureMatch.d.ts +33 -0
- package/lib/structure/core/substructureMatch.d.ts.map +1 -0
- package/lib/structure/core/substructureMatch.js +73 -0
- package/lib/structure/core/substructureMatch.js.map +1 -0
- package/lib/structure/ui/Structure.d.ts +18 -0
- package/lib/structure/ui/Structure.d.ts.map +1 -1
- package/lib/structure/ui/Structure.js +2 -2
- package/lib/structure/ui/Structure.js.map +1 -1
- package/lib/structure/ui/StructureSearchDialog.d.ts +55 -0
- package/lib/structure/ui/StructureSearchDialog.d.ts.map +1 -0
- package/lib/structure/ui/StructureSearchDialog.js +77 -0
- package/lib/structure/ui/StructureSearchDialog.js.map +1 -0
- package/lib/structure/ui/StructureSvg.d.ts +9 -0
- package/lib/structure/ui/StructureSvg.d.ts.map +1 -1
- package/lib/structure/ui/StructureSvg.js +7 -2
- package/lib/structure/ui/StructureSvg.js.map +1 -1
- package/lib/structure/ui/index.d.ts +4 -0
- package/lib/structure/ui/index.d.ts.map +1 -1
- package/lib/structure/ui/index.js +2 -0
- package/lib/structure/ui/index.js.map +1 -1
- package/lib/structure/ui/useStructureSearchModes.d.ts +18 -0
- package/lib/structure/ui/useStructureSearchModes.d.ts.map +1 -0
- package/lib/structure/ui/useStructureSearchModes.js +36 -0
- package/lib/structure/ui/useStructureSearchModes.js.map +1 -0
- package/package.json +1 -1
- package/src/locales/de.json +22 -0
- package/src/locales/en.json +22 -0
- package/src/locales/es.json +22 -0
- package/src/locales/fr.json +22 -0
- package/src/locales/it.json +22 -0
- package/src/structure/core/fragmentIdCode.ts +25 -0
- package/src/structure/core/index.ts +10 -0
- package/src/structure/core/structureSearch.ts +68 -0
- package/src/structure/core/substructureMatch.ts +85 -0
- package/src/structure/ui/Structure.tsx +24 -0
- package/src/structure/ui/StructureSearchDialog.tsx +218 -0
- package/src/structure/ui/StructureSvg.tsx +35 -0
- package/src/structure/ui/index.ts +4 -0
- package/src/structure/ui/useStructureSearchModes.ts +51 -0
- package/styles/chrome.css +31 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Structure.d.ts","sourceRoot":"","sources":["../../../src/structure/ui/Structure.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGrD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAUhE,sEAAsE;AACtE,MAAM,WAAW,eAAe;IAC9B;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,oCAAoC;AACpC,MAAM,WAAW,cAAc;IAC7B;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IACxC;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB;;;OAGG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB;;;OAGG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;;;OAIG;IACH,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC;;;OAGG;IACH,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,YAAY,
|
|
1
|
+
{"version":3,"file":"Structure.d.ts","sourceRoot":"","sources":["../../../src/structure/ui/Structure.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGrD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAUhE,sEAAsE;AACtE,MAAM,WAAW,eAAe;IAC9B;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,oCAAoC;AACpC,MAAM,WAAW,cAAc;IAC7B;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IACxC;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB;;;OAGG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB;;;OAGG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;;;;OAKG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B;;;;OAIG;IACH,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC;;;OAGG;IACH,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,YAAY,CA+D7D"}
|
|
@@ -18,11 +18,11 @@ const StructureSvg = lazy(async () => {
|
|
|
18
18
|
* @returns The picture, or the placeholder.
|
|
19
19
|
*/
|
|
20
20
|
export function Structure(props) {
|
|
21
|
-
const { idCode, coordinates, molfile, smiles, width = 200, height = 140, labels = {}, atomLabels, atomLabelPlacement = 'beside', autoCrop = true, autoCropMargin = 4, atomHighlight, atomHighlightColor = '#a5d8ff', bondHighlight, bondHighlightColor = '#ffd8a8', onAtomClick, onBondClick, fallback = '—', } = props;
|
|
21
|
+
const { idCode, coordinates, molfile, smiles, width = 200, height = 140, labels = {}, atomLabels, atomLabelPlacement = 'beside', autoCrop = true, autoCropMargin = 4, atomHighlight, atomHighlightColor = '#a5d8ff', bondHighlight, bondHighlightColor = '#ffd8a8', substructure, substructureColor = '#ffd500', substructureOpacity = 0.15, onAtomClick, onBondClick, fallback = '—', } = props;
|
|
22
22
|
const source = structureSource({ idCode, coordinates, molfile, smiles });
|
|
23
23
|
if (source.kind === 'empty') {
|
|
24
24
|
return (_jsx(StructurePlaceholder, { width: width, height: height, children: fallback }));
|
|
25
25
|
}
|
|
26
|
-
return (_jsx(Suspense, { fallback: _jsx(StructurePlaceholder, { width: width, height: height }), children: _jsx(StructureSvg, { source: source, width: width, height: height, autoCrop: autoCrop, autoCropMargin: autoCropMargin, atomHighlight: atomHighlight, atomHighlightColor: atomHighlightColor, bondHighlight: bondHighlight, bondHighlightColor: bondHighlightColor, showAtomNumber: labels.atoms ?? false, showBondNumber: labels.bonds ?? false, showMapping: labels.mapping ?? false, showCIPParity: labels.stereo ?? false, label: labels.caption, atomLabels: atomLabels, atomLabelPlacement: atomLabelPlacement, onAtomClick: onAtomClick, onBondClick: onBondClick, fallback: fallback }) }));
|
|
26
|
+
return (_jsx(Suspense, { fallback: _jsx(StructurePlaceholder, { width: width, height: height }), children: _jsx(StructureSvg, { source: source, width: width, height: height, autoCrop: autoCrop, autoCropMargin: autoCropMargin, atomHighlight: atomHighlight, atomHighlightColor: atomHighlightColor, bondHighlight: bondHighlight, bondHighlightColor: bondHighlightColor, substructure: substructure, substructureColor: substructureColor, substructureOpacity: substructureOpacity, showAtomNumber: labels.atoms ?? false, showBondNumber: labels.bonds ?? false, showMapping: labels.mapping ?? false, showCIPParity: labels.stereo ?? false, label: labels.caption, atomLabels: atomLabels, atomLabelPlacement: atomLabelPlacement, onAtomClick: onAtomClick, onBondClick: onBondClick, fallback: fallback }) }));
|
|
27
27
|
}
|
|
28
28
|
//# sourceMappingURL=Structure.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Structure.js","sourceRoot":"","sources":["../../../src/structure/ui/Structure.tsx"],"names":[],"mappings":";AAWA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;AAGvC,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAE7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA4B,CAAC;AAElE,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE;IACnC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,mBAAoB,CAAC,CAAC;IAClD,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,YAAY,EAAE,CAAC;AAC1C,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"Structure.js","sourceRoot":"","sources":["../../../src/structure/ui/Structure.tsx"],"names":[],"mappings":";AAWA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;AAGvC,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAE7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA4B,CAAC;AAElE,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE;IACnC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,mBAAoB,CAAC,CAAC;IAClD,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,YAAY,EAAE,CAAC;AAC1C,CAAC,CAAC,CAAC;AAwJH;;;;;;;;;;GAUG;AACH,MAAM,UAAU,SAAS,CAAC,KAAqB;IAC7C,MAAM,EACJ,MAAM,EACN,WAAW,EACX,OAAO,EACP,MAAM,EACN,KAAK,GAAG,GAAG,EACX,MAAM,GAAG,GAAG,EACZ,MAAM,GAAG,EAAE,EACX,UAAU,EACV,kBAAkB,GAAG,QAAQ,EAC7B,QAAQ,GAAG,IAAI,EACf,cAAc,GAAG,CAAC,EAClB,aAAa,EACb,kBAAkB,GAAG,SAAS,EAC9B,aAAa,EACb,kBAAkB,GAAG,SAAS,EAC9B,YAAY,EACZ,iBAAiB,GAAG,SAAS,EAC7B,mBAAmB,GAAG,IAAI,EAC1B,WAAW,EACX,WAAW,EACX,QAAQ,GAAG,GAAG,GACf,GAAG,KAAK,CAAC;IAEV,MAAM,MAAM,GAAG,eAAe,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;IAEzE,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC5B,OAAO,CACL,KAAC,oBAAoB,IAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,YAC/C,QAAQ,GACY,CACxB,CAAC;IACJ,CAAC;IAED,OAAO,CACL,KAAC,QAAQ,IAAC,QAAQ,EAAE,KAAC,oBAAoB,IAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,GAAI,YACxE,KAAC,YAAY,IACX,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,QAAQ,EAClB,cAAc,EAAE,cAAc,EAC9B,aAAa,EAAE,aAAa,EAC5B,kBAAkB,EAAE,kBAAkB,EACtC,aAAa,EAAE,aAAa,EAC5B,kBAAkB,EAAE,kBAAkB,EACtC,YAAY,EAAE,YAAY,EAC1B,iBAAiB,EAAE,iBAAiB,EACpC,mBAAmB,EAAE,mBAAmB,EACxC,cAAc,EAAE,MAAM,CAAC,KAAK,IAAI,KAAK,EACrC,cAAc,EAAE,MAAM,CAAC,KAAK,IAAI,KAAK,EACrC,WAAW,EAAE,MAAM,CAAC,OAAO,IAAI,KAAK,EACpC,aAAa,EAAE,MAAM,CAAC,MAAM,IAAI,KAAK,EACrC,KAAK,EAAE,MAAM,CAAC,OAAO,EACrB,UAAU,EAAE,UAAU,EACtB,kBAAkB,EAAE,kBAAkB,EACtC,WAAW,EAAE,WAAW,EACxB,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,QAAQ,GAClB,GACO,CACZ,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The dialog a structure search is drawn in, shared by every site that
|
|
3
|
+
* filters a collection by structure.
|
|
4
|
+
*
|
|
5
|
+
* This file stays free of `openchemlib`: the editor loads it behind its own
|
|
6
|
+
* `React.lazy`, and an example is read only once it is clicked.
|
|
7
|
+
*/
|
|
8
|
+
import type { ReactElement, ReactNode } from 'react';
|
|
9
|
+
import type { StructureSearchExample, StructureSearchMode, StructureSearchQuery } from '../core/structureSearch.ts';
|
|
10
|
+
/** What {@link StructureSearchDialog} needs. */
|
|
11
|
+
export interface StructureSearchDialogProps {
|
|
12
|
+
/** Whether the dialog is on screen. */
|
|
13
|
+
isOpen: boolean;
|
|
14
|
+
/** The question the dialog opens on; its drawing is loaded into the canvas. */
|
|
15
|
+
value: StructureSearchQuery;
|
|
16
|
+
/**
|
|
17
|
+
* Called when the dialog closes — by Apply, by Escape or by its × alike —
|
|
18
|
+
* with what it then holds, so no drawing is lost to a stray Escape. The
|
|
19
|
+
* idCode is empty when the canvas was cleared.
|
|
20
|
+
*/
|
|
21
|
+
onClose: (query: StructureSearchQuery) => void;
|
|
22
|
+
/**
|
|
23
|
+
* The modes offered, in order.
|
|
24
|
+
* @default STRUCTURE_SEARCH_MODES
|
|
25
|
+
*/
|
|
26
|
+
modes?: readonly StructureSearchMode[];
|
|
27
|
+
/**
|
|
28
|
+
* The fragments offered under the canvas.
|
|
29
|
+
* @default benzene, pyridine, amide, sulfonamide and trifluoromethyl
|
|
30
|
+
*/
|
|
31
|
+
examples?: readonly StructureSearchExample[];
|
|
32
|
+
/**
|
|
33
|
+
* More controls beside the similarity threshold, such as the fingerprint a
|
|
34
|
+
* site compares.
|
|
35
|
+
* @default undefined
|
|
36
|
+
*/
|
|
37
|
+
similarityControls?: ReactNode;
|
|
38
|
+
/**
|
|
39
|
+
* Whether the dialog is rendered through a portal on `document.body`.
|
|
40
|
+
* @default true
|
|
41
|
+
*/
|
|
42
|
+
usePortal?: boolean;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Draw a structure and say how it is matched: contained, similar, or the same
|
|
46
|
+
* compound with or without its stereochemistry and tautomerism.
|
|
47
|
+
*
|
|
48
|
+
* What is drawn stays a draft until the dialog closes, and the canvas is never
|
|
49
|
+
* reloaded under the pen: only opening the dialog and clicking an example put
|
|
50
|
+
* a structure in it.
|
|
51
|
+
* @param props - See {@link StructureSearchDialogProps}.
|
|
52
|
+
* @returns The dialog.
|
|
53
|
+
*/
|
|
54
|
+
export declare function StructureSearchDialog(props: StructureSearchDialogProps): ReactElement;
|
|
55
|
+
//# sourceMappingURL=StructureSearchDialog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StructureSearchDialog.d.ts","sourceRoot":"","sources":["../../../src/structure/ui/StructureSearchDialog.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AASH,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAOrD,OAAO,KAAK,EACV,sBAAsB,EACtB,mBAAmB,EACnB,oBAAoB,EACrB,MAAM,4BAA4B,CAAC;AAUpC,gDAAgD;AAChD,MAAM,WAAW,0BAA0B;IACzC,uCAAuC;IACvC,MAAM,EAAE,OAAO,CAAC;IAChB,+EAA+E;IAC/E,KAAK,EAAE,oBAAoB,CAAC;IAC5B;;;;OAIG;IACH,OAAO,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,IAAI,CAAC;IAC/C;;;OAGG;IACH,KAAK,CAAC,EAAE,SAAS,mBAAmB,EAAE,CAAC;IACvC;;;OAGG;IACH,QAAQ,CAAC,EAAE,SAAS,sBAAsB,EAAE,CAAC;IAC7C;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,SAAS,CAAC;IAC/B;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAUD;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,0BAA0B,GAChC,YAAY,CA8Hd"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* The dialog a structure search is drawn in, shared by every site that
|
|
4
|
+
* filters a collection by structure.
|
|
5
|
+
*
|
|
6
|
+
* This file stays free of `openchemlib`: the editor loads it behind its own
|
|
7
|
+
* `React.lazy`, and an example is read only once it is clicked.
|
|
8
|
+
*/
|
|
9
|
+
import { Button, Dialog, DialogBody, DialogFooter, HTMLSelect, } from '@blueprintjs/core';
|
|
10
|
+
import { useState } from 'react';
|
|
11
|
+
import { formatPercent } from "../../format/core/numbers.js";
|
|
12
|
+
import { useChromeT } from "../../i18n/ui/useT.js";
|
|
13
|
+
import { isEmptyIdCode } from "../core/editorValue.js";
|
|
14
|
+
import { STRUCTURE_SEARCH_MODES, similarityThresholds, } from "../core/structureSearch.js";
|
|
15
|
+
import { StructureEditor } from "./StructureEditor.js";
|
|
16
|
+
import { useStructureDraft } from "./useStructureDraft.js";
|
|
17
|
+
import { useStructureSearchModes } from "./useStructureSearchModes.js";
|
|
18
|
+
const DEFAULT_EXAMPLES = [
|
|
19
|
+
{ key: 'structure.search.exampleBenzene', smiles: 'c1ccccc1' },
|
|
20
|
+
{ key: 'structure.search.examplePyridine', smiles: 'c1ccncc1' },
|
|
21
|
+
{ key: 'structure.search.exampleAmide', smiles: 'CC(=O)N' },
|
|
22
|
+
{ key: 'structure.search.exampleSulfonamide', smiles: 'S(=O)(=O)N' },
|
|
23
|
+
{ key: 'structure.search.exampleTrifluoromethyl', smiles: 'FC(F)F' },
|
|
24
|
+
];
|
|
25
|
+
/**
|
|
26
|
+
* Draw a structure and say how it is matched: contained, similar, or the same
|
|
27
|
+
* compound with or without its stereochemistry and tautomerism.
|
|
28
|
+
*
|
|
29
|
+
* What is drawn stays a draft until the dialog closes, and the canvas is never
|
|
30
|
+
* reloaded under the pen: only opening the dialog and clicking an example put
|
|
31
|
+
* a structure in it.
|
|
32
|
+
* @param props - See {@link StructureSearchDialogProps}.
|
|
33
|
+
* @returns The dialog.
|
|
34
|
+
*/
|
|
35
|
+
export function StructureSearchDialog(props) {
|
|
36
|
+
const { isOpen, value, onClose, modes = STRUCTURE_SEARCH_MODES, examples, similarityControls, usePortal = true, } = props;
|
|
37
|
+
const t = useChromeT();
|
|
38
|
+
const modeLabels = useStructureSearchModes(modes);
|
|
39
|
+
const draft = useStructureDraft(value.idCode);
|
|
40
|
+
const [mode, setMode] = useState(value.mode);
|
|
41
|
+
const [threshold, setThreshold] = useState(value.threshold);
|
|
42
|
+
// An example is read by a lazily loaded module: until it is in the canvas,
|
|
43
|
+
// Apply would hand back the drawing it replaces.
|
|
44
|
+
const [loading, setLoading] = useState(false);
|
|
45
|
+
const offered = examples ??
|
|
46
|
+
DEFAULT_EXAMPLES.map((example) => ({
|
|
47
|
+
label: t(example.key),
|
|
48
|
+
smiles: example.smiles,
|
|
49
|
+
}));
|
|
50
|
+
function close() {
|
|
51
|
+
const idCode = isEmptyIdCode(draft.value) ? '' : draft.value;
|
|
52
|
+
onClose({ idCode, mode, threshold });
|
|
53
|
+
}
|
|
54
|
+
async function loadExample(smiles) {
|
|
55
|
+
setLoading(true);
|
|
56
|
+
try {
|
|
57
|
+
const { fragmentIdCode } = await import("../core/fragmentIdCode.js");
|
|
58
|
+
const idCode = fragmentIdCode(smiles);
|
|
59
|
+
if (idCode !== '')
|
|
60
|
+
draft.load(idCode);
|
|
61
|
+
}
|
|
62
|
+
finally {
|
|
63
|
+
setLoading(false);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return (_jsxs(Dialog, { isOpen: isOpen, onOpening: () => {
|
|
67
|
+
draft.load(value.idCode);
|
|
68
|
+
setMode(modes.includes(value.mode) ? value.mode : (modes[0] ?? mode));
|
|
69
|
+
setThreshold(value.threshold);
|
|
70
|
+
}, onClose: close, usePortal: usePortal, title: t('structure.search.title'), className: "structure-search", children: [_jsxs(DialogBody, { children: [_jsx("div", { className: "structure-search__row", children: modeLabels.map((option) => (_jsx(Button, { size: "small", active: mode === option.mode, intent: mode === option.mode ? 'primary' : 'none', text: option.label, title: option.help, onClick: () => setMode(option.mode) }, option.mode))) }), mode === 'similarity' && (_jsxs("div", { className: "structure-search__row", children: [_jsx("span", { className: "structure-search__label", children: t('structure.search.similarityLabel') }), _jsx(HTMLSelect, { minimal: true, value: threshold, "aria-label": t('structure.search.threshold'), title: t('structure.search.thresholdHelp'), options: similarityThresholds(threshold).map((option) => ({
|
|
71
|
+
value: option,
|
|
72
|
+
label: t('structure.search.thresholdOption', {
|
|
73
|
+
percent: formatPercent(option, 0),
|
|
74
|
+
}),
|
|
75
|
+
})), onChange: (event) => setThreshold(Number(event.currentTarget.value)) }), similarityControls] })), _jsx(StructureEditor, { fragment: true, value: draft.value, revision: draft.revision, onChange: (change) => draft.update(change.idCode) }), _jsxs("div", { className: "structure-search__row structure-search__examples", children: [_jsx("span", { className: "structure-search__label", children: t('structure.search.examples') }), offered.map((example) => (_jsx(Button, { variant: "minimal", size: "small", text: example.label, title: example.help, onClick: () => void loadExample(example.smiles) }, example.label)))] })] }), _jsx(DialogFooter, { actions: _jsx(Button, { intent: "primary", icon: "search", text: t('structure.search.apply'), loading: loading, onClick: close }) })] }));
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=StructureSearchDialog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StructureSearchDialog.js","sourceRoot":"","sources":["../../../src/structure/ui/StructureSearchDialog.tsx"],"names":[],"mappings":"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"}
|
|
@@ -36,6 +36,15 @@ interface StructureSvgProps {
|
|
|
36
36
|
bondHighlight?: number[];
|
|
37
37
|
/** The colour the highlighted bonds are painted. */
|
|
38
38
|
bondHighlightColor: string;
|
|
39
|
+
/**
|
|
40
|
+
* A query idCode whose matches are painted in place of the highlights.
|
|
41
|
+
* @default undefined
|
|
42
|
+
*/
|
|
43
|
+
substructure?: string;
|
|
44
|
+
/** The colour the substructure match is painted. */
|
|
45
|
+
substructureColor: string;
|
|
46
|
+
/** How opaque the substructure match is painted, from 0 to 1. */
|
|
47
|
+
substructureOpacity: number;
|
|
39
48
|
/** Write the index of every atom next to it. */
|
|
40
49
|
showAtomNumber: boolean;
|
|
41
50
|
/** Write the index of every bond next to it. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StructureSvg.d.ts","sourceRoot":"","sources":["../../../src/structure/ui/StructureSvg.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIrD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAGhE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"StructureSvg.d.ts","sourceRoot":"","sources":["../../../src/structure/ui/StructureSvg.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIrD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAGhE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAKlE,qCAAqC;AACrC,UAAU,iBAAiB;IACzB,4DAA4D;IAC5D,MAAM,EAAE,eAAe,CAAC;IACxB,uCAAuC;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,wCAAwC;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,0EAA0E;IAC1E,QAAQ,EAAE,OAAO,CAAC;IAClB,2EAA2E;IAC3E,cAAc,EAAE,MAAM,CAAC;IACvB;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,oDAAoD;IACpD,kBAAkB,EAAE,MAAM,CAAC;IAC3B;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,oDAAoD;IACpD,kBAAkB,EAAE,MAAM,CAAC;IAC3B;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oDAAoD;IACpD,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iEAAiE;IACjE,mBAAmB,EAAE,MAAM,CAAC;IAC5B,gDAAgD;IAChD,cAAc,EAAE,OAAO,CAAC;IACxB,gDAAgD;IAChD,cAAc,EAAE,OAAO,CAAC;IACxB,8DAA8D;IAC9D,WAAW,EAAE,OAAO,CAAC;IACrB,oEAAoE;IACpE,aAAa,EAAE,OAAO,CAAC;IACvB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,UAAU,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,yCAAyC;IACzC,kBAAkB,EAAE,kBAAkB,CAAC;IACvC;;;OAGG;IACH,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC;;;OAGG;IACH,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,yEAAyE;IACzE,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,YAAY,CA6EnE"}
|
|
@@ -3,6 +3,7 @@ import { useMemo } from 'react';
|
|
|
3
3
|
import { SvgRenderer } from 'react-ocl';
|
|
4
4
|
import { applyAtomLabels } from "../core/atomLabels.js";
|
|
5
5
|
import { sourceMolecule } from "../core/sourceMolecule.js";
|
|
6
|
+
import { substructureMatch } from "../core/substructureMatch.js";
|
|
6
7
|
import { StructurePlaceholder } from "./StructurePlaceholder.js";
|
|
7
8
|
/**
|
|
8
9
|
* Read the notation and draw the picture.
|
|
@@ -10,16 +11,20 @@ import { StructurePlaceholder } from "./StructurePlaceholder.js";
|
|
|
10
11
|
* @returns The svg, or the placeholder when the notation cannot be read.
|
|
11
12
|
*/
|
|
12
13
|
export function StructureSvg(props) {
|
|
13
|
-
const { source, fallback, atomLabels, atomLabelPlacement, onAtomClick, onBondClick, showCIPParity, ...rest } = props;
|
|
14
|
+
const { source, fallback, atomLabels, atomLabelPlacement, onAtomClick, onBondClick, showCIPParity, atomHighlight, atomHighlightColor, bondHighlight, bondHighlightColor, substructure, substructureColor, substructureOpacity, ...rest } = props;
|
|
14
15
|
const { kind, value, coordinates } = source;
|
|
15
16
|
// A map a caller builds during render is a new object every time; its
|
|
16
17
|
// content is what decides whether the molecule has to be read again.
|
|
17
18
|
const labelsKey = atomLabels === undefined ? '' : JSON.stringify([...atomLabels]);
|
|
18
19
|
const drawing = useMemo(() => readDrawing(kind, value, coordinates, labelsKey, atomLabelPlacement), [kind, value, coordinates, labelsKey, atomLabelPlacement]);
|
|
20
|
+
// Matched on the very molecule drawn, so the indices are the drawn atoms.
|
|
21
|
+
const match = useMemo(() => drawing === null || substructure === undefined
|
|
22
|
+
? null
|
|
23
|
+
: substructureMatch(drawing.molecule, substructure), [drawing, substructure]);
|
|
19
24
|
if (drawing === null) {
|
|
20
25
|
return (_jsx(StructurePlaceholder, { width: rest.width, height: rest.height, children: fallback }));
|
|
21
26
|
}
|
|
22
|
-
return (_jsx(SvgRenderer, { ...rest, molecule: drawing.molecule, noCarbonLabelWithCustomLabel: drawing.labelled, suppressCIPParity: !showCIPParity, onAtomClick: onAtomClick === undefined
|
|
27
|
+
return (_jsx(SvgRenderer, { ...rest, atomHighlight: match === null ? atomHighlight : match.atoms, atomHighlightColor: match === null ? atomHighlightColor : substructureColor, bondHighlight: match === null ? bondHighlight : match.bonds, bondHighlightColor: match === null ? bondHighlightColor : substructureColor, atomHighlightOpacity: match === null ? undefined : substructureOpacity, bondHighlightOpacity: match === null ? undefined : substructureOpacity, molecule: drawing.molecule, noCarbonLabelWithCustomLabel: drawing.labelled, suppressCIPParity: !showCIPParity, onAtomClick: onAtomClick === undefined
|
|
23
28
|
? undefined
|
|
24
29
|
: (atom) => {
|
|
25
30
|
onAtomClick(atom);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StructureSvg.js","sourceRoot":"","sources":["../../../src/structure/ui/StructureSvg.tsx"],"names":[],"mappings":";AAYA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAChC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAGxC,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"StructureSvg.js","sourceRoot":"","sources":["../../../src/structure/ui/StructureSvg.tsx"],"names":[],"mappings":"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"}
|
|
@@ -19,6 +19,10 @@ export type { StructureDropProps } from './StructureDrop.tsx';
|
|
|
19
19
|
export { StructureDrop } from './StructureDrop.tsx';
|
|
20
20
|
export type { StructureEditorHelpProps } from './StructureEditorHelp.tsx';
|
|
21
21
|
export { StructureEditorHelp } from './StructureEditorHelp.tsx';
|
|
22
|
+
export type { StructureSearchDialogProps } from './StructureSearchDialog.tsx';
|
|
23
|
+
export { StructureSearchDialog } from './StructureSearchDialog.tsx';
|
|
24
|
+
export type { StructureSearchModeLabel } from './useStructureSearchModes.ts';
|
|
25
|
+
export { useStructureSearchModes } from './useStructureSearchModes.ts';
|
|
22
26
|
export type { StructureExportDialogProps } from './StructureExportDialog.tsx';
|
|
23
27
|
export { StructureExportDialog } from './StructureExportDialog.tsx';
|
|
24
28
|
export type { StructureExportButtonProps } from './StructureExportButton.tsx';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/structure/ui/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,YAAY,EACV,qBAAqB,EACrB,mBAAmB,EACnB,6BAA6B,EAC7B,6BAA6B,GAC9B,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACvE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,YAAY,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,YAAY,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,YAAY,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAC1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,YAAY,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AAC9E,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACpE,YAAY,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AAC9E,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACpE,YAAY,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AAC5E,YAAY,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,YAAY,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/structure/ui/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,YAAY,EACV,qBAAqB,EACrB,mBAAmB,EACnB,6BAA6B,EAC7B,6BAA6B,GAC9B,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACvE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,YAAY,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,YAAY,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,YAAY,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAC1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,YAAY,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AAC9E,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACpE,YAAY,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AAC7E,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,YAAY,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AAC9E,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACpE,YAAY,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AAC9E,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACpE,YAAY,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AAC5E,YAAY,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,YAAY,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC"}
|
|
@@ -14,6 +14,8 @@ export { Structure } from "./Structure.js";
|
|
|
14
14
|
export { StructureEditor } from "./StructureEditor.js";
|
|
15
15
|
export { StructureDrop } from "./StructureDrop.js";
|
|
16
16
|
export { StructureEditorHelp } from "./StructureEditorHelp.js";
|
|
17
|
+
export { StructureSearchDialog } from "./StructureSearchDialog.js";
|
|
18
|
+
export { useStructureSearchModes } from "./useStructureSearchModes.js";
|
|
17
19
|
export { StructureExportDialog } from "./StructureExportDialog.js";
|
|
18
20
|
export { StructureExportButton } from "./StructureExportButton.js";
|
|
19
21
|
export { useToolbarFloor } from "./useToolbarFloor.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/structure/ui/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AASH,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAiB,CAAC;AAE5C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAuB,CAAC;AAExD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAqB,CAAC;AAEpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA2B,CAAC;AAEhE,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA6B,CAAC;AAEpE,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA6B,CAAC;AAGpE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/structure/ui/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AASH,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAiB,CAAC;AAE5C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAuB,CAAC;AAExD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAqB,CAAC;AAEpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA2B,CAAC;AAEhE,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA6B,CAAC;AAEpE,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAEvE,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA6B,CAAC;AAEpE,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA6B,CAAC;AAGpE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { StructureSearchMode } from '../core/structureSearch.ts';
|
|
2
|
+
/** A mode, with what a button says and what its tooltip adds. */
|
|
3
|
+
export interface StructureSearchModeLabel {
|
|
4
|
+
/** The mode. */
|
|
5
|
+
mode: StructureSearchMode;
|
|
6
|
+
/** What the button says. */
|
|
7
|
+
label: string;
|
|
8
|
+
/** One line on what the mode finds. */
|
|
9
|
+
help: string;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* The modes in the reader's language, for a site that shows the mode in force
|
|
13
|
+
* beside the drawing.
|
|
14
|
+
* @param modes - The modes, in order.
|
|
15
|
+
* @returns Each mode with its label and its one-line help.
|
|
16
|
+
*/
|
|
17
|
+
export declare function useStructureSearchModes(modes?: readonly StructureSearchMode[]): StructureSearchModeLabel[];
|
|
18
|
+
//# sourceMappingURL=useStructureSearchModes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useStructureSearchModes.d.ts","sourceRoot":"","sources":["../../../src/structure/ui/useStructureSearchModes.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAGtE,iEAAiE;AACjE,MAAM,WAAW,wBAAwB;IACvC,gBAAgB;IAChB,IAAI,EAAE,mBAAmB,CAAC;IAC1B,4BAA4B;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,uCAAuC;IACvC,IAAI,EAAE,MAAM,CAAC;CACd;AAsBD;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,GAAE,SAAS,mBAAmB,EAA2B,GAC7D,wBAAwB,EAAE,CAO5B"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { useChromeT } from "../../i18n/ui/useT.js";
|
|
2
|
+
import { STRUCTURE_SEARCH_MODES } from "../core/structureSearch.js";
|
|
3
|
+
const MODE_KEYS = {
|
|
4
|
+
substructure: [
|
|
5
|
+
'structure.search.substructure',
|
|
6
|
+
'structure.search.substructureHelp',
|
|
7
|
+
],
|
|
8
|
+
similarity: [
|
|
9
|
+
'structure.search.similarity',
|
|
10
|
+
'structure.search.similarityHelp',
|
|
11
|
+
],
|
|
12
|
+
exact: ['structure.search.exact', 'structure.search.exactHelp'],
|
|
13
|
+
exactNoStereo: [
|
|
14
|
+
'structure.search.exactNoStereo',
|
|
15
|
+
'structure.search.exactNoStereoHelp',
|
|
16
|
+
],
|
|
17
|
+
exactNoStereoTautomer: [
|
|
18
|
+
'structure.search.exactNoStereoTautomer',
|
|
19
|
+
'structure.search.exactNoStereoTautomerHelp',
|
|
20
|
+
],
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* The modes in the reader's language, for a site that shows the mode in force
|
|
24
|
+
* beside the drawing.
|
|
25
|
+
* @param modes - The modes, in order.
|
|
26
|
+
* @returns Each mode with its label and its one-line help.
|
|
27
|
+
*/
|
|
28
|
+
export function useStructureSearchModes(modes = STRUCTURE_SEARCH_MODES) {
|
|
29
|
+
const t = useChromeT();
|
|
30
|
+
return modes.map((mode) => ({
|
|
31
|
+
mode,
|
|
32
|
+
label: t(MODE_KEYS[mode][0]),
|
|
33
|
+
help: t(MODE_KEYS[mode][1]),
|
|
34
|
+
}));
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=useStructureSearchModes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useStructureSearchModes.js","sourceRoot":"","sources":["../../../src/structure/ui/useStructureSearchModes.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEnD,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAYpE,MAAM,SAAS,GAAwD;IACrE,YAAY,EAAE;QACZ,+BAA+B;QAC/B,mCAAmC;KACpC;IACD,UAAU,EAAE;QACV,6BAA6B;QAC7B,iCAAiC;KAClC;IACD,KAAK,EAAE,CAAC,wBAAwB,EAAE,4BAA4B,CAAC;IAC/D,aAAa,EAAE;QACb,gCAAgC;QAChC,oCAAoC;KACrC;IACD,qBAAqB,EAAE;QACrB,wCAAwC;QACxC,4CAA4C;KAC7C;CACF,CAAC;AAEF;;;;;GAKG;AACH,MAAM,UAAU,uBAAuB,CACrC,QAAwC,sBAAsB;IAE9D,MAAM,CAAC,GAAG,UAAU,EAAE,CAAC;IACvB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAC1B,IAAI;QACJ,KAAK,EAAE,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5B,IAAI,EAAE,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;KAC5B,CAAC,CAAC,CAAC;AACN,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-cheminfo",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.74.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"description": "React components, hooks and framework-free helpers shared by the cheminfo sites: site chrome, citations, sharing, routing, pedagogy, charts, and the structure, orbital and 3D molecule viewers",
|
|
6
6
|
"author": "Luc Patiny",
|
package/src/locales/de.json
CHANGED
|
@@ -583,6 +583,28 @@
|
|
|
583
583
|
"structure.export.noStereoIdCodeHelp": "Jedes Stereoisomer ergibt diese, womit ein ohne Stereozentren gezeichneter Eintrag gefunden wird.",
|
|
584
584
|
"structure.export.noStereoTautomerIdCode": "idCode ohne Stereochemie und Tautomerie",
|
|
585
585
|
"structure.export.noStereoTautomerIdCodeHelp": "Jedes Tautomer und jedes Stereoisomer ergibt diese: Keto- und Enolform haben denselben Schlüssel.",
|
|
586
|
+
"structure.search.title": "Nach Struktur filtern",
|
|
587
|
+
"structure.search.apply": "Anwenden",
|
|
588
|
+
"structure.search.examples": "Ausgehend von",
|
|
589
|
+
"structure.search.substructure": "Enthält",
|
|
590
|
+
"structure.search.substructureHelp": "Jedes Molekül, das die Zeichnung enthält.",
|
|
591
|
+
"structure.search.similarity": "Ähnlich zu",
|
|
592
|
+
"structure.search.similarityHelp": "Geordnet danach, wie viel der Zeichnung sie teilen.",
|
|
593
|
+
"structure.search.exact": "Ist genau",
|
|
594
|
+
"structure.search.exactHelp": "Genau das gezeichnete Molekül.",
|
|
595
|
+
"structure.search.exactNoStereo": "Beliebiges Stereoisomer",
|
|
596
|
+
"structure.search.exactNoStereoHelp": "Dieselbe Verbindung, wie auch immer ihre Stereochemie gezeichnet ist.",
|
|
597
|
+
"structure.search.exactNoStereoTautomer": "Beliebiges Tautomer",
|
|
598
|
+
"structure.search.exactNoStereoTautomerHelp": "Dieselbe Verbindung in jeder tautomeren Form, ohne ihre Stereochemie.",
|
|
599
|
+
"structure.search.similarityLabel": "Ähnlichkeit",
|
|
600
|
+
"structure.search.threshold": "Mindestähnlichkeit",
|
|
601
|
+
"structure.search.thresholdHelp": "Der kleinste Tanimoto-Koeffizient, den ein Treffer mit der Zeichnung erreicht.",
|
|
602
|
+
"structure.search.thresholdOption": "≥ {percent}",
|
|
603
|
+
"structure.search.exampleBenzene": "Benzol",
|
|
604
|
+
"structure.search.examplePyridine": "Pyridin",
|
|
605
|
+
"structure.search.exampleAmide": "Amid",
|
|
606
|
+
"structure.search.exampleSulfonamide": "Sulfonamid",
|
|
607
|
+
"structure.search.exampleTrifluoromethyl": "Trifluormethyl",
|
|
586
608
|
"molecule3d.view": "Ansicht",
|
|
587
609
|
"molecule3d.resetView": "Ansicht zurücksetzen",
|
|
588
610
|
"molecule3d.spin": "Drehen lassen",
|
package/src/locales/en.json
CHANGED
|
@@ -527,6 +527,28 @@
|
|
|
527
527
|
"structure.export.noStereoIdCodeHelp": "Every stereoisomer of this structure gives this one, so it finds a record drawn without its stereocentres.",
|
|
528
528
|
"structure.export.noStereoTautomerIdCode": "idCode without stereochemistry or tautomer",
|
|
529
529
|
"structure.export.noStereoTautomerIdCodeHelp": "Every tautomer and every stereoisomer gives this one, so the keto and the enol form key together.",
|
|
530
|
+
"structure.search.title": "Filter by structure",
|
|
531
|
+
"structure.search.apply": "Apply",
|
|
532
|
+
"structure.search.examples": "Start from",
|
|
533
|
+
"structure.search.substructure": "Contains",
|
|
534
|
+
"structure.search.substructureHelp": "Every molecule the drawing is part of.",
|
|
535
|
+
"structure.search.similarity": "Similar to",
|
|
536
|
+
"structure.search.similarityHelp": "Ranked by how much of the drawing they share.",
|
|
537
|
+
"structure.search.exact": "Is exactly",
|
|
538
|
+
"structure.search.exactHelp": "The one molecule drawn.",
|
|
539
|
+
"structure.search.exactNoStereo": "Any stereoisomer",
|
|
540
|
+
"structure.search.exactNoStereoHelp": "The same compound however its stereochemistry is drawn.",
|
|
541
|
+
"structure.search.exactNoStereoTautomer": "Any tautomer",
|
|
542
|
+
"structure.search.exactNoStereoTautomerHelp": "The same compound in any tautomeric form, its stereochemistry ignored.",
|
|
543
|
+
"structure.search.similarityLabel": "Similarity",
|
|
544
|
+
"structure.search.threshold": "Minimum similarity",
|
|
545
|
+
"structure.search.thresholdHelp": "The least Tanimoto coefficient a hit reaches with the drawing.",
|
|
546
|
+
"structure.search.thresholdOption": "≥ {percent}",
|
|
547
|
+
"structure.search.exampleBenzene": "Benzene",
|
|
548
|
+
"structure.search.examplePyridine": "Pyridine",
|
|
549
|
+
"structure.search.exampleAmide": "Amide",
|
|
550
|
+
"structure.search.exampleSulfonamide": "Sulfonamide",
|
|
551
|
+
"structure.search.exampleTrifluoromethyl": "Trifluoromethyl",
|
|
530
552
|
"periodic.table": "Periodic table",
|
|
531
553
|
"periodic.group": "Group {group}",
|
|
532
554
|
"periodic.period": "Period {period}",
|
package/src/locales/es.json
CHANGED
|
@@ -583,6 +583,28 @@
|
|
|
583
583
|
"structure.export.noStereoIdCodeHelp": "Todos los estereoisómeros dan este, así que encuentra un registro dibujado sin sus centros estereogénicos.",
|
|
584
584
|
"structure.export.noStereoTautomerIdCode": "idCode sin estereoquímica ni tautomería",
|
|
585
585
|
"structure.export.noStereoTautomerIdCodeHelp": "Todos los tautómeros y estereoisómeros dan este: la forma cetónica y la enólica comparten clave.",
|
|
586
|
+
"structure.search.title": "Filtrar por estructura",
|
|
587
|
+
"structure.search.apply": "Aplicar",
|
|
588
|
+
"structure.search.examples": "Partir de",
|
|
589
|
+
"structure.search.substructure": "Contiene",
|
|
590
|
+
"structure.search.substructureHelp": "Toda molécula de la que el dibujo forma parte.",
|
|
591
|
+
"structure.search.similarity": "Similar a",
|
|
592
|
+
"structure.search.similarityHelp": "Ordenadas por cuánto del dibujo comparten.",
|
|
593
|
+
"structure.search.exact": "Es exactamente",
|
|
594
|
+
"structure.search.exactHelp": "La molécula dibujada.",
|
|
595
|
+
"structure.search.exactNoStereo": "Cualquier estereoisómero",
|
|
596
|
+
"structure.search.exactNoStereoHelp": "El mismo compuesto, sea cual sea su estereoquímica dibujada.",
|
|
597
|
+
"structure.search.exactNoStereoTautomer": "Cualquier tautómero",
|
|
598
|
+
"structure.search.exactNoStereoTautomerHelp": "El mismo compuesto en cualquier forma tautomérica, sin su estereoquímica.",
|
|
599
|
+
"structure.search.similarityLabel": "Similitud",
|
|
600
|
+
"structure.search.threshold": "Similitud mínima",
|
|
601
|
+
"structure.search.thresholdHelp": "El menor coeficiente de Tanimoto que alcanza un resultado con el dibujo.",
|
|
602
|
+
"structure.search.thresholdOption": "≥ {percent}",
|
|
603
|
+
"structure.search.exampleBenzene": "Benceno",
|
|
604
|
+
"structure.search.examplePyridine": "Piridina",
|
|
605
|
+
"structure.search.exampleAmide": "Amida",
|
|
606
|
+
"structure.search.exampleSulfonamide": "Sulfonamida",
|
|
607
|
+
"structure.search.exampleTrifluoromethyl": "Trifluorometilo",
|
|
586
608
|
"molecule3d.view": "Vista",
|
|
587
609
|
"molecule3d.resetView": "Reiniciar la vista",
|
|
588
610
|
"molecule3d.spin": "Giro continuo",
|
package/src/locales/fr.json
CHANGED
|
@@ -583,6 +583,28 @@
|
|
|
583
583
|
"structure.export.noStereoIdCodeHelp": "Tous les stéréoisomères donnent celui-ci, ce qui retrouve un enregistrement dessiné sans ses centres stéréogènes.",
|
|
584
584
|
"structure.export.noStereoTautomerIdCode": "idCode sans stéréochimie ni tautomérie",
|
|
585
585
|
"structure.export.noStereoTautomerIdCodeHelp": "Tous les tautomères et tous les stéréoisomères donnent celui-ci : la forme cétone et la forme énol ont la même clé.",
|
|
586
|
+
"structure.search.title": "Filtrer par structure",
|
|
587
|
+
"structure.search.apply": "Appliquer",
|
|
588
|
+
"structure.search.examples": "Partir de",
|
|
589
|
+
"structure.search.substructure": "Contient",
|
|
590
|
+
"structure.search.substructureHelp": "Toutes les molécules dont le dessin fait partie.",
|
|
591
|
+
"structure.search.similarity": "Similaire à",
|
|
592
|
+
"structure.search.similarityHelp": "Classées selon la part du dessin qu’elles partagent.",
|
|
593
|
+
"structure.search.exact": "Exactement",
|
|
594
|
+
"structure.search.exactHelp": "La seule molécule dessinée.",
|
|
595
|
+
"structure.search.exactNoStereo": "Tout stéréoisomère",
|
|
596
|
+
"structure.search.exactNoStereoHelp": "Le même composé, quelle que soit sa stéréochimie dessinée.",
|
|
597
|
+
"structure.search.exactNoStereoTautomer": "Tout tautomère",
|
|
598
|
+
"structure.search.exactNoStereoTautomerHelp": "Le même composé sous toute forme tautomère, sa stéréochimie ignorée.",
|
|
599
|
+
"structure.search.similarityLabel": "Similarité",
|
|
600
|
+
"structure.search.threshold": "Similarité minimale",
|
|
601
|
+
"structure.search.thresholdHelp": "Le plus petit coefficient de Tanimoto qu’un résultat atteint avec le dessin.",
|
|
602
|
+
"structure.search.thresholdOption": "≥ {percent}",
|
|
603
|
+
"structure.search.exampleBenzene": "Benzène",
|
|
604
|
+
"structure.search.examplePyridine": "Pyridine",
|
|
605
|
+
"structure.search.exampleAmide": "Amide",
|
|
606
|
+
"structure.search.exampleSulfonamide": "Sulfonamide",
|
|
607
|
+
"structure.search.exampleTrifluoromethyl": "Trifluorométhyle",
|
|
586
608
|
"molecule3d.view": "Vue",
|
|
587
609
|
"molecule3d.resetView": "Réinitialiser la vue",
|
|
588
610
|
"molecule3d.spin": "Rotation continue",
|
package/src/locales/it.json
CHANGED
|
@@ -527,6 +527,28 @@
|
|
|
527
527
|
"structure.export.noStereoIdCodeHelp": "Ogni stereoisomero dà questo, così trova una voce disegnata senza i suoi centri stereogenici.",
|
|
528
528
|
"structure.export.noStereoTautomerIdCode": "idCode senza stereochimica né tautomeria",
|
|
529
529
|
"structure.export.noStereoTautomerIdCodeHelp": "Ogni tautomero e ogni stereoisomero dà questo: la forma chetonica e quella enolica hanno la stessa chiave.",
|
|
530
|
+
"structure.search.title": "Filtra per struttura",
|
|
531
|
+
"structure.search.apply": "Applica",
|
|
532
|
+
"structure.search.examples": "Parti da",
|
|
533
|
+
"structure.search.substructure": "Contiene",
|
|
534
|
+
"structure.search.substructureHelp": "Ogni molecola di cui il disegno fa parte.",
|
|
535
|
+
"structure.search.similarity": "Simile a",
|
|
536
|
+
"structure.search.similarityHelp": "Ordinate per quanta parte del disegno condividono.",
|
|
537
|
+
"structure.search.exact": "È esattamente",
|
|
538
|
+
"structure.search.exactHelp": "La molecola disegnata.",
|
|
539
|
+
"structure.search.exactNoStereo": "Qualsiasi stereoisomero",
|
|
540
|
+
"structure.search.exactNoStereoHelp": "Lo stesso composto, qualunque sia la stereochimica disegnata.",
|
|
541
|
+
"structure.search.exactNoStereoTautomer": "Qualsiasi tautomero",
|
|
542
|
+
"structure.search.exactNoStereoTautomerHelp": "Lo stesso composto in qualsiasi forma tautomerica, senza la sua stereochimica.",
|
|
543
|
+
"structure.search.similarityLabel": "Similarità",
|
|
544
|
+
"structure.search.threshold": "Similarità minima",
|
|
545
|
+
"structure.search.thresholdHelp": "Il più piccolo coefficiente di Tanimoto che un risultato raggiunge con il disegno.",
|
|
546
|
+
"structure.search.thresholdOption": "≥ {percent}",
|
|
547
|
+
"structure.search.exampleBenzene": "Benzene",
|
|
548
|
+
"structure.search.examplePyridine": "Piridina",
|
|
549
|
+
"structure.search.exampleAmide": "Ammide",
|
|
550
|
+
"structure.search.exampleSulfonamide": "Sulfonammide",
|
|
551
|
+
"structure.search.exampleTrifluoromethyl": "Trifluorometile",
|
|
530
552
|
"periodic.table": "Tavola periodica",
|
|
531
553
|
"periodic.group": "Gruppo {group}",
|
|
532
554
|
"periodic.period": "Periodo {period}",
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A SMILES turned into the idCode a query editor holds.
|
|
3
|
+
*
|
|
4
|
+
* **Not exported from `core/index.ts`**: it value-imports `openchemlib`, so
|
|
5
|
+
* the structure search dialog loads it with a dynamic import, only once an
|
|
6
|
+
* example is clicked.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import { Molecule } from 'openchemlib';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Read a SMILES as a query fragment.
|
|
13
|
+
* @param smiles - The fragment.
|
|
14
|
+
* @returns Its idCode, flagged as a fragment so any substituent may hang off
|
|
15
|
+
* it; empty when the SMILES cannot be read.
|
|
16
|
+
*/
|
|
17
|
+
export function fragmentIdCode(smiles: string): string {
|
|
18
|
+
try {
|
|
19
|
+
const fragment = Molecule.fromSmiles(smiles);
|
|
20
|
+
fragment.setFragment(true);
|
|
21
|
+
return fragment.getIDCode();
|
|
22
|
+
} catch {
|
|
23
|
+
return '';
|
|
24
|
+
}
|
|
25
|
+
}
|
|
@@ -77,6 +77,16 @@ export type {
|
|
|
77
77
|
StructurePictureOptions,
|
|
78
78
|
} from './structurePicture.ts';
|
|
79
79
|
export { STRUCTURE_BOND_LENGTH, structurePicture } from './structurePicture.ts';
|
|
80
|
+
export type {
|
|
81
|
+
StructureSearchExample,
|
|
82
|
+
StructureSearchMode,
|
|
83
|
+
StructureSearchQuery,
|
|
84
|
+
} from './structureSearch.ts';
|
|
85
|
+
export {
|
|
86
|
+
SIMILARITY_THRESHOLDS,
|
|
87
|
+
STRUCTURE_SEARCH_MODES,
|
|
88
|
+
similarityThresholds,
|
|
89
|
+
} from './structureSearch.ts';
|
|
80
90
|
export type {
|
|
81
91
|
StructureSource,
|
|
82
92
|
StructureSourceInput,
|