react-cheminfo 0.59.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.
Files changed (125) hide show
  1. package/README.md +7 -2
  2. package/lib/about/ui/AboutBuildDetails.d.ts +15 -0
  3. package/lib/about/ui/AboutBuildDetails.d.ts.map +1 -0
  4. package/lib/about/ui/AboutBuildDetails.js +17 -0
  5. package/lib/about/ui/AboutBuildDetails.js.map +1 -0
  6. package/lib/about/ui/AboutPage.d.ts +8 -0
  7. package/lib/about/ui/AboutPage.d.ts.map +1 -1
  8. package/lib/about/ui/AboutPage.js +12 -3
  9. package/lib/about/ui/AboutPage.js.map +1 -1
  10. package/lib/about/ui/AboutSignIn.d.ts +33 -0
  11. package/lib/about/ui/AboutSignIn.d.ts.map +1 -0
  12. package/lib/about/ui/AboutSignIn.js +28 -0
  13. package/lib/about/ui/AboutSignIn.js.map +1 -0
  14. package/lib/about/ui/AboutVersion.d.ts +4 -2
  15. package/lib/about/ui/AboutVersion.d.ts.map +1 -1
  16. package/lib/about/ui/AboutVersion.js +21 -3
  17. package/lib/about/ui/AboutVersion.js.map +1 -1
  18. package/lib/about/ui/index.d.ts +2 -2
  19. package/lib/about/ui/index.d.ts.map +1 -1
  20. package/lib/about/ui/index.js +1 -1
  21. package/lib/about/ui/index.js.map +1 -1
  22. package/lib/chrome/ui/NavEntry.d.ts +16 -0
  23. package/lib/chrome/ui/NavEntry.d.ts.map +1 -0
  24. package/lib/chrome/ui/NavEntry.js +27 -0
  25. package/lib/chrome/ui/NavEntry.js.map +1 -0
  26. package/lib/chrome/ui/SiteHeader.d.ts +11 -4
  27. package/lib/chrome/ui/SiteHeader.d.ts.map +1 -1
  28. package/lib/chrome/ui/SiteHeader.js +4 -26
  29. package/lib/chrome/ui/SiteHeader.js.map +1 -1
  30. package/lib/core.d.ts +1 -0
  31. package/lib/core.d.ts.map +1 -1
  32. package/lib/core.js +1 -0
  33. package/lib/core.js.map +1 -1
  34. package/lib/i18n/core/chromeCatalog.d.ts +1 -1
  35. package/lib/i18n/core/chromeCatalog.d.ts.map +1 -1
  36. package/lib/locales/de.json +11 -3
  37. package/lib/locales/en.json +11 -3
  38. package/lib/locales/es.json +11 -3
  39. package/lib/locales/fr.json +11 -3
  40. package/lib/locales/it.json +11 -3
  41. package/lib/moleculesSources/core/index.d.ts +3 -0
  42. package/lib/moleculesSources/core/index.d.ts.map +1 -0
  43. package/lib/moleculesSources/core/index.js +2 -0
  44. package/lib/moleculesSources/core/index.js.map +1 -0
  45. package/lib/moleculesSources/core/moleculesSources.d.ts +55 -0
  46. package/lib/moleculesSources/core/moleculesSources.d.ts.map +1 -0
  47. package/lib/moleculesSources/core/moleculesSources.js +63 -0
  48. package/lib/moleculesSources/core/moleculesSources.js.map +1 -0
  49. package/lib/moleculesSources/ui/MoleculesSourceBadge.d.ts +18 -0
  50. package/lib/moleculesSources/ui/MoleculesSourceBadge.d.ts.map +1 -0
  51. package/lib/moleculesSources/ui/MoleculesSourceBadge.js +22 -0
  52. package/lib/moleculesSources/ui/MoleculesSourceBadge.js.map +1 -0
  53. package/lib/moleculesSources/ui/SourceBadge.d.ts +57 -0
  54. package/lib/moleculesSources/ui/SourceBadge.d.ts.map +1 -0
  55. package/lib/moleculesSources/ui/SourceBadge.js +29 -0
  56. package/lib/moleculesSources/ui/SourceBadge.js.map +1 -0
  57. package/lib/moleculesSources/ui/index.d.ts +7 -0
  58. package/lib/moleculesSources/ui/index.d.ts.map +1 -0
  59. package/lib/moleculesSources/ui/index.js +4 -0
  60. package/lib/moleculesSources/ui/index.js.map +1 -0
  61. package/lib/moleculesSources/ui/useSourceLooks.d.ts +24 -0
  62. package/lib/moleculesSources/ui/useSourceLooks.d.ts.map +1 -0
  63. package/lib/moleculesSources/ui/useSourceLooks.js +53 -0
  64. package/lib/moleculesSources/ui/useSourceLooks.js.map +1 -0
  65. package/lib/moleculesToken/core/index.d.ts +1 -0
  66. package/lib/moleculesToken/core/index.d.ts.map +1 -1
  67. package/lib/moleculesToken/core/index.js +1 -0
  68. package/lib/moleculesToken/core/index.js.map +1 -1
  69. package/lib/moleculesToken/core/tokenFix.d.ts +18 -0
  70. package/lib/moleculesToken/core/tokenFix.d.ts.map +1 -0
  71. package/lib/moleculesToken/core/tokenFix.js +27 -0
  72. package/lib/moleculesToken/core/tokenFix.js.map +1 -0
  73. package/lib/moleculesToken/ui/MoleculesTokenFix.d.ts +22 -0
  74. package/lib/moleculesToken/ui/MoleculesTokenFix.d.ts.map +1 -0
  75. package/lib/moleculesToken/ui/MoleculesTokenFix.js +35 -0
  76. package/lib/moleculesToken/ui/MoleculesTokenFix.js.map +1 -0
  77. package/lib/moleculesToken/ui/MoleculesTokenTable.d.ts +6 -1
  78. package/lib/moleculesToken/ui/MoleculesTokenTable.d.ts.map +1 -1
  79. package/lib/moleculesToken/ui/MoleculesTokenTable.js +7 -75
  80. package/lib/moleculesToken/ui/MoleculesTokenTable.js.map +1 -1
  81. package/lib/moleculesToken/ui/index.d.ts +2 -0
  82. package/lib/moleculesToken/ui/index.d.ts.map +1 -1
  83. package/lib/moleculesToken/ui/index.js +1 -0
  84. package/lib/moleculesToken/ui/index.js.map +1 -1
  85. package/lib/moleculesToken/ui/tokenDetails.d.ts +13 -0
  86. package/lib/moleculesToken/ui/tokenDetails.d.ts.map +1 -0
  87. package/lib/moleculesToken/ui/tokenDetails.js +73 -0
  88. package/lib/moleculesToken/ui/tokenDetails.js.map +1 -0
  89. package/lib/ui.d.ts +1 -0
  90. package/lib/ui.d.ts.map +1 -1
  91. package/lib/ui.js +1 -0
  92. package/lib/ui.js.map +1 -1
  93. package/package.json +1 -1
  94. package/src/about/ui/AboutBuildDetails.tsx +45 -0
  95. package/src/about/ui/AboutPage.tsx +27 -13
  96. package/src/about/ui/AboutSignIn.tsx +63 -0
  97. package/src/about/ui/AboutVersion.tsx +27 -9
  98. package/src/about/ui/index.ts +2 -2
  99. package/src/chrome/ui/NavEntry.tsx +41 -0
  100. package/src/chrome/ui/SiteHeader.tsx +15 -41
  101. package/src/core.ts +1 -0
  102. package/src/locales/de.json +11 -3
  103. package/src/locales/en.json +11 -3
  104. package/src/locales/es.json +11 -3
  105. package/src/locales/fr.json +11 -3
  106. package/src/locales/it.json +11 -3
  107. package/src/moleculesSources/core/index.ts +11 -0
  108. package/src/moleculesSources/core/moleculesSources.ts +102 -0
  109. package/src/moleculesSources/ui/MoleculesSourceBadge.tsx +44 -0
  110. package/src/moleculesSources/ui/SourceBadge.tsx +117 -0
  111. package/src/moleculesSources/ui/index.ts +6 -0
  112. package/src/moleculesSources/ui/useSourceLooks.ts +70 -0
  113. package/src/moleculesToken/core/index.ts +1 -0
  114. package/src/moleculesToken/core/tokenFix.ts +37 -0
  115. package/src/moleculesToken/ui/MoleculesTokenFix.tsx +95 -0
  116. package/src/moleculesToken/ui/MoleculesTokenTable.tsx +20 -94
  117. package/src/moleculesToken/ui/index.ts +2 -0
  118. package/src/moleculesToken/ui/tokenDetails.tsx +91 -0
  119. package/src/ui.ts +1 -0
  120. package/styles/chrome.css +159 -0
  121. package/lib/about/ui/AboutBuild.d.ts +0 -18
  122. package/lib/about/ui/AboutBuild.d.ts.map +0 -1
  123. package/lib/about/ui/AboutBuild.js +0 -37
  124. package/lib/about/ui/AboutBuild.js.map +0 -1
  125. package/src/about/ui/AboutBuild.tsx +0 -54
