@jbrowse/plugin-alignments 2.1.0 → 2.1.2

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 (115) hide show
  1. package/dist/AlignmentsFeatureDetail/AlignmentsFeatureDetail.js +61 -90
  2. package/dist/AlignmentsFeatureDetail/AlignmentsFeatureDetail.js.map +1 -1
  3. package/dist/AlignmentsFeatureDetail/index.js +14 -16
  4. package/dist/AlignmentsFeatureDetail/index.js.map +1 -1
  5. package/dist/AlignmentsTrack/index.js +8 -8
  6. package/dist/AlignmentsTrack/index.js.map +1 -1
  7. package/dist/BamAdapter/BamAdapter.js +157 -336
  8. package/dist/BamAdapter/BamAdapter.js.map +1 -1
  9. package/dist/BamAdapter/BamSlightlyLazyFeature.js +68 -103
  10. package/dist/BamAdapter/BamSlightlyLazyFeature.js.map +1 -1
  11. package/dist/BamAdapter/MismatchParser.js +96 -162
  12. package/dist/BamAdapter/MismatchParser.js.map +1 -1
  13. package/dist/BamAdapter/configSchema.js +27 -29
  14. package/dist/BamAdapter/configSchema.js.map +1 -1
  15. package/dist/BamAdapter/index.js +9 -11
  16. package/dist/BamAdapter/index.js.map +1 -1
  17. package/dist/CramAdapter/CramAdapter.js +193 -351
  18. package/dist/CramAdapter/CramAdapter.js.map +1 -1
  19. package/dist/CramAdapter/CramSlightlyLazyFeature.js +119 -154
  20. package/dist/CramAdapter/CramSlightlyLazyFeature.js.map +1 -1
  21. package/dist/CramAdapter/CramTestAdapters.js +51 -148
  22. package/dist/CramAdapter/CramTestAdapters.js.map +1 -1
  23. package/dist/CramAdapter/configSchema.js +23 -25
  24. package/dist/CramAdapter/configSchema.js.map +1 -1
  25. package/dist/CramAdapter/index.js +9 -11
  26. package/dist/CramAdapter/index.js.map +1 -1
  27. package/dist/HtsgetBamAdapter/HtsgetBamAdapter.js +25 -87
  28. package/dist/HtsgetBamAdapter/HtsgetBamAdapter.js.map +1 -1
  29. package/dist/HtsgetBamAdapter/configSchema.js +16 -18
  30. package/dist/HtsgetBamAdapter/configSchema.js.map +1 -1
  31. package/dist/HtsgetBamAdapter/index.js +15 -19
  32. package/dist/HtsgetBamAdapter/index.js.map +1 -1
  33. package/dist/LinearAlignmentsDisplay/components/AlignmentsDisplay.js +14 -15
  34. package/dist/LinearAlignmentsDisplay/components/AlignmentsDisplay.js.map +1 -1
  35. package/dist/LinearAlignmentsDisplay/index.js +7 -7
  36. package/dist/LinearAlignmentsDisplay/index.js.map +1 -1
  37. package/dist/LinearAlignmentsDisplay/models/configSchema.js +5 -5
  38. package/dist/LinearAlignmentsDisplay/models/configSchema.js.map +1 -1
  39. package/dist/LinearAlignmentsDisplay/models/model.js +64 -140
  40. package/dist/LinearAlignmentsDisplay/models/model.js.map +1 -1
  41. package/dist/LinearPileupDisplay/components/ColorByModifications.js +24 -53
  42. package/dist/LinearPileupDisplay/components/ColorByModifications.js.map +1 -1
  43. package/dist/LinearPileupDisplay/components/ColorByTag.js +14 -30
  44. package/dist/LinearPileupDisplay/components/ColorByTag.js.map +1 -1
  45. package/dist/LinearPileupDisplay/components/FilterByTag.js +33 -49
  46. package/dist/LinearPileupDisplay/components/FilterByTag.js.map +1 -1
  47. package/dist/LinearPileupDisplay/components/LinearPileupDisplayBlurb.js +7 -7
  48. package/dist/LinearPileupDisplay/components/LinearPileupDisplayBlurb.js.map +1 -1
  49. package/dist/LinearPileupDisplay/components/SetFeatureHeight.js +17 -33
  50. package/dist/LinearPileupDisplay/components/SetFeatureHeight.js.map +1 -1
  51. package/dist/LinearPileupDisplay/components/SetMaxHeight.js +14 -30
  52. package/dist/LinearPileupDisplay/components/SetMaxHeight.js.map +1 -1
  53. package/dist/LinearPileupDisplay/components/SortByTag.js +14 -30
  54. package/dist/LinearPileupDisplay/components/SortByTag.js.map +1 -1
  55. package/dist/LinearPileupDisplay/configSchema.js +4 -4
  56. package/dist/LinearPileupDisplay/configSchema.js.map +1 -1
  57. package/dist/LinearPileupDisplay/index.js +7 -7
  58. package/dist/LinearPileupDisplay/index.js.map +1 -1
  59. package/dist/LinearPileupDisplay/model.d.ts +2 -2
  60. package/dist/LinearPileupDisplay/model.js +534 -644
  61. package/dist/LinearPileupDisplay/model.js.map +1 -1
  62. package/dist/LinearSNPCoverageDisplay/components/Tooltip.d.ts +1 -1
  63. package/dist/LinearSNPCoverageDisplay/components/Tooltip.js +30 -78
  64. package/dist/LinearSNPCoverageDisplay/components/Tooltip.js.map +1 -1
  65. package/dist/LinearSNPCoverageDisplay/index.js +7 -7
  66. package/dist/LinearSNPCoverageDisplay/index.js.map +1 -1
  67. package/dist/LinearSNPCoverageDisplay/models/configSchema.js +4 -4
  68. package/dist/LinearSNPCoverageDisplay/models/configSchema.js.map +1 -1
  69. package/dist/LinearSNPCoverageDisplay/models/model.d.ts +1 -1
  70. package/dist/LinearSNPCoverageDisplay/models/model.js +170 -244
  71. package/dist/LinearSNPCoverageDisplay/models/model.js.map +1 -1
  72. package/dist/NestedFrequencyTable.js +27 -40
  73. package/dist/NestedFrequencyTable.js.map +1 -1
  74. package/dist/PileupRPC/rpcMethods.js +63 -191
  75. package/dist/PileupRPC/rpcMethods.js.map +1 -1
  76. package/dist/PileupRenderer/PileupLayoutSession.js +25 -47
  77. package/dist/PileupRenderer/PileupLayoutSession.js.map +1 -1
  78. package/dist/PileupRenderer/PileupRenderer.js +395 -529
  79. package/dist/PileupRenderer/PileupRenderer.js.map +1 -1
  80. package/dist/PileupRenderer/components/PileupRendering.js +41 -68
  81. package/dist/PileupRenderer/components/PileupRendering.js.map +1 -1
  82. package/dist/PileupRenderer/configSchema.js +2 -2
  83. package/dist/PileupRenderer/configSchema.js.map +1 -1
  84. package/dist/PileupRenderer/index.js +9 -11
  85. package/dist/PileupRenderer/index.js.map +1 -1
  86. package/dist/PileupRenderer/sortUtil.js +36 -40
  87. package/dist/PileupRenderer/sortUtil.js.map +1 -1
  88. package/dist/SNPCoverageAdapter/SNPCoverageAdapter.js +229 -415
  89. package/dist/SNPCoverageAdapter/SNPCoverageAdapter.js.map +1 -1
  90. package/dist/SNPCoverageAdapter/configSchema.js +5 -9
  91. package/dist/SNPCoverageAdapter/configSchema.js.map +1 -1
  92. package/dist/SNPCoverageAdapter/index.js +17 -21
  93. package/dist/SNPCoverageAdapter/index.js.map +1 -1
  94. package/dist/SNPCoverageRenderer/SNPCoverageRenderer.js +175 -259
  95. package/dist/SNPCoverageRenderer/SNPCoverageRenderer.js.map +1 -1
  96. package/dist/SNPCoverageRenderer/configSchema.js +1 -1
  97. package/dist/SNPCoverageRenderer/configSchema.js.map +1 -1
  98. package/dist/SNPCoverageRenderer/index.js +10 -12
  99. package/dist/SNPCoverageRenderer/index.js.map +1 -1
  100. package/dist/index.js +40 -58
  101. package/dist/index.js.map +1 -1
  102. package/dist/shared.js +23 -78
  103. package/dist/shared.js.map +1 -1
  104. package/dist/util.js +13 -66
  105. package/dist/util.js.map +1 -1
  106. package/esm/LinearPileupDisplay/model.d.ts +2 -2
  107. package/esm/LinearSNPCoverageDisplay/models/model.d.ts +1 -1
  108. package/esm/PileupRenderer/PileupRenderer.js +0 -2
  109. package/esm/PileupRenderer/PileupRenderer.js.map +1 -1
  110. package/esm/SNPCoverageRenderer/SNPCoverageRenderer.js +0 -1
  111. package/esm/SNPCoverageRenderer/SNPCoverageRenderer.js.map +1 -1
  112. package/package.json +2 -3
  113. package/src/AlignmentsFeatureDetail/__snapshots__/index.test.js.snap +12 -12
  114. package/src/PileupRenderer/PileupRenderer.tsx +0 -2
  115. package/src/SNPCoverageRenderer/SNPCoverageRenderer.ts +0 -1
