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.
Files changed (47) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +541 -0
  3. package/dist/advanced.d.ts +65 -0
  4. package/dist/advanced.d.ts.map +1 -0
  5. package/dist/advanced.js +442 -0
  6. package/dist/advanced.js.map +1 -0
  7. package/dist/canvas-provider.d.ts +11 -0
  8. package/dist/canvas-provider.d.ts.map +1 -0
  9. package/dist/canvas-provider.js +15 -0
  10. package/dist/canvas-provider.js.map +1 -0
  11. package/dist/index.d.ts +28 -0
  12. package/dist/index.d.ts.map +1 -0
  13. package/dist/index.js +84 -0
  14. package/dist/index.js.map +1 -0
  15. package/dist/layout.d.ts +95 -0
  16. package/dist/layout.d.ts.map +1 -0
  17. package/dist/layout.js +179 -0
  18. package/dist/layout.js.map +1 -0
  19. package/dist/parser.d.ts +4 -0
  20. package/dist/parser.d.ts.map +1 -0
  21. package/dist/parser.js +252 -0
  22. package/dist/parser.js.map +1 -0
  23. package/dist/react.d.ts +33 -0
  24. package/dist/react.d.ts.map +1 -0
  25. package/dist/react.js +43 -0
  26. package/dist/react.js.map +1 -0
  27. package/dist/renderer.d.ts +4 -0
  28. package/dist/renderer.d.ts.map +1 -0
  29. package/dist/renderer.js +238 -0
  30. package/dist/renderer.js.map +1 -0
  31. package/dist/stream.d.ts +10 -0
  32. package/dist/stream.d.ts.map +1 -0
  33. package/dist/stream.js +72 -0
  34. package/dist/stream.js.map +1 -0
  35. package/dist/theme.d.ts +75 -0
  36. package/dist/theme.d.ts.map +1 -0
  37. package/dist/theme.js +123 -0
  38. package/dist/theme.js.map +1 -0
  39. package/dist/tokens.d.ts +66 -0
  40. package/dist/tokens.d.ts.map +1 -0
  41. package/dist/tokens.js +2 -0
  42. package/dist/tokens.js.map +1 -0
  43. package/dist/worker-bridge.d.ts +26 -0
  44. package/dist/worker-bridge.d.ts.map +1 -0
  45. package/dist/worker-bridge.js +31 -0
  46. package/dist/worker-bridge.js.map +1 -0
  47. 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"}
@@ -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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"}
@@ -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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"}
@@ -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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"}