@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.
- package/dist/GraphMaker/constantsCommon.d.ts +3 -0
- package/dist/GraphMaker/constantsCommon.d.ts.map +1 -1
- package/dist/GraphMaker/constantsCommon.js +9 -6
- package/dist/GraphMaker/constantsCommon.js.map +1 -1
- package/dist/GraphMaker/forms/DataMappingForm/BubbleForm.vue.d.ts.map +1 -1
- package/dist/GraphMaker/forms/DataMappingForm/BubbleForm.vue.js +60 -56
- package/dist/GraphMaker/forms/DataMappingForm/BubbleForm.vue.js.map +1 -1
- package/dist/GraphMaker/forms/LayersForm/Layer/Bubble.vue.d.ts.map +1 -1
- package/dist/GraphMaker/forms/LayersForm/Layer/Bubble.vue.js +86 -58
- package/dist/GraphMaker/forms/LayersForm/Layer/Bubble.vue.js.map +1 -1
- package/dist/GraphMaker/forms/LayersForm/Layer/heatmap/Heatmap.vue.js +109 -112
- package/dist/GraphMaker/forms/LayersForm/Layer/heatmap/Heatmap.vue.js.map +1 -1
- package/dist/GraphMaker/utils/createChartSettingsForRender/composeBubbleSettings.d.ts +20 -0
- package/dist/GraphMaker/utils/createChartSettingsForRender/composeBubbleSettings.d.ts.map +1 -1
- package/dist/GraphMaker/utils/createChartSettingsForRender/composeBubbleSettings.js +19 -15
- package/dist/GraphMaker/utils/createChartSettingsForRender/composeBubbleSettings.js.map +1 -1
- package/dist/GraphMaker/utils/createChartSettingsForRender/composeDiscreteSettings.d.ts +3 -3
- package/dist/GraphMaker/utils/createChartSettingsForRender/composeHeatmapSettings.d.ts +8 -8
- package/dist/GraphMaker/utils/createChartSettingsForRender/composeHeatmapSettings.d.ts.map +1 -1
- package/dist/GraphMaker/utils/createChartSettingsForRender/composeHeatmapSettings.js +23 -23
- package/dist/GraphMaker/utils/createChartSettingsForRender/composeHeatmapSettings.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/bubble/BubbleSettingsImpl.js +19 -14
- package/dist/node_modules/@milaboratories/miplots4/dist/bubble/BubbleSettingsImpl.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/bubble/ChartRenderer.js +132 -132
- package/dist/node_modules/@milaboratories/miplots4/dist/bubble/ChartRenderer.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/bubble/components/Chart.js +53 -53
- package/dist/node_modules/@milaboratories/miplots4/dist/bubble/components/Chart.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/bubble/components/ChartsGroup.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/bubble/getCellTooltip.js +7 -7
- package/dist/node_modules/@milaboratories/miplots4/dist/bubble/getCellTooltip.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/bubble/getGroupedCellsData.js +49 -83
- package/dist/node_modules/@milaboratories/miplots4/dist/bubble/getGroupedCellsData.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/bubble/index.js +51 -34
- package/dist/node_modules/@milaboratories/miplots4/dist/bubble/index.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/bubble/utils/calculateCaptionTails.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/ChartRenderer.js +2 -2
- package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/ChartRenderer.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/Annotations/Annotation.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/Annotations/AnnotationCellsCanvas.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/Annotations/AnnotationCellsSvg.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/Annotations/index.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/CanvasCells.js +31 -31
- package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/CanvasCells.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/Chart.js +20 -20
- package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/Chart.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/ChartsGroup.js +12 -12
- package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/ChartsGroup.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/SvgCells.js +14 -14
- package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/SvgCells.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/tooltipUtils.js +14 -14
- package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/tooltipUtils.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/fillCellsData.js +244 -0
- package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/fillCellsData.js.map +1 -0
- package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/getCells.js +28 -214
- package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/getCells.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/getDendrograms.js +26 -26
- package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/getDendrograms.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/index.js +8 -8
- package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/index.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/utils/calculateCaptionTails.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/types/bubble.js +23 -12
- package/dist/node_modules/@milaboratories/miplots4/dist/types/bubble.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/utils/getFacetOrGroupKey.js +7 -0
- package/dist/node_modules/@milaboratories/miplots4/dist/utils/getFacetOrGroupKey.js.map +1 -0
- package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/controllersByChartType/bubble.js +165 -95
- package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/controllersByChartType/bubble.js.map +1 -1
- package/package.json +3 -3
package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/ChartsGroup.js.map
CHANGED
|
@@ -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 {
|
|
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
|
|
2
|
-
function
|
|
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:
|
|
7
|
-
yKeys:
|
|
6
|
+
xKeys: c,
|
|
7
|
+
yKeys: i,
|
|
8
8
|
stepX: p,
|
|
9
9
|
stepY: v,
|
|
10
|
-
aes:
|
|
11
|
-
colorScale:
|
|
10
|
+
aes: a,
|
|
11
|
+
colorScale: d,
|
|
12
12
|
tooltipsData: t
|
|
13
13
|
}) {
|
|
14
|
-
return
|
|
15
|
-
(
|
|
14
|
+
return c.map(
|
|
15
|
+
(s) => i.map((r) => {
|
|
16
16
|
var n;
|
|
17
|
-
const e = (n = l == null ? void 0 : l[
|
|
18
|
-
return e ? /* @__PURE__ */
|
|
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(
|
|
21
|
+
x: o.x(s),
|
|
22
22
|
y: o.y(r),
|
|
23
23
|
width: p,
|
|
24
24
|
height: v,
|
|
25
|
-
stroke:
|
|
26
|
-
fill: e.value === null ?
|
|
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
|
-
|
|
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 {
|
|
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
|
|
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
|
|
9
|
-
return
|
|
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,
|
|
14
|
-
const r = `${
|
|
15
|
-
if (
|
|
16
|
-
const
|
|
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
|
|
20
|
-
const
|
|
21
|
-
|
|
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
|
|
23
|
+
return a;
|
|
24
24
|
}
|
|
25
25
|
return [r];
|
|
26
26
|
}
|
|
27
27
|
function m(t, e) {
|
|
28
|
-
const
|
|
29
|
-
return t.xKey &&
|
|
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
|
-
|
|
38
|
+
u as formatCellValue,
|
|
39
39
|
m as getAnnotationTooltipContent,
|
|
40
40
|
c as getTooltipContent,
|
|
41
41
|
p as isAnnotationTooltip,
|
package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/tooltipUtils.js.map
CHANGED
|
@@ -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 {
|
|
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]}
|