@morscherlab/mld-sdk 0.7.4 → 0.7.6
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/DatePicker.vue.d.ts +2 -0
- package/dist/components/DatePicker.vue.js +151 -118
- package/dist/components/DatePicker.vue.js.map +1 -1
- package/dist/components/FormActions.vue.d.ts +1 -1
- package/dist/components/GroupingModal.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 +80 -0
- package/dist/composables/useAutoGroup.js +397 -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 +2654 -1805
- 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 +375 -0
- package/src/components/AutoGroupModal.story.vue +155 -0
- package/src/components/AutoGroupModal.vue +441 -0
- package/src/components/DatePicker.vue +57 -26
- package/src/components/GroupingModal.vue +1 -0
- 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 +495 -0
- package/src/index.ts +12 -0
- package/src/styles/components/auto-group-modal.css +501 -0
- package/src/styles/components/collapsible-card.css +0 -6
- package/src/styles/components/date-picker.css +3 -4
- package/src/styles/index.css +1 -0
- package/src/types/auto-group.ts +37 -0
- package/src/types/index.ts +11 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SampleSelector.vue.js","sources":["../../src/components/SampleSelector.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ref, computed, onMounted, onUnmounted } from 'vue'\nimport BaseButton from './BaseButton.vue'\nimport BaseInput from './BaseInput.vue'\nimport GroupingModal from './GroupingModal.vue'\nimport type { SampleGroup } from '../types'\n\ninterface Props {\n samples: string[]\n modelValue: string[]\n groups?: SampleGroup[]\n enableGrouping?: boolean\n enableAutoGroup?: boolean\n enableMetadataGroup?: boolean\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n groups: () => [],\n enableGrouping: true,\n enableAutoGroup: true,\n enableMetadataGroup: true,\n})\n\nconst emit = defineEmits<{\n 'update:modelValue': [samples: string[]]\n 'update:groups': [groups: SampleGroup[]]\n autoGroup: [level: number]\n metadataGroup: [mapping: Record<string, string[]>]\n}>()\n\nconst DEFAULT_COLORS = [\n '#3B82F6', '#10B981', '#F59E0B', '#EF4444', '#8B5CF6',\n '#EC4899', '#06B6D4', '#84CC16', '#F97316', '#6366F1',\n]\n\n// UI State\nconst showLevelPopover = ref(false)\nconst popoverRef = ref<HTMLDivElement | null>(null)\nconst showMetadataModal = ref(false)\nconst newGroupName = ref('')\nconst editingGroupColor = ref<string | null>(null)\nconst colorPickerInput = ref<HTMLInputElement | null>(null)\nconst expandedGroups = ref<Record<string, boolean>>({})\nconst searchQuery = ref('')\n\n// Drag and Drop State\nconst draggingSample = ref<string | null>(null)\nconst dragSourceGroup = ref<string | null>(null)\nconst dragOverGroup = ref<string | null>(null)\n\n// Computed: groups from props\nconst internalGroups = computed({\n get: () => props.groups,\n set: (value) => emit('update:groups', value),\n})\n\n// Computed: hierarchical structure (Major Group > Sub Groups > Samples)\ninterface MajorGroup {\n name: string\n color: string\n subGroups: SampleGroup[]\n allSamples: string[]\n}\n\nconst hierarchicalGroups = computed<MajorGroup[]>(() => {\n const groups = internalGroups.value\n if (groups.length === 0) return []\n\n // Detect separator: use '/' if any group name contains it, otherwise '_'\n const separator = groups.some(g => g.name.includes('/')) ? '/' : '_'\n const majorGroupMap: Record<string, SampleGroup[]> = {}\n\n for (const group of groups) {\n const parts = group.name.split(separator)\n // Use first part as major group, or full name if no separator\n const majorPrefix = parts.length > 1 ? parts[0] : group.name\n\n if (!majorGroupMap[majorPrefix]) {\n majorGroupMap[majorPrefix] = []\n }\n majorGroupMap[majorPrefix].push(group)\n }\n\n const result: MajorGroup[] = []\n\n for (const [majorName, subGroups] of Object.entries(majorGroupMap).sort(([a], [b]) => a.localeCompare(b))) {\n const allSamples = subGroups.flatMap(g => g.samples)\n const color = subGroups[0]?.color || '#3B82F6'\n\n result.push({\n name: majorName,\n color,\n subGroups: subGroups.sort((a, b) => a.name.localeCompare(b.name)),\n allSamples\n })\n }\n\n return result\n})\n\n// Check if hierarchy is meaningful (major groups have multiple sub-groups)\n// If each major group only has 1 sub-group with same name, show flat view instead\nconst showHierarchy = computed(() => {\n const groups = hierarchicalGroups.value\n if (groups.length === 0) return false\n\n // Show hierarchy if any major group has multiple sub-groups\n // OR if major group name differs from its sub-group name\n return groups.some(major =>\n major.subGroups.length > 1 ||\n (major.subGroups.length === 1 && major.name !== major.subGroups[0].name)\n )\n})\n\nconst groupingEnabled = computed(() => internalGroups.value.length > 0)\n\nconst ungroupedSamples = computed(() => {\n const groupedSamples = new Set(\n internalGroups.value.flatMap(g => g.samples)\n )\n return props.samples.filter(s => !groupedSamples.has(s))\n})\n\nconst filteredSamples = computed(() => {\n if (!searchQuery.value.trim()) return props.samples\n const query = searchQuery.value.toLowerCase()\n return props.samples.filter(s => s.toLowerCase().includes(query))\n})\n\n// Compute available grouping levels with preview\nconst groupingLevels = computed(() => {\n if (props.samples.length === 0) return []\n\n const maxLevel = detectGroupingLevels()\n const levels: Array<{ level: number; groupCount: number; example: string; description: string }> = []\n\n for (let level = 1; level <= maxLevel; level++) {\n const prefixGroups: Record<string, string[]> = {}\n\n for (const sample of props.samples) {\n const parts = sample.split(/[_\\-.]/)\n const prefix = parts.slice(0, level).join('_')\n if (prefix) {\n if (!prefixGroups[prefix]) {\n prefixGroups[prefix] = []\n }\n prefixGroups[prefix].push(sample)\n }\n }\n\n const groupNames = Object.keys(prefixGroups).sort()\n const example = groupNames[0] || ''\n const descriptions = ['main groups', 'sub-groups']\n const description = descriptions[level - 1] || `level ${level} groups`\n\n levels.push({\n level,\n groupCount: groupNames.length,\n example,\n description\n })\n }\n\n return levels\n})\n\nfunction detectGroupingLevels(): number {\n if (props.samples.length === 0) return 1\n const maxParts = Math.max(...props.samples.map(s => s.split(/[_\\-.]/).length))\n return Math.min(maxParts, 3)\n}\n\n// Selection state\nconst isAllSelected = computed(() =>\n props.samples.length > 0 && props.modelValue.length === props.samples.length\n)\n\n// Toggle functions\nfunction toggleSelectAll() {\n if (isAllSelected.value) {\n emit('update:modelValue', [])\n } else {\n emit('update:modelValue', [...props.samples])\n }\n}\n\nfunction toggleSample(sample: string) {\n const newSelection = props.modelValue.includes(sample)\n ? props.modelValue.filter(s => s !== sample)\n : [...props.modelValue, sample]\n emit('update:modelValue', newSelection)\n}\n\nfunction toggleSamplesSelection(samples: string[]) {\n const allSelected = samples.every(s => props.modelValue.includes(s))\n const newSelection = allSelected\n ? props.modelValue.filter(s => !samples.includes(s))\n : [...props.modelValue, ...samples.filter(s => !props.modelValue.includes(s))]\n\n emit('update:modelValue', newSelection)\n}\n\nfunction toggleGroupSamples(groupName: string) {\n const group = internalGroups.value.find(g => g.name === groupName)\n if (!group) return\n toggleSamplesSelection(group.samples)\n}\n\nfunction toggleMajorGroupSamples(majorGroup: MajorGroup) {\n toggleSamplesSelection(majorGroup.allSamples)\n}\n\n// Selection state checks\nfunction isFullySelected(samples: string[]): boolean {\n return samples.length > 0 && samples.every(s => props.modelValue.includes(s))\n}\n\nfunction isPartiallySelected(samples: string[]): boolean {\n if (samples.length === 0) return false\n const selectedCount = samples.filter(s => props.modelValue.includes(s)).length\n return selectedCount > 0 && selectedCount < samples.length\n}\n\nfunction isGroupFullySelected(groupName: string): boolean {\n const group = internalGroups.value.find(g => g.name === groupName)\n return group ? isFullySelected(group.samples) : false\n}\n\nfunction isGroupPartiallySelected(groupName: string): boolean {\n const group = internalGroups.value.find(g => g.name === groupName)\n return group ? isPartiallySelected(group.samples) : false\n}\n\nfunction isMajorGroupFullySelected(majorGroup: MajorGroup): boolean {\n return isFullySelected(majorGroup.allSamples)\n}\n\nfunction isMajorGroupPartiallySelected(majorGroup: MajorGroup): boolean {\n return isPartiallySelected(majorGroup.allSamples)\n}\n\n// Expand/collapse\nfunction toggleGroupExpanded(groupName: string) {\n expandedGroups.value[groupName] = !expandedGroups.value[groupName]\n}\n\nfunction isGroupExpanded(groupName: string): boolean {\n return !!expandedGroups.value[groupName]\n}\n\nfunction expandAllGroups() {\n const expanded: Record<string, boolean> = {}\n for (const major of hierarchicalGroups.value) {\n expanded[`major:${major.name}`] = true\n for (const sub of major.subGroups) {\n expanded[sub.name] = true\n }\n }\n expanded['__ungrouped__'] = true\n expandedGroups.value = expanded\n}\n\nfunction collapseAllGroups() {\n expandedGroups.value = {}\n}\n\n// Auto-group\nfunction toggleLevelPopover() {\n showLevelPopover.value = !showLevelPopover.value\n}\n\nfunction selectLevel(level: number) {\n emit('autoGroup', level)\n showLevelPopover.value = false\n}\n\n// Group management\nfunction clearGroups() {\n internalGroups.value = []\n}\n\nfunction deleteMajorGroup(majorGroup: MajorGroup) {\n internalGroups.value = internalGroups.value.filter(\n g => !majorGroup.subGroups.some(sg => sg.name === g.name)\n )\n}\n\nfunction deleteGroup(groupName: string) {\n internalGroups.value = internalGroups.value.filter(g => g.name !== groupName)\n}\n\nfunction removeSampleFromGroup(sample: string, groupName: string) {\n internalGroups.value = internalGroups.value.map(g =>\n g.name === groupName\n ? { ...g, samples: g.samples.filter((s: string) => s !== sample) }\n : g\n )\n}\n\n// Drag and Drop handlers\nfunction handleDragStart(sample: string, sourceGroup: string | null, event: DragEvent) {\n draggingSample.value = sample\n dragSourceGroup.value = sourceGroup\n if (event.dataTransfer) {\n event.dataTransfer.effectAllowed = 'move'\n event.dataTransfer.setData('text/plain', sample)\n }\n}\n\nfunction resetDragState() {\n draggingSample.value = null\n dragSourceGroup.value = null\n dragOverGroup.value = null\n}\n\nfunction handleDragEnd() {\n resetDragState()\n}\n\nfunction handleDragOver(groupName: string, event: DragEvent) {\n event.preventDefault()\n if (event.dataTransfer) {\n event.dataTransfer.dropEffect = 'move'\n }\n dragOverGroup.value = groupName\n}\n\nfunction handleDragLeave() {\n dragOverGroup.value = null\n}\n\nfunction handleDrop(targetGroupName: string, event: DragEvent) {\n event.preventDefault()\n\n const sample = draggingSample.value\n const sourceGroup = dragSourceGroup.value\n if (!sample) return\n\n if (sourceGroup === targetGroupName) {\n resetDragState()\n return\n }\n\n internalGroups.value = internalGroups.value.map(g => {\n if (sourceGroup && g.name === sourceGroup) {\n return { ...g, samples: g.samples.filter((s: string) => s !== sample) }\n }\n if (g.name === targetGroupName && !g.samples.includes(sample)) {\n return { ...g, samples: [...g.samples, sample] }\n }\n return g\n })\n\n resetDragState()\n}\n\n// Color picker\nfunction openColorPicker(groupName: string, event: Event) {\n event.stopPropagation()\n editingGroupColor.value = groupName\n colorPickerInput.value?.click()\n}\n\nfunction handleColorChange(event: Event) {\n const target = event.target as HTMLInputElement\n if (editingGroupColor.value) {\n internalGroups.value = internalGroups.value.map(g =>\n g.name === editingGroupColor.value ? { ...g, color: target.value } : g\n )\n }\n editingGroupColor.value = null\n}\n\nfunction getGroupColor(groupName: string): string {\n const group = internalGroups.value.find(g => g.name === groupName)\n return group?.color || '#3B82F6'\n}\n\n// New group\nfunction addNewGroup() {\n if (!newGroupName.value.trim()) return\n\n const usedColors = new Set(internalGroups.value.map(g => g.color))\n const availableColor = DEFAULT_COLORS.find(c => !usedColors.has(c)) || DEFAULT_COLORS[0]\n\n const newGroup: SampleGroup = {\n name: newGroupName.value.trim(),\n color: availableColor,\n samples: [],\n }\n\n internalGroups.value = [...internalGroups.value, newGroup]\n newGroupName.value = ''\n}\n\n// Metadata modal\nfunction handleMetadataApply(mapping: Record<string, string[]>) {\n emit('metadataGroup', mapping)\n showMetadataModal.value = false\n}\n\n// Click outside handler\nfunction handleClickOutside(event: MouseEvent) {\n if (popoverRef.value && !popoverRef.value.contains(event.target as Node)) {\n showLevelPopover.value = false\n }\n}\n\nonMounted(() => {\n document.addEventListener('click', handleClickOutside)\n})\n\nonUnmounted(() => {\n document.removeEventListener('click', handleClickOutside)\n})\n</script>\n\n<template>\n <div class=\"mld-sample-selector\">\n <!-- Select All Row -->\n <label class=\"mld-sample-selector__select-all\">\n <input\n type=\"checkbox\"\n :checked=\"isAllSelected\"\n @change=\"toggleSelectAll\"\n class=\"mld-sample-selector__checkbox\"\n />\n <span class=\"mld-sample-selector__select-all-label\">Select All</span>\n <span class=\"mld-sample-selector__select-all-count\">{{ samples.length }} samples</span>\n </label>\n\n <!-- Action Buttons Row -->\n <div v-if=\"enableGrouping\" class=\"mld-sample-selector__actions\" ref=\"popoverRef\">\n <div class=\"mld-sample-selector__actions-row\">\n <!-- Auto Group Button -->\n <BaseButton\n v-if=\"enableAutoGroup\"\n :variant=\"(showLevelPopover || groupingEnabled) ? 'primary' : 'secondary'\"\n size=\"sm\"\n :disabled=\"samples.length === 0\"\n class=\"mld-sample-selector__action-btn\"\n @click.stop=\"toggleLevelPopover\"\n >\n <svg class=\"mld-sample-selector__action-icon\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M13 10V3L4 14h7v7l9-11h-7z\" />\n </svg>\n <span>Auto</span>\n </BaseButton>\n\n <!-- Metadata Button -->\n <BaseButton\n v-if=\"enableMetadataGroup\"\n variant=\"secondary\"\n size=\"sm\"\n :disabled=\"samples.length === 0\"\n class=\"mld-sample-selector__action-btn\"\n @click=\"showMetadataModal = true\"\n >\n <svg class=\"mld-sample-selector__action-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>Metadata</span>\n </BaseButton>\n\n <!-- Reset Button -->\n <BaseButton\n variant=\"ghost\"\n size=\"sm\"\n :disabled=\"internalGroups.length === 0\"\n class=\"mld-sample-selector__action-btn mld-sample-selector__action-btn--reset\"\n @click=\"clearGroups\"\n title=\"Clear all groups\"\n >\n <svg class=\"mld-sample-selector__action-icon\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15\" />\n </svg>\n </BaseButton>\n </div>\n\n <!-- Level Selection Popover -->\n <Transition name=\"mld-popover\">\n <div v-if=\"showLevelPopover\" class=\"mld-sample-selector__popover\">\n <div class=\"mld-sample-selector__popover-header\">Auto-Group by Level</div>\n <div class=\"mld-sample-selector__popover-body\">\n <button\n v-for=\"levelInfo in groupingLevels\"\n :key=\"levelInfo.level\"\n type=\"button\"\n class=\"mld-sample-selector__level-btn\"\n @click=\"selectLevel(levelInfo.level)\"\n >\n <div class=\"mld-sample-selector__level-info\">\n <div class=\"mld-sample-selector__level-title\">\n <span>Level {{ levelInfo.level }}</span>\n <span class=\"mld-sample-selector__level-badge\">{{ levelInfo.groupCount }} groups</span>\n </div>\n <div class=\"mld-sample-selector__level-desc\">\n {{ levelInfo.description }}\n <span v-if=\"levelInfo.example\" class=\"mld-sample-selector__level-example\">\n e.g. <code>{{ levelInfo.example }}</code>\n </span>\n </div>\n </div>\n </button>\n </div>\n </div>\n </Transition>\n </div>\n\n <!-- Grouped View -->\n <div v-if=\"groupingEnabled\" class=\"mld-sample-selector__grouped\">\n <!-- Groups Header -->\n <div class=\"mld-sample-selector__groups-header\">\n <span class=\"mld-sample-selector__groups-title\">Groups ({{ internalGroups.length }})</span>\n <div class=\"mld-sample-selector__groups-controls\">\n <button type=\"button\" class=\"mld-sample-selector__expand-btn\" @click=\"expandAllGroups\" title=\"Expand all\">\n <svg class=\"mld-sample-selector__expand-icon\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M19 9l-7 7-7-7\" />\n </svg>\n </button>\n <button type=\"button\" class=\"mld-sample-selector__expand-btn\" @click=\"collapseAllGroups\" title=\"Collapse all\">\n <svg class=\"mld-sample-selector__expand-icon\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M9 5l7 7-7 7\" />\n </svg>\n </button>\n </div>\n </div>\n\n <!-- Hierarchical Tree -->\n <div class=\"mld-sample-selector__tree\">\n <!-- Major Groups (when hierarchy is meaningful) -->\n <template v-if=\"showHierarchy\">\n <div\n v-for=\"majorGroup in hierarchicalGroups\"\n :key=\"majorGroup.name\"\n class=\"mld-sample-selector__major-group\"\n >\n <!-- Major Group Header -->\n <div\n class=\"mld-sample-selector__major-header\"\n @click=\"toggleGroupExpanded(`major:${majorGroup.name}`)\"\n >\n <svg\n :class=\"[\n 'mld-sample-selector__chevron',\n isGroupExpanded(`major:${majorGroup.name}`) ? 'mld-sample-selector__chevron--open' : '',\n ]\"\n fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\"\n >\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M9 5l7 7-7 7\" />\n </svg>\n\n <input\n type=\"checkbox\"\n :checked=\"isMajorGroupFullySelected(majorGroup)\"\n :indeterminate=\"isMajorGroupPartiallySelected(majorGroup)\"\n class=\"mld-sample-selector__checkbox\"\n :style=\"{ accentColor: majorGroup.color }\"\n @click.stop\n @change=\"toggleMajorGroupSamples(majorGroup)\"\n />\n\n <div\n class=\"mld-sample-selector__color-dot mld-sample-selector__color-dot--large\"\n :style=\"{ backgroundColor: majorGroup.color }\"\n />\n\n <span class=\"mld-sample-selector__major-name\">{{ majorGroup.name }}</span>\n\n <span\n class=\"mld-sample-selector__count-badge\"\n :style=\"{ backgroundColor: majorGroup.color + '20', color: majorGroup.color }\"\n >\n {{ majorGroup.allSamples.length }}\n </span>\n\n <button\n type=\"button\"\n class=\"mld-sample-selector__delete-btn mld-sample-selector__delete-btn--hidden\"\n @click.stop=\"deleteMajorGroup(majorGroup)\"\n title=\"Remove major group\"\n >\n <svg fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n </div>\n\n <!-- Sub Groups (collapsible) -->\n <Transition name=\"mld-collapse\">\n <div\n v-if=\"isGroupExpanded(`major:${majorGroup.name}`)\"\n class=\"mld-sample-selector__sub-groups\"\n :style=\"{ borderColor: majorGroup.color + '30' }\"\n >\n <div\n v-for=\"subGroup in majorGroup.subGroups\"\n :key=\"subGroup.name\"\n :class=\"[\n 'mld-sample-selector__sub-group',\n dragOverGroup === subGroup.name ? 'mld-sample-selector__sub-group--drag-over' : '',\n ]\"\n @dragover=\"handleDragOver(subGroup.name, $event)\"\n @dragleave=\"handleDragLeave\"\n @drop=\"handleDrop(subGroup.name, $event)\"\n >\n <!-- Sub Group Header -->\n <div\n class=\"mld-sample-selector__sub-header\"\n @click=\"toggleGroupExpanded(subGroup.name)\"\n >\n <svg\n :class=\"[\n 'mld-sample-selector__chevron mld-sample-selector__chevron--small',\n isGroupExpanded(subGroup.name) ? 'mld-sample-selector__chevron--open' : '',\n ]\"\n fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\"\n >\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M9 5l7 7-7 7\" />\n </svg>\n\n <input\n type=\"checkbox\"\n :checked=\"isGroupFullySelected(subGroup.name)\"\n :indeterminate=\"isGroupPartiallySelected(subGroup.name)\"\n class=\"mld-sample-selector__checkbox mld-sample-selector__checkbox--small\"\n :style=\"{ accentColor: subGroup.color }\"\n @click.stop\n @change=\"toggleGroupSamples(subGroup.name)\"\n />\n\n <button\n type=\"button\"\n class=\"mld-sample-selector__color-dot mld-sample-selector__color-dot--clickable\"\n :style=\"{ backgroundColor: subGroup.color }\"\n @click.stop=\"openColorPicker(subGroup.name, $event)\"\n title=\"Click to change color\"\n />\n\n <span class=\"mld-sample-selector__sub-name\">{{ subGroup.name }}</span>\n\n <span\n class=\"mld-sample-selector__count-badge mld-sample-selector__count-badge--small\"\n :style=\"{ backgroundColor: subGroup.color + '20', color: subGroup.color }\"\n >\n {{ subGroup.samples.length }}\n </span>\n\n <button\n type=\"button\"\n class=\"mld-sample-selector__delete-btn mld-sample-selector__delete-btn--hidden\"\n @click.stop=\"deleteGroup(subGroup.name)\"\n title=\"Remove sub group\"\n >\n <svg fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n </div>\n\n <!-- Samples (collapsible) -->\n <Transition name=\"mld-collapse\">\n <div\n v-if=\"isGroupExpanded(subGroup.name)\"\n class=\"mld-sample-selector__samples\"\n :style=\"{ borderColor: subGroup.color + '40' }\"\n >\n <div\n v-for=\"sample in subGroup.samples\"\n :key=\"sample\"\n :class=\"[\n 'mld-sample-selector__sample',\n draggingSample === sample ? 'mld-sample-selector__sample--dragging' : '',\n ]\"\n draggable=\"true\"\n @dragstart=\"handleDragStart(sample, subGroup.name, $event)\"\n @dragend=\"handleDragEnd\"\n >\n <svg class=\"mld-sample-selector__drag-handle\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M4 8h16M4 16h16\" />\n </svg>\n <input\n type=\"checkbox\"\n :checked=\"modelValue.includes(sample)\"\n class=\"mld-sample-selector__checkbox mld-sample-selector__checkbox--tiny\"\n :style=\"{ accentColor: subGroup.color }\"\n @change=\"toggleSample(sample)\"\n />\n <span class=\"mld-sample-selector__sample-name\">{{ sample }}</span>\n <button\n type=\"button\"\n class=\"mld-sample-selector__remove-btn\"\n @click=\"removeSampleFromGroup(sample, subGroup.name)\"\n title=\"Remove from group\"\n >\n <svg fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M20 12H4\" />\n </svg>\n </button>\n </div>\n </div>\n </Transition>\n </div>\n </div>\n </Transition>\n </div>\n </template>\n\n <!-- Flat Groups (when no meaningful hierarchy - e.g., level 1) -->\n <template v-else>\n <div\n v-for=\"group in internalGroups\"\n :key=\"group.name\"\n :class=\"[\n 'mld-sample-selector__sub-group',\n dragOverGroup === group.name ? 'mld-sample-selector__sub-group--drag-over' : '',\n ]\"\n @dragover=\"handleDragOver(group.name, $event)\"\n @dragleave=\"handleDragLeave\"\n @drop=\"handleDrop(group.name, $event)\"\n >\n <!-- Group Header -->\n <div\n class=\"mld-sample-selector__major-header\"\n @click=\"toggleGroupExpanded(group.name)\"\n >\n <svg\n :class=\"[\n 'mld-sample-selector__chevron',\n isGroupExpanded(group.name) ? 'mld-sample-selector__chevron--open' : '',\n ]\"\n fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\"\n >\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M9 5l7 7-7 7\" />\n </svg>\n\n <input\n type=\"checkbox\"\n :checked=\"isGroupFullySelected(group.name)\"\n :indeterminate=\"isGroupPartiallySelected(group.name)\"\n class=\"mld-sample-selector__checkbox\"\n :style=\"{ accentColor: group.color }\"\n @click.stop\n @change=\"toggleGroupSamples(group.name)\"\n />\n\n <button\n type=\"button\"\n class=\"mld-sample-selector__color-dot mld-sample-selector__color-dot--large mld-sample-selector__color-dot--clickable\"\n :style=\"{ backgroundColor: group.color }\"\n @click.stop=\"openColorPicker(group.name, $event)\"\n title=\"Click to change color\"\n />\n\n <span class=\"mld-sample-selector__major-name\">{{ group.name }}</span>\n\n <span\n class=\"mld-sample-selector__count-badge\"\n :style=\"{ backgroundColor: group.color + '20', color: group.color }\"\n >\n {{ group.samples.length }}\n </span>\n\n <button\n type=\"button\"\n class=\"mld-sample-selector__delete-btn mld-sample-selector__delete-btn--hidden\"\n @click.stop=\"deleteGroup(group.name)\"\n title=\"Remove group\"\n >\n <svg fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n </div>\n\n <!-- Samples (collapsible) -->\n <Transition name=\"mld-collapse\">\n <div\n v-if=\"isGroupExpanded(group.name)\"\n class=\"mld-sample-selector__samples\"\n :style=\"{ borderColor: group.color + '40' }\"\n >\n <div\n v-for=\"sample in group.samples\"\n :key=\"sample\"\n :class=\"[\n 'mld-sample-selector__sample',\n draggingSample === sample ? 'mld-sample-selector__sample--dragging' : '',\n ]\"\n draggable=\"true\"\n @dragstart=\"handleDragStart(sample, group.name, $event)\"\n @dragend=\"handleDragEnd\"\n >\n <svg class=\"mld-sample-selector__drag-handle\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M4 8h16M4 16h16\" />\n </svg>\n <input\n type=\"checkbox\"\n :checked=\"modelValue.includes(sample)\"\n class=\"mld-sample-selector__checkbox mld-sample-selector__checkbox--tiny\"\n :style=\"{ accentColor: group.color }\"\n @change=\"toggleSample(sample)\"\n />\n <span class=\"mld-sample-selector__sample-name\">{{ sample }}</span>\n <button\n type=\"button\"\n class=\"mld-sample-selector__remove-btn\"\n @click=\"removeSampleFromGroup(sample, group.name)\"\n title=\"Remove from group\"\n >\n <svg fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M20 12H4\" />\n </svg>\n </button>\n </div>\n </div>\n </Transition>\n </div>\n </template>\n\n <!-- Empty state -->\n <div v-if=\"internalGroups.length === 0\" class=\"mld-sample-selector__empty\">\n Click the lightning bolt to auto-group samples\n </div>\n </div>\n\n <!-- Ungrouped Samples Section -->\n <div v-if=\"ungroupedSamples.length > 0\" class=\"mld-sample-selector__ungrouped\">\n <div\n class=\"mld-sample-selector__ungrouped-header\"\n @click=\"toggleGroupExpanded('__ungrouped__')\"\n >\n <svg\n :class=\"[\n 'mld-sample-selector__chevron',\n isGroupExpanded('__ungrouped__') ? 'mld-sample-selector__chevron--open' : '',\n ]\"\n fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\"\n >\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M9 5l7 7-7 7\" />\n </svg>\n <span class=\"mld-sample-selector__ungrouped-label\">Ungrouped</span>\n <span class=\"mld-sample-selector__ungrouped-count\">{{ ungroupedSamples.length }}</span>\n </div>\n\n <Transition name=\"mld-collapse\">\n <div\n v-if=\"isGroupExpanded('__ungrouped__')\"\n class=\"mld-sample-selector__ungrouped-list\"\n >\n <div\n v-for=\"sample in ungroupedSamples\"\n :key=\"sample\"\n :class=\"[\n 'mld-sample-selector__sample',\n draggingSample === sample ? 'mld-sample-selector__sample--dragging' : '',\n ]\"\n draggable=\"true\"\n @dragstart=\"handleDragStart(sample, null, $event)\"\n @dragend=\"handleDragEnd\"\n >\n <svg class=\"mld-sample-selector__drag-handle\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M4 8h16M4 16h16\" />\n </svg>\n <input\n type=\"checkbox\"\n :checked=\"modelValue.includes(sample)\"\n class=\"mld-sample-selector__checkbox mld-sample-selector__checkbox--small\"\n @change=\"toggleSample(sample)\"\n />\n <span class=\"mld-sample-selector__sample-name\">{{ sample }}</span>\n </div>\n </div>\n </Transition>\n </div>\n\n <!-- New Group Input -->\n <div class=\"mld-sample-selector__new-group\">\n <BaseInput\n v-model=\"newGroupName\"\n placeholder=\"New group name...\"\n class=\"mld-sample-selector__new-group-input\"\n @keyup.enter=\"addNewGroup\"\n />\n <BaseButton\n variant=\"ghost\"\n size=\"sm\"\n :disabled=\"!newGroupName.trim()\"\n class=\"mld-sample-selector__new-group-btn\"\n @click=\"addNewGroup\"\n >\n Add\n </BaseButton>\n </div>\n\n <!-- Hidden color picker input -->\n <input\n ref=\"colorPickerInput\"\n type=\"color\"\n class=\"mld-sample-selector__color-input\"\n :value=\"editingGroupColor ? getGroupColor(editingGroupColor) : '#3B82F6'\"\n @change=\"handleColorChange\"\n />\n </div>\n\n <!-- Flat View (when no groups) -->\n <div v-if=\"!groupingEnabled\" class=\"mld-sample-selector__flat\">\n <!-- Search -->\n <div class=\"mld-sample-selector__search\">\n <svg class=\"mld-sample-selector__search-icon\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z\" />\n </svg>\n <input\n v-model=\"searchQuery\"\n type=\"text\"\n placeholder=\"Search samples...\"\n class=\"mld-sample-selector__search-input\"\n />\n </div>\n\n <!-- Flat samples list -->\n <div class=\"mld-sample-selector__flat-list\">\n <div\n v-for=\"sample in filteredSamples\"\n :key=\"sample\"\n class=\"mld-sample-selector__flat-item\"\n >\n <input\n type=\"checkbox\"\n :checked=\"modelValue.includes(sample)\"\n class=\"mld-sample-selector__checkbox\"\n @change=\"toggleSample(sample)\"\n />\n <span class=\"mld-sample-selector__flat-name\">{{ sample }}</span>\n </div>\n\n <div v-if=\"filteredSamples.length === 0 && searchQuery.trim()\" class=\"mld-sample-selector__empty\">\n No samples match \"{{ searchQuery }}\"\n </div>\n </div>\n </div>\n\n <!-- Metadata Grouping Modal -->\n <GroupingModal\n :open=\"showMetadataModal\"\n :samples=\"samples\"\n @close=\"showMetadataModal = false\"\n @apply=\"handleMetadataApply\"\n />\n </div>\n</template>\n\n<style>\n@import '../styles/components/sample-selector.css';\n</style>\n"],"names":["_openBlock","_createElementBlock","_createElementVNode","_toDisplayString","_createBlock","BaseButton","_createVNode","_Transition","_Fragment","_renderList","_normalizeClass","_normalizeStyle","_withModifiers","BaseInput","GroupingModal"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SampleSelector.vue.js","sources":["../../src/components/SampleSelector.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ref, computed } from 'vue'\nimport BaseButton from './BaseButton.vue'\nimport BaseInput from './BaseInput.vue'\nimport AutoGroupModal from './AutoGroupModal.vue'\nimport type { SampleGroup } from '../types'\nimport type { AutoGroupResult } from '../types/auto-group'\n\ninterface Props {\n samples: string[]\n modelValue: string[]\n groups?: SampleGroup[]\n enableGrouping?: boolean\n enableSmartGroup?: boolean\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n groups: () => [],\n enableGrouping: true,\n enableSmartGroup: true,\n})\n\nconst emit = defineEmits<{\n 'update:modelValue': [samples: string[]]\n 'update:groups': [groups: SampleGroup[]]\n smartGroup: [result: AutoGroupResult]\n}>()\n\nconst DEFAULT_COLORS = [\n '#3B82F6', '#10B981', '#F59E0B', '#EF4444', '#8B5CF6',\n '#EC4899', '#06B6D4', '#84CC16', '#F97316', '#6366F1',\n]\n\n// UI State\nconst showSmartGroupModal = ref(false)\nconst newGroupName = ref('')\nconst editingGroupColor = ref<string | null>(null)\nconst colorPickerInput = ref<HTMLInputElement | null>(null)\nconst expandedGroups = ref<Record<string, boolean>>({})\nconst searchQuery = ref('')\n\n// Drag and Drop State\nconst draggingSample = ref<string | null>(null)\nconst dragSourceGroup = ref<string | null>(null)\nconst dragOverGroup = ref<string | null>(null)\n\n// Computed: groups from props\nconst internalGroups = computed({\n get: () => props.groups,\n set: (value) => emit('update:groups', value),\n})\n\n// Computed: hierarchical structure (Major Group > Sub Groups > Samples)\ninterface MajorGroup {\n name: string\n color: string\n subGroups: SampleGroup[]\n allSamples: string[]\n}\n\nconst hierarchicalGroups = computed<MajorGroup[]>(() => {\n const groups = internalGroups.value\n if (groups.length === 0) return []\n\n // Detect separator: use '/' if any group name contains it, otherwise '_'\n const separator = groups.some(g => g.name.includes('/')) ? '/' : '_'\n const majorGroupMap: Record<string, SampleGroup[]> = {}\n\n for (const group of groups) {\n const parts = group.name.split(separator)\n // Use first part as major group, or full name if no separator\n const majorPrefix = parts.length > 1 ? parts[0] : group.name\n\n if (!majorGroupMap[majorPrefix]) {\n majorGroupMap[majorPrefix] = []\n }\n majorGroupMap[majorPrefix].push(group)\n }\n\n const result: MajorGroup[] = []\n\n for (const [majorName, subGroups] of Object.entries(majorGroupMap).sort(([a], [b]) => a.localeCompare(b))) {\n const allSamples = subGroups.flatMap(g => g.samples)\n const color = subGroups[0]?.color || '#3B82F6'\n\n result.push({\n name: majorName,\n color,\n subGroups: subGroups.sort((a, b) => a.name.localeCompare(b.name)),\n allSamples\n })\n }\n\n return result\n})\n\n// Check if hierarchy is meaningful (major groups have multiple sub-groups)\n// If each major group only has 1 sub-group with same name, show flat view instead\nconst showHierarchy = computed(() => {\n const groups = hierarchicalGroups.value\n if (groups.length === 0) return false\n\n // Show hierarchy if any major group has multiple sub-groups\n // OR if major group name differs from its sub-group name\n return groups.some(major =>\n major.subGroups.length > 1 ||\n (major.subGroups.length === 1 && major.name !== major.subGroups[0].name)\n )\n})\n\nconst groupingEnabled = computed(() => internalGroups.value.length > 0)\n\nconst ungroupedSamples = computed(() => {\n const groupedSamples = new Set(\n internalGroups.value.flatMap(g => g.samples)\n )\n return props.samples.filter(s => !groupedSamples.has(s))\n})\n\nconst filteredSamples = computed(() => {\n if (!searchQuery.value.trim()) return props.samples\n const query = searchQuery.value.toLowerCase()\n return props.samples.filter(s => s.toLowerCase().includes(query))\n})\n\n\n// Selection state\nconst isAllSelected = computed(() =>\n props.samples.length > 0 && props.modelValue.length === props.samples.length\n)\n\n// Toggle functions\nfunction toggleSelectAll() {\n if (isAllSelected.value) {\n emit('update:modelValue', [])\n } else {\n emit('update:modelValue', [...props.samples])\n }\n}\n\nfunction toggleSample(sample: string) {\n const newSelection = props.modelValue.includes(sample)\n ? props.modelValue.filter(s => s !== sample)\n : [...props.modelValue, sample]\n emit('update:modelValue', newSelection)\n}\n\nfunction toggleSamplesSelection(samples: string[]) {\n const allSelected = samples.every(s => props.modelValue.includes(s))\n const newSelection = allSelected\n ? props.modelValue.filter(s => !samples.includes(s))\n : [...props.modelValue, ...samples.filter(s => !props.modelValue.includes(s))]\n\n emit('update:modelValue', newSelection)\n}\n\nfunction toggleGroupSamples(groupName: string) {\n const group = internalGroups.value.find(g => g.name === groupName)\n if (!group) return\n toggleSamplesSelection(group.samples)\n}\n\nfunction toggleMajorGroupSamples(majorGroup: MajorGroup) {\n toggleSamplesSelection(majorGroup.allSamples)\n}\n\n// Selection state checks\nfunction isFullySelected(samples: string[]): boolean {\n return samples.length > 0 && samples.every(s => props.modelValue.includes(s))\n}\n\nfunction isPartiallySelected(samples: string[]): boolean {\n if (samples.length === 0) return false\n const selectedCount = samples.filter(s => props.modelValue.includes(s)).length\n return selectedCount > 0 && selectedCount < samples.length\n}\n\nfunction isGroupFullySelected(groupName: string): boolean {\n const group = internalGroups.value.find(g => g.name === groupName)\n return group ? isFullySelected(group.samples) : false\n}\n\nfunction isGroupPartiallySelected(groupName: string): boolean {\n const group = internalGroups.value.find(g => g.name === groupName)\n return group ? isPartiallySelected(group.samples) : false\n}\n\nfunction isMajorGroupFullySelected(majorGroup: MajorGroup): boolean {\n return isFullySelected(majorGroup.allSamples)\n}\n\nfunction isMajorGroupPartiallySelected(majorGroup: MajorGroup): boolean {\n return isPartiallySelected(majorGroup.allSamples)\n}\n\n// Expand/collapse\nfunction toggleGroupExpanded(groupName: string) {\n expandedGroups.value[groupName] = !expandedGroups.value[groupName]\n}\n\nfunction isGroupExpanded(groupName: string): boolean {\n return !!expandedGroups.value[groupName]\n}\n\nfunction expandAllGroups() {\n const expanded: Record<string, boolean> = {}\n for (const major of hierarchicalGroups.value) {\n expanded[`major:${major.name}`] = true\n for (const sub of major.subGroups) {\n expanded[sub.name] = true\n }\n }\n expanded['__ungrouped__'] = true\n expandedGroups.value = expanded\n}\n\nfunction collapseAllGroups() {\n expandedGroups.value = {}\n}\n\n// Smart group\nfunction handleSmartGroupApply(result: AutoGroupResult) {\n emit('smartGroup', result)\n emit('update:groups', result.groups)\n}\n\n// Group management\nfunction clearGroups() {\n internalGroups.value = []\n}\n\nfunction deleteMajorGroup(majorGroup: MajorGroup) {\n internalGroups.value = internalGroups.value.filter(\n g => !majorGroup.subGroups.some(sg => sg.name === g.name)\n )\n}\n\nfunction deleteGroup(groupName: string) {\n internalGroups.value = internalGroups.value.filter(g => g.name !== groupName)\n}\n\nfunction removeSampleFromGroup(sample: string, groupName: string) {\n internalGroups.value = internalGroups.value.map(g =>\n g.name === groupName\n ? { ...g, samples: g.samples.filter((s: string) => s !== sample) }\n : g\n )\n}\n\n// Drag and Drop handlers\nfunction handleDragStart(sample: string, sourceGroup: string | null, event: DragEvent) {\n draggingSample.value = sample\n dragSourceGroup.value = sourceGroup\n if (event.dataTransfer) {\n event.dataTransfer.effectAllowed = 'move'\n event.dataTransfer.setData('text/plain', sample)\n }\n}\n\nfunction resetDragState() {\n draggingSample.value = null\n dragSourceGroup.value = null\n dragOverGroup.value = null\n}\n\nfunction handleDragEnd() {\n resetDragState()\n}\n\nfunction handleDragOver(groupName: string, event: DragEvent) {\n event.preventDefault()\n if (event.dataTransfer) {\n event.dataTransfer.dropEffect = 'move'\n }\n dragOverGroup.value = groupName\n}\n\nfunction handleDragLeave() {\n dragOverGroup.value = null\n}\n\nfunction handleDrop(targetGroupName: string, event: DragEvent) {\n event.preventDefault()\n\n const sample = draggingSample.value\n const sourceGroup = dragSourceGroup.value\n if (!sample) return\n\n if (sourceGroup === targetGroupName) {\n resetDragState()\n return\n }\n\n internalGroups.value = internalGroups.value.map(g => {\n if (sourceGroup && g.name === sourceGroup) {\n return { ...g, samples: g.samples.filter((s: string) => s !== sample) }\n }\n if (g.name === targetGroupName && !g.samples.includes(sample)) {\n return { ...g, samples: [...g.samples, sample] }\n }\n return g\n })\n\n resetDragState()\n}\n\n// Color picker\nfunction openColorPicker(groupName: string, event: Event) {\n event.stopPropagation()\n editingGroupColor.value = groupName\n colorPickerInput.value?.click()\n}\n\nfunction handleColorChange(event: Event) {\n const target = event.target as HTMLInputElement\n if (editingGroupColor.value) {\n internalGroups.value = internalGroups.value.map(g =>\n g.name === editingGroupColor.value ? { ...g, color: target.value } : g\n )\n }\n editingGroupColor.value = null\n}\n\nfunction getGroupColor(groupName: string): string {\n const group = internalGroups.value.find(g => g.name === groupName)\n return group?.color || '#3B82F6'\n}\n\n// New group\nfunction addNewGroup() {\n if (!newGroupName.value.trim()) return\n\n const usedColors = new Set(internalGroups.value.map(g => g.color))\n const availableColor = DEFAULT_COLORS.find(c => !usedColors.has(c)) || DEFAULT_COLORS[0]\n\n const newGroup: SampleGroup = {\n name: newGroupName.value.trim(),\n color: availableColor,\n samples: [],\n }\n\n internalGroups.value = [...internalGroups.value, newGroup]\n newGroupName.value = ''\n}\n\n</script>\n\n<template>\n <div class=\"mld-sample-selector\">\n <!-- Select All Row -->\n <label class=\"mld-sample-selector__select-all\">\n <input\n type=\"checkbox\"\n :checked=\"isAllSelected\"\n @change=\"toggleSelectAll\"\n class=\"mld-sample-selector__checkbox\"\n />\n <span class=\"mld-sample-selector__select-all-label\">Select All</span>\n <span class=\"mld-sample-selector__select-all-count\">{{ samples.length }} samples</span>\n </label>\n\n <!-- Action Buttons Row -->\n <div v-if=\"enableGrouping\" class=\"mld-sample-selector__actions\">\n <div class=\"mld-sample-selector__actions-row\">\n <!-- Smart Group Button -->\n <BaseButton\n v-if=\"enableSmartGroup\"\n :variant=\"groupingEnabled ? 'primary' : 'secondary'\"\n size=\"sm\"\n :disabled=\"samples.length === 0\"\n class=\"mld-sample-selector__action-btn\"\n @click=\"showSmartGroupModal = true\"\n >\n <svg class=\"mld-sample-selector__action-icon\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M13 10V3L4 14h7v7l9-11h-7z\" />\n </svg>\n <span>Smart Group</span>\n </BaseButton>\n\n <!-- Reset Button -->\n <BaseButton\n variant=\"ghost\"\n size=\"sm\"\n :disabled=\"internalGroups.length === 0\"\n class=\"mld-sample-selector__action-btn mld-sample-selector__action-btn--reset\"\n @click=\"clearGroups\"\n title=\"Clear all groups\"\n >\n <svg class=\"mld-sample-selector__action-icon\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15\" />\n </svg>\n </BaseButton>\n </div>\n </div>\n\n <!-- Grouped View -->\n <div v-if=\"groupingEnabled\" class=\"mld-sample-selector__grouped\">\n <!-- Groups Header -->\n <div class=\"mld-sample-selector__groups-header\">\n <span class=\"mld-sample-selector__groups-title\">Groups ({{ internalGroups.length }})</span>\n <div class=\"mld-sample-selector__groups-controls\">\n <button type=\"button\" class=\"mld-sample-selector__expand-btn\" @click=\"expandAllGroups\" title=\"Expand all\">\n <svg class=\"mld-sample-selector__expand-icon\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M19 9l-7 7-7-7\" />\n </svg>\n </button>\n <button type=\"button\" class=\"mld-sample-selector__expand-btn\" @click=\"collapseAllGroups\" title=\"Collapse all\">\n <svg class=\"mld-sample-selector__expand-icon\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M9 5l7 7-7 7\" />\n </svg>\n </button>\n </div>\n </div>\n\n <!-- Hierarchical Tree -->\n <div class=\"mld-sample-selector__tree\">\n <!-- Major Groups (when hierarchy is meaningful) -->\n <template v-if=\"showHierarchy\">\n <div\n v-for=\"majorGroup in hierarchicalGroups\"\n :key=\"majorGroup.name\"\n class=\"mld-sample-selector__major-group\"\n >\n <!-- Major Group Header -->\n <div\n class=\"mld-sample-selector__major-header\"\n @click=\"toggleGroupExpanded(`major:${majorGroup.name}`)\"\n >\n <svg\n :class=\"[\n 'mld-sample-selector__chevron',\n isGroupExpanded(`major:${majorGroup.name}`) ? 'mld-sample-selector__chevron--open' : '',\n ]\"\n fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\"\n >\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M9 5l7 7-7 7\" />\n </svg>\n\n <input\n type=\"checkbox\"\n :checked=\"isMajorGroupFullySelected(majorGroup)\"\n :indeterminate=\"isMajorGroupPartiallySelected(majorGroup)\"\n class=\"mld-sample-selector__checkbox\"\n :style=\"{ accentColor: majorGroup.color }\"\n @click.stop\n @change=\"toggleMajorGroupSamples(majorGroup)\"\n />\n\n <div\n class=\"mld-sample-selector__color-dot mld-sample-selector__color-dot--large\"\n :style=\"{ backgroundColor: majorGroup.color }\"\n />\n\n <span class=\"mld-sample-selector__major-name\">{{ majorGroup.name }}</span>\n\n <span\n class=\"mld-sample-selector__count-badge\"\n :style=\"{ backgroundColor: majorGroup.color + '20', color: majorGroup.color }\"\n >\n {{ majorGroup.allSamples.length }}\n </span>\n\n <button\n type=\"button\"\n class=\"mld-sample-selector__delete-btn mld-sample-selector__delete-btn--hidden\"\n @click.stop=\"deleteMajorGroup(majorGroup)\"\n title=\"Remove major group\"\n >\n <svg fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n </div>\n\n <!-- Sub Groups (collapsible) -->\n <Transition name=\"mld-collapse\">\n <div\n v-if=\"isGroupExpanded(`major:${majorGroup.name}`)\"\n class=\"mld-sample-selector__sub-groups\"\n :style=\"{ borderColor: majorGroup.color + '30' }\"\n >\n <div\n v-for=\"subGroup in majorGroup.subGroups\"\n :key=\"subGroup.name\"\n :class=\"[\n 'mld-sample-selector__sub-group',\n dragOverGroup === subGroup.name ? 'mld-sample-selector__sub-group--drag-over' : '',\n ]\"\n @dragover=\"handleDragOver(subGroup.name, $event)\"\n @dragleave=\"handleDragLeave\"\n @drop=\"handleDrop(subGroup.name, $event)\"\n >\n <!-- Sub Group Header -->\n <div\n class=\"mld-sample-selector__sub-header\"\n @click=\"toggleGroupExpanded(subGroup.name)\"\n >\n <svg\n :class=\"[\n 'mld-sample-selector__chevron mld-sample-selector__chevron--small',\n isGroupExpanded(subGroup.name) ? 'mld-sample-selector__chevron--open' : '',\n ]\"\n fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\"\n >\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M9 5l7 7-7 7\" />\n </svg>\n\n <input\n type=\"checkbox\"\n :checked=\"isGroupFullySelected(subGroup.name)\"\n :indeterminate=\"isGroupPartiallySelected(subGroup.name)\"\n class=\"mld-sample-selector__checkbox mld-sample-selector__checkbox--small\"\n :style=\"{ accentColor: subGroup.color }\"\n @click.stop\n @change=\"toggleGroupSamples(subGroup.name)\"\n />\n\n <button\n type=\"button\"\n class=\"mld-sample-selector__color-dot mld-sample-selector__color-dot--clickable\"\n :style=\"{ backgroundColor: subGroup.color }\"\n @click.stop=\"openColorPicker(subGroup.name, $event)\"\n title=\"Click to change color\"\n />\n\n <span class=\"mld-sample-selector__sub-name\">{{ subGroup.name }}</span>\n\n <span\n class=\"mld-sample-selector__count-badge mld-sample-selector__count-badge--small\"\n :style=\"{ backgroundColor: subGroup.color + '20', color: subGroup.color }\"\n >\n {{ subGroup.samples.length }}\n </span>\n\n <button\n type=\"button\"\n class=\"mld-sample-selector__delete-btn mld-sample-selector__delete-btn--hidden\"\n @click.stop=\"deleteGroup(subGroup.name)\"\n title=\"Remove sub group\"\n >\n <svg fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n </div>\n\n <!-- Samples (collapsible) -->\n <Transition name=\"mld-collapse\">\n <div\n v-if=\"isGroupExpanded(subGroup.name)\"\n class=\"mld-sample-selector__samples\"\n :style=\"{ borderColor: subGroup.color + '40' }\"\n >\n <div\n v-for=\"sample in subGroup.samples\"\n :key=\"sample\"\n :class=\"[\n 'mld-sample-selector__sample',\n draggingSample === sample ? 'mld-sample-selector__sample--dragging' : '',\n ]\"\n draggable=\"true\"\n @dragstart=\"handleDragStart(sample, subGroup.name, $event)\"\n @dragend=\"handleDragEnd\"\n >\n <svg class=\"mld-sample-selector__drag-handle\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M4 8h16M4 16h16\" />\n </svg>\n <input\n type=\"checkbox\"\n :checked=\"modelValue.includes(sample)\"\n class=\"mld-sample-selector__checkbox mld-sample-selector__checkbox--tiny\"\n :style=\"{ accentColor: subGroup.color }\"\n @change=\"toggleSample(sample)\"\n />\n <span class=\"mld-sample-selector__sample-name\">{{ sample }}</span>\n <button\n type=\"button\"\n class=\"mld-sample-selector__remove-btn\"\n @click=\"removeSampleFromGroup(sample, subGroup.name)\"\n title=\"Remove from group\"\n >\n <svg fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M20 12H4\" />\n </svg>\n </button>\n </div>\n </div>\n </Transition>\n </div>\n </div>\n </Transition>\n </div>\n </template>\n\n <!-- Flat Groups (when no meaningful hierarchy - e.g., level 1) -->\n <template v-else>\n <div\n v-for=\"group in internalGroups\"\n :key=\"group.name\"\n :class=\"[\n 'mld-sample-selector__sub-group',\n dragOverGroup === group.name ? 'mld-sample-selector__sub-group--drag-over' : '',\n ]\"\n @dragover=\"handleDragOver(group.name, $event)\"\n @dragleave=\"handleDragLeave\"\n @drop=\"handleDrop(group.name, $event)\"\n >\n <!-- Group Header -->\n <div\n class=\"mld-sample-selector__major-header\"\n @click=\"toggleGroupExpanded(group.name)\"\n >\n <svg\n :class=\"[\n 'mld-sample-selector__chevron',\n isGroupExpanded(group.name) ? 'mld-sample-selector__chevron--open' : '',\n ]\"\n fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\"\n >\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M9 5l7 7-7 7\" />\n </svg>\n\n <input\n type=\"checkbox\"\n :checked=\"isGroupFullySelected(group.name)\"\n :indeterminate=\"isGroupPartiallySelected(group.name)\"\n class=\"mld-sample-selector__checkbox\"\n :style=\"{ accentColor: group.color }\"\n @click.stop\n @change=\"toggleGroupSamples(group.name)\"\n />\n\n <button\n type=\"button\"\n class=\"mld-sample-selector__color-dot mld-sample-selector__color-dot--large mld-sample-selector__color-dot--clickable\"\n :style=\"{ backgroundColor: group.color }\"\n @click.stop=\"openColorPicker(group.name, $event)\"\n title=\"Click to change color\"\n />\n\n <span class=\"mld-sample-selector__major-name\">{{ group.name }}</span>\n\n <span\n class=\"mld-sample-selector__count-badge\"\n :style=\"{ backgroundColor: group.color + '20', color: group.color }\"\n >\n {{ group.samples.length }}\n </span>\n\n <button\n type=\"button\"\n class=\"mld-sample-selector__delete-btn mld-sample-selector__delete-btn--hidden\"\n @click.stop=\"deleteGroup(group.name)\"\n title=\"Remove group\"\n >\n <svg fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n </div>\n\n <!-- Samples (collapsible) -->\n <Transition name=\"mld-collapse\">\n <div\n v-if=\"isGroupExpanded(group.name)\"\n class=\"mld-sample-selector__samples\"\n :style=\"{ borderColor: group.color + '40' }\"\n >\n <div\n v-for=\"sample in group.samples\"\n :key=\"sample\"\n :class=\"[\n 'mld-sample-selector__sample',\n draggingSample === sample ? 'mld-sample-selector__sample--dragging' : '',\n ]\"\n draggable=\"true\"\n @dragstart=\"handleDragStart(sample, group.name, $event)\"\n @dragend=\"handleDragEnd\"\n >\n <svg class=\"mld-sample-selector__drag-handle\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M4 8h16M4 16h16\" />\n </svg>\n <input\n type=\"checkbox\"\n :checked=\"modelValue.includes(sample)\"\n class=\"mld-sample-selector__checkbox mld-sample-selector__checkbox--tiny\"\n :style=\"{ accentColor: group.color }\"\n @change=\"toggleSample(sample)\"\n />\n <span class=\"mld-sample-selector__sample-name\">{{ sample }}</span>\n <button\n type=\"button\"\n class=\"mld-sample-selector__remove-btn\"\n @click=\"removeSampleFromGroup(sample, group.name)\"\n title=\"Remove from group\"\n >\n <svg fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M20 12H4\" />\n </svg>\n </button>\n </div>\n </div>\n </Transition>\n </div>\n </template>\n\n <!-- Empty state -->\n <div v-if=\"internalGroups.length === 0\" class=\"mld-sample-selector__empty\">\n Click Smart Group to auto-group samples\n </div>\n </div>\n\n <!-- Ungrouped Samples Section -->\n <div v-if=\"ungroupedSamples.length > 0\" class=\"mld-sample-selector__ungrouped\">\n <div\n class=\"mld-sample-selector__ungrouped-header\"\n @click=\"toggleGroupExpanded('__ungrouped__')\"\n >\n <svg\n :class=\"[\n 'mld-sample-selector__chevron',\n isGroupExpanded('__ungrouped__') ? 'mld-sample-selector__chevron--open' : '',\n ]\"\n fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\"\n >\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M9 5l7 7-7 7\" />\n </svg>\n <span class=\"mld-sample-selector__ungrouped-label\">Ungrouped</span>\n <span class=\"mld-sample-selector__ungrouped-count\">{{ ungroupedSamples.length }}</span>\n </div>\n\n <Transition name=\"mld-collapse\">\n <div\n v-if=\"isGroupExpanded('__ungrouped__')\"\n class=\"mld-sample-selector__ungrouped-list\"\n >\n <div\n v-for=\"sample in ungroupedSamples\"\n :key=\"sample\"\n :class=\"[\n 'mld-sample-selector__sample',\n draggingSample === sample ? 'mld-sample-selector__sample--dragging' : '',\n ]\"\n draggable=\"true\"\n @dragstart=\"handleDragStart(sample, null, $event)\"\n @dragend=\"handleDragEnd\"\n >\n <svg class=\"mld-sample-selector__drag-handle\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M4 8h16M4 16h16\" />\n </svg>\n <input\n type=\"checkbox\"\n :checked=\"modelValue.includes(sample)\"\n class=\"mld-sample-selector__checkbox mld-sample-selector__checkbox--small\"\n @change=\"toggleSample(sample)\"\n />\n <span class=\"mld-sample-selector__sample-name\">{{ sample }}</span>\n </div>\n </div>\n </Transition>\n </div>\n\n <!-- New Group Input -->\n <div class=\"mld-sample-selector__new-group\">\n <BaseInput\n v-model=\"newGroupName\"\n placeholder=\"New group name...\"\n class=\"mld-sample-selector__new-group-input\"\n @keyup.enter=\"addNewGroup\"\n />\n <BaseButton\n variant=\"ghost\"\n size=\"sm\"\n :disabled=\"!newGroupName.trim()\"\n class=\"mld-sample-selector__new-group-btn\"\n @click=\"addNewGroup\"\n >\n Add\n </BaseButton>\n </div>\n\n <!-- Hidden color picker input -->\n <input\n ref=\"colorPickerInput\"\n type=\"color\"\n class=\"mld-sample-selector__color-input\"\n :value=\"editingGroupColor ? getGroupColor(editingGroupColor) : '#3B82F6'\"\n @change=\"handleColorChange\"\n />\n </div>\n\n <!-- Flat View (when no groups) -->\n <div v-if=\"!groupingEnabled\" class=\"mld-sample-selector__flat\">\n <!-- Search -->\n <div class=\"mld-sample-selector__search\">\n <svg class=\"mld-sample-selector__search-icon\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z\" />\n </svg>\n <input\n v-model=\"searchQuery\"\n type=\"text\"\n placeholder=\"Search samples...\"\n class=\"mld-sample-selector__search-input\"\n />\n </div>\n\n <!-- Flat samples list -->\n <div class=\"mld-sample-selector__flat-list\">\n <div\n v-for=\"sample in filteredSamples\"\n :key=\"sample\"\n class=\"mld-sample-selector__flat-item\"\n >\n <input\n type=\"checkbox\"\n :checked=\"modelValue.includes(sample)\"\n class=\"mld-sample-selector__checkbox\"\n @change=\"toggleSample(sample)\"\n />\n <span class=\"mld-sample-selector__flat-name\">{{ sample }}</span>\n </div>\n\n <div v-if=\"filteredSamples.length === 0 && searchQuery.trim()\" class=\"mld-sample-selector__empty\">\n No samples match \"{{ searchQuery }}\"\n </div>\n </div>\n </div>\n\n <!-- Smart Grouping Modal -->\n <AutoGroupModal\n v-model=\"showSmartGroupModal\"\n :samples=\"samples\"\n @apply=\"handleSmartGroupApply\"\n />\n </div>\n</template>\n\n<style>\n@import '../styles/components/sample-selector.css';\n</style>\n"],"names":["_openBlock","_createElementBlock","_createElementVNode","_toDisplayString","_createBlock","BaseButton","_createVNode","_Fragment","_renderList","_normalizeClass","_normalizeStyle","_withModifiers","_Transition","BaseInput","AutoGroupModal"],"mappings":"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"}
|
|
@@ -50,6 +50,7 @@ export { default as PlateMapEditor } from './PlateMapEditor.vue';
|
|
|
50
50
|
export { default as ExperimentTimeline } from './ExperimentTimeline.vue';
|
|
51
51
|
export { default as SampleSelector } from './SampleSelector.vue';
|
|
52
52
|
export { default as GroupingModal } from './GroupingModal.vue';
|
|
53
|
+
export { default as AutoGroupModal } from './AutoGroupModal.vue';
|
|
53
54
|
export { default as GroupAssigner } from './GroupAssigner.vue';
|
|
54
55
|
export { default as MoleculeInput } from './MoleculeInput.vue';
|
|
55
56
|
export { default as ConcentrationInput } from './ConcentrationInput.vue';
|
package/dist/components/index.js
CHANGED
|
@@ -101,54 +101,56 @@ import { default as default52 } from "./SampleSelector.vue.js";
|
|
|
101
101
|
/* empty css */
|
|
102
102
|
import { default as default53 } from "./GroupingModal.vue.js";
|
|
103
103
|
/* empty css */
|
|
104
|
-
import { default as default54 } from "./
|
|
104
|
+
import { default as default54 } from "./AutoGroupModal.vue.js";
|
|
105
|
+
/* empty css */
|
|
106
|
+
import { default as default55 } from "./GroupAssigner.vue.js";
|
|
105
107
|
/* empty css */
|
|
106
|
-
import { default as
|
|
108
|
+
import { default as default56 } from "./MoleculeInput.vue.js";
|
|
107
109
|
/* empty css */
|
|
108
|
-
import { default as
|
|
110
|
+
import { default as default57 } from "./ConcentrationInput.vue.js";
|
|
109
111
|
/* empty css */
|
|
110
|
-
import { default as
|
|
112
|
+
import { default as default58 } from "./DoseCalculator.vue.js";
|
|
111
113
|
/* empty css */
|
|
112
|
-
import { default as
|
|
114
|
+
import { default as default59 } from "./ReagentList.vue.js";
|
|
113
115
|
/* empty css */
|
|
114
|
-
import { default as
|
|
116
|
+
import { default as default60 } from "./SampleHierarchyTree.vue.js";
|
|
115
117
|
/* empty css */
|
|
116
|
-
import { default as
|
|
118
|
+
import { default as default61 } from "./ProtocolStepEditor.vue.js";
|
|
117
119
|
/* empty css */
|
|
118
|
-
import { default as
|
|
120
|
+
import { default as default62 } from "./ScientificNumber.vue.js";
|
|
119
121
|
/* empty css */
|
|
120
|
-
import { default as
|
|
122
|
+
import { default as default63 } from "./ChemicalFormula.vue.js";
|
|
121
123
|
/* empty css */
|
|
122
|
-
import { default as
|
|
124
|
+
import { default as default64 } from "./FormulaInput.vue.js";
|
|
123
125
|
/* empty css */
|
|
124
|
-
import { default as
|
|
126
|
+
import { default as default65 } from "./SequenceInput.vue.js";
|
|
125
127
|
/* empty css */
|
|
126
|
-
import { default as
|
|
128
|
+
import { default as default66 } from "./UnitInput.vue.js";
|
|
127
129
|
/* empty css */
|
|
128
|
-
import { default as
|
|
130
|
+
import { default as default67 } from "./StepWizard.vue.js";
|
|
129
131
|
/* empty css */
|
|
130
|
-
import { default as
|
|
132
|
+
import { default as default68 } from "./AuditTrail.vue.js";
|
|
131
133
|
/* empty css */
|
|
132
|
-
import { default as
|
|
134
|
+
import { default as default69 } from "./BatchProgressList.vue.js";
|
|
133
135
|
/* empty css */
|
|
134
|
-
import { default as
|
|
136
|
+
import { default as default70 } from "./FormBuilder.vue.js";
|
|
135
137
|
/* empty css */
|
|
136
|
-
import { default as
|
|
138
|
+
import { default as default71 } from "./FormSection.vue.js";
|
|
137
139
|
/* empty css */
|
|
138
|
-
import { default as
|
|
140
|
+
import { default as default72 } from "./FormActions.vue.js";
|
|
139
141
|
/* empty css */
|
|
140
|
-
import { default as
|
|
141
|
-
import { default as
|
|
142
|
+
import { default as default73 } from "./FormFieldRenderer.vue.js";
|
|
143
|
+
import { default as default74 } from "./ExperimentDataViewer.vue.js";
|
|
142
144
|
/* empty css */
|
|
143
|
-
import { default as
|
|
145
|
+
import { default as default75 } from "./ExperimentCodeBadge.vue.js";
|
|
144
146
|
/* empty css */
|
|
145
|
-
import { default as
|
|
147
|
+
import { default as default76 } from "./DateTimePicker.vue.js";
|
|
146
148
|
/* empty css */
|
|
147
|
-
import { default as
|
|
149
|
+
import { default as default77 } from "./TimeRangeInput.vue.js";
|
|
148
150
|
/* empty css */
|
|
149
|
-
import { default as
|
|
151
|
+
import { default as default78 } from "./ScheduleCalendar.vue.js";
|
|
150
152
|
/* empty css */
|
|
151
|
-
import { default as
|
|
153
|
+
import { default as default79 } from "./ResourceCard.vue.js";
|
|
152
154
|
/* empty css */
|
|
153
155
|
export {
|
|
154
156
|
default25 as AlertBox,
|
|
@@ -156,7 +158,8 @@ export {
|
|
|
156
158
|
default33 as AppLayout,
|
|
157
159
|
default32 as AppSidebar,
|
|
158
160
|
default31 as AppTopBar,
|
|
159
|
-
|
|
161
|
+
default68 as AuditTrail,
|
|
162
|
+
default54 as AutoGroupModal,
|
|
160
163
|
default40 as Avatar,
|
|
161
164
|
default2 as BaseButton,
|
|
162
165
|
default6 as BaseCheckbox,
|
|
@@ -169,64 +172,64 @@ export {
|
|
|
169
172
|
default11 as BaseTabs,
|
|
170
173
|
default4 as BaseTextarea,
|
|
171
174
|
default7 as BaseToggle,
|
|
172
|
-
|
|
175
|
+
default69 as BatchProgressList,
|
|
173
176
|
default42 as Breadcrumb,
|
|
174
177
|
default17 as Calendar,
|
|
175
178
|
default45 as ChartContainer,
|
|
176
|
-
|
|
179
|
+
default63 as ChemicalFormula,
|
|
177
180
|
default30 as CollapsibleCard,
|
|
178
181
|
default10 as ColorSlider,
|
|
179
|
-
|
|
182
|
+
default57 as ConcentrationInput,
|
|
180
183
|
default44 as ConfirmDialog,
|
|
181
184
|
default18 as DataFrame,
|
|
182
185
|
default20 as DatePicker,
|
|
183
|
-
|
|
186
|
+
default76 as DateTimePicker,
|
|
184
187
|
default37 as Divider,
|
|
185
|
-
|
|
188
|
+
default58 as DoseCalculator,
|
|
186
189
|
default16 as DropdownButton,
|
|
187
190
|
default41 as EmptyState,
|
|
188
|
-
|
|
189
|
-
|
|
191
|
+
default75 as ExperimentCodeBadge,
|
|
192
|
+
default74 as ExperimentDataViewer,
|
|
190
193
|
default51 as ExperimentTimeline,
|
|
191
194
|
default24 as FileUploader,
|
|
192
|
-
|
|
193
|
-
|
|
195
|
+
default72 as FormActions,
|
|
196
|
+
default70 as FormBuilder,
|
|
194
197
|
default19 as FormField,
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
198
|
+
default73 as FormFieldRenderer,
|
|
199
|
+
default71 as FormSection,
|
|
200
|
+
default64 as FormulaInput,
|
|
201
|
+
default55 as GroupAssigner,
|
|
199
202
|
default53 as GroupingModal,
|
|
200
203
|
default27 as IconButton,
|
|
201
204
|
default36 as LoadingSpinner,
|
|
202
|
-
|
|
205
|
+
default56 as MoleculeInput,
|
|
203
206
|
default14 as MultiSelect,
|
|
204
207
|
default23 as NumberInput,
|
|
205
208
|
default50 as PlateMapEditor,
|
|
206
209
|
default39 as ProgressBar,
|
|
207
|
-
|
|
210
|
+
default61 as ProtocolStepEditor,
|
|
208
211
|
default48 as RackEditor,
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
+
default59 as ReagentList,
|
|
213
|
+
default79 as ResourceCard,
|
|
214
|
+
default60 as SampleHierarchyTree,
|
|
212
215
|
default49 as SampleLegend,
|
|
213
216
|
default52 as SampleSelector,
|
|
214
|
-
|
|
215
|
-
|
|
217
|
+
default78 as ScheduleCalendar,
|
|
218
|
+
default62 as ScientificNumber,
|
|
216
219
|
default13 as SegmentedControl,
|
|
217
|
-
|
|
220
|
+
default65 as SequenceInput,
|
|
218
221
|
default29 as SettingsButton,
|
|
219
222
|
default46 as SettingsModal,
|
|
220
223
|
default35 as Skeleton,
|
|
221
224
|
default38 as StatusIndicator,
|
|
222
|
-
|
|
225
|
+
default67 as StepWizard,
|
|
223
226
|
default22 as TagsInput,
|
|
224
227
|
default28 as ThemeToggle,
|
|
225
228
|
default21 as TimePicker,
|
|
226
|
-
|
|
229
|
+
default77 as TimeRangeInput,
|
|
227
230
|
default26 as ToastNotification,
|
|
228
231
|
default43 as Tooltip,
|
|
229
|
-
|
|
232
|
+
default66 as UnitInput,
|
|
230
233
|
default47 as WellPlate
|
|
231
234
|
};
|
|
232
235
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -16,5 +16,6 @@ export { useSequenceUtils, type SequenceType, type SequenceStats, } from './useS
|
|
|
16
16
|
export { parseTime, formatTime, generateTimeSlots, rangesOverlap, durationMinutes, formatDuration, isTimeInRange, findAvailableSlots, snapToSlot, addMinutes, compareTime, } from './useTimeUtils';
|
|
17
17
|
export { useScheduleDrag } from './useScheduleDrag';
|
|
18
18
|
export { useFormBuilder, evaluateCondition } from './useFormBuilder';
|
|
19
|
+
export { useAutoGroup, DEFAULT_COLORS } from './useAutoGroup';
|
|
19
20
|
export { usePluginConfig, type UsePluginConfigReturn } from './usePluginConfig';
|
|
20
21
|
export { getFieldRegistryEntry, getTypeDefault, type RegistryEntry, } from './formBuilderRegistry';
|
|
@@ -16,10 +16,12 @@ import { useSequenceUtils } from "./useSequenceUtils.js";
|
|
|
16
16
|
import { addMinutes, compareTime, durationMinutes, findAvailableSlots, formatDuration, formatTime, generateTimeSlots, isTimeInRange, parseTime, rangesOverlap, snapToSlot } from "./useTimeUtils.js";
|
|
17
17
|
import { useScheduleDrag } from "./useScheduleDrag.js";
|
|
18
18
|
import { evaluateCondition, useFormBuilder } from "./useFormBuilder.js";
|
|
19
|
+
import { DEFAULT_COLORS, useAutoGroup } from "./useAutoGroup.js";
|
|
19
20
|
import { usePluginConfig } from "./usePluginConfig.js";
|
|
20
21
|
import { getFieldRegistryEntry, getTypeDefault } from "./formBuilderRegistry.js";
|
|
21
22
|
export {
|
|
22
23
|
ATOMIC_WEIGHTS,
|
|
24
|
+
DEFAULT_COLORS,
|
|
23
25
|
addMinutes,
|
|
24
26
|
compareTime,
|
|
25
27
|
durationMinutes,
|
|
@@ -38,6 +40,7 @@ export {
|
|
|
38
40
|
useAsync,
|
|
39
41
|
useAsyncBatch,
|
|
40
42
|
useAuth,
|
|
43
|
+
useAutoGroup,
|
|
41
44
|
useChemicalFormula,
|
|
42
45
|
useConcentrationUnits,
|
|
43
46
|
useDoseCalculator,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { InputMode, OutlierAction, OutlierInfo, ColumnInfo, MetadataRow, AutoGroupResult, ParsedCsvData } from '../types/auto-group';
|
|
2
|
+
import { SampleGroup } from '../types/components';
|
|
3
|
+
export declare const DEFAULT_COLORS: string[];
|
|
4
|
+
export declare function analyzeDelimiter(lines: string[]): {
|
|
5
|
+
delimiter: string;
|
|
6
|
+
dominantFieldCount: number;
|
|
7
|
+
minFieldCount: number;
|
|
8
|
+
consistency: number;
|
|
9
|
+
};
|
|
10
|
+
export declare function detectOutliers(lines: string[], delimiter: string, minFieldCount: number): OutlierInfo[];
|
|
11
|
+
export declare function extractColumns(samples: string[], delimiter: string, minFieldCount: number): ColumnInfo[];
|
|
12
|
+
export declare function parseCSVLine(line: string): string[];
|
|
13
|
+
export declare function parseCSV(text: string): ParsedCsvData;
|
|
14
|
+
export declare function computeGroups(allSamples: string[], columns: ColumnInfo[], enabledFields: Set<number>, outlierActions: Map<number, OutlierAction>, delimiter: string, minFieldCount: number): {
|
|
15
|
+
groups: SampleGroup[];
|
|
16
|
+
metadata: MetadataRow[];
|
|
17
|
+
excludedSamples: string[];
|
|
18
|
+
};
|
|
19
|
+
export declare function useAutoGroup(): {
|
|
20
|
+
inputMode: import('vue').Ref<InputMode, InputMode>;
|
|
21
|
+
rawText: import('vue').Ref<string, string>;
|
|
22
|
+
csvData: import('vue').Ref<{
|
|
23
|
+
columns: string[];
|
|
24
|
+
rows: Record<string, string>[];
|
|
25
|
+
sampleColumn: string;
|
|
26
|
+
} | null, ParsedCsvData | {
|
|
27
|
+
columns: string[];
|
|
28
|
+
rows: Record<string, string>[];
|
|
29
|
+
sampleColumn: string;
|
|
30
|
+
} | null>;
|
|
31
|
+
delimiter: import('vue').Ref<string, string>;
|
|
32
|
+
dominantFieldCount: import('vue').Ref<number, number>;
|
|
33
|
+
minFieldCount: import('vue').Ref<number, number>;
|
|
34
|
+
outliers: import('vue').Ref<{
|
|
35
|
+
sample: string;
|
|
36
|
+
index: number;
|
|
37
|
+
fieldCount: number;
|
|
38
|
+
action: OutlierAction;
|
|
39
|
+
}[], OutlierInfo[] | {
|
|
40
|
+
sample: string;
|
|
41
|
+
index: number;
|
|
42
|
+
fieldCount: number;
|
|
43
|
+
action: OutlierAction;
|
|
44
|
+
}[]>;
|
|
45
|
+
fields: import('vue').Ref<{
|
|
46
|
+
index: number;
|
|
47
|
+
name: string;
|
|
48
|
+
uniqueValues: string[];
|
|
49
|
+
cardinality: number;
|
|
50
|
+
type?: "prefix" | "suffix" | undefined;
|
|
51
|
+
}[], ColumnInfo[] | {
|
|
52
|
+
index: number;
|
|
53
|
+
name: string;
|
|
54
|
+
uniqueValues: string[];
|
|
55
|
+
cardinality: number;
|
|
56
|
+
type?: "prefix" | "suffix" | undefined;
|
|
57
|
+
}[]>;
|
|
58
|
+
fieldNames: import('vue').Ref<Record<number, string>, Record<number, string>>;
|
|
59
|
+
enabledFields: import('vue').Ref<Set<number> & Omit<Set<number>, keyof Set<any>>, Set<number> | (Set<number> & Omit<Set<number>, keyof Set<any>>)>;
|
|
60
|
+
samples: import('vue').ComputedRef<string[]>;
|
|
61
|
+
hasOutliers: import('vue').ComputedRef<boolean>;
|
|
62
|
+
conformingSamples: import('vue').ComputedRef<string[]>;
|
|
63
|
+
groups: import('vue').ComputedRef<SampleGroup[]>;
|
|
64
|
+
metadata: import('vue').ComputedRef<MetadataRow[]>;
|
|
65
|
+
excludedSamples: import('vue').ComputedRef<string[]>;
|
|
66
|
+
result: import('vue').ComputedRef<AutoGroupResult>;
|
|
67
|
+
effectiveColumns: import('vue').ComputedRef<{
|
|
68
|
+
name: string;
|
|
69
|
+
index: number;
|
|
70
|
+
uniqueValues: string[];
|
|
71
|
+
cardinality: number;
|
|
72
|
+
type?: "prefix" | "suffix" | undefined;
|
|
73
|
+
}[]>;
|
|
74
|
+
parseInput: () => void;
|
|
75
|
+
setOutlierAction: (index: number, action: OutlierAction) => void;
|
|
76
|
+
setAllOutlierActions: (action: OutlierAction) => void;
|
|
77
|
+
toggleField: (index: number) => void;
|
|
78
|
+
renameField: (index: number, name: string) => void;
|
|
79
|
+
reset: () => void;
|
|
80
|
+
};
|