@jbrowse/plugin-linear-genome-view 1.6.9 → 1.7.3

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 (111) hide show
  1. package/dist/BaseLinearDisplay/components/BaseLinearDisplay.d.ts +13 -13
  2. package/dist/BaseLinearDisplay/components/BaseLinearDisplay.js +232 -0
  3. package/dist/BaseLinearDisplay/components/Block.d.ts +15 -15
  4. package/dist/BaseLinearDisplay/components/Block.js +86 -0
  5. package/dist/BaseLinearDisplay/components/LinearBlocks.d.ts +12 -12
  6. package/dist/BaseLinearDisplay/components/LinearBlocks.js +110 -0
  7. package/dist/BaseLinearDisplay/components/ServerSideRenderedBlockContent.d.ts +4 -4
  8. package/dist/BaseLinearDisplay/components/ServerSideRenderedBlockContent.js +192 -0
  9. package/dist/BaseLinearDisplay/index.d.ts +5 -5
  10. package/dist/BaseLinearDisplay/index.js +41 -0
  11. package/dist/BaseLinearDisplay/models/BaseLinearDisplayModel.d.ts +227 -230
  12. package/dist/BaseLinearDisplay/models/BaseLinearDisplayModel.js +763 -0
  13. package/dist/BaseLinearDisplay/models/baseLinearDisplayConfigSchema.d.ts +1 -1
  14. package/dist/BaseLinearDisplay/models/baseLinearDisplayConfigSchema.js +24 -0
  15. package/dist/BaseLinearDisplay/models/serverSideRenderedBlock.d.ts +96 -96
  16. package/dist/BaseLinearDisplay/models/serverSideRenderedBlock.js +328 -0
  17. package/dist/LinearBareDisplay/configSchema.d.ts +2 -2
  18. package/dist/LinearBareDisplay/configSchema.js +19 -0
  19. package/dist/LinearBareDisplay/index.d.ts +2 -2
  20. package/dist/LinearBareDisplay/index.js +21 -0
  21. package/dist/LinearBareDisplay/index.test.js +33 -0
  22. package/dist/LinearBareDisplay/model.d.ts +192 -192
  23. package/dist/LinearBareDisplay/model.js +44 -0
  24. package/dist/LinearBasicDisplay/components/SetMaxHeight.d.ts +10 -10
  25. package/dist/LinearBasicDisplay/components/SetMaxHeight.js +94 -0
  26. package/dist/LinearBasicDisplay/configSchema.d.ts +2 -2
  27. package/dist/LinearBasicDisplay/configSchema.js +25 -0
  28. package/dist/LinearBasicDisplay/index.d.ts +2 -2
  29. package/dist/LinearBasicDisplay/index.js +23 -0
  30. package/dist/LinearBasicDisplay/model.d.ts +213 -213
  31. package/dist/LinearBasicDisplay/model.js +162 -0
  32. package/dist/LinearGenomeView/components/CenterLine.d.ts +14 -14
  33. package/dist/LinearGenomeView/components/CenterLine.js +80 -0
  34. package/dist/LinearGenomeView/components/ExportSvgDialog.d.ts +6 -6
  35. package/dist/LinearGenomeView/components/ExportSvgDialog.js +137 -0
  36. package/dist/LinearGenomeView/components/Header.d.ts +7 -7
  37. package/dist/LinearGenomeView/components/Header.js +144 -0
  38. package/dist/LinearGenomeView/components/HelpDialog.d.ts +5 -5
  39. package/dist/LinearGenomeView/components/HelpDialog.js +48 -0
  40. package/dist/LinearGenomeView/components/ImportForm.d.ts +7 -7
  41. package/dist/LinearGenomeView/components/ImportForm.js +330 -0
  42. package/dist/LinearGenomeView/components/LinearGenomeView.d.ts +7 -7
  43. package/dist/LinearGenomeView/components/LinearGenomeView.js +129 -0
  44. package/dist/LinearGenomeView/components/LinearGenomeView.test.js +234 -0
  45. package/dist/LinearGenomeView/components/LinearGenomeViewSvg.d.ts +4 -4
  46. package/dist/LinearGenomeView/components/LinearGenomeViewSvg.js +349 -0
  47. package/dist/LinearGenomeView/components/MiniControls.d.ts +6 -6
  48. package/dist/LinearGenomeView/components/MiniControls.js +83 -0
  49. package/dist/LinearGenomeView/components/OverviewRubberBand.d.ts +22 -22
  50. package/dist/LinearGenomeView/components/OverviewRubberBand.js +310 -0
  51. package/dist/LinearGenomeView/components/OverviewScaleBar.d.ts +132 -124
  52. package/dist/LinearGenomeView/components/OverviewScaleBar.js +403 -0
  53. package/dist/LinearGenomeView/components/RefNameAutocomplete.d.ts +21 -21
  54. package/dist/LinearGenomeView/components/RefNameAutocomplete.js +331 -0
  55. package/dist/LinearGenomeView/components/RubberBand.d.ts +9 -20
  56. package/dist/LinearGenomeView/components/RubberBand.js +309 -0
  57. package/dist/LinearGenomeView/components/Ruler.d.ts +27 -27
  58. package/dist/LinearGenomeView/components/Ruler.js +101 -0
  59. package/dist/LinearGenomeView/components/ScaleBar.d.ts +401 -401
  60. package/dist/LinearGenomeView/components/ScaleBar.js +184 -0
  61. package/dist/LinearGenomeView/components/ScaleBar.test.js +180 -0
  62. package/dist/LinearGenomeView/components/SearchBox.d.ts +8 -8
  63. package/dist/LinearGenomeView/components/SearchBox.js +201 -0
  64. package/dist/LinearGenomeView/components/SearchResultsDialog.d.ts +8 -8
  65. package/dist/LinearGenomeView/components/SearchResultsDialog.js +159 -0
  66. package/dist/LinearGenomeView/components/SequenceDialog.d.ts +8 -8
  67. package/dist/LinearGenomeView/components/SequenceDialog.js +304 -0
  68. package/dist/LinearGenomeView/components/TrackContainer.d.ts +9 -9
  69. package/dist/LinearGenomeView/components/TrackContainer.js +179 -0
  70. package/dist/LinearGenomeView/components/TrackLabel.d.ts +44 -44
  71. package/dist/LinearGenomeView/components/TrackLabel.js +165 -0
  72. package/dist/LinearGenomeView/components/TracksContainer.d.ts +10 -10
  73. package/dist/LinearGenomeView/components/TracksContainer.js +214 -0
  74. package/dist/LinearGenomeView/components/VerticalGuides.d.ts +9 -9
  75. package/dist/LinearGenomeView/components/VerticalGuides.js +116 -0
  76. package/dist/LinearGenomeView/components/ZoomControls.d.ts +7 -7
  77. package/dist/LinearGenomeView/components/ZoomControls.js +92 -0
  78. package/dist/LinearGenomeView/components/util.d.ts +2 -2
  79. package/dist/LinearGenomeView/components/util.js +16 -0
  80. package/dist/LinearGenomeView/index.d.ts +292 -292
  81. package/dist/LinearGenomeView/index.js +1418 -0
  82. package/dist/LinearGenomeView/index.test.js +1170 -0
  83. package/dist/LinearGenomeView/util.d.ts +14 -14
  84. package/dist/LinearGenomeView/util.js +93 -0
  85. package/dist/LinearGenomeView/util.test.js +78 -0
  86. package/dist/index.d.ts +565 -565
  87. package/dist/index.js +293 -6
  88. package/package.json +6 -9
  89. package/src/BaseLinearDisplay/models/BaseLinearDisplayModel.tsx +2 -0
  90. package/src/BaseLinearDisplay/models/serverSideRenderedBlock.ts +10 -8
  91. package/src/LinearBasicDisplay/components/SetMaxHeight.tsx +1 -1
  92. package/src/LinearBasicDisplay/model.ts +17 -18
  93. package/src/LinearGenomeView/components/Header.tsx +1 -1
  94. package/src/LinearGenomeView/components/ImportForm.tsx +10 -4
  95. package/src/LinearGenomeView/components/LinearGenomeView.test.js +1 -0
  96. package/src/LinearGenomeView/components/OverviewScaleBar.tsx +2 -2
  97. package/src/LinearGenomeView/components/RubberBand.tsx +14 -24
  98. package/src/LinearGenomeView/components/ScaleBar.test.tsx +1 -0
  99. package/src/LinearGenomeView/components/ScaleBar.tsx +3 -6
  100. package/src/LinearGenomeView/components/SequenceDialog.tsx +1 -1
  101. package/src/LinearGenomeView/components/TrackLabel.tsx +1 -1
  102. package/src/LinearGenomeView/components/__snapshots__/LinearGenomeView.test.js.snap +0 -4
  103. package/src/LinearGenomeView/index.tsx +2 -3
  104. package/dist/LinearBareDisplay/index.test.d.ts +0 -1
  105. package/dist/LinearGenomeView/components/LinearGenomeView.test.d.ts +0 -1
  106. package/dist/plugin-linear-genome-view.cjs.development.js +0 -8121
  107. package/dist/plugin-linear-genome-view.cjs.development.js.map +0 -1
  108. package/dist/plugin-linear-genome-view.cjs.production.min.js +0 -2
  109. package/dist/plugin-linear-genome-view.cjs.production.min.js.map +0 -1
  110. package/dist/plugin-linear-genome-view.esm.js +0 -8105
  111. package/dist/plugin-linear-genome-view.esm.js.map +0 -1
