@jbrowse/plugin-data-management 2.6.1 → 2.6.3

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 (336) hide show
  1. package/dist/AddConnectionWidget/components/AddConnectionWidget.js +0 -1
  2. package/dist/AddConnectionWidget/components/ConfigureConnection.js +0 -1
  3. package/dist/AddConnectionWidget/components/ConnectionTypeSelect.js +0 -1
  4. package/dist/AddConnectionWidget/index.js +0 -1
  5. package/dist/AddConnectionWidget/model.js +0 -1
  6. package/dist/AddTrackWidget/components/AddTrackWidget.js +0 -1
  7. package/dist/AddTrackWidget/components/ConfirmTrack.js +0 -1
  8. package/dist/AddTrackWidget/components/DefaultAddTrackWorkflow.js +0 -1
  9. package/dist/AddTrackWidget/components/PasteConfigWorkflow.js +0 -1
  10. package/dist/AddTrackWidget/components/TextIndexingConfig.js +0 -1
  11. package/dist/AddTrackWidget/components/TrackAdapterSelector.js +0 -1
  12. package/dist/AddTrackWidget/components/TrackSourceSelect.js +0 -1
  13. package/dist/AddTrackWidget/components/TrackTypeSelector.js +0 -1
  14. package/dist/AddTrackWidget/index.js +0 -1
  15. package/dist/AddTrackWidget/model.js +0 -1
  16. package/dist/AssemblyManager/AssemblyAddForm.js +0 -1
  17. package/dist/AssemblyManager/AssemblyEditor.js +0 -1
  18. package/dist/AssemblyManager/AssemblyManager.js +0 -1
  19. package/dist/AssemblyManager/AssemblyTable.js +0 -1
  20. package/dist/AssemblyManager/index.js +0 -1
  21. package/dist/HierarchicalTrackSelectorWidget/components/HierarchicalFab.js +0 -1
  22. package/dist/HierarchicalTrackSelectorWidget/components/HierarchicalTrackSelector.js +0 -1
  23. package/dist/HierarchicalTrackSelectorWidget/components/ShoppingCart.js +0 -1
  24. package/dist/HierarchicalTrackSelectorWidget/components/dialogs/CloseConnectionDialog.js +0 -1
  25. package/dist/HierarchicalTrackSelectorWidget/components/dialogs/DeleteConnectionDialog.js +0 -1
  26. package/dist/HierarchicalTrackSelectorWidget/components/dialogs/ManageConnectionsDialog.js +0 -1
  27. package/dist/HierarchicalTrackSelectorWidget/components/dialogs/ToggleConnectionsDialog.js +0 -1
  28. package/dist/HierarchicalTrackSelectorWidget/components/faceted/FacetFilters.js +0 -1
  29. package/dist/HierarchicalTrackSelectorWidget/components/faceted/FacetedDialog.js +0 -1
  30. package/dist/HierarchicalTrackSelectorWidget/components/faceted/FacetedHeader.js +0 -1
  31. package/dist/HierarchicalTrackSelectorWidget/components/faceted/FacetedSelector.js +4 -6
  32. package/dist/HierarchicalTrackSelectorWidget/components/faceted/util.js +0 -1
  33. package/dist/HierarchicalTrackSelectorWidget/components/tree/HamburgerMenu.js +35 -20
  34. package/dist/HierarchicalTrackSelectorWidget/components/tree/HierarchicalHeader.js +10 -7
  35. package/dist/HierarchicalTrackSelectorWidget/components/tree/HierarchicalTree.d.ts +2 -1
  36. package/dist/HierarchicalTrackSelectorWidget/components/tree/HierarchicalTree.js +0 -1
  37. package/dist/HierarchicalTrackSelectorWidget/components/tree/TrackCategory.js +22 -1
  38. package/dist/HierarchicalTrackSelectorWidget/components/tree/TrackLabel.js +1 -2
  39. package/dist/HierarchicalTrackSelectorWidget/components/tree/TrackListNode.js +0 -1
  40. package/dist/HierarchicalTrackSelectorWidget/components/util.d.ts +2 -1
  41. package/dist/HierarchicalTrackSelectorWidget/components/util.js +0 -1
  42. package/dist/HierarchicalTrackSelectorWidget/configSchema.js +0 -1
  43. package/dist/HierarchicalTrackSelectorWidget/filterTracks.d.ts +12 -0
  44. package/dist/HierarchicalTrackSelectorWidget/filterTracks.js +32 -0
  45. package/dist/HierarchicalTrackSelectorWidget/generateHierarchy.d.ts +21 -0
  46. package/dist/HierarchicalTrackSelectorWidget/generateHierarchy.js +98 -0
  47. package/dist/HierarchicalTrackSelectorWidget/index.js +0 -1
  48. package/dist/HierarchicalTrackSelectorWidget/model.d.ts +68 -28
  49. package/dist/HierarchicalTrackSelectorWidget/model.js +149 -118
  50. package/dist/HierarchicalTrackSelectorWidget/util.d.ts +12 -0
  51. package/dist/HierarchicalTrackSelectorWidget/util.js +53 -0
  52. package/dist/PluginStoreWidget/components/AddCustomPluginDialog.d.ts +7 -0
  53. package/dist/PluginStoreWidget/components/{CustomPluginForm.js → AddCustomPluginDialog.js} +12 -22
  54. package/dist/PluginStoreWidget/components/DeletePluginDialog.d.ts +5 -0
  55. package/dist/PluginStoreWidget/components/DeletePluginDialog.js +28 -0
  56. package/dist/PluginStoreWidget/components/InstalledPlugin.d.ts +2 -5
  57. package/dist/PluginStoreWidget/components/InstalledPlugin.js +19 -51
  58. package/dist/PluginStoreWidget/components/InstalledPluginsList.d.ts +2 -3
  59. package/dist/PluginStoreWidget/components/InstalledPluginsList.js +6 -10
  60. package/dist/PluginStoreWidget/components/PluginCard.js +3 -6
  61. package/dist/PluginStoreWidget/components/PluginStoreWidget.js +11 -40
  62. package/dist/PluginStoreWidget/components/util.d.ts +5 -0
  63. package/dist/PluginStoreWidget/components/util.js +29 -0
  64. package/dist/PluginStoreWidget/index.js +0 -1
  65. package/dist/PluginStoreWidget/model.d.ts +2 -2
  66. package/dist/PluginStoreWidget/model.js +2 -3
  67. package/dist/SetDefaultSession/SetDefaultSession.js +0 -1
  68. package/dist/SetDefaultSession/index.js +0 -1
  69. package/dist/index.js +0 -1
  70. package/dist/ucsc-trackhub/configSchema.js +0 -1
  71. package/dist/ucsc-trackhub/index.js +0 -1
  72. package/dist/ucsc-trackhub/model.js +0 -1
  73. package/dist/ucsc-trackhub/ucscAssemblies.js +0 -1
  74. package/dist/ucsc-trackhub/ucscTrackHub.js +0 -1
  75. package/esm/AddConnectionWidget/components/AddConnectionWidget.js +0 -1
  76. package/esm/AddConnectionWidget/components/ConfigureConnection.js +0 -1
  77. package/esm/AddConnectionWidget/components/ConnectionTypeSelect.js +0 -1
  78. package/esm/AddConnectionWidget/index.js +0 -1
  79. package/esm/AddConnectionWidget/model.js +0 -1
  80. package/esm/AddTrackWidget/components/AddTrackWidget.js +0 -1
  81. package/esm/AddTrackWidget/components/ConfirmTrack.js +0 -1
  82. package/esm/AddTrackWidget/components/DefaultAddTrackWorkflow.js +0 -1
  83. package/esm/AddTrackWidget/components/PasteConfigWorkflow.js +0 -1
  84. package/esm/AddTrackWidget/components/TextIndexingConfig.js +0 -1
  85. package/esm/AddTrackWidget/components/TrackAdapterSelector.js +0 -1
  86. package/esm/AddTrackWidget/components/TrackSourceSelect.js +0 -1
  87. package/esm/AddTrackWidget/components/TrackTypeSelector.js +0 -1
  88. package/esm/AddTrackWidget/index.js +0 -1
  89. package/esm/AddTrackWidget/model.js +0 -1
  90. package/esm/AssemblyManager/AssemblyAddForm.js +0 -1
  91. package/esm/AssemblyManager/AssemblyEditor.js +0 -1
  92. package/esm/AssemblyManager/AssemblyManager.js +0 -1
  93. package/esm/AssemblyManager/AssemblyTable.js +0 -1
  94. package/esm/AssemblyManager/index.js +0 -1
  95. package/esm/HierarchicalTrackSelectorWidget/components/HierarchicalFab.js +0 -1
  96. package/esm/HierarchicalTrackSelectorWidget/components/HierarchicalTrackSelector.js +0 -1
  97. package/esm/HierarchicalTrackSelectorWidget/components/ShoppingCart.js +0 -1
  98. package/esm/HierarchicalTrackSelectorWidget/components/dialogs/CloseConnectionDialog.js +0 -1
  99. package/esm/HierarchicalTrackSelectorWidget/components/dialogs/DeleteConnectionDialog.js +0 -1
  100. package/esm/HierarchicalTrackSelectorWidget/components/dialogs/ManageConnectionsDialog.js +0 -1
  101. package/esm/HierarchicalTrackSelectorWidget/components/dialogs/ToggleConnectionsDialog.js +0 -1
  102. package/esm/HierarchicalTrackSelectorWidget/components/faceted/FacetFilters.js +0 -1
  103. package/esm/HierarchicalTrackSelectorWidget/components/faceted/FacetedDialog.js +0 -1
  104. package/esm/HierarchicalTrackSelectorWidget/components/faceted/FacetedHeader.js +0 -1
  105. package/esm/HierarchicalTrackSelectorWidget/components/faceted/FacetedSelector.js +1 -3
  106. package/esm/HierarchicalTrackSelectorWidget/components/faceted/util.js +0 -1
  107. package/esm/HierarchicalTrackSelectorWidget/components/tree/HamburgerMenu.js +34 -19
  108. package/esm/HierarchicalTrackSelectorWidget/components/tree/HierarchicalHeader.js +10 -7
  109. package/esm/HierarchicalTrackSelectorWidget/components/tree/HierarchicalTree.d.ts +2 -1
  110. package/esm/HierarchicalTrackSelectorWidget/components/tree/HierarchicalTree.js +0 -1
  111. package/esm/HierarchicalTrackSelectorWidget/components/tree/TrackCategory.js +22 -1
  112. package/esm/HierarchicalTrackSelectorWidget/components/tree/TrackLabel.js +1 -2
  113. package/esm/HierarchicalTrackSelectorWidget/components/tree/TrackListNode.js +0 -1
  114. package/esm/HierarchicalTrackSelectorWidget/components/util.d.ts +2 -1
  115. package/esm/HierarchicalTrackSelectorWidget/components/util.js +0 -1
  116. package/esm/HierarchicalTrackSelectorWidget/configSchema.js +0 -1
  117. package/esm/HierarchicalTrackSelectorWidget/filterTracks.d.ts +12 -0
  118. package/esm/HierarchicalTrackSelectorWidget/filterTracks.js +28 -0
  119. package/esm/HierarchicalTrackSelectorWidget/generateHierarchy.d.ts +21 -0
  120. package/esm/HierarchicalTrackSelectorWidget/generateHierarchy.js +94 -0
  121. package/esm/HierarchicalTrackSelectorWidget/index.js +0 -1
  122. package/esm/HierarchicalTrackSelectorWidget/model.d.ts +68 -28
  123. package/esm/HierarchicalTrackSelectorWidget/model.js +151 -117
  124. package/esm/HierarchicalTrackSelectorWidget/util.d.ts +12 -0
  125. package/esm/HierarchicalTrackSelectorWidget/util.js +45 -0
  126. package/esm/PluginStoreWidget/components/AddCustomPluginDialog.d.ts +7 -0
  127. package/esm/PluginStoreWidget/components/{CustomPluginForm.js → AddCustomPluginDialog.js} +12 -22
  128. package/esm/PluginStoreWidget/components/DeletePluginDialog.d.ts +5 -0
  129. package/esm/PluginStoreWidget/components/DeletePluginDialog.js +22 -0
  130. package/esm/PluginStoreWidget/components/InstalledPlugin.d.ts +2 -5
  131. package/esm/PluginStoreWidget/components/InstalledPlugin.js +22 -54
  132. package/esm/PluginStoreWidget/components/InstalledPluginsList.d.ts +2 -3
  133. package/esm/PluginStoreWidget/components/InstalledPluginsList.js +6 -10
  134. package/esm/PluginStoreWidget/components/PluginCard.js +3 -6
  135. package/esm/PluginStoreWidget/components/PluginStoreWidget.js +12 -41
  136. package/esm/PluginStoreWidget/components/util.d.ts +5 -0
  137. package/esm/PluginStoreWidget/components/util.js +25 -0
  138. package/esm/PluginStoreWidget/index.js +0 -1
  139. package/esm/PluginStoreWidget/model.d.ts +2 -2
  140. package/esm/PluginStoreWidget/model.js +1 -2
  141. package/esm/SetDefaultSession/SetDefaultSession.js +0 -1
  142. package/esm/SetDefaultSession/index.js +0 -1
  143. package/esm/index.js +0 -1
  144. package/esm/ucsc-trackhub/configSchema.js +0 -1
  145. package/esm/ucsc-trackhub/index.js +0 -1
  146. package/esm/ucsc-trackhub/model.js +0 -1
  147. package/esm/ucsc-trackhub/ucscAssemblies.js +0 -1
  148. package/esm/ucsc-trackhub/ucscTrackHub.js +0 -1
  149. package/package.json +3 -4
  150. package/dist/AddConnectionWidget/components/AddConnectionWidget.js.map +0 -1
  151. package/dist/AddConnectionWidget/components/ConfigureConnection.js.map +0 -1
  152. package/dist/AddConnectionWidget/components/ConnectionTypeSelect.js.map +0 -1
  153. package/dist/AddConnectionWidget/index.js.map +0 -1
  154. package/dist/AddConnectionWidget/model.js.map +0 -1
  155. package/dist/AddTrackWidget/components/AddTrackWidget.js.map +0 -1
  156. package/dist/AddTrackWidget/components/ConfirmTrack.js.map +0 -1
  157. package/dist/AddTrackWidget/components/DefaultAddTrackWorkflow.js.map +0 -1
  158. package/dist/AddTrackWidget/components/PasteConfigWorkflow.js.map +0 -1
  159. package/dist/AddTrackWidget/components/TextIndexingConfig.js.map +0 -1
  160. package/dist/AddTrackWidget/components/TrackAdapterSelector.js.map +0 -1
  161. package/dist/AddTrackWidget/components/TrackSourceSelect.js.map +0 -1
  162. package/dist/AddTrackWidget/components/TrackTypeSelector.js.map +0 -1
  163. package/dist/AddTrackWidget/index.js.map +0 -1
  164. package/dist/AddTrackWidget/model.js.map +0 -1
  165. package/dist/AssemblyManager/AssemblyAddForm.js.map +0 -1
  166. package/dist/AssemblyManager/AssemblyEditor.js.map +0 -1
  167. package/dist/AssemblyManager/AssemblyManager.js.map +0 -1
  168. package/dist/AssemblyManager/AssemblyTable.js.map +0 -1
  169. package/dist/AssemblyManager/index.js.map +0 -1
  170. package/dist/HierarchicalTrackSelectorWidget/components/HierarchicalFab.js.map +0 -1
  171. package/dist/HierarchicalTrackSelectorWidget/components/HierarchicalTrackSelector.js.map +0 -1
  172. package/dist/HierarchicalTrackSelectorWidget/components/ShoppingCart.js.map +0 -1
  173. package/dist/HierarchicalTrackSelectorWidget/components/dialogs/CloseConnectionDialog.js.map +0 -1
  174. package/dist/HierarchicalTrackSelectorWidget/components/dialogs/DeleteConnectionDialog.js.map +0 -1
  175. package/dist/HierarchicalTrackSelectorWidget/components/dialogs/ManageConnectionsDialog.js.map +0 -1
  176. package/dist/HierarchicalTrackSelectorWidget/components/dialogs/ToggleConnectionsDialog.js.map +0 -1
  177. package/dist/HierarchicalTrackSelectorWidget/components/faceted/FacetFilters.js.map +0 -1
  178. package/dist/HierarchicalTrackSelectorWidget/components/faceted/FacetedDialog.js.map +0 -1
  179. package/dist/HierarchicalTrackSelectorWidget/components/faceted/FacetedHeader.js.map +0 -1
  180. package/dist/HierarchicalTrackSelectorWidget/components/faceted/FacetedSelector.js.map +0 -1
  181. package/dist/HierarchicalTrackSelectorWidget/components/faceted/util.js.map +0 -1
  182. package/dist/HierarchicalTrackSelectorWidget/components/tree/HamburgerMenu.js.map +0 -1
  183. package/dist/HierarchicalTrackSelectorWidget/components/tree/HierarchicalHeader.js.map +0 -1
  184. package/dist/HierarchicalTrackSelectorWidget/components/tree/HierarchicalTree.js.map +0 -1
  185. package/dist/HierarchicalTrackSelectorWidget/components/tree/TrackCategory.js.map +0 -1
  186. package/dist/HierarchicalTrackSelectorWidget/components/tree/TrackLabel.js.map +0 -1
  187. package/dist/HierarchicalTrackSelectorWidget/components/tree/TrackListNode.js.map +0 -1
  188. package/dist/HierarchicalTrackSelectorWidget/components/util.js.map +0 -1
  189. package/dist/HierarchicalTrackSelectorWidget/configSchema.js.map +0 -1
  190. package/dist/HierarchicalTrackSelectorWidget/index.js.map +0 -1
  191. package/dist/HierarchicalTrackSelectorWidget/model.js.map +0 -1
  192. package/dist/PluginStoreWidget/components/CustomPluginForm.d.ts +0 -9
  193. package/dist/PluginStoreWidget/components/CustomPluginForm.js.map +0 -1
  194. package/dist/PluginStoreWidget/components/InstalledPlugin.js.map +0 -1
  195. package/dist/PluginStoreWidget/components/InstalledPluginsList.js.map +0 -1
  196. package/dist/PluginStoreWidget/components/PluginCard.js.map +0 -1
  197. package/dist/PluginStoreWidget/components/PluginStoreWidget.js.map +0 -1
  198. package/dist/PluginStoreWidget/index.js.map +0 -1
  199. package/dist/PluginStoreWidget/model.js.map +0 -1
  200. package/dist/SetDefaultSession/SetDefaultSession.js.map +0 -1
  201. package/dist/SetDefaultSession/index.js.map +0 -1
  202. package/dist/index.js.map +0 -1
  203. package/dist/ucsc-trackhub/configSchema.js.map +0 -1
  204. package/dist/ucsc-trackhub/index.js.map +0 -1
  205. package/dist/ucsc-trackhub/model.js.map +0 -1
  206. package/dist/ucsc-trackhub/ucscAssemblies.js.map +0 -1
  207. package/dist/ucsc-trackhub/ucscTrackHub.js.map +0 -1
  208. package/esm/AddConnectionWidget/components/AddConnectionWidget.js.map +0 -1
  209. package/esm/AddConnectionWidget/components/ConfigureConnection.js.map +0 -1
  210. package/esm/AddConnectionWidget/components/ConnectionTypeSelect.js.map +0 -1
  211. package/esm/AddConnectionWidget/index.js.map +0 -1
  212. package/esm/AddConnectionWidget/model.js.map +0 -1
  213. package/esm/AddTrackWidget/components/AddTrackWidget.js.map +0 -1
  214. package/esm/AddTrackWidget/components/ConfirmTrack.js.map +0 -1
  215. package/esm/AddTrackWidget/components/DefaultAddTrackWorkflow.js.map +0 -1
  216. package/esm/AddTrackWidget/components/PasteConfigWorkflow.js.map +0 -1
  217. package/esm/AddTrackWidget/components/TextIndexingConfig.js.map +0 -1
  218. package/esm/AddTrackWidget/components/TrackAdapterSelector.js.map +0 -1
  219. package/esm/AddTrackWidget/components/TrackSourceSelect.js.map +0 -1
  220. package/esm/AddTrackWidget/components/TrackTypeSelector.js.map +0 -1
  221. package/esm/AddTrackWidget/index.js.map +0 -1
  222. package/esm/AddTrackWidget/model.js.map +0 -1
  223. package/esm/AssemblyManager/AssemblyAddForm.js.map +0 -1
  224. package/esm/AssemblyManager/AssemblyEditor.js.map +0 -1
  225. package/esm/AssemblyManager/AssemblyManager.js.map +0 -1
  226. package/esm/AssemblyManager/AssemblyTable.js.map +0 -1
  227. package/esm/AssemblyManager/index.js.map +0 -1
  228. package/esm/HierarchicalTrackSelectorWidget/components/HierarchicalFab.js.map +0 -1
  229. package/esm/HierarchicalTrackSelectorWidget/components/HierarchicalTrackSelector.js.map +0 -1
  230. package/esm/HierarchicalTrackSelectorWidget/components/ShoppingCart.js.map +0 -1
  231. package/esm/HierarchicalTrackSelectorWidget/components/dialogs/CloseConnectionDialog.js.map +0 -1
  232. package/esm/HierarchicalTrackSelectorWidget/components/dialogs/DeleteConnectionDialog.js.map +0 -1
  233. package/esm/HierarchicalTrackSelectorWidget/components/dialogs/ManageConnectionsDialog.js.map +0 -1
  234. package/esm/HierarchicalTrackSelectorWidget/components/dialogs/ToggleConnectionsDialog.js.map +0 -1
  235. package/esm/HierarchicalTrackSelectorWidget/components/faceted/FacetFilters.js.map +0 -1
  236. package/esm/HierarchicalTrackSelectorWidget/components/faceted/FacetedDialog.js.map +0 -1
  237. package/esm/HierarchicalTrackSelectorWidget/components/faceted/FacetedHeader.js.map +0 -1
  238. package/esm/HierarchicalTrackSelectorWidget/components/faceted/FacetedSelector.js.map +0 -1
  239. package/esm/HierarchicalTrackSelectorWidget/components/faceted/util.js.map +0 -1
  240. package/esm/HierarchicalTrackSelectorWidget/components/tree/HamburgerMenu.js.map +0 -1
  241. package/esm/HierarchicalTrackSelectorWidget/components/tree/HierarchicalHeader.js.map +0 -1
  242. package/esm/HierarchicalTrackSelectorWidget/components/tree/HierarchicalTree.js.map +0 -1
  243. package/esm/HierarchicalTrackSelectorWidget/components/tree/TrackCategory.js.map +0 -1
  244. package/esm/HierarchicalTrackSelectorWidget/components/tree/TrackLabel.js.map +0 -1
  245. package/esm/HierarchicalTrackSelectorWidget/components/tree/TrackListNode.js.map +0 -1
  246. package/esm/HierarchicalTrackSelectorWidget/components/util.js.map +0 -1
  247. package/esm/HierarchicalTrackSelectorWidget/configSchema.js.map +0 -1
  248. package/esm/HierarchicalTrackSelectorWidget/index.js.map +0 -1
  249. package/esm/HierarchicalTrackSelectorWidget/model.js.map +0 -1
  250. package/esm/PluginStoreWidget/components/CustomPluginForm.d.ts +0 -9
  251. package/esm/PluginStoreWidget/components/CustomPluginForm.js.map +0 -1
  252. package/esm/PluginStoreWidget/components/InstalledPlugin.js.map +0 -1
  253. package/esm/PluginStoreWidget/components/InstalledPluginsList.js.map +0 -1
  254. package/esm/PluginStoreWidget/components/PluginCard.js.map +0 -1
  255. package/esm/PluginStoreWidget/components/PluginStoreWidget.js.map +0 -1
  256. package/esm/PluginStoreWidget/index.js.map +0 -1
  257. package/esm/PluginStoreWidget/model.js.map +0 -1
  258. package/esm/SetDefaultSession/SetDefaultSession.js.map +0 -1
  259. package/esm/SetDefaultSession/index.js.map +0 -1
  260. package/esm/index.js.map +0 -1
  261. package/esm/ucsc-trackhub/configSchema.js.map +0 -1
  262. package/esm/ucsc-trackhub/index.js.map +0 -1
  263. package/esm/ucsc-trackhub/model.js.map +0 -1
  264. package/esm/ucsc-trackhub/ucscAssemblies.js.map +0 -1
  265. package/esm/ucsc-trackhub/ucscTrackHub.js.map +0 -1
  266. package/src/AddConnectionWidget/components/AddConnectionWidget.test.tsx +0 -139
  267. package/src/AddConnectionWidget/components/AddConnectionWidget.tsx +0 -114
  268. package/src/AddConnectionWidget/components/ConfigureConnection.tsx +0 -26
  269. package/src/AddConnectionWidget/components/ConnectionTypeSelect.tsx +0 -64
  270. package/src/AddConnectionWidget/components/__snapshots__/AddConnectionWidget.test.tsx.snap +0 -236
  271. package/src/AddConnectionWidget/index.ts +0 -19
  272. package/src/AddConnectionWidget/model.ts +0 -7
  273. package/src/AddTrackWidget/components/AddTrackWidget.test.tsx +0 -118
  274. package/src/AddTrackWidget/components/AddTrackWidget.tsx +0 -43
  275. package/src/AddTrackWidget/components/ConfirmTrack.tsx +0 -189
  276. package/src/AddTrackWidget/components/DefaultAddTrackWorkflow.tsx +0 -201
  277. package/src/AddTrackWidget/components/PasteConfigWorkflow.tsx +0 -65
  278. package/src/AddTrackWidget/components/TextIndexingConfig.tsx +0 -132
  279. package/src/AddTrackWidget/components/TrackAdapterSelector.tsx +0 -73
  280. package/src/AddTrackWidget/components/TrackSourceSelect.tsx +0 -48
  281. package/src/AddTrackWidget/components/TrackTypeSelector.tsx +0 -46
  282. package/src/AddTrackWidget/index.test.tsx +0 -247
  283. package/src/AddTrackWidget/index.ts +0 -19
  284. package/src/AddTrackWidget/model.ts +0 -179
  285. package/src/AssemblyManager/AssemblyAddForm.tsx +0 -250
  286. package/src/AssemblyManager/AssemblyEditor.tsx +0 -20
  287. package/src/AssemblyManager/AssemblyManager.test.tsx +0 -93
  288. package/src/AssemblyManager/AssemblyManager.tsx +0 -84
  289. package/src/AssemblyManager/AssemblyTable.tsx +0 -88
  290. package/src/AssemblyManager/index.ts +0 -1
  291. package/src/HierarchicalTrackSelectorWidget/components/HierarchicalFab.tsx +0 -94
  292. package/src/HierarchicalTrackSelectorWidget/components/HierarchicalTrackSelector.test.tsx +0 -148
  293. package/src/HierarchicalTrackSelectorWidget/components/HierarchicalTrackSelector.tsx +0 -87
  294. package/src/HierarchicalTrackSelectorWidget/components/ShoppingCart.tsx +0 -73
  295. package/src/HierarchicalTrackSelectorWidget/components/__snapshots__/HierarchicalTrackSelector.test.tsx.snap +0 -265
  296. package/src/HierarchicalTrackSelectorWidget/components/dialogs/CloseConnectionDialog.tsx +0 -65
  297. package/src/HierarchicalTrackSelectorWidget/components/dialogs/DeleteConnectionDialog.tsx +0 -53
  298. package/src/HierarchicalTrackSelectorWidget/components/dialogs/ManageConnectionsDialog.tsx +0 -84
  299. package/src/HierarchicalTrackSelectorWidget/components/dialogs/ToggleConnectionsDialog.tsx +0 -127
  300. package/src/HierarchicalTrackSelectorWidget/components/faceted/FacetFilters.tsx +0 -138
  301. package/src/HierarchicalTrackSelectorWidget/components/faceted/FacetedDialog.tsx +0 -29
  302. package/src/HierarchicalTrackSelectorWidget/components/faceted/FacetedHeader.tsx +0 -96
  303. package/src/HierarchicalTrackSelectorWidget/components/faceted/FacetedSelector.tsx +0 -342
  304. package/src/HierarchicalTrackSelectorWidget/components/faceted/util.ts +0 -5
  305. package/src/HierarchicalTrackSelectorWidget/components/tree/HamburgerMenu.tsx +0 -190
  306. package/src/HierarchicalTrackSelectorWidget/components/tree/HierarchicalHeader.tsx +0 -83
  307. package/src/HierarchicalTrackSelectorWidget/components/tree/HierarchicalTree.tsx +0 -101
  308. package/src/HierarchicalTrackSelectorWidget/components/tree/TrackCategory.tsx +0 -92
  309. package/src/HierarchicalTrackSelectorWidget/components/tree/TrackLabel.tsx +0 -106
  310. package/src/HierarchicalTrackSelectorWidget/components/tree/TrackListNode.tsx +0 -84
  311. package/src/HierarchicalTrackSelectorWidget/components/util.ts +0 -41
  312. package/src/HierarchicalTrackSelectorWidget/configSchema.ts +0 -3
  313. package/src/HierarchicalTrackSelectorWidget/index.ts +0 -25
  314. package/src/HierarchicalTrackSelectorWidget/model.test.js +0 -24
  315. package/src/HierarchicalTrackSelectorWidget/model.ts +0 -339
  316. package/src/PluginStoreWidget/components/CustomPluginForm.tsx +0 -165
  317. package/src/PluginStoreWidget/components/InstalledPlugin.tsx +0 -167
  318. package/src/PluginStoreWidget/components/InstalledPluginsList.tsx +0 -49
  319. package/src/PluginStoreWidget/components/PluginCard.tsx +0 -106
  320. package/src/PluginStoreWidget/components/PluginStoreWidget.test.tsx +0 -132
  321. package/src/PluginStoreWidget/components/PluginStoreWidget.tsx +0 -181
  322. package/src/PluginStoreWidget/components/__snapshots__/PluginStoreWidget.test.tsx.snap +0 -869
  323. package/src/PluginStoreWidget/index.ts +0 -19
  324. package/src/PluginStoreWidget/model.test.tsx +0 -15
  325. package/src/PluginStoreWidget/model.ts +0 -26
  326. package/src/SetDefaultSession/SetDefaultSession.test.tsx +0 -59
  327. package/src/SetDefaultSession/SetDefaultSession.tsx +0 -76
  328. package/src/SetDefaultSession/index.ts +0 -1
  329. package/src/__snapshots__/index.test.ts.snap +0 -9
  330. package/src/index.test.ts +0 -54
  331. package/src/index.ts +0 -37
  332. package/src/ucsc-trackhub/configSchema.ts +0 -41
  333. package/src/ucsc-trackhub/index.ts +0 -19
  334. package/src/ucsc-trackhub/model.ts +0 -111
  335. package/src/ucsc-trackhub/ucscAssemblies.ts +0 -201
  336. package/src/ucsc-trackhub/ucscTrackHub.ts +0 -325
