@milaboratories/miplots4 1.0.179 → 1.2.0

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 (194) 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/common/ContinuousAxis.d.ts +3 -1
  5. package/dist/common/ContinuousAxis.d.ts.map +1 -1
  6. package/dist/common/ContinuousAxis.js +8 -8
  7. package/dist/common/ContinuousAxis.js.map +1 -1
  8. package/dist/common/Legend.d.ts +12 -1
  9. package/dist/common/Legend.d.ts.map +1 -1
  10. package/dist/common/Legend.js +14 -6
  11. package/dist/common/Legend.js.map +1 -1
  12. package/dist/index.d.ts +2 -2
  13. package/dist/index.d.ts.map +1 -1
  14. package/dist/scatterplot/ChartRenderer.d.ts +2 -2
  15. package/dist/scatterplot/ChartRenderer.d.ts.map +1 -1
  16. package/dist/scatterplot/ChartRenderer.js +155 -115
  17. package/dist/scatterplot/ChartRenderer.js.map +1 -1
  18. package/dist/scatterplot/ScatterplotSettingsImpl.d.ts +11 -1
  19. package/dist/scatterplot/ScatterplotSettingsImpl.d.ts.map +1 -1
  20. package/dist/scatterplot/ScatterplotSettingsImpl.js +20 -0
  21. package/dist/scatterplot/ScatterplotSettingsImpl.js.map +1 -1
  22. package/dist/scatterplot/components/ChartLayersData.d.ts +5 -0
  23. package/dist/scatterplot/components/ChartLayersData.d.ts.map +1 -1
  24. package/dist/scatterplot/components/ChartLayersData.js +115 -35
  25. package/dist/scatterplot/components/ChartLayersData.js.map +1 -1
  26. package/dist/scatterplot/components/types.d.ts +2 -0
  27. package/dist/scatterplot/components/types.d.ts.map +1 -1
  28. package/dist/scatterplot/getLayersData.d.ts +11 -2
  29. package/dist/scatterplot/getLayersData.d.ts.map +1 -1
  30. package/dist/scatterplot/getLayersData.js +36 -19
  31. package/dist/scatterplot/getLayersData.js.map +1 -1
  32. package/dist/scatterplot/index.d.ts.map +1 -1
  33. package/dist/scatterplot/index.js +51 -33
  34. package/dist/scatterplot/index.js.map +1 -1
  35. package/dist/scatterplot/linearRegression.js +1 -1
  36. package/dist/scatterplot/utils/createAesGetter.d.ts.map +1 -1
  37. package/dist/scatterplot/utils/createAesGetter.js +5 -3
  38. package/dist/scatterplot/utils/createAesGetter.js.map +1 -1
  39. package/dist/scatterplot/utils/createLegendInfo.d.ts +11 -2
  40. package/dist/scatterplot/utils/createLegendInfo.d.ts.map +1 -1
  41. package/dist/scatterplot/utils/createLegendInfo.js +21 -16
  42. package/dist/scatterplot/utils/createLegendInfo.js.map +1 -1
  43. package/dist/scatterplot-umap/ChartRenderer.d.ts +6 -6
  44. package/dist/scatterplot-umap/ChartRenderer.d.ts.map +1 -1
  45. package/dist/scatterplot-umap/ChartRenderer.js +99 -57
  46. package/dist/scatterplot-umap/ChartRenderer.js.map +1 -1
  47. package/dist/scatterplot-umap/SettingsImpl.d.ts +11 -1
  48. package/dist/scatterplot-umap/SettingsImpl.d.ts.map +1 -1
  49. package/dist/scatterplot-umap/SettingsImpl.js +21 -1
  50. package/dist/scatterplot-umap/SettingsImpl.js.map +1 -1
  51. package/dist/scatterplot-umap/components/LowerSVG.d.ts +3 -2
  52. package/dist/scatterplot-umap/components/LowerSVG.d.ts.map +1 -1
  53. package/dist/scatterplot-umap/components/LowerSVG.js +159 -108
  54. package/dist/scatterplot-umap/components/LowerSVG.js.map +1 -1
  55. package/dist/scatterplot-umap/components/SVGLayer.d.ts +1 -1
  56. package/dist/scatterplot-umap/components/SVGLayer.d.ts.map +1 -1
  57. package/dist/scatterplot-umap/components/SVGLayer.js +9 -8
  58. package/dist/scatterplot-umap/components/SVGLayer.js.map +1 -1
  59. package/dist/scatterplot-umap/index.d.ts +6 -1
  60. package/dist/scatterplot-umap/index.d.ts.map +1 -1
  61. package/dist/scatterplot-umap/index.js +65 -31
  62. package/dist/scatterplot-umap/index.js.map +1 -1
  63. package/dist/scatterplot-umap/types.d.ts +7 -0
  64. package/dist/scatterplot-umap/types.d.ts.map +1 -1
  65. package/dist/selection/ChartRenderer.d.ts +90 -0
  66. package/dist/selection/ChartRenderer.d.ts.map +1 -0
  67. package/dist/selection/ChartRenderer.js +254 -0
  68. package/dist/selection/ChartRenderer.js.map +1 -0
  69. package/dist/selection/SelectionSettingsImpl.d.ts +53 -0
  70. package/dist/selection/SelectionSettingsImpl.d.ts.map +1 -0
  71. package/dist/selection/SelectionSettingsImpl.js +47 -0
  72. package/dist/selection/SelectionSettingsImpl.js.map +1 -0
  73. package/dist/selection/components/Chart/Bars/GroupSelectedBars.d.ts +8 -0
  74. package/dist/selection/components/Chart/Bars/GroupSelectedBars.d.ts.map +1 -0
  75. package/dist/selection/components/Chart/Bars/GroupSelectedBars.js +57 -0
  76. package/dist/selection/components/Chart/Bars/GroupSelectedBars.js.map +1 -0
  77. package/dist/selection/components/Chart/Bars/StackedBars.d.ts +12 -0
  78. package/dist/selection/components/Chart/Bars/StackedBars.d.ts.map +1 -0
  79. package/dist/selection/components/Chart/Bars/StackedBars.js +58 -0
  80. package/dist/selection/components/Chart/Bars/StackedBars.js.map +1 -0
  81. package/dist/selection/components/Chart/Bars/UngroupedBars.d.ts +6 -0
  82. package/dist/selection/components/Chart/Bars/UngroupedBars.d.ts.map +1 -0
  83. package/dist/selection/components/Chart/Bars/UngroupedBars.js +38 -0
  84. package/dist/selection/components/Chart/Bars/UngroupedBars.js.map +1 -0
  85. package/dist/selection/components/Chart/Bars.d.ts +10 -0
  86. package/dist/selection/components/Chart/Bars.d.ts.map +1 -0
  87. package/dist/selection/components/Chart/Bars.js +48 -0
  88. package/dist/selection/components/Chart/Bars.js.map +1 -0
  89. package/dist/selection/components/Chart/ChartAxes.d.ts +7 -0
  90. package/dist/selection/components/Chart/ChartAxes.d.ts.map +1 -0
  91. package/dist/selection/components/Chart/ChartAxes.js +51 -0
  92. package/dist/selection/components/Chart/ChartAxes.js.map +1 -0
  93. package/dist/selection/components/Chart/ChartFrame.d.ts +9 -0
  94. package/dist/selection/components/Chart/ChartFrame.d.ts.map +1 -0
  95. package/dist/selection/components/Chart/ChartFrame.js +41 -0
  96. package/dist/selection/components/Chart/ChartFrame.js.map +1 -0
  97. package/dist/selection/components/Chart/Dividers.d.ts +8 -0
  98. package/dist/selection/components/Chart/Dividers.d.ts.map +1 -0
  99. package/dist/selection/components/Chart/Dividers.js +27 -0
  100. package/dist/selection/components/Chart/Dividers.js.map +1 -0
  101. package/dist/selection/components/Chart/Gridlines.d.ts +10 -0
  102. package/dist/selection/components/Chart/Gridlines.d.ts.map +1 -0
  103. package/dist/selection/components/Chart/Gridlines.js +32 -0
  104. package/dist/selection/components/Chart/Gridlines.js.map +1 -0
  105. package/dist/selection/components/Chart/Ribbons/GroupFlowRibbon.d.ts +9 -0
  106. package/dist/selection/components/Chart/Ribbons/GroupFlowRibbon.d.ts.map +1 -0
  107. package/dist/selection/components/Chart/Ribbons/GroupFlowRibbon.js +36 -0
  108. package/dist/selection/components/Chart/Ribbons/GroupFlowRibbon.js.map +1 -0
  109. package/dist/selection/components/Chart/Ribbons/MultiGroupRibbon.d.ts +6 -0
  110. package/dist/selection/components/Chart/Ribbons/MultiGroupRibbon.d.ts.map +1 -0
  111. package/dist/selection/components/Chart/Ribbons/MultiGroupRibbon.js +22 -0
  112. package/dist/selection/components/Chart/Ribbons/MultiGroupRibbon.js.map +1 -0
  113. package/dist/selection/components/Chart/Ribbons/SimpleRibbon.d.ts +10 -0
  114. package/dist/selection/components/Chart/Ribbons/SimpleRibbon.d.ts.map +1 -0
  115. package/dist/selection/components/Chart/Ribbons/SimpleRibbon.js +33 -0
  116. package/dist/selection/components/Chart/Ribbons/SimpleRibbon.js.map +1 -0
  117. package/dist/selection/components/Chart/Ribbons/StackedGroupFlowRibbon.d.ts +10 -0
  118. package/dist/selection/components/Chart/Ribbons/StackedGroupFlowRibbon.d.ts.map +1 -0
  119. package/dist/selection/components/Chart/Ribbons/StackedGroupFlowRibbon.js +65 -0
  120. package/dist/selection/components/Chart/Ribbons/StackedGroupFlowRibbon.js.map +1 -0
  121. package/dist/selection/components/Chart/Ribbons/ribbonPath.d.ts +10 -0
  122. package/dist/selection/components/Chart/Ribbons/ribbonPath.d.ts.map +1 -0
  123. package/dist/selection/components/Chart/Ribbons/ribbonPath.js +13 -0
  124. package/dist/selection/components/Chart/Ribbons/ribbonPath.js.map +1 -0
  125. package/dist/selection/components/Chart/Ribbons.d.ts +9 -0
  126. package/dist/selection/components/Chart/Ribbons.d.ts.map +1 -0
  127. package/dist/selection/components/Chart/Ribbons.js +58 -0
  128. package/dist/selection/components/Chart/Ribbons.js.map +1 -0
  129. package/dist/selection/components/Chart/StageCounts.d.ts +7 -0
  130. package/dist/selection/components/Chart/StageCounts.d.ts.map +1 -0
  131. package/dist/selection/components/Chart/StageCounts.js +20 -0
  132. package/dist/selection/components/Chart/StageCounts.js.map +1 -0
  133. package/dist/selection/components/Chart/types.d.ts +132 -0
  134. package/dist/selection/components/Chart/types.d.ts.map +1 -0
  135. package/dist/selection/components/Chart.d.ts +22 -0
  136. package/dist/selection/components/Chart.d.ts.map +1 -0
  137. package/dist/selection/components/Chart.js +97 -0
  138. package/dist/selection/components/Chart.js.map +1 -0
  139. package/dist/selection/components/ChartsGroup.d.ts +18 -0
  140. package/dist/selection/components/ChartsGroup.d.ts.map +1 -0
  141. package/dist/selection/components/ChartsGroup.js +181 -0
  142. package/dist/selection/components/ChartsGroup.js.map +1 -0
  143. package/dist/selection/components/FacetCell.d.ts +22 -0
  144. package/dist/selection/components/FacetCell.d.ts.map +1 -0
  145. package/dist/selection/components/FacetCell.js +18 -0
  146. package/dist/selection/components/FacetCell.js.map +1 -0
  147. package/dist/selection/components/types.d.ts +58 -0
  148. package/dist/selection/components/types.d.ts.map +1 -0
  149. package/dist/selection/constants.d.ts +25 -0
  150. package/dist/selection/constants.d.ts.map +1 -0
  151. package/dist/selection/constants.js +4 -0
  152. package/dist/selection/constants.js.map +1 -0
  153. package/dist/selection/createSelectionData.d.ts +50 -0
  154. package/dist/selection/createSelectionData.d.ts.map +1 -0
  155. package/dist/selection/createSelectionData.js +92 -0
  156. package/dist/selection/createSelectionData.js.map +1 -0
  157. package/dist/selection/index.d.ts +26 -0
  158. package/dist/selection/index.d.ts.map +1 -0
  159. package/dist/selection/index.js +96 -0
  160. package/dist/selection/index.js.map +1 -0
  161. package/dist/selection/utils.d.ts +4 -0
  162. package/dist/selection/utils.d.ts.map +1 -0
  163. package/dist/selection/utils.js +13 -0
  164. package/dist/selection/utils.js.map +1 -0
  165. package/dist/types/bubble.d.ts +42 -0
  166. package/dist/types/bubble.d.ts.map +1 -1
  167. package/dist/types/common.d.ts +38 -0
  168. package/dist/types/common.d.ts.map +1 -1
  169. package/dist/types/common.js +1 -0
  170. package/dist/types/common.js.map +1 -1
  171. package/dist/types/dendro.d.ts +103 -0
  172. package/dist/types/dendro.d.ts.map +1 -1
  173. package/dist/types/discrete.d.ts +167 -0
  174. package/dist/types/discrete.d.ts.map +1 -1
  175. package/dist/types/heatmap.d.ts +159 -0
  176. package/dist/types/heatmap.d.ts.map +1 -1
  177. package/dist/types/histogram.d.ts +22 -0
  178. package/dist/types/histogram.d.ts.map +1 -1
  179. package/dist/types/index.d.ts +3 -1
  180. package/dist/types/index.d.ts.map +1 -1
  181. package/dist/types/index.js +1 -0
  182. package/dist/types/scatterplot-umap.d.ts +951 -87
  183. package/dist/types/scatterplot-umap.d.ts.map +1 -1
  184. package/dist/types/scatterplot-umap.js +19 -3
  185. package/dist/types/scatterplot-umap.js.map +1 -1
  186. package/dist/types/scatterplot.d.ts +1647 -44
  187. package/dist/types/scatterplot.d.ts.map +1 -1
  188. package/dist/types/scatterplot.js +27 -3
  189. package/dist/types/scatterplot.js.map +1 -1
  190. package/dist/types/selection.d.ts +452 -0
  191. package/dist/types/selection.d.ts.map +1 -0
  192. package/dist/types/selection.js +53 -0
  193. package/dist/types/selection.js.map +1 -0
  194. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"MiPlots.d.ts","sourceRoot":"","sources":["../src/MiPlots.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,aAAa,EAAE,cAAc,EAAC,MAAM,iBAAiB,CAAC;AASnE,OAAO,KAAK,EAER,kBAAkB,EAMlB,QAAQ,EACX,MAAM,SAAS,CAAC;AAEjB,OAAO,KAAK,EAAC,OAAO,EAAC,MAAM,aAAa,CAAC;AAEzC,qBAAa,OAAQ,YAAW,cAAc;IAC1C,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,KAAK,EAAE,aAAa,CAAC;IAErB,OAAO,CAAC,MAAM,CAAC,WAAW;IAsC1B,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,aAAa,CAAC,EAAE,kBAAkB,CAAC,OAAO,CAAC,GAAG,OAAO;gBAK3F,KAAK,EAAE,aAAa;IAIhC,IAAI,cAAc,mCAEjB;IAED,IAAI,QAAQ,YAEX;IAED,IAAI,SAAS,uCAEZ;IAED,KAAK,CAAC,IAAI,EAAE,WAAW;IAKvB,OAAO;IAKP,qBAAqB,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ;IAgBvD,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO;IAI9C,MAAM;CAGT"}
