@jbrowse/plugin-circular-view 1.7.11 → 2.1.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 +2 -7
- package/dist/BaseChordDisplay/components/BaseChordDisplay.js +18 -48
- package/dist/BaseChordDisplay/components/BaseChordDisplay.js.map +1 -0
- package/dist/BaseChordDisplay/components/DisplayError.d.ts +9 -4
- package/dist/BaseChordDisplay/components/DisplayError.js +24 -67
- package/dist/BaseChordDisplay/components/DisplayError.js.map +1 -0
- package/dist/BaseChordDisplay/components/Loading.d.ts +2 -3
- package/dist/BaseChordDisplay/components/Loading.js +98 -112
- package/dist/BaseChordDisplay/components/Loading.js.map +1 -0
- package/dist/BaseChordDisplay/components/RpcRenderedSvgGroup.d.ts +3 -3
- package/dist/BaseChordDisplay/components/RpcRenderedSvgGroup.js +80 -91
- package/dist/BaseChordDisplay/components/RpcRenderedSvgGroup.js.map +1 -0
- package/dist/BaseChordDisplay/index.d.ts +1 -1
- package/dist/BaseChordDisplay/index.js +12 -30
- package/dist/BaseChordDisplay/index.js.map +1 -0
- package/dist/BaseChordDisplay/models/BaseChordDisplayModel.d.ts +10 -10
- package/dist/BaseChordDisplay/models/BaseChordDisplayModel.js +204 -232
- package/dist/BaseChordDisplay/models/BaseChordDisplayModel.js.map +1 -0
- package/dist/BaseChordDisplay/models/baseChordDisplayConfig.js +12 -18
- package/dist/BaseChordDisplay/models/baseChordDisplayConfig.js.map +1 -0
- package/dist/BaseChordDisplay/models/renderReaction.js +115 -138
- package/dist/BaseChordDisplay/models/renderReaction.js.map +1 -0
- package/dist/CircularView/components/CircularView.js +111 -185
- package/dist/CircularView/components/CircularView.js.map +1 -0
- package/dist/CircularView/components/ImportForm.js +77 -92
- package/dist/CircularView/components/ImportForm.js.map +1 -0
- package/dist/CircularView/components/Ruler.js +148 -194
- package/dist/CircularView/components/Ruler.js.map +1 -0
- package/dist/CircularView/models/CircularView.d.ts +3 -3
- package/dist/CircularView/models/CircularView.js +346 -409
- package/dist/CircularView/models/CircularView.js.map +1 -0
- package/dist/CircularView/models/slices.js +90 -104
- package/dist/CircularView/models/slices.js.map +1 -0
- package/dist/CircularView/models/viewportVisibleRegion.js +229 -264
- package/dist/CircularView/models/viewportVisibleRegion.js.map +1 -0
- package/dist/index.d.ts +3 -1
- package/dist/index.js +147 -176
- package/dist/index.js.map +1 -0
- package/esm/BaseChordDisplay/components/BaseChordDisplay.d.ts +4 -0
- package/esm/BaseChordDisplay/components/BaseChordDisplay.js +17 -0
- package/esm/BaseChordDisplay/components/BaseChordDisplay.js.map +1 -0
- package/esm/BaseChordDisplay/components/DisplayError.d.ts +9 -0
- package/esm/BaseChordDisplay/components/DisplayError.js +21 -0
- package/esm/BaseChordDisplay/components/DisplayError.js.map +1 -0
- package/esm/BaseChordDisplay/components/Loading.d.ts +9 -0
- package/esm/BaseChordDisplay/components/Loading.js +66 -0
- package/esm/BaseChordDisplay/components/Loading.js.map +1 -0
- package/esm/BaseChordDisplay/components/RpcRenderedSvgGroup.d.ts +4 -0
- package/esm/BaseChordDisplay/components/RpcRenderedSvgGroup.js +48 -0
- package/esm/BaseChordDisplay/components/RpcRenderedSvgGroup.js.map +1 -0
- package/esm/BaseChordDisplay/index.d.ts +3 -0
- package/esm/BaseChordDisplay/index.js +4 -0
- package/esm/BaseChordDisplay/index.js.map +1 -0
- package/esm/BaseChordDisplay/models/BaseChordDisplayModel.d.ts +99 -0
- package/esm/BaseChordDisplay/models/BaseChordDisplayModel.js +181 -0
- package/esm/BaseChordDisplay/models/BaseChordDisplayModel.js.map +1 -0
- package/esm/BaseChordDisplay/models/baseChordDisplayConfig.d.ts +2 -0
- package/esm/BaseChordDisplay/models/baseChordDisplayConfig.js +11 -0
- package/esm/BaseChordDisplay/models/baseChordDisplayConfig.js.map +1 -0
- package/esm/BaseChordDisplay/models/renderReaction.d.ts +30 -0
- package/esm/BaseChordDisplay/models/renderReaction.js +52 -0
- package/esm/BaseChordDisplay/models/renderReaction.js.map +1 -0
- package/esm/CircularView/components/CircularView.d.ts +4 -0
- package/esm/CircularView/components/CircularView.js +121 -0
- package/esm/CircularView/components/CircularView.js.map +1 -0
- package/esm/CircularView/components/ImportForm.d.ts +5 -0
- package/esm/CircularView/components/ImportForm.js +40 -0
- package/esm/CircularView/components/ImportForm.js.map +1 -0
- package/esm/CircularView/components/Ruler.d.ts +5 -0
- package/esm/CircularView/components/Ruler.js +126 -0
- package/esm/CircularView/components/Ruler.js.map +1 -0
- package/esm/CircularView/models/CircularView.d.ts +97 -0
- package/esm/CircularView/models/CircularView.js +317 -0
- package/esm/CircularView/models/CircularView.js.map +1 -0
- package/esm/CircularView/models/slices.d.ts +27 -0
- package/esm/CircularView/models/slices.js +53 -0
- package/esm/CircularView/models/slices.js.map +1 -0
- package/esm/CircularView/models/viewportVisibleRegion.d.ts +6 -0
- package/esm/CircularView/models/viewportVisibleRegion.js +223 -0
- package/esm/CircularView/models/viewportVisibleRegion.js.map +1 -0
- package/esm/index.d.ts +10 -0
- package/esm/index.js +49 -0
- package/esm/index.js.map +1 -0
- package/package.json +20 -12
- package/src/BaseChordDisplay/components/BaseChordDisplay.tsx +13 -25
- package/src/BaseChordDisplay/components/DisplayError.js +64 -66
- package/src/BaseChordDisplay/components/Loading.tsx +104 -107
- package/src/BaseChordDisplay/components/RpcRenderedSvgGroup.js +44 -51
- package/src/BaseChordDisplay/index.ts +1 -1
- package/src/BaseChordDisplay/models/BaseChordDisplayModel.ts +2 -1
- package/src/CircularView/components/CircularView.js +17 -16
- package/src/CircularView/components/ImportForm.tsx +5 -5
- package/src/CircularView/components/Ruler.js +4 -3
- package/src/CircularView/models/CircularView.ts +29 -42
- package/src/CircularView/models/slices.ts +2 -7
- package/src/index.ts +5 -2
- package/dist/CircularView/models/slices.test.js +0 -83
- package/dist/CircularView/models/viewportVisibleRegion.test.js +0 -130
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare function cartesianToPolar(x: number, y: number): number[];
|
|
2
|
+
export declare function thetaRangesOverlap(r1start: number, r1length: number, r2start: number, r2length: number): boolean;
|
|
3
|
+
export declare function viewportVisibleSection(viewSides: [number, number, number, number], circleCenter: [number, number], circleRadius: number): {
|
|
4
|
+
rho: number[];
|
|
5
|
+
theta: number[];
|
|
6
|
+
};
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
function findCircleIntersectionX(y, cx, cy, r, resultArray) {
|
|
2
|
+
const d = Math.abs(y - cy);
|
|
3
|
+
if (d > r) {
|
|
4
|
+
return;
|
|
5
|
+
}
|
|
6
|
+
if (d === r) {
|
|
7
|
+
resultArray.push([cx, y]);
|
|
8
|
+
}
|
|
9
|
+
const solution = Math.sqrt(r * r - d * d);
|
|
10
|
+
resultArray.push([cx - solution, y]);
|
|
11
|
+
resultArray.push([cx + solution, y]);
|
|
12
|
+
}
|
|
13
|
+
function findCircleIntersectionY(x, cx, cy, r, resultArray) {
|
|
14
|
+
const d = Math.abs(x - cx);
|
|
15
|
+
if (d > r) {
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
if (d === r) {
|
|
19
|
+
resultArray.push([x, cy]);
|
|
20
|
+
}
|
|
21
|
+
const solution = Math.sqrt(r * r - d * d);
|
|
22
|
+
resultArray.push([x, cy - solution]);
|
|
23
|
+
resultArray.push([x, cy + solution]);
|
|
24
|
+
}
|
|
25
|
+
function cartesianToTheta(x, y) {
|
|
26
|
+
let theta = (Math.atan(y / x) + 2 * Math.PI) % (2 * Math.PI);
|
|
27
|
+
if (x < 0) {
|
|
28
|
+
if (y <= 0) {
|
|
29
|
+
theta += Math.PI;
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
theta -= Math.PI;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return theta;
|
|
36
|
+
}
|
|
37
|
+
export function cartesianToPolar(x, y) {
|
|
38
|
+
const rho = Math.sqrt(x * x + y * y);
|
|
39
|
+
if (rho === 0) {
|
|
40
|
+
return [0, 0];
|
|
41
|
+
}
|
|
42
|
+
const theta = cartesianToTheta(x, y);
|
|
43
|
+
return [rho, theta];
|
|
44
|
+
}
|
|
45
|
+
const twoPi = 2 * Math.PI;
|
|
46
|
+
export function thetaRangesOverlap(r1start, r1length, r2start, r2length) {
|
|
47
|
+
if (r1length <= 0 || r2length <= 0) {
|
|
48
|
+
return false;
|
|
49
|
+
}
|
|
50
|
+
if (r1length + 0.0001 >= twoPi || r2length + 0.0001 >= twoPi) {
|
|
51
|
+
return true;
|
|
52
|
+
}
|
|
53
|
+
// put both range starts between 2π and 4π
|
|
54
|
+
r1start = (((r1start % twoPi) + twoPi) % twoPi) + twoPi;
|
|
55
|
+
r2start = (((r2start % twoPi) + twoPi) % twoPi) + twoPi;
|
|
56
|
+
if (r1start < r2start + r2length && r1start + r1length > r2start) {
|
|
57
|
+
return true;
|
|
58
|
+
}
|
|
59
|
+
// move r2 2π to the left and check
|
|
60
|
+
r2start -= twoPi;
|
|
61
|
+
if (r1start < r2start + r2length && r1start + r1length > r2start) {
|
|
62
|
+
return true;
|
|
63
|
+
}
|
|
64
|
+
// move it 2π to the right and check
|
|
65
|
+
r2start += twoPi + twoPi;
|
|
66
|
+
return r1start < r2start + r2length && r1start + r1length > r2start;
|
|
67
|
+
}
|
|
68
|
+
// return which arc range has any part of the circle visible in the viewport
|
|
69
|
+
export function viewportVisibleSection(viewSides, circleCenter, circleRadius) {
|
|
70
|
+
let [viewL, viewR, viewT, viewB] = viewSides;
|
|
71
|
+
const [cx, cy] = circleCenter;
|
|
72
|
+
// transform coordinate system to center of circle
|
|
73
|
+
viewL -= cx;
|
|
74
|
+
viewR -= cx;
|
|
75
|
+
viewT -= cy;
|
|
76
|
+
viewB -= cy;
|
|
77
|
+
const centerIsInsideViewport = viewL < 0 && viewR > 0 && viewT < 0 && viewB > 0;
|
|
78
|
+
if (centerIsInsideViewport) {
|
|
79
|
+
const vertices = [
|
|
80
|
+
[viewL, viewT],
|
|
81
|
+
[viewR, viewT],
|
|
82
|
+
[viewL, viewB],
|
|
83
|
+
[viewR, viewB],
|
|
84
|
+
];
|
|
85
|
+
let maxRho = -Infinity;
|
|
86
|
+
for (let i = 0; i < vertices.length; i += 1) {
|
|
87
|
+
const [x, y] = vertices[i];
|
|
88
|
+
const rho = Math.sqrt(x * x + y * y);
|
|
89
|
+
if (rho > maxRho) {
|
|
90
|
+
maxRho = rho;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return {
|
|
94
|
+
rho: [0, Math.min(circleRadius, maxRho)],
|
|
95
|
+
theta: [0, 2 * Math.PI],
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
// const viewportCompletelyContainsCircle =
|
|
99
|
+
// circleCenter[0] - viewL >= circleRadius &&
|
|
100
|
+
// viewR - circleCenter[0] >= circleRadius &&
|
|
101
|
+
// circleCenter[1] - viewT >= circleRadius &&
|
|
102
|
+
// viewB - circleCenter[1] >= circleRadius
|
|
103
|
+
// if (viewportCompletelyContainsCircle) {
|
|
104
|
+
// return [0, 2 * Math.PI]
|
|
105
|
+
// }
|
|
106
|
+
// const distToCenterSquared = ([x, y]) => {
|
|
107
|
+
// const [cx, cy] = circleCenter
|
|
108
|
+
// const sq = n => n * n
|
|
109
|
+
// return sq(x - cx) + sq(y - cy)
|
|
110
|
+
// }
|
|
111
|
+
// const circleRadiusSquared = circleRadius * circleRadius
|
|
112
|
+
// const tlInside = distToCenterSquared([viewL, viewT]) <= circleRadiusSquared
|
|
113
|
+
// const trInside = distToCenterSquared([viewR, viewT]) <= circleRadiusSquared
|
|
114
|
+
// const blInside = distToCenterSquared([viewL, viewB]) <= circleRadiusSquared
|
|
115
|
+
// const brInside = distToCenterSquared([viewR, viewB]) <= circleRadiusSquared
|
|
116
|
+
// const noIntersection = !tlInside && !trInside && !blInside && !brInside
|
|
117
|
+
// if (noIntersection) return undefined
|
|
118
|
+
// const circleCompletelyContainsViewport =
|
|
119
|
+
// tlInside && trInside && blInside && brInside
|
|
120
|
+
// if (circleCompletelyContainsViewport) {
|
|
121
|
+
// // viewport is in the circle, but the center is not in it, so take max
|
|
122
|
+
// // and min of thetas to the center
|
|
123
|
+
// const thetas = [
|
|
124
|
+
// Math.atan(viewT / viewL),
|
|
125
|
+
// Math.atan(viewT / viewR),
|
|
126
|
+
// Math.atan(viewB / viewL),
|
|
127
|
+
// Math.atan(viewB / viewR),
|
|
128
|
+
// ]
|
|
129
|
+
// return [Math.min(...thetas), Math.max(...thetas)]
|
|
130
|
+
// }
|
|
131
|
+
// if we get here, the viewport is partly in, partly out of the circle
|
|
132
|
+
// const viewLIntersects = Math.abs(viewL - circleCenter[0]) <= circleRadius
|
|
133
|
+
// const viewRIntersects = Math.abs(viewR - circleCenter[0]) <= circleRadius
|
|
134
|
+
// const viewTIntersects = Math.abs(viewT - circleCenter[1]) <= circleRadius
|
|
135
|
+
// const viewBIntersects = Math.abs(viewB - circleCenter[1]) <= circleRadius
|
|
136
|
+
// const numIntersectingSides =
|
|
137
|
+
// Number(viewLIntersects) +
|
|
138
|
+
// Number(viewRIntersects) +
|
|
139
|
+
// Number(viewTIntersects) +
|
|
140
|
+
// Number(viewBIntersects)
|
|
141
|
+
// if (numIntersectingSides === 4) return [0, 2 * Math.PI]
|
|
142
|
+
// if (numIntersectingSides === 3) {
|
|
143
|
+
// // TODO calculate the thetas of the
|
|
144
|
+
// } else if (numIntersectingSides === 2) {
|
|
145
|
+
// // TODO calculate the thetas of the 2 intersection points
|
|
146
|
+
// } else if (numIntersectingSides === 1) {
|
|
147
|
+
// // TODO calculate the thetas of the 1-2 intersection points of the line, and the angle between
|
|
148
|
+
// }
|
|
149
|
+
// make a list of vertices-of-interest that lie inside both shapes to examine
|
|
150
|
+
// to determine the range covered by their intersection
|
|
151
|
+
// transform coordinates to have the circle as the origin and find the intersections
|
|
152
|
+
// of the circle and the view rectangle
|
|
153
|
+
const vertices = [
|
|
154
|
+
[viewL, viewT],
|
|
155
|
+
[viewR, viewT],
|
|
156
|
+
[viewL, viewB],
|
|
157
|
+
[viewR, viewB],
|
|
158
|
+
];
|
|
159
|
+
findCircleIntersectionY(viewL, 0, 0, circleRadius, vertices);
|
|
160
|
+
findCircleIntersectionY(viewR, 0, 0, circleRadius, vertices);
|
|
161
|
+
findCircleIntersectionX(viewT, 0, 0, circleRadius, vertices);
|
|
162
|
+
findCircleIntersectionX(viewB, 0, 0, circleRadius, vertices);
|
|
163
|
+
// for each edge, also look at the closest point to center if it is inside the circle
|
|
164
|
+
if (-viewL < circleRadius) {
|
|
165
|
+
vertices.push([viewL, 0]);
|
|
166
|
+
}
|
|
167
|
+
if (viewR < circleRadius) {
|
|
168
|
+
vertices.push([viewR, 0]);
|
|
169
|
+
}
|
|
170
|
+
if (-viewT < circleRadius) {
|
|
171
|
+
vertices.push([0, viewT]);
|
|
172
|
+
}
|
|
173
|
+
if (viewB < circleRadius) {
|
|
174
|
+
vertices.push([0, viewB]);
|
|
175
|
+
}
|
|
176
|
+
// const verticesOriginal = vertices.map(([x, y]) => [x + cx, y + cy])
|
|
177
|
+
// now convert them all to polar and take the max and min of rho and theta
|
|
178
|
+
// const viewportCenterTheta = cartesianToTheta(viewR + viewL, viewT + viewB)
|
|
179
|
+
const reflect = viewL >= 0 ? -1 : 1;
|
|
180
|
+
// viewportCenterTheta < Math.PI / 2 || viewportCenterTheta > 1.5 * Math.PI
|
|
181
|
+
// ? -1
|
|
182
|
+
// : 1
|
|
183
|
+
let rhoMin = Infinity;
|
|
184
|
+
let rhoMax = -Infinity;
|
|
185
|
+
let thetaMin = Infinity;
|
|
186
|
+
let thetaMax = -Infinity;
|
|
187
|
+
for (let i = 0; i < vertices.length; i += 1) {
|
|
188
|
+
// ignore vertex if outside the viewport
|
|
189
|
+
const [vx, vy] = vertices[i];
|
|
190
|
+
if (vx >= viewL && vx <= viewR && vy >= viewT && vy <= viewB) {
|
|
191
|
+
const [rho, theta] = cartesianToPolar(vx * reflect, vy * reflect);
|
|
192
|
+
// ignore vertex if outside the circle
|
|
193
|
+
if (rho <= circleRadius + 0.001) {
|
|
194
|
+
// ignore theta if rho is 0
|
|
195
|
+
if (theta < thetaMin && rho > 0.0001) {
|
|
196
|
+
thetaMin = theta;
|
|
197
|
+
}
|
|
198
|
+
if (theta > thetaMax && rho > 0.0001) {
|
|
199
|
+
thetaMax = theta;
|
|
200
|
+
}
|
|
201
|
+
if (rho < rhoMin) {
|
|
202
|
+
rhoMin = rho;
|
|
203
|
+
}
|
|
204
|
+
if (rho > rhoMax) {
|
|
205
|
+
rhoMax = rho;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
if (reflect === -1) {
|
|
211
|
+
thetaMin += Math.PI;
|
|
212
|
+
thetaMax += Math.PI;
|
|
213
|
+
}
|
|
214
|
+
if (thetaMin > 2 * Math.PI && thetaMax > 2 * Math.PI) {
|
|
215
|
+
thetaMin -= 2 * Math.PI;
|
|
216
|
+
thetaMax -= 2 * Math.PI;
|
|
217
|
+
}
|
|
218
|
+
return {
|
|
219
|
+
rho: [rhoMin, Math.min(circleRadius, rhoMax)],
|
|
220
|
+
theta: [thetaMin, thetaMax],
|
|
221
|
+
};
|
|
222
|
+
}
|
|
223
|
+
//# sourceMappingURL=viewportVisibleRegion.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"viewportVisibleRegion.js","sourceRoot":"","sources":["../../../src/CircularView/models/viewportVisibleRegion.ts"],"names":[],"mappings":"AAAA,SAAS,uBAAuB,CAC9B,CAAS,EACT,EAAU,EACV,EAAU,EACV,CAAS,EACT,WAA+B;IAE/B,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAA;IAC1B,IAAI,CAAC,GAAG,CAAC,EAAE;QACT,OAAM;KACP;IACD,IAAI,CAAC,KAAK,CAAC,EAAE;QACX,WAAW,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAA;KAC1B;IACD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;IACzC,WAAW,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAA;IACpC,WAAW,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAA;AACtC,CAAC;AAED,SAAS,uBAAuB,CAC9B,CAAS,EACT,EAAU,EACV,EAAU,EACV,CAAS,EACT,WAA+B;IAE/B,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAA;IAC1B,IAAI,CAAC,GAAG,CAAC,EAAE;QACT,OAAM;KACP;IACD,IAAI,CAAC,KAAK,CAAC,EAAE;QACX,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAA;KAC1B;IACD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;IACzC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAA;IACpC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAA;AACtC,CAAC;AAED,SAAS,gBAAgB,CAAC,CAAS,EAAE,CAAS;IAC5C,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAA;IAC5D,IAAI,CAAC,GAAG,CAAC,EAAE;QACT,IAAI,CAAC,IAAI,CAAC,EAAE;YACV,KAAK,IAAI,IAAI,CAAC,EAAE,CAAA;SACjB;aAAM;YACL,KAAK,IAAI,IAAI,CAAC,EAAE,CAAA;SACjB;KACF;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,CAAS,EAAE,CAAS;IACnD,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;IACpC,IAAI,GAAG,KAAK,CAAC,EAAE;QACb,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;KACd;IACD,MAAM,KAAK,GAAG,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IACpC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;AACrB,CAAC;AAED,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,CAAA;AACzB,MAAM,UAAU,kBAAkB,CAChC,OAAe,EACf,QAAgB,EAChB,OAAe,EACf,QAAgB;IAEhB,IAAI,QAAQ,IAAI,CAAC,IAAI,QAAQ,IAAI,CAAC,EAAE;QAClC,OAAO,KAAK,CAAA;KACb;IACD,IAAI,QAAQ,GAAG,MAAM,IAAI,KAAK,IAAI,QAAQ,GAAG,MAAM,IAAI,KAAK,EAAE;QAC5D,OAAO,IAAI,CAAA;KACZ;IAED,0CAA0C;IAC1C,OAAO,GAAG,CAAC,CAAC,CAAC,OAAO,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,KAAK,CAAA;IACvD,OAAO,GAAG,CAAC,CAAC,CAAC,OAAO,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,KAAK,CAAA;IAEvD,IAAI,OAAO,GAAG,OAAO,GAAG,QAAQ,IAAI,OAAO,GAAG,QAAQ,GAAG,OAAO,EAAE;QAChE,OAAO,IAAI,CAAA;KACZ;IAED,mCAAmC;IACnC,OAAO,IAAI,KAAK,CAAA;IAChB,IAAI,OAAO,GAAG,OAAO,GAAG,QAAQ,IAAI,OAAO,GAAG,QAAQ,GAAG,OAAO,EAAE;QAChE,OAAO,IAAI,CAAA;KACZ;IAED,oCAAoC;IACpC,OAAO,IAAI,KAAK,GAAG,KAAK,CAAA;IACxB,OAAO,OAAO,GAAG,OAAO,GAAG,QAAQ,IAAI,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAA;AACrE,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,sBAAsB,CACpC,SAA2C,EAC3C,YAA8B,EAC9B,YAAoB;IAEpB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,SAAS,CAAA;IAC5C,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,YAAY,CAAA;IAE7B,kDAAkD;IAClD,KAAK,IAAI,EAAE,CAAA;IACX,KAAK,IAAI,EAAE,CAAA;IACX,KAAK,IAAI,EAAE,CAAA;IACX,KAAK,IAAI,EAAE,CAAA;IAEX,MAAM,sBAAsB,GAC1B,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,CAAA;IAElD,IAAI,sBAAsB,EAAE;QAC1B,MAAM,QAAQ,GAAG;YACf,CAAC,KAAK,EAAE,KAAK,CAAC;YACd,CAAC,KAAK,EAAE,KAAK,CAAC;YACd,CAAC,KAAK,EAAE,KAAK,CAAC;YACd,CAAC,KAAK,EAAE,KAAK,CAAC;SACf,CAAA;QACD,IAAI,MAAM,GAAG,CAAC,QAAQ,CAAA;QACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;YAC3C,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;YAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;YACpC,IAAI,GAAG,GAAG,MAAM,EAAE;gBAChB,MAAM,GAAG,GAAG,CAAA;aACb;SACF;QACD,OAAO;YACL,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;YACxC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;SACxB,CAAA;KACF;IACD,2CAA2C;IAC3C,+CAA+C;IAC/C,+CAA+C;IAC/C,+CAA+C;IAC/C,4CAA4C;IAE5C,0CAA0C;IAC1C,4BAA4B;IAC5B,IAAI;IAEJ,4CAA4C;IAC5C,kCAAkC;IAClC,0BAA0B;IAC1B,mCAAmC;IACnC,IAAI;IACJ,0DAA0D;IAE1D,8EAA8E;IAC9E,8EAA8E;IAC9E,8EAA8E;IAC9E,8EAA8E;IAE9E,0EAA0E;IAC1E,uCAAuC;IAEvC,2CAA2C;IAC3C,iDAAiD;IACjD,0CAA0C;IAC1C,2EAA2E;IAC3E,uCAAuC;IACvC,qBAAqB;IACrB,gCAAgC;IAChC,gCAAgC;IAChC,gCAAgC;IAChC,gCAAgC;IAChC,MAAM;IAEN,sDAAsD;IACtD,IAAI;IAEJ,sEAAsE;IAEtE,4EAA4E;IAC5E,4EAA4E;IAC5E,4EAA4E;IAC5E,4EAA4E;IAE5E,+BAA+B;IAC/B,8BAA8B;IAC9B,8BAA8B;IAC9B,8BAA8B;IAC9B,4BAA4B;IAE5B,0DAA0D;IAC1D,oCAAoC;IACpC,wCAAwC;IACxC,2CAA2C;IAC3C,8DAA8D;IAC9D,2CAA2C;IAC3C,mGAAmG;IACnG,IAAI;IAEJ,6EAA6E;IAC7E,uDAAuD;IAEvD,oFAAoF;IACpF,uCAAuC;IACvC,MAAM,QAAQ,GAAuB;QACnC,CAAC,KAAK,EAAE,KAAK,CAAC;QACd,CAAC,KAAK,EAAE,KAAK,CAAC;QACd,CAAC,KAAK,EAAE,KAAK,CAAC;QACd,CAAC,KAAK,EAAE,KAAK,CAAC;KACf,CAAA;IACD,uBAAuB,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAA;IAC5D,uBAAuB,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAA;IAC5D,uBAAuB,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAA;IAC5D,uBAAuB,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAA;IAE5D,qFAAqF;IACrF,IAAI,CAAC,KAAK,GAAG,YAAY,EAAE;QACzB,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAA;KAC1B;IACD,IAAI,KAAK,GAAG,YAAY,EAAE;QACxB,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAA;KAC1B;IACD,IAAI,CAAC,KAAK,GAAG,YAAY,EAAE;QACzB,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAA;KAC1B;IACD,IAAI,KAAK,GAAG,YAAY,EAAE;QACxB,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAA;KAC1B;IAED,sEAAsE;IAEtE,0EAA0E;IAE1E,6EAA6E;IAC7E,MAAM,OAAO,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACnC,2EAA2E;IAC3E,SAAS;IACT,QAAQ;IACR,IAAI,MAAM,GAAG,QAAQ,CAAA;IACrB,IAAI,MAAM,GAAG,CAAC,QAAQ,CAAA;IACtB,IAAI,QAAQ,GAAG,QAAQ,CAAA;IACvB,IAAI,QAAQ,GAAG,CAAC,QAAQ,CAAA;IACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;QAC3C,wCAAwC;QACxC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;QAC5B,IAAI,EAAE,IAAI,KAAK,IAAI,EAAE,IAAI,KAAK,IAAI,EAAE,IAAI,KAAK,IAAI,EAAE,IAAI,KAAK,EAAE;YAC5D,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,gBAAgB,CAAC,EAAE,GAAG,OAAO,EAAE,EAAE,GAAG,OAAO,CAAC,CAAA;YACjE,sCAAsC;YACtC,IAAI,GAAG,IAAI,YAAY,GAAG,KAAK,EAAE;gBAC/B,2BAA2B;gBAC3B,IAAI,KAAK,GAAG,QAAQ,IAAI,GAAG,GAAG,MAAM,EAAE;oBACpC,QAAQ,GAAG,KAAK,CAAA;iBACjB;gBACD,IAAI,KAAK,GAAG,QAAQ,IAAI,GAAG,GAAG,MAAM,EAAE;oBACpC,QAAQ,GAAG,KAAK,CAAA;iBACjB;gBACD,IAAI,GAAG,GAAG,MAAM,EAAE;oBAChB,MAAM,GAAG,GAAG,CAAA;iBACb;gBACD,IAAI,GAAG,GAAG,MAAM,EAAE;oBAChB,MAAM,GAAG,GAAG,CAAA;iBACb;aACF;SACF;KACF;IAED,IAAI,OAAO,KAAK,CAAC,CAAC,EAAE;QAClB,QAAQ,IAAI,IAAI,CAAC,EAAE,CAAA;QACnB,QAAQ,IAAI,IAAI,CAAC,EAAE,CAAA;KACpB;IAED,IAAI,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,IAAI,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,EAAE;QACpD,QAAQ,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,CAAA;QACvB,QAAQ,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,CAAA;KACxB;IAED,OAAO;QACL,GAAG,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;QAC7C,KAAK,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC;KAC5B,CAAA;AACH,CAAC"}
|
package/esm/index.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import PluginManager from '@jbrowse/core/PluginManager';
|
|
2
|
+
import Plugin from '@jbrowse/core/Plugin';
|
|
3
|
+
import { CircularViewModel, CircularViewStateModel } from './CircularView/models/CircularView';
|
|
4
|
+
export default class CircularViewPlugin extends Plugin {
|
|
5
|
+
name: string;
|
|
6
|
+
install(pluginManager: PluginManager): void;
|
|
7
|
+
configure(pluginManager: PluginManager): void;
|
|
8
|
+
}
|
|
9
|
+
export { BaseChordDisplayModel, baseChordDisplayConfig, BaseChordDisplayComponent, } from './BaseChordDisplay';
|
|
10
|
+
export type { CircularViewModel, CircularViewStateModel };
|
package/esm/index.js
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { lazy } from 'react';
|
|
2
|
+
import { when } from 'mobx';
|
|
3
|
+
import { isAbstractMenuManager } from '@jbrowse/core/util';
|
|
4
|
+
import Plugin from '@jbrowse/core/Plugin';
|
|
5
|
+
import ViewType from '@jbrowse/core/pluggableElementTypes/ViewType';
|
|
6
|
+
import DataUsageIcon from '@mui/icons-material/DataUsage';
|
|
7
|
+
import stateModelFactory from './CircularView/models/CircularView';
|
|
8
|
+
export default class CircularViewPlugin extends Plugin {
|
|
9
|
+
constructor() {
|
|
10
|
+
super(...arguments);
|
|
11
|
+
this.name = 'CircularViewPlugin';
|
|
12
|
+
}
|
|
13
|
+
install(pluginManager) {
|
|
14
|
+
pluginManager.addViewType(() => new ViewType({
|
|
15
|
+
ReactComponent: lazy(() => import('./CircularView/components/CircularView')),
|
|
16
|
+
stateModel: stateModelFactory(pluginManager),
|
|
17
|
+
name: 'CircularView',
|
|
18
|
+
}));
|
|
19
|
+
pluginManager.addToExtensionPoint('LaunchView-CircularView',
|
|
20
|
+
// @ts-ignore
|
|
21
|
+
async ({ session, assembly, loc, tracks = [], }) => {
|
|
22
|
+
const { assemblyManager } = session;
|
|
23
|
+
const view = session.addView('CircularView', {});
|
|
24
|
+
await when(() => view.initialized);
|
|
25
|
+
if (!assembly) {
|
|
26
|
+
throw new Error('No assembly provided when launching circular genome view');
|
|
27
|
+
}
|
|
28
|
+
const asm = await assemblyManager.waitForAssembly(assembly);
|
|
29
|
+
if (!asm) {
|
|
30
|
+
throw new Error(`Assembly "${assembly}" not found when launching circular genome view`);
|
|
31
|
+
}
|
|
32
|
+
view.setDisplayedRegions(asm.regions || []);
|
|
33
|
+
tracks.forEach(track => view.showTrack(track));
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
configure(pluginManager) {
|
|
37
|
+
if (isAbstractMenuManager(pluginManager.rootModel)) {
|
|
38
|
+
pluginManager.rootModel.appendToSubMenu(['Add'], {
|
|
39
|
+
label: 'Circular view',
|
|
40
|
+
icon: DataUsageIcon,
|
|
41
|
+
onClick: (session) => {
|
|
42
|
+
session.addView('CircularView', {});
|
|
43
|
+
},
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
export { BaseChordDisplayModel, baseChordDisplayConfig, BaseChordDisplayComponent, } from './BaseChordDisplay';
|
|
49
|
+
//# sourceMappingURL=index.js.map
|
package/esm/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,OAAO,CAAA;AAC5B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAC3B,OAAO,EAAwB,qBAAqB,EAAE,MAAM,oBAAoB,CAAA;AAEhF,OAAO,MAAM,MAAM,sBAAsB,CAAA;AACzC,OAAO,QAAQ,MAAM,8CAA8C,CAAA;AACnE,OAAO,aAAa,MAAM,+BAA+B,CAAA;AACzD,OAAO,iBAGN,MAAM,oCAAoC,CAAA;AAI3C,MAAM,CAAC,OAAO,OAAO,kBAAmB,SAAQ,MAAM;IAAtD;;QACE,SAAI,GAAG,oBAAoB,CAAA;IAgE7B,CAAC;IA9DC,OAAO,CAAC,aAA4B;QAClC,aAAa,CAAC,WAAW,CACvB,GAAG,EAAE,CACH,IAAI,QAAQ,CAAC;YACX,cAAc,EAAE,IAAI,CAClB,GAAG,EAAE,CAAC,MAAM,CAAC,wCAAwC,CAAC,CACvD;YACD,UAAU,EAAE,iBAAiB,CAAC,aAAa,CAAC;YAC5C,IAAI,EAAE,cAAc;SACrB,CAAC,CACL,CAAA;QAED,aAAa,CAAC,mBAAmB,CAC/B,yBAAyB;QACzB,aAAa;QACb,KAAK,EAAE,EACL,OAAO,EACP,QAAQ,EACR,GAAG,EACH,MAAM,GAAG,EAAE,GAMZ,EAAE,EAAE;YACH,MAAM,EAAE,eAAe,EAAE,GAAG,OAAO,CAAA;YACnC,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAQ,CAAA;YAEvD,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;YAElC,IAAI,CAAC,QAAQ,EAAE;gBACb,MAAM,IAAI,KAAK,CACb,0DAA0D,CAC3D,CAAA;aACF;YAED,MAAM,GAAG,GAAG,MAAM,eAAe,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAA;YAC3D,IAAI,CAAC,GAAG,EAAE;gBACR,MAAM,IAAI,KAAK,CACb,aAAa,QAAQ,iDAAiD,CACvE,CAAA;aACF;YAED,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAA;YAE3C,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAA;QAChD,CAAC,CACF,CAAA;IACH,CAAC;IAED,SAAS,CAAC,aAA4B;QACpC,IAAI,qBAAqB,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE;YAClD,aAAa,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC,KAAK,CAAC,EAAE;gBAC/C,KAAK,EAAE,eAAe;gBACtB,IAAI,EAAE,aAAa;gBACnB,OAAO,EAAE,CAAC,OAA6B,EAAE,EAAE;oBACzC,OAAO,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAA;gBACrC,CAAC;aACF,CAAC,CAAA;SACH;IACH,CAAC;CACF;AAED,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACtB,yBAAyB,GAC1B,MAAM,oBAAoB,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jbrowse/plugin-circular-view",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "2.1.0",
|
|
4
4
|
"description": "JBrowse 2 circular view",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"jbrowse",
|
|
@@ -20,33 +20,41 @@
|
|
|
20
20
|
"main": "dist/index.js",
|
|
21
21
|
"files": [
|
|
22
22
|
"dist",
|
|
23
|
-
"src"
|
|
23
|
+
"src",
|
|
24
|
+
"esm"
|
|
24
25
|
],
|
|
25
26
|
"scripts": {
|
|
26
|
-
"build": "
|
|
27
|
+
"build": "npm-run-all build:*",
|
|
27
28
|
"test": "cd ../..; jest plugins/circular-view",
|
|
28
29
|
"prepublishOnly": "yarn test",
|
|
29
30
|
"prepack": "yarn build; yarn useDist",
|
|
30
31
|
"postpack": "yarn useSrc",
|
|
31
32
|
"useDist": "node ../../scripts/useDist.js",
|
|
32
33
|
"useSrc": "node ../../scripts/useSrc.js",
|
|
33
|
-
"
|
|
34
|
+
"prebuild": "npm run clean",
|
|
35
|
+
"build:esm": "tsc --build tsconfig.build.esm.json",
|
|
36
|
+
"build:es5": "tsc --build tsconfig.build.es5.json",
|
|
37
|
+
"clean": "rimraf dist esm *.tsbuildinfo"
|
|
34
38
|
},
|
|
35
39
|
"dependencies": {
|
|
36
40
|
"@babel/runtime": "^7.17.9",
|
|
37
|
-
"@
|
|
41
|
+
"@mui/icons-material": "^5.0.1"
|
|
38
42
|
},
|
|
39
43
|
"peerDependencies": {
|
|
40
|
-
"@jbrowse/core": "^
|
|
41
|
-
"@material
|
|
42
|
-
"mobx": "^
|
|
43
|
-
"mobx-react": "^
|
|
44
|
-
"mobx-state-tree": "
|
|
44
|
+
"@jbrowse/core": "^2.0.0",
|
|
45
|
+
"@mui/material": "^5.0.0",
|
|
46
|
+
"mobx": "^6.0.0",
|
|
47
|
+
"mobx-react": "^7.0.0",
|
|
48
|
+
"mobx-state-tree": "^5.0.0",
|
|
45
49
|
"react": ">=16.8.0",
|
|
46
|
-
"react-dom": ">=16.8.0"
|
|
50
|
+
"react-dom": ">=16.8.0",
|
|
51
|
+
"tss-react": "^3.0.0"
|
|
47
52
|
},
|
|
48
53
|
"publishConfig": {
|
|
49
54
|
"access": "public"
|
|
50
55
|
},
|
|
51
|
-
"
|
|
56
|
+
"distModule": "esm/index.js",
|
|
57
|
+
"srcModule": "src/index.ts",
|
|
58
|
+
"module": "esm/index.js",
|
|
59
|
+
"gitHead": "0db0462fa1f9f15ab4869da085bcab032b9483c3"
|
|
52
60
|
}
|
|
@@ -1,28 +1,16 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
const Loading = load(ChordDisplayLoadingFactory)
|
|
11
|
-
const DisplayError = load(ChordDisplayErrorFactory)
|
|
12
|
-
const RpcRenderedSvgGroup = load(RpcRenderedSvgGroupF)
|
|
13
|
-
|
|
14
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
15
|
-
function BaseChordDisplay({ display }: any) {
|
|
16
|
-
if (display.error) {
|
|
17
|
-
return <DisplayError model={display} />
|
|
18
|
-
}
|
|
19
|
-
if (!display.filled) {
|
|
20
|
-
return <Loading model={display} />
|
|
21
|
-
}
|
|
22
|
-
return <RpcRenderedSvgGroup model={display} />
|
|
1
|
+
import React from 'react'
|
|
2
|
+
import { observer } from 'mobx-react'
|
|
3
|
+
import Loading from './Loading'
|
|
4
|
+
import DisplayError from './DisplayError'
|
|
5
|
+
import RpcRenderedSvgGroup from './RpcRenderedSvgGroup'
|
|
6
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
7
|
+
function BaseChordDisplay({ display }: any) {
|
|
8
|
+
if (display.error) {
|
|
9
|
+
return <DisplayError model={display} />
|
|
23
10
|
}
|
|
24
|
-
|
|
25
|
-
display
|
|
11
|
+
if (!display.filled) {
|
|
12
|
+
return <Loading model={display} />
|
|
26
13
|
}
|
|
27
|
-
return
|
|
14
|
+
return <RpcRenderedSvgGroup model={display} />
|
|
28
15
|
}
|
|
16
|
+
export default observer(BaseChordDisplay)
|
|
@@ -1,70 +1,68 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
const { observer } = jbrequire('mobx-react')
|
|
1
|
+
import React from 'react'
|
|
2
|
+
import { observer } from 'mobx-react'
|
|
3
|
+
import { makeStyles } from 'tss-react/mui'
|
|
5
4
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
5
|
+
const useStyles = makeStyles()({
|
|
6
|
+
errorMessage: {},
|
|
7
|
+
errorBackground: {},
|
|
8
|
+
errorText: {},
|
|
9
|
+
})
|
|
11
10
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
},
|
|
19
|
-
}) => {
|
|
20
|
-
const classes = useStyles()
|
|
21
|
-
return (
|
|
22
|
-
<g className={classes.errorMessage}>
|
|
23
|
-
<defs>
|
|
24
|
-
<pattern
|
|
25
|
-
id="diagonalHatch"
|
|
26
|
-
width="10"
|
|
27
|
-
height="10"
|
|
28
|
-
patternTransform="rotate(45 0 0)"
|
|
29
|
-
patternUnits="userSpaceOnUse"
|
|
30
|
-
>
|
|
31
|
-
<line
|
|
32
|
-
x1="0"
|
|
33
|
-
y1="0"
|
|
34
|
-
x2="0"
|
|
35
|
-
y2="10"
|
|
36
|
-
style={{ stroke: 'rgba(255,0,0,0.5)', strokeWidth: 10 }}
|
|
37
|
-
/>
|
|
38
|
-
</pattern>
|
|
39
|
-
</defs>
|
|
40
|
-
<circle
|
|
41
|
-
className={classes.errorBackground}
|
|
42
|
-
cx="0"
|
|
43
|
-
cy="0"
|
|
44
|
-
r={radius}
|
|
45
|
-
fill="#ffb4b4"
|
|
46
|
-
/>
|
|
47
|
-
<circle
|
|
48
|
-
className={classes.errorPattern}
|
|
49
|
-
cx="0"
|
|
50
|
-
cy="0"
|
|
51
|
-
r={radius}
|
|
52
|
-
fill="url(#diagonalHatch)"
|
|
53
|
-
/>
|
|
54
|
-
<text
|
|
55
|
-
className={classes.errorText}
|
|
56
|
-
x="0"
|
|
57
|
-
y="0"
|
|
58
|
-
transform="rotate(90 0 0)"
|
|
59
|
-
dominantBaseline="middle"
|
|
60
|
-
textAnchor="middle"
|
|
61
|
-
>
|
|
62
|
-
{String(error)}
|
|
63
|
-
</text>
|
|
64
|
-
</g>
|
|
65
|
-
)
|
|
11
|
+
// 'repeating-linear-gradient(45deg, transparent, transparent 5px, rgba(255,255,255,.5) 5px, rgba(255,255,255,.5) 10px)',
|
|
12
|
+
const DisplayError = observer(
|
|
13
|
+
({
|
|
14
|
+
model: {
|
|
15
|
+
renderProps: { radius },
|
|
16
|
+
error,
|
|
66
17
|
},
|
|
67
|
-
)
|
|
18
|
+
}) => {
|
|
19
|
+
const { classes } = useStyles()
|
|
20
|
+
return (
|
|
21
|
+
<g className={classes.errorMessage}>
|
|
22
|
+
<defs>
|
|
23
|
+
<pattern
|
|
24
|
+
id="diagonalHatch"
|
|
25
|
+
width="10"
|
|
26
|
+
height="10"
|
|
27
|
+
patternTransform="rotate(45 0 0)"
|
|
28
|
+
patternUnits="userSpaceOnUse"
|
|
29
|
+
>
|
|
30
|
+
<line
|
|
31
|
+
x1="0"
|
|
32
|
+
y1="0"
|
|
33
|
+
x2="0"
|
|
34
|
+
y2="10"
|
|
35
|
+
style={{ stroke: 'rgba(255,0,0,0.5)', strokeWidth: 10 }}
|
|
36
|
+
/>
|
|
37
|
+
</pattern>
|
|
38
|
+
</defs>
|
|
39
|
+
<circle
|
|
40
|
+
className={classes.errorBackground}
|
|
41
|
+
cx="0"
|
|
42
|
+
cy="0"
|
|
43
|
+
r={radius}
|
|
44
|
+
fill="#ffb4b4"
|
|
45
|
+
/>
|
|
46
|
+
<circle
|
|
47
|
+
className={classes.errorPattern}
|
|
48
|
+
cx="0"
|
|
49
|
+
cy="0"
|
|
50
|
+
r={radius}
|
|
51
|
+
fill="url(#diagonalHatch)"
|
|
52
|
+
/>
|
|
53
|
+
<text
|
|
54
|
+
className={classes.errorText}
|
|
55
|
+
x="0"
|
|
56
|
+
y="0"
|
|
57
|
+
transform="rotate(90 0 0)"
|
|
58
|
+
dominantBaseline="middle"
|
|
59
|
+
textAnchor="middle"
|
|
60
|
+
>
|
|
61
|
+
{String(error)}
|
|
62
|
+
</text>
|
|
63
|
+
</g>
|
|
64
|
+
)
|
|
65
|
+
},
|
|
66
|
+
)
|
|
68
67
|
|
|
69
|
-
|
|
70
|
-
}
|
|
68
|
+
export default DisplayError
|