@milaboratories/miplots4 1.0.125 → 1.0.127

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 (118) hide show
  1. package/dist/DataFrame.d.ts +7 -5
  2. package/dist/DataFrame.d.ts.map +1 -1
  3. package/dist/DataFrame.js +67 -60
  4. package/dist/DataFrame.js.map +1 -1
  5. package/dist/bubble/components/Chart.d.ts +3 -3
  6. package/dist/bubble/components/Chart.d.ts.map +1 -1
  7. package/dist/bubble/components/Chart.js +23 -23
  8. package/dist/bubble/components/Chart.js.map +1 -1
  9. package/dist/common/Tooltip.d.ts +1 -1
  10. package/dist/common/Tooltip.d.ts.map +1 -1
  11. package/dist/common/Tooltip.js +17 -17
  12. package/dist/common/Tooltip.js.map +1 -1
  13. package/dist/discrete/components/layers/BinnedDotsElement.d.ts +2 -2
  14. package/dist/discrete/components/layers/BinnedDotsElement.d.ts.map +1 -1
  15. package/dist/discrete/components/layers/BinnedDotsElement.js +9 -9
  16. package/dist/discrete/components/layers/BinnedDotsElement.js.map +1 -1
  17. package/dist/discrete/components/layers/BoxElement.d.ts +2 -2
  18. package/dist/discrete/components/layers/BoxElement.d.ts.map +1 -1
  19. package/dist/discrete/components/layers/BoxElement.js +19 -19
  20. package/dist/discrete/components/layers/BoxElement.js.map +1 -1
  21. package/dist/discrete/components/layers/DotsGroupElement.d.ts +3 -3
  22. package/dist/discrete/components/layers/DotsGroupElement.d.ts.map +1 -1
  23. package/dist/discrete/components/layers/DotsGroupElement.js +10 -10
  24. package/dist/discrete/components/layers/DotsGroupElement.js.map +1 -1
  25. package/dist/discrete/components/layers/ErrorBarElement.d.ts +2 -2
  26. package/dist/discrete/components/layers/ErrorBarElement.d.ts.map +1 -1
  27. package/dist/discrete/components/layers/ErrorBarElement.js +15 -15
  28. package/dist/discrete/components/layers/ErrorBarElement.js.map +1 -1
  29. package/dist/discrete/components/layers/LineElement.d.ts +2 -2
  30. package/dist/discrete/components/layers/LineElement.d.ts.map +1 -1
  31. package/dist/discrete/components/layers/LineElement.js +12 -12
  32. package/dist/discrete/components/layers/LineElement.js.map +1 -1
  33. package/dist/discrete/components/layers/LogoElement.d.ts +2 -2
  34. package/dist/discrete/components/layers/LogoElement.d.ts.map +1 -1
  35. package/dist/discrete/components/layers/LogoElement.js +19 -19
  36. package/dist/discrete/components/layers/LogoElement.js.map +1 -1
  37. package/dist/discrete/components/layers/PairedPointsElement.d.ts +2 -2
  38. package/dist/discrete/components/layers/PairedPointsElement.d.ts.map +1 -1
  39. package/dist/discrete/components/layers/PairedPointsElement.js +37 -37
  40. package/dist/discrete/components/layers/PairedPointsElement.js.map +1 -1
  41. package/dist/discrete/components/layers/StackedBarElement.d.ts +3 -3
  42. package/dist/discrete/components/layers/StackedBarElement.d.ts.map +1 -1
  43. package/dist/discrete/components/layers/StackedBarElement.js +18 -18
  44. package/dist/discrete/components/layers/StackedBarElement.js.map +1 -1
  45. package/dist/discrete/components/layers/ViolinElement.d.ts +4 -4
  46. package/dist/discrete/components/layers/ViolinElement.d.ts.map +1 -1
  47. package/dist/discrete/components/layers/ViolinElement.js +7 -7
  48. package/dist/discrete/components/layers/ViolinElement.js.map +1 -1
  49. package/dist/heatmap/components/Annotations/Annotation.d.ts +2 -2
  50. package/dist/heatmap/components/Annotations/Annotation.d.ts.map +1 -1
  51. package/dist/heatmap/components/Annotations/Annotation.js +16 -16
  52. package/dist/heatmap/components/Annotations/Annotation.js.map +1 -1
  53. package/dist/heatmap/components/Chart.d.ts +1 -1
  54. package/dist/heatmap/components/Chart.d.ts.map +1 -1
  55. package/dist/heatmap/components/Chart.js +28 -28
  56. package/dist/heatmap/components/Chart.js.map +1 -1
  57. package/dist/histogram/components/Chart.d.ts +2 -2
  58. package/dist/histogram/components/Chart.d.ts.map +1 -1
  59. package/dist/histogram/components/Chart.js +22 -22
  60. package/dist/histogram/components/Chart.js.map +1 -1
  61. package/dist/node_modules/react/index.js +1 -1
  62. package/dist/node_modules/react-dom/index.js +1 -1
  63. package/dist/scatterplot/components/Chart.d.ts +6 -11
  64. package/dist/scatterplot/components/Chart.d.ts.map +1 -1
  65. package/dist/scatterplot/components/Chart.js +101 -331
  66. package/dist/scatterplot/components/Chart.js.map +1 -1
  67. package/dist/scatterplot/components/ChartAxis.d.ts +20 -0
  68. package/dist/scatterplot/components/ChartAxis.d.ts.map +1 -0
  69. package/dist/scatterplot/components/ChartAxis.js +52 -0
  70. package/dist/scatterplot/components/ChartAxis.js.map +1 -0
  71. package/dist/scatterplot/components/ChartAxisTitles.d.ts +15 -0
  72. package/dist/scatterplot/components/ChartAxisTitles.d.ts.map +1 -0
  73. package/dist/scatterplot/components/ChartAxisTitles.js +56 -0
  74. package/dist/scatterplot/components/ChartAxisTitles.js.map +1 -0
  75. package/dist/scatterplot/components/ChartFacetTitle.d.ts +11 -0
  76. package/dist/scatterplot/components/ChartFacetTitle.d.ts.map +1 -0
  77. package/dist/scatterplot/components/ChartFacetTitle.js +37 -0
  78. package/dist/scatterplot/components/ChartFacetTitle.js.map +1 -0
  79. package/dist/scatterplot/components/ChartLayersData.d.ts +39 -0
  80. package/dist/scatterplot/components/ChartLayersData.d.ts.map +1 -0
  81. package/dist/scatterplot/components/ChartLayersData.js +250 -0
  82. package/dist/scatterplot/components/ChartLayersData.js.map +1 -0
  83. package/dist/scatterplot/components/ChartTooltip.d.ts +18 -0
  84. package/dist/scatterplot/components/ChartTooltip.d.ts.map +1 -0
  85. package/dist/scatterplot/components/ChartTooltip.js +58 -0
  86. package/dist/scatterplot/components/ChartTooltip.js.map +1 -0
  87. package/dist/scatterplot/components/ChartTrendsData.d.ts +11 -0
  88. package/dist/scatterplot/components/ChartTrendsData.d.ts.map +1 -0
  89. package/dist/scatterplot/components/ChartTrendsData.js +65 -0
  90. package/dist/scatterplot/components/ChartTrendsData.js.map +1 -0
  91. package/dist/scatterplot/components/ChartsGroup.d.ts +3 -3
  92. package/dist/scatterplot/components/ChartsGroup.d.ts.map +1 -1
  93. package/dist/scatterplot/components/ChartsGroup.js +81 -73
  94. package/dist/scatterplot/components/ChartsGroup.js.map +1 -1
  95. package/dist/scatterplot/dots.d.ts +0 -2
  96. package/dist/scatterplot/dots.d.ts.map +1 -1
  97. package/dist/scatterplot/dots.js +26 -22
  98. package/dist/scatterplot/dots.js.map +1 -1
  99. package/dist/scatterplot-umap/ChartRenderer.d.ts +3 -1
  100. package/dist/scatterplot-umap/ChartRenderer.d.ts.map +1 -1
  101. package/dist/scatterplot-umap/ChartRenderer.js +159 -158
  102. package/dist/scatterplot-umap/ChartRenderer.js.map +1 -1
  103. package/dist/scatterplot-umap/components/SVGLayer.d.ts.map +1 -1
  104. package/dist/scatterplot-umap/components/SVGLayer.js +32 -32
  105. package/dist/scatterplot-umap/components/SVGLayer.js.map +1 -1
  106. package/dist/scatterplot-umap/components/UpperSVG.d.ts +1 -1
  107. package/dist/scatterplot-umap/components/UpperSVG.d.ts.map +1 -1
  108. package/dist/scatterplot-umap/components/UpperSVG.js +18 -18
  109. package/dist/scatterplot-umap/components/UpperSVG.js.map +1 -1
  110. package/dist/scatterplot-umap/index.d.ts +2 -2
  111. package/dist/scatterplot-umap/index.d.ts.map +1 -1
  112. package/dist/scatterplot-umap/index.js +26 -25
  113. package/dist/scatterplot-umap/index.js.map +1 -1
  114. package/dist/utils/hooks/useFunction.d.ts +2 -0
  115. package/dist/utils/hooks/useFunction.d.ts.map +1 -0
  116. package/dist/utils/hooks/useFunction.js +9 -0
  117. package/dist/utils/hooks/useFunction.js.map +1 -0
  118. package/package.json +2 -1
