@jbrowse/plugin-data-management 2.13.0 → 2.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (101) hide show
  1. package/dist/AddConnectionWidget/components/AddConnectionWidget.js +3 -1
  2. package/dist/AddConnectionWidget/components/ConnectionTypeSelect.js +3 -1
  3. package/dist/AddTrackWidget/components/AddTrackWidget.js +3 -1
  4. package/dist/AddTrackWidget/components/ConfirmTrack.js +10 -6
  5. package/dist/AddTrackWidget/components/DefaultAddTrackWorkflow.js +2 -3
  6. package/dist/AddTrackWidget/components/PasteConfigWorkflow.js +6 -2
  7. package/dist/AddTrackWidget/components/TextIndexingConfig.js +16 -8
  8. package/dist/AddTrackWidget/components/TrackAdapterSelector.js +3 -1
  9. package/dist/AddTrackWidget/components/TrackTypeSelector.js +3 -1
  10. package/dist/AddTrackWidget/model.js +1 -1
  11. package/dist/AssemblyManager/AssemblyAddForm.d.ts +3 -2
  12. package/dist/AssemblyManager/AssemblyAddForm.js +38 -18
  13. package/dist/AssemblyManager/AssemblyManager.js +15 -5
  14. package/dist/AssemblyManager/AssemblyTable.js +3 -1
  15. package/dist/HierarchicalTrackSelectorWidget/components/HierarchicalFab.js +6 -2
  16. package/dist/HierarchicalTrackSelectorWidget/components/ShoppingCart.js +13 -2
  17. package/dist/HierarchicalTrackSelectorWidget/components/dialogs/CloseConnectionDialog.js +7 -7
  18. package/dist/HierarchicalTrackSelectorWidget/components/dialogs/DeleteConnectionDialog.js +4 -4
  19. package/dist/HierarchicalTrackSelectorWidget/components/dialogs/ManageConnectionsDialog.js +6 -2
  20. package/dist/HierarchicalTrackSelectorWidget/components/dialogs/ToggleConnectionsDialog.js +4 -2
  21. package/dist/HierarchicalTrackSelectorWidget/components/faceted/FacetFilter.js +12 -4
  22. package/dist/HierarchicalTrackSelectorWidget/components/faceted/FacetedHeader.js +24 -8
  23. package/dist/HierarchicalTrackSelectorWidget/components/faceted/FacetedSelector.js +8 -4
  24. package/dist/HierarchicalTrackSelectorWidget/components/tree/FavoriteTracks.js +6 -2
  25. package/dist/HierarchicalTrackSelectorWidget/components/tree/HamburgerMenu.js +36 -12
  26. package/dist/HierarchicalTrackSelectorWidget/components/tree/HierarchicalHeader.js +9 -3
  27. package/dist/HierarchicalTrackSelectorWidget/components/tree/HierarchicalTree.js +5 -1
  28. package/dist/HierarchicalTrackSelectorWidget/components/tree/RecentlyUsedTracks.js +6 -2
  29. package/dist/HierarchicalTrackSelectorWidget/components/tree/TrackCategory.js +3 -1
  30. package/dist/HierarchicalTrackSelectorWidget/components/tree/TrackLabel.js +4 -2
  31. package/dist/HierarchicalTrackSelectorWidget/components/tree/TrackLabelMenu.js +12 -4
  32. package/dist/HierarchicalTrackSelectorWidget/components/tree/TrackListNode.js +3 -1
  33. package/dist/HierarchicalTrackSelectorWidget/components/util.d.ts +1 -1
  34. package/dist/HierarchicalTrackSelectorWidget/components/util.js +1 -1
  35. package/dist/HierarchicalTrackSelectorWidget/facetedModel.d.ts +1 -1
  36. package/dist/HierarchicalTrackSelectorWidget/facetedModel.js +1 -0
  37. package/dist/HierarchicalTrackSelectorWidget/model.d.ts +28 -1
  38. package/dist/HierarchicalTrackSelectorWidget/model.js +28 -1
  39. package/dist/PluginStoreWidget/components/AddCustomPluginDialog.js +15 -5
  40. package/dist/PluginStoreWidget/components/DeletePluginDialog.js +3 -1
  41. package/dist/PluginStoreWidget/components/InstalledPlugin.js +4 -3
  42. package/dist/PluginStoreWidget/components/PluginCard.js +1 -1
  43. package/dist/PluginStoreWidget/components/PluginStoreWidget.js +12 -4
  44. package/dist/PluginStoreWidget/model.d.ts +6 -0
  45. package/dist/PluginStoreWidget/model.js +18 -0
  46. package/dist/ucsc-trackhub/doConnect.d.ts +5 -1
  47. package/dist/ucsc-trackhub/doConnect.js +0 -1
  48. package/dist/ucsc-trackhub/model.d.ts +23 -3
  49. package/dist/ucsc-trackhub/ucscTrackHub.d.ts +7 -7
  50. package/dist/ucsc-trackhub/ucscTrackHub.js +8 -10
  51. package/esm/AddConnectionWidget/components/AddConnectionWidget.js +3 -1
  52. package/esm/AddConnectionWidget/components/ConnectionTypeSelect.js +3 -1
  53. package/esm/AddTrackWidget/components/AddTrackWidget.js +3 -1
  54. package/esm/AddTrackWidget/components/ConfirmTrack.js +10 -6
  55. package/esm/AddTrackWidget/components/DefaultAddTrackWorkflow.js +2 -3
  56. package/esm/AddTrackWidget/components/PasteConfigWorkflow.js +6 -2
  57. package/esm/AddTrackWidget/components/TextIndexingConfig.js +16 -8
  58. package/esm/AddTrackWidget/components/TrackAdapterSelector.js +3 -1
  59. package/esm/AddTrackWidget/components/TrackTypeSelector.js +3 -1
  60. package/esm/AddTrackWidget/model.js +1 -1
  61. package/esm/AssemblyManager/AssemblyAddForm.d.ts +3 -2
  62. package/esm/AssemblyManager/AssemblyAddForm.js +38 -18
  63. package/esm/AssemblyManager/AssemblyManager.js +15 -5
  64. package/esm/AssemblyManager/AssemblyTable.js +3 -1
  65. package/esm/HierarchicalTrackSelectorWidget/components/HierarchicalFab.js +6 -2
  66. package/esm/HierarchicalTrackSelectorWidget/components/ShoppingCart.js +13 -2
  67. package/esm/HierarchicalTrackSelectorWidget/components/dialogs/CloseConnectionDialog.js +7 -7
  68. package/esm/HierarchicalTrackSelectorWidget/components/dialogs/DeleteConnectionDialog.js +4 -4
  69. package/esm/HierarchicalTrackSelectorWidget/components/dialogs/ManageConnectionsDialog.js +6 -2
  70. package/esm/HierarchicalTrackSelectorWidget/components/dialogs/ToggleConnectionsDialog.js +4 -2
  71. package/esm/HierarchicalTrackSelectorWidget/components/faceted/FacetFilter.js +12 -4
  72. package/esm/HierarchicalTrackSelectorWidget/components/faceted/FacetedHeader.js +24 -8
  73. package/esm/HierarchicalTrackSelectorWidget/components/faceted/FacetedSelector.js +8 -4
  74. package/esm/HierarchicalTrackSelectorWidget/components/tree/FavoriteTracks.js +6 -2
  75. package/esm/HierarchicalTrackSelectorWidget/components/tree/HamburgerMenu.js +36 -12
  76. package/esm/HierarchicalTrackSelectorWidget/components/tree/HierarchicalHeader.js +9 -3
  77. package/esm/HierarchicalTrackSelectorWidget/components/tree/HierarchicalTree.js +5 -1
  78. package/esm/HierarchicalTrackSelectorWidget/components/tree/RecentlyUsedTracks.js +6 -2
  79. package/esm/HierarchicalTrackSelectorWidget/components/tree/TrackCategory.js +3 -1
  80. package/esm/HierarchicalTrackSelectorWidget/components/tree/TrackLabel.js +4 -2
  81. package/esm/HierarchicalTrackSelectorWidget/components/tree/TrackLabelMenu.js +12 -4
  82. package/esm/HierarchicalTrackSelectorWidget/components/tree/TrackListNode.js +3 -1
  83. package/esm/HierarchicalTrackSelectorWidget/components/util.d.ts +1 -1
  84. package/esm/HierarchicalTrackSelectorWidget/components/util.js +1 -1
  85. package/esm/HierarchicalTrackSelectorWidget/facetedModel.d.ts +1 -1
  86. package/esm/HierarchicalTrackSelectorWidget/facetedModel.js +1 -0
  87. package/esm/HierarchicalTrackSelectorWidget/model.d.ts +28 -1
  88. package/esm/HierarchicalTrackSelectorWidget/model.js +28 -1
  89. package/esm/PluginStoreWidget/components/AddCustomPluginDialog.js +15 -5
  90. package/esm/PluginStoreWidget/components/DeletePluginDialog.js +3 -1
  91. package/esm/PluginStoreWidget/components/InstalledPlugin.js +4 -3
  92. package/esm/PluginStoreWidget/components/PluginCard.js +1 -1
  93. package/esm/PluginStoreWidget/components/PluginStoreWidget.js +12 -4
  94. package/esm/PluginStoreWidget/model.d.ts +6 -0
  95. package/esm/PluginStoreWidget/model.js +18 -0
  96. package/esm/ucsc-trackhub/doConnect.d.ts +5 -1
  97. package/esm/ucsc-trackhub/doConnect.js +0 -1
  98. package/esm/ucsc-trackhub/model.d.ts +23 -3
  99. package/esm/ucsc-trackhub/ucscTrackHub.d.ts +7 -7
  100. package/esm/ucsc-trackhub/ucscTrackHub.js +8 -10
  101. package/package.json +3 -3
