@jbrowse/plugin-data-management 2.3.2 → 2.3.4

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 (222) hide show
  1. package/dist/AddConnectionWidget/index.d.ts +3 -2
  2. package/dist/AddConnectionWidget/index.js +38 -4
  3. package/dist/AddConnectionWidget/index.js.map +1 -1
  4. package/dist/AddTrackWidget/components/DefaultAddTrackWorkflow.js +1 -4
  5. package/dist/AddTrackWidget/components/DefaultAddTrackWorkflow.js.map +1 -1
  6. package/dist/AddTrackWidget/components/TrackSourceSelect.js +1 -4
  7. package/dist/AddTrackWidget/components/TrackSourceSelect.js.map +1 -1
  8. package/dist/AddTrackWidget/index.d.ts +3 -2
  9. package/dist/AddTrackWidget/index.js +38 -4
  10. package/dist/AddTrackWidget/index.js.map +1 -1
  11. package/dist/HierarchicalTrackSelectorWidget/components/HierarchicalFab.d.ts +6 -0
  12. package/dist/HierarchicalTrackSelectorWidget/components/HierarchicalFab.js +71 -0
  13. package/dist/HierarchicalTrackSelectorWidget/components/HierarchicalFab.js.map +1 -0
  14. package/dist/HierarchicalTrackSelectorWidget/components/HierarchicalTrackSelector.js +10 -104
  15. package/dist/HierarchicalTrackSelectorWidget/components/HierarchicalTrackSelector.js.map +1 -1
  16. package/dist/HierarchicalTrackSelectorWidget/components/ShoppingCart.d.ts +6 -0
  17. package/dist/HierarchicalTrackSelectorWidget/components/ShoppingCart.js +70 -0
  18. package/dist/HierarchicalTrackSelectorWidget/components/ShoppingCart.js.map +1 -0
  19. package/dist/HierarchicalTrackSelectorWidget/components/{CloseConnectionDialog.d.ts → dialogs/CloseConnectionDialog.d.ts} +0 -0
  20. package/dist/HierarchicalTrackSelectorWidget/components/{CloseConnectionDialog.js → dialogs/CloseConnectionDialog.js} +0 -0
  21. package/dist/HierarchicalTrackSelectorWidget/components/dialogs/CloseConnectionDialog.js.map +1 -0
  22. package/dist/HierarchicalTrackSelectorWidget/components/{DeleteConnectionDialog.d.ts → dialogs/DeleteConnectionDialog.d.ts} +0 -0
  23. package/dist/HierarchicalTrackSelectorWidget/components/{DeleteConnectionDialog.js → dialogs/DeleteConnectionDialog.js} +0 -0
  24. package/dist/HierarchicalTrackSelectorWidget/components/dialogs/DeleteConnectionDialog.js.map +1 -0
  25. package/dist/HierarchicalTrackSelectorWidget/components/{ManageConnectionsDialog.d.ts → dialogs/ManageConnectionsDialog.d.ts} +0 -0
  26. package/dist/HierarchicalTrackSelectorWidget/components/{ManageConnectionsDialog.js → dialogs/ManageConnectionsDialog.js} +0 -0
  27. package/dist/HierarchicalTrackSelectorWidget/components/dialogs/ManageConnectionsDialog.js.map +1 -0
  28. package/dist/HierarchicalTrackSelectorWidget/components/{ToggleConnectionsDialog.d.ts → dialogs/ToggleConnectionsDialog.d.ts} +0 -0
  29. package/dist/HierarchicalTrackSelectorWidget/components/{ToggleConnectionsDialog.js → dialogs/ToggleConnectionsDialog.js} +0 -0
  30. package/dist/HierarchicalTrackSelectorWidget/components/dialogs/ToggleConnectionsDialog.js.map +1 -0
  31. package/dist/HierarchicalTrackSelectorWidget/components/faceted/FacetFilters.d.ts +13 -0
  32. package/dist/HierarchicalTrackSelectorWidget/components/faceted/FacetFilters.js +99 -0
  33. package/dist/HierarchicalTrackSelectorWidget/components/faceted/FacetFilters.js.map +1 -0
  34. package/dist/HierarchicalTrackSelectorWidget/components/faceted/FacetedDialog.d.ts +8 -0
  35. package/dist/HierarchicalTrackSelectorWidget/components/faceted/FacetedDialog.js +18 -0
  36. package/dist/HierarchicalTrackSelectorWidget/components/faceted/FacetedDialog.js.map +1 -0
  37. package/dist/HierarchicalTrackSelectorWidget/components/faceted/FacetedHeader.d.ts +11 -0
  38. package/dist/HierarchicalTrackSelectorWidget/components/faceted/FacetedHeader.js +71 -0
  39. package/dist/HierarchicalTrackSelectorWidget/components/faceted/FacetedHeader.js.map +1 -0
  40. package/dist/HierarchicalTrackSelectorWidget/components/faceted/FacetedSelector.d.ts +12 -0
  41. package/dist/HierarchicalTrackSelectorWidget/components/faceted/FacetedSelector.js +211 -0
  42. package/dist/HierarchicalTrackSelectorWidget/components/faceted/FacetedSelector.js.map +1 -0
  43. package/dist/HierarchicalTrackSelectorWidget/components/faceted/util.d.ts +1 -0
  44. package/dist/HierarchicalTrackSelectorWidget/components/faceted/util.js +10 -0
  45. package/dist/HierarchicalTrackSelectorWidget/components/faceted/util.js.map +1 -0
  46. package/dist/HierarchicalTrackSelectorWidget/components/tree/HamburgerMenu.d.ts +7 -0
  47. package/dist/HierarchicalTrackSelectorWidget/components/tree/HamburgerMenu.js +136 -0
  48. package/dist/HierarchicalTrackSelectorWidget/components/tree/HamburgerMenu.js.map +1 -0
  49. package/dist/HierarchicalTrackSelectorWidget/components/{Header.d.ts → tree/HierarchicalHeader.d.ts} +2 -3
  50. package/dist/HierarchicalTrackSelectorWidget/components/tree/HierarchicalHeader.js +65 -0
  51. package/dist/HierarchicalTrackSelectorWidget/components/tree/HierarchicalHeader.js.map +1 -0
  52. package/dist/HierarchicalTrackSelectorWidget/components/tree/HierarchicalTree.d.ts +8 -0
  53. package/dist/HierarchicalTrackSelectorWidget/components/tree/HierarchicalTree.js +91 -0
  54. package/dist/HierarchicalTrackSelectorWidget/components/tree/HierarchicalTree.js.map +1 -0
  55. package/dist/HierarchicalTrackSelectorWidget/components/tree/TrackCategory.d.ts +7 -0
  56. package/dist/HierarchicalTrackSelectorWidget/components/tree/TrackCategory.js +89 -0
  57. package/dist/HierarchicalTrackSelectorWidget/components/tree/TrackCategory.js.map +1 -0
  58. package/dist/HierarchicalTrackSelectorWidget/components/tree/TrackLabel.d.ts +11 -0
  59. package/dist/HierarchicalTrackSelectorWidget/components/tree/TrackLabel.js +86 -0
  60. package/dist/HierarchicalTrackSelectorWidget/components/tree/TrackLabel.js.map +1 -0
  61. package/dist/HierarchicalTrackSelectorWidget/components/tree/TrackListNode.d.ts +10 -0
  62. package/dist/HierarchicalTrackSelectorWidget/components/tree/TrackListNode.js +54 -0
  63. package/dist/HierarchicalTrackSelectorWidget/components/tree/TrackListNode.js.map +1 -0
  64. package/dist/HierarchicalTrackSelectorWidget/components/util.d.ts +17 -1
  65. package/dist/HierarchicalTrackSelectorWidget/components/util.js +16 -1
  66. package/dist/HierarchicalTrackSelectorWidget/components/util.js.map +1 -1
  67. package/dist/HierarchicalTrackSelectorWidget/index.d.ts +3 -0
  68. package/dist/HierarchicalTrackSelectorWidget/index.js +36 -0
  69. package/dist/HierarchicalTrackSelectorWidget/index.js.map +1 -1
  70. package/dist/HierarchicalTrackSelectorWidget/model.d.ts +4 -1
  71. package/dist/HierarchicalTrackSelectorWidget/model.js +12 -8
  72. package/dist/HierarchicalTrackSelectorWidget/model.js.map +1 -1
  73. package/dist/PluginStoreWidget/index.d.ts +3 -2
  74. package/dist/PluginStoreWidget/index.js +38 -4
  75. package/dist/PluginStoreWidget/index.js.map +1 -1
  76. package/dist/index.js +10 -51
  77. package/dist/index.js.map +1 -1
  78. package/dist/ucsc-trackhub/index.d.ts +3 -2
  79. package/dist/ucsc-trackhub/index.js +13 -5
  80. package/dist/ucsc-trackhub/index.js.map +1 -1
  81. package/esm/AddConnectionWidget/index.d.ts +3 -2
  82. package/esm/AddConnectionWidget/index.js +15 -2
  83. package/esm/AddConnectionWidget/index.js.map +1 -1
  84. package/esm/AddTrackWidget/components/DefaultAddTrackWorkflow.js +1 -4
  85. package/esm/AddTrackWidget/components/DefaultAddTrackWorkflow.js.map +1 -1
  86. package/esm/AddTrackWidget/components/TrackSourceSelect.js +1 -4
  87. package/esm/AddTrackWidget/components/TrackSourceSelect.js.map +1 -1
  88. package/esm/AddTrackWidget/index.d.ts +3 -2
  89. package/esm/AddTrackWidget/index.js +15 -2
  90. package/esm/AddTrackWidget/index.js.map +1 -1
  91. package/esm/HierarchicalTrackSelectorWidget/components/HierarchicalFab.d.ts +6 -0
  92. package/esm/HierarchicalTrackSelectorWidget/components/HierarchicalFab.js +43 -0
  93. package/esm/HierarchicalTrackSelectorWidget/components/HierarchicalFab.js.map +1 -0
  94. package/esm/HierarchicalTrackSelectorWidget/components/HierarchicalTrackSelector.js +9 -103
  95. package/esm/HierarchicalTrackSelectorWidget/components/HierarchicalTrackSelector.js.map +1 -1
  96. package/esm/HierarchicalTrackSelectorWidget/components/ShoppingCart.d.ts +6 -0
  97. package/esm/HierarchicalTrackSelectorWidget/components/ShoppingCart.js +42 -0
  98. package/esm/HierarchicalTrackSelectorWidget/components/ShoppingCart.js.map +1 -0
  99. package/esm/HierarchicalTrackSelectorWidget/components/{CloseConnectionDialog.d.ts → dialogs/CloseConnectionDialog.d.ts} +0 -0
  100. package/esm/HierarchicalTrackSelectorWidget/components/{CloseConnectionDialog.js → dialogs/CloseConnectionDialog.js} +0 -0
  101. package/esm/HierarchicalTrackSelectorWidget/components/dialogs/CloseConnectionDialog.js.map +1 -0
  102. package/esm/HierarchicalTrackSelectorWidget/components/{DeleteConnectionDialog.d.ts → dialogs/DeleteConnectionDialog.d.ts} +0 -0
  103. package/esm/HierarchicalTrackSelectorWidget/components/{DeleteConnectionDialog.js → dialogs/DeleteConnectionDialog.js} +0 -0
  104. package/esm/HierarchicalTrackSelectorWidget/components/dialogs/DeleteConnectionDialog.js.map +1 -0
  105. package/esm/HierarchicalTrackSelectorWidget/components/{ManageConnectionsDialog.d.ts → dialogs/ManageConnectionsDialog.d.ts} +0 -0
  106. package/esm/HierarchicalTrackSelectorWidget/components/{ManageConnectionsDialog.js → dialogs/ManageConnectionsDialog.js} +0 -0
  107. package/esm/HierarchicalTrackSelectorWidget/components/dialogs/ManageConnectionsDialog.js.map +1 -0
  108. package/esm/HierarchicalTrackSelectorWidget/components/{ToggleConnectionsDialog.d.ts → dialogs/ToggleConnectionsDialog.d.ts} +0 -0
  109. package/esm/HierarchicalTrackSelectorWidget/components/{ToggleConnectionsDialog.js → dialogs/ToggleConnectionsDialog.js} +0 -0
  110. package/esm/HierarchicalTrackSelectorWidget/components/dialogs/ToggleConnectionsDialog.js.map +1 -0
  111. package/esm/HierarchicalTrackSelectorWidget/components/faceted/FacetFilters.d.ts +13 -0
  112. package/esm/HierarchicalTrackSelectorWidget/components/faceted/FacetFilters.js +70 -0
  113. package/esm/HierarchicalTrackSelectorWidget/components/faceted/FacetFilters.js.map +1 -0
  114. package/esm/HierarchicalTrackSelectorWidget/components/faceted/FacetedDialog.d.ts +8 -0
  115. package/esm/HierarchicalTrackSelectorWidget/components/faceted/FacetedDialog.js +13 -0
  116. package/esm/HierarchicalTrackSelectorWidget/components/faceted/FacetedDialog.js.map +1 -0
  117. package/esm/HierarchicalTrackSelectorWidget/components/faceted/FacetedHeader.d.ts +11 -0
  118. package/esm/HierarchicalTrackSelectorWidget/components/faceted/FacetedHeader.js +42 -0
  119. package/esm/HierarchicalTrackSelectorWidget/components/faceted/FacetedHeader.js.map +1 -0
  120. package/esm/HierarchicalTrackSelectorWidget/components/faceted/FacetedSelector.d.ts +12 -0
  121. package/esm/HierarchicalTrackSelectorWidget/components/faceted/FacetedSelector.js +183 -0
  122. package/esm/HierarchicalTrackSelectorWidget/components/faceted/FacetedSelector.js.map +1 -0
  123. package/esm/HierarchicalTrackSelectorWidget/components/faceted/util.d.ts +1 -0
  124. package/esm/HierarchicalTrackSelectorWidget/components/faceted/util.js +6 -0
  125. package/esm/HierarchicalTrackSelectorWidget/components/faceted/util.js.map +1 -0
  126. package/esm/HierarchicalTrackSelectorWidget/components/tree/HamburgerMenu.d.ts +7 -0
  127. package/esm/HierarchicalTrackSelectorWidget/components/tree/HamburgerMenu.js +108 -0
  128. package/esm/HierarchicalTrackSelectorWidget/components/tree/HamburgerMenu.js.map +1 -0
  129. package/esm/HierarchicalTrackSelectorWidget/components/{Header.d.ts → tree/HierarchicalHeader.d.ts} +2 -3
  130. package/esm/HierarchicalTrackSelectorWidget/components/tree/HierarchicalHeader.js +37 -0
  131. package/esm/HierarchicalTrackSelectorWidget/components/tree/HierarchicalHeader.js.map +1 -0
  132. package/esm/HierarchicalTrackSelectorWidget/components/tree/HierarchicalTree.d.ts +8 -0
  133. package/esm/HierarchicalTrackSelectorWidget/components/tree/HierarchicalTree.js +63 -0
  134. package/esm/HierarchicalTrackSelectorWidget/components/tree/HierarchicalTree.js.map +1 -0
  135. package/esm/HierarchicalTrackSelectorWidget/components/tree/TrackCategory.d.ts +7 -0
  136. package/esm/HierarchicalTrackSelectorWidget/components/tree/TrackCategory.js +60 -0
  137. package/esm/HierarchicalTrackSelectorWidget/components/tree/TrackCategory.js.map +1 -0
  138. package/esm/HierarchicalTrackSelectorWidget/components/tree/TrackLabel.d.ts +11 -0
  139. package/esm/HierarchicalTrackSelectorWidget/components/tree/TrackLabel.js +57 -0
  140. package/esm/HierarchicalTrackSelectorWidget/components/tree/TrackLabel.js.map +1 -0
  141. package/esm/HierarchicalTrackSelectorWidget/components/tree/TrackListNode.d.ts +10 -0
  142. package/esm/HierarchicalTrackSelectorWidget/components/tree/TrackListNode.js +48 -0
  143. package/esm/HierarchicalTrackSelectorWidget/components/tree/TrackListNode.js.map +1 -0
  144. package/esm/HierarchicalTrackSelectorWidget/components/util.d.ts +17 -1
  145. package/esm/HierarchicalTrackSelectorWidget/components/util.js +13 -0
  146. package/esm/HierarchicalTrackSelectorWidget/components/util.js.map +1 -1
  147. package/esm/HierarchicalTrackSelectorWidget/index.d.ts +3 -0
  148. package/esm/HierarchicalTrackSelectorWidget/index.js +13 -0
  149. package/esm/HierarchicalTrackSelectorWidget/index.js.map +1 -1
  150. package/esm/HierarchicalTrackSelectorWidget/model.d.ts +4 -1
  151. package/esm/HierarchicalTrackSelectorWidget/model.js +10 -7
  152. package/esm/HierarchicalTrackSelectorWidget/model.js.map +1 -1
  153. package/esm/PluginStoreWidget/index.d.ts +3 -2
  154. package/esm/PluginStoreWidget/index.js +15 -2
  155. package/esm/PluginStoreWidget/index.js.map +1 -1
  156. package/esm/index.js +10 -51
  157. package/esm/index.js.map +1 -1
  158. package/esm/ucsc-trackhub/index.d.ts +3 -2
  159. package/esm/ucsc-trackhub/index.js +13 -2
  160. package/esm/ucsc-trackhub/index.js.map +1 -1
  161. package/package.json +3 -2
  162. package/src/AddConnectionWidget/components/{AddConnectionWidget.test.js → AddConnectionWidget.test.tsx} +17 -8
  163. package/src/AddConnectionWidget/components/__snapshots__/{AddConnectionWidget.test.js.snap → AddConnectionWidget.test.tsx.snap} +0 -0
  164. package/src/AddConnectionWidget/index.ts +17 -2
  165. package/src/AddTrackWidget/components/DefaultAddTrackWorkflow.tsx +1 -4
  166. package/src/AddTrackWidget/components/TrackSourceSelect.tsx +3 -5
  167. package/src/AddTrackWidget/{index.test.jsx → index.test.tsx} +34 -37
  168. package/src/AddTrackWidget/index.ts +17 -2
  169. package/src/HierarchicalTrackSelectorWidget/components/HierarchicalFab.tsx +94 -0
  170. package/src/HierarchicalTrackSelectorWidget/components/HierarchicalTrackSelector.test.tsx +124 -128
  171. package/src/HierarchicalTrackSelectorWidget/components/HierarchicalTrackSelector.tsx +47 -228
  172. package/src/HierarchicalTrackSelectorWidget/components/ShoppingCart.tsx +73 -0
  173. package/src/HierarchicalTrackSelectorWidget/components/__snapshots__/HierarchicalTrackSelector.test.tsx.snap +25 -43
  174. package/src/HierarchicalTrackSelectorWidget/components/{CloseConnectionDialog.tsx → dialogs/CloseConnectionDialog.tsx} +0 -0
  175. package/src/HierarchicalTrackSelectorWidget/components/{DeleteConnectionDialog.tsx → dialogs/DeleteConnectionDialog.tsx} +0 -0
  176. package/src/HierarchicalTrackSelectorWidget/components/{ManageConnectionsDialog.tsx → dialogs/ManageConnectionsDialog.tsx} +0 -0
  177. package/src/HierarchicalTrackSelectorWidget/components/{ToggleConnectionsDialog.tsx → dialogs/ToggleConnectionsDialog.tsx} +0 -0
  178. package/src/HierarchicalTrackSelectorWidget/components/faceted/FacetFilters.tsx +138 -0
  179. package/src/HierarchicalTrackSelectorWidget/components/faceted/FacetedDialog.tsx +29 -0
  180. package/src/HierarchicalTrackSelectorWidget/components/faceted/FacetedHeader.tsx +86 -0
  181. package/src/HierarchicalTrackSelectorWidget/components/faceted/FacetedSelector.tsx +339 -0
  182. package/src/HierarchicalTrackSelectorWidget/components/faceted/util.ts +5 -0
  183. package/src/HierarchicalTrackSelectorWidget/components/tree/HamburgerMenu.tsx +197 -0
  184. package/src/HierarchicalTrackSelectorWidget/components/tree/HierarchicalHeader.tsx +88 -0
  185. package/src/HierarchicalTrackSelectorWidget/components/tree/HierarchicalTree.tsx +101 -0
  186. package/src/HierarchicalTrackSelectorWidget/components/tree/TrackCategory.tsx +92 -0
  187. package/src/HierarchicalTrackSelectorWidget/components/tree/TrackLabel.tsx +107 -0
  188. package/src/HierarchicalTrackSelectorWidget/components/tree/TrackListNode.tsx +84 -0
  189. package/src/HierarchicalTrackSelectorWidget/components/util.ts +31 -1
  190. package/src/HierarchicalTrackSelectorWidget/index.ts +17 -0
  191. package/src/HierarchicalTrackSelectorWidget/model.ts +12 -9
  192. package/src/PluginStoreWidget/components/PluginStoreWidget.test.tsx +132 -0
  193. package/src/PluginStoreWidget/components/__snapshots__/{PluginStoreWidget.test.js.snap → PluginStoreWidget.test.tsx.snap} +2 -2
  194. package/src/PluginStoreWidget/index.ts +17 -2
  195. package/src/PluginStoreWidget/{model.test.js → model.test.tsx} +0 -0
  196. package/src/__snapshots__/index.test.ts.snap +9 -0
  197. package/src/index.test.ts +54 -0
  198. package/src/index.ts +10 -83
  199. package/src/ucsc-trackhub/index.ts +19 -2
  200. package/dist/HierarchicalTrackSelectorWidget/components/CloseConnectionDialog.js.map +0 -1
  201. package/dist/HierarchicalTrackSelectorWidget/components/DeleteConnectionDialog.js.map +0 -1
  202. package/dist/HierarchicalTrackSelectorWidget/components/Header.js +0 -174
  203. package/dist/HierarchicalTrackSelectorWidget/components/Header.js.map +0 -1
  204. package/dist/HierarchicalTrackSelectorWidget/components/ManageConnectionsDialog.js.map +0 -1
  205. package/dist/HierarchicalTrackSelectorWidget/components/Node.d.ts +0 -29
  206. package/dist/HierarchicalTrackSelectorWidget/components/Node.js +0 -173
  207. package/dist/HierarchicalTrackSelectorWidget/components/Node.js.map +0 -1
  208. package/dist/HierarchicalTrackSelectorWidget/components/ToggleConnectionsDialog.js.map +0 -1
  209. package/esm/HierarchicalTrackSelectorWidget/components/CloseConnectionDialog.js.map +0 -1
  210. package/esm/HierarchicalTrackSelectorWidget/components/DeleteConnectionDialog.js.map +0 -1
  211. package/esm/HierarchicalTrackSelectorWidget/components/Header.js +0 -146
  212. package/esm/HierarchicalTrackSelectorWidget/components/Header.js.map +0 -1
  213. package/esm/HierarchicalTrackSelectorWidget/components/ManageConnectionsDialog.js.map +0 -1
  214. package/esm/HierarchicalTrackSelectorWidget/components/Node.d.ts +0 -29
  215. package/esm/HierarchicalTrackSelectorWidget/components/Node.js +0 -144
  216. package/esm/HierarchicalTrackSelectorWidget/components/Node.js.map +0 -1
  217. package/esm/HierarchicalTrackSelectorWidget/components/ToggleConnectionsDialog.js.map +0 -1
  218. package/src/HierarchicalTrackSelectorWidget/components/Header.tsx +0 -286
  219. package/src/HierarchicalTrackSelectorWidget/components/Node.tsx +0 -282
  220. package/src/PluginStoreWidget/components/PluginStoreWidget.test.js +0 -123
  221. package/src/__snapshots__/index.test.js.snap +0 -9
  222. package/src/index.test.js +0 -61
