@milaboratories/miplots4 1.0.159 → 1.0.161
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/DataFrame.d.ts +3 -3
- package/dist/DataFrame.js +3 -3
- package/dist/DataFrame.js.map +1 -1
- package/dist/bubble/ChartRenderer.js +55 -55
- package/dist/bubble/ChartRenderer.js.map +1 -1
- package/dist/constants.d.ts +2 -0
- package/dist/constants.js +9 -7
- package/dist/constants.js.map +1 -1
- package/dist/discrete/layers/stackedBar.js.map +1 -1
- package/dist/heatmap/ChartRenderer.js +184 -181
- package/dist/heatmap/ChartRenderer.js.map +1 -1
- package/dist/scatterplot/ChartRenderer.js +179 -176
- package/dist/scatterplot/ChartRenderer.js.map +1 -1
- package/dist/scatterplot/dots.js +20 -20
- package/dist/scatterplot/dots.js.map +1 -1
- package/dist/scatterplot-umap/ChartRenderer.js +168 -165
- package/dist/scatterplot-umap/ChartRenderer.js.map +1 -1
- package/dist/scatterplot-umap/index.js +15 -15
- package/dist/scatterplot-umap/index.js.map +1 -1
- package/package.json +5 -5
package/dist/DataFrame.d.ts
CHANGED
|
@@ -9,7 +9,7 @@ export declare const NO_GROUPED: unique symbol;
|
|
|
9
9
|
export type GroupKey = string | typeof NO_GROUPED;
|
|
10
10
|
export type RowIndex = number;
|
|
11
11
|
type RowsGroup = Record<GroupKey, {
|
|
12
|
-
rowIndexes:
|
|
12
|
+
rowIndexes: Uint32Array;
|
|
13
13
|
grouped: RowsGroup;
|
|
14
14
|
}>;
|
|
15
15
|
type ColumnName = string;
|
|
@@ -19,7 +19,7 @@ export declare class DataFrame {
|
|
|
19
19
|
readonly data: Record<string, DataValue[]>;
|
|
20
20
|
readonly rowsCount: number;
|
|
21
21
|
readonly columnNames: ColumnName[];
|
|
22
|
-
readonly rowIndexes:
|
|
22
|
+
readonly rowIndexes: Uint32Array;
|
|
23
23
|
readonly mapColumnCategories: Map<ColumnName, Category[]>;
|
|
24
24
|
readonly mapColumnCategoriesRowIndexes: Map<ColumnName, Map<Category, number>>;
|
|
25
25
|
rowsGrouped?: RowsGroup;
|
|
@@ -33,6 +33,6 @@ export declare class DataFrame {
|
|
|
33
33
|
private computeColumnCategories;
|
|
34
34
|
setGrouping(groupingColumnIds: (string | null)[]): void;
|
|
35
35
|
getColumnByGrouping(groupingKeys: GroupKey[], keyYColumn: string): number[];
|
|
36
|
-
getRowsByGrouping(groupingKeys: GroupKey[]):
|
|
36
|
+
getRowsByGrouping(groupingKeys: GroupKey[]): Uint32Array;
|
|
37
37
|
}
|
|
38
38
|
export {};
|
package/dist/DataFrame.js
CHANGED
|
@@ -7,7 +7,7 @@ const d = Symbol("noGrouped");
|
|
|
7
7
|
function I(u) {
|
|
8
8
|
return "type" in u && u.type === "columns";
|
|
9
9
|
}
|
|
10
|
-
const p = new
|
|
10
|
+
const p = new Uint32Array(0), g = class g {
|
|
11
11
|
constructor(e, t) {
|
|
12
12
|
s(this, "id");
|
|
13
13
|
// input data grouped by columns
|
|
@@ -18,7 +18,7 @@ const p = new Uint16Array(0), g = class g {
|
|
|
18
18
|
s(this, "mapColumnCategories", /* @__PURE__ */ new Map());
|
|
19
19
|
s(this, "mapColumnCategoriesRowIndexes", /* @__PURE__ */ new Map());
|
|
20
20
|
s(this, "rowsGrouped");
|
|
21
|
-
this.id = e, this.data = t, this.columnNames = Object.keys(t), this.rowsCount = this.columnNames.length ? t[this.columnNames[0]].length : 0, this.rowIndexes = new
|
|
21
|
+
this.id = e, this.data = t, this.columnNames = Object.keys(t), this.rowsCount = this.columnNames.length ? t[this.columnNames[0]].length : 0, this.rowIndexes = new Uint32Array(Array.from({ length: this.rowsCount }, (o, r) => r));
|
|
22
22
|
}
|
|
23
23
|
static from(e) {
|
|
24
24
|
if (e instanceof g)
|
|
@@ -83,7 +83,7 @@ const p = new Uint16Array(0), g = class g {
|
|
|
83
83
|
else {
|
|
84
84
|
const h = f.groupBy(n.rowIndexes, (l) => this.getColumnValueCategory(r, l));
|
|
85
85
|
n.grouped = i.reduce((l, m) => (l[m] = {
|
|
86
|
-
rowIndexes: new
|
|
86
|
+
rowIndexes: new Uint32Array(h[m] ?? []),
|
|
87
87
|
grouped: {}
|
|
88
88
|
}, a.push(l[m]), l), {});
|
|
89
89
|
}
|
package/dist/DataFrame.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataFrame.js","sources":["../src/DataFrame.ts"],"sourcesContent":["import { groupBy } from 'lodash';\nimport type { Category, DataValue } from './types';\nimport { exhaustive } from './utils';\n\nexport type DataByColumns = {\n type: 'columns',\n values: Record<string, DataValue[]>,\n id: string\n}\nexport type DataSet = DataFrame | DataByColumns;\nexport const NO_GROUPED = Symbol('noGrouped');\nexport type GroupKey = string | typeof NO_GROUPED;\nexport type RowIndex = number;\ntype RowsGroup = Record<\n GroupKey,\n {\n rowIndexes: Uint16Array;\n grouped: RowsGroup;\n }\n>;\n\nfunction isDataByColumns (data:DataSet): data is DataByColumns {\n return 'type' in data && data.type === 'columns';\n}\n\ntype ColumnName = string;\n\nconst EMPTY_INDEXES = new Uint16Array(0);\n\nexport class DataFrame {\n static toCategory = (value: DataValue): string => String(value);\n\n readonly id: string;\n // input data grouped by columns\n readonly data: Record<string, DataValue[]>;\n readonly rowsCount: number;\n readonly columnNames: ColumnName[];\n readonly rowIndexes: Uint16Array;\n\n readonly mapColumnCategories: Map<ColumnName, Category[]> = new Map();\n readonly mapColumnCategoriesRowIndexes: Map<ColumnName, Map<Category, number>> = new Map();\n\n rowsGrouped?: RowsGroup;\n\n static from (data: DataSet):DataFrame {\n if (data instanceof DataFrame) {\n return data;\n } else if (isDataByColumns(data)) {\n return new DataFrame(data.id, data.values);\n } else {\n exhaustive(data, 'Unknown input data format');\n }\n }\n\n constructor(id: string, data: Record<string, DataValue[]>) {\n this.id = id;\n this.data = data;\n this.columnNames = Object.keys(data);\n this.rowsCount = this.columnNames.length ? data[this.columnNames[0]].length : 0;\n this.rowIndexes = new Uint16Array(Array.from({length: this.rowsCount}, (_, i) => i));\n }\n\n getColumn(key: string): DataValue[] {\n return this.data[key];\n }\n\n getColumnValue(key: string, index: number): DataValue {\n return this.data[key]?.[index];\n }\n\n getColumnValueCategory(key: string, index: number): Category {\n return DataFrame.toCategory(this.getColumnValue(key, index));\n }\n\n getColumnCategories(key: string, ignoreNull = true): Category[] {\n if (!this.mapColumnCategories.has(key)) {\n this.computeColumnCategories(key);\n }\n\n const categories = this.mapColumnCategories.get(key) ?? [];\n return ignoreNull && categories && categories.length > 0 && categories[categories.length - 1] === 'null'\n ? categories.slice(0, -1) // full copy without null to heavy for large datasets\n : categories; \n }\n\n getColumnCategoryRowIndex(key: string, value: Category): RowIndex {\n const rowIndex = this.mapColumnCategoriesRowIndexes.get(key)?.get(value);\n \n if (rowIndex === undefined) {\n throw new Error(`Category ${value} not found in column ${key}`);\n }\n\n return rowIndex;\n }\n\n private computeColumnCategories(key: ColumnName) {\n if (!this.columnNames.includes(key)) {\n throw new Error(`Column ${key} does not exist`);\n }\n \n const columnData = this.getColumn(key);\n const uniqValues = new Set<DataValue>();\n const categories: string[] = [];\n const categoriesIndexes = new Map<string, number>();\n let nullIdx = -1;\n for (let i = 0; i < columnData.length; i++) {\n const value = columnData[i];\n if (uniqValues.has(value)) {\n continue;\n }\n uniqValues.add(value);\n if (value === null) {\n nullIdx = i;\n continue;\n }\n const category = DataFrame.toCategory(value);\n categories.push(category);\n categoriesIndexes.set(category, i);\n }\n if (nullIdx !== -1) {\n categories.push('null');\n categoriesIndexes.set('null', nullIdx);\n }\n\n this.mapColumnCategories.set(key, categories);\n this.mapColumnCategoriesRowIndexes.set(key, categoriesIndexes);\n }\n\n setGrouping(groupingColumnIds: (string | null)[]) {\n const root = {grouped: {} as RowsGroup, rowIndexes: this.rowIndexes};\n let groups: RowsGroup[keyof RowsGroup][] = [root];\n groupingColumnIds.forEach(column => {\n const keys: GroupKey[] = column === null ? [NO_GROUPED] : this.getColumnCategories(column, false);\n const nextGroups: RowsGroup[keyof RowsGroup][] = [];\n groups.forEach(group => {\n if (column === null) {\n group.grouped = {\n [NO_GROUPED]: {\n rowIndexes: group.rowIndexes,\n grouped: {} as RowsGroup,\n },\n };\n nextGroups.push(group.grouped[NO_GROUPED]);\n } else {\n const groupedBy = groupBy(group.rowIndexes, idx => this.getColumnValueCategory(column, idx));\n group.grouped = keys.reduce((res, key) => {\n res[key] = {\n rowIndexes: new Uint16Array(groupedBy[key as string] ?? []),\n grouped: {} as RowsGroup,\n };\n nextGroups.push(res[key]);\n return res;\n }, {} as RowsGroup);\n }\n });\n groups = nextGroups;\n });\n this.rowsGrouped = root.grouped;\n }\n\n // TODO: fix all places where this method is used\n getColumnByGrouping(groupingKeys: GroupKey[], keyYColumn: string): number[] {\n if (!this.rowsGrouped) {\n return [];\n }\n if (!groupingKeys.length) {\n return Array.from(this.rowIndexes).map(idx => Number(this.getColumnValue(keyYColumn, idx)));\n }\n let result: {grouped: RowsGroup; rowIndexes: Uint16Array} = {grouped: this.rowsGrouped, rowIndexes: this.rowIndexes};\n groupingKeys.forEach(key => {\n const nextGroup = result.grouped[key ?? 'null'];\n if (!nextGroup) {\n return [];\n }\n result = nextGroup;\n });\n return Array.from(result.rowIndexes).map(idx => Number(this.getColumnValue(keyYColumn, idx)));\n }\n\n // TODO: fix all places where this method is used\n getRowsByGrouping(groupingKeys: GroupKey[]): Uint16Array {\n if (!this.rowsGrouped) {\n return EMPTY_INDEXES;\n }\n if (!groupingKeys.length) {\n return this.rowIndexes;\n }\n let result: {grouped: RowsGroup; rowIndexes: Uint16Array} = {grouped: this.rowsGrouped, rowIndexes: this.rowIndexes};\n groupingKeys.forEach(key => {\n const nextGroup = result.grouped[key];\n if (!nextGroup) {\n return EMPTY_INDEXES;\n }\n result = nextGroup;\n });\n return result.rowIndexes;\n }\n}\n"],"names":["NO_GROUPED","isDataByColumns","data","EMPTY_INDEXES","_DataFrame","id","__publicField","_","i","exhaustive","key","index","_a","ignoreNull","categories","value","rowIndex","columnData","uniqValues","categoriesIndexes","nullIdx","category","groupingColumnIds","root","groups","column","keys","nextGroups","group","groupedBy","groupBy","idx","res","groupingKeys","keyYColumn","result","nextGroup","DataFrame"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DataFrame.js","sources":["../src/DataFrame.ts"],"sourcesContent":["import { groupBy } from 'lodash';\nimport type { Category, DataValue } from './types';\nimport { exhaustive } from './utils';\n\nexport type DataByColumns = {\n type: 'columns',\n values: Record<string, DataValue[]>,\n id: string\n}\nexport type DataSet = DataFrame | DataByColumns;\nexport const NO_GROUPED = Symbol('noGrouped');\nexport type GroupKey = string | typeof NO_GROUPED;\nexport type RowIndex = number;\ntype RowsGroup = Record<\n GroupKey,\n {\n rowIndexes: Uint32Array;\n grouped: RowsGroup;\n }\n>;\n\nfunction isDataByColumns (data:DataSet): data is DataByColumns {\n return 'type' in data && data.type === 'columns';\n}\n\ntype ColumnName = string;\n\nconst EMPTY_INDEXES = new Uint32Array(0);\n\nexport class DataFrame {\n static toCategory = (value: DataValue): string => String(value);\n\n readonly id: string;\n // input data grouped by columns\n readonly data: Record<string, DataValue[]>;\n readonly rowsCount: number;\n readonly columnNames: ColumnName[];\n readonly rowIndexes: Uint32Array;\n\n readonly mapColumnCategories: Map<ColumnName, Category[]> = new Map();\n readonly mapColumnCategoriesRowIndexes: Map<ColumnName, Map<Category, number>> = new Map();\n\n rowsGrouped?: RowsGroup;\n\n static from (data: DataSet):DataFrame {\n if (data instanceof DataFrame) {\n return data;\n } else if (isDataByColumns(data)) {\n return new DataFrame(data.id, data.values);\n } else {\n exhaustive(data, 'Unknown input data format');\n }\n }\n\n constructor(id: string, data: Record<string, DataValue[]>) {\n this.id = id;\n this.data = data;\n this.columnNames = Object.keys(data);\n this.rowsCount = this.columnNames.length ? data[this.columnNames[0]].length : 0;\n this.rowIndexes = new Uint32Array(Array.from({length: this.rowsCount}, (_, i) => i));\n }\n\n getColumn(key: string): DataValue[] {\n return this.data[key];\n }\n\n getColumnValue(key: string, index: number): DataValue {\n return this.data[key]?.[index];\n }\n\n getColumnValueCategory(key: string, index: number): Category {\n return DataFrame.toCategory(this.getColumnValue(key, index));\n }\n\n getColumnCategories(key: string, ignoreNull = true): Category[] {\n if (!this.mapColumnCategories.has(key)) {\n this.computeColumnCategories(key);\n }\n\n const categories = this.mapColumnCategories.get(key) ?? [];\n return ignoreNull && categories && categories.length > 0 && categories[categories.length - 1] === 'null'\n ? categories.slice(0, -1) // full copy without null to heavy for large datasets\n : categories; \n }\n\n getColumnCategoryRowIndex(key: string, value: Category): RowIndex {\n const rowIndex = this.mapColumnCategoriesRowIndexes.get(key)?.get(value);\n \n if (rowIndex === undefined) {\n throw new Error(`Category ${value} not found in column ${key}`);\n }\n\n return rowIndex;\n }\n\n private computeColumnCategories(key: ColumnName) {\n if (!this.columnNames.includes(key)) {\n throw new Error(`Column ${key} does not exist`);\n }\n \n const columnData = this.getColumn(key);\n const uniqValues = new Set<DataValue>();\n const categories: string[] = [];\n const categoriesIndexes = new Map<string, number>();\n let nullIdx = -1;\n for (let i = 0; i < columnData.length; i++) {\n const value = columnData[i];\n if (uniqValues.has(value)) {\n continue;\n }\n uniqValues.add(value);\n if (value === null) {\n nullIdx = i;\n continue;\n }\n const category = DataFrame.toCategory(value);\n categories.push(category);\n categoriesIndexes.set(category, i);\n }\n if (nullIdx !== -1) {\n categories.push('null');\n categoriesIndexes.set('null', nullIdx);\n }\n\n this.mapColumnCategories.set(key, categories);\n this.mapColumnCategoriesRowIndexes.set(key, categoriesIndexes);\n }\n\n setGrouping(groupingColumnIds: (string | null)[]) {\n const root = {grouped: {} as RowsGroup, rowIndexes: this.rowIndexes};\n let groups: RowsGroup[keyof RowsGroup][] = [root];\n groupingColumnIds.forEach(column => {\n const keys: GroupKey[] = column === null ? [NO_GROUPED] : this.getColumnCategories(column, false);\n const nextGroups: RowsGroup[keyof RowsGroup][] = [];\n groups.forEach(group => {\n if (column === null) {\n group.grouped = {\n [NO_GROUPED]: {\n rowIndexes: group.rowIndexes,\n grouped: {} as RowsGroup,\n },\n };\n nextGroups.push(group.grouped[NO_GROUPED]);\n } else {\n const groupedBy = groupBy(group.rowIndexes, idx => this.getColumnValueCategory(column, idx));\n group.grouped = keys.reduce((res, key) => {\n res[key] = {\n rowIndexes: new Uint32Array(groupedBy[key as string] ?? []),\n grouped: {} as RowsGroup,\n };\n nextGroups.push(res[key]);\n return res;\n }, {} as RowsGroup);\n }\n });\n groups = nextGroups;\n });\n this.rowsGrouped = root.grouped;\n }\n\n // TODO: fix all places where this method is used\n getColumnByGrouping(groupingKeys: GroupKey[], keyYColumn: string): number[] {\n if (!this.rowsGrouped) {\n return [];\n }\n if (!groupingKeys.length) {\n return Array.from(this.rowIndexes).map(idx => Number(this.getColumnValue(keyYColumn, idx)));\n }\n let result: {grouped: RowsGroup; rowIndexes: Uint32Array} = {grouped: this.rowsGrouped, rowIndexes: this.rowIndexes};\n groupingKeys.forEach(key => {\n const nextGroup = result.grouped[key ?? 'null'];\n if (!nextGroup) {\n return [];\n }\n result = nextGroup;\n });\n return Array.from(result.rowIndexes).map(idx => Number(this.getColumnValue(keyYColumn, idx)));\n }\n\n // TODO: fix all places where this method is used\n getRowsByGrouping(groupingKeys: GroupKey[]): Uint32Array {\n if (!this.rowsGrouped) {\n return EMPTY_INDEXES;\n }\n if (!groupingKeys.length) {\n return this.rowIndexes;\n }\n let result: {grouped: RowsGroup; rowIndexes: Uint32Array} = {grouped: this.rowsGrouped, rowIndexes: this.rowIndexes};\n groupingKeys.forEach(key => {\n const nextGroup = result.grouped[key];\n if (!nextGroup) {\n return EMPTY_INDEXES;\n }\n result = nextGroup;\n });\n return result.rowIndexes;\n }\n}\n"],"names":["NO_GROUPED","isDataByColumns","data","EMPTY_INDEXES","_DataFrame","id","__publicField","_","i","exhaustive","key","index","_a","ignoreNull","categories","value","rowIndex","columnData","uniqValues","categoriesIndexes","nullIdx","category","groupingColumnIds","root","groups","column","keys","nextGroups","group","groupedBy","groupBy","idx","res","groupingKeys","keyYColumn","result","nextGroup","DataFrame"],"mappings":"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"}
|
|
@@ -1,24 +1,24 @@
|
|
|
1
1
|
var W = Object.defineProperty;
|
|
2
2
|
var K = (l, t, e) => t in l ? W(l, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : l[t] = e;
|
|
3
3
|
var u = (l, t, e) => K(l, typeof t != "symbol" ? t + "" : t, e);
|
|
4
|
-
import { j as
|
|
4
|
+
import { j as N } from "../_virtual/jsx-runtime.js";
|
|
5
5
|
import { c as P } from "../_virtual/client.js";
|
|
6
6
|
import { Error as v } from "../common/Error.js";
|
|
7
7
|
import { DataFrameProvider as F } from "../common/useDataFrame.js";
|
|
8
|
-
import { DEFAULT_HEIGHT as
|
|
9
|
-
import { arrangeLegendParts as
|
|
8
|
+
import { DEFAULT_HEIGHT as H, DEFAULT_WIDTH as b, TITLE_LINE_HEIGHT as j, TITLE_MARGIN as k, MIN_LEGEND_GRADIENT_HEIGHT as B, MAX_LEGEND_GRADIENT_HEIGHT as V } from "../constants.js";
|
|
9
|
+
import { arrangeLegendParts as X } from "../utils/arrangeLegendParts.js";
|
|
10
10
|
import { getChartEdgeSides as U } from "../utils/getChartEdgeSides.js";
|
|
11
|
-
import { getContinuousLegendTicks as
|
|
12
|
-
import { TextMeasurer as
|
|
13
|
-
import { ChartsGroup as
|
|
14
|
-
import { MIN_MARGIN as
|
|
15
|
-
import { calculateChartSideElementSizes as
|
|
16
|
-
import { calculateSideElementsBBoxes as
|
|
17
|
-
import { calculateCaptionTails as
|
|
18
|
-
import
|
|
19
|
-
import
|
|
20
|
-
import { sqrt as
|
|
21
|
-
const
|
|
11
|
+
import { getContinuousLegendTicks as Y } from "../utils/getContinuousLegendTicks.js";
|
|
12
|
+
import { TextMeasurer as q } from "../utils/TextMeasurer/TextMeasurer.js";
|
|
13
|
+
import { ChartsGroup as J } from "./components/ChartsGroup.js";
|
|
14
|
+
import { MIN_MARGIN as L, LEGEND_OFFSET as O, TITLE_LINE as I, CHART_SIDE_ELEMENTS as Q, MIN_PADDING as Z } from "./constants.js";
|
|
15
|
+
import { calculateChartSideElementSizes as $ } from "./utils/calculateChartSideElementSizes.js";
|
|
16
|
+
import { calculateSideElementsBBoxes as tt } from "./utils/calculateSideElementsBBoxes.js";
|
|
17
|
+
import { calculateCaptionTails as et } from "./utils/calculateCaptionTails.js";
|
|
18
|
+
import M from "../node_modules/.pnpm/d3-scale@4.0.2/node_modules/d3-scale/src/ordinal.js";
|
|
19
|
+
import w from "../node_modules/.pnpm/d3-scale@4.0.2/node_modules/d3-scale/src/linear.js";
|
|
20
|
+
import { sqrt as R } from "../node_modules/.pnpm/d3-scale@4.0.2/node_modules/d3-scale/src/pow.js";
|
|
21
|
+
const st = (l, t) => {
|
|
22
22
|
const e = Math.min(...t), s = Math.max(...t);
|
|
23
23
|
if (e === s) {
|
|
24
24
|
const a = l % 2 === 0 ? [] : [e];
|
|
@@ -33,36 +33,36 @@ const et = (l, t) => {
|
|
|
33
33
|
i.push(e + r * a);
|
|
34
34
|
return i.push(s), i;
|
|
35
35
|
};
|
|
36
|
-
function
|
|
36
|
+
function it(l, t, e) {
|
|
37
37
|
let s = e;
|
|
38
|
-
return l && (l.colorRange && (s = l.colorRange), l.method === "standardScaling" && (s = [-2, 2]), l.method === "meanNormalization" && (s = [-0.75, 0.75])),
|
|
38
|
+
return l && (l.colorRange && (s = l.colorRange), l.method === "standardScaling" && (s = [-2, 2]), l.method === "meanNormalization" && (s = [-0.75, 0.75])), st(t, s);
|
|
39
39
|
}
|
|
40
|
-
class
|
|
40
|
+
class At {
|
|
41
41
|
constructor() {
|
|
42
42
|
u(this, "reactRoot", null);
|
|
43
43
|
u(this, "parentNode", null);
|
|
44
44
|
u(this, "rootNode", null);
|
|
45
|
-
u(this, "component", /* @__PURE__ */
|
|
45
|
+
u(this, "component", /* @__PURE__ */ N.jsx(N.Fragment, {}));
|
|
46
46
|
u(this, "chartsDimensions", {});
|
|
47
47
|
u(this, "chartSizes", {
|
|
48
|
-
chartWidth:
|
|
48
|
+
chartWidth: b,
|
|
49
49
|
// width of single chart
|
|
50
|
-
chartHeight:
|
|
50
|
+
chartHeight: H,
|
|
51
51
|
// height of single chart
|
|
52
|
-
chartsWidth:
|
|
52
|
+
chartsWidth: b,
|
|
53
53
|
// width of all charts in charts row
|
|
54
|
-
chartsHeight:
|
|
54
|
+
chartsHeight: H,
|
|
55
55
|
// width of all charts in charts column, without axes
|
|
56
|
-
totalWidth:
|
|
56
|
+
totalWidth: b,
|
|
57
57
|
// width of all charts in charts row, plus left axis, plus legend
|
|
58
|
-
totalHeight:
|
|
58
|
+
totalHeight: H
|
|
59
59
|
// width of all charts in charts height, plus bottom axis, plus top title
|
|
60
60
|
});
|
|
61
61
|
u(this, "margins", {
|
|
62
|
-
top:
|
|
63
|
-
bottom:
|
|
64
|
-
left:
|
|
65
|
-
right:
|
|
62
|
+
top: L,
|
|
63
|
+
bottom: L,
|
|
64
|
+
left: L,
|
|
65
|
+
right: L
|
|
66
66
|
});
|
|
67
67
|
u(this, "captionsSizes", {
|
|
68
68
|
xAxisCaptions: 100,
|
|
@@ -77,12 +77,12 @@ class Ct {
|
|
|
77
77
|
u(this, "columnsCount", 1);
|
|
78
78
|
u(this, "rowsCount", 1);
|
|
79
79
|
u(this, "scales", {
|
|
80
|
-
x:
|
|
81
|
-
y:
|
|
80
|
+
x: M().domain(["null"]).range([1]),
|
|
81
|
+
y: M().domain(["null"]).range([1])
|
|
82
82
|
});
|
|
83
83
|
u(this, "step", { x: 10, y: 10 });
|
|
84
|
-
u(this, "colorScale",
|
|
85
|
-
u(this, "sizeScale",
|
|
84
|
+
u(this, "colorScale", w().domain([0, 1]).range(["white", "black"]));
|
|
85
|
+
u(this, "sizeScale", R().domain([0, 1]).range([3, 20]));
|
|
86
86
|
u(this, "legend", {
|
|
87
87
|
width: 0,
|
|
88
88
|
height: 0,
|
|
@@ -101,9 +101,9 @@ class Ct {
|
|
|
101
101
|
}
|
|
102
102
|
updateMargins(t) {
|
|
103
103
|
this.margins = {
|
|
104
|
-
top: t.show ? j + k * 2 :
|
|
105
|
-
bottom:
|
|
106
|
-
left:
|
|
104
|
+
top: t.show ? j + k * 2 : L,
|
|
105
|
+
bottom: L,
|
|
106
|
+
left: L,
|
|
107
107
|
right: this.legend.width
|
|
108
108
|
}, this.chartSizes.totalWidth = this.margins.left + this.chartSizes.chartsWidth + this.margins.right, this.chartSizes.totalHeight = this.margins.top + Math.max(this.chartSizes.chartsHeight, this.legend.height) + this.margins.bottom;
|
|
109
109
|
}
|
|
@@ -114,11 +114,11 @@ class Ct {
|
|
|
114
114
|
}
|
|
115
115
|
const i = [], a = Math.min(
|
|
116
116
|
Math.max(this.chartSizes.chartHeight, B),
|
|
117
|
-
|
|
118
|
-
), d = Math.max(this.chartSizes.chartHeight, a), x = { width: 0, height: 0, left: 0, top: 0 }, h = this.colorScale.domain(), g =
|
|
117
|
+
V
|
|
118
|
+
), d = Math.max(this.chartSizes.chartHeight, a), x = { width: 0, height: 0, left: 0, top: 0 }, h = this.colorScale.domain(), g = Y(this.colorScale, [
|
|
119
119
|
h[0],
|
|
120
120
|
h[h.length - 1]
|
|
121
|
-
]), C = e.label ?? e.value, S =
|
|
121
|
+
]), C = e.label ?? e.value, S = w([g[0], g[g.length - 1]], [a, 0]);
|
|
122
122
|
i.push({
|
|
123
123
|
id: "colorValue",
|
|
124
124
|
type: "continuous",
|
|
@@ -141,7 +141,7 @@ class Ct {
|
|
|
141
141
|
this.legend = { width: 0, height: 0, items: [] };
|
|
142
142
|
return;
|
|
143
143
|
}
|
|
144
|
-
const y =
|
|
144
|
+
const y = X(i, d, a), E = y[y.length - 1], T = E.left + E.width + 2 * O, o = this.chartsDimensions[r[0]].padding;
|
|
145
145
|
this.legend = {
|
|
146
146
|
width: T,
|
|
147
147
|
height: d + o.top,
|
|
@@ -149,7 +149,7 @@ class Ct {
|
|
|
149
149
|
};
|
|
150
150
|
}
|
|
151
151
|
updateCaptionsSize(t, e, s) {
|
|
152
|
-
const r = new
|
|
152
|
+
const r = new q("bold 14px Arial"), { xKeys: i, yKeys: a, xLabels: d, yLabels: x } = t.meta;
|
|
153
153
|
this.labelAngles = {
|
|
154
154
|
xAxisLabels: e.axisLabelsAngle,
|
|
155
155
|
yAxisLabels: s.axisLabelsAngle
|
|
@@ -163,7 +163,7 @@ class Ct {
|
|
|
163
163
|
const c = r.getTextWidth(x[f]);
|
|
164
164
|
c > g && (g = c);
|
|
165
165
|
}
|
|
166
|
-
const { xCaptionTail: C, yCaptionTail: S } =
|
|
166
|
+
const { xCaptionTail: C, yCaptionTail: S } = et(
|
|
167
167
|
this.labelAngles,
|
|
168
168
|
this.step,
|
|
169
169
|
t,
|
|
@@ -181,7 +181,7 @@ class Ct {
|
|
|
181
181
|
this.columnsCount = e.nRows ? Math.ceil(i / a) : d, this.rowsCount = Math.ceil(i / this.columnsCount), this.chartsDimensions = {};
|
|
182
182
|
let x = 0, h = 0;
|
|
183
183
|
t.forEach((S, p) => {
|
|
184
|
-
const A = p % this.columnsCount + 1, f = U(p, t.length, this.columnsCount, this.rowsCount), c = this.chartSizes.chartWidth, y = this.chartSizes.chartHeight,
|
|
184
|
+
const A = p % this.columnsCount + 1, f = U(p, t.length, this.columnsCount, this.rowsCount), c = this.chartSizes.chartWidth, y = this.chartSizes.chartHeight, E = $(
|
|
185
185
|
s,
|
|
186
186
|
r,
|
|
187
187
|
this.captionsSizes,
|
|
@@ -190,10 +190,10 @@ class Ct {
|
|
|
190
190
|
this.step.x,
|
|
191
191
|
this.step.y
|
|
192
192
|
);
|
|
193
|
-
function T(
|
|
193
|
+
function T(G) {
|
|
194
194
|
return Math.max(
|
|
195
|
-
|
|
196
|
-
|
|
195
|
+
Q[G].reduce((_, D) => _ + E[G][D], 0),
|
|
196
|
+
Z
|
|
197
197
|
);
|
|
198
198
|
}
|
|
199
199
|
const o = {
|
|
@@ -203,7 +203,7 @@ class Ct {
|
|
|
203
203
|
bottom: T("bottom")
|
|
204
204
|
};
|
|
205
205
|
o.left < this.captionsSizes.xCaptionTail && (o.left = this.captionsSizes.xCaptionTail), o.bottom < this.captionsSizes.yCaptionTail && (o.bottom = this.captionsSizes.yCaptionTail);
|
|
206
|
-
const n =
|
|
206
|
+
const n = tt(E, c, y), m = c + o.left + o.right, z = y + o.top + o.bottom;
|
|
207
207
|
this.chartsDimensions[S] = {
|
|
208
208
|
left: x,
|
|
209
209
|
top: h,
|
|
@@ -229,18 +229,18 @@ class Ct {
|
|
|
229
229
|
(m, z) => r.sorting === "asc" ? (n[m] ?? m).localeCompare(n[z] ?? z, "en", { numeric: !0 }) : (n[z] ?? z).localeCompare(n[m] ?? m, "en", { numeric: !0 })
|
|
230
230
|
), S = i.xGroup ? h.xGroupKeys : g(h.xGroupKeys), p = i.yGroup ? h.yGroupKeys : C(h.yGroupKeys), { xKeysByGroups: A, yKeysByGroups: f } = h, c = S.reduce((o, n) => (o = o.concat(g(A[n], h.xLabels)), o), []), y = p.reduce((o, n) => (o = o.concat(C(f[n], h.yLabels)), o), []);
|
|
231
231
|
x ? (this.step.x = x, this.step.y = x) : a && d && (this.step.x = a / c.length, this.step.y = d / y.length);
|
|
232
|
-
const
|
|
233
|
-
this.scales.x =
|
|
232
|
+
const E = new Array(c.length).fill(null).map((o, n) => n * this.step.x), T = new Array(y.length).fill(null).map((o, n) => n * this.step.y);
|
|
233
|
+
this.scales.x = M().domain(c).range(E), this.scales.y = M().domain(y).range(T);
|
|
234
234
|
}
|
|
235
235
|
updateAesScale(t, e, s, r) {
|
|
236
|
-
this.colorScale =
|
|
236
|
+
this.colorScale = w().domain(it(r, t.colorsList.length, s)).range(t.colorsList), this.sizeScale = R(e, [t.minRadius, t.maxRadius]);
|
|
237
237
|
}
|
|
238
238
|
render(t, e, s, r, i, a, d, x, h, g, C, S) {
|
|
239
239
|
var m;
|
|
240
|
-
const { meta: p, facets: A, meta: { facetKeys: f } } = i, { valueExtent: c } = p, { xAxis: y, yAxis:
|
|
241
|
-
this.updateChartsSizes(i, o), this.updateAesScale(h, c.sizeValue, c.colorValue, x), this.updateScales(i, o, s.xAxis, s.yAxis, S), this.updateCaptionsSize(i, y,
|
|
242
|
-
const n = /* @__PURE__ */
|
|
243
|
-
|
|
240
|
+
const { meta: p, facets: A, meta: { facetKeys: f } } = i, { valueExtent: c } = p, { xAxis: y, yAxis: E, title: T, size: o } = s;
|
|
241
|
+
this.updateChartsSizes(i, o), this.updateAesScale(h, c.sizeValue, c.colorValue, x), this.updateScales(i, o, s.xAxis, s.yAxis, S), this.updateCaptionsSize(i, y, E), this.updateChartDimensions(f, r, y, E), this.updateLegendSize(s.legend, a, d, f), this.updateMargins(T);
|
|
242
|
+
const n = /* @__PURE__ */ N.jsx(F, { dataFrame: t, children: /* @__PURE__ */ N.jsx(
|
|
243
|
+
J,
|
|
244
244
|
{
|
|
245
245
|
aes: h,
|
|
246
246
|
captionsSizes: this.captionsSizes,
|
|
@@ -268,10 +268,10 @@ class Ct {
|
|
|
268
268
|
}
|
|
269
269
|
renderError(t) {
|
|
270
270
|
var e;
|
|
271
|
-
(e = this.reactRoot) == null || e.render(/* @__PURE__ */
|
|
271
|
+
(e = this.reactRoot) == null || e.render(/* @__PURE__ */ N.jsx(v, { message: t }));
|
|
272
272
|
}
|
|
273
273
|
}
|
|
274
274
|
export {
|
|
275
|
-
|
|
275
|
+
At as default
|
|
276
276
|
};
|
|
277
277
|
//# sourceMappingURL=ChartRenderer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChartRenderer.js","sources":["../../src/bubble/ChartRenderer.tsx"],"sourcesContent":["import type { ScaleLinear, ScalePower } from 'd3-scale';\nimport { scaleLinear, scaleOrdinal, scaleSqrt } from 'd3-scale';\nimport type { ReactElement } from 'react';\nimport type { Root } from 'react-dom/client';\nimport { createRoot } from 'react-dom/client';\nimport { Error } from '../common/Error';\nimport type { LegendData, LegendItem } from '../common/types';\nimport { DataFrameProvider } from '../common/useDataFrame';\nimport { DEFAULT_HEIGHT, DEFAULT_HEIGHT_SMALL, DEFAULT_WIDTH, TITLE_LINE_HEIGHT, TITLE_MARGIN } from '../constants';\nimport type { DataFrame } from '../DataFrame';\nimport type { ColumnName, DataValue } from '../types';\nimport { arrangeLegendParts } from '../utils/arrangeLegendParts';\nimport { getChartEdgeSides } from '../utils/getChartEdgeSides';\nimport { getContinuousLegendTicks } from '../utils/getContinuousLegendTicks';\nimport { TextMeasurer } from '../utils/TextMeasurer/TextMeasurer';\nimport type { BubbleSettingsImpl } from './BubbleSettingsImpl';\nimport { ChartsGroup } from './components/ChartsGroup';\nimport type {\n CaptionsSizes,\n ChartDimensionsData, ChartScales, ChartSizes,\n LabelAngles,\n Margins\n} from './components/types';\nimport { CHART_SIDE_ELEMENTS, LEGEND_OFFSET, MIN_MARGIN, MIN_PADDING, TITLE_LINE } from './constants';\nimport type { CellBubble, GroupedCellsBubble } from './getGroupedCellsData';\nimport { calculateChartSideElementSizes, calculateSideElementsBBoxes } from './utils';\nimport { calculateCaptionTails } from './utils/calculateCaptionTails';\n\nconst getSteps = (count: number, valueExtent: number[]) => {\n const min = Math.min(...valueExtent);\n const max = Math.max(...valueExtent);\n if (min === max) {\n const steps = count % 2 === 0 ? [] : [min];\n for (let i = 1; i < count / 2 + 1; i++) {\n steps.push(min + i);\n steps.unshift(min - i);\n }\n return steps;\n }\n if (count < 2) {\n return [min, max];\n }\n const step = (max - min) / (count - 1);\n const steps = [];\n for (let i = 0; i < count - 1; i++) {\n steps.push(min + step * i);\n }\n steps.push(max);\n return steps;\n};\n\nfunction getContinuousColorRange(\n normalization: BubbleSettingsImpl['normalization'],\n colorsCount: number,\n valueExtent: number[]\n) {\n let extent = valueExtent;\n if (normalization) {\n if (normalization.colorRange) {\n extent = normalization.colorRange;\n }\n if (normalization.method === 'standardScaling') {\n extent = [-2, 2];\n }\n if (normalization.method === 'meanNormalization') {\n extent = [-0.75, 0.75];\n }\n }\n return getSteps(colorsCount, extent);\n}\n\nclass ChartRenderer {\n reactRoot: Root | null = null;\n parentNode: HTMLElement | null = null;\n rootNode: HTMLElement | null = null;\n component: ReactElement = (<></>);\n chartsDimensions: Record<string, ChartDimensionsData> = {};\n chartSizes: ChartSizes = {\n chartWidth: DEFAULT_WIDTH, // width of single chart\n chartHeight: DEFAULT_HEIGHT, // height of single chart\n chartsWidth: DEFAULT_WIDTH, // width of all charts in charts row\n chartsHeight: DEFAULT_HEIGHT, // width of all charts in charts column, without axes\n totalWidth: DEFAULT_WIDTH, // width of all charts in charts row, plus left axis, plus legend\n totalHeight: DEFAULT_HEIGHT, // width of all charts in charts height, plus bottom axis, plus top title\n };\n margins: Margins = {\n top: MIN_MARGIN,\n bottom: MIN_MARGIN,\n left: MIN_MARGIN,\n right: MIN_MARGIN,\n };\n captionsSizes: CaptionsSizes = {\n xAxisCaptions: 100,\n yAxisCaptions: 100,\n xCaptionTail: 0,\n yCaptionTail: 0,\n };\n labelAngles: LabelAngles = {\n xAxisLabels: 0,\n yAxisLabels: 0,\n };\n columnsCount = 1;\n rowsCount = 1;\n scales: ChartScales = {\n x: scaleOrdinal<string, number>().domain(['null']).range([1]),\n y: scaleOrdinal<string, number>().domain(['null']).range([1]),\n };\n step: {x: number; y: number} = {x: 10, y: 10};\n colorScale: ScaleLinear<string, string> = scaleLinear<string, string>().domain([0, 1]).range(['white', 'black']);\n sizeScale: ScalePower<number, number> = scaleSqrt().domain([0, 1]).range([3, 20]);\n legend: LegendData = {\n width: 0,\n height: 0,\n items: [],\n };\n\n clear() {\n if (this.parentNode && this.rootNode) {\n this.parentNode?.removeChild(this.rootNode);\n this.parentNode = null;\n this.rootNode = null;\n }\n // timeout to avoid trying to unmount during rendering\n setTimeout(() => {\n this.reactRoot?.unmount();\n this.reactRoot = null;\n });\n }\n\n init(node: HTMLElement) {\n if (this.parentNode === null) {\n this.parentNode = node;\n this.rootNode = document.createElement('div');\n this.parentNode.appendChild(this.rootNode);\n this.reactRoot = createRoot(this.rootNode);\n }\n }\n\n updateMargins(title: BubbleSettingsImpl['chartSettings']['title']) {\n this.margins = {\n top: title.show ? TITLE_LINE_HEIGHT + TITLE_MARGIN * 2 : MIN_MARGIN,\n bottom: MIN_MARGIN,\n left: MIN_MARGIN,\n right: this.legend.width,\n };\n this.chartSizes.totalWidth = this.margins.left + this.chartSizes.chartsWidth + this.margins.right;\n this.chartSizes.totalHeight =\n this.margins.top + Math.max(this.chartSizes.chartsHeight, this.legend.height) + this.margins.bottom;\n }\n\n updateLegendSize(\n legend: BubbleSettingsImpl['chartSettings']['legend'],\n columnValueColor: ColumnName,\n columnValueSize: ColumnName,\n facetKeys: string[]\n ) {\n if (!legend.show) {\n this.legend = {width: 0, height: 0, items: []};\n return;\n }\n\n const legendItems: LegendItem[] = [];\n const continuousHeight = Math.min(\n Math.max(this.chartSizes.chartHeight, DEFAULT_HEIGHT_SMALL),\n DEFAULT_HEIGHT\n );\n const legendHeight = Math.max(this.chartSizes.chartHeight, continuousHeight);\n const emptySizes = {width:0, height:0, left:0, top: 0};\n\n const colorDomain = this.colorScale.domain();\n const colorValues = getContinuousLegendTicks(this.colorScale, [\n colorDomain[0],\n colorDomain[colorDomain.length - 1],\n ]);\n const colorTitle = columnValueColor.label ?? columnValueColor.value;\n const tickPositionScale = scaleLinear([colorValues[0], colorValues[colorValues.length - 1]], [continuousHeight, 0]); //TODO: update during adding log scale for heatmap\n \n legendItems.push({\n id: 'colorValue',\n type: 'continuous',\n scale: this.colorScale,\n tickPositionScale,\n values: colorValues,\n title: colorTitle,\n ...emptySizes\n });\n\n const sizeTitle = columnValueSize.label ?? columnValueSize.value;\n const sizeValues = this.sizeScale.ticks(3);\n const format = this.sizeScale.tickFormat(3);\n const labels = sizeValues.reduce((res: Record<string, string>, v) => {\n res[String(v)] = format(v);\n return res;\n }, {});\n legendItems.push({\n id: 'sizeValue',\n type: 'size',\n title: sizeTitle,\n scale: this.sizeScale,\n values: sizeValues,\n labels,\n ...emptySizes\n });\n\n if (!legendItems.length) {\n this.legend = {width: 0, height: 0, items: []};\n return;\n }\n\n const items = arrangeLegendParts(legendItems, legendHeight, continuousHeight);\n\n const lastItem = items[items.length - 1];\n const legendWidth = lastItem.left + lastItem.width + 2 * LEGEND_OFFSET;\n\n const leftTopChartPadding = this.chartsDimensions[facetKeys[0]].padding; // additional offset of legend for alignment with chart\n\n this.legend = {\n width: legendWidth,\n height: legendHeight + leftTopChartPadding.top,\n items: items,\n };\n }\n\n updateCaptionsSize(\n groupedCells: GroupedCellsBubble,\n xAxis: BubbleSettingsImpl['chartSettings']['xAxis'],\n yAxis: BubbleSettingsImpl['chartSettings']['yAxis']\n ) {\n const textMeasurer = new TextMeasurer('bold 14px Arial');\n const {xKeys, yKeys, xLabels, yLabels} = groupedCells.meta;\n this.labelAngles = {\n xAxisLabels: xAxis.axisLabelsAngle,\n yAxisLabels: yAxis.axisLabelsAngle,\n };\n let maxXLabelSize = 0;\n let maxYLabelSize = 0;\n for (const xKey of xKeys) {\n const l = textMeasurer.getTextWidth(xLabels[xKey]);\n if (l > maxXLabelSize) {\n maxXLabelSize = l;\n }\n }\n for (const yKey of yKeys) {\n const l = textMeasurer.getTextWidth(yLabels[yKey]);\n if (l > maxYLabelSize) {\n maxYLabelSize = l;\n }\n }\n const {xCaptionTail, yCaptionTail} = calculateCaptionTails(\n this.labelAngles,\n this.step,\n groupedCells,\n textMeasurer\n );\n const xLabelAngle = (this.labelAngles.xAxisLabels / 180) * Math.PI;\n const yLabelAngle = (this.labelAngles.yAxisLabels / 180) * Math.PI;\n this.captionsSizes = {\n xCaptionTail,\n yCaptionTail,\n xAxisCaptions: maxXLabelSize * Math.sin(xLabelAngle) || TITLE_LINE,\n yAxisCaptions: maxYLabelSize * Math.sin(yLabelAngle) || TITLE_LINE,\n };\n }\n\n updateChartDimensions(\n facetKeys: string[],\n facetSettings: BubbleSettingsImpl['facetSettings'],\n xAxis: BubbleSettingsImpl['chartSettings']['xAxis'],\n yAxis: BubbleSettingsImpl['chartSettings']['yAxis']\n ) {\n const facetCount = facetKeys.length;\n const maxNRows = Math.min(facetSettings.nRows ?? facetCount, facetCount);\n const maxNCols = Math.min(facetSettings.nCols ?? facetCount, facetCount);\n // Use columns/rows count from settings if some of them defined, else make 1 column\n this.columnsCount = facetSettings.nRows ? Math.ceil(facetCount / maxNRows) : maxNCols;\n this.rowsCount = Math.ceil(facetCount / this.columnsCount);\n this.chartsDimensions = {};\n\n let currentLeft = 0;\n let currentTop = 0;\n facetKeys.forEach((key, index) => {\n const currentColumn = (index % this.columnsCount) + 1;\n const chartSides = getChartEdgeSides(index, facetKeys.length, this.columnsCount, this.rowsCount);\n const width = this.chartSizes.chartWidth;\n const height = this.chartSizes.chartHeight;\n const sideElementSizes = calculateChartSideElementSizes(\n xAxis,\n yAxis,\n this.captionsSizes,\n chartSides,\n facetKeys,\n this.step.x,\n this.step.y\n );\n\n function getPadding(side: 'left' | 'right' | 'top' | 'bottom') {\n return Math.max(\n CHART_SIDE_ELEMENTS[side].reduce((res, el) => res + sideElementSizes[side][el], 0),\n MIN_PADDING\n );\n }\n\n const padding = {\n left: getPadding('left'),\n right: getPadding('right'),\n top: getPadding('top'),\n bottom: getPadding('bottom'),\n };\n if (padding.left < this.captionsSizes.xCaptionTail) {\n padding.left = this.captionsSizes.xCaptionTail;\n }\n if (padding.bottom < this.captionsSizes.yCaptionTail) {\n padding.bottom = this.captionsSizes.yCaptionTail;\n }\n const sideElementBBoxes = calculateSideElementsBBoxes(sideElementSizes, width, height);\n const outerWidth = width + padding.left + padding.right;\n const outerHeight = height + padding.top + padding.bottom;\n this.chartsDimensions[key] = {\n left: currentLeft,\n top: currentTop,\n inner: {width, height},\n outer: {width: outerWidth, height: outerHeight},\n padding,\n sideElementBBoxes,\n chartEdgeSides: chartSides,\n };\n currentLeft += outerWidth;\n if (currentColumn === this.columnsCount) {\n currentLeft = 0;\n currentTop += outerHeight;\n }\n });\n\n // sum of widths of first row\n const chartsWidth = facetKeys\n .slice(0, this.columnsCount)\n .reduce((sum, key) => sum + this.chartsDimensions[key].outer.width, 0);\n // sum of heights of first column\n const chartsHeight = facetKeys\n .filter((_key, index) => index % this.columnsCount === 0)\n .reduce((sum, key) => sum + this.chartsDimensions[key].outer.height, 0);\n this.chartSizes.chartsWidth = chartsWidth;\n this.chartSizes.chartsHeight = chartsHeight;\n }\n\n updateChartsSizes(groupedCellsData: GroupedCellsBubble, size: BubbleSettingsImpl['chartSettings']['size']) {\n const {width, height, cellSize} = size;\n if (cellSize) {\n this.chartSizes.chartWidth = groupedCellsData.meta.xKeys.length * cellSize;\n this.chartSizes.chartHeight = groupedCellsData.meta.yKeys.length * cellSize;\n }\n if (width && height) {\n this.chartSizes.chartWidth = width;\n this.chartSizes.chartHeight = height;\n }\n }\n\n // update scales for cell positions, x and y for each facet\n updateScales(\n groupedCells: GroupedCellsBubble,\n size: BubbleSettingsImpl['chartSettings']['size'],\n xAxis: BubbleSettingsImpl['chartSettings']['xAxis'],\n yAxis: BubbleSettingsImpl['chartSettings']['yAxis'],\n customOrder: {x: boolean, y: boolean, xGroup: boolean, yGroup: boolean},\n ) {\n const {width, height, cellSize} = size;\n const {meta} = groupedCells;\n const sortX = (arr: string[], labels: Record<string, string> = {}) => {\n return [...arr].sort((a, b) => xAxis.sorting === '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 const sortY = (arr: string[], labels: Record<string, string> = {}) => {\n return [...arr].sort((a, b) => yAxis.sorting === '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 const xGroupKeys = customOrder.xGroup ? meta.xGroupKeys : sortX(meta.xGroupKeys);\n const yGroupKeys = customOrder.yGroup ? meta.yGroupKeys : sortY(meta.yGroupKeys);\n const { xKeysByGroups, yKeysByGroups } = meta;\n\n const xKeys = xGroupKeys.reduce((res: string[], xGroupKey: string) => {\n res = res.concat(sortX(xKeysByGroups[xGroupKey], meta.xLabels));\n return res;\n }, []);\n const yKeys = yGroupKeys.reduce((res: string[], yGroupKey: string) => {\n res = res.concat(sortY(yKeysByGroups[yGroupKey], meta.yLabels));\n return res;\n }, []);\n if (cellSize) {\n this.step.x = cellSize;\n this.step.y = cellSize;\n } else if (width && height) {\n this.step.x = width / xKeys.length;\n this.step.y = height / yKeys.length;\n }\n const xPositions: number[] = new Array(xKeys.length).fill(null).map((_v, idx) => idx * this.step.x);\n const yPositions: number[] = new Array(yKeys.length).fill(null).map((_v, idx) => idx * this.step.y);\n this.scales.x = scaleOrdinal<string, number>().domain(xKeys).range(xPositions);\n this.scales.y = scaleOrdinal<string, number>().domain(yKeys).range(yPositions);\n }\n\n updateAesScale(\n aes: BubbleSettingsImpl['aes'],\n valueExtentSize: [number, number],\n valueExtentColor: [number, number],\n normalization: BubbleSettingsImpl['normalization']\n ) {\n this.colorScale = scaleLinear<string, string>()\n .domain(getContinuousColorRange(normalization, aes.colorsList.length, valueExtentColor))\n .range(aes.colorsList);\n this.sizeScale = scaleSqrt(valueExtentSize, [aes.minRadius, aes.maxRadius]);\n }\n\n render(\n dataFrame: DataFrame,\n settingsId: string,\n chartSettings: BubbleSettingsImpl['chartSettings'],\n facetSettings: BubbleSettingsImpl['facetSettings'],\n groupedCellsData: GroupedCellsBubble,\n valueColumnColor: ColumnName,\n valueColumnSize: ColumnName,\n normalization: BubbleSettingsImpl['normalization'],\n aes: BubbleSettingsImpl['aes'],\n getCellTooltip: (cell: CellBubble) => string[],\n onTooltipHintSwitch: (v:boolean) => void,\n customOrder: {x: boolean, y: boolean, xGroup: boolean, yGroup: boolean},\n ) {\n const {meta, facets, meta: { facetKeys }} = groupedCellsData;\n const {valueExtent} = meta;\n const {xAxis, yAxis, title, size} = chartSettings;\n this.updateChartsSizes(groupedCellsData, size);\n this.updateAesScale(aes, valueExtent.sizeValue, valueExtent.colorValue, normalization);\n this.updateScales(groupedCellsData, size, chartSettings.xAxis, chartSettings.yAxis, customOrder);\n // caption sizes are needed for chart paddings in chart dimensions\n this.updateCaptionsSize(groupedCellsData, xAxis, yAxis);\n this.updateChartDimensions(facetKeys, facetSettings, xAxis, yAxis);\n this.updateLegendSize(chartSettings.legend, valueColumnColor, valueColumnSize, facetKeys);\n this.updateMargins(title);\n const component = (\n <DataFrameProvider dataFrame={dataFrame}>\n <ChartsGroup\n aes={aes}\n captionsSizes={this.captionsSizes}\n cellsMeta={meta}\n columnsCount={this.columnsCount}\n chartsDimensions={this.chartsDimensions}\n chartSettings={chartSettings}\n chartSizes={this.chartSizes}\n sizeScale={this.sizeScale as (v: DataValue) => number}\n colorScale={this.colorScale as (v: DataValue) => string}\n facetKeys={facetKeys}\n facetSettings={facetSettings}\n groupedCells={facets}\n labelAngles={this.labelAngles}\n legend={this.legend}\n margins={this.margins}\n scales={this.scales}\n settingsId={settingsId}\n step={this.step}\n getCellTooltip={getCellTooltip}\n onTooltipHintSwitch={onTooltipHintSwitch}\n />\n </DataFrameProvider>\n );\n this.component = component;\n this.reactRoot?.render(component);\n }\n\n renderError(message: string) {\n this.reactRoot?.render(<Error message={message} />);\n }\n}\n\nexport default ChartRenderer;\n"],"names":["getSteps","count","valueExtent","min","max","steps","i","step","getContinuousColorRange","normalization","colorsCount","extent","ChartRenderer","__publicField","jsx","Fragment","DEFAULT_WIDTH","DEFAULT_HEIGHT","MIN_MARGIN","scaleOrdinal","scaleLinear","scaleSqrt","_a","node","createRoot","title","TITLE_LINE_HEIGHT","TITLE_MARGIN","legend","columnValueColor","columnValueSize","facetKeys","legendItems","continuousHeight","DEFAULT_HEIGHT_SMALL","legendHeight","emptySizes","colorDomain","colorValues","getContinuousLegendTicks","colorTitle","tickPositionScale","sizeTitle","sizeValues","format","labels","res","v","items","arrangeLegendParts","lastItem","legendWidth","LEGEND_OFFSET","leftTopChartPadding","groupedCells","xAxis","yAxis","textMeasurer","TextMeasurer","xKeys","yKeys","xLabels","yLabels","maxXLabelSize","maxYLabelSize","xKey","l","yKey","xCaptionTail","yCaptionTail","calculateCaptionTails","xLabelAngle","yLabelAngle","TITLE_LINE","facetSettings","facetCount","maxNRows","maxNCols","currentLeft","currentTop","key","index","currentColumn","chartSides","getChartEdgeSides","width","height","sideElementSizes","calculateChartSideElementSizes","getPadding","side","CHART_SIDE_ELEMENTS","el","MIN_PADDING","padding","sideElementBBoxes","calculateSideElementsBBoxes","outerWidth","outerHeight","chartsWidth","sum","chartsHeight","_key","groupedCellsData","size","cellSize","customOrder","meta","sortX","arr","a","b","sortY","xGroupKeys","yGroupKeys","xKeysByGroups","yKeysByGroups","xGroupKey","yGroupKey","xPositions","_v","idx","yPositions","aes","valueExtentSize","valueExtentColor","dataFrame","settingsId","chartSettings","valueColumnColor","valueColumnSize","getCellTooltip","onTooltipHintSwitch","facets","component","DataFrameProvider","ChartsGroup","message","Error"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ChartRenderer.js","sources":["../../src/bubble/ChartRenderer.tsx"],"sourcesContent":["import type { ScaleLinear, ScalePower } from 'd3-scale';\nimport { scaleLinear, scaleOrdinal, scaleSqrt } from 'd3-scale';\nimport type { ReactElement } from 'react';\nimport type { Root } from 'react-dom/client';\nimport { createRoot } from 'react-dom/client';\nimport { Error } from '../common/Error';\nimport type { LegendData, LegendItem } from '../common/types';\nimport { DataFrameProvider } from '../common/useDataFrame';\nimport { DEFAULT_HEIGHT, DEFAULT_WIDTH, MAX_LEGEND_GRADIENT_HEIGHT, MIN_LEGEND_GRADIENT_HEIGHT, TITLE_LINE_HEIGHT, TITLE_MARGIN } from '../constants';\nimport type { DataFrame } from '../DataFrame';\nimport type { ColumnName, DataValue } from '../types';\nimport { arrangeLegendParts } from '../utils/arrangeLegendParts';\nimport { getChartEdgeSides } from '../utils/getChartEdgeSides';\nimport { getContinuousLegendTicks } from '../utils/getContinuousLegendTicks';\nimport { TextMeasurer } from '../utils/TextMeasurer/TextMeasurer';\nimport type { BubbleSettingsImpl } from './BubbleSettingsImpl';\nimport { ChartsGroup } from './components/ChartsGroup';\nimport type {\n CaptionsSizes,\n ChartDimensionsData, ChartScales, ChartSizes,\n LabelAngles,\n Margins\n} from './components/types';\nimport { CHART_SIDE_ELEMENTS, LEGEND_OFFSET, MIN_MARGIN, MIN_PADDING, TITLE_LINE } from './constants';\nimport type { CellBubble, GroupedCellsBubble } from './getGroupedCellsData';\nimport { calculateChartSideElementSizes, calculateSideElementsBBoxes } from './utils';\nimport { calculateCaptionTails } from './utils/calculateCaptionTails';\n\nconst getSteps = (count: number, valueExtent: number[]) => {\n const min = Math.min(...valueExtent);\n const max = Math.max(...valueExtent);\n if (min === max) {\n const steps = count % 2 === 0 ? [] : [min];\n for (let i = 1; i < count / 2 + 1; i++) {\n steps.push(min + i);\n steps.unshift(min - i);\n }\n return steps;\n }\n if (count < 2) {\n return [min, max];\n }\n const step = (max - min) / (count - 1);\n const steps = [];\n for (let i = 0; i < count - 1; i++) {\n steps.push(min + step * i);\n }\n steps.push(max);\n return steps;\n};\n\nfunction getContinuousColorRange(\n normalization: BubbleSettingsImpl['normalization'],\n colorsCount: number,\n valueExtent: number[]\n) {\n let extent = valueExtent;\n if (normalization) {\n if (normalization.colorRange) {\n extent = normalization.colorRange;\n }\n if (normalization.method === 'standardScaling') {\n extent = [-2, 2];\n }\n if (normalization.method === 'meanNormalization') {\n extent = [-0.75, 0.75];\n }\n }\n return getSteps(colorsCount, extent);\n}\n\nclass ChartRenderer {\n reactRoot: Root | null = null;\n parentNode: HTMLElement | null = null;\n rootNode: HTMLElement | null = null;\n component: ReactElement = (<></>);\n chartsDimensions: Record<string, ChartDimensionsData> = {};\n chartSizes: ChartSizes = {\n chartWidth: DEFAULT_WIDTH, // width of single chart\n chartHeight: DEFAULT_HEIGHT, // height of single chart\n chartsWidth: DEFAULT_WIDTH, // width of all charts in charts row\n chartsHeight: DEFAULT_HEIGHT, // width of all charts in charts column, without axes\n totalWidth: DEFAULT_WIDTH, // width of all charts in charts row, plus left axis, plus legend\n totalHeight: DEFAULT_HEIGHT, // width of all charts in charts height, plus bottom axis, plus top title\n };\n margins: Margins = {\n top: MIN_MARGIN,\n bottom: MIN_MARGIN,\n left: MIN_MARGIN,\n right: MIN_MARGIN,\n };\n captionsSizes: CaptionsSizes = {\n xAxisCaptions: 100,\n yAxisCaptions: 100,\n xCaptionTail: 0,\n yCaptionTail: 0,\n };\n labelAngles: LabelAngles = {\n xAxisLabels: 0,\n yAxisLabels: 0,\n };\n columnsCount = 1;\n rowsCount = 1;\n scales: ChartScales = {\n x: scaleOrdinal<string, number>().domain(['null']).range([1]),\n y: scaleOrdinal<string, number>().domain(['null']).range([1]),\n };\n step: {x: number; y: number} = {x: 10, y: 10};\n colorScale: ScaleLinear<string, string> = scaleLinear<string, string>().domain([0, 1]).range(['white', 'black']);\n sizeScale: ScalePower<number, number> = scaleSqrt().domain([0, 1]).range([3, 20]);\n legend: LegendData = {\n width: 0,\n height: 0,\n items: [],\n };\n\n clear() {\n if (this.parentNode && this.rootNode) {\n this.parentNode?.removeChild(this.rootNode);\n this.parentNode = null;\n this.rootNode = null;\n }\n // timeout to avoid trying to unmount during rendering\n setTimeout(() => {\n this.reactRoot?.unmount();\n this.reactRoot = null;\n });\n }\n\n init(node: HTMLElement) {\n if (this.parentNode === null) {\n this.parentNode = node;\n this.rootNode = document.createElement('div');\n this.parentNode.appendChild(this.rootNode);\n this.reactRoot = createRoot(this.rootNode);\n }\n }\n\n updateMargins(title: BubbleSettingsImpl['chartSettings']['title']) {\n this.margins = {\n top: title.show ? TITLE_LINE_HEIGHT + TITLE_MARGIN * 2 : MIN_MARGIN,\n bottom: MIN_MARGIN,\n left: MIN_MARGIN,\n right: this.legend.width,\n };\n this.chartSizes.totalWidth = this.margins.left + this.chartSizes.chartsWidth + this.margins.right;\n this.chartSizes.totalHeight =\n this.margins.top + Math.max(this.chartSizes.chartsHeight, this.legend.height) + this.margins.bottom;\n }\n\n updateLegendSize(\n legend: BubbleSettingsImpl['chartSettings']['legend'],\n columnValueColor: ColumnName,\n columnValueSize: ColumnName,\n facetKeys: string[]\n ) {\n if (!legend.show) {\n this.legend = {width: 0, height: 0, items: []};\n return;\n }\n\n const legendItems: LegendItem[] = [];\n const continuousHeight = Math.min(\n Math.max(this.chartSizes.chartHeight, MIN_LEGEND_GRADIENT_HEIGHT),\n MAX_LEGEND_GRADIENT_HEIGHT\n );\n const legendHeight = Math.max(this.chartSizes.chartHeight, continuousHeight);\n const emptySizes = {width:0, height:0, left:0, top: 0};\n\n const colorDomain = this.colorScale.domain();\n const colorValues = getContinuousLegendTicks(this.colorScale, [\n colorDomain[0],\n colorDomain[colorDomain.length - 1],\n ]);\n const colorTitle = columnValueColor.label ?? columnValueColor.value;\n const tickPositionScale = scaleLinear([colorValues[0], colorValues[colorValues.length - 1]], [continuousHeight, 0]); //TODO: update during adding log scale for heatmap\n \n legendItems.push({\n id: 'colorValue',\n type: 'continuous',\n scale: this.colorScale,\n tickPositionScale,\n values: colorValues,\n title: colorTitle,\n ...emptySizes\n });\n\n const sizeTitle = columnValueSize.label ?? columnValueSize.value;\n const sizeValues = this.sizeScale.ticks(3);\n const format = this.sizeScale.tickFormat(3);\n const labels = sizeValues.reduce((res: Record<string, string>, v) => {\n res[String(v)] = format(v);\n return res;\n }, {});\n legendItems.push({\n id: 'sizeValue',\n type: 'size',\n title: sizeTitle,\n scale: this.sizeScale,\n values: sizeValues,\n labels,\n ...emptySizes\n });\n\n if (!legendItems.length) {\n this.legend = {width: 0, height: 0, items: []};\n return;\n }\n\n const items = arrangeLegendParts(legendItems, legendHeight, continuousHeight);\n\n const lastItem = items[items.length - 1];\n const legendWidth = lastItem.left + lastItem.width + 2 * LEGEND_OFFSET;\n\n const leftTopChartPadding = this.chartsDimensions[facetKeys[0]].padding; // additional offset of legend for alignment with chart\n\n this.legend = {\n width: legendWidth,\n height: legendHeight + leftTopChartPadding.top,\n items: items,\n };\n }\n\n updateCaptionsSize(\n groupedCells: GroupedCellsBubble,\n xAxis: BubbleSettingsImpl['chartSettings']['xAxis'],\n yAxis: BubbleSettingsImpl['chartSettings']['yAxis']\n ) {\n const textMeasurer = new TextMeasurer('bold 14px Arial');\n const {xKeys, yKeys, xLabels, yLabels} = groupedCells.meta;\n this.labelAngles = {\n xAxisLabels: xAxis.axisLabelsAngle,\n yAxisLabels: yAxis.axisLabelsAngle,\n };\n let maxXLabelSize = 0;\n let maxYLabelSize = 0;\n for (const xKey of xKeys) {\n const l = textMeasurer.getTextWidth(xLabels[xKey]);\n if (l > maxXLabelSize) {\n maxXLabelSize = l;\n }\n }\n for (const yKey of yKeys) {\n const l = textMeasurer.getTextWidth(yLabels[yKey]);\n if (l > maxYLabelSize) {\n maxYLabelSize = l;\n }\n }\n const {xCaptionTail, yCaptionTail} = calculateCaptionTails(\n this.labelAngles,\n this.step,\n groupedCells,\n textMeasurer\n );\n const xLabelAngle = (this.labelAngles.xAxisLabels / 180) * Math.PI;\n const yLabelAngle = (this.labelAngles.yAxisLabels / 180) * Math.PI;\n this.captionsSizes = {\n xCaptionTail,\n yCaptionTail,\n xAxisCaptions: maxXLabelSize * Math.sin(xLabelAngle) || TITLE_LINE,\n yAxisCaptions: maxYLabelSize * Math.sin(yLabelAngle) || TITLE_LINE,\n };\n }\n\n updateChartDimensions(\n facetKeys: string[],\n facetSettings: BubbleSettingsImpl['facetSettings'],\n xAxis: BubbleSettingsImpl['chartSettings']['xAxis'],\n yAxis: BubbleSettingsImpl['chartSettings']['yAxis']\n ) {\n const facetCount = facetKeys.length;\n const maxNRows = Math.min(facetSettings.nRows ?? facetCount, facetCount);\n const maxNCols = Math.min(facetSettings.nCols ?? facetCount, facetCount);\n // Use columns/rows count from settings if some of them defined, else make 1 column\n this.columnsCount = facetSettings.nRows ? Math.ceil(facetCount / maxNRows) : maxNCols;\n this.rowsCount = Math.ceil(facetCount / this.columnsCount);\n this.chartsDimensions = {};\n\n let currentLeft = 0;\n let currentTop = 0;\n facetKeys.forEach((key, index) => {\n const currentColumn = (index % this.columnsCount) + 1;\n const chartSides = getChartEdgeSides(index, facetKeys.length, this.columnsCount, this.rowsCount);\n const width = this.chartSizes.chartWidth;\n const height = this.chartSizes.chartHeight;\n const sideElementSizes = calculateChartSideElementSizes(\n xAxis,\n yAxis,\n this.captionsSizes,\n chartSides,\n facetKeys,\n this.step.x,\n this.step.y\n );\n\n function getPadding(side: 'left' | 'right' | 'top' | 'bottom') {\n return Math.max(\n CHART_SIDE_ELEMENTS[side].reduce((res, el) => res + sideElementSizes[side][el], 0),\n MIN_PADDING\n );\n }\n\n const padding = {\n left: getPadding('left'),\n right: getPadding('right'),\n top: getPadding('top'),\n bottom: getPadding('bottom'),\n };\n if (padding.left < this.captionsSizes.xCaptionTail) {\n padding.left = this.captionsSizes.xCaptionTail;\n }\n if (padding.bottom < this.captionsSizes.yCaptionTail) {\n padding.bottom = this.captionsSizes.yCaptionTail;\n }\n const sideElementBBoxes = calculateSideElementsBBoxes(sideElementSizes, width, height);\n const outerWidth = width + padding.left + padding.right;\n const outerHeight = height + padding.top + padding.bottom;\n this.chartsDimensions[key] = {\n left: currentLeft,\n top: currentTop,\n inner: {width, height},\n outer: {width: outerWidth, height: outerHeight},\n padding,\n sideElementBBoxes,\n chartEdgeSides: chartSides,\n };\n currentLeft += outerWidth;\n if (currentColumn === this.columnsCount) {\n currentLeft = 0;\n currentTop += outerHeight;\n }\n });\n\n // sum of widths of first row\n const chartsWidth = facetKeys\n .slice(0, this.columnsCount)\n .reduce((sum, key) => sum + this.chartsDimensions[key].outer.width, 0);\n // sum of heights of first column\n const chartsHeight = facetKeys\n .filter((_key, index) => index % this.columnsCount === 0)\n .reduce((sum, key) => sum + this.chartsDimensions[key].outer.height, 0);\n this.chartSizes.chartsWidth = chartsWidth;\n this.chartSizes.chartsHeight = chartsHeight;\n }\n\n updateChartsSizes(groupedCellsData: GroupedCellsBubble, size: BubbleSettingsImpl['chartSettings']['size']) {\n const {width, height, cellSize} = size;\n if (cellSize) {\n this.chartSizes.chartWidth = groupedCellsData.meta.xKeys.length * cellSize;\n this.chartSizes.chartHeight = groupedCellsData.meta.yKeys.length * cellSize;\n }\n if (width && height) {\n this.chartSizes.chartWidth = width;\n this.chartSizes.chartHeight = height;\n }\n }\n\n // update scales for cell positions, x and y for each facet\n updateScales(\n groupedCells: GroupedCellsBubble,\n size: BubbleSettingsImpl['chartSettings']['size'],\n xAxis: BubbleSettingsImpl['chartSettings']['xAxis'],\n yAxis: BubbleSettingsImpl['chartSettings']['yAxis'],\n customOrder: {x: boolean, y: boolean, xGroup: boolean, yGroup: boolean},\n ) {\n const {width, height, cellSize} = size;\n const {meta} = groupedCells;\n const sortX = (arr: string[], labels: Record<string, string> = {}) => {\n return [...arr].sort((a, b) => xAxis.sorting === '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 const sortY = (arr: string[], labels: Record<string, string> = {}) => {\n return [...arr].sort((a, b) => yAxis.sorting === '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 const xGroupKeys = customOrder.xGroup ? meta.xGroupKeys : sortX(meta.xGroupKeys);\n const yGroupKeys = customOrder.yGroup ? meta.yGroupKeys : sortY(meta.yGroupKeys);\n const { xKeysByGroups, yKeysByGroups } = meta;\n\n const xKeys = xGroupKeys.reduce((res: string[], xGroupKey: string) => {\n res = res.concat(sortX(xKeysByGroups[xGroupKey], meta.xLabels));\n return res;\n }, []);\n const yKeys = yGroupKeys.reduce((res: string[], yGroupKey: string) => {\n res = res.concat(sortY(yKeysByGroups[yGroupKey], meta.yLabels));\n return res;\n }, []);\n if (cellSize) {\n this.step.x = cellSize;\n this.step.y = cellSize;\n } else if (width && height) {\n this.step.x = width / xKeys.length;\n this.step.y = height / yKeys.length;\n }\n const xPositions: number[] = new Array(xKeys.length).fill(null).map((_v, idx) => idx * this.step.x);\n const yPositions: number[] = new Array(yKeys.length).fill(null).map((_v, idx) => idx * this.step.y);\n this.scales.x = scaleOrdinal<string, number>().domain(xKeys).range(xPositions);\n this.scales.y = scaleOrdinal<string, number>().domain(yKeys).range(yPositions);\n }\n\n updateAesScale(\n aes: BubbleSettingsImpl['aes'],\n valueExtentSize: [number, number],\n valueExtentColor: [number, number],\n normalization: BubbleSettingsImpl['normalization']\n ) {\n this.colorScale = scaleLinear<string, string>()\n .domain(getContinuousColorRange(normalization, aes.colorsList.length, valueExtentColor))\n .range(aes.colorsList);\n this.sizeScale = scaleSqrt(valueExtentSize, [aes.minRadius, aes.maxRadius]);\n }\n\n render(\n dataFrame: DataFrame,\n settingsId: string,\n chartSettings: BubbleSettingsImpl['chartSettings'],\n facetSettings: BubbleSettingsImpl['facetSettings'],\n groupedCellsData: GroupedCellsBubble,\n valueColumnColor: ColumnName,\n valueColumnSize: ColumnName,\n normalization: BubbleSettingsImpl['normalization'],\n aes: BubbleSettingsImpl['aes'],\n getCellTooltip: (cell: CellBubble) => string[],\n onTooltipHintSwitch: (v:boolean) => void,\n customOrder: {x: boolean, y: boolean, xGroup: boolean, yGroup: boolean},\n ) {\n const {meta, facets, meta: { facetKeys }} = groupedCellsData;\n const {valueExtent} = meta;\n const {xAxis, yAxis, title, size} = chartSettings;\n this.updateChartsSizes(groupedCellsData, size);\n this.updateAesScale(aes, valueExtent.sizeValue, valueExtent.colorValue, normalization);\n this.updateScales(groupedCellsData, size, chartSettings.xAxis, chartSettings.yAxis, customOrder);\n // caption sizes are needed for chart paddings in chart dimensions\n this.updateCaptionsSize(groupedCellsData, xAxis, yAxis);\n this.updateChartDimensions(facetKeys, facetSettings, xAxis, yAxis);\n this.updateLegendSize(chartSettings.legend, valueColumnColor, valueColumnSize, facetKeys);\n this.updateMargins(title);\n const component = (\n <DataFrameProvider dataFrame={dataFrame}>\n <ChartsGroup\n aes={aes}\n captionsSizes={this.captionsSizes}\n cellsMeta={meta}\n columnsCount={this.columnsCount}\n chartsDimensions={this.chartsDimensions}\n chartSettings={chartSettings}\n chartSizes={this.chartSizes}\n sizeScale={this.sizeScale as (v: DataValue) => number}\n colorScale={this.colorScale as (v: DataValue) => string}\n facetKeys={facetKeys}\n facetSettings={facetSettings}\n groupedCells={facets}\n labelAngles={this.labelAngles}\n legend={this.legend}\n margins={this.margins}\n scales={this.scales}\n settingsId={settingsId}\n step={this.step}\n getCellTooltip={getCellTooltip}\n onTooltipHintSwitch={onTooltipHintSwitch}\n />\n </DataFrameProvider>\n );\n this.component = component;\n this.reactRoot?.render(component);\n }\n\n renderError(message: string) {\n this.reactRoot?.render(<Error message={message} />);\n }\n}\n\nexport default ChartRenderer;\n"],"names":["getSteps","count","valueExtent","min","max","steps","i","step","getContinuousColorRange","normalization","colorsCount","extent","ChartRenderer","__publicField","jsx","Fragment","DEFAULT_WIDTH","DEFAULT_HEIGHT","MIN_MARGIN","scaleOrdinal","scaleLinear","scaleSqrt","_a","node","createRoot","title","TITLE_LINE_HEIGHT","TITLE_MARGIN","legend","columnValueColor","columnValueSize","facetKeys","legendItems","continuousHeight","MIN_LEGEND_GRADIENT_HEIGHT","MAX_LEGEND_GRADIENT_HEIGHT","legendHeight","emptySizes","colorDomain","colorValues","getContinuousLegendTicks","colorTitle","tickPositionScale","sizeTitle","sizeValues","format","labels","res","v","items","arrangeLegendParts","lastItem","legendWidth","LEGEND_OFFSET","leftTopChartPadding","groupedCells","xAxis","yAxis","textMeasurer","TextMeasurer","xKeys","yKeys","xLabels","yLabels","maxXLabelSize","maxYLabelSize","xKey","l","yKey","xCaptionTail","yCaptionTail","calculateCaptionTails","xLabelAngle","yLabelAngle","TITLE_LINE","facetSettings","facetCount","maxNRows","maxNCols","currentLeft","currentTop","key","index","currentColumn","chartSides","getChartEdgeSides","width","height","sideElementSizes","calculateChartSideElementSizes","getPadding","side","CHART_SIDE_ELEMENTS","el","MIN_PADDING","padding","sideElementBBoxes","calculateSideElementsBBoxes","outerWidth","outerHeight","chartsWidth","sum","chartsHeight","_key","groupedCellsData","size","cellSize","customOrder","meta","sortX","arr","a","b","sortY","xGroupKeys","yGroupKeys","xKeysByGroups","yKeysByGroups","xGroupKey","yGroupKey","xPositions","_v","idx","yPositions","aes","valueExtentSize","valueExtentColor","dataFrame","settingsId","chartSettings","valueColumnColor","valueColumnSize","getCellTooltip","onTooltipHintSwitch","facets","component","DataFrameProvider","ChartsGroup","message","Error"],"mappings":"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"}
|
package/dist/constants.d.ts
CHANGED
|
@@ -9,3 +9,5 @@ export declare const TITLE_LINE_HEIGHT = 24;
|
|
|
9
9
|
export declare const MAX_SHOWN_UNIQUE_VALUES_IN_LABELS = 100;
|
|
10
10
|
export declare const MAX_FACETS_COUNT = 50;
|
|
11
11
|
export declare const MAX_GROUPS_COUNT = 100;
|
|
12
|
+
export declare const MIN_LEGEND_GRADIENT_HEIGHT = 250;
|
|
13
|
+
export declare const MAX_LEGEND_GRADIENT_HEIGHT = 400;
|
package/dist/constants.js
CHANGED
|
@@ -1,15 +1,17 @@
|
|
|
1
|
-
const
|
|
1
|
+
const E = "#110529", _ = "#E1E3EB", T = 600, A = 350, I = 400, L = 250, o = 24, t = 24, c = 100, n = 50, s = 100, G = 250, H = 400;
|
|
2
2
|
export {
|
|
3
|
-
|
|
3
|
+
E as BLACK,
|
|
4
4
|
A as DEFAULT_HEIGHT,
|
|
5
|
-
|
|
5
|
+
L as DEFAULT_HEIGHT_SMALL,
|
|
6
6
|
T as DEFAULT_WIDTH,
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
I as DEFAULT_WIDTH_SMALL,
|
|
8
|
+
_ as GRID_GRAY,
|
|
9
9
|
n as MAX_FACETS_COUNT,
|
|
10
10
|
s as MAX_GROUPS_COUNT,
|
|
11
|
+
H as MAX_LEGEND_GRADIENT_HEIGHT,
|
|
11
12
|
c as MAX_SHOWN_UNIQUE_VALUES_IN_LABELS,
|
|
12
|
-
|
|
13
|
-
t as
|
|
13
|
+
G as MIN_LEGEND_GRADIENT_HEIGHT,
|
|
14
|
+
t as TITLE_LINE_HEIGHT,
|
|
15
|
+
o as TITLE_MARGIN
|
|
14
16
|
};
|
|
15
17
|
//# sourceMappingURL=constants.js.map
|
package/dist/constants.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sources":["../src/constants.ts"],"sourcesContent":["export const BLACK = '#110529';\nexport const GRID_GRAY = '#E1E3EB';\n\nexport const DEFAULT_WIDTH = 600;\nexport const DEFAULT_HEIGHT = 350;\nexport const DEFAULT_WIDTH_SMALL = 400;\nexport const DEFAULT_HEIGHT_SMALL = 250;\n\nexport const TITLE_MARGIN = 24;\nexport const TITLE_LINE_HEIGHT = 24;\n\nexport const MAX_SHOWN_UNIQUE_VALUES_IN_LABELS = 100;\nexport const MAX_FACETS_COUNT = 50;\nexport const MAX_GROUPS_COUNT = 100;"],"names":["BLACK","GRID_GRAY","DEFAULT_WIDTH","DEFAULT_HEIGHT","DEFAULT_WIDTH_SMALL","DEFAULT_HEIGHT_SMALL","TITLE_MARGIN","TITLE_LINE_HEIGHT","MAX_SHOWN_UNIQUE_VALUES_IN_LABELS","MAX_FACETS_COUNT","MAX_GROUPS_COUNT"],"mappings":"AAAO,MAAMA,IAAQ,WACRC,IAAY,WAEZC,IAAgB,KAChBC,IAAiB,KACjBC,IAAsB,KACtBC,IAAuB,KAEvBC,IAAe,IACfC,IAAoB,IAEpBC,IAAoC,KACpCC,IAAmB,IACnBC,IAAmB;"}
|
|
1
|
+
{"version":3,"file":"constants.js","sources":["../src/constants.ts"],"sourcesContent":["export const BLACK = '#110529';\nexport const GRID_GRAY = '#E1E3EB';\n\nexport const DEFAULT_WIDTH = 600;\nexport const DEFAULT_HEIGHT = 350;\nexport const DEFAULT_WIDTH_SMALL = 400;\nexport const DEFAULT_HEIGHT_SMALL = 250;\n\nexport const TITLE_MARGIN = 24;\nexport const TITLE_LINE_HEIGHT = 24;\n\nexport const MAX_SHOWN_UNIQUE_VALUES_IN_LABELS = 100;\nexport const MAX_FACETS_COUNT = 50;\nexport const MAX_GROUPS_COUNT = 100;\n\nexport const MIN_LEGEND_GRADIENT_HEIGHT = 250;\nexport const MAX_LEGEND_GRADIENT_HEIGHT = 400;"],"names":["BLACK","GRID_GRAY","DEFAULT_WIDTH","DEFAULT_HEIGHT","DEFAULT_WIDTH_SMALL","DEFAULT_HEIGHT_SMALL","TITLE_MARGIN","TITLE_LINE_HEIGHT","MAX_SHOWN_UNIQUE_VALUES_IN_LABELS","MAX_FACETS_COUNT","MAX_GROUPS_COUNT","MIN_LEGEND_GRADIENT_HEIGHT","MAX_LEGEND_GRADIENT_HEIGHT"],"mappings":"AAAO,MAAMA,IAAQ,WACRC,IAAY,WAEZC,IAAgB,KAChBC,IAAiB,KACjBC,IAAsB,KACtBC,IAAuB,KAEvBC,IAAe,IACfC,IAAoB,IAEpBC,IAAoC,KACpCC,IAAmB,IACnBC,IAAmB,KAEnBC,IAA6B,KAC7BC,IAA6B;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stackedBar.js","sources":["../../../src/discrete/layers/stackedBar.ts"],"sourcesContent":["import { max as d3Max, min as d3Min, mean, quantileSorted, sum } from 'd3-array';\nimport type { DataFrame, GroupKey } from '../../DataFrame';\nimport { NO_GROUPED } from '../../DataFrame';\nimport type { ColumnName } from '../../types';\nimport type { StackedBarLayer } from '../DiscreteSettingsImpl';\nimport { getFacetStringKey } from '../utils/getFacetStringKey';\nimport type { StackedBarsData } from './types';\nimport { exhaustive } from '../../utils';\n\ntype BarPart = {\n height: number;\n key: string;\n};\n\nexport type StackedBar = {\n key: string;\n valuesMap: Record<string, BarPart>;\n primaryGrouping: string;\n boundsY: {\n min: number;\n max: number;\n };\n};\n\nfunction calculateHeight(\n indexes:
|
|
1
|
+
{"version":3,"file":"stackedBar.js","sources":["../../../src/discrete/layers/stackedBar.ts"],"sourcesContent":["import { max as d3Max, min as d3Min, mean, quantileSorted, sum } from 'd3-array';\nimport type { DataFrame, GroupKey } from '../../DataFrame';\nimport { NO_GROUPED } from '../../DataFrame';\nimport type { ColumnName } from '../../types';\nimport type { StackedBarLayer } from '../DiscreteSettingsImpl';\nimport { getFacetStringKey } from '../utils/getFacetStringKey';\nimport type { StackedBarsData } from './types';\nimport { exhaustive } from '../../utils';\n\ntype BarPart = {\n height: number;\n key: string;\n};\n\nexport type StackedBar = {\n key: string;\n valuesMap: Record<string, BarPart>;\n primaryGrouping: string;\n boundsY: {\n min: number;\n max: number;\n };\n};\n\nfunction calculateHeight(\n indexes: Uint32Array,\n getter: (idx: number) => number,\n heightFunc: 'sum' | 'min' | 'max' | 'median' | 'mean',\n):number {\n if (indexes.length === 0) {\n throw Error('Unable to create bar on empty data');\n }\n\n switch (heightFunc) {\n case 'sum':\n return sum(indexes, getter);\n case 'max':\n return d3Max(indexes, getter) ?? getter(0);\n case 'min':\n return d3Min(indexes, getter) ?? getter(0);\n case 'median': {\n const valuesSorted = [...indexes].map(getter).sort((a, b) => a - b);\n return quantileSorted(valuesSorted, 0.5) ?? getter(0);\n }\n case 'mean': {\n return mean(indexes, getter) ?? getter(0);\n }\n default: exhaustive(heightFunc, `Unknown bar height function ${heightFunc}`);\n }\n}\n\nexport function getStackedBarsData(\n layer: StackedBarLayer,\n groupingKeys: {\n facet: GroupKey[][],\n primary: GroupKey[],\n secondary: GroupKey[]\n },\n data: DataFrame,\n y: ColumnName,\n): StackedBarsData {\n let maxY = -Infinity;\n let minY = Infinity;\n\n return {\n type: 'stackedBar',\n geoms: groupingKeys.facet.reduce((res: Record<string, StackedBar[]>, facetKey) => {\n const strFacetKey = getFacetStringKey(facetKey);\n res[strFacetKey] = [];\n groupingKeys.primary.forEach(primaryKey => {\n let currentHeight = 0;\n const barParts:Record<string, BarPart> = {};\n groupingKeys.secondary.forEach(secondaryKey => {\n const secondaryKeyStr = secondaryKey === NO_GROUPED ? 'null' : secondaryKey;\n const indexes = data.getRowsByGrouping([...facetKey, primaryKey, secondaryKey]);\n if (!indexes.length) {\n return;\n }\n const height = calculateHeight(indexes, (i) => Number(data.getColumnValue(y.value, i)), layer.height);\n barParts[secondaryKeyStr] = {\n height,\n key: String(secondaryKeyStr),\n };\n currentHeight += height;\n });\n const maxStackHeight = currentHeight;\n if (layer.normalize) { // show in percents of every stack\n groupingKeys.secondary.forEach(secondaryKey => {\n const secondaryKeyStr = secondaryKey === NO_GROUPED ? 'null' : secondaryKey;\n if (!barParts[secondaryKeyStr]) {\n return;\n }\n barParts[secondaryKeyStr].height = barParts[secondaryKeyStr].height / maxStackHeight * 100;\n });\n }\n maxY = Math.max(maxY, 0, currentHeight);\n minY = Math.min(minY, 0, currentHeight);\n const bound = layer.normalize ? 100 : maxStackHeight;\n res[strFacetKey].push({\n key: `stackedBar_${String(primaryKey)}`,\n valuesMap: barParts,\n primaryGrouping: primaryKey,\n boundsY: {min: Math.min(bound, 0), max: Math.max(bound, 0)},\n } as StackedBar);\n });\n return res;\n }, {}),\n meta: {minY: layer.normalize ? 0 : minY, maxY: layer.normalize ? 100 : maxY, normalize: layer.normalize},\n aes: layer.aes,\n };\n}\n"],"names":["calculateHeight","indexes","getter","heightFunc","sum","d3Max","d3Min","valuesSorted","a","b","quantileSorted","mean","exhaustive","getStackedBarsData","layer","groupingKeys","data","y","maxY","minY","res","facetKey","strFacetKey","getFacetStringKey","primaryKey","currentHeight","barParts","secondaryKey","secondaryKeyStr","NO_GROUPED","height","i","maxStackHeight","bound"],"mappings":";;;;;;;;AAwBA,SAASA,EACLC,GACAC,GACAC,GACK;AACL,MAAIF,EAAQ,WAAW;AACnB,UAAM,MAAM,oCAAoC;AAGpD,UAAQE,GAAA;AAAA,IACJ,KAAK;AACD,aAAOC,EAAIH,GAASC,CAAM;AAAA,IAC9B,KAAK;AACD,aAAOG,EAAMJ,GAASC,CAAM,KAAKA,EAAO,CAAC;AAAA,IAC7C,KAAK;AACD,aAAOI,EAAML,GAASC,CAAM,KAAKA,EAAO,CAAC;AAAA,IAC7C,KAAK,UAAU;AACX,YAAMK,IAAe,CAAC,GAAGN,CAAO,EAAE,IAAIC,CAAM,EAAE,KAAK,CAACM,GAAGC,MAAMD,IAAIC,CAAC;AAClE,aAAOC,EAAeH,GAAc,GAAG,KAAKL,EAAO,CAAC;AAAA,IACxD;AAAA,IACA,KAAK;AACD,aAAOS,EAAKV,GAASC,CAAM,KAAKA,EAAO,CAAC;AAAA,IAE5C;AAAS,MAAAU,EAAWT,GAAY,+BAA+BA,CAAU,EAAE;AAAA,EAAA;AAEnF;AAEO,SAASU,EACZC,GACAC,GAKAC,GACAC,GACe;AACf,MAAIC,IAAO,QACPC,IAAO;AAEX,SAAO;AAAA,IACH,MAAM;AAAA,IACN,OAAOJ,EAAa,MAAM,OAAO,CAACK,GAAmCC,MAAa;AAC9E,YAAMC,IAAcC,EAAkBF,CAAQ;AAC9C,aAAAD,EAAIE,CAAW,IAAI,CAAA,GACnBP,EAAa,QAAQ,QAAQ,CAAAS,MAAc;AACvC,YAAIC,IAAgB;AACpB,cAAMC,IAAmC,CAAA;AACzC,QAAAX,EAAa,UAAU,QAAQ,CAAAY,MAAgB;AAC3C,gBAAMC,IAAkBD,MAAiBE,IAAa,SAASF,GACzD1B,IAAUe,EAAK,kBAAkB,CAAC,GAAGK,GAAUG,GAAYG,CAAY,CAAC;AAC9E,cAAI,CAAC1B,EAAQ;AACT;AAEJ,gBAAM6B,IAAS9B,EAAgBC,GAAS,CAAC8B,MAAM,OAAOf,EAAK,eAAeC,EAAE,OAAOc,CAAC,CAAC,GAAGjB,EAAM,MAAM;AACpG,UAAAY,EAASE,CAAe,IAAI;AAAA,YACxB,QAAAE;AAAA,YACA,KAAK,OAAOF,CAAe;AAAA,UAAA,GAE/BH,KAAiBK;AAAA,QACrB,CAAC;AACD,cAAME,IAAiBP;AACvB,QAAIX,EAAM,aACNC,EAAa,UAAU,QAAQ,CAAAY,MAAgB;AAC3C,gBAAMC,IAAkBD,MAAiBE,IAAa,SAASF;AAC/D,UAAKD,EAASE,CAAe,MAG7BF,EAASE,CAAe,EAAE,SAASF,EAASE,CAAe,EAAE,SAAUI,IAAiB;AAAA,QAC5F,CAAC,GAELd,IAAO,KAAK,IAAIA,GAAM,GAAGO,CAAa,GACtCN,IAAO,KAAK,IAAIA,GAAM,GAAGM,CAAa;AACtC,cAAMQ,IAAQnB,EAAM,YAAY,MAAMkB;AACtC,QAAAZ,EAAIE,CAAW,EAAE,KAAK;AAAA,UAClB,KAAK,cAAc,OAAOE,CAAU,CAAC;AAAA,UACrC,WAAWE;AAAA,UACX,iBAAiBF;AAAA,UACjB,SAAS,EAAC,KAAK,KAAK,IAAIS,GAAO,CAAC,GAAG,KAAK,KAAK,IAAIA,GAAO,CAAC,EAAA;AAAA,QAAC,CAC/C;AAAA,MACnB,CAAC,GACMb;AAAA,IACX,GAAG,CAAA,CAAE;AAAA,IACL,MAAM,EAAC,MAAMN,EAAM,YAAY,IAAIK,GAAM,MAAML,EAAM,YAAY,MAAMI,GAAM,WAAWJ,EAAM,UAAA;AAAA,IAC9F,KAAKA,EAAM;AAAA,EAAA;AAEnB;"}
|