@@ -27,12 +27,16 @@ const ManageConnectionsDialog = observer(function ({ session, handleClose, break
27
27
  connections.map(conf => {
28
28
  const name = readConfObject(conf, 'name');
29
29
  return (React.createElement(Typography, { key: `conn-${name}` },
30
- adminMode || (sessionConnections === null || sessionConnections === void 0 ? void 0 : sessionConnections.includes(conf)) ? (React.createElement(IconButton, { onClick: () => breakConnection(conf, true) },
30
+ adminMode || (sessionConnections === null || sessionConnections === void 0 ? void 0 : sessionConnections.includes(conf)) ? (React.createElement(IconButton, { onClick: () => {
31
+ breakConnection(conf, true);
32
+ } },
31
33
  React.createElement(CloseIcon, { color: "error" }))) : (React.createElement(DisabledButton, null)),
32
34
  name));
33
35
  }),
34
36
  !connections.length ? (React.createElement(Typography, null, "No connections found")) : null)),
35
37
  React.createElement(DialogActions, null,
36
- React.createElement(Button, { onClick: () => handleClose(), variant: "contained", color: "primary" }, "Close"))));
38
+ React.createElement(Button, { onClick: () => {
39
+ handleClose();
40
+ }, variant: "contained", color: "primary" }, "Close"))));
37
41
  });
