@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
@@ -0,0 +1,140 @@
1
+ import PluginManager from '@jbrowse/core/PluginManager';
2
+ import type { SnapshotIn } from '@jbrowse/mobx-state-tree';
3
+ export declare const aboutTestPluginManager: PluginManager;
4
+ export declare const TestTrackConf: import("@jbrowse/core/configuration/configurationSchema").ConfigurationSchemaType<{
5
+ readonly name: {
6
+ type: "string";
7
+ } & {
8
+ defaultValue: string;
9
+ };
10
+ readonly assemblyNames: {
11
+ type: "stringArray";
12
+ } & {
13
+ defaultValue: unknown;
14
+ };
15
+ readonly adapter: import("@jbrowse/core/configuration/configurationSchema").ConfigurationSchemaType<{
16
+ readonly type: {
17
+ type: "string";
18
+ } & {
19
+ defaultValue: string;
20
+ };
21
+ readonly bamLocation: {
22
+ type: "fileLocation";
23
+ } & {
24
+ defaultValue: unknown;
25
+ };
26
+ }, import("@jbrowse/core/configuration/configurationSchema").ConfigurationSchemaOptions<undefined, undefined, undefined, import("@jbrowse/core/configuration").ConfigurationSchemaRequirement<Partial<Record<string, string[]>>, string>>>;
27
+ readonly metadata: {
28
+ type: "frozen";
29
+ } & {
30
+ defaultValue: unknown;
31
+ };
32
+ readonly formatAbout: import("@jbrowse/core/configuration/configurationSchema").ConfigurationSchemaType<{
33
+ readonly config: {
34
+ type: "frozen";
35
+ } & {
36
+ defaultValue: unknown;
37
+ };
38
+ readonly hideUris: {
39
+ type: "boolean";
40
+ } & {
41
+ defaultValue: boolean;
42
+ };
43
+ }, import("@jbrowse/core/configuration/configurationSchema").ConfigurationSchemaOptions<undefined, undefined, undefined, import("@jbrowse/core/configuration").ConfigurationSchemaRequirement<Partial<Record<string, string[]>>, string>>>;
44
+ trackId: {
45
+ type: "string";
46
+ } & {
47
+ defaultValue: string;
48
+ };
49
+ }, import("@jbrowse/core/configuration/configurationSchema").ConfigurationSchemaOptions<undefined, "trackId", undefined, import("@jbrowse/core/configuration").ConfigurationSchemaRequirement<Partial<Record<string, string[]>>, string>>>;
50
+ export declare function makeTrackConf(snapshot: SnapshotIn<typeof TestTrackConf>): import("@jbrowse/core/configuration").ConfigNodeProps<{
51
+ readonly name: {
52
+ type: "string";
53
+ } & {
54
+ defaultValue: string;
55
+ };
56
+ readonly assemblyNames: {
57
+ type: "stringArray";
58
+ } & {
59
+ defaultValue: unknown;
60
+ };
61
+ readonly adapter: import("@jbrowse/core/configuration/configurationSchema").ConfigurationSchemaType<{
62
+ readonly type: {
63
+ type: "string";
64
+ } & {
65
+ defaultValue: string;
66
+ };
67
+ readonly bamLocation: {
68
+ type: "fileLocation";
69
+ } & {
70
+ defaultValue: unknown;
71
+ };
72
+ }, import("@jbrowse/core/configuration/configurationSchema").ConfigurationSchemaOptions<undefined, undefined, undefined, import("@jbrowse/core/configuration").ConfigurationSchemaRequirement<Partial<Record<string, string[]>>, string>>>;
73
+ readonly metadata: {
74
+ type: "frozen";
75
+ } & {
76
+ defaultValue: unknown;
77
+ };
78
+ readonly formatAbout: import("@jbrowse/core/configuration/configurationSchema").ConfigurationSchemaType<{
79
+ readonly config: {
80
+ type: "frozen";
81
+ } & {
82
+ defaultValue: unknown;
83
+ };
84
+ readonly hideUris: {
85
+ type: "boolean";
86
+ } & {
87
+ defaultValue: boolean;
88
+ };
89
+ }, import("@jbrowse/core/configuration/configurationSchema").ConfigurationSchemaOptions<undefined, undefined, undefined, import("@jbrowse/core/configuration").ConfigurationSchemaRequirement<Partial<Record<string, string[]>>, string>>>;
90
+ trackId: {
91
+ type: "string";
92
+ } & {
93
+ defaultValue: string;
94
+ };
95
+ }> & import("@jbrowse/core/configuration").ConfigNodeActions & import("@jbrowse/core/configuration").ConfigNodeBrand<import("@jbrowse/core/configuration/configurationSchema").ConfigurationSchemaType<{
96
+ readonly name: {
97
+ type: "string";
98
+ } & {
99
+ defaultValue: string;
100
+ };
101
+ readonly assemblyNames: {
102
+ type: "stringArray";
103
+ } & {
104
+ defaultValue: unknown;
105
+ };
106
+ readonly adapter: import("@jbrowse/core/configuration/configurationSchema").ConfigurationSchemaType<{
107
+ readonly type: {
108
+ type: "string";
109
+ } & {
110
+ defaultValue: string;
111
+ };
112
+ readonly bamLocation: {
113
+ type: "fileLocation";
114
+ } & {
115
+ defaultValue: unknown;
116
+ };
117
+ }, import("@jbrowse/core/configuration/configurationSchema").ConfigurationSchemaOptions<undefined, undefined, undefined, import("@jbrowse/core/configuration").ConfigurationSchemaRequirement<Partial<Record<string, string[]>>, string>>>;
118
+ readonly metadata: {
119
+ type: "frozen";
120
+ } & {
121
+ defaultValue: unknown;
122
+ };
123
+ readonly formatAbout: import("@jbrowse/core/configuration/configurationSchema").ConfigurationSchemaType<{
124
+ readonly config: {
125
+ type: "frozen";
126
+ } & {
127
+ defaultValue: unknown;
128
+ };
129
+ readonly hideUris: {
130
+ type: "boolean";
131
+ } & {
132
+ defaultValue: boolean;
133
+ };
134
+ }, import("@jbrowse/core/configuration/configurationSchema").ConfigurationSchemaOptions<undefined, undefined, undefined, import("@jbrowse/core/configuration").ConfigurationSchemaRequirement<Partial<Record<string, string[]>>, string>>>;
135
+ trackId: {
136
+ type: "string";
137
+ } & {
138
+ defaultValue: string;
139
+ };
140
+ }, import("@jbrowse/core/configuration/configurationSchema").ConfigurationSchemaOptions<undefined, "trackId", undefined, import("@jbrowse/core/configuration").ConfigurationSchemaRequirement<Partial<Record<string, string[]>>, string>>>>;
@@ -0,0 +1,25 @@
1
+ import PluginManager from '@jbrowse/core/PluginManager';
2
+ import { ConfigurationSchema, FormatAboutConfigSchemaFactory, } from '@jbrowse/core/configuration';
3
+ // a real PluginManager provides the jexl instance a callback slot evaluates with
4
+ export const aboutTestPluginManager = new PluginManager([]).createPluggableElements();
5
+ aboutTestPluginManager.configure();
6
+ // the slots the About dialog reads off a track config, without registering a
7
+ // track type to get them
8
+ export const TestTrackConf = ConfigurationSchema('TestTrack', {
9
+ name: { type: 'string', defaultValue: '' },
10
+ assemblyNames: { type: 'stringArray', defaultValue: [] },
11
+ adapter: ConfigurationSchema('TestAdapter', {
12
+ type: { type: 'string', defaultValue: 'TestAdapter' },
13
+ bamLocation: {
14
+ type: 'fileLocation',
15
+ defaultValue: { uri: '', locationType: 'UriLocation' },
16
+ },
17
+ }),
18
+ metadata: { type: 'frozen', defaultValue: {} },
19
+ formatAbout: FormatAboutConfigSchemaFactory(),
20
+ }, { explicitIdentifier: 'trackId' });
21
+ export function makeTrackConf(snapshot) {
22
+ return TestTrackConf.create(snapshot, {
23
+ pluginManager: aboutTestPluginManager,
24
+ });
25
+ }
@@ -1,9 +1,8 @@
1
- import type { AboutConfig } from './util.ts';
2
1
  /**
3
- * The URL of a track's prose description page, as a UCSC track hub supplies it,
4
- * and undefined for anything that is not an http(s) url — the value reaches
5
- * `openLocation` and an anchor's href, so a `javascript:` or `file://` one does
6
- * not become one here.
2
+ * The URL of a track's prose description page in its `metadata`, as a UCSC
3
+ * track hub supplies it, and undefined for anything that is not an http(s) url
4
+ * — the value reaches `openLocation` and an anchor's href, so a `javascript:`
5
+ * or `file://` one does not become one here.
7
6
  *
8
7
  * Four spellings: `UCSCTrackHubConnection` spreads the trackDb stanza across
9
8
  * `metadata`, the bulk converter behind genomes.jbrowse.org nests it under
@@ -12,7 +11,7 @@ import type { AboutConfig } from './util.ts';
12
11
  * escaped anchor rather than a bare url, so the href comes back through a parse
13
12
  * rather than a regex.
14
13
  */
