@jbrowse/plugin-linear-comparative-view 2.15.4 → 2.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (101) hide show
  1. package/dist/LaunchLinearSyntenyView.js +41 -11
  2. package/dist/LinearComparativeDisplay/stateModelFactory.d.ts +14 -9
  3. package/dist/LinearComparativeDisplay/stateModelFactory.js +8 -9
  4. package/dist/LinearComparativeView/components/Header.d.ts +2 -3
  5. package/dist/LinearComparativeView/components/Header.js +72 -62
  6. package/dist/LinearComparativeView/components/HeaderSearchBoxes.d.ts +6 -0
  7. package/dist/LinearComparativeView/components/HeaderSearchBoxes.js +34 -0
  8. package/dist/LinearComparativeView/components/LinearComparativeRenderArea.d.ts +6 -0
  9. package/dist/LinearComparativeView/components/LinearComparativeRenderArea.js +61 -0
  10. package/dist/LinearComparativeView/components/LinearComparativeView.d.ts +2 -4
  11. package/dist/LinearComparativeView/components/LinearComparativeView.js +3 -67
  12. package/dist/LinearComparativeView/components/Rubberband.js +1 -1
  13. package/dist/LinearComparativeView/index.js +3 -0
  14. package/dist/LinearComparativeView/model.d.ts +265 -12
  15. package/dist/LinearComparativeView/model.js +45 -75
  16. package/dist/LinearSyntenyDisplay/afterAttach.js +5 -3
  17. package/dist/LinearSyntenyDisplay/components/LinearSyntenyRendering.js +32 -24
  18. package/dist/LinearSyntenyDisplay/components/SyntenyContextMenu.js +12 -6
  19. package/dist/LinearSyntenyDisplay/components/util.d.ts +2 -1
  20. package/dist/LinearSyntenyDisplay/components/util.js +5 -5
  21. package/dist/LinearSyntenyDisplay/drawSynteny.d.ts +1 -1
  22. package/dist/LinearSyntenyDisplay/drawSynteny.js +28 -22
  23. package/dist/LinearSyntenyDisplay/index.js +1 -1
  24. package/dist/LinearSyntenyDisplay/model.d.ts +12 -11
  25. package/dist/LinearSyntenyDisplay/model.js +7 -0
  26. package/dist/LinearSyntenyView/components/ImportForm/{ImportCustomTrack.d.ts → AddCustomTrack.d.ts} +2 -3
  27. package/dist/LinearSyntenyView/components/ImportForm/{ImportCustomTrack.js → AddCustomTrack.js} +3 -3
  28. package/dist/LinearSyntenyView/components/ImportForm/LinearSyntenyImportForm.js +195 -0
  29. package/dist/LinearSyntenyView/components/ImportForm/Spacer.d.ts +2 -0
  30. package/dist/LinearSyntenyView/components/ImportForm/Spacer.js +10 -0
  31. package/dist/LinearSyntenyView/components/ImportForm/TrackSelector.d.ts +10 -0
  32. package/dist/LinearSyntenyView/components/ImportForm/{ImportSyntenyTrackSelector.js → TrackSelector.js} +15 -20
  33. package/dist/LinearSyntenyView/components/ImportForm/TrackSelectorUtil.d.ts +14 -0
  34. package/dist/LinearSyntenyView/components/ImportForm/TrackSelectorUtil.js +52 -0
  35. package/dist/LinearSyntenyView/components/LinearSyntenyView.js +3 -3
  36. package/dist/LinearSyntenyView/index.js +1 -1
  37. package/dist/LinearSyntenyView/model.d.ts +267 -9
  38. package/dist/LinearSyntenyView/model.js +2 -2
  39. package/dist/LinearSyntenyView/svgcomponents/SVGLinearGenomeView.d.ts +12 -0
  40. package/dist/LinearSyntenyView/svgcomponents/SVGLinearGenomeView.js +19 -0
  41. package/dist/LinearSyntenyView/svgcomponents/SVGLinearSyntenyView.d.ts +1 -3
  42. package/dist/LinearSyntenyView/svgcomponents/SVGLinearSyntenyView.js +36 -27
  43. package/dist/LinearSyntenyViewHelper/index.d.ts +2 -0
  44. package/dist/LinearSyntenyViewHelper/index.js +25 -0
  45. package/dist/LinearSyntenyViewHelper/stateModelFactory.d.ts +30 -0
  46. package/dist/LinearSyntenyViewHelper/stateModelFactory.js +105 -0
  47. package/dist/index.js +2 -0
  48. package/esm/LaunchLinearSyntenyView.js +41 -11
  49. package/esm/LinearComparativeDisplay/stateModelFactory.d.ts +14 -9
  50. package/esm/LinearComparativeDisplay/stateModelFactory.js +9 -10
  51. package/esm/LinearComparativeView/components/Header.d.ts +2 -3
  52. package/esm/LinearComparativeView/components/Header.js +73 -63
  53. package/esm/LinearComparativeView/components/HeaderSearchBoxes.d.ts +6 -0
  54. package/esm/LinearComparativeView/components/HeaderSearchBoxes.js +29 -0
  55. package/esm/LinearComparativeView/components/LinearComparativeRenderArea.d.ts +6 -0
  56. package/esm/LinearComparativeView/components/LinearComparativeRenderArea.js +56 -0
  57. package/esm/LinearComparativeView/components/LinearComparativeView.d.ts +2 -4
  58. package/esm/LinearComparativeView/components/LinearComparativeView.js +3 -67
  59. package/esm/LinearComparativeView/components/Rubberband.js +1 -1
  60. package/esm/LinearComparativeView/index.js +3 -0
  61. package/esm/LinearComparativeView/model.d.ts +265 -12
  62. package/esm/LinearComparativeView/model.js +47 -77
  63. package/esm/LinearSyntenyDisplay/afterAttach.js +6 -4
  64. package/esm/LinearSyntenyDisplay/components/LinearSyntenyRendering.js +33 -25
  65. package/esm/LinearSyntenyDisplay/components/SyntenyContextMenu.js +12 -6
  66. package/esm/LinearSyntenyDisplay/components/util.d.ts +2 -1
  67. package/esm/LinearSyntenyDisplay/components/util.js +5 -5
  68. package/esm/LinearSyntenyDisplay/drawSynteny.d.ts +1 -1
  69. package/esm/LinearSyntenyDisplay/drawSynteny.js +28 -22
  70. package/esm/LinearSyntenyDisplay/index.js +1 -1
  71. package/esm/LinearSyntenyDisplay/model.d.ts +12 -11
  72. package/esm/LinearSyntenyDisplay/model.js +8 -1
  73. package/esm/LinearSyntenyView/components/ImportForm/{ImportCustomTrack.d.ts → AddCustomTrack.d.ts} +2 -3
  74. package/esm/LinearSyntenyView/components/ImportForm/{ImportCustomTrack.js → AddCustomTrack.js} +3 -3
  75. package/esm/LinearSyntenyView/components/ImportForm/LinearSyntenyImportForm.js +167 -0
  76. package/esm/LinearSyntenyView/components/ImportForm/Spacer.d.ts +2 -0
  77. package/esm/LinearSyntenyView/components/ImportForm/Spacer.js +4 -0
  78. package/esm/LinearSyntenyView/components/ImportForm/TrackSelector.d.ts +10 -0
  79. package/esm/LinearSyntenyView/components/ImportForm/{ImportSyntenyTrackSelector.js → TrackSelector.js} +15 -20
  80. package/esm/LinearSyntenyView/components/ImportForm/TrackSelectorUtil.d.ts +14 -0
  81. package/esm/LinearSyntenyView/components/ImportForm/TrackSelectorUtil.js +23 -0
  82. package/esm/LinearSyntenyView/components/LinearSyntenyView.js +3 -3
  83. package/esm/LinearSyntenyView/index.js +1 -1
  84. package/esm/LinearSyntenyView/model.d.ts +267 -9
  85. package/esm/LinearSyntenyView/model.js +2 -2
  86. package/esm/LinearSyntenyView/svgcomponents/SVGLinearGenomeView.d.ts +12 -0
  87. package/esm/LinearSyntenyView/svgcomponents/SVGLinearGenomeView.js +13 -0
  88. package/esm/LinearSyntenyView/svgcomponents/SVGLinearSyntenyView.d.ts +1 -3
  89. package/esm/LinearSyntenyView/svgcomponents/SVGLinearSyntenyView.js +38 -29
  90. package/esm/LinearSyntenyViewHelper/index.d.ts +2 -0
  91. package/esm/LinearSyntenyViewHelper/index.js +19 -0
  92. package/esm/LinearSyntenyViewHelper/stateModelFactory.d.ts +30 -0
  93. package/esm/LinearSyntenyViewHelper/stateModelFactory.js +102 -0
  94. package/esm/index.js +2 -0
  95. package/package.json +2 -2
  96. package/dist/LinearSyntenyView/components/ImportForm/ImportSyntenyTrackSelector.d.ts +0 -9
  97. package/dist/LinearSyntenyView/components/ImportForm/index.js +0 -138
  98. package/esm/LinearSyntenyView/components/ImportForm/ImportSyntenyTrackSelector.d.ts +0 -9
  99. package/esm/LinearSyntenyView/components/ImportForm/index.js +0 -110
  100. /package/dist/LinearSyntenyView/components/ImportForm/{index.d.ts → LinearSyntenyImportForm.d.ts} +0 -0
  101. /package/esm/LinearSyntenyView/components/ImportForm/{index.d.ts → LinearSyntenyImportForm.d.ts} +0 -0
