@jbrowse/plugin-linear-comparative-view 2.15.4 → 2.16.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 (121) hide show
  1. package/dist/LGVSyntenyDisplay/components/LaunchSyntenyViewDialog.d.ts +2 -1
  2. package/dist/LGVSyntenyDisplay/components/LaunchSyntenyViewDialog.js +4 -2
  3. package/dist/LGVSyntenyDisplay/components/util.d.ts +4 -1
  4. package/dist/LGVSyntenyDisplay/components/util.js +7 -15
  5. package/dist/LGVSyntenyDisplay/model.d.ts +26 -14
  6. package/dist/LGVSyntenyDisplay/model.js +23 -1
  7. package/dist/LaunchLinearSyntenyView.js +41 -11
  8. package/dist/LinearComparativeDisplay/stateModelFactory.d.ts +42 -14
  9. package/dist/LinearComparativeDisplay/stateModelFactory.js +20 -10
  10. package/dist/LinearComparativeView/components/Header.d.ts +2 -3
  11. package/dist/LinearComparativeView/components/Header.js +72 -62
  12. package/dist/LinearComparativeView/components/HeaderSearchBoxes.d.ts +6 -0
  13. package/dist/LinearComparativeView/components/HeaderSearchBoxes.js +34 -0
  14. package/dist/LinearComparativeView/components/LinearComparativeRenderArea.d.ts +6 -0
  15. package/dist/LinearComparativeView/components/LinearComparativeRenderArea.js +61 -0
  16. package/dist/LinearComparativeView/components/LinearComparativeView.d.ts +2 -4
  17. package/dist/LinearComparativeView/components/LinearComparativeView.js +3 -67
  18. package/dist/LinearComparativeView/components/Rubberband.js +1 -1
  19. package/dist/LinearComparativeView/index.js +3 -0
  20. package/dist/LinearComparativeView/model.d.ts +265 -12
  21. package/dist/LinearComparativeView/model.js +45 -75
  22. package/dist/LinearSyntenyDisplay/afterAttach.js +5 -4
  23. package/dist/LinearSyntenyDisplay/components/LinearSyntenyRendering.js +47 -32
  24. package/dist/LinearSyntenyDisplay/components/SyntenyContextMenu.js +10 -6
  25. package/dist/LinearSyntenyDisplay/components/util.d.ts +7 -2
  26. package/dist/LinearSyntenyDisplay/components/util.js +12 -14
  27. package/dist/LinearSyntenyDisplay/drawSynteny.d.ts +1 -1
  28. package/dist/LinearSyntenyDisplay/drawSynteny.js +29 -25
  29. package/dist/LinearSyntenyDisplay/index.js +1 -1
  30. package/dist/LinearSyntenyDisplay/model.d.ts +48 -10
  31. package/dist/LinearSyntenyDisplay/model.js +38 -15
  32. package/dist/LinearSyntenyView/components/ImportForm/{ImportCustomTrack.d.ts → AddCustomTrack.d.ts} +2 -3
  33. package/dist/LinearSyntenyView/components/ImportForm/{ImportCustomTrack.js → AddCustomTrack.js} +3 -3
  34. package/dist/LinearSyntenyView/components/ImportForm/LinearSyntenyImportForm.js +195 -0
  35. package/dist/LinearSyntenyView/components/ImportForm/Spacer.d.ts +2 -0
  36. package/dist/LinearSyntenyView/components/ImportForm/Spacer.js +10 -0
  37. package/dist/LinearSyntenyView/components/ImportForm/TrackSelector.d.ts +10 -0
  38. package/dist/LinearSyntenyView/components/ImportForm/{ImportSyntenyTrackSelector.js → TrackSelector.js} +15 -20
  39. package/dist/LinearSyntenyView/components/ImportForm/TrackSelectorUtil.d.ts +14 -0
  40. package/dist/LinearSyntenyView/components/ImportForm/TrackSelectorUtil.js +52 -0
  41. package/dist/LinearSyntenyView/components/LinearSyntenyView.js +3 -3
  42. package/dist/LinearSyntenyView/index.js +1 -1
  43. package/dist/LinearSyntenyView/model.d.ts +267 -9
  44. package/dist/LinearSyntenyView/model.js +2 -2
  45. package/dist/LinearSyntenyView/svgcomponents/SVGLinearGenomeView.d.ts +12 -0
  46. package/dist/LinearSyntenyView/svgcomponents/SVGLinearGenomeView.js +19 -0
  47. package/dist/LinearSyntenyView/svgcomponents/SVGLinearSyntenyView.d.ts +1 -3
  48. package/dist/LinearSyntenyView/svgcomponents/SVGLinearSyntenyView.js +36 -27
  49. package/dist/LinearSyntenyViewHelper/index.d.ts +2 -0
  50. package/dist/LinearSyntenyViewHelper/index.js +25 -0
  51. package/dist/LinearSyntenyViewHelper/stateModelFactory.d.ts +30 -0
  52. package/dist/LinearSyntenyViewHelper/stateModelFactory.js +105 -0
  53. package/dist/SyntenyFeatureDetail/SyntenyFeatureDetail.d.ts +14 -0
  54. package/dist/SyntenyFeatureDetail/SyntenyFeatureDetail.js +100 -0
  55. package/dist/SyntenyFeatureDetail/index.d.ts +2 -0
  56. package/dist/SyntenyFeatureDetail/index.js +56 -0
  57. package/dist/index.js +4 -0
  58. package/esm/LGVSyntenyDisplay/components/LaunchSyntenyViewDialog.d.ts +2 -1
  59. package/esm/LGVSyntenyDisplay/components/LaunchSyntenyViewDialog.js +4 -2
  60. package/esm/LGVSyntenyDisplay/components/util.d.ts +4 -1
  61. package/esm/LGVSyntenyDisplay/components/util.js +8 -16
  62. package/esm/LGVSyntenyDisplay/model.d.ts +26 -14
  63. package/esm/LGVSyntenyDisplay/model.js +25 -3
  64. package/esm/LaunchLinearSyntenyView.js +41 -11
  65. package/esm/LinearComparativeDisplay/stateModelFactory.d.ts +42 -14
  66. package/esm/LinearComparativeDisplay/stateModelFactory.js +21 -11
  67. package/esm/LinearComparativeView/components/Header.d.ts +2 -3
  68. package/esm/LinearComparativeView/components/Header.js +73 -63
  69. package/esm/LinearComparativeView/components/HeaderSearchBoxes.d.ts +6 -0
  70. package/esm/LinearComparativeView/components/HeaderSearchBoxes.js +29 -0
  71. package/esm/LinearComparativeView/components/LinearComparativeRenderArea.d.ts +6 -0
  72. package/esm/LinearComparativeView/components/LinearComparativeRenderArea.js +56 -0
  73. package/esm/LinearComparativeView/components/LinearComparativeView.d.ts +2 -4
  74. package/esm/LinearComparativeView/components/LinearComparativeView.js +3 -67
  75. package/esm/LinearComparativeView/components/Rubberband.js +1 -1
  76. package/esm/LinearComparativeView/index.js +3 -0
  77. package/esm/LinearComparativeView/model.d.ts +265 -12
  78. package/esm/LinearComparativeView/model.js +47 -77
  79. package/esm/LinearSyntenyDisplay/afterAttach.js +5 -4
  80. package/esm/LinearSyntenyDisplay/components/LinearSyntenyRendering.js +48 -33
  81. package/esm/LinearSyntenyDisplay/components/SyntenyContextMenu.js +10 -6
  82. package/esm/LinearSyntenyDisplay/components/util.d.ts +7 -2
  83. package/esm/LinearSyntenyDisplay/components/util.js +12 -14
  84. package/esm/LinearSyntenyDisplay/drawSynteny.d.ts +1 -1
  85. package/esm/LinearSyntenyDisplay/drawSynteny.js +29 -25
  86. package/esm/LinearSyntenyDisplay/index.js +1 -1
  87. package/esm/LinearSyntenyDisplay/model.d.ts +48 -10
  88. package/esm/LinearSyntenyDisplay/model.js +38 -15
  89. package/esm/LinearSyntenyView/components/ImportForm/{ImportCustomTrack.d.ts → AddCustomTrack.d.ts} +2 -3
  90. package/esm/LinearSyntenyView/components/ImportForm/{ImportCustomTrack.js → AddCustomTrack.js} +3 -3
  91. package/esm/LinearSyntenyView/components/ImportForm/LinearSyntenyImportForm.js +167 -0
  92. package/esm/LinearSyntenyView/components/ImportForm/Spacer.d.ts +2 -0
  93. package/esm/LinearSyntenyView/components/ImportForm/Spacer.js +4 -0
  94. package/esm/LinearSyntenyView/components/ImportForm/TrackSelector.d.ts +10 -0
  95. package/esm/LinearSyntenyView/components/ImportForm/{ImportSyntenyTrackSelector.js → TrackSelector.js} +15 -20
  96. package/esm/LinearSyntenyView/components/ImportForm/TrackSelectorUtil.d.ts +14 -0
  97. package/esm/LinearSyntenyView/components/ImportForm/TrackSelectorUtil.js +23 -0
  98. package/esm/LinearSyntenyView/components/LinearSyntenyView.js +3 -3
  99. package/esm/LinearSyntenyView/index.js +1 -1
  100. package/esm/LinearSyntenyView/model.d.ts +267 -9
  101. package/esm/LinearSyntenyView/model.js +2 -2
  102. package/esm/LinearSyntenyView/svgcomponents/SVGLinearGenomeView.d.ts +12 -0
  103. package/esm/LinearSyntenyView/svgcomponents/SVGLinearGenomeView.js +13 -0
  104. package/esm/LinearSyntenyView/svgcomponents/SVGLinearSyntenyView.d.ts +1 -3
  105. package/esm/LinearSyntenyView/svgcomponents/SVGLinearSyntenyView.js +38 -29
  106. package/esm/LinearSyntenyViewHelper/index.d.ts +2 -0
  107. package/esm/LinearSyntenyViewHelper/index.js +19 -0
  108. package/esm/LinearSyntenyViewHelper/stateModelFactory.d.ts +30 -0
  109. package/esm/LinearSyntenyViewHelper/stateModelFactory.js +102 -0
  110. package/esm/SyntenyFeatureDetail/SyntenyFeatureDetail.d.ts +14 -0
  111. package/esm/SyntenyFeatureDetail/SyntenyFeatureDetail.js +72 -0
  112. package/esm/SyntenyFeatureDetail/index.d.ts +2 -0
  113. package/esm/SyntenyFeatureDetail/index.js +27 -0
  114. package/esm/index.js +4 -0
  115. package/package.json +3 -3
  116. package/dist/LinearSyntenyView/components/ImportForm/ImportSyntenyTrackSelector.d.ts +0 -9
  117. package/dist/LinearSyntenyView/components/ImportForm/index.js +0 -138
  118. package/esm/LinearSyntenyView/components/ImportForm/ImportSyntenyTrackSelector.d.ts +0 -9
  119. package/esm/LinearSyntenyView/components/ImportForm/index.js +0 -110
  120. /package/dist/LinearSyntenyView/components/ImportForm/{index.d.ts → LinearSyntenyImportForm.d.ts} +0 -0
  121. /package/esm/LinearSyntenyView/components/ImportForm/{index.d.ts → LinearSyntenyImportForm.d.ts} +0 -0
