@jbrowse/core 2.15.0 → 2.15.2

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.
@@ -0,0 +1,9 @@
1
+ import React from 'react';
2
+ export default function BaseTooltip({ clientPoint: clientPointCoords, children, placement, }: {
3
+ placement?: 'left' | 'right';
4
+ clientPoint?: {
5
+ x: number;
6
+ y: number;
7
+ };
8
+ children: React.ReactNode;
9
+ }): React.JSX.Element;
@@ -0,0 +1,53 @@
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
+ exports.default = BaseTooltip;
7
+ const react_1 = __importDefault(require("react"));
8
+ const mui_1 = require("tss-react/mui");
9
+ const material_1 = require("@mui/material");
10
+ const react_2 = require("@floating-ui/react");
11
+ function round(value) {
12
+ return Math.round(value * 1e5) / 1e5;
13
+ }
14
+ const useStyles = (0, mui_1.makeStyles)()(theme => ({
15
+ // these styles come from
16
+ // https://github.com/mui-org/material-ui/blob/master/packages/material-ui/src/Tooltip/Tooltip.js
17
+ tooltip: {
18
+ position: 'absolute',
19
+ pointerEvents: 'none',
20
+ backgroundColor: (0, material_1.alpha)(theme.palette.grey[700], 0.9),
21
+ borderRadius: theme.shape.borderRadius,
22
+ color: theme.palette.common.white,
23
+ fontFamily: theme.typography.fontFamily,
24
+ padding: '4px 8px',
25
+ fontSize: theme.typography.pxToRem(12),
26
+ lineHeight: `${round(14 / 10)}em`,
27
+ maxWidth: 300,
28
+ wordWrap: 'break-word',
29
+ },
30
+ }));
31
+ function BaseTooltip({ clientPoint: clientPointCoords, children, placement = 'right', }) {
32
+ var _a, _b;
33
+ const theme = (0, material_1.useTheme)();
34
+ const popperTheme = (_a = theme.components) === null || _a === void 0 ? void 0 : _a.MuiPopper;
35
+ const { classes } = useStyles();
36
+ const { refs, floatingStyles, context } = (0, react_2.useFloating)({
37
+ placement,
38
+ strategy: 'fixed',
39
+ });
40
+ const clientPoint = (0, react_2.useClientPoint)(context, clientPointCoords);
41
+ const { getFloatingProps } = (0, react_2.useInteractions)([clientPoint]);
42
+ return (react_1.default.createElement(material_1.Portal, { container: (_b = popperTheme === null || popperTheme === void 0 ? void 0 : popperTheme.defaultProps) === null || _b === void 0 ? void 0 : _b.container },
43
+ react_1.default.createElement("div", { className: classes.tooltip, ref: refs.setFloating, style: {
44
+ ...floatingStyles,
45
+ zIndex: 100000,
46
+ // workaround for tooltips flashing at top left corner of screen
47
+ // when first appearing
48
+ visibility: floatingStyles.transform === 'translate(0px, 0px)'
49
+ ? 'hidden'
50
+ : undefined,
51
+ pointerEvents: 'none',
52
+ }, ...getFloatingProps() }, children)));
53
+ }
@@ -98,7 +98,9 @@ function CascadingMenuList({ onMenuItemClick, closeAfterItemClick, menuItems, ..
98
98
  };
99
99
  }
100
100
  const hasIcon = menuItems.some(m => 'icon' in m && m.icon);
101
- return (react_1.default.createElement(react_1.default.Fragment, null, menuItems.map((item, idx) => {
101
+ return (react_1.default.createElement(react_1.default.Fragment, null, menuItems
102
+ .sort((a, b) => (b.priority || 0) - (a.priority || 0))
103
+ .map((item, idx) => {
102
104
  return 'subMenu' in item ? (react_1.default.createElement(CascadingSubmenu, { key: `subMenu-${item.label}-${idx}`, popupId: `subMenu-${item.label}`, title: item.label, Icon: item.icon, inset: hasIcon && !item.icon, onMenuItemClick: onMenuItemClick, menuItems: item.subMenu },
103
105
  react_1.default.createElement(CascadingMenuList, { ...props, closeAfterItemClick: closeAfterItemClick, onMenuItemClick: onMenuItemClick, menuItems: item.subMenu }))) : item.type === 'divider' ? (react_1.default.createElement(material_1.Divider, { key: `divider-${JSON.stringify(item)}-${idx}`, component: "li" })) : item.type === 'subHeader' ? (react_1.default.createElement(material_1.ListSubheader, { key: `subHeader-${item.label}-${idx}` }, item.label)) : (react_1.default.createElement(CascadingMenuItem, { key: `${item.label}-${idx}`, closeAfterItemClick: closeAfterItemClick, onClick: 'onClick' in item ? handleClick(item.onClick) : undefined, disabled: Boolean(item.disabled) },
104
106
  item.icon ? (react_1.default.createElement(material_1.ListItemIcon, null,
package/util/index.d.ts CHANGED
@@ -384,13 +384,14 @@ export declare function notEmpty<T>(value: T | null | undefined): value is T;
384
384
  export declare function mergeIntervals<T extends {
385
385
  start: number;
386
386
  end: number;
387
- }>(intervals: T[], w?: number): (T | undefined)[];
387
+ }>(intervals: T[], w?: number): T[];
388
388
  interface BasicFeature {
389
389
  end: number;
390
390
  start: number;
391
391
  refName: string;
392
+ assemblyName?: string;
392
393
  }
393
- export declare function gatherOverlaps(regions: BasicFeature[]): (BasicFeature | undefined)[];
394
+ export declare function gatherOverlaps(regions: BasicFeature[], w?: number): BasicFeature[];
394
395
  export declare function stripAlpha(str: string): string;
395
396
  export declare function getStrokeProps(str: string): {
396
397
  strokeOpacity: number;
package/util/index.js CHANGED
@@ -1169,7 +1169,8 @@ function mergeIntervals(intervals, w = 5000) {
1169
1169
  }
1170
1170
  return stack;
1171
1171
  }
1172
- function gatherOverlaps(regions) {
1172
+ // returns new array non-overlapping features
1173
+ function gatherOverlaps(regions, w = 5000) {
1173
1174
  const memo = {};
1174
1175
  for (const x of regions) {
1175
1176
  if (!memo[x.refName]) {
@@ -1177,7 +1178,7 @@ function gatherOverlaps(regions) {
1177
1178
  }
1178
1179
  memo[x.refName].push(x);
1179
1180
  }
1180
- return Object.values(memo).flatMap(group => mergeIntervals(group.sort((a, b) => a.start - b.start)));
1181
+ return Object.values(memo).flatMap(group => mergeIntervals(group.sort((a, b) => a.start - b.start), w));
1181
1182
  }
1182
1183
  function stripAlpha(str) {
1183
1184
  const c = (0, colord_1.colord)(str);
@@ -121,8 +121,8 @@ export interface SessionWithWidgets extends AbstractSessionModel {
121
121
  minimized: boolean;
122
122
  visibleWidget?: Widget;
123
123
  widgets: Map<string | number, Widget>;
124
- hideAllWidgets: () => void;
125
124
  activeWidgets: Map<string | number, Widget>;
125
+ hideAllWidgets: () => void;
126
126
  addWidget(typeName: string, id: string, initialState?: Record<string, unknown>, configuration?: {
127
127
  type: string;
128
128
  }): Widget;