@rcsb/rcsb-saguaro-app 6.0.0-development.8 → 6.0.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 (38) hide show
  1. package/README.md +2 -2
  2. package/build/app.js +1 -1
  3. package/build/app.js.LICENSE.txt +15 -0
  4. package/build/plot.js +1 -1
  5. package/build/plot.js.LICENSE.txt +15 -0
  6. package/build/worker.js +1 -1
  7. package/lib/RcsbCollectTools/DataCollectors/MultipleEntryPropertyCollector.d.ts +3 -0
  8. package/lib/RcsbCollectTools/DataCollectors/MultipleEntryPropertyCollector.js +26 -2
  9. package/lib/RcsbFvExamples/SequenceIdentityGroupAlignmentFv.js +1 -1
  10. package/lib/RcsbFvExamples/UniprotEntityInstanceFv.js +1 -1
  11. package/lib/RcsbFvExamples/UniprotFv.js +1 -1
  12. package/lib/RcsbFvWeb/RcsbFvFactories/RcsbFvTrackFactory/TrackFactoryImpl/SequenceTrackFactory.js +2 -1
  13. package/lib/RcsbFvWeb/RcsbFvModule/RcsbFvModuleInterface.d.ts +1 -1
  14. package/lib/RcsbGroupWeb/RcsbGroupView/RcsbGroupMembers/GroupMemberItem.d.ts +1 -0
  15. package/lib/RcsbGroupWeb/RcsbGroupView/RcsbGroupMembers/GroupMemberItem.js +7 -1
  16. package/lib/RcsbQueries/Yosemite/QueryMultipleEntriesProperties.graphql +20 -0
  17. package/lib/RcsbUtils/TrackGenerators/GroupExternalTrackBuilder.js +1 -1
  18. package/lib/commonjs/RcsbCollectTools/DataCollectors/MultipleEntryPropertyCollector.d.ts +3 -0
  19. package/lib/commonjs/RcsbCollectTools/DataCollectors/MultipleEntryPropertyCollector.js +26 -2
  20. package/lib/commonjs/RcsbFvExamples/SequenceIdentityGroupAlignmentFv.js +1 -1
  21. package/lib/commonjs/RcsbFvExamples/UniprotEntityInstanceFv.js +1 -1
  22. package/lib/commonjs/RcsbFvExamples/UniprotFv.js +1 -1
  23. package/lib/commonjs/RcsbFvWeb/RcsbFvFactories/RcsbFvTrackFactory/TrackFactoryImpl/SequenceTrackFactory.js +2 -1
  24. package/lib/commonjs/RcsbFvWeb/RcsbFvModule/RcsbFvModuleInterface.d.ts +1 -1
  25. package/lib/commonjs/RcsbGroupWeb/RcsbGroupView/RcsbGroupMembers/GroupMemberItem.d.ts +1 -0
  26. package/lib/commonjs/RcsbGroupWeb/RcsbGroupView/RcsbGroupMembers/GroupMemberItem.js +7 -1
  27. package/lib/commonjs/RcsbQueries/Yosemite/QueryMultipleEntriesProperties.graphql +20 -0
  28. package/lib/commonjs/RcsbUtils/TrackGenerators/GroupExternalTrackBuilder.js +1 -1
  29. package/lib/commonjs/scss/bootstrap-group-display.module.scss +0 -1
  30. package/lib/scss/bootstrap-group-display.module.scss +0 -1
  31. package/package.json +6 -5
  32. package/build/65a8ce52fc5427e8f94d.eot +0 -0
  33. package/build/9e2b21b135bc7d4c803f.svg +0 -1660
  34. package/build/d12afc36557395143e4b.woff +0 -0
  35. package/build/db9ddb1898dbd76badca.ttf +0 -0
  36. package/build/df635aaf04cd75132f62.woff2 +0 -0
  37. package/lib/commonjs/scss/bootstrap-fv.scss +0 -42
  38. package/lib/scss/bootstrap-fv.scss +0 -42
@@ -11,9 +11,12 @@ export interface EntryPropertyIntreface {
11
11
  description: Array<string>;
12
12
  entityToInstance: Map<string, Array<string>>;
13
13
  structureDeterminationMethodology: StructureDeterminationMethodology;
14
+ nonPolymerEntityToInstance: Map<string, Array<string>>;
15
+ instanceToOperator: Map<string, Map<string, Array<string>>>;
14
16
  }
15
17
  export declare class MultipleEntryPropertyCollector {
16
18
  private readonly rcsbFvQuery;
17
19
  collect(requestConfig: QueryEntriesArgs): Promise<Array<EntryPropertyIntreface>>;
18
20
  private static getEntryProperties;
21
+ private static instanceToOperator;
19
22
  }
@@ -1,5 +1,8 @@
1
1
  import { __awaiter } from "tslib";
2
2
  import { rcsbClient } from "../../RcsbGraphQL/RcsbClient";
3
+ import { Assertions } from "../../RcsbUtils/Helpers/Assertions";
4
+ var assertDefined = Assertions.assertDefined;
5
+ var assertElementListDefined = Assertions.assertElementListDefined;
3
6
  export class MultipleEntryPropertyCollector {
4
7
  constructor() {
5
8
  this.rcsbFvQuery = rcsbClient;
@@ -11,7 +14,7 @@ export class MultipleEntryPropertyCollector {
11
14
  });
12
15
  }