@@ -17,8 +17,20 @@ declare function stateModelFactory(pluginManager: PluginManager): import("mobx-s
17
17
  trackSelectorType: import("mobx-state-tree").IType<string | undefined, string, string>;
18
18
  showIntraviewLinks: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
19
19
  interactToggled: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
20
- middleComparativeHeight: import("mobx-state-tree").IType<number | undefined, number, number>;
21
- tracks: import("mobx-state-tree").IArrayType<import("mobx-state-tree").IAnyType>;
20
+ levels: import("mobx-state-tree").IArrayType<import("mobx-state-tree").IModelType<{
21
+ id: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
22
+ type: import("mobx-state-tree").IType<string | undefined, string, string>;
23
+ tracks: import("mobx-state-tree").IArrayType<import("mobx-state-tree").IAnyType>;
24
+ height: import("mobx-state-tree").IType<number | undefined, number, number>;
25
+ level: import("mobx-state-tree").ISimpleType<number>;
26
+ }, {
27
+ setHeight(n: number): number;
28
+ showTrack(trackId: string, initialSnapshot?: {}): void;
29
+ hideTrack(trackId: string): number;
30
+ toggleTrack(trackId: string): boolean;
31
+ } & {
32
+ readonly assemblyNames: (string | undefined)[];
33
+ }, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>>;
22
34
  views: import("mobx-state-tree").IArrayType<import("mobx-state-tree").IModelType<{
23
35
  id: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
24
36
  displayName: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<string>>;
@@ -254,10 +266,6 @@ declare function stateModelFactory(pluginManager: PluginManager): import("mobx-s
254
266
  */
255
267
  width: number | undefined;
256
268
  } & {
257
- /**
258
- * #getter
259
- */
260
- readonly highResolutionScaling: number;
261
269
  /**
262
270
  * #getter
263
271
  */
@@ -288,23 +296,23 @@ declare function stateModelFactory(pluginManager: PluginManager): import("mobx-s
288
296
  /**
289
297
  * #action
290
298
  */
291
- setMiddleComparativeHeight(n: number): number;
299
+ setLevelHeight(newHeight: number, level?: number): number;
292
300
  /**
293
301
  * #action
294
302
  */
295
- activateTrackSelector(): import("@jbrowse/core/util").Widget | undefined;
303
+ activateTrackSelector(level: number): import("@jbrowse/core/util").Widget;
296
304
  /**
297
305
  * #action
298
306
  */
299
- toggleTrack(trackId: string): boolean;
307
+ toggleTrack(trackId: string, level?: number): void;
300
308
  /**
301
309
  * #action
302
310
  */
303
- showTrack(trackId: string, initialSnapshot?: {}): void;
311
+ showTrack(trackId: string, level?: number, initialSnapshot?: {}): void;
304
312
  /**
305
313
  * #action
306
314
  */
307
- hideTrack(trackId: string): number;
315
+ hideTrack(trackId: string, level?: number): void;
308
316
  /**
309
317
  * #action
310
318
  */
@@ -334,7 +342,252 @@ declare function stateModelFactory(pluginManager: PluginManager): import("mobx-s
334
342
  }[];
335
343
  } & {
336
344
  afterAttach(): void;
337
- }, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>;
345
+ }, import("mobx-state-tree").ModelCreationType<import("mobx-state-tree/dist/internal").ExtractCFromProps<{
346
+ id: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
347
+ displayName: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<string>>;
348
+ minimized: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
349
+ } & {
350
+ id: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
351
+ type: import("mobx-state-tree").ISimpleType<"LinearComparativeView">;
352
+ trackSelectorType: import("mobx-state-tree").IType<string | undefined, string, string>;
353
+ showIntraviewLinks: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
354
+ interactToggled: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
355
+ levels: import("mobx-state-tree").IArrayType<import("mobx-state-tree").IModelType<{
356
+ id: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
357
+ type: import("mobx-state-tree").IType<string | undefined, string, string>;
358
+ tracks: import("mobx-state-tree").IArrayType<import("mobx-state-tree").IAnyType>;
359
+ height: import("mobx-state-tree").IType<number | undefined, number, number>;
360
+ level: import("mobx-state-tree").ISimpleType<number>;
361
+ }, {
362
+ setHeight(n: number): number;
363
+ showTrack(trackId: string, initialSnapshot?: {}): void;
364
+ hideTrack(trackId: string): number;
365
+ toggleTrack(trackId: string): boolean;
366
+ } & {
367
+ readonly assemblyNames: (string | undefined)[];
368
+ }, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>>;
369
+ views: import("mobx-state-tree").IArrayType<import("mobx-state-tree").IModelType<{
370
+ id: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
371
+ displayName: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<string>>;
372
+ minimized: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
373
+ } & {
374
+ id: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
375
+ type: import("mobx-state-tree").IType<string | undefined, string, string>;
376
+ offsetPx: import("mobx-state-tree").IType<number | undefined, number, number>;
377
+ bpPerPx: import("mobx-state-tree").IType<number | undefined, number, number>;
378
+ displayedRegions: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").IType<import("@jbrowse/core/util").Region[], import("@jbrowse/core/util").Region[], import("@jbrowse/core/util").Region[]>, [undefined]>;
379
+ tracks: import("mobx-state-tree").IArrayType<import("mobx-state-tree").IAnyType>;
380
+ hideHeader: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
381
+ hideHeaderOverview: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
382
+ hideNoTracksActive: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
383
+ trackSelectorType: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
384
+ showCenterLine: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>, [undefined]>;
385
+ showCytobandsSetting: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>, [undefined]>;
386
+ trackLabels: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
387
+ showGridlines: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
388
+ highlight: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").IArrayType<import("mobx-state-tree").IType<import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").HighlightType, import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").HighlightType, import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").HighlightType>>, [undefined]>;
389
+ colorByCDS: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>, [undefined]>;
390
+ showTrackOutlines: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>, [undefined]>;
391
+ }, {
392
+ width: number;
393
+ } & {
394
+ menuItems(): MenuItem[];
395
+ } & {
396
+ setDisplayName(name: string): void;
397
+ setWidth(newWidth: number): void;
398
+ setMinimized(flag: boolean): void;
399
+ } & {
400
+ volatileWidth: number | undefined;
401
+ minimumBlockWidth: number;
402
+ draggingTrackId: undefined | string;
403
+ volatileError: unknown;
404
+ afterDisplayedRegionsSetCallbacks: (() => void)[];
405
+ scaleFactor: number;
406
+ trackRefs: Record<string, HTMLDivElement>;
407
+ coarseDynamicBlocks: import("@jbrowse/core/util/blockTypes").BaseBlock[];
408
+ coarseTotalBp: number;
409
+ leftOffset: undefined | import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").BpOffset;
410
+ rightOffset: undefined | import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").BpOffset;
411
+ } & {
412
+ readonly trackLabelsSetting: any;
413
+ readonly width: number;
414
+ readonly interRegionPaddingWidth: number;
415
+ readonly assemblyNames: string[];
416
+ } & {
417
+ scaleBarDisplayPrefix(): string | undefined;
418
+ MiniControlsComponent(): React.FC<any>;
419
+ HeaderComponent(): React.FC<any>;
420
+ readonly assemblyErrors: string;
421
+ readonly assembliesInitialized: boolean;
422
+ readonly initialized: boolean;
423
+ readonly hasDisplayedRegions: boolean;
424
+ readonly scaleBarHeight: number;
425
+ readonly headerHeight: number;
426
+ readonly trackHeights: number;
427
+ readonly trackHeightsWithResizeHandles: number;
428
+ readonly height: number;
429
+ readonly totalBp: number;
430
+ readonly maxBpPerPx: number;
431
+ readonly minBpPerPx: number;
432
+ readonly error: unknown;
433
+ readonly maxOffset: number;
434
+ readonly minOffset: number;
435
+ readonly displayedRegionsTotalPx: number;
436
+ renderProps(): any;
437
+ searchScope(assemblyName: string): {
438
+ assemblyName: string;
439
+ includeAggregateIndexes: boolean;
440
+ 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>>;
441
+ };
442
+ getTrack(id: string): any;
443
+ rankSearchResults(results: import("@jbrowse/core/TextSearch/BaseResults").default[]): import("@jbrowse/core/TextSearch/BaseResults").default[];
444
+ rewriteOnClicks(trackType: string, viewMenuActions: MenuItem[]): void;
445
+ readonly trackTypeActions: Map<string, MenuItem[]>;
446
+ } & {
447
+ setShowTrackOutlines(arg: boolean): void;
448
+ setColorByCDS(flag: boolean): void;
449
+ setShowCytobands(flag: boolean): void;
450
+ setWidth(newWidth: number): void;
451
+ setError(error: unknown): void;
452
+ setHideHeader(b: boolean): void;
453
+ setHideHeaderOverview(b: boolean): void;
454
+ setHideNoTracksActive(b: boolean): void;
455
+ setShowGridlines(b: boolean): void;
456
+ addToHighlights(highlight: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").HighlightType): void;
457
+ setHighlight(highlight?: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").HighlightType[]): void;
458
+ removeHighlight(highlight: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").HighlightType): void;
459
+ scrollTo(offsetPx: number): number;
460
+ zoomTo(bpPerPx: number, offset?: number, centerAtOffset?: boolean): number;
461
+ setOffsets(left?: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").BpOffset, right?: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").BpOffset): void;
462
+ setSearchResults(searchResults: import("@jbrowse/core/TextSearch/BaseResults").default[], searchQuery: string, assemblyName?: string): void;
463
+ setNewView(bpPerPx: number, offsetPx: number): void;
464
+ horizontallyFlip(): void;
465
+ showTrack(trackId: string, initialSnapshot?: {}, displayInitialSnapshot?: {}): any;
466
+ hideTrack(trackId: string): number;
467
+ } & {
468
+ moveTrackDown(id: string): void;
469
+ moveTrackUp(id: string): void;
470
+ moveTrackToTop(id: string): void;
471
+ moveTrackToBottom(id: string): void;
472
+ moveTrack(movingId: string, targetId: string): void;
473
+ toggleTrack(trackId: string): boolean;
474
+ setTrackLabels(setting: "overlapping" | "offset" | "hidden"): void;
475
+ setShowCenterLine(b: boolean): void;
476
+ setDisplayedRegions(regions: import("@jbrowse/core/util").Region[]): void;
477
+ activateTrackSelector(): import("@jbrowse/core/util").Widget;
478
+ getSelectedRegions(leftOffset?: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").BpOffset, rightOffset?: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").BpOffset): {
479
+ start: number;
480
+ end: number;
481
+ type: string;
482
+ regionNumber?: number;
483
+ reversed?: boolean;
484
+ refName: string;
485
+ assemblyName: string;
486
+ key: string;
487
+ offsetPx: number;
488
+ widthPx: number;
489
+ variant?: string;
490
+ isLeftEndOfDisplayedRegion?: boolean;
491
+ }[];
492
+ afterDisplayedRegionsSet(cb: () => void): void;
493
+ horizontalScroll(distance: number): number;
494
+ center(): void;
495
+ showAllRegions(): void;
496
+ showAllRegionsInAssembly(assemblyName?: string): void;
497
+ setDraggingTrackId(idx?: string): void;
498
+ setScaleFactor(factor: number): void;
499
+ clearView(): void;
500
+ exportSvg(opts?: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").ExportSvgOptions): Promise<void>;
501
+ } & {
502
+ slide: (viewWidths: number) => void;
503
+ } & {
504
+ zoom: (targetBpPerPx: number) => void;
505
+ } & {
506
+ readonly canShowCytobands: boolean;
507
+ readonly showCytobands: boolean;
508
+ readonly anyCytobandsExist: boolean;
509
+ readonly cytobandOffset: number;
510
+ } & {
511
+ menuItems(): MenuItem[];
512
+ } & {
513
+ readonly staticBlocks: import("@jbrowse/core/util/blockTypes").BlockSet;
514
+ readonly dynamicBlocks: import("@jbrowse/core/util/blockTypes").BlockSet;
515
+ readonly roundedDynamicBlocks: import("@jbrowse/core/util/blockTypes").BaseBlock[];
516
+ readonly visibleLocStrings: string;
517
+ readonly coarseVisibleLocStrings: string;
518
+ } & {
519
+ setCoarseDynamicBlocks(blocks: import("@jbrowse/core/util/blockTypes").BlockSet): void;
520
+ afterAttach(): void;
521
+ } & {
522
+ moveTo(start?: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").BpOffset, end?: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").BpOffset): void;
523
+ navToLocString(input: string, optAssemblyName?: string): Promise<void>;
524
+ navToSearchString({ input, assembly, }: {
525
+ input: string;
526
+ assembly: import("@jbrowse/core/assemblyManager/assembly").Assembly;
527
+ }): Promise<void>;
528
+ navToLocations(parsedLocStrings: import("@jbrowse/core/util").ParsedLocString[], assemblyName?: string): Promise<void>;
529
+ navTo(query: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").NavLocation): void;
530
+ navToMultiple(locations: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").NavLocation[]): void;
531
+ } & {
532
+ rubberBandMenuItems(): MenuItem[];
533
+ bpToPx({ refName, coord, regionNumber, }: {
534
+ refName: string;
535
+ coord: number;
536
+ regionNumber?: number;
537
+ }): {
538
+ index: number;
539
+ offsetPx: number;
540
+ } | undefined;
541
+ centerAt(coord: number, refName: string, regionNumber?: number): void;
542
+ pxToBp(px: number): {
543
+ coord: number;
544
+ index: number;
545
+ refName: string;
546
+ oob: boolean;
547
+ assemblyName: string;
548
+ offset: number;
549
+ start: number;
550
+ end: number;
551
+ reversed?: boolean;
552
+ };
553
+ readonly centerLineInfo: {
554
+ coord: number;
555
+ index: number;
556
+ refName: string;
557
+ oob: boolean;
558
+ assemblyName: string;
559
+ offset: number;
560
+ start: number;
561
+ end: number;
562
+ reversed?: boolean;
563
+ } | undefined;
564
+ } & {
565
+ afterCreate(): void;
566
+ }, import("mobx-state-tree").ModelCreationType<import("mobx-state-tree/dist/internal").ExtractCFromProps<{
567
+ id: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
568
+ displayName: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<string>>;
569
+ minimized: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
570
+ } & {
571
+ id: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
572
+ type: import("mobx-state-tree").IType<string | undefined, string, string>;
573
+ offsetPx: import("mobx-state-tree").IType<number | undefined, number, number>;
574
+ bpPerPx: import("mobx-state-tree").IType<number | undefined, number, number>;
575
+ displayedRegions: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").IType<import("@jbrowse/core/util").Region[], import("@jbrowse/core/util").Region[], import("@jbrowse/core/util").Region[]>, [undefined]>;
576
+ tracks: import("mobx-state-tree").IArrayType<import("mobx-state-tree").IAnyType>;
577
+ hideHeader: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
578
+ hideHeaderOverview: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
579
+ hideNoTracksActive: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
580
+ trackSelectorType: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
581
+ showCenterLine: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>, [undefined]>;
582
+ showCytobandsSetting: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>, [undefined]>;
583
+ trackLabels: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
584
+ showGridlines: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
585
+ highlight: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").IArrayType<import("mobx-state-tree").IType<import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").HighlightType, import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").HighlightType, import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").HighlightType>>, [undefined]>;
586
+ colorByCDS: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>, [undefined]>;
587
+ showTrackOutlines: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>, [undefined]>;
588
+ }>>, import("mobx-state-tree")._NotCustomized>>;
589
+ viewTrackConfigs: import("mobx-state-tree").IArrayType<import("mobx-state-tree").IAnyModelType>;
590
+ }>>, import("mobx-state-tree")._NotCustomized>;
338
591
  export type LinearComparativeViewStateModel = ReturnType<typeof stateModelFactory>;
339
592
  export type LinearComparativeViewModel = Instance<LinearComparativeViewStateModel>;
340
593
  export default stateModelFactory;
@@ -1,12 +1,11 @@
1
1
  import { lazy } from 'react';
2
- import { addDisposer, cast, getPath, getRoot, resolveIdentifier, types, } from 'mobx-state-tree';
3
- import { autorun, transaction } from 'mobx';
2
+ import { addDisposer, cast, getPath, types, } from 'mobx-state-tree';
3
+ import { autorun } from 'mobx';
4
4
  // jbrowse
5
5
  import BaseViewModel from '@jbrowse/core/pluggableElementTypes/models/BaseViewModel';
6
6
  import { getSession, isSessionModelWithWidgets, avg } from '@jbrowse/core/util';
7
7
  import { ElementId } from '@jbrowse/core/util/types/mst';
8
8
  // icons
9
- import { TrackSelector as TrackSelectorIcon } from '@jbrowse/core/ui/Icons';
10
9
  import FolderOpenIcon from '@mui/icons-material/FolderOpen';
11
10
  // lazies
12
11
  const ReturnToImportFormDialog = lazy(() => import('@jbrowse/core/ui/ReturnToImportFormDialog'));
@@ -16,6 +15,8 @@ const ReturnToImportFormDialog = lazy(() => import('@jbrowse/core/ui/ReturnToImp
16
15
  * - [BaseViewModel](../baseviewmodel)
17
16
  */
18
17
  function stateModelFactory(pluginManager) {
18
+ var _a;
19
+ const LinearSyntenyViewHelper = (_a = pluginManager.getViewType('LinearSyntenyViewHelper')) === null || _a === void 0 ? void 0 : _a.stateModel;
19
20
  return types
20
21
  .compose('LinearComparativeView', BaseViewModel, types.model({
21
22
  /**
@@ -41,11 +42,7 @@ function stateModelFactory(pluginManager) {
41
42
  /**
42
43
  * #property
43
44
  */
44
- middleComparativeHeight: 100,
45
- /**
46
- * #property
47
- */
48
- tracks: types.array(pluginManager.pluggableMstType('track', 'stateModel')),
45
+ levels: types.array(LinearSyntenyViewHelper),
49
46
  /**
50
47
  * #property
51
48
  * currently this is limited to an array of two
@@ -67,12 +64,6 @@ function stateModelFactory(pluginManager) {
67
64
  width: undefined,
68
65
  }))
69
66
  .views(self => ({
70
- /**
71
- * #getter
72
- */
73
- get highResolutionScaling() {
74
- return 2;
75
- },
76
67
  /**
77
68
  * #getter
78
69
  */
@@ -138,94 +129,69 @@ function stateModelFactory(pluginManager) {
138
129
  /**
139
130
  * #action
140
131
  */
141
- setMiddleComparativeHeight(n) {
142
- self.middleComparativeHeight = n;
143
- return self.middleComparativeHeight;
132
+ setLevelHeight(newHeight, level = 0) {
133
+ const l = self.levels[level];
134
+ l.setHeight(newHeight);
135
+ return l.height;
144
136
  },
145
137
  /**
146
138
  * #action
147
139
  */
148
- activateTrackSelector() {
140
+ activateTrackSelector(level) {
149
141
  if (self.trackSelectorType === 'hierarchical') {
150
142
  const session = getSession(self);
151
143
  if (isSessionModelWithWidgets(session)) {
152
- const selector = session.addWidget('HierarchicalTrackSelectorWidget', 'hierarchicalTrackSelector', { view: self });
144
+ const selector = session.addWidget('HierarchicalTrackSelectorWidget', 'hierarchicalTrackSelector', {
145
+ view: self.levels[level],
146
+ });
153
147
  session.showWidget(selector);
154
148
  return selector;
155
149
  }
156
- return undefined;
157
150
  }
158
151
  throw new Error(`invalid track selector type ${self.trackSelectorType}`);
159
152
  },
160
153
  /**
161
154
  * #action
162
155
  */
163
- toggleTrack(trackId) {
164
- const hiddenCount = this.hideTrack(trackId);
165
- if (!hiddenCount) {
166
- this.showTrack(trackId);
167
- return true;
168
- }
169
- return false;
156
+ toggleTrack(trackId, level = 0) {
157
+ var _a;
158
+ (_a = self.levels[level]) === null || _a === void 0 ? void 0 : _a.toggleTrack(trackId);
170
159
  },
171
160
  /**
172
161
  * #action
173
162
  */
174
- showTrack(trackId, initialSnapshot = {}) {
175
- const schema = pluginManager.pluggableConfigSchemaType('track');
176
- const configuration = resolveIdentifier(schema, getRoot(self), trackId);
177
- if (!configuration) {
178
- throw new Error(`track not found ${trackId}`);
179
- }
180
- const trackType = pluginManager.getTrackType(configuration.type);
181
- if (!trackType) {
182
- throw new Error(`unknown track type ${configuration.type}`);
163
+ showTrack(trackId, level = 0, initialSnapshot = {}) {
164
+ if (!self.levels[level]) {
165
+ self.levels[level] = cast({ level });
183
166
  }
184
- const viewType = pluginManager.getViewType(self.type);
185
- const supportedDisplays = new Set(viewType.displayTypes.map(d => d.name));
186
- const displayConf = configuration.displays.find((d) => supportedDisplays.has(d.type));
187
- if (!displayConf) {
188
- throw new Error(`could not find a compatible display for view type ${self.type}`);
189
- }
190
- self.tracks.push(trackType.stateModel.create({
191
- ...initialSnapshot,
192
- type: configuration.type,
193
- configuration,
194
- displays: [{ type: displayConf.type, configuration: displayConf }],
195
- }));
167
+ self.levels[level].showTrack(trackId, initialSnapshot);
196
168
  },
197
169
  /**
198
170
  * #action
199
171
  */
200
- hideTrack(trackId) {
201
- const schema = pluginManager.pluggableConfigSchemaType('track');
202
- const config = resolveIdentifier(schema, getRoot(self), trackId);
203
- const shownTracks = self.tracks.filter(t => t.configuration === config);
204
- transaction(() => {
205
- shownTracks.forEach(t => self.tracks.remove(t));
206
- });
207
- return shownTracks.length;
172
+ hideTrack(trackId, level = 0) {
173
+ var _a;
174
+ (_a = self.levels[level]) === null || _a === void 0 ? void 0 : _a.hideTrack(trackId);
208
175
  },
209
176
  /**
210
177
  * #action
211
178
  */
212
179
  squareView() {
213
180
  const average = avg(self.views.map(v => v.bpPerPx));
214
- self.views.forEach(view => {
181
+ for (const view of self.views) {
215
182
  const center = view.pxToBp(view.width / 2);
216
183
  view.setNewView(average, view.offsetPx);
217
- if (!center.refName) {
218
- return;
184
+ if (center.refName) {
185
+ view.centerAt(center.coord, center.refName, center.index);
219
186
  }
220
- view.centerAt(center.coord, center.refName, center.index);
221
- });
187
+ }
222
188
  },
223
189
  /**
224
190
  * #action
225
191
  */
226
192
  clearView() {
227
193
  self.views = cast([]);
228
- self.tracks = cast([]);
194
+ self.levels = cast([]);
229
195
  },
230
196
  }))
231
197
  .views(() => ({
@@ -244,24 +210,19 @@ function stateModelFactory(pluginManager) {
244
210
  */
245
211
  menuItems() {
246
212
  return [
247
- ...self.views
248
- .map((view, idx) => [idx, view.menuItems()])
249
- .map(f => ({ label: `View ${f[0] + 1} Menu`, subMenu: f[1] })),
250
213
  {
251
214
  label: 'Return to import form',
252
215
  onClick: () => {
253
216
  getSession(self).queueDialog(handleClose => [
254
217
  ReturnToImportFormDialog,
255
- { model: self, handleClose },
218
+ {
219
+ model: self,
220
+ handleClose,
221
+ },
256
222
  ]);
257
223
  },
258
224
  icon: FolderOpenIcon,
259
225
  },
260
- {
261
- label: 'Open track selector',
262
- onClick: self.activateTrackSelector,
263
- icon: TrackSelectorIcon,
264
- },
265
226
  ];
266
227
  },
267
228
  /**
@@ -272,12 +233,12 @@ function stateModelFactory(pluginManager) {
272
233
  {
273
234
  label: 'Zoom to region(s)',
274
235
  onClick: () => {
275
- self.views.forEach(view => {
236
+ for (const view of self.views) {
276
237
  const { leftOffset, rightOffset } = view;
277
238
  if (leftOffset && rightOffset) {
278
239
  view.moveTo(leftOffset, rightOffset);
279
240
  }
280
- });
241
+ }
281
242
  },
282
243
  },
283
244
  ];
@@ -287,12 +248,21 @@ function stateModelFactory(pluginManager) {
287
248
  afterAttach() {
288
249
  addDisposer(self, autorun(() => {
289
250
  if (self.width) {
290
- self.views.forEach(v => {
291
- v.setWidth(self.width);
292
- });
251
+ for (const view of self.views) {
252
+ view.setWidth(self.width);
253
+ }
293
254
  }
294
255
  }));
295
256
  },
296
- }));
257
+ }))
258
+ .preProcessSnapshot(snap => {
259
+ // @ts-expect-error
260
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
261
+ const { tracks, levels = [{ tracks, level: 0 }], ...rest } = snap || {};
262
+ return {
263
+ ...rest,
264
+ levels,
265
+ };
266
+ });
297
267
  }
298
268
  export default stateModelFactory;
@@ -1,4 +1,4 @@
1
- import { addDisposer, getSnapshot } from 'mobx-state-tree';
1
+ import { addDisposer, getParent, getSnapshot } from 'mobx-state-tree';
2
2
  import { getContainingView, getSession } from '@jbrowse/core/util';
3
3
  import { bpToPx } from '@jbrowse/core/util/Base1DUtils';
4
4
  import { MismatchParser } from '@jbrowse/plugin-alignments';
@@ -16,7 +16,7 @@ export function doAfterAttach(self) {
16
16
  if (!ctx1 || !ctx3) {
17
17
  return;
18
18
  }
19
- const height = view.middleComparativeHeight;
19
+ const height = self.height;
20
20
  const width = view.width;
21
21
  ctx1.clearRect(0, 0, width, height);
22
22
  ctx3.clearRect(0, 0, width, height);
@@ -50,6 +50,8 @@ export function doAfterAttach(self) {
50
50
  }
51
51
  const { assemblyManager } = getSession(self);
52
52
  const view = getContainingView(self);
53
+ // @ts-expect-error
54
+ const level = getParent(self, 4).level;
53
55
  const viewSnaps = view.views.map(view => ({
54
56
  ...getSnapshot(view),
55
57
  width: view.width,
@@ -75,8 +77,8 @@ export function doAfterAttach(self) {
75
77
  const r2 = mate.refName;
76
78
  const ref1 = (a1 === null || a1 === void 0 ? void 0 : a1.getCanonicalRefName(r1)) || r1;
77
79
  const ref2 = (a2 === null || a2 === void 0 ? void 0 : a2.getCanonicalRefName(r2)) || r2;
78
- const v1 = viewSnaps[0];
79
- const v2 = viewSnaps[1];
80
+ const v1 = viewSnaps[level];
81
+ const v2 = viewSnaps[level + 1];
80
82
  const p11 = bpToPx({ self: v1, refName: ref1, coord: f1s });
81
83
  const p12 = bpToPx({ self: v1, refName: ref1, coord: f1e });
82
84
  const p21 = bpToPx({ self: v2, refName: ref2, coord: f2s });