@jbrowse/plugin-breakpoint-split-view 2.6.1

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/LICENSE +201 -0
  2. package/dist/BreakpointAlignmentsFeatureDetail/BreakpointAlignmentsFeatureDetail.d.ts +5 -0
  3. package/dist/BreakpointAlignmentsFeatureDetail/BreakpointAlignmentsFeatureDetail.js +21 -0
  4. package/dist/BreakpointAlignmentsFeatureDetail/BreakpointAlignmentsFeatureDetail.js.map +1 -0
  5. package/dist/BreakpointAlignmentsFeatureDetail/index.d.ts +3 -0
  6. package/dist/BreakpointAlignmentsFeatureDetail/index.js +57 -0
  7. package/dist/BreakpointAlignmentsFeatureDetail/index.js.map +1 -0
  8. package/dist/BreakpointSplitView/BreakpointSplitView.d.ts +23 -0
  9. package/dist/BreakpointSplitView/BreakpointSplitView.js +92 -0
  10. package/dist/BreakpointSplitView/BreakpointSplitView.js.map +1 -0
  11. package/dist/BreakpointSplitView/components/AlignmentConnections.d.ts +9 -0
  12. package/dist/BreakpointSplitView/components/AlignmentConnections.js +133 -0
  13. package/dist/BreakpointSplitView/components/AlignmentConnections.js.map +1 -0
  14. package/dist/BreakpointSplitView/components/Breakends.d.ts +9 -0
  15. package/dist/BreakpointSplitView/components/Breakends.js +117 -0
  16. package/dist/BreakpointSplitView/components/Breakends.js.map +1 -0
  17. package/dist/BreakpointSplitView/components/BreakpointSplitView.d.ts +6 -0
  18. package/dist/BreakpointSplitView/components/BreakpointSplitView.js +89 -0
  19. package/dist/BreakpointSplitView/components/BreakpointSplitView.js.map +1 -0
  20. package/dist/BreakpointSplitView/components/ExportSvgDialog.d.ts +8 -0
  21. package/dist/BreakpointSplitView/components/ExportSvgDialog.js +84 -0
  22. package/dist/BreakpointSplitView/components/ExportSvgDialog.js.map +1 -0
  23. package/dist/BreakpointSplitView/components/Overlay.d.ts +9 -0
  24. package/dist/BreakpointSplitView/components/Overlay.js +23 -0
  25. package/dist/BreakpointSplitView/components/Overlay.js.map +1 -0
  26. package/dist/BreakpointSplitView/components/Translocations.d.ts +9 -0
  27. package/dist/BreakpointSplitView/components/Translocations.js +113 -0
  28. package/dist/BreakpointSplitView/components/Translocations.js.map +1 -0
  29. package/dist/BreakpointSplitView/components/util.d.ts +7 -0
  30. package/dist/BreakpointSplitView/components/util.js +116 -0
  31. package/dist/BreakpointSplitView/components/util.js.map +1 -0
  32. package/dist/BreakpointSplitView/index.d.ts +3 -0
  33. package/dist/BreakpointSplitView/index.js +43 -0
  34. package/dist/BreakpointSplitView/index.js.map +1 -0
  35. package/dist/BreakpointSplitView/model.d.ts +299 -0
  36. package/dist/BreakpointSplitView/model.js +245 -0
  37. package/dist/BreakpointSplitView/model.js.map +1 -0
  38. package/dist/BreakpointSplitView/svgcomponents/SVGBackground.d.ts +6 -0
  39. package/dist/BreakpointSplitView/svgcomponents/SVGBackground.js +13 -0
  40. package/dist/BreakpointSplitView/svgcomponents/SVGBackground.js.map +1 -0
  41. package/dist/BreakpointSplitView/svgcomponents/SVGBreakpointSplitView.d.ts +4 -0
  42. package/dist/BreakpointSplitView/svgcomponents/SVGBreakpointSplitView.js +83 -0
  43. package/dist/BreakpointSplitView/svgcomponents/SVGBreakpointSplitView.js.map +1 -0
  44. package/dist/BreakpointSplitView/util.d.ts +18 -0
  45. package/dist/BreakpointSplitView/util.js +56 -0
  46. package/dist/BreakpointSplitView/util.js.map +1 -0
  47. package/dist/index.d.ts +7 -0
  48. package/dist/index.js +21 -0
  49. package/dist/index.js.map +1 -0
  50. package/esm/BreakpointAlignmentsFeatureDetail/BreakpointAlignmentsFeatureDetail.d.ts +5 -0
  51. package/esm/BreakpointAlignmentsFeatureDetail/BreakpointAlignmentsFeatureDetail.js +16 -0
  52. package/esm/BreakpointAlignmentsFeatureDetail/BreakpointAlignmentsFeatureDetail.js.map +1 -0
  53. package/esm/BreakpointAlignmentsFeatureDetail/index.d.ts +3 -0
  54. package/esm/BreakpointAlignmentsFeatureDetail/index.js +32 -0
  55. package/esm/BreakpointAlignmentsFeatureDetail/index.js.map +1 -0
  56. package/esm/BreakpointSplitView/BreakpointSplitView.d.ts +23 -0
  57. package/esm/BreakpointSplitView/BreakpointSplitView.js +86 -0
  58. package/esm/BreakpointSplitView/BreakpointSplitView.js.map +1 -0
  59. package/esm/BreakpointSplitView/components/AlignmentConnections.d.ts +9 -0
  60. package/esm/BreakpointSplitView/components/AlignmentConnections.js +108 -0
  61. package/esm/BreakpointSplitView/components/AlignmentConnections.js.map +1 -0
  62. package/esm/BreakpointSplitView/components/Breakends.d.ts +9 -0
  63. package/esm/BreakpointSplitView/components/Breakends.js +92 -0
  64. package/esm/BreakpointSplitView/components/Breakends.js.map +1 -0
  65. package/esm/BreakpointSplitView/components/BreakpointSplitView.d.ts +6 -0
  66. package/esm/BreakpointSplitView/components/BreakpointSplitView.js +61 -0
  67. package/esm/BreakpointSplitView/components/BreakpointSplitView.js.map +1 -0
  68. package/esm/BreakpointSplitView/components/ExportSvgDialog.d.ts +8 -0
  69. package/esm/BreakpointSplitView/components/ExportSvgDialog.js +58 -0
  70. package/esm/BreakpointSplitView/components/ExportSvgDialog.js.map +1 -0
  71. package/esm/BreakpointSplitView/components/Overlay.d.ts +9 -0
  72. package/esm/BreakpointSplitView/components/Overlay.js +18 -0
  73. package/esm/BreakpointSplitView/components/Overlay.js.map +1 -0
  74. package/esm/BreakpointSplitView/components/Translocations.d.ts +9 -0
  75. package/esm/BreakpointSplitView/components/Translocations.js +88 -0
  76. package/esm/BreakpointSplitView/components/Translocations.js.map +1 -0
  77. package/esm/BreakpointSplitView/components/util.d.ts +7 -0
  78. package/esm/BreakpointSplitView/components/util.js +107 -0
  79. package/esm/BreakpointSplitView/components/util.js.map +1 -0
  80. package/esm/BreakpointSplitView/index.d.ts +3 -0
  81. package/esm/BreakpointSplitView/index.js +15 -0
  82. package/esm/BreakpointSplitView/index.js.map +1 -0
  83. package/esm/BreakpointSplitView/model.d.ts +299 -0
  84. package/esm/BreakpointSplitView/model.js +216 -0
  85. package/esm/BreakpointSplitView/model.js.map +1 -0
  86. package/esm/BreakpointSplitView/svgcomponents/SVGBackground.d.ts +6 -0
  87. package/esm/BreakpointSplitView/svgcomponents/SVGBackground.js +7 -0
  88. package/esm/BreakpointSplitView/svgcomponents/SVGBackground.js.map +1 -0
  89. package/esm/BreakpointSplitView/svgcomponents/SVGBreakpointSplitView.d.ts +4 -0
  90. package/esm/BreakpointSplitView/svgcomponents/SVGBreakpointSplitView.js +76 -0
  91. package/esm/BreakpointSplitView/svgcomponents/SVGBreakpointSplitView.js.map +1 -0
  92. package/esm/BreakpointSplitView/util.d.ts +18 -0
  93. package/esm/BreakpointSplitView/util.js +49 -0
  94. package/esm/BreakpointSplitView/util.js.map +1 -0
  95. package/esm/index.d.ts +7 -0
  96. package/esm/index.js +15 -0
  97. package/esm/index.js.map +1 -0
  98. package/package.json +63 -0
  99. package/src/BreakpointAlignmentsFeatureDetail/BreakpointAlignmentsFeatureDetail.tsx +24 -0
  100. package/src/BreakpointAlignmentsFeatureDetail/index.ts +35 -0
  101. package/src/BreakpointSplitView/BreakpointSplitView.ts +100 -0
  102. package/src/BreakpointSplitView/components/AlignmentConnections.tsx +166 -0
  103. package/src/BreakpointSplitView/components/Breakends.tsx +141 -0
  104. package/src/BreakpointSplitView/components/BreakpointSplitView.tsx +95 -0
  105. package/src/BreakpointSplitView/components/ExportSvgDialog.tsx +149 -0
  106. package/src/BreakpointSplitView/components/Overlay.tsx +29 -0
  107. package/src/BreakpointSplitView/components/Translocations.tsx +147 -0
  108. package/src/BreakpointSplitView/components/util.ts +127 -0
  109. package/src/BreakpointSplitView/index.ts +17 -0
  110. package/src/BreakpointSplitView/model.ts +333 -0
  111. package/src/BreakpointSplitView/svgcomponents/SVGBackground.tsx +21 -0
  112. package/src/BreakpointSplitView/svgcomponents/SVGBreakpointSplitView.tsx +179 -0
  113. package/src/BreakpointSplitView/util.ts +89 -0
  114. package/src/index.test.ts +3 -0
  115. package/src/index.ts +15 -0
