@milaboratories/graph-maker 1.1.147 → 1.1.149
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/dataBindAes.js +44 -44
- package/dist/GraphMaker/dataBindAes.js.map +1 -1
- package/dist/GraphMaker/utils/loadUniqueValuesToSave.d.ts.map +1 -1
- package/dist/GraphMaker/utils/loadUniqueValuesToSave.js +12 -12
- package/dist/GraphMaker/utils/loadUniqueValuesToSave.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/discrete/components/layers/StackedAreaElement.js +49 -49
- package/dist/node_modules/@milaboratories/miplots4/dist/discrete/components/layers/StackedAreaElement.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot-umap/ChartRenderer.js +112 -108
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot-umap/ChartRenderer.js.map +1 -1
- package/package.json +2 -2
|
@@ -16,17 +16,17 @@ const j = "#110529", I = "solid", m = 1, T = "21", D = 3, q = 2, k = { min: 3, m
|
|
|
16
16
|
}, N = "light";
|
|
17
17
|
function O(t) {
|
|
18
18
|
const r = 1 / (t.length - 1);
|
|
19
|
-
return y().domain(t.map((a,
|
|
19
|
+
return y().domain(t.map((a, o) => o * r)).range(t);
|
|
20
20
|
}
|
|
21
21
|
function U(t, r) {
|
|
22
|
-
const a = _[t].colors,
|
|
23
|
-
colorIdx: i ? c : c *
|
|
22
|
+
const a = _[t].colors, o = r.length > 1 ? 1 / (r.length - 1) : 0, s = O(a), i = F(t), l = r.reduce((n, e, c) => (n[e] = {
|
|
23
|
+
colorIdx: i ? c : c * o,
|
|
24
24
|
aes: {
|
|
25
|
-
color: i ? a[c % a.length] : s(c *
|
|
25
|
+
color: i ? a[c % a.length] : s(c * o),
|
|
26
26
|
lineShape: g[c % g.length],
|
|
27
27
|
dotShape: u[c % u.length]
|
|
28
28
|
}
|
|
29
|
-
},
|
|
29
|
+
}, n), {});
|
|
30
30
|
return {
|
|
31
31
|
type: "categorical",
|
|
32
32
|
palette: t,
|
|
@@ -50,26 +50,26 @@ const V = [
|
|
|
50
50
|
// dendro
|
|
51
51
|
];
|
|
52
52
|
function w(t, r, a) {
|
|
53
|
-
V.forEach((
|
|
53
|
+
V.forEach((o) => {
|
|
54
54
|
var i;
|
|
55
|
-
const s = (i = t.components[
|
|
55
|
+
const s = (i = t.components[o]) == null ? void 0 : i.selectorStates;
|
|
56
56
|
s == null || s.forEach(({ selectedSource: l }) => {
|
|
57
57
|
var c;
|
|
58
|
-
const
|
|
59
|
-
|
|
58
|
+
const n = r[l], e = (c = a[l]) == null ? void 0 : c.list;
|
|
59
|
+
n && e && f(n) && (r[l] = H(e, n));
|
|
60
60
|
});
|
|
61
|
-
}), Object.keys(r).forEach((
|
|
62
|
-
a[
|
|
61
|
+
}), Object.keys(r).forEach((o) => {
|
|
62
|
+
a[o] || delete r[o];
|
|
63
63
|
});
|
|
64
64
|
}
|
|
65
65
|
function H(t, r) {
|
|
66
|
-
const { palette: a, order:
|
|
67
|
-
if (!
|
|
66
|
+
const { palette: a, order: o, mapping: s } = r, i = new Set(t), l = new Set(o), n = t.filter((p) => !l.has(p)), e = o.filter((p) => !i.has(p));
|
|
67
|
+
if (!n.length && !e.length)
|
|
68
68
|
return r;
|
|
69
69
|
let c = [...t];
|
|
70
70
|
const h = { ...s }, E = _[a].colors;
|
|
71
|
-
return
|
|
72
|
-
const d = L + s[
|
|
71
|
+
return n.forEach((p, L) => {
|
|
72
|
+
const d = L + (o.length ? s[o[o.length - 1]].colorIdx + 1 : 0);
|
|
73
73
|
h[p] = {
|
|
74
74
|
colorIdx: d,
|
|
75
75
|
aes: {
|
|
@@ -78,7 +78,7 @@ function H(t, r) {
|
|
|
78
78
|
dotShape: u[d % u.length]
|
|
79
79
|
}
|
|
80
80
|
};
|
|
81
|
-
}),
|
|
81
|
+
}), e.forEach((p) => {
|
|
82
82
|
h[p] && delete h[p];
|
|
83
83
|
}), { ...r, order: c, mapping: h };
|
|
84
84
|
}
|
|
@@ -95,74 +95,74 @@ function z(t) {
|
|
|
95
95
|
function A(t) {
|
|
96
96
|
return U(N, t);
|
|
97
97
|
}
|
|
98
|
-
function M(t, r, a,
|
|
98
|
+
function M(t, r, a, o) {
|
|
99
99
|
var l;
|
|
100
100
|
if ((r == null ? void 0 : r.type) === "continuous")
|
|
101
101
|
return { inheritedAes: {} };
|
|
102
102
|
const s = a ? ((l = t[a]) == null ? void 0 : l.list) ?? [] : [], i = r ?? A(s);
|
|
103
103
|
return i.order.length ? {
|
|
104
|
-
order: i.order.filter((
|
|
105
|
-
var
|
|
106
|
-
return !((
|
|
104
|
+
order: i.order.filter((n) => {
|
|
105
|
+
var e;
|
|
106
|
+
return !((e = i.hidden) != null && e[n]);
|
|
107
107
|
}),
|
|
108
|
-
inheritedAes: i.order.reduce((
|
|
109
|
-
const c = i.mapping[
|
|
110
|
-
return
|
|
108
|
+
inheritedAes: i.order.reduce((n, e) => {
|
|
109
|
+
const c = i.mapping[e].aes;
|
|
110
|
+
return n[e] = {}, o.fill && (n[e].fillColor = c.color, n[e].dotFill = c.color), o.stroke && (n[e].lineColor = c.color), o.dotShape && (n[e].dotShape = c.dotShape), o.lineType && (n[e].lineShape = c.lineShape), n;
|
|
111
111
|
}, {})
|
|
112
112
|
} : { inheritedAes: {} };
|
|
113
113
|
}
|
|
114
114
|
function R(t, r, a) {
|
|
115
115
|
var l;
|
|
116
|
-
const
|
|
117
|
-
if (
|
|
116
|
+
const o = a[t];
|
|
117
|
+
if (o && !f(o))
|
|
118
118
|
return { order: [], inheritedAes: {} };
|
|
119
|
-
const s = ((l = r[t]) == null ? void 0 : l.list) ?? [], i =
|
|
119
|
+
const s = ((l = r[t]) == null ? void 0 : l.list) ?? [], i = o ?? A(s);
|
|
120
120
|
return {
|
|
121
121
|
order: i.order,
|
|
122
|
-
inheritedAes: i.order.reduce((
|
|
123
|
-
const c = i.mapping[
|
|
124
|
-
return
|
|
122
|
+
inheritedAes: i.order.reduce((n, e) => {
|
|
123
|
+
const c = i.mapping[e].aes;
|
|
124
|
+
return n[e] = {
|
|
125
125
|
fillColor: c.color,
|
|
126
126
|
lineColor: c.color,
|
|
127
127
|
dotFill: c.color,
|
|
128
128
|
dotShape: c.dotShape,
|
|
129
129
|
dotSize: D,
|
|
130
130
|
lineWidth: m
|
|
131
|
-
},
|
|
131
|
+
}, n;
|
|
132
132
|
}, {})
|
|
133
133
|
};
|
|
134
134
|
}
|
|
135
135
|
function X(t, r, a) {
|
|
136
136
|
var l;
|
|
137
|
-
const
|
|
138
|
-
if (
|
|
137
|
+
const o = a[t];
|
|
138
|
+
if (o && !f(o))
|
|
139
139
|
return {};
|
|
140
|
-
const s = ((l = r[t]) == null ? void 0 : l.list) ?? [], i =
|
|
140
|
+
const s = ((l = r[t]) == null ? void 0 : l.list) ?? [], i = o ?? A(s);
|
|
141
141
|
return i.order.length ? {
|
|
142
|
-
order: i.order.filter((
|
|
143
|
-
var
|
|
144
|
-
return !((
|
|
142
|
+
order: i.order.filter((n) => {
|
|
143
|
+
var e;
|
|
144
|
+
return !((e = i.hidden) != null && e[n]);
|
|
145
145
|
}),
|
|
146
|
-
inheritedAes: i.order.reduce((
|
|
147
|
-
const c = i.mapping[
|
|
148
|
-
return
|
|
146
|
+
inheritedAes: i.order.reduce((n, e) => {
|
|
147
|
+
const c = i.mapping[e].aes;
|
|
148
|
+
return n[e] = {
|
|
149
149
|
fillColor: c.color,
|
|
150
150
|
lineColor: S,
|
|
151
151
|
dotFill: S,
|
|
152
152
|
dotShape: T,
|
|
153
153
|
dotSize: D,
|
|
154
154
|
lineWidth: m
|
|
155
|
-
},
|
|
155
|
+
}, n;
|
|
156
156
|
}, {})
|
|
157
157
|
} : { order: [], inheritedAes: {} };
|
|
158
158
|
}
|
|
159
|
-
function Z(t, r, a,
|
|
159
|
+
function Z(t, r, a, o) {
|
|
160
160
|
var l;
|
|
161
161
|
const s = ((l = r[t]) == null ? void 0 : l.list) ?? [], i = a[t] ?? A(s);
|
|
162
162
|
return i.order.reduce(
|
|
163
|
-
(
|
|
164
|
-
const c = i.mapping[
|
|
165
|
-
return
|
|
163
|
+
(n, e) => {
|
|
164
|
+
const c = i.mapping[e].aes;
|
|
165
|
+
return n[e] = c[o], n;
|
|
166
166
|
},
|
|
167
167
|
{}
|
|
168
168
|
);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dataBindAes.js","sources":["../../src/GraphMaker/dataBindAes.ts"],"sourcesContent":["import { InputState } from '@milaboratories/pf-plots';\nimport { scaleLinear } from 'd3-scale';\nimport {\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 { AesType, ContinuousDataMappingSize, NumberRange } from './constantsCommon';\nimport { 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 Object.keys(dataBindAes).forEach((selectedSource) => {\n if (!uniqueValuesMap[selectedSource]) {\n delete dataBindAes[selectedSource];\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 let newOrder = [...newUniqueValues];\n const newMapping = {...mapping};\n const colors = PALETTE_MAP[palette].colors;\n addedValues.forEach((v, idx) => {\n const index = idx + mapping[order[order.length - 1]].colorIdx + 1;\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 inheritedAes: mapping.order.reduce((res: Record<string, any>, value) => {\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 inheritedAes: mapping.order.reduce((res: Record<string, any>, value) => {\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 inheritedAes: mapping.order.reduce((res: Record<string, any>, value) => {\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":"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"}
|
|
1
|
+
{"version":3,"file":"dataBindAes.js","sources":["../../src/GraphMaker/dataBindAes.ts"],"sourcesContent":["import { InputState } from '@milaboratories/pf-plots';\nimport { scaleLinear } from 'd3-scale';\nimport {\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 { AesType, ContinuousDataMappingSize, NumberRange } from './constantsCommon';\nimport { 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 Object.keys(dataBindAes).forEach((selectedSource) => {\n if (!uniqueValuesMap[selectedSource]) {\n delete dataBindAes[selectedSource];\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 let 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 inheritedAes: mapping.order.reduce((res: Record<string, any>, value) => {\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 inheritedAes: mapping.order.reduce((res: Record<string, any>, value) => {\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 inheritedAes: mapping.order.reduce((res: Record<string, any>, value) => {\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":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loadUniqueValuesToSave.d.ts","sourceRoot":"","sources":["../../../src/GraphMaker/utils/loadUniqueValuesToSave.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAoB,MAAM,UAAU,CAAC;AACrE,OAAO,EACL,UAAU,EACV,aAAa,EACb,UAAU,EACV,UAAU,EACV,mBAAmB,EAEpB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAqBnD,wBAAsB,iCAAiC,CACrD,SAAS,EAAE,mBAAmB,EAC9B,UAAU,EAAE,UAAU,CAAC,UAAU,CAAC,EAClC,UAAU,EAAE,UAAU,CAAC,UAAU,CAAC,EAClC,SAAS,EAAE,aAAa,EACxB,oBAAoB,EAAE,uBAAuB,GAC5C,OAAO,CAAC,uBAAuB,CAAC,CAoHlC;AACD,wBAAsB,sBAAsB,CAC1C,YAAY,EAAE,UAAU,CAAC,YAAY,CAAC,EACtC,UAAU,EAAE,UAAU,CAAC,UAAU,CAAC,EAClC,UAAU,EAAE,UAAU,CAAC,UAAU,CAAC,EAClC,SAAS,EAAE,aAAa,EACxB,oBAAoB,EAAE,uBAAuB,GAC7C,OAAO,CAAC,uBAAuB,CAAC,
|
|
1
|
+
{"version":3,"file":"loadUniqueValuesToSave.d.ts","sourceRoot":"","sources":["../../../src/GraphMaker/utils/loadUniqueValuesToSave.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAoB,MAAM,UAAU,CAAC;AACrE,OAAO,EACL,UAAU,EACV,aAAa,EACb,UAAU,EACV,UAAU,EACV,mBAAmB,EAEpB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAqBnD,wBAAsB,iCAAiC,CACrD,SAAS,EAAE,mBAAmB,EAC9B,UAAU,EAAE,UAAU,CAAC,UAAU,CAAC,EAClC,UAAU,EAAE,UAAU,CAAC,UAAU,CAAC,EAClC,SAAS,EAAE,aAAa,EACxB,oBAAoB,EAAE,uBAAuB,GAC5C,OAAO,CAAC,uBAAuB,CAAC,CAoHlC;AACD,wBAAsB,sBAAsB,CAC1C,YAAY,EAAE,UAAU,CAAC,YAAY,CAAC,EACtC,UAAU,EAAE,UAAU,CAAC,UAAU,CAAC,EAClC,UAAU,EAAE,UAAU,CAAC,UAAU,CAAC,EAClC,SAAS,EAAE,aAAa,EACxB,oBAAoB,EAAE,uBAAuB,GAC7C,OAAO,CAAC,uBAAuB,CAAC,CAyDjC;AAED,wBAAsB,wBAAwB,CAC5C,YAAY,EAAE,UAAU,CAAC,YAAY,CAAC,EACtC,UAAU,EAAE,UAAU,CAAC,UAAU,CAAC,EAClC,UAAU,EAAE,UAAU,CAAC,UAAU,CAAC,EAClC,SAAS,EAAE,aAAa,GACxB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAuBpC"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { AXIS_NATURE_KEY as
|
|
2
|
-
const A = 100, T = ["primaryGrouping", "secondaryGrouping"], y = ["grouping"], I = ["x", "y"], R = ["grouping"],
|
|
1
|
+
import { AXIS_NATURE_KEY as v } from "../constantsCommon.js";
|
|
2
|
+
const A = 100, T = ["primaryGrouping", "secondaryGrouping"], y = ["grouping"], I = ["x", "y"], R = ["grouping"], b = [
|
|
3
3
|
"nodeColor",
|
|
4
4
|
"nodeShape",
|
|
5
5
|
"lineColor",
|
|
6
6
|
"heatmapAnnotation"
|
|
7
7
|
// dendro
|
|
8
|
-
],
|
|
9
|
-
async function m(o, a, _,
|
|
8
|
+
], d = (o) => o.sort((a, _) => a.label.localeCompare(_.label, "en", { numeric: !0 }));
|
|
9
|
+
async function m(o, a, _, g, f) {
|
|
10
10
|
const u = {};
|
|
11
11
|
function i(s, e) {
|
|
12
12
|
const t = o.data.byColumns.values[s], n = e ? o.data.byColumns.values[e] : null, S = /* @__PURE__ */ new Set(), p = [];
|
|
@@ -22,9 +22,9 @@ async function m(o, a, _, v, f) {
|
|
|
22
22
|
const E = n ? String(n[l]) : r;
|
|
23
23
|
p.push({ value: r, label: E });
|
|
24
24
|
}
|
|
25
|
-
|
|
25
|
+
d(p), u[s] = {
|
|
26
26
|
list: p.map((l) => l.value),
|
|
27
|
-
labels: p.reduce((l, r) => (l[r.value] = r.
|
|
27
|
+
labels: p.reduce((l, r) => (l[r.value] = r.label, l), {}),
|
|
28
28
|
options: p
|
|
29
29
|
};
|
|
30
30
|
}
|
|
@@ -46,7 +46,7 @@ async function m(o, a, _, v, f) {
|
|
|
46
46
|
})), o.settings.type === "histogram" && R.forEach((s) => {
|
|
47
47
|
const e = o.settings[s];
|
|
48
48
|
e && i(e.value, e.valueLabels);
|
|
49
|
-
}), o.settings.type === "dendro" &&
|
|
49
|
+
}), o.settings.type === "dendro" && b.forEach((s) => {
|
|
50
50
|
const e = o.settings[s];
|
|
51
51
|
e && i(e.value, e.valueLabels);
|
|
52
52
|
});
|
|
@@ -54,14 +54,14 @@ async function m(o, a, _, v, f) {
|
|
|
54
54
|
[...a.freeOptionsSet].forEach((s) => {
|
|
55
55
|
var t, n, S;
|
|
56
56
|
const e = a.getSourceInfo(s);
|
|
57
|
-
e.kind === "axis" && ((t = e.annotations) != null && t[
|
|
57
|
+
e.kind === "axis" && ((t = e.annotations) != null && t[v]) && ((n = e.annotations) == null ? void 0 : n[v]) !== "homogeneous" && ((S = e.annotations) == null ? void 0 : S[v]) !== "homogenous" && c.push(s);
|
|
58
58
|
});
|
|
59
59
|
for (const s of c)
|
|
60
60
|
if (!u[s]) {
|
|
61
61
|
if (f[s] && !u[s])
|
|
62
62
|
u[s] = f[s];
|
|
63
|
-
else if (
|
|
64
|
-
const e = await _.getUniqueSourceValuesWithLabels(
|
|
63
|
+
else if (g) {
|
|
64
|
+
const e = await _.getUniqueSourceValuesWithLabels(g, a, s, A);
|
|
65
65
|
e.overflow ? u[s] = null : u[s] = {
|
|
66
66
|
list: e.values.map((t) => t.value),
|
|
67
67
|
options: e.values,
|
|
@@ -71,7 +71,7 @@ async function m(o, a, _, v, f) {
|
|
|
71
71
|
}
|
|
72
72
|
return u;
|
|
73
73
|
}
|
|
74
|
-
async function N(o, a, _,
|
|
74
|
+
async function N(o, a, _, g) {
|
|
75
75
|
const f = [];
|
|
76
76
|
["filters", "tabBy"].forEach((c) => {
|
|
77
77
|
const s = o[c];
|
|
@@ -81,7 +81,7 @@ async function N(o, a, _, v) {
|
|
|
81
81
|
});
|
|
82
82
|
const i = {};
|
|
83
83
|
for (const [c, s] of f) {
|
|
84
|
-
const e = await _.getUniqueSourceValuesWithLabels(
|
|
84
|
+
const e = await _.getUniqueSourceValuesWithLabels(g, a, c, 1, void 0, s);
|
|
85
85
|
e.values.length === 1 && (i[c] = e.values[0]);
|
|
86
86
|
}
|
|
87
87
|
return i;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loadUniqueValuesToSave.js","sources":["../../../src/GraphMaker/utils/loadUniqueValuesToSave.ts"],"sourcesContent":["import { AXIS_NATURE_KEY } from '../constantsCommon';\nimport { UniqueValuesBySourceMap, UniqueValuesData } from '../types';\nimport {\n Controller,\n DemoDataStore,\n InputGuide,\n InputState,\n PlotDataAndSettings,\n SelectorStateFilter\n} from '@milaboratories/pf-plots';\nimport { ListOption } from '@platforma-sdk/ui-vue';\nimport { DendroSettings, DiscreteSettings, HistogramSettings, ScatterplotSettings } from '@milaboratories/miplots4';\n\nconst INPUTS_REQUESTING_UNIQUE_VALUES = [\n 'primaryGrouping', 'secondaryGrouping', // discrete charts\n 'grouping', 'shape', 'x', 'y', // scatterplot\n 'nodeColor', 'nodeShape', 'lineColor', 'heatmapAnnotation', // dendro\n 'filters', 'highlight', 'tabBy' // all\n] as ((keyof InputState['components'])[]);\nconst SAVED_UNIQUE_VALUES_LIMIT = 100;\n\nconst SAVED_IN_CHART_DATA_DISCRETE_GROUPINGS = ['primaryGrouping', 'secondaryGrouping'];\nconst SAVED_IN_CHART_DATA_SCATTERPLOT_GROUPINGS = ['grouping'];\nconst SAVED_IN_CHART_DATA_SCATTERPLOT_XY = ['x', 'y'];\nconst SAVED_IN_CHART_DATA_HISTOGRAM_GROUPING = ['grouping'];\nconst SAVED_IN_CHART_DATA_DENDRO_GROUPING = [\n 'nodeColor', 'nodeShape', 'lineColor', 'heatmapAnnotation' // dendro\n];\n\nconst sortValues = (values:{value:string, label:string}[]) => values.sort((a, b) => a.label.localeCompare(b.label, 'en', {numeric: true}))\n\nexport async function getUniqueValuesFromReadyChartData(\n chartData: PlotDataAndSettings,\n inputGuide: InputGuide<InputState>,\n controller: Controller<InputState>,\n dataStore: DemoDataStore,\n previousUniqueValues: UniqueValuesBySourceMap\n): Promise<UniqueValuesBySourceMap> {\n const resultMap:UniqueValuesBySourceMap = {};\n function addUniqueData(sourceId:string, labelId?:string) {\n const data = chartData!.data.byColumns.values[sourceId];\n const dataLabels = labelId ? chartData!.data.byColumns.values[labelId] : null;\n\n const resultSet = new Set();\n const result:{value:string, label:string}[] = [];\n for (let i = 0; i < data.length; i++) {\n const v = String(data[i]);\n if (resultSet.has(v) || data[i] === null) {\n continue;\n }\n if (resultSet.size === SAVED_UNIQUE_VALUES_LIMIT) {\n resultMap[sourceId] = null;\n return;\n }\n resultSet.add(v);\n const label = dataLabels ? String(dataLabels[i]) : v;\n result.push({value: v, label});\n }\n sortValues(result);\n resultMap[sourceId] = {\n list: result.map((el) => el.value),\n labels: result.reduce((res, el) => {\n res[el.value] = el.value;\n return res;\n }, {} as Record<string, string>),\n options: result\n };\n }\n if (chartData.settings.type === 'discrete') {\n SAVED_IN_CHART_DATA_DISCRETE_GROUPINGS.forEach((inputName:string) => {\n const savedData = chartData.settings[inputName] as unknown as DiscreteSettings['primaryGrouping'];\n if (savedData) {\n const {columnName} = savedData;\n addUniqueData(columnName.value, columnName.valueLabels)\n }\n });\n }\n if (chartData.settings.type === 'scatterplot' || chartData.settings.type === 'scatterplot-umap') {\n SAVED_IN_CHART_DATA_SCATTERPLOT_XY.forEach((inputName:string) => {\n const columnName = chartData.settings[inputName] as unknown as ScatterplotSettings['x'];\n if (columnName) {\n const valueType = inputGuide.getSourceInfo(columnName.value).type;\n if (valueType === 'String') {\n addUniqueData(columnName.value, columnName.valueLabels);\n }\n }\n });\n SAVED_IN_CHART_DATA_SCATTERPLOT_GROUPINGS.forEach((inputName:string) => {\n const savedInGrouping = chartData.settings[inputName] as unknown as ScatterplotSettings['grouping'];\n savedInGrouping?.forEach(({columnName}) => {\n const valueType = inputGuide.getSourceInfo(columnName.value).type;\n if (valueType === 'String' || valueType === 'Int' || valueType === 'Long') {\n addUniqueData(columnName.value, columnName.valueLabels);\n }\n });\n });\n }\n\n if (chartData.settings.type === 'histogram') {\n SAVED_IN_CHART_DATA_HISTOGRAM_GROUPING.forEach((inputName:string) => {\n const savedByInputName = chartData.settings[inputName] as unknown as HistogramSettings['grouping'];\n if (savedByInputName) {\n addUniqueData(savedByInputName.value, savedByInputName.valueLabels);\n }\n });\n }\n\n if (chartData.settings.type === 'dendro') {\n SAVED_IN_CHART_DATA_DENDRO_GROUPING.forEach((inputName:string) => {\n const savedByInputName = chartData.settings[inputName] as unknown as DendroSettings['heatmapAnnotation'];\n if (savedByInputName) {\n addUniqueData(savedByInputName.value, savedByInputName.valueLabels);\n }\n });\n }\n\n // sources for loading\n const selectedSources: string[] = [];\n ([...inputGuide.freeOptionsSet]).forEach(id => {\n const info = inputGuide.getSourceInfo(id);\n if (\n info.kind === 'axis' &&\n info.annotations?.[AXIS_NATURE_KEY] &&\n info.annotations?.[AXIS_NATURE_KEY] !== 'homogeneous' &&\n info.annotations?.[AXIS_NATURE_KEY] !== 'homogenous'\n ) {\n selectedSources.push(id);\n }\n });\n\n for (const source of selectedSources) {\n if (resultMap[source]) {\n continue;\n }\n if (previousUniqueValues[source] && !resultMap[source]) {\n resultMap[source] = previousUniqueValues[source];\n } else if (dataStore) {\n const uniqueValuesResponse = await controller.getUniqueSourceValuesWithLabels(dataStore, inputGuide, source, SAVED_UNIQUE_VALUES_LIMIT);\n if (uniqueValuesResponse.overflow) {\n resultMap[source] = null;\n } else {\n resultMap[source] = {\n list: uniqueValuesResponse.values.map((el) => el.value),\n options: uniqueValuesResponse.values,\n labels: uniqueValuesResponse.values.reduce((res: Record<string, string>, el) => {\n res[el.value] = el.label;\n return res;\n }, {})\n } as UniqueValuesData;\n }\n }\n }\n return resultMap;\n}\nexport async function loadUniqueValuesToSave(\n optionsState: InputState['components'],\n inputGuide: InputGuide<InputState>,\n controller: Controller<InputState>,\n dataStore: DemoDataStore,\n previousUniqueValues: UniqueValuesBySourceMap // save null for too long lists of unique values\n):Promise<UniqueValuesBySourceMap> {\n const selectedSources: string[] = [];\n INPUTS_REQUESTING_UNIQUE_VALUES.forEach(inputName => {\n const componentState = optionsState[inputName];\n if (componentState) {\n for (const { selectedSource } of componentState.selectorStates) {\n const info = inputGuide.getSourceInfo(selectedSource);\n if (inputName === 'filters' || inputName === 'highlight') {\n if (info.type === 'String' || info.type === 'Int' || info.type === 'Long') {\n selectedSources.push(selectedSource);\n }\n } else if (inputName === 'grouping' || inputName === 'x' || inputName === 'y') {\n if (info.type === 'String') {\n selectedSources.push(selectedSource);\n }\n } else {\n selectedSources.push(selectedSource);\n }\n }\n }\n });\n ([...inputGuide.freeOptionsSet]).forEach(id => {\n const info = inputGuide.getSourceInfo(id);\n if (\n info.kind === 'axis' &&\n info.annotations?.[AXIS_NATURE_KEY] &&\n info.annotations?.[AXIS_NATURE_KEY] !== 'homogeneous' &&\n info.annotations?.[AXIS_NATURE_KEY] !== 'homogenous'\n ) {\n selectedSources.push(id);\n }\n });\n ([...inputGuide.axesToBeFixedSet]).forEach(id => {\n selectedSources.push(id);\n });\n const nextUniqueValuesData: UniqueValuesBySourceMap = {};\n for (const source of selectedSources) {\n if (previousUniqueValues[source]) {\n nextUniqueValuesData[source] = previousUniqueValues[source];\n } else if (dataStore) {\n const uniqueValuesResponse = await controller.getUniqueSourceValuesWithLabels(dataStore, inputGuide, source, SAVED_UNIQUE_VALUES_LIMIT);\n if (uniqueValuesResponse.overflow) {\n nextUniqueValuesData[source] = null;\n } else {\n nextUniqueValuesData[source] = {\n list: uniqueValuesResponse.values.map((el) => el.value),\n options: uniqueValuesResponse.values,\n labels: uniqueValuesResponse.values.reduce((res: Record<string, string>, el) => {\n res[el.value] = el.label;\n return res;\n }, {})\n } as UniqueValuesData;\n }\n }\n }\n return nextUniqueValuesData;\n}\n\nexport async function loadFilterLabelsForTitle(\n optionsState: InputState['components'],\n inputGuide: InputGuide<InputState>,\n controller: Controller<InputState>,\n dataStore: DemoDataStore,\n):Promise<Record<string, ListOption>> {\n const selected: [string, string][] = [];\n const INPUTS_REQUESTING_LABELS = ['filters', 'tabBy'] as ((keyof InputState['components'])[]);\n INPUTS_REQUESTING_LABELS.forEach(inputName => {\n const componentState = optionsState[inputName];\n if (componentState) {\n for (const { selectedSource, selectedFilterValue, type } of componentState.selectorStates as SelectorStateFilter[]) {\n if (inputName === 'filters' && type === 'equals' && selectedFilterValue) {\n selected.push([selectedSource, selectedFilterValue]);\n } else if (selectedFilterValue) {\n selected.push([selectedSource, selectedFilterValue]);\n }\n }\n }\n });\n const result:Record<string, ListOption> = {};\n for (const [source, selectedValue] of selected) {\n const uniqueValuesResponse = await controller.getUniqueSourceValuesWithLabels(dataStore, inputGuide, source, 1, undefined, selectedValue);\n if (uniqueValuesResponse.values.length === 1) {\n result[source] = uniqueValuesResponse.values[0];\n }\n }\n return result;\n}"],"names":["SAVED_UNIQUE_VALUES_LIMIT","SAVED_IN_CHART_DATA_DISCRETE_GROUPINGS","SAVED_IN_CHART_DATA_SCATTERPLOT_GROUPINGS","SAVED_IN_CHART_DATA_SCATTERPLOT_XY","SAVED_IN_CHART_DATA_HISTOGRAM_GROUPING","SAVED_IN_CHART_DATA_DENDRO_GROUPING","sortValues","values","b","getUniqueValuesFromReadyChartData","chartData","inputGuide","controller","dataStore","previousUniqueValues","resultMap","addUniqueData","sourceId","labelId","data","dataLabels","resultSet","result","i","v","label","el","res","inputName","savedData","columnName","savedInGrouping","valueType","savedByInputName","selectedSources","id","info","_a","AXIS_NATURE_KEY","_b","_c","source","uniqueValuesResponse","loadFilterLabelsForTitle","optionsState","selected","componentState","selectedSource","selectedFilterValue","type","selectedValue"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"loadUniqueValuesToSave.js","sources":["../../../src/GraphMaker/utils/loadUniqueValuesToSave.ts"],"sourcesContent":["import { AXIS_NATURE_KEY } from '../constantsCommon';\nimport { UniqueValuesBySourceMap, UniqueValuesData } from '../types';\nimport {\n Controller,\n DemoDataStore,\n InputGuide,\n InputState,\n PlotDataAndSettings,\n SelectorStateFilter\n} from '@milaboratories/pf-plots';\nimport { ListOption } from '@platforma-sdk/ui-vue';\nimport { DendroSettings, DiscreteSettings, HistogramSettings, ScatterplotSettings } from '@milaboratories/miplots4';\n\nconst INPUTS_REQUESTING_UNIQUE_VALUES = [\n 'primaryGrouping', 'secondaryGrouping', // discrete charts\n 'grouping', 'shape', 'x', 'y', // scatterplot\n 'nodeColor', 'nodeShape', 'lineColor', 'heatmapAnnotation', // dendro\n 'filters', 'highlight', 'tabBy' // all\n] as ((keyof InputState['components'])[]);\nconst SAVED_UNIQUE_VALUES_LIMIT = 100;\n\nconst SAVED_IN_CHART_DATA_DISCRETE_GROUPINGS = ['primaryGrouping', 'secondaryGrouping'];\nconst SAVED_IN_CHART_DATA_SCATTERPLOT_GROUPINGS = ['grouping'];\nconst SAVED_IN_CHART_DATA_SCATTERPLOT_XY = ['x', 'y'];\nconst SAVED_IN_CHART_DATA_HISTOGRAM_GROUPING = ['grouping'];\nconst SAVED_IN_CHART_DATA_DENDRO_GROUPING = [\n 'nodeColor', 'nodeShape', 'lineColor', 'heatmapAnnotation' // dendro\n];\n\nconst sortValues = (values:{value:string, label:string}[]) => values.sort((a, b) => a.label.localeCompare(b.label, 'en', {numeric: true}))\n\nexport async function getUniqueValuesFromReadyChartData(\n chartData: PlotDataAndSettings,\n inputGuide: InputGuide<InputState>,\n controller: Controller<InputState>,\n dataStore: DemoDataStore,\n previousUniqueValues: UniqueValuesBySourceMap\n): Promise<UniqueValuesBySourceMap> {\n const resultMap:UniqueValuesBySourceMap = {};\n function addUniqueData(sourceId:string, labelId?:string) {\n const data = chartData!.data.byColumns.values[sourceId];\n const dataLabels = labelId ? chartData!.data.byColumns.values[labelId] : null;\n\n const resultSet = new Set();\n const result:{value:string, label:string}[] = [];\n for (let i = 0; i < data.length; i++) {\n const v = String(data[i]);\n if (resultSet.has(v) || data[i] === null) {\n continue;\n }\n if (resultSet.size === SAVED_UNIQUE_VALUES_LIMIT) {\n resultMap[sourceId] = null;\n return;\n }\n resultSet.add(v);\n const label = dataLabels ? String(dataLabels[i]) : v;\n result.push({value: v, label});\n }\n sortValues(result);\n resultMap[sourceId] = {\n list: result.map((el) => el.value),\n labels: result.reduce((res, el) => {\n res[el.value] = el.label;\n return res;\n }, {} as Record<string, string>),\n options: result\n };\n }\n if (chartData.settings.type === 'discrete') {\n SAVED_IN_CHART_DATA_DISCRETE_GROUPINGS.forEach((inputName:string) => {\n const savedData = chartData.settings[inputName] as unknown as DiscreteSettings['primaryGrouping'];\n if (savedData) {\n const {columnName} = savedData;\n addUniqueData(columnName.value, columnName.valueLabels)\n }\n });\n }\n if (chartData.settings.type === 'scatterplot' || chartData.settings.type === 'scatterplot-umap') {\n SAVED_IN_CHART_DATA_SCATTERPLOT_XY.forEach((inputName:string) => {\n const columnName = chartData.settings[inputName] as unknown as ScatterplotSettings['x'];\n if (columnName) {\n const valueType = inputGuide.getSourceInfo(columnName.value).type;\n if (valueType === 'String') {\n addUniqueData(columnName.value, columnName.valueLabels);\n }\n }\n });\n SAVED_IN_CHART_DATA_SCATTERPLOT_GROUPINGS.forEach((inputName:string) => {\n const savedInGrouping = chartData.settings[inputName] as unknown as ScatterplotSettings['grouping'];\n savedInGrouping?.forEach(({columnName}) => {\n const valueType = inputGuide.getSourceInfo(columnName.value).type;\n if (valueType === 'String' || valueType === 'Int' || valueType === 'Long') {\n addUniqueData(columnName.value, columnName.valueLabels);\n }\n });\n });\n }\n\n if (chartData.settings.type === 'histogram') {\n SAVED_IN_CHART_DATA_HISTOGRAM_GROUPING.forEach((inputName:string) => {\n const savedByInputName = chartData.settings[inputName] as unknown as HistogramSettings['grouping'];\n if (savedByInputName) {\n addUniqueData(savedByInputName.value, savedByInputName.valueLabels);\n }\n });\n }\n\n if (chartData.settings.type === 'dendro') {\n SAVED_IN_CHART_DATA_DENDRO_GROUPING.forEach((inputName:string) => {\n const savedByInputName = chartData.settings[inputName] as unknown as DendroSettings['heatmapAnnotation'];\n if (savedByInputName) {\n addUniqueData(savedByInputName.value, savedByInputName.valueLabels);\n }\n });\n }\n\n // sources for loading\n const selectedSources: string[] = [];\n ([...inputGuide.freeOptionsSet]).forEach(id => {\n const info = inputGuide.getSourceInfo(id);\n if (\n info.kind === 'axis' &&\n info.annotations?.[AXIS_NATURE_KEY] &&\n info.annotations?.[AXIS_NATURE_KEY] !== 'homogeneous' &&\n info.annotations?.[AXIS_NATURE_KEY] !== 'homogenous'\n ) {\n selectedSources.push(id);\n }\n });\n\n for (const source of selectedSources) {\n if (resultMap[source]) {\n continue;\n }\n if (previousUniqueValues[source] && !resultMap[source]) {\n resultMap[source] = previousUniqueValues[source];\n } else if (dataStore) {\n const uniqueValuesResponse = await controller.getUniqueSourceValuesWithLabels(dataStore, inputGuide, source, SAVED_UNIQUE_VALUES_LIMIT);\n if (uniqueValuesResponse.overflow) {\n resultMap[source] = null;\n } else {\n resultMap[source] = {\n list: uniqueValuesResponse.values.map((el) => el.value),\n options: uniqueValuesResponse.values,\n labels: uniqueValuesResponse.values.reduce((res: Record<string, string>, el) => {\n res[el.value] = el.label;\n return res;\n }, {})\n } as UniqueValuesData;\n }\n }\n }\n return resultMap;\n}\nexport async function loadUniqueValuesToSave(\n optionsState: InputState['components'],\n inputGuide: InputGuide<InputState>,\n controller: Controller<InputState>,\n dataStore: DemoDataStore,\n previousUniqueValues: UniqueValuesBySourceMap // save null for too long lists of unique values\n):Promise<UniqueValuesBySourceMap> {\n const selectedSources: string[] = [];\n INPUTS_REQUESTING_UNIQUE_VALUES.forEach(inputName => {\n const componentState = optionsState[inputName];\n if (componentState) {\n for (const { selectedSource } of componentState.selectorStates) {\n const info = inputGuide.getSourceInfo(selectedSource);\n if (inputName === 'filters' || inputName === 'highlight') {\n if (info.type === 'String' || info.type === 'Int' || info.type === 'Long') {\n selectedSources.push(selectedSource);\n }\n } else if (inputName === 'grouping' || inputName === 'x' || inputName === 'y') {\n if (info.type === 'String') {\n selectedSources.push(selectedSource);\n }\n } else {\n selectedSources.push(selectedSource);\n }\n }\n }\n });\n ([...inputGuide.freeOptionsSet]).forEach(id => {\n const info = inputGuide.getSourceInfo(id);\n if (\n info.kind === 'axis' &&\n info.annotations?.[AXIS_NATURE_KEY] &&\n info.annotations?.[AXIS_NATURE_KEY] !== 'homogeneous' &&\n info.annotations?.[AXIS_NATURE_KEY] !== 'homogenous'\n ) {\n selectedSources.push(id);\n }\n });\n ([...inputGuide.axesToBeFixedSet]).forEach(id => {\n selectedSources.push(id);\n });\n const nextUniqueValuesData: UniqueValuesBySourceMap = {};\n for (const source of selectedSources) {\n if (previousUniqueValues[source]) {\n nextUniqueValuesData[source] = previousUniqueValues[source];\n } else if (dataStore) {\n const uniqueValuesResponse = await controller.getUniqueSourceValuesWithLabels(dataStore, inputGuide, source, SAVED_UNIQUE_VALUES_LIMIT);\n if (uniqueValuesResponse.overflow) {\n nextUniqueValuesData[source] = null;\n } else {\n console.log('responce', uniqueValuesResponse)\n nextUniqueValuesData[source] = {\n list: uniqueValuesResponse.values.map((el) => el.value),\n options: uniqueValuesResponse.values,\n labels: uniqueValuesResponse.values.reduce((res: Record<string, string>, el) => {\n res[el.value] = el.label;\n return res;\n }, {})\n } as UniqueValuesData;\n }\n }\n }\n return nextUniqueValuesData;\n}\n\nexport async function loadFilterLabelsForTitle(\n optionsState: InputState['components'],\n inputGuide: InputGuide<InputState>,\n controller: Controller<InputState>,\n dataStore: DemoDataStore,\n):Promise<Record<string, ListOption>> {\n const selected: [string, string][] = [];\n const INPUTS_REQUESTING_LABELS = ['filters', 'tabBy'] as ((keyof InputState['components'])[]);\n INPUTS_REQUESTING_LABELS.forEach(inputName => {\n const componentState = optionsState[inputName];\n if (componentState) {\n for (const { selectedSource, selectedFilterValue, type } of componentState.selectorStates as SelectorStateFilter[]) {\n if (inputName === 'filters' && type === 'equals' && selectedFilterValue) {\n selected.push([selectedSource, selectedFilterValue]);\n } else if (selectedFilterValue) {\n selected.push([selectedSource, selectedFilterValue]);\n }\n }\n }\n });\n const result:Record<string, ListOption> = {};\n for (const [source, selectedValue] of selected) {\n const uniqueValuesResponse = await controller.getUniqueSourceValuesWithLabels(dataStore, inputGuide, source, 1, undefined, selectedValue);\n if (uniqueValuesResponse.values.length === 1) {\n result[source] = uniqueValuesResponse.values[0];\n }\n }\n return result;\n}"],"names":["SAVED_UNIQUE_VALUES_LIMIT","SAVED_IN_CHART_DATA_DISCRETE_GROUPINGS","SAVED_IN_CHART_DATA_SCATTERPLOT_GROUPINGS","SAVED_IN_CHART_DATA_SCATTERPLOT_XY","SAVED_IN_CHART_DATA_HISTOGRAM_GROUPING","SAVED_IN_CHART_DATA_DENDRO_GROUPING","sortValues","values","b","getUniqueValuesFromReadyChartData","chartData","inputGuide","controller","dataStore","previousUniqueValues","resultMap","addUniqueData","sourceId","labelId","data","dataLabels","resultSet","result","i","v","label","el","res","inputName","savedData","columnName","savedInGrouping","valueType","savedByInputName","selectedSources","id","info","_a","AXIS_NATURE_KEY","_b","_c","source","uniqueValuesResponse","loadFilterLabelsForTitle","optionsState","selected","componentState","selectedSource","selectedFilterValue","type","selectedValue"],"mappings":"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"}
|
|
@@ -1,101 +1,101 @@
|
|
|
1
|
-
import { j as
|
|
1
|
+
import { j as d } from "../../../node_modules/react/jsx-runtime.js";
|
|
2
2
|
import { r as D } from "../../../_virtual/index.js";
|
|
3
3
|
import { StackedBarElement as w } from "./StackedBarElement.js";
|
|
4
4
|
import b from "../../../node_modules/d3-shape/src/area.js";
|
|
5
5
|
import { bumpX as A, bumpY as E } from "../../../node_modules/d3-shape/src/curve/bump.js";
|
|
6
|
-
function
|
|
6
|
+
function G(e) {
|
|
7
7
|
return e && typeof e == "object" && "type" in e && e.type === "secondaryGrouping";
|
|
8
8
|
}
|
|
9
|
-
function S(e, t, r,
|
|
9
|
+
function S(e, t, r, a, y) {
|
|
10
10
|
if (r && typeof r == "object" && "type" in r) {
|
|
11
11
|
if (r.type === "primaryGrouping")
|
|
12
|
-
return e.xPrimaryAes(
|
|
12
|
+
return e.xPrimaryAes(a)[t];
|
|
13
13
|
if (r.type === "secondaryGrouping")
|
|
14
14
|
return e.xSecondaryAes(y)[t];
|
|
15
15
|
}
|
|
16
16
|
return r;
|
|
17
17
|
}
|
|
18
|
-
function
|
|
19
|
-
const h = (r - t) / 2, C = v.
|
|
18
|
+
function K(e, t, r, a, y, f, v) {
|
|
19
|
+
const h = (r - t) / 2, C = v.reduce((i, n) => {
|
|
20
20
|
const s = {};
|
|
21
|
-
let
|
|
22
|
-
return y.forEach((
|
|
21
|
+
let o = 0;
|
|
22
|
+
return y.forEach((l) => {
|
|
23
23
|
var c;
|
|
24
|
-
const p = ((c =
|
|
25
|
-
s[
|
|
26
|
-
y1:
|
|
27
|
-
y2:
|
|
28
|
-
},
|
|
29
|
-
}), s;
|
|
30
|
-
});
|
|
31
|
-
return y.map((
|
|
32
|
-
const
|
|
33
|
-
const
|
|
34
|
-
return
|
|
35
|
-
}),
|
|
36
|
-
return { secondaryKey:
|
|
24
|
+
const p = ((c = n.valuesMap[l]) == null ? void 0 : c.height) ?? 0;
|
|
25
|
+
s[l] = {
|
|
26
|
+
y1: o,
|
|
27
|
+
y2: o + p
|
|
28
|
+
}, o += p;
|
|
29
|
+
}), i[n.primaryGrouping] = s, i;
|
|
30
|
+
}, {});
|
|
31
|
+
return y.map((i) => {
|
|
32
|
+
const n = a.flatMap((o) => {
|
|
33
|
+
const l = C[o], c = e.xPrimary(o) ?? 0, p = e.y(l[i].y1), x = e.y(l[i].y2), u = [c + h, p, x], g = [c + r - h, p, x];
|
|
34
|
+
return f ? [u, g] : [g, u];
|
|
35
|
+
}), s = (f ? b().curve(A).x((o) => o[0]).y0((o) => o[1]).y1((o) => o[2])(n) : b().curve(E).y((o) => o[0]).x0((o) => o[1]).x1((o) => o[2])(n)) ?? "";
|
|
36
|
+
return { secondaryKey: i, pathD: s };
|
|
37
37
|
});
|
|
38
38
|
}
|
|
39
|
-
function
|
|
39
|
+
function M(e, t) {
|
|
40
40
|
return e.meta.showBars ? e.aes.barWidth === "auto" ? t * 0.2 : Math.min(t, e.aes.barWidth) : 0;
|
|
41
41
|
}
|
|
42
42
|
function O({
|
|
43
43
|
facetKey: e,
|
|
44
44
|
scales: t,
|
|
45
45
|
orientation: r,
|
|
46
|
-
layerData:
|
|
46
|
+
layerData: a,
|
|
47
47
|
sideDistances: y,
|
|
48
|
-
showTooltips:
|
|
48
|
+
showTooltips: f,
|
|
49
49
|
secondaryGrouping: v,
|
|
50
50
|
activeElementContainer: h,
|
|
51
51
|
tooltipsContainer: C,
|
|
52
|
-
tooltipsData:
|
|
52
|
+
tooltipsData: i
|
|
53
53
|
}) {
|
|
54
|
-
const [
|
|
54
|
+
const [n, s] = D.useState(null), o = r === "vertical", l = t.xPrimary.bandwidth(), c = M(a, l), p = t.xPrimary.domain(), x = t.xSecondary.domain().reverse(), u = G(a.aes.fillColor) || typeof a.aes.fillColor == "string", g = u ? K(
|
|
55
55
|
t,
|
|
56
|
-
p,
|
|
57
56
|
c,
|
|
58
|
-
|
|
57
|
+
l,
|
|
58
|
+
p,
|
|
59
59
|
x,
|
|
60
|
-
|
|
61
|
-
|
|
60
|
+
o,
|
|
61
|
+
a.geoms[e]
|
|
62
62
|
) : [];
|
|
63
|
-
return /* @__PURE__ */
|
|
64
|
-
/* @__PURE__ */
|
|
63
|
+
return /* @__PURE__ */ d.jsxs("g", { children: [
|
|
64
|
+
/* @__PURE__ */ d.jsx("g", { children: u && g.map(({ secondaryKey: m, pathD: j }) => /* @__PURE__ */ d.jsx(
|
|
65
65
|
"path",
|
|
66
66
|
{
|
|
67
67
|
d: j,
|
|
68
|
-
fill: S(t, "fillColor",
|
|
69
|
-
opacity:
|
|
70
|
-
onMouseEnter: () =>
|
|
71
|
-
onMouseLeave: () =>
|
|
68
|
+
fill: S(t, "fillColor", a.aes.fillColor, p[0], m),
|
|
69
|
+
opacity: a.aes.areaOpacity * (n !== null && m !== n ? 0.5 : 1),
|
|
70
|
+
onMouseEnter: () => s(m),
|
|
71
|
+
onMouseLeave: () => s(null)
|
|
72
72
|
},
|
|
73
|
-
|
|
73
|
+
m
|
|
74
74
|
)) }),
|
|
75
|
-
/* @__PURE__ */
|
|
75
|
+
/* @__PURE__ */ d.jsx("g", { children: a.meta.showBars && a.geoms[e].map((m) => /* @__PURE__ */ d.jsx(
|
|
76
76
|
w,
|
|
77
77
|
{
|
|
78
78
|
facetKey: e,
|
|
79
|
-
geom:
|
|
80
|
-
elementsAmount:
|
|
79
|
+
geom: m,
|
|
80
|
+
elementsAmount: a.geoms[e].length,
|
|
81
81
|
scales: t,
|
|
82
82
|
orientation: r,
|
|
83
83
|
aes: {
|
|
84
|
-
...
|
|
85
|
-
width:
|
|
86
|
-
opacity:
|
|
84
|
+
...a.aes,
|
|
85
|
+
width: c,
|
|
86
|
+
opacity: a.aes.barsOpacity
|
|
87
87
|
},
|
|
88
|
-
normalize:
|
|
88
|
+
normalize: a.meta.normalize,
|
|
89
89
|
sideDistances: y,
|
|
90
|
-
showTooltips:
|
|
90
|
+
showTooltips: f,
|
|
91
91
|
secondaryGrouping: v,
|
|
92
|
-
tooltipsData:
|
|
92
|
+
tooltipsData: i,
|
|
93
93
|
activeElementContainer: h,
|
|
94
94
|
tooltipsContainer: C,
|
|
95
|
-
activeKey:
|
|
96
|
-
onSectionHover:
|
|
95
|
+
activeKey: n,
|
|
96
|
+
onSectionHover: s
|
|
97
97
|
},
|
|
98
|
-
|
|
98
|
+
m.key
|
|
99
99
|
)) })
|
|
100
100
|
] });
|
|
101
101
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StackedAreaElement.js","sources":["../../../../../../../../node_modules/@milaboratories/miplots4/src/discrete/components/layers/StackedAreaElement.tsx"],"sourcesContent":["import {area, curveBumpX, curveBumpY} from 'd3-shape';\nimport React, { useState } from 'react';\nimport type {TooltipsData} from '../../../common/Tooltip';\nimport type {AesItem, GroupingData, InheritAesDiscrete, Orientation} from '../../../types';\nimport type {StackedBar} from '../../layers';\nimport type {StackedAreaData} from '../../layers/types';\nimport type {ChartScales} from '../types';\nimport {StackedBarElement} from './StackedBarElement';\n\ninterface StackedAreaProps {\n facetKey: string;\n scales: ChartScales;\n layerData: StackedAreaData;\n orientation: Orientation;\n sideDistances: {\n left: number;\n right: number;\n top: number;\n bottom: number;\n };\n showTooltips: boolean;\n secondaryGrouping: GroupingData;\n tooltipsData: TooltipsData<unknown>;\n activeElementContainer?: Element;\n tooltipsContainer?: Element;\n}\n\nfunction isSecondaryGroupedAes (value: string | InheritAesDiscrete) {\n return value && typeof value === 'object' && 'type' in value && value.type === 'secondaryGrouping';\n}\n\nfunction getAesValue<ValueType>(\n scales: ChartScales,\n field: keyof AesItem,\n value: ValueType | InheritAesDiscrete,\n primaryGrouping: string,\n secondaryGrouping: string\n): ValueType {\n if (value && typeof value === 'object' && 'type' in value) {\n if (value.type === 'primaryGrouping') {\n return scales.xPrimaryAes(primaryGrouping)[field] as ValueType;\n }\n if (value.type === 'secondaryGrouping') {\n return scales.xSecondaryAes(secondaryGrouping)[field] as ValueType;\n }\n }\n return value as ValueType;\n}\n\nfunction getAreas(\n scales: ChartScales,\n barWidth: number,\n bandWidth: number,\n primaryKeys: string[],\n secondaryKeys: string[],\n isVertical: boolean,\n bars: StackedBar[],\n) {\n const offsetX = (bandWidth - barWidth) / 2;\n const ys = bars.map((bar) => {\n const yValues:Record<string, {y1: number, y2: number}> = {};\n let currentHeight = 0;\n secondaryKeys.forEach(secondaryKey => {\n const height = bar.valuesMap[secondaryKey]?.height ?? 0;\n yValues[secondaryKey] = {\n y1: currentHeight,\n y2: currentHeight + height,\n };\n currentHeight += height;\n });\n return yValues;\n });\n\n return secondaryKeys.map((secondaryKey) => {\n const points:[number, number, number][] = ys.flatMap((yMap, idx) => {\n const primaryKey = primaryKeys[idx];\n const x = scales.xPrimary(primaryKey) ?? 0;\n const y1 = scales.y(yMap[secondaryKey].y1);\n const y2 = scales.y(yMap[secondaryKey].y2);\n const p1:[number, number, number] = [x + offsetX, y1, y2];\n const p2:[number, number, number] = [x + bandWidth - offsetX, y1, y2];\n return isVertical ? [p1, p2] : [p2, p1];\n });\n\n const pathD = (isVertical ? (\n area<[number, number, number]>()\n .curve(curveBumpX)\n .x(d => d[0])\n .y0(d => d[1])\n .y1(d => d[2])(points)\n ) :\n area<[number, number, number]>()\n .curve(curveBumpY)\n .y(d => d[0])\n .x0(d => d[1])\n .x1(d => d[2])(points)) ?? '';\n return {secondaryKey, pathD};\n });\n}\n\nfunction calculateBarWidth (\n layerData: StackedAreaData,\n bandwidth: number\n) {\n if (!layerData.meta.showBars) {\n return 0;\n }\n return layerData.aes.barWidth === 'auto' ? bandwidth * 0.2 : Math.min(bandwidth, layerData.aes.barWidth);\n}\n\nexport function StackedAreaElement({\n facetKey,\n scales,\n orientation,\n layerData,\n sideDistances,\n showTooltips,\n secondaryGrouping,\n activeElementContainer,\n tooltipsContainer,\n tooltipsData,\n}: StackedAreaProps) {\n const [selectedAreaKey, setSelectedAreaKey] = useState<string | null>(null);\n const isVertical = orientation === 'vertical';\n const boxOuterWidth = scales.xPrimary.bandwidth();\n const boxWidth = calculateBarWidth(layerData, boxOuterWidth);\n const primaryKeys = scales.xPrimary.domain();\n const secondaryKeys = scales.xSecondary.domain().reverse();\n\n const needsAreas = isSecondaryGroupedAes(layerData.aes.fillColor) || typeof layerData.aes.fillColor === 'string';\n const areas = needsAreas ? getAreas(\n scales,\n boxWidth,\n boxOuterWidth,\n primaryKeys,\n secondaryKeys,\n isVertical,\n layerData.geoms[facetKey]\n ) : [];\n\n return (\n <g>\n <g>\n {needsAreas && areas.map(({secondaryKey, pathD}) => (\n <path\n key={secondaryKey}\n d={pathD}\n fill={getAesValue(scales, 'fillColor', layerData.aes.fillColor, primaryKeys[0], secondaryKey)}\n opacity={layerData.aes.areaOpacity * (selectedAreaKey !== null && secondaryKey !== selectedAreaKey ? 0.5 : 1)}\n onMouseEnter={() => setSelectedAreaKey(secondaryKey)}\n onMouseLeave={() => setSelectedAreaKey(null)}\n />\n ))}\n </g>\n <g>\n {layerData.meta.showBars && (layerData as StackedAreaData).geoms[facetKey].map(geom => (\n <StackedBarElement\n key={geom.key}\n facetKey={facetKey}\n geom={geom}\n elementsAmount={layerData.geoms[facetKey].length}\n scales={scales}\n orientation={orientation}\n aes={{\n ...layerData.aes,\n width: boxWidth,\n opacity: layerData.aes.barsOpacity\n }}\n normalize={layerData.meta.normalize}\n sideDistances={sideDistances}\n showTooltips={showTooltips}\n secondaryGrouping={secondaryGrouping}\n tooltipsData={tooltipsData}\n activeElementContainer={activeElementContainer}\n tooltipsContainer={tooltipsContainer}\n activeKey={selectedAreaKey}\n onSectionHover={setSelectedAreaKey}\n />\n ))}\n </g>\n </g>\n );\n}\n"],"names":["isSecondaryGroupedAes","value","getAesValue","scales","field","primaryGrouping","secondaryGrouping","getAreas","barWidth","bandWidth","primaryKeys","secondaryKeys","isVertical","bars","offsetX","ys","bar","yValues","currentHeight","secondaryKey","height","_a","points","yMap","idx","primaryKey","x","y1","y2","p1","p2","pathD","area","curveBumpX","d","curveBumpY","o","calculateBarWidth","layerData","bandwidth","StackedAreaElement","facetKey","orientation","sideDistances","showTooltips","activeElementContainer","tooltipsContainer","tooltipsData","selectedAreaKey","setSelectedAreaKey","useState","boxOuterWidth","boxWidth","needsAreas","areas","g","jsx","geom","StackedBarElement"],"mappings":"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","x_google_ignoreList":[0]}
|
|
1
|
+
{"version":3,"file":"StackedAreaElement.js","sources":["../../../../../../../../node_modules/@milaboratories/miplots4/src/discrete/components/layers/StackedAreaElement.tsx"],"sourcesContent":["import {area, curveBumpX, curveBumpY} from 'd3-shape';\nimport React, { useState } from 'react';\nimport type {TooltipsData} from '../../../common/Tooltip';\nimport type {AesItem, GroupingData, InheritAesDiscrete, Orientation} from '../../../types';\nimport type {StackedBar} from '../../layers';\nimport type {StackedAreaData} from '../../layers/types';\nimport type {ChartScales} from '../types';\nimport {StackedBarElement} from './StackedBarElement';\n\ninterface StackedAreaProps {\n facetKey: string;\n scales: ChartScales;\n layerData: StackedAreaData;\n orientation: Orientation;\n sideDistances: {\n left: number;\n right: number;\n top: number;\n bottom: number;\n };\n showTooltips: boolean;\n secondaryGrouping: GroupingData;\n tooltipsData: TooltipsData<unknown>;\n activeElementContainer?: Element;\n tooltipsContainer?: Element;\n}\n\nfunction isSecondaryGroupedAes (value: string | InheritAesDiscrete) {\n return value && typeof value === 'object' && 'type' in value && value.type === 'secondaryGrouping';\n}\n\nfunction getAesValue<ValueType>(\n scales: ChartScales,\n field: keyof AesItem,\n value: ValueType | InheritAesDiscrete,\n primaryGrouping: string,\n secondaryGrouping: string\n): ValueType {\n if (value && typeof value === 'object' && 'type' in value) {\n if (value.type === 'primaryGrouping') {\n return scales.xPrimaryAes(primaryGrouping)[field] as ValueType;\n }\n if (value.type === 'secondaryGrouping') {\n return scales.xSecondaryAes(secondaryGrouping)[field] as ValueType;\n }\n }\n return value as ValueType;\n}\n\nfunction getAreas(\n scales: ChartScales,\n barWidth: number,\n bandWidth: number,\n primaryKeys: string[],\n secondaryKeys: string[],\n isVertical: boolean,\n bars: StackedBar[],\n) {\n const offsetX = (bandWidth - barWidth) / 2;\n const ys = bars.reduce((res, bar) => {\n const yValues: Record<string, {y1: number, y2: number}> = {};\n let currentHeight = 0;\n secondaryKeys.forEach(secondaryKey => {\n const height = bar.valuesMap[secondaryKey]?.height ?? 0;\n yValues[secondaryKey] = {\n y1: currentHeight,\n y2: currentHeight + height,\n };\n currentHeight += height;\n });\n res[bar.primaryGrouping] = yValues;\n return res;\n }, {} as Record<string, Record<string, {y1: number, y2: number}>>);\n\n return secondaryKeys.map((secondaryKey) => {\n const points:[number, number, number][] = primaryKeys.flatMap((primaryKey) => {\n const yMap = ys[primaryKey];\n const x = scales.xPrimary(primaryKey) ?? 0;\n const y1 = scales.y(yMap[secondaryKey].y1);\n const y2 = scales.y(yMap[secondaryKey].y2);\n const p1:[number, number, number] = [x + offsetX, y1, y2];\n const p2:[number, number, number] = [x + bandWidth - offsetX, y1, y2];\n return isVertical ? [p1, p2] : [p2, p1];\n });\n\n const pathD = (isVertical ? (\n area<[number, number, number]>()\n .curve(curveBumpX)\n .x(d => d[0])\n .y0(d => d[1])\n .y1(d => d[2])(points)\n ) :\n area<[number, number, number]>()\n .curve(curveBumpY)\n .y(d => d[0])\n .x0(d => d[1])\n .x1(d => d[2])(points)) ?? '';\n return {secondaryKey, pathD};\n });\n}\n\nfunction calculateBarWidth (\n layerData: StackedAreaData,\n bandwidth: number\n) {\n if (!layerData.meta.showBars) {\n return 0;\n }\n return layerData.aes.barWidth === 'auto' ? bandwidth * 0.2 : Math.min(bandwidth, layerData.aes.barWidth);\n}\n\nexport function StackedAreaElement({\n facetKey,\n scales,\n orientation,\n layerData,\n sideDistances,\n showTooltips,\n secondaryGrouping,\n activeElementContainer,\n tooltipsContainer,\n tooltipsData,\n}: StackedAreaProps) {\n const [selectedAreaKey, setSelectedAreaKey] = useState<string | null>(null);\n const isVertical = orientation === 'vertical';\n const boxOuterWidth = scales.xPrimary.bandwidth();\n const boxWidth = calculateBarWidth(layerData, boxOuterWidth);\n const primaryKeys = scales.xPrimary.domain();\n const secondaryKeys = scales.xSecondary.domain().reverse();\n\n const needsAreas = isSecondaryGroupedAes(layerData.aes.fillColor) || typeof layerData.aes.fillColor === 'string';\n const areas = needsAreas ? getAreas(\n scales,\n boxWidth,\n boxOuterWidth,\n primaryKeys,\n secondaryKeys,\n isVertical,\n layerData.geoms[facetKey]\n ) : [];\n\n return (\n <g>\n <g>\n {needsAreas && areas.map(({secondaryKey, pathD}) => (\n <path\n key={secondaryKey}\n d={pathD}\n fill={getAesValue(scales, 'fillColor', layerData.aes.fillColor, primaryKeys[0], secondaryKey)}\n opacity={layerData.aes.areaOpacity * (selectedAreaKey !== null && secondaryKey !== selectedAreaKey ? 0.5 : 1)}\n onMouseEnter={() => setSelectedAreaKey(secondaryKey)}\n onMouseLeave={() => setSelectedAreaKey(null)}\n />\n ))}\n </g>\n <g>\n {layerData.meta.showBars && (layerData as StackedAreaData).geoms[facetKey].map(geom => (\n <StackedBarElement\n key={geom.key}\n facetKey={facetKey}\n geom={geom}\n elementsAmount={layerData.geoms[facetKey].length}\n scales={scales}\n orientation={orientation}\n aes={{\n ...layerData.aes,\n width: boxWidth,\n opacity: layerData.aes.barsOpacity\n }}\n normalize={layerData.meta.normalize}\n sideDistances={sideDistances}\n showTooltips={showTooltips}\n secondaryGrouping={secondaryGrouping}\n tooltipsData={tooltipsData}\n activeElementContainer={activeElementContainer}\n tooltipsContainer={tooltipsContainer}\n activeKey={selectedAreaKey}\n onSectionHover={setSelectedAreaKey}\n />\n ))}\n </g>\n </g>\n );\n}\n"],"names":["isSecondaryGroupedAes","value","getAesValue","scales","field","primaryGrouping","secondaryGrouping","getAreas","barWidth","bandWidth","primaryKeys","secondaryKeys","isVertical","bars","offsetX","ys","res","bar","yValues","currentHeight","secondaryKey","height","_a","points","primaryKey","yMap","x","y1","y2","p1","p2","pathD","area","curveBumpX","d","curveBumpY","calculateBarWidth","layerData","bandwidth","StackedAreaElement","facetKey","orientation","sideDistances","showTooltips","activeElementContainer","tooltipsContainer","tooltipsData","selectedAreaKey","setSelectedAreaKey","useState","boxOuterWidth","boxWidth","needsAreas","areas","g","jsx","geom","StackedBarElement"],"mappings":"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","x_google_ignoreList":[0]}
|