@aeriz/wysiwyg 1.0.2 → 1.0.4

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.
Files changed (131) hide show
  1. package/README.md +634 -96
  2. package/angular/README.md +112 -0
  3. package/angular/aeriz-editor.directive.ts +243 -0
  4. package/angular/aeriz-wysiwyg.module.ts +14 -0
  5. package/angular/index.ts +5 -0
  6. package/dist/adapters/jquery.cjs +1 -0
  7. package/dist/adapters/jquery.js +91 -0
  8. package/dist/adapters/react.cjs +1 -0
  9. package/dist/adapters/react.js +66 -0
  10. package/dist/adapters/shared.cjs +1 -0
  11. package/dist/adapters/shared.js +87 -0
  12. package/dist/adapters/svelte.cjs +1 -0
  13. package/dist/adapters/svelte.js +29 -0
  14. package/dist/adapters/vue.cjs +1 -0
  15. package/dist/adapters/vue.js +110 -0
  16. package/dist/adapters/vue2.cjs +1 -0
  17. package/dist/adapters/vue2.js +117 -0
  18. package/dist/adapters/wc.cjs +1 -0
  19. package/dist/adapters/wc.js +207 -0
  20. package/dist/aeriz-wysiwyg-adapter.js +169 -0
  21. package/dist/aeriz-wysiwyg-adapter.min.js +1 -0
  22. package/dist/aeriz-wysiwyg-jquery.js +275 -0
  23. package/dist/aeriz-wysiwyg-jquery.min.js +1 -0
  24. package/dist/aeriz-wysiwyg-wc.js +401 -0
  25. package/dist/aeriz-wysiwyg-wc.min.js +1 -0
  26. package/dist/aeriz-wysiwyg.cjs +8759 -0
  27. package/dist/aeriz-wysiwyg.css +587 -163
  28. package/dist/aeriz-wysiwyg.esm.js +4249 -1381
  29. package/dist/aeriz-wysiwyg.esm.min.js +4456 -1995
  30. package/dist/aeriz-wysiwyg.js +4249 -1381
  31. package/dist/aeriz-wysiwyg.min.cjs +56 -0
  32. package/dist/aeriz-wysiwyg.min.css +1 -1
  33. package/dist/aeriz-wysiwyg.min.js +54 -21
  34. package/dist/server.cjs +34 -0
  35. package/dist/server.js +798 -0
  36. package/dist-types/adapters/jquery.d.ts +34 -0
  37. package/dist-types/adapters/jquery.d.ts.map +1 -0
  38. package/dist-types/adapters/react.d.ts +28 -0
  39. package/dist-types/adapters/react.d.ts.map +1 -0
  40. package/dist-types/adapters/shared.d.ts +83 -0
  41. package/dist-types/adapters/shared.d.ts.map +1 -0
  42. package/dist-types/adapters/svelte.d.ts +38 -0
  43. package/dist-types/adapters/svelte.d.ts.map +1 -0
  44. package/dist-types/adapters/vue.d.ts +189 -0
  45. package/dist-types/adapters/vue.d.ts.map +1 -0
  46. package/dist-types/adapters/vue2.d.ts +175 -0
  47. package/dist-types/adapters/vue2.d.ts.map +1 -0
  48. package/dist-types/adapters/wc.d.ts +96 -0
  49. package/dist-types/adapters/wc.d.ts.map +1 -0
  50. package/dist-types/cjs/adapters/jquery.d.cts +34 -0
  51. package/dist-types/cjs/adapters/react.d.cts +28 -0
  52. package/dist-types/cjs/adapters/shared.d.cts +83 -0
  53. package/dist-types/cjs/adapters/svelte.d.cts +38 -0
  54. package/dist-types/cjs/adapters/vue.d.cts +189 -0
  55. package/dist-types/cjs/adapters/vue2.d.cts +175 -0
  56. package/dist-types/cjs/adapters/wc.d.cts +96 -0
  57. package/dist-types/cjs/core/AerizEditor.d.cts +530 -0
  58. package/dist-types/cjs/core/AerizViewer.d.cts +61 -0
  59. package/dist-types/cjs/core/block-meta.d.cts +98 -0
  60. package/dist-types/cjs/core/block-policy.d.cts +43 -0
  61. package/dist-types/cjs/core/blocks.d.cts +411 -0
  62. package/dist-types/cjs/core/fonts.d.cts +60 -0
  63. package/dist-types/cjs/core/highlight.d.cts +44 -0
  64. package/dist-types/cjs/core/history.d.cts +86 -0
  65. package/dist-types/cjs/core/html-mini.d.cts +65 -0
  66. package/dist-types/cjs/core/i18n.d.cts +221 -0
  67. package/dist-types/cjs/core/import-html.d.cts +40 -0
  68. package/dist-types/cjs/core/import-markdown.d.cts +33 -0
  69. package/dist-types/cjs/core/input-rules.d.cts +46 -0
  70. package/dist-types/cjs/core/markdown-export.d.cts +30 -0
  71. package/dist-types/cjs/core/plain-text.d.cts +17 -0
  72. package/dist-types/cjs/core/render-string.d.cts +68 -0
  73. package/dist-types/cjs/core/selection.d.cts +46 -0
  74. package/dist-types/cjs/core/snapshot.d.cts +51 -0
  75. package/dist-types/cjs/core/table-ops.d.cts +30 -0
  76. package/dist-types/cjs/index.d.cts +22 -0
  77. package/dist-types/cjs/server/index.d.cts +37 -0
  78. package/dist-types/cjs/types/index.d.cts +61 -0
  79. package/dist-types/cjs/ui/Toolbar.d.cts +21 -0
  80. package/dist-types/cjs/ui/dialogs.d.cts +74 -0
  81. package/dist-types/cjs/ui/icons.d.cts +2 -0
  82. package/dist-types/cjs/ui/popovers.d.cts +70 -0
  83. package/dist-types/core/AerizEditor.d.ts +210 -17
  84. package/dist-types/core/AerizEditor.d.ts.map +1 -1
  85. package/dist-types/core/AerizViewer.d.ts +16 -4
  86. package/dist-types/core/AerizViewer.d.ts.map +1 -1
  87. package/dist-types/core/block-meta.d.ts +98 -0
  88. package/dist-types/core/block-meta.d.ts.map +1 -0
  89. package/dist-types/core/block-policy.d.ts +43 -0
  90. package/dist-types/core/block-policy.d.ts.map +1 -0
  91. package/dist-types/core/blocks.d.ts +109 -11
  92. package/dist-types/core/blocks.d.ts.map +1 -1
  93. package/dist-types/core/fonts.d.ts +11 -0
  94. package/dist-types/core/fonts.d.ts.map +1 -1
  95. package/dist-types/core/history.d.ts +86 -0
  96. package/dist-types/core/history.d.ts.map +1 -0
  97. package/dist-types/core/html-mini.d.ts +65 -0
  98. package/dist-types/core/html-mini.d.ts.map +1 -0
  99. package/dist-types/core/i18n.d.ts +12 -0
  100. package/dist-types/core/i18n.d.ts.map +1 -1
  101. package/dist-types/core/import-html.d.ts +1 -0
  102. package/dist-types/core/import-html.d.ts.map +1 -1
  103. package/dist-types/core/import-markdown.d.ts +0 -4
  104. package/dist-types/core/import-markdown.d.ts.map +1 -1
  105. package/dist-types/core/input-rules.d.ts +46 -0
  106. package/dist-types/core/input-rules.d.ts.map +1 -0
  107. package/dist-types/core/markdown-export.d.ts +30 -0
  108. package/dist-types/core/markdown-export.d.ts.map +1 -0
  109. package/dist-types/core/plain-text.d.ts +17 -0
  110. package/dist-types/core/plain-text.d.ts.map +1 -0
  111. package/dist-types/core/render-string.d.ts +68 -0
  112. package/dist-types/core/render-string.d.ts.map +1 -0
  113. package/dist-types/core/selection.d.ts +46 -0
  114. package/dist-types/core/selection.d.ts.map +1 -0
  115. package/dist-types/core/snapshot.d.ts +51 -0
  116. package/dist-types/core/snapshot.d.ts.map +1 -0
  117. package/dist-types/core/table-ops.d.ts +30 -0
  118. package/dist-types/core/table-ops.d.ts.map +1 -0
  119. package/dist-types/index.d.ts +21 -10
  120. package/dist-types/index.d.ts.map +1 -1
  121. package/dist-types/server/index.d.ts +37 -0
  122. package/dist-types/server/index.d.ts.map +1 -0
  123. package/dist-types/types/index.d.ts +21 -0
  124. package/dist-types/types/index.d.ts.map +1 -1
  125. package/dist-types/ui/Toolbar.d.ts +1 -1
  126. package/dist-types/ui/Toolbar.d.ts.map +1 -1
  127. package/dist-types/ui/dialogs.d.ts.map +1 -1
  128. package/dist-types/ui/icons.d.ts.map +1 -1
  129. package/dist-types/ui/popovers.d.ts +1 -1
  130. package/dist-types/ui/popovers.d.ts.map +1 -1
  131. package/package.json +213 -58