@@ -0,0 +1,108 @@
1
+ import React, { Suspense, lazy, useState } from 'react';
2
+ import { IconButton } from '@mui/material';
3
+ import { makeStyles } from 'tss-react/mui';
4
+ import { observer } from 'mobx-react';
5
+ import JBrowseMenu from '@jbrowse/core/ui/Menu';
6
+ import { getSession, isSessionModelWithWidgets, isSessionModelWithConnections, } from '@jbrowse/core/util';
7
+ import { readConfObject, } from '@jbrowse/core/configuration';
8
+ // icons
9
+ import MenuIcon from '@mui/icons-material/Menu';
10
+ // lazy components
11
+ const CloseConnectionDlg = lazy(() => import('../dialogs/CloseConnectionDialog'));
12
+ const DeleteConnectionDlg = lazy(() => import('../dialogs/DeleteConnectionDialog'));
13
+ const ManageConnectionsDlg = lazy(() => import('../dialogs/ManageConnectionsDialog'));
14
+ const ToggleConnectionsDlg = lazy(() => import('../dialogs/ToggleConnectionsDialog'));
15
+ const useStyles = makeStyles()(theme => ({
16
+ menuIcon: {
17
+ marginRight: theme.spacing(1),
18
+ marginBottom: 0,
19
+ },
20
+ }));
21
+ export default observer(function HamburgerMenu({ model, setAssemblyIdx, }) {
22
+ const session = getSession(model);
23
+ const [menuEl, setMenuEl] = useState();
24
+ const [modalInfo, setModalInfo] = useState();
25
+ const [deleteDlgDetails, setDeleteDlgDetails] = useState();
26
+ const [connectionToggleOpen, setConnectionToggleOpen] = useState(false);
27
+ const [connectionManagerOpen, setConnectionManagerOpen] = useState(false);
28
+ const { classes } = useStyles();
29
+ const { assemblyNames } = model;
30
+ function breakConnection(connectionConf, deletingConnection) {
31
+ const name = readConfObject(connectionConf, 'name');
32
+ // @ts-ignore
33
+ const result = session.prepareToBreakConnection(connectionConf);
34
+ if (result) {
35
+ const [safelyBreakConnection, dereferenceTypeCount] = result;
36
+ if (Object.keys(dereferenceTypeCount).length > 0) {
37
+ setModalInfo({
38
+ connectionConf,
39
+ safelyBreakConnection,
40
+ dereferenceTypeCount,
41
+ name,
42
+ });
43
+ }
44
+ else {
45
+ safelyBreakConnection();
46
+ }
47
+ }
48
+ if (deletingConnection) {
49
+ setDeleteDlgDetails({ name, connectionConf });
50
+ }
51
+ }
52
+ const connectionMenuItems = [
53
+ {
54
+ label: 'Turn on/off connections...',
55
+ onClick: () => setConnectionToggleOpen(true),
56
+ },
57
+ ];
58
+ if (isSessionModelWithConnections(session)) {
59
+ connectionMenuItems.unshift({
60
+ label: 'Add connection...',
61
+ onClick: () => {
62
+ if (isSessionModelWithWidgets(session)) {
63
+ session.showWidget(session.addWidget('AddConnectionWidget', 'addConnectionWidget'));
64
+ }
65
+ },
66
+ });
67
+ connectionMenuItems.push({
68
+ label: 'Delete connections...',
69
+ onClick: () => setConnectionManagerOpen(true),
70
+ });
71
+ }
72
+ return (React.createElement(React.Fragment, null,
73
+ React.createElement(IconButton, { className: classes.menuIcon, onClick: event => setMenuEl(event.currentTarget) },
74
+ React.createElement(MenuIcon, null)),
75
+ React.createElement(JBrowseMenu, { anchorEl: menuEl, open: Boolean(menuEl), onMenuItemClick: (_, callback) => {
76
+ callback();
77
+ setMenuEl(undefined);
78
+ }, onClose: () => setMenuEl(undefined), menuItems: [
79
+ {
80
+ label: 'Add track...',
81
+ onClick: () => {
82
+ if (isSessionModelWithWidgets(session)) {
83
+ session.showWidget(session.addWidget('AddTrackWidget', 'addTrackWidget', {
84
+ view: model.view.id,
85
+ }));
86
+ }
87
+ },
88
+ },
89
+ ...(session.makeConnection ? connectionMenuItems : []),
90
+ ...(assemblyNames.length > 1
91
+ ? [
92
+ {
93
+ label: 'Select assembly...',
94
+ subMenu: assemblyNames.map((name, idx) => ({
95
+ label: name,
96
+ onClick: () => setAssemblyIdx(idx),
97
+ })),
98
+ },
99
+ ]
100
+ : []),
101
+ ] }),
102
+ React.createElement(Suspense, { fallback: React.createElement("div", null) },
103
+ modalInfo ? (React.createElement(CloseConnectionDlg, { modalInfo: modalInfo, setModalInfo: setModalInfo })) : null,
104
+ deleteDlgDetails ? (React.createElement(DeleteConnectionDlg, { handleClose: () => setDeleteDlgDetails(undefined), deleteDialogDetails: deleteDlgDetails, session: session })) : null,
105
+ connectionManagerOpen ? (React.createElement(ManageConnectionsDlg, { handleClose: () => setConnectionManagerOpen(false), breakConnection: breakConnection, session: session })) : null,
106
+ connectionToggleOpen ? (React.createElement(ToggleConnectionsDlg, { handleClose: () => setConnectionToggleOpen(false), session: session, breakConnection: breakConnection })) : null)));
107
+ });
108
+ //# sourceMappingURL=HamburgerMenu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HamburgerMenu.js","sourceRoot":"","sources":["../../../../src/HierarchicalTrackSelectorWidget/components/tree/HamburgerMenu.tsx"],"names":[],"mappings":"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"}
@@ -1,10 +1,9 @@
1
1
  /// <reference types="react" />
