@milaboratories/graph-maker 1.1.142 → 1.1.143

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 (106) hide show
  1. package/dist/GraphMaker/components/ReorderForm.vue.d.ts +15 -0
  2. package/dist/GraphMaker/components/ReorderForm.vue.d.ts.map +1 -0
  3. package/dist/GraphMaker/components/ReorderForm.vue.js +43 -0
  4. package/dist/GraphMaker/components/ReorderForm.vue.js.map +1 -0
  5. package/dist/GraphMaker/components/ReorderForm.vue2.js +5 -0
  6. package/dist/GraphMaker/components/ReorderForm.vue2.js.map +1 -0
  7. package/dist/GraphMaker/constantsCommon.d.ts +15 -0
  8. package/dist/GraphMaker/constantsCommon.d.ts.map +1 -1
  9. package/dist/GraphMaker/constantsCommon.js +11 -8
  10. package/dist/GraphMaker/constantsCommon.js.map +1 -1
  11. package/dist/GraphMaker/forms/AxesSettingsForm/DiscreteAxesSettingsForm.vue.js.map +1 -1
  12. package/dist/GraphMaker/forms/AxesSettingsForm/ScatterplotAxesSettingsForm.vue.d.ts.map +1 -1
  13. package/dist/GraphMaker/forms/AxesSettingsForm/ScatterplotAxesSettingsForm.vue.js +305 -172
  14. package/dist/GraphMaker/forms/AxesSettingsForm/ScatterplotAxesSettingsForm.vue.js.map +1 -1
  15. package/dist/GraphMaker/index.vue.js +33 -33
  16. package/dist/GraphMaker/index.vue.js.map +1 -1
  17. package/dist/GraphMaker/utils/createChartSettingsForRender/composeBubbleSettings.d.ts +3 -3
  18. package/dist/GraphMaker/utils/createChartSettingsForRender/composeBubbleSettings.d.ts.map +1 -1
  19. package/dist/GraphMaker/utils/createChartSettingsForRender/composeDendroSettings.d.ts +9 -9
  20. package/dist/GraphMaker/utils/createChartSettingsForRender/composeDendroSettings.d.ts.map +1 -1
  21. package/dist/GraphMaker/utils/createChartSettingsForRender/composeDiscreteSettings.d.ts +5 -11
  22. package/dist/GraphMaker/utils/createChartSettingsForRender/composeDiscreteSettings.d.ts.map +1 -1
  23. package/dist/GraphMaker/utils/createChartSettingsForRender/composeHeatmapSettings.d.ts +3 -3
  24. package/dist/GraphMaker/utils/createChartSettingsForRender/composeHeatmapSettings.d.ts.map +1 -1
  25. package/dist/GraphMaker/utils/createChartSettingsForRender/composeHistogramSettings.d.ts +1 -1
  26. package/dist/GraphMaker/utils/createChartSettingsForRender/composeScatterplotSettings.d.ts +31 -5
  27. package/dist/GraphMaker/utils/createChartSettingsForRender/composeScatterplotSettings.d.ts.map +1 -1
  28. package/dist/GraphMaker/utils/createChartSettingsForRender/composeScatterplotSettings.js +56 -53
  29. package/dist/GraphMaker/utils/createChartSettingsForRender/composeScatterplotSettings.js.map +1 -1
  30. package/dist/GraphMaker/utils/createChartSettingsForRender/composeScatterplotUmapSettings.d.ts +1 -7
  31. package/dist/GraphMaker/utils/createChartSettingsForRender/composeScatterplotUmapSettings.d.ts.map +1 -1
  32. package/dist/GraphMaker/utils/createChartSettingsForRender/composeScatterplotUmapSettings.js +13 -13
  33. package/dist/GraphMaker/utils/createChartSettingsForRender/composeScatterplotUmapSettings.js.map +1 -1
  34. package/dist/GraphMaker/utils/createChartSettingsForRender/getAxesDataFromForms.d.ts +6 -4
  35. package/dist/GraphMaker/utils/createChartSettingsForRender/getAxesDataFromForms.d.ts.map +1 -1
  36. package/dist/GraphMaker/utils/createChartSettingsForRender/getAxesDataFromForms.js +42 -13
  37. package/dist/GraphMaker/utils/createChartSettingsForRender/getAxesDataFromForms.js.map +1 -1
  38. package/dist/GraphMaker/utils/loadUniqueValuesToSave.d.ts.map +1 -1
  39. package/dist/GraphMaker/utils/loadUniqueValuesToSave.js +48 -44
  40. package/dist/GraphMaker/utils/loadUniqueValuesToSave.js.map +1 -1
  41. package/dist/node_modules/@milaboratories/miplots4/dist/{discrete/components → common}/BandAxis.js +3 -3
  42. package/dist/node_modules/@milaboratories/miplots4/dist/common/BandAxis.js.map +1 -0
  43. package/dist/node_modules/@milaboratories/miplots4/dist/common/ContinuousGrid.js.map +1 -1
  44. package/dist/node_modules/@milaboratories/miplots4/dist/dendro/ChartRenderer.js +14 -14
  45. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/ChartRenderer.js +197 -270
  46. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/ChartRenderer.js.map +1 -1
  47. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/DiscreteSettingsImpl.js +9 -9
  48. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/components/Chart.js +1 -1
  49. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/components/Chart.js.map +1 -1
  50. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/components/Grid.js.map +1 -1
  51. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/index.js +11 -11
  52. package/dist/node_modules/@milaboratories/miplots4/dist/histogram/ChartRenderer.js +1 -1
  53. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-scale/src/band.js +44 -34
  54. package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-scale/src/band.js.map +1 -1
  55. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/ChartRenderer.js +272 -195
  56. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/ChartRenderer.js.map +1 -1
  57. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/ScatterplotSettingsImpl.js +23 -23
  58. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/ScatterplotSettingsImpl.js.map +1 -1
  59. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/Chart.js +54 -50
  60. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/Chart.js.map +1 -1
  61. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/ChartAxis.js +32 -28
  62. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/ChartAxis.js.map +1 -1
  63. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/ChartLayersData.js.map +1 -1
  64. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/ChartTooltip.js.map +1 -1
  65. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/ChartTrendsData.js +29 -26
  66. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/ChartTrendsData.js.map +1 -1
  67. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/ChartsGroup.js +44 -41
  68. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/ChartsGroup.js.map +1 -1
  69. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/Grid.js +31 -27
  70. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/Grid.js.map +1 -1
  71. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/dots.js.map +1 -1
  72. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/getLayersData.js +29 -18
  73. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/getLayersData.js.map +1 -1
  74. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/index.js +71 -57
  75. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/index.js.map +1 -1
  76. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/linearRegression.js.map +1 -1
  77. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/utils/isNumericScale.js +11 -0
  78. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/utils/isNumericScale.js.map +1 -0
  79. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot-umap/ChartRenderer.js +10 -10
  80. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot-umap/ChartRenderer.js.map +1 -1
  81. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot-umap/SettingsImpl.js.map +1 -1
  82. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot-umap/components/LowerSVG.js +6 -6
  83. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot-umap/components/LowerSVG.js.map +1 -1
  84. package/dist/node_modules/@milaboratories/miplots4/dist/types/common.js +35 -25
  85. package/dist/node_modules/@milaboratories/miplots4/dist/types/common.js.map +1 -1
  86. package/dist/node_modules/@milaboratories/miplots4/dist/types/dendro.js +3 -3
  87. package/dist/node_modules/@milaboratories/miplots4/dist/types/discrete.js +37 -37
  88. package/dist/node_modules/@milaboratories/miplots4/dist/types/discrete.js.map +1 -1
  89. package/dist/node_modules/@milaboratories/miplots4/dist/types/heatmap.js +6 -6
  90. package/dist/node_modules/@milaboratories/miplots4/dist/types/scatterplot-umap.js +7 -7
  91. package/dist/node_modules/@milaboratories/miplots4/dist/types/scatterplot-umap.js.map +1 -1
  92. package/dist/node_modules/@milaboratories/miplots4/dist/utils/createMultilineDiscreteLabels.js +32 -0
  93. package/dist/node_modules/@milaboratories/miplots4/dist/utils/createMultilineDiscreteLabels.js.map +1 -0
  94. package/dist/node_modules/@milaboratories/miplots4/dist/utils/getFacetRowsColumns.js +18 -0
  95. package/dist/node_modules/@milaboratories/miplots4/dist/utils/getFacetRowsColumns.js.map +1 -0
  96. package/dist/node_modules/@milaboratories/miplots4/dist/utils/measureMultilineDiscreteLabels.js +63 -0
  97. package/dist/node_modules/@milaboratories/miplots4/dist/utils/measureMultilineDiscreteLabels.js.map +1 -0
  98. package/dist/node_modules/@milaboratories/miplots4/dist/{discrete/utils → utils}/splitTextByWidth.js +1 -1
  99. package/dist/node_modules/@milaboratories/miplots4/dist/utils/splitTextByWidth.js.map +1 -0
  100. package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/controllersByChartType/scatterplot.js +2 -2
  101. package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/controllersByChartType/scatterplot.js.map +1 -1
  102. package/package.json +3 -3
  103. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/components/BandAxis.js.map +0 -1
  104. package/dist/node_modules/@milaboratories/miplots4/dist/discrete/utils/splitTextByWidth.js.map +0 -1
  105. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/Axis.js +0 -59
  106. package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/Axis.js.map +0 -1
@@ -1,44 +1,48 @@
1
1
  import { j as s } from "../../node_modules/react/jsx-runtime.js";