15
- export declare function getDescriptionHtmlUrl(config: AboutConfig): string | undefined;
14
+ export declare function getDescriptionHtmlUrl(metadata: unknown): string | undefined;
16
15
  /**
17
16
  * A fetched description page as markup for `SanitizedHTML`: links and images
18
17
  * resolved against the page they came from rather than the JBrowse origin, and
@@ -1,4 +1,3 @@
1
- import { readConfSlot } from '@jbrowse/core/configuration';
2
1
  function isRecord(value) {
3
2
  return typeof value === 'object' && value !== null;
4
3
  }
@@ -11,10 +10,10 @@ function descriptionUrl(value) {
11
10
  return /^https?:\/\//i.test(candidate) ? candidate : undefined;
12
11
  }
13
12
  /**
14
- * The URL of a track's prose description page, as a UCSC track hub supplies it,
15
- * and undefined for anything that is not an http(s) url — the value reaches
16
- * `openLocation` and an anchor's href, so a `javascript:` or `file://` one does
17
- * not become one here.
13
+ * The URL of a track's prose description page in its `metadata`, as a UCSC
14
+ * track hub supplies it, and undefined for anything that is not an http(s) url
15
+ * — the value reaches `openLocation` and an anchor's href, so a `javascript:`
16
+ * or `file://` one does not become one here.
18
17
  *
19
18
  * Four spellings: `UCSCTrackHubConnection` spreads the trackDb stanza across
20
19
  * `metadata`, the bulk converter behind genomes.jbrowse.org nests it under
@@ -23,8 +22,7 @@ function descriptionUrl(value) {
23
22
  * escaped anchor rather than a bare url, so the href comes back through a parse
24
23
  * rather than a regex.
25
24
  */