@@ -1,15 +1,4 @@
1
1
  "use strict";
2
- var __assign = (this && this.__assign) || function () {
3
- __assign = Object.assign || function(t) {
4
- for (var s, i = 1, n = arguments.length; i < n; i++) {
5
- s = arguments[i];
6
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
- t[p] = s[p];
8
- }
9
- return t;
10
- };
11
- return __assign.apply(this, arguments);
12
- };
13
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
14
3
  if (k2 === undefined) k2 = k;
15
4
  var desc = Object.getOwnPropertyDescriptor(m, k);
@@ -33,681 +22,582 @@ var __importStar = (this && this.__importStar) || function (mod) {
33
22
  __setModuleDefault(result, mod);
34
23
  return result;
35
24
  };
36
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
37
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
38
- return new (P || (P = Promise))(function (resolve, reject) {
39
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
40
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
41
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
42
- step((generator = generator.apply(thisArg, _arguments || [])).next());
43
- });
44
- };
45
- var __generator = (this && this.__generator) || function (thisArg, body) {
46
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
47
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
48
- function verb(n) { return function (v) { return step([n, v]); }; }
49
- function step(op) {
50
- if (f) throw new TypeError("Generator is already executing.");
51
- while (_) try {
52
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
53
- if (y = 0, t) op = [op[0] & 2, t.value];
54
- switch (op[0]) {
55
- case 0: case 1: t = op; break;
56
- case 4: _.label++; return { value: op[1], done: false };
57
- case 5: _.label++; y = op[1]; op = [0]; continue;
58
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
59
- default:
60
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
61
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
62
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
63
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
64
- if (t[2]) _.ops.pop();
65
- _.trys.pop(); continue;
66
- }
67
- op = body.call(thisArg, _);
68
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
69
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
70
- }
71
- };
72
- var __rest = (this && this.__rest) || function (s, e) {
73
- var t = {};
74
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
75
- t[p] = s[p];
76
- if (s != null && typeof Object.getOwnPropertySymbols === "function")
77
- for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
78
- if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
79
- t[p[i]] = s[p[i]];
80
- }
81
- return t;
82
- };
83
- var __read = (this && this.__read) || function (o, n) {
84
- var m = typeof Symbol === "function" && o[Symbol.iterator];
85
- if (!m) return o;
86
- var i = m.call(o), r, ar = [], e;
87
- try {
88
- while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
89
- }
90
- catch (error) { e = { error: error }; }
91
- finally {
92
- try {
93
- if (r && !r.done && (m = i["return"])) m.call(i);
94
- }
95
- finally { if (e) throw e.error; }
96
- }
97
- return ar;
98
- };
99
- var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
100
- if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
101
- if (ar || !(i in from)) {
102
- if (!ar) ar = Array.prototype.slice.call(from, 0, i);
103
- ar[i] = from[i];
104
- }
105
- }
106
- return to.concat(ar || Array.prototype.slice.call(from));
107
- };
108
25
  var __importDefault = (this && this.__importDefault) || function (mod) {
109
26
  return (mod && mod.__esModule) ? mod : { "default": mod };
110
27
  };
111
28
  Object.defineProperty(exports, "__esModule", { value: true });
112
- var react_1 = require("react");
113
- var mobx_1 = require("mobx");
114
- var mobx_state_tree_1 = require("mobx-state-tree");
115
- var copy_to_clipboard_1 = __importDefault(require("copy-to-clipboard"));
116
- var configuration_1 = require("@jbrowse/core/configuration");
117
- var tracks_1 = require("@jbrowse/core/util/tracks");
118
- var util_1 = require("@jbrowse/core/util");
119
- var plugin_linear_genome_view_1 = require("@jbrowse/plugin-linear-genome-view");
29
+ const react_1 = require("react");
30
+ const mobx_1 = require("mobx");
31
+ const mobx_state_tree_1 = require("mobx-state-tree");
32
+ const copy_to_clipboard_1 = __importDefault(require("copy-to-clipboard"));
33
+ const configuration_1 = require("@jbrowse/core/configuration");
34
+ const tracks_1 = require("@jbrowse/core/util/tracks");
35
+ const util_1 = require("@jbrowse/core/util");
36
+ const plugin_linear_genome_view_1 = require("@jbrowse/plugin-linear-genome-view");
120
37
  // icons
121
- var Visibility_1 = __importDefault(require("@mui/icons-material/Visibility"));
122
- var Icons_1 = require("@jbrowse/core/ui/Icons");
123
- var MenuOpen_1 = __importDefault(require("@mui/icons-material/MenuOpen"));
124
- var Sort_1 = __importDefault(require("@mui/icons-material/Sort"));
125
- var Palette_1 = __importDefault(require("@mui/icons-material/Palette"));
126
- var ClearAll_1 = __importDefault(require("@mui/icons-material/ClearAll"));
127
- var LinearPileupDisplayBlurb_1 = __importDefault(require("./components/LinearPileupDisplayBlurb"));
128
- var shared_1 = require("../shared");
38
+ const Visibility_1 = __importDefault(require("@mui/icons-material/Visibility"));
39
+ const Icons_1 = require("@jbrowse/core/ui/Icons");
40
+ const MenuOpen_1 = __importDefault(require("@mui/icons-material/MenuOpen"));
41
+ const Sort_1 = __importDefault(require("@mui/icons-material/Sort"));
42
+ const Palette_1 = __importDefault(require("@mui/icons-material/Palette"));
43
+ const ClearAll_1 = __importDefault(require("@mui/icons-material/ClearAll"));
44
+ const LinearPileupDisplayBlurb_1 = __importDefault(require("./components/LinearPileupDisplayBlurb"));
45
+ const shared_1 = require("../shared");
129
46
  // async
