@weng-lab/genomebrowser-ui 0.3.6 → 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 (86) hide show
  1. package/.env.local +1 -1
  2. package/dist/TrackSelect/Folders/biosamples/shared/BiosampleViewSelector.d.ts +7 -0
  3. package/dist/TrackSelect/Folders/biosamples/shared/createFolder.d.ts +1 -13
  4. package/dist/TrackSelect/Folders/biosamples/shared/toTrack.d.ts +20 -0
  5. package/dist/TrackSelect/Folders/biosamples/shared/types.d.ts +4 -13
  6. package/dist/TrackSelect/Folders/genes/shared/createFolder.d.ts +1 -3
  7. package/dist/TrackSelect/Folders/genes/shared/toTrack.d.ts +18 -0
  8. package/dist/TrackSelect/Folders/index.d.ts +6 -12
  9. package/dist/TrackSelect/Folders/mohd/data/human.json.d.ts +2948 -0
  10. package/dist/TrackSelect/Folders/mohd/human.d.ts +1 -0
  11. package/dist/TrackSelect/Folders/mohd/shared/MohdGroupingCell.d.ts +2 -0
  12. package/dist/TrackSelect/Folders/mohd/shared/MohdTreeItem.d.ts +3 -0
  13. package/dist/TrackSelect/Folders/mohd/shared/MohdViewSelector.d.ts +7 -0
  14. package/dist/TrackSelect/Folders/mohd/shared/columns.d.ts +5 -0
  15. package/dist/TrackSelect/Folders/mohd/shared/config.d.ts +42 -0
  16. package/dist/TrackSelect/Folders/mohd/shared/createFolder.d.ts +9 -0
  17. package/dist/TrackSelect/Folders/mohd/shared/toTrack.d.ts +9 -0
  18. package/dist/TrackSelect/Folders/mohd/shared/types.d.ts +40 -0
  19. package/dist/TrackSelect/Folders/other-tracks/shared/toTrack.d.ts +5 -0
  20. package/dist/TrackSelect/Folders/other-tracks/shared/types.d.ts +1 -0
  21. package/dist/TrackSelect/Folders/types.d.ts +23 -55
  22. package/dist/TrackSelect/TrackSelect.d.ts +10 -7
  23. package/dist/TrackSelect/TreeView/TreeViewWrapper.d.ts +1 -1
  24. package/dist/TrackSelect/buildSelectedTree.d.ts +15 -0
  25. package/dist/TrackSelect/managedTracks.d.ts +13 -0
  26. package/dist/TrackSelect/resolveFolderView.d.ts +2 -0
  27. package/dist/TrackSelect/trackContext.d.ts +5 -0
  28. package/dist/TrackSelect/types.d.ts +12 -33
  29. package/dist/genomebrowser-ui.es.js +2224 -1717
  30. package/dist/genomebrowser-ui.es.js.map +1 -1
  31. package/dist/lib.d.ts +4 -4
  32. package/dist/muiLicense.d.ts +1 -0
  33. package/package.json +6 -3
  34. package/src/TrackSelect/Dialogs/ResetDialog.tsx +3 -2
  35. package/src/TrackSelect/FolderList/FolderCard.tsx +1 -1
  36. package/src/TrackSelect/Folders/biosamples/shared/BiosampleViewSelector.tsx +33 -0
  37. package/src/TrackSelect/Folders/biosamples/shared/createFolder.ts +39 -58
  38. package/src/TrackSelect/Folders/biosamples/shared/toTrack.ts +138 -0
  39. package/src/TrackSelect/Folders/biosamples/shared/types.ts +4 -16
  40. package/src/TrackSelect/Folders/genes/shared/createFolder.ts +10 -31
  41. package/src/TrackSelect/Folders/genes/shared/toTrack.ts +59 -0
  42. package/src/TrackSelect/Folders/index.ts +14 -17
  43. package/src/TrackSelect/Folders/mohd/data/human.json +2945 -0
  44. package/src/TrackSelect/Folders/mohd/human.ts +10 -0
  45. package/src/TrackSelect/Folders/mohd/shared/MohdGroupingCell.tsx +68 -0
  46. package/src/TrackSelect/Folders/mohd/shared/MohdTreeItem.tsx +17 -0
  47. package/src/TrackSelect/Folders/mohd/shared/MohdViewSelector.tsx +33 -0
  48. package/src/TrackSelect/Folders/mohd/shared/columns.tsx +79 -0
  49. package/src/TrackSelect/Folders/mohd/shared/config.tsx +71 -0
  50. package/src/TrackSelect/Folders/mohd/shared/createFolder.ts +144 -0
  51. package/src/TrackSelect/Folders/mohd/shared/toTrack.ts +164 -0
  52. package/src/TrackSelect/Folders/mohd/shared/types.ts +46 -0
  53. package/src/TrackSelect/Folders/other-tracks/shared/createFolder.ts +13 -14
  54. package/src/TrackSelect/Folders/other-tracks/shared/toTrack.ts +17 -0
  55. package/src/TrackSelect/Folders/other-tracks/shared/types.ts +1 -0
  56. package/src/TrackSelect/Folders/types.ts +26 -69
  57. package/src/TrackSelect/TrackSelect.tsx +299 -255
  58. package/src/TrackSelect/TreeView/CustomTreeItem.tsx +6 -6
  59. package/src/TrackSelect/TreeView/TreeViewWrapper.tsx +84 -6
  60. package/src/TrackSelect/buildSelectedTree.ts +145 -0
  61. package/src/TrackSelect/managedTracks.ts +92 -0
  62. package/src/TrackSelect/resolveFolderView.ts +20 -0
  63. package/src/TrackSelect/trackContext.ts +9 -0
  64. package/src/TrackSelect/types.ts +14 -39
  65. package/src/lib.ts +13 -7
  66. package/src/muiLicense.ts +9 -0
  67. package/src/vite-env.d.ts +9 -0
  68. package/test/TrackSelect.test.tsx +435 -0
  69. package/test/main.tsx +36 -352
  70. package/test/mocks/logo-test.tsx +11 -0
  71. package/test/mohdDisplay.test.tsx +45 -0
  72. package/test/startup.test.ts +206 -0
  73. package/test/trackSelectState.test.ts +176 -0
  74. package/vite.config.ts +1 -0
  75. package/vitest.config.ts +20 -0
  76. package/dist/TrackSelect/Folders/biosamples/shared/AssayToggle.d.ts +0 -18
  77. package/dist/TrackSelect/Folders/biosamples/shared/treeBuilder.d.ts +0 -28
  78. package/dist/TrackSelect/Folders/genes/shared/treeBuilder.d.ts +0 -13
  79. package/dist/TrackSelect/Folders/other-tracks/shared/treeBuilder.d.ts +0 -4
  80. package/dist/TrackSelect/store.d.ts +0 -4
  81. package/src/TrackSelect/Folders/NEW.md +0 -929
  82. package/src/TrackSelect/Folders/biosamples/shared/AssayToggle.tsx +0 -78
  83. package/src/TrackSelect/Folders/biosamples/shared/treeBuilder.ts +0 -224
  84. package/src/TrackSelect/Folders/genes/shared/treeBuilder.ts +0 -45
  85. package/src/TrackSelect/Folders/other-tracks/shared/treeBuilder.ts +0 -34
  86. package/src/TrackSelect/store.ts +0 -117
