From e544c0a801d03bdea1343e2c447748795dfcc131 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?The=20Daniel=20=E2=9A=A1=EF=B8=8F?= Date: Wed, 12 Nov 2025 21:01:06 -0500 Subject: [PATCH] fix: preserve linebreaks between URLs and Nostr references in editor (#657) Co-authored-by: The Daniel --- src/lib/tiptap.ts | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/lib/tiptap.ts b/src/lib/tiptap.ts index 61d5f555..eb7be0e2 100644 --- a/src/lib/tiptap.ts +++ b/src/lib/tiptap.ts @@ -4,12 +4,13 @@ import { JSONContent } from '@tiptap/react' import { nip19 } from 'nostr-tools' export function parseEditorJsonToText(node?: JSONContent) { - const text = _parseEditorJsonToText(node).trim() - const regex = /(?:^|\s|@)(nostr:)?(nevent|naddr|nprofile|npub)1[a-zA-Z0-9]+/g + const text = _parseEditorJsonToText(node) + const regex = /(^|\s+|@)(nostr:)?(nevent|naddr|nprofile|npub)1[a-zA-Z0-9]+/g - return text.replace(regex, (match) => { + return text.replace(regex, (match, leadingWhitespace) => { let bech32 = match.trim() - const leadingSpace = match.startsWith(' ') ? ' ' : '' + const whitespace = leadingWhitespace || '' + if (bech32.startsWith('@nostr:')) { bech32 = bech32.slice(7) } else if (bech32.startsWith('@')) { @@ -20,11 +21,11 @@ export function parseEditorJsonToText(node?: JSONContent) { try { nip19.decode(bech32) - return `${leadingSpace}nostr:${bech32}` + return `${whitespace}nostr:${bech32}` } catch { return match } - }) + }).trim() } function _parseEditorJsonToText(node?: JSONContent): string {