react-msaview 4.4.6 → 4.5.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 (118) hide show
  1. package/bundle/index.js +9 -9
  2. package/bundle/index.js.LICENSE.txt +8 -8
  3. package/bundle/index.js.map +1 -1
  4. package/dist/colorSchemes.d.ts +0 -6
  5. package/dist/colorSchemes.js +1 -119
  6. package/dist/colorSchemes.js.map +1 -1
  7. package/dist/components/ConservationTrack.d.ts +8 -0
  8. package/dist/components/ConservationTrack.js +54 -0
  9. package/dist/components/ConservationTrack.js.map +1 -0
  10. package/dist/components/Loading.js +14 -2
  11. package/dist/components/Loading.js.map +1 -1
  12. package/dist/components/MSAView.js +36 -0
  13. package/dist/components/MSAView.js.map +1 -1
  14. package/dist/components/SequenceTextArea.js +3 -2
  15. package/dist/components/SequenceTextArea.js.map +1 -1
  16. package/dist/components/TextTrack.d.ts +3 -3
  17. package/dist/components/TextTrack.js +4 -1
  18. package/dist/components/TextTrack.js.map +1 -1
  19. package/dist/components/Track.js +21 -8
  20. package/dist/components/Track.js.map +1 -1
  21. package/dist/components/dialogs/ExportSVGDialog.js +19 -3
  22. package/dist/components/dialogs/ExportSVGDialog.js.map +1 -1
  23. package/dist/components/header/GappynessSlider.d.ts +6 -0
  24. package/dist/components/header/GappynessSlider.js +19 -0
  25. package/dist/components/header/GappynessSlider.js.map +1 -0
  26. package/dist/components/header/Header.js +3 -1
  27. package/dist/components/header/Header.js.map +1 -1
  28. package/dist/components/header/HeaderMenu.js +30 -14
  29. package/dist/components/header/HeaderMenu.js.map +1 -1
  30. package/dist/components/minimap/MinimapSVG.js +4 -3
  31. package/dist/components/minimap/MinimapSVG.js.map +1 -1
  32. package/dist/components/msa/MSACanvasBlock.js +56 -42
  33. package/dist/components/msa/MSACanvasBlock.js.map +1 -1
  34. package/dist/components/msa/renderMSABlock.js +53 -10
  35. package/dist/components/msa/renderMSABlock.js.map +1 -1
  36. package/dist/components/tracks/renderTracksSvg.d.ts +29 -0
  37. package/dist/components/tracks/renderTracksSvg.js +83 -0
  38. package/dist/components/tracks/renderTracksSvg.js.map +1 -0
  39. package/dist/components/tree/TreeNodeMenu.js +2 -2
  40. package/dist/components/tree/TreeNodeMenu.js.map +1 -1
  41. package/dist/components/tree/renderTreeCanvas.js +1 -1
  42. package/dist/components/tree/renderTreeCanvas.js.map +1 -1
  43. package/dist/constants.d.ts +22 -0
  44. package/dist/constants.js +26 -0
  45. package/dist/constants.js.map +1 -0
  46. package/dist/layout.js.map +1 -1
  47. package/dist/model/msaModel.js +3 -2
  48. package/dist/model/msaModel.js.map +1 -1
  49. package/dist/model/treeModel.js +9 -8
  50. package/dist/model/treeModel.js.map +1 -1
  51. package/dist/model.d.ts +256 -15
  52. package/dist/model.js +408 -128
  53. package/dist/model.js.map +1 -1
  54. package/dist/neighborJoining.d.ts +1 -0
  55. package/dist/neighborJoining.js +839 -0
  56. package/dist/neighborJoining.js.map +1 -0
  57. package/dist/neighborJoining.test.d.ts +1 -0
  58. package/dist/neighborJoining.test.js +110 -0
  59. package/dist/neighborJoining.test.js.map +1 -0
  60. package/dist/parsers/A3mMSA.d.ts +43 -0
  61. package/dist/parsers/A3mMSA.js +277 -0
  62. package/dist/parsers/A3mMSA.js.map +1 -0
  63. package/dist/parsers/A3mMSA.test.d.ts +1 -0
  64. package/dist/parsers/A3mMSA.test.js +138 -0
  65. package/dist/parsers/A3mMSA.test.js.map +1 -0
  66. package/dist/parsers/ClustalMSA.d.ts +4 -4
  67. package/dist/parsers/ClustalMSA.js +3 -1
  68. package/dist/parsers/ClustalMSA.js.map +1 -1
  69. package/dist/parsers/FastaMSA.js +17 -16
  70. package/dist/parsers/FastaMSA.js.map +1 -1
  71. package/dist/renderToSvg.d.ts +1 -0
  72. package/dist/renderToSvg.js +48 -18
  73. package/dist/renderToSvg.js.map +1 -1
  74. package/dist/rowCoordinateCalculations.js +2 -0
  75. package/dist/rowCoordinateCalculations.js.map +1 -1
  76. package/dist/types.d.ts +2 -3
  77. package/dist/util.js +17 -9
  78. package/dist/util.js.map +1 -1
  79. package/dist/version.d.ts +1 -1
  80. package/dist/version.js +1 -1
  81. package/package.json +6 -6
  82. package/src/colorSchemes.ts +1 -179
  83. package/src/components/ConservationTrack.tsx +104 -0
  84. package/src/components/Loading.tsx +44 -2
  85. package/src/components/MSAView.tsx +68 -0
  86. package/src/components/SequenceTextArea.tsx +3 -2
  87. package/src/components/TextTrack.tsx +7 -4
  88. package/src/components/Track.tsx +25 -9
  89. package/src/components/dialogs/ExportSVGDialog.tsx +25 -1
  90. package/src/components/header/GappynessSlider.tsx +35 -0
  91. package/src/components/header/Header.tsx +3 -1
  92. package/src/components/header/HeaderMenu.tsx +36 -15
  93. package/src/components/minimap/MinimapSVG.tsx +6 -3
  94. package/src/components/msa/MSACanvasBlock.tsx +66 -48
  95. package/src/components/msa/renderMSABlock.ts +82 -22
  96. package/src/components/tracks/renderTracksSvg.ts +157 -0
  97. package/src/components/tree/TreeNodeMenu.tsx +2 -2
  98. package/src/components/tree/renderTreeCanvas.ts +1 -1
  99. package/src/constants.ts +27 -0
  100. package/src/layout.ts +1 -6
  101. package/src/model/msaModel.ts +4 -2
  102. package/src/model/treeModel.ts +19 -8
  103. package/src/model.ts +496 -140
  104. package/src/neighborJoining.test.ts +129 -0
  105. package/src/neighborJoining.ts +885 -0
  106. package/src/parsers/A3mMSA.test.ts +164 -0
  107. package/src/parsers/A3mMSA.ts +321 -0
  108. package/src/parsers/ClustalMSA.ts +7 -5
  109. package/src/parsers/FastaMSA.ts +17 -17
  110. package/src/renderToSvg.tsx +105 -26
  111. package/src/rowCoordinateCalculations.ts +2 -0
  112. package/src/types.ts +2 -4
  113. package/src/util.ts +21 -8
  114. package/src/version.ts +1 -1
  115. package/dist/components/dialogs/TracklistDialog.d.ts +0 -7
  116. package/dist/components/dialogs/TracklistDialog.js +0 -23
  117. package/dist/components/dialogs/TracklistDialog.js.map +0 -1
  118. package/src/components/dialogs/TracklistDialog.tsx +0 -73
