'use client'; import { defaultMarkdownSerializer } from 'prosemirror-markdown'; import { DOMParser, type Node } from 'prosemirror-model'; import { Decoration, DecorationSet, type EditorView } from 'prosemirror-view'; import { renderToString } from 'react-dom/server'; import { Response } from '@/components/elements/response'; import { documentSchema } from './config'; import { createSuggestionWidget, type UISuggestion } from './suggestions'; export const buildDocumentFromContent = (content: string) => { const parser = DOMParser.fromSchema(documentSchema); const stringFromMarkdown = renderToString({content}); const tempContainer = document.createElement('div'); tempContainer.innerHTML = stringFromMarkdown; return parser.parse(tempContainer); }; export const buildContentFromDocument = (document: Node) => { return defaultMarkdownSerializer.serialize(document); }; export const createDecorations = ( suggestions: Array, view: EditorView, ) => { const decorations: Array = []; for (const suggestion of suggestions) { decorations.push( Decoration.inline( suggestion.selectionStart, suggestion.selectionEnd, { class: 'suggestion-highlight', }, { suggestionId: suggestion.id, type: 'highlight', }, ), ); decorations.push( Decoration.widget( suggestion.selectionStart, (view) => { const { dom } = createSuggestionWidget(suggestion, view); return dom; }, { suggestionId: suggestion.id, type: 'widget', }, ), ); } return DecorationSet.create(view.state.doc, decorations); };