@@ -33,8 +33,20 @@ export default function stateModelFactory(pluginManager: PluginManager): import(
33
33
  trackSelectorType: import("mobx-state-tree").IType<string | undefined, string, string>;
34
34
  showIntraviewLinks: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
35
35
  interactToggled: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
36
- middleComparativeHeight: import("mobx-state-tree").IType<number | undefined, number, number>;
37
- tracks: import("mobx-state-tree").IArrayType<import("mobx-state-tree").IAnyType>;
36
+ levels: import("mobx-state-tree").IArrayType<import("mobx-state-tree").IModelType<{
37
+ id: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
38
+ type: import("mobx-state-tree").IType<string | undefined, string, string>;
39
+ tracks: import("mobx-state-tree").IArrayType<import("mobx-state-tree").IAnyType>;
40
+ height: import("mobx-state-tree").IType<number | undefined, number, number>;
41
+ level: import("mobx-state-tree").ISimpleType<number>;
42
+ }, {
43
+ setHeight(n: number): number;
44
+ showTrack(trackId: string, initialSnapshot?: {}): void;
45
+ hideTrack(trackId: string): number;
46
+ toggleTrack(trackId: string): boolean;
47
+ } & {
48
+ readonly assemblyNames: (string | undefined)[];
49
+ }, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>>;
38
50
  views: import("mobx-state-tree").IArrayType<import("mobx-state-tree").IModelType<{
39
51
  id: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
40
52
  displayName: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<string>>;
@@ -271,7 +283,6 @@ export default function stateModelFactory(pluginManager: PluginManager): import(
271
283
  } & {
272
284
  width: number | undefined;
273
285
  } & {
274
- readonly highResolutionScaling: number;
275
286
  readonly initialized: boolean;
276
287
  readonly refNames: string[][];
277
288
  readonly assemblyNames: string[];
@@ -281,11 +292,11 @@ export default function stateModelFactory(pluginManager: PluginManager): import(
281
292
  setWidth(newWidth: number): void;
282
293
  setViews(views: import("mobx-state-tree").SnapshotIn<import("@jbrowse/plugin-linear-genome-view").LinearGenomeViewModel>[]): void;
283
294
  removeView(view: import("@jbrowse/plugin-linear-genome-view").LinearGenomeViewModel): void;
284
- setMiddleComparativeHeight(n: number): number;
285
- activateTrackSelector(): import("@jbrowse/core/util").Widget | undefined;
286
- toggleTrack(trackId: string): boolean;
287
- showTrack(trackId: string, initialSnapshot?: {}): void;
288
- hideTrack(trackId: string): number;
295
+ setLevelHeight(newHeight: number, level?: number): number;
296
+ activateTrackSelector(level: number): import("@jbrowse/core/util").Widget;
297
+ toggleTrack(trackId: string, level?: number): void;
298
+ showTrack(trackId: string, level?: number, initialSnapshot?: {}): void;
299
+ hideTrack(trackId: string, level?: number): void;
289
300
  squareView(): void;
290
301
  clearView(): void;
291
302
  } & {
@@ -365,6 +376,253 @@ export default function stateModelFactory(pluginManager: PluginManager): import(
365
376
  };
366
377
  onClick: () => void;
367
378
  })[];
368
- }, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>;
379
+ }, {
380
+ type: "LinearComparativeView";
381
+ } & Partial<import("mobx-state-tree/dist/internal").ExtractCFromProps<{
382
+ id: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
383
+ displayName: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<string>>;
384
+ minimized: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
385
+ } & {
386
+ id: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
387
+ type: import("mobx-state-tree").ISimpleType<"LinearComparativeView">;
388
+ trackSelectorType: import("mobx-state-tree").IType<string | undefined, string, string>;
389
+ showIntraviewLinks: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
390
+ interactToggled: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
391
+ levels: import("mobx-state-tree").IArrayType<import("mobx-state-tree").IModelType<{
392
+ id: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
393
+ type: import("mobx-state-tree").IType<string | undefined, string, string>;
394
+ tracks: import("mobx-state-tree").IArrayType<import("mobx-state-tree").IAnyType>;
395
+ height: import("mobx-state-tree").IType<number | undefined, number, number>;
396
+ level: import("mobx-state-tree").ISimpleType<number>;
397
+ }, {
398
+ setHeight(n: number): number;
399
+ showTrack(trackId: string, initialSnapshot?: {}): void;
400
+ hideTrack(trackId: string): number;
401
+ toggleTrack(trackId: string): boolean;
402
+ } & {
403
+ readonly assemblyNames: (string | undefined)[];
404
+ }, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>>;
405
+ views: import("mobx-state-tree").IArrayType<import("mobx-state-tree").IModelType<{
406
+ id: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
407
+ displayName: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<string>>;
408
+ minimized: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
409
+ } & {
410
+ id: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
411
+ type: import("mobx-state-tree").IType<string | undefined, string, string>;
412
+ offsetPx: import("mobx-state-tree").IType<number | undefined, number, number>;
413
+ bpPerPx: import("mobx-state-tree").IType<number | undefined, number, number>;
414
+ 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]>;
415
+ tracks: import("mobx-state-tree").IArrayType<import("mobx-state-tree").IAnyType>;
416
+ hideHeader: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
417
+ hideHeaderOverview: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
418
+ hideNoTracksActive: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
419
+ trackSelectorType: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
420
+ showCenterLine: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>, [undefined]>;
421
+ showCytobandsSetting: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>, [undefined]>;
422
+ trackLabels: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
423
+ showGridlines: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
424
+ 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]>;
425
+ colorByCDS: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>, [undefined]>;
426
+ showTrackOutlines: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>, [undefined]>;
427
+ }, {
428
+ width: number;
429
+ } & {
430
+ menuItems(): import("@jbrowse/core/ui").MenuItem[];
431
+ } & {
432
+ setDisplayName(name: string): void;
433
+ setWidth(newWidth: number): void;
434
+ setMinimized(flag: boolean): void;
435
+ } & {
436
+ volatileWidth: number | undefined;
437
+ minimumBlockWidth: number;
438
+ draggingTrackId: undefined | string;
439
+ volatileError: unknown;
440
+ afterDisplayedRegionsSetCallbacks: (() => void)[];
441
+ scaleFactor: number;
442
+ trackRefs: Record<string, HTMLDivElement>;
443
+ coarseDynamicBlocks: import("@jbrowse/core/util/blockTypes").BaseBlock[];
444
+ coarseTotalBp: number;
445
+ leftOffset: undefined | import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").BpOffset;
446
+ rightOffset: undefined | import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").BpOffset;
447
+ } & {
448
+ readonly trackLabelsSetting: any;
449
+ readonly width: number;
450
+ readonly interRegionPaddingWidth: number;
451
+ readonly assemblyNames: string[];
452
+ } & {
453
+ scaleBarDisplayPrefix(): string | undefined;
454
+ MiniControlsComponent(): React.FC<any>;
455
+ HeaderComponent(): React.FC<any>;
456
+ readonly assemblyErrors: string;
457
+ readonly assembliesInitialized: boolean;
458
+ readonly initialized: boolean;
459
+ readonly hasDisplayedRegions: boolean;
460
+ readonly scaleBarHeight: number;
461
+ readonly headerHeight: number;
462
+ readonly trackHeights: number;
463
+ readonly trackHeightsWithResizeHandles: number;
464
+ readonly height: number;
465
+ readonly totalBp: number;
466
+ readonly maxBpPerPx: number;
467
+ readonly minBpPerPx: number;
468
+ readonly error: unknown;
469
+ readonly maxOffset: number;
470
+ readonly minOffset: number;
471
+ readonly displayedRegionsTotalPx: number;
472
+ renderProps(): any;
473
+ searchScope(assemblyName: string): {
474
+ assemblyName: string;
475
+ includeAggregateIndexes: boolean;
476
+ 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>>;
477
+ };
478
+ getTrack(id: string): any;
479
+ rankSearchResults(results: import("@jbrowse/core/TextSearch/BaseResults").default[]): import("@jbrowse/core/TextSearch/BaseResults").default[];
480
+ rewriteOnClicks(trackType: string, viewMenuActions: import("@jbrowse/core/ui").MenuItem[]): void;
481
+ readonly trackTypeActions: Map<string, import("@jbrowse/core/ui").MenuItem[]>;
482
+ } & {
483
+ setShowTrackOutlines(arg: boolean): void;
484
+ setColorByCDS(flag: boolean): void;
485
+ setShowCytobands(flag: boolean): void;
486
+ setWidth(newWidth: number): void;
487
+ setError(error: unknown): void;
488
+ setHideHeader(b: boolean): void;
489
+ setHideHeaderOverview(b: boolean): void;
490
+ setHideNoTracksActive(b: boolean): void;
491
+ setShowGridlines(b: boolean): void;
492
+ addToHighlights(highlight: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").HighlightType): void;
493
+ setHighlight(highlight?: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").HighlightType[]): void;
494
+ removeHighlight(highlight: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").HighlightType): void;
495
+ scrollTo(offsetPx: number): number;
496
+ zoomTo(bpPerPx: number, offset?: number, centerAtOffset?: boolean): number;
497
+ setOffsets(left?: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").BpOffset, right?: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").BpOffset): void;
498
+ setSearchResults(searchResults: import("@jbrowse/core/TextSearch/BaseResults").default[], searchQuery: string, assemblyName?: string): void;
499
+ setNewView(bpPerPx: number, offsetPx: number): void;
500
+ horizontallyFlip(): void;
501
+ showTrack(trackId: string, initialSnapshot?: {}, displayInitialSnapshot?: {}): any;
502
+ hideTrack(trackId: string): number;
503
+ } & {
504
+ moveTrackDown(id: string): void;
505
+ moveTrackUp(id: string): void;
506
+ moveTrackToTop(id: string): void;
507
+ moveTrackToBottom(id: string): void;
508
+ moveTrack(movingId: string, targetId: string): void;
509
+ toggleTrack(trackId: string): boolean;
510
+ setTrackLabels(setting: "overlapping" | "offset" | "hidden"): void;
511
+ setShowCenterLine(b: boolean): void;
512
+ setDisplayedRegions(regions: import("@jbrowse/core/util").Region[]): void;
513
+ activateTrackSelector(): import("@jbrowse/core/util").Widget;
514
+ getSelectedRegions(leftOffset?: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").BpOffset, rightOffset?: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").BpOffset): {
515
+ start: number;
516
+ end: number;
517
+ type: string;
518
+ regionNumber?: number;
519
+ reversed?: boolean;
520
+ refName: string;
521
+ assemblyName: string;
522
+ key: string;
523
+ offsetPx: number;
524
+ widthPx: number;
525
+ variant?: string;
526
+ isLeftEndOfDisplayedRegion?: boolean;
527
+ }[];
528
+ afterDisplayedRegionsSet(cb: () => void): void;
529
+ horizontalScroll(distance: number): number;
530
+ center(): void;
531
+ showAllRegions(): void;
532
+ showAllRegionsInAssembly(assemblyName?: string): void;
533
+ setDraggingTrackId(idx?: string): void;
534
+ setScaleFactor(factor: number): void;
535
+ clearView(): void;
536
+ exportSvg(opts?: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").ExportSvgOptions): Promise<void>;
537
+ } & {
538
+ slide: (viewWidths: number) => void;
539
+ } & {
540
+ zoom: (targetBpPerPx: number) => void;
541
+ } & {
542
+ readonly canShowCytobands: boolean;
543
+ readonly showCytobands: boolean;
544
+ readonly anyCytobandsExist: boolean;
545
+ readonly cytobandOffset: number;
546
+ } & {
547
+ menuItems(): import("@jbrowse/core/ui").MenuItem[];
548
+ } & {
549
+ readonly staticBlocks: import("@jbrowse/core/util/blockTypes").BlockSet;
550
+ readonly dynamicBlocks: import("@jbrowse/core/util/blockTypes").BlockSet;
551
+ readonly roundedDynamicBlocks: import("@jbrowse/core/util/blockTypes").BaseBlock[];
552
+ readonly visibleLocStrings: string;
553
+ readonly coarseVisibleLocStrings: string;
554
+ } & {
555
+ setCoarseDynamicBlocks(blocks: import("@jbrowse/core/util/blockTypes").BlockSet): void;
556
+ afterAttach(): void;
557
+ } & {
558
+ moveTo(start?: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").BpOffset, end?: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").BpOffset): void;
559
+ navToLocString(input: string, optAssemblyName?: string): Promise<void>;
560
+ navToSearchString({ input, assembly, }: {
561
+ input: string;
562
+ assembly: import("@jbrowse/core/assemblyManager/assembly").Assembly;
563
+ }): Promise<void>;
564
+ navToLocations(parsedLocStrings: import("@jbrowse/core/util").ParsedLocString[], assemblyName?: string): Promise<void>;
565
+ navTo(query: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").NavLocation): void;
566
+ navToMultiple(locations: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").NavLocation[]): void;
567
+ } & {
568
+ rubberBandMenuItems(): import("@jbrowse/core/ui").MenuItem[];
569
+ bpToPx({ refName, coord, regionNumber, }: {
570
+ refName: string;
571
+ coord: number;
572
+ regionNumber?: number;
573
+ }): {
574
+ index: number;
575
+ offsetPx: number;
576
+ } | undefined;
577
+ centerAt(coord: number, refName: string, regionNumber?: number): void;
578
+ pxToBp(px: number): {
579
+ coord: number;
580
+ index: number;
581
+ refName: string;
582
+ oob: boolean;
583
+ assemblyName: string;
584
+ offset: number;
585
+ start: number;
586
+ end: number;
587
+ reversed?: boolean;
588
+ };
589
+ readonly centerLineInfo: {
590
+ coord: number;
591
+ index: number;
592
+ refName: string;
593
+ oob: boolean;
594
+ assemblyName: string;
595
+ offset: number;
596
+ start: number;
597
+ end: number;
598
+ reversed?: boolean;
599
+ } | undefined;
600
+ } & {
601
+ afterCreate(): void;
602
+ }, import("mobx-state-tree").ModelCreationType<import("mobx-state-tree/dist/internal").ExtractCFromProps<{
603
+ id: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
604
+ displayName: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<string>>;
605
+ minimized: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
606
+ } & {
607
+ id: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
608
+ type: import("mobx-state-tree").IType<string | undefined, string, string>;
609
+ offsetPx: import("mobx-state-tree").IType<number | undefined, number, number>;
610
+ bpPerPx: import("mobx-state-tree").IType<number | undefined, number, number>;
611
+ 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]>;
612
+ tracks: import("mobx-state-tree").IArrayType<import("mobx-state-tree").IAnyType>;
613
+ hideHeader: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
614
+ hideHeaderOverview: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
615
+ hideNoTracksActive: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
616
+ trackSelectorType: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
617
+ showCenterLine: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>, [undefined]>;
618
+ showCytobandsSetting: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>, [undefined]>;
619
+ trackLabels: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
620
+ showGridlines: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
621
+ 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]>;
622
+ colorByCDS: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>, [undefined]>;
623
+ showTrackOutlines: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>, [undefined]>;
624
+ }>>, import("mobx-state-tree")._NotCustomized>>;
625
+ viewTrackConfigs: import("mobx-state-tree").IArrayType<import("mobx-state-tree").IAnyModelType>;
626
+ }>> & import("mobx-state-tree/dist/internal").NonEmptyObject & import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>;
369
627
  export type LinearSyntenyViewStateModel = ReturnType<typeof stateModelFactory>;
