@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.
Files changed (101) hide show
  1. package/dist/bubble/BubbleSettingsImpl.d.ts +2 -0
  2. package/dist/bubble/BubbleSettingsImpl.d.ts.map +1 -1
  3. package/dist/bubble/BubbleSettingsImpl.js +3 -1
  4. package/dist/bubble/BubbleSettingsImpl.js.map +1 -1
  5. package/dist/bubble/getGroupedCellsData.d.ts +1 -1
  6. package/dist/bubble/getGroupedCellsData.d.ts.map +1 -1
  7. package/dist/bubble/getGroupedCellsData.js +30 -10
  8. package/dist/bubble/getGroupedCellsData.js.map +1 -1
  9. package/dist/bubble/index.d.ts.map +1 -1
  10. package/dist/bubble/index.js +3 -3
  11. package/dist/bubble/index.js.map +1 -1
  12. package/dist/heatmap/ChartRenderer.d.ts.map +1 -1
  13. package/dist/heatmap/ChartRenderer.js +26 -20
  14. package/dist/heatmap/ChartRenderer.js.map +1 -1
  15. package/dist/heatmap/HeatmapSettingsImpl.d.ts +2 -0
  16. package/dist/heatmap/HeatmapSettingsImpl.d.ts.map +1 -1
  17. package/dist/heatmap/HeatmapSettingsImpl.js +3 -1
  18. package/dist/heatmap/HeatmapSettingsImpl.js.map +1 -1
  19. package/dist/heatmap/fillCellsData.d.ts +22 -2
  20. package/dist/heatmap/fillCellsData.d.ts.map +1 -1
  21. package/dist/heatmap/fillCellsData.js +60 -47
  22. package/dist/heatmap/fillCellsData.js.map +1 -1
  23. package/dist/heatmap/getCells.d.ts +22 -1
  24. package/dist/heatmap/getCells.d.ts.map +1 -1
  25. package/dist/heatmap/getCells.js +23 -3
  26. package/dist/heatmap/getCells.js.map +1 -1
  27. package/dist/heatmap/getDendrograms.d.ts +5 -1
  28. package/dist/heatmap/getDendrograms.d.ts.map +1 -1
  29. package/dist/heatmap/getDendrograms.js +33 -11
  30. package/dist/heatmap/getDendrograms.js.map +1 -1
  31. package/dist/heatmap/index.d.ts.map +1 -1
  32. package/dist/heatmap/index.js +30 -6
  33. package/dist/heatmap/index.js.map +1 -1
  34. package/dist/scatterplot/ChartRenderer.d.ts +2 -2
  35. package/dist/scatterplot/ChartRenderer.d.ts.map +1 -1
  36. package/dist/scatterplot/ChartRenderer.js +155 -115
  37. package/dist/scatterplot/ChartRenderer.js.map +1 -1
  38. package/dist/scatterplot/ScatterplotSettingsImpl.d.ts +11 -1
  39. package/dist/scatterplot/ScatterplotSettingsImpl.d.ts.map +1 -1
  40. package/dist/scatterplot/ScatterplotSettingsImpl.js +20 -0
  41. package/dist/scatterplot/ScatterplotSettingsImpl.js.map +1 -1
  42. package/dist/scatterplot/components/ChartLayersData.d.ts +5 -0
  43. package/dist/scatterplot/components/ChartLayersData.d.ts.map +1 -1
  44. package/dist/scatterplot/components/ChartLayersData.js +115 -35
  45. package/dist/scatterplot/components/ChartLayersData.js.map +1 -1
  46. package/dist/scatterplot/components/types.d.ts +2 -0
  47. package/dist/scatterplot/components/types.d.ts.map +1 -1
  48. package/dist/scatterplot/getLayersData.d.ts +11 -2
  49. package/dist/scatterplot/getLayersData.d.ts.map +1 -1
  50. package/dist/scatterplot/getLayersData.js +36 -19
  51. package/dist/scatterplot/getLayersData.js.map +1 -1
  52. package/dist/scatterplot/index.d.ts.map +1 -1
  53. package/dist/scatterplot/index.js +51 -33
  54. package/dist/scatterplot/index.js.map +1 -1
  55. package/dist/scatterplot/linearRegression.js +1 -1
  56. package/dist/scatterplot/utils/createAesGetter.d.ts.map +1 -1
  57. package/dist/scatterplot/utils/createAesGetter.js +5 -3
  58. package/dist/scatterplot/utils/createAesGetter.js.map +1 -1
  59. package/dist/scatterplot/utils/createLegendInfo.d.ts +11 -2
  60. package/dist/scatterplot/utils/createLegendInfo.d.ts.map +1 -1
  61. package/dist/scatterplot/utils/createLegendInfo.js +21 -16
  62. package/dist/scatterplot/utils/createLegendInfo.js.map +1 -1
  63. package/dist/scatterplot-umap/ChartRenderer.d.ts +6 -6
  64. package/dist/scatterplot-umap/ChartRenderer.d.ts.map +1 -1
  65. package/dist/scatterplot-umap/ChartRenderer.js +99 -57
  66. package/dist/scatterplot-umap/ChartRenderer.js.map +1 -1
  67. package/dist/scatterplot-umap/SettingsImpl.d.ts +11 -1
  68. package/dist/scatterplot-umap/SettingsImpl.d.ts.map +1 -1
  69. package/dist/scatterplot-umap/SettingsImpl.js +21 -1
  70. package/dist/scatterplot-umap/SettingsImpl.js.map +1 -1
  71. package/dist/scatterplot-umap/components/LowerSVG.d.ts +3 -2
  72. package/dist/scatterplot-umap/components/LowerSVG.d.ts.map +1 -1
  73. package/dist/scatterplot-umap/components/LowerSVG.js +159 -108
  74. package/dist/scatterplot-umap/components/LowerSVG.js.map +1 -1
  75. package/dist/scatterplot-umap/components/SVGLayer.d.ts +1 -1
  76. package/dist/scatterplot-umap/components/SVGLayer.d.ts.map +1 -1
  77. package/dist/scatterplot-umap/components/SVGLayer.js +9 -8
  78. package/dist/scatterplot-umap/components/SVGLayer.js.map +1 -1
  79. package/dist/scatterplot-umap/index.d.ts +6 -1
  80. package/dist/scatterplot-umap/index.d.ts.map +1 -1
  81. package/dist/scatterplot-umap/index.js +65 -31
  82. package/dist/scatterplot-umap/index.js.map +1 -1
  83. package/dist/scatterplot-umap/types.d.ts +7 -0
  84. package/dist/scatterplot-umap/types.d.ts.map +1 -1
  85. package/dist/types/bubble.d.ts +6 -0
  86. package/dist/types/bubble.d.ts.map +1 -1
  87. package/dist/types/bubble.js +3 -1
  88. package/dist/types/bubble.js.map +1 -1
  89. package/dist/types/heatmap.d.ts +6 -0
  90. package/dist/types/heatmap.d.ts.map +1 -1
  91. package/dist/types/heatmap.js +2 -0
  92. package/dist/types/heatmap.js.map +1 -1
  93. package/dist/types/scatterplot-umap.d.ts +763 -87
  94. package/dist/types/scatterplot-umap.d.ts.map +1 -1
  95. package/dist/types/scatterplot-umap.js +19 -3
  96. package/dist/types/scatterplot-umap.js.map +1 -1
  97. package/dist/types/scatterplot.d.ts +1377 -44
  98. package/dist/types/scatterplot.d.ts.map +1 -1
  99. package/dist/types/scatterplot.js +27 -3
  100. package/dist/types/scatterplot.js.map +1 -1
  101. 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: GroupedCellsHeatmap, dendrogramX: HeatmapSettingsImpl['dendrogramX'], dendrogramY: HeatmapSettingsImpl['dendrogramY']): Promise<DendrogramsData>;
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,CAChC,gBAAgB,EAAE,mBAAmB,EACrC,WAAW,EAAE,mBAAmB,CAAC,aAAa,CAAC,EAC/C,WAAW,EAAE,mBAAmB,CAAC,aAAa,CAAC,GAChD,OAAO,CAAC,eAAe,CAAC,CA6D1B"}
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 = await Promise.all(o.map(async (e) => {
14
- let n = u.xKeysByGroups[e], i = u.yKeys;
15
- return r.wrapper.getClustersApproximate(n.map((e) => i.map((n) => u.cells[e][n]?.normalizedValue.dataSource ?? t.fillNA)), t.distance, t.linkage);
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 = o.indexes.map((e) => u.xKeysByGroups[t][e]);
19
- e.facets[a].xKeysByGroups[t] = c, i.push(...c), l.hierarchyByGroupX[t] = n(o);
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 = await Promise.all(s.map(async (e) => {
24
- let t = u.yKeysByGroups[e], n = u.xKeys;
25
- return r.wrapper.getClustersApproximate(t.map((e) => n.map((t) => u.cells[t][e]?.normalizedValue.dataSource ?? i.fillNA)), i.distance, i.linkage);
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 = s.indexes.map((e) => u.yKeysByGroups[r][e]);
29
- e.facets[a].yKeysByGroups[r] = c, t.push(...c), l.hierarchyByGroupY[r] = n(s);
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,\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 rootClusters = await Promise.all(xGroupKeys.map(async xGroupKey => {\n const xKeys = cellsGroup.xKeysByGroups[xGroupKey];\n const yKeys = cellsGroup.yKeys;\n return workerWrapper.wrapper.getClustersApproximate(\n xKeys.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 //set sorted group keys\n const rootCluster = rootClusters[idx];\n const newXKeys = rootCluster.indexes.map(i => cellsGroup.xKeysByGroups[xGroupKey][i]);\n groupedCellsData.facets[facetKey].xKeysByGroups[xGroupKey] = newXKeys;\n updatedXKeys.push(...newXKeys);\n facetResult.hierarchyByGroupX[xGroupKey] = hierarchy(rootCluster);\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 rootClusters = await Promise.all(yGroupKeys.map(async yGroupKey => {\n const yKeys = cellsGroup.yKeysByGroups[yGroupKey];\n const xKeys = cellsGroup.xKeys;\n return workerWrapper.wrapper.getClustersApproximate(\n yKeys.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 rootCluster = rootClusters[idx];\n const newYKeys = rootCluster.indexes.map(i => cellsGroup.yKeysByGroups[yGroupKey][i]);\n groupedCellsData.facets[facetKey].yKeysByGroups[yGroupKey] = newYKeys;\n updatedYKeys.push(...newYKeys);\n facetResult.hierarchyByGroupY[yGroupKey] = hierarchy(rootCluster);\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":";;;AAcA,IAAM,IAAgB,IAAI,QAA+E,IAAI,GAAmB,CAAC;AAEjI,eAAsB,EAClB,GACA,GACA,GACwB;CACxB,IAAM,EAAE,cAAW,eAAY,kBAAe,EAAiB,MACzD,IAA0B,EAAE;AA0DlC,QAxDI,CAAC,KAAe,CAAC,IACV,KAEX,EAAc,OAAO,EACrB,MAAM,QAAQ,IAAI,EAAU,IAAI,OAAM,MAAY;EAC9C,IAAM,IAAuC;GACzC,mBAAmB,EAAE;GACrB,mBAAmB,EAAE;GACxB,EACK,IAAa,EAAiB,OAAO;AAC3C,MAAI,GAAa;GACb,IAAM,IAAyB,EAAE,EAC3B,IAAe,MAAM,QAAQ,IAAI,EAAW,IAAI,OAAM,MAAa;IACrE,IAAM,IAAQ,EAAW,cAAc,IACjC,IAAQ,EAAW;AACzB,WAAO,EAAc,QAAQ,uBACzB,EAAM,KAAI,MAAK,EAAM,KAAI,MAAM,EAAW,MAAM,GAAG,IAAI,gBAAgB,cAAc,EAAY,OAAkB,CAAC,EACpH,EAAY,UACZ,EAAY,QACf;KACH,CAAC;AAUH,GATA,EAAW,SAAS,GAAW,MAAQ;IAEnC,IAAM,IAAc,EAAa,IAC3B,IAAW,EAAY,QAAQ,KAAI,MAAK,EAAW,cAAc,GAAW,GAAG;AAGrF,IAFA,EAAiB,OAAO,GAAU,cAAc,KAAa,GAC7D,EAAa,KAAK,GAAG,EAAS,EAC9B,EAAY,kBAAkB,KAAa,EAAU,EAAY;KACnE,EAEF,EAAiB,OAAO,GAAU,QAAQ;;AAE9C,MAAI,GAAa;GACb,IAAM,IAAyB,EAAE,EAC3B,IAAe,MAAM,QAAQ,IAAI,EAAW,IAAI,OAAM,MAAa;IACrE,IAAM,IAAQ,EAAW,cAAc,IACjC,IAAQ,EAAW;AACzB,WAAO,EAAc,QAAQ,uBACzB,EAAM,KAAI,MAAK,EAAM,KAAI,MAAM,EAAW,MAAM,GAAG,IAAI,gBAAgB,cAAc,EAAY,OAAkB,CAAC,EACpH,EAAY,UACZ,EAAY,QACf;KACH,CAAC;AASH,GARA,EAAW,SAAS,GAAW,MAAQ;IACnC,IAAM,IAAc,EAAa,IAC3B,IAAW,EAAY,QAAQ,KAAI,MAAK,EAAW,cAAc,GAAW,GAAG;AAGrF,IAFA,EAAiB,OAAO,GAAU,cAAc,KAAa,GAC7D,EAAa,KAAK,GAAG,EAAS,EAC9B,EAAY,kBAAkB,KAAa,EAAU,EAAY;KACnE,EAEF,EAAiB,OAAO,GAAU,QAAQ;;AAE9C,IAAO,KAAY;GACrB,CAAC,EAEI"}
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;IAkEpG,+BAA+B,CAAC,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS;IAU9D,WAAW;IA8DjB,gBAAgB;IAIhB,YAAY;CAkDf"}
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"}
@@ -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 ?? []), 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;
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 } = this.settings, _ = o(this.data, e, t, { dataSource: n }, a, r, i, l, u, d, f, p, m, h, c.xAxis, c.yAxis, g), v = c.valueType === "discrete" ? this.data.getColumnCategories(n.value) : [];
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 y = await s(_, d, f);
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: y,
67
- cellUniqValues: v
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":"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"}
1
+ {"version":3,"file":"ChartRenderer.d.ts","sourceRoot":"","sources":["../../src/scatterplot/ChartRenderer.tsx"],"names":[],"mappings":"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"}