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
@@ -0,0 +1,95 @@
1
+ import type { RenderToken, InlineSpan } from './tokens.js';
2
+ import type { Theme } from './theme.js';
3
+ export type RenderedSpanFragment = {
4
+ text: string;
5
+ font: string;
6
+ style?: import('./tokens.js').SpanStyle | undefined;
7
+ x: number;
8
+ width: number;
9
+ };
10
+ export type LaidOutRichLine = {
11
+ fragments: RenderedSpanFragment[];
12
+ totalWidth: number;
13
+ };
14
+ export type LaidOutBlock = {
15
+ type: 'heading';
16
+ level: 1 | 2 | 3 | 4 | 5 | 6;
17
+ richLines: LaidOutRichLine[];
18
+ height: number;
19
+ y: number;
20
+ } | {
21
+ type: 'paragraph';
22
+ richLines: LaidOutRichLine[];
23
+ height: number;
24
+ y: number;
25
+ } | {
26
+ type: 'code_block';
27
+ lang: string;
28
+ codeLines: string[];
29
+ lineHeight: number;
30
+ height: number;
31
+ y: number;
32
+ } | {
33
+ type: 'blockquote';
34
+ richLines: LaidOutRichLine[];
35
+ height: number;
36
+ y: number;
37
+ } | {
38
+ type: 'list';
39
+ ordered: boolean;
40
+ start: number;
41
+ items: LaidOutListItem[];
42
+ height: number;
43
+ y: number;
44
+ } | {
45
+ type: 'table';
46
+ laidOut: LaidOutTable;
47
+ height: number;
48
+ y: number;
49
+ } | {
50
+ type: 'image';
51
+ src: string;
52
+ alt: string;
53
+ width: number;
54
+ height: number;
55
+ y: number;
56
+ } | {
57
+ type: 'hr';
58
+ height: number;
59
+ y: number;
60
+ } | {
61
+ type: 'space';
62
+ height: number;
63
+ y: number;
64
+ };
65
+ export type LaidOutListItem = {
66
+ richLines: LaidOutRichLine[];
67
+ children?: LaidOutListBlock | undefined;
68
+ height: number;
69
+ checked?: boolean | undefined;
70
+ };
71
+ export type LaidOutListBlock = {
72
+ ordered: boolean;
73
+ start: number;
74
+ items: LaidOutListItem[];
75
+ height: number;
76
+ };
77
+ export type LaidOutTable = {
78
+ headers: LaidOutRichLine[][];
79
+ rows: LaidOutRichLine[][][];
80
+ colWidths: number[];
81
+ rowHeights: number[];
82
+ headerHeight: number;
83
+ align: Array<'left' | 'center' | 'right' | null>;
84
+ };
85
+ export type DocumentLayout = {
86
+ blocks: LaidOutBlock[];
87
+ totalHeight: number;
88
+ canvasWidth: number;
89
+ };
90
+ export declare function layoutRichSpans(spans: InlineSpan[], maxWidth: number, lineHeight: number): {
91
+ richLines: LaidOutRichLine[];
92
+ height: number;
93
+ };
94
+ export declare function computeLayout(tokens: RenderToken[], canvasWidth: number, theme: Theme): DocumentLayout;
95
+ //# sourceMappingURL=layout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../src/layout.ts"],"names":[],"mappings":"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"}
package/dist/layout.js ADDED
@@ -0,0 +1,179 @@
1
+ import { prepareWithSegments, layoutWithLines, } from '@chenglou/pretext';
2
+ import { codeBlockFont } from './theme.js';
3
+ function measureSpanWidth(text, font, lineHeight) {
4
+ if (!text.trim())
5
+ return 0;
6
+ const prepared = prepareWithSegments(text, font);
7
+ const { lines } = layoutWithLines(prepared, 999999, lineHeight);
8
+ return lines[0]?.width ?? 0;
9
+ }
10
+ export function layoutRichSpans(spans, maxWidth, lineHeight) {
11
+ if (spans.length === 0)
12
+ return { richLines: [], height: 0 };
13
+ const fullText = spans.map((s) => s.text).join('');
14
+ if (!fullText.trim())
15
+ return { richLines: [{ fragments: [], totalWidth: 0 }], height: lineHeight };
16
+ const primaryFont = spans[0].font;
17
+ const prepared = prepareWithSegments(fullText, primaryFont);
18
+ const { lines } = layoutWithLines(prepared, maxWidth, lineHeight);
19
+ const richLines = [];
20
+ let charOffset = 0;
21
+ for (const line of lines) {
22
+ const lineText = line.text;
23
+ const fragments = [];
24
+ let fragX = 0;
25
+ let lineCharPos = 0;
26
+ let spanIdx = 0;
27
+ let spanCharPos = charOffset;
28
+ while (lineCharPos < lineText.length && spanIdx < spans.length) {
29
+ const span = spans[spanIdx];
30
+ const spanRemaining = span.text.length - (spanCharPos - charOffset - spans.slice(0, spanIdx).reduce((a, s) => a + s.text.length, 0));
31
+ if (spanRemaining <= 0) {
32
+ spanIdx++;
33
+ continue;
34
+ }
35
+ const canTake = Math.min(spanRemaining, lineText.length - lineCharPos);
36
+ const fragText = lineText.slice(lineCharPos, lineCharPos + canTake);
37
+ if (fragText.length > 0) {
38
+ const fragWidth = measureSpanWidth(fragText, span.font, lineHeight);
39
+ fragments.push({ text: fragText, font: span.font, ...(span.style !== undefined ? { style: span.style } : {}), x: fragX, width: fragWidth });
40
+ fragX += fragWidth;
41
+ lineCharPos += canTake;
42
+ }
43
+ if (canTake >= spanRemaining) {
44
+ spanIdx++;
45
+ }
46
+ }
47
+ richLines.push({ fragments, totalWidth: fragX });
48
+ charOffset += lineText.length;
49
+ }
50
+ return { richLines, height: richLines.length * lineHeight };
51
+ }
52
+ function layoutCodeBlock(code, maxWidth, theme) {
53
+ const font = codeBlockFont(theme);
54
+ const innerWidth = maxWidth - theme.code.padding * 2;
55
+ const lh = theme.code.lineHeight;
56
+ const rawLines = code.split('\n');
57
+ const codeLines = [];
58
+ for (const raw of rawLines) {
59
+ if (raw === '') {
60
+ codeLines.push('');
61
+ continue;
62
+ }
63
+ const prepared = prepareWithSegments(raw, font);
64
+ const { lines } = layoutWithLines(prepared, innerWidth, lh);
65
+ for (const l of lines)
66
+ codeLines.push(l.text);
67
+ }
68
+ return { codeLines, lineHeight: lh, height: codeLines.length * lh + theme.code.padding * 2 };
69
+ }
70
+ function layoutListItem(item, maxWidth, theme, depth) {
71
+ const bulletWidth = theme.list.indentX + theme.list.bulletGap;
72
+ const textWidth = maxWidth - bulletWidth;
73
+ const { richLines, height } = layoutRichSpans(item.spans, textWidth, theme.lineHeight);
74
+ let childBlock;
75
+ let childHeight = 0;
76
+ if (item.children && item.children.length > 0) {
77
+ const child = item.children[0];
78
+ childBlock = layoutListBlock(child, maxWidth - theme.list.indentX, theme, depth + 1);
79
+ childHeight = childBlock.height;
80
+ }
81
+ return {
82
+ richLines,
83
+ ...(childBlock !== undefined ? { children: childBlock } : {}),
84
+ height: Math.max(height, theme.lineHeight) + childHeight,
85
+ ...(item.checked !== undefined ? { checked: item.checked } : {}),
86
+ };
87
+ }
88
+ function layoutListBlock(token, maxWidth, theme, depth) {
89
+ const items = token.items.map((item) => layoutListItem(item, maxWidth, theme, depth));
90
+ const totalHeight = items.reduce((sum, item) => sum + item.height, 0)
91
+ + Math.max(0, items.length - 1) * theme.list.itemGap;
92
+ return { ordered: token.ordered, start: token.start, items, height: totalHeight };
93
+ }
94
+ function layoutTable(token, maxWidth, theme) {
95
+ const colCount = token.headers.length;
96
+ const colWidth = Math.floor((maxWidth - (colCount + 1) * 1) / colCount);
97
+ const cellWidth = colWidth - theme.table.cellPadding * 2;
98
+ const headers = token.headers.map((cellSpans) => {
99
+ const { richLines } = layoutRichSpans(cellSpans, cellWidth, theme.lineHeight);
100
+ return richLines;
101
+ });
102
+ const rows = token.rows.map((row) => row.map((cellSpans) => {
103
+ const { richLines } = layoutRichSpans(cellSpans, cellWidth, theme.lineHeight);
104
+ return richLines;
105
+ }));
106
+ const headerHeight = Math.max(...headers.map((rl) => rl.length * theme.lineHeight), theme.lineHeight) + theme.table.cellPadding * 2;
107
+ const rowHeights = rows.map((row) => Math.max(...row.map((rl) => rl.length * theme.lineHeight), theme.lineHeight)
108
+ + theme.table.cellPadding * 2);
109
+ const colWidths = Array(colCount).fill(colWidth);
110
+ return { headers, rows, colWidths, rowHeights, headerHeight, align: token.align };
111
+ }
112
+ export function computeLayout(tokens, canvasWidth, theme) {
113
+ const contentWidth = canvasWidth - theme.padding * 2;
114
+ const blocks = [];
115
+ let y = theme.padding;
116
+ for (const token of tokens) {
117
+ switch (token.type) {
118
+ case 'heading': {
119
+ const { richLines, height } = layoutRichSpans(token.spans, contentWidth, theme.heading.lineHeights[token.level - 1] ?? theme.lineHeight);
120
+ const h = Math.max(height, theme.heading.lineHeights[token.level - 1] ?? theme.lineHeight);
121
+ blocks.push({ type: 'heading', level: token.level, richLines, height: h, y });
122
+ y += h + theme.blockGap;
123
+ break;
124
+ }
125
+ case 'paragraph': {
126
+ const { richLines, height } = layoutRichSpans(token.spans, contentWidth, theme.lineHeight);
127
+ const h = Math.max(height, theme.lineHeight);
128
+ blocks.push({ type: 'paragraph', richLines, height: h, y });
129
+ y += h + theme.blockGap;
130
+ break;
131
+ }
132
+ case 'code_block': {
133
+ const { codeLines, lineHeight, height } = layoutCodeBlock(token.code, contentWidth, theme);
134
+ blocks.push({ type: 'code_block', lang: token.lang, codeLines, lineHeight, height, y });
135
+ y += height + theme.blockGap;
136
+ break;
137
+ }
138
+ case 'blockquote': {
139
+ const bqWidth = contentWidth - theme.blockquote.borderWidth - theme.blockquote.paddingLeft;
140
+ const { richLines, height } = layoutRichSpans(token.spans, bqWidth, theme.lineHeight);
141
+ const h = Math.max(height, theme.lineHeight);
142
+ blocks.push({ type: 'blockquote', richLines, height: h, y });
143
+ y += h + theme.blockGap;
144
+ break;
145
+ }
146
+ case 'list': {
147
+ const listBlock = layoutListBlock(token, contentWidth, theme, 0);
148
+ blocks.push({ type: 'list', ordered: token.ordered, start: token.start, items: listBlock.items, height: listBlock.height, y });
149
+ y += listBlock.height + theme.blockGap;
150
+ break;
151
+ }
152
+ case 'table': {
153
+ const laidOut = layoutTable(token, contentWidth, theme);
154
+ const height = laidOut.headerHeight + laidOut.rowHeights.reduce((a, b) => a + b, 0) + (laidOut.rows.length + 1);
155
+ blocks.push({ type: 'table', laidOut, height, y });
156
+ y += height + theme.blockGap;
157
+ break;
158
+ }
159
+ case 'image': {
160
+ const imageHeight = Math.min(200, theme.image.maxHeight);
161
+ blocks.push({ type: 'image', src: token.src, alt: token.alt, width: contentWidth, height: imageHeight, y });
162
+ y += imageHeight + theme.blockGap;
163
+ break;
164
+ }
165
+ case 'hr': {
166
+ blocks.push({ type: 'hr', height: 24, y });
167
+ y += 24 + theme.blockGap;
168
+ break;
169
+ }
170
+ case 'space': {
171
+ blocks.push({ type: 'space', height: theme.lineHeight, y });
172
+ y += theme.lineHeight;
173
+ break;
174
+ }
175
+ }
176
+ }
177
+ return { blocks, totalHeight: y + theme.padding, canvasWidth };
178
+ }
179
+ //# sourceMappingURL=layout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layout.js","sourceRoot":"","sources":["../src/layout.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { RenderToken } from './tokens.js';
2
+ import type { Theme } from './theme.js';
3
+ export declare function parseMarkdown(markdown: string, theme: Theme): RenderToken[];
4
+ //# sourceMappingURL=parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAoD,MAAM,aAAa,CAAA;AAChG,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAkLvC,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,WAAW,EAAE,CA2E3E"}
package/dist/parser.js ADDED
@@ -0,0 +1,252 @@
1
+ import { marked } from 'marked';
2
+ import { bodyFont, boldFont, italicFont, boldItalicFont, inlineCodeFont, headingFont } from './theme.js';
3
+ function unescapeHtml(str) {
4
+ return str
5
+ .replace(/&amp;/g, '&')
6
+ .replace(/&lt;/g, '<')
7
+ .replace(/&gt;/g, '>')
8
+ .replace(/&quot;/g, '"')
9
+ .replace(/&#39;/g, "'")
10
+ .replace(/&#(\d+);/g, (_, n) => String.fromCharCode(parseInt(n, 10)));
11
+ }
12
+ function walkInlineTokens(tokens, theme, spans) {
13
+ for (const token of tokens) {
14
+ switch (token.type) {
15
+ case 'text': {
16
+ const t = token;
17
+ if (t.tokens && t.tokens.length > 0) {
18
+ walkInlineTokens(t.tokens, theme, spans);
19
+ }
20
+ else if (t.text) {
21
+ spans.push({ text: unescapeHtml(t.text), font: bodyFont(theme) });
22
+ }
23
+ break;
24
+ }
25
+ case 'strong': {
26
+ const t = token;
27
+ const children = [];
28
+ if (t.tokens)
29
+ walkInlineTokens(t.tokens, theme, children);
30
+ for (const child of children) {
31
+ const isItalic = child.font.includes('italic');
32
+ spans.push({ text: child.text, font: isItalic ? boldItalicFont(theme) : boldFont(theme), ...(child.style !== undefined ? { style: child.style } : {}) });
33
+ }
34
+ break;
35
+ }
36
+ case 'em': {
37
+ const t = token;
38
+ const children = [];
39
+ if (t.tokens)
40
+ walkInlineTokens(t.tokens, theme, children);
41
+ for (const child of children) {
42
+ const isBold = child.font.includes('700');
43
+ spans.push({
44
+ text: child.text,
45
+ font: isBold ? boldItalicFont(theme) : italicFont(theme),
46
+ style: child.style,
47
+ });
48
+ }
49
+ break;
50
+ }
51
+ case 'codespan': {
52
+ const t = token;
53
+ spans.push({
54
+ text: t.text,
55
+ font: inlineCodeFont(theme),
56
+ style: {
57
+ color: theme.inlineCode.color,
58
+ background: theme.inlineCode.background,
59
+ backgroundRadius: theme.inlineCode.borderRadius,
60
+ },
61
+ });
62
+ break;
63
+ }
64
+ case 'link': {
65
+ const t = token;
66
+ const children = [];
67
+ if (t.tokens)
68
+ walkInlineTokens(t.tokens, theme, children);
69
+ else
70
+ children.push({ text: t.text, font: bodyFont(theme) });
71
+ for (const child of children) {
72
+ spans.push({
73
+ text: child.text,
74
+ font: child.font,
75
+ style: { ...child.style, color: theme.link.color, underline: true, href: t.href },
76
+ });
77
+ }
78
+ break;
79
+ }
80
+ case 'del': {
81
+ const t = token;
82
+ const children = [];
83
+ if (t.tokens)
84
+ walkInlineTokens(t.tokens, theme, children);
85
+ else
86
+ children.push({ text: t.text, font: bodyFont(theme) });
87
+ for (const child of children) {
88
+ spans.push({ text: child.text, font: child.font, style: { ...child.style, strikethrough: true } });
89
+ }
90
+ break;
91
+ }
92
+ case 'image': {
93
+ const t = token;
94
+ if (t.href)
95
+ spans.push({ text: t.text || t.href, font: italicFont(theme), style: { color: theme.mutedText } });
96
+ break;
97
+ }
98
+ case 'html': {
99
+ break;
100
+ }
101
+ case 'escape': {
102
+ const t = token;
103
+ spans.push({ text: t.text, font: bodyFont(theme) });
104
+ break;
105
+ }
106
+ }
107
+ }
108
+ }
109
+ function parseInlineSpans(rawText, theme) {
110
+ const spans = [];
111
+ const tokens = marked.lexer(rawText, { gfm: true });
112
+ for (const token of tokens) {
113
+ if (token.type === 'paragraph') {
114
+ const p = token;
115
+ if (p.tokens)
116
+ walkInlineTokens(p.tokens, theme, spans);
117
+ }
118
+ else {
119
+ const single = [];
120
+ walkInlineTokens([token], theme, single);
121
+ spans.push(...single);
122
+ }
123
+ }
124
+ return spans.length > 0 ? spans : [{ text: rawText, font: bodyFont(theme) }];
125
+ }
126
+ function plainText(spans) {
127
+ return spans.map((s) => s.text).join('');
128
+ }
129
+ function parseListItemToken(item, theme) {
130
+ const raw = item.text ?? '';
131
+ let checked;
132
+ let textRaw = raw;
133
+ const taskMatch = /^\[([xX ])\]\s+/.exec(raw);
134
+ if (taskMatch) {
135
+ checked = taskMatch[1].toLowerCase() === 'x';
136
+ textRaw = raw.slice(taskMatch[0].length);
137
+ }
138
+ const spans = parseInlineSpans(textRaw, theme);
139
+ const children = [];
140
+ if (item.tokens) {
141
+ for (const tok of item.tokens) {
142
+ if (tok.type === 'list') {
143
+ children.push(parseList(tok, theme));
144
+ }
145
+ }
146
+ }
147
+ return { spans, plainText: plainText(spans), checked, children: children.length ? children : undefined };
148
+ }
149
+ function parseList(token, theme) {
150
+ return {
151
+ type: 'list',
152
+ ordered: token.ordered,
153
+ start: typeof token.start === 'number' ? token.start : 1,
154
+ items: token.items.map((item) => parseListItemToken(item, theme)),
155
+ };
156
+ }
157
+ function parseTableCell(tokens, rawText, theme) {
158
+ if (tokens && tokens.length > 0) {
159
+ const spans = [];
160
+ walkInlineTokens(tokens, theme, spans);
161
+ return spans.length > 0 ? spans : [{ text: rawText, font: bodyFont(theme) }];
162
+ }
163
+ return parseInlineSpans(rawText, theme);
164
+ }
165
+ function parseTableToken(token, theme) {
166
+ const align = token.align.map((a) => {
167
+ if (a === 'left' || a === 'center' || a === 'right')
168
+ return a;
169
+ return null;
170
+ });
171
+ const headers = token.header.map((cell) => parseTableCell(cell.tokens, cell.text, theme));
172
+ const rows = token.rows.map((row) => row.map((cell) => parseTableCell(cell.tokens, cell.text, theme)));
173
+ return { type: 'table', headers, rows, align };
174
+ }
175
+ export function parseMarkdown(markdown, theme) {
176
+ const tokens = marked.lexer(markdown, { gfm: true });
177
+ const result = [];
178
+ for (const token of tokens) {
179
+ switch (token.type) {
180
+ case 'heading': {
181
+ const t = token;
182
+ const level = Math.max(1, Math.min(t.depth, 6));
183
+ const spans = parseInlineSpans(t.text, theme);
184
+ for (let i = 0; i < spans.length; i++) {
185
+ const sp = spans[i];
186
+ if (!sp.font.includes('italic') && !sp.font.includes('700')) {
187
+ spans[i] = { ...sp, font: headingFont(theme, level) };
188
+ }
189
+ }
190
+ result.push({ type: 'heading', level, spans, plainText: plainText(spans) });
191
+ break;
192
+ }
193
+ case 'paragraph': {
194
+ const t = token;
195
+ if (t.tokens) {
196
+ if (t.tokens.length === 1 && t.tokens[0]?.type === 'image') {
197
+ const img = t.tokens[0];
198
+ result.push({ type: 'image', src: img.href, alt: img.text, title: img.title ?? undefined });
199
+ }
200
+ else {
201
+ const spans = [];
202
+ walkInlineTokens(t.tokens, theme, spans);
203
+ if (spans.length > 0)
204
+ result.push({ type: 'paragraph', spans, plainText: plainText(spans) });
205
+ }
206
+ }
207
+ else {
208
+ const spans = parseInlineSpans(t.text, theme);
209
+ result.push({ type: 'paragraph', spans, plainText: plainText(spans) });
210
+ }
211
+ break;
212
+ }
213
+ case 'code': {
214
+ const t = token;
215
+ result.push({ type: 'code_block', lang: t.lang ?? '', code: t.text });
216
+ break;
217
+ }
218
+ case 'blockquote': {
219
+ const t = token;
220
+ const inner = t.text.replace(/^>\s?/gm, '').trim();
221
+ const spans = parseInlineSpans(inner, theme);
222
+ result.push({ type: 'blockquote', spans, plainText: plainText(spans) });
223
+ break;
224
+ }
225
+ case 'list': {
226
+ const t = token;
227
+ result.push(parseList(t, theme));
228
+ break;
229
+ }
230
+ case 'table': {
231
+ const t = token;
232
+ result.push(parseTableToken(t, theme));
233
+ break;
234
+ }
235
+ case 'image': {
236
+ const t = token;
237
+ result.push({ type: 'image', src: t.href, alt: t.text, title: t.title ?? undefined });
238
+ break;
239
+ }
240
+ case 'hr': {
241
+ result.push({ type: 'hr' });
242
+ break;
243
+ }
244
+ case 'space': {
245
+ result.push({ type: 'space' });
246
+ break;
247
+ }
248
+ }
249
+ }
250
+ return result;
251
+ }
252
+ //# sourceMappingURL=parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import { computeLayout } from './layout.js';
2
+ import { type Theme } from './theme.js';
3
+ export type CanvasdownProps = {
4
+ markdown: string;
5
+ width?: number;
6
+ theme?: Theme | 'dark' | 'light';
7
+ devicePixelRatio?: number;
8
+ className?: string;
9
+ style?: Record<string, string | number>;
10
+ onHeightChange?: (height: number) => void;
11
+ onRender?: (layout: ReturnType<typeof computeLayout>) => void;
12
+ };
13
+ declare global {
14
+ namespace JSX {
15
+ interface IntrinsicElements {
16
+ canvas: {
17
+ ref?: unknown;
18
+ width?: number;
19
+ height?: number;
20
+ style?: Record<string, string | number>;
21
+ className?: string;
22
+ };
23
+ }
24
+ }
25
+ }
26
+ export declare function createCanvasdownComponent(React: {
27
+ useRef: <T>(init: T | null) => {
28
+ current: T | null;
29
+ };
30
+ useEffect: (fn: () => (() => void) | void, deps: unknown[]) => void;
31
+ createElement: (...args: unknown[]) => unknown;
32
+ }): (props: CanvasdownProps) => unknown;
33
+ //# sourceMappingURL=react.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"react.d.ts","sourceRoot":"","sources":["../src/react.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAE3C,OAAO,EAAyB,KAAK,KAAK,EAAE,MAAM,YAAY,CAAA;AAG9D,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,OAAO,CAAA;IAChC,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAA;IACvC,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;IACzC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,aAAa,CAAC,KAAK,IAAI,CAAA;CAC9D,CAAA;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,GAAG,CAAC;QACZ,UAAU,iBAAiB;YACzB,MAAM,EAAE;gBACN,GAAG,CAAC,EAAE,OAAO,CAAA;gBACb,KAAK,CAAC,EAAE,MAAM,CAAA;gBACd,MAAM,CAAC,EAAE,MAAM,CAAA;gBACf,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAA;gBACvC,SAAS,CAAC,EAAE,MAAM,CAAA;aACnB,CAAA;SACF;KACF;CACF;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE;IAC/C,MAAM,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI,KAAK;QAAE,OAAO,EAAE,CAAC,GAAG,IAAI,CAAA;KAAE,CAAA;IACpD,SAAS,EAAE,CAAC,EAAE,EAAE,MAAM,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAA;IACnE,aAAa,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAA;CAC/C,IAO4B,OAAO,eAAe,aA6ClD"}