react-cheminfo 0.39.0 → 0.40.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 (104) hide show
  1. package/bin/check-deploy.mjs +4 -2
  2. package/lib/deploy/core/checkDeploy.d.ts +3 -1
  3. package/lib/deploy/core/checkDeploy.d.ts.map +1 -1
  4. package/lib/deploy/core/checkDeploy.js +8 -2
  5. package/lib/deploy/core/checkDeploy.js.map +1 -1
  6. package/lib/deploy/core/index.d.ts +1 -0
  7. package/lib/deploy/core/index.d.ts.map +1 -1
  8. package/lib/deploy/core/index.js +1 -0
  9. package/lib/deploy/core/index.js.map +1 -1
  10. package/lib/deploy/core/publishedImage.d.ts +30 -0
  11. package/lib/deploy/core/publishedImage.d.ts.map +1 -0
  12. package/lib/deploy/core/publishedImage.js +96 -0
  13. package/lib/deploy/core/publishedImage.js.map +1 -0
  14. package/lib/deploy/core/types.d.ts +1 -1
  15. package/lib/deploy/core/types.d.ts.map +1 -1
  16. package/lib/deploy/core/types.js.map +1 -1
  17. package/lib/molecule3d/ui/Molecule3DToolbar.d.ts +9 -7
  18. package/lib/molecule3d/ui/Molecule3DToolbar.d.ts.map +1 -1
  19. package/lib/molecule3d/ui/Molecule3DToolbar.js +13 -8
  20. package/lib/molecule3d/ui/Molecule3DToolbar.js.map +1 -1
  21. package/lib/molecule3d/ui/MoleculeCanvas3D.js +1 -1
  22. package/lib/molecule3d/ui/MoleculeCanvas3D.js.map +1 -1
  23. package/lib/molecule3d/ui/camera.d.ts +0 -11
  24. package/lib/molecule3d/ui/camera.d.ts.map +1 -1
  25. package/lib/molecule3d/ui/camera.js +6 -80
  26. package/lib/molecule3d/ui/camera.js.map +1 -1
  27. package/lib/molecule3d/ui/exportMoleculeImage.d.ts +6 -2
  28. package/lib/molecule3d/ui/exportMoleculeImage.d.ts.map +1 -1
  29. package/lib/molecule3d/ui/exportMoleculeImage.js.map +1 -1
  30. package/lib/molecule3d/ui/index.d.ts +9 -0
  31. package/lib/molecule3d/ui/index.d.ts.map +1 -1
  32. package/lib/molecule3d/ui/index.js +5 -0
  33. package/lib/molecule3d/ui/index.js.map +1 -1
  34. package/lib/molecule3d/ui/measurements.d.ts +22 -2
  35. package/lib/molecule3d/ui/measurements.d.ts.map +1 -1
  36. package/lib/molecule3d/ui/measurements.js +25 -3
  37. package/lib/molecule3d/ui/measurements.js.map +1 -1
  38. package/lib/molecule3d/ui/useImageExport.d.ts +2 -2
  39. package/lib/molecule3d/ui/useImageExport.d.ts.map +1 -1
  40. package/lib/molecule3d/ui/useImageExport.js.map +1 -1
  41. package/lib/molecule3d/ui/viewer.d.ts.map +1 -1
  42. package/lib/molecule3d/ui/viewer.js +16 -49
  43. package/lib/molecule3d/ui/viewer.js.map +1 -1
  44. package/lib/molstar/core/camera.d.ts +37 -0
  45. package/lib/molstar/core/camera.d.ts.map +1 -0
  46. package/lib/molstar/core/camera.js +49 -0
  47. package/lib/molstar/core/camera.js.map +1 -0
  48. package/lib/molstar/core/cameraPose.d.ts +54 -0
  49. package/lib/molstar/core/cameraPose.d.ts.map +1 -0
  50. package/lib/molstar/core/cameraPose.js +78 -0
  51. package/lib/molstar/core/cameraPose.js.map +1 -0
  52. package/lib/molstar/core/hover.d.ts +49 -0
  53. package/lib/molstar/core/hover.d.ts.map +1 -0
  54. package/lib/molstar/core/hover.js +91 -0
  55. package/lib/molstar/core/hover.js.map +1 -0
  56. package/lib/molstar/core/index.d.ts +7 -0
  57. package/lib/molstar/core/index.d.ts.map +1 -0
  58. package/lib/molstar/core/index.js +5 -0
  59. package/lib/molstar/core/index.js.map +1 -0
  60. package/lib/molstar/core/plugin.d.ts +80 -0
  61. package/lib/molstar/core/plugin.d.ts.map +1 -0
  62. package/lib/molstar/core/plugin.js +125 -0
  63. package/lib/molstar/core/plugin.js.map +1 -0
  64. package/lib/molstar.d.ts +18 -0
  65. package/lib/molstar.d.ts.map +1 -0
  66. package/lib/molstar.js +17 -0
  67. package/lib/molstar.js.map +1 -0
  68. package/lib/share/ui/SharePreview.d.ts.map +1 -1
  69. package/lib/share/ui/SharePreview.js +25 -0
  70. package/lib/share/ui/SharePreview.js.map +1 -1
  71. package/lib/share/ui/useShareRegionReports.d.ts.map +1 -1
  72. package/lib/share/ui/useShareRegionReports.js +41 -12
  73. package/lib/share/ui/useShareRegionReports.js.map +1 -1
  74. package/lib/structure/ui/ConformerTable.d.ts +8 -0
  75. package/lib/structure/ui/ConformerTable.d.ts.map +1 -1
  76. package/lib/structure/ui/ConformerTable.js +24 -4
  77. package/lib/structure/ui/ConformerTable.js.map +1 -1
  78. package/package.json +2 -1
  79. package/src/deploy/core/checkDeploy.ts +14 -2
  80. package/src/deploy/core/index.ts +5 -0
  81. package/src/deploy/core/publishedImage.ts +110 -0
  82. package/src/deploy/core/types.ts +3 -1
  83. package/src/molecule3d/ui/Molecule3DToolbar.tsx +23 -16
  84. package/src/molecule3d/ui/MoleculeCanvas3D.tsx +1 -1
  85. package/src/molecule3d/ui/camera.ts +18 -93
  86. package/src/molecule3d/ui/exportMoleculeImage.ts +6 -2
  87. package/src/molecule3d/ui/index.ts +12 -0
  88. package/src/molecule3d/ui/measurements.ts +42 -3
  89. package/src/molecule3d/ui/useImageExport.ts +2 -2
  90. package/src/molecule3d/ui/viewer.ts +21 -51
  91. package/src/molstar/core/camera.ts +61 -0
  92. package/src/molstar/core/cameraPose.ts +126 -0
  93. package/src/molstar/core/hover.ts +109 -0
  94. package/src/molstar/core/index.ts +13 -0
  95. package/src/molstar/core/plugin.ts +159 -0
  96. package/src/molstar.ts +22 -0
  97. package/src/share/ui/SharePreview.tsx +31 -0
  98. package/src/share/ui/useShareRegionReports.ts +39 -15
  99. package/src/structure/ui/ConformerTable.tsx +38 -4
  100. package/lib/molecule3d/ui/viewerSpec.d.ts +0 -17
  101. package/lib/molecule3d/ui/viewerSpec.d.ts.map +0 -1
  102. package/lib/molecule3d/ui/viewerSpec.js +0 -34
  103. package/lib/molecule3d/ui/viewerSpec.js.map +0 -1
  104. package/src/molecule3d/ui/viewerSpec.ts +0 -38
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
  /*
3
3
  * Report every way a repository would break, or silently mis-deploy, under the
4
- * server's global deploy script: a compose file it would not find, an image with
5
- * no selectable tag, a page the browser keeps across a deploy and then cannot
4
+ * server's global deploy script: a compose file it would not find, an image
5
+ * nothing publishes or that carries no selectable tag, a page the browser keeps across a deploy and then cannot
6
6
  * run, an `IMAGE_NAME` naming a package this repository never publishes, an
7
7
  * `env_file` that fails on a checkout with no `.env` yet, a service with no
8
8
  * health probe to read, an `.env.example` that hides a mode.
@@ -26,6 +26,7 @@ import process from 'node:process';
26
26
 
27
27
  import {
28
28
  DEPLOY_COMPOSE_FILES,
29
+ DOCKER_IMAGE_WORKFLOW,
29
30
  NGINX_CONFIG,
30
31
  PAGE_CACHE_CONFIG,
31
32
  findDeployProblems,
@@ -77,6 +78,7 @@ for (const path of [
77
78
  'Dockerfile',
78
79
  PAGE_CACHE_CONFIG,
79
80
  NGINX_CONFIG,
81
+ DOCKER_IMAGE_WORKFLOW,
80
82
  ]) {
81
83
  const text = read(path);
82
84
  if (text !== undefined) files.push({ path, text });
@@ -8,7 +8,9 @@ import type { CheckDeployOptions, DeployFile, DeployProblem } from './types.ts';
8
8
  * reports it healthy. So a repository has to hand it a selectable tag on every
9
9
  * image we build, an `IMAGE_NAME` that names the package our own workflow
10
10
  * publishes, a compose file that parses on a checkout with no `.env` yet, and a
11
- * health probe to read. It also has to hand the browser a page the browser will
11
+ * health probe to read. It also has to publish that image in the first place:
12
+ * with no `latest` to pull the script builds from source on the deploy host,
13
+ * and the install that follows must survive a blip in the registry. It also has to hand the browser a page the browser will
12
14
  * not keep, or the next deploy leaves returning visitors on a blank one. Each
13
15
  * of those is invisible until a deploy, which is the
14
16
  * worst moment to discover it — an `env_file` without `required: false` fails
@@ -1 +1 @@
1
- {"version":3,"file":"checkDeploy.d.ts","sourceRoot":"","sources":["../../../src/deploy/core/checkDeploy.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAGhF;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,SAAS,UAAU,EAAE,EAC5B,OAAO,GAAE,kBAAuB,GAC/B,aAAa,EAAE,CA6DjB"}
1
+ {"version":3,"file":"checkDeploy.d.ts","sourceRoot":"","sources":["../../../src/deploy/core/checkDeploy.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,kBAAkB,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAGhF;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,SAAS,UAAU,EAAE,EAC5B,OAAO,GAAE,kBAAuB,GAC/B,aAAa,EAAE,CAkEjB"}
@@ -1,6 +1,7 @@
1
1
  import { readComposeFile } from "./composeFile.js";
2
2
  import { readEnvExample } from "./envExample.js";
3
3
  import { readPageCache } from "./pageCache.js";
4
+ import { DOCKER_IMAGE_WORKFLOW, readInstallRetries, readPublishedImage, } from "./publishedImage.js";
4
5
  import { DEPLOY_COMPOSE_FILES } from "./types.js";
5
6
  /**
6
7
  * Every way a repository would break, or silently mis-deploy, under the
@@ -11,7 +12,9 @@ import { DEPLOY_COMPOSE_FILES } from "./types.js";
11
12
  * reports it healthy. So a repository has to hand it a selectable tag on every
12
13
  * image we build, an `IMAGE_NAME` that names the package our own workflow
13
14
  * publishes, a compose file that parses on a checkout with no `.env` yet, and a
14
- * health probe to read. It also has to hand the browser a page the browser will
15
+ * health probe to read. It also has to publish that image in the first place:
16
+ * with no `latest` to pull the script builds from source on the deploy host,
17
+ * and the install that follows must survive a blip in the registry. It also has to hand the browser a page the browser will
15
18
  * not keep, or the next deploy leaves returning visitors on a blank one. Each
16
19
  * of those is invisible until a deploy, which is the
17
20
  * worst moment to discover it — an `env_file` without `required: false` fails
@@ -63,8 +66,11 @@ export function findDeployProblems(files, options = {}) {
63
66
  readEnvExample(envExample, expected, problems);
64
67
  }
65
68
  const dockerfile = byPath.get('Dockerfile');
66
- if (dockerfile !== undefined)
69
+ if (dockerfile !== undefined) {
67
70
  readPageCache(dockerfile, byPath, problems);
71
+ readInstallRetries(dockerfile, problems);
72
+ }
73
+ readPublishedImage(byPath.get(DOCKER_IMAGE_WORKFLOW), problems);
68
74
  const gitignore = byPath.get('.gitignore');
69
75
  if (gitignore === undefined || !/^\s*\/?\.deploy\/?\s*$/m.test(gitignore)) {
70
76
  problems.push({
@@ -1 +1 @@
1
- {"version":3,"file":"checkDeploy.js","sourceRoot":"","sources":["../../../src/deploy/core/checkDeploy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAElD;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,kBAAkB,CAChC,KAA4B,EAC5B,UAA8B,EAAE;IAEhC,MAAM,QAAQ,GAAG,OAAO,CAAC,YAAY,IAAI,oBAAoB,CAAC;IAC9D,MAAM,KAAK,GAAG;QACZ,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,aAAa,EAAE,OAAO,CAAC,aAAa,IAAI,EAAE;QAC1C,kBAAkB,EAAE,OAAO,CAAC,kBAAkB,IAAI,IAAI;QACtD,iBAAiB,EAAE,CACjB,OAAO,CAAC,iBAAiB,IAAI,gBAAgB,CAC9C,CAAC,WAAW,EAAE;QACf,SAAS,EAAE,CAAC,OAAO,CAAC,SAAS,IAAI,QAAQ,CAAC,CAAC,WAAW,EAAE;KACzD,CAAC;IAEF,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IACzC,KAAK,MAAM,IAAI,IAAI,KAAK;QAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IAE3D,MAAM,QAAQ,GAAoB,EAAE,CAAC;IAErC,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC9B,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,QAAQ,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,IAAI;gBACV,IAAI,EAAE,CAAC;gBACP,IAAI,EAAE,iBAAiB;gBACvB,OAAO,EAAE,8CAA8C;gBACvD,IAAI,EAAE,UAAU,IAAI,yBAAyB;aAC9C,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAC9C,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC7B,QAAQ,CAAC,IAAI,CAAC;YACZ,IAAI,EAAE,cAAc;YACpB,IAAI,EAAE,CAAC;YACP,IAAI,EAAE,qBAAqB;YAC3B,OAAO,EAAE,8CAA8C;YACvD,IAAI,EAAE,kFAAkF;SACzF,CAAC,CAAC;IACL,CAAC;SAAM,CAAC;QACN,cAAc,CAAC,UAAU,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACjD,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAC5C,IAAI,UAAU,KAAK,SAAS;QAAE,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IAE1E,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAC3C,IAAI,SAAS,KAAK,SAAS,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QAC1E,QAAQ,CAAC,IAAI,CAAC;YACZ,IAAI,EAAE,YAAY;YAClB,IAAI,EAAE,CAAC;YACP,IAAI,EAAE,uBAAuB;YAC7B,OAAO,EACL,8EAA8E;YAChF,IAAI,EAAE,kCAAkC;SACzC,CAAC,CAAC;IACL,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC"}
1
+ {"version":3,"file":"checkDeploy.js","sourceRoot":"","sources":["../../../src/deploy/core/checkDeploy.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  export { findDeployProblems } from './checkDeploy.ts';
2
2
  export type { CheckDeployOptions, DeployFile, DeployProblem, DeployProblemKind, } from './types.ts';
3
3
  export { NGINX_CONFIG, PAGE_CACHE_CONFIG } from './pageCache.ts';
4
+ export { DOCKER_IMAGE_WORKFLOW, readInstallRetries, readPublishedImage, } from './publishedImage.ts';
4
5
  export { DEPLOY_COMPOSE_FILES } from './types.ts';
5
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/deploy/core/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,YAAY,EACV,kBAAkB,EAClB,UAAU,EACV,aAAa,EACb,iBAAiB,GAClB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/deploy/core/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,YAAY,EACV,kBAAkB,EAClB,UAAU,EACV,aAAa,EACb,iBAAiB,GAClB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACjE,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC"}
@@ -1,4 +1,5 @@
1
1
  export { findDeployProblems } from "./checkDeploy.js";
2
2
  export { NGINX_CONFIG, PAGE_CACHE_CONFIG } from "./pageCache.js";
3
+ export { DOCKER_IMAGE_WORKFLOW, readInstallRetries, readPublishedImage, } from "./publishedImage.js";
3
4
  export { DEPLOY_COMPOSE_FILES } from "./types.js";
4
5
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/deploy/core/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAOtD,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/deploy/core/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAOtD,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACjE,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,30 @@
1
+ import type { DeployProblem } from './types.ts';
2
+ /** The workflow that publishes this repository's image, at its fixed path. */
3
+ export declare const DOCKER_IMAGE_WORKFLOW = ".github/workflows/docker-image.yml";
4
+ /**
5
+ * Report a repository whose image is never published with a `latest` tag.
6
+ *
7
+ * The shared workflow derives `:<version>`, `:<major>.<minor>`, `:<major>` and
8
+ * `:latest` from `tag-version` alone; given nothing it publishes a single
9
+ * `:HEAD` and no `latest`. Compose files default to `${IMAGE_TAG:-latest}`, so
10
+ * the deploy then has nothing to pull and builds the image on the deploy host
11
+ * instead — which is how a registry blip, a build timeout or an out-of-memory
12
+ * kill becomes an outage, reported against npm rather than against the missing
13
+ * tag. The workflow, the release and the push all succeed, so nothing says so.
14
+ * @param workflow - The docker-image workflow, or undefined when there is none.
15
+ * @param problems - Where each problem found is appended.
16
+ */
17
+ export declare function readPublishedImage(workflow: string | undefined, problems: DeployProblem[]): void;
18
+ /**
19
+ * Report a build stage that installs with npm's own patience.
20
+ *
21
+ * A deploy with no image to pull builds from source on the deploy host, so the
22
+ * whole dependency closure comes over the network at the one moment nothing may
23
+ * fail. npm's two default retries are capped at a minute and spent in under
24
+ * twenty seconds, which is short enough that an ordinary blip reads as a broken
25
+ * repository — so each stage that installs says how long it is willing to try.
26
+ * @param dockerfile - The Dockerfile.
27
+ * @param problems - Where each problem found is appended.
28
+ */
29
+ export declare function readInstallRetries(dockerfile: string, problems: DeployProblem[]): void;
30
+ //# sourceMappingURL=publishedImage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publishedImage.d.ts","sourceRoot":"","sources":["../../../src/deploy/core/publishedImage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,8EAA8E;AAC9E,eAAO,MAAM,qBAAqB,uCAAuC,CAAC;AAS1E;;;;;;;;;;;;GAYG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,QAAQ,EAAE,aAAa,EAAE,GACxB,IAAI,CAqCN;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,aAAa,EAAE,GACxB,IAAI,CAsBN"}
@@ -0,0 +1,96 @@
1
+ /** The workflow that publishes this repository's image, at its fixed path. */
2
+ export const DOCKER_IMAGE_WORKFLOW = '.github/workflows/docker-image.yml';
3
+ const TAG_VERSION = /^\s*tag-version:\s*(?<value>.+?)\s*$/m;
4
+ const INSTALL = /^\s*RUN\s+npm\s+ci\b/;
5
+ const RETRIES = /^\s*ENV\s+.*\bNPM_CONFIG_FETCH_RETRIES=/;
6
+ const STAGE = /^\s*FROM\s+/i;
7
+ // Written with an escaped brace so it is not read as an interpolation here.
8
+ const GUARDED = `\${{ github.event_name == 'push' && github.ref_name || '' }}`;
9
+ /**
10
+ * Report a repository whose image is never published with a `latest` tag.
11
+ *
12
+ * The shared workflow derives `:<version>`, `:<major>.<minor>`, `:<major>` and
13
+ * `:latest` from `tag-version` alone; given nothing it publishes a single
14
+ * `:HEAD` and no `latest`. Compose files default to `${IMAGE_TAG:-latest}`, so
15
+ * the deploy then has nothing to pull and builds the image on the deploy host
16
+ * instead — which is how a registry blip, a build timeout or an out-of-memory
17
+ * kill becomes an outage, reported against npm rather than against the missing
18
+ * tag. The workflow, the release and the push all succeed, so nothing says so.
19
+ * @param workflow - The docker-image workflow, or undefined when there is none.
20
+ * @param problems - Where each problem found is appended.
21
+ */
22
+ export function readPublishedImage(workflow, problems) {
23
+ if (workflow === undefined) {
24
+ problems.push({
25
+ file: DOCKER_IMAGE_WORKFLOW,
26
+ line: 0,
27
+ kind: 'unpublishable-image',
28
+ message: 'nothing publishes an image, so every deploy builds one on the server',
29
+ hint: 'add docker-image.yml, calling the shared workflow on a v* tag with a guarded tag-version',
30
+ });
31
+ return;
32
+ }
33
+ const match = TAG_VERSION.exec(workflow);
34
+ if (match?.groups === undefined) {
35
+ problems.push({
36
+ file: DOCKER_IMAGE_WORKFLOW,
37
+ line: lineOf(workflow, /docker-image\.yml@docker-image/),
38
+ kind: 'unpublishable-image',
39
+ message: 'no tag-version, so the package gets a single :HEAD and no :latest for a compose file to pull',
40
+ hint: `with: tag-version: ${GUARDED}`,
41
+ });
42
+ return;
43
+ }
44
+ const value = match.groups.value ?? '';
45
+ if (value.includes('github.ref_name') && !value.includes('event_name')) {
46
+ problems.push({
47
+ file: DOCKER_IMAGE_WORKFLOW,
48
+ line: lineOf(workflow, TAG_VERSION),
49
+ kind: 'unpublishable-image',
50
+ message: 'tag-version is the bare ref, which on a manual run is a branch name split as if it were a semver',
51
+ hint: `guard it: ${GUARDED}`,
52
+ });
53
+ }
54
+ }
55
+ /**
56
+ * Report a build stage that installs with npm's own patience.
57
+ *
58
+ * A deploy with no image to pull builds from source on the deploy host, so the
59
+ * whole dependency closure comes over the network at the one moment nothing may
60
+ * fail. npm's two default retries are capped at a minute and spent in under
61
+ * twenty seconds, which is short enough that an ordinary blip reads as a broken
62
+ * repository — so each stage that installs says how long it is willing to try.
63
+ * @param dockerfile - The Dockerfile.
64
+ * @param problems - Where each problem found is appended.
65
+ */
66
+ export function readInstallRetries(dockerfile, problems) {
67
+ const lines = dockerfile.split('\n');
68
+ let patient = false;
69
+ for (let index = 0; index < lines.length; index++) {
70
+ const line = lines[index] ?? '';
71
+ // ENV does not cross a FROM, so each stage answers for itself.
72
+ if (STAGE.test(line)) {
73
+ patient = false;
74
+ }
75
+ else if (RETRIES.test(line)) {
76
+ patient = true;
77
+ }
78
+ else if (INSTALL.test(line) && !patient) {
79
+ problems.push({
80
+ file: 'Dockerfile',
81
+ line: index + 1,
82
+ kind: 'brittle-install',
83
+ message: "npm ci installs with npm's two default retries, so a network blip of twenty seconds fails the deploy",
84
+ hint: 'ENV NPM_CONFIG_FETCH_RETRIES=5 NPM_CONFIG_FETCH_RETRY_MAXTIMEOUT=120000 above it, in this stage',
85
+ });
86
+ patient = true;
87
+ }
88
+ }
89
+ }
90
+ function lineOf(text, pattern) {
91
+ const match = pattern.exec(text);
92
+ if (match === null)
93
+ return 0;
94
+ return text.slice(0, match.index).split('\n').length;
95
+ }
96
+ //# sourceMappingURL=publishedImage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publishedImage.js","sourceRoot":"","sources":["../../../src/deploy/core/publishedImage.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  /** What a repository got wrong against the deployment contract. */
2
- export type DeployProblemKind = 'missing-compose' | 'invalid-compose' | 'unpinned-image' | 'missing-build' | 'wrong-image-name' | 'required-env-file' | 'floating-sidecar' | 'missing-healthcheck' | 'missing-env-example' | 'missing-deploy-ignore' | 'cacheable-page';
2
+ export type DeployProblemKind = 'missing-compose' | 'invalid-compose' | 'unpinned-image' | 'missing-build' | 'wrong-image-name' | 'required-env-file' | 'floating-sidecar' | 'missing-healthcheck' | 'missing-env-example' | 'missing-deploy-ignore' | 'cacheable-page' | 'unpublishable-image' | 'brittle-install';
3
3
  /** One way a repository would fail, or silently mis-deploy, on the server. */