26
- export function getDescriptionHtmlUrl(config) {
27
- const metadata = readConfSlot(config, 'metadata');
25
+ export function getDescriptionHtmlUrl(metadata) {
28
26
  return [metadata, isRecord(metadata) ? metadata.ucsc : undefined]
29
27
  .flatMap(record => (isRecord(record) ? [record.html, record.htmlPath] : []))
30
28
  .filter(candidate => typeof candidate === 'string')
package/esm/ui/index.d.ts CHANGED
@@ -1,4 +1,6 @@
1
+ export { default as AppReadyMarker } from './AppReadyMarker.tsx';
1
2
  export { default as AboutDialog } from './AboutDialog.tsx';
3
+ export type { AboutPanelProps } from './util.ts';
2
4
  export { default as Drawer } from './Drawer.tsx';
3
5
  export { default as DrawerControls } from './DrawerControls.tsx';
4
6
  export { default as DrawerHeader } from './DrawerHeader.tsx';
package/esm/ui/index.js CHANGED
@@ -1,3 +1,4 @@
1
+ export { default as AppReadyMarker } from './AppReadyMarker.js';
1
2
  export { default as AboutDialog } from './AboutDialog.js';
2
3
  export { default as Drawer } from './Drawer.js';
3
4
  export { default as DrawerControls } from './DrawerControls.js';
package/esm/ui/util.d.ts CHANGED
@@ -1,48 +1,30 @@
1
- import type PluginManager from '@jbrowse/core/PluginManager';
2
1
  import type { AnyConfigurationModel } from '@jbrowse/core/configuration';
3
2
  import type { AbstractSessionModel } from '@jbrowse/core/util';
4
- export type AboutConfig = AnyConfigurationModel | Record<string, unknown>;
5
3
  export interface AboutPanelProps {
6
4
  session: AbstractSessionModel;
7
- config: AboutConfig;
5
+ /** the track's config, hydrated by the dialog before any panel sees it */
6
+ config: AnyConfigurationModel;
8
7
  }
9
8
  declare module '@jbrowse/core/PluginManager' {
10
9
  interface ExtensionPointRegistry {
11
10
  'Core-extraAboutPanel': ComponentList<AboutPanelProps>;
12
11
  /** #extensionPoint Core-replaceAbout | sync | Replace or wrap a track's About dialog body */
13
12
  'Core-replaceAbout': ComponentSlot<AboutPanelProps>;
14
- 'Core-customizeAbout': {
15
- args: {
16
- config: Record<string, unknown>;
17
- };
18
- result: {
19
- config: {
20
- metadata?: Record<string, unknown>;
21
- [key: string]: unknown;
22
- };
23
- };
24
- props: AboutPanelProps;
25
- };
26
13
  }
27
14
  }
28
15
  /**
29
- * Build what a track's About dialog shows: the base config merged with session-
30
- * and track-level `formatAbout` overrides and passed through the
31
- * `Core-customizeAbout` extension point, plus the resolved `hideUris`.
32
- *
33
- * Both `formatAbout` slots are two-tier and resolve here together, so the
34
- * dialog reads one thing rather than re-deriving half the rule at the call
35
- * site. They fold differently on purpose: `config` is a merge the track can win
36
- * key-by-key, `hideUris` is an OR a track cannot turn back off.
16
+ * What a track's About dialog shows: the config with the session's and the
17
+ * track's `formatAbout` callbacks merged over it, plus the resolved `hideUris`.
18
+ * The two slots fold differently on purpose: `config` is a merge the track can
19
+ * win key-by-key, `hideUris` an OR a track cannot turn back off.
37
20
  */
38
- export declare function getAboutDialogConfig({ config, session, pluginManager, }: {
39
- config: AboutConfig;
21
+ export declare function getAboutDialogConfig({ config, session, }: {
22
+ config: AnyConfigurationModel;
40
23
  session: AbstractSessionModel;
41
- pluginManager: PluginManager;
42
24
  }): {
43
25
  config: {
44
- metadata?: Record<string, unknown>;
45
26
  [key: string]: unknown;
27
+ metadata?: Record<string, unknown>;
46
28
  };
47
29
  hideUris: boolean;
48
30
  };
package/esm/ui/util.js CHANGED
@@ -1,39 +1,20 @@
1
- import { getConf, mergeFormatCallbacks, readConfObject, readConfSlot, } from '@jbrowse/core/configuration';
2
- import { isStateTreeNode } from '@jbrowse/mobx-state-tree';
1
+ import { getConf, mergeFormatCallbacks, readConfObject, } from '@jbrowse/core/configuration';
3
2
  // #endregion
4
3
  /**
5
- * Build what a track's About dialog shows: the base config merged with session-
6
- * and track-level `formatAbout` overrides and passed through the
7
- * `Core-customizeAbout` extension point, plus the resolved `hideUris`.
8
- *
9
- * Both `formatAbout` slots are two-tier and resolve here together, so the
10
- * dialog reads one thing rather than re-deriving half the rule at the call
11
- * site. They fold differently on purpose: `config` is a merge the track can win
12
- * key-by-key, `hideUris` is an OR a track cannot turn back off.
4
+ * What a track's About dialog shows: the config with the session's and the
5
+ * track's `formatAbout` callbacks merged over it, plus the resolved `hideUris`.
6
+ * The two slots fold differently on purpose: `config` is a merge the track can
7
+ * win key-by-key, `hideUris` an OR a track cannot turn back off.
13
8
  */
14
- export function getAboutDialogConfig({ config, session, pluginManager, }) {
15
- const conf = isStateTreeNode(config)
16
- ? readConfObject(config)
17
- : config;
18
- const trackFormatAbout = readConfSlot(config, ['formatAbout', 'config'], { config: conf }, pluginManager.jexl);
19
- const sessionFormatAbout = getConf(session, ['formatAbout', 'config'], {
20
- config: conf,
21
- });
22
- // same two-tier merge the feature-details panel runs on `formatDetails`,
23
- // session first so a track can override individual keys
24
- const merged = {
25
- config: {
26
- ...conf,
27
- ...mergeFormatCallbacks(sessionFormatAbout, trackFormatAbout),
28
- },
9
+ export function getAboutDialogConfig({ config, session, }) {
10
+ const conf = readConfObject(config);
11
+ const shown = {
12
+ ...conf,
13
+ ...mergeFormatCallbacks(getConf(session, ['formatAbout', 'config'], { config: conf }), readConfObject(config, ['formatAbout', 'config'], { config: conf })),
29
14
  };
30
15
  return {
31
- ...pluginManager.evaluateExtensionPoint(
32
- /** #extensionPoint Core-customizeAbout | sync | Transform the config shown in a track's About dialog */
33
- 'Core-customizeAbout', merged, { session, config }),
34
- // OR'd, not merged: a deployment that hides file locations session-wide
35
- // can't have a track turn them back on. Documented on the slot
16
+ config: shown,
36
17
  hideUris: Boolean(getConf(session, ['formatAbout', 'hideUris']) ||
37
- readConfSlot(config, ['formatAbout', 'hideUris'])),
18
+ readConfObject(config, ['formatAbout', 'hideUris'])),
38
19
  };
39
20
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jbrowse/product-core",
3
- "version": "5.0.0-beta.7",
3
+ "version": "5.0.0-beta.9",
4
4
  "type": "module",
5
5
  "sideEffects": false,
6
6
  "description": "JBrowse 2 code shared between products but not used by plugins",
@@ -25,13 +25,13 @@
25
25
  "esm"
26
26
  ],
27
27
  "dependencies": {
28
- "@jbrowse/mobx-state-tree": "^6.5.1",
28
+ "@jbrowse/mobx-state-tree": "^6.5.2",
29
29
  "@mui/icons-material": "^9.4.0",
30
30
  "@mui/material": "^9.4.0",
31
31
  "mobx": "^7.0.3",
32
32
  "mobx-react": "^10.0.2",
33
- "@jbrowse/core": "^5.0.0-beta.7",
34
- "@jbrowse/render-core": "^5.0.0-beta.7"
33
+ "@jbrowse/render-core": "^5.0.0-beta.9",
34
+ "@jbrowse/core": "^5.0.0-beta.9"
35
35
  },
36
36
  "peerDependencies": {
37
37
  "react": ">=19.0.0",