@@ -1,95 +1,11 @@
1
- import { types, getSnapshot } from 'mobx-state-tree';
1
+ import { types } from 'mobx-state-tree';
2
2
  import { getConf, readConfObject, } from '@jbrowse/core/configuration';
3
- import { dedupe, getSession, getEnv, notEmpty, } from '@jbrowse/core/util';
4
- import { getTrackName } from '@jbrowse/core/util/tracks';
3
+ import { dedupe, getSession, notEmpty } from '@jbrowse/core/util';
5
4
  import { ElementId } from '@jbrowse/core/util/types/mst';
6
- function hasAnyOverlap(a1 = [], a2 = []) {
7
- // shortcut case is that arrays are single entries, and are equal
8
- // long case is that we use a set
9
- if (a1[0] === a2[0]) {
10
- return true;
11
- }
12
- else {
13
- const s1 = new Set(a1);
14
- return a2.some(a => s1.has(a));
15
- }
16
- }
17
- export function matches(query, conf, session) {
18
- const categories = readConfObject(conf, 'category');
19
- const queryLower = query.toLowerCase();
20
- return (getTrackName(conf, session).toLowerCase().includes(queryLower) ||
21
- !!(categories === null || categories === void 0 ? void 0 : categories.filter(c => c.toLowerCase().includes(queryLower)).length));
22
- }
23
- function filterTracks(tracks, self) {
24
- const { assemblyManager } = getSession(self);
25
- const { pluginManager } = getEnv(self);
26
- const { view } = self;
27
- const { trackSelectorAnyOverlap } = view;
28
- const trackListAssemblies = self.assemblyNames
29
- .map(a => assemblyManager.get(a))
30
- .filter(notEmpty);
31
- return tracks
32
- .filter(c => {
33
- const trackAssemblyNames = readConfObject(c, 'assemblyNames');
34
- const trackAssemblies = new Set((trackAssemblyNames === null || trackAssemblyNames === void 0 ? void 0 : trackAssemblyNames.map(name => assemblyManager.get(name)).filter(notEmpty)) || []);
35
- return trackSelectorAnyOverlap
36
- ? trackListAssemblies.some(a => trackAssemblies.has(a))
37
- : trackListAssemblies.every(a => trackAssemblies.has(a));
38
- })
39
- .filter(c => {
40
- const { displayTypes } = pluginManager.getViewType(view.type);
41
- const compatDisplays = displayTypes.map(d => d.name);
42
- const trackDisplays = c.displays.map((d) => d.type);
43
- return hasAnyOverlap(compatDisplays, trackDisplays);
44
- });
45
- }
46
- export function generateHierarchy(model, trackConfigurations, collapsed, extra) {
47
- const hierarchy = { children: [] };
48
- const { filterText, view } = model;
49
- const session = getSession(model);
50
- trackConfigurations
51
- .filter(conf => matches(filterText, conf, session))
52
- .forEach(conf => {
53
- // copy the categories since this array can be mutated downstream
54
- const categories = [...(readConfObject(conf, 'category') || [])];
55
- // silly thing where if trackId ends with sessionTrack, then push it to
56
- // a category that starts with a space to force sort to the top...
57
- // double whammy hackyness
58
- if (conf.trackId.endsWith('sessionTrack')) {
59
- categories.unshift(' Session tracks');
60
- }
61
- let currLevel = hierarchy;
62
- // find existing category to put track into or create it
63
- for (let i = 0; i < categories.length; i++) {
64
- const category = categories[i];
65
- const ret = currLevel.children.find(c => c.name === category);
66
- const id = extra + '-' + categories.slice(0, i + 1).join(',');
67
- if (!ret) {
68
- const n = {
69
- children: [],
70
- name: category,
71
- id,
72
- isOpenByDefault: !collapsed.get(id),
73
- };
74
- currLevel.children.push(n);
75
- currLevel = n;
76
- }
77
- else {
78
- currLevel = ret;
79
- }
80
- }
81
- const tracks = view.tracks;
82
- // using splice here tries to group leaf nodes above hierarchical nodes
83
- currLevel.children.splice(currLevel.children.findIndex(elt => elt.children.length), 0, {
84
- id: conf.trackId,
85
- name: getTrackName(conf, session),
86
- conf,
87
- checked: tracks.some(f => f.configuration === conf),
88
- children: [],
89
- });
90
- });
91
- return hierarchy.children;
92
- }
5
+ // locals
6
+ import { filterTracks } from './filterTracks';
7
+ import { generateHierarchy } from './generateHierarchy';
8
+ import { findSubCategories, findTopLevelCategories } from './util';
93
9
  /**
94
10
  * #stateModel HierarchicalTrackSelectorWidget
95
11
  */
