@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,109 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { useState } from 'react';
3
+ import { Icon } from '../Icon.js';
4
+ import { DrawioModal } from '../DrawioModal.js';
5
+ import { AlignButtons, WidthPresets, WidthSlider, delNode } from './blockSize.js';
6
+ import { Picker } from '../PickMenu.js';
7
+ import {} from '@storkspear/post-editor-core/vocab';
8
+ import { DIAGRAM_GLYPHS } from './diagramGlyphs.js';
9
+ import { MERMAID_SEEDS } from '../seeds/mermaid.js';
10
+ const SEED_LABEL = {
11
+ sequence: '시퀀스', order: '주문', payment: '결제·환불',
12
+ signup: '가입·인증', orderState: '주문 상태',
13
+ aws: 'AWS 인프라', azure: 'Azure 인프라', ec2docker: 'EC2 내부', userflow: '유저 플로우',
14
+ };
15
+ /**
16
+ * Draw.io 샘플은 **필요할 때만 내려받는다.**
17
+ *
18
+ * 셋 다 구운 SVG 를 같이 들고 있다(넣는 순간 그림이 보여야 하니까). 그게 수십 KB 라
19
+ * 정적으로 물면 다이어그램을 안 쓰는 사람도 첫 화면에서 받는다. mermaid 라이브러리를
20
+ * 같은 이유로 이미 떼어 놨다 — 같은 규칙을 따른다.
21
+ *
22
+ * 경로를 변수로 만들지 않고 **셋을 그대로 적는다.** 번들러가 정적으로 읽어야 쪼갠다.
23
+ */
24
+ const DRAWIO_SEEDS = {
25
+ aws: () => import('../seeds/drawio/aws.js').then((m) => m.aws),
26
+ azure: () => import('../seeds/drawio/azure.js').then((m) => m.azure),
27
+ ec2docker: () => import('../seeds/drawio/ec2docker.js').then((m) => m.ec2docker),
28
+ userflow: () => import('../seeds/drawio/userflow.js').then((m) => m.userflow),
29
+ };
30
+ const isDrawio = (s) => s in DRAWIO_SEEDS;
31
+ /** 고른 샘플을 노드 attrs 로. drawio 만 기다린다 */
32
+ export async function loadDiagramSeed(seed) {
33
+ if (isDrawio(seed)) {
34
+ const { src, svg } = await DRAWIO_SEEDS[seed]();
35
+ return { engine: 'drawio', src, svg };
36
+ }
37
+ return { engine: 'mermaid', src: MERMAID_SEEDS[seed], svg: '' };
38
+ }
39
+ const item = (v) => ({ value: v, label: SEED_LABEL[v], preview: DIAGRAM_GLYPHS[v] });
40
+ /**
41
+ * 한 판에 여덟, 두 줄로 나눈다.
42
+ *
43
+ * 다섯은 글로 쓰고 셋은 캔버스를 연다 — 그 갈림이 안 보이면 「AWS 말고 다른 배치도는
44
+ * 어디서 그리나」를 또 묻게 된다. 실제로 나온 질문이다.
45
+ */
46
+ export const diagramRows = [
47
+ { heading: 'Mermaid', hint: '글로 씁니다' },
48
+ item('sequence'), item('order'), item('payment'), item('signup'), item('orderState'),
49
+ { heading: 'Draw.io', hint: '캔버스에서 그립니다' },
50
+ item('aws'), item('azure'), item('ec2docker'), item('userflow'),
51
+ ];
52
+ /**
53
+ * 만드는 방식 — **고르는 칸**이다.
54
+ *
55
+ * 처음엔 알약 두 개(「글로」·「캔버스로」)를 나란히 놨다. 이 줄만 다른 줄과 무드가 달랐는데,
56
+ * 이유는 모양이 아니라 **어휘**였다: 이 툴바에서 「여러 값 중 하나」는 전부 고르는 칸이다
57
+ * (소스코드의 모양·언어, 글꼴·문단·크기). 알약은 켜짐/꺼짐을 말하는 물건이다.
58
+ *
59
+ * 이름은 **도구 이름 그대로** 쓴다. 「글로 쓰기 / 캔버스로 그리기」는 하는 일을 말하지만
60
+ * 「지금 이건 뭘로 그린 거냐」에 답을 못 한다 — 그게 실제로 나온 질문이었다.
61
+ */
62
+ const ENGINE_ITEMS = [
63
+ { value: 'mermaid', label: 'Mermaid' },
64
+ { value: 'drawio', label: 'Draw.io' },
65
+ ];
66
+ /**
67
+ * 다이어그램 도구줄.
68
+ *
69
+ * 폭·정렬은 사진과 **같은 컨트롤**을 쓴다(`blockSize`) — 폭 모델이 같기 때문이고,
70
+ * 각자 한 벌씩 만들면 한쪽만 고쳐져 어긋난다. 칸막이도 사진·소스코드와 같은 `tb-div` 다
71
+ * (`tb-sep`·`tb-lbl` 이라고 적어 뒀던 동안은 **스타일시트에 없는 이름**이라 아무것도 안 그려졌다 —
72
+ * 그래서 이 줄만 칸막이 없이 글자가 줄바꿈되며 떠 있었다).
73
+ */
74
+ function DiagramRow({ editor, m }) {
75
+ const engine = m.node.attrs.engine ?? 'mermaid';
76
+ const src = String(m.node.attrs.src ?? '');
77
+ const [drawing, setDrawing] = useState(false);
78
+ const setEngine = (next) => {
79
+ if (next === engine)
80
+ return;
81
+ if (src.trim() && !window.confirm('그리는 방식을 바꾸면 지금 원본은 쓸 수 없게 됩니다. 바꿀까요?'))
82
+ return;
83
+ editor.chain().focus().command(({ tr }) => {
84
+ tr.setNodeMarkup(m.pos, undefined, { ...m.node.attrs, engine: next, src: '', svg: '' });
85
+ return true;
86
+ }).run();
87
+ };
88
+ return (_jsxs(_Fragment, { children: [_jsx(Picker, { title: "\uADF8\uB9AC\uB294 \uBC29\uC2DD", className: "tb-dgmode", width: 170, items: ENGINE_ITEMS, value: engine, onPick: setEngine }), engine === 'drawio' && (_jsxs("button", { type: "button", className: "tb-btn", title: "Draw.io \uCE94\uBC84\uC2A4\uC5D0\uC11C \uACE0\uCE58\uAE30", onMouseDown: (ev) => ev.preventDefault(), onClick: () => setDrawing(true), children: [_jsx(Icon, { name: "pencil" }), _jsx("span", { className: "tb-txt", children: src.trim() ? '고치기' : '그리기' })] })), _jsx("span", { className: "tb-div" }), _jsx(AlignButtons, { editor: editor, m: m, type: "diagram" }), _jsx(WidthPresets, { editor: editor, type: "diagram" }), _jsx(WidthSlider, { editor: editor, m: m, type: "diagram" }), _jsx("span", { className: "tb-div" }), _jsx("button", { type: "button", className: "tb-btn", title: "\uB2E4\uC774\uC5B4\uADF8\uB7A8 \uC0AD\uC81C", onMouseDown: (ev) => ev.preventDefault(), onClick: () => delNode(editor, m), children: _jsx(Icon, { name: "trash" }) }), drawing && (_jsx(DrawioModal, { xml: src, onCancel: () => setDrawing(false), onDone: ({ xml, svg }) => {
89
+ setDrawing(false);
90
+ editor.chain().focus().command(({ tr }) => {
91
+ tr.setNodeMarkup(m.pos, undefined, { ...m.node.attrs, src: xml, svg });
92
+ return true;
93
+ }).run();
94
+ } }))] }));
95
+ }
96
+ export const diagramObject = {
97
+ name: 'diagram',
98
+ label: '다이어그램',
99
+ Row: DiagramRow,
100
+ /**
101
+ * `allowsText` 를 **안 켠다** — 줄을 통째로 바꾼다.
102
+ *
103
+ * 켜 두면 글자 서식줄(서체·크기·B·I·U·정렬·목록) **뒤에 덧붙어서** 한 줄에 스무 개가
104
+ * 넘게 늘어서고 넘쳐 잘린다(실제로 「도면」 글자가 왼쪽으로 잘려 나갔다).
105
+ * 다이어그램은 그림이지 글이 아니다 — 코드 블록도 같은 이유로 줄을 바꾼다.
106
+ */
107
+ anchor: (dom) => (dom.tagName.toLowerCase() === 'figure' ? dom : dom.querySelector('figure')) ?? dom,
108
+ };
109
+ //# sourceMappingURL=diagram.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagram.js","sourceRoot":"","sources":["../../src/objects/diagram.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ export declare const DIAGRAM_GLYPHS: {
2
+ readonly sequence: import("react").JSX.Element;
3
+ readonly order: import("react").JSX.Element;
4
+ readonly payment: import("react").JSX.Element;
5
+ readonly signup: import("react").JSX.Element;
6
+ readonly orderState: import("react").JSX.Element;
7
+ readonly aws: import("react").JSX.Element;
8
+ readonly azure: import("react").JSX.Element;
9
+ readonly ec2docker: import("react").JSX.Element;
10
+ readonly userflow: import("react").JSX.Element;
11
+ };
12
+ //# sourceMappingURL=diagramGlyphs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagramGlyphs.d.ts","sourceRoot":"","sources":["../../src/objects/diagramGlyphs.tsx"],"names":[],"mappings":"AA4KA,eAAO,MAAM,cAAc;;;;;;;;;;CAMjB,CAAA"}
@@ -0,0 +1,49 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /* 색 — 플랫폼 브랜드 색에서 가져오되 로고는 안 그린다 */
3
+ const AWS = '#F90';
4
+ const AZURE = '#0078D4';
5
+ const DOCKER = '#2496ED';
6
+ const INK = '#3a3a3a';
7
+ /** 60×34 한 칸. 선 두께를 한 곳에서 정해야 여덟 개의 무게가 같다 */
8
+ function G({ children, c = INK }) {
9
+ return (_jsx("svg", { viewBox: "0 0 60 34", width: "100%", height: "34", style: { display: 'block' }, fill: "none", stroke: c, strokeWidth: "1.1", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", focusable: "false", children: children }));
10
+ }
11
+ /** 화살촉 — `marker` 를 쓰면 id 가 문서에 여덟 번 중복된다. 작은 삼각형을 직접 놓는다 */
12
+ const TIP_D = {
13
+ r: (x, y) => `M${x - 3} ${y - 2}L${x} ${y}L${x - 3} ${y + 2}Z`,
14
+ d: (x, y) => `M${x - 2} ${y - 3}L${x} ${y}L${x + 2} ${y - 3}Z`,
15
+ u: (x, y) => `M${x - 2} ${y + 3}L${x} ${y}L${x + 2} ${y + 3}Z`,
16
+ };
17
+ const Tip = ({ x, y, dir = 'r', c = INK }) => (_jsx("path", { d: TIP_D[dir](x, y), fill: c, stroke: "none" }));
18
+ /* ── Mermaid 다섯 ─────────────────────────────────────────────── */
19
+ /** 시퀀스 — 생명선 셋에 화살표 둘. 이 모양은 다른 넷과 절대 안 헷갈린다 */
20
+ const sequence = (_jsxs(G, { children: [_jsx("rect", { x: "4", y: "3", width: "13", height: "6", rx: "1.5" }), _jsx("rect", { x: "23.5", y: "3", width: "13", height: "6", rx: "1.5" }), _jsx("rect", { x: "43", y: "3", width: "13", height: "6", rx: "1.5" }), _jsx("path", { d: "M10.5 9.5V31M30 9.5V31M49.5 9.5V31", strokeDasharray: "2 2.5", opacity: ".55" }), _jsx("path", { d: "M10.5 16H27" }), _jsx(Tip, { x: 30, y: 16 }), _jsx("path", { d: "M30 24H46.5" }), _jsx(Tip, { x: 49.5, y: 24 })] }));
21
+ /** 이커머스 주문 — 아래로 내려가며 두 번 갈라지는 나무 */
22
+ const order = (_jsxs(G, { children: [_jsx("rect", { x: "22", y: "2", width: "16", height: "6", rx: "1.5" }), _jsx("path", { d: "M30 8v3.5" }), _jsx(Tip, { x: 30, y: 13, dir: "d" }), _jsx("path", { d: "M24 17l6-4 6 4-6 4z" }), _jsx("path", { d: "M30 21v2.5M30 23.5H14v2.5M30 23.5h16v2.5" }), _jsx(Tip, { x: 14, y: 28, dir: "d" }), _jsx(Tip, { x: 46, y: 28, dir: "d" }), _jsx("rect", { x: "7", y: "28", width: "14", height: "5", rx: "2.5" }), _jsx("rect", { x: "39", y: "28", width: "14", height: "5", rx: "2.5" })] }));
23
+ /** 결제·환불 — 마름모 하나에서 셋으로 부챗살처럼 갈린다 */
24
+ const payment = (_jsxs(G, { children: [_jsx("rect", { x: "3", y: "14", width: "12", height: "6", rx: "1.5" }), _jsx("path", { d: "M15 17h3.5" }), _jsx(Tip, { x: 21, y: 17 }), _jsx("path", { d: "M21 17l6-5 6 5-6 5z" }), _jsx("path", { d: "M33 17h4M37 17V6h6M37 17h6M37 17v11h6" }), _jsx(Tip, { x: 46, y: 6 }), _jsx(Tip, { x: 46, y: 17 }), _jsx(Tip, { x: 46, y: 28 }), _jsx("rect", { x: "46", y: "3.5", width: "11", height: "5", rx: "2.5" }), _jsx("rect", { x: "46", y: "14.5", width: "11", height: "5", rx: "2.5" }), _jsx("rect", { x: "46", y: "25.5", width: "11", height: "5", rx: "2.5" })] }));
25
+ /** 회원 가입·인증 — 두 길(이메일·소셜)이 하나로 합쳐진다 */
26
+ const signup = (_jsxs(G, { children: [_jsx("rect", { x: "3", y: "3.5", width: "13", height: "5.5", rx: "1.5" }), _jsx("rect", { x: "3", y: "24.5", width: "13", height: "5.5", rx: "1.5" }), _jsx("path", { d: "M16 6.5h7v10.5M16 27.5h7V17h4" }), _jsx(Tip, { x: 30, y: 17 }), _jsx("path", { d: "M30 12.5l6 4.5-6 4.5z", transform: "translate(2 0)", opacity: "0" }), _jsx("rect", { x: "30", y: "14", width: "13", height: "6", rx: "1.5" }), _jsx("path", { d: "M43 17h3.5" }), _jsx(Tip, { x: 49, y: 17 }), _jsx("rect", { x: "49", y: "14", width: "8", height: "6", rx: "3" })] }));
27
+ /** 배송·주문 상태 — 알약이 줄로 이어지고, 하나는 되돌아온다 */
28
+ const orderState = (_jsxs(G, { children: [_jsx("rect", { x: "3", y: "9", width: "14", height: "7", rx: "3.5" }), _jsx("path", { d: "M17 12.5h4" }), _jsx(Tip, { x: 23, y: 12.5 }), _jsx("rect", { x: "23", y: "9", width: "14", height: "7", rx: "3.5" }), _jsx("path", { d: "M37 12.5h4" }), _jsx(Tip, { x: 43, y: 12.5 }), _jsx("rect", { x: "43", y: "9", width: "14", height: "7", rx: "3.5" }), _jsx("path", { d: "M50 16v7H10v-3.5", strokeDasharray: "2.5 2" }), _jsx(Tip, { x: 10, y: 16, dir: "u" })] }));
29
+ /* ── Draw.io 셋 ───────────────────────────────────────────────── */
30
+ /** 밖에서 들어와 점선 울타리(VPC·VNet) 안의 자원 셋으로 — 클라우드 배치도의 생김새 */
31
+ const cloudPlan = (c) => (_jsxs(G, { c: c, children: [_jsx("circle", { cx: "30", cy: "5.2", r: "3.2" }), _jsx("path", { d: "M30 8.4v3.4" }), _jsx(Tip, { x: 30, y: 13, dir: "d", c: c }), _jsx("rect", { x: "4", y: "14", width: "52", height: "17", rx: "2", strokeDasharray: "3 2.4" }), _jsx("rect", { x: "9", y: "18.5", width: "11", height: "8", rx: "1.5" }), _jsx("rect", { x: "24.5", y: "18.5", width: "11", height: "8", rx: "1.5" }), _jsx("rect", { x: "40", y: "18.5", width: "11", height: "8", rx: "1.5" })] }));
32
+ /** 상자 안의 상자 — 인스턴스 한 대 안에서 도는 컨테이너들 */
33
+ const ec2docker = (_jsxs(G, { c: DOCKER, children: [_jsx("rect", { x: "4", y: "4", width: "52", height: "26", rx: "2.5" }), _jsx("path", { d: "M4 10h52", opacity: ".55" }), _jsx("rect", { x: "9", y: "14", width: "10", height: "11", rx: "1.5" }), _jsx("rect", { x: "22", y: "14", width: "10", height: "11", rx: "1.5" }), _jsx("rect", { x: "35", y: "14", width: "10", height: "11", rx: "1.5" }), _jsx("rect", { x: "48", y: "18", width: "4", height: "7", rx: "1", opacity: ".55" })] }));
34
+ /**
35
+ * 유저 플로우 — 여기만 **면을 칠한다.**
36
+ *
37
+ * 나머지 Draw.io 둘은 울타리와 자원을 선으로 그려 「배치도」를 말한다. 이건 배치도가
38
+ * 아니라 화면 흐름이고, 그 그림의 정체성이 **도형이 뜻을 갖는 색깔**이라서 썸네일도
39
+ * 같은 말을 해야 한다. 선만 그리면 옆의 둘과 구별이 안 된다.
40
+ */
41
+ const userflow = (_jsxs("svg", { viewBox: "0 0 60 34", width: "100%", height: "34", style: { display: 'block' }, "aria-hidden": "true", focusable: "false", children: [_jsx("rect", { x: "2", y: "12", width: "14", height: "10", rx: "5", fill: "#A78BFA" }), _jsx("path", { d: "M20 8.5h1.5", stroke: "#9aa0aa", strokeWidth: "1.1" }), _jsx("path", { d: "M27 9l7 8-7 8-7-8z", fill: "#FBBF24" }), _jsx("path", { d: "M16 17h3.5M34 17h4", stroke: "#9aa0aa", strokeWidth: "1.1" }), _jsx("rect", { x: "38", y: "11", width: "13", height: "12", rx: "2.5", fill: "#60A5FA" }), _jsx("path", { d: "M27 25v4h9", stroke: "#9aa0aa", strokeWidth: "1.1", fill: "none" }), _jsx("path", { d: "M38 26.5h11l-2.5 6H35.5z", fill: "#22C55E" })] }));
42
+ export const DIAGRAM_GLYPHS = {
43
+ sequence, order, payment, signup, orderState,
44
+ aws: cloudPlan(AWS),
45
+ azure: cloudPlan(AZURE),
46
+ ec2docker,
47
+ userflow,
48
+ };
49
+ //# sourceMappingURL=diagramGlyphs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagramGlyphs.js","sourceRoot":"","sources":["../../src/objects/diagramGlyphs.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import { type VariantItem } from '../VariantMenu.js';
2
+ import { type DividerKind, type DividerTone, type DividerWeight } from '@storkspear/post-editor-core/vocab';
3
+ import type { ObjectKind } from './registry.js';
4
+ export declare const DIVIDER_LABEL: Record<DividerKind, string>;
5
+ /** 미리보기는 진짜 hr — prose.css 가 본문과 똑같이 그린다 */
6
+ export declare const dividerItems: VariantItem<DividerKind>[];
7
+ /**
8
+ * 두께·색 줄 — 모양 메뉴 **바닥에** 붙는다.
9
+ *
10
+ * 축이 넷(모양·두께·색·정렬)이라 각각 드롭다운을 주면 네 번 열어야 한다.
11
+ * 자주 갈아 보는 모양은 격자로, 한 번 정하면 잘 안 바꾸는 두께·색은 같은 메뉴 바닥에 둔다.
12
+ * 정렬만 아랫줄에 남긴다 — 늘 보여야 하고 메뉴를 안 열고 누르는 것이 낫다.
13
+ */
14
+ export declare function DividerExtras({ kind, weight, tone, onWeight, onTone }: {
15
+ kind: DividerKind;
16
+ weight: DividerWeight | null;
17
+ tone: DividerTone | null;
18
+ onWeight: (w: DividerWeight | null) => void;
19
+ onTone: (t: DividerTone | null) => void;
20
+ }): import("react").JSX.Element;
21
+ export declare const dividerObject: ObjectKind;
22
+ //# sourceMappingURL=divider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"divider.d.ts","sourceRoot":"","sources":["../../src/objects/divider.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAe,KAAK,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC9D,OAAO,EAEY,KAAK,WAAW,EAAE,KAAK,WAAW,EAAE,KAAK,aAAa,EACxE,MAAM,oCAAoC,CAAA;AAC3C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAE5C,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAGrD,CAAA;AAED,4CAA4C;AAC5C,eAAO,MAAM,YAAY,EAAE,WAAW,CAAC,WAAW,CAAC,EAIhD,CAAA;AAgBH;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE;IACtE,IAAI,EAAE,WAAW,CAAA;IACjB,MAAM,EAAE,aAAa,GAAG,IAAI,CAAA;IAC5B,IAAI,EAAE,WAAW,GAAG,IAAI,CAAA;IACxB,QAAQ,EAAE,CAAC,CAAC,EAAE,aAAa,GAAG,IAAI,KAAK,IAAI,CAAA;IAC3C,MAAM,EAAE,CAAC,CAAC,EAAE,WAAW,GAAG,IAAI,KAAK,IAAI,CAAA;CACxC,+BA+BA;AA+CD,eAAO,MAAM,aAAa,EAAE,UAI3B,CAAA"}
@@ -0,0 +1,60 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { useRef, useState } from 'react';
3
+ import { Icon } from '../Icon.js';
4
+ import { VariantMenu } from '../VariantMenu.js';
5
+ import { BLOCK_ALIGNS, DIVIDER_KINDS, DIVIDER_TONES, DIVIDER_WEIGHTS, } from '@storkspear/post-editor-core/vocab';
6
+ export const DIVIDER_LABEL = {
7
+ short: '짧은 선', long: '긴 선', dots3: '점 세 개', dots: '점선',
8
+ wave: '물결', diamond: '다이아몬드', slash: '빗금', vertical: '세로선',
9
+ };
10
+ /** 미리보기는 진짜 hr — prose.css 가 본문과 똑같이 그린다 */
11
+ export const dividerItems = DIVIDER_KINDS.map((k) => ({
12
+ value: k,
13
+ label: DIVIDER_LABEL[k],
14
+ preview: _jsx("hr", { "data-kind": k, "data-align": "center", style: { height: '1.6rem', margin: 0 } }),
15
+ }));
16
+ const ALIGN_ICON = {
17
+ left: 'alignLeft', center: 'alignCenter', right: 'alignRight',
18
+ };
19
+ const ALIGN_LABEL = { left: '왼쪽', center: '가운데', right: '오른쪽' };
20
+ const WEIGHT_LABEL = { medium: '중간', bold: '굵게' };
21
+ const TONE_LABEL = {
22
+ faint: '아주 연하게', light: '연하게', gray: '회색', dark: '진한 회색', black: '검정',
23
+ };
24
+ /** 견본 동그라미 색 — prose.css 의 --hr-ink 와 **같은 값**이어야 골라 보고 고른 대로 나온다 */
25
+ const TONE_SWATCH = {
26
+ faint: '#e6e4de', light: '#c9c6bd', gray: '#8a8a8a', dark: '#5b5b5b', black: '#1a1a1a',
27
+ };
28
+ /**
29
+ * 두께·색 줄 — 모양 메뉴 **바닥에** 붙는다.
30
+ *
31
+ * 축이 넷(모양·두께·색·정렬)이라 각각 드롭다운을 주면 네 번 열어야 한다.
32
+ * 자주 갈아 보는 모양은 격자로, 한 번 정하면 잘 안 바꾸는 두께·색은 같은 메뉴 바닥에 둔다.
33
+ * 정렬만 아랫줄에 남긴다 — 늘 보여야 하고 메뉴를 안 열고 누르는 것이 낫다.
34
+ */
35
+ export function DividerExtras({ kind, weight, tone, onWeight, onTone }) {
36
+ // 두께는 **선 모양에만** 뜻이 있다. 점·무늬에서 누르면 아무 일도 안 일어나므로 아예 잠근다 —
37
+ // 「눌렀는데 안 변한다」가 제일 나쁜 상태다.
38
+ const weighted = kind === 'short' || kind === 'long' || kind === 'vertical';
39
+ return (_jsxs(_Fragment, { children: [_jsxs("div", { className: "vm-axis", "aria-label": "\uB450\uAED8", children: [_jsx("span", { className: "vm-axis-name", children: "\uB450\uAED8" }), _jsx("button", { type: "button", className: `vm-chip${weight == null ? ' is-on' : ''}`, disabled: !weighted, title: weighted ? '얇게 (1px)' : '점·무늬에는 두께가 없습니다', onMouseDown: (e) => e.preventDefault(), onClick: () => onWeight(null), children: "\uC587\uAC8C" }), DIVIDER_WEIGHTS.map((w) => (_jsx("button", { type: "button", className: `vm-chip${weight === w ? ' is-on' : ''}`, disabled: !weighted, title: weighted ? WEIGHT_LABEL[w] : '점·무늬에는 두께가 없습니다', onMouseDown: (e) => e.preventDefault(), onClick: () => onWeight(w), children: WEIGHT_LABEL[w] }, w)))] }), _jsxs("div", { className: "vm-axis", "aria-label": "\uC0C9", children: [_jsx("span", { className: "vm-axis-name", children: "\uC0C9" }), _jsx("button", { type: "button", className: `vm-chip${tone == null ? ' is-on' : ''}`, title: "\uBAA8\uC591\uBCC4 \uAE30\uBCF8\uC0C9", onMouseDown: (e) => e.preventDefault(), onClick: () => onTone(null), children: "\uAE30\uBCF8" }), DIVIDER_TONES.map((t) => (_jsx("button", { type: "button", className: `vm-dot${tone === t ? ' is-on' : ''}`, title: TONE_LABEL[t], "aria-label": TONE_LABEL[t], "aria-pressed": tone === t, onMouseDown: (e) => e.preventDefault(), onClick: () => onTone(t), children: _jsx("i", { style: { background: TONE_SWATCH[t] } }) }, t)))] })] }));
40
+ }
41
+ /** 구분선이 선택됐을 때의 아랫줄 — 모양·두께·색 메뉴 + 정렬 */
42
+ function DividerRow({ editor, m }) {
43
+ const [menu, setMenu] = useState(false);
44
+ const anchor = useRef(null);
45
+ const kind = m.node.attrs.kind ?? 'short';
46
+ const align = m.node.attrs.align ?? 'center';
47
+ const weight = m.node.attrs.weight ?? null;
48
+ const tone = m.node.attrs.tone ?? null;
49
+ const c = () => editor.chain().focus();
50
+ return (_jsxs(_Fragment, { children: [_jsxs("div", { className: "tb-anchor", ref: anchor, children: [_jsxs("button", { type: "button", className: "tb-btn tb-caret-btn", title: "\uAD6C\uBD84\uC120 \uBAA8\uC591\u00B7\uB450\uAED8\u00B7\uC0C9", onMouseDown: (e) => e.preventDefault(), onClick: () => setMenu((v) => !v), children: [_jsx("span", { className: "tb-txt", children: DIVIDER_LABEL[kind] }), _jsx("i", { className: "tb-caret" })] }), menu && (_jsx(VariantMenu, { ariaLabel: "\uAD6C\uBD84\uC120 \uBAA8\uC591", columns: 4, anchorRef: anchor, items: dividerItems, value: kind, onPick: (k) => c().setDividerAttrs({ kind: k }).run(),
51
+ /* 두께·색은 고르고 나서 **메뉴를 닫지 않는다** — 갈아 보며 맞추는 값이라
52
+ 한 번 누를 때마다 닫히면 다시 여는 손이 더 든다 */
53
+ onClose: () => setMenu(false), footer: _jsx(DividerExtras, { kind: kind, weight: weight, tone: tone, onWeight: (w) => c().setDividerAttrs({ weight: w }).run(), onTone: (t) => c().setDividerAttrs({ tone: t }).run() }) }))] }), _jsx("span", { className: "tb-div" }), BLOCK_ALIGNS.map((a) => (_jsx("button", { type: "button", className: `tb-btn${align === a ? ' is-on' : ''}`, title: `${ALIGN_LABEL[a]} 정렬`, "aria-label": `${ALIGN_LABEL[a]} 정렬`, onMouseDown: (e) => e.preventDefault(), onClick: () => c().setDividerAttrs({ align: a }).run(), children: _jsx(Icon, { name: ALIGN_ICON[a] }) }, a)))] }));
54
+ }
55
+ export const dividerObject = {
56
+ name: 'horizontalRule',
57
+ label: '구분선',
58
+ Row: DividerRow,
59
+ };
60
+ //# sourceMappingURL=divider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"divider.js","sourceRoot":"","sources":["../../src/objects/divider.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { ObjectKind } from './registry.js';
2
+ export declare const figureObject: ObjectKind;
3
+ //# sourceMappingURL=figure.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"figure.d.ts","sourceRoot":"","sources":["../../src/objects/figure.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,UAAU,EAAe,MAAM,YAAY,CAAA;AAoHzD,eAAO,MAAM,YAAY,EAAE,UAY1B,CAAA"}
@@ -0,0 +1,62 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useRef, useState } from 'react';
3
+ import { Icon } from '../Icon.js';
4
+ import { UrlPrompt } from '../UrlPrompt.js';
5
+ import {} from '@storkspear/post-editor-core/vocab';
6
+ import { rowNeighbor } from '@storkspear/post-editor-core/extensions/ImageRow';
7
+ import { AlignButtons, WidthPresets, WidthSlider, delNode } from './blockSize.js';
8
+ const CAPTION_LABEL = { below: '캡션 아래', above: '캡션 위' };
9
+ /** 이 사진이 사진 행 안에 있는가 */
10
+ function inRow(editor, m) {
11
+ try {
12
+ return editor.state.doc.resolve(m.pos).parent.type.name === 'imageRow';
13
+ }
14
+ catch {
15
+ return false;
16
+ }
17
+ }
18
+ /** 이미지 위에 뜨는 작은 바 — 효과가 보이는 자리에서 조작 */
19
+ function FigureFloat({ editor, m }) {
20
+ // 행 안에서는 폭·정렬을 **행이** 정한다 — 사진마다 주면 서로 싸운다
21
+ if (inRow(editor, m))
22
+ return _jsx(RowMemberFloat, { editor: editor, m: m });
23
+ return (_jsxs(_Fragment, { children: [_jsx(AlignButtons, { editor: editor, m: m, type: "figure" }), _jsx("span", { className: "tb-div" }), _jsx(WidthPresets, { editor: editor, type: "figure" })] }));
24
+ }
25
+ /**
26
+ * 행 안의 사진 위에 뜨는 바 — 자리 옮기기와 빼내기.
27
+ * 폭·정렬은 행의 몫이라 여기 없다.
28
+ */
29
+ function RowMemberFloat({ editor, m }) {
30
+ const c = () => editor.chain().focus();
31
+ return (_jsxs(_Fragment, { children: [_jsx("button", { type: "button", className: "tb-btn", title: "\uC67C\uCABD\uC73C\uB85C", "aria-label": "\uC67C\uCABD\uC73C\uB85C", onMouseDown: (e) => e.preventDefault(), onClick: () => c().moveInRow({ pos: m.pos, dir: 'left' }).run(), children: _jsx(Icon, { name: "alignLeft" }) }), _jsx("button", { type: "button", className: "tb-btn", title: "\uC624\uB978\uCABD\uC73C\uB85C", "aria-label": "\uC624\uB978\uCABD\uC73C\uB85C", onMouseDown: (e) => e.preventDefault(), onClick: () => c().moveInRow({ pos: m.pos, dir: 'right' }).run(), children: _jsx(Icon, { name: "alignRight" }) }), _jsx("span", { className: "tb-div" }), _jsxs("button", { type: "button", className: "tb-btn", title: "\uD589\uC5D0\uC11C \uBE7C\uB0B4\uAE30", onMouseDown: (e) => e.preventDefault(), onClick: () => c().liftFromRow({ pos: m.pos }).run(), children: [_jsx(Icon, { name: "rowLift" }), _jsx("span", { className: "tb-txt", children: "\uBE7C\uB0B4\uAE30" })] }), _jsxs("button", { type: "button", className: "tb-btn", title: "\uC774 \uD589 \uC804\uCCB4\uB97C \uACE0\uB974\uAE30", onMouseDown: (e) => e.preventDefault(), onClick: () => c().selectImageRow({ pos: m.pos }).run(), children: [_jsx(Icon, { name: "rowMerge" }), _jsx("span", { className: "tb-txt", children: "\uD589" })] })] }));
32
+ }
33
+ /** 「한 행으로」 — 붙일 이웃이 있을 때만 켜진다 */
34
+ function MergeButton({ editor, m }) {
35
+ const prev = rowNeighbor(editor.state, m.pos, 'prev');
36
+ const next = prev ? null : rowNeighbor(editor.state, m.pos, 'next');
37
+ const dir = prev ? 'prev' : next ? 'next' : null;
38
+ return (_jsxs("button", { type: "button", className: "tb-btn", disabled: !dir, title: dir === 'prev' ? '위 사진과 한 행으로' : dir === 'next' ? '아래 사진과 한 행으로' : '붙일 사진이 위아래에 없습니다', onMouseDown: (e) => e.preventDefault(), onClick: () => dir && editor.chain().focus().mergeWithNeighbor({ pos: m.pos, dir }).run(), children: [_jsx(Icon, { name: "rowMerge" }), _jsx("span", { className: "tb-txt", children: "\uD55C \uD589\uC73C\uB85C" })] }));
39
+ }
40
+ function FigureRow({ editor, m }) {
41
+ const [link, setLink] = useState(false);
42
+ const linkAnchor = useRef(null);
43
+ const a = m.node.attrs;
44
+ const inside = inRow(editor, m);
45
+ const upd = (attrs) => editor.chain().focus().updateAttributes('figure', attrs).run();
46
+ return (_jsxs(_Fragment, { children: [inside ? (_jsx(RowMemberFloat, { editor: editor, m: m })) : (_jsxs(_Fragment, { children: [_jsx(AlignButtons, { editor: editor, m: m, type: "figure" }), _jsx("span", { className: "tb-div" }), _jsx(WidthSlider, { editor: editor, m: m, type: "figure" }), _jsx("span", { className: "tb-div" }), _jsx(MergeButton, { editor: editor, m: m })] })), _jsx("span", { className: "tb-div" }), _jsx("button", { type: "button", className: "tb-btn", title: "\uCEA1\uC158 \uC704\uCE58 \uBC14\uAFB8\uAE30", onMouseDown: (e) => e.preventDefault(), onClick: () => upd({ caption: a.caption === 'above' ? 'below' : 'above' }), children: _jsx("span", { className: "tb-txt", children: CAPTION_LABEL[a.caption ?? 'below'] }) }), _jsxs("div", { className: "tb-anchor", ref: linkAnchor, children: [_jsx("button", { type: "button", className: `tb-btn${a.href || link ? ' is-on' : ''}`, title: "\uC774\uBBF8\uC9C0\uC5D0 \uB9C1\uD06C \uAC78\uAE30", onMouseDown: (e) => e.preventDefault(), onClick: () => setLink((v) => !v), children: _jsx(Icon, { name: "link" }) }), link && (_jsx(UrlPrompt, { label: "\uC774\uBBF8\uC9C0\uB97C \uB204\uB974\uBA74 \uAC08 \uC8FC\uC18C", placeholder: "https://", initial: a.href ?? '', hint: a.href ? '비우고 「걸기」를 누르면 링크가 풀립니다' : undefined, submitLabel: "\uAC78\uAE30", anchorRef: linkAnchor, onClose: () => setLink(false), onSubmit: (url) => { upd({ href: url === '' ? null : url }); return true; } }))] }), _jsx("span", { className: "tb-div" }), _jsx("button", { type: "button", className: "tb-btn", title: "\uC774\uBBF8\uC9C0 \uC0AD\uC81C", onMouseDown: (e) => e.preventDefault(), onClick: () => delNode(editor, m), children: _jsx(Icon, { name: "trash" }) })] }));
47
+ }
48
+ export const figureObject = {
49
+ name: 'figure',
50
+ label: '사진',
51
+ allowsText: true,
52
+ Row: FigureRow,
53
+ Float: FigureFloat,
54
+ phoneFloat: true,
55
+ anchor: (dom) => {
56
+ if (dom.tagName.toLowerCase() === 'figure')
57
+ return dom;
58
+ const inner = dom.querySelector('figure');
59
+ return inner instanceof HTMLElement ? inner : dom;
60
+ },
61
+ };
62
+ //# sourceMappingURL=figure.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"figure.js","sourceRoot":"","sources":["../../src/objects/figure.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { ObjectKind } from './registry.js';
2
+ export declare const imageRowObject: ObjectKind;
3
+ //# sourceMappingURL=imageRow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"imageRow.d.ts","sourceRoot":"","sources":["../../src/objects/imageRow.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAe,MAAM,YAAY,CAAA;AAgDzD,eAAO,MAAM,cAAc,EAAE,UAS5B,CAAA"}
@@ -0,0 +1,29 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { Icon } from '../Icon.js';
3
+ import { AlignButtons, WidthPresets, WidthSlider, delNode } from './blockSize.js';
4
+ /**
5
+ * 사진 행의 도구 — 행은 **폭·정렬·풀기**만 갖는다.
6
+ *
7
+ * 행 안의 사진을 어떻게 할지(자리 옮기기·빼내기)는 사진 쪽 도구에 있다.
8
+ * 세 장일 때 행 수준의 「순서 바꾸기」는 무엇이 어디로 가는지 말할 수 없기 때문이다.
9
+ */
10
+ function SplitButton({ editor, m }) {
11
+ return (_jsxs("button", { type: "button", className: "tb-btn", title: "\uD589 \uD480\uAE30 \u2014 \uC0AC\uC9C4\uC744 \uB530\uB85C\uB530\uB85C", onMouseDown: (e) => e.preventDefault(), onClick: () => editor.chain().focus().splitImageRow({ pos: m.pos }).run(), children: [_jsx(Icon, { name: "rowSplit" }), _jsx("span", { className: "tb-txt", children: "\uD589 \uD480\uAE30" })] }));
12
+ }
13
+ function ImageRowFloat({ editor, m }) {
14
+ return (_jsxs(_Fragment, { children: [_jsx(AlignButtons, { editor: editor, m: m, type: "imageRow" }), _jsx("span", { className: "tb-div" }), _jsx(WidthPresets, { editor: editor, type: "imageRow" }), _jsx("span", { className: "tb-div" }), _jsx(SplitButton, { editor: editor, m: m })] }));
15
+ }
16
+ function ImageRowRow({ editor, m }) {
17
+ return (_jsxs(_Fragment, { children: [_jsx(AlignButtons, { editor: editor, m: m, type: "imageRow" }), _jsx("span", { className: "tb-div" }), _jsx(WidthSlider, { editor: editor, m: m, type: "imageRow" }), _jsx("span", { className: "tb-div" }), _jsx(SplitButton, { editor: editor, m: m }), _jsx("span", { className: "tb-div" }), _jsx("button", { type: "button", className: "tb-btn", title: "\uD589 \uC804\uCCB4 \uC0AD\uC81C", onMouseDown: (e) => e.preventDefault(), onClick: () => delNode(editor, m), children: _jsx(Icon, { name: "trash" }) })] }));
18
+ }
19
+ export const imageRowObject = {
20
+ name: 'imageRow',
21
+ label: '사진 행',
22
+ /** 행 자체는 글을 품지 않는다(글은 자식 사진의 캡션에 있다) — 글자 서식줄을 붙이지 않는다 */
23
+ allowsText: false,
24
+ Row: ImageRowRow,
25
+ Float: ImageRowFloat,
26
+ /** 폰에서는 행이 세로로 떨어져 「행」이라는 감각이 없다 — 떠 있는 바는 안 띄운다 */
27
+ phoneFloat: false,
28
+ };
29
+ //# sourceMappingURL=imageRow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"imageRow.js","sourceRoot":"","sources":["../../src/objects/imageRow.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAC9B,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAG9E;;;;;GAKG;AACH,SAAS,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC,EAAsC;IACpE,OAAO,CACL,kBAAQ,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAC,QAAQ,EAAC,KAAK,EAAC,wEAAiB,EAC9D,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,EAAE,EACtC,OAAO,EAAE,GAAG,EAAE,CAAE,MAAM,CAAC,KAAK,EAAE,CAAC,KAAK,EAAU,CAAC,aAAa,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,aAClF,KAAC,IAAI,IAAC,IAAI,EAAC,UAAU,GAAG,EAAA,eAAM,SAAS,EAAC,QAAQ,oCAAY,IACrD,CACV,CAAA;AACH,CAAC;AAED,SAAS,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC,EAAsC;IACtE,OAAO,CACL,8BACE,KAAC,YAAY,IAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAC,UAAU,GAAG,EACtD,eAAM,SAAS,EAAC,QAAQ,GAAG,EAC3B,KAAC,YAAY,IAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAC,UAAU,GAAG,EAChD,eAAM,SAAS,EAAC,QAAQ,GAAG,EAC3B,KAAC,WAAW,IAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,GAAI,IAEpC,CACJ,CAAA;AACH,CAAC;AAED,SAAS,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC,EAAsC;IACpE,OAAO,CACL,8BACE,KAAC,YAAY,IAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAC,UAAU,GAAG,EACtD,eAAM,SAAS,EAAC,QAAQ,GAAG,EAC3B,KAAC,WAAW,IAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAC,UAAU,GAAG,EACrD,eAAM,SAAS,EAAC,QAAQ,GAAG,EAC3B,KAAC,WAAW,IAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,GAAI,EACrC,eAAM,SAAS,EAAC,QAAQ,GAAG,EAC3B,iBAAQ,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAC,QAAQ,EAAC,KAAK,EAAC,kCAAS,EACtD,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,YACzE,KAAC,IAAI,IAAC,IAAI,EAAC,OAAO,GAAG,GACd,IACR,CACJ,CAAA;AACH,CAAC;AAED,MAAM,CAAC,MAAM,cAAc,GAAe;IACxC,IAAI,EAAE,UAAU;IAChB,KAAK,EAAE,MAAM;IACb,0DAA0D;IAC1D,UAAU,EAAE,KAAK;IACjB,GAAG,EAAE,WAAW;IAChB,KAAK,EAAE,aAAa;IACpB,oDAAoD;IACpD,UAAU,EAAE,KAAK;CAClB,CAAA"}
@@ -0,0 +1,6 @@
1
+ import type { VariantItem } from '../VariantMenu.js';
2
+ import { type QuoteVariant } from '@storkspear/post-editor-core/vocab';
3
+ export declare const QUOTE_LABEL: Record<QuoteVariant, string>;
4
+ /** 미리보기는 진짜 blockquote — prose.css 가 본문과 똑같이 그린다 */
5
+ export declare const quoteItems: VariantItem<QuoteVariant>[];
6
+ //# sourceMappingURL=quote.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quote.d.ts","sourceRoot":"","sources":["../../src/objects/quote.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AACjD,OAAO,EAAkB,KAAK,YAAY,EAAE,MAAM,oCAAoC,CAAA;AAEtF,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,CAGpD,CAAA;AAED,oDAAoD;AACpD,eAAO,MAAM,UAAU,EAAE,WAAW,CAAC,YAAY,CAAC,EAQ/C,CAAA"}
@@ -0,0 +1,13 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { QUOTE_VARIANTS } from '@storkspear/post-editor-core/vocab';
3
+ export const QUOTE_LABEL = {
4
+ quote: '따옴표', bar: '버티컬 라인', bubble: '말풍선',
5
+ barquote: '라인&따옴표', postit: '포스트잇', frame: '프레임', framebold: '두꺼운 프레임',
6
+ };
7
+ /** 미리보기는 진짜 blockquote — prose.css 가 본문과 똑같이 그린다 */
8
+ export const quoteItems = QUOTE_VARIANTS.map((v) => ({
9
+ value: v,
10
+ label: QUOTE_LABEL[v],
11
+ preview: (_jsx("blockquote", { "data-variant": v, style: { margin: 0, fontSize: '0.56rem', lineHeight: 1.45 }, children: _jsx("p", { children: QUOTE_LABEL[v] }) })),
12
+ }));
13
+ //# sourceMappingURL=quote.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quote.js","sourceRoot":"","sources":["../../src/objects/quote.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,cAAc,EAAqB,MAAM,oCAAoC,CAAA;AAEtF,MAAM,CAAC,MAAM,WAAW,GAAiC;IACvD,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK;IAC1C,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS;CACvE,CAAA;AAED,oDAAoD;AACpD,MAAM,CAAC,MAAM,UAAU,GAAgC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAChF,KAAK,EAAE,CAAC;IACR,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC;IACrB,OAAO,EAAE,CACP,qCAA0B,CAAC,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,YACtF,sBAAI,WAAW,CAAC,CAAC,CAAC,GAAK,GACZ,CACd;CACF,CAAC,CAAC,CAAA"}
@@ -0,0 +1,6 @@
1
+ import type { QuoteVariant } from '@storkspear/post-editor-core/vocab';
2
+ export declare function QuoteGlyph({ v, size }: {
3
+ v: QuoteVariant;
4
+ size?: number;
5
+ }): import("react").JSX.Element;
6
+ //# sourceMappingURL=quoteGlyphs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quoteGlyphs.d.ts","sourceRoot":"","sources":["../../src/objects/quoteGlyphs.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAA;AA6BtE,wBAAgB,UAAU,CAAC,EAAE,CAAC,EAAE,IAAS,EAAE,EAAE;IAAE,CAAC,EAAE,YAAY,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,+BAE9E"}
@@ -0,0 +1,28 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * 인용 모양 글리프 — 떠 있는 바에 쓰는 **작은 아이콘**.
4
+ *
5
+ * 드롭다운의 미리보기(진짜 blockquote)와 다른 물건이다. 16px 칸에서는 진짜 렌더가
6
+ * 뭉개져 구별이 안 되므로, 각 변형의 **알아볼 수 있는 특징 하나씩**만 남겨 그린다.
7
+ */
8
+ const S = { fill: 'none', stroke: 'currentColor', strokeWidth: 1.6, strokeLinecap: 'round' };
9
+ const G = {
10
+ // 버티컬 라인 — 왼쪽 굵은 막대 + 글줄
11
+ bar: _jsxs(_Fragment, { children: [_jsx("path", { d: "M3 4v12", ...S, strokeWidth: 2.4 }), _jsx("path", { d: "M7.5 7h9M7.5 10h9M7.5 13h6", ...S })] }),
12
+ // 따옴표 — 위아래 큰 따옴표
13
+ quote: _jsxs(_Fragment, { children: [_jsx("path", { d: "M6.6 4.2c-1.6.5-2.6 1.9-2.6 3.6h2.2V4.2zM12.6 4.2c-1.6.5-2.6 1.9-2.6 3.6h2.2V4.2z", fill: "currentColor", stroke: "none" }), _jsx("path", { d: "M6 12.2h9M6 15h6", ...S })] }),
14
+ // 말풍선 — 상자 + 아래 꼬리
15
+ bubble: _jsxs(_Fragment, { children: [_jsx("rect", { x: "2.6", y: "3.6", width: "14.8", height: "9.4", rx: "1", ...S }), _jsx("path", { d: "M6 13v3l3-3", ...S })] }),
16
+ // 라인&따옴표 — 작은 따옴표 + 밑줄
17
+ barquote: _jsxs(_Fragment, { children: [_jsx("path", { d: "M5.4 4.4c-1.2.4-2 1.4-2 2.7h1.7V4.4zM9.6 4.4c-1.2.4-2 1.4-2 2.7h1.7V4.4z", fill: "currentColor", stroke: "none" }), _jsx("path", { d: "M3.4 10.5h13M3.4 13.4h8", ...S }), _jsx("path", { d: "M3 16.4h14", ...S, strokeWidth: 1.8 })] }),
18
+ // 포스트잇 — 상자 + 오른쪽 아래 접힘
19
+ postit: _jsxs(_Fragment, { children: [_jsx("path", { d: "M2.8 3.8h14.4v8.6l-3.4 3.4H2.8z", ...S }), _jsx("path", { d: "M17.2 12.4h-3.4v3.4", ...S })] }),
20
+ // 프레임 — 좌상·우하 갈고리
21
+ frame: _jsx(_Fragment, { children: _jsx("path", { d: "M3.2 7.4V3.6h3.8M16.8 12.6v3.8H13", ...S }) }),
22
+ // 두꺼운 프레임
23
+ framebold: _jsx(_Fragment, { children: _jsx("path", { d: "M3.6 7.4V3.9h3.5M16.4 12.6v3.5H13", ...S, strokeWidth: 2.8 }) }),
24
+ };
25
+ export function QuoteGlyph({ v, size = 18 }) {
26
+ return _jsx("svg", { width: size, height: size, viewBox: "0 0 20 20", "aria-hidden": "true", children: G[v] });
27
+ }
28
+ //# sourceMappingURL=quoteGlyphs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quoteGlyphs.js","sourceRoot":"","sources":["../../src/objects/quoteGlyphs.tsx"],"names":[],"mappings":";AAEA;;;;;GAKG;AACH,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,WAAW,EAAE,GAAG,EAAE,aAAa,EAAE,OAAgB,EAAE,CAAA;AAErG,MAAM,CAAC,GAA0C;IAC/C,yBAAyB;IACzB,GAAG,EAAE,8BAAE,eAAM,CAAC,EAAC,SAAS,KAAK,CAAC,EAAE,WAAW,EAAE,GAAG,GAAI,EAAA,eAAM,CAAC,EAAC,4BAA4B,KAAK,CAAC,GAAI,IAAG;IACrG,kBAAkB;IAClB,KAAK,EAAE,8BAAE,eAAM,CAAC,EAAC,mFAAmF,EAAC,IAAI,EAAC,cAAc,EAAC,MAAM,EAAC,MAAM,GAAG,EACvI,eAAM,CAAC,EAAC,kBAAkB,KAAK,CAAC,GAAI,IAAG;IACzC,mBAAmB;IACnB,MAAM,EAAE,8BAAE,eAAM,CAAC,EAAC,KAAK,EAAC,CAAC,EAAC,KAAK,EAAC,KAAK,EAAC,MAAM,EAAC,MAAM,EAAC,KAAK,EAAC,EAAE,EAAC,GAAG,KAAK,CAAC,GAAI,EAAA,eAAM,CAAC,EAAC,aAAa,KAAK,CAAC,GAAI,IAAG;IAC5G,uBAAuB;IACvB,QAAQ,EAAE,8BAAE,eAAM,CAAC,EAAC,0EAA0E,EAAC,IAAI,EAAC,cAAc,EAAC,MAAM,EAAC,MAAM,GAAG,EACjI,eAAM,CAAC,EAAC,yBAAyB,KAAK,CAAC,GAAI,EAAA,eAAM,CAAC,EAAC,YAAY,KAAK,CAAC,EAAE,WAAW,EAAE,GAAG,GAAI,IAAG;IAChG,wBAAwB;IACxB,MAAM,EAAE,8BAAE,eAAM,CAAC,EAAC,iCAAiC,KAAK,CAAC,GAAI,EAAA,eAAM,CAAC,EAAC,qBAAqB,KAAK,CAAC,GAAI,IAAG;IACvG,kBAAkB;IAClB,KAAK,EAAE,4BAAE,eAAM,CAAC,EAAC,mCAAmC,KAAK,CAAC,GAAI,GAAG;IACjE,UAAU;IACV,SAAS,EAAE,4BAAE,eAAM,CAAC,EAAC,mCAAmC,KAAK,CAAC,EAAE,WAAW,EAAE,GAAG,GAAI,GAAG;CACxF,CAAA;AAED,MAAM,UAAU,UAAU,CAAC,EAAE,CAAC,EAAE,IAAI,GAAG,EAAE,EAAsC;IAC7E,OAAO,cAAK,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAC,WAAW,iBAAa,MAAM,YAAE,CAAC,CAAC,CAAC,CAAC,GAAO,CAAA;AAC5F,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ObjectKind } from './registry.js';
2
+ export declare const quoteObject: ObjectKind;
3
+ //# sourceMappingURL=quoteRow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quoteRow.d.ts","sourceRoot":"","sources":["../../src/objects/quoteRow.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,UAAU,EAAe,MAAM,YAAY,CAAA;AAkGzD,eAAO,MAAM,WAAW,EAAE,UAUzB,CAAA"}