@jbrowse/product-core 5.0.0-beta.7 → 5.0.0-beta.9

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 (64) hide show
  1. package/esm/RootModel/BaseRootModel.d.ts +1 -4
  2. package/esm/RootModel/HierarchicalConfig.d.ts +21 -47
  3. package/esm/RootModel/PreferencesConfig.d.ts +18 -49
  4. package/esm/RootModel/PreferencesConfig.js +2 -3
  5. package/esm/RootModel/createConfigModel.d.ts +141 -124
  6. package/esm/RootModel/createConfigModel.js +26 -14
  7. package/esm/RootModel/menuItems.js +4 -6
  8. package/esm/Session/BaseSession.d.ts +30 -13
  9. package/esm/Session/BaseSession.js +50 -16
  10. package/esm/Session/Connections.d.ts +4 -3
  11. package/esm/Session/Connections.js +4 -3
  12. package/esm/Session/DrawerWidgets.d.ts +8 -1
  13. package/esm/Session/DrawerWidgets.js +19 -7
  14. package/esm/Session/MultipleViews.d.ts +13 -14
  15. package/esm/Session/Preferences.d.ts +8 -13
  16. package/esm/Session/SessionTracks.d.ts +32 -38
  17. package/esm/Session/SessionTracks.js +52 -115
  18. package/esm/Session/Themes.d.ts +9 -10
  19. package/esm/Session/Themes.js +9 -10
  20. package/esm/Session/TrackMenu.d.ts +1 -26
  21. package/esm/Session/TrackMenu.js +2 -33
  22. package/esm/Session/TrackMenuSessionMixin.js +2 -1
  23. package/esm/Session/Tracks.d.ts +8 -13
  24. package/esm/Session/copyTrackSnapshot.d.ts +21 -0
  25. package/esm/Session/copyTrackSnapshot.js +20 -0
  26. package/esm/Session/hydratedForms.d.ts +16 -0
  27. package/esm/Session/hydratedForms.js +13 -0
  28. package/esm/Session/index.d.ts +5 -1
  29. package/esm/Session/index.js +4 -1
  30. package/esm/Session/pluginExtraTrackItems.d.ts +11 -0
  31. package/esm/Session/pluginExtraTrackItems.js +13 -0
  32. package/esm/controllerTracks.d.ts +13 -8
  33. package/esm/controllerTracks.js +18 -9
  34. package/esm/index.d.ts +6 -6
  35. package/esm/index.js +3 -3
  36. package/esm/loadPlugins.d.ts +7 -2
  37. package/esm/loadPlugins.js +6 -2
  38. package/esm/resolveAssemblies.d.ts +34 -11
  39. package/esm/resolveAssemblies.js +29 -11
  40. package/esm/rpcWorker.d.ts +12 -5
  41. package/esm/rpcWorker.js +1 -1
  42. package/esm/sessionMigrations/index.d.ts +5 -5
  43. package/esm/sessionMigrations/index.js +82 -19
  44. package/esm/sessionUrl.js +1 -1
  45. package/esm/sessionUtils.d.ts +6 -1
  46. package/esm/sessionUtils.js +42 -35
  47. package/esm/ui/AboutDialog.d.ts +10 -2
  48. package/esm/ui/AboutDialog.js +11 -2
  49. package/esm/ui/AboutDialogContents.js +3 -21
  50. package/esm/ui/AppReadyMarker.d.ts +45 -0
  51. package/esm/ui/AppReadyMarker.js +89 -0
  52. package/esm/ui/AssemblyInfoPanel.js +4 -10
  53. package/esm/ui/DescriptionPanel.js +2 -1
  54. package/esm/ui/FileInfoPanel.js +5 -10
  55. package/esm/ui/RefNameInfoDialog.js +10 -23
  56. package/esm/ui/aboutTestUtils.d.ts +140 -0
  57. package/esm/ui/aboutTestUtils.js +25 -0
  58. package/esm/ui/descriptionHtml.d.ts +5 -6
  59. package/esm/ui/descriptionHtml.js +5 -7
  60. package/esm/ui/index.d.ts +2 -0
  61. package/esm/ui/index.js +1 -0
  62. package/esm/ui/util.d.ts +9 -27
  63. package/esm/ui/util.js +12 -31
  64. package/package.json +4 -4
@@ -27,7 +27,7 @@ export function importSessionMenuItem() {
27
27
  label: 'Import session...',
28
28
  icon: PublishIcon,
29
29
  onClick: (session) => {
30
- session.showWidget(session.addWidget('ImportSessionWidget', 'importSessionWidget'));
30
+ session.openWidget('ImportSessionWidget', 'importSessionWidget');
31
31
  },
32
32
  };
33
33
  }
@@ -58,10 +58,9 @@ export function openTrackMenuItem() {
58
58
  session.notify('Please open a view to add a track first');
59
59
  }
