@jbrowse/core 3.1.0 → 3.3.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/BaseFeatureWidget/BaseFeatureDetail/ArrayValue.d.ts +2 -1
- package/BaseFeatureWidget/BaseFeatureDetail/ArrayValue.js +4 -4
- package/BaseFeatureWidget/BaseFeatureDetail/Attributes.js +10 -9
- package/BaseFeatureWidget/BaseFeatureDetail/DataGridDetails.js +3 -13
- package/BaseFeatureWidget/BaseFeatureDetail/SimpleField.d.ts +2 -1
- package/BaseFeatureWidget/BaseFeatureDetail/SimpleField.js +2 -2
- package/CorePlugin.js +2 -2
- package/PluginLoader.js +3 -3
- package/PluginManager.d.ts +1 -1
- package/PluginManager.js +15 -14
- package/ReExports/modules.d.ts +1 -1
- package/ReExports/modules.js +1 -22
- package/assemblyManager/assemblyManager.js +1 -1
- package/configuration/configurationSchema.js +2 -2
- package/configuration/util.js +2 -2
- package/data_adapters/BaseAdapter/BaseAdapter.d.ts +2 -2
- package/data_adapters/BaseAdapter/BaseAdapter.js +1 -0
- package/data_adapters/BaseAdapter/BaseFeatureDataAdapter.js +9 -2
- package/data_adapters/BaseAdapter/BaseOptions.d.ts +0 -1
- package/data_adapters/BaseAdapter/types.d.ts +1 -1
- package/data_adapters/CytobandAdapter/configSchema.js +17 -2
- package/data_adapters/dataAdapterCache.js +4 -4
- package/package.json +5 -5
- package/pluggableElementTypes/RpcMethodTypeWithFiltersAndRenameRegions.d.ts +3 -1
- package/pluggableElementTypes/models/BaseTrackModel.js +3 -1
- package/pluggableElementTypes/models/baseTrackConfig.js +2 -2
- package/pluggableElementTypes/renderers/CircularChordRendererType.js +8 -9
- package/pluggableElementTypes/renderers/FeatureRendererType.js +1 -0
- package/pluggableElementTypes/renderers/RpcRenderedSvgGroup.d.ts +2 -4
- package/pluggableElementTypes/renderers/RpcRenderedSvgGroup.js +2 -30
- package/pluggableElementTypes/renderers/ServerSideRenderedContent.d.ts +1 -1
- package/pluggableElementTypes/renderers/ServerSideRenderedContent.js +2 -30
- package/pluggableElementTypes/renderers/ServerSideRendererType.js +6 -7
- package/rpc/methods/CoreFreeResources.js +2 -2
- package/tsconfig.build.tsbuildinfo +1 -1
- package/ui/DataGridFlexContainer.d.ts +3 -0
- package/ui/DataGridFlexContainer.js +15 -0
- package/ui/theme.js +5 -5
- package/util/Base1DUtils.js +1 -1
- package/util/analytics.js +2 -2
- package/util/cluster.d.ts +17 -0
- package/util/cluster.js +96 -0
- package/util/idMaker.d.ts +1 -1
- package/util/idMaker.js +1 -1
- package/util/index.d.ts +4 -1
- package/util/index.js +41 -10
- package/util/layouts/PrecomputedMultiLayout.js +2 -2
- package/util/map-obj.js +2 -2
- package/util/offscreenCanvasUtils.d.ts +11 -11
- package/util/offscreenCanvasUtils.js +4 -1
- package/util/rxjs.d.ts +1 -1
- package/util/rxjs.js +3 -1
- package/util/stopToken.d.ts +1 -1
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.default = DataGridFlexContainer;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
const mui_1 = require("tss-react/mui");
|
|
6
|
+
const useStyles = (0, mui_1.makeStyles)()({
|
|
7
|
+
flexContainer: {
|
|
8
|
+
display: 'flex',
|
|
9
|
+
flexDirection: 'column',
|
|
10
|
+
},
|
|
11
|
+
});
|
|
12
|
+
function DataGridFlexContainer({ children, }) {
|
|
13
|
+
const { classes } = useStyles();
|
|
14
|
+
return (0, jsx_runtime_1.jsx)("div", { className: classes.flexContainer, children: children });
|
|
15
|
+
}
|
package/ui/theme.js
CHANGED
|
@@ -10,8 +10,8 @@ const colors_1 = require("@mui/material/colors");
|
|
|
10
10
|
const styles_1 = require("@mui/material/styles");
|
|
11
11
|
const deepmerge_1 = __importDefault(require("deepmerge"));
|
|
12
12
|
const refTheme = (0, styles_1.createTheme)();
|
|
13
|
-
const midnight = '#0D233F';
|
|
14
|
-
const grape = '#721E63';
|
|
13
|
+
const midnight = refTheme.palette.augmentColor({ color: { main: '#0D233F' } });
|
|
14
|
+
const grape = refTheme.palette.augmentColor({ color: { main: '#721E63' } });
|
|
15
15
|
const forest = refTheme.palette.augmentColor({ color: { main: '#135560' } });
|
|
16
16
|
const mandarin = refTheme.palette.augmentColor({ color: { main: '#FFB11D' } });
|
|
17
17
|
const lightgrey = refTheme.palette.augmentColor({ color: { main: '#aaa' } });
|
|
@@ -47,6 +47,9 @@ const hardclip = '#f00';
|
|
|
47
47
|
const softclip = '#00f';
|
|
48
48
|
const skip = '#97b8c9';
|
|
49
49
|
const defaults = {
|
|
50
|
+
primary: midnight,
|
|
51
|
+
secondary: grape,
|
|
52
|
+
tertiary: forest,
|
|
50
53
|
quaternary: mandarin,
|
|
51
54
|
highlight: mandarin,
|
|
52
55
|
stopCodon,
|
|
@@ -65,9 +68,6 @@ function stockTheme() {
|
|
|
65
68
|
palette: {
|
|
66
69
|
...defaults,
|
|
67
70
|
mode: undefined,
|
|
68
|
-
primary: { main: midnight },
|
|
69
|
-
secondary: { main: grape },
|
|
70
|
-
tertiary: forest,
|
|
71
71
|
},
|
|
72
72
|
components: {
|
|
73
73
|
MuiLink: {
|
package/util/Base1DUtils.js
CHANGED
|
@@ -44,7 +44,7 @@ function moveTo(self, start, end) {
|
|
|
44
44
|
extraBp = ((newBpPerPx - targetBpPerPx) * self.width) / 2;
|
|
45
45
|
}
|
|
46
46
|
let bpToStart = -extraBp;
|
|
47
|
-
for (let i = 0; i < self.displayedRegions.length; i
|
|
47
|
+
for (let i = 0; i < self.displayedRegions.length; i++) {
|
|
48
48
|
const region = self.displayedRegions[i];
|
|
49
49
|
if (start.index === i) {
|
|
50
50
|
bpToStart += start.offset;
|
package/util/analytics.js
CHANGED
|
@@ -68,9 +68,9 @@ async function writeGAAnalytics(rootModel, initialTimestamp) {
|
|
|
68
68
|
analyticsScript += `ga('create', '${jbrowseUser}', 'auto', 'jbrowseTracker');`;
|
|
69
69
|
const gaData = {};
|
|
70
70
|
const googleDimensions = 'tracks-count ver electron loadTime pluginNames';
|
|
71
|
-
googleDimensions.split(/\s+/).
|
|
71
|
+
for (const [index, key] of googleDimensions.split(/\s+/).entries()) {
|
|
72
72
|
gaData[`dimension${index + 1}`] = stats[key];
|
|
73
|
-
}
|
|
73
|
+
}
|
|
74
74
|
gaData.metric1 = Math.round(stats.loadTime);
|
|
75
75
|
analyticsScript += `ga('jbrowseTracker.send', 'pageview',${JSON.stringify(gaData)});`;
|
|
76
76
|
const analyticsScriptNode = document.createElement('script');
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export declare function euclideanDistance(a: number[], b: number[]): number;
|
|
2
|
+
export declare function averageDistance(setA: number[], setB: number[], distances: number[][]): number;
|
|
3
|
+
export declare function clusterData({ data, distance, linkage, onProgress, stopToken, }: {
|
|
4
|
+
data: number[][];
|
|
5
|
+
distance?: (a: number[], b: number[]) => number;
|
|
6
|
+
linkage?: (a: number[], b: number[], distances: number[][]) => number;
|
|
7
|
+
onProgress?: (a: string) => void;
|
|
8
|
+
stopToken?: string;
|
|
9
|
+
}): {
|
|
10
|
+
clusters: {
|
|
11
|
+
height: number;
|
|
12
|
+
indexes: number[];
|
|
13
|
+
} | undefined;
|
|
14
|
+
distances: number[][];
|
|
15
|
+
order: number[];
|
|
16
|
+
clustersGivenK: number[][][];
|
|
17
|
+
};
|
package/util/cluster.js
ADDED
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.euclideanDistance = euclideanDistance;
|
|
4
|
+
exports.averageDistance = averageDistance;
|
|
5
|
+
exports.clusterData = clusterData;
|
|
6
|
+
const stopToken_1 = require("@jbrowse/core/util/stopToken");
|
|
7
|
+
function toP(n) {
|
|
8
|
+
return Number.parseFloat((n * 100).toFixed(1));
|
|
9
|
+
}
|
|
10
|
+
function euclideanDistance(a, b) {
|
|
11
|
+
const size = Math.min(a.length, b.length);
|
|
12
|
+
let sum = 0;
|
|
13
|
+
for (let index = 0; index < size; index++) {
|
|
14
|
+
sum += (a[index] - b[index]) * (a[index] - b[index]);
|
|
15
|
+
}
|
|
16
|
+
return Math.sqrt(sum);
|
|
17
|
+
}
|
|
18
|
+
function averageDistance(setA, setB, distances) {
|
|
19
|
+
let distance = 0;
|
|
20
|
+
const lenA = setA.length;
|
|
21
|
+
const lenB = setB.length;
|
|
22
|
+
for (let i = 0; i < lenA; i++) {
|
|
23
|
+
for (let j = 0; j < lenB; j++) {
|
|
24
|
+
distance += distances[setA[i]][setB[j]];
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return distance / setA.length / setB.length;
|
|
28
|
+
}
|
|
29
|
+
function clusterData({ data, distance = euclideanDistance, linkage = averageDistance, onProgress, stopToken, }) {
|
|
30
|
+
let start = performance.now();
|
|
31
|
+
const distances = [];
|
|
32
|
+
for (let i = 0; i < data.length; i++) {
|
|
33
|
+
if (performance.now() - start > 400) {
|
|
34
|
+
(0, stopToken_1.checkStopToken)(stopToken);
|
|
35
|
+
start = performance.now();
|
|
36
|
+
}
|
|
37
|
+
if (onProgress) {
|
|
38
|
+
onProgress(`Making distance matrix: ${toP(i / (data.length - 1))}%`);
|
|
39
|
+
}
|
|
40
|
+
const row = [];
|
|
41
|
+
for (let j = 0; j < data.length; j++) {
|
|
42
|
+
row.push(distance(data[i], data[j]));
|
|
43
|
+
}
|
|
44
|
+
distances.push(row);
|
|
45
|
+
}
|
|
46
|
+
const clusters = data.map((_datum, index) => ({
|
|
47
|
+
height: 0,
|
|
48
|
+
indexes: [Number(index)],
|
|
49
|
+
}));
|
|
50
|
+
let clustersGivenK = [];
|
|
51
|
+
start = performance.now();
|
|
52
|
+
for (let iteration = 0; iteration < data.length; iteration++) {
|
|
53
|
+
if (performance.now() - start > 400) {
|
|
54
|
+
(0, stopToken_1.checkStopToken)(stopToken);
|
|
55
|
+
start = performance.now();
|
|
56
|
+
}
|
|
57
|
+
if (onProgress) {
|
|
58
|
+
onProgress(`Clustering: ${toP((iteration + 1) / data.length)}%`);
|
|
59
|
+
}
|
|
60
|
+
clustersGivenK.push(clusters.map(cluster => cluster.indexes));
|
|
61
|
+
if (iteration >= data.length - 1) {
|
|
62
|
+
break;
|
|
63
|
+
}
|
|
64
|
+
let nearestDistance = Infinity;
|
|
65
|
+
let nearestRow = 0;
|
|
66
|
+
let nearestCol = 0;
|
|
67
|
+
for (let row = 0; row < clusters.length; row++) {
|
|
68
|
+
for (let col = row + 1; col < clusters.length; col++) {
|
|
69
|
+
const distance = linkage(clusters[row].indexes, clusters[col].indexes, distances);
|
|
70
|
+
if (distance < nearestDistance) {
|
|
71
|
+
nearestDistance = distance;
|
|
72
|
+
nearestRow = row;
|
|
73
|
+
nearestCol = col;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
const newCluster = {
|
|
78
|
+
indexes: [
|
|
79
|
+
...clusters[nearestRow].indexes,
|
|
80
|
+
...clusters[nearestCol].indexes,
|
|
81
|
+
],
|
|
82
|
+
height: nearestDistance,
|
|
83
|
+
children: [clusters[nearestRow], clusters[nearestCol]],
|
|
84
|
+
};
|
|
85
|
+
clusters.splice(Math.max(nearestRow, nearestCol), 1);
|
|
86
|
+
clusters.splice(Math.min(nearestRow, nearestCol), 1);
|
|
87
|
+
clusters.push(newCluster);
|
|
88
|
+
}
|
|
89
|
+
clustersGivenK = [[], ...clustersGivenK.reverse()];
|
|
90
|
+
return {
|
|
91
|
+
clusters: clusters[0],
|
|
92
|
+
distances: distances,
|
|
93
|
+
order: clusters[0].indexes,
|
|
94
|
+
clustersGivenK: clustersGivenK,
|
|
95
|
+
};
|
|
96
|
+
}
|
package/util/idMaker.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export default function idMaker(args: Record<string, unknown>, id?: string, len?: number): number;
|
|
1
|
+
export default function idMaker(args: Record<string, unknown>, id?: string, len?: number): string | number;
|
package/util/idMaker.js
CHANGED
package/util/index.d.ts
CHANGED
|
@@ -75,6 +75,7 @@ export declare function renameRegionsIfNeeded<ARGTYPE extends {
|
|
|
75
75
|
}>;
|
|
76
76
|
export declare function minmax(a: number, b: number): readonly [number, number];
|
|
77
77
|
export declare function shorten(name: string, max?: number, short?: number): string;
|
|
78
|
+
export declare function shorten2(name: string, max?: number): string;
|
|
78
79
|
export declare function stringify({ refName, coord, assemblyName, oob, }: {
|
|
79
80
|
assemblyName?: string;
|
|
80
81
|
coord: number;
|
|
@@ -192,7 +193,8 @@ export interface ViewSnap {
|
|
|
192
193
|
})[];
|
|
193
194
|
}
|
|
194
195
|
export declare function isSupportedIndexingAdapter(type?: string): boolean;
|
|
195
|
-
export declare function getBpDisplayStr(
|
|
196
|
+
export declare function getBpDisplayStr(total: number): string;
|
|
197
|
+
export declare function getProgressDisplayStr(current: number, total: number): string;
|
|
196
198
|
export declare function toLocale(n: number): string;
|
|
197
199
|
export declare function getTickDisplayStr(totalBp: number, bpPerPx: number): string;
|
|
198
200
|
export declare function getViewParams(model: IAnyStateTreeNode, exportSVG?: boolean): {
|
|
@@ -257,6 +259,7 @@ export declare function fetchAndMaybeUnzipText(loc: GenericFilehandle, opts?: Ba
|
|
|
257
259
|
export declare function isObject(x: unknown): x is Record<string | symbol | number, unknown>;
|
|
258
260
|
export declare function localStorageGetNumber(key: string, defaultVal: number): number;
|
|
259
261
|
export declare function localStorageGetBoolean(key: string, defaultVal: boolean): boolean;
|
|
262
|
+
export declare function forEachWithStopTokenCheck<T>(iter: Iterable<T>, stopToken: string | undefined, arg: (arg: T, idx: number) => void, durationMs?: number): void;
|
|
260
263
|
export declare function testAdapter(fileName: string, regex: RegExp, adapterHint: string | undefined, expected: string): boolean;
|
|
261
264
|
export { type Feature, type SimpleFeatureSerialized, type SimpleFeatureSerializedNoId, default as SimpleFeature, isFeature, } from './simpleFeature';
|
|
262
265
|
export { blobToDataURL } from './blobToDataURL';
|
package/util/index.js
CHANGED
|
@@ -49,6 +49,7 @@ exports.renameRegionIfNeeded = renameRegionIfNeeded;
|
|
|
49
49
|
exports.renameRegionsIfNeeded = renameRegionsIfNeeded;
|
|
50
50
|
exports.minmax = minmax;
|
|
51
51
|
exports.shorten = shorten;
|
|
52
|
+
exports.shorten2 = shorten2;
|
|
52
53
|
exports.stringify = stringify;
|
|
53
54
|
exports.revcom = revcom;
|
|
54
55
|
exports.reverse = reverse;
|
|
@@ -63,6 +64,7 @@ exports.objectHash = objectHash;
|
|
|
63
64
|
exports.bytesForRegions = bytesForRegions;
|
|
64
65
|
exports.isSupportedIndexingAdapter = isSupportedIndexingAdapter;
|
|
65
66
|
exports.getBpDisplayStr = getBpDisplayStr;
|
|
67
|
+
exports.getProgressDisplayStr = getProgressDisplayStr;
|
|
66
68
|
exports.toLocale = toLocale;
|
|
67
69
|
exports.getTickDisplayStr = getTickDisplayStr;
|
|
68
70
|
exports.getViewParams = getViewParams;
|
|
@@ -94,6 +96,7 @@ exports.fetchAndMaybeUnzipText = fetchAndMaybeUnzipText;
|
|
|
94
96
|
exports.isObject = isObject;
|
|
95
97
|
exports.localStorageGetNumber = localStorageGetNumber;
|
|
96
98
|
exports.localStorageGetBoolean = localStorageGetBoolean;
|
|
99
|
+
exports.forEachWithStopTokenCheck = forEachWithStopTokenCheck;
|
|
97
100
|
exports.testAdapter = testAdapter;
|
|
98
101
|
const react_1 = require("react");
|
|
99
102
|
const bgzf_filehandle_1 = require("@gmod/bgzf-filehandle");
|
|
@@ -528,6 +531,9 @@ function shorten(name, max = 70, short = 30) {
|
|
|
528
531
|
? `${name.slice(0, short)}...${name.slice(-short)}`
|
|
529
532
|
: name;
|
|
530
533
|
}
|
|
534
|
+
function shorten2(name, max = 70) {
|
|
535
|
+
return name.length > max ? `${name.slice(0, max)}...` : name;
|
|
536
|
+
}
|
|
531
537
|
function stringify({ refName, coord, assemblyName, oob, }, useAssemblyName) {
|
|
532
538
|
return [
|
|
533
539
|
assemblyName && useAssemblyName ? `{${assemblyName}}` : '',
|
|
@@ -589,8 +595,8 @@ function reverse(str) {
|
|
|
589
595
|
function complement(str) {
|
|
590
596
|
var _a;
|
|
591
597
|
let comp = '';
|
|
592
|
-
for (
|
|
593
|
-
comp += (_a = exports.complementTable[
|
|
598
|
+
for (const element of str) {
|
|
599
|
+
comp += (_a = exports.complementTable[element]) !== null && _a !== void 0 ? _a : element;
|
|
594
600
|
}
|
|
595
601
|
return comp;
|
|
596
602
|
}
|
|
@@ -691,7 +697,7 @@ exports.defaultCodonTable = {
|
|
|
691
697
|
};
|
|
692
698
|
function generateCodonTable(table) {
|
|
693
699
|
const tempCodonTable = {};
|
|
694
|
-
Object.keys(table)
|
|
700
|
+
for (const codon of Object.keys(table)) {
|
|
695
701
|
const aa = table[codon];
|
|
696
702
|
const nucs = [];
|
|
697
703
|
for (let i = 0; i < 3; i++) {
|
|
@@ -711,7 +717,7 @@ function generateCodonTable(table) {
|
|
|
711
717
|
}
|
|
712
718
|
}
|
|
713
719
|
}
|
|
714
|
-
}
|
|
720
|
+
}
|
|
715
721
|
return tempCodonTable;
|
|
716
722
|
}
|
|
717
723
|
async function updateStatus(msg, cb, fn) {
|
|
@@ -760,15 +766,29 @@ function isSupportedIndexingAdapter(type = '') {
|
|
|
760
766
|
'VcfAdapter',
|
|
761
767
|
].includes(type);
|
|
762
768
|
}
|
|
763
|
-
function getBpDisplayStr(
|
|
764
|
-
if (Math.floor(
|
|
765
|
-
return `${
|
|
769
|
+
function getBpDisplayStr(total) {
|
|
770
|
+
if (Math.floor(total / 1000000) > 0) {
|
|
771
|
+
return `${r(total / 1000000)}Mbp`;
|
|
766
772
|
}
|
|
767
|
-
else if (Math.floor(
|
|
768
|
-
return `${
|
|
773
|
+
else if (Math.floor(total / 1000) > 0) {
|
|
774
|
+
return `${r(total / 1000)}Kbp`;
|
|
769
775
|
}
|
|
770
776
|
else {
|
|
771
|
-
return `${
|
|
777
|
+
return `${Math.floor(total)}bp`;
|
|
778
|
+
}
|
|
779
|
+
}
|
|
780
|
+
function r(s) {
|
|
781
|
+
return toLocale(Number.parseFloat(s.toPrecision(3)));
|
|
782
|
+
}
|
|
783
|
+
function getProgressDisplayStr(current, total) {
|
|
784
|
+
if (Math.floor(total / 1000000) > 0) {
|
|
785
|
+
return `${r(current / 1000000)}/${r(total / 1000000)}Mb`;
|
|
786
|
+
}
|
|
787
|
+
else if (Math.floor(total / 1000) > 0) {
|
|
788
|
+
return `${r(current / 1000)}/${r(total / 1000)}Kb`;
|
|
789
|
+
}
|
|
790
|
+
else {
|
|
791
|
+
return `${r(current)}/${r(total)}}bytes`;
|
|
772
792
|
}
|
|
773
793
|
}
|
|
774
794
|
function toLocale(n) {
|
|
@@ -988,6 +1008,17 @@ function localStorageGetNumber(key, defaultVal) {
|
|
|
988
1008
|
function localStorageGetBoolean(key, defaultVal) {
|
|
989
1009
|
return Boolean(JSON.parse(localStorageGetItem(key) || JSON.stringify(defaultVal)));
|
|
990
1010
|
}
|
|
1011
|
+
function forEachWithStopTokenCheck(iter, stopToken, arg, durationMs = 400) {
|
|
1012
|
+
let start = performance.now();
|
|
1013
|
+
let i = 0;
|
|
1014
|
+
for (const t of iter) {
|
|
1015
|
+
if (performance.now() - start > durationMs) {
|
|
1016
|
+
(0, stopToken_1.checkStopToken)(stopToken);
|
|
1017
|
+
start = performance.now();
|
|
1018
|
+
}
|
|
1019
|
+
arg(t, i++);
|
|
1020
|
+
}
|
|
1021
|
+
}
|
|
991
1022
|
function testAdapter(fileName, regex, adapterHint, expected) {
|
|
992
1023
|
return (regex.test(fileName) && !adapterHint) || adapterHint === expected;
|
|
993
1024
|
}
|
|
@@ -13,9 +13,9 @@ class ThrowingLayout {
|
|
|
13
13
|
class PrecomputedMultiLayout extends MultiLayout_1.default {
|
|
14
14
|
constructor(json) {
|
|
15
15
|
super(ThrowingLayout);
|
|
16
|
-
|
|
16
|
+
for (const [layoutName, sublayoutJson] of Object.entries(json)) {
|
|
17
17
|
this.subLayouts.set(layoutName, new PrecomputedLayout_1.default(sublayoutJson));
|
|
18
|
-
}
|
|
18
|
+
}
|
|
19
19
|
}
|
|
20
20
|
}
|
|
21
21
|
exports.default = PrecomputedMultiLayout;
|
package/util/map-obj.js
CHANGED
|
@@ -13,12 +13,12 @@ function map(object, mapper, isSeen = new WeakSet()) {
|
|
|
13
13
|
}
|
|
14
14
|
isSeen.add(object);
|
|
15
15
|
const mapArray = (array) => {
|
|
16
|
-
|
|
16
|
+
for (const element of array) {
|
|
17
17
|
mapper(element);
|
|
18
18
|
if (isObject(element)) {
|
|
19
19
|
map(element, mapper, isSeen);
|
|
20
20
|
}
|
|
21
|
-
}
|
|
21
|
+
}
|
|
22
22
|
};
|
|
23
23
|
if (Array.isArray(object)) {
|
|
24
24
|
mapArray(object);
|
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
};
|
|
1
|
+
interface ExportSVGOptions {
|
|
2
|
+
rasterizeLayers?: boolean;
|
|
3
|
+
scale?: number;
|
|
4
|
+
}
|
|
5
|
+
interface RenderToAbstractCanvasOptions {
|
|
6
|
+
exportSVG?: ExportSVGOptions;
|
|
8
7
|
highResolutionScaling?: number;
|
|
9
|
-
}
|
|
8
|
+
}
|
|
9
|
+
export declare function renderToAbstractCanvas<T>(width: number, height: number, opts: RenderToAbstractCanvasOptions, cb: (ctx: CanvasRenderingContext2D) => T): Promise<(Awaited<T> & {
|
|
10
10
|
canvasRecordedData: any;
|
|
11
|
-
} | {
|
|
11
|
+
}) | (Awaited<T> & {
|
|
12
12
|
reactElement: import("react/jsx-runtime").JSX.Element;
|
|
13
|
-
} | {
|
|
13
|
+
}) | (Awaited<T> & {
|
|
14
14
|
imageData: any;
|
|
15
|
-
}>;
|
|
15
|
+
})>;
|
|
16
16
|
export declare function getSerializedSvg(results: {
|
|
17
17
|
width: number;
|
|
18
18
|
height: number;
|
|
@@ -80,7 +80,10 @@ async function renderToAbstractCanvas(width, height, opts, cb) {
|
|
|
80
80
|
}
|
|
81
81
|
ctx.scale(s, s);
|
|
82
82
|
const result = await cb(ctx);
|
|
83
|
-
return {
|
|
83
|
+
return {
|
|
84
|
+
...result,
|
|
85
|
+
imageData: await (0, offscreenCanvasPonyfill_1.createImageBitmap)(canvas),
|
|
86
|
+
};
|
|
84
87
|
}
|
|
85
88
|
}
|
|
86
89
|
async function getSerializedSvg(results) {
|
package/util/rxjs.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { Observable } from 'rxjs';
|
|
2
2
|
import type { Observer } from 'rxjs';
|
|
3
|
-
export declare function ObservableCreate<T>(func: (arg: Observer<T>) => void | Promise<void>,
|
|
3
|
+
export declare function ObservableCreate<T>(func: (arg: Observer<T>) => void | Promise<void>, stopToken?: string): Observable<T>;
|
package/util/rxjs.js
CHANGED
|
@@ -2,7 +2,9 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ObservableCreate = ObservableCreate;
|
|
4
4
|
const rxjs_1 = require("rxjs");
|
|
5
|
-
|
|
5
|
+
const stopToken_1 = require("./stopToken");
|
|
6
|
+
function ObservableCreate(func, stopToken) {
|
|
7
|
+
(0, stopToken_1.checkStopToken)(stopToken);
|
|
6
8
|
return new rxjs_1.Observable((observer) => {
|
|
7
9
|
try {
|
|
8
10
|
const ret = func(observer);
|
package/util/stopToken.d.ts
CHANGED