@weng-lab/genomebrowser-ui 0.3.6-beta.0 → 0.4.0-beta.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 (90) hide show
  1. package/.env.local +1 -1
  2. package/dist/TrackSelect/Custom/TfPeaks.d.ts +1 -2
  3. package/dist/TrackSelect/Custom/green-motifs.json.d.ts +20430 -0
  4. package/dist/TrackSelect/Folders/biosamples/shared/BiosampleViewSelector.d.ts +7 -0
  5. package/dist/TrackSelect/Folders/biosamples/shared/createFolder.d.ts +1 -13
  6. package/dist/TrackSelect/Folders/biosamples/shared/toTrack.d.ts +20 -0
  7. package/dist/TrackSelect/Folders/biosamples/shared/types.d.ts +4 -13
  8. package/dist/TrackSelect/Folders/genes/shared/createFolder.d.ts +1 -3
  9. package/dist/TrackSelect/Folders/genes/shared/toTrack.d.ts +18 -0
  10. package/dist/TrackSelect/Folders/index.d.ts +6 -12
  11. package/dist/TrackSelect/Folders/mohd/data/human.json.d.ts +2948 -0
  12. package/dist/TrackSelect/Folders/mohd/human.d.ts +1 -0
  13. package/dist/TrackSelect/Folders/mohd/shared/MohdGroupingCell.d.ts +2 -0
  14. package/dist/TrackSelect/Folders/mohd/shared/MohdTreeItem.d.ts +3 -0
  15. package/dist/TrackSelect/Folders/mohd/shared/MohdViewSelector.d.ts +7 -0
  16. package/dist/TrackSelect/Folders/mohd/shared/columns.d.ts +5 -0
  17. package/dist/TrackSelect/Folders/mohd/shared/config.d.ts +42 -0
  18. package/dist/TrackSelect/Folders/mohd/shared/createFolder.d.ts +9 -0
  19. package/dist/TrackSelect/Folders/mohd/shared/toTrack.d.ts +9 -0
  20. package/dist/TrackSelect/Folders/mohd/shared/types.d.ts +40 -0
  21. package/dist/TrackSelect/Folders/other-tracks/shared/toTrack.d.ts +5 -0
  22. package/dist/TrackSelect/Folders/other-tracks/shared/types.d.ts +1 -0
  23. package/dist/TrackSelect/Folders/types.d.ts +23 -55
  24. package/dist/TrackSelect/TrackSelect.d.ts +10 -7
  25. package/dist/TrackSelect/TreeView/TreeViewWrapper.d.ts +1 -1
  26. package/dist/TrackSelect/buildSelectedTree.d.ts +15 -0
  27. package/dist/TrackSelect/managedTracks.d.ts +13 -0
  28. package/dist/TrackSelect/resolveFolderView.d.ts +2 -0
  29. package/dist/TrackSelect/trackContext.d.ts +5 -0
  30. package/dist/TrackSelect/types.d.ts +12 -33
  31. package/dist/genomebrowser-ui.es.js +2470 -2258
  32. package/dist/genomebrowser-ui.es.js.map +1 -1
  33. package/dist/lib.d.ts +4 -4
  34. package/dist/muiLicense.d.ts +1 -0
  35. package/package.json +6 -3
  36. package/src/TrackSelect/Custom/TfPeaks.tsx +81 -60
  37. package/src/TrackSelect/Dialogs/ResetDialog.tsx +3 -2
  38. package/src/TrackSelect/FolderList/FolderCard.tsx +1 -1
  39. package/src/TrackSelect/Folders/biosamples/shared/BiosampleViewSelector.tsx +33 -0
  40. package/src/TrackSelect/Folders/biosamples/shared/createFolder.ts +39 -58
  41. package/src/TrackSelect/Folders/biosamples/shared/toTrack.ts +138 -0
  42. package/src/TrackSelect/Folders/biosamples/shared/types.ts +4 -16
  43. package/src/TrackSelect/Folders/genes/shared/createFolder.ts +10 -31
  44. package/src/TrackSelect/Folders/genes/shared/toTrack.ts +59 -0
  45. package/src/TrackSelect/Folders/index.ts +15 -18
  46. package/src/TrackSelect/Folders/mohd/data/human.json +2945 -0
  47. package/src/TrackSelect/Folders/mohd/human.ts +10 -0
  48. package/src/TrackSelect/Folders/mohd/shared/MohdGroupingCell.tsx +68 -0
  49. package/src/TrackSelect/Folders/mohd/shared/MohdTreeItem.tsx +17 -0
  50. package/src/TrackSelect/Folders/mohd/shared/MohdViewSelector.tsx +33 -0
  51. package/src/TrackSelect/Folders/mohd/shared/columns.tsx +79 -0
  52. package/src/TrackSelect/Folders/mohd/shared/config.tsx +71 -0
  53. package/src/TrackSelect/Folders/mohd/shared/createFolder.ts +144 -0
  54. package/src/TrackSelect/Folders/mohd/shared/toTrack.ts +164 -0
  55. package/src/TrackSelect/Folders/mohd/shared/types.ts +46 -0
  56. package/src/TrackSelect/Folders/other-tracks/shared/createFolder.ts +13 -14
  57. package/src/TrackSelect/Folders/other-tracks/shared/toTrack.ts +17 -0
  58. package/src/TrackSelect/Folders/other-tracks/shared/types.ts +1 -0
  59. package/src/TrackSelect/Folders/types.ts +26 -69
  60. package/src/TrackSelect/TrackSelect.tsx +299 -255
  61. package/src/TrackSelect/TreeView/CustomTreeItem.tsx +6 -6
  62. package/src/TrackSelect/TreeView/TreeViewWrapper.tsx +84 -6
  63. package/src/TrackSelect/buildSelectedTree.ts +145 -0
  64. package/src/TrackSelect/managedTracks.ts +92 -0
  65. package/src/TrackSelect/resolveFolderView.ts +20 -0
  66. package/src/TrackSelect/trackContext.ts +9 -0
  67. package/src/TrackSelect/types.ts +14 -39
  68. package/src/lib.ts +13 -7
  69. package/src/muiLicense.ts +9 -0
  70. package/src/vite-env.d.ts +9 -0
  71. package/test/TrackSelect.test.tsx +435 -0
  72. package/test/main.tsx +37 -353
  73. package/test/mocks/logo-test.tsx +11 -0
  74. package/test/mohdDisplay.test.tsx +45 -0
  75. package/test/startup.test.ts +206 -0
  76. package/test/trackSelectState.test.ts +176 -0
  77. package/vite.config.ts +1 -0
  78. package/vitest.config.ts +20 -0
  79. package/dist/TrackSelect/Custom/TF-ChIP-Canonical-Motifs-w-Trimmed.json.d.ts +0 -42210
  80. package/dist/TrackSelect/Folders/biosamples/shared/AssayToggle.d.ts +0 -18
  81. package/dist/TrackSelect/Folders/biosamples/shared/treeBuilder.d.ts +0 -28
  82. package/dist/TrackSelect/Folders/genes/shared/treeBuilder.d.ts +0 -13
  83. package/dist/TrackSelect/Folders/other-tracks/shared/treeBuilder.d.ts +0 -4
  84. package/dist/TrackSelect/store.d.ts +0 -4
  85. package/src/TrackSelect/Folders/NEW.md +0 -929
  86. package/src/TrackSelect/Folders/biosamples/shared/AssayToggle.tsx +0 -78
  87. package/src/TrackSelect/Folders/biosamples/shared/treeBuilder.ts +0 -224
  88. package/src/TrackSelect/Folders/genes/shared/treeBuilder.ts +0 -45
  89. package/src/TrackSelect/Folders/other-tracks/shared/treeBuilder.ts +0 -34
  90. package/src/TrackSelect/store.ts +0 -117