@@ -104,10 +20,22 @@ export default function stateTreeFactory(pluginManager) {
104
20
  * #property
105
21
  */
106
22
  type: types.literal('HierarchicalTrackSelectorWidget'),
23
+ /**
24
+ * #property
25
+ */
26
+ initialized: types.maybe(types.boolean),
107
27
  /**
108
28
  * #property
109
29
  */
110
30
  collapsed: types.map(types.boolean),
31
+ /**
32
+ * #property
33
+ */
34
+ sortTrackNames: types.maybe(types.boolean),
35
+ /**
36
+ * #property
37
+ */
38
+ sortCategories: types.maybe(types.boolean),
111
39
  /**
112
40
  * #property
113
41
  */
@@ -118,6 +46,18 @@ export default function stateTreeFactory(pluginManager) {
118
46
  filterText: '',
119
47
  }))
120
48
  .actions(self => ({
49
+ /**
50
+ * #action
51
+ */
52
+ setSortTrackNames(val) {
53
+ self.sortTrackNames = val;
54
+ },
55
+ /**
56
+ * #action
57
+ */
58
+ setSortCategories(val) {
59
+ self.sortCategories = val;
60
+ },
121
61
  /**
122
62
  * #action
123
63
  */
@@ -154,6 +94,18 @@ export default function stateTreeFactory(pluginManager) {
154
94
  toggleCategory(pathName) {
155
95
  self.collapsed.set(pathName, !self.collapsed.get(pathName));
156
96
  },
97
+ /**
98
+ * #action
99
+ */
100
+ setCategoryCollapsed(pathName, status) {
101
+ self.collapsed.set(pathName, status);
102
+ },
103
+ /**
104
+ * #action
105
+ */
106
+ expandAllCategories() {
107
+ self.collapsed.clear();
108
+ },
157
109
  /**
158
110
  * #action
159
111
  */
@@ -197,24 +149,59 @@ export default function stateTreeFactory(pluginManager) {
197
149
  },
198
150
  }))
199
151
  .views(self => ({
152
+ /**
153
+ * #getter
154
+ */
155
+ get activeSortTrackNames() {
156
+ var _a;
157
+ return ((_a = self.sortTrackNames) !== null && _a !== void 0 ? _a : getConf(getSession(self), ['hierarchical', 'sort', 'trackNames']));
158
+ },
159
+ /**
160
+ * #getter
161
+ */
162
+ get activeSortCategories() {
163
+ var _a;
164
+ return ((_a = self.sortCategories) !== null && _a !== void 0 ? _a : getConf(getSession(self), ['hierarchical', 'sort', 'categories']));
165
+ },
200
166
  /**
201
167
  * #method
202
168
  * filter out tracks that don't match the current display types
203
169
  */
204
170
  connectionTrackConfigurations(connection) {
205
- return !self.view ? [] : filterTracks(connection.tracks, self);
171
+ return filterTracks(connection.tracks, self);
206
172
  },
207
173
  /**
208
174
  * #getter
209
175
  * filter out tracks that don't match the current assembly/display types
210
176
  */
211
177
  get trackConfigurations() {
212
- return !self.view
213
- ? []
214
- : [
215
- ...self.assemblyNames.map(a => self.getRefSeqTrackConf(a)),
216
- ...filterTracks(getSession(self).tracks, self),
217
- ].filter(notEmpty);
178
+ return [
179
+ ...self.assemblyNames.map(a => self.getRefSeqTrackConf(a)),
180
+ ...filterTracks(getSession(self).tracks, self),
181
+ ].filter(notEmpty);
182
+ },
183
+ }))
184
+ .views(self => ({
185
+ /**
186
+ * #method
187
+ */
188
+ connectionHierarchy(connection) {
189
+ return generateHierarchy(self, self.connectionTrackConfigurations(connection), self.collapsed, connection.name);
190
+ },
191
+ }))
192
+ .views(self => ({
193
+ get allTracks() {
194
+ const { connectionInstances = [] } = getSession(self);
195
+ return [
196
+ {
197
+ group: 'Tracks',
198
+ tracks: self.trackConfigurations,
199
+ },
200
+ ...connectionInstances.flatMap(c => ({
201
+ group: getConf(c, 'name'),
202
+ tracks: c.tracks,
203
+ })),
204
+ ];
218
205
  },
219
206
  }))
220
207
  .views(self => ({
@@ -222,33 +209,80 @@ export default function stateTreeFactory(pluginManager) {
222
209
  * #getter
223
210
  */
224
211
  get hierarchy() {
225
- const hier = generateHierarchy(self, self.trackConfigurations, self.collapsed);
226
- const session = getSession(self);
227
- const { connectionInstances } = session;
228
- const conns = (connectionInstances === null || connectionInstances === void 0 ? void 0 : connectionInstances.map(c => ({
229
- // @ts-expect-error
230
- id: getSnapshot(c).configuration,
231
- name: getConf(c, 'name'),
232
- children: this.connectionHierarchy(c),
233
- state: {
234
- expanded: true,
235
- },
236
- })).filter(f => f.children.length)) || [];
237
212
  return {
238
213
  name: 'Root',
239
214
  id: 'Root',
240
- children: [
241
- { name: 'Tracks', id: 'Tracks', children: hier },
242
- ...conns,
243
- ],
215
+ children: self.allTracks
216
+ .map(s => ({
217
+ name: s.group,
218
+ id: s.group,
219
+ children: generateHierarchy(self, s.tracks, self.collapsed),
220
+ }))
221
+ // always keep the Tracks entry at idx 0
222
+ .filter((f, idx) => idx === 0 || !!f.children.length),
244
223
  };
245
224
  },
225
+ }))
226
+ .actions(self => ({
246
227
  /**
247
- * #method
228
+ * #action
248
229
  */
249
- connectionHierarchy(connection) {
250
- return generateHierarchy(self, self.connectionTrackConfigurations(connection), self.collapsed, connection.name);
230
+ collapseSubCategories() {
231
+ const paths = [];
232
+ findSubCategories(self.hierarchy.children, paths);
233
+ for (const path of paths) {
234
+ self.setCategoryCollapsed(path, true);
235
+ }
236
+ },
237
+ /**
238
+ * #action
239
+ */
240
+ collapseTopLevelCategories() {
241
+ const paths = [];
242
+ for (const trackGroups of self.hierarchy.children) {
243
+ if (trackGroups.children.length) {
244
+ findTopLevelCategories(trackGroups.children, paths);
245
+ }
246
+ }
247
+ for (const path of paths) {
248
+ self.setCategoryCollapsed(path, true);
249
+ }
250
+ },
251
+ }))
252
+ .actions(self => ({
253
+ afterCreate() {
254
+ if (!self.initialized) {
255
+ const session = getSession(self);
256
+ if (getConf(session, [
257
+ 'hierarchical',
258
+ 'defaultCollapsed',
259
+ 'topLevelCategories',
260
+ ])) {
261
+ self.collapseTopLevelCategories();
262
+ }
263
+ else if (getConf(session, [
264
+ 'hierarchical',
265
+ 'defaultCollapsed',
266
+ 'subCategories',
267
+ ])) {
268
+ self.collapseSubCategories();
269
+ }
270
+ else {
271
+ for (const entry of getConf(session, [
272
+ 'hierarchical',
273
+ 'defaultCollapsed',
274
+ 'categoryNames',
275
+ ])) {
276
+ self.collapsed.set(entry, true);
277
+ }
278
+ }
279
+ self.initialized = true;
280
+ }
281
+ },
282
+ }))
283
+ .views(self => ({
284
+ get hasAnySubcategories() {
285
+ return self.allTracks.some(group => group.tracks.some(track => { var _a; return ((_a = readConfObject(track, 'category')) === null || _a === void 0 ? void 0 : _a.length) > 1; }));
251
286
  },
252
287
  }));
253
288
  }
254
- //# sourceMappingURL=model.js.map
@@ -0,0 +1,12 @@
1
+ import { AnyConfigurationModel } from '@jbrowse/core/configuration';
2
+ import { AbstractSessionModel } from '@jbrowse/core/util';
3
+ export declare function hasAnyOverlap<T>(a1?: T[], a2?: T[]): boolean;
4
+ export declare function hasAllOverlap<T>(a1?: T[], a2?: T[]): boolean;
5
+ export declare function matches(query: string, conf: AnyConfigurationModel, session: AbstractSessionModel): boolean;
6
+ interface Node {
7
+ children: Node[];
8
+ id: string;
9
+ }
10
+ export declare function findSubCategories(obj: Node[], paths: string[]): boolean;
11
+ export declare function findTopLevelCategories(obj: Node[], paths: string[]): void;
12
+ export {};
@@ -0,0 +1,45 @@
1
+ import { readConfObject, } from '@jbrowse/core/configuration';
2
+ import { getTrackName } from '@jbrowse/core/util/tracks';
3
+ export function hasAnyOverlap(a1 = [], a2 = []) {
4
+ // shortcut case is that arrays are single entries, and are equal
5
+ // long case is that we use a set
6
+ if (a1[0] === a2[0]) {
7
+ return true;
8
+ }
9
+ else {
10
+ const s1 = new Set(a1);
11
+ return a2.some(a => s1.has(a));
12
+ }
13
+ }
14
+ export function hasAllOverlap(a1 = [], a2 = []) {
15
+ const s1 = new Set(a1);
16
+ return a2.every(a => s1.has(a));
17
+ }
18
+ export function matches(query, conf, session) {
19
+ const categories = (readConfObject(conf, 'category') || []);
20
+ const queryLower = query.toLowerCase();
21
+ return (getTrackName(conf, session).toLowerCase().includes(queryLower) ||
22
+ !!categories.filter(c => c.toLowerCase().includes(queryLower)).length);
23
+ }
24
+ export function findSubCategories(obj, paths) {
25
+ let hasSubs = false;
26
+ for (const elt of obj) {
27
+ if (elt.children.length) {
28
+ const hasSubCategories = findSubCategories(elt.children, paths);
29
+ if (hasSubCategories) {
30
+ paths.push(elt.id);
31
+ }
32
+ }
33
+ else {
34
+ hasSubs = true;
35
+ }
36
+ }
37
+ return hasSubs;
38
+ }
39
+ export function findTopLevelCategories(obj, paths) {
40
+ for (const elt of obj) {
41
+ if (elt.children.length) {
42
+ paths.push(elt.id);
43
+ }
44
+ }
45
+ }
@@ -0,0 +1,7 @@
1
+ import React from 'react';
2
+ import { PluginStoreModel } from '../model';
3
+ declare const _default: ({ onClose, model, }: {
4
+ onClose: () => void;
5
+ model: PluginStoreModel;
6
+ }) => React.JSX.Element;
7
+ export default _default;
@@ -1,9 +1,9 @@
1
1
  import React, { useState } from 'react';
2
2
  import { observer } from 'mobx-react';
3
- import { getRoot } from 'mobx-state-tree';
4
3
  import { Dialog } from '@jbrowse/core/ui';
5
4
  import { Button, Collapse, DialogActions, DialogContent, DialogContentText, TextField, } from '@mui/material';
6
5
  import { makeStyles } from 'tss-react/mui';
6
+ import { getSession } from '@jbrowse/core/util';
7
7
  // icons
8
8
  import IconButton from '@mui/material/IconButton';
9
9
  import ExpandMoreIcon from '@mui/icons-material/ExpandMore';
@@ -23,40 +23,32 @@ const useStyles = makeStyles()(theme => ({
23
23
  transform: 'rotate(180deg)',
24
24
  },
25
25
  }));
26
- function CustomPluginForm({ open, onClose, model, }) {
26
+ export default observer(function ({ onClose, model, }) {
27
27
  const { classes, cx } = useStyles();
28
28
  const [umdPluginName, setUMDPluginName] = useState('');
29
29
  const [umdPluginUrl, setUMDPluginUrl] = useState('');
30
30
  const [esmPluginUrl, setESMPluginUrl] = useState('');
31
31
  const [cjsPluginUrl, setCJSPluginUrl] = useState('');
32
32
  const [advancedOptionsOpen, setAdvancedOptionsOpen] = useState(false);
33
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
34
- const { jbrowse } = getRoot(model);
33
+ const { jbrowse } = getSession(model);
35
34
  const ready = Boolean((umdPluginName && umdPluginUrl) || esmPluginUrl || cjsPluginUrl);
36
35
  function handleSubmit() {
37
36
  if (umdPluginName && umdPluginUrl) {
38
37
  jbrowse.addPlugin({ name: umdPluginName, umdUrl: umdPluginUrl });
39
38
  }
40
- if (esmPluginUrl) {
39
+ else if (esmPluginUrl) {
41
40
  jbrowse.addPlugin({ esmUrl: esmPluginUrl });
42
41
  }
43
- if (cjsPluginUrl) {
42
+ else if (cjsPluginUrl) {
44
43
  jbrowse.addPlugin({ cjsUrl: cjsPluginUrl });
45
44
  }
46
45
  }
47
- function handleClose() {
48
- setUMDPluginName('');
49
- setUMDPluginUrl('');
50
- setESMPluginUrl('');
51
- setCJSPluginUrl('');
52
- onClose();
53
- }
54
- return (React.createElement(Dialog, { open: open, onClose: handleClose, title: "Add custom plugin" },
46
+ return (React.createElement(Dialog, { open: true, onClose: onClose, title: "Add custom plugin" },
55
47
  React.createElement("form", { onSubmit: handleSubmit },
56
48
  React.createElement(DialogContent, { className: classes.dialogContent },
57
49
  React.createElement(DialogContentText, null, "Enter the name of the plugin and its URL. The name should match what is defined in the plugin's build."),
58
- React.createElement(TextField, { id: "umd-name-input", name: "umdName", label: "Plugin name", variant: "outlined", value: umdPluginName, onChange: event => setUMDPluginName(event.target.value) }),
59
- React.createElement(TextField, { id: "umd-url-input", name: "umdUrl", label: "Plugin URL", variant: "outlined", value: umdPluginUrl, onChange: event => setUMDPluginUrl(event.target.value) }),
50
+ React.createElement(TextField, { label: "Plugin name", variant: "outlined", value: umdPluginName, onChange: event => setUMDPluginName(event.target.value) }),
51
+ React.createElement(TextField, { label: "Plugin URL", variant: "outlined", value: umdPluginUrl, onChange: event => setUMDPluginUrl(event.target.value) }),
60
52
  React.createElement(DialogContentText, { onClick: () => setAdvancedOptionsOpen(!advancedOptionsOpen) },
61
53
  React.createElement(IconButton, { className: cx(classes.expand, {
62
54
  [classes.expandOpen]: advancedOptionsOpen,
@@ -66,11 +58,9 @@ function CustomPluginForm({ open, onClose, model, }) {
66
58
  React.createElement(Collapse, { in: advancedOptionsOpen },
67
59
  React.createElement("div", { className: classes.dialogContent },
68
60
  React.createElement(DialogContentText, null, "The above fields assume that the plugin is built in UMD format. If your plugin is in another format, or you have additional builds you want to add (such as a CJS build for using NodeJS APIs in desktop), you can enter the URLs for those builds below."),
69
- React.createElement(TextField, { id: "esm-url-input", name: "esmUrl", label: "ESM build URL", variant: "outlined", value: esmPluginUrl, onChange: event => setESMPluginUrl(event.target.value) }),
70
- React.createElement(TextField, { id: "cjs-url-input", name: "cjsUrl", label: "CJS build URL", variant: "outlined", value: cjsPluginUrl, onChange: event => setCJSPluginUrl(event.target.value) })))),
61
+ React.createElement(TextField, { label: "ESM build URL", variant: "outlined", value: esmPluginUrl, onChange: event => setESMPluginUrl(event.target.value) }),
62
+ React.createElement(TextField, { label: "CJS build URL", variant: "outlined", value: cjsPluginUrl, onChange: event => setCJSPluginUrl(event.target.value) })))),
71
63
  React.createElement(DialogActions, null,
72
- React.createElement(Button, { variant: "contained", onClick: handleClose }, "Cancel"),
64
+ React.createElement(Button, { variant: "contained", onClick: onClose }, "Cancel"),
73
65
  React.createElement(Button, { variant: "contained", color: "primary", onClick: handleSubmit, disabled: !ready }, "Submit")))));
74
- }
75
- export default observer(CustomPluginForm);
76
- //# sourceMappingURL=CustomPluginForm.js.map
66
+ });
@@ -0,0 +1,5 @@
1
+ import React from 'react';
2
+ export default function DeletePluginDialog({ onClose, plugin, }: {
3
+ plugin: string;
4
+ onClose: (s?: string) => void;
5
+ }): React.JSX.Element;
@@ -0,0 +1,22 @@
1
+ import React from 'react';
2
+ import { Button, DialogActions, DialogContent, Typography } from '@mui/material';
3
+ import { Dialog } from '@jbrowse/core/ui';
4
+ export default function DeletePluginDialog({ onClose, plugin, }) {
5
+ return (React.createElement(Dialog, { open: true, onClose: () => onClose(), title: `Remove ${plugin}` },
6
+ React.createElement(DialogContent, null,
7
+ React.createElement(Typography, null,
8
+ "Please confirm that you want to remove ",
9
+ plugin,
10
+ "."),
11
+ React.createElement(Typography, { color: "error" }, "Note: if any resources in this session still use this plugin, it may cause your session to crash")),
12
+ React.createElement(DialogActions, null,
13
+ React.createElement(Button, { variant: "contained", color: "primary", onClick: () => {
14
+ // avoid showing runtime plugin warning
15
+ window.setTimeout(() => {
16
+ onClose(plugin);
17
+ }, 500);
18
+ } }, "Confirm"),
19
+ React.createElement(Button, { variant: "contained", color: "secondary", onClick: () => {
20
+ onClose();
21
+ } }, "Cancel"))));
22
+ }
@@ -1,11 +1,8 @@
1
1
  import React from 'react';
2
- import PluginManager from '@jbrowse/core/PluginManager';
3
2
  import { BasePlugin } from '@jbrowse/core/util/types';
4
3
  import { PluginStoreModel } from '../model';
5
- declare function InstalledPlugin({ plugin, model, pluginManager, }: {
4
+ declare const _default: ({ plugin, model, }: {
6
5
  plugin: BasePlugin;
7
6
  model: PluginStoreModel;
8
- pluginManager: PluginManager;
9
- }): React.JSX.Element;
10
- declare const _default: typeof InstalledPlugin;
7
+ }) => React.JSX.Element;
11
8
  export default _default;
@@ -1,21 +1,14 @@
1
- import React, { useState } from 'react';
1
+ import React, { Suspense, lazy, useState } from 'react';
2
2
  import { observer } from 'mobx-react';
3
- import { getParent } from 'mobx-state-tree';
4
- import { Button, Dialog, DialogTitle, DialogActions, DialogContent, IconButton, ListItem, Tooltip, Typography, } from '@mui/material';
3
+ import { IconButton, ListItem, Tooltip, Typography } from '@mui/material';
5
4
  import { makeStyles } from 'tss-react/mui';
6
5
  import CloseIcon from '@mui/icons-material/Close';
7
6
  import LockIcon from '@mui/icons-material/Lock';
8
- import { getSession } from '@jbrowse/core/util';
7
+ import { getEnv, getSession } from '@jbrowse/core/util';
9
8
  import { isSessionWithSessionPlugins, } from '@jbrowse/core/util/types';
9
+ // lazies
10
+ const DeletePluginDialog = lazy(() => import('./DeletePluginDialog'));
10
11
  const useStyles = makeStyles()(() => ({
11
- closeDialog: {
12
- position: 'absolute',
13
- right: 0,
14
- top: 0,
15
- },
16
- dialogContainer: {
17
- margin: 15,
18
- },
19
12
  lockedPluginTooltip: {
20
13
  marginRight: '0.5rem',
21
14
  },
@@ -25,53 +18,28 @@ function LockedPlugin() {
25
18
  return (React.createElement(Tooltip, { className: classes.lockedPluginTooltip, title: "This plugin was installed by an administrator, you cannot remove it." },
26
19
  React.createElement(LockIcon, null)));
27
20
  }
28
- function PluginDialog({ onClose, plugin, }) {
29
- const { classes } = useStyles();
30
- return (React.createElement(Dialog, { open: true, onClose: () => onClose() },
31
- React.createElement(DialogTitle, null,
32
- React.createElement(IconButton, { className: classes.closeDialog, "aria-label": "close-dialog", onClick: () => onClose() },
33
- React.createElement(CloseIcon, null))),
34
- React.createElement(DialogContent, null,
35
- React.createElement(Typography, null,
36
- "Please confirm that you want to remove ",
37
- plugin,
38
- ". Note: if any resources in this session still use this plugin, it may cause your session to crash"),
39
- React.createElement(DialogActions, null,
40
- React.createElement(Button, { variant: "contained", color: "primary", onClick: () => {
41
- // avoid showing runtime plugin warning
42
- window.setTimeout(() => {
43
- onClose(plugin);
44
- }, 500);
45
- } }, "Confirm"),
46
- React.createElement(Button, { variant: "contained", color: "secondary", onClick: () => {
47
- onClose();
48
- } }, "Cancel")))));
49
- }
50
- function InstalledPlugin({ plugin, model, pluginManager, }) {
21
+ export default observer(function ({ plugin, model, }) {
51
22
  const [dialogPlugin, setDialogPlugin] = useState();
23
+ const { pluginManager } = getEnv(model);
52
24
  const session = getSession(model);
53
- const { sessionPlugins } = session;
54
- const isSessionPlugin = sessionPlugins === null || sessionPlugins === void 0 ? void 0 : sessionPlugins.some(p => pluginManager.pluginMetadata[plugin.name].url === p.url);
55
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
56
- const rootModel = getParent(model, 3);
57
- const { jbrowse, adminMode } = rootModel;
25
+ const { jbrowse, adminMode, sessionPlugins } = session;
26
+ const isSessionPlugin = sessionPlugins === null || sessionPlugins === void 0 ? void 0 : sessionPlugins.some((p) => pluginManager.pluginMetadata[plugin.name].url === p.url);
58
27
  return (React.createElement(React.Fragment, null,
59
- dialogPlugin ? (React.createElement(PluginDialog, { plugin: dialogPlugin, onClose: name => {
60
- if (name) {
61
- const pluginMetadata = pluginManager.pluginMetadata[plugin.name];
62
- if (adminMode) {
63
- jbrowse.removePlugin(pluginMetadata);
64
- }
65
- else if (isSessionWithSessionPlugins(session)) {
66
- session.removeSessionPlugin(pluginMetadata);
28
+ dialogPlugin ? (React.createElement(Suspense, { fallback: React.createElement(React.Fragment, null) },
29
+ React.createElement(DeletePluginDialog, { plugin: dialogPlugin, onClose: name => {
30
+ if (name) {
31
+ const pluginMetadata = pluginManager.pluginMetadata[plugin.name];
32
+ if (adminMode) {
33
+ jbrowse.removePlugin(pluginMetadata);
34
+ }
35
+ else if (isSessionWithSessionPlugins(session)) {
36
+ session.removeSessionPlugin(pluginMetadata);
37
+ }
67
38
  }
68
- }
69
- setDialogPlugin(undefined);
70
- } })) : null,
39
+ setDialogPlugin(undefined);
40
+ } }))) : null,
71
41
  React.createElement(ListItem, { key: plugin.name },
72
42
  adminMode || isSessionPlugin ? (React.createElement(IconButton, { "aria-label": "removePlugin", "data-testid": `removePlugin-${plugin.name}`, onClick: () => setDialogPlugin(plugin.name) },
73
43
  React.createElement(CloseIcon, null))) : (React.createElement(LockedPlugin, null)),
74
44
  React.createElement(Typography, null, plugin.name))));
75
- }
76
- export default observer(InstalledPlugin);
77
- //# sourceMappingURL=InstalledPlugin.js.map
45
+ });
@@ -1,9 +1,8 @@
1
1
  import React from 'react';
2
2
  import PluginManager from '@jbrowse/core/PluginManager';
3
3
  import { PluginStoreModel } from '../model';
4
- declare function InstalledPluginsList({ pluginManager, model, }: {
4
+ declare const _default: ({ pluginManager, model, }: {
5
5
  pluginManager: PluginManager;
6
6
  model: PluginStoreModel;
7
- }): React.JSX.Element;
8
- declare const _default: typeof InstalledPluginsList;
7
+ }) => React.JSX.Element;
9
8
  export default _default;
@@ -2,15 +2,11 @@ import React from 'react';
2
2
  import { observer } from 'mobx-react';
3
3
  import { List, Typography } from '@mui/material';
4
4
  import InstalledPlugin from './InstalledPlugin';
5
- function InstalledPluginsList({ pluginManager, model, }) {
5
+ export default observer(function InstalledPluginsList({ pluginManager, model, }) {
6
6
  const { plugins } = pluginManager;
7
- const corePlugins = new Set(plugins
8
- .filter(p => { var _a; return (_a = pluginManager.pluginMetadata[p.name]) === null || _a === void 0 ? void 0 : _a.isCore; })
9
- .map(p => p.name));
10
- const externalPlugins = plugins.filter(plugin => !corePlugins.has(plugin.name));
7
+ const { filterText } = model;
8
+ const externalPlugins = plugins.filter(p => { var _a; return !((_a = pluginManager.pluginMetadata[p.name]) === null || _a === void 0 ? void 0 : _a.isCore); });
11
9
  return (React.createElement(List, null, externalPlugins.length > 0 ? (externalPlugins
12
- .filter(plugin => plugin.name.toLowerCase().includes(model.filterText.toLowerCase()))
13
- .map(plugin => (React.createElement(InstalledPlugin, { key: plugin.name, plugin: plugin, model: model, pluginManager: pluginManager })))) : (React.createElement(Typography, null, "No plugins currently installed"))));
14
- }
15
- export default observer(InstalledPluginsList);
16
- //# sourceMappingURL=InstalledPluginsList.js.map
10
+ .filter(p => p.name.toLowerCase().includes(filterText.toLowerCase()))
11
+ .map(p => React.createElement(InstalledPlugin, { key: p.name, plugin: p, model: model }))) : (React.createElement(Typography, null, "No plugins currently installed"))));
12
+ });