@milaboratories/miplots4 1.0.124 → 1.0.125

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 (60) hide show
  1. package/dist/index.d.ts +3 -1
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +4 -2
  4. package/dist/index.js.map +1 -1
  5. package/dist/node_modules/d3-drag/src/constant.js +5 -0
  6. package/dist/node_modules/d3-drag/src/constant.js.map +1 -0
  7. package/dist/node_modules/d3-drag/src/drag.js +122 -0
  8. package/dist/node_modules/d3-drag/src/drag.js.map +1 -0
  9. package/dist/node_modules/d3-drag/src/event.js +34 -0
  10. package/dist/node_modules/d3-drag/src/event.js.map +1 -0
  11. package/dist/node_modules/d3-drag/src/noevent.js +10 -5
  12. package/dist/node_modules/d3-drag/src/noevent.js.map +1 -1
  13. package/dist/node_modules/react/index.js +1 -1
  14. package/dist/node_modules/react-dom/index.js +1 -1
  15. package/dist/scatterplot/index.js +27 -27
  16. package/dist/scatterplot/index.js.map +1 -1
  17. package/dist/scatterplot-umap/ChartRenderer.d.ts +8 -8
  18. package/dist/scatterplot-umap/ChartRenderer.d.ts.map +1 -1
  19. package/dist/scatterplot-umap/ChartRenderer.js +160 -151
  20. package/dist/scatterplot-umap/ChartRenderer.js.map +1 -1
  21. package/dist/scatterplot-umap/SettingsImpl.d.ts +0 -1
  22. package/dist/scatterplot-umap/SettingsImpl.d.ts.map +1 -1
  23. package/dist/scatterplot-umap/SettingsImpl.js +12 -13
  24. package/dist/scatterplot-umap/SettingsImpl.js.map +1 -1
  25. package/dist/scatterplot-umap/components/Lasso.d.ts +6 -4
  26. package/dist/scatterplot-umap/components/Lasso.d.ts.map +1 -1
  27. package/dist/scatterplot-umap/components/Lasso.js +212 -57
  28. package/dist/scatterplot-umap/components/Lasso.js.map +1 -1
  29. package/dist/scatterplot-umap/components/SVGLayer.d.ts +1 -1
  30. package/dist/scatterplot-umap/components/SVGLayer.d.ts.map +1 -1
  31. package/dist/scatterplot-umap/components/SVGLayer.js +49 -46
  32. package/dist/scatterplot-umap/components/SVGLayer.js.map +1 -1
  33. package/dist/scatterplot-umap/components/UpperSVG.d.ts +6 -4
  34. package/dist/scatterplot-umap/components/UpperSVG.d.ts.map +1 -1
  35. package/dist/scatterplot-umap/components/UpperSVG.js +35 -30
  36. package/dist/scatterplot-umap/components/UpperSVG.js.map +1 -1
  37. package/dist/scatterplot-umap/constants.d.ts +6 -0
  38. package/dist/scatterplot-umap/constants.d.ts.map +1 -1
  39. package/dist/scatterplot-umap/constants.js +12 -6
  40. package/dist/scatterplot-umap/constants.js.map +1 -1
  41. package/dist/scatterplot-umap/index.d.ts +3 -2
  42. package/dist/scatterplot-umap/index.d.ts.map +1 -1
  43. package/dist/scatterplot-umap/index.js +90 -72
  44. package/dist/scatterplot-umap/index.js.map +1 -1
  45. package/dist/scatterplot-umap/types.d.ts +14 -2
  46. package/dist/scatterplot-umap/types.d.ts.map +1 -1
  47. package/dist/types/bubble.d.ts +10 -10
  48. package/dist/types/common.d.ts +7 -4
  49. package/dist/types/common.d.ts.map +1 -1
  50. package/dist/types/common.js.map +1 -1
  51. package/dist/types/dendro.d.ts +22 -22
  52. package/dist/types/discrete.d.ts +14 -14
  53. package/dist/types/heatmap.d.ts +50 -50
  54. package/dist/types/histogram.d.ts +12 -12
  55. package/dist/types/scatterplot-umap.d.ts +8 -11
  56. package/dist/types/scatterplot-umap.d.ts.map +1 -1
  57. package/dist/types/scatterplot-umap.js +2 -3
  58. package/dist/types/scatterplot-umap.js.map +1 -1
  59. package/dist/types/scatterplot.d.ts +36 -36
  60. package/package.json +3 -1
@@ -1,25 +1,27 @@
1
1
  import { j as e } from "../../node_modules/react/jsx-runtime.js";
