fix(shortcut): focusInput

This commit is contained in:
zhangheng
2026-04-15 17:26:58 +08:00
parent dfd5f0fca1
commit 5146124722
2 changed files with 68 additions and 2 deletions

View File

@@ -1,5 +1,71 @@
import { Project } from "./api/project/typing"
const nonEditableInputTypes = new Set([
"button",
"checkbox",
"color",
"file",
"hidden",
"image",
"radio",
"range",
"reset",
"submit",
])
const editableRoles = new Set([
"textbox",
"searchbox",
"combobox",
"spinbutton",
])
const resolveTargetElement = (target: EventTarget | null) => {
if (target instanceof Element) return target
if (target instanceof Node) return target.parentElement
return null
}
export const isEditableKeyboardTarget = (target: EventTarget | null) => {
const element = resolveTargetElement(target)
if (!element) return false
const editableElement = element.closest(
[
"input",
"textarea",
"select",
"[contenteditable='']",
"[contenteditable='true']",
"[role='textbox']",
"[role='searchbox']",
"[role='combobox']",
"[role='spinbutton']",
].join(",")
)
if (!editableElement) return false
if (editableElement instanceof HTMLInputElement) {
return !nonEditableInputTypes.has(editableElement.type.toLowerCase())
}
if (
editableElement instanceof HTMLTextAreaElement ||
editableElement instanceof HTMLSelectElement
) {
return true
}
if (editableElement instanceof HTMLElement) {
if (editableElement.isContentEditable) return true
const role = editableElement.getAttribute("role")
return role ? editableRoles.has(role) : false
}
return false
}
// 是否存在不符合要求的子属性
export const getSubAttrStatus = (
operationSchema: Project.LabelSchemaList | null,