본문 내용으로 건너뛰기

핵심 개념

블록 모델

EditorData의 핵심은 blocks 배열입니다: 순서를 유지하는 Block 객체들. 각 Block은 타입, 타입별 데이터, 그리고 선택적 tunes 메타데이터를 포함합니다.

필드타입설명
idstring | undefined선택적 고유 식별자. 생성 시 editor에 의해 할당됩니다.
typeBlockToolType블록을 스키마, 입력 컴포넌트 및 렌더러에 연결하는 리터럴 키.
dataobject타입별 데이터 객체: 블록 타입마다 형태가 다릅니다.
tunesBlockTunes | undefined선택적인 크로스-타입 tune 메타데이터 딕셔너리. 키는 tune 이름이고 값은 자유 형식 데이터입니다.
JSON
{
  "time": 1745000000000,
  "version": "1.0.0",
  "blocks": [
    {
      "id": "abc123",
      "type": "header",
      "data": { "html": "Hello world", "level": "h1" }
    },
    {
      "id": "def456",
      "type": "paragraph",
      "data": { "html": "This is a <b>rich</b> paragraph." }
    }
  ]
}

블록 도구 vs 인라인 도구

블록 도구는 EditorData 내부에 직접 최상위 슬롯을 만듭니다. 인라인 도구는 블록이 포함하는 html 페이로드 안에서 텍스트를 꾸밉니다. 두 레이어는 완전히 분리되어 있으며, 서로 대체할 수 없습니다.

JSON 우선 출력

에디터는 HTML을 절대 지속 저장하지 않습니다. editor.data.extract()를 호출하면 미디어 URL을 포함한 완전한 순수 EditorData JSON을 얻습니다. 이 JSON은 데이터베이스에 저장하거나, 개인화하거나, 다른 형식으로 변환할 수 있습니다.

TypeScript
import { Editor } from '@clepit/core';

const editor = Editor.create({ containerId: 'editor' });

const data = editor.data.extract();
// data: EditorData
// {
//   time: 1745000000000,
//   version: '1.0.0',
//   blocks: [ ... ]
// }

Editor vs Renderer

Editor는 사용자가 콘텐츠를 편집할 수 있도록 브라우저 DOM을 사용합니다(브라우저 전용). Renderer는 이전에 저장된 EditorData를 가져와 HTML로 렌더링합니다(브라우저 또는 SSR에서 실행할 수 있습니다).

블록 tunes

Tunes는 모든 블록 타입에 대한 타입 무관 메타데이터 슬롯입니다. 키는 시스템이나 플러그인이 설정한 tune 이름이고, 값은 BlockTuneData로 타입됩니다: string, number, boolean 또는 null의 임의 조합. Tunes는 핵심 데이터 형태를 변경하지 않고 의미를 추가할 수 있습니다.

JSON
{
  "id": "abc123",
  "type": "paragraph",
  "data": { "html": "Some text." },
  "tunes": {
    "textAlign": { "alignment": "center" },
    "visibility": { "hidden": false }
  }
}