react-cheminfo 0.58.0 → 0.60.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 +7 -2
- package/lib/about/ui/AboutBuildDetails.d.ts +15 -0
- package/lib/about/ui/AboutBuildDetails.d.ts.map +1 -0
- package/lib/about/ui/AboutBuildDetails.js +17 -0
- package/lib/about/ui/AboutBuildDetails.js.map +1 -0
- package/lib/about/ui/AboutPage.d.ts +8 -0
- package/lib/about/ui/AboutPage.d.ts.map +1 -1
- package/lib/about/ui/AboutPage.js +12 -3
- package/lib/about/ui/AboutPage.js.map +1 -1
- package/lib/about/ui/AboutSignIn.d.ts +33 -0
- package/lib/about/ui/AboutSignIn.d.ts.map +1 -0
- package/lib/about/ui/AboutSignIn.js +28 -0
- package/lib/about/ui/AboutSignIn.js.map +1 -0
- package/lib/about/ui/AboutVersion.d.ts +4 -2
- package/lib/about/ui/AboutVersion.d.ts.map +1 -1
- package/lib/about/ui/AboutVersion.js +21 -3
- package/lib/about/ui/AboutVersion.js.map +1 -1
- package/lib/about/ui/index.d.ts +2 -2
- package/lib/about/ui/index.d.ts.map +1 -1
- package/lib/about/ui/index.js +1 -1
- package/lib/about/ui/index.js.map +1 -1
- package/lib/chart/ui/ChartTrackingLayer.js +3 -1
- package/lib/chart/ui/ChartTrackingLayer.js.map +1 -1
- package/lib/chart/ui/useChartSize.d.ts +16 -0
- package/lib/chart/ui/useChartSize.d.ts.map +1 -1
- package/lib/chart/ui/useChartSize.js +34 -1
- package/lib/chart/ui/useChartSize.js.map +1 -1
- package/lib/chrome/ui/NavEntry.d.ts +16 -0
- package/lib/chrome/ui/NavEntry.d.ts.map +1 -0
- package/lib/chrome/ui/NavEntry.js +27 -0
- package/lib/chrome/ui/NavEntry.js.map +1 -0
- package/lib/chrome/ui/SiteHeader.d.ts +11 -4
- package/lib/chrome/ui/SiteHeader.d.ts.map +1 -1
- package/lib/chrome/ui/SiteHeader.js +4 -26
- package/lib/chrome/ui/SiteHeader.js.map +1 -1
- package/lib/core.d.ts +2 -0
- package/lib/core.d.ts.map +1 -1
- package/lib/core.js +2 -0
- package/lib/core.js.map +1 -1
- package/lib/ecosystem/core/types.d.ts +1 -1
- package/lib/ecosystem/core/types.d.ts.map +1 -1
- package/lib/ecosystem/core/unlistedSites.d.ts.map +1 -1
- package/lib/ecosystem/core/unlistedSites.js +14 -0
- package/lib/ecosystem/core/unlistedSites.js.map +1 -1
- package/lib/ecosystem/ui/glyphs.d.ts.map +1 -1
- package/lib/ecosystem/ui/glyphs.js +3 -0
- package/lib/ecosystem/ui/glyphs.js.map +1 -1
- package/lib/i18n/core/chromeCatalog.d.ts +1 -1
- package/lib/i18n/core/chromeCatalog.d.ts.map +1 -1
- package/lib/locales/de.json +36 -3
- package/lib/locales/en.json +36 -3
- package/lib/locales/es.json +36 -3
- package/lib/locales/fr.json +36 -3
- package/lib/locales/it.json +36 -3
- package/lib/moleculesSources/core/index.d.ts +3 -0
- package/lib/moleculesSources/core/index.d.ts.map +1 -0
- package/lib/moleculesSources/core/index.js +2 -0
- package/lib/moleculesSources/core/index.js.map +1 -0
- package/lib/moleculesSources/core/moleculesSources.d.ts +55 -0
- package/lib/moleculesSources/core/moleculesSources.d.ts.map +1 -0
- package/lib/moleculesSources/core/moleculesSources.js +63 -0
- package/lib/moleculesSources/core/moleculesSources.js.map +1 -0
- package/lib/moleculesSources/ui/MoleculesSourceBadge.d.ts +18 -0
- package/lib/moleculesSources/ui/MoleculesSourceBadge.d.ts.map +1 -0
- package/lib/moleculesSources/ui/MoleculesSourceBadge.js +22 -0
- package/lib/moleculesSources/ui/MoleculesSourceBadge.js.map +1 -0
- package/lib/moleculesSources/ui/SourceBadge.d.ts +57 -0
- package/lib/moleculesSources/ui/SourceBadge.d.ts.map +1 -0
- package/lib/moleculesSources/ui/SourceBadge.js +29 -0
- package/lib/moleculesSources/ui/SourceBadge.js.map +1 -0
- package/lib/moleculesSources/ui/index.d.ts +7 -0
- package/lib/moleculesSources/ui/index.d.ts.map +1 -0
- package/lib/moleculesSources/ui/index.js +4 -0
- package/lib/moleculesSources/ui/index.js.map +1 -0
- package/lib/moleculesSources/ui/useSourceLooks.d.ts +24 -0
- package/lib/moleculesSources/ui/useSourceLooks.d.ts.map +1 -0
- package/lib/moleculesSources/ui/useSourceLooks.js +53 -0
- package/lib/moleculesSources/ui/useSourceLooks.js.map +1 -0
- package/lib/moleculesToken/core/index.d.ts +4 -0
- package/lib/moleculesToken/core/index.d.ts.map +1 -0
- package/lib/moleculesToken/core/index.js +3 -0
- package/lib/moleculesToken/core/index.js.map +1 -0
- package/lib/moleculesToken/core/moleculesToken.d.ts +101 -0
- package/lib/moleculesToken/core/moleculesToken.d.ts.map +1 -0
- package/lib/moleculesToken/core/moleculesToken.js +137 -0
- package/lib/moleculesToken/core/moleculesToken.js.map +1 -0
- package/lib/moleculesToken/core/tokenFix.d.ts +18 -0
- package/lib/moleculesToken/core/tokenFix.d.ts.map +1 -0
- package/lib/moleculesToken/core/tokenFix.js +27 -0
- package/lib/moleculesToken/core/tokenFix.js.map +1 -0
- package/lib/moleculesToken/ui/MoleculesTokenFix.d.ts +22 -0
- package/lib/moleculesToken/ui/MoleculesTokenFix.d.ts.map +1 -0
- package/lib/moleculesToken/ui/MoleculesTokenFix.js +35 -0
- package/lib/moleculesToken/ui/MoleculesTokenFix.js.map +1 -0
- package/lib/moleculesToken/ui/MoleculesTokenTable.d.ts +37 -0
- package/lib/moleculesToken/ui/MoleculesTokenTable.d.ts.map +1 -0
- package/lib/moleculesToken/ui/MoleculesTokenTable.js +56 -0
- package/lib/moleculesToken/ui/MoleculesTokenTable.js.map +1 -0
- package/lib/moleculesToken/ui/index.d.ts +5 -0
- package/lib/moleculesToken/ui/index.d.ts.map +1 -0
- package/lib/moleculesToken/ui/index.js +3 -0
- package/lib/moleculesToken/ui/index.js.map +1 -0
- package/lib/moleculesToken/ui/tokenDetails.d.ts +13 -0
- package/lib/moleculesToken/ui/tokenDetails.d.ts.map +1 -0
- package/lib/moleculesToken/ui/tokenDetails.js +73 -0
- package/lib/moleculesToken/ui/tokenDetails.js.map +1 -0
- package/lib/ui.d.ts +2 -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/about/ui/AboutBuildDetails.tsx +45 -0
- package/src/about/ui/AboutPage.tsx +27 -13
- package/src/about/ui/AboutSignIn.tsx +63 -0
- package/src/about/ui/AboutVersion.tsx +27 -9
- package/src/about/ui/index.ts +2 -2
- package/src/chart/ui/ChartTrackingLayer.tsx +3 -1
- package/src/chart/ui/useChartSize.ts +44 -1
- package/src/chrome/ui/NavEntry.tsx +41 -0
- package/src/chrome/ui/SiteHeader.tsx +15 -41
- package/src/core.ts +2 -0
- package/src/ecosystem/core/types.ts +2 -1
- package/src/ecosystem/core/unlistedSites.ts +14 -0
- package/src/ecosystem/ui/glyphs.tsx +10 -0
- package/src/locales/de.json +36 -3
- package/src/locales/en.json +36 -3
- package/src/locales/es.json +36 -3
- package/src/locales/fr.json +36 -3
- package/src/locales/it.json +36 -3
- package/src/moleculesSources/core/index.ts +11 -0
- package/src/moleculesSources/core/moleculesSources.ts +102 -0
- package/src/moleculesSources/ui/MoleculesSourceBadge.tsx +44 -0
- package/src/moleculesSources/ui/SourceBadge.tsx +117 -0
- package/src/moleculesSources/ui/index.ts +6 -0
- package/src/moleculesSources/ui/useSourceLooks.ts +70 -0
- package/src/moleculesToken/core/index.ts +12 -0
- package/src/moleculesToken/core/moleculesToken.ts +256 -0
- package/src/moleculesToken/core/tokenFix.ts +37 -0
- package/src/moleculesToken/ui/MoleculesTokenFix.tsx +95 -0
- package/src/moleculesToken/ui/MoleculesTokenTable.tsx +175 -0
- package/src/moleculesToken/ui/index.ts +4 -0
- package/src/moleculesToken/ui/tokenDetails.tsx +91 -0
- package/src/ui.ts +2 -0
- package/styles/chrome.css +194 -0
- package/lib/about/ui/AboutBuild.d.ts +0 -18
- package/lib/about/ui/AboutBuild.d.ts.map +0 -1
- package/lib/about/ui/AboutBuild.js +0 -37
- package/lib/about/ui/AboutBuild.js.map +0 -1
- package/src/about/ui/AboutBuild.tsx +0 -54
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import { trimTrailingSlash } from "../../router/core/address.js";
|
|
2
|
+
/**
|
|
3
|
+
* Ask molecules.cheminfo.org about a token: `GET /v1/token`, which says which
|
|
4
|
+
* source it was issued for and never counts as using it. A token pasted in
|
|
5
|
+
* another source's place, revoked, or never issued shows here before an import
|
|
6
|
+
* sends anything with it. Never throws: a molecules.cheminfo.org that does not
|
|
7
|
+
* answer is a verdict too.
|
|
8
|
+
* @param entry - The token, where it is read from, and the sources it may be for.
|
|
9
|
+
* @param options - Where molecules.cheminfo.org answers, and how patiently.
|
|
10
|
+
* @returns What it says of the token.
|
|
11
|
+
*/
|
|
12
|
+
export async function checkMoleculesToken(entry, options) {
|
|
13
|
+
const { baseUrl, timeoutMs = 5000, fetch: fetchImplementation = globalThis.fetch, now = Date.now, } = options;
|
|
14
|
+
const sources = entry.sources === undefined ? [] : [...entry.sources];
|
|
15
|
+
const verdict = (value, message = null) => ({
|
|
16
|
+
variable: entry.variable,
|
|
17
|
+
sources,
|
|
18
|
+
verdict: value,
|
|
19
|
+
message,
|
|
20
|
+
source: null,
|
|
21
|
+
hint: null,
|
|
22
|
+
email: null,
|
|
23
|
+
issuedAt: null,
|
|
24
|
+
lastUsedAt: null,
|
|
25
|
+
checkedAt: now(),
|
|
26
|
+
});
|
|
27
|
+
const token = entry.token?.trim();
|
|
28
|
+
if (!token)
|
|
29
|
+
return verdict('unset');
|
|
30
|
+
let response;
|
|
31
|
+
try {
|
|
32
|
+
response = await fetchImplementation(`${trimTrailingSlash(baseUrl)}/v1/token`, {
|
|
33
|
+
headers: {
|
|
34
|
+
accept: 'application/json',
|
|
35
|
+
authorization: `Bearer ${token}`,
|
|
36
|
+
},
|
|
37
|
+
signal: AbortSignal.timeout(timeoutMs),
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
catch (error) {
|
|
41
|
+
return verdict('unanswered', whyUnanswered(error, timeoutMs));
|
|
42
|
+
}
|
|
43
|
+
if (response.status === 401) {
|
|
44
|
+
return verdict('refused', await messageOf(response));
|
|
45
|
+
}
|
|
46
|
+
if (response.status === 404) {
|
|
47
|
+
await response.body?.cancel();
|
|
48
|
+
return verdict('uncheckable', 'GET /v1/token answered 404');
|
|
49
|
+
}
|
|
50
|
+
if (!response.ok) {
|
|
51
|
+
await response.body?.cancel();
|
|
52
|
+
return verdict('unanswered', `GET /v1/token answered ${response.status}`);
|
|
53
|
+
}
|
|
54
|
+
const record = await recordOf(response);
|
|
55
|
+
if (record === null) {
|
|
56
|
+
return verdict('unanswered', 'GET /v1/token answered no token');
|
|
57
|
+
}
|
|
58
|
+
const known = {
|
|
59
|
+
source: record.source,
|
|
60
|
+
hint: record.hint,
|
|
61
|
+
email: record.email,
|
|
62
|
+
issuedAt: record.createdAt * 1000,
|
|
63
|
+
lastUsedAt: record.lastUsedAt === null ? null : record.lastUsedAt * 1000,
|
|
64
|
+
};
|
|
65
|
+
if (record.revokedAt !== null) {
|
|
66
|
+
return { ...verdict('refused', 'this token was revoked'), ...known };
|
|
67
|
+
}
|
|
68
|
+
const wanted = record.source.toLowerCase();
|
|
69
|
+
const expected = sources.length === 0 ||
|
|
70
|
+
sources.some((source) => source.toLowerCase() === wanted);
|
|
71
|
+
return { ...verdict(expected ? 'ok' : 'otherSource'), ...known };
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Check every token a site holds, all at once.
|
|
75
|
+
* @param entries - The tokens. See {@link checkMoleculesToken}.
|
|
76
|
+
* @param options - See {@link CheckMoleculesTokenOptions}.
|
|
77
|
+
* @returns What molecules.cheminfo.org says of each, in the order given.
|
|
78
|
+
*/
|
|
79
|
+
export async function checkMoleculesTokens(entries, options) {
|
|
80
|
+
return Promise.all(entries.map((entry) => checkMoleculesToken(entry, options)));
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* What a page anyone can open may show of a check: the verdict and the source,
|
|
84
|
+
* without who the token was issued to or its first characters.
|
|
85
|
+
* @param check - The check.
|
|
86
|
+
* @returns The check, without them.
|
|
87
|
+
*/
|
|
88
|
+
export function publicTokenCheck(check) {
|
|
89
|
+
return { ...check, email: null, hint: null };
|
|
90
|
+
}
|
|
91
|
+
async function recordOf(response) {
|
|
92
|
+
let body;
|
|
93
|
+
try {
|
|
94
|
+
body = await response.json();
|
|
95
|
+
}
|
|
96
|
+
catch {
|
|
97
|
+
return null;
|
|
98
|
+
}
|
|
99
|
+
if (typeof body !== 'object' || body === null)
|
|
100
|
+
return null;
|
|
101
|
+
const record = body;
|
|
102
|
+
if (typeof record.source !== 'string' ||
|
|
103
|
+
typeof record.email !== 'string' ||
|
|
104
|
+
typeof record.hint !== 'string' ||
|
|
105
|
+
typeof record.createdAt !== 'number' ||
|
|
106
|
+
!isOptionalNumber(record.lastUsedAt) ||
|
|
107
|
+
!isOptionalNumber(record.revokedAt)) {
|
|
108
|
+
return null;
|
|
109
|
+
}
|
|
110
|
+
return {
|
|
111
|
+
source: record.source,
|
|
112
|
+
email: record.email,
|
|
113
|
+
hint: record.hint,
|
|
114
|
+
createdAt: record.createdAt,
|
|
115
|
+
lastUsedAt: record.lastUsedAt,
|
|
116
|
+
revokedAt: record.revokedAt,
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
function isOptionalNumber(value) {
|
|
120
|
+
return value === null || typeof value === 'number';
|
|
121
|
+
}
|
|
122
|
+
async function messageOf(response) {
|
|
123
|
+
try {
|
|
124
|
+
const body = (await response.json());
|
|
125
|
+
return typeof body.message === 'string' ? body.message : null;
|
|
126
|
+
}
|
|
127
|
+
catch {
|
|
128
|
+
return null;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
function whyUnanswered(error, timeoutMs) {
|
|
132
|
+
if (error?.name === 'TimeoutError') {
|
|
133
|
+
return `no answer within ${timeoutMs} ms`;
|
|
134
|
+
}
|
|
135
|
+
return error instanceof Error ? error.message : String(error);
|
|
136
|
+
}
|
|
137
|
+
//# sourceMappingURL=moleculesToken.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"moleculesToken.js","sourceRoot":"","sources":["../../../src/moleculesToken/core/moleculesToken.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { MoleculesTokenCheck } from './moleculesToken.ts';
|
|
2
|
+
/**
|
|
3
|
+
* The checks whose token has to be replaced: none is set, molecules.cheminfo.org
|
|
4
|
+
* refuses it, or it was issued for another source. A token that could not be
|
|
5
|
+
* checked is not among them, since nothing written in the `.env` fixes that.
|
|
6
|
+
* @param checks - The last checks.
|
|
7
|
+
* @returns Those to fix, in the order given.
|
|
8
|
+
*/
|
|
9
|
+
export declare function tokensToFix(checks: readonly MoleculesTokenCheck[]): MoleculesTokenCheck[];
|
|
10
|
+
/**
|
|
11
|
+
* The command molecules.cheminfo.org issues a check's token with, on its
|
|
12
|
+
* server. The source is quoted, since a name like `NP Atlas` holds a space;
|
|
13
|
+
* the email is left for the reader to write.
|
|
14
|
+
* @param check - The check, whose first source the token is issued for.
|
|
15
|
+
* @returns The command.
|
|
16
|
+
*/
|
|
17
|
+
export declare function issueTokenCommand(check: Pick<MoleculesTokenCheck, 'sources'>): string;
|
|
18
|
+
//# sourceMappingURL=tokenFix.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokenFix.d.ts","sourceRoot":"","sources":["../../../src/moleculesToken/core/tokenFix.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,mBAAmB,EAEpB,MAAM,qBAAqB,CAAC;AAS7B;;;;;;GAMG;AACH,wBAAgB,WAAW,CACzB,MAAM,EAAE,SAAS,mBAAmB,EAAE,GACrC,mBAAmB,EAAE,CAEvB;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,IAAI,CAAC,mBAAmB,EAAE,SAAS,CAAC,GAC1C,MAAM,CAER"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/** The verdicts only a new token, written in the server's `.env`, fixes. */
|
|
2
|
+
const NEEDS_NEW_TOKEN = new Set([
|
|
3
|
+
'unset',
|
|
4
|
+
'refused',
|
|
5
|
+
'otherSource',
|
|
6
|
+
]);
|
|
7
|
+
/**
|
|
8
|
+
* The checks whose token has to be replaced: none is set, molecules.cheminfo.org
|
|
9
|
+
* refuses it, or it was issued for another source. A token that could not be
|
|
10
|
+
* checked is not among them, since nothing written in the `.env` fixes that.
|
|
11
|
+
* @param checks - The last checks.
|
|
12
|
+
* @returns Those to fix, in the order given.
|
|
13
|
+
*/
|
|
14
|
+
export function tokensToFix(checks) {
|
|
15
|
+
return checks.filter((check) => NEEDS_NEW_TOKEN.has(check.verdict));
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* The command molecules.cheminfo.org issues a check's token with, on its
|
|
19
|
+
* server. The source is quoted, since a name like `NP Atlas` holds a space;
|
|
20
|
+
* the email is left for the reader to write.
|
|
21
|
+
* @param check - The check, whose first source the token is issued for.
|
|
22
|
+
* @returns The command.
|
|
23
|
+
*/
|
|
24
|
+
export function issueTokenCommand(check) {
|
|
25
|
+
return `npm run tokens -- issue '${check.sources[0] ?? 'SOURCE'}' EMAIL`;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=tokenFix.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokenFix.js","sourceRoot":"","sources":["../../../src/moleculesToken/core/tokenFix.ts"],"names":[],"mappings":"AAKA,4EAA4E;AAC5E,MAAM,eAAe,GAAuC,IAAI,GAAG,CAAC;IAClE,OAAO;IACP,SAAS;IACT,aAAa;CACd,CAAC,CAAC;AAEH;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CACzB,MAAsC;IAEtC,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;AACtE,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAC/B,KAA2C;IAE3C,OAAO,4BAA4B,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,QAAQ,SAAS,CAAC;AAC3E,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { ReactElement } from 'react';
|
|
2
|
+
import type { MoleculesTokenCheck } from '../core/moleculesToken.ts';
|
|
3
|
+
/** What {@link MoleculesTokenFix} shows. */
|
|
4
|
+
export interface MoleculesTokenFixProps {
|
|
5
|
+
/** The last checks. */
|
|
6
|
+
checks: readonly MoleculesTokenCheck[];
|
|
7
|
+
/**
|
|
8
|
+
* Where molecules.cheminfo.org answers, whose Admin page issues tokens.
|
|
9
|
+
* @default 'https://molecules.cheminfo.org'
|
|
10
|
+
*/
|
|
11
|
+
moleculesUrl?: string;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* What to do about the tokens that have to be replaced — none set, refused, or
|
|
15
|
+
* issued for another source — in the three steps it takes: issue one on
|
|
16
|
+
* molecules.cheminfo.org, write it in the server's `.env`, restart. Nothing
|
|
17
|
+
* when every token is fine.
|
|
18
|
+
* @param props - See {@link MoleculesTokenFixProps}.
|
|
19
|
+
* @returns The steps, or null.
|
|
20
|
+
*/
|
|
21
|
+
export declare function MoleculesTokenFix(props: MoleculesTokenFixProps): ReactElement | null;
|
|
22
|
+
//# sourceMappingURL=MoleculesTokenFix.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MoleculesTokenFix.d.ts","sourceRoot":"","sources":["../../../src/moleculesToken/ui/MoleculesTokenFix.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAM1C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAMrE,4CAA4C;AAC5C,MAAM,WAAW,sBAAsB;IACrC,uBAAuB;IACvB,MAAM,EAAE,SAAS,mBAAmB,EAAE,CAAC;IACvC;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,sBAAsB,GAC5B,YAAY,GAAG,IAAI,CA4DrB"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Callout } from '@blueprintjs/core';
|
|
3
|
+
import { CodeBlock } from "../../clipboard/ui/CodeBlock.js";
|
|
4
|
+
import { useLanguage } from "../../i18n/ui/useLanguage.js";
|
|
5
|
+
import { useChromeT } from "../../i18n/ui/useT.js";
|
|
6
|
+
import { trimTrailingSlash } from "../../router/core/address.js";
|
|
7
|
+
import { issueTokenCommand, tokensToFix } from "../core/tokenFix.js";
|
|
8
|
+
/** Where molecules.cheminfo.org answers when the site names no other. */
|
|
9
|
+
const DEFAULT_MOLECULES_URL = 'https://molecules.cheminfo.org';
|
|
10
|
+
/**
|
|
11
|
+
* What to do about the tokens that have to be replaced — none set, refused, or
|
|
12
|
+
* issued for another source — in the three steps it takes: issue one on
|
|
13
|
+
* molecules.cheminfo.org, write it in the server's `.env`, restart. Nothing
|
|
14
|
+
* when every token is fine.
|
|
15
|
+
* @param props - See {@link MoleculesTokenFixProps}.
|
|
16
|
+
* @returns The steps, or null.
|
|
17
|
+
*/
|
|
18
|
+
export function MoleculesTokenFix(props) {
|
|
19
|
+
const { checks, moleculesUrl = DEFAULT_MOLECULES_URL } = props;
|
|
20
|
+
const t = useChromeT();
|
|
21
|
+
const language = useLanguage();
|
|
22
|
+
const toFix = tokensToFix(checks);
|
|
23
|
+
if (toFix.length === 0)
|
|
24
|
+
return null;
|
|
25
|
+
const one = toFix.length === 1;
|
|
26
|
+
const variables = new Intl.ListFormat(language, {
|
|
27
|
+
type: 'conjunction',
|
|
28
|
+
}).format(toFix.map((check) => check.variable));
|
|
29
|
+
const admin = `${trimTrailingSlash(moleculesUrl)}/admin`;
|
|
30
|
+
const unsetOnly = toFix.every((check) => check.verdict === 'unset');
|
|
31
|
+
return (_jsx(Callout, { intent: unsetOnly ? 'warning' : 'danger', icon: "key", title: t('moleculesToken.fix.title', { variables }), className: "molecules-tokens__fix", "data-testid": "molecules-tokens-fix", children: _jsxs("ol", { children: [_jsxs("li", { children: [_jsxs("p", { children: [t(one
|
|
32
|
+
? 'moleculesToken.fix.issueOne'
|
|
33
|
+
: 'moleculesToken.fix.issueMany'), ' ', _jsx("a", { href: admin, target: "_blank", rel: "noreferrer", children: admin })] }), _jsx("p", { children: t('moleculesToken.fix.issueOnServer') }), _jsx(CodeBlock, { tone: "muted", copyable: true, code: [...new Set(toFix.map(issueTokenCommand))].join('\n') })] }), _jsxs("li", { children: [_jsx("p", { children: t(one ? 'moleculesToken.fix.envOne' : 'moleculesToken.fix.envMany') }), _jsx(CodeBlock, { tone: "muted", copyable: true, code: toFix.map((check) => `${check.variable}=mct_…`).join('\n') })] }), _jsxs("li", { children: [_jsx("p", { children: t('moleculesToken.fix.restart') }), _jsx(CodeBlock, { tone: "muted", copyable: true, code: "docker compose up -d" })] })] }) }));
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=MoleculesTokenFix.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MoleculesTokenFix.js","sourceRoot":"","sources":["../../../src/moleculesToken/ui/MoleculesTokenFix.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAG5C,OAAO,EAAE,SAAS,EAAE,MAAM,iCAAkC,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAEjE,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAErE,yEAAyE;AACzE,MAAM,qBAAqB,GAAG,gCAAgC,CAAC;AAa/D;;;;;;;GAOG;AACH,MAAM,UAAU,iBAAiB,CAC/B,KAA6B;IAE7B,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,qBAAqB,EAAE,GAAG,KAAK,CAAC;IAC/D,MAAM,CAAC,GAAG,UAAU,EAAE,CAAC;IACvB,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;IAClC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEpC,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC;IAC/B,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE;QAC9C,IAAI,EAAE,aAAa;KACpB,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;IAChD,MAAM,KAAK,GAAG,GAAG,iBAAiB,CAAC,YAAY,CAAC,QAAQ,CAAC;IACzD,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC;IAEpE,OAAO,CACL,KAAC,OAAO,IACN,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,EACxC,IAAI,EAAC,KAAK,EACV,KAAK,EAAE,CAAC,CAAC,0BAA0B,EAAE,EAAE,SAAS,EAAE,CAAC,EACnD,SAAS,EAAC,uBAAuB,iBACrB,sBAAsB,YAElC,yBACE,yBACE,wBACG,CAAC,CACA,GAAG;oCACD,CAAC,CAAC,6BAA6B;oCAC/B,CAAC,CAAC,8BAA8B,CACnC,EAAE,GAAG,EACN,YAAG,IAAI,EAAE,KAAK,EAAE,MAAM,EAAC,QAAQ,EAAC,GAAG,EAAC,YAAY,YAC7C,KAAK,GACJ,IACF,EACJ,sBAAI,CAAC,CAAC,kCAAkC,CAAC,GAAK,EAC9C,KAAC,SAAS,IACR,IAAI,EAAC,OAAO,EACZ,QAAQ,QACR,IAAI,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAC3D,IACC,EACL,yBACE,sBACG,CAAC,CACA,GAAG,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC,CAAC,4BAA4B,CACjE,GACC,EACJ,KAAC,SAAS,IACR,IAAI,EAAC,OAAO,EACZ,QAAQ,QACR,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,QAAQ,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAChE,IACC,EACL,yBACE,sBAAI,CAAC,CAAC,4BAA4B,CAAC,GAAK,EACxC,KAAC,SAAS,IAAC,IAAI,EAAC,OAAO,EAAC,QAAQ,QAAC,IAAI,EAAC,sBAAsB,GAAG,IAC5D,IACF,GACG,CACX,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { MoleculesTokenCheck } from '../core/moleculesToken.ts';
|
|
2
|
+
/** What {@link MoleculesTokenTable} shows. */
|
|
3
|
+
export interface MoleculesTokenTableProps {
|
|
4
|
+
/** The last checks, or null before the first one was made. */
|
|
5
|
+
checks: readonly MoleculesTokenCheck[] | null;
|
|
6
|
+
/**
|
|
7
|
+
* Whether a check was asked for and is not made yet.
|
|
8
|
+
* @default false
|
|
9
|
+
*/
|
|
10
|
+
pending?: boolean;
|
|
11
|
+
/**
|
|
12
|
+
* Asks for every token to be checked again. Left out, there is no button:
|
|
13
|
+
* a page anyone can open shows the last checks and asks for none.
|
|
14
|
+
* @default undefined
|
|
15
|
+
*/
|
|
16
|
+
onCheckAgain?: () => void;
|
|
17
|
+
/**
|
|
18
|
+
* Why asking for a check failed.
|
|
19
|
+
* @default undefined
|
|
20
|
+
*/
|
|
21
|
+
error?: string;
|
|
22
|
+
/**
|
|
23
|
+
* Where molecules.cheminfo.org answers, whose Admin page issues tokens.
|
|
24
|
+
* @default 'https://molecules.cheminfo.org'
|
|
25
|
+
*/
|
|
26
|
+
moleculesUrl?: string;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* The tokens a site holds for molecules.cheminfo.org, one row each, with what
|
|
30
|
+
* molecules.cheminfo.org said of it when it was last checked: valid, another
|
|
31
|
+
* source's, refused, not set. A token is changed in the server's `.env`, never
|
|
32
|
+
* here, so the table says where, and above it how, when one has to be.
|
|
33
|
+
* @param props - See {@link MoleculesTokenTableProps}.
|
|
34
|
+
* @returns The table.
|
|
35
|
+
*/
|
|
36
|
+
export declare function MoleculesTokenTable(props: MoleculesTokenTableProps): import("react").JSX.Element;
|
|
37
|
+
//# sourceMappingURL=MoleculesTokenTable.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MoleculesTokenTable.d.ts","sourceRoot":"","sources":["../../../src/moleculesToken/ui/MoleculesTokenTable.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,mBAAmB,EAEpB,MAAM,2BAA2B,CAAC;AAMnC,8CAA8C;AAC9C,MAAM,WAAW,wBAAwB;IACvC,8DAA8D;IAC9D,MAAM,EAAE,SAAS,mBAAmB,EAAE,GAAG,IAAI,CAAC;IAC9C;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAwBD;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,wBAAwB,+BAqGlE"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Button, Callout, HTMLTable, Tag } from '@blueprintjs/core';
|
|
3
|
+
import { useMemo } from 'react';
|
|
4
|
+
import { useLanguage } from "../../i18n/ui/useLanguage.js";
|
|
5
|
+
import { useChromeT } from "../../i18n/ui/useT.js";
|
|
6
|
+
import { tokensToFix } from "../core/tokenFix.js";
|
|
7
|
+
import { MoleculesTokenFix } from "./MoleculesTokenFix.js";
|
|
8
|
+
import { tokenDetails } from "./tokenDetails.js";
|
|
9
|
+
const INTENT = {
|
|
10
|
+
ok: 'success',
|
|
11
|
+
otherSource: 'danger',
|
|
12
|
+
refused: 'danger',
|
|
13
|
+
unset: 'warning',
|
|
14
|
+
uncheckable: 'warning',
|
|
15
|
+
unanswered: 'warning',
|
|
16
|
+
};
|
|
17
|
+
/** How each verdict reads in the table. */
|
|
18
|
+
const LABEL = {
|
|
19
|
+
ok: 'moleculesToken.verdict.ok',
|
|
20
|
+
otherSource: 'moleculesToken.verdict.otherSource',
|
|
21
|
+
refused: 'moleculesToken.verdict.refused',
|
|
22
|
+
unset: 'moleculesToken.verdict.unset',
|
|
23
|
+
uncheckable: 'moleculesToken.verdict.uncheckable',
|
|
24
|
+
unanswered: 'moleculesToken.verdict.unanswered',
|
|
25
|
+
};
|
|
26
|
+
/** The command a token is issued with, on molecules.cheminfo.org. */
|
|
27
|
+
const ISSUE_COMMAND = 'npm run tokens -- issue SOURCE EMAIL';
|
|
28
|
+
/**
|
|
29
|
+
* The tokens a site holds for molecules.cheminfo.org, one row each, with what
|
|
30
|
+
* molecules.cheminfo.org said of it when it was last checked: valid, another
|
|
31
|
+
* source's, refused, not set. A token is changed in the server's `.env`, never
|
|
32
|
+
* here, so the table says where, and above it how, when one has to be.
|
|
33
|
+
* @param props - See {@link MoleculesTokenTableProps}.
|
|
34
|
+
* @returns The table.
|
|
35
|
+
*/
|
|
36
|
+
export function MoleculesTokenTable(props) {
|
|
37
|
+
const { checks, pending = false, onCheckAgain, error, moleculesUrl } = props;
|
|
38
|
+
const t = useChromeT();
|
|
39
|
+
const language = useLanguage();
|
|
40
|
+
const formats = useMemo(() => ({
|
|
41
|
+
instant: new Intl.DateTimeFormat(language, {
|
|
42
|
+
dateStyle: 'medium',
|
|
43
|
+
timeStyle: 'short',
|
|
44
|
+
}),
|
|
45
|
+
sources: new Intl.ListFormat(language, { type: 'disjunction' }),
|
|
46
|
+
}), [language]);
|
|
47
|
+
const checkedAt = checks === null || checks.length === 0
|
|
48
|
+
? null
|
|
49
|
+
: Math.min(...checks.map((check) => check.checkedAt));
|
|
50
|
+
return (_jsxs("section", { className: "molecules-tokens", "aria-label": t('moleculesToken.title'), "data-testid": "molecules-tokens", children: [_jsxs("div", { className: "molecules-tokens__head", children: [_jsx("span", { className: "molecules-tokens__title", children: t('moleculesToken.title') }), checkedAt !== null && (_jsx("span", { className: "molecules-tokens__muted", children: t('moleculesToken.checkedAt', {
|
|
51
|
+
when: formats.instant.format(checkedAt),
|
|
52
|
+
}) })), onCheckAgain !== undefined && (_jsx(Button, { size: "small", variant: "minimal", icon: "refresh", loading: pending, text: t('moleculesToken.checkAgain'), onClick: onCheckAgain, "data-testid": "molecules-tokens-check" }))] }), error !== undefined && (_jsx(Callout, { compact: true, intent: "danger", children: error })), checks !== null && (_jsx(MoleculesTokenFix, { checks: checks, moleculesUrl: moleculesUrl })), checks === null ? (_jsx("p", { className: "molecules-tokens__muted", children: t('moleculesToken.notChecked') })) : (_jsx("div", { className: "molecules-tokens__scroll", children: _jsxs(HTMLTable, { compact: true, striped: true, className: "molecules-tokens__table", children: [_jsx("thead", { children: _jsxs("tr", { children: [_jsx("th", { children: t('moleculesToken.column.variable') }), _jsx("th", { children: t('moleculesToken.column.source') }), _jsx("th", { children: t('moleculesToken.column.status') }), _jsx("th", { children: t('moleculesToken.column.details') })] }) }), _jsx("tbody", { children: checks.map((check) => (_jsxs("tr", { "data-verdict": check.verdict, children: [_jsx("td", { children: _jsx("code", { children: check.variable }) }), _jsx("td", { children: check.sources.length === 0
|
|
53
|
+
? t('moleculesToken.anySource')
|
|
54
|
+
: formats.sources.format(check.sources) }), _jsx("td", { children: _jsx(Tag, { minimal: true, intent: INTENT[check.verdict], children: t(LABEL[check.verdict]) }) }), _jsx("td", { children: tokenDetails(check, t, formats.instant) })] }, check.variable))) })] }) })), (checks === null || tokensToFix(checks).length === 0) && (_jsxs("p", { className: "molecules-tokens__muted", children: [t('moleculesToken.howToChange'), " ", _jsx("code", { children: ISSUE_COMMAND })] }))] }));
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=MoleculesTokenTable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MoleculesTokenTable.js","sourceRoot":"","sources":["../../../src/moleculesToken/ui/MoleculesTokenTable.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export type { MoleculesTokenFixProps } from './MoleculesTokenFix.tsx';
|
|
2
|
+
export { MoleculesTokenFix } from './MoleculesTokenFix.tsx';
|
|
3
|
+
export type { MoleculesTokenTableProps } from './MoleculesTokenTable.tsx';
|
|
4
|
+
export { MoleculesTokenTable } from './MoleculesTokenTable.tsx';
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/moleculesToken/ui/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,YAAY,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAC1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/moleculesToken/ui/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAyB,CAAC;AAE5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA2B,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
import type { ChromeKey } from '../../i18n/core/chromeCatalog.ts';
|
|
3
|
+
import type { Translate } from '../../i18n/ui/useT.ts';
|
|
4
|
+
import type { MoleculesTokenCheck } from '../core/moleculesToken.ts';
|
|
5
|
+
/**
|
|
6
|
+
* What a row says besides its verdict.
|
|
7
|
+
* @param check - The check.
|
|
8
|
+
* @param t - The chrome's translator.
|
|
9
|
+
* @param instant - How an instant is written.
|
|
10
|
+
* @returns The cell's content.
|
|
11
|
+
*/
|
|
12
|
+
export declare function tokenDetails(check: MoleculesTokenCheck, t: Translate<ChromeKey>, instant: Intl.DateTimeFormat): ReactNode;
|
|
13
|
+
//# sourceMappingURL=tokenDetails.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokenDetails.d.ts","sourceRoot":"","sources":["../../../src/moleculesToken/ui/tokenDetails.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAClE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAErE;;;;;;GAMG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,mBAAmB,EAC1B,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,EACvB,OAAO,EAAE,IAAI,CAAC,cAAc,GAC3B,SAAS,CAuDX"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* What a row says besides its verdict.
|
|
4
|
+
* @param check - The check.
|
|
5
|
+
* @param t - The chrome's translator.
|
|
6
|
+
* @param instant - How an instant is written.
|
|
7
|
+
* @returns The cell's content.
|
|
8
|
+
*/
|
|
9
|
+
export function tokenDetails(check, t, instant) {
|
|
10
|
+
const hint = check.hint === null
|
|
11
|
+
? null
|
|
12
|
+
: ['hint', _jsxs("code", { children: [check.hint, "\u2026"] }, "hint")];
|
|
13
|
+
switch (check.verdict) {
|
|
14
|
+
case 'ok':
|
|
15
|
+
return facts([
|
|
16
|
+
check.sources.length === 1 || check.source === null
|
|
17
|
+
? null
|
|
18
|
+
: ['source', t('moleculesToken.forSource', { source: check.source })],
|
|
19
|
+
check.issuedAt === null
|
|
20
|
+
? null
|
|
21
|
+
: [
|
|
22
|
+
'issued',
|
|
23
|
+
check.email === null
|
|
24
|
+
? t('moleculesToken.issued', {
|
|
25
|
+
when: instant.format(check.issuedAt),
|
|
26
|
+
})
|
|
27
|
+
: t('moleculesToken.issuedTo', {
|
|
28
|
+
email: check.email,
|
|
29
|
+
when: instant.format(check.issuedAt),
|
|
30
|
+
}),
|
|
31
|
+
],
|
|
32
|
+
[
|
|
33
|
+
'used',
|
|
34
|
+
check.lastUsedAt === null
|
|
35
|
+
? t('moleculesToken.neverUsed')
|
|
36
|
+
: t('moleculesToken.lastUsed', {
|
|
37
|
+
when: instant.format(check.lastUsedAt),
|
|
38
|
+
}),
|
|
39
|
+
],
|
|
40
|
+
hint,
|
|
41
|
+
]);
|
|
42
|
+
case 'otherSource':
|
|
43
|
+
return facts([
|
|
44
|
+
[
|
|
45
|
+
'source',
|
|
46
|
+
t('moleculesToken.otherSourceDetail', {
|
|
47
|
+
source: check.source ?? '',
|
|
48
|
+
}),
|
|
49
|
+
],
|
|
50
|
+
hint,
|
|
51
|
+
]);
|
|
52
|
+
case 'refused':
|
|
53
|
+
return check.message ?? t('moleculesToken.refusedDetail');
|
|
54
|
+
case 'unset':
|
|
55
|
+
return t('moleculesToken.unsetDetail', { variable: check.variable });
|
|
56
|
+
case 'uncheckable':
|
|
57
|
+
return t('moleculesToken.uncheckableDetail');
|
|
58
|
+
case 'unanswered':
|
|
59
|
+
return check.message;
|
|
60
|
+
default:
|
|
61
|
+
return null;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Facts about a token, one after the other.
|
|
66
|
+
* @param parts - The facts; null ones are left out.
|
|
67
|
+
* @returns The facts, separated by a middle dot.
|
|
68
|
+
*/
|
|
69
|
+
function facts(parts) {
|
|
70
|
+
const shown = parts.filter((part) => part !== null);
|
|
71
|
+
return shown.map(([key, content], index) => (_jsxs("span", { children: [index > 0 && ' · ', content] }, key)));
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=tokenDetails.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokenDetails.js","sourceRoot":"","sources":["../../../src/moleculesToken/ui/tokenDetails.tsx"],"names":[],"mappings":";AAMA;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAC1B,KAA0B,EAC1B,CAAuB,EACvB,OAA4B;IAE5B,MAAM,IAAI,GACR,KAAK,CAAC,IAAI,KAAK,IAAI;QACjB,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,CAAC,MAAM,EAAE,2BAAkB,KAAK,CAAC,IAAI,eAAlB,MAAM,CAAqB,CAAC,CAAC;IACtD,QAAQ,KAAK,CAAC,OAAO,EAAE,CAAC;QACtB,KAAK,IAAI;YACP,OAAO,KAAK,CAAC;gBACX,KAAK,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI;oBACjD,CAAC,CAAC,IAAI;oBACN,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,0BAA0B,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;gBACvE,KAAK,CAAC,QAAQ,KAAK,IAAI;oBACrB,CAAC,CAAC,IAAI;oBACN,CAAC,CAAC;wBACE,QAAQ;wBACR,KAAK,CAAC,KAAK,KAAK,IAAI;4BAClB,CAAC,CAAC,CAAC,CAAC,uBAAuB,EAAE;gCACzB,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC;6BACrC,CAAC;4BACJ,CAAC,CAAC,CAAC,CAAC,yBAAyB,EAAE;gCAC3B,KAAK,EAAE,KAAK,CAAC,KAAK;gCAClB,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC;6BACrC,CAAC;qBACP;gBACL;oBACE,MAAM;oBACN,KAAK,CAAC,UAAU,KAAK,IAAI;wBACvB,CAAC,CAAC,CAAC,CAAC,0BAA0B,CAAC;wBAC/B,CAAC,CAAC,CAAC,CAAC,yBAAyB,EAAE;4BAC3B,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC;yBACvC,CAAC;iBACP;gBACD,IAAI;aACL,CAAC,CAAC;QACL,KAAK,aAAa;YAChB,OAAO,KAAK,CAAC;gBACX;oBACE,QAAQ;oBACR,CAAC,CAAC,kCAAkC,EAAE;wBACpC,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,EAAE;qBAC3B,CAAC;iBACH;gBACD,IAAI;aACL,CAAC,CAAC;QACL,KAAK,SAAS;YACZ,OAAO,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC,8BAA8B,CAAC,CAAC;QAC5D,KAAK,OAAO;YACV,OAAO,CAAC,CAAC,4BAA4B,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;QACvE,KAAK,aAAa;YAChB,OAAO,CAAC,CAAC,kCAAkC,CAAC,CAAC;QAC/C,KAAK,YAAY;YACf,OAAO,KAAK,CAAC,OAAO,CAAC;QACvB;YACE,OAAO,IAAI,CAAC;IAChB,CAAC;AACH,CAAC;AAKD;;;;GAIG;AACH,SAAS,KAAK,CAAC,KAAiC;IAC9C,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IACpD,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,CAC1C,2BACG,KAAK,GAAG,CAAC,IAAI,KAAK,EAClB,OAAO,KAFC,GAAG,CAGP,CACR,CAAC,CAAC;AACL,CAAC"}
|
package/lib/ui.d.ts
CHANGED
|
@@ -18,6 +18,8 @@ export * from './help/ui/index.ts';
|
|
|
18
18
|
export * from './hooks/ui/index.ts';
|
|
19
19
|
export * from './i18n/ui/index.ts';
|
|
20
20
|
export * from './language/ui/index.ts';
|
|
21
|
+
export * from './moleculesSources/ui/index.ts';
|
|
22
|
+
export * from './moleculesToken/ui/index.ts';
|
|
21
23
|
export * from './number/ui/index.ts';
|
|
22
24
|
export * from './overlay/ui/index.ts';
|
|
23
25
|
export * from './panel/ui/index.ts';
|
package/lib/ui.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../src/ui.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AAKvC,YAAY,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AAC7E,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AACnE,YAAY,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AAC1E,OAAO,EACL,uBAAuB,EACvB,cAAc,EACd,eAAe,GAChB,MAAM,oCAAoC,CAAC"}
|
|
1
|
+
{"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../src/ui.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AAKvC,YAAY,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AAC7E,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AACnE,YAAY,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AAC1E,OAAO,EACL,uBAAuB,EACvB,cAAc,EACd,eAAe,GAChB,MAAM,oCAAoC,CAAC"}
|
package/lib/ui.js
CHANGED
|
@@ -18,6 +18,8 @@ export * from "./help/ui/index.js";
|
|
|
18
18
|
export * from "./hooks/ui/index.js";
|
|
19
19
|
export * from "./i18n/ui/index.js";
|
|
20
20
|
export * from "./language/ui/index.js";
|
|
21
|
+
export * from "./moleculesSources/ui/index.js";
|
|
22
|
+
export * from "./moleculesToken/ui/index.js";
|
|
21
23
|
export * from "./number/ui/index.js";
|
|
22
24
|
export * from "./overlay/ui/index.js";
|
|
23
25
|
export * from "./panel/ui/index.js";
|
package/lib/ui.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui.js","sourceRoot":"","sources":["../src/ui.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AAMvC,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAmC,CAAC;AAEnE,OAAO,EACL,uBAAuB,EACvB,cAAc,EACd,eAAe,GAChB,MAAM,oCAAoC,CAAC"}
|
|
1
|
+
{"version":3,"file":"ui.js","sourceRoot":"","sources":["../src/ui.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AAMvC,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAmC,CAAC;AAEnE,OAAO,EACL,uBAAuB,EACvB,cAAc,EACd,eAAe,GAChB,MAAM,oCAAoC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-cheminfo",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.60.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",
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { ReactElement } from 'react';
|
|
2
|
+
|
|
3
|
+
import type { BuildInfo } from '../../build/core/buildInfo.ts';
|
|
4
|
+
import { formatBuiltAt, shortCommit } from '../../build/core/buildInfo.ts';
|
|
5
|
+
import { useChromeT } from '../../i18n/ui/useT.ts';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* What the badge of a release leaves to its hover: the commit it was built
|
|
9
|
+
* from, the instant to the second, and the chrome it was built against.
|
|
10
|
+
* @param props - The build and its released version.
|
|
11
|
+
* @param props.build - What the build published about itself.
|
|
12
|
+
* @param props.version - The release the badge names.
|
|
13
|
+
* @returns The card's contents.
|
|
14
|
+
*/
|
|
15
|
+
export function AboutBuildDetails(props: {
|
|
16
|
+
build: BuildInfo;
|
|
17
|
+
version: string;
|
|
18
|
+
}): ReactElement {
|
|
19
|
+
const { build, version } = props;
|
|
20
|
+
const t = useChromeT();
|
|
21
|
+
|
|
22
|
+
return (
|
|
23
|
+
<>
|
|
24
|
+
<div className="build-tooltip__header">
|
|
25
|
+
{t('about.buildVersion', { version })}
|
|
26
|
+
</div>
|
|
27
|
+
<dl className="build-tooltip__rows">
|
|
28
|
+
<dt>{t('about.buildBuilt')}</dt>
|
|
29
|
+
<dd>{formatBuiltAt(build.builtAt)}</dd>
|
|
30
|
+
{build.commit === undefined ? null : (
|
|
31
|
+
<>
|
|
32
|
+
<dt>{t('about.buildCommit')}</dt>
|
|
33
|
+
<dd>{shortCommit(build.commit)}</dd>
|
|
34
|
+
</>
|
|
35
|
+
)}
|
|
36
|
+
{build.reactCheminfo === undefined ? null : (
|
|
37
|
+
<>
|
|
38
|
+
<dt>react-cheminfo</dt>
|
|
39
|
+
<dd>{build.reactCheminfo}</dd>
|
|
40
|
+
</>
|
|
41
|
+
)}
|
|
42
|
+
</dl>
|
|
43
|
+
</>
|
|
44
|
+
);
|
|
45
|
+
}
|