@moda-editor/core 0.2.3 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/collab.d.ts.map +1 -1
- package/dist/collab.js +14 -18
- package/dist/collab.js.map +1 -1
- package/dist/commands.d.ts.map +1 -1
- package/dist/commands.js +24 -4
- package/dist/commands.js.map +1 -1
- package/dist/conformance/editor-base.d.ts.map +1 -1
- package/dist/conformance/editor-base.js +57 -0
- package/dist/conformance/editor-base.js.map +1 -1
- package/dist/conformance/editor-ime.d.ts.map +1 -1
- package/dist/conformance/editor-ime.js +78 -0
- package/dist/conformance/editor-ime.js.map +1 -1
- package/dist/conformance/fixtures.d.ts +2 -2
- package/dist/conformance/fixtures.d.ts.map +1 -1
- package/dist/conformance/fixtures.js +6 -2
- package/dist/conformance/fixtures.js.map +1 -1
- package/dist/editor/dev.d.ts +7 -0
- package/dist/editor/dev.d.ts.map +1 -0
- package/dist/editor/dev.js +9 -0
- package/dist/editor/dev.js.map +1 -0
- package/dist/editor/editor.d.ts +120 -3
- package/dist/editor/editor.d.ts.map +1 -1
- package/dist/editor/editor.js +133 -27
- package/dist/editor/editor.js.map +1 -1
- package/dist/features/block-dnd.d.ts.map +1 -1
- package/dist/features/block-dnd.js +4 -1
- package/dist/features/block-dnd.js.map +1 -1
- package/dist/features/code-block.d.ts.map +1 -1
- package/dist/features/code-block.js +17 -12
- package/dist/features/code-block.js.map +1 -1
- package/dist/features/image.d.ts.map +1 -1
- package/dist/features/image.js +3 -1
- package/dist/features/image.js.map +1 -1
- package/dist/features/markdown.d.ts.map +1 -1
- package/dist/features/markdown.js +4 -9
- package/dist/features/markdown.js.map +1 -1
- package/dist/features/search.d.ts.map +1 -1
- package/dist/features/search.js +9 -19
- package/dist/features/search.js.map +1 -1
- package/dist/features/table.d.ts.map +1 -1
- package/dist/features/table.js +3 -1
- package/dist/features/table.js.map +1 -1
- package/dist/history.d.ts.map +1 -1
- package/dist/history.js +3 -0
- package/dist/history.js.map +1 -1
- package/dist/index.d.ts +10 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -6
- package/dist/index.js.map +1 -1
- package/dist/model/node.d.ts +14 -0
- package/dist/model/node.d.ts.map +1 -1
- package/dist/model/node.js +67 -0
- package/dist/model/node.js.map +1 -1
- package/dist/model/schema.d.ts +8 -1
- package/dist/model/schema.d.ts.map +1 -1
- package/dist/model/schema.js +29 -0
- package/dist/model/schema.js.map +1 -1
- package/dist/model/traverse.d.ts +4 -0
- package/dist/model/traverse.d.ts.map +1 -1
- package/dist/model/traverse.js +10 -0
- package/dist/model/traverse.js.map +1 -1
- package/dist/presets/starter.d.ts +13 -0
- package/dist/presets/starter.d.ts.map +1 -1
- package/dist/presets/starter.js +9 -1
- package/dist/presets/starter.js.map +1 -1
- package/dist/state/apply.d.ts.map +1 -1
- package/dist/state/apply.js +42 -11
- package/dist/state/apply.js.map +1 -1
- package/dist/state/resolve-insert.d.ts.map +1 -1
- package/dist/state/resolve-insert.js +5 -2
- package/dist/state/resolve-insert.js.map +1 -1
- package/dist/state/slice-ops.js +16 -9
- package/dist/state/slice-ops.js.map +1 -1
- package/dist/state/transaction.d.ts +18 -1
- package/dist/state/transaction.d.ts.map +1 -1
- package/dist/state/transaction.js +27 -2
- package/dist/state/transaction.js.map +1 -1
- package/dist/styles.css +316 -84
- package/dist/theme.d.ts.map +1 -1
- package/dist/theme.js +10 -0
- package/dist/theme.js.map +1 -1
- package/dist/view/highlight-registry.d.ts +22 -0
- package/dist/view/highlight-registry.d.ts.map +1 -0
- package/dist/view/highlight-registry.js +73 -0
- package/dist/view/highlight-registry.js.map +1 -0
- package/dist/view/ime.d.ts.map +1 -1
- package/dist/view/ime.js +37 -3
- package/dist/view/ime.js.map +1 -1
- package/dist/view/input.d.ts.map +1 -1
- package/dist/view/input.js +21 -3
- package/dist/view/input.js.map +1 -1
- package/dist/view/mount.d.ts +5 -0
- package/dist/view/mount.d.ts.map +1 -1
- package/dist/view/mount.js +19 -1
- package/dist/view/mount.js.map +1 -1
- package/dist/view/node-selection.d.ts.map +1 -1
- package/dist/view/node-selection.js +9 -2
- package/dist/view/node-selection.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -4,21 +4,23 @@ export { mountWidget } from "./mount.js";
|
|
|
4
4
|
export type { MountedWidget, MountWidgetOptions } from "./mount.js";
|
|
5
5
|
export type { WidgetCoreOptions, WidgetEventHandlers, WidgetEventMap, WidgetEventType, WidgetSnapshot, RowData, } from "./types.js";
|
|
6
6
|
export type { Attrs, DocNode, EditorNode, Mark } from "./model/node.js";
|
|
7
|
-
export { createDoc, createText, isLeaf, isTextNode } from "./model/node.js";
|
|
7
|
+
export { attrsJsonEqual, createDoc, createText, docJsonEqual, isLeaf, isTextNode, marksJsonEqual, } from "./model/node.js";
|
|
8
8
|
export type { AttrSpec, DOMSpec, MarkSpec, NodeSpec, ParseRule, Schema, SchemaSpec, } from "./model/schema.js";
|
|
9
|
-
export { createSchema } from "./model/schema.js";
|
|
10
|
-
export { firstTextPath, lastTextPath, nodeAt } from "./model/traverse.js";
|
|
9
|
+
export { createSchema, normalizeDoc } from "./model/schema.js";
|
|
10
|
+
export { docText, firstTextPath, lastTextPath, nodeAt, textOfNode, } from "./model/traverse.js";
|
|
11
11
|
export { applyStep, computeSplitOps, coveredOffsets, leafPoint, mapPoint, marksEq, resolveMarkPoint, } from "./state/apply.js";
|
|
12
12
|
export type { SplitOp } from "./state/apply.js";
|
|
13
13
|
export type { NodeSelection, Point, Range, Selection, TextSelection, } from "./state/selection.js";
|
|
14
14
|
export { isCollapsed, nodeSelection, normalizedRange, point, pointCmp, pointEq, selectionEq, textSelection, } from "./state/selection.js";
|
|
15
|
-
export type { AddMarkStep, InsertStep, JoinStep, RemoveMarkStep, RemoveStep, SetAttrStep, SplitStep, Step, Transaction, } from "./state/transaction.js";
|
|
15
|
+
export type { AddMarkStep, InsertStep, JoinStep, RemoveMarkStep, RemoveStep, ReplaceDocStep, SetAttrStep, SplitStep, Step, Transaction, } from "./state/transaction.js";
|
|
16
16
|
export type { CreateStateOptions, EditorState, EditorStateConfig, } from "./state/state.js";
|
|
17
17
|
export { createState } from "./state/state.js";
|
|
18
18
|
export { defaultBlockTypeOf } from "./state/list-ops.js";
|
|
19
19
|
export type { BlockTextCtx, Command, CommandContext, Decoration, DecorationAttrs, Extension, FileDropCtx, InputHooks, InputRule, Keymap, PasteData, Plugin, RangeCtx, } from "./editor/extension.js";
|
|
20
|
-
export type { Editor, EditorEventHandlers, EditorEventMap, EditorEventType, EditorOptions, } from "./editor/editor.js";
|
|
21
|
-
export { createEditor } from "./editor/editor.js";
|
|
20
|
+
export type { Editor, EditorEventHandlers, EditorEventMap, EditorEventType, EditorOptions, SetDocOptions, } from "./editor/editor.js";
|
|
21
|
+
export { createEditor, schemaFromExtensions } from "./editor/editor.js";
|
|
22
|
+
export type { CommandFn, CommandRegistry, StarterCommands, } from "./editor/editor.js";
|
|
23
|
+
export type { StarterCommandName } from "./presets/starter.js";
|
|
22
24
|
export type { NodeViewProps, RenderNode } from "./view/render.js";
|
|
23
25
|
export { nodeViewEditable, nodeViewFor, renderChildren, } from "./view/render.js";
|
|
24
26
|
export { bindEditorInput } from "./view/input.js";
|
|
@@ -39,11 +41,11 @@ export { pointAfter, pointBefore } from "./state/navigate.js";
|
|
|
39
41
|
export { historyExtension, historyOf, invertStep, invertSteps, } from "./history.js";
|
|
40
42
|
export type { HistoryEntry, HistoryState } from "./history.js";
|
|
41
43
|
export type { Feature } from "./features/index.js";
|
|
42
|
-
export { aceFeature, alignmentFeature, blockquoteFeature, codeBlockFeature, defineFeature, docFeature, hardBreakFeature, headingFeature, horizontalRuleFeature, imageFeature, inlineStyleFeature, linkFeature, listsFeature, marksFeature, mentionFeature, scriptFeature, searchFeature, starterFeatures, tableFeature, taskListFeature, } from "./features/index.js";
|
|
44
|
+
export { aceFeature, alignmentFeature, blockDndFeature, blockquoteFeature, codeBlockFeature, defineFeature, docFeature, hardBreakFeature, headingFeature, horizontalRuleFeature, imageFeature, inlineStyleFeature, linkFeature, listsFeature, markdownFeature, marksFeature, mentionFeature, scriptFeature, searchFeature, starterFeatures, tableFeature, taskListFeature, } from "./features/index.js";
|
|
43
45
|
export { alignDOM, blockRule, blockText, blockTextOffset, blockTextPoint, caretBlockPath, isBlockActive, isInNode, isMarkActive, itemContext, markRule, rangeHasMark, samePath, setBlockType, toggleMark, wrapBlock, } from "./commands.js";
|
|
44
46
|
export type { SearchMatch, SearchState } from "./features/search.js";
|
|
45
47
|
export { collectMatches, searchStateOf, SEARCH_KEY, } from "./features/search.js";
|
|
46
|
-
export { addTableColumn, addTableRow, canRedo, canUndo, clearFormat, codeBracketAt, codeCaret, codeTextAt, dedentCode, deleteTable, duplicateCodeLines, exitBlock, exitCodeArrow, indentCode, clearSearch, findNext, findPrev, insertHardBreak, insertHorizontalRule, insertImage, insertMention, insertTable, liftListItem, liftOnItemBackspace, linkHrefAt, linkRangeAt, moveCodeLines, nextCell, prevCell, replaceAll, replaceNext, setAlign, formatCode, formatCodeAt, formatCodeText, setCodeLanguage, setCodeLanguageAt, setLink, setMarkAttr, setSearch, sinkListItem, splitBlock, starterExtensions, toggleCodeBlock, toggleCodeComment, toggleList, toggleQuote, toggleTaskItem, unsetLink, } from "./presets/starter.js";
|
|
48
|
+
export { addTableColumn, addTableRow, canRedo, canUndo, clearFormat, codeBracketAt, codeCaret, codeTextAt, dedentCode, deleteImage, deleteTable, deleteTableColumn, deleteTableRow, duplicateCodeLines, exitBlock, exitCodeArrow, fileToDataUrl, indentCode, clearSearch, findNext, findPrev, insertHardBreak, insertHorizontalRule, insertImage, insertMention, insertTable, liftListItem, liftOnItemBackspace, linkHrefAt, linkRangeAt, moveCodeLines, nextCell, prevCell, replaceAll, replaceNext, setAlign, formatCode, formatCodeAt, formatCodeText, setCodeLanguage, setCodeLanguageAt, setLink, setMarkAttr, setSearch, setTableColWidths, sinkListItem, splitBlock, starterExtensions, starterSchema, toggleCodeBlock, toggleCodeComment, toggleList, toggleQuote, toggleTaskItem, unsetLink, updateImage, } from "./presets/starter.js";
|
|
47
49
|
export { highlightCode } from "./presets/highlight.js";
|
|
48
50
|
export { CODE_LANG_OPTIONS, codeLangOptions } from "./presets/highlight.js";
|
|
49
51
|
export type { CodeHighlighter, CodeToken } from "./presets/highlight.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,YAAY,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,YAAY,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AACpE,YAAY,EACV,iBAAiB,EACjB,mBAAmB,EACnB,cAAc,EACd,eAAe,EACf,cAAc,EACd,OAAO,GACR,MAAM,YAAY,CAAC;AAGpB,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACxE,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
// ── 템플릿 예시 (골든 패스 레퍼런스) — 에디터 뷰로 교체 예정 ──
|
|
2
2
|
export { WidgetCore } from "./core.js";
|
|
3
3
|
export { mountWidget } from "./mount.js";
|
|
4
|
-
export { createDoc, createText, isLeaf, isTextNode } from "./model/node.js";
|
|
5
|
-
export { createSchema } from "./model/schema.js";
|
|
4
|
+
export { attrsJsonEqual, createDoc, createText, docJsonEqual, isLeaf, isTextNode, marksJsonEqual, } from "./model/node.js";
|
|
5
|
+
export { createSchema, normalizeDoc } from "./model/schema.js";
|
|
6
6
|
// ── 상태 계층: 셀렉션/트랜잭션/에디터 상태 ───────────────────
|
|
7
|
-
export { firstTextPath, lastTextPath, nodeAt } from "./model/traverse.js";
|
|
7
|
+
export { docText, firstTextPath, lastTextPath, nodeAt, textOfNode, } from "./model/traverse.js";
|
|
8
8
|
export { applyStep, computeSplitOps, coveredOffsets, leafPoint, mapPoint, marksEq, resolveMarkPoint, } from "./state/apply.js";
|
|
9
9
|
export { isCollapsed, nodeSelection, normalizedRange, point, pointCmp, pointEq, selectionEq, textSelection, } from "./state/selection.js";
|
|
10
10
|
export { createState } from "./state/state.js";
|
|
11
11
|
export { defaultBlockTypeOf } from "./state/list-ops.js";
|
|
12
|
-
export { createEditor } from "./editor/editor.js";
|
|
12
|
+
export { createEditor, schemaFromExtensions } from "./editor/editor.js";
|
|
13
13
|
export { nodeViewEditable, nodeViewFor, renderChildren, } from "./view/render.js";
|
|
14
14
|
export { bindEditorInput } from "./view/input.js";
|
|
15
15
|
export { DirtyKeyMap } from "./view/dirty-keys.js";
|
|
@@ -28,12 +28,12 @@ export { sanitizeHTML, isSafeUrl } from "./parse/sanitize.js";
|
|
|
28
28
|
export { pointAfter, pointBefore } from "./state/navigate.js";
|
|
29
29
|
// ── 히스토리 ────────────────────────────────────────────────
|
|
30
30
|
export { historyExtension, historyOf, invertStep, invertSteps, } from "./history.js";
|
|
31
|
-
export { aceFeature, alignmentFeature, blockquoteFeature, codeBlockFeature, defineFeature, docFeature, hardBreakFeature, headingFeature, horizontalRuleFeature, imageFeature, inlineStyleFeature, linkFeature, listsFeature, marksFeature, mentionFeature, scriptFeature, searchFeature, starterFeatures, tableFeature, taskListFeature, } from "./features/index.js";
|
|
31
|
+
export { aceFeature, alignmentFeature, blockDndFeature, blockquoteFeature, codeBlockFeature, defineFeature, docFeature, hardBreakFeature, headingFeature, horizontalRuleFeature, imageFeature, inlineStyleFeature, linkFeature, listsFeature, markdownFeature, marksFeature, mentionFeature, scriptFeature, searchFeature, starterFeatures, tableFeature, taskListFeature, } from "./features/index.js";
|
|
32
32
|
// ── 기능 제작 툴킷 — 커맨드·캐럿 해석·입력 규칙 팩토리 ─────────
|
|
33
33
|
export { alignDOM, blockRule, blockText, blockTextOffset, blockTextPoint, caretBlockPath, isBlockActive, isInNode, isMarkActive, itemContext, markRule, rangeHasMark, samePath, setBlockType, toggleMark, wrapBlock, } from "./commands.js";
|
|
34
34
|
export { collectMatches, searchStateOf, SEARCH_KEY, } from "./features/search.js";
|
|
35
35
|
// ── 프리셋 ──────────────────────────────────────────────────
|
|
36
|
-
export { addTableColumn, addTableRow, canRedo, canUndo, clearFormat, codeBracketAt, codeCaret, codeTextAt, dedentCode, deleteTable, duplicateCodeLines, exitBlock, exitCodeArrow, indentCode, clearSearch, findNext, findPrev, insertHardBreak, insertHorizontalRule, insertImage, insertMention, insertTable, liftListItem, liftOnItemBackspace, linkHrefAt, linkRangeAt, moveCodeLines, nextCell, prevCell, replaceAll, replaceNext, setAlign, formatCode, formatCodeAt, formatCodeText, setCodeLanguage, setCodeLanguageAt, setLink, setMarkAttr, setSearch, sinkListItem, splitBlock, starterExtensions, toggleCodeBlock, toggleCodeComment, toggleList, toggleQuote, toggleTaskItem, unsetLink, } from "./presets/starter.js";
|
|
36
|
+
export { addTableColumn, addTableRow, canRedo, canUndo, clearFormat, codeBracketAt, codeCaret, codeTextAt, dedentCode, deleteImage, deleteTable, deleteTableColumn, deleteTableRow, duplicateCodeLines, exitBlock, exitCodeArrow, fileToDataUrl, indentCode, clearSearch, findNext, findPrev, insertHardBreak, insertHorizontalRule, insertImage, insertMention, insertTable, liftListItem, liftOnItemBackspace, linkHrefAt, linkRangeAt, moveCodeLines, nextCell, prevCell, replaceAll, replaceNext, setAlign, formatCode, formatCodeAt, formatCodeText, setCodeLanguage, setCodeLanguageAt, setLink, setMarkAttr, setSearch, setTableColWidths, sinkListItem, splitBlock, starterExtensions, starterSchema, toggleCodeBlock, toggleCodeComment, toggleList, toggleQuote, toggleTaskItem, unsetLink, updateImage, } from "./presets/starter.js";
|
|
37
37
|
export { highlightCode } from "./presets/highlight.js";
|
|
38
38
|
export { CODE_LANG_OPTIONS, codeLangOptions } from "./presets/highlight.js";
|
|
39
39
|
export { serializeToMarkdown } from "./presets/markdown.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,2CAA2C;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAazC,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/model/node.d.ts
CHANGED
|
@@ -44,4 +44,18 @@ export declare function isLeaf(node: EditorNode): boolean;
|
|
|
44
44
|
export declare function childCount(node: EditorNode): number;
|
|
45
45
|
export declare function createDoc(content?: readonly EditorNode[]): DocNode;
|
|
46
46
|
export declare function createText(text: string, marks?: readonly Mark[]): EditorNode;
|
|
47
|
+
/**
|
|
48
|
+
* 두 doc/노드가 의미상 같은가 — 키 순서·표현 차이를 무시한 깊은 비교.
|
|
49
|
+
* `JSON.stringify` 비교는 false 부정이 난다: Y 미러 측은 attrs/marks를
|
|
50
|
+
* 키 정렬로 읽고 atom의 content 표현도 달라질 수 있어, 같은 문서도
|
|
51
|
+
* "다르다"로 판정된다.
|
|
52
|
+
* - attrs: 키 순서 무시 + 값은 깊은 비교 (undefined 키는 없는 것과 동일)
|
|
53
|
+
* - marks: 마크는 순서 무관한 집합 — type+attrs 쌍으로 비교
|
|
54
|
+
* - content/marks/attrs: []와 부재를 동일시
|
|
55
|
+
*/
|
|
56
|
+
export declare function docJsonEqual(a: DocNode | EditorNode, b: DocNode | EditorNode): boolean;
|
|
57
|
+
/** attrs 비교 — 키 순서 무관, undefined 값은 없는 키와 동일 */
|
|
58
|
+
export declare function attrsJsonEqual(a: Record<string, unknown> | undefined, b: Record<string, unknown> | undefined): boolean;
|
|
59
|
+
/** 마크 배열 비교 — 같은 type+attrs 쌍의 집합이면 순서는 무시한다 */
|
|
60
|
+
export declare function marksJsonEqual(a: readonly Mark[] | undefined, b: readonly Mark[] | undefined): boolean;
|
|
47
61
|
//# sourceMappingURL=node.d.ts.map
|
package/dist/model/node.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../src/model/node.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,2CAA2C;AAC3C,MAAM,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE5C,8CAA8C;AAC9C,MAAM,WAAW,IAAI;IACnB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC;CACxB;AAED;;;;;GAKG;AACH,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC;IACvB,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,UAAU,EAAE,CAAC;IACzC,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,IAAI,EAAE,CAAC;IACjC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;GAGG;AACH,MAAM,WAAW,OAAQ,SAAQ,UAAU;IACzC,QAAQ,CAAC,OAAO,EAAE,SAAS,UAAU,EAAE,CAAC;CACzC;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAEpD;AAED,wBAAgB,MAAM,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAEhD;AAED,mBAAmB;AACnB,wBAAgB,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAEnD;AAED,wBAAgB,SAAS,CAAC,OAAO,GAAE,SAAS,UAAU,EAAO,GAAG,OAAO,CAEtE;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,SAAS,IAAI,EAAE,GAAG,UAAU,CAE5E"}
|
|
1
|
+
{"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../src/model/node.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,2CAA2C;AAC3C,MAAM,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE5C,8CAA8C;AAC9C,MAAM,WAAW,IAAI;IACnB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC;CACxB;AAED;;;;;GAKG;AACH,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC;IACvB,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,UAAU,EAAE,CAAC;IACzC,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,IAAI,EAAE,CAAC;IACjC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;GAGG;AACH,MAAM,WAAW,OAAQ,SAAQ,UAAU;IACzC,QAAQ,CAAC,OAAO,EAAE,SAAS,UAAU,EAAE,CAAC;CACzC;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAEpD;AAED,wBAAgB,MAAM,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAEhD;AAED,mBAAmB;AACnB,wBAAgB,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAEnD;AAED,wBAAgB,SAAS,CAAC,OAAO,GAAE,SAAS,UAAU,EAAO,GAAG,OAAO,CAEtE;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,SAAS,IAAI,EAAE,GAAG,UAAU,CAE5E;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAC1B,CAAC,EAAE,OAAO,GAAG,UAAU,EACvB,CAAC,EAAE,OAAO,GAAG,UAAU,GACtB,OAAO,CAWT;AAED,gDAAgD;AAChD,wBAAgB,cAAc,CAC5B,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EACtC,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GACrC,OAAO,CAKT;AAwBD,gDAAgD;AAChD,wBAAgB,cAAc,CAC5B,CAAC,EAAE,SAAS,IAAI,EAAE,GAAG,SAAS,EAC9B,CAAC,EAAE,SAAS,IAAI,EAAE,GAAG,SAAS,GAC7B,OAAO,CAaT"}
|
package/dist/model/node.js
CHANGED
|
@@ -27,4 +27,71 @@ export function createDoc(content = []) {
|
|
|
27
27
|
export function createText(text, marks) {
|
|
28
28
|
return marks?.length ? { type: "text", text, marks } : { type: "text", text };
|
|
29
29
|
}
|
|
30
|
+
/**
|
|
31
|
+
* 두 doc/노드가 의미상 같은가 — 키 순서·표현 차이를 무시한 깊은 비교.
|
|
32
|
+
* `JSON.stringify` 비교는 false 부정이 난다: Y 미러 측은 attrs/marks를
|
|
33
|
+
* 키 정렬로 읽고 atom의 content 표현도 달라질 수 있어, 같은 문서도
|
|
34
|
+
* "다르다"로 판정된다.
|
|
35
|
+
* - attrs: 키 순서 무시 + 값은 깊은 비교 (undefined 키는 없는 것과 동일)
|
|
36
|
+
* - marks: 마크는 순서 무관한 집합 — type+attrs 쌍으로 비교
|
|
37
|
+
* - content/marks/attrs: []와 부재를 동일시
|
|
38
|
+
*/
|
|
39
|
+
export function docJsonEqual(a, b) {
|
|
40
|
+
if (a.type !== b.type)
|
|
41
|
+
return false;
|
|
42
|
+
if ((a.text ?? "") !== (b.text ?? ""))
|
|
43
|
+
return false;
|
|
44
|
+
if (!attrsJsonEqual(a.attrs, b.attrs))
|
|
45
|
+
return false;
|
|
46
|
+
const ac = a.content ?? [];
|
|
47
|
+
const bc = b.content ?? [];
|
|
48
|
+
if (ac.length !== bc.length)
|
|
49
|
+
return false;
|
|
50
|
+
for (let i = 0; i < ac.length; i++) {
|
|
51
|
+
if (!docJsonEqual(ac[i], bc[i]))
|
|
52
|
+
return false;
|
|
53
|
+
}
|
|
54
|
+
return marksJsonEqual(a.marks, b.marks);
|
|
55
|
+
}
|
|
56
|
+
/** attrs 비교 — 키 순서 무관, undefined 값은 없는 키와 동일 */
|
|
57
|
+
export function attrsJsonEqual(a, b) {
|
|
58
|
+
const ak = Object.keys(a ?? {}).filter((k) => a[k] !== undefined);
|
|
59
|
+
const bk = Object.keys(b ?? {}).filter((k) => b[k] !== undefined);
|
|
60
|
+
if (ak.length !== bk.length)
|
|
61
|
+
return false;
|
|
62
|
+
return ak.every((k) => bk.includes(k) && jsonValueEqual(a[k], b[k]));
|
|
63
|
+
}
|
|
64
|
+
/** JSON 값 깊은 비교 — 객체 키 순서 무시 */
|
|
65
|
+
function jsonValueEqual(a, b) {
|
|
66
|
+
if (a === b)
|
|
67
|
+
return true;
|
|
68
|
+
if (!a || !b || typeof a !== "object" || typeof b !== "object") {
|
|
69
|
+
return false;
|
|
70
|
+
}
|
|
71
|
+
const aArr = Array.isArray(a);
|
|
72
|
+
if (aArr !== Array.isArray(b))
|
|
73
|
+
return false;
|
|
74
|
+
if (aArr) {
|
|
75
|
+
const aa = a;
|
|
76
|
+
const bb = b;
|
|
77
|
+
return (aa.length === bb.length &&
|
|
78
|
+
aa.every((v, i) => jsonValueEqual(v, bb[i])));
|
|
79
|
+
}
|
|
80
|
+
return attrsJsonEqual(a, b);
|
|
81
|
+
}
|
|
82
|
+
/** 마크 배열 비교 — 같은 type+attrs 쌍의 집합이면 순서는 무시한다 */
|
|
83
|
+
export function marksJsonEqual(a, b) {
|
|
84
|
+
const am = a ?? [];
|
|
85
|
+
const bm = b ?? [];
|
|
86
|
+
if (am.length !== bm.length)
|
|
87
|
+
return false;
|
|
88
|
+
const rest = [...bm];
|
|
89
|
+
return am.every((m) => {
|
|
90
|
+
const i = rest.findIndex((x) => x.type === m.type && attrsJsonEqual(x.attrs, m.attrs));
|
|
91
|
+
if (i < 0)
|
|
92
|
+
return false;
|
|
93
|
+
rest.splice(i, 1);
|
|
94
|
+
return true;
|
|
95
|
+
});
|
|
96
|
+
}
|
|
30
97
|
//# sourceMappingURL=node.js.map
|
package/dist/model/node.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node.js","sourceRoot":"","sources":["../../src/model/node.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAiCH,MAAM,UAAU,UAAU,CAAC,IAAgB;IACzC,OAAO,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,IAAgB;IACrC,OAAO,IAAI,CAAC,OAAO,IAAI,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC;AAC3D,CAAC;AAED,mBAAmB;AACnB,MAAM,UAAU,UAAU,CAAC,IAAgB;IACzC,OAAO,IAAI,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,UAAiC,EAAE;IAC3D,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAY,EAAE,KAAuB;IAC9D,OAAO,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;AAChF,CAAC"}
|
|
1
|
+
{"version":3,"file":"node.js","sourceRoot":"","sources":["../../src/model/node.ts"],"names":[],"mappings":"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"}
|
package/dist/model/schema.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Attrs, EditorNode, Mark } from "./node.js";
|
|
1
|
+
import type { Attrs, DocNode, EditorNode, Mark } from "./node.js";
|
|
2
2
|
/**
|
|
3
3
|
* 스키마 — 노드/마크 타입 레지스트리.
|
|
4
4
|
*
|
|
@@ -102,4 +102,11 @@ export interface Schema {
|
|
|
102
102
|
* 레지스트리 + 기본값 팩토리일 뿐, 유효성 검증은 상태 계층(state)이 한다.
|
|
103
103
|
*/
|
|
104
104
|
export declare function createSchema(spec: SchemaSpec): Schema;
|
|
105
|
+
/**
|
|
106
|
+
* 스키마 기준 문서 보정 — 루트 type을 topNodeType으로 맞추고, 문서 끝이
|
|
107
|
+
* 기본 텍스트블록이 아니면 빈 블록 하나를 붙인다 (캐럿을 둘 자리 보장 —
|
|
108
|
+
* createEditor의 초기 문서와 setDoc의 교체 문서가 같은 보장을 공유한다).
|
|
109
|
+
* 기본 블록은 paragraph, 없으면 inline을 받는 첫 block 그룹 타입이다.
|
|
110
|
+
*/
|
|
111
|
+
export declare function normalizeDoc(schema: Schema, doc: DocNode): DocNode;
|
|
105
112
|
//# sourceMappingURL=schema.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/model/schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/model/schema.ts"],"names":[],"mappings":"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"}
|
package/dist/model/schema.js
CHANGED
|
@@ -44,4 +44,33 @@ export function createSchema(spec) {
|
|
|
44
44
|
},
|
|
45
45
|
};
|
|
46
46
|
}
|
|
47
|
+
/**
|
|
48
|
+
* 스키마 기준 문서 보정 — 루트 type을 topNodeType으로 맞추고, 문서 끝이
|
|
49
|
+
* 기본 텍스트블록이 아니면 빈 블록 하나를 붙인다 (캐럿을 둘 자리 보장 —
|
|
50
|
+
* createEditor의 초기 문서와 setDoc의 교체 문서가 같은 보장을 공유한다).
|
|
51
|
+
* 기본 블록은 paragraph, 없으면 inline을 받는 첫 block 그룹 타입이다.
|
|
52
|
+
*/
|
|
53
|
+
export function normalizeDoc(schema, doc) {
|
|
54
|
+
const d = {
|
|
55
|
+
...doc,
|
|
56
|
+
type: schema.topNodeType,
|
|
57
|
+
content: doc.content ?? [],
|
|
58
|
+
};
|
|
59
|
+
const content = d.content;
|
|
60
|
+
const def = defaultBlockTypeOfSchema(schema);
|
|
61
|
+
if (!def || content[content.length - 1]?.type === def)
|
|
62
|
+
return d;
|
|
63
|
+
return {
|
|
64
|
+
...d,
|
|
65
|
+
content: [...content, { ...schema.node(def), content: [] }],
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
/** 기본 텍스트블록 타입 — paragraph, 없으면 inline을 받는 첫 block */
|
|
69
|
+
function defaultBlockTypeOfSchema(schema) {
|
|
70
|
+
const spec = schema.spec.nodes;
|
|
71
|
+
if (spec["paragraph"])
|
|
72
|
+
return "paragraph";
|
|
73
|
+
return (Object.keys(spec).find((t) => spec[t].group?.split(" ").includes("block") &&
|
|
74
|
+
/inline/.test(spec[t].content ?? "")) ?? null);
|
|
75
|
+
}
|
|
47
76
|
//# sourceMappingURL=schema.js.map
|
package/dist/model/schema.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/model/schema.ts"],"names":[],"mappings":"AA4GA;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,IAAgB;IAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;IACzB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;IAC/B,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC;IAE1C,SAAS,YAAY,CACnB,SAA+C,EAC/C,KAAwB;QAExB,IAAI,CAAC,SAAS;YAAE,OAAO,KAAK,CAAC;QAC7B,MAAM,GAAG,GAAU,EAAE,CAAC;QACtB,KAAK,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;YACjD,IAAI,CAAC,CAAC,OAAO,KAAK,SAAS;gBAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC;QACpD,CAAC;QACD,OAAO,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACnC,CAAC;IAED,OAAO;QACL,IAAI;QACJ,WAAW;QACX,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC;QAC/B,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC;QAC/B,QAAQ,CAAC,IAAI;YACX,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;YACtB,OAAO,CACL,CAAC,CAAC,CAAC;gBACH,CAAC,CAAC,CAAC,MAAM,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CACrE,CAAC;QACJ,CAAC;QACD,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,KAAK,IAAI;QAC5C,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;QACvE,IAAI,CAAC,IAAI,EAAE,IAAI,GAAG,EAAE;YAClB,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;YACtB,IAAI,CAAC,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAC;YACjD,MAAM,KAAK,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YAChD,OAAO,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,GAAG,CAAC,KAAK,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;QACpD,CAAC;QACD,IAAI,CAAC,IAAI,EAAE,KAAK;YACd,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;YACtB,IAAI,CAAC,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAC;YACjD,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YAC5C,OAAO,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;QACrD,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/model/schema.ts"],"names":[],"mappings":"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"}
|
package/dist/model/traverse.d.ts
CHANGED
|
@@ -33,4 +33,8 @@ export declare function expandTextNodes(node: EditorNode, path: readonly number[
|
|
|
33
33
|
export declare function lastTextPath(doc: EditorNode): readonly number[] | null;
|
|
34
34
|
/** 문서의 첫 텍스트 노드 경로 — 없으면 null */
|
|
35
35
|
export declare function firstTextPath(doc: EditorNode): readonly number[] | null;
|
|
36
|
+
/** 노드의 평문 — 텍스트 리프는 text, 컨테이너는 자식을 재귀 결합 */
|
|
37
|
+
export declare function textOfNode(node: EditorNode): string;
|
|
38
|
+
/** 문서 전체 평문 — 최상위 블록 사이는 \n */
|
|
39
|
+
export declare function docText(doc: EditorNode): string;
|
|
36
40
|
//# sourceMappingURL=traverse.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"traverse.d.ts","sourceRoot":"","sources":["../../src/model/traverse.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE5C;;;;;;GAMG;AAEH,wCAAwC;AACxC,wBAAgB,MAAM,CACpB,GAAG,EAAE,UAAU,EACf,IAAI,EAAE,SAAS,MAAM,EAAE,GACtB,UAAU,GAAG,SAAS,CAIxB;AAED,gCAAgC;AAChC,wBAAgB,QAAQ,CACtB,GAAG,EAAE,UAAU,EACf,IAAI,EAAE,SAAS,MAAM,EAAE,GACtB,UAAU,GAAG,SAAS,CAExB;AAED,wCAAwC;AACxC,wBAAgB,UAAU,CACxB,GAAG,EAAE,UAAU,EACf,IAAI,EAAE,SAAS,MAAM,EAAE,GACtB,UAAU,GAAG,SAAS,CAGxB;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,UAAU,EAChB,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,EAAE,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,UAAU,GACnC,UAAU,CAUZ;AAED,kCAAkC;AAClC,wBAAgB,aAAa,CAC3B,GAAG,EAAE,UAAU,EACf,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,UAAU,GAChB,UAAU,CAMZ;AAED,8BAA8B;AAC9B,wBAAgB,aAAa,CAC3B,GAAG,EAAE,UAAU,EACf,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,KAAK,EAAE,MAAM,GACZ,UAAU,CAOZ;AAED,4CAA4C;AAC5C,wBAAgB,cAAc,CAC5B,GAAG,EAAE,UAAU,EACf,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,SAAS,UAAU,EAAE,GAC3B,UAAU,CAMZ;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,UAAU,EAChB,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,EAAE,EAAE,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,KAAK,SAAS,UAAU,EAAE,GACvE,SAAS,UAAU,EAAE,CAYvB;AAED,mCAAmC;AACnC,wBAAgB,YAAY,CAAC,GAAG,EAAE,UAAU,GAAG,SAAS,MAAM,EAAE,GAAG,IAAI,CAYtE;AAED,iCAAiC;AACjC,wBAAgB,aAAa,CAAC,GAAG,EAAE,UAAU,GAAG,SAAS,MAAM,EAAE,GAAG,IAAI,CAYvE"}
|
|
1
|
+
{"version":3,"file":"traverse.d.ts","sourceRoot":"","sources":["../../src/model/traverse.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE5C;;;;;;GAMG;AAEH,wCAAwC;AACxC,wBAAgB,MAAM,CACpB,GAAG,EAAE,UAAU,EACf,IAAI,EAAE,SAAS,MAAM,EAAE,GACtB,UAAU,GAAG,SAAS,CAIxB;AAED,gCAAgC;AAChC,wBAAgB,QAAQ,CACtB,GAAG,EAAE,UAAU,EACf,IAAI,EAAE,SAAS,MAAM,EAAE,GACtB,UAAU,GAAG,SAAS,CAExB;AAED,wCAAwC;AACxC,wBAAgB,UAAU,CACxB,GAAG,EAAE,UAAU,EACf,IAAI,EAAE,SAAS,MAAM,EAAE,GACtB,UAAU,GAAG,SAAS,CAGxB;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,UAAU,EAChB,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,EAAE,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,UAAU,GACnC,UAAU,CAUZ;AAED,kCAAkC;AAClC,wBAAgB,aAAa,CAC3B,GAAG,EAAE,UAAU,EACf,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,UAAU,GAChB,UAAU,CAMZ;AAED,8BAA8B;AAC9B,wBAAgB,aAAa,CAC3B,GAAG,EAAE,UAAU,EACf,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,KAAK,EAAE,MAAM,GACZ,UAAU,CAOZ;AAED,4CAA4C;AAC5C,wBAAgB,cAAc,CAC5B,GAAG,EAAE,UAAU,EACf,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,SAAS,UAAU,EAAE,GAC3B,UAAU,CAMZ;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,UAAU,EAChB,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,EAAE,EAAE,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,KAAK,SAAS,UAAU,EAAE,GACvE,SAAS,UAAU,EAAE,CAYvB;AAED,mCAAmC;AACnC,wBAAgB,YAAY,CAAC,GAAG,EAAE,UAAU,GAAG,SAAS,MAAM,EAAE,GAAG,IAAI,CAYtE;AAED,iCAAiC;AACjC,wBAAgB,aAAa,CAAC,GAAG,EAAE,UAAU,GAAG,SAAS,MAAM,EAAE,GAAG,IAAI,CAYvE;AAED,6CAA6C;AAC7C,wBAAgB,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAGnD;AAED,+BAA+B;AAC/B,wBAAgB,OAAO,CAAC,GAAG,EAAE,UAAU,GAAG,MAAM,CAE/C"}
|
package/dist/model/traverse.js
CHANGED
|
@@ -120,4 +120,14 @@ export function firstTextPath(doc) {
|
|
|
120
120
|
};
|
|
121
121
|
return walk(doc, []);
|
|
122
122
|
}
|
|
123
|
+
/** 노드의 평문 — 텍스트 리프는 text, 컨테이너는 자식을 재귀 결합 */
|
|
124
|
+
export function textOfNode(node) {
|
|
125
|
+
if (node.text !== undefined)
|
|
126
|
+
return node.text;
|
|
127
|
+
return (node.content ?? []).map(textOfNode).join("");
|
|
128
|
+
}
|
|
129
|
+
/** 문서 전체 평문 — 최상위 블록 사이는 \n */
|
|
130
|
+
export function docText(doc) {
|
|
131
|
+
return (doc.content ?? []).map(textOfNode).join("\n");
|
|
132
|
+
}
|
|
123
133
|
//# sourceMappingURL=traverse.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"traverse.js","sourceRoot":"","sources":["../../src/model/traverse.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"traverse.js","sourceRoot":"","sources":["../../src/model/traverse.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { Extension } from "../editor/extension.js";
|
|
2
|
+
import type { Schema } from "../model/schema.js";
|
|
2
3
|
/**
|
|
3
4
|
* 스타터 킷 — 데모/테스트/빠른 시작용 기본 스키마와 커맨드 번들.
|
|
4
5
|
* 제품 코드도 이 구성에서 시작해 확장을 추가하는 것이 관례다.
|
|
@@ -10,5 +11,17 @@ import type { Extension } from "../editor/extension.js";
|
|
|
10
11
|
export * from "../features/index.js";
|
|
11
12
|
export { canUndo, canRedo } from "../history.js";
|
|
12
13
|
/** 스타터 확장 집합 — 기능 모듈 + 히스토리 */
|
|
14
|
+
/**
|
|
15
|
+
* 스타터 커맨드 이름 — `editor.commands` 자동완성용 유니온.
|
|
16
|
+
* 커스텀 확장이 등록하는 이름은 열린 문자열 인덱스로 계속 접근된다.
|
|
17
|
+
* 커맨드를 추가/삭제하면 이 목록도 함께 갱신한다.
|
|
18
|
+
*/
|
|
19
|
+
export type StarterCommandName = "addTableColumn" | "addTableRow" | "clearFormat" | "clearSearch" | "deleteImage" | "deleteTable" | "deleteTableColumn" | "deleteTableRow" | "duplicateCodeLines" | "exitBlock" | "findNext" | "findPrev" | "formatCode" | "formatCodeAt" | "importMarkdown" | "insertHardBreak" | "insertHorizontalRule" | "insertImage" | "insertTable" | "liftListItem" | "liftOnItemBackspace" | "moveBlock" | "moveCodeLines" | "nextCell" | "prevCell" | "redo" | "replaceAll" | "replaceNext" | "setAlign" | "setCodeLanguage" | "setCodeLanguageAt" | "setHeading" | "setLink" | "setMarkAttr" | "setParagraph" | "setSearch" | "setTableColWidths" | "sinkListItem" | "splitBlock" | "toggleBold" | "toggleBulletList" | "toggleCode" | "toggleCodeBlock" | "toggleCodeComment" | "toggleItalic" | "toggleOrderedList" | "toggleQuote" | "toggleStrike" | "toggleSubscript" | "toggleSuperscript" | "toggleTaskItem" | "toggleTaskList" | "toggleUnderline" | "undo" | "unsetLink" | "updateImage";
|
|
13
20
|
export declare function starterExtensions(): Extension[];
|
|
21
|
+
/**
|
|
22
|
+
* 스타터 스키마 — 에디터를 만들지 않고 parseHTML 등에 쓸 스키마가
|
|
23
|
+
* 필요할 때 (기존 HTML → doc 변환). `createEditor({extensions:
|
|
24
|
+
* starterExtensions()}).schema`와 같은 조립 규칙의 결과다.
|
|
25
|
+
*/
|
|
26
|
+
export declare function starterSchema(): Schema;
|
|
14
27
|
//# sourceMappingURL=starter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"starter.d.ts","sourceRoot":"","sources":["../../src/presets/starter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAIxD;;;;;;;GAOG;AAGH,cAAc,sBAAsB,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAEjD,+BAA+B;AAC/B,wBAAgB,iBAAiB,IAAI,SAAS,EAAE,CAE/C"}
|
|
1
|
+
{"version":3,"file":"starter.d.ts","sourceRoot":"","sources":["../../src/presets/starter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAIxD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAEjD;;;;;;;GAOG;AAGH,cAAc,sBAAsB,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAEjD,+BAA+B;AAC/B;;;;GAIG;AACH,MAAM,MAAM,kBAAkB,GAC1B,gBAAgB,GAAG,aAAa,GAAG,aAAa,GAAG,aAAa,GAChE,aAAa,GAAG,aAAa,GAAG,mBAAmB,GAAG,gBAAgB,GACtE,oBAAoB,GAAG,WAAW,GAAG,UAAU,GAAG,UAAU,GAC5D,YAAY,GAAG,cAAc,GAAG,gBAAgB,GAAG,iBAAiB,GACpE,sBAAsB,GAAG,aAAa,GAAG,aAAa,GAAG,cAAc,GACvE,qBAAqB,GAAG,WAAW,GAAG,eAAe,GAAG,UAAU,GAClE,UAAU,GAAG,MAAM,GAAG,YAAY,GAAG,aAAa,GAAG,UAAU,GAC/D,iBAAiB,GAAG,mBAAmB,GAAG,YAAY,GAAG,SAAS,GAClE,aAAa,GAAG,cAAc,GAAG,WAAW,GAAG,mBAAmB,GAClE,cAAc,GAAG,YAAY,GAAG,YAAY,GAAG,kBAAkB,GACjE,YAAY,GAAG,iBAAiB,GAAG,mBAAmB,GAAG,cAAc,GACvE,mBAAmB,GAAG,aAAa,GAAG,cAAc,GAAG,iBAAiB,GACxE,mBAAmB,GAAG,gBAAgB,GAAG,gBAAgB,GACzD,iBAAiB,GAAG,MAAM,GAAG,WAAW,GAAG,aAAa,CAAC;AAE7D,wBAAgB,iBAAiB,IAAI,SAAS,EAAE,CAE/C;AAED;;;;GAIG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAEtC"}
|
package/dist/presets/starter.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { schemaFromExtensions } from "../editor/editor.js";
|
|
1
2
|
import { historyExtension } from "../history.js";
|
|
2
3
|
import { starterFeatures } from "../features/index.js";
|
|
3
4
|
/**
|
|
@@ -11,8 +12,15 @@ import { starterFeatures } from "../features/index.js";
|
|
|
11
12
|
// 기능 모듈 전체 재수출 — 기존 presets/starter.js 임포트 경로 호환
|
|
12
13
|
export * from "../features/index.js";
|
|
13
14
|
export { canUndo, canRedo } from "../history.js";
|
|
14
|
-
/** 스타터 확장 집합 — 기능 모듈 + 히스토리 */
|
|
15
15
|
export function starterExtensions() {
|
|
16
16
|
return [...starterFeatures(), historyExtension()];
|
|
17
17
|
}
|
|
18
|
+
/**
|
|
19
|
+
* 스타터 스키마 — 에디터를 만들지 않고 parseHTML 등에 쓸 스키마가
|
|
20
|
+
* 필요할 때 (기존 HTML → doc 변환). `createEditor({extensions:
|
|
21
|
+
* starterExtensions()}).schema`와 같은 조립 규칙의 결과다.
|
|
22
|
+
*/
|
|
23
|
+
export function starterSchema() {
|
|
24
|
+
return schemaFromExtensions(starterExtensions());
|
|
25
|
+
}
|
|
18
26
|
//# sourceMappingURL=starter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"starter.js","sourceRoot":"","sources":["../../src/presets/starter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"starter.js","sourceRoot":"","sources":["../../src/presets/starter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAGvD;;;;;;;GAOG;AAEH,iDAAiD;AACjD,cAAc,sBAAsB,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAwBjD,MAAM,UAAU,iBAAiB;IAC/B,OAAO,CAAC,GAAG,eAAe,EAAE,EAAE,gBAAgB,EAAE,CAAC,CAAC;AACpD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa;IAC3B,OAAO,oBAAoB,CAAC,iBAAiB,EAAE,CAAC,CAAC;AACnD,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apply.d.ts","sourceRoot":"","sources":["../../src/state/apply.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"apply.d.ts","sourceRoot":"","sources":["../../src/state/apply.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAWlE,OAAO,KAAK,EAOV,SAAS,EACT,IAAI,EACL,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAY,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAEnD;;;;;;;GAOG;AAEH,wBAAgB,OAAO,CACrB,CAAC,EAAE,SAAS,IAAI,EAAE,GAAG,SAAS,EAC9B,CAAC,EAAE,SAAS,IAAI,EAAE,GAAG,SAAS,GAC7B,OAAO,CAsBT;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAqB3D;AAgFD,gDAAgD;AAChD,wBAAgB,cAAc,CAC5B,IAAI,EAAE,UAAU,EAChB,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,KAAK,EAAE,KAAK,GACX;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAcjC;AAYD;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,GAAG,KAAK,CAmB9D;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,UAAU,EAAE,CAAC,EAAE,KAAK,GAAG,KAAK,CAwB1D;AAoCD;;;;;GAKG;AACH,MAAM,MAAM,OAAO,GACf;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACzD;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAE7D,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,GAAG,OAAO,EAAE,CAyBxE;AAkDD;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,GAAG,KAAK,CA0BlE;AAED,iBAAS,MAAM,CAAC,CAAC,EAAE,SAAS,MAAM,EAAE,EAAE,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAEnE;AAyKD,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,GAAG,KAAK,CAgD9D;AAgDD,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC"}
|
package/dist/state/apply.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { attrsJsonEqual, marksJsonEqual } from "../model/node.js";
|
|
2
|
+
import { expandTextNodes, firstTextPath, insertChildAt, nodeAt, removeChildAt, spliceChildren, updateNodeAt, } from "../model/traverse.js";
|
|
2
3
|
import { pointCmp, pointEq } from "./selection.js";
|
|
3
4
|
/**
|
|
4
5
|
* Step 적용 엔진 — 순수 함수 (doc, step) → doc.
|
|
@@ -11,14 +12,22 @@ import { pointCmp, pointEq } from "./selection.js";
|
|
|
11
12
|
export function marksEq(a, b) {
|
|
12
13
|
if (a === b)
|
|
13
14
|
return true;
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
15
|
+
// 빠른 경로 — 순서까지 같은 흔한 경우
|
|
16
|
+
if (a?.length &&
|
|
17
|
+
b?.length &&
|
|
18
|
+
a.length === b.length &&
|
|
19
|
+
a.every((m, i) => {
|
|
20
|
+
const o = b[i];
|
|
21
|
+
return (!!o &&
|
|
22
|
+
m.type === o.type &&
|
|
23
|
+
attrsJsonEqual(m.attrs, o.attrs));
|
|
24
|
+
})) {
|
|
25
|
+
return true;
|
|
26
|
+
}
|
|
27
|
+
// 마크는 순서 무관한 집합 — 배열 순서나 attrs 키 순서가 달라도 같은
|
|
28
|
+
// 마크다. Y 미러가 마크를 type 순으로 정규화해 읽으므로 로컬 비교도
|
|
29
|
+
// 순서 무관이어야 insert merge/join 판정이 피어별로 갈라지지 않는다
|
|
30
|
+
return marksJsonEqual(a, b);
|
|
22
31
|
}
|
|
23
32
|
export function applyStep(doc, step) {
|
|
24
33
|
switch (step.op) {
|
|
@@ -36,6 +45,10 @@ export function applyStep(doc, step) {
|
|
|
36
45
|
return applySplitOps(doc, computeSplitOps(doc, step));
|
|
37
46
|
case "join":
|
|
38
47
|
return applyJoin(doc, step);
|
|
48
|
+
case "replaceDoc":
|
|
49
|
+
// 스텝이 새 문서를 통째로 든다 — 정규화(루트 type·끝 블록)는
|
|
50
|
+
// 발행 측(tr.replaceDoc/원격 수신) 책임, apply는 verbatim 적용
|
|
51
|
+
return step.doc;
|
|
39
52
|
}
|
|
40
53
|
}
|
|
41
54
|
// ── insert / remove ─────────────────────────────────────────
|
|
@@ -243,7 +256,12 @@ export function computeSplitOps(doc, step) {
|
|
|
243
256
|
for (let d = 0; d < depth; d++) {
|
|
244
257
|
if (at.path.length === 0)
|
|
245
258
|
break; // doc 루트는 나눌 수 없다
|
|
246
|
-
|
|
259
|
+
// 리프(atom) 노드는 자식이 없어 apply도 건너뛴다 — op를 만들면
|
|
260
|
+
// mapPoint는 포인트를 밀고 history는 join 역변환을 만들어
|
|
261
|
+
// "적용 없는 스텝"이 셀렉션과 undo를 오염시킨다
|
|
262
|
+
if (nodeAt(doc, at.path)?.content) {
|
|
263
|
+
ops.push({ kind: "node", path: at.path, index: at.offset });
|
|
264
|
+
}
|
|
247
265
|
at = {
|
|
248
266
|
path: at.path.slice(0, -1),
|
|
249
267
|
offset: at.path[at.path.length - 1] + 1,
|
|
@@ -321,6 +339,13 @@ export function mapPoint(p, step, doc) {
|
|
|
321
339
|
return computeSplitOps(doc, step).reduce((pt, op) => mapThroughSplitOp(pt, op), p);
|
|
322
340
|
case "join":
|
|
323
341
|
return mapThroughJoin(p, step, doc);
|
|
342
|
+
case "replaceDoc": {
|
|
343
|
+
// 기존 좌표는 전부 무효 — 새 문서의 첫 텍스트 앞(없으면 루트 경계)으로
|
|
344
|
+
// 수렴한다. tr.replaceDoc이 명시 셀렉션을 싣는 경로가 정상이고
|
|
345
|
+
// 이 매핑은 원격 스텝 재생 같은 폴백 경로용이다
|
|
346
|
+
const first = firstTextPath(step.doc);
|
|
347
|
+
return { path: first ?? [], offset: 0 };
|
|
348
|
+
}
|
|
324
349
|
}
|
|
325
350
|
}
|
|
326
351
|
function pathEq(a, b) {
|
|
@@ -435,7 +460,13 @@ function collectMarkSplits(doc, step) {
|
|
|
435
460
|
}
|
|
436
461
|
function mapThroughMarkStep(p, step, doc) {
|
|
437
462
|
let out = p;
|
|
438
|
-
|
|
463
|
+
// 분할은 문서 순서로 수집되지만 매핑은 역순으로 적용한다 —
|
|
464
|
+
// 앞 노드의 분할이 포인트 인덱스를 이미 밀어 뒤 분할의 원래 경로와
|
|
465
|
+
// pathEq가 어긋나면, 노드 내부 매핑 대신 generic 시프트가 한 번 더
|
|
466
|
+
// 먹어 포인트가 꼬리 세그먼트로 밀린다 (셀렉션·undo 역변환 붕괴)
|
|
467
|
+
const splits = collectMarkSplits(doc, step);
|
|
468
|
+
for (let i = splits.length - 1; i >= 0; i--) {
|
|
469
|
+
const sp = splits[i];
|
|
439
470
|
out = mapThroughTextSplit3(out, sp.path, sp.s, sp.e, sp.tail);
|
|
440
471
|
}
|
|
441
472
|
return out;
|