From 2c204160f500c6148fe6c00441b2d55db7eaf8ec Mon Sep 17 00:00:00 2001 From: Martin Donadieu Date: Thu, 12 Mar 2026 11:29:00 +0100 Subject: [PATCH 01/10] fix(ui): restore modal action clicks --- src/components/DialogV2.vue | 17 ++++++++++++++-- src/stores/dialogv2.ts | 39 +++++++++++++++++++++++++++++-------- 2 files changed, 46 insertions(+), 10 deletions(-) diff --git a/src/components/DialogV2.vue b/src/components/DialogV2.vue index e032081834..3ae03e4024 100644 --- a/src/components/DialogV2.vue +++ b/src/components/DialogV2.vue @@ -1,4 +1,5 @@ @@ -116,8 +129,7 @@ onMounted(() => { 'd-btn d-btn-outline': button.role === 'cancel', 'd-btn': !button.role, '!cursor-pointer': !button.disabled, - 'cursor-not-allowed': button.disabled, - 'opacity-70 cursor-not-allowed pointer-events-none': button.disabled, + 'opacity-70 cursor-not-allowed': button.disabled, }" :disabled="button.disabled" @click="handleButtonClick(button, $event)" @@ -137,9 +149,11 @@ onMounted(() => { 'd-btn d-btn-outline': button.role === 'cancel', 'd-btn': !button.role, '!cursor-pointer': !button.disabled, - 'cursor-not-allowed': button.disabled, - 'opacity-70 cursor-not-allowed pointer-events-none': button.disabled, + 'opacity-70 cursor-not-allowed': button.disabled, + 'pointer-events-none': button.disabled, }" + :aria-disabled="button.disabled || undefined" + :tabindex="button.disabled ? -1 : undefined" @click="handleButtonClick(button, $event)" > {{ button.text }} diff --git a/src/stores/dialogv2.ts b/src/stores/dialogv2.ts index 867dc0f8a2..2f5c0bee3e 100644 --- a/src/stores/dialogv2.ts +++ b/src/stores/dialogv2.ts @@ -1,4 +1,5 @@ import { acceptHMRUpdate, defineStore } from 'pinia' +import { ref, watch } from 'vue' export interface DialogV2Button { text: string @@ -31,6 +32,7 @@ export const useDialogV2Store = defineStore('dialogv2', () => { dialogOptions.value = options showDialog.value = true dialogCanceled.value = false + lastButtonRole.value = '' } const openButtonHref = (button: DialogV2Button) => { @@ -42,11 +44,12 @@ export const useDialogV2Store = defineStore('dialogv2', () => { if (button.target === '_blank') { const relTokens = button.rel ? button.rel.split(/[\s,]+/).filter(Boolean) : [] - const features = [ - 'noopener', - ...(relTokens.includes('noreferrer') ? ['noreferrer'] : []), - ] - window.open(button.href, button.target, features.join(',')) + const relSet = new Set(relTokens) + relSet.add('noopener') + if (relTokens.some((token) => token.toLowerCase() === 'noreferrer')) + relSet.add('noreferrer') + const relFeatures = Array.from(relSet).join(',') + window.open(button.href, button.target, relFeatures) return } @@ -76,14 +79,15 @@ export const useDialogV2Store = defineStore('dialogv2', () => { if (!button.preventClose) { showDialog.value = false + if (button.href) + openButtonHref(button) } - - if (!button.preventClose && button.href) - openButtonHref(button) return } // Modal dismissed without a button action (overlay, escape, close icon) + dialogCanceled.value = true + lastButtonRole.value = '' showDialog.value = false } From f0e75d9dda4dc9bf135c69cf55c34608650a6f9a Mon Sep 17 00:00:00 2001 From: Martin Donadieu Date: Wed, 18 Mar 2026 17:08:34 +0100 Subject: [PATCH 06/10] Tighten dialog store rel parsing --- src/stores/dialogv2.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/stores/dialogv2.ts b/src/stores/dialogv2.ts index 2f5c0bee3e..5144ddbb75 100644 --- a/src/stores/dialogv2.ts +++ b/src/stores/dialogv2.ts @@ -46,7 +46,7 @@ export const useDialogV2Store = defineStore('dialogv2', () => { const relTokens = button.rel ? button.rel.split(/[\s,]+/).filter(Boolean) : [] const relSet = new Set(relTokens) relSet.add('noopener') - if (relTokens.some((token) => token.toLowerCase() === 'noreferrer')) + if (relTokens.some(token => token.toLowerCase() === 'noreferrer')) relSet.add('noreferrer') const relFeatures = Array.from(relSet).join(',') window.open(button.href, button.target, relFeatures) From adfb1a38311f1b34ccbae06bab29c0cf2911404f Mon Sep 17 00:00:00 2001 From: Martin Donadieu Date: Wed, 18 Mar 2026 17:10:32 +0100 Subject: [PATCH 07/10] fix(frontend): sort dialog vue imports --- src/components/DialogV2.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/DialogV2.vue b/src/components/DialogV2.vue index caf08284ba..3c88b379ff 100644 --- a/src/components/DialogV2.vue +++ b/src/components/DialogV2.vue @@ -1,7 +1,7 @@