From cc34f3129c982d60db60b4a2dbe308839561370f Mon Sep 17 00:00:00 2001 From: Benjamin Capodanno Date: Wed, 20 May 2026 16:15:52 -0700 Subject: [PATCH 1/4] feat(MvCollapsible): add inline-link slot and buttonLabel prop - Add an `inline-link` named slot that, when present, renders a separate left-aligned section alongside the toggle button, allowing an inline link to coexist with the collapsible header - Add `buttonLabel` prop to set an accessible `aria-label` on the toggle button for improved screen-reader support --- src/components/common/MvCollapsible.vue | 30 +++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/src/components/common/MvCollapsible.vue b/src/components/common/MvCollapsible.vue index e7f6750b..974b82be 100644 --- a/src/components/common/MvCollapsible.vue +++ b/src/components/common/MvCollapsible.vue @@ -1,6 +1,32 @@ - + + @@ -55,7 +68,8 @@ import {defineComponent, type PropType} from 'vue' import CollectionBadge from '@/components/common/MvCollectionBadge.vue' import MvPill from '@/components/common/MvPill.vue' -import {getTargetGeneName} from '@/lib/target-genes' +import {isMultiTargetScoreSet} from '@/lib/genes' +import {getTargetGeneLinkItems, type TargetGeneLinkItem} from '@/lib/target-genes' import {components} from '@/schema/openapi' type FullScoreSet = components['schemas']['ScoreSet'] @@ -85,6 +99,10 @@ export default defineComponent({ showMeta: { type: Boolean, default: true + }, + showMultiTargetPill: { + type: Boolean, + default: false } }, @@ -95,12 +113,14 @@ export default defineComponent({ maxTags(): number { return MAX_TAGS }, + geneTargets(): TargetGeneLinkItem[] { + return getTargetGeneLinkItems(this.scoreSet.targetGenes || []) + }, geneNames(): string[] { - if (!this.scoreSet.targetGenes) return [] - return [...new Set(this.scoreSet.targetGenes.map((g) => getTargetGeneName(g)).filter(Boolean))] + return this.geneTargets.map((gene) => gene.name) }, - visibleGenes(): string[] { - return this.geneNames.slice(0, MAX_TAGS) + visibleGeneTargets(): TargetGeneLinkItem[] { + return this.geneTargets.slice(0, MAX_TAGS) }, organisms(): string[] { if (!this.scoreSet.targetGenes) return [] @@ -123,6 +143,9 @@ export default defineComponent({ if (type === 'protein') return 'Protein' return null }, + isMultiTarget(): boolean { + return isMultiTargetScoreSet(this.scoreSet) + }, formattedDate(): string { if (!this.scoreSet.publishedDate) return '' const date = new Date(this.scoreSet.publishedDate) diff --git a/src/components/common/MvTargetGeneDetails.vue b/src/components/common/MvTargetGeneDetails.vue index 199df329..fb5c15ce 100644 --- a/src/components/common/MvTargetGeneDetails.vue +++ b/src/components/common/MvTargetGeneDetails.vue @@ -31,8 +31,10 @@
{{ ext.identifier?.dbName }}: - {{ ext.identifier?.identifier - }} (offset {{ ext.offset }}) + {{ ext.identifier?.identifier }} + + (offset {{ ext.offset }}) +
@@ -46,10 +48,11 @@
 {
         this.copied = false
+        this.copyFailed = false
       }, 1500)
     }
   }
diff --git a/src/components/common/MvTargetsAccordion.vue b/src/components/common/MvTargetsAccordion.vue
index fc9208e0..79f69b5b 100644
--- a/src/components/common/MvTargetsAccordion.vue
+++ b/src/components/common/MvTargetsAccordion.vue
@@ -14,10 +14,27 @@
           
{{ scoreSet.urn }}
- + +