jbrowse-plugin-mafviewer 1.0.5 → 1.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (104) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/README.md +17 -2
  3. package/dist/BigMafAdapter/BigMafAdapter.d.ts +17 -0
  4. package/dist/BigMafAdapter/BigMafAdapter.js +92 -0
  5. package/dist/BigMafAdapter/BigMafAdapter.js.map +1 -0
  6. package/dist/BigMafAdapter/configSchema.d.ts +21 -0
  7. package/dist/BigMafAdapter/configSchema.js +28 -0
  8. package/dist/BigMafAdapter/configSchema.js.map +1 -0
  9. package/dist/BigMafAdapter/index.d.ts +2 -0
  10. package/dist/BigMafAdapter/index.js +11 -0
  11. package/dist/BigMafAdapter/index.js.map +1 -0
  12. package/dist/LinearMafDisplay/components/ColorLegend.d.ts +8 -0
  13. package/dist/LinearMafDisplay/components/ColorLegend.js +15 -0
  14. package/dist/LinearMafDisplay/components/ColorLegend.js.map +1 -0
  15. package/dist/LinearMafDisplay/components/ReactComponent.d.ts +6 -0
  16. package/dist/LinearMafDisplay/components/ReactComponent.js +15 -0
  17. package/dist/LinearMafDisplay/components/ReactComponent.js.map +1 -0
  18. package/dist/LinearMafDisplay/components/RectBg.d.ts +9 -0
  19. package/dist/LinearMafDisplay/components/RectBg.js +7 -0
  20. package/dist/LinearMafDisplay/components/RectBg.js.map +1 -0
  21. package/dist/LinearMafDisplay/components/SetRowHeight.d.ts +11 -0
  22. package/dist/LinearMafDisplay/components/SetRowHeight.js +36 -0
  23. package/dist/LinearMafDisplay/components/SetRowHeight.js.map +1 -0
  24. package/dist/LinearMafDisplay/components/YScaleBars.d.ts +9 -0
  25. package/dist/LinearMafDisplay/components/YScaleBars.js +41 -0
  26. package/dist/LinearMafDisplay/components/YScaleBars.js.map +1 -0
  27. package/dist/LinearMafDisplay/configSchema.d.ts +34 -0
  28. package/dist/LinearMafDisplay/configSchema.js +15 -0
  29. package/dist/LinearMafDisplay/configSchema.js.map +1 -0
  30. package/dist/LinearMafDisplay/index.d.ts +2 -0
  31. package/dist/LinearMafDisplay/index.js +20 -0
  32. package/dist/LinearMafDisplay/index.js.map +1 -0
  33. package/dist/LinearMafDisplay/renderSvg.d.ts +4 -0
  34. package/dist/LinearMafDisplay/renderSvg.js +17 -0
  35. package/dist/LinearMafDisplay/renderSvg.js.map +1 -0
  36. package/dist/LinearMafDisplay/stateModel.d.ts +364 -0
  37. package/dist/LinearMafDisplay/stateModel.js +176 -0
  38. package/dist/LinearMafDisplay/stateModel.js.map +1 -0
  39. package/dist/LinearMafRenderer/LinearMafRenderer.d.ts +45 -0
  40. package/dist/LinearMafRenderer/LinearMafRenderer.js +181 -0
  41. package/dist/LinearMafRenderer/LinearMafRenderer.js.map +1 -0
  42. package/dist/LinearMafRenderer/components/ReactComponent.d.ts +6 -0
  43. package/dist/LinearMafRenderer/components/ReactComponent.js +8 -0
  44. package/dist/LinearMafRenderer/components/ReactComponent.js.map +1 -0
  45. package/dist/LinearMafRenderer/configSchema.d.ts +2 -0
  46. package/dist/LinearMafRenderer/configSchema.js +13 -0
  47. package/dist/LinearMafRenderer/configSchema.js.map +1 -0
  48. package/dist/LinearMafRenderer/index.d.ts +2 -0
  49. package/dist/LinearMafRenderer/index.js +12 -0
  50. package/dist/LinearMafRenderer/index.js.map +1 -0
  51. package/dist/LinearMafRenderer/util.d.ts +10 -0
  52. package/dist/LinearMafRenderer/util.js +16 -0
  53. package/dist/LinearMafRenderer/util.js.map +1 -0
  54. package/dist/MafAddTrackWorkflow/AddTrackWorkflow.d.ts +5 -0
  55. package/dist/MafAddTrackWorkflow/AddTrackWorkflow.js +111 -0
  56. package/dist/MafAddTrackWorkflow/AddTrackWorkflow.js.map +1 -0
  57. package/dist/MafAddTrackWorkflow/index.d.ts +2 -0
  58. package/dist/MafAddTrackWorkflow/index.js +12 -0
  59. package/dist/MafAddTrackWorkflow/index.js.map +1 -0
  60. package/dist/MafTabixAdapter/MafTabixAdapter.d.ts +17 -0
  61. package/dist/MafTabixAdapter/MafTabixAdapter.js +96 -0
  62. package/dist/MafTabixAdapter/MafTabixAdapter.js.map +1 -0
  63. package/dist/MafTabixAdapter/configSchema.d.ts +33 -0
  64. package/dist/MafTabixAdapter/configSchema.js +40 -0
  65. package/dist/MafTabixAdapter/configSchema.js.map +1 -0
  66. package/dist/MafTabixAdapter/index.d.ts +2 -0
  67. package/dist/MafTabixAdapter/index.js +11 -0
  68. package/dist/MafTabixAdapter/index.js.map +1 -0
  69. package/dist/MafTrack/configSchema.d.ts +79 -0
  70. package/dist/MafTrack/configSchema.js +15 -0
  71. package/dist/MafTrack/configSchema.js.map +1 -0
  72. package/dist/MafTrack/index.d.ts +2 -0
  73. package/dist/MafTrack/index.js +14 -0
  74. package/dist/MafTrack/index.js.map +1 -0
  75. package/dist/TaffyAdapter/TaffyAdapter.d.ts +16 -0
  76. package/dist/TaffyAdapter/TaffyAdapter.js +89 -0
  77. package/dist/TaffyAdapter/TaffyAdapter.js.map +1 -0
  78. package/dist/TaffyAdapter/configSchema.d.ts +31 -0
  79. package/dist/TaffyAdapter/configSchema.js +38 -0
  80. package/dist/TaffyAdapter/configSchema.js.map +1 -0
  81. package/dist/TaffyAdapter/index.d.ts +2 -0
  82. package/dist/TaffyAdapter/index.js +11 -0
  83. package/dist/TaffyAdapter/index.js.map +1 -0
  84. package/dist/index.d.ts +8 -0
  85. package/dist/index.js +24 -0
  86. package/dist/index.js.map +1 -0
  87. package/dist/jbrowse-plugin-mafviewer.umd.production.min.js +4 -1
  88. package/dist/jbrowse-plugin-mafviewer.umd.production.min.js.map +7 -1
  89. package/package.json +22 -51
  90. package/src/BigMafAdapter/BigMafAdapter.ts +1 -2
  91. package/src/LinearMafDisplay/components/ColorLegend.tsx +2 -2
  92. package/src/LinearMafDisplay/components/SetRowHeight.tsx +9 -3
  93. package/src/LinearMafDisplay/components/YScaleBars.tsx +11 -3
  94. package/src/LinearMafDisplay/stateModel.ts +29 -1
  95. package/src/LinearMafRenderer/LinearMafRenderer.ts +38 -34
  96. package/src/LinearMafRenderer/util.ts +20 -0
  97. package/src/MafAddTrackWorkflow/AddTrackWorkflow.tsx +60 -22
  98. package/src/MafTabixAdapter/MafTabixAdapter.ts +27 -10
  99. package/src/TaffyAdapter/TaffyAdapter.ts +112 -0
  100. package/src/TaffyAdapter/configSchema.ts +44 -0
  101. package/src/TaffyAdapter/index.ts +15 -0
  102. package/src/index.ts +2 -0
  103. package/dist/jbrowse-plugin-mafviewer.umd.development.js +0 -1423
  104. package/dist/jbrowse-plugin-mafviewer.umd.development.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configSchema.js","sourceRoot":"","sources":["../../src/MafTabixAdapter/configSchema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AAEjE;;;GAGG;AACH,SAAS,CAAC,KAAI,CAAC,CAAC,wDAAwD;AAExE,MAAM,YAAY,GAAG,mBAAmB,CACtC,iBAAiB,EACjB;IACE;;OAEG;IACH,OAAO,EAAE;QACP,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,sDAAsD;QACnE,YAAY,EAAE,EAAE;KACjB;IACD;;OAEG;IACH,aAAa,EAAE;QACb,IAAI,EAAE,cAAc;QACpB,YAAY,EAAE;YACZ,GAAG,EAAE,wBAAwB;YAC7B,YAAY,EAAE,aAAa;SAC5B;KACF;IACD,KAAK,EAAE,mBAAmB,CAAC,OAAO,EAAE;QAClC,QAAQ,EAAE;YACR,IAAI,EAAE,cAAc;YACpB,YAAY,EAAE;gBACZ,GAAG,EAAE,wBAAwB;aAC9B;SACF;QACD,SAAS,EAAE;YACT,IAAI,EAAE,QAAQ;YACd,YAAY,EAAE,KAAK;SACpB;KACF,CAAC;CACH,EACD,EAAE,eAAe,EAAE,IAAI,EAAE,CAC1B,CAAA;AAED,eAAe,YAAY,CAAA"}