130
- var ColorByTagDlg = (0, react_1.lazy)(function () { return Promise.resolve().then(function () { return __importStar(require('./components/ColorByTag')); }); });
131
- var FilterByTagDlg = (0, react_1.lazy)(function () { return Promise.resolve().then(function () { return __importStar(require('./components/FilterByTag')); }); });
132
- var SortByTagDlg = (0, react_1.lazy)(function () { return Promise.resolve().then(function () { return __importStar(require('./components/SortByTag')); }); });
133
- var SetFeatureHeightDlg = (0, react_1.lazy)(function () { return Promise.resolve().then(function () { return __importStar(require('./components/SetFeatureHeight')); }); });
134
- var SetMaxHeightDlg = (0, react_1.lazy)(function () { return Promise.resolve().then(function () { return __importStar(require('./components/SetMaxHeight')); }); });
135
- var ModificationsDlg = (0, react_1.lazy)(function () { return Promise.resolve().then(function () { return __importStar(require('./components/ColorByModifications')); }); });
47
+ const ColorByTagDlg = (0, react_1.lazy)(() => Promise.resolve().then(() => __importStar(require('./components/ColorByTag'))));
48
+ const FilterByTagDlg = (0, react_1.lazy)(() => Promise.resolve().then(() => __importStar(require('./components/FilterByTag'))));
49
+ const SortByTagDlg = (0, react_1.lazy)(() => Promise.resolve().then(() => __importStar(require('./components/SortByTag'))));
50
+ const SetFeatureHeightDlg = (0, react_1.lazy)(() => Promise.resolve().then(() => __importStar(require('./components/SetFeatureHeight'))));
51
+ const SetMaxHeightDlg = (0, react_1.lazy)(() => Promise.resolve().then(() => __importStar(require('./components/SetMaxHeight'))));
52
+ const ModificationsDlg = (0, react_1.lazy)(() => Promise.resolve().then(() => __importStar(require('./components/ColorByModifications'))));
136
53
  // using a map because it preserves order
