@tienne/gestalt 0.102.0 → 0.103.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/README.ko.md +2 -1
- package/README.md +2 -1
- package/dist/package.json +1 -1
- package/dist/plugin/role-agents/video-summarizer/AGENT.md +177 -113
- package/dist/plugin/skills/_shared/proactive-routing.md +2 -1
- package/dist/plugin/skills/research/references/design.md +1 -1
- package/dist/plugin/skills/video-digest/SKILL.md +408 -0
- package/dist/plugin/skills/video-digest/templates/background.md +15 -0
- package/dist/plugin/skills/video-digest/templates/blog.md +16 -0
- package/dist/plugin/skills/video-digest/templates/comments.md +19 -0
- package/dist/plugin/skills/video-digest/templates/counterpoints.md +15 -0
- package/dist/plugin/skills/video-digest/templates/flashcards.md +15 -0
- package/dist/plugin/skills/video-digest/templates/interview.md +15 -0
- package/dist/plugin/skills/video-digest/templates/meeting.md +15 -0
- package/dist/plugin/skills/video-digest/templates/mindmap.md +16 -0
- package/dist/plugin/skills/video-digest/templates/quiz.md +16 -0
- package/dist/plugin/skills/video-digest/templates/quotes.md +16 -0
- package/dist/plugin/skills/video-digest/templates/resources.md +14 -0
- package/dist/plugin/skills/video-digest/templates/timestamps.md +14 -0
- package/dist/src/cli/commands/digest.d.ts +57 -0
- package/dist/src/cli/commands/digest.d.ts.map +1 -0
- package/dist/src/cli/commands/digest.js +368 -0
- package/dist/src/cli/commands/digest.js.map +1 -0
- package/dist/src/cli/index.d.ts.map +1 -1
- package/dist/src/cli/index.js +77 -0
- package/dist/src/cli/index.js.map +1 -1
- package/dist/src/digest/blocks.d.ts +1853 -0
- package/dist/src/digest/blocks.d.ts.map +1 -0
- package/dist/src/digest/blocks.js +148 -0
- package/dist/src/digest/blocks.js.map +1 -0
- package/dist/src/digest/captions.d.ts +37 -0
- package/dist/src/digest/captions.d.ts.map +1 -0
- package/dist/src/digest/captions.js +138 -0
- package/dist/src/digest/captions.js.map +1 -0
- package/dist/src/digest/comments.d.ts +113 -0
- package/dist/src/digest/comments.d.ts.map +1 -0
- package/dist/src/digest/comments.js +153 -0
- package/dist/src/digest/comments.js.map +1 -0
- package/dist/src/digest/format.d.ts +9 -0
- package/dist/src/digest/format.d.ts.map +1 -0
- package/dist/src/digest/format.js +26 -0
- package/dist/src/digest/format.js.map +1 -0
- package/dist/src/digest/frames.d.ts +26 -0
- package/dist/src/digest/frames.d.ts.map +1 -0
- package/dist/src/digest/frames.js +109 -0
- package/dist/src/digest/frames.js.map +1 -0
- package/dist/src/digest/index.d.ts +25 -0
- package/dist/src/digest/index.d.ts.map +1 -0
- package/dist/src/digest/index.js +25 -0
- package/dist/src/digest/index.js.map +1 -0
- package/dist/src/digest/ingest.d.ts +65 -0
- package/dist/src/digest/ingest.d.ts.map +1 -0
- package/dist/src/digest/ingest.js +303 -0
- package/dist/src/digest/ingest.js.map +1 -0
- package/dist/src/digest/lint-extension.d.ts +57 -0
- package/dist/src/digest/lint-extension.d.ts.map +1 -0
- package/dist/src/digest/lint-extension.js +395 -0
- package/dist/src/digest/lint-extension.js.map +1 -0
- package/dist/src/digest/lint.d.ts +40 -0
- package/dist/src/digest/lint.d.ts.map +1 -0
- package/dist/src/digest/lint.js +517 -0
- package/dist/src/digest/lint.js.map +1 -0
- package/dist/src/digest/merge.d.ts +40 -0
- package/dist/src/digest/merge.d.ts.map +1 -0
- package/dist/src/digest/merge.js +104 -0
- package/dist/src/digest/merge.js.map +1 -0
- package/dist/src/digest/ocr.d.ts +96 -0
- package/dist/src/digest/ocr.d.ts.map +1 -0
- package/dist/src/digest/ocr.js +168 -0
- package/dist/src/digest/ocr.js.map +1 -0
- package/dist/src/digest/prose.d.ts +43 -0
- package/dist/src/digest/prose.d.ts.map +1 -0
- package/dist/src/digest/prose.js +112 -0
- package/dist/src/digest/prose.js.map +1 -0
- package/dist/src/digest/render-blocks.d.ts +32 -0
- package/dist/src/digest/render-blocks.d.ts.map +1 -0
- package/dist/src/digest/render-blocks.js +292 -0
- package/dist/src/digest/render-blocks.js.map +1 -0
- package/dist/src/digest/render-html.d.ts +22 -0
- package/dist/src/digest/render-html.d.ts.map +1 -0
- package/dist/src/digest/render-html.js +466 -0
- package/dist/src/digest/render-html.js.map +1 -0
- package/dist/src/digest/render-md.d.ts +18 -0
- package/dist/src/digest/render-md.d.ts.map +1 -0
- package/dist/src/digest/render-md.js +113 -0
- package/dist/src/digest/render-md.js.map +1 -0
- package/dist/src/digest/render.d.ts +47 -0
- package/dist/src/digest/render.d.ts.map +1 -0
- package/dist/src/digest/render.js +123 -0
- package/dist/src/digest/render.js.map +1 -0
- package/dist/src/digest/reports.d.ts +26 -0
- package/dist/src/digest/reports.d.ts.map +1 -0
- package/dist/src/digest/reports.js +70 -0
- package/dist/src/digest/reports.js.map +1 -0
- package/dist/src/digest/schema-base.d.ts +31 -0
- package/dist/src/digest/schema-base.d.ts.map +1 -0
- package/dist/src/digest/schema-base.js +19 -0
- package/dist/src/digest/schema-base.js.map +1 -0
- package/dist/src/digest/schema.d.ts +5713 -0
- package/dist/src/digest/schema.d.ts.map +1 -0
- package/dist/src/digest/schema.js +229 -0
- package/dist/src/digest/schema.js.map +1 -0
- package/dist/src/digest/server.d.ts +36 -0
- package/dist/src/digest/server.d.ts.map +1 -0
- package/dist/src/digest/server.js +278 -0
- package/dist/src/digest/server.js.map +1 -0
- package/dist/src/digest/slice.d.ts +20 -0
- package/dist/src/digest/slice.d.ts.map +1 -0
- package/dist/src/digest/slice.js +48 -0
- package/dist/src/digest/slice.js.map +1 -0
- package/dist/src/digest/store.d.ts +67 -0
- package/dist/src/digest/store.d.ts.map +1 -0
- package/dist/src/digest/store.js +152 -0
- package/dist/src/digest/store.js.map +1 -0
- package/dist/src/digest/svg.d.ts +44 -0
- package/dist/src/digest/svg.d.ts.map +1 -0
- package/dist/src/digest/svg.js +264 -0
- package/dist/src/digest/svg.js.map +1 -0
- package/dist/src/digest/templates.d.ts +38 -0
- package/dist/src/digest/templates.d.ts.map +1 -0
- package/dist/src/digest/templates.js +125 -0
- package/dist/src/digest/templates.js.map +1 -0
- package/dist/src/digest/translate.d.ts +46 -0
- package/dist/src/digest/translate.d.ts.map +1 -0
- package/dist/src/digest/translate.js +50 -0
- package/dist/src/digest/translate.js.map +1 -0
- package/dist/src/digest/viewer-js.d.ts +4 -0
- package/dist/src/digest/viewer-js.d.ts.map +1 -0
- package/dist/src/digest/viewer-js.js +710 -0
- package/dist/src/digest/viewer-js.js.map +1 -0
- package/dist/src/digest/viewer-logic.d.ts +46 -0
- package/dist/src/digest/viewer-logic.d.ts.map +1 -0
- package/dist/src/digest/viewer-logic.js +89 -0
- package/dist/src/digest/viewer-logic.js.map +1 -0
- package/dist/src/digest/ytdlp.d.ts +34 -0
- package/dist/src/digest/ytdlp.d.ts.map +1 -0
- package/dist/src/digest/ytdlp.js +64 -0
- package/dist/src/digest/ytdlp.js.map +1 -0
- package/dist/src/mcp/schemas.d.ts +48 -0
- package/dist/src/mcp/schemas.d.ts.map +1 -1
- package/dist/src/mcp/schemas.js +25 -0
- package/dist/src/mcp/schemas.js.map +1 -1
- package/dist/src/mcp/server.d.ts.map +1 -1
- package/dist/src/mcp/server.js +7 -1
- package/dist/src/mcp/server.js.map +1 -1
- package/dist/src/mcp/tools/digest-passthrough.d.ts +3 -0
- package/dist/src/mcp/tools/digest-passthrough.d.ts.map +1 -0
- package/dist/src/mcp/tools/digest-passthrough.js +148 -0
- package/dist/src/mcp/tools/digest-passthrough.js.map +1 -0
- package/package.json +1 -1
- package/plugin/.codex-plugin/plugin.json +1 -1
- package/plugin/.mcp.json +1 -1
- package/plugin/mcp.json +1 -1
- package/plugin/role-agents/video-summarizer/AGENT.md +177 -113
- package/plugin/skills/_shared/proactive-routing.md +2 -1
- package/plugin/skills/research/references/design.md +1 -1
- package/plugin/skills/video-digest/SKILL.md +408 -0
- package/plugin/skills/video-digest/templates/background.md +15 -0
- package/plugin/skills/video-digest/templates/blog.md +16 -0
- package/plugin/skills/video-digest/templates/comments.md +19 -0
- package/plugin/skills/video-digest/templates/counterpoints.md +15 -0
- package/plugin/skills/video-digest/templates/flashcards.md +15 -0
- package/plugin/skills/video-digest/templates/interview.md +15 -0
- package/plugin/skills/video-digest/templates/meeting.md +15 -0
- package/plugin/skills/video-digest/templates/mindmap.md +16 -0
- package/plugin/skills/video-digest/templates/quiz.md +16 -0
- package/plugin/skills/video-digest/templates/quotes.md +16 -0
- package/plugin/skills/video-digest/templates/resources.md +14 -0
- package/plugin/skills/video-digest/templates/timestamps.md +14 -0
|
@@ -0,0 +1,292 @@
|
|
|
1
|
+
import { extensionKey, } from './blocks.js';
|
|
2
|
+
import { boldPattern, keywordPattern } from './schema.js';
|
|
3
|
+
import { compareSvg, cycleSvg, flowSvg, treeSvg } from './svg.js';
|
|
4
|
+
// 확장 리포트는 키워드 목록이 없어 lint가 마커를 막는다. 그래도 들어오면 표시 글자만 남긴다
|
|
5
|
+
const stripKeywords = (text) => text.replace(keywordPattern(), (_m, _id, label) => label);
|
|
6
|
+
const htmlInline = (text, ctx) => ctx
|
|
7
|
+
.escape(stripKeywords(text))
|
|
8
|
+
.replace(boldPattern(), (_m, inner) => `<strong>${inner}</strong>`);
|
|
9
|
+
const htmlCite = (c, ctx) => (c ? ctx.cite(c) : '');
|
|
10
|
+
const mdCite = (c, ctx) => (c ? ctx.cite(c) : '');
|
|
11
|
+
function listHtml(items, ctx) {
|
|
12
|
+
return `<ul>${items
|
|
13
|
+
.map((it) => `<li>${htmlInline(it.text, ctx)}${htmlCite(it.cite, ctx)}${it.children?.length ? listHtml(it.children, ctx) : ''}</li>`)
|
|
14
|
+
.join('')}</ul>`;
|
|
15
|
+
}
|
|
16
|
+
const TONE_LABEL = {
|
|
17
|
+
positive: '긍정',
|
|
18
|
+
negative: '부정',
|
|
19
|
+
neutral: '중립',
|
|
20
|
+
question: '질문',
|
|
21
|
+
};
|
|
22
|
+
function outlineHtml(node, ctx) {
|
|
23
|
+
const kids = node.children?.length
|
|
24
|
+
? `<ul>${node.children.map((c) => outlineHtml(c, ctx)).join('')}</ul>`
|
|
25
|
+
: '';
|
|
26
|
+
return `<li>${ctx.escape(node.label)}${node.cite ? ` ${ctx.time(node.cite)}` : ''}${kids}</li>`;
|
|
27
|
+
}
|
|
28
|
+
function outlineMd(node, ctx, depth = 0) {
|
|
29
|
+
return [
|
|
30
|
+
`${' '.repeat(depth)}- ${mdInline(node.label)}${node.cite ? ` ${ctx.time(node.cite)}` : ''}`,
|
|
31
|
+
...(node.children ?? []).flatMap((c) => outlineMd(c, ctx, depth + 1)),
|
|
32
|
+
];
|
|
33
|
+
}
|
|
34
|
+
/** 그림 하나와 확대 버튼, 스크립트 없이도 읽히는 목록. 대섹션 도식도 이 틀을 쓴다 */
|
|
35
|
+
export function diagramFigure(svg, outline, caption) {
|
|
36
|
+
return `<figure class="diagram"><div class="dg-scroll">${svg}</div><div class="dg-bar">${caption ? `<span>${caption}</span>` : ''}<button type="button" class="zoom-btn" data-zoom>크게 보기</button></div><details class="dg-outline"><summary>목록으로 보기</summary>${outline}</details></figure>`;
|
|
37
|
+
}
|
|
38
|
+
const DIAGRAM_LABEL = {
|
|
39
|
+
flow: '흐름도',
|
|
40
|
+
cycle: '순환도',
|
|
41
|
+
compare: '비교표',
|
|
42
|
+
tree: '구조도',
|
|
43
|
+
};
|
|
44
|
+
/** 대섹션 도식. title은 그림의 aria-label에 붙는 대섹션 제목이다 */
|
|
45
|
+
export function sectionDiagramHtml(d, title, ctx) {
|
|
46
|
+
const opts = { sec: ctx.sec };
|
|
47
|
+
const aria = `${title} ${DIAGRAM_LABEL[d.kind]}`;
|
|
48
|
+
const li = (n) => outlineHtml(n, ctx);
|
|
49
|
+
let svg;
|
|
50
|
+
let outline;
|
|
51
|
+
switch (d.kind) {
|
|
52
|
+
case 'flow':
|
|
53
|
+
svg = flowSvg(d.steps, opts, aria);
|
|
54
|
+
outline = `<ol>${d.steps.map(li).join('')}</ol>`;
|
|
55
|
+
break;
|
|
56
|
+
case 'cycle':
|
|
57
|
+
svg = cycleSvg(d.steps, opts, aria);
|
|
58
|
+
outline = `<ol>${d.steps.map(li).join('')}</ol>`;
|
|
59
|
+
break;
|
|
60
|
+
case 'compare':
|
|
61
|
+
svg = compareSvg(d.columns, opts, aria);
|
|
62
|
+
outline = `<ul>${d.columns.map((c) => li({ label: c.title, children: c.items })).join('')}</ul>`;
|
|
63
|
+
break;
|
|
64
|
+
case 'tree':
|
|
65
|
+
svg = treeSvg(d.root, opts, aria);
|
|
66
|
+
outline = `<ul>${li(d.root)}</ul>`;
|
|
67
|
+
break;
|
|
68
|
+
default: {
|
|
69
|
+
const never = d;
|
|
70
|
+
throw new Error(`알 수 없는 도식: ${String(never)}`);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return diagramFigure(svg, outline, d.caption ? ctx.escape(d.caption) : undefined);
|
|
74
|
+
}
|
|
75
|
+
/** 마크다운에는 그림 대신 목록으로 옮긴다. 순서가 있는 흐름과 순환은 번호를 단다 */
|
|
76
|
+
export function sectionDiagramMd(d, ctx) {
|
|
77
|
+
const head = d.caption ? [`*${DIAGRAM_LABEL[d.kind]}: ${mdInline(d.caption)}*`, ''] : [];
|
|
78
|
+
const step = (n, k) => `${k + 1}. ${mdInline(n.label)}${n.cite ? ` ${ctx.time(n.cite)}` : ''}`;
|
|
79
|
+
switch (d.kind) {
|
|
80
|
+
case 'flow':
|
|
81
|
+
case 'cycle':
|
|
82
|
+
return [...head, ...d.steps.map(step), ''];
|
|
83
|
+
case 'compare':
|
|
84
|
+
return [
|
|
85
|
+
...head,
|
|
86
|
+
...d.columns.flatMap((c) => outlineMd({ label: c.title, children: c.items }, ctx)),
|
|
87
|
+
'',
|
|
88
|
+
];
|
|
89
|
+
case 'tree':
|
|
90
|
+
return [...head, ...outlineMd(d.root, ctx), ''];
|
|
91
|
+
default: {
|
|
92
|
+
const never = d;
|
|
93
|
+
throw new Error(`알 수 없는 도식: ${String(never)}`);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
// 댓글과 자막 인용은 남이 쓴 글이라 마크다운 문법으로 읽히면 링크나 HTML이 끼어든다. 문법 글자를 무력화한다
|
|
98
|
+
// `~`는 '1~2개와 3~4개'가 취소선으로 바뀌어서 함께 막는다
|
|
99
|
+
// 맨 URL은 보이는 글자가 곧 목적지라 숨은 링크가 아니므로 두고 링크 문법과 HTML만 막는다
|
|
100
|
+
const mdVerbatim = (text) => text.replace(/[\\`*_[\]<>#|&~]/g, (ch) => `\\${ch}`);
|
|
101
|
+
// 한 줄로 쓰는 칸에 개행이 섞이면 목록이나 인용 밖으로 빠져나간다. HTML도 이 칸들의 개행을 공백으로 접어 보여준다
|
|
102
|
+
const oneLine = (text) => text.replace(/\s+/g, ' ').trim();
|
|
103
|
+
// 줄 첫머리의 `-`, `+`, `1.`, `1)`은 뒤에 공백이 오거나 줄이 끝나면 목록으로, `---`와 `===`는 구분선이나 제목 밑줄로 읽힌다
|
|
104
|
+
// HTML은 평문으로 보여줘서 맞춘다. `-5도`나 `3.5배`는 문법이 아니라서 그대로 둔다
|
|
105
|
+
const lineHead = (text) => text
|
|
106
|
+
.replace(/^([-+])(?=\s|$|-)/, '\\$1')
|
|
107
|
+
.replace(/^(=+)(?=[ \t]*$)/, '\\$1')
|
|
108
|
+
.replace(/^(\d{1,9})([.)])(?=\s|$)/, '$1\\$2');
|
|
109
|
+
// 제목, 라벨, 이름 칸도 자막과 댓글에서 나온 값이다. lint가 `**`를 막는 칸이라 문법 글자를 전부 이스케이프해도 잃는 서식이 없다
|
|
110
|
+
export const mdInline = (text) => lineHead(mdVerbatim(oneLine(text)));
|
|
111
|
+
// 본문 칸도 자막에서 나온 글이라 링크나 HTML, 줄 머리 문법이 끼어들 수 있다. HTML 쪽처럼 굵게만 살린다
|
|
112
|
+
// 개행은 굵게를 가른 뒤에 접는다. 먼저 접으면 줄을 넘는 `**`가 마크다운에서만 굵게가 된다
|
|
113
|
+
const mdBody = (text) => lineHead(oneLine(stripKeywords(text)
|
|
114
|
+
.split(boldPattern())
|
|
115
|
+
.map((part, k) => (k % 2 ? `**${mdVerbatim(part)}**` : mdVerbatim(part)))
|
|
116
|
+
.join('')));
|
|
117
|
+
// 인용 원문은 줄을 살리므로 줄마다 첫머리를 막는다. 마크다운은 홑 `\r`도 줄 끝으로 읽어서 같이 가른다
|
|
118
|
+
// 앞 공백이 4칸이면 코드 블록이 되고 뒤 공백은 `===` 밑줄 판정을 가려서 양끝을 걷는다
|
|
119
|
+
const quoteLines = (text) => text.split(/\r\n|\r|\n/).map((l) => `> ${lineHead(l.trim())}`.trimEnd());
|
|
120
|
+
function listMd(items, ctx, depth = 0) {
|
|
121
|
+
return items.flatMap((it) => [
|
|
122
|
+
`${' '.repeat(depth)}- ${mdBody(it.text)}${mdCite(it.cite, ctx)}`,
|
|
123
|
+
...(it.children ? listMd(it.children, ctx, depth + 1) : []),
|
|
124
|
+
]);
|
|
125
|
+
}
|
|
126
|
+
/** id는 블록마다 겹치지 않는 접두어다. 퀴즈 라디오 그룹 이름에 쓴다 */
|
|
127
|
+
export function blockHtml(block, ctx, id = 'b') {
|
|
128
|
+
switch (block.type) {
|
|
129
|
+
case 'heading':
|
|
130
|
+
return `<h3>${ctx.escape(block.text)}</h3>`;
|
|
131
|
+
case 'text':
|
|
132
|
+
return `<p>${htmlInline(block.text, ctx)}${htmlCite(block.cite, ctx)}</p>`;
|
|
133
|
+
case 'list':
|
|
134
|
+
return `${block.title ? `<h4>${ctx.escape(block.title)}</h4>` : ''}${listHtml(block.items, ctx)}`;
|
|
135
|
+
case 'quote':
|
|
136
|
+
return `<figure class="quote"><blockquote>${ctx.escape(block.text)}${ctx.cite(block.cite)}</blockquote>${block.translation ? `<p class="quote-tr">${htmlInline(block.translation, ctx)}</p>` : ''}${block.speaker || block.note
|
|
137
|
+
? `<figcaption>${block.speaker ? `<b>${ctx.escape(block.speaker)}</b>` : ''}${block.note ? `<span>${htmlInline(block.note, ctx)}</span>` : ''}</figcaption>`
|
|
138
|
+
: ''}</figure>`;
|
|
139
|
+
case 'timestamps':
|
|
140
|
+
return `<ol class="ext-toc">${block.items
|
|
141
|
+
.map((it) => `<li>${ctx.time(it.cite)}<div><b>${ctx.escape(it.title)}</b>${it.summary ? `<p>${htmlInline(it.summary, ctx)}</p>` : ''}</div></li>`)
|
|
142
|
+
.join('')}</ol>`;
|
|
143
|
+
case 'actions':
|
|
144
|
+
return `<ul class="actions">${block.items
|
|
145
|
+
.map((it) => {
|
|
146
|
+
const meta = [
|
|
147
|
+
it.owner ? `<span>담당 ${ctx.escape(it.owner)}</span>` : '',
|
|
148
|
+
it.due ? `<span>기한 ${ctx.escape(it.due)}</span>` : '',
|
|
149
|
+
].join('');
|
|
150
|
+
return `<li><span class="box" aria-hidden="true"></span><div>${htmlInline(it.task, ctx)}${htmlCite(it.cite, ctx)}${meta ? `<small>${meta}</small>` : ''}</div></li>`;
|
|
151
|
+
})
|
|
152
|
+
.join('')}</ul>`;
|
|
153
|
+
case 'qa':
|
|
154
|
+
return `<dl class="qa">${block.items
|
|
155
|
+
.map((it) => `<dt>${htmlInline(it.question, ctx)}</dt><dd>${htmlInline(it.answer, ctx)}${htmlCite(it.cite, ctx)}</dd>`)
|
|
156
|
+
.join('')}</dl>`;
|
|
157
|
+
case 'flashcards':
|
|
158
|
+
return `<div class="cards">${block.cards
|
|
159
|
+
.map((c) => `<details class="card"><summary>${htmlInline(c.front, ctx)}</summary><div class="card-back">${htmlInline(c.back, ctx)}${htmlCite(c.cite, ctx)}</div></details>`)
|
|
160
|
+
.join('')}</div>`;
|
|
161
|
+
case 'quiz':
|
|
162
|
+
return `<ol class="quiz">${block.questions
|
|
163
|
+
.map((q, k) => {
|
|
164
|
+
const name = ctx.escape(`${id}-q${k}`);
|
|
165
|
+
const choices = q.choices
|
|
166
|
+
.map((c, ci) => `<label class="quiz-choice"><input type="radio" name="${name}" value="${ci}"> <span>${htmlInline(c, ctx)}</span></label>`)
|
|
167
|
+
.join('');
|
|
168
|
+
const right = q.choices[q.answer] ?? '';
|
|
169
|
+
return `<li><fieldset class="quiz-q" data-answer="${q.answer}"><legend>${htmlInline(q.question, ctx)}</legend>${choices}<button type="button" class="quiz-check">정답 확인</button><p class="quiz-result" role="status" aria-live="polite"></p><div class="quiz-exp" hidden><p><b>정답 ${q.answer + 1}번</b> ${htmlInline(right, ctx)}</p><p>${htmlInline(q.explanation, ctx)}${htmlCite(q.cite, ctx)}</p></div></fieldset></li>`;
|
|
170
|
+
})
|
|
171
|
+
.join('')}</ol>`;
|
|
172
|
+
case 'mindmap':
|
|
173
|
+
return diagramFigure(treeSvg(block.root, { sec: ctx.sec }, `${block.root.label} 마인드맵`), `<ul>${outlineHtml(block.root, ctx)}</ul>`);
|
|
174
|
+
case 'comments': {
|
|
175
|
+
const groups = block.groups
|
|
176
|
+
.map((g) => {
|
|
177
|
+
const pct = block.total > 0 ? Math.min(100, Math.round((g.count / block.total) * 100)) : 0;
|
|
178
|
+
const examples = g.examples.length
|
|
179
|
+
? `<ul class="cm-ex">${g.examples.map((x) => `<li><q>${ctx.escape(x.text)}</q></li>`).join('')}</ul>`
|
|
180
|
+
: '';
|
|
181
|
+
return `<li class="cm-group cm-${g.tone}"><div class="cm-head"><b>${ctx.escape(g.title)}</b><span class="cm-tone">${TONE_LABEL[g.tone]}</span><span class="cm-count">${g.count}개</span></div><div class="cm-bar" aria-hidden="true"><i style="width:${pct}%"></i></div><p>${htmlInline(g.summary, ctx)}</p>${examples}</li>`;
|
|
182
|
+
})
|
|
183
|
+
.join('');
|
|
184
|
+
return `<div class="comments"><p class="cm-overview">${htmlInline(block.overview, ctx)}</p><p class="cm-meta">분석한 댓글 ${block.total}개</p><ul class="cm-groups">${groups}</ul></div>`;
|
|
185
|
+
}
|
|
186
|
+
default: {
|
|
187
|
+
const never = block;
|
|
188
|
+
throw new Error(`모르는 블록: ${JSON.stringify(never)}`);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
export function blockMarkdown(block, ctx) {
|
|
193
|
+
switch (block.type) {
|
|
194
|
+
case 'heading':
|
|
195
|
+
return [`## ${mdInline(block.text)}`, ''];
|
|
196
|
+
case 'text':
|
|
197
|
+
return [`${mdBody(block.text)}${mdCite(block.cite, ctx)}`, ''];
|
|
198
|
+
case 'list':
|
|
199
|
+
return [
|
|
200
|
+
...(block.title ? [`**${mdInline(block.title)}**`, ''] : []),
|
|
201
|
+
...listMd(block.items, ctx),
|
|
202
|
+
'',
|
|
203
|
+
];
|
|
204
|
+
case 'quote': {
|
|
205
|
+
const by = [
|
|
206
|
+
block.speaker ? `— ${mdInline(block.speaker)}` : '',
|
|
207
|
+
block.note ? mdBody(block.note) : '',
|
|
208
|
+
]
|
|
209
|
+
.filter(Boolean)
|
|
210
|
+
.join(', ');
|
|
211
|
+
const text = quoteLines(mdVerbatim(block.text));
|
|
212
|
+
text[text.length - 1] += ctx.cite(block.cite);
|
|
213
|
+
return [
|
|
214
|
+
...text,
|
|
215
|
+
...(block.translation ? ['>', ...quoteLines(mdBody(block.translation))] : []),
|
|
216
|
+
...(by ? ['>', ...quoteLines(by)] : []),
|
|
217
|
+
'',
|
|
218
|
+
];
|
|
219
|
+
}
|
|
220
|
+
case 'timestamps':
|
|
221
|
+
return [
|
|
222
|
+
...block.items.map((it) => `- ${ctx.time(it.cite)} **${mdInline(it.title)}**${it.summary ? ` ${mdBody(it.summary)}` : ''}`),
|
|
223
|
+
'',
|
|
224
|
+
];
|
|
225
|
+
case 'actions':
|
|
226
|
+
return [
|
|
227
|
+
...block.items.map((it) => {
|
|
228
|
+
const meta = [
|
|
229
|
+
it.owner ? `담당 ${mdInline(it.owner)}` : '',
|
|
230
|
+
it.due ? `기한 ${mdInline(it.due)}` : '',
|
|
231
|
+
]
|
|
232
|
+
.filter(Boolean)
|
|
233
|
+
.join(', ');
|
|
234
|
+
return `- [ ] ${mdBody(it.task)}${meta ? ` (${meta})` : ''}${mdCite(it.cite, ctx)}`;
|
|
235
|
+
}),
|
|
236
|
+
'',
|
|
237
|
+
];
|
|
238
|
+
case 'qa':
|
|
239
|
+
return block.items.flatMap((it) => [
|
|
240
|
+
`**Q. ${mdBody(it.question)}**`,
|
|
241
|
+
'',
|
|
242
|
+
`${mdBody(it.answer)}${mdCite(it.cite, ctx)}`,
|
|
243
|
+
'',
|
|
244
|
+
]);
|
|
245
|
+
case 'flashcards':
|
|
246
|
+
return [
|
|
247
|
+
...block.cards.flatMap((c) => [
|
|
248
|
+
`- Q. ${mdBody(c.front)}`,
|
|
249
|
+
` - A. ${mdBody(c.back)}${mdCite(c.cite, ctx)}`,
|
|
250
|
+
]),
|
|
251
|
+
'',
|
|
252
|
+
];
|
|
253
|
+
case 'quiz':
|
|
254
|
+
return block.questions.flatMap((q, k) => [
|
|
255
|
+
`**${k + 1}. ${mdBody(q.question)}**`,
|
|
256
|
+
'',
|
|
257
|
+
...q.choices.map((c, ci) => `- (${ci + 1}) ${mdBody(c)}`),
|
|
258
|
+
'',
|
|
259
|
+
`> 정답 (${q.answer + 1}) ${mdBody(q.choices[q.answer] ?? '')}. ${mdBody(q.explanation)}${mdCite(q.cite, ctx)}`,
|
|
260
|
+
'',
|
|
261
|
+
]);
|
|
262
|
+
case 'mindmap':
|
|
263
|
+
return [...outlineMd(block.root, ctx), ''];
|
|
264
|
+
case 'comments':
|
|
265
|
+
return [
|
|
266
|
+
mdBody(block.overview),
|
|
267
|
+
'',
|
|
268
|
+
`분석한 댓글 ${block.total}개`,
|
|
269
|
+
'',
|
|
270
|
+
...block.groups.flatMap((g) => [
|
|
271
|
+
`**${mdInline(g.title)}** (${TONE_LABEL[g.tone]}, ${g.count}개)`,
|
|
272
|
+
'',
|
|
273
|
+
mdBody(g.summary),
|
|
274
|
+
'',
|
|
275
|
+
...g.examples.flatMap((x) => [...quoteLines(mdVerbatim(x.text)), '']),
|
|
276
|
+
]),
|
|
277
|
+
];
|
|
278
|
+
default: {
|
|
279
|
+
const never = block;
|
|
280
|
+
throw new Error(`모르는 블록: ${JSON.stringify(never)}`);
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
/** 탭 id와 패널 id. 키에 들어가는 글자(영숫자, -, .)는 id에 그대로 써도 된다 */
|
|
285
|
+
export const extensionPanelId = (ext) => `ext-${extensionKey(ext)}`;
|
|
286
|
+
export function extensionHtml(ext, ctx) {
|
|
287
|
+
const id = extensionPanelId(ext);
|
|
288
|
+
return `<section class="ext" id="${ctx.escape(id)}" role="tabpanel" aria-labelledby="tab-${ctx.escape(id)}" lang="${ctx.escape(ext.lang)}" tabindex="0" hidden><h2>${ctx.escape(ext.title)}</h2>${ext.blocks
|
|
289
|
+
.map((b, bi) => blockHtml(b, ctx, `${id}-b${bi}`))
|
|
290
|
+
.join('')}</section>`;
|
|
291
|
+
}
|
|
292
|
+
//# sourceMappingURL=render-blocks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render-blocks.js","sourceRoot":"","sources":["../../../src/digest/render-blocks.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,GAMb,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,WAAW,EAAE,cAAc,EAA2B,MAAM,aAAa,CAAC;AACnF,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAqBlE,wDAAwD;AACxD,MAAM,aAAa,GAAG,CAAC,IAAY,EAAE,EAAE,CACrC,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,KAAa,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;AAEpE,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,GAAqB,EAAE,EAAE,CACzD,GAAG;KACA,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;KAC3B,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,EAAE,EAAE,KAAa,EAAE,EAAE,CAAC,WAAW,KAAK,WAAW,CAAC,CAAC;AAEhF,MAAM,QAAQ,GAAG,CAAC,CAAmB,EAAE,GAAqB,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AACxF,MAAM,MAAM,GAAG,CAAC,CAAmB,EAAE,GAAmB,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AAEpF,SAAS,QAAQ,CAAC,KAAiB,EAAE,GAAqB;IACxD,OAAO,OAAO,KAAK;SAChB,GAAG,CACF,CAAC,EAAE,EAAE,EAAE,CACL,OAAO,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,CAC1H;SACA,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,GAA4D;IAC1E,QAAQ,EAAE,IAAI;IACd,QAAQ,EAAE,IAAI;IACd,OAAO,EAAE,IAAI;IACb,QAAQ,EAAE,IAAI;CACf,CAAC;AAEF,SAAS,WAAW,CAAC,IAAiB,EAAE,GAAqB;IAC3D,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,MAAM;QAChC,CAAC,CAAC,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO;QACtE,CAAC,CAAC,EAAE,CAAC;IACP,OAAO,OAAO,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,OAAO,CAAC;AAClG,CAAC;AAED,SAAS,SAAS,CAAC,IAAiB,EAAE,GAAmB,EAAE,KAAK,GAAG,CAAC;IAClE,OAAO;QACL,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE;QAC7F,GAAG,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;KACtE,CAAC;AACJ,CAAC;AAED,qDAAqD;AACrD,MAAM,UAAU,aAAa,CAAC,GAAW,EAAE,OAAe,EAAE,OAAgB;IAC1E,OAAO,kDAAkD,GAAG,6BAC1D,OAAO,CAAC,CAAC,CAAC,SAAS,OAAO,SAAS,CAAC,CAAC,CAAC,EACxC,8HAA8H,OAAO,qBAAqB,CAAC;AAC7J,CAAC;AAED,MAAM,aAAa,GAAoC;IACrD,IAAI,EAAE,KAAK;IACX,KAAK,EAAE,KAAK;IACZ,OAAO,EAAE,KAAK;IACd,IAAI,EAAE,KAAK;CACZ,CAAC;AAEF,iDAAiD;AACjD,MAAM,UAAU,kBAAkB,CAAC,CAAU,EAAE,KAAa,EAAE,GAAqB;IACjF,MAAM,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC;IAC9B,MAAM,IAAI,GAAG,GAAG,KAAK,IAAI,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;IACjD,MAAM,EAAE,GAAG,CAAC,CAAc,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACnD,IAAI,GAAW,CAAC;IAChB,IAAI,OAAe,CAAC;IACpB,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;QACf,KAAK,MAAM;YACT,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YACnC,OAAO,GAAG,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;YACjD,MAAM;QACR,KAAK,OAAO;YACV,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YACpC,OAAO,GAAG,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;YACjD,MAAM;QACR,KAAK,SAAS;YACZ,GAAG,GAAG,UAAU,CAAC,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YACxC,OAAO,GAAG,OAAO,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;YACjG,MAAM;QACR,KAAK,MAAM;YACT,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YAClC,OAAO,GAAG,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC;YACnC,MAAM;QACR,OAAO,CAAC,CAAC,CAAC;YACR,MAAM,KAAK,GAAU,CAAC,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,cAAc,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IACD,OAAO,aAAa,CAAC,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;AACpF,CAAC;AAED,mDAAmD;AACnD,MAAM,UAAU,gBAAgB,CAAC,CAAU,EAAE,GAAmB;IAC9D,MAAM,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACzF,MAAM,IAAI,GAAG,CAAC,CAAc,EAAE,CAAS,EAAE,EAAE,CACzC,GAAG,CAAC,GAAG,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IAC1E,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;QACf,KAAK,MAAM,CAAC;QACZ,KAAK,OAAO;YACV,OAAO,CAAC,GAAG,IAAI,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;QAC7C,KAAK,SAAS;YACZ,OAAO;gBACL,GAAG,IAAI;gBACP,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,KAAK,EAAE,EAAE,GAAG,CAAC,CAAC;gBAClF,EAAE;aACH,CAAC;QACJ,KAAK,MAAM;YACT,OAAO,CAAC,GAAG,IAAI,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;QAClD,OAAO,CAAC,CAAC,CAAC;YACR,MAAM,KAAK,GAAU,CAAC,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,cAAc,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;AACH,CAAC;AAED,iEAAiE;AACjE,uCAAuC;AACvC,wDAAwD;AACxD,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AAE1F,qEAAqE;AACrE,MAAM,OAAO,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AAEnE,sFAAsF;AACtF,sDAAsD;AACtD,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAE,EAAE,CAChC,IAAI;KACD,OAAO,CAAC,mBAAmB,EAAE,MAAM,CAAC;KACpC,OAAO,CAAC,kBAAkB,EAAE,MAAM,CAAC;KACnC,OAAO,CAAC,0BAA0B,EAAE,QAAQ,CAAC,CAAC;AAEnD,gFAAgF;AAChF,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAE9E,kEAAkE;AAClE,uDAAuD;AACvD,MAAM,MAAM,GAAG,CAAC,IAAY,EAAE,EAAE,CAC9B,QAAQ,CACN,OAAO,CACL,aAAa,CAAC,IAAI,CAAC;KAChB,KAAK,CAAC,WAAW,EAAE,CAAC;KACpB,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;KACxE,IAAI,CAAC,EAAE,CAAC,CACZ,CACF,CAAC;AAEJ,8DAA8D;AAC9D,sDAAsD;AACtD,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,EAAE,CAClC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;AAE3E,SAAS,MAAM,CAAC,KAAiB,EAAE,GAAmB,EAAE,KAAK,GAAG,CAAC;IAC/D,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC;QAC3B,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE;QAClE,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;KAC5D,CAAC,CAAC;AACL,CAAC;AAED,6CAA6C;AAC7C,MAAM,UAAU,SAAS,CAAC,KAAY,EAAE,GAAqB,EAAE,EAAE,GAAG,GAAG;IACrE,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,SAAS;YACZ,OAAO,OAAO,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;QAC9C,KAAK,MAAM;YACT,OAAO,MAAM,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC;QAC7E,KAAK,MAAM;YACT,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC;QACpG,KAAK,OAAO;YACV,OAAO,qCAAqC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,gBACvF,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,uBAAuB,UAAU,CAAC,KAAK,CAAC,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EACxF,GACE,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,IAAI;gBACzB,CAAC,CAAC,eAAe,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GACvE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAC/D,eAAe;gBACjB,CAAC,CAAC,EACN,WAAW,CAAC;QACd,KAAK,YAAY;YACf,OAAO,uBAAuB,KAAK,CAAC,KAAK;iBACtC,GAAG,CACF,CAAC,EAAE,EAAE,EAAE,CACL,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,OACrD,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EACzD,aAAa,CAChB;iBACA,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;QACrB,KAAK,SAAS;YACZ,OAAO,uBAAuB,KAAK,CAAC,KAAK;iBACtC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE;gBACV,MAAM,IAAI,GAAG;oBACX,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE;oBACzD,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE;iBACtD,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACX,OAAO,wDAAwD,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,GAC9G,IAAI,CAAC,CAAC,CAAC,UAAU,IAAI,UAAU,CAAC,CAAC,CAAC,EACpC,aAAa,CAAC;YAChB,CAAC,CAAC;iBACD,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;QACrB,KAAK,IAAI;YACP,OAAO,kBAAkB,KAAK,CAAC,KAAK;iBACjC,GAAG,CACF,CAAC,EAAE,EAAE,EAAE,CACL,OAAO,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,CAAC,YAAY,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,OAAO,CAC5G;iBACA,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;QACrB,KAAK,YAAY;YACf,OAAO,sBAAsB,KAAK,CAAC,KAAK;iBACrC,GAAG,CACF,CAAC,CAAC,EAAE,EAAE,CACJ,kCAAkC,UAAU,CAAC,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,oCAAoC,UAAU,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,kBAAkB,CAClK;iBACA,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC;QACtB,KAAK,MAAM;YACT,OAAO,oBAAoB,KAAK,CAAC,SAAS;iBACvC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;gBACZ,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;gBACvC,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO;qBACtB,GAAG,CACF,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CACR,wDAAwD,IAAI,YAAY,EAAE,YAAY,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,iBAAiB,CAC5H;qBACA,IAAI,CAAC,EAAE,CAAC,CAAC;gBACZ,MAAM,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;gBACxC,OAAO,6CAA6C,CAAC,CAAC,MAAM,aAAa,UAAU,CAAC,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,YAAY,OAAO,4JAA4J,CAAC,CAAC,MAAM,GAAG,CAAC,SAAS,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC,UAAU,UAAU,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,4BAA4B,CAAC;YAC7Z,CAAC,CAAC;iBACD,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;QACrB,KAAK,SAAS;YACZ,OAAO,aAAa,CAClB,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,EACjE,OAAO,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,OAAO,CAC3C,CAAC;QACJ,KAAK,UAAU,CAAC,CAAC,CAAC;YAChB,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM;iBACxB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;gBACT,MAAM,GAAG,GACP,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACjF,MAAM,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM;oBAChC,CAAC,CAAC,qBAAqB,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO;oBACrG,CAAC,CAAC,EAAE,CAAC;gBACP,OAAO,0BAA0B,CAAC,CAAC,IAAI,6BAA6B,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,6BAA6B,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC,KAAK,wEAAwE,GAAG,mBAAmB,UAAU,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,OAAO,QAAQ,OAAO,CAAC;YAC/T,CAAC,CAAC;iBACD,IAAI,CAAC,EAAE,CAAC,CAAC;YACZ,OAAO,gDAAgD,UAAU,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,iCAAiC,KAAK,CAAC,KAAK,8BAA8B,MAAM,aAAa,CAAC;QACtL,CAAC;QACD,OAAO,CAAC,CAAC,CAAC;YACR,MAAM,KAAK,GAAU,KAAK,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,WAAW,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAY,EAAE,GAAmB;IAC7D,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,SAAS;YACZ,OAAO,CAAC,MAAM,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QAC5C,KAAK,MAAM;YACT,OAAO,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QACjE,KAAK,MAAM;YACT,OAAO;gBACL,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC5D,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC;gBAC3B,EAAE;aACH,CAAC;QACJ,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,MAAM,EAAE,GAAG;gBACT,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;gBACnD,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;aACrC;iBACE,MAAM,CAAC,OAAO,CAAC;iBACf,IAAI,CAAC,IAAI,CAAC,CAAC;YACd,MAAM,IAAI,GAAG,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;YAChD,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC9C,OAAO;gBACL,GAAG,IAAI;gBACP,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC7E,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACvC,EAAE;aACH,CAAC;QACJ,CAAC;QACD,KAAK,YAAY;YACf,OAAO;gBACL,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAChB,CAAC,EAAE,EAAE,EAAE,CACL,KAAK,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAClG;gBACD,EAAE;aACH,CAAC;QACJ,KAAK,SAAS;YACZ,OAAO;gBACL,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE;oBACxB,MAAM,IAAI,GAAG;wBACX,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;wBAC1C,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;qBACvC;yBACE,MAAM,CAAC,OAAO,CAAC;yBACf,IAAI,CAAC,IAAI,CAAC,CAAC;oBACd,OAAO,SAAS,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;gBACtF,CAAC,CAAC;gBACF,EAAE;aACH,CAAC;QACJ,KAAK,IAAI;YACP,OAAO,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC;gBACjC,QAAQ,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI;gBAC/B,EAAE;gBACF,GAAG,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE;gBAC7C,EAAE;aACH,CAAC,CAAC;QACL,KAAK,YAAY;YACf,OAAO;gBACL,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;oBAC5B,QAAQ,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE;oBACzB,UAAU,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE;iBACjD,CAAC;gBACF,EAAE;aACH,CAAC;QACJ,KAAK,MAAM;YACT,OAAO,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBACvC,KAAK,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI;gBACrC,EAAE;gBACF,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;gBACzD,EAAE;gBACF,SAAS,CAAC,CAAC,MAAM,GAAG,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE;gBAC7G,EAAE;aACH,CAAC,CAAC;QACL,KAAK,SAAS;YACZ,OAAO,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;QAC7C,KAAK,UAAU;YACb,OAAO;gBACL,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC;gBACtB,EAAE;gBACF,UAAU,KAAK,CAAC,KAAK,GAAG;gBACxB,EAAE;gBACF,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;oBAC7B,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,IAAI;oBAC/D,EAAE;oBACF,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;oBACjB,EAAE;oBACF,GAAG,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;iBACtE,CAAC;aACH,CAAC;QACJ,OAAO,CAAC,CAAC,CAAC;YACR,MAAM,KAAK,GAAU,KAAK,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,WAAW,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;AACH,CAAC;AAED,wDAAwD;AACxD,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,GAAyC,EAAE,EAAE,CAC5E,OAAO,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;AAE7B,MAAM,UAAU,aAAa,CAAC,GAAc,EAAE,GAAqB;IACjE,MAAM,EAAE,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;IACjC,OAAO,4BAA4B,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,0CAA0C,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,WAAW,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,6BAA6B,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,MAAM;SACzM,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;SACjD,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC;AAC1B,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { type Digest, type Transcript } from './schema.js';
|
|
2
|
+
import type { DigestTemplate } from './templates.js';
|
|
3
|
+
export interface RenderHtmlOptions {
|
|
4
|
+
/** 프레임 파일이 있는지. 상대 경로 모드에서 없는 프레임은 자리를 만들지 않는다 */
|
|
5
|
+
frameExists?: (fileName: string) => boolean;
|
|
6
|
+
/** 켜면 프레임을 data URI로 싣는다. 파일 하나만 들고 다닐 때 쓴다 */
|
|
7
|
+
inlineFrames?: boolean;
|
|
8
|
+
loadFrame?: (fileName: string) => Buffer | null;
|
|
9
|
+
/** "+ 더 만들기" 메뉴에 띄울 템플릿. 이미 만든 확장의 템플릿은 메뉴에서 뺀다 */
|
|
10
|
+
templates?: Pick<DigestTemplate, 'id' | 'title' | 'description'>[];
|
|
11
|
+
}
|
|
12
|
+
export interface RenderHtmlResult {
|
|
13
|
+
html: string;
|
|
14
|
+
warnings: string[];
|
|
15
|
+
}
|
|
16
|
+
export declare function embedJson(value: unknown): string;
|
|
17
|
+
/**
|
|
18
|
+
* digest.json을 뷰어 HTML 한 장으로 바꾼다. LLM을 부르지 않는다.
|
|
19
|
+
* 본문 글자는 escape한 뒤 굵게와 키워드 마커 두 가지만 태그로 바꾼다.
|
|
20
|
+
*/
|
|
21
|
+
export declare function renderDigestHtml(digest: Digest, transcript: Transcript, opts?: RenderHtmlOptions): RenderHtmlResult;
|
|
22
|
+
//# sourceMappingURL=render-html.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render-html.d.ts","sourceRoot":"","sources":["../../../src/digest/render-html.ts"],"names":[],"mappings":"AAYA,OAAO,EAOL,KAAK,MAAM,EAGX,KAAK,UAAU,EAEhB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,MAAM,WAAW,iBAAiB;IAChC,kDAAkD;IAClD,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC;IAC5C,+CAA+C;IAC/C,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,SAAS,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IAChD,mDAAmD;IACnD,SAAS,CAAC,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,GAAG,OAAO,GAAG,aAAa,CAAC,EAAE,CAAC;CACpE;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAwCD,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAKhD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,UAAU,EACtB,IAAI,GAAE,iBAAsB,GAC3B,gBAAgB,CAyRlB"}
|