@storkspear/post-editor-react 0.1.0

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 (192) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +12 -0
  3. package/dist/ColorPicker.d.ts +11 -0
  4. package/dist/ColorPicker.d.ts.map +1 -0
  5. package/dist/ColorPicker.js +30 -0
  6. package/dist/ColorPicker.js.map +1 -0
  7. package/dist/DrawioModal.d.ts +9 -0
  8. package/dist/DrawioModal.d.ts.map +1 -0
  9. package/dist/DrawioModal.js +97 -0
  10. package/dist/DrawioModal.js.map +1 -0
  11. package/dist/FontMenu.d.ts +14 -0
  12. package/dist/FontMenu.d.ts.map +1 -0
  13. package/dist/FontMenu.js +14 -0
  14. package/dist/FontMenu.js.map +1 -0
  15. package/dist/Icon.d.ts +69 -0
  16. package/dist/Icon.d.ts.map +1 -0
  17. package/dist/Icon.js +47 -0
  18. package/dist/Icon.js.map +1 -0
  19. package/dist/InsertHandle.d.ts +14 -0
  20. package/dist/InsertHandle.d.ts.map +1 -0
  21. package/dist/InsertHandle.js +60 -0
  22. package/dist/InsertHandle.js.map +1 -0
  23. package/dist/PickMenu.d.ts +61 -0
  24. package/dist/PickMenu.d.ts.map +1 -0
  25. package/dist/PickMenu.js +57 -0
  26. package/dist/PickMenu.js.map +1 -0
  27. package/dist/Popover.d.ts +20 -0
  28. package/dist/Popover.d.ts.map +1 -0
  29. package/dist/Popover.js +22 -0
  30. package/dist/Popover.js.map +1 -0
  31. package/dist/PostTitle.d.ts +33 -0
  32. package/dist/PostTitle.d.ts.map +1 -0
  33. package/dist/PostTitle.js +171 -0
  34. package/dist/PostTitle.js.map +1 -0
  35. package/dist/SelectionBubble.d.ts +6 -0
  36. package/dist/SelectionBubble.d.ts.map +1 -0
  37. package/dist/SelectionBubble.js +71 -0
  38. package/dist/SelectionBubble.js.map +1 -0
  39. package/dist/TableTools.d.ts +10 -0
  40. package/dist/TableTools.d.ts.map +1 -0
  41. package/dist/TableTools.js +200 -0
  42. package/dist/TableTools.js.map +1 -0
  43. package/dist/Toolbar.d.ts +17 -0
  44. package/dist/Toolbar.d.ts.map +1 -0
  45. package/dist/Toolbar.js +333 -0
  46. package/dist/Toolbar.js.map +1 -0
  47. package/dist/UrlPrompt.d.ts +24 -0
  48. package/dist/UrlPrompt.d.ts.map +1 -0
  49. package/dist/UrlPrompt.js +53 -0
  50. package/dist/UrlPrompt.js.map +1 -0
  51. package/dist/VariantMenu.d.ts +47 -0
  52. package/dist/VariantMenu.d.ts.map +1 -0
  53. package/dist/VariantMenu.js +21 -0
  54. package/dist/VariantMenu.js.map +1 -0
  55. package/dist/WidthToggle.d.ts +19 -0
  56. package/dist/WidthToggle.d.ts.map +1 -0
  57. package/dist/WidthToggle.js +17 -0
  58. package/dist/WidthToggle.js.map +1 -0
  59. package/dist/bubbleShows.d.ts +10 -0
  60. package/dist/bubbleShows.d.ts.map +1 -0
  61. package/dist/bubbleShows.js +29 -0
  62. package/dist/bubbleShows.js.map +1 -0
  63. package/dist/content-baked.d.ts +22 -0
  64. package/dist/content-baked.d.ts.map +1 -0
  65. package/dist/content-baked.js +21 -0
  66. package/dist/content-baked.js.map +1 -0
  67. package/dist/content.d.ts +29 -0
  68. package/dist/content.d.ts.map +1 -0
  69. package/dist/content.js +35 -0
  70. package/dist/content.js.map +1 -0
  71. package/dist/extensions/DiagramView.d.ts +26 -0
  72. package/dist/extensions/DiagramView.d.ts.map +1 -0
  73. package/dist/extensions/DiagramView.js +146 -0
  74. package/dist/extensions/DiagramView.js.map +1 -0
  75. package/dist/extensions/FigureView.d.ts +3 -0
  76. package/dist/extensions/FigureView.d.ts.map +1 -0
  77. package/dist/extensions/FigureView.js +108 -0
  78. package/dist/extensions/FigureView.js.map +1 -0
  79. package/dist/index.d.ts +100 -0
  80. package/dist/index.d.ts.map +1 -0
  81. package/dist/index.js +166 -0
  82. package/dist/index.js.map +1 -0
  83. package/dist/objects/ObjectFloat.d.ts +11 -0
  84. package/dist/objects/ObjectFloat.d.ts.map +1 -0
  85. package/dist/objects/ObjectFloat.js +42 -0
  86. package/dist/objects/ObjectFloat.js.map +1 -0
  87. package/dist/objects/ObjectLayer.d.ts +10 -0
  88. package/dist/objects/ObjectLayer.d.ts.map +1 -0
  89. package/dist/objects/ObjectLayer.js +20 -0
  90. package/dist/objects/ObjectLayer.js.map +1 -0
  91. package/dist/objects/blockSize.d.ts +30 -0
  92. package/dist/objects/blockSize.d.ts.map +1 -0
  93. package/dist/objects/blockSize.js +56 -0
  94. package/dist/objects/blockSize.js.map +1 -0
  95. package/dist/objects/code.d.ts +3 -0
  96. package/dist/objects/code.d.ts.map +1 -0
  97. package/dist/objects/code.js +55 -0
  98. package/dist/objects/code.js.map +1 -0
  99. package/dist/objects/diagram.d.ts +21 -0
  100. package/dist/objects/diagram.d.ts.map +1 -0
  101. package/dist/objects/diagram.js +109 -0
  102. package/dist/objects/diagram.js.map +1 -0
  103. package/dist/objects/diagramGlyphs.d.ts +12 -0
  104. package/dist/objects/diagramGlyphs.d.ts.map +1 -0
  105. package/dist/objects/diagramGlyphs.js +49 -0
  106. package/dist/objects/diagramGlyphs.js.map +1 -0
  107. package/dist/objects/divider.d.ts +22 -0
  108. package/dist/objects/divider.d.ts.map +1 -0
  109. package/dist/objects/divider.js +60 -0
  110. package/dist/objects/divider.js.map +1 -0
  111. package/dist/objects/figure.d.ts +3 -0
  112. package/dist/objects/figure.d.ts.map +1 -0
  113. package/dist/objects/figure.js +62 -0
  114. package/dist/objects/figure.js.map +1 -0
  115. package/dist/objects/imageRow.d.ts +3 -0
  116. package/dist/objects/imageRow.d.ts.map +1 -0
  117. package/dist/objects/imageRow.js +29 -0
  118. package/dist/objects/imageRow.js.map +1 -0
  119. package/dist/objects/quote.d.ts +6 -0
  120. package/dist/objects/quote.d.ts.map +1 -0
  121. package/dist/objects/quote.js +13 -0
  122. package/dist/objects/quote.js.map +1 -0
  123. package/dist/objects/quoteGlyphs.d.ts +6 -0
  124. package/dist/objects/quoteGlyphs.d.ts.map +1 -0
  125. package/dist/objects/quoteGlyphs.js +28 -0
  126. package/dist/objects/quoteGlyphs.js.map +1 -0
  127. package/dist/objects/quoteRow.d.ts +3 -0
  128. package/dist/objects/quoteRow.d.ts.map +1 -0
  129. package/dist/objects/quoteRow.js +61 -0
  130. package/dist/objects/quoteRow.js.map +1 -0
  131. package/dist/objects/registry.d.ts +60 -0
  132. package/dist/objects/registry.d.ts.map +1 -0
  133. package/dist/objects/registry.js +45 -0
  134. package/dist/objects/registry.js.map +1 -0
  135. package/dist/objects/table.d.ts +11 -0
  136. package/dist/objects/table.d.ts.map +1 -0
  137. package/dist/objects/table.js +136 -0
  138. package/dist/objects/table.js.map +1 -0
  139. package/dist/objects/useDomRect.d.ts +14 -0
  140. package/dist/objects/useDomRect.d.ts.map +1 -0
  141. package/dist/objects/useDomRect.js +32 -0
  142. package/dist/objects/useDomRect.js.map +1 -0
  143. package/dist/objects/useEngaged.d.ts +14 -0
  144. package/dist/objects/useEngaged.d.ts.map +1 -0
  145. package/dist/objects/useEngaged.js +41 -0
  146. package/dist/objects/useEngaged.js.map +1 -0
  147. package/dist/pickItems.d.ts +36 -0
  148. package/dist/pickItems.d.ts.map +1 -0
  149. package/dist/pickItems.js +40 -0
  150. package/dist/pickItems.js.map +1 -0
  151. package/dist/recentColors.d.ts +7 -0
  152. package/dist/recentColors.d.ts.map +1 -0
  153. package/dist/recentColors.js +30 -0
  154. package/dist/recentColors.js.map +1 -0
  155. package/dist/seeds/drawio/aws.d.ts +15 -0
  156. package/dist/seeds/drawio/aws.d.ts.map +1 -0
  157. package/dist/seeds/drawio/aws.js +15 -0
  158. package/dist/seeds/drawio/aws.js.map +1 -0
  159. package/dist/seeds/drawio/azure.d.ts +14 -0
  160. package/dist/seeds/drawio/azure.d.ts.map +1 -0
  161. package/dist/seeds/drawio/azure.js +14 -0
  162. package/dist/seeds/drawio/azure.js.map +1 -0
  163. package/dist/seeds/drawio/ec2docker.d.ts +15 -0
  164. package/dist/seeds/drawio/ec2docker.d.ts.map +1 -0
  165. package/dist/seeds/drawio/ec2docker.js +15 -0
  166. package/dist/seeds/drawio/ec2docker.js.map +1 -0
  167. package/dist/seeds/drawio/userflow.d.ts +21 -0
  168. package/dist/seeds/drawio/userflow.d.ts.map +1 -0
  169. package/dist/seeds/drawio/userflow.js +21 -0
  170. package/dist/seeds/drawio/userflow.js.map +1 -0
  171. package/dist/seeds/mermaid.d.ts +19 -0
  172. package/dist/seeds/mermaid.d.ts.map +1 -0
  173. package/dist/seeds/mermaid.js +82 -0
  174. package/dist/seeds/mermaid.js.map +1 -0
  175. package/dist/useAnchoredPos.d.ts +22 -0
  176. package/dist/useAnchoredPos.d.ts.map +1 -0
  177. package/dist/useAnchoredPos.js +57 -0
  178. package/dist/useAnchoredPos.js.map +1 -0
  179. package/dist/useDismiss.d.ts +17 -0
  180. package/dist/useDismiss.d.ts.map +1 -0
  181. package/dist/useDismiss.js +36 -0
  182. package/dist/useDismiss.js.map +1 -0
  183. package/dist/useLastVariant.d.ts +9 -0
  184. package/dist/useLastVariant.d.ts.map +1 -0
  185. package/dist/useLastVariant.js +33 -0
  186. package/dist/useLastVariant.js.map +1 -0
  187. package/dist/useUploadCount.d.ts +3 -0
  188. package/dist/useUploadCount.d.ts.map +1 -0
  189. package/dist/useUploadCount.js +9 -0
  190. package/dist/useUploadCount.js.map +1 -0
  191. package/package.json +57 -0
  192. package/src/editor-ui.css +737 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FigureView.js","sourceRoot":"","sources":["../../src/extensions/FigureView.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,100 @@
