@milaboratories/miplots4 1.0.177 → 1.0.179

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/dist/DataFrame.d.ts +1 -0
  2. package/dist/DataFrame.d.ts.map +1 -1
  3. package/dist/DataFrame.js.map +1 -1
  4. package/dist/bubble/BubbleSettingsImpl.d.ts +2 -0
  5. package/dist/bubble/BubbleSettingsImpl.d.ts.map +1 -1
  6. package/dist/bubble/BubbleSettingsImpl.js +3 -1
  7. package/dist/bubble/BubbleSettingsImpl.js.map +1 -1
  8. package/dist/bubble/getGroupedCellsData.d.ts +1 -1
  9. package/dist/bubble/getGroupedCellsData.d.ts.map +1 -1
  10. package/dist/bubble/getGroupedCellsData.js +30 -10
  11. package/dist/bubble/getGroupedCellsData.js.map +1 -1
  12. package/dist/bubble/index.d.ts.map +1 -1
  13. package/dist/bubble/index.js +3 -3
  14. package/dist/bubble/index.js.map +1 -1
  15. package/dist/heatmap/ChartRenderer.d.ts.map +1 -1
  16. package/dist/heatmap/ChartRenderer.js +26 -20
  17. package/dist/heatmap/ChartRenderer.js.map +1 -1
  18. package/dist/heatmap/HeatmapSettingsImpl.d.ts +2 -0
  19. package/dist/heatmap/HeatmapSettingsImpl.d.ts.map +1 -1
  20. package/dist/heatmap/HeatmapSettingsImpl.js +3 -1
  21. package/dist/heatmap/HeatmapSettingsImpl.js.map +1 -1
  22. package/dist/heatmap/fillCellsData.d.ts +22 -2
  23. package/dist/heatmap/fillCellsData.d.ts.map +1 -1
  24. package/dist/heatmap/fillCellsData.js +60 -47
  25. package/dist/heatmap/fillCellsData.js.map +1 -1
  26. package/dist/heatmap/getCells.d.ts +22 -1
  27. package/dist/heatmap/getCells.d.ts.map +1 -1
  28. package/dist/heatmap/getCells.js +23 -3
  29. package/dist/heatmap/getCells.js.map +1 -1
  30. package/dist/heatmap/getDendrograms.d.ts +5 -1
  31. package/dist/heatmap/getDendrograms.d.ts.map +1 -1
  32. package/dist/heatmap/getDendrograms.js +33 -11
  33. package/dist/heatmap/getDendrograms.js.map +1 -1
  34. package/dist/heatmap/index.d.ts.map +1 -1
  35. package/dist/heatmap/index.js +30 -6
  36. package/dist/heatmap/index.js.map +1 -1
  37. package/dist/types/bubble.d.ts +6 -0
  38. package/dist/types/bubble.d.ts.map +1 -1
  39. package/dist/types/bubble.js +3 -1
  40. package/dist/types/bubble.js.map +1 -1
  41. package/dist/types/heatmap.d.ts +6 -0
  42. package/dist/types/heatmap.d.ts.map +1 -1
  43. package/dist/types/heatmap.js +2 -0
  44. package/dist/types/heatmap.js.map +1 -1
  45. package/package.json +1 -1
@@ -3,6 +3,7 @@ export type DataByColumns = {
3
3
  type: 'columns';
4
4
  values: Record<string, DataValue[]>;
5
5
  id: string;
6
+ overflow?: boolean;
6
7
  };
7
8
  export type DataSet = DataFrame | DataByColumns;
8
9
  export declare const NO_GROUPED: unique symbol;
