react-cheminfo 0.29.0 → 0.31.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/README.md +62 -2
- package/lib/chrome/ui/AccountButton.d.ts +76 -0
- package/lib/chrome/ui/AccountButton.d.ts.map +1 -0
- package/lib/chrome/ui/AccountButton.js +66 -0
- package/lib/chrome/ui/AccountButton.js.map +1 -0
- package/lib/chrome/ui/index.d.ts +2 -0
- package/lib/chrome/ui/index.d.ts.map +1 -1
- package/lib/chrome/ui/index.js +1 -0
- package/lib/chrome/ui/index.js.map +1 -1
- package/lib/clipboard/ui/ClickToCopy.d.ts +6 -0
- package/lib/clipboard/ui/ClickToCopy.d.ts.map +1 -1
- package/lib/clipboard/ui/ClickToCopy.js +3 -3
- package/lib/clipboard/ui/ClickToCopy.js.map +1 -1
- package/lib/download/core/downloadFigure.d.ts +7 -5
- package/lib/download/core/downloadFigure.d.ts.map +1 -1
- package/lib/download/core/downloadFigure.js +7 -6
- package/lib/download/core/downloadFigure.js.map +1 -1
- package/lib/download/core/figureLayout.d.ts +55 -0
- package/lib/download/core/figureLayout.d.ts.map +1 -0
- package/lib/download/core/figureLayout.js +89 -0
- package/lib/download/core/figureLayout.js.map +1 -0
- package/lib/download/core/figureScale.d.ts +9 -0
- package/lib/download/core/figureScale.d.ts.map +1 -1
- package/lib/download/core/figureScale.js +10 -0
- package/lib/download/core/figureScale.js.map +1 -1
- package/lib/download/core/figureSettle.d.ts +51 -0
- package/lib/download/core/figureSettle.d.ts.map +1 -0
- package/lib/download/core/figureSettle.js +81 -0
- package/lib/download/core/figureSettle.js.map +1 -0
- package/lib/download/core/figureSvg.d.ts +7 -1
- package/lib/download/core/figureSvg.d.ts.map +1 -1
- package/lib/download/core/figureSvg.js +1 -0
- package/lib/download/core/figureSvg.js.map +1 -1
- package/lib/download/core/figureSvgDocument.d.ts +7 -0
- package/lib/download/core/figureSvgDocument.d.ts.map +1 -1
- package/lib/download/core/figureSvgDocument.js +11 -2
- package/lib/download/core/figureSvgDocument.js.map +1 -1
- package/lib/download/core/index.d.ts +5 -1
- package/lib/download/core/index.d.ts.map +1 -1
- package/lib/download/core/index.js +3 -1
- package/lib/download/core/index.js.map +1 -1
- package/lib/download/ui/FigureDownload.d.ts +18 -4
- package/lib/download/ui/FigureDownload.d.ts.map +1 -1
- package/lib/download/ui/FigureDownload.js +35 -9
- package/lib/download/ui/FigureDownload.js.map +1 -1
- package/lib/download/ui/FigureDownloadPanel.d.ts +17 -7
- package/lib/download/ui/FigureDownloadPanel.d.ts.map +1 -1
- package/lib/download/ui/FigureDownloadPanel.js +30 -22
- package/lib/download/ui/FigureDownloadPanel.js.map +1 -1
- package/lib/download/ui/FigureSizeField.d.ts +27 -0
- package/lib/download/ui/FigureSizeField.d.ts.map +1 -0
- package/lib/download/ui/FigureSizeField.js +87 -0
- package/lib/download/ui/FigureSizeField.js.map +1 -0
- package/lib/download/ui/FigureSizeRows.d.ts +34 -0
- package/lib/download/ui/FigureSizeRows.d.ts.map +1 -0
- package/lib/download/ui/FigureSizeRows.js +54 -0
- package/lib/download/ui/FigureSizeRows.js.map +1 -0
- package/lib/download/ui/index.d.ts +2 -0
- package/lib/download/ui/index.d.ts.map +1 -1
- package/lib/download/ui/index.js.map +1 -1
- package/lib/download/ui/useFigureRedraw.d.ts +27 -0
- package/lib/download/ui/useFigureRedraw.d.ts.map +1 -0
- package/lib/download/ui/useFigureRedraw.js +78 -0
- package/lib/download/ui/useFigureRedraw.js.map +1 -0
- package/lib/i18n/core/chromeCatalog.d.ts +1 -1
- package/lib/i18n/core/chromeCatalog.d.ts.map +1 -1
- package/lib/locales/de.json +13 -2
- package/lib/locales/en.json +13 -2
- package/lib/locales/es.json +13 -2
- package/lib/locales/fr.json +13 -2
- package/lib/overlay/ui/OverlayValueMenu.d.ts.map +1 -1
- package/lib/overlay/ui/OverlayValueMenu.js +7 -1
- package/lib/overlay/ui/OverlayValueMenu.js.map +1 -1
- package/lib/structure/core/conformerBoltzmann.d.ts +56 -0
- package/lib/structure/core/conformerBoltzmann.d.ts.map +1 -0
- package/lib/structure/core/conformerBoltzmann.js +96 -0
- package/lib/structure/core/conformerBoltzmann.js.map +1 -0
- package/lib/structure/core/conformerEnergy.d.ts +69 -0
- package/lib/structure/core/conformerEnergy.d.ts.map +1 -0
- package/lib/structure/core/conformerEnergy.js +47 -0
- package/lib/structure/core/conformerEnergy.js.map +1 -0
- package/lib/structure/core/index.d.ts +3 -0
- package/lib/structure/core/index.d.ts.map +1 -1
- package/lib/structure/core/index.js +2 -0
- package/lib/structure/core/index.js.map +1 -1
- package/lib/structure/ui/ConformerTable.d.ts +73 -0
- package/lib/structure/ui/ConformerTable.d.ts.map +1 -0
- package/lib/structure/ui/ConformerTable.js +259 -0
- package/lib/structure/ui/ConformerTable.js.map +1 -0
- package/lib/structure/ui/conformerColumns.d.ts +30 -0
- package/lib/structure/ui/conformerColumns.d.ts.map +1 -0
- package/lib/structure/ui/conformerColumns.js +37 -0
- package/lib/structure/ui/conformerColumns.js.map +1 -0
- package/lib/ui.d.ts +4 -0
- package/lib/ui.d.ts.map +1 -1
- package/lib/ui.js +2 -0
- package/lib/ui.js.map +1 -1
- package/package.json +1 -1
- package/src/chrome/ui/AccountButton.tsx +185 -0
- package/src/chrome/ui/index.ts +2 -0
- package/src/clipboard/ui/ClickToCopy.tsx +9 -1
- package/src/download/core/downloadFigure.ts +12 -9
- package/src/download/core/figureLayout.ts +114 -0
- package/src/download/core/figureScale.ts +13 -0
- package/src/download/core/figureSettle.ts +112 -0
- package/src/download/core/figureSvg.ts +8 -1
- package/src/download/core/figureSvgDocument.ts +19 -2
- package/src/download/core/index.ts +13 -0
- package/src/download/ui/FigureDownload.tsx +88 -35
- package/src/download/ui/FigureDownloadPanel.tsx +45 -22
- package/src/download/ui/FigureSizeField.tsx +153 -0
- package/src/download/ui/FigureSizeRows.tsx +108 -0
- package/src/download/ui/index.ts +2 -0
- package/src/download/ui/useFigureRedraw.tsx +115 -0
- package/src/locales/de.json +13 -2
- package/src/locales/en.json +13 -2
- package/src/locales/es.json +13 -2
- package/src/locales/fr.json +13 -2
- package/src/overlay/ui/OverlayValueMenu.tsx +7 -1
- package/src/structure/core/conformerBoltzmann.ts +102 -0
- package/src/structure/core/conformerEnergy.ts +97 -0
- package/src/structure/core/index.ts +15 -0
- package/src/structure/ui/ConformerTable.tsx +429 -0
- package/src/structure/ui/conformerColumns.ts +55 -0
- package/src/ui.ts +12 -0
- package/styles/chrome.css +55 -0
|
@@ -3,16 +3,19 @@ import { useChromeT } from "../../i18n/ui/useT.js";
|
|
|
3
3
|
import { OverlayAction } from "../../overlay/ui/OverlayAction.js";
|
|
4
4
|
import { OverlayPanel } from "../../overlay/ui/OverlayPanel.js";
|
|
5
5
|
import { OverlaySegmented } from "../../overlay/ui/OverlaySegmented.js";
|
|
6
|
+
import { figureLayoutSize } from "../core/figureLayout.js";
|
|
6
7
|
import { figurePixels, figureScaleFits, figureScaleLabel, formatFigurePixels, } from "../core/figureScale.js";
|
|
8
|
+
import { FigureSizeRows } from "./FigureSizeRows.js";
|
|
7
9
|
/**
|
|
8
|
-
* The
|
|
10
|
+
* The choices behind the save glyph, and the button that writes the file.
|
|
9
11
|
*
|
|
10
|
-
* The resolution
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
12
|
+
* The resolution applies to both formats, and means what the reader needs it
|
|
13
|
+
* to: a PNG is painted with that many more pixels, and an SVG, drawn the same,
|
|
14
|
+
* opens that many times larger in the slide or the document it is dropped
|
|
15
|
+
* into. Only a PNG meets the ceiling of what a browser can paint, so only its
|
|
16
|
+
* choices past that ceiling are greyed.
|
|
14
17
|
*
|
|
15
|
-
*
|
|
18
|
+
* The sentence at the foot is the panel's own hint line rather than a row of its own: it
|
|
16
19
|
* is not a setting, it is what the two settings above it currently amount to,
|
|
17
20
|
* and it is the only thing here that answers the question a reader actually
|
|
18
21
|
* has, which is how big the file is going to be. Saving itself is a command
|
|
@@ -24,19 +27,24 @@ import { figurePixels, figureScaleFits, figureScaleLabel, formatFigurePixels, }
|
|
|
24
27
|
export function FigureDownloadPanel(props) {
|
|
25
28
|
const { title, format, scale, scales, size, failure, saving } = props;
|
|
26
29
|
const { onFormatChange, onScaleChange, onSave, rasterSvg = false } = props;
|
|
30
|
+
const { sizing } = props;
|
|
27
31
|
const t = useChromeT();
|
|
28
|
-
|
|
29
|
-
|
|
32
|
+
// What the file is drawn at: the figure on screen, or the shape picked.
|
|
33
|
+
const drawn = size === null || sizing === undefined
|
|
34
|
+
? size
|
|
35
|
+
: figureLayoutSize(sizing.layout, size, sizing.custom ?? size);
|
|
36
|
+
const painted = format === 'png' || rasterSvg;
|
|
37
|
+
return (_jsxs(OverlayPanel, { title: title, hint: hintOf(format, drawn, scale, failure, rasterSvg, t), actions: _jsx(OverlayAction, { text: t('download.save'), icon: "download", intent: "primary", disabled: saving || size === null, onClick: onSave }), children: [_jsx(OverlaySegmented, { label: t('download.format'), help: {
|
|
30
38
|
title: t('download.format'),
|
|
31
39
|
body: t('download.formatHelp'),
|
|
32
|
-
}, value: format, options: FORMAT_CHOICES, onChange: onFormatChange }), _jsx(OverlaySegmented, { label: t('download.resolution'), help: {
|
|
40
|
+
}, value: format, options: FORMAT_CHOICES, onChange: onFormatChange }), sizing === undefined ? null : (_jsx(FigureSizeRows, { sizing: sizing, size: size })), _jsx(OverlaySegmented, { label: t('download.resolution'), help: {
|
|
33
41
|
title: t('download.resolution'),
|
|
34
42
|
body: t('download.resolutionHelp'),
|
|
35
43
|
example: {
|
|
36
44
|
code: '2×',
|
|
37
45
|
note: t('download.resolutionExample'),
|
|
38
46
|
},
|
|
39
|
-
}, value: String(scale), options: scaleChoices(scales,
|
|
47
|
+
}, value: String(scale), options: scaleChoices(scales, drawn, painted), onChange: (picked) => onScaleChange(Number(picked)) })] }));
|
|
40
48
|
}
|
|
41
49
|
/** The two files a figure can leave the page as. */
|
|
42
50
|
const FORMAT_CHOICES = [
|
|
@@ -47,12 +55,14 @@ const FORMAT_CHOICES = [
|
|
|
47
55
|
* The multiples offered, each saying what it would actually produce.
|
|
48
56
|
*
|
|
49
57
|
* One too large for the browser to paint is greyed rather than dropped, so the
|
|
50
|
-
* reader learns the ceiling exists before they meet it as a blank file.
|
|
58
|
+
* reader learns the ceiling exists before they meet it as a blank file. An SVG
|
|
59
|
+
* is not painted, so it has no such ceiling.
|
|
51
60
|
* @param scales - The multiples the caller offers.
|
|
52
|
-
* @param size - How big the figure is
|
|
61
|
+
* @param size - How big the figure is drawn for the file.
|
|
62
|
+
* @param painted - Whether the file is painted into pixels.
|
|
53
63
|
* @returns The choices, in the order offered.
|
|
54
64
|
*/
|
|
55
|
-
function scaleChoices(scales, size) {
|
|
65
|
+
function scaleChoices(scales, size, painted) {
|
|
56
66
|
const choices = [];
|
|
57
67
|
for (const scale of scales) {
|
|
58
68
|
const pixels = size === null ? null : figurePixels(size, scale);
|
|
@@ -60,7 +70,7 @@ function scaleChoices(scales, size) {
|
|
|
60
70
|
value: String(scale),
|
|
61
71
|
label: figureScaleLabel(scale),
|
|
62
72
|
title: pixels === null ? undefined : formatFigurePixels(pixels),
|
|
63
|
-
disabled: size !== null && !figureScaleFits(size, scale),
|
|
73
|
+
disabled: painted && size !== null && !figureScaleFits(size, scale),
|
|
64
74
|
});
|
|
65
75
|
}
|
|
66
76
|
return choices;
|
|
@@ -68,8 +78,8 @@ function scaleChoices(scales, size) {
|
|
|
68
78
|
/**
|
|
69
79
|
* The line at the foot of the panel: what pressing save is about to do.
|
|
70
80
|
* @param format - Which file the reader is about to write.
|
|
71
|
-
* @param size - How big the figure is
|
|
72
|
-
* @param scale - The multiple it is
|
|
81
|
+
* @param size - How big the figure is drawn for the file.
|
|
82
|
+
* @param scale - The multiple it is saved at.
|
|
73
83
|
* @param failure - What went wrong last time, if anything.
|
|
74
84
|
* @param rasterSvg - Whether the SVG embeds a rendered picture.
|
|
75
85
|
* @param t - The chrome's formatter, so the sentence is in the language of
|
|
@@ -86,11 +96,9 @@ function hintOf(format, size, scale, failure, rasterSvg, t) {
|
|
|
86
96
|
pixels: formatFigurePixels(figurePixels(size, scale)),
|
|
87
97
|
});
|
|
88
98
|
}
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
pixels: formatFigurePixels(figurePixels(size, scale)),
|
|
94
|
-
});
|
|
99
|
+
const pixels = formatFigurePixels(figurePixels(size, scale));
|
|
100
|
+
return format === 'svg'
|
|
101
|
+
? t('download.hintSvg', { pixels })
|
|
102
|
+
: t('download.hintPng', { pixels });
|
|
95
103
|
}
|
|
96
104
|
//# sourceMappingURL=FigureDownloadPanel.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FigureDownloadPanel.js","sourceRoot":"","sources":["../../../src/download/ui/FigureDownloadPanel.tsx"],"names":[],"mappings":";AAIA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAoC,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAmC,CAAC;AAEjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,sCAAuC,CAAC;
|
|
1
|
+
{"version":3,"file":"FigureDownloadPanel.js","sourceRoot":"","sources":["../../../src/download/ui/FigureDownloadPanel.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { ReactElement } from 'react';
|
|
2
|
+
import type { FigurePixels } from '../core/figureScale.ts';
|
|
3
|
+
/** What {@link FigureSizeField} needs. */
|
|
4
|
+
export interface FigureSizeFieldProps {
|
|
5
|
+
/** What the row is called. */
|
|
6
|
+
label: string;
|
|
7
|
+
/** What the first box is called, for a screen reader. */
|
|
8
|
+
widthLabel: string;
|
|
9
|
+
/** What the second box is called. */
|
|
10
|
+
heightLabel: string;
|
|
11
|
+
/** The size typed so far. */
|
|
12
|
+
value: FigurePixels;
|
|
13
|
+
/** Called with the size, each side already held to the range. */
|
|
14
|
+
onChange: (size: FigurePixels) => void;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* The two sides of a figure, typed in pixels.
|
|
18
|
+
*
|
|
19
|
+
* These are typed rather than stepped: a reader asking for 1920 × 1080 knows
|
|
20
|
+
* the numbers, and a stepper would take a hundred presses to reach them. A side
|
|
21
|
+
* is taken when the reader leaves its box or presses Enter, never on each key,
|
|
22
|
+
* since the `1` of a `1200` on its way in is not a width anybody asked for.
|
|
23
|
+
* @param props - See {@link FigureSizeFieldProps}.
|
|
24
|
+
* @returns The row.
|
|
25
|
+
*/
|
|
26
|
+
export declare function FigureSizeField(props: FigureSizeFieldProps): ReactElement;
|
|
27
|
+
//# sourceMappingURL=FigureSizeField.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FigureSizeField.d.ts","sourceRoot":"","sources":["../../../src/download/ui/FigureSizeField.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAgC,YAAY,EAAE,MAAM,OAAO,CAAC;AAQxE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAE3D,0CAA0C;AAC1C,MAAM,WAAW,oBAAoB;IACnC,8BAA8B;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,yDAAyD;IACzD,UAAU,EAAE,MAAM,CAAC;IACnB,qCAAqC;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,6BAA6B;IAC7B,KAAK,EAAE,YAAY,CAAC;IACpB,iEAAiE;IACjE,QAAQ,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,IAAI,CAAC;CACxC;AAED;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,oBAAoB,GAAG,YAAY,CAwBzE"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useState } from 'react';
|
|
3
|
+
import { OverlayRow } from "../../overlay/ui/OverlayRow.js";
|
|
4
|
+
import { useOverlaySurface } from "../../overlay/ui/overlaySurface.js";
|
|
5
|
+
import { overlayFocusRing } from "../../overlay/ui/overlayValueStyles.js";
|
|
6
|
+
import { figureLayoutSide } from "../core/figureLayout.js";
|
|
7
|
+
/**
|
|
8
|
+
* The two sides of a figure, typed in pixels.
|
|
9
|
+
*
|
|
10
|
+
* These are typed rather than stepped: a reader asking for 1920 × 1080 knows
|
|
11
|
+
* the numbers, and a stepper would take a hundred presses to reach them. A side
|
|
12
|
+
* is taken when the reader leaves its box or presses Enter, never on each key,
|
|
13
|
+
* since the `1` of a `1200` on its way in is not a width anybody asked for.
|
|
14
|
+
* @param props - See {@link FigureSizeFieldProps}.
|
|
15
|
+
* @returns The row.
|
|
16
|
+
*/
|
|
17
|
+
export function FigureSizeField(props) {
|
|
18
|
+
const { label, widthLabel, heightLabel, value, onChange } = props;
|
|
19
|
+
const { metrics } = useOverlaySurface();
|
|
20
|
+
return (_jsx(OverlayRow, { label: label, children: _jsxs("span", { style: { ...FIELD_STYLE, fontSize: metrics.fontSize }, children: [_jsx(SideInput, { label: widthLabel, value: value.width, metrics: metrics, onCommit: (width) => onChange({ ...value, width }) }), _jsx("span", { "aria-hidden": "true", children: "\u00D7" }), _jsx(SideInput, { label: heightLabel, value: value.height, metrics: metrics, onCommit: (height) => onChange({ ...value, height }) }), _jsx("span", { style: UNIT_STYLE, children: "px" })] }) }));
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* One side, typed.
|
|
24
|
+
* @param props - See {@link SideInputProps}.
|
|
25
|
+
* @returns The box.
|
|
26
|
+
*/
|
|
27
|
+
function SideInput(props) {
|
|
28
|
+
const { label, value, metrics, onCommit } = props;
|
|
29
|
+
const [draft, setDraft] = useState(String(value));
|
|
30
|
+
const [taken, setTaken] = useState(value);
|
|
31
|
+
const [focused, setFocused] = useState(false);
|
|
32
|
+
// A side changed from outside — another shape picked, a clamp — replaces
|
|
33
|
+
// whatever was being typed.
|
|
34
|
+
if (taken !== value) {
|
|
35
|
+
setTaken(value);
|
|
36
|
+
setDraft(String(value));
|
|
37
|
+
}
|
|
38
|
+
function commit() {
|
|
39
|
+
const typed = Number.parseFloat(draft);
|
|
40
|
+
const side = Number.isFinite(typed) ? figureLayoutSide(typed) : value;
|
|
41
|
+
setDraft(String(side));
|
|
42
|
+
if (side !== value)
|
|
43
|
+
onCommit(side);
|
|
44
|
+
}
|
|
45
|
+
function onKeyDown(event) {
|
|
46
|
+
if (event.key !== 'Enter')
|
|
47
|
+
return;
|
|
48
|
+
event.preventDefault();
|
|
49
|
+
commit();
|
|
50
|
+
}
|
|
51
|
+
return (_jsx("input", { type: "text", inputMode: "numeric", "aria-label": label, value: draft, style: { ...sideStyle(metrics), ...overlayFocusRing(focused) }, onChange: (event) => setDraft(event.currentTarget.value), onFocus: () => setFocused(true), onBlur: () => {
|
|
52
|
+
setFocused(false);
|
|
53
|
+
commit();
|
|
54
|
+
}, onKeyDown: onKeyDown }));
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* A box as tall as every other control of the panel, and wide enough for four
|
|
58
|
+
* digits.
|
|
59
|
+
* @param metrics - The measurements the panel is drawn from.
|
|
60
|
+
* @returns The box's rules.
|
|
61
|
+
*/
|
|
62
|
+
function sideStyle(metrics) {
|
|
63
|
+
return {
|
|
64
|
+
boxSizing: 'border-box',
|
|
65
|
+
width: '5em',
|
|
66
|
+
height: metrics.controlHeight,
|
|
67
|
+
padding: '0 6px',
|
|
68
|
+
border: '1px solid var(--border)',
|
|
69
|
+
borderRadius: metrics.controlRadius,
|
|
70
|
+
background: 'var(--surface)',
|
|
71
|
+
color: 'var(--text)',
|
|
72
|
+
font: 'inherit',
|
|
73
|
+
fontSize: metrics.fontSize,
|
|
74
|
+
fontVariantNumeric: 'tabular-nums',
|
|
75
|
+
textAlign: 'right',
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
const FIELD_STYLE = {
|
|
79
|
+
display: 'inline-flex',
|
|
80
|
+
alignItems: 'center',
|
|
81
|
+
gap: 6,
|
|
82
|
+
color: 'var(--text-muted)',
|
|
83
|
+
};
|
|
84
|
+
const UNIT_STYLE = {
|
|
85
|
+
color: 'var(--text-faint)',
|
|
86
|
+
};
|
|
87
|
+
//# sourceMappingURL=FigureSizeField.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FigureSizeField.js","sourceRoot":"","sources":["../../../src/download/ui/FigureSizeField.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { ReactElement } from 'react';
|
|
2
|
+
import type { FigureLayout } from '../core/figureLayout.ts';
|
|
3
|
+
import type { FigurePixels } from '../core/figureScale.ts';
|
|
4
|
+
/** The shape a figure is saved at, and what changes it. */
|
|
5
|
+
export interface FigureSizing {
|
|
6
|
+
/** The shape picked. */
|
|
7
|
+
layout: FigureLayout;
|
|
8
|
+
/**
|
|
9
|
+
* The size typed for `custom`, or `null` before anything was typed, when it
|
|
10
|
+
* starts from the figure on screen.
|
|
11
|
+
*/
|
|
12
|
+
custom: FigurePixels | null;
|
|
13
|
+
/** Called with the shape picked. */
|
|
14
|
+
onLayoutChange: (layout: FigureLayout) => void;
|
|
15
|
+
/** Called with the size typed. */
|
|
16
|
+
onCustomChange: (size: FigurePixels) => void;
|
|
17
|
+
}
|
|
18
|
+
/** What {@link FigureSizeRows} needs. */
|
|
19
|
+
export interface FigureSizeRowsProps {
|
|
20
|
+
/** The shape and what changes it. */
|
|
21
|
+
sizing: FigureSizing;
|
|
22
|
+
/** How big the figure is on the page, or `null` where there is none. */
|
|
23
|
+
size: FigurePixels | null;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* The shape the figure is drawn at, and the two sides of a custom one.
|
|
27
|
+
*
|
|
28
|
+
* Each shape says the pixels it would produce, so choosing `16:9` for a figure
|
|
29
|
+
* already close to it is visibly a choice that changes little.
|
|
30
|
+
* @param props - See {@link FigureSizeRowsProps}.
|
|
31
|
+
* @returns The rows.
|
|
32
|
+
*/
|
|
33
|
+
export declare function FigureSizeRows(props: FigureSizeRowsProps): ReactElement;
|
|
34
|
+
//# sourceMappingURL=FigureSizeRows.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FigureSizeRows.d.ts","sourceRoot":"","sources":["../../../src/download/ui/FigureSizeRows.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAO1C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAE5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAK3D,2DAA2D;AAC3D,MAAM,WAAW,YAAY;IAC3B,wBAAwB;IACxB,MAAM,EAAE,YAAY,CAAC;IACrB;;;OAGG;IACH,MAAM,EAAE,YAAY,GAAG,IAAI,CAAC;IAC5B,oCAAoC;IACpC,cAAc,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,CAAC;IAC/C,kCAAkC;IAClC,cAAc,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,IAAI,CAAC;CAC9C;AAED,yCAAyC;AACzC,MAAM,WAAW,mBAAmB;IAClC,qCAAqC;IACrC,MAAM,EAAE,YAAY,CAAC;IACrB,wEAAwE;IACxE,IAAI,EAAE,YAAY,GAAG,IAAI,CAAC;CAC3B;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG,YAAY,CAsCvE"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useChromeT } from "../../i18n/ui/useT.js";
|
|
3
|
+
import { OverlaySelect } from "../../overlay/ui/OverlaySelect.js";
|
|
4
|
+
import { FIGURE_LAYOUTS, figureLayoutSize } from "../core/figureLayout.js";
|
|
5
|
+
import { formatFigurePixels } from "../core/figureScale.js";
|
|
6
|
+
import { FigureSizeField } from "./FigureSizeField.js";
|
|
7
|
+
/**
|
|
8
|
+
* The shape the figure is drawn at, and the two sides of a custom one.
|
|
9
|
+
*
|
|
10
|
+
* Each shape says the pixels it would produce, so choosing `16:9` for a figure
|
|
11
|
+
* already close to it is visibly a choice that changes little.
|
|
12
|
+
* @param props - See {@link FigureSizeRowsProps}.
|
|
13
|
+
* @returns The rows.
|
|
14
|
+
*/
|
|
15
|
+
export function FigureSizeRows(props) {
|
|
16
|
+
const { sizing, size } = props;
|
|
17
|
+
const { layout, custom, onLayoutChange, onCustomChange } = sizing;
|
|
18
|
+
const t = useChromeT();
|
|
19
|
+
const options = [];
|
|
20
|
+
for (const shape of FIGURE_LAYOUTS) {
|
|
21
|
+
options.push({
|
|
22
|
+
value: shape,
|
|
23
|
+
label: layoutLabel(shape, t),
|
|
24
|
+
title: size === null
|
|
25
|
+
? undefined
|
|
26
|
+
: formatFigurePixels(figureLayoutSize(shape, size, custom ?? size)),
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
return (_jsxs(_Fragment, { children: [_jsx(OverlaySelect, { label: t('download.size'), help: { title: t('download.size'), body: t('download.sizeHelp') }, value: layout, options: options, disabled: size === null, onChange: onLayoutChange }), layout === 'custom' && size !== null ? (_jsx(FigureSizeField, { label: t('download.customSize'), widthLabel: t('download.width'), heightLabel: t('download.height'), value: figureLayoutSize('custom', size, custom ?? size), onChange: onCustomChange })) : null] }));
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* What a shape reads in the picker. A ratio is written as a ratio in every
|
|
33
|
+
* language.
|
|
34
|
+
* @param layout - The shape.
|
|
35
|
+
* @param t - The chrome's formatter.
|
|
36
|
+
* @returns Its label.
|
|
37
|
+
*/
|
|
38
|
+
function layoutLabel(layout, t) {
|
|
39
|
+
switch (layout) {
|
|
40
|
+
case 'standard':
|
|
41
|
+
return '4:3';
|
|
42
|
+
case 'wide':
|
|
43
|
+
return '16:9';
|
|
44
|
+
case 'column':
|
|
45
|
+
return t('download.sizeColumn');
|
|
46
|
+
case 'custom':
|
|
47
|
+
return t('download.sizeCustom');
|
|
48
|
+
case 'screen':
|
|
49
|
+
return t('download.sizeScreen');
|
|
50
|
+
default:
|
|
51
|
+
throw new Error(`unknown figure layout: ${String(layout)}`);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=FigureSizeRows.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FigureSizeRows.js","sourceRoot":"","sources":["../../../src/download/ui/FigureSizeRows.tsx"],"names":[],"mappings":";AAIA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEnD,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAoC,CAAC;AAEnE,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAE5D,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAuB,CAAC;AAyBxD;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc,CAAC,KAA0B;IACvD,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC;IAC/B,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,cAAc,EAAE,GAAG,MAAM,CAAC;IAClE,MAAM,CAAC,GAAG,UAAU,EAAE,CAAC;IAEvB,MAAM,OAAO,GAAuC,EAAE,CAAC;IACvD,KAAK,MAAM,KAAK,IAAI,cAAc,EAAE,CAAC;QACnC,OAAO,CAAC,IAAI,CAAC;YACX,KAAK,EAAE,KAAK;YACZ,KAAK,EAAE,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC;YAC5B,KAAK,EACH,IAAI,KAAK,IAAI;gBACX,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,IAAI,IAAI,CAAC,CAAC;SACxE,CAAC,CAAC;IACL,CAAC;IAED,OAAO,CACL,8BACE,KAAC,aAAa,IACZ,KAAK,EAAE,CAAC,CAAC,eAAe,CAAC,EACzB,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,eAAe,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,mBAAmB,CAAC,EAAE,EACjE,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,IAAI,KAAK,IAAI,EACvB,QAAQ,EAAE,cAAc,GACxB,EACD,MAAM,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,CACtC,KAAC,eAAe,IACd,KAAK,EAAE,CAAC,CAAC,qBAAqB,CAAC,EAC/B,UAAU,EAAE,CAAC,CAAC,gBAAgB,CAAC,EAC/B,WAAW,EAAE,CAAC,CAAC,iBAAiB,CAAC,EACjC,KAAK,EAAE,gBAAgB,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,IAAI,IAAI,CAAC,EACvD,QAAQ,EAAE,cAAc,GACxB,CACH,CAAC,CAAC,CAAC,IAAI,IACP,CACJ,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,SAAS,WAAW,CAAC,MAAoB,EAAE,CAAuB;IAChE,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,UAAU;YACb,OAAO,KAAK,CAAC;QACf,KAAK,MAAM;YACT,OAAO,MAAM,CAAC;QAChB,KAAK,QAAQ;YACX,OAAO,CAAC,CAAC,qBAAqB,CAAC,CAAC;QAClC,KAAK,QAAQ;YACX,OAAO,CAAC,CAAC,qBAAqB,CAAC,CAAC;QAClC,KAAK,QAAQ;YACX,OAAO,CAAC,CAAC,qBAAqB,CAAC,CAAC;QAClC;YACE,MAAM,IAAI,KAAK,CAAC,0BAA0B,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAChE,CAAC;AACH,CAAC"}
|
|
@@ -10,6 +10,8 @@ export type { FigureDownloadProps } from './FigureDownload.tsx';
|
|
|
10
10
|
export { FigureDownload } from './FigureDownload.tsx';
|
|
11
11
|
export type { FigureDownloadPanelProps } from './FigureDownloadPanel.tsx';
|
|
12
12
|
export { FigureDownloadPanel } from './FigureDownloadPanel.tsx';
|
|
13
|
+
export type { FigureSizing } from './FigureSizeRows.tsx';
|
|
14
|
+
export type { FigureRenderer } from './useFigureRedraw.tsx';
|
|
13
15
|
export type { ExportDialogFrameProps } from './ExportDialogFrame.tsx';
|
|
14
16
|
export { ExportDialogFrame } from './ExportDialogFrame.tsx';
|
|
15
17
|
export type { ExportImageDialogProps } from './ExportImageDialog.tsx';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/download/ui/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,YAAY,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,YAAY,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAC1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/download/ui/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,YAAY,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,YAAY,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAC1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,YAAY,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,YAAY,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5D,YAAY,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,YAAY,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,YAAY,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,YAAY,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AAC5E,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,YAAY,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/download/ui/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAsB,CAAC;AAEtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/download/ui/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAsB,CAAC;AAEtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA2B,CAAC;AAKhE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAyB,CAAC;AAE5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAyB,CAAC;AAE5D,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAuB,CAAC;AAExD,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA4B,CAAC;AAElE,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
import type { FigurePixels } from '../core/figureScale.ts';
|
|
3
|
+
/** Draws a figure at the size asked for, for a file. */
|
|
4
|
+
export type FigureRenderer = (size: FigurePixels) => ReactNode;
|
|
5
|
+
/** What {@link useFigureRedraw} hands back. */
|
|
6
|
+
export interface FigureRedraw {
|
|
7
|
+
/**
|
|
8
|
+
* Draw the figure off the page at a size, wait for it to settle, and hand
|
|
9
|
+
* the box it was drawn in to `save`.
|
|
10
|
+
*/
|
|
11
|
+
redraw: (targetId: string, size: FigurePixels, save: (box: Element) => Promise<void>) => Promise<void>;
|
|
12
|
+
/** The copy being drawn, to be rendered anywhere in the caller's tree. */
|
|
13
|
+
portal: ReactNode;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* A second copy of a figure, drawn at another size for as long as it takes to
|
|
17
|
+
* save it.
|
|
18
|
+
*
|
|
19
|
+
* The copy is rendered through a portal, so it sees every provider the figure
|
|
20
|
+
* on the page sees, and the portal's box is placed next to the figure's own,
|
|
21
|
+
* so it inherits the same tokens and the same type. It sits far to the left of
|
|
22
|
+
* the page, out of sight, and is taken away once the file is written.
|
|
23
|
+
* @param render - Draws the figure at a size.
|
|
24
|
+
* @returns See {@link FigureRedraw}.
|
|
25
|
+
*/
|
|
26
|
+
export declare function useFigureRedraw(render?: FigureRenderer): FigureRedraw;
|
|
27
|
+
//# sourceMappingURL=useFigureRedraw.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useFigureRedraw.d.ts","sourceRoot":"","sources":["../../../src/download/ui/useFigureRedraw.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIvC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAI3D,wDAAwD;AACxD,MAAM,MAAM,cAAc,GAAG,CAAC,IAAI,EAAE,YAAY,KAAK,SAAS,CAAC;AAE/D,+CAA+C;AAC/C,MAAM,WAAW,YAAY;IAC3B;;;OAGG;IACH,MAAM,EAAE,CACN,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,YAAY,EAClB,IAAI,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,KAClC,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,0EAA0E;IAC1E,MAAM,EAAE,SAAS,CAAC;CACnB;AASD;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAAC,MAAM,CAAC,EAAE,cAAc,GAAG,YAAY,CA+BrE"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { useEffect, useRef, useState } from 'react';
|
|
2
|
+
import { createPortal } from 'react-dom';
|
|
3
|
+
import { whenFigureSettles } from "../core/figureSettle.js";
|
|
4
|
+
import { figureElement } from "../core/figureTarget.js";
|
|
5
|
+
/**
|
|
6
|
+
* A second copy of a figure, drawn at another size for as long as it takes to
|
|
7
|
+
* save it.
|
|
8
|
+
*
|
|
9
|
+
* The copy is rendered through a portal, so it sees every provider the figure
|
|
10
|
+
* on the page sees, and the portal's box is placed next to the figure's own,
|
|
11
|
+
* so it inherits the same tokens and the same type. It sits far to the left of
|
|
12
|
+
* the page, out of sight, and is taken away once the file is written.
|
|
13
|
+
* @param render - Draws the figure at a size.
|
|
14
|
+
* @returns See {@link FigureRedraw}.
|
|
15
|
+
*/
|
|
16
|
+
export function useFigureRedraw(render) {
|
|
17
|
+
const [job, setJob] = useState(null);
|
|
18
|
+
const controllerRef = useRef(null);
|
|
19
|
+
useEffect(() => () => controllerRef.current?.abort(), []);
|
|
20
|
+
async function redraw(targetId, size, save) {
|
|
21
|
+
const box = mountRedrawBox(figureElement(targetId), size);
|
|
22
|
+
const controller = new AbortController();
|
|
23
|
+
controllerRef.current = controller;
|
|
24
|
+
setJob({ box, size });
|
|
25
|
+
try {
|
|
26
|
+
await whenFigureSettles(box, { signal: controller.signal });
|
|
27
|
+
await save(box);
|
|
28
|
+
}
|
|
29
|
+
finally {
|
|
30
|
+
controllerRef.current = null;
|
|
31
|
+
setJob(null);
|
|
32
|
+
box.remove();
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
const portal = job === null || render === undefined
|
|
36
|
+
? null
|
|
37
|
+
: createPortal(render(job.size), job.box);
|
|
38
|
+
return { redraw, portal };
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* The box the copy is drawn in, beside the figure it copies.
|
|
42
|
+
*
|
|
43
|
+
* Its type is copied from the figure's box, since a chart inherits its labels'
|
|
44
|
+
* size from wherever it is mounted and the copy is mounted one level up.
|
|
45
|
+
* @param target - The box the figure on the page is mounted in.
|
|
46
|
+
* @param size - The size the copy is drawn at.
|
|
47
|
+
* @returns The box, already in the document.
|
|
48
|
+
*/
|
|
49
|
+
function mountRedrawBox(target, size) {
|
|
50
|
+
const box = document.createElement('div');
|
|
51
|
+
box.setAttribute('aria-hidden', 'true');
|
|
52
|
+
box.inert = true;
|
|
53
|
+
const type = window.getComputedStyle(target);
|
|
54
|
+
Object.assign(box.style, {
|
|
55
|
+
position: 'absolute',
|
|
56
|
+
top: '0',
|
|
57
|
+
left: '-100000px',
|
|
58
|
+
width: `${size.width}px`,
|
|
59
|
+
height: `${size.height}px`,
|
|
60
|
+
pointerEvents: 'none',
|
|
61
|
+
fontFamily: type.fontFamily,
|
|
62
|
+
fontSize: type.fontSize,
|
|
63
|
+
lineHeight: type.lineHeight,
|
|
64
|
+
color: type.color,
|
|
65
|
+
});
|
|
66
|
+
if (target instanceof HTMLElement) {
|
|
67
|
+
target.after(box);
|
|
68
|
+
return box;
|
|
69
|
+
}
|
|
70
|
+
// A figure named by its `<svg>` gets the box beside the nearest element
|
|
71
|
+
// that may hold a `<div>`.
|
|
72
|
+
let host = target;
|
|
73
|
+
while (host instanceof SVGElement)
|
|
74
|
+
host = host.parentElement;
|
|
75
|
+
(host ?? document.body).append(box);
|
|
76
|
+
return box;
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=useFigureRedraw.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useFigureRedraw.js","sourceRoot":"","sources":["../../../src/download/ui/useFigureRedraw.tsx"],"names":[],"mappings":"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"}
|
|
@@ -17,5 +17,5 @@ export type ChromeKey = keyof typeof en;
|
|
|
17
17
|
* missing message falls back to; the other three arrive as a chunk of their
|
|
18
18
|
* own, so a site read only in English downloads none of them.
|
|
19
19
|
*/
|
|
20
|
-
export declare const CHROME_CATALOG: MessageCatalog<"language.label" | "chrome.pages" | "ecosystem.tools" | "ecosystem.menuHeading" | "ecosystem.otherTools" | "ecosystem.youAreHere" | "ecosystem.group.basics.label" | "ecosystem.group.basics.blurb" | "ecosystem.group.practice.label" | "ecosystem.group.practice.blurb" | "ecosystem.group.structures.label" | "ecosystem.group.structures.blurb" | "ecosystem.group.spectra.label" | "ecosystem.group.spectra.blurb" | "ecosystem.group.research.label" | "ecosystem.group.research.blurb" | "ecosystem.group.computing.label" | "ecosystem.group.computing.blurb" | "site.learn.tagline" | "site.inchi.tagline" | "site.vcl.tagline" | "site.smiles.tagline" | "site.openbabel.tagline" | "site.chemcalc.tagline" | "site.dbe.tagline" | "site.nmrium.tagline" | "site.metabo.tagline" | "site.derepflow.tagline" | "site.surge.tagline" | "site.tex.tagline" | "site.lcao.tagline" | "site.regexp.tagline" | "site.pdb.tagline" | "site.elucidation.tagline" | "site.equilibrium.tagline" | "site.polycarp.tagline" | "site.3d.tagline" | "site.periodic-table.tagline" | "site.database.tagline" | "site.symmetry.tagline" | "site.osiris.tagline" | "site.atoms.tagline" | "site.moles.tagline" | "site.inorganic.tagline" | "share.button" | "share.buttonTitle" | "share.dialogTitle" | "share.lead" | "share.layout" | "share.embed" | "share.embedHint" | "share.showOnPage" | "share.custom" | "share.link" | "share.copyLink" | "share.openInNewTab" | "share.iframe" | "share.copyIframe" | "share.done" | "cite.button" | "cite.copyReferenceAs" | "cite.pleaseCiteBoth" | "cite.pleaseCiteEvery" | "cite.copyBothAs" | "cite.copyEveryAs" | "cite.importIntoManager" | "cite.openArticle" | "cite.copyThisAs" | "cite.importThis" | "cite.copied" | "cite.copyFailed" | "cite.format.doi" | "cite.download.ris" | "cite.download.bibtex" | "clipboard.copied" | "clipboard.failed" | "clipboard.copy" | "clipboard.copyThe" | "clipboard.copyValue" | "clipboard.copyToClipboard" | "about.providedBy" | "about.whatYouCanDo" | "about.builtOn" | "about.howToCite" | "about.licenceAndSource" | "about.licence" | "about.foundAProblem" | "about.reportIt" | "about.citeWork" | "about.built" | "about.builtFromCommit" | "about.nameList" | "credits.openbabel.description" | "credits.openchemlib.description" | "credits.openchemlib-utils.description" | "credits.osiris-property-explorer.description" | "credits.react-ocl.description" | "credits.react-mf.description" | "credits.mass-tools.description" | "credits.chem-equilibrium.description" | "credits.ml-matrix.description" | "credits.ml-xsadd.description" | "credits.cif-to-json.description" | "credits.ml-spectra-processing.description" | "credits.occ.description" | "credits.xtb-wasm.description" | "credits.molstar.description" | "credits.blueprint.description" | "credits.react-science.description" | "credits.react-cheminfo.description" | "credits.cheminfo-font.description" | "credits.nivo.description" | "credits.mathjax.description" | "credits.lexical.description" | "credits.katex.description" | "credits.dnd-kit.description" | "credits.react-roi.description" | "credits.file-collection.description" | "credits.zip-js.description" | "credits.preact-signals.description" | "credits.fastify.description" | "credits.sqlite.description" | "credits.sqlite-wasm.description" | "credits.pouchdb.description" | "credits.chemexper.description" | "credits.react.description" | "credits.vite.description" | "help.label" | "help.learnMore" | "help.on" | "confirm.delete" | "confirm.cancel" | "error.title" | "error.tryAgain" | "error.noMessage" | "capsule.filter" | "color.scales" | "color.done" | "color.custom" | "color.customEllipsis" | "color.inUse" | "color.colourScale" | "color.legendLabel" | "color.scaleBeingEdited" | "color.anchorColour" | "color.anchorPosition" | "color.removeAnchor" | "color.addColour" | "color.path" | "color.interpolation.rgb" | "color.interpolation.hsv" | "color.interpolation.hsv-long" | "color.kind.sequential" | "color.kind.diverging" | "color.kind.cyclic" | "color.scale.viridis.label" | "color.scale.viridis.description" | "color.scale.plasma.label" | "color.scale.plasma.description" | "color.scale.magma.label" | "color.scale.magma.description" | "color.scale.inferno.label" | "color.scale.inferno.description" | "color.scale.cividis.label" | "color.scale.cividis.description" | "color.scale.turbo.label" | "color.scale.turbo.description" | "color.scale.greys.label" | "color.scale.greys.description" | "color.scale.cool-warm.label" | "color.scale.cool-warm.description" | "color.scale.blue-red.label" | "color.scale.blue-red.description" | "color.scale.rainbow.label" | "color.scale.rainbow.description" | "download.save" | "download.saveFigure" | "download.saveThisFigure" | "download.format" | "download.formatHelp" | "download.resolution" | "download.resolutionHelp" | "download.resolutionExample" | "download.noFigure" | "download.hintRasterSvg" | "download.hintSvg" | "download.hintPng" | "pedagogy.check" | "pedagogy.revealHint" | "pedagogy.revealHintCount" | "pedagogy.revealHintLadder" | "pedagogy.hideSolution" | "pedagogy.revealSolution" | "pedagogy.reset" | "pedagogy.hints" | "pedagogy.solvedCount" | "pedagogy.clearAll" | "pedagogy.keepAnswers" | "pedagogy.clearEverything" | "pedagogy.clearWarning" | "pedagogy.filterTerms" | "pedagogy.noTermDefined" | "pedagogy.noTermMatches" | "pedagogy.example" | "pedagogy.input" | "pedagogy.previous" | "pedagogy.next" | "pedagogy.stepOf" | "slides.exit" | "slides.previousSlide" | "slides.nextSlide" | "slides.toggleFullscreen" | "slides.backToSlides" | "slides.backToSlide" | "slides.noAddress" | "slides.liveDemos" | "slides.noTalkYet" | "overlay.options" | "overlay.whatAmILookingAt" | "overlay.reset" | "overlay.hoverAName" | "overlay.dismiss" | "delimited.copyTable" | "delimited.close" | "delimited.separator" | "delimited.save" | "delimited.copy" | "delimited.tableAsText" | "chart.measurement" | "chart.measurements" | "delimited.descriptionOne" | "delimited.descriptionMany" | "structure.guide.atom.title" | "structure.guide.atom.element" | "structure.guide.atom.group" | "structure.guide.atom.applyOrForget" | "structure.guide.atom.chain" | "structure.guide.atom.charge" | "structure.guide.atom.radical" | "structure.guide.atom.spin" | "structure.guide.atom.attachment" | "structure.guide.atom.query" | "structure.guide.atom.halogen" | "structure.guide.atom.delete" | "structure.guide.atom.note" | "structure.guide.bond.title" | "structure.guide.bond.order" | "structure.guide.bond.zeroOrder" | "structure.guide.bond.stereo" | "structure.guide.bond.unknownGeometry" | "structure.guide.bond.threeRing" | "structure.guide.bond.ring" | "structure.guide.bond.benzene" | "structure.guide.bond.query" | "structure.guide.bond.delete" | "structure.guide.anywhere.title" | "structure.guide.anywhere.undo" | "structure.guide.anywhere.copy" | "structure.guide.anywhere.paste" | "structure.guide.anywhere.deleteSelection" | "structure.guide.anywhere.flip" | "structure.guide.anywhere.help" | "structure.guide.anywhere.note" | "structure.guide.selecting.title" | "structure.guide.selecting.lasso" | "structure.guide.selecting.rectangle" | "structure.guide.selecting.add" | "structure.guide.selecting.move" | "structure.guide.selecting.duplicate" | "structure.guide.selecting.queryFeatures" | "structure.guide.selecting.note" | "structure.guide.stereochemistry.title" | "structure.guide.stereochemistry.note" | "structure.input.type" | "structure.input.or" | "structure.input.drag" | "structure.input.plusDrag" | "structure.input.dragSelection" | "structure.input.plusDragSelection" | "structure.input.doubleClick" | "structure.docs.toolsAndKeys" | "structure.docs.atomProperties" | "structure.docs.stereochemistry" | "structure.help.hoverToolbar" | "structure.help.learnMore" | "structure.mouseAndKeyboard" | "structure.tool.clear.name" | "structure.tool.clear.description" | "structure.tool.cleanUp.name" | "structure.tool.cleanUp.description" | "structure.tool.select.name" | "structure.tool.select.description" | "structure.tool.unknownConfiguration.name" | "structure.tool.unknownConfiguration.description" | "structure.tool.delete.name" | "structure.tool.delete.description" | "structure.tool.singleBond.name" | "structure.tool.singleBond.description" | "structure.tool.upBond.name" | "structure.tool.upBond.description" | "structure.tool.positiveCharge.name" | "structure.tool.positiveCharge.description" | "structure.tool.undo.name" | "structure.tool.undo.description" | "structure.tool.zoomAndRotate.name" | "structure.tool.zoomAndRotate.description" | "structure.tool.atomMapping.name" | "structure.tool.atomMapping.description" | "structure.tool.enhancedStereo.name" | "structure.tool.enhancedStereo.description" | "structure.tool.text.name" | "structure.tool.text.description" | "structure.tool.chain.name" | "structure.tool.chain.description" | "structure.tool.downBond.name" | "structure.tool.downBond.description" | "structure.tool.negativeCharge.name" | "structure.tool.negativeCharge.description" | "structure.tool.anyAtom.name" | "structure.tool.anyAtom.description" | "structure.tool.ring3.name" | "structure.tool.ring3.description" | "structure.tool.ring5.name" | "structure.tool.ring5.description" | "structure.tool.ring7.name" | "structure.tool.ring7.description" | "structure.tool.ring4.name" | "structure.tool.ring4.description" | "structure.tool.ring6.name" | "structure.tool.ring6.description" | "structure.tool.benzene.name" | "structure.tool.benzene.description" | "structure.tool.carbon.name" | "structure.tool.carbon.description" | "structure.tool.nitrogen.name" | "structure.tool.nitrogen.description" | "structure.tool.oxygen.name" | "structure.tool.oxygen.description" | "structure.tool.fluorine.name" | "structure.tool.fluorine.description" | "structure.tool.bromine.name" | "structure.tool.bromine.description" | "structure.tool.hydrogen.name" | "structure.tool.hydrogen.description" | "structure.tool.silicon.name" | "structure.tool.silicon.description" | "structure.tool.phosphorus.name" | "structure.tool.phosphorus.description" | "structure.tool.sulfur.name" | "structure.tool.sulfur.description" | "structure.tool.chlorine.name" | "structure.tool.chlorine.description" | "structure.tool.iodine.name" | "structure.tool.iodine.description" | "structure.tool.reactionOnly" | "structure.tool.unavailable" | "structure.loadingEditor" | "periodic.table" | "periodic.group" | "periodic.period" | "periodic.cellLabel" | "periodic.category.alkali-metal" | "periodic.category.alkaline-earth-metal" | "periodic.category.transition-metal" | "periodic.category.post-transition-metal" | "periodic.category.metalloid" | "periodic.category.nonmetal" | "periodic.category.halogen" | "periodic.category.noble-gas" | "periodic.category.lanthanoid" | "periodic.category.actinoid" | "molecule3d.view" | "molecule3d.resetView" | "molecule3d.spin" | "molecule3d.surface" | "molecule3d.molecularSurface" | "molecule3d.displayOptions" | "molecule3d.exportImage" | "molecule3d.measure" | "molecule3d.clearMeasurements" | "molecule3d.measurement.distance" | "molecule3d.measurement.angle" | "molecule3d.measurement.dihedral" | "molecule3d.measurementTooltip" | "molecule3d.representation.ball-and-stick" | "molecule3d.representation.spacefill" | "molecule3d.representation.stick" | "molecule3d.size" | "molecule3d.surfaceOpacity" | "molecule3d.solventProbe" | "molecule3d.solventProbeHelp" | "molecule3d.surfaceColour" | "molecule3d.colour" | "molecule3d.coloring.uniform" | "molecule3d.coloring.element" | "molecule3d.coloring.polarity" | "molecule3d.neutral" | "molecule3d.tpsaHelp" | "molecule3d.loadingViewer" | "molecule3d.couldNotDraw" | "molecule3d.gesture.rotate" | "molecule3d.gesture.rollDrag" | "molecule3d.gesture.rollKeys" | "molecule3d.gesture.moveDrag" | "molecule3d.gesture.moveCtrl" | "molecule3d.gesture.zoom" | "molecule3d.gesture.clip" | "molecule3d.gesture.centreAtom" | "molecule3d.gesture.centreMolecule" | "molecule3d.input.drag" | "molecule3d.input.plus" | "molecule3d.input.plusDrag" | "molecule3d.input.plusScroll" | "molecule3d.input.or" | "molecule3d.input.rightDrag" | "molecule3d.input.scroll" | "molecule3d.input.clickAtom" | "molecule3d.input.clickBackground" | "molecule3d.helpNote" | "orbital.couldNotDraw" | "orbital.sampling" | "orbital.showAxes" | "orbital.axesTitle" | "orbital.axesBody" | "orbital.axesExample" | "orbital.resetTitle" | "orbital.resetBody" | "viewer.capability.noWindow" | "viewer.capability.noContext" | "viewer.capability.noFloatTextures" | "viewer.capability.ready" | "conformers.strategy.adaptive-random" | "conformers.strategy.likely-random" | "conformers.strategy.pure-random" | "conformers.strategy.likely-systematic" | "conformers.strategyDetail.adaptive-random" | "conformers.strategyDetail.likely-random" | "conformers.strategyDetail.pure-random" | "conformers.strategyDetail.likely-systematic" | "conformers.minimisation.none">;
|
|
20
|
+
export declare const CHROME_CATALOG: MessageCatalog<"language.label" | "chrome.pages" | "account.signIn" | "account.signOut" | "account.signedInAs" | "ecosystem.tools" | "ecosystem.menuHeading" | "ecosystem.otherTools" | "ecosystem.youAreHere" | "ecosystem.group.basics.label" | "ecosystem.group.basics.blurb" | "ecosystem.group.practice.label" | "ecosystem.group.practice.blurb" | "ecosystem.group.structures.label" | "ecosystem.group.structures.blurb" | "ecosystem.group.spectra.label" | "ecosystem.group.spectra.blurb" | "ecosystem.group.research.label" | "ecosystem.group.research.blurb" | "ecosystem.group.computing.label" | "ecosystem.group.computing.blurb" | "site.learn.tagline" | "site.inchi.tagline" | "site.vcl.tagline" | "site.smiles.tagline" | "site.openbabel.tagline" | "site.chemcalc.tagline" | "site.dbe.tagline" | "site.nmrium.tagline" | "site.metabo.tagline" | "site.derepflow.tagline" | "site.surge.tagline" | "site.tex.tagline" | "site.lcao.tagline" | "site.regexp.tagline" | "site.pdb.tagline" | "site.elucidation.tagline" | "site.equilibrium.tagline" | "site.polycarp.tagline" | "site.3d.tagline" | "site.periodic-table.tagline" | "site.database.tagline" | "site.symmetry.tagline" | "site.osiris.tagline" | "site.atoms.tagline" | "site.moles.tagline" | "site.inorganic.tagline" | "share.button" | "share.buttonTitle" | "share.dialogTitle" | "share.lead" | "share.layout" | "share.embed" | "share.embedHint" | "share.showOnPage" | "share.custom" | "share.link" | "share.copyLink" | "share.openInNewTab" | "share.iframe" | "share.copyIframe" | "share.done" | "cite.button" | "cite.copyReferenceAs" | "cite.pleaseCiteBoth" | "cite.pleaseCiteEvery" | "cite.copyBothAs" | "cite.copyEveryAs" | "cite.importIntoManager" | "cite.openArticle" | "cite.copyThisAs" | "cite.importThis" | "cite.copied" | "cite.copyFailed" | "cite.format.doi" | "cite.download.ris" | "cite.download.bibtex" | "clipboard.copied" | "clipboard.failed" | "clipboard.copy" | "clipboard.copyThe" | "clipboard.copyValue" | "clipboard.copyToClipboard" | "about.providedBy" | "about.whatYouCanDo" | "about.builtOn" | "about.howToCite" | "about.licenceAndSource" | "about.licence" | "about.foundAProblem" | "about.reportIt" | "about.citeWork" | "about.built" | "about.builtFromCommit" | "about.nameList" | "credits.openbabel.description" | "credits.openchemlib.description" | "credits.openchemlib-utils.description" | "credits.osiris-property-explorer.description" | "credits.react-ocl.description" | "credits.react-mf.description" | "credits.mass-tools.description" | "credits.chem-equilibrium.description" | "credits.ml-matrix.description" | "credits.ml-xsadd.description" | "credits.cif-to-json.description" | "credits.ml-spectra-processing.description" | "credits.occ.description" | "credits.xtb-wasm.description" | "credits.molstar.description" | "credits.blueprint.description" | "credits.react-science.description" | "credits.react-cheminfo.description" | "credits.cheminfo-font.description" | "credits.nivo.description" | "credits.mathjax.description" | "credits.lexical.description" | "credits.katex.description" | "credits.dnd-kit.description" | "credits.react-roi.description" | "credits.file-collection.description" | "credits.zip-js.description" | "credits.preact-signals.description" | "credits.fastify.description" | "credits.sqlite.description" | "credits.sqlite-wasm.description" | "credits.pouchdb.description" | "credits.chemexper.description" | "credits.react.description" | "credits.vite.description" | "help.label" | "help.learnMore" | "help.on" | "confirm.delete" | "confirm.cancel" | "error.title" | "error.tryAgain" | "error.noMessage" | "capsule.filter" | "color.scales" | "color.done" | "color.custom" | "color.customEllipsis" | "color.inUse" | "color.colourScale" | "color.legendLabel" | "color.scaleBeingEdited" | "color.anchorColour" | "color.anchorPosition" | "color.removeAnchor" | "color.addColour" | "color.path" | "color.interpolation.rgb" | "color.interpolation.hsv" | "color.interpolation.hsv-long" | "color.kind.sequential" | "color.kind.diverging" | "color.kind.cyclic" | "color.scale.viridis.label" | "color.scale.viridis.description" | "color.scale.plasma.label" | "color.scale.plasma.description" | "color.scale.magma.label" | "color.scale.magma.description" | "color.scale.inferno.label" | "color.scale.inferno.description" | "color.scale.cividis.label" | "color.scale.cividis.description" | "color.scale.turbo.label" | "color.scale.turbo.description" | "color.scale.greys.label" | "color.scale.greys.description" | "color.scale.cool-warm.label" | "color.scale.cool-warm.description" | "color.scale.blue-red.label" | "color.scale.blue-red.description" | "color.scale.rainbow.label" | "color.scale.rainbow.description" | "download.save" | "download.saveFigure" | "download.saveThisFigure" | "download.format" | "download.formatHelp" | "download.resolution" | "download.resolutionHelp" | "download.resolutionExample" | "download.noFigure" | "download.hintRasterSvg" | "download.hintSvg" | "download.hintPng" | "download.size" | "download.sizeHelp" | "download.sizeScreen" | "download.sizeColumn" | "download.sizeCustom" | "download.customSize" | "download.width" | "download.height" | "pedagogy.check" | "pedagogy.revealHint" | "pedagogy.revealHintCount" | "pedagogy.revealHintLadder" | "pedagogy.hideSolution" | "pedagogy.revealSolution" | "pedagogy.reset" | "pedagogy.hints" | "pedagogy.solvedCount" | "pedagogy.clearAll" | "pedagogy.keepAnswers" | "pedagogy.clearEverything" | "pedagogy.clearWarning" | "pedagogy.filterTerms" | "pedagogy.noTermDefined" | "pedagogy.noTermMatches" | "pedagogy.example" | "pedagogy.input" | "pedagogy.previous" | "pedagogy.next" | "pedagogy.stepOf" | "slides.exit" | "slides.previousSlide" | "slides.nextSlide" | "slides.toggleFullscreen" | "slides.backToSlides" | "slides.backToSlide" | "slides.noAddress" | "slides.liveDemos" | "slides.noTalkYet" | "overlay.options" | "overlay.whatAmILookingAt" | "overlay.reset" | "overlay.hoverAName" | "overlay.dismiss" | "delimited.copyTable" | "delimited.close" | "delimited.separator" | "delimited.save" | "delimited.copy" | "delimited.tableAsText" | "chart.measurement" | "chart.measurements" | "delimited.descriptionOne" | "delimited.descriptionMany" | "structure.guide.atom.title" | "structure.guide.atom.element" | "structure.guide.atom.group" | "structure.guide.atom.applyOrForget" | "structure.guide.atom.chain" | "structure.guide.atom.charge" | "structure.guide.atom.radical" | "structure.guide.atom.spin" | "structure.guide.atom.attachment" | "structure.guide.atom.query" | "structure.guide.atom.halogen" | "structure.guide.atom.delete" | "structure.guide.atom.note" | "structure.guide.bond.title" | "structure.guide.bond.order" | "structure.guide.bond.zeroOrder" | "structure.guide.bond.stereo" | "structure.guide.bond.unknownGeometry" | "structure.guide.bond.threeRing" | "structure.guide.bond.ring" | "structure.guide.bond.benzene" | "structure.guide.bond.query" | "structure.guide.bond.delete" | "structure.guide.anywhere.title" | "structure.guide.anywhere.undo" | "structure.guide.anywhere.copy" | "structure.guide.anywhere.paste" | "structure.guide.anywhere.deleteSelection" | "structure.guide.anywhere.flip" | "structure.guide.anywhere.help" | "structure.guide.anywhere.note" | "structure.guide.selecting.title" | "structure.guide.selecting.lasso" | "structure.guide.selecting.rectangle" | "structure.guide.selecting.add" | "structure.guide.selecting.move" | "structure.guide.selecting.duplicate" | "structure.guide.selecting.queryFeatures" | "structure.guide.selecting.note" | "structure.guide.stereochemistry.title" | "structure.guide.stereochemistry.note" | "structure.input.type" | "structure.input.or" | "structure.input.drag" | "structure.input.plusDrag" | "structure.input.dragSelection" | "structure.input.plusDragSelection" | "structure.input.doubleClick" | "structure.docs.toolsAndKeys" | "structure.docs.atomProperties" | "structure.docs.stereochemistry" | "structure.help.hoverToolbar" | "structure.help.learnMore" | "structure.mouseAndKeyboard" | "structure.tool.clear.name" | "structure.tool.clear.description" | "structure.tool.cleanUp.name" | "structure.tool.cleanUp.description" | "structure.tool.select.name" | "structure.tool.select.description" | "structure.tool.unknownConfiguration.name" | "structure.tool.unknownConfiguration.description" | "structure.tool.delete.name" | "structure.tool.delete.description" | "structure.tool.singleBond.name" | "structure.tool.singleBond.description" | "structure.tool.upBond.name" | "structure.tool.upBond.description" | "structure.tool.positiveCharge.name" | "structure.tool.positiveCharge.description" | "structure.tool.undo.name" | "structure.tool.undo.description" | "structure.tool.zoomAndRotate.name" | "structure.tool.zoomAndRotate.description" | "structure.tool.atomMapping.name" | "structure.tool.atomMapping.description" | "structure.tool.enhancedStereo.name" | "structure.tool.enhancedStereo.description" | "structure.tool.text.name" | "structure.tool.text.description" | "structure.tool.chain.name" | "structure.tool.chain.description" | "structure.tool.downBond.name" | "structure.tool.downBond.description" | "structure.tool.negativeCharge.name" | "structure.tool.negativeCharge.description" | "structure.tool.anyAtom.name" | "structure.tool.anyAtom.description" | "structure.tool.ring3.name" | "structure.tool.ring3.description" | "structure.tool.ring5.name" | "structure.tool.ring5.description" | "structure.tool.ring7.name" | "structure.tool.ring7.description" | "structure.tool.ring4.name" | "structure.tool.ring4.description" | "structure.tool.ring6.name" | "structure.tool.ring6.description" | "structure.tool.benzene.name" | "structure.tool.benzene.description" | "structure.tool.carbon.name" | "structure.tool.carbon.description" | "structure.tool.nitrogen.name" | "structure.tool.nitrogen.description" | "structure.tool.oxygen.name" | "structure.tool.oxygen.description" | "structure.tool.fluorine.name" | "structure.tool.fluorine.description" | "structure.tool.bromine.name" | "structure.tool.bromine.description" | "structure.tool.hydrogen.name" | "structure.tool.hydrogen.description" | "structure.tool.silicon.name" | "structure.tool.silicon.description" | "structure.tool.phosphorus.name" | "structure.tool.phosphorus.description" | "structure.tool.sulfur.name" | "structure.tool.sulfur.description" | "structure.tool.chlorine.name" | "structure.tool.chlorine.description" | "structure.tool.iodine.name" | "structure.tool.iodine.description" | "structure.tool.reactionOnly" | "structure.tool.unavailable" | "structure.loadingEditor" | "periodic.table" | "periodic.group" | "periodic.period" | "periodic.cellLabel" | "periodic.category.alkali-metal" | "periodic.category.alkaline-earth-metal" | "periodic.category.transition-metal" | "periodic.category.post-transition-metal" | "periodic.category.metalloid" | "periodic.category.nonmetal" | "periodic.category.halogen" | "periodic.category.noble-gas" | "periodic.category.lanthanoid" | "periodic.category.actinoid" | "molecule3d.view" | "molecule3d.resetView" | "molecule3d.spin" | "molecule3d.surface" | "molecule3d.molecularSurface" | "molecule3d.displayOptions" | "molecule3d.exportImage" | "molecule3d.measure" | "molecule3d.clearMeasurements" | "molecule3d.measurement.distance" | "molecule3d.measurement.angle" | "molecule3d.measurement.dihedral" | "molecule3d.measurementTooltip" | "molecule3d.representation.ball-and-stick" | "molecule3d.representation.spacefill" | "molecule3d.representation.stick" | "molecule3d.size" | "molecule3d.surfaceOpacity" | "molecule3d.solventProbe" | "molecule3d.solventProbeHelp" | "molecule3d.surfaceColour" | "molecule3d.colour" | "molecule3d.coloring.uniform" | "molecule3d.coloring.element" | "molecule3d.coloring.polarity" | "molecule3d.neutral" | "molecule3d.tpsaHelp" | "molecule3d.loadingViewer" | "molecule3d.couldNotDraw" | "molecule3d.gesture.rotate" | "molecule3d.gesture.rollDrag" | "molecule3d.gesture.rollKeys" | "molecule3d.gesture.moveDrag" | "molecule3d.gesture.moveCtrl" | "molecule3d.gesture.zoom" | "molecule3d.gesture.clip" | "molecule3d.gesture.centreAtom" | "molecule3d.gesture.centreMolecule" | "molecule3d.input.drag" | "molecule3d.input.plus" | "molecule3d.input.plusDrag" | "molecule3d.input.plusScroll" | "molecule3d.input.or" | "molecule3d.input.rightDrag" | "molecule3d.input.scroll" | "molecule3d.input.clickAtom" | "molecule3d.input.clickBackground" | "molecule3d.helpNote" | "orbital.couldNotDraw" | "orbital.sampling" | "orbital.showAxes" | "orbital.axesTitle" | "orbital.axesBody" | "orbital.axesExample" | "orbital.resetTitle" | "orbital.resetBody" | "viewer.capability.noWindow" | "viewer.capability.noContext" | "viewer.capability.noFloatTextures" | "viewer.capability.ready" | "conformers.strategy.adaptive-random" | "conformers.strategy.likely-random" | "conformers.strategy.pure-random" | "conformers.strategy.likely-systematic" | "conformers.strategyDetail.adaptive-random" | "conformers.strategyDetail.likely-random" | "conformers.strategyDetail.pure-random" | "conformers.strategyDetail.likely-systematic" | "conformers.minimisation.none">;
|
|
21
21
|
//# sourceMappingURL=chromeCatalog.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chromeCatalog.d.ts","sourceRoot":"","sources":["../../../src/i18n/core/chromeCatalog.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,MAAM,uBAAuB,CAAuB;AAE7D,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,2DAA2D;AAC3D,eAAO,MAAM,iBAAiB,mBAAmB,CAAC;AAElD,qCAAqC;AACrC,MAAM,MAAM,SAAS,GAAG,MAAM,OAAO,EAAE,CAAC;AAExC;;;;GAIG;AACH,eAAO,MAAM,cAAc,
|
|
1
|
+
{"version":3,"file":"chromeCatalog.d.ts","sourceRoot":"","sources":["../../../src/i18n/core/chromeCatalog.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,MAAM,uBAAuB,CAAuB;AAE7D,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,2DAA2D;AAC3D,eAAO,MAAM,iBAAiB,mBAAmB,CAAC;AAElD,qCAAqC;AACrC,MAAM,MAAM,SAAS,GAAG,MAAM,OAAO,EAAE,CAAC;AAExC;;;;GAIG;AACH,eAAO,MAAM,cAAc,g1ZAUzB,CAAC"}
|