@@ -5,32 +5,19 @@ import {
5
5
  defaultGroupingModel,
6
6
  defaultLeafField,
7
7
  } from "./columns";
8
- import { buildTreeView } from "./treeBuilder";
8
+ import { createGeneTrack } from "./toTrack";
9
9
 
10
- /**
11
- * Transforms a single track from JSON into a row for DataGrid
12
- * For genes, this is a 1:1 mapping (no flattening needed)
13
- */
14
- function trackToRow(track: GeneTrackInfo): GeneRowInfo {
10
+ /** Genes map 1:1 from JSON track entries to table rows. */
11
+ function trackToRow(folderId: string, track: GeneTrackInfo): GeneRowInfo {
15
12
  return {
16
- id: track.id,
13
+ id: `${folderId}/${track.id}`,
17
14
  displayName: track.displayName,
18
15
  versions: track.versions,
19
16
  };
20
17
  }
21
18
 
22
- /**
23
- * Transforms raw JSON data into rows and lookup map
24
- */
25
- function transformData(data: GeneDataFile): {
26
- rows: GeneRowInfo[];
27
- rowById: Map<string, GeneRowInfo>;
28
- } {
29
- const rows = data.map(trackToRow);
30
- const rowById = new Map<string, GeneRowInfo>(
31
- rows.map((row) => [row.id, row]),
32
- );
33
- return { rows, rowById };
19
+ function transformData(folderId: string, data: GeneDataFile): GeneRowInfo[] {
20
+ return data.map((track) => trackToRow(folderId, track));
34
21
  }
35
22
 
36
23
  export interface CreateGeneFolderOptions {
@@ -40,29 +27,21 @@ export interface CreateGeneFolderOptions {
40
27
  data: GeneDataFile;
41
28
  }
42
29
 
43
- /**
44
- * Factory function that creates a FolderDefinition for genes
45
- */
30
+ /** Build a gene folder with its row lookup, tree, and track factory. */
46
31
  export function createGeneFolder(
47
32
  options: CreateGeneFolderOptions,
48
33
  ): FolderDefinition<GeneRowInfo> {
49
34
  const { id, label, description, data } = options;
50
- const { rowById } = transformData(data);
35
+ const rows = transformData(id, data);
51
36
 
52
37
  return {
53
38
  id,
54
39
  label,
55
40
  description,
56
- rowById,
57
- getRowId: (row) => row.id,
58
-
59
- // Default view configuration
41
+ rows,
60
42
  columns: defaultColumns,
61
43
  groupingModel: defaultGroupingModel,
62
44
  leafField: defaultLeafField,
63
-
64
- // Tree builder for selected items panel
65
- buildTree: (selectedIds, rowById) =>
66
- buildTreeView(selectedIds, rowById, label),
45
+ createTrack: createGeneTrack,
67
46
  };
68
47
  }
@@ -0,0 +1,59 @@
1
+ import {
2
+ DisplayMode,
3
+ Track,
4
+ TrackType,
5
+ Transcript,
6
+ TranscriptConfig,
7
+ } from "@weng-lab/genomebrowser";
8
+ import type { FC } from "react";
9
+ import { CreateTrackOptions } from "../../types";
10
+ import { GeneRowInfo } from "./types";
11
+
12
+ export type GeneTrackContext = {
13
+ onGeneClick?: (args: {
14
+ trackId: string;
15
+ row: GeneRowInfo;
16
+ transcript: Transcript;
17
+ }) => void;
18
+ onGeneHover?: (args: {
19
+ trackId: string;
20
+ row: GeneRowInfo;
21
+ transcript: Transcript;
22
+ }) => void;
23
+ geneTooltip?: FC<Transcript>;
24
+ };
25
+
26
+ const defaultTranscript: Omit<TranscriptConfig, "id" | "assembly" | "version"> =
27
+ {
28
+ title: "GENCODE Genes",
29
+ trackType: TrackType.Transcript,
30
+ displayMode: DisplayMode.Squish,
31
+ height: 100,
32
+ color: "#0c184a",
33
+ canonicalColor: "#100e98",
34
+ highlightColor: "#3c69e8",
35
+ titleSize: 12,
36
+ };
37
+
38
+ export function createGeneTrack(
39
+ row: GeneRowInfo,
40
+ options: CreateTrackOptions,
41
+ ): Track {
42
+ const trackContext = options.trackContext;
43
+
44
+ return {
45
+ ...defaultTranscript,
46
+ id: row.id,
47
+ assembly: options.assembly,
48
+ version: row.versions[row.versions.length - 1],
49
+ onClick: trackContext?.onGeneClick
50
+ ? (transcript: Transcript) =>
51
+ trackContext.onGeneClick?.({ trackId: row.id, row, transcript })
52
+ : undefined,
53
+ onHover: trackContext?.onGeneHover
54
+ ? (transcript: Transcript) =>
55
+ trackContext.onGeneHover?.({ trackId: row.id, row, transcript })
56
+ : undefined,
57
+ tooltip: trackContext?.geneTooltip,
58
+ };
59
+ }
@@ -4,29 +4,26 @@ import { mouseBiosamplesFolder } from "./biosamples/mouse";
4
4
  import { humanGenesFolder } from "./genes/human";
5
5
  import { mouseGenesFolder } from "./genes/mouse";
6
6
  import { humanOtherTracksFolder } from "./other-tracks/human";
7
+ import { humanMohdFolder } from "./mohd/human";
7
8
 
8
- export {
9
- type Assembly,
10
- type FolderDefinition,
11
- type FolderRuntimeConfig,
12
- } from "./types";
9
+ export { type Assembly, type FolderDefinition, type FolderView } from "./types";
13
10
 
14
11
  export type { BiosampleRowInfo } from "./biosamples/shared/types";
12
+ export type { BiosampleTrackContext } from "./biosamples/shared/toTrack";
15
13
  export type { GeneRowInfo } from "./genes/shared/types";
14
+ export type { GeneTrackContext } from "./genes/shared/toTrack";
15
+ export type { MohdRowInfo } from "./mohd/shared/types";
16
+ export type { MohdTrackContext } from "./mohd/shared/toTrack";
16
17
  export type { OtherTrackInfo } from "./other-tracks/shared/types";
18
+ export type { OtherTracksTrackContext } from "./other-tracks/shared/toTrack";
17
19
 
18
- /**
19
- * Registry of folders available for each assembly.
20
- *
21
- * Each assembly can have multiple folders (e.g., biosamples, genes, etc.).
22
- * TrackSelect receives the folders for the current assembly and renders
23
- * them as tabs or a folder selector.
24
- *
25
- * To add a new folder:
26
- * 1. Create a folder config file (e.g., folders/genes/human.ts)
27
- * 2. Import and add it to the appropriate assembly array below
28
- */
20
+ // Registry of folders by assembly
29
21
  export const foldersByAssembly: Record<Assembly, FolderDefinition[]> = {
30
- GRCh38: [humanBiosamplesFolder, humanGenesFolder, humanOtherTracksFolder],
31
- mm10: [mouseBiosamplesFolder, mouseGenesFolder],
22
+ GRCh38: [
23
+ humanGenesFolder,
24
+ humanBiosamplesFolder,
25
+ humanMohdFolder,
26
+ humanOtherTracksFolder,
27
+ ],
28
+ mm10: [mouseGenesFolder, mouseBiosamplesFolder],
32
29
  };