@@ -0,0 +1,53 @@
1
+ import { useSyncExternalStore } from 'react';
2
+ import { MOLECULES_URL, fetchSourceLooks } from "../core/moleculesSources.js";
3
+ /**
4
+ * Every source's look, read from molecules.cheminfo.org once per page however
5
+ * many badges ask for it.
6
+ * @param url - Where molecules answers.
7
+ * @returns The looks by lower-case name, or null until molecules has answered;
8
+ * an empty map when it could not be read, so the badges stop waiting and stay
9
+ * neutral.
10
+ */
11
+ export function useSourceLooks(url = MOLECULES_URL) {
12
+ const store = sourceLooksStore(url);
13
+ return useSyncExternalStore(store.subscribe, store.read, notYet);
14
+ }
15
+ /**
16
+ * The store behind {@link useSourceLooks}: one per address, read once.
17
+ * @param url - Where molecules answers.
18
+ * @returns The store.
19
+ */
20
+ export function sourceLooksStore(url) {
21
+ let store = STORES.get(url);
22
+ if (store === undefined) {
23
+ store = createStore(url);
24
+ STORES.set(url, store);
25
+ }
26
+ return store;
27
+ }
28
+ const STORES = new Map();
29
+ function createStore(url) {
30
+ let looks = null;
31
+ let started = false;
32
+ const listeners = new Set();
33
+ function settle(value) {
34
+ looks = value;
35
+ for (const listener of listeners)
36
+ listener();
37
+ }
38
+ return {
39
+ subscribe(listener) {
40
+ listeners.add(listener);
41
+ if (!started) {
42
+ started = true;
43
+ fetchSourceLooks({ url }).then(settle, () => settle(new Map()));
44
+ }
45
+ return () => listeners.delete(listener);
46
+ },
47
+ read: () => looks,
48
+ };
49
+ }
50
+ function notYet() {
51
+ return null;
52
+ }
53
+ //# sourceMappingURL=useSourceLooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSourceLooks.js","sourceRoot":"","sources":["../../../src/moleculesSources/ui/useSourceLooks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAC;AAG7C,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAE9E;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc,CAC5B,MAAc,aAAa;IAE3B,MAAM,KAAK,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;IACpC,OAAO,oBAAoB,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AACnE,CAAC;AAUD;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAW;IAC1C,IAAI,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC5B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;QACzB,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACzB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,MAAM,GAAG,IAAI,GAAG,EAA4B,CAAC;AAEnD,SAAS,WAAW,CAAC,GAAW;IAC9B,IAAI,KAAK,GAAuB,IAAI,CAAC;IACrC,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,MAAM,SAAS,GAAG,IAAI,GAAG,EAAc,CAAC;IAExC,SAAS,MAAM,CAAC,KAAkB;QAChC,KAAK,GAAG,KAAK,CAAC;QACd,KAAK,MAAM,QAAQ,IAAI,SAAS;YAAE,QAAQ,EAAE,CAAC;IAC/C,CAAC;IAED,OAAO;QACL,SAAS,CAAC,QAAQ;YAChB,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACxB,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,GAAG,IAAI,CAAC;gBACf,gBAAgB,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC;YAClE,CAAC;YACD,OAAO,GAAG,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC1C,CAAC;QACD,IAAI,EAAE,GAAG,EAAE,CAAC,KAAK;KAClB,CAAC;AACJ,CAAC;AAED,SAAS,MAAM;IACb,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -1,3 +1,4 @@
1
1
  export type { CheckMoleculesTokenOptions, MoleculesTokenCheck, MoleculesTokenToCheck, MoleculesTokenVerdict, } from './moleculesToken.ts';
