@datagrok-libraries/statistics 1.10.0 → 1.12.1
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/CHANGELOG.md +5 -0
- package/css/styles.css +234 -0
- package/package.json +3 -2
- package/src/mpo/dialogs/desirability-mode-dialog.d.ts +14 -0
- package/src/mpo/dialogs/desirability-mode-dialog.d.ts.map +1 -0
- package/src/mpo/dialogs/desirability-mode-dialog.js +198 -0
- package/src/mpo/editors/desirability-editor-factory.d.ts +16 -0
- package/src/mpo/editors/desirability-editor-factory.d.ts.map +1 -0
- package/src/mpo/editors/desirability-editor-factory.js +11 -0
- package/src/mpo/editors/mpo-categorical-editor.d.ts +24 -0
- package/src/mpo/editors/mpo-categorical-editor.d.ts.map +1 -0
- package/src/mpo/editors/mpo-categorical-editor.js +113 -0
- package/src/mpo/editors/mpo-line-editor.d.ts +47 -0
- package/src/mpo/editors/mpo-line-editor.d.ts.map +1 -0
- package/src/mpo/editors/mpo-line-editor.js +600 -0
- package/src/mpo/mpo-profile-editor.d.ts +42 -6
- package/src/mpo/mpo-profile-editor.d.ts.map +1 -1
- package/src/mpo/mpo-profile-editor.js +369 -59
- package/src/mpo/mpo.d.ts +53 -3
- package/src/mpo/mpo.d.ts.map +1 -1
- package/src/mpo/mpo.js +92 -16
- package/src/mpo/utils.d.ts +6 -0
- package/src/mpo/utils.d.ts.map +1 -0
- package/src/mpo/utils.js +17 -0
- package/src/mpo/mpo-line-editor.d.ts +0 -10
- package/src/mpo/mpo-line-editor.d.ts.map +0 -1
- package/src/mpo/mpo-line-editor.js +0 -258
package/CHANGELOG.md
CHANGED
package/css/styles.css
ADDED
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
.statistics-mpo-header {
|
|
2
|
+
margin-top: 10px;
|
|
3
|
+
padding-bottom: 5px;
|
|
4
|
+
border-bottom: 1px solid var(--grey-2);
|
|
5
|
+
gap: 10px;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
.statistics-mpo-header > * {
|
|
9
|
+
font-weight: bold;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
.statistics-mpo-header > *:first-child {
|
|
13
|
+
width: 130px;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
.statistics-mpo-header > *:nth-child(2) {
|
|
17
|
+
width: 120px;
|
|
18
|
+
min-width: 60px;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
.statistics-mpo-header > *:nth-child(3) {
|
|
22
|
+
flex-grow: 1;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.statistics-mpo-property-cell {
|
|
26
|
+
width: 130px;
|
|
27
|
+
max-width: 130px;
|
|
28
|
+
align-self: flex-end;
|
|
29
|
+
margin-bottom: 20px !important;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
.ui-form .statistics-mpo-property-cell > div:first-child {
|
|
33
|
+
padding-left: 4px;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
.statistics-mpo-property-cell > div:first-child {
|
|
37
|
+
overflow: hidden;
|
|
38
|
+
text-overflow: ellipsis;
|
|
39
|
+
white-space: nowrap;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
.statistics-mpo-weight-input {
|
|
43
|
+
width: 100px;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
.statistics-mpo-weight-cell {
|
|
47
|
+
align-self: flex-end;
|
|
48
|
+
margin-bottom: 20px !important;
|
|
49
|
+
align-items: center;
|
|
50
|
+
gap: 4px;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
.statistics-mpo-control-buttons {
|
|
54
|
+
gap: 10px;
|
|
55
|
+
margin-left: 10px;
|
|
56
|
+
color: var(--blue-1);
|
|
57
|
+
visibility: hidden;
|
|
58
|
+
white-space: nowrap;
|
|
59
|
+
flex-shrink: 0;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
.statistics-mpo-row:hover .statistics-mpo-control-buttons,
|
|
63
|
+
.statistics-mpo-cat-row:hover .statistics-mpo-control-buttons {
|
|
64
|
+
visibility: visible;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
.statistics-mpo-range-input {
|
|
68
|
+
width: 70px;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
.statistics-mpo-row {
|
|
72
|
+
display: flex;
|
|
73
|
+
align-items: center;
|
|
74
|
+
justify-content: flex-start;
|
|
75
|
+
padding: 8px 0;
|
|
76
|
+
min-height: 70px;
|
|
77
|
+
gap: 10px;
|
|
78
|
+
|
|
79
|
+
flex-wrap: wrap;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
.statistics-mpo-row > * {
|
|
83
|
+
flex: 0 0 auto;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
.statistics-mpo-row .ui-input-choice .ui-input-editor {
|
|
88
|
+
width: 100px !important;
|
|
89
|
+
max-width: none !important;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
.ui-form .statistics-mpo-row .ui-input-root {
|
|
93
|
+
margin-bottom: 0 !important;
|
|
94
|
+
padding: 0 !important;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
.statistics-mpo-editor-fill {
|
|
98
|
+
width: 100%;
|
|
99
|
+
height: 100%;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
.statistics-mpo-cat-editor {
|
|
103
|
+
width: 280px;
|
|
104
|
+
margin-left: 30px;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
.statistics-mpo-cat-row {
|
|
108
|
+
display: flex;
|
|
109
|
+
align-items: center;
|
|
110
|
+
gap: 4px;
|
|
111
|
+
margin-bottom: 2px;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
.statistics-mpo-cat-name {
|
|
115
|
+
width: 120px;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
.statistics-mpo-cat-col-header {
|
|
119
|
+
font-size: 11px;
|
|
120
|
+
color: var(--grey-3);
|
|
121
|
+
text-transform: uppercase;
|
|
122
|
+
letter-spacing: 0.3px;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
.statistics-mpo-desirability-dialog .statistics-mpo-cat-editor {
|
|
126
|
+
width: auto;
|
|
127
|
+
margin-left: 0;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
.statistics-mpo-desirability-dialog .statistics-mpo-cat-name {
|
|
131
|
+
flex: 1;
|
|
132
|
+
width: auto;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
.statistics-mpo-cat-desirability {
|
|
136
|
+
width: 70px;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
.statistics-mpo-weight-toggle {
|
|
140
|
+
cursor: pointer;
|
|
141
|
+
color: var(--grey-3);
|
|
142
|
+
font-size: 12px;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
.statistics-mpo-weight-toggle:hover {
|
|
146
|
+
color: var(--grey-5);
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
.statistics-mpo-weight-toggle-active {
|
|
150
|
+
color: var(--blue-1);
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
.statistics-mpo-weight-toggle-active:hover {
|
|
154
|
+
color: var(--blue-2);
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
.statistics-mpo-hidden {
|
|
158
|
+
display: none !important;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
.statistics-mpo-empty-state {
|
|
162
|
+
text-align: center;
|
|
163
|
+
padding: 48px 24px;
|
|
164
|
+
color: var(--grey-4);
|
|
165
|
+
border: 1px dashed var(--grey-2);
|
|
166
|
+
border-radius: 8px;
|
|
167
|
+
margin: 16px 12px;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
.statistics-mpo-empty-state i {
|
|
171
|
+
font-size: 48px;
|
|
172
|
+
margin-bottom: 16px;
|
|
173
|
+
display: block;
|
|
174
|
+
color: var(--blue-1);
|
|
175
|
+
opacity: 0.3;
|
|
176
|
+
cursor: default;
|
|
177
|
+
pointer-events: none;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
.statistics-mpo-empty-state h3 {
|
|
181
|
+
color: var(--grey-5);
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
.statistics-mpo-empty-state p {
|
|
185
|
+
color: var(--grey-3);
|
|
186
|
+
max-width: 360px;
|
|
187
|
+
margin-inline: auto;
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
.statistics-mpo-dialog-header-row {
|
|
191
|
+
gap: 12px;
|
|
192
|
+
align-items: flex-end;
|
|
193
|
+
margin-bottom: 8px;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
.statistics-mpo-dialog-header-row .ui-input-root {
|
|
197
|
+
flex: 0 1 auto;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
.statistics-mpo-section-header {
|
|
201
|
+
font-size: 11px;
|
|
202
|
+
text-transform: uppercase;
|
|
203
|
+
color: var(--blue-1);
|
|
204
|
+
letter-spacing: 0.5px;
|
|
205
|
+
border-bottom: 1px solid var(--grey-2);
|
|
206
|
+
padding-bottom: 4px;
|
|
207
|
+
margin: 12px 0 8px;
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
.statistics-mpo-param-grid.ui-form {
|
|
211
|
+
display: grid;
|
|
212
|
+
grid-template-columns: 1fr 1fr;
|
|
213
|
+
gap: 0 8px;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
.statistics-mpo-desirability-dialog .statistics-mpo-plot {
|
|
217
|
+
margin: 0 auto;
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
@media (max-width: 500px) {
|
|
221
|
+
.statistics-mpo-row {
|
|
222
|
+
flex-direction: column;
|
|
223
|
+
align-items: flex-start;
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
.statistics-mpo-row > * {
|
|
227
|
+
width: 100% !important;
|
|
228
|
+
margin-bottom: 5px;
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
.statistics-mpo-weight-cell {
|
|
232
|
+
margin-top: 0 !important;
|
|
233
|
+
}
|
|
234
|
+
}
|
package/package.json
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"access": "public"
|
|
5
5
|
},
|
|
6
6
|
"friendlyName": "statistics",
|
|
7
|
-
"version": "1.
|
|
7
|
+
"version": "1.12.1",
|
|
8
8
|
"description": "Statistics utilities",
|
|
9
9
|
"author": {
|
|
10
10
|
"name": "Dmytro Kovalyov",
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
"@datagrok-libraries/utils": "^4.5.7",
|
|
15
15
|
"@types/seedrandom": "^3.0.8",
|
|
16
16
|
"cash-dom": "^8.0.0",
|
|
17
|
-
"datagrok-api": "^1.
|
|
17
|
+
"datagrok-api": "^1.27.0",
|
|
18
18
|
"dayjs": "^1.11.7",
|
|
19
19
|
"jstat": "^1.9.6",
|
|
20
20
|
"konva": "^9.3.20",
|
|
@@ -28,6 +28,7 @@
|
|
|
28
28
|
"eslint": "^8.57.1",
|
|
29
29
|
"eslint-config-google": "^0.14.0",
|
|
30
30
|
"ts-loader": "^9.2.6",
|
|
31
|
+
"css-loader": "^7.1.2",
|
|
31
32
|
"typescript": "^4.2.3"
|
|
32
33
|
},
|
|
33
34
|
"scripts": {
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import * as DG from 'datagrok-api/dg';
|
|
2
|
+
import { PropertyDesirability } from '../mpo';
|
|
3
|
+
export declare class DesirabilityModeDialog {
|
|
4
|
+
private propertyName;
|
|
5
|
+
private prop;
|
|
6
|
+
private onUpdate;
|
|
7
|
+
private onTypeChanged?;
|
|
8
|
+
private mappedCol?;
|
|
9
|
+
constructor(propertyName: string, prop: PropertyDesirability, onUpdate: (patch: Partial<PropertyDesirability>) => void, onTypeChanged?: ((newProp: PropertyDesirability) => void) | undefined, mappedCol?: DG.Column<any, any> | null | undefined);
|
|
10
|
+
private static strategyToLabel;
|
|
11
|
+
private buildDefaultScoreInput;
|
|
12
|
+
show(): void;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=desirability-mode-dialog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"desirability-mode-dialog.d.ts","sourceRoot":"","sources":["desirability-mode-dialog.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAGtC,OAAO,EACL,oBAAoB,EAErB,MAAM,QAAQ,CAAC;AAkBhB,qBAAa,sBAAsB;IAE/B,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,IAAI;IACZ,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,aAAa,CAAC;IACtB,OAAO,CAAC,SAAS,CAAC;gBAJV,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,oBAAoB,EAC1B,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,oBAAoB,CAAC,KAAK,IAAI,EACxD,aAAa,CAAC,aAAY,oBAAoB,KAAK,IAAI,aAAA,EACvD,SAAS,CAAC,wCAAkB;IAGtC,OAAO,CAAC,MAAM,CAAC,eAAe;IAQ9B,OAAO,CAAC,sBAAsB;IAmC9B,IAAI,IAAI,IAAI;CAsKb"}
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
/* eslint-disable max-len */
|
|
2
|
+
import * as ui from 'datagrok-api/ui';
|
|
3
|
+
import { createDefaultCategorical, createDefaultNumerical, isNumerical, } from '../mpo';
|
|
4
|
+
import { MpoDesirabilityLineEditor } from '../editors/mpo-line-editor';
|
|
5
|
+
import { MpoCategoricalEditor } from '../editors/mpo-categorical-editor';
|
|
6
|
+
const DESIRABILITY_MODES = ['freeform', 'gaussian', 'sigmoid'];
|
|
7
|
+
const PROPERTY_TYPES = ['numerical', 'categorical'];
|
|
8
|
+
function sectionHeader(text) {
|
|
9
|
+
return ui.divText(text, 'statistics-mpo-section-header');
|
|
10
|
+
}
|
|
11
|
+
export class DesirabilityModeDialog {
|
|
12
|
+
constructor(propertyName, prop, onUpdate, onTypeChanged, mappedCol) {
|
|
13
|
+
this.propertyName = propertyName;
|
|
14
|
+
this.prop = prop;
|
|
15
|
+
this.onUpdate = onUpdate;
|
|
16
|
+
this.onTypeChanged = onTypeChanged;
|
|
17
|
+
this.mappedCol = mappedCol;
|
|
18
|
+
}
|
|
19
|
+
static strategyToLabel(strategy) {
|
|
20
|
+
switch (strategy) {
|
|
21
|
+
case 'default': return 'Use default score';
|
|
22
|
+
case 'skip': return 'Skip property';
|
|
23
|
+
default: return 'Exclude row';
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
buildDefaultScoreInput(prop) {
|
|
27
|
+
const mv = prop.missingValues;
|
|
28
|
+
const scoreInput = ui.input.float('Default score', { value: (mv === null || mv === void 0 ? void 0 : mv.strategy) === 'default' ? mv.score : 0, min: 0, max: 1, format: '#0.000',
|
|
29
|
+
onValueChanged: (v) => {
|
|
30
|
+
prop.missingValues = { strategy: 'default', score: v };
|
|
31
|
+
this.onUpdate({ missingValues: prop.missingValues });
|
|
32
|
+
}, });
|
|
33
|
+
scoreInput.root.style.display = (mv === null || mv === void 0 ? void 0 : mv.strategy) === 'default' ? '' : 'none';
|
|
34
|
+
const choiceInput = ui.input.choice('If missing', {
|
|
35
|
+
items: ['Exclude row', 'Use default score', 'Skip property'],
|
|
36
|
+
value: DesirabilityModeDialog.strategyToLabel(mv === null || mv === void 0 ? void 0 : mv.strategy),
|
|
37
|
+
onValueChanged: (v) => {
|
|
38
|
+
var _a;
|
|
39
|
+
const use = v === 'Use default score';
|
|
40
|
+
if (v === 'Skip property')
|
|
41
|
+
prop.missingValues = { strategy: 'skip' };
|
|
42
|
+
else if (use)
|
|
43
|
+
prop.missingValues = { strategy: 'default', score: (_a = scoreInput.value) !== null && _a !== void 0 ? _a : 0 };
|
|
44
|
+
else
|
|
45
|
+
prop.missingValues = { strategy: 'exclude' };
|
|
46
|
+
scoreInput.root.style.display = use ? '' : 'none';
|
|
47
|
+
this.onUpdate({ missingValues: prop.missingValues });
|
|
48
|
+
},
|
|
49
|
+
});
|
|
50
|
+
choiceInput.setTooltip('How to handle missing values:<br>' +
|
|
51
|
+
'• <b>Exclude row</b> — assign an MPO score of 0 to the row<br>' +
|
|
52
|
+
'• <b>Use default score</b> — use a fixed fallback desirability value<br>' +
|
|
53
|
+
'• <b>Skip property</b> — calculate the score from the remaining properties');
|
|
54
|
+
scoreInput.setTooltip('Desirability score (0–1) to use as fallback.');
|
|
55
|
+
return ui.form([choiceInput, scoreInput]);
|
|
56
|
+
}
|
|
57
|
+
show() {
|
|
58
|
+
const original = structuredClone(this.prop);
|
|
59
|
+
const dialog = ui.dialog({
|
|
60
|
+
title: this.propertyName,
|
|
61
|
+
});
|
|
62
|
+
dialog.root.classList.add('statistics-mpo-desirability-dialog');
|
|
63
|
+
const contentPanel = ui.divV([]);
|
|
64
|
+
const cached = { [original.functionType]: structuredClone(original) };
|
|
65
|
+
const subs = [];
|
|
66
|
+
let modeInputRoot;
|
|
67
|
+
const typeInput = ui.input.choice('Type', { items: [...PROPERTY_TYPES], value: this.prop.functionType, onValueChanged: (v) => {
|
|
68
|
+
var _a;
|
|
69
|
+
if (v === this.prop.functionType)
|
|
70
|
+
return;
|
|
71
|
+
cached[this.prop.functionType] = structuredClone(this.prop);
|
|
72
|
+
if (cached[v])
|
|
73
|
+
this.prop = structuredClone(cached[v]);
|
|
74
|
+
else if (v === 'categorical') {
|
|
75
|
+
const cats = ((_a = this.mappedCol) === null || _a === void 0 ? void 0 : _a.isCategorical) ?
|
|
76
|
+
this.mappedCol.categories.map((c) => ({ name: c, desirability: 1 })) : undefined;
|
|
77
|
+
this.prop = createDefaultCategorical(original.weight, cats);
|
|
78
|
+
}
|
|
79
|
+
else
|
|
80
|
+
this.prop = createDefaultNumerical(original.weight);
|
|
81
|
+
buildContent();
|
|
82
|
+
} });
|
|
83
|
+
const buildNumericalContent = () => {
|
|
84
|
+
var _a, _b, _c;
|
|
85
|
+
const prop = this.prop;
|
|
86
|
+
(_a = prop.mode) !== null && _a !== void 0 ? _a : (prop.mode = 'freeform');
|
|
87
|
+
const previewEditor = new MpoDesirabilityLineEditor(prop, 355, 103);
|
|
88
|
+
if ((_b = this.mappedCol) === null || _b === void 0 ? void 0 : _b.isNumerical)
|
|
89
|
+
previewEditor.setColumn(this.mappedCol);
|
|
90
|
+
const modeInput = ui.input.choice('Mode', { items: DESIRABILITY_MODES, value: prop.mode, onValueChanged: (v) => {
|
|
91
|
+
prop.mode = v;
|
|
92
|
+
this.onUpdate({ mode: prop.mode });
|
|
93
|
+
updateParams();
|
|
94
|
+
previewEditor.redrawAll(false);
|
|
95
|
+
} });
|
|
96
|
+
const configs = [
|
|
97
|
+
{ key: 'min', label: 'Min', fallback: () => previewEditor.getMinX() },
|
|
98
|
+
{ key: 'max', label: 'Max', fallback: () => previewEditor.getMaxX() },
|
|
99
|
+
{ key: 'mean', label: 'Mean', fallback: () => previewEditor.getDefaultMean() },
|
|
100
|
+
{ key: 'sigma', label: 'Sigma', fallback: () => previewEditor.getDefaultSigma(), transform: (v) => Math.max(0.01, v) },
|
|
101
|
+
{ key: 'x0', label: 'x0', fallback: () => previewEditor.getDefaultX0() },
|
|
102
|
+
{ key: 'k', label: 'k', fallback: () => previewEditor.getDefaultK(), transform: (v) => Math.max(0.1, v) },
|
|
103
|
+
];
|
|
104
|
+
const inputs = new Map();
|
|
105
|
+
for (const cfg of configs) {
|
|
106
|
+
inputs.set(cfg.key, ui.input.float(cfg.label, { value: (_c = prop[cfg.key]) !== null && _c !== void 0 ? _c : cfg.fallback(), format: '#0.000', onValueChanged: (v) => {
|
|
107
|
+
const value = cfg.transform ? cfg.transform(v !== null && v !== void 0 ? v : cfg.fallback()) : (v !== null && v !== void 0 ? v : cfg.fallback());
|
|
108
|
+
prop[cfg.key] = value;
|
|
109
|
+
this.onUpdate({ [cfg.key]: value });
|
|
110
|
+
previewEditor.redrawAll(false);
|
|
111
|
+
} }));
|
|
112
|
+
}
|
|
113
|
+
const syncInputs = () => {
|
|
114
|
+
var _a;
|
|
115
|
+
for (const cfg of configs)
|
|
116
|
+
inputs.get(cfg.key).value = (_a = prop[cfg.key]) !== null && _a !== void 0 ? _a : cfg.fallback();
|
|
117
|
+
};
|
|
118
|
+
inputs.get('min').setTooltip('Minimum property value');
|
|
119
|
+
inputs.get('max').setTooltip('Maximum property value');
|
|
120
|
+
const paramForm = ui.form([
|
|
121
|
+
inputs.get('min'), inputs.get('max'),
|
|
122
|
+
inputs.get('mean'), inputs.get('sigma'),
|
|
123
|
+
inputs.get('x0'), inputs.get('k'),
|
|
124
|
+
]);
|
|
125
|
+
paramForm.classList.add('statistics-mpo-param-grid');
|
|
126
|
+
const updateParams = () => {
|
|
127
|
+
inputs.get('mean').root.classList.toggle('statistics-mpo-hidden', prop.mode !== 'gaussian');
|
|
128
|
+
inputs.get('sigma').root.classList.toggle('statistics-mpo-hidden', prop.mode !== 'gaussian');
|
|
129
|
+
inputs.get('x0').root.classList.toggle('statistics-mpo-hidden', prop.mode !== 'sigmoid');
|
|
130
|
+
inputs.get('k').root.classList.toggle('statistics-mpo-hidden', prop.mode !== 'sigmoid');
|
|
131
|
+
};
|
|
132
|
+
updateParams();
|
|
133
|
+
previewEditor.onParamsChanged = (p) => {
|
|
134
|
+
Object.assign(prop, p);
|
|
135
|
+
syncInputs();
|
|
136
|
+
this.onUpdate(p);
|
|
137
|
+
};
|
|
138
|
+
subs.push(previewEditor.onChanged.subscribe((line) => {
|
|
139
|
+
prop.line = line;
|
|
140
|
+
if (prop.mode === 'freeform')
|
|
141
|
+
this.onUpdate({ line });
|
|
142
|
+
}));
|
|
143
|
+
modeInputRoot = modeInput.root;
|
|
144
|
+
previewEditor.root.classList.add('statistics-mpo-plot');
|
|
145
|
+
contentPanel.append(previewEditor.root, sectionHeader('PARAMETERS'), paramForm);
|
|
146
|
+
};
|
|
147
|
+
const buildCategoricalContent = () => {
|
|
148
|
+
var _a;
|
|
149
|
+
const prop = this.prop;
|
|
150
|
+
const catEditor = new MpoCategoricalEditor(prop, true, true);
|
|
151
|
+
if ((_a = this.mappedCol) === null || _a === void 0 ? void 0 : _a.isCategorical)
|
|
152
|
+
catEditor.setChoices([...this.mappedCol.categories]);
|
|
153
|
+
subs.push(catEditor.onChanged.subscribe(() => this.onUpdate(this.prop)));
|
|
154
|
+
contentPanel.append(sectionHeader('CATEGORIES'), catEditor.root);
|
|
155
|
+
};
|
|
156
|
+
const dispose = () => {
|
|
157
|
+
for (const s of subs)
|
|
158
|
+
s.unsubscribe();
|
|
159
|
+
subs.length = 0;
|
|
160
|
+
};
|
|
161
|
+
const buildContent = () => {
|
|
162
|
+
dispose();
|
|
163
|
+
ui.empty(contentPanel);
|
|
164
|
+
modeInputRoot = undefined;
|
|
165
|
+
if (isNumerical(this.prop))
|
|
166
|
+
buildNumericalContent();
|
|
167
|
+
else
|
|
168
|
+
buildCategoricalContent();
|
|
169
|
+
const headerItems = [];
|
|
170
|
+
if (!this.mappedCol)
|
|
171
|
+
headerItems.push(typeInput.root);
|
|
172
|
+
if (modeInputRoot)
|
|
173
|
+
headerItems.push(modeInputRoot);
|
|
174
|
+
if (headerItems.length > 0)
|
|
175
|
+
contentPanel.prepend(ui.divH(headerItems, 'statistics-mpo-dialog-header-row'));
|
|
176
|
+
contentPanel.append(sectionHeader('MISSING VALUES'), this.buildDefaultScoreInput(this.prop));
|
|
177
|
+
};
|
|
178
|
+
buildContent();
|
|
179
|
+
dialog.add(contentPanel);
|
|
180
|
+
dialog.onOK(() => {
|
|
181
|
+
var _a;
|
|
182
|
+
dispose();
|
|
183
|
+
if (this.prop.functionType !== original.functionType)
|
|
184
|
+
(_a = this.onTypeChanged) === null || _a === void 0 ? void 0 : _a.call(this, this.prop);
|
|
185
|
+
else
|
|
186
|
+
this.onUpdate(this.prop);
|
|
187
|
+
dialog.close();
|
|
188
|
+
});
|
|
189
|
+
dialog.onCancel(() => {
|
|
190
|
+
dispose();
|
|
191
|
+
this.prop = original;
|
|
192
|
+
this.onUpdate(original);
|
|
193
|
+
dialog.close();
|
|
194
|
+
});
|
|
195
|
+
dialog.show();
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzaXJhYmlsaXR5LW1vZGUtZGlhbG9nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZGVzaXJhYmlsaXR5LW1vZGUtZGlhbG9nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDRCQUE0QjtBQUM1QixPQUFPLEtBQUssRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBSXRDLE9BQU8sRUFFTCx3QkFBd0IsRUFBRSxzQkFBc0IsRUFBRSxXQUFXLEdBQzlELE1BQU0sUUFBUSxDQUFDO0FBQ2hCLE9BQU8sRUFBQyx5QkFBeUIsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQ3JFLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLG1DQUFtQyxDQUFDO0FBRXZFLE1BQU0sa0JBQWtCLEdBQXVCLENBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUNuRixNQUFNLGNBQWMsR0FBRyxDQUFDLFdBQVcsRUFBRSxhQUFhLENBQVUsQ0FBQztBQVM3RCxTQUFTLGFBQWEsQ0FBQyxJQUFZO0lBQ2pDLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsK0JBQStCLENBQUMsQ0FBQztBQUMzRCxDQUFDO0FBRUQsTUFBTSxPQUFPLHNCQUFzQjtJQUNqQyxZQUNVLFlBQW9CLEVBQ3BCLElBQTBCLEVBQzFCLFFBQXdELEVBQ3hELGFBQXVELEVBQ3ZELFNBQTRCO1FBSjVCLGlCQUFZLEdBQVosWUFBWSxDQUFRO1FBQ3BCLFNBQUksR0FBSixJQUFJLENBQXNCO1FBQzFCLGFBQVEsR0FBUixRQUFRLENBQWdEO1FBQ3hELGtCQUFhLEdBQWIsYUFBYSxDQUEwQztRQUN2RCxjQUFTLEdBQVQsU0FBUyxDQUFtQjtJQUNuQyxDQUFDO0lBRUksTUFBTSxDQUFDLGVBQWUsQ0FBQyxRQUFpQjtRQUM5QyxRQUFRLFFBQVEsRUFBRTtZQUNsQixLQUFLLFNBQVMsQ0FBQyxDQUFDLE9BQU8sbUJBQW1CLENBQUM7WUFDM0MsS0FBSyxNQUFNLENBQUMsQ0FB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RSxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDL0YsQ0FBQyxDQUFDO1FBRUYsWUFBWSxFQUFFLENBQUM7UUFFZixNQUFNLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRXpCLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFOztZQUNmLE9BQU8sRUFBRSxDQUFDO1lBQ1YsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksS0FBSyxRQUFRLENBQUMsWUFBWTtnQkFDbEQsTUFBQSxJQUFJLENBQUMsYUFBYSxxREFBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7O2dCQUVoQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMzQixNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDakIsQ0FBQyxDQUFDLENBQUM7UUFFSCxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUNuQixPQUFPLEVBQUUsQ0FBQztZQUNWLElBQUksQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDeEIsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2pCLENBQUMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2hCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4gKi9cbmltcG9ydCAqIGFzIHVpIGZyb20gJ2RhdGFncm9rLWFwaS91aSc7XG5pbXBvcnQgKiBhcyBERyBmcm9tICdkYXRhZ3Jvay1hcGkvZGcnO1xuXG5pbXBvcnQge1N1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBQcm9wZXJ0eURlc2lyYWJpbGl0eSwgTnVtZXJpY2FsRGVzaXJhYmlsaXR5LCBDYXRlZ29yaWNhbERlc2lyYWJpbGl0eSwgRGVzaXJhYmlsaXR5TW9kZSxcbiAgY3JlYXRlRGVmYXVsdENhdGVnb3JpY2FsLCBjcmVhdGVEZWZhdWx0TnVtZXJpY2FsLCBpc051bWVyaWNhbCxcbn0gZnJvbSAnLi4vbXBvJztcbmltcG9ydCB7TXBvRGVzaXJhYmlsaXR5TGluZUVkaXRvcn0gZnJvbSAnLi4vZWRpdG9ycy9tcG8tbGluZS1lZGl0b3InO1xuaW1wb3J0IHtNcG9DYXRlZ29yaWNhbEVkaXRvcn0gZnJvbSAnLi4vZWRpdG9ycy9tcG8tY2F0ZWdvcmljYWwtZWRpdG9yJztcblxuY29uc3QgREVTSVJBQklMSVRZX01PREVTOiBEZXNpcmFiaWxpdHlNb2RlW10gPSBbJ2ZyZWVmb3JtJywgJ2dhdXNzaWFuJywgJ3NpZ21vaWQnXTtcbmNvbnN0IFBST1BFUlRZX1RZUEVTID0gWydudW1lcmljYWwnLCAnY2F0ZWdvcmljYWwnXSBhcyBjb25zdDtcblxudHlwZSBQYXJhbUNvbmZpZyA9IHtcbiAga2V5OiAnbWluJyB8ICdtYXgnIHwgJ21lYW4nIHwgJ3NpZ21hJyB8ICd4MCcgfCAnayc7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIGZhbGxiYWNrOiAoKSA9PiBudW1iZXI7XG4gIHRyYW5zZm9ybT86ICh2OiBudW1iZXIpID0+IG51bWJlcjtcbn07XG5cbmZ1bmN0aW9uIHNlY3Rpb25IZWFkZXIodGV4dDogc3RyaW5nKTogSFRNTEVsZW1lbnQge1xuICByZXR1cm4gdWkuZGl2VGV4dCh0ZXh0LCAnc3RhdGlzdGljcy1tcG8tc2VjdGlvbi1oZWFkZXInKTtcbn1cblxuZXhwb3J0IGNsYXNzIERlc2lyYWJpbGl0eU1vZGVEaWFsb2cge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHByb3BlcnR5TmFtZTogc3RyaW5nLFxuICAgIHByaXZhdGUgcHJvcDogUHJvcGVydHlEZXNpcmFiaWxpdHksXG4gICAgcHJpdmF0ZSBvblVwZGF0ZTogKHBhdGNoOiBQYXJ0aWFsPFByb3BlcnR5RGVzaXJhYmlsaXR5PikgPT4gdm9pZCxcbiAgICBwcml2YXRlIG9uVHlwZUNoYW5nZWQ/OiAobmV3UHJvcDogUHJvcGVydHlEZXNpcmFiaWxpdHkpID0+IHZvaWQsXG4gICAgcHJpdmF0ZSBtYXBwZWRDb2w/OiBERy5Db2x1bW4gfCBudWxsLFxuICApIHt9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgc3RyYXRlZ3lUb0xhYmVsKHN0cmF0ZWd5Pzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBzd2l0Y2ggKHN0cmF0ZWd5KSB7XG4gICAgY2FzZSAnZGVmYXVsdCc6IHJldHVybiAnVXNlIGRlZmF1bHQgc2NvcmUnO1xuICAgIGNhc2UgJ3NraXAnOiByZXR1cm4gJ1NraXAgcHJvcGVydHknO1xuICAgIGRlZmF1bHQ6IHJldHVybiAnRXhjbHVkZSByb3cnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYnVpbGREZWZhdWx0U2NvcmVJbnB1dChwcm9wOiBQcm9wZXJ0eURlc2lyYWJpbGl0eSk6IEhUTUxFbGVtZW50IHtcbiAgICBjb25zdCBtdiA9IHByb3AubWlzc2luZ1ZhbHVlcztcbiAgICBjb25zdCBzY29yZUlucHV0ID0gdWkuaW5wdXQuZmxvYXQoJ0RlZmF1bHQgc2NvcmUnLCB7dmFsdWU6IG12Py5zdHJhdGVneSA9PT0gJ2RlZmF1bHQnID8gbXYuc2NvcmUgOiAwLCBtaW46IDAsIG1heDogMSwgZm9ybWF0OiAnIzAuMDAwJyxcbiAgICAgIG9uVmFsdWVDaGFuZ2VkOiAodikgPT4ge1xuICAgICAgICBwcm9wLm1pc3NpbmdWYWx1ZXMgPSB7c3RyYXRlZ3k6ICdkZWZhdWx0Jywgc2NvcmU6IHZ9O1xuICAgICAgICB0aGlzLm9uVXBkYXRlKHttaXNzaW5nVmFsdWVzOiBwcm9wLm1pc3NpbmdWYWx1ZXN9KTtcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgc2NvcmVJbnB1dC5yb290LnN0eWxlLmRpc3BsYXkgPSBtdj8uc3RyYXRlZ3kgPT09ICdkZWZhdWx0JyA/ICcnIDogJ25vbmUnO1xuXG4gICAgY29uc3QgY2hvaWNlSW5wdXQgPSB1aS5pbnB1dC5jaG9pY2UoJ0lmIG1pc3NpbmcnLCB7XG4gICAgICBpdGVtczogWydFeGNsdWRlIHJvdycsICdVc2UgZGVmYXVsdCBzY29yZScsICdTa2lwIHByb3BlcnR5J10sXG4gICAgICB2YWx1ZTogRGVzaXJhYmlsaXR5TW9kZURpYWxvZy5zdHJhdGVneVRvTGFiZWwobXY/LnN0cmF0ZWd5KSxcbiAgICAgIG9uVmFsdWVDaGFuZ2VkOiAodikgPT4ge1xuICAgICAgICBjb25zdCB1c2UgPSB2ID09PSAnVXNlIGRlZmF1bHQgc2NvcmUnO1xuICAgICAgICBpZiAodiA9PT0gJ1NraXAgcHJvcGVydHknKVxuICAgICAgICAgIHByb3AubWlzc2luZ1ZhbHVlcyA9IHtzdHJhdGVneTogJ3NraXAnfTtcbiAgICAgICAgZWxzZSBpZiAodXNlKVxuICAgICAgICAgIHByb3AubWlzc2luZ1ZhbHVlcyA9IHtzdHJhdGVneTogJ2RlZmF1bHQnLCBzY29yZTogc2NvcmVJbnB1dC52YWx1ZSA/PyAwfTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIHByb3AubWlzc2luZ1ZhbHVlcyA9IHtzdHJhdGVneTogJ2V4Y2x1ZGUnfTtcbiAgICAgICAgc2NvcmVJbnB1dC5yb290LnN0eWxlLmRpc3BsYXkgPSB1c2UgPyAnJyA6ICdub25lJztcbiAgICAgICAgdGhpcy5vblVwZGF0ZSh7bWlzc2luZ1ZhbHVlczogcHJvcC5taXNzaW5nVmFsdWVzfSBhcyBhbnkpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgICBjaG9pY2VJbnB1dC5zZXRUb29sdGlwKFxuICAgICAgJ0hvdyB0byBoYW5kbGUgbWlzc2luZyB2YWx1ZXM6PGJyPicgK1xuICAgICAgJ+KAoiA8Yj5FeGNsdWRlIHJvdzwvYj4g4oCUIGFzc2lnbiBhbiBNUE8gc2NvcmUgb2YgMCB0byB0aGUgcm93PGJyPicgK1xuICAgICAgJ+KAoiA8Yj5Vc2UgZGVmYXVsdCBzY29yZTwvYj4g4oCUIHVzZSBhIGZpeGVkIGZhbGxiYWNrIGRlc2lyYWJpbGl0eSB2YWx1ZTxicj4nICtcbiAgICAgICfigKIgPGI+U2tpcCBwcm9wZXJ0eTwvYj4g4oCUIGNhbGN1bGF0ZSB0aGUgc2NvcmUgZnJvbSB0aGUgcmVtYWluaW5nIHByb3BlcnRpZXMnLFxuICAgICk7XG4gICAgc2NvcmVJbnB1dC5zZXRUb29sdGlwKCdEZXNpcmFiaWxpdHkgc2NvcmUgKDDigJMxKSB0byB1c2UgYXMgZmFsbGJhY2suJyk7XG4gICAgcmV0dXJuIHVpLmZvcm0oW2Nob2ljZUlucHV0LCBzY29yZUlucHV0XSk7XG4gIH1cblxuICBzaG93KCk6IHZvaWQge1xuICAgIGNvbnN0IG9yaWdpbmFsID0gc3RydWN0dXJlZENsb25lKHRoaXMucHJvcCk7XG5cbiAgICBjb25zdCBkaWFsb2cgPSB1aS5kaWFsb2coe1xuICAgICAgdGl0bGU6IHRoaXMucHJvcGVydHlOYW1lLFxuICAgIH0pO1xuICAgIGRpYWxvZy5yb290LmNsYXNzTGlzdC5hZGQoJ3N0YXRpc3RpY3MtbXBvLWRlc2lyYWJpbGl0eS1kaWFsb2cnKTtcblxuICAgIGNvbnN0IGNvbnRlbnRQYW5lbCA9IHVpLmRpdlYoW10pO1xuICAgIGNvbnN0IGNhY2hlZDogUmVjb3JkPHN0cmluZywgUHJvcGVydHlEZXNpcmFiaWxpdHk+ID0ge1tvcmlnaW5hbC5mdW5jdGlvblR5cGVdOiBzdHJ1Y3R1cmVkQ2xvbmUob3JpZ2luYWwpfTtcbiAgICBjb25zdCBzdWJzOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xuXG4gICAgbGV0IG1vZGVJbnB1dFJvb3Q6IEhUTUxFbGVtZW50IHwgdW5kZWZpbmVkO1xuXG4gICAgY29uc3QgdHlwZUlucHV0ID0gdWkuaW5wdXQuY2hvaWNlKCdUeXBlJywge2l0ZW1zOiBbLi4uUFJPUEVSVFlfVFlQRVNdLCB2YWx1ZTogdGhpcy5wcm9wLmZ1bmN0aW9uVHlwZSwgb25WYWx1ZUNoYW5nZWQ6ICh2KSA9PiB7XG4gICAgICBpZiAodiA9PT0gdGhpcy5wcm9wLmZ1bmN0aW9uVHlwZSlcbiAgICAgICAgcmV0dXJuO1xuXG4gICAgICBjYWNoZWRbdGhpcy5wcm9wLmZ1bmN0aW9uVHlwZV0gPSBzdHJ1Y3R1cmVkQ2xvbmUodGhpcy5wcm9wKTtcblxuICAgICAgaWYgKGNhY2hlZFt2XSlcbiAgICAgICAgdGhpcy5wcm9wID0gc3RydWN0dXJlZENsb25lKGNhY2hlZFt2XSk7XG4gICAgICBlbHNlIGlmICh2ID09PSAnY2F0ZWdvcmljYWwnKSB7XG4gICAgICAgIGNvbnN0IGNhdHMgPSB0aGlzLm1hcHBlZENvbD8uaXNDYXRlZ29yaWNhbCA/XG4gICAgICAgICAgdGhpcy5tYXBwZWRDb2wuY2F0ZWdvcmllcy5tYXAoKGM6IHN0cmluZykgPT4gKHtuYW1lOiBjLCBkZXNpcmFiaWxpdHk6IDF9KSkgOiB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMucHJvcCA9IGNyZWF0ZURlZmF1bHRDYXRlZ29yaWNhbChvcmlnaW5hbC53ZWlnaHQsIGNhdHMpO1xuICAgICAgfVxuICAgICAgZWxzZVxuICAgICAgICB0aGlzLnByb3AgPSBjcmVhdGVEZWZhdWx0TnVtZXJpY2FsKG9yaWdpbmFsLndlaWdodCk7XG5cbiAgICAgIGJ1aWxkQ29udGVudCgpO1xuICAgIH19KTtcblxuICAgIGNvbnN0IGJ1aWxkTnVtZXJpY2FsQ29udGVudCA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHByb3AgPSB0aGlzLnByb3AgYXMgTnVtZXJpY2FsRGVzaXJhYmlsaXR5O1xuICAgICAgcHJvcC5tb2RlID8/PSAnZnJlZWZvcm0nO1xuXG4gICAgICBjb25zdCBwcmV2aWV3RWRpdG9yID0gbmV3IE1wb0Rlc2lyYWJpbGl0eUxpbmVFZGl0b3IocHJvcCwgMzU1LCAxMDMpO1xuICAgICAgaWYgKHRoaXMubWFwcGVkQ29sPy5pc051bWVyaWNhbClcbiAgICAgICAgcHJldmlld0VkaXRvci5zZXRDb2x1bW4odGhpcy5tYXBwZWRDb2wpO1xuXG4gICAgICBjb25zdCBtb2RlSW5wdXQgPSB1aS5pbnB1dC5jaG9pY2UoJ01vZGUnLCB7aXRlbXM6IERFU0lSQUJJTElUWV9NT0RFUywgdmFsdWU6IHByb3AubW9kZSwgb25WYWx1ZUNoYW5nZWQ6ICh2KSA9PiB7XG4gICAgICAgIHByb3AubW9kZSA9IHYgYXMgRGVzaXJhYmlsaXR5TW9kZTtcbiAgICAgICAgdGhpcy5vblVwZGF0ZSh7bW9kZTogcHJvcC5tb2RlfSBhcyBhbnkpO1xuICAgICAgICB1cGRhdGVQYXJhbXMoKTtcbiAgICAgICAgcHJldmlld0VkaXRvci5yZWRyYXdBbGwoZmFsc2UpO1xuICAgICAgfX0pO1xuXG4gICAgICBjb25zdCBjb25maWdzOiBQYXJhbUNvbmZpZ1tdID0gW1xuICAgICAgICB7a2V5OiAnbWluJywgbGFiZWw6ICdNaW4nLCBmYWxsYmFjazogKCkgPT4gcHJldmlld0VkaXRvci5nZXRNaW5YKCl9LFxuICAgICAgICB7a2V5OiAnbWF4JywgbGFiZWw6ICdNYXgnLCBmYWxsYmFjazogKCkgPT4gcHJldmlld0VkaXRvci5nZXRNYXhYKCl9LFxuICAgICAgICB7a2V5OiAnbWVhbicsIGxhYmVsOiAnTWVhbicsIGZhbGxiYWNrOiAoKSA9PiBwcmV2aWV3RWRpdG9yLmdldERlZmF1bHRNZWFuKCl9LFxuICAgICAgICB7a2V5OiAnc2lnbWEnLCBsYWJlbDogJ1NpZ21hJywgZmFsbGJhY2s6ICgpID0+IHByZXZpZXdFZGl0b3IuZ2V0RGVmYXVsdFNpZ21hKCksIHRyYW5zZm9ybTogKHYpID0+IE1hdGgubWF4KDAuMDEsIHYpfSxcbiAgICAgICAge2tleTogJ3gwJywgbGFiZWw6ICd4MCcsIGZhbGxiYWNrOiAoKSA9PiBwcmV2aWV3RWRpdG9yLmdldERlZmF1bHRYMCgpfSxcbiAgICAgICAge2tleTogJ2snLCBsYWJlbDogJ2snLCBmYWxsYmFjazogKCkgPT4gcHJldmlld0VkaXRvci5nZXREZWZhdWx0SygpLCB0cmFuc2Zvcm06ICh2KSA9PiBNYXRoLm1heCgwLjEsIHYpfSxcbiAgICAgIF07XG5cbiAgICAgIGNvbnN0IGlucHV0cyA9IG5ldyBNYXA8c3RyaW5nLCBERy5JbnB1dEJhc2U+KCk7XG4gICAgICBmb3IgKGNvbnN0IGNmZyBvZiBjb25maWdzKSB7XG4gICAgICAgIGlucHV0cy5zZXQoY2ZnLmtleSwgdWkuaW5wdXQuZmxvYXQoY2ZnLmxhYmVsLCB7dmFsdWU6IHByb3BbY2ZnLmtleV0gPz8gY2ZnLmZhbGxiYWNrKCksIGZvcm1hdDogJyMwLjAwMCcsIG9uVmFsdWVDaGFuZ2VkOiAodikgPT4ge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gY2ZnLnRyYW5zZm9ybSA/IGNmZy50cmFuc2Zvcm0odiA/PyBjZmcuZmFsbGJhY2soKSkgOiAodiA/PyBjZmcuZmFsbGJhY2soKSk7XG4gICAgICAgICAgcHJvcFtjZmcua2V5XSA9IHZhbHVlO1xuICAgICAgICAgIHRoaXMub25VcGRhdGUoe1tjZmcua2V5XTogdmFsdWV9IGFzIGFueSk7XG4gICAgICAgICAgcHJldmlld0VkaXRvci5yZWRyYXdBbGwoZmFsc2UpO1xuICAgICAgICB9fSkpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzeW5jSW5wdXRzID0gKCkgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IGNmZyBvZiBjb25maWdzKVxuICAgICAgICAgIGlucHV0cy5nZXQoY2ZnLmtleSkhLnZhbHVlID0gcHJvcFtjZmcua2V5XSA/PyBjZmcuZmFsbGJhY2soKTtcbiAgICAgIH07XG5cbiAgICAgIGlucHV0cy5nZXQoJ21pbicpIS5zZXRUb29sdGlwKCdNaW5pbXVtIHByb3BlcnR5IHZhbHVlJyk7XG4gICAgICBpbnB1dHMuZ2V0KCdtYXgnKSEuc2V0VG9vbHRpcCgnTWF4aW11bSBwcm9wZXJ0eSB2YWx1ZScpO1xuXG4gICAgICBjb25zdCBwYXJhbUZvcm0gPSB1aS5mb3JtKFtcbiAgICAgICAgaW5wdXRzLmdldCgnbWluJykhLCBpbnB1dHMuZ2V0KCdtYXgnKSEsXG4gICAgICAgIGlucHV0cy5nZXQoJ21lYW4nKSEsIGlucHV0cy5nZXQoJ3NpZ21hJykhLFxuICAgICAgICBpbnB1dHMuZ2V0KCd4MCcpISwgaW5wdXRzLmdldCgnaycpISxcbiAgICAgIF0pO1xuICAgICAgcGFyYW1Gb3JtLmNsYXNzTGlzdC5hZGQoJ3N0YXRpc3RpY3MtbXBvLXBhcmFtLWdyaWQnKTtcblxuICAgICAgY29uc3QgdXBkYXRlUGFyYW1zID0gKCkgPT4ge1xuICAgICAgICBpbnB1dHMuZ2V0KCdtZWFuJykhLnJvb3QuY2xhc3NMaXN0LnRvZ2dsZSgnc3RhdGlzdGljcy1tcG8taGlkZGVuJywgcHJvcC5tb2RlICE9PSAnZ2F1c3NpYW4nKTtcbiAgICAgICAgaW5wdXRzLmdldCgnc2lnbWEnKSEucm9vdC5jbGFzc0xpc3QudG9nZ2xlKCdzdGF0aXN0aWNzLW1wby1oaWRkZW4nLCBwcm9wLm1vZGUgIT09ICdnYXVzc2lhbicpO1xuICAgICAgICBpbnB1dHMuZ2V0KCd4MCcpIS5yb290LmNsYXNzTGlzdC50b2dnbGUoJ3N0YXRpc3RpY3MtbXBvLWhpZGRlbicsIHByb3AubW9kZSAhPT0gJ3NpZ21vaWQnKTtcbiAgICAgICAgaW5wdXRzLmdldCgnaycpIS5yb290LmNsYXNzTGlzdC50b2dnbGUoJ3N0YXRpc3RpY3MtbXBvLWhpZGRlbicsIHByb3AubW9kZSAhPT0gJ3NpZ21vaWQnKTtcbiAgICAgIH07XG5cbiAgICAgIHVwZGF0ZVBhcmFtcygpO1xuXG4gICAgICBwcmV2aWV3RWRpdG9yLm9uUGFyYW1zQ2hhbmdlZCA9IChwKSA9PiB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24ocHJvcCwgcCk7XG4gICAgICAgIHN5bmNJbnB1dHMoKTtcbiAgICAgICAgdGhpcy5vblVwZGF0ZShwIGFzIGFueSk7XG4gICAgICB9O1xuXG4gICAgICBzdWJzLnB1c2gocHJldmlld0VkaXRvci5vbkNoYW5nZWQuc3Vic2NyaWJlKChsaW5lKSA9PiB7XG4gICAgICAgIHByb3AubGluZSA9IGxpbmU7XG4gICAgICAgIGlmIChwcm9wLm1vZGUgPT09ICdmcmVlZm9ybScpXG4gICAgICAgICAgdGhpcy5vblVwZGF0ZSh7bGluZX0gYXMgYW55KTtcbiAgICAgIH0pKTtcblxuICAgICAgbW9kZUlucHV0Um9vdCA9IG1vZGVJbnB1dC5yb290O1xuICAgICAgcHJldmlld0VkaXRvci5yb290LmNsYXNzTGlzdC5hZGQoJ3N0YXRpc3RpY3MtbXBvLXBsb3QnKTtcbiAgICAgIGNvbnRlbnRQYW5lbC5hcHBlbmQocHJldmlld0VkaXRvci5yb290LCBzZWN0aW9uSGVhZGVyKCdQQVJBTUVURVJTJyksIHBhcmFtRm9ybSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGJ1aWxkQ2F0ZWdvcmljYWxDb250ZW50ID0gKCkgPT4ge1xuICAgICAgY29uc3QgcHJvcCA9IHRoaXMucHJvcCBhcyBDYXRlZ29yaWNhbERlc2lyYWJpbGl0eTtcbiAgICAgIGNvbnN0IGNhdEVkaXRvciA9IG5ldyBNcG9DYXRlZ29yaWNhbEVkaXRvcihwcm9wLCB0cnVlLCB0cnVlKTtcbiAgICAgIGlmICh0aGlzLm1hcHBlZENvbD8uaXNDYXRlZ29yaWNhbClcbiAgICAgICAgY2F0RWRpdG9yLnNldENob2ljZXMoWy4uLnRoaXMubWFwcGVkQ29sLmNhdGVnb3JpZXNdKTtcbiAgICAgIHN1YnMucHVzaChjYXRFZGl0b3Iub25DaGFuZ2VkLnN1YnNjcmliZSgoKSA9PiB0aGlzLm9uVXBkYXRlKHRoaXMucHJvcCkpKTtcbiAgICAgIGNvbnRlbnRQYW5lbC5hcHBlbmQoc2VjdGlvbkhlYWRlcignQ0FURUdPUklFUycpLCBjYXRFZGl0b3Iucm9vdCk7XG4gICAgfTtcblxuICAgIGNvbnN0IGRpc3Bvc2UgPSAoKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IHMgb2Ygc3VicylcbiAgICAgICAgcy51bnN1YnNjcmliZSgpO1xuICAgICAgc3Vicy5sZW5ndGggPSAwO1xuICAgIH07XG5cbiAgICBjb25zdCBidWlsZENvbnRlbnQgPSAoKSA9PiB7XG4gICAgICBkaXNwb3NlKCk7XG4gICAgICB1aS5lbXB0eShjb250ZW50UGFuZWwpO1xuICAgICAgbW9kZUlucHV0Um9vdCA9IHVuZGVmaW5lZDtcblxuICAgICAgaWYgKGlzTnVtZXJpY2FsKHRoaXMucHJvcCkpXG4gICAgICAgIGJ1aWxkTnVtZXJpY2FsQ29udGVudCgpO1xuICAgICAgZWxzZVxuICAgICAgICBidWlsZENhdGVnb3JpY2FsQ29udGVudCgpO1xuXG4gICAgICBjb25zdCBoZWFkZXJJdGVtczogSFRNTEVsZW1lbnRbXSA9IFtdO1xuICAgICAgaWYgKCF0aGlzLm1hcHBlZENvbClcbiAgICAgICAgaGVhZGVySXRlbXMucHVzaCh0eXBlSW5wdXQucm9vdCk7XG4gICAgICBpZiAobW9kZUlucHV0Um9vdClcbiAgICAgICAgaGVhZGVySXRlbXMucHVzaChtb2RlSW5wdXRSb290KTtcbiAgICAgIGlmIChoZWFkZXJJdGVtcy5sZW5ndGggPiAwKVxuICAgICAgICBjb250ZW50UGFuZWwucHJlcGVuZCh1aS5kaXZIKGhlYWRlckl0ZW1zLCAnc3RhdGlzdGljcy1tcG8tZGlhbG9nLWhlYWRlci1yb3cnKSk7XG5cbiAgICAgIGNvbnRlbnRQYW5lbC5hcHBlbmQoc2VjdGlvbkhlYWRlcignTUlTU0lORyBWQUxVRVMnKSwgdGhpcy5idWlsZERlZmF1bHRTY29yZUlucHV0KHRoaXMucHJvcCkpO1xuICAgIH07XG5cbiAgICBidWlsZENvbnRlbnQoKTtcblxuICAgIGRpYWxvZy5hZGQoY29udGVudFBhbmVsKTtcblxuICAgIGRpYWxvZy5vbk9LKCgpID0+IHtcbiAgICAgIGRpc3Bvc2UoKTtcbiAgICAgIGlmICh0aGlzLnByb3AuZnVuY3Rpb25UeXBlICE9PSBvcmlnaW5hbC5mdW5jdGlvblR5cGUpXG4gICAgICAgIHRoaXMub25UeXBlQ2hhbmdlZD8uKHRoaXMucHJvcCk7XG4gICAgICBlbHNlXG4gICAgICAgIHRoaXMub25VcGRhdGUodGhpcy5wcm9wKTtcbiAgICAgIGRpYWxvZy5jbG9zZSgpO1xuICAgIH0pO1xuXG4gICAgZGlhbG9nLm9uQ2FuY2VsKCgpID0+IHtcbiAgICAgIGRpc3Bvc2UoKTtcbiAgICAgIHRoaXMucHJvcCA9IG9yaWdpbmFsO1xuICAgICAgdGhpcy5vblVwZGF0ZShvcmlnaW5hbCk7XG4gICAgICBkaWFsb2cuY2xvc2UoKTtcbiAgICB9KTtcblxuICAgIGRpYWxvZy5zaG93KCk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import * as DG from 'datagrok-api/dg';
|
|
2
|
+
import { Subject } from 'rxjs';
|
|
3
|
+
import { PropertyDesirability } from '../mpo';
|
|
4
|
+
export interface DesirabilityEditor<T = any> {
|
|
5
|
+
supportsModeDialog: boolean;
|
|
6
|
+
root: HTMLElement;
|
|
7
|
+
onChanged: Subject<T>;
|
|
8
|
+
redrawAll(): void;
|
|
9
|
+
resize?(width: number, height: number): void;
|
|
10
|
+
setRange?(min: number, max: number): void;
|
|
11
|
+
setColumn?(col: DG.Column | null): void;
|
|
12
|
+
}
|
|
13
|
+
export declare class DesirabilityEditorFactory {
|
|
14
|
+
static create(prop: PropertyDesirability, width?: number, height?: number, design?: boolean): DesirabilityEditor;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=desirability-editor-factory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"desirability-editor-factory.d.ts","sourceRoot":"","sources":["desirability-editor-factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAEtC,OAAO,EAAC,OAAO,EAAC,MAAM,MAAM,CAAC;AAE7B,OAAO,EAAC,oBAAoB,EAAc,MAAM,QAAQ,CAAC;AAIzD,MAAM,WAAW,kBAAkB,CAAC,CAAC,GAAG,GAAG;IACzC,kBAAkB,EAAE,OAAO,CAAC;IAC5B,IAAI,EAAE,WAAW,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IACtB,SAAS,IAAI,IAAI,CAAC;IAClB,MAAM,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7C,QAAQ,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1C,SAAS,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;CACzC;AAED,qBAAa,yBAAyB;IACpC,MAAM,CAAC,MAAM,CACX,IAAI,EAAE,oBAAoB,EAC1B,KAAK,SAAM,EACX,MAAM,SAAK,EACX,MAAM,UAAQ,GACb,kBAAkB;CAMtB"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { isNumerical } from '../mpo';
|
|
2
|
+
import { MpoCategoricalEditor } from './mpo-categorical-editor';
|
|
3
|
+
import { MpoDesirabilityLineEditor } from './mpo-line-editor';
|
|
4
|
+
export class DesirabilityEditorFactory {
|
|
5
|
+
static create(prop, width = 300, height = 80, design = false) {
|
|
6
|
+
if (isNumerical(prop))
|
|
7
|
+
return new MpoDesirabilityLineEditor(prop, width, height);
|
|
8
|
+
return new MpoCategoricalEditor(prop, design, false);
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzaXJhYmlsaXR5LWVkaXRvci1mYWN0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZGVzaXJhYmlsaXR5LWVkaXRvci1mYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUlBLE9BQU8sRUFBdUIsV0FBVyxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBQ3pELE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQzlELE9BQU8sRUFBQyx5QkFBeUIsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBWTVELE1BQU0sT0FBTyx5QkFBeUI7SUFDcEMsTUFBTSxDQUFDLE1BQU0sQ0FDWCxJQUEwQixFQUMxQixLQUFLLEdBQUcsR0FBRyxFQUNYLE1BQU0sR0FBRyxFQUFFLEVBQ1gsTUFBTSxHQUFHLEtBQUs7UUFFZCxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUM7WUFDbkIsT0FBTyxJQUFJLHlCQUF5QixDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFNUQsT0FBTyxJQUFJLG9CQUFvQixDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDdkQsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcblxuaW1wb3J0IHtTdWJqZWN0fSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHtQcm9wZXJ0eURlc2lyYWJpbGl0eSwgaXNOdW1lcmljYWx9IGZyb20gJy4uL21wbyc7XG5pbXBvcnQge01wb0NhdGVnb3JpY2FsRWRpdG9yfSBmcm9tICcuL21wby1jYXRlZ29yaWNhbC1lZGl0b3InO1xuaW1wb3J0IHtNcG9EZXNpcmFiaWxpdHlMaW5lRWRpdG9yfSBmcm9tICcuL21wby1saW5lLWVkaXRvcic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVzaXJhYmlsaXR5RWRpdG9yPFQgPSBhbnk+IHtcbiAgc3VwcG9ydHNNb2RlRGlhbG9nOiBib29sZWFuO1xuICByb290OiBIVE1MRWxlbWVudDtcbiAgb25DaGFuZ2VkOiBTdWJqZWN0PFQ+O1xuICByZWRyYXdBbGwoKTogdm9pZDtcbiAgcmVzaXplPyh3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcik6IHZvaWQ7XG4gIHNldFJhbmdlPyhtaW46IG51bWJlciwgbWF4OiBudW1iZXIpOiB2b2lkO1xuICBzZXRDb2x1bW4/KGNvbDogREcuQ29sdW1uIHwgbnVsbCk6IHZvaWQ7XG59XG5cbmV4cG9ydCBjbGFzcyBEZXNpcmFiaWxpdHlFZGl0b3JGYWN0b3J5IHtcbiAgc3RhdGljIGNyZWF0ZShcbiAgICBwcm9wOiBQcm9wZXJ0eURlc2lyYWJpbGl0eSxcbiAgICB3aWR0aCA9IDMwMCxcbiAgICBoZWlnaHQgPSA4MCxcbiAgICBkZXNpZ24gPSBmYWxzZSxcbiAgKTogRGVzaXJhYmlsaXR5RWRpdG9yIHtcbiAgICBpZiAoaXNOdW1lcmljYWwocHJvcCkpXG4gICAgICByZXR1cm4gbmV3IE1wb0Rlc2lyYWJpbGl0eUxpbmVFZGl0b3IocHJvcCwgd2lkdGgsIGhlaWdodCk7XG5cbiAgICByZXR1cm4gbmV3IE1wb0NhdGVnb3JpY2FsRWRpdG9yKHByb3AsIGRlc2lnbiwgZmFsc2UpO1xuICB9XG59XG5cbiJdfQ==
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import * as DG from 'datagrok-api/dg';
|
|
2
|
+
import { Subject } from 'rxjs';
|
|
3
|
+
import { CategoricalDesirability } from '../mpo';
|
|
4
|
+
export declare class MpoCategoricalEditor {
|
|
5
|
+
root: HTMLDivElement;
|
|
6
|
+
onChanged: Subject<CategoricalDesirability>;
|
|
7
|
+
supportsModeDialog: boolean;
|
|
8
|
+
private _prop;
|
|
9
|
+
private design;
|
|
10
|
+
private showControls;
|
|
11
|
+
private desirabilityInputs;
|
|
12
|
+
private form;
|
|
13
|
+
private columnCategories;
|
|
14
|
+
constructor(prop: CategoricalDesirability, design?: boolean, showControls?: boolean);
|
|
15
|
+
private buildForm;
|
|
16
|
+
private createDesirabilityInput;
|
|
17
|
+
private buildViewForm;
|
|
18
|
+
private buildDesignForm;
|
|
19
|
+
private buildCategoryRow;
|
|
20
|
+
redrawAll(notify?: boolean): void;
|
|
21
|
+
setChoices(choices: string[]): void;
|
|
22
|
+
setColumn(col: DG.Column | null): void;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=mpo-categorical-editor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mpo-categorical-editor.d.ts","sourceRoot":"","sources":["mpo-categorical-editor.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAEtC,OAAO,EAAC,OAAO,EAAC,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAC,uBAAuB,EAAC,MAAM,QAAQ,CAAC;AAE/C,qBAAa,oBAAoB;IAC/B,IAAI,EAAE,cAAc,CAAC;IACrB,SAAS,mCAA0C;IACnD,kBAAkB,EAAE,OAAO,CAAQ;IAEnC,OAAO,CAAC,KAAK,CAA0B;IACvC,OAAO,CAAC,MAAM,CAAU;IACxB,OAAO,CAAC,YAAY,CAAU;IAC9B,OAAO,CAAC,kBAAkB,CAAsB;IAChD,OAAO,CAAC,IAAI,CAA4B;IACxC,OAAO,CAAC,gBAAgB,CAAyB;gBAErC,IAAI,EAAE,uBAAuB,EAAE,MAAM,UAAQ,EAAE,YAAY,UAAQ;IAQ/E,OAAO,CAAC,SAAS;IAejB,OAAO,CAAC,uBAAuB;IAc/B,OAAO,CAAC,aAAa;IAQrB,OAAO,CAAC,eAAe;IAavB,OAAO,CAAC,gBAAgB;IA0CxB,SAAS,CAAC,MAAM,GAAE,OAAc,GAAG,IAAI;IAMvC,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI;IAKnC,SAAS,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,GAAG,IAAI,GAAG,IAAI;CAYvC"}
|