@@ -0,0 +1,299 @@
1
+ import React from 'react';
2
+ import { Instance } from 'mobx-state-tree';
3
+ import { LinearGenomeViewModel } from '@jbrowse/plugin-linear-genome-view';
4
+ import PluginManager from '@jbrowse/core/PluginManager';
5
+ import { Feature } from '@jbrowse/core/util';
6
+ export interface ExportSvgOptions {
7
+ rasterizeLayers?: boolean;
8
+ filename?: string;
9
+ Wrapper?: React.FC<any>;
10
+ fontSize?: number;
11
+ rulerHeight?: number;
12
+ textHeight?: number;
13
+ paddingHeight?: number;
14
+ headerHeight?: number;
15
+ cytobandHeight?: number;
16
+ trackLabels?: string;
17
+ themeName?: string;
18
+ }
19
+ type LGV = LinearGenomeViewModel;
20
+ export interface Breakend {
21
+ MateDirection: string;
22
+ Join: string;
23
+ Replacement: string;
24
+ MatePosition: string;
25
+ }
26
+ export type LayoutRecord = [number, number, number, number];
27
+ export default function stateModelFactory(pluginManager: PluginManager): import("mobx-state-tree").IModelType<{
28
+ id: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
29
+ displayName: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<string>>;
30
+ minimized: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
31
+ } & {
32
+ type: import("mobx-state-tree").ISimpleType<"BreakpointSplitView">;
33
+ height: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<number>, [undefined]>;
34
+ trackSelectorType: import("mobx-state-tree").IType<string | undefined, string, string>;
35
+ showIntraviewLinks: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
36
+ linkViews: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
37
+ interactToggled: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
38
+ views: import("mobx-state-tree").IArrayType<import("mobx-state-tree").IModelType<{
39
+ id: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
40
+ displayName: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<string>>;
41
+ minimized: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
42
+ } & {
43
+ id: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
44
+ type: import("mobx-state-tree").IType<string | undefined, string, string>;
45
+ offsetPx: import("mobx-state-tree").IType<number | undefined, number, number>;
46
+ bpPerPx: import("mobx-state-tree").IType<number | undefined, number, number>;
47
+ displayedRegions: import("mobx-state-tree").IArrayType<import("mobx-state-tree").IModelType<{
48
+ refName: import("mobx-state-tree").ISimpleType<string>;
49
+ start: import("mobx-state-tree").ISimpleType<number>;
50
+ end: import("mobx-state-tree").ISimpleType<number>;
51
+ reversed: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>, [undefined]>;
52
+ } & {
53
+ assemblyName: import("mobx-state-tree").ISimpleType<string>;
54
+ }, {
55
+ setRefName(newRefName: string): void;
56
+ }, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>>;
57
+ tracks: import("mobx-state-tree").IArrayType<import("mobx-state-tree").IAnyType>;
58
+ hideHeader: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
59
+ hideHeaderOverview: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
60
+ hideNoTracksActive: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
61
+ trackSelectorType: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
62
+ trackLabels: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
63
+ showCenterLine: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>, [undefined]>;
64
+ showCytobandsSetting: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>, [undefined]>;
65
+ showGridlines: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
66
+ }, {
67
+ width: number;
68
+ } & {
69
+ menuItems(): import("@jbrowse/core/ui").MenuItem[];
70
+ } & {
71
+ setDisplayName(name: string): void;
72
+ setWidth(newWidth: number): void;
73
+ setMinimized(flag: boolean): void;
74
+ } & {
75
+ volatileWidth: number | undefined;
76
+ minimumBlockWidth: number;
77
+ draggingTrackId: string | undefined;
78
+ volatileError: Error | undefined;
79
+ afterDisplayedRegionsSetCallbacks: Function[];
80
+ scaleFactor: number;
81
+ trackRefs: {
82
+ [key: string]: HTMLDivElement;
83
+ };
84
+ coarseDynamicBlocks: import("@jbrowse/core/util/blockTypes").BaseBlock[];
85
+ coarseTotalBp: number;
86
+ leftOffset: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").BpOffset | undefined;
87
+ rightOffset: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").BpOffset | undefined;
88
+ } & {
89
+ readonly width: number;
90
+ readonly interRegionPaddingWidth: number;
91
+ readonly assemblyNames: string[];
92
+ } & {
93
+ MiniControlsComponent(): React.FC<any>;
94
+ HeaderComponent(): React.FC<any>;
95
+ readonly assemblyErrors: string;
96
+ readonly assembliesInitialized: boolean;
97
+ readonly initialized: boolean;
98
+ readonly hasDisplayedRegions: boolean;
99
+ readonly scaleBarHeight: number;
100
+ readonly headerHeight: number;
101
+ readonly trackHeights: number;
102
+ readonly trackHeightsWithResizeHandles: number;
103
+ readonly height: number;
104
+ readonly totalBp: number;
105
+ readonly maxBpPerPx: number;
106
+ readonly minBpPerPx: number;
107
+ readonly error: string | Error;
108
+ readonly maxOffset: number;
109
+ readonly minOffset: number;
110
+ readonly displayedRegionsTotalPx: number;
111
+ renderProps(): any;
112
+ searchScope(assemblyName: string): {
113
+ assemblyName: string;
114
+ includeAggregateIndexes: boolean;
115
+ tracks: import("mobx-state-tree").IMSTArray<import("mobx-state-tree").IAnyType> & import("mobx-state-tree").IStateTreeNode<import("mobx-state-tree").IArrayType<import("mobx-state-tree").IAnyType>>;
116
+ };
117
+ getTrack(id: string): any;
118
+ rankSearchResults(results: import("@jbrowse/core/TextSearch/BaseResults").default[]): import("@jbrowse/core/TextSearch/BaseResults").default[];
119
+ rewriteOnClicks(trackType: string, viewMenuActions: import("@jbrowse/core/ui").MenuItem[]): void;
120
+ readonly trackTypeActions: Map<string, import("@jbrowse/core/ui").MenuItem[]>;
121
+ } & {
122
+ setShowCytobands(flag: boolean): void;
123
+ setWidth(newWidth: number): void;
124
+ setError(error: Error | undefined): void;
125
+ toggleHeader(): void;
126
+ toggleHeaderOverview(): void;
127
+ toggleNoTracksActive(): void;
128
+ toggleShowGridlines(): void;
129
+ scrollTo(offsetPx: number): number;
130
+ zoomTo(bpPerPx: number, offset?: number, centerAtOffset?: boolean): number;
131
+ setOffsets(left?: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").BpOffset | undefined, right?: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").BpOffset | undefined): void;
132
+ setSearchResults(searchResults: import("@jbrowse/core/TextSearch/BaseResults").default[], searchQuery: string, assemblyName?: string | undefined): void;
133
+ setNewView(bpPerPx: number, offsetPx: number): void;
134
+ horizontallyFlip(): void;
135
+ showTrack(trackId: string, initialSnapshot?: {}, displayInitialSnapshot?: {}): any;
136
+ hideTrack(trackId: string): number;
137
+ } & {
138
+ moveTrack(movingId: string, targetId: string): void;
139
+ closeView(): void;
140
+ toggleTrack(trackId: string): void;
141
+ setTrackLabels(setting: "hidden" | "offset" | "overlapping"): void;
142
+ toggleCenterLine(): void;
143
+ setDisplayedRegions(regions: import("@jbrowse/core/util").Region[]): void;
144
+ activateTrackSelector(): import("@jbrowse/core/util").Widget;
145
+ getSelectedRegions(leftOffset?: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").BpOffset | undefined, rightOffset?: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").BpOffset | undefined): {
146
+ start: number;
147
+ end: number;
148
+ regionNumber?: number | undefined;
149
+ reversed?: boolean | undefined;
150
+ refName: string;
151
+ assemblyName: string;
152
+ key: string;
153
+ offsetPx: number;
154
+ widthPx: number;
155
+ variant?: string | undefined;
156
+ isLeftEndOfDisplayedRegion?: boolean | undefined;
157
+ }[];
158
+ afterDisplayedRegionsSet(cb: Function): void;
159
+ horizontalScroll(distance: number): number;
160
+ center(): void;
161
+ showAllRegions(): void;
162
+ showAllRegionsInAssembly(assemblyName?: string | undefined): void;
163
+ setDraggingTrackId(idx?: string | undefined): void;
164
+ setScaleFactor(factor: number): void;
165
+ clearView(): void;
166
+ exportSvg(opts?: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").ExportSvgOptions): Promise<void>;
167
+ } & {
168
+ slide: (viewWidths: number) => void;
169
+ } & {
170
+ zoom: (targetBpPerPx: number) => void;
171
+ } & {
172
+ readonly canShowCytobands: boolean;
173
+ readonly showCytobands: boolean;
174
+ readonly anyCytobandsExist: boolean;
175
+ readonly cytobandOffset: number;
176
+ } & {
177
+ menuItems(): import("@jbrowse/core/ui").MenuItem[];
178
+ } & {
179
+ readonly staticBlocks: import("@jbrowse/core/util/blockTypes").BlockSet;
180
+ readonly dynamicBlocks: import("@jbrowse/core/util/blockTypes").BlockSet;
181
+ readonly roundedDynamicBlocks: import("@jbrowse/core/util/blockTypes").BaseBlock[];
182
+ readonly visibleLocStrings: string;
183
+ readonly coarseVisibleLocStrings: string;
184
+ } & {
185
+ setCoarseDynamicBlocks(blocks: import("@jbrowse/core/util/blockTypes").BlockSet): void;
186
+ afterAttach(): void;
187
+ } & {
188
+ moveTo(start?: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").BpOffset | undefined, end?: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").BpOffset | undefined): void;
189
+ navToLocString(input: string, optAssemblyName?: string | undefined): Promise<void>;
190
+ navToLocations(parsedLocStrings: import("@jbrowse/core/util").ParsedLocString[], assemblyName?: string | undefined): Promise<void>;
191
+ navTo(query: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").NavLocation): void;
192
+ navToMultiple(locations: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").NavLocation[]): void;
193
+ } & {
194
+ rubberBandMenuItems(): import("@jbrowse/core/ui").MenuItem[];
195
+ bpToPx({ refName, coord, regionNumber, }: {
196
+ refName: string;
197
+ coord: number;
198
+ regionNumber?: number | undefined;
199
+ }): {
200
+ index: number;
201
+ offsetPx: number;
202
+ } | undefined;
203
+ centerAt(coord: number, refName: string, regionNumber: number): void;
204
+ pxToBp(px: number): {
205
+ coord: number;
206
+ index: number;
207
+ refName: string;
208
+ oob: boolean;
209
+ assemblyName: string;
210
+ offset: number;
211
+ start: number;
212
+ end: number;
213
+ reversed: boolean;
214
+ };
215
+ readonly centerLineInfo: {
216
+ coord: number;
217
+ index: number;
218
+ refName: string;
219
+ oob: boolean;
220
+ assemblyName: string;
221
+ offset: number;
222
+ start: number;
223
+ end: number;
224
+ reversed: boolean;
225
+ } | undefined;
226
+ }, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>>;
227
+ }, {
228
+ width: number;
229
+ } & {
230
+ menuItems(): import("@jbrowse/core/ui").MenuItem[];
231
+ } & {
232
+ setDisplayName(name: string): void;
233
+ setWidth(newWidth: number): void;
234
+ setMinimized(flag: boolean): void;
235
+ } & {
236
+ width: number;
237
+ matchedTrackFeatures: {
238
+ [key: string]: Feature[][];
239
+ };
240
+ } & {
241
+ /**
242
+ * #method
243
+ * creates an svg export and save using FileSaver
244
+ */
245
+ exportSvg(opts?: ExportSvgOptions): Promise<void>;
246
+ } & {
247
+ readonly matchedTracks: any[];
248
+ getMatchedTracks(trackConfigId: string): any[];
249
+ hasTranslocations(trackConfigId: string): Feature | undefined;
250
+ getTrackFeatures(trackConfigId: string): Map<string, Feature>;
251
+ getMatchedFeaturesInLayout(trackConfigId: string, features: Feature[][]): {
252
+ feature: Feature;
253
+ layout: LayoutRecord;
254
+ level: number;
255
+ }[][];
256
+ } & {
257
+ afterAttach(): void;
258
+ onSubviewAction(actionName: string, path: string, args?: unknown[]): void;
259
+ setWidth(newWidth: number): void;
260
+ removeView(view: LGV): void;
261
+ closeView(): void;
262
+ toggleInteract(): void;
263
+ toggleIntraviewLinks(): void;
264
+ toggleLinkViews(): void;
265
+ setMatchedTrackFeatures(obj: {
266
+ [key: string]: Feature[][];
267
+ }): void;
268
+ } & {
269
+ afterAttach(): void;
270
+ menuItems(): ({
271
+ label: string;
272
+ subMenu: import("@jbrowse/core/ui").MenuItem[];
273
+ } | {
274
+ label: string;
275
+ type: string;
276
+ checked: boolean;
277
+ onClick: () => void;
278
+ icon?: undefined;
279
+ } | {
280
+ label: string;
281
+ type: string;
282
+ icon: import("@mui/material/OverridableComponent").OverridableComponent<import("@mui/material").SvgIconTypeMap<{}, "svg">> & {
283
+ muiName: string;
284
+ };
285
+ checked: boolean;
286
+ onClick: () => void;
287
+ } | {
288
+ label: string;
289
+ icon: import("@mui/material/OverridableComponent").OverridableComponent<import("@mui/material").SvgIconTypeMap<{}, "svg">> & {
290
+ muiName: string;
291
+ };
292
+ onClick: () => void;
293
+ type?: undefined;
294
+ checked?: undefined;
295
+ })[];
296
+ }, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>;
297
+ export type BreakpointViewStateModel = ReturnType<typeof stateModelFactory>;
298
+ export type BreakpointViewModel = Instance<BreakpointViewStateModel>;
299
+ export {};
@@ -0,0 +1,216 @@
1
+ import { lazy } from 'react';
2
+ import { types, getParent, onAction, addDisposer, getPath, } from 'mobx-state-tree';
3
+ import { autorun } from 'mobx';
4
+ import { saveAs } from 'file-saver';
5
+ import { BaseViewModel } from '@jbrowse/core/pluggableElementTypes/models';
6
+ import { getSession, notEmpty } from '@jbrowse/core/util';
7
+ import { getConf } from '@jbrowse/core/configuration';
8
+ // icons
9
+ import PhotoCamera from '@mui/icons-material/PhotoCamera';
10
+ import LinkIcon from '@mui/icons-material/Link';
11
+ // locals
12
+ import { intersect } from './util';
13
+ // lazies
14
+ const ExportSvgDialog = lazy(() => import('./components/ExportSvgDialog'));
15
+ function calc(track, feat) {
16
+ return track.displays[0].searchFeatureByID(feat.id());
17
+ }
18
+ async function getBlockFeatures(model, track) {
19
+ const { views } = model;
20
+ const { rpcManager, assemblyManager } = getSession(model);
21
+ const assemblyName = model.views[0].assemblyNames[0];
22
+ const assembly = await assemblyManager.waitForAssembly(assemblyName);
23
+ if (!assembly) {
24
+ return undefined; // throw new Error(`assembly not found: "${assemblyName}"`)
25
+ }
26
+ const sessionId = track.configuration.trackId;
27
+ return Promise.all(views.map(async (view) => (await rpcManager.call(sessionId, 'CoreGetFeatures', {
28
+ adapterConfig: getConf(track, ['adapter']),
29
+ sessionId,
30
+ regions: view.staticBlocks.contentBlocks,
31
+ })).flat()));
32
+ }
33
+ export default function stateModelFactory(pluginManager) {
34
+ const minHeight = 40;
35
+ const defaultHeight = 400;
36
+ const model = types
37
+ .model('BreakpointSplitView', {
38
+ type: types.literal('BreakpointSplitView'),
39
+ height: types.optional(types.refinement('viewHeight', types.number, (n) => n >= minHeight), defaultHeight),
40
+ trackSelectorType: 'hierarchical',
41
+ showIntraviewLinks: true,
42
+ linkViews: false,
43
+ interactToggled: false,
44
+ views: types.array(pluginManager.getViewType('LinearGenomeView')
45
+ .stateModel),
46
+ })
47
+ .volatile(() => ({
48
+ width: 800,
49
+ matchedTrackFeatures: {},
50
+ }))
51
+ .views(self => ({
52
+ /**
53
+ * #method
54
+ * creates an svg export and save using FileSaver
55
+ */
56
+ async exportSvg(opts = {}) {
57
+ const { renderToSvg } = await import('./svgcomponents/SVGBreakpointSplitView');
58
+ const html = await renderToSvg(self, opts);
59
+ const blob = new Blob([html], { type: 'image/svg+xml' });
60
+ saveAs(blob, opts.filename || 'image.svg');
61
+ },
62
+ }))
63
+ .views(self => ({
64
+ // Find all track ids that match across multiple views
65
+ get matchedTracks() {
66
+ return intersect(elt => elt.configuration.trackId, ...self.views.map(view => view.tracks));
67
+ },
68
+ // Get tracks with a given trackId across multiple views
69
+ getMatchedTracks(trackConfigId) {
70
+ return self.views
71
+ .map(view => view.getTrack(trackConfigId))
72
+ .filter(f => !!f);
73
+ },
74
+ // Translocation features are handled differently
75
+ // since they do not have a mate e.g. they are one sided
76
+ hasTranslocations(trackConfigId) {
77
+ return [...this.getTrackFeatures(trackConfigId).values()].find(f => f.get('type') === 'translocation');
78
+ },
79
+ // Get a composite map of featureId->feature map for a track across
80
+ // multiple views
81
+ getTrackFeatures(trackConfigId) {
82
+ var _a;
83
+ return new Map((_a = self.matchedTrackFeatures[trackConfigId]) === null || _a === void 0 ? void 0 : _a.flat().map(f => [f.id(), f]));
84
+ },
85
+ getMatchedFeaturesInLayout(trackConfigId, features) {
86
+ // use reverse to search the second track first
87
+ const tracks = this.getMatchedTracks(trackConfigId);
88
+ return features.map(c => c
89
+ .map(feature => {
90
+ const level = tracks.findIndex(track => calc(track, feature));
91
+ return level !== -1
92
+ ? {
93
+ feature,
94
+ layout: calc(tracks[level], feature),
95
+ level,
96
+ }
97
+ : undefined;
98
+ })
99
+ .filter(notEmpty));
100
+ },
101
+ }))
102
+ .actions(self => ({
103
+ afterAttach() {
104
+ addDisposer(self, onAction(self, ({ name, path, args, }) => {
105
+ if (self.linkViews) {
106
+ const actions = [
107
+ 'horizontalScroll',
108
+ 'zoomTo',
109
+ 'setScaleFactor',
110
+ 'showTrack',
111
+ 'toggleTrack',
112
+ 'hideTrack',
113
+ 'setTrackLabels',
114
+ 'toggleCenterLine',
115
+ ];
116
+ if (actions.includes(name) && path) {
117
+ this.onSubviewAction(name, path, args);
118
+ }
119
+ }
120
+ }));
121
+ },
122
+ onSubviewAction(actionName, path, args) {
123
+ self.views.forEach(view => {
124
+ const ret = getPath(view);
125
+ if (ret.lastIndexOf(path) !== ret.length - path.length) {
126
+ // @ts-ignore
127
+ view[actionName](args === null || args === void 0 ? void 0 : args[0]);
128
+ }
129
+ });
130
+ },
131
+ setWidth(newWidth) {
132
+ self.width = newWidth;
133
+ self.views.forEach(v => v.setWidth(newWidth));
134
+ },
135
+ removeView(view) {
136
+ self.views.remove(view);
137
+ },
138
+ closeView() {
139
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
140
+ getParent(self, 2).removeView(self);
141
+ },
142
+ toggleInteract() {
143
+ self.interactToggled = !self.interactToggled;
144
+ },
145
+ toggleIntraviewLinks() {
146
+ self.showIntraviewLinks = !self.showIntraviewLinks;
147
+ },
148
+ toggleLinkViews() {
149
+ self.linkViews = !self.linkViews;
150
+ },
151
+ setMatchedTrackFeatures(obj) {
152
+ self.matchedTrackFeatures = obj;
153
+ },
154
+ }))
155
+ .actions(self => ({
156
+ afterAttach() {
157
+ addDisposer(self, autorun(async () => {
158
+ try {
159
+ if (!self.views.every(view => view.initialized)) {
160
+ return;
161
+ }
162
+ self.setMatchedTrackFeatures(Object.fromEntries(await Promise.all(self.matchedTracks.map(async (track) => [
163
+ track.configuration.trackId,
164
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
165
+ await getBlockFeatures(self, track),
166
+ ]))));
167
+ }
168
+ catch (e) {
169
+ console.error(e);
170
+ getSession(self).notify(`${e}`, 'error');
171
+ }
172
+ }));
173
+ },
174
+ menuItems() {
175
+ return [
176
+ ...self.views
177
+ .map((view, idx) => { var _a; return [idx, (_a = view.menuItems) === null || _a === void 0 ? void 0 : _a.call(view)]; })
178
+ .filter(f => !!f[1])
179
+ .map(f => ({ label: `View ${f[0] + 1} Menu`, subMenu: f[1] })),
180
+ {
181
+ label: 'Show intra-view links',
182
+ type: 'checkbox',
183
+ checked: self.showIntraviewLinks,
184
+ onClick: () => self.toggleIntraviewLinks(),
185
+ },
186
+ {
187
+ label: 'Allow clicking alignment squiggles?',
188
+ type: 'checkbox',
189
+ checked: self.interactToggled,
190
+ onClick: () => self.toggleInteract(),
191
+ },
192
+ {
193
+ label: 'Link views',
194
+ type: 'checkbox',
195
+ icon: LinkIcon,
196
+ checked: self.linkViews,
197
+ onClick: () => {
198
+ self.toggleLinkViews();
199
+ },
200
+ },
201
+ {
202
+ label: 'Export SVG',
203
+ icon: PhotoCamera,
204
+ onClick: () => {
205
+ getSession(self).queueDialog(handleClose => [
206
+ ExportSvgDialog,
207
+ { model: self, handleClose },
208
+ ]);
209
+ },
210
+ },
211
+ ];
212
+ },
213
+ }));
214
+ return types.compose(BaseViewModel, model);
215
+ }
216
+ //# sourceMappingURL=model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/BreakpointSplitView/model.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import React from 'react';
2
+ export default function SVGBackground({ width, height, shift, }: {
3
+ width: number;
4
+ height: number;
5
+ shift: number;
6
+ }): React.JSX.Element;
@@ -0,0 +1,7 @@
1
+ import React from 'react';
2
+ import { useTheme } from '@mui/material';
3
+ export default function SVGBackground({ width, height, shift, }) {
4
+ const theme = useTheme();
5
+ return (React.createElement("rect", { width: width + shift * 2, height: height, fill: theme.palette.background.default }));
6
+ }
7
+ //# sourceMappingURL=SVGBackground.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SVGBackground.js","sourceRoot":"","sources":["../../../src/BreakpointSplitView/svgcomponents/SVGBackground.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAExC,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,EACpC,KAAK,EACL,MAAM,EACN,KAAK,GAKN;IACC,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAA;IACxB,OAAO,CACL,8BACE,KAAK,EAAE,KAAK,GAAG,KAAK,GAAG,CAAC,EACxB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,GACtC,CACH,CAAA;AACH,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { ExportSvgOptions, BreakpointViewModel } from '../model';
2
+ type BSV = BreakpointViewModel;
3
+ export declare function renderToSvg(model: BSV, opts: ExportSvgOptions): Promise<string>;
4
+ export {};
@@ -0,0 +1,76 @@
1
+ import React from 'react';
2
+ import { renderToStaticMarkup } from 'react-dom/server';
3
+ import { when } from 'mobx';
4
+ import { getSession, max, measureText, sum, } from '@jbrowse/core/util';
5
+ import { ThemeProvider } from '@mui/material';
6
+ import { createJBrowseTheme } from '@jbrowse/core/ui';
7
+ // locals
8
+ import { SVGTracks, SVGRuler, totalHeight, } from '@jbrowse/plugin-linear-genome-view';
9
+ // locals
10
+ import SVGBackground from './SVGBackground';
11
+ import { getTrackName } from '@jbrowse/core/util/tracks';
12
+ import Overlay from '../components/Overlay';
13
+ function getTrackNameMaxLen(views, fontSize, session) {
14
+ return max(views.flatMap(view => view.tracks.map(t => measureText(getTrackName(t.configuration, session), fontSize))), 0);
15
+ }
16
+ function getTrackOffsets(view, textOffset, extra = 0) {
17
+ const offsets = {};
18
+ let curr = textOffset;
19
+ for (let i = 0; i < view.tracks.length; i++) {
20
+ const track = view.tracks[i];
21
+ offsets[track.configuration.trackId] = curr + extra;
22
+ curr += track.displays[0].height + textOffset;
23
+ }
24
+ return offsets;
25
+ }
26
+ // render LGV to SVG
27
+ export async function renderToSvg(model, opts) {
28
+ var _a;
29
+ const { textHeight = 18, headerHeight = 30, rulerHeight = 30, fontSize = 13, trackLabels = 'offset',
30
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
31
+ Wrapper = ({ children }) => React.createElement(React.Fragment, null, children), themeName = 'default', } = opts;
32
+ const session = getSession(model);
33
+ const theme = (_a = session.allThemes) === null || _a === void 0 ? void 0 : _a.call(session)[themeName];
34
+ const { width, views } = model;
35
+ const shift = 50;
36
+ const offset = headerHeight + rulerHeight;
37
+ const heights = views.map(v => totalHeight(v.tracks, textHeight, trackLabels) + offset);
38
+ const totalHeightSvg = sum(heights) + 100;
39
+ const displayResults = await Promise.all(views.map(async (view) => ({
40
+ view,
41
+ data: await Promise.all(view.tracks.map(async (track) => {
42
+ const d = track.displays[0];
43
+ await when(() => (d.ready !== undefined ? d.ready : true));
44
+ return { track, result: await d.renderSvg({ ...opts, theme }) };
45
+ })),
46
+ })));
47
+ const trackLabelMaxLen = getTrackNameMaxLen(views, fontSize, session) + 40;
48
+ const trackLabelOffset = trackLabels === 'left' ? trackLabelMaxLen : 0;
49
+ const textOffset = trackLabels === 'offset' ? textHeight : 0;
50
+ const trackOffsets = [
51
+ getTrackOffsets(views[0], textOffset, fontSize + offset),
52
+ getTrackOffsets(views[1], textOffset, fontSize + heights[0] + offset),
53
+ ];
54
+ const w = width + trackLabelOffset;
55
+ const t = createJBrowseTheme(theme);
56
+ // the xlink namespace is used for rendering <image> tag
57
+ return renderToStaticMarkup(React.createElement(ThemeProvider, { theme: t },
58
+ React.createElement(Wrapper, null,
59
+ React.createElement("svg", { width: width, height: totalHeightSvg, xmlns: "http://www.w3.org/2000/svg", xmlnsXlink: "http://www.w3.org/1999/xlink", viewBox: [0, 0, w + shift * 2, totalHeightSvg].toString() },
60
+ React.createElement(SVGBackground, { width: w, height: totalHeightSvg, shift: shift }),
61
+ React.createElement("g", { transform: `translate(${shift} ${fontSize})` },
62
+ React.createElement("g", { transform: `translate(${trackLabelOffset})` },
63
+ React.createElement("text", { x: 0, fontSize: fontSize, fill: t.palette.text.primary }, views[0].assemblyNames.join(', ')),
64
+ React.createElement(SVGRuler, { model: displayResults[0].view, fontSize: fontSize })),
65
+ React.createElement(SVGTracks, { textHeight: textHeight, trackLabels: trackLabels, fontSize: fontSize, model: displayResults[0].view, displayResults: displayResults[0].data, offset: offset, trackLabelOffset: trackLabelOffset })),
66
+ React.createElement("g", { transform: `translate(${shift} ${fontSize + heights[0]})` },
67
+ React.createElement("g", { transform: `translate(${trackLabelOffset})` },
68
+ React.createElement("text", { x: 0, fontSize: fontSize, fill: t.palette.text.primary }, views[1].assemblyNames.join(', ')),
69
+ React.createElement(SVGRuler, { model: displayResults[1].view, fontSize: fontSize })),
70
+ React.createElement(SVGTracks, { textHeight: textHeight, trackLabels: trackLabels, fontSize: fontSize, model: displayResults[1].view, displayResults: displayResults[1].data, offset: offset, trackLabelOffset: trackLabelOffset })),
71
+ React.createElement("defs", null,
72
+ React.createElement("clipPath", { id: "clip-bsv" },
73
+ React.createElement("rect", { x: 0, y: 0, width: width, height: totalHeightSvg }))),
74
+ React.createElement("g", { transform: `translate(${trackLabelOffset + shift})`, clipPath: "url(#clip-bsv)" }, model.matchedTracks.map(track => (React.createElement(Overlay, { parentRef: { current: null }, key: track.configuration.trackId, model: model, trackId: track.configuration.trackId, getTrackYPosOverride: (id, level) => trackOffsets[level][id] }))))))));
75
+ }
76
+ //# sourceMappingURL=SVGBreakpointSplitView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SVGBreakpointSplitView.js","sourceRoot":"","sources":["../../../src/BreakpointSplitView/svgcomponents/SVGBreakpointSplitView.tsx"],"names":[],"mappings":"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"}