2
2
  export { checkMoleculesToken, checkMoleculesTokens, publicTokenCheck, } from './moleculesToken.ts';
3
+ export { issueTokenCommand, tokensToFix } from './tokenFix.ts';
3
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/moleculesToken/core/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,0BAA0B,EAC1B,mBAAmB,EACnB,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/moleculesToken/core/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,0BAA0B,EAC1B,mBAAmB,EACnB,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC"}
@@ -1,2 +1,3 @@
1
1
  export { checkMoleculesToken, checkMoleculesTokens, publicTokenCheck, } from "./moleculesToken.js";
2
+ export { issueTokenCommand, tokensToFix } from "./tokenFix.js";
2
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/moleculesToken/core/index.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/moleculesToken/core/index.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC"}
@@ -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"}
@@ -19,12 +19,17 @@ export interface MoleculesTokenTableProps {
19
19
  * @default undefined
20
20
  */
21
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;
22
27
  }
23
28
  /**
24
29
  * The tokens a site holds for molecules.cheminfo.org, one row each, with what
25
30
  * molecules.cheminfo.org said of it when it was last checked: valid, another
26
31
  * source's, refused, not set. A token is changed in the server's `.env`, never
27
- * here, so the table says where.
32
+ * here, so the table says where, and above it how, when one has to be.
28
33
  * @param props - See {@link MoleculesTokenTableProps}.
29
34
  * @returns The table.
30
35
  */
