@milaboratories/miplots4 1.0.162 → 1.0.164

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 (72) hide show
  1. package/dist/_virtual/index10.js +5 -2
  2. package/dist/_virtual/index10.js.map +1 -1
  3. package/dist/_virtual/index5.js +2 -5
  4. package/dist/_virtual/index5.js.map +1 -1
  5. package/dist/_virtual/index6.js +4 -4
  6. package/dist/_virtual/index7.js +1 -1
  7. package/dist/_virtual/index8.js +4 -4
  8. package/dist/_virtual/index9.js +3 -3
  9. package/dist/common/BandAxis.d.ts +2 -1
  10. package/dist/common/BandAxis.js +19 -18
  11. package/dist/common/BandAxis.js.map +1 -1
  12. package/dist/common/ContinuousAxis.js +20 -20
  13. package/dist/common/ContinuousAxis.js.map +1 -1
  14. package/dist/common/Legend.js +3 -3
  15. package/dist/common/Legend.js.map +1 -1
  16. package/dist/discrete/DiscreteSettingsImpl.d.ts +6 -4
  17. package/dist/discrete/DiscreteSettingsImpl.js +9 -9
  18. package/dist/discrete/DiscreteSettingsImpl.js.map +1 -1
  19. package/dist/discrete/constants.d.ts +1 -1
  20. package/dist/discrete/constants.js +1 -1
  21. package/dist/discrete/constants.js.map +1 -1
  22. package/dist/discrete/index.js +107 -106
  23. package/dist/discrete/index.js.map +1 -1
  24. package/dist/discrete/layers/bar.js +25 -22
  25. package/dist/discrete/layers/bar.js.map +1 -1
  26. package/dist/discrete/layers/errorbars.js +57 -48
  27. package/dist/discrete/layers/errorbars.js.map +1 -1
  28. package/dist/discrete/layers/lines.js +40 -31
  29. package/dist/discrete/layers/lines.js.map +1 -1
  30. package/dist/discrete/layers/stackedBar.js.map +1 -1
  31. package/dist/discrete/layers/stats/pValueCalculation.js +5 -5
  32. package/dist/heatmap/fillCellsData.js +49 -46
  33. package/dist/heatmap/fillCellsData.js.map +1 -1
  34. package/dist/histogram/ChartRenderer.js +57 -54
  35. package/dist/histogram/ChartRenderer.js.map +1 -1
  36. package/dist/histogram/constants.d.ts +1 -1
  37. package/dist/histogram/constants.js.map +1 -1
  38. package/dist/histogram/index.js +58 -51
  39. package/dist/histogram/index.js.map +1 -1
  40. package/dist/node_modules/.pnpm/scheduler@0.23.2/node_modules/scheduler/index.js +1 -1
  41. package/dist/scatterplot/ChartRenderer.js +89 -89
  42. package/dist/scatterplot/ChartRenderer.js.map +1 -1
  43. package/dist/scatterplot/components/ChartAxis.js +30 -30
  44. package/dist/scatterplot/components/ChartAxis.js.map +1 -1
  45. package/dist/scatterplot/components/ChartAxisTitles.js +22 -22
  46. package/dist/scatterplot/components/ChartAxisTitles.js.map +1 -1
  47. package/dist/scatterplot/constants.d.ts +1 -1
  48. package/dist/scatterplot/constants.js +1 -1
  49. package/dist/scatterplot/constants.js.map +1 -1
  50. package/dist/scatterplot/dots.d.ts +1 -1
  51. package/dist/scatterplot/dots.js +14 -14
  52. package/dist/scatterplot/dots.js.map +1 -1
  53. package/dist/scatterplot/index.js +94 -79
  54. package/dist/scatterplot/index.js.map +1 -1
  55. package/dist/scatterplot-umap/ChartRenderer.d.ts +1 -1
  56. package/dist/scatterplot-umap/ChartRenderer.js +14 -14
  57. package/dist/scatterplot-umap/ChartRenderer.js.map +1 -1
  58. package/dist/scatterplot-umap/components/LowerSVG.js +38 -38
  59. package/dist/scatterplot-umap/components/LowerSVG.js.map +1 -1
  60. package/dist/types/bubble.d.ts +5 -5
  61. package/dist/types/bubble.js +40 -40
  62. package/dist/types/bubble.js.map +1 -1
  63. package/dist/types/common.d.ts +25 -2
  64. package/dist/types/common.js +16 -15
  65. package/dist/types/common.js.map +1 -1
  66. package/dist/types/discrete.d.ts +66 -56
  67. package/dist/types/discrete.js +40 -38
  68. package/dist/types/discrete.js.map +1 -1
  69. package/dist/types/heatmap.d.ts +5 -6
  70. package/dist/types/heatmap.js +29 -29
  71. package/dist/types/heatmap.js.map +1 -1
  72. package/package.json +4 -4
@@ -1,5 +1,8 @@
1
- var e = { exports: {} };
1
+ import { getDefaultExportFromCjs as r } from "./_commonjsHelpers.js";
2
+ import { __require as o } from "../node_modules/.pnpm/@stdlib_stats-wilcoxon@0.2.2/node_modules/@stdlib/stats-wilcoxon/lib/index.js";
3
+ var t = o();
4
+ const a = /* @__PURE__ */ r(t);
2
5
  export {
3
- e as __module
6
+ a as default
4
7
  };
5
8
  //# sourceMappingURL=index10.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index10.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