370
628
  export type LinearSyntenyViewModel = Instance<LinearSyntenyViewStateModel>;
@@ -51,9 +51,9 @@ export default function stateModelFactory(pluginManager) {
51
51
  */
52
52
  showAllRegions() {
53
53
  transaction(() => {
54
- self.views.forEach(view => {
54
+ for (const view of self.views) {
55
55
  view.showAllRegionsInAssembly();
56
- });
56
+ }
57
57
  });
58
58
  },
59
59
  }))
@@ -0,0 +1,12 @@
1
+ import React from 'react';
2
+ import { LinearGenomeViewModel } from '@jbrowse/plugin-linear-genome-view';
3
+ export default function SVGLinearGenomeView({ trackLabelOffset, fontSize, textHeight, trackLabels, view, displayResults, rulerHeight, shift, }: {
4
+ textHeight: number;
5
+ trackLabels: string;
6
+ trackLabelOffset: number;
7
+ fontSize: number;
8
+ view: LinearGenomeViewModel;
9
+ displayResults: any;
10
+ rulerHeight: number;
11
+ shift: number;
12
+ }): React.JSX.Element;
@@ -0,0 +1,13 @@
1
+ import React from 'react';
2
+ import { useTheme } from '@mui/material';
3
+ import { getFillProps } from '@jbrowse/core/util';
4
+ import { SVGTracks, SVGRuler, } from '@jbrowse/plugin-linear-genome-view';
5
+ export default function SVGLinearGenomeView({ trackLabelOffset, fontSize, textHeight, trackLabels, view, displayResults, rulerHeight, shift, }) {
6
+ const theme = useTheme();
7
+ return (React.createElement("g", { transform: `translate(${shift} ${fontSize})` },
8
+ React.createElement("g", { transform: `translate(${trackLabelOffset})` },
9
+ React.createElement("text", { x: 0, fontSize: fontSize, ...getFillProps(theme.palette.text.primary) }, view.assemblyNames.join(', ')),
10
+ React.createElement(SVGRuler, { model: displayResults.view, fontSize: fontSize })),
11
+ React.createElement("g", { transform: `translate(0 ${rulerHeight + fontSize})` },
12
+ React.createElement(SVGTracks, { textHeight: textHeight, trackLabels: trackLabels, fontSize: fontSize, model: displayResults.view, displayResults: displayResults.data, trackLabelOffset: trackLabelOffset }))));
13
+ }
@@ -1,4 +1,2 @@
1
1
  import { ExportSvgOptions, LinearSyntenyViewModel } from '../model';