@@ -0,0 +1,2 @@
1
+ import PluginManager from '@jbrowse/core/PluginManager';
2
+ export default function MafTabixAdapterF(pluginManager: PluginManager): PluginManager;
@@ -0,0 +1,11 @@
1
+ import { AdapterType } from '@jbrowse/core/pluggableElementTypes';
2
+ import configSchema from './configSchema';
3
+ import MafTabixAdapter from './MafTabixAdapter';
4
+ export default function MafTabixAdapterF(pluginManager) {
5
+ return pluginManager.addAdapterType(() => new AdapterType({
6
+ name: 'MafTabixAdapter',
7
+ AdapterClass: MafTabixAdapter,
8
+ configSchema,
9
+ }));
10
+ }
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/MafTabixAdapter/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAA;AACjE,OAAO,YAAY,MAAM,gBAAgB,CAAA;AACzC,OAAO,eAAe,MAAM,mBAAmB,CAAA;AAE/C,MAAM,CAAC,OAAO,UAAU,gBAAgB,CAAC,aAA4B;IACnE,OAAO,aAAa,CAAC,cAAc,CACjC,GAAG,EAAE,CACH,IAAI,WAAW,CAAC;QACd,IAAI,EAAE,iBAAiB;QACvB,YAAY,EAAE,eAAe;QAC7B,YAAY;KACb,CAAC,CACL,CAAA;AACH,CAAC"}
@@ -0,0 +1,79 @@
1
+ import PluginManager from '@jbrowse/core/PluginManager';
2
+ export default function configSchemaF(pluginManager: PluginManager): import("@jbrowse/core/configuration/configurationSchema").ConfigurationSchemaType<{}, import("@jbrowse/core/configuration/configurationSchema").ConfigurationSchemaOptions<import("@jbrowse/core/configuration/configurationSchema").ConfigurationSchemaType<{
3
+ name: {
4
+ description: string;
5
+ type: string;
6
+ defaultValue: string;
7
+ };
8
+ assemblyNames: {
9
+ description: string;
10
+ type: string;
11
+ defaultValue: string[];
12
+ };
13
+ description: {
14
+ description: string;
15
+ type: string;
16
+ defaultValue: string;
17
+ };
18
+ category: {
19
+ description: string;
20
+ type: string;
21
+ defaultValue: never[];
22
+ };
23
+ metadata: {
24
+ type: string;
25
+ description: string;
26
+ defaultValue: {};
27
+ };
28
+ adapter: import("mobx-state-tree").IAnyModelType;
29
+ textSearching: import("@jbrowse/core/configuration/configurationSchema").ConfigurationSchemaType<{
30
+ indexingAttributes: {
31
+ type: string;
32
+ description: string;
33
+ defaultValue: string[];
34
+ };
35
+ indexingFeatureTypesToExclude: {
36
+ type: string;
37
+ description: string;
38
+ defaultValue: string[];
39
+ };
40
+ textSearchAdapter: import("mobx-state-tree").IAnyModelType;
41
+ }, import("@jbrowse/core/configuration/configurationSchema").ConfigurationSchemaOptions<undefined, undefined>>;
42
+ displays: import("mobx-state-tree").IArrayType<import("mobx-state-tree").IAnyModelType>;
43
+ formatDetails: import("@jbrowse/core/configuration/configurationSchema").ConfigurationSchemaType<{
44
+ feature: {
45
+ type: string;
46
+ description: string;
47
+ defaultValue: {};
48
+ contextVariable: string[];
49
+ };
50
+ subfeatures: {
51
+ type: string;
52
+ description: string;
53
+ defaultValue: {};
54
+ contextVariable: string[];
55
+ };
56
+ depth: {
57
+ type: string;
58
+ defaultValue: number;
59
+ description: string;
60
+ };
61
+ maxDepth: {
62
+ type: string;
63
+ defaultValue: number;
64
+ description: string;
65
+ };
66
+ }, import("@jbrowse/core/configuration/configurationSchema").ConfigurationSchemaOptions<undefined, undefined>>;
67
+ formatAbout: import("@jbrowse/core/configuration/configurationSchema").ConfigurationSchemaType<{
68
+ config: {
69
+ type: string;
70
+ description: string;
71
+ defaultValue: {};
72
+ contextVariable: string[];
73
+ };
74
+ hideUris: {
75
+ type: string;
76
+ defaultValue: boolean;
77
+ };
78
+ }, import("@jbrowse/core/configuration/configurationSchema").ConfigurationSchemaOptions<undefined, undefined>>;
79
+ }, import("@jbrowse/core/configuration/configurationSchema").ConfigurationSchemaOptions<undefined, "trackId">>, "trackId">>;
@@ -0,0 +1,15 @@
1
+ import { ConfigurationSchema } from '@jbrowse/core/configuration';
2
+ import { createBaseTrackConfig } from '@jbrowse/core/pluggableElementTypes';
3
+ export default function configSchemaF(pluginManager) {
4
+ return ConfigurationSchema('MafTrack', {}, {
5
+ /**
6
+ * #baseConfiguration
7
+ */
8
+ baseConfiguration: createBaseTrackConfig(pluginManager),
9
+ /**
10
+ * #identifier
11
+ */
12
+ explicitIdentifier: 'trackId',
13
+ });
14
+ }
15
+ //# sourceMappingURL=configSchema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configSchema.js","sourceRoot":"","sources":["../../src/MafTrack/configSchema.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AACjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAA;AAE3E,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,aAA4B;IAChE,OAAO,mBAAmB,CACxB,UAAU,EACV,EAAE,EACF;QACE;;WAEG;QACH,iBAAiB,EAAE,qBAAqB,CAAC,aAAa,CAAC;QACvD;;WAEG;QACH,kBAAkB,EAAE,SAAS;KAC9B,CACF,CAAA;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ import PluginManager from '@jbrowse/core/PluginManager';
2
+ export default function MafTrackF(pluginManager: PluginManager): PluginManager;
@@ -0,0 +1,14 @@
1
+ import { TrackType, createBaseTrackModel, } from '@jbrowse/core/pluggableElementTypes';
2
+ import configSchemaF from './configSchema';
3
+ export default function MafTrackF(pluginManager) {
4
+ return pluginManager.addTrackType(() => {
5
+ const configSchema = configSchemaF(pluginManager);
6
+ return new TrackType({
7
+ name: 'MafTrack',
8
+ configSchema,
9
+ displayName: 'MAF track',
10
+ stateModel: createBaseTrackModel(pluginManager, 'MafTrack', configSchema),
11
+ });
12
+ });
13
+ }
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/MafTrack/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,SAAS,EACT,oBAAoB,GACrB,MAAM,qCAAqC,CAAA;AAC5C,OAAO,aAAa,MAAM,gBAAgB,CAAA;AAE1C,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,aAA4B;IAC5D,OAAO,aAAa,CAAC,YAAY,CAAC,GAAG,EAAE;QACrC,MAAM,YAAY,GAAG,aAAa,CAAC,aAAa,CAAC,CAAA;QACjD,OAAO,IAAI,SAAS,CAAC;YACnB,IAAI,EAAE,UAAU;YAChB,YAAY;YACZ,WAAW,EAAE,WAAW;YACxB,UAAU,EAAE,oBAAoB,CAAC,aAAa,EAAE,UAAU,EAAE,YAAY,CAAC;SAC1E,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { BaseFeatureDataAdapter } from '@jbrowse/core/data_adapters/BaseAdapter';
2
+ import { Feature, Region } from '@jbrowse/core/util';
3
+ interface ByteRange {
4
+ chrStart: number;
5
+ fileOffst: number;
6
+ }
7
+ type IndexData = Record<string, ByteRange[]>;
8
+ export default class TaffyAdapter extends BaseFeatureDataAdapter {
9
+ setupP?: Promise<IndexData>;
10
+ getRefNames(): Promise<string[]>;
11
+ setup(): Promise<IndexData>;
12
+ readTaiFile(): Promise<IndexData>;
13
+ getFeatures(query: Region): import("rxjs").Observable<Feature>;
14
+ freeResources(): void;
15
+ }
16
+ export {};
@@ -0,0 +1,89 @@
1
+ import { BaseFeatureDataAdapter } from '@jbrowse/core/data_adapters/BaseAdapter';
2
+ import { ObservableCreate } from '@jbrowse/core/util/rxjs';
3
+ import { openLocation } from '@jbrowse/core/util/io';
4
+ export default class TaffyAdapter extends BaseFeatureDataAdapter {
5
+ setupP;
6
+ async getRefNames() {
7
+ const data = await this.setup();
8
+ return Object.keys(data);
9
+ }
10
+ setup() {
11
+ if (!this.setupP) {
12
+ this.setupP = this.readTaiFile().catch((e) => {
13
+ this.setupP = undefined;
14
+ throw e;
15
+ });
16
+ }
17
+ return this.setupP;
18
+ }
19
+ async readTaiFile() {
20
+ const text = await openLocation(this.getConf('taiLocation')).readFile('utf8');
21
+ const entries = {};
22
+ let lastChr = '';
23
+ for (const line of text.split('\n').filter(line => line.trim())) {
24
+ const [chr, chrStart, fileOffset] = line.split('\t');
25
+ const ref = chr === '*' ? lastChr : chr;
26
+ const r2 = ref.split('.').at(-1);
27
+ if (!entries[r2]) {
28
+ entries[r2] = [];
29
+ }
30
+ entries[r2].push({
31
+ chrStart: +chrStart,
32
+ fileOffst: +fileOffset,
33
+ });
34
+ lastChr = ref;
35
+ }
36
+ return entries;
37
+ }
38
+ getFeatures(query) {
39
+ return ObservableCreate(async (observer) => {
40
+ try {
41
+ // const { tafLocation } = getSnapshot(this.config)
42
+ // const byteRanges = await this.setup()
43
+ //
44
+ // for (const range of byteRanges[query.refName] || []) {
45
+ // const response = await fetch(tafLocation, {
46
+ // headers: {
47
+ // Range: `bytes=${range.start}-${range.start + range.length - 1}`,
48
+ // },
49
+ // })
50
+ //
51
+ // const text = await response.text()
52
+ // const lines = text.split('\n').filter(line => line.trim())
53
+ //
54
+ // for (const line of lines) {
55
+ // const [chr, start, srcSize, strand, unknown, data] =
56
+ // line.split('\t')
57
+ //
58
+ // // Only emit features that overlap with query region
59
+ // const featureStart = parseInt(start, 10)
60
+ // const featureEnd = featureStart + parseInt(srcSize, 10)
61
+ //
62
+ // if (
63
+ // chr === query.refName &&
64
+ // featureEnd >= query.start &&
65
+ // featureStart <= query.end
66
+ // ) {
67
+ // observer.next(
68
+ // new SimpleFeature({
69
+ // uniqueId: `${chr}-${start}-${data}`,
70
+ // refName: chr,
71
+ // start: featureStart,
72
+ // end: featureEnd,
73
+ // strand: parseInt(strand, 10),
74
+ // data: data,
75
+ // }),
76
+ // )
77
+ // }
78
+ // }
79
+ // }
80
+ observer.complete();
81
+ }
82
+ catch (e) {
83
+ observer.error(e);
84
+ }
85
+ });
86
+ }
87
+ freeResources() { }
88
+ }
89
+ //# sourceMappingURL=TaffyAdapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TaffyAdapter.js","sourceRoot":"","sources":["../../src/TaffyAdapter/TaffyAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,yCAAyC,CAAA;AAGhF,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAiBpD,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,sBAAsB;IACvD,MAAM,CAAqB;IAElC,KAAK,CAAC,WAAW;QACf,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,KAAK,EAAE,CAAA;QAC/B,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC1B,CAAC;IAED,KAAK;QACH,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,CAAU,EAAE,EAAE;gBACpD,IAAI,CAAC,MAAM,GAAG,SAAS,CAAA;gBACvB,MAAM,CAAC,CAAA;YACT,CAAC,CAAC,CAAA;QACJ,CAAC;QACD,OAAO,IAAI,CAAC,MAAM,CAAA;IACpB,CAAC;IAED,KAAK,CAAC,WAAW;QACf,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CACnE,MAAM,CACP,CAAA;QACD,MAAM,OAAO,GAAG,EAAe,CAAA;QAC/B,IAAI,OAAO,GAAG,EAAE,CAAA;QAChB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;YAChE,MAAM,CAAC,GAAG,EAAE,QAAQ,EAAE,UAAU,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;YACpD,MAAM,GAAG,GAAG,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAA;YACvC,MAAM,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,CAAA;YAEjC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC;gBACjB,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,CAAA;YAClB,CAAC;YACD,OAAO,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC;gBACf,QAAQ,EAAE,CAAC,QAAQ;gBACnB,SAAS,EAAE,CAAC,UAAU;aACvB,CAAC,CAAA;YACF,OAAO,GAAG,GAAG,CAAA;QACf,CAAC;QACD,OAAO,OAAO,CAAA;IAChB,CAAC;IAED,WAAW,CAAC,KAAa;QACvB,OAAO,gBAAgB,CAAU,KAAK,EAAC,QAAQ,EAAC,EAAE;YAChD,IAAI,CAAC;gBACH,mDAAmD;gBACnD,wCAAwC;gBACxC,EAAE;gBACF,yDAAyD;gBACzD,gDAAgD;gBAChD,iBAAiB;gBACjB,yEAAyE;gBACzE,SAAS;gBACT,OAAO;gBACP,EAAE;gBACF,uCAAuC;gBACvC,+DAA+D;gBAC/D,EAAE;gBACF,gCAAgC;gBAChC,2DAA2D;gBAC3D,yBAAyB;gBACzB,EAAE;gBACF,2DAA2D;gBAC3D,+CAA+C;gBAC/C,8DAA8D;gBAC9D,EAAE;gBACF,WAAW;gBACX,iCAAiC;gBACjC,qCAAqC;gBACrC,kCAAkC;gBAClC,UAAU;gBACV,uBAAuB;gBACvB,8BAA8B;gBAC9B,iDAAiD;gBACjD,0BAA0B;gBAC1B,iCAAiC;gBACjC,6BAA6B;gBAC7B,0CAA0C;gBAC1C,wBAAwB;gBACxB,cAAc;gBACd,UAAU;gBACV,QAAQ;gBACR,MAAM;gBACN,IAAI;gBACJ,QAAQ,CAAC,QAAQ,EAAE,CAAA;YACrB,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;YACnB,CAAC;QACH,CAAC,CAAC,CAAA;IACJ,CAAC;IACD,aAAa,KAAU,CAAC;CACzB"}
@@ -0,0 +1,31 @@
1
+ declare const configSchema: import("@jbrowse/core/configuration/configurationSchema").ConfigurationSchemaType<{
2
+ /**
3
+ * #slot
4
+ */
5
+ samples: {
6
+ type: string;
7
+ description: string;
8
+ defaultValue: never[];
9
+ };
10
+ /**
11
+ * #slot
12
+ */
13
+ tafLocation: {
14
+ type: string;
15
+ defaultValue: {
16
+ uri: string;
17
+ locationType: string;
18
+ };
19
+ };
20
+ /**
21
+ * #slot
22
+ */
23
+ taiLocation: {
24
+ type: string;
25
+ defaultValue: {
26
+ uri: string;
27
+ locationType: string;
28
+ };
29
+ };
30
+ }, import("@jbrowse/core/configuration/configurationSchema").ConfigurationSchemaOptions<undefined, undefined>>;
31
+ export default configSchema;
@@ -0,0 +1,38 @@
1
+ import { ConfigurationSchema } from '@jbrowse/core/configuration';
2
+ /**
3
+ * #config TaffyAdapter
4
+ * used to configure Taffy adapter
5
+ */
6
+ function x() { } // eslint-disable-line @typescript-eslint/no-unused-vars
7
+ const configSchema = ConfigurationSchema('TaffyAdapter', {
8
+ /**
9
+ * #slot
10
+ */
11
+ samples: {
12
+ type: 'frozen',
13
+ description: 'string[] or {id:string,label:string,color?:string}[]',
14
+ defaultValue: [],
15
+ },
16
+ /**
17
+ * #slot
18
+ */
19
+ tafLocation: {
20
+ type: 'fileLocation',
21
+ defaultValue: {
22
+ uri: '/path/to/my.taf',
23
+ locationType: 'UriLocation',
24
+ },
25
+ },
26
+ /**
27
+ * #slot
28
+ */
29
+ taiLocation: {
30
+ type: 'fileLocation',
31
+ defaultValue: {
32
+ uri: '/path/to/my.taf.tai',
33
+ locationType: 'UriLocation',
34
+ },
35
+ },
36
+ }, { explicitlyTyped: true });
37
+ export default configSchema;
38
+ //# sourceMappingURL=configSchema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configSchema.js","sourceRoot":"","sources":["../../src/TaffyAdapter/configSchema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AAEjE;;;GAGG;AACH,SAAS,CAAC,KAAI,CAAC,CAAC,wDAAwD;AAExE,MAAM,YAAY,GAAG,mBAAmB,CACtC,cAAc,EACd;IACE;;OAEG;IACH,OAAO,EAAE;QACP,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,sDAAsD;QACnE,YAAY,EAAE,EAAE;KACjB;IACD;;OAEG;IACH,WAAW,EAAE;QACX,IAAI,EAAE,cAAc;QACpB,YAAY,EAAE;YACZ,GAAG,EAAE,iBAAiB;YACtB,YAAY,EAAE,aAAa;SAC5B;KACF;IACD;;OAEG;IACH,WAAW,EAAE;QACX,IAAI,EAAE,cAAc;QACpB,YAAY,EAAE;YACZ,GAAG,EAAE,qBAAqB;YAC1B,YAAY,EAAE,aAAa;SAC5B;KACF;CACF,EACD,EAAE,eAAe,EAAE,IAAI,EAAE,CAC1B,CAAA;AAED,eAAe,YAAY,CAAA"}
@@ -0,0 +1,2 @@
1
+ import PluginManager from '@jbrowse/core/PluginManager';
2
+ export default function TaffyAdapterF(pluginManager: PluginManager): PluginManager;
@@ -0,0 +1,11 @@
1
+ import { AdapterType } from '@jbrowse/core/pluggableElementTypes';
2
+ import configSchema from './configSchema';
3
+ import TaffyAdapter from './TaffyAdapter';
4
+ export default function TaffyAdapterF(pluginManager) {
5
+ return pluginManager.addAdapterType(() => new AdapterType({
6
+ name: 'TaffyAdapter',
7
+ AdapterClass: TaffyAdapter,
8
+ configSchema,
9
+ }));
10
+ }
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/TaffyAdapter/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAA;AACjE,OAAO,YAAY,MAAM,gBAAgB,CAAA;AACzC,OAAO,YAAY,MAAM,gBAAgB,CAAA;AAEzC,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,aAA4B;IAChE,OAAO,aAAa,CAAC,cAAc,CACjC,GAAG,EAAE,CACH,IAAI,WAAW,CAAC;QACd,IAAI,EAAE,cAAc;QACpB,YAAY,EAAE,YAAY;QAC1B,YAAY;KACb,CAAC,CACL,CAAA;AACH,CAAC"}
@@ -0,0 +1,8 @@
1
+ import Plugin from '@jbrowse/core/Plugin';
2
+ import PluginManager from '@jbrowse/core/PluginManager';
3
+ export default class MafViewerPlugin extends Plugin {
4
+ name: string;
5
+ version: any;
6
+ install(pluginManager: PluginManager): void;
7
+ configure(_pluginManager: PluginManager): void;
8
+ }
package/dist/index.js ADDED
@@ -0,0 +1,24 @@
1
+ import Plugin from '@jbrowse/core/Plugin';
2
+ import { version } from '../package.json';
3
+ import BigMafAdapterF from './BigMafAdapter';
4
+ import MafTrackF from './MafTrack';
5
+ import LinearMafDisplayF from './LinearMafDisplay';
6
+ import LinearMafRendererF from './LinearMafRenderer';
7
+ import MafTabixAdapterF from './MafTabixAdapter';
8
+ import TaffyAdapterF from './TaffyAdapter';
9
+ import MafAddTrackWorkflowF from './MafAddTrackWorkflow';
10
+ export default class MafViewerPlugin extends Plugin {
11
+ name = 'MafViewerPlugin';
12
+ version = version;
13
+ install(pluginManager) {
14
+ BigMafAdapterF(pluginManager);
15
+ MafTrackF(pluginManager);
16
+ LinearMafDisplayF(pluginManager);
17
+ LinearMafRendererF(pluginManager);
18
+ MafTabixAdapterF(pluginManager);
19
+ TaffyAdapterF(pluginManager);
20
+ MafAddTrackWorkflowF(pluginManager);
21
+ }
22
+ configure(_pluginManager) { }
23
+ }
24
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,sBAAsB,CAAA;AAGzC,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AACzC,OAAO,cAAc,MAAM,iBAAiB,CAAA;AAC5C,OAAO,SAAS,MAAM,YAAY,CAAA;AAClC,OAAO,iBAAiB,MAAM,oBAAoB,CAAA;AAClD,OAAO,kBAAkB,MAAM,qBAAqB,CAAA;AACpD,OAAO,gBAAgB,MAAM,mBAAmB,CAAA;AAChD,OAAO,aAAa,MAAM,gBAAgB,CAAA;AAC1C,OAAO,oBAAoB,MAAM,uBAAuB,CAAA;AAExD,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,MAAM;IACjD,IAAI,GAAG,iBAAiB,CAAA;IACxB,OAAO,GAAG,OAAO,CAAA;IAEjB,OAAO,CAAC,aAA4B;QAClC,cAAc,CAAC,aAAa,CAAC,CAAA;QAC7B,SAAS,CAAC,aAAa,CAAC,CAAA;QACxB,iBAAiB,CAAC,aAAa,CAAC,CAAA;QAChC,kBAAkB,CAAC,aAAa,CAAC,CAAA;QACjC,gBAAgB,CAAC,aAAa,CAAC,CAAA;QAC/B,aAAa,CAAC,aAAa,CAAC,CAAA;QAC5B,oBAAoB,CAAC,aAAa,CAAC,CAAA;IACrC,CAAC;IAED,SAAS,CAAC,cAA6B,IAAG,CAAC;CAC5C"}
@@ -1,2 +1,5 @@
1
- var e,t;e=this,t=function(e,t,r,n,o,a,i,s,l,c,u,p,f){"use strict";const d=n.ConfigurationSchema("BigMafAdapter",{samples:{type:"frozen",description:"string[] or {id:string,label:string,color?:string}[]",defaultValue:[]},bigBedLocation:{type:"fileLocation",defaultValue:{uri:"/path/to/my.bb",locationType:"UriLocation"}}},{explicitlyTyped:!0});var h=function(e,t){return h=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])},h(e,t)};function m(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}h(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}function g(e){var t="function"==typeof Symbol&&Symbol.iterator,r=t&&e[t],n=0;if(r)return r.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function y(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,o,a=r.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(n=a.next()).done;)i.push(n.value)}catch(e){o={error:e}}finally{try{n&&!n.done&&(r=a.return)&&r.call(a)}finally{if(o)throw o.error}}return i}function b(e,t,r){if(r||2===arguments.length)for(var n,o=0,a=t.length;o<a;o++)!n&&o in t||(n||(n=Array.prototype.slice.call(t,0,o)),n[o]=t[o]);return e.concat(n||Array.prototype.slice.call(t))}function w(e){return"function"==typeof e}function v(e){var t=e((function(e){Error.call(e),e.stack=(new Error).stack}));return t.prototype=Object.create(Error.prototype),t.prototype.constructor=t,t}"function"==typeof SuppressedError&&SuppressedError;var x=v((function(e){return function(t){e(this),this.message=t?t.length+" errors occurred during unsubscription:\n"+t.map((function(e,t){return t+1+") "+e.toString()})).join("\n "):"",this.name="UnsubscriptionError",this.errors=t}}));function E(e,t){if(e){var r=e.indexOf(t);0<=r&&e.splice(r,1)}}var S=function(){function e(e){this.initialTeardown=e,this.closed=!1,this._parentage=null,this._finalizers=null}var t;return e.prototype.unsubscribe=function(){var e,t,r,n,o;if(!this.closed){this.closed=!0;var a=this._parentage;if(a)if(this._parentage=null,Array.isArray(a))try{for(var i=g(a),s=i.next();!s.done;s=i.next())s.value.remove(this)}catch(t){e={error:t}}finally{try{s&&!s.done&&(t=i.return)&&t.call(i)}finally{if(e)throw e.error}}else a.remove(this);var l=this.initialTeardown;if(w(l))try{l()}catch(e){o=e instanceof x?e.errors:[e]}var c=this._finalizers;if(c){this._finalizers=null;try{for(var u=g(c),p=u.next();!p.done;p=u.next()){var f=p.value;try{T(f)}catch(e){o=null!=o?o:[],e instanceof x?o=b(b([],y(o)),y(e.errors)):o.push(e)}}}catch(e){r={error:e}}finally{try{p&&!p.done&&(n=u.return)&&n.call(u)}finally{if(r)throw r.error}}}if(o)throw new x(o)}},e.prototype.add=function(t){var r;if(t&&t!==this)if(this.closed)T(t);else{if(t instanceof e){if(t.closed||t._hasParent(this))return;t._addParent(this)}(this._finalizers=null!==(r=this._finalizers)&&void 0!==r?r:[]).push(t)}},e.prototype._hasParent=function(e){var t=this._parentage;return t===e||Array.isArray(t)&&t.includes(e)},e.prototype._addParent=function(e){var t=this._parentage;this._parentage=Array.isArray(t)?(t.push(e),t):t?[t,e]:e},e.prototype._removeParent=function(e){var t=this._parentage;t===e?this._parentage=null:Array.isArray(t)&&E(t,e)},e.prototype.remove=function(t){var r=this._finalizers;r&&E(r,t),t instanceof e&&t._removeParent(this)},e.EMPTY=((t=new e).closed=!0,t),e}();function T(e){w(e)?e():e.unsubscribe()}var A={setTimeout:function(e,t){for(var r=[],n=2;n<arguments.length;n++)r[n-2]=arguments[n];var o=A.delegate;return(null==o?void 0:o.setTimeout)?o.setTimeout.apply(o,b([e,t],y(r))):setTimeout.apply(void 0,b([e,t],y(r)))},clearTimeout:function(e){var t=A.delegate;return((null==t?void 0:t.clearTimeout)||clearTimeout)(e)},delegate:void 0};function P(){}var M=function(e){function t(t){var r,n=e.call(this)||this;return n.isStopped=!1,t?(n.destination=t,((r=t)instanceof S||r&&"closed"in r&&w(r.remove)&&w(r.add)&&w(r.unsubscribe))&&t.add(n)):n.destination=L,n}return m(t,e),t.create=function(e,t,r){return new k(e,t,r)},t.prototype.next=function(e){this.isStopped||this._next(e)},t.prototype.error=function(e){this.isStopped||(this.isStopped=!0,this._error(e))},t.prototype.complete=function(){this.isStopped||(this.isStopped=!0,this._complete())},t.prototype.unsubscribe=function(){this.closed||(this.isStopped=!0,e.prototype.unsubscribe.call(this),this.destination=null)},t.prototype._next=function(e){this.destination.next(e)},t.prototype._error=function(e){try{this.destination.error(e)}finally{this.unsubscribe()}},t.prototype._complete=function(){try{this.destination.complete()}finally{this.unsubscribe()}},t}(S),C=function(){function e(e){this.partialObserver=e}return e.prototype.next=function(e){var t=this.partialObserver;if(t.next)try{t.next(e)}catch(e){_(e)}},e.prototype.error=function(e){var t=this.partialObserver;if(t.error)try{t.error(e)}catch(e){_(e)}else _(e)},e.prototype.complete=function(){var e=this.partialObserver;if(e.complete)try{e.complete()}catch(e){_(e)}},e}(),k=function(e){function t(t,r,n){var o,a=e.call(this)||this;return o=w(t)||!t?{next:null!=t?t:void 0,error:null!=r?r:void 0,complete:null!=n?n:void 0}:t,a.destination=new C(o),a}return m(t,e),t}(M);function _(e){var t;t=e,A.setTimeout((function(){throw t}))}var L={closed:!0,next:P,error:function(e){throw e},complete:P};function B(e){return function(t){if(function(e){return w(null==e?void 0:e.lift)}(t))return t.lift((function(t){try{return e(t,this)}catch(e){this.error(e)}}));throw new TypeError("Unable to lift unknown Observable type")}}var F=function(e){function t(t,r,n,o,a,i){var s=e.call(this,t)||this;return s.onFinalize=a,s.shouldUnsubscribe=i,s._next=r?function(e){try{r(e)}catch(e){t.error(e)}}:e.prototype._next,s._error=o?function(e){try{o(e)}catch(e){t.error(e)}finally{this.unsubscribe()}}:e.prototype._error,s._complete=n?function(){try{n()}catch(e){t.error(e)}finally{this.unsubscribe()}}:e.prototype._complete,s}return m(t,e),t.prototype.unsubscribe=function(){var t;if(!this.shouldUnsubscribe||this.shouldUnsubscribe()){var r=this.closed;e.prototype.unsubscribe.call(this),!r&&(null===(t=this.onFinalize)||void 0===t||t.call(this))}},t}(M),j=v((function(e){return function(){e(this),this.name="EmptyError",this.message="no elements in sequence"}}));function R(e,t){var r="object"==typeof t;return new Promise((function(n,o){var a=new k({next:function(e){n(e),a.unsubscribe()},error:o,complete:function(){r?n(t.defaultValue):o(new j)}});e.subscribe(a)}))}var O=function(e,t){return e.push(t),e};function z(){return B((function(e,t){(function(e,t){return B(function(e,t,r,n,o){return function(n,o){var a=r,i=t,s=0;n.subscribe(new F(o,(function(t){var r=s++;i=a?e(i,t,r):(a=!0,t)}),(function(){a&&o.next(i),o.complete()}),void 0,void 0))}}(e,t,arguments.length>=2))})(O,[])(e).subscribe(t)}))}let q=class extends o.BaseFeatureDataAdapter{setupP;async setup(){if(!this.getSubAdapter)throw new Error("no getSubAdapter available");return{adapter:(await this.getSubAdapter({...a.getSnapshot(this.config),type:"BigBedAdapter"})).dataAdapter}}async setupPre(){return this.setupP||(this.setupP=this.setup().catch((e=>{throw this.setupP=void 0,e}))),this.setupP}async getRefNames(){const{adapter:e}=await this.setup();return e.getRefNames()}async getHeader(){const{adapter:e}=await this.setup();return e.getHeader()}getFeatures(e){return s.ObservableCreate((async t=>{const{adapter:r}=await this.setup(),n=await R(r.getFeatures(e).pipe(z()));for(const e of n){const r=e.get("mafBlock").split(";");let n;const o=[],a={},s=[];for(const e of r)e.startsWith("s")&&(n?(o.push(e.split(/ +/)[6]),s.push(e)):(n=e.split(/ +/)[6],o.push(n),s.push(e)));for(let e=0;e<s.length;e++){const t=s[e].split(/ +/),r=t[1].split(".");a[r[0]]={chr:r[1],start:+t[1],srcSize:+t[2],strand:"+"===t[3]?1:-1,unknown:+t[4],data:o[e]}}t.next(new i.SimpleFeature({id:e.id(),data:{start:e.get("start"),end:e.get("end"),refName:e.get("refName"),seq:o[0],alignments:a}}))}t.complete()}))}freeResources(){}};const N=f.makeStyles()({root:{width:500}}),D=c.observer((function(e){const{model:t,handleClose:r}=e,{classes:n}=N(),[o,a]=l.useState(`${t.rowHeight}`),[i,s]=l.useState(`${t.rowProportion}`);return l.createElement(p.Dialog,{open:!0,onClose:r,title:"Filter options"},l.createElement(u.DialogContent,{className:n.root},l.createElement(u.Typography,null,"Set row height and the proportion of the row height to use for drawing each row"),l.createElement(u.TextField,{value:o,onChange:e=>a(e.target.value),placeholder:"Enter row height"}),l.createElement(u.TextField,{value:i,onChange:e=>s(e.target.value),placeholder:"Enter row proportion"}),l.createElement(u.DialogActions,null,l.createElement(u.Button,{variant:"contained",color:"primary",type:"submit",autoFocus:!0,onClick:()=>{t.setRowProportion(+i),t.setRowHeight(+o),r()}},"Submit"),l.createElement(u.Button,{variant:"contained",color:"secondary",onClick:()=>r()},"Cancel"))))})),V=e=>{const{color:t="rgb(255,255,255,0.8)"}=e;return l.createElement("rect",{...e,fill:t})},H=c.observer((function({model:e,labelWidth:t,svgFontSize:r}){const{samples:n,rowHeight:o}=e,a=o>=10,i=Math.min(20,o);return n?l.createElement(l.Fragment,null,n.map(((e,r)=>l.createElement(V,{key:`${e.id}-${r}`,y:r*o,x:0,width:t+5,height:i,color:e.color}))),a?n.map(((e,t)=>l.createElement("text",{key:`${e.id}-${t}`,y:t*o+o/2,dominantBaseline:"middle",x:2,fontSize:r},e.label))):null):null})),J=c.observer((function({children:e,model:t,exportSVG:r}){if(r)return l.createElement(l.Fragment,null,e);{const{rowHeight:r,samples:n}=t;return l.createElement("svg",{style:{position:"absolute",top:0,left:0,pointerEvents:"none",height:n.length*r,width:i.getContainingView(t).width}},e)}})),$=c.observer((function(e){const{model:t}=e,{rowHeight:r,samples:n}=t,o=Math.min(Math.max(r,10),14),a=r>=10,s=Math.max(...n.map((e=>i.measureText(e.label,o))).map((e=>a?e:20))||[0]);return l.createElement(J,{...e},l.createElement(H,{model:t,labelWidth:s,svgFontSize:o}))})),G=c.observer((function(e){const{model:t}=e,{pluginManager:r}=i.getEnv(t),n=r.getPlugin("LinearGenomeViewPlugin"),{BaseLinearDisplayComponent:o}=n.exports;return l.createElement("div",null,l.createElement(o,{...e}),l.createElement($,{model:t}))})),W=n.ConfigurationSchema("LinearMafRenderer",{},{explicitlyTyped:!0});function I(e){const{bases:t}=e.palette;return{a:t.A.main,c:t.C.main,g:t.G.main,t:t.T.main}}class U extends r.FeatureRendererType{getExpandedRegion(e){const{start:t,end:r}=e;return{...e,start:Math.floor(Math.max(t-1,0)),end:Math.ceil(r+1)}}async render(e){const{regions:t,bpPerPx:r,samples:n,rowHeight:o}=e,[a]=t,s=n.length*o+100,l=(a.end-a.start)/r,c=await this.getFeatures(e),u=await i.renderToAbstractCanvas(l,s,e,(t=>function({ctx:e,renderArgs:t}){const{regions:r,bpPerPx:n,rowHeight:o,showAllLetters:a,theme:s,samples:l,rowProportion:c,features:u}=t,[f]=r,d=o*c,h=p.createJBrowseTheme(s),m=I(h),g=function(e){return Object.fromEntries(Object.entries(I(e)).map((([t,r])=>[t,e.palette.getContrastText(r)])))}(h),y=new Map(l.map(((e,t)=>[e.id,t]))),b=1/n,w=o/2,v=d/2,x=(o-d)/2;e.font="bold 10px Courier New,monospace";for(const t of u.values()){const[r]=i.featureSpanPx(t,f,n),s=t.get("alignments"),l=t.get("seq").toLowerCase();for(const[t,n]of Object.entries(s)){const i=n.data,s=i.toLowerCase(),c=y.get(t);if(void 0===c)throw new Error(`unknown sample encountered: ${t}`);const u=o*c;e.beginPath(),e.fillStyle="black";for(let t=0,n=0;t<s.length;t++)if("-"!==l[t]){if("-"===s[t]){const t=r+b*n;e.moveTo(t,u+w),e.lineTo(t+b+.4,u+w)}n++}if(e.stroke(),!a){e.beginPath(),e.fillStyle="lightgrey";for(let t=0,n=0;t<s.length;t++)if("-"!==l[t]){const o=s[t];l[t]===o&&"-"!==o&&e.rect(r+b*n,x+u,b+.4,d),n++}e.fill()}for(let t=0,n=0;t<s.length;t++){const o=s[t];if("-"!==l[t]){if((a||l[t]!==o)&&"-"!==o){const t=r+b*n;e.fillStyle=m[o]??"black",e.fillRect(t,x+u,b+.4,d)}n++}}const p={w:10};if(b>=p.w)for(let t=0,n=0;t<s.length;t++)if("-"!==l[t]){const o=r+b*n,c=(b-p.w)/2+1,f=s[t];!a&&l[t]===f||"-"===f||(e.fillStyle=g[f]??"white",e.fillText(i[t],o+c,v+u+3)),n++}}}for(const t of u.values()){const[r]=i.featureSpanPx(t,f,n),a=t.get("alignments"),s=t.get("seq").toLowerCase();for(const[t,n]of Object.entries(a)){const a=n.data.toLowerCase(),i=y.get(t);if(void 0===i)throw new Error(`unknown sample encountered: ${t}`);const l=o*i;e.beginPath(),e.fillStyle="purple";for(let t=0,n=0;t<a.length;t++){let o="";for(;"-"===s[t];)"-"!==a[t]&&(o+=a[t]),t++;if(o.length>0){const t=r+b*n-1;e.rect(t,x+l+1,1,d-1),e.rect(t-2,x+l,5,1),e.rect(t-2,x+l+d-1,5,1)}n++}e.fill()}}}({ctx:t,renderArgs:{...e,features:c}})));return{...await super.render({...e,...u,width:l,height:s}),...u,width:l,height:s}}}const Y=c.observer((function(e){return l.createElement(p.PrerenderedCanvas,{...e})})),K=n.ConfigurationSchema("MafTabixAdapter",{samples:{type:"frozen",description:"string[] or {id:string,label:string,color?:string}[]",defaultValue:[]},bedGzLocation:{type:"fileLocation",defaultValue:{uri:"/path/to/my.bed.gz.tbi",locationType:"UriLocation"}},index:n.ConfigurationSchema("Index",{location:{type:"fileLocation",defaultValue:{uri:"/path/to/my.bed.gz.tbi"}},indexType:{type:"string",defaultValue:"TBI"}})},{explicitlyTyped:!0});class Q extends o.BaseFeatureDataAdapter{setupP;async setup(){const e=this.config;if(!this.getSubAdapter)throw new Error("no getSubAdapter available");return{adapter:(await this.getSubAdapter({...a.getSnapshot(e),type:"BedTabixAdapter"})).dataAdapter}}async setupPre(){return this.setupP||(this.setupP=this.setup().catch((e=>{throw this.setupP=void 0,e}))),this.setupP}async getRefNames(){const{adapter:e}=await this.setup();return e.getRefNames()}async getHeader(){const{adapter:e}=await this.setup();return e.getHeader()}getFeatures(e){return s.ObservableCreate((async t=>{const{adapter:r}=await this.setup(),n=await R(r.getFeatures(e).pipe(z()));for(const e of n){const r=e.get("field5").split(","),n={},o=r.map((e=>e.split(":")[5]));for(const[e,t]of r.entries()){const r=t.split(":"),a=r[0].lastIndexOf("."),i=r[0].slice(0,a),s=r[0].slice(a+1);n[i]={chr:s,start:+r[1],srcSize:+r[2],strand:"-"===r[3]?-1:1,unknown:+r[4],data:o[e]}}t.next(new i.SimpleFeature({id:e.id(),data:{start:e.get("start"),end:e.get("end"),refName:e.get("refName"),name:e.get("name"),score:e.get("score"),alignments:n,seq:o[0]}}))}t.complete()}))}freeResources(){}}const X=f.makeStyles()((e=>({textbox:{width:"100%"},paper:{margin:e.spacing(),padding:e.spacing()},submit:{marginTop:25,marginBottom:100,display:"block"}})));function Z({model:e}){const{classes:t}=X(),[r,n]=l.useState(""),[o,s]=l.useState(),[c,f]=l.useState(),[d,h]=l.useState(),[m,g]=l.useState("MAF track"),[y,b]=l.useState("BigMafAdapter"),w=a.getRoot(e);return l.createElement(u.Paper,{className:t.paper},l.createElement(u.Paper,null,d?l.createElement(p.ErrorMessage,{error:d}):null,l.createElement(u.FormControl,null,l.createElement(u.FormLabel,null,"File type"),l.createElement(u.RadioGroup,{value:y,onChange:e=>b(e.target.value)},l.createElement(u.FormControlLabel,{value:"BigMafAdapter",control:l.createElement(u.Radio,null),checked:"BigMafAdapter"===y,label:"bigMaf"}),l.createElement(u.FormControlLabel,{value:"MafTabixAdapter",control:l.createElement(u.Radio,null),checked:"MafTabixAdapter"===y,label:"mafTabix"}))),"BigMafAdapter"===y?l.createElement(p.FileSelector,{location:o,name:"Path to bigMaf",setLocation:e=>s(e),rootModel:w}):l.createElement(l.Fragment,null,l.createElement(p.FileSelector,{location:o,name:"Path to MAF tabix",setLocation:e=>s(e),rootModel:w}),l.createElement(p.FileSelector,{location:c,name:"Path to MAF tabix index",setLocation:e=>f(e),rootModel:w}))),l.createElement(u.TextField,{multiline:!0,rows:10,value:r,onChange:e=>n(e.target.value),placeholder:"Enter sample names from the MAF file, one per line, or JSON formatted array of samples",variant:"outlined",fullWidth:!0}),l.createElement(u.TextField,{value:m,onChange:e=>g(e.target.value),helperText:"Track name"}),l.createElement(u.Button,{variant:"contained",className:t.submit,onClick:()=>{try{const t=i.getSession(e);let n=[];try{n=JSON.parse(r)}catch(e){n=r.split(/\n|\r\n|\r/)}const a=[`${m.toLowerCase().replaceAll(" ","_")}-${Date.now()}`,t.adminMode?"":"-sessionTrack"].join("");i.isSessionWithAddTracks(t)&&(t.addTrackConf({trackId:a,type:"MafTrack",name:m,assemblyNames:[e.assembly],adapter:"BigMafAdapter"===y?{type:y,bigBedLocation:o,samples:n}:{type:y,bedGzLocation:o,index:{location:c},samples:n}}),e.view?.showTrack(a)),e.clearData(),i.isSessionModelWithWidgets(t)&&t.hideWidget(e)}catch(e){h(e)}}},"Submit"))}var ee={__proto__:null,renderSvg:async function(e,t,r){const{height:n,id:o}=e,{offsetPx:a,width:s}=i.getContainingView(e),c=`mafclip-${o}`;return l.createElement(l.Fragment,null,l.createElement("defs",null,l.createElement("clipPath",{id:c},l.createElement("rect",{x:0,y:0,width:s,height:n}))),l.createElement("g",{clipPath:`url(#${c})`},l.createElement("g",{id:"snpcov"},await r(t)),l.createElement("g",{transform:`translate(${Math.max(-a,0)})`},l.createElement($,{model:e,orientation:"left",exportSVG:!0}))))}};e.default=class extends t{name="MafViewerPlugin";version="1.0.5";install(e){!function(e){e.addAdapterType((()=>new r.AdapterType({name:"BigMafAdapter",AdapterClass:q,configSchema:d})))}(e),function(e){e.addTrackType((()=>{const t=function(e){return n.ConfigurationSchema("MafTrack",{},{baseConfiguration:r.createBaseTrackConfig(e),explicitIdentifier:"trackId"})}(e);return new r.TrackType({name:"MafTrack",configSchema:t,displayName:"MAF track",stateModel:r.createBaseTrackModel(e,"MafTrack",t)})}))}(e),function(e){e.addDisplayType((()=>{const t=function(e){const t=e.getPlugin("LinearGenomeViewPlugin"),{baseLinearDisplayConfigSchema:r}=t.exports;return n.ConfigurationSchema("LinearMafDisplay",{renderer:e.pluggableConfigSchemaType("renderer")},{baseConfiguration:r,explicitlyTyped:!0})}(e),o=function(e,t){const r=t.getPlugin("LinearGenomeViewPlugin"),{BaseLinearDisplay:o}=r.exports;return a.types.compose("LinearMafDisplay",o,a.types.model({type:a.types.literal("LinearMafDisplay"),configuration:n.ConfigurationReference(e),rowHeight:15,rowProportion:.8,showAllLetters:!1})).volatile((()=>({prefersOffset:!0}))).actions((e=>({setRowHeight(t){e.rowHeight=t},setRowProportion(t){e.rowProportion=t},setShowAllLetters(t){e.showAllLetters=t}}))).views((e=>({get samples(){const t=e.adapterConfig.samples;return"string"==typeof t[0]?t.map((e=>({id:e,label:e,color:void 0}))):t},get rendererTypeName(){return"LinearMafRenderer"},get rendererConfig(){const t=n.getConf(e,["renderer"])||{};return e.rendererType.configSchema.create({...t,type:"LinearMafRenderer"},i.getEnv(e))}}))).views((e=>{const{trackMenuItems:t,renderProps:r}=e;return{renderProps(){const{showAllLetters:t,rendererConfig:n,samples:o,rowHeight:a,rowProportion:i}=e;return{...r(),config:n,samples:o,rowHeight:a,rowProportion:i,showAllLetters:t}},trackMenuItems:()=>[...t(),{label:"Set row height",onClick:()=>{i.getSession(e).queueDialog((t=>[D,{model:e,handleClose:t}]))}},{label:"Show all letters",type:"checkbox",checked:e.showAllLetters,onClick:()=>{e.setShowAllLetters(!e.showAllLetters)}}]}})).actions((e=>{const{renderSvg:t}=e;return{async renderSvg(r){const{renderSvg:n}=await Promise.resolve().then((function(){return ee}));return n(e,r,t)}}}))}(t,e);return new r.DisplayType({name:"LinearMafDisplay",configSchema:t,stateModel:o,ReactComponent:G,viewType:"LinearGenomeView",trackType:"MafTrack",displayName:"MAF display"})}))}(e),function(e){e.addRendererType((()=>new U({name:"LinearMafRenderer",ReactComponent:Y,configSchema:W,pluginManager:e})))}(e),function(e){e.addAdapterType((()=>new r.AdapterType({name:"MafTabixAdapter",AdapterClass:Q,configSchema:K})))}(e),function(e){e.addAddTrackWorkflowType((()=>new r.AddTrackWorkflowType({name:"MAF track",ReactComponent:Z,stateModel:a.types.model({})})))}(e)}configure(e){}},Object.defineProperty(e,"__esModule",{value:!0})},"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("@jbrowse/core/Plugin"),require("@jbrowse/core/pluggableElementTypes"),require("@jbrowse/core/configuration"),require("@jbrowse/core/data_adapters/BaseAdapter"),require("mobx-state-tree"),require("@jbrowse/core/util"),require("@jbrowse/core/util/rxjs"),require("react"),require("mobx-react"),require("@mui/material"),require("@jbrowse/core/ui"),require("tss-react/mui")):"function"==typeof define&&define.amd?define(["exports","@jbrowse/core/Plugin","@jbrowse/core/pluggableElementTypes","@jbrowse/core/configuration","@jbrowse/core/data_adapters/BaseAdapter","mobx-state-tree","@jbrowse/core/util","@jbrowse/core/util/rxjs","react","mobx-react","@mui/material","@jbrowse/core/ui","tss-react/mui"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).JBrowsePluginMafViewer={},e.JBrowseExports["@jbrowse/core/Plugin"],e.JBrowseExports["@jbrowse/core/pluggableElementTypes"],e.JBrowseExports["@jbrowse/core/configuration"],e.JBrowseExports["@jbrowse/core/data_adapters/BaseAdapter"],e.JBrowseExports["mobx-state-tree"],e.JBrowseExports["@jbrowse/core/util"],e.JBrowseExports["@jbrowse/core/util/rxjs"],e.JBrowseExports.react,e.JBrowseExports["mobx-react"],e.JBrowseExports["@mui/material"],e.JBrowseExports["@jbrowse/core/ui"],e.JBrowseExports["tss-react/mui"]);
1
+ "use strict";var JBrowsePluginMafViewer=(()=>{var kt=Object.create;var ce=Object.defineProperty;var jt=Object.getOwnPropertyDescriptor;var Bt=Object.getOwnPropertyNames;var Dt=Object.getPrototypeOf,Rt=Object.prototype.hasOwnProperty;var ue=(e,r)=>()=>(e&&(r=e(e=0)),r);var T=(e,r)=>()=>(r||e((r={exports:{}}).exports,r),r.exports),ir=(e,r)=>{for(var t in r)ce(e,t,{get:r[t],enumerable:!0})},ar=(e,r,t,n)=>{if(r&&typeof r=="object"||typeof r=="function")for(let o of Bt(r))!Rt.call(e,o)&&o!==t&&ce(e,o,{get:()=>r[o],enumerable:!(n=jt(r,o))||n.enumerable});return e};var a=(e,r,t)=>(t=e!=null?kt(Dt(e)):{},ar(r||!e||!e.__esModule?ce(t,"default",{value:e,enumerable:!0}):t,e)),It=e=>ar(ce({},"__esModule",{value:!0}),e);var pr=T((uo,sr)=>{sr.exports=JBrowseExports["@jbrowse/core/Plugin"]});var B=T((ho,lr)=>{lr.exports=JBrowseExports["@jbrowse/core/pluggableElementTypes"]});var W=T((go,cr)=>{cr.exports=JBrowseExports["@jbrowse/core/configuration"]});var me=T((xo,dr)=>{dr.exports=JBrowseExports["@jbrowse/core/data_adapters/BaseAdapter"]});var z=T((bo,hr)=>{hr.exports=JBrowseExports["mobx-state-tree"]});var D=T((wo,gr)=>{gr.exports=JBrowseExports["@jbrowse/core/util"]});var de=T((vo,yr)=>{yr.exports=JBrowseExports["@jbrowse/core/util/rxjs"]});var R=T((jn,Rr)=>{Rr.exports=JBrowseExports.react});var q=T((Bn,Ir)=>{Ir.exports=JBrowseExports["mobx-react"]});var Je=T((Dn,Nr)=>{Nr.exports=JBrowseExports["@mui/material"]});var ne=T((Rn,Wr)=>{Wr.exports=JBrowseExports["@jbrowse/core/ui"]});var $e=T((In,Vr)=>{Vr.exports=JBrowseExports["tss-react/mui"]});var Jr,Kt,$r,qr=ue(()=>{"use strict";Jr=a(R()),Kt=e=>{let{color:r="rgb(255,255,255,0.8)"}=e;return Jr.default.createElement("rect",{...e,fill:r})},$r=Kt});var ie,Yr,Qt,Kr,Qr=ue(()=>{"use strict";ie=a(R()),Yr=a(q());qr();Qt=(0,Yr.observer)(function({model:e,labelWidth:r,svgFontSize:t}){let{samples:n,rowHeight:o}=e,i=o>=10,s=Math.min(20,o);return ie.default.createElement(ie.default.Fragment,null,n.map((f,p)=>ie.default.createElement($r,{key:`${f.id}-${p}`,y:p*o,x:0,width:r+5,height:s,color:f.color})),i?n.map((f,p)=>ie.default.createElement("text",{key:`${f.id}-${p}`,y:p*o+o/2,dominantBaseline:"middle",x:2,fontSize:t},f.label)):null)}),Kr=Qt});function Zt(e,r=Number.NEGATIVE_INFINITY){let t=r;for(let n of e)t=Math.max(n,t);return t}var Y,ve,qe,Xt,eo,Se,Ye=ue(()=>{"use strict";Y=a(R()),ve=a(D()),qe=a(q());Qr();Xt=(0,qe.observer)(function({children:e,model:r,exportSVG:t}){if(t)return Y.default.createElement(Y.default.Fragment,null,e);{let{rowHeight:n,samples:o}=r;return Y.default.createElement("svg",{style:{position:"absolute",top:0,left:0,pointerEvents:"none",height:o.length*n,width:(0,ve.getContainingView)(r).width}},e)}});eo=(0,qe.observer)(function(e){let{model:r}=e,{rowHeight:t,samples:n}=r,o=Math.min(Math.max(t,10),14),i=t>=10,s=20,f=Zt(n.map(p=>(0,ve.measureText)(p.label,o)).map(p=>i?p:s));return Y.default.createElement(Xt,{...e},Y.default.createElement(Kr,{model:r,labelWidth:f,svgFontSize:o}))}),Se=eo});var Zr={};ir(Zr,{renderSvg:()=>ro});async function ro(e,r,t){let{height:n,id:o}=e,{offsetPx:i,width:s}=(0,Xr.getContainingView)(e),f=`mafclip-${o}`;return L.default.createElement(L.default.Fragment,null,L.default.createElement("defs",null,L.default.createElement("clipPath",{id:f},L.default.createElement("rect",{x:0,y:0,width:s,height:n}))),L.default.createElement("g",{clipPath:`url(#${f})`},L.default.createElement("g",{id:"snpcov"},await t(r)),L.default.createElement("g",{transform:`translate(${Math.max(-i,0)})`},L.default.createElement(Se,{model:e,orientation:"left",exportSVG:!0}))))}var L,Xr,et=ue(()=>{"use strict";L=a(R()),Xr=a(D());Ye()});var Tt=T((Ti,St)=>{St.exports=JBrowseExports["@jbrowse/core/util/io"]});var lo={};ir(lo,{default:()=>Ae});var Ot=a(pr());var fr="1.0.8";var kr=a(B());var ur=a(W());var Wt=(0,ur.ConfigurationSchema)("BigMafAdapter",{samples:{type:"frozen",description:"string[] or {id:string,label:string,color?:string}[]",defaultValue:[]},bigBedLocation:{type:"fileLocation",defaultValue:{uri:"/path/to/my.bb",locationType:"UriLocation"}}},{explicitlyTyped:!0}),mr=Wt;var Fr=a(me()),_r=a(z()),Lr=a(D()),Or=a(de());var Oe=function(e,r){return Oe=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,n){t.__proto__=n}||function(t,n){for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(t[o]=n[o])},Oe(e,r)};function ee(e,r){if(typeof r!="function"&&r!==null)throw new TypeError("Class extends value "+String(r)+" is not a constructor or null");Oe(e,r);function t(){this.constructor=e}e.prototype=r===null?Object.create(r):(t.prototype=r.prototype,new t)}function ke(e){var r=typeof Symbol=="function"&&Symbol.iterator,t=r&&e[r],n=0;if(t)return t.call(e);if(e&&typeof e.length=="number")return{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw new TypeError(r?"Object is not iterable.":"Symbol.iterator is not defined.")}function G(e,r){var t=typeof Symbol=="function"&&e[Symbol.iterator];if(!t)return e;var n=t.call(e),o,i=[],s;try{for(;(r===void 0||r-- >0)&&!(o=n.next()).done;)i.push(o.value)}catch(f){s={error:f}}finally{try{o&&!o.done&&(t=n.return)&&t.call(n)}finally{if(s)throw s.error}}return i}function J(e,r,t){if(t||arguments.length===2)for(var n=0,o=r.length,i;n<o;n++)(i||!(n in r))&&(i||(i=Array.prototype.slice.call(r,0,n)),i[n]=r[n]);return e.concat(i||Array.prototype.slice.call(r))}function _(e){return typeof e=="function"}function he(e){var r=function(n){Error.call(n),n.stack=new Error().stack},t=e(r);return t.prototype=Object.create(Error.prototype),t.prototype.constructor=t,t}var ge=he(function(e){return function(t){e(this),this.message=t?t.length+` errors occurred during unsubscription:
2
+ `+t.map(function(n,o){return o+1+") "+n.toString()}).join(`
3
+ `):"",this.name="UnsubscriptionError",this.errors=t}});function je(e,r){if(e){var t=e.indexOf(r);0<=t&&e.splice(t,1)}}var ye=function(){function e(r){this.initialTeardown=r,this.closed=!1,this._parentage=null,this._finalizers=null}return e.prototype.unsubscribe=function(){var r,t,n,o,i;if(!this.closed){this.closed=!0;var s=this._parentage;if(s)if(this._parentage=null,Array.isArray(s))try{for(var f=ke(s),p=f.next();!p.done;p=f.next()){var u=p.value;u.remove(this)}}catch(d){r={error:d}}finally{try{p&&!p.done&&(t=f.return)&&t.call(f)}finally{if(r)throw r.error}}else s.remove(this);var h=this.initialTeardown;if(_(h))try{h()}catch(d){i=d instanceof ge?d.errors:[d]}var x=this._finalizers;if(x){this._finalizers=null;try{for(var l=ke(x),v=l.next();!v.done;v=l.next()){var b=v.value;try{xr(b)}catch(d){i=i??[],d instanceof ge?i=J(J([],G(i)),G(d.errors)):i.push(d)}}}catch(d){n={error:d}}finally{try{v&&!v.done&&(o=l.return)&&o.call(l)}finally{if(n)throw n.error}}}if(i)throw new ge(i)}},e.prototype.add=function(r){var t;if(r&&r!==this)if(this.closed)xr(r);else{if(r instanceof e){if(r.closed||r._hasParent(this))return;r._addParent(this)}(this._finalizers=(t=this._finalizers)!==null&&t!==void 0?t:[]).push(r)}},e.prototype._hasParent=function(r){var t=this._parentage;return t===r||Array.isArray(t)&&t.includes(r)},e.prototype._addParent=function(r){var t=this._parentage;this._parentage=Array.isArray(t)?(t.push(r),t):t?[t,r]:r},e.prototype._removeParent=function(r){var t=this._parentage;t===r?this._parentage=null:Array.isArray(t)&&je(t,r)},e.prototype.remove=function(r){var t=this._finalizers;t&&je(t,r),r instanceof e&&r._removeParent(this)},e.EMPTY=function(){var r=new e;return r.closed=!0,r}(),e}();var Oo=ye.EMPTY;function br(e){return e instanceof ye||e&&"closed"in e&&_(e.remove)&&_(e.add)&&_(e.unsubscribe)}function xr(e){_(e)?e():e.unsubscribe()}var V={onUnhandledError:null,onStoppedNotification:null,Promise:void 0,useDeprecatedSynchronousErrorHandling:!1,useDeprecatedNextContext:!1};var $={setTimeout:function(e,r){for(var t=[],n=2;n<arguments.length;n++)t[n-2]=arguments[n];var o=$.delegate;return o?.setTimeout?o.setTimeout.apply(o,J([e,r],G(t))):setTimeout.apply(void 0,J([e,r],G(t)))},clearTimeout:function(e){var r=$.delegate;return(r?.clearTimeout||clearTimeout)(e)},delegate:void 0};function wr(e){$.setTimeout(function(){var r=V.onUnhandledError;if(r)r(e);else throw e})}function Be(){}var vr=function(){return De("C",void 0,void 0)}();function Sr(e){return De("E",void 0,e)}function Tr(e){return De("N",e,void 0)}function De(e,r,t){return{kind:e,value:r,error:t}}var Re=null;function Mr(e){V.useDeprecatedSynchronousErrorHandling&&Re&&(Re.errorThrown=!0,Re.error=e)}var We=function(e){ee(r,e);function r(t){var n=e.call(this)||this;return n.isStopped=!1,t?(n.destination=t,br(t)&&t.add(n)):n.destination=zt,n}return r.create=function(t,n,o){return new Ve(t,n,o)},r.prototype.next=function(t){this.isStopped?Ne(Tr(t),this):this._next(t)},r.prototype.error=function(t){this.isStopped?Ne(Sr(t),this):(this.isStopped=!0,this._error(t))},r.prototype.complete=function(){this.isStopped?Ne(vr,this):(this.isStopped=!0,this._complete())},r.prototype.unsubscribe=function(){this.closed||(this.isStopped=!0,e.prototype.unsubscribe.call(this),this.destination=null)},r.prototype._next=function(t){this.destination.next(t)},r.prototype._error=function(t){try{this.destination.error(t)}finally{this.unsubscribe()}},r.prototype._complete=function(){try{this.destination.complete()}finally{this.unsubscribe()}},r}(ye);var Vt=Function.prototype.bind;function Ie(e,r){return Vt.call(e,r)}var Ht=function(){function e(r){this.partialObserver=r}return e.prototype.next=function(r){var t=this.partialObserver;if(t.next)try{t.next(r)}catch(n){xe(n)}},e.prototype.error=function(r){var t=this.partialObserver;if(t.error)try{t.error(r)}catch(n){xe(n)}else xe(r)},e.prototype.complete=function(){var r=this.partialObserver;if(r.complete)try{r.complete()}catch(t){xe(t)}},e}(),Ve=function(e){ee(r,e);function r(t,n,o){var i=e.call(this)||this,s;if(_(t)||!t)s={next:t??void 0,error:n??void 0,complete:o??void 0};else{var f;i&&V.useDeprecatedNextContext?(f=Object.create(t),f.unsubscribe=function(){return i.unsubscribe()},s={next:t.next&&Ie(t.next,f),error:t.error&&Ie(t.error,f),complete:t.complete&&Ie(t.complete,f)}):s=t}return i.destination=new Ht(s),i}return r}(We);function xe(e){V.useDeprecatedSynchronousErrorHandling?Mr(e):wr(e)}function Ut(e){throw e}function Ne(e,r){var t=V.onStoppedNotification;t&&$.setTimeout(function(){return t(e,r)})}var zt={closed:!0,next:Be,error:Ut,complete:Be};function Gt(e){return _(e?.lift)}function be(e){return function(r){if(Gt(r))return r.lift(function(t){try{return e(t,this)}catch(n){this.error(n)}});throw new TypeError("Unable to lift unknown Observable type")}}function Pr(e,r,t,n,o){return new Jt(e,r,t,n,o)}var Jt=function(e){ee(r,e);function r(t,n,o,i,s,f){var p=e.call(this,t)||this;return p.onFinalize=s,p.shouldUnsubscribe=f,p._next=n?function(u){try{n(u)}catch(h){t.error(h)}}:e.prototype._next,p._error=i?function(u){try{i(u)}catch(h){t.error(h)}finally{this.unsubscribe()}}:e.prototype._error,p._complete=o?function(){try{o()}catch(u){t.error(u)}finally{this.unsubscribe()}}:e.prototype._complete,p}return r.prototype.unsubscribe=function(){var t;if(!this.shouldUnsubscribe||this.shouldUnsubscribe()){var n=this.closed;e.prototype.unsubscribe.call(this),!n&&((t=this.onFinalize)===null||t===void 0||t.call(this))}},r}(We);var Er=he(function(e){return function(){e(this),this.name="EmptyError",this.message="no elements in sequence"}});function re(e,r){var t=typeof r=="object";return new Promise(function(n,o){var i=new Ve({next:function(s){n(s),i.unsubscribe()},error:o,complete:function(){t?n(r.defaultValue):o(new Er)}});e.subscribe(i)})}function Ar(e,r,t,n,o){return function(i,s){var f=t,p=r,u=0;i.subscribe(Pr(s,function(h){var x=u++;p=f?e(p,h,x):(f=!0,h),n&&s.next(p)},o&&function(){f&&s.next(p),s.complete()}))}}function Cr(e,r){return be(Ar(e,r,arguments.length>=2,!1,!0))}var $t=function(e,r){return e.push(r),e};function te(){return be(function(e,r){Cr($t,[])(e).subscribe(r)})}var oe=class extends Fr.BaseFeatureDataAdapter{setupP;async setup(){if(!this.getSubAdapter)throw new Error("no getSubAdapter available");return{adapter:(await this.getSubAdapter({...(0,_r.getSnapshot)(this.config),type:"BigBedAdapter"})).dataAdapter}}async setupPre(){return this.setupP||(this.setupP=this.setup().catch(r=>{throw this.setupP=void 0,r})),this.setupP}async getRefNames(){let{adapter:r}=await this.setup();return r.getRefNames()}async getHeader(){let{adapter:r}=await this.setup();return r.getHeader()}getFeatures(r){return(0,Or.ObservableCreate)(async t=>{let{adapter:n}=await this.setup(),o=await re(n.getFeatures(r).pipe(te()));for(let i of o){let f=i.get("mafBlock").split(";"),p,u=[],h={},x=[];for(let l of f)l.startsWith("s")&&(p?(u.push(l.split(/ +/)[6]),x.push(l)):(p=l.split(/ +/)[6],u.push(p),x.push(l)));for(let l=0;l<x.length;l++){let b=x[l].split(/ +/),d=b[1].split("."),A=d[0],c=d[1];h[A]={chr:c,start:+b[1],srcSize:+b[2],strand:b[3]==="+"?1:-1,unknown:+b[4],data:u[l]}}t.next(new Lr.SimpleFeature({id:i.id(),data:{start:i.get("start"),end:i.get("end"),refName:i.get("refName"),seq:u[0],alignments:h}}))}t.complete()})}freeResources(){}};function He(e){return e.addAdapterType(()=>new kr.AdapterType({name:"BigMafAdapter",AdapterClass:oe,configSchema:mr}))}var we=a(B());var jr=a(W()),Br=a(B());function Ue(e){return(0,jr.ConfigurationSchema)("MafTrack",{},{baseConfiguration:(0,Br.createBaseTrackConfig)(e),explicitIdentifier:"trackId"})}function ze(e){return e.addTrackType(()=>{let r=Ue(e);return new we.TrackType({name:"MafTrack",configSchema:r,displayName:"MAF track",stateModel:(0,we.createBaseTrackModel)(e,"MafTrack",r)})})}var nt=a(B());var Dr=a(W());function Ge(e){let r=e.getPlugin("LinearGenomeViewPlugin"),{baseLinearDisplayConfigSchema:t}=r.exports;return(0,Dr.ConfigurationSchema)("LinearMafDisplay",{renderer:e.pluggableConfigSchemaType("renderer")},{baseConfiguration:t,explicitlyTyped:!0})}var Te=a(z()),Me=a(W()),Pe=a(D());var P=a(R()),Hr=a(q()),E=a(Je()),Ur=a(ne()),zr=a($e()),qt=(0,zr.makeStyles)()({root:{width:500}}),Yt=(0,Hr.observer)(function(e){let{model:r,handleClose:t}=e,{classes:n}=qt(),[o,i]=(0,P.useState)(`${r.rowHeight}`),[s,f]=(0,P.useState)(`${r.rowProportion}`);return P.default.createElement(Ur.Dialog,{open:!0,onClose:t,title:"Filter options"},P.default.createElement(E.DialogContent,{className:n.root},P.default.createElement(E.Typography,null,"Set row height and the proportion of the row height to use for drawing each row"),P.default.createElement(E.TextField,{value:o,onChange:p=>{i(p.target.value)},placeholder:"Enter row height"}),P.default.createElement(E.TextField,{value:s,onChange:p=>{f(p.target.value)},placeholder:"Enter row proportion"}),P.default.createElement(E.DialogActions,null,P.default.createElement(E.Button,{variant:"contained",color:"primary",type:"submit",autoFocus:!0,onClick:()=>{r.setRowProportion(+s),r.setRowHeight(+o),t()}},"Submit"),P.default.createElement(E.Button,{variant:"contained",color:"secondary",onClick:()=>{t()}},"Cancel"))))}),Gr=Yt;function to(e){return typeof e[0]=="string"}function Ke(e,r){let t=r.getPlugin("LinearGenomeViewPlugin"),{BaseLinearDisplay:n}=t.exports;return Te.types.compose("LinearMafDisplay",n,Te.types.model({type:Te.types.literal("LinearMafDisplay"),configuration:(0,Me.ConfigurationReference)(e),rowHeight:15,rowProportion:.8,showAllLetters:!1,mismatchRendering:!0})).volatile(()=>({prefersOffset:!0})).actions(o=>({setRowHeight(i){o.rowHeight=i},setRowProportion(i){o.rowProportion=i},setShowAllLetters(i){o.showAllLetters=i},setMismatchRendering(i){o.mismatchRendering=i}})).views(o=>({get samples(){let i=o.adapterConfig.samples;return to(i)?i.map(s=>({id:s,label:s,color:void 0})):i},get rendererTypeName(){return"LinearMafRenderer"},get rendererConfig(){let s=(0,Me.getConf)(o,["renderer"])||{};return o.rendererType.configSchema.create({...s,type:"LinearMafRenderer"},(0,Pe.getEnv)(o))}})).views(o=>{let{trackMenuItems:i,renderProps:s}=o;return{renderProps(){let{showAllLetters:f,rendererConfig:p,samples:u,rowHeight:h,rowProportion:x,mismatchRendering:l}=o;return{...s(),config:p,samples:u,rowHeight:h,rowProportion:x,showAllLetters:f,mismatchRendering:l}},trackMenuItems(){return[...i(),{label:"Set row height",onClick:()=>{(0,Pe.getSession)(o).queueDialog(f=>[Gr,{model:o,handleClose:f}])}},{label:"Show all letters",type:"checkbox",checked:o.showAllLetters,onClick:()=>{o.setShowAllLetters(!o.showAllLetters)}},{label:"Draw mismatches as single color",type:"checkbox",checked:!o.mismatchRendering,onClick:()=>{o.setMismatchRendering(!o.mismatchRendering)}}]}}}).actions(o=>{let{renderSvg:i}=o;return{async renderSvg(s){let{renderSvg:f}=await Promise.resolve().then(()=>(et(),Zr));return f(o,s,i)}}})}var Ee=a(R()),rt=a(D()),tt=a(q());Ye();var oo=(0,tt.observer)(function(e){let{model:r}=e,{pluginManager:t}=(0,rt.getEnv)(r),n=t.getPlugin("LinearGenomeViewPlugin"),{BaseLinearDisplayComponent:o}=n.exports;return Ee.default.createElement("div",null,Ee.default.createElement(o,{...e}),Ee.default.createElement(Se,{model:r}))}),ot=oo;function Qe(e){e.addDisplayType(()=>{let r=Ge(e),t=Ke(r,e);return new nt.DisplayType({name:"LinearMafDisplay",configSchema:r,stateModel:t,ReactComponent:ot,viewType:"LinearGenomeView",trackType:"MafTrack",displayName:"MAF display"})})}var it=a(W());var no=(0,it.ConfigurationSchema)("LinearMafRenderer",{},{explicitlyTyped:!0}),at=no;var pt=a(B()),ft=a(ne()),ae=a(D());function st(e){return Object.fromEntries(Object.entries(Xe(e)).map(([r,t])=>[r,e.palette.getContrastText(t)]))}function Xe(e){let{bases:r}=e.palette;return{a:r.A.main,c:r.C.main,g:r.G.main,t:r.T.main}}function io({ctx:e,renderArgs:r}){let{regions:t,bpPerPx:n,rowHeight:o,showAllLetters:i,theme:s,mismatchRendering:f,samples:p,rowProportion:u,features:h}=r,[x]=t,l=o*u,v=(0,ft.createJBrowseTheme)(s),b=Xe(v),d=st(v),A=new Map(p.map((O,N)=>[O.id,N])),c=1/n,C=.4,I=o/2,le=l/2,H=(o-l)/2;e.font="bold 10px Courier New,monospace";for(let O of h.values()){let[N]=(0,ae.featureSpanPx)(O,x,n),Ce=O.get("alignments"),k=O.get("seq").toLowerCase();for(let[X,Fe]of Object.entries(Ce)){let _e=Fe.data,M=_e.toLowerCase(),Z=A.get(X);if(Z===void 0)throw new Error(`unknown sample encountered: ${X}`);let F=o*Z;e.beginPath(),e.fillStyle="black";for(let y=0,S=0;y<M.length;y++)if(k[y]!=="-"){if(M[y]==="-"){let w=N+c*S;e.moveTo(w,F+I),e.lineTo(w+c+C,F+I)}S++}if(e.stroke(),!i){e.beginPath(),e.fillStyle="lightgrey";for(let y=0,S=0;y<M.length;y++)if(k[y]!=="-"){let w=M[y],U=N+c*S;k[y]===w&&w!=="-"&&e.rect(U,H+F,c+C,l),S++}e.fill()}for(let y=0,S=0;y<M.length;y++){let w=M[y];if(k[y]!=="-"){if(w!=="-"){let U=N+c*S;k[y]!==w?(e.fillStyle=f?b[w]??"black":"orange",e.fillRect(U,H+F,c+C,l)):i&&(e.fillStyle=f?b[w]??"black":"lightblue",e.fillRect(U,H+F,c+C,l))}S++}}let j=10;if(c>=j){for(let y=0,S=0;y<M.length;y++)if(k[y]!=="-"){let w=N+c*S,U=(c-j)/2+1,Le=M[y];(i||k[y]!==Le)&&Le!=="-"&&(e.fillStyle=d[Le]??"white",e.fillText(_e[y],w+U,le+F+3)),S++}}}}for(let O of h.values()){let[N]=(0,ae.featureSpanPx)(O,x,n),Ce=O.get("alignments"),k=O.get("seq").toLowerCase();for(let[X,Fe]of Object.entries(Ce)){let M=Fe.data.toLowerCase(),Z=A.get(X);if(Z===void 0)throw new Error(`unknown sample encountered: ${X}`);let F=o*Z;e.beginPath(),e.fillStyle="purple";for(let j=0,y=0;j<M.length;j++){let S="";for(;k[j]==="-";)M[j]!=="-"&&(S+=M[j]),j++;if(S.length>0){let w=N+c*y-1;e.rect(w,H+F+1,1,l-1),e.rect(w-2,H+F,5,1),e.rect(w-2,H+F+l-1,5,1)}y++}e.fill()}}}var se=class extends pt.FeatureRendererType{getExpandedRegion(r){let{start:t,end:n}=r,o=1;return{...r,start:Math.floor(Math.max(t-o,0)),end:Math.ceil(n+o)}}async render(r){let{regions:t,bpPerPx:n,samples:o,rowHeight:i}=r,[s]=t,f=o.length*i+100,p=(s.end-s.start)/n,u=await this.getFeatures(r),h=await(0,ae.renderToAbstractCanvas)(p,f,r,l=>{io({ctx:l,renderArgs:{...r,features:u}})});return{...await super.render({...r,...h,width:p,height:f}),...h,width:p,height:f}}};var lt=a(ne()),ct=a(q()),ut=a(R()),ao=(0,ct.observer)(function(e){return ut.default.createElement(lt.PrerenderedCanvas,{...e})}),mt=ao;function Ze(e){e.addRendererType(()=>new se({name:"LinearMafRenderer",ReactComponent:mt,configSchema:at,pluginManager:e}))}var bt=a(B());var er=a(W());var so=(0,er.ConfigurationSchema)("MafTabixAdapter",{samples:{type:"frozen",description:"string[] or {id:string,label:string,color?:string}[]",defaultValue:[]},bedGzLocation:{type:"fileLocation",defaultValue:{uri:"/path/to/my.bed.gz.tbi",locationType:"UriLocation"}},index:(0,er.ConfigurationSchema)("Index",{location:{type:"fileLocation",defaultValue:{uri:"/path/to/my.bed.gz.tbi"}},indexType:{type:"string",defaultValue:"TBI"}})},{explicitlyTyped:!0}),dt=so;var ht=a(me()),gt=a(z()),yt=a(D()),xt=a(de());var pe=class extends ht.BaseFeatureDataAdapter{setupP;async setup(){let r=this.config;if(!this.getSubAdapter)throw new Error("no getSubAdapter available");return{adapter:(await this.getSubAdapter({...(0,gt.getSnapshot)(r),type:"BedTabixAdapter"})).dataAdapter}}async setupPre(){return this.setupP||(this.setupP=this.setup().catch(r=>{throw this.setupP=void 0,r})),this.setupP}async getRefNames(){let{adapter:r}=await this.setup();return r.getRefNames()}async getHeader(){let{adapter:r}=await this.setup();return r.getHeader()}getFeatures(r){return(0,xt.ObservableCreate)(async t=>{let{adapter:n}=await this.setup(),o=await re(n.getFeatures(r).pipe(te())),i=this.getConf("samples"),s=typeof i[0]=="string"?i:i.map(u=>u.id),f=new Set(s),p=0;for(let u of o){let h=u.get("field5").split(","),x={},l=h.map(v=>v.split(":")[5]);for(let[v,b]of h.entries()){let d=b.split(":"),A=d[0].lastIndexOf("."),c=d[0].slice(0,A),C=d[0].slice(A+1),I=f.has(c)?c:s.find(le=>d[0].startsWith(le));I?x[I]={chr:C,start:+d[1],srcSize:+d[2],strand:d[3]==="-"?-1:1,unknown:+d[4],data:l[v]}:p<100?(console.error(`line not processed ${d[0]}`),p++):p>100&&console.error("too many errors, not printing any more")}t.next(new yt.SimpleFeature({id:u.id(),data:{start:u.get("start"),end:u.get("end"),refName:u.get("refName"),name:u.get("name"),score:u.get("score"),alignments:x,seq:l[0]}}))}t.complete()})}freeResources(){}};function rr(e){return e.addAdapterType(()=>new bt.AdapterType({name:"MafTabixAdapter",AdapterClass:pe,configSchema:dt}))}var At=a(B());var wt=a(W());var po=(0,wt.ConfigurationSchema)("TaffyAdapter",{samples:{type:"frozen",description:"string[] or {id:string,label:string,color?:string}[]",defaultValue:[]},tafLocation:{type:"fileLocation",defaultValue:{uri:"/path/to/my.taf",locationType:"UriLocation"}},taiLocation:{type:"fileLocation",defaultValue:{uri:"/path/to/my.taf.tai",locationType:"UriLocation"}}},{explicitlyTyped:!0}),vt=po;var Mt=a(me()),Pt=a(de()),Et=a(Tt()),fe=class extends Mt.BaseFeatureDataAdapter{setupP;async getRefNames(){let r=await this.setup();return Object.keys(r)}setup(){return this.setupP||(this.setupP=this.readTaiFile().catch(r=>{throw this.setupP=void 0,r})),this.setupP}async readTaiFile(){let r=await(0,Et.openLocation)(this.getConf("taiLocation")).readFile("utf8"),t={},n="";for(let o of r.split(`
4
+ `).filter(i=>i.trim())){let[i,s,f]=o.split(" "),p=i==="*"?n:i,u=p.split(".").at(-1);t[u]||(t[u]=[]),t[u].push({chrStart:+s,fileOffst:+f}),n=p}return t}getFeatures(r){return(0,Pt.ObservableCreate)(async t=>{try{t.complete()}catch(n){t.error(n)}})}freeResources(){}};function tr(e){return e.addAdapterType(()=>new At.AdapterType({name:"TaffyAdapter",AdapterClass:fe,configSchema:vt}))}var _t=a(B()),Lt=a(z());var m=a(R()),g=a(Je()),Ct=a($e()),Q=a(D()),K=a(ne()),Ft=a(z()),fo=(0,Ct.makeStyles)()(e=>({textbox:{width:"100%"},paper:{margin:e.spacing(),padding:e.spacing()},submit:{marginTop:25,marginBottom:100,display:"block"}}));function or({model:e}){let{classes:r}=fo(),[t,n]=(0,m.useState)(""),[o,i]=(0,m.useState)(),[s,f]=(0,m.useState)(),[p,u]=(0,m.useState)(),[h,x]=(0,m.useState)("MAF track"),[l,v]=(0,m.useState)("BigMafAdapter"),[b,d]=(0,m.useState)("TBI"),A=(0,Ft.getRoot)(e);return m.default.createElement(g.Paper,{className:r.paper},m.default.createElement(g.Paper,null,p?m.default.createElement(K.ErrorMessage,{error:p}):null,m.default.createElement(g.FormControl,null,m.default.createElement(g.FormLabel,null,"File type"),m.default.createElement(g.RadioGroup,{value:l,onChange:c=>{v(c.target.value)}},m.default.createElement(g.FormControlLabel,{value:"BigMafAdapter",control:m.default.createElement(g.Radio,null),checked:l==="BigMafAdapter",label:"bigMaf"}),m.default.createElement(g.FormControlLabel,{value:"MafTabixAdapter",control:m.default.createElement(g.Radio,null),checked:l==="MafTabixAdapter",label:"mafTabix"}))),l==="BigMafAdapter"?m.default.createElement(K.FileSelector,{location:o,name:"Path to bigMaf",rootModel:A,setLocation:c=>{i(c)}}):m.default.createElement(m.default.Fragment,null,m.default.createElement(g.FormControl,null,m.default.createElement(g.FormLabel,null,"Index type"),m.default.createElement(g.RadioGroup,{value:l,onChange:c=>{d(c.target.value)}},m.default.createElement(g.FormControlLabel,{value:"TBI",control:m.default.createElement(g.Radio,null),checked:b==="TBI",label:"TBI"}),m.default.createElement(g.FormControlLabel,{value:"CSI",control:m.default.createElement(g.Radio,null),checked:b==="CSI",label:"CSI"}))),m.default.createElement(K.FileSelector,{location:o,name:"Path to MAF tabix",setLocation:c=>{i(c)},rootModel:A}),m.default.createElement(K.FileSelector,{location:s,name:"Path to MAF tabix index",setLocation:c=>{f(c)},rootModel:A}))),m.default.createElement(g.TextField,{multiline:!0,rows:10,value:t,onChange:c=>{n(c.target.value)},placeholder:"Enter sample names from the MAF file, one per line, or JSON formatted array of samples",variant:"outlined",fullWidth:!0}),m.default.createElement(g.TextField,{value:h,helperText:"Track name",onChange:c=>{x(c.target.value)}}),m.default.createElement(g.Button,{variant:"contained",className:r.submit,onClick:()=>{try{let c=(0,Q.getSession)(e),C=[];try{C=JSON.parse(t)}catch{C=t.split(/\n|\r\n|\r/)}let I=[`${h.toLowerCase().replaceAll(" ","_")}-${Date.now()}`,c.adminMode?"":"-sessionTrack"].join("");(0,Q.isSessionWithAddTracks)(c)&&(c.addTrackConf({trackId:I,type:"MafTrack",name:h,assemblyNames:[e.assembly],adapter:l==="BigMafAdapter"?{type:l,bigBedLocation:o,samples:C}:{type:l,bedGzLocation:o,index:{indexType:b,location:s},samples:C}}),e.view?.showTrack(I)),e.clearData(),(0,Q.isSessionModelWithWidgets)(c)&&c.hideWidget(e)}catch(c){u(c)}}},"Submit"))}function nr(e){e.addAddTrackWorkflowType(()=>new _t.AddTrackWorkflowType({name:"MAF track",ReactComponent:or,stateModel:Lt.types.model({})}))}var Ae=class extends Ot.default{name="MafViewerPlugin";version=fr;install(r){He(r),ze(r),Qe(r),Ze(r),rr(r),tr(r),nr(r)}configure(r){}};return It(lo);})();
2
5
  //# sourceMappingURL=jbrowse-plugin-mafviewer.umd.production.min.js.map