1
+ {"version":3,"file":"index10.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
@@ -1,8 +1,5 @@
1
- import { getDefaultExportFromCjs as r } from "./_commonjsHelpers.js";
2
- import { __require as o } from "../node_modules/.pnpm/@stdlib_stats-anova1@0.2.2/node_modules/@stdlib/stats-anova1/lib/index.js";
3
- var t = o();
4
- const i = /* @__PURE__ */ r(t);
1
+ var e = { exports: {} };
5
2
  export {
6
- i as default
3
+ e as __module
7
4
  };
8
5
  //# sourceMappingURL=index5.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index5.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
1
+ {"version":3,"file":"index5.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
@@ -1,8 +1,8 @@
1
1
  import { getDefaultExportFromCjs as r } from "./_commonjsHelpers.js";
2
- import { __require as t } from "../node_modules/.pnpm/@stdlib_stats-ttest@0.2.2/node_modules/@stdlib/stats-ttest/lib/index.js";
3
- var e = t();
4
- const s = /* @__PURE__ */ r(e);
2
+ import { __require as o } from "../node_modules/.pnpm/@stdlib_stats-anova1@0.2.2/node_modules/@stdlib/stats-anova1/lib/index.js";
3
+ var t = o();
4
+ const i = /* @__PURE__ */ r(t);
5
5
  export {
6
- s as default
6
+ i as default
7
7
  };
8
8
  //# sourceMappingURL=index6.js.map
@@ -1,5 +1,5 @@
1
1
  import { getDefaultExportFromCjs as r } from "./_commonjsHelpers.js";
2
- import { __require as t } from "../node_modules/.pnpm/@stdlib_stats-ttest2@0.2.2/node_modules/@stdlib/stats-ttest2/lib/index.js";
2
+ import { __require as t } from "../node_modules/.pnpm/@stdlib_stats-ttest@0.2.2/node_modules/@stdlib/stats-ttest/lib/index.js";
3
3
  var e = t();
4
4
  const s = /* @__PURE__ */ r(e);
5
5
  export {
@@ -1,8 +1,8 @@
1
1
  import { getDefaultExportFromCjs as r } from "./_commonjsHelpers.js";
2
- import { __require as o } from "../node_modules/.pnpm/@stdlib_stats-kruskal-test@0.2.2/node_modules/@stdlib/stats-kruskal-test/lib/index.js";
3
- var t = o();
4
- const i = /* @__PURE__ */ r(t);
2
+ import { __require as t } from "../node_modules/.pnpm/@stdlib_stats-ttest2@0.2.2/node_modules/@stdlib/stats-ttest2/lib/index.js";
3
+ var e = t();
4
+ const s = /* @__PURE__ */ r(e);
5
5
  export {
6
- i as default
6
+ s as default
7
7
  };
8
8
  //# sourceMappingURL=index8.js.map
@@ -1,8 +1,8 @@
1
1
  import { getDefaultExportFromCjs as r } from "./_commonjsHelpers.js";
2
- import { __require as o } from "../node_modules/.pnpm/@stdlib_stats-wilcoxon@0.2.2/node_modules/@stdlib/stats-wilcoxon/lib/index.js";
2
+ import { __require as o } from "../node_modules/.pnpm/@stdlib_stats-kruskal-test@0.2.2/node_modules/@stdlib/stats-kruskal-test/lib/index.js";
3
3
  var t = o();
4
- const a = /* @__PURE__ */ r(t);
4
+ const i = /* @__PURE__ */ r(t);
5
5
  export {
6
- a as default
6
+ i as default
7
7
  };
8
8
  //# sourceMappingURL=index9.js.map
@@ -1,7 +1,7 @@
1
1
  import { ScaleBand, ScalePoint } from 'd3-scale';
2
2
  type Scale = ScaleBand<string> | ScalePoint<string | number>;
3
3
  type Orient = 'left' | 'bottom';
4
- export declare const BandAxis: ({ scale, tickSize, tickPadding, orient, labelsPosition, labels, offset, }: {
4
+ export declare const BandAxis: ({ scale, tickSize, tickPadding, orient, labelsPosition, labels, offset, hiddenLabels, }: {
5
5
  scale: Scale;
6
6
  tickSize?: number;
7
7
  tickPadding?: number;
@@ -9,5 +9,6 @@ export declare const BandAxis: ({ scale, tickSize, tickPadding, orient, labelsPo
9
9
  orient?: Orient;
10
10
  labels?: Record<string, string[]>;
11
11
  labelsPosition?: "center" | "45deg" | "90deg";
12
+ hiddenLabels?: boolean;
12
13
  }) => import("react/jsx-runtime").JSX.Element;
13
14
  export {};
@@ -1,59 +1,60 @@
1
1
  import { j as m } from "../_virtual/jsx-runtime.js";
2
2
  import { BLACK as l } from "../constants.js";
3
3
  import { TICK_OFFSET as d } from "../discrete/constants.js";
4
- function v(t) {
4
+ function A(t) {
5
5
  return `translate(${t},0)`;
6
6
  }
7
- function A(t) {
7
+ function B(t) {
8
8
  return `translate(0,${t})`;
9
9
  }
10
10
  const u = 21;
11
- function B(t, n) {
11
+ function F(t, n) {
12
12
  if (t === "45deg") {
13
13
  const i = n === "left" ? -u / 2 : 0, e = n === "bottom" ? u / 2 : -u / 2;
14
14
  return `translate(${i},${e}) rotate(-45)`;
15
15
  }
16
16
  return t === "90deg" && n === "bottom" ? `translate(${-u / 2},${d + u / 2}) rotate(-90)` : n === "bottom" ? `translate(0,${d})` : `translate(${-d},0)`;
17
17
  }
18
- function F(t, n) {
18
+ function M(t, n) {
19
19
  return n === "left" || n === "bottom" && t === "90deg" ? "central" : t === "center" ? "hanging" : "auto";
20
20
  }
21
- function M(t, n) {
21
+ function E(t, n) {
22
22
  return n === "left" || n === "bottom" && t !== "center" ? "end" : "middle";
23
23
  }
24
- const C = ({
24
+ const H = ({
25
25
  scale: t,
26
26
  tickSize: n = 6,
27
27
  tickPadding: i = d,
28
28
  orient: e = "bottom",
29
29
  labelsPosition: s = "center",
30
30
  labels: p = {},
31
- offset: f = typeof window < "u" && window.devicePixelRatio > 1 ? 0 : 0.5
31
+ offset: f = typeof window < "u" && window.devicePixelRatio > 1 ? 0 : 0.5,
32
+ hiddenLabels: g = !1
32
33
  }) => {
33
- function g(r, o) {
34
+ function h(r, o) {
34
35
  return r.bandwidth && (o = Math.max(0, r.bandwidth() - o * 2) / 2), r != null && r.round() && (o = Math.round(o)), (c) => {
35
36
  const a = r(c);
36
37
  return a === void 0 ? 0 : a + o;
37
38
  };
38
39
  }
39
- const h = t.domain(), $ = (r) => p[r] ?? [], j = Math.max(n, 0) + i, y = g(t.copy(), f), b = e === "bottom" ? v : A, x = e === "left" ? -1 : 1, w = {
40
+ const $ = t.domain(), j = (r) => p[r] ?? [], y = Math.max(n, 0) + i, b = h(t.copy(), f), w = e === "bottom" ? A : B, x = e === "left" ? -1 : 1, T = {
40
41
  [(e === "left" ? "x" : "y") + "2"]: x * n
41
- }, T = {
42
- [e === "left" ? "x" : "y"]: x * j
42
+ }, v = {
43
+ [e === "left" ? "x" : "y"]: x * y
43
44
  };
44
- return /* @__PURE__ */ m.jsx("g", { children: h.map((r, o) => /* @__PURE__ */ m.jsxs("g", { className: "tick", transform: b(y(r) + f), children: [
45
- /* @__PURE__ */ m.jsx("line", { stroke: l, ...w }),
46
- /* @__PURE__ */ m.jsx("g", { transform: B(s, e), children: $(r).map((c, a) => /* @__PURE__ */ m.jsx(
45
+ return /* @__PURE__ */ m.jsx("g", { children: $.map((r, o) => /* @__PURE__ */ m.jsxs("g", { className: "tick", transform: w(b(r) + f), children: [
46
+ /* @__PURE__ */ m.jsx("line", { stroke: l, ...T }),
47
+ /* @__PURE__ */ m.jsx("g", { transform: F(s, e), children: !g && j(r).map((c, a) => /* @__PURE__ */ m.jsx(
47
48
  "text",
48
49
  {
49
50
  fill: l,
50
51
  fontSize: "14px",
51
52
  fontWeight: "500",
52
53
  fontFamily: "Manrope",
53
- dominantBaseline: F(s, e),
54
- textAnchor: M(s, e),
54
+ dominantBaseline: M(s, e),
55
+ textAnchor: E(s, e),
55
56
  dy: 20 * a,
56
- ...T,
57
+ ...v,
57
58
  children: c
58
59
  },
59
60
  `${c}_${a}`
@@ -61,6 +62,6 @@ const C = ({
61
62
  ] }, o)) });
62
63
  };
63
64
  export {
64
- C as BandAxis
65
+ H as BandAxis
65
66
  };
66
67
  //# sourceMappingURL=BandAxis.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"BandAxis.js","sources":["../../src/common/BandAxis.tsx"],"sourcesContent":["import {BLACK} from '../constants';\nimport {TICK_OFFSET} from '../discrete/constants';\nimport React from 'react';\nimport type {ScaleBand, ScalePoint} from 'd3-scale';\n\ntype Scale = ScaleBand<string> | ScalePoint<string | 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\ntype LabelsPosition = 'center' | '45deg' | '90deg';\n\nconst FONT_HEIGHT = 21;\nfunction getRotationTransform(labelsPosition: LabelsPosition, orient: 'left' | 'bottom') {\n if (labelsPosition === '45deg') {\n const x = orient === 'left' ? -FONT_HEIGHT / 2 : 0;\n const y = orient === 'bottom' ? FONT_HEIGHT / 2 : -FONT_HEIGHT / 2;\n return `translate(${x},${y}) rotate(-45)`;\n }\n if (labelsPosition === '90deg' && orient === 'bottom') {\n return `translate(${-FONT_HEIGHT / 2},${TICK_OFFSET + FONT_HEIGHT / 2}) rotate(-90)`;\n }\n return orient === 'bottom' ? `translate(0,${TICK_OFFSET})` : `translate(${-TICK_OFFSET},0)`;\n}\n\nfunction getDominantBaseline(labelsPosition: LabelsPosition, orient: 'left' | 'bottom') {\n if (orient === 'left' || (orient === 'bottom' && labelsPosition === '90deg')) {\n return 'central';\n }\n if (labelsPosition === 'center') {\n return 'hanging';\n }\n return 'auto';\n}\n\nfunction getTextAnchor(labelsPosition: LabelsPosition, orient: 'left' | 'bottom') {\n if (orient === 'left' || (orient === 'bottom' && labelsPosition !== 'center')) {\n return 'end';\n }\n return 'middle';\n}\n\nexport const BandAxis = ({\n scale,\n tickSize = 6,\n tickPadding = TICK_OFFSET,\n orient = 'bottom',\n labelsPosition = 'center',\n labels = {},\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 labels?: Record<string, string[]>;\n labelsPosition?: 'center' | '45deg' | '90deg';\n}) => {\n function center(scale: Scale, offset: number) {\n if (scale.bandwidth) {\n offset = Math.max(0, scale.bandwidth() - offset * 2) / 2;\n }\n if (scale?.round()) {\n offset = Math.round(offset);\n }\n return (d: string | number) => {\n const value = scale(d as string);\n return value === undefined ? 0 : value + offset;\n };\n }\n\n const values = scale.domain();\n const getLabel = (tick: string | number) => labels[tick] ?? [];\n const spacing = Math.max(tickSize, 0) + tickPadding;\n const position = center(scale.copy(), offset);\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: string | number, i: number) => (\n <g className=\"tick\" key={i} transform={transform(position(tick) + offset)}>\n <line stroke={BLACK} {...lineProps} />\n <g transform={getRotationTransform(labelsPosition, orient)}>\n {getLabel(tick).map((line, idx) => {\n return (\n <text\n key={`${line}_${idx}`}\n fill={BLACK}\n fontSize=\"14px\"\n fontWeight=\"500\"\n fontFamily=\"Manrope\"\n dominantBaseline={getDominantBaseline(labelsPosition, orient)}\n textAnchor={getTextAnchor(labelsPosition, orient)}\n dy={20 * idx}\n {...textProps}\n >\n {line}\n </text>\n );\n })}\n </g>\n </g>\n ))}\n </g>\n );\n};\n"],"names":["translateX","x","translateY","y","FONT_HEIGHT","getRotationTransform","labelsPosition","orient","TICK_OFFSET","getDominantBaseline","getTextAnchor","BandAxis","scale","tickSize","tickPadding","labels","offset","center","d","value","values","getLabel","tick","spacing","position","transform","k","lineProps","textProps","i","jsxs","jsx","BLACK","line","idx"],"mappings":"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"}
1
+ {"version":3,"file":"BandAxis.js","sources":["../../src/common/BandAxis.tsx"],"sourcesContent":["import {BLACK} from '../constants';\nimport {TICK_OFFSET} from '../discrete/constants';\nimport React from 'react';\nimport type {ScaleBand, ScalePoint} from 'd3-scale';\n\ntype Scale = ScaleBand<string> | ScalePoint<string | 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\ntype LabelsPosition = 'center' | '45deg' | '90deg';\n\nconst FONT_HEIGHT = 21;\nfunction getRotationTransform(labelsPosition: LabelsPosition, orient: 'left' | 'bottom') {\n if (labelsPosition === '45deg') {\n const x = orient === 'left' ? -FONT_HEIGHT / 2 : 0;\n const y = orient === 'bottom' ? FONT_HEIGHT / 2 : -FONT_HEIGHT / 2;\n return `translate(${x},${y}) rotate(-45)`;\n }\n if (labelsPosition === '90deg' && orient === 'bottom') {\n return `translate(${-FONT_HEIGHT / 2},${TICK_OFFSET + FONT_HEIGHT / 2}) rotate(-90)`;\n }\n return orient === 'bottom' ? `translate(0,${TICK_OFFSET})` : `translate(${-TICK_OFFSET},0)`;\n}\n\nfunction getDominantBaseline(labelsPosition: LabelsPosition, orient: 'left' | 'bottom') {\n if (orient === 'left' || (orient === 'bottom' && labelsPosition === '90deg')) {\n return 'central';\n }\n if (labelsPosition === 'center') {\n return 'hanging';\n }\n return 'auto';\n}\n\nfunction getTextAnchor(labelsPosition: LabelsPosition, orient: 'left' | 'bottom') {\n if (orient === 'left' || (orient === 'bottom' && labelsPosition !== 'center')) {\n return 'end';\n }\n return 'middle';\n}\n\nexport const BandAxis = ({\n scale,\n tickSize = 6,\n tickPadding = TICK_OFFSET,\n orient = 'bottom',\n labelsPosition = 'center',\n labels = {},\n offset = typeof window !== 'undefined' && window.devicePixelRatio > 1 ? 0 : 0.5,\n hiddenLabels = false,\n}: {\n scale: Scale;\n tickSize?: number;\n tickPadding?: number;\n offset?: number;\n orient?: Orient;\n labels?: Record<string, string[]>;\n labelsPosition?: 'center' | '45deg' | '90deg';\n hiddenLabels?: boolean;\n}) => {\n function center(scale: Scale, offset: number) {\n if (scale.bandwidth) {\n offset = Math.max(0, scale.bandwidth() - offset * 2) / 2;\n }\n if (scale?.round()) {\n offset = Math.round(offset);\n }\n return (d: string | number) => {\n const value = scale(d as string);\n return value === undefined ? 0 : value + offset;\n };\n }\n\n const values = scale.domain();\n const getLabel = (tick: string | number) => labels[tick] ?? [];\n const spacing = Math.max(tickSize, 0) + tickPadding;\n const position = center(scale.copy(), offset);\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: string | number, i: number) => (\n <g className=\"tick\" key={i} transform={transform(position(tick) + offset)}>\n <line stroke={BLACK} {...lineProps} />\n <g transform={getRotationTransform(labelsPosition, orient)}>\n {!hiddenLabels && getLabel(tick).map((line, idx) => {\n return (\n <text\n key={`${line}_${idx}`}\n fill={BLACK}\n fontSize=\"14px\"\n fontWeight=\"500\"\n fontFamily=\"Manrope\"\n dominantBaseline={getDominantBaseline(labelsPosition, orient)}\n textAnchor={getTextAnchor(labelsPosition, orient)}\n dy={20 * idx}\n {...textProps}\n >\n {line}\n </text>\n );\n })}\n </g>\n </g>\n ))}\n </g>\n );\n};\n"],"names":["translateX","x","translateY","y","FONT_HEIGHT","getRotationTransform","labelsPosition","orient","TICK_OFFSET","getDominantBaseline","getTextAnchor","BandAxis","scale","tickSize","tickPadding","labels","offset","hiddenLabels","center","d","value","values","getLabel","tick","spacing","position","transform","k","lineProps","textProps","i","jsxs","jsx","BLACK","line","idx"],"mappings":"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"}
@@ -1,58 +1,58 @@
1
- import { j as r } from "../_virtual/jsx-runtime.js";
2
- import { BLACK as f } from "../constants.js";
1
+ import { j as o } from "../_virtual/jsx-runtime.js";
2
+ import { BLACK as l } from "../constants.js";
3
3
  import { TICK_OFFSET as s } from "../discrete/constants.js";
4
4
  import { getTicksAndFormat as T } from "../scatterplot/utils/getTicksAndFormat.js";
5
- function k(t) {
5
+ function v(t) {
6
6
  return `translate(${t},0)`;
7
7
  }
8
- function v(t) {
8
+ function w(t) {
9
9
  return `translate(0,${t})`;
10
10
  }
11
- function w(t) {
11
+ function F(t) {
12
12
  return t === "bottom" ? `translate(0,${s})` : `translate(${-s},0)`;
13
13
  }
14
- function F(t) {
14
+ function $(t) {
15
15
  return t === "bottom" ? "hanging" : "central";
16
16
  }
17
- function $(t) {
17
+ function k(t) {
18
18
  return t === "bottom" ? "middle" : "end";
19
19
  }
20
20
  const E = ({
21
21
  scale: t,
22
22
  tickSize: a = 6,
23
- tickPadding: l = s,
23
+ tickPadding: f = s,
24
24
  orient: n = "bottom",
25
25
  onlyPositive: c = !1,
26
26
  hiddenLabels: u = !1,
27
27
  offset: x = typeof window < "u" && window.devicePixelRatio > 1 ? 0 : 0.5
28
28
  }) => {
29
- function d(o) {
30
- return (e) => {
31
- const m = o(e);
29
+ function d(e) {
30
+ return (r) => {
31
+ const m = e(r);
32
32
  return m === void 0 ? 0 : +m;
33
33
  };
34
34
  }
35
- const { ticks: p, format: g } = u ? { ticks: [], format: (o) => o } : T(t, c, n === "bottom"), h = Math.max(a, 0) + l, b = d(t.copy()), j = n === "bottom" ? k : v, i = n === "left" ? -1 : 1, y = {
35
+ const { ticks: p, format: g } = T(t, c, n === "bottom"), h = Math.max(a, 0) + f, b = d(t.copy()), j = n === "bottom" ? v : w, i = n === "left" ? -1 : 1, y = {
36
36
  [(n === "left" ? "x" : "y") + "2"]: i * a
37
37
  }, A = {
38
38
  [n === "left" ? "x" : "y"]: i * h
39
39
  };
40
- return /* @__PURE__ */ r.jsx("g", { children: p.map((o, e) => /* @__PURE__ */ r.jsxs("g", { className: "tick", transform: j(b(o) + x), children: [
41
- /* @__PURE__ */ r.jsx("line", { stroke: f, ...y }),
42
- /* @__PURE__ */ r.jsx("g", { transform: w(n), children: /* @__PURE__ */ r.jsx(
40
+ return /* @__PURE__ */ o.jsx("g", { children: p.map((e, r) => /* @__PURE__ */ o.jsxs("g", { className: "tick", transform: j(b(e) + x), children: [
41
+ /* @__PURE__ */ o.jsx("line", { stroke: l, ...y }),
42
+ !u && /* @__PURE__ */ o.jsx("g", { transform: F(n), children: /* @__PURE__ */ o.jsx(
43
43
  "text",
44
44
  {
45
- fill: f,
45
+ fill: l,
46
46
  fontSize: "14px",
47
47
  fontWeight: "500",
48
48
  fontFamily: "Manrope",
49
- dominantBaseline: F(n),
50
- textAnchor: $(n),
49
+ dominantBaseline: $(n),
50
+ textAnchor: k(n),
51
51
  ...A,
52
- children: g(o)
52
+ children: g(e)
53
53
  }
54
54
  ) })
55
- ] }, e)) });
55
+ ] }, r)) });
56
56
  };
57
57
  export {
58
58
  E as ContinuousAxis
@@ -1 +1 @@
1
- {"version":3,"file":"ContinuousAxis.js","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} = hiddenLabels ? {ticks: [], format: (v:number) => v} : 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 <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 </g>\n ))}\n </g>\n );\n};\n"],"names":["translateX","x","translateY","y","getRotationTransform","orient","TICK_OFFSET","getDominantBaseline","getTextAnchor","ContinuousAxis","scale","tickSize","tickPadding","onlyPositive","hiddenLabels","offset","number","d","value","values","format","v","getTicksAndFormat","spacing","position","transform","k","lineProps","textProps","tick","i","jsxs","jsx","BLACK"],"mappings":";;;;AASA,SAASA,EAAWC,GAAW;AAC3B,SAAO,aAAaA,CAAC;AACzB;AAEA,SAASC,EAAWC,GAAW;AAC3B,SAAO,eAAeA,CAAC;AAC3B;AAEA,SAASC,EAAqBC,GAA2B;AACrD,SAAOA,MAAW,WAAW,eAAeC,CAAW,MAAM,aAAa,CAACA,CAAW;AAC1F;AAEA,SAASC,EAAoBF,GAA2B;AACpD,SAAOA,MAAW,WAAW,YAAY;AAC7C;AAEA,SAASG,EAAeH,GAA2B;AAC/C,SAAQA,MAAW,WAAW,WAAW;AAC7C;AAEO,MAAMI,IAAiB,CAAC;AAAA,EAC5B,OAAAC;AAAA,EACA,UAAAC,IAAW;AAAA,EACX,aAAAC,IAAcN;AAAA,EACd,QAAAD,IAAS;AAAA,EACT,cAAAQ,IAAe;AAAA,EACf,cAAAC,IAAe;AAAA,EACf,QAAAC,IAAS,OAAO,SAAW,OAAe,OAAO,mBAAmB,IAAI,IAAI;AAC/E,MAQM;AACF,WAASC,EAAON,GAAc;AAC1B,WAAO,CAACO,MAAc;AAClB,YAAMC,IAAQR,EAAMO,CAAC;AACrB,aAAOC,MAAU,SAAY,IAAI,CAACA;AAAA,IACtC;AAAA,EACJ;AACA,QAAM,EAAC,OAAOC,GAAQ,QAAAC,MAAUN,IAAe,EAAC,OAAO,CAAA,GAAI,QAAQ,CAACO,MAAaA,MAAKC,EAAkBZ,GAAOG,GAAcR,MAAW,QAAQ,GAC1IkB,IAAU,KAAK,IAAIZ,GAAU,CAAC,IAAIC,GACpCY,IAAYR,EAAQN,EAAM,KAAA,CAAM,GAE9Be,IAAYpB,MAAW,WAAWL,IAAaE,GAC/CwB,IAAIrB,MAAW,SAAS,KAAK,GAE7BsB,IAAY;AAAA,IACd,EAAEtB,MAAW,SAAS,MAAM,OAAO,GAAG,GAAGqB,IAAIf;AAAA,EAAA,GAG3CiB,IAAY;AAAA,IACd,CAACvB,MAAW,SAAS,MAAM,GAAG,GAAGqB,IAAIH;AAAA,EAAA;AAGzC,+BACK,KAAA,EACI,UAAAJ,EAAO,IAAI,CAACU,GAAcC,MACvBC,gBAAAA,EAAAA,KAAC,KAAA,EAAE,WAAU,QAAe,WAAWN,EAAUD,EAASK,CAAI,IAAId,CAAM,GACpE,UAAA;AAAA,IAAAiB,gBAAAA,EAAAA,IAAC,QAAA,EAAK,QAAQC,GAAQ,GAAGN,EAAA,CAAW;AAAA,IACpCK,gBAAAA,EAAAA,IAAC,KAAA,EAAE,WAAW5B,EAAqBC,CAAM,GACrC,UAAA2B,gBAAAA,EAAAA;AAAAA,MAAC;AAAA,MAAA;AAAA,QACG,MAAMC;AAAA,QACN,UAAS;AAAA,QACT,YAAW;AAAA,QACX,YAAW;AAAA,QACX,kBAAkB1B,EAAoBF,CAAM;AAAA,QAC5C,YAAYG,EAAcH,CAAM;AAAA,QAC/B,GAAGuB;AAAA,QAEH,YAAOC,CAAI;AAAA,MAAA;AAAA,IAAA,EAChB,CACJ;AAAA,EAAA,KAdqBC,CAezB,CACH,GACL;AAER;"}
1
+ {"version":3,"file":"ContinuousAxis.js","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"],"names":["translateX","x","translateY","y","getRotationTransform","orient","TICK_OFFSET","getDominantBaseline","getTextAnchor","ContinuousAxis","scale","tickSize","tickPadding","onlyPositive","hiddenLabels","offset","number","d","value","values","format","getTicksAndFormat","spacing","position","transform","k","lineProps","textProps","tick","i","jsxs","jsx","BLACK"],"mappings":";;;;AASA,SAASA,EAAWC,GAAW;AAC3B,SAAO,aAAaA,CAAC;AACzB;AAEA,SAASC,EAAWC,GAAW;AAC3B,SAAO,eAAeA,CAAC;AAC3B;AAEA,SAASC,EAAqBC,GAA2B;AACrD,SAAOA,MAAW,WAAW,eAAeC,CAAW,MAAM,aAAa,CAACA,CAAW;AAC1F;AAEA,SAASC,EAAoBF,GAA2B;AACpD,SAAOA,MAAW,WAAW,YAAY;AAC7C;AAEA,SAASG,EAAeH,GAA2B;AAC/C,SAAQA,MAAW,WAAW,WAAW;AAC7C;AAEO,MAAMI,IAAiB,CAAC;AAAA,EAC5B,OAAAC;AAAA,EACA,UAAAC,IAAW;AAAA,EACX,aAAAC,IAAcN;AAAA,EACd,QAAAD,IAAS;AAAA,EACT,cAAAQ,IAAe;AAAA,EACf,cAAAC,IAAe;AAAA,EACf,QAAAC,IAAS,OAAO,SAAW,OAAe,OAAO,mBAAmB,IAAI,IAAI;AAC/E,MAQM;AACF,WAASC,EAAON,GAAc;AAC1B,WAAO,CAACO,MAAc;AAClB,YAAMC,IAAQR,EAAMO,CAAC;AACrB,aAAOC,MAAU,SAAY,IAAI,CAACA;AAAA,IACtC;AAAA,EACJ;AACA,QAAM,EAAC,OAAOC,GAAQ,QAAAC,EAAA,IAAUC,EAAkBX,GAAOG,GAAcR,MAAW,QAAQ,GACpFiB,IAAU,KAAK,IAAIX,GAAU,CAAC,IAAIC,GACpCW,IAAYP,EAAQN,EAAM,KAAA,CAAM,GAE9Bc,IAAYnB,MAAW,WAAWL,IAAaE,GAC/CuB,IAAIpB,MAAW,SAAS,KAAK,GAE7BqB,IAAY;AAAA,IACd,EAAErB,MAAW,SAAS,MAAM,OAAO,GAAG,GAAGoB,IAAId;AAAA,EAAA,GAG3CgB,IAAY;AAAA,IACd,CAACtB,MAAW,SAAS,MAAM,GAAG,GAAGoB,IAAIH;AAAA,EAAA;AAGzC,+BACK,KAAA,EACI,UAAAH,EAAO,IAAI,CAACS,GAAcC,MACvBC,gBAAAA,EAAAA,KAAC,KAAA,EAAE,WAAU,QAAe,WAAWN,EAAUD,EAASK,CAAI,IAAIb,CAAM,GACpE,UAAA;AAAA,IAAAgB,gBAAAA,EAAAA,IAAC,QAAA,EAAK,QAAQC,GAAQ,GAAGN,EAAA,CAAW;AAAA,IACnC,CAACZ,KACEiB,gBAAAA,EAAAA,IAAC,OAAE,WAAW3B,EAAqBC,CAAM,GACrC,UAAA0B,gBAAAA,EAAAA;AAAAA,MAAC;AAAA,MAAA;AAAA,QACG,MAAMC;AAAA,QACN,UAAS;AAAA,QACT,YAAW;AAAA,QACX,YAAW;AAAA,QACX,kBAAkBzB,EAAoBF,CAAM;AAAA,QAC5C,YAAYG,EAAcH,CAAM;AAAA,QAC/B,GAAGsB;AAAA,QAEH,YAAOC,CAAI;AAAA,MAAA;AAAA,IAAA,EAChB,CACJ;AAAA,EAAA,KAfiBC,CAiBzB,CACH,GACL;AAER;"}
@@ -61,7 +61,7 @@ function y({ aes: e, label: a }) {
61
61
  /* @__PURE__ */ n.jsx("text", { x: o + 8, y: o / 2, dominantBaseline: "central", fontWeight: 500, children: a })
62
62
  ] });
63
63
  }
64
- function b({ legendData: e }) {
64
+ function W({ legendData: e }) {
65
65
  const l = e.items.filter((t) => t.type === "continuous");
66
66
  return /* @__PURE__ */ n.jsxs("g", { children: [
67
67
  /* @__PURE__ */ n.jsx("defs", { children: l.map((t) => /* @__PURE__ */ n.jsx("linearGradient", { id: t.id, gradientTransform: "rotate(90)", children: t.scale.domain().reverse().map((r) => {
@@ -146,7 +146,7 @@ function b({ legendData: e }) {
146
146
  t.values.map((s, c) => {
147
147
  const f = t.scale(s);
148
148
  return /* @__PURE__ */ n.jsxs("g", { transform: `translate(0, ${c * r})`, children: [
149
- /* @__PURE__ */ n.jsx("circle", { r: f, cx: r / 2, cy: r / 2, fill: i }),
149
+ /* @__PURE__ */ n.jsx("circle", { r: f, cx: r / 2, cy: r / 2, fill: "none", stroke: i, strokeWidth: 1 }),
150
150
  /* @__PURE__ */ n.jsx("text", { x: r + 4, y: r / 2, alignmentBaseline: "central", children: t.labels[s] })
151
151
  ] }, s);
152
152
  }),
@@ -157,6 +157,6 @@ function b({ legendData: e }) {
157
157
  ] });
158
158
  }
159
159
  export {
160
- b as Legend
160
+ W as Legend
161
161
  };
162
162
  //# sourceMappingURL=Legend.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Legend.js","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={BLACK}/>\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"],"names":["LEGEND_ITEM_SIZE","TITLE_POSITION","COLOR_ITEM_WIDTH_C","getLineShapePath","lineShape","POINT_SIZE","LINE_WIDTH","getAesItemStroke","fillColor","lineColor","BLACK","fill","color","AesLegendItem","aes","label","usedAes","needRenderLine","needRenderDot","needRenderRect","shape","getPointShape","lineOffset","textOffset","jsx","DotAesItemElement","Legend","legendData","continuousItems","item","value","domain","range","percent","jsxs","y","idx","size","r"],"mappings":"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"}
1
+ {"version":3,"file":"Legend.js","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"],"names":["LEGEND_ITEM_SIZE","TITLE_POSITION","COLOR_ITEM_WIDTH_C","getLineShapePath","lineShape","POINT_SIZE","LINE_WIDTH","getAesItemStroke","fillColor","lineColor","BLACK","fill","color","AesLegendItem","aes","label","usedAes","needRenderLine","needRenderDot","needRenderRect","shape","getPointShape","lineOffset","textOffset","jsx","DotAesItemElement","Legend","legendData","continuousItems","item","value","domain","range","percent","jsxs","y","idx","size","r"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { AesRecord, Color, ColumnName, DataValue, DiscreteSettings, FrameType, InheritAesDiscrete, LegendPosition, LineShape, Orientation, BarLayer as OuterBarLayer, BinnedDotsLayer as OuterBinnedDotsLayer, BoxLayer as OuterBoxLayer, DotLayer as OuterDotLayer, ErrorBarLayer as OuterErrorBarLayer, LineLayer as OuterLineLayer, LogoPlotLayer as OuterLogoPlotLayer, PairedPointsLayer as OuterPairedPointsLayer, SinaLayer as OuterSinaLayer, StackedAreaLayer as OuterStackedAreaLayer, StackedBarLayer as OuterStackedBarLayer, StatLayer as OuterStatLayer, ViolinLayer as OuterViolinLayer, PointShape, PValueCorrectionMethod, SettingsInterface, SignificanceLevels, StatTestMethod, SummaryErrorValue, SummaryGroupValue, TitlePosition } from '../types';
1
+ import { AesRecord, AggregationMethod, Color, ColumnName, DataValue, DiscreteSettings, FrameType, InheritAesDiscrete, LegendPosition, LineShape, Orientation, BarLayer as OuterBarLayer, BinnedDotsLayer as OuterBinnedDotsLayer, BoxLayer as OuterBoxLayer, DotLayer as OuterDotLayer, ErrorBarLayer as OuterErrorBarLayer, LineLayer as OuterLineLayer, LogoPlotLayer as OuterLogoPlotLayer, PairedPointsLayer as OuterPairedPointsLayer, SinaLayer as OuterSinaLayer, StackedAreaLayer as OuterStackedAreaLayer, StackedBarLayer as OuterStackedBarLayer, StatLayer as OuterStatLayer, ViolinLayer as OuterViolinLayer, PointShape, PValueCorrectionMethod, SettingsInterface, SignificanceLevels, StatTestMethod, SummaryErrorValue, SummaryGroupValue, TitlePosition } from '../types';
2
2
  declare abstract class BaseDiscreteLayer {
3
3
  abstract type: string;
4
4
  abstract isEqualForCalculation(otherLayer: DiscreteLayer): boolean;
@@ -97,7 +97,7 @@ export declare class ErrorBarLayer extends BaseDiscreteLayer {
97
97
  }
98
98
  export declare class BarLayer extends BaseDiscreteLayer {
99
99
  readonly type = "bar";
100
- readonly height: 'min' | 'max' | 'median' | 'mean';
100
+ readonly height: AggregationMethod;
101
101
  readonly aes: {
102
102
  width: number | 'auto';
103
103
  lineColor: InheritAesDiscrete | Color;
@@ -111,7 +111,7 @@ export declare class BarLayer extends BaseDiscreteLayer {
111
111
  export declare class StackedBarLayer extends BaseDiscreteLayer {
112
112
  readonly type = "stackedBar";
113
113
  readonly normalize: boolean;
114
- readonly height: 'sum' | 'min' | 'max' | 'median' | 'mean';
114
+ readonly height: AggregationMethod;
115
115
  readonly aes: {
116
116
  width: number | 'auto';
117
117
  lineColor: InheritAesDiscrete | Color;
@@ -125,7 +125,7 @@ export declare class StackedBarLayer extends BaseDiscreteLayer {
125
125
  export declare class StackedAreaLayer extends BaseDiscreteLayer {
126
126
  readonly type = "stackedArea";
127
127
  readonly normalize: boolean;
128
- readonly height: 'sum' | 'min' | 'max' | 'median' | 'mean';
128
+ readonly height: AggregationMethod;
129
129
  readonly showBars: boolean;
130
130
  readonly aes: {
131
131
  barWidth: number | 'auto';
@@ -220,12 +220,14 @@ export declare class DiscreteSettingsImpl implements SettingsInterface {
220
220
  order?: DataValue[];
221
221
  inheritedAes?: AesRecord;
222
222
  allowNullGroup?: boolean;
223
+ unlimitedGroupsCount?: boolean;
223
224
  } | null;
224
225
  readonly secondaryGrouping: {
225
226
  columnName: ColumnName;
226
227
  order?: DataValue[];
227
228
  inheritedAes?: AesRecord;
228
229
  allowNullGroup?: boolean;
230
+ unlimitedGroupsCount?: boolean;
229
231
  } | null;
230
232
  readonly facetSettings: {
231
233
  sharedX: boolean;
@@ -1,16 +1,16 @@
1
1
  var S = Object.defineProperty;
2
2
  var x = (o, i, t) => i in o ? S(o, i, { enumerable: !0, configurable: !0, writable: !0, value: t }) : o[i] = t;
3
3
  var e = (o, i, t) => x(o, typeof i != "symbol" ? i + "" : i, t);
4
- import { DEFAULT_HEIGHT_SMALL as b, DEFAULT_HEIGHT as k, DEFAULT_WIDTH_SMALL as z, DEFAULT_WIDTH as E, BLACK as n } from "../constants.js";
4
+ import { DEFAULT_HEIGHT_SMALL as b, DEFAULT_HEIGHT as G, DEFAULT_WIDTH_SMALL as k, DEFAULT_WIDTH as z, BLACK as n } from "../constants.js";
5
5
  import "../types/common.js";
6
- import { DiscreteSettingsSchema as F } from "../types/discrete.js";
6
+ import { DiscreteSettingsSchema as E } from "../types/discrete.js";
7
7
  import "../types/scatterplot.js";
8
8
  import "../types/heatmap.js";
9
9
  import "../types/dendro.js";
10
10
  import "../types/histogram.js";
11
11
  import "../types/bubble.js";
12
- import { PADDINGS as v, MIN_MARGIN as B } from "./constants.js";
13
- import G from "../_virtual/lodash.js";
12
+ import { PADDINGS as F, MIN_MARGIN as v } from "./constants.js";
13
+ import B from "../_virtual/lodash.js";
14
14
  import { exhaustive as O } from "../utils/index.js";
15
15
  const u = "#3e9838", h = "21", p = 3;
16
16
  class r {
@@ -346,17 +346,17 @@ class et {
346
346
  e(this, "chartSettings");
347
347
  e(this, "layers");
348
348
  var t, a, l, c, d, m, f, w, C, y;
349
- F.parse(i), this.id = G.uniqueId("settings"), this.y = i.y, this.keyColumn = i.keyColumn ?? null, this.primaryGrouping = i.primaryGrouping ?? null, this.secondaryGrouping = i.secondaryGrouping ?? null, this.facetSettings = {
349
+ E.parse(i), this.id = B.uniqueId("settings"), this.y = i.y, this.keyColumn = i.keyColumn ?? null, this.primaryGrouping = i.primaryGrouping ? { unlimitedGroupsCount: !1, ...i.primaryGrouping } : null, this.secondaryGrouping = i.secondaryGrouping ? { unlimitedGroupsCount: !1, ...i.secondaryGrouping } : null, this.facetSettings = {
350
350
  sharedX: !0,
351
351
  sharedY: !0,
352
352
  titlePosition: "left",
353
353
  ...i.facetSettings
354
354
  }, this.facetBy = i.facetBy ?? [], this.chartSettings = {
355
355
  size: {
356
- width: ((t = i == null ? void 0 : i.size) == null ? void 0 : t.width) ?? (this.facetBy.length ? z : E),
357
- height: ((a = i == null ? void 0 : i.size) == null ? void 0 : a.height) ?? (this.facetBy.length ? b : k),
358
- outerOffset: ((l = i == null ? void 0 : i.size) == null ? void 0 : l.outerOffset) ?? B,
359
- innerOffset: ((c = i == null ? void 0 : i.size) == null ? void 0 : c.innerOffset) ?? v.TOP
356
+ width: ((t = i == null ? void 0 : i.size) == null ? void 0 : t.width) ?? (this.facetBy.length ? k : z),
357
+ height: ((a = i == null ? void 0 : i.size) == null ? void 0 : a.height) ?? (this.facetBy.length ? b : G),
358
+ outerOffset: ((l = i == null ? void 0 : i.size) == null ? void 0 : l.outerOffset) ?? v,
359
+ innerOffset: ((c = i == null ? void 0 : i.size) == null ? void 0 : c.innerOffset) ?? F.TOP
360
360
  },
361
361
  title: {
362
362
  position: "center",