@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
@@ -1 +1 @@
1
- {"version":3,"file":"HeatmapSettingsImpl.d.ts","sourceRoot":"","sources":["../../src/heatmap/HeatmapSettingsImpl.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"HeatmapSettingsImpl.d.ts","sourceRoot":"","sources":["../../src/heatmap/HeatmapSettingsImpl.ts"],"names":[],"mappings":"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"}
@@ -38,6 +38,8 @@ var r = {
38
38
  dendrogramY;
39
39
  inheritedDendrogramAes;
40
40
  NAValueAs;
41
+ showEmptyRows;
42
+ showEmptyColumns;
41
43
  cellsRenderingMode;
42
44
  constructor(e) {
43
45
  if (t.parse(e), this.id = n.uniqueId("settings"), this.xColumn = e.xColumn, this.xGroupBy = e.xGroupBy ?? [], this.yColumn = e.yColumn, this.yGroupBy = e.yGroupBy ?? [], this.valueColumn = e.valueColumn, this.facetBy = e.facetBy ?? [], this.chartSettings = {
@@ -97,7 +99,7 @@ var r = {
97
99
  sharedY: !0,
98
100
  order: e.facetSettings?.order ?? null,
99
101
  ...e.facetSettings
100
- }, this.chartSettings.size.cellWidth && this.facetBy.length > 0 && (this.facetSettings.sharedX = !0), this.chartSettings.size.cellHeight && this.facetBy.length > 0 && (this.facetSettings.sharedY = !0), this.keysOrder = e.keysOrder ?? {}, this.normalization = this.chartSettings.valueType === "continuous" ? e.normalization ?? null : null, this.NAValueAs = e.NAValueAs ?? null, this.aes = {
102
+ }, this.chartSettings.size.cellWidth && this.facetBy.length > 0 && (this.facetSettings.sharedX = !0), this.chartSettings.size.cellHeight && this.facetBy.length > 0 && (this.facetSettings.sharedY = !0), this.keysOrder = e.keysOrder ?? {}, this.normalization = this.chartSettings.valueType === "continuous" ? e.normalization ?? null : null, this.NAValueAs = e.NAValueAs ?? null, this.showEmptyRows = e.showEmptyRows ?? !1, this.showEmptyColumns = e.showEmptyColumns ?? !1, this.aes = {
101
103
  colorsList: e.aes?.colorsList ?? [
102
104
  "black",
103
105
  "white",
@@ -1 +1 @@
1
- {"version":3,"file":"HeatmapSettingsImpl.js","names":[],"sources":["../../src/heatmap/HeatmapSettingsImpl.ts"],"sourcesContent":["import lodash from 'lodash';\nimport { BLACK, DEFAULT_HEIGHT, DEFAULT_HEIGHT_SMALL, DEFAULT_WIDTH, DEFAULT_WIDTH_SMALL } from '../constants';\nimport type {\n AesRecord,\n AggregationMethod,\n ColumnName, DendrogramDistance, DendrogramLinkage, HeatmapSettings,\n LegendPosition, LineShape, NormalizationDirection, NormalizationMethod, PointShape,\n SettingsInterface,\n TitlePosition\n} from '../types';\nimport { HeatmapSettingsSchema } from '../types';\nimport { MIN_MARGIN, MIN_PADDING } from './constants';\n\nconst DEFAULT_DENDRO_AES = {\n lineColor: BLACK,\n dotShape: '21' as PointShape,\n dotFill: BLACK,\n dotSize: 3,\n lineShape: 'solid' as LineShape,\n lineWidth: 1,\n};\nconst DEFAULT_DENDRO: HeatmapDendrogramSettings = {\n size: 150,\n distance: 'euclidean',\n linkage: 'average',\n fillNA: 0,\n showNodes: true,\n hidden: false,\n edgeInheritance: 'up',\n aes: DEFAULT_DENDRO_AES,\n};\n\nexport interface HeatmapDendrogramSettings {\n size: number;\n distance: DendrogramDistance;\n linkage: DendrogramLinkage;\n fillNA: number;\n showNodes: boolean;\n hidden: boolean;\n edgeInheritance: 'up' | 'down';\n aes: {\n lineColor: string | ColumnName;\n dotFill: string | ColumnName;\n dotShape: PointShape | ColumnName;\n dotSize: number | ColumnName;\n lineShape: LineShape | ColumnName;\n lineWidth: number | ColumnName;\n };\n}\n\ninterface HeatmapDendrogramSettingsX extends HeatmapDendrogramSettings {\n position: 'top' | 'bottom';\n}\ninterface HeatmapDendrogramSettingsY extends HeatmapDendrogramSettings {\n position: 'left' | 'right';\n}\n\ninterface HeatmapAnnotation {\n id: string;\n valueColumn: ColumnName;\n showTitle: boolean;\n type: 'discrete' | 'continuous';\n colors: string[];\n}\n\ninterface HeatmapAnnotationX extends HeatmapAnnotation {\n axis: 'x';\n position: 'top' | 'bottom';\n titlePosition: 'left' | 'right';\n}\ninterface HeatmapAnnotationY extends HeatmapAnnotation {\n axis: 'y';\n position: 'left' | 'right';\n titlePosition: 'top' | 'bottom';\n}\n\nexport class HeatmapSettingsImpl implements SettingsInterface {\n readonly id: string;\n readonly type = 'heatmap';\n readonly facetSettings: {\n order: string[] | null;\n sharedX: boolean;\n sharedY: boolean;\n nRows?: number;\n nCols?: number;\n };\n readonly xColumn: ColumnName;\n readonly xGroupBy: ColumnName[];\n readonly yColumn: ColumnName;\n readonly yGroupBy: ColumnName[];\n readonly valueColumn: ColumnName;\n readonly facetBy: ColumnName[];\n readonly normalization: { direction: NormalizationDirection, method: NormalizationMethod, colorRange?: number[] } | null;\n readonly chartSettings: {\n readonly title: { name: string; show: boolean; position: TitlePosition };\n readonly size: {\n width: number;\n height: number;\n cellWidth: number | null;\n cellHeight: number | null;\n innerOffset: number;\n outerOffset: number;\n };\n readonly frame: { type: 'full' | 'groups' | 'none' };\n readonly valueType: 'discrete' | 'continuous';\n readonly yAxis: {\n title: string;\n showTicks: boolean;\n showTitle: boolean;\n showAxisLabels: boolean;\n showGroupLabels: boolean;\n position: 'left' | 'right';\n groupingPosition: 'left' | 'right';\n axisLabelsAngle: 0 | 45 | 90;\n groupLabelsAngle: 0 | 45 | 90;\n sorting: 'asc' | 'desc';\n };\n readonly xAxis: {\n title: string;\n showTicks: boolean;\n showTitle: boolean;\n showAxisLabels: boolean;\n showGroupLabels: boolean;\n position: 'bottom' | 'top';\n groupingPosition: 'bottom' | 'top';\n axisLabelsAngle: 0 | 45 | 90;\n groupLabelsAngle: 0 | 45 | 90;\n sorting: 'asc' | 'desc';\n };\n readonly legend: { show: boolean; position: LegendPosition };\n readonly tooltips: { show: boolean; content?: ColumnName[] };\n };\n readonly keysOrder: Record<string, string[]>;\n readonly aes: {\n colorsList: string[];\n colorsMap: Record<string, string> | null;\n valueColors: string[] | null;\n valuesByColors: number[] | null;\n groupGap: number;\n cellStrokeColor: string;\n emptyCellColor: string;\n };\n\n readonly aggregation: {\n x: boolean;\n y: boolean;\n method: AggregationMethod;\n };\n\n readonly annotations: (HeatmapAnnotationX | HeatmapAnnotationY)[];\n\n readonly dendrogramX: HeatmapDendrogramSettingsX | null;\n readonly dendrogramY: HeatmapDendrogramSettingsY | null;\n readonly inheritedDendrogramAes: Record<string, AesRecord> | null;\n readonly NAValueAs: number | null;\n readonly cellsRenderingMode: 'canvas' | 'svg' | null;\n\n constructor(settings: HeatmapSettings) {\n HeatmapSettingsSchema.parse(settings);\n\n this.id = lodash.uniqueId('settings');\n this.xColumn = settings.xColumn;\n this.xGroupBy = settings.xGroupBy ?? [];\n this.yColumn = settings.yColumn;\n this.yGroupBy = settings.yGroupBy ?? [];\n this.valueColumn = settings.valueColumn;\n this.facetBy = settings.facetBy ?? [];\n this.chartSettings = {\n title: {\n position: 'left',\n show: true,\n ...settings.title,\n name: settings.title?.name ?? 'Chart',\n },\n size: {\n width: settings?.size?.width ?? (this.facetBy.length ? DEFAULT_WIDTH_SMALL : DEFAULT_WIDTH),\n height: settings?.size?.height ?? (this.facetBy.length ? DEFAULT_HEIGHT_SMALL : DEFAULT_HEIGHT),\n innerOffset: settings.size?.innerOffset ?? MIN_PADDING,\n outerOffset: settings.size?.outerOffset ?? MIN_MARGIN,\n cellWidth: settings?.size?.cellWidth ?? null,\n cellHeight: settings?.size?.cellHeight ?? null,\n },\n frame: { type: settings.frame?.type ?? 'none' },\n valueType: settings.valueType ?? 'continuous',\n yAxis: {\n title: settings.yColumn.label ?? settings.yColumn.value,\n showTicks: true,\n showTitle: true,\n showAxisLabels: true,\n showGroupLabels: true,\n position: 'left',\n groupingPosition: 'left',\n axisLabelsAngle: 90,\n groupLabelsAngle: 0,\n sorting: 'asc',\n ...settings.yAxis,\n },\n xAxis: {\n title: settings.xColumn.label ?? settings.xColumn.value,\n showTicks: true,\n showTitle: true,\n showAxisLabels: true,\n showGroupLabels: true,\n position: 'bottom',\n groupingPosition: 'bottom',\n axisLabelsAngle: 90,\n groupLabelsAngle: 0,\n sorting: 'asc',\n ...settings.xAxis,\n },\n legend: {\n show: true,\n position: 'right',\n ...settings.legend,\n },\n tooltips: {\n show: true,\n ...settings.tooltips,\n },\n };\n this.facetSettings = {\n sharedX: true,\n sharedY: true,\n order: settings.facetSettings?.order ?? null,\n ...settings.facetSettings,\n };\n if (this.chartSettings.size.cellWidth && this.facetBy.length > 0) {\n this.facetSettings.sharedX = true;\n }\n if (this.chartSettings.size.cellHeight && this.facetBy.length > 0) {\n this.facetSettings.sharedY = true;\n }\n this.keysOrder = settings.keysOrder ?? {};\n this.normalization = this.chartSettings.valueType === 'continuous' ? settings.normalization ?? null : null;\n this.NAValueAs = settings.NAValueAs ?? null;\n this.aes = {\n colorsList: settings.aes?.colorsList ?? ['black', 'white', 'red'],\n colorsMap: settings.aes?.colorsMap ?? null,\n valueColors: settings.aes?.valueColors ?? null,\n valuesByColors: settings.aes?.valuesByColors ?? null,\n cellStrokeColor: settings.aes?.cellStrokeColor ?? 'none',\n groupGap: settings.aes?.groupGap ?? 3,\n emptyCellColor: settings.aes?.emptyCellColor ?? 'white',\n };\n\n this.annotations = (settings.annotations ?? []).map(item => {\n if (item.axis === 'x') {\n return {\n id: lodash.uniqueId('annotation'),\n axis: 'x',\n valueColumn: item.valueColumn,\n position: item.position ?? this.chartSettings.xAxis.position,\n titlePosition: item.titlePosition ?? 'right',\n showTitle: item.showTitle ?? true,\n type: item.type,\n colors: item.colors ?? ['white', 'black'],\n };\n }\n return {\n id: lodash.uniqueId('annotation'),\n axis: 'y',\n valueColumn: item.valueColumn,\n position: item.position ?? this.chartSettings.yAxis.position,\n titlePosition: item.titlePosition ?? 'top',\n showTitle: item.showTitle ?? true,\n type: item.type,\n colors: item.colors ?? ['white', 'black'],\n };\n });\n\n if (settings.valueType === 'discrete' && (settings.dendrogramX || settings.dendrogramY)) {\n throw Error('Dendrogram is not available with discrete cells values');\n }\n\n this.aggregation = {\n x: false,\n y: false,\n method: 'min',\n ...settings.aggregation\n };\n\n this.dendrogramX = settings.dendrogramX\n ? {\n ...DEFAULT_DENDRO,\n position: 'top',\n ...settings.dendrogramX,\n aes: {\n ...DEFAULT_DENDRO_AES,\n ...settings.dendrogramX?.aes,\n },\n }\n : null;\n this.dendrogramY = settings.dendrogramY\n ? {\n ...DEFAULT_DENDRO,\n position: 'left',\n ...settings.dendrogramY,\n aes: {\n ...DEFAULT_DENDRO_AES,\n ...settings.dendrogramY?.aes,\n },\n }\n : null;\n this.inheritedDendrogramAes = settings.inheritedDendrogramAes ?? null;\n this.cellsRenderingMode = settings.cellsRenderingMode ?? null;\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"HeatmapSettingsImpl.js","names":[],"sources":["../../src/heatmap/HeatmapSettingsImpl.ts"],"sourcesContent":["import lodash from 'lodash';\nimport { BLACK, DEFAULT_HEIGHT, DEFAULT_HEIGHT_SMALL, DEFAULT_WIDTH, DEFAULT_WIDTH_SMALL } from '../constants';\nimport type {\n AesRecord,\n AggregationMethod,\n ColumnName, DendrogramDistance, DendrogramLinkage, HeatmapSettings,\n LegendPosition, LineShape, NormalizationDirection, NormalizationMethod, PointShape,\n SettingsInterface,\n TitlePosition\n} from '../types';\nimport { HeatmapSettingsSchema } from '../types';\nimport { MIN_MARGIN, MIN_PADDING } from './constants';\n\nconst DEFAULT_DENDRO_AES = {\n lineColor: BLACK,\n dotShape: '21' as PointShape,\n dotFill: BLACK,\n dotSize: 3,\n lineShape: 'solid' as LineShape,\n lineWidth: 1,\n};\nconst DEFAULT_DENDRO: HeatmapDendrogramSettings = {\n size: 150,\n distance: 'euclidean',\n linkage: 'average',\n fillNA: 0,\n showNodes: true,\n hidden: false,\n edgeInheritance: 'up',\n aes: DEFAULT_DENDRO_AES,\n};\n\nexport interface HeatmapDendrogramSettings {\n size: number;\n distance: DendrogramDistance;\n linkage: DendrogramLinkage;\n fillNA: number;\n showNodes: boolean;\n hidden: boolean;\n edgeInheritance: 'up' | 'down';\n aes: {\n lineColor: string | ColumnName;\n dotFill: string | ColumnName;\n dotShape: PointShape | ColumnName;\n dotSize: number | ColumnName;\n lineShape: LineShape | ColumnName;\n lineWidth: number | ColumnName;\n };\n}\n\ninterface HeatmapDendrogramSettingsX extends HeatmapDendrogramSettings {\n position: 'top' | 'bottom';\n}\ninterface HeatmapDendrogramSettingsY extends HeatmapDendrogramSettings {\n position: 'left' | 'right';\n}\n\ninterface HeatmapAnnotation {\n id: string;\n valueColumn: ColumnName;\n showTitle: boolean;\n type: 'discrete' | 'continuous';\n colors: string[];\n}\n\ninterface HeatmapAnnotationX extends HeatmapAnnotation {\n axis: 'x';\n position: 'top' | 'bottom';\n titlePosition: 'left' | 'right';\n}\ninterface HeatmapAnnotationY extends HeatmapAnnotation {\n axis: 'y';\n position: 'left' | 'right';\n titlePosition: 'top' | 'bottom';\n}\n\nexport class HeatmapSettingsImpl implements SettingsInterface {\n readonly id: string;\n readonly type = 'heatmap';\n readonly facetSettings: {\n order: string[] | null;\n sharedX: boolean;\n sharedY: boolean;\n nRows?: number;\n nCols?: number;\n };\n readonly xColumn: ColumnName;\n readonly xGroupBy: ColumnName[];\n readonly yColumn: ColumnName;\n readonly yGroupBy: ColumnName[];\n readonly valueColumn: ColumnName;\n readonly facetBy: ColumnName[];\n readonly normalization: { direction: NormalizationDirection, method: NormalizationMethod, colorRange?: number[] } | null;\n readonly chartSettings: {\n readonly title: { name: string; show: boolean; position: TitlePosition };\n readonly size: {\n width: number;\n height: number;\n cellWidth: number | null;\n cellHeight: number | null;\n innerOffset: number;\n outerOffset: number;\n };\n readonly frame: { type: 'full' | 'groups' | 'none' };\n readonly valueType: 'discrete' | 'continuous';\n readonly yAxis: {\n title: string;\n showTicks: boolean;\n showTitle: boolean;\n showAxisLabels: boolean;\n showGroupLabels: boolean;\n position: 'left' | 'right';\n groupingPosition: 'left' | 'right';\n axisLabelsAngle: 0 | 45 | 90;\n groupLabelsAngle: 0 | 45 | 90;\n sorting: 'asc' | 'desc';\n };\n readonly xAxis: {\n title: string;\n showTicks: boolean;\n showTitle: boolean;\n showAxisLabels: boolean;\n showGroupLabels: boolean;\n position: 'bottom' | 'top';\n groupingPosition: 'bottom' | 'top';\n axisLabelsAngle: 0 | 45 | 90;\n groupLabelsAngle: 0 | 45 | 90;\n sorting: 'asc' | 'desc';\n };\n readonly legend: { show: boolean; position: LegendPosition };\n readonly tooltips: { show: boolean; content?: ColumnName[] };\n };\n readonly keysOrder: Record<string, string[]>;\n readonly aes: {\n colorsList: string[];\n colorsMap: Record<string, string> | null;\n valueColors: string[] | null;\n valuesByColors: number[] | null;\n groupGap: number;\n cellStrokeColor: string;\n emptyCellColor: string;\n };\n\n readonly aggregation: {\n x: boolean;\n y: boolean;\n method: AggregationMethod;\n };\n\n readonly annotations: (HeatmapAnnotationX | HeatmapAnnotationY)[];\n\n readonly dendrogramX: HeatmapDendrogramSettingsX | null;\n readonly dendrogramY: HeatmapDendrogramSettingsY | null;\n readonly inheritedDendrogramAes: Record<string, AesRecord> | null;\n readonly NAValueAs: number | null;\n readonly showEmptyRows: boolean;\n readonly showEmptyColumns: boolean;\n readonly cellsRenderingMode: 'canvas' | 'svg' | null;\n\n constructor(settings: HeatmapSettings) {\n HeatmapSettingsSchema.parse(settings);\n\n this.id = lodash.uniqueId('settings');\n this.xColumn = settings.xColumn;\n this.xGroupBy = settings.xGroupBy ?? [];\n this.yColumn = settings.yColumn;\n this.yGroupBy = settings.yGroupBy ?? [];\n this.valueColumn = settings.valueColumn;\n this.facetBy = settings.facetBy ?? [];\n this.chartSettings = {\n title: {\n position: 'left',\n show: true,\n ...settings.title,\n name: settings.title?.name ?? 'Chart',\n },\n size: {\n width: settings?.size?.width ?? (this.facetBy.length ? DEFAULT_WIDTH_SMALL : DEFAULT_WIDTH),\n height: settings?.size?.height ?? (this.facetBy.length ? DEFAULT_HEIGHT_SMALL : DEFAULT_HEIGHT),\n innerOffset: settings.size?.innerOffset ?? MIN_PADDING,\n outerOffset: settings.size?.outerOffset ?? MIN_MARGIN,\n cellWidth: settings?.size?.cellWidth ?? null,\n cellHeight: settings?.size?.cellHeight ?? null,\n },\n frame: { type: settings.frame?.type ?? 'none' },\n valueType: settings.valueType ?? 'continuous',\n yAxis: {\n title: settings.yColumn.label ?? settings.yColumn.value,\n showTicks: true,\n showTitle: true,\n showAxisLabels: true,\n showGroupLabels: true,\n position: 'left',\n groupingPosition: 'left',\n axisLabelsAngle: 90,\n groupLabelsAngle: 0,\n sorting: 'asc',\n ...settings.yAxis,\n },\n xAxis: {\n title: settings.xColumn.label ?? settings.xColumn.value,\n showTicks: true,\n showTitle: true,\n showAxisLabels: true,\n showGroupLabels: true,\n position: 'bottom',\n groupingPosition: 'bottom',\n axisLabelsAngle: 90,\n groupLabelsAngle: 0,\n sorting: 'asc',\n ...settings.xAxis,\n },\n legend: {\n show: true,\n position: 'right',\n ...settings.legend,\n },\n tooltips: {\n show: true,\n ...settings.tooltips,\n },\n };\n this.facetSettings = {\n sharedX: true,\n sharedY: true,\n order: settings.facetSettings?.order ?? null,\n ...settings.facetSettings,\n };\n if (this.chartSettings.size.cellWidth && this.facetBy.length > 0) {\n this.facetSettings.sharedX = true;\n }\n if (this.chartSettings.size.cellHeight && this.facetBy.length > 0) {\n this.facetSettings.sharedY = true;\n }\n this.keysOrder = settings.keysOrder ?? {};\n this.normalization = this.chartSettings.valueType === 'continuous' ? settings.normalization ?? null : null;\n this.NAValueAs = settings.NAValueAs ?? null;\n this.showEmptyRows = settings.showEmptyRows ?? false;\n this.showEmptyColumns = settings.showEmptyColumns ?? false;\n this.aes = {\n colorsList: settings.aes?.colorsList ?? ['black', 'white', 'red'],\n colorsMap: settings.aes?.colorsMap ?? null,\n valueColors: settings.aes?.valueColors ?? null,\n valuesByColors: settings.aes?.valuesByColors ?? null,\n cellStrokeColor: settings.aes?.cellStrokeColor ?? 'none',\n groupGap: settings.aes?.groupGap ?? 3,\n emptyCellColor: settings.aes?.emptyCellColor ?? 'white',\n };\n\n this.annotations = (settings.annotations ?? []).map(item => {\n if (item.axis === 'x') {\n return {\n id: lodash.uniqueId('annotation'),\n axis: 'x',\n valueColumn: item.valueColumn,\n position: item.position ?? this.chartSettings.xAxis.position,\n titlePosition: item.titlePosition ?? 'right',\n showTitle: item.showTitle ?? true,\n type: item.type,\n colors: item.colors ?? ['white', 'black'],\n };\n }\n return {\n id: lodash.uniqueId('annotation'),\n axis: 'y',\n valueColumn: item.valueColumn,\n position: item.position ?? this.chartSettings.yAxis.position,\n titlePosition: item.titlePosition ?? 'top',\n showTitle: item.showTitle ?? true,\n type: item.type,\n colors: item.colors ?? ['white', 'black'],\n };\n });\n\n if (settings.valueType === 'discrete' && (settings.dendrogramX || settings.dendrogramY)) {\n throw Error('Dendrogram is not available with discrete cells values');\n }\n\n this.aggregation = {\n x: false,\n y: false,\n method: 'min',\n ...settings.aggregation\n };\n\n this.dendrogramX = settings.dendrogramX\n ? {\n ...DEFAULT_DENDRO,\n position: 'top',\n ...settings.dendrogramX,\n aes: {\n ...DEFAULT_DENDRO_AES,\n ...settings.dendrogramX?.aes,\n },\n }\n : null;\n this.dendrogramY = settings.dendrogramY\n ? {\n ...DEFAULT_DENDRO,\n position: 'left',\n ...settings.dendrogramY,\n aes: {\n ...DEFAULT_DENDRO_AES,\n ...settings.dendrogramY?.aes,\n },\n }\n : null;\n this.inheritedDendrogramAes = settings.inheritedDendrogramAes ?? null;\n this.cellsRenderingMode = settings.cellsRenderingMode ?? null;\n }\n}\n"],"mappings":"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"}
@@ -40,6 +40,26 @@ export type GroupedCellsData<T extends string> = {
40
40
  cells: Record<string, Record<string, Cell<T>>>;
41
41
  }>;
42
42
  };
43
- export declare function fillCellsData<T extends string>(result: GroupedCellsData<T>, data: DataFrame, xColumn: ColumnName, yColumn: ColumnName, valueColumns: Record<string, ColumnName>, facetBy: ColumnName[], xGroupBy: ColumnName[], yGroupBy: ColumnName[], facetSettings: HeatmapSettingsImpl['facetSettings'], annotations: HeatmapSettingsImpl['annotations'], dendrogramX: HeatmapSettingsImpl['dendrogramX'], dendrogramY: HeatmapSettingsImpl['dendrogramY'], normalizationBySource: Record<T, HeatmapSettingsImpl['normalization']>, // separated for color and size for example
44
- NAValueAs: HeatmapSettingsImpl['NAValueAs'], keysOrder: HeatmapSettingsImpl['keysOrder'], xAxis: HeatmapSettingsImpl['chartSettings']['xAxis'] | BubbleSettingsImpl['chartSettings']['xAxis'], yAxis: HeatmapSettingsImpl['chartSettings']['yAxis'] | BubbleSettingsImpl['chartSettings']['yAxis'], aggregation: HeatmapSettingsImpl['aggregation']): GroupedCellsData<T>;
43
+ export declare function fillCellsData<T extends string>(result: GroupedCellsData<T>, { data, xColumn, yColumn, valueColumns, facetBy, xGroupBy, yGroupBy, facetSettings, annotations, dendrogramX, dendrogramY, normalizationBySource, // separated for color and size for example
44
+ NAValueAs, keysOrder, xAxis, yAxis, aggregation, showEmptyRows, showEmptyColumns, }: {
45
+ data: DataFrame;
46
+ xColumn: ColumnName;
47
+ yColumn: ColumnName;
48
+ valueColumns: Record<string, ColumnName>;
49
+ facetBy: ColumnName[];
50
+ xGroupBy: ColumnName[];
51
+ yGroupBy: ColumnName[];
52
+ facetSettings: HeatmapSettingsImpl['facetSettings'];
53
+ annotations: HeatmapSettingsImpl['annotations'];
54
+ dendrogramX: HeatmapSettingsImpl['dendrogramX'];
55
+ dendrogramY: HeatmapSettingsImpl['dendrogramY'];
56
+ normalizationBySource: Record<T, HeatmapSettingsImpl['normalization']>;
57
+ NAValueAs: HeatmapSettingsImpl['NAValueAs'];
58
+ keysOrder: HeatmapSettingsImpl['keysOrder'];
59
+ xAxis: HeatmapSettingsImpl['chartSettings']['xAxis'] | BubbleSettingsImpl['chartSettings']['xAxis'];
60
+ yAxis: HeatmapSettingsImpl['chartSettings']['yAxis'] | BubbleSettingsImpl['chartSettings']['yAxis'];
61
+ aggregation: HeatmapSettingsImpl['aggregation'];
62
+ showEmptyRows?: boolean;
63
+ showEmptyColumns?: boolean;
64
+ }): GroupedCellsData<T>;
45
65
  //# sourceMappingURL=fillCellsData.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"fillCellsData.d.ts","sourceRoot":"","sources":["../../src/heatmap/fillCellsData.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAqB,UAAU,EAAE,SAAS,EAAuB,MAAM,UAAU,CAAC;AAC9F,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAGjE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAIvE,MAAM,MAAM,IAAI,CAAC,CAAC,SAAS,MAAM,IAAI;IACjC,MAAM,EAAE,IAAI,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;IAC5B,eAAe,EAAE,MAAM,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;IACtC,CAAC,EAAE,SAAS,CAAC;IACb,CAAC,EAAE,SAAS,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,gBAAgB,CAAC,CAAC,SAAS,MAAM,IAAI;IAC7C,IAAI,EAAE;QACF,YAAY,EAAE,CAAC,EAAE,CAAC;QAElB,SAAS,EAAE,MAAM,EAAE,CAAC;QACpB,UAAU,EAAE,MAAM,EAAE,CAAC;QACrB,UAAU,EAAE,MAAM,EAAE,CAAC;QAErB,KAAK,EAAE,MAAM,EAAE,CAAC;QAChB,KAAK,EAAE,MAAM,EAAE,CAAC;QAChB,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QACxC,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QAGxC,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QACzC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QAC1C,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QAE1C,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAChC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAChC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACrC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAErC,WAAW,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;QAEzC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;QACvD,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;KAC1D,CAAC;IAEF,MAAM,EAAE,MAAM,CACV,MAAM,EACN;QAEI,KAAK,EAAE,MAAM,EAAE,CAAC;QAChB,KAAK,EAAE,MAAM,EAAE,CAAC;QAEhB,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QACxC,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QAExC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KAClD,CACJ,CAAC;CACL,CAAC;AA8QF,wBAAgB,aAAa,CAAC,CAAC,SAAS,MAAM,EAC1C,MAAM,EAAE,gBAAgB,CAAC,CAAC,CAAC,EAC3B,IAAI,EAAE,SAAS,EACf,OAAO,EAAE,UAAU,EACnB,OAAO,EAAE,UAAU,EACnB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,EACxC,OAAO,EAAE,UAAU,EAAE,EACrB,QAAQ,EAAE,UAAU,EAAE,EACtB,QAAQ,EAAE,UAAU,EAAE,EACtB,aAAa,EAAE,mBAAmB,CAAC,eAAe,CAAC,EACnD,WAAW,EAAE,mBAAmB,CAAC,aAAa,CAAC,EAC/C,WAAW,EAAE,mBAAmB,CAAC,aAAa,CAAC,EAC/C,WAAW,EAAE,mBAAmB,CAAC,aAAa,CAAC,EAC/C,qBAAqB,EAAE,MAAM,CAAC,CAAC,EAAE,mBAAmB,CAAC,eAAe,CAAC,CAAC,EAAE,2CAA2C;AACnH,SAAS,EAAE,mBAAmB,CAAC,WAAW,CAAC,EAC3C,SAAS,EAAE,mBAAmB,CAAC,WAAW,CAAC,EAC3C,KAAK,EAAE,mBAAmB,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,GAAG,kBAAkB,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,EACnG,KAAK,EAAE,mBAAmB,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,GAAG,kBAAkB,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,EACnG,WAAW,EAAE,mBAAmB,CAAC,aAAa,CAAC,uBA8NlD"}
1
+ {"version":3,"file":"fillCellsData.d.ts","sourceRoot":"","sources":["../../src/heatmap/fillCellsData.ts"],"names":[],"mappings":"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"}
@@ -141,67 +141,80 @@ function y(e, t) {
141
141
  };
142
142
  }
143
143
  }
144
- function b(e, a, o, s, c, l, u, d, f, p, m, b, x, S, C, w, T, E) {
145
- let D = l.length ? l.map((e) => C[e.value] ?? a.getColumnCategories(e.value)) : [["null"]], O = u.length ? u.map((e) => C[e.value] ?? a.getColumnCategories(e.value)) : [["null"]], k = d.length ? d.map((e) => C[e.value] ?? a.getColumnCategories(e.value)) : [["null"]], A = h(D), j = h(O), M = h(k);
146
- f?.order?.length && (A = A.filter((e) => f.order?.includes(t(e))));
147
- let N = A.map(r), P = new Set(N), F = j.map(r), I = M.map(r);
148
- e.meta.facetKeys = N, e.meta.xGroupKeys = F, e.meta.yGroupKeys = I;
149
- let L = n(a, l, N, A);
150
- e.meta.facetKeyValues = N.reduce((e, t) => (e[t] = L[t], e), {}), e.meta.xGroupKeyValues = F.reduce((e, t, n) => (e[t] = j[n], e), {}), e.meta.yGroupKeyValues = I.reduce((e, t, n) => (e[t] = M[n], e), {});
151
- let R = o.valueLabels ?? o.value, z = s.valueLabels ?? s.value, B = p.filter((e) => e.axis === "x").map((e) => e.valueColumn.valueLabels ?? e.valueColumn.value), V = p.filter((e) => e.axis === "y").map((e) => e.valueColumn.valueLabels ?? e.valueColumn.value), H = Object.values(m ?? {}).map((e) => e.value), U = Object.values(b ?? {}).map((e) => e.value), W = i.uniq([
152
- ...B,
144
+ function b(e, { data: a, xColumn: o, yColumn: s, valueColumns: c, facetBy: l, xGroupBy: u, yGroupBy: d, facetSettings: f, annotations: p, dendrogramX: m, dendrogramY: b, normalizationBySource: x, NAValueAs: S, keysOrder: C, xAxis: w, yAxis: T, aggregation: E, showEmptyRows: D = !1, showEmptyColumns: O = !1 }) {
145
+ let k = l.length ? l.map((e) => C[e.value] ?? a.getColumnCategories(e.value)) : [["null"]], A = u.length ? u.map((e) => C[e.value] ?? a.getColumnCategories(e.value)) : [["null"]], j = d.length ? d.map((e) => C[e.value] ?? a.getColumnCategories(e.value)) : [["null"]], M = h(k), N = h(A), P = h(j);
146
+ f?.order?.length && (M = M.filter((e) => f.order?.includes(t(e))));
147
+ let F = M.map(r), I = new Set(F), L = N.map(r), R = P.map(r);
148
+ e.meta.facetKeys = F, e.meta.xGroupKeys = L, e.meta.yGroupKeys = R;
149
+ let z = n(a, l, F, M);
150
+ e.meta.facetKeyValues = F.reduce((e, t) => (e[t] = z[t], e), {}), e.meta.xGroupKeyValues = L.reduce((e, t, n) => (e[t] = N[n], e), {}), e.meta.yGroupKeyValues = R.reduce((e, t, n) => (e[t] = P[n], e), {});
151
+ let B = o.valueLabels ?? o.value, V = s.valueLabels ?? s.value, H = p.filter((e) => e.axis === "x").map((e) => e.valueColumn.valueLabels ?? e.valueColumn.value), U = p.filter((e) => e.axis === "y").map((e) => e.valueColumn.valueLabels ?? e.valueColumn.value), W = Object.values(m ?? {}).map((e) => e.value), G = Object.values(b ?? {}).map((e) => e.value), K = i.uniq([
153
152
  ...H,
154
- R
155
- ]), G = i.uniq([
156
- ...V,
153
+ ...W,
154
+ B
155
+ ]), q = i.uniq([
157
156
  ...U,
158
- z
157
+ ...G,
158
+ V
159
159
  ]);
160
160
  for (let t = 0; t < a.rowsCount; t++) {
161
161
  let n = r(l.map((e) => a.getColumnValue(e.value, t)));
162
- if (!P.has(n)) continue;
162
+ if (!I.has(n)) continue;
163
163
  let i = r(u.map((e) => a.getColumnValue(e.value, t))), f = r(d.map((e) => a.getColumnValue(e.value, t))), p = u.map((e) => a.getColumnValue(e.valueLabels ?? e.value, t)).join(", "), m = d.map((e) => a.getColumnValue(e.valueLabels ?? e.value, t)).join(", ");
164
164
  e.meta.xGroupLabels[i] = p, e.meta.yGroupLabels[f] = m;
165
165
  let h = String(a.getColumnValue(o.value, t)), g = String(a.getColumnValue(s.value, t)), _ = e.meta.valueSources.reduce((e, n) => (e[n] = a.getColumnValue(c[n].value, t) ?? S, e), {});
166
- if (h === "null" || g === "null" || Object.values(_).every((e) => e === null)) continue;
167
- e.facets[n] || (e.facets[n] = {
168
- xKeys: [],
169
- yKeys: [],
170
- xKeysByGroups: {},
171
- yKeysByGroups: {},
172
- cells: {}
173
- }), e.facets[n].xKeysByGroups[i] || (e.facets[n].xKeysByGroups[i] = []), e.facets[n].yKeysByGroups[f] || (e.facets[n].yKeysByGroups[f] = []), e.facets[n].xKeys.push(h), e.facets[n].yKeys.push(g), e.facets[n].xKeysByGroups[i].push(h), e.facets[n].yKeysByGroups[f].push(g), e.facets[n].cells[h] || (e.facets[n].cells[h] = {});
174
- for (let t of e.meta.valueSources) if (e.facets[n].cells[h][g] && e.facets[n].cells[h][g].value[t] !== _[t]) throw Error(`More than 1 value for x=${h}, y=${g}`);
175
- let y = a.getColumnValue(R, t);
176
- if (e.meta.xLabels[h] && String(y) !== e.meta.xLabels[h]) throw Error(`More than 1 x-label value for x=${h}`);
177
- let b = a.getColumnValue(z, t);
178
- if (e.meta.yLabels[g] && String(b) !== e.meta.yLabels[g]) throw Error(`More than 1 y-label value for y=${g}`);
179
- e.meta.xLabels[h] = String(y), e.meta.yLabels[g] = String(b), W.forEach((n) => {
180
- let r = e.meta.xDataByKeys[n] !== void 0, i = r && e.meta.xDataByKeys[n][h] !== void 0;
181
- if (r || (e.meta.xDataByKeys[n] = {}), i && e.meta.xDataByKeys[n][h] !== a.getColumnValue(n, t)) throw Error(`More than 1 value for x = ${h} and column = ${n}`);
182
- i || (e.meta.xDataByKeys[n][h] = a.getColumnValue(n, t));
183
- }), G.forEach((n) => {
184
- let r = e.meta.yDataByKeys[n] !== void 0, i = r && e.meta.yDataByKeys[n][g] !== void 0;
185
- if (r || (e.meta.yDataByKeys[n] = {}), i && e.meta.yDataByKeys[n][g] !== a.getColumnValue(n, t)) throw Error(`More than 1 value for y = ${g} and column = ${n}`);
186
- i || (e.meta.yDataByKeys[n][g] = a.getColumnValue(n, t));
187
- }), e.facets[n].cells[h][g] = {
188
- isCell: !0,
189
- idx: t,
190
- id: `${h}_${g}`,
191
- x: h,
192
- y: g,
193
- value: _,
194
- normalizedValue: _
195
- }, v(e, e.facets[n].cells[h][g]);
166
+ if (h === "null" || g === "null") continue;
167
+ let y = Object.values(_).every((e) => e === null);
168
+ if (!(y && !D && !O)) {
169
+ if (e.facets[n] || (e.facets[n] = {
170
+ xKeys: [],
171
+ yKeys: [],
172
+ xKeysByGroups: {},
173
+ yKeysByGroups: {},
174
+ cells: {}
175
+ }), e.facets[n].xKeysByGroups[i] || (e.facets[n].xKeysByGroups[i] = []), e.facets[n].yKeysByGroups[f] || (e.facets[n].yKeysByGroups[f] = []), !y || O) {
176
+ e.facets[n].xKeys.push(h), e.facets[n].xKeysByGroups[i].push(h);
177
+ let r = a.getColumnValue(B, t);
178
+ if (e.meta.xLabels[h] && String(r) !== e.meta.xLabels[h]) throw Error(`More than 1 x-label value for x=${h}`);
179
+ e.meta.xLabels[h] = String(r), K.forEach((n) => {
180
+ let r = e.meta.xDataByKeys[n] !== void 0, i = r && e.meta.xDataByKeys[n][h] !== void 0;
181
+ if (r || (e.meta.xDataByKeys[n] = {}), i && e.meta.xDataByKeys[n][h] !== a.getColumnValue(n, t)) throw Error(`More than 1 value for x = ${h} and column = ${n}`);
182
+ i || (e.meta.xDataByKeys[n][h] = a.getColumnValue(n, t));
183
+ });
184
+ }
185
+ if (!y || D) {
186
+ e.facets[n].yKeys.push(g), e.facets[n].yKeysByGroups[f].push(g);
187
+ let r = a.getColumnValue(V, t);
188
+ if (e.meta.yLabels[g] && String(r) !== e.meta.yLabels[g]) throw Error(`More than 1 y-label value for y=${g}`);
189
+ e.meta.yLabels[g] = String(r), q.forEach((n) => {
190
+ let r = e.meta.yDataByKeys[n] !== void 0, i = r && e.meta.yDataByKeys[n][g] !== void 0;
191
+ if (r || (e.meta.yDataByKeys[n] = {}), i && e.meta.yDataByKeys[n][g] !== a.getColumnValue(n, t)) throw Error(`More than 1 value for y = ${g} and column = ${n}`);
192
+ i || (e.meta.yDataByKeys[n][g] = a.getColumnValue(n, t));
193
+ });
194
+ }
195
+ if (!y) {
196
+ e.facets[n].cells[h] || (e.facets[n].cells[h] = {});
197
+ for (let t of e.meta.valueSources) if (e.facets[n].cells[h][g] && e.facets[n].cells[h][g].value[t] !== _[t]) throw Error(`More than 1 value for x=${h}, y=${g}`);
198
+ e.facets[n].cells[h][g] = {
199
+ isCell: !0,
200
+ idx: t,
201
+ id: `${h}_${g}`,
202
+ x: h,
203
+ y: g,
204
+ value: _,
205
+ normalizedValue: _
206
+ }, v(e, e.facets[n].cells[h][g]);
207
+ }
208
+ }
196
209
  }
197
210
  e.meta.facetKeys = e.meta.facetKeys.filter((t) => e.facets[t]), e.meta.facetKeys.forEach((t) => {
198
211
  let n = e.facets[t], r = i.uniq(n.xKeys), a = i.uniq(n.yKeys);
199
- n.xKeys = C[o.value] ? i.intersection(C[o.value], r) : r, n.yKeys = C[s.value] ? i.intersection(C[s.value], a) : a, F.forEach((r) => {
212
+ n.xKeys = C[o.value] ? i.intersection(C[o.value], r) : r, n.yKeys = C[s.value] ? i.intersection(C[s.value], a) : a, L.forEach((r) => {
200
213
  e.facets[t].xKeysByGroups[r] = i.intersection(n.xKeys, e.facets[t].xKeysByGroups[r]);
201
- }), I.forEach((r) => {
214
+ }), R.forEach((r) => {
202
215
  e.facets[t].yKeysByGroups[r] = i.intersection(n.yKeys, e.facets[t].yKeysByGroups[r]);
203
216
  });
204
- }), _(e, E, W, G, p), y(e, x), e.meta.xKeysByGroups = e.meta.xGroupKeys.reduce((t, n) => {
217
+ }), _(e, E, K, q, p), y(e, x), e.meta.xKeysByGroups = e.meta.xGroupKeys.reduce((t, n) => {
205
218
  let r = g(i.uniq(i.flatten(e.meta.facetKeys.map((t) => e.facets[t].xKeysByGroups[n]))), w.sorting, e.meta.xLabels);
206
219
  return t[n] = C[o.value] ? i.intersection(C[o.value], r) : r, t;
207
220
  }, {}), e.meta.xKeys = e.meta.xGroupKeys.reduce((t, n) => (t = t.concat(e.meta.xKeysByGroups[n]), t), []), e.meta.yKeysByGroups = e.meta.yGroupKeys.reduce((t, n) => {
@@ -1 +1 @@
1
- {"version":3,"file":"fillCellsData.js","names":[],"sources":["../../src/heatmap/fillCellsData.ts"],"sourcesContent":["import { deviation, extent, mean, quantileSorted, sum } 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';\nimport { getFacetLabels } from '../discrete/utils/getFacetLabels';\nimport { getFacetStringKey } from '../discrete/utils/getFacetStringKey';\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 case 'sum': {\n return sum(values) as number;\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 facetSettings: HeatmapSettingsImpl['facetSettings'],\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\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 let facetKeysCombinations = getKeysCombinations(facetKeysLists);\n const xGroupKeysCombinations = getKeysCombinations(xGroupKeysLists);\n const yGroupKeysCombinations = getKeysCombinations(yGroupKeysLists);\n\n if (facetSettings?.order?.length) {\n facetKeysCombinations = facetKeysCombinations.filter(keys => facetSettings.order?.includes(getFacetStringKey(keys)));\n }\n const facetKeys = facetKeysCombinations.map(getFacetOrGroupKey);\n const facetKeysSet = new Set(facetKeys);\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\n const facetLabels = getFacetLabels(data, facetBy, facetKeys, facetKeysCombinations);\n result.meta.facetKeyValues = facetKeys.reduce((res: Record<string, string[]>, key) => {\n res[key] = facetLabels[key];\n return res;\n }, {});\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 if (!facetKeysSet.has(facetKey)) {\n continue;\n }\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 result.meta.xLabels['null'] = xColumn.nullValueLabel ?? 'NA';\n result.meta.yLabels['null'] = yColumn.nullValueLabel ?? 'NA';\n result.meta.xGroupLabels['null'] = xGroupBy.map(column => column.nullValueLabel ?? 'NA').join(', ');\n result.meta.yGroupLabels['null'] = yGroupBy.map(column => column.nullValueLabel ?? 'NA').join(', ');\n return result;\n}"],"mappings":";;;;;;AAiEA,SAAS,EAAe,GAAkB;CACtC,IAAM,IAAW,EAAU,EAAO,EAC5B,IAAY,EAAK,EAAO;AAK9B,QAHI,MAAa,KAAA,KAAa,MAAc,KAAA,KAAa,MAAa,KAC1D,MAAc,KAElB,OAAe,IAAI,KAAa;;AAE5C,SAAS,EAAkB,GAAkB;CACzC,IAAM,IAAY,EAAK,EAAO,EACxB,CAAC,GAAK,KAAO,EAAO,EAAO;AAIjC,QAHI,MAAc,KAAA,KAAa,MAAQ,KAAA,KAAa,MAAQ,KAAA,KAAa,MAAQ,KACrE,MAAc,KAElB,OAAe,IAAI,MAAc,IAAM;;AAGnD,SAAS,EAAmB,GAA6B,GAAkB;AAOvE,QANI,MAAW,oBACJ,EAAe,EAAO,GAE7B,MAAW,sBACJ,EAAkB,EAAO,IAE5B,MAAc;;AAG1B,SAAS,EAAiB,GAA2B,GAAkB;AACnE,SAAQ,GAAR;EACI,KAAK,OAAO;GACR,IAAI,IAAM,EAAO;AACjB,QAAK,IAAM,KAAK,EACZ,KAAM,KAAK,IAAI,GAAK,EAAE;AAE1B,UAAO;;EAEX,KAAK,OAAO;GACR,IAAI,IAAM,EAAO;AACjB,QAAK,IAAM,KAAK,EACZ,KAAM,KAAK,IAAI,GAAK,EAAE;AAE1B,UAAO;;EAEX,KAAK,SAED,QAAO,EADc,EAAO,MAAM,GAAG,MAAM,IAAI,EAAE,EACb,GAAI;EAE5C,KAAK,OACD,QAAO,EAAK,EAAO,IAAI,EAAO;EAElC,KAAK,MACD,QAAO,EAAI,EAAO;EAEtB,QAAS,GAAW,GAAQ,gCAAgC,IAAS;;;AAG7E,SAAS,EAAgB,GAAkB;CACvC,IAAM,IAAO,CAAC,GAAG,IAAI,IAAI,EAAO,CAAC,CAAC,MAAM;AAIxC,QAHI,EAAK,SAAS,IACP,CAAC,GAAG,EAAK,MAAM,GAAG,EAAE,EAAE,MAAM,CAAC,KAAK,KAAK,GAE3C,EAAK,KAAK,KAAK;;AAI1B,SAAS,EAAoB,GAAuB;AAChD,KAAI,CAAC,EAAU,OACX,QAAO,EAAE;CAEb,IAAI,IAAqB,CAAC,EAAE,CAAC;AAQ7B,QAPA,EAAU,SAAQ,MAAQ;EACtB,IAAM,IAAyB,EAAE;AAIjC,EAHA,EAAK,SAAQ,MAAO;AAChB,KAAW,KAAK,GAAG,EAAO,KAAI,MAAc,CAAC,GAAG,GAAY,EAAI,CAAC,CAAC;IACpE,EACF,IAAS;GACX,EACK;;AAEX,IAAM,KAAgB,GAAe,GAA2B,IAAiC,EAAE,KACxF,EAAI,MAAM,GAAG,MAAM,MAAc,SACjC,EAAO,MAAM,GAAG,cAAe,EAAO,MAAM,GAAI,MAAM,EAAE,SAAS,IAAM,CAAC,IACxE,EAAO,MAAM,GAAG,cAAe,EAAO,MAAM,GAAI,MAAM,EAAE,SAAS,IAAM,CAAC,CAC9E;AAEL,SAAS,EACL,GACA,GACA,GACA,GACA,GACF;AACE,KAAI,EAAY,KAAK,EAAY,GAAG;EAChC,IAAM,IAA0D,EAAO,KAAK,aAAa,QAAQ,GAAG,OAChG,EAAE,KAAO,CAAC,UAAU,UAAU,EACvB,IACR,EAAE,CAA+C;AA+GpD,EA9GA,EAAO,KAAK,UAAU,SAAQ,MAAY;GACtC,IAAM,EAAE,UAAO,UAAO,UAAO,kBAAe,qBAAkB,EAAO,OAAO,IACtE,IAAU,EAAY,IAAI,IAAgB,EAAM,QAAQ,GAAK,OAAW,EAAI,KAAQ,CAAC,EAAK,EAAS,IAAQ,EAAE,CAA6B,EAC1I,IAAU,EAAY,IAAI,IAAgB,EAAM,QAAQ,GAAK,OAAW,EAAI,KAAQ,CAAC,EAAK,EAAS,IAAQ,EAAE,CAA6B,EAC1I,IAAW,OAAO,KAAK,EAAQ,EAC/B,IAAW,OAAO,KAAK,EAAQ;AAErC,QAAK,IAAM,KAAa,EACpB,MAAK,IAAM,KAAa,GAAU;IAE9B,IAAM,IAAuC,EAAO,KAAK,aAAa,QAAQ,GAAG,OAC7E,EAAE,KAAK,EAAE,EACF,IACR,EAAE,CAAwB;AAC7B,MAAQ,GAAW,SAAS,MAAS;AACjC,OAAQ,GAAW,SAAS,MAAS;AACjC,WAAK,IAAM,KAAe,EAAO,KAAK,cAAc;OAChD,IAAM,IAAY,EAAM,KAAQ,IAAO,QAAQ;AAC/C,OAAI,MAAc,KAAA,KACd,EAAgB,GAAa,KAAK,EAAoB;;AAG9D,aAAO,EAAM,KAAQ;OACvB;MACJ;AAEF,SAAK,IAAM,KAAe,EAAO,KAAK,cAAc;KAChD,IAAM,IAAS,EAAgB;AAC/B,SAAI,EAAO,SAAS,GAAG;MACnB,IAAM,IAAQ,EAAiB,EAAY,QAAQ,EAAO;AAI1D,MAHK,EAAO,OAAO,GAAU,MAAM,OAC/B,EAAO,OAAO,GAAU,MAAM,KAAa,EAAE,GAE5C,EAAO,OAAO,GAAU,MAAM,GAAW,OAC1C,EAAO,OAAO,GAAU,MAAM,GAAW,KAAa;OAClD,QAAQ;OACR,KAAK;OACL,IAAI,GAAG,EAAU,GAAG;OACpB,GAAG;OACH,GAAG;OACH,OAAO,EAAO,KAAK,aAAa,QAAQ,GAAG,OAAQ,EAAE,KAAK,MAAa,IAAM,EAAE,CAAyB;OACxG,iBAAiB,EAAO,KAAK,aAAa,QAAQ,GAAG,OAAQ,EAAE,KAAK,MAAa,IAAM,EAAE,CAAyB;OACrH;MAEL,IAAM,IAAO,EAAO,OAAO,GAAU,MAAM,GAAW;AAKtD,MAJA,EAAK,MAAM,KAAe,GAC1B,EAAK,gBAAgB,KAAe,GAEpC,EAAY,GAAa,KAAK,KAAK,IAAI,EAAK,kBAAkB,IAAc,EAAY,GAAa,GAAG,EACxG,EAAY,GAAa,KAAK,KAAK,IAAI,EAAK,kBAAkB,IAAc,EAAY,GAAa,GAAG;;;;AAqDxH,GA/CI,EAAY,KACZ,EAAS,SAAQ,MAAa;AAC1B,MAAuB,SAAQ,MAAa;KACxC,IAAM,IAAa,EAAY,MAAM,MAAM,EAAE,YAAY,UAAU,KAAa,EAAE,YAAY,gBAAgB,EAAU;AACxH,SAAI,CAAC,EACD;KAEJ,IAAM,IAAsB,EAAE;AAC9B,OAAQ,GAAW,SAAS,MAAS;AAEjC,MADA,EAAO,KAAK,EAAO,KAAK,YAAY,GAAW,GAAM,EACrD,OAAO,EAAO,KAAK,YAAY,GAAW;OAC5C;KACF,IAAM,IAAQ,EAAW,SAAS,eAAe,EAAiB,EAAY,QAAQ,EAAmB,GAAG,EAAgB,EAAmB;AAC/I,OAAO,KAAK,YAAY,GAAW,KAAa;MAClD;KACJ,EAGF,EAAY,MACZ,EAAuB,SAAQ,MAAa;AACxC,MAAO,KAAK,YAAY,KAAa,EAAE;KACzC,EACF,EAAS,SAAQ,MAAa;AAC1B,MAAuB,SAAQ,MAAa;KACxC,IAAM,IAAa,EAAY,MAAM,MAAM,EAAE,YAAY,UAAU,KAAa,EAAE,YAAY,gBAAgB,EAAU;AACxH,SAAI,CAAC,EACD;KAEJ,IAAM,IAAsB,EAAE;AAC9B,OAAQ,GAAW,SAAS,MAAS;AAEjC,MADA,EAAO,KAAK,EAAO,KAAK,YAAY,GAAW,GAAM,EACrD,OAAO,EAAO,KAAK,YAAY,GAAW;OAC5C;KACF,IAAM,IAAQ,EAAW,SAAS,eAAe,EAAiB,EAAY,QAAQ,EAAmB,GAAG,EAAgB,EAAmB;AAC/I,OAAO,KAAK,YAAY,GAAW,KAAa;MAClD;KACJ,GAIF,EAAY,MACZ,EAAO,OAAO,GAAU,QAAQ,OAAO,KAAK,EAAc,EAC1D,EAAO,OAAO,GAAU,gBAAgB,EAAE,MAAQ,EAAO,OAAO,GAAU,OAAO,EACjF,EAAO,KAAK,UAAU,EAAO,KAAK,cAClC,EAAO,KAAK,aAAa,CAAC,OAAO,EACjC,EAAO,KAAK,kBAAkB,EAAE,MAAM,CAAC,OAAO,EAAE,GAEhD,EAAY,MACZ,EAAO,OAAO,GAAU,QAAQ,OAAO,KAAK,EAAc,EAC1D,EAAO,OAAO,GAAU,gBAAgB,EAAE,MAAQ,EAAO,OAAO,GAAU,OAAO,EACjF,EAAO,KAAK,UAAU,EAAO,KAAK,cAClC,EAAO,KAAK,aAAa,CAAC,OAAO,EACjC,EAAO,KAAK,kBAAkB,EAAE,MAAM,CAAC,OAAO,EAAE;IAEtD,EACF,EAAO,KAAK,cAAc;;;AAIlC,SAAS,EAAoC,GAA6B,GAAe;AACrF,MAAK,IAAM,KAAe,EAAO,KAAK,aAElC,CADA,EAAO,KAAK,YAAY,GAAa,KAAK,KAAK,IAAI,EAAK,kBAAkB,IAAwB,EAAO,KAAK,YAAY,GAAa,GAAG,EAC1I,EAAO,KAAK,YAAY,GAAa,KAAK,KAAK,IAAI,EAAK,kBAAkB,IAAwB,EAAO,KAAK,YAAY,GAAa,GAAG;;AAIlJ,SAAS,EACL,GACA,GACF;AACE,KAAI,OAAO,OAAO,EAAuB,CAAC,QAAQ;EAC9C,IAAM,IAA0D,EAAO,KAAK,aAAa,QAAQ,GAAG,OAC5F,EAAuB,OACvB,EAAE,KAAO,CAAC,UAAU,UAAU,GAE3B,IACR,EAAE,CAA+C;AAmCpD,EAlCA,EAAO,KAAK,UAAU,SAAQ,MAAY;GACtC,IAAM,EAAE,UAAO,UAAO,aAAU,EAAO,OAAO;AAE9C,QAAK,IAAM,KAAe,EAAO,KAAK,cAAc;IAChD,IAAM,IAAgB,EAAuB;AAC7C,QAAI,CAAC,EACD;IAEJ,IAAM,IAAW,EAAc,cAAc,QAAQ,IAAQ,GACvD,IAAY,EAAc,cAAc,QAAQ,IAAQ,GACxD,IAAa,EAAc,cAAc,SACxC,GAAiB,MAAqB,EAAM,KAAW,MACvD,GAAiB,MAAqB,EAAM,KAAY;AAC/D,MAAU,SAAS,MAAa;KAC5B,IAAM,IAAmB,EAAE;AAC3B,OAAS,SAAS,MAAY;MAC1B,IAAM,IAAI,EAAW,GAAS,EAAS,EAAE,QAAQ;AACjD,MAAI,MAAM,KAAA,KACN,EAAO,KAAK,EAAY;OAE9B;KACF,IAAM,IAAY,EAAmB,EAAc,QAAQ,EAAO;AAClE,OAAS,SAAS,MAAY;MAC1B,IAAM,IAAO,EAAW,GAAS,EAAS;AAC1C,MAAI,MAAS,KAAA,MACT,EAAK,gBAAgB,KAAe,EAAU,EAAK,QAAQ,GAAuB,EAClF,EAAY,GAAa,KAAK,KAAK,IAAI,EAAK,kBAAkB,IAAc,EAAY,GAAa,GAAG,EACxG,EAAY,GAAa,KAAK,KAAK,IAAI,EAAK,kBAAkB,IAAc,EAAY,GAAa,GAAG;OAE9G;MACJ;;IAGR,EACF,EAAO,KAAK,cAAc;GAAC,GAAG,EAAO,KAAK;GAAa;GAAY;;;AAI3E,SAAgB,EACZ,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACF;CACE,IAAM,IAAiB,EAAQ,SACzB,EAAQ,KAAI,MAAU,EAAU,EAAO,UAAU,EAAK,oBAAoB,EAAO,MAAM,CAAC,GACxF,CAAC,CAAC,OAAO,CAAC,EAEV,IAAkB,EAAS,SAC3B,EAAS,KAAI,MAAU,EAAU,EAAO,UAAU,EAAK,oBAAoB,EAAO,MAAM,CAAC,GACzF,CAAC,CAAC,OAAO,CAAC,EACV,IAAkB,EAAS,SAC3B,EAAS,KAAI,MAAU,EAAU,EAAO,UAAU,EAAK,oBAAoB,EAAO,MAAM,CAAC,GACzF,CAAC,CAAC,OAAO,CAAC,EACZ,IAAwB,EAAoB,EAAe,EACzD,IAAyB,EAAoB,EAAgB,EAC7D,IAAyB,EAAoB,EAAgB;AAEnE,CAAI,GAAe,OAAO,WACtB,IAAwB,EAAsB,QAAO,MAAQ,EAAc,OAAO,SAAS,EAAkB,EAAK,CAAC,CAAC;CAExH,IAAM,IAAY,EAAsB,IAAI,EAAmB,EACzD,IAAe,IAAI,IAAI,EAAU,EACjC,IAAa,EAAuB,IAAI,EAAmB,EAC3D,IAAa,EAAuB,IAAI,EAAmB;AAIjE,CAFA,EAAO,KAAK,YAAY,GACxB,EAAO,KAAK,aAAa,GACzB,EAAO,KAAK,aAAa;CAEzB,IAAM,IAAc,EAAe,GAAM,GAAS,GAAW,EAAsB;AAUnF,CATA,EAAO,KAAK,iBAAiB,EAAU,QAAQ,GAA+B,OAC1E,EAAI,KAAO,EAAY,IAChB,IACR,EAAE,CAAC,EAEN,EAAO,KAAK,kBAAkB,EAAW,QAAQ,GAA+B,GAAK,OACjF,EAAI,KAAO,EAAuB,IAC3B,IACR,EAAE,CAAC,EACN,EAAO,KAAK,kBAAkB,EAAW,QAAQ,GAA+B,GAAK,OACjF,EAAI,KAAO,EAAuB,IAC3B,IACR,EAAE,CAAC;CAEN,IAAM,IAAgB,EAAQ,eAAe,EAAQ,OAC/C,IAAgB,EAAQ,eAAe,EAAQ,OAC/C,IAAqB,EAAY,QAAO,MAAQ,EAAK,SAAS,IAAI,CAAC,KAAI,MAAQ,EAAK,YAAY,eAAe,EAAK,YAAY,MAAM,EACtI,IAAqB,EAAY,QAAO,MAAQ,EAAK,SAAS,IAAI,CAAC,KAAI,MAAQ,EAAK,YAAY,eAAe,EAAK,YAAY,MAAM,EACtI,IAAqB,OAAO,OAAO,KAAe,EAAE,CAAC,CAAC,KAAI,MAAU,EAAO,MAAM,EACjF,IAAqB,OAAO,OAAO,KAAe,EAAE,CAAC,CAAC,KAAI,MAAU,EAAO,MAAM,EACjF,IAAyB,EAAO,KAAK;EAAC,GAAG;EAAoB,GAAG;EAAoB;EAAc,CAAC,EACnG,IAAyB,EAAO,KAAK;EAAC,GAAG;EAAoB,GAAG;EAAoB;EAAc,CAAC;AAEzG,MAAK,IAAI,IAAI,GAAG,IAAI,EAAK,WAAW,KAAK;EACrC,IAAM,IAAW,EAAmB,EAAQ,KAAI,MAAU,EAAK,eAAe,EAAO,OAAO,EAAE,CAAC,CAAC;AAChG,MAAI,CAAC,EAAa,IAAI,EAAS,CAC3B;EAEJ,IAAM,IAAY,EAAmB,EAAS,KAAI,MAAU,EAAK,eAAe,EAAO,OAAO,EAAE,CAAC,CAAC,EAC5F,IAAY,EAAmB,EAAS,KAAI,MAAU,EAAK,eAAe,EAAO,OAAO,EAAE,CAAC,CAAC,EAC5F,IAAc,EAAS,KAAI,MAAU,EAAK,eAAe,EAAO,eAAe,EAAO,OAAO,EAAE,CAAC,CAAC,KAAK,KAAK,EAC3G,IAAc,EAAS,KAAI,MAAU,EAAK,eAAe,EAAO,eAAe,EAAO,OAAO,EAAE,CAAC,CAAC,KAAK,KAAK;AAEjH,EADA,EAAO,KAAK,aAAa,KAAa,GACtC,EAAO,KAAK,aAAa,KAAa;EACtC,IAAM,IAAI,OAAO,EAAK,eAAe,EAAQ,OAAO,EAAE,CAAC,EACjD,IAAI,OAAO,EAAK,eAAe,EAAQ,OAAO,EAAE,CAAC,EAEjD,IAAS,EAAO,KAAK,aAAa,QAAQ,GAAG,OAC/C,EAAE,KAAQ,EAAK,eAAe,EAAa,GAAK,OAAO,EAAE,IAAI,GACtD,IACR,EAAE,CAA8B;AAEnC,MAAI,MAAM,UAAU,MAAM,UAAU,OAAO,OAAO,EAAO,CAAC,OAAM,MAAK,MAAM,KAAK,CAC5E;AAuBJ,EApBK,EAAO,OAAO,OACf,EAAO,OAAO,KAAY;GACtB,OAAO,EAAE;GACT,OAAO,EAAE;GACT,eAAe,EAAE;GACjB,eAAe,EAAE;GACjB,OAAO,EAAE;GACZ,GAEA,EAAO,OAAO,GAAU,cAAc,OACvC,EAAO,OAAO,GAAU,cAAc,KAAa,EAAE,GAEpD,EAAO,OAAO,GAAU,cAAc,OACvC,EAAO,OAAO,GAAU,cAAc,KAAa,EAAE,GAEzD,EAAO,OAAO,GAAU,MAAM,KAAK,EAAE,EACrC,EAAO,OAAO,GAAU,MAAM,KAAK,EAAE,EACrC,EAAO,OAAO,GAAU,cAAc,GAAW,KAAK,EAAE,EACxD,EAAO,OAAO,GAAU,cAAc,GAAW,KAAK,EAAE,EAEnD,EAAO,OAAO,GAAU,MAAM,OAC/B,EAAO,OAAO,GAAU,MAAM,KAAK,EAAE;AAGzC,OAAK,IAAM,KAAe,EAAO,KAAK,aAClC,KAAI,EAAO,OAAO,GAAU,MAAM,GAAG,MAAM,EAAO,OAAO,GAAU,MAAM,GAAG,GAAG,MAAM,OAAiB,EAAO,GACzG,OAAM,MAAM,2BAA2B,EAAE,MAAM,IAAI;EAI3D,IAAM,IAAqB,EAAK,eAAe,GAAe,EAAE;AAChE,MAAI,EAAO,KAAK,QAAQ,MAAM,OAAO,EAAmB,KAAK,EAAO,KAAK,QAAQ,GAC7E,OAAM,MAAM,mCAAmC,IAAI;EAEvD,IAAM,IAAqB,EAAK,eAAe,GAAe,EAAE;AAChE,MAAI,EAAO,KAAK,QAAQ,MAAM,OAAO,EAAmB,KAAK,EAAO,KAAK,QAAQ,GAC7E,OAAM,MAAM,mCAAmC,IAAI;AA0CvD,EAxCA,EAAO,KAAK,QAAQ,KAAK,OAAO,EAAmB,EACnD,EAAO,KAAK,QAAQ,KAAK,OAAO,EAAmB,EAEnD,EAAuB,SAAQ,MAAa;GACxC,IAAM,IAAuB,EAAO,KAAK,YAAY,OAAe,QAC9D,IAAe,KAAwB,EAAO,KAAK,YAAY,GAAW,OAAO;AAIvF,OAHK,MACD,EAAO,KAAK,YAAY,KAAa,EAAE,GAEvC,KAAgB,EAAO,KAAK,YAAY,GAAW,OAAO,EAAK,eAAe,GAAW,EAAE,CAC3F,OAAM,MAAM,6BAA6B,EAAE,gBAAgB,IAAY;AAE3E,GAAK,MACD,EAAO,KAAK,YAAY,GAAW,KAAK,EAAK,eAAe,GAAW,EAAE;IAE/E,EAEF,EAAuB,SAAQ,MAAa;GACxC,IAAM,IAAuB,EAAO,KAAK,YAAY,OAAe,QAC9D,IAAe,KAAwB,EAAO,KAAK,YAAY,GAAW,OAAO;AAIvF,OAHK,MACD,EAAO,KAAK,YAAY,KAAa,EAAE,GAEvC,KAAgB,EAAO,KAAK,YAAY,GAAW,OAAO,EAAK,eAAe,GAAW,EAAE,CAC3F,OAAM,MAAM,6BAA6B,EAAE,gBAAgB,IAAY;AAE3E,GAAK,MACD,EAAO,KAAK,YAAY,GAAW,KAAK,EAAK,eAAe,GAAW,EAAE;IAE/E,EACF,EAAO,OAAO,GAAU,MAAM,GAAG,KAAK;GAClC,QAAQ;GACR,KAAK;GACL,IAAI,GAAG,EAAE,GAAG;GACZ;GACA;GACA,OAAO;GACP,iBAAiB;GACpB,EAED,EAAkB,GAAQ,EAAO,OAAO,GAAU,MAAM,GAAG,GAAG;;AAiDlE,CA9CA,EAAO,KAAK,YAAY,EAAO,KAAK,UAAU,QAAQ,MAAQ,EAAO,OAAO,GAAK,EAGjF,EAAO,KAAK,UAAU,SAAQ,MAAY;EACtC,IAAM,IAAQ,EAAO,OAAO,IACtB,IAAc,EAAO,KAAK,EAAM,MAAM,EACtC,IAAc,EAAO,KAAK,EAAM,MAAM;AAS5C,EARA,EAAM,QAAQ,EAAU,EAAQ,SAAS,EAAO,aAAa,EAAU,EAAQ,QAAQ,EAAY,GAAG,GACtG,EAAM,QAAQ,EAAU,EAAQ,SAAS,EAAO,aAAa,EAAU,EAAQ,QAAQ,EAAY,GAAG,GACtG,EAAW,SAAQ,MAAa;AAC5B,KAAO,OAAO,GAAU,cAAc,KAAa,EAAO,aACtD,EAAM,OACN,EAAO,OAAO,GAAU,cAAc,GACzC;IACH,EACF,EAAW,SAAQ,MAAa;AAC5B,KAAO,OAAO,GAAU,cAAc,KAAa,EAAO,aACtD,EAAM,OACN,EAAO,OAAO,GAAU,cAAc,GACzC;IACH;GACJ,EAEF,EAAiB,GAAQ,GAAa,GAAwB,GAAwB,EAAY,EAClG,EAAmB,GAAQ,EAAsB,EAGjD,EAAO,KAAK,gBAAgB,EAAO,KAAK,WAAW,QAAQ,GAA+B,MAAc;EACpG,IAAM,IAAgB,EAAa,EAAO,KACtC,EAAO,QAAQ,EAAO,KAAK,UAAU,KAAI,MAAY,EAAO,OAAO,GAAU,cAAc,GAAW,CAAC,CAC1G,EAAE,EAAM,SAAS,EAAO,KAAK,QAAQ;AAEtC,SADA,EAAI,KAAa,EAAU,EAAQ,SAAS,EAAO,aAAa,EAAU,EAAQ,QAAQ,EAAc,GAAG,GACpG;IACR,EAAE,CAAC,EACN,EAAO,KAAK,QAAQ,EAAO,KAAK,WAAW,QAAQ,GAAe,OAC9D,IAAM,EAAI,OAAO,EAAO,KAAK,cAAc,GAAW,EAC/C,IACR,EAAE,CAAC,EAEN,EAAO,KAAK,gBAAgB,EAAO,KAAK,WAAW,QAAQ,GAA+B,MAAc;EACpG,IAAM,IAAgB,EAAa,EAAO,KACtC,EAAO,QAAQ,EAAO,KAAK,UAAU,KAAI,MAAY,EAAO,OAAO,GAAU,cAAc,GAAW,CAAC,CAC1G,EAAE,EAAM,SAAS,EAAO,KAAK,QAAQ;AAEtC,SADA,EAAI,KAAa,EAAU,EAAQ,SAAS,EAAO,aAAa,EAAU,EAAQ,QAAQ,EAAc,GAAG,GACpG;IACR,EAAE,CAAC,EACN,EAAO,KAAK,QAAQ,EAAO,KAAK,WAAW,QAAQ,GAAe,OAC9D,IAAM,EAAI,OAAO,EAAO,KAAK,cAAc,GAAW,EAC/C,IACR,EAAE,CAAC;AAEN,MAAK,IAAM,KAAe,EAAO,KAAK,aAKlC,CAHI,EAAO,KAAK,YAAY,GAAa,OAAO,aAC5C,EAAO,KAAK,YAAY,GAAa,KAAK,IAE1C,EAAO,KAAK,YAAY,GAAa,OAAO,cAC5C,EAAO,KAAK,YAAY,GAAa,KAAK;AAQlD,QAJA,EAAO,KAAK,QAAQ,OAAU,EAAQ,kBAAkB,MACxD,EAAO,KAAK,QAAQ,OAAU,EAAQ,kBAAkB,MACxD,EAAO,KAAK,aAAa,OAAU,EAAS,KAAI,MAAU,EAAO,kBAAkB,KAAK,CAAC,KAAK,KAAK,EACnG,EAAO,KAAK,aAAa,OAAU,EAAS,KAAI,MAAU,EAAO,kBAAkB,KAAK,CAAC,KAAK,KAAK,EAC5F"}
1
+ {"version":3,"file":"fillCellsData.js","names":[],"sources":["../../src/heatmap/fillCellsData.ts"],"sourcesContent":["import { deviation, extent, mean, quantileSorted, sum } 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';\nimport { getFacetLabels } from '../discrete/utils/getFacetLabels';\nimport { getFacetStringKey } from '../discrete/utils/getFacetStringKey';\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 case 'sum': {\n return sum(values) as number;\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 {\n data,\n xColumn,\n yColumn,\n valueColumns,\n facetBy,\n xGroupBy,\n yGroupBy,\n facetSettings,\n annotations,\n dendrogramX,\n dendrogramY,\n normalizationBySource, // separated for color and size for example\n NAValueAs,\n keysOrder,\n xAxis,\n yAxis,\n aggregation,\n showEmptyRows = false,\n showEmptyColumns = false,\n }: {\n data: DataFrame;\n xColumn: ColumnName;\n yColumn: ColumnName;\n valueColumns: Record<string, ColumnName>;\n facetBy: ColumnName[];\n xGroupBy: ColumnName[];\n yGroupBy: ColumnName[];\n facetSettings: HeatmapSettingsImpl['facetSettings'];\n annotations: HeatmapSettingsImpl['annotations'];\n dendrogramX: HeatmapSettingsImpl['dendrogramX'];\n dendrogramY: HeatmapSettingsImpl['dendrogramY'];\n normalizationBySource: Record<T, HeatmapSettingsImpl['normalization']>;\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 showEmptyRows?: boolean;\n showEmptyColumns?: boolean;\n }\n) {\n const facetKeysLists = facetBy.length\n ? facetBy.map(column => keysOrder[column.value] ?? data.getColumnCategories(column.value))\n : [['null']];\n\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 let facetKeysCombinations = getKeysCombinations(facetKeysLists);\n const xGroupKeysCombinations = getKeysCombinations(xGroupKeysLists);\n const yGroupKeysCombinations = getKeysCombinations(yGroupKeysLists);\n\n if (facetSettings?.order?.length) {\n facetKeysCombinations = facetKeysCombinations.filter(keys => facetSettings.order?.includes(getFacetStringKey(keys)));\n }\n const facetKeys = facetKeysCombinations.map(getFacetOrGroupKey);\n const facetKeysSet = new Set(facetKeys);\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\n const facetLabels = getFacetLabels(data, facetBy, facetKeys, facetKeysCombinations);\n result.meta.facetKeyValues = facetKeys.reduce((res: Record<string, string[]>, key) => {\n res[key] = facetLabels[key];\n return res;\n }, {});\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 if (!facetKeysSet.has(facetKey)) {\n continue;\n }\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') {\n continue;\n }\n\n const allValuesNull = Object.values(values).every(v => v === null);\n\n if (allValuesNull && !showEmptyRows && !showEmptyColumns) {\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\n if (!allValuesNull || showEmptyColumns) {\n result.facets[facetKey].xKeys.push(x);\n result.facets[facetKey].xKeysByGroups[xGroupKey].push(x);\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 result.meta.xLabels[x] = String(xLabelsSourceValue);\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 }\n\n if (!allValuesNull || showEmptyRows) {\n result.facets[facetKey].yKeys.push(y);\n result.facets[facetKey].yKeysByGroups[yGroupKey].push(y);\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.yLabels[y] = String(yLabelsSourceValue);\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 }\n\n if (allValuesNull) {\n continue;\n }\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 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 result.meta.xLabels['null'] = xColumn.nullValueLabel ?? 'NA';\n result.meta.yLabels['null'] = yColumn.nullValueLabel ?? 'NA';\n result.meta.xGroupLabels['null'] = xGroupBy.map(column => column.nullValueLabel ?? 'NA').join(', ');\n result.meta.yGroupLabels['null'] = yGroupBy.map(column => column.nullValueLabel ?? 'NA').join(', ');\n return result;\n}"],"mappings":"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"}
@@ -4,5 +4,26 @@ import { HeatmapSettingsImpl } from './HeatmapSettingsImpl';
4
4
  import { Cell, GroupedCellsData } from './fillCellsData';
5
5
  export type CellHeatmap = Cell<'dataSource'>;
6
6
  export type GroupedCellsHeatmap = GroupedCellsData<'dataSource'>;
7
- export declare function getCells(data: DataFrame, xColumn: ColumnName, yColumn: ColumnName, valueColumns: Record<string, ColumnName>, facetBy: ColumnName[], xGroupBy: ColumnName[], yGroupBy: ColumnName[], facetSettings: HeatmapSettingsImpl['facetSettings'], annotations: HeatmapSettingsImpl['annotations'], dendrogramX: HeatmapSettingsImpl['dendrogramX'], dendrogramY: HeatmapSettingsImpl['dendrogramY'], normalization: HeatmapSettingsImpl['normalization'], NAValueAs: HeatmapSettingsImpl['NAValueAs'], keysOrder: HeatmapSettingsImpl['keysOrder'], xAxis: HeatmapSettingsImpl['chartSettings']['xAxis'], yAxis: HeatmapSettingsImpl['chartSettings']['yAxis'], aggregation: HeatmapSettingsImpl['aggregation']): GroupedCellsHeatmap;
7
+ export declare function createEmptyGroupedCells(): GroupedCellsHeatmap;
8
+ export declare function getCells({ data, xColumn, yColumn, valueColumns, facetBy, xGroupBy, yGroupBy, facetSettings, annotations, dendrogramX, dendrogramY, normalization, NAValueAs, keysOrder, xAxis, yAxis, aggregation, showEmptyRows, showEmptyColumns, }: {
9
+ data: DataFrame;
10
+ xColumn: ColumnName;
11
+ yColumn: ColumnName;
12
+ valueColumns: Record<string, ColumnName>;
13
+ facetBy: ColumnName[];
14
+ xGroupBy: ColumnName[];
15
+ yGroupBy: ColumnName[];
16
+ facetSettings: HeatmapSettingsImpl['facetSettings'];
17
+ annotations: HeatmapSettingsImpl['annotations'];
18
+ dendrogramX: HeatmapSettingsImpl['dendrogramX'];
19
+ dendrogramY: HeatmapSettingsImpl['dendrogramY'];
20
+ normalization: HeatmapSettingsImpl['normalization'];
21
+ NAValueAs: HeatmapSettingsImpl['NAValueAs'];
22
+ keysOrder: HeatmapSettingsImpl['keysOrder'];
23
+ xAxis: HeatmapSettingsImpl['chartSettings']['xAxis'];
24
+ yAxis: HeatmapSettingsImpl['chartSettings']['yAxis'];
25
+ aggregation: HeatmapSettingsImpl['aggregation'];
26
+ showEmptyRows?: boolean;
27
+ showEmptyColumns?: boolean;
28
+ }): GroupedCellsHeatmap;
8
29
  //# sourceMappingURL=getCells.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"getCells.d.ts","sourceRoot":"","sources":["../../src/heatmap/getCells.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,KAAK,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAG9D,MAAM,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,CAAA;AAC5C,MAAM,MAAM,mBAAmB,GAAG,gBAAgB,CAAC,YAAY,CAAC,CAAC;AA4BjE,wBAAgB,QAAQ,CACpB,IAAI,EAAE,SAAS,EACf,OAAO,EAAE,UAAU,EACnB,OAAO,EAAE,UAAU,EACnB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,EACxC,OAAO,EAAE,UAAU,EAAE,EACrB,QAAQ,EAAE,UAAU,EAAE,EACtB,QAAQ,EAAE,UAAU,EAAE,EACtB,aAAa,EAAE,mBAAmB,CAAC,eAAe,CAAC,EACnD,WAAW,EAAE,mBAAmB,CAAC,aAAa,CAAC,EAC/C,WAAW,EAAE,mBAAmB,CAAC,aAAa,CAAC,EAC/C,WAAW,EAAE,mBAAmB,CAAC,aAAa,CAAC,EAC/C,aAAa,EAAE,mBAAmB,CAAC,eAAe,CAAC,EACnD,SAAS,EAAE,mBAAmB,CAAC,WAAW,CAAC,EAC3C,SAAS,EAAE,mBAAmB,CAAC,WAAW,CAAC,EAC3C,KAAK,EAAE,mBAAmB,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,EACpD,KAAK,EAAE,mBAAmB,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,EACpD,WAAW,EAAE,mBAAmB,CAAC,aAAa,CAAC,GAChD,mBAAmB,CAkBrB"}
1
+ {"version":3,"file":"getCells.d.ts","sourceRoot":"","sources":["../../src/heatmap/getCells.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,KAAK,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAG9D,MAAM,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,CAAA;AAC5C,MAAM,MAAM,mBAAmB,GAAG,gBAAgB,CAAC,YAAY,CAAC,CAAC;AAEjE,wBAAgB,uBAAuB,IAAI,mBAAmB,CAwB7D;AAED,wBAAgB,QAAQ,CAAC,EACrB,IAAI,EACJ,OAAO,EACP,OAAO,EACP,YAAY,EACZ,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,aAAa,EACb,WAAW,EACX,WAAW,EACX,WAAW,EACX,aAAa,EACb,SAAS,EACT,SAAS,EACT,KAAK,EACL,KAAK,EACL,WAAW,EACX,aAAqB,EACrB,gBAAwB,GAC3B,EAAE;IACC,IAAI,EAAE,SAAS,CAAC;IAChB,OAAO,EAAE,UAAU,CAAC;IACpB,OAAO,EAAE,UAAU,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACzC,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,QAAQ,EAAE,UAAU,EAAE,CAAC;IACvB,QAAQ,EAAE,UAAU,EAAE,CAAC;IACvB,aAAa,EAAE,mBAAmB,CAAC,eAAe,CAAC,CAAC;IACpD,WAAW,EAAE,mBAAmB,CAAC,aAAa,CAAC,CAAC;IAChD,WAAW,EAAE,mBAAmB,CAAC,aAAa,CAAC,CAAC;IAChD,WAAW,EAAE,mBAAmB,CAAC,aAAa,CAAC,CAAC;IAChD,aAAa,EAAE,mBAAmB,CAAC,eAAe,CAAC,CAAC;IACpD,SAAS,EAAE,mBAAmB,CAAC,WAAW,CAAC,CAAC;IAC5C,SAAS,EAAE,mBAAmB,CAAC,WAAW,CAAC,CAAC;IAC5C,KAAK,EAAE,mBAAmB,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,CAAC;IACrD,KAAK,EAAE,mBAAmB,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,CAAC;IACrD,WAAW,EAAE,mBAAmB,CAAC,aAAa,CAAC,CAAC;IAChD,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC9B,GAAG,mBAAmB,CAmBtB"}
@@ -24,9 +24,29 @@ function t() {
24
24
  facets: {}
25
25
  };
26
26
  }
27
- function n(n, r, i, a, o, s, c, l, u, d, f, p, m, h, g, _, v) {
28
- let y = t();
29
- return e(y, n, r, i, a, o, s, c, l, u, d, f, { dataSource: p }, m, h, g, _, v), y;
27
+ function n({ data: n, xColumn: r, yColumn: i, valueColumns: a, facetBy: o, xGroupBy: s, yGroupBy: c, facetSettings: l, annotations: u, dendrogramX: d, dendrogramY: f, normalization: p, NAValueAs: m, keysOrder: h, xAxis: g, yAxis: _, aggregation: v, showEmptyRows: y = !1, showEmptyColumns: b = !1 }) {
28
+ let x = t();
29
+ return e(x, {
30
+ data: n,
31
+ xColumn: r,
32
+ yColumn: i,
33
+ valueColumns: a,
34
+ facetBy: o,
35
+ xGroupBy: s,
36
+ yGroupBy: c,
37
+ facetSettings: l,
38
+ annotations: u,
39
+ dendrogramX: d,
40
+ dendrogramY: f,
41
+ normalizationBySource: { dataSource: p },
42
+ NAValueAs: m,
43
+ keysOrder: h,
44
+ xAxis: g,
45
+ yAxis: _,
46
+ aggregation: v,
47
+ showEmptyRows: y,
48
+ showEmptyColumns: b
49
+ }), x;
30
50
  }
31
51
  export { n as getCells };
32
52
 
@@ -1 +1 @@
1
- {"version":3,"file":"getCells.js","names":[],"sources":["../../src/heatmap/getCells.ts"],"sourcesContent":["import type { DataFrame } from '../DataFrame';\nimport type { ColumnName } from '../types';\nimport type { HeatmapSettingsImpl } from './HeatmapSettingsImpl';\nimport type { Cell, GroupedCellsData } from './fillCellsData';\nimport { fillCellsData } from './fillCellsData';\n\nexport type CellHeatmap = Cell<'dataSource'>\nexport type GroupedCellsHeatmap = GroupedCellsData<'dataSource'>;\n\nfunction createEmptyGroupedCells(): GroupedCellsHeatmap {\n return {\n meta: {\n valueSources: ['dataSource'],\n facetKeys: [],\n xKeys: [],\n yKeys: [],\n xGroupKeys: [],\n yGroupKeys: [],\n xKeysByGroups: {},\n yKeysByGroups: {},\n xLabels: {},\n yLabels: {},\n xGroupLabels: {},\n yGroupLabels: {},\n xDataByKeys: {},\n yDataByKeys: {},\n facetKeyValues: {},\n xGroupKeyValues: {},\n yGroupKeyValues: {},\n valueExtent: { dataSource: [Infinity, -Infinity] },\n },\n facets: {},\n };\n}\n\nexport function getCells(\n data: DataFrame,\n xColumn: ColumnName,\n yColumn: ColumnName,\n valueColumns: Record<string, ColumnName>,\n facetBy: ColumnName[],\n xGroupBy: ColumnName[],\n yGroupBy: ColumnName[],\n facetSettings: HeatmapSettingsImpl['facetSettings'],\n annotations: HeatmapSettingsImpl['annotations'],\n dendrogramX: HeatmapSettingsImpl['dendrogramX'],\n dendrogramY: HeatmapSettingsImpl['dendrogramY'],\n normalization: HeatmapSettingsImpl['normalization'],\n NAValueAs: HeatmapSettingsImpl['NAValueAs'],\n keysOrder: HeatmapSettingsImpl['keysOrder'],\n xAxis: HeatmapSettingsImpl['chartSettings']['xAxis'],\n yAxis: HeatmapSettingsImpl['chartSettings']['yAxis'],\n aggregation: HeatmapSettingsImpl['aggregation'],\n): GroupedCellsHeatmap {\n const result: GroupedCellsHeatmap = createEmptyGroupedCells();\n fillCellsData(\n result,\n data,\n xColumn, yColumn, valueColumns,\n facetBy, xGroupBy, yGroupBy,\n facetSettings,\n annotations,\n dendrogramX, dendrogramY,\n {dataSource: normalization},\n NAValueAs,\n keysOrder,\n xAxis,\n yAxis,\n aggregation\n );\n return result;\n}\n"],"mappings":";AASA,SAAS,IAA+C;AACpD,QAAO;EACH,MAAM;GACF,cAAc,CAAC,aAAa;GAC5B,WAAW,EAAE;GACb,OAAO,EAAE;GACT,OAAO,EAAE;GACT,YAAY,EAAE;GACd,YAAY,EAAE;GACd,eAAe,EAAE;GACjB,eAAe,EAAE;GACjB,SAAS,EAAE;GACX,SAAS,EAAE;GACX,cAAc,EAAE;GAChB,cAAc,EAAE;GAChB,aAAa,EAAE;GACf,aAAa,EAAE;GACf,gBAAgB,EAAE;GAClB,iBAAiB,EAAE;GACnB,iBAAiB,EAAE;GACnB,aAAa,EAAE,YAAY,CAAC,UAAU,UAAU,EAAE;GACrD;EACD,QAAQ,EAAE;EACb;;AAGL,SAAgB,EACZ,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACmB;CACnB,IAAM,IAA8B,GAAyB;AAgB7D,QAfA,EACI,GACA,GACA,GAAS,GAAS,GAClB,GAAS,GAAU,GACnB,GACA,GACA,GAAa,GACb,EAAC,YAAY,GAAc,EAC3B,GACA,GACA,GACA,GACA,EACH,EACM"}
1
+ {"version":3,"file":"getCells.js","names":[],"sources":["../../src/heatmap/getCells.ts"],"sourcesContent":["import type { DataFrame } from '../DataFrame';\nimport type { ColumnName } from '../types';\nimport type { HeatmapSettingsImpl } from './HeatmapSettingsImpl';\nimport type { Cell, GroupedCellsData } from './fillCellsData';\nimport { fillCellsData } from './fillCellsData';\n\nexport type CellHeatmap = Cell<'dataSource'>\nexport type GroupedCellsHeatmap = GroupedCellsData<'dataSource'>;\n\nexport function createEmptyGroupedCells(): GroupedCellsHeatmap {\n return {\n meta: {\n valueSources: ['dataSource'],\n facetKeys: [],\n xKeys: [],\n yKeys: [],\n xGroupKeys: [],\n yGroupKeys: [],\n xKeysByGroups: {},\n yKeysByGroups: {},\n xLabels: {},\n yLabels: {},\n xGroupLabels: {},\n yGroupLabels: {},\n xDataByKeys: {},\n yDataByKeys: {},\n facetKeyValues: {},\n xGroupKeyValues: {},\n yGroupKeyValues: {},\n valueExtent: { dataSource: [Infinity, -Infinity] },\n },\n facets: {},\n };\n}\n\nexport function getCells({\n data,\n xColumn,\n yColumn,\n valueColumns,\n facetBy,\n xGroupBy,\n yGroupBy,\n facetSettings,\n annotations,\n dendrogramX,\n dendrogramY,\n normalization,\n NAValueAs,\n keysOrder,\n xAxis,\n yAxis,\n aggregation,\n showEmptyRows = false,\n showEmptyColumns = false,\n}: {\n data: DataFrame;\n xColumn: ColumnName;\n yColumn: ColumnName;\n valueColumns: Record<string, ColumnName>;\n facetBy: ColumnName[];\n xGroupBy: ColumnName[];\n yGroupBy: ColumnName[];\n facetSettings: HeatmapSettingsImpl['facetSettings'];\n annotations: HeatmapSettingsImpl['annotations'];\n dendrogramX: HeatmapSettingsImpl['dendrogramX'];\n dendrogramY: HeatmapSettingsImpl['dendrogramY'];\n normalization: HeatmapSettingsImpl['normalization'];\n NAValueAs: HeatmapSettingsImpl['NAValueAs'];\n keysOrder: HeatmapSettingsImpl['keysOrder'];\n xAxis: HeatmapSettingsImpl['chartSettings']['xAxis'];\n yAxis: HeatmapSettingsImpl['chartSettings']['yAxis'];\n aggregation: HeatmapSettingsImpl['aggregation'];\n showEmptyRows?: boolean;\n showEmptyColumns?: boolean;\n}): GroupedCellsHeatmap {\n const result: GroupedCellsHeatmap = createEmptyGroupedCells();\n fillCellsData(result, {\n data,\n xColumn, yColumn, valueColumns,\n facetBy, xGroupBy, yGroupBy,\n facetSettings,\n annotations,\n dendrogramX, dendrogramY,\n normalizationBySource: { dataSource: normalization },\n NAValueAs,\n keysOrder,\n xAxis,\n yAxis,\n aggregation,\n showEmptyRows,\n showEmptyColumns,\n });\n return result;\n}\n"],"mappings":";AASA,SAAgB,IAA+C;AAC3D,QAAO;EACH,MAAM;GACF,cAAc,CAAC,aAAa;GAC5B,WAAW,EAAE;GACb,OAAO,EAAE;GACT,OAAO,EAAE;GACT,YAAY,EAAE;GACd,YAAY,EAAE;GACd,eAAe,EAAE;GACjB,eAAe,EAAE;GACjB,SAAS,EAAE;GACX,SAAS,EAAE;GACX,cAAc,EAAE;GAChB,cAAc,EAAE;GAChB,aAAa,EAAE;GACf,aAAa,EAAE;GACf,gBAAgB,EAAE;GAClB,iBAAiB,EAAE;GACnB,iBAAiB,EAAE;GACnB,aAAa,EAAE,YAAY,CAAC,UAAU,UAAU,EAAE;GACrD;EACD,QAAQ,EAAE;EACb;;AAGL,SAAgB,EAAS,EACrB,SACA,YACA,YACA,iBACA,YACA,aACA,aACA,kBACA,gBACA,gBACA,gBACA,kBACA,cACA,cACA,UACA,UACA,gBACA,mBAAgB,IAChB,sBAAmB,MAqBC;CACpB,IAAM,IAA8B,GAAyB;AAiB7D,QAhBA,EAAc,GAAQ;EAClB;EACA;EAAS;EAAS;EAClB;EAAS;EAAU;EACnB;EACA;EACA;EAAa;EACb,uBAAuB,EAAE,YAAY,GAAe;EACpD;EACA;EACA;EACA;EACA;EACA;EACA;EACH,CAAC,EACK"}