1
+ {"version":3,"file":"MiPlots.d.ts","sourceRoot":"","sources":["../src/MiPlots.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,aAAa,EAAE,cAAc,EAAC,MAAM,iBAAiB,CAAC;AAWnE,OAAO,KAAK,EAER,kBAAkB,EAMlB,QAAQ,EACX,MAAM,SAAS,CAAC;AAEjB,OAAO,KAAK,EAAC,OAAO,EAAC,MAAM,aAAa,CAAC;AAEzC,qBAAa,OAAQ,YAAW,cAAc;IAC1C,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,KAAK,EAAE,aAAa,CAAC;IAErB,OAAO,CAAC,MAAM,CAAC,WAAW;IA0C1B,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,aAAa,CAAC,EAAE,kBAAkB,CAAC,OAAO,CAAC,GAAG,OAAO;gBAK3F,KAAK,EAAE,aAAa;IAIhC,IAAI,cAAc,mCAEjB;IAED,IAAI,QAAQ,YAEX;IAED,IAAI,SAAS,uCAEZ;IAED,KAAK,CAAC,IAAI,EAAE,WAAW;IAKvB,OAAO;IAKP,qBAAqB,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ;IAgBvD,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO;IAI9C,MAAM;CAGT"}
package/dist/MiPlots.js CHANGED
@@ -7,23 +7,25 @@ import { ChartHistogram as a } from "./histogram/index.js";
7
7
  import { ChartScatterplot as o } from "./scatterplot/index.js";
8
8
  import { ChartScatterplotUmap as s } from "./scatterplot-umap/index.js";
9
9
  import { ChartBubble as c } from "./bubble/index.js";
10
- var l = class l {
10
+ import { ChartSelection as l } from "./selection/index.js";
11
+ var u = class u {
11
12
  node;
12
13
  chart;
13
- static createChart(n, l, u) {
14
- let { type: d } = l;
15
- if (d === "discrete") return new r(n, l, u);
16
- if (d === "dendro") return new t(n, l, u);
17
- if (d === "scatterplot") return new o(n, l, u);
18
- if (d === "scatterplot-umap") return new s(n, l, u);
19
- if (d === "heatmap") return new i(n, l, u);
20
- if (d === "histogram") return new a(n, l, u);
21
- if (d === "bubble") return new c(n, l, u);
22
- e(d, `Unknown chart type: ${d}`);
14
+ static createChart(n, u, d) {
15
+ let { type: f } = u;
16
+ if (f === "discrete") return new r(n, u, d);
17
+ if (f === "dendro") return new t(n, u, d);
18
+ if (f === "scatterplot") return new o(n, u, d);
19
+ if (f === "scatterplot-umap") return new s(n, u, d);
20
+ if (f === "heatmap") return new i(n, u, d);
21
+ if (f === "histogram") return new a(n, u, d);
22
+ if (f === "bubble") return new c(n, u, d);
23
+ if (f === "selection") return new l(n, u, d);
24
+ e(f, `Unknown chart type: ${f}`);
23
25
  }
24
26
  static newPlot(e, t, r) {
25
27
  let i = n.from(e);
26
- return new this(l.createChart(i, t, r));
28
+ return new this(u.createChart(i, t, r));
27
29
  }
28
30
  constructor(e) {
29
31
  this.chart = e;
@@ -45,7 +47,7 @@ var l = class l {
45
47
  }
46
48
  updateSettingsAndData(e, t) {
47
49
  if (t.type !== this.chart.settings.type) {
48
- let e = l.createChart(this.chart.data, t);
50
+ let e = u.createChart(this.chart.data, t);
49
51
  this.node ? (this.chart.unmount(), this.chart = e, this.chart.mount(this.node)) : this.chart = e;
50
52
  } else this.chart.updateSettingsAndData(n.from(e), t);
51
53
  }
@@ -56,6 +58,6 @@ var l = class l {
56
58
  return this.chart.export();
57
59
  }
58
60
  };
59
- export { l as MiPlots };
61
+ export { u as MiPlots };
60
62
 
61
63
  //# sourceMappingURL=MiPlots.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MiPlots.js","names":[],"sources":["../src/MiPlots.ts"],"sourcesContent":["import type {AbstractChart, ChartInterface} from './AbstractChart';\nimport {ChartDendro} from './dendro';\nimport {ChartDiscrete} from './discrete';\nimport {ChartHeatmap} from './heatmap';\nimport {ChartHistogram} from './histogram';\nimport {ChartScatterplot} from './scatterplot';\nimport {ChartScatterplotUmap} from './scatterplot-umap';\nimport {ChartBubble} from './bubble';\nimport {DataFrame} from './DataFrame';\nimport type {\n BubbleEventHandlers,\n ChartEventHandlers,\n DendroEventHandlers,\n DiscreteEventHandlers,\n HeatmapEventHandlers,\n HistogramEventHandlers,\n ScatterplotEventHandlers,\n Settings,\n} from './types';\nimport {exhaustive} from './utils';\nimport type {DataSet} from './DataFrame';\n\nexport class MiPlots implements ChartInterface {\n node?: HTMLElement;\n chart: AbstractChart;\n\n private static createChart(\n data: DataFrame,\n settings: Settings,\n eventHandlers?: ChartEventHandlers<unknown>\n ): AbstractChart {\n const {type} = settings;\n\n if (type === 'discrete') {\n return new ChartDiscrete(data, settings, eventHandlers as DiscreteEventHandlers);\n }\n\n if (type === 'dendro') {\n return new ChartDendro(data, settings, eventHandlers as DendroEventHandlers);\n }\n\n if (type === 'scatterplot') {\n return new ChartScatterplot(data, settings, eventHandlers as ScatterplotEventHandlers);\n }\n\n if (type === 'scatterplot-umap') {\n return new ChartScatterplotUmap(data, settings, eventHandlers as ScatterplotEventHandlers);\n }\n\n if (type === 'heatmap') {\n return new ChartHeatmap(data, settings, eventHandlers as HeatmapEventHandlers);\n }\n\n if (type === 'histogram') {\n return new ChartHistogram(data, settings, eventHandlers as HistogramEventHandlers);\n }\n\n if (type === 'bubble') {\n return new ChartBubble(data, settings, eventHandlers as BubbleEventHandlers);\n }\n\n exhaustive(type, `Unknown chart type: ${type}`);\n }\n\n static newPlot(data: DataSet, settings: Settings, eventHandlers?: ChartEventHandlers<unknown>): MiPlots {\n const dataFrame = DataFrame.from(data);\n return new this(MiPlots.createChart(dataFrame, settings, eventHandlers));\n }\n\n constructor(chart: AbstractChart) {\n this.chart = chart;\n }\n\n get calculatedData() {\n return this.chart.calculatedData;\n }\n\n get hasError() {\n return this.chart.hasError;\n }\n\n get errorInfo() {\n return this.chart.errorInfo;\n }\n\n mount(node: HTMLElement) {\n this.node = node;\n this.chart.mount(node);\n }\n\n unmount() {\n delete this.node;\n this.chart.unmount();\n }\n\n updateSettingsAndData(data: DataSet, settings: Settings) {\n if (settings.type !== this.chart.settings.type) {\n const newChart = MiPlots.createChart(this.chart.data, settings);\n\n if (this.node) {\n this.chart.unmount();\n this.chart = newChart;\n this.chart.mount(this.node);\n } else {\n this.chart = newChart;\n }\n } else {\n this.chart.updateSettingsAndData(DataFrame.from(data), settings);\n }\n }\n\n updateChartState(field: string, value: unknown) {\n this.chart.updateChartState(field, value);\n }\n\n export() {\n return this.chart.export();\n }\n}\n"],"mappings":";;;;;;;;;AAsBA,IAAa,IAAb,MAAa,EAAkC;CAC3C;CACA;CAEA,OAAe,YACX,GACA,GACA,GACa;EACb,IAAM,EAAC,YAAQ;AAEf,MAAI,MAAS,WACT,QAAO,IAAI,EAAc,GAAM,GAAU,EAAuC;AAGpF,MAAI,MAAS,SACT,QAAO,IAAI,EAAY,GAAM,GAAU,EAAqC;AAGhF,MAAI,MAAS,cACT,QAAO,IAAI,EAAiB,GAAM,GAAU,EAA0C;AAG1F,MAAI,MAAS,mBACT,QAAO,IAAI,EAAqB,GAAM,GAAU,EAA0C;AAG9F,MAAI,MAAS,UACT,QAAO,IAAI,EAAa,GAAM,GAAU,EAAsC;AAGlF,MAAI,MAAS,YACT,QAAO,IAAI,EAAe,GAAM,GAAU,EAAwC;AAGtF,MAAI,MAAS,SACT,QAAO,IAAI,EAAY,GAAM,GAAU,EAAqC;AAGhF,IAAW,GAAM,uBAAuB,IAAO;;CAGnD,OAAO,QAAQ,GAAe,GAAoB,GAAsD;EACpG,IAAM,IAAY,EAAU,KAAK,EAAK;AACtC,SAAO,IAAI,KAAK,EAAQ,YAAY,GAAW,GAAU,EAAc,CAAC;;CAG5E,YAAY,GAAsB;AAC9B,OAAK,QAAQ;;CAGjB,IAAI,iBAAiB;AACjB,SAAO,KAAK,MAAM;;CAGtB,IAAI,WAAW;AACX,SAAO,KAAK,MAAM;;CAGtB,IAAI,YAAY;AACZ,SAAO,KAAK,MAAM;;CAGtB,MAAM,GAAmB;AAErB,EADA,KAAK,OAAO,GACZ,KAAK,MAAM,MAAM,EAAK;;CAG1B,UAAU;AAEN,EADA,OAAO,KAAK,MACZ,KAAK,MAAM,SAAS;;CAGxB,sBAAsB,GAAe,GAAoB;AACrD,MAAI,EAAS,SAAS,KAAK,MAAM,SAAS,MAAM;GAC5C,IAAM,IAAW,EAAQ,YAAY,KAAK,MAAM,MAAM,EAAS;AAE/D,GAAI,KAAK,QACL,KAAK,MAAM,SAAS,EACpB,KAAK,QAAQ,GACb,KAAK,MAAM,MAAM,KAAK,KAAK,IAE3B,KAAK,QAAQ;QAGjB,MAAK,MAAM,sBAAsB,EAAU,KAAK,EAAK,EAAE,EAAS;;CAIxE,iBAAiB,GAAe,GAAgB;AAC5C,OAAK,MAAM,iBAAiB,GAAO,EAAM;;CAG7C,SAAS;AACL,SAAO,KAAK,MAAM,QAAQ"}
1
+ {"version":3,"file":"MiPlots.js","names":[],"sources":["../src/MiPlots.ts"],"sourcesContent":["import type {AbstractChart, ChartInterface} from './AbstractChart';\nimport {ChartDendro} from './dendro';\nimport {ChartDiscrete} from './discrete';\nimport {ChartHeatmap} from './heatmap';\nimport {ChartHistogram} from './histogram';\nimport {ChartScatterplot} from './scatterplot';\nimport {ChartScatterplotUmap} from './scatterplot-umap';\nimport {ChartBubble} from './bubble';\nimport {ChartSelection} from './selection';\nimport type {SelectionEventHandlers} from './selection';\nimport {DataFrame} from './DataFrame';\nimport type {\n BubbleEventHandlers,\n ChartEventHandlers,\n DendroEventHandlers,\n DiscreteEventHandlers,\n HeatmapEventHandlers,\n HistogramEventHandlers,\n ScatterplotEventHandlers,\n Settings,\n} from './types';\nimport {exhaustive} from './utils';\nimport type {DataSet} from './DataFrame';\n\nexport class MiPlots implements ChartInterface {\n node?: HTMLElement;\n chart: AbstractChart;\n\n private static createChart(\n data: DataFrame,\n settings: Settings,\n eventHandlers?: ChartEventHandlers<unknown>\n ): AbstractChart {\n const {type} = settings;\n\n if (type === 'discrete') {\n return new ChartDiscrete(data, settings, eventHandlers as DiscreteEventHandlers);\n }\n\n if (type === 'dendro') {\n return new ChartDendro(data, settings, eventHandlers as DendroEventHandlers);\n }\n\n if (type === 'scatterplot') {\n return new ChartScatterplot(data, settings, eventHandlers as ScatterplotEventHandlers);\n }\n\n if (type === 'scatterplot-umap') {\n return new ChartScatterplotUmap(data, settings, eventHandlers as ScatterplotEventHandlers);\n }\n\n if (type === 'heatmap') {\n return new ChartHeatmap(data, settings, eventHandlers as HeatmapEventHandlers);\n }\n\n if (type === 'histogram') {\n return new ChartHistogram(data, settings, eventHandlers as HistogramEventHandlers);\n }\n\n if (type === 'bubble') {\n return new ChartBubble(data, settings, eventHandlers as BubbleEventHandlers);\n }\n\n if (type === 'selection') {\n return new ChartSelection(data, settings, eventHandlers as SelectionEventHandlers);\n }\n\n exhaustive(type, `Unknown chart type: ${type}`);\n }\n\n static newPlot(data: DataSet, settings: Settings, eventHandlers?: ChartEventHandlers<unknown>): MiPlots {\n const dataFrame = DataFrame.from(data);\n return new this(MiPlots.createChart(dataFrame, settings, eventHandlers));\n }\n\n constructor(chart: AbstractChart) {\n this.chart = chart;\n }\n\n get calculatedData() {\n return this.chart.calculatedData;\n }\n\n get hasError() {\n return this.chart.hasError;\n }\n\n get errorInfo() {\n return this.chart.errorInfo;\n }\n\n mount(node: HTMLElement) {\n this.node = node;\n this.chart.mount(node);\n }\n\n unmount() {\n delete this.node;\n this.chart.unmount();\n }\n\n updateSettingsAndData(data: DataSet, settings: Settings) {\n if (settings.type !== this.chart.settings.type) {\n const newChart = MiPlots.createChart(this.chart.data, settings);\n\n if (this.node) {\n this.chart.unmount();\n this.chart = newChart;\n this.chart.mount(this.node);\n } else {\n this.chart = newChart;\n }\n } else {\n this.chart.updateSettingsAndData(DataFrame.from(data), settings);\n }\n }\n\n updateChartState(field: string, value: unknown) {\n this.chart.updateChartState(field, value);\n }\n\n export() {\n return this.chart.export();\n }\n}\n"],"mappings":";;;;;;;;;;AAwBA,IAAa,IAAb,MAAa,EAAkC;CAC3C;CACA;CAEA,OAAe,YACX,GACA,GACA,GACa;EACb,IAAM,EAAC,YAAQ;AAEf,MAAI,MAAS,WACT,QAAO,IAAI,EAAc,GAAM,GAAU,EAAuC;AAGpF,MAAI,MAAS,SACT,QAAO,IAAI,EAAY,GAAM,GAAU,EAAqC;AAGhF,MAAI,MAAS,cACT,QAAO,IAAI,EAAiB,GAAM,GAAU,EAA0C;AAG1F,MAAI,MAAS,mBACT,QAAO,IAAI,EAAqB,GAAM,GAAU,EAA0C;AAG9F,MAAI,MAAS,UACT,QAAO,IAAI,EAAa,GAAM,GAAU,EAAsC;AAGlF,MAAI,MAAS,YACT,QAAO,IAAI,EAAe,GAAM,GAAU,EAAwC;AAGtF,MAAI,MAAS,SACT,QAAO,IAAI,EAAY,GAAM,GAAU,EAAqC;AAGhF,MAAI,MAAS,YACT,QAAO,IAAI,EAAe,GAAM,GAAU,EAAwC;AAGtF,IAAW,GAAM,uBAAuB,IAAO;;CAGnD,OAAO,QAAQ,GAAe,GAAoB,GAAsD;EACpG,IAAM,IAAY,EAAU,KAAK,EAAK;AACtC,SAAO,IAAI,KAAK,EAAQ,YAAY,GAAW,GAAU,EAAc,CAAC;;CAG5E,YAAY,GAAsB;AAC9B,OAAK,QAAQ;;CAGjB,IAAI,iBAAiB;AACjB,SAAO,KAAK,MAAM;;CAGtB,IAAI,WAAW;AACX,SAAO,KAAK,MAAM;;CAGtB,IAAI,YAAY;AACZ,SAAO,KAAK,MAAM;;CAGtB,MAAM,GAAmB;AAErB,EADA,KAAK,OAAO,GACZ,KAAK,MAAM,MAAM,EAAK;;CAG1B,UAAU;AAEN,EADA,OAAO,KAAK,MACZ,KAAK,MAAM,SAAS;;CAGxB,sBAAsB,GAAe,GAAoB;AACrD,MAAI,EAAS,SAAS,KAAK,MAAM,SAAS,MAAM;GAC5C,IAAM,IAAW,EAAQ,YAAY,KAAK,MAAM,MAAM,EAAS;AAE/D,GAAI,KAAK,QACL,KAAK,MAAM,SAAS,EACpB,KAAK,QAAQ,GACb,KAAK,MAAM,MAAM,KAAK,KAAK,IAE3B,KAAK,QAAQ;QAGjB,MAAK,MAAM,sBAAsB,EAAU,KAAK,EAAK,EAAE,EAAS;;CAIxE,iBAAiB,GAAe,GAAgB;AAC5C,OAAK,MAAM,iBAAiB,GAAO,EAAM;;CAG7C,SAAS;AACL,SAAO,KAAK,MAAM,QAAQ"}
@@ -1,7 +1,7 @@
1
1
  import { ScaleLinear, ScaleLogarithmic, ScaleSymLog } from 'd3-scale';
2
2
  type Scale = ScaleLinear<number, number> | ScaleLogarithmic<number, number> | ScaleSymLog<number, number>;
3
3
  type Orient = 'left' | 'bottom';
4
- export declare const ContinuousAxis: ({ scale, tickSize, tickPadding, orient, onlyPositive, hiddenLabels, offset, }: {
4
+ export declare const ContinuousAxis: ({ scale, tickSize, tickPadding, orient, onlyPositive, hiddenLabels, offset, tickFormat, }: {
5
5
  scale: Scale;
6
6
  tickSize?: number;
7
7
  tickPadding?: number;
@@ -9,6 +9,8 @@ export declare const ContinuousAxis: ({ scale, tickSize, tickPadding, orient, on
9
9
  orient?: Orient;
10
10
  hiddenLabels?: boolean;
11
11
  onlyPositive?: boolean;
12
+ /** Override the auto-derived label formatter (e.g. percent suffix). */
13
+ tickFormat?: (value: number) => string;
12
14
  }) => import("react/jsx-runtime").JSX.Element;
13
15
  export {};
14
16
  //# sourceMappingURL=ContinuousAxis.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ContinuousAxis.d.ts","sourceRoot":"","sources":["../../src/common/ContinuousAxis.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,WAAW,EAAE,gBAAgB,EAAE,WAAW,EAAC,MAAM,UAAU,CAAC;AAEzE,KAAK,KAAK,GAAG,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAC1G,KAAK,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAC;AAsBhC,eAAO,MAAM,cAAc,GAAI,+EAQ5B;IACC,KAAK,EAAE,KAAK,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,YAAY,CAAC,EAAE,OAAO,CAAC;CAC1B,4CA8CA,CAAC"}
1
+ {"version":3,"file":"ContinuousAxis.d.ts","sourceRoot":"","sources":["../../src/common/ContinuousAxis.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,WAAW,EAAE,gBAAgB,EAAE,WAAW,EAAC,MAAM,UAAU,CAAC;AAEzE,KAAK,KAAK,GAAG,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAC1G,KAAK,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAC;AAsBhC,eAAO,MAAM,cAAc,GAAI,2FAS5B;IACC,KAAK,EAAE,KAAK,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,uEAAuE;IACvE,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;CAC1C,4CA+CA,CAAC"}
@@ -17,20 +17,20 @@ function s(e) {
17
17
  function c(e) {
18
18
  return e === "bottom" ? "middle" : "end";
19
19
  }
20
- const l = ({ scale: l, tickSize: u = 6, tickPadding: d = 4, orient: f = "bottom", onlyPositive: p = !1, hiddenLabels: m = !1, offset: h = typeof window < "u" && window.devicePixelRatio > 1 ? 0 : .5 }) => {
21
- function g(e) {
20
+ const l = ({ scale: l, tickSize: u = 6, tickPadding: d = 4, orient: f = "bottom", onlyPositive: p = !1, hiddenLabels: m = !1, offset: h = typeof window < "u" && window.devicePixelRatio > 1 ? 0 : .5, tickFormat: g }) => {
21
+ function _(e) {
22
22
  return (t) => {
23
23
  let n = e(t);
24
24
  return n === void 0 ? 0 : +n;
25
25
  };
26
26
  }
27
- let { ticks: _, format: v } = t(l, p, f === "bottom"), y = Math.max(u, 0) + d, b = g(l.copy()), x = f === "bottom" ? i : a, S = f === "left" ? -1 : 1, C = { [(f === "left" ? "x" : "y") + "2"]: S * u }, w = { [f === "left" ? "x" : "y"]: S * y };
28
- return /* @__PURE__ */ n("g", { children: _.map((t, i) => /* @__PURE__ */ r("g", {
27
+ let { ticks: v, format: y } = t(l, p, f === "bottom"), b = g ?? y, x = Math.max(u, 0) + d, S = _(l.copy()), C = f === "bottom" ? i : a, w = f === "left" ? -1 : 1, T = { [(f === "left" ? "x" : "y") + "2"]: w * u }, E = { [f === "left" ? "x" : "y"]: w * x };
28
+ return /* @__PURE__ */ n("g", { children: v.map((t, i) => /* @__PURE__ */ r("g", {
29
29
  className: "tick",
30
- transform: x(b(t) + h),
30
+ transform: C(S(t) + h),
31
31
  children: [/* @__PURE__ */ n("line", {
32
32
  stroke: e,
33
- ...C
33
+ ...T
34
34
  }), !m && /* @__PURE__ */ n("g", {
35
35
  transform: o(f),
36
36
  children: /* @__PURE__ */ n("text", {
@@ -40,8 +40,8 @@ const l = ({ scale: l, tickSize: u = 6, tickPadding: d = 4, orient: f = "bottom"
40
40
  fontFamily: "Manrope",
41
41
  dominantBaseline: s(f),
42
42
  textAnchor: c(f),
43
- ...w,
44
- children: v(t)
43
+ ...E,
44
+ children: b(t)
45
45
  })
46
46
  })]
47
47
  }, i)) });
@@ -1 +1 @@
1
- {"version":3,"file":"ContinuousAxis.js","names":[],"sources":["../../src/common/ContinuousAxis.tsx"],"sourcesContent":["import {BLACK} from '../constants';\nimport {TICK_OFFSET} from '../discrete/constants';\nimport {getTicksAndFormat} from '../scatterplot/utils/getTicksAndFormat';\nimport React from 'react';\nimport type {ScaleLinear, ScaleLogarithmic, ScaleSymLog} from 'd3-scale';\n\ntype Scale = ScaleLinear<number, number> | ScaleLogarithmic<number, number> | ScaleSymLog<number, number>;\ntype Orient = 'left' | 'bottom';\n\nfunction translateX(x: number) {\n return `translate(${x},0)`;\n}\n\nfunction translateY(y: number) {\n return `translate(0,${y})`;\n}\n\nfunction getRotationTransform(orient: 'left' | 'bottom') {\n return orient === 'bottom' ? `translate(0,${TICK_OFFSET})` : `translate(${-TICK_OFFSET},0)`;\n}\n\nfunction getDominantBaseline(orient: 'left' | 'bottom') {\n return orient === 'bottom' ? 'hanging' : 'central';\n}\n\nfunction getTextAnchor( orient: 'left' | 'bottom') {\n return orient === 'bottom' ? 'middle' : 'end';\n}\n\nexport const ContinuousAxis = ({\n scale,\n tickSize = 6,\n tickPadding = TICK_OFFSET,\n orient = 'bottom',\n onlyPositive = false,\n hiddenLabels = false,\n offset = typeof window !== 'undefined' && window.devicePixelRatio > 1 ? 0 : 0.5,\n}: {\n scale: Scale;\n tickSize?: number;\n tickPadding?: number;\n offset?: number;\n orient?: Orient;\n hiddenLabels?: boolean;\n onlyPositive?: boolean;\n}) => {\n function number(scale: Scale) {\n return (d: number) => {\n const value = scale(d);\n return value === undefined ? 0 : +value;\n };\n }\n const {ticks: values, format} = getTicksAndFormat(scale, onlyPositive, orient === 'bottom');\n const spacing = Math.max(tickSize, 0) + tickPadding,\n position = (number)(scale.copy());\n\n const transform = orient === 'bottom' ? translateX : translateY;\n const k = orient === 'left' ? -1 : 1;\n\n const lineProps = {\n [(orient === 'left' ? 'x' : 'y') + '2']: k * tickSize,\n };\n\n const textProps = {\n [orient === 'left' ? 'x' : 'y']: k * spacing,\n };\n\n return (\n <g>\n {values.map((tick: number, i: number) => (\n <g className=\"tick\" key={i} transform={transform(position(tick) + offset)}>\n <line stroke={BLACK} {...lineProps} />\n {!hiddenLabels && (\n <g transform={getRotationTransform(orient)}>\n <text\n fill={BLACK}\n fontSize=\"14px\"\n fontWeight=\"500\"\n fontFamily=\"Manrope\"\n dominantBaseline={getDominantBaseline(orient)}\n textAnchor={getTextAnchor(orient)}\n {...textProps}\n >\n {format(tick)}\n </text>\n </g>\n )}\n </g>\n ))}\n </g>\n );\n};\n"],"mappings":";;;;AASA,SAAS,EAAW,GAAW;AAC3B,QAAO,aAAa,EAAE;;AAG1B,SAAS,EAAW,GAAW;AAC3B,QAAO,eAAe,EAAE;;AAG5B,SAAS,EAAqB,GAA2B;AACrD,QAAO,MAAW,WAAW,mBAAgC;;AAGjE,SAAS,EAAoB,GAA2B;AACpD,QAAO,MAAW,WAAW,YAAY;;AAG7C,SAAS,EAAe,GAA2B;AAC/C,QAAQ,MAAW,WAAW,WAAW;;AAG7C,MAAa,KAAkB,EAC5B,UACA,cAAW,GACX,iBAAA,GACA,YAAS,UACT,kBAAe,IACf,kBAAe,IACf,YAAS,OAAO,SAAW,OAAe,OAAO,mBAAmB,IAAI,IAAI,SASzE;CACF,SAAS,EAAO,GAAc;AAC1B,UAAQ,MAAc;GAClB,IAAM,IAAQ,EAAM,EAAE;AACtB,UAAO,MAAU,KAAA,IAAY,IAAI,CAAC;;;CAG1C,IAAM,EAAC,OAAO,GAAQ,cAAU,EAAkB,GAAO,GAAc,MAAW,SAAS,EACrF,IAAU,KAAK,IAAI,GAAU,EAAE,GAAG,GACpC,IAAY,EAAQ,EAAM,MAAM,CAAC,EAE/B,IAAY,MAAW,WAAW,IAAa,GAC/C,IAAI,MAAW,SAAS,KAAK,GAE7B,IAAY,IACZ,MAAW,SAAS,MAAM,OAAO,MAAM,IAAI,GAChD,EAEK,IAAY,GACb,MAAW,SAAS,MAAM,MAAM,IAAI,GACxC;AAED,QACI,kBAAC,KAAD,EAAA,UACK,EAAO,KAAK,GAAc,MACvB,kBAAC,KAAD;EAAG,WAAU;EAAe,WAAW,EAAU,EAAS,EAAK,GAAG,EAAO;YAAzE,CACI,kBAAC,QAAD;GAAM,QAAQ;GAAO,GAAI;GAAa,CAAA,EACrC,CAAC,KACE,kBAAC,KAAD;GAAG,WAAW,EAAqB,EAAO;aACtC,kBAAC,QAAD;IACI,MAAA;IACA,UAAS;IACT,YAAW;IACX,YAAW;IACX,kBAAkB,EAAoB,EAAO;IAC7C,YAAY,EAAc,EAAO;IACjC,GAAI;cAEH,EAAO,EAAK;IACV,CAAA;GACP,CAAA,CAER;IAjBqB,EAiBrB,CACN,EACF,CAAA"}
1
+ {"version":3,"file":"ContinuousAxis.js","names":[],"sources":["../../src/common/ContinuousAxis.tsx"],"sourcesContent":["import {BLACK} from '../constants';\nimport {TICK_OFFSET} from '../discrete/constants';\nimport {getTicksAndFormat} from '../scatterplot/utils/getTicksAndFormat';\nimport React from 'react';\nimport type {ScaleLinear, ScaleLogarithmic, ScaleSymLog} from 'd3-scale';\n\ntype Scale = ScaleLinear<number, number> | ScaleLogarithmic<number, number> | ScaleSymLog<number, number>;\ntype Orient = 'left' | 'bottom';\n\nfunction translateX(x: number) {\n return `translate(${x},0)`;\n}\n\nfunction translateY(y: number) {\n return `translate(0,${y})`;\n}\n\nfunction getRotationTransform(orient: 'left' | 'bottom') {\n return orient === 'bottom' ? `translate(0,${TICK_OFFSET})` : `translate(${-TICK_OFFSET},0)`;\n}\n\nfunction getDominantBaseline(orient: 'left' | 'bottom') {\n return orient === 'bottom' ? 'hanging' : 'central';\n}\n\nfunction getTextAnchor( orient: 'left' | 'bottom') {\n return orient === 'bottom' ? 'middle' : 'end';\n}\n\nexport const ContinuousAxis = ({\n scale,\n tickSize = 6,\n tickPadding = TICK_OFFSET,\n orient = 'bottom',\n onlyPositive = false,\n hiddenLabels = false,\n offset = typeof window !== 'undefined' && window.devicePixelRatio > 1 ? 0 : 0.5,\n tickFormat,\n}: {\n scale: Scale;\n tickSize?: number;\n tickPadding?: number;\n offset?: number;\n orient?: Orient;\n hiddenLabels?: boolean;\n onlyPositive?: boolean;\n /** Override the auto-derived label formatter (e.g. percent suffix). */\n tickFormat?: (value: number) => string;\n}) => {\n function number(scale: Scale) {\n return (d: number) => {\n const value = scale(d);\n return value === undefined ? 0 : +value;\n };\n }\n const {ticks: values, format: defaultFormat} = getTicksAndFormat(scale, onlyPositive, orient === 'bottom');\n const format = tickFormat ?? defaultFormat;\n const spacing = Math.max(tickSize, 0) + tickPadding,\n position = (number)(scale.copy());\n\n const transform = orient === 'bottom' ? translateX : translateY;\n const k = orient === 'left' ? -1 : 1;\n\n const lineProps = {\n [(orient === 'left' ? 'x' : 'y') + '2']: k * tickSize,\n };\n\n const textProps = {\n [orient === 'left' ? 'x' : 'y']: k * spacing,\n };\n\n return (\n <g>\n {values.map((tick: number, i: number) => (\n <g className=\"tick\" key={i} transform={transform(position(tick) + offset)}>\n <line stroke={BLACK} {...lineProps} />\n {!hiddenLabels && (\n <g transform={getRotationTransform(orient)}>\n <text\n fill={BLACK}\n fontSize=\"14px\"\n fontWeight=\"500\"\n fontFamily=\"Manrope\"\n dominantBaseline={getDominantBaseline(orient)}\n textAnchor={getTextAnchor(orient)}\n {...textProps}\n >\n {format(tick)}\n </text>\n </g>\n )}\n </g>\n ))}\n </g>\n );\n};\n"],"mappings":";;;;AASA,SAAS,EAAW,GAAW;AAC3B,QAAO,aAAa,EAAE;;AAG1B,SAAS,EAAW,GAAW;AAC3B,QAAO,eAAe,EAAE;;AAG5B,SAAS,EAAqB,GAA2B;AACrD,QAAO,MAAW,WAAW,mBAAgC;;AAGjE,SAAS,EAAoB,GAA2B;AACpD,QAAO,MAAW,WAAW,YAAY;;AAG7C,SAAS,EAAe,GAA2B;AAC/C,QAAQ,MAAW,WAAW,WAAW;;AAG7C,MAAa,KAAkB,EAC5B,UACA,cAAW,GACX,iBAAA,GACA,YAAS,UACT,kBAAe,IACf,kBAAe,IACf,YAAS,OAAO,SAAW,OAAe,OAAO,mBAAmB,IAAI,IAAI,IAC5E,oBAWG;CACF,SAAS,EAAO,GAAc;AAC1B,UAAQ,MAAc;GAClB,IAAM,IAAQ,EAAM,EAAE;AACtB,UAAO,MAAU,KAAA,IAAY,IAAI,CAAC;;;CAG1C,IAAM,EAAC,OAAO,GAAQ,QAAQ,MAAiB,EAAkB,GAAO,GAAc,MAAW,SAAS,EACpG,IAAS,KAAc,GACvB,IAAU,KAAK,IAAI,GAAU,EAAE,GAAG,GACpC,IAAY,EAAQ,EAAM,MAAM,CAAC,EAE/B,IAAY,MAAW,WAAW,IAAa,GAC/C,IAAI,MAAW,SAAS,KAAK,GAE7B,IAAY,IACZ,MAAW,SAAS,MAAM,OAAO,MAAM,IAAI,GAChD,EAEK,IAAY,GACb,MAAW,SAAS,MAAM,MAAM,IAAI,GACxC;AAED,QACI,kBAAC,KAAD,EAAA,UACK,EAAO,KAAK,GAAc,MACvB,kBAAC,KAAD;EAAG,WAAU;EAAe,WAAW,EAAU,EAAS,EAAK,GAAG,EAAO;YAAzE,CACI,kBAAC,QAAD;GAAM,QAAQ;GAAO,GAAI;GAAa,CAAA,EACrC,CAAC,KACE,kBAAC,KAAD;GAAG,WAAW,EAAqB,EAAO;aACtC,kBAAC,QAAD;IACI,MAAA;IACA,UAAS;IACT,YAAW;IACX,YAAW;IACX,kBAAkB,EAAoB,EAAO;IAC7C,YAAY,EAAc,EAAO;IACjC,GAAI;cAEH,EAAO,EAAK;IACV,CAAA;GACP,CAAA,CAER;IAjBqB,EAiBrB,CACN,EACF,CAAA"}
@@ -1,7 +1,18 @@
1
1
  import { LegendData } from './types';
2
2
  interface LegendProps {
3
3
  legendData: LegendData;
4
+ /**
5
+ * Fired when the pointer enters a discrete legend item (with the item's
6
+ * `value`) and again with `null` when it leaves. Lets consumers mirror
7
+ * legend hover into the chart (e.g. dim non-hovered groups).
8
+ */
9
+ onItemHover?: (value: string | null) => void;
10
+ /**
11
+ * Fired when a discrete legend item is clicked. Lets consumers treat
12
+ * legend clicks like clicks on the corresponding chart element.
13
+ */
14
+ onItemClick?: (value: string) => void;
4
15
  }
5
- export declare function Legend({ legendData }: LegendProps): import("react/jsx-runtime").JSX.Element;
16
+ export declare function Legend({ legendData, onItemHover, onItemClick }: LegendProps): import("react/jsx-runtime").JSX.Element;
6
17
  export {};
7
18
  //# sourceMappingURL=Legend.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Legend.d.ts","sourceRoot":"","sources":["../../src/common/Legend.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAc,UAAU,EAAkD,MAAM,SAAS,CAAC;AAMtG,UAAU,WAAW;IACjB,UAAU,EAAE,UAAU,CAAC;CAC1B;AAmGD,wBAAgB,MAAM,CAAC,EAAC,UAAU,EAAC,EAAE,WAAW,2CAuI/C"}
1
+ {"version":3,"file":"Legend.d.ts","sourceRoot":"","sources":["../../src/common/Legend.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAc,UAAU,EAAkD,MAAM,SAAS,CAAC;AAMtG,UAAU,WAAW;IACjB,UAAU,EAAE,UAAU,CAAC;IACvB;;;;OAIG;IACH,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAC7C;;;OAGG;IACH,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACzC;AAmGD,wBAAgB,MAAM,CAAC,EAAC,UAAU,EAAE,WAAW,EAAE,WAAW,EAAC,EAAE,WAAW,2CAqJzE"}
@@ -56,7 +56,8 @@ function p({ aes: e, label: i }) {
56
56
  children: i
57
57
  })] });
58
58
  }
59
- function m({ legendData: t }) {
59
+ function m({ legendData: t, onItemHover: i, onItemClick: c }) {
60
+ let l = !!(i || c);
60
61
  return /* @__PURE__ */ r("g", { children: [/* @__PURE__ */ n("defs", { children: t.items.filter((e) => e.type === "continuous").map((e) => /* @__PURE__ */ n("linearGradient", {
61
62
  id: e.id,
62
63
  gradientTransform: "rotate(90)",
@@ -113,23 +114,27 @@ function m({ legendData: t }) {
113
114
  y: o,
114
115
  children: t.title
115
116
  }),
116
- t.values.map((i, o) => /* @__PURE__ */ r("g", {
117
- transform: `translate(0, ${o * (a + 4)})`,
117
+ t.values.map((o, s) => /* @__PURE__ */ r("g", {
118
+ transform: `translate(0, ${s * (a + 4)})`,
119
+ onMouseEnter: i ? () => i(o) : void 0,
120
+ onMouseLeave: i ? () => i(null) : void 0,
121
+ onClick: c ? () => c(o) : void 0,
122
+ style: l ? { cursor: "pointer" } : void 0,
118
123
  children: [/* @__PURE__ */ n("rect", {
119
124
  x: "0",
120
125
  y: "0",
121
126
  width: a,
122
127
  height: a,
123
- fill: t.scale(i),
128
+ fill: t.scale(o),
124
129
  rx: "1",
125
130
  ry: "1",
126
131
  stroke: e
127
132
  }), /* @__PURE__ */ n("text", {
128
133
  x: a + 8,
129
134
  y: 10,
130
- children: t.labels[i] ?? i
135
+ children: t.labels[o] ?? o
131
136
  })]
132
- }, i)),
137
+ }, o)),
133
138
  !1
134
139
  ]
135
140
  }, t.id);
@@ -145,6 +150,9 @@ function m({ legendData: t }) {
145
150
  }),
146
151
  t.values.map((e, r) => /* @__PURE__ */ n("g", {
147
152
  transform: `translate(0, ${r * (a + 4)})`,
153
+ onMouseEnter: i ? () => i(e) : void 0,
154
+ onMouseLeave: i ? () => i(null) : void 0,
155
+ style: i ? { cursor: "pointer" } : void 0,
148
156
  children: /* @__PURE__ */ n(f, {
149
157
  aes: t.scale(e),
150
158
  label: t.labels[e],
@@ -1 +1 @@
1
- {"version":3,"file":"Legend.js","names":[],"sources":["../../src/common/Legend.tsx"],"sourcesContent":["import { color } from 'd3-color';\nimport { BLACK } from '../constants';\nimport type { AesItem, LineShape } from '../types';\nimport { getPointShape } from '../utils/getPointShape';\nimport type { DotAesItem, LegendData, LegendItemDiscreteMultiAes, LegendItemGradient } from './types';\n\nconst LEGEND_ITEM_SIZE = 12;\nconst TITLE_POSITION = -12;\nconst COLOR_ITEM_WIDTH_C = 14;\n\ninterface LegendProps {\n legendData: LegendData;\n}\n\nfunction getLineShapePath(lineShape:LineShape|null = null):string {\n if (lineShape === 'dashed') {\n return 'M1 11.25H6V12.75H1V11.25ZM9.5 11.25H14.5V12.75H9.5V11.25ZM18 11.25H23V12.75H18V11.25Z';\n }\n if (lineShape === 'dotted') {\n return 'M2.75 11.25H1.25V12.75H2.75V11.25Z M11.25 11.25H12.75V12.75H11.25V11.25Z M22.75 11.25H21.25V12.75H22.75V11.25Z M7.75 11.25H6.25V12.75H7.75V11.25Z M16.25 11.25H17.75V12.75H16.25V11.25Z';\n }\n if (lineShape === 'longdash') {\n return 'M1 11.25H10V12.75H1V11.25ZM14 11.25H23V12.75H14V11.25Z';\n }\n if (lineShape === 'dotdash') {\n return 'M1 11.25H2.5V12.75H1V11.25ZM17 12.75H7V11.25H17V12.75ZM21.5 12.75V11.25H23V12.75H21.5Z';\n }\n if (lineShape === 'twodash') {\n return 'M1 11.25H4V12.75H1V11.25ZM17.0261 12.75H7V11.25H17.0261V12.75ZM20 12.75V11.25H23V12.75H20Z';\n }\n return 'M1 11.25H23V12.75H1V11.25Z';\n}\n\nconst POINT_SIZE = 3;\nconst LINE_WIDTH = 24;\n\nfunction getAesItemStroke(fillColor?:string, lineColor?:string) {\n if (fillColor === 'transparent') {\n return BLACK;\n }\n // black border for white square if fill color is white\n const fill = color(fillColor ?? lineColor ?? '');\n if (fill && fill.formatHex() === '#ffffff') {\n return BLACK;\n }\n return fillColor ?? lineColor;\n}\nfunction AesLegendItem({ aes, label, usedAes }: { aes: AesItem; label: string, usedAes: LegendItemDiscreteMultiAes['usedAes'] }) {\n const needRenderLine = usedAes.lineShape;\n const needRenderDot = usedAes.dotShape;\n const needRenderRect = usedAes.fillColor ||\n (usedAes.lineColor && !usedAes.lineShape) ||\n (usedAes.dotFill && !usedAes.dotShape);\n\n const shape = needRenderDot ? getPointShape(\n aes.dotShape ?? '21',\n POINT_SIZE,\n needRenderRect ? BLACK : aes.dotFill ?? BLACK\n ) : null;\n\n const lineOffset = (needRenderDot && needRenderLine ? 2 * LEGEND_ITEM_SIZE : 0 ) - 6;\n const textOffset = needRenderLine ? lineOffset + LINE_WIDTH + 8 : LEGEND_ITEM_SIZE + 8;\n return (\n <g>\n {needRenderRect && (\n <rect\n width={LEGEND_ITEM_SIZE}\n height={LEGEND_ITEM_SIZE}\n stroke={getAesItemStroke(aes.fillColor, aes.lineColor)}\n fill={aes.fillColor ?? aes.lineColor}\n rx=\"1\"\n ry=\"1\"\n />\n )}\n {needRenderDot && <g transform={`translate(${LEGEND_ITEM_SIZE / 2},${LEGEND_ITEM_SIZE / 2})`}>\n {shape}\n </g>}\n {needRenderLine && (\n <path\n transform={`translate(${lineOffset},-5)`}\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d={getLineShapePath(aes.lineShape)}\n fill={aes.lineColor}\n />\n )}\n <text\n x={textOffset}\n y={LEGEND_ITEM_SIZE / 2}\n dominantBaseline=\"central\"\n fontWeight={500}\n >\n {label}\n </text>\n </g>\n );\n}\n\nfunction DotAesItemElement({aes, label}: {aes: DotAesItem; label: string}) {\n const shape = getPointShape(aes.shape, aes.size, aes.color);\n\n return (\n <g>\n <g transform={`translate(${LEGEND_ITEM_SIZE / 2},${LEGEND_ITEM_SIZE / 2})`}>{shape}</g>\n <text x={LEGEND_ITEM_SIZE + 8} y={LEGEND_ITEM_SIZE / 2} dominantBaseline=\"central\" fontWeight={500}>\n {label}\n </text>\n </g>\n );\n}\n\nexport function Legend({legendData}: LegendProps) {\n const debug = false;\n const continuousItems= legendData.items.filter((item) => item.type === 'continuous') as LegendItemGradient[];\n return (\n <g>\n <defs>\n {continuousItems.map(item => (\n <linearGradient key={item.id} id={item.id} gradientTransform=\"rotate(90)\">\n {item.scale.domain().reverse().map(value => {\n const domain = item.scale.domain();\n const range = domain[domain.length - 1] - domain[0];\n const percent = range > 0 ? 100 - (value - domain[0]) / range * 100 : 0;\n return (\n <stop\n key={value}\n offset={`${percent}%`}\n stopColor={item.scale(value)}\n />\n );\n })}\n </linearGradient>\n ))}\n </defs>\n {legendData.items.map(item => {\n if (item.type === 'continuous') {\n return (\n <g key={item.id} transform={`translate(${item.left},${item.top})`} fontSize=\"14px\">\n <text fontWeight={500} fontSize=\"14px\" y={TITLE_POSITION}>{item.title}</text>\n <rect\n x=\"0\"\n y=\"0\"\n width={COLOR_ITEM_WIDTH_C}\n height={item.height}\n stroke={BLACK}\n fill={`url(#${item.id})`}\n />\n <g transform={`translate(${COLOR_ITEM_WIDTH_C},0)`}>\n {item.values.map(value => {\n const y = item.tickPositionScale(value) ?? 0;\n return (\n <g key={value} transform={`translate(0,${y})`}>\n <line x1=\"0\" x2={-4} stroke={BLACK} />\n <text x={8} y={4}>{value}</text>\n </g>\n );\n })}\n </g>\n {debug && <rect width={item.width} height={item.height} fill=\"none\" stroke=\"black\"/>}\n </g>\n );\n }\n if (item.type === 'discreteColor') {\n return (\n <g key={item.id} transform={`translate(${item.left},${item.top})`} fontSize=\"14px\">\n <text fontWeight={500} y={TITLE_POSITION}>{item.title}</text>\n {item.values.map((value, idx) => {\n return <g key={value} transform={`translate(0, ${idx * (LEGEND_ITEM_SIZE + 4)})`}>\n <rect\n x=\"0\"\n y=\"0\"\n width={LEGEND_ITEM_SIZE}\n height={LEGEND_ITEM_SIZE}\n fill={item.scale(value)}\n rx=\"1\"\n ry=\"1\"\n stroke={BLACK}\n />\n <text x={LEGEND_ITEM_SIZE + 8} y={10}>{item.labels[value] ?? value}</text>\n </g>;\n })}\n {debug && <rect width={item.width} height={item.height} fill=\"none\" stroke=\"black\"/>}\n </g>\n );\n }\n if (item.type === 'discreteMulti') {\n return (\n <g key={item.id} transform={`translate(${item.left},${item.top})`} fontSize=\"14px\" fontWeight={500}>\n <text fontWeight={600} y={TITLE_POSITION}>\n {item.title}\n </text>\n {item.values.map((value, idx) => {\n return (\n <g key={value} transform={`translate(0, ${idx * (LEGEND_ITEM_SIZE + 4)})`}>\n <AesLegendItem\n aes={item.scale(value)}\n label={item.labels[value]}\n usedAes={item.usedAes}\n />\n </g>\n );\n })}\n {debug && <rect width={item.width} height={item.height} fill=\"none\" stroke=\"black\" />}\n </g>\n );\n }\n if (item.type === 'dots') {\n return (\n <g key={item.id} transform={`translate(${item.left},${item.top})`} fontSize=\"14px\" fontWeight={500}>\n <text fontWeight={500} y={TITLE_POSITION}>\n {item.title}\n </text>\n {item.values.map((value, idx) => {\n return (\n <g key={value} transform={`translate(0, ${idx * (LEGEND_ITEM_SIZE + 4)})`}>\n <DotAesItemElement aes={item.scale(value)} label={item.labels[value]} />\n </g>\n );\n })}\n {debug && <rect width={item.width} height={item.height} fill=\"none\" stroke=\"black\" />}\n </g>\n );\n }\n if (item.type === 'size') {\n const size = item.height / item.values.length;\n return (\n <g key={item.id} transform={`translate(${item.left},${item.top})`} fontSize=\"14px\" fontWeight={500}>\n <text fontWeight={500} y={TITLE_POSITION}>\n {item.title}\n </text>\n {item.values.map((value, idx) => {\n const r = item.scale(value);\n return (\n <g key={value} transform={`translate(0, ${idx * size})`}>\n <circle r={r} cx={size / 2} cy={size / 2} fill=\"none\" stroke={BLACK} strokeWidth={1} />\n <text x={size + 4} y={size / 2} alignmentBaseline=\"central\">{item.labels[value]}</text>\n </g>\n );\n })}\n {debug && <rect width={item.width} height={item.height} fill=\"none\" stroke=\"black\" />}\n </g>\n );\n }\n })}\n </g>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"Legend.js","names":[],"sources":["../../src/common/Legend.tsx"],"sourcesContent":["import { color } from 'd3-color';\nimport { BLACK } from '../constants';\nimport type { AesItem, LineShape } from '../types';\nimport { getPointShape } from '../utils/getPointShape';\nimport type { DotAesItem, LegendData, LegendItemDiscreteMultiAes, LegendItemGradient } from './types';\n\nconst LEGEND_ITEM_SIZE = 12;\nconst TITLE_POSITION = -12;\nconst COLOR_ITEM_WIDTH_C = 14;\n\ninterface LegendProps {\n legendData: LegendData;\n /**\n * Fired when the pointer enters a discrete legend item (with the item's\n * `value`) and again with `null` when it leaves. Lets consumers mirror\n * legend hover into the chart (e.g. dim non-hovered groups).\n */\n onItemHover?: (value: string | null) => void;\n /**\n * Fired when a discrete legend item is clicked. Lets consumers treat\n * legend clicks like clicks on the corresponding chart element.\n */\n onItemClick?: (value: string) => void;\n}\n\nfunction getLineShapePath(lineShape:LineShape|null = null):string {\n if (lineShape === 'dashed') {\n return 'M1 11.25H6V12.75H1V11.25ZM9.5 11.25H14.5V12.75H9.5V11.25ZM18 11.25H23V12.75H18V11.25Z';\n }\n if (lineShape === 'dotted') {\n return 'M2.75 11.25H1.25V12.75H2.75V11.25Z M11.25 11.25H12.75V12.75H11.25V11.25Z M22.75 11.25H21.25V12.75H22.75V11.25Z M7.75 11.25H6.25V12.75H7.75V11.25Z M16.25 11.25H17.75V12.75H16.25V11.25Z';\n }\n if (lineShape === 'longdash') {\n return 'M1 11.25H10V12.75H1V11.25ZM14 11.25H23V12.75H14V11.25Z';\n }\n if (lineShape === 'dotdash') {\n return 'M1 11.25H2.5V12.75H1V11.25ZM17 12.75H7V11.25H17V12.75ZM21.5 12.75V11.25H23V12.75H21.5Z';\n }\n if (lineShape === 'twodash') {\n return 'M1 11.25H4V12.75H1V11.25ZM17.0261 12.75H7V11.25H17.0261V12.75ZM20 12.75V11.25H23V12.75H20Z';\n }\n return 'M1 11.25H23V12.75H1V11.25Z';\n}\n\nconst POINT_SIZE = 3;\nconst LINE_WIDTH = 24;\n\nfunction getAesItemStroke(fillColor?:string, lineColor?:string) {\n if (fillColor === 'transparent') {\n return BLACK;\n }\n // black border for white square if fill color is white\n const fill = color(fillColor ?? lineColor ?? '');\n if (fill && fill.formatHex() === '#ffffff') {\n return BLACK;\n }\n return fillColor ?? lineColor;\n}\nfunction AesLegendItem({ aes, label, usedAes }: { aes: AesItem; label: string, usedAes: LegendItemDiscreteMultiAes['usedAes'] }) {\n const needRenderLine = usedAes.lineShape;\n const needRenderDot = usedAes.dotShape;\n const needRenderRect = usedAes.fillColor ||\n (usedAes.lineColor && !usedAes.lineShape) ||\n (usedAes.dotFill && !usedAes.dotShape);\n\n const shape = needRenderDot ? getPointShape(\n aes.dotShape ?? '21',\n POINT_SIZE,\n needRenderRect ? BLACK : aes.dotFill ?? BLACK\n ) : null;\n\n const lineOffset = (needRenderDot && needRenderLine ? 2 * LEGEND_ITEM_SIZE : 0 ) - 6;\n const textOffset = needRenderLine ? lineOffset + LINE_WIDTH + 8 : LEGEND_ITEM_SIZE + 8;\n return (\n <g>\n {needRenderRect && (\n <rect\n width={LEGEND_ITEM_SIZE}\n height={LEGEND_ITEM_SIZE}\n stroke={getAesItemStroke(aes.fillColor, aes.lineColor)}\n fill={aes.fillColor ?? aes.lineColor}\n rx=\"1\"\n ry=\"1\"\n />\n )}\n {needRenderDot && <g transform={`translate(${LEGEND_ITEM_SIZE / 2},${LEGEND_ITEM_SIZE / 2})`}>\n {shape}\n </g>}\n {needRenderLine && (\n <path\n transform={`translate(${lineOffset},-5)`}\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d={getLineShapePath(aes.lineShape)}\n fill={aes.lineColor}\n />\n )}\n <text\n x={textOffset}\n y={LEGEND_ITEM_SIZE / 2}\n dominantBaseline=\"central\"\n fontWeight={500}\n >\n {label}\n </text>\n </g>\n );\n}\n\nfunction DotAesItemElement({aes, label}: {aes: DotAesItem; label: string}) {\n const shape = getPointShape(aes.shape, aes.size, aes.color);\n\n return (\n <g>\n <g transform={`translate(${LEGEND_ITEM_SIZE / 2},${LEGEND_ITEM_SIZE / 2})`}>{shape}</g>\n <text x={LEGEND_ITEM_SIZE + 8} y={LEGEND_ITEM_SIZE / 2} dominantBaseline=\"central\" fontWeight={500}>\n {label}\n </text>\n </g>\n );\n}\n\nexport function Legend({legendData, onItemHover, onItemClick}: LegendProps) {\n const interactive = Boolean(onItemHover || onItemClick);\n const debug = false;\n const continuousItems= legendData.items.filter((item) => item.type === 'continuous') as LegendItemGradient[];\n return (\n <g>\n <defs>\n {continuousItems.map(item => (\n <linearGradient key={item.id} id={item.id} gradientTransform=\"rotate(90)\">\n {item.scale.domain().reverse().map(value => {\n const domain = item.scale.domain();\n const range = domain[domain.length - 1] - domain[0];\n const percent = range > 0 ? 100 - (value - domain[0]) / range * 100 : 0;\n return (\n <stop\n key={value}\n offset={`${percent}%`}\n stopColor={item.scale(value)}\n />\n );\n })}\n </linearGradient>\n ))}\n </defs>\n {legendData.items.map(item => {\n if (item.type === 'continuous') {\n return (\n <g key={item.id} transform={`translate(${item.left},${item.top})`} fontSize=\"14px\">\n <text fontWeight={500} fontSize=\"14px\" y={TITLE_POSITION}>{item.title}</text>\n <rect\n x=\"0\"\n y=\"0\"\n width={COLOR_ITEM_WIDTH_C}\n height={item.height}\n stroke={BLACK}\n fill={`url(#${item.id})`}\n />\n <g transform={`translate(${COLOR_ITEM_WIDTH_C},0)`}>\n {item.values.map(value => {\n const y = item.tickPositionScale(value) ?? 0;\n return (\n <g key={value} transform={`translate(0,${y})`}>\n <line x1=\"0\" x2={-4} stroke={BLACK} />\n <text x={8} y={4}>{value}</text>\n </g>\n );\n })}\n </g>\n {debug && <rect width={item.width} height={item.height} fill=\"none\" stroke=\"black\"/>}\n </g>\n );\n }\n if (item.type === 'discreteColor') {\n return (\n <g key={item.id} transform={`translate(${item.left},${item.top})`} fontSize=\"14px\">\n <text fontWeight={500} y={TITLE_POSITION}>{item.title}</text>\n {item.values.map((value, idx) => {\n return <g\n key={value}\n transform={`translate(0, ${idx * (LEGEND_ITEM_SIZE + 4)})`}\n onMouseEnter={onItemHover ? () => onItemHover(value as string) : undefined}\n onMouseLeave={onItemHover ? () => onItemHover(null) : undefined}\n onClick={onItemClick ? () => onItemClick(value as string) : undefined}\n style={interactive ? { cursor: 'pointer' } : undefined}\n >\n <rect\n x=\"0\"\n y=\"0\"\n width={LEGEND_ITEM_SIZE}\n height={LEGEND_ITEM_SIZE}\n fill={item.scale(value)}\n rx=\"1\"\n ry=\"1\"\n stroke={BLACK}\n />\n <text x={LEGEND_ITEM_SIZE + 8} y={10}>{item.labels[value] ?? value}</text>\n </g>;\n })}\n {debug && <rect width={item.width} height={item.height} fill=\"none\" stroke=\"black\"/>}\n </g>\n );\n }\n if (item.type === 'discreteMulti') {\n return (\n <g key={item.id} transform={`translate(${item.left},${item.top})`} fontSize=\"14px\" fontWeight={500}>\n <text fontWeight={600} y={TITLE_POSITION}>\n {item.title}\n </text>\n {item.values.map((value, idx) => {\n return (\n <g\n key={value}\n transform={`translate(0, ${idx * (LEGEND_ITEM_SIZE + 4)})`}\n onMouseEnter={onItemHover ? () => onItemHover(value as string) : undefined}\n onMouseLeave={onItemHover ? () => onItemHover(null) : undefined}\n style={onItemHover ? { cursor: 'pointer' } : undefined}\n >\n <AesLegendItem\n aes={item.scale(value)}\n label={item.labels[value]}\n usedAes={item.usedAes}\n />\n </g>\n );\n })}\n {debug && <rect width={item.width} height={item.height} fill=\"none\" stroke=\"black\" />}\n </g>\n );\n }\n if (item.type === 'dots') {\n return (\n <g key={item.id} transform={`translate(${item.left},${item.top})`} fontSize=\"14px\" fontWeight={500}>\n <text fontWeight={500} y={TITLE_POSITION}>\n {item.title}\n </text>\n {item.values.map((value, idx) => {\n return (\n <g key={value} transform={`translate(0, ${idx * (LEGEND_ITEM_SIZE + 4)})`}>\n <DotAesItemElement aes={item.scale(value)} label={item.labels[value]} />\n </g>\n );\n })}\n {debug && <rect width={item.width} height={item.height} fill=\"none\" stroke=\"black\" />}\n </g>\n );\n }\n if (item.type === 'size') {\n const size = item.height / item.values.length;\n return (\n <g key={item.id} transform={`translate(${item.left},${item.top})`} fontSize=\"14px\" fontWeight={500}>\n <text fontWeight={500} y={TITLE_POSITION}>\n {item.title}\n </text>\n {item.values.map((value, idx) => {\n const r = item.scale(value);\n return (\n <g key={value} transform={`translate(0, ${idx * size})`}>\n <circle r={r} cx={size / 2} cy={size / 2} fill=\"none\" stroke={BLACK} strokeWidth={1} />\n <text x={size + 4} y={size / 2} alignmentBaseline=\"central\">{item.labels[value]}</text>\n </g>\n );\n })}\n {debug && <rect width={item.width} height={item.height} fill=\"none\" stroke=\"black\" />}\n </g>\n );\n }\n })}\n </g>\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"}
@@ -37,11 +37,11 @@ declare class ChartRenderer {
37
37
  createFacetTitles(facetKeys: string[], facetLabels: string[][]): void;
38
38
  createAxisLabels(facetKeys: string[], xAxis: ScatterplotSettingsImpl['chartSettings']['xAxis'], yAxis: ScatterplotSettingsImpl['chartSettings']['xAxis'], discreteAxisDataX: DiscreteAxisData, discreteAxisDataY: DiscreteAxisData): void;
39
39
  updateMargins(facetKeys: string[]): void;
40
- updateLegendSize(legend: ScatterplotSettingsImpl['chartSettings']['legend'], legendInfo: ScatterplotLegendInfo, grouping: ColumnName[], layers: ScatterplotLayer[]): void;
40
+ updateLegendSize(legend: ScatterplotSettingsImpl['chartSettings']['legend'], legendInfo: ScatterplotLegendInfo, grouping: ColumnName[], layers: ScatterplotLayer[], additionalCurves: ScatterplotSettingsImpl['additionalCurves'], yColumn: ColumnName): void;
41
41
  render(dataFrame: DataFrame, settingsId: string, chartSettings: ScatterplotSettingsImpl['chartSettings'], facetSettings: ScatterplotSettingsImpl['facetSettings'], facetKeys: string[], facetLabels: string[][], groupedDots: GroupedDots, trendsData: TrendsData | null, keyColumn: ColumnName, onlyPositive: {
42
42
  x: boolean;
43
43
  y: boolean;
44
- }, legendInfo: ScatterplotLegendInfo, layersData: Record<string, ScatterplotLayerData[]>, grouping: ColumnName[], layers: ScatterplotLayer[], trend: ScatterplotSettingsImpl['trend'], discreteAxisDataX: DiscreteAxisData, discreteAxisDataY: DiscreteAxisData, onTooltipHintSwitch: (v: boolean) => void): void;
44
+ }, legendInfo: ScatterplotLegendInfo, layersData: Record<string, ScatterplotLayerData[]>, grouping: ColumnName[], layers: ScatterplotLayer[], trend: ScatterplotSettingsImpl['trend'], discreteAxisDataX: DiscreteAxisData, discreteAxisDataY: DiscreteAxisData, onTooltipHintSwitch: (v: boolean) => void, additionalCurves: ScatterplotSettingsImpl['additionalCurves'], yColumn: ColumnName): void;
45
45
  renderError(message: string): void;
46
46
  }
47
47
  export default ChartRenderer;
@@ -1 +1 @@
1
- {"version":3,"file":"ChartRenderer.d.ts","sourceRoot":"","sources":["../../src/scatterplot/ChartRenderer.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ChartRenderer.d.ts","sourceRoot":"","sources":["../../src/scatterplot/ChartRenderer.tsx"],"names":[],"mappings":"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"}