2
- import { Lasso as f } from "./Lasso.js";
3
- function p({
4
- scales: r,
5
- container: a,
6
- labels: l,
2
+ import { Lasso as p } from "./Lasso.js";
3
+ function u({
4
+ scales: n,
5
+ container: l,
6
+ labels: o,
7
7
  aesGetters: i,
8
- chartSizes: n,
9
- onPolygonUpdate: c,
10
- lassoMode: h,
8
+ chartSizes: r,
9
+ zoomStateKey: a,
10
+ defaultPolygons: c,
11
+ onPolygonUpdate: h,
12
+ onLassoControlsStateUpdate: m,
11
13
  tooltipData: t
12
14
  }) {
13
- return a ? /* @__PURE__ */ e.jsxs("g", { children: [
14
- l.map((d) => {
15
- const { name: o, height: s, bbox: x, width: m } = d;
15
+ return l ? /* @__PURE__ */ e.jsxs("g", { children: [
16
+ o.map((s) => {
17
+ const { name: f, height: d, bbox: x, width: j } = s;
16
18
  return /* @__PURE__ */ e.jsx("g", { children: /* @__PURE__ */ e.jsxs("g", { transform: `translate(${x.minX},${x.minY})`, children: [
17
- /* @__PURE__ */ e.jsx("rect", { x: "0", y: "0", width: m, height: s, fill: "transparent", stroke: "none" }),
19
+ /* @__PURE__ */ e.jsx("rect", { x: "0", y: "0", width: j, height: d, fill: "transparent", stroke: "none" }),
18
20
  /* @__PURE__ */ e.jsx(
19
21
  "text",
20
22
  {
21
23
  x: 0,
22
- y: s / 2,
24
+ y: d / 2,
23
25
  stroke: "white",
24
26
  strokeWidth: 2,
25
27
  paintOrder: "stroke",
@@ -27,33 +29,36 @@ function p({
27
29
  fontFamily: "Manrope",
28
30
  fontSize: "16px",
29
31
  dominantBaseline: "middle",
30
- children: o
32
+ children: f
31
33
  }
32
34
  )
33
- ] }) }, d.dot.id);
35
+ ] }) }, s.dot.id);
34
36
  }),
35
- /* @__PURE__ */ e.jsx(
36
- f,
37
- {
38
- scales: r,
39
- chartSizes: n,
40
- disabled: !h,
41
- onPolygonUpdate: c
42
- }
43
- ),
44
- t.fixed && /* @__PURE__ */ e.jsx("rect", { width: n.chartWidth, height: n.chartHeight, fill: "rgba(255,255,255,0.8)" }),
45
37
  t.selectedData && /* @__PURE__ */ e.jsx(
46
38
  "circle",
47
39
  {
48
- cx: r.x(t.selectedData.x),
49
- cy: r.y(t.selectedData.y),
40
+ cx: n.x(t.selectedData.x),
41
+ cy: n.y(t.selectedData.y),
50
42
  r: Math.max(i.dotSize(t.selectedData.data) * 1.2, 5),
51
- fill: i.dotFill(t.selectedData.data)
43
+ fill: i.dotFill(t.selectedData.data),
44
+ style: { pointerEvents: "none" }
52
45
  }
53
- )
46
+ ),
47
+ /* @__PURE__ */ e.jsx(
48
+ p,
49
+ {
50
+ scales: n,
51
+ chartSizes: r,
52
+ zoomStateKey: a,
53
+ defaultPolygons: c,
54
+ onPolygonsApply: h,
55
+ onLassoControlsStateUpdate: m
56
+ }
57
+ ),
58
+ t.fixed && /* @__PURE__ */ e.jsx("rect", { width: r.chartWidth, height: r.chartHeight, fill: "rgba(255,255,255,0.8)" })
54
59
  ] }) : null;
55
60
  }
56
61
  export {
57
- p as default
62
+ u as default
58
63
  };
59
64
  //# sourceMappingURL=UpperSVG.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"UpperSVG.js","sources":["../../../src/scatterplot-umap/components/UpperSVG.tsx"],"sourcesContent":["import type {TooltipsData} from '../../common/Tooltip';\nimport {Lasso} from './Lasso';\nimport type {AesGetters} from '../types';\nimport type {ChartScales, ChartSizes, DotInfo, Point} from '../types';\nimport type {Label} from '../../scatterplot/utils/getVisibleLabels';\nimport React from 'react';\n\nfunction UpperSVG({\n scales,\n container,\n labels,\n aesGetters,\n chartSizes,\n onPolygonUpdate,\n lassoMode,\n tooltipData\n}: {\n scales: ChartScales;\n container: SVGElement | null;\n aesGetters: AesGetters;\n labels: Label[];\n chartSizes: ChartSizes;\n onPolygonUpdate: (data:Point[]) => void;\n lassoMode: boolean;\n tooltipData: TooltipsData<DotInfo>;\n selectedDot?: DotInfo | null;\n}) {\n if (!container) {\n return null;\n }\n\n return (\n <g>\n {labels.map(label => {\n const {name, height, bbox, width} = label;\n return (\n <g key={label.dot.id}>\n <g transform={`translate(${bbox.minX},${bbox.minY})`}>\n <rect x=\"0\" y=\"0\" width={width} height={height} fill=\"transparent\" stroke=\"none\" />\n <text\n x={0}\n y={height / 2}\n stroke=\"white\"\n strokeWidth={2}\n paintOrder=\"stroke\"\n style={{pointerEvents: 'none'}}\n fontFamily=\"Manrope\"\n fontSize=\"16px\"\n dominantBaseline=\"middle\"\n >\n {name}\n </text>\n </g>\n </g>\n );\n })}\n <Lasso\n scales={scales}\n chartSizes={chartSizes}\n disabled={!lassoMode}\n onPolygonUpdate={onPolygonUpdate}\n />\n {tooltipData.fixed && <rect width={chartSizes.chartWidth} height={chartSizes.chartHeight} fill=\"rgba(255,255,255,0.8)\"/>}\n {tooltipData.selectedData && (\n <circle\n cx={scales.x(tooltipData.selectedData.x)}\n cy={scales.y(tooltipData.selectedData.y)}\n r={Math.max(aesGetters.dotSize(tooltipData.selectedData.data) * 1.2, 5)}\n fill={aesGetters.dotFill(tooltipData.selectedData.data)}\n />\n )}\n </g>\n );\n}\n\nexport default UpperSVG;\n"],"names":["UpperSVG","scales","container","labels","aesGetters","chartSizes","onPolygonUpdate","lassoMode","tooltipData","label","name","height","bbox","width","jsx","jsxs","Lasso"],"mappings":";;AAOA,SAASA,EAAS;AAAA,EACd,QAAAC;AAAA,EACA,WAAAC;AAAA,EACA,QAAAC;AAAA,EACA,YAAAC;AAAA,EACA,YAAAC;AAAA,EACA,iBAAAC;AAAA,EACA,WAAAC;AAAA,EACA,aAAAC;AACJ,GAUG;AACC,SAAKN,2BAKA,KAAA,EACI,UAAA;AAAA,IAAAC,EAAO,IAAI,CAAAM,MAAS;AACjB,YAAM,EAAC,MAAAC,GAAM,QAAAC,GAAQ,MAAAC,GAAM,OAAAC,MAASJ;AACpC,aACIK,gBAAAA,EAAAA,IAAC,KAAA,EACG,UAAAC,gBAAAA,EAAAA,KAAC,KAAA,EAAE,WAAW,aAAaH,EAAK,IAAI,IAAIA,EAAK,IAAI,KAC7C,UAAA;AAAA,QAAAE,gBAAAA,EAAAA,IAAC,QAAA,EAAK,GAAE,KAAI,GAAE,KAAI,OAAAD,GAAc,QAAAF,GAAgB,MAAK,eAAc,QAAO,OAAA,CAAO;AAAA,QACjFG,gBAAAA,EAAAA;AAAAA,UAAC;AAAA,UAAA;AAAA,YACG,GAAG;AAAA,YACH,GAAGH,IAAS;AAAA,YACZ,QAAO;AAAA,YACP,aAAa;AAAA,YACb,YAAW;AAAA,YACX,OAAO,EAAC,eAAe,OAAA;AAAA,YACvB,YAAW;AAAA,YACX,UAAS;AAAA,YACT,kBAAiB;AAAA,YAEhB,UAAAD;AAAA,UAAA;AAAA,QAAA;AAAA,MACL,EAAA,CACJ,EAAA,GAhBID,EAAM,IAAI,EAiBlB;AAAA,IAER,CAAC;AAAA,IACDK,gBAAAA,EAAAA;AAAAA,MAACE;AAAA,MAAA;AAAA,QACG,QAAAf;AAAA,QACA,YAAAI;AAAA,QACA,UAAU,CAACE;AAAA,QACX,iBAAAD;AAAA,MAAA;AAAA,IAAA;AAAA,IAEHE,EAAY,SAASM,gBAAAA,EAAAA,IAAC,QAAA,EAAK,OAAOT,EAAW,YAAY,QAAQA,EAAW,aAAa,MAAK,wBAAA,CAAuB;AAAA,IACrHG,EAAY,gBACTM,gBAAAA,EAAAA;AAAAA,MAAC;AAAA,MAAA;AAAA,QACG,IAAIb,EAAO,EAAEO,EAAY,aAAa,CAAC;AAAA,QACvC,IAAIP,EAAO,EAAEO,EAAY,aAAa,CAAC;AAAA,QACvC,GAAG,KAAK,IAAIJ,EAAW,QAAQI,EAAY,aAAa,IAAI,IAAI,KAAK,CAAC;AAAA,QACtE,MAAMJ,EAAW,QAAQI,EAAY,aAAa,IAAI;AAAA,MAAA;AAAA,IAAA;AAAA,EAC1D,GAER,IA3CO;AA6Cf;"}
1
+ {"version":3,"file":"UpperSVG.js","sources":["../../../src/scatterplot-umap/components/UpperSVG.tsx"],"sourcesContent":["import type {TooltipsData} from '../../common/Tooltip';\nimport {Lasso} from './Lasso';\nimport type {AesGetters, LassoControlsState, Polygon} from '../types';\nimport type {ChartScales, ChartSizes, DotInfo} from '../types';\nimport type {Label} from '../../scatterplot/utils/getVisibleLabels';\nimport React from 'react';\n\nfunction UpperSVG({\n scales,\n container,\n labels,\n aesGetters,\n chartSizes,\n zoomStateKey,\n defaultPolygons,\n onPolygonUpdate,\n onLassoControlsStateUpdate,\n tooltipData\n}: {\n scales: ChartScales;\n container: SVGElement | null;\n aesGetters: AesGetters;\n labels: Label[];\n chartSizes: ChartSizes;\n zoomStateKey: string;\n defaultPolygons: Polygon[];\n onLassoControlsStateUpdate: (v:LassoControlsState) => void;\n onPolygonUpdate: (data:Polygon[]) => void;\n tooltipData: TooltipsData<DotInfo>;\n selectedDot?: DotInfo | null;\n}) {\n if (!container) {\n return null;\n }\n\n return (\n <g>\n {labels.map(label => {\n const {name, height, bbox, width} = label;\n return (\n <g key={label.dot.id}>\n <g transform={`translate(${bbox.minX},${bbox.minY})`}>\n <rect x=\"0\" y=\"0\" width={width} height={height} fill=\"transparent\" stroke=\"none\" />\n <text\n x={0}\n y={height / 2}\n stroke=\"white\"\n strokeWidth={2}\n paintOrder=\"stroke\"\n style={{pointerEvents: 'none'}}\n fontFamily=\"Manrope\"\n fontSize=\"16px\"\n dominantBaseline=\"middle\"\n >\n {name}\n </text>\n </g>\n </g>\n );\n })}\n {tooltipData.selectedData && (\n <circle\n cx={scales.x(tooltipData.selectedData.x)}\n cy={scales.y(tooltipData.selectedData.y)}\n r={Math.max(aesGetters.dotSize(tooltipData.selectedData.data) * 1.2, 5)}\n fill={aesGetters.dotFill(tooltipData.selectedData.data)}\n style={{pointerEvents: 'none'}}\n />\n )}\n <Lasso\n scales={scales}\n chartSizes={chartSizes}\n zoomStateKey={zoomStateKey}\n defaultPolygons={defaultPolygons}\n onPolygonsApply={onPolygonUpdate}\n onLassoControlsStateUpdate={onLassoControlsStateUpdate}\n />\n {tooltipData.fixed && <rect width={chartSizes.chartWidth} height={chartSizes.chartHeight} fill=\"rgba(255,255,255,0.8)\"/>}\n </g>\n );\n}\n\nexport default UpperSVG;\n"],"names":["UpperSVG","scales","container","labels","aesGetters","chartSizes","zoomStateKey","defaultPolygons","onPolygonUpdate","onLassoControlsStateUpdate","tooltipData","label","name","height","bbox","width","jsx","jsxs","Lasso"],"mappings":";;AAOA,SAASA,EAAS;AAAA,EACd,QAAAC;AAAA,EACA,WAAAC;AAAA,EACA,QAAAC;AAAA,EACA,YAAAC;AAAA,EACA,YAAAC;AAAA,EACA,cAAAC;AAAA,EACA,iBAAAC;AAAA,EACA,iBAAAC;AAAA,EACA,4BAAAC;AAAA,EACA,aAAAC;AACJ,GAYG;AACC,SAAKR,2BAKA,KAAA,EACI,UAAA;AAAA,IAAAC,EAAO,IAAI,CAAAQ,MAAS;AACjB,YAAM,EAAC,MAAAC,GAAM,QAAAC,GAAQ,MAAAC,GAAM,OAAAC,MAASJ;AACpC,aACIK,gBAAAA,EAAAA,IAAC,KAAA,EACG,UAAAC,gBAAAA,EAAAA,KAAC,KAAA,EAAE,WAAW,aAAaH,EAAK,IAAI,IAAIA,EAAK,IAAI,KAC7C,UAAA;AAAA,QAAAE,gBAAAA,EAAAA,IAAC,QAAA,EAAK,GAAE,KAAI,GAAE,KAAI,OAAAD,GAAc,QAAAF,GAAgB,MAAK,eAAc,QAAO,OAAA,CAAO;AAAA,QACjFG,gBAAAA,EAAAA;AAAAA,UAAC;AAAA,UAAA;AAAA,YACG,GAAG;AAAA,YACH,GAAGH,IAAS;AAAA,YACZ,QAAO;AAAA,YACP,aAAa;AAAA,YACb,YAAW;AAAA,YACX,OAAO,EAAC,eAAe,OAAA;AAAA,YACvB,YAAW;AAAA,YACX,UAAS;AAAA,YACT,kBAAiB;AAAA,YAEhB,UAAAD;AAAA,UAAA;AAAA,QAAA;AAAA,MACL,EAAA,CACJ,EAAA,GAhBID,EAAM,IAAI,EAiBlB;AAAA,IAER,CAAC;AAAA,IACAD,EAAY,gBACTM,gBAAAA,EAAAA;AAAAA,MAAC;AAAA,MAAA;AAAA,QACG,IAAIf,EAAO,EAAES,EAAY,aAAa,CAAC;AAAA,QACvC,IAAIT,EAAO,EAAES,EAAY,aAAa,CAAC;AAAA,QACvC,GAAG,KAAK,IAAIN,EAAW,QAAQM,EAAY,aAAa,IAAI,IAAI,KAAK,CAAC;AAAA,QACtE,MAAMN,EAAW,QAAQM,EAAY,aAAa,IAAI;AAAA,QACtD,OAAO,EAAC,eAAe,OAAA;AAAA,MAAM;AAAA,IAAA;AAAA,IAGrCM,gBAAAA,EAAAA;AAAAA,MAACE;AAAA,MAAA;AAAA,QACG,QAAAjB;AAAA,QACA,YAAAI;AAAA,QACA,cAAAC;AAAA,QACA,iBAAAC;AAAA,QACA,iBAAiBC;AAAA,QACjB,4BAAAC;AAAA,MAAA;AAAA,IAAA;AAAA,IAEHC,EAAY,SAASM,gBAAAA,EAAAA,IAAC,QAAA,EAAK,OAAOX,EAAW,YAAY,QAAQA,EAAW,aAAa,MAAK,wBAAA,CAAuB;AAAA,EAAA,GAC1H,IA9CO;AAgDf;"}
@@ -9,4 +9,10 @@ export declare const DEFAULT_TICKS_SIZE = 4;
9
9
  export declare const TICK_OFFSET = 6;
10
10
  export declare const MIN_PADDING = 12;
11
11
  export declare const LEGEND_OFFSET = 24;
12
+ export declare const SCATTERPLOT_LASSO_EVENTS: {
13
+ delete: string;
14
+ selectMode: string;
15
+ back: string;
16
+ forward: string;
17
+ };
12
18
  //# sourceMappingURL=constants.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/scatterplot-umap/constants.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,QAAQ;;;;;CAKpB,CAAC;AAEF,eAAO,MAAM,UAAU,KAAK,CAAC;AAC7B,eAAO,MAAM,kBAAkB,IAAI,CAAC;AACpC,eAAO,MAAM,WAAW,IAAI,CAAC;AAC7B,eAAO,MAAM,WAAW,KAAK,CAAC;AAE9B,eAAO,MAAM,aAAa,KAAK,CAAC"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/scatterplot-umap/constants.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,QAAQ;;;;;CAKpB,CAAC;AAEF,eAAO,MAAM,UAAU,KAAK,CAAC;AAC7B,eAAO,MAAM,kBAAkB,IAAI,CAAC;AACpC,eAAO,MAAM,WAAW,IAAI,CAAC;AAC7B,eAAO,MAAM,WAAW,KAAK,CAAC;AAE9B,eAAO,MAAM,aAAa,KAAK,CAAC;AAEhC,eAAO,MAAM,wBAAwB;;;;;CAKpC,CAAC"}
@@ -1,13 +1,19 @@
1
- const T = {
1
+ const E = {
2
2
  TOP: 30,
3
3
  BOTTOM: 30,
4
4
  LEFT: 30,
5
5
  RIGHT: 30
6
- }, E = 20, I = 4, o = 24;
6
+ }, S = 20, T = 4, L = 24, O = {
7
+ delete: "LASSO_DELETE",
8
+ selectMode: "LASSO_SELECT_MODE",
9
+ back: "LASSO_BACK",
10
+ forward: "LASSO_FORWARD"
11
+ };
7
12
  export {
8
- I as DEFAULT_TICKS_SIZE,
9
- o as LEGEND_OFFSET,
10
- T as PADDINGS,
11
- E as TITLE_LINE
13
+ T as DEFAULT_TICKS_SIZE,
14
+ L as LEGEND_OFFSET,
15
+ E as PADDINGS,
16
+ O as SCATTERPLOT_LASSO_EVENTS,
17
+ S as TITLE_LINE
12
18
  };
13
19
  //# sourceMappingURL=constants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sources":["../../src/scatterplot-umap/constants.ts"],"sourcesContent":["// inner paddings in chart area\nexport const PADDINGS = {\n TOP: 30,\n BOTTOM: 30,\n LEFT: 30,\n RIGHT: 30\n};\n\nexport const TITLE_LINE = 20;\nexport const DEFAULT_TICKS_SIZE = 4;\nexport const TICK_OFFSET = 6;\nexport const MIN_PADDING = 12;\n\nexport const LEGEND_OFFSET = 24;\n\n"],"names":["PADDINGS","TITLE_LINE","DEFAULT_TICKS_SIZE","LEGEND_OFFSET"],"mappings":"AACO,MAAMA,IAAW;AAAA,EACpB,KAAK;AAAA,EACL,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,OAAO;AACX,GAEaC,IAAa,IACbC,IAAqB,GAIrBC,IAAgB;"}
1
+ {"version":3,"file":"constants.js","sources":["../../src/scatterplot-umap/constants.ts"],"sourcesContent":["// inner paddings in chart area\nexport const PADDINGS = {\n TOP: 30,\n BOTTOM: 30,\n LEFT: 30,\n RIGHT: 30\n};\n\nexport const TITLE_LINE = 20;\nexport const DEFAULT_TICKS_SIZE = 4;\nexport const TICK_OFFSET = 6;\nexport const MIN_PADDING = 12;\n\nexport const LEGEND_OFFSET = 24;\n\nexport const SCATTERPLOT_LASSO_EVENTS = {\n delete: 'LASSO_DELETE',\n selectMode: 'LASSO_SELECT_MODE',\n back: 'LASSO_BACK',\n forward: 'LASSO_FORWARD'\n};\n"],"names":["PADDINGS","TITLE_LINE","DEFAULT_TICKS_SIZE","LEGEND_OFFSET","SCATTERPLOT_LASSO_EVENTS"],"mappings":"AACO,MAAMA,IAAW;AAAA,EACpB,KAAK;AAAA,EACL,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,OAAO;AACX,GAEaC,IAAa,IACbC,IAAqB,GAIrBC,IAAgB,IAEhBC,IAA2B;AAAA,EACpC,QAAQ;AAAA,EACR,YAAY;AAAA,EACZ,MAAM;AAAA,EACN,SAAS;AACb;"}
@@ -1,5 +1,5 @@
1
1
  import { AbstractChart } from '../AbstractChart';
2
- import { Dot, DotsExtents } from './types';
2
+ import { LassoControlsState, Polygon, Dot, DotsExtents } from './types';
3
3
  import { Label } from '../scatterplot/utils/getVisibleLabels';
4
4
  import { ScatterplotEventHandlers } from '../types';
5
5
  import { ScatterplotUmapLegendInfo, ScatterplotUmapSettings } from '../types/scatterplot-umap';
@@ -9,8 +9,9 @@ import { DataFrame } from '../DataFrame';
9
9
  export declare class ChartScatterplotUmap extends AbstractChart {
10
10
  settings: ScatterplotUmapSettingsImpl;
11
11
  chartRenderer: ChartRenderer;
12
- onPolygonUpdate: (data: number[]) => void;
12
+ onPolygonUpdate: (data: number[], polygons: Polygon[]) => void;
13
13
  onTooltipHintSwitch: (v: boolean) => void;
14
+ onLassoControlsStateUpdate: (v: LassoControlsState) => void;
14
15
  calculatedData: {
15
16
  onlyPositive: {
16
17
  x: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/scatterplot-umap/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAC,MAAM,kBAAkB,CAAC;AAG/C,OAAO,KAAK,EAAC,GAAG,EAAE,WAAW,EAAC,MAAM,SAAS,CAAC;AAC9C,OAAO,KAAK,EAAC,KAAK,EAAC,MAAM,uCAAuC,CAAC;AAEjE,OAAO,KAAK,EAAC,wBAAwB,EAAC,MAAM,UAAU,CAAC;AAEvD,OAAO,KAAK,EAAC,yBAAyB,EAAE,uBAAuB,EAAC,MAAM,2BAA2B,CAAC;AAElG,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAE5C,OAAO,EAAC,2BAA2B,EAAC,MAAM,gBAAgB,CAAC;AAC3D,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAgC5C,qBAAa,oBAAqB,SAAQ,aAAa;IACnD,QAAQ,EAAE,2BAA2B,CAAC;IACtC,aAAa,gBAAuB;IAEpC,eAAe,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,IAAI,CAAmB;IAC5D,mBAAmB,EAAE,CAAC,CAAC,EAAC,OAAO,KAAK,IAAI,CAAmB;IAE3D,cAAc,EAAE;QACZ,YAAY,EAAE;YAAC,CAAC,EAAE,OAAO,CAAC;YAAC,CAAC,EAAE,OAAO,CAAA;SAAC,CAAC;QACvC,IAAI,EAAE,GAAG,EAAE,CAAC;QACZ,YAAY,EAAE,MAAM,EAAE,CAAC;QACvB,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QACtC,iBAAiB,EAAE,KAAK,EAAE,CAAC;QAC3B,WAAW,EAAE,WAAW,CAAC;QACzB,YAAY,EAAE,yBAAyB,CAAA;KAC1C,GAAG,IAAI,CAAQ;gBAEJ,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,uBAAuB,EAAE,aAAa,CAAC,EAAE,wBAAwB;IAUxG,KAAK,CAAC,IAAI,EAAE,WAAW;IAYvB,OAAO;IAIP,qBAAqB,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,uBAAuB;IA8BxE,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO;IAO9C,MAAM,IAAI,MAAM;IAOhB,mCAAmC,CAAC,YAAY,EAAE,2BAA2B,EAAE,QAAQ,EAAE,2BAA2B;IAQpH,+BAA+B,CAAC,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS;IAUpE,WAAW;IA8FX,gBAAgB;IA0BhB,YAAY;CAsBf"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/scatterplot-umap/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAC,MAAM,kBAAkB,CAAC;AAG/C,OAAO,KAAK,EAAC,kBAAkB,EAAa,OAAO,EAAC,MAAM,SAAS,CAAC;AACpE,OAAO,KAAK,EAAC,GAAG,EAAE,WAAW,EAAC,MAAM,SAAS,CAAC;AAC9C,OAAO,KAAK,EAAC,KAAK,EAAC,MAAM,uCAAuC,CAAC;AAEjE,OAAO,KAAK,EAAC,wBAAwB,EAAC,MAAM,UAAU,CAAC;AAEvD,OAAO,KAAK,EAAC,yBAAyB,EAAE,uBAAuB,EAAC,MAAM,2BAA2B,CAAC;AAElG,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAE5C,OAAO,EAAC,2BAA2B,EAAC,MAAM,gBAAgB,CAAC;AAC3D,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAgC5C,qBAAa,oBAAqB,SAAQ,aAAa;IACnD,QAAQ,EAAE,2BAA2B,CAAC;IACtC,aAAa,gBAAuB;IAEpC,eAAe,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,IAAI,CAAmB;IACjF,mBAAmB,EAAE,CAAC,CAAC,EAAC,OAAO,KAAK,IAAI,CAAmB;IAC3D,0BAA0B,EAAE,CAAC,CAAC,EAAE,kBAAkB,KAAK,IAAI,CAAmB;IAE9E,cAAc,EAAE;QACZ,YAAY,EAAE;YAAC,CAAC,EAAE,OAAO,CAAC;YAAC,CAAC,EAAE,OAAO,CAAA;SAAC,CAAC;QACvC,IAAI,EAAE,GAAG,EAAE,CAAC;QACZ,YAAY,EAAE,MAAM,EAAE,CAAC;QACvB,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QACtC,iBAAiB,EAAE,KAAK,EAAE,CAAC;QAC3B,WAAW,EAAE,WAAW,CAAC;QACzB,YAAY,EAAE,yBAAyB,CAAA;KAC1C,GAAG,IAAI,CAAQ;gBAEJ,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,uBAAuB,EAAE,aAAa,CAAC,EAAE,wBAAwB;IAWxG,KAAK,CAAC,IAAI,EAAE,WAAW;IAYvB,OAAO;IAIP,qBAAqB,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,uBAAuB;IA8BxE,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO;IA8B9C,MAAM,IAAI,MAAM;IAOhB,mCAAmC,CAAC,YAAY,EAAE,2BAA2B,EAAE,QAAQ,EAAE,2BAA2B;IAQpH,+BAA+B,CAAC,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS;IAUpE,WAAW;IA8FX,gBAAgB;IA0BhB,YAAY;CAsBf"}
@@ -1,24 +1,25 @@
1
- var E = Object.defineProperty;
2
- var B = (l, d, t) => d in l ? E(l, d, { enumerable: !0, configurable: !0, writable: !0, value: t }) : l[d] = t;
3
- var y = (l, d, t) => B(l, typeof d != "symbol" ? d + "" : d, t);
4
- import { AbstractChart as R } from "../AbstractChart.js";
5
- import { createLegendInfo as I, addPalettesToAesMapping as U } from "../scatterplot/utils/createLegendInfo.js";
6
- import { TextMeasurer as M } from "../utils/TextMeasurer.js";
7
- import X from "./ChartRenderer.js";
8
- import { ScatterplotUmapSettingsImpl as L } from "./SettingsImpl.js";
9
- function Y(l) {
1
+ var U = Object.defineProperty;
2
+ var w = (l, d, e) => d in l ? U(l, d, { enumerable: !0, configurable: !0, writable: !0, value: e }) : l[d] = e;
3
+ var y = (l, d, e) => w(l, typeof d != "symbol" ? d + "" : d, e);
4
+ import { AbstractChart as T } from "../AbstractChart.js";
5
+ import { SCATTERPLOT_LASSO_EVENTS as m } from "./constants.js";
6
+ import { createLegendInfo as B, addPalettesToAesMapping as R } from "../scatterplot/utils/createLegendInfo.js";
7
+ import { TextMeasurer as I } from "../utils/TextMeasurer.js";
8
+ import M from "./ChartRenderer.js";
9
+ import { ScatterplotUmapSettingsImpl as _ } from "./SettingsImpl.js";
10
+ function X(l) {
10
11
  return typeof l == "object" && "type" in l && l.type === "grouping";
11
12
  }
12
- const T = 10;
13
- function j(l) {
14
- const d = [], t = new M("16px Manrope");
13
+ const Y = 10;
14
+ function O(l) {
15
+ const d = [], e = new I("16px Manrope");
15
16
  for (const a of l) {
16
- const e = a.label;
17
- if (!e)
17
+ const t = a.label;
18
+ if (!t)
18
19
  continue;
19
- const n = t.getTextMetrics(String(e));
20
+ const n = e.getTextMetrics(String(t));
20
21
  d.push({
21
- name: String(e),
22
+ name: String(t),
22
23
  width: (n == null ? void 0 : n.width) ?? 0,
23
24
  height: ((n == null ? void 0 : n.actualBoundingBoxAscent) ?? 0) + ((n == null ? void 0 : n.actualBoundingBoxDescent) ?? 0),
24
25
  x: 0,
@@ -27,27 +28,29 @@ function j(l) {
27
28
  yPosition: "middle",
28
29
  bbox: { minX: 0, maxX: 0, minY: 0, maxY: 0 },
29
30
  dot: a,
30
- padding: T
31
+ padding: Y
31
32
  });
32
33
  }
33
34
  return d;
34
35
  }
35
- class k extends R {
36
- constructor(t, a, e) {
37
- super(t, a);
36
+ class H extends T {
37
+ constructor(e, a, t) {
38
+ super(e, a);
38
39
  y(this, "settings");
39
- y(this, "chartRenderer", new X());
40
+ y(this, "chartRenderer", new M());
40
41
  y(this, "onPolygonUpdate", () => {
41
42
  });
42
43
  // dots indexes from input data
43
44
  y(this, "onTooltipHintSwitch", () => {
44
45
  });
46
+ y(this, "onLassoControlsStateUpdate", () => {
47
+ });
45
48
  y(this, "calculatedData", null);
46
- this.settings = new L(a), e && (this.onPolygonUpdate = e[0], this.onTooltipHintSwitch = e[1]);
49
+ this.settings = new _(a), t && (this.onPolygonUpdate = t.onPolygonUpdate, this.onTooltipHintSwitch = t.onTooltipHintSwitch, this.onLassoControlsStateUpdate = t.onLassoControlsStateUpdate);
47
50
  }
48
- mount(t) {
51
+ mount(e) {
49
52
  try {
50
- this.chartRenderer.init(t), this._updateData(), this._updateChart();
53
+ this.chartRenderer.init(e), this._updateData(), this._updateChart();
51
54
  } catch (a) {
52
55
  a instanceof Error && this.chartRenderer.renderError(a.message);
53
56
  }
@@ -55,38 +58,53 @@ class k extends R {
55
58
  unmount() {
56
59
  this.chartRenderer.clear();
57
60
  }
58
- updateSettingsAndData(t, a) {
61
+ updateSettingsAndData(e, a) {
59
62
  try {
60
- const e = this.settings, n = this.data;
61
- this.settings = new L(a), this.data = t, this._needUpdateCalculatedDataBySettings(e, this.settings) || this._needUpdateCalculatedDataByData(n, this.data) ? this._updateData() : this._updateAesInData();
62
- const s = e.layers.find((u) => u.type === "dots"), i = this.settings.layers.find((u) => u.type === "dots");
63
+ const t = this.settings, n = this.data;
64
+ this.settings = new _(a), this.data = e, this._needUpdateCalculatedDataBySettings(t, this.settings) || this._needUpdateCalculatedDataByData(n, this.data) ? this._updateData() : this._updateAesInData();
65
+ const s = t.layers.find((u) => u.type === "dots"), i = this.settings.layers.find((u) => u.type === "dots");
63
66
  s && i && s.aes.dotSize !== i.aes.dotSize && typeof s.aes.dotSize == "number" && typeof i.aes.dotSize == "number" && this.chartRenderer.updatePointSize(), this._updateChart();
64
- } catch (e) {
65
- e instanceof Error && this.chartRenderer.renderError(e.message);
67
+ } catch (t) {
68
+ t instanceof Error && this.chartRenderer.renderError(t.message);
66
69
  }
67
70
  }
68
- updateChartState(t, a) {
69
- t === "polygon" && (this.chartRenderer.polygon = a, this._updateChart());
71
+ updateChartState(e, a) {
72
+ if (e === "polygon" && (this.chartRenderer.polygons = a, this._updateChart()), e === m.delete && document) {
73
+ const t = new CustomEvent(m.delete);
74
+ document.dispatchEvent(t);
75
+ }
76
+ if (e === m.selectMode && document) {
77
+ const t = new CustomEvent(m.selectMode, { detail: a });
78
+ document.dispatchEvent(t);
79
+ }
80
+ if (e === m.forward && document) {
81
+ const t = new CustomEvent(m.forward);
82
+ document.dispatchEvent(t);
83
+ }
84
+ if (e === m.back && document) {
85
+ const t = new CustomEvent(m.back);
86
+ document.dispatchEvent(t);
87
+ }
70
88
  }
71
89
  export() {
72
90
  return console.warn("export not implemented"), "";
73
91
  }
74
- _needUpdateCalculatedDataBySettings(t, a) {
75
- var e, n, s, i;
76
- return t.grouping.length !== a.grouping.length || t.grouping.some((u, c) => {
92
+ _needUpdateCalculatedDataBySettings(e, a) {
93
+ var t, n, s, i;
94
+ return e.grouping.length !== a.grouping.length || e.grouping.some((u, c) => {
77
95
  var o;
78
96
  return u.value !== ((o = a.grouping[c]) == null ? void 0 : o.value);
79
- }) || (((e = t.label) == null ? void 0 : e.value) || ((n = a.label) == null ? void 0 : n.value)) && ((s = t.label) == null ? void 0 : s.value) !== ((i = a.label) == null ? void 0 : i.value);
97
+ }) || (((t = e.label) == null ? void 0 : t.value) || ((n = a.label) == null ? void 0 : n.value)) && ((s = e.label) == null ? void 0 : s.value) !== ((i = a.label) == null ? void 0 : i.value);
80
98
  }
81
- _needUpdateCalculatedDataByData(t, a) {
82
- const e = Object.keys(t.data), n = Object.keys(a.data);
83
- return t.id !== a.id || e.length !== n.length || e.some((s) => {
99
+ _needUpdateCalculatedDataByData(e, a) {
100
+ const t = Object.keys(e.data), n = Object.keys(a.data);
101
+ return e.id !== a.id || t.length !== n.length || t.some((s) => {
84
102
  var i;
85
- return t.data[s].length !== ((i = a.data[s]) == null ? void 0 : i.length);
103
+ return e.data[s].length !== ((i = a.data[s]) == null ? void 0 : i.length);
86
104
  });
87
105
  }
88
106
  _updateData() {
89
- const { x: t, y: a, label: e, highlight: n, grouping: s, layers: i, inheritedAes: u } = this.settings, c = {
107
+ const { x: e, y: a, label: t, highlight: n, grouping: s, layers: i, inheritedAes: u } = this.settings, c = {
90
108
  x: !0,
91
109
  y: !0
92
110
  }, o = {
@@ -94,64 +112,64 @@ class k extends R {
94
112
  maxX: -1 / 0,
95
113
  minY: 1 / 0,
96
114
  maxY: -1 / 0
97
- }, f = i.some((h) => h.type === "curve"), v = /* @__PURE__ */ new Set(), m = {}, x = this.data.rows.reduce((h, r, b) => {
98
- if (r[t.value] === null || r[a.value] === null)
115
+ }, f = i.some((h) => h.type === "curve"), D = /* @__PURE__ */ new Set(), b = {}, v = this.data.rows.reduce((h, r, x) => {
116
+ if (r[e.value] === null || r[a.value] === null)
99
117
  return h;
100
- const p = Number(r[t.value]), g = Number(r[a.value]);
118
+ const p = Number(r[e.value]), g = Number(r[a.value]);
101
119
  c.x && p !== null && p < 0 && (c.x = !1), c.y && g !== null && g < 0 && (c.y = !1), p !== null && p < o.minX && (o.minX = p), p !== null && p > o.maxX && (o.maxX = p), g !== null && g < o.minY && (o.minY = g), g !== null && g > o.maxY && (o.maxY = g);
102
- const S = (e == null ? void 0 : e.valueLabels) ?? (e == null ? void 0 : e.value), C = {
120
+ const C = (t == null ? void 0 : t.valueLabels) ?? (t == null ? void 0 : t.value), L = {
103
121
  x: p,
104
122
  y: g,
105
- id: String(b),
106
- idx: b,
123
+ id: String(x),
124
+ idx: x,
107
125
  dimmed: n ? !r[n.value] : !1,
108
- label: S && r[S] ? String(r[S]) : null,
126
+ label: C && r[C] ? String(r[C]) : null,
109
127
  data: r
110
128
  };
111
129
  if (f) {
112
- const D = s.map((P) => r[P.value]).join("_");
113
- v.add(D), m[D] || (m[D] = []), m[D].push(C);
130
+ const S = s.map((P) => r[P.value]).join("_");
131
+ D.add(S), b[S] || (b[S] = []), b[S].push(L);
114
132
  }
115
- return h.push(C), h;
133
+ return h.push(L), h;
116
134
  }, []);
117
- n && x.sort((h, r) => Number(r.dimmed) - Number(h.dimmed));
118
- const _ = [...v];
119
- f && _.forEach((h) => {
120
- m[h].sort((r, b) => r.x - b.x);
135
+ n && v.sort((h, r) => Number(r.dimmed) - Number(h.dimmed));
136
+ const E = [...D];
137
+ f && E.forEach((h) => {
138
+ b[h].sort((r, x) => r.x - x.x);
121
139
  });
122
- const A = I(this.data, s, i, u);
140
+ const A = B(this.data, s, i, u);
123
141
  this.calculatedData = {
124
142
  onlyPositive: c,
125
- dots: x,
126
- dotsByGrouping: m,
127
- groupingKeys: _,
128
- allPossibleLabels: j(x),
143
+ dots: v,
144
+ dotsByGrouping: b,
145
+ groupingKeys: E,
146
+ allPossibleLabels: O(v),
129
147
  dotsExtents: o,
130
148
  legendLabels: A
131
- }, this.chartRenderer.updateData(x);
149
+ }, this.chartRenderer.updateData(v);
132
150
  }
133
151
  _updateAesInData() {
134
- const t = this.calculatedData;
135
- if (!t)
152
+ const e = this.calculatedData;
153
+ if (!e)
136
154
  return;
137
- const { layers: a, inheritedAes: e, grouping: n } = this.settings;
155
+ const { layers: a, inheritedAes: t, grouping: n } = this.settings;
138
156
  n.forEach((s) => {
139
157
  const i = /* @__PURE__ */ new Set(), u = {};
140
158
  a.forEach((c) => {
141
159
  c.aes && Object.entries(c.aes).forEach(([o, f]) => {
142
- Y(f) && f.value === s.value && (i.add(o), f.palette && (u[o] = f.palette));
160
+ X(f) && f.value === s.value && (i.add(o), f.palette && (u[o] = f.palette));
143
161
  });
144
- }), t.legendLabels[s.value].usedAes = [...i], t.legendLabels[s.value].aesMap = U(t.legendLabels[s.value].values, u, e[s.value]);
162
+ }), e.legendLabels[s.value].usedAes = [...i], e.legendLabels[s.value].aesMap = R(e.legendLabels[s.value].values, u, t[s.value]);
145
163
  });
146
164
  }
147
165
  _updateChart() {
148
166
  if (!this.calculatedData)
149
167
  return;
150
- const { id: t, chartSettings: a, keyColumn: e, layers: n, grouping: s, lassoMode: i } = this.settings;
168
+ const { id: e, chartSettings: a, keyColumn: t, layers: n, grouping: s } = this.settings;
151
169
  this.chartRenderer.render(
152
- t,
153
- a,
154
170
  e,
171
+ a,
172
+ t,
155
173
  this.calculatedData.onlyPositive,
156
174
  this.calculatedData.dots,
157
175
  this.calculatedData.dotsExtents,
@@ -161,12 +179,12 @@ class k extends R {
161
179
  s,
162
180
  this.calculatedData.allPossibleLabels,
163
181
  this.onPolygonUpdate,
164
- i,
165
- this.onTooltipHintSwitch
182
+ this.onTooltipHintSwitch,
183
+ this.onLassoControlsStateUpdate
166
184
  );
167
185
  }
168
186
  }
169
187
  export {
170
- k as ChartScatterplotUmap
188
+ H as ChartScatterplotUmap
171
189
  };
172
190
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/scatterplot-umap/index.ts"],"sourcesContent":["import {AbstractChart} from '../AbstractChart';\nimport {addPalettesToAesMapping, createLegendInfo} from '../scatterplot/utils/createLegendInfo';\nimport type {Point} from './types';\nimport type {Dot, DotsExtents} from './types';\nimport type {Label} from '../scatterplot/utils/getVisibleLabels';\nimport type {ContinuousAesFromColumn, InheritAesScatterplot} from '../types';\nimport type {ScatterplotEventHandlers} from '../types';\nimport type {AesItem} from '../types';\nimport type {ScatterplotUmapLegendInfo, ScatterplotUmapSettings} from '../types/scatterplot-umap';\nimport {TextMeasurer} from '../utils/TextMeasurer';\nimport ChartRenderer from './ChartRenderer';\nimport type {DotsLayer} from './SettingsImpl';\nimport {ScatterplotUmapSettingsImpl} from './SettingsImpl';\nimport type {DataFrame} from '../DataFrame';\n\nfunction isInheritMapping<T extends (string | number)>(value:T | InheritAesScatterplot | ContinuousAesFromColumn<T>):value is InheritAesScatterplot {\n return typeof value === 'object' && 'type' in value && value.type === 'grouping';\n}\n\nconst LABEL_OFFSET = 10;\nfunction getAllPossibleLabels(dots: Dot[]) {\n const labels: Label[] = [];\n const textMeasurer = new TextMeasurer('16px Manrope');\n for (const dot of dots) {\n const text = dot.label;\n if (!text) {\n continue;\n }\n const metrics = textMeasurer.getTextMetrics(String(text));\n labels.push({\n name: String(text),\n width: metrics?.width ?? 0,\n height: (metrics?.actualBoundingBoxAscent ?? 0) + (metrics?.actualBoundingBoxDescent ?? 0),\n x: 0,\n y: 0,\n xPosition: 'right',\n yPosition: 'middle',\n bbox: {minX: 0, maxX: 0, minY: 0, maxY: 0},\n dot,\n padding: LABEL_OFFSET,\n } as Label);\n }\n return labels;\n}\n\nexport class ChartScatterplotUmap extends AbstractChart {\n settings: ScatterplotUmapSettingsImpl;\n chartRenderer = new ChartRenderer();\n\n onPolygonUpdate: (data: number[]) => void = () => undefined; // dots indexes from input data\n onTooltipHintSwitch: (v:boolean) => void = () => undefined;\n\n calculatedData: {\n onlyPositive: {x: boolean; y: boolean};\n dots: Dot[],\n groupingKeys: string[],\n dotsByGrouping: Record<string, Dot[]>,\n allPossibleLabels: Label[],\n dotsExtents: DotsExtents,\n legendLabels: ScatterplotUmapLegendInfo\n } | null = null;\n\n constructor(data: DataFrame, settings: ScatterplotUmapSettings, eventHandlers?: ScatterplotEventHandlers) {\n super(data, settings);\n\n this.settings = new ScatterplotUmapSettingsImpl(settings);\n if (eventHandlers) {\n this.onPolygonUpdate = eventHandlers[0];\n this.onTooltipHintSwitch = eventHandlers[1];\n }\n }\n\n mount(node: HTMLElement) {\n try {\n this.chartRenderer.init(node);\n this._updateData();\n this._updateChart();\n } catch (err) {\n if (err instanceof Error) {\n this.chartRenderer.renderError(err.message as string);\n }\n }\n }\n\n unmount() {\n this.chartRenderer.clear();\n }\n\n updateSettingsAndData(data: DataFrame, settings: ScatterplotUmapSettings) {\n try {\n const previousSettings = this.settings;\n const previousData = this.data;\n this.settings = new ScatterplotUmapSettingsImpl(settings);\n this.data = data;\n if (\n this._needUpdateCalculatedDataBySettings(previousSettings, this.settings) ||\n this._needUpdateCalculatedDataByData(previousData, this.data)\n ) {\n this._updateData();\n } else {\n this._updateAesInData();\n }\n\n // for some reason it's not enough for size updating to do like with fillColor\n const prevLayer = previousSettings.layers.find(l => l.type === 'dots') as DotsLayer;\n const currentLayer = this.settings.layers.find(l => l.type === 'dots') as DotsLayer;\n if (prevLayer && currentLayer && prevLayer.aes.dotSize !== currentLayer.aes.dotSize\n && typeof prevLayer.aes.dotSize === 'number' && typeof currentLayer.aes.dotSize === 'number') {\n this.chartRenderer.updatePointSize();\n }\n this._updateChart();\n } catch (err) {\n if (err instanceof Error) {\n this.chartRenderer.renderError(err.message as string);\n }\n }\n }\n\n updateChartState(field: string, value: unknown) {\n if (field === 'polygon') {\n this.chartRenderer.polygon = value as Point[];\n this._updateChart();\n }\n }\n\n export(): string {\n console.warn('export not implemented');\n return '';\n // this._updateChart();\n // return renderToString(this.chartRenderer.component);\n }\n\n _needUpdateCalculatedDataBySettings(prevSettings: ScatterplotUmapSettingsImpl, settings: ScatterplotUmapSettingsImpl) {\n return (\n prevSettings.grouping.length !== settings.grouping.length ||\n prevSettings.grouping.some((el, idx) => el.value !== settings.grouping[idx]?.value) ||\n (prevSettings.label?.value || settings.label?.value) && prevSettings.label?.value !== settings.label?.value\n );\n }\n\n _needUpdateCalculatedDataByData(prevData: DataFrame, data: DataFrame) {\n const prevKeys = Object.keys(prevData.data);\n const keys = Object.keys(data.data);\n return (\n prevData.id !== data.id ||\n prevKeys.length !== keys.length ||\n prevKeys.some(key => prevData.data[key].length !== data.data[key]?.length)\n );\n }\n\n _updateData() {\n const {x, y, label, highlight, grouping, layers, inheritedAes} = this.settings;\n\n const onlyPositive = {\n x: true,\n y: true,\n };\n const dotsExtents = {\n minX: Infinity,\n maxX: -Infinity,\n minY: Infinity,\n maxY: -Infinity,\n };\n\n const hasCurve = layers.some(layer => layer.type === 'curve');\n const groupingKeysSet = new Set<string>();\n const dotsByGrouping:Record<string, Dot[]> = {};\n\n const dots = this.data.rows.reduce((res:Dot[], row, idx) => {\n if (row[x.value] === null || row[y.value] === null) {\n return res;\n }\n const xv = Number(row[x.value]);\n const yv = Number(row[y.value]);\n if (onlyPositive.x && xv !== null && xv < 0) {\n onlyPositive.x = false;\n }\n if (onlyPositive.y && yv !== null && yv < 0) {\n onlyPositive.y = false;\n }\n if (xv !== null && xv < dotsExtents.minX) {\n dotsExtents.minX = xv;\n }\n if (xv !== null && xv > dotsExtents.maxX) {\n dotsExtents.maxX = xv;\n }\n if (yv !== null && yv < dotsExtents.minY) {\n dotsExtents.minY = yv;\n }\n if (yv !== null && yv > dotsExtents.maxY) {\n dotsExtents.maxY = yv;\n }\n const labelKey = label?.valueLabels ?? label?.value;\n const dot = {\n x: xv,\n y: yv,\n id: String(idx),\n idx: idx,\n dimmed: highlight ? !row[highlight.value] : false,\n label: labelKey && row[labelKey] ? String(row[labelKey]) : null,\n data: row\n };\n if (hasCurve) {\n const groupingKey = grouping.map(column => row[column.value]).join('_');\n groupingKeysSet.add(groupingKey);\n if (!dotsByGrouping[groupingKey]) {\n dotsByGrouping[groupingKey] = [];\n }\n dotsByGrouping[groupingKey].push(dot);\n\n }\n res.push(dot);\n return res;\n }, []);\n\n if (highlight) {\n dots.sort((d1, d2) => {\n return Number(d2.dimmed) - Number(d1.dimmed);\n });\n }\n // console.info('only positive Y:', onlyPositive.y);\n // console.info('only positive X:', onlyPositive.x);\n\n const groupingKeys = [...groupingKeysSet];\n if (hasCurve) {\n groupingKeys.forEach(key => {\n dotsByGrouping[key].sort((a, b) => a.x - b.x);\n });\n }\n const legendLabels = createLegendInfo(this.data, grouping, layers, inheritedAes);\n\n this.calculatedData = {\n onlyPositive,\n dots,\n dotsByGrouping,\n groupingKeys,\n allPossibleLabels: getAllPossibleLabels(dots),\n dotsExtents,\n legendLabels,\n };\n\n this.chartRenderer.updateData(dots);\n }\n\n _updateAesInData() {\n const calculated = this.calculatedData;\n if (!calculated) {\n return;\n }\n const {layers, inheritedAes, grouping} = this.settings;\n grouping.forEach(column => {\n const usedAes = new Set<keyof AesItem>();\n const usedAesFromPalettes:Partial<Record<keyof AesItem, string[]>> = {}; // if there is palette in mapping then\n layers.forEach(layer => {\n if (layer.aes) {\n Object.entries(layer.aes).forEach(([key, value]) => {\n if (isInheritMapping(value) && value.value === column.value) {\n usedAes.add(key as keyof AesItem);\n if (value.palette) {\n usedAesFromPalettes[key as keyof AesItem] = value.palette;\n }\n }\n });\n }\n });\n calculated.legendLabels[column.value].usedAes = [...usedAes];\n calculated.legendLabels[column.value].aesMap = addPalettesToAesMapping(calculated.legendLabels[column.value].values, usedAesFromPalettes, inheritedAes[column.value]);\n });\n }\n\n _updateChart() {\n if (!this.calculatedData) {\n return;\n }\n const {id, chartSettings, keyColumn, layers, grouping, lassoMode} = this.settings;\n this.chartRenderer.render(\n id,\n chartSettings,\n keyColumn,\n this.calculatedData.onlyPositive,\n this.calculatedData.dots,\n this.calculatedData.dotsExtents,\n this.calculatedData.dotsByGrouping,\n layers,\n this.calculatedData.legendLabels,\n grouping,\n this.calculatedData.allPossibleLabels,\n this.onPolygonUpdate,\n lassoMode,\n this.onTooltipHintSwitch\n );\n }\n}\n"],"names":["isInheritMapping","value","LABEL_OFFSET","getAllPossibleLabels","dots","labels","textMeasurer","TextMeasurer","dot","text","metrics","ChartScatterplotUmap","AbstractChart","data","settings","eventHandlers","__publicField","ChartRenderer","ScatterplotUmapSettingsImpl","node","err","previousSettings","previousData","prevLayer","l","currentLayer","field","prevSettings","el","idx","_a","_b","_c","_d","prevData","prevKeys","keys","key","x","y","label","highlight","grouping","layers","inheritedAes","onlyPositive","dotsExtents","hasCurve","layer","groupingKeysSet","dotsByGrouping","res","row","xv","yv","labelKey","groupingKey","column","d1","d2","groupingKeys","a","legendLabels","createLegendInfo","calculated","usedAes","usedAesFromPalettes","addPalettesToAesMapping","id","chartSettings","keyColumn","lassoMode"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../src/scatterplot-umap/index.ts"],"sourcesContent":["import {AbstractChart} from '../AbstractChart';\nimport {SCATTERPLOT_LASSO_EVENTS} from './constants';\nimport {addPalettesToAesMapping, createLegendInfo} from '../scatterplot/utils/createLegendInfo';\nimport type {LassoControlsState, LassoMode, Polygon} from './types';\nimport type {Dot, DotsExtents} from './types';\nimport type {Label} from '../scatterplot/utils/getVisibleLabels';\nimport type {ContinuousAesFromColumn, InheritAesScatterplot} from '../types';\nimport type {ScatterplotEventHandlers} from '../types';\nimport type {AesItem} from '../types';\nimport type {ScatterplotUmapLegendInfo, ScatterplotUmapSettings} from '../types/scatterplot-umap';\nimport {TextMeasurer} from '../utils/TextMeasurer';\nimport ChartRenderer from './ChartRenderer';\nimport type {DotsLayer} from './SettingsImpl';\nimport {ScatterplotUmapSettingsImpl} from './SettingsImpl';\nimport type {DataFrame} from '../DataFrame';\n\nfunction isInheritMapping<T extends (string | number)>(value:T | InheritAesScatterplot | ContinuousAesFromColumn<T>):value is InheritAesScatterplot {\n return typeof value === 'object' && 'type' in value && value.type === 'grouping';\n}\n\nconst LABEL_OFFSET = 10;\nfunction getAllPossibleLabels(dots: Dot[]) {\n const labels: Label[] = [];\n const textMeasurer = new TextMeasurer('16px Manrope');\n for (const dot of dots) {\n const text = dot.label;\n if (!text) {\n continue;\n }\n const metrics = textMeasurer.getTextMetrics(String(text));\n labels.push({\n name: String(text),\n width: metrics?.width ?? 0,\n height: (metrics?.actualBoundingBoxAscent ?? 0) + (metrics?.actualBoundingBoxDescent ?? 0),\n x: 0,\n y: 0,\n xPosition: 'right',\n yPosition: 'middle',\n bbox: {minX: 0, maxX: 0, minY: 0, maxY: 0},\n dot,\n padding: LABEL_OFFSET,\n } as Label);\n }\n return labels;\n}\n\nexport class ChartScatterplotUmap extends AbstractChart {\n settings: ScatterplotUmapSettingsImpl;\n chartRenderer = new ChartRenderer();\n\n onPolygonUpdate: (data: number[], polygons: Polygon[]) => void = () => undefined; // dots indexes from input data\n onTooltipHintSwitch: (v:boolean) => void = () => undefined;\n onLassoControlsStateUpdate: (v: LassoControlsState) => void = () => undefined;\n\n calculatedData: {\n onlyPositive: {x: boolean; y: boolean};\n dots: Dot[],\n groupingKeys: string[],\n dotsByGrouping: Record<string, Dot[]>,\n allPossibleLabels: Label[],\n dotsExtents: DotsExtents,\n legendLabels: ScatterplotUmapLegendInfo\n } | null = null;\n\n constructor(data: DataFrame, settings: ScatterplotUmapSettings, eventHandlers?: ScatterplotEventHandlers) {\n super(data, settings);\n\n this.settings = new ScatterplotUmapSettingsImpl(settings);\n if (eventHandlers) {\n this.onPolygonUpdate = eventHandlers.onPolygonUpdate;\n this.onTooltipHintSwitch = eventHandlers.onTooltipHintSwitch;\n this.onLassoControlsStateUpdate = eventHandlers.onLassoControlsStateUpdate;\n }\n }\n\n mount(node: HTMLElement) {\n try {\n this.chartRenderer.init(node);\n this._updateData();\n this._updateChart();\n } catch (err) {\n if (err instanceof Error) {\n this.chartRenderer.renderError(err.message as string);\n }\n }\n }\n\n unmount() {\n this.chartRenderer.clear();\n }\n\n updateSettingsAndData(data: DataFrame, settings: ScatterplotUmapSettings) {\n try {\n const previousSettings = this.settings;\n const previousData = this.data;\n this.settings = new ScatterplotUmapSettingsImpl(settings);\n this.data = data;\n if (\n this._needUpdateCalculatedDataBySettings(previousSettings, this.settings) ||\n this._needUpdateCalculatedDataByData(previousData, this.data)\n ) {\n this._updateData();\n } else {\n this._updateAesInData();\n }\n\n // for some reason it's not enough for size updating to do like with fillColor\n const prevLayer = previousSettings.layers.find(l => l.type === 'dots') as DotsLayer;\n const currentLayer = this.settings.layers.find(l => l.type === 'dots') as DotsLayer;\n if (prevLayer && currentLayer && prevLayer.aes.dotSize !== currentLayer.aes.dotSize\n && typeof prevLayer.aes.dotSize === 'number' && typeof currentLayer.aes.dotSize === 'number') {\n this.chartRenderer.updatePointSize();\n }\n this._updateChart();\n } catch (err) {\n if (err instanceof Error) {\n this.chartRenderer.renderError(err.message as string);\n }\n }\n }\n\n updateChartState(field: string, value: unknown) {\n if (field === 'polygon') {\n this.chartRenderer.polygons = value as Polygon[];\n this._updateChart();\n }\n if (field === SCATTERPLOT_LASSO_EVENTS.delete) {\n if (document) {\n const event = new CustomEvent(SCATTERPLOT_LASSO_EVENTS.delete);\n document.dispatchEvent(event);\n }}\n if (field === SCATTERPLOT_LASSO_EVENTS.selectMode) {\n if (document) {\n const event = new CustomEvent(SCATTERPLOT_LASSO_EVENTS.selectMode, {detail: value as LassoMode});\n document.dispatchEvent(event);\n }\n }\n if (field === SCATTERPLOT_LASSO_EVENTS.forward) {\n if (document) {\n const event = new CustomEvent(SCATTERPLOT_LASSO_EVENTS.forward);\n document.dispatchEvent(event);\n }\n }\n if (field === SCATTERPLOT_LASSO_EVENTS.back) {\n if (document) {\n const event = new CustomEvent(SCATTERPLOT_LASSO_EVENTS.back);\n document.dispatchEvent(event);\n }\n }\n }\n\n export(): string {\n console.warn('export not implemented');\n return '';\n // this._updateChart();\n // return renderToString(this.chartRenderer.component);\n }\n\n _needUpdateCalculatedDataBySettings(prevSettings: ScatterplotUmapSettingsImpl, settings: ScatterplotUmapSettingsImpl) {\n return (\n prevSettings.grouping.length !== settings.grouping.length ||\n prevSettings.grouping.some((el, idx) => el.value !== settings.grouping[idx]?.value) ||\n (prevSettings.label?.value || settings.label?.value) && prevSettings.label?.value !== settings.label?.value\n );\n }\n\n _needUpdateCalculatedDataByData(prevData: DataFrame, data: DataFrame) {\n const prevKeys = Object.keys(prevData.data);\n const keys = Object.keys(data.data);\n return (\n prevData.id !== data.id ||\n prevKeys.length !== keys.length ||\n prevKeys.some(key => prevData.data[key].length !== data.data[key]?.length)\n );\n }\n\n _updateData() {\n const {x, y, label, highlight, grouping, layers, inheritedAes} = this.settings;\n\n const onlyPositive = {\n x: true,\n y: true,\n };\n const dotsExtents = {\n minX: Infinity,\n maxX: -Infinity,\n minY: Infinity,\n maxY: -Infinity,\n };\n\n const hasCurve = layers.some(layer => layer.type === 'curve');\n const groupingKeysSet = new Set<string>();\n const dotsByGrouping:Record<string, Dot[]> = {};\n\n const dots = this.data.rows.reduce((res:Dot[], row, idx) => {\n if (row[x.value] === null || row[y.value] === null) {\n return res;\n }\n const xv = Number(row[x.value]);\n const yv = Number(row[y.value]);\n if (onlyPositive.x && xv !== null && xv < 0) {\n onlyPositive.x = false;\n }\n if (onlyPositive.y && yv !== null && yv < 0) {\n onlyPositive.y = false;\n }\n if (xv !== null && xv < dotsExtents.minX) {\n dotsExtents.minX = xv;\n }\n if (xv !== null && xv > dotsExtents.maxX) {\n dotsExtents.maxX = xv;\n }\n if (yv !== null && yv < dotsExtents.minY) {\n dotsExtents.minY = yv;\n }\n if (yv !== null && yv > dotsExtents.maxY) {\n dotsExtents.maxY = yv;\n }\n const labelKey = label?.valueLabels ?? label?.value;\n const dot = {\n x: xv,\n y: yv,\n id: String(idx),\n idx: idx,\n dimmed: highlight ? !row[highlight.value] : false,\n label: labelKey && row[labelKey] ? String(row[labelKey]) : null,\n data: row\n };\n if (hasCurve) {\n const groupingKey = grouping.map(column => row[column.value]).join('_');\n groupingKeysSet.add(groupingKey);\n if (!dotsByGrouping[groupingKey]) {\n dotsByGrouping[groupingKey] = [];\n }\n dotsByGrouping[groupingKey].push(dot);\n\n }\n res.push(dot);\n return res;\n }, []);\n\n if (highlight) {\n dots.sort((d1, d2) => {\n return Number(d2.dimmed) - Number(d1.dimmed);\n });\n }\n // console.info('only positive Y:', onlyPositive.y);\n // console.info('only positive X:', onlyPositive.x);\n\n const groupingKeys = [...groupingKeysSet];\n if (hasCurve) {\n groupingKeys.forEach(key => {\n dotsByGrouping[key].sort((a, b) => a.x - b.x);\n });\n }\n const legendLabels = createLegendInfo(this.data, grouping, layers, inheritedAes);\n\n this.calculatedData = {\n onlyPositive,\n dots,\n dotsByGrouping,\n groupingKeys,\n allPossibleLabels: getAllPossibleLabels(dots),\n dotsExtents,\n legendLabels,\n };\n\n this.chartRenderer.updateData(dots);\n }\n\n _updateAesInData() {\n const calculated = this.calculatedData;\n if (!calculated) {\n return;\n }\n const {layers, inheritedAes, grouping} = this.settings;\n grouping.forEach(column => {\n const usedAes = new Set<keyof AesItem>();\n const usedAesFromPalettes:Partial<Record<keyof AesItem, string[]>> = {}; // if there is palette in mapping then\n layers.forEach(layer => {\n if (layer.aes) {\n Object.entries(layer.aes).forEach(([key, value]) => {\n if (isInheritMapping(value) && value.value === column.value) {\n usedAes.add(key as keyof AesItem);\n if (value.palette) {\n usedAesFromPalettes[key as keyof AesItem] = value.palette;\n }\n }\n });\n }\n });\n calculated.legendLabels[column.value].usedAes = [...usedAes];\n calculated.legendLabels[column.value].aesMap = addPalettesToAesMapping(calculated.legendLabels[column.value].values, usedAesFromPalettes, inheritedAes[column.value]);\n });\n }\n\n _updateChart() {\n if (!this.calculatedData) {\n return;\n }\n const {id, chartSettings, keyColumn, layers, grouping} = this.settings;\n this.chartRenderer.render(\n id,\n chartSettings,\n keyColumn,\n this.calculatedData.onlyPositive,\n this.calculatedData.dots,\n this.calculatedData.dotsExtents,\n this.calculatedData.dotsByGrouping,\n layers,\n this.calculatedData.legendLabels,\n grouping,\n this.calculatedData.allPossibleLabels,\n this.onPolygonUpdate,\n this.onTooltipHintSwitch,\n this.onLassoControlsStateUpdate\n );\n }\n}\n"],"names":["isInheritMapping","value","LABEL_OFFSET","getAllPossibleLabels","dots","labels","textMeasurer","TextMeasurer","dot","text","metrics","ChartScatterplotUmap","AbstractChart","data","settings","eventHandlers","__publicField","ChartRenderer","ScatterplotUmapSettingsImpl","node","err","previousSettings","previousData","prevLayer","l","currentLayer","field","SCATTERPLOT_LASSO_EVENTS","event","prevSettings","el","idx","_a","_b","_c","_d","prevData","prevKeys","keys","key","x","y","label","highlight","grouping","layers","inheritedAes","onlyPositive","dotsExtents","hasCurve","layer","groupingKeysSet","dotsByGrouping","res","row","xv","yv","labelKey","groupingKey","column","d1","d2","groupingKeys","a","b","legendLabels","createLegendInfo","calculated","usedAes","usedAesFromPalettes","addPalettesToAesMapping","id","chartSettings","keyColumn"],"mappings":"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"}
@@ -67,15 +67,27 @@ export interface SVGLayerProps {
67
67
  labels: Label[];
68
68
  dotsByGrouping: Record<string, Dot[]>;
69
69
  layers: ScatterplotUmapSettingsImpl['layers'];
70
- onPolygonUpdate: (data: Point[]) => void;
70
+ defaultPolygons: Polygon[];
71
+ onPolygonUpdate: (data: Polygon[]) => void;
71
72
  onTooltipHintSwitch: (v: boolean) => void;
72
- lassoMode: boolean;
73
+ onLassoControlsStateUpdate: (v: LassoControlsState) => void;
73
74
  }
74
75
  export type Point = [number, number];
75
76
  export type PairPoints = [Point, Point];
77
+ export type Polygon = {
78
+ points: Point[];
79
+ closed: boolean;
80
+ };
81
+ export type LassoMode = 'pen' | 'selection';
76
82
  export type AesGetters = {
77
83
  dotFill: (r: Row) => string;
78
84
  dotSize: (r: Row) => number;
79
85
  lineType: (r: Row) => LineShape;
80
86
  };
87
+ export type LassoControlsState = {
88
+ mode: LassoMode;
89
+ deleteEnabled: boolean;
90
+ backEnabled: boolean;
91
+ forwardEnabled: boolean;
92
+ };
81
93
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/scatterplot-umap/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/scatterplot-umap/types.ts"],"names":[],"mappings":"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"}