@milaboratories/miplots4 1.0.178 → 1.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/bubble/BubbleSettingsImpl.d.ts +2 -0
- package/dist/bubble/BubbleSettingsImpl.d.ts.map +1 -1
- package/dist/bubble/BubbleSettingsImpl.js +3 -1
- package/dist/bubble/BubbleSettingsImpl.js.map +1 -1
- package/dist/bubble/getGroupedCellsData.d.ts +1 -1
- package/dist/bubble/getGroupedCellsData.d.ts.map +1 -1
- package/dist/bubble/getGroupedCellsData.js +30 -10
- package/dist/bubble/getGroupedCellsData.js.map +1 -1
- package/dist/bubble/index.d.ts.map +1 -1
- package/dist/bubble/index.js +3 -3
- package/dist/bubble/index.js.map +1 -1
- package/dist/heatmap/ChartRenderer.d.ts.map +1 -1
- package/dist/heatmap/ChartRenderer.js +26 -20
- package/dist/heatmap/ChartRenderer.js.map +1 -1
- package/dist/heatmap/HeatmapSettingsImpl.d.ts +2 -0
- package/dist/heatmap/HeatmapSettingsImpl.d.ts.map +1 -1
- package/dist/heatmap/HeatmapSettingsImpl.js +3 -1
- package/dist/heatmap/HeatmapSettingsImpl.js.map +1 -1
- package/dist/heatmap/fillCellsData.d.ts +22 -2
- package/dist/heatmap/fillCellsData.d.ts.map +1 -1
- package/dist/heatmap/fillCellsData.js +60 -47
- package/dist/heatmap/fillCellsData.js.map +1 -1
- package/dist/heatmap/getCells.d.ts +22 -1
- package/dist/heatmap/getCells.d.ts.map +1 -1
- package/dist/heatmap/getCells.js +23 -3
- package/dist/heatmap/getCells.js.map +1 -1
- package/dist/heatmap/getDendrograms.d.ts +5 -1
- package/dist/heatmap/getDendrograms.d.ts.map +1 -1
- package/dist/heatmap/getDendrograms.js +33 -11
- package/dist/heatmap/getDendrograms.js.map +1 -1
- package/dist/heatmap/index.d.ts.map +1 -1
- package/dist/heatmap/index.js +30 -6
- package/dist/heatmap/index.js.map +1 -1
- package/dist/scatterplot/ChartRenderer.d.ts +2 -2
- package/dist/scatterplot/ChartRenderer.d.ts.map +1 -1
- package/dist/scatterplot/ChartRenderer.js +155 -115
- package/dist/scatterplot/ChartRenderer.js.map +1 -1
- package/dist/scatterplot/ScatterplotSettingsImpl.d.ts +11 -1
- package/dist/scatterplot/ScatterplotSettingsImpl.d.ts.map +1 -1
- package/dist/scatterplot/ScatterplotSettingsImpl.js +20 -0
- package/dist/scatterplot/ScatterplotSettingsImpl.js.map +1 -1
- package/dist/scatterplot/components/ChartLayersData.d.ts +5 -0
- package/dist/scatterplot/components/ChartLayersData.d.ts.map +1 -1
- package/dist/scatterplot/components/ChartLayersData.js +115 -35
- package/dist/scatterplot/components/ChartLayersData.js.map +1 -1
- package/dist/scatterplot/components/types.d.ts +2 -0
- package/dist/scatterplot/components/types.d.ts.map +1 -1
- package/dist/scatterplot/getLayersData.d.ts +11 -2
- package/dist/scatterplot/getLayersData.d.ts.map +1 -1
- package/dist/scatterplot/getLayersData.js +36 -19
- package/dist/scatterplot/getLayersData.js.map +1 -1
- package/dist/scatterplot/index.d.ts.map +1 -1
- package/dist/scatterplot/index.js +51 -33
- package/dist/scatterplot/index.js.map +1 -1
- package/dist/scatterplot/linearRegression.js +1 -1
- package/dist/scatterplot/utils/createAesGetter.d.ts.map +1 -1
- package/dist/scatterplot/utils/createAesGetter.js +5 -3
- package/dist/scatterplot/utils/createAesGetter.js.map +1 -1
- package/dist/scatterplot/utils/createLegendInfo.d.ts +11 -2
- package/dist/scatterplot/utils/createLegendInfo.d.ts.map +1 -1
- package/dist/scatterplot/utils/createLegendInfo.js +21 -16
- package/dist/scatterplot/utils/createLegendInfo.js.map +1 -1
- package/dist/scatterplot-umap/ChartRenderer.d.ts +6 -6
- package/dist/scatterplot-umap/ChartRenderer.d.ts.map +1 -1
- package/dist/scatterplot-umap/ChartRenderer.js +99 -57
- package/dist/scatterplot-umap/ChartRenderer.js.map +1 -1
- package/dist/scatterplot-umap/SettingsImpl.d.ts +11 -1
- package/dist/scatterplot-umap/SettingsImpl.d.ts.map +1 -1
- package/dist/scatterplot-umap/SettingsImpl.js +21 -1
- package/dist/scatterplot-umap/SettingsImpl.js.map +1 -1
- package/dist/scatterplot-umap/components/LowerSVG.d.ts +3 -2
- package/dist/scatterplot-umap/components/LowerSVG.d.ts.map +1 -1
- package/dist/scatterplot-umap/components/LowerSVG.js +159 -108
- package/dist/scatterplot-umap/components/LowerSVG.js.map +1 -1
- package/dist/scatterplot-umap/components/SVGLayer.d.ts +1 -1
- package/dist/scatterplot-umap/components/SVGLayer.d.ts.map +1 -1
- package/dist/scatterplot-umap/components/SVGLayer.js +9 -8
- package/dist/scatterplot-umap/components/SVGLayer.js.map +1 -1
- package/dist/scatterplot-umap/index.d.ts +6 -1
- package/dist/scatterplot-umap/index.d.ts.map +1 -1
- package/dist/scatterplot-umap/index.js +65 -31
- package/dist/scatterplot-umap/index.js.map +1 -1
- package/dist/scatterplot-umap/types.d.ts +7 -0
- package/dist/scatterplot-umap/types.d.ts.map +1 -1
- package/dist/types/bubble.d.ts +6 -0
- package/dist/types/bubble.d.ts.map +1 -1
- package/dist/types/bubble.js +3 -1
- package/dist/types/bubble.js.map +1 -1
- package/dist/types/heatmap.d.ts +6 -0
- package/dist/types/heatmap.d.ts.map +1 -1
- package/dist/types/heatmap.js +2 -0
- package/dist/types/heatmap.js.map +1 -1
- package/dist/types/scatterplot-umap.d.ts +763 -87
- package/dist/types/scatterplot-umap.d.ts.map +1 -1
- package/dist/types/scatterplot-umap.js +19 -3
- package/dist/types/scatterplot-umap.js.map +1 -1
- package/dist/types/scatterplot.d.ts +1377 -44
- package/dist/types/scatterplot.d.ts.map +1 -1
- package/dist/types/scatterplot.js +27 -3
- package/dist/types/scatterplot.js.map +1 -1
- package/package.json +1 -1
|
@@ -6,5 +6,9 @@ export type DendrogramsData = Record<string, {
|
|
|
6
6
|
hierarchyByGroupX: Record<string, HierarchyNode<Cluster>>;
|
|
7
7
|
hierarchyByGroupY: Record<string, HierarchyNode<Cluster>>;
|
|
8
8
|
}>;
|
|
9
|
-
export declare function getDendrograms(groupedCellsData
|
|
9
|
+
export declare function getDendrograms({ groupedCellsData, dendrogramX, dendrogramY, }: {
|
|
10
|
+
groupedCellsData: GroupedCellsHeatmap;
|
|
11
|
+
dendrogramX: HeatmapSettingsImpl['dendrogramX'];
|
|
12
|
+
dendrogramY: HeatmapSettingsImpl['dendrogramY'];
|
|
13
|
+
}): Promise<DendrogramsData>;
|
|
10
14
|
//# sourceMappingURL=getDendrograms.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getDendrograms.d.ts","sourceRoot":"","sources":["../../src/heatmap/getDendrograms.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAMlD,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE;IACzC,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;IAC1D,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;CAC7D,CAAC,CAAA;AAIF,wBAAsB,cAAc,
|
|
1
|
+
{"version":3,"file":"getDendrograms.d.ts","sourceRoot":"","sources":["../../src/heatmap/getDendrograms.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAMlD,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE;IACzC,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;IAC1D,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;CAC7D,CAAC,CAAA;AAIF,wBAAsB,cAAc,CAAC,EACjC,gBAAgB,EAChB,WAAW,EACX,WAAW,GACd,EAAE;IACC,gBAAgB,EAAE,mBAAmB,CAAC;IACtC,WAAW,EAAE,mBAAmB,CAAC,aAAa,CAAC,CAAC;IAChD,WAAW,EAAE,mBAAmB,CAAC,aAAa,CAAC,CAAC;CACnD,GAAG,OAAO,CAAC,eAAe,CAAC,CAuF3B"}
|
|
@@ -2,7 +2,7 @@ import { WorkerFactory as e } from "../utils/WorkerFactory.js";
|
|
|
2
2
|
import t from "./getClusters.js";
|
|
3
3
|
import { hierarchy as n } from "d3-hierarchy";
|
|
4
4
|
var r = new e(() => new t());
|
|
5
|
-
async function i(e, t, i) {
|
|
5
|
+
async function i({ groupedCellsData: e, dendrogramX: t, dendrogramY: i }) {
|
|
6
6
|
let { facetKeys: a, xGroupKeys: o, yGroupKeys: s } = e.meta, c = {};
|
|
7
7
|
return !t && !i ? c : (r.reset(), await Promise.all(a.map(async (a) => {
|
|
8
8
|
let l = {
|
|
@@ -10,23 +10,45 @@ async function i(e, t, i) {
|
|
|
10
10
|
hierarchyByGroupY: {}
|
|
11
11
|
}, u = e.facets[a];
|
|
12
12
|
if (t) {
|
|
13
|
-
let i = [], s =
|
|
14
|
-
let
|
|
15
|
-
return
|
|
13
|
+
let i = [], s = o.map((e) => {
|
|
14
|
+
let t = u.xKeysByGroups[e];
|
|
15
|
+
return t ? {
|
|
16
|
+
nonEmptyXKeys: t.filter((e) => u.cells[e] !== void 0),
|
|
17
|
+
emptyXKeys: t.filter((e) => u.cells[e] === void 0)
|
|
18
|
+
} : {
|
|
19
|
+
nonEmptyXKeys: [],
|
|
20
|
+
emptyXKeys: []
|
|
21
|
+
};
|
|
22
|
+
}), c = await Promise.all(s.map(({ nonEmptyXKeys: e }) => {
|
|
23
|
+
if (e.length === 0) return Promise.resolve(null);
|
|
24
|
+
let n = u.yKeys;
|
|
25
|
+
return r.wrapper.getClustersApproximate(e.map((e) => n.map((n) => u.cells[e][n]?.normalizedValue.dataSource ?? t.fillNA)), t.distance, t.linkage);
|
|
16
26
|
}));
|
|
17
27
|
o.forEach((t, r) => {
|
|
18
|
-
let o = s[r], c =
|
|
19
|
-
e.facets[a].xKeysByGroups[t] =
|
|
28
|
+
let { nonEmptyXKeys: o, emptyXKeys: u } = s[r], d = c[r], f = [...d ? d.indexes.map((e) => o[e]) : o, ...u];
|
|
29
|
+
e.facets[a].xKeysByGroups[t] = f, i.push(...f), d && (l.hierarchyByGroupX[t] = n(d));
|
|
20
30
|
}), e.facets[a].xKeys = i;
|
|
21
31
|
}
|
|
22
32
|
if (i) {
|
|
23
|
-
let t = [], o =
|
|
24
|
-
let t = u.yKeysByGroups[e]
|
|
25
|
-
|
|
33
|
+
let t = [], o = s.map((e) => {
|
|
34
|
+
let t = u.yKeysByGroups[e];
|
|
35
|
+
if (!t) return {
|
|
36
|
+
nonEmptyYKeys: [],
|
|
37
|
+
emptyYKeys: []
|
|
38
|
+
};
|
|
39
|
+
let n = u.xKeys;
|
|
40
|
+
return {
|
|
41
|
+
nonEmptyYKeys: t.filter((e) => n.some((t) => u.cells[t]?.[e] !== void 0)),
|
|
42
|
+
emptyYKeys: t.filter((e) => n.every((t) => u.cells[t]?.[e] === void 0))
|
|
43
|
+
};
|
|
44
|
+
}), c = await Promise.all(o.map(({ nonEmptyYKeys: e }) => {
|
|
45
|
+
if (e.length === 0) return Promise.resolve(null);
|
|
46
|
+
let t = u.xKeys;
|
|
47
|
+
return r.wrapper.getClustersApproximate(e.map((e) => t.map((t) => u.cells[t]?.[e]?.normalizedValue.dataSource ?? i.fillNA)), i.distance, i.linkage);
|
|
26
48
|
}));
|
|
27
49
|
s.forEach((r, i) => {
|
|
28
|
-
let s = o[i], c =
|
|
29
|
-
e.facets[a].yKeysByGroups[r] =
|
|
50
|
+
let { nonEmptyYKeys: s, emptyYKeys: u } = o[i], d = c[i], f = [...d ? d.indexes.map((e) => s[e]) : s, ...u];
|
|
51
|
+
e.facets[a].yKeysByGroups[r] = f, t.push(...f), d && (l.hierarchyByGroupY[r] = n(d));
|
|
30
52
|
}), e.facets[a].yKeys = t;
|
|
31
53
|
}
|
|
32
54
|
c[a] = l;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getDendrograms.js","names":[],"sources":["../../src/heatmap/getDendrograms.ts"],"sourcesContent":["import type { Cluster } from './components/types';\nimport type { GroupedCellsHeatmap } from './getCells';\nimport type { HeatmapSettingsImpl } from './HeatmapSettingsImpl';\nimport type { HierarchyNode } from 'd3-hierarchy';\nimport { hierarchy } from 'd3-hierarchy';\nimport type { getClustersApproximate } from './getClusters';\nimport { WorkerFactory } from '../utils/WorkerFactory';\nimport GetClustersWorker from './getClusters?worker&inline';\n\nexport type DendrogramsData = Record<string, {\n hierarchyByGroupX: Record<string, HierarchyNode<Cluster>>;\n hierarchyByGroupY: Record<string, HierarchyNode<Cluster>>;\n}>\n\nconst workerWrapper = new WorkerFactory<{ getClustersApproximate: typeof getClustersApproximate }>(() => new GetClustersWorker());\n\nexport async function getDendrograms(\n groupedCellsData: GroupedCellsHeatmap
|
|
1
|
+
{"version":3,"file":"getDendrograms.js","names":[],"sources":["../../src/heatmap/getDendrograms.ts"],"sourcesContent":["import type { Cluster } from './components/types';\nimport type { GroupedCellsHeatmap } from './getCells';\nimport type { HeatmapSettingsImpl } from './HeatmapSettingsImpl';\nimport type { HierarchyNode } from 'd3-hierarchy';\nimport { hierarchy } from 'd3-hierarchy';\nimport type { getClustersApproximate } from './getClusters';\nimport { WorkerFactory } from '../utils/WorkerFactory';\nimport GetClustersWorker from './getClusters?worker&inline';\n\nexport type DendrogramsData = Record<string, {\n hierarchyByGroupX: Record<string, HierarchyNode<Cluster>>;\n hierarchyByGroupY: Record<string, HierarchyNode<Cluster>>;\n}>\n\nconst workerWrapper = new WorkerFactory<{ getClustersApproximate: typeof getClustersApproximate }>(() => new GetClustersWorker());\n\nexport async function getDendrograms({\n groupedCellsData,\n dendrogramX,\n dendrogramY,\n}: {\n groupedCellsData: GroupedCellsHeatmap;\n dendrogramX: HeatmapSettingsImpl['dendrogramX'];\n dendrogramY: HeatmapSettingsImpl['dendrogramY'];\n}): Promise<DendrogramsData> {\n const { facetKeys, xGroupKeys, yGroupKeys } = groupedCellsData.meta;\n const result: DendrogramsData = {};\n\n if (!dendrogramX && !dendrogramY) {\n return result;\n }\n workerWrapper.reset();\n await Promise.all(facetKeys.map(async facetKey => {\n const facetResult: DendrogramsData[string] = {\n hierarchyByGroupX: {},\n hierarchyByGroupY: {},\n };\n const cellsGroup = groupedCellsData.facets[facetKey];\n if (dendrogramX) {\n const updatedXKeys: string[] = [];\n const clusterInputs = xGroupKeys.map(xGroupKey => {\n const xKeys = cellsGroup.xKeysByGroups[xGroupKey];\n if (!xKeys) return { nonEmptyXKeys: [], emptyXKeys: [] };\n const nonEmptyXKeys = xKeys.filter(x => cellsGroup.cells[x] !== undefined);\n const emptyXKeys = xKeys.filter(x => cellsGroup.cells[x] === undefined);\n return { nonEmptyXKeys, emptyXKeys };\n });\n const rootClusters = await Promise.all(clusterInputs.map(({ nonEmptyXKeys }) => {\n if (nonEmptyXKeys.length === 0) return Promise.resolve(null);\n const yKeys = cellsGroup.yKeys;\n return workerWrapper.wrapper.getClustersApproximate(\n nonEmptyXKeys.map(x => yKeys.map(y => (cellsGroup.cells[x][y]?.normalizedValue.dataSource ?? dendrogramX.fillNA) as number)),\n dendrogramX.distance,\n dendrogramX.linkage\n );\n }));\n xGroupKeys.forEach((xGroupKey, idx) => {\n const { nonEmptyXKeys, emptyXKeys } = clusterInputs[idx];\n const rootCluster = rootClusters[idx];\n const reorderedNonEmptyXKeys = rootCluster\n ? rootCluster.indexes.map(i => nonEmptyXKeys[i])\n : nonEmptyXKeys;\n const newXKeys = [...reorderedNonEmptyXKeys, ...emptyXKeys];\n groupedCellsData.facets[facetKey].xKeysByGroups[xGroupKey] = newXKeys;\n updatedXKeys.push(...newXKeys);\n if (rootCluster) {\n facetResult.hierarchyByGroupX[xGroupKey] = hierarchy(rootCluster);\n }\n });\n // set sorted group keys of all groups\n groupedCellsData.facets[facetKey].xKeys = updatedXKeys;\n }\n if (dendrogramY) {\n const updatedYKeys: string[] = [];\n const clusterInputs = yGroupKeys.map(yGroupKey => {\n const yKeys = cellsGroup.yKeysByGroups[yGroupKey];\n if (!yKeys) return { nonEmptyYKeys: [], emptyYKeys: [] };\n const xKeys = cellsGroup.xKeys;\n const nonEmptyYKeys = yKeys.filter(y => xKeys.some(x => cellsGroup.cells[x]?.[y] !== undefined));\n const emptyYKeys = yKeys.filter(y => xKeys.every(x => cellsGroup.cells[x]?.[y] === undefined));\n return { nonEmptyYKeys, emptyYKeys };\n });\n const rootClusters = await Promise.all(clusterInputs.map(({ nonEmptyYKeys }) => {\n if (nonEmptyYKeys.length === 0) return Promise.resolve(null);\n const xKeys = cellsGroup.xKeys;\n return workerWrapper.wrapper.getClustersApproximate(\n nonEmptyYKeys.map(y => xKeys.map(x => (cellsGroup.cells[x]?.[y]?.normalizedValue.dataSource ?? dendrogramY.fillNA) as number)),\n dendrogramY.distance,\n dendrogramY.linkage\n );\n }));\n yGroupKeys.forEach((yGroupKey, idx) => {\n const { nonEmptyYKeys, emptyYKeys } = clusterInputs[idx];\n const rootCluster = rootClusters[idx];\n const reorderedNonEmptyYKeys = rootCluster\n ? rootCluster.indexes.map(i => nonEmptyYKeys[i])\n : nonEmptyYKeys;\n const newYKeys = [...reorderedNonEmptyYKeys, ...emptyYKeys];\n groupedCellsData.facets[facetKey].yKeysByGroups[yGroupKey] = newYKeys;\n updatedYKeys.push(...newYKeys);\n if (rootCluster) {\n facetResult.hierarchyByGroupY[yGroupKey] = hierarchy(rootCluster);\n }\n });\n // set sorted group keys of all groups\n groupedCellsData.facets[facetKey].yKeys = updatedYKeys;\n }\n result[facetKey] = facetResult;\n }));\n\n return result;\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/heatmap/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAmB,KAAK,SAAS,EAAuB,KAAK,oBAAoB,EAAE,KAAK,eAAe,EAAe,MAAM,UAAU,CAAC;AAE9I,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAC5C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEtD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAExD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAK5D,qBAAa,YAAa,SAAQ,aAAa;IAC3C,QAAQ,EAAE,mBAAmB,CAAC;IAC9B,aAAa,gBAAuB;IAEpC,mBAAmB,EAAE,CAAC,CAAC,EAAC,OAAO,KAAK,IAAI,CAAQ;IAChD,eAAe,EAAE,CAAC,CAAC,EAAC,OAAO,KAAK,IAAI,CAAQ;IAE5C,cAAc,EAAE;QACZ,gBAAgB,EAAE,mBAAmB,CAAC;QACtC,eAAe,EAAE,eAAe,CAAC;QACjC,cAAc,EAAE,SAAS,EAAE,CAAC;KAC/B,GAAG,IAAI,CAAQ;IAEhB,gCAAgC,UAAS;gBAE7B,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,eAAe,EAAE,aAAa,CAAC,EAAC,oBAAoB;IAU3F,KAAK,CAAC,IAAI,EAAE,WAAW;IAgBvB,OAAO;IAIP,qBAAqB,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,eAAe;IA0BhE,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO;IAIhD,MAAM,IAAI,MAAM;IAKhB,mCAAmC,CAAC,YAAY,EAAE,mBAAmB,EAAE,QAAQ,EAAE,mBAAmB;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/heatmap/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAmB,KAAK,SAAS,EAAuB,KAAK,oBAAoB,EAAE,KAAK,eAAe,EAAe,MAAM,UAAU,CAAC;AAE9I,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAC5C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEtD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAExD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAK5D,qBAAa,YAAa,SAAQ,aAAa;IAC3C,QAAQ,EAAE,mBAAmB,CAAC;IAC9B,aAAa,gBAAuB;IAEpC,mBAAmB,EAAE,CAAC,CAAC,EAAC,OAAO,KAAK,IAAI,CAAQ;IAChD,eAAe,EAAE,CAAC,CAAC,EAAC,OAAO,KAAK,IAAI,CAAQ;IAE5C,cAAc,EAAE;QACZ,gBAAgB,EAAE,mBAAmB,CAAC;QACtC,eAAe,EAAE,eAAe,CAAC;QACjC,cAAc,EAAE,SAAS,EAAE,CAAC;KAC/B,GAAG,IAAI,CAAQ;IAEhB,gCAAgC,UAAS;gBAE7B,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,eAAe,EAAE,aAAa,CAAC,EAAC,oBAAoB;IAU3F,KAAK,CAAC,IAAI,EAAE,WAAW;IAgBvB,OAAO;IAIP,qBAAqB,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,eAAe;IA0BhE,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO;IAIhD,MAAM,IAAI,MAAM;IAKhB,mCAAmC,CAAC,YAAY,EAAE,mBAAmB,EAAE,QAAQ,EAAE,mBAAmB;IAoEpG,+BAA+B,CAAC,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS;IAU9D,WAAW;IAkEjB,gBAAgB;IAIhB,YAAY;CAkDf"}
|
package/dist/heatmap/index.js
CHANGED
|
@@ -49,22 +49,46 @@ var d = class extends e {
|
|
|
49
49
|
function S(e, t) {
|
|
50
50
|
return e.length !== t.length || e.some((e, n) => e.value !== t[n].value);
|
|
51
51
|
}
|
|
52
|
-
return e.xColumn.value !== n.value || e.yColumn.value !== a.value || e.valueColumn.value !== o.value || S(e.xGroupBy, s) || S(e.yGroupBy, c) || S(e.facetBy, l) || S(e.annotations.map((e) => e.valueColumn), u.map((e) => e.valueColumn)) || S(v, y) || S(b, x) || (t.dendrogramX || e.dendrogramX) && (e.dendrogramX?.distance !== t.dendrogramX?.distance || e.dendrogramX?.linkage !== t.dendrogramX?.linkage) || (t.dendrogramY || e.dendrogramY) && (e.dendrogramY?.distance !== t.dendrogramY?.distance || e.dendrogramY?.linkage !== t.dendrogramY?.linkage) || e.chartSettings.valueType !== d.valueType || e.facetSettings.sharedX !== f.sharedX || e.facetSettings.sharedY !== f.sharedY || i(e.facetSettings?.order ?? [], t.facetSettings?.order ?? [])
|
|
52
|
+
return e.xColumn.value !== n.value || e.yColumn.value !== a.value || e.valueColumn.value !== o.value || S(e.xGroupBy, s) || S(e.yGroupBy, c) || S(e.facetBy, l) || S(e.annotations.map((e) => e.valueColumn), u.map((e) => e.valueColumn)) || S(v, y) || S(b, x) || (t.dendrogramX || e.dendrogramX) && (e.dendrogramX?.distance !== t.dendrogramX?.distance || e.dendrogramX?.linkage !== t.dendrogramX?.linkage) || (t.dendrogramY || e.dendrogramY) && (e.dendrogramY?.distance !== t.dendrogramY?.distance || e.dendrogramY?.linkage !== t.dendrogramY?.linkage) || e.chartSettings.valueType !== d.valueType || e.facetSettings.sharedX !== f.sharedX || e.facetSettings.sharedY !== f.sharedY || i(e.facetSettings?.order ?? [], t.facetSettings?.order ?? []) || e.normalization?.method !== h?.method || e.normalization?.direction !== h?.direction || e.NAValueAs !== _ || e.aggregation?.method !== g?.method || e.aggregation?.x !== g?.x || e.aggregation?.y !== g?.y || e.showEmptyRows !== t.showEmptyRows || e.showEmptyColumns !== t.showEmptyColumns;
|
|
53
53
|
}
|
|
54
54
|
_needUpdateCalculatedDataByData(e, t) {
|
|
55
55
|
let n = Object.keys(e.data), r = Object.keys(t.data);
|
|
56
56
|
return e.id !== t.id || n.length !== r.length || n.some((n) => e.data[n].length !== t.data[n]?.length);
|
|
57
57
|
}
|
|
58
58
|
async _updateData() {
|
|
59
|
-
let { xColumn: e, yColumn: t, valueColumn: n, xGroupBy: r, yGroupBy: i, facetBy: a, chartSettings: c, facetSettings: l, annotations: u, dendrogramX: d, dendrogramY: f, normalization: p, NAValueAs: m, keysOrder: h, aggregation: g
|
|
59
|
+
let { xColumn: e, yColumn: t, valueColumn: n, xGroupBy: r, yGroupBy: i, facetBy: a, chartSettings: c, facetSettings: l, annotations: u, dendrogramX: d, dendrogramY: f, normalization: p, NAValueAs: m, keysOrder: h, aggregation: g, showEmptyRows: _, showEmptyColumns: v } = this.settings, y = o({
|
|
60
|
+
data: this.data,
|
|
61
|
+
xColumn: e,
|
|
62
|
+
yColumn: t,
|
|
63
|
+
valueColumns: { dataSource: n },
|
|
64
|
+
facetBy: a,
|
|
65
|
+
xGroupBy: r,
|
|
66
|
+
yGroupBy: i,
|
|
67
|
+
facetSettings: l,
|
|
68
|
+
annotations: u,
|
|
69
|
+
dendrogramX: d,
|
|
70
|
+
dendrogramY: f,
|
|
71
|
+
normalization: p,
|
|
72
|
+
NAValueAs: m,
|
|
73
|
+
keysOrder: h,
|
|
74
|
+
xAxis: c.xAxis,
|
|
75
|
+
yAxis: c.yAxis,
|
|
76
|
+
aggregation: g,
|
|
77
|
+
showEmptyRows: _,
|
|
78
|
+
showEmptyColumns: v
|
|
79
|
+
}), b = c.valueType === "discrete" ? this.data.getColumnCategories(n.value) : [];
|
|
60
80
|
if (d && l.sharedX && a.length > 0) throw Error("Dendrogram on X axis is not available with shared by facets X axis");
|
|
61
81
|
if (f && l.sharedY && a.length > 0) throw Error("Dendrogram on Y axis is not available with shared by facets Y axis");
|
|
62
82
|
this.clusteringCalculationsInProgress = !0, this.onLoadingChange(!0);
|
|
63
|
-
let
|
|
83
|
+
let x = await s({
|
|
84
|
+
groupedCellsData: y,
|
|
85
|
+
dendrogramX: d,
|
|
86
|
+
dendrogramY: f
|
|
87
|
+
});
|
|
64
88
|
this.clusteringCalculationsInProgress = !1, this.onLoadingChange(!1), this.calculatedData = {
|
|
65
|
-
groupedCellsData:
|
|
66
|
-
dendrogramsData:
|
|
67
|
-
cellUniqValues:
|
|
89
|
+
groupedCellsData: y,
|
|
90
|
+
dendrogramsData: x,
|
|
91
|
+
cellUniqValues: b
|
|
68
92
|
}, this._updateChart();
|
|
69
93
|
}
|
|
70
94
|
_updateAesInData() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../src/heatmap/index.ts"],"sourcesContent":["import { renderToString } from 'react-dom/server.browser';\nimport { AbstractChart } from '../AbstractChart';\nimport type { DataFrame } from '../DataFrame';\nimport { type ColumnName, type DataValue, getUnknownErrorInfo, type HeatmapEventHandlers, type HeatmapSettings, isErrorInfo } from '../types';\nimport { isColumnName } from '../utils';\nimport ChartRenderer from './ChartRenderer';\nimport type { GroupedCellsHeatmap } from './getCells';\nimport { getCells } from './getCells';\nimport type { DendrogramsData } from './getDendrograms';\nimport { getDendrograms } from './getDendrograms';\nimport { HeatmapSettingsImpl } from './HeatmapSettingsImpl';\nimport { MAX_SVG_RENDERED_CELLS_COUNT } from './constants';\nimport { noop } from 'lodash';\nimport { arraysAreDifferent } from '../utils/arraysAreDifferent';\n\nexport class ChartHeatmap extends AbstractChart {\n settings: HeatmapSettingsImpl;\n chartRenderer = new ChartRenderer();\n\n onTooltipHintSwitch: (v:boolean) => void = noop;\n onLoadingChange: (v:boolean) => void = noop;\n\n calculatedData: {\n groupedCellsData: GroupedCellsHeatmap;\n dendrogramsData: DendrogramsData;\n cellUniqValues: DataValue[];\n } | null = null;\n\n clusteringCalculationsInProgress = false;\n\n constructor(data: DataFrame, settings: HeatmapSettings, eventHandlers?:HeatmapEventHandlers) {\n super(data, settings);\n\n this.settings = new HeatmapSettingsImpl(settings);\n if (eventHandlers) {\n this.onTooltipHintSwitch = eventHandlers.onTooltipHintSwitch ?? noop;\n this.onLoadingChange = eventHandlers.onLoadingChange ?? noop;\n }\n }\n\n mount(node: HTMLElement) {\n try {\n this.chartRenderer.init(node);\n this._updateData();\n this.hasError = false;\n this.errorInfo = null;\n } catch (err) {\n this.hasError = true;\n if (err instanceof Error) {\n this.errorInfo = isErrorInfo(err.cause) ? err.cause : getUnknownErrorInfo(err);\n this.chartRenderer.renderError(err.message as string);\n console.error(err);\n }\n }\n }\n\n unmount() {\n this.chartRenderer.clear();\n }\n\n updateSettingsAndData(data: DataFrame, settings: HeatmapSettings) {\n try {\n const previousSettings = this.settings;\n const previousData = this.data;\n this.settings = new HeatmapSettingsImpl(settings);\n this.data = data;\n if (\n this._needUpdateCalculatedDataBySettings(previousSettings, this.settings) ||\n this._needUpdateCalculatedDataByData(previousData, this.data)\n ) {\n this._updateData();\n } else {\n this._updateAesInData();\n }\n this.hasError = false;\n this.errorInfo = null;\n } catch (err) {\n this.hasError = true;\n if (err instanceof Error) {\n this.errorInfo = isErrorInfo(err.cause) ? err.cause : getUnknownErrorInfo(err);\n this.chartRenderer.renderError(err.message as string);\n console.error(err);\n }\n }\n }\n\n updateChartState(_field: string, _value: unknown) {\n console.warn('no chart state for heatmap');\n }\n\n export(): string {\n this._updateChart();\n return renderToString(this.chartRenderer.component);\n }\n\n _needUpdateCalculatedDataBySettings(prevSettings: HeatmapSettingsImpl, settings: HeatmapSettingsImpl) {\n const {\n xColumn,\n yColumn,\n valueColumn,\n xGroupBy,\n yGroupBy,\n facetBy,\n annotations,\n chartSettings,\n facetSettings,\n dendrogramX,\n dendrogramY,\n normalization,\n aggregation,\n NAValueAs,\n } = settings;\n\n const prevDendrogramXColumns: ColumnName[] = Object.values(prevSettings.dendrogramX?.aes || {}).filter(\n isColumnName\n );\n const currentDendrogramXColumns: ColumnName[] = Object.values(dendrogramX?.aes || {}).filter(isColumnName);\n const prevDendrogramYColumns: ColumnName[] = Object.values(prevSettings.dendrogramY?.aes || {}).filter(\n isColumnName\n );\n const currentDendrogramYColumns: ColumnName[] = Object.values(dendrogramY?.aes || {}).filter(isColumnName);\n\n function compareColumnGroups(columns1: ColumnName[], columns2: ColumnName[]) {\n return (\n columns1.length !== columns2.length ||\n columns1.some((column, idx) => column.value !== columns2[idx].value)\n );\n }\n\n return (\n prevSettings.xColumn.value !== xColumn.value ||\n prevSettings.yColumn.value !== yColumn.value ||\n prevSettings.valueColumn.value !== valueColumn.value ||\n compareColumnGroups(prevSettings.xGroupBy, xGroupBy) ||\n compareColumnGroups(prevSettings.yGroupBy, yGroupBy) ||\n compareColumnGroups(prevSettings.facetBy, facetBy) ||\n compareColumnGroups(\n prevSettings.annotations.map(a => a.valueColumn),\n annotations.map(a => a.valueColumn)\n ) ||\n compareColumnGroups(prevDendrogramXColumns, currentDendrogramXColumns) ||\n compareColumnGroups(prevDendrogramYColumns, currentDendrogramYColumns) ||\n ((settings.dendrogramX || prevSettings.dendrogramX) &&\n (prevSettings.dendrogramX?.distance !== settings.dendrogramX?.distance ||\n prevSettings.dendrogramX?.linkage !== settings.dendrogramX?.linkage)) ||\n ((settings.dendrogramY || prevSettings.dendrogramY) &&\n (prevSettings.dendrogramY?.distance !== settings.dendrogramY?.distance ||\n prevSettings.dendrogramY?.linkage !== settings.dendrogramY?.linkage)) ||\n prevSettings.chartSettings.valueType !== chartSettings.valueType ||\n prevSettings.facetSettings.sharedX !== facetSettings.sharedX ||\n prevSettings.facetSettings.sharedY !== facetSettings.sharedY ||\n arraysAreDifferent(prevSettings.facetSettings?.order ?? [], settings.facetSettings?.order ?? []),\n prevSettings.normalization?.method !== normalization?.method ||\n prevSettings.normalization?.direction !== normalization?.direction ||\n prevSettings.NAValueAs !== NAValueAs ||\n prevSettings.aggregation?.method !== aggregation?.method ||\n prevSettings.aggregation?.x !== aggregation?.x ||\n prevSettings.aggregation?.y !== aggregation?.y\n );\n }\n\n _needUpdateCalculatedDataByData(prevData: DataFrame, data: DataFrame) {\n const prevKeys = Object.keys(prevData.data);\n const keys = Object.keys(data.data);\n return (\n prevData.id !== data.id ||\n prevKeys.length !== keys.length ||\n prevKeys.some(key => prevData.data[key].length !== data.data[key]?.length)\n );\n }\n\n async _updateData() {\n const {\n xColumn,\n yColumn,\n valueColumn,\n xGroupBy,\n yGroupBy,\n facetBy,\n chartSettings,\n facetSettings,\n annotations,\n dendrogramX,\n dendrogramY,\n normalization,\n NAValueAs,\n keysOrder,\n aggregation\n } = this.settings;\n\n const groupedCellsData = getCells(\n this.data,\n xColumn,\n yColumn,\n {dataSource: valueColumn},\n facetBy,\n xGroupBy,\n yGroupBy,\n facetSettings,\n annotations,\n dendrogramX,\n dendrogramY,\n normalization,\n NAValueAs,\n keysOrder,\n chartSettings.xAxis,\n chartSettings.yAxis,\n aggregation\n );\n\n const cellUniqValues = chartSettings.valueType === 'discrete' ? this.data.getColumnCategories(valueColumn.value) : [];\n \n if (dendrogramX && facetSettings.sharedX && facetBy.length > 0) {\n throw Error('Dendrogram on X axis is not available with shared by facets X axis');\n }\n if (dendrogramY && facetSettings.sharedY && facetBy.length > 0) {\n throw Error('Dendrogram on Y axis is not available with shared by facets Y axis');\n }\n this.clusteringCalculationsInProgress = true;\n this.onLoadingChange(true);\n const dendrogramsData = await getDendrograms(groupedCellsData, dendrogramX, dendrogramY);\n this.clusteringCalculationsInProgress = false;\n this.onLoadingChange(false);\n\n this.calculatedData = {\n groupedCellsData,\n dendrogramsData,\n cellUniqValues,\n };\n \n this._updateChart();\n }\n\n _updateAesInData() {\n this._updateChart();\n }\n\n _updateChart() {\n if (!this.calculatedData || this.clusteringCalculationsInProgress) {\n return;\n }\n const {\n id,\n valueColumn,\n chartSettings,\n facetSettings,\n aes,\n annotations,\n dendrogramX,\n dendrogramY,\n inheritedDendrogramAes,\n normalization,\n keysOrder,\n xColumn,\n yColumn,\n xGroupBy,\n yGroupBy,\n } = this.settings;\n const customOrder = {\n x: keysOrder[xColumn.value]?.length > 0,\n y: keysOrder[yColumn.value]?.length > 0,\n xGroup: xGroupBy.some((v) => keysOrder[v.value]?.length > 0),\n yGroup: yGroupBy.some((v) => keysOrder[v.value]?.length > 0),\n };\n const dataSize = this.data.columnNames.length ? this.data.getColumn(this.data.columnNames[0]).length : 0;\n const cellsRenderingMode = this.settings.cellsRenderingMode ?? (dataSize > MAX_SVG_RENDERED_CELLS_COUNT ? 'canvas' : 'svg');\n \n this.chartRenderer.render(\n this.data,\n id,\n chartSettings,\n facetSettings,\n aes,\n this.calculatedData.groupedCellsData,\n annotations,\n valueColumn,\n dendrogramX,\n dendrogramY,\n this.calculatedData.dendrogramsData,\n inheritedDendrogramAes,\n this.calculatedData.cellUniqValues,\n normalization,\n this.onTooltipHintSwitch,\n customOrder,\n cellsRenderingMode\n );\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../src/heatmap/index.ts"],"sourcesContent":["import { renderToString } from 'react-dom/server.browser';\nimport { AbstractChart } from '../AbstractChart';\nimport type { DataFrame } from '../DataFrame';\nimport { type ColumnName, type DataValue, getUnknownErrorInfo, type HeatmapEventHandlers, type HeatmapSettings, isErrorInfo } from '../types';\nimport { isColumnName } from '../utils';\nimport ChartRenderer from './ChartRenderer';\nimport type { GroupedCellsHeatmap } from './getCells';\nimport { getCells } from './getCells';\nimport type { DendrogramsData } from './getDendrograms';\nimport { getDendrograms } from './getDendrograms';\nimport { HeatmapSettingsImpl } from './HeatmapSettingsImpl';\nimport { MAX_SVG_RENDERED_CELLS_COUNT } from './constants';\nimport { noop } from 'lodash';\nimport { arraysAreDifferent } from '../utils/arraysAreDifferent';\n\nexport class ChartHeatmap extends AbstractChart {\n settings: HeatmapSettingsImpl;\n chartRenderer = new ChartRenderer();\n\n onTooltipHintSwitch: (v:boolean) => void = noop;\n onLoadingChange: (v:boolean) => void = noop;\n\n calculatedData: {\n groupedCellsData: GroupedCellsHeatmap;\n dendrogramsData: DendrogramsData;\n cellUniqValues: DataValue[];\n } | null = null;\n\n clusteringCalculationsInProgress = false;\n\n constructor(data: DataFrame, settings: HeatmapSettings, eventHandlers?:HeatmapEventHandlers) {\n super(data, settings);\n\n this.settings = new HeatmapSettingsImpl(settings);\n if (eventHandlers) {\n this.onTooltipHintSwitch = eventHandlers.onTooltipHintSwitch ?? noop;\n this.onLoadingChange = eventHandlers.onLoadingChange ?? noop;\n }\n }\n\n mount(node: HTMLElement) {\n try {\n this.chartRenderer.init(node);\n this._updateData();\n this.hasError = false;\n this.errorInfo = null;\n } catch (err) {\n this.hasError = true;\n if (err instanceof Error) {\n this.errorInfo = isErrorInfo(err.cause) ? err.cause : getUnknownErrorInfo(err);\n this.chartRenderer.renderError(err.message as string);\n console.error(err);\n }\n }\n }\n\n unmount() {\n this.chartRenderer.clear();\n }\n\n updateSettingsAndData(data: DataFrame, settings: HeatmapSettings) {\n try {\n const previousSettings = this.settings;\n const previousData = this.data;\n this.settings = new HeatmapSettingsImpl(settings);\n this.data = data;\n if (\n this._needUpdateCalculatedDataBySettings(previousSettings, this.settings) ||\n this._needUpdateCalculatedDataByData(previousData, this.data)\n ) {\n this._updateData();\n } else {\n this._updateAesInData();\n }\n this.hasError = false;\n this.errorInfo = null;\n } catch (err) {\n this.hasError = true;\n if (err instanceof Error) {\n this.errorInfo = isErrorInfo(err.cause) ? err.cause : getUnknownErrorInfo(err);\n this.chartRenderer.renderError(err.message as string);\n console.error(err);\n }\n }\n }\n\n updateChartState(_field: string, _value: unknown) {\n console.warn('no chart state for heatmap');\n }\n\n export(): string {\n this._updateChart();\n return renderToString(this.chartRenderer.component);\n }\n\n _needUpdateCalculatedDataBySettings(prevSettings: HeatmapSettingsImpl, settings: HeatmapSettingsImpl) {\n const {\n xColumn,\n yColumn,\n valueColumn,\n xGroupBy,\n yGroupBy,\n facetBy,\n annotations,\n chartSettings,\n facetSettings,\n dendrogramX,\n dendrogramY,\n normalization,\n aggregation,\n NAValueAs,\n } = settings;\n\n const prevDendrogramXColumns: ColumnName[] = Object.values(prevSettings.dendrogramX?.aes || {}).filter(\n isColumnName\n );\n const currentDendrogramXColumns: ColumnName[] = Object.values(dendrogramX?.aes || {}).filter(isColumnName);\n const prevDendrogramYColumns: ColumnName[] = Object.values(prevSettings.dendrogramY?.aes || {}).filter(\n isColumnName\n );\n const currentDendrogramYColumns: ColumnName[] = Object.values(dendrogramY?.aes || {}).filter(isColumnName);\n\n function compareColumnGroups(columns1: ColumnName[], columns2: ColumnName[]) {\n return (\n columns1.length !== columns2.length ||\n columns1.some((column, idx) => column.value !== columns2[idx].value)\n );\n }\n\n return (\n prevSettings.xColumn.value !== xColumn.value ||\n prevSettings.yColumn.value !== yColumn.value ||\n prevSettings.valueColumn.value !== valueColumn.value ||\n compareColumnGroups(prevSettings.xGroupBy, xGroupBy) ||\n compareColumnGroups(prevSettings.yGroupBy, yGroupBy) ||\n compareColumnGroups(prevSettings.facetBy, facetBy) ||\n compareColumnGroups(\n prevSettings.annotations.map(a => a.valueColumn),\n annotations.map(a => a.valueColumn)\n ) ||\n compareColumnGroups(prevDendrogramXColumns, currentDendrogramXColumns) ||\n compareColumnGroups(prevDendrogramYColumns, currentDendrogramYColumns) ||\n ((settings.dendrogramX || prevSettings.dendrogramX) &&\n (prevSettings.dendrogramX?.distance !== settings.dendrogramX?.distance ||\n prevSettings.dendrogramX?.linkage !== settings.dendrogramX?.linkage)) ||\n ((settings.dendrogramY || prevSettings.dendrogramY) &&\n (prevSettings.dendrogramY?.distance !== settings.dendrogramY?.distance ||\n prevSettings.dendrogramY?.linkage !== settings.dendrogramY?.linkage)) ||\n prevSettings.chartSettings.valueType !== chartSettings.valueType ||\n prevSettings.facetSettings.sharedX !== facetSettings.sharedX ||\n prevSettings.facetSettings.sharedY !== facetSettings.sharedY ||\n arraysAreDifferent(prevSettings.facetSettings?.order ?? [], settings.facetSettings?.order ?? []) ||\n prevSettings.normalization?.method !== normalization?.method ||\n prevSettings.normalization?.direction !== normalization?.direction ||\n prevSettings.NAValueAs !== NAValueAs ||\n prevSettings.aggregation?.method !== aggregation?.method ||\n prevSettings.aggregation?.x !== aggregation?.x ||\n prevSettings.aggregation?.y !== aggregation?.y ||\n prevSettings.showEmptyRows !== settings.showEmptyRows ||\n prevSettings.showEmptyColumns !== settings.showEmptyColumns\n );\n }\n\n _needUpdateCalculatedDataByData(prevData: DataFrame, data: DataFrame) {\n const prevKeys = Object.keys(prevData.data);\n const keys = Object.keys(data.data);\n return (\n prevData.id !== data.id ||\n prevKeys.length !== keys.length ||\n prevKeys.some(key => prevData.data[key].length !== data.data[key]?.length)\n );\n }\n\n async _updateData() {\n const {\n xColumn,\n yColumn,\n valueColumn,\n xGroupBy,\n yGroupBy,\n facetBy,\n chartSettings,\n facetSettings,\n annotations,\n dendrogramX,\n dendrogramY,\n normalization,\n NAValueAs,\n keysOrder,\n aggregation,\n showEmptyRows,\n showEmptyColumns,\n } = this.settings;\n\n const groupedCellsData = getCells({\n data: this.data,\n xColumn,\n yColumn,\n valueColumns: { dataSource: valueColumn },\n facetBy,\n xGroupBy,\n yGroupBy,\n facetSettings,\n annotations,\n dendrogramX,\n dendrogramY,\n normalization,\n NAValueAs,\n keysOrder,\n xAxis: chartSettings.xAxis,\n yAxis: chartSettings.yAxis,\n aggregation,\n showEmptyRows,\n showEmptyColumns,\n });\n\n const cellUniqValues = chartSettings.valueType === 'discrete' ? this.data.getColumnCategories(valueColumn.value) : [];\n \n if (dendrogramX && facetSettings.sharedX && facetBy.length > 0) {\n throw Error('Dendrogram on X axis is not available with shared by facets X axis');\n }\n if (dendrogramY && facetSettings.sharedY && facetBy.length > 0) {\n throw Error('Dendrogram on Y axis is not available with shared by facets Y axis');\n }\n this.clusteringCalculationsInProgress = true;\n this.onLoadingChange(true);\n const dendrogramsData = await getDendrograms({ groupedCellsData, dendrogramX, dendrogramY });\n this.clusteringCalculationsInProgress = false;\n this.onLoadingChange(false);\n\n this.calculatedData = {\n groupedCellsData,\n dendrogramsData,\n cellUniqValues,\n };\n \n this._updateChart();\n }\n\n _updateAesInData() {\n this._updateChart();\n }\n\n _updateChart() {\n if (!this.calculatedData || this.clusteringCalculationsInProgress) {\n return;\n }\n const {\n id,\n valueColumn,\n chartSettings,\n facetSettings,\n aes,\n annotations,\n dendrogramX,\n dendrogramY,\n inheritedDendrogramAes,\n normalization,\n keysOrder,\n xColumn,\n yColumn,\n xGroupBy,\n yGroupBy,\n } = this.settings;\n const customOrder = {\n x: keysOrder[xColumn.value]?.length > 0,\n y: keysOrder[yColumn.value]?.length > 0,\n xGroup: xGroupBy.some((v) => keysOrder[v.value]?.length > 0),\n yGroup: yGroupBy.some((v) => keysOrder[v.value]?.length > 0),\n };\n const dataSize = this.data.columnNames.length ? this.data.getColumn(this.data.columnNames[0]).length : 0;\n const cellsRenderingMode = this.settings.cellsRenderingMode ?? (dataSize > MAX_SVG_RENDERED_CELLS_COUNT ? 'canvas' : 'svg');\n \n this.chartRenderer.render(\n this.data,\n id,\n chartSettings,\n facetSettings,\n aes,\n this.calculatedData.groupedCellsData,\n annotations,\n valueColumn,\n dendrogramX,\n dendrogramY,\n this.calculatedData.dendrogramsData,\n inheritedDendrogramAes,\n this.calculatedData.cellUniqValues,\n normalization,\n this.onTooltipHintSwitch,\n customOrder,\n cellsRenderingMode\n );\n }\n}\n"],"mappings":"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"}
|
|
@@ -37,11 +37,11 @@ declare class ChartRenderer {
|
|
|
37
37
|
createFacetTitles(facetKeys: string[], facetLabels: string[][]): void;
|
|
38
38
|
createAxisLabels(facetKeys: string[], xAxis: ScatterplotSettingsImpl['chartSettings']['xAxis'], yAxis: ScatterplotSettingsImpl['chartSettings']['xAxis'], discreteAxisDataX: DiscreteAxisData, discreteAxisDataY: DiscreteAxisData): void;
|
|
39
39
|
updateMargins(facetKeys: string[]): void;
|
|
40
|
-
updateLegendSize(legend: ScatterplotSettingsImpl['chartSettings']['legend'], legendInfo: ScatterplotLegendInfo, grouping: ColumnName[], layers: ScatterplotLayer[]): void;
|
|
40
|
+
updateLegendSize(legend: ScatterplotSettingsImpl['chartSettings']['legend'], legendInfo: ScatterplotLegendInfo, grouping: ColumnName[], layers: ScatterplotLayer[], additionalCurves: ScatterplotSettingsImpl['additionalCurves'], yColumn: ColumnName): void;
|
|
41
41
|
render(dataFrame: DataFrame, settingsId: string, chartSettings: ScatterplotSettingsImpl['chartSettings'], facetSettings: ScatterplotSettingsImpl['facetSettings'], facetKeys: string[], facetLabels: string[][], groupedDots: GroupedDots, trendsData: TrendsData | null, keyColumn: ColumnName, onlyPositive: {
|
|
42
42
|
x: boolean;
|
|
43
43
|
y: boolean;
|
|
44
|
-
}, legendInfo: ScatterplotLegendInfo, layersData: Record<string, ScatterplotLayerData[]>, grouping: ColumnName[], layers: ScatterplotLayer[], trend: ScatterplotSettingsImpl['trend'], discreteAxisDataX: DiscreteAxisData, discreteAxisDataY: DiscreteAxisData, onTooltipHintSwitch: (v: boolean) => void): void;
|
|
44
|
+
}, legendInfo: ScatterplotLegendInfo, layersData: Record<string, ScatterplotLayerData[]>, grouping: ColumnName[], layers: ScatterplotLayer[], trend: ScatterplotSettingsImpl['trend'], discreteAxisDataX: DiscreteAxisData, discreteAxisDataY: DiscreteAxisData, onTooltipHintSwitch: (v: boolean) => void, additionalCurves: ScatterplotSettingsImpl['additionalCurves'], yColumn: ColumnName): void;
|
|
45
45
|
renderError(message: string): void;
|
|
46
46
|
}
|
|
47
47
|
export default ChartRenderer;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChartRenderer.d.ts","sourceRoot":"","sources":["../../src/scatterplot/ChartRenderer.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAC1C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAG7C,OAAO,KAAK,EAAc,UAAU,EAAc,MAAM,iBAAiB,CAAC;AAY1E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAG9C,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"ChartRenderer.d.ts","sourceRoot":"","sources":["../../src/scatterplot/ChartRenderer.tsx"],"names":[],"mappings":"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"}
|