@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.
- package/LICENSE +21 -0
- package/README.md +12 -0
- package/dist/ColorPicker.d.ts +11 -0
- package/dist/ColorPicker.d.ts.map +1 -0
- package/dist/ColorPicker.js +30 -0
- package/dist/ColorPicker.js.map +1 -0
- package/dist/DrawioModal.d.ts +9 -0
- package/dist/DrawioModal.d.ts.map +1 -0
- package/dist/DrawioModal.js +97 -0
- package/dist/DrawioModal.js.map +1 -0
- package/dist/FontMenu.d.ts +14 -0
- package/dist/FontMenu.d.ts.map +1 -0
- package/dist/FontMenu.js +14 -0
- package/dist/FontMenu.js.map +1 -0
- package/dist/Icon.d.ts +69 -0
- package/dist/Icon.d.ts.map +1 -0
- package/dist/Icon.js +47 -0
- package/dist/Icon.js.map +1 -0
- package/dist/InsertHandle.d.ts +14 -0
- package/dist/InsertHandle.d.ts.map +1 -0
- package/dist/InsertHandle.js +60 -0
- package/dist/InsertHandle.js.map +1 -0
- package/dist/PickMenu.d.ts +61 -0
- package/dist/PickMenu.d.ts.map +1 -0
- package/dist/PickMenu.js +57 -0
- package/dist/PickMenu.js.map +1 -0
- package/dist/Popover.d.ts +20 -0
- package/dist/Popover.d.ts.map +1 -0
- package/dist/Popover.js +22 -0
- package/dist/Popover.js.map +1 -0
- package/dist/PostTitle.d.ts +33 -0
- package/dist/PostTitle.d.ts.map +1 -0
- package/dist/PostTitle.js +171 -0
- package/dist/PostTitle.js.map +1 -0
- package/dist/SelectionBubble.d.ts +6 -0
- package/dist/SelectionBubble.d.ts.map +1 -0
- package/dist/SelectionBubble.js +71 -0
- package/dist/SelectionBubble.js.map +1 -0
- package/dist/TableTools.d.ts +10 -0
- package/dist/TableTools.d.ts.map +1 -0
- package/dist/TableTools.js +200 -0
- package/dist/TableTools.js.map +1 -0
- package/dist/Toolbar.d.ts +17 -0
- package/dist/Toolbar.d.ts.map +1 -0
- package/dist/Toolbar.js +333 -0
- package/dist/Toolbar.js.map +1 -0
- package/dist/UrlPrompt.d.ts +24 -0
- package/dist/UrlPrompt.d.ts.map +1 -0
- package/dist/UrlPrompt.js +53 -0
- package/dist/UrlPrompt.js.map +1 -0
- package/dist/VariantMenu.d.ts +47 -0
- package/dist/VariantMenu.d.ts.map +1 -0
- package/dist/VariantMenu.js +21 -0
- package/dist/VariantMenu.js.map +1 -0
- package/dist/WidthToggle.d.ts +19 -0
- package/dist/WidthToggle.d.ts.map +1 -0
- package/dist/WidthToggle.js +17 -0
- package/dist/WidthToggle.js.map +1 -0
- package/dist/bubbleShows.d.ts +10 -0
- package/dist/bubbleShows.d.ts.map +1 -0
- package/dist/bubbleShows.js +29 -0
- package/dist/bubbleShows.js.map +1 -0
- package/dist/content-baked.d.ts +22 -0
- package/dist/content-baked.d.ts.map +1 -0
- package/dist/content-baked.js +21 -0
- package/dist/content-baked.js.map +1 -0
- package/dist/content.d.ts +29 -0
- package/dist/content.d.ts.map +1 -0
- package/dist/content.js +35 -0
- package/dist/content.js.map +1 -0
- package/dist/extensions/DiagramView.d.ts +26 -0
- package/dist/extensions/DiagramView.d.ts.map +1 -0
- package/dist/extensions/DiagramView.js +146 -0
- package/dist/extensions/DiagramView.js.map +1 -0
- package/dist/extensions/FigureView.d.ts +3 -0
- package/dist/extensions/FigureView.d.ts.map +1 -0
- package/dist/extensions/FigureView.js +108 -0
- package/dist/extensions/FigureView.js.map +1 -0
- package/dist/index.d.ts +100 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +166 -0
- package/dist/index.js.map +1 -0
- package/dist/objects/ObjectFloat.d.ts +11 -0
- package/dist/objects/ObjectFloat.d.ts.map +1 -0
- package/dist/objects/ObjectFloat.js +42 -0
- package/dist/objects/ObjectFloat.js.map +1 -0
- package/dist/objects/ObjectLayer.d.ts +10 -0
- package/dist/objects/ObjectLayer.d.ts.map +1 -0
- package/dist/objects/ObjectLayer.js +20 -0
- package/dist/objects/ObjectLayer.js.map +1 -0
- package/dist/objects/blockSize.d.ts +30 -0
- package/dist/objects/blockSize.d.ts.map +1 -0
- package/dist/objects/blockSize.js +56 -0
- package/dist/objects/blockSize.js.map +1 -0
- package/dist/objects/code.d.ts +3 -0
- package/dist/objects/code.d.ts.map +1 -0
- package/dist/objects/code.js +55 -0
- package/dist/objects/code.js.map +1 -0
- package/dist/objects/diagram.d.ts +21 -0
- package/dist/objects/diagram.d.ts.map +1 -0
- package/dist/objects/diagram.js +109 -0
- package/dist/objects/diagram.js.map +1 -0
- package/dist/objects/diagramGlyphs.d.ts +12 -0
- package/dist/objects/diagramGlyphs.d.ts.map +1 -0
- package/dist/objects/diagramGlyphs.js +49 -0
- package/dist/objects/diagramGlyphs.js.map +1 -0
- package/dist/objects/divider.d.ts +22 -0
- package/dist/objects/divider.d.ts.map +1 -0
- package/dist/objects/divider.js +60 -0
- package/dist/objects/divider.js.map +1 -0
- package/dist/objects/figure.d.ts +3 -0
- package/dist/objects/figure.d.ts.map +1 -0
- package/dist/objects/figure.js +62 -0
- package/dist/objects/figure.js.map +1 -0
- package/dist/objects/imageRow.d.ts +3 -0
- package/dist/objects/imageRow.d.ts.map +1 -0
- package/dist/objects/imageRow.js +29 -0
- package/dist/objects/imageRow.js.map +1 -0
- package/dist/objects/quote.d.ts +6 -0
- package/dist/objects/quote.d.ts.map +1 -0
- package/dist/objects/quote.js +13 -0
- package/dist/objects/quote.js.map +1 -0
- package/dist/objects/quoteGlyphs.d.ts +6 -0
- package/dist/objects/quoteGlyphs.d.ts.map +1 -0
- package/dist/objects/quoteGlyphs.js +28 -0
- package/dist/objects/quoteGlyphs.js.map +1 -0
- package/dist/objects/quoteRow.d.ts +3 -0
- package/dist/objects/quoteRow.d.ts.map +1 -0
- package/dist/objects/quoteRow.js +61 -0
- package/dist/objects/quoteRow.js.map +1 -0
- package/dist/objects/registry.d.ts +60 -0
- package/dist/objects/registry.d.ts.map +1 -0
- package/dist/objects/registry.js +45 -0
- package/dist/objects/registry.js.map +1 -0
- package/dist/objects/table.d.ts +11 -0
- package/dist/objects/table.d.ts.map +1 -0
- package/dist/objects/table.js +136 -0
- package/dist/objects/table.js.map +1 -0
- package/dist/objects/useDomRect.d.ts +14 -0
- package/dist/objects/useDomRect.d.ts.map +1 -0
- package/dist/objects/useDomRect.js +32 -0
- package/dist/objects/useDomRect.js.map +1 -0
- package/dist/objects/useEngaged.d.ts +14 -0
- package/dist/objects/useEngaged.d.ts.map +1 -0
- package/dist/objects/useEngaged.js +41 -0
- package/dist/objects/useEngaged.js.map +1 -0
- package/dist/pickItems.d.ts +36 -0
- package/dist/pickItems.d.ts.map +1 -0
- package/dist/pickItems.js +40 -0
- package/dist/pickItems.js.map +1 -0
- package/dist/recentColors.d.ts +7 -0
- package/dist/recentColors.d.ts.map +1 -0
- package/dist/recentColors.js +30 -0
- package/dist/recentColors.js.map +1 -0
- package/dist/seeds/drawio/aws.d.ts +15 -0
- package/dist/seeds/drawio/aws.d.ts.map +1 -0
- package/dist/seeds/drawio/aws.js +15 -0
- package/dist/seeds/drawio/aws.js.map +1 -0
- package/dist/seeds/drawio/azure.d.ts +14 -0
- package/dist/seeds/drawio/azure.d.ts.map +1 -0
- package/dist/seeds/drawio/azure.js +14 -0
- package/dist/seeds/drawio/azure.js.map +1 -0
- package/dist/seeds/drawio/ec2docker.d.ts +15 -0
- package/dist/seeds/drawio/ec2docker.d.ts.map +1 -0
- package/dist/seeds/drawio/ec2docker.js +15 -0
- package/dist/seeds/drawio/ec2docker.js.map +1 -0
- package/dist/seeds/drawio/userflow.d.ts +21 -0
- package/dist/seeds/drawio/userflow.d.ts.map +1 -0
- package/dist/seeds/drawio/userflow.js +21 -0
- package/dist/seeds/drawio/userflow.js.map +1 -0
- package/dist/seeds/mermaid.d.ts +19 -0
- package/dist/seeds/mermaid.d.ts.map +1 -0
- package/dist/seeds/mermaid.js +82 -0
- package/dist/seeds/mermaid.js.map +1 -0
- package/dist/useAnchoredPos.d.ts +22 -0
- package/dist/useAnchoredPos.d.ts.map +1 -0
- package/dist/useAnchoredPos.js +57 -0
- package/dist/useAnchoredPos.js.map +1 -0
- package/dist/useDismiss.d.ts +17 -0
- package/dist/useDismiss.d.ts.map +1 -0
- package/dist/useDismiss.js +36 -0
- package/dist/useDismiss.js.map +1 -0
- package/dist/useLastVariant.d.ts +9 -0
- package/dist/useLastVariant.d.ts.map +1 -0
- package/dist/useLastVariant.js +33 -0
- package/dist/useLastVariant.js.map +1 -0
- package/dist/useUploadCount.d.ts +3 -0
- package/dist/useUploadCount.d.ts.map +1 -0
- package/dist/useUploadCount.js +9 -0
- package/dist/useUploadCount.js.map +1 -0
- package/package.json +57 -0
- 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":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAEhC,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAC9B,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAC9E,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAsB,MAAM,oCAAoC,CAAA;AAEvE,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAChD,OAAO,EAAE,aAAa,EAAoB,MAAM,kBAAkB,CAAA;AAUlE,MAAM,UAAU,GAAgC;IAC9C,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO;IAC9C,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO;IACpC,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ;CAC5E,CAAA;AAED;;;;;;;;GAQG;AACH,MAAM,YAAY,GAAoE;IACpF,GAAG,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;IAC3D,KAAK,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;IACjE,SAAS,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,2BAA2B,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IAC7E,QAAQ,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,0BAA0B,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;CAC3E,CAAA;AAED,MAAM,QAAQ,GAAG,CAAC,CAAc,EAAmB,EAAE,CAAC,CAAC,IAAI,YAAY,CAAA;AAEvE,uCAAuC;AACvC,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAiB;IAErD,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACnB,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,EAAE,CAAA;QAC/C,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,EAAE,CAAA;IACvC,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,aAAa,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAA;AACjE,CAAC;AAED,MAAM,IAAI,GAAG,CAAC,CAAc,EAA2B,EAAE,CACvD,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;AAElE;;;;;GAKG;AACH,MAAM,CAAC,MAAM,WAAW,GAA8B;IACpD,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE;IACtC,IAAI,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC;IACpF,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,YAAY,EAAE;IAC1C,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC;CAChE,CAAA;AAED;;;;;;;;;GASG;AACH,MAAM,YAAY,GAAG;IACnB,EAAE,KAAK,EAAE,SAAkB,EAAE,KAAK,EAAE,SAAS,EAAE;IAC/C,EAAE,KAAK,EAAE,QAAiB,EAAE,KAAK,EAAE,SAAS,EAAE;CAC/C,CAAA;AAED;;;;;;;GAOG;AACH,SAAS,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC,EAAsC;IACnE,MAAM,MAAM,GAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAwB,IAAI,SAAS,CAAA;IAClE,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,EAAE,CAAC,CAAA;IAC1C,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAE7C,MAAM,SAAS,GAAG,CAAC,IAAmB,EAAE,EAAE;QACxC,IAAI,IAAI,KAAK,MAAM;YAAE,OAAM;QAC3B,IAAI,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,sCAAsC,CAAC;YAAE,OAAM;QACjF,MAAM,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE;YACxC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAA;YACvF,OAAO,IAAI,CAAA;QACb,CAAC,CAAC,CAAC,GAAG,EAAE,CAAA;IACV,CAAC,CAAA;IAED,OAAO,CACL,8BACE,KAAC,MAAM,IAAC,KAAK,EAAC,iCAAQ,EAAC,SAAS,EAAC,WAAW,EAAC,KAAK,EAAE,GAAG,EACrD,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,GAAI,EAE1D,MAAM,KAAK,QAAQ,IAAI,CACtB,kBAAQ,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAC,QAAQ,EAAC,KAAK,EAAC,2DAAmB,EAChE,WAAW,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,cAAc,EAAE,EACxC,OAAO,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,aAC/B,KAAC,IAAI,IAAC,IAAI,EAAC,QAAQ,GAAG,EAAA,eAAM,SAAS,EAAC,QAAQ,YAAE,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,GAAQ,IAC3E,CACV,EAED,eAAM,SAAS,EAAC,QAAQ,GAAG,EAC3B,KAAC,YAAY,IAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAC,SAAS,GAAG,EACrD,KAAC,YAAY,IAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAC,SAAS,GAAG,EAC/C,KAAC,WAAW,IAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAC,SAAS,GAAG,EACpD,eAAM,SAAS,EAAC,QAAQ,GAAG,EAE3B,iBAAQ,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAC,QAAQ,EAAC,KAAK,EAAC,6CAAU,EACvD,WAAW,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,cAAc,EAAE,EACxC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,YACjC,KAAC,IAAI,IAAC,IAAI,EAAC,OAAO,GAAG,GACd,EAER,OAAO,IAAI,CACV,KAAC,WAAW,IACV,GAAG,EAAE,GAAG,EACR,QAAQ,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,EACjC,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE;oBACvB,UAAU,CAAC,KAAK,CAAC,CAAA;oBACjB,MAAM,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE;wBACxC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAA;wBACtE,OAAO,IAAI,CAAA;oBACb,CAAC,CAAC,CAAC,GAAG,EAAE,CAAA;gBACV,CAAC,GACD,CACH,IACA,CACJ,CAAA;AACH,CAAC;AAED,MAAM,CAAC,MAAM,aAAa,GAAe;IACvC,IAAI,EAAE,SAAS;IACf,KAAK,EAAE,OAAO;IACd,GAAG,EAAE,UAAU;IACf;;;;;;OAMG;IACH,MAAM,EAAE,CAAC,GAAgB,EAAe,EAAE,CACxC,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,IAAI,GAAG;CACtF,CAAA"}
|
|
@@ -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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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"}
|