@datagrok-libraries/bio 5.62.0 → 5.63.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 (35) hide show
  1. package/package.json +3 -2
  2. package/src/types/monomer-library.d.ts +2 -1
  3. package/src/types/monomer-library.d.ts.map +1 -1
  4. package/src/types/monomer-library.js.map +1 -1
  5. package/src/utils/annotation-track.d.ts +42 -0
  6. package/src/utils/annotation-track.d.ts.map +1 -0
  7. package/src/utils/annotation-track.js +159 -0
  8. package/src/utils/annotation-track.js.map +1 -0
  9. package/src/utils/cell-renderer-annotations.d.ts +48 -0
  10. package/src/utils/cell-renderer-annotations.d.ts.map +1 -0
  11. package/src/utils/cell-renderer-annotations.js +280 -0
  12. package/src/utils/cell-renderer-annotations.js.map +1 -0
  13. package/src/utils/cell-renderer-monomer-placer.d.ts +3 -0
  14. package/src/utils/cell-renderer-monomer-placer.d.ts.map +1 -1
  15. package/src/utils/cell-renderer-monomer-placer.js +42 -0
  16. package/src/utils/cell-renderer-monomer-placer.js.map +1 -1
  17. package/src/utils/macromolecule/annotations.d.ts +89 -0
  18. package/src/utils/macromolecule/annotations.d.ts.map +1 -0
  19. package/src/utils/macromolecule/annotations.js +48 -0
  20. package/src/utils/macromolecule/annotations.js.map +1 -0
  21. package/src/utils/macromolecule/consts.d.ts +4 -1
  22. package/src/utils/macromolecule/consts.d.ts.map +1 -1
  23. package/src/utils/macromolecule/consts.js +3 -0
  24. package/src/utils/macromolecule/consts.js.map +1 -1
  25. package/src/utils/macromolecule/numbering-schemes.d.ts +37 -0
  26. package/src/utils/macromolecule/numbering-schemes.d.ts.map +1 -0
  27. package/src/utils/macromolecule/numbering-schemes.js +149 -0
  28. package/src/utils/macromolecule/numbering-schemes.js.map +1 -0
  29. package/src/utils/monomer-selection-dialog.d.ts +47 -0
  30. package/src/utils/monomer-selection-dialog.d.ts.map +1 -0
  31. package/src/utils/monomer-selection-dialog.js +354 -0
  32. package/src/utils/monomer-selection-dialog.js.map +1 -0
  33. package/src/utils/sequence-position-scroller.d.ts.map +1 -1
  34. package/src/utils/sequence-position-scroller.js +74 -38
  35. package/src/utils/sequence-position-scroller.js.map +1 -1
package/package.json CHANGED
@@ -8,7 +8,7 @@
8
8
  "access": "public"
9
9
  },
10
10
  "friendlyName": "Datagrok bio library",
11
- "version": "5.62.0",
11
+ "version": "5.63.0",
12
12
  "description": "Bio utilities, types supporting Macromolecule, Molecule3D data",
