feat(extensions): add ZIP installation and unify action dialogs

This commit is contained in:
2026-09-06 00:52:59 +08:00
parent ba66b182af
commit 99a92e9eb1
29 changed files with 554 additions and 50 deletions
@@ -9,6 +9,18 @@ let previousFocus: HTMLElement | null = null
function dismiss() { if (props.dismissible) emit('close') }
function keydown(event: KeyboardEvent) {
if (event.key === 'Escape') { event.preventDefault(); event.stopPropagation(); dismiss() }
if (event.key === 'Tab' && dialog.value) {
const items = Array.from(dialog.value.querySelectorAll<HTMLElement>('button:not(:disabled), input:not(:disabled):not([type="hidden"]), textarea:not(:disabled), select:not(:disabled), a[href], [tabindex]'))
.filter(element => element.tabIndex >= 0 && element.getClientRects().length > 0)
const first = items[0]
const last = items.at(-1)
if (!first) { event.preventDefault(); dialog.value.focus(); return }
if (event.shiftKey && (document.activeElement === first || document.activeElement === dialog.value)) {
event.preventDefault(); last?.focus()
} else if (!event.shiftKey && document.activeElement === last) {
event.preventDefault(); first.focus()
}
}
}
onMounted(() => {
previousFocus = document.activeElement as HTMLElement | null