@morscherlab/mld-sdk 0.7.5 → 0.7.7
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/README.md +1 -1
- package/dist/__tests__/composables/useAutoGroup.test.d.ts +1 -0
- package/dist/components/AutoGroupModal.vue.js +522 -0
- package/dist/components/AutoGroupModal.vue.js.map +1 -0
- package/dist/components/AutoGroupModal.vue3.js +6 -0
- package/dist/components/AutoGroupModal.vue3.js.map +1 -0
- package/dist/components/FormActions.vue.d.ts +1 -1
- package/dist/components/GroupingModal.vue.js.map +1 -1
- package/dist/components/NumberInput.vue.js +53 -50
- package/dist/components/NumberInput.vue.js.map +1 -1
- package/dist/components/SampleSelector.vue.d.ts +5 -9
- package/dist/components/SampleSelector.vue.js +127 -255
- package/dist/components/SampleSelector.vue.js.map +1 -1
- package/dist/components/index.d.ts +1 -0
- package/dist/components/index.js +53 -50
- package/dist/components/index.js.map +1 -1
- package/dist/composables/index.d.ts +1 -0
- package/dist/composables/index.js +3 -0
- package/dist/composables/index.js.map +1 -1
- package/dist/composables/useAutoGroup.d.ts +81 -0
- package/dist/composables/useAutoGroup.js +417 -0
- package/dist/composables/useAutoGroup.js.map +1 -0
- package/dist/index.d.ts +3 -3
- package/dist/index.js +48 -42
- package/dist/index.js.map +1 -1
- package/dist/styles.css +4722 -3830
- package/dist/types/auto-group.d.ts +31 -0
- package/dist/types/index.d.ts +1 -0
- package/package.json +1 -1
- package/src/__tests__/composables/useAutoGroup.test.ts +508 -0
- package/src/components/AutoGroupModal.story.vue +223 -0
- package/src/components/AutoGroupModal.vue +441 -0
- package/src/components/GroupingModal.vue +1 -0
- package/src/components/NumberInput.vue +33 -31
- package/src/components/SampleSelector.story.vue +8 -31
- package/src/components/SampleSelector.vue +22 -137
- package/src/components/index.ts +1 -0
- package/src/composables/index.ts +1 -0
- package/src/composables/useAutoGroup.ts +524 -0
- package/src/index.ts +12 -0
- package/src/styles/components/app-sidebar.css +1 -1
- package/src/styles/components/auto-group-modal.css +502 -0
- package/src/styles/components/modal.css +6 -0
- package/src/styles/components/number-input.css +7 -5
- package/src/styles/components/step-wizard.css +5 -0
- package/src/styles/index.css +1 -0
- package/src/types/auto-group.ts +37 -0
- package/src/types/index.ts +11 -0
package/README.md
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,522 @@
|
|
|
1
|
+
import { defineComponent, ref, watch, computed, openBlock, createBlock, withCtx, createElementVNode, createVNode, createTextVNode, createCommentVNode, toDisplayString, unref, createElementBlock, Fragment, renderList, normalizeStyle, normalizeClass, withDirectives, vModelText, withModifiers } from "vue";
|
|
2
|
+
import _sfc_main$1 from "./BaseModal.vue.js";
|
|
3
|
+
/* empty css */
|
|
4
|
+
import _sfc_main$3 from "./BaseButton.vue.js";
|
|
5
|
+
/* empty css */
|
|
6
|
+
import _sfc_main$4 from "./BaseInput.vue.js";
|
|
7
|
+
/* empty css */
|
|
8
|
+
import _sfc_main$2 from "./StepWizard.vue.js";
|
|
9
|
+
/* empty css */
|
|
10
|
+
import { useAutoGroup, parseCSV } from "../composables/useAutoGroup.js";
|
|
11
|
+
const _hoisted_1 = { class: "mld-auto-group" };
|
|
12
|
+
const _hoisted_2 = { class: "mld-auto-group__input-step" };
|
|
13
|
+
const _hoisted_3 = { class: "mld-auto-group__mode-toggle" };
|
|
14
|
+
const _hoisted_4 = {
|
|
15
|
+
key: 0,
|
|
16
|
+
class: "mld-auto-group__paste"
|
|
17
|
+
};
|
|
18
|
+
const _hoisted_5 = {
|
|
19
|
+
key: 0,
|
|
20
|
+
class: "mld-auto-group__sample-count"
|
|
21
|
+
};
|
|
22
|
+
const _hoisted_6 = {
|
|
23
|
+
key: 1,
|
|
24
|
+
class: "mld-auto-group__csv"
|
|
25
|
+
};
|
|
26
|
+
const _hoisted_7 = {
|
|
27
|
+
key: 1,
|
|
28
|
+
class: "mld-auto-group__file-info"
|
|
29
|
+
};
|
|
30
|
+
const _hoisted_8 = { class: "mld-auto-group__file-name" };
|
|
31
|
+
const _hoisted_9 = { class: "mld-auto-group__file-rows" };
|
|
32
|
+
const _hoisted_10 = { class: "mld-auto-group__outlier-step" };
|
|
33
|
+
const _hoisted_11 = { class: "mld-auto-group__outlier-banner" };
|
|
34
|
+
const _hoisted_12 = { class: "mld-auto-group__outlier-batch" };
|
|
35
|
+
const _hoisted_13 = { class: "mld-auto-group__outlier-list" };
|
|
36
|
+
const _hoisted_14 = { class: "mld-auto-group__outlier-info" };
|
|
37
|
+
const _hoisted_15 = { class: "mld-auto-group__outlier-name" };
|
|
38
|
+
const _hoisted_16 = { class: "mld-auto-group__outlier-badge" };
|
|
39
|
+
const _hoisted_17 = { class: "mld-auto-group__outlier-actions" };
|
|
40
|
+
const _hoisted_18 = ["onClick"];
|
|
41
|
+
const _hoisted_19 = ["onClick"];
|
|
42
|
+
const _hoisted_20 = ["onClick"];
|
|
43
|
+
const _hoisted_21 = { class: "mld-auto-group__field-step" };
|
|
44
|
+
const _hoisted_22 = { class: "mld-auto-group__field-grid" };
|
|
45
|
+
const _hoisted_23 = { class: "mld-auto-group__field-header" };
|
|
46
|
+
const _hoisted_24 = { class: "mld-auto-group__field-toggle" };
|
|
47
|
+
const _hoisted_25 = ["checked", "onChange"];
|
|
48
|
+
const _hoisted_26 = { class: "mld-auto-group__field-cardinality" };
|
|
49
|
+
const _hoisted_27 = { class: "mld-auto-group__field-values" };
|
|
50
|
+
const _hoisted_28 = {
|
|
51
|
+
key: 0,
|
|
52
|
+
class: "mld-auto-group__field-more"
|
|
53
|
+
};
|
|
54
|
+
const _hoisted_29 = {
|
|
55
|
+
key: 0,
|
|
56
|
+
class: "mld-auto-group__field-summary"
|
|
57
|
+
};
|
|
58
|
+
const _hoisted_30 = {
|
|
59
|
+
key: 1,
|
|
60
|
+
class: "mld-auto-group__field-warning"
|
|
61
|
+
};
|
|
62
|
+
const _hoisted_31 = { class: "mld-auto-group__preview-step" };
|
|
63
|
+
const _hoisted_32 = { class: "mld-auto-group__preview-summary" };
|
|
64
|
+
const _hoisted_33 = { class: "mld-auto-group__preview-stat" };
|
|
65
|
+
const _hoisted_34 = { class: "mld-auto-group__preview-stat" };
|
|
66
|
+
const _hoisted_35 = {
|
|
67
|
+
key: 0,
|
|
68
|
+
class: "mld-auto-group__preview-stat mld-auto-group__preview-stat--excluded"
|
|
69
|
+
};
|
|
70
|
+
const _hoisted_36 = { class: "mld-auto-group__preview-groups" };
|
|
71
|
+
const _hoisted_37 = { class: "mld-auto-group__preview-group-header" };
|
|
72
|
+
const _hoisted_38 = { class: "mld-auto-group__preview-group-name" };
|
|
73
|
+
const _hoisted_39 = { class: "mld-auto-group__preview-samples" };
|
|
74
|
+
const _hoisted_40 = {
|
|
75
|
+
key: 0,
|
|
76
|
+
class: "mld-auto-group__preview-excluded"
|
|
77
|
+
};
|
|
78
|
+
const _hoisted_41 = { class: "mld-auto-group__preview-excluded-list" };
|
|
79
|
+
const _hoisted_42 = { class: "mld-auto-group__nav" };
|
|
80
|
+
const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
81
|
+
__name: "AutoGroupModal",
|
|
82
|
+
props: {
|
|
83
|
+
modelValue: { type: Boolean },
|
|
84
|
+
samples: { default: () => [] }
|
|
85
|
+
},
|
|
86
|
+
emits: ["update:modelValue", "apply"],
|
|
87
|
+
setup(__props, { emit: __emit }) {
|
|
88
|
+
const props = __props;
|
|
89
|
+
const emit = __emit;
|
|
90
|
+
const autoGroup = useAutoGroup();
|
|
91
|
+
const wizardRef = ref(null);
|
|
92
|
+
const currentStep = ref(0);
|
|
93
|
+
const isDragOver = ref(false);
|
|
94
|
+
const csvFileName = ref("");
|
|
95
|
+
watch(() => props.modelValue, (open) => {
|
|
96
|
+
if (open) {
|
|
97
|
+
autoGroup.reset();
|
|
98
|
+
currentStep.value = 0;
|
|
99
|
+
csvFileName.value = "";
|
|
100
|
+
if (props.samples.length > 0) {
|
|
101
|
+
autoGroup.rawText.value = props.samples.join("\n");
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}, { immediate: true });
|
|
105
|
+
const allSteps = [
|
|
106
|
+
{ id: "input", label: "Input" },
|
|
107
|
+
{ id: "outliers", label: "Outliers" },
|
|
108
|
+
{ id: "fields", label: "Fields" },
|
|
109
|
+
{ id: "preview", label: "Preview" }
|
|
110
|
+
];
|
|
111
|
+
const dynamicSteps = computed(() => {
|
|
112
|
+
if (autoGroup.hasOutliers.value) {
|
|
113
|
+
return allSteps;
|
|
114
|
+
}
|
|
115
|
+
return allSteps.filter((s) => s.id !== "outliers");
|
|
116
|
+
});
|
|
117
|
+
const currentStepId = computed(() => {
|
|
118
|
+
const step = dynamicSteps.value[currentStep.value];
|
|
119
|
+
return (step == null ? void 0 : step.id) ?? "input";
|
|
120
|
+
});
|
|
121
|
+
watch(() => dynamicSteps.value.length, (newLen) => {
|
|
122
|
+
if (currentStep.value >= newLen) {
|
|
123
|
+
currentStep.value = newLen - 1;
|
|
124
|
+
}
|
|
125
|
+
});
|
|
126
|
+
const inputValid = computed(() => autoGroup.samples.value.length > 0);
|
|
127
|
+
const fieldsValid = computed(() => autoGroup.enabledFields.value.size > 0);
|
|
128
|
+
watch([inputValid, fieldsValid, dynamicSteps], () => {
|
|
129
|
+
if (!wizardRef.value) return;
|
|
130
|
+
const steps = dynamicSteps.value;
|
|
131
|
+
for (let i = 0; i < steps.length; i++) {
|
|
132
|
+
const id = steps[i].id;
|
|
133
|
+
if (id === "input") wizardRef.value.setStepValid(i, inputValid.value);
|
|
134
|
+
else if (id === "outliers") wizardRef.value.setStepValid(i, true);
|
|
135
|
+
else if (id === "fields") wizardRef.value.setStepValid(i, fieldsValid.value);
|
|
136
|
+
else if (id === "preview") wizardRef.value.setStepValid(i, true);
|
|
137
|
+
}
|
|
138
|
+
}, { immediate: true });
|
|
139
|
+
function handleNext() {
|
|
140
|
+
if (currentStepId.value === "input") {
|
|
141
|
+
autoGroup.parseInput();
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
function handleApply() {
|
|
145
|
+
emit("apply", autoGroup.result.value);
|
|
146
|
+
emit("update:modelValue", false);
|
|
147
|
+
}
|
|
148
|
+
function handleCancel() {
|
|
149
|
+
emit("update:modelValue", false);
|
|
150
|
+
}
|
|
151
|
+
function handleFileDrop(event) {
|
|
152
|
+
var _a;
|
|
153
|
+
event.preventDefault();
|
|
154
|
+
isDragOver.value = false;
|
|
155
|
+
const files = (_a = event.dataTransfer) == null ? void 0 : _a.files;
|
|
156
|
+
if (files && files.length > 0) {
|
|
157
|
+
processFile(files[0]);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
function handleFileInput(event) {
|
|
161
|
+
const target = event.target;
|
|
162
|
+
if (target.files && target.files.length > 0) {
|
|
163
|
+
processFile(target.files[0]);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
async function processFile(file) {
|
|
167
|
+
if (!file.name.endsWith(".csv") && !file.name.endsWith(".tsv")) return;
|
|
168
|
+
try {
|
|
169
|
+
const text = await file.text();
|
|
170
|
+
const parsed = parseCSV(text);
|
|
171
|
+
autoGroup.inputMode.value = "csv";
|
|
172
|
+
autoGroup.csvData.value = parsed;
|
|
173
|
+
csvFileName.value = file.name;
|
|
174
|
+
} catch {
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
function clearCsvFile() {
|
|
178
|
+
autoGroup.csvData.value = null;
|
|
179
|
+
autoGroup.inputMode.value = "paste";
|
|
180
|
+
csvFileName.value = "";
|
|
181
|
+
}
|
|
182
|
+
const isLastStep = computed(() => currentStep.value === dynamicSteps.value.length - 1);
|
|
183
|
+
const isFirstStep = computed(() => currentStep.value === 0);
|
|
184
|
+
return (_ctx, _cache) => {
|
|
185
|
+
return openBlock(), createBlock(_sfc_main$1, {
|
|
186
|
+
"model-value": __props.modelValue,
|
|
187
|
+
title: "Smart Group",
|
|
188
|
+
size: "lg",
|
|
189
|
+
"onUpdate:modelValue": _cache[8] || (_cache[8] = ($event) => emit("update:modelValue", $event)),
|
|
190
|
+
onClose: handleCancel
|
|
191
|
+
}, {
|
|
192
|
+
default: withCtx(() => [
|
|
193
|
+
createElementVNode("div", _hoisted_1, [
|
|
194
|
+
createVNode(_sfc_main$2, {
|
|
195
|
+
ref_key: "wizardRef",
|
|
196
|
+
ref: wizardRef,
|
|
197
|
+
modelValue: currentStep.value,
|
|
198
|
+
"onUpdate:modelValue": _cache[7] || (_cache[7] = ($event) => currentStep.value = $event),
|
|
199
|
+
steps: dynamicSteps.value,
|
|
200
|
+
linear: true,
|
|
201
|
+
size: "sm"
|
|
202
|
+
}, {
|
|
203
|
+
"step-input": withCtx(() => [
|
|
204
|
+
createElementVNode("div", _hoisted_2, [
|
|
205
|
+
createElementVNode("div", _hoisted_3, [
|
|
206
|
+
createVNode(_sfc_main$3, {
|
|
207
|
+
variant: unref(autoGroup).inputMode.value === "paste" ? "primary" : "secondary",
|
|
208
|
+
size: "sm",
|
|
209
|
+
onClick: _cache[0] || (_cache[0] = ($event) => unref(autoGroup).inputMode.value = "paste")
|
|
210
|
+
}, {
|
|
211
|
+
default: withCtx(() => [..._cache[9] || (_cache[9] = [
|
|
212
|
+
createTextVNode(" Paste ", -1)
|
|
213
|
+
])]),
|
|
214
|
+
_: 1
|
|
215
|
+
}, 8, ["variant"]),
|
|
216
|
+
createVNode(_sfc_main$3, {
|
|
217
|
+
variant: unref(autoGroup).inputMode.value === "csv" ? "primary" : "secondary",
|
|
218
|
+
size: "sm",
|
|
219
|
+
onClick: _cache[1] || (_cache[1] = ($event) => unref(autoGroup).inputMode.value = "csv")
|
|
220
|
+
}, {
|
|
221
|
+
default: withCtx(() => [..._cache[10] || (_cache[10] = [
|
|
222
|
+
createTextVNode(" CSV ", -1)
|
|
223
|
+
])]),
|
|
224
|
+
_: 1
|
|
225
|
+
}, 8, ["variant"])
|
|
226
|
+
]),
|
|
227
|
+
unref(autoGroup).inputMode.value === "paste" ? (openBlock(), createElementBlock("div", _hoisted_4, [
|
|
228
|
+
withDirectives(createElementVNode("textarea", {
|
|
229
|
+
"onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => unref(autoGroup).rawText.value = $event),
|
|
230
|
+
class: "mld-auto-group__textarea",
|
|
231
|
+
rows: "12",
|
|
232
|
+
placeholder: "Paste sample names, one per line..."
|
|
233
|
+
}, null, 512), [
|
|
234
|
+
[vModelText, unref(autoGroup).rawText.value]
|
|
235
|
+
]),
|
|
236
|
+
unref(autoGroup).samples.value.length > 0 ? (openBlock(), createElementBlock("div", _hoisted_5, toDisplayString(unref(autoGroup).samples.value.length) + " samples ", 1)) : createCommentVNode("", true)
|
|
237
|
+
])) : createCommentVNode("", true),
|
|
238
|
+
unref(autoGroup).inputMode.value === "csv" ? (openBlock(), createElementBlock("div", _hoisted_6, [
|
|
239
|
+
!unref(autoGroup).csvData.value ? (openBlock(), createElementBlock("div", {
|
|
240
|
+
key: 0,
|
|
241
|
+
class: normalizeClass([
|
|
242
|
+
"mld-auto-group__dropzone",
|
|
243
|
+
isDragOver.value ? "mld-auto-group__dropzone--dragover" : ""
|
|
244
|
+
]),
|
|
245
|
+
onDrop: handleFileDrop,
|
|
246
|
+
onDragover: _cache[3] || (_cache[3] = withModifiers(($event) => isDragOver.value = true, ["prevent"])),
|
|
247
|
+
onDragleave: _cache[4] || (_cache[4] = ($event) => isDragOver.value = false)
|
|
248
|
+
}, [
|
|
249
|
+
createElementVNode("input", {
|
|
250
|
+
type: "file",
|
|
251
|
+
accept: ".csv,.tsv",
|
|
252
|
+
class: "mld-auto-group__file-input",
|
|
253
|
+
onChange: handleFileInput
|
|
254
|
+
}, null, 32),
|
|
255
|
+
_cache[11] || (_cache[11] = createElementVNode("svg", {
|
|
256
|
+
class: "mld-auto-group__upload-icon",
|
|
257
|
+
fill: "none",
|
|
258
|
+
stroke: "currentColor",
|
|
259
|
+
viewBox: "0 0 24 24"
|
|
260
|
+
}, [
|
|
261
|
+
createElementVNode("path", {
|
|
262
|
+
"stroke-linecap": "round",
|
|
263
|
+
"stroke-linejoin": "round",
|
|
264
|
+
"stroke-width": "1.5",
|
|
265
|
+
d: "M9 17v-2m3 2v-4m3 4v-6m2 10H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"
|
|
266
|
+
})
|
|
267
|
+
], -1)),
|
|
268
|
+
_cache[12] || (_cache[12] = createElementVNode("p", { class: "mld-auto-group__upload-text" }, [
|
|
269
|
+
createElementVNode("span", { class: "mld-auto-group__upload-highlight" }, "Click to upload"),
|
|
270
|
+
createTextVNode(" or drag and drop a CSV file ")
|
|
271
|
+
], -1))
|
|
272
|
+
], 34)) : (openBlock(), createElementBlock("div", _hoisted_7, [
|
|
273
|
+
_cache[13] || (_cache[13] = createElementVNode("svg", {
|
|
274
|
+
class: "mld-auto-group__file-icon",
|
|
275
|
+
fill: "none",
|
|
276
|
+
stroke: "currentColor",
|
|
277
|
+
viewBox: "0 0 24 24"
|
|
278
|
+
}, [
|
|
279
|
+
createElementVNode("path", {
|
|
280
|
+
"stroke-linecap": "round",
|
|
281
|
+
"stroke-linejoin": "round",
|
|
282
|
+
"stroke-width": "2",
|
|
283
|
+
d: "M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"
|
|
284
|
+
})
|
|
285
|
+
], -1)),
|
|
286
|
+
createElementVNode("span", _hoisted_8, toDisplayString(csvFileName.value), 1),
|
|
287
|
+
createElementVNode("span", _hoisted_9, toDisplayString(unref(autoGroup).csvData.value.rows.length) + " rows", 1),
|
|
288
|
+
createElementVNode("button", {
|
|
289
|
+
type: "button",
|
|
290
|
+
class: "mld-auto-group__file-clear",
|
|
291
|
+
onClick: clearCsvFile
|
|
292
|
+
}, " Change file ")
|
|
293
|
+
]))
|
|
294
|
+
])) : createCommentVNode("", true)
|
|
295
|
+
])
|
|
296
|
+
]),
|
|
297
|
+
"step-outliers": withCtx(() => [
|
|
298
|
+
createElementVNode("div", _hoisted_10, [
|
|
299
|
+
createElementVNode("div", _hoisted_11, [
|
|
300
|
+
createTextVNode(toDisplayString(unref(autoGroup).outliers.value.length) + " of " + toDisplayString(unref(autoGroup).samples.value.length) + " samples have irregular structure (fewer than " + toDisplayString(unref(autoGroup).dominantFieldCount.value) + " fields, delimiter ", 1),
|
|
301
|
+
createElementVNode("code", null, toDisplayString(unref(autoGroup).delimiter.value), 1),
|
|
302
|
+
_cache[14] || (_cache[14] = createTextVNode(") ", -1))
|
|
303
|
+
]),
|
|
304
|
+
createElementVNode("div", _hoisted_12, [
|
|
305
|
+
createVNode(_sfc_main$3, {
|
|
306
|
+
size: "sm",
|
|
307
|
+
variant: "secondary",
|
|
308
|
+
onClick: _cache[5] || (_cache[5] = ($event) => unref(autoGroup).setAllOutlierActions("include"))
|
|
309
|
+
}, {
|
|
310
|
+
default: withCtx(() => [..._cache[15] || (_cache[15] = [
|
|
311
|
+
createTextVNode(" Include All ", -1)
|
|
312
|
+
])]),
|
|
313
|
+
_: 1
|
|
314
|
+
}),
|
|
315
|
+
createVNode(_sfc_main$3, {
|
|
316
|
+
size: "sm",
|
|
317
|
+
variant: "secondary",
|
|
318
|
+
onClick: _cache[6] || (_cache[6] = ($event) => unref(autoGroup).setAllOutlierActions("exclude"))
|
|
319
|
+
}, {
|
|
320
|
+
default: withCtx(() => [..._cache[16] || (_cache[16] = [
|
|
321
|
+
createTextVNode(" Exclude All ", -1)
|
|
322
|
+
])]),
|
|
323
|
+
_: 1
|
|
324
|
+
})
|
|
325
|
+
]),
|
|
326
|
+
createElementVNode("div", _hoisted_13, [
|
|
327
|
+
(openBlock(true), createElementBlock(Fragment, null, renderList(unref(autoGroup).outliers.value, (outlier) => {
|
|
328
|
+
return openBlock(), createElementBlock("div", {
|
|
329
|
+
key: outlier.index,
|
|
330
|
+
class: "mld-auto-group__outlier-item"
|
|
331
|
+
}, [
|
|
332
|
+
createElementVNode("div", _hoisted_14, [
|
|
333
|
+
createElementVNode("code", _hoisted_15, toDisplayString(outlier.sample), 1),
|
|
334
|
+
createElementVNode("span", _hoisted_16, toDisplayString(outlier.fieldCount) + " fields", 1)
|
|
335
|
+
]),
|
|
336
|
+
createElementVNode("div", _hoisted_17, [
|
|
337
|
+
createElementVNode("button", {
|
|
338
|
+
type: "button",
|
|
339
|
+
class: normalizeClass(["mld-auto-group__action-btn", outlier.action === "include" ? "mld-auto-group__action-btn--active" : ""]),
|
|
340
|
+
onClick: ($event) => unref(autoGroup).setOutlierAction(outlier.index, "include")
|
|
341
|
+
}, "Include", 10, _hoisted_18),
|
|
342
|
+
createElementVNode("button", {
|
|
343
|
+
type: "button",
|
|
344
|
+
class: normalizeClass(["mld-auto-group__action-btn", outlier.action === "exclude" ? "mld-auto-group__action-btn--active mld-auto-group__action-btn--exclude" : ""]),
|
|
345
|
+
onClick: ($event) => unref(autoGroup).setOutlierAction(outlier.index, "exclude")
|
|
346
|
+
}, "Exclude", 10, _hoisted_19),
|
|
347
|
+
createElementVNode("button", {
|
|
348
|
+
type: "button",
|
|
349
|
+
class: normalizeClass(["mld-auto-group__action-btn", outlier.action === "qc" ? "mld-auto-group__action-btn--active mld-auto-group__action-btn--qc" : ""]),
|
|
350
|
+
onClick: ($event) => unref(autoGroup).setOutlierAction(outlier.index, "qc")
|
|
351
|
+
}, "QC", 10, _hoisted_20)
|
|
352
|
+
])
|
|
353
|
+
]);
|
|
354
|
+
}), 128))
|
|
355
|
+
])
|
|
356
|
+
])
|
|
357
|
+
]),
|
|
358
|
+
"step-fields": withCtx(() => [
|
|
359
|
+
createElementVNode("div", _hoisted_21, [
|
|
360
|
+
createElementVNode("div", _hoisted_22, [
|
|
361
|
+
(openBlock(true), createElementBlock(Fragment, null, renderList(unref(autoGroup).effectiveColumns.value, (col) => {
|
|
362
|
+
return openBlock(), createElementBlock("div", {
|
|
363
|
+
key: col.index,
|
|
364
|
+
class: normalizeClass([
|
|
365
|
+
"mld-auto-group__field-card",
|
|
366
|
+
unref(autoGroup).enabledFields.value.has(col.index) ? "mld-auto-group__field-card--enabled" : ""
|
|
367
|
+
])
|
|
368
|
+
}, [
|
|
369
|
+
createElementVNode("div", _hoisted_23, [
|
|
370
|
+
createElementVNode("label", _hoisted_24, [
|
|
371
|
+
createElementVNode("input", {
|
|
372
|
+
type: "checkbox",
|
|
373
|
+
checked: unref(autoGroup).enabledFields.value.has(col.index),
|
|
374
|
+
onChange: ($event) => unref(autoGroup).toggleField(col.index)
|
|
375
|
+
}, null, 40, _hoisted_25),
|
|
376
|
+
_cache[17] || (_cache[17] = createElementVNode("span", { class: "mld-auto-group__field-toggle-label" }, "Group by", -1))
|
|
377
|
+
]),
|
|
378
|
+
createElementVNode("span", _hoisted_26, toDisplayString(col.cardinality) + " unique", 1)
|
|
379
|
+
]),
|
|
380
|
+
createVNode(_sfc_main$4, {
|
|
381
|
+
"model-value": col.name,
|
|
382
|
+
placeholder: "Field name...",
|
|
383
|
+
class: "mld-auto-group__field-name-input",
|
|
384
|
+
"onUpdate:modelValue": ($event) => unref(autoGroup).renameField(col.index, String($event ?? ""))
|
|
385
|
+
}, null, 8, ["model-value", "onUpdate:modelValue"]),
|
|
386
|
+
createElementVNode("div", _hoisted_27, [
|
|
387
|
+
(openBlock(true), createElementBlock(Fragment, null, renderList(col.uniqueValues.slice(0, 5), (val) => {
|
|
388
|
+
return openBlock(), createElementBlock("span", {
|
|
389
|
+
key: val,
|
|
390
|
+
class: "mld-auto-group__field-value"
|
|
391
|
+
}, toDisplayString(val), 1);
|
|
392
|
+
}), 128)),
|
|
393
|
+
col.uniqueValues.length > 5 ? (openBlock(), createElementBlock("span", _hoisted_28, "+" + toDisplayString(col.uniqueValues.length - 5) + " more", 1)) : createCommentVNode("", true)
|
|
394
|
+
])
|
|
395
|
+
], 2);
|
|
396
|
+
}), 128))
|
|
397
|
+
]),
|
|
398
|
+
unref(autoGroup).enabledFields.value.size > 0 ? (openBlock(), createElementBlock("div", _hoisted_29, [
|
|
399
|
+
_cache[18] || (_cache[18] = createTextVNode(" Grouping by: ", -1)),
|
|
400
|
+
createElementVNode("strong", null, toDisplayString(unref(autoGroup).effectiveColumns.value.filter((c) => unref(autoGroup).enabledFields.value.has(c.index)).map((c) => c.name).join(" / ")), 1)
|
|
401
|
+
])) : createCommentVNode("", true),
|
|
402
|
+
unref(autoGroup).enabledFields.value.size === 0 ? (openBlock(), createElementBlock("div", _hoisted_30, " Select at least one field for grouping ")) : createCommentVNode("", true)
|
|
403
|
+
])
|
|
404
|
+
]),
|
|
405
|
+
"step-preview": withCtx(() => [
|
|
406
|
+
createElementVNode("div", _hoisted_31, [
|
|
407
|
+
createElementVNode("div", _hoisted_32, [
|
|
408
|
+
createElementVNode("span", _hoisted_33, [
|
|
409
|
+
createElementVNode("strong", null, toDisplayString(unref(autoGroup).groups.value.length), 1),
|
|
410
|
+
_cache[19] || (_cache[19] = createTextVNode(" groups ", -1))
|
|
411
|
+
]),
|
|
412
|
+
createElementVNode("span", _hoisted_34, [
|
|
413
|
+
createElementVNode("strong", null, toDisplayString(unref(autoGroup).groups.value.reduce((sum, g) => sum + g.samples.length, 0)), 1),
|
|
414
|
+
_cache[20] || (_cache[20] = createTextVNode(" samples ", -1))
|
|
415
|
+
]),
|
|
416
|
+
unref(autoGroup).excludedSamples.value.length > 0 ? (openBlock(), createElementBlock("span", _hoisted_35, [
|
|
417
|
+
createElementVNode("strong", null, toDisplayString(unref(autoGroup).excludedSamples.value.length), 1),
|
|
418
|
+
_cache[21] || (_cache[21] = createTextVNode(" excluded ", -1))
|
|
419
|
+
])) : createCommentVNode("", true)
|
|
420
|
+
]),
|
|
421
|
+
createElementVNode("div", _hoisted_36, [
|
|
422
|
+
(openBlock(true), createElementBlock(Fragment, null, renderList(unref(autoGroup).groups.value, (group) => {
|
|
423
|
+
return openBlock(), createElementBlock("details", {
|
|
424
|
+
key: group.name,
|
|
425
|
+
class: "mld-auto-group__preview-group"
|
|
426
|
+
}, [
|
|
427
|
+
createElementVNode("summary", _hoisted_37, [
|
|
428
|
+
createElementVNode("span", {
|
|
429
|
+
class: "mld-auto-group__preview-dot",
|
|
430
|
+
style: normalizeStyle({ backgroundColor: group.color })
|
|
431
|
+
}, null, 4),
|
|
432
|
+
createElementVNode("span", _hoisted_38, toDisplayString(group.name), 1),
|
|
433
|
+
createElementVNode("span", {
|
|
434
|
+
class: "mld-auto-group__preview-group-count",
|
|
435
|
+
style: normalizeStyle({ backgroundColor: group.color + "20", color: group.color })
|
|
436
|
+
}, toDisplayString(group.samples.length), 5)
|
|
437
|
+
]),
|
|
438
|
+
createElementVNode("div", _hoisted_39, [
|
|
439
|
+
(openBlock(true), createElementBlock(Fragment, null, renderList(group.samples, (sample) => {
|
|
440
|
+
return openBlock(), createElementBlock("span", {
|
|
441
|
+
key: sample,
|
|
442
|
+
class: "mld-auto-group__preview-sample"
|
|
443
|
+
}, toDisplayString(sample), 1);
|
|
444
|
+
}), 128))
|
|
445
|
+
])
|
|
446
|
+
]);
|
|
447
|
+
}), 128))
|
|
448
|
+
]),
|
|
449
|
+
unref(autoGroup).excludedSamples.value.length > 0 ? (openBlock(), createElementBlock("div", _hoisted_40, [
|
|
450
|
+
_cache[22] || (_cache[22] = createElementVNode("div", { class: "mld-auto-group__preview-excluded-title" }, "Excluded Samples", -1)),
|
|
451
|
+
createElementVNode("div", _hoisted_41, [
|
|
452
|
+
(openBlock(true), createElementBlock(Fragment, null, renderList(unref(autoGroup).excludedSamples.value, (sample) => {
|
|
453
|
+
return openBlock(), createElementBlock("span", {
|
|
454
|
+
key: sample,
|
|
455
|
+
class: "mld-auto-group__preview-sample mld-auto-group__preview-sample--excluded"
|
|
456
|
+
}, toDisplayString(sample), 1);
|
|
457
|
+
}), 128))
|
|
458
|
+
])
|
|
459
|
+
])) : createCommentVNode("", true)
|
|
460
|
+
])
|
|
461
|
+
]),
|
|
462
|
+
navigation: withCtx(({ goBack, goNext, canProceed }) => [
|
|
463
|
+
createElementVNode("div", _hoisted_42, [
|
|
464
|
+
createVNode(_sfc_main$3, {
|
|
465
|
+
variant: "secondary",
|
|
466
|
+
onClick: handleCancel
|
|
467
|
+
}, {
|
|
468
|
+
default: withCtx(() => [..._cache[23] || (_cache[23] = [
|
|
469
|
+
createTextVNode(" Cancel ", -1)
|
|
470
|
+
])]),
|
|
471
|
+
_: 1
|
|
472
|
+
}),
|
|
473
|
+
_cache[27] || (_cache[27] = createElementVNode("div", { style: { "flex": "1" } }, null, -1)),
|
|
474
|
+
!isFirstStep.value ? (openBlock(), createBlock(_sfc_main$3, {
|
|
475
|
+
key: 0,
|
|
476
|
+
variant: "secondary",
|
|
477
|
+
onClick: goBack
|
|
478
|
+
}, {
|
|
479
|
+
default: withCtx(() => [..._cache[24] || (_cache[24] = [
|
|
480
|
+
createTextVNode(" Back ", -1)
|
|
481
|
+
])]),
|
|
482
|
+
_: 1
|
|
483
|
+
}, 8, ["onClick"])) : createCommentVNode("", true),
|
|
484
|
+
!isLastStep.value ? (openBlock(), createBlock(_sfc_main$3, {
|
|
485
|
+
key: 1,
|
|
486
|
+
variant: "primary",
|
|
487
|
+
disabled: !canProceed,
|
|
488
|
+
onClick: () => {
|
|
489
|
+
handleNext();
|
|
490
|
+
goNext();
|
|
491
|
+
}
|
|
492
|
+
}, {
|
|
493
|
+
default: withCtx(() => [..._cache[25] || (_cache[25] = [
|
|
494
|
+
createTextVNode(" Next ", -1)
|
|
495
|
+
])]),
|
|
496
|
+
_: 1
|
|
497
|
+
}, 8, ["disabled", "onClick"])) : createCommentVNode("", true),
|
|
498
|
+
isLastStep.value ? (openBlock(), createBlock(_sfc_main$3, {
|
|
499
|
+
key: 2,
|
|
500
|
+
variant: "primary",
|
|
501
|
+
onClick: handleApply
|
|
502
|
+
}, {
|
|
503
|
+
default: withCtx(() => [..._cache[26] || (_cache[26] = [
|
|
504
|
+
createTextVNode(" Apply ", -1)
|
|
505
|
+
])]),
|
|
506
|
+
_: 1
|
|
507
|
+
})) : createCommentVNode("", true)
|
|
508
|
+
])
|
|
509
|
+
]),
|
|
510
|
+
_: 1
|
|
511
|
+
}, 8, ["modelValue", "steps"])
|
|
512
|
+
])
|
|
513
|
+
]),
|
|
514
|
+
_: 1
|
|
515
|
+
}, 8, ["model-value"]);
|
|
516
|
+
};
|
|
517
|
+
}
|
|
518
|
+
});
|
|
519
|
+
export {
|
|
520
|
+
_sfc_main as default
|
|
521
|
+
};
|
|
522
|
+
//# sourceMappingURL=AutoGroupModal.vue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AutoGroupModal.vue.js","sources":["../../src/components/AutoGroupModal.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ref, computed, watch } from 'vue'\nimport BaseModal from './BaseModal.vue'\nimport BaseButton from './BaseButton.vue'\nimport BaseInput from './BaseInput.vue'\nimport StepWizard from './StepWizard.vue'\nimport { useAutoGroup, parseCSV } from '../composables/useAutoGroup'\nimport type { WizardStep } from '../types/components'\nimport type { AutoGroupResult } from '../types/auto-group'\n\ninterface Props {\n modelValue: boolean\n samples?: string[]\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n samples: () => [],\n})\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: boolean]\n 'apply': [result: AutoGroupResult]\n}>()\n\nconst autoGroup = useAutoGroup()\nconst wizardRef = ref<InstanceType<typeof StepWizard> | null>(null)\nconst currentStep = ref(0)\nconst isDragOver = ref(false)\nconst csvFileName = ref('')\n\n// Pre-fill from props\nwatch(() => props.modelValue, (open) => {\n if (open) {\n autoGroup.reset()\n currentStep.value = 0\n csvFileName.value = ''\n if (props.samples.length > 0) {\n autoGroup.rawText.value = props.samples.join('\\n')\n }\n }\n}, { immediate: true })\n\n// Dynamic steps: skip outlier step when no outliers\nconst allSteps: WizardStep[] = [\n { id: 'input', label: 'Input' },\n { id: 'outliers', label: 'Outliers' },\n { id: 'fields', label: 'Fields' },\n { id: 'preview', label: 'Preview' },\n]\n\nconst dynamicSteps = computed<WizardStep[]>(() => {\n if (autoGroup.hasOutliers.value) {\n return allSteps\n }\n return allSteps.filter(s => s.id !== 'outliers')\n})\n\n// Map current step index to step ID\nconst currentStepId = computed(() => {\n const step = dynamicSteps.value[currentStep.value]\n return step?.id ?? 'input'\n})\n\n// Clamp step when dynamic steps change\nwatch(() => dynamicSteps.value.length, (newLen) => {\n if (currentStep.value >= newLen) {\n currentStep.value = newLen - 1\n }\n})\n\n// Step validity\nconst inputValid = computed(() => autoGroup.samples.value.length > 0)\nconst fieldsValid = computed(() => autoGroup.enabledFields.value.size > 0)\n\nwatch([inputValid, fieldsValid, dynamicSteps], () => {\n if (!wizardRef.value) return\n const steps = dynamicSteps.value\n for (let i = 0; i < steps.length; i++) {\n const id = steps[i].id\n if (id === 'input') wizardRef.value.setStepValid(i, inputValid.value)\n else if (id === 'outliers') wizardRef.value.setStepValid(i, true)\n else if (id === 'fields') wizardRef.value.setStepValid(i, fieldsValid.value)\n else if (id === 'preview') wizardRef.value.setStepValid(i, true)\n }\n}, { immediate: true })\n\n// Navigation\nfunction handleNext() {\n if (currentStepId.value === 'input') {\n autoGroup.parseInput()\n }\n // StepWizard handles the actual navigation via v-model\n}\n\nfunction handleApply() {\n emit('apply', autoGroup.result.value)\n emit('update:modelValue', false)\n}\n\nfunction handleCancel() {\n emit('update:modelValue', false)\n}\n\n// CSV file handling\nfunction handleFileDrop(event: DragEvent) {\n event.preventDefault()\n isDragOver.value = false\n const files = event.dataTransfer?.files\n if (files && files.length > 0) {\n processFile(files[0])\n }\n}\n\nfunction handleFileInput(event: Event) {\n const target = event.target as HTMLInputElement\n if (target.files && target.files.length > 0) {\n processFile(target.files[0])\n }\n}\n\nasync function processFile(file: File) {\n if (!file.name.endsWith('.csv') && !file.name.endsWith('.tsv')) return\n\n try {\n const text = await file.text()\n const parsed = parseCSV(text)\n autoGroup.inputMode.value = 'csv'\n autoGroup.csvData.value = parsed\n csvFileName.value = file.name\n } catch {\n // CSV parse error — stay in current state\n }\n}\n\nfunction clearCsvFile() {\n autoGroup.csvData.value = null\n autoGroup.inputMode.value = 'paste'\n csvFileName.value = ''\n}\n\n// Last step check\nconst isLastStep = computed(() => currentStep.value === dynamicSteps.value.length - 1)\nconst isFirstStep = computed(() => currentStep.value === 0)\n</script>\n\n<template>\n <BaseModal\n :model-value=\"modelValue\"\n title=\"Smart Group\"\n size=\"lg\"\n @update:model-value=\"emit('update:modelValue', $event)\"\n @close=\"handleCancel\"\n >\n <div class=\"mld-auto-group\">\n <StepWizard\n ref=\"wizardRef\"\n v-model=\"currentStep\"\n :steps=\"dynamicSteps\"\n :linear=\"true\"\n size=\"sm\"\n >\n <!-- Step: Input -->\n <template #step-input>\n <div class=\"mld-auto-group__input-step\">\n <!-- Mode toggle -->\n <div class=\"mld-auto-group__mode-toggle\">\n <BaseButton\n :variant=\"autoGroup.inputMode.value === 'paste' ? 'primary' : 'secondary'\"\n size=\"sm\"\n @click=\"autoGroup.inputMode.value = 'paste'\"\n >\n Paste\n </BaseButton>\n <BaseButton\n :variant=\"autoGroup.inputMode.value === 'csv' ? 'primary' : 'secondary'\"\n size=\"sm\"\n @click=\"autoGroup.inputMode.value = 'csv'\"\n >\n CSV\n </BaseButton>\n </div>\n\n <!-- Paste mode -->\n <div v-if=\"autoGroup.inputMode.value === 'paste'\" class=\"mld-auto-group__paste\">\n <textarea\n v-model=\"autoGroup.rawText.value\"\n class=\"mld-auto-group__textarea\"\n rows=\"12\"\n placeholder=\"Paste sample names, one per line...\"\n />\n <div v-if=\"autoGroup.samples.value.length > 0\" class=\"mld-auto-group__sample-count\">\n {{ autoGroup.samples.value.length }} samples\n </div>\n </div>\n\n <!-- CSV mode -->\n <div v-if=\"autoGroup.inputMode.value === 'csv'\" class=\"mld-auto-group__csv\">\n <div v-if=\"!autoGroup.csvData.value\"\n :class=\"[\n 'mld-auto-group__dropzone',\n isDragOver ? 'mld-auto-group__dropzone--dragover' : '',\n ]\"\n @drop=\"handleFileDrop\"\n @dragover.prevent=\"isDragOver = true\"\n @dragleave=\"isDragOver = false\"\n >\n <input\n type=\"file\"\n accept=\".csv,.tsv\"\n class=\"mld-auto-group__file-input\"\n @change=\"handleFileInput\"\n />\n <svg class=\"mld-auto-group__upload-icon\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\" d=\"M9 17v-2m3 2v-4m3 4v-6m2 10H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z\" />\n </svg>\n <p class=\"mld-auto-group__upload-text\">\n <span class=\"mld-auto-group__upload-highlight\">Click to upload</span>\n or drag and drop a CSV file\n </p>\n </div>\n\n <div v-else class=\"mld-auto-group__file-info\">\n <svg class=\"mld-auto-group__file-icon\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z\" />\n </svg>\n <span class=\"mld-auto-group__file-name\">{{ csvFileName }}</span>\n <span class=\"mld-auto-group__file-rows\">{{ autoGroup.csvData.value.rows.length }} rows</span>\n <button type=\"button\" class=\"mld-auto-group__file-clear\" @click=\"clearCsvFile\">\n Change file\n </button>\n </div>\n </div>\n </div>\n </template>\n\n <!-- Step: Outliers -->\n <template #step-outliers>\n <div class=\"mld-auto-group__outlier-step\">\n <div class=\"mld-auto-group__outlier-banner\">\n {{ autoGroup.outliers.value.length }} of {{ autoGroup.samples.value.length }}\n samples have irregular structure\n (fewer than {{ autoGroup.dominantFieldCount.value }} fields, delimiter\n <code>{{ autoGroup.delimiter.value }}</code>)\n </div>\n\n <div class=\"mld-auto-group__outlier-batch\">\n <BaseButton size=\"sm\" variant=\"secondary\" @click=\"autoGroup.setAllOutlierActions('include')\">\n Include All\n </BaseButton>\n <BaseButton size=\"sm\" variant=\"secondary\" @click=\"autoGroup.setAllOutlierActions('exclude')\">\n Exclude All\n </BaseButton>\n </div>\n\n <div class=\"mld-auto-group__outlier-list\">\n <div\n v-for=\"outlier in autoGroup.outliers.value\"\n :key=\"outlier.index\"\n class=\"mld-auto-group__outlier-item\"\n >\n <div class=\"mld-auto-group__outlier-info\">\n <code class=\"mld-auto-group__outlier-name\">{{ outlier.sample }}</code>\n <span class=\"mld-auto-group__outlier-badge\">{{ outlier.fieldCount }} fields</span>\n </div>\n <div class=\"mld-auto-group__outlier-actions\">\n <button\n type=\"button\"\n :class=\"['mld-auto-group__action-btn', outlier.action === 'include' ? 'mld-auto-group__action-btn--active' : '']\"\n @click=\"autoGroup.setOutlierAction(outlier.index, 'include')\"\n >Include</button>\n <button\n type=\"button\"\n :class=\"['mld-auto-group__action-btn', outlier.action === 'exclude' ? 'mld-auto-group__action-btn--active mld-auto-group__action-btn--exclude' : '']\"\n @click=\"autoGroup.setOutlierAction(outlier.index, 'exclude')\"\n >Exclude</button>\n <button\n type=\"button\"\n :class=\"['mld-auto-group__action-btn', outlier.action === 'qc' ? 'mld-auto-group__action-btn--active mld-auto-group__action-btn--qc' : '']\"\n @click=\"autoGroup.setOutlierAction(outlier.index, 'qc')\"\n >QC</button>\n </div>\n </div>\n </div>\n </div>\n </template>\n\n <!-- Step: Fields -->\n <template #step-fields>\n <div class=\"mld-auto-group__field-step\">\n <div class=\"mld-auto-group__field-grid\">\n <div\n v-for=\"col in autoGroup.effectiveColumns.value\"\n :key=\"col.index\"\n :class=\"[\n 'mld-auto-group__field-card',\n autoGroup.enabledFields.value.has(col.index) ? 'mld-auto-group__field-card--enabled' : '',\n ]\"\n >\n <div class=\"mld-auto-group__field-header\">\n <label class=\"mld-auto-group__field-toggle\">\n <input\n type=\"checkbox\"\n :checked=\"autoGroup.enabledFields.value.has(col.index)\"\n @change=\"autoGroup.toggleField(col.index)\"\n />\n <span class=\"mld-auto-group__field-toggle-label\">Group by</span>\n </label>\n <span class=\"mld-auto-group__field-cardinality\">{{ col.cardinality }} unique</span>\n </div>\n\n <BaseInput\n :model-value=\"col.name\"\n placeholder=\"Field name...\"\n class=\"mld-auto-group__field-name-input\"\n @update:model-value=\"autoGroup.renameField(col.index, String($event ?? ''))\"\n />\n\n <div class=\"mld-auto-group__field-values\">\n <span\n v-for=\"val in col.uniqueValues.slice(0, 5)\"\n :key=\"val\"\n class=\"mld-auto-group__field-value\"\n >{{ val }}</span>\n <span\n v-if=\"col.uniqueValues.length > 5\"\n class=\"mld-auto-group__field-more\"\n >+{{ col.uniqueValues.length - 5 }} more</span>\n </div>\n </div>\n </div>\n\n <div v-if=\"autoGroup.enabledFields.value.size > 0\" class=\"mld-auto-group__field-summary\">\n Grouping by:\n <strong>{{\n autoGroup.effectiveColumns.value\n .filter(c => autoGroup.enabledFields.value.has(c.index))\n .map(c => c.name)\n .join(' / ')\n }}</strong>\n </div>\n\n <div v-if=\"autoGroup.enabledFields.value.size === 0\" class=\"mld-auto-group__field-warning\">\n Select at least one field for grouping\n </div>\n </div>\n </template>\n\n <!-- Step: Preview -->\n <template #step-preview>\n <div class=\"mld-auto-group__preview-step\">\n <div class=\"mld-auto-group__preview-summary\">\n <span class=\"mld-auto-group__preview-stat\">\n <strong>{{ autoGroup.groups.value.length }}</strong> groups\n </span>\n <span class=\"mld-auto-group__preview-stat\">\n <strong>{{ autoGroup.groups.value.reduce((sum, g) => sum + g.samples.length, 0) }}</strong> samples\n </span>\n <span v-if=\"autoGroup.excludedSamples.value.length > 0\" class=\"mld-auto-group__preview-stat mld-auto-group__preview-stat--excluded\">\n <strong>{{ autoGroup.excludedSamples.value.length }}</strong> excluded\n </span>\n </div>\n\n <div class=\"mld-auto-group__preview-groups\">\n <details\n v-for=\"group in autoGroup.groups.value\"\n :key=\"group.name\"\n class=\"mld-auto-group__preview-group\"\n >\n <summary class=\"mld-auto-group__preview-group-header\">\n <span\n class=\"mld-auto-group__preview-dot\"\n :style=\"{ backgroundColor: group.color }\"\n />\n <span class=\"mld-auto-group__preview-group-name\">{{ group.name }}</span>\n <span\n class=\"mld-auto-group__preview-group-count\"\n :style=\"{ backgroundColor: group.color + '20', color: group.color }\"\n >{{ group.samples.length }}</span>\n </summary>\n <div class=\"mld-auto-group__preview-samples\">\n <span\n v-for=\"sample in group.samples\"\n :key=\"sample\"\n class=\"mld-auto-group__preview-sample\"\n >{{ sample }}</span>\n </div>\n </details>\n </div>\n\n <div v-if=\"autoGroup.excludedSamples.value.length > 0\" class=\"mld-auto-group__preview-excluded\">\n <div class=\"mld-auto-group__preview-excluded-title\">Excluded Samples</div>\n <div class=\"mld-auto-group__preview-excluded-list\">\n <span\n v-for=\"sample in autoGroup.excludedSamples.value\"\n :key=\"sample\"\n class=\"mld-auto-group__preview-sample mld-auto-group__preview-sample--excluded\"\n >{{ sample }}</span>\n </div>\n </div>\n </div>\n </template>\n\n <!-- Custom navigation -->\n <template #navigation=\"{ goBack, goNext, canProceed }\">\n <div class=\"mld-auto-group__nav\">\n <BaseButton variant=\"secondary\" @click=\"handleCancel\">\n Cancel\n </BaseButton>\n <div style=\"flex: 1\" />\n <BaseButton\n v-if=\"!isFirstStep\"\n variant=\"secondary\"\n @click=\"goBack\"\n >\n Back\n </BaseButton>\n <BaseButton\n v-if=\"!isLastStep\"\n variant=\"primary\"\n :disabled=\"!canProceed\"\n @click=\"() => { handleNext(); goNext() }\"\n >\n Next\n </BaseButton>\n <BaseButton\n v-if=\"isLastStep\"\n variant=\"primary\"\n @click=\"handleApply\"\n >\n Apply\n </BaseButton>\n </div>\n </template>\n </StepWizard>\n </div>\n </BaseModal>\n</template>\n\n<style>\n@import '../styles/components/auto-group-modal.css';\n</style>\n"],"names":["_createBlock","BaseModal","_createElementVNode","_createVNode","StepWizard","BaseButton","_unref","_openBlock","_createElementBlock","_toDisplayString","_normalizeClass","_Fragment","BaseInput","_normalizeStyle","_renderList"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AutoGroupModal.vue3.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;"}
|
|
@@ -23,10 +23,10 @@ declare const _default: import('vue').DefineComponent<Props, {}, {}, {}, {}, imp
|
|
|
23
23
|
disabled: boolean;
|
|
24
24
|
loading: boolean;
|
|
25
25
|
cancelLabel: string;
|
|
26
|
+
canProceed: boolean;
|
|
26
27
|
isWizard: boolean;
|
|
27
28
|
isFirst: boolean;
|
|
28
29
|
isLast: boolean;
|
|
29
|
-
canProceed: boolean;
|
|
30
30
|
submitLabel: string;
|
|
31
31
|
showCancel: boolean;
|
|
32
32
|
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, HTMLDivElement>;
|