@@ -0,0 +1,68 @@
1
+ /**
2
+ * DOM 없이 `BlockSnapshot[]` → HTML 문자열.
3
+ *
4
+ * `document` / `window` 를 **모듈 최상위에서도, 함수 안에서도** 참조하지 않는다.
5
+ * Cloudflare Workers(workerd) · Node · Deno · Bun 어디서든 그대로 동작한다.
6
+ *
7
+ * ## 보장
8
+ *
9
+ * - **결정적** — 같은 입력이면 항상 같은 문자열. 난수 · 현재 시각 · 순회 순서에
10
+ * 의존하는 값을 쓰지 않는다. 따라서 재렌더 결과의 diff 가 의미를 갖는다.
11
+ * - **멱등** — 같은 스냅샷을 몇 번 렌더해도 결과가 누적되거나 변하지 않는다.
12
+ * - **에디터 전용 마크업 없음** — 리사이즈 핸들 · 정렬 컨트롤 · `contenteditable`
13
+ * 같은 편집 보조 마크업은 출력에 포함되지 않는다.
14
+ *
15
+ * ## 브라우저 렌더 경로와의 관계
16
+ *
17
+ * DOM 경로(`renderBlock`) 와 **같은 결과**를 내는 것이 목표다. 모든 블록은
18
+ * `snapshot.html` 을 그대로 싣고, `html` 이 비어 있을 때만 `attrs` 로 골격을
19
+ * 조립한다 (`AerizViewer` 도 같은 규칙).
20
+ *
21
+ * 원자 블록(이미지 · 유튜브 · 링크 카드 · 파일) 도 예외가 아니다. 예전에는
22
+ * `attrs` 로만 다시 조립했는데, 그러면 `<figcaption>` 처럼 `attrs` 에 없는
23
+ * 사용자 컨텐츠가 **서버 렌더에서만** 사라져 같은 스냅샷이 브라우저와 서버에서
24
+ * 다르게 보였다.
25
+ *
26
+ * 편집 보조 마크업(정렬 컨트롤 · 리사이즈 핸들) 은 1.0.3 부터 `serialize()` 가
27
+ * 애초에 싣지 않지만, 그 이전 데이터를 위해 읽는 쪽에서도 걷어낸다.
28
+ */
29
+ import type { BlockSnapshot } from './blocks.js';
30
+ export interface RenderHtmlOptions {
31
+ /**
32
+ * 각 블록에 `data-block-id` 를 남길지. 기본 `true`.
33
+ *
34
+ * 저장된 스냅샷과 렌더된 HTML 을 대조해야 하는 경우(앵커 링크, 코멘트 위치
35
+ * 고정 등) 켜 두고, 순수 발행용 HTML 이면 끈다.
36
+ */
37
+ blockIds?: boolean;
38
+ /**
39
+ * 감싸는 컨테이너.
40
+ * - `'none'` (기본) — 블록들만 이어붙인 조각
41
+ * - `'content'` — `<div class="aeriz-wysiwyg"><div class="aw-content">…`
42
+ * 로 감싼다. 배포된 `aeriz-wysiwyg.min.css` 를 함께 로드하면 에디터와 같은
43
+ * 시각으로 렌더된다 (클래스 기반 스타일링 경로).
44
+ */
45
+ wrapper?: 'none' | 'content';
46
+ /** `wrapper: 'content'` 일 때 컨테이너에 부여할 테마. */
47
+ theme?: 'light' | 'dark';
48
+ }
49
+ /**
50
+ * 스냅샷 배열을 HTML 문자열로 렌더한다.
51
+ *
52
+ * @example
53
+ * // Cloudflare Worker
54
+ * import { renderBlocksToHTML } from '@aeriz/wysiwyg/server';
55
+ *
56
+ * const html = renderBlocksToHTML(post.blocks, { wrapper: 'content' });
57
+ */
58
+ export declare function renderBlocksToHTML(snapshots: readonly BlockSnapshot[], options?: RenderHtmlOptions): string;
59
+ /**
60
+ * 단일 스냅샷을 HTML 문자열로 렌더한다.
61
+ *
62
+ * 스트리밍 · 블록 단위 캐시처럼 블록을 하나씩 렌더하는 호출자를 위해 공개돼
63
+ * 있다. `renderBlocksToHTML` 과 **같은 정규화**를 거쳐야 하므로 여기서도
64
+ * `upgradeSnapshot` 을 적용한다 — 빠뜨리면 모르는 kind 가 exhaustive 분기로
65
+ * 떨어져 빈 문자열이 되고, 블록이 조용히 사라진다.
66
+ */
67
+ export declare function renderBlockToHTML(snapshot: BlockSnapshot, options?: Pick<RenderHtmlOptions, 'blockIds'>): string;
68
+ //# sourceMappingURL=render-string.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render-string.d.ts","sourceRoot":"","sources":["../../src/core/render-string.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,OAAO,KAAK,EAAE,aAAa,EAAgB,MAAM,UAAU,CAAC;AA8B5D,MAAM,WAAW,iBAAiB;IAChC;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,6CAA6C;IAC7C,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;CAC1B;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,SAAS,aAAa,EAAE,EACnC,OAAO,GAAE,iBAAsB,GAC9B,MAAM,CAQR;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,aAAa,EACvB,OAAO,GAAE,IAAI,CAAC,iBAAiB,EAAE,UAAU,CAAM,GAChD,MAAM,CAER"}
@@ -0,0 +1,46 @@
1
+ /** 문자 오프셋으로 표현한 선택 영역. */
2
+ export interface SelectionOffsets {
3
+ start: number;
4
+ end: number;
5
+ }
6
+ /**
7
+ * `<code>` element 안의 셀렉션을 텍스트 오프셋으로 저장한다.
8
+ * 하이라이트가 innerHTML 을 다시 쓰기 직전에 부른다.
9
+ */
10
+ export declare function saveCodeSelection(codeEl: HTMLElement): SelectionOffsets | null;
11
+ /** {@link saveCodeSelection} 로 저장한 위치에 캐럿을 되돌린다. */
12
+ export declare function restoreCodeSelection(codeEl: HTMLElement, saved: SelectionOffsets): void;
13
+ /**
14
+ * `root` 안의 현재 셀렉션을 문자 오프셋으로 캡처한다.
15
+ * 셀렉션이 `root` 밖이면 null.
16
+ */
17
+ export declare function captureSelectionOffsets(root: HTMLElement): SelectionOffsets | null;
18
+ /**
19
+ * 문자 오프셋으로 저장해 둔 셀렉션을 되살린다.
20
+ * 문서가 짧아져 오프셋이 넘치면 가장 가까운 위치(문서 끝) 에 둔다.
21
+ */
22
+ export declare function restoreSelectionOffsets(root: HTMLElement, saved: SelectionOffsets): void;
23
+ /**
24
+ * 캐럿이 블록의 맨 끝에 있는지.
25
+ *
26
+ * 캐럿 뒤에 남은 **글자**가 없으면 끝으로 본다. 빈 단락의 `<br>` 이나 캐럿
27
+ * 고정용 zero-width 문자는 글자로 치지 않는다 — 사용자 눈에는 아무것도 없는
28
+ * 자리이기 때문이다.
29
+ */
30
+ export declare function isCaretAtBlockEnd(blockEl: HTMLElement): boolean;
31
+ /**
32
+ * 블록 시작부터 캐럿까지의 **보이는 글자**.
33
+ *
34
+ * 마크다운 입력 규칙이 방아쇠(`# ` 등) 를 알아보는 근거다. 노드 구조로
35
+ * 판정하지 않는 이유 — 빈 단락에는 placeholder `<br>` 이 남아 있고 첫 입력의
36
+ * 노드 배치가 브라우저마다 달라서, "첫 텍스트 노드" 같은 조건은 실제
37
+ * 브라우저에서 조용히 빗나간다.
38
+ *
39
+ * 판정에 쓴 Range 를 함께 돌려준다 — 방아쇠를 지우려면 정확히 그 범위가
40
+ * 필요하고, 다시 계산하면 그 사이 캐럿이 움직였을 때 엉뚱한 곳을 지운다.
41
+ */
42
+ export declare function textBeforeCaret(blockEl: HTMLElement): {
43
+ text: string;
44
+ range: Range;
45
+ } | null;
46
+ //# sourceMappingURL=selection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selection.d.ts","sourceRoot":"","sources":["../../src/core/selection.ts"],"names":[],"mappings":"AAcA,0BAA0B;AAC1B,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,WAAW,GAAG,gBAAgB,GAAG,IAAI,CAE9E;AAED,oDAAoD;AACpD,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,gBAAgB,GACtB,IAAI,CAEN;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,WAAW,GAChB,gBAAgB,GAAG,IAAI,CAgBzB;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,WAAW,EACjB,KAAK,EAAE,gBAAgB,GACtB,IAAI,CAcN;AAwBD;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAa/D;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,WAAW,GACnB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,KAAK,CAAA;CAAE,GAAG,IAAI,CAavC"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * BlockSnapshot 스키마 버전과 마이그레이션 진입점.
3
+ *
4
+ * 이 모듈은 **DOM 을 전혀 참조하지 않는다**. `document` / `window` 가 없는
5
+ * 런타임(Cloudflare workerd, Node, Deno) 에서 그대로 import 할 수 있어야 하므로
6
+ * blocks.ts 로부터는 타입만 가져온다.
7
+ */
8
+ import type { BlockSnapshot } from './blocks.js';
9
+ /**
10
+ * 현재 직렬화 스키마 버전.
11
+ *
12
+ * `serializeBlock()` 은 항상 이 값을 `snapshot.version` 에 기록한다.
13
+ *
14
+ * ## 버전 변경 정책
15
+ *
16
+ * 버전을 올리는 경우 — 저장된 데이터를 그대로 읽으면 **의미가 달라지는** 변경:
17
+ * - `kind` 의 삭제 또는 의미 변경
18
+ * - 기존 `attrs` 필드의 삭제 · 이름 변경 · 타입 변경 · 단위 변경
19
+ * - `html` 필드가 담는 내용의 범위 변경 (예: 인라인 컨텐츠 → 전체 outerHTML)
20
+ *
21
+ * 버전을 올리지 않는 경우 — 구버전 데이터를 그대로 읽어도 안전한 변경:
22
+ * - 새로운 `kind` 추가 (구버전 데이터에는 등장하지 않음)
23
+ * - 새로운 optional `attrs` 필드 추가
24
+ * - 렌더 결과의 시각적 변경 (CSS · 마크업 세부)
25
+ *
26
+ * 버전이 올라가면 {@link upgradeSnapshots} 에 해당 단계의 변환을 추가하고,
27
+ * 이 상수를 올린다. 읽기 경로(`AerizViewer.setBlocks` /
28
+ * `renderBlocksToHTML`) 는 모두 upgrade 를 거치도록 유지한다.
29
+ */
30
+ export declare const SNAPSHOT_VERSION = 1;
31
+ /**
32
+ * 스냅샷의 스키마 버전. `version` 이 없으면 버전 필드 도입 이전 데이터이므로
33
+ * 1 로 간주한다 (1.0.x 까지의 출력이 여기 해당한다).
34
+ */
35
+ export declare function snapshotVersionOf(snapshot: BlockSnapshot): number;
36
+ /**
37
+ * 저장된 스냅샷을 현재 스키마로 정규화한다.
38
+ *
39
+ * 읽기 경로의 단일 관문이다. 지금(v1) 은 실질 변환이 없고 다음만 보정한다.
40
+ * - `version` 누락 → 1 로 채움
41
+ * - 모르는 `kind` → `'unknown'` 으로 강등 (미래 버전으로 저장된 글을 구버전
42
+ * 클라이언트가 열었을 때 렌더가 통째로 깨지는 대신 해당 블록만 원문 유지)
43
+ * - `html` 누락 → 빈 문자열
44
+ *
45
+ * 버전이 올라가면 여기에 단계별 변환(1→2, 2→3 …) 을 순차 적용하는 형태로
46
+ * 확장한다.
47
+ */
48
+ export declare function upgradeSnapshots(input: readonly BlockSnapshot[]): BlockSnapshot[];
49
+ /** 단일 스냅샷 정규화. {@link upgradeSnapshots} 의 단위 연산. */
50
+ export declare function upgradeSnapshot(snapshot: BlockSnapshot): BlockSnapshot;
51
+ //# sourceMappingURL=snapshot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snapshot.d.ts","sourceRoot":"","sources":["../../src/core/snapshot.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAa,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAElC;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,aAAa,GAAG,MAAM,CAGjE;AAqBD;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,SAAS,aAAa,EAAE,GAC9B,aAAa,EAAE,CAEjB;AAED,oDAAoD;AACpD,wBAAgB,eAAe,CAAC,QAAQ,EAAE,aAAa,GAAG,aAAa,CAatE"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * 표 셀의 기하와 이동.
3
+ *
4
+ * 표 편집은 "지금 어느 셀인가" 를 계속 되묻는 일이다 — 캐럿이 놓인 셀, 드래그
5
+ * 로 걸친 셀 범위, 마우스가 가장자리에 닿았는지, Tab 을 눌렀을 때 다음 셀.
6
+ * 그 판정들만 여기 모은다. 에디터 인스턴스 상태를 보지 않는 순수 계산이라
7
+ * 따로 두면 표 동작을 고칠 때 에디터 본체를 읽지 않아도 된다.
8
+ *
9
+ * **rowspan / colspan 은 고려하지 않는다.** 이 에디터는 둘 다 만들지 않으며,
10
+ * 병합 셀을 지원하게 되면 여기 있는 인덱스 계산은 전부 다시 짜야 한다.
11
+ */
12
+ /** 임의의 노드에서 가장 가까운 td/th element. 없으면 null. */
13
+ export declare function nearestCell(node: Node): HTMLTableCellElement | null;
14
+ /**
15
+ * 다음 표 셀. 행 끝이면 다음 행의 첫 셀, 표의 마지막 셀이면 **새 행을 만들어**
16
+ * 그 첫 셀을 돌려준다 — Tab 만으로 표를 끝까지 채울 수 있도록.
17
+ */
18
+ export declare function nextTableCell(cell: HTMLTableCellElement, table: HTMLTableElement): HTMLTableCellElement | null;
19
+ /** 이전 표 셀. 첫 셀이면 null. */
20
+ export declare function previousTableCell(cell: HTMLTableCellElement): HTMLTableCellElement | null;
21
+ /**
22
+ * `startCell` 과 `endCell` 을 모서리로 하는 사각 영역의 모든 td/th.
23
+ *
24
+ * thead 와 tbody 가 섞여 있어도 `querySelectorAll('tr')` 의 document order 로
25
+ * 단일 행 인덱스를 매긴다 — 사용자 눈에 보이는 순서와 같다.
26
+ */
27
+ export declare function cellsInRectangle(table: HTMLTableElement, startCell: HTMLTableCellElement, endCell: HTMLTableCellElement): HTMLTableCellElement[];
28
+ /** 셀의 우/하 가장자리에 포인터가 있으면 'right' / 'bottom'. 아니면 null. */
29
+ export declare function detectCellEdge(cell: HTMLTableCellElement, x: number, y: number): 'right' | 'bottom' | null;
30
+ //# sourceMappingURL=table-ops.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table-ops.d.ts","sourceRoot":"","sources":["../../src/core/table-ops.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,+CAA+C;AAC/C,wBAAgB,WAAW,CAAC,IAAI,EAAE,IAAI,GAAG,oBAAoB,GAAG,IAAI,CAMnE;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,oBAAoB,EAC1B,KAAK,EAAE,gBAAgB,GACtB,oBAAoB,GAAG,IAAI,CAO7B;AAED,0BAA0B;AAC1B,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,oBAAoB,GACzB,oBAAoB,GAAG,IAAI,CAM7B;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,gBAAgB,EACvB,SAAS,EAAE,oBAAoB,EAC/B,OAAO,EAAE,oBAAoB,GAC5B,oBAAoB,EAAE,CA8BxB;AAKD,0DAA0D;AAC1D,wBAAgB,cAAc,CAC5B,IAAI,EAAE,oBAAoB,EAC1B,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,GACR,OAAO,GAAG,QAAQ,GAAG,IAAI,CAQ3B"}
@@ -1,11 +1,22 @@
1
- import './styles/index.css';
2
- export { AerizEditor } from './core/AerizEditor';
3
- export type { EditorState, EditorStateListener, InlineState, } from './core/AerizEditor';
4
- export { AerizViewer } from './core/AerizViewer';
5
- export type { ViewerOptions } from './core/AerizViewer';
6
- export { ALL_INLINE_MARKS, BLOCK_ID_ATTR, BLOCK_TYPES, BLOCK_TYPE_BY_KIND, BlockIdRegistry, applyBlockInlineStyles, assignMissingIds, classifyBlockElement, extractInlineContent, fillInlineContent, findBlockFrom, getBlockLabel, isElementBlank, listBlocks, normalizeContent, placeCaretAtStart, readBlockStyleTheme, renderBlock, renderBlocks, serializeBlock, serializeBlocks, stripEditorOnlyAttrs, } from './core/blocks';
7
- export type { BlockStyleTheme } from './core/blocks';
8
- export type { Block, BlockAttrs, BlockAttrsByKind, BlockIdResolver, BlockKind, BlockMatch, BlockSnapshot, BlockType, BlockquoteAttrs, BulletListAttrs, ClassifyResult, CodeBlockAttrs, FileAttrs, HeadingAttrs, HeadingLevel, HrAttrs, ImageAttrs, ImportedHtmlAttrs, InlineMarkName, LinkCardAttrs, OrderedListAttrs, ParagraphAttrs, Snapshot, TableAttrs, UnknownAttrs, YoutubeAttrs, } from './core/blocks';
9
- export type { EditorOptions, ToolbarConfig, ToolbarItem, ToolbarItemName, } from './types';
10
- export { DEFAULT_TOOLBAR } from './types';
1
+ // (CSS 부수 효과 import 는 타입 선언에서 제거됨 — scripts/strip-css-imports.mjs)
2
+ export { AerizEditor } from './core/AerizEditor.js';
3
+ export type { EditorState, EditorStateListener, InlineState, } from './core/AerizEditor.js';
4
+ export { AerizViewer } from './core/AerizViewer.js';
5
+ export type { ViewerOptions } from './core/AerizViewer.js';
6
+ export { ALIGN_CLASS_BY_VALUE, ALL_INLINE_MARKS, BLOCK_ID_ATTR, BLOCK_TYPES, BLOCK_TYPE_BY_KIND, BlockIdRegistry, applyBlockClassNames, applyBlockInlineStyles, assignMissingIds, classifyBlockElement, extractInlineContent, fillInlineContent, findBlockFrom, getBlockLabel, isElementBlank, listBlocks, normalizeContent, placeCaretAtStart, readBlockStyleTheme, renderBlock, renderBlocks, serializeBlock, serializeBlocks, restoreAlignFromClasses, stripEditorOnlyAttrs, stripEditorOnlyNodes, } from './core/blocks.js';
7
+ export type { BlockStyleTheme } from './core/blocks.js';
8
+ export type { Block, BlockAttrs, BlockAttrsByKind, BlockIdResolver, BlockKind, BlockMatch, BlockSnapshot, BlockType, BlockquoteAttrs, BulletListAttrs, ClassifyResult, CodeBlockAttrs, FileAttrs, HeadingAttrs, HeadingLevel, HrAttrs, ImageAttrs, ImportedHtmlAttrs, InlineMarkName, LinkCardAttrs, OrderedListAttrs, ParagraphAttrs, Snapshot, TableAttrs, UnknownAttrs, YoutubeAttrs, } from './core/blocks.js';
9
+ export { getLocale, setLocale, t } from './core/i18n.js';
10
+ export type { Locale, Strings } from './core/i18n.js';
11
+ export type { EditorOptions, HtmlStyleMode, SerializeHtmlOptions, ToolbarConfig, ToolbarItem, ToolbarItemName, } from './types/index.js';
12
+ export { DEFAULT_TOOLBAR } from './types/index.js';
13
+ export { SNAPSHOT_VERSION, snapshotVersionOf, upgradeSnapshot, upgradeSnapshots, } from './core/snapshot.js';
14
+ export { renderBlockToHTML, renderBlocksToHTML } from './core/render-string.js';
15
+ export type { RenderHtmlOptions } from './core/render-string.js';
16
+ export { blocksToMarkdown } from './core/markdown-export.js';
17
+ export type { MarkdownOptions } from './core/markdown-export.js';
18
+ export { blocksToPlainText } from './core/plain-text.js';
19
+ export type { PlainTextOptions } from './core/plain-text.js';
20
+ export { decodeEntities, escapeAttr, escapeHtml, parseHtmlFragment, serializeNodes, textOf, textWithBlockBreaks, } from './core/html-mini.js';
21
+ export type { HtmlElementNode, HtmlNode, HtmlText } from './core/html-mini.js';
11
22
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,oBAAoB,CAAC;AAE5B,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,YAAY,EACV,WAAW,EACX,mBAAmB,EACnB,WAAW,GACZ,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,YAAY,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD,OAAO,EACL,gBAAgB,EAChB,aAAa,EACb,WAAW,EACX,kBAAkB,EAClB,eAAe,EACf,sBAAsB,EACtB,gBAAgB,EAChB,oBAAoB,EACpB,oBAAoB,EACpB,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,cAAc,EACd,UAAU,EACV,gBAAgB,EAChB,iBAAiB,EACjB,mBAAmB,EACnB,WAAW,EACX,YAAY,EACZ,cAAc,EACd,eAAe,EACf,oBAAoB,GACrB,MAAM,eAAe,CAAC;AACvB,YAAY,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,YAAY,EACV,KAAK,EACL,UAAU,EACV,gBAAgB,EAChB,eAAe,EACf,SAAS,EACT,UAAU,EACV,aAAa,EACb,SAAS,EACT,eAAe,EACf,eAAe,EACf,cAAc,EACd,cAAc,EACd,SAAS,EACT,YAAY,EACZ,YAAY,EACZ,OAAO,EACP,UAAU,EACV,iBAAiB,EACjB,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,QAAQ,EACR,UAAU,EACV,YAAY,EACZ,YAAY,GACb,MAAM,eAAe,CAAC;AAEvB,YAAY,EACV,aAAa,EACb,aAAa,EACb,WAAW,EACX,eAAe,GAChB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,oBAAoB,CAAC;AAE5B,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,YAAY,EACV,WAAW,EACX,mBAAmB,EACnB,WAAW,GACZ,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,YAAY,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD,OAAO,EACL,oBAAoB,EACpB,gBAAgB,EAChB,aAAa,EACb,WAAW,EACX,kBAAkB,EAClB,eAAe,EACf,oBAAoB,EACpB,sBAAsB,EACtB,gBAAgB,EAChB,oBAAoB,EACpB,oBAAoB,EACpB,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,cAAc,EACd,UAAU,EACV,gBAAgB,EAChB,iBAAiB,EACjB,mBAAmB,EACnB,WAAW,EACX,YAAY,EACZ,cAAc,EACd,eAAe,EACf,uBAAuB,EACvB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,eAAe,CAAC;AACvB,YAAY,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,YAAY,EACV,KAAK,EACL,UAAU,EACV,gBAAgB,EAChB,eAAe,EACf,SAAS,EACT,UAAU,EACV,aAAa,EACb,SAAS,EACT,eAAe,EACf,eAAe,EACf,cAAc,EACd,cAAc,EACd,SAAS,EACT,YAAY,EACZ,YAAY,EACZ,OAAO,EACP,UAAU,EACV,iBAAiB,EACjB,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,QAAQ,EACR,UAAU,EACV,YAAY,EACZ,YAAY,GACb,MAAM,eAAe,CAAC;AAKvB,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,EAAE,MAAM,aAAa,CAAC;AACtD,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEnD,YAAY,EACV,aAAa,EACb,aAAa,EACb,oBAAoB,EACpB,aAAa,EACb,WAAW,EACX,eAAe,GAChB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAQ1C,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,gBAAgB,GACjB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC7E,YAAY,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAE9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,YAAY,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAE9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,YAAY,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAE1D,OAAO,EACL,cAAc,EACd,UAAU,EACV,UAAU,EACV,iBAAiB,EACjB,cAAc,EACd,MAAM,EACN,mBAAmB,GACpB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EAAE,eAAe,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * `@aeriz/wysiwyg/server` — DOM 없는 런타임용 진입점.
3
+ *
4
+ * 이 모듈은 **CSS 를 import 하지 않으며**, import 그래프 전체가
5
+ * `document` / `window` 를 참조하지 않는다. Cloudflare Workers(workerd) ·
6
+ * Node · Deno · Bun 에서 그대로 쓸 수 있다.
7
+ *
8
+ * 브라우저용 기본 진입점(`@aeriz/wysiwyg`) 은 스타일시트를 부수 효과로
9
+ * 불러오고 에디터/뷰어가 DOM 을 직접 만들기 때문에 서버에서 쓸 수 없다.
10
+ * 저장된 스냅샷을 HTML · 마크다운 · 평문으로 바꾸는 일만 필요하면 여기서
11
+ * 가져오면 된다.
12
+ *
13
+ * @example
14
+ * // Cloudflare Worker — 저장된 글을 HTML 로 재렌더
15
+ * import { renderBlocksToHTML, blocksToPlainText } from '@aeriz/wysiwyg/server';
16
+ *
17
+ * export default {
18
+ * async fetch(req, env) {
19
+ * const post = await env.DB.get('post:1', 'json');
20
+ * return new Response(
21
+ * renderBlocksToHTML(post.blocks, { wrapper: 'content' }),
22
+ * { headers: { 'content-type': 'text/html; charset=utf-8' } },
23
+ * );
24
+ * },
25
+ * };
26
+ */
27
+ export { renderBlockToHTML, renderBlocksToHTML, } from '../core/render-string.js';
28
+ export type { RenderHtmlOptions } from '../core/render-string.js';
29
+ export { blocksToMarkdown } from '../core/markdown-export.js';
30
+ export type { MarkdownOptions } from '../core/markdown-export.js';
31
+ export { blocksToPlainText } from '../core/plain-text.js';
32
+ export type { PlainTextOptions } from '../core/plain-text.js';
33
+ export { SNAPSHOT_VERSION, snapshotVersionOf, upgradeSnapshot, upgradeSnapshots, } from '../core/snapshot.js';
34
+ export type { Block, BlockAttrs, BlockAttrsByKind, BlockKind, BlockSnapshot, BlockquoteAttrs, BulletListAttrs, CodeBlockAttrs, FileAttrs, HeadingAttrs, HeadingLevel, HrAttrs, ImageAttrs, ImportedHtmlAttrs, InlineMarkName, LinkCardAttrs, OrderedListAttrs, ParagraphAttrs, Snapshot, TableAttrs, UnknownAttrs, YoutubeAttrs, } from '../core/blocks.js';
35
+ export { decodeEntities, escapeAttr, escapeHtml, parseHtmlFragment, serializeNodes, textOf, textWithBlockBreaks, } from '../core/html-mini.js';
36
+ export type { HtmlElementNode, HtmlNode, HtmlText } from '../core/html-mini.js';
37
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,EACL,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,YAAY,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,YAAY,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE3D,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,gBAAgB,GACjB,MAAM,kBAAkB,CAAC;AAI1B,YAAY,EACV,KAAK,EACL,UAAU,EACV,gBAAgB,EAChB,SAAS,EACT,aAAa,EACb,eAAe,EACf,eAAe,EACf,cAAc,EACd,SAAS,EACT,YAAY,EACZ,YAAY,EACZ,OAAO,EACP,UAAU,EACV,iBAAiB,EACjB,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,QAAQ,EACR,UAAU,EACV,YAAY,EACZ,YAAY,GACb,MAAM,gBAAgB,CAAC;AAIxB,OAAO,EACL,cAAc,EACd,UAAU,EACV,UAAU,EACV,iBAAiB,EACjB,cAAc,EACd,MAAM,EACN,mBAAmB,GACpB,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EAAE,eAAe,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC"}
@@ -4,6 +4,22 @@ export interface ToolbarConfig {
4
4
  items: ToolbarItem[];
5
5
  sticky?: boolean;
6
6
  }