2
- import { r as p } from "../../_virtual/index.js";
3
- import { DEFAULT_TICKS_SIZE as h, TITLE_LINE as T, TICK_OFFSET as d } from "../constants.js";
4
- import { Axis as x } from "./Axis.js";
5
- const u = p.memo(({
6
- debug: t,
7
- width: m,
8
- height: e,
9
- dimensions: o,
10
- scales: n,
11
- xAxis: f,
12
- yAxis: g,
13
- facetSettings: i,
14
- captionsSizes: r,
15
- onlyPositive: a
2
+ import { r as u } from "../../_virtual/index.js";
3
+ import { DEFAULT_TICKS_SIZE as h, TITLE_LINE as A, TICK_OFFSET as m } from "../constants.js";
4
+ import { ContinuousAxis as b } from "../../common/ContinuousAxis.js";
5
+ import { BandAxis as f } from "../../common/BandAxis.js";
6
+ import { isNumericScale as S } from "../utils/isNumericScale.js";
7
+ const I = u.memo(({
8
+ debug: o,
9
+ width: y,
10
+ height: l,
11
+ dimensions: a,
12
+ scales: i,
13
+ xAxis: n,
14
+ yAxis: r,
15
+ facetSettings: e,
16
+ captionsSizes: c,
17
+ discreteLabelsX: g,
18
+ discreteLabelsY: j,
19
+ onlyPositive: x
16
20
  }) => {
17
- const c = f.showTicks ? h : 0, l = g.showTicks ? h : 0, y = o.chartEdgeSides.includes("left") || !(i != null && i.sharedY), S = o.chartEdgeSides.includes("bottom") || !(i != null && i.sharedX);
21
+ const t = n.showTicks ? h : 0, d = r.showTicks ? h : 0, k = a.chartEdgeSides.includes("left") || !(e != null && e.sharedY), p = a.chartEdgeSides.includes("bottom") || !(e != null && e.sharedX);
18
22
  return /* @__PURE__ */ s.jsxs(s.Fragment, { children: [
19
- S && /* @__PURE__ */ s.jsxs("g", { transform: `translate(0,${e})`, children: [
20
- /* @__PURE__ */ s.jsx(x, { scale: n.x, orient: "bottom", onlyPositive: a.x, tickSize: c }),
21
- t && /* @__PURE__ */ s.jsx(
23
+ p && /* @__PURE__ */ s.jsxs("g", { transform: `translate(0,${l})`, children: [
24
+ S(i.x) ? /* @__PURE__ */ s.jsx(b, { scale: i.x, orient: "bottom", tickSize: t, onlyPositive: x.x }) : /* @__PURE__ */ s.jsx(f, { scale: i.x, orient: "bottom", labels: g, labelsPosition: n.labelsPosition, tickSize: t }),
25
+ o && /* @__PURE__ */ s.jsx(
22
26
  "rect",
23
27
  {
24
28
  x: "0",
25
- y: c + d,
26
- width: m,
27
- height: T,
29
+ y: t + m,
30
+ width: y,
31
+ height: A,
28
32
  fill: "none",
29
33
  stroke: "black"
30
34
  }
31
35
  )
32
36
  ] }),
33
- y && /* @__PURE__ */ s.jsxs("g", { children: [
34
- /* @__PURE__ */ s.jsx(x, { scale: n.y, orient: "left", onlyPositive: a.y, tickSize: l }),
35
- t && /* @__PURE__ */ s.jsx(
37
+ k && /* @__PURE__ */ s.jsxs("g", { children: [
38
+ S(i.y) ? /* @__PURE__ */ s.jsx(b, { scale: i.y, orient: "left", tickSize: t, onlyPositive: x.x }) : /* @__PURE__ */ s.jsx(f, { scale: i.y, orient: "left", labels: j, labelsPosition: r.labelsPosition, tickSize: d }),
39
+ o && /* @__PURE__ */ s.jsx(
36
40
  "rect",
37
41
  {
38
- x: -l - d - r.yAxisCaptionsWidth,
42
+ x: -d - m - c.yAxisCaptionsWidth,
39
43
  y: "0",
40
- width: r.yAxisCaptionsWidth,
41
- height: e,
44
+ width: c.yAxisCaptionsWidth,
45
+ height: l,
42
46
  fill: "none",
43
47
  stroke: "black"
44
48
  }
@@ -47,6 +51,6 @@ const u = p.memo(({
47
51
  ] });
48
52
  });
49
53
  export {
50
- u as ChartAxis
54
+ I as ChartAxis
51
55
  };
52
56
  //# sourceMappingURL=ChartAxis.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ChartAxis.js","sources":["../../../../../../../node_modules/@milaboratories/miplots4/src/scatterplot/components/ChartAxis.tsx"],"sourcesContent":["import { memo } from 'react';\nimport { DEFAULT_TICKS_SIZE, TICK_OFFSET, TITLE_LINE } from '../constants';\nimport type { ScatterplotSettingsImpl } from '../ScatterplotSettingsImpl';\nimport { Axis } from './Axis';\nimport type {\n CaptionsSizes,\n ChartDimensionsData,\n ChartScales\n} from './types';\n\ninterface Props {\n debug?: boolean;\n width: number;\n height: number;\n dimensions: ChartDimensionsData;\n scales: ChartScales;\n xAxis: ScatterplotSettingsImpl['chartSettings']['xAxis'];\n yAxis: ScatterplotSettingsImpl['chartSettings']['yAxis'];\n facetSettings: ScatterplotSettingsImpl['facetSettings'];\n captionsSizes: CaptionsSizes;\n onlyPositive: {x: boolean; y: boolean};\n}\n\nexport const ChartAxis = memo(({\n debug,\n width,\n height,\n dimensions,\n scales,\n xAxis,\n yAxis,\n facetSettings,\n captionsSizes,\n onlyPositive,\n}: Props) => {\n const tickSizeX = xAxis.showTicks ? DEFAULT_TICKS_SIZE : 0;\n const tickSizeY = yAxis.showTicks ? DEFAULT_TICKS_SIZE : 0;\n const needLeftAxis = dimensions.chartEdgeSides.includes('left') || !facetSettings?.sharedY;\n const needBottomAxis = dimensions.chartEdgeSides.includes('bottom') || !facetSettings?.sharedX;\n\n return (\n <>\n {needBottomAxis && (\n <g transform={`translate(0,${height})`}>\n <Axis scale={scales.x} orient=\"bottom\" onlyPositive={onlyPositive.x} tickSize={tickSizeX} />\n {debug && (\n <rect\n x=\"0\"\n y={tickSizeX + TICK_OFFSET}\n width={width}\n height={TITLE_LINE}\n fill=\"none\"\n stroke=\"black\"\n />\n )}\n </g>\n )}\n\n {needLeftAxis && (\n <g>\n <Axis scale={scales.y} orient=\"left\" onlyPositive={onlyPositive.y} tickSize={tickSizeY} />\n {debug && (\n <rect\n x={-tickSizeY - TICK_OFFSET - captionsSizes.yAxisCaptionsWidth}\n y=\"0\"\n width={captionsSizes.yAxisCaptionsWidth}\n height={height}\n fill=\"none\"\n stroke=\"black\"\n />\n )}\n </g>\n )}\n </>\n );\n});\n"],"names":["ChartAxis","memo","debug","width","height","dimensions","scales","xAxis","yAxis","facetSettings","captionsSizes","onlyPositive","tickSizeX","DEFAULT_TICKS_SIZE","tickSizeY","needLeftAxis","needBottomAxis","jsxs","Fragment","jsx","Axis","TICK_OFFSET","TITLE_LINE"],"mappings":";;;;AAuBO,MAAMA,IAAYC,EAAAA,KAAK,CAAC;AAAA,EAC3B,OAAAC;AAAAA,EACA,OAAAC;AAAAA,EACA,QAAAC;AAAAA,EACA,YAAAC;AAAAA,EACA,QAAAC;AAAAA,EACA,OAAAC;AAAAA,EACA,OAAAC;AAAAA,EACA,eAAAC;AAAAA,EACA,eAAAC;AAAAA,EACA,cAAAC;AACJ,MAAa;AACT,QAAMC,IAAYL,EAAM,YAAYM,IAAqB,GACnDC,IAAYN,EAAM,YAAYK,IAAqB,GACnDE,IAAeV,EAAW,eAAe,SAAS,MAAM,KAAK,EAACI,KAAA,QAAAA,EAAe,UAC7EO,IAAiBX,EAAW,eAAe,SAAS,QAAQ,KAAK,EAACI,KAAA,QAAAA,EAAe;AAEvF,SACIQ,gBAAAA,EAAAA,KAAAC,EAAAA,UAAA,EACK,UAAA;AAAA,IAAAF,KACGC,gBAAAA,EAAAA,KAAC,KAAA,EAAE,WAAW,eAAeb,CAAM,KAC/B,UAAA;AAAA,MAAAe,gBAAAA,EAAAA,IAACC,GAAA,EAAK,OAAOd,EAAO,GAAG,QAAO,UAAS,cAAcK,EAAa,GAAG,UAAUC,GAAW;AAAA,MACzFV,KACGiB,gBAAAA,EAAAA;AAAAA,QAAC;AAAA,QAAA;AAAA,UACG,GAAE;AAAA,UACF,GAAGP,IAAYS;AAAAA,UACf,OAAAlB;AAAAA,UACA,QAAQmB;AAAAA,UACR,MAAK;AAAA,UACL,QAAO;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA,GAGnB;AAAA,IAGHP,KAAAA,gBAAAA,EAAAA,KACI,KAAA,EACG,UAAA;AAAA,MAAAI,gBAAAA,EAAAA,IAACC,GAAA,EAAK,OAAOd,EAAO,GAAG,QAAO,QAAO,cAAcK,EAAa,GAAG,UAAUG,GAAW;AAAA,MACvFZ,KACGiB,gBAAAA,EAAAA;AAAAA,QAAC;AAAA,QAAA;AAAA,UACG,GAAG,CAACL,IAAYO,IAAcX,EAAc;AAAA,UAC5C,GAAE;AAAA,UACF,OAAOA,EAAc;AAAA,UACrB,QAAAN;AAAAA,UACA,MAAK;AAAA,UACL,QAAO;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA,GAGnB;AAAA,EAAA,GAER;AAER,CAAC;","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"ChartAxis.js","sources":["../../../../../../../node_modules/@milaboratories/miplots4/src/scatterplot/components/ChartAxis.tsx"],"sourcesContent":["import { memo } from 'react';\nimport { DEFAULT_TICKS_SIZE, TICK_OFFSET, TITLE_LINE } from '../constants';\nimport type { ScatterplotSettingsImpl } from '../ScatterplotSettingsImpl';\nimport type {\n CaptionsSizes,\n ChartDimensionsData,\n ChartScales\n} from './types';\nimport { ContinuousAxis } from '../../common/ContinuousAxis';\nimport { BandAxis } from '../../common/BandAxis';\nimport { isNumericScale } from '../utils/isNumericScale';\nimport type { AxisSettingsDiscrete } from '../../types';\n\ninterface Props {\n debug?: boolean;\n width: number;\n height: number;\n dimensions: ChartDimensionsData;\n scales: ChartScales;\n xAxis: ScatterplotSettingsImpl['chartSettings']['xAxis'];\n yAxis: ScatterplotSettingsImpl['chartSettings']['yAxis'];\n facetSettings: ScatterplotSettingsImpl['facetSettings'];\n captionsSizes: CaptionsSizes;\n discreteLabelsX: Record<string, string[]>;\n discreteLabelsY: Record<string, string[]>;\n onlyPositive: {x: boolean; y: boolean};\n}\n\nexport const ChartAxis = memo(({\n debug,\n width,\n height,\n dimensions,\n scales,\n xAxis,\n yAxis,\n facetSettings,\n captionsSizes,\n discreteLabelsX,\n discreteLabelsY,\n onlyPositive,\n}: Props) => {\n const tickSizeX = xAxis.showTicks ? DEFAULT_TICKS_SIZE : 0;\n const tickSizeY = yAxis.showTicks ? DEFAULT_TICKS_SIZE : 0;\n const needLeftAxis = dimensions.chartEdgeSides.includes('left') || !facetSettings?.sharedY;\n const needBottomAxis = dimensions.chartEdgeSides.includes('bottom') || !facetSettings?.sharedX;\n\n return (\n <>\n {needBottomAxis && (\n <g transform={`translate(0,${height})`}>\n {isNumericScale(scales.x) ? (\n <ContinuousAxis scale={scales.x} orient=\"bottom\" tickSize={tickSizeX} onlyPositive={onlyPositive.x} />\n ): (\n <BandAxis scale={scales.x} orient=\"bottom\" labels={discreteLabelsX} labelsPosition={(xAxis as AxisSettingsDiscrete).labelsPosition} tickSize={tickSizeX} />\n )}\n {debug && (\n <rect\n x=\"0\"\n y={tickSizeX + TICK_OFFSET}\n width={width}\n height={TITLE_LINE}\n fill=\"none\"\n stroke=\"black\"\n />\n )}\n </g>\n )}\n\n {needLeftAxis && (\n <g>\n {isNumericScale(scales.y) ? (\n <ContinuousAxis scale={scales.y} orient=\"left\" tickSize={tickSizeX} onlyPositive={onlyPositive.x} />\n ): (\n <BandAxis scale={scales.y} orient=\"left\" labels={discreteLabelsY} labelsPosition={(yAxis as AxisSettingsDiscrete).labelsPosition} tickSize={tickSizeY} />\n )}\n {debug && (\n <rect\n x={-tickSizeY - TICK_OFFSET - captionsSizes.yAxisCaptionsWidth}\n y=\"0\"\n width={captionsSizes.yAxisCaptionsWidth}\n height={height}\n fill=\"none\"\n stroke=\"black\"\n />\n )}\n </g>\n )}\n </>\n );\n});\n"],"names":["ChartAxis","memo","debug","width","height","dimensions","scales","xAxis","yAxis","facetSettings","captionsSizes","discreteLabelsX","discreteLabelsY","onlyPositive","tickSizeX","DEFAULT_TICKS_SIZE","tickSizeY","needLeftAxis","needBottomAxis","jsxs","Fragment","isNumericScale","jsx","ContinuousAxis","BandAxis","TICK_OFFSET","TITLE_LINE"],"mappings":";;;;;;AA4BO,MAAMA,IAAYC,EAAAA,KAAK,CAAC;AAAA,EAC3B,OAAAC;AAAAA,EACA,OAAAC;AAAAA,EACA,QAAAC;AAAAA,EACA,YAAAC;AAAAA,EACA,QAAAC;AAAAA,EACA,OAAAC;AAAAA,EACA,OAAAC;AAAAA,EACA,eAAAC;AAAAA,EACA,eAAAC;AAAAA,EACA,iBAAAC;AAAAA,EACA,iBAAAC;AAAAA,EACA,cAAAC;AACJ,MAAa;AACT,QAAMC,IAAYP,EAAM,YAAYQ,IAAqB,GACnDC,IAAYR,EAAM,YAAYO,IAAqB,GACnDE,IAAeZ,EAAW,eAAe,SAAS,MAAM,KAAK,EAACI,KAAA,QAAAA,EAAe,UAC7ES,IAAiBb,EAAW,eAAe,SAAS,QAAQ,KAAK,EAACI,KAAA,QAAAA,EAAe;AAEvF,SACIU,gBAAAA,EAAAA,KAAAC,EAAAA,UAAA,EACK,UAAA;AAAA,IAAAF,KACGC,gBAAAA,EAAAA,KAAC,KAAA,EAAE,WAAW,eAAef,CAAM,KAC9B,UAAA;AAAA,MAAAiB,EAAef,EAAO,CAAC,IACpBgB,gBAAAA,EAAAA,IAACC,GAAA,EAAe,OAAOjB,EAAO,GAAG,QAAO,UAAS,UAAUQ,GAAW,cAAcD,EAAa,EAAA,CAAG,IAEpGS,gBAAAA,EAAAA,IAACE,GAAA,EAAS,OAAOlB,EAAO,GAAG,QAAO,UAAS,QAAQK,GAAiB,gBAAiBJ,EAA+B,gBAAgB,UAAUO,GAAW;AAAA,MAE5JZ,KACGoB,gBAAAA,EAAAA;AAAAA,QAAC;AAAA,QAAA;AAAA,UACG,GAAE;AAAA,UACF,GAAGR,IAAYW;AAAAA,UACf,OAAAtB;AAAAA,UACA,QAAQuB;AAAAA,UACR,MAAK;AAAA,UACL,QAAO;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA,GAGnB;AAAA,IAGHT,KAAAA,gBAAAA,EAAAA,KACI,KAAA,EACI,UAAA;AAAA,MAAAI,EAAef,EAAO,CAAC,IACpBgB,gBAAAA,EAAAA,IAACC,GAAA,EAAe,OAAOjB,EAAO,GAAG,QAAO,QAAO,UAAUQ,GAAW,cAAcD,EAAa,EAAA,CAAG,IAElGS,gBAAAA,EAAAA,IAACE,GAAA,EAAS,OAAOlB,EAAO,GAAG,QAAO,QAAO,QAAQM,GAAiB,gBAAiBJ,EAA+B,gBAAgB,UAAUQ,GAAW;AAAA,MAE1Jd,KACGoB,gBAAAA,EAAAA;AAAAA,QAAC;AAAA,QAAA;AAAA,UACG,GAAG,CAACN,IAAYS,IAAcf,EAAc;AAAA,UAC5C,GAAE;AAAA,UACF,OAAOA,EAAc;AAAA,UACrB,QAAAN;AAAAA,UACA,MAAK;AAAA,UACL,QAAO;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA,GAGnB;AAAA,EAAA,GAER;AAER,CAAC;","x_google_ignoreList":[0]}
@@ -1 +1 @@
1
- {"version":3,"file":"ChartLayersData.js","sources":["../../../../../../../node_modules/@milaboratories/miplots4/src/scatterplot/components/ChartLayersData.tsx"],"sourcesContent":["import { curveBasis, line } from 'd3-shape';\nimport { memo, useMemo, useState } from 'react';\nimport { getLineShape } from '../../utils/getLineShape';\nimport { getPointShape } from '../../utils/getPointShape';\nimport { TextMeasurer } from '../../utils/TextMeasurer/TextMeasurer';\nimport type { Dot, GroupedDots } from '../dots';\nimport type { ScatterplotLayerData } from '../getLayersData';\nimport type { Label } from '../utils/getVisibleLabels';\nimport { createLabelPositioner, getLabelMinX, getLabelMinY } from '../utils/getVisibleLabels';\nimport type {\n AesGetters,\n ChartScales\n} from './types';\n\nconst LABEL_OFFSET = 3;\n\ninterface Props {\n width: number;\n height: number;\n scales: ChartScales;\n dotsData: GroupedDots[keyof GroupedDots];\n layersData: ScatterplotLayerData[];\n aesGetters: AesGetters;\n onMouseEnterDot?: (dot: Dot) => void;\n onMouseLeaveDot?: (dot: Dot) => void;\n}\n\nexport const ChartLayersData = memo(({\n width,\n height,\n scales,\n dotsData,\n layersData,\n aesGetters,\n onMouseEnterDot,\n onMouseLeaveDot,\n}: Props) => {\n return layersData.map((layer, idx) => {\n if (layer.type === 'dots') {\n return <ChartLayerDots\n key={layer.type + idx}\n width={width}\n height={height}\n scales={scales}\n dotsData={dotsData}\n layersData={layersData}\n aesGetters={aesGetters}\n onMouseEnterDot={onMouseEnterDot}\n onMouseLeaveDot={onMouseLeaveDot}\n />;\n }\n\n if (layer.type === 'curve') {\n return <ChartCurveLayer\n key={layer.type + idx}\n layer={layer}\n scales={scales}\n aesGetters={aesGetters}\n />;\n }\n });\n});\n\nexport const ChartLayerDots = memo(({\n width,\n height,\n scales,\n dotsData,\n layersData,\n aesGetters,\n onMouseEnterDot,\n onMouseLeaveDot,\n}: Props) => {\n const {dots} = dotsData;\n\n const [activeDot, setActiveDot] = useState<Dot | null>(null);\n const hasLayerDots = useMemo(() => layersData.findIndex(layer => layer.type === 'dots') !== -1, [layersData]);\n \n const labels = useMemo<Label[]>(() =>{\n if (!hasLayerDots) return [];\n return computeLabels(\n dots,\n scales,\n width,\n height,\n aesGetters,\n );\n }, [dots, scales.x, scales.y, width, height, aesGetters, hasLayerDots]);\n\n return (\n <g>\n <ChartDots\n scales={scales}\n dotsData={dotsData}\n aesGetters={aesGetters}\n onMouseEnter={onMouseEnterDot}\n onMouseLeave={onMouseLeaveDot}\n />\n <ChartLabels\n labels={labels}\n onMouseEnter={dot => setActiveDot(dot)}\n onMouseLeave={() => setActiveDot(null)}\n />\n {activeDot && (\n <g\n key=\"activeDot\"\n transform={`translate(${scales.x(activeDot.x)},${scales.y(activeDot.y)})`}\n >\n {getPointShape(\n aesGetters.dotShape(activeDot.idx),\n aesGetters.dotSize(activeDot.idx) + 1,\n 'white',\n 'white'\n )}\n {getPointShape(\n aesGetters.dotShape(activeDot.idx),\n aesGetters.dotSize(activeDot.idx),\n aesGetters.dotColor(activeDot.idx)\n )}\n </g>\n )}\n </g>\n );\n});\n\nexport const ChartCurveLayer = memo(({\n layer,\n scales,\n aesGetters,\n}: {\n layer: ScatterplotLayerData;\n scales: ChartScales;\n aesGetters: AesGetters;\n}) => {\n if (layer.type === 'curve' && !layer.info.smoothing) {\n return layer.geoms.map((curve, idx) => (\n <g key={idx}>\n <polyline\n points={curve.dots.map(d => `${scales.x(d.x)},${scales.y(d.y)}`).join(' ')}\n fill=\"none\"\n stroke={aesGetters.lineColor(curve.dots[0].idx)}\n strokeWidth={layer.info.aes.lineWidth}\n strokeDasharray={getLineShape(layer.info.aes.lineShape)}\n />\n </g>\n ));\n }\n\n if (layer.type === 'curve' && layer.info.smoothing) {\n return layer.geoms.map((curve, idx) => (\n <g key={idx}>\n <path\n d={\n line<Dot>()\n .curve(curveBasis)\n .x((d: Dot) => scales.x(d.x))\n .y((d: Dot) => scales.y(d.y))(curve.dots) ?? ''\n }\n fill=\"none\"\n stroke={aesGetters.lineColor(curve.dots[0].idx)}\n strokeWidth={layer.info.aes.lineWidth}\n strokeDasharray={getLineShape(layer.info.aes.lineShape)}\n />\n </g>\n ));\n }\n});\n\nexport const ChartDots = memo(({\n scales,\n dotsData,\n aesGetters,\n onMouseEnter,\n onMouseLeave,\n}: Pick<Props, 'scales' | 'dotsData' | 'aesGetters'> & {\n onMouseEnter?: (dot: Dot) => void;\n onMouseLeave?: (dot: Dot) => void;\n}) => {\n const {dots} = dotsData;\n\n return (<>\n {dots.map((dot, idx) => {\n return <ChartDot\n key={idx}\n dot={dot}\n scales={scales}\n aesGetters={aesGetters}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n />;\n })}\n </>);\n});\n\nexport const ChartDot = (({\n dot,\n scales,\n aesGetters,\n onMouseEnter,\n onMouseLeave,\n}: {\n dot: Dot;\n scales: ChartScales;\n aesGetters: AesGetters;\n onMouseEnter?: (dot: Dot) => void;\n onMouseLeave?: (dot: Dot) => void;\n}) => {\n return (<g\n transform={`translate(${scales.x(dot.x)},${scales.y(dot.y)})`}\n opacity={dot.dimmed ? 0.3 : 1}\n onMouseOver={() => onMouseEnter?.(dot)}\n onMouseLeave={() => onMouseLeave?.(dot)}\n >\n {getPointShape(\n aesGetters.dotShape(dot.idx),\n aesGetters.dotSize(dot.idx),\n aesGetters.dotColor(dot.idx)\n )}\n </g>);\n});\n\nexport const ChartLabels = memo(({\n labels,\n onMouseEnter,\n onMouseLeave,\n}: {\n labels: Label[];\n onMouseEnter: (dot: Dot ) => void;\n onMouseLeave: (dot: Dot ) => void;\n}) => {\n return (<>\n {labels.map((label, idx) => {\n const {name, height, width} = label;\n return (\n <g key={idx} transform={`translate(${getLabelMinX(label)},${getLabelMinY(label)})`}>\n <rect\n x=\"0\"\n y=\"0\"\n width={width}\n height={height}\n fill=\"transparent\"\n stroke=\"none\"\n onMouseEnter={() => onMouseEnter(label.dot)}\n onMouseLeave={() => onMouseLeave(label.dot)}\n />\n <text\n x={0}\n y={height / 2}\n stroke=\"white\"\n strokeWidth={2}\n paintOrder=\"stroke\"\n style={{pointerEvents: 'none'}}\n fontFamily=\"Manrope\"\n fontSize=\"16px\"\n dominantBaseline=\"middle\"\n >\n {name}\n </text>\n </g>\n );\n })}\n </>);\n});\n\nfunction computeLabels(dots: Dot[], scales: ChartScales, chartWidth: number, chartHeight: number, aesGetters: AesGetters): Label[] {\n const textMeasurer = new TextMeasurer('16px Manrope');\n const getPosition = createLabelPositioner(chartWidth, chartHeight);\n const labels: Label[] = [];\n\n for (let i = 0; i < dots.length; i++) {\n const dot = dots[i];\n if (dot.label == null) {\n continue;\n }\n const name = String(dot.label);\n const metrics = textMeasurer.getTextMetrics(name);\n const x = scales.x(dot.x);\n const y = scales.y(dot.y);\n const w = metrics.width;\n const h = (metrics.actualBoundingBoxAscent) + (metrics.actualBoundingBoxDescent);\n const p = aesGetters.dotSize(dot.idx) + LABEL_OFFSET;\n const position = getPosition(x, y, w, h, p);\n if (!position) {\n continue;\n }\n\n labels.push({\n x,\n y,\n dot,\n name,\n width: w,\n height: h,\n padding: p,\n xPosition: position[0],\n yPosition: position[1],\n } satisfies Label);\n }\n\n return labels;\n}\n"],"names":["LABEL_OFFSET","ChartLayersData","memo","width","height","scales","dotsData","layersData","aesGetters","onMouseEnterDot","onMouseLeaveDot","layer","idx","jsx","ChartLayerDots","ChartCurveLayer","dots","activeDot","setActiveDot","useState","hasLayerDots","useMemo","labels","computeLabels","s","ChartDots","ChartLabels","dot","jsxs","getPointShape","curve","d","getLineShape","line","curveBasis","onMouseEnter","onMouseLeave","Fragment","ChartDot","label","name","getLabelMinX","getLabelMinY","chartWidth","chartHeight","textMeasurer","TextMeasurer","getPosition","createLabelPositioner","i","metrics","x","y","w","h","p","position"],"mappings":";;;;;;;;AAcA,MAAMA,IAAe,GAaRC,IAAkBC,EAAAA,KAAK,CAAC;AAAA,EACjC,OAAAC;AAAAA,EACA,QAAAC;AAAAA,EACA,QAAAC;AAAAA,EACA,UAAAC;AAAAA,EACA,YAAAC;AAAAA,EACA,YAAAC;AAAAA,EACA,iBAAAC;AAAAA,EACA,iBAAAC;AACJ,MACWH,EAAW,IAAI,CAACI,GAAOC,MAAQ;AAClC,MAAID,EAAM,SAAS;AACf,WAAOE,gBAAAA,EAAAA;AAAAA,MAACC;AAAAA,MAAA;AAAA,QAEJ,OAAAX;AAAAA,QACA,QAAAC;AAAAA,QACA,QAAAC;AAAAA,QACA,UAAAC;AAAAA,QACA,YAAAC;AAAAA,QACA,YAAAC;AAAAA,QACA,iBAAAC;AAAAA,QACA,iBAAAC;AAAAA,MAAA;AAAA,MARKC,EAAM,OAAOC;AAAAA,IAAA;AAY1B,MAAID,EAAM,SAAS;AACf,WAAOE,gBAAAA,EAAAA;AAAAA,MAACE;AAAAA,MAAA;AAAA,QAEJ,OAAAJ;AAAAA,QACA,QAAAN;AAAAA,QACA,YAAAG;AAAAA,MAAA;AAAA,MAHKG,EAAM,OAAOC;AAAAA,IAAA;AAM9B,CAAC,CACJ,GAEYE,IAAiBZ,EAAAA,KAAK,CAAC;AAAA,EAChC,OAAAC;AAAAA,EACA,QAAAC;AAAAA,EACA,QAAAC;AAAAA,EACA,UAAAC;AAAAA,EACA,YAAAC;AAAAA,EACA,YAAAC;AAAAA,EACA,iBAAAC;AAAAA,EACA,iBAAAC;AACJ,MAAa;AACT,QAAM,EAAC,MAAAM,EAAAA,IAAQV,GAET,CAACW,GAAWC,CAAY,IAAIC,EAAAA,SAAqB,IAAI,GACrDC,IAAeC,EAAAA,QAAQ,MAAMd,EAAW,UAAU,CAAAI,MAASA,EAAM,SAAS,MAAM,MAAM,IAAI,CAACJ,CAAU,CAAC,GAEtGe,IAASD,EAAAA,QAAiB,MACvBD,IACEG;AAAAA,IACHP;AAAAA,IACAX;AAAAA,IACAF;AAAAA,IACAC;AAAAA,IACAI;AAAAA,EAAA,IANsB,IAQ3B,CAACQ,GAAMX,EAAO,GAAGA,EAAO,GAAGF,GAAOC,GAAQI,GAAYY,CAAY,CAAC;AAEtE,SAAAI,gBAAAA,EAAA,KACK,KAAA,EACG,UAAA;AAAA,IAAAX,gBAAAA,EAAAA;AAAAA,MAACY;AAAAA,MAAA;AAAA,QACG,QAAApB;AAAAA,QACA,UAAAC;AAAAA,QACA,YAAAE;AAAAA,QACA,cAAcC;AAAAA,QACd,cAAcC;AAAAA,MAAA;AAAA,IAAA;AAAA,IAElBG,gBAAAA,EAAAA;AAAAA,MAACa;AAAAA,MAAA;AAAA,QACG,QAAAJ;AAAAA,QACA,cAAc,CAAAK,MAAOT,EAAaS,CAAG;AAAA,QACrC,cAAc,MAAMT,EAAa,IAAI;AAAA,MAAA;AAAA,IAAA;AAAA,IAExCD,KACGW,gBAAAA,EAAAA;AAAAA,MAAC;AAAA,MAAA;AAAA,QAEG,WAAW,aAAavB,EAAO,EAAEY,EAAU,CAAC,CAAC,IAAIZ,EAAO,EAAEY,EAAU,CAAC,CAAC;AAAA,QAErE,UAAA;AAAA,UAAAY;AAAAA,YACGrB,EAAW,SAASS,EAAU,GAAG;AAAA,YACjCT,EAAW,QAAQS,EAAU,GAAG,IAAI;AAAA,YACpC;AAAA,YACA;AAAA,UAAA;AAAA,UAEHY;AAAAA,YACGrB,EAAW,SAASS,EAAU,GAAG;AAAA,YACjCT,EAAW,QAAQS,EAAU,GAAG;AAAA,YAChCT,EAAW,SAASS,EAAU,GAAG;AAAA,UAAA;AAAA,QAAA;AAAA,MACrC;AAAA,MAbI;AAAA,IAAA;AAAA,EAAA,GAgBhB;AAER,CAAC,GAEYF,IAAkBb,EAAAA,KAAK,CAAC;AAAA,EACjC,OAAAS;AAAAA,EACA,QAAAN;AAAAA,EACA,YAAAG;AACJ,MAIM;AACF,MAAIG,EAAM,SAAS,WAAW,CAACA,EAAM,KAAK;AACtC,WAAOA,EAAM,MAAM,IAAI,CAACmB,GAAOlB,4BAC1B,KAAA,EACG,UAAAC,gBAAAA,EAAAA;AAAAA,MAAC;AAAA,MAAA;AAAA,QACG,QAAQiB,EAAM,KAAK,IAAI,OAAK,GAAGzB,EAAO,EAAE0B,EAAE,CAAC,CAAC,IAAI1B,EAAO,EAAE0B,EAAE,CAAC,CAAC,EAAE,EAAE,KAAK,GAAG;AAAA,QACzE,MAAK;AAAA,QACL,QAAQvB,EAAW,UAAUsB,EAAM,KAAK,CAAC,EAAE,GAAG;AAAA,QAC9C,aAAanB,EAAM,KAAK,IAAI;AAAA,QAC5B,iBAAiBqB,EAAarB,EAAM,KAAK,IAAI,SAAS;AAAA,MAAA;AAAA,IAAA,EAAA,GANtDC,CAQR,CACH;AAGL,MAAID,EAAM,SAAS,WAAWA,EAAM,KAAK;AACrC,WAAOA,EAAM,MAAM,IAAI,CAACmB,GAAOlB,4BAC1B,KAAA,EACG,UAAAC,gBAAAA,EAAAA;AAAAA,MAAC;AAAA,MAAA;AAAA,QACG,GACIoB,EAAAA,EACK,MAAMC,CAAU,EAChB,EAAE,CAACH,MAAW1B,EAAO,EAAE0B,EAAE,CAAC,CAAC,EAC3B,EAAE,CAACA,MAAW1B,EAAO,EAAE0B,EAAE,CAAC,CAAC,EAAED,EAAM,IAAI,KAAK;AAAA,QAErD,MAAK;AAAA,QACL,QAAQtB,EAAW,UAAUsB,EAAM,KAAK,CAAC,EAAE,GAAG;AAAA,QAC9C,aAAanB,EAAM,KAAK,IAAI;AAAA,QAC5B,iBAAiBqB,EAAarB,EAAM,KAAK,IAAI,SAAS;AAAA,MAAA;AAAA,IAAA,EAAA,GAXtDC,CAaR,CACH;AAET,CAAC,GAEYa,IAAYvB,EAAAA,KAAK,CAAC;AAAA,EAC3B,QAAAG;AAAAA,EACA,UAAAC;AAAAA,EACA,YAAAE;AAAAA,EACA,cAAA2B;AAAAA,EACA,cAAAC;AACJ,MAGM;AACF,QAAM,EAAC,MAAApB,EAAAA,IAAQV;AAEf,SAAQO,gBAAAA,EAAAA,IAAAwB,EAAAA,UAAA,EACH,UAAArB,EAAK,IAAI,CAACW,GAAKf,MACLC,gBAAAA,EAAAA;AAAAA,IAACyB;AAAAA,IAAA;AAAA,MAEJ,KAAAX;AAAAA,MACA,QAAAtB;AAAAA,MACA,YAAAG;AAAAA,MACA,cAAA2B;AAAAA,MACA,cAAAC;AAAAA,IAAA;AAAA,IALKxB;AAAAA,EAAA,CAOZ,GACL;AACJ,CAAC,GAEY0B,IAAY,CAAC;AAAA,EACtB,KAAAX;AAAAA,EACA,QAAAtB;AAAAA,EACA,YAAAG;AAAAA,EACA,cAAA2B;AAAAA,EACA,cAAAC;AACJ,MAOYvB,gBAAAA,EAAAA;AAAAA,EAAC;AAAA,EAAA;AAAA,IACL,WAAW,aAAaR,EAAO,EAAEsB,EAAI,CAAC,CAAC,IAAItB,EAAO,EAAEsB,EAAI,CAAC,CAAC;AAAA,IAC1D,SAASA,EAAI,SAAS,MAAM;AAAA,IAC5B,aAAa,MAAMQ,KAAA,OAAA,SAAAA,EAAeR,CAAAA;AAAAA,IAClC,cAAc,MAAMS,KAAA,OAAA,SAAAA,EAAeT,CAAAA;AAAAA,IAElC,UAAAE;AAAAA,MACGrB,EAAW,SAASmB,EAAI,GAAG;AAAA,MAC3BnB,EAAW,QAAQmB,EAAI,GAAG;AAAA,MAC1BnB,EAAW,SAASmB,EAAI,GAAG;AAAA,IAAA;AAAA,EAAA;AAC/B,GAIKD,IAAcxB,EAAAA,KAAK,CAAC;AAAA,EAC7B,QAAAoB;AAAAA,EACA,cAAAa;AAAAA,EACA,cAAAC;AACJ,MAKYvB,gBAAAA,EAAAA,IAAAwB,EAAAA,UAAA,EACH,UAAAf,EAAO,IAAI,CAACiB,GAAO3B,MAAQ;AACxB,QAAM,EAAC,MAAA4B,GAAM,QAAApC,GAAS,OAAAD,MAASoC;AAC/B,SACIX,gBAAAA,EAAAA,KAAC,KAAA,EAAY,WAAW,aAAaa,EAAaF,CAAK,CAAC,IAAIG,EAAaH,CAAK,CAAC,KAC3E,UAAA;AAAA,IAAA1B,gBAAAA,EAAAA;AAAAA,MAAC;AAAA,MAAA;AAAA,QACG,GAAE;AAAA,QACF,GAAE;AAAA,QACF,OAAAV;AAAAA,QACA,QAAAC;AAAAA,QACA,MAAK;AAAA,QACL,QAAO;AAAA,QACP,cAAc,MAAM+B,EAAaI,EAAM,GAAG;AAAA,QAC1C,cAAc,MAAMH,EAAaG,EAAM,GAAG;AAAA,MAAA;AAAA,IAAA;AAAA,IAE9C1B,gBAAAA,EAAAA;AAAAA,MAAC;AAAA,MAAA;AAAA,QACG,GAAG;AAAA,QACH,GAAGT,IAAS;AAAA,QACZ,QAAO;AAAA,QACP,aAAa;AAAA,QACb,YAAW;AAAA,QACX,OAAO,EAAC,eAAe,OAAA;AAAA,QACvB,YAAW;AAAA,QACX,UAAS;AAAA,QACT,kBAAiB;AAAA,QAEhB,UAAAoC;AAAAA,MAAA;AAAA,IAAA;AAAA,EAAA,EACL,GAvBI5B,CAwBR;AAER,CAAC,GACL,CACH;AAED,SAASW,EAAcP,GAAaX,GAAqBsC,GAAoBC,GAAqBpC,GAAiC;AAC/H,QAAMqC,IAAe,IAAIC,EAAa,cAAc,GAC9CC,IAAcC,EAAsBL,GAAYC,CAAW,GAC3DtB,IAAkB,CAAA;AAExB,WAAS2B,IAAI,GAAGA,IAAIjC,EAAK,QAAQiC,KAAK;AAClC,UAAMtB,IAAMX,EAAKiC,CAAC;AAClB,QAAItB,EAAI,SAAS;AACb;AAEJ,UAAMa,IAAO,OAAOb,EAAI,KAAK,GACvBuB,IAAUL,EAAa,eAAeL,CAAI,GAC1CW,IAAI9C,EAAO,EAAEsB,EAAI,CAAC,GAClByB,IAAI/C,EAAO,EAAEsB,EAAI,CAAC,GAClB0B,IAAIH,EAAQ,OACZI,IAAKJ,EAAQ,0BAA4BA,EAAQ,0BACjDK,IAAI/C,EAAW,QAAQmB,EAAI,GAAG,IAAI3B,GAClCwD,IAAWT,EAAYI,GAAGC,GAAGC,GAAGC,GAAGC,CAAC;AACrCC,IAAAA,KAILlC,EAAO,KAAK;AAAA,MACR,GAAA6B;AAAAA,MACA,GAAAC;AAAAA,MACA,KAAAzB;AAAAA,MACA,MAAAa;AAAAA,MACA,OAAOa;AAAAA,MACP,QAAQC;AAAAA,MACR,SAASC;AAAAA,MACT,WAAWC,EAAS,CAAC;AAAA,MACrB,WAAWA,EAAS,CAAC;AAAA,IAAA,CACR;AAAA,EACrB;AAEA,SAAOlC;AACX;","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"ChartLayersData.js","sources":["../../../../../../../node_modules/@milaboratories/miplots4/src/scatterplot/components/ChartLayersData.tsx"],"sourcesContent":["import { curveBasis, line } from 'd3-shape';\nimport { memo, useMemo, useState } from 'react';\nimport { getLineShape } from '../../utils/getLineShape';\nimport { getPointShape } from '../../utils/getPointShape';\nimport { TextMeasurer } from '../../utils/TextMeasurer/TextMeasurer';\nimport type { Dot, GroupedDots } from '../dots';\nimport type { ScatterplotLayerData } from '../getLayersData';\nimport type { Label } from '../utils/getVisibleLabels';\nimport { createLabelPositioner, getLabelMinX, getLabelMinY } from '../utils/getVisibleLabels';\nimport type {\n AesGetters,\n ChartScales\n} from './types';\nconst LABEL_OFFSET = 3;\n\ninterface Props {\n width: number;\n height: number;\n scales: ChartScales;\n dotsData: GroupedDots[keyof GroupedDots];\n layersData: ScatterplotLayerData[];\n aesGetters: AesGetters;\n onMouseEnterDot?: (dot: Dot) => void;\n onMouseLeaveDot?: (dot: Dot) => void;\n}\n\ntype PointValue = { valueOf(): number; } & string;\n\nexport const ChartLayersData = memo(({\n width,\n height,\n scales,\n dotsData,\n layersData,\n aesGetters,\n onMouseEnterDot,\n onMouseLeaveDot,\n}: Props) => {\n return layersData.map((layer, idx) => {\n if (layer.type === 'dots') {\n return <ChartLayerDots\n key={layer.type + idx}\n width={width}\n height={height}\n scales={scales}\n dotsData={dotsData}\n layersData={layersData}\n aesGetters={aesGetters}\n onMouseEnterDot={onMouseEnterDot}\n onMouseLeaveDot={onMouseLeaveDot}\n />;\n }\n\n if (layer.type === 'curve') {\n return <ChartCurveLayer\n key={layer.type + idx}\n layer={layer}\n scales={scales}\n aesGetters={aesGetters}\n />;\n }\n });\n});\n\nexport const ChartLayerDots = memo(({\n width,\n height,\n scales,\n dotsData,\n layersData,\n aesGetters,\n onMouseEnterDot,\n onMouseLeaveDot,\n}: Props) => {\n const {dots} = dotsData;\n\n const [activeDot, setActiveDot] = useState<Dot | null>(null);\n const hasLayerDots = useMemo(() => layersData.findIndex(layer => layer.type === 'dots') !== -1, [layersData]);\n \n const labels = useMemo<Label[]>(() =>{\n if (!hasLayerDots) return [];\n return computeLabels(\n dots,\n scales,\n width,\n height,\n aesGetters,\n );\n }, [dots, scales.x, scales.y, width, height, aesGetters, hasLayerDots]);\n\n return (\n <g>\n <ChartDots\n scales={scales}\n dotsData={dotsData}\n aesGetters={aesGetters}\n onMouseEnter={onMouseEnterDot}\n onMouseLeave={onMouseLeaveDot}\n />\n <ChartLabels\n labels={labels}\n onMouseEnter={dot => setActiveDot(dot)}\n onMouseLeave={() => setActiveDot(null)}\n />\n {activeDot && (\n <g\n key=\"activeDot\"\n transform={`translate(${scales.x(activeDot.x as PointValue)},${scales.y(activeDot.y as PointValue) as number})`}\n >\n {getPointShape(\n aesGetters.dotShape(activeDot.idx),\n aesGetters.dotSize(activeDot.idx) + 1,\n 'white',\n 'white'\n )}\n {getPointShape(\n aesGetters.dotShape(activeDot.idx),\n aesGetters.dotSize(activeDot.idx),\n aesGetters.dotColor(activeDot.idx)\n )}\n </g>\n )}\n </g>\n );\n});\n\nexport const ChartCurveLayer = memo(({\n layer,\n scales,\n aesGetters,\n}: {\n layer: ScatterplotLayerData;\n scales: ChartScales;\n aesGetters: AesGetters;\n}) => {\n if (layer.type === 'curve' && !layer.info.smoothing) {\n return layer.geoms.map((curve, idx) => (\n <g key={idx}>\n <polyline\n points={curve.dots.map(d => `${scales.x(d.x as PointValue) as number},${scales.y(d.y as PointValue) as number}`).join(' ')}\n fill=\"none\"\n stroke={aesGetters.lineColor(curve.dots[0].idx)}\n strokeWidth={layer.info.aes.lineWidth}\n strokeDasharray={getLineShape(layer.info.aes.lineShape)}\n />\n </g>\n ));\n }\n\n if (layer.type === 'curve' && layer.info.smoothing) {\n return layer.geoms.map((curve, idx) => (\n <g key={idx}>\n <path\n d={\n line<Dot>()\n .curve(curveBasis)\n .x((d: Dot) => scales.x(d.x as PointValue) as number)\n .y((d: Dot) => scales.y(d.y as PointValue) as number)(curve.dots) ?? ''\n }\n fill=\"none\"\n stroke={aesGetters.lineColor(curve.dots[0].idx)}\n strokeWidth={layer.info.aes.lineWidth}\n strokeDasharray={getLineShape(layer.info.aes.lineShape)}\n />\n </g>\n ));\n }\n});\n\nexport const ChartDots = memo(({\n scales,\n dotsData,\n aesGetters,\n onMouseEnter,\n onMouseLeave,\n}: Pick<Props, 'scales' | 'dotsData' | 'aesGetters'> & {\n onMouseEnter?: (dot: Dot) => void;\n onMouseLeave?: (dot: Dot) => void;\n}) => {\n const {dots} = dotsData;\n\n return (<>\n {dots.map((dot, idx) => {\n return <ChartDot\n key={idx}\n dot={dot}\n scales={scales}\n aesGetters={aesGetters}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n />;\n })}\n </>);\n});\n\nexport const ChartDot = (({\n dot,\n scales,\n aesGetters,\n onMouseEnter,\n onMouseLeave,\n}: {\n dot: Dot;\n scales: ChartScales;\n aesGetters: AesGetters;\n onMouseEnter?: (dot: Dot) => void;\n onMouseLeave?: (dot: Dot) => void;\n}) => {\n return (<g\n transform={`translate(${scales.x(dot.x as PointValue)},${scales.y(dot.y as PointValue)})`}\n opacity={dot.dimmed ? 0.3 : 1}\n onMouseOver={() => onMouseEnter?.(dot)}\n onMouseLeave={() => onMouseLeave?.(dot)}\n >\n {getPointShape(\n aesGetters.dotShape(dot.idx),\n aesGetters.dotSize(dot.idx),\n aesGetters.dotColor(dot.idx)\n )}\n </g>);\n});\n\nexport const ChartLabels = memo(({\n labels,\n onMouseEnter,\n onMouseLeave,\n}: {\n labels: Label[];\n onMouseEnter: (dot: Dot ) => void;\n onMouseLeave: (dot: Dot ) => void;\n}) => {\n return (<>\n {labels.map((label, idx) => {\n const {name, height, width} = label;\n return (\n <g key={idx} transform={`translate(${getLabelMinX(label)},${getLabelMinY(label)})`}>\n <rect\n x=\"0\"\n y=\"0\"\n width={width}\n height={height}\n fill=\"transparent\"\n stroke=\"none\"\n onMouseEnter={() => onMouseEnter(label.dot)}\n onMouseLeave={() => onMouseLeave(label.dot)}\n />\n <text\n x={0}\n y={height / 2}\n stroke=\"white\"\n strokeWidth={2}\n paintOrder=\"stroke\"\n style={{pointerEvents: 'none'}}\n fontFamily=\"Manrope\"\n fontSize=\"16px\"\n dominantBaseline=\"middle\"\n >\n {name}\n </text>\n </g>\n );\n })}\n </>);\n});\n\nfunction computeLabels(dots: Dot[], scales: ChartScales, chartWidth: number, chartHeight: number, aesGetters: AesGetters): Label[] {\n const textMeasurer = new TextMeasurer('16px Manrope');\n const getPosition = createLabelPositioner(chartWidth, chartHeight);\n const labels: Label[] = [];\n\n for (let i = 0; i < dots.length; i++) {\n const dot = dots[i];\n if (dot.label == null) {\n continue;\n }\n const name = String(dot.label);\n const metrics = textMeasurer.getTextMetrics(name);\n const x = scales.x(dot.x as PointValue);\n const y = scales.y(dot.y as PointValue);\n const w = metrics.width;\n const h = (metrics.actualBoundingBoxAscent) + (metrics.actualBoundingBoxDescent);\n const p = aesGetters.dotSize(dot.idx) + LABEL_OFFSET;\n const position = getPosition(x as number, y as number, w, h, p);\n if (!position) {\n continue;\n }\n\n labels.push({\n x: x as number,\n y: y as number,\n dot,\n name,\n width: w,\n height: h,\n padding: p,\n xPosition: position[0],\n yPosition: position[1],\n } satisfies Label);\n }\n\n return labels;\n}\n"],"names":["LABEL_OFFSET","ChartLayersData","memo","width","height","scales","dotsData","layersData","aesGetters","onMouseEnterDot","onMouseLeaveDot","layer","idx","jsx","ChartLayerDots","ChartCurveLayer","dots","activeDot","setActiveDot","useState","hasLayerDots","useMemo","labels","computeLabels","s","ChartDots","ChartLabels","dot","jsxs","getPointShape","curve","d","getLineShape","line","curveBasis","onMouseEnter","onMouseLeave","Fragment","ChartDot","label","name","getLabelMinX","getLabelMinY","chartWidth","chartHeight","textMeasurer","TextMeasurer","getPosition","createLabelPositioner","i","metrics","x","y","w","h","p","position"],"mappings":"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","x_google_ignoreList":[0]}
@@ -1 +1 @@
1
- {"version":3,"file":"ChartTooltip.js","sources":["../../../../../../../node_modules/@milaboratories/miplots4/src/scatterplot/components/ChartTooltip.tsx"],"sourcesContent":["import {format} from 'd3-format';\nimport { memo, useMemo } from 'react';\nimport type { TooltipsData } from '../../common/Tooltip';\nimport { Tooltip } from '../../common/Tooltip';\nimport { useDataFrame } from '../../common/useDataFrame';\nimport type { DataFrame } from '../../DataFrame';\nimport type { ColumnName } from '../../types';\nimport type { Dot } from '../dots';\nimport type { ScatterplotSettingsImpl } from '../ScatterplotSettingsImpl';\nimport {formatColumnValue} from '../utils/formatColumnValue';\nimport { ChartDot } from './ChartLayersData';\nimport type {\n AesGetters,\n ChartDimensionsData,\n ChartScales,\n ChartSizes,\n Margins\n} from './types';\n\ninterface Props {\n tooltipsData: TooltipsData<Dot>;\n dimensions: undefined | ChartDimensionsData;\n scales: undefined | ChartScales;\n keyColumn: ColumnName;\n margins: Margins;\n chartSizes: ChartSizes;\n tooltips: ScatterplotSettingsImpl['chartSettings']['tooltips'];\n aesGetters: AesGetters;\n}\n\nconst ZERO_SIDE_DISTANCES = { left: 0, right: 0, top: 0, bottom: 0 };\n\nexport const ChartTooltip = memo(({\n tooltipsData,\n tooltips,\n keyColumn,\n chartSizes,\n dimensions,\n scales,\n aesGetters,\n}: Props) => {\n const dataFrame = useDataFrame();\n const padding = dimensions?.padding;\n\n const sideDistances = useMemo(() => {\n if (!dimensions || !scales || !padding) {\n return ZERO_SIDE_DISTANCES;\n }\n\n return ({\n left: dimensions.left + padding.left,\n right: chartSizes.totalWidth - (dimensions.left + padding.left),\n top: dimensions.top + padding.top,\n bottom: chartSizes.totalHeight - (dimensions.top + padding.top),\n });\n }, [dimensions, padding, chartSizes]);\n\n if (!dimensions || !scales || !padding || !tooltipsData.selectedData || !tooltips.show) {\n return null;\n }\n\n return (\n <>\n {tooltipsData.fixed && \n <g transform={`translate(${dimensions.left + padding.left}, ${dimensions.top + padding.top})`}>\n <rect width={chartSizes.chartWidth} height={chartSizes.chartHeight} fill=\"rgba(255, 255, 255, 0.8)\"/>\n <ChartDot\n dot={tooltipsData.selectedData}\n scales={scales}\n aesGetters={aesGetters}\n />\n </g>\n }\n <Tooltip\n content={getTooltipContent(dataFrame, tooltipsData.selectedData, tooltips?.content)}\n x={scales.x(tooltipsData.selectedData.x)}\n y={scales.y(tooltipsData.selectedData.y)}\n active\n sideDistances={sideDistances}\n fixed={tooltipsData.fixed}\n onClose={tooltipsData.onClose}\n container={null}\n />\n </>\n );\n});\n\nfunction getTooltipContent(dataFrame: DataFrame, dot: Dot, columnsList: ColumnName[] = []) {\n const lines: string[] = [];\n for (const column of columnsList) {\n const columnFormatter = column?.format ? format(column.format) : undefined;\n lines.push(`${column.label}: ${formatColumnValue(dataFrame, dot.idx, column, columnFormatter)}`);\n }\n return lines;\n}\n"],"names":["ZERO_SIDE_DISTANCES","ChartTooltip","memo","tooltipsData","tooltips","keyColumn","chartSizes","dimensions","scales","aesGetters","dataFrame","useDataFrame","padding","sideDistances","useMemo","jsxs","Fragment","jsx","ChartDot","Tooltip","getTooltipContent","dot","columnsList","lines","column","columnFormatter","format","formatColumnValue"],"mappings":";;;;;;;AA8BA,MAAMA,IAAsB,EAAE,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,QAAQ,EAAA,GAEpDC,IAAeC,EAAAA,KAAK,CAAC;AAAA,EAC9B,cAAAC;AAAAA,EACA,UAAAC;AAAAA,EACA,WAAAC;AAAAA,EACA,YAAAC;AAAAA,EACA,YAAAC;AAAAA,EACA,QAAAC;AAAAA,EACA,YAAAC;AACJ,MAAa;AACT,QAAMC,IAAYC,KACZC,IAAUL,KAAA,OAAA,SAAAA,EAAY,SAEtBM,IAAgBC,EAAAA,QAAQ,MACtB,CAACP,KAAc,CAACC,KAAU,CAACI,IACpBZ,IAGH;AAAA,IACJ,MAAMO,EAAW,OAAOK,EAAQ;AAAA,IAChC,OAAON,EAAW,cAAcC,EAAW,OAAOK,EAAQ;AAAA,IAC1D,KAAKL,EAAW,MAAMK,EAAQ;AAAA,IAC9B,QAAQN,EAAW,eAAeC,EAAW,MAAMK,EAAQ;AAAA,EAAA,GAEhE,CAACL,GAAYK,GAASN,CAAU,CAAC;AAEpC,SAAI,CAACC,KAAc,CAACC,KAAU,CAACI,KAAW,CAACT,EAAa,gBAAgB,CAACC,EAAS,OACvE,OAIPW,gBAAAA,EAAAA,KAAAC,EAAAA,UAAA,EACK,UAAA;AAAA,IAAAb,EAAa,SACVY,gBAAAA,EAAAA,KAAC,KAAA,EAAE,WAAW,aAAaR,EAAW,OAAOK,EAAQ,IAAI,KAAKL,EAAW,MAAMK,EAAQ,GAAG,KACtF,UAAA;AAAA,MAAAK,gBAAAA,EAAAA,IAAC,QAAA,EAAK,OAAOX,EAAW,YAAY,QAAQA,EAAW,aAAa,MAAK,4BAA0B;AAAA,MACnGW,gBAAAA,EAAAA;AAAAA,QAACC;AAAAA,QAAA;AAAA,UACG,KAAKf,EAAa;AAAA,UAClB,QAAAK;AAAAA,UACA,YAAAC;AAAAA,QAAA;AAAA,MAAA;AAAA,IAAA,GAER;AAAA,IAEJQ,gBAAAA,EAAAA;AAAAA,MAACE;AAAAA,MAAA;AAAA,QACG,SAASC,EAAkBV,GAAWP,EAAa,cAAcC,KAAA,OAAA,SAAAA,EAAU,OAAO;AAAA,QAClF,GAAGI,EAAO,EAAEL,EAAa,aAAa,CAAC;AAAA,QACvC,GAAGK,EAAO,EAAEL,EAAa,aAAa,CAAC;AAAA,QACvC,QAAM;AAAA,QACN,eAAAU;AAAAA,QACA,OAAOV,EAAa;AAAA,QACpB,SAASA,EAAa;AAAA,QACtB,WAAW;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA,GAEnB;AAER,CAAC;AAED,SAASiB,EAAkBV,GAAsBW,GAAUC,IAA4B,CAAA,GAAI;AACvF,QAAMC,IAAkB,CAAA;AACxB,aAAWC,KAAUF,GAAa;AAC9B,UAAMG,IAAkBD,KAAA,QAAAA,EAAQ,SAASE,EAAOF,EAAO,MAAM,IAAI;AACjED,IAAAA,EAAM,KAAK,GAAGC,EAAO,KAAK,KAAKG,EAAkBjB,GAAWW,EAAI,KAAKG,GAAQC,CAAe,CAAC,EAAE;AAAA,EACnG;AACA,SAAOF;AACX;","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"ChartTooltip.js","sources":["../../../../../../../node_modules/@milaboratories/miplots4/src/scatterplot/components/ChartTooltip.tsx"],"sourcesContent":["import {format} from 'd3-format';\nimport { memo, useMemo } from 'react';\nimport type { TooltipsData } from '../../common/Tooltip';\nimport { Tooltip } from '../../common/Tooltip';\nimport { useDataFrame } from '../../common/useDataFrame';\nimport type { DataFrame } from '../../DataFrame';\nimport type { ColumnName } from '../../types';\nimport type { Dot } from '../dots';\nimport type { ScatterplotSettingsImpl } from '../ScatterplotSettingsImpl';\nimport {formatColumnValue} from '../utils/formatColumnValue';\nimport { ChartDot } from './ChartLayersData';\nimport type {\n AesGetters,\n ChartDimensionsData,\n ChartScales,\n ChartSizes,\n Margins\n} from './types';\n\ninterface Props {\n tooltipsData: TooltipsData<Dot>;\n dimensions: undefined | ChartDimensionsData;\n scales: undefined | ChartScales;\n keyColumn: ColumnName;\n margins: Margins;\n chartSizes: ChartSizes;\n tooltips: ScatterplotSettingsImpl['chartSettings']['tooltips'];\n aesGetters: AesGetters;\n}\n\nconst ZERO_SIDE_DISTANCES = { left: 0, right: 0, top: 0, bottom: 0 };\n\nexport const ChartTooltip = memo(({\n tooltipsData,\n tooltips,\n keyColumn,\n chartSizes,\n dimensions,\n scales,\n aesGetters,\n}: Props) => {\n const dataFrame = useDataFrame();\n const padding = dimensions?.padding;\n\n const sideDistances = useMemo(() => {\n if (!dimensions || !scales || !padding) {\n return ZERO_SIDE_DISTANCES;\n }\n\n return ({\n left: dimensions.left + padding.left,\n right: chartSizes.totalWidth - (dimensions.left + padding.left),\n top: dimensions.top + padding.top,\n bottom: chartSizes.totalHeight - (dimensions.top + padding.top),\n });\n }, [dimensions, padding, chartSizes]);\n\n if (!dimensions || !scales || !padding || !tooltipsData.selectedData || !tooltips.show) {\n return null;\n }\n\n return (\n <>\n {tooltipsData.fixed && \n <g transform={`translate(${dimensions.left + padding.left}, ${dimensions.top + padding.top})`}>\n <rect width={chartSizes.chartWidth} height={chartSizes.chartHeight} fill=\"rgba(255, 255, 255, 0.8)\"/>\n <ChartDot\n dot={tooltipsData.selectedData}\n scales={scales}\n aesGetters={aesGetters}\n />\n </g>\n }\n <Tooltip\n content={getTooltipContent(dataFrame, tooltipsData.selectedData, tooltips?.content)}\n x={scales.x(tooltipsData.selectedData.x as unknown as { valueOf(): number; } & string) as number}\n y={scales.y(tooltipsData.selectedData.y as unknown as { valueOf(): number; } & string) as number}\n active\n sideDistances={sideDistances}\n fixed={tooltipsData.fixed}\n onClose={tooltipsData.onClose}\n container={null}\n />\n </>\n );\n});\n\nfunction getTooltipContent(dataFrame: DataFrame, dot: Dot, columnsList: ColumnName[] = []) {\n const lines: string[] = [];\n for (const column of columnsList) {\n const columnFormatter = column?.format ? format(column.format) : undefined;\n lines.push(`${column.label}: ${formatColumnValue(dataFrame, dot.idx, column, columnFormatter)}`);\n }\n return lines;\n}\n"],"names":["ZERO_SIDE_DISTANCES","ChartTooltip","memo","tooltipsData","tooltips","keyColumn","chartSizes","dimensions","scales","aesGetters","dataFrame","useDataFrame","padding","sideDistances","useMemo","jsxs","Fragment","jsx","ChartDot","Tooltip","getTooltipContent","dot","columnsList","lines","column","columnFormatter","format","formatColumnValue"],"mappings":";;;;;;;AA8BA,MAAMA,IAAsB,EAAE,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,QAAQ,EAAA,GAEpDC,IAAeC,EAAAA,KAAK,CAAC;AAAA,EAC9B,cAAAC;AAAAA,EACA,UAAAC;AAAAA,EACA,WAAAC;AAAAA,EACA,YAAAC;AAAAA,EACA,YAAAC;AAAAA,EACA,QAAAC;AAAAA,EACA,YAAAC;AACJ,MAAa;AACT,QAAMC,IAAYC,KACZC,IAAUL,KAAA,OAAA,SAAAA,EAAY,SAEtBM,IAAgBC,EAAAA,QAAQ,MACtB,CAACP,KAAc,CAACC,KAAU,CAACI,IACpBZ,IAGH;AAAA,IACJ,MAAMO,EAAW,OAAOK,EAAQ;AAAA,IAChC,OAAON,EAAW,cAAcC,EAAW,OAAOK,EAAQ;AAAA,IAC1D,KAAKL,EAAW,MAAMK,EAAQ;AAAA,IAC9B,QAAQN,EAAW,eAAeC,EAAW,MAAMK,EAAQ;AAAA,EAAA,GAEhE,CAACL,GAAYK,GAASN,CAAU,CAAC;AAEpC,SAAI,CAACC,KAAc,CAACC,KAAU,CAACI,KAAW,CAACT,EAAa,gBAAgB,CAACC,EAAS,OACvE,OAIPW,gBAAAA,EAAAA,KAAAC,EAAAA,UAAA,EACK,UAAA;AAAA,IAAAb,EAAa,SACVY,gBAAAA,EAAAA,KAAC,KAAA,EAAE,WAAW,aAAaR,EAAW,OAAOK,EAAQ,IAAI,KAAKL,EAAW,MAAMK,EAAQ,GAAG,KACtF,UAAA;AAAA,MAAAK,gBAAAA,EAAAA,IAAC,QAAA,EAAK,OAAOX,EAAW,YAAY,QAAQA,EAAW,aAAa,MAAK,4BAA0B;AAAA,MACnGW,gBAAAA,EAAAA;AAAAA,QAACC;AAAAA,QAAA;AAAA,UACG,KAAKf,EAAa;AAAA,UAClB,QAAAK;AAAAA,UACA,YAAAC;AAAAA,QAAA;AAAA,MAAA;AAAA,IAAA,GAER;AAAA,IAEJQ,gBAAAA,EAAAA;AAAAA,MAACE;AAAAA,MAAA;AAAA,QACG,SAASC,EAAkBV,GAAWP,EAAa,cAAcC,KAAA,OAAA,SAAAA,EAAU,OAAO;AAAA,QAClF,GAAGI,EAAO,EAAEL,EAAa,aAAa,CAA+C;AAAA,QACrF,GAAGK,EAAO,EAAEL,EAAa,aAAa,CAA+C;AAAA,QACrF,QAAM;AAAA,QACN,eAAAU;AAAAA,QACA,OAAOV,EAAa;AAAA,QACpB,SAASA,EAAa;AAAA,QACtB,WAAW;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA,GAEnB;AAER,CAAC;AAED,SAASiB,EAAkBV,GAAsBW,GAAUC,IAA4B,CAAA,GAAI;AACvF,QAAMC,IAAkB,CAAA;AACxB,aAAWC,KAAUF,GAAa;AAC9B,UAAMG,IAAkBD,KAAA,QAAAA,EAAQ,SAASE,EAAOF,EAAO,MAAM,IAAI;AACjED,IAAAA,EAAM,KAAK,GAAGC,EAAO,KAAK,KAAKG,EAAkBjB,GAAWW,EAAI,KAAKG,GAAQC,CAAe,CAAC,EAAE;AAAA,EACnG;AACA,SAAOF;AACX;","x_google_ignoreList":[0]}
@@ -1,23 +1,26 @@
1
1
  import { j as n } from "../../node_modules/react/jsx-runtime.js";
2
- import { l as $ } from "../../node_modules/lodash/lodash.js";
3
- import { r as g } from "../../_virtual/index.js";
2
+ import { l as g } from "../../node_modules/lodash/lodash.js";
3
+ import { r as N } from "../../_virtual/index.js";
4
4
  import { numberFormat as i } from "../../utils/numberFormat.js";
5
- const k = g.memo(({
5
+ import { isNumericScale as m } from "../utils/isNumericScale.js";
6
+ const V = N.memo(({
6
7
  width: e,
7
- scales: t,
8
- trendsData: r,
8
+ scales: r,
9
+ trendsData: t,
9
10
  aesGetters: s
10
- }) => r && r.map(({ idx: a, predict: c, getArea: m, bounded: h, xBounds: j, stats: y }, d) => {
11
- const [l, o] = h ? j : t.x.domain(), u = (o - l) / 15, x = c(l), f = c(o);
12
- if (isNaN(x) || isNaN(f))
11
+ }) => t && t.map(({ idx: a, predict: c, getArea: h, bounded: j, xBounds: y, stats: $ }, u) => {
12
+ if (!m(r.x) || !m(r.y))
13
+ return null;
14
+ const [l, o] = j ? y : r.x.domain(), x = (o - l) / 15, d = c(l), f = c(o);
15
+ if (isNaN(d) || isNaN(f))
13
16
  return null;
14
17
  const p = s.trendColor(a);
15
18
  return /* @__PURE__ */ n.jsxs("g", { children: [
16
- /* @__PURE__ */ n.jsx("text", { y: d * 20 + 20, fill: p, x: e - 8, textAnchor: "end", children: C(y) }),
19
+ /* @__PURE__ */ n.jsx("text", { y: u * 20 + 20, fill: p, x: e - 8, textAnchor: "end", children: v($) }),
17
20
  /* @__PURE__ */ n.jsx(
18
21
  "path",
19
22
  {
20
- d: m(t.x, t.y, $.range(l, o + u / 2, u)),
23
+ d: h(r.x, r.y, g.range(l, o + x / 2, x)),
21
24
  fill: p,
22
25
  opacity: 0.2
23
26
  }
@@ -25,41 +28,41 @@ const k = g.memo(({
25
28
  /* @__PURE__ */ n.jsx(
26
29
  "line",
27
30
  {
28
- x1: t.x(l),
29
- x2: t.x(o),
30
- y1: t.y(x),
31
- y2: t.y(f),
31
+ x1: r.x(l),
32
+ x2: r.x(o),
33
+ y1: r.y(d),
34
+ y2: r.y(f),
32
35
  stroke: p
33
36
  }
34
37
  )
35
- ] }, d);
38
+ ] }, u);
36
39
  }));
37
- function N(e) {
40
+ function F(e) {
38
41
  return typeof e.r2 > "u" ? null : /* @__PURE__ */ n.jsxs(n.Fragment, { children: [
39
42
  /* @__PURE__ */ n.jsx("tspan", { children: "R" }),
40
43
  /* @__PURE__ */ n.jsx("tspan", { fontSize: "10px", dy: "-8", children: "2" }),
41
44
  /* @__PURE__ */ n.jsx("tspan", { dy: "8", children: ` = ${i(e.r2)}` })
42
45
  ] });
43
46
  }
44
- function F(e) {
47
+ function C(e) {
45
48
  return typeof e.pValue > "u" ? null : /* @__PURE__ */ n.jsx("tspan", { children: `p-value = ${i(e.pValue)}` });
46
49
  }
47
50
  function b(e) {
48
51
  if (typeof e.coefficients > "u")
49
52
  return null;
50
- const { slope: t, slopeError: r, intercept: s, interceptError: a } = e.coefficients;
51
- return /* @__PURE__ */ n.jsx("tspan", { children: /* @__PURE__ */ n.jsx("tspan", { children: `slope = ${i(t)} ± ${i(r)}, intercept = ${i(s)} ± ${i(a)}` }) });
53
+ const { slope: r, slopeError: t, intercept: s, interceptError: a } = e.coefficients;
54
+ return /* @__PURE__ */ n.jsx("tspan", { children: /* @__PURE__ */ n.jsx("tspan", { children: `slope = ${i(r)} ± ${i(t)}, intercept = ${i(s)} ± ${i(a)}` }) });
52
55
  }
53
- function C(e) {
54
- const t = [N(e), F(e), b(e)].filter(
55
- (r) => r !== null
56
+ function v(e) {
57
+ const r = [F(e), C(e), b(e)].filter(
58
+ (t) => t !== null
56
59
  );
57
- return /* @__PURE__ */ n.jsx(n.Fragment, { children: t.map((r, s) => /* @__PURE__ */ n.jsxs("tspan", { children: [
58
- r,
59
- /* @__PURE__ */ n.jsx("tspan", { children: s < t.length - 1 && ", " })
60
+ return /* @__PURE__ */ n.jsx(n.Fragment, { children: r.map((t, s) => /* @__PURE__ */ n.jsxs("tspan", { children: [
61
+ t,
62
+ /* @__PURE__ */ n.jsx("tspan", { children: s < r.length - 1 && ", " })
60
63
  ] }, s)) });
61
64
  }
62
65
  export {
63
- k as ChartTrendsData
66
+ V as ChartTrendsData
64
67
  };
65
68
  //# sourceMappingURL=ChartTrendsData.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ChartTrendsData.js","sources":["../../../../../../../node_modules/@milaboratories/miplots4/src/scatterplot/components/ChartTrendsData.tsx"],"sourcesContent":["import { range } from 'lodash';\nimport { memo, type ReactElement } from 'react';\nimport { numberFormat } from '../../utils/numberFormat';\nimport type { TrendsData } from '../linearRegression';\nimport type {\n AesGetters,\n ChartScales\n} from './types';\n\ninterface Props {\n trendsData: TrendsData[keyof TrendsData] | null;\n width: number;\n scales: ChartScales;\n aesGetters: AesGetters;\n}\n\nexport const ChartTrendsData = memo(({\n width,\n scales,\n trendsData,\n aesGetters,\n}: Props) => {\n return (trendsData &&\n trendsData.map(({ idx, predict, getArea, bounded, xBounds, stats}, i) => {\n const [minX, maxX] = bounded ? xBounds : scales.x.domain();\n const step = (maxX - minX) / 15;\n const p1 = predict(minX);\n const p2 = predict(maxX);\n if (isNaN(p1) || isNaN(p2)) {\n return null;\n }\n const fillColor = aesGetters.trendColor(idx);\n return (\n <g key={i}>\n <text y={i * 20 + 20} fill={fillColor} x={width - 8} textAnchor=\"end\">\n {formatStats(stats)}\n </text>\n <path\n d={getArea(scales.x, scales.y, range(minX, maxX + step / 2, step))}\n fill={fillColor}\n opacity={0.2}\n />\n <line\n x1={scales.x(minX)}\n x2={scales.x(maxX)}\n y1={scales.y(p1)}\n y2={scales.y(p2)}\n stroke={fillColor}\n />\n </g>\n );\n })\n );\n});\n\nfunction formatR2(stats: TrendsData[keyof TrendsData][number]['stats']) {\n if (typeof stats.r2 === 'undefined') {\n return null;\n }\n return (\n <>\n <tspan>R</tspan>\n <tspan fontSize=\"10px\" dy=\"-8\">\n 2\n </tspan>\n <tspan dy=\"8\">{` = ${numberFormat(stats.r2)}`}</tspan>\n </>\n );\n}\n\nfunction formatPValue(stats: TrendsData[keyof TrendsData][number]['stats']) {\n if (typeof stats.pValue === 'undefined') {\n return null;\n }\n return <tspan>{`p-value = ${numberFormat(stats.pValue)}`}</tspan>;\n}\n\nfunction formatCoefficients(stats: TrendsData[keyof TrendsData][number]['stats']) {\n if (typeof stats.coefficients === 'undefined') {\n return null;\n }\n const {slope, slopeError, intercept, interceptError} = stats.coefficients;\n return (\n <tspan>\n <tspan>\n {`slope = ${numberFormat(slope)} ± ${numberFormat(slopeError)}, intercept = ${numberFormat(intercept)} ± ${numberFormat(interceptError)}`}\n </tspan>\n </tspan>\n );\n}\n\nfunction formatStats(stats: TrendsData[keyof TrendsData][number]['stats']) {\n const items = [formatR2(stats), formatPValue(stats), formatCoefficients(stats)].filter(\n value => value !== null\n ) as unknown as ReactElement[];\n return (\n <>\n {items.map((item, idx) => (\n <tspan key={idx}>\n {item}\n <tspan>{idx < items.length - 1 && ', '}</tspan>\n </tspan>\n ))}\n </>\n );\n}\n\n"],"names":["ChartTrendsData","memo","width","scales","trendsData","aesGetters","idx","predict","getArea","bounded","xBounds","stats","i","minX","maxX","step","p1","p2","fillColor","n","jsx","formatStats","range","formatR2","jsxs","Fragment","numberFormat","formatPValue","formatCoefficients","slope","slopeError","intercept","interceptError","items","value","item"],"mappings":"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","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"ChartTrendsData.js","sources":["../../../../../../../node_modules/@milaboratories/miplots4/src/scatterplot/components/ChartTrendsData.tsx"],"sourcesContent":["import { range } from 'lodash';\nimport { memo, type ReactElement } from 'react';\nimport { numberFormat } from '../../utils/numberFormat';\nimport type { TrendsData } from '../linearRegression';\nimport type {\n AesGetters,\n ChartScales\n} from './types';\nimport { isNumericScale } from '../utils/isNumericScale';\n\ninterface Props {\n trendsData: TrendsData[keyof TrendsData] | null;\n width: number;\n scales: ChartScales;\n aesGetters: AesGetters;\n}\n\nexport const ChartTrendsData = memo(({\n width,\n scales,\n trendsData,\n aesGetters,\n}: Props) => {\n return (trendsData &&\n trendsData.map(({ idx, predict, getArea, bounded, xBounds, stats}, i) => {\n if (!isNumericScale(scales.x) || !isNumericScale(scales.y)) {\n return null;\n }\n const [minX, maxX] = bounded ? xBounds : scales.x.domain();\n const step = (maxX - minX) / 15;\n const p1 = predict(minX);\n const p2 = predict(maxX);\n if (isNaN(p1) || isNaN(p2)) {\n return null;\n }\n const fillColor = aesGetters.trendColor(idx);\n return (\n <g key={i}>\n <text y={i * 20 + 20} fill={fillColor} x={width - 8} textAnchor=\"end\">\n {formatStats(stats)}\n </text>\n <path\n d={getArea(scales.x, scales.y, range(minX, maxX + step / 2, step))}\n fill={fillColor}\n opacity={0.2}\n />\n <line\n x1={scales.x(minX)}\n x2={scales.x(maxX)}\n y1={scales.y(p1)}\n y2={scales.y(p2)}\n stroke={fillColor}\n />\n </g>\n );\n })\n );\n});\n\nfunction formatR2(stats: TrendsData[keyof TrendsData][number]['stats']) {\n if (typeof stats.r2 === 'undefined') {\n return null;\n }\n return (\n <>\n <tspan>R</tspan>\n <tspan fontSize=\"10px\" dy=\"-8\">\n 2\n </tspan>\n <tspan dy=\"8\">{` = ${numberFormat(stats.r2)}`}</tspan>\n </>\n );\n}\n\nfunction formatPValue(stats: TrendsData[keyof TrendsData][number]['stats']) {\n if (typeof stats.pValue === 'undefined') {\n return null;\n }\n return <tspan>{`p-value = ${numberFormat(stats.pValue)}`}</tspan>;\n}\n\nfunction formatCoefficients(stats: TrendsData[keyof TrendsData][number]['stats']) {\n if (typeof stats.coefficients === 'undefined') {\n return null;\n }\n const {slope, slopeError, intercept, interceptError} = stats.coefficients;\n return (\n <tspan>\n <tspan>\n {`slope = ${numberFormat(slope)} ± ${numberFormat(slopeError)}, intercept = ${numberFormat(intercept)} ± ${numberFormat(interceptError)}`}\n </tspan>\n </tspan>\n );\n}\n\nfunction formatStats(stats: TrendsData[keyof TrendsData][number]['stats']) {\n const items = [formatR2(stats), formatPValue(stats), formatCoefficients(stats)].filter(\n value => value !== null\n ) as unknown as ReactElement[];\n return (\n <>\n {items.map((item, idx) => (\n <tspan key={idx}>\n {item}\n <tspan>{idx < items.length - 1 && ', '}</tspan>\n </tspan>\n ))}\n </>\n );\n}\n\n"],"names":["ChartTrendsData","memo","width","scales","trendsData","aesGetters","idx","predict","getArea","bounded","xBounds","stats","i","isNumericScale","minX","maxX","step","p1","p2","fillColor","n","jsx","formatStats","range","formatR2","jsxs","Fragment","numberFormat","formatPValue","formatCoefficients","slope","slopeError","intercept","interceptError","items","value","item"],"mappings":"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","x_google_ignoreList":[0]}
@@ -1,39 +1,40 @@
1
1
  import { j as s } from "../../node_modules/react/jsx-runtime.js";
2
- import { r as P } from "../../_virtual/index.js";
3
- import { ChartsTitle as $ } from "../../common/ChartsTitle.js";
4
- import { ErrorBoundary as b } from "../../common/ErrorBoundary.js";
5
- import A from "../../common/fonts.js";
6
- import { Legend as B } from "../../common/Legend.js";
7
- import { useTooltip as I } from "../../common/Tooltip.js";
8
- import { LEGEND_OFFSET as k } from "../constants.js";
9
- import { Chart as K } from "./Chart.js";
10
- import { ChartTooltip as O } from "./ChartTooltip.js";
11
- function Z({
12
- settingsId: c,
2
+ import { r as G } from "../../_virtual/index.js";
3
+ import { ChartsTitle as P } from "../../common/ChartsTitle.js";
4
+ import { ErrorBoundary as I } from "../../common/ErrorBoundary.js";
5
+ import B from "../../common/fonts.js";
6
+ import { Legend as $ } from "../../common/Legend.js";
7
+ import { useTooltip as k } from "../../common/Tooltip.js";
8
+ import { LEGEND_OFFSET as K } from "../constants.js";
9
+ import { Chart as O } from "./Chart.js";
10
+ import { ChartTooltip as N } from "./ChartTooltip.js";
11
+ function tt({
12
+ settingsId: f,
13
13
  chartSettings: g,
14
14
  chartSizes: e,
15
15
  chartsDimensions: o,
16
16
  facetKeys: a,
17
- facetSettings: f,
17
+ facetSettings: x,
18
18
  scales: r,
19
- groupedDots: x,
19
+ groupedDots: y,
20
20
  legendData: u,
21
21
  trendsData: l,
22
- columnsCount: y,
22
+ columnsCount: w,
23
23
  margins: n,
24
- keyColumn: w,
25
- mainTitle: D,
26
- facetTitles: j,
24
+ keyColumn: D,
25
+ mainTitle: j,
26
+ facetTitles: v,
27
27
  captionsSizes: S,
28
- onlyPositive: v,
29
- layersData: T,
28
+ onlyPositive: T,
29
+ layersData: L,
30
30
  aesGetters: h,
31
- onTooltipHintSwitch: C
31
+ discreteAxesLabels: d,
32
+ onTooltipHintSwitch: b
32
33
  }) {
33
- const i = I(C), { xAxis: E, yAxis: M, title: m, frame: W, legend: H, tooltips: z } = g, d = o[a[0]].padding, F = o[a[y - 1]].padding, G = e.chartsWidth + k, L = d.top, p = P.useMemo(() => Object.fromEntries(
34
+ const i = k(b), { xAxis: C, yAxis: E, title: m, frame: M, legend: W, tooltips: H } = g, c = o[a[0]].padding, z = o[a[w - 1]].padding, A = e.chartsWidth + K, F = c.top, p = G.useMemo(() => Object.fromEntries(
34
35
  a.map((t) => [t, { x: r.x[t], y: r.y[t] }])
35
36
  ), [r.x, r.y, a]);
36
- return /* @__PURE__ */ s.jsx(b, { dataId: c, children: /* @__PURE__ */ s.jsx("div", { style: { position: "relative", width: e.totalWidth, height: e.totalHeight }, children: /* @__PURE__ */ s.jsxs(
37
+ return /* @__PURE__ */ s.jsx(I, { dataId: f, children: /* @__PURE__ */ s.jsx("div", { style: { position: "relative", width: e.totalWidth, height: e.totalHeight }, children: /* @__PURE__ */ s.jsxs(
37
38
  "svg",
38
39
  {
39
40
  xmlns: "http://www.w3.org/2000/svg",
@@ -42,54 +43,56 @@ function Z({
42
43
  height: e.totalHeight,
43
44
  style: { position: "absolute", top: 0, left: 0, zIndex: 0 },
44
45
  children: [
45
- /* @__PURE__ */ s.jsx("defs", { children: A }),
46
+ /* @__PURE__ */ s.jsx("defs", { children: B }),
46
47
  /* @__PURE__ */ s.jsxs("g", { transform: `translate(${n.left},${n.top})`, fontFamily: "Manrope", children: [
47
48
  /* @__PURE__ */ s.jsx(
48
- $,
49
+ P,
49
50
  {
50
- title: D,
51
+ title: j,
51
52
  show: m.show,
52
53
  position: m.position,
53
- leftPadding: d.left,
54
- rightPadding: F.right,
54
+ leftPadding: c.left,
55
+ rightPadding: z.right,
55
56
  chartsWidth: e.chartsWidth
56
57
  }
57
58
  ),
58
59
  a.map((t) => /* @__PURE__ */ s.jsx(
59
- K,
60
+ O,
60
61
  {
61
62
  facetKey: t,
62
63
  scales: p[t],
63
64
  width: e.chartWidth,
64
65
  height: e.chartHeight,
65
66
  dimensions: o[t],
66
- facetSettings: f,
67
- xAxis: E,
68
- yAxis: M,
69
- frameType: W.type,
70
- dotsData: x[t],
67
+ facetSettings: x,
68
+ xAxis: C,
69
+ yAxis: E,
70
+ discreteLabelsX: d.x[t],
71
+ discreteLabelsY: d.y[t],
72
+ frameType: M.type,
73
+ dotsData: y[t],
71
74
  trendsData: l ? l[t] : null,
72
- facetTitle: j[t],
75
+ facetTitle: v[t],
73
76
  captionsSizes: S,
74
- layersData: T[t],
75
- onlyPositive: v,
77
+ layersData: L[t],
78
+ onlyPositive: T,
76
79
  aesGetters: h,
77
80
  onMouseEnterDot: i.onMouseEnter,
78
81
  onMouseLeaveDot: i.onMouseLeave
79
82
  },
80
83
  t
81
84
  )),
82
- H.show && /* @__PURE__ */ s.jsx("g", { transform: `translate(${G},${L})`, children: /* @__PURE__ */ s.jsx(B, { legendData: u }) }),
85
+ W.show && /* @__PURE__ */ s.jsx("g", { transform: `translate(${A},${F})`, children: /* @__PURE__ */ s.jsx($, { legendData: u }) }),
83
86
  /* @__PURE__ */ s.jsx(
84
- O,
87
+ N,
85
88
  {
86
89
  tooltipsData: i,
87
90
  dimensions: o[i.currentFacet],
88
91
  scales: p[i.currentFacet],
89
- keyColumn: w,
92
+ keyColumn: D,
90
93
  margins: n,
91
94
  chartSizes: e,
92
- tooltips: z,
95
+ tooltips: H,
93
96
  aesGetters: h
94
97
  }
95
98
  )
@@ -99,6 +102,6 @@ function Z({
99
102
  ) }) });
100
103
  }
101
104
  export {
102
- Z as ChartsGroup
105
+ tt as ChartsGroup
103
106
  };
104
107
  //# sourceMappingURL=ChartsGroup.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ChartsGroup.js","sources":["../../../../../../../node_modules/@milaboratories/miplots4/src/scatterplot/components/ChartsGroup.tsx"],"sourcesContent":["import { useMemo } from 'react';\nimport { ChartsTitle } from '../../common/ChartsTitle';\nimport { ErrorBoundary } from '../../common/ErrorBoundary';\nimport fonts from '../../common/fonts';\nimport { Legend } from '../../common/Legend';\nimport { useTooltip } from '../../common/Tooltip';\nimport type { LegendData } from '../../common/types';\nimport type { ColumnName } from '../../types';\nimport { LEGEND_OFFSET } from '../constants';\nimport type { Dot, GroupedDots } from '../dots';\nimport type { ScatterplotLayerData } from '../getLayersData';\nimport type { TrendsData } from '../linearRegression';\nimport type { ScatterplotSettingsImpl } from '../ScatterplotSettingsImpl';\nimport { Chart } from './Chart';\nimport { ChartTooltip } from './ChartTooltip';\nimport type {\n AesGetters,\n CaptionsSizes,\n ChartDimensionsData,\n ChartSizes,\n ChartsScales,\n Margins,\n} from './types';\n\ninterface ChartsGroupProps {\n chartSettings: ScatterplotSettingsImpl['chartSettings'];\n facetSettings: ScatterplotSettingsImpl['facetSettings'];\n chartSizes: ChartSizes;\n chartsDimensions: Record<string, ChartDimensionsData>;\n scales: ChartsScales;\n facetKeys: string[];\n settingsId: string;\n groupedDots: GroupedDots;\n legendData: LegendData;\n trendsData: TrendsData | null;\n columnsCount: number;\n margins: Margins;\n keyColumn: ColumnName;\n mainTitle: string[];\n facetTitles: Record<string, string[]>;\n captionsSizes: CaptionsSizes;\n onlyPositive: {x: boolean, y: boolean};\n layersData: Record<string, ScatterplotLayerData[]>;\n aesGetters: AesGetters;\n onTooltipHintSwitch: (v:boolean) => void;\n}\n\nexport function ChartsGroup({\n settingsId,\n chartSettings,\n chartSizes,\n chartsDimensions,\n facetKeys,\n facetSettings,\n scales,\n groupedDots,\n legendData,\n trendsData,\n columnsCount,\n margins,\n keyColumn,\n mainTitle,\n facetTitles,\n captionsSizes,\n onlyPositive,\n layersData,\n aesGetters,\n onTooltipHintSwitch\n}: ChartsGroupProps) {\n const tooltipsData = useTooltip<Dot>(onTooltipHintSwitch);\n \n const {xAxis, yAxis, title, frame, legend, tooltips} = chartSettings;\n\n const leftTopChartPadding = chartsDimensions[facetKeys[0]].padding;\n const rightTopChartPadding = chartsDimensions[facetKeys[columnsCount - 1]].padding;\n\n const legendLeft = chartSizes.chartsWidth + LEGEND_OFFSET;\n const legendTop = leftTopChartPadding.top;\n\n const scalesByFacet = useMemo(() => {\n return Object.fromEntries(\n facetKeys.map(key => [key, {x: scales.x[key], y: scales.y[key]}])\n );\n }, [scales.x, scales.y, facetKeys]);\n\n return (\n <ErrorBoundary dataId={settingsId}>\n <div style={{ position: 'relative', width: chartSizes.totalWidth, height: chartSizes.totalHeight }}>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox={`0 0 ${chartSizes.totalWidth} ${chartSizes.totalHeight}`}\n width={chartSizes.totalWidth}\n height={chartSizes.totalHeight}\n style={{ position: 'absolute', top: 0, left: 0, zIndex: 0 }}\n >\n <defs>{fonts}</defs>\n <g transform={`translate(${margins.left},${margins.top})`} fontFamily=\"Manrope\">\n <ChartsTitle\n title={mainTitle}\n show={title.show}\n position={title.position}\n leftPadding={leftTopChartPadding.left}\n rightPadding={rightTopChartPadding.right}\n chartsWidth={chartSizes.chartsWidth}\n />\n {facetKeys.map(key => (\n <Chart\n key={key}\n facetKey={key}\n scales={scalesByFacet[key]}\n width={chartSizes.chartWidth}\n height={chartSizes.chartHeight}\n dimensions={chartsDimensions[key]}\n facetSettings={facetSettings}\n xAxis={xAxis}\n yAxis={yAxis}\n frameType={frame.type}\n dotsData={groupedDots[key]}\n trendsData={trendsData ? trendsData[key] : null}\n facetTitle={facetTitles[key]}\n captionsSizes={captionsSizes}\n layersData={layersData[key]}\n onlyPositive={onlyPositive}\n aesGetters={aesGetters}\n onMouseEnterDot={tooltipsData.onMouseEnter}\n onMouseLeaveDot={tooltipsData.onMouseLeave}\n />\n ))}\n {legend.show && (\n <g transform={`translate(${legendLeft},${legendTop})`}>\n <Legend legendData={legendData} />\n </g>\n )}\n\n <ChartTooltip\n tooltipsData={tooltipsData}\n dimensions={chartsDimensions[tooltipsData.currentFacet]}\n scales={scalesByFacet[tooltipsData.currentFacet]}\n keyColumn={keyColumn}\n margins={margins}\n chartSizes={chartSizes}\n tooltips={tooltips}\n aesGetters={aesGetters}\n />\n </g>\n </svg>\n </div>\n </ErrorBoundary>\n );\n}\n"],"names":["ChartsGroup","settingsId","chartSettings","chartSizes","chartsDimensions","facetKeys","facetSettings","scales","groupedDots","legendData","trendsData","columnsCount","margins","keyColumn","mainTitle","facetTitles","captionsSizes","onlyPositive","layersData","aesGetters","onTooltipHintSwitch","tooltipsData","useTooltip","xAxis","yAxis","title","frame","legend","tooltips","leftTopChartPadding","rightTopChartPadding","legendLeft","LEGEND_OFFSET","legendTop","scalesByFacet","useMemo","key","r","ErrorBoundary","jsx","jsxs","fonts","ChartsTitle","Chart","Legend","ChartTooltip"],"mappings":"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","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"ChartsGroup.js","sources":["../../../../../../../node_modules/@milaboratories/miplots4/src/scatterplot/components/ChartsGroup.tsx"],"sourcesContent":["import { useMemo } from 'react';\nimport { ChartsTitle } from '../../common/ChartsTitle';\nimport { ErrorBoundary } from '../../common/ErrorBoundary';\nimport fonts from '../../common/fonts';\nimport { Legend } from '../../common/Legend';\nimport { useTooltip } from '../../common/Tooltip';\nimport type { LegendData } from '../../common/types';\nimport type { ColumnName } from '../../types';\nimport { LEGEND_OFFSET } from '../constants';\nimport type { Dot, GroupedDots } from '../dots';\nimport type { ScatterplotLayerData } from '../getLayersData';\nimport type { TrendsData } from '../linearRegression';\nimport type { ScatterplotSettingsImpl } from '../ScatterplotSettingsImpl';\nimport { Chart } from './Chart';\nimport { ChartTooltip } from './ChartTooltip';\nimport type {\n AesGetters,\n CaptionsSizes,\n ChartDimensionsData,\n ChartSizes,\n ChartsScales,\n Margins,\n} from './types';\n\ninterface ChartsGroupProps {\n chartSettings: ScatterplotSettingsImpl['chartSettings'];\n facetSettings: ScatterplotSettingsImpl['facetSettings'];\n chartSizes: ChartSizes;\n chartsDimensions: Record<string, ChartDimensionsData>;\n scales: ChartsScales;\n facetKeys: string[];\n settingsId: string;\n groupedDots: GroupedDots;\n legendData: LegendData;\n trendsData: TrendsData | null;\n columnsCount: number;\n margins: Margins;\n keyColumn: ColumnName;\n mainTitle: string[];\n facetTitles: Record<string, string[]>;\n captionsSizes: CaptionsSizes;\n onlyPositive: {x: boolean, y: boolean};\n layersData: Record<string, ScatterplotLayerData[]>;\n aesGetters: AesGetters;\n discreteAxesLabels: {\n x: Record<string, Record<string, string[]>>,\n y: Record<string, Record<string, string[]>>\n };\n onTooltipHintSwitch: (v:boolean) => void;\n}\n\nexport function ChartsGroup({\n settingsId,\n chartSettings,\n chartSizes,\n chartsDimensions,\n facetKeys,\n facetSettings,\n scales,\n groupedDots,\n legendData,\n trendsData,\n columnsCount,\n margins,\n keyColumn,\n mainTitle,\n facetTitles,\n captionsSizes,\n onlyPositive,\n layersData,\n aesGetters,\n discreteAxesLabels,\n onTooltipHintSwitch\n}: ChartsGroupProps) {\n const tooltipsData = useTooltip<Dot>(onTooltipHintSwitch);\n \n const {xAxis, yAxis, title, frame, legend, tooltips} = chartSettings;\n\n const leftTopChartPadding = chartsDimensions[facetKeys[0]].padding;\n const rightTopChartPadding = chartsDimensions[facetKeys[columnsCount - 1]].padding;\n\n const legendLeft = chartSizes.chartsWidth + LEGEND_OFFSET;\n const legendTop = leftTopChartPadding.top;\n\n const scalesByFacet = useMemo(() => {\n return Object.fromEntries(\n facetKeys.map(key => [key, {x: scales.x[key], y: scales.y[key]}])\n );\n }, [scales.x, scales.y, facetKeys]);\n\n return (\n <ErrorBoundary dataId={settingsId}>\n <div style={{ position: 'relative', width: chartSizes.totalWidth, height: chartSizes.totalHeight }}>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox={`0 0 ${chartSizes.totalWidth} ${chartSizes.totalHeight}`}\n width={chartSizes.totalWidth}\n height={chartSizes.totalHeight}\n style={{ position: 'absolute', top: 0, left: 0, zIndex: 0 }}\n >\n <defs>{fonts}</defs>\n <g transform={`translate(${margins.left},${margins.top})`} fontFamily=\"Manrope\">\n <ChartsTitle\n title={mainTitle}\n show={title.show}\n position={title.position}\n leftPadding={leftTopChartPadding.left}\n rightPadding={rightTopChartPadding.right}\n chartsWidth={chartSizes.chartsWidth}\n />\n {facetKeys.map(key => (\n <Chart\n key={key}\n facetKey={key}\n scales={scalesByFacet[key]}\n width={chartSizes.chartWidth}\n height={chartSizes.chartHeight}\n dimensions={chartsDimensions[key]}\n facetSettings={facetSettings}\n xAxis={xAxis}\n yAxis={yAxis}\n discreteLabelsX={discreteAxesLabels.x[key]}\n discreteLabelsY={discreteAxesLabels.y[key]}\n frameType={frame.type}\n dotsData={groupedDots[key]}\n trendsData={trendsData ? trendsData[key] : null}\n facetTitle={facetTitles[key]}\n captionsSizes={captionsSizes}\n layersData={layersData[key]}\n onlyPositive={onlyPositive}\n aesGetters={aesGetters}\n onMouseEnterDot={tooltipsData.onMouseEnter}\n onMouseLeaveDot={tooltipsData.onMouseLeave}\n />\n ))}\n {legend.show && (\n <g transform={`translate(${legendLeft},${legendTop})`}>\n <Legend legendData={legendData} />\n </g>\n )}\n\n <ChartTooltip\n tooltipsData={tooltipsData}\n dimensions={chartsDimensions[tooltipsData.currentFacet]}\n scales={scalesByFacet[tooltipsData.currentFacet]}\n keyColumn={keyColumn}\n margins={margins}\n chartSizes={chartSizes}\n tooltips={tooltips}\n aesGetters={aesGetters}\n />\n </g>\n </svg>\n </div>\n </ErrorBoundary>\n );\n}\n"],"names":["ChartsGroup","settingsId","chartSettings","chartSizes","chartsDimensions","facetKeys","facetSettings","scales","groupedDots","legendData","trendsData","columnsCount","margins","keyColumn","mainTitle","facetTitles","captionsSizes","onlyPositive","layersData","aesGetters","discreteAxesLabels","onTooltipHintSwitch","tooltipsData","useTooltip","xAxis","yAxis","title","frame","legend","tooltips","leftTopChartPadding","rightTopChartPadding","legendLeft","LEGEND_OFFSET","legendTop","scalesByFacet","useMemo","key","r","ErrorBoundary","jsx","jsxs","fonts","ChartsTitle","Chart","Legend","ChartTooltip"],"mappings":"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","x_google_ignoreList":[0]}