@milaboratories/graph-maker 1.1.157 → 1.1.158

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 (65) hide show
  1. package/dist/GraphMaker/constantsCommon.d.ts +1 -0
  2. package/dist/GraphMaker/constantsCommon.d.ts.map +1 -1
  3. package/dist/GraphMaker/constantsCommon.js +17 -16
  4. package/dist/GraphMaker/constantsCommon.js.map +1 -1
  5. package/dist/GraphMaker/forms/AxesSettingsForm/HeatmapAxesSettingsForm.vue.d.ts.map +1 -1
  6. package/dist/GraphMaker/forms/AxesSettingsForm/HeatmapAxesSettingsForm.vue.js +104 -93
  7. package/dist/GraphMaker/forms/AxesSettingsForm/HeatmapAxesSettingsForm.vue.js.map +1 -1
  8. package/dist/GraphMaker/index.vue.js +33 -33
  9. package/dist/GraphMaker/index.vue.js.map +1 -1
  10. package/dist/GraphMaker/utils/createChartSettingsForRender/composeHeatmapSettings.d.ts +1 -0
  11. package/dist/GraphMaker/utils/createChartSettingsForRender/composeHeatmapSettings.d.ts.map +1 -1
  12. package/dist/GraphMaker/utils/createChartSettingsForRender/composeHeatmapSettings.js +11 -11
  13. package/dist/GraphMaker/utils/createChartSettingsForRender/composeHeatmapSettings.js.map +1 -1
  14. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/ChartRenderer.js +136 -135
  15. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/ChartRenderer.js.map +1 -1
  16. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/HeatmapSettingsImpl.js +2 -2
  17. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/HeatmapSettingsImpl.js.map +1 -1
  18. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/Annotations/Annotation.js +115 -107
  19. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/Annotations/Annotation.js.map +1 -1
  20. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/Annotations/AnnotationCellsCanvas.js +99 -0
  21. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/Annotations/AnnotationCellsCanvas.js.map +1 -0
  22. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/Annotations/AnnotationCellsSvg.js +57 -0
  23. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/Annotations/AnnotationCellsSvg.js.map +1 -0
  24. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/Annotations/index.js +43 -43
  25. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/Annotations/index.js.map +1 -1
  26. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/CanvasCells.js +85 -0
  27. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/CanvasCells.js.map +1 -0
  28. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/Captions/AxisCaptions.js +5 -5
  29. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/Captions/GroupCaptions.js +16 -16
  30. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/Chart.js +191 -197
  31. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/Chart.js.map +1 -1
  32. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/ChartsGroup.js +29 -27
  33. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/ChartsGroup.js.map +1 -1
  34. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/SvgCells.js +38 -0
  35. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/SvgCells.js.map +1 -0
  36. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/tooltipUtils.js +44 -0
  37. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/tooltipUtils.js.map +1 -0
  38. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/constants.js +16 -15
  39. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/constants.js.map +1 -1
  40. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/getCells.js +63 -66
  41. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/getCells.js.map +1 -1
  42. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/index.js +64 -62
  43. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/index.js.map +1 -1
  44. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/utils/calculateChartSideElementSizes.js +9 -9
  45. package/dist/node_modules/@milaboratories/miplots4/dist/histogram/components/ChartsGroup.js +14 -14
  46. package/dist/node_modules/@milaboratories/miplots4/dist/types/heatmap.js +5 -4
  47. package/dist/node_modules/@milaboratories/miplots4/dist/types/heatmap.js.map +1 -1
  48. package/dist/node_modules/@milaboratories/pf-plots/dist/constants.js +10 -8
  49. package/dist/node_modules/@milaboratories/pf-plots/dist/constants.js.map +1 -1
  50. package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/ComponentController.js +21 -21
  51. package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/controllersByChartType/bubble.js +19 -19
  52. package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/controllersByChartType/heatmap.js +8 -8
  53. package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/controllersByChartType/scatterplot-umap.js +9 -9
  54. package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/controllersByChartType/scatterplot.js +7 -7
  55. package/dist/node_modules/@milaboratories/pf-plots/dist/node_modules/@milaboratories/pl-model-common/dist/drivers/blob.js +2 -2
  56. package/dist/node_modules/@milaboratories/pf-plots/dist/node_modules/@milaboratories/pl-model-common/dist/drivers/blob.js.map +1 -1
  57. package/dist/node_modules/@milaboratories/pf-plots/dist/node_modules/@milaboratories/pl-model-common/dist/drivers/pframe/spec/spec.js +59 -57
  58. package/dist/node_modules/@milaboratories/pf-plots/dist/node_modules/@milaboratories/pl-model-common/dist/drivers/pframe/spec/spec.js.map +1 -1
  59. package/dist/node_modules/@milaboratories/pf-plots/dist/node_modules/@platforma-sdk/model/dist/components/PlDataTable.js.map +1 -1
  60. package/dist/node_modules/@milaboratories/pf-plots/dist/node_modules/@platforma-sdk/model/dist/render/util/label.js +13 -13
  61. package/dist/node_modules/@milaboratories/pf-plots/dist/pframe/ColumnsProvider.js +137 -133
  62. package/dist/node_modules/@milaboratories/pf-plots/dist/pframe/ColumnsProvider.js.map +1 -1
  63. package/dist/node_modules/@milaboratories/pf-plots/dist/utils.js +74 -74
  64. package/dist/node_modules/@milaboratories/pf-plots/dist/utils.js.map +1 -1
  65. 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}: {\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}) {\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 />\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","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 { 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]}
