@milaboratories/graph-maker 1.1.192 → 1.1.194
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/constantsAesthetic.d.ts +0 -1
- package/dist/constantsAesthetic.js +16 -17
- package/dist/constantsAesthetic.js.map +1 -1
- package/dist/constantsCommon.d.ts +4 -0
- package/dist/constantsCommon.js +21 -17
- package/dist/constantsCommon.js.map +1 -1
- package/dist/dataBindAes.d.ts +5 -5
- package/dist/dataBindAes.js +110 -110
- package/dist/dataBindAes.js.map +1 -1
- package/dist/forms/AxesSettingsForm/DiscreteAxesSettingsForm.vue.js +154 -144
- package/dist/forms/AxesSettingsForm/DiscreteAxesSettingsForm.vue.js.map +1 -1
- package/dist/forms/AxesSettingsForm/HeatmapAxesSettingsForm.vue.js +263 -193
- package/dist/forms/AxesSettingsForm/HeatmapAxesSettingsForm.vue.js.map +1 -1
- package/dist/forms/LayersForm/AesSelector.vue.js +59 -59
- package/dist/forms/LayersForm/AesSelector.vue.js.map +1 -1
- package/dist/forms/LayersForm/Layer/Bubble.vue.js +41 -41
- package/dist/forms/LayersForm/Layer/Bubble.vue.js.map +1 -1
- package/dist/forms/LayersForm/Layer/heatmap/Heatmap.vue.js +35 -35
- package/dist/forms/LayersForm/Layer/heatmap/Heatmap.vue.js.map +1 -1
- package/dist/forms/LayersForm/Layer/heatmap/HeatmapAnnotations.vue.js +31 -31
- package/dist/forms/LayersForm/Layer/heatmap/HeatmapAnnotations.vue.js.map +1 -1
- package/dist/forms/LayersForm/Layer/heatmap/HeatmapClustered.vue.js +35 -35
- package/dist/forms/LayersForm/Layer/heatmap/HeatmapClustered.vue.js.map +1 -1
- package/dist/index.vue.js +94 -90
- package/dist/index.vue.js.map +1 -1
- package/dist/store.d.ts +8 -3
- package/dist/store.js +129 -123
- package/dist/store.js.map +1 -1
- package/dist/types.d.ts +9 -0
- package/dist/utils/createChartSettingsForRender/composeBubbleSettings.d.ts +2 -2
- package/dist/utils/createChartSettingsForRender/composeBubbleSettings.js +11 -11
- package/dist/utils/createChartSettingsForRender/composeBubbleSettings.js.map +1 -1
- package/dist/utils/createChartSettingsForRender/composeChartSettings.d.ts +2 -2
- package/dist/utils/createChartSettingsForRender/composeChartSettings.js +28 -28
- package/dist/utils/createChartSettingsForRender/composeChartSettings.js.map +1 -1
- package/dist/utils/createChartSettingsForRender/composeDendroSettings.js +23 -20
- package/dist/utils/createChartSettingsForRender/composeDendroSettings.js.map +1 -1
- package/dist/utils/createChartSettingsForRender/composeDiscreteSettings.d.ts +2 -2
- package/dist/utils/createChartSettingsForRender/composeDiscreteSettings.js +20 -18
- package/dist/utils/createChartSettingsForRender/composeDiscreteSettings.js.map +1 -1
- package/dist/utils/createChartSettingsForRender/composeHeatmapSettings.d.ts +2 -2
- package/dist/utils/createChartSettingsForRender/composeHeatmapSettings.js +28 -28
- package/dist/utils/createChartSettingsForRender/composeHeatmapSettings.js.map +1 -1
- package/dist/utils/createChartSettingsForRender/composeHistogramSettings.d.ts +2 -2
- package/dist/utils/createChartSettingsForRender/composeHistogramSettings.js +11 -10
- package/dist/utils/createChartSettingsForRender/composeHistogramSettings.js.map +1 -1
- package/dist/utils/createChartSettingsForRender/composeScatterplotSettings.d.ts +3 -3
- package/dist/utils/createChartSettingsForRender/composeScatterplotSettings.js +71 -68
- package/dist/utils/createChartSettingsForRender/composeScatterplotSettings.js.map +1 -1
- package/dist/utils/createChartSettingsForRender/composeScatterplotUmapSettings.d.ts +2 -2
- package/dist/utils/createChartSettingsForRender/composeScatterplotUmapSettings.js +19 -18
- package/dist/utils/createChartSettingsForRender/composeScatterplotUmapSettings.js.map +1 -1
- package/dist/utils/createChartSettingsForRender/getAxesDataFromForms.js +27 -27
- package/dist/utils/createChartSettingsForRender/getAxesDataFromForms.js.map +1 -1
- package/dist/utils/createChartSettingsForRender/getLayersDataFromForms.d.ts +1 -1
- package/dist/utils/createChartSettingsForRender/getLayersDataFromForms.js +37 -37
- package/dist/utils/createChartSettingsForRender/getLayersDataFromForms.js.map +1 -1
- package/package.json +2 -2
package/dist/dataBindAes.js
CHANGED
|
@@ -1,42 +1,42 @@
|
|
|
1
1
|
import { scaleLinear as F } from "d3-scale";
|
|
2
|
-
import { PALETTE_MAP as
|
|
3
|
-
function
|
|
2
|
+
import { PALETTE_MAP as m, FIXES_DOT_SHAPES as u, FIXED_LINE_TYPES as g, isCategorical as y, DEFAULT_BLACK as E } from "./constantsAesthetic.js";
|
|
3
|
+
function I(t) {
|
|
4
4
|
return t !== null && typeof t == "object" && "palette" in t && "type" in t && t.type === "continuous";
|
|
5
5
|
}
|
|
6
6
|
function f(t) {
|
|
7
7
|
return t !== null && typeof t == "object" && "palette" in t && "type" in t && t.type === "categorical";
|
|
8
8
|
}
|
|
9
|
-
function
|
|
10
|
-
return f(t) ||
|
|
9
|
+
function G(t) {
|
|
10
|
+
return f(t) || I(t);
|
|
11
11
|
}
|
|
12
|
-
const
|
|
12
|
+
const W = "#110529", P = "solid", _ = 1, T = "21", C = 3, M = 2, b = { min: 3, max: 10 }, D = {
|
|
13
13
|
color: "#ccc",
|
|
14
|
-
lineShape:
|
|
14
|
+
lineShape: P,
|
|
15
15
|
dotShape: T
|
|
16
|
-
}
|
|
17
|
-
function
|
|
18
|
-
const
|
|
19
|
-
return F().domain(t.map((
|
|
16
|
+
};
|
|
17
|
+
function N(t) {
|
|
18
|
+
const e = 1 / (t.length - 1);
|
|
19
|
+
return F().domain(t.map((s, i) => i * e)).range(t);
|
|
20
20
|
}
|
|
21
|
-
function O(t,
|
|
22
|
-
const
|
|
23
|
-
colorIdx:
|
|
21
|
+
function O(t, e) {
|
|
22
|
+
const s = m[t].colors, i = e.length > 1 ? 1 / (e.length - 1) : 0, l = N(s), p = y(t), r = e.reduce((c, n, o) => (c[n] = {
|
|
23
|
+
colorIdx: p ? o : o * i,
|
|
24
24
|
aes: {
|
|
25
|
-
color:
|
|
26
|
-
lineShape: g[
|
|
27
|
-
dotShape: u[
|
|
25
|
+
color: p ? s[o % s.length] : l(o * i),
|
|
26
|
+
lineShape: g[o % g.length],
|
|
27
|
+
dotShape: u[o % u.length]
|
|
28
28
|
}
|
|
29
|
-
},
|
|
29
|
+
}, c), {});
|
|
30
30
|
return {
|
|
31
31
|
type: "categorical",
|
|
32
32
|
palette: t,
|
|
33
|
-
naAes:
|
|
34
|
-
order:
|
|
33
|
+
naAes: D,
|
|
34
|
+
order: e,
|
|
35
35
|
hidden: {},
|
|
36
|
-
mapping:
|
|
36
|
+
mapping: r
|
|
37
37
|
};
|
|
38
38
|
}
|
|
39
|
-
const
|
|
39
|
+
const U = [
|
|
40
40
|
"primaryGrouping",
|
|
41
41
|
"secondaryGrouping",
|
|
42
42
|
// discrete charts
|
|
@@ -49,144 +49,144 @@ const V = [
|
|
|
49
49
|
"heatmapAnnotation"
|
|
50
50
|
// dendro
|
|
51
51
|
];
|
|
52
|
-
function
|
|
53
|
-
|
|
54
|
-
var
|
|
55
|
-
const
|
|
56
|
-
|
|
57
|
-
var
|
|
58
|
-
const
|
|
59
|
-
|
|
52
|
+
function j(t, e, s) {
|
|
53
|
+
U.forEach((i) => {
|
|
54
|
+
var p;
|
|
55
|
+
const l = (p = t.components[i]) == null ? void 0 : p.selectorStates;
|
|
56
|
+
l == null || l.forEach(({ selectedSource: r }) => {
|
|
57
|
+
var o;
|
|
58
|
+
const c = e[r], n = (o = s[r]) == null ? void 0 : o.list;
|
|
59
|
+
c && n && f(c) && (e[r] = V(n, c));
|
|
60
60
|
});
|
|
61
61
|
});
|
|
62
62
|
}
|
|
63
|
-
function
|
|
64
|
-
const { palette:
|
|
65
|
-
if (!
|
|
66
|
-
return
|
|
67
|
-
const
|
|
68
|
-
return
|
|
69
|
-
const
|
|
70
|
-
|
|
71
|
-
colorIdx:
|
|
63
|
+
function V(t, e) {
|
|
64
|
+
const { palette: s, order: i, mapping: l } = e, p = new Set(t), r = new Set(i), c = t.filter((d) => !r.has(d)), n = i.filter((d) => !p.has(d));
|
|
65
|
+
if (!c.length && !n.length)
|
|
66
|
+
return e;
|
|
67
|
+
const o = [...t], a = { ...l }, S = m[s].colors;
|
|
68
|
+
return c.forEach((d, L) => {
|
|
69
|
+
const h = L + (i.length ? l[i[i.length - 1]].colorIdx + 1 : 0);
|
|
70
|
+
a[d] = {
|
|
71
|
+
colorIdx: h,
|
|
72
72
|
aes: {
|
|
73
|
-
color: S[
|
|
74
|
-
lineShape: g[
|
|
75
|
-
dotShape: u[
|
|
73
|
+
color: S[h % S.length],
|
|
74
|
+
lineShape: g[h % g.length],
|
|
75
|
+
dotShape: u[h % u.length]
|
|
76
76
|
}
|
|
77
77
|
};
|
|
78
|
-
}), n.forEach((
|
|
79
|
-
|
|
80
|
-
}), { ...
|
|
78
|
+
}), n.forEach((d) => {
|
|
79
|
+
a[d] && delete a[d];
|
|
80
|
+
}), { ...e, order: o, mapping: a };
|
|
81
81
|
}
|
|
82
|
-
function
|
|
82
|
+
function w(t) {
|
|
83
83
|
return {
|
|
84
84
|
type: "continuous",
|
|
85
85
|
palette: t,
|
|
86
|
-
naAes:
|
|
86
|
+
naAes: D,
|
|
87
87
|
range: null,
|
|
88
88
|
midPoint: null,
|
|
89
89
|
log: !1
|
|
90
90
|
};
|
|
91
91
|
}
|
|
92
|
-
function A(t) {
|
|
93
|
-
return O(
|
|
92
|
+
function A(t, e) {
|
|
93
|
+
return O(e, t);
|
|
94
94
|
}
|
|
95
|
-
function
|
|
96
|
-
var
|
|
97
|
-
if ((
|
|
95
|
+
function z(t, e, s, i, l) {
|
|
96
|
+
var c;
|
|
97
|
+
if ((e == null ? void 0 : e.type) === "continuous")
|
|
98
98
|
return { inheritedAes: {} };
|
|
99
|
-
const
|
|
99
|
+
const p = s ? ((c = t[s]) == null ? void 0 : c.list) ?? [] : [], r = e ?? A(p, l);
|
|
100
100
|
return r.order.length ? {
|
|
101
|
-
order: r.order.filter((
|
|
102
|
-
var
|
|
103
|
-
return !((
|
|
101
|
+
order: r.order.filter((n) => {
|
|
102
|
+
var o;
|
|
103
|
+
return !((o = r.hidden) != null && o[n]);
|
|
104
104
|
}),
|
|
105
105
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
106
|
-
inheritedAes: r.order.reduce((
|
|
107
|
-
const
|
|
108
|
-
return o
|
|
106
|
+
inheritedAes: r.order.reduce((n, o) => {
|
|
107
|
+
const a = r.mapping[o].aes;
|
|
108
|
+
return n[o] = {}, i.fill && (n[o].fillColor = a.color, n[o].dotFill = a.color), i.stroke && (n[o].lineColor = a.color), i.dotShape && (n[o].dotShape = a.dotShape), i.lineType && (n[o].lineShape = a.lineShape), n;
|
|
109
109
|
}, {})
|
|
110
110
|
} : { inheritedAes: {} };
|
|
111
111
|
}
|
|
112
|
-
function
|
|
113
|
-
var
|
|
114
|
-
const
|
|
115
|
-
if (
|
|
112
|
+
function R(t, e, s, i) {
|
|
113
|
+
var c;
|
|
114
|
+
const l = s[t];
|
|
115
|
+
if (l && !f(l))
|
|
116
116
|
return { order: [], inheritedAes: {} };
|
|
117
|
-
const
|
|
117
|
+
const p = ((c = e[t]) == null ? void 0 : c.list) ?? [], r = l ?? A(p, i);
|
|
118
118
|
return {
|
|
119
119
|
order: r.order,
|
|
120
120
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
121
|
-
inheritedAes: r.order.reduce((
|
|
122
|
-
const
|
|
123
|
-
return o
|
|
124
|
-
fillColor:
|
|
125
|
-
lineColor:
|
|
126
|
-
dotFill:
|
|
127
|
-
dotShape:
|
|
128
|
-
dotSize:
|
|
129
|
-
lineWidth:
|
|
130
|
-
},
|
|
121
|
+
inheritedAes: r.order.reduce((n, o) => {
|
|
122
|
+
const a = r.mapping[o].aes;
|
|
123
|
+
return n[o] = {
|
|
124
|
+
fillColor: a.color,
|
|
125
|
+
lineColor: a.color,
|
|
126
|
+
dotFill: a.color,
|
|
127
|
+
dotShape: a.dotShape,
|
|
128
|
+
dotSize: C,
|
|
129
|
+
lineWidth: _
|
|
130
|
+
}, n;
|
|
131
131
|
}, {})
|
|
132
132
|
};
|
|
133
133
|
}
|
|
134
|
-
function
|
|
135
|
-
var
|
|
136
|
-
const
|
|
137
|
-
if (
|
|
134
|
+
function X(t, e, s, i) {
|
|
135
|
+
var c;
|
|
136
|
+
const l = s[t];
|
|
137
|
+
if (l && !f(l))
|
|
138
138
|
return {};
|
|
139
|
-
const
|
|
139
|
+
const p = ((c = e[t]) == null ? void 0 : c.list) ?? [], r = l ?? A(p, i);
|
|
140
140
|
return r.order.length ? {
|
|
141
|
-
order: r.order.filter((
|
|
142
|
-
var
|
|
143
|
-
return !((
|
|
141
|
+
order: r.order.filter((n) => {
|
|
142
|
+
var o;
|
|
143
|
+
return !((o = r.hidden) != null && o[n]);
|
|
144
144
|
}),
|
|
145
145
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
146
|
-
inheritedAes: r.order.reduce((
|
|
147
|
-
const
|
|
148
|
-
return o
|
|
149
|
-
fillColor:
|
|
146
|
+
inheritedAes: r.order.reduce((n, o) => {
|
|
147
|
+
const a = r.mapping[o].aes;
|
|
148
|
+
return n[o] = {
|
|
149
|
+
fillColor: a.color,
|
|
150
150
|
lineColor: E,
|
|
151
151
|
dotFill: E,
|
|
152
152
|
dotShape: T,
|
|
153
|
-
dotSize:
|
|
154
|
-
lineWidth:
|
|
155
|
-
},
|
|
153
|
+
dotSize: C,
|
|
154
|
+
lineWidth: _
|
|
155
|
+
}, n;
|
|
156
156
|
}, {})
|
|
157
157
|
} : { order: [], inheritedAes: {} };
|
|
158
158
|
}
|
|
159
|
-
function
|
|
160
|
-
var
|
|
161
|
-
const
|
|
159
|
+
function Z(t, e, s, i, l) {
|
|
160
|
+
var c;
|
|
161
|
+
const p = ((c = e[t]) == null ? void 0 : c.list) ?? [], r = s[t] ?? A(p, l);
|
|
162
162
|
return r.order.reduce(
|
|
163
|
-
(
|
|
164
|
-
const
|
|
165
|
-
return o
|
|
163
|
+
(n, o) => {
|
|
164
|
+
const a = r.mapping[o].aes;
|
|
165
|
+
return n[o] = a[i], n;
|
|
166
166
|
},
|
|
167
167
|
{}
|
|
168
168
|
);
|
|
169
169
|
}
|
|
170
170
|
export {
|
|
171
|
-
|
|
171
|
+
b as DEFAULT_DOT_RANGE,
|
|
172
172
|
T as DEFAULT_DOT_SHAPE,
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
173
|
+
C as DEFAULT_DOT_SIZE,
|
|
174
|
+
M as DEFAULT_DOT_SIZE_CANVAS,
|
|
175
|
+
W as DEFAULT_LINE_COLOR,
|
|
176
|
+
P as DEFAULT_LINE_SHAPE,
|
|
177
|
+
_ as DEFAULT_LINE_WIDTH,
|
|
178
|
+
D as DEFAULT_NA_AES,
|
|
179
179
|
O as createCategoricalMappingFromPalette,
|
|
180
|
-
|
|
180
|
+
w as createContinuousMappingFromPalette,
|
|
181
181
|
A as createDefaultMapping,
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
182
|
+
z as getChartSettingsInheritedAes,
|
|
183
|
+
Z as getDendroAes,
|
|
184
|
+
X as getHistogramAes,
|
|
185
|
+
R as getScatterplotAes,
|
|
186
|
+
G as isAestheticMapping,
|
|
187
187
|
f as isAestheticMappingCategorical,
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
188
|
+
I as isAestheticMappingContinuous,
|
|
189
|
+
V as updateCategoricalMapping,
|
|
190
|
+
j as updateDataBindAes
|
|
191
191
|
};
|
|
192
192
|
//# sourceMappingURL=dataBindAes.js.map
|
package/dist/dataBindAes.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dataBindAes.js","sources":["../src/dataBindAes.ts"],"sourcesContent":["import type { InputState } from '@milaboratories/pf-plots';\nimport { scaleLinear } from 'd3-scale';\nimport type {\n ContinuousPalette,\n DotShape,\n LineType,\n Palette,\n} from './components/AesSettings/types';\nimport {\n DEFAULT_BLACK,\n FIXED_LINE_TYPES,\n FIXES_DOT_SHAPES,\n isCategorical,\n PALETTE_MAP,\n} from './constantsAesthetic';\nimport type { AesType, ContinuousDataMappingSize, NumberRange } from './constantsCommon';\nimport type { UniqueValuesBySourceMap } from './types';\n\nexport type AestheticMappingState = Record<string, AestheticMapping>;\nexport type AestheticMapping =\n | AestheticMappingContinuous\n | AestheticMappingCategorical;\n\ninterface MappingRange {\n maxValue: number | null;\n minValue: number | null;\n}\n\n/** Mapping for continuous axes (numerical axes) */\nexport interface AestheticMappingContinuous {\n type: 'continuous';\n palette: ContinuousPalette;\n range: MappingRange | null;\n midPoint: number | null;\n log: boolean;\n naAes: AestheticValues;\n}\n\nexport function isAestheticMappingContinuous(v: unknown | AestheticMappingContinuous): v is AestheticMappingContinuous {\n return v !== null && typeof v === 'object' && 'palette' in v && 'type' in v && v.type === 'continuous';\n}\n\n/** Mapping for categorical axes (string axes) */\nexport interface AestheticMappingCategorical {\n type: 'categorical';\n palette: Palette;\n naAes: AestheticValues;\n order: string[];\n hidden?: Record<string, boolean>;\n mapping: AestheticMappingRecord;\n}\n\nexport function isAestheticMappingCategorical(v: unknown | AestheticMappingCategorical): v is AestheticMappingCategorical {\n return v !== null && typeof v === 'object' && 'palette' in v && 'type' in v && v.type === 'categorical';\n}\n\nexport function isAestheticMapping(v: unknown | AestheticMappingContinuous | AestheticMappingCategorical): v is AestheticMapping {\n return isAestheticMappingCategorical(v) || isAestheticMappingContinuous(v);\n}\n\n// key - column value, colorIdx - idx of color (if palette is categorical) of percent value of colors gradient (if palette is continuous)\ntype AestheticMappingRecord = Record<\n string | number,\n {\n aes: Partial<AestheticValues>;\n colorIdx: number;\n }\n>;\n\ninterface AestheticValues {\n /** Number to retrieve the color from pallet, string to represent specific color as hex */\n color: string;\n lineShape: LineType;\n dotShape: DotShape;\n}\n\nexport const DEFAULT_LINE_COLOR = '#110529';\nexport const DEFAULT_LINE_SHAPE: LineType = 'solid';\nexport const DEFAULT_LINE_WIDTH = 1;\nexport const DEFAULT_DOT_SHAPE: DotShape = '21'; // colored circle, shape number as in R\nexport const DEFAULT_DOT_SIZE = 3; // radius;\nexport const DEFAULT_DOT_SIZE_CANVAS = 2;\nexport const DEFAULT_DOT_RANGE: NumberRange = { min: 3, max: 10 }; // radius;\n\nexport const DEFAULT_NA_AES = {\n color: '#ccc',\n lineShape: DEFAULT_LINE_SHAPE as LineType,\n dotShape: DEFAULT_DOT_SHAPE as DotShape,\n};\nconst DEFAULT_PALETTE: Palette = 'light';\n\nfunction getColorScale(colors: string[]) {\n const colorStep = 1 / (colors.length - 1);\n return scaleLinear<string, string>()\n .domain(colors.map((_c, idx) => idx * colorStep))\n .range(colors);\n}\n\nexport function createCategoricalMappingFromPalette(\n palette: Palette,\n values: string[],\n): AestheticMappingCategorical {\n const colors = PALETTE_MAP[palette].colors;\n const step = values.length > 1 ? 1 / (values.length - 1) : 0;\n const colorScale = getColorScale(colors);\n\n const categorical = isCategorical(palette);\n const mapping = values.reduce((res: AestheticMappingRecord, value, idx) => {\n res[value] = {\n colorIdx: categorical ? idx : idx * step,\n aes: {\n color: categorical\n ? colors[idx % colors.length]\n : colorScale(idx * step),\n lineShape: FIXED_LINE_TYPES[idx % FIXED_LINE_TYPES.length],\n dotShape: FIXES_DOT_SHAPES[idx % FIXES_DOT_SHAPES.length],\n },\n };\n return res;\n }, {});\n return {\n type: 'categorical',\n palette: palette,\n naAes: DEFAULT_NA_AES,\n order: values,\n hidden: {},\n mapping,\n };\n}\n\nconst INPUTS_WITH_AES_MAPPINGS = [\n 'primaryGrouping', 'secondaryGrouping', // discrete charts\n 'grouping', 'shape', // scatterplot\n 'nodeColor', 'nodeShape', 'lineColor', 'heatmapAnnotation', // dendro\n];\nexport function updateDataBindAes(\n optionsState: InputState,\n dataBindAes: Record<string, AestheticMapping>,\n uniqueValuesMap: UniqueValuesBySourceMap,\n) {\n INPUTS_WITH_AES_MAPPINGS.forEach((inputName) => {\n const selectorStates = optionsState.components[inputName as keyof InputState]?.selectorStates;\n selectorStates?.forEach(({ selectedSource }) => {\n const savedMapping = dataBindAes[selectedSource];\n const uniqueValues = uniqueValuesMap[selectedSource]?.list;\n if (savedMapping && uniqueValues && isAestheticMappingCategorical(savedMapping)) {\n dataBindAes[selectedSource] = updateCategoricalMapping(uniqueValues, savedMapping);\n }\n });\n });\n}\n\nexport function updateCategoricalMapping(\n newUniqueValues: string[],\n currentMapping: AestheticMappingCategorical,\n): AestheticMappingCategorical {\n const { palette, order, mapping } = currentMapping;\n const uniqueValuesSet = new Set(newUniqueValues);\n const orderValuesSet = new Set(order);\n const addedValues: string[] = newUniqueValues.filter((v) => !orderValuesSet.has(v));\n const removedValues: string[] = order.filter((v) => !uniqueValuesSet.has(v as string));\n if (!addedValues.length && !removedValues.length) {\n return currentMapping;\n }\n const newOrder = [...newUniqueValues];\n const newMapping = { ...mapping };\n const colors = PALETTE_MAP[palette].colors;\n addedValues.forEach((v, idx) => {\n const index = idx + (order.length ? mapping[order[order.length - 1]].colorIdx + 1 : 0);\n newMapping[v] = {\n colorIdx: index,\n aes: {\n color: colors[index % colors.length],\n lineShape: FIXED_LINE_TYPES[index % FIXED_LINE_TYPES.length],\n dotShape: FIXES_DOT_SHAPES[index % FIXES_DOT_SHAPES.length],\n },\n };\n });\n removedValues.forEach((v) => {\n if (newMapping[v]) {\n delete newMapping[v];\n }\n });\n\n return { ...currentMapping, order: newOrder, mapping: newMapping } as AestheticMappingCategorical;\n}\nexport function createContinuousMappingFromPalette(palette: ContinuousPalette): AestheticMappingContinuous {\n return {\n type: 'continuous',\n palette: palette,\n naAes: DEFAULT_NA_AES,\n range: null,\n midPoint: null,\n log: false,\n };\n}\n\nexport function createDefaultMapping(\n values: string[],\n): AestheticMappingCategorical {\n return createCategoricalMappingFromPalette(DEFAULT_PALETTE, values);\n}\n\nexport function createDefaultContinuousMapping(columnId: string): ContinuousDataMappingSize {\n return {\n column: columnId,\n range: DEFAULT_DOT_RANGE,\n };\n}\n\nexport function getChartSettingsInheritedAes(\n uniqueValuesData: UniqueValuesBySourceMap,\n savedMapping: AestheticMapping | undefined,\n sourceId: string | null,\n usedAesInMapping: Record<AesType, boolean>,\n) {\n if (savedMapping?.type === 'continuous') {\n return { inheritedAes: {} };\n }\n const uniqueValues = sourceId ? uniqueValuesData[sourceId]?.list ?? [] : [];\n const mapping = savedMapping ?? createDefaultMapping(uniqueValues);\n if (!mapping.order.length) {\n return { inheritedAes: {} };\n }\n return {\n order: mapping.order.filter((v) => !mapping.hidden?.[v]),\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n inheritedAes: mapping.order.reduce((res: Record<string, any>, value) => { // TODO: remove any\n const aes = mapping.mapping[value].aes;\n res[value] = {};\n if (usedAesInMapping.fill) {\n res[value].fillColor = aes.color;\n res[value].dotFill = aes.color;\n }\n if (usedAesInMapping.stroke) {\n res[value].lineColor = aes.color;\n }\n if (usedAesInMapping.dotShape) {\n res[value].dotShape = aes.dotShape;\n }\n if (usedAesInMapping.lineType) {\n res[value].lineShape = aes.lineShape;\n }\n return res;\n }, {}),\n };\n}\n\nexport function getScatterplotAes(\n selectedSource: string,\n uniqueValuesData: UniqueValuesBySourceMap,\n dataBindAes: AestheticMappingState,\n) {\n const savedMapping = dataBindAes[selectedSource];\n if (savedMapping && !isAestheticMappingCategorical(savedMapping)) {\n return { order: [], inheritedAes: {} };\n }\n const uniqueValues = uniqueValuesData[selectedSource]?.list ?? [];\n const mapping = savedMapping ?? createDefaultMapping(uniqueValues);\n return {\n order: mapping.order,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n inheritedAes: mapping.order.reduce((res: Record<string, any>, value) => { // TODO: remove any\n const aes = mapping.mapping[value].aes;\n res[value] = {\n fillColor: aes.color,\n lineColor: aes.color,\n dotFill: aes.color,\n dotShape: aes.dotShape,\n dotSize: DEFAULT_DOT_SIZE,\n lineWidth: DEFAULT_LINE_WIDTH,\n };\n return res;\n }, {}),\n };\n}\n\nexport function getHistogramAes(\n selectedSource: string,\n uniqueValuesData: UniqueValuesBySourceMap,\n dataBindAes: AestheticMappingState,\n) {\n const savedMapping = dataBindAes[selectedSource];\n if (savedMapping && !isAestheticMappingCategorical(savedMapping)) {\n return {};\n }\n const uniqueValues = uniqueValuesData[selectedSource]?.list ?? [];\n const mapping = savedMapping ?? createDefaultMapping(uniqueValues);\n if (!mapping.order.length) {\n return { order: [], inheritedAes: {} };\n }\n return {\n order: mapping.order.filter((v) => !mapping.hidden?.[v]),\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n inheritedAes: mapping.order.reduce((res: Record<string, any>, value) => { // TODO: remove any\n const aes = mapping.mapping[value].aes;\n res[value] = {\n fillColor: aes.color,\n lineColor: DEFAULT_BLACK,\n dotFill: DEFAULT_BLACK,\n dotShape: DEFAULT_DOT_SHAPE,\n dotSize: DEFAULT_DOT_SIZE,\n lineWidth: DEFAULT_LINE_WIDTH,\n };\n return res;\n }, {}),\n };\n}\n\nexport function getDendroAes(\n selectedSource: string,\n uniqueValuesData: UniqueValuesBySourceMap,\n dataBindAes: AestheticMappingState,\n field: keyof AestheticValues,\n): Record<string, AestheticValues[keyof AestheticValues]> {\n const uniqueValues = uniqueValuesData[selectedSource]?.list ?? [];\n const mapping\n = dataBindAes[selectedSource] as AestheticMappingCategorical\n ?? createDefaultMapping(uniqueValues);\n return mapping.order.reduce(\n (res: Record<string, AestheticValues[keyof AestheticValues]>, value) => {\n const aes = mapping.mapping[value].aes;\n res[value] = aes[field] as string;\n return res;\n },\n {},\n );\n}\n"],"names":["isAestheticMappingContinuous","v","isAestheticMappingCategorical","isAestheticMapping","DEFAULT_LINE_COLOR","DEFAULT_LINE_SHAPE","DEFAULT_LINE_WIDTH","DEFAULT_DOT_SHAPE","DEFAULT_DOT_SIZE","DEFAULT_DOT_SIZE_CANVAS","DEFAULT_DOT_RANGE","DEFAULT_NA_AES","DEFAULT_PALETTE","getColorScale","colors","colorStep","scaleLinear","_c","idx","createCategoricalMappingFromPalette","palette","values","PALETTE_MAP","step","colorScale","categorical","isCategorical","mapping","res","value","FIXED_LINE_TYPES","FIXES_DOT_SHAPES","INPUTS_WITH_AES_MAPPINGS","updateDataBindAes","optionsState","dataBindAes","uniqueValuesMap","inputName","selectorStates","_a","selectedSource","savedMapping","uniqueValues","updateCategoricalMapping","newUniqueValues","currentMapping","order","uniqueValuesSet","orderValuesSet","addedValues","removedValues","newOrder","newMapping","index","createContinuousMappingFromPalette","createDefaultMapping","getChartSettingsInheritedAes","uniqueValuesData","sourceId","usedAesInMapping","aes","getScatterplotAes","getHistogramAes","DEFAULT_BLACK","getDendroAes","field"],"mappings":";;AAsCO,SAASA,EAA6BC,GAA0E;AACrH,SAAOA,MAAM,QAAQ,OAAOA,KAAM,YAAY,aAAaA,KAAK,UAAUA,KAAKA,EAAE,SAAS;AAC5F;AAYO,SAASC,EAA8BD,GAA4E;AACxH,SAAOA,MAAM,QAAQ,OAAOA,KAAM,YAAY,aAAaA,KAAK,UAAUA,KAAKA,EAAE,SAAS;AAC5F;AAEO,SAASE,EAAmBF,GAA8F;AAC/H,SAAOC,EAA8BD,CAAC,KAAKD,EAA6BC,CAAC;AAC3E;AAkBO,MAAMG,IAAqB,WACrBC,IAA+B,SAC/BC,IAAqB,GACrBC,IAA8B,MAC9BC,IAAmB,GACnBC,IAA0B,GAC1BC,IAAiC,EAAE,KAAK,GAAG,KAAK,GAAA,GAEhDC,IAAiB;AAAA,EAC5B,OAAO;AAAA,EACP,WAAWN;AAAA,EACX,UAAUE;AACZ,GACMK,IAA2B;AAEjC,SAASC,EAAcC,GAAkB;AACvC,QAAMC,IAAY,KAAKD,EAAO,SAAS;AACvC,SAAOE,EAAA,EACJ,OAAOF,EAAO,IAAI,CAACG,GAAIC,MAAQA,IAAMH,CAAS,CAAC,EAC/C,MAAMD,CAAM;AACjB;AAEO,SAASK,EACdC,GACAC,GAC6B;AAC7B,QAAMP,IAASQ,EAAYF,CAAO,EAAE,QAC9BG,IAAOF,EAAO,SAAS,IAAI,KAAKA,EAAO,SAAS,KAAK,GACrDG,IAAaX,EAAcC,CAAM,GAEjCW,IAAcC,EAAcN,CAAO,GACnCO,IAAUN,EAAO,OAAO,CAACO,GAA6BC,GAAOX,OACjEU,EAAIC,CAAK,IAAI;AAAA,IACX,UAAUJ,IAAcP,IAAMA,IAAMK;AAAA,IACpC,KAAK;AAAA,MACH,OAAOE,IACHX,EAAOI,IAAMJ,EAAO,MAAM,IAC1BU,EAAWN,IAAMK,CAAI;AAAA,MACzB,WAAWO,EAAiBZ,IAAMY,EAAiB,MAAM;AAAA,MACzD,UAAUC,EAAiBb,IAAMa,EAAiB,MAAM;AAAA,IAAA;AAAA,EAC1D,GAEKH,IACN,CAAA,CAAE;AACL,SAAO;AAAA,IACL,MAAM;AAAA,IACN,SAAAR;AAAA,IACA,OAAOT;AAAA,IACP,OAAOU;AAAA,IACP,QAAQ,CAAA;AAAA,IACR,SAAAM;AAAA,EAAA;AAEJ;AAEA,MAAMK,IAA2B;AAAA,EAC/B;AAAA,EAAmB;AAAA;AAAA,EACnB;AAAA,EAAY;AAAA;AAAA,EACZ;AAAA,EAAa;AAAA,EAAa;AAAA,EAAa;AAAA;AACzC;AACO,SAASC,EACdC,GACAC,GACAC,GACA;AACA,EAAAJ,EAAyB,QAAQ,CAACK,MAAc;;AAC9C,UAAMC,KAAiBC,IAAAL,EAAa,WAAWG,CAA6B,MAArD,gBAAAE,EAAwD;AAC/E,IAAAD,KAAA,QAAAA,EAAgB,QAAQ,CAAC,EAAE,gBAAAE,QAAqB;;AAC9C,YAAMC,IAAeN,EAAYK,CAAc,GACzCE,KAAeH,IAAAH,EAAgBI,CAAc,MAA9B,gBAAAD,EAAiC;AACtD,MAAIE,KAAgBC,KAAgBxC,EAA8BuC,CAAY,MAC5EN,EAAYK,CAAc,IAAIG,EAAyBD,GAAcD,CAAY;AAAA,IAErF;AAAA,EACF,CAAC;AACH;AAEO,SAASE,EACdC,GACAC,GAC6B;AAC7B,QAAM,EAAE,SAAAzB,GAAS,OAAA0B,GAAO,SAAAnB,EAAA,IAAYkB,GAC9BE,IAAkB,IAAI,IAAIH,CAAe,GACzCI,IAAiB,IAAI,IAAIF,CAAK,GAC9BG,IAAwBL,EAAgB,OAAO,CAAC3C,MAAM,CAAC+C,EAAe,IAAI/C,CAAC,CAAC,GAC5EiD,IAA0BJ,EAAM,OAAO,CAAC7C,MAAM,CAAC8C,EAAgB,IAAI9C,CAAW,CAAC;AACrF,MAAI,CAACgD,EAAY,UAAU,CAACC,EAAc;AACxC,WAAOL;AAET,QAAMM,IAAW,CAAC,GAAGP,CAAe,GAC9BQ,IAAa,EAAE,GAAGzB,EAAA,GAClBb,IAASQ,EAAYF,CAAO,EAAE;AACpC,SAAA6B,EAAY,QAAQ,CAAChD,GAAGiB,MAAQ;AAC9B,UAAMmC,IAAQnC,KAAO4B,EAAM,SAASnB,EAAQmB,EAAMA,EAAM,SAAS,CAAC,CAAC,EAAE,WAAW,IAAI;AACpF,IAAAM,EAAWnD,CAAC,IAAI;AAAA,MACd,UAAUoD;AAAA,MACV,KAAK;AAAA,QACH,OAAOvC,EAAOuC,IAAQvC,EAAO,MAAM;AAAA,QACnC,WAAWgB,EAAiBuB,IAAQvB,EAAiB,MAAM;AAAA,QAC3D,UAAUC,EAAiBsB,IAAQtB,EAAiB,MAAM;AAAA,MAAA;AAAA,IAC5D;AAAA,EAEJ,CAAC,GACDmB,EAAc,QAAQ,CAACjD,MAAM;AAC3B,IAAImD,EAAWnD,CAAC,KACd,OAAOmD,EAAWnD,CAAC;AAAA,EAEvB,CAAC,GAEM,EAAE,GAAG4C,GAAgB,OAAOM,GAAU,SAASC,EAAA;AACxD;AACO,SAASE,EAAmClC,GAAwD;AACzG,SAAO;AAAA,IACL,MAAM;AAAA,IACN,SAAAA;AAAA,IACA,OAAOT;AAAA,IACP,OAAO;AAAA,IACP,UAAU;AAAA,IACV,KAAK;AAAA,EAAA;AAET;AAEO,SAAS4C,EACdlC,GAC6B;AAC7B,SAAOF,EAAoCP,GAAiBS,CAAM;AACpE;AASO,SAASmC,EACdC,GACAhB,GACAiB,GACAC,GACA;;AACA,OAAIlB,KAAA,gBAAAA,EAAc,UAAS;AACzB,WAAO,EAAE,cAAc,GAAC;AAE1B,QAAMC,IAAegB,MAAWnB,IAAAkB,EAAiBC,CAAQ,MAAzB,gBAAAnB,EAA4B,SAAQ,CAAA,IAAK,CAAA,GACnEZ,IAAUc,KAAgBc,EAAqBb,CAAY;AACjE,SAAKf,EAAQ,MAAM,SAGZ;AAAA,IACL,OAAOA,EAAQ,MAAM,OAAO,CAAC1B;;AAAM,gBAACsC,IAAAZ,EAAQ,WAAR,QAAAY,EAAiBtC;AAAA,KAAE;AAAA;AAAA,IAEvD,cAAc0B,EAAQ,MAAM,OAAO,CAACC,GAA0BC,MAAU;AACtE,YAAM+B,IAAMjC,EAAQ,QAAQE,CAAK,EAAE;AACnC,aAAAD,EAAIC,CAAK,IAAI,CAAA,GACT8B,EAAiB,SACnB/B,EAAIC,CAAK,EAAE,YAAY+B,EAAI,OAC3BhC,EAAIC,CAAK,EAAE,UAAU+B,EAAI,QAEvBD,EAAiB,WACnB/B,EAAIC,CAAK,EAAE,YAAY+B,EAAI,QAEzBD,EAAiB,aACnB/B,EAAIC,CAAK,EAAE,WAAW+B,EAAI,WAExBD,EAAiB,aACnB/B,EAAIC,CAAK,EAAE,YAAY+B,EAAI,YAEtBhC;AAAA,IACT,GAAG,CAAA,CAAE;AAAA,EAAA,IAtBE,EAAE,cAAc,GAAC;AAwB5B;AAEO,SAASiC,EACdrB,GACAiB,GACAtB,GACA;;AACA,QAAMM,IAAeN,EAAYK,CAAc;AAC/C,MAAIC,KAAgB,CAACvC,EAA8BuC,CAAY;AAC7D,WAAO,EAAE,OAAO,IAAI,cAAc,CAAA,EAAC;AAErC,QAAMC,MAAeH,IAAAkB,EAAiBjB,CAAc,MAA/B,gBAAAD,EAAkC,SAAQ,CAAA,GACzDZ,IAAUc,KAAgBc,EAAqBb,CAAY;AACjE,SAAO;AAAA,IACL,OAAOf,EAAQ;AAAA;AAAA,IAEf,cAAcA,EAAQ,MAAM,OAAO,CAACC,GAA0BC,MAAU;AACtE,YAAM+B,IAAMjC,EAAQ,QAAQE,CAAK,EAAE;AACnC,aAAAD,EAAIC,CAAK,IAAI;AAAA,QACX,WAAW+B,EAAI;AAAA,QACf,WAAWA,EAAI;AAAA,QACf,SAASA,EAAI;AAAA,QACb,UAAUA,EAAI;AAAA,QACd,SAASpD;AAAA,QACT,WAAWF;AAAA,MAAA,GAENsB;AAAA,IACT,GAAG,CAAA,CAAE;AAAA,EAAA;AAET;AAEO,SAASkC,EACdtB,GACAiB,GACAtB,GACA;;AACA,QAAMM,IAAeN,EAAYK,CAAc;AAC/C,MAAIC,KAAgB,CAACvC,EAA8BuC,CAAY;AAC7D,WAAO,CAAA;AAET,QAAMC,MAAeH,IAAAkB,EAAiBjB,CAAc,MAA/B,gBAAAD,EAAkC,SAAQ,CAAA,GACzDZ,IAAUc,KAAgBc,EAAqBb,CAAY;AACjE,SAAKf,EAAQ,MAAM,SAGZ;AAAA,IACL,OAAOA,EAAQ,MAAM,OAAO,CAAC1B;;AAAM,gBAACsC,IAAAZ,EAAQ,WAAR,QAAAY,EAAiBtC;AAAA,KAAE;AAAA;AAAA,IAEvD,cAAc0B,EAAQ,MAAM,OAAO,CAACC,GAA0BC,MAAU;AACtE,YAAM+B,IAAMjC,EAAQ,QAAQE,CAAK,EAAE;AACnC,aAAAD,EAAIC,CAAK,IAAI;AAAA,QACX,WAAW+B,EAAI;AAAA,QACf,WAAWG;AAAA,QACX,SAASA;AAAA,QACT,UAAUxD;AAAA,QACV,SAASC;AAAA,QACT,WAAWF;AAAA,MAAA,GAENsB;AAAA,IACT,GAAG,CAAA,CAAE;AAAA,EAAA,IAhBE,EAAE,OAAO,IAAI,cAAc,CAAA,EAAC;AAkBvC;AAEO,SAASoC,EACdxB,GACAiB,GACAtB,GACA8B,GACwD;;AACxD,QAAMvB,MAAeH,IAAAkB,EAAiBjB,CAAc,MAA/B,gBAAAD,EAAkC,SAAQ,CAAA,GACzDZ,IACFQ,EAAYK,CAAc,KACvBe,EAAqBb,CAAY;AACxC,SAAOf,EAAQ,MAAM;AAAA,IACnB,CAACC,GAA6DC,MAAU;AACtE,YAAM+B,IAAMjC,EAAQ,QAAQE,CAAK,EAAE;AACnC,aAAAD,EAAIC,CAAK,IAAI+B,EAAIK,CAAK,GACfrC;AAAA,IACT;AAAA,IACA,CAAA;AAAA,EAAC;AAEL;"}
|
|
1
|
+
{"version":3,"file":"dataBindAes.js","sources":["../src/dataBindAes.ts"],"sourcesContent":["import type { InputState } from '@milaboratories/pf-plots';\nimport { scaleLinear } from 'd3-scale';\nimport type {\n ContinuousPalette,\n DotShape,\n LineType,\n Palette,\n} from './components/AesSettings/types';\nimport {\n DEFAULT_BLACK,\n FIXED_LINE_TYPES,\n FIXES_DOT_SHAPES,\n isCategorical,\n PALETTE_MAP,\n} from './constantsAesthetic';\nimport type { AesType, ContinuousDataMappingSize, NumberRange } from './constantsCommon';\nimport type { UniqueValuesBySourceMap } from './types';\n\nexport type AestheticMappingState = Record<string, AestheticMapping>;\nexport type AestheticMapping =\n | AestheticMappingContinuous\n | AestheticMappingCategorical;\n\ninterface MappingRange {\n maxValue: number | null;\n minValue: number | null;\n}\n\n/** Mapping for continuous axes (numerical axes) */\nexport interface AestheticMappingContinuous {\n type: 'continuous';\n palette: ContinuousPalette;\n range: MappingRange | null;\n midPoint: number | null;\n log: boolean;\n naAes: AestheticValues;\n}\n\nexport function isAestheticMappingContinuous(v: unknown | AestheticMappingContinuous): v is AestheticMappingContinuous {\n return v !== null && typeof v === 'object' && 'palette' in v && 'type' in v && v.type === 'continuous';\n}\n\n/** Mapping for categorical axes (string axes) */\nexport interface AestheticMappingCategorical {\n type: 'categorical';\n palette: Palette;\n naAes: AestheticValues;\n order: string[];\n hidden?: Record<string, boolean>;\n mapping: AestheticMappingRecord;\n}\n\nexport function isAestheticMappingCategorical(v: unknown | AestheticMappingCategorical): v is AestheticMappingCategorical {\n return v !== null && typeof v === 'object' && 'palette' in v && 'type' in v && v.type === 'categorical';\n}\n\nexport function isAestheticMapping(v: unknown | AestheticMappingContinuous | AestheticMappingCategorical): v is AestheticMapping {\n return isAestheticMappingCategorical(v) || isAestheticMappingContinuous(v);\n}\n\n// key - column value, colorIdx - idx of color (if palette is categorical) of percent value of colors gradient (if palette is continuous)\ntype AestheticMappingRecord = Record<\n string | number,\n {\n aes: Partial<AestheticValues>;\n colorIdx: number;\n }\n>;\n\ninterface AestheticValues {\n /** Number to retrieve the color from pallet, string to represent specific color as hex */\n color: string;\n lineShape: LineType;\n dotShape: DotShape;\n}\n\nexport const DEFAULT_LINE_COLOR = '#110529';\nexport const DEFAULT_LINE_SHAPE: LineType = 'solid';\nexport const DEFAULT_LINE_WIDTH = 1;\nexport const DEFAULT_DOT_SHAPE: DotShape = '21'; // colored circle, shape number as in R\nexport const DEFAULT_DOT_SIZE = 3; // radius;\nexport const DEFAULT_DOT_SIZE_CANVAS = 2;\nexport const DEFAULT_DOT_RANGE: NumberRange = { min: 3, max: 10 }; // radius;\n\nexport const DEFAULT_NA_AES = {\n color: '#ccc',\n lineShape: DEFAULT_LINE_SHAPE as LineType,\n dotShape: DEFAULT_DOT_SHAPE as DotShape,\n};\n\nfunction getColorScale(colors: string[]) {\n const colorStep = 1 / (colors.length - 1);\n return scaleLinear<string, string>()\n .domain(colors.map((_c, idx) => idx * colorStep))\n .range(colors);\n}\n\nexport function createCategoricalMappingFromPalette(\n palette: Palette,\n values: string[],\n): AestheticMappingCategorical {\n const colors = PALETTE_MAP[palette].colors;\n const step = values.length > 1 ? 1 / (values.length - 1) : 0;\n const colorScale = getColorScale(colors);\n\n const categorical = isCategorical(palette);\n const mapping = values.reduce((res: AestheticMappingRecord, value, idx) => {\n res[value] = {\n colorIdx: categorical ? idx : idx * step,\n aes: {\n color: categorical\n ? colors[idx % colors.length]\n : colorScale(idx * step),\n lineShape: FIXED_LINE_TYPES[idx % FIXED_LINE_TYPES.length],\n dotShape: FIXES_DOT_SHAPES[idx % FIXES_DOT_SHAPES.length],\n },\n };\n return res;\n }, {});\n return {\n type: 'categorical',\n palette: palette,\n naAes: DEFAULT_NA_AES,\n order: values,\n hidden: {},\n mapping,\n };\n}\n\nconst INPUTS_WITH_AES_MAPPINGS = [\n 'primaryGrouping', 'secondaryGrouping', // discrete charts\n 'grouping', 'shape', // scatterplot\n 'nodeColor', 'nodeShape', 'lineColor', 'heatmapAnnotation', // dendro\n];\nexport function updateDataBindAes(\n optionsState: InputState,\n dataBindAes: Record<string, AestheticMapping>,\n uniqueValuesMap: UniqueValuesBySourceMap,\n) {\n INPUTS_WITH_AES_MAPPINGS.forEach((inputName) => {\n const selectorStates = optionsState.components[inputName as keyof InputState]?.selectorStates;\n selectorStates?.forEach(({ selectedSource }) => {\n const savedMapping = dataBindAes[selectedSource];\n const uniqueValues = uniqueValuesMap[selectedSource]?.list;\n if (savedMapping && uniqueValues && isAestheticMappingCategorical(savedMapping)) {\n dataBindAes[selectedSource] = updateCategoricalMapping(uniqueValues, savedMapping);\n }\n });\n });\n}\n\nexport function updateCategoricalMapping(\n newUniqueValues: string[],\n currentMapping: AestheticMappingCategorical,\n): AestheticMappingCategorical {\n const { palette, order, mapping } = currentMapping;\n const uniqueValuesSet = new Set(newUniqueValues);\n const orderValuesSet = new Set(order);\n const addedValues: string[] = newUniqueValues.filter((v) => !orderValuesSet.has(v));\n const removedValues: string[] = order.filter((v) => !uniqueValuesSet.has(v as string));\n if (!addedValues.length && !removedValues.length) {\n return currentMapping;\n }\n const newOrder = [...newUniqueValues];\n const newMapping = { ...mapping };\n const colors = PALETTE_MAP[palette].colors;\n addedValues.forEach((v, idx) => {\n const index = idx + (order.length ? mapping[order[order.length - 1]].colorIdx + 1 : 0);\n newMapping[v] = {\n colorIdx: index,\n aes: {\n color: colors[index % colors.length],\n lineShape: FIXED_LINE_TYPES[index % FIXED_LINE_TYPES.length],\n dotShape: FIXES_DOT_SHAPES[index % FIXES_DOT_SHAPES.length],\n },\n };\n });\n removedValues.forEach((v) => {\n if (newMapping[v]) {\n delete newMapping[v];\n }\n });\n\n return { ...currentMapping, order: newOrder, mapping: newMapping } as AestheticMappingCategorical;\n}\nexport function createContinuousMappingFromPalette(palette: ContinuousPalette): AestheticMappingContinuous {\n return {\n type: 'continuous',\n palette: palette,\n naAes: DEFAULT_NA_AES,\n range: null,\n midPoint: null,\n log: false,\n };\n}\n\nexport function createDefaultMapping(\n values: string[],\n palette: Palette,\n): AestheticMappingCategorical {\n return createCategoricalMappingFromPalette(palette, values);\n}\n\nexport function createDefaultContinuousMapping(columnId: string): ContinuousDataMappingSize {\n return {\n column: columnId,\n range: DEFAULT_DOT_RANGE,\n };\n}\n\nexport function getChartSettingsInheritedAes(\n uniqueValuesData: UniqueValuesBySourceMap,\n savedMapping: AestheticMapping | undefined,\n sourceId: string | null,\n usedAesInMapping: Record<AesType, boolean>,\n palette: Palette,\n) {\n if (savedMapping?.type === 'continuous') {\n return { inheritedAes: {} };\n }\n const uniqueValues = sourceId ? uniqueValuesData[sourceId]?.list ?? [] : [];\n const mapping = savedMapping ?? createDefaultMapping(uniqueValues, palette);\n if (!mapping.order.length) {\n return { inheritedAes: {} };\n }\n return {\n order: mapping.order.filter((v) => !mapping.hidden?.[v]),\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n inheritedAes: mapping.order.reduce((res: Record<string, any>, value) => { // TODO: remove any\n const aes = mapping.mapping[value].aes;\n res[value] = {};\n if (usedAesInMapping.fill) {\n res[value].fillColor = aes.color;\n res[value].dotFill = aes.color;\n }\n if (usedAesInMapping.stroke) {\n res[value].lineColor = aes.color;\n }\n if (usedAesInMapping.dotShape) {\n res[value].dotShape = aes.dotShape;\n }\n if (usedAesInMapping.lineType) {\n res[value].lineShape = aes.lineShape;\n }\n return res;\n }, {}),\n };\n}\n\nexport function getScatterplotAes(\n selectedSource: string,\n uniqueValuesData: UniqueValuesBySourceMap,\n dataBindAes: AestheticMappingState,\n palette: Palette,\n) {\n const savedMapping = dataBindAes[selectedSource];\n if (savedMapping && !isAestheticMappingCategorical(savedMapping)) {\n return { order: [], inheritedAes: {} };\n }\n const uniqueValues = uniqueValuesData[selectedSource]?.list ?? [];\n const mapping = savedMapping ?? createDefaultMapping(uniqueValues, palette);\n return {\n order: mapping.order,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n inheritedAes: mapping.order.reduce((res: Record<string, any>, value) => { // TODO: remove any\n const aes = mapping.mapping[value].aes;\n res[value] = {\n fillColor: aes.color,\n lineColor: aes.color,\n dotFill: aes.color,\n dotShape: aes.dotShape,\n dotSize: DEFAULT_DOT_SIZE,\n lineWidth: DEFAULT_LINE_WIDTH,\n };\n return res;\n }, {}),\n };\n}\n\nexport function getHistogramAes(\n selectedSource: string,\n uniqueValuesData: UniqueValuesBySourceMap,\n dataBindAes: AestheticMappingState,\n palette: Palette,\n) {\n const savedMapping = dataBindAes[selectedSource];\n if (savedMapping && !isAestheticMappingCategorical(savedMapping)) {\n return {};\n }\n const uniqueValues = uniqueValuesData[selectedSource]?.list ?? [];\n const mapping = savedMapping ?? createDefaultMapping(uniqueValues, palette);\n if (!mapping.order.length) {\n return { order: [], inheritedAes: {} };\n }\n return {\n order: mapping.order.filter((v) => !mapping.hidden?.[v]),\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n inheritedAes: mapping.order.reduce((res: Record<string, any>, value) => { // TODO: remove any\n const aes = mapping.mapping[value].aes;\n res[value] = {\n fillColor: aes.color,\n lineColor: DEFAULT_BLACK,\n dotFill: DEFAULT_BLACK,\n dotShape: DEFAULT_DOT_SHAPE,\n dotSize: DEFAULT_DOT_SIZE,\n lineWidth: DEFAULT_LINE_WIDTH,\n };\n return res;\n }, {}),\n };\n}\n\nexport function getDendroAes(\n selectedSource: string,\n uniqueValuesData: UniqueValuesBySourceMap,\n dataBindAes: AestheticMappingState,\n field: keyof AestheticValues,\n palette: Palette,\n): Record<string, AestheticValues[keyof AestheticValues]> {\n const uniqueValues = uniqueValuesData[selectedSource]?.list ?? [];\n const mapping\n = dataBindAes[selectedSource] as AestheticMappingCategorical\n ?? createDefaultMapping(uniqueValues, palette);\n return mapping.order.reduce(\n (res: Record<string, AestheticValues[keyof AestheticValues]>, value) => {\n const aes = mapping.mapping[value].aes;\n res[value] = aes[field] as string;\n return res;\n },\n {},\n );\n}\n"],"names":["isAestheticMappingContinuous","v","isAestheticMappingCategorical","isAestheticMapping","DEFAULT_LINE_COLOR","DEFAULT_LINE_SHAPE","DEFAULT_LINE_WIDTH","DEFAULT_DOT_SHAPE","DEFAULT_DOT_SIZE","DEFAULT_DOT_SIZE_CANVAS","DEFAULT_DOT_RANGE","DEFAULT_NA_AES","getColorScale","colors","colorStep","scaleLinear","_c","idx","createCategoricalMappingFromPalette","palette","values","PALETTE_MAP","step","colorScale","categorical","isCategorical","mapping","res","value","FIXED_LINE_TYPES","FIXES_DOT_SHAPES","INPUTS_WITH_AES_MAPPINGS","updateDataBindAes","optionsState","dataBindAes","uniqueValuesMap","inputName","selectorStates","_a","selectedSource","savedMapping","uniqueValues","updateCategoricalMapping","newUniqueValues","currentMapping","order","uniqueValuesSet","orderValuesSet","addedValues","removedValues","newOrder","newMapping","index","createContinuousMappingFromPalette","createDefaultMapping","getChartSettingsInheritedAes","uniqueValuesData","sourceId","usedAesInMapping","aes","getScatterplotAes","getHistogramAes","DEFAULT_BLACK","getDendroAes","field"],"mappings":"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"}
|