13
13
  "dependencies": {
14
14
  "@datagrok-libraries/chem-meta": "^1.2.7",
@@ -17,7 +17,7 @@
17
17
  "@datagrok-libraries/utils": "^4.5.7",
18
18
  "@deck.gl/core": "8.8.12",
19
19
  "cash-dom": "^8.1.5",
20
- "datagrok-api": "^1.25.0",
20
+ "datagrok-api": "^1.26.0",
21
21
  "dayjs": "^1.11.13",
22
22
  "fastest-levenshtein": "^1.0.16",
23
23
  "js-base64": "^3.7.5",
@@ -36,6 +36,7 @@
36
36
  "@types/wu": "^2.1.44",
37
37
  "@typescript-eslint/eslint-plugin": "^8.8.1",
38
38
  "@typescript-eslint/parser": "^8.8.1",
39
+ "datagrok-tools": "^4.14.20",
39
40
  "eslint": "8.57.1",
40
41
  "eslint-config-google": "^0.14.0",
41
42
  "eslint-plugin-deprecation": "^3.0.0",
@@ -167,11 +167,12 @@ export interface IMonomerLibHelper {
167
167
  /** reads single collection and returns monomer symbols in it . name should be extention qualified*/
168
168
  readMonomerCollection(collectionName: string): Promise<MonomerCollection>;
169
169
  /** add or update monomer collecion */
170
- addOrUpdateMonomerCollection(collectionName: string, monomerSymbols: string[], description?: string): Promise<void>;
170
+ addOrUpdateMonomerCollection(collectionName: string, monomerSymbols: string[], description?: string, tags?: string[]): Promise<void>;
171
171
  deleteMonomerCollection(collectionName: string): Promise<void>;
172
172
  }
173
173
  export type MonomerCollection = {
174
174
  description?: string;
175
+ tags?: string[];
175
176
  monomerSymbols: string[];
176
177
  updatedBy: string;
177
178
  updatedOn: string;
@@ -1 +1 @@
1
- {"version":3,"file":"monomer-library.d.ts","sourceRoot":"","sources":["monomer-library.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"monomer-library.d.ts","sourceRoot":"","sources":["monomer-library.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"monomer-library.js","sourceRoot":"","sources":["monomer-library.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"monomer-library.js","sourceRoot":"","sources":["monomer-library.ts"],"names":[],"mappings":"AAAA,4BAA4B;AAC5B,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAQtC,OAAO,EAAC,OAAO,EAAC,MAAM,mBAAmB,CAAC;AAgH1C,MAAM,CAAC,MAAM,+BAA+B,GAAG,OAAO,CAAC;AAsBvD,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAAC,SAAgC,EAAE,WAAmB;IACrG,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,aAAa,EAAE,CAAC;QAChD,IAAI,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,GAAG,WAAW,OAAO,CAAC;YAC5E,OAAO,QAAQ,CAAC;IACpB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AA+ED,MAAM,CAAC,KAAK,UAAU,mBAAmB;IACvC,MAAM,QAAQ,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,qBAAqB,EAAC,CAAC,CAAC;IAC7E,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;IAE3E,MAAM,GAAG,GAAsB,CAAC,MAAM,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,mBAAmB,EAAuB,CAAC;IAC/G,OAAO,GAAG,CAAC;AACb,CAAC;AAGD,MAAM,OAAO,qBAAqB;IAKhC,YACmB,UAAuB,EACjC,MAAc,EACL,WAAwB,EACxB,WAAwB,EACxB,YAAgC;QAJ/B,eAAU,GAAV,UAAU,CAAa;QACjC,WAAM,GAAN,MAAM,CAAQ;QACL,gBAAW,GAAX,WAAW,CAAa;QACxB,gBAAW,GAAX,WAAW,CAAa;QACxB,iBAAY,GAAZ,YAAY,CAAoB;QAPlC,UAAK,GAAkB,IAAI,CAAC;QAS1C,IAAI,CAAC;YACH,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;gBAC9C,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;gBACxE,IAAI,CAAC,IAAI;oBACP,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;gBACzC,IAAI,IAAI,CAAC,GAAG,EAAE,MAAM,IAAI,KAAK,CAAC,MAAM;oBAClC,MAAM,IAAI,KAAK,CAAC,YAAY,MAAM,+BAA+B,CAAC,CAAC;gBACrE,OAAO,IAAI,CAAC;YACd,CAAC,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;YACzC,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC;YACpB,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;QACrB,CAAC;IACH,CAAC;CACF;AAED,MAAM,OAAO,UAAU;IACrB,YACkB,WAAmB,EAC5B,YAAsC,EAC7B,SAA6B,SAAS,EACtC,QAA4B,SAAS;QAHrC,gBAAW,GAAX,WAAW,CAAQ;QAC5B,iBAAY,GAAZ,YAAY,CAA0B;QAC7B,WAAM,GAAN,MAAM,CAAgC;QACtC,UAAK,GAAL,KAAK,CAAgC;IACpD,CAAC;IAEJ,UAAU,CAAC,OAAsB,EAAE,SAAkB,KAAK;QACxD,IAAI,MAAM;YACR,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;QACzB,KAAK,MAAM,IAAI,IAAI,OAAO;YACxB,IAAI,CAAC,IAAI,CAAC,KAAK;gBAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAE5C,uBAAuB;IACzB,CAAC;IAEO,aAAa,CAAC,GAAgB;QACpC,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,YAAY;YAClC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC;CACF"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * AnnotationTrack — MSA header track displaying colored region bands.
3
+ *
4
+ * Shows FR/CDR regions (or any structure annotations) as colored horizontal
5
+ * rectangles with centered labels. This track is designed to be the primary
6
+ * (first) track in the MSA header when annotation data exists.
7
+ */
8
+ import * as DG from 'datagrok-api/dg';
9
+ import { MSAHeaderTrack } from './sequence-position-scroller';
10
+ interface RegionSpan {
11
+ name: string;
12
+ color: string;
13
+ startIdx: number;
14
+ endIdx: number;
15
+ /** Scheme position name for start, e.g. "27" in IMGT */
16
+ startPos: string;
17
+ /** Scheme position name for end */
18
+ endPos: string;
19
+ /** Source numbering scheme, e.g. "IMGT" */
20
+ sourceScheme?: string;
21
+ description?: string;
22
+ }
23
+ export declare class AnnotationTrack extends MSAHeaderTrack {
24
+ private tableCol;
25
+ private regions;
26
+ private posList;
27
+ private _cacheVersion;
28
+ constructor(tableCol: DG.Column<string>, title?: string);
29
+ /** Returns true if there are region annotations to display. */
30
+ hasRegions(): boolean;
31
+ /** Returns the region covering the given 0-based position index, or null. */
32
+ getRegionAtPosition(posIdx: number): RegionSpan | null;
33
+ /** Override: provide tooltip content for the annotation track. */
34
+ getTooltipContent(position: number, _monomer: string | null): HTMLElement | null;
35
+ draw(x: number, y: number, width: number, height: number, windowStart: number, positionWidth: number, totalPositions: number, _currentPosition: number): void;
36
+ private _ensureUpToDate;
37
+ private _rebuildRegions;
38
+ private _getPosList;
39
+ private _defaultColor;
40
+ }
41
+ export {};
42
+ //# sourceMappingURL=annotation-track.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"annotation-track.d.ts","sourceRoot":"","sources":["annotation-track.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAGtC,OAAO,EAAC,cAAc,EAAC,MAAM,8BAA8B,CAAC;AAW5D,UAAU,UAAU;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,wDAAwD;IACxD,QAAQ,EAAE,MAAM,CAAC;IACjB,mCAAmC;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,2CAA2C;IAC3C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,qBAAa,eAAgB,SAAQ,cAAc;IAM/C,OAAO,CAAC,QAAQ;IALlB,OAAO,CAAC,OAAO,CAAoB;IACnC,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,aAAa,CAAc;gBAGzB,QAAQ,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,EACnC,KAAK,GAAE,MAAsB;IAM/B,+DAA+D;IAC/D,UAAU,IAAI,OAAO;IAKrB,6EAA6E;IAC7E,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAStD,kEAAkE;IAC3D,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,WAAW,GAAG,IAAI;IAuBvF,IAAI,CACF,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACnD,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,GAC3F,IAAI;IAqDP,OAAO,CAAC,eAAe;IAOvB,OAAO,CAAC,eAAe;IAkCvB,OAAO,CAAC,WAAW;IAMnB,OAAO,CAAC,aAAa;CAWtB"}
@@ -0,0 +1,159 @@
1
+ import * as ui from 'datagrok-api/ui';
2
+ import { MSAHeaderTrack } from './sequence-position-scroller';
3
+ import { TAGS as bioTAGS } from './macromolecule/consts';
4
+ import { AnnotationCategory, ANNOTATION_COLORS } from './macromolecule/annotations';
5
+ /** Compact track height for the annotation band. */
6
+ const ANNOTATION_TRACK_HEIGHT = 20;
7
+ const ANNOTATION_TRACK_MIN_HEIGHT = 14;
8
+ const ANNOTATION_FONT = 'bold 9px Roboto, Roboto Local, sans-serif';
9
+ const ANNOTATION_LABEL_COLOR = '#333';
10
+ export class AnnotationTrack extends MSAHeaderTrack {
11
+ constructor(tableCol, title = 'Annotations') {
12
+ super(ANNOTATION_TRACK_HEIGHT, ANNOTATION_TRACK_MIN_HEIGHT, title);
13
+ this.tableCol = tableCol;
14
+ this.regions = [];
15
+ this.posList = [];
16
+ this._cacheVersion = -1;
17
+ this._rebuildRegions();
18
+ }
19
+ /** Returns true if there are region annotations to display. */
20
+ hasRegions() {
21
+ this._ensureUpToDate();
22
+ return this.regions.length > 0;
23
+ }
24
+ /** Returns the region covering the given 0-based position index, or null. */
25
+ getRegionAtPosition(posIdx) {
26
+ this._ensureUpToDate();
27
+ for (const region of this.regions) {
28
+ if (posIdx >= region.startIdx && posIdx <= region.endIdx)
29
+ return region;
30
+ }
31
+ return null;
32
+ }
33
+ /** Override: provide tooltip content for the annotation track. */
34
+ getTooltipContent(position, _monomer) {
35
+ this._ensureUpToDate();
36
+ const region = this.getRegionAtPosition(position);
37
+ if (!region)
38
+ return null;
39
+ const scheme = region.sourceScheme ?? '';
40
+ const posName = position < this.posList.length ? this.posList[position] : '';
41
+ const lines = [];
42
+ const nameEl = document.createElement('b');
43
+ nameEl.textContent = region.name;
44
+ lines.push(ui.div([nameEl], { style: { fontSize: '13px', marginBottom: '4px' } }));
45
+ if (scheme)
46
+ lines.push(ui.divText(`Scheme: ${scheme}`, { style: { fontSize: '12px', color: '#555' } }));
47
+ lines.push(ui.divText(`Range: ${region.startPos} \u2013 ${region.endPos}`, { style: { fontSize: '12px', color: '#555' } }));
48
+ if (posName)
49
+ lines.push(ui.divText(`Position: ${posName}`, { style: { fontSize: '12px', color: '#555' } }));
50
+ if (region.description)
51
+ lines.push(ui.divText(region.description, { style: { fontSize: '11px', color: '#888', marginTop: '2px' } }));
52
+ return ui.divV(lines, { style: { padding: '4px' } });
53
+ }
54
+ draw(x, y, width, height, windowStart, positionWidth, totalPositions, _currentPosition) {
55
+ if (!this.ctx || !this.visible)
56
+ return;
57
+ this._ensureUpToDate();
58
+ if (this.regions.length === 0)
59
+ return;
60
+ const g = this.ctx;
61
+ g.save();
62
+ // Clip to track bounds
63
+ g.beginPath();
64
+ g.rect(x, y, width, height);
65
+ g.clip();
66
+ const visibleStart = windowStart - 1; // windowStart is 1-based
67
+ const visibleEnd = visibleStart + Math.ceil(width / positionWidth) + 2;
68
+ for (const region of this.regions) {
69
+ // Skip regions entirely outside the viewport
70
+ if (region.endIdx < visibleStart || region.startIdx > visibleEnd)
71
+ continue;
72
+ const drawStart = Math.max(region.startIdx, visibleStart);
73
+ const drawEnd = Math.min(region.endIdx, visibleEnd);
74
+ const rx = x + (drawStart - visibleStart) * positionWidth;
75
+ const rw = (drawEnd - drawStart + 1) * positionWidth;
76
+ // Draw background
77
+ g.fillStyle = region.color;
78
+ g.globalAlpha = 0.35;
79
+ g.fillRect(rx, y, rw, height);
80
+ g.globalAlpha = 1.0;
81
+ // Draw border
82
+ g.strokeStyle = region.color;
83
+ g.globalAlpha = 0.6;
84
+ g.lineWidth = 1;
85
+ g.strokeRect(rx + 0.5, y + 0.5, rw - 1, height - 1);
86
+ g.globalAlpha = 1.0;
87
+ // Draw label if there's enough room
88
+ g.font = ANNOTATION_FONT;
89
+ const labelWidth = g.measureText(region.name).width;
90
+ if (rw > labelWidth + 4) {
91
+ g.fillStyle = ANNOTATION_LABEL_COLOR;
92
+ g.textAlign = 'center';
93
+ g.textBaseline = 'middle';
94
+ g.fillText(region.name, rx + rw / 2, y + height / 2);
95
+ }
96
+ }
97
+ g.restore();
98
+ }
99
+ _ensureUpToDate() {
100
+ if (this._cacheVersion !== this.tableCol.version) {
101
+ this._rebuildRegions();
102
+ this._cacheVersion = this.tableCol.version;
103
+ }
104
+ }
105
+ _rebuildRegions() {
106
+ this.regions = [];
107
+ const annotTag = this.tableCol.getTag(bioTAGS.annotations);
108
+ if (!annotTag)
109
+ return;
110
+ let annotations;
111
+ try {
112
+ annotations = JSON.parse(annotTag);
113
+ }
114
+ catch {
115
+ return;
116
+ }
117
+ this.posList = this._getPosList();
118
+ if (this.posList.length === 0)
119
+ return;
120
+ for (const annot of annotations) {
121
+ if (annot.category !== AnnotationCategory.Structure)
122
+ continue;
123
+ if (annot.start == null || annot.end == null)
124
+ continue;
125
+ const startIdx = this.posList.indexOf(annot.start);
126
+ const endIdx = this.posList.indexOf(annot.end);
127
+ if (startIdx < 0 || endIdx < 0)
128
+ continue;
129
+ this.regions.push({
130
+ name: annot.name,
131
+ color: annot.color ?? this._defaultColor(annot),
132
+ startIdx,
133
+ endIdx,
134
+ startPos: annot.start,
135
+ endPos: annot.end,
136
+ sourceScheme: annot.sourceScheme,
137
+ description: annot.description,
138
+ });
139
+ }
140
+ }
141
+ _getPosList() {
142
+ const tag = this.tableCol.getTag(bioTAGS.positionNames);
143
+ if (!tag)
144
+ return [];
145
+ return tag.split(', ');
146
+ }
147
+ _defaultColor(annot) {
148
+ if (annot.name.startsWith('CDR')) {
149
+ const idx = parseInt(annot.name.replace('CDR', '')) - 1;
150
+ return ANNOTATION_COLORS.structure.CDR[idx % ANNOTATION_COLORS.structure.CDR.length];
151
+ }
152
+ if (annot.name.startsWith('FR')) {
153
+ const idx = parseInt(annot.name.replace('FR', '')) - 1;
154
+ return ANNOTATION_COLORS.structure.FR[idx % ANNOTATION_COLORS.structure.FR.length];
155
+ }
156
+ return '#90CAF9';
157
+ }
158
+ }
159
+ //# sourceMappingURL=annotation-track.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"annotation-track.js","sourceRoot":"","sources":["annotation-track.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * AnnotationRenderer — overlays annotation visuals on top of sequence cells.
3
+ *
4
+ * Performance contract:
5
+ * - When no annotations exist, `hasAnnotations()` returns false and callers skip all drawing.
6
+ * - Parsed annotation data is cached by column version; re-parsed only on change.
7
+ * - The companion row-data column (hidden, name starting with ~) is re-looked up when the
8
+ * sequence column version changes (so it's found even when created after first render).
9
+ */
10
+ import * as DG from 'datagrok-api/dg';
11
+ import { SeqAnnotation, SeqAnnotationHit } from './macromolecule/annotations';
12
+ export declare class AnnotationRenderer {
13
+ private tableCol;
14
+ private _cache;
15
+ private _rowCache;
16
+ private _annotCol;
17
+ /** Version of tableCol at which _annotCol was last looked up.
18
+ * Re-lookup when version changes (setting .annotationColumnName tag bumps it). */
19
+ private _annotColLookupVersion;
20
+ constructor(tableCol: DG.Column<string>);
21
+ /** Fast check — returns false when no annotations exist, so the render loop can skip entirely. */
22
+ hasAnnotations(): boolean;
23
+ /** Returns region annotations (column-level). */
24
+ getAnnotations(): SeqAnnotation[];
25
+ /** Returns the region name at a given position for a specific row.
26
+ * Checks per-row region spans first; falls back to column-level only when
27
+ * the row has no per-row region data at all. */
28
+ getRegionNameAtPosition(posIdx: number, rowIdx?: number): string | null;
29
+ /** Returns liability hits (non-region) for a specific row and position index. */
30
+ getHitsAtPosition(rowIdx: number, posIdx: number): SeqAnnotationHit[];
31
+ /** Draws annotation background + underline for a single position in a cell.
32
+ * Called from MonomerPlacer.render() for each visible position.
33
+ * @param textBottomY If provided, underline is drawn just below this y-coordinate
34
+ * (use in single-line mode so the underline sticks to the letters). */
35
+ drawPositionBackground(g: CanvasRenderingContext2D, x: number, y: number, w: number, h: number, posIdx: number, rowIdx: number, textBottomY?: number): void;
36
+ /** Builds a tooltip HTML snippet for annotations at a given position+row. */
37
+ getTooltipInfo(posIdx: number, rowIdx: number): string[];
38
+ /** Finds a per-row region span hit covering the given position, or null. */
39
+ private _findRowRegionHit;
40
+ /** Returns true if the row has any per-row region span data (hits with endPositionIndex set).
41
+ * When true, column-level region mapping should NOT be used as fallback for this row. */
42
+ private _rowHasRegionData;
43
+ private _ensureCache;
44
+ private _ensureRowCache;
45
+ private _getPosList;
46
+ private _getDefaultRegionColor;
47
+ }
48
+ //# sourceMappingURL=cell-renderer-annotations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cell-renderer-annotations.d.ts","sourceRoot":"","sources":["cell-renderer-annotations.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAGtC,OAAO,EACL,aAAa,EAAE,gBAAgB,EAGhC,MAAM,6BAA6B,CAAC;AAiBrC,qBAAa,kBAAkB;IAS3B,OAAO,CAAC,QAAQ;IARlB,OAAO,CAAC,MAAM,CAAgC;IAC9C,OAAO,CAAC,SAAS,CAA6B;IAC9C,OAAO,CAAC,SAAS,CAAkC;IACnD;uFACmF;IACnF,OAAO,CAAC,sBAAsB,CAAc;gBAGlC,QAAQ,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC;IAGrC,kGAAkG;IAClG,cAAc,IAAI,OAAO;IAKzB,iDAAiD;IACjD,cAAc,IAAI,aAAa,EAAE;IAKjC;;qDAEiD;IACjD,uBAAuB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAiBvE,iFAAiF;IACjF,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,gBAAgB,EAAE;IAWrE;;;8EAG0E;IAC1E,sBAAsB,CACpB,CAAC,EAAE,wBAAwB,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EACvE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GACnD,IAAI;IAgDP,6EAA6E;IAC7E,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE;IAgDxD,4EAA4E;IAC5E,OAAO,CAAC,iBAAiB;IAYzB;8FAC0F;IAC1F,OAAO,CAAC,iBAAiB;IAUzB,OAAO,CAAC,YAAY;IA8CpB,OAAO,CAAC,eAAe;IAqCvB,OAAO,CAAC,WAAW;IAMnB,OAAO,CAAC,sBAAsB;CAW/B"}
@@ -0,0 +1,280 @@
1
+ import { TAGS as bioTAGS } from './macromolecule/consts';
2
+ import { AnnotationCategory, REGION_BG_OPACITY, LIABILITY_UNDERLINE_HEIGHT, ANNOTATION_COLORS, } from './macromolecule/annotations';
3
+ export class AnnotationRenderer {
4
+ constructor(tableCol) {
5
+ this.tableCol = tableCol;
6
+ this._cache = null;
7
+ this._rowCache = null;
8
+ this._annotCol = null;
9
+ /** Version of tableCol at which _annotCol was last looked up.
10
+ * Re-lookup when version changes (setting .annotationColumnName tag bumps it). */
11
+ this._annotColLookupVersion = -1;
12
+ }
13
+ /** Fast check — returns false when no annotations exist, so the render loop can skip entirely. */
14
+ hasAnnotations() {
15
+ this._ensureCache();
16
+ return this._cache !== null && this._cache.annotations.length > 0;
17
+ }
18
+ /** Returns region annotations (column-level). */
19
+ getAnnotations() {
20
+ this._ensureCache();
21
+ return this._cache?.annotations ?? [];
22
+ }
23
+ /** Returns the region name at a given position for a specific row.
24
+ * Checks per-row region spans first; falls back to column-level only when
25
+ * the row has no per-row region data at all. */
26
+ getRegionNameAtPosition(posIdx, rowIdx) {
27
+ // Check per-row region spans first
28
+ if (rowIdx != null) {
29
+ const hit = this._findRowRegionHit(rowIdx, posIdx);
30
+ if (hit) {
31
+ const annot = this._cache?.annotations.find((a) => a.id === hit.annotationId);
32
+ return annot?.name ?? null;
33
+ }
34
+ // If this row has per-row region data, don't fall back to column-level
35
+ if (this._rowHasRegionData(rowIdx))
36
+ return null;
37
+ }
38
+ // Fall back to column-level position map
39
+ this._ensureCache();
40
+ return this._cache?.positionRegionNames.get(posIdx) ?? null;
41
+ }
42
+ /** Returns liability hits (non-region) for a specific row and position index. */
43
+ getHitsAtPosition(rowIdx, posIdx) {
44
+ this._ensureRowCache();
45
+ if (!this._rowCache)
46
+ return [];
47
+ const rowData = this._rowCache.data[rowIdx];
48
+ if (!rowData)
49
+ return [];
50
+ return rowData.filter((h) => {
51
+ if (h.endPositionIndex != null)
52
+ return false; // Skip region spans
53
+ return h.positionIndex === posIdx || (h.matchedMonomers.length > 1 && posIdx > h.positionIndex && posIdx < h.positionIndex + h.matchedMonomers.length);
54
+ });
55
+ }
56
+ /** Draws annotation background + underline for a single position in a cell.
57
+ * Called from MonomerPlacer.render() for each visible position.
58
+ * @param textBottomY If provided, underline is drawn just below this y-coordinate
59
+ * (use in single-line mode so the underline sticks to the letters). */
60
+ drawPositionBackground(g, x, y, w, h, posIdx, rowIdx, textBottomY) {
61
+ this._ensureCache();
62
+ if (!this._cache)
63
+ return;
64
+ this._ensureRowCache();
65
+ // Region background — check per-row region spans first, then column-level.
66
+ // If per-row region data exists for this row, use ONLY that (don't fall back
67
+ // to column-level, which has generic positions that don't match this row).
68
+ let regionColor;
69
+ const rowRegionHit = this._findRowRegionHit(rowIdx, posIdx);
70
+ if (rowRegionHit) {
71
+ const annot = this._cache.annotations.find((a) => a.id === rowRegionHit.annotationId);
72
+ regionColor = annot?.color ?? (annot ? this._getDefaultRegionColor(annot) : undefined);
73
+ }
74
+ if (!regionColor && !this._rowHasRegionData(rowIdx))
75
+ regionColor = this._cache.positionRegionColors.get(posIdx);
76
+ if (regionColor) {
77
+ g.save();
78
+ g.globalAlpha = REGION_BG_OPACITY;
79
+ g.fillStyle = regionColor;
80
+ g.fillRect(x, y, w, h);
81
+ g.restore();
82
+ }
83
+ // Liability underline — snapped to text bottom when textBottomY is provided
84
+ if (this._rowCache) {
85
+ const rowData = this._rowCache.data[rowIdx];
86
+ if (rowData) {
87
+ for (const hit of rowData) {
88
+ if (hit.endPositionIndex != null)
89
+ continue; // Skip region spans
90
+ if (posIdx >= hit.positionIndex && posIdx < hit.positionIndex + hit.matchedMonomers.length) {
91
+ const annot = this._cache.annotations.find((a) => a.id === hit.annotationId);
92
+ if (annot?.color) {
93
+ const underlineY = textBottomY != null
94
+ ? textBottomY + 1
95
+ : y + h - LIABILITY_UNDERLINE_HEIGHT;
96
+ g.fillStyle = annot.color;
97
+ g.fillRect(x, underlineY, w, LIABILITY_UNDERLINE_HEIGHT);
98
+ }
99
+ break; // Only draw one underline
100
+ }
101
+ }
102
+ }
103
+ }
104
+ }
105
+ /** Builds a tooltip HTML snippet for annotations at a given position+row. */
106
+ getTooltipInfo(posIdx, rowIdx) {
107
+ this._ensureCache();
108
+ const lines = [];
109
+ if (!this._cache)
110
+ return lines;
111
+ this._ensureRowCache();
112
+ // Region info — check per-row region spans first; fall back to column-level
113
+ // only when the row has no per-row region data at all.
114
+ let regionName = null;
115
+ const rowRegionHit = this._findRowRegionHit(rowIdx, posIdx);
116
+ if (rowRegionHit) {
117
+ const annot = this._cache.annotations.find((a) => a.id === rowRegionHit.annotationId);
118
+ if (annot) {
119
+ regionName = annot.name;
120
+ const scheme = annot.sourceScheme ?? '';
121
+ lines.push(`Region: ${annot.name}${scheme ? ` (${scheme} ${annot.start}-${annot.end})` : ''}`);
122
+ }
123
+ }
124
+ if (!regionName && !this._rowHasRegionData(rowIdx)) {
125
+ const colRegionName = this._cache.positionRegionNames.get(posIdx);
126
+ if (colRegionName) {
127
+ const annot = this._cache.annotations.find((a) => a.name === colRegionName && a.category === AnnotationCategory.Structure);
128
+ const scheme = annot?.sourceScheme ?? '';
129
+ lines.push(`Region: ${colRegionName}${scheme ? ` (${scheme} ${annot?.start}-${annot?.end})` : ''}`);
130
+ }
131
+ }
132
+ // Liability hits
133
+ if (this._rowCache) {
134
+ const rowData = this._rowCache.data[rowIdx];
135
+ if (rowData) {
136
+ for (const hit of rowData) {
137
+ if (hit.endPositionIndex != null)
138
+ continue; // Skip region spans
139
+ if (posIdx >= hit.positionIndex && posIdx < hit.positionIndex + hit.matchedMonomers.length) {
140
+ const annot = this._cache.annotations.find((a) => a.id === hit.annotationId);
141
+ if (annot) {
142
+ const severityLabel = annot.severity ? ` - ${annot.severity.charAt(0).toUpperCase() + annot.severity.slice(1)}` : '';
143
+ lines.push(`\u26A0 ${annot.name}${severityLabel}`);
144
+ }
145
+ }
146
+ }
147
+ }
148
+ }
149
+ return lines;
150
+ }
151
+ /** Finds a per-row region span hit covering the given position, or null. */
152
+ _findRowRegionHit(rowIdx, posIdx) {
153
+ this._ensureRowCache();
154
+ if (!this._rowCache)
155
+ return null;
156
+ const rowData = this._rowCache.data[rowIdx];
157
+ if (!rowData)
158
+ return null;
159
+ for (const hit of rowData) {
160
+ if (hit.endPositionIndex != null && posIdx >= hit.positionIndex && posIdx <= hit.endPositionIndex)
161
+ return hit;
162
+ }
163
+ return null;
164
+ }
165
+ /** Returns true if the row has any per-row region span data (hits with endPositionIndex set).
166
+ * When true, column-level region mapping should NOT be used as fallback for this row. */
167
+ _rowHasRegionData(rowIdx) {
168
+ this._ensureRowCache();
169
+ if (!this._rowCache)
170
+ return false;
171
+ const rowData = this._rowCache.data[rowIdx];
172
+ if (!rowData)
173
+ return false;
174
+ return rowData.some((h) => h.endPositionIndex != null);
175
+ }
176
+ // --- Internal caching ---
177
+ _ensureCache() {
178
+ const currentVersion = this.tableCol.version;
179
+ if (this._cache && this._cache.colVersion === currentVersion)
180
+ return;
181
+ const annotTag = this.tableCol.getTag(bioTAGS.annotations);
182
+ if (!annotTag) {
183
+ this._cache = null;
184
+ return;
185
+ }
186
+ let annotations;
187
+ try {
188
+ annotations = JSON.parse(annotTag);
189
+ }
190
+ catch {
191
+ this._cache = null;
192
+ return;
193
+ }
194
+ if (!annotations || annotations.length === 0) {
195
+ this._cache = null;
196
+ return;
197
+ }
198
+ // Build position maps for structure annotations
199
+ const positionRegionColors = new Map();
200
+ const positionRegionNames = new Map();
201
+ const posList = this._getPosList();
202
+ for (const annot of annotations) {
203
+ if (annot.category !== AnnotationCategory.Structure)
204
+ continue;
205
+ if (annot.start == null || annot.end == null)
206
+ continue;
207
+ const startIdx = posList.indexOf(annot.start);
208
+ const endIdx = posList.indexOf(annot.end);
209
+ if (startIdx < 0 || endIdx < 0)
210
+ continue;
211
+ const color = annot.color ?? this._getDefaultRegionColor(annot);
212
+ for (let i = startIdx; i <= endIdx; i++) {
213
+ positionRegionColors.set(i, color);
214
+ positionRegionNames.set(i, annot.name);
215
+ }
216
+ }
217
+ this._cache = { colVersion: currentVersion, annotations, positionRegionColors, positionRegionNames };
218
+ }
219
+ _ensureRowCache() {
220
+ // Re-lookup companion column when the sequence column version changes.
221
+ // This ensures we pick up the companion column if it was created after
222
+ // the first render (e.g., liability scan creates it later).
223
+ const seqVersion = this.tableCol.version;
224
+ if (this._annotColLookupVersion !== seqVersion) {
225
+ this._annotColLookupVersion = seqVersion;
226
+ const annotColName = this.tableCol.getTag(bioTAGS.annotationColumnName);
227
+ if (annotColName) {
228
+ try {
229
+ this._annotCol = this.tableCol.dataFrame.columns.byName(annotColName);
230
+ }
231
+ catch {
232
+ this._annotCol = null;
233
+ }
234
+ }
235
+ else {
236
+ this._annotCol = null;
237
+ }
238
+ }
239
+ if (!this._annotCol) {
240
+ this._rowCache = null;
241
+ return;
242
+ }
243
+ const currentVersion = this._annotCol.version;
244
+ if (this._rowCache && this._rowCache.colVersion === currentVersion)
245
+ return;
246
+ const data = new Array(this._annotCol.length);
247
+ for (let i = 0; i < this._annotCol.length; i++) {
248
+ const raw = this._annotCol.get(i);
249
+ if (!raw) {
250
+ data[i] = null;
251
+ continue;
252
+ }
253
+ try {
254
+ data[i] = JSON.parse(raw);
255
+ }
256
+ catch {
257
+ data[i] = null;
258
+ }
259
+ }
260
+ this._rowCache = { colVersion: currentVersion, data };
261
+ }
262
+ _getPosList() {
263
+ const posNamesTag = this.tableCol.getTag(bioTAGS.positionNames);
264
+ if (!posNamesTag)
265
+ return [];
266
+ return posNamesTag.split(', ');
267
+ }
268
+ _getDefaultRegionColor(annot) {
269
+ if (annot.name.startsWith('CDR')) {
270
+ const idx = parseInt(annot.name.replace('CDR', '')) - 1;
271
+ return ANNOTATION_COLORS.structure.CDR[idx % ANNOTATION_COLORS.structure.CDR.length];
272
+ }
273
+ if (annot.name.startsWith('FR')) {
274
+ const idx = parseInt(annot.name.replace('FR', '')) - 1;
275
+ return ANNOTATION_COLORS.structure.FR[idx % ANNOTATION_COLORS.structure.FR.length];
276
+ }
277
+ return '#90CAF9';
278
+ }
279
+ }
280
+ //# sourceMappingURL=cell-renderer-annotations.js.map