@milaboratories/graph-maker 1.1.167 → 1.1.169

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 (90) hide show
  1. package/dist/GraphMaker/constantsCommon.d.ts +5 -0
  2. package/dist/GraphMaker/constantsCommon.d.ts.map +1 -1
  3. package/dist/GraphMaker/constantsCommon.js +13 -8
  4. package/dist/GraphMaker/constantsCommon.js.map +1 -1
  5. package/dist/GraphMaker/forms/DataMappingForm/BubbleForm.vue.d.ts.map +1 -1
  6. package/dist/GraphMaker/forms/DataMappingForm/BubbleForm.vue.js +60 -56
  7. package/dist/GraphMaker/forms/DataMappingForm/BubbleForm.vue.js.map +1 -1
  8. package/dist/GraphMaker/forms/LayersForm/Layer/Bubble.vue.d.ts.map +1 -1
  9. package/dist/GraphMaker/forms/LayersForm/Layer/Bubble.vue.js +86 -58
  10. package/dist/GraphMaker/forms/LayersForm/Layer/Bubble.vue.js.map +1 -1
  11. package/dist/GraphMaker/forms/LayersForm/Layer/discrete/StackedArea.vue.d.ts.map +1 -1
  12. package/dist/GraphMaker/forms/LayersForm/Layer/discrete/StackedArea.vue.js +56 -38
  13. package/dist/GraphMaker/forms/LayersForm/Layer/discrete/StackedArea.vue.js.map +1 -1
  14. package/dist/GraphMaker/forms/LayersForm/Layer/discrete/StackedBar.vue.d.ts.map +1 -1
  15. package/dist/GraphMaker/forms/LayersForm/Layer/discrete/StackedBar.vue.js +48 -30
  16. package/dist/GraphMaker/forms/LayersForm/Layer/discrete/StackedBar.vue.js.map +1 -1
  17. package/dist/GraphMaker/forms/LayersForm/Layer/heatmap/Heatmap.vue.js +109 -112
  18. package/dist/GraphMaker/forms/LayersForm/Layer/heatmap/Heatmap.vue.js.map +1 -1
  19. package/dist/GraphMaker/utils/createChartSettingsForRender/composeBubbleSettings.d.ts +20 -0
  20. package/dist/GraphMaker/utils/createChartSettingsForRender/composeBubbleSettings.d.ts.map +1 -1
  21. package/dist/GraphMaker/utils/createChartSettingsForRender/composeBubbleSettings.js +19 -15
  22. package/dist/GraphMaker/utils/createChartSettingsForRender/composeBubbleSettings.js.map +1 -1
  23. package/dist/GraphMaker/utils/createChartSettingsForRender/composeDiscreteSettings.d.ts +3 -1
  24. package/dist/GraphMaker/utils/createChartSettingsForRender/composeDiscreteSettings.d.ts.map +1 -1
  25. package/dist/GraphMaker/utils/createChartSettingsForRender/composeHeatmapSettings.d.ts +8 -8
  26. package/dist/GraphMaker/utils/createChartSettingsForRender/composeHeatmapSettings.d.ts.map +1 -1
  27. package/dist/GraphMaker/utils/createChartSettingsForRender/composeHeatmapSettings.js +23 -23
  28. package/dist/GraphMaker/utils/createChartSettingsForRender/composeHeatmapSettings.js.map +1 -1
  29. package/dist/GraphMaker/utils/createChartSettingsForRender/getLayersDataFromForms.d.ts.map +1 -1
  30. package/dist/GraphMaker/utils/createChartSettingsForRender/getLayersDataFromForms.js +7 -5
  31. package/dist/GraphMaker/utils/createChartSettingsForRender/getLayersDataFromForms.js.map +1 -1
  32. package/dist/node_modules/@milaboratories/miplots4/dist/bubble/BubbleSettingsImpl.js +19 -14
  33. package/dist/node_modules/@milaboratories/miplots4/dist/bubble/BubbleSettingsImpl.js.map +1 -1
  34. package/dist/node_modules/@milaboratories/miplots4/dist/bubble/ChartRenderer.js +132 -132
  35. package/dist/node_modules/@milaboratories/miplots4/dist/bubble/ChartRenderer.js.map +1 -1
  36. package/dist/node_modules/@milaboratories/miplots4/dist/bubble/components/Chart.js +53 -53
  37. package/dist/node_modules/@milaboratories/miplots4/dist/bubble/components/Chart.js.map +1 -1
  38. package/dist/node_modules/@milaboratories/miplots4/dist/bubble/components/ChartsGroup.js.map +1 -1
  39. package/dist/node_modules/@milaboratories/miplots4/dist/bubble/getCellTooltip.js +7 -7
  40. package/dist/node_modules/@milaboratories/miplots4/dist/bubble/getCellTooltip.js.map +1 -1
  41. package/dist/node_modules/@milaboratories/miplots4/dist/bubble/getGroupedCellsData.js +49 -83
  42. package/dist/node_modules/@milaboratories/miplots4/dist/bubble/getGroupedCellsData.js.map +1 -1
  43. package/dist/node_modules/@milaboratories/miplots4/dist/bubble/index.js +51 -34
  44. package/dist/node_modules/@milaboratories/miplots4/dist/bubble/index.js.map +1 -1
  45. package/dist/node_modules/@milaboratories/miplots4/dist/bubble/utils/calculateCaptionTails.js.map +1 -1
  46. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/DiscreteSettingsImpl.js +8 -8
  47. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/DiscreteSettingsImpl.js.map +1 -1
  48. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/index.js +8 -8
  49. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/layers/stackedBar.js +54 -29
  50. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/layers/stackedBar.js.map +1 -1
  51. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/ChartRenderer.js +2 -2
  52. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/ChartRenderer.js.map +1 -1
  53. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/Annotations/Annotation.js.map +1 -1
  54. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/Annotations/AnnotationCellsCanvas.js.map +1 -1
  55. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/Annotations/AnnotationCellsSvg.js.map +1 -1
  56. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/Annotations/index.js.map +1 -1
  57. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/CanvasCells.js +31 -31
  58. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/CanvasCells.js.map +1 -1
  59. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/Chart.js +20 -20
  60. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/Chart.js.map +1 -1
  61. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/ChartsGroup.js +12 -12
  62. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/ChartsGroup.js.map +1 -1
  63. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/SvgCells.js +14 -14
  64. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/SvgCells.js.map +1 -1
  65. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/tooltipUtils.js +14 -14
  66. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/tooltipUtils.js.map +1 -1
  67. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/fillCellsData.js +244 -0
  68. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/fillCellsData.js.map +1 -0
  69. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/getCells.js +28 -214
  70. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/getCells.js.map +1 -1
  71. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/getDendrograms.js +26 -26
  72. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/getDendrograms.js.map +1 -1
  73. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/index.js +8 -8
  74. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/index.js.map +1 -1
  75. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/utils/calculateCaptionTails.js.map +1 -1
  76. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-array/src/min.js +12 -6
  77. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-array/src/min.js.map +1 -1
  78. package/dist/node_modules/@milaboratories/miplots4/dist/types/bubble.js +23 -12
  79. package/dist/node_modules/@milaboratories/miplots4/dist/types/bubble.js.map +1 -1
  80. package/dist/node_modules/@milaboratories/miplots4/dist/types/discrete.js +2 -0
  81. package/dist/node_modules/@milaboratories/miplots4/dist/types/discrete.js.map +1 -1
  82. package/dist/node_modules/@milaboratories/miplots4/dist/utils/getFacetOrGroupKey.js +7 -0
  83. package/dist/node_modules/@milaboratories/miplots4/dist/utils/getFacetOrGroupKey.js.map +1 -0
  84. package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/controllersByChartType/bubble.js +165 -95
  85. package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/controllersByChartType/bubble.js.map +1 -1
  86. package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/controllersByChartType/scatterplot-umap.js +64 -64
  87. package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/controllersByChartType/scatterplot-umap.js.map +1 -1
  88. package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/controllersByChartType/scatterplot.js +30 -30
  89. package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/controllersByChartType/scatterplot.js.map +1 -1
  90. package/package.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"tooltipUtils.js","sources":["../../../../../../../node_modules/@milaboratories/miplots4/src/heatmap/components/tooltipUtils.ts"],"sourcesContent":["import { format as d3format } from 'd3-format';\nimport type { DataFrame } from '../../DataFrame';\nimport type { ColumnName, DataValue } from '../../types';\nimport type { Cell, GroupedCellsData } from '../getCells';\nimport type { AnnotationTooltipData } from './types';\n\nexport function formatCellValue(v: DataValue, format?: string): number | string {\n if (v === null) {\n return 'null';\n }\n if (typeof v === 'number') {\n if (format) {\n return d3format(format)(v);\n }\n const whole = v > 0 ? Math.floor(v) : Math.ceil(v);\n const decimal = v - whole;\n return whole + Number(decimal.toPrecision(2));\n }\n return v;\n}\nexport function getTooltipContent(\n dataFrame: DataFrame,\n cell: Cell,\n cellsMeta: GroupedCellsData['meta'],\n columnsList: ColumnName[] = []\n) {\n const value = `${formatCellValue(cell.value)}${cell.value !== cell.normalizedValue ? ` (${formatCellValue(cell.normalizedValue)})` : ''}`;\n if (columnsList.length) {\n const lines = [\n `Value: ${value}`,\n ];\n for (const column of columnsList) {\n const value = dataFrame.getColumnValue(column.value, cell.idx);\n lines.push(`${column.label}: ${formatCellValue(value, column.format)}`);\n }\n return lines;\n }\n\n return [value];\n}\nexport function getAnnotationTooltipContent(data: AnnotationTooltipData, cellsMeta: GroupedCellsData['meta']) {\n const lines: string[] = [];\n if (data.xKey) {\n lines.push(`X: ${cellsMeta.xLabels[data.xKey as string]}`);\n }\n if (data.yKey) {\n lines.push(`Y: ${cellsMeta.yLabels[data.yKey as string]}`);\n }\n lines.push(`${data.title}: ${formatCellValue(data.value, data.column.format)}`);\n return lines;\n}\n\nexport function isAnnotationTooltip(d: Cell | AnnotationTooltipData | null): d is AnnotationTooltipData {\n return d !== null && 'isAnnotation' in d;\n}\n\nexport function isCellTooltip(d: Cell | AnnotationTooltipData | null): d is Cell {\n return d !== null && 'isCell' in d;\n}\n"],"names":["formatCellValue","v","format","d3format","whole","decimal","getTooltipContent","dataFrame","cell","cellsMeta","columnsList","value","lines","column","getAnnotationTooltipContent","data","isAnnotationTooltip","d","isCellTooltip"],"mappings":";AAMO,SAASA,EAAgBC,GAAcC,GAAkC;AAC5E,MAAID,MAAM;AACN,WAAO;AAEX,MAAI,OAAOA,KAAM,UAAU;AACvB,QAAIC;AACA,aAAOC,EAASD,CAAM,EAAED,CAAC;AAE7B,UAAMG,IAAQH,IAAI,IAAI,KAAK,MAAMA,CAAC,IAAI,KAAK,KAAKA,CAAC,GAC3CI,IAAUJ,IAAIG;AACpB,WAAOA,IAAQ,OAAOC,EAAQ,YAAY,CAAC,CAAC;AAAA,EAChD;AACA,SAAOJ;AACX;AACO,SAASK,EACZC,GACAC,GACAC,GACAC,IAA4B,CAAA,GAC9B;AACE,QAAMC,IAAQ,GAAGX,EAAgBQ,EAAK,KAAK,CAAC,GAAGA,EAAK,UAAUA,EAAK,kBAAkB,KAAKR,EAAgBQ,EAAK,eAAe,CAAC,MAAM,EAAE;AACvI,MAAIE,EAAY,QAAQ;AACpB,UAAME,IAAQ;AAAA,MACV,UAAUD,CAAK;AAAA,IAAA;AAEnB,eAAWE,KAAUH,GAAa;AAC9B,YAAMC,IAAQJ,EAAU,eAAeM,EAAO,OAAOL,EAAK,GAAG;AAC7DI,MAAAA,EAAM,KAAK,GAAGC,EAAO,KAAK,KAAKb,EAAgBW,GAAOE,EAAO,MAAM,CAAC,EAAE;AAAA,IAC1E;AACA,WAAOD;AAAAA,EACX;AAEA,SAAO,CAACD,CAAK;AACjB;AACO,SAASG,EAA4BC,GAA6BN,GAAqC;AAC1G,QAAMG,IAAkB,CAAA;AACxB,SAAIG,EAAK,QACLH,EAAM,KAAK,MAAMH,EAAU,QAAQM,EAAK,IAAc,CAAC,EAAE,GAEzDA,EAAK,QACLH,EAAM,KAAK,MAAMH,EAAU,QAAQM,EAAK,IAAc,CAAC,EAAE,GAE7DH,EAAM,KAAK,GAAGG,EAAK,KAAK,KAAKf,EAAgBe,EAAK,OAAOA,EAAK,OAAO,MAAM,CAAC,EAAE,GACvEH;AACX;AAEO,SAASI,EAAoBC,GAAoE;AACpG,SAAOA,MAAM,QAAQ,kBAAkBA;AAC3C;AAEO,SAASC,EAAcD,GAAmD;AAC7E,SAAOA,MAAM,QAAQ,YAAYA;AACrC;","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"tooltipUtils.js","sources":["../../../../../../../node_modules/@milaboratories/miplots4/src/heatmap/components/tooltipUtils.ts"],"sourcesContent":["import { format as d3format } from 'd3-format';\nimport type { DataFrame } from '../../DataFrame';\nimport type { ColumnName, DataValue } from '../../types';\nimport type { CellHeatmap, GroupedCellsHeatmap } from '../getCells';\nimport type { AnnotationTooltipData } from './types';\n\nexport function formatCellValue(v: DataValue, format?: string): number | string {\n if (v === null) {\n return 'null';\n }\n if (typeof v === 'number') {\n if (format) {\n return d3format(format)(v);\n }\n const whole = v > 0 ? Math.floor(v) : Math.ceil(v);\n const decimal = v - whole;\n return whole + Number(decimal.toPrecision(2));\n }\n return v;\n}\nexport function getTooltipContent(\n dataFrame: DataFrame,\n cell: CellHeatmap,\n cellsMeta: GroupedCellsHeatmap['meta'],\n columnsList: ColumnName[] = []\n) {\n const value = `${formatCellValue(cell.value.dataSource)}${cell.value !== cell.normalizedValue ? ` (${formatCellValue(cell.normalizedValue.dataSource)})` : ''}`;\n if (columnsList.length) {\n const lines = [\n `Value: ${value}`,\n ];\n for (const column of columnsList) {\n const value = dataFrame.getColumnValue(column.value, cell.idx);\n lines.push(`${column.label}: ${formatCellValue(value, column.format)}`);\n }\n return lines;\n }\n\n return [value];\n}\nexport function getAnnotationTooltipContent(data: AnnotationTooltipData, cellsMeta: GroupedCellsHeatmap['meta']) {\n const lines: string[] = [];\n if (data.xKey) {\n lines.push(`X: ${cellsMeta.xLabels[data.xKey as string]}`);\n }\n if (data.yKey) {\n lines.push(`Y: ${cellsMeta.yLabels[data.yKey as string]}`);\n }\n lines.push(`${data.title}: ${formatCellValue(data.value, data.column.format)}`);\n return lines;\n}\n\nexport function isAnnotationTooltip(d: CellHeatmap | AnnotationTooltipData | null): d is AnnotationTooltipData {\n return d !== null && 'isAnnotation' in d;\n}\n\nexport function isCellTooltip(d: CellHeatmap | AnnotationTooltipData | null): d is CellHeatmap {\n return d !== null && 'isCell' in d;\n}\n"],"names":["formatCellValue","v","format","d3format","whole","decimal","getTooltipContent","dataFrame","cell","cellsMeta","columnsList","value","lines","column","getAnnotationTooltipContent","data","isAnnotationTooltip","d","isCellTooltip"],"mappings":";AAMO,SAASA,EAAgBC,GAAcC,GAAkC;AAC5E,MAAID,MAAM;AACN,WAAO;AAEX,MAAI,OAAOA,KAAM,UAAU;AACvB,QAAIC;AACA,aAAOC,EAASD,CAAM,EAAED,CAAC;AAE7B,UAAMG,IAAQH,IAAI,IAAI,KAAK,MAAMA,CAAC,IAAI,KAAK,KAAKA,CAAC,GAC3CI,IAAUJ,IAAIG;AACpB,WAAOA,IAAQ,OAAOC,EAAQ,YAAY,CAAC,CAAC;AAAA,EAChD;AACA,SAAOJ;AACX;AACO,SAASK,EACZC,GACAC,GACAC,GACAC,IAA4B,CAAA,GAC9B;AACE,QAAMC,IAAQ,GAAGX,EAAgBQ,EAAK,MAAM,UAAU,CAAC,GAAGA,EAAK,UAAUA,EAAK,kBAAkB,KAAKR,EAAgBQ,EAAK,gBAAgB,UAAU,CAAC,MAAM,EAAE;AAC7J,MAAIE,EAAY,QAAQ;AACpB,UAAME,IAAQ;AAAA,MACV,UAAUD,CAAK;AAAA,IAAA;AAEnB,eAAWE,KAAUH,GAAa;AAC9B,YAAMC,IAAQJ,EAAU,eAAeM,EAAO,OAAOL,EAAK,GAAG;AAC7DI,MAAAA,EAAM,KAAK,GAAGC,EAAO,KAAK,KAAKb,EAAgBW,GAAOE,EAAO,MAAM,CAAC,EAAE;AAAA,IAC1E;AACA,WAAOD;AAAAA,EACX;AAEA,SAAO,CAACD,CAAK;AACjB;AACO,SAASG,EAA4BC,GAA6BN,GAAwC;AAC7G,QAAMG,IAAkB,CAAA;AACxB,SAAIG,EAAK,QACLH,EAAM,KAAK,MAAMH,EAAU,QAAQM,EAAK,IAAc,CAAC,EAAE,GAEzDA,EAAK,QACLH,EAAM,KAAK,MAAMH,EAAU,QAAQM,EAAK,IAAc,CAAC,EAAE,GAE7DH,EAAM,KAAK,GAAGG,EAAK,KAAK,KAAKf,EAAgBe,EAAK,OAAOA,EAAK,OAAO,MAAM,CAAC,EAAE,GACvEH;AACX;AAEO,SAASI,EAAoBC,GAA2E;AAC3G,SAAOA,MAAM,QAAQ,kBAAkBA;AAC3C;AAEO,SAASC,EAAcD,GAAiE;AAC3F,SAAOA,MAAM,QAAQ,YAAYA;AACrC;","x_google_ignoreList":[0]}