@@ -1 +1 @@
1
- {"version":3,"file":"MoleculesTokenTable.d.ts","sourceRoot":"","sources":["../../../src/moleculesToken/ui/MoleculesTokenTable.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EACV,mBAAmB,EAEpB,MAAM,2BAA2B,CAAC;AAEnC,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;CAChB;AAwBD;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,wBAAwB,+BAgGlE"}
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"}
@@ -3,6 +3,9 @@ import { Button, Callout, HTMLTable, Tag } from '@blueprintjs/core';
3
3
  import { useMemo } from 'react';
4
4
  import { useLanguage } from "../../i18n/ui/useLanguage.js";
5
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";
6
9
  const INTENT = {
7
10
  ok: 'success',
8
11
  otherSource: 'danger',
@@ -26,12 +29,12 @@ const ISSUE_COMMAND = 'npm run tokens -- issue SOURCE EMAIL';
26
29
  * The tokens a site holds for molecules.cheminfo.org, one row each, with what
27
30
  * molecules.cheminfo.org said of it when it was last checked: valid, another
28
31
  * source's, refused, not set. A token is changed in the server's `.env`, never
29
- * here, so the table says where.
32
+ * here, so the table says where, and above it how, when one has to be.
30
33
  * @param props - See {@link MoleculesTokenTableProps}.
31
34
  * @returns The table.
32
35
  */
33
36
  export function MoleculesTokenTable(props) {
34
- const { checks, pending = false, onCheckAgain, error } = props;
37
+ const { checks, pending = false, onCheckAgain, error, moleculesUrl } = props;
35
38
  const t = useChromeT();
36
39
  const language = useLanguage();
37
40
  const formats = useMemo(() => ({
@@ -46,79 +49,8 @@ export function MoleculesTokenTable(props) {
46
49
  : Math.min(...checks.map((check) => check.checkedAt));
47
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', {
48
51
  when: formats.instant.format(checkedAt),
49
- }) })), 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("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
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
50
53
  ? t('moleculesToken.anySource')
51
- : formats.sources.format(check.sources) }), _jsx("td", { children: _jsx(Tag, { minimal: true, intent: INTENT[check.verdict], children: t(LABEL[check.verdict]) }) }), _jsx("td", { children: details(check, t, formats.instant) })] }, check.variable))) })] }) })), _jsxs("p", { className: "molecules-tokens__muted", children: [t('moleculesToken.howToChange'), " ", _jsx("code", { children: ISSUE_COMMAND })] })] }));
52
- }
53
- /**
54
- * What a row says besides its verdict.
55
- * @param check - The check.
56
- * @param t - The chrome's translator.
57
- * @param instant - How an instant is written.
58
- * @returns The cell's content.
59
- */
60
- function details(check, t, instant) {
61
- const hint = check.hint === null
62
- ? null
63
- : ['hint', _jsxs("code", { children: [check.hint, "\u2026"] }, "hint")];
64
- switch (check.verdict) {
65
- case 'ok':
66
- return facts([
67
- check.sources.length === 1 || check.source === null
68
- ? null
69
- : ['source', t('moleculesToken.forSource', { source: check.source })],
70
- check.issuedAt === null
71
- ? null
72
- : [
73
- 'issued',
74
- check.email === null
75
- ? t('moleculesToken.issued', {
76
- when: instant.format(check.issuedAt),
77
- })
78
- : t('moleculesToken.issuedTo', {
79
- email: check.email,
80
- when: instant.format(check.issuedAt),
81
- }),
82
- ],
83
- [
84
- 'used',
85
- check.lastUsedAt === null
86
- ? t('moleculesToken.neverUsed')
87
- : t('moleculesToken.lastUsed', {
88
- when: instant.format(check.lastUsedAt),
89
- }),
90
- ],
91
- hint,
92
- ]);
93
- case 'otherSource':
94
- return facts([
95
- [
96
- 'source',
97
- t('moleculesToken.otherSourceDetail', {
98
- source: check.source ?? '',
99
- }),
100
- ],
101
- hint,
102
- ]);
103
- case 'refused':
104
- return check.message ?? t('moleculesToken.refusedDetail');
105
- case 'unset':
106
- return t('moleculesToken.unsetDetail', { variable: check.variable });
107
- case 'uncheckable':
108
- return t('moleculesToken.uncheckableDetail');
109
- case 'unanswered':
110
- return check.message;
111
- default:
112
- return null;
113
- }
114
- }
115
- /**
116
- * Facts about a token, one after the other.
117
- * @param parts - The facts; null ones are left out.
118
- * @returns The facts, separated by a middle dot.
119
- */
120
- function facts(parts) {
121
- const shown = parts.filter((part) => part !== null);
122
- return shown.map(([key, content], index) => (_jsxs("span", { children: [index > 0 && ' · ', content] }, key)));
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 })] }))] }));
123
55
  }