4
4
  export interface DeployProblem {
5
5
  /** The file it was found in, named as the caller named it. */
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/deploy/core/types.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,MAAM,MAAM,iBAAiB,GACzB,iBAAiB,GACjB,iBAAiB,GACjB,gBAAgB,GAChB,eAAe,GACf,kBAAkB,GAClB,mBAAmB,GACnB,kBAAkB,GAClB,qBAAqB,GACrB,qBAAqB,GACrB,uBAAuB,GACvB,gBAAgB,CAAC;AAErB,8EAA8E;AAC9E,MAAM,WAAW,aAAa;IAC5B,8DAA8D;IAC9D,IAAI,EAAE,MAAM,CAAC;IACb,6EAA6E;IAC7E,IAAI,EAAE,MAAM,CAAC;IACb,kCAAkC;IAClC,IAAI,EAAE,iBAAiB,CAAC;IACxB,kCAAkC;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,0CAA0C;IAC1C,IAAI,EAAE,MAAM,CAAC;CACd;AAED,sEAAsE;AACtE,MAAM,WAAW,UAAU;IACzB,iDAAiD;IACjD,IAAI,EAAE,MAAM,CAAC;IACb,mBAAmB;IACnB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,4CAA4C;AAC5C,MAAM,WAAW,kBAAkB;IACjC;;;;;OAKG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC;;;;OAIG;IACH,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;;;;OAKG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,eAAO,MAAM,oBAAoB,EAAE,SAAS,MAAM,EAIjD,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/deploy/core/types.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,MAAM,MAAM,iBAAiB,GACzB,iBAAiB,GACjB,iBAAiB,GACjB,gBAAgB,GAChB,eAAe,GACf,kBAAkB,GAClB,mBAAmB,GACnB,kBAAkB,GAClB,qBAAqB,GACrB,qBAAqB,GACrB,uBAAuB,GACvB,gBAAgB,GAChB,qBAAqB,GACrB,iBAAiB,CAAC;AAEtB,8EAA8E;AAC9E,MAAM,WAAW,aAAa;IAC5B,8DAA8D;IAC9D,IAAI,EAAE,MAAM,CAAC;IACb,6EAA6E;IAC7E,IAAI,EAAE,MAAM,CAAC;IACb,kCAAkC;IAClC,IAAI,EAAE,iBAAiB,CAAC;IACxB,kCAAkC;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,0CAA0C;IAC1C,IAAI,EAAE,MAAM,CAAC;CACd;AAED,sEAAsE;AACtE,MAAM,WAAW,UAAU;IACzB,iDAAiD;IACjD,IAAI,EAAE,MAAM,CAAC;IACb,mBAAmB;IACnB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,4CAA4C;AAC5C,MAAM,WAAW,kBAAkB;IACjC;;;;;OAKG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC;;;;OAIG;IACH,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;;;;OAKG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,eAAO,MAAM,oBAAoB,EAAE,SAAS,MAAM,EAIjD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/deploy/core/types.ts"],"names":[],"mappings":"AA+EA;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAsB;IACrD,cAAc;IACd,sBAAsB;IACtB,0BAA0B;CAC3B,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/deploy/core/types.ts"],"names":[],"mappings":"AAiFA;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAsB;IACrD,cAAc;IACd,sBAAsB;IACtB,0BAA0B;CAC3B,CAAC"}
@@ -9,20 +9,22 @@ import type { MeasurementKind } from '../core/measurement.ts';
9
9
  import type { Molecule3DTools } from '../core/settings.ts';
10
10
  /** Props of {@link Molecule3DToolbar}. */
11
11
  export interface Molecule3DToolbarProps {
12
- tools: Molecule3DTools;
12
+ /** Which tools to show; every one it does not name is on. */
13
+ tools?: Partial<Molecule3DTools>;
13
14
  measureKind: MeasurementKind | null;
14
15
  onMeasureKindChange: (kind: MeasurementKind | null) => void;
15
16
  measurementCount: number;
16
17
  onClearMeasurements: () => void;
17
18
  spinning: boolean;
18
19
  onSpinningChange: (spinning: boolean) => void;
19
- showSurface: boolean;
20
- onShowSurfaceChange: (showSurface: boolean) => void;
20
+ /** Whether the molecular surface is drawn; its tool is left out without a handler. */
21
+ showSurface?: boolean;
22
+ onShowSurfaceChange?: (showSurface: boolean) => void;
21
23
  onResetView: () => void;
22
- /** Content of the options popover. */
23
- options: ReactElement;
24
- /** Content of the export popover. */
25
- exportPanel: ReactElement;
24
+ /** Content of the options popover; its tool is left out without one. */
25
+ options?: ReactElement;
26
+ /** Content of the export popover; its tool is left out without one. */
27
+ exportPanel?: ReactElement;
26
28
  }
27
29
  /**
28
30
  * The two toolbars; either is left out when none of its tools is on.
@@ -1 +1 @@
1
- {"version":3,"file":"Molecule3DToolbar.d.ts","sourceRoot":"","sources":["../../../src/molecule3d/ui/Molecule3DToolbar.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAiB,YAAY,EAAE,MAAM,OAAO,CAAC;AAIzD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAM9D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAS3D,0CAA0C;AAC1C,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,eAAe,CAAC;IACvB,WAAW,EAAE,eAAe,GAAG,IAAI,CAAC;IACpC,mBAAmB,EAAE,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI,KAAK,IAAI,CAAC;IAC5D,gBAAgB,EAAE,MAAM,CAAC;IACzB,mBAAmB,EAAE,MAAM,IAAI,CAAC;IAChC,QAAQ,EAAE,OAAO,CAAC;IAClB,gBAAgB,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC;IAC9C,WAAW,EAAE,OAAO,CAAC;IACrB,mBAAmB,EAAE,CAAC,WAAW,EAAE,OAAO,KAAK,IAAI,CAAC;IACpD,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,sCAAsC;IACtC,OAAO,EAAE,YAAY,CAAC;IACtB,qCAAqC;IACrC,WAAW,EAAE,YAAY,CAAC;CAC3B;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,sBAAsB,GAAG,YAAY,CA2I7E"}
1
+ {"version":3,"file":"Molecule3DToolbar.d.ts","sourceRoot":"","sources":["../../../src/molecule3d/ui/Molecule3DToolbar.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAiB,YAAY,EAAE,MAAM,OAAO,CAAC;AAIzD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAM9D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAU3D,0CAA0C;AAC1C,MAAM,WAAW,sBAAsB;IACrC,6DAA6D;IAC7D,KAAK,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;IACjC,WAAW,EAAE,eAAe,GAAG,IAAI,CAAC;IACpC,mBAAmB,EAAE,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI,KAAK,IAAI,CAAC;IAC5D,gBAAgB,EAAE,MAAM,CAAC;IACzB,mBAAmB,EAAE,MAAM,IAAI,CAAC;IAChC,QAAQ,EAAE,OAAO,CAAC;IAClB,gBAAgB,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC;IAC9C,sFAAsF;IACtF,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,mBAAmB,CAAC,EAAE,CAAC,WAAW,EAAE,OAAO,KAAK,IAAI,CAAC;IACrD,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,wEAAwE;IACxE,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,uEAAuE;IACvE,WAAW,CAAC,EAAE,YAAY,CAAC;CAC5B;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,sBAAsB,GAAG,YAAY,CA+I7E"}
@@ -9,6 +9,7 @@ import { Card } from '@blueprintjs/core';
9
9
  import { Toolbar } from 'react-science/ui';
10
10
  import { useChromeT } from "../../i18n/ui/useT.js";
11
11
  import { MEASUREMENT_ATOM_COUNTS, MEASUREMENT_KINDS, MEASUREMENT_LABELS, } from "../core/measurement.js";
12
+ import { resolveMolecule3DTools } from "../core/settings.js";
12
13
  import { Molecule3DHelp } from "./Molecule3DHelp.js";
13
14
  import { ClearMeasurementsIcon, MeasureIcon, SurfaceIcon, } from "./molecule3dIcons.js";
14
15
  /**
@@ -17,24 +18,28 @@ import { ClearMeasurementsIcon, MeasureIcon, SurfaceIcon, } from "./molecule3dIc
17
18
  * @returns The toolbars, stacked.
18
19
  */
19
20
  export function Molecule3DToolbar(props) {
20
- const { tools, measureKind, onMeasureKindChange, measurementCount, onClearMeasurements, spinning, onSpinningChange, showSurface, onShowSurfaceChange, onResetView, options, exportPanel, } = props;
21
+ const { tools: toolsProp, measureKind, onMeasureKindChange, measurementCount, onClearMeasurements, spinning, onSpinningChange, showSurface, onShowSurfaceChange, onResetView, options, exportPanel, } = props;
21
22
  const t = useChromeT();
23
+ const tools = resolveMolecule3DTools(toolsProp);
24
+ const showOptions = tools.options && options !== undefined;
25
+ const showSurfaceTool = tools.surface && onShowSurfaceChange !== undefined;
26
+ const showExport = tools.export && exportPanel !== undefined;
22
27
  const hasView = tools.spin ||
23
28
  tools.surface ||
24
29
  tools.reset ||
25
- tools.options ||
26
- tools.export ||
30
+ showOptions ||
31
+ showExport ||
27
32
  tools.help;
28
- return (_jsxs("div", { style: COLUMN_STYLE, children: [hasView && (_jsx(Card, { elevation: 1, style: CARD_STYLE, children: _jsxs(Toolbar, { vertical: true, "aria-label": t('molecule3d.view'), children: [tools.reset && (_jsx(Toolbar.Item, { icon: "zoom-to-fit", "aria-label": t('molecule3d.resetView'), tooltip: t('molecule3d.resetView'), tooltipProps: TOOLTIP_PROPS, onClick: onResetView })), tools.spin && (_jsx(Toolbar.Item, { icon: "refresh", active: spinning, "aria-label": t('molecule3d.spin'), tooltip: t('molecule3d.spin'), tooltipProps: TOOLTIP_PROPS, onClick: () => {
33
+ return (_jsxs("div", { className: "no-print", style: COLUMN_STYLE, children: [hasView && (_jsx(Card, { elevation: 1, style: CARD_STYLE, children: _jsxs(Toolbar, { vertical: true, "aria-label": t('molecule3d.view'), children: [tools.reset && (_jsx(Toolbar.Item, { icon: "zoom-to-fit", "aria-label": t('molecule3d.resetView'), tooltip: t('molecule3d.resetView'), tooltipProps: TOOLTIP_PROPS, onClick: onResetView })), tools.spin && (_jsx(Toolbar.Item, { icon: "refresh", active: spinning, "aria-label": t('molecule3d.spin'), tooltip: t('molecule3d.spin'), tooltipProps: TOOLTIP_PROPS, onClick: () => {
29
34
  onSpinningChange(!spinning);
30
- } })), tools.surface && (_jsx(Toolbar.Item, { icon: _jsx(SurfaceIcon, {}), active: showSurface, "aria-label": t('molecule3d.surface'), tooltip: t('molecule3d.molecularSurface'), tooltipProps: TOOLTIP_PROPS, onClick: () => {
31
- onShowSurfaceChange(!showSurface);
32
- } })), tools.options && (_jsx(Toolbar.PopoverItem, { placement: "right-start", content: options, itemProps: {
35
+ } })), showSurfaceTool && (_jsx(Toolbar.Item, { icon: _jsx(SurfaceIcon, {}), active: showSurface ?? false, "aria-label": t('molecule3d.surface'), tooltip: t('molecule3d.molecularSurface'), tooltipProps: TOOLTIP_PROPS, onClick: () => {
36
+ onShowSurfaceChange(showSurface !== true);
37
+ } })), showOptions && (_jsx(Toolbar.PopoverItem, { placement: "right-start", content: options, itemProps: {
33
38
  icon: 'cog',
34
39
  'aria-label': t('molecule3d.displayOptions'),
35
40
  tooltip: t('molecule3d.displayOptions'),
36
41
  tooltipProps: TOOLTIP_PROPS,
37
- } })), tools.export && (_jsx(Toolbar.PopoverItem, { placement: "right-start", content: exportPanel, itemProps: {
42
+ } })), showExport && (_jsx(Toolbar.PopoverItem, { placement: "right-start", content: exportPanel, itemProps: {
38
43
  icon: 'download',
39
44
  'aria-label': t('molecule3d.exportImage'),
40
45
  tooltip: t('molecule3d.exportImage'),
@@ -1 +1 @@
1
- {"version":3,"file":"Molecule3DToolbar.js","sourceRoot":"","sources":["../../../src/molecule3d/ui/Molecule3DToolbar.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Molecule3DToolbar.js","sourceRoot":"","sources":["../../../src/molecule3d/ui/Molecule3DToolbar.tsx"],"names":[],"mappings":";AAAA;;;;;GAKG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAEzC,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAE3C,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEnD,OAAO,EACL,uBAAuB,EACvB,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAE7D,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAsB,CAAC;AACtD,OAAO,EACL,qBAAqB,EACrB,WAAW,EACX,WAAW,GACZ,MAAM,sBAAuB,CAAC;AAsB/B;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAA6B;IAC7D,MAAM,EACJ,KAAK,EAAE,SAAS,EAChB,WAAW,EACX,mBAAmB,EACnB,gBAAgB,EAChB,mBAAmB,EACnB,QAAQ,EACR,gBAAgB,EAChB,WAAW,EACX,mBAAmB,EACnB,WAAW,EACX,OAAO,EACP,WAAW,GACZ,GAAG,KAAK,CAAC;IACV,MAAM,CAAC,GAAG,UAAU,EAAE,CAAC;IACvB,MAAM,KAAK,GAAG,sBAAsB,CAAC,SAAS,CAAC,CAAC;IAChD,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,IAAI,OAAO,KAAK,SAAS,CAAC;IAC3D,MAAM,eAAe,GAAG,KAAK,CAAC,OAAO,IAAI,mBAAmB,KAAK,SAAS,CAAC;IAC3E,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,IAAI,WAAW,KAAK,SAAS,CAAC;IAC7D,MAAM,OAAO,GACX,KAAK,CAAC,IAAI;QACV,KAAK,CAAC,OAAO;QACb,KAAK,CAAC,KAAK;QACX,WAAW;QACX,UAAU;QACV,KAAK,CAAC,IAAI,CAAC;IAEb,OAAO,CACL,eAAK,SAAS,EAAC,UAAU,EAAC,KAAK,EAAE,YAAY,aAC1C,OAAO,IAAI,CACV,KAAC,IAAI,IAAC,SAAS,EAAE,CAAC,EAAE,KAAK,EAAE,UAAU,YACnC,MAAC,OAAO,IAAC,QAAQ,sBAAa,CAAC,CAAC,iBAAiB,CAAC,aAC/C,KAAK,CAAC,KAAK,IAAI,CACd,KAAC,OAAO,CAAC,IAAI,IACX,IAAI,EAAC,aAAa,gBACN,CAAC,CAAC,sBAAsB,CAAC,EACrC,OAAO,EAAE,CAAC,CAAC,sBAAsB,CAAC,EAClC,YAAY,EAAE,aAAa,EAC3B,OAAO,EAAE,WAAW,GACpB,CACH,EACA,KAAK,CAAC,IAAI,IAAI,CACb,KAAC,OAAO,CAAC,IAAI,IACX,IAAI,EAAC,SAAS,EACd,MAAM,EAAE,QAAQ,gBACJ,CAAC,CAAC,iBAAiB,CAAC,EAChC,OAAO,EAAE,CAAC,CAAC,iBAAiB,CAAC,EAC7B,YAAY,EAAE,aAAa,EAC3B,OAAO,EAAE,GAAG,EAAE;gCACZ,gBAAgB,CAAC,CAAC,QAAQ,CAAC,CAAC;4BAC9B,CAAC,GACD,CACH,EACA,eAAe,IAAI,CAClB,KAAC,OAAO,CAAC,IAAI,IACX,IAAI,EAAE,KAAC,WAAW,KAAG,EACrB,MAAM,EAAE,WAAW,IAAI,KAAK,gBAChB,CAAC,CAAC,oBAAoB,CAAC,EACnC,OAAO,EAAE,CAAC,CAAC,6BAA6B,CAAC,EACzC,YAAY,EAAE,aAAa,EAC3B,OAAO,EAAE,GAAG,EAAE;gCACZ,mBAAmB,CAAC,WAAW,KAAK,IAAI,CAAC,CAAC;4BAC5C,CAAC,GACD,CACH,EACA,WAAW,IAAI,CACd,KAAC,OAAO,CAAC,WAAW,IAClB,SAAS,EAAC,aAAa,EACvB,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE;gCACT,IAAI,EAAE,KAAK;gCACX,YAAY,EAAE,CAAC,CAAC,2BAA2B,CAAC;gCAC5C,OAAO,EAAE,CAAC,CAAC,2BAA2B,CAAC;gCACvC,YAAY,EAAE,aAAa;6BAC5B,GACD,CACH,EACA,UAAU,IAAI,CACb,KAAC,OAAO,CAAC,WAAW,IAClB,SAAS,EAAC,aAAa,EACvB,OAAO,EAAE,WAAW,EACpB,SAAS,EAAE;gCACT,IAAI,EAAE,UAAU;gCAChB,YAAY,EAAE,CAAC,CAAC,wBAAwB,CAAC;gCACzC,OAAO,EAAE,CAAC,CAAC,wBAAwB,CAAC;gCACpC,YAAY,EAAE,aAAa;6BAC5B,GACD,CACH,EACA,KAAK,CAAC,IAAI,IAAI,CACb,KAAC,OAAO,CAAC,WAAW,IAClB,SAAS,EAAC,aAAa,EACvB,OAAO,EAAE,KAAC,cAAc,KAAG,EAC3B,SAAS,EAAE;gCACT,IAAI,EAAE,MAAM;gCACZ,YAAY,EAAE,CAAC,CAAC,4BAA4B,CAAC;gCAC7C,OAAO,EAAE,CAAC,CAAC,4BAA4B,CAAC;gCACxC,YAAY,EAAE,aAAa;6BAC5B,GACD,CACH,IACO,GACL,CACR,EACA,KAAK,CAAC,OAAO,IAAI,CAChB,KAAC,IAAI,IAAC,SAAS,EAAE,CAAC,EAAE,KAAK,EAAE,UAAU,YACnC,MAAC,OAAO,IAAC,QAAQ,sBAAa,CAAC,CAAC,oBAAoB,CAAC,aAClD,iBAAiB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAC/B,KAAC,OAAO,CAAC,IAAI,IAEX,IAAI,EAAE,KAAC,WAAW,IAAC,IAAI,EAAE,IAAI,GAAI,EACjC,MAAM,EAAE,WAAW,KAAK,IAAI,gBAChB,CAAC,CAAC,EAAE,CACd,0BAA0B,IAAI,EAAE,EAChC,kBAAkB,CAAC,IAAI,CAAC,CACzB,EACD,OAAO,EAAE,CAAC,CAAC,+BAA+B,EAAE;gCAC1C,IAAI,EAAE,CAAC,CAAC,EAAE,CACR,0BAA0B,IAAI,EAAE,EAChC,kBAAkB,CAAC,IAAI,CAAC,CACzB;gCACD,KAAK,EAAE,uBAAuB,CAAC,IAAI,CAAC;6BACrC,CAAC,EACF,YAAY,EAAE,aAAa,EAC3B,OAAO,EAAE,GAAG,EAAE;gCACZ,mBAAmB,CAAC,WAAW,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;4BAC1D,CAAC,IAjBI,IAAI,CAkBT,CACH,CAAC,EACF,KAAC,OAAO,CAAC,IAAI,IACX,IAAI,EAAE,KAAC,qBAAqB,KAAG,EAC/B,QAAQ,EAAE,gBAAgB,KAAK,CAAC,gBACpB,CAAC,CAAC,8BAA8B,CAAC,EAC7C,OAAO,EAAE,CAAC,CAAC,8BAA8B,CAAC,EAC1C,YAAY,EAAE,aAAa,EAC3B,OAAO,EAAE,mBAAmB,GAC5B,IACM,GACL,CACR,IACG,CACP,CAAC;AACJ,CAAC;AAED,MAAM,aAAa,GAAG,EAAE,SAAS,EAAE,OAAO,EAAW,CAAC;AAEtD,MAAM,YAAY,GAAkB;IAClC,OAAO,EAAE,MAAM;IACf,aAAa,EAAE,QAAQ;IACvB,GAAG,EAAE,CAAC;IACN,aAAa,EAAE,MAAM;CACtB,CAAC;AAEF,MAAM,UAAU,GAAkB,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC"}
@@ -1,10 +1,10 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useEffect, useRef, useState } from 'react';
3
+ import { DEFAULT_SPIN_SPEED } from "../../molstar/core/index.js";
3
4
  import { normalizeMolecule3DSettings, resolveMolecule3DTools, } from "../core/settings.js";
4
5
  import { Molecule3DExport } from "./Molecule3DExport.js";
5
6
  import { Molecule3DOptions } from "./Molecule3DOptions.js";
6
7
  import { Molecule3DToolbar } from "./Molecule3DToolbar.js";
7
- import { DEFAULT_SPIN_SPEED } from "./camera.js";
8
8
  import { createMolecule3DViewer } from "./createViewer.js";
9
9
  import { useControlledState } from "./useControlledState.js";
10
10
  import { useImageExport } from "./useImageExport.js";
@@ -1 +1 @@
1
- {"version":3,"file":"MoleculeCanvas3D.js","sourceRoot":"","sources":["../../../src/molecule3d/ui/MoleculeCanvas3D.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MoleculeCanvas3D.js","sourceRoot":"","sources":["../../../src/molecule3d/ui/MoleculeCanvas3D.tsx"],"names":[],"mappings":"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"}
@@ -6,10 +6,6 @@
6
6
  */
7
7
  import type { PluginContext } from 'molstar/lib/mol-plugin/context.js';
8
8
  import type { Molecule3DCamera } from '../core/camera.ts';
9
- /** Transition length used when the caller does not pick one, milliseconds. */
10
- export declare const DEFAULT_CAMERA_DURATION = 250;
11
- /** Turn rate used when the caller does not pick one, in molstar's spin unit. */
12
- export declare const DEFAULT_SPIN_SPEED: number;
13
9
  /**
14
10
  * Frame everything currently in the scene.
15
11
  *
@@ -24,13 +20,6 @@ export declare const DEFAULT_SPIN_SPEED: number;
24
20
  * direction.
25
21
  */
26
22
  export declare function resetCamera(plugin: PluginContext, durationMilliseconds?: number, fromFront?: boolean): void;
27
- /**
28
- * Turn the automatic spin on or off.
29
- * @param plugin - The molstar context.
30
- * @param spinning - Whether the scene should keep turning.
31
- * @param speed - Turn rate, in molstar's own spin unit.
32
- */
33
- export declare function setSpin(plugin: PluginContext, spinning: boolean, speed?: number): void;
34
23
  /**
35
24
  * Where the camera stands, against the scene rather than its coordinates.
36
25
  *
@@ -1 +1 @@
1
- {"version":3,"file":"camera.d.ts","sourceRoot":"","sources":["../../../src/molecule3d/ui/camera.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAEvE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAG1D,8EAA8E;AAC9E,eAAO,MAAM,uBAAuB,MAAM,CAAC;AAE3C,gFAAgF;AAChF,eAAO,MAAM,kBAAkB,QAAQ,CAAC;AAqCxC;;;;;;;;;;;;GAYG;AACH,wBAAgB,WAAW,CACzB,MAAM,EAAE,aAAa,EACrB,oBAAoB,SAA0B,EAC9C,SAAS,UAAQ,GAChB,IAAI,CAWN;AAED;;;;;GAKG;AACH,wBAAgB,OAAO,CACrB,MAAM,EAAE,aAAa,EACrB,QAAQ,EAAE,OAAO,EACjB,KAAK,SAAqB,GACzB,IAAI,CAQN;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,aAAa,GAAG,gBAAgB,GAAG,IAAI,CA8BzE;AAED;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CACzB,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,gBAAgB,EACxB,oBAAoB,SAAI,GACvB,IAAI,CAoBN;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CACzB,MAAM,EAAE,aAAa,EACrB,QAAQ,EAAE,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI,KAAK,IAAI,GAClD,MAAM,IAAI,CASZ"}
1
+ {"version":3,"file":"camera.d.ts","sourceRoot":"","sources":["../../../src/molecule3d/ui/camera.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAQvE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAM1D;;;;;;;;;;;;GAYG;AACH,wBAAgB,WAAW,CACzB,MAAM,EAAE,aAAa,EACrB,oBAAoB,SAA0B,EAC9C,SAAS,UAAQ,GAChB,IAAI,CAWN;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,aAAa,GAAG,gBAAgB,GAAG,IAAI,CAYzE;AAED;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CACzB,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,gBAAgB,EACxB,oBAAoB,SAAI,GACvB,IAAI,CAeN;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CACzB,MAAM,EAAE,aAAa,EACrB,QAAQ,EAAE,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI,KAAK,IAAI,GAClD,MAAM,IAAI,CASZ"}
@@ -4,41 +4,11 @@
4
4
  * directions between molstar's camera and the scene-relative camera a link
5
5
  * carries.
6
6
  */
7
- import { Quat, Vec3 } from 'molstar/lib/mol-math/linear-algebra.js';
8
- import { normalizeMolecule3DCamera } from "../core/camera.js";
9
- /** Transition length used when the caller does not pick one, milliseconds. */
10
- export const DEFAULT_CAMERA_DURATION = 250;
11
- /** Turn rate used when the caller does not pick one, in molstar's spin unit. */
12
- export const DEFAULT_SPIN_SPEED = 1 / 3;
13
- /**
14
- * Fraction of the bounding sphere kept as breathing room around the model.
15
- *
16
- * `camera.reset()` frames the scene with molstar's own margin, which suits a
17
- * protein filling a wide viewport and leaves a small molecule a speck in the
18
- * middle. Framing the visible bounding sphere directly is what makes a single
19
- * ethanol legible.
20
- */
21
- const FRAMING_MARGIN = 0.08;
22
- /** Axis the automatic spin turns about: screen up. */
23
- const SPIN_AXIS = Vec3.create(0, 1, 0);
24
- /** Smallest radius framed, in ångström, so a single atom is not a close-up. */
25
- const MIN_FRAMING_RADIUS = 0.5;
7
+ import { Vec3 } from 'molstar/lib/mol-math/linear-algebra.js';
8
+ import { DEFAULT_CAMERA_DURATION, cameraToPose, framedRadius, poseToCamera, } from "../../molstar/core/index.js";
26
9
  /** Screen up and viewing direction when the model is seen as its file lays it. */
27
10
  const FRONT_UP = Vec3.create(0, 1, 0);
28
11
  const FRONT_DIRECTION = Vec3.create(0, 0, -1);
29
- /** The camera's own axes, which the stored rotation turns into world ones. */
30
- const CAMERA_UP = Vec3.create(0, 1, 0);
31
- const CAMERA_BACK = Vec3.create(0, 0, 1);
32
- /**
33
- * The radius a reset frames, which is the length every stored camera is
34
- * measured against — so reading a camera and applying it are the same move in
35
- * opposite directions.
36
- * @param radius - Radius of the scene's visible bounding sphere.
37
- * @returns The framed radius.
38
- */
39
- function framedRadius(radius) {
40
- return Math.max(radius * (1 + FRAMING_MARGIN), MIN_FRAMING_RADIUS);
41
- }
42
12
  /**
43
13
  * Frame everything currently in the scene.
44
14
  *
@@ -64,21 +34,6 @@ export function resetCamera(plugin, durationMilliseconds = DEFAULT_CAMERA_DURATI
64
34
  },
65
35
  });
66
36
  }
67
- /**
68
- * Turn the automatic spin on or off.
69
- * @param plugin - The molstar context.
70
- * @param spinning - Whether the scene should keep turning.
71
- * @param speed - Turn rate, in molstar's own spin unit.
72
- */
73
- export function setSpin(plugin, spinning, speed = DEFAULT_SPIN_SPEED) {
74
- plugin.canvas3d?.setProps({
75
- trackball: {
76
- animate: spinning
77
- ? { name: 'spin', params: { speed, axis: SPIN_AXIS } }
78
- : { name: 'off', params: {} },
79
- },
80
- });
81
- }
82
37
  /**
83
38
  * Where the camera stands, against the scene rather than its coordinates.
84
39
  *
@@ -99,31 +54,7 @@ export function readCamera(plugin) {
99
54
  return null;
100
55
  const framed = framedRadius(radius);
101
56
  const camera = canvas.camera;
102
- const { position, target, up } = camera.getSnapshot();
103
- const back = Vec3.sub(Vec3.zero(), position, target);
104
- const distance = Vec3.magnitude(back);
105
- if (distance <= 0)
106
- return null;
107
- Vec3.scale(back, back, 1 / distance);
108
- // The trackball keeps up and back close to square, never exactly so.
109
- const trueUp = Vec3.scaleAndAdd(Vec3.zero(), up, back, -Vec3.dot(up, back));
110
- if (Vec3.magnitude(trueUp) <= 0)
111
- return null;
112
- Vec3.normalize(trueUp, trueUp);
113
- const right = Vec3.cross(Vec3.zero(), trueUp, back);
114
- const rotation = Quat.fromBasis(Quat.identity(), right, trueUp, back);
115
- const offset = Vec3.sub(Vec3.zero(), target, center);
116
- Vec3.scale(offset, offset, 1 / framed);
117
- return normalizeMolecule3DCamera({
118
- rotation: [
119
- rotation[0] ?? 0,
120
- rotation[1] ?? 0,
121
- rotation[2] ?? 0,
122
- rotation[3] ?? 1,
123
- ],
124
- zoom: camera.getTargetDistance(framed) / distance,
125
- offset: [offset[0] ?? 0, offset[1] ?? 0, offset[2] ?? 0],
126
- });
57
+ return poseToCamera(camera.getSnapshot(), { center, radius: framed }, camera.getTargetDistance(framed));
127
58
  }
128
59
  /**
129
60
  * Put the camera back where a link says it stood.
@@ -136,19 +67,14 @@ export function readCamera(plugin) {
136
67
  * @param durationMilliseconds - Transition length. Pass 0 for an instant jump.
137
68
  */
138
69
  export function applyCamera(plugin, camera, durationMilliseconds = 0) {
139
- const { rotation, zoom, offset } = normalizeMolecule3DCamera(camera);
140
- const turn = Quat.create(rotation[0], rotation[1], rotation[2], rotation[3]);
141
70
  plugin.canvas3d?.requestCameraReset({
142
71
  durationMs: durationMilliseconds,
143
72
  snapshot: (scene, current) => {
144
73
  const { center, radius } = scene.boundingSphereVisible;
145
74
  const framed = framedRadius(radius);
146
- const up = Vec3.transformQuat(Vec3.zero(), CAMERA_UP, turn);
147
- const back = Vec3.transformQuat(Vec3.zero(), CAMERA_BACK, turn);
148
- const target = Vec3.create((center[0] ?? 0) + offset[0] * framed, (center[1] ?? 0) + offset[1] * framed, (center[2] ?? 0) + offset[2] * framed);
149
- const distance = current.getTargetDistance(framed) / zoom;
150
- const position = Vec3.scaleAndAdd(Vec3.zero(), target, back, distance);
151
- return { target, position, up, radius: framed };
75
+ const reference = { center, radius: framed };
76
+ const pose = cameraToPose(camera, reference, current.getTargetDistance(framed));
77
+ return { ...pose, radius: framed };
152
78
  },
153
79
  });
154
80
  }
@@ -1 +1 @@
1
- {"version":3,"file":"camera.js","sourceRoot":"","sources":["../../../src/molecule3d/ui/camera.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"camera.js","sourceRoot":"","sources":["../../../src/molecule3d/ui/camera.ts"],"names":[],"mappings":"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"}