2
- import { HierarchicalTrackSelectorModel } from '../model';
3
- declare function HierarchicalTrackSelectorHeader({ model, setHeaderHeight, setAssemblyIdx, assemblyIdx, }: {
2
+ import { HierarchicalTrackSelectorModel } from '../../model';
3
+ declare function HierarchicalTrackSelectorHeader({ model, setHeaderHeight, setAssemblyIdx, }: {
4
4
  model: HierarchicalTrackSelectorModel;
5
5
  setHeaderHeight: (n: number) => void;
6
6
  setAssemblyIdx: (n: number) => void;
7
- assemblyIdx: number;
8
7
  }): JSX.Element;
9
8
  declare const _default: typeof HierarchicalTrackSelectorHeader;
10
9
  export default _default;
@@ -0,0 +1,37 @@
1
+ import React, { Suspense, lazy, useState } from 'react';
2
+ import { Button, IconButton, InputAdornment, TextField } from '@mui/material';
3
+ import { makeStyles } from 'tss-react/mui';
4
+ import { observer } from 'mobx-react';
5
+ // icons
6
+ import ClearIcon from '@mui/icons-material/Clear';
7
+ import HamburgerMenu from './HamburgerMenu';
8
+ import ShoppingCart from '../ShoppingCart';
9
+ // lazies
10
+ const FacetedDialog = lazy(() => import('../faceted/FacetedDialog'));
11
+ const useStyles = makeStyles()(theme => ({
12
+ searchBox: {
13
+ margin: theme.spacing(2),
14
+ },
15
+ menuIcon: {
16
+ marginRight: theme.spacing(1),
17
+ marginBottom: 0,
18
+ },
19
+ }));
20
+ function HierarchicalTrackSelectorHeader({ model, setHeaderHeight, setAssemblyIdx, }) {
21
+ const { classes } = useStyles();
22
+ const [facetedOpen, setFacetedOpen] = useState(false);
23
+ const { filterText } = model;
24
+ return (React.createElement("div", { ref: ref => setHeaderHeight((ref === null || ref === void 0 ? void 0 : ref.getBoundingClientRect().height) || 0), "data-testid": "hierarchical_track_selector" },
25
+ React.createElement("div", { style: { display: 'flex' } },
26
+ React.createElement(HamburgerMenu, { model: model, setAssemblyIdx: setAssemblyIdx }),
27
+ React.createElement(ShoppingCart, { model: model }),
28
+ React.createElement(TextField, { className: classes.searchBox, label: "Filter tracks", value: filterText, onChange: event => model.setFilterText(event.target.value), fullWidth: true, InputProps: {
29
+ endAdornment: (React.createElement(InputAdornment, { position: "end" },
30
+ React.createElement(IconButton, { color: "secondary", onClick: () => model.clearFilterText() },
31
+ React.createElement(ClearIcon, null)))),
32
+ } }),
33
+ React.createElement(Button, { className: classes.menuIcon, onClick: () => setFacetedOpen(true) }, "Open faceted selector")),
34
+ React.createElement(Suspense, { fallback: React.createElement("div", null) }, facetedOpen ? (React.createElement(FacetedDialog, { handleClose: () => setFacetedOpen(false), model: model })) : null)));
35
+ }
36
+ export default observer(HierarchicalTrackSelectorHeader);
37
+ //# sourceMappingURL=HierarchicalHeader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HierarchicalHeader.js","sourceRoot":"","sources":["../../../../src/HierarchicalTrackSelectorWidget/components/tree/HierarchicalHeader.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AACvD,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAC7E,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAErC,QAAQ;AACR,OAAO,SAAS,MAAM,2BAA2B,CAAA;AAIjD,OAAO,aAAa,MAAM,iBAAiB,CAAA;AAC3C,OAAO,YAAY,MAAM,iBAAiB,CAAA;AAE1C,SAAS;AACT,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,0BAA0B,CAAC,CAAC,CAAA;AAEpE,MAAM,SAAS,GAAG,UAAU,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACvC,SAAS,EAAE;QACT,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;KACzB;IACD,QAAQ,EAAE;QACR,WAAW,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAC7B,YAAY,EAAE,CAAC;KAChB;CACF,CAAC,CAAC,CAAA;AAEH,SAAS,+BAA+B,CAAC,EACvC,KAAK,EACL,eAAe,EACf,cAAc,GAKf;IACC,MAAM,EAAE,OAAO,EAAE,GAAG,SAAS,EAAE,CAAA;IAC/B,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IACrD,MAAM,EAAE,UAAU,EAAE,GAAG,KAAK,CAAA;IAE5B,OAAO,CACL,6BACE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,eAAe,CAAC,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,qBAAqB,GAAG,MAAM,KAAI,CAAC,CAAC,iBACzD,6BAA6B;QAEzC,6BAAK,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE;YAC7B,oBAAC,aAAa,IAAC,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,cAAc,GAAI;YAC/D,oBAAC,YAAY,IAAC,KAAK,EAAE,KAAK,GAAI;YAE9B,oBAAC,SAAS,IACR,SAAS,EAAE,OAAO,CAAC,SAAS,EAC5B,KAAK,EAAC,eAAe,EACrB,KAAK,EAAE,UAAU,EACjB,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,EAC1D,SAAS,QACT,UAAU,EAAE;oBACV,YAAY,EAAE,CACZ,oBAAC,cAAc,IAAC,QAAQ,EAAC,KAAK;wBAC5B,oBAAC,UAAU,IACT,KAAK,EAAC,WAAW,EACjB,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,eAAe,EAAE;4BAEtC,oBAAC,SAAS,OAAG,CACF,CACE,CAClB;iBACF,GACD;YACF,oBAAC,MAAM,IACL,SAAS,EAAE,OAAO,CAAC,QAAQ,EAC3B,OAAO,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,4BAG5B,CACL;QAEN,oBAAC,QAAQ,IAAC,QAAQ,EAAE,gCAAO,IACxB,WAAW,CAAC,CAAC,CAAC,CACb,oBAAC,aAAa,IACZ,WAAW,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC,EACxC,KAAK,EAAE,KAAK,GACZ,CACH,CAAC,CAAC,CAAC,IAAI,CACC,CACP,CACP,CAAA;AACH,CAAC;AAED,eAAe,QAAQ,CAAC,+BAA+B,CAAC,CAAA"}
@@ -0,0 +1,8 @@
1
+ /// <reference types="react" />
2
+ import { TreeNode, HierarchicalTrackSelectorModel } from '../../model';
3
+ declare const _default: ({ height, tree, model, }: {
4
+ height: number;
5
+ tree: TreeNode;
6
+ model: HierarchicalTrackSelectorModel;
7
+ }) => JSX.Element;
8
+ export default _default;
@@ -0,0 +1,63 @@
1
+ import React, { useCallback, useMemo, useRef, useEffect } from 'react';
2
+ import { observer } from 'mobx-react';
3
+ import { VariableSizeTree } from 'react-vtree';
4
+ import { getSession } from '@jbrowse/core/util';
5
+ import Node from './TrackListNode';
6
+ function getNodeData(node, nestingLevel, extra, selection) {
7
+ const isLeaf = !!node.conf;
8
+ const selected = !!selection[node.id];
9
+ return {
10
+ data: {
11
+ defaultHeight: isLeaf ? 22 : 40,
12
+ isLeaf,
13
+ isOpenByDefault: true,
14
+ nestingLevel,
15
+ selected,
16
+ ...node,
17
+ ...extra,
18
+ },
19
+ nestingLevel,
20
+ node,
21
+ };
22
+ }
23
+ // this is the main tree component for the hierarchical track selector in note:
24
+ // in jbrowse-web the toolbar is position="sticky" which means the autosizer
25
+ // includes the height of the toolbar, so we subtract the given offsets
26
+ export default observer(function HierarchicalTree({ height, tree, model, }) {
27
+ const { filterText, selection, view } = model;
28
+ const treeRef = useRef(null);
29
+ const session = getSession(model);
30
+ const { drawerPosition } = session;
31
+ const obj = useMemo(() => Object.fromEntries(selection.map(s => [s.trackId, s])), [selection]);
32
+ const extra = useMemo(() => ({
33
+ onChange: (trackId) => view.toggleTrack(trackId),
34
+ toggleCollapse: (pathName) => model.toggleCategory(pathName),
35
+ tree,
36
+ model,
37
+ drawerPosition,
38
+ }), [view, model, drawerPosition, tree]);
39
+ const treeWalker = useCallback(function* treeWalker() {
40
+ for (let i = 0; i < tree.children.length; i++) {
41
+ const r = tree.children[i];
42
+ yield getNodeData(r, 0, extra, obj);
43
+ }
44
+ while (true) {
45
+ // @ts-ignore
46
+ const parentMeta = yield;
47
+ for (let i = 0; i < parentMeta.node.children.length; i++) {
48
+ const curr = parentMeta.node.children[i];
49
+ yield getNodeData(curr, parentMeta.nestingLevel + 1, extra, obj);
50
+ }
51
+ }
52
+ }, [tree, extra, obj]);
53
+ useEffect(() => {
54
+ // @ts-ignore
55
+ treeRef.current.recomputeTree({
56
+ refreshNodes: true,
57
+ useDefaultHeight: true,
58
+ });
59
+ }, [tree, filterText]);
60
+ return (React.createElement(React.Fragment, null,
61
+ React.createElement(VariableSizeTree, { ref: treeRef, treeWalker: treeWalker, height: height }, Node)));
62
+ });
63
+ //# sourceMappingURL=HierarchicalTree.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HierarchicalTree.js","sourceRoot":"","sources":["../../../../src/HierarchicalTrackSelectorWidget/components/tree/HierarchicalTree.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /// <reference types="react" />
2
+ import { NodeData } from '../util';
3
+ export default function Category({ isOpen, setOpen, data, }: {
4
+ isOpen: boolean;
5
+ setOpen: (arg: boolean) => void;
6
+ data: NodeData;
7
+ }): JSX.Element;
@@ -0,0 +1,60 @@
1
+ import React, { useState } from 'react';
2
+ import { IconButton, Typography } from '@mui/material';
3
+ import { makeStyles } from 'tss-react/mui';
4
+ import JBrowseMenu from '@jbrowse/core/ui/Menu';
5
+ // icons
6
+ import ArrowDropDownIcon from '@mui/icons-material/ArrowDropDown';
7
+ import ArrowRightIcon from '@mui/icons-material/ArrowRight';
8
+ import MoreHorizIcon from '@mui/icons-material/MoreHoriz';
9
+ // locals
10
+ import { getAllChildren, treeToMap } from '../util';
11
+ const useStyles = makeStyles()(theme => ({
12
+ contrastColor: {
13
+ color: theme.palette.secondary.contrastText,
14
+ },
15
+ // margin:auto 0 to center text vertically
16
+ accordionText: {
17
+ margin: 'auto 0',
18
+ // width 100 so you can click anywhere on the category bar
19
+ width: '100%',
20
+ },
21
+ }));
22
+ export default function Category({ isOpen, setOpen, data, }) {
23
+ const { classes } = useStyles();
24
+ const [menuEl, setMenuEl] = useState(null);
25
+ const { name, model, id, tree, toggleCollapse } = data;
26
+ return (React.createElement("div", { className: classes.accordionText, onClick: () => {
27
+ if (!menuEl) {
28
+ toggleCollapse(id);
29
+ setOpen(!isOpen);
30
+ }
31
+ } },
32
+ React.createElement(Typography, null,
33
+ isOpen ? React.createElement(ArrowDropDownIcon, null) : React.createElement(ArrowRightIcon, null),
34
+ name,
35
+ React.createElement(IconButton, { onClick: event => {
36
+ setMenuEl(event.currentTarget);
37
+ event.stopPropagation();
38
+ }, className: classes.contrastColor },
39
+ React.createElement(MoreHorizIcon, null))),
40
+ menuEl ? (React.createElement(JBrowseMenu, { anchorEl: menuEl, menuItems: [
41
+ {
42
+ label: 'Add to selection',
43
+ onClick: () => {
44
+ const r = treeToMap(tree).get(id);
45
+ model.addToSelection(getAllChildren(r));
46
+ },
47
+ },
48
+ {
49
+ label: 'Remove from selection',
50
+ onClick: () => {
51
+ const r = treeToMap(tree).get(id);
52
+ model.removeFromSelection(getAllChildren(r));
53
+ },
54
+ },
55
+ ], onMenuItemClick: (_event, callback) => {
56
+ callback();
57
+ setMenuEl(null);
58
+ }, open: Boolean(menuEl), onClose: () => setMenuEl(null) })) : null));
59
+ }
60
+ //# sourceMappingURL=TrackCategory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TrackCategory.js","sourceRoot":"","sources":["../../../../src/HierarchicalTrackSelectorWidget/components/tree/TrackCategory.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AACvC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC1C,OAAO,WAAW,MAAM,uBAAuB,CAAA;AAE/C,QAAQ;AACR,OAAO,iBAAiB,MAAM,mCAAmC,CAAA;AACjE,OAAO,cAAc,MAAM,gCAAgC,CAAA;AAC3D,OAAO,aAAa,MAAM,+BAA+B,CAAA;AAEzD,SAAS;AACT,OAAO,EAAE,cAAc,EAAE,SAAS,EAAY,MAAM,SAAS,CAAA;AAE7D,MAAM,SAAS,GAAG,UAAU,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACvC,aAAa,EAAE;QACb,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,YAAY;KAC5C;IAED,0CAA0C;IAC1C,aAAa,EAAE;QACb,MAAM,EAAE,QAAQ;QAChB,0DAA0D;QAC1D,KAAK,EAAE,MAAM;KACd;CACF,CAAC,CAAC,CAAA;AAEH,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,EAC/B,MAAM,EACN,OAAO,EACP,IAAI,GAKL;IACC,MAAM,EAAE,OAAO,EAAE,GAAG,SAAS,EAAE,CAAA;IAC/B,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAqB,IAAI,CAAC,CAAA;IAC9D,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,GAAG,IAAI,CAAA;IAEtD,OAAO,CACL,6BACE,SAAS,EAAE,OAAO,CAAC,aAAa,EAChC,OAAO,EAAE,GAAG,EAAE;YACZ,IAAI,CAAC,MAAM,EAAE;gBACX,cAAc,CAAC,EAAE,CAAC,CAAA;gBAClB,OAAO,CAAC,CAAC,MAAM,CAAC,CAAA;aACjB;QACH,CAAC;QAED,oBAAC,UAAU;YACR,MAAM,CAAC,CAAC,CAAC,oBAAC,iBAAiB,OAAG,CAAC,CAAC,CAAC,oBAAC,cAAc,OAAG;YACnD,IAAI;YACL,oBAAC,UAAU,IACT,OAAO,EAAE,KAAK,CAAC,EAAE;oBACf,SAAS,CAAC,KAAK,CAAC,aAAa,CAAC,CAAA;oBAC9B,KAAK,CAAC,eAAe,EAAE,CAAA;gBACzB,CAAC,EACD,SAAS,EAAE,OAAO,CAAC,aAAa;gBAEhC,oBAAC,aAAa,OAAG,CACN,CACF;QACZ,MAAM,CAAC,CAAC,CAAC,CACR,oBAAC,WAAW,IACV,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE;gBACT;oBACE,KAAK,EAAE,kBAAkB;oBACzB,OAAO,EAAE,GAAG,EAAE;wBACZ,MAAM,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;wBACjC,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAA;oBACzC,CAAC;iBACF;gBACD;oBACE,KAAK,EAAE,uBAAuB;oBAC9B,OAAO,EAAE,GAAG,EAAE;wBACZ,MAAM,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;wBACjC,KAAK,CAAC,mBAAmB,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAA;oBAC9C,CAAC;iBACF;aACF,EACD,eAAe,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE;gBACpC,QAAQ,EAAE,CAAA;gBACV,SAAS,CAAC,IAAI,CAAC,CAAA;YACjB,CAAC,EACD,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,EACrB,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,GAC9B,CACH,CAAC,CAAC,CAAC,IAAI,CACJ,CACP,CAAA;AACH,CAAC"}
@@ -0,0 +1,11 @@
1
+ /// <reference types="react" />
2
+ import { AnyConfigurationModel } from '@jbrowse/core/configuration';
3
+ import { NodeData } from '../util';
4
+ export interface InfoArgs {
5
+ target: HTMLElement;
6
+ id: string;
7
+ conf: AnyConfigurationModel;
8
+ }
9
+ export default function TrackLabel({ data }: {
10
+ data: NodeData;
11
+ }): JSX.Element;
@@ -0,0 +1,57 @@
1
+ import React, { useState } from 'react';
2
+ import { Checkbox, FormControlLabel, IconButton, Tooltip } from '@mui/material';
3
+ import { makeStyles } from 'tss-react/mui';
4
+ import JBrowseMenu from '@jbrowse/core/ui/Menu';
5
+ import { getSession } from '@jbrowse/core/util';
6
+ import { readConfObject, } from '@jbrowse/core/configuration';
7
+ // icons
8
+ import MoreHorizIcon from '@mui/icons-material/MoreHoriz';
9
+ // locals
10
+ import { isUnsupported } from '../util';
11
+ import { SanitizedHTML } from '@jbrowse/core/ui';
12
+ const useStyles = makeStyles()({
13
+ compactCheckbox: {
14
+ padding: 0,
15
+ },
16
+ checkboxLabel: {
17
+ marginRight: 0,
18
+ '&:hover': {
19
+ backgroundColor: '#eee',
20
+ },
21
+ },
22
+ });
23
+ export default function TrackLabel({ data }) {
24
+ var _a, _b;
25
+ const { classes } = useStyles();
26
+ const { checked, conf, model, drawerPosition, id, name, onChange, selected } = data;
27
+ const [info, setInfo] = useState();
28
+ const description = (conf && readConfObject(conf, ['description'])) || '';
29
+ return (React.createElement(React.Fragment, null,
30
+ React.createElement(Tooltip, { title: description + (selected ? ' (in selection)' : ''), placement: drawerPosition === 'left' ? 'right' : 'left' },
31
+ React.createElement(FormControlLabel, { className: classes.checkboxLabel, control: React.createElement(Checkbox, { className: classes.compactCheckbox, checked: checked, onChange: () => onChange(id), disabled: isUnsupported(name), inputProps: {
32
+ // @ts-ignore
33
+ 'data-testid': `htsTrackEntry-${id}`,
34
+ } }), label: React.createElement("div", { style: { background: selected ? '#cccc' : undefined } },
35
+ React.createElement(SanitizedHTML, { html: name })) })),
36
+ React.createElement(IconButton, { onClick: e => setInfo({ target: e.currentTarget, id, conf }), style: { padding: 0 }, color: "secondary", "data-testid": `htsTrackEntryMenu-${id}` },
37
+ React.createElement(MoreHorizIcon, null)),
38
+ info ? (React.createElement(JBrowseMenu, { anchorEl: info === null || info === void 0 ? void 0 : info.target, menuItems: [
39
+ ...(((_b = (_a = getSession(model)).getTrackActionMenuItems) === null || _b === void 0 ? void 0 : _b.call(_a, info.conf)) || []),
40
+ {
41
+ label: 'Add to selection',
42
+ onClick: () => model.addToSelection([info.conf]),
43
+ },
44
+ ...(selected
45
+ ? [
46
+ {
47
+ label: 'Remove from selection',
48
+ onClick: () => model.removeFromSelection([info.conf]),
49
+ },
50
+ ]
51
+ : []),
52
+ ], onMenuItemClick: (_event, callback) => {
53
+ callback();
54
+ setInfo(undefined);
55
+ }, open: Boolean(info), onClose: () => setInfo(undefined) })) : null));
56
+ }
57
+ //# sourceMappingURL=TrackLabel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TrackLabel.js","sourceRoot":"","sources":["../../../../src/HierarchicalTrackSelectorWidget/components/tree/TrackLabel.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /// <reference types="react" />
2
+ import { NodeData } from '../util';
3
+ export default function Node({ data, isOpen, style, setOpen, }: {
4
+ data: NodeData;
5
+ isOpen: boolean;
6
+ style?: {
7
+ height: number;
8
+ };
9
+ setOpen: (arg: boolean) => void;
10
+ }): JSX.Element;
@@ -0,0 +1,48 @@
1
+ import React from 'react';
2
+ import { makeStyles } from 'tss-react/mui';
3
+ // locals
4
+ import Category from './TrackCategory';
5
+ import TrackLabel from './TrackLabel';
6
+ const useStyles = makeStyles()(theme => ({
7
+ // this accordionBase element's small padding is used to give a margin to
8
+ // accordionColor it a "margin" because the virtualized elements can't really
9
+ // use margin in a conventional way (it doesn't affect layout)
10
+ accordionBase: {
11
+ display: 'flex',
12
+ },
13
+ accordionCard: {
14
+ padding: 3,
15
+ cursor: 'pointer',
16
+ display: 'flex',
17
+ },
18
+ nestingLevelMarker: {
19
+ position: 'absolute',
20
+ borderLeft: '1.5px solid #555',
21
+ },
22
+ // accordionColor set's display:flex so that the child accordionText use
23
+ // vertically centered text
24
+ accordionColor: {
25
+ background: theme.palette.tertiary.main,
26
+ color: theme.palette.tertiary.contrastText,
27
+ width: '100%',
28
+ display: 'flex',
29
+ paddingLeft: 5,
30
+ },
31
+ }));
32
+ // An individual node in the track selector. Note: manually sets cursor:
33
+ // pointer improves usability for what can be clicked
34
+ export default function Node({ data, isOpen, style, setOpen, }) {
35
+ const { isLeaf, nestingLevel } = data;
36
+ const { classes } = useStyles();
37
+ const width = 10;
38
+ const marginLeft = nestingLevel * width + (isLeaf ? width : 0);
39
+ return (React.createElement("div", { style: style, className: !isLeaf ? classes.accordionBase : undefined },
40
+ new Array(nestingLevel).fill(0).map((_, idx) => (React.createElement("div", { key: `mark-${idx}`, style: { left: idx * width + 4, height: style === null || style === void 0 ? void 0 : style.height }, className: classes.nestingLevelMarker }))),
41
+ React.createElement("div", { className: !isLeaf ? classes.accordionCard : undefined, style: {
42
+ marginLeft,
43
+ whiteSpace: 'nowrap',
44
+ width: '100%',
45
+ } },
46
+ React.createElement("div", { className: !isLeaf ? classes.accordionColor : undefined }, !isLeaf ? (React.createElement(Category, { isOpen: isOpen, data: data, setOpen: setOpen })) : (React.createElement(TrackLabel, { data: data }))))));
47
+ }
48
+ //# sourceMappingURL=TrackListNode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TrackListNode.js","sourceRoot":"","sources":["../../../../src/HierarchicalTrackSelectorWidget/components/tree/TrackListNode.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAE1C,SAAS;AACT,OAAO,QAAQ,MAAM,iBAAiB,CAAA;AACtC,OAAO,UAAU,MAAM,cAAc,CAAA;AAGrC,MAAM,SAAS,GAAG,UAAU,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACvC,yEAAyE;IACzE,6EAA6E;IAC7E,8DAA8D;IAC9D,aAAa,EAAE;QACb,OAAO,EAAE,MAAM;KAChB;IAED,aAAa,EAAE;QACb,OAAO,EAAE,CAAC;QACV,MAAM,EAAE,SAAS;QACjB,OAAO,EAAE,MAAM;KAChB;IAED,kBAAkB,EAAE;QAClB,QAAQ,EAAE,UAAU;QACpB,UAAU,EAAE,kBAAkB;KAC/B;IACD,wEAAwE;IACxE,2BAA2B;IAC3B,cAAc,EAAE;QACd,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI;QACvC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY;QAC1C,KAAK,EAAE,MAAM;QACb,OAAO,EAAE,MAAM;QACf,WAAW,EAAE,CAAC;KACf;CACF,CAAC,CAAC,CAAA;AAEH,wEAAwE;AACxE,qDAAqD;AACrD,MAAM,CAAC,OAAO,UAAU,IAAI,CAAC,EAC3B,IAAI,EACJ,MAAM,EACN,KAAK,EACL,OAAO,GAMR;IACC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,IAAI,CAAA;IAErC,MAAM,EAAE,OAAO,EAAE,GAAG,SAAS,EAAE,CAAA;IAC/B,MAAM,KAAK,GAAG,EAAE,CAAA;IAChB,MAAM,UAAU,GAAG,YAAY,GAAG,KAAK,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAE9D,OAAO,CACL,6BAAK,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS;QACtE,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,CAC/C,6BACE,GAAG,EAAE,QAAQ,GAAG,EAAE,EAClB,KAAK,EAAE,EAAE,IAAI,EAAE,GAAG,GAAG,KAAK,GAAG,CAAC,EAAE,MAAM,EAAE,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,MAAM,EAAE,EACvD,SAAS,EAAE,OAAO,CAAC,kBAAkB,GACrC,CACH,CAAC;QACF,6BACE,SAAS,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,EACtD,KAAK,EAAE;gBACL,UAAU;gBACV,UAAU,EAAE,QAAQ;gBACpB,KAAK,EAAE,MAAM;aACd;YAED,6BAAK,SAAS,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,IACzD,CAAC,MAAM,CAAC,CAAC,CAAC,CACT,oBAAC,QAAQ,IAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,GAAI,CAC3D,CAAC,CAAC,CAAC,CACF,oBAAC,UAAU,IAAC,IAAI,EAAE,IAAI,GAAI,CAC3B,CACG,CACF,CACF,CACP,CAAA;AACH,CAAC"}
@@ -1,3 +1,19 @@
1
1
  import { AnyConfigurationModel } from '@jbrowse/core/configuration';
2
- import { TreeNode } from '../model';
2
+ import { HierarchicalTrackSelectorModel, TreeNode } from '../model';
3
+ export interface NodeData {
4
+ nestingLevel: number;
5
+ checked: boolean;
6
+ conf: AnyConfigurationModel;
7
+ drawerPosition: unknown;
8
+ id: string;
9
+ isLeaf: boolean;
10
+ name: string;
11
+ onChange: Function;
12
+ toggleCollapse: (arg: string) => void;
13
+ tree: TreeNode;
14
+ selected: boolean;
15
+ model: HierarchicalTrackSelectorModel;
16
+ }
3
17
  export declare function getAllChildren(subtree?: TreeNode): AnyConfigurationModel[];
18
+ export declare function treeToMap(tree: TreeNode, map?: Map<string, TreeNode>): Map<string, TreeNode>;
19
+ export declare function isUnsupported(name?: string): boolean;
@@ -2,4 +2,17 @@ export function getAllChildren(subtree) {
2
2
  // @ts-ignore
3
3
  return ((subtree === null || subtree === void 0 ? void 0 : subtree.children.map(t => t.children.length ? getAllChildren(t) : t.conf)) || []).flat(Infinity);
4
4
  }
5
+ export function treeToMap(tree, map = new Map()) {
6
+ if (tree.id && tree.children.length) {
7
+ map.set(tree.id, tree);
8
+ }
9
+ for (let i = 0; i < tree.children.length; i++) {
10
+ const node = tree.children[i];
11
+ treeToMap(node, map);
12
+ }
13
+ return map;
14
+ }
15
+ export function isUnsupported(name = '') {
16
+ return name.endsWith('(Unsupported)') || name.endsWith('(Unknown)');
17
+ }
5
18
  //# sourceMappingURL=util.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"util.js","sourceRoot":"","sources":["../../../src/HierarchicalTrackSelectorWidget/components/util.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,cAAc,CAAC,OAAkB;IAC/C,aAAa;IACb,OAAO,CACL,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CACxB,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC,IAA8B,CAC1E,KAAI,EAAE,CACR,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;AAClB,CAAC"}
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../../../src/HierarchicalTrackSelectorWidget/components/util.ts"],"names":[],"mappings":"AAkBA,MAAM,UAAU,cAAc,CAAC,OAAkB;IAC/C,aAAa;IACb,OAAO,CACL,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CACxB,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC,IAA8B,CAC1E,KAAI,EAAE,CACR,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;AAClB,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,IAAc,EAAE,MAAM,IAAI,GAAG,EAAoB;IACzE,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;QACnC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAA;KACvB;IACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;QAC7B,SAAS,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;KACrB;IACD,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAI,GAAG,EAAE;IACrC,OAAO,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAA;AACrE,CAAC"}
@@ -1,4 +1,7 @@
1
1
  import stateModelFactory, { HierarchicalTrackSelectorModel } from './model';
2
2
  import configSchema from './configSchema';
3
+ import PluginManager from '@jbrowse/core/PluginManager';
3
4
  export { stateModelFactory, configSchema };
4
5
  export type { HierarchicalTrackSelectorModel };
6
+ declare const _default: (pluginManager: PluginManager) => void;
7
+ export default _default;
@@ -1,4 +1,17 @@
1
1
  import stateModelFactory from './model';
2
2
  import configSchema from './configSchema';
3
+ import { WidgetType } from '@jbrowse/core/pluggableElementTypes';
4
+ import { lazy } from 'react';
3
5
  export { stateModelFactory, configSchema };
6
+ export default (pluginManager) => {
7
+ pluginManager.addWidgetType(() => {
8
+ return new WidgetType({
9
+ name: 'HierarchicalTrackSelectorWidget',
10
+ heading: 'Available tracks',
11
+ configSchema,
12
+ stateModel: stateModelFactory(pluginManager),
13
+ ReactComponent: lazy(() => import('./components/HierarchicalTrackSelector')),
14
+ });
15
+ });
16
+ };
4
17
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/HierarchicalTrackSelectorWidget/index.ts"],"names":[],"mappings":"AAAA,OAAO,iBAAqD,MAAM,SAAS,CAAA;AAC3E,OAAO,YAAY,MAAM,gBAAgB,CAAA;AAEzC,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/HierarchicalTrackSelectorWidget/index.ts"],"names":[],"mappings":"AAAA,OAAO,iBAAqD,MAAM,SAAS,CAAA;AAC3E,OAAO,YAAY,MAAM,gBAAgB,CAAA;AAEzC,OAAO,EAAE,UAAU,EAAE,MAAM,qCAAqC,CAAA;AAChE,OAAO,EAAE,IAAI,EAAE,MAAM,OAAO,CAAA;AAE5B,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,CAAA;AAG1C,eAAe,CAAC,aAA4B,EAAE,EAAE;IAC9C,aAAa,CAAC,aAAa,CAAC,GAAG,EAAE;QAC/B,OAAO,IAAI,UAAU,CAAC;YACpB,IAAI,EAAE,iCAAiC;YACvC,OAAO,EAAE,kBAAkB;YAC3B,YAAY;YACZ,UAAU,EAAE,iBAAiB,CAAC,aAAa,CAAC;YAC5C,cAAc,EAAE,IAAI,CAClB,GAAG,EAAE,CAAC,MAAM,CAAC,wCAAwC,CAAC,CACvD;SACF,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA"}
@@ -1,6 +1,8 @@
1
1
  import { Instance } from 'mobx-state-tree';
2
2
  import { AnyConfigurationModel } from '@jbrowse/core/configuration';
3
+ import { AbstractSessionModel } from '@jbrowse/core/util';
3
4
  import PluginManager from '@jbrowse/core/PluginManager';
5
+ export declare function matches(query: string, conf: AnyConfigurationModel, session: AbstractSessionModel): any;
4
6
  export type TreeNode = {
5
7
  name: string;
6
8
  id: string;
@@ -16,7 +18,6 @@ export default function stateTreeFactory(pluginManager: PluginManager): import("
16
18
  id: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
17
19
  type: import("mobx-state-tree").ISimpleType<"HierarchicalTrackSelectorWidget">;
18
20
  collapsed: import("mobx-state-tree").IMapType<import("mobx-state-tree").ISimpleType<boolean>>;
19
- filterText: import("mobx-state-tree").IType<string | undefined, string, string>;
20
21
  view: import("mobx-state-tree").IMaybe<import("mobx-state-tree").IReferenceType<import("mobx-state-tree").IAnyType>>;
21
22
  }, {
22
23
  selection: ({
@@ -24,7 +25,9 @@ export default function stateTreeFactory(pluginManager: PluginManager): import("
24
25
  } & import("mobx-state-tree/dist/internal").NonEmptyObject & {
25
26
  setSubschema(slotName: string, data: unknown): any;
26
27
  } & import("mobx-state-tree").IStateTreeNode<import("@jbrowse/core/configuration").AnyConfigurationSchemaType>)[];
28
+ filterText: string;
27
29
  } & {
30
+ setSelection(elt: AnyConfigurationModel[]): void;
28
31
  addToSelection(elt: AnyConfigurationModel[]): void;
29
32
  removeFromSelection(elt: AnyConfigurationModel[]): void;
30
33
  clearSelection(): void;
@@ -6,11 +6,11 @@ import { ElementId } from '@jbrowse/core/util/types/mst';
6
6
  function hasAnyOverlap(a1 = [], a2 = []) {
7
7
  return !!a1.find(value => a2.includes(value));
8
8
  }
9
- function passesFilter(filter, config, session) {
10
- const categories = readConfObject(config, 'category');
11
- const filterLower = filter.toLowerCase();
12
- return (getTrackName(config, session).toLowerCase().includes(filterLower) ||
13
- !!(categories === null || categories === void 0 ? void 0 : categories.filter(c => c.toLowerCase().includes(filterLower)).length));
9
+ export function matches(query, conf, session) {
10
+ const categories = readConfObject(conf, 'category');
11
+ const queryLower = query.toLowerCase();
12
+ return (getTrackName(conf, session).toLowerCase().includes(queryLower) ||
13
+ !!(categories === null || categories === void 0 ? void 0 : categories.filter(c => c.toLowerCase().includes(queryLower)).length));
14
14
  }
15
15
  function filterTracks(tracks, self, assemblyName) {
16
16
  const { assemblyManager } = getSession(self);
@@ -34,7 +34,7 @@ export function generateHierarchy(model, trackConfigurations, collapsed, extra)
34
34
  const { filterText, view } = model;
35
35
  const session = getSession(model);
36
36
  trackConfigurations
37
- .filter(conf => passesFilter(filterText, conf, session))
37
+ .filter(conf => matches(filterText, conf, session))
38
38
  .forEach(conf => {
39
39
  // copy the categories since this array can be mutated downstream
40
40
  const categories = [...(readConfObject(conf, 'category') || [])];
@@ -82,13 +82,16 @@ export default function stateTreeFactory(pluginManager) {
82
82
  id: ElementId,
83
83
  type: types.literal('HierarchicalTrackSelectorWidget'),
84
84
  collapsed: types.map(types.boolean),
85
- filterText: '',
86
85
  view: types.safeReference(pluginManager.pluggableMstType('view', 'stateModel')),
87
86
  })
88
87
  .volatile(() => ({
89
88
  selection: [],
89
+ filterText: '',
90
90
  }))
91
91
  .actions(self => ({
92
+ setSelection(elt) {
93
+ self.selection = elt;
94
+ },
92
95
  addToSelection(elt) {
93
96
  self.selection = dedupe([...self.selection, ...elt], e => e.trackId);
94
97
  },