@@ -0,0 +1,244 @@
1
+ import g from "../node_modules/lodash/lodash.js";
2
+ import { exhaustive as ae } from "../utils/index.js";
3
+ import { getFacetOrGroupKey as k } from "../utils/getFacetOrGroupKey.js";
4
+ import H from "../node_modules/d3-array/src/mean.js";
5
+ import { quantileSorted as te } from "../node_modules/d3-array/src/quantile.js";
6
+ import ue from "../node_modules/d3-array/src/deviation.js";
7
+ import le from "../node_modules/d3-array/src/extent.js";
8
+ function oe(e) {
9
+ const t = ue(e), u = H(e);
10
+ return t === void 0 || u === void 0 || t === 0 ? (l) => l : (l) => (l - u) / t;
11
+ }
12
+ function se(e) {
13
+ const t = H(e), [u, l] = le(e);
14
+ return t === void 0 || u === void 0 || l === void 0 || l === u ? (r) => r : (r) => (r - t) / (l - u);
15
+ }
16
+ function ne(e, t) {
17
+ return e === "standardScaling" ? oe(t) : e === "meanNormalization" ? se(t) : (u) => u;
18
+ }
19
+ function X(e, t) {
20
+ switch (e) {
21
+ case "max": {
22
+ let u = t[0];
23
+ for (const l of t)
24
+ u = Math.max(u, l);
25
+ return u;
26
+ }
27
+ case "min": {
28
+ let u = t[0];
29
+ for (const l of t)
30
+ u = Math.min(u, l);
31
+ return u;
32
+ }
33
+ case "median": {
34
+ const u = t.sort((l, r) => l - r);
35
+ return te(u, 0.5);
36
+ }
37
+ case "mean":
38
+ return H(t) ?? t[0];
39
+ default:
40
+ ae(e, `Unknown aggregation function ${e}`);
41
+ }
42
+ }
43
+ function R(e) {
44
+ const t = [...new Set(e)].sort();
45
+ return t.length > 3 ? [...t.slice(0, 3), "..."].join(", ") : t.join(", ");
46
+ }
47
+ function Y(e) {
48
+ if (!e.length)
49
+ return [];
50
+ let t = [[]];
51
+ return e.forEach((u) => {
52
+ const l = [];
53
+ u.forEach((r) => {
54
+ l.push(...t.map((d) => [...d, r]));
55
+ }), t = l;
56
+ }), t;
57
+ }
58
+ const T = (e, t, u = {}) => e.sort(
59
+ (l, r) => t === "asc" ? (u[l] ?? l).localeCompare(u[r] ?? r, "en", { numeric: !0 }) : (u[r] ?? r).localeCompare(u[l] ?? l, "en", { numeric: !0 })
60
+ );
61
+ function re(e, t, u, l, r) {
62
+ if (t.x || t.y) {
63
+ const d = e.meta.valueSources.reduce((m, i) => (m[i] = [1 / 0, -1 / 0], m), {});
64
+ e.meta.facetKeys.forEach((m) => {
65
+ var i, B;
66
+ const { xKeys: O, yKeys: q, cells: w, xKeysByGroups: b, yKeysByGroups: f } = e.facets[m], E = t.x ? b : O.reduce((c, n) => (c[n] = [n], c), {}), $ = t.y ? f : q.reduce((c, n) => (c[n] = [n], c), {}), S = Object.keys(E), D = Object.keys($);
67
+ for (const c of S)
68
+ for (const n of D) {
69
+ const C = e.meta.valueSources.reduce((y, h) => (y[h] = [], y), {});
70
+ E[c].forEach((y) => {
71
+ $[n].forEach((h) => {
72
+ var v, V, G, j;
73
+ for (const _ of e.meta.valueSources) {
74
+ const F = (G = (V = (v = w[y]) == null ? void 0 : v[h]) == null ? void 0 : V.value) == null ? void 0 : G[_];
75
+ F !== void 0 && C[_].push(F);
76
+ }
77
+ (j = w[y]) == null || delete j[h];
78
+ });
79
+ });
80
+ for (const y of e.meta.valueSources) {
81
+ const h = C[y];
82
+ if (h.length > 0) {
83
+ const v = X(t.method, h);
84
+ e.facets[m].cells[c] || (e.facets[m].cells[c] = {}), e.facets[m].cells[c][n] || (e.facets[m].cells[c][n] = {
85
+ isCell: !0,
86
+ idx: 0,
87
+ id: `${c}_${n}`,
88
+ x: c,
89
+ y: n,
90
+ value: e.meta.valueSources.reduce((G, j) => (G[j] = null, G), {}),
91
+ normalizedValue: e.meta.valueSources.reduce((G, j) => (G[j] = null, G), {})
92
+ });
93
+ const V = e.facets[m].cells[c][n];
94
+ V.value[y] = v, V.normalizedValue[y] = v, d[y][0] = Math.min((i = V.normalizedValue) == null ? void 0 : i[y], d[y][0]), d[y][1] = Math.max((B = V.normalizedValue) == null ? void 0 : B[y], d[y][1]);
95
+ }
96
+ }
97
+ }
98
+ t.x && S.forEach((c) => {
99
+ u.forEach((n) => {
100
+ const C = r.find((v) => v.valueColumn.value === n || v.valueColumn.valueLabels === n);
101
+ if (!C)
102
+ return;
103
+ const y = [];
104
+ E[c].forEach((v) => {
105
+ y.push(e.meta.xDataByKeys[n][v]), delete e.meta.xDataByKeys[n][v];
106
+ });
107
+ const h = C.type === "continuous" ? X(t.method, y) : R(y);
108
+ e.meta.xDataByKeys[n][c] = h;
109
+ });
110
+ }), t.y && (l.forEach((c) => {
111
+ e.meta.yDataByKeys[c] = {};
112
+ }), D.forEach((c) => {
113
+ l.forEach((n) => {
114
+ const C = r.find((v) => v.valueColumn.value === n || v.valueColumn.valueLabels === n);
115
+ if (!C)
116
+ return;
117
+ const y = [];
118
+ $[c].forEach((v) => {
119
+ y.push(e.meta.yDataByKeys[n][v]), delete e.meta.yDataByKeys[n][v];
120
+ });
121
+ const h = C.type === "continuous" ? X(t.method, y) : R(y);
122
+ e.meta.yDataByKeys[n][c] = h;
123
+ });
124
+ })), t.x && (e.facets[m].xKeys = Object.keys(b), e.facets[m].xKeysByGroups = { null: e.facets[m].xKeys }, e.meta.xLabels = e.meta.xGroupLabels, e.meta.xGroupKeys = ["null"], e.meta.xGroupKeyValues = { null: ["null"] }), t.y && (e.facets[m].yKeys = Object.keys(f), e.facets[m].yKeysByGroups = { null: e.facets[m].yKeys }, e.meta.yLabels = e.meta.yGroupLabels, e.meta.yGroupKeys = ["null"], e.meta.yGroupKeyValues = { null: ["null"] });
125
+ }), e.meta.valueExtent = d;
126
+ }
127
+ }
128
+ function ce(e, t) {
129
+ var u, l;
130
+ for (const r of e.meta.valueSources)
131
+ e.meta.valueExtent[r][0] = Math.min((u = t.normalizedValue) == null ? void 0 : u[r], e.meta.valueExtent[r][0]), e.meta.valueExtent[r][1] = Math.max((l = t.normalizedValue) == null ? void 0 : l[r], e.meta.valueExtent[r][1]);
132
+ }
133
+ function ye(e, t) {
134
+ if (Object.values(t).length) {
135
+ const u = e.meta.valueSources.reduce((l, r) => (t[r] && (l[r] = [1 / 0, -1 / 0]), l), {});
136
+ e.meta.facetKeys.forEach((l) => {
137
+ const { xKeys: r, yKeys: d, cells: m } = e.facets[l];
138
+ for (const i of e.meta.valueSources) {
139
+ const B = t[i];
140
+ if (!B)
141
+ continue;
142
+ const O = B.direction === "row" ? r : d, q = B.direction === "row" ? d : r, w = B.direction === "row" ? (b, f) => {
143
+ var E;
144
+ return (E = m[b]) == null ? void 0 : E[f];
145
+ } : (b, f) => {
146
+ var E;
147
+ return (E = m[f]) == null ? void 0 : E[b];
148
+ };
149
+ q.forEach((b) => {
150
+ const f = [];
151
+ O.forEach(($) => {
152
+ var S, D;
153
+ const c = (D = (S = w($, b)) == null ? void 0 : S.value) == null ? void 0 : D[i];
154
+ c !== void 0 && f.push(c);
155
+ });
156
+ const E = ne(B.method, f);
157
+ O.forEach(($) => {
158
+ var S, D, c;
159
+ const n = w($, b);
160
+ n !== void 0 && (n.normalizedValue[i] = E((S = n.value) == null ? void 0 : S[i]), u[i][0] = Math.min((D = n.normalizedValue) == null ? void 0 : D[i], u[i][0]), u[i][1] = Math.max((c = n.normalizedValue) == null ? void 0 : c[i], u[i][1]));
161
+ });
162
+ });
163
+ }
164
+ }), e.meta.valueExtent = { ...e.meta.valueExtent, valueExtent: u };
165
+ }
166
+ }
167
+ function de(e, t, u, l, r, d, m, i, B, O, q, w, b, f, E, $, S) {
168
+ const D = d.length ? d.map((a) => f[a.value] ?? t.getColumnCategories(a.value)) : [["null"]], c = m.length ? m.map((a) => f[a.value] ?? t.getColumnCategories(a.value)) : [["null"]], n = i.length ? i.map((a) => f[a.value] ?? t.getColumnCategories(a.value)) : [["null"]], C = Y(D), y = Y(c), h = Y(n), v = C.map(k), V = y.map(k), G = h.map(k);
169
+ e.meta.facetKeys = v, e.meta.xGroupKeys = V, e.meta.yGroupKeys = G, e.meta.facetKeyValues = v.reduce((a, o, p) => (a[o] = C[p], a), {}), e.meta.xGroupKeyValues = V.reduce((a, o, p) => (a[o] = y[p], a), {}), e.meta.yGroupKeyValues = G.reduce((a, o, p) => (a[o] = h[p], a), {});
170
+ const j = u.valueLabels ?? u.value, _ = l.valueLabels ?? l.value, F = B.filter((a) => a.axis === "x").map((a) => a.valueColumn.valueLabels ?? a.valueColumn.value), U = B.filter((a) => a.axis === "y").map((a) => a.valueColumn.valueLabels ?? a.valueColumn.value), W = Object.values(O ?? {}).map((a) => a.value), Z = Object.values(q ?? {}).map((a) => a.value), J = g.uniq([...F, ...W, j]), N = g.uniq([...U, ...Z, _]);
171
+ for (let a = 0; a < t.rowsCount; a++) {
172
+ const o = k(d.map((s) => t.getColumnValue(s.value, a))), p = k(m.map((s) => t.getColumnValue(s.value, a))), L = k(i.map((s) => t.getColumnValue(s.value, a))), z = m.map((s) => t.getColumnValue(s.valueLabels ?? s.value, a)).join(", "), ee = i.map((s) => t.getColumnValue(s.valueLabels ?? s.value, a)).join(", ");
173
+ e.meta.xGroupLabels[p] = z, e.meta.yGroupLabels[L] = ee;
174
+ const K = String(t.getColumnValue(u.value, a)), x = String(t.getColumnValue(l.value, a)), I = e.meta.valueSources.reduce((s, M) => (s[M] = t.getColumnValue(r[M].value, a) ?? b, s), {});
175
+ if (K === "null" || x === "null" || Object.values(I).every((s) => s === null))
176
+ continue;
177
+ e.facets[o] || (e.facets[o] = {
178
+ xKeys: [],
179
+ yKeys: [],
180
+ xKeysByGroups: {},
181
+ yKeysByGroups: {},
182
+ cells: {}
183
+ }), e.facets[o].xKeysByGroups[p] || (e.facets[o].xKeysByGroups[p] = []), e.facets[o].yKeysByGroups[L] || (e.facets[o].yKeysByGroups[L] = []), e.facets[o].xKeys.push(K), e.facets[o].yKeys.push(x), e.facets[o].xKeysByGroups[p].push(K), e.facets[o].yKeysByGroups[L].push(x), e.facets[o].cells[K] || (e.facets[o].cells[K] = {});
184
+ for (const s of e.meta.valueSources)
185
+ if (e.facets[o].cells[K][x] && e.facets[o].cells[K][x].value[s] !== I[s])
186
+ throw Error(`More than 1 value for x=${K}, y=${x}`);
187
+ const P = t.getColumnValue(j, a);
188
+ if (e.meta.xLabels[K] && String(P) !== e.meta.xLabels[K])
189
+ throw Error(`More than 1 x-label value for x=${K}`);
190
+ const Q = t.getColumnValue(_, a);
191
+ if (e.meta.yLabels[x] && String(Q) !== e.meta.yLabels[x])
192
+ throw Error(`More than 1 y-label value for y=${x}`);
193
+ e.meta.xLabels[K] = String(P), e.meta.yLabels[x] = String(Q), J.forEach((s) => {
194
+ const M = typeof e.meta.xDataByKeys[s] < "u", A = M && typeof e.meta.xDataByKeys[s][K] < "u";
195
+ if (M || (e.meta.xDataByKeys[s] = {}), A && e.meta.xDataByKeys[s][K] !== t.getColumnValue(s, a))
196
+ throw Error(`More than 1 value for x = ${K} and column = ${s}`);
197
+ A || (e.meta.xDataByKeys[s][K] = t.getColumnValue(s, a));
198
+ }), N.forEach((s) => {
199
+ const M = typeof e.meta.yDataByKeys[s] < "u", A = M && typeof e.meta.yDataByKeys[s][x] < "u";
200
+ if (M || (e.meta.yDataByKeys[s] = {}), A && e.meta.yDataByKeys[s][x] !== t.getColumnValue(s, a))
201
+ throw Error(`More than 1 value for y = ${x} and column = ${s}`);
202
+ A || (e.meta.yDataByKeys[s][x] = t.getColumnValue(s, a));
203
+ }), e.facets[o].cells[K][x] = {
204
+ isCell: !0,
205
+ idx: a,
206
+ id: `${K}_${x}`,
207
+ x: K,
208
+ y: x,
209
+ value: I,
210
+ normalizedValue: I
211
+ }, ce(e, e.facets[o].cells[K][x]);
212
+ }
213
+ e.meta.facetKeys = e.meta.facetKeys.filter((a) => e.facets[a]), e.meta.facetKeys.forEach((a) => {
214
+ const o = e.facets[a], p = g.uniq(o.xKeys), L = g.uniq(o.yKeys);
215
+ o.xKeys = f[u.value] ? g.intersection(f[u.value], p) : p, o.yKeys = f[l.value] ? g.intersection(f[l.value], L) : L, V.forEach((z) => {
216
+ e.facets[a].xKeysByGroups[z] = g.intersection(
217
+ o.xKeys,
218
+ e.facets[a].xKeysByGroups[z]
219
+ );
220
+ }), G.forEach((z) => {
221
+ e.facets[a].yKeysByGroups[z] = g.intersection(
222
+ o.yKeys,
223
+ e.facets[a].yKeysByGroups[z]
224
+ );
225
+ });
226
+ }), re(e, S, J, N, B), ye(e, w), e.meta.xKeysByGroups = e.meta.xGroupKeys.reduce((a, o) => {
227
+ const p = T(g.uniq(
228
+ g.flatten(e.meta.facetKeys.map((L) => e.facets[L].xKeysByGroups[o]))
229
+ ), E.sorting, e.meta.xLabels);
230
+ return a[o] = f[u.value] ? g.intersection(f[u.value], p) : p, a;
231
+ }, {}), e.meta.xKeys = e.meta.xGroupKeys.reduce((a, o) => (a = a.concat(e.meta.xKeysByGroups[o]), a), []), e.meta.yKeysByGroups = e.meta.yGroupKeys.reduce((a, o) => {
232
+ const p = T(g.uniq(
233
+ g.flatten(e.meta.facetKeys.map((L) => e.facets[L].yKeysByGroups[o]))
234
+ ), $.sorting, e.meta.yLabels);
235
+ return a[o] = f[l.value] ? g.intersection(f[l.value], p) : p, a;
236
+ }, {}), e.meta.yKeys = e.meta.yGroupKeys.reduce((a, o) => (a = a.concat(e.meta.yKeysByGroups[o]), a), []);
237
+ for (const a of e.meta.valueSources)
238
+ e.meta.valueExtent[a][0] === 1 / 0 && (e.meta.valueExtent[a][0] = 0), e.meta.valueExtent[a][1] === -1 / 0 && (e.meta.valueExtent[a][1] = 0);
239
+ return e;
240
+ }
241
+ export {
242
+ de as fillCellsData
243
+ };
244
+ //# sourceMappingURL=fillCellsData.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fillCellsData.js","sources":["../../../../../../node_modules/@milaboratories/miplots4/src/heatmap/fillCellsData.ts"],"sourcesContent":["import { deviation, extent, mean, quantileSorted } from 'd3-array';\nimport lodash from 'lodash';\nimport type { DataFrame } from '../DataFrame';\nimport type { AggregationMethod, ColumnName, DataValue, NormalizationMethod } from '../types';\nimport type { HeatmapSettingsImpl } from './HeatmapSettingsImpl';\nimport { exhaustive } from '../utils';\nimport { getFacetOrGroupKey } from '../utils/getFacetOrGroupKey';\nimport type { BubbleSettingsImpl } from '../bubble/BubbleSettingsImpl';\n\nexport type Cell<T extends string> = {\n isCell: true;\n idx: number;\n id: string;\n value: Record<T, DataValue>;\n normalizedValue: Record<T, DataValue>;\n x: DataValue;\n y: DataValue;\n};\n\nexport type GroupedCellsData<T extends string> = {\n meta: {\n valueSources: T[]; // dataSource for heatmap, color and size for bubble - main data for every cell\n\n facetKeys: string[];\n xGroupKeys: string[];\n yGroupKeys: string[];\n\n xKeys: string[];\n yKeys: string[];\n xKeysByGroups: Record<string, string[]>;\n yKeysByGroups: Record<string, string[]>;\n\n // for titles, if facet by more 1 columns title has several values separated by commas\n facetKeyValues: Record<string, string[]>;\n xGroupKeyValues: Record<string, string[]>;\n yGroupKeyValues: Record<string, string[]>;\n\n xLabels: Record<string, string>;\n yLabels: Record<string, string>;\n xGroupLabels: Record<string, string>;\n yGroupLabels: Record<string, string>;\n\n valueExtent: Record<T, [number, number]>; // for color/size scales\n // data for labels, annotations and dendrograms\n xDataByKeys: Record<string, Record<string, DataValue>>;\n yDataByKeys: Record<string, Record<string, DataValue>>;\n };\n //facet groups\n facets: Record<\n string,\n {\n // axis keys\n xKeys: string[];\n yKeys: string[];\n // axis keys grouped by group keys from meta\n xKeysByGroups: Record<string, string[]>;\n yKeysByGroups: Record<string, string[]>;\n // cells grouped by X, then by Y\n cells: Record<string, Record<string, Cell<T>>>;\n }\n >;\n};\n\nfunction normalizeByStd(values: number[]) {\n const stdValue = deviation(values);\n const meanValue = mean(values);\n\n if (stdValue === undefined || meanValue === undefined || stdValue === 0) {\n return (v: number) => v;\n }\n return (v: number) => (v - meanValue) / stdValue;\n}\nfunction normalizeByMinMax(values: number[]) {\n const meanValue = mean(values);\n const [min, max] = extent(values);\n if (meanValue === undefined || min === undefined || max === undefined || max === min) {\n return (v: number) => v;\n }\n return (v: number) => (v - meanValue) / (max - min);\n}\n\nfunction getNormalizationFn(method: NormalizationMethod, values: number[]) {\n if (method === 'standardScaling') {\n return normalizeByStd(values);\n }\n if (method === 'meanNormalization') {\n return normalizeByMinMax(values);\n }\n return (v: number) => v;\n}\n\nfunction aggregateNumeric(method: AggregationMethod, values: number[]) {\n switch (method) {\n case 'max': {\n let res = values[0];\n for (const v of values) {\n res = Math.max(res, v);\n }\n return res;\n }\n case 'min': {\n let res = values[0];\n for (const v of values) {\n res = Math.min(res, v);\n }\n return res;\n }\n case 'median': {\n const valuesSorted = values.sort((a, b) => a - b);\n return quantileSorted(valuesSorted, 0.5) as number;\n }\n case 'mean': {\n return mean(values) ?? values[0];\n }\n default: exhaustive(method, `Unknown aggregation function ${method}`);\n }\n}\nfunction aggregateString(values: string[]) {\n const list = [...new Set(values)].sort();\n if (list.length > 3) {\n return [...list.slice(0, 3), '...'].join(', ');\n }\n return list.join(', ');\n}\n\n// all combinations with 1 key from each list\nfunction getKeysCombinations(keysLists: string[][]) {\n if (!keysLists.length) {\n return [];\n }\n let result: string[][] = [[]];\n keysLists.forEach(keys => {\n const nextResult: string[][] = [];\n keys.forEach(key => {\n nextResult.push(...result.map(resultItem => [...resultItem, key]));\n });\n result = nextResult;\n });\n return result;\n}\nconst sortByLabels = (arr: string[], direction: 'asc' | 'desc', labels: Record<string, string> = {}) => {\n return arr.sort((a, b) => direction === 'asc'\n ? (labels[a] ?? a).localeCompare((labels[b] ?? b), 'en', { numeric: true })\n : (labels[b] ?? b).localeCompare((labels[a] ?? a), 'en', { numeric: true })\n );\n};\nfunction applyAggregation<T extends string>(\n result: GroupedCellsData<T>,\n aggregation: HeatmapSettingsImpl['aggregation'],\n additionalDataColumnsX: string[],\n additionalDataColumnsY: string[],\n annotations: HeatmapSettingsImpl['annotations']\n) {\n if (aggregation.x || aggregation.y) {\n const valueExtent: GroupedCellsData<T>['meta']['valueExtent'] = result.meta.valueSources.reduce((r, key) => {\n r[key] = [Infinity, -Infinity] as [number, number];\n return r;\n }, {} as GroupedCellsData<T>['meta']['valueExtent']);\n result.meta.facetKeys.forEach(facetKey => {\n const { xKeys, yKeys, cells, xKeysByGroups, yKeysByGroups } = result.facets[facetKey];\n const xGroups = aggregation.x ? xKeysByGroups : xKeys.reduce((res, xKey) => { res[xKey] = [xKey]; return res; }, {} as Record<string, string[]>);\n const yGroups = aggregation.y ? yKeysByGroups : yKeys.reduce((res, yKey) => { res[yKey] = [yKey]; return res; }, {} as Record<string, string[]>);\n const xNewKeys = Object.keys(xGroups);\n const yNewKeys = Object.keys(yGroups);\n\n for (const xGroupKey of xNewKeys) {\n for (const yGroupKey of yNewKeys) {\n // collect values for aggregation to arrays\n const valuesBySources: Record<T, number[]> = result.meta.valueSources.reduce((r, v) => {\n r[v] = [];\n return r;\n }, {} as Record<T, number[]>);\n xGroups[xGroupKey].forEach((xKey) => {\n yGroups[yGroupKey].forEach((yKey) => {\n for (const valueSource of result.meta.valueSources) {\n const cellValue = cells[xKey]?.[yKey]?.value?.[valueSource];\n if (cellValue !== undefined) {\n valuesBySources[valueSource].push(cellValue as number);\n }\n }\n delete cells[xKey]?.[yKey];\n });\n });\n // create new cells with aggregated values\n for (const valueSource of result.meta.valueSources) {\n const values = valuesBySources[valueSource];\n if (values.length > 0) {\n const value = aggregateNumeric(aggregation.method, values);\n if (!result.facets[facetKey].cells[xGroupKey]) {\n result.facets[facetKey].cells[xGroupKey] = {};\n }\n if (!result.facets[facetKey].cells[xGroupKey][yGroupKey]) {\n result.facets[facetKey].cells[xGroupKey][yGroupKey] = {\n isCell: true,\n idx: 0,\n id: `${xGroupKey}_${yGroupKey}`,\n x: xGroupKey,\n y: yGroupKey,\n value: result.meta.valueSources.reduce((r, v) => { r[v] = null; return r; }, {} as Record<T, DataValue>),\n normalizedValue: result.meta.valueSources.reduce((r, v) => { r[v] = null; return r; }, {} as Record<T, DataValue>),\n };\n }\n const cell = result.facets[facetKey].cells[xGroupKey][yGroupKey];\n cell.value[valueSource] = value;\n cell.normalizedValue[valueSource] = value;\n\n valueExtent[valueSource][0] = Math.min(cell.normalizedValue?.[valueSource], valueExtent[valueSource][0]);\n valueExtent[valueSource][1] = Math.max(cell.normalizedValue?.[valueSource], valueExtent[valueSource][1]);\n }\n }\n }\n }\n // add aggregated values for X annotations\n if (aggregation.x) {\n xNewKeys.forEach(xGroupKey => {\n additionalDataColumnsX.forEach(columnKey => {\n const annotation = annotations.find((v) => v.valueColumn.value === columnKey || v.valueColumn.valueLabels === columnKey);\n if (!annotation) {\n return;\n }\n const values: DataValue[] = [];\n xGroups[xGroupKey].forEach((xKey) => {\n values.push(result.meta.xDataByKeys[columnKey][xKey]);\n delete result.meta.xDataByKeys[columnKey][xKey];\n });\n const value = annotation.type === 'continuous' ? aggregateNumeric(aggregation.method, values as number[]) : aggregateString(values as string[]);\n result.meta.xDataByKeys[columnKey][xGroupKey] = value;\n });\n });\n }\n // add aggregated values for Y annotations\n if (aggregation.y) {\n additionalDataColumnsY.forEach(columnKey => {\n result.meta.yDataByKeys[columnKey] = {};\n });\n yNewKeys.forEach(yGroupKey => {\n additionalDataColumnsY.forEach(columnKey => {\n const annotation = annotations.find((v) => v.valueColumn.value === columnKey || v.valueColumn.valueLabels === columnKey);\n if (!annotation) {\n return;\n }\n const values: DataValue[] = [];\n yGroups[yGroupKey].forEach((yKey) => {\n values.push(result.meta.yDataByKeys[columnKey][yKey]);\n delete result.meta.yDataByKeys[columnKey][yKey];\n });\n const value = annotation.type === 'continuous' ? aggregateNumeric(aggregation.method, values as number[]) : aggregateString(values as string[]);\n result.meta.yDataByKeys[columnKey][yGroupKey] = value;\n });\n });\n }\n // erase grouping - we aggregated by them and now there is no grouping in the chart;\n // replace axis keys with group keys - now group keys are new axis keys\n if (aggregation.x) {\n result.facets[facetKey].xKeys = Object.keys(xKeysByGroups);\n result.facets[facetKey].xKeysByGroups = { 'null': result.facets[facetKey].xKeys };\n result.meta.xLabels = result.meta.xGroupLabels;\n result.meta.xGroupKeys = ['null'];\n result.meta.xGroupKeyValues = { null: ['null'] };\n }\n if (aggregation.y) {\n result.facets[facetKey].yKeys = Object.keys(yKeysByGroups);\n result.facets[facetKey].yKeysByGroups = { 'null': result.facets[facetKey].yKeys };\n result.meta.yLabels = result.meta.yGroupLabels;\n result.meta.yGroupKeys = ['null'];\n result.meta.yGroupKeyValues = { null: ['null'] };\n }\n });\n result.meta.valueExtent = valueExtent;\n }\n}\n\nfunction updateValueExtent<T extends string>(result: GroupedCellsData<T>, cell: Cell<T>) {\n for (const valueSource of result.meta.valueSources) {\n result.meta.valueExtent[valueSource][0] = Math.min(cell.normalizedValue?.[valueSource] as number, result.meta.valueExtent[valueSource][0]);\n result.meta.valueExtent[valueSource][1] = Math.max(cell.normalizedValue?.[valueSource] as number, result.meta.valueExtent[valueSource][1]);\n }\n\n}\nfunction applyNormalization<T extends string>(\n result: GroupedCellsData<T>,\n normalizationBySources: Record<T, HeatmapSettingsImpl['normalization']>,\n) {\n if (Object.values(normalizationBySources).length) {\n const valueExtent: GroupedCellsData<T>['meta']['valueExtent'] = result.meta.valueSources.reduce((r, key) => {\n if (normalizationBySources[key]) {\n r[key] = [Infinity, -Infinity] as [number, number];\n }\n return r;\n }, {} as GroupedCellsData<T>['meta']['valueExtent']);\n result.meta.facetKeys.forEach(facetKey => {\n const { xKeys, yKeys, cells } = result.facets[facetKey];\n\n for (const valueSource of result.meta.valueSources) {\n const normalization = normalizationBySources[valueSource];\n if (!normalization) {\n continue;\n }\n const cellKeys = normalization.direction === 'row' ? xKeys : yKeys;\n const groupKeys = normalization.direction === 'row' ? yKeys : xKeys;\n const cellGetter = normalization.direction === 'row'\n ? (cellKey: string, groupKey: string) => cells[cellKey]?.[groupKey]\n : (cellKey: string, groupKey: string) => cells[groupKey]?.[cellKey];\n groupKeys.forEach((groupKey) => {\n const values: number[] = [];\n cellKeys.forEach((cellKey) => {\n const v = cellGetter(cellKey, groupKey)?.value?.[valueSource];\n if (v !== undefined) {\n values.push(v as number);\n }\n });\n const normalize = getNormalizationFn(normalization.method, values);\n cellKeys.forEach((cellKey) => {\n const cell = cellGetter(cellKey, groupKey);\n if (cell !== undefined) {\n cell.normalizedValue[valueSource] = normalize(cell.value?.[valueSource] as number);\n valueExtent[valueSource][0] = Math.min(cell.normalizedValue?.[valueSource], valueExtent[valueSource][0]);\n valueExtent[valueSource][1] = Math.max(cell.normalizedValue?.[valueSource], valueExtent[valueSource][1]);\n }\n });\n });\n }\n\n });\n result.meta.valueExtent = {...result.meta.valueExtent, valueExtent};\n }\n}\n\nexport function fillCellsData<T extends string>(\n result: GroupedCellsData<T>,\n data: DataFrame,\n xColumn: ColumnName,\n yColumn: ColumnName,\n valueColumns: Record<string, ColumnName>,\n facetBy: ColumnName[],\n xGroupBy: ColumnName[],\n yGroupBy: ColumnName[],\n annotations: HeatmapSettingsImpl['annotations'],\n dendrogramX: HeatmapSettingsImpl['dendrogramX'],\n dendrogramY: HeatmapSettingsImpl['dendrogramY'],\n normalizationBySource: Record<T, HeatmapSettingsImpl['normalization']>, // separated for color and size for example\n NAValueAs: HeatmapSettingsImpl['NAValueAs'],\n keysOrder: HeatmapSettingsImpl['keysOrder'],\n xAxis: HeatmapSettingsImpl['chartSettings']['xAxis'] | BubbleSettingsImpl['chartSettings']['xAxis'],\n yAxis: HeatmapSettingsImpl['chartSettings']['yAxis'] | BubbleSettingsImpl['chartSettings']['yAxis'],\n aggregation: HeatmapSettingsImpl['aggregation'],\n) {\n const facetKeysLists = facetBy.length\n ? facetBy.map(column => keysOrder[column.value] ?? data.getColumnCategories(column.value))\n : [['null']];\n const xGroupKeysLists = xGroupBy.length\n ? xGroupBy.map(column => keysOrder[column.value] ?? data.getColumnCategories(column.value))\n : [['null']];\n const yGroupKeysLists = yGroupBy.length\n ? yGroupBy.map(column => keysOrder[column.value] ?? data.getColumnCategories(column.value))\n : [['null']];\n const facetKeysCombinations = getKeysCombinations(facetKeysLists);\n const xGroupKeysCombinations = getKeysCombinations(xGroupKeysLists);\n const yGroupKeysCombinations = getKeysCombinations(yGroupKeysLists);\n\n const facetKeys = facetKeysCombinations.map(getFacetOrGroupKey);\n const xGroupKeys = xGroupKeysCombinations.map(getFacetOrGroupKey);\n const yGroupKeys = yGroupKeysCombinations.map(getFacetOrGroupKey);\n\n result.meta.facetKeys = facetKeys;\n result.meta.xGroupKeys = xGroupKeys;\n result.meta.yGroupKeys = yGroupKeys;\n result.meta.facetKeyValues = facetKeys.reduce((res: Record<string, string[]>, key, index) => {\n res[key] = facetKeysCombinations[index];\n return res;\n }, {});\n result.meta.xGroupKeyValues = xGroupKeys.reduce((res: Record<string, string[]>, key, index) => {\n res[key] = xGroupKeysCombinations[index];\n return res;\n }, {});\n result.meta.yGroupKeyValues = yGroupKeys.reduce((res: Record<string, string[]>, key, index) => {\n res[key] = yGroupKeysCombinations[index];\n return res;\n }, {});\n\n const xLabelsSource = xColumn.valueLabels ?? xColumn.value;\n const yLabelsSource = yColumn.valueLabels ?? yColumn.value;\n const annotationColumnsX = annotations.filter(item => item.axis === 'x').map(item => item.valueColumn.valueLabels ?? item.valueColumn.value);\n const annotationColumnsY = annotations.filter(item => item.axis === 'y').map(item => item.valueColumn.valueLabels ?? item.valueColumn.value);\n const dendrogramXColumns = Object.values(dendrogramX ?? {}).map(column => column.value);\n const dendrogramYColumns = Object.values(dendrogramY ?? {}).map(column => column.value);\n const additionalDataColumnsX = lodash.uniq([...annotationColumnsX, ...dendrogramXColumns, xLabelsSource]);\n const additionalDataColumnsY = lodash.uniq([...annotationColumnsY, ...dendrogramYColumns, yLabelsSource]);\n\n for (let i = 0; i < data.rowsCount; i++) {\n const facetKey = getFacetOrGroupKey(facetBy.map(column => data.getColumnValue(column.value, i)));\n const xGroupKey = getFacetOrGroupKey(xGroupBy.map(column => data.getColumnValue(column.value, i)));\n const yGroupKey = getFacetOrGroupKey(yGroupBy.map(column => data.getColumnValue(column.value, i)));\n const xGroupLabel = xGroupBy.map(column => data.getColumnValue(column.valueLabels ?? column.value, i)).join(', ');\n const yGroupLabel = yGroupBy.map(column => data.getColumnValue(column.valueLabels ?? column.value, i)).join(', ');\n result.meta.xGroupLabels[xGroupKey] = xGroupLabel;\n result.meta.yGroupLabels[yGroupKey] = yGroupLabel;\n const x = String(data.getColumnValue(xColumn.value, i));\n const y = String(data.getColumnValue(yColumn.value, i));\n\n const values = result.meta.valueSources.reduce((r, key) => {\n r[key] = (data.getColumnValue(valueColumns[key].value, i) ?? NAValueAs) as number | null;\n return r;\n }, {} as Record<string, DataValue>);\n\n if (x === 'null' || y === 'null' || Object.values(values).every(v => v === null)) {\n continue;\n }\n\n if (!result.facets[facetKey]) {\n result.facets[facetKey] = {\n xKeys: [],\n yKeys: [],\n xKeysByGroups: {},\n yKeysByGroups: {},\n cells: {},\n };\n }\n if (!result.facets[facetKey].xKeysByGroups[xGroupKey]) {\n result.facets[facetKey].xKeysByGroups[xGroupKey] = [];\n }\n if (!result.facets[facetKey].yKeysByGroups[yGroupKey]) {\n result.facets[facetKey].yKeysByGroups[yGroupKey] = [];\n }\n result.facets[facetKey].xKeys.push(x);\n result.facets[facetKey].yKeys.push(y);\n result.facets[facetKey].xKeysByGroups[xGroupKey].push(x);\n result.facets[facetKey].yKeysByGroups[yGroupKey].push(y);\n\n if (!result.facets[facetKey].cells[x]) {\n result.facets[facetKey].cells[x] = {};\n }\n\n for (const valueSource of result.meta.valueSources) {\n if (result.facets[facetKey].cells[x][y] && result.facets[facetKey].cells[x][y].value[valueSource] !== values[valueSource]) {\n throw Error(`More than 1 value for x=${x}, y=${y}`);\n }\n }\n\n const xLabelsSourceValue = data.getColumnValue(xLabelsSource, i);\n if (result.meta.xLabels[x] && String(xLabelsSourceValue) !== result.meta.xLabels[x]) {\n throw Error(`More than 1 x-label value for x=${x}`);\n }\n const yLabelsSourceValue = data.getColumnValue(yLabelsSource, i);\n if (result.meta.yLabels[y] && String(yLabelsSourceValue) !== result.meta.yLabels[y]) {\n throw Error(`More than 1 y-label value for y=${y}`);\n }\n result.meta.xLabels[x] = String(xLabelsSourceValue);\n result.meta.yLabels[y] = String(yLabelsSourceValue);\n // data for labels, annotations and dendrograms by X\n additionalDataColumnsX.forEach(columnKey => {\n const isAddedColumn = typeof result.meta.xDataByKeys[columnKey] !== 'undefined';\n const isAddedValue = isAddedColumn && typeof result.meta.xDataByKeys[columnKey][x] !== 'undefined';\n if (!isAddedColumn) {\n result.meta.xDataByKeys[columnKey] = {};\n }\n if (isAddedValue && result.meta.xDataByKeys[columnKey][x] !== data.getColumnValue(columnKey, i)) {\n throw Error(`More than 1 value for x = ${x} and column = ${columnKey}`);\n }\n if (!isAddedValue) {\n result.meta.xDataByKeys[columnKey][x] = data.getColumnValue(columnKey, i);\n }\n });\n // data for labels, annotations and dendrograms by Y\n additionalDataColumnsY.forEach(columnKey => {\n const isAddedColumn = typeof result.meta.yDataByKeys[columnKey] !== 'undefined';\n const isAddedValue = isAddedColumn && typeof result.meta.yDataByKeys[columnKey][y] !== 'undefined';\n if (!isAddedColumn) {\n result.meta.yDataByKeys[columnKey] = {};\n }\n if (isAddedValue && result.meta.yDataByKeys[columnKey][y] !== data.getColumnValue(columnKey, i)) {\n throw Error(`More than 1 value for y = ${y} and column = ${columnKey}`);\n }\n if (!isAddedValue) {\n result.meta.yDataByKeys[columnKey][y] = data.getColumnValue(columnKey, i);\n }\n });\n result.facets[facetKey].cells[x][y] = {\n isCell: true,\n idx: i,\n id: `${x}_${y}`,\n x,\n y,\n value: values,\n normalizedValue: values,\n };\n\n updateValueExtent(result, result.facets[facetKey].cells[x][y]);\n }\n\n result.meta.facetKeys = result.meta.facetKeys.filter((key) => result.facets[key]); // filter only used;\n\n // make uniq x, y, x-group and y-group keys\n result.meta.facetKeys.forEach(facetKey => {\n const facet = result.facets[facetKey];\n const uniqueXKeys = lodash.uniq(facet.xKeys);\n const uniqueYKeys = lodash.uniq(facet.yKeys);\n facet.xKeys = keysOrder[xColumn.value] ? lodash.intersection(keysOrder[xColumn.value], uniqueXKeys) : uniqueXKeys;\n facet.yKeys = keysOrder[yColumn.value] ? lodash.intersection(keysOrder[yColumn.value], uniqueYKeys) : uniqueYKeys;\n xGroupKeys.forEach(xGroupKey => {\n result.facets[facetKey].xKeysByGroups[xGroupKey] = lodash.intersection(\n facet.xKeys,\n result.facets[facetKey].xKeysByGroups[xGroupKey]\n );\n });\n yGroupKeys.forEach(yGroupKey => {\n result.facets[facetKey].yKeysByGroups[yGroupKey] = lodash.intersection(\n facet.yKeys,\n result.facets[facetKey].yKeysByGroups[yGroupKey]\n );\n });\n });\n\n applyAggregation(result, aggregation, additionalDataColumnsX, additionalDataColumnsY, annotations);\n applyNormalization(result, normalizationBySource);\n\n // every facet may contain not all of available keys, but for shared axes it is necessary to have all of them\n result.meta.xKeysByGroups = result.meta.xGroupKeys.reduce((res: Record<string, string[]>, xGroupKey) => {\n const existingXKeys = sortByLabels(lodash.uniq(\n lodash.flatten(result.meta.facetKeys.map(facetKey => result.facets[facetKey].xKeysByGroups[xGroupKey]))\n ), xAxis.sorting, result.meta.xLabels);\n res[xGroupKey] = keysOrder[xColumn.value] ? lodash.intersection(keysOrder[xColumn.value], existingXKeys) : existingXKeys;\n return res;\n }, {});\n result.meta.xKeys = result.meta.xGroupKeys.reduce((res: string[], xGroupKey: string) => {\n res = res.concat(result.meta.xKeysByGroups[xGroupKey]);\n return res;\n }, []);\n\n result.meta.yKeysByGroups = result.meta.yGroupKeys.reduce((res: Record<string, string[]>, yGroupKey) => {\n const existingYKeys = sortByLabels(lodash.uniq(\n lodash.flatten(result.meta.facetKeys.map(facetKey => result.facets[facetKey].yKeysByGroups[yGroupKey]))\n ), yAxis.sorting, result.meta.yLabels);\n res[yGroupKey] = keysOrder[yColumn.value] ? lodash.intersection(keysOrder[yColumn.value], existingYKeys) : existingYKeys;\n return res;\n }, {});\n result.meta.yKeys = result.meta.yGroupKeys.reduce((res: string[], yGroupKey: string) => {\n res = res.concat(result.meta.yKeysByGroups[yGroupKey]);\n return res;\n }, []);\n\n for (const valueSource of result.meta.valueSources) {\n // avoid render errors on empty data\n if (result.meta.valueExtent[valueSource][0] === Infinity) {\n result.meta.valueExtent[valueSource][0] = 0;\n }\n if (result.meta.valueExtent[valueSource][1] === -Infinity) {\n result.meta.valueExtent[valueSource][1] = 0;\n }\n }\n\n return result;\n}"],"names":["normalizeByStd","values","stdValue","deviation","meanValue","mean","v","normalizeByMinMax","min","max","extent","getNormalizationFn","method","aggregateNumeric","res","valuesSorted","a","b","quantileSorted","exhaustive","aggregateString","list","getKeysCombinations","keysLists","result","keys","nextResult","key","resultItem","sortByLabels","arr","direction","labels","applyAggregation","aggregation","additionalDataColumnsX","additionalDataColumnsY","annotations","valueExtent","r","facetKey","xKeys","yKeys","cells","xKeysByGroups","yKeysByGroups","xGroups","xKey","yGroups","yKey","xNewKeys","yNewKeys","xGroupKey","yGroupKey","valuesBySources","valueSource","cellValue","_c","_b","_a","_d","value","cell","columnKey","annotation","updateValueExtent","applyNormalization","normalizationBySources","normalization","cellKeys","groupKeys","cellGetter","cellKey","groupKey","normalize","fillCellsData","data","xColumn","yColumn","valueColumns","facetBy","xGroupBy","yGroupBy","dendrogramX","dendrogramY","normalizationBySource","NAValueAs","keysOrder","xAxis","yAxis","facetKeysLists","column","xGroupKeysLists","yGroupKeysLists","facetKeysCombinations","xGroupKeysCombinations","yGroupKeysCombinations","facetKeys","getFacetOrGroupKey","xGroupKeys","yGroupKeys","index","xLabelsSource","yLabelsSource","annotationColumnsX","item","annotationColumnsY","dendrogramXColumns","dendrogramYColumns","lodash","i","xGroupLabel","yGroupLabel","x","y","xLabelsSourceValue","yLabelsSourceValue","isAddedColumn","isAddedValue","facet","uniqueXKeys","uniqueYKeys","existingXKeys","existingYKeys"],"mappings":"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","x_google_ignoreList":[0]}
@@ -1,66 +1,11 @@
1
- import h from "../node_modules/lodash/lodash.js";
2
- import { exhaustive as ee } from "../utils/index.js";
3
- import N from "../node_modules/d3-array/src/mean.js";
4
- import { quantileSorted as ae } from "../node_modules/d3-array/src/quantile.js";
5
- import te from "../node_modules/d3-array/src/deviation.js";
6
- import ue from "../node_modules/d3-array/src/extent.js";
7
- function oe(a) {
8
- const u = te(a), o = N(a);
9
- return u === void 0 || o === void 0 || u === 0 ? (n) => n : (n) => (n - o) / u;
10
- }
11
- function le(a) {
12
- const u = N(a), [o, n] = ue(a);
13
- return u === void 0 || o === void 0 || n === void 0 || n === o ? (y) => y : (y) => (y - u) / (n - o);
14
- }
15
- function se(a, u) {
16
- return a === "standardScaling" ? oe(u) : a === "meanNormalization" ? le(u) : (o) => o;
17
- }
18
- function k(a, u) {
19
- switch (a) {
20
- case "max": {
21
- let o = u[0];
22
- for (const n of u)
23
- o = Math.max(o, n);
24
- return o;
25
- }
26
- case "min": {
27
- let o = u[0];
28
- for (const n of u)
29
- o = Math.min(o, n);
30
- return o;
31
- }
32
- case "median": {
33
- const o = u.sort((n, y) => n - y);
34
- return ae(o, 0.5);
35
- }
36
- case "mean":
37
- return N(u) ?? u[0];
38
- default:
39
- ee(a, `Unknown aggregation function ${a}`);
40
- }
41
- }
42
- function Q(a) {
43
- const u = [...new Set(a)].sort();
44
- return u.length > 3 ? [...u.slice(0, 3), "..."].join(", ") : u.join(", ");
45
- }
46
- function I(a) {
47
- if (!a.length)
48
- return [];
49
- let u = [[]];
50
- return a.forEach((o) => {
51
- const n = [];
52
- o.forEach((y) => {
53
- n.push(...u.map((v) => [...v, y]));
54
- }), u = n;
55
- }), u;
56
- }
57
- const R = (a, u, o = {}) => a.sort(
58
- (n, y) => u === "asc" ? (o[n] ?? n).localeCompare(o[y] ?? y, "en", { numeric: !0 }) : (o[y] ?? y).localeCompare(o[n] ?? n, "en", { numeric: !0 })
59
- );
60
- function ne() {
1
+ import { fillCellsData as B } from "./fillCellsData.js";
2
+ function b() {
61
3
  return {
62
4
  meta: {
5
+ valueSources: ["dataSource"],
63
6
  facetKeys: [],
7
+ xKeys: [],
8
+ yKeys: [],
64
9
  xGroupKeys: [],
65
10
  yGroupKeys: [],
66
11
  xKeysByGroups: {},
@@ -74,165 +19,34 @@ function ne() {
74
19
  facetKeyValues: {},
75
20
  xGroupKeyValues: {},
76
21
  yGroupKeyValues: {},
77
- valueExtent: [1 / 0, -1 / 0]
22
+ valueExtent: { dataSource: [1 / 0, -1 / 0] }
78
23
  },
79
24
  facets: {}
80
25
  };
81
26
  }
82
- function re(a, u, o, n, y) {
83
- if (u.x || u.y) {
84
- const v = [1 / 0, -1 / 0];
85
- a.meta.facetKeys.forEach((m) => {
86
- const { xKeys: L, yKeys: M, cells: V, xKeysByGroups: g, yKeysByGroups: G } = a.facets[m], c = u.x ? g : L.reduce((e, r) => (e[r] = [r], e), {}), b = u.y ? G : M.reduce((e, r) => (e[r] = [r], e), {}), d = Object.keys(c), D = Object.keys(b);
87
- for (const e of d)
88
- for (const r of D) {
89
- const B = [];
90
- if (c[e].forEach((K) => {
91
- b[r].forEach((C) => {
92
- var p, S, _;
93
- const j = (S = (p = V[K]) == null ? void 0 : p[C]) == null ? void 0 : S.value;
94
- j !== void 0 && (B.push(j), (_ = V[K]) == null || delete _[C]);
95
- });
96
- }), B.length > 0) {
97
- const K = k(u.method, B);
98
- a.facets[m].cells[e] || (a.facets[m].cells[e] = {}), a.facets[m].cells[e][r] = {
99
- isCell: !0,
100
- idx: 0,
101
- id: `${e}_${r}`,
102
- x: e,
103
- y: r,
104
- value: K,
105
- normalizedValue: K
106
- }, v[0] = Math.min(K, v[0]), v[1] = Math.max(K, v[1]);
107
- }
108
- }
109
- u.x && d.forEach((e) => {
110
- o.forEach((r) => {
111
- const B = y.find((p) => p.valueColumn.value === r || p.valueColumn.valueLabels === r);
112
- if (!B)
113
- return;
114
- const K = [];
115
- c[e].forEach((p) => {
116
- K.push(a.meta.xDataByKeys[r][p]), delete a.meta.xDataByKeys[r][p];
117
- });
118
- const C = B.type === "continuous" ? k(u.method, K) : Q(K);
119
- a.meta.xDataByKeys[r][e] = C;
120
- });
121
- }), u.y && (n.forEach((e) => {
122
- a.meta.yDataByKeys[e] = {};
123
- }), D.forEach((e) => {
124
- n.forEach((r) => {
125
- const B = y.find((p) => p.valueColumn.value === r || p.valueColumn.valueLabels === r);
126
- if (!B)
127
- return;
128
- const K = [];
129
- b[e].forEach((p) => {
130
- K.push(a.meta.yDataByKeys[r][p]), delete a.meta.yDataByKeys[r][p];
131
- });
132
- const C = B.type === "continuous" ? k(u.method, K) : Q(K);
133
- a.meta.yDataByKeys[r][e] = C;
134
- });
135
- })), u.x && (a.facets[m].xKeys = Object.keys(g), a.facets[m].xKeysByGroups = { null: a.facets[m].xKeys }, a.meta.xLabels = a.meta.xGroupLabels, a.meta.xGroupKeys = ["null"], a.meta.xGroupKeyValues = { null: ["null"] }), u.y && (a.facets[m].yKeys = Object.keys(G), a.facets[m].yKeysByGroups = { null: a.facets[m].yKeys }, a.meta.yLabels = a.meta.yGroupLabels, a.meta.yGroupKeys = ["null"], a.meta.yGroupKeyValues = { null: ["null"] });
136
- }), a.meta.valueExtent = v;
137
- }
138
- }
139
- function ye(a, u) {
140
- if (u) {
141
- const o = [1 / 0, -1 / 0];
142
- a.meta.facetKeys.forEach((n) => {
143
- const { xKeys: y, yKeys: v, cells: m } = a.facets[n], L = u.direction === "row" ? y : v, M = u.direction === "row" ? v : y, V = u.direction === "row" ? (g, G) => {
144
- var c;
145
- return (c = m[g]) == null ? void 0 : c[G];
146
- } : (g, G) => {
147
- var c;
148
- return (c = m[G]) == null ? void 0 : c[g];
149
- };
150
- M.forEach((g) => {
151
- const G = [];
152
- L.forEach((b) => {
153
- var d;
154
- const D = (d = V(b, g)) == null ? void 0 : d.value;
155
- D !== void 0 && G.push(D);
156
- });
157
- const c = se(u.method, G);
158
- L.forEach((b) => {
159
- const d = V(b, g);
160
- d !== void 0 && (d.normalizedValue = c(d.value), o[0] = Math.min(d.normalizedValue, o[0]), o[1] = Math.max(d.normalizedValue, o[1]));
161
- });
162
- });
163
- }), a.meta.valueExtent = o;
164
- }
165
- }
166
- function pe(a, u, o, n, y, v, m, L, M, V, g, G, c, b, d, D) {
167
- const e = ne(), r = y.length ? y.map((t) => c[t.value] ?? a.getColumnCategories(t.value)) : [["null"]], B = v.length ? v.map((t) => c[t.value] ?? a.getColumnCategories(t.value)) : [["null"]], K = m.length ? m.map((t) => c[t.value] ?? a.getColumnCategories(t.value)) : [["null"]], C = I(r), p = I(B), S = I(K), _ = C.map((t) => t.join("_")), j = p.map((t) => t.join("_")), O = S.map((t) => t.join("_"));
168
- e.meta.facetKeys = _, e.meta.xGroupKeys = j, e.meta.yGroupKeys = O, e.meta.facetKeyValues = _.reduce((t, l, f) => (t[l] = C[f], t), {}), e.meta.xGroupKeyValues = j.reduce((t, l, f) => (t[l] = p[f], t), {}), e.meta.yGroupKeyValues = O.reduce((t, l, f) => (t[l] = S[f], t), {});
169
- const U = u.valueLabels ?? u.value, A = o.valueLabels ?? o.value, T = L.filter((t) => t.axis === "x").map((t) => t.valueColumn.valueLabels ?? t.valueColumn.value), W = L.filter((t) => t.axis === "y").map((t) => t.valueColumn.valueLabels ?? t.valueColumn.value), Y = Object.values(M ?? {}).map((t) => t.value), Z = Object.values(V ?? {}).map((t) => t.value), F = h.uniq([...T, ...Y, U]), H = h.uniq([...W, ...Z, A]);
170
- for (let t = 0; t < a.rowsCount; t++) {
171
- const l = y.length ? y.map((s) => a.getColumnValue(s.value, t)).join("_") : "null", f = v.length ? v.map((s) => a.getColumnValue(s.value, t)).join("_") : "null", E = m.length ? m.map((s) => a.getColumnValue(s.value, t)).join("_") : "null", $ = v.length ? v.map((s) => a.getColumnValue(s.valueLabels ?? s.value, t)).join(", ") : "", X = m.length ? m.map((s) => a.getColumnValue(s.valueLabels ?? s.value, t)).join(", ") : "";
172
- e.meta.xGroupLabels[f] = $, e.meta.yGroupLabels[E] = X;
173
- const i = String(a.getColumnValue(u.value, t)), x = String(a.getColumnValue(o.value, t)), w = a.getColumnValue(n.value, t) ?? G;
174
- if (i === "null" || x === "null" || w === null)
175
- continue;
176
- if (e.facets[l] || (e.facets[l] = {
177
- xKeys: [],
178
- yKeys: [],
179
- xKeysByGroups: {},
180
- yKeysByGroups: {},
181
- cells: {}
182
- }), e.facets[l].xKeysByGroups[f] || (e.facets[l].xKeysByGroups[f] = []), e.facets[l].yKeysByGroups[E] || (e.facets[l].yKeysByGroups[E] = []), e.facets[l].xKeys.push(i), e.facets[l].yKeys.push(x), e.facets[l].xKeysByGroups[f].push(i), e.facets[l].yKeysByGroups[E].push(x), e.facets[l].cells[i] || (e.facets[l].cells[i] = {}), e.meta.valueExtent[0] = Math.min(w, e.meta.valueExtent[0]), e.meta.valueExtent[1] = Math.max(w, e.meta.valueExtent[1]), e.facets[l].cells[i][x] && e.facets[l].cells[i][x].value !== w)
183
- throw Error(`More than 1 value for x=${i}, y=${x}`);
184
- const J = a.getColumnValue(U, t);
185
- if (e.meta.xLabels[i] && String(J) !== e.meta.xLabels[i])
186
- throw Error(`More than 1 x-label value for x=${i}`);
187
- const P = a.getColumnValue(A, t);
188
- if (e.meta.yLabels[x] && String(P) !== e.meta.yLabels[x])
189
- throw Error(`More than 1 y-label value for y=${x}`);
190
- e.meta.xLabels[i] = String(J), e.meta.yLabels[x] = String(P), F.forEach((s) => {
191
- const q = typeof e.meta.xDataByKeys[s] < "u", z = q && typeof e.meta.xDataByKeys[s][i] < "u";
192
- if (q || (e.meta.xDataByKeys[s] = {}), z && e.meta.xDataByKeys[s][i] !== a.getColumnValue(s, t))
193
- throw Error(`More than 1 value for x = ${i} and column = ${s}`);
194
- z || (e.meta.xDataByKeys[s][i] = a.getColumnValue(s, t));
195
- }), H.forEach((s) => {
196
- const q = typeof e.meta.yDataByKeys[s] < "u", z = q && typeof e.meta.yDataByKeys[s][x] < "u";
197
- if (q || (e.meta.yDataByKeys[s] = {}), z && e.meta.yDataByKeys[s][x] !== a.getColumnValue(s, t))
198
- throw Error(`More than 1 value for y = ${x} and column = ${s}`);
199
- z || (e.meta.yDataByKeys[s][x] = a.getColumnValue(s, t));
200
- }), e.facets[l].cells[i][x] = {
201
- isCell: !0,
202
- idx: t,
203
- id: `${i}_${x}`,
204
- x: i,
205
- y: x,
206
- value: w,
207
- normalizedValue: w
208
- };
209
- }
210
- return e.meta.facetKeys = e.meta.facetKeys.filter((t) => e.facets[t]), e.meta.facetKeys.forEach((t) => {
211
- const l = e.facets[t], f = h.uniq(l.xKeys), E = h.uniq(l.yKeys);
212
- l.xKeys = c[u.value] ? h.intersection(c[u.value], f) : f, l.yKeys = c[o.value] ? h.intersection(c[o.value], E) : E, j.forEach(($) => {
213
- e.facets[t].xKeysByGroups[$] = h.intersection(
214
- l.xKeys,
215
- e.facets[t].xKeysByGroups[$]
216
- );
217
- }), O.forEach(($) => {
218
- e.facets[t].yKeysByGroups[$] = h.intersection(
219
- l.yKeys,
220
- e.facets[t].yKeysByGroups[$]
221
- );
222
- });
223
- }), re(e, D, F, H, L), ye(e, g), e.meta.xKeysByGroups = e.meta.xGroupKeys.reduce((t, l) => {
224
- const f = R(h.uniq(
225
- h.flatten(e.meta.facetKeys.map((E) => e.facets[E].xKeysByGroups[l]))
226
- ), b.sorting, e.meta.xLabels);
227
- return t[l] = c[u.value] ? h.intersection(c[u.value], f) : f, t;
228
- }, {}), e.meta.yKeysByGroups = e.meta.yGroupKeys.reduce((t, l) => {
229
- const f = R(h.uniq(
230
- h.flatten(e.meta.facetKeys.map((E) => e.facets[E].yKeysByGroups[l]))
231
- ), d.sorting, e.meta.yLabels);
232
- return t[l] = c[o.value] ? h.intersection(c[o.value], f) : f, t;
233
- }, {}), e.meta.valueExtent[0] === 1 / 0 && (e.meta.valueExtent[0] = 0), e.meta.valueExtent[1] === -1 / 0 && (e.meta.valueExtent[1] = 0), e;
27
+ function L(a, s, y, u, t, r, o, l, K, c, p, x, n, G, f, d) {
28
+ const e = b();
29
+ return B(
30
+ e,
31
+ a,
32
+ s,
33
+ y,
34
+ u,
35
+ t,
36
+ r,
37
+ o,
38
+ l,
39
+ K,
40
+ c,
41
+ { dataSource: p },
42
+ x,
43
+ n,
44
+ G,
45
+ f,
46
+ d
47
+ ), e;
234
48
  }
235
49
  export {
236
- pe as getCells
50
+ L as getCells
237
51
  };
238
52
  //# sourceMappingURL=getCells.js.map