canvasdown 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 +541 -0
- package/dist/advanced.d.ts +65 -0
- package/dist/advanced.d.ts.map +1 -0
- package/dist/advanced.js +442 -0
- package/dist/advanced.js.map +1 -0
- package/dist/canvas-provider.d.ts +11 -0
- package/dist/canvas-provider.d.ts.map +1 -0
- package/dist/canvas-provider.js +15 -0
- package/dist/canvas-provider.js.map +1 -0
- package/dist/index.d.ts +28 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +84 -0
- package/dist/index.js.map +1 -0
- package/dist/layout.d.ts +95 -0
- package/dist/layout.d.ts.map +1 -0
- package/dist/layout.js +179 -0
- package/dist/layout.js.map +1 -0
- package/dist/parser.d.ts +4 -0
- package/dist/parser.d.ts.map +1 -0
- package/dist/parser.js +252 -0
- package/dist/parser.js.map +1 -0
- package/dist/react.d.ts +33 -0
- package/dist/react.d.ts.map +1 -0
- package/dist/react.js +43 -0
- package/dist/react.js.map +1 -0
- package/dist/renderer.d.ts +4 -0
- package/dist/renderer.d.ts.map +1 -0
- package/dist/renderer.js +238 -0
- package/dist/renderer.js.map +1 -0
- package/dist/stream.d.ts +10 -0
- package/dist/stream.d.ts.map +1 -0
- package/dist/stream.js +72 -0
- package/dist/stream.js.map +1 -0
- package/dist/theme.d.ts +75 -0
- package/dist/theme.d.ts.map +1 -0
- package/dist/theme.js +123 -0
- package/dist/theme.js.map +1 -0
- package/dist/tokens.d.ts +66 -0
- package/dist/tokens.d.ts.map +1 -0
- package/dist/tokens.js +2 -0
- package/dist/tokens.js.map +1 -0
- package/dist/worker-bridge.d.ts +26 -0
- package/dist/worker-bridge.d.ts.map +1 -0
- package/dist/worker-bridge.js +31 -0
- package/dist/worker-bridge.js.map +1 -0
- package/package.json +65 -0
package/dist/react.js
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { parseMarkdown } from './parser.js';
|
|
2
|
+
import { computeLayout } from './layout.js';
|
|
3
|
+
import { renderToCanvas } from './renderer.js';
|
|
4
|
+
import { darkTheme, lightTheme } from './theme.js';
|
|
5
|
+
export function createCanvasdownComponent(React) {
|
|
6
|
+
function resolveTheme(opt) {
|
|
7
|
+
if (!opt || opt === 'dark')
|
|
8
|
+
return darkTheme;
|
|
9
|
+
if (opt === 'light')
|
|
10
|
+
return lightTheme;
|
|
11
|
+
return opt;
|
|
12
|
+
}
|
|
13
|
+
return function Canvasdown(props) {
|
|
14
|
+
const { markdown, width = 800, theme: themeProp, devicePixelRatio, className, style, onHeightChange, onRender, } = props;
|
|
15
|
+
const canvasRef = React.useRef(null);
|
|
16
|
+
React.useEffect(() => {
|
|
17
|
+
const canvas = canvasRef.current;
|
|
18
|
+
if (!canvas)
|
|
19
|
+
return;
|
|
20
|
+
const theme = resolveTheme(themeProp);
|
|
21
|
+
const dpr = devicePixelRatio ?? (typeof window !== 'undefined' ? window.devicePixelRatio : 1);
|
|
22
|
+
const tokens = parseMarkdown(markdown, theme);
|
|
23
|
+
const docLayout = computeLayout(tokens, width, theme);
|
|
24
|
+
canvas.width = width * dpr;
|
|
25
|
+
canvas.height = docLayout.totalHeight * dpr;
|
|
26
|
+
canvas.style.width = `${width}px`;
|
|
27
|
+
canvas.style.height = `${docLayout.totalHeight}px`;
|
|
28
|
+
const ctx = canvas.getContext('2d');
|
|
29
|
+
if (!ctx)
|
|
30
|
+
return;
|
|
31
|
+
ctx.scale(dpr, dpr);
|
|
32
|
+
renderToCanvas(ctx, docLayout, theme);
|
|
33
|
+
onHeightChange?.(docLayout.totalHeight);
|
|
34
|
+
onRender?.(docLayout);
|
|
35
|
+
}, [markdown, width, themeProp, devicePixelRatio]);
|
|
36
|
+
return React.createElement('canvas', {
|
|
37
|
+
ref: canvasRef,
|
|
38
|
+
className,
|
|
39
|
+
style,
|
|
40
|
+
});
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=react.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"react.js","sourceRoot":"","sources":["../src/react.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,EAAE,SAAS,EAAE,UAAU,EAAc,MAAM,YAAY,CAAA;AA4B9D,MAAM,UAAU,yBAAyB,CAAC,KAIzC;IACC,SAAS,YAAY,CAAC,GAA2B;QAC/C,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,MAAM;YAAE,OAAO,SAAS,CAAA;QAC5C,IAAI,GAAG,KAAK,OAAO;YAAE,OAAO,UAAU,CAAA;QACtC,OAAO,GAAY,CAAA;IACrB,CAAC;IAED,OAAO,SAAS,UAAU,CAAC,KAAsB;QAC/C,MAAM,EACJ,QAAQ,EACR,KAAK,GAAG,GAAG,EACX,KAAK,EAAE,SAAS,EAChB,gBAAgB,EAChB,SAAS,EACT,KAAK,EACL,cAAc,EACd,QAAQ,GACT,GAAG,KAAK,CAAA;QAET,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAoB,IAAI,CAAC,CAAA;QAEvD,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;YACnB,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAA;YAChC,IAAI,CAAC,MAAM;gBAAE,OAAM;YAEnB,MAAM,KAAK,GAAG,YAAY,CAAC,SAAS,CAAC,CAAA;YACrC,MAAM,GAAG,GAAG,gBAAgB,IAAI,CAAC,OAAO,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;YAE7F,MAAM,MAAM,GAAG,aAAa,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAA;YAC7C,MAAM,SAAS,GAAG,aAAa,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,CAAA;YAErD,MAAM,CAAC,KAAK,GAAG,KAAK,GAAG,GAAG,CAAA;YAC1B,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC,WAAW,GAAG,GAAG,CAAA;YAC3C,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,KAAK,IAAI,CAAA;YACjC,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,SAAS,CAAC,WAAW,IAAI,CAAA;YAElD,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;YACnC,IAAI,CAAC,GAAG;gBAAE,OAAM;YAEhB,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;YACnB,cAAc,CAAC,GAAG,EAAE,SAAS,EAAE,KAAK,CAAC,CAAA;YAErC,cAAc,EAAE,CAAC,SAAS,CAAC,WAAW,CAAC,CAAA;YACvC,QAAQ,EAAE,CAAC,SAAS,CAAC,CAAA;QACvB,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,gBAAgB,CAAC,CAAC,CAAA;QAElD,OAAO,KAAK,CAAC,aAAa,CAAC,QAAQ,EAAE;YACnC,GAAG,EAAE,SAAS;YACd,SAAS;YACT,KAAK;SACN,CAAC,CAAA;IACJ,CAAC,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { Theme } from './theme.js';
|
|
2
|
+
import type { DocumentLayout } from './layout.js';
|
|
3
|
+
export declare function renderToCanvas(ctx: CanvasRenderingContext2D, docLayout: DocumentLayout, theme: Theme, imageCache?: Map<string, HTMLImageElement>): void;
|
|
4
|
+
//# sourceMappingURL=renderer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../src/renderer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAEvC,OAAO,KAAK,EAAE,cAAc,EAAoE,MAAM,aAAa,CAAA;AA2RnH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,wBAAwB,EAC7B,SAAS,EAAE,cAAc,EACzB,KAAK,EAAE,KAAK,EACZ,UAAU,GAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAa,GACpD,IAAI,CAqBN"}
|
package/dist/renderer.js
ADDED
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
import { bodyFont, codeBlockFont } from './theme.js';
|
|
2
|
+
function roundRect(ctx, x, y, w, h, r) {
|
|
3
|
+
const radius = Math.min(r, w / 2, h / 2);
|
|
4
|
+
ctx.beginPath();
|
|
5
|
+
ctx.moveTo(x + radius, y);
|
|
6
|
+
ctx.lineTo(x + w - radius, y);
|
|
7
|
+
ctx.quadraticCurveTo(x + w, y, x + w, y + radius);
|
|
8
|
+
ctx.lineTo(x + w, y + h - radius);
|
|
9
|
+
ctx.quadraticCurveTo(x + w, y + h, x + w - radius, y + h);
|
|
10
|
+
ctx.lineTo(x + radius, y + h);
|
|
11
|
+
ctx.quadraticCurveTo(x, y + h, x, y + h - radius);
|
|
12
|
+
ctx.lineTo(x, y + radius);
|
|
13
|
+
ctx.quadraticCurveTo(x, y, x + radius, y);
|
|
14
|
+
ctx.closePath();
|
|
15
|
+
}
|
|
16
|
+
function renderRichLines(ctx, richLines, originX, originY, theme, defaultColor) {
|
|
17
|
+
for (let i = 0; i < richLines.length; i++) {
|
|
18
|
+
const line = richLines[i];
|
|
19
|
+
const baselineY = originY + i * theme.lineHeight + theme.lineHeight * 0.78;
|
|
20
|
+
for (const frag of line.fragments) {
|
|
21
|
+
if (!frag.text.trim())
|
|
22
|
+
continue;
|
|
23
|
+
const fragX = originX + frag.x;
|
|
24
|
+
ctx.font = frag.font;
|
|
25
|
+
const color = frag.style?.color ?? defaultColor;
|
|
26
|
+
if (frag.style?.background) {
|
|
27
|
+
const pad = frag.style.backgroundRadius !== undefined ? 5 : 0;
|
|
28
|
+
const boxH = theme.fontSize * 1.4;
|
|
29
|
+
const boxY = baselineY - theme.fontSize * 0.9;
|
|
30
|
+
ctx.fillStyle = frag.style.background;
|
|
31
|
+
roundRect(ctx, fragX - pad, boxY, frag.width + pad * 2, boxH, frag.style.backgroundRadius ?? 0);
|
|
32
|
+
ctx.fill();
|
|
33
|
+
}
|
|
34
|
+
ctx.fillStyle = color;
|
|
35
|
+
ctx.fillText(frag.text, fragX, baselineY);
|
|
36
|
+
if (frag.style?.underline) {
|
|
37
|
+
const underlineY = baselineY + 2;
|
|
38
|
+
ctx.strokeStyle = color;
|
|
39
|
+
ctx.lineWidth = 1;
|
|
40
|
+
ctx.beginPath();
|
|
41
|
+
ctx.moveTo(fragX, underlineY);
|
|
42
|
+
ctx.lineTo(fragX + frag.width, underlineY);
|
|
43
|
+
ctx.stroke();
|
|
44
|
+
}
|
|
45
|
+
if (frag.style?.strikethrough) {
|
|
46
|
+
const strikeY = baselineY - theme.fontSize * 0.28;
|
|
47
|
+
ctx.strokeStyle = color;
|
|
48
|
+
ctx.lineWidth = 1;
|
|
49
|
+
ctx.beginPath();
|
|
50
|
+
ctx.moveTo(fragX, strikeY);
|
|
51
|
+
ctx.lineTo(fragX + frag.width, strikeY);
|
|
52
|
+
ctx.stroke();
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
function renderHeading(ctx, block, theme) {
|
|
58
|
+
renderRichLines(ctx, block.richLines, theme.padding, block.y, theme, theme.heading.color);
|
|
59
|
+
}
|
|
60
|
+
function renderParagraph(ctx, block, theme) {
|
|
61
|
+
renderRichLines(ctx, block.richLines, theme.padding, block.y, theme, theme.text);
|
|
62
|
+
}
|
|
63
|
+
function renderCodeBlock(ctx, block, theme, canvasWidth) {
|
|
64
|
+
const x = theme.padding;
|
|
65
|
+
const w = canvasWidth - theme.padding * 2;
|
|
66
|
+
ctx.fillStyle = theme.code.background;
|
|
67
|
+
roundRect(ctx, x, block.y, w, block.height, theme.code.borderRadius);
|
|
68
|
+
ctx.fill();
|
|
69
|
+
ctx.strokeStyle = theme.code.borderColor;
|
|
70
|
+
ctx.lineWidth = 1;
|
|
71
|
+
roundRect(ctx, x, block.y, w, block.height, theme.code.borderRadius);
|
|
72
|
+
ctx.stroke();
|
|
73
|
+
ctx.font = codeBlockFont(theme);
|
|
74
|
+
ctx.fillStyle = theme.code.color;
|
|
75
|
+
for (let i = 0; i < block.codeLines.length; i++) {
|
|
76
|
+
const codeLine = block.codeLines[i] ?? '';
|
|
77
|
+
const lineY = block.y + theme.code.padding + i * block.lineHeight + block.lineHeight * 0.78;
|
|
78
|
+
ctx.fillText(codeLine, x + theme.code.padding, lineY);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
function renderBlockquote(ctx, block, theme) {
|
|
82
|
+
const x = theme.padding;
|
|
83
|
+
ctx.fillStyle = theme.blockquote.borderColor;
|
|
84
|
+
ctx.fillRect(x, block.y, theme.blockquote.borderWidth, block.height);
|
|
85
|
+
const textX = x + theme.blockquote.borderWidth + theme.blockquote.paddingLeft;
|
|
86
|
+
renderRichLines(ctx, block.richLines, textX, block.y, theme, theme.blockquote.textColor);
|
|
87
|
+
}
|
|
88
|
+
function renderListItems(ctx, items, ordered, start, originX, originY, theme) {
|
|
89
|
+
const bulletX = originX + 4;
|
|
90
|
+
const textX = originX + theme.list.indentX + theme.list.bulletGap;
|
|
91
|
+
let itemY = originY;
|
|
92
|
+
for (let i = 0; i < items.length; i++) {
|
|
93
|
+
const item = items[i];
|
|
94
|
+
const baselineY = itemY + theme.lineHeight * 0.78;
|
|
95
|
+
ctx.fillStyle = theme.list.bulletColor;
|
|
96
|
+
ctx.font = bodyFont(theme);
|
|
97
|
+
if (item.checked !== undefined) {
|
|
98
|
+
const boxSize = 12;
|
|
99
|
+
const boxY = itemY + (theme.lineHeight - boxSize) / 2;
|
|
100
|
+
ctx.strokeStyle = theme.list.bulletColor;
|
|
101
|
+
ctx.lineWidth = 1.5;
|
|
102
|
+
ctx.strokeRect(bulletX, boxY, boxSize, boxSize);
|
|
103
|
+
if (item.checked) {
|
|
104
|
+
ctx.strokeStyle = theme.link.color;
|
|
105
|
+
ctx.beginPath();
|
|
106
|
+
ctx.moveTo(bulletX + 2, boxY + boxSize / 2);
|
|
107
|
+
ctx.lineTo(bulletX + boxSize / 2 - 1, boxY + boxSize - 3);
|
|
108
|
+
ctx.lineTo(bulletX + boxSize - 2, boxY + 2);
|
|
109
|
+
ctx.stroke();
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
else if (ordered) {
|
|
113
|
+
ctx.fillText(`${start + i}.`, bulletX, baselineY);
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
ctx.beginPath();
|
|
117
|
+
ctx.arc(bulletX + 3, itemY + theme.lineHeight * 0.44, 3, 0, Math.PI * 2);
|
|
118
|
+
ctx.fill();
|
|
119
|
+
}
|
|
120
|
+
renderRichLines(ctx, item.richLines, textX, itemY, theme, theme.text);
|
|
121
|
+
itemY += Math.max(item.richLines.length * theme.lineHeight, theme.lineHeight);
|
|
122
|
+
if (item.children) {
|
|
123
|
+
renderListItems(ctx, item.children.items, item.children.ordered, item.children.start, textX, itemY, theme);
|
|
124
|
+
itemY += item.children.height;
|
|
125
|
+
}
|
|
126
|
+
if (i < items.length - 1)
|
|
127
|
+
itemY += theme.list.itemGap;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
function renderList(ctx, block, theme) {
|
|
131
|
+
renderListItems(ctx, block.items, block.ordered, block.start, theme.padding, block.y, theme);
|
|
132
|
+
}
|
|
133
|
+
function renderTable(ctx, block, theme) {
|
|
134
|
+
const { laidOut } = block;
|
|
135
|
+
const startX = theme.padding;
|
|
136
|
+
let currentY = block.y;
|
|
137
|
+
const pad = theme.table.cellPadding;
|
|
138
|
+
const totalWidth = laidOut.colWidths.reduce((a, b) => a + b, 0) + (laidOut.colWidths.length + 1);
|
|
139
|
+
ctx.fillStyle = theme.table.headerBackground;
|
|
140
|
+
ctx.fillRect(startX, currentY, totalWidth, laidOut.headerHeight);
|
|
141
|
+
let colX = startX + 1;
|
|
142
|
+
for (let c = 0; c < laidOut.headers.length; c++) {
|
|
143
|
+
const cellLines = laidOut.headers[c];
|
|
144
|
+
const colW = laidOut.colWidths[c];
|
|
145
|
+
renderRichLines(ctx, cellLines, colX + pad, currentY + pad, theme, theme.table.headerColor);
|
|
146
|
+
colX += colW + 1;
|
|
147
|
+
}
|
|
148
|
+
ctx.strokeStyle = theme.table.borderColor;
|
|
149
|
+
ctx.lineWidth = 1;
|
|
150
|
+
ctx.strokeRect(startX, currentY, totalWidth, laidOut.headerHeight);
|
|
151
|
+
currentY += laidOut.headerHeight;
|
|
152
|
+
for (let r = 0; r < laidOut.rows.length; r++) {
|
|
153
|
+
const rowH = laidOut.rowHeights[r];
|
|
154
|
+
const useAlt = r % 2 === 1 && laidOut.rows.length > 1;
|
|
155
|
+
if (useAlt && theme.table.alternateRowBackground) {
|
|
156
|
+
ctx.fillStyle = theme.table.alternateRowBackground;
|
|
157
|
+
ctx.fillRect(startX, currentY, totalWidth, rowH);
|
|
158
|
+
}
|
|
159
|
+
colX = startX + 1;
|
|
160
|
+
for (let c = 0; c < laidOut.rows[r].length; c++) {
|
|
161
|
+
const cellLines = laidOut.rows[r][c];
|
|
162
|
+
const colW = laidOut.colWidths[c];
|
|
163
|
+
renderRichLines(ctx, cellLines, colX + pad, currentY + pad, theme, theme.text);
|
|
164
|
+
colX += colW + 1;
|
|
165
|
+
}
|
|
166
|
+
ctx.strokeStyle = theme.table.borderColor;
|
|
167
|
+
ctx.lineWidth = 1;
|
|
168
|
+
ctx.strokeRect(startX, currentY, totalWidth, rowH);
|
|
169
|
+
currentY += rowH;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
function renderImage(ctx, block, theme, imageCache) {
|
|
173
|
+
const img = imageCache.get(block.src);
|
|
174
|
+
if (img && img.complete && img.naturalWidth > 0) {
|
|
175
|
+
const aspectRatio = img.naturalWidth / img.naturalHeight;
|
|
176
|
+
const drawHeight = Math.min(block.height, block.width / aspectRatio);
|
|
177
|
+
const drawWidth = drawHeight * aspectRatio;
|
|
178
|
+
ctx.save();
|
|
179
|
+
roundRect(ctx, theme.padding, block.y, drawWidth, drawHeight, theme.image.borderRadius);
|
|
180
|
+
ctx.clip();
|
|
181
|
+
ctx.drawImage(img, theme.padding, block.y, drawWidth, drawHeight);
|
|
182
|
+
ctx.restore();
|
|
183
|
+
}
|
|
184
|
+
else {
|
|
185
|
+
ctx.fillStyle = theme.code.background;
|
|
186
|
+
roundRect(ctx, theme.padding, block.y, block.width, block.height, theme.image.borderRadius);
|
|
187
|
+
ctx.fill();
|
|
188
|
+
ctx.font = bodyFont(theme);
|
|
189
|
+
ctx.fillStyle = theme.mutedText;
|
|
190
|
+
ctx.fillText(block.alt || 'Image', theme.padding + 12, block.y + block.height / 2);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
function renderHr(ctx, block, theme, canvasWidth) {
|
|
194
|
+
const midY = block.y + block.height / 2;
|
|
195
|
+
ctx.strokeStyle = theme.hr.color;
|
|
196
|
+
ctx.lineWidth = 1;
|
|
197
|
+
ctx.beginPath();
|
|
198
|
+
ctx.moveTo(theme.padding, midY);
|
|
199
|
+
ctx.lineTo(canvasWidth - theme.padding, midY);
|
|
200
|
+
ctx.stroke();
|
|
201
|
+
}
|
|
202
|
+
export function renderToCanvas(ctx, docLayout, theme, imageCache = new Map()) {
|
|
203
|
+
const { blocks, totalHeight, canvasWidth } = docLayout;
|
|
204
|
+
ctx.clearRect(0, 0, canvasWidth, totalHeight);
|
|
205
|
+
ctx.fillStyle = theme.background;
|
|
206
|
+
ctx.fillRect(0, 0, canvasWidth, totalHeight);
|
|
207
|
+
ctx.textBaseline = 'alphabetic';
|
|
208
|
+
for (const block of blocks) {
|
|
209
|
+
switch (block.type) {
|
|
210
|
+
case 'heading':
|
|
211
|
+
renderHeading(ctx, block, theme);
|
|
212
|
+
break;
|
|
213
|
+
case 'paragraph':
|
|
214
|
+
renderParagraph(ctx, block, theme);
|
|
215
|
+
break;
|
|
216
|
+
case 'code_block':
|
|
217
|
+
renderCodeBlock(ctx, block, theme, canvasWidth);
|
|
218
|
+
break;
|
|
219
|
+
case 'blockquote':
|
|
220
|
+
renderBlockquote(ctx, block, theme);
|
|
221
|
+
break;
|
|
222
|
+
case 'list':
|
|
223
|
+
renderList(ctx, block, theme);
|
|
224
|
+
break;
|
|
225
|
+
case 'table':
|
|
226
|
+
renderTable(ctx, block, theme);
|
|
227
|
+
break;
|
|
228
|
+
case 'image':
|
|
229
|
+
renderImage(ctx, block, theme, imageCache);
|
|
230
|
+
break;
|
|
231
|
+
case 'hr':
|
|
232
|
+
renderHr(ctx, block, theme, canvasWidth);
|
|
233
|
+
break;
|
|
234
|
+
case 'space': break;
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
//# sourceMappingURL=renderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderer.js","sourceRoot":"","sources":["../src/renderer.ts"],"names":[],"mappings":"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"}
|
package/dist/stream.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { DocumentLayout } from './layout.js';
|
|
2
|
+
import type { RenderOptions } from './index.js';
|
|
3
|
+
export type StreamHandle = {
|
|
4
|
+
append(chunk: string): void;
|
|
5
|
+
flush(): void;
|
|
6
|
+
getLayout(): DocumentLayout | null;
|
|
7
|
+
destroy(): void;
|
|
8
|
+
};
|
|
9
|
+
export declare function createStream(canvas: HTMLCanvasElement, options?: RenderOptions): StreamHandle;
|
|
10
|
+
//# sourceMappingURL=stream.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../src/stream.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AACjD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE/C,MAAM,MAAM,YAAY,GAAG;IACzB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,KAAK,IAAI,IAAI,CAAA;IACb,SAAS,IAAI,cAAc,GAAG,IAAI,CAAA;IAClC,OAAO,IAAI,IAAI,CAAA;CAChB,CAAA;AAED,wBAAgB,YAAY,CAC1B,MAAM,EAAE,iBAAiB,EACzB,OAAO,GAAE,aAAkB,GAC1B,YAAY,CAgEd"}
|
package/dist/stream.js
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { parseMarkdown } from './parser.js';
|
|
2
|
+
import { computeLayout } from './layout.js';
|
|
3
|
+
import { renderToCanvas } from './renderer.js';
|
|
4
|
+
import { darkTheme, lightTheme } from './theme.js';
|
|
5
|
+
export function createStream(canvas, options = {}) {
|
|
6
|
+
const theme = resolveStreamTheme(options.theme);
|
|
7
|
+
const dpr = options.devicePixelRatio ?? (typeof window !== 'undefined' ? window.devicePixelRatio : 1);
|
|
8
|
+
const width = options.width ?? (canvas.offsetWidth > 0 ? canvas.offsetWidth : 800);
|
|
9
|
+
let buffer = '';
|
|
10
|
+
let rafId = null;
|
|
11
|
+
let lastLayout = null;
|
|
12
|
+
let destroyed = false;
|
|
13
|
+
function scheduleRender() {
|
|
14
|
+
if (destroyed)
|
|
15
|
+
return;
|
|
16
|
+
if (rafId !== null)
|
|
17
|
+
cancelAnimationFrame(rafId);
|
|
18
|
+
rafId = requestAnimationFrame(doRender);
|
|
19
|
+
}
|
|
20
|
+
function doRender() {
|
|
21
|
+
if (destroyed)
|
|
22
|
+
return;
|
|
23
|
+
rafId = null;
|
|
24
|
+
const tokens = parseMarkdown(buffer, theme);
|
|
25
|
+
const docLayout = computeLayout(tokens, width, theme);
|
|
26
|
+
lastLayout = docLayout;
|
|
27
|
+
canvas.width = width * dpr;
|
|
28
|
+
canvas.height = docLayout.totalHeight * dpr;
|
|
29
|
+
canvas.style.width = `${width}px`;
|
|
30
|
+
canvas.style.height = `${docLayout.totalHeight}px`;
|
|
31
|
+
const ctx = canvas.getContext('2d');
|
|
32
|
+
if (!ctx)
|
|
33
|
+
return;
|
|
34
|
+
ctx.scale(dpr, dpr);
|
|
35
|
+
renderToCanvas(ctx, docLayout, theme);
|
|
36
|
+
}
|
|
37
|
+
return {
|
|
38
|
+
append(chunk) {
|
|
39
|
+
if (destroyed)
|
|
40
|
+
return;
|
|
41
|
+
buffer += chunk;
|
|
42
|
+
scheduleRender();
|
|
43
|
+
},
|
|
44
|
+
flush() {
|
|
45
|
+
if (destroyed)
|
|
46
|
+
return;
|
|
47
|
+
if (rafId !== null) {
|
|
48
|
+
cancelAnimationFrame(rafId);
|
|
49
|
+
rafId = null;
|
|
50
|
+
}
|
|
51
|
+
doRender();
|
|
52
|
+
},
|
|
53
|
+
getLayout() {
|
|
54
|
+
return lastLayout;
|
|
55
|
+
},
|
|
56
|
+
destroy() {
|
|
57
|
+
destroyed = true;
|
|
58
|
+
if (rafId !== null) {
|
|
59
|
+
cancelAnimationFrame(rafId);
|
|
60
|
+
rafId = null;
|
|
61
|
+
}
|
|
62
|
+
},
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
function resolveStreamTheme(opt) {
|
|
66
|
+
if (!opt || opt === 'dark')
|
|
67
|
+
return darkTheme;
|
|
68
|
+
if (opt === 'light')
|
|
69
|
+
return lightTheme;
|
|
70
|
+
return opt;
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=stream.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream.js","sourceRoot":"","sources":["../src/stream.ts"],"names":[],"mappings":"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"}
|
package/dist/theme.d.ts
ADDED
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
export type ThemeLink = {
|
|
2
|
+
color: string;
|
|
3
|
+
hoverColor?: string;
|
|
4
|
+
};
|
|
5
|
+
export type ThemeTable = {
|
|
6
|
+
headerBackground: string;
|
|
7
|
+
headerColor: string;
|
|
8
|
+
borderColor: string;
|
|
9
|
+
cellPadding: number;
|
|
10
|
+
alternateRowBackground?: string;
|
|
11
|
+
};
|
|
12
|
+
export type Theme = {
|
|
13
|
+
background: string;
|
|
14
|
+
text: string;
|
|
15
|
+
mutedText: string;
|
|
16
|
+
link: ThemeLink;
|
|
17
|
+
heading: {
|
|
18
|
+
color: string;
|
|
19
|
+
sizes: [number, number, number, number, number, number];
|
|
20
|
+
weights: [string, string, string, string, string, string];
|
|
21
|
+
lineHeights: [number, number, number, number, number, number];
|
|
22
|
+
};
|
|
23
|
+
code: {
|
|
24
|
+
background: string;
|
|
25
|
+
color: string;
|
|
26
|
+
borderColor: string;
|
|
27
|
+
fontFamily: string;
|
|
28
|
+
fontSize: number;
|
|
29
|
+
lineHeight: number;
|
|
30
|
+
borderRadius: number;
|
|
31
|
+
padding: number;
|
|
32
|
+
};
|
|
33
|
+
inlineCode: {
|
|
34
|
+
background: string;
|
|
35
|
+
color: string;
|
|
36
|
+
fontFamily: string;
|
|
37
|
+
borderRadius: number;
|
|
38
|
+
paddingH: number;
|
|
39
|
+
};
|
|
40
|
+
blockquote: {
|
|
41
|
+
borderColor: string;
|
|
42
|
+
textColor: string;
|
|
43
|
+
borderWidth: number;
|
|
44
|
+
paddingLeft: number;
|
|
45
|
+
};
|
|
46
|
+
table: ThemeTable;
|
|
47
|
+
hr: {
|
|
48
|
+
color: string;
|
|
49
|
+
};
|
|
50
|
+
list: {
|
|
51
|
+
bulletColor: string;
|
|
52
|
+
indentX: number;
|
|
53
|
+
bulletGap: number;
|
|
54
|
+
itemGap: number;
|
|
55
|
+
};
|
|
56
|
+
image: {
|
|
57
|
+
borderRadius: number;
|
|
58
|
+
maxHeight: number;
|
|
59
|
+
};
|
|
60
|
+
fontFamily: string;
|
|
61
|
+
fontSize: number;
|
|
62
|
+
lineHeight: number;
|
|
63
|
+
padding: number;
|
|
64
|
+
blockGap: number;
|
|
65
|
+
};
|
|
66
|
+
export declare const darkTheme: Theme;
|
|
67
|
+
export declare const lightTheme: Theme;
|
|
68
|
+
export declare function headingFont(theme: Theme, level: 1 | 2 | 3 | 4 | 5 | 6): string;
|
|
69
|
+
export declare function bodyFont(theme: Theme): string;
|
|
70
|
+
export declare function boldFont(theme: Theme): string;
|
|
71
|
+
export declare function italicFont(theme: Theme): string;
|
|
72
|
+
export declare function boldItalicFont(theme: Theme): string;
|
|
73
|
+
export declare function inlineCodeFont(theme: Theme): string;
|
|
74
|
+
export declare function codeBlockFont(theme: Theme): string;
|
|
75
|
+
//# sourceMappingURL=theme.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../src/theme.ts"],"names":[],"mappings":"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"}
|
package/dist/theme.js
ADDED
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
export const darkTheme = {
|
|
2
|
+
background: '#0d1117',
|
|
3
|
+
text: '#e6edf3',
|
|
4
|
+
mutedText: '#9198a1',
|
|
5
|
+
link: { color: '#58a6ff' },
|
|
6
|
+
heading: {
|
|
7
|
+
color: '#ffffff',
|
|
8
|
+
sizes: [32, 24, 20, 18, 16, 14],
|
|
9
|
+
weights: ['700', '600', '600', '600', '600', '600'],
|
|
10
|
+
lineHeights: [44, 36, 30, 28, 26, 24],
|
|
11
|
+
},
|
|
12
|
+
code: {
|
|
13
|
+
background: '#161b22',
|
|
14
|
+
color: '#e6edf3',
|
|
15
|
+
borderColor: '#30363d',
|
|
16
|
+
fontFamily: '"JetBrains Mono", "Fira Code", "Cascadia Code", monospace',
|
|
17
|
+
fontSize: 13,
|
|
18
|
+
lineHeight: 22,
|
|
19
|
+
borderRadius: 6,
|
|
20
|
+
padding: 16,
|
|
21
|
+
},
|
|
22
|
+
inlineCode: {
|
|
23
|
+
background: '#2d333b',
|
|
24
|
+
color: '#79c0ff',
|
|
25
|
+
fontFamily: '"JetBrains Mono", "Fira Code", monospace',
|
|
26
|
+
borderRadius: 4,
|
|
27
|
+
paddingH: 5,
|
|
28
|
+
},
|
|
29
|
+
blockquote: {
|
|
30
|
+
borderColor: '#3d444d',
|
|
31
|
+
textColor: '#9198a1',
|
|
32
|
+
borderWidth: 4,
|
|
33
|
+
paddingLeft: 16,
|
|
34
|
+
},
|
|
35
|
+
table: {
|
|
36
|
+
headerBackground: '#161b22',
|
|
37
|
+
headerColor: '#ffffff',
|
|
38
|
+
borderColor: '#30363d',
|
|
39
|
+
cellPadding: 12,
|
|
40
|
+
alternateRowBackground: '#0d1117',
|
|
41
|
+
},
|
|
42
|
+
hr: { color: '#30363d' },
|
|
43
|
+
list: { bulletColor: '#9198a1', indentX: 20, bulletGap: 8, itemGap: 4 },
|
|
44
|
+
image: { borderRadius: 6, maxHeight: 400 },
|
|
45
|
+
fontFamily: '"Inter", system-ui, sans-serif',
|
|
46
|
+
fontSize: 16,
|
|
47
|
+
lineHeight: 28,
|
|
48
|
+
padding: 48,
|
|
49
|
+
blockGap: 20,
|
|
50
|
+
};
|
|
51
|
+
export const lightTheme = {
|
|
52
|
+
background: '#ffffff',
|
|
53
|
+
text: '#1f2328',
|
|
54
|
+
mutedText: '#636c76',
|
|
55
|
+
link: { color: '#0969da' },
|
|
56
|
+
heading: {
|
|
57
|
+
color: '#1f2328',
|
|
58
|
+
sizes: [32, 24, 20, 18, 16, 14],
|
|
59
|
+
weights: ['700', '600', '600', '600', '600', '600'],
|
|
60
|
+
lineHeights: [44, 36, 30, 28, 26, 24],
|
|
61
|
+
},
|
|
62
|
+
code: {
|
|
63
|
+
background: '#f6f8fa',
|
|
64
|
+
color: '#1f2328',
|
|
65
|
+
borderColor: '#d1d9e0',
|
|
66
|
+
fontFamily: '"JetBrains Mono", "Fira Code", "Cascadia Code", monospace',
|
|
67
|
+
fontSize: 13,
|
|
68
|
+
lineHeight: 22,
|
|
69
|
+
borderRadius: 6,
|
|
70
|
+
padding: 16,
|
|
71
|
+
},
|
|
72
|
+
inlineCode: {
|
|
73
|
+
background: '#eff1f3',
|
|
74
|
+
color: '#0550ae',
|
|
75
|
+
fontFamily: '"JetBrains Mono", "Fira Code", monospace',
|
|
76
|
+
borderRadius: 4,
|
|
77
|
+
paddingH: 5,
|
|
78
|
+
},
|
|
79
|
+
blockquote: {
|
|
80
|
+
borderColor: '#d1d9e0',
|
|
81
|
+
textColor: '#636c76',
|
|
82
|
+
borderWidth: 4,
|
|
83
|
+
paddingLeft: 16,
|
|
84
|
+
},
|
|
85
|
+
table: {
|
|
86
|
+
headerBackground: '#f6f8fa',
|
|
87
|
+
headerColor: '#1f2328',
|
|
88
|
+
borderColor: '#d1d9e0',
|
|
89
|
+
cellPadding: 12,
|
|
90
|
+
alternateRowBackground: '#ffffff',
|
|
91
|
+
},
|
|
92
|
+
hr: { color: '#d1d9e0' },
|
|
93
|
+
list: { bulletColor: '#636c76', indentX: 20, bulletGap: 8, itemGap: 4 },
|
|
94
|
+
image: { borderRadius: 6, maxHeight: 400 },
|
|
95
|
+
fontFamily: '"Inter", system-ui, sans-serif',
|
|
96
|
+
fontSize: 16,
|
|
97
|
+
lineHeight: 28,
|
|
98
|
+
padding: 48,
|
|
99
|
+
blockGap: 20,
|
|
100
|
+
};
|
|
101
|
+
export function headingFont(theme, level) {
|
|
102
|
+
const i = level - 1;
|
|
103
|
+
return `${theme.heading.weights[i]} ${theme.heading.sizes[i]}px ${theme.fontFamily}`;
|
|
104
|
+
}
|
|
105
|
+
export function bodyFont(theme) {
|
|
106
|
+
return `400 ${theme.fontSize}px ${theme.fontFamily}`;
|
|
107
|
+
}
|
|
108
|
+
export function boldFont(theme) {
|
|
109
|
+
return `700 ${theme.fontSize}px ${theme.fontFamily}`;
|
|
110
|
+
}
|
|
111
|
+
export function italicFont(theme) {
|
|
112
|
+
return `italic 400 ${theme.fontSize}px ${theme.fontFamily}`;
|
|
113
|
+
}
|
|
114
|
+
export function boldItalicFont(theme) {
|
|
115
|
+
return `italic 700 ${theme.fontSize}px ${theme.fontFamily}`;
|
|
116
|
+
}
|
|
117
|
+
export function inlineCodeFont(theme) {
|
|
118
|
+
return `400 ${theme.fontSize - 1}px ${theme.inlineCode.fontFamily}`;
|
|
119
|
+
}
|
|
120
|
+
export function codeBlockFont(theme) {
|
|
121
|
+
return `400 ${theme.code.fontSize}px ${theme.code.fontFamily}`;
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=theme.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme.js","sourceRoot":"","sources":["../src/theme.ts"],"names":[],"mappings":"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"}
|