13
16
  static getEntryProperties(r) {
14
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
17
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p;
15
18
  return {
16
19
  rcsbId: r.rcsb_id,
17
20
  entryId: r.rcsb_id,
@@ -22,7 +25,28 @@ export class MultipleEntryPropertyCollector {
22
25
  taxNames: (_j = (_h = r.polymer_entities) === null || _h === void 0 ? void 0 : _h.map((entity) => { var _a; return ((_a = entity === null || entity === void 0 ? void 0 : entity.rcsb_entity_source_organism) === null || _a === void 0 ? void 0 : _a.map((so) => (so === null || so === void 0 ? void 0 : so.ncbi_scientific_name))); }).flat().filter((x) => x != null)) !== null && _j !== void 0 ? _j : [],
23
26
  entryMolecularWeight: (_k = r.rcsb_entry_info.molecular_weight) !== null && _k !== void 0 ? _k : undefined,
24
27
  entityToInstance: (_m = (_l = r.polymer_entities) === null || _l === void 0 ? void 0 : _l.map(pe => { var _a; return [pe === null || pe === void 0 ? void 0 : pe.rcsb_id, (_a = pe === null || pe === void 0 ? void 0 : pe.polymer_entity_instances) === null || _a === void 0 ? void 0 : _a.map(pei => pei === null || pei === void 0 ? void 0 : pei.rcsb_id)]; }).reduce((r, x) => r.set(x[0], x[1]), new Map())) !== null && _m !== void 0 ? _m : new Map(),
25
- structureDeterminationMethodology: r.rcsb_entry_info.structure_determination_methodology
28
+ structureDeterminationMethodology: r.rcsb_entry_info.structure_determination_methodology,
29
+ nonPolymerEntityToInstance: (_p = (_o = r.nonpolymer_entities) === null || _o === void 0 ? void 0 : _o.map(pe => { var _a; return [pe === null || pe === void 0 ? void 0 : pe.rcsb_id, (_a = pe === null || pe === void 0 ? void 0 : pe.nonpolymer_entity_instances) === null || _a === void 0 ? void 0 : _a.map(pei => pei === null || pei === void 0 ? void 0 : pei.rcsb_id)]; }).reduce((r, x) => r.set(x[0], x[1]), new Map())) !== null && _p !== void 0 ? _p : new Map(),
30
+ instanceToOperator: MultipleEntryPropertyCollector.instanceToOperator(r)
26
31
  };
27
32
  }
33
+ static instanceToOperator(r) {
34
+ const out = new Map();
35
+ assertDefined(r.assemblies);
36
+ r.assemblies.forEach(assembly => {
37
+ assertDefined(assembly === null || assembly === void 0 ? void 0 : assembly.rcsb_id), assertDefined(assembly === null || assembly === void 0 ? void 0 : assembly.pdbx_struct_assembly_gen);
38
+ out.set(assembly.rcsb_id, new Map());
39
+ assembly.pdbx_struct_assembly_gen.forEach(assemblyGen => {
40
+ assertDefined(assemblyGen === null || assemblyGen === void 0 ? void 0 : assemblyGen.oper_expression), assertElementListDefined(assemblyGen.asym_id_list);
41
+ const operators = assemblyGen.oper_expression.split(",");
42
+ const instances = assemblyGen.asym_id_list;
43
+ instances.forEach(asymId => {
44
+ var _a, _b, _c;
45
+ const instanceId = `${r.rcsb_id}.${asymId}`;
46
+ (_a = out.get(assembly.rcsb_id)) === null || _a === void 0 ? void 0 : _a.set(instanceId, [...operators, ...(_c = (_b = out.get(assembly.rcsb_id)) === null || _b === void 0 ? void 0 : _b.get(instanceId)) !== null && _c !== void 0 ? _c : []]);
47
+ });
48
+ });
49
+ });
50
+ return out;
51
+ }
28
52
  }
@@ -13,7 +13,7 @@ class UiComponent extends React.Component {
13
13
  }
