@milaboratories/graph-maker 1.1.168 → 1.1.169

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/dist/GraphMaker/constantsCommon.d.ts +3 -0
  2. package/dist/GraphMaker/constantsCommon.d.ts.map +1 -1
  3. package/dist/GraphMaker/constantsCommon.js +9 -6
  4. package/dist/GraphMaker/constantsCommon.js.map +1 -1
  5. package/dist/GraphMaker/forms/DataMappingForm/BubbleForm.vue.d.ts.map +1 -1
  6. package/dist/GraphMaker/forms/DataMappingForm/BubbleForm.vue.js +60 -56
  7. package/dist/GraphMaker/forms/DataMappingForm/BubbleForm.vue.js.map +1 -1
  8. package/dist/GraphMaker/forms/LayersForm/Layer/Bubble.vue.d.ts.map +1 -1
  9. package/dist/GraphMaker/forms/LayersForm/Layer/Bubble.vue.js +86 -58
  10. package/dist/GraphMaker/forms/LayersForm/Layer/Bubble.vue.js.map +1 -1
  11. package/dist/GraphMaker/forms/LayersForm/Layer/heatmap/Heatmap.vue.js +109 -112
  12. package/dist/GraphMaker/forms/LayersForm/Layer/heatmap/Heatmap.vue.js.map +1 -1
  13. package/dist/GraphMaker/utils/createChartSettingsForRender/composeBubbleSettings.d.ts +20 -0
  14. package/dist/GraphMaker/utils/createChartSettingsForRender/composeBubbleSettings.d.ts.map +1 -1
  15. package/dist/GraphMaker/utils/createChartSettingsForRender/composeBubbleSettings.js +19 -15
  16. package/dist/GraphMaker/utils/createChartSettingsForRender/composeBubbleSettings.js.map +1 -1
  17. package/dist/GraphMaker/utils/createChartSettingsForRender/composeDiscreteSettings.d.ts +3 -3
  18. package/dist/GraphMaker/utils/createChartSettingsForRender/composeHeatmapSettings.d.ts +8 -8
  19. package/dist/GraphMaker/utils/createChartSettingsForRender/composeHeatmapSettings.d.ts.map +1 -1
  20. package/dist/GraphMaker/utils/createChartSettingsForRender/composeHeatmapSettings.js +23 -23
  21. package/dist/GraphMaker/utils/createChartSettingsForRender/composeHeatmapSettings.js.map +1 -1
  22. package/dist/node_modules/@milaboratories/miplots4/dist/bubble/BubbleSettingsImpl.js +19 -14
  23. package/dist/node_modules/@milaboratories/miplots4/dist/bubble/BubbleSettingsImpl.js.map +1 -1
  24. package/dist/node_modules/@milaboratories/miplots4/dist/bubble/ChartRenderer.js +132 -132
  25. package/dist/node_modules/@milaboratories/miplots4/dist/bubble/ChartRenderer.js.map +1 -1
  26. package/dist/node_modules/@milaboratories/miplots4/dist/bubble/components/Chart.js +53 -53
  27. package/dist/node_modules/@milaboratories/miplots4/dist/bubble/components/Chart.js.map +1 -1
  28. package/dist/node_modules/@milaboratories/miplots4/dist/bubble/components/ChartsGroup.js.map +1 -1
  29. package/dist/node_modules/@milaboratories/miplots4/dist/bubble/getCellTooltip.js +7 -7
  30. package/dist/node_modules/@milaboratories/miplots4/dist/bubble/getCellTooltip.js.map +1 -1
  31. package/dist/node_modules/@milaboratories/miplots4/dist/bubble/getGroupedCellsData.js +49 -83
  32. package/dist/node_modules/@milaboratories/miplots4/dist/bubble/getGroupedCellsData.js.map +1 -1
  33. package/dist/node_modules/@milaboratories/miplots4/dist/bubble/index.js +51 -34
  34. package/dist/node_modules/@milaboratories/miplots4/dist/bubble/index.js.map +1 -1
  35. package/dist/node_modules/@milaboratories/miplots4/dist/bubble/utils/calculateCaptionTails.js.map +1 -1
  36. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/ChartRenderer.js +2 -2
  37. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/ChartRenderer.js.map +1 -1
  38. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/Annotations/Annotation.js.map +1 -1
  39. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/Annotations/AnnotationCellsCanvas.js.map +1 -1
  40. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/Annotations/AnnotationCellsSvg.js.map +1 -1
  41. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/Annotations/index.js.map +1 -1
  42. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/CanvasCells.js +31 -31
  43. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/CanvasCells.js.map +1 -1
  44. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/Chart.js +20 -20
  45. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/Chart.js.map +1 -1
  46. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/ChartsGroup.js +12 -12
  47. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/ChartsGroup.js.map +1 -1
  48. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/SvgCells.js +14 -14
  49. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/SvgCells.js.map +1 -1
  50. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/tooltipUtils.js +14 -14
  51. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/tooltipUtils.js.map +1 -1
  52. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/fillCellsData.js +244 -0
  53. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/fillCellsData.js.map +1 -0
  54. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/getCells.js +28 -214
  55. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/getCells.js.map +1 -1
  56. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/getDendrograms.js +26 -26
  57. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/getDendrograms.js.map +1 -1
  58. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/index.js +8 -8
  59. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/index.js.map +1 -1
  60. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/utils/calculateCaptionTails.js.map +1 -1
  61. package/dist/node_modules/@milaboratories/miplots4/dist/types/bubble.js +23 -12
  62. package/dist/node_modules/@milaboratories/miplots4/dist/types/bubble.js.map +1 -1
  63. package/dist/node_modules/@milaboratories/miplots4/dist/utils/getFacetOrGroupKey.js +7 -0
  64. package/dist/node_modules/@milaboratories/miplots4/dist/utils/getFacetOrGroupKey.js.map +1 -0
  65. package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/controllersByChartType/bubble.js +165 -95
  66. package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/controllersByChartType/bubble.js.map +1 -1
  67. package/package.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"ChartsGroup.js","sources":["../../../../../../../node_modules/@milaboratories/miplots4/src/heatmap/components/ChartsGroup.tsx"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\nimport { ChartsTitle } from '../../common/ChartsTitle';\nimport { ErrorBoundary } from '../../common/ErrorBoundary';\nimport fonts from '../../common/fonts';\nimport { Legend } from '../../common/Legend';\nimport { useTooltip } from '../../common/Tooltip';\nimport type { LegendData } from '../../common/types';\nimport { LEGEND_OFFSET } from '../constants';\nimport type { Cell, GroupedCellsData } from '../getCells';\nimport type { HeatmapSettingsImpl } from '../HeatmapSettingsImpl';\nimport { Chart } from './Chart';\nimport type {\n AnnotationColorScales, AnnotationTooltipData, CaptionsSizes,\n ChartDendrograms, ChartDimensionsData, ChartSizes, ChartsScales, DendrogramAesScales, LabelAngles, Margins\n} from './types';\n\nexport function ChartsGroup({\n margins,\n captionsSizes,\n settingsId,\n chartSettings,\n chartSizes,\n chartsDimensions,\n facetKeys,\n facetSettings,\n xGroupKeys,\n yGroupKeys,\n scales,\n colorScale,\n groupedCells,\n cellsMeta,\n step,\n annotations,\n annotationColorScales,\n legend,\n aes,\n dendrograms,\n dendrogramAesScales,\n columnsCount,\n labelAngles,\n onTooltipHintSwitch,\n cellsRenderingMode\n}: {\n margins: Margins;\n captionsSizes: CaptionsSizes;\n chartSettings: HeatmapSettingsImpl['chartSettings'];\n facetSettings: HeatmapSettingsImpl['facetSettings'];\n chartSizes: ChartSizes;\n chartsDimensions: Record<string, ChartDimensionsData>;\n scales: ChartsScales;\n facetKeys: string[];\n xGroupKeys: string[];\n yGroupKeys: string[];\n settingsId: string;\n colorScale: (value:unknown) => string;\n annotationColorScales: AnnotationColorScales;\n groupedCells: GroupedCellsData['facets'];\n cellsMeta: GroupedCellsData['meta'];\n annotations: HeatmapSettingsImpl['annotations'];\n step: {\n x: Record<string, number>;\n y: Record<string, number>;\n };\n legend: LegendData;\n aes: HeatmapSettingsImpl['aes'];\n dendrograms: Record<string, ChartDendrograms>;\n dendrogramAesScales: DendrogramAesScales;\n columnsCount: number;\n labelAngles: LabelAngles;\n onTooltipHintSwitch: (v:boolean) => void;\n cellsRenderingMode: 'svg' | 'canvas'\n}) {\n const [tooltipsContainer, setTooltipsContainer] = useState<SVGGElement>();\n const tooltipsData = useTooltip<Cell|AnnotationTooltipData>(onTooltipHintSwitch);\n const tooltipsRef = useRef<SVGGElement>(null);\n useEffect(() => {\n if (tooltipsRef.current) {\n setTooltipsContainer(tooltipsRef.current);\n }\n }, []);\n\n const leftTopChartPadding = chartsDimensions[facetKeys[0]].padding;\n const rightTopChartPadding = chartsDimensions[facetKeys[columnsCount - 1]].padding;\n\n const legendLeft = margins.left + chartSizes.chartsWidth + LEGEND_OFFSET;\n const legendTop = margins.top + leftTopChartPadding.top;\n\n return (\n <ErrorBoundary dataId={settingsId}>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox={`0 0 ${chartSizes.totalWidth} ${chartSizes.totalHeight}`}\n width={chartSizes.totalWidth}\n height={chartSizes.totalHeight}\n fontFamily=\"Manrope\"\n >\n <defs>{fonts}</defs>\n <g transform={`translate(${margins.left},${margins.top})`}>\n <ChartsTitle\n title={[chartSettings.title.name]}\n show={chartSettings.title.show}\n position={chartSettings.title.position}\n leftPadding={leftTopChartPadding.left}\n rightPadding={rightTopChartPadding.right}\n chartsWidth={chartSizes.chartsWidth}\n />\n {facetKeys.map(facetKey => {\n const {cells, xKeysByGroups, yKeysByGroups} = groupedCells[facetKey];\n return (\n <Chart\n dendrograms={dendrograms[facetKey]}\n captionsSizes={captionsSizes}\n key={facetKey}\n facetKey={facetKey}\n dimensions={chartsDimensions[facetKey]}\n xGroupKeys={xGroupKeys}\n yGroupKeys={yGroupKeys}\n xKeysByGroups={facetSettings.sharedX ? cellsMeta.xKeysByGroups : xKeysByGroups}\n yKeysByGroups={facetSettings.sharedY ? cellsMeta.yKeysByGroups : yKeysByGroups}\n sharedX={facetSettings.sharedX}\n sharedY={facetSettings.sharedY}\n scales={{x: scales.x[facetKey], y: scales.y[facetKey]}}\n cells={cells}\n cellsMeta={cellsMeta}\n stepX={step.x[facetKey]}\n stepY={step.y[facetKey]}\n colorScale={colorScale}\n chartSettings={chartSettings}\n aes={aes}\n annotations={annotations}\n annotationColorScales={annotationColorScales}\n dendrogramAesScales={dendrogramAesScales}\n labelAngles={labelAngles}\n margins={margins}\n chartSizes={chartSizes}\n tooltipsContainer={tooltipsContainer}\n tooltipsData={tooltipsData}\n cellsRenderingMode={cellsRenderingMode}\n />\n );\n })}\n </g>\n <g transform={`translate(${legendLeft},${legendTop})`}>\n <Legend legendData={legend} />\n </g>\n <g ref={tooltipsRef} style={{outline: 'none'}} />\n </svg>\n </ErrorBoundary>\n );\n}\n"],"names":["ChartsGroup","margins","captionsSizes","settingsId","chartSettings","chartSizes","chartsDimensions","facetKeys","facetSettings","xGroupKeys","yGroupKeys","scales","colorScale","groupedCells","cellsMeta","step","annotations","annotationColorScales","legend","aes","dendrograms","dendrogramAesScales","columnsCount","labelAngles","onTooltipHintSwitch","cellsRenderingMode","tooltipsContainer","setTooltipsContainer","useState","tooltipsData","useTooltip","tooltipsRef","useRef","useEffect","leftTopChartPadding","rightTopChartPadding","legendLeft","LEGEND_OFFSET","legendTop","jsx","ErrorBoundary","jsxs","fonts","ChartsTitle","facetKey","cells","xKeysByGroups","yKeysByGroups","Chart","Legend"],"mappings":"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","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"ChartsGroup.js","sources":["../../../../../../../node_modules/@milaboratories/miplots4/src/heatmap/components/ChartsGroup.tsx"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\nimport { ChartsTitle } from '../../common/ChartsTitle';\nimport { ErrorBoundary } from '../../common/ErrorBoundary';\nimport fonts from '../../common/fonts';\nimport { Legend } from '../../common/Legend';\nimport { useTooltip } from '../../common/Tooltip';\nimport type { LegendData } from '../../common/types';\nimport { LEGEND_OFFSET } from '../constants';\nimport type { CellHeatmap, GroupedCellsHeatmap } from '../getCells';\nimport type { HeatmapSettingsImpl } from '../HeatmapSettingsImpl';\nimport { Chart } from './Chart';\nimport type {\n AnnotationColorScales, AnnotationTooltipData, CaptionsSizes,\n ChartDendrograms, ChartDimensionsData, ChartSizes, ChartsScales, DendrogramAesScales, LabelAngles, Margins\n} from './types';\n\nexport function ChartsGroup({\n margins,\n captionsSizes,\n settingsId,\n chartSettings,\n chartSizes,\n chartsDimensions,\n facetKeys,\n facetSettings,\n xGroupKeys,\n yGroupKeys,\n scales,\n colorScale,\n groupedCells,\n cellsMeta,\n step,\n annotations,\n annotationColorScales,\n legend,\n aes,\n dendrograms,\n dendrogramAesScales,\n columnsCount,\n labelAngles,\n onTooltipHintSwitch,\n cellsRenderingMode\n}: {\n margins: Margins;\n captionsSizes: CaptionsSizes;\n chartSettings: HeatmapSettingsImpl['chartSettings'];\n facetSettings: HeatmapSettingsImpl['facetSettings'];\n chartSizes: ChartSizes;\n chartsDimensions: Record<string, ChartDimensionsData>;\n scales: ChartsScales;\n facetKeys: string[];\n xGroupKeys: string[];\n yGroupKeys: string[];\n settingsId: string;\n colorScale: (value:unknown) => string;\n annotationColorScales: AnnotationColorScales;\n groupedCells: GroupedCellsHeatmap['facets'];\n cellsMeta: GroupedCellsHeatmap['meta'];\n annotations: HeatmapSettingsImpl['annotations'];\n step: {\n x: Record<string, number>;\n y: Record<string, number>;\n };\n legend: LegendData;\n aes: HeatmapSettingsImpl['aes'];\n dendrograms: Record<string, ChartDendrograms>;\n dendrogramAesScales: DendrogramAesScales;\n columnsCount: number;\n labelAngles: LabelAngles;\n onTooltipHintSwitch: (v:boolean) => void;\n cellsRenderingMode: 'svg' | 'canvas'\n}) {\n const [tooltipsContainer, setTooltipsContainer] = useState<SVGGElement>();\n const tooltipsData = useTooltip<CellHeatmap|AnnotationTooltipData>(onTooltipHintSwitch);\n const tooltipsRef = useRef<SVGGElement>(null);\n useEffect(() => {\n if (tooltipsRef.current) {\n setTooltipsContainer(tooltipsRef.current);\n }\n }, []);\n\n const leftTopChartPadding = chartsDimensions[facetKeys[0]].padding;\n const rightTopChartPadding = chartsDimensions[facetKeys[columnsCount - 1]].padding;\n\n const legendLeft = margins.left + chartSizes.chartsWidth + LEGEND_OFFSET;\n const legendTop = margins.top + leftTopChartPadding.top;\n\n return (\n <ErrorBoundary dataId={settingsId}>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox={`0 0 ${chartSizes.totalWidth} ${chartSizes.totalHeight}`}\n width={chartSizes.totalWidth}\n height={chartSizes.totalHeight}\n fontFamily=\"Manrope\"\n >\n <defs>{fonts}</defs>\n <g transform={`translate(${margins.left},${margins.top})`}>\n <ChartsTitle\n title={[chartSettings.title.name]}\n show={chartSettings.title.show}\n position={chartSettings.title.position}\n leftPadding={leftTopChartPadding.left}\n rightPadding={rightTopChartPadding.right}\n chartsWidth={chartSizes.chartsWidth}\n />\n {facetKeys.map(facetKey => {\n const {cells, xKeysByGroups, yKeysByGroups} = groupedCells[facetKey];\n return (\n <Chart\n dendrograms={dendrograms[facetKey]}\n captionsSizes={captionsSizes}\n key={facetKey}\n facetKey={facetKey}\n dimensions={chartsDimensions[facetKey]}\n xGroupKeys={xGroupKeys}\n yGroupKeys={yGroupKeys}\n xKeysByGroups={facetSettings.sharedX ? cellsMeta.xKeysByGroups : xKeysByGroups}\n yKeysByGroups={facetSettings.sharedY ? cellsMeta.yKeysByGroups : yKeysByGroups}\n sharedX={facetSettings.sharedX}\n sharedY={facetSettings.sharedY}\n scales={{x: scales.x[facetKey], y: scales.y[facetKey]}}\n cells={cells}\n cellsMeta={cellsMeta}\n stepX={step.x[facetKey]}\n stepY={step.y[facetKey]}\n colorScale={colorScale}\n chartSettings={chartSettings}\n aes={aes}\n annotations={annotations}\n annotationColorScales={annotationColorScales}\n dendrogramAesScales={dendrogramAesScales}\n labelAngles={labelAngles}\n margins={margins}\n chartSizes={chartSizes}\n tooltipsContainer={tooltipsContainer}\n tooltipsData={tooltipsData}\n cellsRenderingMode={cellsRenderingMode}\n />\n );\n })}\n </g>\n <g transform={`translate(${legendLeft},${legendTop})`}>\n <Legend legendData={legend} />\n </g>\n <g ref={tooltipsRef} style={{outline: 'none'}} />\n </svg>\n </ErrorBoundary>\n );\n}\n"],"names":["ChartsGroup","margins","captionsSizes","settingsId","chartSettings","chartSizes","chartsDimensions","facetKeys","facetSettings","xGroupKeys","yGroupKeys","scales","colorScale","groupedCells","cellsMeta","step","annotations","annotationColorScales","legend","aes","dendrograms","dendrogramAesScales","columnsCount","labelAngles","onTooltipHintSwitch","cellsRenderingMode","tooltipsContainer","setTooltipsContainer","useState","tooltipsData","useTooltip","tooltipsRef","useRef","useEffect","leftTopChartPadding","rightTopChartPadding","legendLeft","LEGEND_OFFSET","legendTop","jsx","ErrorBoundary","jsxs","fonts","ChartsTitle","facetKey","cells","xKeysByGroups","yKeysByGroups","Chart","Legend"],"mappings":"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","x_google_ignoreList":[0]}