60
60
  else {
61
- const widget = session.addWidget('AddTrackWidget', 'addTrackWidget', {
61
+ session.openWidget('AddTrackWidget', 'addTrackWidget', {
62
62
  view: firstView.id,
63
63
  });
64
- session.showWidget(widget);
65
64
  if (session.views.length > 1) {
66
65
  session.notify(MULTI_VIEW_WARNING);
67
66
  }
@@ -74,8 +73,7 @@ export function openConnectionMenuItem() {
74
73
  label: 'Open connection...',
75
74
  icon: Cable,
76
75
  onClick: (session) => {
77
- const widget = session.addWidget('AddConnectionWidget', 'addConnectionWidget');
78
- session.showWidget(widget);
76
+ session.openWidget('AddConnectionWidget', 'addConnectionWidget');
79
77
  },
80
78
  };
81
79
  }
@@ -84,7 +82,7 @@ export function pluginStoreMenuItem() {
84
82
  label: 'Plugin store',
85
83
  icon: ExtensionIcon,
86
84
  onClick: (session) => {
87
- session.showWidget(session.addWidget('PluginStoreWidget', 'pluginStoreWidget'));
85
+ session.openWidget('PluginStoreWidget', 'pluginStoreWidget');
88
86
  },
89
87
  };
90
88
  }
@@ -4,6 +4,7 @@ import type PluginManager from '@jbrowse/core/PluginManager';
4
4
  import type { BaseAssemblyConfigModel } from '@jbrowse/core/assemblyManager';
5
5
  import type { AnyConfigurationSchemaType } from '@jbrowse/core/configuration';
6
6
  import type { AnimationMode, DialogComponentType, TrackConfigChange } from '@jbrowse/core/util';
7
+ import type { HighlightType } from '@jbrowse/core/util/highlights';
7
8
  import type { IAnyStateTreeNode, Instance } from '@jbrowse/mobx-state-tree';
8
9
  type DoneCallback = (doneCallback: () => void) => [DialogComponentType, Record<string, unknown>];
9
10
  /**
@@ -28,22 +29,26 @@ export declare function BaseSessionModel<ROOT_MODEL_TYPE extends BaseRootModelTy
28
29
  focusedViewId: import("@jbrowse/mobx-state-tree").IMaybe<import("@jbrowse/mobx-state-tree").ISimpleType<string>>;
29
30
  /**
30
31
  * #property
31
- * one session-wide toggle for all region highlight bands (URL/view
32
- * highlights and bookmark overlays)
32
+ * translucent bands over genomic regions; every view draws the ones on
33
+ * its own assemblies
34
+ */
35
+ highlights: import("@jbrowse/mobx-state-tree").IOptionalIType<import("@jbrowse/mobx-state-tree").IArrayType<import("@jbrowse/mobx-state-tree").IType<HighlightType, HighlightType, HighlightType>>, [undefined]>;
36
+ /**
37
+ * #property
33
38
  */
34
39
  highlightsVisible: import("@jbrowse/mobx-state-tree").IOptionalIType<import("@jbrowse/mobx-state-tree").ISimpleType<boolean>, [undefined]>;
35
40
  /**
36
41
  * #property
37
42
  * views, tracks, displays and widgets `pruneUnbuildableNodes` took out of
38
43
  * the tree because this build has no plugin for their type, each with the
39
- * anchor that puts it back. Opaque here on purpose — nothing in the
40
- * session reads it, and the shape belongs to that module.
44
+ * anchor that puts it back. Nothing in the session reads its contents,
45
+ * and `pruneUnbuildableNodes` defines their structure.
41
46
  *
42
- * It is a **declared property** rather than data riding along in the
43
- * snapshot because MST silently drops an undeclared key: without this
44
- * line the held nodes survive the prune and then vanish the moment
45
- * `setSession` builds the tree, and every unit test of the prune still
46
- * passes. `heldNodesSurviveTheSession.test.ts` is the canary.
47
+ * It is a **declared property** because MST drops undeclared snapshot
48
+ * keys without error. Without this declaration the held nodes survive
49
+ * the prune and are then discarded when `setSession` builds the tree,
50
+ * while every unit test of the prune still passes.
51
+ * `heldNodesSurviveTheSession.test.ts` tests that they survive.
47
52
  */
48
53
  heldForMissingPlugins: import("@jbrowse/mobx-state-tree").IOptionalIType<import("@jbrowse/mobx-state-tree").IType<HeldNode[] | undefined, HeldNode[] | undefined, HeldNode[] | undefined>, [undefined]>;
49
54
  }, never>, {
@@ -194,15 +199,27 @@ export declare function BaseSessionModel<ROOT_MODEL_TYPE extends BaseRootModelTy
194
199
  setHovered(thing: unknown): void;
195
200
  /**
196
201
  * #action
197
- * toggle all region highlight bands across every view
198
202
  */
199
203
  setHighlightsVisible(arg: boolean): void;
200
204
  /**
201
205
  * #action
202
- * turn highlight bands back on, so a newly made highlight or bookmark is
203
- * never silently swallowed by an earlier "highlights off"
206
+ * an identical entry is not added twice, so a spec launched again does not
207
+ * stack its bands. Adding shows the bands again, since a highlight made
208
+ * while they are off would otherwise read as nothing happening
209
+ */
210
+ addHighlight(highlight: HighlightType): void;
211
+ /**
212
+ * #action
213
+ */
214
+ removeHighlight(highlight: HighlightType): void;
215
+ /**
216
+ * #action
217
+ */
218
+ updateHighlight(old: HighlightType, updates: Partial<HighlightType>): void;
219
+ /**
220
+ * #action
204
221
  */
205
- revealHighlights(): void;
222
+ setHighlights(highlights: HighlightType[]): void;
206
223
  /**
207
224
  * #action
208
225
  * set a runtime user-preference override (see `getPreference`). Mutates
@@ -1,10 +1,11 @@
1
- import { getConf } from '@jbrowse/core/configuration';
1
+ import { readConfObject } from '@jbrowse/core/configuration';
2
2
  import SnackbarModel from '@jbrowse/core/ui/SnackbarModel';
3
3
  import { setNumberGrouping } from '@jbrowse/core/util';
4
4
  import { freezeDeep } from '@jbrowse/core/util/freezeDeep';
5
+ import { isSameHighlight } from '@jbrowse/core/util/highlights';
5
6
  import { isFeature, unwrapFeature } from '@jbrowse/core/util/simpleFeature';
6
7
  import { ElementId } from '@jbrowse/core/util/types/mst';
7
- import { getParent, isStateTreeNode, types } from '@jbrowse/mobx-state-tree';
8
+ import { cast, getParent, isStateTreeNode, types, } from '@jbrowse/mobx-state-tree';
8
9
  import { observable } from 'mobx';
9
10
  import { applyDeveloperMode } from './developerMode.js';
10
11
  function isAnimationMode(val) {
@@ -34,22 +35,26 @@ export function BaseSessionModel(_pluginManager) {
34
35
  focusedViewId: types.maybe(types.string),
35
36
  /**
36
37
  * #property
37
- * one session-wide toggle for all region highlight bands (URL/view
38
- * highlights and bookmark overlays)
38
+ * translucent bands over genomic regions; every view draws the ones on
39
+ * its own assemblies
40
+ */
41
+ highlights: types.stripDefault(types.array(types.frozen()), []),
42
+ /**
43
+ * #property
39
44
  */
40
45
  highlightsVisible: types.stripDefault(types.boolean, true),
41
46
  /**
42
47
  * #property
43
48
  * views, tracks, displays and widgets `pruneUnbuildableNodes` took out of
44
49
  * the tree because this build has no plugin for their type, each with the
45
- * anchor that puts it back. Opaque here on purpose — nothing in the
46
- * session reads it, and the shape belongs to that module.
50
+ * anchor that puts it back. Nothing in the session reads its contents,
51
+ * and `pruneUnbuildableNodes` defines their structure.
47
52
  *
48
- * It is a **declared property** rather than data riding along in the
49
- * snapshot because MST silently drops an undeclared key: without this
50
- * line the held nodes survive the prune and then vanish the moment
51
- * `setSession` builds the tree, and every unit test of the prune still
52
- * passes. `heldNodesSurviveTheSession.test.ts` is the canary.
53
+ * It is a **declared property** because MST drops undeclared snapshot
54
+ * keys without error. Without this declaration the held nodes survive
55
+ * the prune and are then discarded when `setSession` builds the tree,
56
+ * while every unit test of the prune still passes.
57
+ * `heldNodesSurviveTheSession.test.ts` tests that they survive.
53
58
  */
54
59
  heldForMissingPlugins: types.stripDefault(types.frozen(), undefined),
55
60
  })
