@jbrowse/core 2.4.1 → 2.5.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 (175) hide show
  1. package/BaseFeatureWidget/BaseFeatureDetail/ArrayValue.d.ts +16 -0
  2. package/BaseFeatureWidget/BaseFeatureDetail/ArrayValue.js +46 -0
  3. package/BaseFeatureWidget/BaseFeatureDetail/Attributes.d.ts +15 -0
  4. package/BaseFeatureWidget/BaseFeatureDetail/Attributes.js +69 -0
  5. package/BaseFeatureWidget/BaseFeatureDetail/BasicField.d.ts +17 -0
  6. package/BaseFeatureWidget/BaseFeatureDetail/BasicField.js +23 -0
  7. package/BaseFeatureWidget/BaseFeatureDetail/BasicValue.d.ts +12 -0
  8. package/BaseFeatureWidget/BaseFeatureDetail/BasicValue.js +26 -0
  9. package/BaseFeatureWidget/BaseFeatureDetail/DataGrid.d.ts +14 -0
  10. package/BaseFeatureWidget/BaseFeatureDetail/DataGrid.js +98 -0
  11. package/BaseFeatureWidget/BaseFeatureDetail/FieldName.d.ts +16 -0
  12. package/BaseFeatureWidget/BaseFeatureDetail/FieldName.js +32 -0
  13. package/BaseFeatureWidget/BaseFeatureDetail/UriField.d.ts +17 -0
  14. package/BaseFeatureWidget/BaseFeatureDetail/UriField.js +31 -0
  15. package/BaseFeatureWidget/BaseFeatureDetail/UriLink.d.ts +6 -0
  16. package/BaseFeatureWidget/BaseFeatureDetail/UriLink.js +13 -0
  17. package/BaseFeatureWidget/{BaseFeatureDetail.d.ts → BaseFeatureDetail/index.d.ts} +5 -7
  18. package/BaseFeatureWidget/{BaseFeatureDetail.js → BaseFeatureDetail/index.js} +12 -9
  19. package/BaseFeatureWidget/BaseFeatureDetail/util.d.ts +4 -0
  20. package/BaseFeatureWidget/BaseFeatureDetail/util.js +23 -0
  21. package/BaseFeatureWidget/SequenceFeatureDetails/CDNASequence.d.ts +12 -0
  22. package/BaseFeatureWidget/SequenceFeatureDetails/CDNASequence.js +25 -0
  23. package/BaseFeatureWidget/SequenceFeatureDetails/CDSSequence.d.ts +5 -0
  24. package/BaseFeatureWidget/SequenceFeatureDetails/CDSSequence.js +12 -0
  25. package/BaseFeatureWidget/SequenceFeatureDetails/GenomicSequence.d.ts +5 -0
  26. package/BaseFeatureWidget/SequenceFeatureDetails/GenomicSequence.js +14 -0
  27. package/BaseFeatureWidget/SequenceFeatureDetails/ProteinSequence.d.ts +8 -0
  28. package/BaseFeatureWidget/SequenceFeatureDetails/ProteinSequence.js +18 -0
  29. package/BaseFeatureWidget/SequenceFeatureDetails/SequenceFeatureDetails.d.ts +2 -0
  30. package/BaseFeatureWidget/SequenceFeatureDetails/SequenceFeatureDetails.js +146 -0
  31. package/BaseFeatureWidget/{SequenceFeatureSettingsDialog.d.ts → SequenceFeatureDetails/SequenceFeatureSettingsDialog.d.ts} +0 -1
  32. package/BaseFeatureWidget/{SequenceFeatureSettingsDialog.js → SequenceFeatureDetails/SequenceFeatureSettingsDialog.js} +1 -1
  33. package/BaseFeatureWidget/{SequenceHelpDialog.d.ts → SequenceFeatureDetails/SequenceHelpDialog.d.ts} +0 -1
  34. package/BaseFeatureWidget/{SequenceHelpDialog.js → SequenceFeatureDetails/SequenceHelpDialog.js} +6 -9
  35. package/BaseFeatureWidget/{SequencePanel.d.ts → SequenceFeatureDetails/SequencePanel.d.ts} +1 -1
  36. package/BaseFeatureWidget/{SequencePanel.js → SequenceFeatureDetails/SequencePanel.js} +10 -8
  37. package/BaseFeatureWidget/SequenceFeatureDetails/hooks.d.ts +10 -0
  38. package/BaseFeatureWidget/SequenceFeatureDetails/hooks.js +73 -0
  39. package/BaseFeatureWidget/SequenceFeatureDetails/index.d.ts +2 -0
  40. package/BaseFeatureWidget/SequenceFeatureDetails/index.js +68 -0
  41. package/BaseFeatureWidget/SequenceFeatureDetails/util.d.ts +6 -0
  42. package/BaseFeatureWidget/SequenceFeatureDetails/util.js +11 -0
  43. package/BaseFeatureWidget/index.d.ts +5 -2
  44. package/BaseFeatureWidget/index.js +29 -20
  45. package/BaseFeatureWidget/types.d.ts +2 -2
  46. package/Plugin.d.ts +1 -1
  47. package/PluginLoader.js +17 -0
  48. package/PluginManager.d.ts +6 -5
  49. package/PluginManager.js +3 -0
  50. package/ReExports/list.js +1 -0
  51. package/ReExports/modules.d.ts +6 -5
  52. package/ReExports/modules.js +7 -4
  53. package/TextSearch/TextSearchManager.d.ts +2 -9
  54. package/assemblyManager/assembly.d.ts +91 -8
  55. package/assemblyManager/assembly.js +92 -8
  56. package/assemblyManager/assemblyConfigSchema.d.ts +50 -1
  57. package/assemblyManager/assemblyManager.d.ts +115 -58
  58. package/assemblyManager/assemblyManager.js +60 -12
  59. package/configuration/configurationSchema.d.ts +13 -13
  60. package/configuration/configurationSchema.js +4 -2
  61. package/configuration/configurationSlot.d.ts +1 -0
  62. package/configuration/index.d.ts +1 -1
  63. package/configuration/types.d.ts +13 -0
  64. package/configuration/types.js +2 -0
  65. package/configuration/util.d.ts +5 -3
  66. package/configuration/util.js +18 -18
  67. package/data_adapters/BaseAdapter/BaseAdapter.d.ts +23 -0
  68. package/data_adapters/BaseAdapter/BaseAdapter.js +37 -0
  69. package/data_adapters/BaseAdapter/BaseFeatureDataAdapter.d.ts +128 -0
  70. package/data_adapters/{BaseAdapter.js → BaseAdapter/BaseFeatureDataAdapter.js} +58 -88
  71. package/data_adapters/BaseAdapter/BaseOptions.d.ts +16 -0
  72. package/data_adapters/BaseAdapter/BaseOptions.js +2 -0
  73. package/data_adapters/BaseAdapter/BaseRefNameAliasAdapter.d.ts +9 -0
  74. package/data_adapters/BaseAdapter/BaseRefNameAliasAdapter.js +2 -0
  75. package/data_adapters/BaseAdapter/BaseSequenceAdapter.d.ts +13 -0
  76. package/data_adapters/BaseAdapter/BaseSequenceAdapter.js +10 -0
  77. package/data_adapters/BaseAdapter/BaseTextSearchAdapter.d.ts +6 -0
  78. package/data_adapters/BaseAdapter/BaseTextSearchAdapter.js +2 -0
  79. package/data_adapters/BaseAdapter/RegionsAdapter.d.ts +6 -0
  80. package/data_adapters/BaseAdapter/RegionsAdapter.js +2 -0
  81. package/data_adapters/BaseAdapter/index.d.ts +15 -0
  82. package/data_adapters/BaseAdapter/index.js +25 -0
  83. package/data_adapters/BaseAdapter/types.d.ts +21 -0
  84. package/data_adapters/BaseAdapter/types.js +2 -0
  85. package/data_adapters/BaseAdapter/util.d.ts +12 -0
  86. package/data_adapters/BaseAdapter/util.js +23 -0
  87. package/data_adapters/CytobandAdapter/configSchema.d.ts +11 -1
  88. package/package.json +4 -5
  89. package/pluggableElementTypes/AdapterType.d.ts +1 -1
  90. package/pluggableElementTypes/ConnectionType.d.ts +1 -1
  91. package/pluggableElementTypes/DisplayType.d.ts +1 -1
  92. package/pluggableElementTypes/InternetAccountType.d.ts +1 -1
  93. package/pluggableElementTypes/TextSearchAdapterType.d.ts +1 -1
  94. package/pluggableElementTypes/models/BaseTrackModel.d.ts +1 -1
  95. package/pluggableElementTypes/models/BaseTrackModel.js +3 -2
  96. package/pluggableElementTypes/models/InternetAccountModel.d.ts +30 -0
  97. package/pluggableElementTypes/models/InternetAccountModel.js +6 -1
  98. package/pluggableElementTypes/models/baseConnectionConfig.d.ts +18 -1
  99. package/pluggableElementTypes/models/baseInternetAccountConfig.d.ts +42 -1
  100. package/pluggableElementTypes/models/baseTrackConfig.d.ts +118 -1
  101. package/pluggableElementTypes/models/baseTrackConfig.js +1 -1
  102. package/pluggableElementTypes/renderers/CircularChordRendererType.d.ts +0 -1
  103. package/pluggableElementTypes/renderers/FeatureRendererType.d.ts +1 -1
  104. package/pluggableElementTypes/renderers/RendererType.d.ts +1 -1
  105. package/pluggableElementTypes/renderers/RpcRenderedSvgGroup.d.ts +0 -1
  106. package/pluggableElementTypes/renderers/ServerSideRendererType.d.ts +1 -1
  107. package/rpc/RpcManager.d.ts +8 -1
  108. package/rpc/RpcManager.js +1 -1
  109. package/rpc/baseRpcConfig.d.ts +10 -1
  110. package/rpc/configSchema.d.ts +14 -1
  111. package/rpc/coreRpcMethods.d.ts +1 -1
  112. package/rpc/coreRpcMethods.js +3 -3
  113. package/rpc/mainThreadRpcConfig.d.ts +7 -1
  114. package/rpc/methods/{CoreEstimateRegionStats.d.ts → CoreGetFeatureDensityStats.d.ts} +2 -2
  115. package/rpc/methods/{CoreEstimateRegionStats.js → CoreGetFeatureDensityStats.js} +4 -4
  116. package/rpc/methods/CoreGetFeatureDetails.js +5 -5
  117. package/rpc/webWorkerRpcConfig.d.ts +7 -1
  118. package/tsconfig.build.tsbuildinfo +1 -1
  119. package/ui/AboutDialog.d.ts +0 -1
  120. package/ui/AppLogo.d.ts +0 -1
  121. package/ui/AssemblySelector.d.ts +0 -1
  122. package/ui/CascadingMenu.d.ts +0 -1
  123. package/ui/ColorPicker.d.ts +0 -1
  124. package/ui/Dialog.d.ts +0 -1
  125. package/ui/Dialog.js +14 -1
  126. package/ui/DrawerWidget.d.ts +1 -2
  127. package/ui/DrawerWidget.js +5 -3
  128. package/ui/DropDownMenu.d.ts +0 -1
  129. package/ui/ErrorMessage.d.ts +0 -1
  130. package/ui/FactoryResetDialog.d.ts +0 -1
  131. package/ui/FatalErrorDialog.d.ts +0 -1
  132. package/ui/FileSelector/FileSelector.d.ts +0 -1
  133. package/ui/FileSelector/LocalFileChooser.d.ts +0 -1
  134. package/ui/FileSelector/UrlChooser.d.ts +0 -1
  135. package/ui/Icons.d.ts +0 -1
  136. package/ui/LoadingEllipses.d.ts +0 -1
  137. package/ui/Logo.d.ts +0 -1
  138. package/ui/PrerenderedCanvas.d.ts +0 -1
  139. package/ui/ResizeBar.js +1 -1
  140. package/ui/ResizeHandle.d.ts +0 -1
  141. package/ui/ReturnToImportFormDialog.d.ts +0 -1
  142. package/ui/SanitizedHTML.d.ts +0 -1
  143. package/ui/SanitizedHTML.js +6 -0
  144. package/ui/Snackbar.d.ts +0 -1
  145. package/ui/Tooltip.d.ts +0 -1
  146. package/ui/ViewContainer.d.ts +2 -3
  147. package/ui/ViewContainer.js +7 -39
  148. package/ui/ViewContainerTitle.d.ts +5 -0
  149. package/ui/ViewContainerTitle.js +42 -0
  150. package/ui/ViewLauncher.d.ts +0 -1
  151. package/ui/ViewMenu.d.ts +1 -2
  152. package/ui/ViewPanel.d.ts +0 -1
  153. package/ui/react-colorful.d.ts +1 -1
  154. package/ui/theme.js +3 -18
  155. package/util/index.d.ts +9 -4
  156. package/util/index.js +30 -6
  157. package/util/io/index.d.ts +3 -1
  158. package/util/io/index.js +9 -4
  159. package/util/layouts/PrecomputedMultiLayout.d.ts +1 -1
  160. package/util/mst-reflection.d.ts +12 -17
  161. package/util/mst-reflection.js +13 -12
  162. package/util/stats.d.ts +5 -5
  163. package/util/types/index.d.ts +4 -1
  164. package/util/types/mst.d.ts +12 -9
  165. package/util/useMeasure.d.ts +5 -0
  166. package/util/useMeasure.js +34 -0
  167. package/BaseFeatureWidget/SequenceBox.d.ts +0 -29
  168. package/BaseFeatureWidget/SequenceBox.js +0 -63
  169. package/BaseFeatureWidget/SequenceFeatureDetails.d.ts +0 -3
  170. package/BaseFeatureWidget/SequenceFeatureDetails.js +0 -237
  171. package/data_adapters/BaseAdapter.d.ts +0 -138
  172. /package/BaseFeatureWidget/{test_data → SequenceFeatureDetails/test_data}/DLGAP3.d.ts +0 -0
  173. /package/BaseFeatureWidget/{test_data → SequenceFeatureDetails/test_data}/DLGAP3.js +0 -0
  174. /package/BaseFeatureWidget/{test_data → SequenceFeatureDetails/test_data}/NCDN.d.ts +0 -0
  175. /package/BaseFeatureWidget/{test_data → SequenceFeatureDetails/test_data}/NCDN.js +0 -0
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  import { AnyConfigurationModel } from '../configuration';
3
2
  export declare function FileInfoPanel({ config }: {
4
3
  config: AnyConfigurationModel;
package/ui/AppLogo.d.ts CHANGED
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  import { AnyConfigurationModel } from '../configuration';
3
2
  declare const Logo: ({ session, }: {
4
3
  session: {
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  import { InputProps as IIP, TextFieldProps as TFP } from '@mui/material';
3
2
  import { AbstractSessionModel } from '../util';
4
3
  declare const AssemblySelector: ({ session, onChange, selected, InputProps, TextFieldProps, localStorageKey, helperText, }: {
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  import { MenuItem as JBMenuItem } from './Menu';
3
2
  import { PopupState } from 'material-ui-popup-state/hooks';
4
3
  declare function CascadingMenuChildren(props: {
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  export declare const PopoverPicker: ({ color, onChange, }: {
3
2
  color: string;
4
3
  onChange: (color: string) => void;
package/ui/Dialog.d.ts CHANGED
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  import { DialogProps } from '@mui/material';
3
2
  declare function JBrowseDialog(props: DialogProps & {
4
3
  title: string;
package/ui/Dialog.js CHANGED
@@ -27,6 +27,7 @@ function DialogError({ error }) {
27
27
  function JBrowseDialog(props) {
28
28
  const { classes } = useStyles();
29
29
  const { title, children, onClose } = props;
30
+ const theme = (0, material_1.useTheme)();
30
31
  return (react_1.default.createElement(material_1.Dialog, { ...props },
31
32
  react_1.default.createElement(material_1.ScopedCssBaseline, null,
32
33
  react_1.default.createElement(material_1.DialogTitle, null,
@@ -37,6 +38,18 @@ function JBrowseDialog(props) {
37
38
  } },
38
39
  react_1.default.createElement(Close_1.default, null))) : null),
39
40
  react_1.default.createElement(material_1.Divider, null),
40
- react_1.default.createElement(react_error_boundary_1.ErrorBoundary, { FallbackComponent: DialogError }, children))));
41
+ react_1.default.createElement(react_error_boundary_1.ErrorBoundary, { FallbackComponent: DialogError },
42
+ react_1.default.createElement(material_1.ThemeProvider, { theme: (0, material_1.createTheme)(theme, {
43
+ components: {
44
+ MuiInputBase: {
45
+ styleOverrides: {
46
+ input: {
47
+ // xref https://github.com/GMOD/jbrowse-components/pull/3666
48
+ boxSizing: 'content-box!important',
49
+ },
50
+ },
51
+ },
52
+ },
53
+ }) }, children)))));
41
54
  }
42
55
  exports.default = (0, mobx_react_1.observer)(JBrowseDialog);
@@ -1,6 +1,5 @@
1
- /// <reference types="react" />
2
1
  import { SessionWithDrawerWidgets } from '../util/types';
3
- declare const DrawerWidget: ({ session }: {
2
+ declare const DrawerWidget: ({ session, }: {
4
3
  session: SessionWithDrawerWidgets;
5
4
  }) => JSX.Element;
6
5
  export default DrawerWidget;
@@ -59,7 +59,7 @@ const useStyles = (0, mui_1.makeStyles)()(theme => ({
59
59
  background: theme.palette.secondary.main,
60
60
  },
61
61
  }));
62
- const DrawerHeader = (0, mobx_react_1.observer)(({ session, setToolbarHeight, }) => {
62
+ const DrawerHeader = (0, mobx_react_1.observer)(function ({ session, setToolbarHeight, }) {
63
63
  const { pluginManager } = (0, util_1.getEnv)(session);
64
64
  const { visibleWidget, activeWidgets, drawerPosition } = session;
65
65
  const { classes } = useStyles();
@@ -109,7 +109,7 @@ const DrawerHeader = (0, mobx_react_1.observer)(({ session, setToolbarHeight, })
109
109
  setAnchorEl(null);
110
110
  } }, option))))));
111
111
  });
112
- const DrawerWidget = (0, mobx_react_1.observer)(({ session }) => {
112
+ const DrawerWidget = (0, mobx_react_1.observer)(function ({ session, }) {
113
113
  const { visibleWidget } = session;
114
114
  const { pluginManager } = (0, util_1.getEnv)(session);
115
115
  const DrawerComponent = visibleWidget
@@ -125,6 +125,8 @@ const DrawerWidget = (0, mobx_react_1.observer)(({ session }) => {
125
125
  return (react_1.default.createElement(Drawer_1.default, { session: session },
126
126
  react_1.default.createElement(DrawerHeader, { session: session, setToolbarHeight: setToolbarHeight }),
127
127
  react_1.default.createElement(react_1.Suspense, { fallback: react_1.default.createElement(LoadingEllipses_1.default, null) },
128
- react_1.default.createElement(react_error_boundary_1.ErrorBoundary, { FallbackComponent: ({ error }) => react_1.default.createElement(ErrorMessage_1.default, { error: error }) }, DrawerComponent ? (react_1.default.createElement(DrawerComponent, { model: visibleWidget, session: session, toolbarHeight: toolbarHeight })) : null))));
128
+ react_1.default.createElement(react_error_boundary_1.ErrorBoundary, { FallbackComponent: ({ error }) => react_1.default.createElement(ErrorMessage_1.default, { error: error }) }, DrawerComponent ? (react_1.default.createElement(react_1.default.Fragment, null,
129
+ react_1.default.createElement(DrawerComponent, { model: visibleWidget, session: session, toolbarHeight: toolbarHeight }),
130
+ react_1.default.createElement("div", { style: { height: 300 } }))) : null))));
129
131
  });
130
132
  exports.default = DrawerWidget;
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  import { MenuItem } from './Menu';
3
2
  declare function DropDownMenu({ menuTitle, session, menuItems, }: {
4
3
  menuTitle: string;
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  declare const ErrorMessage: ({ error }: {
3
2
  error: unknown;
4
3
  }) => JSX.Element;
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  declare const _default: ({ onClose, open, onFactoryReset, }: {
3
2
  onClose: Function;
4
3
  open: boolean;
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  declare const FatalErrorDialog: ({ componentStack, error, onFactoryReset, resetButtonText, }: {
3
2
  componentStack?: string | undefined;
4
3
  error?: unknown;
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  import { FileLocation, AbstractRootModel } from '../../util/types';
3
2
  declare const _default: (props: {
4
3
  location?: FileLocation | undefined;
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  import { FileLocation } from '../../util/types';
3
2
  declare function LocalFileChooser(props: {
4
3
  location?: FileLocation;
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  import { FileLocation } from '../../util/types';
3
2
  declare function UrlChooser(props: {
4
3
  location?: FileLocation;
package/ui/Icons.d.ts CHANGED
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  import { SvgIconProps } from '@mui/material/SvgIcon';
3
2
  export declare function ContentCopy(props: SvgIconProps): JSX.Element;
4
3
  export declare function Indexing(props: SvgIconProps): JSX.Element;
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  import { TypographyProps } from '@mui/material';
3
2
  interface Props extends TypographyProps {
4
3
  message?: string;
package/ui/Logo.d.ts CHANGED
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  type LogoVariant = 'color' | 'black' | 'white';
3
2
  interface LogoProps {
4
3
  variant?: LogoVariant;
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  declare function PrerenderedCanvas(props: {
3
2
  width: number;
4
3
  height: number;
package/ui/ResizeBar.js CHANGED
@@ -42,7 +42,7 @@ const useStyles = (0, mui_1.makeStyles)()(theme => ({
42
42
  position: 'absolute',
43
43
  height: '100%',
44
44
  pointerEvents: 'none',
45
- background: theme.palette.divider,
45
+ background: theme.palette.action.disabled,
46
46
  width: 1,
47
47
  },
48
48
  hiddenTick: {
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  declare function ResizeHandle({ onDrag, vertical, flexbox, className: originalClassName, ...props }: {
3
2
  onDrag: (arg: number) => number | void;
4
3
  vertical?: boolean;
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  declare function ReturnToImportFormDialog({ model, handleClose, }: {
3
2
  model: {
4
3
  clearView: Function;
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  export declare function isHTML(str: string): boolean;
3
2
  export default function SanitizedHTML({ html }: {
4
3
  html: string;
@@ -53,6 +53,12 @@ function isHTML(str) {
53
53
  return full.test(str);
54
54
  }
55
55
  exports.isHTML = isHTML;
56
+ // note this is mocked during testing, see
57
+ // packages/__mocks__/@jbrowse/core/ui/SanitizedHTML something about dompurify
58
+ // behavior causes errors during tests, was seen in
59
+ // products/jbrowse-web/src/tests/Connection.test.tsx test (can delete mock to
60
+ // see)
61
+ //
56
62
  function SanitizedHTML({ html }) {
57
63
  const value = isHTML(html) ? html : (0, escape_html_1.default)(html);
58
64
  if (!added) {
package/ui/Snackbar.d.ts CHANGED
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  import { IAnyStateTreeNode } from 'mobx-state-tree';
3
2
  import { AbstractSessionModel, NotificationLevel, SnackAction } from '../util';
4
3
  type SnackbarMessage = [string, NotificationLevel, SnackAction];
package/ui/Tooltip.d.ts CHANGED
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  import { Feature } from '../util';
3
2
  declare const _default: ({ offsetX, offsetY, configuration, feature, timeout, }: {
4
3
  offsetX: number;
@@ -1,10 +1,9 @@
1
1
  import React from 'react';
2
2
  import { IBaseViewModel } from '../pluggableElementTypes/models';
3
- declare const ViewContainer: ({ view, onClose, onMinimize, style, children, }: {
3
+ declare const _default: ({ view, onClose, onMinimize, children, }: {
4
4
  view: IBaseViewModel;
5
5
  onClose: () => void;
6
6
  onMinimize: () => void;
7
- style?: React.CSSProperties | undefined;
8
7
  children: React.ReactNode;
9
8
  }) => JSX.Element;
10
- export default ViewContainer;
9
+ export default _default;
@@ -30,19 +30,19 @@ const react_1 = __importStar(require("react"));
30
30
  const material_1 = require("@mui/material");
31
31
  const mui_1 = require("tss-react/mui");
32
32
  const mobx_react_1 = require("mobx-react");
33
- const mobx_state_tree_1 = require("mobx-state-tree");
34
- const react_use_measure_1 = __importDefault(require("react-use-measure"));
35
33
  // icons
36
34
  const Close_1 = __importDefault(require("@mui/icons-material/Close"));
37
35
  const Minimize_1 = __importDefault(require("@mui/icons-material/Minimize"));
38
36
  const Add_1 = __importDefault(require("@mui/icons-material/Add"));
39
- const EditableTypography_1 = __importDefault(require("./EditableTypography"));
40
37
  const ViewMenu_1 = __importDefault(require("./ViewMenu"));
38
+ const util_1 = require("../util");
39
+ const ViewContainerTitle_1 = __importDefault(require("./ViewContainerTitle"));
41
40
  const useStyles = (0, mui_1.makeStyles)()(theme => ({
42
41
  viewContainer: {
43
42
  overflow: 'hidden',
44
43
  background: theme.palette.secondary.main,
45
44
  margin: theme.spacing(0.5),
45
+ padding: `0 ${theme.spacing(1)} ${theme.spacing(1)}`,
46
46
  },
47
47
  icon: {
48
48
  color: theme.palette.secondary.contrastText,
@@ -50,34 +50,11 @@ const useStyles = (0, mui_1.makeStyles)()(theme => ({
50
50
  grow: {
51
51
  flexGrow: 1,
52
52
  },
53
- input: {
54
- paddingBottom: 0,
55
- paddingTop: 2,
56
- },
57
- inputBase: {
58
- color: theme.palette.secondary.contrastText,
59
- },
60
- inputRoot: {
61
- '&:hover': {
62
- backgroundColor: theme.palette.secondary.light,
63
- },
64
- },
65
- inputFocused: {
66
- borderColor: theme.palette.primary.main,
67
- backgroundColor: theme.palette.secondary.light,
68
- },
69
53
  }));
70
- const ViewContainer = (0, mobx_react_1.observer)(function ({ view, onClose, onMinimize, style, children, }) {
71
- var _a;
54
+ exports.default = (0, mobx_react_1.observer)(function ({ view, onClose, onMinimize, children, }) {
72
55
  const { classes } = useStyles();
73
56
  const theme = (0, material_1.useTheme)();
74
- const padWidth = theme.spacing(1);
75
- const [ref, { width }] = (0, react_use_measure_1.default)();
76
- (0, react_1.useEffect)(() => {
77
- if (width && (0, mobx_state_tree_1.isAlive)(view)) {
78
- view.setWidth(width - Number.parseInt(padWidth, 10) * 2);
79
- }
80
- }, [padWidth, view, width]);
57
+ const ref = (0, util_1.useWidthSetter)(view, theme.spacing(1));
81
58
  const scrollRef = (0, react_1.useRef)(null);
82
59
  // scroll the view into view when first mounted
83
60
  // note that this effect will run only once, because of
@@ -86,23 +63,14 @@ const ViewContainer = (0, mobx_react_1.observer)(function ({ view, onClose, onMi
86
63
  var _a, _b;
87
64
  (_b = (_a = scrollRef.current) === null || _a === void 0 ? void 0 : _a.scrollIntoView) === null || _b === void 0 ? void 0 : _b.call(_a, { block: 'center' });
88
65
  }, []);
89
- return (react_1.default.createElement(material_1.Paper, { ref: ref, elevation: 12, className: classes.viewContainer, style: { ...style, padding: `0px ${padWidth} ${padWidth}` } },
66
+ return (react_1.default.createElement(material_1.Paper, { ref: ref, elevation: 12, className: classes.viewContainer },
90
67
  react_1.default.createElement("div", { ref: scrollRef, style: { display: 'flex' } },
91
68
  react_1.default.createElement(ViewMenu_1.default, { model: view, IconProps: { className: classes.icon } }),
92
69
  react_1.default.createElement("div", { className: classes.grow }),
93
- react_1.default.createElement(material_1.Tooltip, { title: "Rename view", arrow: true },
94
- react_1.default.createElement(EditableTypography_1.default, { value: view.displayName ||
95
- // @ts-expect-error
96
- `${((_a = view.assemblyNames) === null || _a === void 0 ? void 0 : _a.join(',')) || 'Untitled view'}${view.minimized ? ' (minimized)' : ''}`, setValue: val => view.setDisplayName(val), variant: "body2", classes: {
97
- input: classes.input,
98
- inputBase: classes.inputBase,
99
- inputRoot: classes.inputRoot,
100
- inputFocused: classes.inputFocused,
101
- } })),
70
+ react_1.default.createElement(ViewContainerTitle_1.default, { view: view }),
102
71
  react_1.default.createElement("div", { className: classes.grow }),
103
72
  react_1.default.createElement(material_1.IconButton, { "data-testid": "minimize_view", onClick: onMinimize }, view.minimized ? (react_1.default.createElement(Add_1.default, { className: classes.icon, fontSize: "small" })) : (react_1.default.createElement(Minimize_1.default, { className: classes.icon, fontSize: "small" }))),
104
73
  react_1.default.createElement(material_1.IconButton, { "data-testid": "close_view", onClick: onClose },
105
74
  react_1.default.createElement(Close_1.default, { className: classes.icon, fontSize: "small" }))),
106
75
  react_1.default.createElement(material_1.Paper, null, children)));
107
76
  });
108
- exports.default = ViewContainer;
@@ -0,0 +1,5 @@
1
+ import { IBaseViewModel } from '../pluggableElementTypes';
2
+ declare const _default: ({ view, }: {
3
+ view: IBaseViewModel;
4
+ }) => JSX.Element;
5
+ export default _default;
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const react_1 = __importDefault(require("react"));
7
+ const material_1 = require("@mui/material");
8
+ const mui_1 = require("tss-react/mui");
9
+ const mobx_react_1 = require("mobx-react");
10
+ // locals
11
+ const EditableTypography_1 = __importDefault(require("./EditableTypography"));
12
+ const useStyles = (0, mui_1.makeStyles)()(theme => ({
13
+ input: {
14
+ paddingBottom: 0,
15
+ paddingTop: 2,
16
+ },
17
+ inputBase: {
18
+ color: theme.palette.secondary.contrastText,
19
+ },
20
+ inputRoot: {
21
+ '&:hover': {
22
+ backgroundColor: theme.palette.secondary.light,
23
+ },
24
+ },
25
+ inputFocused: {
26
+ borderColor: theme.palette.primary.main,
27
+ backgroundColor: theme.palette.secondary.light,
28
+ },
29
+ }));
30
+ exports.default = (0, mobx_react_1.observer)(function ViewContainerTitle({ view, }) {
31
+ var _a;
32
+ const { classes } = useStyles();
33
+ return (react_1.default.createElement(material_1.Tooltip, { title: "Rename view", arrow: true },
34
+ react_1.default.createElement(EditableTypography_1.default, { value: view.displayName ||
35
+ // @ts-expect-error
36
+ `${((_a = view.assemblyNames) === null || _a === void 0 ? void 0 : _a.join(',')) || 'Untitled view'}${view.minimized ? ' (minimized)' : ''}`, setValue: val => view.setDisplayName(val), variant: "body2", classes: {
37
+ input: classes.input,
38
+ inputBase: classes.inputBase,
39
+ inputRoot: classes.inputRoot,
40
+ inputFocused: classes.inputFocused,
41
+ } })));
42
+ });
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  import { NotificationLevel, SnackAction, SessionWithDrawerWidgets } from '../util';
3
2
  import { MenuItem as JBMenuItem } from './Menu';
4
3
  type SnackbarMessage = [string, NotificationLevel, SnackAction];
package/ui/ViewMenu.d.ts CHANGED
@@ -1,9 +1,8 @@
1
- /// <reference types="react" />
2
1
  import { SvgIconProps, IconButtonProps as IconButtonPropsType } from '@mui/material';
3
2
  import { IBaseViewModel } from '../pluggableElementTypes/models';
4
3
  declare const ViewMenu: ({ model, IconButtonProps, IconProps, }: {
5
4
  model: IBaseViewModel;
6
- IconButtonProps?: IconButtonPropsType<"button", {}> | undefined;
5
+ IconButtonProps?: IconButtonPropsType | undefined;
7
6
  IconProps: SvgIconProps;
8
7
  }) => JSX.Element;
9
8
  export default ViewMenu;
package/ui/ViewPanel.d.ts CHANGED
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  import { AbstractViewModel, NotificationLevel, SessionWithDrawerWidgets, SnackAction } from '../util';
3
2
  import { MenuItem as JBMenuItem } from './Menu';
4
3
  type SnackbarMessage = [string, NotificationLevel, SnackAction];
@@ -13,5 +13,5 @@ declare function Ce(r: any): e.FunctionComponentElement<any>;
13
13
  declare function me(r: any): e.FunctionComponentElement<any>;
14
14
  declare function pe(r: any): e.FunctionComponentElement<any>;
15
15
  declare function X(e: any): void;
16
- import e from "react";
16
+ import e from 'react';
17
17
  export { Ne as HexColorInput, J as HexColorPicker, oe as HslColorPicker, le as HslStringColorPicker, Z as HslaColorPicker, re as HslaStringColorPicker, de as HsvColorPicker, he as HsvStringColorPicker, se as HsvaColorPicker, ue as HsvaStringColorPicker, _e as RgbColorPicker, Ce as RgbStringColorPicker, me as RgbaColorPicker, pe as RgbaStringColorPicker, X as setNonce };
package/ui/theme.js CHANGED
@@ -246,11 +246,6 @@ function createDefaultProps(theme) {
246
246
  transitionDuration: 0,
247
247
  },
248
248
  },
249
- MuiMenuList: {
250
- defaultProps: {
251
- dense: true,
252
- },
253
- },
254
249
  MuiMenuItem: {
255
250
  defaultProps: {
256
251
  dense: true,
@@ -266,8 +261,6 @@ function createDefaultProps(theme) {
266
261
  styleOverrides: {
267
262
  // the default link color uses theme.palette.primary.main which is
268
263
  // very bad with dark mode+midnight primary
269
- //
270
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
271
264
  root: ({ theme }) => ({
272
265
  color: theme.palette.text.secondary,
273
266
  }),
@@ -282,10 +275,7 @@ function createDefaultProps(theme) {
282
275
  // keeps the forest-green checkbox by default but for darkmode, uses
283
276
  // a text-like coloring to ensure contrast
284
277
  // xref https://stackoverflow.com/a/72546130/2129219
285
- //
286
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
287
- root: (props) => {
288
- const { theme } = props;
278
+ root: ({ theme }) => {
289
279
  return theme.palette.mode === 'dark'
290
280
  ? {
291
281
  color: theme.palette.text.secondary,
@@ -306,10 +296,7 @@ function createDefaultProps(theme) {
306
296
  // keeps the forest-green checkbox by default but for darkmode, uses
307
297
  // a text-like coloring to ensure contrast
308
298
  // xref https://stackoverflow.com/a/72546130/2129219
309
- //
310
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
311
- root: (props) => {
312
- const { theme } = props;
299
+ root: ({ theme }) => {
313
300
  return theme.palette.mode === 'dark'
314
301
  ? {
315
302
  color: theme.palette.text.secondary,
@@ -331,9 +318,7 @@ function createDefaultProps(theme) {
331
318
  // a text-like coloring to ensure contrast
332
319
  // xref https://stackoverflow.com/a/72546130/2129219
333
320
  //
334
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
335
- root: (props) => {
336
- const { theme } = props;
321
+ root: ({ theme }) => {
337
322
  return theme.palette.mode === 'dark'
338
323
  ? {
339
324
  color: theme.palette.text.secondary,
package/util/index.d.ts CHANGED
@@ -1,8 +1,10 @@
1
+ /// <reference types="react" />
1
2
  import PluginManager from '../PluginManager';
2
- import { IAnyStateTreeNode, IStateTreeNode } from 'mobx-state-tree';
3
+ import { IAnyStateTreeNode, IStateTreeNode, Instance } from 'mobx-state-tree';
3
4
  import { IReactionPublic, IReactionOptions } from 'mobx';
4
5
  import { Feature } from './simpleFeature';
5
6
  import { AssemblyManager, Region, TypeTestedByPredicate } from './types';
7
+ import { Region as MUIRegion } from './types/mst';
6
8
  import { BaseBlock } from './blockTypes';
7
9
  export * from './types';
8
10
  export * from './aborting';
@@ -14,12 +16,14 @@ export * from './offscreenCanvasUtils';
14
16
  export declare const inDevelopment: boolean;
15
17
  export declare const inProduction: boolean;
16
18
  export declare function useDebounce<T>(value: T, delay: number): T;
19
+ export declare function useWidthSetter(view: {
20
+ setWidth: (arg: number) => void;
21
+ }, padding: string): import("react").RefObject<HTMLDivElement>;
17
22
  export declare function useDebouncedCallback<T>(callback: (...args: T[]) => void, wait?: number): (...args: T[]) => void;
18
23
  /** find the first node in the hierarchy that matches the given predicate */
19
24
  export declare function findParentThat(node: IAnyStateTreeNode, predicate: (thing: IAnyStateTreeNode) => boolean): IAnyStateTreeNode;
20
25
  export declare function springAnimate(fromValue: number, toValue: number, setValue: (value: number) => void, onFinish?: () => void, precision?: number, tension?: number, friction?: number): (() => void)[];
21
- /** find the first node in the hierarchy that matches the given 'is' typescript type guard predicate */
22
- export declare function findParentThatIs<PREDICATE extends (thing: IAnyStateTreeNode) => boolean>(node: IAnyStateTreeNode, predicate: PREDICATE): TypeTestedByPredicate<PREDICATE> & IAnyStateTreeNode;
26
+ export declare function findParentThatIs<T extends (a: IAnyStateTreeNode) => boolean>(node: IAnyStateTreeNode, predicate: T): TypeTestedByPredicate<T> & IAnyStateTreeNode;
23
27
  /** get the current JBrowse session model, starting at any node in the state tree */
24
28
  export declare function getSession(node: IAnyStateTreeNode): import("./types").AbstractSessionModel & IAnyStateTreeNode;
25
29
  /** get the state model of the view in the state tree that contains the given node */
@@ -162,6 +166,7 @@ export declare function iterMap<T, U>(iter: Iterable<T>, func: (arg: T) => U, si
162
166
  * Otherwise, findLastIndex returns -1.
163
167
  */
164
168
  export declare function findLastIndex<T>(array: Array<T>, predicate: (value: T, index: number, obj: T[]) => boolean): number;
169
+ export declare function findLast<T>(array: Array<T>, predicate: (value: T, index: number, obj: T[]) => boolean): T | undefined;
165
170
  /**
166
171
  * makes a mobx reaction with the given functions, that calls actions on the
167
172
  * model for each stage of execution, and to abort the reaction function when
@@ -180,7 +185,7 @@ export declare function findLastIndex<T>(array: Array<T>, predicate: (value: T,
180
185
  * @param errorFunction -
181
186
  */
182
187
  export declare function makeAbortableReaction<T, U, V>(self: T, dataFunction: (arg: T) => U, asyncReactionFunction: (arg: U | undefined, signal: AbortSignal, model: T, handle: IReactionPublic) => Promise<V>, reactionOptions: IReactionOptions, startedFunction: (aborter: AbortController) => void, successFunction: (arg: V) => void, errorFunction: (err: unknown) => void): void;
183
- export declare function renameRegionIfNeeded(refNameMap: Record<string, string>, region: Region): Region & {
188
+ export declare function renameRegionIfNeeded(refNameMap: Record<string, string>, region: Region | Instance<typeof MUIRegion>): Region & {
184
189
  originalRefName?: string;
185
190
  };
186
191
  export declare function renameRegionsIfNeeded<ARGTYPE extends {
package/util/index.js CHANGED
@@ -17,8 +17,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
17
17
  return (mod && mod.__esModule) ? mod : { "default": mod };
18
18
  };
19
19
  Object.defineProperty(exports, "__esModule", { value: true });
20
- exports.getBpDisplayStr = exports.supportedIndexingAdapters = exports.bytesForRegions = exports.objectHash = exports.hashCode = exports.updateStatus = exports.generateCodonTable = exports.defaultCodonTable = exports.defaultStops = exports.defaultStarts = exports.measureText = exports.rIC = exports.blobToDataURL = exports.complement = exports.reverse = exports.revcom = exports.isElectron = exports.stringify = exports.shorten = exports.minmax = exports.renameRegionsIfNeeded = exports.renameRegionIfNeeded = exports.makeAbortableReaction = exports.findLastIndex = exports.iterMap = exports.bpSpanPx = exports.featureSpanPx = exports.cartesianToPolar = exports.polarToCartesian = exports.degToRad = exports.radToDeg = exports.bpToPx = exports.clamp = exports.compareLocStrings = exports.compareLocs = exports.parseLocString = exports.parseLocStringOneBased = exports.assembleLocStringFast = exports.assembleLocString = exports.getContainingDisplay = exports.getContainingTrack = exports.getContainingView = exports.getSession = exports.findParentThatIs = exports.springAnimate = exports.findParentThat = exports.useDebouncedCallback = exports.useDebounce = exports.inProduction = exports.inDevelopment = void 0;
21
- exports.isFeature = exports.SimpleFeature = exports.avg = exports.sum = exports.min = exports.max = exports.localStorageSetItem = exports.localStorageGetItem = exports.getEnv = exports.measureGridWidth = exports.getStr = exports.getUriLink = exports.useLocalStorage = exports.getLayoutId = exports.getViewParams = exports.getTickDisplayStr = exports.toLocale = void 0;
20
+ exports.bytesForRegions = exports.objectHash = exports.hashCode = exports.updateStatus = exports.generateCodonTable = exports.defaultCodonTable = exports.defaultStops = exports.defaultStarts = exports.measureText = exports.rIC = exports.blobToDataURL = exports.complement = exports.reverse = exports.revcom = exports.isElectron = exports.stringify = exports.shorten = exports.minmax = exports.renameRegionsIfNeeded = exports.renameRegionIfNeeded = exports.makeAbortableReaction = exports.findLast = exports.findLastIndex = exports.iterMap = exports.bpSpanPx = exports.featureSpanPx = exports.cartesianToPolar = exports.polarToCartesian = exports.degToRad = exports.radToDeg = exports.bpToPx = exports.clamp = exports.compareLocStrings = exports.compareLocs = exports.parseLocString = exports.parseLocStringOneBased = exports.assembleLocStringFast = exports.assembleLocString = exports.getContainingDisplay = exports.getContainingTrack = exports.getContainingView = exports.getSession = exports.findParentThatIs = exports.springAnimate = exports.findParentThat = exports.useDebouncedCallback = exports.useWidthSetter = exports.useDebounce = exports.inProduction = exports.inDevelopment = void 0;
21
+ exports.isFeature = exports.SimpleFeature = exports.avg = exports.sum = exports.min = exports.max = exports.localStorageSetItem = exports.localStorageGetItem = exports.getEnv = exports.measureGridWidth = exports.getStr = exports.getUriLink = exports.useLocalStorage = exports.getLayoutId = exports.getViewParams = exports.getTickDisplayStr = exports.toLocale = exports.getBpDisplayStr = exports.supportedIndexingAdapters = void 0;
22
22
  /* eslint-disable @typescript-eslint/no-explicit-any */
23
23
  const react_1 = require("react");
24
24
  const is_object_1 = __importDefault(require("is-object"));
@@ -27,6 +27,7 @@ const mobx_1 = require("mobx");
27
27
  const types_1 = require("./types");
28
28
  const aborting_1 = require("./aborting");
29
29
  const types_2 = require("./types");
30
+ const useMeasure_1 = __importDefault(require("@jbrowse/core/util/useMeasure"));
30
31
  __exportStar(require("./types"), exports);
31
32
  __exportStar(require("./aborting"), exports);
32
33
  __exportStar(require("./when"), exports);
@@ -51,6 +52,20 @@ function useDebounce(value, delay) {
51
52
  return debouncedValue;
52
53
  }
53
54
  exports.useDebounce = useDebounce;
55
+ // used in ViewContainer files to get the width
56
+ function useWidthSetter(view, padding) {
57
+ const [ref, { width }] = (0, useMeasure_1.default)();
58
+ (0, react_1.useEffect)(() => {
59
+ if (width && (0, mobx_state_tree_1.isAlive)(view)) {
60
+ // sets after a requestAnimationFrame
61
+ // https://stackoverflow.com/a/58701523/2129219
62
+ // avoids ResizeObserver loop error being shown during development
63
+ requestAnimationFrame(() => view.setWidth(width - Number.parseInt(padding, 10) * 2));
64
+ }
65
+ }, [padding, view, width]);
66
+ return ref;
67
+ }
68
+ exports.useWidthSetter = useWidthSetter;
54
69
  // https://stackoverflow.com/questions/56283920/
55
70
  function useDebouncedCallback(callback, wait = 400) {
56
71
  // track args & timeout handle between calls
@@ -144,7 +159,7 @@ function springAnimate(fromValue, toValue, setValue, onFinish = () => { }, preci
144
159
  ];
145
160
  }
146
161
  exports.springAnimate = springAnimate;
147
- /** find the first node in the hierarchy that matches the given 'is' typescript type guard predicate */
162
+ // find the first node in the hierarchy that matches the given 'is' typescript type guard predicate
148
163
  function findParentThatIs(node, predicate) {
149
164
  return findParentThat(node, predicate);
150
165
  }
@@ -519,6 +534,16 @@ function findLastIndex(array, predicate) {
519
534
  return -1;
520
535
  }
521
536
  exports.findLastIndex = findLastIndex;
537
+ function findLast(array, predicate) {
538
+ let l = array.length;
539
+ while (l--) {
540
+ if (predicate(array[l], l, array)) {
541
+ return array[l];
542
+ }
543
+ }
544
+ return undefined;
545
+ }
546
+ exports.findLast = findLast;
522
547
  /**
523
548
  * makes a mobx reaction with the given functions, that calls actions on the
524
549
  * model for each stage of execution, and to abort the reaction function when
@@ -598,8 +623,7 @@ function renameRegionIfNeeded(refNameMap, region) {
598
623
  if (region && (refNameMap === null || refNameMap === void 0 ? void 0 : refNameMap[region.refName])) {
599
624
  // clone the region so we don't modify it
600
625
  region = (0, mobx_state_tree_1.isStateTreeNode)(region)
601
- ? // @ts-expect-error
602
- { ...(0, mobx_state_tree_1.getSnapshot)(region) }
626
+ ? { ...(0, mobx_state_tree_1.getSnapshot)(region) }
603
627
  : { ...region };
604
628
  // modify it directly in the container
605
629
  const newRef = refNameMap[region.refName];
@@ -616,7 +640,7 @@ async function renameRegionsIfNeeded(assemblyManager, args) {
616
640
  throw new Error('sessionId is required');
617
641
  }
618
642
  const assemblyNames = regions.map(region => region.assemblyName);
619
- const assemblyMaps = Object.fromEntries(await Promise.all(assemblyNames.map(async (assemblyName) => {
643
+ const assemblyMaps = Object.fromEntries(await Promise.all([...new Set(assemblyNames)].map(async (assemblyName) => {
620
644
  return [
621
645
  assemblyName,
622
646
  await assemblyManager.getRefNameMapForAdapter(adapterConfig, assemblyName, args),
@@ -1,6 +1,8 @@
1
1
  import { GenericFilehandle, Fetcher } from 'generic-filehandle';
2
- import { FileLocation } from '../types';
2
+ import { FileLocation, UriLocation } from '../types';
3
3
  import PluginManager from '../../PluginManager';
4
+ /** if a UriLocation has a baseUri, resolves its uri with respect to that base */
5
+ export declare function resolveUriLocation(location: UriLocation): UriLocation;
4
6
  export declare function openLocation(location: FileLocation, pluginManager?: PluginManager): GenericFilehandle;
5
7
  export declare function getFetcher(location: FileLocation, pluginManager?: PluginManager): Fetcher;
6
8
  export { RemoteFileWithRangeCache } from './RemoteFileWithRangeCache';