@@ -1,29 +1,29 @@
1
- import { j as y } from "../../node_modules/react/jsx-runtime.js";
2
- function f({
1
+ import { j as m } from "../../node_modules/react/jsx-runtime.js";
2
+ function S({
3
3
  facetKey: u,
4
4
  scales: o,
5
5
  cells: l,
6
- xKeys: i,
7
- yKeys: c,
6
+ xKeys: c,
7
+ yKeys: i,
8
8
  stepX: p,
9
9
  stepY: v,
10
- aes: s,
11
- colorScale: m,
10
+ aes: a,
11
+ colorScale: d,
12
12
  tooltipsData: t
13
13
  }) {
14
- return i.map(
15
- (a) => c.map((r) => {
14
+ return c.map(
15
+ (s) => i.map((r) => {
16
16
  var n;
17
- const e = (n = l == null ? void 0 : l[a]) == null ? void 0 : n[r];
18
- return e ? /* @__PURE__ */ y.jsx(
17
+ const e = (n = l == null ? void 0 : l[s]) == null ? void 0 : n[r];
18
+ return e ? /* @__PURE__ */ m.jsx(
19
19
  "rect",
20
20
  {
21
- x: o.x(a),
21
+ x: o.x(s),
22
22
  y: o.y(r),
23
23
  width: p,
24
24
  height: v,
25
- stroke: s.cellStrokeColor,
26
- fill: e.value === null ? s.emptyCellColor : m(e.normalizedValue),
25
+ stroke: a.cellStrokeColor,
26
+ fill: e.value.dataSource === null ? a.emptyCellColor : d(e.normalizedValue.dataSource),
27
27
  onMouseOver: () => t.onMouseEnter(e, u),
28
28
  onMouseLeave: () => t.onMouseLeave()
29
29
  },
@@ -33,6 +33,6 @@ function f({
33
33
  );
34
34
  }
35
35
  export {
36
- f as SvgCells
36
+ S as SvgCells
37
37
  };
38
38
  //# sourceMappingURL=SvgCells.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SvgCells.js","sources":["../../../../../../../node_modules/@milaboratories/miplots4/src/heatmap/components/SvgCells.tsx"],"sourcesContent":["import type { Cell, GroupedCellsData } from '../getCells';\nimport type { AnnotationTooltipData, ChartScales } from './types';\nimport type { TooltipsData } from '../../common/Tooltip';\nimport type { HeatmapSettingsImpl } from '../HeatmapSettingsImpl';\n\ninterface SvgCellsProps<T> {\n facetKey: string,\n scales: ChartScales,\n cells: GroupedCellsData['facets'][keyof GroupedCellsData['facets']]['cells'],\n xKeys: string[],\n yKeys: string[],\n stepX: number,\n stepY: number,\n aes: HeatmapSettingsImpl['aes'];\n colorScale: (value: T) => string,\n tooltipsData: TooltipsData<Cell | AnnotationTooltipData>;\n}\n\nexport function SvgCells<ValueType>({\n facetKey,\n scales,\n cells,\n xKeys,\n yKeys,\n stepX,\n stepY,\n aes,\n colorScale,\n tooltipsData,\n}: SvgCellsProps<ValueType>) {\n return xKeys.map(xKey =>\n yKeys.map(yKey => {\n const cell = cells?.[xKey]?.[yKey];\n return cell ? (\n <rect\n key={cell.id}\n x={scales.x(xKey)}\n y={scales.y(yKey)}\n width={stepX}\n height={stepY}\n stroke={aes.cellStrokeColor}\n fill={cell.value === null ? aes.emptyCellColor : colorScale(cell.normalizedValue as ValueType)}\n onMouseOver={() => tooltipsData.onMouseEnter(cell, facetKey)}\n onMouseLeave={() => tooltipsData.onMouseLeave()}\n />\n ) : null;\n })\n );\n}"],"names":["SvgCells","facetKey","scales","cells","xKeys","yKeys","stepX","stepY","aes","colorScale","tooltipsData","xKey","yKey","cell","_a","jsx"],"mappings":";AAkBO,SAASA,EAAoB;AAAA,EAChC,UAAAC;AAAAA,EACA,QAAAC;AAAAA,EACA,OAAAC;AAAAA,EACA,OAAAC;AAAAA,EACA,OAAAC;AAAAA,EACA,OAAAC;AAAAA,EACA,OAAAC;AAAAA,EACA,KAAAC;AAAAA,EACA,YAAAC;AAAAA,EACA,cAAAC;AACJ,GAA6B;AACzB,SAAON,EAAM;AAAA,IAAI,CAAAO,MACbN,EAAM,IAAI,CAAAO,MAAQ;;AACd,YAAMC,KAAOC,IAAAX,KAAA,gBAAAA,EAAQQ,CAAAA,MAAR,gBAAAG,EAAgBF,CAAAA;AAC7B,aAAOC,IACHE,gBAAAA,EAAAA;AAAAA,QAAC;AAAA,QAAA;AAAA,UAEG,GAAGb,EAAO,EAAES,CAAI;AAAA,UAChB,GAAGT,EAAO,EAAEU,CAAI;AAAA,UAChB,OAAON;AAAAA,UACP,QAAQC;AAAAA,UACR,QAAQC,EAAI;AAAA,UACZ,MAAMK,EAAK,UAAU,OAAOL,EAAI,iBAAiBC,EAAWI,EAAK,eAA4B;AAAA,UAC7F,aAAa,MAAMH,EAAa,aAAaG,GAAMZ,CAAQ;AAAA,UAC3D,cAAc,MAAMS,EAAa,aAAA;AAAA,QAAA;AAAA,QAR5BG,EAAK;AAAA,MAAA,IAUd;AAAA,IACR,CAAC;AAAA,EAAA;AAET;","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"SvgCells.js","sources":["../../../../../../../node_modules/@milaboratories/miplots4/src/heatmap/components/SvgCells.tsx"],"sourcesContent":["import type { CellHeatmap, GroupedCellsHeatmap } from '../getCells';\nimport type { AnnotationTooltipData, ChartScales } from './types';\nimport type { TooltipsData } from '../../common/Tooltip';\nimport type { HeatmapSettingsImpl } from '../HeatmapSettingsImpl';\n\ninterface SvgCellsProps<T> {\n facetKey: string,\n scales: ChartScales,\n cells: GroupedCellsHeatmap['facets'][keyof GroupedCellsHeatmap['facets']]['cells'],\n xKeys: string[],\n yKeys: string[],\n stepX: number,\n stepY: number,\n aes: HeatmapSettingsImpl['aes'];\n colorScale: (value: T) => string,\n tooltipsData: TooltipsData<CellHeatmap | AnnotationTooltipData>;\n}\n\nexport function SvgCells<ValueType>({\n facetKey,\n scales,\n cells,\n xKeys,\n yKeys,\n stepX,\n stepY,\n aes,\n colorScale,\n tooltipsData,\n}: SvgCellsProps<ValueType>) {\n return xKeys.map(xKey =>\n yKeys.map(yKey => {\n const cell = cells?.[xKey]?.[yKey];\n return cell ? (\n <rect\n key={cell.id}\n x={scales.x(xKey)}\n y={scales.y(yKey)}\n width={stepX}\n height={stepY}\n stroke={aes.cellStrokeColor}\n fill={cell.value.dataSource === null ? aes.emptyCellColor : colorScale(cell.normalizedValue.dataSource as ValueType)}\n onMouseOver={() => tooltipsData.onMouseEnter(cell, facetKey)}\n onMouseLeave={() => tooltipsData.onMouseLeave()}\n />\n ) : null;\n })\n );\n}"],"names":["SvgCells","facetKey","scales","cells","xKeys","yKeys","stepX","stepY","aes","colorScale","tooltipsData","xKey","yKey","cell","_a","jsx"],"mappings":";AAkBO,SAASA,EAAoB;AAAA,EAChC,UAAAC;AAAAA,EACA,QAAAC;AAAAA,EACA,OAAAC;AAAAA,EACA,OAAAC;AAAAA,EACA,OAAAC;AAAAA,EACA,OAAAC;AAAAA,EACA,OAAAC;AAAAA,EACA,KAAAC;AAAAA,EACA,YAAAC;AAAAA,EACA,cAAAC;AACJ,GAA6B;AACzB,SAAON,EAAM;AAAA,IAAI,CAAAO,MACbN,EAAM,IAAI,CAAAO,MAAQ;;AACd,YAAMC,KAAOC,IAAAX,KAAA,gBAAAA,EAAQQ,CAAAA,MAAR,gBAAAG,EAAgBF,CAAAA;AAC7B,aAAOC,IACHE,kBAAAA;AAAAA,QAAC;AAAA,QAAA;AAAA,UAEG,GAAGb,EAAO,EAAES,CAAI;AAAA,UAChB,GAAGT,EAAO,EAAEU,CAAI;AAAA,UAChB,OAAON;AAAAA,UACP,QAAQC;AAAAA,UACR,QAAQC,EAAI;AAAA,UACZ,MAAMK,EAAK,MAAM,eAAe,OAAOL,EAAI,iBAAiBC,EAAWI,EAAK,gBAAgB,UAAuB;AAAA,UACnH,aAAa,MAAMH,EAAa,aAAaG,GAAMZ,CAAQ;AAAA,UAC3D,cAAc,MAAMS,EAAa,aAAA;AAAA,QAAA;AAAA,QAR5BG,EAAK;AAAA,MAAA,IAUd;AAAA,IACR,CAAC;AAAA,EAAA;AAET;","x_google_ignoreList":[0]}
@@ -1,32 +1,32 @@
1
1
  import { format as s } from "../../node_modules/d3-format/src/defaultLocale.js";
2
- function n(t, e) {
2
+ function u(t, e) {
3
3
  if (t === null)
4
4
  return "null";
5
5
  if (typeof t == "number") {
6
6
  if (e)
7
7
  return s(e)(t);
8
- const l = t > 0 ? Math.floor(t) : Math.ceil(t), o = t - l;
9
- return l + Number(o.toPrecision(2));
8
+ const o = t > 0 ? Math.floor(t) : Math.ceil(t), l = t - o;
9
+ return o + Number(l.toPrecision(2));
10
10
  }
11
11
  return t;
12
12
  }
13
- function c(t, e, l, o = []) {
14
- const r = `${n(e.value)}${e.value !== e.normalizedValue ? ` (${n(e.normalizedValue)})` : ""}`;
15
- if (o.length) {
16
- const i = [
13
+ function c(t, e, o, l = []) {
14
+ const r = `${u(e.value.dataSource)}${e.value !== e.normalizedValue ? ` (${u(e.normalizedValue.dataSource)})` : ""}`;
15
+ if (l.length) {
16
+ const a = [
17
17
  `Value: ${r}`
18
18
  ];
19
- for (const u of o) {
20
- const a = t.getColumnValue(u.value, e.idx);
21
- i.push(`${u.label}: ${n(a, u.format)}`);
19
+ for (const n of l) {
20
+ const i = t.getColumnValue(n.value, e.idx);
21
+ a.push(`${n.label}: ${u(i, n.format)}`);
22
22
  }
23
- return i;
23
+ return a;
24
24
  }
25
25
  return [r];
26
26
  }
27
27
  function m(t, e) {
28
- const l = [];
29
- return t.xKey && l.push(`X: ${e.xLabels[t.xKey]}`), t.yKey && l.push(`Y: ${e.yLabels[t.yKey]}`), l.push(`${t.title}: ${n(t.value, t.column.format)}`), l;
28
+ const o = [];
29
+ return t.xKey && o.push(`X: ${e.xLabels[t.xKey]}`), t.yKey && o.push(`Y: ${e.yLabels[t.yKey]}`), o.push(`${t.title}: ${u(t.value, t.column.format)}`), o;
30
30
  }
31
31
  function p(t) {
32
32
  return t !== null && "isAnnotation" in t;
@@ -35,7 +35,7 @@ function $(t) {
35
35
  return t !== null && "isCell" in t;
36
36
  }
37
37
  export {
38
- n as formatCellValue,
38
+ u as formatCellValue,
39
39
  m as getAnnotationTooltipContent,
40
40
  c as getTooltipContent,
41
41
  p as isAnnotationTooltip,
@@ -1 +1 @@
1
- {"version":3,"file":"tooltipUtils.js","sources":["../../../../../../../node_modules/@milaboratories/miplots4/src/heatmap/components/tooltipUtils.ts"],"sourcesContent":["import { format as d3format } from 'd3-format';\nimport type { DataFrame } from '../../DataFrame';\nimport type { ColumnName, DataValue } from '../../types';\nimport type { Cell, GroupedCellsData } from '../getCells';\nimport type { AnnotationTooltipData } from './types';\n\nexport function formatCellValue(v: DataValue, format?: string): number | string {\n if (v === null) {\n return 'null';\n }\n if (typeof v === 'number') {\n if (format) {\n return d3format(format)(v);\n }\n const whole = v > 0 ? Math.floor(v) : Math.ceil(v);\n const decimal = v - whole;\n return whole + Number(decimal.toPrecision(2));\n }\n return v;\n}\nexport function getTooltipContent(\n dataFrame: DataFrame,\n cell: Cell,\n cellsMeta: GroupedCellsData['meta'],\n columnsList: ColumnName[] = []\n) {\n const value = `${formatCellValue(cell.value)}${cell.value !== cell.normalizedValue ? ` (${formatCellValue(cell.normalizedValue)})` : ''}`;\n if (columnsList.length) {\n const lines = [\n `Value: ${value}`,\n ];\n for (const column of columnsList) {\n const value = dataFrame.getColumnValue(column.value, cell.idx);\n lines.push(`${column.label}: ${formatCellValue(value, column.format)}`);\n }\n return lines;\n }\n\n return [value];\n}\nexport function getAnnotationTooltipContent(data: AnnotationTooltipData, cellsMeta: GroupedCellsData['meta']) {\n const lines: string[] = [];\n if (data.xKey) {\n lines.push(`X: ${cellsMeta.xLabels[data.xKey as string]}`);\n }\n if (data.yKey) {\n lines.push(`Y: ${cellsMeta.yLabels[data.yKey as string]}`);\n }\n lines.push(`${data.title}: ${formatCellValue(data.value, data.column.format)}`);\n return lines;\n}\n\nexport function isAnnotationTooltip(d: Cell | AnnotationTooltipData | null): d is AnnotationTooltipData {\n return d !== null && 'isAnnotation' in d;\n}\n\nexport function isCellTooltip(d: Cell | AnnotationTooltipData | null): d is Cell {\n return d !== null && 'isCell' in d;\n}\n"],"names":["formatCellValue","v","format","d3format","whole","decimal","getTooltipContent","dataFrame","cell","cellsMeta","columnsList","value","lines","column","getAnnotationTooltipContent","data","isAnnotationTooltip","d","isCellTooltip"],"mappings":";AAMO,SAASA,EAAgBC,GAAcC,GAAkC;AAC5E,MAAID,MAAM;AACN,WAAO;AAEX,MAAI,OAAOA,KAAM,UAAU;AACvB,QAAIC;AACA,aAAOC,EAASD,CAAM,EAAED,CAAC;AAE7B,UAAMG,IAAQH,IAAI,IAAI,KAAK,MAAMA,CAAC,IAAI,KAAK,KAAKA,CAAC,GAC3CI,IAAUJ,IAAIG;AACpB,WAAOA,IAAQ,OAAOC,EAAQ,YAAY,CAAC,CAAC;AAAA,EAChD;AACA,SAAOJ;AACX;AACO,SAASK,EACZC,GACAC,GACAC,GACAC,IAA4B,CAAA,GAC9B;AACE,QAAMC,IAAQ,GAAGX,EAAgBQ,EAAK,KAAK,CAAC,GAAGA,EAAK,UAAUA,EAAK,kBAAkB,KAAKR,EAAgBQ,EAAK,eAAe,CAAC,MAAM,EAAE;AACvI,MAAIE,EAAY,QAAQ;AACpB,UAAME,IAAQ;AAAA,MACV,UAAUD,CAAK;AAAA,IAAA;AAEnB,eAAWE,KAAUH,GAAa;AAC9B,YAAMC,IAAQJ,EAAU,eAAeM,EAAO,OAAOL,EAAK,GAAG;AAC7DI,MAAAA,EAAM,KAAK,GAAGC,EAAO,KAAK,KAAKb,EAAgBW,GAAOE,EAAO,MAAM,CAAC,EAAE;AAAA,IAC1E;AACA,WAAOD;AAAAA,EACX;AAEA,SAAO,CAACD,CAAK;AACjB;AACO,SAASG,EAA4BC,GAA6BN,GAAqC;AAC1G,QAAMG,IAAkB,CAAA;AACxB,SAAIG,EAAK,QACLH,EAAM,KAAK,MAAMH,EAAU,QAAQM,EAAK,IAAc,CAAC,EAAE,GAEzDA,EAAK,QACLH,EAAM,KAAK,MAAMH,EAAU,QAAQM,EAAK,IAAc,CAAC,EAAE,GAE7DH,EAAM,KAAK,GAAGG,EAAK,KAAK,KAAKf,EAAgBe,EAAK,OAAOA,EAAK,OAAO,MAAM,CAAC,EAAE,GACvEH;AACX;AAEO,SAASI,EAAoBC,GAAoE;AACpG,SAAOA,MAAM,QAAQ,kBAAkBA;AAC3C;AAEO,SAASC,EAAcD,GAAmD;AAC7E,SAAOA,MAAM,QAAQ,YAAYA;AACrC;","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"tooltipUtils.js","sources":["../../../../../../../node_modules/@milaboratories/miplots4/src/heatmap/components/tooltipUtils.ts"],"sourcesContent":["import { format as d3format } from 'd3-format';\nimport type { DataFrame } from '../../DataFrame';\nimport type { ColumnName, DataValue } from '../../types';\nimport type { CellHeatmap, GroupedCellsHeatmap } from '../getCells';\nimport type { AnnotationTooltipData } from './types';\n\nexport function formatCellValue(v: DataValue, format?: string): number | string {\n if (v === null) {\n return 'null';\n }\n if (typeof v === 'number') {\n if (format) {\n return d3format(format)(v);\n }\n const whole = v > 0 ? Math.floor(v) : Math.ceil(v);\n const decimal = v - whole;\n return whole + Number(decimal.toPrecision(2));\n }\n return v;\n}\nexport function getTooltipContent(\n dataFrame: DataFrame,\n cell: CellHeatmap,\n cellsMeta: GroupedCellsHeatmap['meta'],\n columnsList: ColumnName[] = []\n) {\n const value = `${formatCellValue(cell.value.dataSource)}${cell.value !== cell.normalizedValue ? ` (${formatCellValue(cell.normalizedValue.dataSource)})` : ''}`;\n if (columnsList.length) {\n const lines = [\n `Value: ${value}`,\n ];\n for (const column of columnsList) {\n const value = dataFrame.getColumnValue(column.value, cell.idx);\n lines.push(`${column.label}: ${formatCellValue(value, column.format)}`);\n }\n return lines;\n }\n\n return [value];\n}\nexport function getAnnotationTooltipContent(data: AnnotationTooltipData, cellsMeta: GroupedCellsHeatmap['meta']) {\n const lines: string[] = [];\n if (data.xKey) {\n lines.push(`X: ${cellsMeta.xLabels[data.xKey as string]}`);\n }\n if (data.yKey) {\n lines.push(`Y: ${cellsMeta.yLabels[data.yKey as string]}`);\n }\n lines.push(`${data.title}: ${formatCellValue(data.value, data.column.format)}`);\n return lines;\n}\n\nexport function isAnnotationTooltip(d: CellHeatmap | AnnotationTooltipData | null): d is AnnotationTooltipData {\n return d !== null && 'isAnnotation' in d;\n}\n\nexport function isCellTooltip(d: CellHeatmap | AnnotationTooltipData | null): d is CellHeatmap {\n return d !== null && 'isCell' in d;\n}\n"],"names":["formatCellValue","v","format","d3format","whole","decimal","getTooltipContent","dataFrame","cell","cellsMeta","columnsList","value","lines","column","getAnnotationTooltipContent","data","isAnnotationTooltip","d","isCellTooltip"],"mappings":";AAMO,SAASA,EAAgBC,GAAcC,GAAkC;AAC5E,MAAID,MAAM;AACN,WAAO;AAEX,MAAI,OAAOA,KAAM,UAAU;AACvB,QAAIC;AACA,aAAOC,EAASD,CAAM,EAAED,CAAC;AAE7B,UAAMG,IAAQH,IAAI,IAAI,KAAK,MAAMA,CAAC,IAAI,KAAK,KAAKA,CAAC,GAC3CI,IAAUJ,IAAIG;AACpB,WAAOA,IAAQ,OAAOC,EAAQ,YAAY,CAAC,CAAC;AAAA,EAChD;AACA,SAAOJ;AACX;AACO,SAASK,EACZC,GACAC,GACAC,GACAC,IAA4B,CAAA,GAC9B;AACE,QAAMC,IAAQ,GAAGX,EAAgBQ,EAAK,MAAM,UAAU,CAAC,GAAGA,EAAK,UAAUA,EAAK,kBAAkB,KAAKR,EAAgBQ,EAAK,gBAAgB,UAAU,CAAC,MAAM,EAAE;AAC7J,MAAIE,EAAY,QAAQ;AACpB,UAAME,IAAQ;AAAA,MACV,UAAUD,CAAK;AAAA,IAAA;AAEnB,eAAWE,KAAUH,GAAa;AAC9B,YAAMC,IAAQJ,EAAU,eAAeM,EAAO,OAAOL,EAAK,GAAG;AAC7DI,MAAAA,EAAM,KAAK,GAAGC,EAAO,KAAK,KAAKb,EAAgBW,GAAOE,EAAO,MAAM,CAAC,EAAE;AAAA,IAC1E;AACA,WAAOD;AAAAA,EACX;AAEA,SAAO,CAACD,CAAK;AACjB;AACO,SAASG,EAA4BC,GAA6BN,GAAwC;AAC7G,QAAMG,IAAkB,CAAA;AACxB,SAAIG,EAAK,QACLH,EAAM,KAAK,MAAMH,EAAU,QAAQM,EAAK,IAAc,CAAC,EAAE,GAEzDA,EAAK,QACLH,EAAM,KAAK,MAAMH,EAAU,QAAQM,EAAK,IAAc,CAAC,EAAE,GAE7DH,EAAM,KAAK,GAAGG,EAAK,KAAK,KAAKf,EAAgBe,EAAK,OAAOA,EAAK,OAAO,MAAM,CAAC,EAAE,GACvEH;AACX;AAEO,SAASI,EAAoBC,GAA2E;AAC3G,SAAOA,MAAM,QAAQ,kBAAkBA;AAC3C;AAEO,SAASC,EAAcD,GAAiE;AAC3F,SAAOA,MAAM,QAAQ,YAAYA;AACrC;","x_google_ignoreList":[0]}
@@ -0,0 +1,244 @@
1
+ import g from "../node_modules/lodash/lodash.js";
2
+ import { exhaustive as ae } from "../utils/index.js";
3
+ import { getFacetOrGroupKey as k } from "../utils/getFacetOrGroupKey.js";
4
+ import H from "../node_modules/d3-array/src/mean.js";
5
+ import { quantileSorted as te } from "../node_modules/d3-array/src/quantile.js";
6
+ import ue from "../node_modules/d3-array/src/deviation.js";
7
+ import le from "../node_modules/d3-array/src/extent.js";
8
+ function oe(e) {
9
+ const t = ue(e), u = H(e);
10
+ return t === void 0 || u === void 0 || t === 0 ? (l) => l : (l) => (l - u) / t;
11
+ }
12
+ function se(e) {
13
+ const t = H(e), [u, l] = le(e);
14
+ return t === void 0 || u === void 0 || l === void 0 || l === u ? (r) => r : (r) => (r - t) / (l - u);
15
+ }
16
+ function ne(e, t) {
17
+ return e === "standardScaling" ? oe(t) : e === "meanNormalization" ? se(t) : (u) => u;
18
+ }
19
+ function X(e, t) {
20
+ switch (e) {
21
+ case "max": {
22
+ let u = t[0];
23
+ for (const l of t)
24
+ u = Math.max(u, l);
25
+ return u;
26
+ }
27
+ case "min": {
28
+ let u = t[0];
29
+ for (const l of t)
30
+ u = Math.min(u, l);
31
+ return u;
32
+ }
33
+ case "median": {
34
+ const u = t.sort((l, r) => l - r);
35
+ return te(u, 0.5);
36
+ }
37
+ case "mean":
38
+ return H(t) ?? t[0];
39
+ default:
40
+ ae(e, `Unknown aggregation function ${e}`);
41
+ }
42
+ }
43
+ function R(e) {
44
+ const t = [...new Set(e)].sort();
45
+ return t.length > 3 ? [...t.slice(0, 3), "..."].join(", ") : t.join(", ");
46
+ }
47
+ function Y(e) {
48
+ if (!e.length)
49
+ return [];
50
+ let t = [[]];
51
+ return e.forEach((u) => {
52
+ const l = [];
53
+ u.forEach((r) => {
54
+ l.push(...t.map((d) => [...d, r]));
55
+ }), t = l;
56
+ }), t;
57
+ }
58
+ const T = (e, t, u = {}) => e.sort(
59
+ (l, r) => t === "asc" ? (u[l] ?? l).localeCompare(u[r] ?? r, "en", { numeric: !0 }) : (u[r] ?? r).localeCompare(u[l] ?? l, "en", { numeric: !0 })
60
+ );
61
+ function re(e, t, u, l, r) {
62
+ if (t.x || t.y) {
63
+ const d = e.meta.valueSources.reduce((m, i) => (m[i] = [1 / 0, -1 / 0], m), {});
64
+ e.meta.facetKeys.forEach((m) => {
65
+ var i, B;
66
+ const { xKeys: O, yKeys: q, cells: w, xKeysByGroups: b, yKeysByGroups: f } = e.facets[m], E = t.x ? b : O.reduce((c, n) => (c[n] = [n], c), {}), $ = t.y ? f : q.reduce((c, n) => (c[n] = [n], c), {}), S = Object.keys(E), D = Object.keys($);
67
+ for (const c of S)
68
+ for (const n of D) {
69
+ const C = e.meta.valueSources.reduce((y, h) => (y[h] = [], y), {});
70
+ E[c].forEach((y) => {
71
+ $[n].forEach((h) => {
72
+ var v, V, G, j;
73
+ for (const _ of e.meta.valueSources) {
74
+ const F = (G = (V = (v = w[y]) == null ? void 0 : v[h]) == null ? void 0 : V.value) == null ? void 0 : G[_];
75
+ F !== void 0 && C[_].push(F);
76
+ }
77
+ (j = w[y]) == null || delete j[h];
78
+ });
79
+ });
80
+ for (const y of e.meta.valueSources) {
81
+ const h = C[y];
82
+ if (h.length > 0) {
83
+ const v = X(t.method, h);
84
+ e.facets[m].cells[c] || (e.facets[m].cells[c] = {}), e.facets[m].cells[c][n] || (e.facets[m].cells[c][n] = {
85
+ isCell: !0,
86
+ idx: 0,
87
+ id: `${c}_${n}`,
88
+ x: c,
89
+ y: n,
90
+ value: e.meta.valueSources.reduce((G, j) => (G[j] = null, G), {}),
91
+ normalizedValue: e.meta.valueSources.reduce((G, j) => (G[j] = null, G), {})
92
+ });
93
+ const V = e.facets[m].cells[c][n];
94
+ V.value[y] = v, V.normalizedValue[y] = v, d[y][0] = Math.min((i = V.normalizedValue) == null ? void 0 : i[y], d[y][0]), d[y][1] = Math.max((B = V.normalizedValue) == null ? void 0 : B[y], d[y][1]);
95
+ }
96
+ }
97
+ }
98
+ t.x && S.forEach((c) => {
99
+ u.forEach((n) => {
100
+ const C = r.find((v) => v.valueColumn.value === n || v.valueColumn.valueLabels === n);
101
+ if (!C)
102
+ return;
103
+ const y = [];
104
+ E[c].forEach((v) => {
105
+ y.push(e.meta.xDataByKeys[n][v]), delete e.meta.xDataByKeys[n][v];
106
+ });
107
+ const h = C.type === "continuous" ? X(t.method, y) : R(y);
108
+ e.meta.xDataByKeys[n][c] = h;
109
+ });
110
+ }), t.y && (l.forEach((c) => {
111
+ e.meta.yDataByKeys[c] = {};
112
+ }), D.forEach((c) => {
113
+ l.forEach((n) => {
114
+ const C = r.find((v) => v.valueColumn.value === n || v.valueColumn.valueLabels === n);
115
+ if (!C)
116
+ return;
117
+ const y = [];
118
+ $[c].forEach((v) => {
119
+ y.push(e.meta.yDataByKeys[n][v]), delete e.meta.yDataByKeys[n][v];
120
+ });
121
+ const h = C.type === "continuous" ? X(t.method, y) : R(y);
122
+ e.meta.yDataByKeys[n][c] = h;
123
+ });
124
+ })), t.x && (e.facets[m].xKeys = Object.keys(b), e.facets[m].xKeysByGroups = { null: e.facets[m].xKeys }, e.meta.xLabels = e.meta.xGroupLabels, e.meta.xGroupKeys = ["null"], e.meta.xGroupKeyValues = { null: ["null"] }), t.y && (e.facets[m].yKeys = Object.keys(f), e.facets[m].yKeysByGroups = { null: e.facets[m].yKeys }, e.meta.yLabels = e.meta.yGroupLabels, e.meta.yGroupKeys = ["null"], e.meta.yGroupKeyValues = { null: ["null"] });
125
+ }), e.meta.valueExtent = d;
126
+ }
127
+ }
128
+ function ce(e, t) {
129
+ var u, l;
130
+ for (const r of e.meta.valueSources)
131
+ e.meta.valueExtent[r][0] = Math.min((u = t.normalizedValue) == null ? void 0 : u[r], e.meta.valueExtent[r][0]), e.meta.valueExtent[r][1] = Math.max((l = t.normalizedValue) == null ? void 0 : l[r], e.meta.valueExtent[r][1]);
132
+ }
133
+ function ye(e, t) {
134
+ if (Object.values(t).length) {
135
+ const u = e.meta.valueSources.reduce((l, r) => (t[r] && (l[r] = [1 / 0, -1 / 0]), l), {});
136
+ e.meta.facetKeys.forEach((l) => {
137
+ const { xKeys: r, yKeys: d, cells: m } = e.facets[l];
138
+ for (const i of e.meta.valueSources) {
139
+ const B = t[i];
140
+ if (!B)
141
+ continue;
142
+ const O = B.direction === "row" ? r : d, q = B.direction === "row" ? d : r, w = B.direction === "row" ? (b, f) => {
143
+ var E;
144
+ return (E = m[b]) == null ? void 0 : E[f];
145
+ } : (b, f) => {
146
+ var E;
147
+ return (E = m[f]) == null ? void 0 : E[b];
148
+ };
149
+ q.forEach((b) => {
150
+ const f = [];
151
+ O.forEach(($) => {
152
+ var S, D;
153
+ const c = (D = (S = w($, b)) == null ? void 0 : S.value) == null ? void 0 : D[i];
154
+ c !== void 0 && f.push(c);
155
+ });
156
+ const E = ne(B.method, f);
157
+ O.forEach(($) => {
158
+ var S, D, c;
159
+ const n = w($, b);
160
+ n !== void 0 && (n.normalizedValue[i] = E((S = n.value) == null ? void 0 : S[i]), u[i][0] = Math.min((D = n.normalizedValue) == null ? void 0 : D[i], u[i][0]), u[i][1] = Math.max((c = n.normalizedValue) == null ? void 0 : c[i], u[i][1]));
161
+ });
162
+ });
163
+ }
164
+ }), e.meta.valueExtent = { ...e.meta.valueExtent, valueExtent: u };
165
+ }
166
+ }
167
+ function de(e, t, u, l, r, d, m, i, B, O, q, w, b, f, E, $, S) {
168
+ const D = d.length ? d.map((a) => f[a.value] ?? t.getColumnCategories(a.value)) : [["null"]], c = m.length ? m.map((a) => f[a.value] ?? t.getColumnCategories(a.value)) : [["null"]], n = i.length ? i.map((a) => f[a.value] ?? t.getColumnCategories(a.value)) : [["null"]], C = Y(D), y = Y(c), h = Y(n), v = C.map(k), V = y.map(k), G = h.map(k);
169
+ e.meta.facetKeys = v, e.meta.xGroupKeys = V, e.meta.yGroupKeys = G, e.meta.facetKeyValues = v.reduce((a, o, p) => (a[o] = C[p], a), {}), e.meta.xGroupKeyValues = V.reduce((a, o, p) => (a[o] = y[p], a), {}), e.meta.yGroupKeyValues = G.reduce((a, o, p) => (a[o] = h[p], a), {});
170
+ const j = u.valueLabels ?? u.value, _ = l.valueLabels ?? l.value, F = B.filter((a) => a.axis === "x").map((a) => a.valueColumn.valueLabels ?? a.valueColumn.value), U = B.filter((a) => a.axis === "y").map((a) => a.valueColumn.valueLabels ?? a.valueColumn.value), W = Object.values(O ?? {}).map((a) => a.value), Z = Object.values(q ?? {}).map((a) => a.value), J = g.uniq([...F, ...W, j]), N = g.uniq([...U, ...Z, _]);
171
+ for (let a = 0; a < t.rowsCount; a++) {
172
+ const o = k(d.map((s) => t.getColumnValue(s.value, a))), p = k(m.map((s) => t.getColumnValue(s.value, a))), L = k(i.map((s) => t.getColumnValue(s.value, a))), z = m.map((s) => t.getColumnValue(s.valueLabels ?? s.value, a)).join(", "), ee = i.map((s) => t.getColumnValue(s.valueLabels ?? s.value, a)).join(", ");
173
+ e.meta.xGroupLabels[p] = z, e.meta.yGroupLabels[L] = ee;
174
+ const K = String(t.getColumnValue(u.value, a)), x = String(t.getColumnValue(l.value, a)), I = e.meta.valueSources.reduce((s, M) => (s[M] = t.getColumnValue(r[M].value, a) ?? b, s), {});
175
+ if (K === "null" || x === "null" || Object.values(I).every((s) => s === null))
176
+ continue;
177
+ e.facets[o] || (e.facets[o] = {
178
+ xKeys: [],
179
+ yKeys: [],
180
+ xKeysByGroups: {},
181
+ yKeysByGroups: {},
182
+ cells: {}
183
+ }), e.facets[o].xKeysByGroups[p] || (e.facets[o].xKeysByGroups[p] = []), e.facets[o].yKeysByGroups[L] || (e.facets[o].yKeysByGroups[L] = []), e.facets[o].xKeys.push(K), e.facets[o].yKeys.push(x), e.facets[o].xKeysByGroups[p].push(K), e.facets[o].yKeysByGroups[L].push(x), e.facets[o].cells[K] || (e.facets[o].cells[K] = {});
184
+ for (const s of e.meta.valueSources)
185
+ if (e.facets[o].cells[K][x] && e.facets[o].cells[K][x].value[s] !== I[s])
186
+ throw Error(`More than 1 value for x=${K}, y=${x}`);
187
+ const P = t.getColumnValue(j, a);
188
+ if (e.meta.xLabels[K] && String(P) !== e.meta.xLabels[K])
189
+ throw Error(`More than 1 x-label value for x=${K}`);
190
+ const Q = t.getColumnValue(_, a);
191
+ if (e.meta.yLabels[x] && String(Q) !== e.meta.yLabels[x])
192
+ throw Error(`More than 1 y-label value for y=${x}`);
193
+ e.meta.xLabels[K] = String(P), e.meta.yLabels[x] = String(Q), J.forEach((s) => {
194
+ const M = typeof e.meta.xDataByKeys[s] < "u", A = M && typeof e.meta.xDataByKeys[s][K] < "u";
195
+ if (M || (e.meta.xDataByKeys[s] = {}), A && e.meta.xDataByKeys[s][K] !== t.getColumnValue(s, a))
196
+ throw Error(`More than 1 value for x = ${K} and column = ${s}`);
197
+ A || (e.meta.xDataByKeys[s][K] = t.getColumnValue(s, a));
198
+ }), N.forEach((s) => {
199
+ const M = typeof e.meta.yDataByKeys[s] < "u", A = M && typeof e.meta.yDataByKeys[s][x] < "u";
200
+ if (M || (e.meta.yDataByKeys[s] = {}), A && e.meta.yDataByKeys[s][x] !== t.getColumnValue(s, a))
201
+ throw Error(`More than 1 value for y = ${x} and column = ${s}`);
202
+ A || (e.meta.yDataByKeys[s][x] = t.getColumnValue(s, a));
203
+ }), e.facets[o].cells[K][x] = {
204
+ isCell: !0,
205
+ idx: a,
206
+ id: `${K}_${x}`,
207
+ x: K,
208
+ y: x,
209
+ value: I,
210
+ normalizedValue: I
211
+ }, ce(e, e.facets[o].cells[K][x]);
212
+ }
213
+ e.meta.facetKeys = e.meta.facetKeys.filter((a) => e.facets[a]), e.meta.facetKeys.forEach((a) => {
214
+ const o = e.facets[a], p = g.uniq(o.xKeys), L = g.uniq(o.yKeys);
215
+ o.xKeys = f[u.value] ? g.intersection(f[u.value], p) : p, o.yKeys = f[l.value] ? g.intersection(f[l.value], L) : L, V.forEach((z) => {
216
+ e.facets[a].xKeysByGroups[z] = g.intersection(
217
+ o.xKeys,
218
+ e.facets[a].xKeysByGroups[z]
219
+ );
220
+ }), G.forEach((z) => {
221
+ e.facets[a].yKeysByGroups[z] = g.intersection(
222
+ o.yKeys,
223
+ e.facets[a].yKeysByGroups[z]
224
+ );
225
+ });
226
+ }), re(e, S, J, N, B), ye(e, w), e.meta.xKeysByGroups = e.meta.xGroupKeys.reduce((a, o) => {
227
+ const p = T(g.uniq(
228
+ g.flatten(e.meta.facetKeys.map((L) => e.facets[L].xKeysByGroups[o]))
229
+ ), E.sorting, e.meta.xLabels);
230
+ return a[o] = f[u.value] ? g.intersection(f[u.value], p) : p, a;
231
+ }, {}), e.meta.xKeys = e.meta.xGroupKeys.reduce((a, o) => (a = a.concat(e.meta.xKeysByGroups[o]), a), []), e.meta.yKeysByGroups = e.meta.yGroupKeys.reduce((a, o) => {
232
+ const p = T(g.uniq(
233
+ g.flatten(e.meta.facetKeys.map((L) => e.facets[L].yKeysByGroups[o]))
234
+ ), $.sorting, e.meta.yLabels);
235
+ return a[o] = f[l.value] ? g.intersection(f[l.value], p) : p, a;
236
+ }, {}), e.meta.yKeys = e.meta.yGroupKeys.reduce((a, o) => (a = a.concat(e.meta.yKeysByGroups[o]), a), []);
237
+ for (const a of e.meta.valueSources)
238
+ e.meta.valueExtent[a][0] === 1 / 0 && (e.meta.valueExtent[a][0] = 0), e.meta.valueExtent[a][1] === -1 / 0 && (e.meta.valueExtent[a][1] = 0);
239
+ return e;
240
+ }
241
+ export {
242
+ de as fillCellsData
243
+ };
244
+ //# sourceMappingURL=fillCellsData.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fillCellsData.js","sources":["../../../../../../node_modules/@milaboratories/miplots4/src/heatmap/fillCellsData.ts"],"sourcesContent":["import { deviation, extent, mean, quantileSorted } from 'd3-array';\nimport lodash from 'lodash';\nimport type { DataFrame } from '../DataFrame';\nimport type { AggregationMethod, ColumnName, DataValue, NormalizationMethod } from '../types';\nimport type { HeatmapSettingsImpl } from './HeatmapSettingsImpl';\nimport { exhaustive } from '../utils';\nimport { getFacetOrGroupKey } from '../utils/getFacetOrGroupKey';\nimport type { BubbleSettingsImpl } from '../bubble/BubbleSettingsImpl';\n\nexport type Cell<T extends string> = {\n isCell: true;\n idx: number;\n id: string;\n value: Record<T, DataValue>;\n normalizedValue: Record<T, DataValue>;\n x: DataValue;\n y: DataValue;\n};\n\nexport type GroupedCellsData<T extends string> = {\n meta: {\n valueSources: T[]; // dataSource for heatmap, color and size for bubble - main data for every cell\n\n facetKeys: string[];\n xGroupKeys: string[];\n yGroupKeys: string[];\n\n xKeys: string[];\n yKeys: string[];\n xKeysByGroups: Record<string, string[]>;\n yKeysByGroups: Record<string, string[]>;\n\n // for titles, if facet by more 1 columns title has several values separated by commas\n facetKeyValues: Record<string, string[]>;\n xGroupKeyValues: Record<string, string[]>;\n yGroupKeyValues: Record<string, string[]>;\n\n xLabels: Record<string, string>;\n yLabels: Record<string, string>;\n xGroupLabels: Record<string, string>;\n yGroupLabels: Record<string, string>;\n\n valueExtent: Record<T, [number, number]>; // for color/size scales\n // data for labels, annotations and dendrograms\n xDataByKeys: Record<string, Record<string, DataValue>>;\n yDataByKeys: Record<string, Record<string, DataValue>>;\n };\n //facet groups\n facets: Record<\n string,\n {\n // axis keys\n xKeys: string[];\n yKeys: string[];\n // axis keys grouped by group keys from meta\n xKeysByGroups: Record<string, string[]>;\n yKeysByGroups: Record<string, string[]>;\n // cells grouped by X, then by Y\n cells: Record<string, Record<string, Cell<T>>>;\n }\n >;\n};\n\nfunction normalizeByStd(values: number[]) {\n const stdValue = deviation(values);\n const meanValue = mean(values);\n\n if (stdValue === undefined || meanValue === undefined || stdValue === 0) {\n return (v: number) => v;\n }\n return (v: number) => (v - meanValue) / stdValue;\n}\nfunction normalizeByMinMax(values: number[]) {\n const meanValue = mean(values);\n const [min, max] = extent(values);\n if (meanValue === undefined || min === undefined || max === undefined || max === min) {\n return (v: number) => v;\n }\n return (v: number) => (v - meanValue) / (max - min);\n}\n\nfunction getNormalizationFn(method: NormalizationMethod, values: number[]) {\n if (method === 'standardScaling') {\n return normalizeByStd(values);\n }\n if (method === 'meanNormalization') {\n return normalizeByMinMax(values);\n }\n return (v: number) => v;\n}\n\nfunction aggregateNumeric(method: AggregationMethod, values: number[]) {\n switch (method) {\n case 'max': {\n let res = values[0];\n for (const v of values) {\n res = Math.max(res, v);\n }\n return res;\n }\n case 'min': {\n let res = values[0];\n for (const v of values) {\n res = Math.min(res, v);\n }\n return res;\n }\n case 'median': {\n const valuesSorted = values.sort((a, b) => a - b);\n return quantileSorted(valuesSorted, 0.5) as number;\n }\n case 'mean': {\n return mean(values) ?? values[0];\n }\n default: exhaustive(method, `Unknown aggregation function ${method}`);\n }\n}\nfunction aggregateString(values: string[]) {\n const list = [...new Set(values)].sort();\n if (list.length > 3) {\n return [...list.slice(0, 3), '...'].join(', ');\n }\n return list.join(', ');\n}\n\n// all combinations with 1 key from each list\nfunction getKeysCombinations(keysLists: string[][]) {\n if (!keysLists.length) {\n return [];\n }\n let result: string[][] = [[]];\n keysLists.forEach(keys => {\n const nextResult: string[][] = [];\n keys.forEach(key => {\n nextResult.push(...result.map(resultItem => [...resultItem, key]));\n });\n result = nextResult;\n });\n return result;\n}\nconst sortByLabels = (arr: string[], direction: 'asc' | 'desc', labels: Record<string, string> = {}) => {\n return arr.sort((a, b) => direction === 'asc'\n ? (labels[a] ?? a).localeCompare((labels[b] ?? b), 'en', { numeric: true })\n : (labels[b] ?? b).localeCompare((labels[a] ?? a), 'en', { numeric: true })\n );\n};\nfunction applyAggregation<T extends string>(\n result: GroupedCellsData<T>,\n aggregation: HeatmapSettingsImpl['aggregation'],\n additionalDataColumnsX: string[],\n additionalDataColumnsY: string[],\n annotations: HeatmapSettingsImpl['annotations']\n) {\n if (aggregation.x || aggregation.y) {\n const valueExtent: GroupedCellsData<T>['meta']['valueExtent'] = result.meta.valueSources.reduce((r, key) => {\n r[key] = [Infinity, -Infinity] as [number, number];\n return r;\n }, {} as GroupedCellsData<T>['meta']['valueExtent']);\n result.meta.facetKeys.forEach(facetKey => {\n const { xKeys, yKeys, cells, xKeysByGroups, yKeysByGroups } = result.facets[facetKey];\n const xGroups = aggregation.x ? xKeysByGroups : xKeys.reduce((res, xKey) => { res[xKey] = [xKey]; return res; }, {} as Record<string, string[]>);\n const yGroups = aggregation.y ? yKeysByGroups : yKeys.reduce((res, yKey) => { res[yKey] = [yKey]; return res; }, {} as Record<string, string[]>);\n const xNewKeys = Object.keys(xGroups);\n const yNewKeys = Object.keys(yGroups);\n\n for (const xGroupKey of xNewKeys) {\n for (const yGroupKey of yNewKeys) {\n // collect values for aggregation to arrays\n const valuesBySources: Record<T, number[]> = result.meta.valueSources.reduce((r, v) => {\n r[v] = [];\n return r;\n }, {} as Record<T, number[]>);\n xGroups[xGroupKey].forEach((xKey) => {\n yGroups[yGroupKey].forEach((yKey) => {\n for (const valueSource of result.meta.valueSources) {\n const cellValue = cells[xKey]?.[yKey]?.value?.[valueSource];\n if (cellValue !== undefined) {\n valuesBySources[valueSource].push(cellValue as number);\n }\n }\n delete cells[xKey]?.[yKey];\n });\n });\n // create new cells with aggregated values\n for (const valueSource of result.meta.valueSources) {\n const values = valuesBySources[valueSource];\n if (values.length > 0) {\n const value = aggregateNumeric(aggregation.method, values);\n if (!result.facets[facetKey].cells[xGroupKey]) {\n result.facets[facetKey].cells[xGroupKey] = {};\n }\n if (!result.facets[facetKey].cells[xGroupKey][yGroupKey]) {\n result.facets[facetKey].cells[xGroupKey][yGroupKey] = {\n isCell: true,\n idx: 0,\n id: `${xGroupKey}_${yGroupKey}`,\n x: xGroupKey,\n y: yGroupKey,\n value: result.meta.valueSources.reduce((r, v) => { r[v] = null; return r; }, {} as Record<T, DataValue>),\n normalizedValue: result.meta.valueSources.reduce((r, v) => { r[v] = null; return r; }, {} as Record<T, DataValue>),\n };\n }\n const cell = result.facets[facetKey].cells[xGroupKey][yGroupKey];\n cell.value[valueSource] = value;\n cell.normalizedValue[valueSource] = value;\n\n valueExtent[valueSource][0] = Math.min(cell.normalizedValue?.[valueSource], valueExtent[valueSource][0]);\n valueExtent[valueSource][1] = Math.max(cell.normalizedValue?.[valueSource], valueExtent[valueSource][1]);\n }\n }\n }\n }\n // add aggregated values for X annotations\n if (aggregation.x) {\n xNewKeys.forEach(xGroupKey => {\n additionalDataColumnsX.forEach(columnKey => {\n const annotation = annotations.find((v) => v.valueColumn.value === columnKey || v.valueColumn.valueLabels === columnKey);\n if (!annotation) {\n return;\n }\n const values: DataValue[] = [];\n xGroups[xGroupKey].forEach((xKey) => {\n values.push(result.meta.xDataByKeys[columnKey][xKey]);\n delete result.meta.xDataByKeys[columnKey][xKey];\n });\n const value = annotation.type === 'continuous' ? aggregateNumeric(aggregation.method, values as number[]) : aggregateString(values as string[]);\n result.meta.xDataByKeys[columnKey][xGroupKey] = value;\n });\n });\n }\n // add aggregated values for Y annotations\n if (aggregation.y) {\n additionalDataColumnsY.forEach(columnKey => {\n result.meta.yDataByKeys[columnKey] = {};\n });\n yNewKeys.forEach(yGroupKey => {\n additionalDataColumnsY.forEach(columnKey => {\n const annotation = annotations.find((v) => v.valueColumn.value === columnKey || v.valueColumn.valueLabels === columnKey);\n if (!annotation) {\n return;\n }\n const values: DataValue[] = [];\n yGroups[yGroupKey].forEach((yKey) => {\n values.push(result.meta.yDataByKeys[columnKey][yKey]);\n delete result.meta.yDataByKeys[columnKey][yKey];\n });\n const value = annotation.type === 'continuous' ? aggregateNumeric(aggregation.method, values as number[]) : aggregateString(values as string[]);\n result.meta.yDataByKeys[columnKey][yGroupKey] = value;\n });\n });\n }\n // erase grouping - we aggregated by them and now there is no grouping in the chart;\n // replace axis keys with group keys - now group keys are new axis keys\n if (aggregation.x) {\n result.facets[facetKey].xKeys = Object.keys(xKeysByGroups);\n result.facets[facetKey].xKeysByGroups = { 'null': result.facets[facetKey].xKeys };\n result.meta.xLabels = result.meta.xGroupLabels;\n result.meta.xGroupKeys = ['null'];\n result.meta.xGroupKeyValues = { null: ['null'] };\n }\n if (aggregation.y) {\n result.facets[facetKey].yKeys = Object.keys(yKeysByGroups);\n result.facets[facetKey].yKeysByGroups = { 'null': result.facets[facetKey].yKeys };\n result.meta.yLabels = result.meta.yGroupLabels;\n result.meta.yGroupKeys = ['null'];\n result.meta.yGroupKeyValues = { null: ['null'] };\n }\n });\n result.meta.valueExtent = valueExtent;\n }\n}\n\nfunction updateValueExtent<T extends string>(result: GroupedCellsData<T>, cell: Cell<T>) {\n for (const valueSource of result.meta.valueSources) {\n result.meta.valueExtent[valueSource][0] = Math.min(cell.normalizedValue?.[valueSource] as number, result.meta.valueExtent[valueSource][0]);\n result.meta.valueExtent[valueSource][1] = Math.max(cell.normalizedValue?.[valueSource] as number, result.meta.valueExtent[valueSource][1]);\n }\n\n}\nfunction applyNormalization<T extends string>(\n result: GroupedCellsData<T>,\n normalizationBySources: Record<T, HeatmapSettingsImpl['normalization']>,\n) {\n if (Object.values(normalizationBySources).length) {\n const valueExtent: GroupedCellsData<T>['meta']['valueExtent'] = result.meta.valueSources.reduce((r, key) => {\n if (normalizationBySources[key]) {\n r[key] = [Infinity, -Infinity] as [number, number];\n }\n return r;\n }, {} as GroupedCellsData<T>['meta']['valueExtent']);\n result.meta.facetKeys.forEach(facetKey => {\n const { xKeys, yKeys, cells } = result.facets[facetKey];\n\n for (const valueSource of result.meta.valueSources) {\n const normalization = normalizationBySources[valueSource];\n if (!normalization) {\n continue;\n }\n const cellKeys = normalization.direction === 'row' ? xKeys : yKeys;\n const groupKeys = normalization.direction === 'row' ? yKeys : xKeys;\n const cellGetter = normalization.direction === 'row'\n ? (cellKey: string, groupKey: string) => cells[cellKey]?.[groupKey]\n : (cellKey: string, groupKey: string) => cells[groupKey]?.[cellKey];\n groupKeys.forEach((groupKey) => {\n const values: number[] = [];\n cellKeys.forEach((cellKey) => {\n const v = cellGetter(cellKey, groupKey)?.value?.[valueSource];\n if (v !== undefined) {\n values.push(v as number);\n }\n });\n const normalize = getNormalizationFn(normalization.method, values);\n cellKeys.forEach((cellKey) => {\n const cell = cellGetter(cellKey, groupKey);\n if (cell !== undefined) {\n cell.normalizedValue[valueSource] = normalize(cell.value?.[valueSource] as number);\n valueExtent[valueSource][0] = Math.min(cell.normalizedValue?.[valueSource], valueExtent[valueSource][0]);\n valueExtent[valueSource][1] = Math.max(cell.normalizedValue?.[valueSource], valueExtent[valueSource][1]);\n }\n });\n });\n }\n\n });\n result.meta.valueExtent = {...result.meta.valueExtent, valueExtent};\n }\n}\n\nexport function fillCellsData<T extends string>(\n result: GroupedCellsData<T>,\n data: DataFrame,\n xColumn: ColumnName,\n yColumn: ColumnName,\n valueColumns: Record<string, ColumnName>,\n facetBy: ColumnName[],\n xGroupBy: ColumnName[],\n yGroupBy: ColumnName[],\n annotations: HeatmapSettingsImpl['annotations'],\n dendrogramX: HeatmapSettingsImpl['dendrogramX'],\n dendrogramY: HeatmapSettingsImpl['dendrogramY'],\n normalizationBySource: Record<T, HeatmapSettingsImpl['normalization']>, // separated for color and size for example\n NAValueAs: HeatmapSettingsImpl['NAValueAs'],\n keysOrder: HeatmapSettingsImpl['keysOrder'],\n xAxis: HeatmapSettingsImpl['chartSettings']['xAxis'] | BubbleSettingsImpl['chartSettings']['xAxis'],\n yAxis: HeatmapSettingsImpl['chartSettings']['yAxis'] | BubbleSettingsImpl['chartSettings']['yAxis'],\n aggregation: HeatmapSettingsImpl['aggregation'],\n) {\n const facetKeysLists = facetBy.length\n ? facetBy.map(column => keysOrder[column.value] ?? data.getColumnCategories(column.value))\n : [['null']];\n const xGroupKeysLists = xGroupBy.length\n ? xGroupBy.map(column => keysOrder[column.value] ?? data.getColumnCategories(column.value))\n : [['null']];\n const yGroupKeysLists = yGroupBy.length\n ? yGroupBy.map(column => keysOrder[column.value] ?? data.getColumnCategories(column.value))\n : [['null']];\n const facetKeysCombinations = getKeysCombinations(facetKeysLists);\n const xGroupKeysCombinations = getKeysCombinations(xGroupKeysLists);\n const yGroupKeysCombinations = getKeysCombinations(yGroupKeysLists);\n\n const facetKeys = facetKeysCombinations.map(getFacetOrGroupKey);\n const xGroupKeys = xGroupKeysCombinations.map(getFacetOrGroupKey);\n const yGroupKeys = yGroupKeysCombinations.map(getFacetOrGroupKey);\n\n result.meta.facetKeys = facetKeys;\n result.meta.xGroupKeys = xGroupKeys;\n result.meta.yGroupKeys = yGroupKeys;\n result.meta.facetKeyValues = facetKeys.reduce((res: Record<string, string[]>, key, index) => {\n res[key] = facetKeysCombinations[index];\n return res;\n }, {});\n result.meta.xGroupKeyValues = xGroupKeys.reduce((res: Record<string, string[]>, key, index) => {\n res[key] = xGroupKeysCombinations[index];\n return res;\n }, {});\n result.meta.yGroupKeyValues = yGroupKeys.reduce((res: Record<string, string[]>, key, index) => {\n res[key] = yGroupKeysCombinations[index];\n return res;\n }, {});\n\n const xLabelsSource = xColumn.valueLabels ?? xColumn.value;\n const yLabelsSource = yColumn.valueLabels ?? yColumn.value;\n const annotationColumnsX = annotations.filter(item => item.axis === 'x').map(item => item.valueColumn.valueLabels ?? item.valueColumn.value);\n const annotationColumnsY = annotations.filter(item => item.axis === 'y').map(item => item.valueColumn.valueLabels ?? item.valueColumn.value);\n const dendrogramXColumns = Object.values(dendrogramX ?? {}).map(column => column.value);\n const dendrogramYColumns = Object.values(dendrogramY ?? {}).map(column => column.value);\n const additionalDataColumnsX = lodash.uniq([...annotationColumnsX, ...dendrogramXColumns, xLabelsSource]);\n const additionalDataColumnsY = lodash.uniq([...annotationColumnsY, ...dendrogramYColumns, yLabelsSource]);\n\n for (let i = 0; i < data.rowsCount; i++) {\n const facetKey = getFacetOrGroupKey(facetBy.map(column => data.getColumnValue(column.value, i)));\n const xGroupKey = getFacetOrGroupKey(xGroupBy.map(column => data.getColumnValue(column.value, i)));\n const yGroupKey = getFacetOrGroupKey(yGroupBy.map(column => data.getColumnValue(column.value, i)));\n const xGroupLabel = xGroupBy.map(column => data.getColumnValue(column.valueLabels ?? column.value, i)).join(', ');\n const yGroupLabel = yGroupBy.map(column => data.getColumnValue(column.valueLabels ?? column.value, i)).join(', ');\n result.meta.xGroupLabels[xGroupKey] = xGroupLabel;\n result.meta.yGroupLabels[yGroupKey] = yGroupLabel;\n const x = String(data.getColumnValue(xColumn.value, i));\n const y = String(data.getColumnValue(yColumn.value, i));\n\n const values = result.meta.valueSources.reduce((r, key) => {\n r[key] = (data.getColumnValue(valueColumns[key].value, i) ?? NAValueAs) as number | null;\n return r;\n }, {} as Record<string, DataValue>);\n\n if (x === 'null' || y === 'null' || Object.values(values).every(v => v === null)) {\n continue;\n }\n\n if (!result.facets[facetKey]) {\n result.facets[facetKey] = {\n xKeys: [],\n yKeys: [],\n xKeysByGroups: {},\n yKeysByGroups: {},\n cells: {},\n };\n }\n if (!result.facets[facetKey].xKeysByGroups[xGroupKey]) {\n result.facets[facetKey].xKeysByGroups[xGroupKey] = [];\n }\n if (!result.facets[facetKey].yKeysByGroups[yGroupKey]) {\n result.facets[facetKey].yKeysByGroups[yGroupKey] = [];\n }\n result.facets[facetKey].xKeys.push(x);\n result.facets[facetKey].yKeys.push(y);\n result.facets[facetKey].xKeysByGroups[xGroupKey].push(x);\n result.facets[facetKey].yKeysByGroups[yGroupKey].push(y);\n\n if (!result.facets[facetKey].cells[x]) {\n result.facets[facetKey].cells[x] = {};\n }\n\n for (const valueSource of result.meta.valueSources) {\n if (result.facets[facetKey].cells[x][y] && result.facets[facetKey].cells[x][y].value[valueSource] !== values[valueSource]) {\n throw Error(`More than 1 value for x=${x}, y=${y}`);\n }\n }\n\n const xLabelsSourceValue = data.getColumnValue(xLabelsSource, i);\n if (result.meta.xLabels[x] && String(xLabelsSourceValue) !== result.meta.xLabels[x]) {\n throw Error(`More than 1 x-label value for x=${x}`);\n }\n const yLabelsSourceValue = data.getColumnValue(yLabelsSource, i);\n if (result.meta.yLabels[y] && String(yLabelsSourceValue) !== result.meta.yLabels[y]) {\n throw Error(`More than 1 y-label value for y=${y}`);\n }\n result.meta.xLabels[x] = String(xLabelsSourceValue);\n result.meta.yLabels[y] = String(yLabelsSourceValue);\n // data for labels, annotations and dendrograms by X\n additionalDataColumnsX.forEach(columnKey => {\n const isAddedColumn = typeof result.meta.xDataByKeys[columnKey] !== 'undefined';\n const isAddedValue = isAddedColumn && typeof result.meta.xDataByKeys[columnKey][x] !== 'undefined';\n if (!isAddedColumn) {\n result.meta.xDataByKeys[columnKey] = {};\n }\n if (isAddedValue && result.meta.xDataByKeys[columnKey][x] !== data.getColumnValue(columnKey, i)) {\n throw Error(`More than 1 value for x = ${x} and column = ${columnKey}`);\n }\n if (!isAddedValue) {\n result.meta.xDataByKeys[columnKey][x] = data.getColumnValue(columnKey, i);\n }\n });\n // data for labels, annotations and dendrograms by Y\n additionalDataColumnsY.forEach(columnKey => {\n const isAddedColumn = typeof result.meta.yDataByKeys[columnKey] !== 'undefined';\n const isAddedValue = isAddedColumn && typeof result.meta.yDataByKeys[columnKey][y] !== 'undefined';\n if (!isAddedColumn) {\n result.meta.yDataByKeys[columnKey] = {};\n }\n if (isAddedValue && result.meta.yDataByKeys[columnKey][y] !== data.getColumnValue(columnKey, i)) {\n throw Error(`More than 1 value for y = ${y} and column = ${columnKey}`);\n }\n if (!isAddedValue) {\n result.meta.yDataByKeys[columnKey][y] = data.getColumnValue(columnKey, i);\n }\n });\n result.facets[facetKey].cells[x][y] = {\n isCell: true,\n idx: i,\n id: `${x}_${y}`,\n x,\n y,\n value: values,\n normalizedValue: values,\n };\n\n updateValueExtent(result, result.facets[facetKey].cells[x][y]);\n }\n\n result.meta.facetKeys = result.meta.facetKeys.filter((key) => result.facets[key]); // filter only used;\n\n // make uniq x, y, x-group and y-group keys\n result.meta.facetKeys.forEach(facetKey => {\n const facet = result.facets[facetKey];\n const uniqueXKeys = lodash.uniq(facet.xKeys);\n const uniqueYKeys = lodash.uniq(facet.yKeys);\n facet.xKeys = keysOrder[xColumn.value] ? lodash.intersection(keysOrder[xColumn.value], uniqueXKeys) : uniqueXKeys;\n facet.yKeys = keysOrder[yColumn.value] ? lodash.intersection(keysOrder[yColumn.value], uniqueYKeys) : uniqueYKeys;\n xGroupKeys.forEach(xGroupKey => {\n result.facets[facetKey].xKeysByGroups[xGroupKey] = lodash.intersection(\n facet.xKeys,\n result.facets[facetKey].xKeysByGroups[xGroupKey]\n );\n });\n yGroupKeys.forEach(yGroupKey => {\n result.facets[facetKey].yKeysByGroups[yGroupKey] = lodash.intersection(\n facet.yKeys,\n result.facets[facetKey].yKeysByGroups[yGroupKey]\n );\n });\n });\n\n applyAggregation(result, aggregation, additionalDataColumnsX, additionalDataColumnsY, annotations);\n applyNormalization(result, normalizationBySource);\n\n // every facet may contain not all of available keys, but for shared axes it is necessary to have all of them\n result.meta.xKeysByGroups = result.meta.xGroupKeys.reduce((res: Record<string, string[]>, xGroupKey) => {\n const existingXKeys = sortByLabels(lodash.uniq(\n lodash.flatten(result.meta.facetKeys.map(facetKey => result.facets[facetKey].xKeysByGroups[xGroupKey]))\n ), xAxis.sorting, result.meta.xLabels);\n res[xGroupKey] = keysOrder[xColumn.value] ? lodash.intersection(keysOrder[xColumn.value], existingXKeys) : existingXKeys;\n return res;\n }, {});\n result.meta.xKeys = result.meta.xGroupKeys.reduce((res: string[], xGroupKey: string) => {\n res = res.concat(result.meta.xKeysByGroups[xGroupKey]);\n return res;\n }, []);\n\n result.meta.yKeysByGroups = result.meta.yGroupKeys.reduce((res: Record<string, string[]>, yGroupKey) => {\n const existingYKeys = sortByLabels(lodash.uniq(\n lodash.flatten(result.meta.facetKeys.map(facetKey => result.facets[facetKey].yKeysByGroups[yGroupKey]))\n ), yAxis.sorting, result.meta.yLabels);\n res[yGroupKey] = keysOrder[yColumn.value] ? lodash.intersection(keysOrder[yColumn.value], existingYKeys) : existingYKeys;\n return res;\n }, {});\n result.meta.yKeys = result.meta.yGroupKeys.reduce((res: string[], yGroupKey: string) => {\n res = res.concat(result.meta.yKeysByGroups[yGroupKey]);\n return res;\n }, []);\n\n for (const valueSource of result.meta.valueSources) {\n // avoid render errors on empty data\n if (result.meta.valueExtent[valueSource][0] === Infinity) {\n result.meta.valueExtent[valueSource][0] = 0;\n }\n if (result.meta.valueExtent[valueSource][1] === -Infinity) {\n result.meta.valueExtent[valueSource][1] = 0;\n }\n }\n\n return result;\n}"],"names":["normalizeByStd","values","stdValue","deviation","meanValue","mean","v","normalizeByMinMax","min","max","extent","getNormalizationFn","method","aggregateNumeric","res","valuesSorted","a","b","quantileSorted","exhaustive","aggregateString","list","getKeysCombinations","keysLists","result","keys","nextResult","key","resultItem","sortByLabels","arr","direction","labels","applyAggregation","aggregation","additionalDataColumnsX","additionalDataColumnsY","annotations","valueExtent","r","facetKey","xKeys","yKeys","cells","xKeysByGroups","yKeysByGroups","xGroups","xKey","yGroups","yKey","xNewKeys","yNewKeys","xGroupKey","yGroupKey","valuesBySources","valueSource","cellValue","_c","_b","_a","_d","value","cell","columnKey","annotation","updateValueExtent","applyNormalization","normalizationBySources","normalization","cellKeys","groupKeys","cellGetter","cellKey","groupKey","normalize","fillCellsData","data","xColumn","yColumn","valueColumns","facetBy","xGroupBy","yGroupBy","dendrogramX","dendrogramY","normalizationBySource","NAValueAs","keysOrder","xAxis","yAxis","facetKeysLists","column","xGroupKeysLists","yGroupKeysLists","facetKeysCombinations","xGroupKeysCombinations","yGroupKeysCombinations","facetKeys","getFacetOrGroupKey","xGroupKeys","yGroupKeys","index","xLabelsSource","yLabelsSource","annotationColumnsX","item","annotationColumnsY","dendrogramXColumns","dendrogramYColumns","lodash","i","xGroupLabel","yGroupLabel","x","y","xLabelsSourceValue","yLabelsSourceValue","isAddedColumn","isAddedValue","facet","uniqueXKeys","uniqueYKeys","existingXKeys","existingYKeys"],"mappings":"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","x_google_ignoreList":[0]}