From a0a275dcb435ed4bce62667ea3f9636fc9ff2ba4 Mon Sep 17 00:00:00 2001 From: Matthew Connelly Date: Wed, 28 Jan 2026 15:33:09 -0500 Subject: [PATCH] fix: guard against undefined/stale refs in comment interactions --- .../src/core/commands/list-helpers/is-list.js | 14 +++++++++----- .../components/CommentsLayer/FloatingComments.vue | 5 ++++- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/packages/super-editor/src/core/commands/list-helpers/is-list.js b/packages/super-editor/src/core/commands/list-helpers/is-list.js index 947c594473..10a61bcfa2 100644 --- a/packages/super-editor/src/core/commands/list-helpers/is-list.js +++ b/packages/super-editor/src/core/commands/list-helpers/is-list.js @@ -4,8 +4,12 @@ import { getResolvedParagraphProperties } from '@extensions/paragraph/resolvedPr * @param {import("prosemirror-model").Node} n - The ProseMirror node to check. * @returns {boolean} True if the node is an ordered or bullet list, false otherwise */ -export const isList = (node) => - !!node && - node.type?.name === 'paragraph' && - getResolvedParagraphProperties(node).numberingProperties && - node.attrs?.listRendering; +export const isList = (node) => { + if (!node || node.type?.name !== 'paragraph') return false; + + const resolvedProps = getResolvedParagraphProperties(node); + const props = resolvedProps || node.attrs?.paragraphProperties; // fall back to raw props if uncached + const numberingProps = props?.numberingProperties; + + return !!numberingProps && !!node.attrs?.listRendering; +}; diff --git a/packages/superdoc/src/components/CommentsLayer/FloatingComments.vue b/packages/superdoc/src/components/CommentsLayer/FloatingComments.vue index 8b37b01faa..460e3ffbaf 100644 --- a/packages/superdoc/src/components/CommentsLayer/FloatingComments.vue +++ b/packages/superdoc/src/components/CommentsLayer/FloatingComments.vue @@ -136,7 +136,10 @@ watch(activeComment, (newVal, oldVal) => { verticalOffset.value = selectionTop - renderedTop; setTimeout(() => { - renderedItem.elementRef.value?.scrollIntoView({ + // elementRef may be stale/null after comment list re-renders + const elementRef = renderedItem.elementRef; + if (!elementRef) return; + elementRef.value?.scrollIntoView({ behavior: 'smooth', block: 'center', });