diff --git a/packages/tiptap-extensions/src/nodes/Mention.js b/packages/tiptap-extensions/src/nodes/Mention.js index aa44a164..0e9a1cd8 100644 --- a/packages/tiptap-extensions/src/nodes/Mention.js +++ b/packages/tiptap-extensions/src/nodes/Mention.js @@ -45,7 +45,10 @@ export default class BlockquoteNode extends Node { return [ suggestionsPlugin({ debug: true, - matcher: triggerCharacter('@', { allowSpaces: false }), + matcher: triggerCharacter('@', { + allowSpaces: true, + startOfLine: false, + }), onEnter(args) { console.log('start', args); }, diff --git a/packages/tiptap-extensions/src/plugins/suggestions.js b/packages/tiptap-extensions/src/plugins/suggestions.js index dc644b3d..8d85b3fb 100644 --- a/packages/tiptap-extensions/src/plugins/suggestions.js +++ b/packages/tiptap-extensions/src/plugins/suggestions.js @@ -8,16 +8,18 @@ import { Decoration, DecorationSet } from 'prosemirror-view'; * @param {Boolean} allowSpaces * @returns {function(*)} */ -export function triggerCharacter(char, { allowSpaces = false }) { +export function triggerCharacter(char, { allowSpaces = false, startOfLine = false }) { + /** * @param {ResolvedPos} $position */ return $position => { // Matching expressions used for later const suffix = new RegExp(`\\s${char}$`); + const prefix = startOfLine ? '^' : '' const regexp = allowSpaces - ? new RegExp(`${char}.*?(?=\\s${char}|$)`, 'g') - : new RegExp(`(?:^)?${char}[^\\s${char}]*`, 'g'); + ? new RegExp(`${prefix}${char}.*?(?=\\s${char}|$)`, 'g') + : new RegExp(`${prefix}(?:^)?${char}[^\\s${char}]*`, 'g'); // Lookup the boundaries of the current node const textFrom = $position.before();