14
14
  buildSequenceIdentityAlignmentFv("pfv", "5_30", undefined, {
15
15
  boardConfig: {
16
- selectionChangeCallBack: (selection) => {
16
+ selectionChangeCallback: (selection) => {
17
17
  console.log(selection);
18
18
  }
19
19
  },
@@ -1,7 +1,7 @@
1
1
  import { buildUniprotEntityInstanceFv } from "../RcsbFvWeb/RcsbFvBuilder";
2
2
  buildUniprotEntityInstanceFv("pfv", "P01112", "2UZI_3", "2UZI.C", { boardConfig: {
3
3
  trackWidth: 600,
4
- elementClickCallBack: (d) => {
4
+ elementClickCallback: (d) => {
5
5
  const div = document.getElementById("myDiv");
6
6
  if (!div)
7
7
  return;
@@ -1,7 +1,7 @@
1
1
  import { buildMultipleAlignmentSequenceFv } from "../RcsbFvWeb/RcsbFvBuilder";
2
2
  buildMultipleAlignmentSequenceFv("pfv", "select", "P01112", {}, {
3
3
  boardConfig: {
4
- selectionChangeCallBack: (s) => {
4
+ selectionChangeCallback: (s) => {
5
5
  console.log(">", s);
6
6
  }
7
7
  }
@@ -52,7 +52,8 @@ export class SequenceTrackFactory {
52
52
  source: TrackUtils.transformSourceFromTarget(id, c),
53
53
  provenanceName: TrackUtils.getProvenanceConfigFormTarget(id, c).name,
54
54
  provenanceColor: TrackUtils.getProvenanceConfigFormTarget(id, c).color,
55
- label: s
55
+ label: s,
56
+ name: `RES ${s}`
56
57
  };
57
58
  sequenceData.push(this.addAuthorResIds(o, {
58
59
  from: config.from,
@@ -83,6 +83,7 @@ export interface RcsbFvModuleInterface extends RcsbFvModulePublicInterface {
83
83
  display(): void;
84
84
  build(buildConfig: RcsbFvModuleBuildInterface): Promise<void>;
85
85
  setPolymerEntityInstanceTranslator(polymerEntityInstance: PolymerEntityInstanceTranslate): void;
86
+ getPolymerEntityInstanceTranslator(): PolymerEntityInstanceTranslate;
86
87
  }
87
88
  export interface RcsbFvModulePublicInterface<P extends {
88
89
  [k: string]: any;
@@ -99,5 +100,4 @@ export interface RcsbFvModulePublicInterface<P extends {
99
100
  getAnnotationConfigData(): Promise<Array<RcsbFvRowConfigInterface<P, S, R, M>>>;
100
101
  getFv(): RcsbFv<P, S, R, M>;
101
102
  wait(): Promise<void>;
102
- getPolymerEntityInstanceTranslator(): PolymerEntityInstanceTranslate;
103
103
  }
@@ -21,6 +21,7 @@ export interface ItemFeaturesInterface {
21
21
  }
22
22
  export declare class GroupMemberItem extends React.Component<GroupMemberItemInterface, {}> {
23
23
  private static readonly SEQUENCE_ALIGNMENT_3D_LINK;
24
+ private static readonly ICON_PROPS;
24
25
  render(): import("react/jsx-runtime").JSX.Element;
25
26
  }
26
27
  export {};
@@ -3,15 +3,21 @@ import React from "react";
3
3
  import resource from "../../../RcsbServerConfig/web.resources.json";
4
4
  import { GroupProvenanceId, StructureDeterminationMethodology } from "@rcsb/rcsb-api-tools/build/RcsbDw/Types/DwEnums";
5
5
  import { TagDelimiter } from "@rcsb/rcsb-api-tools/build/RcsbUtils/TagDelimiter";
6
+ import BxCube from "boxicons/svg/solid/bxs-cube.svg";
6
7
  const NA = "N/A";
7
8
  export class GroupMemberItem extends React.Component {
8
9
  render() {
9
10
  var _a;
10
11
  return (_jsxs("div", { children: [_jsxs("div", { style: { position: "relative", minHeight: 358 }, children: [imageIcon(this.props.item), _jsx("img", { src: memberImgUrl(this.props.item, this.props.groupProvenanceId), alt: "image", style: { width: "100%" } })] }), _jsxs("div", { className: "bg-light border-top p-md-4", children: [hasGroup3D(this.props.groupProvenanceId) ?
11
- _jsxs("div", { children: [_jsxs("strong", { children: [_jsx("i", { className: "bx bxs-cube" }), " Explore in 3D"] }), ": ", _jsx("a", { href: alignment1d3dUrl(this.props.groupId, this.props.searchQuery), children: GroupMemberItem.SEQUENCE_ALIGNMENT_3D_LINK })] }) : null, _jsxs("div", { children: [_jsx("strong", { children: memberSummaryUrlText(this.props.item, this.props.groupProvenanceId) }), _jsx("span", { children: " - " }), _jsx("a", { href: memberSummaryUrl(this.props.item, this.props.groupProvenanceId), children: "Summary" }), _jsx("span", { children: " | " }), _jsx("a", { href: member3DViewUrl(this.props.item, this.props.groupProvenanceId), children: "Structure" })] }), _jsxs("div", { style: { textOverflow: "ellipsis", whiteSpace: "nowrap", overflow: "hidden" }, title: this.props.item.name, children: [_jsx("strong", { children: "Name: " }), this.props.item.name] }), _jsxs("div", { style: { textOverflow: "ellipsis", whiteSpace: "nowrap", overflow: "hidden" }, children: [_jsx("strong", { children: "Organism: " }), this.props.item.taxNames.join(", ")] }), _jsxs("div", { style: { textOverflow: "ellipsis", whiteSpace: "nowrap", overflow: "hidden" }, title: this.props.item.experimentalMethod, children: [_jsx("strong", { children: "Experimental Method: " }), (_a = this.props.item.experimentalMethod) !== null && _a !== void 0 ? _a : NA] }), (_jsxs("div", { style: { textOverflow: "ellipsis", whiteSpace: "nowrap", overflow: "hidden" }, children: [_jsx("strong", { children: "Resolution: " }), this.props.item.resolution ? `${this.props.item.resolution} Å` : NA] })), this.props.item.molecularWeight ? (_jsxs("div", { style: { textOverflow: "ellipsis", whiteSpace: "nowrap", overflow: "hidden" }, children: [_jsx("strong", { children: "Molecular Weight: " }), `${this.props.item.molecularWeight} kDa`] })) : null] })] }));
12
+ _jsxs("div", { children: [_jsx(BxCube, Object.assign({}, GroupMemberItem.ICON_PROPS)), " ", _jsx("strong", { children: "Explore in 3D" }), ": ", _jsx("a", { href: alignment1d3dUrl(this.props.groupId, this.props.searchQuery), children: GroupMemberItem.SEQUENCE_ALIGNMENT_3D_LINK })] }) : null, _jsxs("div", { children: [_jsx("strong", { children: memberSummaryUrlText(this.props.item, this.props.groupProvenanceId) }), _jsx("span", { children: " - " }), _jsx("a", { href: memberSummaryUrl(this.props.item, this.props.groupProvenanceId), children: "Summary" }), _jsx("span", { children: " | " }), _jsx("a", { href: member3DViewUrl(this.props.item, this.props.groupProvenanceId), children: "Structure" })] }), _jsxs("div", { style: { textOverflow: "ellipsis", whiteSpace: "nowrap", overflow: "hidden" }, title: this.props.item.name, children: [_jsx("strong", { children: "Name: " }), this.props.item.name] }), _jsxs("div", { style: { textOverflow: "ellipsis", whiteSpace: "nowrap", overflow: "hidden" }, children: [_jsx("strong", { children: "Organism: " }), this.props.item.taxNames.join(", ")] }), _jsxs("div", { style: { textOverflow: "ellipsis", whiteSpace: "nowrap", overflow: "hidden" }, title: this.props.item.experimentalMethod, children: [_jsx("strong", { children: "Experimental Method: " }), (_a = this.props.item.experimentalMethod) !== null && _a !== void 0 ? _a : NA] }), (_jsxs("div", { style: { textOverflow: "ellipsis", whiteSpace: "nowrap", overflow: "hidden" }, children: [_jsx("strong", { children: "Resolution: " }), this.props.item.resolution ? `${this.props.item.resolution} Å` : NA] })), this.props.item.molecularWeight ? (_jsxs("div", { style: { textOverflow: "ellipsis", whiteSpace: "nowrap", overflow: "hidden" }, children: [_jsx("strong", { children: "Molecular Weight: " }), `${this.props.item.molecularWeight} kDa`] })) : null] })] }));
12
13
  }
13
14
  }
14
15
  GroupMemberItem.SEQUENCE_ALIGNMENT_3D_LINK = "Sequence Alignments";
16
+ GroupMemberItem.ICON_PROPS = {
17
+ width: 15,
18
+ height: 15,
19
+ viewBox: "0 0 24 24"
20
+ };
15
21
  function memberImgUrl(ei, groupProvenanceId) {
16
22
  if (groupProvenanceId === GroupProvenanceId.ProvenanceMatchingDepositGroupId)
17
23
  return resource.rcsb_cdn.url + ei.entryId.toLowerCase().substring(1, 3) + "/" + ei.entryId.toLowerCase() + "/" + ei.entryId.toLowerCase() + "_model-1.jpeg";
@@ -17,6 +17,19 @@ query multiple_entries_properties($entry_ids: [String!]!){
17
17
  rcsb_id
18
18
  }
19
19
  }
20
+ nonpolymer_entities {
21
+ rcsb_id
22
+ rcsb_nonpolymer_entity_container_identifiers {
23
+ entity_id
24
+ rcsb_id
25
+ }
26
+ nonpolymer_entity_instances {
27
+ rcsb_nonpolymer_entity_instance_container_identifiers {
28
+ asym_id
29
+ }
30
+ rcsb_id
31
+ }
32
+ }
20
33
  rcsb_entry_info{
21
34
  experimental_method
22
35
  resolution_combined
@@ -26,5 +39,12 @@ query multiple_entries_properties($entry_ids: [String!]!){
26
39
  struct {
27
40
  title
28
41
  }
42
+ assemblies {
43
+ rcsb_id
44
+ pdbx_struct_assembly_gen {
45
+ oper_expression
46
+ asym_id_list
47
+ }
48
+ }
29
49
  }
30
50
  }
@@ -67,7 +67,7 @@ export function groupExternalTrackBuilder() {
67
67
  const logoRowData = querySequenceLogo.map((s, n) => ({
68
68
  begin: n + 1,
69
69
  label: s.mode(),
70
- description: [s.frequency().filter(s => (s.value >= 0.01)).map(s => (s.symbol.replace("-", "gap") + ": " + Math.trunc(s.value * 100) / 100)).join(", ")]
70
+ description: [s.frequency().filter(s => (s.value >= 0.01)).slice(0, 14).map(s => (s.symbol.replace("-", "gap") + ": " + Math.trunc(s.value * 100) / 100)).join(", ")]
71
71
  }));
72
72
  variationRowData = [{
73
73
  trackId: "annotationTrack_ALIGNMENT_FREQ",
@@ -11,9 +11,12 @@ export interface EntryPropertyIntreface {
11
11
  description: Array<string>;
12
12
  entityToInstance: Map<string, Array<string>>;
13
13
  structureDeterminationMethodology: StructureDeterminationMethodology;
14
+ nonPolymerEntityToInstance: Map<string, Array<string>>;
15
+ instanceToOperator: Map<string, Map<string, Array<string>>>;
14
16
  }
15
17
  export declare class MultipleEntryPropertyCollector {
16
18
  private readonly rcsbFvQuery;
17
19
  collect(requestConfig: QueryEntriesArgs): Promise<Array<EntryPropertyIntreface>>;
18
20
  private static getEntryProperties;
21
+ private static instanceToOperator;
19
22
  }
@@ -3,6 +3,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.MultipleEntryPropertyCollector = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const RcsbClient_1 = require("../../RcsbGraphQL/RcsbClient");
6
+ const Assertions_1 = require("../../RcsbUtils/Helpers/Assertions");
7
+ var assertDefined = Assertions_1.Assertions.assertDefined;
8
+ var assertElementListDefined = Assertions_1.Assertions.assertElementListDefined;
6
9
  class MultipleEntryPropertyCollector {
7
10
  constructor() {
8
11
  this.rcsbFvQuery = RcsbClient_1.rcsbClient;
@@ -14,7 +17,7 @@ class MultipleEntryPropertyCollector {
14
17
  });
15
18
  }
16
19
  static getEntryProperties(r) {
17
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
20
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p;
18
21
  return {
19
22
  rcsbId: r.rcsb_id,
20
23
  entryId: r.rcsb_id,
@@ -25,8 +28,29 @@ class MultipleEntryPropertyCollector {
25
28
  taxNames: (_j = (_h = r.polymer_entities) === null || _h === void 0 ? void 0 : _h.map((entity) => { var _a; return ((_a = entity === null || entity === void 0 ? void 0 : entity.rcsb_entity_source_organism) === null || _a === void 0 ? void 0 : _a.map((so) => (so === null || so === void 0 ? void 0 : so.ncbi_scientific_name))); }).flat().filter((x) => x != null)) !== null && _j !== void 0 ? _j : [],
26
29
  entryMolecularWeight: (_k = r.rcsb_entry_info.molecular_weight) !== null && _k !== void 0 ? _k : undefined,
27
30
  entityToInstance: (_m = (_l = r.polymer_entities) === null || _l === void 0 ? void 0 : _l.map(pe => { var _a; return [pe === null || pe === void 0 ? void 0 : pe.rcsb_id, (_a = pe === null || pe === void 0 ? void 0 : pe.polymer_entity_instances) === null || _a === void 0 ? void 0 : _a.map(pei => pei === null || pei === void 0 ? void 0 : pei.rcsb_id)]; }).reduce((r, x) => r.set(x[0], x[1]), new Map())) !== null && _m !== void 0 ? _m : new Map(),
28
- structureDeterminationMethodology: r.rcsb_entry_info.structure_determination_methodology
31
+ structureDeterminationMethodology: r.rcsb_entry_info.structure_determination_methodology,
32
+ nonPolymerEntityToInstance: (_p = (_o = r.nonpolymer_entities) === null || _o === void 0 ? void 0 : _o.map(pe => { var _a; return [pe === null || pe === void 0 ? void 0 : pe.rcsb_id, (_a = pe === null || pe === void 0 ? void 0 : pe.nonpolymer_entity_instances) === null || _a === void 0 ? void 0 : _a.map(pei => pei === null || pei === void 0 ? void 0 : pei.rcsb_id)]; }).reduce((r, x) => r.set(x[0], x[1]), new Map())) !== null && _p !== void 0 ? _p : new Map(),
33
+ instanceToOperator: MultipleEntryPropertyCollector.instanceToOperator(r)
29
34
  };
30
35
  }
36
+ static instanceToOperator(r) {
37
+ const out = new Map();
38
+ assertDefined(r.assemblies);
39
+ r.assemblies.forEach(assembly => {
40
+ assertDefined(assembly === null || assembly === void 0 ? void 0 : assembly.rcsb_id), assertDefined(assembly === null || assembly === void 0 ? void 0 : assembly.pdbx_struct_assembly_gen);
41
+ out.set(assembly.rcsb_id, new Map());
42
+ assembly.pdbx_struct_assembly_gen.forEach(assemblyGen => {
43
+ assertDefined(assemblyGen === null || assemblyGen === void 0 ? void 0 : assemblyGen.oper_expression), assertElementListDefined(assemblyGen.asym_id_list);
44
+ const operators = assemblyGen.oper_expression.split(",");
45
+ const instances = assemblyGen.asym_id_list;
46
+ instances.forEach(asymId => {
47
+ var _a, _b, _c;
48
+ const instanceId = `${r.rcsb_id}.${asymId}`;
49
+ (_a = out.get(assembly.rcsb_id)) === null || _a === void 0 ? void 0 : _a.set(instanceId, [...operators, ...(_c = (_b = out.get(assembly.rcsb_id)) === null || _b === void 0 ? void 0 : _b.get(instanceId)) !== null && _c !== void 0 ? _c : []]);
50
+ });
51
+ });
52
+ });
53
+ return out;
54
+ }
31
55
  }
32
56
  exports.MultipleEntryPropertyCollector = MultipleEntryPropertyCollector;
@@ -16,7 +16,7 @@ class UiComponent extends react_1.default.Component {
16
16
  }
17
17
  (0, RcsbFvBuilder_1.buildSequenceIdentityAlignmentFv)("pfv", "5_30", undefined, {
18
18
  boardConfig: {
19
- selectionChangeCallBack: (selection) => {
19
+ selectionChangeCallback: (selection) => {
20
20
  console.log(selection);
21
21
  }
22
22
  },
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const RcsbFvBuilder_1 = require("../RcsbFvWeb/RcsbFvBuilder");
4
4
  (0, RcsbFvBuilder_1.buildUniprotEntityInstanceFv)("pfv", "P01112", "2UZI_3", "2UZI.C", { boardConfig: {
5
5
  trackWidth: 600,
6
- elementClickCallBack: (d) => {
6
+ elementClickCallback: (d) => {
7
7
  const div = document.getElementById("myDiv");
8
8
  if (!div)
9
9
  return;
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const RcsbFvBuilder_1 = require("../RcsbFvWeb/RcsbFvBuilder");
4
4
  (0, RcsbFvBuilder_1.buildMultipleAlignmentSequenceFv)("pfv", "select", "P01112", {}, {
5
5
  boardConfig: {
6
- selectionChangeCallBack: (s) => {
6
+ selectionChangeCallback: (s) => {
7
7
  console.log(">", s);
8
8
  }
9
9
  }
@@ -55,7 +55,8 @@ class SequenceTrackFactory {
55
55
  source: TrackUtils_1.TrackUtils.transformSourceFromTarget(id, c),
56
56
  provenanceName: TrackUtils_1.TrackUtils.getProvenanceConfigFormTarget(id, c).name,
57
57
  provenanceColor: TrackUtils_1.TrackUtils.getProvenanceConfigFormTarget(id, c).color,
58
- label: s
58
+ label: s,
59
+ name: `RES ${s}`
59
60
  };
60
61
  sequenceData.push(this.addAuthorResIds(o, {
61
62
  from: config.from,
@@ -83,6 +83,7 @@ export interface RcsbFvModuleInterface extends RcsbFvModulePublicInterface {
83
83
  display(): void;
84
84
  build(buildConfig: RcsbFvModuleBuildInterface): Promise<void>;
85
85
  setPolymerEntityInstanceTranslator(polymerEntityInstance: PolymerEntityInstanceTranslate): void;
86
+ getPolymerEntityInstanceTranslator(): PolymerEntityInstanceTranslate;
86
87
  }
87
88
  export interface RcsbFvModulePublicInterface<P extends {
88
89
  [k: string]: any;
@@ -99,5 +100,4 @@ export interface RcsbFvModulePublicInterface<P extends {
99
100
  getAnnotationConfigData(): Promise<Array<RcsbFvRowConfigInterface<P, S, R, M>>>;
100
101
  getFv(): RcsbFv<P, S, R, M>;
101
102
  wait(): Promise<void>;
102
- getPolymerEntityInstanceTranslator(): PolymerEntityInstanceTranslate;
103
103
  }
@@ -21,6 +21,7 @@ export interface ItemFeaturesInterface {
21
21
  }
22
22
  export declare class GroupMemberItem extends React.Component<GroupMemberItemInterface, {}> {
23
23
  private static readonly SEQUENCE_ALIGNMENT_3D_LINK;
24
+ private static readonly ICON_PROPS;
24
25
  render(): import("react/jsx-runtime").JSX.Element;
25
26
  }
26
27
  export {};
@@ -7,16 +7,22 @@ const react_1 = tslib_1.__importDefault(require("react"));
7
7
  const web_resources_json_1 = tslib_1.__importDefault(require("../../../RcsbServerConfig/web.resources.json"));
8
8
  const DwEnums_1 = require("@rcsb/rcsb-api-tools/build/RcsbDw/Types/DwEnums");
9
9
  const TagDelimiter_1 = require("@rcsb/rcsb-api-tools/build/RcsbUtils/TagDelimiter");
10
+ const bxs_cube_svg_1 = tslib_1.__importDefault(require("boxicons/svg/solid/bxs-cube.svg"));
10
11
  const NA = "N/A";
11
12
  class GroupMemberItem extends react_1.default.Component {
12
13
  render() {
13
14
  var _a;
14
15
  return ((0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsxs)("div", { style: { position: "relative", minHeight: 358 }, children: [imageIcon(this.props.item), (0, jsx_runtime_1.jsx)("img", { src: memberImgUrl(this.props.item, this.props.groupProvenanceId), alt: "image", style: { width: "100%" } })] }), (0, jsx_runtime_1.jsxs)("div", { className: "bg-light border-top p-md-4", children: [hasGroup3D(this.props.groupProvenanceId) ?
15
- (0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsxs)("strong", { children: [(0, jsx_runtime_1.jsx)("i", { className: "bx bxs-cube" }), " Explore in 3D"] }), ": ", (0, jsx_runtime_1.jsx)("a", { href: alignment1d3dUrl(this.props.groupId, this.props.searchQuery), children: GroupMemberItem.SEQUENCE_ALIGNMENT_3D_LINK })] }) : null, (0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("strong", { children: memberSummaryUrlText(this.props.item, this.props.groupProvenanceId) }), (0, jsx_runtime_1.jsx)("span", { children: " - " }), (0, jsx_runtime_1.jsx)("a", { href: memberSummaryUrl(this.props.item, this.props.groupProvenanceId), children: "Summary" }), (0, jsx_runtime_1.jsx)("span", { children: " | " }), (0, jsx_runtime_1.jsx)("a", { href: member3DViewUrl(this.props.item, this.props.groupProvenanceId), children: "Structure" })] }), (0, jsx_runtime_1.jsxs)("div", { style: { textOverflow: "ellipsis", whiteSpace: "nowrap", overflow: "hidden" }, title: this.props.item.name, children: [(0, jsx_runtime_1.jsx)("strong", { children: "Name: " }), this.props.item.name] }), (0, jsx_runtime_1.jsxs)("div", { style: { textOverflow: "ellipsis", whiteSpace: "nowrap", overflow: "hidden" }, children: [(0, jsx_runtime_1.jsx)("strong", { children: "Organism: " }), this.props.item.taxNames.join(", ")] }), (0, jsx_runtime_1.jsxs)("div", { style: { textOverflow: "ellipsis", whiteSpace: "nowrap", overflow: "hidden" }, title: this.props.item.experimentalMethod, children: [(0, jsx_runtime_1.jsx)("strong", { children: "Experimental Method: " }), (_a = this.props.item.experimentalMethod) !== null && _a !== void 0 ? _a : NA] }), ((0, jsx_runtime_1.jsxs)("div", { style: { textOverflow: "ellipsis", whiteSpace: "nowrap", overflow: "hidden" }, children: [(0, jsx_runtime_1.jsx)("strong", { children: "Resolution: " }), this.props.item.resolution ? `${this.props.item.resolution} Å` : NA] })), this.props.item.molecularWeight ? ((0, jsx_runtime_1.jsxs)("div", { style: { textOverflow: "ellipsis", whiteSpace: "nowrap", overflow: "hidden" }, children: [(0, jsx_runtime_1.jsx)("strong", { children: "Molecular Weight: " }), `${this.props.item.molecularWeight} kDa`] })) : null] })] }));
16
+ (0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)(bxs_cube_svg_1.default, Object.assign({}, GroupMemberItem.ICON_PROPS)), " ", (0, jsx_runtime_1.jsx)("strong", { children: "Explore in 3D" }), ": ", (0, jsx_runtime_1.jsx)("a", { href: alignment1d3dUrl(this.props.groupId, this.props.searchQuery), children: GroupMemberItem.SEQUENCE_ALIGNMENT_3D_LINK })] }) : null, (0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("strong", { children: memberSummaryUrlText(this.props.item, this.props.groupProvenanceId) }), (0, jsx_runtime_1.jsx)("span", { children: " - " }), (0, jsx_runtime_1.jsx)("a", { href: memberSummaryUrl(this.props.item, this.props.groupProvenanceId), children: "Summary" }), (0, jsx_runtime_1.jsx)("span", { children: " | " }), (0, jsx_runtime_1.jsx)("a", { href: member3DViewUrl(this.props.item, this.props.groupProvenanceId), children: "Structure" })] }), (0, jsx_runtime_1.jsxs)("div", { style: { textOverflow: "ellipsis", whiteSpace: "nowrap", overflow: "hidden" }, title: this.props.item.name, children: [(0, jsx_runtime_1.jsx)("strong", { children: "Name: " }), this.props.item.name] }), (0, jsx_runtime_1.jsxs)("div", { style: { textOverflow: "ellipsis", whiteSpace: "nowrap", overflow: "hidden" }, children: [(0, jsx_runtime_1.jsx)("strong", { children: "Organism: " }), this.props.item.taxNames.join(", ")] }), (0, jsx_runtime_1.jsxs)("div", { style: { textOverflow: "ellipsis", whiteSpace: "nowrap", overflow: "hidden" }, title: this.props.item.experimentalMethod, children: [(0, jsx_runtime_1.jsx)("strong", { children: "Experimental Method: " }), (_a = this.props.item.experimentalMethod) !== null && _a !== void 0 ? _a : NA] }), ((0, jsx_runtime_1.jsxs)("div", { style: { textOverflow: "ellipsis", whiteSpace: "nowrap", overflow: "hidden" }, children: [(0, jsx_runtime_1.jsx)("strong", { children: "Resolution: " }), this.props.item.resolution ? `${this.props.item.resolution} Å` : NA] })), this.props.item.molecularWeight ? ((0, jsx_runtime_1.jsxs)("div", { style: { textOverflow: "ellipsis", whiteSpace: "nowrap", overflow: "hidden" }, children: [(0, jsx_runtime_1.jsx)("strong", { children: "Molecular Weight: " }), `${this.props.item.molecularWeight} kDa`] })) : null] })] }));
16
17
  }
17
18
  }
18
19
  exports.GroupMemberItem = GroupMemberItem;
19
20
  GroupMemberItem.SEQUENCE_ALIGNMENT_3D_LINK = "Sequence Alignments";
21
+ GroupMemberItem.ICON_PROPS = {
22
+ width: 15,
23
+ height: 15,
24
+ viewBox: "0 0 24 24"
25
+ };
20
26
  function memberImgUrl(ei, groupProvenanceId) {
21
27
  if (groupProvenanceId === DwEnums_1.GroupProvenanceId.ProvenanceMatchingDepositGroupId)
22
28
  return web_resources_json_1.default.rcsb_cdn.url + ei.entryId.toLowerCase().substring(1, 3) + "/" + ei.entryId.toLowerCase() + "/" + ei.entryId.toLowerCase() + "_model-1.jpeg";
@@ -17,6 +17,19 @@ query multiple_entries_properties($entry_ids: [String!]!){
17
17
  rcsb_id
18
18
  }
19
19
  }
20
+ nonpolymer_entities {
21
+ rcsb_id
22
+ rcsb_nonpolymer_entity_container_identifiers {
23
+ entity_id
24
+ rcsb_id
25
+ }
26
+ nonpolymer_entity_instances {
27
+ rcsb_nonpolymer_entity_instance_container_identifiers {
28
+ asym_id
29
+ }
30
+ rcsb_id
31
+ }
32
+ }
20
33
  rcsb_entry_info{
21
34
  experimental_method
22
35
  resolution_combined
@@ -26,5 +39,12 @@ query multiple_entries_properties($entry_ids: [String!]!){
26
39
  struct {
27
40
  title
28
41
  }
42
+ assemblies {
43
+ rcsb_id
44
+ pdbx_struct_assembly_gen {
45
+ oper_expression
46
+ asym_id_list
47
+ }
48
+ }
29
49
  }
30
50
  }
@@ -70,7 +70,7 @@ function groupExternalTrackBuilder() {
70
70
  const logoRowData = querySequenceLogo.map((s, n) => ({
71
71
  begin: n + 1,
72
72
  label: s.mode(),
73
- description: [s.frequency().filter(s => (s.value >= 0.01)).map(s => (s.symbol.replace("-", "gap") + ": " + Math.trunc(s.value * 100) / 100)).join(", ")]
73
+ description: [s.frequency().filter(s => (s.value >= 0.01)).slice(0, 14).map(s => (s.symbol.replace("-", "gap") + ": " + Math.trunc(s.value * 100) / 100)).join(", ")]
74
74
  }));
75
75
  variationRowData = [{
76
76
  trackId: "annotationTrack_ALIGNMENT_FREQ",
@@ -5,7 +5,6 @@
5
5
 
6
6
  @include styleVars.bootstrapRoot;
7
7
  @include meta.load-css("bootstrap/dist/css/bootstrap.min");
8
- @include meta.load-css("~boxicons/css/boxicons.min");
9
8
 
10
9
  a {
11
10
  color: #337ab7;
@@ -5,7 +5,6 @@
5
5
 
6
6
  @include styleVars.bootstrapRoot;
7
7
  @include meta.load-css("bootstrap/dist/css/bootstrap.min");
8
- @include meta.load-css("~boxicons/css/boxicons.min");
9
8
 
10
9
  a {
11
10
  color: #337ab7;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rcsb/rcsb-saguaro-app",
3
- "version": "6.0.0-development.8",
3
+ "version": "6.0.0",
4
4
  "description": "RCSB 1D Saguaro Web App",
5
5
  "main": "build/app.js",
6
6
  "files": [
@@ -24,10 +24,10 @@
24
24
  "build-tsc": "tsc",
25
25
  "build-commonjs": "tsc --build tsconfig.commonjs.json",
26
26
  "clean": "del-cli lib && del-cli build",
27
- "buildDoc": "typedoc --excludeExternals --externalPattern \"**/node_modules/**\" --plugin typedoc-plugin-missing-exports ./src/app.ts && sed -i '' '/---/d' docs/index.html",
27
+ "buildDoc": "typedoc --excludeExternals --externalPattern \"**/node_modules/**\" --plugin typedoc-plugin-missing-exports --plugin typedoc-theme-hierarchy --theme hierarchy --entryPointStrategy expand ./src && sed -i '' '/---/d' docs/index.html",
28
28
  "cpExamples": "ncp examples docs/examples",
29
29
  "buildAllDoc": "npm run buildDoc && npm run cpExamples",
30
- "publishApp": "npm publish --tag development",
30
+ "publishApp": "npm publish",
31
31
  "test": "echo \"Error: no test specified\" && exit 1"
32
32
  },
33
33
  "repository": {
@@ -54,6 +54,7 @@
54
54
  "@babel/core": "^7.23.2",
55
55
  "@babel/plugin-proposal-class-properties": "^7.17.12",
56
56
  "@babel/preset-env": "^7.23.2",
57
+ "@svgr/webpack": "^8.1.0",
57
58
  "@types/lodash": "^4.14.200",
58
59
  "@types/lodash.range": "^3.2.8",
59
60
  "@types/object-hash": "^3.0.5",
@@ -82,6 +83,7 @@
82
83
  "ts-node": "^10.9.1",
83
84
  "typedoc": "^0.25.3",
84
85
  "typedoc-plugin-missing-exports": "^2.1.0",
86
+ "typedoc-theme-hierarchy": "^4.1.2",
85
87
  "typescript": "^5.2.2",
86
88
  "uniqid": "^5.4.0",
87
89
  "webpack": "^5.89.0",
@@ -95,13 +97,12 @@
95
97
  "ideogram": "^1.44.1",
96
98
  "react-bootstrap": "^2.8.0",
97
99
  "react-select": "^5.7.7",
98
- "resolve-url-loader": "^5.0.0",
99
100
  "rxjs": "^7.8.1",
100
101
  "string-to-color": "^2.2.2"
101
102
  },
102
103
  "peerDependencies": {
103
104
  "@rcsb/rcsb-api-tools": "^4.1.13",
104
- "@rcsb/rcsb-saguaro": "^3.0.0-development.5",
105
+ "@rcsb/rcsb-saguaro": "^3.0.3",
105
106
  "boxicons": "^2.1.0",
106
107
  "react": "^18.1.0",
107
108
  "react-dom": "^18.1.0"
Binary file