137
- var rendererTypes = new Map([
54
+ const rendererTypes = new Map([
138
55
  ['pileup', 'PileupRenderer'],
139
56
  ['svg', 'SvgFeatureRenderer'],
140
57
  ]);
141
- var stateModelFactory = function (configSchema) {
142
- return mobx_state_tree_1.types
143
- .compose('LinearPileupDisplay', plugin_linear_genome_view_1.BaseLinearDisplay, mobx_state_tree_1.types.model({
144
- type: mobx_state_tree_1.types.literal('LinearPileupDisplay'),
145
- configuration: (0, configuration_1.ConfigurationReference)(configSchema),
146
- showSoftClipping: false,
147
- featureHeight: mobx_state_tree_1.types.maybe(mobx_state_tree_1.types.number),
148
- noSpacing: mobx_state_tree_1.types.maybe(mobx_state_tree_1.types.boolean),
149
- fadeLikelihood: mobx_state_tree_1.types.maybe(mobx_state_tree_1.types.boolean),
150
- trackMaxHeight: mobx_state_tree_1.types.maybe(mobx_state_tree_1.types.number),
151
- mismatchAlpha: mobx_state_tree_1.types.maybe(mobx_state_tree_1.types.boolean),
152
- sortedBy: mobx_state_tree_1.types.maybe(mobx_state_tree_1.types.model({
153
- type: mobx_state_tree_1.types.string,
154
- pos: mobx_state_tree_1.types.number,
155
- tag: mobx_state_tree_1.types.maybe(mobx_state_tree_1.types.string),
156
- refName: mobx_state_tree_1.types.string,
157
- assemblyName: mobx_state_tree_1.types.string,
158
- })),
159
- colorBy: mobx_state_tree_1.types.maybe(mobx_state_tree_1.types.model({
160
- type: mobx_state_tree_1.types.string,
161
- tag: mobx_state_tree_1.types.maybe(mobx_state_tree_1.types.string),
162
- extra: mobx_state_tree_1.types.frozen(),
163
- })),
164
- filterBy: mobx_state_tree_1.types.optional(mobx_state_tree_1.types.model({
165
- flagInclude: mobx_state_tree_1.types.optional(mobx_state_tree_1.types.number, 0),
166
- flagExclude: mobx_state_tree_1.types.optional(mobx_state_tree_1.types.number, 1540),
167
- readName: mobx_state_tree_1.types.maybe(mobx_state_tree_1.types.string),
168
- tagFilter: mobx_state_tree_1.types.maybe(mobx_state_tree_1.types.model({ tag: mobx_state_tree_1.types.string, value: mobx_state_tree_1.types.string })),
169
- }), {}),
170
- }))
171
- .volatile(function () { return ({
172
- colorTagMap: mobx_1.observable.map({}),
173
- modificationTagMap: mobx_1.observable.map({}),
174
- featureUnderMouseVolatile: undefined,
175
- ready: false,
176
- }); })
177
- .actions(function (self) { return ({
178
- setReady: function (flag) {
179
- self.ready = flag;
180
- },
181
- setMaxHeight: function (n) {
182
- self.trackMaxHeight = n;
183
- },
184
- setFeatureHeight: function (n) {
185
- self.featureHeight = n;
186
- },
187
- setNoSpacing: function (flag) {
188
- self.noSpacing = flag;
189
- },
190
- setColorScheme: function (colorScheme) {
191
- self.colorTagMap = mobx_1.observable.map({}); // clear existing mapping
192
- self.colorBy = (0, mobx_state_tree_1.cast)(colorScheme);
193
- self.ready = false;
194
- },
195
- updateModificationColorMap: function (uniqueModifications) {
196
- var colorPalette = ['red', 'blue', 'green', 'orange', 'purple'];
197
- uniqueModifications.forEach(function (value) {
198
- if (!self.modificationTagMap.has(value)) {
199
- var totalKeys = __spreadArray([], __read(self.modificationTagMap.keys()), false).length;
200
- var newColor = colorPalette[totalKeys];
201
- self.modificationTagMap.set(value, newColor);
58
+ const stateModelFactory = (configSchema) => mobx_state_tree_1.types
59
+ .compose('LinearPileupDisplay', plugin_linear_genome_view_1.BaseLinearDisplay, mobx_state_tree_1.types.model({
60
+ type: mobx_state_tree_1.types.literal('LinearPileupDisplay'),
61
+ configuration: (0, configuration_1.ConfigurationReference)(configSchema),
62
+ showSoftClipping: false,
63
+ featureHeight: mobx_state_tree_1.types.maybe(mobx_state_tree_1.types.number),
64
+ noSpacing: mobx_state_tree_1.types.maybe(mobx_state_tree_1.types.boolean),
65
+ fadeLikelihood: mobx_state_tree_1.types.maybe(mobx_state_tree_1.types.boolean),
66
+ trackMaxHeight: mobx_state_tree_1.types.maybe(mobx_state_tree_1.types.number),
67
+ mismatchAlpha: mobx_state_tree_1.types.maybe(mobx_state_tree_1.types.boolean),
68
+ sortedBy: mobx_state_tree_1.types.maybe(mobx_state_tree_1.types.model({
69
+ type: mobx_state_tree_1.types.string,
70
+ pos: mobx_state_tree_1.types.number,
71
+ tag: mobx_state_tree_1.types.maybe(mobx_state_tree_1.types.string),
72
+ refName: mobx_state_tree_1.types.string,
73
+ assemblyName: mobx_state_tree_1.types.string,
74
+ })),
75
+ colorBy: mobx_state_tree_1.types.maybe(mobx_state_tree_1.types.model({
76
+ type: mobx_state_tree_1.types.string,
77
+ tag: mobx_state_tree_1.types.maybe(mobx_state_tree_1.types.string),
78
+ extra: mobx_state_tree_1.types.frozen(),
79
+ })),
80
+ filterBy: mobx_state_tree_1.types.optional(mobx_state_tree_1.types.model({
81
+ flagInclude: mobx_state_tree_1.types.optional(mobx_state_tree_1.types.number, 0),
82
+ flagExclude: mobx_state_tree_1.types.optional(mobx_state_tree_1.types.number, 1540),
83
+ readName: mobx_state_tree_1.types.maybe(mobx_state_tree_1.types.string),
84
+ tagFilter: mobx_state_tree_1.types.maybe(mobx_state_tree_1.types.model({ tag: mobx_state_tree_1.types.string, value: mobx_state_tree_1.types.string })),
85
+ }), {}),
86
+ }))
87
+ .volatile(() => ({
88
+ colorTagMap: mobx_1.observable.map({}),
89
+ modificationTagMap: mobx_1.observable.map({}),
90
+ featureUnderMouseVolatile: undefined,
91
+ ready: false,
92
+ }))
93
+ .actions(self => ({
94
+ setReady(flag) {
95
+ self.ready = flag;
96
+ },
97
+ setMaxHeight(n) {
98
+ self.trackMaxHeight = n;
99
+ },
100
+ setFeatureHeight(n) {
101
+ self.featureHeight = n;
102
+ },
103
+ setNoSpacing(flag) {
104
+ self.noSpacing = flag;
105
+ },
106
+ setColorScheme(colorScheme) {
107
+ self.colorTagMap = mobx_1.observable.map({}); // clear existing mapping
108
+ self.colorBy = (0, mobx_state_tree_1.cast)(colorScheme);
109
+ self.ready = false;
110
+ },
111
+ updateModificationColorMap(uniqueModifications) {
112
+ const colorPalette = ['red', 'blue', 'green', 'orange', 'purple'];
113
+ uniqueModifications.forEach(value => {
114
+ if (!self.modificationTagMap.has(value)) {
115
+ const totalKeys = [...self.modificationTagMap.keys()].length;
116
+ const newColor = colorPalette[totalKeys];
117
+ self.modificationTagMap.set(value, newColor);
118
+ }
119
+ });
120
+ },
121
+ updateColorTagMap(uniqueTag) {
122
+ // pale color scheme
123
+ // https://cran.r-project.org/web/packages/khroma/vignettes/tol.html
124
+ // e.g. "tol_light"
125
+ const colorPalette = [
126
+ '#BBCCEE',
127
+ 'pink',
128
+ '#CCDDAA',
129
+ '#EEEEBB',
130
+ '#FFCCCC',
131
+ 'lightblue',
132
+ 'lightgreen',
133
+ 'tan',
134
+ '#CCEEFF',
135
+ 'lightsalmon',
136
+ ];
137
+ uniqueTag.forEach(value => {
138
+ if (!self.colorTagMap.has(value)) {
139
+ const totalKeys = [...self.colorTagMap.keys()].length;
140
+ const newColor = colorPalette[totalKeys];
141
+ self.colorTagMap.set(value, newColor);
142
+ }
143
+ });
144
+ },
145
+ setFeatureUnderMouse(feat) {
146
+ self.featureUnderMouseVolatile = feat;
147
+ },
148
+ }))
149
+ .actions(self => ({
150
+ afterAttach() {
151
+ (0, mobx_state_tree_1.addDisposer)(self, (0, mobx_1.autorun)(async () => {
152
+ try {
153
+ const { rpcManager } = (0, util_1.getSession)(self);
154
+ const view = (0, util_1.getContainingView)(self);
155
+ const { sortedBy, colorBy, parentTrack, adapterConfig, rendererType, } = self;
156
+ const { staticBlocks, bpPerPx } = view;
157
+ if (!self.estimatedStatsReady) {
158
+ return;
202
159
  }
203
- });
204
- },
205
- updateColorTagMap: function (uniqueTag) {
206
- // pale color scheme
207
- // https://cran.r-project.org/web/packages/khroma/vignettes/tol.html
208
- // e.g. "tol_light"
209
- var colorPalette = [
210
- '#BBCCEE',
211
- 'pink',
212
- '#CCDDAA',
213
- '#EEEEBB',
214
- '#FFCCCC',
215
- 'lightblue',
216
- 'lightgreen',
217
- 'tan',
218
- '#CCEEFF',
219
- 'lightsalmon',
220
- ];
221
- uniqueTag.forEach(function (value) {
222
- if (!self.colorTagMap.has(value)) {
223
- var totalKeys = __spreadArray([], __read(self.colorTagMap.keys()), false).length;
224
- var newColor = colorPalette[totalKeys];
225
- self.colorTagMap.set(value, newColor);
160
+ if (self.regionTooLarge) {
161
+ return;
226
162
  }
227
- });
228
- },
229
- setFeatureUnderMouse: function (feat) {
230
- self.featureUnderMouseVolatile = feat;
231
- },
232
- }); })
233
- .actions(function (self) { return ({
234
- afterAttach: function () {
235
- var _this = this;
236
- (0, mobx_state_tree_1.addDisposer)(self, (0, mobx_1.autorun)(function () { return __awaiter(_this, void 0, void 0, function () {
237
- var rpcManager, view, sortedBy, colorBy, parentTrack, adapterConfig, rendererType, staticBlocks, bpPerPx, uniqueTagSet, adapter, _a, _b, pos, refName, assemblyName, e_1;
238
- return __generator(this, function (_c) {
239
- switch (_c.label) {
240
- case 0:
241
- _c.trys.push([0, 8, , 9]);
242
- rpcManager = (0, util_1.getSession)(self).rpcManager;
243
- view = (0, util_1.getContainingView)(self);
244
- sortedBy = self.sortedBy, colorBy = self.colorBy, parentTrack = self.parentTrack, adapterConfig = self.adapterConfig, rendererType = self.rendererType;
245
- staticBlocks = view.staticBlocks, bpPerPx = view.bpPerPx;
246
- if (!self.estimatedStatsReady) {
247
- return [2 /*return*/];
248
- }
249
- if (self.regionTooLarge) {
250
- return [2 /*return*/];
251
- }
252
- if (!(colorBy === null || colorBy === void 0 ? void 0 : colorBy.tag)) return [3 /*break*/, 2];
253
- return [4 /*yield*/, (0, shared_1.getUniqueTagValues)(self, colorBy, staticBlocks)];
254
- case 1:
255
- uniqueTagSet = _c.sent();
256
- self.updateColorTagMap(uniqueTagSet);
257
- _c.label = 2;
258
- case 2:
259
- if (!((colorBy === null || colorBy === void 0 ? void 0 : colorBy.type) === 'modifications')) return [3 /*break*/, 4];
260
- adapter = (0, configuration_1.getConf)(parentTrack, ['adapter']);
261
- _b = (_a = self).updateModificationColorMap;
262
- return [4 /*yield*/, (0, shared_1.getUniqueModificationValues)(self, adapter, colorBy, staticBlocks)];
263
- case 3:
264
- _b.apply(_a, [_c.sent()]);
265
- _c.label = 4;
266
- case 4:
267
- if (!sortedBy) return [3 /*break*/, 6];
268
- pos = sortedBy.pos, refName = sortedBy.refName, assemblyName = sortedBy.assemblyName;
269
- // render just the sorted region first
270
- return [4 /*yield*/, self.rendererType.renderInClient(rpcManager, __assign({ assemblyName: assemblyName, regions: [
271
- {
272
- start: pos,
273
- end: pos + 1,
274
- refName: refName,
275
- assemblyName: assemblyName,
276
- },
277
- ], adapterConfig: adapterConfig, rendererType: rendererType.name, sessionId: (0, tracks_1.getRpcSessionId)(self), layoutId: view.id, timeout: 1000000 }, self.renderProps()))];
278
- case 5:
279
- // render just the sorted region first
280
- _c.sent();
281
- self.setReady(true);
282
- self.setCurrBpPerPx(bpPerPx);
283
- return [3 /*break*/, 7];
284
- case 6:
285
- self.setReady(true);
286
- _c.label = 7;
287
- case 7: return [3 /*break*/, 9];
288
- case 8:
289
- e_1 = _c.sent();
290
- console.error(e_1);
291
- self.setError(e_1);
292
- return [3 /*break*/, 9];
293
- case 9: return [2 /*return*/];
163
+ // continually generate the vc pairing, set and rerender if any
164
+ // new values seen
165
+ if (colorBy === null || colorBy === void 0 ? void 0 : colorBy.tag) {
166
+ const uniqueTagSet = await (0, shared_1.getUniqueTagValues)(self, colorBy, staticBlocks);
167
+ self.updateColorTagMap(uniqueTagSet);
168
+ }
169
+ if ((colorBy === null || colorBy === void 0 ? void 0 : colorBy.type) === 'modifications') {
170
+ const adapter = (0, configuration_1.getConf)(parentTrack, ['adapter']);
171
+ self.updateModificationColorMap(await (0, shared_1.getUniqueModificationValues)(self, adapter, colorBy, staticBlocks));
172
+ }
173
+ if (sortedBy) {
174
+ const { pos, refName, assemblyName } = sortedBy;
175
+ // render just the sorted region first
176
+ await self.rendererType.renderInClient(rpcManager, {
177
+ assemblyName,
178
+ regions: [
179
+ {
180
+ start: pos,
181
+ end: pos + 1,
182
+ refName,
183
+ assemblyName,
184
+ },
185
+ ],
186
+ adapterConfig: adapterConfig,
187
+ rendererType: rendererType.name,
188
+ sessionId: (0, tracks_1.getRpcSessionId)(self),
189
+ layoutId: view.id,
190
+ timeout: 1000000,
191
+ ...self.renderProps(),
192
+ });
193
+ self.setReady(true);
194
+ self.setCurrBpPerPx(bpPerPx);
195
+ }
196
+ else {
197
+ self.setReady(true);
198
+ }
199
+ }
200
+ catch (e) {
201
+ console.error(e);
202
+ self.setError(e);
203
+ }
204
+ }, { delay: 1000 }));
205
+ // autorun synchronizes featureUnderMouse with featureIdUnderMouse
206
+ (0, mobx_state_tree_1.addDisposer)(self, (0, mobx_1.autorun)(async () => {
207
+ var _a;
208
+ const session = (0, util_1.getSession)(self);
209
+ try {
210
+ const featureId = self.featureIdUnderMouse;
211
+ if (((_a = self.featureUnderMouse) === null || _a === void 0 ? void 0 : _a.id()) !== featureId) {
212
+ if (!featureId) {
213
+ self.setFeatureUnderMouse(undefined);
294
214
  }
295
- });
296
- }); }, { delay: 1000 }));
297
- // autorun synchronizes featureUnderMouse with featureIdUnderMouse
298
- (0, mobx_state_tree_1.addDisposer)(self, (0, mobx_1.autorun)(function () { return __awaiter(_this, void 0, void 0, function () {
299
- var session, featureId, sessionId, view, feature, e_2;
300
- var _a;
301
- return __generator(this, function (_b) {
302
- switch (_b.label) {
303
- case 0:
304
- session = (0, util_1.getSession)(self);
305
- _b.label = 1;
306
- case 1:
307
- _b.trys.push([1, 5, , 6]);
308
- featureId = self.featureIdUnderMouse;
309
- if (!(((_a = self.featureUnderMouse) === null || _a === void 0 ? void 0 : _a.id()) !== featureId)) return [3 /*break*/, 4];
310
- if (!!featureId) return [3 /*break*/, 2];
311
- self.setFeatureUnderMouse(undefined);
312
- return [3 /*break*/, 4];
313
- case 2:
314
- sessionId = (0, tracks_1.getRpcSessionId)(self);
315
- view = (0, util_1.getContainingView)(self);
316
- return [4 /*yield*/, session.rpcManager.call(sessionId, 'CoreGetFeatureDetails', {
317
- featureId: featureId,
318
- sessionId: sessionId,
319
- layoutId: view.id,
320
- rendererType: 'PileupRenderer',
321
- })];
322
- case 3:
323
- feature = (_b.sent()).feature;
324
- // check featureIdUnderMouse is still the same as the
325
- // feature.id that was returned e.g. that the user hasn't
326
- // moused over to a new position during the async operation
327
- // above
215
+ else {
216
+ const sessionId = (0, tracks_1.getRpcSessionId)(self);
217
+ const view = (0, util_1.getContainingView)(self);
218
+ const { feature } = (await session.rpcManager.call(sessionId, 'CoreGetFeatureDetails', {
219
+ featureId,
220
+ sessionId,
221
+ layoutId: view.id,
222
+ rendererType: 'PileupRenderer',
223
+ }));
224
+ // check featureIdUnderMouse is still the same as the
225
+ // feature.id that was returned e.g. that the user hasn't
226
+ // moused over to a new position during the async operation
227
+ // above
228
+ // @ts-ignore
229
+ if (self.featureIdUnderMouse === feature.uniqueId) {
328
230
  // @ts-ignore
329
- if (self.featureIdUnderMouse === feature.uniqueId) {
330
- // @ts-ignore
331
- self.setFeatureUnderMouse(new util_1.SimpleFeature(feature));
332
- }
333
- _b.label = 4;
334
- case 4: return [3 /*break*/, 6];
335
- case 5:
336
- e_2 = _b.sent();
337
- console.error(e_2);
338
- session.notify("".concat(e_2), 'error');
339
- return [3 /*break*/, 6];
340
- case 6: return [2 /*return*/];
231
+ self.setFeatureUnderMouse(new util_1.SimpleFeature(feature));
232
+ }
341
233
  }
342
- });
343
- }); }));
344
- },
345
- selectFeature: function (feature) {
346
- var session = (0, util_1.getSession)(self);
347
- if ((0, util_1.isSessionModelWithWidgets)(session)) {
348
- var featureWidget = session.addWidget('AlignmentsFeatureWidget', 'alignmentFeature', { featureData: feature.toJSON(), view: (0, util_1.getContainingView)(self) });
349
- session.showWidget(featureWidget);
350
- }
351
- session.setSelection(feature);
352
- },
353
- clearSelected: function () {
354
- self.sortedBy = undefined;
355
- },
356
- // uses copy-to-clipboard and generates notification
357
- copyFeatureToClipboard: function (feature) {
358
- var _a = feature.toJSON(), uniqueId = _a.uniqueId, rest = __rest(_a, ["uniqueId"]);
359
- var session = (0, util_1.getSession)(self);
360
- (0, copy_to_clipboard_1.default)(JSON.stringify(rest, null, 4));
361
- session.notify('Copied to clipboard', 'success');
362
- },
363
- toggleSoftClipping: function () {
364
- self.showSoftClipping = !self.showSoftClipping;
365
- },
366
- toggleMismatchAlpha: function () {
367
- self.mismatchAlpha = !self.mismatchAlpha;
368
- },
369
- setConfig: function (configuration) {
370
- self.configuration = configuration;
371
- },
372
- setSortedBy: function (type, tag) {
373
- var centerLineInfo = (0, util_1.getContainingView)(self).centerLineInfo;
374
- if (!centerLineInfo) {
375
- return;
234
+ }
376
235
  }
377
- var refName = centerLineInfo.refName, assemblyName = centerLineInfo.assemblyName, offset = centerLineInfo.offset;
378
- var centerBp = Math.round(offset) + 1;
379
- if (centerBp < 0 || !refName) {
380
- return;
236
+ catch (e) {
237
+ console.error(e);
238
+ session.notify(`${e}`, 'error');
381
239
  }
382
- self.sortedBy = {
383
- type: type,
384
- pos: centerBp,
385
- refName: refName,
386
- assemblyName: assemblyName,
387
- tag: tag,
388
- };
389
- self.ready = false;
390
- },
391
- setFilterBy: function (filter) {
392
- self.filterBy = (0, mobx_state_tree_1.cast)(filter);
393
- },
394
- }); })
395
- .actions(function (self) {
396
- // resets the sort object and refresh whole display on reload
397
- var superReload = self.reload;
398
- return {
399
- reload: function () {
400
- self.clearSelected();
401
- superReload();
402
- },
240
+ }));
241
+ },
242
+ selectFeature(feature) {
243
+ const session = (0, util_1.getSession)(self);
244
+ if ((0, util_1.isSessionModelWithWidgets)(session)) {
245
+ const featureWidget = session.addWidget('AlignmentsFeatureWidget', 'alignmentFeature', { featureData: feature.toJSON(), view: (0, util_1.getContainingView)(self) });
246
+ session.showWidget(featureWidget);
247
+ }
248
+ session.setSelection(feature);
249
+ },
250
+ clearSelected() {
251
+ self.sortedBy = undefined;
252
+ },
253
+ // uses copy-to-clipboard and generates notification
254
+ copyFeatureToClipboard(feature) {
255
+ const { uniqueId, ...rest } = feature.toJSON();
256
+ const session = (0, util_1.getSession)(self);
257
+ (0, copy_to_clipboard_1.default)(JSON.stringify(rest, null, 4));
258
+ session.notify('Copied to clipboard', 'success');
259
+ },
260
+ toggleSoftClipping() {
261
+ self.showSoftClipping = !self.showSoftClipping;
262
+ },
263
+ toggleMismatchAlpha() {
264
+ self.mismatchAlpha = !self.mismatchAlpha;
265
+ },
266
+ setConfig(configuration) {
267
+ self.configuration = configuration;
268
+ },
269
+ setSortedBy(type, tag) {
270
+ const { centerLineInfo } = (0, util_1.getContainingView)(self);
271
+ if (!centerLineInfo) {
272
+ return;
273
+ }
274
+ const { refName, assemblyName, offset } = centerLineInfo;
275
+ const centerBp = Math.round(offset) + 1;
276
+ if (centerBp < 0 || !refName) {
277
+ return;
278
+ }
279
+ self.sortedBy = {
280
+ type,
281
+ pos: centerBp,
282
+ refName,
283
+ assemblyName,
284
+ tag,
403
285
  };
404
- })
405
- .views(function (self) { return ({
406
- get maxHeight() {
407
- var conf = (0, configuration_1.getConf)(self, ['renderers', self.rendererTypeName]) || {};
408
- return self.trackMaxHeight !== undefined
409
- ? self.trackMaxHeight
410
- : conf.maxHeight;
286
+ self.ready = false;
287
+ },
288
+ setFilterBy(filter) {
289
+ self.filterBy = (0, mobx_state_tree_1.cast)(filter);
290
+ },
291
+ }))
292
+ .actions(self => {
293
+ // resets the sort object and refresh whole display on reload
294
+ const superReload = self.reload;
295
+ return {
296
+ reload() {
297
+ self.clearSelected();
298
+ superReload();
411
299
  },
412
- get rendererConfig() {
413
- var configBlob = (0, configuration_1.getConf)(self, ['renderers', self.rendererTypeName]) || {};
414
- return self.rendererType.configSchema.create(__assign(__assign({}, configBlob), { height: self.featureHeight, noSpacing: self.noSpacing, maxHeight: this.maxHeight, mismatchAlpha: self.mismatchAlpha }), (0, mobx_state_tree_1.getEnv)(self));
300
+ };
301
+ })
302
+ .views(self => ({
303
+ get maxHeight() {
304
+ const conf = (0, configuration_1.getConf)(self, ['renderers', self.rendererTypeName]) || {};
305
+ return self.trackMaxHeight !== undefined
306
+ ? self.trackMaxHeight
307
+ : conf.maxHeight;
308
+ },
309
+ get rendererConfig() {
310
+ const configBlob = (0, configuration_1.getConf)(self, ['renderers', self.rendererTypeName]) || {};
311
+ return self.rendererType.configSchema.create({
312
+ ...configBlob,
313
+ height: self.featureHeight,
314
+ noSpacing: self.noSpacing,
315
+ maxHeight: this.maxHeight,
316
+ mismatchAlpha: self.mismatchAlpha,
317
+ }, (0, mobx_state_tree_1.getEnv)(self));
318
+ },
319
+ get featureHeightSetting() {
320
+ return (self.featureHeight || (0, configuration_1.readConfObject)(this.rendererConfig, 'height'));
321
+ },
322
+ get mismatchAlphaSetting() {
323
+ return self.mismatchAlpha !== undefined
324
+ ? self.mismatchAlpha
325
+ : (0, configuration_1.readConfObject)(this.rendererConfig, 'mismatchAlpha');
326
+ },
327
+ get featureUnderMouse() {
328
+ return self.featureUnderMouseVolatile;
329
+ },
330
+ }))
331
+ .views(self => {
332
+ const { trackMenuItems: superTrackMenuItems, renderProps: superRenderProps, } = self;
333
+ return {
334
+ get rendererTypeName() {
335
+ const viewName = (0, configuration_1.getConf)(self, 'defaultRendering');
336
+ const rendererType = rendererTypes.get(viewName);
337
+ if (!rendererType) {
338
+ throw new Error(`unknown alignments view name ${viewName}`);
339
+ }
340
+ return rendererType;
415
341
  },
416
- get featureHeightSetting() {
417
- return (self.featureHeight || (0, configuration_1.readConfObject)(this.rendererConfig, 'height'));
342
+ contextMenuItems() {
343
+ const feat = self.contextMenuFeature;
344
+ const contextMenuItems = feat
345
+ ? [
346
+ {
347
+ label: 'Open feature details',
348
+ icon: MenuOpen_1.default,
349
+ onClick: () => {
350
+ self.clearFeatureSelection();
351
+ if (feat) {
352
+ self.selectFeature(feat);
353
+ }
354
+ },
355
+ },
356
+ {
357
+ label: 'Copy info to clipboard',
358
+ icon: Icons_1.ContentCopy,
359
+ onClick: () => {
360
+ if (feat) {
361
+ self.copyFeatureToClipboard(feat);
362
+ }
363
+ },
364
+ },
365
+ ]
366
+ : [];
367
+ return contextMenuItems;
418
368
  },
419
- get mismatchAlphaSetting() {
420
- return self.mismatchAlpha !== undefined
421
- ? self.mismatchAlpha
422
- : (0, configuration_1.readConfObject)(this.rendererConfig, 'mismatchAlpha');
369
+ get DisplayBlurb() {
370
+ return LinearPileupDisplayBlurb_1.default;
423
371
  },
424
- get featureUnderMouse() {
425
- return self.featureUnderMouseVolatile;
372
+ renderProps() {
373
+ const view = (0, util_1.getContainingView)(self);
374
+ const { colorTagMap, modificationTagMap, sortedBy, colorBy, filterBy, rpcDriverName, currBpPerPx, ready, } = self;
375
+ const superProps = superRenderProps();
376
+ return {
377
+ ...superProps,
378
+ notReady: superProps.notReady ||
379
+ !ready ||
380
+ (sortedBy && currBpPerPx !== view.bpPerPx),
381
+ rpcDriverName,
382
+ displayModel: self,
383
+ sortedBy,
384
+ colorBy,
385
+ filterBy: JSON.parse(JSON.stringify(filterBy)),
386
+ colorTagMap: Object.fromEntries(colorTagMap.toJSON()),
387
+ modificationTagMap: Object.fromEntries(modificationTagMap.toJSON()),
388
+ showSoftClip: self.showSoftClipping,
389
+ config: self.rendererConfig,
390
+ async onFeatureClick(_, featureId) {
391
+ const session = (0, util_1.getSession)(self);
392
+ const { rpcManager } = session;
393
+ try {
394
+ const f = featureId || self.featureIdUnderMouse;
395
+ if (!f) {
396
+ self.clearFeatureSelection();
397
+ }
398
+ else {
399
+ const sessionId = (0, tracks_1.getRpcSessionId)(self);
400
+ const { feature } = (await rpcManager.call(sessionId, 'CoreGetFeatureDetails', {
401
+ featureId: f,
402
+ sessionId,
403
+ layoutId: (0, util_1.getContainingView)(self).id,
404
+ rendererType: 'PileupRenderer',
405
+ }));
406
+ if (feature) {
407
+ // @ts-ignore
408
+ self.selectFeature(new util_1.SimpleFeature(feature));
409
+ }
410
+ }
411
+ }
412
+ catch (e) {
413
+ console.error(e);
414
+ session.notify(`${e}`);
415
+ }
416
+ },
417
+ onClick() {
418
+ self.clearFeatureSelection();
419
+ },
420
+ // similar to click but opens a menu with further options
421
+ async onFeatureContextMenu(_, featureId) {
422
+ const session = (0, util_1.getSession)(self);
423
+ const { rpcManager } = session;
424
+ try {
425
+ const f = featureId || self.featureIdUnderMouse;
426
+ if (!f) {
427
+ self.clearFeatureSelection();
428
+ }
429
+ else {
430
+ const sessionId = (0, tracks_1.getRpcSessionId)(self);
431
+ const { feature } = (await rpcManager.call(sessionId, 'CoreGetFeatureDetails', {
432
+ featureId: f,
433
+ sessionId,
434
+ layoutId: (0, util_1.getContainingView)(self).id,
435
+ rendererType: 'PileupRenderer',
436
+ }));
437
+ if (feature) {
438
+ self.setContextMenuFeature(new util_1.SimpleFeature(feature));
439
+ }
440
+ }
441
+ }
442
+ catch (e) {
443
+ console.error(e);
444
+ session.notify(`${e}`);
445
+ }
446
+ },
447
+ };
426
448
  },
427
- }); })
428
- .views(function (self) {
429
- var superTrackMenuItems = self.trackMenuItems, superRenderProps = self.renderProps;
430
- return {
431
- get rendererTypeName() {
432
- var viewName = (0, configuration_1.getConf)(self, 'defaultRendering');
433
- var rendererType = rendererTypes.get(viewName);
434
- if (!rendererType) {
435
- throw new Error("unknown alignments view name ".concat(viewName));
436
- }
437
- return rendererType;
438
- },
439
- contextMenuItems: function () {
440
- var feat = self.contextMenuFeature;
441
- var contextMenuItems = feat
442
- ? [
449
+ trackMenuItems() {
450
+ return [
451
+ ...superTrackMenuItems(),
452
+ {
453
+ label: 'Show soft clipping',
454
+ icon: Visibility_1.default,
455
+ type: 'checkbox',
456
+ checked: self.showSoftClipping,
457
+ onClick: () => {
458
+ self.toggleSoftClipping();
459
+ // if toggling from off to on, will break sort for this track
460
+ // so clear it
461
+ if (self.showSoftClipping) {
462
+ self.clearSelected();
463
+ }
464
+ },
465
+ },
466
+ {
467
+ label: 'Sort by',
468
+ icon: Sort_1.default,
469
+ disabled: self.showSoftClipping,
470
+ subMenu: [
471
+ ...['Start location', 'Read strand', 'Base pair'].map(option => ({
472
+ label: option,
473
+ onClick: () => self.setSortedBy(option),
474
+ })),
443
475
  {
444
- label: 'Open feature details',
445
- icon: MenuOpen_1.default,
446
- onClick: function () {
447
- self.clearFeatureSelection();
448
- if (feat) {
449
- self.selectFeature(feat);
450
- }
476
+ label: 'Sort by tag...',
477
+ onClick: () => {
478
+ (0, util_1.getSession)(self).queueDialog(handleClose => [
479
+ SortByTagDlg,
480
+ { model: self, handleClose },
481
+ ]);
451
482
  },
452
483
  },
453
484
  {
454
- label: 'Copy info to clipboard',
455
- icon: Icons_1.ContentCopy,
456
- onClick: function () {
457
- if (feat) {
458
- self.copyFeatureToClipboard(feat);
459
- }
460
- },
461
- },
462
- ]
463
- : [];
464
- return contextMenuItems;
465
- },
466
- get DisplayBlurb() {
467
- return LinearPileupDisplayBlurb_1.default;
468
- },
469
- renderProps: function () {
470
- var view = (0, util_1.getContainingView)(self);
471
- var colorTagMap = self.colorTagMap, modificationTagMap = self.modificationTagMap, sortedBy = self.sortedBy, colorBy = self.colorBy, filterBy = self.filterBy, rpcDriverName = self.rpcDriverName, currBpPerPx = self.currBpPerPx, ready = self.ready;
472
- var superProps = superRenderProps();
473
- return __assign(__assign({}, superProps), { notReady: superProps.notReady ||
474
- !ready ||
475
- (sortedBy && currBpPerPx !== view.bpPerPx), rpcDriverName: rpcDriverName, displayModel: self, sortedBy: sortedBy, colorBy: colorBy, filterBy: JSON.parse(JSON.stringify(filterBy)), colorTagMap: Object.fromEntries(colorTagMap.toJSON()), modificationTagMap: Object.fromEntries(modificationTagMap.toJSON()), showSoftClip: self.showSoftClipping, config: self.rendererConfig, onFeatureClick: function (_, featureId) {
476
- return __awaiter(this, void 0, void 0, function () {
477
- var session, rpcManager, f, sessionId, feature, e_3;
478
- return __generator(this, function (_a) {
479
- switch (_a.label) {
480
- case 0:
481
- session = (0, util_1.getSession)(self);
482
- rpcManager = session.rpcManager;
483
- _a.label = 1;
484
- case 1:
485
- _a.trys.push([1, 5, , 6]);
486
- f = featureId || self.featureIdUnderMouse;
487
- if (!!f) return [3 /*break*/, 2];
488
- self.clearFeatureSelection();
489
- return [3 /*break*/, 4];
490
- case 2:
491
- sessionId = (0, tracks_1.getRpcSessionId)(self);
492
- return [4 /*yield*/, rpcManager.call(sessionId, 'CoreGetFeatureDetails', {
493
- featureId: f,
494
- sessionId: sessionId,
495
- layoutId: (0, util_1.getContainingView)(self).id,
496
- rendererType: 'PileupRenderer',
497
- })];
498
- case 3:
499
- feature = (_a.sent()).feature;
500
- if (feature) {
501
- // @ts-ignore
502
- self.selectFeature(new util_1.SimpleFeature(feature));
503
- }
504
- _a.label = 4;
505
- case 4: return [3 /*break*/, 6];
506
- case 5:
507
- e_3 = _a.sent();
508
- console.error(e_3);
509
- session.notify("".concat(e_3));
510
- return [3 /*break*/, 6];
511
- case 6: return [2 /*return*/];
512
- }
513
- });
514
- });
515
- }, onClick: function () {
516
- self.clearFeatureSelection();
517
- },
518
- // similar to click but opens a menu with further options
519
- onFeatureContextMenu: function (_, featureId) {
520
- return __awaiter(this, void 0, void 0, function () {
521
- var session, rpcManager, f, sessionId, feature, e_4;
522
- return __generator(this, function (_a) {
523
- switch (_a.label) {
524
- case 0:
525
- session = (0, util_1.getSession)(self);
526
- rpcManager = session.rpcManager;
527
- _a.label = 1;
528
- case 1:
529
- _a.trys.push([1, 5, , 6]);
530
- f = featureId || self.featureIdUnderMouse;
531
- if (!!f) return [3 /*break*/, 2];
532
- self.clearFeatureSelection();
533
- return [3 /*break*/, 4];
534
- case 2:
535
- sessionId = (0, tracks_1.getRpcSessionId)(self);
536
- return [4 /*yield*/, rpcManager.call(sessionId, 'CoreGetFeatureDetails', {
537
- featureId: f,
538
- sessionId: sessionId,
539
- layoutId: (0, util_1.getContainingView)(self).id,
540
- rendererType: 'PileupRenderer',
541
- })];
542
- case 3:
543
- feature = (_a.sent()).feature;
544
- if (feature) {
545
- self.setContextMenuFeature(new util_1.SimpleFeature(feature));
546
- }
547
- _a.label = 4;
548
- case 4: return [3 /*break*/, 6];
549
- case 5:
550
- e_4 = _a.sent();
551
- console.error(e_4);
552
- session.notify("".concat(e_4));
553
- return [3 /*break*/, 6];
554
- case 6: return [2 /*return*/];
555
- }
556
- });
557
- });
558
- } });
559
- },
560
- trackMenuItems: function () {
561
- return __spreadArray(__spreadArray([], __read(superTrackMenuItems()), false), [
562
- {
563
- label: 'Show soft clipping',
564
- icon: Visibility_1.default,
565
- type: 'checkbox',
566
- checked: self.showSoftClipping,
567
- onClick: function () {
568
- self.toggleSoftClipping();
569
- // if toggling from off to on, will break sort for this track
570
- // so clear it
571
- if (self.showSoftClipping) {
572
- self.clearSelected();
573
- }
485
+ label: 'Clear sort',
486
+ onClick: () => self.clearSelected(),
574
487
  },
575
- },
576
- {
577
- label: 'Sort by',
578
- icon: Sort_1.default,
579
- disabled: self.showSoftClipping,
580
- subMenu: __spreadArray(__spreadArray([], __read(['Start location', 'Read strand', 'Base pair'].map(function (option) { return ({
581
- label: option,
582
- onClick: function () { return self.setSortedBy(option); },
583
- }); })), false), [
584
- {
585
- label: 'Sort by tag...',
586
- onClick: function () {
587
- (0, util_1.getSession)(self).queueDialog(function (handleClose) { return [
588
- SortByTagDlg,
589
- { model: self, handleClose: handleClose },
590
- ]; });
591
- },
592
- },
593
- {
594
- label: 'Clear sort',
595
- onClick: function () { return self.clearSelected(); },
596
- },
597
- ], false),
598
- },
599
- {
600
- label: 'Color scheme',
601
- icon: Palette_1.default,
602
- subMenu: [
603
- {
604
- label: 'Normal',
605
- onClick: function () {
606
- self.setColorScheme({ type: 'normal' });
607
- },
488
+ ],
489
+ },
490
+ {
491
+ label: 'Color scheme',
492
+ icon: Palette_1.default,
493
+ subMenu: [
494
+ {
495
+ label: 'Normal',
496
+ onClick: () => {
497
+ self.setColorScheme({ type: 'normal' });
608
498
  },
609
- {
610
- label: 'Mapping quality',
611
- onClick: function () {
612
- self.setColorScheme({ type: 'mappingQuality' });
613
- },
499
+ },
500
+ {
501
+ label: 'Mapping quality',
502
+ onClick: () => {
503
+ self.setColorScheme({ type: 'mappingQuality' });
614
504
  },
615
- {
616
- label: 'Strand',
617
- onClick: function () {
618
- self.setColorScheme({ type: 'strand' });
619
- },
505
+ },
506
+ {
507
+ label: 'Strand',
508
+ onClick: () => {
509
+ self.setColorScheme({ type: 'strand' });
620
510
  },
621
- {
622
- label: 'Pair orientation',
623
- onClick: function () {
624
- self.setColorScheme({ type: 'pairOrientation' });
625
- },
511
+ },
512
+ {
513
+ label: 'Pair orientation',
514
+ onClick: () => {
515
+ self.setColorScheme({ type: 'pairOrientation' });
626
516
  },
627
- {
628
- label: 'Per-base quality',
629
- onClick: function () {
630
- self.setColorScheme({ type: 'perBaseQuality' });
631
- },
517
+ },
518
+ {
519
+ label: 'Per-base quality',
520
+ onClick: () => {
521
+ self.setColorScheme({ type: 'perBaseQuality' });
632
522
  },
633
- {
634
- label: 'Per-base lettering',
635
- onClick: function () {
636
- self.setColorScheme({ type: 'perBaseLettering' });
637
- },
523
+ },
524
+ {
525
+ label: 'Per-base lettering',
526
+ onClick: () => {
527
+ self.setColorScheme({ type: 'perBaseLettering' });
638
528
  },
639
- {
640
- label: 'Modifications or methylation',
641
- onClick: function () {
642
- (0, util_1.getSession)(self).queueDialog(function (doneCallback) { return [
643
- ModificationsDlg,
644
- { model: self, handleClose: doneCallback },
645
- ]; });
646
- },
529
+ },
530
+ {
531
+ label: 'Modifications or methylation',
532
+ onClick: () => {
533
+ (0, util_1.getSession)(self).queueDialog(doneCallback => [
534
+ ModificationsDlg,
535
+ { model: self, handleClose: doneCallback },
536
+ ]);
647
537
  },
648
- {
649
- label: 'Insert size',
650
- onClick: function () {
651
- self.setColorScheme({ type: 'insertSize' });
652
- },
538
+ },
539
+ {
540
+ label: 'Insert size',
541
+ onClick: () => {
542
+ self.setColorScheme({ type: 'insertSize' });
653
543
  },
654
- {
655
- label: 'Stranded paired-end',
656
- onClick: function () {
657
- self.setColorScheme({ type: 'reverseTemplate' });
658
- },
544
+ },
545
+ {
546
+ label: 'Stranded paired-end',
547
+ onClick: () => {
548
+ self.setColorScheme({ type: 'reverseTemplate' });
659
549
  },
660
- {
661
- label: 'Color by tag...',
662
- onClick: function () {
663
- (0, util_1.getSession)(self).queueDialog(function (doneCallback) { return [
664
- ColorByTagDlg,
665
- { model: self, handleClose: doneCallback },
666
- ]; });
667
- },
550
+ },
551
+ {
552
+ label: 'Color by tag...',
553
+ onClick: () => {
554
+ (0, util_1.getSession)(self).queueDialog(doneCallback => [
555
+ ColorByTagDlg,
556
+ { model: self, handleClose: doneCallback },
557
+ ]);
668
558
  },
669
- ],
670
- },
671
- {
672
- label: 'Filter by',
673
- icon: ClearAll_1.default,
674
- onClick: function () {
675
- (0, util_1.getSession)(self).queueDialog(function (doneCallback) { return [
676
- FilterByTagDlg,
677
- { model: self, handleClose: doneCallback },
678
- ]; });
679
559
  },
560
+ ],
561
+ },
562
+ {
563
+ label: 'Filter by',
564
+ icon: ClearAll_1.default,
565
+ onClick: () => {
566
+ (0, util_1.getSession)(self).queueDialog(doneCallback => [
567
+ FilterByTagDlg,
568
+ { model: self, handleClose: doneCallback },
569
+ ]);
680
570
  },
681
- {
682
- label: 'Set feature height',
683
- onClick: function () {
684
- (0, util_1.getSession)(self).queueDialog(function (doneCallback) { return [
685
- SetFeatureHeightDlg,
686
- { model: self, handleClose: doneCallback },
687
- ]; });
688
- },
571
+ },
572
+ {
573
+ label: 'Set feature height',
574
+ onClick: () => {
575
+ (0, util_1.getSession)(self).queueDialog(doneCallback => [
576
+ SetFeatureHeightDlg,
577
+ { model: self, handleClose: doneCallback },
578
+ ]);
689
579
  },
690
- {
691
- label: 'Set max height',
692
- onClick: function () {
693
- (0, util_1.getSession)(self).queueDialog(function (doneCallback) { return [
694
- SetMaxHeightDlg,
695
- { model: self, handleClose: doneCallback },
696
- ]; });
697
- },
580
+ },
581
+ {
582
+ label: 'Set max height',
583
+ onClick: () => {
584
+ (0, util_1.getSession)(self).queueDialog(doneCallback => [
585
+ SetMaxHeightDlg,
586
+ { model: self, handleClose: doneCallback },
587
+ ]);
698
588
  },
699
- {
700
- label: 'Fade mismatches by quality',
701
- type: 'checkbox',
702
- checked: self.mismatchAlphaSetting,
703
- onClick: function () {
704
- self.toggleMismatchAlpha();
705
- },
589
+ },
590
+ {
591
+ label: 'Fade mismatches by quality',
592
+ type: 'checkbox',
593
+ checked: self.mismatchAlphaSetting,
594
+ onClick: () => {
595
+ self.toggleMismatchAlpha();
706
596
  },
707
- ], false);
708
- },
709
- };
710
- });
711
- };
597
+ },
598
+ ];
599
+ },
600
+ };
601
+ });
712
602
  exports.default = stateModelFactory;
713
603
  //# sourceMappingURL=model.js.map