@milaboratories/graph-maker 1.1.142 → 1.1.143
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/GraphMaker/components/ReorderForm.vue.d.ts +15 -0
- package/dist/GraphMaker/components/ReorderForm.vue.d.ts.map +1 -0
- package/dist/GraphMaker/components/ReorderForm.vue.js +43 -0
- package/dist/GraphMaker/components/ReorderForm.vue.js.map +1 -0
- package/dist/GraphMaker/components/ReorderForm.vue2.js +5 -0
- package/dist/GraphMaker/components/ReorderForm.vue2.js.map +1 -0
- package/dist/GraphMaker/constantsCommon.d.ts +15 -0
- package/dist/GraphMaker/constantsCommon.d.ts.map +1 -1
- package/dist/GraphMaker/constantsCommon.js +11 -8
- package/dist/GraphMaker/constantsCommon.js.map +1 -1
- package/dist/GraphMaker/forms/AxesSettingsForm/DiscreteAxesSettingsForm.vue.js.map +1 -1
- package/dist/GraphMaker/forms/AxesSettingsForm/ScatterplotAxesSettingsForm.vue.d.ts.map +1 -1
- package/dist/GraphMaker/forms/AxesSettingsForm/ScatterplotAxesSettingsForm.vue.js +305 -172
- package/dist/GraphMaker/forms/AxesSettingsForm/ScatterplotAxesSettingsForm.vue.js.map +1 -1
- package/dist/GraphMaker/index.vue.js +33 -33
- package/dist/GraphMaker/index.vue.js.map +1 -1
- package/dist/GraphMaker/utils/createChartSettingsForRender/composeBubbleSettings.d.ts +3 -3
- package/dist/GraphMaker/utils/createChartSettingsForRender/composeBubbleSettings.d.ts.map +1 -1
- package/dist/GraphMaker/utils/createChartSettingsForRender/composeDendroSettings.d.ts +9 -9
- package/dist/GraphMaker/utils/createChartSettingsForRender/composeDendroSettings.d.ts.map +1 -1
- package/dist/GraphMaker/utils/createChartSettingsForRender/composeDiscreteSettings.d.ts +5 -11
- package/dist/GraphMaker/utils/createChartSettingsForRender/composeDiscreteSettings.d.ts.map +1 -1
- package/dist/GraphMaker/utils/createChartSettingsForRender/composeHeatmapSettings.d.ts +3 -3
- package/dist/GraphMaker/utils/createChartSettingsForRender/composeHeatmapSettings.d.ts.map +1 -1
- package/dist/GraphMaker/utils/createChartSettingsForRender/composeHistogramSettings.d.ts +1 -1
- package/dist/GraphMaker/utils/createChartSettingsForRender/composeScatterplotSettings.d.ts +31 -5
- package/dist/GraphMaker/utils/createChartSettingsForRender/composeScatterplotSettings.d.ts.map +1 -1
- package/dist/GraphMaker/utils/createChartSettingsForRender/composeScatterplotSettings.js +56 -53
- package/dist/GraphMaker/utils/createChartSettingsForRender/composeScatterplotSettings.js.map +1 -1
- package/dist/GraphMaker/utils/createChartSettingsForRender/composeScatterplotUmapSettings.d.ts +1 -7
- package/dist/GraphMaker/utils/createChartSettingsForRender/composeScatterplotUmapSettings.d.ts.map +1 -1
- package/dist/GraphMaker/utils/createChartSettingsForRender/composeScatterplotUmapSettings.js +13 -13
- package/dist/GraphMaker/utils/createChartSettingsForRender/composeScatterplotUmapSettings.js.map +1 -1
- package/dist/GraphMaker/utils/createChartSettingsForRender/getAxesDataFromForms.d.ts +6 -4
- package/dist/GraphMaker/utils/createChartSettingsForRender/getAxesDataFromForms.d.ts.map +1 -1
- package/dist/GraphMaker/utils/createChartSettingsForRender/getAxesDataFromForms.js +42 -13
- package/dist/GraphMaker/utils/createChartSettingsForRender/getAxesDataFromForms.js.map +1 -1
- package/dist/GraphMaker/utils/loadUniqueValuesToSave.d.ts.map +1 -1
- package/dist/GraphMaker/utils/loadUniqueValuesToSave.js +48 -44
- package/dist/GraphMaker/utils/loadUniqueValuesToSave.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/{discrete/components → common}/BandAxis.js +3 -3
- package/dist/node_modules/@milaboratories/miplots4/dist/common/BandAxis.js.map +1 -0
- package/dist/node_modules/@milaboratories/miplots4/dist/common/ContinuousGrid.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/dendro/ChartRenderer.js +14 -14
- package/dist/node_modules/@milaboratories/miplots4/dist/discrete/ChartRenderer.js +197 -270
- package/dist/node_modules/@milaboratories/miplots4/dist/discrete/ChartRenderer.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/discrete/DiscreteSettingsImpl.js +9 -9
- package/dist/node_modules/@milaboratories/miplots4/dist/discrete/components/Chart.js +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/discrete/components/Chart.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/discrete/components/Grid.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/discrete/index.js +11 -11
- package/dist/node_modules/@milaboratories/miplots4/dist/histogram/ChartRenderer.js +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-scale/src/band.js +44 -34
- package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-scale/src/band.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/ChartRenderer.js +272 -195
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/ChartRenderer.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/ScatterplotSettingsImpl.js +23 -23
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/ScatterplotSettingsImpl.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/Chart.js +54 -50
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/Chart.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/ChartAxis.js +32 -28
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/ChartAxis.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/ChartLayersData.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/ChartTooltip.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/ChartTrendsData.js +29 -26
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/ChartTrendsData.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/ChartsGroup.js +44 -41
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/ChartsGroup.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/Grid.js +31 -27
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/Grid.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/dots.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/getLayersData.js +29 -18
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/getLayersData.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/index.js +71 -57
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/index.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/linearRegression.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/utils/isNumericScale.js +11 -0
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/utils/isNumericScale.js.map +1 -0
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot-umap/ChartRenderer.js +10 -10
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot-umap/ChartRenderer.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot-umap/SettingsImpl.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot-umap/components/LowerSVG.js +6 -6
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot-umap/components/LowerSVG.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/types/common.js +35 -25
- package/dist/node_modules/@milaboratories/miplots4/dist/types/common.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/types/dendro.js +3 -3
- package/dist/node_modules/@milaboratories/miplots4/dist/types/discrete.js +37 -37
- package/dist/node_modules/@milaboratories/miplots4/dist/types/discrete.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/types/heatmap.js +6 -6
- package/dist/node_modules/@milaboratories/miplots4/dist/types/scatterplot-umap.js +7 -7
- package/dist/node_modules/@milaboratories/miplots4/dist/types/scatterplot-umap.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/utils/createMultilineDiscreteLabels.js +32 -0
- package/dist/node_modules/@milaboratories/miplots4/dist/utils/createMultilineDiscreteLabels.js.map +1 -0
- package/dist/node_modules/@milaboratories/miplots4/dist/utils/getFacetRowsColumns.js +18 -0
- package/dist/node_modules/@milaboratories/miplots4/dist/utils/getFacetRowsColumns.js.map +1 -0
- package/dist/node_modules/@milaboratories/miplots4/dist/utils/measureMultilineDiscreteLabels.js +63 -0
- package/dist/node_modules/@milaboratories/miplots4/dist/utils/measureMultilineDiscreteLabels.js.map +1 -0
- package/dist/node_modules/@milaboratories/miplots4/dist/{discrete/utils → utils}/splitTextByWidth.js +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/utils/splitTextByWidth.js.map +1 -0
- package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/controllersByChartType/scatterplot.js +2 -2
- package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/controllersByChartType/scatterplot.js.map +1 -1
- package/package.json +3 -3
- package/dist/node_modules/@milaboratories/miplots4/dist/discrete/components/BandAxis.js.map +0 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/discrete/utils/splitTextByWidth.js.map +0 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/Axis.js +0 -59
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot/components/Axis.js.map +0 -1
|
@@ -1,39 +1,43 @@
|
|
|
1
|
-
import { j as
|
|
2
|
-
import { GRID_GRAY as
|
|
3
|
-
import { getLineShape as
|
|
1
|
+
import { j as t } from "../../node_modules/react/jsx-runtime.js";
|
|
2
|
+
import { GRID_GRAY as f, BLACK as x } from "../../constants.js";
|
|
3
|
+
import { getLineShape as p } from "../../utils/getLineShape.js";
|
|
4
4
|
import { r as d } from "../../_virtual/index.js";
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
import { isNumericScale as h, isContinuousAxis as g } from "../utils/isNumericScale.js";
|
|
6
|
+
const L = 1;
|
|
7
|
+
function c(n, a) {
|
|
8
|
+
return h(n) ? n.ticks().filter((i) => !a.includes(i)) : n.domain();
|
|
9
|
+
}
|
|
10
|
+
function Y({ scaleX: n, scaleY: a, width: i, height: o, axisX: l, axisY: y, frameType: e, updatingKey: j = "" }) {
|
|
11
|
+
const { significantLines: m = [] } = l, { significantLines: u = [] } = y, [G, _] = d.useState(() => c(n, m)), [k, w] = d.useState(() => c(a, u));
|
|
8
12
|
return d.useEffect(() => {
|
|
9
|
-
const
|
|
10
|
-
|
|
11
|
-
}, [
|
|
12
|
-
|
|
13
|
-
const s =
|
|
14
|
-
return /* @__PURE__ */
|
|
13
|
+
const r = c(n, m), s = c(a, u);
|
|
14
|
+
_(r), w(s);
|
|
15
|
+
}, [n, a, j]), /* @__PURE__ */ t.jsxs("g", { stroke: f, children: [
|
|
16
|
+
l.showGrid && G.map((r) => {
|
|
17
|
+
const s = n(r);
|
|
18
|
+
return /* @__PURE__ */ t.jsx("line", { x1: s, x2: s, y1: 0, y2: o }, `x_${s}_${o}`);
|
|
15
19
|
}),
|
|
16
|
-
|
|
17
|
-
const s =
|
|
18
|
-
return /* @__PURE__ */
|
|
20
|
+
y.showGrid && k.map((r) => {
|
|
21
|
+
const s = a(r);
|
|
22
|
+
return /* @__PURE__ */ t.jsx("line", { x1: 0, x2: i, y1: s, y2: s }, `y_${s}_${i}`);
|
|
19
23
|
}),
|
|
20
|
-
/* @__PURE__ */
|
|
21
|
-
const s =
|
|
22
|
-
return /* @__PURE__ */
|
|
24
|
+
h(n) && g(l) && /* @__PURE__ */ t.jsx("g", { strokeDasharray: p(l.significantLinesStyle), stroke: x, children: m.map((r) => {
|
|
25
|
+
const s = n(r);
|
|
26
|
+
return /* @__PURE__ */ t.jsx("line", { x1: s, x2: s, y1: 0, y2: o }, `significant_${s}_${o}`);
|
|
23
27
|
}) }),
|
|
24
|
-
/* @__PURE__ */
|
|
25
|
-
const s =
|
|
26
|
-
return /* @__PURE__ */
|
|
28
|
+
h(a) && g(y) && /* @__PURE__ */ t.jsx("g", { strokeDasharray: p(y.significantLinesStyle), stroke: x, children: u.map((r) => {
|
|
29
|
+
const s = a(r);
|
|
30
|
+
return /* @__PURE__ */ t.jsx("line", { x1: 0, x2: i, y1: s, y2: s }, `significant_${s}_${i}`);
|
|
27
31
|
}) }),
|
|
28
|
-
|
|
29
|
-
(
|
|
30
|
-
(
|
|
31
|
-
(
|
|
32
|
-
(
|
|
32
|
+
e !== "empty" && /* @__PURE__ */ t.jsxs("g", { strokeWidth: L, children: [
|
|
33
|
+
(l.showGrid || e !== "left") && /* @__PURE__ */ t.jsx("line", { stroke: e === "left" ? f : x, x1: "0", x2: i, y1: o, y2: o }),
|
|
34
|
+
(l.showGrid || e !== "bottom") && /* @__PURE__ */ t.jsx("line", { stroke: e === "bottom" ? f : x, x1: "0", x2: "0", y1: "0", y2: o }),
|
|
35
|
+
(l.showGrid || e === "full") && /* @__PURE__ */ t.jsx("line", { stroke: e === "full" ? x : f, x1: i, x2: i, y1: "0", y2: o }),
|
|
36
|
+
(y.showGrid || e === "full") && /* @__PURE__ */ t.jsx("line", { stroke: e === "full" ? x : f, x1: "0", x2: i, y1: "0", y2: "0" })
|
|
33
37
|
] })
|
|
34
38
|
] });
|
|
35
39
|
}
|
|
36
40
|
export {
|
|
37
|
-
|
|
41
|
+
Y as Grid
|
|
38
42
|
};
|
|
39
43
|
//# sourceMappingURL=Grid.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Grid.js","sources":["../../../../../../../node_modules/@milaboratories/miplots4/src/scatterplot/components/Grid.tsx"],"sourcesContent":["import {BLACK, GRID_GRAY} from '../../constants';\nimport type {AxisSettings, FrameType} from '../../types';\nimport {getLineShape} from '../../utils/getLineShape';\nimport
|
|
1
|
+
{"version":3,"file":"Grid.js","sources":["../../../../../../../node_modules/@milaboratories/miplots4/src/scatterplot/components/Grid.tsx"],"sourcesContent":["import { BLACK, GRID_GRAY } from '../../constants';\nimport type { AxisSettings, AxisSettingsContinuous, FrameType } from '../../types';\nimport { getLineShape } from '../../utils/getLineShape';\nimport React from 'react';\nimport { useEffect, useState } from 'react';\nimport type { ChartScales } from './types';\nimport { isContinuousAxis, isNumericScale } from '../utils/isNumericScale';\n\ntype PointValue = { valueOf(): number; } & string;\n\nconst GRID_FRAME_WIDTH = 1;\n\ninterface GridProps {\n scaleY: ChartScales['y'];\n scaleX: ChartScales['x'];\n width: number;\n height: number;\n axisX: AxisSettings;\n axisY: AxisSettings;\n frameType: FrameType;\n updatingKey?: string;\n}\n\nfunction getTicks(scale: ChartScales['x' | 'y'], significantLines: number[]): (string | number)[] {\n if (isNumericScale(scale)) {\n return scale.ticks().filter(t => !significantLines.includes(t));\n }\n return scale.domain();\n}\n\nexport function Grid({ scaleX, scaleY, width, height, axisX, axisY, frameType, updatingKey = '' }: GridProps) {\n const { significantLines: significantLinesX = [] } = axisX as AxisSettingsContinuous;\n const { significantLines: significantLinesY = [] } = axisY as AxisSettingsContinuous;\n\n const [ticksX, setTicksX] = useState<(string | number)[]>(() => getTicks(scaleX, significantLinesX));\n const [ticksY, setTicksY] = useState<(string | number)[]>(() => getTicks(scaleY, significantLinesY));\n\n useEffect(() => {\n const ticksX = getTicks(scaleX, significantLinesX);\n const ticksY = getTicks(scaleY, significantLinesY);\n setTicksX(ticksX);\n setTicksY(ticksY);\n }, [scaleX, scaleY, updatingKey]);\n\n return (\n <g stroke={GRID_GRAY}>\n {axisX.showGrid &&\n ticksX.map((tick) => {\n const x = scaleX(tick as PointValue);\n return (\n <line key={`x_${x}_${height}`} x1={x} x2={x} y1={0} y2={height} />\n );\n })}\n {axisY.showGrid &&\n ticksY.map(tick => {\n const y = scaleY(tick as PointValue);\n return (\n <line key={`y_${y}_${width}`} x1={0} x2={width} y1={y} y2={y} />\n );\n })}\n {isNumericScale(scaleX) && isContinuousAxis(axisX) && (\n <g strokeDasharray={getLineShape(axisX.significantLinesStyle)} stroke={BLACK}>\n {significantLinesX.map(v => {\n const x = scaleX(v);\n return (\n <line key={`significant_${x}_${height}`} x1={x} x2={x} y1={0} y2={height} />\n );\n })}\n </g>\n )}\n {isNumericScale(scaleY) && isContinuousAxis(axisY) && (\n <g strokeDasharray={getLineShape(axisY.significantLinesStyle)} stroke={BLACK}>\n {significantLinesY.map(v => {\n const y = scaleY(v);\n return (\n <line key={`significant_${y}_${width}`} x1={0} x2={width} y1={y} y2={y} />\n );\n })}\n </g>\n )}\n {frameType !== 'empty' && (\n <g strokeWidth={GRID_FRAME_WIDTH}>\n {(axisX.showGrid || frameType !== 'left') && <line stroke={frameType === 'left' ? GRID_GRAY : BLACK} x1=\"0\" x2={width} y1={height} y2={height} />}\n {(axisX.showGrid || frameType !== 'bottom') && <line stroke={frameType === 'bottom' ? GRID_GRAY : BLACK} x1=\"0\" x2=\"0\" y1=\"0\" y2={height} />}\n {(axisX.showGrid || frameType === 'full') && <line stroke={frameType === 'full' ? BLACK : GRID_GRAY} x1={width} x2={width} y1=\"0\" y2={height} />}\n {(axisY.showGrid || frameType === 'full') && <line stroke={frameType === 'full' ? BLACK : GRID_GRAY} x1=\"0\" x2={width} y1=\"0\" y2=\"0\" />}\n </g>\n )}\n </g>\n );\n}\n"],"names":["GRID_FRAME_WIDTH","getTicks","scale","significantLines","isNumericScale","t","Grid","scaleX","scaleY","width","height","axisX","axisY","frameType","updatingKey","significantLinesX","significantLinesY","ticksX","setTicksX","useState","ticksY","setTicksY","useEffect","jsxs","GRID_GRAY","tick","x","jsx","y","isContinuousAxis","getLineShape","BLACK","v"],"mappings":"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","x_google_ignoreList":[0]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dots.js","sources":["../../../../../../node_modules/@milaboratories/miplots4/src/scatterplot/dots.ts"],"sourcesContent":["import {format} from 'd3-format';\nimport type { DataFrame } from '../DataFrame';\nimport type { ColumnName, DataValue } from '../types';\nimport type { ScatterplotSettingsImpl } from './ScatterplotSettingsImpl';\nimport {formatColumnValue} from './utils/formatColumnValue';\nimport {sortDotsByGrouping} from './utils/sortDotsByGrouping';\n\nexport type Dot = {\n idx: number;\n x: number;\n y: number;\n label: DataValue | null;\n dimmed: boolean;\n};\n\nexport type GroupedDots = Record<\n string,\n {\n minX: number;\n maxX: number;\n minY: number;\n maxY: number;\n dots: Dot[];\n }\n>;\n\nexport function getDots(\n data: DataFrame,\n facetKeysCombinations: string[][],\n x: ColumnName,\n y: ColumnName,\n label: ColumnName | null,\n highlight: ColumnName | null,\n grouping: ScatterplotSettingsImpl['grouping']\n): GroupedDots {\n const result: GroupedDots = {};\n\n const labelFormatter = label?.format ? format(label.format) : undefined;\n\n for (const facetKeys of facetKeysCombinations) {\n const dots: Dot[] = [];\n let minX = Infinity;\n let minY = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n\n const templateGroupPath = facetKeys.concat(['']);\n const rows = data.getRowsByGrouping(templateGroupPath);\n\n for (let i = 0; i < rows.length; i++) {\n const rowIdx = rows[i];\n const valueX = data.getColumnValue(x.value, rowIdx) as number;\n const valueY = data.getColumnValue(y.value, rowIdx) as number;\n\n if (valueX === null && valueY === null) continue;\n\n minX = Math.min(minX, valueX);\n minY = Math.min(minY, valueY);\n maxX = Math.max(maxX, valueX);\n maxY = Math.max(maxY, valueY);\n\n dots.push({\n x: valueX,\n y: valueY,\n label: formatColumnValue(data, rowIdx, label, labelFormatter),\n dimmed: highlight ? !data.getColumnValue(highlight.value, rowIdx) : false,\n idx: rowIdx\n });\n }\n\n sortDotsByGrouping(data, dots, grouping, highlight);\n\n result[facetKeys.join('_')] = {\n minX,\n maxX,\n minY,\n maxY,\n dots,\n };\n }\n\n return result;\n}\n"],"names":["getDots","data","facetKeysCombinations","x","y","label","highlight","grouping","result","labelFormatter","format","facetKeys","dots","minX","minY","maxX","maxY","templateGroupPath","rows","i","rowIdx","valueX","valueY","formatColumnValue","sortDotsByGrouping"],"mappings":";;;AA0BO,SAASA,EACZC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACW;AACX,QAAMC,IAAsB,CAAA,GAEtBC,IAAiBJ,KAAA,QAAAA,EAAO,SAASK,EAAOL,EAAM,MAAM,IAAI;AAE9D,aAAWM,KAAaT,GAAuB;AAC3C,UAAMU,IAAc,CAAA;AACpB,QAAIC,IAAO,OACPC,IAAO,OACPC,IAAO,QACPC,IAAO;AAEX,UAAMC,IAAoBN,EAAU,OAAO,CAAC,EAAE,CAAC,GACzCO,IAAOjB,EAAK,kBAAkBgB,CAAiB;AAErD,aAASE,IAAI,GAAGA,IAAID,EAAK,QAAQC,KAAK;AAClC,YAAMC,IAASF,EAAKC,CAAC,GACfE,IAASpB,EAAK,eAAeE,EAAE,OAAOiB,CAAM,GAC5CE,IAASrB,EAAK,eAAeG,EAAE,OAAOgB,CAAM;AAE9CC,MAAAA,MAAW,QAAQC,MAAW,SAElCT,IAAO,KAAK,IAAIA,GAAMQ,CAAM,GAC5BP,IAAO,KAAK,IAAIA,GAAMQ,CAAM,GAC5BP,IAAO,KAAK,IAAIA,GAAMM,CAAM,GAC5BL,IAAO,KAAK,IAAIA,GAAMM,CAAM,GAE5BV,EAAK,KAAK;AAAA,QACN,GAAGS;AAAAA,QACH,GAAGC;AAAAA,QACH,OAAOC,EAAkBtB,GAAMmB,GAAQf,GAAOI,CAAc;AAAA,QAC5D,QAAQH,IAAY,CAACL,EAAK,eAAeK,EAAU,OAAOc,CAAM,IAAI;AAAA,QACpE,KAAKA;AAAAA,MAAA,CACR;AAAA,IACL;AAEAI,IAAAA,EAAmBvB,GAAMW,GAAML,GAAUD,CAAS,GAElDE,EAAOG,EAAU,KAAK,GAAG,CAAC,IAAI;AAAA,MAC1B,MAAAE;AAAAA,MACA,MAAAE;AAAAA,MACA,MAAAD;AAAAA,MACA,MAAAE;AAAAA,MACA,MAAAJ;AAAAA,IAAA;AAAA,EAER;AAEA,SAAOJ;AACX;","x_google_ignoreList":[0]}
|
|
1
|
+
{"version":3,"file":"dots.js","sources":["../../../../../../node_modules/@milaboratories/miplots4/src/scatterplot/dots.ts"],"sourcesContent":["import {format} from 'd3-format';\nimport type { DataFrame } from '../DataFrame';\nimport type { ColumnName, DataValue } from '../types';\nimport type { ScatterplotSettingsImpl } from './ScatterplotSettingsImpl';\nimport {formatColumnValue} from './utils/formatColumnValue';\nimport {sortDotsByGrouping} from './utils/sortDotsByGrouping';\n\nexport type Dot = {\n idx: number;\n x: string | number;\n y: string | number;\n label: DataValue | null;\n dimmed: boolean;\n};\n\nexport type GroupedDots = Record<\n string,\n {\n minX: number;\n maxX: number;\n minY: number;\n maxY: number;\n dots: Dot[];\n }\n>;\n\nexport function getDots(\n data: DataFrame,\n facetKeysCombinations: string[][],\n x: ColumnName,\n y: ColumnName,\n label: ColumnName | null,\n highlight: ColumnName | null,\n grouping: ScatterplotSettingsImpl['grouping']\n): GroupedDots {\n const result: GroupedDots = {};\n\n const labelFormatter = label?.format ? format(label.format) : undefined;\n\n for (const facetKeys of facetKeysCombinations) {\n const dots: Dot[] = [];\n let minX = Infinity;\n let minY = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n\n const templateGroupPath = facetKeys.concat(['']);\n const rows = data.getRowsByGrouping(templateGroupPath);\n\n for (let i = 0; i < rows.length; i++) {\n const rowIdx = rows[i];\n const valueX = data.getColumnValue(x.value, rowIdx) as number;\n const valueY = data.getColumnValue(y.value, rowIdx) as number;\n\n if (valueX === null && valueY === null) continue;\n\n minX = Math.min(minX, valueX);\n minY = Math.min(minY, valueY);\n maxX = Math.max(maxX, valueX);\n maxY = Math.max(maxY, valueY);\n\n dots.push({\n x: valueX,\n y: valueY,\n label: formatColumnValue(data, rowIdx, label, labelFormatter),\n dimmed: highlight ? !data.getColumnValue(highlight.value, rowIdx) : false,\n idx: rowIdx\n });\n }\n\n sortDotsByGrouping(data, dots, grouping, highlight);\n\n result[facetKeys.join('_')] = {\n minX,\n maxX,\n minY,\n maxY,\n dots,\n };\n }\n\n return result;\n}\n"],"names":["getDots","data","facetKeysCombinations","x","y","label","highlight","grouping","result","labelFormatter","format","facetKeys","dots","minX","minY","maxX","maxY","templateGroupPath","rows","i","rowIdx","valueX","valueY","formatColumnValue","sortDotsByGrouping"],"mappings":";;;AA0BO,SAASA,EACZC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACW;AACX,QAAMC,IAAsB,CAAA,GAEtBC,IAAiBJ,KAAA,QAAAA,EAAO,SAASK,EAAOL,EAAM,MAAM,IAAI;AAE9D,aAAWM,KAAaT,GAAuB;AAC3C,UAAMU,IAAc,CAAA;AACpB,QAAIC,IAAO,OACPC,IAAO,OACPC,IAAO,QACPC,IAAO;AAEX,UAAMC,IAAoBN,EAAU,OAAO,CAAC,EAAE,CAAC,GACzCO,IAAOjB,EAAK,kBAAkBgB,CAAiB;AAErD,aAASE,IAAI,GAAGA,IAAID,EAAK,QAAQC,KAAK;AAClC,YAAMC,IAASF,EAAKC,CAAC,GACfE,IAASpB,EAAK,eAAeE,EAAE,OAAOiB,CAAM,GAC5CE,IAASrB,EAAK,eAAeG,EAAE,OAAOgB,CAAM;AAE9CC,MAAAA,MAAW,QAAQC,MAAW,SAElCT,IAAO,KAAK,IAAIA,GAAMQ,CAAM,GAC5BP,IAAO,KAAK,IAAIA,GAAMQ,CAAM,GAC5BP,IAAO,KAAK,IAAIA,GAAMM,CAAM,GAC5BL,IAAO,KAAK,IAAIA,GAAMM,CAAM,GAE5BV,EAAK,KAAK;AAAA,QACN,GAAGS;AAAAA,QACH,GAAGC;AAAAA,QACH,OAAOC,EAAkBtB,GAAMmB,GAAQf,GAAOI,CAAc;AAAA,QAC5D,QAAQH,IAAY,CAACL,EAAK,eAAeK,EAAU,OAAOc,CAAM,IAAI;AAAA,QACpE,KAAKA;AAAAA,MAAA,CACR;AAAA,IACL;AAEAI,IAAAA,EAAmBvB,GAAMW,GAAML,GAAUD,CAAS,GAElDE,EAAOG,EAAU,KAAK,GAAG,CAAC,IAAI;AAAA,MAC1B,MAAAE;AAAAA,MACA,MAAAE;AAAAA,MACA,MAAAD;AAAAA,MACA,MAAAE;AAAAA,MACA,MAAAJ;AAAAA,IAAA;AAAA,EAER;AAEA,SAAOJ;AACX;","x_google_ignoreList":[0]}
|
|
@@ -1,30 +1,41 @@
|
|
|
1
|
-
import { exhaustive as
|
|
2
|
-
function v(
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
import { exhaustive as g } from "../utils/index.js";
|
|
2
|
+
function v(n, a, i) {
|
|
3
|
+
if (a.scale !== "discrete")
|
|
4
|
+
n.sort((t, e) => t.x - e.x);
|
|
5
|
+
else {
|
|
6
|
+
const t = i.keys.reduce((e, o, r) => (e[o] = i.keys.length - r, e), {});
|
|
7
|
+
n.sort((e, o) => {
|
|
8
|
+
const r = t[e.x], u = t[o.x];
|
|
9
|
+
return r !== u ? r - u : 0;
|
|
10
|
+
}), n.sort();
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
function k(n, a, i, t, e, o, r, u) {
|
|
14
|
+
return i.reduce((l, f) => {
|
|
15
|
+
const y = t[f].dots;
|
|
16
|
+
return l[f] = a.map((s) => {
|
|
17
|
+
if (s.type === "curve")
|
|
7
18
|
return {
|
|
8
19
|
type: "curve",
|
|
9
|
-
info:
|
|
10
|
-
geoms:
|
|
11
|
-
const
|
|
12
|
-
(
|
|
20
|
+
info: s,
|
|
21
|
+
geoms: e.map((c) => {
|
|
22
|
+
const d = y.filter(
|
|
23
|
+
(p) => o.every((m, x) => String(n.getColumnValue(m.value, p.idx)) === c[x])
|
|
13
24
|
);
|
|
14
|
-
return
|
|
15
|
-
}).filter((
|
|
25
|
+
return v(d, r, u), { dots: d };
|
|
26
|
+
}).filter((c) => c.dots.length > 0)
|
|
16
27
|
};
|
|
17
|
-
if (
|
|
28
|
+
if (s.type === "dots")
|
|
18
29
|
return {
|
|
19
30
|
type: "dots",
|
|
20
|
-
info:
|
|
21
|
-
geoms:
|
|
31
|
+
info: s,
|
|
32
|
+
geoms: y
|
|
22
33
|
};
|
|
23
|
-
|
|
24
|
-
}),
|
|
34
|
+
g(s, "Unknown scatterplot layer type");
|
|
35
|
+
}), l;
|
|
25
36
|
}, {});
|
|
26
37
|
}
|
|
27
38
|
export {
|
|
28
|
-
|
|
39
|
+
k as getLayersData
|
|
29
40
|
};
|
|
30
41
|
//# sourceMappingURL=getLayersData.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getLayersData.js","sources":["../../../../../../node_modules/@milaboratories/miplots4/src/scatterplot/getLayersData.ts"],"sourcesContent":["import type { DataFrame } from '../DataFrame';\nimport type { ColumnName, ScatterplotLayer } from '../types';\nimport { exhaustive } from '../utils';\nimport type { Dot, GroupedDots } from './dots';\nimport type { CurveLayer, DotsLayer } from './ScatterplotSettingsImpl';\n\nexport type DotsLayerData = {\n type: 'dots',\n info: DotsLayer,\n geoms: Dot[]\n}\n\nexport type CurveData = {\n dots: Dot[],\n}\nexport type CurveLayerData = {\n type: 'curve',\n info: CurveLayer,\n geoms: CurveData[]\n}\n\nexport type ScatterplotLayerData = DotsLayerData | CurveLayerData;\n\nexport function getLayersData(\n dataFrame: DataFrame,\n layers: ScatterplotLayer[],\n facetKeys: string[],\n dotsByFacets: GroupedDots,\n categoryGroupingCombinations: string[][],\n grouping: ColumnName[]
|
|
1
|
+
{"version":3,"file":"getLayersData.js","sources":["../../../../../../node_modules/@milaboratories/miplots4/src/scatterplot/getLayersData.ts"],"sourcesContent":["import type { DataFrame } from '../DataFrame';\nimport type { ColumnName, ScatterplotLayer } from '../types';\nimport { exhaustive } from '../utils';\nimport type { DiscreteAxisData } from './components/types';\nimport type { Dot, GroupedDots } from './dots';\nimport type { CurveLayer, DotsLayer, ScatterplotSettingsImpl } from './ScatterplotSettingsImpl';\n\nexport type DotsLayerData = {\n type: 'dots',\n info: DotsLayer,\n geoms: Dot[]\n}\n\nexport type CurveData = {\n dots: Dot[],\n}\nexport type CurveLayerData = {\n type: 'curve',\n info: CurveLayer,\n geoms: CurveData[]\n}\n\nexport type ScatterplotLayerData = DotsLayerData | CurveLayerData;\n\nfunction sortDotsForCurve(dots:Dot[], axisX: ScatterplotSettingsImpl['chartSettings']['xAxis'], discreteAxisDataX: DiscreteAxisData) {\n if (axisX.scale !== 'discrete') {\n dots.sort((d1, d2) => (d1.x as number) - (d2.x as number));\n } else {\n const weightsByColumnByOrder = discreteAxisDataX.keys.reduce((res, key, idx) => {\n res[key] = discreteAxisDataX.keys.length - idx;\n return res;\n }, {} as Record<string, number>);\n\n dots.sort((d1, d2) => {\n const aWeight = weightsByColumnByOrder[d1.x];\n const bWeight = weightsByColumnByOrder[d2.x];\n if (aWeight !== bWeight) {\n return aWeight - bWeight;\n }\n return 0;\n });\n dots.sort();\n }\n}\nexport function getLayersData(\n dataFrame: DataFrame,\n layers: ScatterplotLayer[],\n facetKeys: string[],\n dotsByFacets: GroupedDots,\n categoryGroupingCombinations: string[][],\n grouping: ColumnName[],\n axisX: ScatterplotSettingsImpl['chartSettings']['xAxis'],\n discreteAxisDataX: DiscreteAxisData,\n): Record<string, ScatterplotLayerData[]> {\n return facetKeys.reduce((res:Record<string, ScatterplotLayerData[]>, key) => {\n const facetDots = dotsByFacets[key].dots;\n res[key] = layers.map(layer => {\n if (layer.type === 'curve') {\n return {\n type: 'curve',\n info: layer,\n geoms: categoryGroupingCombinations.map(values => {\n const dots = facetDots.filter(dot =>\n grouping.every((column, idx) => String(dataFrame.getColumnValue(column.value, dot.idx)) === values[idx])\n );\n sortDotsForCurve(dots, axisX, discreteAxisDataX);\n return {dots};\n }).filter(item => item.dots.length > 0)\n } as CurveLayerData;\n }\n if (layer.type === 'dots') {\n return {\n type: 'dots',\n info: layer,\n geoms: facetDots,\n } as DotsLayerData;\n }\n exhaustive(layer, 'Unknown scatterplot layer type');\n });\n return res;\n }, {});\n}\n"],"names":["sortDotsForCurve","dots","axisX","discreteAxisDataX","d1","d2","weightsByColumnByOrder","res","key","idx","aWeight","bWeight","getLayersData","dataFrame","layers","facetKeys","dotsByFacets","categoryGroupingCombinations","grouping","facetDots","layer","values","column","dot","item","exhaustive"],"mappings":";AAwBA,SAASA,EAAiBC,GAAYC,GAA0DC,GAAqC;AACjI,MAAID,EAAM,UAAU;AAChBD,IAAAA,EAAK,KAAK,CAACG,GAAIC,MAAQD,EAAG,IAAgBC,EAAG,CAAY;AAAA,OACtD;AACH,UAAMC,IAAyBH,EAAkB,KAAK,OAAO,CAACI,GAAKC,GAAKC,OACpEF,EAAIC,CAAG,IAAIL,EAAkB,KAAK,SAASM,GACpCF,IACR,EAA4B;AAE/BN,IAAAA,EAAK,KAAK,CAACG,GAAIC,MAAO;AAClB,YAAMK,IAAUJ,EAAuBF,EAAG,CAAC,GACrCO,IAAUL,EAAuBD,EAAG,CAAC;AAC3C,aAAIK,MAAYC,IACLD,IAAUC,IAEd;AAAA,IACX,CAAC,GACDV,EAAK,KAAA;AAAA,EACT;AACJ;AACO,SAASW,EACZC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAhB,GACAC,GACsC;AACtC,SAAOY,EAAU,OAAO,CAACR,GAA4CC,MAAQ;AACzE,UAAMW,IAAYH,EAAaR,CAAG,EAAE;AACpC,WAAAD,EAAIC,CAAG,IAAIM,EAAO,IAAI,CAAAM,MAAS;AAC3B,UAAIA,EAAM,SAAS;AACf,eAAO;AAAA,UACH,MAAM;AAAA,UACN,MAAMA;AAAAA,UACN,OAAOH,EAA6B,IAAI,CAAAI,MAAU;AAC9C,kBAAMpB,IAAOkB,EAAU;AAAA,cAAO,OAC1BD,EAAS,MAAM,CAACI,GAAQb,MAAQ,OAAOI,EAAU,eAAeS,EAAO,OAAOC,EAAI,GAAG,CAAC,MAAMF,EAAOZ,CAAG,CAAC;AAAA,YAAA;AAE3G,mBAAAT,EAAiBC,GAAMC,GAAOC,CAAiB,GACxC,EAAC,MAAAF,EAAAA;AAAAA,UACZ,CAAC,EAAE,OAAO,OAAQuB,EAAK,KAAK,SAAS,CAAC;AAAA,QAAA;AAG9C,UAAIJ,EAAM,SAAS;AACf,eAAO;AAAA,UACH,MAAM;AAAA,UACN,MAAMA;AAAAA,UACN,OAAOD;AAAAA,QAAA;AAGfM,MAAAA,EAAWL,GAAO,gCAAgC;AAAA,IACtD,CAAC,GACMb;AAAAA,EACX,GAAG,CAAA,CAAE;AACT;","x_google_ignoreList":[0]}
|
|
@@ -1,21 +1,31 @@
|
|
|
1
1
|
import { renderToString as B } from "../node_modules/react-dom/server.browser.js";
|
|
2
|
-
import { AbstractChart as
|
|
3
|
-
import { arraysAreDifferent as
|
|
4
|
-
import { getKeysCombinations as
|
|
5
|
-
import
|
|
6
|
-
import { getDots as
|
|
7
|
-
import { getLayersData as
|
|
8
|
-
import { getRegressionData as
|
|
9
|
-
import { ScatterplotSettingsImpl as
|
|
10
|
-
import { createLegendInfo as
|
|
11
|
-
var
|
|
12
|
-
function
|
|
2
|
+
import { AbstractChart as L } from "../AbstractChart.js";
|
|
3
|
+
import { arraysAreDifferent as y } from "../utils/arraysAreDifferent.js";
|
|
4
|
+
import { getKeysCombinations as C } from "../utils/getKeysCombination.js";
|
|
5
|
+
import N from "./ChartRenderer.js";
|
|
6
|
+
import { getDots as j } from "./dots.js";
|
|
7
|
+
import { getLayersData as K } from "./getLayersData.js";
|
|
8
|
+
import { getRegressionData as $ } from "./linearRegression.js";
|
|
9
|
+
import { ScatterplotSettingsImpl as S } from "./ScatterplotSettingsImpl.js";
|
|
10
|
+
import { createLegendInfo as O, addPalettesToAesMapping as T } from "./utils/createLegendInfo.js";
|
|
11
|
+
var F = Object.defineProperty, I = (u, t, e) => t in u ? F(u, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : u[t] = e, f = (u, t, e) => I(u, typeof t != "symbol" ? t + "" : t, e);
|
|
12
|
+
function H(u) {
|
|
13
13
|
return typeof u == "object" && "type" in u && u.type === "grouping";
|
|
14
14
|
}
|
|
15
|
-
|
|
15
|
+
function x(u, t, e) {
|
|
16
|
+
if (t.scale === "discrete") {
|
|
17
|
+
const a = t.keys ? t.keys : u.getColumnCategories(e.value);
|
|
18
|
+
return { keys: a, labels: a.reduce((s, l) => {
|
|
19
|
+
const o = (t.labels ?? {})[l] ?? (e.valueLabels ? u.getColumnValue(e.valueLabels, u.getColumnCategoryRowIndex(e.value, l)) : l);
|
|
20
|
+
return s[l] = String(o), s;
|
|
21
|
+
}, {}) };
|
|
22
|
+
}
|
|
23
|
+
return { keys: [], labels: {} };
|
|
24
|
+
}
|
|
25
|
+
class Q extends L {
|
|
16
26
|
constructor(t, e, a) {
|
|
17
|
-
super(t, e),
|
|
18
|
-
}),
|
|
27
|
+
super(t, e), f(this, "settings"), f(this, "chartRenderer"), f(this, "onTooltipHintSwitch", () => {
|
|
28
|
+
}), f(this, "calculatedData", null), this.chartRenderer = new N(), this.settings = new S(e), a && (this.onTooltipHintSwitch = a.onTooltipHintSwitch);
|
|
19
29
|
}
|
|
20
30
|
mount(t) {
|
|
21
31
|
try {
|
|
@@ -29,8 +39,8 @@ class q extends R {
|
|
|
29
39
|
}
|
|
30
40
|
updateSettingsAndData(t, e) {
|
|
31
41
|
try {
|
|
32
|
-
const a = this.settings,
|
|
33
|
-
this.settings = new
|
|
42
|
+
const a = this.settings, s = this.data;
|
|
43
|
+
this.settings = new S(e), this.data = t, this._needUpdateCalculatedDataBySettings(a, this.settings) || this._needUpdateCalculatedDataByData(s, this.data) ? this._updateData() : this._updateAesInData(), this._updateChart(), this.hasError = !1;
|
|
34
44
|
} catch (a) {
|
|
35
45
|
this.hasError = !0, console.error(a), a instanceof Error && (this.chartRenderer.renderError(a.message), console.error(a));
|
|
36
46
|
}
|
|
@@ -42,71 +52,73 @@ class q extends R {
|
|
|
42
52
|
return this._updateChart(), B(this.chartRenderer.component);
|
|
43
53
|
}
|
|
44
54
|
_needUpdateCalculatedDataBySettings(t, e) {
|
|
45
|
-
var a,
|
|
46
|
-
return t.facetBy.some((r,
|
|
47
|
-
var
|
|
48
|
-
return r.value !== ((
|
|
49
|
-
}) || t.grouping.length !== e.grouping.length ||
|
|
55
|
+
var a, s, l, o;
|
|
56
|
+
return t.facetBy.some((r, i) => {
|
|
57
|
+
var h;
|
|
58
|
+
return r.value !== ((h = e.facetBy[i]) == null ? void 0 : h.value);
|
|
59
|
+
}) || t.grouping.length !== e.grouping.length || y(
|
|
50
60
|
t.grouping.map((r) => r.columnName.value),
|
|
51
61
|
e.grouping.map((r) => r.columnName.value)
|
|
52
|
-
) || t.grouping.some((r,
|
|
53
|
-
var
|
|
54
|
-
return
|
|
55
|
-
}) || (((a = t.label) == null ? void 0 : a.value) || ((
|
|
62
|
+
) || t.grouping.some((r, i) => {
|
|
63
|
+
var h;
|
|
64
|
+
return y(r.order, (h = e.grouping) == null ? void 0 : h[i].order);
|
|
65
|
+
}) || y(t.chartSettings.xAxis.keys, e.chartSettings.xAxis.keys) || y(t.chartSettings.yAxis.keys, e.chartSettings.yAxis.keys) || (((a = t.label) == null ? void 0 : a.value) || ((s = e.label) == null ? void 0 : s.value)) && ((l = t.label) == null ? void 0 : l.value) !== ((o = e.label) == null ? void 0 : o.value) || t.layers.length !== e.layers.length || t.layers.some((r, i) => r.type !== e.layers[i].type) || !!t.trend != !!e.trend;
|
|
56
66
|
}
|
|
57
67
|
_needUpdateCalculatedDataByData(t, e) {
|
|
58
|
-
const a = Object.keys(t.data),
|
|
59
|
-
return t.id !== e.id || a.length !==
|
|
68
|
+
const a = Object.keys(t.data), s = Object.keys(e.data);
|
|
69
|
+
return t.id !== e.id || a.length !== s.length || a.some((l) => {
|
|
60
70
|
var o;
|
|
61
|
-
return t.data[
|
|
71
|
+
return t.data[l].length !== ((o = e.data[l]) == null ? void 0 : o.length);
|
|
62
72
|
});
|
|
63
73
|
}
|
|
64
74
|
_updateData() {
|
|
65
|
-
const { x: t, y: e, facetBy: a, grouping:
|
|
66
|
-
this.data.setGrouping([...
|
|
67
|
-
const
|
|
68
|
-
x: this.data.getColumn(t.value).every((
|
|
69
|
-
y: this.data.getColumn(e.value).every((
|
|
70
|
-
},
|
|
75
|
+
const { x: t, y: e, facetBy: a, grouping: s, trend: l, layers: o, label: r, highlight: i, chartSettings: h } = this.settings, d = a.map((n) => this.data.getColumnCategories(n.value)).filter((n) => n.length > 0), g = s.map(({ columnName: n }) => this.data.getColumnCategories(n.value)).filter((n) => n.length > 0), p = d.length ? C(d) : [["null"]], c = g.length ? C(g) : [["null"]], A = a.map((n) => n.value) ?? null;
|
|
76
|
+
this.data.setGrouping([...A]);
|
|
77
|
+
const E = {
|
|
78
|
+
x: this.data.getColumn(t.value).every((n) => n === null || !(Number(n) < 0)),
|
|
79
|
+
y: this.data.getColumn(e.value).every((n) => n === null || !(Number(n) < 0))
|
|
80
|
+
}, D = s.map((n) => n.columnName), m = j(this.data, p, t, e, r, i, s), v = Object.keys(m), k = $(this.data, m, v, c, D, l), b = x(this.data, h.xAxis, t), _ = x(this.data, h.yAxis, e), w = O(this.data, s, o), R = K(this.data, o, v, m, c, D, h.xAxis, b);
|
|
71
81
|
this.calculatedData = {
|
|
72
|
-
onlyPositive:
|
|
82
|
+
onlyPositive: E,
|
|
73
83
|
dotsByFacets: m,
|
|
74
|
-
facetKeys:
|
|
75
|
-
facetKeysCombinations:
|
|
76
|
-
trendsData:
|
|
77
|
-
legendLabels:
|
|
78
|
-
layersData:
|
|
84
|
+
facetKeys: v,
|
|
85
|
+
facetKeysCombinations: p,
|
|
86
|
+
trendsData: k,
|
|
87
|
+
legendLabels: w,
|
|
88
|
+
layersData: R,
|
|
89
|
+
discreteAxisDataX: b,
|
|
90
|
+
discreteAxisDataY: _
|
|
79
91
|
};
|
|
80
92
|
}
|
|
81
93
|
_updateAesInData() {
|
|
82
94
|
const t = this.calculatedData;
|
|
83
95
|
if (!t)
|
|
84
96
|
return;
|
|
85
|
-
const { grouping: e, trend: a, layers:
|
|
86
|
-
|
|
87
|
-
for (let
|
|
88
|
-
t.layersData[r][
|
|
89
|
-
}), e.forEach(({ columnName: r, inheritedAes:
|
|
90
|
-
const
|
|
91
|
-
|
|
92
|
-
g.aes && Object.entries(g.aes).forEach(([p,
|
|
93
|
-
|
|
97
|
+
const { grouping: e, trend: a, layers: s } = this.settings, { facetKeys: l, trendsData: o } = t;
|
|
98
|
+
l.forEach((r) => {
|
|
99
|
+
for (let i = 0; i < s.length; i++)
|
|
100
|
+
t.layersData[r][i].info = s[i];
|
|
101
|
+
}), e.forEach(({ columnName: r, inheritedAes: i }) => {
|
|
102
|
+
const h = /* @__PURE__ */ new Set(), d = {};
|
|
103
|
+
s.forEach((g) => {
|
|
104
|
+
g.aes && Object.entries(g.aes).forEach(([p, c]) => {
|
|
105
|
+
H(c) && c.value === r.value && (h.add(p), c.palette && (d[p] = c.palette));
|
|
94
106
|
});
|
|
95
|
-
}), t.legendLabels[r.value].usedAes = [...
|
|
107
|
+
}), t.legendLabels[r.value].usedAes = [...h], t.legendLabels[r.value].aesMap = T(
|
|
96
108
|
r,
|
|
97
109
|
d,
|
|
98
|
-
|
|
110
|
+
i
|
|
99
111
|
);
|
|
100
112
|
}), o && a && Object.keys(o).forEach((r) => {
|
|
101
|
-
o[r].forEach((
|
|
102
|
-
|
|
113
|
+
o[r].forEach((i) => {
|
|
114
|
+
i.color = a.color, i.bounded = a.bounded;
|
|
103
115
|
});
|
|
104
116
|
});
|
|
105
117
|
}
|
|
106
118
|
_updateChart() {
|
|
107
119
|
if (!this.calculatedData)
|
|
108
120
|
return;
|
|
109
|
-
const { id: t, chartSettings: e, facetSettings: a, grouping:
|
|
121
|
+
const { id: t, chartSettings: e, facetSettings: a, grouping: s, keyColumn: l, layers: o, trend: r } = this.settings;
|
|
110
122
|
this.chartRenderer.render(
|
|
111
123
|
this.data,
|
|
112
124
|
t,
|
|
@@ -117,18 +129,20 @@ class q extends R {
|
|
|
117
129
|
//for titles, if facet by more than 1 column
|
|
118
130
|
this.calculatedData.dotsByFacets,
|
|
119
131
|
this.calculatedData.trendsData,
|
|
120
|
-
|
|
132
|
+
l,
|
|
121
133
|
this.calculatedData.onlyPositive,
|
|
122
134
|
this.calculatedData.legendLabels,
|
|
123
135
|
this.calculatedData.layersData,
|
|
124
|
-
|
|
136
|
+
s.map((i) => i.columnName),
|
|
125
137
|
o,
|
|
126
138
|
r,
|
|
139
|
+
this.calculatedData.discreteAxisDataX,
|
|
140
|
+
this.calculatedData.discreteAxisDataY,
|
|
127
141
|
this.onTooltipHintSwitch
|
|
128
142
|
);
|
|
129
143
|
}
|
|
130
144
|
}
|
|
131
145
|
export {
|
|
132
|
-
|
|
146
|
+
Q as ChartScatterplot
|
|
133
147
|
};
|
|
134
148
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../../../node_modules/@milaboratories/miplots4/src/scatterplot/index.ts"],"sourcesContent":["import { renderToString } from 'react-dom/server';\nimport { AbstractChart } from '../AbstractChart';\nimport type { DataFrame } from '../DataFrame';\nimport type {\n AesItem,\n ContinuousAesFromColumn,\n InheritAesScatterplot,\n ScatterplotEventHandlers,\n ScatterplotLegendInfo,\n ScatterplotSettings,\n} from '../types';\nimport { arraysAreDifferent } from '../utils/arraysAreDifferent';\nimport { getKeysCombinations } from '../utils/getKeysCombination';\nimport ChartRenderer from './ChartRenderer';\nimport type { GroupedDots } from './dots';\nimport { getDots } from './dots';\nimport type { ScatterplotLayerData } from './getLayersData';\nimport { getLayersData } from './getLayersData';\nimport type { TrendsData } from './linearRegression';\nimport { getRegressionData } from './linearRegression';\nimport { ScatterplotSettingsImpl } from './ScatterplotSettingsImpl';\nimport { addPalettesToAesMapping, createLegendInfo } from './utils/createLegendInfo';\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\nexport class ChartScatterplot extends AbstractChart {\n settings: ScatterplotSettingsImpl;\n chartRenderer: ChartRenderer;\n\n onTooltipHintSwitch: (v:boolean) => void = () => undefined;\n calculatedData: {\n onlyPositive: {x: boolean; y: boolean};\n dotsByFacets: GroupedDots;\n facetKeys: string[];\n facetKeysCombinations: string[][];\n trendsData: TrendsData | null;\n legendLabels: ScatterplotLegendInfo;\n layersData: Record<string, ScatterplotLayerData[]>;\n } | null = null;\n\n constructor(data: DataFrame, settings: ScatterplotSettings, eventHandlers?:ScatterplotEventHandlers) {\n super(data, settings);\n\n this.chartRenderer = new ChartRenderer();\n this.settings = new ScatterplotSettingsImpl(settings);\n if (eventHandlers) {\n this.onTooltipHintSwitch = eventHandlers.onTooltipHintSwitch;\n }\n }\n\n mount(node: HTMLElement) {\n try {\n this.chartRenderer.init(node);\n this._updateData();\n this._updateChart();\n this.hasError = false;\n } catch (err) {\n this.hasError = true;\n console.error(err);\n if (err instanceof Error) {\n this.chartRenderer.renderError(err.message as string);\n console.error(err);\n }\n }\n }\n\n unmount() {\n this.chartRenderer.clear();\n }\n\n updateSettingsAndData(data: DataFrame, settings: ScatterplotSettings) {\n try {\n const previousSettings = this.settings;\n const previousData = this.data;\n this.settings = new ScatterplotSettingsImpl(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 this._updateChart();\n this.hasError = false;\n } catch (err) {\n this.hasError = true;\n console.error(err);\n if (err instanceof Error) {\n this.chartRenderer.renderError(err.message as string);\n console.error(err);\n }\n }\n }\n\n updateChartState(_field: string, _value: unknown) {\n console.warn('no chart state for scatterplot');\n }\n\n export(): string {\n this._updateChart();\n return renderToString(this.chartRenderer.component);\n }\n\n _needUpdateCalculatedDataBySettings(prevSettings: ScatterplotSettingsImpl, settings: ScatterplotSettingsImpl) {\n return (\n prevSettings.facetBy.some((el, idx) => el.value !== settings.facetBy[idx]?.value) ||\n prevSettings.grouping.length !== settings.grouping.length ||\n arraysAreDifferent(\n prevSettings.grouping.map(v => v.columnName.value),\n settings.grouping.map(v => v.columnName.value),\n ) ||\n prevSettings.grouping.some((v, idx) => arraysAreDifferent(v.order, settings.grouping?.[idx].order)) ||\n (prevSettings.label?.value || settings.label?.value) && prevSettings.label?.value !== settings.label?.value ||\n prevSettings.layers.length !== settings.layers.length ||\n prevSettings.layers.some((l, idx) => l.type !== settings.layers[idx].type) ||\n Boolean(prevSettings.trend) !== Boolean(settings.trend)\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, facetBy, grouping, trend, layers, label, highlight} = this.settings;\n const facetKeysLists = facetBy.map(column => this.data.getColumnCategories(column.value)).filter(v => v.length > 0);\n const categoryGroupingKeysLists = grouping.map(({columnName}) => this.data.getColumnCategories(columnName.value)).filter(v => v.length > 0);\n\n const facetKeysCombinations = facetKeysLists.length\n ? getKeysCombinations(facetKeysLists)\n : [['null']];\n const categoryGroupingCombinations = categoryGroupingKeysLists.length\n ? getKeysCombinations(categoryGroupingKeysLists)\n : [['null']];\n\n const facetGroupingValues = facetBy.map(column => column.value) ?? null;\n\n this.data.setGrouping([...facetGroupingValues]);\n const onlyPositive = {\n x: this.data.getColumn(x.value).every(v => {\n return v === null || !(Number(v) < 0);\n }),\n y: this.data.getColumn(y.value).every(v => {\n return v === null || !(Number(v) < 0);\n }),\n };\n\n const groupingColumns = grouping.map(v => v.columnName);\n\n const dotsByFacets = getDots(this.data, facetKeysCombinations, x, y, label, highlight, grouping);\n const facetKeys = Object.keys(dotsByFacets);\n const trendsData = getRegressionData(this.data, dotsByFacets, facetKeys, categoryGroupingCombinations, groupingColumns, trend);\n\n const legendLabels = createLegendInfo(this.data, grouping, layers);\n const layersData = getLayersData(this.data, layers, facetKeys, dotsByFacets, categoryGroupingCombinations, groupingColumns);\n\n this.calculatedData = {\n onlyPositive,\n dotsByFacets,\n facetKeys,\n facetKeysCombinations,\n trendsData,\n legendLabels,\n layersData,\n };\n }\n\n _updateAesInData() {\n const calculated = this.calculatedData;\n if (!calculated) {\n return;\n }\n const {grouping, trend, layers} = this.settings;\n const {facetKeys, trendsData} = calculated;\n\n facetKeys.forEach(facetKey => {\n for (let i = 0; i < layers.length; i++) {\n calculated.layersData[facetKey][i].info = layers[i];\n }\n });\n\n grouping.forEach(({columnName, inheritedAes}) => {\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 === columnName.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[columnName.value].usedAes = [...usedAes];\n calculated.legendLabels[columnName.value].aesMap = addPalettesToAesMapping(\n columnName,\n usedAesFromPalettes,\n inheritedAes\n );\n });\n if (trendsData && trend) {\n Object.keys(trendsData).forEach((key) => {\n trendsData[key].forEach(trendInfo => {\n trendInfo.color = trend.color;\n trendInfo.bounded = trend.bounded;\n });\n });\n }\n }\n\n _updateChart() {\n if (!this.calculatedData) {\n return;\n }\n const {id, chartSettings, facetSettings, grouping, keyColumn, layers, trend} = this.settings;\n this.chartRenderer.render(\n this.data,\n id,\n chartSettings,\n facetSettings,\n this.calculatedData.facetKeys,\n this.calculatedData.facetKeysCombinations, //for titles, if facet by more than 1 column\n this.calculatedData.dotsByFacets,\n this.calculatedData.trendsData,\n keyColumn,\n this.calculatedData.onlyPositive,\n this.calculatedData.legendLabels,\n this.calculatedData.layersData,\n grouping.map(v => v.columnName),\n layers,\n trend,\n this.onTooltipHintSwitch\n );\n }\n}\n"],"names":["isInheritMapping","value","ChartScatterplot","AbstractChart","data","settings","eventHandlers","__publicField","ChartRenderer","ScatterplotSettingsImpl","node","err","previousSettings","previousData","_field","_value","renderToString","prevSettings","el","idx","_a","arraysAreDifferent","v","_b","_c","_d","l","prevData","prevKeys","keys","key","x","y","facetBy","grouping","trend","layers","label","highlight","facetKeysLists","column","categoryGroupingKeysLists","columnName","facetKeysCombinations","getKeysCombinations","categoryGroupingCombinations","facetGroupingValues","onlyPositive","groupingColumns","dotsByFacets","getDots","facetKeys","trendsData","getRegressionData","legendLabels","createLegendInfo","layersData","getLayersData","calculated","facetKey","i","inheritedAes","usedAes","usedAesFromPalettes","layer","addPalettesToAesMapping","trendInfo","id","chartSettings","facetSettings","keyColumn"],"mappings":";;;;;;;;;;;AAuBA,SAASA,EAA8CC,GAA6F;AAChJ,SAAO,OAAOA,KAAU,YAAY,UAAUA,KAASA,EAAM,SAAS;AAC1E;AAEO,MAAMC,UAAyBC,EAAc;AAAA,EAehD,YAAYC,GAAiBC,GAA+BC,GAAyC;AACjG,UAAMF,GAAMC,CAAQ,GAfxBE,EAAA,MAAA,UAAA,GACAA,EAAA,MAAA,eAAA,GAEAA,EAAA,6BAA2C,MAAA;AAAA,IAAA,CAAA,GAC3CA,EAAA,MAAA,kBAQW,IAAA,GAKP,KAAK,gBAAgB,IAAIC,EAAAA,GACzB,KAAK,WAAW,IAAIC,EAAwBJ,CAAQ,GAChDC,MACA,KAAK,sBAAsBA,EAAc;AAAA,EAEjD;AAAA,EAEA,MAAMI,GAAmB;AACrB,QAAI;AACA,WAAK,cAAc,KAAKA,CAAI,GAC5B,KAAK,eACL,KAAK,aAAA,GACL,KAAK,WAAW;AAAA,IACpB,SAASC,GAAK;AACV,WAAK,WAAW,IAChB,QAAQ,MAAMA,CAAG,GACbA,aAAe,UACf,KAAK,cAAc,YAAYA,EAAI,OAAiB,GACpD,QAAQ,MAAMA,CAAG;AAAA,IAEzB;AAAA,EACJ;AAAA,EAEA,UAAU;AACN,SAAK,cAAc,MAAA;AAAA,EACvB;AAAA,EAEA,sBAAsBP,GAAiBC,GAA+B;AAClE,QAAI;AACA,YAAMO,IAAmB,KAAK,UACxBC,IAAe,KAAK;AAC1B,WAAK,WAAW,IAAIJ,EAAwBJ,CAAQ,GACpD,KAAK,OAAOD,GAER,KAAK,oCAAoCQ,GAAkB,KAAK,QAAQ,KACxE,KAAK,gCAAgCC,GAAc,KAAK,IAAI,IAE5D,KAAK,YAAA,IAEL,KAAK,iBAAA,GAET,KAAK,aAAA,GACL,KAAK,WAAW;AAAA,IACpB,SAASF,GAAK;AACV,WAAK,WAAW,IAChB,QAAQ,MAAMA,CAAG,GACbA,aAAe,UACf,KAAK,cAAc,YAAYA,EAAI,OAAiB,GACpD,QAAQ,MAAMA,CAAG;AAAA,IAEzB;AAAA,EACJ;AAAA,EAEA,iBAAiBG,GAAgBC,GAAiB;AAC9C,YAAQ,KAAK,gCAAgC;AAAA,EACjD;AAAA,EAEA,SAAiB;AACb,WAAA,KAAK,aAAA,GACEC,EAAe,KAAK,cAAc,SAAS;AAAA,EACtD;AAAA,EAEA,oCAAoCC,GAAuCZ,GAAmC;;AAC1G,WACIY,EAAa,QAAQ,KAAK,CAACC,GAAIC,MAAA;;AAAQ,aAAAD,EAAG,YAAUE,IAAAf,EAAS,QAAQc,CAAG,MAApB,gBAAAC,EAAuB;AAAA,IAAA,CAAK,KAChFH,EAAa,SAAS,WAAWZ,EAAS,SAAS,UACnDgB;AAAAA,MACIJ,EAAa,SAAS,IAAI,CAAAK,MAAKA,EAAE,WAAW,KAAK;AAAA,MACjDjB,EAAS,SAAS,IAAI,CAAAiB,MAAKA,EAAE,WAAW,KAAK;AAAA,IAAA,KAEjDL,EAAa,SAAS,KAAK,CAACK,GAAGH,MAAAA;;AAAQ,aAAAE,EAAmBC,EAAE,QAAOF,IAAAf,EAAS,aAAT,OAAA,SAAAe,EAAoBD,CAAAA,EAAK,KAAK;AAAA,IAAA,CAAC,QACjGC,IAAAH,EAAa,UAAb,gBAAAG,EAAoB,YAASG,IAAAlB,EAAS,UAAT,OAAA,SAAAkB,EAAgB,aAAUC,IAAAP,EAAa,UAAb,OAAA,SAAAO,EAAoB,aAAUC,IAAApB,EAAS,UAAT,OAAA,SAAAoB,EAAgB,UACtGR,EAAa,OAAO,WAAWZ,EAAS,OAAO,UAC/CY,EAAa,OAAO,KAAK,CAACS,GAAGP,MAAQO,EAAE,SAASrB,EAAS,OAAOc,CAAG,EAAE,IAAI,KACzE,CAAA,CAAQF,EAAa,SAAW,CAAA,CAAQZ,EAAS;AAAA,EAEzD;AAAA,EAEA,gCAAgCsB,GAAqBvB,GAAiB;AAClE,UAAMwB,IAAW,OAAO,KAAKD,EAAS,IAAI,GACpCE,IAAO,OAAO,KAAKzB,EAAK,IAAI;AAClC,WACIuB,EAAS,OAAOvB,EAAK,MACrBwB,EAAS,WAAWC,EAAK,UACzBD,EAAS,KAAK,CAAAF,MAAA;;AAAO,aAAAC,EAAS,KAAKG,CAAG,EAAE,aAAWV,IAAAhB,EAAK,KAAK0B,CAAG,MAAb,OAAA,SAAAV,EAAgB;AAAA,IAAA,CAAM;AAAA,EAEjF;AAAA,EAEA,cAAc;AACV,UAAM,EAAC,GAAAW,GAAG,GAAAC,GAAG,SAAAC,GAAS,UAAAC,GAAU,OAAAC,GAAO,QAAAC,GAAQ,OAAAC,GAAO,WAAAC,EAAAA,IAAa,KAAK,UAClEC,IAAiBN,EAAQ,IAAI,CAAAO,MAAU,KAAK,KAAK,oBAAoBA,EAAO,KAAK,CAAC,EAAE,OAAO,CAAAlB,MAAKA,EAAE,SAAS,CAAC,GAC5GmB,IAA4BP,EAAS,IAAI,CAAC,EAAC,YAAAQ,EAAAA,MAAgB,KAAK,KAAK,oBAAoBA,EAAW,KAAK,CAAC,EAAE,OAAO,CAAApB,MAAKA,EAAE,SAAS,CAAC,GAEpIqB,IAAwBJ,EAAe,SACvCK,EAAoBL,CAAc,IAClC,CAAC,CAAC,MAAM,CAAC,GACTM,IAA+BJ,EAA0B,SACzDG,EAAoBH,CAAyB,IAC7C,CAAC,CAAC,MAAM,CAAC,GAETK,IAAsBb,EAAQ,IAAI,CAAAO,MAAUA,EAAO,KAAK,KAAK;AAEnE,SAAK,KAAK,YAAY,CAAC,GAAGM,CAAmB,CAAC;AAC9C,UAAMC,IAAe;AAAA,MACjB,GAAG,KAAK,KAAK,UAAUhB,EAAE,KAAK,EAAE,MAAM,CAAAT,MAC3BA,MAAM,QAAQ,EAAE,OAAOA,CAAC,IAAI,EACtC;AAAA,MACD,GAAG,KAAK,KAAK,UAAUU,EAAE,KAAK,EAAE,MAAM,CAAAV,MAC3BA,MAAM,QAAQ,EAAE,OAAOA,CAAC,IAAI,EACtC;AAAA,IAAA,GAGC0B,IAAkBd,EAAS,IAAI,CAAAZ,MAAKA,EAAE,UAAU,GAEhD2B,IAAeC,EAAQ,KAAK,MAAMP,GAAuBZ,GAAGC,GAAGK,GAAOC,GAAWJ,CAAQ,GACzFiB,IAAY,OAAO,KAAKF,CAAY,GACpCG,IAAaC,EAAkB,KAAK,MAAMJ,GAAcE,GAAWN,GAA8BG,GAAiBb,CAAK,GAEvHmB,IAAeC,EAAiB,KAAK,MAAMrB,GAAUE,CAAM,GAC3DoB,IAAaC,EAAc,KAAK,MAAMrB,GAAQe,GAAWF,GAAcJ,GAA8BG,CAAe;AAE1H,SAAK,iBAAiB;AAAA,MAClB,cAAAD;AAAAA,MACA,cAAAE;AAAAA,MACA,WAAAE;AAAAA,MACA,uBAAAR;AAAAA,MACA,YAAAS;AAAAA,MACA,cAAAE;AAAAA,MACA,YAAAE;AAAAA,IAAA;AAAA,EAER;AAAA,EAEA,mBAAmB;AACf,UAAME,IAAa,KAAK;AACxB,QAAI,CAACA;AACD;AAEJ,UAAM,EAAC,UAAAxB,GAAU,OAAAC,GAAO,QAAAC,EAAAA,IAAU,KAAK,UACjC,EAAC,WAAAe,GAAW,YAAAC,MAAcM;AAEhCP,IAAAA,EAAU,QAAQ,CAAAQ,MAAY;AAC1B,eAASC,IAAI,GAAGA,IAAIxB,EAAO,QAAQwB;AAC/BF,UAAW,WAAWC,CAAQ,EAAEC,CAAC,EAAE,OAAOxB,EAAOwB,CAAC;AAAA,IAE1D,CAAC,GAED1B,EAAS,QAAQ,CAAC,EAAC,YAAAQ,GAAY,cAAAmB,QAAkB;AAC7C,YAAMC,IAAAA,oBAAc,IAAA,GACdC,IAAgE,CAAA;AACtE3B,MAAAA,EAAO,QAAQ,CAAA4B,MAAS;AAChBA,UAAM,OACN,OAAO,QAAQA,EAAM,GAAG,EAAE,QAAQ,CAAC,CAAClC,GAAK7B,CAAK,MAAM;AAC5CD,UAAAA,EAAiBC,CAAK,KAAKA,EAAM,UAAUyC,EAAW,UACtDoB,EAAQ,IAAIhC,CAAoB,GAC5B7B,EAAM,YACN8D,EAAoBjC,CAAoB,IAAI7B,EAAM;AAAA,QAG9D,CAAC;AAAA,MAET,CAAC,GACDyD,EAAW,aAAahB,EAAW,KAAK,EAAE,UAAU,CAAC,GAAGoB,CAAO,GAC/DJ,EAAW,aAAahB,EAAW,KAAK,EAAE,SAASuB;AAAAA,QAC/CvB;AAAAA,QACAqB;AAAAA,QACAF;AAAAA,MAAA;AAAA,IAER,CAAC,GACGT,KAAcjB,KACd,OAAO,KAAKiB,CAAU,EAAE,QAAQ,CAACtB,MAAQ;AACrCsB,MAAAA,EAAWtB,CAAG,EAAE,QAAQ,CAAAoC,MAAa;AACjCA,UAAU,QAAQ/B,EAAM,OACxB+B,EAAU,UAAU/B,EAAM;AAAA,MAC9B,CAAC;AAAA,IACL,CAAC;AAAA,EAET;AAAA,EAEA,eAAe;AACX,QAAI,CAAC,KAAK;AACN;AAEJ,UAAM,EAAC,IAAAgC,GAAI,eAAAC,GAAe,eAAAC,GAAe,UAAAnC,GAAU,WAAAoC,GAAW,QAAAlC,GAAQ,OAAAD,MAAS,KAAK;AACpF,SAAK,cAAc;AAAA,MACf,KAAK;AAAA,MACLgC;AAAAA,MACAC;AAAAA,MACAC;AAAAA,MACA,KAAK,eAAe;AAAA,MACpB,KAAK,eAAe;AAAA;AAAA,MACpB,KAAK,eAAe;AAAA,MACpB,KAAK,eAAe;AAAA,MACpBC;AAAAA,MACA,KAAK,eAAe;AAAA,MACpB,KAAK,eAAe;AAAA,MACpB,KAAK,eAAe;AAAA,MACpBpC,EAAS,IAAI,CAAAZ,MAAKA,EAAE,UAAU;AAAA,MAC9Bc;AAAAA,MACAD;AAAAA,MACA,KAAK;AAAA,IAAA;AAAA,EAEb;AACJ;","x_google_ignoreList":[0]}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../../../node_modules/@milaboratories/miplots4/src/scatterplot/index.ts"],"sourcesContent":["import { renderToString } from 'react-dom/server';\nimport { AbstractChart } from '../AbstractChart';\nimport type { DataFrame } from '../DataFrame';\nimport type {\n AesItem,\n AxisSettings,\n AxisSettingsDiscrete,\n Category,\n ColumnName,\n ContinuousAesFromColumn,\n InheritAesScatterplot,\n ScatterplotEventHandlers,\n ScatterplotLegendInfo,\n ScatterplotSettings,\n} from '../types';\nimport { arraysAreDifferent } from '../utils/arraysAreDifferent';\nimport { getKeysCombinations } from '../utils/getKeysCombination';\nimport ChartRenderer from './ChartRenderer';\nimport type { GroupedDots } from './dots';\nimport { getDots } from './dots';\nimport type { ScatterplotLayerData } from './getLayersData';\nimport { getLayersData } from './getLayersData';\nimport type { TrendsData } from './linearRegression';\nimport { getRegressionData } from './linearRegression';\nimport { ScatterplotSettingsImpl } from './ScatterplotSettingsImpl';\nimport { addPalettesToAesMapping, createLegendInfo } from './utils/createLegendInfo';\nimport type { DiscreteAxisData } from './components/types';\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\nfunction getDiscreteAxisData(data: DataFrame, axis: AxisSettings, column: ColumnName): DiscreteAxisData {\n if (axis.scale === 'discrete') {\n const keys = axis.keys ? axis.keys : data.getColumnCategories(column.value);\n return {keys, labels: keys.reduce((res, v) => {\n const labelsMap = axis.labels ?? {};\n const labelValue = labelsMap[v] ?? (column.valueLabels ? data.getColumnValue(column.valueLabels, data.getColumnCategoryRowIndex(column.value, v as Category)) : v);\n res[v] = String(labelValue);\n return res;\n }, {} as Record<string, string>)};\n }\n return {keys: [], labels: {}};\n}\n\nexport class ChartScatterplot extends AbstractChart {\n settings: ScatterplotSettingsImpl;\n chartRenderer: ChartRenderer;\n\n onTooltipHintSwitch: (v:boolean) => void = () => undefined;\n calculatedData: {\n onlyPositive: {x: boolean; y: boolean};\n dotsByFacets: GroupedDots;\n facetKeys: string[];\n facetKeysCombinations: string[][];\n trendsData: TrendsData | null;\n legendLabels: ScatterplotLegendInfo;\n layersData: Record<string, ScatterplotLayerData[]>;\n discreteAxisDataX: DiscreteAxisData;\n discreteAxisDataY: DiscreteAxisData;\n } | null = null;\n\n constructor(data: DataFrame, settings: ScatterplotSettings, eventHandlers?:ScatterplotEventHandlers) {\n super(data, settings);\n\n this.chartRenderer = new ChartRenderer();\n this.settings = new ScatterplotSettingsImpl(settings);\n if (eventHandlers) {\n this.onTooltipHintSwitch = eventHandlers.onTooltipHintSwitch;\n }\n }\n\n mount(node: HTMLElement) {\n try {\n this.chartRenderer.init(node);\n this._updateData();\n this._updateChart();\n this.hasError = false;\n } catch (err) {\n this.hasError = true;\n console.error(err);\n if (err instanceof Error) {\n this.chartRenderer.renderError(err.message as string);\n console.error(err);\n }\n }\n }\n\n unmount() {\n this.chartRenderer.clear();\n }\n\n updateSettingsAndData(data: DataFrame, settings: ScatterplotSettings) {\n try {\n const previousSettings = this.settings;\n const previousData = this.data;\n this.settings = new ScatterplotSettingsImpl(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 this._updateChart();\n this.hasError = false;\n } catch (err) {\n this.hasError = true;\n console.error(err);\n if (err instanceof Error) {\n this.chartRenderer.renderError(err.message as string);\n console.error(err);\n }\n }\n }\n\n updateChartState(_field: string, _value: unknown) {\n console.warn('no chart state for scatterplot');\n }\n\n export(): string {\n this._updateChart();\n return renderToString(this.chartRenderer.component);\n }\n\n _needUpdateCalculatedDataBySettings(prevSettings: ScatterplotSettingsImpl, settings: ScatterplotSettingsImpl) {\n return (\n prevSettings.facetBy.some((el, idx) => el.value !== settings.facetBy[idx]?.value) ||\n prevSettings.grouping.length !== settings.grouping.length ||\n arraysAreDifferent(\n prevSettings.grouping.map(v => v.columnName.value),\n settings.grouping.map(v => v.columnName.value),\n ) ||\n prevSettings.grouping.some((v, idx) => arraysAreDifferent(v.order, settings.grouping?.[idx].order)) ||\n arraysAreDifferent((prevSettings.chartSettings.xAxis as AxisSettingsDiscrete).keys, (settings.chartSettings.xAxis as AxisSettingsDiscrete).keys) ||\n arraysAreDifferent((prevSettings.chartSettings.yAxis as AxisSettingsDiscrete).keys, (settings.chartSettings.yAxis as AxisSettingsDiscrete).keys) ||\n (prevSettings.label?.value || settings.label?.value) && prevSettings.label?.value !== settings.label?.value ||\n prevSettings.layers.length !== settings.layers.length ||\n prevSettings.layers.some((l, idx) => l.type !== settings.layers[idx].type) ||\n Boolean(prevSettings.trend) !== Boolean(settings.trend)\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, facetBy, grouping, trend, layers, label, highlight, chartSettings} = this.settings;\n const facetKeysLists = facetBy.map(column => this.data.getColumnCategories(column.value)).filter(v => v.length > 0);\n const categoryGroupingKeysLists = grouping.map(({columnName}) => this.data.getColumnCategories(columnName.value)).filter(v => v.length > 0);\n\n const facetKeysCombinations = facetKeysLists.length\n ? getKeysCombinations(facetKeysLists)\n : [['null']];\n const categoryGroupingCombinations = categoryGroupingKeysLists.length\n ? getKeysCombinations(categoryGroupingKeysLists)\n : [['null']];\n\n const facetGroupingValues = facetBy.map(column => column.value) ?? null;\n\n this.data.setGrouping([...facetGroupingValues]);\n const onlyPositive = {\n x: this.data.getColumn(x.value).every(v => {\n return v === null || !(Number(v) < 0);\n }),\n y: this.data.getColumn(y.value).every(v => {\n return v === null || !(Number(v) < 0);\n }),\n };\n\n const groupingColumns = grouping.map(v => v.columnName);\n\n const dotsByFacets = getDots(this.data, facetKeysCombinations, x, y, label, highlight, grouping);\n const facetKeys = Object.keys(dotsByFacets);\n const trendsData = getRegressionData(this.data, dotsByFacets, facetKeys, categoryGroupingCombinations, groupingColumns, trend);\n\n const discreteAxisDataX = getDiscreteAxisData(this.data, chartSettings.xAxis, x);\n const discreteAxisDataY = getDiscreteAxisData(this.data, chartSettings.yAxis, y);\n const legendLabels = createLegendInfo(this.data, grouping, layers);\n const layersData = getLayersData(this.data, layers, facetKeys, dotsByFacets, categoryGroupingCombinations, groupingColumns, chartSettings.xAxis, discreteAxisDataX);\n\n this.calculatedData = {\n onlyPositive,\n dotsByFacets,\n facetKeys,\n facetKeysCombinations,\n trendsData,\n legendLabels,\n layersData,\n discreteAxisDataX,\n discreteAxisDataY\n };\n }\n\n _updateAesInData() {\n const calculated = this.calculatedData;\n if (!calculated) {\n return;\n }\n const {grouping, trend, layers} = this.settings;\n const {facetKeys, trendsData} = calculated;\n\n facetKeys.forEach(facetKey => {\n for (let i = 0; i < layers.length; i++) {\n calculated.layersData[facetKey][i].info = layers[i];\n }\n });\n\n grouping.forEach(({columnName, inheritedAes}) => {\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 === columnName.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[columnName.value].usedAes = [...usedAes];\n calculated.legendLabels[columnName.value].aesMap = addPalettesToAesMapping(\n columnName,\n usedAesFromPalettes,\n inheritedAes\n );\n });\n if (trendsData && trend) {\n Object.keys(trendsData).forEach((key) => {\n trendsData[key].forEach(trendInfo => {\n trendInfo.color = trend.color;\n trendInfo.bounded = trend.bounded;\n });\n });\n }\n }\n\n _updateChart() {\n if (!this.calculatedData) {\n return;\n }\n const {id, chartSettings, facetSettings, grouping, keyColumn, layers, trend} = this.settings;\n this.chartRenderer.render(\n this.data,\n id,\n chartSettings,\n facetSettings,\n this.calculatedData.facetKeys,\n this.calculatedData.facetKeysCombinations, //for titles, if facet by more than 1 column\n this.calculatedData.dotsByFacets,\n this.calculatedData.trendsData,\n keyColumn,\n this.calculatedData.onlyPositive,\n this.calculatedData.legendLabels,\n this.calculatedData.layersData,\n grouping.map(v => v.columnName),\n layers,\n trend,\n this.calculatedData.discreteAxisDataX,\n this.calculatedData.discreteAxisDataY,\n this.onTooltipHintSwitch\n );\n }\n}\n"],"names":["isInheritMapping","value","getDiscreteAxisData","data","axis","column","keys","res","v","labelValue","ChartScatterplot","AbstractChart","settings","eventHandlers","__publicField","ChartRenderer","ScatterplotSettingsImpl","node","err","previousSettings","previousData","_field","_value","renderToString","prevSettings","el","idx","_a","arraysAreDifferent","_b","_c","_d","l","prevData","prevKeys","h","key","x","y","facetBy","grouping","trend","layers","label","highlight","chartSettings","facetKeysLists","categoryGroupingKeysLists","columnName","facetKeysCombinations","getKeysCombinations","categoryGroupingCombinations","facetGroupingValues","onlyPositive","groupingColumns","dotsByFacets","getDots","facetKeys","trendsData","getRegressionData","discreteAxisDataX","discreteAxisDataY","legendLabels","createLegendInfo","layersData","getLayersData","calculated","facetKey","i","inheritedAes","usedAes","usedAesFromPalettes","layer","addPalettesToAesMapping","trendInfo","id","facetSettings","keyColumn"],"mappings":";;;;;;;;;;;AA4BA,SAASA,EAA8CC,GAA6F;AAChJ,SAAO,OAAOA,KAAU,YAAY,UAAUA,KAASA,EAAM,SAAS;AAC1E;AAEA,SAASC,EAAoBC,GAAiBC,GAAoBC,GAAsC;AACpG,MAAID,EAAK,UAAU,YAAY;AAC3B,UAAME,IAAOF,EAAK,OAAOA,EAAK,OAAOD,EAAK,oBAAoBE,EAAO,KAAK;AAC1E,WAAO,EAAC,MAAAC,GAAM,QAAQA,EAAK,OAAO,CAACC,GAAKC,MAAM;AAE1C,YAAMC,KADYL,EAAK,UAAU,CAAA,GACJI,CAAC,MAAMH,EAAO,cAAcF,EAAK,eAAeE,EAAO,aAAaF,EAAK,0BAA0BE,EAAO,OAAOG,CAAa,CAAC,IAAIA;AAChK,aAAAD,EAAIC,CAAC,IAAI,OAAOC,CAAU,GACnBF;AAAAA,IACX,GAAG,CAAA,CAA4B,EAAA;AAAA,EACnC;AACA,SAAO,EAAC,MAAM,IAAI,QAAQ,CAAA,EAAA;AAC9B;AAEO,MAAMG,UAAyBC,EAAc;AAAA,EAiBhD,YAAYR,GAAiBS,GAA+BC,GAAyC;AACjG,UAAMV,GAAMS,CAAQ,GAjBxBE,EAAA,MAAA,UAAA,GACAA,EAAA,MAAA,eAAA,GAEAA,EAAA,6BAA2C,MAAA;AAAA,IAAA,CAAA,GAC3CA,EAAA,MAAA,kBAUW,IAAA,GAKP,KAAK,gBAAgB,IAAIC,EAAAA,GACzB,KAAK,WAAW,IAAIC,EAAwBJ,CAAQ,GAChDC,MACA,KAAK,sBAAsBA,EAAc;AAAA,EAEjD;AAAA,EAEA,MAAMI,GAAmB;AACrB,QAAI;AACA,WAAK,cAAc,KAAKA,CAAI,GAC5B,KAAK,eACL,KAAK,aAAA,GACL,KAAK,WAAW;AAAA,IACpB,SAASC,GAAK;AACV,WAAK,WAAW,IAChB,QAAQ,MAAMA,CAAG,GACbA,aAAe,UACf,KAAK,cAAc,YAAYA,EAAI,OAAiB,GACpD,QAAQ,MAAMA,CAAG;AAAA,IAEzB;AAAA,EACJ;AAAA,EAEA,UAAU;AACN,SAAK,cAAc,MAAA;AAAA,EACvB;AAAA,EAEA,sBAAsBf,GAAiBS,GAA+B;AAClE,QAAI;AACA,YAAMO,IAAmB,KAAK,UACxBC,IAAe,KAAK;AAC1B,WAAK,WAAW,IAAIJ,EAAwBJ,CAAQ,GACpD,KAAK,OAAOT,GAER,KAAK,oCAAoCgB,GAAkB,KAAK,QAAQ,KACxE,KAAK,gCAAgCC,GAAc,KAAK,IAAI,IAE5D,KAAK,YAAA,IAEL,KAAK,iBAAA,GAET,KAAK,aAAA,GACL,KAAK,WAAW;AAAA,IACpB,SAASF,GAAK;AACV,WAAK,WAAW,IAChB,QAAQ,MAAMA,CAAG,GACbA,aAAe,UACf,KAAK,cAAc,YAAYA,EAAI,OAAiB,GACpD,QAAQ,MAAMA,CAAG;AAAA,IAEzB;AAAA,EACJ;AAAA,EAEA,iBAAiBG,GAAgBC,GAAiB;AAC9C,YAAQ,KAAK,gCAAgC;AAAA,EACjD;AAAA,EAEA,SAAiB;AACb,WAAA,KAAK,aAAA,GACEC,EAAe,KAAK,cAAc,SAAS;AAAA,EACtD;AAAA,EAEA,oCAAoCC,GAAuCZ,GAAmC;;AAC1G,WACIY,EAAa,QAAQ,KAAK,CAACC,GAAIC,MAAA;;AAAQ,aAAAD,EAAG,YAAUE,IAAAf,EAAS,QAAQc,CAAG,MAApB,gBAAAC,EAAuB;AAAA,IAAA,CAAK,KAChFH,EAAa,SAAS,WAAWZ,EAAS,SAAS,UACnDgB;AAAAA,MACIJ,EAAa,SAAS,IAAI,CAAAhB,MAAKA,EAAE,WAAW,KAAK;AAAA,MACjDI,EAAS,SAAS,IAAI,CAAAJ,MAAKA,EAAE,WAAW,KAAK;AAAA,IAAA,KAEjDgB,EAAa,SAAS,KAAK,CAAChB,GAAGkB,MAAA;;AAAQ,aAAAE,EAAmBpB,EAAE,QAAOmB,IAAAf,EAAS,aAAT,OAAA,SAAAe,EAAoBD,CAAAA,EAAK,KAAK;AAAA,IAAA,CAAC,KAClGE,EAAoBJ,EAAa,cAAc,MAA+B,MAAOZ,EAAS,cAAc,MAA+B,IAAI,KAC/IgB,EAAoBJ,EAAa,cAAc,MAA+B,MAAOZ,EAAS,cAAc,MAA+B,IAAI,QAC9Ie,IAAAH,EAAa,UAAb,OAAA,SAAAG,EAAoB,YAASE,IAAAjB,EAAS,UAAT,OAAA,SAAAiB,EAAgB,aAAUC,IAAAN,EAAa,UAAb,OAAA,SAAAM,EAAoB,aAAUC,IAAAnB,EAAS,UAAT,OAAA,SAAAmB,EAAgB,UACtGP,EAAa,OAAO,WAAWZ,EAAS,OAAO,UAC/CY,EAAa,OAAO,KAAK,CAACQ,GAAGN,MAAQM,EAAE,SAASpB,EAAS,OAAOc,CAAG,EAAE,IAAI,KACzE,CAAA,CAAQF,EAAa,SAAW,EAAQZ,EAAS;AAAA,EAEzD;AAAA,EAEA,gCAAgCqB,GAAqB9B,GAAiB;AAClE,UAAM+B,IAAW,OAAO,KAAKD,EAAS,IAAI,GACpC3B,IAAO,OAAO,KAAKH,EAAK,IAAI;AAClC,WACI8B,EAAS,OAAO9B,EAAK,MACrB+B,EAAS,WAAW5B,EAAK,UACzB4B,EAAS,KAAK,CAAAC,MAAA;;AAAO,aAAAF,EAAS,KAAKG,CAAG,EAAE,aAAWT,IAAAxB,EAAK,KAAKiC,CAAG,MAAb,OAAA,SAAAT,EAAgB;AAAA,IAAA,CAAM;AAAA,EAEjF;AAAA,EAEA,cAAc;AACV,UAAM,EAAC,GAAAU,GAAG,GAAAC,GAAG,SAAAC,GAAS,UAAAC,GAAU,OAAAC,GAAO,QAAAC,GAAQ,OAAAC,GAAO,WAAAC,GAAW,eAAAC,EAAAA,IAAiB,KAAK,UACjFC,IAAiBP,EAAQ,IAAI,CAAAlC,MAAU,KAAK,KAAK,oBAAoBA,EAAO,KAAK,CAAC,EAAE,OAAO,CAAAG,MAAKA,EAAE,SAAS,CAAC,GAC5GuC,IAA4BP,EAAS,IAAI,CAAC,EAAC,YAAAQ,QAAgB,KAAK,KAAK,oBAAoBA,EAAW,KAAK,CAAC,EAAE,OAAO,CAAAxC,MAAKA,EAAE,SAAS,CAAC,GAEpIyC,IAAwBH,EAAe,SACvCI,EAAoBJ,CAAc,IAClC,CAAC,CAAC,MAAM,CAAC,GACTK,IAA+BJ,EAA0B,SACzDG,EAAoBH,CAAyB,IAC7C,CAAC,CAAC,MAAM,CAAC,GAETK,IAAsBb,EAAQ,IAAI,CAAAlC,MAAUA,EAAO,KAAK,KAAK;AAEnE,SAAK,KAAK,YAAY,CAAC,GAAG+C,CAAmB,CAAC;AAC9C,UAAMC,IAAe;AAAA,MACjB,GAAG,KAAK,KAAK,UAAUhB,EAAE,KAAK,EAAE,MAAM,CAAA7B,MAC3BA,MAAM,QAAQ,EAAE,OAAOA,CAAC,IAAI,EACtC;AAAA,MACD,GAAG,KAAK,KAAK,UAAU8B,EAAE,KAAK,EAAE,MAAM,CAAA9B,MAC3BA,MAAM,QAAQ,EAAE,OAAOA,CAAC,IAAI,EACtC;AAAA,IAAA,GAGC8C,IAAkBd,EAAS,IAAI,CAAAhC,MAAKA,EAAE,UAAU,GAEhD+C,IAAeC,EAAQ,KAAK,MAAMP,GAAuBZ,GAAGC,GAAGK,GAAOC,GAAWJ,CAAQ,GACzFiB,IAAY,OAAO,KAAKF,CAAY,GACpCG,IAAaC,EAAkB,KAAK,MAAMJ,GAAcE,GAAWN,GAA8BG,GAAiBb,CAAK,GAEvHmB,IAAoB1D,EAAoB,KAAK,MAAM2C,EAAc,OAAOR,CAAC,GACzEwB,IAAoB3D,EAAoB,KAAK,MAAM2C,EAAc,OAAOP,CAAC,GACzEwB,IAAeC,EAAiB,KAAK,MAAMvB,GAAUE,CAAM,GAC3DsB,IAAaC,EAAc,KAAK,MAAMvB,GAAQe,GAAWF,GAAcJ,GAA8BG,GAAiBT,EAAc,OAAOe,CAAiB;AAElK,SAAK,iBAAiB;AAAA,MAClB,cAAAP;AAAAA,MACA,cAAAE;AAAAA,MACA,WAAAE;AAAAA,MACA,uBAAAR;AAAAA,MACA,YAAAS;AAAAA,MACA,cAAAI;AAAAA,MACA,YAAAE;AAAAA,MACA,mBAAAJ;AAAAA,MACA,mBAAAC;AAAAA,IAAA;AAAA,EAER;AAAA,EAEA,mBAAmB;AACf,UAAMK,IAAa,KAAK;AACxB,QAAI,CAACA;AACD;AAEJ,UAAM,EAAC,UAAA1B,GAAU,OAAAC,GAAO,QAAAC,EAAAA,IAAU,KAAK,UACjC,EAAC,WAAAe,GAAW,YAAAC,MAAcQ;AAEhCT,IAAAA,EAAU,QAAQ,CAAAU,MAAY;AAC1B,eAASC,IAAI,GAAGA,IAAI1B,EAAO,QAAQ0B;AAC/BF,UAAW,WAAWC,CAAQ,EAAEC,CAAC,EAAE,OAAO1B,EAAO0B,CAAC;AAAA,IAE1D,CAAC,GAED5B,EAAS,QAAQ,CAAC,EAAC,YAAAQ,GAAY,cAAAqB,QAAkB;AAC7C,YAAMC,IAAAA,oBAAc,IAAA,GACdC,IAAgE,CAAA;AACtE7B,QAAO,QAAQ,CAAA8B,MAAS;AAChBA,QAAAA,EAAM,OACN,OAAO,QAAQA,EAAM,GAAG,EAAE,QAAQ,CAAC,CAACpC,GAAKnC,CAAK,MAAM;AAC5CD,UAAAA,EAAiBC,CAAK,KAAKA,EAAM,UAAU+C,EAAW,UACtDsB,EAAQ,IAAIlC,CAAoB,GAC5BnC,EAAM,YACNsE,EAAoBnC,CAAoB,IAAInC,EAAM;AAAA,QAG9D,CAAC;AAAA,MAET,CAAC,GACDiE,EAAW,aAAalB,EAAW,KAAK,EAAE,UAAU,CAAC,GAAGsB,CAAO,GAC/DJ,EAAW,aAAalB,EAAW,KAAK,EAAE,SAASyB;AAAAA,QAC/CzB;AAAAA,QACAuB;AAAAA,QACAF;AAAAA,MAAA;AAAA,IAER,CAAC,GACGX,KAAcjB,KACd,OAAO,KAAKiB,CAAU,EAAE,QAAQ,CAACtB,MAAQ;AACrCsB,MAAAA,EAAWtB,CAAG,EAAE,QAAQ,CAAAsC,MAAa;AACjCA,QAAAA,EAAU,QAAQjC,EAAM,OACxBiC,EAAU,UAAUjC,EAAM;AAAA,MAC9B,CAAC;AAAA,IACL,CAAC;AAAA,EAET;AAAA,EAEA,eAAe;AACX,QAAI,CAAC,KAAK;AACN;AAEJ,UAAM,EAAC,IAAAkC,GAAI,eAAA9B,GAAe,eAAA+B,GAAe,UAAApC,GAAU,WAAAqC,GAAW,QAAAnC,GAAQ,OAAAD,MAAS,KAAK;AACpF,SAAK,cAAc;AAAA,MACf,KAAK;AAAA,MACLkC;AAAAA,MACA9B;AAAAA,MACA+B;AAAAA,MACA,KAAK,eAAe;AAAA,MACpB,KAAK,eAAe;AAAA;AAAA,MACpB,KAAK,eAAe;AAAA,MACpB,KAAK,eAAe;AAAA,MACpBC;AAAAA,MACA,KAAK,eAAe;AAAA,MACpB,KAAK,eAAe;AAAA,MACpB,KAAK,eAAe;AAAA,MACpBrC,EAAS,IAAI,CAAAhC,MAAKA,EAAE,UAAU;AAAA,MAC9BkC;AAAAA,MACAD;AAAAA,MACA,KAAK,eAAe;AAAA,MACpB,KAAK,eAAe;AAAA,MACpB,KAAK;AAAA,IAAA;AAAA,EAEb;AACJ;","x_google_ignoreList":[0]}
|