@@ -5,12 +5,12 @@ export default class ClustalMSA {
5
5
  getMSA(): {
6
6
  consensus: string;
7
7
  alns: {
8
- id: string;
8
+ id: string | undefined;
9
9
  seq: string;
10
10
  }[];
11
11
  header: {
12
12
  info: string;
13
- version: string;
13
+ version: string | undefined;
14
14
  };
15
15
  };
16
16
  getRow(name: string): string;
@@ -18,9 +18,9 @@ export default class ClustalMSA {
18
18
  getRowData(): undefined;
19
19
  getHeader(): {
20
20
  info: string;
21
- version: string;
21
+ version: string | undefined;
22
22
  };
23
- getNames(): string[];
23
+ getNames(): (string | undefined)[];
24
24
  getStructures(): {};
25
25
  get alignmentNames(): never[];
26
26
  getTree(): NodeWithIds;
@@ -33,7 +33,9 @@ export default class ClustalMSA {
33
33
  id: 'root',
34
34
  name: 'root',
35
35
  noTree: true,
36
- children: this.getNames().map(name => ({
36
+ children: this.getNames()
37
+ .filter((name) => name !== undefined)
38
+ .map(name => ({
37
39
  id: name,
38
40
  name,
39
41
  children: [],
@@ -1 +1 @@
1
- {"version":3,"file":"ClustalMSA.js","sourceRoot":"","sources":["../../src/parsers/ClustalMSA.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAIlC,MAAM,CAAC,OAAO,OAAO,UAAU;IACrB,GAAG,CAA0B;IAErC,YAAY,IAAY;QACtB,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,CAAA;IACxB,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAC,GAAG,CAAA;IACjB,CAAC;IAED,MAAM,CAAC,IAAY;QACjB,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,GAAG,IAAI,EAAE,CAAA;IAC9D,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAE,CAAC,GAAG,CAAC,MAAM,CAAA;IACrC,CAAC;IAED,UAAU;QACR,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAA;IACxB,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IACzC,CAAC;IAED,aAAa;QACX,OAAO,EAAE,CAAA;IACX,CAAC;IAED,IAAI,cAAc;QAChB,OAAO,EAAE,CAAA;IACX,CAAC;IAED,OAAO;QACL,OAAO;YACL,EAAE,EAAE,MAAM;YACV,IAAI,EAAE,MAAM;YACZ,MAAM,EAAE,IAAI;YACZ,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACrC,EAAE,EAAE,IAAI;gBACR,IAAI;gBACJ,QAAQ,EAAE,EAAE;aACb,CAAC,CAAC;SACJ,CAAA;IACH,CAAC;IAED,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,CAAA;IAC3B,CAAC;IACD,IAAI,2BAA2B;QAC7B,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,IAAI,MAAM;QACR,OAAO,EAAE,CAAA;IACX,CAAC;CACF"}
1
+ {"version":3,"file":"ClustalMSA.js","sourceRoot":"","sources":["../../src/parsers/ClustalMSA.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAIlC,MAAM,CAAC,OAAO,OAAO,UAAU;IACrB,GAAG,CAA0B;IAErC,YAAY,IAAY;QACtB,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,CAAA;IACxB,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAC,GAAG,CAAA;IACjB,CAAC;IAED,MAAM,CAAC,IAAY;QACjB,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,GAAG,IAAI,EAAE,CAAA;IAC9D,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAE,CAAC,GAAG,CAAC,MAAM,CAAA;IACrC,CAAC;IAED,UAAU;QACR,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAA;IACxB,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IACzC,CAAC;IAED,aAAa;QACX,OAAO,EAAE,CAAA;IACX,CAAC;IAED,IAAI,cAAc;QAChB,OAAO,EAAE,CAAA;IACX,CAAC;IAED,OAAO;QACL,OAAO;YACL,EAAE,EAAE,MAAM;YACV,IAAI,EAAE,MAAM;YACZ,MAAM,EAAE,IAAI;YACZ,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;iBACtB,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,IAAI,KAAK,SAAS,CAAC;iBACpD,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACZ,EAAE,EAAE,IAAI;gBACR,IAAI;gBACJ,QAAQ,EAAE,EAAE;aACb,CAAC,CAAC;SACN,CAAA;IACH,CAAC;IAED,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,CAAA;IAC3B,CAAC;IACD,IAAI,2BAA2B;QAC7B,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,IAAI,MAAM;QACR,OAAO,EAAE,CAAA;IACX,CAAC;CACF"}
@@ -1,22 +1,23 @@
1
- function parseSmallFasta(text) {
2
- return text
3
- .split('>')
4
- .filter(t => /\S/.test(t))
5
- .map(entryText => {
6
- const [defLine, ...seqLines] = entryText.split('\n');
7
- const [id, ...description] = defLine.split(' ');
8
- const descriptionStr = description.join(' ');
9
- const seqLinesStr = seqLines.join('');
10
- const sequence = seqLinesStr.replaceAll(/\s/g, '');
11
- return { id, description: descriptionStr, sequence };
12
- });
13
- }
14
1
  export default class FastaMSA {
15
2
  MSA;
16
3
  constructor(text) {
17
- this.MSA = {
18
- seqdata: Object.fromEntries(parseSmallFasta(text).map(m => [m.id, m.sequence])),
19
- };
4
+ const seqdata = {};
5
+ for (const entry of text.split('>')) {
6
+ if (!/\S/.test(entry)) {
7
+ continue;
8
+ }
9
+ const newlineIdx = entry.indexOf('\n');
10
+ if (newlineIdx === -1) {
11
+ continue;
12
+ }
13
+ const defLine = entry.slice(0, newlineIdx);
14
+ const spaceIdx = defLine.indexOf(' ');
15
+ const id = spaceIdx === -1 ? defLine : defLine.slice(0, spaceIdx);
16
+ if (id) {
17
+ seqdata[id] = entry.slice(newlineIdx + 1).replaceAll(/\s/g, '');
18
+ }
19
+ }
20
+ this.MSA = { seqdata };
20
21
  }
21
22
  getMSA() {
22
23
  return this.MSA;
@@ -1 +1 @@
1
- {"version":3,"file":"FastaMSA.js","sourceRoot":"","sources":["../../src/parsers/FastaMSA.ts"],"names":[],"mappings":"AAEA,SAAS,eAAe,CAAC,IAAY;IACnC,OAAO,IAAI;SACR,KAAK,CAAC,GAAG,CAAC;SACV,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SACzB,GAAG,CAAC,SAAS,CAAC,EAAE;QACf,MAAM,CAAC,OAAO,EAAE,GAAG,QAAQ,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QACpD,MAAM,CAAC,EAAE,EAAE,GAAG,WAAW,CAAC,GAAG,OAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QAChD,MAAM,cAAc,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAC5C,MAAM,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACrC,MAAM,QAAQ,GAAG,WAAW,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;QAClD,OAAO,EAAE,EAAE,EAAE,WAAW,EAAE,cAAc,EAAE,QAAQ,EAAE,CAAA;IACtD,CAAC,CAAC,CAAA;AACN,CAAC;AACD,MAAM,CAAC,OAAO,OAAO,QAAQ;IACnB,GAAG,CAAqC;IAChD,YAAY,IAAY;QACtB,IAAI,CAAC,GAAG,GAAG;YACT,OAAO,EAAE,MAAM,CAAC,WAAW,CACzB,eAAe,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CACnD;SACF,CAAA;IACH,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAC,GAAG,CAAA;IACjB,CAAC;IAED,UAAU;QACR,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,QAAQ;QACN,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;IACtC,CAAC;IAED,MAAM,CAAC,IAAY;QACjB,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAA;IACrC,CAAC;IAED,QAAQ;QACN,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAE,CAAA;QAC9C,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAA;IACjC,CAAC;IAED,aAAa;QACX,OAAO,EAAE,CAAA;IACX,CAAC;IAED,IAAI,cAAc;QAChB,OAAO,EAAE,CAAA;IACX,CAAC;IAED,SAAS;QACP,OAAO,EAAE,CAAA;IACX,CAAC;IAED,OAAO;QACL,OAAO;YACL,EAAE,EAAE,MAAM;YACV,IAAI,EAAE,MAAM;YACZ,MAAM,EAAE,IAAI;YACZ,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACrC,EAAE,EAAE,IAAI;gBACR,QAAQ,EAAE,EAAE;gBACZ,IAAI;aACL,CAAC,CAAC;SACJ,CAAA;IACH,CAAC;IAED,IAAI,YAAY;QACd,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,IAAI,2BAA2B;QAC7B,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,IAAI,MAAM;QACR,OAAO,EAAE,CAAA;IACX,CAAC;CACF"}
1
+ {"version":3,"file":"FastaMSA.js","sourceRoot":"","sources":["../../src/parsers/FastaMSA.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,OAAO,OAAO,QAAQ;IACnB,GAAG,CAAqC;IAEhD,YAAY,IAAY;QACtB,MAAM,OAAO,GAA2B,EAAE,CAAA;QAC1C,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;YACpC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBACtB,SAAQ;YACV,CAAC;YACD,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;YACtC,IAAI,UAAU,KAAK,CAAC,CAAC,EAAE,CAAC;gBACtB,SAAQ;YACV,CAAC;YACD,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAA;YAC1C,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;YACrC,MAAM,EAAE,GAAG,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAA;YACjE,IAAI,EAAE,EAAE,CAAC;gBACP,OAAO,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;YACjE,CAAC;QACH,CAAC;QACD,IAAI,CAAC,GAAG,GAAG,EAAE,OAAO,EAAE,CAAA;IACxB,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAC,GAAG,CAAA;IACjB,CAAC;IAED,UAAU;QACR,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,QAAQ;QACN,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;IACtC,CAAC;IAED,MAAM,CAAC,IAAY;QACjB,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAA;IACrC,CAAC;IAED,QAAQ;QACN,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAE,CAAA;QAC9C,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAA;IACjC,CAAC;IAED,aAAa;QACX,OAAO,EAAE,CAAA;IACX,CAAC;IAED,IAAI,cAAc;QAChB,OAAO,EAAE,CAAA;IACX,CAAC;IAED,SAAS;QACP,OAAO,EAAE,CAAA;IACX,CAAC;IAED,OAAO;QACL,OAAO;YACL,EAAE,EAAE,MAAM;YACV,IAAI,EAAE,MAAM;YACZ,MAAM,EAAE,IAAI;YACZ,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACrC,EAAE,EAAE,IAAI;gBACR,QAAQ,EAAE,EAAE;gBACZ,IAAI;aACL,CAAC,CAAC;SACJ,CAAA;IACH,CAAC;IAED,IAAI,YAAY;QACd,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,IAAI,2BAA2B;QAC7B,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,IAAI,MAAM;QACR,OAAO,EAAE,CAAA;IACX,CAAC;CACF"}
@@ -3,6 +3,7 @@ import type { Theme } from '@mui/material';
3
3
  export interface ExportSvgOptions {
4
4
  theme: Theme;
5
5
  includeMinimap?: boolean;
6
+ includeTracks?: boolean;
6
7
  exportType: string;
7
8
  }
8
9
  export declare function renderToSvg(model: MsaViewModel, opts: ExportSvgOptions): Promise<string>;
@@ -5,56 +5,66 @@ import { when } from 'mobx';
5
5
  import MinimapSVG from './components/minimap/MinimapSVG';
6
6
  import { renderBoxFeatureCanvasBlock } from './components/msa/renderBoxFeatureCanvasBlock';
7
7
  import { renderMSABlock } from './components/msa/renderMSABlock';
8
+ import { renderAllTracks } from './components/tracks/renderTracksSvg';
8
9
  import { renderTreeCanvas } from './components/tree/renderTreeCanvas';
9
10
  import { colorContrast } from './util';
10
11
  export async function renderToSvg(model, opts) {
11
12
  await when(() => !!model.dataInitialized);
12
- const { width, height, scrollX, scrollY } = model;
13
- const { exportType, theme, includeMinimap } = opts;
13
+ const { width, height, scrollX, scrollY, totalTrackAreaHeight } = model;
14
+ const { exportType, theme, includeMinimap, includeTracks } = opts;
15
+ const trackHeight = includeTracks ? totalTrackAreaHeight : 0;
14
16
  if (exportType === 'entire') {
15
17
  return render({
16
18
  width: model.totalWidth + model.treeAreaWidth,
17
- height: model.totalHeight,
19
+ height: model.totalHeight + trackHeight,
20
+ contentHeight: model.totalHeight,
21
+ trackHeight,
18
22
  theme,
19
23
  model,
20
24
  offsetY: 0,
21
25
  offsetX: 0,
22
26
  includeMinimap,
27
+ includeTracks,
23
28
  });
24
29
  }
25
30
  if (exportType === 'viewport') {
26
31
  return render({
27
32
  width,
28
- height,
33
+ height: height + (includeMinimap ? model.minimapHeight : 0) + trackHeight,
34
+ contentHeight: height,
35
+ trackHeight,
29
36
  theme,
30
37
  model,
31
- offsetY: scrollY,
38
+ offsetY: -scrollY,
32
39
  offsetX: -scrollX,
33
40
  includeMinimap,
41
+ includeTracks,
34
42
  });
35
43
  }
36
44
  throw new Error('unknown export type');
37
45
  }
38
- async function render({ width, height, offsetX, offsetY, theme, model, includeMinimap, }) {
46
+ async function render({ width, height, contentHeight, trackHeight, offsetX, offsetY, theme, model, includeMinimap, includeTracks, }) {
39
47
  const { Context } = await import('svgcanvas');
40
48
  const Wrapper = includeMinimap ? MinimapWrapper : NullWrapper;
41
49
  return renderToStaticMarkup(React.createElement(SvgWrapper, { width: width, height: height },
42
50
  React.createElement(Wrapper, { model: model },
43
- React.createElement(CoreRendering, { Context: Context, model: model, theme: theme, offsetX: offsetX, offsetY: offsetY, width: width, height: height }))));
51
+ includeTracks && trackHeight > 0 ? (React.createElement(TrackRendering, { Context: Context, model: model, theme: theme, offsetX: offsetX, width: width, trackHeight: trackHeight })) : null,
52
+ React.createElement("g", { transform: trackHeight > 0 ? `translate(0 ${trackHeight})` : undefined },
53
+ React.createElement(CoreRendering, { Context: Context, model: model, theme: theme, offsetX: offsetX, offsetY: offsetY, width: width, contentHeight: contentHeight })))));
44
54
  }
45
- function CoreRendering({ model, theme, width, height, offsetX, offsetY, Context, }) {
46
- const clipId1 = 'tree';
47
- const clipId2 = 'msa';
48
- const { treeAreaWidth, colorScheme } = model;
55
+ function CoreRendering({ model, theme, width, contentHeight, offsetX, offsetY, Context, }) {
56
+ const { treeAreaWidth, colorScheme, id } = model;
57
+ const clipId1 = `tree-${id}`;
58
+ const clipId2 = `msa-${id}`;
49
59
  const contrastScheme = colorContrast(colorScheme, theme);
50
- const ctx1 = Context(width, height);
51
- const ctx2 = Context(width, height);
60
+ const ctx1 = Context(width, contentHeight);
61
+ const ctx2 = Context(width, contentHeight);
52
62
  renderBoxFeatureCanvasBlock({
53
63
  ctx: ctx2,
54
64
  offsetX,
55
65
  offsetY,
56
66
  model,
57
- blockSizeYOverride: height,
67
+ blockSizeYOverride: contentHeight,
58
68
  highResScaleFactorOverride: 1,
59
69
  });
60
70
  const msaAreaWidth = width - treeAreaWidth;
@@ -63,7 +73,7 @@ function CoreRendering({ model, theme, width, height, offsetX, offsetY, Context,
63
73
  offsetY,
64
74
  ctx: ctx1,
65
75
  theme,
66
- blockSizeYOverride: height,
76
+ blockSizeYOverride: contentHeight,
67
77
  highResScaleFactorOverride: 1,
68
78
  });
69
79
  renderMSABlock({
@@ -74,19 +84,39 @@ function CoreRendering({ model, theme, width, height, offsetX, offsetY, Context,
74
84
  contrastScheme,
75
85
  ctx: ctx2,
76
86
  blockSizeXOverride: msaAreaWidth,
77
- blockSizeYOverride: height,
87
+ blockSizeYOverride: contentHeight,
78
88
  highResScaleFactorOverride: 1,
79
89
  });
80
90
  return (React.createElement(React.Fragment, null,
81
91
  React.createElement("defs", null,
82
92
  React.createElement("clipPath", { id: clipId1 },
83
- React.createElement("rect", { x: 0, y: 0, width: treeAreaWidth, height: height }))),
93
+ React.createElement("rect", { x: 0, y: 0, width: treeAreaWidth, height: contentHeight }))),
84
94
  React.createElement("defs", null,
85
95
  React.createElement("clipPath", { id: clipId2 },
86
- React.createElement("rect", { x: 0, y: 0, width: msaAreaWidth, height: height }))),
96
+ React.createElement("rect", { x: 0, y: 0, width: msaAreaWidth, height: contentHeight }))),
87
97
  React.createElement("g", { clipPath: `url(#${clipId1})`, dangerouslySetInnerHTML: { __html: ctx1.getSvg().innerHTML } }),
88
98
  React.createElement("g", { clipPath: `url(#${clipId2})`, transform: `translate(${treeAreaWidth} 0)`, dangerouslySetInnerHTML: { __html: ctx2.getSvg().innerHTML } })));
89
99
  }
100
+ function TrackRendering({ model, theme, width, trackHeight, offsetX, Context, }) {
101
+ const { treeAreaWidth, colorScheme, id } = model;
102
+ const clipId = `tracks-${id}`;
103
+ const contrastScheme = colorContrast(colorScheme, theme);
104
+ const msaAreaWidth = width - treeAreaWidth;
105
+ const ctx = Context(msaAreaWidth, trackHeight);
106
+ renderAllTracks({
107
+ model,
108
+ ctx,
109
+ offsetX,
110
+ contrastScheme,
111
+ blockSizeXOverride: msaAreaWidth,
112
+ highResScaleFactorOverride: 1,
113
+ });
114
+ return (React.createElement("g", { transform: `translate(${treeAreaWidth} 0)` },
115
+ React.createElement("defs", null,
116
+ React.createElement("clipPath", { id: clipId },
117
+ React.createElement("rect", { x: 0, y: 0, width: msaAreaWidth, height: trackHeight }))),
118
+ React.createElement("g", { clipPath: `url(#${clipId})`, dangerouslySetInnerHTML: { __html: ctx.getSvg().innerHTML } })));
119
+ }
90
120
  function MinimapWrapper({ model, children, }) {
91
121
  const { minimapHeight, treeAreaWidth } = model;
92
122
  return (React.createElement(React.Fragment, null,
@@ -1 +1 @@
1
- {"version":3,"file":"renderToSvg.js","sourceRoot":"","sources":["../src/renderToSvg.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"renderToSvg.js","sourceRoot":"","sources":["../src/renderToSvg.tsx"],"names":[],"mappings":"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"}
@@ -7,6 +7,8 @@ export function mouseOverCoordToGlobalCoord(blanks, position) {
7
7
  // Iterate until we reach the target mouse position
8
8
  while (mousePosition < position) {
9
9
  // Skip any blank positions in the sequence
10
+ // Check if the next position (globalPosition + 1) is blank by comparing
11
+ // blanks[blankArrayIndex] - 1 with current globalPosition
10
12
  while (blankArrayIndex < blanksLen &&
11
13
  blanks[blankArrayIndex] - 1 === globalPosition) {
12
14
  blankArrayIndex++;
@@ -1 +1 @@
1
- {"version":3,"file":"rowCoordinateCalculations.js","sourceRoot":"","sources":["../src/rowCoordinateCalculations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAA;AAEhC,MAAM,UAAU,2BAA2B,CACzC,MAAgB,EAChB,QAAgB;IAEhB,IAAI,aAAa,GAAG,CAAC,CAAA,CAAC,wCAAwC;IAC9D,IAAI,eAAe,GAAG,CAAC,CAAA,CAAC,oCAAoC;IAC5D,IAAI,cAAc,GAAG,CAAC,CAAA,CAAC,gDAAgD;IACvE,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAA;IAE/B,mDAAmD;IACnD,OAAO,aAAa,GAAG,QAAQ,EAAE,CAAC;QAChC,2CAA2C;QAC3C,OACE,eAAe,GAAG,SAAS;YAC3B,MAAM,CAAC,eAAe,CAAE,GAAG,CAAC,KAAK,cAAc,EAC/C,CAAC;YACD,eAAe,EAAE,CAAA;YACjB,cAAc,EAAE,CAAA;QAClB,CAAC;QAED,wBAAwB;QACxB,aAAa,EAAE,CAAA;QACf,cAAc,EAAE,CAAA;IAClB,CAAC;IAED,OAAO,cAAc,CAAA;AACvB,CAAC;AAED,MAAM,UAAU,6BAA6B,CAAC,GAAW,EAAE,QAAgB;IACzE,4CAA4C;IAC5C,IAAI,WAAW,GAAG,CAAC,CAAA;IACnB,8BAA8B;IAC9B,IAAI,eAAe,GAAG,CAAC,CAAA;IACvB,MAAM,cAAc,GAAG,GAAG,CAAC,MAAM,CAAA;IAEjC,gEAAgE;IAChE,OAAO,eAAe,GAAG,QAAQ,IAAI,eAAe,GAAG,cAAc,EAAE,CAAC;QACtE,mEAAmE;QACnE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC;YACnC,WAAW,EAAE,CAAA;QACf,CAAC;QACD,eAAe,EAAE,CAAA;IACnB,CAAC;IAED,OAAO,WAAW,CAAA;AACpB,CAAC;AAED,MAAM,UAAU,kCAAkC,CAAC,EACjD,OAAO,EACP,QAAQ,EACR,MAAM,EACN,MAAM,GAMP;IACC,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;IAC/B,OAAO,GAAG,KAAK,SAAS;QACtB,CAAC,CAAC,+BAA+B,CAAC;YAC9B,GAAG;YACH,QAAQ;YACR,MAAM;SACP,CAAC;QACJ,CAAC,CAAC,SAAS,CAAA;AACf,CAAC;AAED,MAAM,UAAU,+BAA+B,CAAC,EAC9C,GAAG,EACH,MAAM,EACN,QAAQ,GAKT;IACC,yDAAyD;IACzD,MAAM,SAAS,GAAG,2BAA2B,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;IAC/D,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAA;IAEzB,iDAAiD;IACjD,IAAI,SAAS,GAAG,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;QAClD,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,qDAAqD;IACrD,IAAI,WAAW,GAAG,CAAC,CAAA;IACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,IAAI,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACjD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACrB,WAAW,EAAE,CAAA;QACf,CAAC;IACH,CAAC;IAED,uEAAuE;IACvE,OAAO,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAA;AACrD,CAAC"}
1
+ {"version":3,"file":"rowCoordinateCalculations.js","sourceRoot":"","sources":["../src/rowCoordinateCalculations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAA;AAEhC,MAAM,UAAU,2BAA2B,CACzC,MAAgB,EAChB,QAAgB;IAEhB,IAAI,aAAa,GAAG,CAAC,CAAA,CAAC,wCAAwC;IAC9D,IAAI,eAAe,GAAG,CAAC,CAAA,CAAC,oCAAoC;IAC5D,IAAI,cAAc,GAAG,CAAC,CAAA,CAAC,gDAAgD;IACvE,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAA;IAE/B,mDAAmD;IACnD,OAAO,aAAa,GAAG,QAAQ,EAAE,CAAC;QAChC,2CAA2C;QAC3C,wEAAwE;QACxE,0DAA0D;QAC1D,OACE,eAAe,GAAG,SAAS;YAC3B,MAAM,CAAC,eAAe,CAAE,GAAG,CAAC,KAAK,cAAc,EAC/C,CAAC;YACD,eAAe,EAAE,CAAA;YACjB,cAAc,EAAE,CAAA;QAClB,CAAC;QAED,wBAAwB;QACxB,aAAa,EAAE,CAAA;QACf,cAAc,EAAE,CAAA;IAClB,CAAC;IAED,OAAO,cAAc,CAAA;AACvB,CAAC;AAED,MAAM,UAAU,6BAA6B,CAAC,GAAW,EAAE,QAAgB;IACzE,4CAA4C;IAC5C,IAAI,WAAW,GAAG,CAAC,CAAA;IACnB,8BAA8B;IAC9B,IAAI,eAAe,GAAG,CAAC,CAAA;IACvB,MAAM,cAAc,GAAG,GAAG,CAAC,MAAM,CAAA;IAEjC,gEAAgE;IAChE,OAAO,eAAe,GAAG,QAAQ,IAAI,eAAe,GAAG,cAAc,EAAE,CAAC;QACtE,mEAAmE;QACnE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC;YACnC,WAAW,EAAE,CAAA;QACf,CAAC;QACD,eAAe,EAAE,CAAA;IACnB,CAAC;IAED,OAAO,WAAW,CAAA;AACpB,CAAC;AAED,MAAM,UAAU,kCAAkC,CAAC,EACjD,OAAO,EACP,QAAQ,EACR,MAAM,EACN,MAAM,GAMP;IACC,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;IAC/B,OAAO,GAAG,KAAK,SAAS;QACtB,CAAC,CAAC,+BAA+B,CAAC;YAC9B,GAAG;YACH,QAAQ;YACR,MAAM;SACP,CAAC;QACJ,CAAC,CAAC,SAAS,CAAA;AACf,CAAC;AAED,MAAM,UAAU,+BAA+B,CAAC,EAC9C,GAAG,EACH,MAAM,EACN,QAAQ,GAKT;IACC,yDAAyD;IACzD,MAAM,SAAS,GAAG,2BAA2B,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;IAC/D,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAA;IAEzB,iDAAiD;IACjD,IAAI,SAAS,GAAG,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;QAClD,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,qDAAqD;IACrD,IAAI,WAAW,GAAG,CAAC,CAAA;IACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,IAAI,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACjD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACrB,WAAW,EAAE,CAAA;QACf,CAAC;IACH,CAAC;IAED,uEAAuE;IACvE,OAAO,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAA;AACrD,CAAC"}
package/dist/types.d.ts CHANGED
@@ -11,13 +11,12 @@ export interface BasicTrackModel {
11
11
  }
12
12
  export interface TextTrackModel extends BasicTrackModel {
13
13
  customColorScheme?: Record<string, string>;
14
- data: string;
14
+ data?: string;
15
15
  }
16
- export interface ITextTrack {
16
+ export interface BasicTrack {
17
17
  ReactComponent: React.FC<any>;
18
18
  model: TextTrackModel;
19
19
  }
20
- export type BasicTrack = ITextTrack;
21
20
  export interface Node {
22
21
  children?: Node[];
23
22
  name?: string;
package/dist/util.js CHANGED
@@ -21,17 +21,25 @@ export function colorContrast(colorScheme, theme) {
21
21
  ]);
22
22
  }
23
23
  export function skipBlanks(blanks, arg) {
24
- let s = '';
25
- let b = 0;
26
- for (let j = 0, l = arg.length; j < l; j++) {
27
- if (j === blanks[b]) {
28
- b++;
29
- }
30
- else {
31
- s += arg[j];
24
+ if (blanks.length === 0) {
25
+ return typeof arg === 'string' ? arg : arg.join('');
26
+ }
27
+ const chunks = [];
28
+ let lastEnd = 0;
29
+ for (const blankIdx of blanks) {
30
+ if (blankIdx > lastEnd) {
31
+ chunks.push(typeof arg === 'string'
32
+ ? arg.slice(lastEnd, blankIdx)
33
+ : arg.slice(lastEnd, blankIdx).join(''));
32
34
  }
35
+ lastEnd = blankIdx + 1;
36
+ }
37
+ if (lastEnd < arg.length) {
38
+ chunks.push(typeof arg === 'string'
39
+ ? arg.slice(lastEnd)
40
+ : arg.slice(lastEnd).join(''));
33
41
  }
34
- return s;
42
+ return chunks.join('');
35
43
  }
36
44
  // basically same as setRadius from https://observablehq.com/@d3/tree-of-life
37
45
  export function setBrLength(d, y0, k) {
package/dist/util.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"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"}
package/dist/version.d.ts CHANGED
@@ -1 +1 @@
1
- export declare const version = "4.4.6";
1
+ export declare const version = "4.4.7";
package/dist/version.js CHANGED
@@ -1,2 +1,2 @@
1
- export const version = '4.4.6';
1
+ export const version = '4.4.7';
2
2
  //# sourceMappingURL=version.js.map
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "react-msaview",
3
3
  "author": "Colin",
4
- "version": "4.4.6",
4
+ "version": "4.5.0",
5
5
  "license": "MIT",
6
6
  "repository": {
7
7
  "type": "git",
@@ -22,15 +22,15 @@
22
22
  "clean": "rimraf dist",
23
23
  "watch": "yarn build:esm --watch",
24
24
  "format": "prettier --write .",
25
- "prebuild": "npm run clean",
26
- "prepublishOnly": "node output-version.js > src/version.ts && git add -A src && git commit -m '[skip ci] Bump version.ts'",
25
+ "prebuild": "yarn clean",
26
+ "preversion": "node output-version.js > src/version.ts && git add -A src && git commit -m '[skip ci] Bump version.ts'",
27
27
  "build:esm": "tsc",
28
28
  "build:bundle": "webpack",
29
- "build": "npm run build:esm && npm run build:bundle",
30
- "prepack": "npm run build",
29
+ "build": "yarn build:esm && yarn build:bundle",
30
+ "prepack": "yarn build",
31
31
  "postversion": "git push --follow-tags",
32
32
  "statedocs": "rm -rf apidocs && mkdir apidocs && node --experimental-strip-types docgen/generateStateModelDocs.ts",
33
- "poststatedocs": "npm run format",
33
+ "poststatedocs": "yarn format",
34
34
  "test": "vitest"
35
35
  },
36
36
  "peerDependencies": {
@@ -2,7 +2,7 @@ import { blue, green, orange, red } from '@mui/material/colors'
2
2
  import { colord, extend } from 'colord'
3
3
  import namesPlugin from 'colord/plugins/names'
4
4
 
5
- import { isBlank, transform } from './util'
5
+ import { transform } from './util'
6
6
 
7
7
  extend([namesPlugin])
8
8
 
@@ -353,181 +353,3 @@ export default transform(colorSchemes, ([key, val]) => [
353
353
  key,
354
354
  transform(val, ([letter, color]) => [letter, colord(color).toHex()]),
355
355
  ])
356
-
357
- // info http://www.jalview.org/help/html/colourSchemes/clustal.html
358
- // modifications:
359
- // reference to clustalX source code scheme modifies what the jalview.org
360
- // scheme says there the jalview.org colorscheme says WLVIMAFCHP but it
361
- // should be WLVIMAFCHPY, colprot.xml says e.g. %#ACFHILMVWYPp" which has Y
362
- export function getClustalXColor(
363
- stats: Record<string, number>,
364
- total: number,
365
- model: { columns: Record<string, string> },
366
- row: string,
367
- col: number,
368
- ) {
369
- const l = model.columns[row]![col]!
370
- const {
371
- W = 0,
372
- L = 0,
373
- V = 0,
374
- I = 0,
375
- M = 0,
376
- A = 0,
377
- F = 0,
378
- C = 0,
379
- H = 0,
380
- P = 0,
381
- R = 0,
382
- K = 0,
383
- Q = 0,
384
- E = 0,
385
- D = 0,
386
- T = 0,
387
- S = 0,
388
- G = 0,
389
- Y = 0,
390
- N = 0,
391
- } = stats
392
-
393
- const WLVIMAFCHP = W + L + V + I + M + A + F + C + H + P + Y
394
-
395
- const KR = K + R
396
- const QE = Q + E
397
- const ED = E + D
398
- const TS = T + S
399
-
400
- if (WLVIMAFCHP / total > 0.6) {
401
- if (
402
- l === 'W' ||
403
- l === 'L' ||
404
- l === 'V' ||
405
- l === 'A' ||
406
- l === 'I' ||
407
- l === 'M' ||
408
- l === 'F' ||
409
- l === 'C'
410
- ) {
411
- // blue from jalview.org docs
412
- return 'rgb(128,179,230)'
413
- }
414
- }
415
-
416
- if (
417
- (l === 'K' || l === 'R') &&
418
- (KR / total > 0.6 || K / total > 0.8 || R / total > 0.8 || Q / total > 0.8)
419
- ) {
420
- return '#d88'
421
- }
422
-
423
- if (
424
- l === 'E' &&
425
- (KR / total > 0.6 ||
426
- QE / total > 0.5 ||
427
- E / total > 0.8 ||
428
- Q / total > 0.8 ||
429
- D / total > 0.8)
430
- ) {
431
- return 'rgb(192, 72, 192)'
432
- }
433
-
434
- if (
435
- l === 'D' &&
436
- (KR / total > 0.6 ||
437
- ED / total > 0.5 ||
438
- K / total > 0.8 ||
439
- R / total > 0.8 ||
440
- Q / total > 0.8)
441
- ) {
442
- return 'rgb(204, 77, 204)'
443
- }
444
-
445
- if (l === 'N' && (N / total > 0.5 || Y / total > 0.85)) {
446
- return '#8f8'
447
- }
448
- if (
449
- l === 'Q' &&
450
- (KR / total > 0.6 ||
451
- QE / total > 0.6 ||
452
- Q / total > 0.85 ||
453
- E / total > 0.85 ||
454
- K / total > 0.85 ||
455
- R / total > 0.85)
456
- ) {
457
- return '#8f8'
458
- }
459
-
460
- if (
461
- (l === 'S' || l === 'T') &&
462
- // WLVIMAFCHP modified from 0.6 to 0.55 on page to match what i see in jalview
463
- (WLVIMAFCHP / total > 0.6 ||
464
- TS / total > 0.5 ||
465
- S / total > 0.85 ||
466
- T / total > 0.85)
467
- ) {
468
- return 'rgb(26,204,26)'
469
- }
470
-
471
- if (l === 'C' && C / total > 0.85) {
472
- return 'rgb(240, 128, 128)'
473
- }
474
-
475
- if (l === 'G' && G / total > 0) {
476
- return 'rgb(240, 144, 72)'
477
- }
478
- if (l === 'P' && P / total > 0) {
479
- return 'rgb(204, 204, 0)'
480
- }
481
-
482
- if (
483
- (l === 'H' || l === 'Y') &&
484
- (WLVIMAFCHP / total > 0.6 ||
485
- W > 0.85 ||
486
- Y > 0.85 ||
487
- A > 0.85 ||
488
- C > 0.85 ||
489
- P > 0.85 ||
490
- Q > 0.85 ||
491
- F > 0.85 ||
492
- H > 0.85 ||
493
- I > 0.85 ||
494
- L > 0.85 ||
495
- M > 0.85 ||
496
- V > 0.85)
497
- ) {
498
- // cyan from jalview.org docs
499
- return 'rgb(26, 179, 179)'
500
- }
501
- return undefined
502
- }
503
-
504
- // info http://www.jalview.org/help/html/colourSchemes/clustal.html
505
- // modifications:
506
- // reference to clustalX source code scheme modifies what the jalview.org
507
- // scheme says there the jalview.org colorscheme says WLVIMAFCHP but it should
508
- // be WLVIMAFCHPY, colprot.xml says e.g. %#ACFHILMVWYPp" which has Y
509
- export function getPercentIdentityColor(
510
- stats: Record<string, number>,
511
- total: number,
512
- model: { columns: Record<string, string> },
513
- row: string,
514
- col: number,
515
- ) {
516
- const l = model.columns[row]![col]!
517
- const entries = Object.entries(stats)
518
- let ent = 0
519
- let letter = ''
520
- for (const entry of entries) {
521
- if (entry[1] > ent && !isBlank(entry[0])) {
522
- letter = entry[0]
523
- ent = entry[1]
524
- }
525
- }
526
- const proportion = ent / total
527
- const thresh = `hsl(240, 30%, ${100 * Math.max(1 - ent / total / 3, 0.3)}%)`
528
- if (proportion > 0.4) {
529
- if (l === letter) {
530
- return thresh
531
- }
532
- }
533
- }