@@ -13,14 +13,16 @@ type RowsGroup = Record<GroupKey, {
13
13
  grouped: RowsGroup;
14
14
  }>;
15
15
  export declare class DataFrame {
16
- id: string;
17
- data: Record<string, DataValue[]>;
18
- rowsCount: number;
19
- columnNames: string[];
16
+ readonly id: string;
17
+ readonly data: Record<string, DataValue[]>;
18
+ readonly rowsCount: number;
19
+ readonly columnNames: string[];
20
+ readonly rows: Row[];
21
+ readonly mapColumnCategories: Map<string, string[]>;
20
22
  rowsGrouped?: RowsGroup;
21
23
  static from(data: DataSet): DataFrame;
22
24
  constructor(id: string, data: Record<string, DataValue[]>);
23
- get rows(): Record<string, DataValue>[];
25
+ private computeRows;
24
26
  getColumn(key: string): DataValue[];
25
27
  getColumnCategories(key: string, ignoreNull?: boolean): string[];
26
28
  setGrouping(groupingColumnIds: (string | null)[]): void;
@@ -1 +1 @@
1
- {"version":3,"file":"DataFrame.d.ts","sourceRoot":"","sources":["../src/DataFrame.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,SAAS,CAAC;AAIvC,MAAM,MAAM,aAAa,GAAG;IACxB,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;IACpC,EAAE,EAAE,MAAM,CAAA;CACb,CAAA;AACD,MAAM,MAAM,OAAO,GAAG,SAAS,GAAG,aAAa,CAAC;AAChD,eAAO,MAAM,UAAU,eAAsB,CAAC;AAC9C,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,OAAO,UAAU,CAAC;AAClD,KAAK,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AACrC,KAAK,SAAS,GAAG,MAAM,CACnB,QAAQ,EACR;IACI,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,OAAO,EAAE,SAAS,CAAC;CACtB,CACJ,CAAC;AAMF,qBAAa,SAAS;IAClB,EAAE,EAAE,MAAM,CAAC;IAEX,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,WAAW,CAAC,EAAE,SAAS,CAAC;IAExB,MAAM,CAAC,IAAI,CAAE,IAAI,EAAE,OAAO,GAAE,SAAS;gBAUzB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC;IAOzD,IAAI,IAAI,gCAaP;IAED,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE;IAInC,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,UAAO,GAAG,MAAM,EAAE;IAU7D,WAAW,CAAC,iBAAiB,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE;IAgChD,mBAAmB,CAAC,YAAY,EAAE,QAAQ,EAAE,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE;IAkB3E,iBAAiB,CAAC,YAAY,EAAE,QAAQ,EAAE,GAAG,GAAG,EAAE;CAiBrD"}
1
+ {"version":3,"file":"DataFrame.d.ts","sourceRoot":"","sources":["../src/DataFrame.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAGzC,MAAM,MAAM,aAAa,GAAG;IACxB,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;IACpC,EAAE,EAAE,MAAM,CAAA;CACb,CAAA;AACD,MAAM,MAAM,OAAO,GAAG,SAAS,GAAG,aAAa,CAAC;AAChD,eAAO,MAAM,UAAU,eAAsB,CAAC;AAC9C,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,OAAO,UAAU,CAAC;AAClD,KAAK,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AACrC,KAAK,SAAS,GAAG,MAAM,CACnB,QAAQ,EACR;IACI,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,OAAO,EAAE,SAAS,CAAC;CACtB,CACJ,CAAC;AAMF,qBAAa,SAAS;IAClB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAEpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;IAC3C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,CAAC;IAC/B,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC;IAErB,QAAQ,CAAC,mBAAmB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAa;IAEhE,WAAW,CAAC,EAAE,SAAS,CAAC;IAExB,MAAM,CAAC,IAAI,CAAE,IAAI,EAAE,OAAO,GAAE,SAAS;gBAUzB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC;IAQzD,OAAO,CAAC,WAAW;IAenB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE;IAInC,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,UAAO,GAAG,MAAM,EAAE;IAgB7D,WAAW,CAAC,iBAAiB,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE;IAgChD,mBAAmB,CAAC,YAAY,EAAE,QAAQ,EAAE,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE;IAkB3E,iBAAiB,CAAC,YAAY,EAAE,QAAQ,EAAE,GAAG,GAAG,EAAE;CAiBrD"}
package/dist/DataFrame.js CHANGED
@@ -1,97 +1,104 @@
1
1
  var g = Object.defineProperty;
2
- var f = (e, r, o) => r in e ? g(e, r, { enumerable: !0, configurable: !0, writable: !0, value: o }) : e[r] = o;
3
- var u = (e, r, o) => f(e, typeof r != "symbol" ? r + "" : r, o);
4
- import { exhaustive as a } from "./utils/index.js";
5
- import c from "./node_modules/lodash/lodash.js";
6
- const w = Symbol("noGrouped");
7
- function G(e) {
2
+ var f = (e, o, r) => o in e ? g(e, o, { enumerable: !0, configurable: !0, writable: !0, value: r }) : e[o] = r;
3
+ var u = (e, o, r) => f(e, typeof o != "symbol" ? o + "" : o, r);
4
+ import { l as c } from "./node_modules/lodash/lodash.js";
5
+ import { exhaustive as d } from "./utils/index.js";
6
+ const m = Symbol("noGrouped");
7
+ function C(e) {
8
8
  return "type" in e && e.type === "columns";
9
9
  }
10
- class m {
11
- constructor(r, o) {
10
+ class w {
11
+ constructor(o, r) {
12
12
  u(this, "id");
13
13
  // input data grouped by columns
14
14
  u(this, "data");
15
15
  u(this, "rowsCount");
16
16
  u(this, "columnNames");
17
+ u(this, "rows");
18
+ u(this, "mapColumnCategories", /* @__PURE__ */ new Map());
17
19
  u(this, "rowsGrouped");
18
- this.id = r, this.data = o, this.columnNames = Object.keys(o), this.rowsCount = this.columnNames.length ? o[this.columnNames[0]].length : 0;
20
+ this.id = o, this.data = r, this.columnNames = Object.keys(r), this.rowsCount = this.columnNames.length ? r[this.columnNames[0]].length : 0, this.rows = this.computeRows();
19
21
  }
20
- static from(r) {
21
- if (r instanceof m)
22
- return r;
23
- if (G(r))
24
- return new m(r.id, r.values);
25
- a(r, "Unknown input data format");
22
+ static from(o) {
23
+ if (o instanceof w)
24
+ return o;
25
+ if (C(o))
26
+ return new w(o.id, o.values);
27
+ d(o, "Unknown input data format");
26
28
  }
27
- get rows() {
28
- const r = [];
29
- for (let o = 0; o < this.rowsCount; o++)
30
- r.push(
31
- this.columnNames.reduce((s, t) => (s[t] = this.data[t][o], s), {})
29
+ computeRows() {
30
+ const o = [];
31
+ for (let r = 0; r < this.rowsCount; r++)
32
+ o.push(
33
+ this.columnNames.reduce((s, t) => (s[t] = this.data[t][r], s), {})
32
34
  );
33
- return r;
35
+ return o;
34
36
  }
35
- getColumn(r) {
36
- return this.data[r];
37
+ getColumn(o) {
38
+ return this.data[o];
37
39
  }
38
- getColumnCategories(r, o = !0) {
39
- if (!this.columnNames.includes(r))
40
- throw new Error(`Column ${r} does not exist`);
41
- return c.uniq(this.getColumn(r)).filter((s) => o ? s !== null : !0).map(String);
40
+ getColumnCategories(o, r = !0) {
41
+ if (!this.columnNames.includes(o))
42
+ throw new Error(`Column ${o} does not exist`);
43
+ const s = `${o}${r ? "" : "_not_null"}`;
44
+ if (!this.mapColumnCategories.has(s)) {
45
+ let t = this.getColumn(o);
46
+ r && (t = t.filter((n) => n !== null)), this.mapColumnCategories.set(s, c.uniq(t.map(String)));
47
+ }
48
+ return this.mapColumnCategories.get(s) ?? [];
42
49
  }
43
- setGrouping(r) {
44
- const o = { grouped: {}, rows: this.rows };
45
- let s = [o];
46
- r.forEach((t) => {
47
- const h = t === null ? [w] : this.getColumnCategories(t, !1), l = [];
48
- s.forEach((n) => {
50
+ setGrouping(o) {
51
+ const r = { grouped: {}, rows: this.rows };
52
+ let s = [r];
53
+ o.forEach((t) => {
54
+ const n = t === null ? [m] : this.getColumnCategories(t, !1), h = [];
55
+ s.forEach((i) => {
49
56
  if (t === null)
50
- n.grouped = {
51
- [w]: {
52
- rows: n.rows,
57
+ i.grouped = {
58
+ [m]: {
59
+ rows: i.rows,
53
60
  grouped: {}
54
61
  }
55
- }, l.push(n.grouped[w]);
62
+ }, h.push(i.grouped[m]);
56
63
  else {
57
- const d = c.groupBy(n.rows, (i) => String(i[t]));
58
- n.grouped = h.reduce((i, p) => (i[p] = {
59
- rows: d[p] ?? [],
64
+ const a = c.groupBy(i.rows, (l) => String(l[t]));
65
+ i.grouped = n.reduce((l, p) => (l[p] = {
66
+ rows: a[p] ?? [],
60
67
  grouped: {}
61
- }, l.push(i[p]), i), {});
68
+ }, h.push(l[p]), l), {});
62
69
  }
63
- }), s = l;
64
- }), this.rowsGrouped = o.grouped;
70
+ }), s = h;
71
+ }), this.rowsGrouped = r.grouped;
65
72
  }
66
- getColumnByGrouping(r, o) {
73
+ getColumnByGrouping(o, r) {
67
74
  if (!this.rowsGrouped)
68
75
  return [];
69
- if (!r.length)
70
- return this.rows.map((t) => Number(t[o]));
76
+ if (!o.length)
77
+ return this.rows.map((t) => Number(t[r]));
71
78
  let s = { grouped: this.rowsGrouped, rows: this.rows };
72
- return r.forEach((t) => {
73
- const h = s.grouped[t ?? "null"];
74
- if (!h)
79
+ return o.forEach((t) => {
80
+ const n = s.grouped[t ?? "null"];
81
+ if (!n)
75
82
  return [];
76
- s = h;
77
- }), s.rows.map((t) => Number(t[o]));
83
+ s = n;
84
+ }), s.rows.map((t) => Number(t[r]));
78
85
  }
79
- getRowsByGrouping(r) {
86
+ getRowsByGrouping(o) {
80
87
  if (!this.rowsGrouped)
81
88
  return [];
82
- if (!r.length)
89
+ if (!o.length)
83
90
  return this.rows;
84
- let o = { grouped: this.rowsGrouped, rows: this.rows };
85
- return r.forEach((s) => {
86
- const t = o.grouped[s];
91
+ let r = { grouped: this.rowsGrouped, rows: this.rows };
92
+ return o.forEach((s) => {
93
+ const t = r.grouped[s];
87
94
  if (!t)
88
95
  return [];
89
- o = t;
90
- }), o == null ? void 0 : o.rows;
96
+ r = t;
97
+ }), r.rows;
91
98
  }
92
99
  }
93
100
  export {
94
- m as DataFrame,
95
- w as NO_GROUPED
101
+ w as DataFrame,
102
+ m as NO_GROUPED
96
103
  };
97
104
  //# sourceMappingURL=DataFrame.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DataFrame.js","sources":["../src/DataFrame.ts"],"sourcesContent":["import type {DataValue} from './types';\nimport {exhaustive} from './utils';\nimport lodash from 'lodash';\n\nexport type DataByColumns = {\n type: 'columns',\n values: Record<string, DataValue[]>,\n id: string\n}\nexport type DataSet = DataFrame | DataByColumns;\nexport const NO_GROUPED = Symbol('noGrouped');\nexport type GroupKey = string | typeof NO_GROUPED;\ntype Row = Record<string, DataValue>;\ntype RowsGroup = Record<\n GroupKey,\n {\n rows: Row[];\n grouped: RowsGroup;\n }\n>;\n\nfunction isDataByColumns (data:DataSet): data is DataByColumns {\n return 'type' in data && data.type === 'columns';\n}\n\nexport class DataFrame {\n id: string;\n // input data grouped by columns\n data: Record<string, DataValue[]>;\n rowsCount: number;\n columnNames: string[];\n rowsGrouped?: RowsGroup;\n\n static from (data: DataSet):DataFrame {\n if (data instanceof DataFrame) {\n return data;\n } else if (isDataByColumns(data)) {\n return new DataFrame(data.id, data.values);\n } else {\n exhaustive(data, 'Unknown input data format');\n }\n }\n\n constructor(id: string, data: Record<string, DataValue[]>) {\n this.id = id;\n this.data = data;\n this.columnNames = Object.keys(data);\n this.rowsCount = this.columnNames.length ? data[this.columnNames[0]].length : 0;\n }\n\n get rows () {\n const rows = [];\n\n for (let i = 0; i < this.rowsCount; i++) {\n rows.push(\n this.columnNames.reduce((res: Record<string, DataValue>, key) => {\n res[key] = this.data[key][i];\n return res;\n }, {})\n );\n }\n\n return rows;\n }\n\n getColumn(key: string): DataValue[] {\n return this.data[key];\n }\n\n getColumnCategories(key: string, ignoreNull = true): string[] {\n if (!this.columnNames.includes(key)) {\n throw new Error(`Column ${key} does not exist`);\n }\n return lodash\n .uniq(this.getColumn(key))\n .filter((v) => ignoreNull ? v !== null : true)\n .map(String);\n }\n\n setGrouping(groupingColumnIds: (string | null)[]) {\n const root = {grouped: {} as RowsGroup, rows: this.rows};\n let groups: RowsGroup[keyof RowsGroup][] = [root];\n groupingColumnIds.forEach(column => {\n const keys: GroupKey[] = column === null ? [NO_GROUPED] : this.getColumnCategories(column, false);\n const nextGroups: RowsGroup[keyof RowsGroup][] = [];\n groups.forEach(group => {\n if (column === null) {\n group.grouped = {\n [NO_GROUPED]: {\n rows: group.rows,\n grouped: {} as RowsGroup,\n },\n };\n nextGroups.push(group.grouped[NO_GROUPED]);\n } else {\n const groupedBy = lodash.groupBy(group.rows, row => String(row[column]));\n group.grouped = keys.reduce((res, key) => {\n res[key] = {\n rows: groupedBy[key as string] ?? [] as Row[],\n grouped: {} as RowsGroup,\n };\n nextGroups.push(res[key]);\n return res;\n }, {} as RowsGroup);\n }\n });\n groups = nextGroups;\n });\n this.rowsGrouped = root.grouped;\n }\n\n getColumnByGrouping(groupingKeys: GroupKey[], keyYColumn: string): number[] {\n if (!this.rowsGrouped) {\n return [];\n }\n if (!groupingKeys.length) {\n return this.rows.map(row => Number(row[keyYColumn]));\n }\n let result: {grouped: RowsGroup; rows: Row[]} = {grouped: this.rowsGrouped, rows: this.rows};\n groupingKeys.forEach(key => {\n const nextGroup = result.grouped[key ?? 'null'];\n if (!nextGroup) {\n return [];\n }\n result = nextGroup;\n });\n return result.rows.map(row => Number(row[keyYColumn]));\n }\n\n getRowsByGrouping(groupingKeys: GroupKey[]): Row[] {\n if (!this.rowsGrouped) {\n return [];\n }\n if (!groupingKeys.length) {\n return this.rows;\n }\n let result: {grouped: RowsGroup; rows: Row[]} = {grouped: this.rowsGrouped, rows: this.rows};\n groupingKeys.forEach(key => {\n const nextGroup = result.grouped[key];\n if (!nextGroup) {\n return [];\n }\n result = nextGroup;\n });\n return result?.rows;\n }\n}\n"],"names":["NO_GROUPED","isDataByColumns","data","DataFrame","id","__publicField","exhaustive","rows","i","res","key","ignoreNull","lodash","v","groupingColumnIds","root","groups","column","keys","nextGroups","group","groupedBy","row","groupingKeys","keyYColumn","result","nextGroup"],"mappings":"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"}
1
+ {"version":3,"file":"DataFrame.js","sources":["../src/DataFrame.ts"],"sourcesContent":["import { groupBy, uniq } from 'lodash';\nimport type { DataValue } from './types';\nimport { exhaustive } from './utils';\n\nexport type DataByColumns = {\n type: 'columns',\n values: Record<string, DataValue[]>,\n id: string\n}\nexport type DataSet = DataFrame | DataByColumns;\nexport const NO_GROUPED = Symbol('noGrouped');\nexport type GroupKey = string | typeof NO_GROUPED;\ntype Row = Record<string, DataValue>;\ntype RowsGroup = Record<\n GroupKey,\n {\n rows: Row[];\n grouped: RowsGroup;\n }\n>;\n\nfunction isDataByColumns (data:DataSet): data is DataByColumns {\n return 'type' in data && data.type === 'columns';\n}\n\nexport class DataFrame {\n readonly id: string;\n // input data grouped by columns\n readonly data: Record<string, DataValue[]>;\n readonly rowsCount: number;\n readonly columnNames: string[];\n readonly rows: Row[];\n\n readonly mapColumnCategories: Map<string, string[]> = new Map();\n\n rowsGrouped?: RowsGroup;\n\n static from (data: DataSet):DataFrame {\n if (data instanceof DataFrame) {\n return data;\n } else if (isDataByColumns(data)) {\n return new DataFrame(data.id, data.values);\n } else {\n exhaustive(data, 'Unknown input data format');\n }\n }\n\n constructor(id: string, data: Record<string, DataValue[]>) {\n this.id = id;\n this.data = data;\n this.columnNames = Object.keys(data);\n this.rowsCount = this.columnNames.length ? data[this.columnNames[0]].length : 0;\n this.rows = this.computeRows();\n }\n\n private computeRows() {\n const rows: Row[] = [];\n\n for (let i = 0; i < this.rowsCount; i++) {\n rows.push(\n this.columnNames.reduce((res: Record<string, DataValue>, key) => {\n res[key] = this.data[key][i];\n return res;\n }, {})\n );\n }\n\n return rows;\n }\n\n getColumn(key: string): DataValue[] {\n return this.data[key];\n }\n\n getColumnCategories(key: string, ignoreNull = true): string[] {\n if (!this.columnNames.includes(key)) {\n throw new Error(`Column ${key} does not exist`);\n }\n\n const fullKey = `${key}${ignoreNull ? '' : '_not_null'}`;\n\n if (!this.mapColumnCategories.has(fullKey)) {\n let columnData = this.getColumn(key);\n if (ignoreNull) columnData = columnData.filter((v) => v !== null);\n this.mapColumnCategories.set(fullKey, uniq(columnData.map(String)));\n }\n\n return this.mapColumnCategories.get(fullKey) ?? [];\n }\n\n setGrouping(groupingColumnIds: (string | null)[]) {\n const root = {grouped: {} as RowsGroup, rows: this.rows};\n let groups: RowsGroup[keyof RowsGroup][] = [root];\n groupingColumnIds.forEach(column => {\n const keys: GroupKey[] = column === null ? [NO_GROUPED] : this.getColumnCategories(column, false);\n const nextGroups: RowsGroup[keyof RowsGroup][] = [];\n groups.forEach(group => {\n if (column === null) {\n group.grouped = {\n [NO_GROUPED]: {\n rows: group.rows,\n grouped: {} as RowsGroup,\n },\n };\n nextGroups.push(group.grouped[NO_GROUPED]);\n } else {\n const groupedBy = groupBy(group.rows, row => String(row[column]));\n group.grouped = keys.reduce((res, key) => {\n res[key] = {\n rows: groupedBy[key as string] ?? [] as Row[],\n grouped: {} as RowsGroup,\n };\n nextGroups.push(res[key]);\n return res;\n }, {} as RowsGroup);\n }\n });\n groups = nextGroups;\n });\n this.rowsGrouped = root.grouped;\n }\n\n getColumnByGrouping(groupingKeys: GroupKey[], keyYColumn: string): number[] {\n if (!this.rowsGrouped) {\n return [];\n }\n if (!groupingKeys.length) {\n return this.rows.map(row => Number(row[keyYColumn]));\n }\n let result: {grouped: RowsGroup; rows: Row[]} = {grouped: this.rowsGrouped, rows: this.rows};\n groupingKeys.forEach(key => {\n const nextGroup = result.grouped[key ?? 'null'];\n if (!nextGroup) {\n return [];\n }\n result = nextGroup;\n });\n return result.rows.map(row => Number(row[keyYColumn]));\n }\n\n getRowsByGrouping(groupingKeys: GroupKey[]): Row[] {\n if (!this.rowsGrouped) {\n return [];\n }\n if (!groupingKeys.length) {\n return this.rows;\n }\n let result: {grouped: RowsGroup; rows: Row[]} = {grouped: this.rowsGrouped, rows: this.rows};\n groupingKeys.forEach(key => {\n const nextGroup = result.grouped[key];\n if (!nextGroup) {\n return [];\n }\n result = nextGroup;\n });\n return result.rows;\n }\n}\n"],"names":["NO_GROUPED","isDataByColumns","data","DataFrame","id","__publicField","exhaustive","rows","i","res","key","ignoreNull","fullKey","columnData","v","uniq","groupingColumnIds","root","groups","column","keys","nextGroups","group","groupedBy","groupBy","row","groupingKeys","keyYColumn","result","nextGroup"],"mappings":"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"}
@@ -1,8 +1,8 @@
1
1
  import { TooltipsData } from '../../common/Tooltip';
2
- import { ChartSizes, LabelAngles, Margins, CaptionsSizes, ChartDimensionsData, ChartScales } from './types';
3
- import { Cell, GroupedCellsData } from '../getCells';
4
- import { BubbleSettingsImpl } from '../BubbleSettingsImpl';
5
2
  import { DataValue } from '../../types';
3
+ import { BubbleSettingsImpl } from '../BubbleSettingsImpl';
4
+ import { Cell, GroupedCellsData } from '../getCells';
5
+ import { CaptionsSizes, ChartDimensionsData, ChartScales, ChartSizes, LabelAngles, Margins } from './types';
6
6
  export declare function Chart({ facetKey, dimensions, scales, cells, colorScale, sizeScale, chartSettings, cellsMeta, stepX, stepY, aes, labelAngles, chartSizes, margins, tooltipsContainer, tooltipsData }: {
7
7
  facetKey: string;
8
8
  chartSizes: ChartSizes;
@@ -1 +1 @@
1
- {"version":3,"file":"Chart.d.ts","sourceRoot":"","sources":["../../../src/bubble/components/Chart.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAC,MAAM,sBAAsB,CAAC;AAGxD,OAAO,KAAK,EAAC,UAAU,EAAE,WAAW,EAAE,OAAO,EAAC,MAAM,SAAS,CAAC;AAC9D,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,SAAS,CAAC;AAC3C,OAAO,KAAK,EAAC,IAAI,EAAE,gBAAgB,EAAC,MAAM,aAAa,CAAC;AACxD,OAAO,KAAK,EAAC,mBAAmB,EAAE,WAAW,EAAC,MAAM,SAAS,CAAC;AAE9D,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,uBAAuB,CAAC;AAG9D,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,aAAa,CAAC;AA6B3C,wBAAgB,KAAK,CAAC,EAClB,QAAQ,EACR,UAAU,EACV,MAAM,EACN,KAAK,EACL,UAAU,EACV,SAAS,EACT,aAAa,EACb,SAAS,EACT,KAAK,EACL,KAAK,EACL,GAAG,EACH,WAAW,EACX,UAAU,EACV,OAAO,EACP,iBAAiB,EACjB,YAAY,EACf,EAAE;IACC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,UAAU,CAAC;IACvB,aAAa,EAAE,aAAa,CAAC;IAC7B,UAAU,EAAE,mBAAmB,CAAC;IAChC,MAAM,EAAE,WAAW,CAAC;IACpB,KAAK,EAAE,gBAAgB,CAAC,QAAQ,CAAC,CAAC,MAAM,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAC7E,UAAU,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,MAAM,CAAC;IACzC,SAAS,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,MAAM,CAAC;IACxC,aAAa,EAAE,kBAAkB,CAAC,eAAe,CAAC,CAAC;IACnD,SAAS,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAC/B,WAAW,EAAE,WAAW,CAAC;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,YAAY,EAAE,YAAY,CAAC,IAAI,CAAC,CAAA;CACnC,2CAqHA"}
1
+ {"version":3,"file":"Chart.d.ts","sourceRoot":"","sources":["../../../src/bubble/components/Chart.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAGzD,OAAO,KAAK,EAAc,SAAS,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAEhE,OAAO,KAAK,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE1D,OAAO,KAAK,EAAE,aAAa,EAAE,mBAAmB,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AA2BjH,wBAAgB,KAAK,CAAC,EAClB,QAAQ,EACR,UAAU,EACV,MAAM,EACN,KAAK,EACL,UAAU,EACV,SAAS,EACT,aAAa,EACb,SAAS,EACT,KAAK,EACL,KAAK,EACL,GAAG,EACH,WAAW,EACX,UAAU,EACV,OAAO,EACP,iBAAiB,EACjB,YAAY,EACf,EAAE;IACC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,UAAU,CAAC;IACvB,aAAa,EAAE,aAAa,CAAC;IAC7B,UAAU,EAAE,mBAAmB,CAAC;IAChC,MAAM,EAAE,WAAW,CAAC;IACpB,KAAK,EAAE,gBAAgB,CAAC,QAAQ,CAAC,CAAC,MAAM,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAC7E,UAAU,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,MAAM,CAAC;IACzC,SAAS,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,MAAM,CAAC;IACxC,aAAa,EAAE,kBAAkB,CAAC,eAAe,CAAC,CAAC;IACnD,SAAS,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAC/B,WAAW,EAAE,WAAW,CAAC;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,YAAY,EAAE,YAAY,CAAC,IAAI,CAAC,CAAA;CACnC,2CAqHA"}
@@ -1,10 +1,10 @@
1
1
  import { j as n } from "../../node_modules/react/jsx-runtime.js";
2
- import { Tooltip as I } from "../../common/Tooltip.js";
3
- import { AxisCaptions as N } from "./AxisCaptions.js";
4
- import { FONT_SIZE as P, FACET_TITLE_OFFSET as R } from "../constants.js";
5
- import { BLACK as Z } from "../../constants.js";
6
- import { r as q } from "../../_virtual/index.js";
7
- import { r as G } from "../../node_modules/react-dom/index.js";
2
+ import { r as I } from "../../_virtual/index.js";
3
+ import { r as N } from "../../node_modules/react-dom/index.js";
4
+ import { Tooltip as P } from "../../common/Tooltip.js";
5
+ import { BLACK as R } from "../../constants.js";
6
+ import { FONT_SIZE as Z, FACET_TITLE_OFFSET as q } from "../constants.js";
7
+ import { AxisCaptions as G } from "./AxisCaptions.js";
8
8
  function s(e) {
9
9
  if (e === null)
10
10
  return "null";
@@ -43,29 +43,29 @@ function te({
43
43
  tooltipsContainer: S,
44
44
  tooltipsData: o
45
45
  }) {
46
- const [V, w] = q.useState(), { xAxis: F, yAxis: k, tooltips: $ } = p, { width: B, height: O } = t.inner, { padding: i, sideElementBBoxes: c } = t, { xLabels: W, yLabels: _ } = g, j = r.x.domain(), z = r.y.domain(), v = {
46
+ const [V, w] = I.useState(), { xAxis: F, yAxis: k, tooltips: $ } = p, { width: B, height: W } = t.inner, { padding: i, sideElementBBoxes: c } = t, { xLabels: _, yLabels: M } = g, j = r.x.domain(), E = r.y.domain(), O = {
47
47
  left: h.left + t.left + i.left,
48
48
  right: d.totalWidth - (h.left + t.left + i.left),
49
49
  top: h.top + t.top + i.top,
50
50
  bottom: d.totalHeight - (h.top + t.top + i.top)
51
- }, E = !1, M = o.fixed && V;
52
- return /* @__PURE__ */ n.jsxs("g", { transform: `translate(${t.left},${t.top})`, fontSize: P, children: [
51
+ }, z = !1, v = o.fixed && V;
52
+ return /* @__PURE__ */ n.jsxs("g", { transform: `translate(${t.left},${t.top})`, fontSize: Z, children: [
53
53
  /* @__PURE__ */ n.jsxs("g", { transform: `translate(${i.left},${i.top})`, children: [
54
54
  c.top.facetTitle.isVisible && /* @__PURE__ */ n.jsx(
55
55
  "text",
56
56
  {
57
57
  x: c.top.facetTitle.x,
58
- y: c.top.facetTitle.y + c.top.facetTitle.height - R,
58
+ y: c.top.facetTitle.y + c.top.facetTitle.height - q,
59
59
  fontWeight: "500",
60
60
  fontSize: "20px",
61
61
  children: g.facetKeyValues[e].join(", ")
62
62
  }
63
63
  ),
64
- E,
64
+ z,
65
65
  j.map(
66
- (f) => z.map((b) => {
66
+ (f) => E.map((b) => {
67
67
  var L;
68
- const l = (L = a == null ? void 0 : a[f]) == null ? void 0 : L[b], H = M && l && o.selectedData === l, T = l ? /* @__PURE__ */ n.jsx(
68
+ const l = (L = a == null ? void 0 : a[f]) == null ? void 0 : L[b], H = v && l && o.selectedData === l, T = l ? /* @__PURE__ */ n.jsx(
69
69
  "circle",
70
70
  {
71
71
  cx: r.x(f) + m / 2,
@@ -73,30 +73,30 @@ function te({
73
73
  r: u(l.normalizedSizeValue),
74
74
  stroke: y.cellStrokeColor,
75
75
  fill: l.colorValue === null ? y.emptyCellColor : x(l.normalizedColorValue),
76
- onMouseOver: () => o.onMouseOver(l, e),
76
+ onMouseOver: () => o.onMouseEnter(l, e),
77
77
  onMouseLeave: () => o.onMouseLeave()
78
78
  },
79
79
  l ? l.id : `${f}_${b}`
80
80
  ) : null;
81
- return H ? G.createPortal(T, V) : T;
81
+ return H ? N.createPortal(T, V) : T;
82
82
  })
83
83
  ),
84
- /* @__PURE__ */ n.jsx("g", { children: p.frame.type === "full" && /* @__PURE__ */ n.jsx("rect", { fill: "none", stroke: Z, x: "0", y: "0", width: B, height: O }) }),
84
+ /* @__PURE__ */ n.jsx("g", { children: p.frame.type === "full" && /* @__PURE__ */ n.jsx("rect", { fill: "none", stroke: R, x: "0", y: "0", width: B, height: W }) }),
85
85
  /* @__PURE__ */ n.jsx("g", { fontWeight: "500", children: /* @__PURE__ */ n.jsx(
86
- N,
86
+ G,
87
87
  {
88
88
  sideElementBBoxes: c,
89
89
  xKeys: j,
90
- yKeys: z,
90
+ yKeys: E,
91
91
  scales: r,
92
92
  xAxis: F,
93
93
  yAxis: k,
94
94
  stepX: m,
95
95
  stepY: C,
96
96
  labelAngles: A,
97
- xLabels: W,
98
- yLabels: _,
99
- debug: E
97
+ xLabels: _,
98
+ yLabels: M,
99
+ debug: z
100
100
  }
101
101
  ) }),
102
102
  o.fixed && /* @__PURE__ */ n.jsx("rect", { width: d.chartWidth, height: d.chartHeight, fill: "rgba(255,255,255,0.8)" }),
@@ -110,14 +110,14 @@ function te({
110
110
  )
111
111
  ] }),
112
112
  p.tooltips.show && o.selectedData && o.currentFacet === e && /* @__PURE__ */ n.jsx(
113
- I,
113
+ P,
114
114
  {
115
115
  content: J(o.selectedData, g, $ == null ? void 0 : $.content),
116
116
  x: r.x(String(o.selectedData.x)) + m / 2,
117
117
  y: r.y(String(o.selectedData.y)) + C / 2,
118
118
  offset: j.length > 1 ? m / 2 : 0,
119
119
  active: !0,
120
- sideDistances: v,
120
+ sideDistances: O,
121
121
  container: S,
122
122
  onClose: o.onClose,
123
123
  fixed: o.fixed
@@ -1 +1 @@
1
- {"version":3,"file":"Chart.js","sources":["../../../src/bubble/components/Chart.tsx"],"sourcesContent":["import type { TooltipsData} from '../../common/Tooltip';\nimport {Tooltip} from '../../common/Tooltip';\nimport {AxisCaptions} from './AxisCaptions';\nimport type {ChartSizes, LabelAngles, Margins} from './types';\nimport type {CaptionsSizes} from './types';\nimport type {Cell, GroupedCellsData} from '../getCells';\nimport type {ChartDimensionsData, ChartScales} from './types';\nimport {FACET_TITLE_OFFSET, FONT_SIZE} from '../constants';\nimport type {BubbleSettingsImpl} from '../BubbleSettingsImpl';\nimport {BLACK} from '../../constants';\nimport type {ColumnName} from '../../types';\nimport type {DataValue} from '../../types';\nimport React, {useState} from 'react';\nimport {createPortal} from 'react-dom';\n\nfunction formatCellValue (v:DataValue):number|string {\n if (v === null) {\n return 'null';\n }\n if (typeof v === 'number') {\n const whole = v > 0 ? Math.floor(v) : Math.ceil(v);\n const decimal = v - whole;\n return whole + Number(decimal.toPrecision(2));\n }\n return v;\n}\nfunction getTooltipContent(cell: Cell, cellsMeta:GroupedCellsData['meta'], columnsList: ColumnName[] = []) {\n const row = cell.data;\n const lines = [\n `X: ${cellsMeta.xLabels[cell.x as string]}`,\n `Y: ${cellsMeta.yLabels[cell.y as string]}`,\n `Value (color): ${formatCellValue(cell.colorValue)}${cell.colorValue !== cell.normalizedColorValue ? ` (${formatCellValue(cell.normalizedColorValue)})`: ''}`,\n `Value (size): ${formatCellValue(cell.sizeValue)}${cell.sizeValue !== cell.normalizedSizeValue ? ` (${formatCellValue(cell.normalizedSizeValue)})`: ''}`,\n ];\n for (const column of columnsList) {\n lines.push(`${column.label}: ${row[column.valueLabels ?? column.value]}`);\n }\n return lines;\n}\n\nexport function Chart({\n facetKey,\n dimensions,\n scales,\n cells,\n colorScale,\n sizeScale,\n chartSettings,\n cellsMeta,\n stepX,\n stepY,\n aes,\n labelAngles,\n chartSizes,\n margins,\n tooltipsContainer,\n tooltipsData\n}: {\n facetKey: string;\n chartSizes: ChartSizes;\n captionsSizes: CaptionsSizes;\n dimensions: ChartDimensionsData;\n scales: ChartScales;\n cells: GroupedCellsData['facets'][keyof GroupedCellsData['facets']]['cells'];\n colorScale: (value: DataValue) => string;\n sizeScale: (value: DataValue) => number;\n chartSettings: BubbleSettingsImpl['chartSettings'];\n cellsMeta: GroupedCellsData['meta'];\n stepX: number;\n stepY: number;\n aes: BubbleSettingsImpl['aes'];\n labelAngles: LabelAngles;\n margins: Margins;\n tooltipsContainer?: Element;\n tooltipsData: TooltipsData<Cell>\n}) {\n const [activeElementContainer, setActiveElementContainer] = useState<SVGGElement>();\n\n const {xAxis, yAxis, tooltips} = chartSettings;\n const {width, height} = dimensions.inner;\n const {padding, sideElementBBoxes} = dimensions;\n const {xLabels, yLabels} = cellsMeta;\n\n const xKeys = scales.x.domain();\n const yKeys = scales.y.domain();\n\n const sideDistances = {\n left: margins.left + dimensions.left + padding.left,\n right: chartSizes.totalWidth - (margins.left + dimensions.left + padding.left),\n top: margins.top + dimensions.top + padding.top,\n bottom: chartSizes.totalHeight - (margins.top + dimensions.top + padding.top),\n };\n\n const debug = false;\n\n const dimmedBackground = tooltipsData.fixed && activeElementContainer;\n return (\n <g transform={`translate(${dimensions.left},${dimensions.top})`} fontSize={FONT_SIZE}>\n <g transform={`translate(${padding.left},${padding.top})`}>\n {/* facet title */}\n {sideElementBBoxes.top.facetTitle.isVisible && (\n <text\n x={sideElementBBoxes.top.facetTitle.x}\n y={\n sideElementBBoxes.top.facetTitle.y +\n sideElementBBoxes.top.facetTitle.height -\n FACET_TITLE_OFFSET\n }\n fontWeight=\"500\"\n fontSize=\"20px\"\n >\n {cellsMeta.facetKeyValues[facetKey].join(', ')}\n </text>\n )}\n {debug && (\n <g fill=\"green\" opacity=\"0.2\">\n <rect\n x={-padding.left}\n y={-padding.top}\n width={dimensions.outer.width}\n height={dimensions.outer.height}\n fill=\"none\"\n stroke=\"red\"\n />\n <rect x={-padding.left} y=\"0\" width={padding.left} height={height} />\n <rect x={width} y=\"0\" width={padding.right} height={height} />\n <rect x=\"0\" y={-padding.top} width={width} height={padding.top} />\n <rect x=\"0\" y={height} width={width} height={padding.bottom} />\n </g>\n )}\n {/* cells */}\n {xKeys.map(xKey =>\n yKeys.map(yKey => {\n const cell = cells?.[xKey]?.[yKey];\n const highlighted = dimmedBackground && cell && tooltipsData.selectedData === cell;\n const cellElement = cell ? (\n <circle\n key={cell ? cell.id : `${xKey}_${yKey}`}\n cx={scales.x(xKey) + stepX / 2}\n cy={scales.y(yKey) + stepY / 2}\n r={sizeScale(cell.normalizedSizeValue as number)}\n stroke={aes.cellStrokeColor}\n fill={cell.colorValue === null ? aes.emptyCellColor : colorScale(cell.normalizedColorValue)}\n onMouseOver={() => tooltipsData.onMouseOver(cell, facetKey)}\n onMouseLeave={() => tooltipsData.onMouseLeave()}\n />\n ) : null;\n return highlighted ? createPortal(cellElement, activeElementContainer) : cellElement;\n })\n )}\n <g>\n {chartSettings.frame.type === 'full' && <rect fill=\"none\" stroke={BLACK} x=\"0\" y=\"0\" width={width} height={height} />}\n </g>\n <g fontWeight=\"500\">\n <AxisCaptions\n sideElementBBoxes={sideElementBBoxes}\n xKeys={xKeys}\n yKeys={yKeys}\n scales={scales}\n xAxis={xAxis}\n yAxis={yAxis}\n stepX={stepX}\n stepY={stepY}\n labelAngles={labelAngles}\n xLabels={xLabels}\n yLabels={yLabels}\n debug={debug}\n />\n </g>\n {tooltipsData.fixed && <rect width={chartSizes.chartWidth} height={chartSizes.chartHeight} fill=\"rgba(255,255,255,0.8)\"/>}\n <g ref={node => {\n if (node && !activeElementContainer) {\n setActiveElementContainer(node);\n }\n }}\n />\n </g>\n {chartSettings.tooltips.show && tooltipsData.selectedData && tooltipsData.currentFacet === facetKey && (\n <Tooltip\n content={getTooltipContent(tooltipsData.selectedData, cellsMeta, tooltips?.content)}\n x={scales.x(String(tooltipsData.selectedData.x)) + stepX / 2}\n y={scales.y(String(tooltipsData.selectedData.y)) + stepY / 2}\n offset={xKeys.length > 1 ? stepX / 2 : 0}\n active\n sideDistances={sideDistances}\n container={tooltipsContainer}\n onClose={tooltipsData.onClose}\n fixed={tooltipsData.fixed}\n />\n )}\n </g>\n );\n}\n"],"names":["formatCellValue","v","whole","decimal","getTooltipContent","cell","cellsMeta","columnsList","row","lines","column","Chart","facetKey","dimensions","scales","cells","colorScale","sizeScale","chartSettings","stepX","stepY","aes","labelAngles","chartSizes","margins","tooltipsContainer","tooltipsData","activeElementContainer","setActiveElementContainer","useState","xAxis","yAxis","tooltips","width","height","padding","sideElementBBoxes","xLabels","yLabels","xKeys","yKeys","sideDistances","debug","dimmedBackground","jsxs","FONT_SIZE","jsx","FACET_TITLE_OFFSET","xKey","yKey","_a","highlighted","cellElement","createPortal","BLACK","AxisCaptions","node","Tooltip"],"mappings":"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"}
1
+ {"version":3,"file":"Chart.js","sources":["../../../src/bubble/components/Chart.tsx"],"sourcesContent":["import { useState } from 'react';\nimport { createPortal } from 'react-dom';\nimport type { TooltipsData } from '../../common/Tooltip';\nimport { Tooltip } from '../../common/Tooltip';\nimport { BLACK } from '../../constants';\nimport type { ColumnName, DataValue } from '../../types';\nimport type { BubbleSettingsImpl } from '../BubbleSettingsImpl';\nimport { FACET_TITLE_OFFSET, FONT_SIZE } from '../constants';\nimport type { Cell, GroupedCellsData } from '../getCells';\nimport { AxisCaptions } from './AxisCaptions';\nimport type { CaptionsSizes, ChartDimensionsData, ChartScales, ChartSizes, LabelAngles, Margins } from './types';\n\nfunction formatCellValue (v:DataValue):number|string {\n if (v === null) {\n return 'null';\n }\n if (typeof v === 'number') {\n const whole = v > 0 ? Math.floor(v) : Math.ceil(v);\n const decimal = v - whole;\n return whole + Number(decimal.toPrecision(2));\n }\n return v;\n}\nfunction getTooltipContent(cell: Cell, cellsMeta:GroupedCellsData['meta'], columnsList: ColumnName[] = []) {\n const row = cell.data;\n const lines = [\n `X: ${cellsMeta.xLabels[cell.x as string]}`,\n `Y: ${cellsMeta.yLabels[cell.y as string]}`,\n `Value (color): ${formatCellValue(cell.colorValue)}${cell.colorValue !== cell.normalizedColorValue ? ` (${formatCellValue(cell.normalizedColorValue)})`: ''}`,\n `Value (size): ${formatCellValue(cell.sizeValue)}${cell.sizeValue !== cell.normalizedSizeValue ? ` (${formatCellValue(cell.normalizedSizeValue)})`: ''}`,\n ];\n for (const column of columnsList) {\n lines.push(`${column.label}: ${row[column.valueLabels ?? column.value]}`);\n }\n return lines;\n}\n\nexport function Chart({\n facetKey,\n dimensions,\n scales,\n cells,\n colorScale,\n sizeScale,\n chartSettings,\n cellsMeta,\n stepX,\n stepY,\n aes,\n labelAngles,\n chartSizes,\n margins,\n tooltipsContainer,\n tooltipsData\n}: {\n facetKey: string;\n chartSizes: ChartSizes;\n captionsSizes: CaptionsSizes;\n dimensions: ChartDimensionsData;\n scales: ChartScales;\n cells: GroupedCellsData['facets'][keyof GroupedCellsData['facets']]['cells'];\n colorScale: (value: DataValue) => string;\n sizeScale: (value: DataValue) => number;\n chartSettings: BubbleSettingsImpl['chartSettings'];\n cellsMeta: GroupedCellsData['meta'];\n stepX: number;\n stepY: number;\n aes: BubbleSettingsImpl['aes'];\n labelAngles: LabelAngles;\n margins: Margins;\n tooltipsContainer?: Element;\n tooltipsData: TooltipsData<Cell>\n}) {\n const [activeElementContainer, setActiveElementContainer] = useState<SVGGElement>();\n\n const {xAxis, yAxis, tooltips} = chartSettings;\n const {width, height} = dimensions.inner;\n const {padding, sideElementBBoxes} = dimensions;\n const {xLabels, yLabels} = cellsMeta;\n\n const xKeys = scales.x.domain();\n const yKeys = scales.y.domain();\n\n const sideDistances = {\n left: margins.left + dimensions.left + padding.left,\n right: chartSizes.totalWidth - (margins.left + dimensions.left + padding.left),\n top: margins.top + dimensions.top + padding.top,\n bottom: chartSizes.totalHeight - (margins.top + dimensions.top + padding.top),\n };\n\n const debug = false;\n\n const dimmedBackground = tooltipsData.fixed && activeElementContainer;\n return (\n <g transform={`translate(${dimensions.left},${dimensions.top})`} fontSize={FONT_SIZE}>\n <g transform={`translate(${padding.left},${padding.top})`}>\n {/* facet title */}\n {sideElementBBoxes.top.facetTitle.isVisible && (\n <text\n x={sideElementBBoxes.top.facetTitle.x}\n y={\n sideElementBBoxes.top.facetTitle.y +\n sideElementBBoxes.top.facetTitle.height -\n FACET_TITLE_OFFSET\n }\n fontWeight=\"500\"\n fontSize=\"20px\"\n >\n {cellsMeta.facetKeyValues[facetKey].join(', ')}\n </text>\n )}\n {debug && (\n <g fill=\"green\" opacity=\"0.2\">\n <rect\n x={-padding.left}\n y={-padding.top}\n width={dimensions.outer.width}\n height={dimensions.outer.height}\n fill=\"none\"\n stroke=\"red\"\n />\n <rect x={-padding.left} y=\"0\" width={padding.left} height={height} />\n <rect x={width} y=\"0\" width={padding.right} height={height} />\n <rect x=\"0\" y={-padding.top} width={width} height={padding.top} />\n <rect x=\"0\" y={height} width={width} height={padding.bottom} />\n </g>\n )}\n {/* cells */}\n {xKeys.map(xKey =>\n yKeys.map(yKey => {\n const cell = cells?.[xKey]?.[yKey];\n const highlighted = dimmedBackground && cell && tooltipsData.selectedData === cell;\n const cellElement = cell ? (\n <circle\n key={cell ? cell.id : `${xKey}_${yKey}`}\n cx={scales.x(xKey) + stepX / 2}\n cy={scales.y(yKey) + stepY / 2}\n r={sizeScale(cell.normalizedSizeValue as number)}\n stroke={aes.cellStrokeColor}\n fill={cell.colorValue === null ? aes.emptyCellColor : colorScale(cell.normalizedColorValue)}\n onMouseOver={() => tooltipsData.onMouseEnter(cell, facetKey)}\n onMouseLeave={() => tooltipsData.onMouseLeave()}\n />\n ) : null;\n return highlighted ? createPortal(cellElement, activeElementContainer) : cellElement;\n })\n )}\n <g>\n {chartSettings.frame.type === 'full' && <rect fill=\"none\" stroke={BLACK} x=\"0\" y=\"0\" width={width} height={height} />}\n </g>\n <g fontWeight=\"500\">\n <AxisCaptions\n sideElementBBoxes={sideElementBBoxes}\n xKeys={xKeys}\n yKeys={yKeys}\n scales={scales}\n xAxis={xAxis}\n yAxis={yAxis}\n stepX={stepX}\n stepY={stepY}\n labelAngles={labelAngles}\n xLabels={xLabels}\n yLabels={yLabels}\n debug={debug}\n />\n </g>\n {tooltipsData.fixed && <rect width={chartSizes.chartWidth} height={chartSizes.chartHeight} fill=\"rgba(255,255,255,0.8)\"/>}\n <g ref={node => {\n if (node && !activeElementContainer) {\n setActiveElementContainer(node);\n }\n }}\n />\n </g>\n {chartSettings.tooltips.show && tooltipsData.selectedData && tooltipsData.currentFacet === facetKey && (\n <Tooltip\n content={getTooltipContent(tooltipsData.selectedData, cellsMeta, tooltips?.content)}\n x={scales.x(String(tooltipsData.selectedData.x)) + stepX / 2}\n y={scales.y(String(tooltipsData.selectedData.y)) + stepY / 2}\n offset={xKeys.length > 1 ? stepX / 2 : 0}\n active\n sideDistances={sideDistances}\n container={tooltipsContainer}\n onClose={tooltipsData.onClose}\n fixed={tooltipsData.fixed}\n />\n )}\n </g>\n );\n}\n"],"names":["formatCellValue","v","whole","decimal","getTooltipContent","cell","cellsMeta","columnsList","row","lines","column","Chart","facetKey","dimensions","scales","cells","colorScale","sizeScale","chartSettings","stepX","stepY","aes","labelAngles","chartSizes","margins","tooltipsContainer","tooltipsData","activeElementContainer","setActiveElementContainer","useState","xAxis","yAxis","tooltips","width","height","padding","sideElementBBoxes","xLabels","yLabels","xKeys","yKeys","sideDistances","debug","dimmedBackground","jsxs","FONT_SIZE","jsx","FACET_TITLE_OFFSET","xKey","yKey","_a","highlighted","cellElement","createPortal","BLACK","AxisCaptions","node","Tooltip"],"mappings":"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"}
@@ -11,7 +11,7 @@ export type TooltipsData<T> = {
11
11
  fixed: boolean;
12
12
  selectedData: T | null;
13
13
  currentFacet: string;
14
- onMouseOver: (elementData: T, facetKey?: string) => void;
14
+ onMouseEnter: (elementData: T, facetKey?: string) => void;
15
15
  onMouseLeave: () => void;
16
16
  onClose: () => void;
17
17
  };
@@ -1 +1 @@
1
- {"version":3,"file":"Tooltip.d.ts","sourceRoot":"","sources":["../../src/common/Tooltip.tsx"],"names":[],"mappings":"AAOA,KAAK,aAAa,GAAG;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;CAClB,CAAC;AAkBF,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,UAEjD;AACD,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,QAAQ,UAAQ,UAGlE;AAyID,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI;IAC1B,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;IACf,YAAY,EAAE,CAAC,GAAG,IAAI,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,CAAC,WAAW,EAAC,CAAC,EAAE,QAAQ,CAAC,EAAC,MAAM,KAAK,IAAI,CAAC;IACvD,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,OAAO,EAAE,MAAM,IAAI,CAAA;CACtB,CAAA;AACD,wBAAgB,UAAU,CAAC,CAAC,GAAG,OAAO,EAAE,gCAAgC,GAAE,CAAC,CAAC,EAAC,OAAO,KAAK,IAAsB,GAAE,YAAY,CAAC,CAAC,CAAC,CAsF/H;AAED,wBAAgB,OAAO,CAAC,EACpB,OAAO,EACP,CAAC,EACD,CAAC,EACD,MAAM,EACN,KAAK,EACL,SAAS,EACT,aAAa,EACb,OAAyB,EACzB,MAAwB,EACxB,UAAiB,GACpB,EAAE;IACC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;IACf,aAAa,EAAE,aAAa,CAAC;IAC7B,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;CAC9B,kDAkHA"}
1
+ {"version":3,"file":"Tooltip.d.ts","sourceRoot":"","sources":["../../src/common/Tooltip.tsx"],"names":[],"mappings":"AAOA,KAAK,aAAa,GAAG;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;CAClB,CAAC;AAkBF,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,UAEjD;AACD,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,QAAQ,UAAQ,UAGlE;AAyID,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI;IAC1B,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;IACf,YAAY,EAAE,CAAC,GAAG,IAAI,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,CAAC,WAAW,EAAC,CAAC,EAAE,QAAQ,CAAC,EAAC,MAAM,KAAK,IAAI,CAAC;IACxD,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,OAAO,EAAE,MAAM,IAAI,CAAA;CACtB,CAAA;AAED,wBAAgB,UAAU,CAAC,CAAC,GAAG,OAAO,EAAE,gCAAgC,GAAE,CAAC,CAAC,EAAC,OAAO,KAAK,IAAsB,GAAG,YAAY,CAAC,CAAC,CAAC,CAsFhI;AAED,wBAAgB,OAAO,CAAC,EACpB,OAAO,EACP,CAAC,EACD,CAAC,EACD,MAAM,EACN,KAAK,EACL,SAAS,EACT,aAAa,EACb,OAAyB,EACzB,MAAwB,EACxB,UAAiB,GACpB,EAAE;IACC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;IACf,aAAa,EAAE,aAAa,CAAC;IAC7B,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;CAC9B,kDAoHA"}
@@ -1,15 +1,15 @@
1
1
  import { j as a } from "../node_modules/react/jsx-runtime.js";
2
- import { BLACK as N } from "../constants.js";
3
- import { exhaustive as z } from "../utils/index.js";
4
- import { TextMeasurer as A } from "../utils/TextMeasurer.js";
5
2
  import { r as i } from "../_virtual/index.js";
6
- import { r as W } from "../node_modules/react-dom/index.js";
7
- const E = 8, S = 12, F = 20, c = 6, u = 5, Z = 8, j = 16, P = 8, w = j * 2 + P + 16, b = "#CFD1DB", I = "#fff", R = "miplots-tooltip";
3
+ import { r as N } from "../node_modules/react-dom/index.js";
4
+ import { BLACK as z } from "../constants.js";
5
+ import { exhaustive as A } from "../utils/index.js";
6
+ import { TextMeasurer as W } from "../utils/TextMeasurer.js";
7
+ const E = 8, S = 12, F = 20, c = 6, u = 5, Z = 8, j = 16, P = 8, w = j * 2 + P + 16, I = "#CFD1DB", O = "#fff", R = "miplots-tooltip";
8
8
  function B(n) {
9
9
  return n.length * F + 2 * E;
10
10
  }
11
11
  function G(n, o = !1) {
12
- const s = new A("600 14px Arial");
12
+ const s = new W("600 14px Arial");
13
13
  return Math.max(...n.map((t, e) => s.getTextWidth(t) + (e === 0 && o ? w : 0))) + 2 * S;
14
14
  }
15
15
  function q(n, o, s) {
@@ -83,7 +83,7 @@ function J(n, o, s, t, e) {
83
83
  case "bottom":
84
84
  return U(n, o, t);
85
85
  default:
86
- z(s, "Unknown tooltip direction");
86
+ A(s, "Unknown tooltip direction");
87
87
  }
88
88
  }
89
89
  function Y(n, o, s, t, e, r, l) {
@@ -138,7 +138,7 @@ function at(n = () => {
138
138
  currentFacet: h.current,
139
139
  fixed: t,
140
140
  selectedData: o,
141
- onMouseOver: L,
141
+ onMouseEnter: L,
142
142
  onMouseLeave: p,
143
143
  onClose: g
144
144
  };
@@ -156,14 +156,14 @@ function $t({
156
156
  offset: $ = Z,
157
157
  horizontal: T = !0
158
158
  }) {
159
- if (!t || !r && r !== null)
160
- return null;
161
159
  const f = G(n, e), L = B(n), p = Y(f, L, o, s, $, l, T), g = et(p, l, o, f), m = nt(p, l, s, L), d = `translate(${f - j - S},${E})`, x = `translate(${f - j * 2 - P - S},${E})`, [v, C] = i.useState(!1), [_, M] = i.useState(!1), [k, V] = i.useState(!1);
162
160
  function y() {
163
161
  var H;
164
162
  (H = window == null ? void 0 : window.navigator) == null || H.clipboard.writeText(n.join(`
165
163
  `)), C(!0);
166
164
  }
165
+ if (!t || !r && r !== null)
166
+ return null;
167
167
  const Q = /* @__PURE__ */ a.jsxs(
168
168
  "g",
169
169
  {
@@ -179,7 +179,7 @@ function $t({
179
179
  {
180
180
  transform: tt(p, $),
181
181
  d: J(f, L, p, g, m),
182
- fill: N
182
+ fill: z
183
183
  }
184
184
  ),
185
185
  /* @__PURE__ */ a.jsxs(
@@ -190,15 +190,15 @@ function $t({
190
190
  fill: "white",
191
191
  transform: X(p, f, L, $, g, m),
192
192
  children: [
193
- n.map((H, O) => /* @__PURE__ */ a.jsx(
193
+ n.map((H, b) => /* @__PURE__ */ a.jsx(
194
194
  "text",
195
195
  {
196
196
  x: S,
197
- y: E + F * O + F / 2,
197
+ y: E + F * b + F / 2,
198
198
  dominantBaseline: "central",
199
199
  children: H
200
200
  },
201
- O
201
+ b
202
202
  )),
203
203
  e && /* @__PURE__ */ a.jsxs("g", { transform: d, children: [
204
204
  /* @__PURE__ */ a.jsx(
@@ -207,7 +207,7 @@ function $t({
207
207
  fillRule: "evenodd",
208
208
  clipRule: "evenodd",
209
209
  d: "M4.0006 2.93945L8.0006 6.93945L12.0006 2.93945L13.0613 4.00011L9.06126 8.00011L13.0613 12.0001L12.0006 13.0608L8.0006 9.06077L4.0006 13.0608L2.93994 12.0001L6.93994 8.00011L2.93994 4.00011L4.0006 2.93945Z",
210
- fill: _ ? b : I
210
+ fill: _ ? I : O
211
211
  }
212
212
  ),
213
213
  /* @__PURE__ */ a.jsx(
@@ -231,7 +231,7 @@ function $t({
231
231
  "path",
232
232
  {
233
233
  d: "M16.0005 13H14.5005V1.5H3.00049V0H14.5005C15.3289 2.86102e-06 16.0005 0.671575 16.0005 1.5V13ZM1.34717 15.9922C0.641178 15.9205 0.0799799 15.3593 0.00830078 14.6533L0.000488281 14.5V4.5C0.000488281 3.72334 0.590765 3.08461 1.34717 3.00781L1.50049 3H11.5005L11.6538 3.00781C12.4102 3.08461 13.0005 3.72334 13.0005 4.5V14.5L12.9927 14.6533C12.921 15.3593 12.3598 15.9205 11.6538 15.9922L11.5005 16H1.50049L1.34717 15.9922ZM11.5005 4.5H1.50049V14.5H11.5005V4.5Z",
234
- fill: k ? b : I
234
+ fill: k ? I : O
235
235
  }
236
236
  ) }),
237
237
  /* @__PURE__ */ a.jsx("defs", { children: /* @__PURE__ */ a.jsx("clipPath", { id: "clip0_16418_6183", children: /* @__PURE__ */ a.jsx("rect", { width: "16", height: "16", transform: "translate(0.000488281)", fill: "white" }) }) })
@@ -257,7 +257,7 @@ function $t({
257
257
  ]
258
258
  }
259
259
  );
260
- return r === null ? Q : W.createPortal(
260
+ return r === null ? Q : N.createPortal(
261
261
  Q,
262
262
  r
263
263
  );