124
56
  //# sourceMappingURL=MoleculesTokenTable.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MoleculesTokenTable.js","sourceRoot":"","sources":["../../../src/moleculesToken/ui/MoleculesTokenTable.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAEpE,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAGhC,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAE3D,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AA4BnD,MAAM,MAAM,GAA0C;IACpD,EAAE,EAAE,SAAS;IACb,WAAW,EAAE,QAAQ;IACrB,OAAO,EAAE,QAAQ;IACjB,KAAK,EAAE,SAAS;IAChB,WAAW,EAAE,SAAS;IACtB,UAAU,EAAE,SAAS;CACtB,CAAC;AAEF,2CAA2C;AAC3C,MAAM,KAAK,GAA6C;IACtD,EAAE,EAAE,2BAA2B;IAC/B,WAAW,EAAE,oCAAoC;IACjD,OAAO,EAAE,gCAAgC;IACzC,KAAK,EAAE,8BAA8B;IACrC,WAAW,EAAE,oCAAoC;IACjD,UAAU,EAAE,mCAAmC;CAChD,CAAC;AAEF,qEAAqE;AACrE,MAAM,aAAa,GAAG,sCAAsC,CAAC;AAE7D;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAA+B;IACjE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC;IAC/D,MAAM,CAAC,GAAG,UAAU,EAAE,CAAC;IACvB,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,MAAM,OAAO,GAAG,OAAO,CACrB,GAAG,EAAE,CAAC,CAAC;QACL,OAAO,EAAE,IAAI,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE;YACzC,SAAS,EAAE,QAAQ;YACnB,SAAS,EAAE,OAAO;SACnB,CAAC;QACF,OAAO,EAAE,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;KAChE,CAAC,EACF,CAAC,QAAQ,CAAC,CACX,CAAC;IACF,MAAM,SAAS,GACb,MAAM,KAAK,IAAI,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QACpC,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;IAE1D,OAAO,CACL,mBACE,SAAS,EAAC,kBAAkB,gBAChB,CAAC,CAAC,sBAAsB,CAAC,iBACzB,kBAAkB,aAE9B,eAAK,SAAS,EAAC,wBAAwB,aACrC,eAAM,SAAS,EAAC,yBAAyB,YACtC,CAAC,CAAC,sBAAsB,CAAC,GACrB,EACN,SAAS,KAAK,IAAI,IAAI,CACrB,eAAM,SAAS,EAAC,yBAAyB,YACtC,CAAC,CAAC,0BAA0B,EAAE;4BAC7B,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC;yBACxC,CAAC,GACG,CACR,EACA,YAAY,KAAK,SAAS,IAAI,CAC7B,KAAC,MAAM,IACL,IAAI,EAAC,OAAO,EACZ,OAAO,EAAC,SAAS,EACjB,IAAI,EAAC,SAAS,EACd,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,CAAC,CAAC,2BAA2B,CAAC,EACpC,OAAO,EAAE,YAAY,iBACT,wBAAwB,GACpC,CACH,IACG,EACL,KAAK,KAAK,SAAS,IAAI,CACtB,KAAC,OAAO,IAAC,OAAO,QAAC,MAAM,EAAC,QAAQ,YAC7B,KAAK,GACE,CACX,EACA,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,CACjB,YAAG,SAAS,EAAC,yBAAyB,YACnC,CAAC,CAAC,2BAA2B,CAAC,GAC7B,CACL,CAAC,CAAC,CAAC,CACF,cAAK,SAAS,EAAC,0BAA0B,YACvC,MAAC,SAAS,IAAC,OAAO,QAAC,OAAO,QAAC,SAAS,EAAC,yBAAyB,aAC5D,0BACE,yBACE,uBAAK,CAAC,CAAC,gCAAgC,CAAC,GAAM,EAC9C,uBAAK,CAAC,CAAC,8BAA8B,CAAC,GAAM,EAC5C,uBAAK,CAAC,CAAC,8BAA8B,CAAC,GAAM,EAC5C,uBAAK,CAAC,CAAC,+BAA+B,CAAC,GAAM,IAC1C,GACC,EACR,0BACG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CACrB,8BAAuC,KAAK,CAAC,OAAO,aAClD,uBACE,yBAAO,KAAK,CAAC,QAAQ,GAAQ,GAC1B,EACL,uBACG,KAAK,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC;4CACzB,CAAC,CAAC,CAAC,CAAC,0BAA0B,CAAC;4CAC/B,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,GACtC,EACL,uBACE,KAAC,GAAG,IAAC,OAAO,QAAC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,YACvC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GACpB,GACH,EACL,uBAAK,OAAO,CAAC,KAAK,EAAE,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,GAAM,KAdtC,KAAK,CAAC,QAAQ,CAelB,CACN,CAAC,GACI,IACE,GACR,CACP,EACD,aAAG,SAAS,EAAC,yBAAyB,aACnC,CAAC,CAAC,4BAA4B,CAAC,OAAE,yBAAO,aAAa,GAAQ,IAC5D,IACI,CACX,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,SAAS,OAAO,CACd,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"}
