diff --git a/packages/react-grab/src/agent.ts b/packages/react-grab/src/agent.ts index 2b8408a7..c169c7a2 100644 --- a/packages/react-grab/src/agent.ts +++ b/packages/react-grab/src/agent.ts @@ -177,7 +177,7 @@ export const createAgentManager = ( const element = document.elementFromPoint(centerX, centerY); if (!element) return undefined; - if (tagName && element.tagName.toLowerCase() !== tagName) { + if (tagName && (element.tagName || "").toLowerCase() !== tagName) { return undefined; } diff --git a/packages/react-grab/src/context.ts b/packages/react-grab/src/context.ts index a8d5be41..6f7645ab 100644 --- a/packages/react-grab/src/context.ts +++ b/packages/react-grab/src/context.ts @@ -138,7 +138,7 @@ export const getElementContext = async ( }; export const getHTMLPreview = (element: Element): string => { - const tagName = element.tagName.toLowerCase(); + const tagName = (element.tagName || "").toLowerCase(); if (!(element instanceof HTMLElement)) { return `<${tagName} />`; } @@ -180,7 +180,7 @@ export const getHTMLPreview = (element: Element): string => { if (elements.length === 0) return ""; if (elements.length <= 2) { return elements - .map((el) => `<${el.tagName.toLowerCase()} ...>`) + .map((el) => `<${(el.tagName || "").toLowerCase()} ...>`) .join("\n "); } return `(${elements.length} elements)`; diff --git a/packages/react-grab/src/utils/is-selection-inside-editable-element.ts b/packages/react-grab/src/utils/is-selection-inside-editable-element.ts index b200badb..f81d636d 100644 --- a/packages/react-grab/src/utils/is-selection-inside-editable-element.ts +++ b/packages/react-grab/src/utils/is-selection-inside-editable-element.ts @@ -1,5 +1,5 @@ const isEditableElement = (element: Element): boolean => { - const tagName = element.tagName.toLowerCase(); + const tagName = (element.tagName || "").toLowerCase(); if (tagName === "input" || tagName === "textarea") { return true; }