diff --git a/src/lib/components/RichTextInput.svelte b/src/lib/components/RichTextInput.svelte index 0519bf2..6417f63 100644 --- a/src/lib/components/RichTextInput.svelte +++ b/src/lib/components/RichTextInput.svelte @@ -1,30 +1,14 @@
{@render children?.()}
+ + diff --git a/src/lib/components/RichTextInput/RichTextEditState.svelte.ts b/src/lib/components/RichTextInput/RichTextEditState.svelte.ts deleted file mode 100644 index 6117501..0000000 --- a/src/lib/components/RichTextInput/RichTextEditState.svelte.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { DOMParser, Node, Schema } from 'prosemirror-model'; -import type { EditorState } from 'prosemirror-state'; -import { createEditorState, type EditorConfiguration } from './editorState'; - -export class RichTextEditState { - state: EditorState; - doc: Node | undefined = $state(); - plainText = $state(''); - - constructor( - config: EditorConfiguration, - schema?: Schema, - initialNodeOrPlainText?: Node | string - ) { - if (initialNodeOrPlainText) { - if (typeof initialNodeOrPlainText === 'string') { - this.plainText = initialNodeOrPlainText; - } else { - this.doc = initialNodeOrPlainText; - } - } - - this.state = createEditorState(config, schema); - } -} diff --git a/src/lib/components/RichTextInput/editorState.ts b/src/lib/components/RichTextInput/editorState.ts index 507f3e4..6bc5a5b 100644 --- a/src/lib/components/RichTextInput/editorState.ts +++ b/src/lib/components/RichTextInput/editorState.ts @@ -2,21 +2,23 @@ import { EditorState, type Command } from 'prosemirror-state'; import { history, undo, redo } from 'prosemirror-history'; import { keymap } from 'prosemirror-keymap'; import { baseKeymap } from 'prosemirror-commands'; -import type { Schema } from 'prosemirror-model'; +import type { Schema, Node } from 'prosemirror-model'; -import { messageSchema } from './schema'; - -export type EditorConfiguration = { +export type EditorStateConfiguration = { + initialDoc?: Node | string; + schema: Schema; keyboardSubmitMethod?: 'enter' | 'shiftEnter' | undefined; - onKeyboardSubmit?: () => void; + onKeyboardSubmit?: (doc: Node) => void; }; -export function createEditorState( - { keyboardSubmitMethod, onKeyboardSubmit }: EditorConfiguration, - schema: Schema = messageSchema -) { - const submitCommand: Command = () => { - onKeyboardSubmit?.(); +export function createProseMirrorEditorState({ + keyboardSubmitMethod, + onKeyboardSubmit, + initialDoc, + schema +}: EditorStateConfiguration) { + const submitCommand: Command = (state) => { + onKeyboardSubmit?.(state.doc); return true; }; const newlineCommand: Command = baseKeymap.Enter; @@ -32,15 +34,17 @@ export function createEditorState( } const state = EditorState.create({ + doc: typeof initialDoc === 'string' ? schema.text(initialDoc) : initialDoc, schema, plugins: [ history(), keymap({ 'Mod-z': undo, 'Mod-y': redo, - 'Mod-Shift-z': redo - }), - keymap({ ...baseKeymap, ...submitOrNewlineKeyMap }) + 'Mod-Shift-z': redo, + ...baseKeymap, + ...submitOrNewlineKeyMap + }) ] }); diff --git a/src/lib/components/RichTextInput/keyboardSubmitModule.ts b/src/lib/components/RichTextInput/keyboardSubmitModule.ts deleted file mode 100644 index 59c4251..0000000 --- a/src/lib/components/RichTextInput/keyboardSubmitModule.ts +++ /dev/null @@ -1,15 +0,0 @@ -import type { ModuleInitializer } from 'typewriter-editor'; - -export const keyboardSubmit = function keyboardSubmit( - onSubmit: () => void, - method: 'enter' | 'shiftEnter' -): ModuleInitializer { - return () => ({ - commands: { - keyboardSubmit: onSubmit - }, - shortcuts: { - [method === 'enter' ? 'Enter' : 'Shift+Enter']: 'keyboardSubmit' - } - }); -}; diff --git a/src/lib/components/RichTextInput/schema.ts b/src/lib/components/RichTextInput/schema.ts index a32b499..60aa200 100644 --- a/src/lib/components/RichTextInput/schema.ts +++ b/src/lib/components/RichTextInput/schema.ts @@ -5,7 +5,8 @@ export const messageSchema = new Schema({ nodes: { doc: { content: 'block+' }, paragragh: { - content: 'inline*' + content: 'inline*', + ...basicNodes.paragraph }, text: basicNodes.text }, diff --git a/src/routes/(internal)/_rich-text/+page.svelte b/src/routes/(internal)/_rich-text/+page.svelte index 77958ff..aaaf8ca 100644 --- a/src/routes/(internal)/_rich-text/+page.svelte +++ b/src/routes/(internal)/_rich-text/+page.svelte @@ -1,30 +1,31 @@ - + (doc = newDoc)} class="m-4 max-h-32">

A quick brown fox jumps over the lazy dog.

A test engineer tests the RichTextInput.

-

Delta (Editor's internal representation)

+

ProseMirror doc

-
{JSON.stringify(delta, null, 2)}
+
{JSON.stringify(doc?.toJSON(), null, 2)}

Blah Rich Text

-
{JSON.stringify(brt, null, 2)}
+