@@ -0,0 +1,38 @@
1
+ import { j as y } from "../../node_modules/react/jsx-runtime.js";
2
+ function f({
3
+ facetKey: u,
4
+ scales: o,
5
+ cells: l,
6
+ xKeys: i,
7
+ yKeys: c,
8
+ stepX: p,
9
+ stepY: v,
10
+ aes: s,
11
+ colorScale: m,
12
+ tooltipsData: t
13
+ }) {
14
+ return i.map(
15
+ (a) => c.map((r) => {
16
+ var n;
17
+ const e = (n = l == null ? void 0 : l[a]) == null ? void 0 : n[r];
18
+ return e ? /* @__PURE__ */ y.jsx(
19
+ "rect",
20
+ {
21
+ x: o.x(a),
22
+ y: o.y(r),
23
+ width: p,
24
+ height: v,
25
+ stroke: s.cellStrokeColor,
26
+ fill: e.value === null ? s.emptyCellColor : m(e.normalizedValue),
27
+ onMouseOver: () => t.onMouseEnter(e, u),
28
+ onMouseLeave: () => t.onMouseLeave()
29
+ },
30
+ e.id
31
+ ) : null;
32
+ })
33
+ );
34
+ }
35
+ export {
36
+ f as SvgCells
37
+ };
38
+ //# sourceMappingURL=SvgCells.js.map
@@ -0,0 +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]}
@@ -0,0 +1,44 @@
1
+ import { format as s } from "../../node_modules/d3-format/src/defaultLocale.js";
2
+ function n(t, e) {
3
+ if (t === null)
4
+ return "null";
5
+ if (typeof t == "number") {
6
+ if (e)
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));
10
+ }
11
+ return t;
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 = [
17
+ `Value: ${r}`
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)}`);
22
+ }
23
+ return i;
24
+ }
25
+ return [r];
26
+ }
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;
30
+ }
31
+ function p(t) {
32
+ return t !== null && "isAnnotation" in t;
33
+ }
34
+ function $(t) {
35
+ return t !== null && "isCell" in t;
36
+ }
37
+ export {
38
+ n as formatCellValue,
39
+ m as getAnnotationTooltipContent,
40
+ c as getTooltipContent,
41
+ p as isAnnotationTooltip,
42
+ $ as isCellTooltip
43
+ };
44
+ //# sourceMappingURL=tooltipUtils.js.map
@@ -0,0 +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,10 +1,10 @@
1
1
  import { BLACK as a } from "../constants.js";
2
- const o = 15, T = 8, i = 30, t = 48, E = 24, _ = 16, n = 4, I = 4, e = 20, S = 16, l = 16, N = 8, F = {
2
+ const T = 15, o = 8, E = 30, i = 48, t = 24, _ = 16, e = 4, n = 4, I = 20, S = 16, N = 16, l = 8, A = {
3
3
  left: ["annotations", "axis", "groups", "axisTitle", "dendro"],
4
4
  right: ["annotations", "axis", "groups", "axisTitle", "dendro"],
5
5
  top: ["annotations", "axis", "groups", "axisTitle", "dendro", "facetTitle"],
6
6
  bottom: ["annotations", "axis", "groups", "axisTitle", "dendro"]
7
- }, r = {
7
+ }, F = {
8
8
  fillColor: "white",
9
9
  lineColor: a,
10
10
  lineWidth: 1,
@@ -12,21 +12,22 @@ const o = 15, T = 8, i = 30, t = 48, E = 24, _ = 16, n = 4, I = 4, e = 20, S = 1
12
12
  dotSize: 3,
13
13
  dotFill: a,
14
14
  dotShape: "21"
15
- };
15
+ }, L = 5e5;
16
16
  export {
17
- N as ANNOTATIONS_OFFSET,
18
- l as ANNOTATION_WIDTH,
19
- F as CHART_SIDE_ELEMENTS,
20
- r as DEFAULT_AES,
21
- I as DEFAULT_TICKS_SIZE,
22
- t as FACET_TITLE_LINE,
23
- E as FACET_TITLE_OFFSET,
17
+ l as ANNOTATIONS_OFFSET,
18
+ N as ANNOTATION_WIDTH,
19
+ A as CHART_SIDE_ELEMENTS,
20
+ F as DEFAULT_AES,
21
+ n as DEFAULT_TICKS_SIZE,
22
+ i as FACET_TITLE_LINE,
23
+ t as FACET_TITLE_OFFSET,
24
24
  S as FONT_SIZE,
25
- e as LEGEND_OFFSET,
26
- T as MIN_MARGIN,
27
- o as MIN_PADDING,
25
+ I as LEGEND_OFFSET,
26
+ L as MAX_SVG_RENDERED_CELLS_COUNT,
27
+ o as MIN_MARGIN,
28
+ T as MIN_PADDING,
28
29
  _ as MIN_STEP_FOR_VISIBLE_LABELS,
29
- n as TICK_OFFSET,
30
- i as TITLE_LINE
30
+ e as TICK_OFFSET,
31
+ E as TITLE_LINE
31
32
  };
32
33
  //# sourceMappingURL=constants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sources":["../../../../../../node_modules/@milaboratories/miplots4/src/heatmap/constants.ts"],"sourcesContent":["import {BLACK} from '../constants';\nimport type {AesItem} from '../types';\n\nexport const MIN_PADDING = 15;\nexport const MIN_MARGIN = 8;\n\nexport const TITLE_LINE = 30;\nexport const FACET_TITLE_LINE = 48;\nexport const FACET_TITLE_OFFSET = 24;\n\nexport const MIN_STEP_FOR_VISIBLE_LABELS = 16;\n\nexport const TICK_OFFSET = 4;\nexport const DEFAULT_TICKS_SIZE = 4;\n\nexport const LEGEND_OFFSET = 20;\nexport const FONT_SIZE = 16;\n\nexport const ANNOTATION_WIDTH = 16;\nexport const ANNOTATIONS_OFFSET = 8;\n\nexport const CHART_SIDE_ELEMENTS = {\n left: ['annotations', 'axis', 'groups', 'axisTitle', 'dendro'],\n right: ['annotations', 'axis', 'groups', 'axisTitle', 'dendro'],\n top: ['annotations', 'axis', 'groups', 'axisTitle', 'dendro', 'facetTitle'],\n bottom: ['annotations', 'axis', 'groups', 'axisTitle', 'dendro']\n};\n\nexport const DEFAULT_AES:AesItem = {\n fillColor: 'white',\n lineColor: BLACK,\n lineWidth: 1,\n lineShape: 'solid',\n dotSize: 3,\n dotFill: BLACK,\n dotShape: '21',\n};\n"],"names":["MIN_PADDING","MIN_MARGIN","TITLE_LINE","FACET_TITLE_LINE","FACET_TITLE_OFFSET","MIN_STEP_FOR_VISIBLE_LABELS","TICK_OFFSET","DEFAULT_TICKS_SIZE","LEGEND_OFFSET","FONT_SIZE","ANNOTATION_WIDTH","ANNOTATIONS_OFFSET","CHART_SIDE_ELEMENTS","DEFAULT_AES","BLACK"],"mappings":";AAGO,MAAMA,IAAc,IACdC,IAAa,GAEbC,IAAa,IACbC,IAAmB,IACnBC,IAAqB,IAErBC,IAA8B,IAE9BC,IAAc,GACdC,IAAqB,GAErBC,IAAgB,IAChBC,IAAY,IAEZC,IAAmB,IACnBC,IAAqB,GAErBC,IAAsB;AAAA,EAC/B,MAAM,CAAC,eAAe,QAAQ,UAAU,aAAa,QAAQ;AAAA,EAC7D,OAAO,CAAC,eAAe,QAAQ,UAAU,aAAa,QAAQ;AAAA,EAC9D,KAAK,CAAC,eAAe,QAAQ,UAAU,aAAa,UAAU,YAAY;AAAA,EAC1E,QAAQ,CAAC,eAAe,QAAQ,UAAU,aAAa,QAAQ;AACnE,GAEaC,IAAsB;AAAA,EAC/B,WAAW;AAAA,EACX,WAAWC;AAAAA,EACX,WAAW;AAAA,EACX,WAAW;AAAA,EACX,SAAS;AAAA,EACT,SAASA;AAAAA,EACT,UAAU;AACd;","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"constants.js","sources":["../../../../../../node_modules/@milaboratories/miplots4/src/heatmap/constants.ts"],"sourcesContent":["import {BLACK} from '../constants';\nimport type {AesItem} from '../types';\n\nexport const MIN_PADDING = 15;\nexport const MIN_MARGIN = 8;\n\nexport const TITLE_LINE = 30;\nexport const FACET_TITLE_LINE = 48;\nexport const FACET_TITLE_OFFSET = 24;\n\nexport const MIN_STEP_FOR_VISIBLE_LABELS = 16;\n\nexport const TICK_OFFSET = 4;\nexport const DEFAULT_TICKS_SIZE = 4;\n\nexport const LEGEND_OFFSET = 20;\nexport const FONT_SIZE = 16;\n\nexport const ANNOTATION_WIDTH = 16;\nexport const ANNOTATIONS_OFFSET = 8;\n\nexport const CHART_SIDE_ELEMENTS = {\n left: ['annotations', 'axis', 'groups', 'axisTitle', 'dendro'],\n right: ['annotations', 'axis', 'groups', 'axisTitle', 'dendro'],\n top: ['annotations', 'axis', 'groups', 'axisTitle', 'dendro', 'facetTitle'],\n bottom: ['annotations', 'axis', 'groups', 'axisTitle', 'dendro']\n};\n\nexport const DEFAULT_AES:AesItem = {\n fillColor: 'white',\n lineColor: BLACK,\n lineWidth: 1,\n lineShape: 'solid',\n dotSize: 3,\n dotFill: BLACK,\n dotShape: '21',\n};\n\nexport const MAX_SVG_RENDERED_CELLS_COUNT = 500000;\n\n"],"names":["MIN_PADDING","MIN_MARGIN","TITLE_LINE","FACET_TITLE_LINE","FACET_TITLE_OFFSET","MIN_STEP_FOR_VISIBLE_LABELS","TICK_OFFSET","DEFAULT_TICKS_SIZE","LEGEND_OFFSET","FONT_SIZE","ANNOTATION_WIDTH","ANNOTATIONS_OFFSET","CHART_SIDE_ELEMENTS","DEFAULT_AES","BLACK","MAX_SVG_RENDERED_CELLS_COUNT"],"mappings":";AAGO,MAAMA,IAAc,IACdC,IAAa,GAEbC,IAAa,IACbC,IAAmB,IACnBC,IAAqB,IAErBC,IAA8B,IAE9BC,IAAc,GACdC,IAAqB,GAErBC,IAAgB,IAChBC,IAAY,IAEZC,IAAmB,IACnBC,IAAqB,GAErBC,IAAsB;AAAA,EAC/B,MAAM,CAAC,eAAe,QAAQ,UAAU,aAAa,QAAQ;AAAA,EAC7D,OAAO,CAAC,eAAe,QAAQ,UAAU,aAAa,QAAQ;AAAA,EAC9D,KAAK,CAAC,eAAe,QAAQ,UAAU,aAAa,UAAU,YAAY;AAAA,EAC1E,QAAQ,CAAC,eAAe,QAAQ,UAAU,aAAa,QAAQ;AACnE,GAEaC,IAAsB;AAAA,EAC/B,WAAW;AAAA,EACX,WAAWC;AAAAA,EACX,WAAW;AAAA,EACX,WAAW;AAAA,EACX,SAAS;AAAA,EACT,SAASA;AAAAA,EACT,UAAU;AACd,GAEaC,IAA+B;","x_google_ignoreList":[0]}
@@ -1,41 +1,38 @@
1
1
  import v from "../node_modules/lodash/lodash.js";
2
2
  import X from "../node_modules/d3-array/src/deviation.js";
3
- import N from "../node_modules/d3-array/src/mean.js";
3
+ import z from "../node_modules/d3-array/src/mean.js";
4
4
  import Y from "../node_modules/d3-array/src/extent.js";
5
- const ee = 5e5;
6
- function ae(l) {
7
- const o = X(l), r = N(l);
8
- return o === void 0 || r === void 0 || o === 0 ? (m) => m : (m) => (m - r) / o;
5
+ function Z(l) {
6
+ const o = X(l), s = z(l);
7
+ return o === void 0 || s === void 0 || o === 0 ? (m) => m : (m) => (m - s) / o;
9
8
  }
10
- function te(l) {
11
- const o = N(l), [r, m] = Y(l);
12
- return o === void 0 || r === void 0 || m === void 0 || m === r ? (c) => c : (c) => (c - o) / (m - r);
9
+ function ee(l) {
10
+ const o = z(l), [s, m] = Y(l);
11
+ return o === void 0 || s === void 0 || m === void 0 || m === s ? (c) => c : (c) => (c - o) / (m - s);
13
12
  }
14
- function le(l, o) {
15
- return l === "standardScaling" ? ae(o) : l === "meanNormalization" ? te(o) : (r) => r;
13
+ function ae(l, o) {
14
+ return l === "standardScaling" ? Z(o) : l === "meanNormalization" ? ee(o) : (s) => s;
16
15
  }
17
- function L(l) {
16
+ function b(l) {
18
17
  if (!l.length)
19
18
  return [];
20
19
  let o = [[]];
21
- return l.forEach((r) => {
20
+ return l.forEach((s) => {
22
21
  const m = [];
23
- r.forEach((c) => {
22
+ s.forEach((c) => {
24
23
  m.push(...o.map((B) => [...B, c]));
25
24
  }), o = m;
26
25
  }), o;
27
26
  }
28
- const z = (l, o, r = {}) => l.sort(
29
- (m, c) => o === "asc" ? (r[m] ?? m).localeCompare(r[c] ?? c, "en", { numeric: !0 }) : (r[c] ?? c).localeCompare(r[m] ?? m, "en", { numeric: !0 })
27
+ const q = (l, o, s = {}) => l.sort(
28
+ (m, c) => o === "asc" ? (s[m] ?? m).localeCompare(s[c] ?? c, "en", { numeric: !0 }) : (s[c] ?? c).localeCompare(s[m] ?? m, "en", { numeric: !0 })
30
29
  );
31
- function ne(l, o, r, m, c, B, G, $, O, T, d, F, K, H, J) {
32
- const j = l.columnNames.length ? l.getColumn(l.columnNames[0]).length : 0;
33
- j > ee && console.error(`Too many cells for graph rendering (${j})`);
34
- const P = c.length ? c.map((e) => K[e.value] ?? l.getColumnCategories(e.value)) : [["null"]], Q = B.length ? B.map((e) => K[e.value] ?? l.getColumnCategories(e.value)) : [["null"]], U = G.length ? G.map((e) => K[e.value] ?? l.getColumnCategories(e.value)) : [["null"]], D = L(P), w = L(Q), M = L(U), S = D.map((e) => e.join("_")), b = w.map((e) => e.join("_")), V = M.map((e) => e.join("_")), a = {
30
+ function se(l, o, s, m, c, B, E, j, O, k, d, F, K, H, J) {
31
+ const N = c.length ? c.map((e) => K[e.value] ?? l.getColumnCategories(e.value)) : [["null"]], P = B.length ? B.map((e) => K[e.value] ?? l.getColumnCategories(e.value)) : [["null"]], Q = E.length ? E.map((e) => K[e.value] ?? l.getColumnCategories(e.value)) : [["null"]], D = b(N), w = b(P), M = b(Q), $ = D.map((e) => e.join("_")), V = w.map((e) => e.join("_")), C = M.map((e) => e.join("_")), a = {
35
32
  meta: {
36
- facetKeys: S,
37
- xGroupKeys: b,
38
- yGroupKeys: V,
33
+ facetKeys: $,
34
+ xGroupKeys: V,
35
+ yGroupKeys: C,
39
36
  xKeysByGroups: {},
40
37
  yKeysByGroups: {},
41
38
  xLabels: {},
@@ -44,17 +41,17 @@ function ne(l, o, r, m, c, B, G, $, O, T, d, F, K, H, J) {
44
41
  yGroupLabels: {},
45
42
  xDataByKeys: {},
46
43
  yDataByKeys: {},
47
- facetKeyValues: S.reduce((e, t, s) => (e[t] = D[s], e), {}),
48
- xGroupKeyValues: b.reduce((e, t, s) => (e[t] = w[s], e), {}),
49
- yGroupKeyValues: V.reduce((e, t, s) => (e[t] = M[s], e), {}),
44
+ facetKeyValues: $.reduce((e, t, r) => (e[t] = D[r], e), {}),
45
+ xGroupKeyValues: V.reduce((e, t, r) => (e[t] = w[r], e), {}),
46
+ yGroupKeyValues: C.reduce((e, t, r) => (e[t] = M[r], e), {}),
50
47
  valueExtent: [1 / 0, -1 / 0]
51
48
  },
52
49
  facets: {}
53
- }, _ = o.valueLabels ?? o.value, q = r.valueLabels ?? r.value, W = $.filter((e) => e.axis === "x").map((e) => e.valueColumn.value), Z = $.filter((e) => e.axis === "y").map((e) => e.valueColumn.value), k = Object.values(O ?? {}).map((e) => e.value), A = Object.values(T ?? {}).map((e) => e.value), I = v.uniq([...W, ...k, _]), R = v.uniq([...Z, ...A, q]);
50
+ }, S = o.valueLabels ?? o.value, _ = s.valueLabels ?? s.value, R = j.filter((e) => e.axis === "x").map((e) => e.valueColumn.value), T = j.filter((e) => e.axis === "y").map((e) => e.valueColumn.value), U = Object.values(O ?? {}).map((e) => e.value), W = Object.values(k ?? {}).map((e) => e.value), A = v.uniq([...R, ...U, S]), I = v.uniq([...T, ...W, _]);
54
51
  for (let e = 0; e < l.rowsCount; e++) {
55
- const t = c.length ? c.map((u) => l.getColumnValue(u.value, e)).join("_") : "null", s = B.length ? B.map((u) => l.getColumnValue(u.value, e)).join("_") : "null", i = G.length ? G.map((u) => l.getColumnValue(u.value, e)).join("_") : "null", h = B.length ? B.map((u) => l.getColumnValue(u.valueLabels ?? u.value, e)).join(", ") : "", E = G.length ? G.map((u) => l.getColumnValue(u.valueLabels ?? u.value, e)).join(", ") : "";
56
- a.meta.xGroupLabels[s] = h, a.meta.yGroupLabels[i] = E;
57
- const n = String(l.getColumnValue(o.value, e)), y = String(l.getColumnValue(r.value, e)), p = l.getColumnValue(m.value, e) ?? F;
52
+ const t = c.length ? c.map((u) => l.getColumnValue(u.value, e)).join("_") : "null", r = B.length ? B.map((u) => l.getColumnValue(u.value, e)).join("_") : "null", i = E.length ? E.map((u) => l.getColumnValue(u.value, e)).join("_") : "null", g = B.length ? B.map((u) => l.getColumnValue(u.valueLabels ?? u.value, e)).join(", ") : "", L = E.length ? E.map((u) => l.getColumnValue(u.valueLabels ?? u.value, e)).join(", ") : "";
53
+ a.meta.xGroupLabels[r] = g, a.meta.yGroupLabels[i] = L;
54
+ const n = String(l.getColumnValue(o.value, e)), y = String(l.getColumnValue(s.value, e)), p = l.getColumnValue(m.value, e) ?? F;
58
55
  if (n === "null" || y === "null" || p === null)
59
56
  continue;
60
57
  if (a.facets[t] || (a.facets[t] = {
@@ -63,24 +60,24 @@ function ne(l, o, r, m, c, B, G, $, O, T, d, F, K, H, J) {
63
60
  xKeysByGroups: {},
64
61
  yKeysByGroups: {},
65
62
  cells: {}
66
- }), a.facets[t].xKeysByGroups[s] || (a.facets[t].xKeysByGroups[s] = []), a.facets[t].yKeysByGroups[i] || (a.facets[t].yKeysByGroups[i] = []), a.facets[t].xKeys.push(n), a.facets[t].yKeys.push(y), a.facets[t].xKeysByGroups[s].push(n), a.facets[t].yKeysByGroups[i].push(y), a.facets[t].cells[n] || (a.facets[t].cells[n] = {}), a.meta.valueExtent[0] = Math.min(p, a.meta.valueExtent[0]), a.meta.valueExtent[1] = Math.max(p, a.meta.valueExtent[1]), a.facets[t].cells[n][y] && a.facets[t].cells[n][y].value !== p)
63
+ }), a.facets[t].xKeysByGroups[r] || (a.facets[t].xKeysByGroups[r] = []), a.facets[t].yKeysByGroups[i] || (a.facets[t].yKeysByGroups[i] = []), a.facets[t].xKeys.push(n), a.facets[t].yKeys.push(y), a.facets[t].xKeysByGroups[r].push(n), a.facets[t].yKeysByGroups[i].push(y), a.facets[t].cells[n] || (a.facets[t].cells[n] = {}), a.meta.valueExtent[0] = Math.min(p, a.meta.valueExtent[0]), a.meta.valueExtent[1] = Math.max(p, a.meta.valueExtent[1]), a.facets[t].cells[n][y] && a.facets[t].cells[n][y].value !== p)
67
64
  throw Error(`More than 1 value for x=${n}, y=${y}`);
68
- const x = l.getColumnValue(_, e);
65
+ const x = l.getColumnValue(S, e);
69
66
  if (a.meta.xLabels[n] && String(x) !== a.meta.xLabels[n])
70
67
  throw Error(`More than 1 x-label value for x=${n}`);
71
- const g = l.getColumnValue(q, e);
72
- if (a.meta.yLabels[y] && String(g) !== a.meta.yLabels[y])
68
+ const h = l.getColumnValue(_, e);
69
+ if (a.meta.yLabels[y] && String(h) !== a.meta.yLabels[y])
73
70
  throw Error(`More than 1 y-label value for y=${y}`);
74
- a.meta.xLabels[n] = String(x), a.meta.yLabels[y] = String(g), I.forEach((u) => {
75
- const f = typeof a.meta.xDataByKeys[u] < "u", C = f && typeof a.meta.xDataByKeys[u][n] < "u";
76
- if (f || (a.meta.xDataByKeys[u] = {}), C && a.meta.xDataByKeys[u][n] !== l.getColumnValue(u, e))
71
+ a.meta.xLabels[n] = String(x), a.meta.yLabels[y] = String(h), A.forEach((u) => {
72
+ const f = typeof a.meta.xDataByKeys[u] < "u", G = f && typeof a.meta.xDataByKeys[u][n] < "u";
73
+ if (f || (a.meta.xDataByKeys[u] = {}), G && a.meta.xDataByKeys[u][n] !== l.getColumnValue(u, e))
77
74
  throw Error(`More than 1 value for x = ${n} and column = ${u}`);
78
- C || (a.meta.xDataByKeys[u][n] = l.getColumnValue(u, e));
79
- }), R.forEach((u) => {
80
- const f = typeof a.meta.yDataByKeys[u] < "u", C = f && typeof a.meta.yDataByKeys[u][y] < "u";
81
- if (f || (a.meta.yDataByKeys[u] = {}), C && a.meta.yDataByKeys[u][y] !== l.getColumnValue(u, e))
75
+ G || (a.meta.xDataByKeys[u][n] = l.getColumnValue(u, e));
76
+ }), I.forEach((u) => {
77
+ const f = typeof a.meta.yDataByKeys[u] < "u", G = f && typeof a.meta.yDataByKeys[u][y] < "u";
78
+ if (f || (a.meta.yDataByKeys[u] = {}), G && a.meta.yDataByKeys[u][y] !== l.getColumnValue(u, e))
82
79
  throw Error(`More than 1 value for y = ${y} and column = ${u}`);
83
- C || (a.meta.yDataByKeys[u][y] = l.getColumnValue(u, e));
80
+ G || (a.meta.yDataByKeys[u][y] = l.getColumnValue(u, e));
84
81
  }), a.facets[t].cells[n][y] = {
85
82
  isCell: !0,
86
83
  idx: e,
@@ -92,56 +89,56 @@ function ne(l, o, r, m, c, B, G, $, O, T, d, F, K, H, J) {
92
89
  };
93
90
  }
94
91
  if (a.meta.facetKeys = a.meta.facetKeys.filter((e) => a.facets[e]), a.meta.facetKeys.forEach((e) => {
95
- const t = a.facets[e], s = v.uniq(t.xKeys), i = v.uniq(t.yKeys);
96
- t.xKeys = K[o.value] ? v.intersection(K[o.value], s) : s, t.yKeys = K[r.value] ? v.intersection(K[r.value], i) : i, b.forEach((h) => {
97
- a.facets[e].xKeysByGroups[h] = v.intersection(
92
+ const t = a.facets[e], r = v.uniq(t.xKeys), i = v.uniq(t.yKeys);
93
+ t.xKeys = K[o.value] ? v.intersection(K[o.value], r) : r, t.yKeys = K[s.value] ? v.intersection(K[s.value], i) : i, V.forEach((g) => {
94
+ a.facets[e].xKeysByGroups[g] = v.intersection(
98
95
  t.xKeys,
99
- a.facets[e].xKeysByGroups[h]
96
+ a.facets[e].xKeysByGroups[g]
100
97
  );
101
- }), V.forEach((h) => {
102
- a.facets[e].yKeysByGroups[h] = v.intersection(
98
+ }), C.forEach((g) => {
99
+ a.facets[e].yKeysByGroups[g] = v.intersection(
103
100
  t.yKeys,
104
- a.facets[e].yKeysByGroups[h]
101
+ a.facets[e].yKeysByGroups[g]
105
102
  );
106
103
  });
107
104
  }), d) {
108
105
  const e = [1 / 0, -1 / 0];
109
106
  a.meta.facetKeys.forEach((t) => {
110
- const { xKeys: s, yKeys: i, cells: h } = a.facets[t], E = d.direction === "row" ? s : i, n = d.direction === "row" ? i : s, y = d.direction === "row" ? (p, x) => {
111
- var g;
112
- return (g = h[p]) == null ? void 0 : g[x];
107
+ const { xKeys: r, yKeys: i, cells: g } = a.facets[t], L = d.direction === "row" ? r : i, n = d.direction === "row" ? i : r, y = d.direction === "row" ? (p, x) => {
108
+ var h;
109
+ return (h = g[p]) == null ? void 0 : h[x];
113
110
  } : (p, x) => {
114
- var g;
115
- return (g = h[x]) == null ? void 0 : g[p];
111
+ var h;
112
+ return (h = g[x]) == null ? void 0 : h[p];
116
113
  };
117
114
  n.forEach((p) => {
118
115
  const x = [];
119
- E.forEach((u) => {
116
+ L.forEach((u) => {
120
117
  var f;
121
- const C = (f = y(u, p)) == null ? void 0 : f.value;
122
- C !== void 0 && x.push(C);
118
+ const G = (f = y(u, p)) == null ? void 0 : f.value;
119
+ G !== void 0 && x.push(G);
123
120
  });
124
- const g = le(d.method, x);
125
- E.forEach((u) => {
121
+ const h = ae(d.method, x);
122
+ L.forEach((u) => {
126
123
  const f = y(u, p);
127
- f !== void 0 && (f.normalizedValue = g(f.value), e[0] = Math.min(f.normalizedValue, e[0]), e[1] = Math.max(f.normalizedValue, e[1]));
124
+ f !== void 0 && (f.normalizedValue = h(f.value), e[0] = Math.min(f.normalizedValue, e[0]), e[1] = Math.max(f.normalizedValue, e[1]));
128
125
  });
129
126
  });
130
127
  }), a.meta.valueExtent = e;
131
128
  }
132
- return a.meta.xKeysByGroups = b.reduce((e, t) => {
133
- const s = z(v.uniq(
129
+ return a.meta.xKeysByGroups = V.reduce((e, t) => {
130
+ const r = q(v.uniq(
134
131
  v.flatten(a.meta.facetKeys.map((i) => a.facets[i].xKeysByGroups[t]))
135
132
  ), H.sorting, a.meta.xLabels);
136
- return e[t] = K[o.value] ? v.intersection(K[o.value], s) : s, e;
137
- }, {}), a.meta.yKeysByGroups = V.reduce((e, t) => {
138
- const s = z(v.uniq(
133
+ return e[t] = K[o.value] ? v.intersection(K[o.value], r) : r, e;
134
+ }, {}), a.meta.yKeysByGroups = C.reduce((e, t) => {
135
+ const r = q(v.uniq(
139
136
  v.flatten(a.meta.facetKeys.map((i) => a.facets[i].yKeysByGroups[t]))
140
137
  ), J.sorting, a.meta.yLabels);
141
- return e[t] = K[r.value] ? v.intersection(K[r.value], s) : s, e;
138
+ return e[t] = K[s.value] ? v.intersection(K[s.value], r) : r, e;
142
139
  }, {}), a.meta.valueExtent[0] === 1 / 0 && (a.meta.valueExtent[0] = 0), a.meta.valueExtent[1] === -1 / 0 && (a.meta.valueExtent[1] = 0), a;
143
140
  }
144
141
  export {
145
- ne as getCells
142
+ se as getCells
146
143
  };
147
144
  //# sourceMappingURL=getCells.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"getCells.js","sources":["../../../../../../node_modules/@milaboratories/miplots4/src/heatmap/getCells.ts"],"sourcesContent":["import { deviation, extent, mean } from 'd3-array';\nimport lodash from 'lodash';\nimport type { DataFrame } from '../DataFrame';\nimport type { ColumnName, DataValue, NormalizationMethod } from '../types';\nimport type { HeatmapSettingsImpl } from './HeatmapSettingsImpl';\n\nconst MAX_RENDERED_CELLS_COUNT = 500000;\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\nexport type Cell = {\n isCell: true;\n idx: number;\n id: string;\n value: DataValue;\n normalizedValue: DataValue;\n x: DataValue;\n y: DataValue;\n};\n\nexport type GroupedCellsData = {\n meta: {\n facetKeys: string[];\n xGroupKeys: string[];\n yGroupKeys: string[];\n xKeysByGroups: Record<string, string[]>;\n yKeysByGroups: Record<string, string[]>;\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 xLabels: Record<string, string>;\n yLabels: Record<string, string>;\n xGroupLabels: Record<string, string>;\n yGroupLabels: Record<string, string>;\n valueExtent: [number, number]; // for color 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>>;\n }\n >;\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};\n\nexport function getCells(\n data: DataFrame,\n xColumn: ColumnName,\n yColumn: ColumnName,\n valueColumn: ColumnName,\n facetBy: ColumnName[],\n xGroupBy: ColumnName[],\n yGroupBy: ColumnName[],\n annotations: HeatmapSettingsImpl['annotations'],\n dendrogramX: HeatmapSettingsImpl['dendrogramX'],\n dendrogramY: HeatmapSettingsImpl['dendrogramY'],\n normalization: HeatmapSettingsImpl['normalization'],\n NAValueAs: HeatmapSettingsImpl['NAValueAs'],\n keysOrder: HeatmapSettingsImpl['keysOrder'],\n xAxis: HeatmapSettingsImpl['chartSettings']['xAxis'],\n yAxis: HeatmapSettingsImpl['chartSettings']['yAxis'],\n): GroupedCellsData {\n const dataSize = data.columnNames.length ? data.getColumn(data.columnNames[0]).length : 0;\n if (dataSize > MAX_RENDERED_CELLS_COUNT) {\n console.error(`Too many cells for graph rendering (${dataSize})`);\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(keys => keys.join('_'));\n const xGroupKeys = xGroupKeysCombinations.map(keys => keys.join('_'));\n const yGroupKeys = yGroupKeysCombinations.map(keys => keys.join('_'));\n\n const result: GroupedCellsData = {\n meta: {\n facetKeys,\n xGroupKeys,\n yGroupKeys,\n xKeysByGroups: {},\n yKeysByGroups: {},\n xLabels: {},\n yLabels: {},\n xGroupLabels: {},\n yGroupLabels: {},\n xDataByKeys: {},\n yDataByKeys: {},\n facetKeyValues: facetKeys.reduce((res: Record<string, string[]>, key, index) => {\n res[key] = facetKeysCombinations[index];\n return res;\n }, {}),\n xGroupKeyValues: xGroupKeys.reduce((res: Record<string, string[]>, key, index) => {\n res[key] = xGroupKeysCombinations[index];\n return res;\n }, {}),\n yGroupKeyValues: yGroupKeys.reduce((res: Record<string, string[]>, key, index) => {\n res[key] = yGroupKeysCombinations[index];\n return res;\n }, {}),\n valueExtent: [Infinity, -Infinity],\n },\n facets: {},\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.value);\n const annotationColumnsY = annotations.filter(item => item.axis === 'y').map(item => 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 = facetBy.length ? facetBy.map(column => data.getColumnValue(column.value, i)).join('_') : 'null';\n const xGroupKey = xGroupBy.length ? xGroupBy.map(column => data.getColumnValue(column.value, i)).join('_') : 'null';\n const yGroupKey = yGroupBy.length ? yGroupBy.map(column => data.getColumnValue(column.value, i)).join('_') : 'null';\n const xGroupLabel = xGroupBy.length ? xGroupBy.map(column => data.getColumnValue(column.valueLabels ?? column.value, i)).join(', ') : '';\n const yGroupLabel = yGroupBy.length ? 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 const value = (data.getColumnValue(valueColumn.value, i) ?? NAValueAs) as number | null;\n \n if (x === 'null' || y === 'null' || value === 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 result.meta.valueExtent[0] = Math.min(value, result.meta.valueExtent[0]);\n result.meta.valueExtent[1] = Math.max(value, result.meta.valueExtent[1]);\n if (result.facets[facetKey].cells[x][y] && result.facets[facetKey].cells[x][y].value !== value) {\n throw Error(`More than 1 value for x=${x}, y=${y}`);\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,\n normalizedValue: value,\n };\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 if (normalization) {\n const valueExtent = [Infinity, -Infinity] as [number, number];\n result.meta.facetKeys.forEach(facetKey => {\n const {xKeys, yKeys, cells} = result.facets[facetKey];\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;\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 = normalize(cell.value as number);\n valueExtent[0] = Math.min(cell.normalizedValue, valueExtent[0]);\n valueExtent[1] = Math.max(cell.normalizedValue, valueExtent[1]);\n }\n });\n });\n });\n result.meta.valueExtent = valueExtent;\n }\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 = 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.yKeysByGroups = 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\n // avoid render errors on empty data\n if (result.meta.valueExtent[0] === Infinity) {\n result.meta.valueExtent[0] = 0;\n }\n if (result.meta.valueExtent[1] === -Infinity) {\n result.meta.valueExtent[1] = 0;\n }\n\n return result;\n}\n"],"names":["MAX_RENDERED_CELLS_COUNT","normalizeByStd","values","stdValue","deviation","meanValue","mean","v","normalizeByMinMax","min","max","extent","getNormalizationFn","method","getKeysCombinations","keysLists","result","keys","nextResult","key","resultItem","sortByLabels","arr","direction","labels","a","b","getCells","data","xColumn","yColumn","valueColumn","facetBy","xGroupBy","yGroupBy","annotations","dendrogramX","dendrogramY","normalization","NAValueAs","keysOrder","xAxis","yAxis","dataSize","facetKeysLists","column","xGroupKeysLists","yGroupKeysLists","facetKeysCombinations","xGroupKeysCombinations","yGroupKeysCombinations","facetKeys","xGroupKeys","yGroupKeys","res","index","xLabelsSource","yLabelsSource","annotationColumnsX","item","annotationColumnsY","dendrogramXColumns","dendrogramYColumns","additionalDataColumnsX","lodash","additionalDataColumnsY","i","facetKey","xGroupKey","yGroupKey","xGroupLabel","yGroupLabel","n","x","y","value","xLabelsSourceValue","yLabelsSourceValue","columnKey","isAddedColumn","isAddedValue","r","facet","uniqueXKeys","uniqueYKeys","valueExtent","xKeys","yKeys","cells","cellKeys","groupKeys","cellGetter","cellKey","groupKey","_a","normalize","cell","existingXKeys","existingYKeys"],"mappings":"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","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"getCells.js","sources":["../../../../../../node_modules/@milaboratories/miplots4/src/heatmap/getCells.ts"],"sourcesContent":["import { deviation, extent, mean } from 'd3-array';\nimport lodash from 'lodash';\nimport type { DataFrame } from '../DataFrame';\nimport type { ColumnName, DataValue, NormalizationMethod } from '../types';\nimport type { HeatmapSettingsImpl } from './HeatmapSettingsImpl';\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\nexport type Cell = {\n isCell: true;\n idx: number;\n id: string;\n value: DataValue;\n normalizedValue: DataValue;\n x: DataValue;\n y: DataValue;\n};\n\nexport type GroupedCellsData = {\n meta: {\n facetKeys: string[];\n xGroupKeys: string[];\n yGroupKeys: string[];\n xKeysByGroups: Record<string, string[]>;\n yKeysByGroups: Record<string, string[]>;\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 xLabels: Record<string, string>;\n yLabels: Record<string, string>;\n xGroupLabels: Record<string, string>;\n yGroupLabels: Record<string, string>;\n valueExtent: [number, number]; // for color 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>>;\n }\n >;\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};\n\nexport function getCells(\n data: DataFrame,\n xColumn: ColumnName,\n yColumn: ColumnName,\n valueColumn: ColumnName,\n facetBy: ColumnName[],\n xGroupBy: ColumnName[],\n yGroupBy: ColumnName[],\n annotations: HeatmapSettingsImpl['annotations'],\n dendrogramX: HeatmapSettingsImpl['dendrogramX'],\n dendrogramY: HeatmapSettingsImpl['dendrogramY'],\n normalization: HeatmapSettingsImpl['normalization'],\n NAValueAs: HeatmapSettingsImpl['NAValueAs'],\n keysOrder: HeatmapSettingsImpl['keysOrder'],\n xAxis: HeatmapSettingsImpl['chartSettings']['xAxis'],\n yAxis: HeatmapSettingsImpl['chartSettings']['yAxis'],\n): GroupedCellsData {\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(keys => keys.join('_'));\n const xGroupKeys = xGroupKeysCombinations.map(keys => keys.join('_'));\n const yGroupKeys = yGroupKeysCombinations.map(keys => keys.join('_'));\n\n const result: GroupedCellsData = {\n meta: {\n facetKeys,\n xGroupKeys,\n yGroupKeys,\n xKeysByGroups: {},\n yKeysByGroups: {},\n xLabels: {},\n yLabels: {},\n xGroupLabels: {},\n yGroupLabels: {},\n xDataByKeys: {},\n yDataByKeys: {},\n facetKeyValues: facetKeys.reduce((res: Record<string, string[]>, key, index) => {\n res[key] = facetKeysCombinations[index];\n return res;\n }, {}),\n xGroupKeyValues: xGroupKeys.reduce((res: Record<string, string[]>, key, index) => {\n res[key] = xGroupKeysCombinations[index];\n return res;\n }, {}),\n yGroupKeyValues: yGroupKeys.reduce((res: Record<string, string[]>, key, index) => {\n res[key] = yGroupKeysCombinations[index];\n return res;\n }, {}),\n valueExtent: [Infinity, -Infinity],\n },\n facets: {},\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.value);\n const annotationColumnsY = annotations.filter(item => item.axis === 'y').map(item => 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 = facetBy.length ? facetBy.map(column => data.getColumnValue(column.value, i)).join('_') : 'null';\n const xGroupKey = xGroupBy.length ? xGroupBy.map(column => data.getColumnValue(column.value, i)).join('_') : 'null';\n const yGroupKey = yGroupBy.length ? yGroupBy.map(column => data.getColumnValue(column.value, i)).join('_') : 'null';\n const xGroupLabel = xGroupBy.length ? xGroupBy.map(column => data.getColumnValue(column.valueLabels ?? column.value, i)).join(', ') : '';\n const yGroupLabel = yGroupBy.length ? 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 const value = (data.getColumnValue(valueColumn.value, i) ?? NAValueAs) as number | null;\n \n if (x === 'null' || y === 'null' || value === 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 result.meta.valueExtent[0] = Math.min(value, result.meta.valueExtent[0]);\n result.meta.valueExtent[1] = Math.max(value, result.meta.valueExtent[1]);\n if (result.facets[facetKey].cells[x][y] && result.facets[facetKey].cells[x][y].value !== value) {\n throw Error(`More than 1 value for x=${x}, y=${y}`);\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,\n normalizedValue: value,\n };\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 if (normalization) {\n const valueExtent = [Infinity, -Infinity] as [number, number];\n result.meta.facetKeys.forEach(facetKey => {\n const {xKeys, yKeys, cells} = result.facets[facetKey];\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;\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 = normalize(cell.value as number);\n valueExtent[0] = Math.min(cell.normalizedValue, valueExtent[0]);\n valueExtent[1] = Math.max(cell.normalizedValue, valueExtent[1]);\n }\n });\n });\n });\n result.meta.valueExtent = valueExtent;\n }\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 = 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.yKeysByGroups = 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\n // avoid render errors on empty data\n if (result.meta.valueExtent[0] === Infinity) {\n result.meta.valueExtent[0] = 0;\n }\n if (result.meta.valueExtent[1] === -Infinity) {\n result.meta.valueExtent[1] = 0;\n }\n\n return result;\n}\n"],"names":["normalizeByStd","values","stdValue","deviation","meanValue","mean","v","normalizeByMinMax","min","max","extent","getNormalizationFn","method","getKeysCombinations","keysLists","result","keys","nextResult","key","resultItem","sortByLabels","arr","direction","labels","a","b","getCells","data","xColumn","yColumn","valueColumn","facetBy","xGroupBy","yGroupBy","annotations","dendrogramX","dendrogramY","normalization","NAValueAs","keysOrder","xAxis","yAxis","facetKeysLists","column","xGroupKeysLists","yGroupKeysLists","facetKeysCombinations","xGroupKeysCombinations","yGroupKeysCombinations","facetKeys","xGroupKeys","yGroupKeys","res","index","xLabelsSource","yLabelsSource","annotationColumnsX","item","annotationColumnsY","dendrogramXColumns","dendrogramYColumns","additionalDataColumnsX","lodash","additionalDataColumnsY","i","facetKey","xGroupKey","yGroupKey","xGroupLabel","yGroupLabel","s","x","y","value","xLabelsSourceValue","yLabelsSourceValue","columnKey","isAddedColumn","isAddedValue","r","facet","uniqueXKeys","uniqueYKeys","valueExtent","xKeys","yKeys","cells","cellKeys","groupKeys","cellGetter","cellKey","groupKey","_a","normalize","cell","existingXKeys","existingYKeys"],"mappings":"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","x_google_ignoreList":[0]}