7
+ /**
8
+ * HTML 출력의 스타일 전략.
9
+ *
10
+ * - `'inline'` — 테마 색을 블록 인라인 style 에 베이크. 스타일시트 없이도
11
+ * 에디터와 같은 시각으로 렌더된다 (기본값).
12
+ * - `'class'` — 테마 스타일을 베이크하지 않고 `aw-block-*` / `aw-align-*`
13
+ * 클래스만 남긴다. `style` 속성을 제거하는 서버 sanitizer 를 통과해야 할 때
14
+ * 쓴다. 출력은 `aeriz-wysiwyg.min.css` 가 로드된 페이지의
15
+ * `.aeriz-wysiwyg > .aw-content` 안에 넣는 것을 전제로 한다.
16
+ */
17
+ export type HtmlStyleMode = 'inline' | 'class';
18
+ /** `getHTML()` 호출 단위 옵션. */
19
+ export interface SerializeHtmlOptions {
20
+ /** 스타일 전략. 미지정 시 인스턴스 기본값을 따른다. */
21
+ styles?: HtmlStyleMode;
22
+ }
7
23
  export interface EditorOptions {
8
24
  element: HTMLElement;
9
25
  initialHTML?: string;
@@ -12,6 +28,11 @@ export interface EditorOptions {
12
28
  theme?: 'light' | 'dark';
13
29
  /** UI 언어. 'en' / 'ko' / 'ja' / 'zh'. 기본 'ko'. */
14
30
  locale?: 'en' | 'ko' | 'ja' | 'zh';
31
+ /**
32
+ * `getHTML()` 과 `onChange` 가 내보내는 HTML 의 스타일 전략. 기본 `'inline'`.
33
+ * `getHTML({ styles })` 로 호출 단위 재정의 가능.
34
+ */
35
+ htmlStyles?: HtmlStyleMode;
15
36
  onChange?: (html: string) => void;
16
37
  /**
17
38
  * 직접 업로드 핸들러. 우선 적용된다. 미설정 + `imageUploadUrl` 만 있을 때는
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GAAG,eAAe,GAAG,GAAG,CAAC;AAEhD,MAAM,MAAM,eAAe,GACvB,MAAM,GACN,MAAM,GACN,WAAW,GACX,YAAY,GACZ,UAAU,GACV,MAAM,GACN,QAAQ,GACR,WAAW,GACX,QAAQ,GACR,OAAO,GACP,iBAAiB,GACjB,OAAO,GACP,QAAQ,GACR,WAAW,GACX,UAAU,GACV,YAAY,GACZ,aAAa,GACb,YAAY,GACZ,WAAW,GACX,MAAM,GACN,OAAO,GACP,OAAO,GACP,IAAI,GACJ,aAAa,CAAC;AAElB,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,WAAW,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,aAAa,GAAG,KAAK,CAAC;IAChC,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IACzB,iDAAiD;IACjD,MAAM,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC;;;;OAIG;IACH,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAChD;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;;OAIG;IACH,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/C;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,eAAO,MAAM,eAAe,EAAE,aAiC7B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GAAG,eAAe,GAAG,GAAG,CAAC;AAEhD,MAAM,MAAM,eAAe,GACvB,MAAM,GACN,MAAM,GACN,WAAW,GACX,YAAY,GACZ,UAAU,GACV,MAAM,GACN,QAAQ,GACR,WAAW,GACX,QAAQ,GACR,OAAO,GACP,iBAAiB,GACjB,OAAO,GACP,QAAQ,GACR,WAAW,GACX,UAAU,GACV,YAAY,GACZ,aAAa,GACb,YAAY,GACZ,WAAW,GACX,MAAM,GACN,OAAO,GACP,OAAO,GACP,IAAI,GACJ,aAAa,CAAC;AAElB,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;;;;;;;;GASG;AACH,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,OAAO,CAAC;AAE/C,4BAA4B;AAC5B,MAAM,WAAW,oBAAoB;IACnC,mCAAmC;IACnC,MAAM,CAAC,EAAE,aAAa,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,WAAW,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,aAAa,GAAG,KAAK,CAAC;IAChC,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IACzB,iDAAiD;IACjD,MAAM,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IACnC;;;OAGG;IACH,UAAU,CAAC,EAAE,aAAa,CAAC;IAC3B,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC;;;;OAIG;IACH,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAChD;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;;OAIG;IACH,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/C;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,eAAO,MAAM,eAAe,EAAE,aAiC7B,CAAC"}
@@ -1,4 +1,4 @@
1
- import type { ToolbarConfig, ToolbarItemName } from '../types';
1
+ import type { ToolbarConfig, ToolbarItemName } from '../types/index.js';
2
2
  export interface ToolbarHandlers {
3
3
  onAction: (name: ToolbarItemName, anchor: HTMLElement) => void;
4
4
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Toolbar.d.ts","sourceRoot":"","sources":["../../src/ui/Toolbar.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAe,eAAe,EAAE,MAAM,UAAU,CAAC;AAG5E,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,CAAC,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,WAAW,KAAK,IAAI,CAAC;CAChE;AAqCD,qBAAa,OAAO;IAClB,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;IACjC,OAAO,CAAC,OAAO,CAAiD;gBAEpD,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,eAAe;IA0B5D,SAAS,CAAC,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI;IAOvD,UAAU,CAAC,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;IAMzD,0DAA0D;IAC1D,UAAU,CAAC,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;IAMzD;;;OAGG;IACH,mBAAmB,IAAI,IAAI;IAU3B,OAAO,CAAC,WAAW;IAMnB,OAAO,CAAC,YAAY;CA4BrB"}
1
+ {"version":3,"file":"Toolbar.d.ts","sourceRoot":"","sources":["../../src/ui/Toolbar.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAe,eAAe,EAAE,MAAM,UAAU,CAAC;AAI5E,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,CAAC,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,WAAW,KAAK,IAAI,CAAC;CAChE;AA4CD,qBAAa,OAAO;IAClB,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;IACjC,OAAO,CAAC,OAAO,CAAiD;gBAEpD,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,eAAe;IA2B5D,SAAS,CAAC,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI;IAOvD,UAAU,CAAC,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;IAMzD,0DAA0D;IAC1D,UAAU,CAAC,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;IAMzD;;;OAGG;IACH,mBAAmB,IAAI,IAAI;IAU3B,OAAO,CAAC,WAAW;IAMnB,OAAO,CAAC,YAAY;CA4BrB"}
@@ -1 +1 @@
1
- {"version":3,"file":"dialogs.d.ts","sourceRoot":"","sources":["../../src/ui/dialogs.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,gBAAiB,SAAQ,YAAY;IACpD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,iBAAkB,SAAQ,YAAY;IACrD,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,mBAAoB,SAAQ,YAAY;IACvD,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,sBAAuB,SAAQ,YAAY;IAC1D,sCAAsC;IACtC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,0BAA2B,SAAQ,YAAY;IAC9D,uCAAuC;IACvC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,0BAA2B,SAAQ,YAAY;IAC9D,gDAAgD;IAChD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,yCAAyC;IACzC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,0CAA0C;IAC1C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uCAAuC;IACvC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,iBAAkB,SAAQ,YAAY;IACrD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AA2ED,wBAAgB,cAAc,CAC5B,OAAO,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAAO,EACnE,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,GACvB,OAAO,CAAC,gBAAgB,CAAC,CA4D3B;AAED,wBAAgB,eAAe,CAC7B,OAAO,GAAE;IAAE,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;CAAO,EAC5D,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,GACvB,OAAO,CAAC,iBAAiB,CAAC,CA+J5B;AAoBD,wBAAgB,eAAe,CAAC,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAkEpF;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,GACvB,OAAO,CAAC,sBAAsB,CAAC,CAoGjC;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,GACvB,OAAO,CAAC,0BAA0B,CAAC,CAgGrC;AAED;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,GAAE;IAAE,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;CAAO,EAC5D,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,GACvB,OAAO,CAAC,0BAA0B,CAAC,CAqKrC;AAED,wBAAgB,iBAAiB,CAAC,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAwCxF"}
1
+ {"version":3,"file":"dialogs.d.ts","sourceRoot":"","sources":["../../src/ui/dialogs.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,gBAAiB,SAAQ,YAAY;IACpD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,iBAAkB,SAAQ,YAAY;IACrD,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,mBAAoB,SAAQ,YAAY;IACvD,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,sBAAuB,SAAQ,YAAY;IAC1D,sCAAsC;IACtC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,0BAA2B,SAAQ,YAAY;IAC9D,uCAAuC;IACvC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,0BAA2B,SAAQ,YAAY;IAC9D,gDAAgD;IAChD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,yCAAyC;IACzC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,0CAA0C;IAC1C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uCAAuC;IACvC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,iBAAkB,SAAQ,YAAY;IACrD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAgGD,wBAAgB,cAAc,CAC5B,OAAO,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAAO,EACnE,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,GACvB,OAAO,CAAC,gBAAgB,CAAC,CAgE3B;AAED,wBAAgB,eAAe,CAC7B,OAAO,GAAE;IAAE,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;CAAO,EAC5D,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,GACvB,OAAO,CAAC,iBAAiB,CAAC,CAmK5B;AAoBD,wBAAgB,eAAe,CAAC,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAsEpF;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,GACvB,OAAO,CAAC,sBAAsB,CAAC,CAwGjC;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,GACvB,OAAO,CAAC,0BAA0B,CAAC,CAoGrC;AAED;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,GAAE;IAAE,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;CAAO,EAC5D,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,GACvB,OAAO,CAAC,0BAA0B,CAAC,CA2KrC;AAED,wBAAgB,iBAAiB,CAAC,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,CA4CxF"}
@@ -1 +1 @@
1
- {"version":3,"file":"icons.d.ts","sourceRoot":"","sources":["../../src/ui/icons.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAoCxC,CAAC"}
1
+ {"version":3,"file":"icons.d.ts","sourceRoot":"","sources":["../../src/ui/icons.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAqCxC,CAAC"}
@@ -1,4 +1,4 @@
1
- import type { BlockAttrs, BlockKind } from '../core/blocks';
1
+ import type { BlockAttrs, BlockKind } from '../core/blocks.js';
2
2
  export declare const COLOR_PALETTE: string[];
3
3
  export declare function openColorPicker(anchor: HTMLElement, onPick: (color: string | null) => void, recents?: ReadonlyArray<string>): void;
4
4
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"popovers.d.ts","sourceRoot":"","sources":["../../src/ui/popovers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAc5D,eAAO,MAAM,aAAa,UAKzB,CAAC;AAEF,wBAAgB,eAAe,CAC7B,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,EACtC,OAAO,GAAE,aAAa,CAAC,MAAM,CAAM,GAClC,IAAI,CA6FN;AAID;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,SAAS,GAAG,YAAY,GAAG,gBAAgB,CAAC;IAClD,KAAK,EAAE,UAAU,CAAC;CACnB;AAiHD,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,IAAI,GACxC,IAAI,CA4CN;AAID,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,KAAK,IAAI,GAC/D,IAAI,CA+BN;AAID,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,CAAC,MAAM,EAAE,gBAAgB,KAAK,IAAI,EAC1C,SAAS,CAAC,EAAE,MAAM,GACjB,IAAI,CAuCN;AAID,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,CAAC,MAAM,EAAE,kBAAkB,KAAK,IAAI,EAC5C,SAAS,CAAC,EAAE,MAAM,GACjB,IAAI,CA+BN;AAID,MAAM,MAAM,eAAe,GACvB,UAAU,GACV,UAAU,GACV,SAAS,GACT,UAAU,GACV,WAAW,GACX,WAAW,CAAC;AAiBhB;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,IAAI,GACxC,IAAI,CA2BN;AAID,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;CACZ;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,CAAC,MAAM,EAAE,cAAc,KAAK,IAAI,EACxC,SAAS,CAAC,EAAE,MAAM,GACjB,IAAI,CA+BN;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAiB/E;AAED;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,IAAI,GACxC,IAAI,CAoGN"}
1
+ {"version":3,"file":"popovers.d.ts","sourceRoot":"","sources":["../../src/ui/popovers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAqB5D,eAAO,MAAM,aAAa,UAKzB,CAAC;AAEF,wBAAgB,eAAe,CAC7B,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,EACtC,OAAO,GAAE,aAAa,CAAC,MAAM,CAAM,GAClC,IAAI,CA6FN;AAID;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,SAAS,GAAG,YAAY,GAAG,gBAAgB,CAAC;IAClD,KAAK,EAAE,UAAU,CAAC;CACnB;AA+HD,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,IAAI,GACxC,IAAI,CA4CN;AAID,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,KAAK,IAAI,GAC/D,IAAI,CAgCN;AAID,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,CAAC,MAAM,EAAE,gBAAgB,KAAK,IAAI,EAC1C,SAAS,CAAC,EAAE,MAAM,GACjB,IAAI,CAyDN;AAID,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,CAAC,MAAM,EAAE,kBAAkB,KAAK,IAAI,EAC5C,SAAS,CAAC,EAAE,MAAM,GACjB,IAAI,CA+BN;AAID,MAAM,MAAM,eAAe,GACvB,UAAU,GACV,UAAU,GACV,SAAS,GACT,UAAU,GACV,WAAW,GACX,WAAW,CAAC;AAoBhB;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,IAAI,GACxC,IAAI,CA2BN;AAID,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;CACZ;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,CAAC,MAAM,EAAE,cAAc,KAAK,IAAI,EACxC,SAAS,CAAC,EAAE,MAAM,GACjB,IAAI,CA+BN;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAiB/E;AAED;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,IAAI,GACxC,IAAI,CA8FN"}