2
- type LSV = LinearSyntenyViewModel;
3
- export declare function renderToSvg(model: LSV, opts: ExportSvgOptions): Promise<string>;
4
- export {};
2
+ export declare function renderToSvg(model: LinearSyntenyViewModel, opts: ExportSvgOptions): Promise<string>;
@@ -2,26 +2,27 @@ import React from 'react';
2
2
  import { ThemeProvider } from '@mui/material';
3
3
  import { getRoot } from 'mobx-state-tree';
4
4
  import { when } from 'mobx';
5
- import { getSession, getSerializedSvg, max, measureText, ReactRendering, renderToAbstractCanvas, renderToStaticMarkup, sum, getFillProps, } from '@jbrowse/core/util';
5
+ import { getSession, getSerializedSvg, max, measureText, ReactRendering, renderToAbstractCanvas, renderToStaticMarkup, sum, } from '@jbrowse/core/util';
6
6
  import { getTrackName } from '@jbrowse/core/util/tracks';
7
7
  import { createJBrowseTheme } from '@jbrowse/core/ui';
8
- import { SVGTracks, SVGRuler, totalHeight, } from '@jbrowse/plugin-linear-genome-view';
8
+ import { totalHeight } from '@jbrowse/plugin-linear-genome-view';
9
9
  // locals