@@ -168,7 +173,8 @@ export function BaseSessionModel(_pluginManager) {
168
173
  * `defaultUseWorkspaces`).
169
174
  */
170
175
  getPreferenceDefault(key) {
171
- return getConf(self, ['preferences', key]);
176
+ const { preferences } = self.configuration;
177
+ return preferences ? readConfObject(preferences, key) : undefined;
172
178
  },
173
179
  /**
174
180
  * #method
@@ -270,19 +276,47 @@ export function BaseSessionModel(_pluginManager) {
270
276
  },
271
277
  /**
272
278
  * #action
273
- * toggle all region highlight bands across every view
274
279
  */
275
280
  setHighlightsVisible(arg) {
276
281
  self.highlightsVisible = arg;
277
282
  },
278
283
  /**
279
284
  * #action
280
- * turn highlight bands back on, so a newly made highlight or bookmark is
281
- * never silently swallowed by an earlier "highlights off"
285
+ * an identical entry is not added twice, so a spec launched again does not
286
+ * stack its bands. Adding shows the bands again, since a highlight made
287
+ * while they are off would otherwise read as nothing happening
282
288
  */
283
- revealHighlights() {
289
+ addHighlight(highlight) {
290
+ if (!self.highlights.some(h => isSameHighlight(h, highlight))) {
291
+ self.highlights.push(highlight);
292
+ }
284
293
  self.highlightsVisible = true;
285
294
  },
295
+ /**
296
+ * #action
297
+ */
298
+ removeHighlight(highlight) {
299
+ self.highlights.remove(highlight);
300
+ },
301
+ /**
302
+ * #action
303
+ */
304
+ updateHighlight(old, updates) {
305
+ const idx = self.highlights.indexOf(old);
306
+ if (idx !== -1) {
307
+ self.highlights[idx] = { ...old, ...updates };
308
+ self.highlightsVisible = true;
309
+ }
310
+ },
311
+ /**
312
+ * #action
313
+ */
314
+ setHighlights(highlights) {
315
+ self.highlights = cast(highlights);
316
+ if (highlights.length) {
317
+ self.highlightsVisible = true;
318
+ }
319
+ },
286
320
  /**
287
321
  * #action
288
322
  * set a runtime user-preference override (see `getPreference`). Mutates
@@ -111,9 +111,10 @@ export declare function ConnectionManagementSessionMixin(pluginManager: PluginMa
111
111
  pruneConnectionTrackConfig(trackId: string): void;
112
112
  /**
113
113
  * #action
114
- * Lazily establish a single connection by id if it isn't already live —
115
- * used when its category is expanded in the track selector. Fetches
116
- * silently (no view launch / success snackbar); already-open tracks keep
114
+ * Lazily establish a single connection by id if it isn't already live;
115
+ * the track selector calls it when the connection's category is
116
+ * expanded. Fetches without launching a view or showing a success
117
+ * snackbar; already-open tracks keep
117
118
  * rendering from `connectionTrackConfigs` meanwhile. Idempotent.
118
119
  */
119
120
  hydrateConnection(connectionId: string): void;
@@ -189,9 +189,10 @@ export function ConnectionManagementSessionMixin(pluginManager) {
189
189
  },
190
190
  /**
191
191
  * #action
192
- * Lazily establish a single connection by id if it isn't already live —
193
- * used when its category is expanded in the track selector. Fetches
194
- * silently (no view launch / success snackbar); already-open tracks keep
192
+ * Lazily establish a single connection by id if it isn't already live;
193
+ * the track selector calls it when the connection's category is
194
+ * expanded. Fetches without launching a view or showing a success
195
+ * snackbar; already-open tracks keep
195
196
  * rendering from `connectionTrackConfigs` meanwhile. Idempotent.
196
197
  */
197
198
  hydrateConnection(connectionId) {
@@ -97,6 +97,14 @@ export declare function DrawerWidgetSessionMixin(pluginManager: PluginManager):
97
97
  * #action
98
98
  */
99
99
  hideAllWidgets(): void;
100
+ afterAttach(): void;
101
+ } & {
102
+ /**
103
+ * #action
104
+ * adds the widget, replacing one with the same id, and shows it
105
+ */
106
+ openWidget(typeName: string, id: string, initialState?: any, conf?: unknown): any;
107
+ } & {
100
108
  /**
101
109
  * #action
102
110
  * opens a configuration editor to configure the given thing,
@@ -108,7 +116,6 @@ export declare function DrawerWidgetSessionMixin(pluginManager: PluginManager):
108
116
  }, opts?: {
109
117
  expandedDisplayId?: string;
110
118
  }): void;
111
- afterAttach(): void;
112
119
  }, import("@jbrowse/mobx-state-tree")._NotCustomized, import("@jbrowse/mobx-state-tree").ModelSnapshotType<{
113
120
  /**
114
121
  * #property
@@ -191,6 +191,24 @@ export function DrawerWidgetSessionMixin(pluginManager) {
191
191
  self.activeWidgets.clear();
192
192
  self.poppedOut = false;
193
193
  },
194
+ afterAttach() {
195
+ addDisposer(self, autorun(function drawerPositionAutorun() {
196
+ localStorageSetItem('drawerPosition', self.drawerPosition);
197
+ }, { name: 'DrawerPosition' }));
198
+ },
199
+ }))
200
+ .actions(self => ({
201
+ /**
202
+ * #action
203
+ * adds the widget, replacing one with the same id, and shows it
204
+ */
205
+ openWidget(typeName, id, initialState = {}, conf) {
206
+ const widget = self.addWidget(typeName, id, initialState, conf);
207
+ self.showWidget(widget);
208
+ return widget;
209
+ },
210
+ }))
211
+ .actions(self => ({
194
212
  /**
195
213
  * #action
196
214
  * opens a configuration editor to configure the given thing,
@@ -212,16 +230,10 @@ export function DrawerWidgetSessionMixin(pluginManager) {
212
230
  else {
213
231
  throw new Error('must pass a configuration model or frozen config with trackId to editConfiguration');
214
232
  }
215
- const editor = this.addWidget('ConfigurationEditorWidget', 'configEditor', {});
233
+ const editor = self.openWidget('ConfigurationEditorWidget', 'configEditor');
216
234
  // Set target via action since it's now volatile
217
235
  editor.setTarget(targetConfig);
218
236
  editor.setExpandedDisplayId(opts?.expandedDisplayId);
219
- this.showWidget(editor);
220
- },
221
- afterAttach() {
222
- addDisposer(self, autorun(function drawerPositionAutorun() {
223
- localStorageSetItem('drawerPosition', self.drawerPosition);
224
- }, { name: 'DrawerPosition' }));
225
237
  },
226
238
  }))
227
239
  .postProcessSnapshot(snap => {
@@ -9,6 +9,7 @@ export declare function MultipleViewsSessionMixin(pluginManager: PluginManager):
9
9
  id: import("@jbrowse/mobx-state-tree").IOptionalIType<import("@jbrowse/mobx-state-tree").ISimpleType<string>, [undefined]>;
10
10
  name: import("@jbrowse/mobx-state-tree").ISimpleType<string>;
11
11
  focusedViewId: import("@jbrowse/mobx-state-tree").IMaybe<import("@jbrowse/mobx-state-tree").ISimpleType<string>>;
12
+ highlights: import("@jbrowse/mobx-state-tree").IOptionalIType<import("@jbrowse/mobx-state-tree").IArrayType<import("@jbrowse/mobx-state-tree").IType<import("@jbrowse/core/util/highlights").HighlightType, import("@jbrowse/core/util/highlights").HighlightType, import("@jbrowse/core/util/highlights").HighlightType>>, [undefined]>;
12
13
  highlightsVisible: import("@jbrowse/mobx-state-tree").IOptionalIType<import("@jbrowse/mobx-state-tree").ISimpleType<boolean>, [undefined]>;
13
14
  heldForMissingPlugins: import("@jbrowse/mobx-state-tree").IOptionalIType<import("@jbrowse/mobx-state-tree").IType<import("../pruneUnbuildableNodes.ts").HeldNode[] | undefined, import("../pruneUnbuildableNodes.ts").HeldNode[] | undefined, import("../pruneUnbuildableNodes.ts").HeldNode[] | undefined>, [undefined]>;
14
15
  }, never>, "activeWidgets" | "drawerPosition" | "drawerWidth" | "minimized" | "widgets"> & {
@@ -531,10 +532,7 @@ export declare function MultipleViewsSessionMixin(pluginManager: PluginManager):
531
532
  }, import("@jbrowse/mobx-state-tree")._NotCustomized, import("@jbrowse/mobx-state-tree")._NotCustomized>>) | undefined;
532
533
  readonly assemblyNamesList: string[];
533
534
  readonly configuredAssemblyNames: Set<string>;
534
- readonly assemblyList: (import("@jbrowse/mobx-state-tree").ModelInstanceTypeProps<Record<string, any>> & {
535
- setSubschema(slotName: string, data: Record<string, unknown>): any;
536
- setSlot(slotName: string, value: unknown): void;
537
- } & import("@jbrowse/mobx-state-tree").IStateTreeNode<import("@jbrowse/core/configuration").AnyConfigurationSchemaType>)[];
535
+ readonly assemblyList: import("@jbrowse/core/configuration").AnyConfigurationModel[];
538
536
  readonly rpcManager: import("@jbrowse/core/rpc/RpcManager").default;
539
537
  } & {
540
538
  settleAssemblyResolution(assemblyName: string): Promise<void>;
@@ -1323,10 +1321,7 @@ export declare function MultipleViewsSessionMixin(pluginManager: PluginManager):
1323
1321
  }, import("@jbrowse/mobx-state-tree")._NotCustomized, import("@jbrowse/mobx-state-tree")._NotCustomized>>) | undefined;
1324
1322
  readonly assemblyNamesList: string[];
1325
1323
  readonly configuredAssemblyNames: Set<string>;
1326
- readonly assemblyList: (import("@jbrowse/mobx-state-tree").ModelInstanceTypeProps<Record<string, any>> & {
1327
- setSubschema(slotName: string, data: Record<string, unknown>): any;
1328
- setSlot(slotName: string, value: unknown): void;
1329
- } & import("@jbrowse/mobx-state-tree").IStateTreeNode<import("@jbrowse/core/configuration").AnyConfigurationSchemaType>)[];
1324
+ readonly assemblyList: import("@jbrowse/core/configuration").AnyConfigurationModel[];
1330
1325
  readonly rpcManager: import("@jbrowse/core/rpc/RpcManager").default;
1331
1326
  } & {
1332
1327
  settleAssemblyResolution(assemblyName: string): Promise<void>;
@@ -1626,10 +1621,7 @@ export declare function MultipleViewsSessionMixin(pluginManager: PluginManager):
1626
1621
  } & {
1627
1622
  readonly jbrowse: any;
1628
1623
  readonly rpcManager: import("@jbrowse/core/rpc/RpcManager").default;
1629
- readonly configuration: import("@jbrowse/mobx-state-tree").ModelInstanceTypeProps<Record<string, any>> & {
1630
- setSubschema(slotName: string, data: Record<string, unknown>): any;
1631
- setSlot(slotName: string, value: unknown): void;
1632
- } & import("@jbrowse/mobx-state-tree").IStateTreeNode<import("@jbrowse/core/configuration").AnyConfigurationSchemaType>;
1624
+ readonly configuration: import("@jbrowse/core/configuration").ConfigNodeProps<any> & import("@jbrowse/core/configuration").ConfigNodeActions & import("@jbrowse/core/configuration").ConfigNodeBrand<import("@jbrowse/core/configuration").AnyConfigurationSchemaType>;
1633
1625
  readonly adminMode: boolean;
1634
1626
  readonly textSearchManager: import("@jbrowse/core/TextSearch/TextSearchManager").default;
1635
1627
  } & {
@@ -1650,7 +1642,10 @@ export declare function MultipleViewsSessionMixin(pluginManager: PluginManager):
1650
1642
  clearSelection(): void;
1651
1643
  setHovered(thing: unknown): void;
1652
1644
  setHighlightsVisible(arg: boolean): void;
1653
- revealHighlights(): void;
1645
+ addHighlight(highlight: import("@jbrowse/core/util/highlights").HighlightType): void;
1646
+ removeHighlight(highlight: import("@jbrowse/core/util/highlights").HighlightType): void;
1647
+ updateHighlight(old: import("@jbrowse/core/util/highlights").HighlightType, updates: Partial<import("@jbrowse/core/util/highlights").HighlightType>): void;
1648
+ setHighlights(highlights: import("@jbrowse/core/util/highlights").HighlightType[]): void;
1654
1649
  setPreferenceOverride(key: string, value: unknown): void;
1655
1650
  clearPreferenceOverrides(): void;
1656
1651
  clearPreferenceOverride(key: string): void;
@@ -1691,12 +1686,15 @@ export declare function MultipleViewsSessionMixin(pluginManager: PluginManager):
1691
1686
  popoutWidget(): void;
1692
1687
  returnWidgetToDrawer(): void;
1693
1688
  hideAllWidgets(): void;
1689
+ afterAttach(): void;
1690
+ } & {
1691
+ openWidget(typeName: string, id: string, initialState?: any, conf?: unknown): any;
1692
+ } & {
1694
1693
  editConfiguration(configuration: import("@jbrowse/core/configuration").AnyConfigurationModel | {
1695
1694
  trackId: string;
1696
1695
  }, opts?: {
1697
1696
  expandedDisplayId?: string;
1698
1697
  }): void;
1699
- afterAttach(): void;
1700
1698
  } & {
1701
1699
  /**
1702
1700
  * #getter
@@ -1856,6 +1854,7 @@ export declare function MultipleViewsSessionMixin(pluginManager: PluginManager):
1856
1854
  id: import("@jbrowse/mobx-state-tree").IOptionalIType<import("@jbrowse/mobx-state-tree").ISimpleType<string>, [undefined]>;
1857
1855
  name: import("@jbrowse/mobx-state-tree").ISimpleType<string>;
1858
1856
  focusedViewId: import("@jbrowse/mobx-state-tree").IMaybe<import("@jbrowse/mobx-state-tree").ISimpleType<string>>;
1857
+ highlights: import("@jbrowse/mobx-state-tree").IOptionalIType<import("@jbrowse/mobx-state-tree").IArrayType<import("@jbrowse/mobx-state-tree").IType<import("@jbrowse/core/util/highlights").HighlightType, import("@jbrowse/core/util/highlights").HighlightType, import("@jbrowse/core/util/highlights").HighlightType>>, [undefined]>;
1859
1858
  highlightsVisible: import("@jbrowse/mobx-state-tree").IOptionalIType<import("@jbrowse/mobx-state-tree").ISimpleType<boolean>, [undefined]>;
1860
1859
  heldForMissingPlugins: import("@jbrowse/mobx-state-tree").IOptionalIType<import("@jbrowse/mobx-state-tree").IType<import("../pruneUnbuildableNodes.ts").HeldNode[] | undefined, import("../pruneUnbuildableNodes.ts").HeldNode[] | undefined, import("../pruneUnbuildableNodes.ts").HeldNode[] | undefined>, [undefined]>;
1861
1860
  }, never>, "activeWidgets" | "drawerPosition" | "drawerWidth" | "minimized" | "widgets"> & {
@@ -11,6 +11,7 @@ export declare function PreferencesSessionMixin(pluginManager: PluginManager): i
11
11
  id: import("@jbrowse/mobx-state-tree").IOptionalIType<import("@jbrowse/mobx-state-tree").ISimpleType<string>, [undefined]>;
12
12
  name: import("@jbrowse/mobx-state-tree").ISimpleType<string>;
13
13
  focusedViewId: import("@jbrowse/mobx-state-tree").IMaybe<import("@jbrowse/mobx-state-tree").ISimpleType<string>>;
14
+ highlights: import("@jbrowse/mobx-state-tree").IOptionalIType<import("@jbrowse/mobx-state-tree").IArrayType<import("@jbrowse/mobx-state-tree").IType<import("@jbrowse/core/util/highlights").HighlightType, import("@jbrowse/core/util/highlights").HighlightType, import("@jbrowse/core/util/highlights").HighlightType>>, [undefined]>;
14
15
  highlightsVisible: import("@jbrowse/mobx-state-tree").IOptionalIType<import("@jbrowse/mobx-state-tree").ISimpleType<boolean>, [undefined]>;
15
16
  heldForMissingPlugins: import("@jbrowse/mobx-state-tree").IOptionalIType<import("@jbrowse/mobx-state-tree").IType<import("../pruneUnbuildableNodes.ts").HeldNode[] | undefined, import("../pruneUnbuildableNodes.ts").HeldNode[] | undefined, import("../pruneUnbuildableNodes.ts").HeldNode[] | undefined>, [undefined]>;
16
17
  }, never>, never>, {
@@ -512,10 +513,7 @@ export declare function PreferencesSessionMixin(pluginManager: PluginManager): i
512
513
  }, import("@jbrowse/mobx-state-tree")._NotCustomized, import("@jbrowse/mobx-state-tree")._NotCustomized>>) | undefined;
513
514
  readonly assemblyNamesList: string[];
514
515
  readonly configuredAssemblyNames: Set<string>;
515
- readonly assemblyList: (import("@jbrowse/mobx-state-tree").ModelInstanceTypeProps<Record<string, any>> & {
516
- setSubschema(slotName: string, data: Record<string, unknown>): any;
517
- setSlot(slotName: string, value: unknown): void;
518
- } & import("@jbrowse/mobx-state-tree").IStateTreeNode<import("@jbrowse/core/configuration").AnyConfigurationSchemaType>)[];
516
+ readonly assemblyList: import("@jbrowse/core/configuration").AnyConfigurationModel[];
519
517
  readonly rpcManager: import("@jbrowse/core/rpc/RpcManager").default;
520
518
  } & {
521
519
  settleAssemblyResolution(assemblyName: string): Promise<void>;
@@ -1304,10 +1302,7 @@ export declare function PreferencesSessionMixin(pluginManager: PluginManager): i
1304
1302
  }, import("@jbrowse/mobx-state-tree")._NotCustomized, import("@jbrowse/mobx-state-tree")._NotCustomized>>) | undefined;
1305
1303
  readonly assemblyNamesList: string[];
1306
1304
  readonly configuredAssemblyNames: Set<string>;
1307
- readonly assemblyList: (import("@jbrowse/mobx-state-tree").ModelInstanceTypeProps<Record<string, any>> & {
1308
- setSubschema(slotName: string, data: Record<string, unknown>): any;
1309
- setSlot(slotName: string, value: unknown): void;
1310
- } & import("@jbrowse/mobx-state-tree").IStateTreeNode<import("@jbrowse/core/configuration").AnyConfigurationSchemaType>)[];
1305
+ readonly assemblyList: import("@jbrowse/core/configuration").AnyConfigurationModel[];
1311
1306
  readonly rpcManager: import("@jbrowse/core/rpc/RpcManager").default;
1312
1307
  } & {
1313
1308
  settleAssemblyResolution(assemblyName: string): Promise<void>;
@@ -1607,10 +1602,7 @@ export declare function PreferencesSessionMixin(pluginManager: PluginManager): i
1607
1602
  } & {
1608
1603
  readonly jbrowse: any;
1609
1604
  readonly rpcManager: import("@jbrowse/core/rpc/RpcManager").default;
1610
- readonly configuration: import("@jbrowse/mobx-state-tree").ModelInstanceTypeProps<Record<string, any>> & {
1611
- setSubschema(slotName: string, data: Record<string, unknown>): any;
1612
- setSlot(slotName: string, value: unknown): void;
1613
- } & import("@jbrowse/mobx-state-tree").IStateTreeNode<import("@jbrowse/core/configuration").AnyConfigurationSchemaType>;
1605
+ readonly configuration: import("@jbrowse/core/configuration").ConfigNodeProps<any> & import("@jbrowse/core/configuration").ConfigNodeActions & import("@jbrowse/core/configuration").ConfigNodeBrand<import("@jbrowse/core/configuration").AnyConfigurationSchemaType>;
1614
1606
  readonly adminMode: boolean;
1615
1607
  readonly textSearchManager: import("@jbrowse/core/TextSearch/TextSearchManager").default;
1616
1608
  } & {
@@ -1631,7 +1623,10 @@ export declare function PreferencesSessionMixin(pluginManager: PluginManager): i
1631
1623
  clearSelection(): void;
1632
1624
  setHovered(thing: unknown): void;
1633
1625
  setHighlightsVisible(arg: boolean): void;
1634
- revealHighlights(): void;
1626
+ addHighlight(highlight: import("@jbrowse/core/util/highlights").HighlightType): void;
1627
+ removeHighlight(highlight: import("@jbrowse/core/util/highlights").HighlightType): void;
1628
+ updateHighlight(old: import("@jbrowse/core/util/highlights").HighlightType, updates: Partial<import("@jbrowse/core/util/highlights").HighlightType>): void;
1629
+ setHighlights(highlights: import("@jbrowse/core/util/highlights").HighlightType[]): void;
1635
1630
  setPreferenceOverride(key: string, value: unknown): void;
1636
1631
  clearPreferenceOverrides(): void;
1637
1632
  clearPreferenceOverride(key: string): void;
@@ -16,6 +16,7 @@ export declare function SessionTracksManagerSessionMixin(pluginManager: PluginMa
16
16
  id: import("@jbrowse/mobx-state-tree").IOptionalIType<import("@jbrowse/mobx-state-tree").ISimpleType<string>, [undefined]>;
17
17
  name: import("@jbrowse/mobx-state-tree").ISimpleType<string>;
18
18
  focusedViewId: import("@jbrowse/mobx-state-tree").IMaybe<import("@jbrowse/mobx-state-tree").ISimpleType<string>>;
19
+ highlights: import("@jbrowse/mobx-state-tree").IOptionalIType<import("@jbrowse/mobx-state-tree").IArrayType<import("@jbrowse/mobx-state-tree").IType<import("@jbrowse/core/util/highlights").HighlightType, import("@jbrowse/core/util/highlights").HighlightType, import("@jbrowse/core/util/highlights").HighlightType>>, [undefined]>;
19
20
  highlightsVisible: import("@jbrowse/mobx-state-tree").IOptionalIType<import("@jbrowse/mobx-state-tree").ISimpleType<boolean>, [undefined]>;
20
21
  heldForMissingPlugins: import("@jbrowse/mobx-state-tree").IOptionalIType<import("@jbrowse/mobx-state-tree").IType<import("../pruneUnbuildableNodes.ts").HeldNode[] | undefined, import("../pruneUnbuildableNodes.ts").HeldNode[] | undefined, import("../pruneUnbuildableNodes.ts").HeldNode[] | undefined>, [undefined]>;
21
22
  }, never>, never>, "sessionTracks" | "trackConfigDeltas"> & {
@@ -31,9 +32,10 @@ export declare function SessionTracksManagerSessionMixin(pluginManager: PluginMa
31
32
  * Per-track config overrides for a non-admin, keyed by trackId, stored as a
32
33
  * *delta* against the admin-owned base config (jbrowse.tracks entry) rather
33
34
  * than a full copy — so a later admin change to an untouched field still
34
- * flows through (see trackConfigDelta.ts). Frozen (not a typed track array)
35
- * on purpose: a typed create() would fill defaults, erasing the "unset vs
36
- * default" distinction the delta merge relies on.
35
+ * flows through (see trackConfigDelta.ts). A `null` member resets a slot
36
+ * the base sets. Frozen (not a typed track array) on purpose: a typed
37
+ * create() would fill defaults, erasing the "unset vs default"
38
+ * distinction the delta merge relies on.
37
39
  *
38
40
  * `stripDefault` for the reason every other persisted prop beside it has
39
41
  * it: without it the empty map is written into every snapshot and every
@@ -541,10 +543,7 @@ export declare function SessionTracksManagerSessionMixin(pluginManager: PluginMa
541
543
  }, import("@jbrowse/mobx-state-tree")._NotCustomized, import("@jbrowse/mobx-state-tree")._NotCustomized>>) | undefined;
542
544
  readonly assemblyNamesList: string[];
543
545
  readonly configuredAssemblyNames: Set<string>;
544
- readonly assemblyList: (import("@jbrowse/mobx-state-tree").ModelInstanceTypeProps<Record<string, any>> & {
545
- setSubschema(slotName: string, data: Record<string, unknown>): any;
546
- setSlot(slotName: string, value: unknown): void;
547
- } & import("@jbrowse/mobx-state-tree").IStateTreeNode<import("@jbrowse/core/configuration").AnyConfigurationSchemaType>)[];
546
+ readonly assemblyList: AnyConfigurationModel[];
548
547
  readonly rpcManager: import("@jbrowse/core/rpc/RpcManager").default;
549
548
  } & {
550
549
  settleAssemblyResolution(assemblyName: string): Promise<void>;
@@ -1333,10 +1332,7 @@ export declare function SessionTracksManagerSessionMixin(pluginManager: PluginMa
1333
1332
  }, import("@jbrowse/mobx-state-tree")._NotCustomized, import("@jbrowse/mobx-state-tree")._NotCustomized>>) | undefined;
1334
1333
  readonly assemblyNamesList: string[];
1335
1334
  readonly configuredAssemblyNames: Set<string>;
1336
- readonly assemblyList: (import("@jbrowse/mobx-state-tree").ModelInstanceTypeProps<Record<string, any>> & {
1337
- setSubschema(slotName: string, data: Record<string, unknown>): any;
1338
- setSlot(slotName: string, value: unknown): void;
1339
- } & import("@jbrowse/mobx-state-tree").IStateTreeNode<import("@jbrowse/core/configuration").AnyConfigurationSchemaType>)[];
1335
+ readonly assemblyList: AnyConfigurationModel[];
1340
1336
  readonly rpcManager: import("@jbrowse/core/rpc/RpcManager").default;
1341
1337
  } & {
1342
1338
  settleAssemblyResolution(assemblyName: string): Promise<void>;
@@ -1636,10 +1632,7 @@ export declare function SessionTracksManagerSessionMixin(pluginManager: PluginMa
1636
1632
  } & {
1637
1633
  readonly jbrowse: any;
1638
1634
  readonly rpcManager: import("@jbrowse/core/rpc/RpcManager").default;
1639
- readonly configuration: import("@jbrowse/mobx-state-tree").ModelInstanceTypeProps<Record<string, any>> & {
1640
- setSubschema(slotName: string, data: Record<string, unknown>): any;
1641
- setSlot(slotName: string, value: unknown): void;
1642
- } & import("@jbrowse/mobx-state-tree").IStateTreeNode<import("@jbrowse/core/configuration").AnyConfigurationSchemaType>;
1635
+ readonly configuration: import("@jbrowse/core/configuration").ConfigNodeProps<any> & import("@jbrowse/core/configuration").ConfigNodeActions & import("@jbrowse/core/configuration").ConfigNodeBrand<import("@jbrowse/core/configuration").AnyConfigurationSchemaType>;
1643
1636
  readonly adminMode: boolean;
1644
1637
  readonly textSearchManager: import("@jbrowse/core/TextSearch/TextSearchManager").default;
1645
1638
  } & {
@@ -1660,7 +1653,10 @@ export declare function SessionTracksManagerSessionMixin(pluginManager: PluginMa
1660
1653
  clearSelection(): void;
1661
1654
  setHovered(thing: unknown): void;
1662
1655
  setHighlightsVisible(arg: boolean): void;
1663
- revealHighlights(): void;
1656
+ addHighlight(highlight: import("@jbrowse/core/util/highlights").HighlightType): void;
1657
+ removeHighlight(highlight: import("@jbrowse/core/util/highlights").HighlightType): void;
1658
+ updateHighlight(old: import("@jbrowse/core/util/highlights").HighlightType, updates: Partial<import("@jbrowse/core/util/highlights").HighlightType>): void;
1659
+ setHighlights(highlights: import("@jbrowse/core/util/highlights").HighlightType[]): void;
1664
1660
  setPreferenceOverride(key: string, value: unknown): void;
1665
1661
  clearPreferenceOverrides(): void;
1666
1662
  clearPreferenceOverride(key: string): void;
@@ -1783,31 +1779,29 @@ export declare function SessionTracksManagerSessionMixin(pluginManager: PluginMa
1783
1779
  * config.json every visitor is served; everyone else's goes to
1784
1780
  * `sessionTracks`.
1785
1781
  *
1786
- * **Only the "Add track" workflows.** Those are where an admin adding a
1787
- * track means to add it for the whole site. A track a feature stands up
1788
- * on the user's behalf — a search result, a computed consensus, a
1789
- * reconstruction's segment labels — is not a catalog entry, and one
1790
- * admin click on this publishes it to every visitor, again on the next
1791
- * click, with a per-launch trackId that defeats the dedupe.
1792
- * `addSessionTrackConf` above is the destination for those.
1782
+ * **Call it only from the "Add track" workflows**, where an admin
1783
+ * adding a track means to add it for the whole site. For a track a
1784
+ * feature creates on the user's behalf (a search result, a computed
1785
+ * consensus, a reconstruction's segment labels), one admin click on
1786
+ * this publishes it to every visitor, and each later click publishes
1787
+ * another copy, because the per-launch trackId prevents deduplication.
1788
+ * Use `addSessionTrackConf` above for those.
1793
1789
  *
1794
1790
  * An admin's track still goes to the session when it names an assembly
1795
- * the config.json does not carry — a session spec's, a MAF sample's own
1796
- * genome, a comparative view's synthesized pair. The Add-track widget
1797
- * takes its assembly from the containing view, so an admin adding a
1798
- * track while looking at one of those arrives here with a name no
1799
- * visitor can resolve, and publishing it writes an entry the server
1800
- * hands everyone and nobody can draw. The session is the one
1801
- * destination where that track works, so the click keeps working and
1802
- * the dangling entry is never written; a snackbar says which assembly
1803
- * moved it.
1791
+ * the config.json does not carry: a session spec's assembly, a MAF
1792
+ * sample's genome, or a comparative view's synthesized pair. The
1793
+ * Add-track widget takes its assembly from the containing view, so an
1794
+ * admin adding a track in such a view passes a name no visitor can
1795
+ * resolve. Publishing it would write an entry the server sends to every
1796
+ * visitor and no visitor can draw. Adding it to the session keeps the
1797
+ * track usable and writes no dangling entry; a snackbar names the
1798
+ * assembly that caused the fallback.
1804
1799
  *
1805
- * **The snackbar names the assembly and not the track**, which is what
1806
- * lets a batch collapse to one message: `pushSnackbarMessage` dedupes on
1807
- * the exact text, and `BulkAddTracksWorkflow` publishes in a loop, so
1808
- * interpolating the track name stacked one identical-but-for-a-name
1809
- * toast per file over an admin adding thirty. The assembly is the whole
1810
- * of what an admin has to act on anyway.
1800
+ * **The snackbar names the assembly and not the track**, so a batch
1801
+ * produces one message: `pushSnackbarMessage` dedupes on the exact
1802
+ * text, and `BulkAddTracksWorkflow` publishes in a loop. Including the
1803
+ * track name would show one snackbar per file to an admin adding
1804
+ * thirty. The assembly is all the admin needs to act on.
1811
1805
  */
1812
1806
  publishTrackConf(trackConf: AnyConfiguration): any;
1813
1807
  /**