@milaboratories/miplots4 1.2.2 → 1.2.4
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.map +1 -1
- package/dist/DataFrame.js +2 -1
- package/dist/DataFrame.js.map +1 -1
- package/dist/heatmap/ChartRenderer.d.ts.map +1 -1
- package/dist/heatmap/ChartRenderer.js +72 -78
- package/dist/heatmap/ChartRenderer.js.map +1 -1
- package/dist/selection/ChartRenderer.d.ts.map +1 -1
- package/dist/selection/ChartRenderer.js +9 -11
- package/dist/selection/ChartRenderer.js.map +1 -1
- package/dist/selection/SelectionSettingsImpl.d.ts +0 -1
- package/dist/selection/SelectionSettingsImpl.d.ts.map +1 -1
- package/dist/selection/SelectionSettingsImpl.js +0 -1
- package/dist/selection/SelectionSettingsImpl.js.map +1 -1
- package/dist/selection/components/Chart/Bars/GroupSelectedBars.js +1 -1
- package/dist/selection/components/Chart/Bars/GroupSelectedBars.js.map +1 -1
- package/dist/selection/components/Chart/Bars/StackedBars.d.ts.map +1 -1
- package/dist/selection/components/Chart/Bars/StackedBars.js +11 -11
- package/dist/selection/components/Chart/Bars/StackedBars.js.map +1 -1
- package/dist/selection/components/Chart/ChartAxes.d.ts.map +1 -1
- package/dist/selection/components/Chart/ChartAxes.js +7 -8
- package/dist/selection/components/Chart/ChartAxes.js.map +1 -1
- package/dist/selection/components/Chart/ChartFrame.d.ts +1 -2
- package/dist/selection/components/Chart/ChartFrame.d.ts.map +1 -1
- package/dist/selection/components/Chart/ChartFrame.js +8 -8
- package/dist/selection/components/Chart/ChartFrame.js.map +1 -1
- package/dist/selection/components/Chart/Gridlines.d.ts +2 -6
- package/dist/selection/components/Chart/Gridlines.d.ts.map +1 -1
- package/dist/selection/components/Chart/Gridlines.js +14 -26
- package/dist/selection/components/Chart/Gridlines.js.map +1 -1
- package/dist/selection/components/Chart/Ribbons/GroupFlowRibbon.js +1 -1
- package/dist/selection/components/Chart/Ribbons/GroupFlowRibbon.js.map +1 -1
- package/dist/selection/components/Chart/Ribbons/StackedGroupFlowRibbon.d.ts.map +1 -1
- package/dist/selection/components/Chart/Ribbons/StackedGroupFlowRibbon.js +27 -27
- package/dist/selection/components/Chart/Ribbons/StackedGroupFlowRibbon.js.map +1 -1
- package/dist/selection/components/Chart/SelectionXAxis.d.ts +18 -0
- package/dist/selection/components/Chart/SelectionXAxis.d.ts.map +1 -0
- package/dist/selection/components/Chart/SelectionXAxis.js +47 -0
- package/dist/selection/components/Chart/SelectionXAxis.js.map +1 -0
- package/dist/selection/components/Chart/types.d.ts +0 -1
- package/dist/selection/components/Chart/types.d.ts.map +1 -1
- package/dist/selection/components/Chart.d.ts.map +1 -1
- package/dist/selection/components/Chart.js +7 -12
- package/dist/selection/components/Chart.js.map +1 -1
- package/dist/selection/components/ChartsGroup.d.ts.map +1 -1
- package/dist/selection/components/ChartsGroup.js +73 -72
- package/dist/selection/components/ChartsGroup.js.map +1 -1
- package/dist/selection/components/types.d.ts +0 -1
- package/dist/selection/components/types.d.ts.map +1 -1
- package/dist/selection/constants.d.ts +1 -2
- package/dist/selection/constants.d.ts.map +1 -1
- package/dist/selection/constants.js +2 -2
- package/dist/selection/constants.js.map +1 -1
- package/dist/selection/createSelectionData.d.ts +2 -6
- package/dist/selection/createSelectionData.d.ts.map +1 -1
- package/dist/selection/createSelectionData.js +45 -59
- package/dist/selection/createSelectionData.js.map +1 -1
- package/dist/types/selection.d.ts +0 -5
- package/dist/types/selection.d.ts.map +1 -1
- package/dist/types/selection.js +0 -1
- package/dist/types/selection.js.map +1 -1
- package/dist/utils/computeChartInnerSize.d.ts +18 -0
- package/dist/utils/computeChartInnerSize.d.ts.map +1 -0
- package/dist/utils/computeChartInnerSize.js +22 -0
- package/dist/utils/computeChartInnerSize.js.map +1 -0
- package/package.json +1 -1
package/dist/DataFrame.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataFrame.d.ts","sourceRoot":"","sources":["../src/DataFrame.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAGnD,MAAM,MAAM,aAAa,GAAG;IACxB,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,CAAC,EAAE,OAAO,CAAA;CACrB,CAAA;AACD,MAAM,MAAM,OAAO,GAAG,SAAS,GAAG,aAAa,CAAC;AAChD,eAAO,MAAM,UAAU,eAAsB,CAAC;AAC9C,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,OAAO,UAAU,CAAC;AAClD,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC;AAC9B,KAAK,SAAS,GAAG,MAAM,CACnB,QAAQ,EACR;IACI,UAAU,EAAE,WAAW,CAAC;IACxB,OAAO,EAAE,SAAS,CAAC;CACtB,CACJ,CAAC;AAMF,KAAK,UAAU,GAAG,MAAM,CAAC;AAIzB,qBAAa,SAAS;IAClB,MAAM,CAAC,UAAU,GAAI,OAAO,SAAS,KAAG,MAAM,CAAkB;IAEhE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAEpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;IAC3C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,UAAU,EAAE,CAAC;IACnC,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAC;IAEjC,QAAQ,CAAC,mBAAmB,EAAE,GAAG,CAAC,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAa;IACtE,QAAQ,CAAC,6BAA6B,EAAE,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAa;IAE3F,WAAW,CAAC,EAAE,SAAS,CAAC;IAExB,MAAM,CAAC,IAAI,CAAE,IAAI,EAAE,OAAO,GAAE,SAAS;gBAUzB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"DataFrame.d.ts","sourceRoot":"","sources":["../src/DataFrame.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAGnD,MAAM,MAAM,aAAa,GAAG;IACxB,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,CAAC,EAAE,OAAO,CAAA;CACrB,CAAA;AACD,MAAM,MAAM,OAAO,GAAG,SAAS,GAAG,aAAa,CAAC;AAChD,eAAO,MAAM,UAAU,eAAsB,CAAC;AAC9C,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,OAAO,UAAU,CAAC;AAClD,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC;AAC9B,KAAK,SAAS,GAAG,MAAM,CACnB,QAAQ,EACR;IACI,UAAU,EAAE,WAAW,CAAC;IACxB,OAAO,EAAE,SAAS,CAAC;CACtB,CACJ,CAAC;AAMF,KAAK,UAAU,GAAG,MAAM,CAAC;AAIzB,qBAAa,SAAS;IAClB,MAAM,CAAC,UAAU,GAAI,OAAO,SAAS,KAAG,MAAM,CAAkB;IAEhE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAEpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;IAC3C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,UAAU,EAAE,CAAC;IACnC,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAC;IAEjC,QAAQ,CAAC,mBAAmB,EAAE,GAAG,CAAC,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAa;IACtE,QAAQ,CAAC,6BAA6B,EAAE,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAa;IAE3F,WAAW,CAAC,EAAE,SAAS,CAAC;IAExB,MAAM,CAAC,IAAI,CAAE,IAAI,EAAE,OAAO,GAAE,SAAS;gBAUzB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC;IASzD,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE;IAInC,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS;IAIrD,sBAAsB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,QAAQ;IAI5D,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,UAAO,GAAG,QAAQ,EAAE;IAW/D,yBAAyB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,GAAG,QAAQ;IAUjE,OAAO,CAAC,uBAAuB;IAiC/B,WAAW,CAAC,iBAAiB,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,EAAE,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,SAAS,CAAC,EAAE;IAiC3F,mBAAmB,CAAC,YAAY,EAAE,QAAQ,EAAE,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE;IAmB3E,iBAAiB,CAAC,YAAY,EAAE,QAAQ,EAAE,GAAG,WAAW;CAiB3D"}
|
package/dist/DataFrame.js
CHANGED
|
@@ -20,7 +20,8 @@ var i = new Uint32Array(), a = class a {
|
|
|
20
20
|
e(t, "Unknown input data format");
|
|
21
21
|
}
|
|
22
22
|
constructor(e, t) {
|
|
23
|
-
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(
|
|
23
|
+
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(this.rowsCount);
|
|
24
|
+
for (let e = 0; e < this.rowsCount; e++) this.rowIndexes[e] = e;
|
|
24
25
|
}
|
|
25
26
|
getColumn(e) {
|
|
26
27
|
return this.data[e];
|
package/dist/DataFrame.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataFrame.js","names":[],"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 overflow?: boolean\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)[], groupingKeys?: (GroupKey[] | undefined)[]) { \n const root = {grouped: {} as RowsGroup, rowIndexes: this.rowIndexes};\n let groups: RowsGroup[keyof RowsGroup][] = [root];\n groupingColumnIds.forEach((column, idx) => {\n const keys: GroupKey[] = column === null ? [NO_GROUPED] : (groupingKeys?.[idx] ?? 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 for (const key of groupingKeys) {\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"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DataFrame.js","names":[],"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 overflow?: boolean\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(this.rowsCount);\n for (let i = 0; i < this.rowsCount; i++) this.rowIndexes[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)[], groupingKeys?: (GroupKey[] | undefined)[]) { \n const root = {grouped: {} as RowsGroup, rowIndexes: this.rowIndexes};\n let groups: RowsGroup[keyof RowsGroup][] = [root];\n groupingColumnIds.forEach((column, idx) => {\n const keys: GroupKey[] = column === null ? [NO_GROUPED] : (groupingKeys?.[idx] ?? 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 for (const key of groupingKeys) {\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"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChartRenderer.d.ts","sourceRoot":"","sources":["../../src/heatmap/ChartRenderer.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAG1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAC1C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAG7C,OAAO,KAAK,EAAE,UAAU,EAAc,MAAM,iBAAiB,CAAC;AAG9D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAW,UAAU,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"ChartRenderer.d.ts","sourceRoot":"","sources":["../../src/heatmap/ChartRenderer.tsx"],"names":[],"mappings":"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"}
|
|
@@ -3,35 +3,36 @@ import { getContinuousLegendTicks as t } from "../utils/getContinuousLegendTicks
|
|
|
3
3
|
import { TextMeasurer as n } from "../utils/TextMeasurer/TextMeasurer.js";
|
|
4
4
|
import { DataFrameProvider as r } from "../common/useDataFrame.js";
|
|
5
5
|
import { arrangeLegendParts as i } from "../utils/arrangeLegendParts.js";
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
6
|
+
import { computeChartInnerSize as a } from "../utils/computeChartInnerSize.js";
|
|
7
|
+
import { getChartEdgeSides as o } from "../utils/getChartEdgeSides.js";
|
|
8
|
+
import { CHART_SIDE_ELEMENTS as s, DEFAULT_AES as c } from "./constants.js";
|
|
9
|
+
import { ChartsGroup as l } from "./components/ChartsGroup.js";
|
|
10
|
+
import { calculateChartSideElementSizes as u } from "./utils/calculateChartSideElementSizes.js";
|
|
11
|
+
import { calculateSideElementsBBoxes as d } from "./utils/calculateSideElementsBBoxes.js";
|
|
12
|
+
import { createContinuousColorScale as f, createDiscreteColorScale as p, createDiscreteRoundColorScale as m } from "./utils/createColorScales.js";
|
|
13
|
+
import { calculateAnnotationTitleSizes as h } from "./utils/calculateAnnotationTitleSizes.js";
|
|
13
14
|
import "./utils/index.js";
|
|
14
|
-
import { calculateCaptionTails as
|
|
15
|
-
import
|
|
16
|
-
import { cluster as
|
|
17
|
-
import { scaleLinear as
|
|
18
|
-
import { createRoot as
|
|
19
|
-
import { Fragment as
|
|
20
|
-
import { extent as
|
|
21
|
-
var
|
|
22
|
-
function
|
|
15
|
+
import { calculateCaptionTails as g } from "./utils/calculateCaptionTails.js";
|
|
16
|
+
import _ from "lodash";
|
|
17
|
+
import { cluster as v } from "d3-hierarchy";
|
|
18
|
+
import { scaleLinear as y, scaleOrdinal as b } from "d3-scale";
|
|
19
|
+
import { createRoot as x } from "react-dom/client";
|
|
20
|
+
import { Fragment as S, jsx as C } from "react/jsx-runtime";
|
|
21
|
+
import { extent as w } from "d3-array";
|
|
22
|
+
var T = Math.cos(Math.PI / 4), E = 5;
|
|
23
|
+
function D(e, t, n) {
|
|
23
24
|
function r(e) {
|
|
24
25
|
e[n] = t(e.data.height), e.children && e.children.forEach(r);
|
|
25
26
|
}
|
|
26
27
|
r(e);
|
|
27
28
|
}
|
|
28
|
-
function
|
|
29
|
+
function O(e, t, n, r = n) {
|
|
29
30
|
function i(e) {
|
|
30
31
|
e[r] = e[n] + t, e.children && e.children.forEach(i);
|
|
31
32
|
}
|
|
32
33
|
i(e);
|
|
33
34
|
}
|
|
34
|
-
var
|
|
35
|
+
var k = (e, t) => {
|
|
35
36
|
let n = Math.min(...t), r = Math.max(...t);
|
|
36
37
|
if (n === r) {
|
|
37
38
|
let t = e % 2 == 0 ? [] : [n];
|
|
@@ -43,11 +44,11 @@ var O = (e, t) => {
|
|
|
43
44
|
for (let t = 0; t < e - 1; t++) a.push(n + i * t);
|
|
44
45
|
return a.push(r), a;
|
|
45
46
|
};
|
|
46
|
-
function
|
|
47
|
+
function A(e, t, n) {
|
|
47
48
|
let r = n;
|
|
48
|
-
return e && (e.colorRange && (r = e.colorRange), e.method === "standardScaling" && (r = [-2, 2]), e.method === "meanNormalization" && (r = [-.75, .75])),
|
|
49
|
+
return e && (e.colorRange && (r = e.colorRange), e.method === "standardScaling" && (r = [-2, 2]), e.method === "meanNormalization" && (r = [-.75, .75])), k(t, r);
|
|
49
50
|
}
|
|
50
|
-
function
|
|
51
|
+
function j(e, t, n) {
|
|
51
52
|
let r = 0;
|
|
52
53
|
for (let i of e) {
|
|
53
54
|
if (t[i] === void 0) continue;
|
|
@@ -56,14 +57,14 @@ function A(e, t, n) {
|
|
|
56
57
|
}
|
|
57
58
|
return r;
|
|
58
59
|
}
|
|
59
|
-
function
|
|
60
|
-
return t === 90 ? e : t === 45 ? e *
|
|
60
|
+
function M(e, t) {
|
|
61
|
+
return t === 90 ? e : t === 45 ? e * T + (e > 0 ? 2 * E : 0) : 30;
|
|
61
62
|
}
|
|
62
|
-
var
|
|
63
|
+
var N = class {
|
|
63
64
|
reactRoot = null;
|
|
64
65
|
parentNode = null;
|
|
65
66
|
rootNode = null;
|
|
66
|
-
component = /* @__PURE__ */ S
|
|
67
|
+
component = /* @__PURE__ */ C(S, {});
|
|
67
68
|
chartsDimensions = {};
|
|
68
69
|
chartSizes = {
|
|
69
70
|
chartWidth: 600,
|
|
@@ -96,14 +97,14 @@ var M = class {
|
|
|
96
97
|
columnsCount = 1;
|
|
97
98
|
rowsCount = 1;
|
|
98
99
|
scales = {
|
|
99
|
-
x: { null:
|
|
100
|
-
y: { null:
|
|
100
|
+
x: { null: b().domain(["null"]).range([1]) },
|
|
101
|
+
y: { null: b().domain(["null"]).range([1]) }
|
|
101
102
|
};
|
|
102
103
|
step = {
|
|
103
104
|
x: {},
|
|
104
105
|
y: {}
|
|
105
106
|
};
|
|
106
|
-
colorScale =
|
|
107
|
+
colorScale = y().domain([0, 1]).range(["white", "black"]);
|
|
107
108
|
annotationColorScales = {};
|
|
108
109
|
dendrogramAesScales = {};
|
|
109
110
|
legend = {
|
|
@@ -118,7 +119,7 @@ var M = class {
|
|
|
118
119
|
});
|
|
119
120
|
}
|
|
120
121
|
init(e) {
|
|
121
|
-
this.parentNode === null && (this.parentNode = e, this.rootNode = document.createElement("div"), this.parentNode.appendChild(this.rootNode), this.reactRoot =
|
|
122
|
+
this.parentNode === null && (this.parentNode = e, this.rootNode = document.createElement("div"), this.parentNode.appendChild(this.rootNode), this.reactRoot = x(this.rootNode));
|
|
122
123
|
}
|
|
123
124
|
updateMargins(e, t) {
|
|
124
125
|
this.margins = {
|
|
@@ -144,7 +145,7 @@ var M = class {
|
|
|
144
145
|
top: 0
|
|
145
146
|
}, d = (e) => e.reduce((e, t) => (e[t] = String(t), e), {});
|
|
146
147
|
if (e === "continuous") {
|
|
147
|
-
let e = this.colorScale, n = t(e, o), r =
|
|
148
|
+
let e = this.colorScale, n = t(e, o), r = y([n[0], n[n.length - 1]], [s, 0]), i = a.label ?? a.value;
|
|
148
149
|
l.push({
|
|
149
150
|
...u,
|
|
150
151
|
type: "continuous",
|
|
@@ -169,7 +170,7 @@ var M = class {
|
|
|
169
170
|
if (r.forEach((e) => {
|
|
170
171
|
let n = e.valueColumn.label ?? e.valueColumn.value;
|
|
171
172
|
if (e.type === "continuous") {
|
|
172
|
-
let r = this.annotationColorScales[e.id].scale, i = t(r, o), a =
|
|
173
|
+
let r = this.annotationColorScales[e.id].scale, i = t(r, o), a = y([i[0], i[i.length - 1]], [s, 0]);
|
|
173
174
|
l.push({
|
|
174
175
|
...u,
|
|
175
176
|
type: "continuous",
|
|
@@ -215,26 +216,26 @@ var M = class {
|
|
|
215
216
|
xGroupLabels: t.groupLabelsAngle,
|
|
216
217
|
yGroupLabels: r.groupLabelsAngle
|
|
217
218
|
};
|
|
218
|
-
let m = o.reduce((e, t) => Math.max(e,
|
|
219
|
+
let m = o.reduce((e, t) => Math.max(e, j(u[t], f, a)), 0), h = s.reduce((e, t) => Math.max(e, j(d[t], p, a)), 0), _ = j(o, c, a), v = j(s, l, a), { xCaptionTail: y, yCaptionTail: b } = g(this.labelAngles, i, this.scales, this.step, e, a);
|
|
219
220
|
this.captionsSizes = {
|
|
220
221
|
xCaptionTail: y,
|
|
221
222
|
yCaptionTail: b,
|
|
222
|
-
xGroupCaptions:
|
|
223
|
-
yGroupCaptions:
|
|
224
|
-
xAxisCaptions:
|
|
225
|
-
yAxisCaptions:
|
|
223
|
+
xGroupCaptions: M(_, this.labelAngles.xGroupLabels),
|
|
224
|
+
yGroupCaptions: M(v, this.labelAngles.yGroupLabels),
|
|
225
|
+
xAxisCaptions: M(m, this.labelAngles.xAxisLabels),
|
|
226
|
+
yAxisCaptions: M(h, this.labelAngles.yAxisLabels)
|
|
226
227
|
};
|
|
227
228
|
}
|
|
228
|
-
updateChartDimensions(e, t, n, r, i,
|
|
229
|
-
let
|
|
230
|
-
this.columnsCount = i.nRows ? Math.ceil(
|
|
229
|
+
updateChartDimensions(e, t, n, r, i, a, c, l, f, p) {
|
|
230
|
+
let m = t.length, g = Math.min(i.nRows ?? m, m), _ = Math.min(i.nCols ?? m, m);
|
|
231
|
+
this.columnsCount = i.nRows ? Math.ceil(m / g) : _, this.rowsCount = Math.ceil(m / this.columnsCount);
|
|
231
232
|
let { sharedX: v, sharedY: y } = i;
|
|
232
233
|
this.chartsDimensions = {};
|
|
233
234
|
let b = 0, x = 0;
|
|
234
|
-
t.forEach((i,
|
|
235
|
-
let g =
|
|
235
|
+
t.forEach((i, m) => {
|
|
236
|
+
let g = m % this.columnsCount + 1, _ = o(m, t.length, this.columnsCount, this.rowsCount), S = this.step.x[i], C = this.step.y[i], w = u(a, c, this.captionsSizes, l, f, p, _, v, y, t, n, r, S, C), T = h(l, _, v, y);
|
|
236
237
|
function E(t) {
|
|
237
|
-
return Math.max(
|
|
238
|
+
return Math.max(s[t].reduce((e, n) => e + w[t][n], 0), T[t], e.innerOffset);
|
|
238
239
|
}
|
|
239
240
|
let D = {
|
|
240
241
|
left: E("left"),
|
|
@@ -243,7 +244,7 @@ var M = class {
|
|
|
243
244
|
bottom: E("bottom")
|
|
244
245
|
};
|
|
245
246
|
D.left < this.captionsSizes.xCaptionTail && (D.left = this.captionsSizes.xCaptionTail), D.bottom < this.captionsSizes.yCaptionTail && (D.bottom = this.captionsSizes.yCaptionTail);
|
|
246
|
-
let O =
|
|
247
|
+
let O = d(w, this.chartSizes.chartWidth, this.chartSizes.chartHeight), k = this.chartSizes.chartWidth + D.left + D.right, A = this.chartSizes.chartHeight + D.top + D.bottom;
|
|
247
248
|
this.chartsDimensions[i] = {
|
|
248
249
|
left: b,
|
|
249
250
|
top: x,
|
|
@@ -264,23 +265,16 @@ var M = class {
|
|
|
264
265
|
this.chartSizes.chartsWidth = S, this.chartSizes.chartsHeight = C;
|
|
265
266
|
}
|
|
266
267
|
updateChartsSizes(e, t, n) {
|
|
267
|
-
let {
|
|
268
|
-
|
|
269
|
-
let e = t.facets[s].xKeys.length, r = t.meta.xGroupKeys.filter((e) => (t.facets[s]?.xKeysByGroups[e]?.length ?? 0) > 0).length;
|
|
270
|
-
this.chartSizes.chartWidth = e * a + n * (r - 1);
|
|
271
|
-
} else this.chartSizes.chartWidth = r;
|
|
272
|
-
if (o && s) {
|
|
273
|
-
let e = t.facets[s].yKeys.length, r = t.meta.yGroupKeys.filter((e) => (t.facets[s]?.yKeysByGroups[e]?.length ?? 0) > 0).length;
|
|
274
|
-
this.chartSizes.chartHeight = e * o + n * (r - 1);
|
|
275
|
-
} else this.chartSizes.chartHeight = i;
|
|
268
|
+
let { chartWidth: r, chartHeight: i } = a(e, t.meta, n);
|
|
269
|
+
this.chartSizes.chartWidth = r, this.chartSizes.chartHeight = i;
|
|
276
270
|
}
|
|
277
271
|
updateScales(e, t, n, r, i) {
|
|
278
272
|
let { width: a, height: o, cellWidth: s, cellHeight: c } = i, { meta: l, facets: u } = t, { sharedX: d, sharedY: f } = r;
|
|
279
273
|
e.forEach((e) => {
|
|
280
|
-
let t = u[e], r = l.xGroupKeys, i = l.yGroupKeys, { xKeysByGroups: p } = d ? l : t, { yKeysByGroups: m } = f ? l : t, h = r.map((e) => p[e].length), g = i.map((e) => m[e].length), _ = h.reduce((e, t) => e + t, 0), v = g.reduce((e, t) => e + t, 0),
|
|
274
|
+
let t = u[e], r = l.xGroupKeys, i = l.yGroupKeys, { xKeysByGroups: p } = d ? l : t, { yKeysByGroups: m } = f ? l : t, h = r.map((e) => p[e].length), g = i.map((e) => m[e].length), _ = h.reduce((e, t) => e + t, 0), v = g.reduce((e, t) => e + t, 0), y = s || (a - (h.filter((e) => e > 0).length - 1) * n) / _, x = c || (o - (g.filter((e) => e > 0).length - 1) * n) / v, S = [], C = [], w = 0, T = r.map((e) => p[e]);
|
|
281
275
|
T.forEach((e, t) => {
|
|
282
276
|
C = C.concat(e), e.forEach(() => {
|
|
283
|
-
S.push(w), w +=
|
|
277
|
+
S.push(w), w += y;
|
|
284
278
|
});
|
|
285
279
|
let r = T.slice(t + 1).some((e) => e.length > 0);
|
|
286
280
|
e.length > 0 && r && (w += n);
|
|
@@ -292,31 +286,31 @@ var M = class {
|
|
|
292
286
|
});
|
|
293
287
|
let r = k.slice(t + 1).some((e) => e.length > 0);
|
|
294
288
|
e.length > 0 && r && (O += n);
|
|
295
|
-
}), this.scales.x[e] =
|
|
289
|
+
}), this.scales.x[e] = b().domain(C).range(S), this.scales.y[e] = b().domain(D).range(E), this.step.x[e] = y, this.step.y[e] = x;
|
|
296
290
|
});
|
|
297
291
|
}
|
|
298
292
|
updateAesScale(e, t, n, r, i, a, o) {
|
|
299
|
-
if (e === "continuous") n.valueColors ? this.colorScale =
|
|
293
|
+
if (e === "continuous") n.valueColors ? this.colorScale = y().domain(n.valuesByColors ?? A(o, n.valueColors.length, t)).range(n.valueColors) : n.colorsList && (this.colorScale = y().domain(A(o, n.colorsList.length, t)).range(n.colorsList));
|
|
300
294
|
else if (n.colorsMap) {
|
|
301
295
|
let e = Object.entries(n.colorsMap);
|
|
302
|
-
this.colorScale =
|
|
303
|
-
} else n.colorsList && (this.colorScale =
|
|
296
|
+
this.colorScale = b().domain(e.map((e) => e[0])).range(e.map((e) => e[1])).unknown("#ccc");
|
|
297
|
+
} else n.colorsList && (this.colorScale = p(n.colorsList, a.map(String)));
|
|
304
298
|
let { xDataByKeys: s, yDataByKeys: c } = i.meta;
|
|
305
299
|
r.forEach((e) => {
|
|
306
300
|
let { colors: t, type: n, axis: r, valueColumn: i } = e, a = (r === "x" ? s : c)[i.valueLabels ?? i.value];
|
|
307
301
|
if (n === "discrete") {
|
|
308
|
-
let n =
|
|
302
|
+
let n = _.uniq(Object.values(a).map(String)).sort();
|
|
309
303
|
this.annotationColorScales[e.id] = {
|
|
310
304
|
type: "discrete",
|
|
311
|
-
scale:
|
|
305
|
+
scale: m(t, n)
|
|
312
306
|
};
|
|
313
307
|
} else {
|
|
314
308
|
let n = Object.values(a).map(Number);
|
|
315
309
|
if (!n.length) return;
|
|
316
|
-
let [r = n[0], i = n[0]] =
|
|
310
|
+
let [r = n[0], i = n[0]] = w(n);
|
|
317
311
|
this.annotationColorScales[e.id] = {
|
|
318
312
|
type: "continuous",
|
|
319
|
-
scale:
|
|
313
|
+
scale: f(t, r, i, 0, .5, 1)
|
|
320
314
|
};
|
|
321
315
|
}
|
|
322
316
|
});
|
|
@@ -340,9 +334,9 @@ var M = class {
|
|
|
340
334
|
let o = n[i];
|
|
341
335
|
if (!o) return t;
|
|
342
336
|
let c = s[i];
|
|
343
|
-
|
|
337
|
+
v().separation(() => 1).size([o.leaves().length * this.step.x[e], a.size])(o);
|
|
344
338
|
let l = o;
|
|
345
|
-
return
|
|
339
|
+
return D(l, y().domain(a.position === "top" ? [0, r] : [r, 0]).range([a.size, 0]), "y"), O(l, this.scales.x[e](c[0]), "x"), t[i] = l, t;
|
|
346
340
|
}, {}), this.dendrograms[e].x.data = a;
|
|
347
341
|
}
|
|
348
342
|
if (o) {
|
|
@@ -351,9 +345,9 @@ var M = class {
|
|
|
351
345
|
let a = t[i];
|
|
352
346
|
if (!a) return n;
|
|
353
347
|
let s = c[i];
|
|
354
|
-
|
|
355
|
-
let l = a, u =
|
|
356
|
-
return
|
|
348
|
+
v().separation(() => 1).size([a.leaves().length * this.step.y[e], o.size])(a);
|
|
349
|
+
let l = a, u = y().domain(o.position === "left" ? [0, r] : [r, 0]).range([o.size, 0]);
|
|
350
|
+
return O(l, this.scales.y[e](s[0]), "x", "y"), D(l, u, "x"), n[i] = l, n;
|
|
357
351
|
}, {}), this.dendrograms[e].y.data = o;
|
|
358
352
|
}
|
|
359
353
|
});
|
|
@@ -361,18 +355,18 @@ var M = class {
|
|
|
361
355
|
updateDendrogramAesScales(e) {
|
|
362
356
|
e && (this.dendrogramAesScales = Object.keys(e).reduce((t, n) => {
|
|
363
357
|
let r = e[n], i = Object.keys(r);
|
|
364
|
-
return t[n] =
|
|
365
|
-
...
|
|
358
|
+
return t[n] = b().domain(i).range(i.map((e) => ({
|
|
359
|
+
...c,
|
|
366
360
|
...r[e]
|
|
367
|
-
}))).unknown(
|
|
361
|
+
}))).unknown(c), t;
|
|
368
362
|
}, {}));
|
|
369
363
|
}
|
|
370
|
-
render(e, t, n, i, a, o, s,
|
|
371
|
-
let { meta: v, facets: y } = o, { facetKeys: b, xGroupKeys: x, yGroupKeys:
|
|
372
|
-
this.updateChartsSizes(O, o, a.groupGap), this.updateAesScale(k, w.dataSource, a, s, o, m, h), this.updateScales(b, o, a.groupGap, i, O), this.updateCaptionsSize(o, T, E, i), this.updateChartDimensions(O, b, x,
|
|
373
|
-
let A = /* @__PURE__ */
|
|
364
|
+
render(e, t, n, i, a, o, s, c, u, d, f, p, m, h, g, _) {
|
|
365
|
+
let { meta: v, facets: y } = o, { facetKeys: b, xGroupKeys: x, yGroupKeys: S, valueExtent: w } = v, { xAxis: T, yAxis: E, title: D, size: O, valueType: k } = n;
|
|
366
|
+
this.updateChartsSizes(O, o, a.groupGap), this.updateAesScale(k, w.dataSource, a, s, o, m, h), this.updateScales(b, o, a.groupGap, i, O), this.updateCaptionsSize(o, T, E, i), this.updateChartDimensions(O, b, x, S, i, T, E, s, u, d), this.updateLegendSize(k, n.legend, s, c, w.dataSource), this.updateMargins(D, O), this.updateDendrogram(b, x, S, y, f, u, d), this.updateDendrogramAesScales(p);
|
|
367
|
+
let A = /* @__PURE__ */ C(r, {
|
|
374
368
|
dataFrame: e,
|
|
375
|
-
children: /* @__PURE__ */
|
|
369
|
+
children: /* @__PURE__ */ C(l, {
|
|
376
370
|
aes: a,
|
|
377
371
|
annotations: s,
|
|
378
372
|
annotationColorScales: this.annotationColorScales,
|
|
@@ -395,7 +389,7 @@ var M = class {
|
|
|
395
389
|
settingsId: t,
|
|
396
390
|
step: this.step,
|
|
397
391
|
xGroupKeys: x,
|
|
398
|
-
yGroupKeys:
|
|
392
|
+
yGroupKeys: S,
|
|
399
393
|
onTooltipHintSwitch: g,
|
|
400
394
|
cellsRenderingMode: _
|
|
401
395
|
})
|
|
@@ -403,9 +397,9 @@ var M = class {
|
|
|
403
397
|
this.component = A, this.reactRoot?.render(A);
|
|
404
398
|
}
|
|
405
399
|
renderError(t) {
|
|
406
|
-
this.reactRoot?.render(/* @__PURE__ */
|
|
400
|
+
this.reactRoot?.render(/* @__PURE__ */ C(e, { message: t }));
|
|
407
401
|
}
|
|
408
402
|
};
|
|
409
|
-
export {
|
|
403
|
+
export { N as default };
|
|
410
404
|
|
|
411
405
|
//# sourceMappingURL=ChartRenderer.js.map
|