본문으로 건너뛰기

Core

@edybara/core 패키지는 에디터의 기초 서식과 스타일, 그리고 기본 동작을 위한 플러그인을 제공합니다. Edybara 을 사용하기 위해선 필수로 설치해야 합니다.

설치

npm install @edybara/core

스타일

src/index.scss
@import "@edybara/core/styles/core.scss";

서식

edybaraBaseNodes

문서 루트에 해당하는 doc 노드와 인라인 텍스트에 해당하는 text 노드를 제공합니다. ProseMirror 가 동작하기 위해선 doc, text 노드와 최소한 한개의 블록 노드를 함께 선언해 사용해야 합니다.

플러그인

edybaraCorePlugins

하단의 모든 플러그인을 통합 제공합니다.

edybaraBasicKeymapPlugins

에디터에서 서식에 의존하지 않는 기본 단축키(Enter, Backspace 등) 기능을 제공합니다.

edybaraHistoryPlugins

에디터의 기본적인 히스토리 기능과 단축키(Mod-z, Shift-Mod-Z) 기능을 제공합니다. 자세한 사항은 prosemirror-history를 참고하세요.

edybaraVirtualCursorPlugins

Mark 사이를 키보드의 방향키를 통해 이동할 때 가상의 커서를 제공합니다.

edybaraResetMarkPlugins

Mark 가 적용된 텍스트가 모두 지워지면 Mark 를 자동으로 해제하는 기능을 제공합니다.

edybaraDropCursorPlugins

에디터의 콘텐츠를 드래그&드롭 할 때 드롭되는 위치에 가상의 커서를 표시합니다. 자세한 사항은 prosemirror-dropcursor를 참고하세요.

edybaraGapCursorPlugins

일반적으로 커서가 위치할 수 없는 블록 노드 사이에 가상의 커서를 생성합니다. 자세한 사항은 prosemirror-gapcursor를 참고하세요.

edybaraMergeAdjacentNodePlugins

인접한 블록 레벨의 노드를 자동으로 병합하는 기능을 제공합니다. edybaraCorePlugins 에 포함되어 있지 않습니다.

사용 예시

src/index.ts
import { EditorState, Plugin } from 'prosemirror-state';
import { Schema } from 'prosemirror-model';
import { EditorView } from 'prosemirror-view';
import { edybaraBaseNodes, edybaraCorePlugins } from '@edybara/core';
import { edybaraParagraphNodes, edybaraParagraphPlugins, } from '@edybara/paragraph';
import { edybaraBaseNodes, edybaraCorePlugins, edybaraBasicKeymapPlugins, edybaraDropCursorPlugins, edybaraGapCursorPlugins, edybaraHistoryPlugins, edybaraVirtualCursorPlugins } from '@edybara/core';
import { edybaraParagraphNodes, edybaraParagraphPlugins } from '@edybara/paragraph';

const schema = new Schema({
nodes: {
...edybaraBaseNodes(),
...edybaraParagraphNodes(),
},
});

const plugins: Plugin[] = [
...edybaraParagraphPlugins({
nodeType: schema.nodes['paragraph'],
}),
...edybaraCorePlugins(),
// ...edybaraBasicKeymapPlugins(),
// ...edybaraHistoryPlugins(),
// ...edybaraVirtualCursorPlugins(),
// ...edybaraDropCursorPlugins(),
// ...edybaraGapCursorPlugins(),
];

const view = new EditorView(document.querySelector('#editor'), {
state: EditorState.create({
schema: schema,
plugins: plugins,
}),
});