@jbrowse/plugin-circular-view 2.17.0 → 3.0.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.
- package/dist/BaseChordDisplay/components/BaseChordDisplay.d.ts +1 -2
- package/dist/BaseChordDisplay/components/BaseChordDisplay.js +8 -7
- package/dist/BaseChordDisplay/components/DisplayError.d.ts +1 -2
- package/dist/BaseChordDisplay/components/DisplayError.js +2 -11
- package/dist/BaseChordDisplay/components/Loading.d.ts +1 -2
- package/dist/BaseChordDisplay/components/Loading.js +4 -34
- package/dist/BaseChordDisplay/{models/configSchema.d.ts → configSchema.d.ts} +0 -3
- package/dist/BaseChordDisplay/{models/configSchema.js → configSchema.js} +1 -10
- package/dist/BaseChordDisplay/index.d.ts +2 -2
- package/dist/BaseChordDisplay/index.js +2 -2
- package/{esm/BaseChordDisplay/models → dist/BaseChordDisplay}/model.d.ts +12 -54
- package/dist/BaseChordDisplay/{models/model.js → model.js} +31 -94
- package/dist/BaseChordDisplay/renderReaction.d.ts +27 -0
- package/dist/BaseChordDisplay/{models/renderReaction.js → renderReaction.js} +5 -13
- package/dist/CircularView/components/CircularView.d.ts +2 -3
- package/dist/CircularView/components/CircularView.js +22 -31
- package/dist/CircularView/components/Controls.d.ts +2 -3
- package/dist/CircularView/components/Controls.js +33 -70
- package/dist/CircularView/components/ExportSvgDialog.d.ts +2 -3
- package/dist/CircularView/components/ExportSvgDialog.js +32 -67
- package/dist/CircularView/components/ImportForm.d.ts +2 -3
- package/dist/CircularView/components/ImportForm.js +12 -42
- package/dist/CircularView/components/Ruler.d.ts +3 -4
- package/dist/CircularView/components/Ruler.js +18 -37
- package/dist/CircularView/index.d.ts +1 -1
- package/dist/CircularView/index.js +18 -8
- package/dist/CircularView/{models/model.d.ts → model.d.ts} +9 -158
- package/dist/CircularView/{models/model.js → model.js} +25 -224
- package/dist/CircularView/{models/slices.d.ts → slices.d.ts} +1 -1
- package/dist/CircularView/svgcomponents/SVGBackground.d.ts +1 -2
- package/dist/CircularView/svgcomponents/SVGBackground.js +3 -6
- package/dist/CircularView/svgcomponents/SVGCircularView.d.ts +1 -1
- package/dist/CircularView/svgcomponents/SVGCircularView.js +5 -17
- package/dist/CircularView/{models/viewportVisibleRegion.js → viewportVisibleRegion.js} +0 -70
- package/dist/LaunchCircularView/index.d.ts +1 -1
- package/dist/LaunchCircularView/index.js +1 -3
- package/dist/index.d.ts +3 -3
- package/dist/index.js +5 -7
- package/esm/BaseChordDisplay/components/BaseChordDisplay.d.ts +1 -2
- package/esm/BaseChordDisplay/components/BaseChordDisplay.js +8 -7
- package/esm/BaseChordDisplay/components/DisplayError.d.ts +1 -2
- package/esm/BaseChordDisplay/components/DisplayError.js +2 -8
- package/esm/BaseChordDisplay/components/Loading.d.ts +1 -2
- package/esm/BaseChordDisplay/components/Loading.js +4 -11
- package/esm/BaseChordDisplay/{models/configSchema.d.ts → configSchema.d.ts} +0 -3
- package/esm/BaseChordDisplay/{models/configSchema.js → configSchema.js} +1 -10
- package/esm/BaseChordDisplay/index.d.ts +2 -2
- package/esm/BaseChordDisplay/index.js +2 -2
- package/{dist/BaseChordDisplay/models → esm/BaseChordDisplay}/model.d.ts +12 -54
- package/esm/BaseChordDisplay/{models/model.js → model.js} +32 -92
- package/esm/BaseChordDisplay/renderReaction.d.ts +27 -0
- package/esm/BaseChordDisplay/{models/renderReaction.js → renderReaction.js} +5 -10
- package/esm/CircularView/components/CircularView.d.ts +2 -3
- package/esm/CircularView/components/CircularView.js +22 -31
- package/esm/CircularView/components/Controls.d.ts +2 -3
- package/esm/CircularView/components/Controls.js +33 -47
- package/esm/CircularView/components/ExportSvgDialog.d.ts +2 -3
- package/esm/CircularView/components/ExportSvgDialog.js +32 -44
- package/esm/CircularView/components/ImportForm.d.ts +2 -3
- package/esm/CircularView/components/ImportForm.js +12 -19
- package/esm/CircularView/components/Ruler.d.ts +3 -4
- package/esm/CircularView/components/Ruler.js +19 -35
- package/esm/CircularView/index.d.ts +1 -1
- package/esm/CircularView/index.js +1 -1
- package/esm/CircularView/{models/model.d.ts → model.d.ts} +9 -158
- package/esm/CircularView/{models/model.js → model.js} +9 -218
- package/esm/CircularView/{models/slices.d.ts → slices.d.ts} +1 -1
- package/esm/CircularView/{models/slices.js → slices.js} +1 -1
- package/esm/CircularView/svgcomponents/SVGBackground.d.ts +1 -2
- package/esm/CircularView/svgcomponents/SVGBackground.js +3 -3
- package/esm/CircularView/svgcomponents/SVGCircularView.d.ts +1 -1
- package/esm/CircularView/svgcomponents/SVGCircularView.js +5 -17
- package/esm/CircularView/{models/viewportVisibleRegion.js → viewportVisibleRegion.js} +0 -70
- package/esm/LaunchCircularView/index.d.ts +1 -1
- package/esm/LaunchCircularView/index.js +1 -3
- package/esm/index.d.ts +3 -3
- package/esm/index.js +3 -5
- package/package.json +2 -3
- package/dist/BaseChordDisplay/models/renderReaction.d.ts +0 -45
- package/esm/BaseChordDisplay/models/renderReaction.d.ts +0 -45
- /package/dist/CircularView/{models/slices.js → slices.js} +0 -0
- /package/dist/CircularView/{models/viewportVisibleRegion.d.ts → viewportVisibleRegion.d.ts} +0 -0
- /package/esm/CircularView/{models/viewportVisibleRegion.d.ts → viewportVisibleRegion.d.ts} +0 -0
|
@@ -53,26 +53,21 @@ function thetaRangesOverlap(r1start, r1length, r2start, r2length) {
|
|
|
53
53
|
if (r1length + 0.0001 >= twoPi || r2length + 0.0001 >= twoPi) {
|
|
54
54
|
return true;
|
|
55
55
|
}
|
|
56
|
-
// put both range starts between 2π and 4π
|
|
57
56
|
r1start = (((r1start % twoPi) + twoPi) % twoPi) + twoPi;
|
|
58
57
|
r2start = (((r2start % twoPi) + twoPi) % twoPi) + twoPi;
|
|
59
58
|
if (r1start < r2start + r2length && r1start + r1length > r2start) {
|
|
60
59
|
return true;
|
|
61
60
|
}
|
|
62
|
-
// move r2 2π to the left and check
|
|
63
61
|
r2start -= twoPi;
|
|
64
62
|
if (r1start < r2start + r2length && r1start + r1length > r2start) {
|
|
65
63
|
return true;
|
|
66
64
|
}
|
|
67
|
-
// move it 2π to the right and check
|
|
68
65
|
r2start += twoPi + twoPi;
|
|
69
66
|
return r1start < r2start + r2length && r1start + r1length > r2start;
|
|
70
67
|
}
|
|
71
|
-
// return which arc range has any part of the circle visible in the viewport
|
|
72
68
|
function viewportVisibleSection(viewSides, circleCenter, circleRadius) {
|
|
73
69
|
let [viewL, viewR, viewT, viewB] = viewSides;
|
|
74
70
|
const [cx, cy] = circleCenter;
|
|
75
|
-
// transform coordinate system to center of circle
|
|
76
71
|
viewL -= cx;
|
|
77
72
|
viewR -= cx;
|
|
78
73
|
viewT -= cy;
|
|
@@ -97,61 +92,6 @@ function viewportVisibleSection(viewSides, circleCenter, circleRadius) {
|
|
|
97
92
|
theta: [0, 2 * Math.PI],
|
|
98
93
|
};
|
|
99
94
|
}
|
|
100
|
-
// const viewportCompletelyContainsCircle =
|
|
101
|
-
// circleCenter[0] - viewL >= circleRadius &&
|
|
102
|
-
// viewR - circleCenter[0] >= circleRadius &&
|
|
103
|
-
// circleCenter[1] - viewT >= circleRadius &&
|
|
104
|
-
// viewB - circleCenter[1] >= circleRadius
|
|
105
|
-
// if (viewportCompletelyContainsCircle) {
|
|
106
|
-
// return [0, 2 * Math.PI]
|
|
107
|
-
// }
|
|
108
|
-
// const distToCenterSquared = ([x, y]) => {
|
|
109
|
-
// const [cx, cy] = circleCenter
|
|
110
|
-
// const sq = n => n * n
|
|
111
|
-
// return sq(x - cx) + sq(y - cy)
|
|
112
|
-
// }
|
|
113
|
-
// const circleRadiusSquared = circleRadius * circleRadius
|
|
114
|
-
// const tlInside = distToCenterSquared([viewL, viewT]) <= circleRadiusSquared
|
|
115
|
-
// const trInside = distToCenterSquared([viewR, viewT]) <= circleRadiusSquared
|
|
116
|
-
// const blInside = distToCenterSquared([viewL, viewB]) <= circleRadiusSquared
|
|
117
|
-
// const brInside = distToCenterSquared([viewR, viewB]) <= circleRadiusSquared
|
|
118
|
-
// const noIntersection = !tlInside && !trInside && !blInside && !brInside
|
|
119
|
-
// if (noIntersection) return undefined
|
|
120
|
-
// const circleCompletelyContainsViewport =
|
|
121
|
-
// tlInside && trInside && blInside && brInside
|
|
122
|
-
// if (circleCompletelyContainsViewport) {
|
|
123
|
-
// // viewport is in the circle, but the center is not in it, so take max
|
|
124
|
-
// // and min of thetas to the center
|
|
125
|
-
// const thetas = [
|
|
126
|
-
// Math.atan(viewT / viewL),
|
|
127
|
-
// Math.atan(viewT / viewR),
|
|
128
|
-
// Math.atan(viewB / viewL),
|
|
129
|
-
// Math.atan(viewB / viewR),
|
|
130
|
-
// ]
|
|
131
|
-
// return [Math.min(...thetas), Math.max(...thetas)]
|
|
132
|
-
// }
|
|
133
|
-
// if we get here, the viewport is partly in, partly out of the circle
|
|
134
|
-
// const viewLIntersects = Math.abs(viewL - circleCenter[0]) <= circleRadius
|
|
135
|
-
// const viewRIntersects = Math.abs(viewR - circleCenter[0]) <= circleRadius
|
|
136
|
-
// const viewTIntersects = Math.abs(viewT - circleCenter[1]) <= circleRadius
|
|
137
|
-
// const viewBIntersects = Math.abs(viewB - circleCenter[1]) <= circleRadius
|
|
138
|
-
// const numIntersectingSides =
|
|
139
|
-
// Number(viewLIntersects) +
|
|
140
|
-
// Number(viewRIntersects) +
|
|
141
|
-
// Number(viewTIntersects) +
|
|
142
|
-
// Number(viewBIntersects)
|
|
143
|
-
// if (numIntersectingSides === 4) return [0, 2 * Math.PI]
|
|
144
|
-
// if (numIntersectingSides === 3) {
|
|
145
|
-
// // TODO calculate the thetas of the
|
|
146
|
-
// } else if (numIntersectingSides === 2) {
|
|
147
|
-
// // TODO calculate the thetas of the 2 intersection points
|
|
148
|
-
// } else if (numIntersectingSides === 1) {
|
|
149
|
-
// // TODO calculate the thetas of the 1-2 intersection points of the line, and the angle between
|
|
150
|
-
// }
|
|
151
|
-
// make a list of vertices-of-interest that lie inside both shapes to examine
|
|
152
|
-
// to determine the range covered by their intersection
|
|
153
|
-
// transform coordinates to have the circle as the origin and find the intersections
|
|
154
|
-
// of the circle and the view rectangle
|
|
155
95
|
const vertices = [
|
|
156
96
|
[viewL, viewT],
|
|
157
97
|
[viewR, viewT],
|
|
@@ -162,7 +102,6 @@ function viewportVisibleSection(viewSides, circleCenter, circleRadius) {
|
|
|
162
102
|
findCircleIntersectionY(viewR, 0, 0, circleRadius, vertices);
|
|
163
103
|
findCircleIntersectionX(viewT, 0, 0, circleRadius, vertices);
|
|
164
104
|
findCircleIntersectionX(viewB, 0, 0, circleRadius, vertices);
|
|
165
|
-
// for each edge, also look at the closest point to center if it is inside the circle
|
|
166
105
|
if (-viewL < circleRadius) {
|
|
167
106
|
vertices.push([viewL, 0]);
|
|
168
107
|
}
|
|
@@ -175,24 +114,15 @@ function viewportVisibleSection(viewSides, circleCenter, circleRadius) {
|
|
|
175
114
|
if (viewB < circleRadius) {
|
|
176
115
|
vertices.push([0, viewB]);
|
|
177
116
|
}
|
|
178
|
-
// const verticesOriginal = vertices.map(([x, y]) => [x + cx, y + cy])
|
|
179
|
-
// now convert them all to polar and take the max and min of rho and theta
|
|
180
|
-
// const viewportCenterTheta = cartesianToTheta(viewR + viewL, viewT + viewB)
|
|
181
117
|
const reflect = viewL >= 0 ? -1 : 1;
|
|
182
|
-
// viewportCenterTheta < Math.PI / 2 || viewportCenterTheta > 1.5 * Math.PI
|
|
183
|
-
// ? -1
|
|
184
|
-
// : 1
|
|
185
118
|
let rhoMin = Number.POSITIVE_INFINITY;
|
|
186
119
|
let rhoMax = Number.NEGATIVE_INFINITY;
|
|
187
120
|
let thetaMin = Number.POSITIVE_INFINITY;
|
|
188
121
|
let thetaMax = Number.NEGATIVE_INFINITY;
|
|
189
122
|
for (const [vx, vy] of vertices) {
|
|
190
|
-
// ignore vertex if outside the viewport
|
|
191
123
|
if (vx >= viewL && vx <= viewR && vy >= viewT && vy <= viewB) {
|
|
192
124
|
const [rho, theta] = cartesianToPolar(vx * reflect, vy * reflect);
|
|
193
|
-
// ignore vertex if outside the circle
|
|
194
125
|
if (rho <= circleRadius + 0.001) {
|
|
195
|
-
// ignore theta if rho is 0
|
|
196
126
|
if (theta < thetaMin && rho > 0.0001) {
|
|
197
127
|
thetaMin = theta;
|
|
198
128
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import PluginManager from '@jbrowse/core/PluginManager';
|
|
1
|
+
import type PluginManager from '@jbrowse/core/PluginManager';
|
|
2
2
|
export default function LaunchCircularViewF(pluginManager: PluginManager): void;
|
|
@@ -3,9 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.default = LaunchCircularViewF;
|
|
4
4
|
const mobx_1 = require("mobx");
|
|
5
5
|
function LaunchCircularViewF(pluginManager) {
|
|
6
|
-
pluginManager.addToExtensionPoint('LaunchView-CircularView',
|
|
7
|
-
// @ts-expect-error
|
|
8
|
-
async ({ session, assembly, tracks = [], }) => {
|
|
6
|
+
pluginManager.addToExtensionPoint('LaunchView-CircularView', async ({ session, assembly, tracks = [], }) => {
|
|
9
7
|
const { assemblyManager } = session;
|
|
10
8
|
const view = session.addView('CircularView', {});
|
|
11
9
|
await (0, mobx_1.when)(() => view.initialized);
|
package/dist/index.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import PluginManager from '@jbrowse/core/PluginManager';
|
|
2
1
|
import Plugin from '@jbrowse/core/Plugin';
|
|
2
|
+
import type PluginManager from '@jbrowse/core/PluginManager';
|
|
3
3
|
export default class CircularViewPlugin extends Plugin {
|
|
4
4
|
name: string;
|
|
5
5
|
install(pluginManager: PluginManager): void;
|
|
6
6
|
configure(pluginManager: PluginManager): void;
|
|
7
7
|
}
|
|
8
|
-
export {
|
|
9
|
-
export { type CircularViewModel, type CircularViewStateModel, } from './CircularView/
|
|
8
|
+
export { BaseChordDisplayComponent, BaseChordDisplayModel, baseChordDisplayConfig, } from './BaseChordDisplay';
|
|
9
|
+
export { type CircularViewModel, type CircularViewStateModel, } from './CircularView/model';
|
package/dist/index.js
CHANGED
|
@@ -3,14 +3,12 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.
|
|
7
|
-
const util_1 = require("@jbrowse/core/util");
|
|
6
|
+
exports.baseChordDisplayConfig = exports.BaseChordDisplayModel = exports.BaseChordDisplayComponent = void 0;
|
|
8
7
|
const Plugin_1 = __importDefault(require("@jbrowse/core/Plugin"));
|
|
9
|
-
|
|
8
|
+
const util_1 = require("@jbrowse/core/util");
|
|
9
|
+
const DataUsage_1 = __importDefault(require("@mui/icons-material/DataUsage"));
|
|
10
10
|
const CircularView_1 = __importDefault(require("./CircularView"));
|
|
11
11
|
const LaunchCircularView_1 = __importDefault(require("./LaunchCircularView"));
|
|
12
|
-
// icons
|
|
13
|
-
const DataUsage_1 = __importDefault(require("@mui/icons-material/DataUsage"));
|
|
14
12
|
class CircularViewPlugin extends Plugin_1.default {
|
|
15
13
|
constructor() {
|
|
16
14
|
super(...arguments);
|
|
@@ -34,6 +32,6 @@ class CircularViewPlugin extends Plugin_1.default {
|
|
|
34
32
|
}
|
|
35
33
|
exports.default = CircularViewPlugin;
|
|
36
34
|
var BaseChordDisplay_1 = require("./BaseChordDisplay");
|
|
37
|
-
Object.defineProperty(exports, "baseChordDisplayConfig", { enumerable: true, get: function () { return BaseChordDisplay_1.baseChordDisplayConfig; } });
|
|
38
|
-
Object.defineProperty(exports, "BaseChordDisplayModel", { enumerable: true, get: function () { return BaseChordDisplay_1.BaseChordDisplayModel; } });
|
|
39
35
|
Object.defineProperty(exports, "BaseChordDisplayComponent", { enumerable: true, get: function () { return BaseChordDisplay_1.BaseChordDisplayComponent; } });
|
|
36
|
+
Object.defineProperty(exports, "BaseChordDisplayModel", { enumerable: true, get: function () { return BaseChordDisplay_1.BaseChordDisplayModel; } });
|
|
37
|
+
Object.defineProperty(exports, "baseChordDisplayConfig", { enumerable: true, get: function () { return BaseChordDisplay_1.baseChordDisplayConfig; } });
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
1
|
declare const BaseChordDisplay: ({ display, }: {
|
|
3
2
|
display: {
|
|
4
3
|
filled: boolean;
|
|
@@ -8,5 +7,5 @@ declare const BaseChordDisplay: ({ display, }: {
|
|
|
8
7
|
radius: number;
|
|
9
8
|
};
|
|
10
9
|
};
|
|
11
|
-
}) =>
|
|
10
|
+
}) => import("react/jsx-runtime").JSX.Element;
|
|
12
11
|
export default BaseChordDisplay;
|
|
@@ -1,15 +1,16 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import { observer } from 'mobx-react';
|
|
3
|
-
// locals
|
|
4
|
-
import Loading from './Loading';
|
|
5
3
|
import DisplayError from './DisplayError';
|
|
4
|
+
import Loading from './Loading';
|
|
6
5
|
const BaseChordDisplay = observer(function ({ display, }) {
|
|
7
6
|
if (display.error) {
|
|
8
|
-
return
|
|
7
|
+
return _jsx(DisplayError, { model: display });
|
|
8
|
+
}
|
|
9
|
+
else if (!display.filled) {
|
|
10
|
+
return _jsx(Loading, { model: display });
|
|
9
11
|
}
|
|
10
|
-
|
|
11
|
-
return
|
|
12
|
+
else {
|
|
13
|
+
return display.reactElement;
|
|
12
14
|
}
|
|
13
|
-
return display.reactElement;
|
|
14
15
|
});
|
|
15
16
|
export default BaseChordDisplay;
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
1
|
declare const DisplayError: ({ model, }: {
|
|
3
2
|
model: {
|
|
4
3
|
renderProps: {
|
|
@@ -6,5 +5,5 @@ declare const DisplayError: ({ model, }: {
|
|
|
6
5
|
};
|
|
7
6
|
error: unknown;
|
|
8
7
|
};
|
|
9
|
-
}) =>
|
|
8
|
+
}) => import("react/jsx-runtime").JSX.Element;
|
|
10
9
|
export default DisplayError;
|
|
@@ -1,13 +1,7 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { observer } from 'mobx-react';
|
|
3
3
|
const DisplayError = observer(function ({ model, }) {
|
|
4
4
|
const { renderProps: { radius }, error, } = model;
|
|
5
|
-
return (
|
|
6
|
-
React.createElement("defs", null,
|
|
7
|
-
React.createElement("pattern", { id: "diagonalHatch", width: "10", height: "10", patternTransform: "rotate(45 0 0)", patternUnits: "userSpaceOnUse" },
|
|
8
|
-
React.createElement("line", { x1: "0", y1: "0", x2: "0", y2: "10", style: { stroke: 'rgba(255,0,0,0.5)', strokeWidth: 10 } }))),
|
|
9
|
-
React.createElement("circle", { cx: "0", cy: "0", r: radius, fill: "#ffb4b4" }),
|
|
10
|
-
React.createElement("circle", { cx: "0", cy: "0", r: radius, fill: "url(#diagonalHatch)" }),
|
|
11
|
-
React.createElement("text", { x: "0", y: "0", transform: "rotate(90 0 0)", dominantBaseline: "middle", textAnchor: "middle" }, String(error))));
|
|
5
|
+
return (_jsxs("g", { children: [_jsx("defs", { children: _jsx("pattern", { id: "diagonalHatch", width: "10", height: "10", patternTransform: "rotate(45 0 0)", patternUnits: "userSpaceOnUse", children: _jsx("line", { x1: "0", y1: "0", x2: "0", y2: "10", style: { stroke: 'rgba(255,0,0,0.5)', strokeWidth: 10 } }) }) }), _jsx("circle", { cx: "0", cy: "0", r: radius, fill: "#ffb4b4" }), _jsx("circle", { cx: "0", cy: "0", r: radius, fill: "url(#diagonalHatch)" }), _jsx("text", { x: "0", y: "0", transform: "rotate(90 0 0)", dominantBaseline: "middle", textAnchor: "middle", children: String(error) })] }));
|
|
12
6
|
});
|
|
13
7
|
export default DisplayError;
|
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
1
|
declare const Loading: ({ model: { renderProps: { radius }, }, }: {
|
|
3
2
|
model: {
|
|
4
3
|
renderProps: {
|
|
5
4
|
radius: number;
|
|
6
5
|
};
|
|
7
6
|
};
|
|
8
|
-
}) =>
|
|
7
|
+
}) => import("react/jsx-runtime").JSX.Element | null;
|
|
9
8
|
export default Loading;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect, useState } from 'react';
|
|
3
3
|
import { observer } from 'mobx-react';
|
|
4
|
+
import { makeStyles } from 'tss-react/mui';
|
|
4
5
|
const useStyles = makeStyles()(theme => {
|
|
5
6
|
const offset = 2;
|
|
6
7
|
const duration = 1.4;
|
|
@@ -45,7 +46,6 @@ const useStyles = makeStyles()(theme => {
|
|
|
45
46
|
});
|
|
46
47
|
const Loading = observer(function ({ model: { renderProps: { radius }, }, }) {
|
|
47
48
|
const { classes } = useStyles();
|
|
48
|
-
// only show the loading message after 400ms to prevent excessive flickering
|
|
49
49
|
const [shown, setShown] = useState(false);
|
|
50
50
|
useEffect(() => {
|
|
51
51
|
const timeout = setTimeout(() => {
|
|
@@ -55,13 +55,6 @@ const Loading = observer(function ({ model: { renderProps: { radius }, }, }) {
|
|
|
55
55
|
clearTimeout(timeout);
|
|
56
56
|
};
|
|
57
57
|
});
|
|
58
|
-
return !shown ? null : (
|
|
59
|
-
React.createElement("defs", null,
|
|
60
|
-
React.createElement("pattern", { id: "diagonalHatch", width: "10", height: "10", patternTransform: "rotate(45 0 0)", patternUnits: "userSpaceOnUse" },
|
|
61
|
-
React.createElement("line", { x1: "0", y1: "0", x2: "0", y2: "10", style: { stroke: 'rgba(255,255,255,0.5)', strokeWidth: 10 } }))),
|
|
62
|
-
React.createElement("circle", { cx: "0", cy: "0", r: radius, fill: "#f1f1f1" }),
|
|
63
|
-
React.createElement("circle", { cx: "0", cy: "0", r: radius, fill: "url(#diagonalHatch)" }),
|
|
64
|
-
React.createElement("text", { x: "0", y: "0", transform: "rotate(90 0 0)", dominantBaseline: "middle", textAnchor: "middle" }, "Loading\u2026"),
|
|
65
|
-
React.createElement("circle", { className: classes.path, fill: "none", strokeWidth: "4", strokeLinecap: "round", cx: "0", cy: "0", r: "60" })));
|
|
58
|
+
return !shown ? null : (_jsxs("g", { children: [_jsx("defs", { children: _jsx("pattern", { id: "diagonalHatch", width: "10", height: "10", patternTransform: "rotate(45 0 0)", patternUnits: "userSpaceOnUse", children: _jsx("line", { x1: "0", y1: "0", x2: "0", y2: "10", style: { stroke: 'rgba(255,255,255,0.5)', strokeWidth: 10 } }) }) }), _jsx("circle", { cx: "0", cy: "0", r: radius, fill: "#f1f1f1" }), _jsx("circle", { cx: "0", cy: "0", r: radius, fill: "url(#diagonalHatch)" }), _jsx("text", { x: "0", y: "0", transform: "rotate(90 0 0)", dominantBaseline: "middle", textAnchor: "middle", children: "Loading\u2026" }), _jsx("circle", { className: classes.path, fill: "none", strokeWidth: "4", strokeLinecap: "round", cx: "0", cy: "0", r: "60" })] }));
|
|
66
59
|
});
|
|
67
60
|
export default Loading;
|
|
@@ -1,12 +1,6 @@
|
|
|
1
1
|
import { ConfigurationSchema } from '@jbrowse/core/configuration';
|
|
2
|
-
|
|
3
|
-
* #config BaseChordDisplay
|
|
4
|
-
*/
|
|
5
|
-
function x() { } // eslint-disable-line @typescript-eslint/no-unused-vars
|
|
2
|
+
function x() { }
|
|
6
3
|
const baseChordDisplayConfig = ConfigurationSchema('BaseChordDisplay', {
|
|
7
|
-
/**
|
|
8
|
-
* #slot
|
|
9
|
-
*/
|
|
10
4
|
onChordClick: {
|
|
11
5
|
type: 'boolean',
|
|
12
6
|
description: 'callback that should be run when a chord in the track is clicked',
|
|
@@ -14,9 +8,6 @@ const baseChordDisplayConfig = ConfigurationSchema('BaseChordDisplay', {
|
|
|
14
8
|
contextVariable: ['feature', 'track', 'pluginManager'],
|
|
15
9
|
},
|
|
16
10
|
}, {
|
|
17
|
-
/**
|
|
18
|
-
* #identifier
|
|
19
|
-
*/
|
|
20
11
|
explicitIdentifier: 'displayId',
|
|
21
12
|
});
|
|
22
13
|
export { baseChordDisplayConfig };
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
export { default as BaseChordDisplayComponent } from './components/BaseChordDisplay';
|
|
2
|
-
export { BaseChordDisplayModel } from './
|
|
3
|
-
export { baseChordDisplayConfig } from './
|
|
2
|
+
export { BaseChordDisplayModel } from './model';
|
|
3
|
+
export { baseChordDisplayConfig } from './configSchema';
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
export { default as BaseChordDisplayComponent } from './components/BaseChordDisplay';
|
|
2
|
-
export { BaseChordDisplayModel } from './
|
|
3
|
-
export { baseChordDisplayConfig } from './
|
|
2
|
+
export { BaseChordDisplayModel } from './model';
|
|
3
|
+
export { baseChordDisplayConfig } from './configSchema';
|
|
@@ -1,9 +1,6 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import { AnyReactComponentType, Feature } from '@jbrowse/core/util';
|
|
5
|
-
import { ExportSvgOptions } from '../../CircularView/models/model';
|
|
6
|
-
import { ThemeOptions } from '@mui/material';
|
|
1
|
+
import type { ExportSvgOptions } from '../CircularView/model';
|
|
2
|
+
import type { AnyReactComponentType, Feature } from '@jbrowse/core/util';
|
|
3
|
+
import type { ThemeOptions } from '@mui/material';
|
|
7
4
|
export declare const BaseChordDisplayModel: import("mobx-state-tree").IModelType<{
|
|
8
5
|
id: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
|
|
9
6
|
type: import("mobx-state-tree").ISimpleType<string>;
|
|
@@ -54,9 +51,7 @@ export declare const BaseChordDisplayModel: import("mobx-state-tree").IModelType
|
|
|
54
51
|
rendererTypeName: string;
|
|
55
52
|
error: unknown;
|
|
56
53
|
message: string | undefined;
|
|
57
|
-
} & import("mobx-state-tree").IStateTreeNode<import("mobx-state-tree"
|
|
58
|
-
* #getter
|
|
59
|
-
*/).IModelType<{
|
|
54
|
+
} & import("mobx-state-tree").IStateTreeNode<import("mobx-state-tree").IModelType<{
|
|
60
55
|
id: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
|
|
61
56
|
type: import("mobx-state-tree").ISimpleType<string>;
|
|
62
57
|
rpcDriverName: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<string>>;
|
|
@@ -88,64 +83,27 @@ export declare const BaseChordDisplayModel: import("mobx-state-tree").IModelType
|
|
|
88
83
|
renderingComponent: undefined | AnyReactComponentType;
|
|
89
84
|
refNameMap: Record<string, string> | undefined;
|
|
90
85
|
} & {
|
|
91
|
-
/**
|
|
92
|
-
* #action
|
|
93
|
-
*/
|
|
94
86
|
onChordClick(feature: Feature): void;
|
|
95
87
|
} & {
|
|
96
|
-
|
|
97
|
-
* #getter
|
|
98
|
-
*/
|
|
99
|
-
readonly blockDefinitions: import("../../CircularView/models/slices").Slice[];
|
|
100
|
-
/**
|
|
101
|
-
* #method
|
|
102
|
-
*/
|
|
88
|
+
readonly blockDefinitions: import("../CircularView/slices").Slice[];
|
|
103
89
|
renderProps(): any;
|
|
104
|
-
|
|
105
|
-
* #getter
|
|
106
|
-
* the pluggable element type object for this display's renderer
|
|
107
|
-
*/
|
|
108
|
-
readonly rendererType: RendererType | undefined;
|
|
109
|
-
/**
|
|
110
|
-
* #method
|
|
111
|
-
*/
|
|
112
|
-
isCompatibleWithRenderer(renderer: RendererType): renderer is CircularChordRendererType;
|
|
113
|
-
/**
|
|
114
|
-
* #getter
|
|
115
|
-
* returns a string feature ID if the globally-selected object
|
|
116
|
-
* is probably a feature
|
|
117
|
-
*/
|
|
90
|
+
readonly rendererType: import("@jbrowse/core/pluggableElementTypes").RendererType | undefined;
|
|
118
91
|
readonly selectedFeatureId: string | undefined;
|
|
119
92
|
} & {
|
|
120
|
-
/**
|
|
121
|
-
* #action
|
|
122
|
-
*/
|
|
123
93
|
renderStarted(): void;
|
|
124
|
-
/**
|
|
125
|
-
* #action
|
|
126
|
-
*/
|
|
127
94
|
renderSuccess({ message, data, reactElement, html, renderingComponent, }: {
|
|
128
|
-
message
|
|
129
|
-
data
|
|
130
|
-
html
|
|
131
|
-
reactElement
|
|
132
|
-
renderingComponent
|
|
95
|
+
message?: string;
|
|
96
|
+
data?: any;
|
|
97
|
+
html?: string;
|
|
98
|
+
reactElement?: React.ReactElement;
|
|
99
|
+
renderingComponent?: AnyReactComponentType;
|
|
133
100
|
}): void;
|
|
134
|
-
/**
|
|
135
|
-
* #action
|
|
136
|
-
*/
|
|
137
101
|
renderError(error: unknown): void;
|
|
138
|
-
/**
|
|
139
|
-
* #action
|
|
140
|
-
*/
|
|
141
102
|
setRefNameMap(refNameMap: Record<string, string>): void;
|
|
142
103
|
} & {
|
|
143
104
|
afterAttach(): void;
|
|
144
105
|
} & {
|
|
145
|
-
/**
|
|
146
|
-
* #method
|
|
147
|
-
*/
|
|
148
106
|
renderSvg(opts: ExportSvgOptions & {
|
|
149
107
|
theme?: ThemeOptions;
|
|
150
|
-
}): Promise<
|
|
108
|
+
}): Promise<import("react/jsx-runtime").JSX.Element>;
|
|
151
109
|
}, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>;
|