@@ -1,44 +1,44 @@
1
- import React from 'react';
2
- declare const _default: React.ForwardRefExoticComponent<{
3
- track: import("mobx-state-tree").ModelInstanceTypeProps<{
4
- id: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
5
- type: import("mobx-state-tree").ISimpleType<string>;
6
- configuration: import("mobx-state-tree").ITypeUnion<any, any, any>;
7
- displays: import("mobx-state-tree").IArrayType<import("mobx-state-tree").IAnyType>;
8
- }> & {
9
- readonly rpcSessionId: any;
10
- readonly name: any;
11
- readonly textSearchAdapter: any;
12
- readonly adapterType: any;
13
- readonly viewMenuActions: import("@jbrowse/core/ui").MenuItem[];
14
- readonly canConfigure: any;
15
- } & {
16
- activateConfigurationUI(): void;
17
- showDisplay(displayId: string, initialSnapshot?: {}): void;
18
- hideDisplay(displayId: string): number;
19
- replaceDisplay(oldDisplayId: string, newDisplayId: string, initialSnapshot?: {}): void;
20
- } & {
21
- trackMenuItems(): import("@jbrowse/core/ui").MenuItem[];
22
- } & import("mobx-state-tree").IStateTreeNode<import("mobx-state-tree").IModelType<{
23
- id: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
24
- type: import("mobx-state-tree").ISimpleType<string>;
25
- configuration: import("mobx-state-tree").ITypeUnion<any, any, any>;
26
- displays: import("mobx-state-tree").IArrayType<import("mobx-state-tree").IAnyType>;
27
- }, {
28
- readonly rpcSessionId: any;
29
- readonly name: any;
30
- readonly textSearchAdapter: any;
31
- readonly adapterType: any;
32
- readonly viewMenuActions: import("@jbrowse/core/ui").MenuItem[];
33
- readonly canConfigure: any;
34
- } & {
35
- activateConfigurationUI(): void;
36
- showDisplay(displayId: string, initialSnapshot?: {}): void;
37
- hideDisplay(displayId: string): number;
38
- replaceDisplay(oldDisplayId: string, newDisplayId: string, initialSnapshot?: {}): void;
39
- } & {
40
- trackMenuItems(): import("@jbrowse/core/ui").MenuItem[];
41
- }, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>>;
42
- className?: string | undefined;
43
- } & React.RefAttributes<unknown>>;
44
- export default _default;
1
+ import React from 'react';
2
+ declare const _default: React.ForwardRefExoticComponent<{
3
+ track: import("mobx-state-tree").ModelInstanceTypeProps<{
4
+ id: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
5
+ type: import("mobx-state-tree").ISimpleType<string>;
6
+ configuration: import("mobx-state-tree").ITypeUnion<any, any, any>;
7
+ displays: import("mobx-state-tree").IArrayType<import("mobx-state-tree").IAnyType>;
8
+ }> & {
9
+ readonly rpcSessionId: any;
10
+ readonly name: any;
11
+ readonly textSearchAdapter: any;
12
+ readonly adapterType: any;
13
+ readonly viewMenuActions: import("@jbrowse/core/ui").MenuItem[];
14
+ readonly canConfigure: any;
15
+ } & {
16
+ activateConfigurationUI(): void;
17
+ showDisplay(displayId: string, initialSnapshot?: {} | undefined): void;
18
+ hideDisplay(displayId: string): number;
19
+ replaceDisplay(oldDisplayId: string, newDisplayId: string, initialSnapshot?: {} | undefined): void;
20
+ } & {
21
+ trackMenuItems(): import("@jbrowse/core/ui").MenuItem[];
22
+ } & import("mobx-state-tree").IStateTreeNode<import("mobx-state-tree").IModelType<{
23
+ id: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
24
+ type: import("mobx-state-tree").ISimpleType<string>;
25
+ configuration: import("mobx-state-tree").ITypeUnion<any, any, any>;
26
+ displays: import("mobx-state-tree").IArrayType<import("mobx-state-tree").IAnyType>;
27
+ }, {
28
+ readonly rpcSessionId: any;
29
+ readonly name: any;
30
+ readonly textSearchAdapter: any;
31
+ readonly adapterType: any;
32
+ readonly viewMenuActions: import("@jbrowse/core/ui").MenuItem[];
33
+ readonly canConfigure: any;
34
+ } & {
35
+ activateConfigurationUI(): void;
36
+ showDisplay(displayId: string, initialSnapshot?: {} | undefined): void;
37
+ hideDisplay(displayId: string): number;
38
+ replaceDisplay(oldDisplayId: string, newDisplayId: string, initialSnapshot?: {} | undefined): void;
39
+ } & {
40
+ trackMenuItems(): import("@jbrowse/core/ui").MenuItem[];
41
+ }, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>>;
42
+ className?: string | undefined;
43
+ } & React.RefAttributes<unknown>>;
44
+ export default _default;
@@ -0,0 +1,165 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports["default"] = void 0;
9
+
10
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
11
+
12
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
13
+
14
+ var _react = _interopRequireDefault(require("react"));
15
+
16
+ var _configuration = require("@jbrowse/core/configuration");
17
+
18
+ var _ui = require("@jbrowse/core/ui");
19
+
20
+ var _util = require("@jbrowse/core/util");
21
+
22
+ var _core = require("@material-ui/core");
23
+
24
+ var _MoreVert = _interopRequireDefault(require("@material-ui/icons/MoreVert"));
25
+
26
+ var _DragIndicator = _interopRequireDefault(require("@material-ui/icons/DragIndicator"));
27
+
28
+ var _Close = _interopRequireDefault(require("@material-ui/icons/Close"));
29
+
30
+ var _clsx = _interopRequireDefault(require("clsx"));
31
+
32
+ var _mobxReact = require("mobx-react");
33
+
34
+ // icons
35
+ var useStyles = (0, _core.makeStyles)(function (theme) {
36
+ return {
37
+ root: {
38
+ background: (0, _core.alpha)(theme.palette.background.paper, 0.8),
39
+ '&:hover': {
40
+ background: theme.palette.background.paper
41
+ },
42
+ transition: theme.transitions.create(['background'], {
43
+ duration: theme.transitions.duration.shortest
44
+ })
45
+ },
46
+ trackName: {
47
+ margin: '0 auto',
48
+ width: '90%',
49
+ fontSize: '0.8rem',
50
+ pointerEvents: 'none'
51
+ },
52
+ dragHandle: {
53
+ cursor: 'grab',
54
+ color: '#135560'
55
+ },
56
+ dragHandleIcon: {
57
+ display: 'inline-block',
58
+ verticalAlign: 'middle',
59
+ pointerEvents: 'none'
60
+ },
61
+ iconButton: {
62
+ padding: theme.spacing(1)
63
+ }
64
+ };
65
+ });
66
+
67
+ var TrackLabel = /*#__PURE__*/_react["default"].forwardRef(function (props, ref) {
68
+ var _session$getTrackActi;
69
+
70
+ var classes = useStyles();
71
+
72
+ var _React$useState = _react["default"].useState(null),
73
+ _React$useState2 = (0, _slicedToArray2["default"])(_React$useState, 2),
74
+ anchorEl = _React$useState2[0],
75
+ setAnchorEl = _React$useState2[1];
76
+
77
+ var track = props.track,
78
+ className = props.className;
79
+ var view = (0, _util.getContainingView)(track);
80
+ var session = (0, _util.getSession)(track);
81
+ var trackConf = track.configuration;
82
+ var trackId = (0, _configuration.getConf)(track, 'trackId');
83
+
84
+ var handleClick = function handleClick(event) {
85
+ setAnchorEl(event.currentTarget);
86
+ };
87
+
88
+ var handleClose = function handleClose() {
89
+ setAnchorEl(null);
90
+ };
91
+
92
+ var onDragStart = function onDragStart(event) {
93
+ var target = event.target;
94
+
95
+ if (target.parentNode) {
96
+ event.dataTransfer.setDragImage(target.parentNode, 20, 20);
97
+ view.setDraggingTrackId(track.id);
98
+ }
99
+ };
100
+
101
+ var onDragEnd = function onDragEnd() {
102
+ view.setDraggingTrackId(undefined);
103
+ };
104
+
105
+ var trackName = (0, _configuration.getConf)(track, 'name');
106
+
107
+ if ((0, _configuration.getConf)(track, 'type') === 'ReferenceSequenceTrack') {
108
+ trackName = 'Reference Sequence';
109
+ session.assemblies.forEach(function (assembly) {
110
+ if (assembly.sequence === trackConf) {
111
+ trackName = "Reference Sequence (".concat((0, _configuration.readConfObject)(assembly, 'name'), ")");
112
+ }
113
+ });
114
+ }
115
+
116
+ function handleMenuItemClick(_, callback) {
117
+ callback();
118
+ handleClose();
119
+ }
120
+
121
+ var items = [].concat((0, _toConsumableArray2["default"])(((_session$getTrackActi = session.getTrackActionMenuItems) === null || _session$getTrackActi === void 0 ? void 0 : _session$getTrackActi.call(session, trackConf)) || []), (0, _toConsumableArray2["default"])(track.trackMenuItems())).sort(function (a, b) {
122
+ return (b.priority || 0) - (a.priority || 0);
123
+ });
124
+ return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(_core.Paper, {
125
+ ref: ref,
126
+ className: (0, _clsx["default"])(className, classes.root)
127
+ }, /*#__PURE__*/_react["default"].createElement("span", {
128
+ draggable: true,
129
+ className: classes.dragHandle,
130
+ onDragStart: onDragStart,
131
+ onDragEnd: onDragEnd,
132
+ "data-testid": "dragHandle-".concat(view.id, "-").concat(trackId)
133
+ }, /*#__PURE__*/_react["default"].createElement(_DragIndicator["default"], {
134
+ className: classes.dragHandleIcon
135
+ })), /*#__PURE__*/_react["default"].createElement(_core.IconButton, {
136
+ onClick: function onClick() {
137
+ return view.hideTrack(trackId);
138
+ },
139
+ className: classes.iconButton,
140
+ title: "close this track",
141
+ color: "secondary"
142
+ }, /*#__PURE__*/_react["default"].createElement(_Close["default"], null)), /*#__PURE__*/_react["default"].createElement(_core.Typography, {
143
+ variant: "body1",
144
+ component: "span",
145
+ className: classes.trackName
146
+ }, trackName), /*#__PURE__*/_react["default"].createElement(_core.IconButton, {
147
+ "aria-controls": "simple-menu",
148
+ "aria-haspopup": "true",
149
+ onClick: handleClick,
150
+ className: classes.iconButton,
151
+ color: "secondary",
152
+ "data-testid": "track_menu_icon",
153
+ disabled: !items.length
154
+ }, /*#__PURE__*/_react["default"].createElement(_MoreVert["default"], null))), /*#__PURE__*/_react["default"].createElement(_ui.Menu, {
155
+ anchorEl: anchorEl,
156
+ onMenuItemClick: handleMenuItemClick,
157
+ open: Boolean(anchorEl),
158
+ onClose: handleClose,
159
+ menuItems: items
160
+ }));
161
+ });
162
+
163
+ var _default = (0, _mobxReact.observer)(TrackLabel);
164
+
165
+ exports["default"] = _default;
@@ -1,10 +1,10 @@
1
- import { Instance } from 'mobx-state-tree';
2
- import React from 'react';
3
- import { LinearGenomeViewStateModel } from '..';
4
- declare type LGV = Instance<LinearGenomeViewStateModel>;
5
- declare function TracksContainer({ children, model, }: {
6
- children: React.ReactNode;
7
- model: LGV;
8
- }): JSX.Element;
9
- declare const _default: typeof TracksContainer;
10
- export default _default;
1
+ import { Instance } from 'mobx-state-tree';
2
+ import React from 'react';
3
+ import { LinearGenomeViewStateModel } from '..';
4
+ declare type LGV = Instance<LinearGenomeViewStateModel>;
5
+ declare function TracksContainer({ children, model, }: {
6
+ children: React.ReactNode;
7
+ model: LGV;
8
+ }): JSX.Element;
9
+ declare const _default: typeof TracksContainer;
10
+ export default _default;
@@ -0,0 +1,214 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ var _typeof = require("@babel/runtime/helpers/typeof");
6
+
7
+ Object.defineProperty(exports, "__esModule", {
8
+ value: true
9
+ });
10
+ exports["default"] = void 0;
11
+
12
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
13
+
14
+ var _styles = require("@material-ui/core/styles");
15
+
16
+ var _mobxReact = require("mobx-react");
17
+
18
+ var _react = _interopRequireWildcard(require("react"));
19
+
20
+ var _normalizeWheel = _interopRequireDefault(require("normalize-wheel"));
21
+
22
+ var _ = require("..");
23
+
24
+ var _RubberBand = _interopRequireDefault(require("./RubberBand"));
25
+
26
+ var _ScaleBar = _interopRequireDefault(require("./ScaleBar"));
27
+
28
+ var _VerticalGuides = _interopRequireDefault(require("./VerticalGuides"));
29
+
30
+ var _CenterLine = _interopRequireDefault(require("./CenterLine"));
31
+
32
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
33
+
34
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
35
+
36
+ var useStyles = (0, _styles.makeStyles)(function (theme) {
37
+ return {
38
+ tracksContainer: {
39
+ position: 'relative',
40
+ borderRadius: theme.shape.borderRadius,
41
+ overflow: 'hidden'
42
+ },
43
+ spacer: {
44
+ position: 'relative',
45
+ height: _.RESIZE_HANDLE_HEIGHT
46
+ }
47
+ };
48
+ });
49
+
50
+ function TracksContainer(_ref) {
51
+ var children = _ref.children,
52
+ model = _ref.model;
53
+ var classes = useStyles(); // refs are to store these variables to avoid repeated rerenders associated
54
+ // with useState/setState
55
+
56
+ var delta = (0, _react.useRef)(0);
57
+ var scheduled = (0, _react.useRef)(false);
58
+ var timeout = (0, _react.useRef)();
59
+ var ref = (0, _react.useRef)(null);
60
+ var prevX = (0, _react.useRef)(0);
61
+
62
+ var _useState = (0, _react.useState)(false),
63
+ _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
64
+ mouseDragging = _useState2[0],
65
+ setMouseDragging = _useState2[1];
66
+
67
+ (0, _react.useEffect)(function () {
68
+ var cleanup = function cleanup() {};
69
+
70
+ function globalMouseMove(event) {
71
+ event.preventDefault();
72
+ var currX = event.clientX;
73
+ var distance = currX - prevX.current;
74
+
75
+ if (distance) {
76
+ // use rAF to make it so multiple event handlers aren't fired per-frame
77
+ // see https://calendar.perfplanet.com/2013/the-runtime-performance-checklist/
78
+ if (!scheduled.current) {
79
+ scheduled.current = true;
80
+ window.requestAnimationFrame(function () {
81
+ model.horizontalScroll(-distance);
82
+ scheduled.current = false;
83
+ prevX.current = event.clientX;
84
+ });
85
+ }
86
+ }
87
+ }
88
+
89
+ function globalMouseUp() {
90
+ prevX.current = 0;
91
+
92
+ if (mouseDragging) {
93
+ setMouseDragging(false);
94
+ }
95
+ }
96
+
97
+ if (mouseDragging) {
98
+ window.addEventListener('mousemove', globalMouseMove, true);
99
+ window.addEventListener('mouseup', globalMouseUp, true);
100
+
101
+ cleanup = function cleanup() {
102
+ window.removeEventListener('mousemove', globalMouseMove, true);
103
+ window.removeEventListener('mouseup', globalMouseUp, true);
104
+ };
105
+ }
106
+
107
+ return cleanup;
108
+ }, [model, mouseDragging, prevX]);
109
+
110
+ function mouseDown(event) {
111
+ // check if clicking a draggable element or a resize handle
112
+ var target = event.target;
113
+
114
+ if (target.draggable || target.dataset.resizer) {
115
+ return;
116
+ } // otherwise do click and drag scroll
117
+
118
+
119
+ if (event.button === 0) {
120
+ prevX.current = event.clientX;
121
+ setMouseDragging(true);
122
+ }
123
+ } // this local mouseup is used in addition to the global because sometimes
124
+ // the global add/remove are not called in time, resulting in issue #533
125
+
126
+
127
+ function mouseUp(event) {
128
+ event.preventDefault();
129
+ setMouseDragging(false);
130
+ }
131
+
132
+ function mouseLeave(event) {
133
+ event.preventDefault();
134
+ }
135
+
136
+ (0, _react.useEffect)(function () {
137
+ var curr = ref.current; // if ctrl is held down, zoom in with y-scroll
138
+ // else scroll horizontally with x-scroll
139
+
140
+ function onWheel(origEvent) {
141
+ var event = (0, _normalizeWheel["default"])(origEvent);
142
+
143
+ if (origEvent.ctrlKey === true) {
144
+ origEvent.preventDefault();
145
+ delta.current += event.pixelY / 500;
146
+ model.setScaleFactor(delta.current < 0 ? 1 - delta.current : 1 / (1 + delta.current));
147
+
148
+ if (timeout.current) {
149
+ clearTimeout(timeout.current);
150
+ }
151
+
152
+ timeout.current = setTimeout(function () {
153
+ model.setScaleFactor(1);
154
+ model.zoomTo(delta.current > 0 ? model.bpPerPx * (1 + delta.current) : model.bpPerPx / (1 - delta.current));
155
+ delta.current = 0;
156
+ }, 300);
157
+ } else {
158
+ // this is needed to stop the event from triggering "back button
159
+ // action" on MacOSX etc. but is a heuristic to avoid preventing the
160
+ // inner-track scroll behavior
161
+ if (Math.abs(event.pixelX) > Math.abs(2 * event.pixelY)) {
162
+ origEvent.preventDefault();
163
+ }
164
+
165
+ delta.current += event.pixelX;
166
+
167
+ if (!scheduled.current) {
168
+ // use rAF to make it so multiple event handlers aren't fired per-frame
169
+ // see https://calendar.perfplanet.com/2013/the-runtime-performance-checklist/
170
+ scheduled.current = true;
171
+ window.requestAnimationFrame(function () {
172
+ model.horizontalScroll(delta.current);
173
+ delta.current = 0;
174
+ scheduled.current = false;
175
+ });
176
+ }
177
+ }
178
+ }
179
+
180
+ if (curr) {
181
+ curr.addEventListener('wheel', onWheel);
182
+ return function () {
183
+ curr.removeEventListener('wheel', onWheel);
184
+ };
185
+ }
186
+
187
+ return function () {};
188
+ }, [model]);
189
+ return /*#__PURE__*/_react["default"].createElement("div", {
190
+ ref: ref,
191
+ role: "presentation",
192
+ className: classes.tracksContainer,
193
+ onMouseDown: mouseDown,
194
+ onMouseUp: mouseUp,
195
+ onMouseLeave: mouseLeave
196
+ }, /*#__PURE__*/_react["default"].createElement(_VerticalGuides["default"], {
197
+ model: model
198
+ }), model.showCenterLine ? /*#__PURE__*/_react["default"].createElement(_CenterLine["default"], {
199
+ model: model
200
+ }) : null, /*#__PURE__*/_react["default"].createElement(_RubberBand["default"], {
201
+ model: model,
202
+ ControlComponent: /*#__PURE__*/_react["default"].createElement(_ScaleBar["default"], {
203
+ model: model,
204
+ style: {
205
+ height: _.SCALE_BAR_HEIGHT,
206
+ boxSizing: 'border-box'
207
+ }
208
+ })
209
+ }), children);
210
+ }
211
+
212
+ var _default = (0, _mobxReact.observer)(TracksContainer);
213
+
214
+ exports["default"] = _default;
@@ -1,9 +1,9 @@
1
- /// <reference types="react" />
2
- import { Instance } from 'mobx-state-tree';
3
- import { LinearGenomeViewStateModel } from '..';
4
- declare type LGV = Instance<LinearGenomeViewStateModel>;
5
- declare function VerticalGuides({ model }: {
6
- model: LGV;
7
- }): JSX.Element;
8
- declare const _default: typeof VerticalGuides;
9
- export default _default;
1
+ /// <reference types="react" />
2
+ import { Instance } from 'mobx-state-tree';
3
+ import { LinearGenomeViewStateModel } from '..';
4
+ declare type LGV = Instance<LinearGenomeViewStateModel>;
5
+ declare function VerticalGuides({ model }: {
6
+ model: LGV;
7
+ }): JSX.Element;
8
+ declare const _default: typeof VerticalGuides;
9
+ export default _default;
@@ -0,0 +1,116 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports["default"] = void 0;
9
+
10
+ var _blockTypes = require("@jbrowse/core/util/blockTypes");
11
+
12
+ var _styles = require("@material-ui/core/styles");
13
+
14
+ var _clsx = _interopRequireDefault(require("clsx"));
15
+
16
+ var _mobxReact = require("mobx-react");
17
+
18
+ var _react = _interopRequireDefault(require("react"));
19
+
20
+ var _Block = require("../../BaseLinearDisplay/components/Block");
21
+
22
+ var _util = require("../util");
23
+
24
+ var useStyles = (0, _styles.makeStyles)(function (theme) {
25
+ return {
26
+ verticalGuidesZoomContainer: {
27
+ position: 'absolute',
28
+ height: '100%',
29
+ width: '100%',
30
+ zIndex: 1,
31
+ pointerEvents: 'none'
32
+ },
33
+ verticalGuidesContainer: {
34
+ position: 'absolute',
35
+ height: '100%',
36
+ zIndex: 1,
37
+ pointerEvents: 'none',
38
+ display: 'flex'
39
+ },
40
+ tick: {
41
+ position: 'absolute',
42
+ height: '100%',
43
+ width: 1
44
+ },
45
+ majorTick: {
46
+ background: theme.palette.text.hint
47
+ },
48
+ minorTick: {
49
+ background: theme.palette.divider
50
+ }
51
+ };
52
+ });
53
+ var RenderedVerticalGuides = (0, _mobxReact.observer)(function (_ref) {
54
+ var model = _ref.model;
55
+ var classes = useStyles();
56
+ return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, model.staticBlocks.map(function (block, index) {
57
+ if (block instanceof _blockTypes.ContentBlock) {
58
+ var ticks = (0, _util.makeTicks)(block.start, block.end, model.bpPerPx);
59
+ return /*#__PURE__*/_react["default"].createElement(_Block.ContentBlock, {
60
+ key: "".concat(block.key, "-").concat(index),
61
+ block: block
62
+ }, ticks.map(function (tick) {
63
+ var x = (block.reversed ? block.end - tick.base : tick.base - block.start) / model.bpPerPx;
64
+ return /*#__PURE__*/_react["default"].createElement("div", {
65
+ key: tick.base,
66
+ className: (0, _clsx["default"])(classes.tick, tick.type === 'major' || tick.type === 'labeledMajor' ? classes.majorTick : classes.minorTick),
67
+ style: {
68
+ left: x
69
+ }
70
+ });
71
+ }));
72
+ }
73
+
74
+ if (block instanceof _blockTypes.ElidedBlock) {
75
+ return /*#__PURE__*/_react["default"].createElement(_Block.ElidedBlock, {
76
+ key: block.key,
77
+ width: block.widthPx
78
+ });
79
+ }
80
+
81
+ if (block instanceof _blockTypes.InterRegionPaddingBlock) {
82
+ return /*#__PURE__*/_react["default"].createElement(_Block.InterRegionPaddingBlock, {
83
+ key: block.key,
84
+ width: block.widthPx,
85
+ boundary: block.variant === 'boundary'
86
+ });
87
+ }
88
+
89
+ return null;
90
+ }));
91
+ });
92
+
93
+ function VerticalGuides(_ref2) {
94
+ var model = _ref2.model;
95
+ var classes = useStyles(); // find the block that needs pinning to the left side for context
96
+
97
+ var offsetLeft = model.staticBlocks.offsetPx - model.offsetPx;
98
+ return /*#__PURE__*/_react["default"].createElement("div", {
99
+ className: classes.verticalGuidesZoomContainer,
100
+ style: {
101
+ transform: model.scaleFactor !== 1 ? "scaleX(".concat(model.scaleFactor, ")") : undefined
102
+ }
103
+ }, /*#__PURE__*/_react["default"].createElement("div", {
104
+ className: classes.verticalGuidesContainer,
105
+ style: {
106
+ left: offsetLeft,
107
+ width: model.staticBlocks.totalWidthPx
108
+ }
109
+ }, /*#__PURE__*/_react["default"].createElement(RenderedVerticalGuides, {
110
+ model: model
111
+ })));
112
+ }
113
+
114
+ var _default = (0, _mobxReact.observer)(VerticalGuides);
115
+
116
+ exports["default"] = _default;
@@ -1,7 +1,7 @@
1
- /// <reference types="react" />
2
- import { LinearGenomeViewModel } from '..';
3
- declare function ZoomControls({ model }: {
4
- model: LinearGenomeViewModel;
5
- }): JSX.Element;
6
- declare const _default: typeof ZoomControls;
7
- export default _default;
1
+ /// <reference types="react" />
2
+ import { LinearGenomeViewModel } from '..';
3
+ declare function ZoomControls({ model }: {
4
+ model: LinearGenomeViewModel;
5
+ }): JSX.Element;
6
+ declare const _default: typeof ZoomControls;
7
+ export default _default;