10
10
  import SVGBackground from './SVGBackground';
11
+ import SVGLinearGenomeView from './SVGLinearGenomeView';
11
12
  import { drawRef } from '../../LinearSyntenyDisplay/drawSynteny';
12
13
  // render LGV to SVG
13
14
  export async function renderToSvg(model, opts) {
14
15
  var _a;
15
16
  await when(() => model.initialized);
16
- const { textHeight = 18, headerHeight = 30, rulerHeight = 30, fontSize = 13, trackLabels = 'offset', Wrapper = ({ children }) => children, themeName = 'default', } = opts;
17
+ const { textHeight = 18, rulerHeight = 30, fontSize = 13, trackLabels = 'offset', Wrapper = ({ children }) => children, themeName = 'default', } = opts;
17
18
  const session = getSession(model);
18
19
  const themeVar = (_a = session.allThemes) === null || _a === void 0 ? void 0 : _a.call(session)[themeName];
19
- const { width, views, middleComparativeHeight: synH, tracks } = model;
20
+ const { width, views, levels } = model;
20
21
  const shift = 50;
21
- const offset = headerHeight + rulerHeight;
22
+ const offset = rulerHeight;
22
23
  const { createRootFn } = getRoot(model);
23
24
  const heights = views.map(v => totalHeight(v.tracks, textHeight, trackLabels) + offset);
24
- const totalHeightSvg = sum(heights) + synH + 100;
25
+ const totalHeightSvg = sum(heights) + sum(levels.map(l => l.height)) + 100;
25
26
  const displayResults = await Promise.all(views.map(async (view) => ({
26
27
  view,
27
28
  data: await Promise.all(view.tracks.map(async (track) => {
@@ -33,50 +34,58 @@ export async function renderToSvg(model, opts) {
33
34
  };
34
35
  })),
35
36
  })));
36
- const renderings = await Promise.all(tracks.map(async (track) => {
37
+ const renderings = await Promise.all(levels.map(async (level) => await Promise.all(level.tracks.map(async (track) => {
37
38
  const d = track.displays[0];
38
39
  await when(() => (d.ready !== undefined ? d.ready : true));
39
- const r = await renderToAbstractCanvas(width, synH, { exportSVG: opts }, ctx => {
40
+ const r = await renderToAbstractCanvas(width, level.height, { exportSVG: opts }, ctx => {
40
41
  drawRef(d, ctx);
41
42
  return undefined;
42
43
  });
43
44
  if ('imageData' in r) {
44
45
  throw new Error('found a canvas in svg export, probably a bug');
45
46
  }
46
- if ('canvasRecordedData' in r) {
47
+ else if ('canvasRecordedData' in r) {
47
48
  return {
48
49
  html: await getSerializedSvg({
49
50
  ...r,
50
51
  width,
51
- height: synH,
52
+ height: level.height,
52
53
  }),
53
54
  };
54
55
  }
55
- return r;
56
- }));
57
- const trackLabelMaxLen = max(views.flatMap(view => view.tracks.map(t => measureText(getTrackName(t.configuration, session), fontSize))), 0) + 40;
56
+ else {
57
+ return r;
58
+ }
59
+ }))));
60
+ const trackLabelMaxLen = max(views.flatMap(view => view.tracks.map(track => measureText(getTrackName(track.configuration, session), fontSize))), 0) + 40;
58
61
  const trackLabelOffset = trackLabels === 'left' ? trackLabelMaxLen : 0;
59
62
  const w = width + trackLabelOffset;
60
63
  const theme = createJBrowseTheme(themeVar);
64
+ const RenderList = [
65
+ React.createElement(SVGLinearGenomeView, { rulerHeight: rulerHeight, trackLabelOffset: trackLabelOffset, shift: shift, textHeight: textHeight, trackLabels: trackLabels, displayResults: displayResults[0], key: views[0].id, view: views[0], fontSize: fontSize }),
66
+ ];
67
+ let currOffset = heights[0] + fontSize + rulerHeight;
68
+ for (let i = 1; i < views.length; i++) {
69
+ const view = views[i];
70
+ const level = levels[i - 1];
71
+ const rendering = renderings[i - 1];
72
+ const height = heights[i];
73
+ const levelHeight = level.height || 0;
74
+ RenderList.push(React.createElement("g", { key: view.id, transform: `translate(0 ${currOffset})` },
75
+ levelHeight ? (React.createElement("defs", null,
76
+ React.createElement("clipPath", { id: `synclip-${i}` },
77
+ React.createElement("rect", { x: 0, y: 0, width: width, height: levelHeight })))) : null,
78
+ React.createElement("g", { transform: `translate(${shift + trackLabelOffset} ${fontSize})`, clipPath: `url(#synclip-${i})` }, rendering === null || rendering === void 0 ? void 0 : rendering.map((r, i) => (
79
+ /* biome-ignore lint/suspicious/noArrayIndexKey: */
80
+ React.createElement(ReactRendering, { key: i, rendering: r })))),
81
+ React.createElement("g", { transform: `translate(0 ${levelHeight})` },
82
+ React.createElement(SVGLinearGenomeView, { rulerHeight: rulerHeight, shift: shift, trackLabelOffset: trackLabelOffset, textHeight: textHeight, trackLabels: trackLabels, displayResults: displayResults[i], key: view.id, view: view, fontSize: fontSize }))));
83
+ currOffset += height + fontSize + rulerHeight + levelHeight;
84
+ }
61
85
  // the xlink namespace is used for rendering <image> tag
62
86
  return renderToStaticMarkup(React.createElement(ThemeProvider, { theme: theme },
63
87
  React.createElement(Wrapper, null,
64
88
  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() },
65
89
  React.createElement(SVGBackground, { width: w, height: totalHeightSvg, shift: shift }),
66
- React.createElement("g", { transform: `translate(${shift} ${fontSize})` },
67
- React.createElement("g", { transform: `translate(${trackLabelOffset})` },
68
- React.createElement("text", { x: 0, fontSize: fontSize, ...getFillProps(theme.palette.text.primary) }, views[0].assemblyNames.join(', ')),
69
- React.createElement(SVGRuler, { model: displayResults[0].view, fontSize: fontSize })),
70
- React.createElement(SVGTracks, { textHeight: textHeight, trackLabels: trackLabels, fontSize: fontSize, model: displayResults[0].view, displayResults: displayResults[0].data, offset: offset, trackLabelOffset: trackLabelOffset })),
71
- React.createElement("defs", null,
72
- React.createElement("clipPath", { id: 'synclip' },
73
- React.createElement("rect", { x: 0, y: 0, width: width, height: synH }))),
74
- React.createElement("g", { transform: `translate(${shift + trackLabelOffset} ${fontSize + heights[0]})`, clipPath: 'url(#synclip)' }, renderings.map((r, i) => (
75
- /* biome-ignore lint/suspicious/noArrayIndexKey: */
76
- React.createElement(ReactRendering, { key: i, rendering: r })))),
77
- React.createElement("g", { transform: `translate(${shift} ${fontSize + heights[0] + synH})` },
78
- React.createElement("g", { transform: `translate(${trackLabelOffset})` },
79
- React.createElement("text", { x: 0, fontSize: fontSize, ...getFillProps(theme.palette.text.primary) }, views[1].assemblyNames.join(', ')),
80
- React.createElement(SVGRuler, { model: displayResults[1].view, fontSize: fontSize })),
81
- React.createElement(SVGTracks, { textHeight: textHeight, trackLabels: trackLabels, fontSize: fontSize, model: displayResults[1].view, displayResults: displayResults[1].data, offset: offset, trackLabelOffset: trackLabelOffset }))))), createRootFn);
90
+ RenderList))), createRootFn);
82
91
  }