1
+ {"version":3,"file":"MoleculesTokenTable.js","sourceRoot":"","sources":["../../../src/moleculesToken/ui/MoleculesTokenTable.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AACpE,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAGhC,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAKnD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAElD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAyB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAoB,CAAC;AA6BlD,MAAM,MAAM,GAA0C;IACpD,EAAE,EAAE,SAAS;IACb,WAAW,EAAE,QAAQ;IACrB,OAAO,EAAE,QAAQ;IACjB,KAAK,EAAE,SAAS;IAChB,WAAW,EAAE,SAAS;IACtB,UAAU,EAAE,SAAS;CACtB,CAAC;AAEF,2CAA2C;AAC3C,MAAM,KAAK,GAA6C;IACtD,EAAE,EAAE,2BAA2B;IAC/B,WAAW,EAAE,oCAAoC;IACjD,OAAO,EAAE,gCAAgC;IACzC,KAAK,EAAE,8BAA8B;IACrC,WAAW,EAAE,oCAAoC;IACjD,UAAU,EAAE,mCAAmC;CAChD,CAAC;AAEF,qEAAqE;AACrE,MAAM,aAAa,GAAG,sCAAsC,CAAC;AAE7D;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAA+B;IACjE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,KAAK,CAAC;IAC7E,MAAM,CAAC,GAAG,UAAU,EAAE,CAAC;IACvB,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,MAAM,OAAO,GAAG,OAAO,CACrB,GAAG,EAAE,CAAC,CAAC;QACL,OAAO,EAAE,IAAI,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE;YACzC,SAAS,EAAE,QAAQ;YACnB,SAAS,EAAE,OAAO;SACnB,CAAC;QACF,OAAO,EAAE,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;KAChE,CAAC,EACF,CAAC,QAAQ,CAAC,CACX,CAAC;IACF,MAAM,SAAS,GACb,MAAM,KAAK,IAAI,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QACpC,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;IAE1D,OAAO,CACL,mBACE,SAAS,EAAC,kBAAkB,gBAChB,CAAC,CAAC,sBAAsB,CAAC,iBACzB,kBAAkB,aAE9B,eAAK,SAAS,EAAC,wBAAwB,aACrC,eAAM,SAAS,EAAC,yBAAyB,YACtC,CAAC,CAAC,sBAAsB,CAAC,GACrB,EACN,SAAS,KAAK,IAAI,IAAI,CACrB,eAAM,SAAS,EAAC,yBAAyB,YACtC,CAAC,CAAC,0BAA0B,EAAE;4BAC7B,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC;yBACxC,CAAC,GACG,CACR,EACA,YAAY,KAAK,SAAS,IAAI,CAC7B,KAAC,MAAM,IACL,IAAI,EAAC,OAAO,EACZ,OAAO,EAAC,SAAS,EACjB,IAAI,EAAC,SAAS,EACd,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,CAAC,CAAC,2BAA2B,CAAC,EACpC,OAAO,EAAE,YAAY,iBACT,wBAAwB,GACpC,CACH,IACG,EACL,KAAK,KAAK,SAAS,IAAI,CACtB,KAAC,OAAO,IAAC,OAAO,QAAC,MAAM,EAAC,QAAQ,YAC7B,KAAK,GACE,CACX,EACA,MAAM,KAAK,IAAI,IAAI,CAClB,KAAC,iBAAiB,IAAC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,YAAY,GAAI,CAClE,EACA,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,CACjB,YAAG,SAAS,EAAC,yBAAyB,YACnC,CAAC,CAAC,2BAA2B,CAAC,GAC7B,CACL,CAAC,CAAC,CAAC,CACF,cAAK,SAAS,EAAC,0BAA0B,YACvC,MAAC,SAAS,IAAC,OAAO,QAAC,OAAO,QAAC,SAAS,EAAC,yBAAyB,aAC5D,0BACE,yBACE,uBAAK,CAAC,CAAC,gCAAgC,CAAC,GAAM,EAC9C,uBAAK,CAAC,CAAC,8BAA8B,CAAC,GAAM,EAC5C,uBAAK,CAAC,CAAC,8BAA8B,CAAC,GAAM,EAC5C,uBAAK,CAAC,CAAC,+BAA+B,CAAC,GAAM,IAC1C,GACC,EACR,0BACG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CACrB,8BAAuC,KAAK,CAAC,OAAO,aAClD,uBACE,yBAAO,KAAK,CAAC,QAAQ,GAAQ,GAC1B,EACL,uBACG,KAAK,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC;4CACzB,CAAC,CAAC,CAAC,CAAC,0BAA0B,CAAC;4CAC/B,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,GACtC,EACL,uBACE,KAAC,GAAG,IAAC,OAAO,QAAC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,YACvC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GACpB,GACH,EACL,uBAAK,YAAY,CAAC,KAAK,EAAE,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,GAAM,KAd3C,KAAK,CAAC,QAAQ,CAelB,CACN,CAAC,GACI,IACE,GACR,CACP,EACA,CAAC,MAAM,KAAK,IAAI,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,IAAI,CACxD,aAAG,SAAS,EAAC,yBAAyB,aACnC,CAAC,CAAC,4BAA4B,CAAC,OAAE,yBAAO,aAAa,GAAQ,IAC5D,CACL,IACO,CACX,CAAC;AACJ,CAAC"}
@@ -1,3 +1,5 @@
1
+ export type { MoleculesTokenFixProps } from './MoleculesTokenFix.tsx';
2
+ export { MoleculesTokenFix } from './MoleculesTokenFix.tsx';
1
3
  export type { MoleculesTokenTableProps } from './MoleculesTokenTable.tsx';
2
4
  export { MoleculesTokenTable } from './MoleculesTokenTable.tsx';
3
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/moleculesToken/ui/index.ts"],"names":[],"mappings":"AAAA,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/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"}
@@ -1,2 +1,3 @@
1
+ export { MoleculesTokenFix } from "./MoleculesTokenFix.js";
1
2
  export { MoleculesTokenTable } from "./MoleculesTokenTable.js";
2
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/moleculesToken/ui/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA2B,CAAC"}
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,7 @@ 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';
21
22
  export * from './moleculesToken/ui/index.ts';
22
23
  export * from './number/ui/index.ts';
23
24
  export * from './overlay/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,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"}
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,7 @@ 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";
21
22
  export * from "./moleculesToken/ui/index.js";
22
23
  export * from "./number/ui/index.js";
23
24
  export * from "./overlay/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,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"}
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.59.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
+ }