@milaboratories/miplots4 1.1.0 → 1.2.1

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