@@ -1,5 +1,6 @@
1
1
  export type OtherTrackInfo = {
2
2
  id: string;
3
+ sourceId?: string;
3
4
  name: string;
4
5
  description: string;
5
6
  };
@@ -1,23 +1,22 @@
1
1
  import { GridColDef, GridRenderCellParams } from "@mui/x-data-grid-premium";
2
- import { TreeViewBaseItem } from "@mui/x-tree-view";
3
- import { ExtendedTreeItemProps, CustomTreeItemProps } from "../types";
2
+ import { Track } from "@weng-lab/genomebrowser";
3
+ import type { TrackSelectTrackContext } from "../trackContext";
4
+ import { CustomTreeItemProps } from "../types";
4
5
 
5
6
  export type Assembly = "GRCh38" | "mm10";
6
7
 
7
- /**
8
- * Runtime configuration that can be modified by ToolbarExtras components.
9
- * This allows folder-specific UI (like AssayToggle) to dynamically update
10
- * how the DataGrid and TreeView display data.
11
- */
12
- export interface FolderRuntimeConfig {
8
+ export interface FolderView {
9
+ id: string;
10
+ label: string;
13
11
  columns: GridColDef[];
14
12
  groupingModel: string[];
15
13
  leafField: string;
16
- /** Optional override for the tree builder function */
17
- buildTree?: (
18
- selectedIds: string[],
19
- rowById: Map<string, any>,
20
- ) => TreeViewBaseItem<ExtendedTreeItemProps>[];
14
+ }
15
+
16
+ /** Options passed to folder-owned track factories. */
17
+ export interface CreateTrackOptions {
18
+ assembly: Assembly;
19
+ trackContext?: TrackSelectTrackContext;
21
20
  }
22
21
 
23
22
  /**
@@ -30,77 +29,35 @@ export interface FolderRuntimeConfig {
30
29
  * @template TRow - The type of row data stored in this folder
31
30
  */
32
31
  export interface FolderDefinition<TRow = any> {
33
- /** Unique identifier for this folder */
34
32
  id: string;
35
-
36
- /** Display label shown in the UI */
37
33
  label: string;
38
-
39
- /** Optional description shown in folder cards */
40
34
  description?: string;
41
-
42
- /**
43
- * Single source of truth for all row data.
44
- * Maps row ID to the full row object.
45
- */
46
- rowById: Map<string, TRow>;
47
-
48
- /**
49
- * Function to extract the unique ID from a row object.
50
- * Used for selection tracking and lookups.
51
- */
52
- getRowId: (row: TRow) => string;
53
-
54
- /** Column definitions for the DataGrid */
35
+ rows: TRow[];
55
36
  columns: GridColDef[];
56
-
57
- /** Fields to group by in the DataGrid (row grouping) */
58
37
  groupingModel: string[];
59
-
60
- /** The field that represents the leaf level in the grouping hierarchy */
61
38
  leafField: string;
62
39
 
63
40
  /**
64
- * Builds a tree structure from selected row IDs.
65
- * Used to display selected items in the TreeView panel.
41
+ * Creates a browser track from a folder row.
66
42
  *
67
- * @param selectedIds - Array of selected row IDs
68
- * @param rowById - Map of row ID to row data (same as this.rowById)
69
- * @returns Array of tree items to render in the TreeView
43
+ * This keeps folder-specific track creation logic colocated with the
44
+ * folder's data and presentation logic instead of requiring consumers to
45
+ * branch on folder IDs.
70
46
  */
71
- buildTree: (
72
- selectedIds: string[],
73
- rowById: Map<string, TRow>,
74
- ) => TreeViewBaseItem<ExtendedTreeItemProps>[];
47
+ createTrack: (row: TRow, options: CreateTrackOptions) => Track | null;
75
48
 
76
- /**
77
- * Optional component to render folder-specific toolbar controls.
78
- * For example, biosamples folder uses this to render an assay toggle
79
- * that switches between sample-grouped and assay-grouped views.
80
- *
81
- * @param updateConfig - Callback to update the folder's runtime config
82
- * @param folderId - The folder's unique identifier
83
- * @param label - The folder's display label
84
- * @param config - The current runtime config for this folder
85
- */
86
- ToolbarExtras?: React.FC<{
87
- updateConfig: (partial: Partial<FolderRuntimeConfig>) => void;
88
- folderId: string;
89
- label: string;
90
- config: FolderRuntimeConfig;
49
+ views?: FolderView[];
50
+ ViewSelector?: React.FC<{
51
+ views: FolderView[];
52
+ activeViewId: string;
53
+ onChange: (viewId: string) => void;
91
54
  }>;
92
55
 
93
- /**
94
- * Optional custom component for rendering grouping cells in the DataGrid.
95
- * If not provided, a default grouping cell renderer will be used.
96
- */
97
56
  GroupingCellComponent?: React.FC<GridRenderCellParams>;
98
-
99
- /**
100
- * Optional custom TreeItem component for the TreeView.
101
- * If not provided, the default CustomTreeItem will be used.
102
- */
103
57
  TreeItemComponent?: React.ForwardRefExoticComponent<
104
58
  CustomTreeItemProps & React.RefAttributes<HTMLLIElement>
105
59
  >;
60
+ LeafTreeItemComponent?: React.ForwardRefExoticComponent<
61
+ CustomTreeItemProps & React.RefAttributes<HTMLLIElement>
62
+ >;
106
63
  }