38
42
  export default ManageConnectionsDialog;
@@ -35,7 +35,7 @@ const ConnectionRow = observer(function ConnectionRow({ conf, session, breakConn
35
35
  });
36
36
  const ConnectionList = observer(function ConnectionsList({ session, breakConnection, }) {
37
37
  const { classes } = useStyles();
38
- return (React.createElement("div", { className: classes.connectionContainer }, !session.connections.length ? (React.createElement(Typography, null, "No connections found")) : (session.connections.map((conf, idx) => (React.createElement("div", { key: conf.name + '_' + idx },
38
+ return (React.createElement("div", { className: classes.connectionContainer }, !session.connections.length ? (React.createElement(Typography, null, "No connections found")) : (session.connections.map((conf, idx) => (React.createElement("div", { key: `${conf.name}_${idx}` },
39
39
  React.createElement(ConnectionRow, { conf: conf, session: session, breakConnection: breakConnection })))))));
40
40
  });
41
41
  const ToggleConnectionDialog = observer(function ({ session, handleClose, breakConnection, }) {
@@ -44,6 +44,8 @@ const ToggleConnectionDialog = observer(function ({ session, handleClose, breakC
44
44
  React.createElement(Typography, null, "Use the checkbox to turn on/off connections"),
45
45
  React.createElement(ConnectionList, { session: session, breakConnection: breakConnection })),
46
46
  React.createElement(DialogActions, null,
47
- React.createElement(Button, { onClick: () => handleClose(), variant: "contained", color: "primary" }, "Close"))));
47
+ React.createElement(Button, { onClick: () => {
48
+ handleClose();
49
+ }, variant: "contained", color: "primary" }, "Close"))));
48
50
  });
49
51
  export default ToggleConnectionDialog;
@@ -18,12 +18,16 @@ const useStyles = makeStyles()(theme => ({
18
18
  }));
19
19
  function ClearButton({ onClick }) {
20
20
  return (React.createElement(Tooltip, { title: "Clear selection on this facet filter" },
21
- React.createElement(IconButton, { onClick: () => onClick(), size: "small" },
21
+ React.createElement(IconButton, { onClick: () => {
22
+ onClick();
23
+ }, size: "small" },
22
24
  React.createElement(ClearIcon, null))));
23
25
  }
24
26
  function ExpandButton({ visible, onClick, }) {
25
27
  return (React.createElement(Tooltip, { title: "Minimize/expand this facet filter" },
26
- React.createElement(IconButton, { onClick: () => onClick(), size: "small" }, visible ? React.createElement(MinimizeIcon, null) : React.createElement(AddIcon, null))));
28
+ React.createElement(IconButton, { onClick: () => {
29
+ onClick();
30
+ }, size: "small" }, visible ? React.createElement(MinimizeIcon, null) : React.createElement(AddIcon, null))));
27
31
  }
28
32
  const FacetFilter = observer(function ({ column, vals, model, }) {
29
33
  const { classes } = useStyles();
@@ -34,8 +38,12 @@ const FacetFilter = observer(function ({ column, vals, model, }) {
34
38
  return (React.createElement(FormControl, { className: classes.facet, fullWidth: true },
35
39
  React.createElement("div", null,
36
40
  React.createElement(Typography, { component: "span" }, field),
37
- React.createElement(ClearButton, { onClick: () => faceted.setFilter(field, []) }),
38
- React.createElement(ExpandButton, { visible: visible, onClick: () => setVisible(!visible) })),
41
+ React.createElement(ClearButton, { onClick: () => {
42
+ faceted.setFilter(field, []);
43
+ } }),
44
+ React.createElement(ExpandButton, { visible: visible, onClick: () => {
45
+ setVisible(!visible);
46
+ } })),
39
47
  visible ? (React.createElement(Select, { multiple: true, native: true, className: classes.select, value: filters.get(column.field) || [], onChange: event => {
40
48
  faceted.setFilter(column.field,
41
49
  // @ts-expect-error
@@ -13,41 +13,57 @@ export default function FacetedHeader({ model, }) {
13
13
  return (React.createElement(React.Fragment, null,
14
14
  React.createElement(Grid, { container: true, spacing: 4, alignItems: "center" },
15
15
  React.createElement(Grid, { item: true },
16
- React.createElement(TextField, { label: "Search...", value: faceted.filterText, onChange: event => faceted.setFilterText(event.target.value), InputProps: {
16
+ React.createElement(TextField, { label: "Search...", value: faceted.filterText, onChange: event => {
17
+ faceted.setFilterText(event.target.value);
18
+ }, InputProps: {
17
19
  endAdornment: (React.createElement(InputAdornment, { position: "end" },
18
- React.createElement(IconButton, { onClick: () => faceted.setFilterText('') },
20
+ React.createElement(IconButton, { onClick: () => {
21
+ faceted.setFilterText('');
22
+ } },
19
23
  React.createElement(ClearIcon, null)))),
20
24
  } })),
21
25
  React.createElement(Grid, { item: true },
22
- React.createElement(IconButton, { onClick: event => setAnchorEl(event.currentTarget) },
26
+ React.createElement(IconButton, { onClick: event => {
27
+ setAnchorEl(event.currentTarget);
28
+ } },
23
29
  React.createElement(MoreVert, null))),
24
30
  React.createElement(Grid, { item: true },
25
31
  React.createElement(ShoppingCart, { model: model }))),
26
- React.createElement(Menu, { anchorEl: anchorEl, open: !!anchorEl, onClose: () => setAnchorEl(null), onMenuItemClick: (_event, callback) => {
32
+ React.createElement(Menu, { anchorEl: anchorEl, open: !!anchorEl, onClose: () => {
33
+ setAnchorEl(null);
34
+ }, onMenuItemClick: (_event, callback) => {
27
35
  callback();
28
36
  setAnchorEl(null);
29
37
  }, menuItems: [
30
38
  {
31
39
  label: 'Add tracks to selection instead of turning them on/off',
32
- onClick: () => faceted.setUseShoppingCart(!useShoppingCart),
40
+ onClick: () => {
41
+ faceted.setUseShoppingCart(!useShoppingCart);
42
+ },
33
43
  type: 'checkbox',
34
44
  checked: useShoppingCart,
35
45
  },
36
46
  {
37
47
  label: 'Show sparse metadata columns',
38
- onClick: () => faceted.setShowSparse(!showSparse),
48
+ onClick: () => {
49
+ faceted.setShowSparse(!showSparse);
50
+ },
39
51
  checked: showSparse,
40
52
  type: 'checkbox',
41
53
  },
42
54
  {
43
55
  label: 'Show facet filters',
44
- onClick: () => faceted.setShowFilters(!showFilters),
56
+ onClick: () => {
57
+ faceted.setShowFilters(!showFilters);
58
+ },
45
59
  checked: showFilters,
46
60
  type: 'checkbox',
47
61
  },
48
62
  {
49
63
  label: 'Show extra table options',
50
- onClick: () => faceted.setShowOptions(!showOptions),
64
+ onClick: () => {
65
+ faceted.setShowOptions(!showOptions);
66
+ },
51
67
  checked: showOptions,
52
68
  type: 'checkbox',
53
69
  },
@@ -39,10 +39,10 @@ const FacetedSelector = observer(function FacetedSelector({ model, }) {
39
39
  measureGridWidth(rows.map(r => r[e]), { maxWidth: 400, stripHTML: true }),
40
40
  ])),
41
41
  ...Object.fromEntries(filteredMetadataKeys
42
- .filter(f => visible['metadata.' + f])
42
+ .filter(f => visible[`metadata.${f}`])
43
43
  .map(e => {
44
44
  return [
45
- 'metadata.' + e,
45
+ `metadata.${e}`,
46
46
  measureGridWidth(rows.map(r => r.metadata[e]), { maxWidth: 400, stripHTML: true }),
47
47
  ];
48
48
  })),
@@ -78,7 +78,7 @@ const FacetedSelector = observer(function FacetedSelector({ model, }) {
78
78
  headerName: ['name', ...filteredNonMetadataKeys].includes(e)
79
79
  ? `${e} (from metadata)`
80
80
  : e,
81
- width: (_a = widths['metadata.' + e]) !== null && _a !== void 0 ? _a : 100,
81
+ width: (_a = widths[`metadata.${e}`]) !== null && _a !== void 0 ? _a : 100,
82
82
  valueGetter: (_, row) => { var _a; return `${(_a = row.metadata[e]) !== null && _a !== void 0 ? _a : ''}`; },
83
83
  renderCell: params => {
84
84
  const val = params.value;
@@ -99,7 +99,11 @@ const FacetedSelector = observer(function FacetedSelector({ model, }) {
99
99
  height: window.innerHeight * frac,
100
100
  width: window.innerWidth * frac - (showFilters ? panelWidth : 0),
101
101
  } },
102
- React.createElement(DataGrid, { rows: filteredRows, onColumnWidthChange: arg => setWidths({ ...widths, [arg.colDef.field]: arg.width }), columnVisibilityModel: visible, onColumnVisibilityModelChange: n => faceted.setVisible(n), columnHeaderHeight: 35, checkboxSelection: true, disableRowSelectionOnClick: true, keepNonExistentRowsSelected: true, onRowSelectionModelChange: userSelectedIds => {
102
+ React.createElement(DataGrid, { rows: filteredRows, onColumnWidthChange: arg => {
103
+ setWidths({ ...widths, [arg.colDef.field]: arg.width });
104
+ }, columnVisibilityModel: visible, onColumnVisibilityModelChange: n => {
105
+ faceted.setVisible(n);
106
+ }, columnHeaderHeight: 35, checkboxSelection: true, disableRowSelectionOnClick: true, keepNonExistentRowsSelected: true, onRowSelectionModelChange: userSelectedIds => {
103
107
  if (!useShoppingCart) {
104
108
  const a1 = shownTrackIds;
105
109
  const a2 = new Set(userSelectedIds);
@@ -16,12 +16,16 @@ const useStyles = makeStyles()({
16
16
  const FavoriteTracks = observer(function ({ model, }) {
17
17
  const { classes } = useStyles();
18
18
  const { view, favoriteTracks } = model;
19
- return view ? (React.createElement(DropdownTrackSelector, { onClick: () => model.setFavoritesCounter(0), tracks: favoriteTracks, model: model, extraMenuItems: favoriteTracks.length
19
+ return view ? (React.createElement(DropdownTrackSelector, { onClick: () => {
20
+ model.setFavoritesCounter(0);
21
+ }, tracks: favoriteTracks, model: model, extraMenuItems: favoriteTracks.length
20
22
  ? [
21
23
  { type: 'divider' },
22
24
  {
23
25
  label: 'Clear favorites',
24
- onClick: () => model.clearFavorites(),
26
+ onClick: () => {
27
+ model.clearFavorites();
28
+ },
25
29
  },
26
30
  ]
27
31
  : [
@@ -70,7 +70,9 @@ const HamburgerMenu = observer(function ({ model, }) {
70
70
  ? [
71
71
  {
72
72
  label: 'Turn on/off connections...',
73
- onClick: () => setConnectionToggleOpen(true),
73
+ onClick: () => {
74
+ setConnectionToggleOpen(true);
75
+ },
74
76
  },
75
77
  ]
76
78
  : []),
@@ -86,7 +88,9 @@ const HamburgerMenu = observer(function ({ model, }) {
86
88
  },
87
89
  {
88
90
  label: 'Delete connections...',
89
- onClick: () => setConnectionManagerOpen(true),
91
+ onClick: () => {
92
+ setConnectionManagerOpen(true);
93
+ },
90
94
  },
91
95
  ]
92
96
  : []),
@@ -100,13 +104,17 @@ const HamburgerMenu = observer(function ({ model, }) {
100
104
  label: 'Sort tracks by name',
101
105
  type: 'checkbox',
102
106
  checked: model.activeSortTrackNames,
103
- onClick: () => model.setSortTrackNames(!model.activeSortTrackNames),
107
+ onClick: () => {
108
+ model.setSortTrackNames(!model.activeSortTrackNames);
109
+ },
104
110
  },
105
111
  {
106
112
  label: 'Sort categories by name',
107
113
  type: 'checkbox',
108
114
  checked: model.activeSortCategories,
109
- onClick: () => model.setSortCategories(!model.activeSortCategories),
115
+ onClick: () => {
116
+ model.setSortCategories(!model.activeSortCategories);
117
+ },
110
118
  },
111
119
  ],
112
120
  },
@@ -118,27 +126,43 @@ const HamburgerMenu = observer(function ({ model, }) {
118
126
  ? [
119
127
  {
120
128
  label: 'Collapse subcategories',
121
- onClick: () => model.collapseSubCategories(),
129
+ onClick: () => {
130
+ model.collapseSubCategories();
131
+ },
122
132
  },
123
133
  ]
124
134
  : []),
125
135
  {
126
136
  label: 'Collapse top-level categories',
127
- onClick: () => model.collapseTopLevelCategories(),
137
+ onClick: () => {
138
+ model.collapseTopLevelCategories();
139
+ },
128
140
  },
129
141
  {
130
142
  label: 'Expand all categories',
131
- onClick: () => model.expandAllCategories(),
143
+ onClick: () => {
144
+ model.expandAllCategories();
145
+ },
132
146
  },
133
147
  ],
134
148
  },
135
149
  ] },
136
150
  React.createElement(MenuIcon, null)),
137
151
  React.createElement(Suspense, { fallback: null },
138
- modalInfo ? (React.createElement(CloseConnectionDialog, { modalInfo: modalInfo, onClose: () => setModalInfo(undefined) })) : null,
139
- deleteDialogDetails ? (React.createElement(DeleteConnectionDialog, { handleClose: () => setDeleteDialogDetails(undefined), deleteDialogDetails: deleteDialogDetails, session: session })) : null,
140
- connectionManagerOpen ? (React.createElement(ManageConnectionsDialog, { handleClose: () => setConnectionManagerOpen(false), breakConnection: breakConnection, session: session })) : null,
141
- connectionToggleOpen ? (React.createElement(ToggleConnectionsDialog, { handleClose: () => setConnectionToggleOpen(false), session: session, breakConnection: breakConnection })) : null,
142
- facetedOpen ? (React.createElement(FacetedDialog, { handleClose: () => setFacetedOpen(false), model: model })) : null)));
152
+ modalInfo ? (React.createElement(CloseConnectionDialog, { modalInfo: modalInfo, onClose: () => {
153
+ setModalInfo(undefined);
154
+ } })) : null,
155
+ deleteDialogDetails ? (React.createElement(DeleteConnectionDialog, { handleClose: () => {
156
+ setDeleteDialogDetails(undefined);
157
+ }, deleteDialogDetails: deleteDialogDetails, session: session })) : null,
158
+ connectionManagerOpen ? (React.createElement(ManageConnectionsDialog, { handleClose: () => {
159
+ setConnectionManagerOpen(false);
160
+ }, breakConnection: breakConnection, session: session })) : null,
161
+ connectionToggleOpen ? (React.createElement(ToggleConnectionsDialog, { handleClose: () => {
162
+ setConnectionToggleOpen(false);
163
+ }, session: session, breakConnection: breakConnection })) : null,
164
+ facetedOpen ? (React.createElement(FacetedDialog, { handleClose: () => {
165
+ setFacetedOpen(false);
166
+ }, model: model })) : null)));
143
167
  });
144
168
  export default HamburgerMenu;
@@ -16,14 +16,20 @@ const useStyles = makeStyles()(theme => ({
16
16
  const SearchTracksTextField = observer(function ({ model, }) {
17
17
  const { filterText } = model;
18
18
  const { classes } = useStyles();
19
- return (React.createElement(TextField, { className: classes.searchBox, label: "Filter tracks", value: filterText, onChange: event => model.setFilterText(event.target.value), fullWidth: true, InputProps: {
19
+ return (React.createElement(TextField, { className: classes.searchBox, label: "Filter tracks", value: filterText, onChange: event => {
20
+ model.setFilterText(event.target.value);
21
+ }, fullWidth: true, InputProps: {
20
22
  endAdornment: (React.createElement(InputAdornment, { position: "end" },
21
- React.createElement(IconButton, { onClick: () => model.clearFilterText() },
23
+ React.createElement(IconButton, { onClick: () => {
24
+ model.clearFilterText();
25
+ } },
22
26
  React.createElement(ClearIcon, null)))),
23
27
  } }));
24
28
  });
25
29
  const HierarchicalTrackSelectorHeader = observer(function ({ model, setHeaderHeight, }) {
26
- return (React.createElement("div", { ref: ref => setHeaderHeight((ref === null || ref === void 0 ? void 0 : ref.getBoundingClientRect().height) || 0), "data-testid": "hierarchical_track_selector" },
30
+ return (React.createElement("div", { ref: ref => {
31
+ setHeaderHeight((ref === null || ref === void 0 ? void 0 : ref.getBoundingClientRect().height) || 0);
32
+ }, "data-testid": "hierarchical_track_selector" },
27
33
  React.createElement("div", { style: { display: 'flex' } },
28
34
  React.createElement(HamburgerMenu, { model: model }),
29
35
  React.createElement(ShoppingCart, { model: model }),
@@ -36,7 +36,9 @@ const HierarchicalTree = observer(function HierarchicalTree({ height, tree, mode
36
36
  model.addToRecentlyUsed(trackId);
37
37
  }
38
38
  },
39
- toggleCollapse: (pathName) => model.toggleCategory(pathName),
39
+ toggleCollapse: (pathName) => {
40
+ model.toggleCategory(pathName);
41
+ },
40
42
  tree,
41
43
  model,
42
44
  drawerPosition,
@@ -49,6 +51,7 @@ const HierarchicalTree = observer(function HierarchicalTree({ height, tree, mode
49
51
  for (const child of tree.children) {
50
52
  yield getNodeData(child, 0, extra, obj);
51
53
  }
54
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
52
55
  while (true) {
53
56
  // @ts-expect-error
54
57
  const parentMeta = yield;
@@ -58,6 +61,7 @@ const HierarchicalTree = observer(function HierarchicalTree({ height, tree, mode
58
61
  }
59
62
  }
60
63
  }, [tree, extra, obj]);
64
+ /* biome-ignore lint/correctness/useExhaustiveDependencies: */
61
65
  useEffect(() => {
62
66
  // @ts-expect-error
63
67
  treeRef.current.recomputeTree({
@@ -13,12 +13,16 @@ const useStyles = makeStyles()({
13
13
  const RecentlyUsedTracks = observer(function ({ model, }) {
14
14
  const { classes } = useStyles();
15
15
  const { view, recentlyUsedCounter, recentlyUsedTracks } = model;
16
- return view ? (React.createElement(DropdownTrackSelector, { onClick: () => model.setRecentlyUsedCounter(0), model: model, tracks: recentlyUsedTracks, extraMenuItems: recentlyUsedTracks.length
16
+ return view ? (React.createElement(DropdownTrackSelector, { onClick: () => {
17
+ model.setRecentlyUsedCounter(0);
18
+ }, model: model, tracks: recentlyUsedTracks, extraMenuItems: recentlyUsedTracks.length
17
19
  ? [
18
20
  { type: 'divider' },
19
21
  {
20
22
  label: 'Clear recently used',
21
- onClick: () => model.clearRecentlyUsed(),
23
+ onClick: () => {
24
+ model.clearRecentlyUsed();
25
+ },
22
26
  },
23
27
  ]
24
28
  : [
@@ -78,5 +78,7 @@ export default function Category({ isOpen, setOpen, data, }) {
78
78
  ], onMenuItemClick: (_event, callback) => {
79
79
  callback();
80
80
  setMenuEl(null);
81
- }, open: Boolean(menuEl), onClose: () => setMenuEl(null) })) : null));
81
+ }, open: Boolean(menuEl), onClose: () => {
82
+ setMenuEl(null);
83
+ } })) : null));
82
84
  }
@@ -23,10 +23,12 @@ const useStyles = makeStyles()(theme => ({
23
23
  export default function TrackLabel({ data }) {
24
24
  const { classes } = useStyles();
25
25
  const { checked, conf, model, drawerPosition, id, trackId, name, onChange, selected, } = data;
26
- const description = (conf && readConfObject(conf, 'description')) || '';
26
+ const description = readConfObject(conf, 'description');
27
27
  return (React.createElement(React.Fragment, null,
28
28
  React.createElement(Tooltip, { title: description + (selected ? ' (in selection)' : ''), placement: drawerPosition === 'left' ? 'right' : 'left' },
29
- React.createElement(FormControlLabel, { className: classes.checkboxLabel, control: React.createElement(Checkbox, { className: classes.compactCheckbox, checked: checked, onChange: () => onChange(trackId), disabled: isUnsupported(name), inputProps: {
29
+ React.createElement(FormControlLabel, { className: classes.checkboxLabel, control: React.createElement(Checkbox, { className: classes.compactCheckbox, checked: checked, onChange: () => {
30
+ onChange(trackId);
31
+ }, disabled: isUnsupported(name), inputProps: {
30
32
  // @ts-expect-error
31
33
  'data-testid': `htsTrackEntry-${id}`,
32
34
  } }), label: React.createElement("div", { "data-testid": `htsTrackLabel-${id}`, style: { background: selected ? '#cccc' : undefined } },
@@ -19,23 +19,31 @@ const TrackLabelMenu = function ({ id, trackId, stopPropagation, model, setOpen,
19
19
  model.isFavorite(trackId)
20
20
  ? {
21
21
  label: 'Remove from favorites',
22
- onClick: () => model.removeFromFavorites(trackId),
22
+ onClick: () => {
23
+ model.removeFromFavorites(trackId);
24
+ },
23
25
  icon: StarIcon,
24
26
  }
25
27
  : {
26
28
  label: 'Add to favorites',
27
- onClick: () => model.addToFavorites(trackId),
29
+ onClick: () => {
30
+ model.addToFavorites(trackId);
31
+ },
28
32
  icon: FilledStarIcon,
29
33
  },
30
34
  {
31
35
  label: 'Add to selection',
32
- onClick: () => model.addToSelection([conf]),
36
+ onClick: () => {
37
+ model.addToSelection([conf]);
38
+ },
33
39
  },
34
40
  ...(model.isSelected(conf)
35
41
  ? [
36
42
  {
37
43
  label: 'Remove from selection',
38
- onClick: () => model.removeFromSelection([conf]),
44
+ onClick: () => {
45
+ model.removeFromSelection([conf]);
46
+ },
39
47
  },
40
48
  ]
41
49
  : []),
@@ -37,7 +37,9 @@ export default function Node({ data, isOpen, style, setOpen, }) {
37
37
  const width = 10;
38
38
  const marginLeft = nestingLevel * width + (isLeaf ? width : 0);
39
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 }))),
40
+ new Array(nestingLevel).fill(0).map((_, idx) => (React.createElement("div", {
41
+ /* biome-ignore lint/suspicious/noArrayIndexKey: */
42
+ key: `mark-${idx}`, style: { left: idx * width + 4, height: style === null || style === void 0 ? void 0 : style.height }, className: classes.nestingLevelMarker }))),
41
43
  React.createElement("div", { className: !isLeaf ? classes.accordionCard : undefined, style: {
42
44
  marginLeft,
43
45
  whiteSpace: 'nowrap',
@@ -11,7 +11,7 @@ export interface NodeData {
11
11
  trackId: string;
12
12
  isLeaf: boolean;
13
13
  name: string;
14
- onChange: Function;
14
+ onChange: (trackId: string) => void;
15
15
  toggleCollapse: (arg: string) => void;
16
16
  tree: TreeNode;
17
17
  selected: boolean;
@@ -3,7 +3,7 @@ export function getAllChildren(subtree) {
3
3
  return (subtree === null || subtree === void 0 ? void 0 : subtree.type) === 'category'
4
4
  ? subtree.children
5
5
  .map(t => (t.type === 'category' ? getAllChildren(t) : t.conf))
6
- .flat(Infinity)
6
+ .flat(Number.POSITIVE_INFINITY)
7
7
  : [];
8
8
  }
9
9
  export function treeToMap(tree, map = new Map()) {
@@ -35,7 +35,7 @@ export declare function facetedStateTreeF(): import("mobx-state-tree").IModelTyp
35
35
  /**
36
36
  * #action
37
37
  */
38
- setPanelWidth(width: number): void;
38
+ setPanelWidth(width: number): number;
39
39
  /**
40
40
  * #action
41
41
  */
@@ -51,6 +51,7 @@ export function facetedStateTreeF() {
51
51
  */
52
52
  setPanelWidth(width) {
53
53
  self.panelWidth = width;
54
+ return self.panelWidth;
54
55
  },
55
56
  /**
56
57
  * #action
@@ -34,7 +34,7 @@ export default function stateTreeFactory(pluginManager: PluginManager): import("
34
34
  filters: import("mobx").ObservableMap<string, string[]>;
35
35
  } & {
36
36
  setFilter(key: string, value: string[]): void;
37
- setPanelWidth(width: number): void;
37
+ setPanelWidth(width: number): number;
38
38
  setUseShoppingCart(f: boolean): void;
39
39
  setFilterText(str: string): void;
40
40
  setShowSparse(f: boolean): void;
@@ -101,14 +101,41 @@ export default function stateTreeFactory(pluginManager: PluginManager): import("
101
101
  afterAttach(): void;
102
102
  }, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>, [undefined]>;
103
103
  }, {
104
+ /**
105
+ * #volatile
106
+ */
104
107
  favorites: string[];
108
+ /**
109
+ * #volatile
110
+ */
105
111
  recentlyUsed: string[];
112
+ /**
113
+ * #volatile
114
+ */
106
115
  selection: AnyConfigurationModel[];
116
+ /**
117
+ * #volatile
118
+ */
107
119
  sortTrackNames: MaybeBoolean;
120
+ /**
121
+ * #volatile
122
+ */
108
123
  sortCategories: MaybeBoolean;
124
+ /**
125
+ * #volatile
126
+ */
109
127
  collapsed: import("mobx").ObservableMap<string, boolean>;
128
+ /**
129
+ * #volatile
130
+ */
110
131
  filterText: string;
132
+ /**
133
+ * #volatile
134
+ */
111
135
  recentlyUsedCounter: number;
136
+ /**
137
+ * #volatile
138
+ */
112
139
  favoritesCounter: number;
113
140
  } & {
114
141
  /**
@@ -79,14 +79,41 @@ export default function stateTreeFactory(pluginManager) {
79
79
  faceted: types.optional(facetedStateTreeF(), {}),
80
80
  })
81
81
  .volatile(() => ({
82
+ /**
83
+ * #volatile
84
+ */
82
85
  favorites: localStorageGetJSON(favoritesK(), []),
86
+ /**
87
+ * #volatile
88
+ */
83
89
  recentlyUsed: [],
90
+ /**
91
+ * #volatile
92
+ */
84
93
  selection: [],
94
+ /**
95
+ * #volatile
96
+ */
85
97
  sortTrackNames: localStorageGetJSON(sortTrackNamesK(), undefined),
98
+ /**
99
+ * #volatile
100
+ */
86
101
  sortCategories: localStorageGetJSON(sortCategoriesK(), undefined),
102
+ /**
103
+ * #volatile
104
+ */
87
105
  collapsed: observable.map(),
106
+ /**
107
+ * #volatile
108
+ */
88
109
  filterText: '',
110
+ /**
111
+ * #volatile
112
+ */
89
113
  recentlyUsedCounter: 0,
114
+ /**
115
+ * #volatile
116
+ */
90
117
  favoritesCounter: 0,
91
118
  }))
92
119
  .views(self => ({
@@ -334,7 +361,7 @@ export default function stateTreeFactory(pluginManager) {
334
361
  const { connectionInstances = [] } = getSession(self);
335
362
  return [
336
363
  ...this.configAndSessionTrackConfigurations,
337
- ...((connectionInstances === null || connectionInstances === void 0 ? void 0 : connectionInstances.flatMap(c => c.tracks)) || []),
364
+ ...connectionInstances.flatMap(c => c.tracks),
338
365
  ];
339
366
  },
340
367
  /**
@@ -47,9 +47,15 @@ const AddCustomPluginDialog = observer(function ({ onClose, model, }) {
47
47
  React.createElement("form", { onSubmit: handleSubmit },
48
48
  React.createElement(DialogContent, { className: classes.dialogContent },
49
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."),
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) }),
52
- React.createElement(DialogContentText, { onClick: () => setAdvancedOptionsOpen(!advancedOptionsOpen) },
50
+ React.createElement(TextField, { label: "Plugin name", variant: "outlined", value: umdPluginName, onChange: event => {
51
+ setUMDPluginName(event.target.value);
52
+ } }),
53
+ React.createElement(TextField, { label: "Plugin URL", variant: "outlined", value: umdPluginUrl, onChange: event => {
54
+ setUMDPluginUrl(event.target.value);
55
+ } }),
56
+ React.createElement(DialogContentText, { onClick: () => {
57
+ setAdvancedOptionsOpen(!advancedOptionsOpen);
58
+ } },
53
59
  React.createElement(IconButton, { className: cx(classes.expand, {
54
60
  [classes.expandOpen]: advancedOptionsOpen,
55
61
  }), "aria-expanded": advancedOptionsOpen, "aria-label": "show more" },
@@ -58,8 +64,12 @@ const AddCustomPluginDialog = observer(function ({ onClose, model, }) {
58
64
  React.createElement(Collapse, { in: advancedOptionsOpen },
59
65
  React.createElement("div", { className: classes.dialogContent },
60
66
  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."),
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) })))),
67
+ React.createElement(TextField, { label: "ESM build URL", variant: "outlined", value: esmPluginUrl, onChange: event => {
68
+ setESMPluginUrl(event.target.value);
69
+ } }),
70
+ React.createElement(TextField, { label: "CJS build URL", variant: "outlined", value: cjsPluginUrl, onChange: event => {
71
+ setCJSPluginUrl(event.target.value);
72
+ } })))),
63
73
  React.createElement(DialogActions, null,
64
74
  React.createElement(Button, { variant: "contained", onClick: onClose }, "Cancel"),
65
75
  React.createElement(Button, { variant: "contained", color: "primary", onClick: handleSubmit, disabled: !ready }, "Submit")))));
@@ -2,7 +2,9 @@ import React from 'react';
2
2
  import { Button, DialogActions, DialogContent, Typography } from '@mui/material';
3
3
  import { Dialog } from '@jbrowse/core/ui';
4
4
  export default function DeletePluginDialog({ onClose, plugin, }) {
5
- return (React.createElement(Dialog, { open: true, onClose: () => onClose(), title: `Remove ${plugin}` },
5
+ return (React.createElement(Dialog, { open: true, onClose: () => {
6
+ onClose();
7
+ }, title: `Remove ${plugin}` },
6
8
  React.createElement(DialogContent, null,
7
9
  React.createElement(Typography, null,
8
10
  "Please confirm that you want to remove ",