1
+ import { type ReactNode } from 'react';
2
+ import { type Editor } from '@tiptap/react';
3
+ import type { JSONContent } from '@tiptap/core';
4
+ import { type BannerBleed, type ProseWidth } from '@storkspear/post-editor-core';
5
+ import { Toolbar } from './Toolbar.js';
6
+ import { type TitleValue } from './PostTitle.js';
7
+ import { SelectionBubble } from './SelectionBubble.js';
8
+ import { InsertHandle } from './InsertHandle.js';
9
+ import { ObjectLayer } from './objects/ObjectLayer.js';
10
+ import { ObjectFloat } from './objects/ObjectFloat.js';
11
+ import { registerObject } from './objects/registry.js';
12
+ export type PostEditorProps = {
13
+ /**
14
+ * 열 문서 — 저장해 둔 JSON 이거나 HTML 문자열.
15
+ *
16
+ * 제어 컴포넌트가 **아니다.** 타이핑마다 밖에서 되돌리면 커서가 튀므로, 밖에서 온 값이
17
+ * 지금 문서와 실제로 다를 때만 다시 싣는다. 글을 서버에서 불러와 여는 화면(편집 왕복)은
18
+ * 값이 **나중에** 도착하므로, 처음 한 번만 읽으면 편집기가 빈 채로 남는다.
19
+ *
20
+ * HTML 문자열을 주면 각 확장의 `parseHTML` 을 타서 그 자리에서 값이 검증된다.
21
+ * JSON 을 주면 그 관문이 없으므로 `normalizeDoc` 을 먼저 거친다.
22
+ */
23
+ value?: JSONContent | string | null;
24
+ /** 문서가 바뀔 때마다. `json` 이 저장 정본, `html` 은 표시용. */
25
+ onChange?: (json: JSONContent, html: string) => void;
26
+ /** 편집기가 준비되면 한 번 — 명령을 직접 부르고 싶을 때 */
27
+ onReady?: (editor: Editor) => void;
28
+ editable?: boolean;
29
+ autofocus?: boolean;
30
+ className?: string;
31
+ /**
32
+ * 글 제목. 주면 편집기가 **직접 그린다** — 툴바가 제목의 서체·크기·정렬·색을 다뤄야 하는데,
33
+ * 소비자가 그린 입력칸은 툴바가 손댈 방법이 없다.
34
+ */
35
+ title?: TitleValue;
36
+ onTitleChange?: (v: TitleValue) => void;
37
+ /** 툴바와 본문 사이에 끼울 그 밖의 것 */
38
+ head?: ReactNode;
39
+ /**
40
+ * 본문 폭 — `'measure'`(38rem, 기본) · `'full'`(화면 끝까지) · `'72rem'` 같은 CSS 길이.
41
+ *
42
+ * 툴바에 **폭 고르개가 들어 있다.** 사용자가 고르면 `onWidthChange` 로 알려 주므로,
43
+ * 소비자는 그 값을 저장했다가 발행 쪽 `PostContent` 에 그대로 넘기면 된다.
44
+ *
45
+ * 이건 **편집기의 계약이다.** 소비자가 `--measure-override` 를 `:root` 에
46
+ * 직접 박았는데, 그러면 변수 이름이 숨은 API 가 되고 폭을 고르는 일이 편집기 밖에 떨어진다
47
+ *. 발행 쪽 `PostContent` 에 **같은 값**을 주면 두 화면이 같아진다.
48
+ */
49
+ width?: ProseWidth;
50
+ /**
51
+ * 제목 배너를 어디까지 펴는가 — `container`(기본) 또는 `viewport`.
52
+ *
53
+ * 편집기가 카드·패널 안에 들어앉는 곳에서 `viewport` 를 주면 **배너가 카드를 뚫고 나간다.**
54
+ * 페이지를 통째로 쓰는 곳에서만 `viewport` 다.
55
+ */
56
+ bleed?: BannerBleed;
57
+ /**
58
+ * 툴바가 붙을 자리 — 편집기 **위에 이미 고정돼 있는 것**의 높이(px 또는 CSS 길이).
59
+ *
60
+ * 안 주면 0 이라 스크롤할 때 툴바가 그 위로 올라온다 — 툴바가 더 위 층이다.
61
+ * 숫자를 박지 말고 **재서** 넘길 것: 머리줄이 조금만 높아져도 다시 어긋난다.
62
+ */
63
+ stickyTop?: number | string;
64
+ /** 툴바의 폭 고르개로 폭이 바뀌었을 때. 안 주면 고르개를 그리지 않는다. */
65
+ onWidthChange?: (v: ProseWidth) => void;
66
+ };
67
+ /**
68
+ * 글 편집기 한 벌 — 툴바·글자 버블·객체 도구·좌측 `+` 가 모두 들어 있다.
69
+ *
70
+ * ```tsx
71
+ * import { PostEditor } from '@storkspear/post-editor-react'
72
+ * import '@storkspear/post-editor-core/styles.css'
73
+ * import '@storkspear/post-editor-core/fonts.css'
74
+ * import '@storkspear/post-editor-react/styles.css'
75
+ *
76
+ * <PostEditor value={doc} onChange={(json, html) => save({ json, html })} />
77
+ * ```
78
+ *
79
+ * **들어오는 문서는 반드시 `normalizeDoc` 을 거친다.** `setContent(json)` 은 parseHTML 을
80
+ * 타지 않으므로, AI 가 만든 body_json 의 잘못된 값이 검사 없이 문서에 들어온다.
81
+ */
82
+ export declare function PostEditor({ value, onChange, onReady, editable, autofocus, className, head, title, onTitleChange, width, bleed, stickyTop, onWidthChange }: PostEditorProps): import("react").JSX.Element | null;
83
+ export { PostTitle, EMPTY_TITLE } from './PostTitle.js';
84
+ export type { TitleBanner, TitleValue } from './PostTitle.js';
85
+ /**
86
+ * 저장해 둔 제목을 다시 열 때 쓴다 — 글을 불러와 고치는 화면은 서버에서 온 값을
87
+ * 그대로 믿을 수 없다(사람이 고친 JSON 도, AI 가 만든 것도 들어온다).
88
+ * `normalizeDoc` 이 본문에 하는 일을 제목에 한다.
89
+ */
90
+ export { normalizeTitle } from '@storkspear/post-editor-core';
91
+ export { PostContent, PostHead } from './content.js';
92
+ export { WidthToggle } from './WidthToggle.js';
93
+ /** 「가운데폭」이 뜻하는 폭 — 저장한 폭을 다시 읽는 쪽이 같은 값을 봐야 한다 */
94
+ export { CENTERED_WIDTH } from '@storkspear/post-editor-core';
95
+ export { Toolbar, SelectionBubble, InsertHandle, ObjectLayer, ObjectFloat, registerObject };
96
+ export { useUploadCount } from './useUploadCount.js';
97
+ export type { Editor } from '@tiptap/react';
98
+ export type { JSONContent } from '@storkspear/post-editor-core';
99
+ export type { BannerBleed, ProseWidth } from '@storkspear/post-editor-core';
100
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAmD,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AACvF,OAAO,EAAmD,KAAK,MAAM,EAAE,MAAM,eAAe,CAAA;AAC5F,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC/C,OAAO,EAAuD,KAAK,WAAW,EAAE,KAAK,UAAU,EAAE,MAAM,8BAA8B,CAAA;AAIrI,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAa,KAAK,UAAU,EAAE,MAAM,aAAa,CAAA;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAqBnD,MAAM,MAAM,eAAe,GAAG;IAC5B;;;;;;;;;OASG;IACH,KAAK,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,IAAI,CAAA;IACnC,gDAAgD;IAChD,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IACpD,sCAAsC;IACtC,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;IAClC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB;;;OAGG;IACH,KAAK,CAAC,EAAE,UAAU,CAAA;IAClB,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,IAAI,CAAA;IACvC,2BAA2B;IAC3B,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB;;;;;;;;;OASG;IACH,KAAK,CAAC,EAAE,UAAU,CAAA;IAClB;;;;;OAKG;IACH,KAAK,CAAC,EAAE,WAAW,CAAA;IACnB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IAC3B,+CAA+C;IAC/C,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,IAAI,CAAA;CACxC,CAAA;AAaD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,UAAU,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAe,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,EAAE,eAAe,sCAgHlL;AAGD,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AACpD,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAC1D;;;;GAIG;AACH,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAC7D,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,kDAAkD;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAC7D,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,CAAA;AAC3F,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,YAAY,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AAC3C,YAAY,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAA;AAC/D,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAA"}
package/dist/index.js ADDED
@@ -0,0 +1,166 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useEffect, useRef, useState } from 'react';
3
+ import { EditorContent, ReactNodeViewRenderer, useEditor } from '@tiptap/react';
4
+ import { postEditorExtensions, normalizeDoc, proseWidthStyle } from '@storkspear/post-editor-core';
5
+ import { FigureView } from './extensions/FigureView.js';
6
+ import { DiagramView } from './extensions/DiagramView.js';
7
+ import { Toolbar } from './Toolbar.js';
8
+ import { PostTitle } from './PostTitle.js';
9
+ import { SelectionBubble } from './SelectionBubble.js';
10
+ import { InsertHandle } from './InsertHandle.js';
11
+ import { ObjectLayer } from './objects/ObjectLayer.js';
12
+ import { ObjectFloat } from './objects/ObjectFloat.js';
13
+ import { registerObject } from './objects/registry.js';
14
+ import { tableObject } from './objects/table.js';
15
+ import { dividerObject } from './objects/divider.js';
16
+ import { codeObject } from './objects/code.js';
17
+ import { figureObject } from './objects/figure.js';
18
+ import { quoteObject } from './objects/quoteRow.js';
19
+ import { imageRowObject } from './objects/imageRow.js';
20
+ import { diagramObject } from './objects/diagram.js';
21
+ /**
22
+ * 객체별 툴바 등록 — 모듈이 실려 오는 순간 한 번.
23
+ * 소비자가 이걸 따로 부르게 하면, 안 부른 채 표를 넣고 "도구가 안 뜬다" 고 하게 된다.
24
+ */
25
+ registerObject(tableObject);
26
+ registerObject(dividerObject);
27
+ registerObject(codeObject);
28
+ registerObject(figureObject);
29
+ registerObject(quoteObject);
30
+ registerObject(imageRowObject);
31
+ registerObject(diagramObject);
32
+ /**
33
+ * 편집기에 실을 형태로 바꾼다.
34
+ *
35
+ * HTML 문자열은 그대로 — `setContent` 가 각 확장의 `parseHTML` 을 태워 값을 검증한다.
36
+ * JSON 은 그 관문을 타지 않으므로 `normalizeDoc` 이 대신 검사한다.
37
+ */
38
+ function contentOf(value) {
39
+ if (value == null)
40
+ return '';
41
+ return typeof value === 'string' ? value : normalizeDoc(value);
42
+ }
43
+ /**
44
+ * 글 편집기 한 벌 — 툴바·글자 버블·객체 도구·좌측 `+` 가 모두 들어 있다.
45
+ *
46
+ * ```tsx
47
+ * import { PostEditor } from '@storkspear/post-editor-react'
48
+ * import '@storkspear/post-editor-core/styles.css'
49
+ * import '@storkspear/post-editor-core/fonts.css'
50
+ * import '@storkspear/post-editor-react/styles.css'
51
+ *
52
+ * <PostEditor value={doc} onChange={(json, html) => save({ json, html })} />
53
+ * ```
54
+ *
55
+ * **들어오는 문서는 반드시 `normalizeDoc` 을 거친다.** `setContent(json)` 은 parseHTML 을
56
+ * 타지 않으므로, AI 가 만든 body_json 의 잘못된 값이 검사 없이 문서에 들어온다.
57
+ */
58
+ export function PostEditor({ value, onChange, onReady, editable = true, autofocus, className, head, title, onTitleChange, width, bleed, stickyTop, onWidthChange }) {
59
+ /**
60
+ * 제목에 손이 가 있는 동안 — 툴바 아랫줄이 제목 서식으로 바뀐다.
61
+ *
62
+ * 판단을 **포커스가 아니라 누른 자리**로 한다. 창이 OS 포커스를 잃으면 focus 이벤트가
63
+ * 아예 안 오고, 툴바 버튼은 `preventDefault` 로 포커스를
64
+ * 옮기지 않으므로 blur 도 안 온다. `useEngaged` 와 같은 규약이다 —
65
+ * 우리 UI(`[data-editor-ui]`) 안을 누른 것은 「자리를 옮긴 것」으로 세지 않는다.
66
+ */
67
+ const [onTitle, setOnTitle] = useState(false);
68
+ useEffect(() => {
69
+ const down = (ev) => {
70
+ const node = ev.target instanceof Node ? ev.target : null;
71
+ const el = node instanceof HTMLElement ? node : node?.parentElement;
72
+ if (el?.closest('.post-title')) {
73
+ setOnTitle(true);
74
+ return;
75
+ }
76
+ if (el?.closest('[data-editor-ui]'))
77
+ return;
78
+ setOnTitle(false);
79
+ };
80
+ document.addEventListener('mousedown', down, true);
81
+ document.addEventListener('touchstart', down, true);
82
+ return () => {
83
+ document.removeEventListener('mousedown', down, true);
84
+ document.removeEventListener('touchstart', down, true);
85
+ };
86
+ }, []);
87
+ /**
88
+ * 마지막으로 **우리가 내보낸** 문서. 부모가 `onChange` 로 받은 값을 그대로 `value` 로
89
+ * 되돌려주는 흔한 배선에서, 그것을 다시 싣지 않기 위한 표식이다. 없으면
90
+ * 내보내기 → 되돌아오기 → 다시 싣기 가 서로를 부른다.
91
+ */
92
+ const lastEmitted = useRef(null);
93
+ /** 마지막으로 **실은** 값. 문자열로 들어오는 경로를 걸러내는 데 쓴다(아래 주석 참조). */
94
+ const lastLoaded = useRef(null);
95
+ const editor = useEditor({
96
+ extensions: postEditorExtensions({
97
+ figureView: ReactNodeViewRenderer(FigureView),
98
+ diagramView: ReactNodeViewRenderer(DiagramView),
99
+ }),
100
+ content: contentOf(value),
101
+ editable,
102
+ autofocus,
103
+ editorProps: { attributes: { class: 'prose-body' } },
104
+ onUpdate: ({ editor: e }) => {
105
+ const json = e.getJSON();
106
+ lastEmitted.current = json;
107
+ onChange?.(json, e.getHTML());
108
+ },
109
+ });
110
+ useEffect(() => { if (editor)
111
+ onReady?.(editor); }, [editor, onReady]);
112
+ /**
113
+ * 밖에서 문서가 도착하면 싣는다 — 서버에서 글을 불러와 여는 화면이 이 경로다.
114
+ *
115
+ * 두 번 거른다. 우리가 방금 내보낸 그 객체면 건너뛰고(같은 참조), 내용이 지금 문서와
116
+ * 같아도 건너뛴다. 거르지 않으면 타이핑 도중에 문서가 통째로 다시 깔려 커서가 맨 앞으로 튄다.
117
+ */
118
+ useEffect(() => {
119
+ if (!editor || value == null)
120
+ return;
121
+ if (value === lastEmitted.current)
122
+ return;
123
+ /**
124
+ * 같은 값이 다시 와도 싣지 않는다.
125
+ *
126
+ * JSON 은 지금 문서와 견주면 되지만 **HTML 문자열은 그럴 수 없다** — `getHTML()` 은
127
+ * 들어온 문자열과 표기가 달라 늘 불일치로 나온다. 그래서 문자열은 「직전에 실은 것과
128
+ * 같은가」로 본다. 이 가드가 없으면 `onChange` 의 html 을 그대로 `value` 로 되돌려주는
129
+ * 배선에서 키 입력마다 문서가 다시 깔려 커서·선택·되돌리기가 전부 날아간다.
130
+ */
131
+ if (typeof value === 'string' && value === lastLoaded.current)
132
+ return;
133
+ const next = contentOf(value);
134
+ if (typeof next !== 'string' && JSON.stringify(next) === JSON.stringify(editor.getJSON()))
135
+ return;
136
+ lastLoaded.current = value;
137
+ editor.commands.setContent(next, { emitUpdate: true });
138
+ }, [editor, value]);
139
+ useEffect(() => { if (editor)
140
+ editor.setEditable(editable); }, [editor, editable]);
141
+ if (!editor)
142
+ return null;
143
+ /**
144
+ * 폭은 **편집기가 들고 있다.** 툴바의 고르개가 여기를 바꾼다.
145
+ * 밖에서 `width` 를 바꿔 주면 그것이 이긴다(글을 다시 열 때 저장된 폭으로 돌아온다).
146
+ */
147
+ const [w, setW] = useState(width ?? 'measure');
148
+ useEffect(() => { if (width != null)
149
+ setW(width); }, [width]);
150
+ const pickWidth = (v) => { setW(v); onWidthChange?.(v); };
151
+ return (_jsxs(_Fragment, { children: [editable && (_jsx(Toolbar, { editor: editor, title: onTitle && title && onTitleChange ? { value: title, onChange: onTitleChange } : null, width: w, onWidth: onWidthChange ? pickWidth : undefined, stickyTop: stickyTop })), title && onTitleChange && (_jsx(PostTitle, { value: title, onChange: onTitleChange, width: w, bleed: bleed, onFocus: () => setOnTitle(true) })), head, _jsxs("div", { className: `prose editor-surface${className ? ` ${className}` : ''}`, style: proseWidthStyle(w), children: [editable && (_jsxs(_Fragment, { children: [_jsx(SelectionBubble, { editor: editor }), _jsx(ObjectLayer, { editor: editor }), _jsx(ObjectFloat, { editor: editor }), _jsx(InsertHandle, { editor: editor })] })), _jsx(EditorContent, { editor: editor })] })] }));
152
+ }
153
+ export { PostTitle, EMPTY_TITLE } from './PostTitle.js';
154
+ /**
155
+ * 저장해 둔 제목을 다시 열 때 쓴다 — 글을 불러와 고치는 화면은 서버에서 온 값을
156
+ * 그대로 믿을 수 없다(사람이 고친 JSON 도, AI 가 만든 것도 들어온다).
157
+ * `normalizeDoc` 이 본문에 하는 일을 제목에 한다.
158
+ */
159
+ export { normalizeTitle } from '@storkspear/post-editor-core';
160
+ export { PostContent, PostHead } from './content.js';
161
+ export { WidthToggle } from './WidthToggle.js';
162
+ /** 「가운데폭」이 뜻하는 폭 — 저장한 폭을 다시 읽는 쪽이 같은 값을 봐야 한다 */
163
+ export { CENTERED_WIDTH } from '@storkspear/post-editor-core';
164
+ export { Toolbar, SelectionBubble, InsertHandle, ObjectLayer, ObjectFloat, registerObject };
165
+ export { useUploadCount } from './useUploadCount.js';
166
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { type Editor } from '@tiptap/react';
2
+ /**
3
+ * 선택된 객체 위에 뜨는 작은 바.
4
+ *
5
+ * 글자 버블(BubbleMenu)과 따로 두는 이유: 기준이 커서가 아니라 **블록**이고,
6
+ * 표 오버레이와 같은 좌표계(fixed)를 써야 둘이 어긋나지 않는다.
7
+ */
8
+ export declare function ObjectFloat({ editor }: {
9
+ editor: Editor;
10
+ }): import("react").JSX.Element | null;
11
+ //# sourceMappingURL=ObjectFloat.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ObjectFloat.d.ts","sourceRoot":"","sources":["../../src/objects/ObjectFloat.tsx"],"names":[],"mappings":"AACA,OAAO,EAAkB,KAAK,MAAM,EAAE,MAAM,eAAe,CAAA;AAM3D;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,EAAE,MAAM,EAAE,EAAE;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,sCAgCzD"}
@@ -0,0 +1,42 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useCallback } from 'react';
3
+ import { useEditorState } from '@tiptap/react';
4
+ import { OBJECTS, findActiveObject } from './registry.js';
5
+ import { useDomRect } from './useDomRect.js';
6
+ import { useEngaged } from './useEngaged.js';
7
+ import { bubbleShows } from '../bubbleShows.js';
8
+ /**
9
+ * 선택된 객체 위에 뜨는 작은 바.
10
+ *
11
+ * 글자 버블(BubbleMenu)과 따로 두는 이유: 기준이 커서가 아니라 **블록**이고,
12
+ * 표 오버레이와 같은 좌표계(fixed)를 써야 둘이 어긋나지 않는다.
13
+ */
14
+ export function ObjectFloat({ editor }) {
15
+ const obj = useEditorState({ editor, selector: () => findActiveObject(editor) });
16
+ const kind = obj ? OBJECTS[obj.kind] : null;
17
+ const pick = useCallback(() => {
18
+ if (!obj || !kind)
19
+ return null;
20
+ return kind.anchor ? kind.anchor(obj.dom) : obj.dom;
21
+ }, [obj, kind]);
22
+ const rect = useDomRect(editor, pick);
23
+ const engaged = useEngaged(editor);
24
+ if (!obj || !kind?.Float || !rect)
25
+ return null;
26
+ // 글자를 잡으면 이 줄은 글자 버블로 합쳐진다 — 둘 다 띄우면 포갠다
27
+ if (kind.Bubble && bubbleShows(editor))
28
+ return null;
29
+ // 에디터 밖을 누르면 감춘다 — 선택은 남아 있어도 편집 중이 아니다
30
+ if (!engaged)
31
+ return null;
32
+ // 대상이 화면 밖으로 스크롤되면 감춘다 — 안 그러면 바만 엉뚱한 자리에 떠 있는다
33
+ if (rect.top + rect.height < 56 || rect.top > window.innerHeight - 8)
34
+ return null;
35
+ // 폰에서는 phoneFloat 가 켜진 종류만
36
+ if (window.matchMedia('(pointer: coarse)').matches && !kind.phoneFloat)
37
+ return null;
38
+ const top = Math.max(6, rect.top - 44);
39
+ const left = Math.max(6, Math.min(window.innerWidth - 6, rect.left + rect.width / 2));
40
+ return (_jsx("div", { className: "obj-float", "data-editor-ui": "", style: { top, left, transform: 'translateX(-50%)' }, role: "toolbar", "aria-label": `${kind.label} 도구`, children: _jsx(kind.Float, { editor: editor, m: obj }) }));
41
+ }
42
+ //# sourceMappingURL=ObjectFloat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ObjectFloat.js","sourceRoot":"","sources":["../../src/objects/ObjectFloat.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAA;AACnC,OAAO,EAAE,cAAc,EAAe,MAAM,eAAe,CAAA;AAC3D,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAoB,MAAM,YAAY,CAAA;AACxE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAE5C;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,EAAE,MAAM,EAAsB;IACxD,MAAM,GAAG,GAAG,cAAc,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAuB,CAAA;IACtG,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IAE3C,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,EAAE;QAC5B,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAA;QAC9B,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAA;IACrD,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAA;IAEf,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;IACrC,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,CAAA;IAGlC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,KAAK,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAA;IAC9C,yCAAyC;IACzC,IAAI,IAAI,CAAC,MAAM,IAAI,WAAW,CAAC,MAAM,CAAC;QAAE,OAAO,IAAI,CAAA;IACnD,wCAAwC;IACxC,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAA;IACzB,gDAAgD;IAChD,IAAI,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,GAAG,EAAE,IAAI,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,WAAW,GAAG,CAAC;QAAE,OAAO,IAAI,CAAA;IACjF,2BAA2B;IAC3B,IAAI,MAAM,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU;QAAE,OAAO,IAAI,CAAA;IAEnF,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC,CAAA;IACtC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,GAAG,CAAC,EAAE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAA;IAErF,OAAO,CACL,cAAK,SAAS,EAAC,WAAW,oBAAgB,EAAE,EAAC,KAAK,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,kBAAkB,EAAE,EAAE,IAAI,EAAC,SAAS,gBAClG,GAAG,IAAI,CAAC,KAAK,KAAK,YAC9B,KAAC,IAAI,CAAC,KAAK,IAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,GAAI,GAClC,CACP,CAAA;AACH,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { type Editor } from '@tiptap/react';
2
+ /**
3
+ * 선택된 객체의 오버레이를 그린다.
4
+ * 어떤 객체가 잡혔는지 판단하는 곳은 registry 하나뿐이고,
5
+ * 여기는 그 결과에 달린 컴포넌트를 꽂기만 한다.
6
+ */
7
+ export declare function ObjectLayer({ editor }: {
8
+ editor: Editor;
9
+ }): import("react").JSX.Element | null;
10
+ //# sourceMappingURL=ObjectLayer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ObjectLayer.d.ts","sourceRoot":"","sources":["../../src/objects/ObjectLayer.tsx"],"names":[],"mappings":"AACA,OAAO,EAAkB,KAAK,MAAM,EAAE,MAAM,eAAe,CAAA;AAG3D;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,EAAE,MAAM,EAAE,EAAE;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,sCAOzD"}
@@ -0,0 +1,20 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useEngaged } from './useEngaged.js';
3
+ import { useEditorState } from '@tiptap/react';
4
+ import { OBJECTS, findActiveObject } from './registry.js';
5
+ /**
6
+ * 선택된 객체의 오버레이를 그린다.
7
+ * 어떤 객체가 잡혔는지 판단하는 곳은 registry 하나뿐이고,
8
+ * 여기는 그 결과에 달린 컴포넌트를 꽂기만 한다.
9
+ */
10
+ export function ObjectLayer({ editor }) {
11
+ const obj = useEditorState({ editor, selector: () => findActiveObject(editor) });
12
+ const engaged = useEngaged(editor);
13
+ if (!obj || !engaged)
14
+ return null;
15
+ const kind = OBJECTS[obj.kind];
16
+ if (!kind?.Overlay)
17
+ return null;
18
+ return _jsx(kind.Overlay, { editor: editor, m: obj });
19
+ }
20
+ //# sourceMappingURL=ObjectLayer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ObjectLayer.js","sourceRoot":"","sources":["../../src/objects/ObjectLayer.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,cAAc,EAAe,MAAM,eAAe,CAAA;AAC3D,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAoB,MAAM,YAAY,CAAA;AAExE;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,EAAE,MAAM,EAAsB;IACxD,MAAM,GAAG,GAAG,cAAc,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAuB,CAAA;IACtG,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,CAAA;IAClC,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAA;IACjC,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IAC9B,IAAI,CAAC,IAAI,EAAE,OAAO;QAAE,OAAO,IAAI,CAAA;IAC/B,OAAO,KAAC,IAAI,CAAC,OAAO,IAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,GAAI,CAAA;AACjD,CAAC"}
@@ -0,0 +1,30 @@
1
+ import type { Editor } from '@tiptap/react';
2
+ import type { ObjectMatch } from './registry.js';
3
+ /** 화면의 실제 폭을 읽어 프리셋을 % 로 환산한다 — 드래그와 같은 속성을 쓰므로 어긋나지 않는다 */
4
+ export declare function presets(): {
5
+ key: string;
6
+ label: string;
7
+ pct: number;
8
+ }[];
9
+ export declare function AlignButtons({ editor, m, type }: {
10
+ editor: Editor;
11
+ m: ObjectMatch;
12
+ type: string;
13
+ }): import("react").JSX.Element;
14
+ export declare function WidthSlider({ editor, m, type }: {
15
+ editor: Editor;
16
+ m: ObjectMatch;
17
+ type: string;
18
+ }): import("react").JSX.Element;
19
+ export declare function WidthPresets({ editor, type }: {
20
+ editor: Editor;
21
+ type: string;
22
+ }): import("react").JSX.Element;
23
+ /**
24
+ * 그 블록을 지운다.
25
+ *
26
+ * `deleteSelection()` 을 쓰면 **캡션에 커서가 있을 때 아무 일도 일어나지 않는다** — 지울 선택이 없기 때문.
27
+ * 지울 대상은 커서가 아니라 잡혀 있는 객체이므로 노드 범위를 직접 지운다.
28
+ */
29
+ export declare function delNode(editor: Editor, m: ObjectMatch): void;
30
+ //# sourceMappingURL=blockSize.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blockSize.d.ts","sourceRoot":"","sources":["../../src/objects/blockSize.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AAG3C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAW7C,4DAA4D;AAC5D,wBAAgB,OAAO,IAAI;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,EAAE,CAgBvE;AAED,wBAAgB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,+BAkBjG;AAED,wBAAgB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,+BAUhG;AAED,wBAAgB,YAAY,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,+BAY9E;AAED;;;;;GAKG;AACH,wBAAgB,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,WAAW,QAErD"}
@@ -0,0 +1,56 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Icon } from '../Icon.js';
3
+ import { BLOCK_ALIGNS } from '@storkspear/post-editor-core/vocab';
4
+ /**
5
+ * 폭·정렬 컨트롤 — **사진과 사진 행이 함께 쓴다.**
6
+ *
7
+ * 둘의 폭 모델이 같기 때문이다(본문 폭 대비 15~100%, 정렬 셋). 각자 한 벌씩 만들면
8
+ * 한쪽만 고쳐져 어긋난다. 바꾸는 노드 이름만 인자로 받는다.
9
+ */
10
+ const ALIGN_ICON = { left: 'alignLeft', center: 'alignCenter', right: 'alignRight' };
11
+ const ALIGN_LABEL = { left: '왼쪽', center: '가운데', right: '오른쪽' };
12
+ /** 화면의 실제 폭을 읽어 프리셋을 % 로 환산한다 — 드래그와 같은 속성을 쓰므로 어긋나지 않는다 */
13
+ export function presets() {
14
+ const body = document.querySelector('.prose-body');
15
+ const host = body?.getBoundingClientRect().width ?? 1;
16
+ const css = getComputedStyle(document.documentElement);
17
+ const probe = (v, fallback) => {
18
+ const raw = css.getPropertyValue(v).trim();
19
+ if (raw.endsWith('%'))
20
+ return (parseFloat(raw) / 100) * host;
21
+ if (raw.endsWith('rem'))
22
+ return parseFloat(raw) * 16;
23
+ return fallback;
24
+ };
25
+ const measure = probe('--measure-override', host);
26
+ const wide = probe('--wide-override', host);
27
+ const out = [{ key: 'full', label: '꽉', pct: 100 }];
28
+ if (wide < host - 1)
29
+ out.unshift({ key: 'wide', label: '넓게', pct: Math.round((wide / host) * 100) });
30
+ if (measure < host - 1)
31
+ out.unshift({ key: 'text', label: '본문폭', pct: Math.round((measure / host) * 100) });
32
+ return out;
33
+ }
34
+ export function AlignButtons({ editor, m, type }) {
35
+ const align = m.node.attrs.align ?? 'center';
36
+ const width = Number(m.node.attrs.width) || 100;
37
+ const full = width >= 100;
38
+ return (_jsx(_Fragment, { children: BLOCK_ALIGNS.map((a) => (_jsx("button", { type: "button", className: `tb-btn${align === a ? ' is-on' : ''}`, disabled: full, title: full ? '폭이 100% 면 정렬이 의미 없습니다' : `${ALIGN_LABEL[a]} 정렬`, "aria-label": `${ALIGN_LABEL[a]} 정렬`, onMouseDown: (e) => e.preventDefault(), onClick: () => editor.chain().focus().updateAttributes(type, { align: a }).run(), children: _jsx(Icon, { name: ALIGN_ICON[a] }) }, a))) }));
39
+ }
40
+ export function WidthSlider({ editor, m, type }) {
41
+ const w = Number(m.node.attrs.width) || 100;
42
+ return (_jsxs("label", { className: "tb-width-inline", children: ["\uD3ED", _jsx("input", { type: "range", min: 15, max: 100, step: 1, value: w, onChange: (e) => editor.chain().focus().updateAttributes(type, { width: Number(e.target.value) }).run() }), _jsx("b", { children: w }), _jsx("i", { children: "%" })] }));
43
+ }
44
+ export function WidthPresets({ editor, type }) {
45
+ return (_jsx(_Fragment, { children: presets().map((p) => (_jsx("button", { type: "button", className: "tb-btn", title: `크기 — ${p.label}`, onMouseDown: (e) => e.preventDefault(), onClick: () => editor.chain().focus().updateAttributes(type, { width: p.pct }).run(), children: _jsx("span", { className: "tb-txt", children: p.label }) }, p.key))) }));
46
+ }
47
+ /**
48
+ * 그 블록을 지운다.
49
+ *
50
+ * `deleteSelection()` 을 쓰면 **캡션에 커서가 있을 때 아무 일도 일어나지 않는다** — 지울 선택이 없기 때문.
51
+ * 지울 대상은 커서가 아니라 잡혀 있는 객체이므로 노드 범위를 직접 지운다.
52
+ */
53
+ export function delNode(editor, m) {
54
+ editor.chain().focus().deleteRange({ from: m.pos, to: m.pos + m.node.nodeSize }).run();
55
+ }
56
+ //# sourceMappingURL=blockSize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blockSize.js","sourceRoot":"","sources":["../../src/objects/blockSize.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { ObjectKind } from './registry.js';
2
+ export declare const codeObject: ObjectKind;
3
+ //# sourceMappingURL=code.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code.d.ts","sourceRoot":"","sources":["../../src/objects/code.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAe,MAAM,YAAY,CAAA;AAsFzD,eAAO,MAAM,UAAU,EAAE,UASxB,CAAA"}
@@ -0,0 +1,55 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { normalizeLang, parseRanges } from '@storkspear/post-editor-core/highlight';
3
+ import { CODE_THEMES, oneOf } from '@storkspear/post-editor-core/vocab';
4
+ import { Picker } from '../PickMenu.js';
5
+ import { LANG_ITEMS } from '../pickItems.js';
6
+ /**
7
+ * 속성을 바꾼다.
8
+ *
9
+ * **`focus()` 를 부르지 않는다.** 부르면 입력칸을 치는 도중에 포커스가 편집면으로 끌려가
10
+ * 한 글자마다 포커스가 풀리고, 한글은 조합이 끊겨 자음만 남는다.
11
+ * 선택 위치는 포커스와 무관하게 유지되므로 명령은 그대로 먹는다.
12
+ */
13
+ /** 「모양」 고르개의 항목. mac 은 언어 라벨을 감추므로 그 사실을 이름에 담는다 */
14
+ const THEME_ITEMS = [
15
+ { value: 'plain', label: '기본' },
16
+ { value: 'mac', label: '맥 창' },
17
+ { value: 'terminal', label: '터미널' },
18
+ ];
19
+ const setAttrs = (editor, attrs) => editor.chain().setCodeAttrs(attrs).run();
20
+ /**
21
+ * 코드 블록이 잡혔을 때의 **아랫줄** — 모양과 언어.
22
+ *
23
+ * 표가 아랫줄에 스타일·테두리·셀 색을 두는 것과 같은 자리다. 무엇이 잡혔든 고르는 것은
24
+ * 늘 같은 높이에 있어야 손이 헤매지 않는다.
25
+ *
26
+ * 블록 위에 뜨는 바에도 같은 둘이 있다. 겹쳐 보이지만 하는 일이 다르다 —
27
+ * 위의 바는 **그 블록에 붙어** 따라다니고(여러 개를 오갈 때), 아랫줄은 **자리가 고정**이다.
28
+ * 제목 입력칸은 여기 두지 않는다: 코드를 넣자마자 빈 칸부터 눈에 띄고, 손은 코드에
29
+ * 있는데 칸은 화면 위에 있어 무엇을 고치는 중인지 안 보였다.
30
+ */
31
+ function CodeRow({ editor, m }) {
32
+ const a = m.node.attrs;
33
+ return (_jsxs(_Fragment, { children: [_jsx(Picker, { title: "\uBAA8\uC591", className: "tb-codetheme", width: 150, items: THEME_ITEMS, value: oneOf(CODE_THEMES, a.theme, 'plain'), onPick: (v) => setAttrs(editor, { theme: v }) }), _jsx("span", { className: "tb-div" }), _jsx(Picker, { title: "\uC5B8\uC5B4", className: "tb-lang", width: 168, items: LANG_ITEMS, value: normalizeLang(a.language) ?? '', onPick: (v) => setAttrs(editor, { language: v || null }) }), _jsx("span", { className: "tb-div" }), _jsx("input", { className: "tb-input tb-code-title", placeholder: "\uC18C\uC2A4\uCF54\uB4DC Title", value: a.title ?? '', onChange: (e) => setAttrs(editor, { title: e.target.value || null }) })] }));
34
+ }
35
+ /**
36
+ * 코드 블록 위에 뜨는 작은 바 — 효과가 보이는 자리에서 고른다.
37
+ *
38
+ * 강조 해제도 여기 둔다. 강조는 본문의 줄 번호를 눌러서 켜는 것이라,
39
+ * 푸는 수단도 그 옆에 있어야 한다(아랫줄에 있으면 무엇을 푸는지가 안 보인다).
40
+ */
41
+ function CodeFloat({ editor, m }) {
42
+ const a = m.node.attrs;
43
+ const hlCount = parseRanges(a.highlight ?? '').size;
44
+ return (_jsxs(_Fragment, { children: [_jsx(Picker, { title: "\uBAA8\uC591", className: "tb-codetheme", width: 150, items: THEME_ITEMS, value: oneOf(CODE_THEMES, a.theme, 'plain'), onPick: (v) => setAttrs(editor, { theme: v }) }), _jsx("span", { className: "tb-div" }), _jsx(Picker, { title: "\uC5B8\uC5B4", className: "tb-lang", width: 168, items: LANG_ITEMS, value: normalizeLang(a.language) ?? '', onPick: (v) => setAttrs(editor, { language: v || null }) }), hlCount > 0 && (_jsxs(_Fragment, { children: [_jsx("span", { className: "tb-div" }), _jsx("button", { type: "button", className: "tb-btn", title: "\uAC15\uC870\uD55C \uC904 \uC804\uBD80 \uD574\uC81C", onMouseDown: (e) => e.preventDefault(), onClick: () => setAttrs(editor, { highlight: null }), children: _jsxs("span", { className: "tb-txt", children: ["\uAC15\uC870 ", hlCount, "\uC904 \uD574\uC81C"] }) })] }))] }));
45
+ }
46
+ export const codeObject = {
47
+ name: 'codeBlock',
48
+ label: '코드',
49
+ Row: CodeRow,
50
+ Float: CodeFloat,
51
+ phoneFloat: true,
52
+ /** 기준은 코드 블록의 겉상자 — 그 위에 바가 붙는다 */
53
+ anchor: (dom) => (dom.tagName.toLowerCase() === 'details' ? dom : dom.querySelector('details')) ?? dom,
54
+ };
55
+ //# sourceMappingURL=code.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code.js","sourceRoot":"","sources":["../../src/objects/code.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import { type DiagramEngine } from '@storkspear/post-editor-core/vocab';
2
+ import type { VariantRow } from '../VariantMenu.js';
3
+ import { type MermaidSeed } from '../seeds/mermaid.js';
4
+ import type { ObjectKind } from './registry.js';
5
+ export type DrawioSeed = 'aws' | 'azure' | 'ec2docker' | 'userflow';
6
+ export type DiagramSeed = MermaidSeed | DrawioSeed;
7
+ /** 고른 샘플을 노드 attrs 로. drawio 만 기다린다 */
8
+ export declare function loadDiagramSeed(seed: DiagramSeed): Promise<{
9
+ engine: DiagramEngine;
10
+ src: string;
11
+ svg: string;
12
+ }>;
13
+ /**
14
+ * 한 판에 여덟, 두 줄로 나눈다.
15
+ *
16
+ * 다섯은 글로 쓰고 셋은 캔버스를 연다 — 그 갈림이 안 보이면 「AWS 말고 다른 배치도는
17
+ * 어디서 그리나」를 또 묻게 된다. 실제로 나온 질문이다.
18
+ */
19
+ export declare const diagramRows: VariantRow<DiagramSeed>[];
20
+ export declare const diagramObject: ObjectKind;
21
+ //# sourceMappingURL=diagram.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagram.d.ts","sourceRoot":"","sources":["../../src/objects/diagram.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,oCAAoC,CAAA;AACvE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAEhD,OAAO,EAAiB,KAAK,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAClE,OAAO,KAAK,EAAE,UAAU,EAAe,MAAM,YAAY,CAAA;AAMzD,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,OAAO,GAAG,WAAW,GAAG,UAAU,CAAA;AACnE,MAAM,MAAM,WAAW,GAAG,WAAW,GAAG,UAAU,CAAA;AA0BlD,uCAAuC;AACvC,wBAAsB,eAAe,CAAC,IAAI,EAAE,WAAW,GACrD,OAAO,CAAC;IAAE,MAAM,EAAE,aAAa,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC,CAM7D;AAKD;;;;;GAKG;AACH,eAAO,MAAM,WAAW,EAAE,UAAU,CAAC,WAAW,CAAC,EAKhD,CAAA;AAiFD,eAAO,MAAM,aAAa,EAAE,UAa3B,CAAA"}