@@ -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,CAAA;CACb,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;IAQzD,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"}
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;IAQzD,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"}
@@ -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}\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(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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"}
@@ -29,6 +29,8 @@ export declare class BubbleSettingsImpl implements SettingsInterface {
29
29
  method: AggregationMethod;
30
30
  };
31
31
  readonly NAValueAs: number | null;
32
+ readonly showEmptyRows: boolean;
33
+ readonly showEmptyColumns: boolean;
32
34
  readonly keysOrder: Record<string, string[]>;
33
35
  readonly chartSettings: {
34
36
  readonly size: {
@@ -1 +1 @@
1
- {"version":3,"file":"BubbleSettingsImpl.d.ts","sourceRoot":"","sources":["../../src/bubble/BubbleSettingsImpl.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"BubbleSettingsImpl.d.ts","sourceRoot":"","sources":["../../src/bubble/BubbleSettingsImpl.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACR,iBAAiB,EACjB,cAAc,EACd,UAAU,EACV,SAAS,EACT,cAAc,EACd,sBAAsB,EACtB,mBAAmB,EACnB,iBAAiB,EACjB,aAAa,EAChB,MAAM,UAAU,CAAC;AAGlB,qBAAa,kBAAmB,YAAW,iBAAiB;IACxD,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,YAAY;IACzB,QAAQ,CAAC,aAAa,EAAE;QACpB,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;QACvB,OAAO,EAAE,OAAO,CAAC;QACjB,OAAO,EAAE,OAAO,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,aAAa,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;KAC9C,CAAC;IACF,QAAQ,CAAC,eAAe,EAAE,UAAU,CAAC;IACrC,QAAQ,CAAC,gBAAgB,EAAE,UAAU,CAAC;IACtC,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,UAAU,EAAE,CAAC;IAChC,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,UAAU,EAAE,CAAC;IAChC,QAAQ,CAAC,OAAO,EAAE,UAAU,EAAE,CAAC;IAC/B,QAAQ,CAAC,aAAa,EAAE;QACpB,SAAS,EAAE,sBAAsB,CAAC;QAClC,MAAM,EAAE,mBAAmB,CAAC;QAC5B,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;QACtB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;KACxB,GAAG,IAAI,CAAC;IACT,QAAQ,CAAC,WAAW,EAAE;QAClB,CAAC,EAAE,OAAO,CAAC;QACX,CAAC,EAAE,OAAO,CAAC;QACX,MAAM,EAAE,iBAAiB,CAAC;KAC7B,CAAC;IACF,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC;IACnC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAC7C,QAAQ,CAAC,aAAa,EAAE;QACpB,QAAQ,CAAC,IAAI,EAAE;YAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;YAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;YAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;SAAE,CAAC;QACxF,QAAQ,CAAC,KAAK,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,OAAO,CAAC;YAAC,QAAQ,EAAE,aAAa,CAAA;SAAE,CAAC;QACzE,QAAQ,CAAC,KAAK,EAAE;YACZ,KAAK,EAAE,MAAM,CAAC;YACd,SAAS,EAAE,OAAO,CAAC;YACnB,SAAS,EAAE,OAAO,CAAC;YACnB,cAAc,EAAE,OAAO,CAAC;YACxB,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;YAC3B,eAAe,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;YAC7B,OAAO,EAAE,KAAK,GAAG,MAAM,CAAC;SAC3B,CAAC;QACF,QAAQ,CAAC,KAAK,EAAE;YACZ,KAAK,EAAE,MAAM,CAAC;YACd,SAAS,EAAE,OAAO,CAAC;YACnB,SAAS,EAAE,OAAO,CAAC;YACnB,cAAc,EAAE,OAAO,CAAC;YACxB,QAAQ,EAAE,QAAQ,GAAG,KAAK,CAAC;YAC3B,eAAe,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;YAC7B,OAAO,EAAE,KAAK,GAAG,MAAM,CAAC;SAC3B,CAAC;QACF,QAAQ,CAAC,KAAK,EAAE;YAAE,IAAI,EAAE,SAAS,CAAA;SAAE,CAAC;QACpC,QAAQ,CAAC,MAAM,EAAE;YAAE,IAAI,EAAE,OAAO,CAAC;YAAC,QAAQ,EAAE,cAAc,CAAA;SAAE,CAAC;QAC7D,QAAQ,CAAC,QAAQ,EAAE;YAAE,IAAI,EAAE,OAAO,CAAC;YAAC,OAAO,CAAC,EAAE,UAAU,EAAE,CAAA;SAAE,CAAC;KAChE,CAAC;IACF,QAAQ,CAAC,GAAG,EAAE;QACV,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,MAAM,EAAE,CAAC;QACrB,eAAe,EAAE,MAAM,CAAC;QACxB,cAAc,EAAE,MAAM,CAAC;KAC1B,CAAC;gBAEU,QAAQ,EAAE,cAAc;CA2EvC"}
@@ -16,6 +16,8 @@ var n = class {
16
16
  normalization;
17
17
  aggregation;
18
18
  NAValueAs;
19
+ showEmptyRows;
20
+ showEmptyColumns;
19
21
  keysOrder;
20
22
  chartSettings;
21
23
  aes;
@@ -26,7 +28,7 @@ var n = class {
26
28
  titlePosition: "left",
27
29
  order: n.facetSettings?.order ?? null,
28
30
  ...n.facetSettings
29
- }, this.facetBy = n.facetBy ?? [], this.valueColumnSize = n.valueSize, this.valueColumnColor = n.valueColor, this.xColumn = n.xColumn, this.xGroupBy = n.xGroupBy ?? [], this.yColumn = n.yColumn, this.yGroupBy = n.yGroupBy ?? [], this.NAValueAs = n.NAValueAs ?? null, this.keysOrder = n.keysOrder ?? {}, this.normalization = n.normalization ?? null;
31
+ }, this.facetBy = n.facetBy ?? [], this.valueColumnSize = n.valueSize, this.valueColumnColor = n.valueColor, this.xColumn = n.xColumn, this.xGroupBy = n.xGroupBy ?? [], this.yColumn = n.yColumn, this.yGroupBy = n.yGroupBy ?? [], this.NAValueAs = n.NAValueAs ?? null, this.showEmptyRows = n.showEmptyRows ?? !1, this.showEmptyColumns = n.showEmptyColumns ?? !1, this.keysOrder = n.keysOrder ?? {}, this.normalization = n.normalization ?? null;
30
32
  let r = n.size?.cellSize ?? null;
31
33
  this.chartSettings = {
32
34
  size: {
@@ -1 +1 @@
1
- {"version":3,"file":"BubbleSettingsImpl.js","names":[],"sources":["../../src/bubble/BubbleSettingsImpl.ts"],"sourcesContent":["import { BLACK, DEFAULT_HEIGHT, DEFAULT_HEIGHT_SMALL, DEFAULT_WIDTH, DEFAULT_WIDTH_SMALL } from '../constants';\nimport { BubblesSettingsSchema } from '../types';\nimport type {\n AggregationMethod,\n BubbleSettings,\n ColumnName,\n FrameType,\n LegendPosition,\n NormalizationDirection,\n NormalizationMethod,\n SettingsInterface,\n TitlePosition,\n} from '../types';\nimport lodash from 'lodash';\n\nexport class BubbleSettingsImpl implements SettingsInterface {\n readonly id: string;\n readonly type = 'bubble';\n readonly facetSettings: {\n order: string[] | null;\n sharedX: boolean;\n sharedY: boolean;\n nRows?: number;\n nCols?: number;\n titlePosition: 'left' | 'center' | 'right';\n };\n readonly valueColumnSize: ColumnName;\n readonly valueColumnColor: ColumnName;\n readonly xColumn: ColumnName;\n readonly xGroupBy: ColumnName[];\n readonly yColumn: ColumnName;\n readonly yGroupBy: ColumnName[];\n readonly facetBy: ColumnName[];\n readonly normalization: {\n direction: NormalizationDirection;\n method: NormalizationMethod;\n colorRange?: number[];\n sizeRange?: number[];\n } | null;\n readonly aggregation: {\n x: boolean;\n y: boolean;\n method: AggregationMethod;\n };\n readonly NAValueAs: number | null;\n readonly keysOrder: Record<string, string[]>;\n readonly chartSettings: {\n readonly size: { width: number | null; height: number | null, cellSize: number | null };\n readonly title: { name: string; show: boolean; position: TitlePosition };\n readonly yAxis: {\n title: string;\n showTicks: boolean;\n showTitle: boolean;\n showAxisLabels: boolean;\n position: 'left' | 'right';\n axisLabelsAngle: 0 | 45 | 90;\n sorting: 'asc' | 'desc';\n };\n readonly xAxis: {\n title: string;\n showTicks: boolean;\n showTitle: boolean;\n showAxisLabels: boolean;\n position: 'bottom' | 'top';\n axisLabelsAngle: 0 | 45 | 90;\n sorting: 'asc' | 'desc';\n };\n readonly frame: { type: FrameType };\n readonly legend: { show: boolean; position: LegendPosition };\n readonly tooltips: { show: boolean; content?: ColumnName[] };\n };\n readonly aes: {\n minRadius: number;\n maxRadius: number;\n colorsList: string[];\n cellStrokeColor: string;\n emptyCellColor: string;\n };\n\n constructor(settings: BubbleSettings) {\n BubblesSettingsSchema.parse(settings);\n this.id = lodash.uniqueId('settings');\n this.facetSettings = { sharedX: true, sharedY: true, titlePosition: 'left', order: settings.facetSettings?.order ?? null, ...settings.facetSettings };\n this.facetBy = settings.facetBy ?? [];\n this.valueColumnSize = settings.valueSize;\n this.valueColumnColor = settings.valueColor;\n this.xColumn = settings.xColumn;\n this.xGroupBy = settings.xGroupBy ?? [];\n this.yColumn = settings.yColumn;\n this.yGroupBy = settings.yGroupBy ?? [];\n this.NAValueAs = settings.NAValueAs ?? null;\n this.keysOrder = settings.keysOrder ?? {};\n this.normalization = settings.normalization ?? null;\n\n const cellSize = settings.size?.cellSize ?? null;\n const width = cellSize ? null : settings?.size?.width ?? (this.facetBy.length ? DEFAULT_WIDTH_SMALL : DEFAULT_WIDTH);\n const height = cellSize ? null : settings?.size?.height ?? (this.facetBy.length ? DEFAULT_HEIGHT_SMALL : DEFAULT_HEIGHT);\n this.chartSettings = {\n size: { width, height, cellSize },\n title: {\n position: 'center',\n show: true,\n ...settings.title,\n name: settings.title?.name ?? 'Chart',\n },\n yAxis: {\n title: settings.yColumn.label ?? settings.yColumn.value,\n showTicks: true,\n showTitle: true,\n showAxisLabels: true,\n position: 'left',\n axisLabelsAngle: 90,\n sorting: 'asc',\n ...settings.yAxis,\n },\n xAxis: {\n title: settings.xColumn.label ?? settings.xColumn.value,\n showTicks: true,\n showTitle: true,\n showAxisLabels: true,\n position: 'bottom',\n axisLabelsAngle: 90,\n sorting: 'asc',\n ...settings.xAxis,\n },\n frame: { type: settings.frame?.type ?? 'full' },\n legend: {\n show: true,\n position: 'right',\n ...settings.legend,\n },\n tooltips: {\n show: true,\n ...settings.tooltips,\n },\n };\n\n this.aggregation = {\n x: false,\n y: false,\n method: 'min',\n ...settings.aggregation\n };\n\n this.aes = {\n minRadius: settings.aes?.minRadius ?? 3,\n maxRadius: settings.aes?.maxRadius ?? 20,\n colorsList: settings.aes?.colorsList ?? ['black', 'white', 'red'],\n cellStrokeColor: settings.aes?.cellStrokeColor ?? BLACK,\n emptyCellColor: settings.aes?.emptyCellColor ?? 'white',\n };\n }\n}\n"],"mappings":";;;;AAeA,IAAa,IAAb,MAA6D;CACzD;CACA,OAAgB;CAChB;CAQA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CAMA;CAKA;CACA;CACA;CAyBA;CAQA,YAAY,GAA0B;AAalC,EAZA,EAAsB,MAAM,EAAS,EACrC,KAAK,KAAK,EAAO,SAAS,WAAW,EACrC,KAAK,gBAAgB;GAAE,SAAS;GAAM,SAAS;GAAM,eAAe;GAAQ,OAAO,EAAS,eAAe,SAAS;GAAM,GAAG,EAAS;GAAe,EACrJ,KAAK,UAAU,EAAS,WAAW,EAAE,EACrC,KAAK,kBAAkB,EAAS,WAChC,KAAK,mBAAmB,EAAS,YACjC,KAAK,UAAU,EAAS,SACxB,KAAK,WAAW,EAAS,YAAY,EAAE,EACvC,KAAK,UAAU,EAAS,SACxB,KAAK,WAAW,EAAS,YAAY,EAAE,EACvC,KAAK,YAAY,EAAS,aAAa,MACvC,KAAK,YAAY,EAAS,aAAa,EAAE,EACzC,KAAK,gBAAgB,EAAS,iBAAiB;EAE/C,IAAM,IAAW,EAAS,MAAM,YAAY;AAkD5C,EA/CA,KAAK,gBAAgB;GACjB,MAAM;IAAE,OAHE,IAAW,OAAO,GAAU,MAAM,UAAU,KAAK,QAAQ,SAAA,MAAA;IAGpD,QAFJ,IAAW,OAAO,GAAU,MAAM,WAAW,KAAK,QAAQ,SAAA,MAAA;IAE9C;IAAU;GACjC,OAAO;IACH,UAAU;IACV,MAAM;IACN,GAAG,EAAS;IACZ,MAAM,EAAS,OAAO,QAAQ;IACjC;GACD,OAAO;IACH,OAAO,EAAS,QAAQ,SAAS,EAAS,QAAQ;IAClD,WAAW;IACX,WAAW;IACX,gBAAgB;IAChB,UAAU;IACV,iBAAiB;IACjB,SAAS;IACT,GAAG,EAAS;IACf;GACD,OAAO;IACH,OAAO,EAAS,QAAQ,SAAS,EAAS,QAAQ;IAClD,WAAW;IACX,WAAW;IACX,gBAAgB;IAChB,UAAU;IACV,iBAAiB;IACjB,SAAS;IACT,GAAG,EAAS;IACf;GACD,OAAO,EAAE,MAAM,EAAS,OAAO,QAAQ,QAAQ;GAC/C,QAAQ;IACJ,MAAM;IACN,UAAU;IACV,GAAG,EAAS;IACf;GACD,UAAU;IACN,MAAM;IACN,GAAG,EAAS;IACf;GACJ,EAED,KAAK,cAAc;GACf,GAAG;GACH,GAAG;GACH,QAAQ;GACR,GAAG,EAAS;GACf,EAED,KAAK,MAAM;GACP,WAAW,EAAS,KAAK,aAAa;GACtC,WAAW,EAAS,KAAK,aAAa;GACtC,YAAY,EAAS,KAAK,cAAc;IAAC;IAAS;IAAS;IAAM;GACjE,iBAAiB,EAAS,KAAK,mBAAA;GAC/B,gBAAgB,EAAS,KAAK,kBAAkB;GACnD"}
1
+ {"version":3,"file":"BubbleSettingsImpl.js","names":[],"sources":["../../src/bubble/BubbleSettingsImpl.ts"],"sourcesContent":["import { BLACK, DEFAULT_HEIGHT, DEFAULT_HEIGHT_SMALL, DEFAULT_WIDTH, DEFAULT_WIDTH_SMALL } from '../constants';\nimport { BubblesSettingsSchema } from '../types';\nimport type {\n AggregationMethod,\n BubbleSettings,\n ColumnName,\n FrameType,\n LegendPosition,\n NormalizationDirection,\n NormalizationMethod,\n SettingsInterface,\n TitlePosition,\n} from '../types';\nimport lodash from 'lodash';\n\nexport class BubbleSettingsImpl implements SettingsInterface {\n readonly id: string;\n readonly type = 'bubble';\n readonly facetSettings: {\n order: string[] | null;\n sharedX: boolean;\n sharedY: boolean;\n nRows?: number;\n nCols?: number;\n titlePosition: 'left' | 'center' | 'right';\n };\n readonly valueColumnSize: ColumnName;\n readonly valueColumnColor: ColumnName;\n readonly xColumn: ColumnName;\n readonly xGroupBy: ColumnName[];\n readonly yColumn: ColumnName;\n readonly yGroupBy: ColumnName[];\n readonly facetBy: ColumnName[];\n readonly normalization: {\n direction: NormalizationDirection;\n method: NormalizationMethod;\n colorRange?: number[];\n sizeRange?: number[];\n } | null;\n readonly aggregation: {\n x: boolean;\n y: boolean;\n method: AggregationMethod;\n };\n readonly NAValueAs: number | null;\n readonly showEmptyRows: boolean;\n readonly showEmptyColumns: boolean;\n readonly keysOrder: Record<string, string[]>;\n readonly chartSettings: {\n readonly size: { width: number | null; height: number | null, cellSize: number | null };\n readonly title: { name: string; show: boolean; position: TitlePosition };\n readonly yAxis: {\n title: string;\n showTicks: boolean;\n showTitle: boolean;\n showAxisLabels: boolean;\n position: 'left' | 'right';\n axisLabelsAngle: 0 | 45 | 90;\n sorting: 'asc' | 'desc';\n };\n readonly xAxis: {\n title: string;\n showTicks: boolean;\n showTitle: boolean;\n showAxisLabels: boolean;\n position: 'bottom' | 'top';\n axisLabelsAngle: 0 | 45 | 90;\n sorting: 'asc' | 'desc';\n };\n readonly frame: { type: FrameType };\n readonly legend: { show: boolean; position: LegendPosition };\n readonly tooltips: { show: boolean; content?: ColumnName[] };\n };\n readonly aes: {\n minRadius: number;\n maxRadius: number;\n colorsList: string[];\n cellStrokeColor: string;\n emptyCellColor: string;\n };\n\n constructor(settings: BubbleSettings) {\n BubblesSettingsSchema.parse(settings);\n this.id = lodash.uniqueId('settings');\n this.facetSettings = { sharedX: true, sharedY: true, titlePosition: 'left', order: settings.facetSettings?.order ?? null, ...settings.facetSettings };\n this.facetBy = settings.facetBy ?? [];\n this.valueColumnSize = settings.valueSize;\n this.valueColumnColor = settings.valueColor;\n this.xColumn = settings.xColumn;\n this.xGroupBy = settings.xGroupBy ?? [];\n this.yColumn = settings.yColumn;\n this.yGroupBy = settings.yGroupBy ?? [];\n this.NAValueAs = settings.NAValueAs ?? null;\n this.showEmptyRows = settings.showEmptyRows ?? false;\n this.showEmptyColumns = settings.showEmptyColumns ?? false;\n this.keysOrder = settings.keysOrder ?? {};\n this.normalization = settings.normalization ?? null;\n\n const cellSize = settings.size?.cellSize ?? null;\n const width = cellSize ? null : settings?.size?.width ?? (this.facetBy.length ? DEFAULT_WIDTH_SMALL : DEFAULT_WIDTH);\n const height = cellSize ? null : settings?.size?.height ?? (this.facetBy.length ? DEFAULT_HEIGHT_SMALL : DEFAULT_HEIGHT);\n this.chartSettings = {\n size: { width, height, cellSize },\n title: {\n position: 'center',\n show: true,\n ...settings.title,\n name: settings.title?.name ?? 'Chart',\n },\n yAxis: {\n title: settings.yColumn.label ?? settings.yColumn.value,\n showTicks: true,\n showTitle: true,\n showAxisLabels: true,\n position: 'left',\n axisLabelsAngle: 90,\n sorting: 'asc',\n ...settings.yAxis,\n },\n xAxis: {\n title: settings.xColumn.label ?? settings.xColumn.value,\n showTicks: true,\n showTitle: true,\n showAxisLabels: true,\n position: 'bottom',\n axisLabelsAngle: 90,\n sorting: 'asc',\n ...settings.xAxis,\n },\n frame: { type: settings.frame?.type ?? 'full' },\n legend: {\n show: true,\n position: 'right',\n ...settings.legend,\n },\n tooltips: {\n show: true,\n ...settings.tooltips,\n },\n };\n\n this.aggregation = {\n x: false,\n y: false,\n method: 'min',\n ...settings.aggregation\n };\n\n this.aes = {\n minRadius: settings.aes?.minRadius ?? 3,\n maxRadius: settings.aes?.maxRadius ?? 20,\n colorsList: settings.aes?.colorsList ?? ['black', 'white', 'red'],\n cellStrokeColor: settings.aes?.cellStrokeColor ?? BLACK,\n emptyCellColor: settings.aes?.emptyCellColor ?? 'white',\n };\n }\n}\n"],"mappings":";;;;AAeA,IAAa,IAAb,MAA6D;CACzD;CACA,OAAgB;CAChB;CAQA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CAMA;CAKA;CACA;CACA;CACA;CACA;CAyBA;CAQA,YAAY,GAA0B;AAelC,EAdA,EAAsB,MAAM,EAAS,EACrC,KAAK,KAAK,EAAO,SAAS,WAAW,EACrC,KAAK,gBAAgB;GAAE,SAAS;GAAM,SAAS;GAAM,eAAe;GAAQ,OAAO,EAAS,eAAe,SAAS;GAAM,GAAG,EAAS;GAAe,EACrJ,KAAK,UAAU,EAAS,WAAW,EAAE,EACrC,KAAK,kBAAkB,EAAS,WAChC,KAAK,mBAAmB,EAAS,YACjC,KAAK,UAAU,EAAS,SACxB,KAAK,WAAW,EAAS,YAAY,EAAE,EACvC,KAAK,UAAU,EAAS,SACxB,KAAK,WAAW,EAAS,YAAY,EAAE,EACvC,KAAK,YAAY,EAAS,aAAa,MACvC,KAAK,gBAAgB,EAAS,iBAAiB,IAC/C,KAAK,mBAAmB,EAAS,oBAAoB,IACrD,KAAK,YAAY,EAAS,aAAa,EAAE,EACzC,KAAK,gBAAgB,EAAS,iBAAiB;EAE/C,IAAM,IAAW,EAAS,MAAM,YAAY;AAkD5C,EA/CA,KAAK,gBAAgB;GACjB,MAAM;IAAE,OAHE,IAAW,OAAO,GAAU,MAAM,UAAU,KAAK,QAAQ,SAAA,MAAA;IAGpD,QAFJ,IAAW,OAAO,GAAU,MAAM,WAAW,KAAK,QAAQ,SAAA,MAAA;IAE9C;IAAU;GACjC,OAAO;IACH,UAAU;IACV,MAAM;IACN,GAAG,EAAS;IACZ,MAAM,EAAS,OAAO,QAAQ;IACjC;GACD,OAAO;IACH,OAAO,EAAS,QAAQ,SAAS,EAAS,QAAQ;IAClD,WAAW;IACX,WAAW;IACX,gBAAgB;IAChB,UAAU;IACV,iBAAiB;IACjB,SAAS;IACT,GAAG,EAAS;IACf;GACD,OAAO;IACH,OAAO,EAAS,QAAQ,SAAS,EAAS,QAAQ;IAClD,WAAW;IACX,WAAW;IACX,gBAAgB;IAChB,UAAU;IACV,iBAAiB;IACjB,SAAS;IACT,GAAG,EAAS;IACf;GACD,OAAO,EAAE,MAAM,EAAS,OAAO,QAAQ,QAAQ;GAC/C,QAAQ;IACJ,MAAM;IACN,UAAU;IACV,GAAG,EAAS;IACf;GACD,UAAU;IACN,MAAM;IACN,GAAG,EAAS;IACf;GACJ,EAED,KAAK,cAAc;GACf,GAAG;GACH,GAAG;GACH,QAAQ;GACR,GAAG,EAAS;GACf,EAED,KAAK,MAAM;GACP,WAAW,EAAS,KAAK,aAAa;GACtC,WAAW,EAAS,KAAK,aAAa;GACtC,YAAY,EAAS,KAAK,cAAc;IAAC;IAAS;IAAS;IAAM;GACjE,iBAAiB,EAAS,KAAK,mBAAA;GAC/B,gBAAgB,EAAS,KAAK,kBAAkB;GACnD"}
@@ -5,6 +5,6 @@ import { Cell, GroupedCellsData } from '../heatmap/fillCellsData';
5
5
  type BubbleDataFields = 'sizeValue' | 'colorValue';
6
6
  export type CellBubble = Cell<BubbleDataFields>;
7
7
  export type GroupedCellsBubble = GroupedCellsData<BubbleDataFields>;
8
- export declare function getGroupedCellsData(data: DataFrame, xColumn: ColumnName, yColumn: ColumnName, valueColumnSize: ColumnName, valueColumnColor: ColumnName, facetBy: ColumnName[], xGroupBy: ColumnName[], yGroupBy: ColumnName[], facetSettings: BubbleSettingsImpl['facetSettings'], normalization: BubbleSettingsImpl['normalization'], NAValueAs: BubbleSettingsImpl['NAValueAs'], keysOrder: BubbleSettingsImpl['keysOrder'], xAxis: BubbleSettingsImpl['chartSettings']['xAxis'], yAxis: BubbleSettingsImpl['chartSettings']['yAxis'], aggregation: BubbleSettingsImpl['aggregation']): GroupedCellsBubble;
8
+ export declare function getGroupedCellsData(data: DataFrame, xColumn: ColumnName, yColumn: ColumnName, valueColumnSize: ColumnName, valueColumnColor: ColumnName, facetBy: ColumnName[], xGroupBy: ColumnName[], yGroupBy: ColumnName[], facetSettings: BubbleSettingsImpl['facetSettings'], normalization: BubbleSettingsImpl['normalization'], NAValueAs: BubbleSettingsImpl['NAValueAs'], keysOrder: BubbleSettingsImpl['keysOrder'], xAxis: BubbleSettingsImpl['chartSettings']['xAxis'], yAxis: BubbleSettingsImpl['chartSettings']['yAxis'], aggregation: BubbleSettingsImpl['aggregation'], showEmptyRows?: boolean, showEmptyColumns?: boolean): GroupedCellsBubble;
9
9
  export {};
10
10
  //# sourceMappingURL=getGroupedCellsData.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"getGroupedCellsData.d.ts","sourceRoot":"","sources":["../../src/bubble/getGroupedCellsData.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAE,KAAK,IAAI,EAAiB,KAAK,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAI3F,KAAK,gBAAgB,GAAG,WAAW,GAAC,YAAY,CAAC;AACjD,MAAM,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC;AAChD,MAAM,MAAM,kBAAkB,GAAG,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;AAoCpE,wBAAgB,mBAAmB,CAC/B,IAAI,EAAE,SAAS,EACf,OAAO,EAAE,UAAU,EACnB,OAAO,EAAE,UAAU,EACnB,eAAe,EAAE,UAAU,EAC3B,gBAAgB,EAAE,UAAU,EAC5B,OAAO,EAAE,UAAU,EAAE,EACrB,QAAQ,EAAE,UAAU,EAAE,EACtB,QAAQ,EAAE,UAAU,EAAE,EACtB,aAAa,EAAE,kBAAkB,CAAC,eAAe,CAAC,EAClD,aAAa,EAAE,kBAAkB,CAAC,eAAe,CAAC,EAClD,SAAS,EAAE,kBAAkB,CAAC,WAAW,CAAC,EAC1C,SAAS,EAAE,kBAAkB,CAAC,WAAW,CAAC,EAC1C,KAAK,EAAE,kBAAkB,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,EACnD,KAAK,EAAE,kBAAkB,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,EACnD,WAAW,EAAE,kBAAkB,CAAC,aAAa,CAAC,GAC/C,kBAAkB,CAuBpB"}
1
+ {"version":3,"file":"getGroupedCellsData.d.ts","sourceRoot":"","sources":["../../src/bubble/getGroupedCellsData.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAE,KAAK,IAAI,EAAiB,KAAK,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAI3F,KAAK,gBAAgB,GAAG,WAAW,GAAC,YAAY,CAAC;AACjD,MAAM,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC;AAChD,MAAM,MAAM,kBAAkB,GAAG,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;AAoCpE,wBAAgB,mBAAmB,CAC/B,IAAI,EAAE,SAAS,EACf,OAAO,EAAE,UAAU,EACnB,OAAO,EAAE,UAAU,EACnB,eAAe,EAAE,UAAU,EAC3B,gBAAgB,EAAE,UAAU,EAC5B,OAAO,EAAE,UAAU,EAAE,EACrB,QAAQ,EAAE,UAAU,EAAE,EACtB,QAAQ,EAAE,UAAU,EAAE,EACtB,aAAa,EAAE,kBAAkB,CAAC,eAAe,CAAC,EAClD,aAAa,EAAE,kBAAkB,CAAC,eAAe,CAAC,EAClD,SAAS,EAAE,kBAAkB,CAAC,WAAW,CAAC,EAC1C,SAAS,EAAE,kBAAkB,CAAC,WAAW,CAAC,EAC1C,KAAK,EAAE,kBAAkB,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,EACnD,KAAK,EAAE,kBAAkB,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,EACnD,WAAW,EAAE,kBAAkB,CAAC,aAAa,CAAC,EAC9C,aAAa,GAAE,OAAe,EAC9B,gBAAgB,GAAE,OAAe,GAClC,kBAAkB,CA0BpB"}
@@ -28,16 +28,36 @@ function n() {
28
28
  facets: {}
29
29
  };
30
30
  }
31
- function r(r, i, a, o, s, c, l, u, d, f, p, m, h, g, _) {
32
- let v = n();
33
- if (e(v, r, i, a, {
34
- sizeValue: o,
35
- colorValue: s
36
- }, c, l, u, d, [], null, null, {
37
- sizeValue: null,
38
- colorValue: f
39
- }, p, m, h, g, _), v.meta.xKeys.length * v.meta.yKeys.length > t) throw Error(`Too many cells for graph rendering (${v.meta.xKeys.length * v.meta.yKeys.length})`);
40
- return v;
31
+ function r(r, i, a, o, s, c, l, u, d, f, p, m, h, g, _, v = !1, y = !1) {
32
+ let b = n();
33
+ if (e(b, {
34
+ data: r,
35
+ xColumn: i,
36
+ yColumn: a,
37
+ valueColumns: {
38
+ sizeValue: o,
39
+ colorValue: s
40
+ },
41
+ facetBy: c,
42
+ xGroupBy: l,
43
+ yGroupBy: u,
44
+ facetSettings: d,
45
+ annotations: [],
46
+ dendrogramX: null,
47
+ dendrogramY: null,
48
+ normalizationBySource: {
49
+ sizeValue: null,
50
+ colorValue: f
51
+ },
52
+ NAValueAs: p,
53
+ keysOrder: m,
54
+ xAxis: h,
55
+ yAxis: g,
56
+ aggregation: _,
57
+ showEmptyRows: v,
58
+ showEmptyColumns: y
59
+ }), b.meta.xKeys.length * b.meta.yKeys.length > t) throw Error(`Too many cells for graph rendering (${b.meta.xKeys.length * b.meta.yKeys.length})`);
60
+ return b;
41
61
  }
42
62
  export { r as getGroupedCellsData };
43
63
 
@@ -1 +1 @@
1
- {"version":3,"file":"getGroupedCellsData.js","names":[],"sources":["../../src/bubble/getGroupedCellsData.ts"],"sourcesContent":["import type { DataFrame } from '../DataFrame';\nimport type { ColumnName } from '../types';\nimport type { BubbleSettingsImpl } from './BubbleSettingsImpl';\nimport { type Cell, fillCellsData, type GroupedCellsData } from '../heatmap/fillCellsData';\n\nconst MAX_RENDERED_CELLS_COUNT = 1000000;\n\ntype BubbleDataFields = 'sizeValue'|'colorValue';\nexport type CellBubble = Cell<BubbleDataFields>;\nexport type GroupedCellsBubble = GroupedCellsData<BubbleDataFields>;\n\nfunction createEmptyGroupedCells(): GroupedCellsBubble {\n return {\n meta: {\n valueSources: ['sizeValue', 'colorValue'],\n facetKeys: [],\n xGroupKeys: [],\n yGroupKeys: [],\n\n xKeys: [], // all the keys from facets\n yKeys: [], // all the keys from facets\n xKeysByGroups: {},\n yKeysByGroups: {},\n\n xLabels: {},\n yLabels: {},\n xGroupLabels: {},\n yGroupLabels: {},\n\n facetKeyValues: {},\n xGroupKeyValues: {},\n yGroupKeyValues: {},\n\n xDataByKeys: {},\n yDataByKeys: {},\n\n valueExtent: {\n sizeValue: [Infinity, -Infinity],\n colorValue: [Infinity, -Infinity]\n }\n },\n facets: {},\n };\n}\n\nexport function getGroupedCellsData(\n data: DataFrame,\n xColumn: ColumnName,\n yColumn: ColumnName,\n valueColumnSize: ColumnName,\n valueColumnColor: ColumnName,\n facetBy: ColumnName[],\n xGroupBy: ColumnName[],\n yGroupBy: ColumnName[],\n facetSettings: BubbleSettingsImpl['facetSettings'],\n normalization: BubbleSettingsImpl['normalization'],\n NAValueAs: BubbleSettingsImpl['NAValueAs'],\n keysOrder: BubbleSettingsImpl['keysOrder'],\n xAxis: BubbleSettingsImpl['chartSettings']['xAxis'],\n yAxis: BubbleSettingsImpl['chartSettings']['yAxis'],\n aggregation: BubbleSettingsImpl['aggregation'],\n): GroupedCellsBubble {\n const result: GroupedCellsBubble = createEmptyGroupedCells();\n\n fillCellsData(\n result,\n data,\n xColumn, yColumn, {sizeValue: valueColumnSize, colorValue: valueColumnColor},\n facetBy, xGroupBy, yGroupBy,\n facetSettings,\n [],\n null, null,\n {sizeValue: null, colorValue: normalization},\n NAValueAs,\n keysOrder,\n xAxis,\n yAxis,\n aggregation\n );\n\n if (result.meta.xKeys.length * result.meta.yKeys.length > MAX_RENDERED_CELLS_COUNT) {\n throw Error(`Too many cells for graph rendering (${result.meta.xKeys.length * result.meta.yKeys.length})`);\n }\n return result;\n}\n"],"mappings":";AAKA,IAAM,IAA2B;AAMjC,SAAS,IAA8C;AACnD,QAAO;EACH,MAAM;GACF,cAAc,CAAC,aAAa,aAAa;GACzC,WAAW,EAAE;GACb,YAAY,EAAE;GACd,YAAY,EAAE;GAEd,OAAO,EAAE;GACT,OAAO,EAAE;GACT,eAAe,EAAE;GACjB,eAAe,EAAE;GAEjB,SAAS,EAAE;GACX,SAAS,EAAE;GACX,cAAc,EAAE;GAChB,cAAc,EAAE;GAEhB,gBAAgB,EAAE;GAClB,iBAAiB,EAAE;GACnB,iBAAiB,EAAE;GAEnB,aAAa,EAAE;GACf,aAAa,EAAE;GAEf,aAAa;IACT,WAAW,CAAC,UAAU,UAAU;IAChC,YAAY,CAAC,UAAU,UAAU;IACpC;GACJ;EACD,QAAQ,EAAE;EACb;;AAGL,SAAgB,EACZ,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACkB;CAClB,IAAM,IAA6B,GAAyB;AAkB5D,KAhBA,EACI,GACA,GACA,GAAS,GAAS;EAAC,WAAW;EAAiB,YAAY;EAAiB,EAC5E,GAAS,GAAU,GACnB,GACA,EAAE,EACF,MAAM,MACN;EAAC,WAAW;EAAM,YAAY;EAAc,EAC5C,GACA,GACA,GACA,GACA,EACH,EAEG,EAAO,KAAK,MAAM,SAAS,EAAO,KAAK,MAAM,SAAS,EACtD,OAAM,MAAM,uCAAuC,EAAO,KAAK,MAAM,SAAS,EAAO,KAAK,MAAM,OAAO,GAAG;AAE9G,QAAO"}
1
+ {"version":3,"file":"getGroupedCellsData.js","names":[],"sources":["../../src/bubble/getGroupedCellsData.ts"],"sourcesContent":["import type { DataFrame } from '../DataFrame';\nimport type { ColumnName } from '../types';\nimport type { BubbleSettingsImpl } from './BubbleSettingsImpl';\nimport { type Cell, fillCellsData, type GroupedCellsData } from '../heatmap/fillCellsData';\n\nconst MAX_RENDERED_CELLS_COUNT = 1000000;\n\ntype BubbleDataFields = 'sizeValue'|'colorValue';\nexport type CellBubble = Cell<BubbleDataFields>;\nexport type GroupedCellsBubble = GroupedCellsData<BubbleDataFields>;\n\nfunction createEmptyGroupedCells(): GroupedCellsBubble {\n return {\n meta: {\n valueSources: ['sizeValue', 'colorValue'],\n facetKeys: [],\n xGroupKeys: [],\n yGroupKeys: [],\n\n xKeys: [], // all the keys from facets\n yKeys: [], // all the keys from facets\n xKeysByGroups: {},\n yKeysByGroups: {},\n\n xLabels: {},\n yLabels: {},\n xGroupLabels: {},\n yGroupLabels: {},\n\n facetKeyValues: {},\n xGroupKeyValues: {},\n yGroupKeyValues: {},\n\n xDataByKeys: {},\n yDataByKeys: {},\n\n valueExtent: {\n sizeValue: [Infinity, -Infinity],\n colorValue: [Infinity, -Infinity]\n }\n },\n facets: {},\n };\n}\n\nexport function getGroupedCellsData(\n data: DataFrame,\n xColumn: ColumnName,\n yColumn: ColumnName,\n valueColumnSize: ColumnName,\n valueColumnColor: ColumnName,\n facetBy: ColumnName[],\n xGroupBy: ColumnName[],\n yGroupBy: ColumnName[],\n facetSettings: BubbleSettingsImpl['facetSettings'],\n normalization: BubbleSettingsImpl['normalization'],\n NAValueAs: BubbleSettingsImpl['NAValueAs'],\n keysOrder: BubbleSettingsImpl['keysOrder'],\n xAxis: BubbleSettingsImpl['chartSettings']['xAxis'],\n yAxis: BubbleSettingsImpl['chartSettings']['yAxis'],\n aggregation: BubbleSettingsImpl['aggregation'],\n showEmptyRows: boolean = false,\n showEmptyColumns: boolean = false,\n): GroupedCellsBubble {\n const result: GroupedCellsBubble = createEmptyGroupedCells();\n\n fillCellsData(result, {\n data,\n xColumn, yColumn,\n valueColumns: { sizeValue: valueColumnSize, colorValue: valueColumnColor },\n facetBy, xGroupBy, yGroupBy,\n facetSettings,\n annotations: [],\n dendrogramX: null,\n dendrogramY: null,\n normalizationBySource: { sizeValue: null, colorValue: normalization },\n NAValueAs,\n keysOrder,\n xAxis,\n yAxis,\n aggregation,\n showEmptyRows,\n showEmptyColumns,\n });\n\n if (result.meta.xKeys.length * result.meta.yKeys.length > MAX_RENDERED_CELLS_COUNT) {\n throw Error(`Too many cells for graph rendering (${result.meta.xKeys.length * result.meta.yKeys.length})`);\n }\n return result;\n}\n"],"mappings":";AAKA,IAAM,IAA2B;AAMjC,SAAS,IAA8C;AACnD,QAAO;EACH,MAAM;GACF,cAAc,CAAC,aAAa,aAAa;GACzC,WAAW,EAAE;GACb,YAAY,EAAE;GACd,YAAY,EAAE;GAEd,OAAO,EAAE;GACT,OAAO,EAAE;GACT,eAAe,EAAE;GACjB,eAAe,EAAE;GAEjB,SAAS,EAAE;GACX,SAAS,EAAE;GACX,cAAc,EAAE;GAChB,cAAc,EAAE;GAEhB,gBAAgB,EAAE;GAClB,iBAAiB,EAAE;GACnB,iBAAiB,EAAE;GAEnB,aAAa,EAAE;GACf,aAAa,EAAE;GAEf,aAAa;IACT,WAAW,CAAC,UAAU,UAAU;IAChC,YAAY,CAAC,UAAU,UAAU;IACpC;GACJ;EACD,QAAQ,EAAE;EACb;;AAGL,SAAgB,EACZ,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,IAAyB,IACzB,IAA4B,IACV;CAClB,IAAM,IAA6B,GAAyB;AAqB5D,KAnBA,EAAc,GAAQ;EAClB;EACA;EAAS;EACT,cAAc;GAAE,WAAW;GAAiB,YAAY;GAAkB;EAC1E;EAAS;EAAU;EACnB;EACA,aAAa,EAAE;EACf,aAAa;EACb,aAAa;EACb,uBAAuB;GAAE,WAAW;GAAM,YAAY;GAAe;EACrE;EACA;EACA;EACA;EACA;EACA;EACA;EACH,CAAC,EAEE,EAAO,KAAK,MAAM,SAAS,EAAO,KAAK,MAAM,SAAS,EACtD,OAAM,MAAM,uCAAuC,EAAO,KAAK,MAAM,SAAS,EAAO,KAAK,MAAM,OAAO,GAAG;AAE9G,QAAO"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/bubble/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,KAAK,mBAAmB,EAAE,KAAK,cAAc,EAAoC,MAAM,UAAU,CAAC;AAC3G,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAE5C,OAAO,EAAwC,KAAK,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAGtG,qBAAa,WAAY,SAAQ,aAAa;IAC1C,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,aAAa,EAAE,aAAa,CAAC;IAE7B,mBAAmB,EAAE,CAAC,CAAC,EAAC,OAAO,KAAK,IAAI,CAAmB;IAC3D,cAAc,EAAE;QACZ,gBAAgB,EAAE,kBAAkB,CAAC;KACxC,GAAG,IAAI,CAAQ;gBAEJ,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,cAAc,EAAE,aAAa,CAAC,EAAE,mBAAmB;IAU1F,KAAK,CAAC,IAAI,EAAE,WAAW;IAiBvB,OAAO;IAIP,qBAAqB,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,cAAc;IA2B/D,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO;IAIhD,MAAM,IAAI,MAAM;IAKhB,mCAAmC,CAAC,YAAY,EAAE,kBAAkB,EAAE,QAAQ,EAAE,kBAAkB;IAelG,+BAA+B,CAAC,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS;IAUpE,WAAW;IA0BX,gBAAgB;IAOhB,YAAY;IA2BZ,OAAO,CAAC,WAAW,CAIjB;CACL"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/bubble/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,KAAK,mBAAmB,EAAE,KAAK,cAAc,EAAoC,MAAM,UAAU,CAAC;AAC3G,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAE5C,OAAO,EAAwC,KAAK,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAGtG,qBAAa,WAAY,SAAQ,aAAa;IAC1C,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,aAAa,EAAE,aAAa,CAAC;IAE7B,mBAAmB,EAAE,CAAC,CAAC,EAAC,OAAO,KAAK,IAAI,CAAmB;IAC3D,cAAc,EAAE;QACZ,gBAAgB,EAAE,kBAAkB,CAAC;KACxC,GAAG,IAAI,CAAQ;gBAEJ,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,cAAc,EAAE,aAAa,CAAC,EAAE,mBAAmB;IAU1F,KAAK,CAAC,IAAI,EAAE,WAAW;IAiBvB,OAAO;IAIP,qBAAqB,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,cAAc;IA2B/D,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO;IAIhD,MAAM,IAAI,MAAM;IAKhB,mCAAmC,CAAC,YAAY,EAAE,kBAAkB,EAAE,QAAQ,EAAE,kBAAkB;IAiBlG,+BAA+B,CAAC,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS;IAUpE,WAAW;IA4BX,gBAAgB;IAOhB,YAAY;IA2BZ,OAAO,CAAC,WAAW,CAIjB;CACL"}
@@ -40,15 +40,15 @@ var l = class extends e {
40
40
  return this._updateChart(), c(this.chartRenderer.component);
41
41
  }
42
42
  _needUpdateCalculatedDataBySettings(e, t) {
43
- return e.facetBy.some((e, n) => e.value !== t.facetBy[n]?.value) || r(e.facetSettings?.order ?? [], t.facetSettings?.order ?? []) || e.normalization?.method !== t.normalization?.method || e.normalization?.direction !== t.normalization?.direction || e.xColumn.value !== t.xColumn.value || e.yColumn.value !== t.yColumn.value || e.valueColumnColor.value !== t.valueColumnColor.value || e.valueColumnSize.value !== t.valueColumnSize.value || e.NAValueAs !== t.NAValueAs || e.aggregation?.method !== t.aggregation?.method || e.aggregation?.x !== t.aggregation?.x || e.aggregation?.y !== t.aggregation?.y;
43
+ return e.facetBy.some((e, n) => e.value !== t.facetBy[n]?.value) || r(e.facetSettings?.order ?? [], t.facetSettings?.order ?? []) || e.normalization?.method !== t.normalization?.method || e.normalization?.direction !== t.normalization?.direction || e.xColumn.value !== t.xColumn.value || e.yColumn.value !== t.yColumn.value || e.valueColumnColor.value !== t.valueColumnColor.value || e.valueColumnSize.value !== t.valueColumnSize.value || e.NAValueAs !== t.NAValueAs || e.aggregation?.method !== t.aggregation?.method || e.aggregation?.x !== t.aggregation?.x || e.aggregation?.y !== t.aggregation?.y || e.showEmptyRows !== t.showEmptyRows || e.showEmptyColumns !== t.showEmptyColumns;
44
44
  }
45
45
  _needUpdateCalculatedDataByData(e, t) {
46
46
  let n = Object.keys(e.data), r = Object.keys(t.data);
47
47
  return e.id !== t.id || n.length !== r.length || n.some((n) => e.data[n].length !== t.data[n]?.length);
48
48
  }
49
49
  _updateData() {
50
- let { facetBy: e, facetSettings: t, xGroupBy: n, yGroupBy: r, xColumn: i, yColumn: a, valueColumnSize: o, valueColumnColor: c, normalization: l, NAValueAs: u, aggregation: d, chartSettings: f, keysOrder: p } = this.settings;
51
- this.calculatedData = { groupedCellsData: s(this.data, i, a, o, c, e, n, r, t, l, u, p, f.xAxis, f.yAxis, d) };
50
+ let { facetBy: e, facetSettings: t, xGroupBy: n, yGroupBy: r, xColumn: i, yColumn: a, valueColumnSize: o, valueColumnColor: c, normalization: l, NAValueAs: u, aggregation: d, chartSettings: f, keysOrder: p, showEmptyRows: m, showEmptyColumns: h } = this.settings;
51
+ this.calculatedData = { groupedCellsData: s(this.data, i, a, o, c, e, n, r, t, l, u, p, f.xAxis, f.yAxis, d, m, h) };
52
52
  }
53
53
  _updateAesInData() {
54
54
  this.calculatedData;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../src/bubble/index.ts"],"sourcesContent":["import { renderToString } from 'react-dom/server.browser';\nimport { AbstractChart } from '../AbstractChart';\nimport type { DataFrame } from '../DataFrame';\nimport { type BubbleEventHandlers, type BubbleSettings, getUnknownErrorInfo, isErrorInfo } from '../types';\nimport { BubbleSettingsImpl } from './BubbleSettingsImpl';\nimport ChartRenderer from './ChartRenderer';\nimport { getCellTooltip } from './getCellTooltip';\nimport { type CellBubble, getGroupedCellsData, type GroupedCellsBubble } from './getGroupedCellsData';\nimport { arraysAreDifferent } from '../utils/arraysAreDifferent';\n\nexport class ChartBubble extends AbstractChart {\n settings: BubbleSettingsImpl;\n chartRenderer: ChartRenderer;\n\n onTooltipHintSwitch: (v:boolean) => void = () => undefined;\n calculatedData: {\n groupedCellsData: GroupedCellsBubble;\n } | null = null;\n\n constructor(data: DataFrame, settings: BubbleSettings, eventHandlers?: BubbleEventHandlers) {\n super(data, settings);\n\n this.settings = new BubbleSettingsImpl(settings);\n this.chartRenderer = new ChartRenderer();\n if (eventHandlers) {\n this.onTooltipHintSwitch = eventHandlers[0];\n }\n }\n\n mount(node: HTMLElement) {\n try {\n this.chartRenderer.init(node);\n this._updateData();\n this._updateChart();\n this.hasError = false;\n this.errorInfo = null;\n } catch (err) {\n this.hasError = true;\n if (err instanceof Error) {\n this.errorInfo = isErrorInfo(err.cause) ? err.cause : getUnknownErrorInfo(err);\n this.chartRenderer.renderError(err.message as string);\n console.error(err);\n }\n }\n }\n\n unmount() {\n this.chartRenderer.clear();\n }\n\n updateSettingsAndData(data: DataFrame, settings: BubbleSettings) {\n try {\n const previousSettings = this.settings;\n const previousData = this.data;\n this.settings = new BubbleSettingsImpl(settings);\n this.data = data;\n if (\n this._needUpdateCalculatedDataBySettings(previousSettings, this.settings) ||\n this._needUpdateCalculatedDataByData(previousData, this.data)\n ) {\n this._updateData();\n } else {\n this._updateAesInData();\n }\n this._updateChart();\n this.hasError = false;\n this.errorInfo = null;\n } catch (err) {\n this.hasError = true;\n if (err instanceof Error) {\n this.errorInfo = isErrorInfo(err.cause) ? err.cause : getUnknownErrorInfo(err);\n this.chartRenderer.renderError(err.message as string);\n console.error(err);\n }\n }\n }\n\n updateChartState(_field: string, _value: unknown) {\n console.warn('no chart state for bubble chart');\n }\n\n export(): string {\n this._updateChart();\n return renderToString(this.chartRenderer.component);\n }\n\n _needUpdateCalculatedDataBySettings(prevSettings: BubbleSettingsImpl, settings: BubbleSettingsImpl) {\n return prevSettings.facetBy.some((el, idx) => el.value !== settings.facetBy[idx]?.value) ||\n arraysAreDifferent(prevSettings.facetSettings?.order ?? [], settings.facetSettings?.order ?? []) ||\n prevSettings.normalization?.method !== settings.normalization?.method ||\n prevSettings.normalization?.direction !== settings.normalization?.direction ||\n prevSettings.xColumn.value !== settings.xColumn.value ||\n prevSettings.yColumn.value !== settings.yColumn.value ||\n prevSettings.valueColumnColor.value !== settings.valueColumnColor.value ||\n prevSettings.valueColumnSize.value !== settings.valueColumnSize.value ||\n prevSettings.NAValueAs !== settings.NAValueAs ||\n prevSettings.aggregation?.method !== settings.aggregation?.method ||\n prevSettings.aggregation?.x !== settings.aggregation?.x ||\n prevSettings.aggregation?.y !== settings.aggregation?.y;\n }\n\n _needUpdateCalculatedDataByData(prevData: DataFrame, data: DataFrame) {\n const prevKeys = Object.keys(prevData.data);\n const keys = Object.keys(data.data);\n return (\n prevData.id !== data.id ||\n prevKeys.length !== keys.length ||\n prevKeys.some(key => prevData.data[key].length !== data.data[key]?.length)\n );\n }\n\n _updateData() {\n const {facetBy, facetSettings, xGroupBy, yGroupBy, xColumn, yColumn, valueColumnSize, valueColumnColor, normalization, NAValueAs, aggregation, chartSettings, keysOrder} = this.settings;\n\n const groupedCellsData = getGroupedCellsData(\n this.data,\n xColumn,\n yColumn,\n valueColumnSize,\n valueColumnColor,\n facetBy,\n xGroupBy,\n yGroupBy,\n facetSettings,\n normalization,\n NAValueAs,\n keysOrder,\n chartSettings.xAxis,\n chartSettings.yAxis,\n aggregation\n );\n\n this.calculatedData = {\n groupedCellsData,\n };\n }\n\n _updateAesInData() {\n const calculated = this.calculatedData;\n if (!calculated) {\n return;\n }\n }\n\n _updateChart() {\n if (!this.calculatedData) {\n return;\n }\n const {id, chartSettings, facetSettings, valueColumnColor, valueColumnSize, normalization, aes, keysOrder, xColumn, yColumn, xGroupBy, yGroupBy} = this.settings;\n const customOrder = {\n x: keysOrder[xColumn.value]?.length > 0,\n y: keysOrder[yColumn.value]?.length > 0,\n xGroup: xGroupBy.some((v) => keysOrder[v.value]?.length > 0),\n yGroup: yGroupBy.some((v) => keysOrder[v.value]?.length > 0),\n };\n this.chartRenderer.render(\n this.data,\n id,\n chartSettings,\n facetSettings,\n this.calculatedData.groupedCellsData,\n valueColumnColor,\n valueColumnSize,\n normalization,\n aes,\n this._getTooltip,\n this.onTooltipHintSwitch,\n customOrder\n );\n }\n\n private _getTooltip = (cell: CellBubble): string[] => {\n return this.calculatedData\n ? getCellTooltip(this.data, cell, this.calculatedData.groupedCellsData.meta, this.settings?.chartSettings?.tooltips?.content)\n : ['No data available'];\n };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../src/bubble/index.ts"],"sourcesContent":["import { renderToString } from 'react-dom/server.browser';\nimport { AbstractChart } from '../AbstractChart';\nimport type { DataFrame } from '../DataFrame';\nimport { type BubbleEventHandlers, type BubbleSettings, getUnknownErrorInfo, isErrorInfo } from '../types';\nimport { BubbleSettingsImpl } from './BubbleSettingsImpl';\nimport ChartRenderer from './ChartRenderer';\nimport { getCellTooltip } from './getCellTooltip';\nimport { type CellBubble, getGroupedCellsData, type GroupedCellsBubble } from './getGroupedCellsData';\nimport { arraysAreDifferent } from '../utils/arraysAreDifferent';\n\nexport class ChartBubble extends AbstractChart {\n settings: BubbleSettingsImpl;\n chartRenderer: ChartRenderer;\n\n onTooltipHintSwitch: (v:boolean) => void = () => undefined;\n calculatedData: {\n groupedCellsData: GroupedCellsBubble;\n } | null = null;\n\n constructor(data: DataFrame, settings: BubbleSettings, eventHandlers?: BubbleEventHandlers) {\n super(data, settings);\n\n this.settings = new BubbleSettingsImpl(settings);\n this.chartRenderer = new ChartRenderer();\n if (eventHandlers) {\n this.onTooltipHintSwitch = eventHandlers[0];\n }\n }\n\n mount(node: HTMLElement) {\n try {\n this.chartRenderer.init(node);\n this._updateData();\n this._updateChart();\n this.hasError = false;\n this.errorInfo = null;\n } catch (err) {\n this.hasError = true;\n if (err instanceof Error) {\n this.errorInfo = isErrorInfo(err.cause) ? err.cause : getUnknownErrorInfo(err);\n this.chartRenderer.renderError(err.message as string);\n console.error(err);\n }\n }\n }\n\n unmount() {\n this.chartRenderer.clear();\n }\n\n updateSettingsAndData(data: DataFrame, settings: BubbleSettings) {\n try {\n const previousSettings = this.settings;\n const previousData = this.data;\n this.settings = new BubbleSettingsImpl(settings);\n this.data = data;\n if (\n this._needUpdateCalculatedDataBySettings(previousSettings, this.settings) ||\n this._needUpdateCalculatedDataByData(previousData, this.data)\n ) {\n this._updateData();\n } else {\n this._updateAesInData();\n }\n this._updateChart();\n this.hasError = false;\n this.errorInfo = null;\n } catch (err) {\n this.hasError = true;\n if (err instanceof Error) {\n this.errorInfo = isErrorInfo(err.cause) ? err.cause : getUnknownErrorInfo(err);\n this.chartRenderer.renderError(err.message as string);\n console.error(err);\n }\n }\n }\n\n updateChartState(_field: string, _value: unknown) {\n console.warn('no chart state for bubble chart');\n }\n\n export(): string {\n this._updateChart();\n return renderToString(this.chartRenderer.component);\n }\n\n _needUpdateCalculatedDataBySettings(prevSettings: BubbleSettingsImpl, settings: BubbleSettingsImpl) {\n return prevSettings.facetBy.some((el, idx) => el.value !== settings.facetBy[idx]?.value) ||\n arraysAreDifferent(prevSettings.facetSettings?.order ?? [], settings.facetSettings?.order ?? []) ||\n prevSettings.normalization?.method !== settings.normalization?.method ||\n prevSettings.normalization?.direction !== settings.normalization?.direction ||\n prevSettings.xColumn.value !== settings.xColumn.value ||\n prevSettings.yColumn.value !== settings.yColumn.value ||\n prevSettings.valueColumnColor.value !== settings.valueColumnColor.value ||\n prevSettings.valueColumnSize.value !== settings.valueColumnSize.value ||\n prevSettings.NAValueAs !== settings.NAValueAs ||\n prevSettings.aggregation?.method !== settings.aggregation?.method ||\n prevSettings.aggregation?.x !== settings.aggregation?.x ||\n prevSettings.aggregation?.y !== settings.aggregation?.y ||\n prevSettings.showEmptyRows !== settings.showEmptyRows ||\n prevSettings.showEmptyColumns !== settings.showEmptyColumns;\n }\n\n _needUpdateCalculatedDataByData(prevData: DataFrame, data: DataFrame) {\n const prevKeys = Object.keys(prevData.data);\n const keys = Object.keys(data.data);\n return (\n prevData.id !== data.id ||\n prevKeys.length !== keys.length ||\n prevKeys.some(key => prevData.data[key].length !== data.data[key]?.length)\n );\n }\n\n _updateData() {\n const {facetBy, facetSettings, xGroupBy, yGroupBy, xColumn, yColumn, valueColumnSize, valueColumnColor, normalization, NAValueAs, aggregation, chartSettings, keysOrder, showEmptyRows, showEmptyColumns} = this.settings;\n\n const groupedCellsData = getGroupedCellsData(\n this.data,\n xColumn,\n yColumn,\n valueColumnSize,\n valueColumnColor,\n facetBy,\n xGroupBy,\n yGroupBy,\n facetSettings,\n normalization,\n NAValueAs,\n keysOrder,\n chartSettings.xAxis,\n chartSettings.yAxis,\n aggregation,\n showEmptyRows,\n showEmptyColumns,\n );\n\n this.calculatedData = {\n groupedCellsData,\n };\n }\n\n _updateAesInData() {\n const calculated = this.calculatedData;\n if (!calculated) {\n return;\n }\n }\n\n _updateChart() {\n if (!this.calculatedData) {\n return;\n }\n const {id, chartSettings, facetSettings, valueColumnColor, valueColumnSize, normalization, aes, keysOrder, xColumn, yColumn, xGroupBy, yGroupBy} = this.settings;\n const customOrder = {\n x: keysOrder[xColumn.value]?.length > 0,\n y: keysOrder[yColumn.value]?.length > 0,\n xGroup: xGroupBy.some((v) => keysOrder[v.value]?.length > 0),\n yGroup: yGroupBy.some((v) => keysOrder[v.value]?.length > 0),\n };\n this.chartRenderer.render(\n this.data,\n id,\n chartSettings,\n facetSettings,\n this.calculatedData.groupedCellsData,\n valueColumnColor,\n valueColumnSize,\n normalization,\n aes,\n this._getTooltip,\n this.onTooltipHintSwitch,\n customOrder\n );\n }\n\n private _getTooltip = (cell: CellBubble): string[] => {\n return this.calculatedData\n ? getCellTooltip(this.data, cell, this.calculatedData.groupedCellsData.meta, this.settings?.chartSettings?.tooltips?.content)\n : ['No data available'];\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":"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"}
1
+ {"version":3,"file":"ChartRenderer.d.ts","sourceRoot":"","sources":["../../src/heatmap/ChartRenderer.tsx"],"names":[],"mappings":"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"}
@@ -266,31 +266,33 @@ var M = class {
266
266
  updateChartsSizes(e, t, n) {
267
267
  let { width: r, height: i, cellWidth: a, cellHeight: o } = e, s = t.meta.facetKeys[0];
268
268
  if (a && s) {
269
- let e = t.facets[s].xKeys.length, r = t.meta.xGroupKeys.length;
269
+ let e = t.facets[s].xKeys.length, r = t.meta.xGroupKeys.filter((e) => (t.facets[s]?.xKeysByGroups[e]?.length ?? 0) > 0).length;
270
270
  this.chartSizes.chartWidth = e * a + n * (r - 1);
271
271
  } else this.chartSizes.chartWidth = r;
272
272
  if (o && s) {
273
- let e = t.facets[s].yKeys.length, r = t.meta.yGroupKeys.length;
273
+ let e = t.facets[s].yKeys.length, r = t.meta.yGroupKeys.filter((e) => (t.facets[s]?.yKeysByGroups[e]?.length ?? 0) > 0).length;
274
274
  this.chartSizes.chartHeight = e * o + n * (r - 1);
275
275
  } else this.chartSizes.chartHeight = i;
276
276
  }
277
277
  updateScales(e, t, n, r, i, a, o, s, c, l) {
278
278
  let { width: u, height: d, cellWidth: f, cellHeight: p } = i, { meta: m, facets: h } = t, { sharedX: g, sharedY: _ } = r, v = (e, t = {}) => e.sort((e, n) => a.sorting === "asc" ? (t[e] ?? e).localeCompare(t[n] ?? n, "en", { numeric: !0 }) : (t[n] ?? n).localeCompare(t[e] ?? e, "en", { numeric: !0 })), b = (e, t = {}) => e.sort((e, n) => o.sorting === "asc" ? (t[e] ?? e).localeCompare(t[n] ?? n, "en", { numeric: !0 }) : (t[n] ?? n).localeCompare(t[e] ?? e, "en", { numeric: !0 }));
279
279
  e.forEach((e) => {
280
- let t = h[e], r = l.xGroup ? m.xGroupKeys : v(m.xGroupKeys), i = l.yGroup ? m.yGroupKeys : b(m.yGroupKeys), { xKeysByGroups: a } = g ? m : t, { yKeysByGroups: o } = _ ? m : t, x = r.map((e) => a[e].length), S = i.map((e) => o[e].length), C = x.reduce((e, t) => e + t, 0), w = S.reduce((e, t) => e + t, 0), T = f || (u - (x.filter((e) => e > 0).length - 1) * n) / C, E = p || (d - (S.filter((e) => e > 0).length - 1) * n) / w, D = [], O = [], k = 0;
281
- r.forEach((e) => {
282
- let t = s || l.x ? a[e] : v(a[e], m.xLabels);
283
- O = O.concat(t), t.forEach(() => {
280
+ let t = h[e], r = l.xGroup ? m.xGroupKeys : v(m.xGroupKeys), i = l.yGroup ? m.yGroupKeys : b(m.yGroupKeys), { xKeysByGroups: a } = g ? m : t, { yKeysByGroups: o } = _ ? m : t, x = r.map((e) => a[e].length), S = i.map((e) => o[e].length), C = x.reduce((e, t) => e + t, 0), w = S.reduce((e, t) => e + t, 0), T = f || (u - (x.filter((e) => e > 0).length - 1) * n) / C, E = p || (d - (S.filter((e) => e > 0).length - 1) * n) / w, D = [], O = [], k = 0, A = r.map((e) => s || l.x ? a[e] : v(a[e], m.xLabels));
281
+ A.forEach((e, t) => {
282
+ O = O.concat(e), e.forEach(() => {
284
283
  D.push(k), k += T;
285
- }), t.length > 0 && (k += n);
284
+ });
285
+ let r = A.slice(t + 1).some((e) => e.length > 0);
286
+ e.length > 0 && r && (k += n);
286
287
  });
287
- let A = [], j = [], M = 0;
288
- i.forEach((e) => {
289
- let t = c || l.y ? o[e] : b(o[e], m.yLabels);
290
- j = j.concat(t), t.forEach(() => {
291
- A.push(M), M += E;
292
- }), t.length > 0 && (M += n);
293
- }), this.scales.x[e] = y().domain(O).range(D), this.scales.y[e] = y().domain(j).range(A), this.step.x[e] = T, this.step.y[e] = E;
288
+ let j = [], M = [], N = 0, P = i.map((e) => c || l.y ? o[e] : b(o[e], m.yLabels));
289
+ P.forEach((e, t) => {
290
+ M = M.concat(e), e.forEach(() => {
291
+ j.push(N), N += E;
292
+ });
293
+ let r = P.slice(t + 1).some((e) => e.length > 0);
294
+ e.length > 0 && r && (N += n);
295
+ }), this.scales.x[e] = y().domain(O).range(D), this.scales.y[e] = y().domain(M).range(j), this.step.x[e] = T, this.step.y[e] = E;
294
296
  });
295
297
  }
296
298
  updateAesScale(e, t, n, r, i, a, o) {
@@ -333,19 +335,23 @@ var M = class {
333
335
  };
334
336
  let { xKeysByGroups: s, yKeysByGroups: c } = r[e];
335
337
  if (a) {
336
- let { hierarchyByGroupX: n } = i[e], r = t.reduce((e, t) => Math.max(e, n[t]?.data.height), 0);
338
+ let { hierarchyByGroupX: n } = i[e], r = t.reduce((e, t) => Math.max(e, n[t]?.data.height ?? 0), 0);
337
339
  this.dendrograms[e].x.treesByGroupKey = t.reduce((t, i) => {
338
- let o = n[i], c = s[i];
339
- _().separation(() => 1).size([c.length * this.step.x[e], a.size])(o);
340
+ let o = n[i];
341
+ if (!o) return t;
342
+ let c = s[i];
343
+ _().separation(() => 1).size([o.leaves().length * this.step.x[e], a.size])(o);
340
344
  let l = o;
341
345
  return E(l, v().domain(a.position === "top" ? [0, r] : [r, 0]).range([a.size, 0]), "y"), D(l, this.scales.x[e](c[0]), "x"), t[i] = l, t;
342
346
  }, {}), this.dendrograms[e].x.data = a;
343
347
  }
344
348
  if (o) {
345
- let { hierarchyByGroupY: t } = i[e], r = n.reduce((e, n) => Math.max(e, t[n]?.data.height), 0);
349
+ let { hierarchyByGroupY: t } = i[e], r = n.reduce((e, n) => Math.max(e, t[n]?.data.height ?? 0), 0);
346
350
  this.dendrograms[e].y.treesByGroupKey = n.reduce((n, i) => {
347
- let a = t[i], s = c[i];
348
- _().separation(() => 1).size([s.length * this.step.y[e], o.size])(a);
351
+ let a = t[i];
352
+ if (!a) return n;
353
+ let s = c[i];
354
+ _().separation(() => 1).size([a.leaves().length * this.step.y[e], o.size])(a);
349
355
  let l = a, u = v().domain(o.position === "left" ? [0, r] : [r, 0]).range([o.size, 0]);
350
356
  return D(l, this.scales.y[e](s[0]), "x", "y"), E(l, u, "x"), n[i] = l, n;
351
357
  }, {}), this.dendrograms[e].y.data = o;