From 5d4d84bdede371bdcab42949ff774b05782d951d Mon Sep 17 00:00:00 2001 From: Abdullah Atta Date: Thu, 22 May 2025 10:25:17 +0500 Subject: [PATCH] editor: add support for nn-search-result node --- .../extensions/search-result/search-result.ts | 36 +++++++++++++++++++ packages/editor/src/index.ts | 4 ++- packages/editor/styles/styles.css | 3 +- 3 files changed, 41 insertions(+), 2 deletions(-) create mode 100644 packages/editor/src/extensions/search-result/search-result.ts diff --git a/packages/editor/src/extensions/search-result/search-result.ts b/packages/editor/src/extensions/search-result/search-result.ts new file mode 100644 index 000000000..5ecc8cc71 --- /dev/null +++ b/packages/editor/src/extensions/search-result/search-result.ts @@ -0,0 +1,36 @@ +/* +This file is part of the Notesnook project (https://notesnook.com/) + +Copyright (C) 2023 Streetwriters (Private) Limited + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +import { Mark, mergeAttributes } from "@tiptap/core"; + +export const SearchResult = Mark.create({ + name: "search-result", + + parseHTML() { + return [{ tag: "nn-search-result" }]; + }, + + renderHTML({ HTMLAttributes }) { + return [ + "nn-search-result", + mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), + 0 + ]; + } +}); diff --git a/packages/editor/src/index.ts b/packages/editor/src/index.ts index 9974062f6..29f6ac8fa 100644 --- a/packages/editor/src/index.ts +++ b/packages/editor/src/index.ts @@ -86,6 +86,7 @@ import { getChangedNodes } from "./utils/prosemirror.js"; import { strings } from "@notesnook/intl"; import { InlineCode } from "./extensions/inline-code/inline-code.js"; import { FontLigature } from "./extensions/font-ligature/font-ligature.js"; +import { SearchResult } from "./extensions/search-result/search-result.js"; interface TiptapStorage { dateFormat?: DateTimeOptions["dateFormat"]; @@ -362,7 +363,8 @@ const useTiptap = ( } ] }), - FontLigature.configure({ enabled: enableFontLigatures }) + FontLigature.configure({ enabled: enableFontLigatures }), + SearchResult.configure() ], onBeforeCreate: ({ editor }) => { editor.storage.dateFormat = dateFormat; diff --git a/packages/editor/styles/styles.css b/packages/editor/styles/styles.css index f8ca9d35b..f811710c6 100644 --- a/packages/editor/styles/styles.css +++ b/packages/editor/styles/styles.css @@ -299,7 +299,8 @@ img.ProseMirror-separator { } .search-result.selected, -.search-result.selected::selection { +.search-result.selected::selection, +nn-search-result { background-color: var(--accent-secondary) !important; color: var(--accentForeground-secondary) !important; }