@tienne/gestalt 0.102.0 → 0.104.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 +208 -108
- 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 +430 -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/plugin/skills/video-digest/templates/visual.md +22 -0
- package/dist/src/cli/commands/digest.d.ts +60 -0
- package/dist/src/cli/commands/digest.d.ts.map +1 -0
- package/dist/src/cli/commands/digest.js +401 -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 +81 -0
- package/dist/src/cli/index.js.map +1 -1
- package/dist/src/digest/blocks.d.ts +5224 -0
- package/dist/src/digest/blocks.d.ts.map +1 -0
- package/dist/src/digest/blocks.js +156 -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/diagram-schema.d.ts +765 -0
- package/dist/src/digest/diagram-schema.d.ts.map +1 -0
- package/dist/src/digest/diagram-schema.js +72 -0
- package/dist/src/digest/diagram-schema.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 +46 -0
- package/dist/src/digest/frames.d.ts.map +1 -0
- package/dist/src/digest/frames.js +206 -0
- package/dist/src/digest/frames.js.map +1 -0
- package/dist/src/digest/index.d.ts +26 -0
- package/dist/src/digest/index.d.ts.map +1 -0
- package/dist/src/digest/index.js +26 -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 +71 -0
- package/dist/src/digest/lint-extension.d.ts.map +1 -0
- package/dist/src/digest/lint-extension.js +512 -0
- package/dist/src/digest/lint-extension.js.map +1 -0
- package/dist/src/digest/lint.d.ts +50 -0
- package/dist/src/digest/lint.d.ts.map +1 -0
- package/dist/src/digest/lint.js +560 -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 +107 -0
- package/dist/src/digest/merge.js.map +1 -0
- package/dist/src/digest/ocr.d.ts +100 -0
- package/dist/src/digest/ocr.d.ts.map +1 -0
- package/dist/src/digest/ocr.js +179 -0
- package/dist/src/digest/ocr.js.map +1 -0
- package/dist/src/digest/prose.d.ts +47 -0
- package/dist/src/digest/prose.d.ts.map +1 -0
- package/dist/src/digest/prose.js +171 -0
- package/dist/src/digest/prose.js.map +1 -0
- package/dist/src/digest/render-blocks.d.ts +38 -0
- package/dist/src/digest/render-blocks.d.ts.map +1 -0
- package/dist/src/digest/render-blocks.js +378 -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 +505 -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 +126 -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 +126 -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/scenes.d.ts +92 -0
- package/dist/src/digest/scenes.d.ts.map +1 -0
- package/dist/src/digest/scenes.js +182 -0
- package/dist/src/digest/scenes.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 +12886 -0
- package/dist/src/digest/schema.d.ts.map +1 -0
- package/dist/src/digest/schema.js +215 -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 +74 -0
- package/dist/src/digest/svg.d.ts.map +1 -0
- package/dist/src/digest/svg.js +415 -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 +735 -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 +151 -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 +208 -108
- 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 +430 -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
- package/plugin/skills/video-digest/templates/visual.md +22 -0
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { type Block, type Extension } from './blocks.js';
|
|
2
|
+
import { type Cite, type Diagram } from './schema.js';
|
|
3
|
+
/**
|
|
4
|
+
* 확장 리포트 블록을 HTML과 마크다운으로 그린다. 블록 타입을 더하면 여기와 lint-extension.ts의
|
|
5
|
+
* blockFields 두 곳에 case를 넣는다. 둘 다 never로 빠진 타입을 컴파일 때 잡는다
|
|
6
|
+
*/
|
|
7
|
+
export interface BlockHtmlContext {
|
|
8
|
+
escape: (s: string) => string;
|
|
9
|
+
cite: (c: Cite) => string;
|
|
10
|
+
/** cite.key 문장의 시작 시각 링크. 누르면 영상이 그 자리로 간다 */
|
|
11
|
+
time: (c: Cite) => string;
|
|
12
|
+
/** cite.key 문장의 시작 초. SVG 노드에 data-sec으로 단다 */
|
|
13
|
+
sec: (c: Cite) => number;
|
|
14
|
+
}
|
|
15
|
+
export interface BlockMdContext {
|
|
16
|
+
cite: (c: Cite) => string;
|
|
17
|
+
time: (c: Cite) => string;
|
|
18
|
+
}
|
|
19
|
+
/** 그림 하나와 확대 버튼, 스크립트 없이도 읽히는 목록. 대섹션 도식도 이 틀을 쓴다 */
|
|
20
|
+
export declare function diagramFigure(svg: string, outline: string, caption?: string): string;
|
|
21
|
+
export declare const DIAGRAM_LABEL: Record<Diagram['kind'], string>;
|
|
22
|
+
/** 그림과 스크립트 없이 읽히는 목록. aria는 그림의 aria-label이다 */
|
|
23
|
+
export declare function diagramParts(d: Diagram, aria: string, ctx: BlockHtmlContext): {
|
|
24
|
+
svg: string;
|
|
25
|
+
outline: string;
|
|
26
|
+
};
|
|
27
|
+
/** 대섹션 도식. title은 그림의 aria-label에 붙는 대섹션 제목이다 */
|
|
28
|
+
export declare function sectionDiagramHtml(d: Diagram, title: string, ctx: BlockHtmlContext): string;
|
|
29
|
+
/** 마크다운에는 그림 대신 목록이나 표로 옮긴다. 순서가 있는 흐름과 순환, 타임라인은 번호를 단다 */
|
|
30
|
+
export declare function sectionDiagramMd(d: Diagram, ctx: BlockMdContext): string[];
|
|
31
|
+
export declare const mdInline: (text: string) => string;
|
|
32
|
+
/** id는 블록마다 겹치지 않는 접두어다. 퀴즈 라디오 그룹 이름에 쓴다 */
|
|
33
|
+
export declare function blockHtml(block: Block, ctx: BlockHtmlContext, id?: string): string;
|
|
34
|
+
export declare function blockMarkdown(block: Block, ctx: BlockMdContext): string[];
|
|
35
|
+
/** 탭 id와 패널 id. 키에 들어가는 글자(영숫자, -, .)는 id에 그대로 써도 된다 */
|
|
36
|
+
export declare const extensionPanelId: (ext: Pick<Extension, "template" | "lang">) => string;
|
|
37
|
+
export declare function extensionHtml(ext: Extension, ctx: BlockHtmlContext): string;
|
|
38
|
+
//# sourceMappingURL=render-blocks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render-blocks.d.ts","sourceRoot":"","sources":["../../../src/digest/render-blocks.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,KAAK,EAEV,KAAK,SAAS,EAGf,MAAM,aAAa,CAAC;AACrB,OAAO,EAA+B,KAAK,IAAI,EAAE,KAAK,OAAO,EAAE,MAAM,aAAa,CAAC;AAYnF;;;GAGG;AAEH,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IAC9B,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,KAAK,MAAM,CAAC;IAC1B,8CAA8C;IAC9C,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,KAAK,MAAM,CAAC;IAC1B,+CAA+C;IAC/C,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,KAAK,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,KAAK,MAAM,CAAC;IAC1B,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,KAAK,MAAM,CAAC;CAC3B;AA4CD,qDAAqD;AACrD,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAIpF;AAED,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,CASzD,CAAC;AAoBF,iDAAiD;AACjD,wBAAgB,YAAY,CAC1B,CAAC,EAAE,OAAO,EACV,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,gBAAgB,GACpB;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAqDlC;AAED,iDAAiD;AACjD,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,gBAAgB,GAAG,MAAM,CAG3F;AAED,4DAA4D;AAC5D,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,cAAc,GAAG,MAAM,EAAE,CAiD1E;AAmBD,eAAO,MAAM,QAAQ,GAAI,MAAM,MAAM,WAAwC,CAAC;AA0B9E,6CAA6C;AAC7C,wBAAgB,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,gBAAgB,EAAE,EAAE,SAAM,GAAG,MAAM,CAmG/E;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,cAAc,GAAG,MAAM,EAAE,CAsGzE;AAED,wDAAwD;AACxD,eAAO,MAAM,gBAAgB,GAAI,KAAK,IAAI,CAAC,SAAS,EAAE,UAAU,GAAG,MAAM,CAAC,WAC9C,CAAC;AAE7B,wBAAgB,aAAa,CAAC,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,gBAAgB,GAAG,MAAM,CAK3E"}
|
|
@@ -0,0 +1,378 @@
|
|
|
1
|
+
import { extensionKey, } from './blocks.js';
|
|
2
|
+
import { boldPattern, keywordPattern } from './schema.js';
|
|
3
|
+
import { beforeAfterSvg, causalSvg, compareSvg, cycleSvg, flowSvg, matrixSvg, timelineSvg, 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
|
+
export const DIAGRAM_LABEL = {
|
|
39
|
+
flow: '흐름도',
|
|
40
|
+
cycle: '순환도',
|
|
41
|
+
compare: '비교표',
|
|
42
|
+
tree: '구조도',
|
|
43
|
+
timeline: '타임라인',
|
|
44
|
+
matrix: '매트릭스',
|
|
45
|
+
causal: '인과도',
|
|
46
|
+
beforeAfter: '전후 비교',
|
|
47
|
+
};
|
|
48
|
+
const BEFORE = '전';
|
|
49
|
+
const AFTER = '후';
|
|
50
|
+
/** 매트릭스 칸 이름. 가로축 값을 먼저 쓴다 */
|
|
51
|
+
const matrixCellNames = (d) => [
|
|
52
|
+
`${d.x.low}, ${d.y.high}`,
|
|
53
|
+
`${d.x.high}, ${d.y.high}`,
|
|
54
|
+
`${d.x.low}, ${d.y.low}`,
|
|
55
|
+
`${d.x.high}, ${d.y.low}`,
|
|
56
|
+
];
|
|
57
|
+
/** 인과도를 원인, 현상, 결과를 가지로 둔 트리로 바꾼다. 목록 보기와 마크다운이 같은 꼴을 쓴다 */
|
|
58
|
+
const causalOutline = (d) => [
|
|
59
|
+
...(d.inputs.length ? [{ label: '원인', children: d.inputs }] : []),
|
|
60
|
+
{ ...d.center, label: `현상: ${d.center.label}` },
|
|
61
|
+
...(d.outputs.length ? [{ label: '결과', children: d.outputs }] : []),
|
|
62
|
+
];
|
|
63
|
+
/** 그림과 스크립트 없이 읽히는 목록. aria는 그림의 aria-label이다 */
|
|
64
|
+
export function diagramParts(d, aria, ctx) {
|
|
65
|
+
const opts = { sec: ctx.sec };
|
|
66
|
+
const li = (n) => outlineHtml(n, ctx);
|
|
67
|
+
switch (d.kind) {
|
|
68
|
+
case 'flow':
|
|
69
|
+
return { svg: flowSvg(d.steps, opts, aria), outline: `<ol>${d.steps.map(li).join('')}</ol>` };
|
|
70
|
+
case 'cycle':
|
|
71
|
+
return {
|
|
72
|
+
svg: cycleSvg(d.steps, opts, aria),
|
|
73
|
+
outline: `<ol>${d.steps.map(li).join('')}</ol>`,
|
|
74
|
+
};
|
|
75
|
+
case 'compare':
|
|
76
|
+
return {
|
|
77
|
+
svg: compareSvg(d.columns, opts, aria),
|
|
78
|
+
outline: `<ul>${d.columns.map((c) => li({ label: c.title, children: c.items })).join('')}</ul>`,
|
|
79
|
+
};
|
|
80
|
+
case 'tree':
|
|
81
|
+
return { svg: treeSvg(d.root, opts, aria), outline: `<ul>${li(d.root)}</ul>` };
|
|
82
|
+
case 'timeline':
|
|
83
|
+
return {
|
|
84
|
+
svg: timelineSvg(d.events, opts, aria),
|
|
85
|
+
outline: `<ol>${d.events
|
|
86
|
+
.map((e) => `<li><b>${ctx.escape(e.when)}</b> ${ctx.escape(e.label)}${e.cite ? ` ${ctx.time(e.cite)}` : ''}</li>`)
|
|
87
|
+
.join('')}</ol>`,
|
|
88
|
+
};
|
|
89
|
+
case 'matrix': {
|
|
90
|
+
const names = matrixCellNames(d);
|
|
91
|
+
return {
|
|
92
|
+
svg: matrixSvg(d.x, d.y, d.cells, opts, aria),
|
|
93
|
+
outline: `<ul>${d.cells.map((c, k) => li({ label: names[k], children: c })).join('')}</ul>`,
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
case 'causal':
|
|
97
|
+
return {
|
|
98
|
+
svg: causalSvg(d.inputs, d.center, d.outputs, opts, aria),
|
|
99
|
+
outline: `<ul>${causalOutline(d).map(li).join('')}</ul>`,
|
|
100
|
+
};
|
|
101
|
+
case 'beforeAfter':
|
|
102
|
+
return {
|
|
103
|
+
svg: beforeAfterSvg(d.before, d.after, opts, aria),
|
|
104
|
+
outline: `<ul>${li({ label: d.before.title ?? BEFORE, children: d.before.items })}${li({
|
|
105
|
+
label: d.after.title ?? AFTER,
|
|
106
|
+
children: d.after.items,
|
|
107
|
+
})}</ul>`,
|
|
108
|
+
};
|
|
109
|
+
default: {
|
|
110
|
+
const never = d;
|
|
111
|
+
throw new Error(`알 수 없는 도식: ${String(never)}`);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
/** 대섹션 도식. title은 그림의 aria-label에 붙는 대섹션 제목이다 */
|
|
116
|
+
export function sectionDiagramHtml(d, title, ctx) {
|
|
117
|
+
const { svg, outline } = diagramParts(d, `${title} ${DIAGRAM_LABEL[d.kind]}`, ctx);
|
|
118
|
+
return diagramFigure(svg, outline, d.caption ? ctx.escape(d.caption) : undefined);
|
|
119
|
+
}
|
|
120
|
+
/** 마크다운에는 그림 대신 목록이나 표로 옮긴다. 순서가 있는 흐름과 순환, 타임라인은 번호를 단다 */
|
|
121
|
+
export function sectionDiagramMd(d, ctx) {
|
|
122
|
+
const head = d.caption ? [`*${DIAGRAM_LABEL[d.kind]}: ${mdInline(d.caption)}*`, ''] : [];
|
|
123
|
+
const at = (n) => (n.cite ? ` ${ctx.time(n.cite)}` : '');
|
|
124
|
+
const step = (n, k) => `${k + 1}. ${mdInline(n.label)}${at(n)}`;
|
|
125
|
+
switch (d.kind) {
|
|
126
|
+
case 'flow':
|
|
127
|
+
case 'cycle':
|
|
128
|
+
return [...head, ...d.steps.map(step), ''];
|
|
129
|
+
case 'compare':
|
|
130
|
+
return [
|
|
131
|
+
...head,
|
|
132
|
+
...d.columns.flatMap((c) => outlineMd({ label: c.title, children: c.items }, ctx)),
|
|
133
|
+
'',
|
|
134
|
+
];
|
|
135
|
+
case 'tree':
|
|
136
|
+
return [...head, ...outlineMd(d.root, ctx), ''];
|
|
137
|
+
case 'timeline':
|
|
138
|
+
return [
|
|
139
|
+
...head,
|
|
140
|
+
...d.events.map((e, k) => `${k + 1}. **${mdInline(e.when)}** ${mdInline(e.label)}${at(e)}`),
|
|
141
|
+
'',
|
|
142
|
+
];
|
|
143
|
+
case 'matrix': {
|
|
144
|
+
// 칸 안 여러 노드는 표 한 칸에 쉼표로 잇는다. mdInline이 |를 이스케이프해서 표가 안 깨진다
|
|
145
|
+
const cell = (k) => d.cells[k].map((n) => `${mdInline(n.label)}${at(n)}`).join(', ') || ' ';
|
|
146
|
+
return [
|
|
147
|
+
...head,
|
|
148
|
+
`| | ${mdInline(d.x.low)} | ${mdInline(d.x.high)} |`,
|
|
149
|
+
'| --- | --- | --- |',
|
|
150
|
+
`| ${mdInline(d.y.high)} | ${cell(0)} | ${cell(1)} |`,
|
|
151
|
+
`| ${mdInline(d.y.low)} | ${cell(2)} | ${cell(3)} |`,
|
|
152
|
+
'',
|
|
153
|
+
];
|
|
154
|
+
}
|
|
155
|
+
case 'causal':
|
|
156
|
+
return [...head, ...causalOutline(d).flatMap((n) => outlineMd(n, ctx)), ''];
|
|
157
|
+
case 'beforeAfter':
|
|
158
|
+
return [
|
|
159
|
+
...head,
|
|
160
|
+
...outlineMd({ label: d.before.title ?? BEFORE, children: d.before.items }, ctx),
|
|
161
|
+
...outlineMd({ label: d.after.title ?? AFTER, children: d.after.items }, ctx),
|
|
162
|
+
'',
|
|
163
|
+
];
|
|
164
|
+
default: {
|
|
165
|
+
const never = d;
|
|
166
|
+
throw new Error(`알 수 없는 도식: ${String(never)}`);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
// 댓글과 자막 인용은 남이 쓴 글이라 마크다운 문법으로 읽히면 링크나 HTML이 끼어든다. 문법 글자를 무력화한다
|
|
171
|
+
// `~`는 '1~2개와 3~4개'가 취소선으로 바뀌어서 함께 막는다
|
|
172
|
+
// 맨 URL은 보이는 글자가 곧 목적지라 숨은 링크가 아니므로 두고 링크 문법과 HTML만 막는다
|
|
173
|
+
const mdVerbatim = (text) => text.replace(/[\\`*_[\]<>#|&~]/g, (ch) => `\\${ch}`);
|
|
174
|
+
// 한 줄로 쓰는 칸에 개행이 섞이면 목록이나 인용 밖으로 빠져나간다. HTML도 이 칸들의 개행을 공백으로 접어 보여준다
|
|
175
|
+
const oneLine = (text) => text.replace(/\s+/g, ' ').trim();
|
|
176
|
+
// 줄 첫머리의 `-`, `+`, `1.`, `1)`은 뒤에 공백이 오거나 줄이 끝나면 목록으로, `---`와 `===`는 구분선이나 제목 밑줄로 읽힌다
|
|
177
|
+
// HTML은 평문으로 보여줘서 맞춘다. `-5도`나 `3.5배`는 문법이 아니라서 그대로 둔다
|
|
178
|
+
const lineHead = (text) => text
|
|
179
|
+
.replace(/^([-+])(?=\s|$|-)/, '\\$1')
|
|
180
|
+
.replace(/^(=+)(?=[ \t]*$)/, '\\$1')
|
|
181
|
+
.replace(/^(\d{1,9})([.)])(?=\s|$)/, '$1\\$2');
|
|
182
|
+
// 제목, 라벨, 이름 칸도 자막과 댓글에서 나온 값이다. lint가 `**`를 막는 칸이라 문법 글자를 전부 이스케이프해도 잃는 서식이 없다
|
|
183
|
+
export const mdInline = (text) => lineHead(mdVerbatim(oneLine(text)));
|
|
184
|
+
// 본문 칸도 자막에서 나온 글이라 링크나 HTML, 줄 머리 문법이 끼어들 수 있다. HTML 쪽처럼 굵게만 살린다
|
|
185
|
+
// 개행은 굵게를 가른 뒤에 접는다. 먼저 접으면 줄을 넘는 `**`가 마크다운에서만 굵게가 된다
|
|
186
|
+
const mdBody = (text) => lineHead(oneLine(stripKeywords(text)
|
|
187
|
+
.split(boldPattern())
|
|
188
|
+
.map((part, k) => (k % 2 ? `**${mdVerbatim(part)}**` : mdVerbatim(part)))
|
|
189
|
+
.join('')));
|
|
190
|
+
// 인용 원문은 줄을 살리므로 줄마다 첫머리를 막는다. 마크다운은 홑 `\r`도 줄 끝으로 읽어서 같이 가른다
|
|
191
|
+
// 앞 공백이 4칸이면 코드 블록이 되고 뒤 공백은 `===` 밑줄 판정을 가려서 양끝을 걷는다
|
|
192
|
+
const quoteLines = (text) => text.split(/\r\n|\r|\n/).map((l) => `> ${lineHead(l.trim())}`.trimEnd());
|
|
193
|
+
function listMd(items, ctx, depth = 0) {
|
|
194
|
+
return items.flatMap((it) => [
|
|
195
|
+
`${' '.repeat(depth)}- ${mdBody(it.text)}${mdCite(it.cite, ctx)}`,
|
|
196
|
+
...(it.children ? listMd(it.children, ctx, depth + 1) : []),
|
|
197
|
+
]);
|
|
198
|
+
}
|
|
199
|
+
/** id는 블록마다 겹치지 않는 접두어다. 퀴즈 라디오 그룹 이름에 쓴다 */
|
|
200
|
+
export function blockHtml(block, ctx, id = 'b') {
|
|
201
|
+
switch (block.type) {
|
|
202
|
+
case 'heading':
|
|
203
|
+
return `<h3>${ctx.escape(block.text)}</h3>`;
|
|
204
|
+
case 'text':
|
|
205
|
+
return `<p>${htmlInline(block.text, ctx)}${htmlCite(block.cite, ctx)}</p>`;
|
|
206
|
+
case 'list':
|
|
207
|
+
return `${block.title ? `<h4>${ctx.escape(block.title)}</h4>` : ''}${listHtml(block.items, ctx)}`;
|
|
208
|
+
case 'quote':
|
|
209
|
+
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
|
|
210
|
+
? `<figcaption>${block.speaker ? `<b>${ctx.escape(block.speaker)}</b>` : ''}${block.note ? `<span>${htmlInline(block.note, ctx)}</span>` : ''}</figcaption>`
|
|
211
|
+
: ''}</figure>`;
|
|
212
|
+
case 'timestamps':
|
|
213
|
+
return `<ol class="ext-toc">${block.items
|
|
214
|
+
.map((it) => `<li>${ctx.time(it.cite)}<div><b>${ctx.escape(it.title)}</b>${it.summary ? `<p>${htmlInline(it.summary, ctx)}</p>` : ''}</div></li>`)
|
|
215
|
+
.join('')}</ol>`;
|
|
216
|
+
case 'actions':
|
|
217
|
+
return `<ul class="actions">${block.items
|
|
218
|
+
.map((it) => {
|
|
219
|
+
const meta = [
|
|
220
|
+
it.owner ? `<span>담당 ${ctx.escape(it.owner)}</span>` : '',
|
|
221
|
+
it.due ? `<span>기한 ${ctx.escape(it.due)}</span>` : '',
|
|
222
|
+
].join('');
|
|
223
|
+
return `<li><span class="box" aria-hidden="true"></span><div>${htmlInline(it.task, ctx)}${htmlCite(it.cite, ctx)}${meta ? `<small>${meta}</small>` : ''}</div></li>`;
|
|
224
|
+
})
|
|
225
|
+
.join('')}</ul>`;
|
|
226
|
+
case 'qa':
|
|
227
|
+
return `<dl class="qa">${block.items
|
|
228
|
+
.map((it) => `<dt>${htmlInline(it.question, ctx)}</dt><dd>${htmlInline(it.answer, ctx)}${htmlCite(it.cite, ctx)}</dd>`)
|
|
229
|
+
.join('')}</dl>`;
|
|
230
|
+
case 'flashcards':
|
|
231
|
+
return `<div class="cards">${block.cards
|
|
232
|
+
.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>`)
|
|
233
|
+
.join('')}</div>`;
|
|
234
|
+
case 'quiz':
|
|
235
|
+
return `<ol class="quiz">${block.questions
|
|
236
|
+
.map((q, k) => {
|
|
237
|
+
const name = ctx.escape(`${id}-q${k}`);
|
|
238
|
+
const choices = q.choices
|
|
239
|
+
.map((c, ci) => `<label class="quiz-choice"><input type="radio" name="${name}" value="${ci}"> <span>${htmlInline(c, ctx)}</span></label>`)
|
|
240
|
+
.join('');
|
|
241
|
+
const right = q.choices[q.answer] ?? '';
|
|
242
|
+
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>`;
|
|
243
|
+
})
|
|
244
|
+
.join('')}</ol>`;
|
|
245
|
+
case 'mindmap':
|
|
246
|
+
return diagramFigure(treeSvg(block.root, { sec: ctx.sec }, `${block.root.label} 마인드맵`), `<ul>${outlineHtml(block.root, ctx)}</ul>`);
|
|
247
|
+
case 'figure': {
|
|
248
|
+
const { svg, outline } = diagramParts(block.diagram, `${block.title} ${DIAGRAM_LABEL[block.diagram.kind]}`, ctx);
|
|
249
|
+
const caption = block.diagram.caption ? ctx.escape(block.diagram.caption) : undefined;
|
|
250
|
+
return `<article class="fig-card"><h3>${ctx.escape(block.title)}</h3>${diagramFigure(svg, outline, caption)}<p class="fig-exp">${htmlInline(block.explanation, ctx)}${ctx.cite(block.cite)}</p></article>`;
|
|
251
|
+
}
|
|
252
|
+
case 'comments': {
|
|
253
|
+
const groups = block.groups
|
|
254
|
+
.map((g) => {
|
|
255
|
+
const pct = block.total > 0 ? Math.min(100, Math.round((g.count / block.total) * 100)) : 0;
|
|
256
|
+
const examples = g.examples.length
|
|
257
|
+
? `<ul class="cm-ex">${g.examples.map((x) => `<li><q>${ctx.escape(x.text)}</q></li>`).join('')}</ul>`
|
|
258
|
+
: '';
|
|
259
|
+
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>`;
|
|
260
|
+
})
|
|
261
|
+
.join('');
|
|
262
|
+
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>`;
|
|
263
|
+
}
|
|
264
|
+
default: {
|
|
265
|
+
const never = block;
|
|
266
|
+
throw new Error(`모르는 블록: ${JSON.stringify(never)}`);
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
export function blockMarkdown(block, ctx) {
|
|
271
|
+
switch (block.type) {
|
|
272
|
+
case 'heading':
|
|
273
|
+
return [`## ${mdInline(block.text)}`, ''];
|
|
274
|
+
case 'text':
|
|
275
|
+
return [`${mdBody(block.text)}${mdCite(block.cite, ctx)}`, ''];
|
|
276
|
+
case 'list':
|
|
277
|
+
return [
|
|
278
|
+
...(block.title ? [`**${mdInline(block.title)}**`, ''] : []),
|
|
279
|
+
...listMd(block.items, ctx),
|
|
280
|
+
'',
|
|
281
|
+
];
|
|
282
|
+
case 'quote': {
|
|
283
|
+
const by = [
|
|
284
|
+
block.speaker ? `— ${mdInline(block.speaker)}` : '',
|
|
285
|
+
block.note ? mdBody(block.note) : '',
|
|
286
|
+
]
|
|
287
|
+
.filter(Boolean)
|
|
288
|
+
.join(', ');
|
|
289
|
+
const text = quoteLines(mdVerbatim(block.text));
|
|
290
|
+
text[text.length - 1] += ctx.cite(block.cite);
|
|
291
|
+
return [
|
|
292
|
+
...text,
|
|
293
|
+
...(block.translation ? ['>', ...quoteLines(mdBody(block.translation))] : []),
|
|
294
|
+
...(by ? ['>', ...quoteLines(by)] : []),
|
|
295
|
+
'',
|
|
296
|
+
];
|
|
297
|
+
}
|
|
298
|
+
case 'timestamps':
|
|
299
|
+
return [
|
|
300
|
+
...block.items.map((it) => `- ${ctx.time(it.cite)} **${mdInline(it.title)}**${it.summary ? ` ${mdBody(it.summary)}` : ''}`),
|
|
301
|
+
'',
|
|
302
|
+
];
|
|
303
|
+
case 'actions':
|
|
304
|
+
return [
|
|
305
|
+
...block.items.map((it) => {
|
|
306
|
+
const meta = [
|
|
307
|
+
it.owner ? `담당 ${mdInline(it.owner)}` : '',
|
|
308
|
+
it.due ? `기한 ${mdInline(it.due)}` : '',
|
|
309
|
+
]
|
|
310
|
+
.filter(Boolean)
|
|
311
|
+
.join(', ');
|
|
312
|
+
return `- [ ] ${mdBody(it.task)}${meta ? ` (${meta})` : ''}${mdCite(it.cite, ctx)}`;
|
|
313
|
+
}),
|
|
314
|
+
'',
|
|
315
|
+
];
|
|
316
|
+
case 'qa':
|
|
317
|
+
return block.items.flatMap((it) => [
|
|
318
|
+
`**Q. ${mdBody(it.question)}**`,
|
|
319
|
+
'',
|
|
320
|
+
`${mdBody(it.answer)}${mdCite(it.cite, ctx)}`,
|
|
321
|
+
'',
|
|
322
|
+
]);
|
|
323
|
+
case 'flashcards':
|
|
324
|
+
return [
|
|
325
|
+
...block.cards.flatMap((c) => [
|
|
326
|
+
`- Q. ${mdBody(c.front)}`,
|
|
327
|
+
` - A. ${mdBody(c.back)}${mdCite(c.cite, ctx)}`,
|
|
328
|
+
]),
|
|
329
|
+
'',
|
|
330
|
+
];
|
|
331
|
+
case 'quiz':
|
|
332
|
+
return block.questions.flatMap((q, k) => [
|
|
333
|
+
`**${k + 1}. ${mdBody(q.question)}**`,
|
|
334
|
+
'',
|
|
335
|
+
...q.choices.map((c, ci) => `- (${ci + 1}) ${mdBody(c)}`),
|
|
336
|
+
'',
|
|
337
|
+
`> 정답 (${q.answer + 1}) ${mdBody(q.choices[q.answer] ?? '')}. ${mdBody(q.explanation)}${mdCite(q.cite, ctx)}`,
|
|
338
|
+
'',
|
|
339
|
+
]);
|
|
340
|
+
case 'mindmap':
|
|
341
|
+
return [...outlineMd(block.root, ctx), ''];
|
|
342
|
+
case 'figure':
|
|
343
|
+
return [
|
|
344
|
+
`### ${mdInline(block.title)}`,
|
|
345
|
+
'',
|
|
346
|
+
...sectionDiagramMd(block.diagram, ctx),
|
|
347
|
+
`${mdBody(block.explanation)}${ctx.cite(block.cite)}`,
|
|
348
|
+
'',
|
|
349
|
+
];
|
|
350
|
+
case 'comments':
|
|
351
|
+
return [
|
|
352
|
+
mdBody(block.overview),
|
|
353
|
+
'',
|
|
354
|
+
`분석한 댓글 ${block.total}개`,
|
|
355
|
+
'',
|
|
356
|
+
...block.groups.flatMap((g) => [
|
|
357
|
+
`**${mdInline(g.title)}** (${TONE_LABEL[g.tone]}, ${g.count}개)`,
|
|
358
|
+
'',
|
|
359
|
+
mdBody(g.summary),
|
|
360
|
+
'',
|
|
361
|
+
...g.examples.flatMap((x) => [...quoteLines(mdVerbatim(x.text)), '']),
|
|
362
|
+
]),
|
|
363
|
+
];
|
|
364
|
+
default: {
|
|
365
|
+
const never = block;
|
|
366
|
+
throw new Error(`모르는 블록: ${JSON.stringify(never)}`);
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
/** 탭 id와 패널 id. 키에 들어가는 글자(영숫자, -, .)는 id에 그대로 써도 된다 */
|
|
371
|
+
export const extensionPanelId = (ext) => `ext-${extensionKey(ext)}`;
|
|
372
|
+
export function extensionHtml(ext, ctx) {
|
|
373
|
+
const id = extensionPanelId(ext);
|
|
374
|
+
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
|
|
375
|
+
.map((b, bi) => blockHtml(b, ctx, `${id}-b${bi}`))
|
|
376
|
+
.join('')}</section>`;
|
|
377
|
+
}
|
|
378
|
+
//# sourceMappingURL=render-blocks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render-blocks.js","sourceRoot":"","sources":["../../../src/digest/render-blocks.ts"],"names":[],"mappings":"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"}
|
|
@@ -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,EAKX,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;AA6CD,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,CAgTlB"}
|