@milaboratories/miplots4 1.1.0 → 1.2.1
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/MiPlots.d.ts.map +1 -1
- package/dist/MiPlots.js +16 -14
- package/dist/MiPlots.js.map +1 -1
- package/dist/bubble/BubbleSettingsImpl.d.ts +3 -0
- package/dist/bubble/BubbleSettingsImpl.d.ts.map +1 -1
- package/dist/bubble/BubbleSettingsImpl.js +4 -1
- package/dist/bubble/BubbleSettingsImpl.js.map +1 -1
- package/dist/bubble/ChartRenderer.d.ts +2 -12
- package/dist/bubble/ChartRenderer.d.ts.map +1 -1
- package/dist/bubble/ChartRenderer.js +13 -13
- package/dist/bubble/ChartRenderer.js.map +1 -1
- package/dist/bubble/getGroupedCellsData.d.ts +1 -1
- package/dist/bubble/getGroupedCellsData.d.ts.map +1 -1
- package/dist/bubble/getGroupedCellsData.js +20 -14
- package/dist/bubble/getGroupedCellsData.js.map +1 -1
- package/dist/bubble/index.d.ts.map +1 -1
- package/dist/bubble/index.js +6 -10
- package/dist/bubble/index.js.map +1 -1
- package/dist/common/ContinuousAxis.d.ts +3 -1
- package/dist/common/ContinuousAxis.d.ts.map +1 -1
- package/dist/common/ContinuousAxis.js +8 -8
- package/dist/common/ContinuousAxis.js.map +1 -1
- package/dist/common/Legend.d.ts +12 -1
- package/dist/common/Legend.d.ts.map +1 -1
- package/dist/common/Legend.js +14 -6
- package/dist/common/Legend.js.map +1 -1
- package/dist/heatmap/ChartRenderer.d.ts +2 -12
- package/dist/heatmap/ChartRenderer.d.ts.map +1 -1
- package/dist/heatmap/ChartRenderer.js +26 -26
- package/dist/heatmap/ChartRenderer.js.map +1 -1
- package/dist/heatmap/HeatmapSettingsImpl.d.ts +3 -0
- package/dist/heatmap/HeatmapSettingsImpl.d.ts.map +1 -1
- package/dist/heatmap/HeatmapSettingsImpl.js +5 -2
- package/dist/heatmap/HeatmapSettingsImpl.js.map +1 -1
- package/dist/heatmap/fillCellsData.d.ts +6 -1
- package/dist/heatmap/fillCellsData.d.ts.map +1 -1
- package/dist/heatmap/fillCellsData.js +135 -96
- package/dist/heatmap/fillCellsData.js.map +1 -1
- package/dist/heatmap/getCells.d.ts +4 -1
- package/dist/heatmap/getCells.d.ts.map +1 -1
- package/dist/heatmap/getCells.js +19 -16
- package/dist/heatmap/getCells.js.map +1 -1
- package/dist/heatmap/index.d.ts.map +1 -1
- package/dist/heatmap/index.js +32 -34
- package/dist/heatmap/index.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/selection/ChartRenderer.d.ts +90 -0
- package/dist/selection/ChartRenderer.d.ts.map +1 -0
- package/dist/selection/ChartRenderer.js +254 -0
- package/dist/selection/ChartRenderer.js.map +1 -0
- package/dist/selection/SelectionSettingsImpl.d.ts +53 -0
- package/dist/selection/SelectionSettingsImpl.d.ts.map +1 -0
- package/dist/selection/SelectionSettingsImpl.js +47 -0
- package/dist/selection/SelectionSettingsImpl.js.map +1 -0
- package/dist/selection/components/Chart/Bars/GroupSelectedBars.d.ts +8 -0
- package/dist/selection/components/Chart/Bars/GroupSelectedBars.d.ts.map +1 -0
- package/dist/selection/components/Chart/Bars/GroupSelectedBars.js +57 -0
- package/dist/selection/components/Chart/Bars/GroupSelectedBars.js.map +1 -0
- package/dist/selection/components/Chart/Bars/StackedBars.d.ts +12 -0
- package/dist/selection/components/Chart/Bars/StackedBars.d.ts.map +1 -0
- package/dist/selection/components/Chart/Bars/StackedBars.js +58 -0
- package/dist/selection/components/Chart/Bars/StackedBars.js.map +1 -0
- package/dist/selection/components/Chart/Bars/UngroupedBars.d.ts +6 -0
- package/dist/selection/components/Chart/Bars/UngroupedBars.d.ts.map +1 -0
- package/dist/selection/components/Chart/Bars/UngroupedBars.js +38 -0
- package/dist/selection/components/Chart/Bars/UngroupedBars.js.map +1 -0
- package/dist/selection/components/Chart/Bars.d.ts +10 -0
- package/dist/selection/components/Chart/Bars.d.ts.map +1 -0
- package/dist/selection/components/Chart/Bars.js +48 -0
- package/dist/selection/components/Chart/Bars.js.map +1 -0
- package/dist/selection/components/Chart/ChartAxes.d.ts +7 -0
- package/dist/selection/components/Chart/ChartAxes.d.ts.map +1 -0
- package/dist/selection/components/Chart/ChartAxes.js +51 -0
- package/dist/selection/components/Chart/ChartAxes.js.map +1 -0
- package/dist/selection/components/Chart/ChartFrame.d.ts +9 -0
- package/dist/selection/components/Chart/ChartFrame.d.ts.map +1 -0
- package/dist/selection/components/Chart/ChartFrame.js +41 -0
- package/dist/selection/components/Chart/ChartFrame.js.map +1 -0
- package/dist/selection/components/Chart/Dividers.d.ts +8 -0
- package/dist/selection/components/Chart/Dividers.d.ts.map +1 -0
- package/dist/selection/components/Chart/Dividers.js +27 -0
- package/dist/selection/components/Chart/Dividers.js.map +1 -0
- package/dist/selection/components/Chart/Gridlines.d.ts +10 -0
- package/dist/selection/components/Chart/Gridlines.d.ts.map +1 -0
- package/dist/selection/components/Chart/Gridlines.js +32 -0
- package/dist/selection/components/Chart/Gridlines.js.map +1 -0
- package/dist/selection/components/Chart/Ribbons/GroupFlowRibbon.d.ts +9 -0
- package/dist/selection/components/Chart/Ribbons/GroupFlowRibbon.d.ts.map +1 -0
- package/dist/selection/components/Chart/Ribbons/GroupFlowRibbon.js +36 -0
- package/dist/selection/components/Chart/Ribbons/GroupFlowRibbon.js.map +1 -0
- package/dist/selection/components/Chart/Ribbons/MultiGroupRibbon.d.ts +6 -0
- package/dist/selection/components/Chart/Ribbons/MultiGroupRibbon.d.ts.map +1 -0
- package/dist/selection/components/Chart/Ribbons/MultiGroupRibbon.js +22 -0
- package/dist/selection/components/Chart/Ribbons/MultiGroupRibbon.js.map +1 -0
- package/dist/selection/components/Chart/Ribbons/SimpleRibbon.d.ts +10 -0
- package/dist/selection/components/Chart/Ribbons/SimpleRibbon.d.ts.map +1 -0
- package/dist/selection/components/Chart/Ribbons/SimpleRibbon.js +33 -0
- package/dist/selection/components/Chart/Ribbons/SimpleRibbon.js.map +1 -0
- package/dist/selection/components/Chart/Ribbons/StackedGroupFlowRibbon.d.ts +10 -0
- package/dist/selection/components/Chart/Ribbons/StackedGroupFlowRibbon.d.ts.map +1 -0
- package/dist/selection/components/Chart/Ribbons/StackedGroupFlowRibbon.js +65 -0
- package/dist/selection/components/Chart/Ribbons/StackedGroupFlowRibbon.js.map +1 -0
- package/dist/selection/components/Chart/Ribbons/ribbonPath.d.ts +10 -0
- package/dist/selection/components/Chart/Ribbons/ribbonPath.d.ts.map +1 -0
- package/dist/selection/components/Chart/Ribbons/ribbonPath.js +13 -0
- package/dist/selection/components/Chart/Ribbons/ribbonPath.js.map +1 -0
- package/dist/selection/components/Chart/Ribbons.d.ts +9 -0
- package/dist/selection/components/Chart/Ribbons.d.ts.map +1 -0
- package/dist/selection/components/Chart/Ribbons.js +58 -0
- package/dist/selection/components/Chart/Ribbons.js.map +1 -0
- package/dist/selection/components/Chart/StageCounts.d.ts +7 -0
- package/dist/selection/components/Chart/StageCounts.d.ts.map +1 -0
- package/dist/selection/components/Chart/StageCounts.js +20 -0
- package/dist/selection/components/Chart/StageCounts.js.map +1 -0
- package/dist/selection/components/Chart/types.d.ts +132 -0
- package/dist/selection/components/Chart/types.d.ts.map +1 -0
- package/dist/selection/components/Chart.d.ts +22 -0
- package/dist/selection/components/Chart.d.ts.map +1 -0
- package/dist/selection/components/Chart.js +97 -0
- package/dist/selection/components/Chart.js.map +1 -0
- package/dist/selection/components/ChartsGroup.d.ts +18 -0
- package/dist/selection/components/ChartsGroup.d.ts.map +1 -0
- package/dist/selection/components/ChartsGroup.js +181 -0
- package/dist/selection/components/ChartsGroup.js.map +1 -0
- package/dist/selection/components/FacetCell.d.ts +22 -0
- package/dist/selection/components/FacetCell.d.ts.map +1 -0
- package/dist/selection/components/FacetCell.js +18 -0
- package/dist/selection/components/FacetCell.js.map +1 -0
- package/dist/selection/components/types.d.ts +58 -0
- package/dist/selection/components/types.d.ts.map +1 -0
- package/dist/selection/constants.d.ts +25 -0
- package/dist/selection/constants.d.ts.map +1 -0
- package/dist/selection/constants.js +4 -0
- package/dist/selection/constants.js.map +1 -0
- package/dist/selection/createSelectionData.d.ts +50 -0
- package/dist/selection/createSelectionData.d.ts.map +1 -0
- package/dist/selection/createSelectionData.js +92 -0
- package/dist/selection/createSelectionData.js.map +1 -0
- package/dist/selection/index.d.ts +26 -0
- package/dist/selection/index.d.ts.map +1 -0
- package/dist/selection/index.js +96 -0
- package/dist/selection/index.js.map +1 -0
- package/dist/selection/utils.d.ts +4 -0
- package/dist/selection/utils.d.ts.map +1 -0
- package/dist/selection/utils.js +13 -0
- package/dist/selection/utils.js.map +1 -0
- package/dist/types/bubble.d.ts +131 -0
- package/dist/types/bubble.d.ts.map +1 -1
- package/dist/types/bubble.js +3 -0
- package/dist/types/bubble.js.map +1 -1
- package/dist/types/common.d.ts +38 -0
- package/dist/types/common.d.ts.map +1 -1
- package/dist/types/common.js +1 -0
- package/dist/types/common.js.map +1 -1
- package/dist/types/dendro.d.ts +103 -0
- package/dist/types/dendro.d.ts.map +1 -1
- package/dist/types/discrete.d.ts +167 -0
- package/dist/types/discrete.d.ts.map +1 -1
- package/dist/types/heatmap.d.ts +248 -0
- package/dist/types/heatmap.d.ts.map +1 -1
- package/dist/types/heatmap.js +3 -0
- package/dist/types/heatmap.js.map +1 -1
- package/dist/types/histogram.d.ts +22 -0
- package/dist/types/histogram.d.ts.map +1 -1
- package/dist/types/index.d.ts +3 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +1 -0
- package/dist/types/scatterplot-umap.d.ts +188 -0
- package/dist/types/scatterplot-umap.d.ts.map +1 -1
- package/dist/types/scatterplot.d.ts +270 -0
- package/dist/types/scatterplot.d.ts.map +1 -1
- package/dist/types/selection.d.ts +452 -0
- package/dist/types/selection.d.ts.map +1 -0
- package/dist/types/selection.js +53 -0
- package/dist/types/selection.js.map +1 -0
- package/dist/utils/intersect.d.ts +2 -0
- package/dist/utils/intersect.d.ts.map +1 -0
- package/dist/utils/intersect.js +8 -0
- package/dist/utils/intersect.js.map +1 -0
- package/package.json +2 -2
package/dist/heatmap/getCells.js
CHANGED
|
@@ -24,9 +24,9 @@ function t() {
|
|
|
24
24
|
facets: {}
|
|
25
25
|
};
|
|
26
26
|
}
|
|
27
|
-
function n({ data: n, xColumn: r, yColumn: i, valueColumns: a, facetBy: o, xGroupBy: s, yGroupBy: c,
|
|
28
|
-
let
|
|
29
|
-
return e(
|
|
27
|
+
function n({ data: n, xColumn: r, yColumn: i, valueColumns: a, facetBy: o, xGroupBy: s, yGroupBy: c, xSortBy: l, ySortBy: u, facetSettings: d, annotations: f, dendrogramX: p, dendrogramY: m, normalization: h, NAValueAs: g, transform: _, keysOrder: v, xAxis: y, yAxis: b, aggregation: x, showEmptyRows: S = !1, showEmptyColumns: C = !1 }) {
|
|
28
|
+
let w = t();
|
|
29
|
+
return e(w, {
|
|
30
30
|
data: n,
|
|
31
31
|
xColumn: r,
|
|
32
32
|
yColumn: i,
|
|
@@ -34,19 +34,22 @@ function n({ data: n, xColumn: r, yColumn: i, valueColumns: a, facetBy: o, xGrou
|
|
|
34
34
|
facetBy: o,
|
|
35
35
|
xGroupBy: s,
|
|
36
36
|
yGroupBy: c,
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
37
|
+
xSortBy: l,
|
|
38
|
+
ySortBy: u,
|
|
39
|
+
facetSettings: d,
|
|
40
|
+
annotations: f,
|
|
41
|
+
dendrogramX: p,
|
|
42
|
+
dendrogramY: m,
|
|
43
|
+
normalizationBySource: { dataSource: h },
|
|
44
|
+
NAValueAs: g,
|
|
45
|
+
transformBySource: { dataSource: _ },
|
|
46
|
+
keysOrder: v,
|
|
47
|
+
xAxis: y,
|
|
48
|
+
yAxis: b,
|
|
49
|
+
aggregation: x,
|
|
50
|
+
showEmptyRows: S,
|
|
51
|
+
showEmptyColumns: C
|
|
52
|
+
}), w;
|
|
50
53
|
}
|
|
51
54
|
export { n as getCells };
|
|
52
55
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getCells.js","names":[],"sources":["../../src/heatmap/getCells.ts"],"sourcesContent":["import type { DataFrame } from '../DataFrame';\nimport type { ColumnName } from '../types';\nimport type { HeatmapSettingsImpl } from './HeatmapSettingsImpl';\nimport type { Cell, GroupedCellsData } from './fillCellsData';\nimport { fillCellsData } from './fillCellsData';\n\nexport type CellHeatmap = Cell<'dataSource'>\nexport type GroupedCellsHeatmap = GroupedCellsData<'dataSource'>;\n\nexport function createEmptyGroupedCells(): GroupedCellsHeatmap {\n return {\n meta: {\n valueSources: ['dataSource'],\n facetKeys: [],\n xKeys: [],\n yKeys: [],\n xGroupKeys: [],\n yGroupKeys: [],\n xKeysByGroups: {},\n yKeysByGroups: {},\n xLabels: {},\n yLabels: {},\n xGroupLabels: {},\n yGroupLabels: {},\n xDataByKeys: {},\n yDataByKeys: {},\n facetKeyValues: {},\n xGroupKeyValues: {},\n yGroupKeyValues: {},\n valueExtent: { dataSource: [Infinity, -Infinity] },\n },\n facets: {},\n };\n}\n\nexport function getCells({\n data,\n xColumn,\n yColumn,\n valueColumns,\n facetBy,\n xGroupBy,\n yGroupBy,\n facetSettings,\n annotations,\n dendrogramX,\n dendrogramY,\n normalization,\n NAValueAs,\n keysOrder,\n xAxis,\n yAxis,\n aggregation,\n showEmptyRows = false,\n showEmptyColumns = false,\n}: {\n data: DataFrame;\n xColumn: ColumnName;\n yColumn: ColumnName;\n valueColumns: Record<string, ColumnName>;\n facetBy: ColumnName[];\n xGroupBy: ColumnName[];\n yGroupBy: ColumnName[];\n facetSettings: HeatmapSettingsImpl['facetSettings'];\n annotations: HeatmapSettingsImpl['annotations'];\n dendrogramX: HeatmapSettingsImpl['dendrogramX'];\n dendrogramY: HeatmapSettingsImpl['dendrogramY'];\n normalization: HeatmapSettingsImpl['normalization'];\n NAValueAs: HeatmapSettingsImpl['NAValueAs'];\n keysOrder: HeatmapSettingsImpl['keysOrder'];\n xAxis: HeatmapSettingsImpl['chartSettings']['xAxis'];\n yAxis: HeatmapSettingsImpl['chartSettings']['yAxis'];\n aggregation: HeatmapSettingsImpl['aggregation'];\n showEmptyRows?: boolean;\n showEmptyColumns?: boolean;\n}): GroupedCellsHeatmap {\n const result: GroupedCellsHeatmap = createEmptyGroupedCells();\n fillCellsData(result, {\n data,\n xColumn, yColumn, valueColumns,\n facetBy, xGroupBy, yGroupBy,\n facetSettings,\n annotations,\n dendrogramX, dendrogramY,\n normalizationBySource: { dataSource: normalization },\n NAValueAs,\n keysOrder,\n xAxis,\n yAxis,\n aggregation,\n showEmptyRows,\n showEmptyColumns,\n });\n return result;\n}\n"],"mappings":";AASA,SAAgB,IAA+C;AAC3D,QAAO;EACH,MAAM;GACF,cAAc,CAAC,aAAa;GAC5B,WAAW,EAAE;GACb,OAAO,EAAE;GACT,OAAO,EAAE;GACT,YAAY,EAAE;GACd,YAAY,EAAE;GACd,eAAe,EAAE;GACjB,eAAe,EAAE;GACjB,SAAS,EAAE;GACX,SAAS,EAAE;GACX,cAAc,EAAE;GAChB,cAAc,EAAE;GAChB,aAAa,EAAE;GACf,aAAa,EAAE;GACf,gBAAgB,EAAE;GAClB,iBAAiB,EAAE;GACnB,iBAAiB,EAAE;GACnB,aAAa,EAAE,YAAY,CAAC,UAAU,UAAU,EAAE;GACrD;EACD,QAAQ,EAAE;EACb;;AAGL,SAAgB,EAAS,EACrB,SACA,YACA,YACA,iBACA,YACA,aACA,aACA,kBACA,gBACA,gBACA,gBACA,kBACA,cACA,cACA,UACA,UACA,gBACA,mBAAgB,IAChB,sBAAmB,
|
|
1
|
+
{"version":3,"file":"getCells.js","names":[],"sources":["../../src/heatmap/getCells.ts"],"sourcesContent":["import type { DataFrame } from '../DataFrame';\nimport type { ColumnName } from '../types';\nimport type { HeatmapSettingsImpl } from './HeatmapSettingsImpl';\nimport type { Cell, GroupedCellsData } from './fillCellsData';\nimport { fillCellsData } from './fillCellsData';\n\nexport type CellHeatmap = Cell<'dataSource'>\nexport type GroupedCellsHeatmap = GroupedCellsData<'dataSource'>;\n\nexport function createEmptyGroupedCells(): GroupedCellsHeatmap {\n return {\n meta: {\n valueSources: ['dataSource'],\n facetKeys: [],\n xKeys: [],\n yKeys: [],\n xGroupKeys: [],\n yGroupKeys: [],\n xKeysByGroups: {},\n yKeysByGroups: {},\n xLabels: {},\n yLabels: {},\n xGroupLabels: {},\n yGroupLabels: {},\n xDataByKeys: {},\n yDataByKeys: {},\n facetKeyValues: {},\n xGroupKeyValues: {},\n yGroupKeyValues: {},\n valueExtent: { dataSource: [Infinity, -Infinity] },\n },\n facets: {},\n };\n}\n\nexport function getCells({\n data,\n xColumn,\n yColumn,\n valueColumns,\n facetBy,\n xGroupBy,\n yGroupBy,\n xSortBy,\n ySortBy,\n facetSettings,\n annotations,\n dendrogramX,\n dendrogramY,\n normalization,\n NAValueAs,\n transform,\n keysOrder,\n xAxis,\n yAxis,\n aggregation,\n showEmptyRows = false,\n showEmptyColumns = false,\n}: {\n data: DataFrame;\n xColumn: ColumnName;\n yColumn: ColumnName;\n valueColumns: Record<string, ColumnName>;\n facetBy: ColumnName[];\n xGroupBy: ColumnName[];\n yGroupBy: ColumnName[];\n xSortBy: ColumnName[];\n ySortBy: ColumnName[];\n facetSettings: HeatmapSettingsImpl['facetSettings'];\n annotations: HeatmapSettingsImpl['annotations'];\n dendrogramX: HeatmapSettingsImpl['dendrogramX'];\n dendrogramY: HeatmapSettingsImpl['dendrogramY'];\n normalization: HeatmapSettingsImpl['normalization'];\n NAValueAs: HeatmapSettingsImpl['NAValueAs'];\n transform: HeatmapSettingsImpl['transform'];\n keysOrder: HeatmapSettingsImpl['keysOrder'];\n xAxis: HeatmapSettingsImpl['chartSettings']['xAxis'];\n yAxis: HeatmapSettingsImpl['chartSettings']['yAxis'];\n aggregation: HeatmapSettingsImpl['aggregation'];\n showEmptyRows?: boolean;\n showEmptyColumns?: boolean;\n}): GroupedCellsHeatmap {\n const result: GroupedCellsHeatmap = createEmptyGroupedCells();\n fillCellsData(result, {\n data,\n xColumn, yColumn, valueColumns,\n facetBy, xGroupBy, yGroupBy,\n xSortBy, ySortBy,\n facetSettings,\n annotations,\n dendrogramX, dendrogramY,\n normalizationBySource: { dataSource: normalization },\n NAValueAs,\n transformBySource: { dataSource: transform },\n keysOrder,\n xAxis,\n yAxis,\n aggregation,\n showEmptyRows,\n showEmptyColumns,\n });\n return result;\n}\n"],"mappings":";AASA,SAAgB,IAA+C;AAC3D,QAAO;EACH,MAAM;GACF,cAAc,CAAC,aAAa;GAC5B,WAAW,EAAE;GACb,OAAO,EAAE;GACT,OAAO,EAAE;GACT,YAAY,EAAE;GACd,YAAY,EAAE;GACd,eAAe,EAAE;GACjB,eAAe,EAAE;GACjB,SAAS,EAAE;GACX,SAAS,EAAE;GACX,cAAc,EAAE;GAChB,cAAc,EAAE;GAChB,aAAa,EAAE;GACf,aAAa,EAAE;GACf,gBAAgB,EAAE;GAClB,iBAAiB,EAAE;GACnB,iBAAiB,EAAE;GACnB,aAAa,EAAE,YAAY,CAAC,UAAU,UAAU,EAAE;GACrD;EACD,QAAQ,EAAE;EACb;;AAGL,SAAgB,EAAS,EACrB,SACA,YACA,YACA,iBACA,YACA,aACA,aACA,YACA,YACA,kBACA,gBACA,gBACA,gBACA,kBACA,cACA,cACA,cACA,UACA,UACA,gBACA,mBAAgB,IAChB,sBAAmB,MAwBC;CACpB,IAAM,IAA8B,GAAyB;AAmB7D,QAlBA,EAAc,GAAQ;EAClB;EACA;EAAS;EAAS;EAClB;EAAS;EAAU;EACnB;EAAS;EACT;EACA;EACA;EAAa;EACb,uBAAuB,EAAE,YAAY,GAAe;EACpD;EACA,mBAAmB,EAAE,YAAY,GAAW;EAC5C;EACA;EACA;EACA;EACA;EACA;EACH,CAAC,EACK"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/heatmap/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAmB,KAAK,SAAS,EAAuB,KAAK,oBAAoB,EAAE,KAAK,eAAe,EAAe,MAAM,UAAU,CAAC;AAE9I,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAC5C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEtD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAExD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAK5D,qBAAa,YAAa,SAAQ,aAAa;IAC3C,QAAQ,EAAE,mBAAmB,CAAC;IAC9B,aAAa,gBAAuB;IAEpC,mBAAmB,EAAE,CAAC,CAAC,EAAC,OAAO,KAAK,IAAI,CAAQ;IAChD,eAAe,EAAE,CAAC,CAAC,EAAC,OAAO,KAAK,IAAI,CAAQ;IAE5C,cAAc,EAAE;QACZ,gBAAgB,EAAE,mBAAmB,CAAC;QACtC,eAAe,EAAE,eAAe,CAAC;QACjC,cAAc,EAAE,SAAS,EAAE,CAAC;KAC/B,GAAG,IAAI,CAAQ;IAEhB,gCAAgC,UAAS;gBAE7B,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,eAAe,EAAE,aAAa,CAAC,EAAC,oBAAoB;IAU3F,KAAK,CAAC,IAAI,EAAE,WAAW;IAgBvB,OAAO;IAIP,qBAAqB,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,eAAe;IA0BhE,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO;IAIhD,MAAM,IAAI,MAAM;IAKhB,mCAAmC,CAAC,YAAY,EAAE,mBAAmB,EAAE,QAAQ,EAAE,mBAAmB;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/heatmap/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAmB,KAAK,SAAS,EAAuB,KAAK,oBAAoB,EAAE,KAAK,eAAe,EAAe,MAAM,UAAU,CAAC;AAE9I,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAC5C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEtD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAExD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAK5D,qBAAa,YAAa,SAAQ,aAAa;IAC3C,QAAQ,EAAE,mBAAmB,CAAC;IAC9B,aAAa,gBAAuB;IAEpC,mBAAmB,EAAE,CAAC,CAAC,EAAC,OAAO,KAAK,IAAI,CAAQ;IAChD,eAAe,EAAE,CAAC,CAAC,EAAC,OAAO,KAAK,IAAI,CAAQ;IAE5C,cAAc,EAAE;QACZ,gBAAgB,EAAE,mBAAmB,CAAC;QACtC,eAAe,EAAE,eAAe,CAAC;QACjC,cAAc,EAAE,SAAS,EAAE,CAAC;KAC/B,GAAG,IAAI,CAAQ;IAEhB,gCAAgC,UAAS;gBAE7B,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,eAAe,EAAE,aAAa,CAAC,EAAC,oBAAoB;IAU3F,KAAK,CAAC,IAAI,EAAE,WAAW;IAgBvB,OAAO;IAIP,qBAAqB,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,eAAe;IA0BhE,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO;IAIhD,MAAM,IAAI,MAAM;IAKhB,mCAAmC,CAAC,YAAY,EAAE,mBAAmB,EAAE,QAAQ,EAAE,mBAAmB;IA4EpG,+BAA+B,CAAC,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS;IAU9D,WAAW;IAwEjB,gBAAgB;IAIhB,YAAY;CAsCf"}
|
package/dist/heatmap/index.js
CHANGED
|
@@ -45,50 +45,53 @@ var d = class extends e {
|
|
|
45
45
|
return this._updateChart(), u(this.chartRenderer.component);
|
|
46
46
|
}
|
|
47
47
|
_needUpdateCalculatedDataBySettings(e, t) {
|
|
48
|
-
let { xColumn: n, yColumn: a, valueColumn: o, xGroupBy: s, yGroupBy: c,
|
|
49
|
-
function
|
|
48
|
+
let { xColumn: n, yColumn: a, valueColumn: o, xGroupBy: s, yGroupBy: c, xSortBy: l, ySortBy: u, facetBy: d, annotations: f, chartSettings: p, facetSettings: m, dendrogramX: h, dendrogramY: g, normalization: _, aggregation: v, NAValueAs: y, transform: b } = t, x = Object.values(e.dendrogramX?.aes || {}).filter(r), S = Object.values(h?.aes || {}).filter(r), C = Object.values(e.dendrogramY?.aes || {}).filter(r), w = Object.values(g?.aes || {}).filter(r);
|
|
49
|
+
function T(e, t) {
|
|
50
50
|
return e.length !== t.length || e.some((e, n) => e.value !== t[n].value);
|
|
51
51
|
}
|
|
52
|
-
return e.xColumn.value !== n.value || e.yColumn.value !== a.value || e.valueColumn.value !== o.value ||
|
|
52
|
+
return e.xColumn.value !== n.value || e.yColumn.value !== a.value || e.valueColumn.value !== o.value || T(e.xGroupBy, s) || T(e.yGroupBy, c) || T(e.xSortBy, l) || T(e.ySortBy, u) || e.chartSettings.xAxis.sorting !== p.xAxis.sorting || e.chartSettings.yAxis.sorting !== p.yAxis.sorting || T(e.facetBy, d) || T(e.annotations.map((e) => e.valueColumn), f.map((e) => e.valueColumn)) || T(x, S) || T(C, w) || (t.dendrogramX || e.dendrogramX) && (e.dendrogramX?.distance !== t.dendrogramX?.distance || e.dendrogramX?.linkage !== t.dendrogramX?.linkage) || (t.dendrogramY || e.dendrogramY) && (e.dendrogramY?.distance !== t.dendrogramY?.distance || e.dendrogramY?.linkage !== t.dendrogramY?.linkage) || e.chartSettings.valueType !== p.valueType || e.facetSettings.sharedX !== m.sharedX || e.facetSettings.sharedY !== m.sharedY || i(e.facetSettings?.order ?? [], t.facetSettings?.order ?? []) || e.normalization?.method !== _?.method || e.normalization?.direction !== _?.direction || e.transform !== b || e.NAValueAs !== y || e.aggregation?.method !== v?.method || e.aggregation?.x !== v?.x || e.aggregation?.y !== v?.y || e.showEmptyRows !== t.showEmptyRows || e.showEmptyColumns !== t.showEmptyColumns;
|
|
53
53
|
}
|
|
54
54
|
_needUpdateCalculatedDataByData(e, t) {
|
|
55
55
|
let n = Object.keys(e.data), r = Object.keys(t.data);
|
|
56
56
|
return e.id !== t.id || n.length !== r.length || n.some((n) => e.data[n].length !== t.data[n]?.length);
|
|
57
57
|
}
|
|
58
58
|
async _updateData() {
|
|
59
|
-
let { xColumn: e, yColumn: t, valueColumn: n, xGroupBy: r, yGroupBy: i,
|
|
59
|
+
let { xColumn: e, yColumn: t, valueColumn: n, xGroupBy: r, yGroupBy: i, xSortBy: a, ySortBy: c, facetBy: l, chartSettings: u, facetSettings: d, annotations: f, dendrogramX: p, dendrogramY: m, normalization: h, NAValueAs: g, transform: _, keysOrder: v, aggregation: y, showEmptyRows: b, showEmptyColumns: x } = this.settings, S = o({
|
|
60
60
|
data: this.data,
|
|
61
61
|
xColumn: e,
|
|
62
62
|
yColumn: t,
|
|
63
63
|
valueColumns: { dataSource: n },
|
|
64
|
-
facetBy:
|
|
64
|
+
facetBy: l,
|
|
65
65
|
xGroupBy: r,
|
|
66
66
|
yGroupBy: i,
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
67
|
+
xSortBy: a,
|
|
68
|
+
ySortBy: c,
|
|
69
|
+
facetSettings: d,
|
|
70
|
+
annotations: f,
|
|
71
|
+
dendrogramX: p,
|
|
72
|
+
dendrogramY: m,
|
|
73
|
+
normalization: h,
|
|
74
|
+
NAValueAs: g,
|
|
75
|
+
transform: _,
|
|
76
|
+
keysOrder: v,
|
|
77
|
+
xAxis: u.xAxis,
|
|
78
|
+
yAxis: u.yAxis,
|
|
79
|
+
aggregation: y,
|
|
80
|
+
showEmptyRows: b,
|
|
81
|
+
showEmptyColumns: x
|
|
82
|
+
}), C = u.valueType === "discrete" ? this.data.getColumnCategories(n.value) : [];
|
|
83
|
+
if (p && d.sharedX && l.length > 0) throw Error("Dendrogram on X axis is not available with shared by facets X axis");
|
|
84
|
+
if (m && d.sharedY && l.length > 0) throw Error("Dendrogram on Y axis is not available with shared by facets Y axis");
|
|
82
85
|
this.clusteringCalculationsInProgress = !0, this.onLoadingChange(!0);
|
|
83
|
-
let
|
|
84
|
-
groupedCellsData:
|
|
85
|
-
dendrogramX:
|
|
86
|
-
dendrogramY:
|
|
86
|
+
let w = await s({
|
|
87
|
+
groupedCellsData: S,
|
|
88
|
+
dendrogramX: p,
|
|
89
|
+
dendrogramY: m
|
|
87
90
|
});
|
|
88
91
|
this.clusteringCalculationsInProgress = !1, this.onLoadingChange(!1), this.calculatedData = {
|
|
89
|
-
groupedCellsData:
|
|
90
|
-
dendrogramsData:
|
|
91
|
-
cellUniqValues:
|
|
92
|
+
groupedCellsData: S,
|
|
93
|
+
dendrogramsData: w,
|
|
94
|
+
cellUniqValues: C
|
|
92
95
|
}, this._updateChart();
|
|
93
96
|
}
|
|
94
97
|
_updateAesInData() {
|
|
@@ -96,13 +99,8 @@ var d = class extends e {
|
|
|
96
99
|
}
|
|
97
100
|
_updateChart() {
|
|
98
101
|
if (!this.calculatedData || this.clusteringCalculationsInProgress) return;
|
|
99
|
-
let { id: e, valueColumn: t, chartSettings: n, facetSettings: r, aes: i, annotations: a, dendrogramX: o, dendrogramY: s, inheritedDendrogramAes: c, normalization: l
|
|
100
|
-
|
|
101
|
-
y: u[f.value]?.length > 0,
|
|
102
|
-
xGroup: p.some((e) => u[e.value]?.length > 0),
|
|
103
|
-
yGroup: m.some((e) => u[e.value]?.length > 0)
|
|
104
|
-
}, g = this.data.columnNames.length ? this.data.getColumn(this.data.columnNames[0]).length : 0, _ = this.settings.cellsRenderingMode ?? (g > 5e5 ? "canvas" : "svg");
|
|
105
|
-
this.chartRenderer.render(this.data, e, n, r, i, this.calculatedData.groupedCellsData, a, t, o, s, this.calculatedData.dendrogramsData, c, this.calculatedData.cellUniqValues, l, this.onTooltipHintSwitch, h, _);
|
|
102
|
+
let { id: e, valueColumn: t, chartSettings: n, facetSettings: r, aes: i, annotations: a, dendrogramX: o, dendrogramY: s, inheritedDendrogramAes: c, normalization: l } = this.settings, u = this.data.columnNames.length ? this.data.getColumn(this.data.columnNames[0]).length : 0, d = this.settings.cellsRenderingMode ?? (u > 5e5 ? "canvas" : "svg");
|
|
103
|
+
this.chartRenderer.render(this.data, e, n, r, i, this.calculatedData.groupedCellsData, a, t, o, s, this.calculatedData.dendrogramsData, c, this.calculatedData.cellUniqValues, l, this.onTooltipHintSwitch, d);
|
|
106
104
|
}
|
|
107
105
|
};
|
|
108
106
|
export { d as ChartHeatmap };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../src/heatmap/index.ts"],"sourcesContent":["import { renderToString } from 'react-dom/server.browser';\nimport { AbstractChart } from '../AbstractChart';\nimport type { DataFrame } from '../DataFrame';\nimport { type ColumnName, type DataValue, getUnknownErrorInfo, type HeatmapEventHandlers, type HeatmapSettings, isErrorInfo } from '../types';\nimport { isColumnName } from '../utils';\nimport ChartRenderer from './ChartRenderer';\nimport type { GroupedCellsHeatmap } from './getCells';\nimport { getCells } from './getCells';\nimport type { DendrogramsData } from './getDendrograms';\nimport { getDendrograms } from './getDendrograms';\nimport { HeatmapSettingsImpl } from './HeatmapSettingsImpl';\nimport { MAX_SVG_RENDERED_CELLS_COUNT } from './constants';\nimport { noop } from 'lodash';\nimport { arraysAreDifferent } from '../utils/arraysAreDifferent';\n\nexport class ChartHeatmap extends AbstractChart {\n settings: HeatmapSettingsImpl;\n chartRenderer = new ChartRenderer();\n\n onTooltipHintSwitch: (v:boolean) => void = noop;\n onLoadingChange: (v:boolean) => void = noop;\n\n calculatedData: {\n groupedCellsData: GroupedCellsHeatmap;\n dendrogramsData: DendrogramsData;\n cellUniqValues: DataValue[];\n } | null = null;\n\n clusteringCalculationsInProgress = false;\n\n constructor(data: DataFrame, settings: HeatmapSettings, eventHandlers?:HeatmapEventHandlers) {\n super(data, settings);\n\n this.settings = new HeatmapSettingsImpl(settings);\n if (eventHandlers) {\n this.onTooltipHintSwitch = eventHandlers.onTooltipHintSwitch ?? noop;\n this.onLoadingChange = eventHandlers.onLoadingChange ?? noop;\n }\n }\n\n mount(node: HTMLElement) {\n try {\n this.chartRenderer.init(node);\n this._updateData();\n this.hasError = false;\n this.errorInfo = null;\n } catch (err) {\n this.hasError = true;\n if (err instanceof Error) {\n this.errorInfo = isErrorInfo(err.cause) ? err.cause : getUnknownErrorInfo(err);\n this.chartRenderer.renderError(err.message as string);\n console.error(err);\n }\n }\n }\n\n unmount() {\n this.chartRenderer.clear();\n }\n\n updateSettingsAndData(data: DataFrame, settings: HeatmapSettings) {\n try {\n const previousSettings = this.settings;\n const previousData = this.data;\n this.settings = new HeatmapSettingsImpl(settings);\n this.data = data;\n if (\n this._needUpdateCalculatedDataBySettings(previousSettings, this.settings) ||\n this._needUpdateCalculatedDataByData(previousData, this.data)\n ) {\n this._updateData();\n } else {\n this._updateAesInData();\n }\n this.hasError = false;\n this.errorInfo = null;\n } catch (err) {\n this.hasError = true;\n if (err instanceof Error) {\n this.errorInfo = isErrorInfo(err.cause) ? err.cause : getUnknownErrorInfo(err);\n this.chartRenderer.renderError(err.message as string);\n console.error(err);\n }\n }\n }\n\n updateChartState(_field: string, _value: unknown) {\n console.warn('no chart state for heatmap');\n }\n\n export(): string {\n this._updateChart();\n return renderToString(this.chartRenderer.component);\n }\n\n _needUpdateCalculatedDataBySettings(prevSettings: HeatmapSettingsImpl, settings: HeatmapSettingsImpl) {\n const {\n xColumn,\n yColumn,\n valueColumn,\n xGroupBy,\n yGroupBy,\n facetBy,\n annotations,\n chartSettings,\n facetSettings,\n dendrogramX,\n dendrogramY,\n normalization,\n aggregation,\n NAValueAs,\n } = settings;\n\n const prevDendrogramXColumns: ColumnName[] = Object.values(prevSettings.dendrogramX?.aes || {}).filter(\n isColumnName\n );\n const currentDendrogramXColumns: ColumnName[] = Object.values(dendrogramX?.aes || {}).filter(isColumnName);\n const prevDendrogramYColumns: ColumnName[] = Object.values(prevSettings.dendrogramY?.aes || {}).filter(\n isColumnName\n );\n const currentDendrogramYColumns: ColumnName[] = Object.values(dendrogramY?.aes || {}).filter(isColumnName);\n\n function compareColumnGroups(columns1: ColumnName[], columns2: ColumnName[]) {\n return (\n columns1.length !== columns2.length ||\n columns1.some((column, idx) => column.value !== columns2[idx].value)\n );\n }\n\n return (\n prevSettings.xColumn.value !== xColumn.value ||\n prevSettings.yColumn.value !== yColumn.value ||\n prevSettings.valueColumn.value !== valueColumn.value ||\n compareColumnGroups(prevSettings.xGroupBy, xGroupBy) ||\n compareColumnGroups(prevSettings.yGroupBy, yGroupBy) ||\n compareColumnGroups(prevSettings.facetBy, facetBy) ||\n compareColumnGroups(\n prevSettings.annotations.map(a => a.valueColumn),\n annotations.map(a => a.valueColumn)\n ) ||\n compareColumnGroups(prevDendrogramXColumns, currentDendrogramXColumns) ||\n compareColumnGroups(prevDendrogramYColumns, currentDendrogramYColumns) ||\n ((settings.dendrogramX || prevSettings.dendrogramX) &&\n (prevSettings.dendrogramX?.distance !== settings.dendrogramX?.distance ||\n prevSettings.dendrogramX?.linkage !== settings.dendrogramX?.linkage)) ||\n ((settings.dendrogramY || prevSettings.dendrogramY) &&\n (prevSettings.dendrogramY?.distance !== settings.dendrogramY?.distance ||\n prevSettings.dendrogramY?.linkage !== settings.dendrogramY?.linkage)) ||\n prevSettings.chartSettings.valueType !== chartSettings.valueType ||\n prevSettings.facetSettings.sharedX !== facetSettings.sharedX ||\n prevSettings.facetSettings.sharedY !== facetSettings.sharedY ||\n arraysAreDifferent(prevSettings.facetSettings?.order ?? [], settings.facetSettings?.order ?? []) ||\n prevSettings.normalization?.method !== normalization?.method ||\n prevSettings.normalization?.direction !== normalization?.direction ||\n prevSettings.NAValueAs !== NAValueAs ||\n prevSettings.aggregation?.method !== aggregation?.method ||\n prevSettings.aggregation?.x !== aggregation?.x ||\n prevSettings.aggregation?.y !== aggregation?.y ||\n prevSettings.showEmptyRows !== settings.showEmptyRows ||\n prevSettings.showEmptyColumns !== settings.showEmptyColumns\n );\n }\n\n _needUpdateCalculatedDataByData(prevData: DataFrame, data: DataFrame) {\n const prevKeys = Object.keys(prevData.data);\n const keys = Object.keys(data.data);\n return (\n prevData.id !== data.id ||\n prevKeys.length !== keys.length ||\n prevKeys.some(key => prevData.data[key].length !== data.data[key]?.length)\n );\n }\n\n async _updateData() {\n const {\n xColumn,\n yColumn,\n valueColumn,\n xGroupBy,\n yGroupBy,\n facetBy,\n chartSettings,\n facetSettings,\n annotations,\n dendrogramX,\n dendrogramY,\n normalization,\n NAValueAs,\n keysOrder,\n aggregation,\n showEmptyRows,\n showEmptyColumns,\n } = this.settings;\n\n const groupedCellsData = getCells({\n data: this.data,\n xColumn,\n yColumn,\n valueColumns: { dataSource: valueColumn },\n facetBy,\n xGroupBy,\n yGroupBy,\n facetSettings,\n annotations,\n dendrogramX,\n dendrogramY,\n normalization,\n NAValueAs,\n keysOrder,\n xAxis: chartSettings.xAxis,\n yAxis: chartSettings.yAxis,\n aggregation,\n showEmptyRows,\n showEmptyColumns,\n });\n\n const cellUniqValues = chartSettings.valueType === 'discrete' ? this.data.getColumnCategories(valueColumn.value) : [];\n \n if (dendrogramX && facetSettings.sharedX && facetBy.length > 0) {\n throw Error('Dendrogram on X axis is not available with shared by facets X axis');\n }\n if (dendrogramY && facetSettings.sharedY && facetBy.length > 0) {\n throw Error('Dendrogram on Y axis is not available with shared by facets Y axis');\n }\n this.clusteringCalculationsInProgress = true;\n this.onLoadingChange(true);\n const dendrogramsData = await getDendrograms({ groupedCellsData, dendrogramX, dendrogramY });\n this.clusteringCalculationsInProgress = false;\n this.onLoadingChange(false);\n\n this.calculatedData = {\n groupedCellsData,\n dendrogramsData,\n cellUniqValues,\n };\n \n this._updateChart();\n }\n\n _updateAesInData() {\n this._updateChart();\n }\n\n _updateChart() {\n if (!this.calculatedData || this.clusteringCalculationsInProgress) {\n return;\n }\n const {\n id,\n valueColumn,\n chartSettings,\n facetSettings,\n aes,\n annotations,\n dendrogramX,\n dendrogramY,\n inheritedDendrogramAes,\n normalization,\n keysOrder,\n xColumn,\n yColumn,\n xGroupBy,\n yGroupBy,\n } = this.settings;\n const customOrder = {\n x: keysOrder[xColumn.value]?.length > 0,\n y: keysOrder[yColumn.value]?.length > 0,\n xGroup: xGroupBy.some((v) => keysOrder[v.value]?.length > 0),\n yGroup: yGroupBy.some((v) => keysOrder[v.value]?.length > 0),\n };\n const dataSize = this.data.columnNames.length ? this.data.getColumn(this.data.columnNames[0]).length : 0;\n const cellsRenderingMode = this.settings.cellsRenderingMode ?? (dataSize > MAX_SVG_RENDERED_CELLS_COUNT ? 'canvas' : 'svg');\n \n this.chartRenderer.render(\n this.data,\n id,\n chartSettings,\n facetSettings,\n aes,\n this.calculatedData.groupedCellsData,\n annotations,\n valueColumn,\n dendrogramX,\n dendrogramY,\n this.calculatedData.dendrogramsData,\n inheritedDendrogramAes,\n this.calculatedData.cellUniqValues,\n normalization,\n this.onTooltipHintSwitch,\n customOrder,\n cellsRenderingMode\n );\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../src/heatmap/index.ts"],"sourcesContent":["import { renderToString } from 'react-dom/server.browser';\nimport { AbstractChart } from '../AbstractChart';\nimport type { DataFrame } from '../DataFrame';\nimport { type ColumnName, type DataValue, getUnknownErrorInfo, type HeatmapEventHandlers, type HeatmapSettings, isErrorInfo } from '../types';\nimport { isColumnName } from '../utils';\nimport ChartRenderer from './ChartRenderer';\nimport type { GroupedCellsHeatmap } from './getCells';\nimport { getCells } from './getCells';\nimport type { DendrogramsData } from './getDendrograms';\nimport { getDendrograms } from './getDendrograms';\nimport { HeatmapSettingsImpl } from './HeatmapSettingsImpl';\nimport { MAX_SVG_RENDERED_CELLS_COUNT } from './constants';\nimport { noop } from 'lodash';\nimport { arraysAreDifferent } from '../utils/arraysAreDifferent';\n\nexport class ChartHeatmap extends AbstractChart {\n settings: HeatmapSettingsImpl;\n chartRenderer = new ChartRenderer();\n\n onTooltipHintSwitch: (v:boolean) => void = noop;\n onLoadingChange: (v:boolean) => void = noop;\n\n calculatedData: {\n groupedCellsData: GroupedCellsHeatmap;\n dendrogramsData: DendrogramsData;\n cellUniqValues: DataValue[];\n } | null = null;\n\n clusteringCalculationsInProgress = false;\n\n constructor(data: DataFrame, settings: HeatmapSettings, eventHandlers?:HeatmapEventHandlers) {\n super(data, settings);\n\n this.settings = new HeatmapSettingsImpl(settings);\n if (eventHandlers) {\n this.onTooltipHintSwitch = eventHandlers.onTooltipHintSwitch ?? noop;\n this.onLoadingChange = eventHandlers.onLoadingChange ?? noop;\n }\n }\n\n mount(node: HTMLElement) {\n try {\n this.chartRenderer.init(node);\n this._updateData();\n this.hasError = false;\n this.errorInfo = null;\n } catch (err) {\n this.hasError = true;\n if (err instanceof Error) {\n this.errorInfo = isErrorInfo(err.cause) ? err.cause : getUnknownErrorInfo(err);\n this.chartRenderer.renderError(err.message as string);\n console.error(err);\n }\n }\n }\n\n unmount() {\n this.chartRenderer.clear();\n }\n\n updateSettingsAndData(data: DataFrame, settings: HeatmapSettings) {\n try {\n const previousSettings = this.settings;\n const previousData = this.data;\n this.settings = new HeatmapSettingsImpl(settings);\n this.data = data;\n if (\n this._needUpdateCalculatedDataBySettings(previousSettings, this.settings) ||\n this._needUpdateCalculatedDataByData(previousData, this.data)\n ) {\n this._updateData();\n } else {\n this._updateAesInData();\n }\n this.hasError = false;\n this.errorInfo = null;\n } catch (err) {\n this.hasError = true;\n if (err instanceof Error) {\n this.errorInfo = isErrorInfo(err.cause) ? err.cause : getUnknownErrorInfo(err);\n this.chartRenderer.renderError(err.message as string);\n console.error(err);\n }\n }\n }\n\n updateChartState(_field: string, _value: unknown) {\n console.warn('no chart state for heatmap');\n }\n\n export(): string {\n this._updateChart();\n return renderToString(this.chartRenderer.component);\n }\n\n _needUpdateCalculatedDataBySettings(prevSettings: HeatmapSettingsImpl, settings: HeatmapSettingsImpl) {\n const {\n xColumn,\n yColumn,\n valueColumn,\n xGroupBy,\n yGroupBy,\n xSortBy,\n ySortBy,\n facetBy,\n annotations,\n chartSettings,\n facetSettings,\n dendrogramX,\n dendrogramY,\n normalization,\n aggregation,\n NAValueAs,\n transform,\n } = settings;\n\n const prevDendrogramXColumns: ColumnName[] = Object.values(prevSettings.dendrogramX?.aes || {}).filter(\n isColumnName\n );\n const currentDendrogramXColumns: ColumnName[] = Object.values(dendrogramX?.aes || {}).filter(isColumnName);\n const prevDendrogramYColumns: ColumnName[] = Object.values(prevSettings.dendrogramY?.aes || {}).filter(\n isColumnName\n );\n const currentDendrogramYColumns: ColumnName[] = Object.values(dendrogramY?.aes || {}).filter(isColumnName);\n\n function compareColumnGroups(columns1: ColumnName[], columns2: ColumnName[]) {\n return (\n columns1.length !== columns2.length ||\n columns1.some((column, idx) => column.value !== columns2[idx].value)\n );\n }\n\n return (\n prevSettings.xColumn.value !== xColumn.value ||\n prevSettings.yColumn.value !== yColumn.value ||\n prevSettings.valueColumn.value !== valueColumn.value ||\n compareColumnGroups(prevSettings.xGroupBy, xGroupBy) ||\n compareColumnGroups(prevSettings.yGroupBy, yGroupBy) ||\n compareColumnGroups(prevSettings.xSortBy, xSortBy) ||\n compareColumnGroups(prevSettings.ySortBy, ySortBy) ||\n prevSettings.chartSettings.xAxis.sorting !== chartSettings.xAxis.sorting ||\n prevSettings.chartSettings.yAxis.sorting !== chartSettings.yAxis.sorting ||\n compareColumnGroups(prevSettings.facetBy, facetBy) ||\n compareColumnGroups(\n prevSettings.annotations.map(a => a.valueColumn),\n annotations.map(a => a.valueColumn)\n ) ||\n compareColumnGroups(prevDendrogramXColumns, currentDendrogramXColumns) ||\n compareColumnGroups(prevDendrogramYColumns, currentDendrogramYColumns) ||\n ((settings.dendrogramX || prevSettings.dendrogramX) &&\n (prevSettings.dendrogramX?.distance !== settings.dendrogramX?.distance ||\n prevSettings.dendrogramX?.linkage !== settings.dendrogramX?.linkage)) ||\n ((settings.dendrogramY || prevSettings.dendrogramY) &&\n (prevSettings.dendrogramY?.distance !== settings.dendrogramY?.distance ||\n prevSettings.dendrogramY?.linkage !== settings.dendrogramY?.linkage)) ||\n prevSettings.chartSettings.valueType !== chartSettings.valueType ||\n prevSettings.facetSettings.sharedX !== facetSettings.sharedX ||\n prevSettings.facetSettings.sharedY !== facetSettings.sharedY ||\n arraysAreDifferent(prevSettings.facetSettings?.order ?? [], settings.facetSettings?.order ?? []) ||\n prevSettings.normalization?.method !== normalization?.method ||\n prevSettings.normalization?.direction !== normalization?.direction ||\n prevSettings.transform !== transform ||\n prevSettings.NAValueAs !== NAValueAs ||\n prevSettings.aggregation?.method !== aggregation?.method ||\n prevSettings.aggregation?.x !== aggregation?.x ||\n prevSettings.aggregation?.y !== aggregation?.y ||\n prevSettings.showEmptyRows !== settings.showEmptyRows ||\n prevSettings.showEmptyColumns !== settings.showEmptyColumns\n );\n }\n\n _needUpdateCalculatedDataByData(prevData: DataFrame, data: DataFrame) {\n const prevKeys = Object.keys(prevData.data);\n const keys = Object.keys(data.data);\n return (\n prevData.id !== data.id ||\n prevKeys.length !== keys.length ||\n prevKeys.some(key => prevData.data[key].length !== data.data[key]?.length)\n );\n }\n\n async _updateData() {\n const {\n xColumn,\n yColumn,\n valueColumn,\n xGroupBy,\n yGroupBy,\n xSortBy,\n ySortBy,\n facetBy,\n chartSettings,\n facetSettings,\n annotations,\n dendrogramX,\n dendrogramY,\n normalization,\n NAValueAs,\n transform,\n keysOrder,\n aggregation,\n showEmptyRows,\n showEmptyColumns,\n } = this.settings;\n\n const groupedCellsData = getCells({\n data: this.data,\n xColumn,\n yColumn,\n valueColumns: { dataSource: valueColumn },\n facetBy,\n xGroupBy,\n yGroupBy,\n xSortBy,\n ySortBy,\n facetSettings,\n annotations,\n dendrogramX,\n dendrogramY,\n normalization,\n NAValueAs,\n transform,\n keysOrder,\n xAxis: chartSettings.xAxis,\n yAxis: chartSettings.yAxis,\n aggregation,\n showEmptyRows,\n showEmptyColumns,\n });\n\n const cellUniqValues = chartSettings.valueType === 'discrete' ? this.data.getColumnCategories(valueColumn.value) : [];\n \n if (dendrogramX && facetSettings.sharedX && facetBy.length > 0) {\n throw Error('Dendrogram on X axis is not available with shared by facets X axis');\n }\n if (dendrogramY && facetSettings.sharedY && facetBy.length > 0) {\n throw Error('Dendrogram on Y axis is not available with shared by facets Y axis');\n }\n this.clusteringCalculationsInProgress = true;\n this.onLoadingChange(true);\n const dendrogramsData = await getDendrograms({ groupedCellsData, dendrogramX, dendrogramY });\n this.clusteringCalculationsInProgress = false;\n this.onLoadingChange(false);\n\n this.calculatedData = {\n groupedCellsData,\n dendrogramsData,\n cellUniqValues,\n };\n \n this._updateChart();\n }\n\n _updateAesInData() {\n this._updateChart();\n }\n\n _updateChart() {\n if (!this.calculatedData || this.clusteringCalculationsInProgress) {\n return;\n }\n const {\n id,\n valueColumn,\n chartSettings,\n facetSettings,\n aes,\n annotations,\n dendrogramX,\n dendrogramY,\n inheritedDendrogramAes,\n normalization,\n } = this.settings;\n const dataSize = this.data.columnNames.length ? this.data.getColumn(this.data.columnNames[0]).length : 0;\n const cellsRenderingMode = this.settings.cellsRenderingMode ?? (dataSize > MAX_SVG_RENDERED_CELLS_COUNT ? 'canvas' : 'svg');\n\n this.chartRenderer.render(\n this.data,\n id,\n chartSettings,\n facetSettings,\n aes,\n this.calculatedData.groupedCellsData,\n annotations,\n valueColumn,\n dendrogramX,\n dendrogramY,\n this.calculatedData.dendrogramsData,\n inheritedDendrogramAes,\n this.calculatedData.cellUniqValues,\n normalization,\n this.onTooltipHintSwitch,\n cellsRenderingMode\n );\n }\n}\n"],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { ChartInterface } from './AbstractChart';
|
|
2
2
|
import { DataByColumns } from './DataFrame';
|
|
3
3
|
import { MiPlots } from './MiPlots';
|
|
4
|
-
import { BubbleSettings, DendroSettings, DiscreteSettings, ErrorInfo, ErrorInfoUnknown, HeatmapSettings, HistogramSettings, ScatterplotSettings, ScatterplotUmapSettings, Settings, AxisSettingsContinuous, AxisSettingsDiscrete } from './types';
|
|
4
|
+
import { BubbleSettings, DendroSettings, DiscreteSettings, ErrorInfo, ErrorInfoUnknown, HeatmapSettings, HistogramSettings, ScatterplotSettings, ScatterplotUmapSettings, SelectionSettings, Settings, AxisSettingsContinuous, AxisSettingsDiscrete } from './types';
|
|
5
5
|
import { LassoControlsState, Polygon } from './scatterplot-umap/types';
|
|
6
6
|
import { SCATTERPLOT_CONTROLS_EVENTS } from './scatterplot-umap/constants';
|
|
7
7
|
import { getFacetKeysFromValueLists } from './utils/getFacetKeysFromValueLists';
|
|
8
8
|
import { getKeysCombinations } from './utils/getKeysCombination';
|
|
9
|
-
export { BubbleSettings, ChartInterface, DataByColumns, DendroSettings, DiscreteSettings, getFacetKeysFromValueLists, getKeysCombinations, HeatmapSettings, HistogramSettings, MiPlots, ScatterplotSettings, ScatterplotUmapSettings, Settings, AxisSettingsDiscrete, AxisSettingsContinuous, SCATTERPLOT_CONTROLS_EVENTS, LassoControlsState, Polygon, ErrorInfo, ErrorInfoUnknown };
|
|
9
|
+
export { BubbleSettings, ChartInterface, DataByColumns, DendroSettings, DiscreteSettings, getFacetKeysFromValueLists, getKeysCombinations, HeatmapSettings, HistogramSettings, MiPlots, ScatterplotSettings, ScatterplotUmapSettings, Settings, AxisSettingsDiscrete, AxisSettingsContinuous, SCATTERPLOT_CONTROLS_EVENTS, LassoControlsState, Polygon, ErrorInfo, ErrorInfoUnknown, SelectionSettings, };
|
|
10
10
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,gBAAgB,EAAE,SAAS,EAAE,gBAAgB,EAAE,eAAe,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,gBAAgB,EAAE,SAAS,EAAE,gBAAgB,EAAE,eAAe,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC5N,OAAO,KAAK,EAAC,kBAAkB,EAAE,OAAO,EAAC,MAAM,0BAA0B,CAAC;AAC1E,OAAO,EAAC,2BAA2B,EAAC,MAAM,8BAA8B,CAAC;AACzE,OAAO,KAAK,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAC5E,OAAO,EAAE,0BAA0B,EAAE,MAAM,oCAAoC,CAAC;AAChF,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEjE,OAAO,EACH,cAAc,EAAE,cAAc,EAAE,aAAa,EAAE,cAAc,EAAE,gBAAgB,EAAE,0BAA0B,EAAE,mBAAmB,EAChI,eAAe,EAAE,iBAAiB,EAAE,OAAO,EAAE,mBAAmB,EAChE,uBAAuB,EAAE,QAAQ,EAAE,oBAAoB,EAAE,sBAAsB,EAC/E,2BAA2B,EAAE,kBAAkB,EAAE,OAAO,EAAE,SAAS,EAAE,gBAAgB,EACrF,iBAAiB,GACpB,CAAC"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { ReactElement } from 'react';
|
|
2
|
+
import { Root } from 'react-dom/client';
|
|
3
|
+
import { LegendData } from '../common/types';
|
|
4
|
+
import { ColumnName, FrameType, TitlePosition } from '../types';
|
|
5
|
+
import { Margins } from './components/types';
|
|
6
|
+
import { FacetedSelectionData } from './createSelectionData';
|
|
7
|
+
import { SelectionFillColor, SelectionSettingsImpl, SelectionXAxisSettings, SelectionYAxisSettings } from './SelectionSettingsImpl';
|
|
8
|
+
type GroupingSettings = NonNullable<SelectionSettingsImpl['grouping']>;
|
|
9
|
+
declare class ChartRenderer {
|
|
10
|
+
reactRoot: Root | null;
|
|
11
|
+
parentNode: HTMLElement | null;
|
|
12
|
+
rootNode: HTMLElement | null;
|
|
13
|
+
component: ReactElement;
|
|
14
|
+
cellPlotWidth: number;
|
|
15
|
+
cellPlotHeight: number;
|
|
16
|
+
nCols: number;
|
|
17
|
+
nRows: number;
|
|
18
|
+
isFaceted: boolean;
|
|
19
|
+
cellLabelHeight: number;
|
|
20
|
+
orderedFaceted: FacetedSelectionData;
|
|
21
|
+
facetLabels: Record<string, string[]>;
|
|
22
|
+
facetTitles: Record<string, string[]>;
|
|
23
|
+
grouped: boolean;
|
|
24
|
+
groupNames: string[];
|
|
25
|
+
colorMap: Map<string, string>;
|
|
26
|
+
solidColor: string;
|
|
27
|
+
xLabelsByFacet: Record<string, Record<string, string[]>>;
|
|
28
|
+
xCountsByFacet: Record<string, Record<string, string>>;
|
|
29
|
+
xLabelsPosition: 'center' | '45deg' | '90deg';
|
|
30
|
+
maxLabelLines: number;
|
|
31
|
+
maxLabelPx: number;
|
|
32
|
+
yTickWidth: number;
|
|
33
|
+
labelBlock: number;
|
|
34
|
+
xTitleHeight: number;
|
|
35
|
+
yTitleWidth: number;
|
|
36
|
+
yTickReserve: number;
|
|
37
|
+
xLabelTopReserve: number;
|
|
38
|
+
topPad: number;
|
|
39
|
+
rightPad: number;
|
|
40
|
+
fullLeftPad: number;
|
|
41
|
+
fullBottomPad: number;
|
|
42
|
+
colLeftPads: number[];
|
|
43
|
+
rowBottomPads: number[];
|
|
44
|
+
colXOffsets: number[];
|
|
45
|
+
rowYOffsets: number[];
|
|
46
|
+
gridWidth: number;
|
|
47
|
+
gridHeight: number;
|
|
48
|
+
legend: LegendData;
|
|
49
|
+
mainTitle: string[];
|
|
50
|
+
margins: Margins;
|
|
51
|
+
totalWidth: number;
|
|
52
|
+
totalHeight: number;
|
|
53
|
+
clear(): void;
|
|
54
|
+
init(node: HTMLElement): void;
|
|
55
|
+
updateChartSizes(width: number, height: number): void;
|
|
56
|
+
updateGrid({ faceted, facetLabels, facetBy, facetSettings, }: {
|
|
57
|
+
faceted: FacetedSelectionData;
|
|
58
|
+
facetLabels: Record<string, string[]>;
|
|
59
|
+
facetBy: ColumnName[];
|
|
60
|
+
facetSettings: SelectionSettingsImpl['facetSettings'];
|
|
61
|
+
}): void;
|
|
62
|
+
updateGroupingMaps(grouping: GroupingSettings | undefined, fillColor: SelectionFillColor): void;
|
|
63
|
+
createAxisLabels(xAxis: SelectionXAxisSettings): void;
|
|
64
|
+
updateCaptionsSize(xAxis: SelectionXAxisSettings, yAxis: SelectionYAxisSettings): void;
|
|
65
|
+
updateChartDimensions(): void;
|
|
66
|
+
updateLegendSize(showLegend: boolean, grouping: GroupingSettings | undefined): void;
|
|
67
|
+
createMainTitle(title: string, showTitle: boolean): void;
|
|
68
|
+
updateMargins(): void;
|
|
69
|
+
render({ faceted, facetLabels, width, height, title, showTitle, grouping, showLegend, facetBy, facetSettings, xAxis, yAxis, frame, titlePosition, fillColor, opacity, }: {
|
|
70
|
+
faceted: FacetedSelectionData;
|
|
71
|
+
facetLabels: Record<string, string[]>;
|
|
72
|
+
width: number;
|
|
73
|
+
height: number;
|
|
74
|
+
title: string;
|
|
75
|
+
showTitle: boolean;
|
|
76
|
+
grouping: GroupingSettings | undefined;
|
|
77
|
+
showLegend: boolean;
|
|
78
|
+
facetBy: ColumnName[];
|
|
79
|
+
facetSettings: SelectionSettingsImpl['facetSettings'];
|
|
80
|
+
xAxis: SelectionXAxisSettings;
|
|
81
|
+
yAxis: SelectionYAxisSettings;
|
|
82
|
+
frame: FrameType;
|
|
83
|
+
titlePosition: TitlePosition;
|
|
84
|
+
fillColor: SelectionFillColor;
|
|
85
|
+
opacity: number;
|
|
86
|
+
}): void;
|
|
87
|
+
renderError(message: string): void;
|
|
88
|
+
}
|
|
89
|
+
export default ChartRenderer;
|
|
90
|
+
//# sourceMappingURL=ChartRenderer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChartRenderer.d.ts","sourceRoot":"","sources":["../../src/selection/ChartRenderer.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
import { Error as e } from "../common/Error.js";
|
|
2
|
+
import { TextMeasurer as t } from "../utils/TextMeasurer/TextMeasurer.js";
|
|
3
|
+
import { arrangeLegendParts as n } from "../utils/arrangeLegendParts.js";
|
|
4
|
+
import { splitTextByWidth as r } from "../utils/splitTextByWidth.js";
|
|
5
|
+
import "../discrete/utils/index.js";
|
|
6
|
+
import { AGGREGATE_RIBBON_COLOR as i } from "./constants.js";
|
|
7
|
+
import { formatCount as a, formatPercent as o } from "./utils.js";
|
|
8
|
+
import { ChartsGroup as s } from "./components/ChartsGroup.js";
|
|
9
|
+
import { scaleOrdinal as c } from "d3-scale";
|
|
10
|
+
import { createRoot as l } from "react-dom/client";
|
|
11
|
+
import { Fragment as u, jsx as d } from "react/jsx-runtime";
|
|
12
|
+
var f = class {
|
|
13
|
+
reactRoot = null;
|
|
14
|
+
parentNode = null;
|
|
15
|
+
rootNode = null;
|
|
16
|
+
component = /* @__PURE__ */ d(u, {});
|
|
17
|
+
cellPlotWidth = 0;
|
|
18
|
+
cellPlotHeight = 0;
|
|
19
|
+
nCols = 1;
|
|
20
|
+
nRows = 1;
|
|
21
|
+
isFaceted = !1;
|
|
22
|
+
cellLabelHeight = 0;
|
|
23
|
+
orderedFaceted = {
|
|
24
|
+
facetKeys: [],
|
|
25
|
+
byFacet: {},
|
|
26
|
+
groupNames: []
|
|
27
|
+
};
|
|
28
|
+
facetLabels = {};
|
|
29
|
+
facetTitles = {};
|
|
30
|
+
grouped = !1;
|
|
31
|
+
groupNames = [];
|
|
32
|
+
colorMap = /* @__PURE__ */ new Map();
|
|
33
|
+
solidColor = "";
|
|
34
|
+
xLabelsByFacet = {};
|
|
35
|
+
xCountsByFacet = {};
|
|
36
|
+
xLabelsPosition = "center";
|
|
37
|
+
maxLabelLines = 1;
|
|
38
|
+
maxLabelPx = 0;
|
|
39
|
+
yTickWidth = 0;
|
|
40
|
+
labelBlock = 0;
|
|
41
|
+
xTitleHeight = 0;
|
|
42
|
+
yTitleWidth = 0;
|
|
43
|
+
yTickReserve = 0;
|
|
44
|
+
xLabelTopReserve = 0;
|
|
45
|
+
topPad = 0;
|
|
46
|
+
rightPad = 12;
|
|
47
|
+
fullLeftPad = 0;
|
|
48
|
+
fullBottomPad = 0;
|
|
49
|
+
colLeftPads = [];
|
|
50
|
+
rowBottomPads = [];
|
|
51
|
+
colXOffsets = [0];
|
|
52
|
+
rowYOffsets = [0];
|
|
53
|
+
gridWidth = 0;
|
|
54
|
+
gridHeight = 0;
|
|
55
|
+
legend = {
|
|
56
|
+
width: 0,
|
|
57
|
+
height: 0,
|
|
58
|
+
items: []
|
|
59
|
+
};
|
|
60
|
+
mainTitle = [];
|
|
61
|
+
margins = {
|
|
62
|
+
top: 24,
|
|
63
|
+
bottom: 24,
|
|
64
|
+
left: 24,
|
|
65
|
+
right: 24
|
|
66
|
+
};
|
|
67
|
+
totalWidth = 0;
|
|
68
|
+
totalHeight = 0;
|
|
69
|
+
clear() {
|
|
70
|
+
this.parentNode && this.rootNode && (this.parentNode.removeChild(this.rootNode), this.parentNode = null, this.rootNode = null), setTimeout(() => {
|
|
71
|
+
this.reactRoot?.unmount(), this.reactRoot = null;
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
init(e) {
|
|
75
|
+
this.parentNode === null && (this.parentNode = e, this.rootNode = document.createElement("div"), this.parentNode.appendChild(this.rootNode), this.reactRoot = l(this.rootNode));
|
|
76
|
+
}
|
|
77
|
+
updateChartSizes(e, t) {
|
|
78
|
+
this.cellPlotWidth = e, this.cellPlotHeight = t;
|
|
79
|
+
}
|
|
80
|
+
updateGrid({ faceted: e, facetLabels: t, facetBy: n, facetSettings: i }) {
|
|
81
|
+
let a = i.order?.length ? i.order.filter((t) => e.facetKeys.includes(t)) : e.facetKeys;
|
|
82
|
+
if (this.orderedFaceted = {
|
|
83
|
+
...e,
|
|
84
|
+
facetKeys: a
|
|
85
|
+
}, this.facetLabels = t, this.isFaceted = n.length > 0, this.isFaceted) {
|
|
86
|
+
let e = Math.max(this.cellPlotWidth, 40);
|
|
87
|
+
this.facetTitles = {};
|
|
88
|
+
let n = 1;
|
|
89
|
+
for (let i of a) {
|
|
90
|
+
let a = (t[i] ?? []).join(" / "), o = a ? r(a, e, 20) : [];
|
|
91
|
+
this.facetTitles[i] = o, o.length > n && (n = o.length);
|
|
92
|
+
}
|
|
93
|
+
this.cellLabelHeight = 48 + (n - 1) * 24;
|
|
94
|
+
} else this.facetTitles = {}, this.cellLabelHeight = 0;
|
|
95
|
+
let o = a.length;
|
|
96
|
+
this.nCols = Math.min(o, i.nCols ?? Math.max(1, Math.ceil(Math.sqrt(o)))), this.nRows = i.nRows ?? Math.max(1, Math.ceil(o / this.nCols));
|
|
97
|
+
}
|
|
98
|
+
updateGroupingMaps(e, t) {
|
|
99
|
+
let n = typeof t == "object" && !!t;
|
|
100
|
+
this.grouped = n && !!e;
|
|
101
|
+
let r = e?.order ? e.order.map(String).filter((e) => this.orderedFaceted.groupNames.includes(e)) : this.orderedFaceted.groupNames;
|
|
102
|
+
this.groupNames = [...r, ...this.orderedFaceted.groupNames.filter((e) => !r.includes(e))];
|
|
103
|
+
let a = e?.inheritedAes;
|
|
104
|
+
if (this.colorMap = /* @__PURE__ */ new Map(), this.grouped && a) for (let e of this.groupNames) {
|
|
105
|
+
let t = a[e]?.fillColor;
|
|
106
|
+
t && this.colorMap.set(e, t);
|
|
107
|
+
}
|
|
108
|
+
this.solidColor = n ? i : t;
|
|
109
|
+
}
|
|
110
|
+
createAxisLabels(e) {
|
|
111
|
+
let n = new t("500 14px Manrope"), i = this.orderedFaceted.facetKeys, o = i.map((e) => this.orderedFaceted.byFacet[e]?.stages.length ?? 0).reduce((e, t) => Math.max(e, t), 0), s = 0;
|
|
112
|
+
for (let e of i) for (let t of this.orderedFaceted.byFacet[e]?.stages ?? []) s = Math.max(s, n.getTextWidth(t.label));
|
|
113
|
+
this.maxLabelPx = s;
|
|
114
|
+
let c = o > 0 ? this.cellPlotWidth / o : this.cellPlotWidth;
|
|
115
|
+
this.xLabelsPosition = e.labelsPosition ?? (s > c * .65 ? "90deg" : "center");
|
|
116
|
+
let l = this.xLabelsPosition !== "center";
|
|
117
|
+
this.xLabelsByFacet = {}, this.xCountsByFacet = {}, this.maxLabelLines = 1;
|
|
118
|
+
for (let e of i) {
|
|
119
|
+
let t = this.orderedFaceted.byFacet[e]?.stages ?? [], n = {}, i = {};
|
|
120
|
+
for (let [e, o] of t.entries()) {
|
|
121
|
+
let t = l ? [o.label] : r(o.label, 120, 14);
|
|
122
|
+
n[String(e)] = t, i[String(e)] = a(o.total), this.maxLabelLines = Math.max(this.maxLabelLines, t.length);
|
|
123
|
+
}
|
|
124
|
+
this.xLabelsByFacet[e] = n, this.xCountsByFacet[e] = i;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
updateCaptionsSize(e, n) {
|
|
128
|
+
let r = new t("500 14px Manrope");
|
|
129
|
+
n.hiddenLabels ? (this.yTickWidth = 0, this.yTickReserve = n.showTicks ? 4 : 0) : (this.yTickWidth = r.getTextWidth(o(100)), this.yTickReserve = 40), e.hiddenLabels ? (this.labelBlock = 0, this.xLabelTopReserve = e.showTicks ? 4 : 0) : (this.labelBlock = this.xLabelsPosition === "center" ? this.maxLabelLines * 20 : this.xLabelsPosition === "45deg" ? Math.ceil(this.maxLabelPx * .71) + 10 : Math.ceil(this.maxLabelPx) + 10, this.xLabelTopReserve = 6), this.xTitleHeight = e.title ? 26 : 0, this.yTitleWidth = n.title ? 24 : 0;
|
|
130
|
+
}
|
|
131
|
+
updateChartDimensions() {
|
|
132
|
+
this.fullLeftPad = this.yTitleWidth + this.yTickWidth + this.yTickReserve, this.fullBottomPad = this.xLabelTopReserve + this.labelBlock + this.xTitleHeight, this.topPad = 20, this.rightPad = 12, this.colLeftPads = Array.from({ length: this.nCols }, (e, t) => !this.isFaceted || t === 0 ? this.fullLeftPad : 12);
|
|
133
|
+
let e = this.orderedFaceted.facetKeys.length % this.nCols !== 0;
|
|
134
|
+
this.rowBottomPads = Array.from({ length: this.nRows }, (t, n) => {
|
|
135
|
+
let r = n === this.nRows - 1 || n === this.nRows - 2 && e;
|
|
136
|
+
return !this.isFaceted || r ? this.fullBottomPad : 12;
|
|
137
|
+
}), this.colXOffsets = [0];
|
|
138
|
+
for (let [e, t] of this.colLeftPads.entries()) this.colXOffsets.push(this.colXOffsets[e] + t + this.cellPlotWidth + this.rightPad);
|
|
139
|
+
this.rowYOffsets = [0];
|
|
140
|
+
for (let [e, t] of this.rowBottomPads.entries()) this.rowYOffsets.push(this.rowYOffsets[e] + this.topPad + this.cellLabelHeight + this.cellPlotHeight + t);
|
|
141
|
+
this.gridWidth = this.colXOffsets[this.nCols], this.gridHeight = this.rowYOffsets[this.nRows];
|
|
142
|
+
}
|
|
143
|
+
updateLegendSize(e, t) {
|
|
144
|
+
if (!e || !this.grouped || this.groupNames.length === 0) {
|
|
145
|
+
this.legend = {
|
|
146
|
+
width: 0,
|
|
147
|
+
height: 0,
|
|
148
|
+
items: []
|
|
149
|
+
};
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
let r = n([{
|
|
153
|
+
id: "selection-group",
|
|
154
|
+
type: "discreteColor",
|
|
155
|
+
title: t?.columnName.label ?? t?.columnName.value ?? "",
|
|
156
|
+
width: 0,
|
|
157
|
+
height: 0,
|
|
158
|
+
left: 0,
|
|
159
|
+
top: 0,
|
|
160
|
+
values: this.groupNames,
|
|
161
|
+
scale: c().domain(this.groupNames).range(this.groupNames.map((e) => this.colorMap.get(e) ?? "")),
|
|
162
|
+
labels: Object.fromEntries(this.groupNames.map((e) => [e, e === "null" ? t?.columnName.nullValueLabel ?? "N/A" : e]))
|
|
163
|
+
}], this.cellPlotHeight);
|
|
164
|
+
this.legend = {
|
|
165
|
+
width: r.reduce((e, t) => Math.max(e, t.left + t.width), 0) + 24,
|
|
166
|
+
height: this.cellPlotHeight,
|
|
167
|
+
items: r
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
createMainTitle(e, t) {
|
|
171
|
+
this.mainTitle = t && e ? r(e, Math.max(this.cellPlotWidth, 40), 20) : [];
|
|
172
|
+
}
|
|
173
|
+
updateMargins() {
|
|
174
|
+
let e = this.mainTitle.length > 0 ? this.mainTitle.length * 24 + 48 : 0;
|
|
175
|
+
this.margins = {
|
|
176
|
+
top: Math.max(e, 24),
|
|
177
|
+
bottom: 24,
|
|
178
|
+
left: 24,
|
|
179
|
+
right: 24 + this.legend.width
|
|
180
|
+
}, this.totalWidth = this.margins.left + this.gridWidth + this.margins.right, this.totalHeight = this.margins.top + this.gridHeight + this.margins.bottom;
|
|
181
|
+
}
|
|
182
|
+
render({ faceted: e, facetLabels: t, width: n, height: r, title: i, showTitle: a, grouping: o, showLegend: c, facetBy: l, facetSettings: u, xAxis: f, yAxis: p, frame: m, titlePosition: h, fillColor: g, opacity: _ }) {
|
|
183
|
+
this.updateChartSizes(n, r), this.updateGrid({
|
|
184
|
+
faceted: e,
|
|
185
|
+
facetLabels: t,
|
|
186
|
+
facetBy: l,
|
|
187
|
+
facetSettings: u
|
|
188
|
+
}), this.updateGroupingMaps(o, g), this.createAxisLabels(f), this.updateCaptionsSize(f, p), this.updateChartDimensions(), this.updateLegendSize(c, o), this.createMainTitle(i, a), this.updateMargins();
|
|
189
|
+
let v = /* @__PURE__ */ d(s, {
|
|
190
|
+
facetData: {
|
|
191
|
+
faceted: this.orderedFaceted,
|
|
192
|
+
facetLabels: this.facetLabels,
|
|
193
|
+
facetTitles: this.facetTitles
|
|
194
|
+
},
|
|
195
|
+
gridLayout: {
|
|
196
|
+
nRows: this.nRows,
|
|
197
|
+
nCols: this.nCols,
|
|
198
|
+
totalWidth: this.totalWidth,
|
|
199
|
+
totalHeight: this.totalHeight,
|
|
200
|
+
margins: this.margins,
|
|
201
|
+
cellPlotWidth: this.cellPlotWidth,
|
|
202
|
+
cellPlotHeight: this.cellPlotHeight,
|
|
203
|
+
cellLabelHeight: this.cellLabelHeight,
|
|
204
|
+
topPad: this.topPad,
|
|
205
|
+
rightPad: this.rightPad,
|
|
206
|
+
colLeftPads: this.colLeftPads,
|
|
207
|
+
rowBottomPads: this.rowBottomPads,
|
|
208
|
+
colXOffsets: this.colXOffsets,
|
|
209
|
+
rowYOffsets: this.rowYOffsets,
|
|
210
|
+
sharedX: this.isFaceted,
|
|
211
|
+
sharedY: this.isFaceted
|
|
212
|
+
},
|
|
213
|
+
xAxis: {
|
|
214
|
+
labelsByFacet: this.xLabelsByFacet,
|
|
215
|
+
countsByFacet: this.xCountsByFacet,
|
|
216
|
+
countsFontSize: 14,
|
|
217
|
+
labelsPosition: this.xLabelsPosition,
|
|
218
|
+
showGrid: f.showGrid,
|
|
219
|
+
showTicks: f.showTicks,
|
|
220
|
+
hiddenLabels: f.hiddenLabels,
|
|
221
|
+
title: f.title
|
|
222
|
+
},
|
|
223
|
+
yAxis: {
|
|
224
|
+
showGrid: p.showGrid,
|
|
225
|
+
showTicks: p.showTicks,
|
|
226
|
+
hiddenLabels: p.hiddenLabels,
|
|
227
|
+
title: p.title
|
|
228
|
+
},
|
|
229
|
+
style: {
|
|
230
|
+
frameType: this.isFaceted ? "full" : m,
|
|
231
|
+
barColor: this.solidColor,
|
|
232
|
+
opacity: _,
|
|
233
|
+
colorMap: this.colorMap,
|
|
234
|
+
nullValueLabel: o?.columnName.nullValueLabel
|
|
235
|
+
},
|
|
236
|
+
title: {
|
|
237
|
+
text: this.mainTitle,
|
|
238
|
+
show: this.mainTitle.length > 0,
|
|
239
|
+
position: h
|
|
240
|
+
},
|
|
241
|
+
legend: this.legend,
|
|
242
|
+
showFacetLabels: this.isFaceted,
|
|
243
|
+
grouped: this.grouped,
|
|
244
|
+
orderedGroupNames: this.groupNames
|
|
245
|
+
});
|
|
246
|
+
this.component = v, this.reactRoot?.render(v);
|
|
247
|
+
}
|
|
248
|
+
renderError(t) {
|
|
249
|
+
this.reactRoot?.render(/* @__PURE__ */ d(e, { message: t }));
|
|
250
|
+
}
|
|
251
|
+
};
|
|
252
|
+
export { f as default };
|
|
253
|
+
|
|
254
|
+
//# sourceMappingURL=ChartRenderer.js.map
|