@@ -0,0 +1,2 @@
1
+ import PluginManager from '@jbrowse/core/PluginManager';
2
+ export default function LinearSyntenyViewF(pluginManager: PluginManager): void;
@@ -0,0 +1,19 @@
1
+ import React from 'react';
2
+ import ViewType from '@jbrowse/core/pluggableElementTypes/ViewType';
3
+ import { linearSyntenyViewHelperModelFactory } from './stateModelFactory';
4
+ function UnusedComponent() {
5
+ return React.createElement("div", null);
6
+ }
7
+ export default function LinearSyntenyViewF(pluginManager) {
8
+ pluginManager.addViewType(() => {
9
+ return new ViewType({
10
+ name: 'LinearSyntenyViewHelper',
11
+ displayName: 'Linear synteny view (helper)',
12
+ viewMetadata: {
13
+ hiddenFromGUI: true,
14
+ },
15
+ stateModel: linearSyntenyViewHelperModelFactory(pluginManager),
16
+ ReactComponent: UnusedComponent,
17
+ });
18
+ });
19
+ }
@@ -0,0 +1,30 @@
1
+ import { Instance } from 'mobx-state-tree';
2
+ import PluginManager from '@jbrowse/core/PluginManager';
3
+ export declare function linearSyntenyViewHelperModelFactory(pluginManager: PluginManager): import("mobx-state-tree").IModelType<{
4
+ id: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
5
+ type: import("mobx-state-tree").IType<string | undefined, string, string>;
6
+ tracks: import("mobx-state-tree").IArrayType<import("mobx-state-tree").IAnyType>;
7
+ height: import("mobx-state-tree").IType<number | undefined, number, number>;
8
+ level: import("mobx-state-tree").ISimpleType<number>;
9
+ }, {
10
+ /**
11
+ * #action
12
+ */
13
+ setHeight(n: number): number;
14
+ /**
15
+ * #action
16
+ */
17
+ showTrack(trackId: string, initialSnapshot?: {}): void;
18
+ /**
19
+ * #action
20
+ */
21
+ hideTrack(trackId: string): number;
22
+ /**
23
+ * #action
24
+ */
25
+ toggleTrack(trackId: string): boolean;
26
+ } & {
27
+ readonly assemblyNames: (string | undefined)[];
28
+ }, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>;
29
+ export type LinearSyntenyViewHelperStateModel = ReturnType<typeof linearSyntenyViewHelperModelFactory>;
30
+ export type LinearSyntenyViewHelperModel = Instance<LinearSyntenyViewHelperStateModel>;
@@ -0,0 +1,102 @@
1
+ import { getRoot, resolveIdentifier, types, getParent, } from 'mobx-state-tree';
2
+ import { transaction } from 'mobx';
3
+ import { ElementId } from '@jbrowse/core/util/types/mst';
4
+ export function linearSyntenyViewHelperModelFactory(pluginManager) {
5
+ return types
6
+ .model('LinearSyntenyViewHelper', {
7
+ /**
8
+ * #property
9
+ */
10
+ id: ElementId,
11
+ /**
12
+ * #property
13
+ */
14
+ type: 'LinearSyntenyViewHelper',
15
+ /**
16
+ * #property
17
+ */
18
+ tracks: types.array(pluginManager.pluggableMstType('track', 'stateModel')),
19
+ /**
20
+ * #property
21
+ */
22
+ height: 100,
23
+ /**
24
+ * #property
25
+ */
26
+ level: types.number,
27
+ })
28
+ .actions(self => ({
29
+ /**
30
+ * #action
31
+ */
32
+ setHeight(n) {
33
+ self.height = n;
34
+ return self.height;
35
+ },
36
+ /**
37
+ * #action
38
+ */
39
+ showTrack(trackId, initialSnapshot = {}) {
40
+ const schema = pluginManager.pluggableConfigSchemaType('track');
41
+ const configuration = resolveIdentifier(schema, getRoot(self), trackId);
42
+ if (!configuration) {
43
+ throw new Error(`track not found ${trackId}`);
44
+ }
45
+ const trackType = pluginManager.getTrackType(configuration.type);
46
+ if (!trackType) {
47
+ throw new Error(`unknown track type ${configuration.type}`);
48
+ }
49
+ const viewType = pluginManager.getViewType(self.type);
50
+ const supportedDisplays = new Set(viewType.displayTypes.map(d => d.name));
51
+ const displayConf = configuration.displays.find((d) => supportedDisplays.has(d.type));
52
+ if (!displayConf) {
53
+ throw new Error(`could not find a compatible display for view type ${self.type}`);
54
+ }
55
+ self.tracks.push(trackType.stateModel.create({
56
+ ...initialSnapshot,
57
+ type: configuration.type,
58
+ configuration,
59
+ displays: [
60
+ {
61
+ type: displayConf.type,
62
+ configuration: displayConf,
63
+ },
64
+ ],
65
+ }));
66
+ },
67
+ /**
68
+ * #action
69
+ */
70
+ hideTrack(trackId) {
71
+ const schema = pluginManager.pluggableConfigSchemaType('track');
72
+ const config = resolveIdentifier(schema, getRoot(self), trackId);
73
+ const shownTracks = self.tracks.filter(t => t.configuration === config);
74
+ transaction(() => {
75
+ shownTracks.forEach(t => {
76
+ self.tracks.remove(t);
77
+ });
78
+ });
79
+ return shownTracks.length;
80
+ },
81
+ /**
82
+ * #action
83
+ */
84
+ toggleTrack(trackId) {
85
+ const hiddenCount = this.hideTrack(trackId);
86
+ if (!hiddenCount) {
87
+ this.showTrack(trackId);
88
+ return true;
89
+ }
90
+ return false;
91
+ },
92
+ }))
93
+ .views(self => ({
94
+ get assemblyNames() {
95
+ const p = getParent(self, 2);
96
+ return [
97
+ p.views[self.level].assemblyNames[0],
98
+ p.views[self.level + 1].assemblyNames[0],
99
+ ];
100
+ },
101
+ }));
102
+ }
@@ -0,0 +1,14 @@
1
+ import React from 'react';
2
+ import { SimpleFeatureSerialized } from '@jbrowse/core/util';
3
+ interface SyntenyFeatureDetailModel {
4
+ trackId: string;
5
+ featureData: SimpleFeatureSerialized;
6
+ level?: number;
7
+ view: {
8
+ type: string;
9
+ };
10
+ }
11
+ declare const SyntenyFeatureDetail: ({ model, }: {
12
+ model: SyntenyFeatureDetailModel;
13
+ }) => React.JSX.Element;
14
+ export default SyntenyFeatureDetail;