@breadstone-tools/markdowner-core 0.0.230 → 0.0.232
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/Index.d.ts +16 -6
- package/Index.d.ts.map +1 -1
- package/Index.js +6 -2
- package/Index.js.map +1 -1
- package/Processing/Processors/BlockquoteProcessor.Test.js +87 -2
- package/Processing/Processors/BlockquoteProcessor.Test.js.map +1 -1
- package/Processing/Processors/BlockquoteProcessor.d.ts +11 -2
- package/Processing/Processors/BlockquoteProcessor.d.ts.map +1 -1
- package/Processing/Processors/BlockquoteProcessor.js +7 -7
- package/Processing/Processors/BlockquoteProcessor.js.map +1 -1
- package/Processing/Processors/ButtonProcessor.Test.d.ts +2 -0
- package/Processing/Processors/ButtonProcessor.Test.d.ts.map +1 -0
- package/Processing/Processors/ButtonProcessor.Test.js +59 -0
- package/Processing/Processors/ButtonProcessor.Test.js.map +1 -0
- package/Processing/Processors/ButtonProcessor.d.ts +37 -0
- package/Processing/Processors/ButtonProcessor.d.ts.map +1 -0
- package/Processing/Processors/ButtonProcessor.js +80 -0
- package/Processing/Processors/ButtonProcessor.js.map +1 -0
- package/Processing/Processors/CalloutProcessor.Test.d.ts +2 -0
- package/Processing/Processors/CalloutProcessor.Test.d.ts.map +1 -0
- package/Processing/Processors/CalloutProcessor.Test.js +90 -0
- package/Processing/Processors/CalloutProcessor.Test.js.map +1 -0
- package/Processing/Processors/CalloutProcessor.d.ts +1 -1
- package/Processing/Processors/CalloutProcessor.d.ts.map +1 -1
- package/Processing/Processors/CalloutProcessor.js +5 -5
- package/Processing/Processors/CalloutProcessor.js.map +1 -1
- package/Processing/Processors/CardProcessor.Test.d.ts +2 -0
- package/Processing/Processors/CardProcessor.Test.d.ts.map +1 -0
- package/Processing/Processors/CardProcessor.Test.js +73 -0
- package/Processing/Processors/CardProcessor.Test.js.map +1 -0
- package/Processing/Processors/CardProcessor.d.ts +39 -0
- package/Processing/Processors/CardProcessor.d.ts.map +1 -0
- package/Processing/Processors/CardProcessor.js +96 -0
- package/Processing/Processors/CardProcessor.js.map +1 -0
- package/Processing/Processors/CodeBlockProcessor.Test.d.ts +2 -0
- package/Processing/Processors/CodeBlockProcessor.Test.d.ts.map +1 -0
- package/Processing/Processors/CodeBlockProcessor.Test.js +114 -0
- package/Processing/Processors/CodeBlockProcessor.Test.js.map +1 -0
- package/Processing/Processors/CodeBlockProcessor.d.ts +12 -1
- package/Processing/Processors/CodeBlockProcessor.d.ts.map +1 -1
- package/Processing/Processors/CodeBlockProcessor.js +17 -4
- package/Processing/Processors/CodeBlockProcessor.js.map +1 -1
- package/Processing/Processors/DetailsProcessor.Test.d.ts +2 -0
- package/Processing/Processors/DetailsProcessor.Test.d.ts.map +1 -0
- package/Processing/Processors/DetailsProcessor.Test.js +57 -0
- package/Processing/Processors/DetailsProcessor.Test.js.map +1 -0
- package/Processing/Processors/DetailsProcessor.d.ts +27 -0
- package/Processing/Processors/DetailsProcessor.d.ts.map +1 -0
- package/Processing/Processors/DetailsProcessor.js +69 -0
- package/Processing/Processors/DetailsProcessor.js.map +1 -0
- package/Processing/Processors/SplitProcessor.Test.d.ts +2 -0
- package/Processing/Processors/SplitProcessor.Test.d.ts.map +1 -0
- package/Processing/Processors/SplitProcessor.Test.js +82 -0
- package/Processing/Processors/SplitProcessor.Test.js.map +1 -0
- package/Processing/Processors/SplitProcessor.d.ts +1 -1
- package/Processing/Processors/SplitProcessor.d.ts.map +1 -1
- package/Processing/Processors/SplitProcessor.js +8 -6
- package/Processing/Processors/SplitProcessor.js.map +1 -1
- package/Processing/Processors/StepsProcessor.Test.d.ts +2 -0
- package/Processing/Processors/StepsProcessor.Test.d.ts.map +1 -0
- package/Processing/Processors/StepsProcessor.Test.js +77 -0
- package/Processing/Processors/StepsProcessor.Test.js.map +1 -0
- package/Processing/Processors/StepsProcessor.d.ts +43 -0
- package/Processing/Processors/StepsProcessor.d.ts.map +1 -0
- package/Processing/Processors/StepsProcessor.js +102 -0
- package/Processing/Processors/StepsProcessor.js.map +1 -0
- package/Processing/Processors/TabProcessor.Test.d.ts +2 -0
- package/Processing/Processors/TabProcessor.Test.d.ts.map +1 -0
- package/Processing/Processors/TabProcessor.Test.js +130 -0
- package/Processing/Processors/TabProcessor.Test.js.map +1 -0
- package/Processing/Processors/TabProcessor.d.ts +1 -1
- package/Processing/Processors/TabProcessor.d.ts.map +1 -1
- package/Processing/Processors/TabProcessor.js +6 -4
- package/Processing/Processors/TabProcessor.js.map +1 -1
- package/Templating/Html.js +1 -1
- package/Templating/Html.js.map +1 -1
- package/package.json +2 -3
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { MarkdownProcessor } from '../MarkdownProcessor';
|
|
3
|
+
import { CalloutProcessor } from './CalloutProcessor';
|
|
4
|
+
import { CodeBlockProcessor } from './CodeBlockProcessor';
|
|
5
|
+
import { SplitProcessor } from './SplitProcessor';
|
|
6
|
+
describe('SplitProcessor', () => {
|
|
7
|
+
it('should render a basic splits block', () => {
|
|
8
|
+
const markdown = '::: splits\n::: split Column 1\nContent A\n::: end-split\n\n::: split Column 2\nContent B\n::: end-split\n::: end-splits';
|
|
9
|
+
const html = new MarkdownProcessor([new SplitProcessor()]).process(markdown);
|
|
10
|
+
expect(html).toContain('class="splits"');
|
|
11
|
+
expect(html).toContain('Column 1');
|
|
12
|
+
expect(html).toContain('Column 2');
|
|
13
|
+
expect(html).toContain('Content A');
|
|
14
|
+
expect(html).toContain('Content B');
|
|
15
|
+
});
|
|
16
|
+
it('should render splits with variant', () => {
|
|
17
|
+
const markdown = '::: splits\n::: split Good\n[!SUCCESS]\n- Point A\n::: end-split\n\n::: split Bad\n[!ERROR]\n- Point B\n::: end-split\n::: end-splits';
|
|
18
|
+
const html = new MarkdownProcessor([new SplitProcessor()]).process(markdown);
|
|
19
|
+
expect(html).toContain('class="split success"');
|
|
20
|
+
expect(html).toContain('class="split error"');
|
|
21
|
+
});
|
|
22
|
+
it('should not add variant class when no variant is specified', () => {
|
|
23
|
+
const markdown = '::: splits\n::: split Plain\nSome text\n::: end-split\n::: end-splits';
|
|
24
|
+
const html = new MarkdownProcessor([new SplitProcessor()]).process(markdown);
|
|
25
|
+
expect(html).toContain('class="split"');
|
|
26
|
+
expect(html).not.toContain('undefined');
|
|
27
|
+
});
|
|
28
|
+
it('should render inline markdown in content', () => {
|
|
29
|
+
const markdown = '::: splits\n::: split Title\n**Bold** and *italic*\n::: end-split\n::: end-splits';
|
|
30
|
+
const html = new MarkdownProcessor([new SplitProcessor()]).process(markdown);
|
|
31
|
+
expect(html).toContain('<strong>Bold</strong>');
|
|
32
|
+
expect(html).toContain('<em>italic</em>');
|
|
33
|
+
});
|
|
34
|
+
it('should handle all supported variants', () => {
|
|
35
|
+
const variants = ['primary', 'secondary', 'tertiary', 'info', 'warning', 'danger', 'error', 'success', 'highlight', 'neutral'];
|
|
36
|
+
for (const variant of variants) {
|
|
37
|
+
const markdown = `::: splits\n::: split T\n[!${variant.toUpperCase()}]\nContent\n::: end-split\n::: end-splits`;
|
|
38
|
+
const html = new MarkdownProcessor([new SplitProcessor()]).process(markdown);
|
|
39
|
+
expect(html).toContain(`class="split ${variant}"`);
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
it('should ignore unknown variants', () => {
|
|
43
|
+
const markdown = '::: splits\n::: split T\n[!UNKNOWN]\nContent\n::: end-split\n::: end-splits';
|
|
44
|
+
const html = new MarkdownProcessor([new SplitProcessor()]).process(markdown);
|
|
45
|
+
expect(html).toContain('class="split"');
|
|
46
|
+
expect(html).toContain('[!UNKNOWN]');
|
|
47
|
+
});
|
|
48
|
+
it('should not match splits without end marker', () => {
|
|
49
|
+
const markdown = '::: splits\n::: split T\nContent\n::: end-split';
|
|
50
|
+
const html = new MarkdownProcessor([new SplitProcessor()]).process(markdown);
|
|
51
|
+
expect(html).not.toContain('class="splits"');
|
|
52
|
+
});
|
|
53
|
+
describe('Nesting', () => {
|
|
54
|
+
it('should render text, callout and code block together in a split', () => {
|
|
55
|
+
const markdown = [
|
|
56
|
+
'::: splits',
|
|
57
|
+
'::: split Example',
|
|
58
|
+
'Explanation text.',
|
|
59
|
+
'',
|
|
60
|
+
'::: warning Careful',
|
|
61
|
+
'Be careful with this.',
|
|
62
|
+
':::',
|
|
63
|
+
'',
|
|
64
|
+
'```ts',
|
|
65
|
+
'const danger = true;',
|
|
66
|
+
'```',
|
|
67
|
+
'::: end-split',
|
|
68
|
+
'::: end-splits'
|
|
69
|
+
].join('\n');
|
|
70
|
+
const html = new MarkdownProcessor([
|
|
71
|
+
new SplitProcessor(),
|
|
72
|
+
new CalloutProcessor(),
|
|
73
|
+
new CodeBlockProcessor()
|
|
74
|
+
]).process(markdown);
|
|
75
|
+
expect(html).toContain('class="splits"');
|
|
76
|
+
expect(html).toContain('Explanation text.');
|
|
77
|
+
expect(html).toContain('class="callout warning"');
|
|
78
|
+
expect(html).toContain('const danger = true;');
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
//# sourceMappingURL=SplitProcessor.Test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SplitProcessor.Test.js","sourceRoot":"","sources":["../../../src/Processing/Processors/SplitProcessor.Test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC5B,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC1C,MAAM,QAAQ,GAAG,0HAA0H,CAAC;QAC5I,MAAM,IAAI,GAAG,IAAI,iBAAiB,CAAC,CAAC,IAAI,cAAc,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAE7E,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;QACzC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QACnC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QACnC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;QACpC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QACzC,MAAM,QAAQ,GAAG,uIAAuI,CAAC;QACzJ,MAAM,IAAI,GAAG,IAAI,iBAAiB,CAAC,CAAC,IAAI,cAAc,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAE7E,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,uBAAuB,CAAC,CAAC;QAChD,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2DAA2D,EAAE,GAAG,EAAE;QACjE,MAAM,QAAQ,GAAG,uEAAuE,CAAC;QACzF,MAAM,IAAI,GAAG,IAAI,iBAAiB,CAAC,CAAC,IAAI,cAAc,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAE7E,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;QACxC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAChD,MAAM,QAAQ,GAAG,mFAAmF,CAAC;QACrG,MAAM,IAAI,GAAG,IAAI,iBAAiB,CAAC,CAAC,IAAI,cAAc,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAE7E,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,uBAAuB,CAAC,CAAC;QAChD,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC5C,MAAM,QAAQ,GAAG,CAAC,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;QAE/H,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC7B,MAAM,QAAQ,GAAG,8BAA8B,OAAO,CAAC,WAAW,EAAE,2CAA2C,CAAC;YAChH,MAAM,IAAI,GAAG,IAAI,iBAAiB,CAAC,CAAC,IAAI,cAAc,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YAE7E,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,gBAAgB,OAAO,GAAG,CAAC,CAAC;QACvD,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACtC,MAAM,QAAQ,GAAG,6EAA6E,CAAC;QAC/F,MAAM,IAAI,GAAG,IAAI,iBAAiB,CAAC,CAAC,IAAI,cAAc,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAE7E,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;QACxC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QAClD,MAAM,QAAQ,GAAG,iDAAiD,CAAC;QACnE,MAAM,IAAI,GAAG,IAAI,iBAAiB,CAAC,CAAC,IAAI,cAAc,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAE7E,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE;QACrB,EAAE,CAAC,gEAAgE,EAAE,GAAG,EAAE;YACtE,MAAM,QAAQ,GAAG;gBACb,YAAY;gBACZ,mBAAmB;gBACnB,mBAAmB;gBACnB,EAAE;gBACF,qBAAqB;gBACrB,uBAAuB;gBACvB,KAAK;gBACL,EAAE;gBACF,OAAO;gBACP,sBAAsB;gBACtB,KAAK;gBACL,eAAe;gBACf,gBAAgB;aACnB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAEb,MAAM,IAAI,GAAG,IAAI,iBAAiB,CAAC;gBAC/B,IAAI,cAAc,EAAE;gBACpB,IAAI,gBAAgB,EAAE;gBACtB,IAAI,kBAAkB,EAAE;aAC3B,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YAErB,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;YACzC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC;YAC5C,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,yBAAyB,CAAC,CAAC;YAClD,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { BaseProcessor } from './Abstracts/BaseProcessor.js';
|
|
2
1
|
import type { TokenizerAndRendererExtension, Tokens } from 'marked';
|
|
2
|
+
import { BaseProcessor } from './Abstracts/BaseProcessor.js';
|
|
3
3
|
type SplitVariant = 'primary' | 'secondary' | 'tertiary' | 'info' | 'warning' | 'danger' | 'error' | 'success' | 'highlight' | 'neutral';
|
|
4
4
|
export interface ISplitsToken extends Tokens.Generic {
|
|
5
5
|
type: 'splits';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SplitProcessor.d.ts","sourceRoot":"","sources":["../../../src/Processing/Processors/SplitProcessor.ts"],"names":[],"mappings":"AAEA,OAAO,
|
|
1
|
+
{"version":3,"file":"SplitProcessor.d.ts","sourceRoot":"","sources":["../../../src/Processing/Processors/SplitProcessor.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAA+B,6BAA6B,EAAiB,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChH,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAI7D,KAAK,YAAY,GAAK,SAAS,GAAG,WAAW,GAAG,UAAU,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,CAAC;AAQ3I,MAAM,WAAW,YAAa,SAAQ,MAAM,CAAC,OAAO;IAChD,IAAI,EAAE,QAAQ,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;CAC9B;AAED,MAAM,WAAW,WAAY,SAAQ,MAAM,CAAC,OAAO;IAC/C,IAAI,EAAE,OAAO,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC7B,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC9B,OAAO,CAAC,EAAE,YAAY,CAAC;CAC1B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,qBAAa,cAAe,SAAQ,aAAa;IAE7C,IAAoB,SAAS,IAAI,6BAA6B,CAe7D;CAEJ"}
|
|
@@ -45,7 +45,8 @@ export class SplitProcessor extends BaseProcessor {
|
|
|
45
45
|
},
|
|
46
46
|
renderer(token) {
|
|
47
47
|
return SplitRenderer.render(this.parser, token);
|
|
48
|
-
}
|
|
48
|
+
},
|
|
49
|
+
childTokens: ['splits']
|
|
49
50
|
};
|
|
50
51
|
}
|
|
51
52
|
}
|
|
@@ -54,7 +55,7 @@ export class SplitProcessor extends BaseProcessor {
|
|
|
54
55
|
*/
|
|
55
56
|
class SplitTokenizer {
|
|
56
57
|
static tokenize(lexer, src) {
|
|
57
|
-
const match = (/^::: splits\n([\s\S]+?)\n::: end-splits/
|
|
58
|
+
const match = (/^::: splits\n([\s\S]+?)\n::: end-splits/).exec(src);
|
|
58
59
|
if (!match) {
|
|
59
60
|
return undefined;
|
|
60
61
|
}
|
|
@@ -74,10 +75,11 @@ class SplitTokenizer {
|
|
|
74
75
|
}
|
|
75
76
|
}
|
|
76
77
|
const content = rawLines.join('\n').trim();
|
|
78
|
+
const tokens = lexer.blockTokens(content);
|
|
77
79
|
splits.push({
|
|
78
80
|
type: 'split',
|
|
79
81
|
raw: splitMatch[0],
|
|
80
|
-
tokens
|
|
82
|
+
tokens,
|
|
81
83
|
id: `split-${index++}`,
|
|
82
84
|
title: lexer.inlineTokens(splitMatch[1].trim()),
|
|
83
85
|
content: content,
|
|
@@ -99,10 +101,10 @@ class SplitRenderer {
|
|
|
99
101
|
return `
|
|
100
102
|
<div class="splits">
|
|
101
103
|
${token.splits.map((split) => `
|
|
102
|
-
<div class="split ${split.variant}">
|
|
103
|
-
<h6>${parser.
|
|
104
|
+
<div class="split${split.variant ? ` ${split.variant}` : ''}">
|
|
105
|
+
<h6>${parser.parseInline(split.title)}</h6>
|
|
104
106
|
<div class="split-content">
|
|
105
|
-
${parser.parse(split.tokens)}
|
|
107
|
+
${parser.parse(split.tokens ?? [])}
|
|
106
108
|
</div>
|
|
107
109
|
</div>
|
|
108
110
|
`).join('')}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SplitProcessor.js","sourceRoot":"","sources":["../../../src/Processing/Processors/SplitProcessor.ts"],"names":[],"mappings":"AAAA,kBAAkB;
|
|
1
|
+
{"version":3,"file":"SplitProcessor.js","sourceRoot":"","sources":["../../../src/Processing/Processors/SplitProcessor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StepsProcessor.Test.d.ts","sourceRoot":"","sources":["../../../src/Processing/Processors/StepsProcessor.Test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { marked } from 'marked';
|
|
2
|
+
import { describe, expect, it } from 'vitest';
|
|
3
|
+
import { StepsProcessor } from './StepsProcessor';
|
|
4
|
+
describe('StepsProcessor', () => {
|
|
5
|
+
function parse(md) {
|
|
6
|
+
const processor = new StepsProcessor();
|
|
7
|
+
marked.use({ extensions: [processor.extension] });
|
|
8
|
+
return marked.parse(md).trim();
|
|
9
|
+
}
|
|
10
|
+
it('should parse a single step', () => {
|
|
11
|
+
const md = `::: steps
|
|
12
|
+
::: step Install the package
|
|
13
|
+
Run npm install.
|
|
14
|
+
::: end-step
|
|
15
|
+
::: end-steps`;
|
|
16
|
+
const result = parse(md);
|
|
17
|
+
expect(result).toContain('class="step"');
|
|
18
|
+
expect(result).toContain('Install the package');
|
|
19
|
+
expect(result).toContain('Run npm install.');
|
|
20
|
+
expect(result).toContain('class="step-number">1</span>');
|
|
21
|
+
});
|
|
22
|
+
it('should parse multiple steps with correct numbering', () => {
|
|
23
|
+
const md = `::: steps
|
|
24
|
+
::: step First step
|
|
25
|
+
Content A
|
|
26
|
+
::: end-step
|
|
27
|
+
|
|
28
|
+
::: step Second step
|
|
29
|
+
Content B
|
|
30
|
+
::: end-step
|
|
31
|
+
|
|
32
|
+
::: step Third step
|
|
33
|
+
Content C
|
|
34
|
+
::: end-step
|
|
35
|
+
::: end-steps`;
|
|
36
|
+
const result = parse(md);
|
|
37
|
+
expect(result).toContain('class="step-number">1</span>');
|
|
38
|
+
expect(result).toContain('class="step-number">2</span>');
|
|
39
|
+
expect(result).toContain('class="step-number">3</span>');
|
|
40
|
+
expect(result).toContain('First step');
|
|
41
|
+
expect(result).toContain('Second step');
|
|
42
|
+
expect(result).toContain('Third step');
|
|
43
|
+
});
|
|
44
|
+
it('should render step-line between steps but not after last', () => {
|
|
45
|
+
const md = `::: steps
|
|
46
|
+
::: step Step A
|
|
47
|
+
Content
|
|
48
|
+
::: end-step
|
|
49
|
+
|
|
50
|
+
::: step Step B
|
|
51
|
+
Content
|
|
52
|
+
::: end-step
|
|
53
|
+
::: end-steps`;
|
|
54
|
+
const result = parse(md);
|
|
55
|
+
const lines = (result.match(/class="step-line"/g) ?? []).length;
|
|
56
|
+
expect(lines).toBe(1); // Only between step A and B, not after B
|
|
57
|
+
});
|
|
58
|
+
it('should return undefined for non-matching input', () => {
|
|
59
|
+
const md = 'Just normal markdown.';
|
|
60
|
+
const result = parse(md);
|
|
61
|
+
expect(result).not.toContain('class="steps"');
|
|
62
|
+
});
|
|
63
|
+
it('should handle markdown content inside steps', () => {
|
|
64
|
+
const md = `::: steps
|
|
65
|
+
::: step Install
|
|
66
|
+
Run the command:
|
|
67
|
+
|
|
68
|
+
- Option A
|
|
69
|
+
- Option B
|
|
70
|
+
::: end-step
|
|
71
|
+
::: end-steps`;
|
|
72
|
+
const result = parse(md);
|
|
73
|
+
expect(result).toContain('<li>');
|
|
74
|
+
expect(result).toContain('Option A');
|
|
75
|
+
});
|
|
76
|
+
});
|
|
77
|
+
//# sourceMappingURL=StepsProcessor.Test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StepsProcessor.Test.js","sourceRoot":"","sources":["../../../src/Processing/Processors/StepsProcessor.Test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { TokenizerAndRendererExtension, Tokens } from 'marked';
|
|
2
|
+
import { BaseProcessor } from './Abstracts/BaseProcessor.js';
|
|
3
|
+
export interface IStepsToken extends Tokens.Generic {
|
|
4
|
+
type: 'steps';
|
|
5
|
+
raw: string;
|
|
6
|
+
steps: Array<IStepToken>;
|
|
7
|
+
}
|
|
8
|
+
export interface IStepToken extends Tokens.Generic {
|
|
9
|
+
type: 'step';
|
|
10
|
+
id: string;
|
|
11
|
+
title: string;
|
|
12
|
+
tokens: Array<Tokens.Generic>;
|
|
13
|
+
content: string;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* A processor that transforms `:::steps` blocks into a vertical stepper layout.
|
|
17
|
+
* Each step includes a title and content body.
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* ```markdown
|
|
21
|
+
* ::: steps
|
|
22
|
+
* ::: step Install the package
|
|
23
|
+
* Run the following command in your terminal:
|
|
24
|
+
* ```bash
|
|
25
|
+
* npm install @breadstone/mosaik-elements
|
|
26
|
+
* ```
|
|
27
|
+
* ::: end-step
|
|
28
|
+
*
|
|
29
|
+
* ::: step Import the component
|
|
30
|
+
* Use the component in your project:
|
|
31
|
+
* ```ts
|
|
32
|
+
* import '@breadstone/mosaik-elements';
|
|
33
|
+
* ```
|
|
34
|
+
* ::: end-step
|
|
35
|
+
* ::: end-steps
|
|
36
|
+
* ```
|
|
37
|
+
*
|
|
38
|
+
* @public
|
|
39
|
+
*/
|
|
40
|
+
export declare class StepsProcessor extends BaseProcessor {
|
|
41
|
+
get extension(): TokenizerAndRendererExtension;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=StepsProcessor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StepsProcessor.d.ts","sourceRoot":"","sources":["../../../src/Processing/Processors/StepsProcessor.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAA+B,6BAA6B,EAAiB,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhH,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAI7D,MAAM,WAAW,WAAY,SAAQ,MAAM,CAAC,OAAO;IAC/C,IAAI,EAAE,OAAO,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;CAC5B;AAED,MAAM,WAAW,UAAW,SAAQ,MAAM,CAAC,OAAO;IAC9C,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC9B,OAAO,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,qBAAa,cAAe,SAAQ,aAAa;IAE7C,IAAoB,SAAS,IAAI,6BAA6B,CAe7D;CAEJ"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
// #region Imports
|
|
2
|
+
import { html } from '../../Templating/Html.js';
|
|
3
|
+
import { BaseProcessor } from './Abstracts/BaseProcessor.js';
|
|
4
|
+
/**
|
|
5
|
+
* A processor that transforms `:::steps` blocks into a vertical stepper layout.
|
|
6
|
+
* Each step includes a title and content body.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```markdown
|
|
10
|
+
* ::: steps
|
|
11
|
+
* ::: step Install the package
|
|
12
|
+
* Run the following command in your terminal:
|
|
13
|
+
* ```bash
|
|
14
|
+
* npm install @breadstone/mosaik-elements
|
|
15
|
+
* ```
|
|
16
|
+
* ::: end-step
|
|
17
|
+
*
|
|
18
|
+
* ::: step Import the component
|
|
19
|
+
* Use the component in your project:
|
|
20
|
+
* ```ts
|
|
21
|
+
* import '@breadstone/mosaik-elements';
|
|
22
|
+
* ```
|
|
23
|
+
* ::: end-step
|
|
24
|
+
* ::: end-steps
|
|
25
|
+
* ```
|
|
26
|
+
*
|
|
27
|
+
* @public
|
|
28
|
+
*/
|
|
29
|
+
export class StepsProcessor extends BaseProcessor {
|
|
30
|
+
get extension() {
|
|
31
|
+
return {
|
|
32
|
+
name: 'steps',
|
|
33
|
+
level: 'block',
|
|
34
|
+
start(src) {
|
|
35
|
+
return (/^::: steps/).exec(src)?.index;
|
|
36
|
+
},
|
|
37
|
+
tokenizer(src) {
|
|
38
|
+
return StepsTokenizer.tokenize(this.lexer, src);
|
|
39
|
+
},
|
|
40
|
+
renderer(token) {
|
|
41
|
+
return StepsRenderer.render(this.parser, token);
|
|
42
|
+
},
|
|
43
|
+
childTokens: ['steps']
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* @private
|
|
49
|
+
*/
|
|
50
|
+
class StepsTokenizer {
|
|
51
|
+
static tokenize(lexer, src) {
|
|
52
|
+
const match = (/^::: steps\n([\s\S]+?)\n::: end-steps/).exec(src);
|
|
53
|
+
if (!match) {
|
|
54
|
+
return undefined;
|
|
55
|
+
}
|
|
56
|
+
const stepRegex = /^::: step (.+?)\n([\s\S]+?)\n::: end-step/gm;
|
|
57
|
+
const steps = [];
|
|
58
|
+
let stepMatch = null;
|
|
59
|
+
let index = 0;
|
|
60
|
+
while ((stepMatch = stepRegex.exec(match[1])) !== null) {
|
|
61
|
+
const content = stepMatch[2].trim();
|
|
62
|
+
const tokens = lexer.blockTokens(content);
|
|
63
|
+
steps.push({
|
|
64
|
+
type: 'step',
|
|
65
|
+
raw: stepMatch[0],
|
|
66
|
+
tokens,
|
|
67
|
+
id: `step-${index++}`,
|
|
68
|
+
title: stepMatch[1].trim(),
|
|
69
|
+
content
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
return {
|
|
73
|
+
type: 'steps',
|
|
74
|
+
raw: match[0],
|
|
75
|
+
steps
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* @private
|
|
81
|
+
*/
|
|
82
|
+
class StepsRenderer {
|
|
83
|
+
static render(parser, token) {
|
|
84
|
+
return html `
|
|
85
|
+
<div class="steps">
|
|
86
|
+
${token.steps.map((step, i) => `
|
|
87
|
+
<div class="step" id="${step.id}">
|
|
88
|
+
<div class="step-indicator">
|
|
89
|
+
<span class="step-number">${i + 1}</span>
|
|
90
|
+
${i < token.steps.length - 1 ? '<span class="step-line"></span>' : ''}
|
|
91
|
+
</div>
|
|
92
|
+
<div class="step-body">
|
|
93
|
+
<h6 class="step-title">${step.title}</h6>
|
|
94
|
+
<div class="step-content">${parser.parse(step.tokens ?? [])}</div>
|
|
95
|
+
</div>
|
|
96
|
+
</div>
|
|
97
|
+
`).join('')}
|
|
98
|
+
</div>
|
|
99
|
+
`.trim();
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=StepsProcessor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StepsProcessor.js","sourceRoot":"","sources":["../../../src/Processing/Processors/StepsProcessor.ts"],"names":[],"mappings":"AAAA,kBAAkB;AAGlB,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAkB7D;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,OAAO,cAAe,SAAQ,aAAa;IAE7C,IAAoB,SAAS;QACzB,OAAO;YACH,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,OAAO;YACd,KAAK,CAAC,GAAW;gBACb,OAAO,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC;YAC3C,CAAC;YACD,SAAS,CAAsB,GAAW;gBACtC,OAAO,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YACpD,CAAC;YACD,QAAQ,CAAqB,KAAqB;gBAC9C,OAAO,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,KAAoB,CAAC,CAAC;YACnE,CAAC;YACD,WAAW,EAAE,CAAC,OAAO,CAAC;SACzB,CAAC;IACN,CAAC;CAEJ;AAED;;GAEG;AACH,MAAM,cAAc;IAET,MAAM,CAAC,QAAQ,CAAC,KAAY,EAAE,GAAW;QAC5C,MAAM,KAAK,GAAG,CAAC,uCAAuC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClE,IAAI,CAAC,KAAK,EAAE,CAAC;YACT,OAAO,SAAS,CAAC;QACrB,CAAC;QAED,MAAM,SAAS,GAAG,6CAA6C,CAAC;QAChE,MAAM,KAAK,GAAsB,EAAE,CAAC;QACpC,IAAI,SAAS,GAA2B,IAAI,CAAC;QAC7C,IAAI,KAAK,GAAG,CAAC,CAAC;QAEd,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YACrD,MAAM,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YACpC,MAAM,MAAM,GAAG,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YAE1C,KAAK,CAAC,IAAI,CAAC;gBACP,IAAI,EAAE,MAAM;gBACZ,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC;gBACjB,MAAM;gBACN,EAAE,EAAE,QAAQ,KAAK,EAAE,EAAE;gBACrB,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;gBAC1B,OAAO;aACV,CAAC,CAAC;QACP,CAAC;QAED,OAAO;YACH,IAAI,EAAE,OAAO;YACb,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;YACb,KAAK;SACR,CAAC;IACN,CAAC;CAEJ;AAED;;GAEG;AACH,MAAM,aAAa;IAER,MAAM,CAAC,MAAM,CAAC,MAAc,EAAE,KAAkB;QACnD,OAAO,IAAI,CAAA;;cAEL,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;wCACH,IAAI,CAAC,EAAE;;oDAEK,CAAC,GAAG,CAAC;0BAC/B,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,iCAAiC,CAAC,CAAC,CAAC,EAAE;;;iDAG5C,IAAI,CAAC,KAAK;oDACP,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC;;;aAGtE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;;SAEd,CAAC,IAAI,EAAE,CAAC;IACb,CAAC;CAEJ"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TabProcessor.Test.d.ts","sourceRoot":"","sources":["../../../src/Processing/Processors/TabProcessor.Test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { MarkdownProcessor } from '../MarkdownProcessor';
|
|
3
|
+
import { BlockquoteProcessor } from './BlockquoteProcessor';
|
|
4
|
+
import { CalloutProcessor } from './CalloutProcessor';
|
|
5
|
+
import { CodeBlockProcessor } from './CodeBlockProcessor';
|
|
6
|
+
import { SplitProcessor } from './SplitProcessor';
|
|
7
|
+
import { TabProcessor } from './TabProcessor';
|
|
8
|
+
describe('TabProcessor', () => {
|
|
9
|
+
it('should render a basic tabs block', () => {
|
|
10
|
+
const markdown = '::: tabs\n::: tab Tab 1\nContent 1\n::: end-tab\n\n::: tab Tab 2\nContent 2\n::: end-tab\n::: end-tabs';
|
|
11
|
+
const html = new MarkdownProcessor([new TabProcessor()]).process(markdown);
|
|
12
|
+
expect(html).toContain('class="tabs"');
|
|
13
|
+
expect(html).toContain('Tab 1');
|
|
14
|
+
expect(html).toContain('Tab 2');
|
|
15
|
+
expect(html).toContain('Content 1');
|
|
16
|
+
expect(html).toContain('Content 2');
|
|
17
|
+
});
|
|
18
|
+
it('should assign sequential IDs to tabs', () => {
|
|
19
|
+
const markdown = '::: tabs\n::: tab First\nA\n::: end-tab\n\n::: tab Second\nB\n::: end-tab\n::: end-tabs';
|
|
20
|
+
const html = new MarkdownProcessor([new TabProcessor()]).process(markdown);
|
|
21
|
+
expect(html).toContain('data-tab="tab-0"');
|
|
22
|
+
expect(html).toContain('data-tab="tab-1"');
|
|
23
|
+
expect(html).toContain('id="tab-0"');
|
|
24
|
+
expect(html).toContain('id="tab-1"');
|
|
25
|
+
});
|
|
26
|
+
it('should render tabs with variant', () => {
|
|
27
|
+
const markdown = '::: tabs\n::: tab Tab 1\n[!INFO]\nInfo content\n::: end-tab\n\n::: tab Tab 2\n[!WARNING]\nWarning content\n::: end-tab\n::: end-tabs';
|
|
28
|
+
const html = new MarkdownProcessor([new TabProcessor()]).process(markdown);
|
|
29
|
+
expect(html).toContain('class="tab-item info"');
|
|
30
|
+
expect(html).toContain('class="tab-item warning"');
|
|
31
|
+
expect(html).toContain('class="tab-content info"');
|
|
32
|
+
expect(html).toContain('class="tab-content warning"');
|
|
33
|
+
});
|
|
34
|
+
it('should not add variant class when no variant', () => {
|
|
35
|
+
const markdown = '::: tabs\n::: tab Plain\nJust text\n::: end-tab\n::: end-tabs';
|
|
36
|
+
const html = new MarkdownProcessor([new TabProcessor()]).process(markdown);
|
|
37
|
+
expect(html).toContain('class="tab-item"');
|
|
38
|
+
expect(html).toContain('class="tab-content"');
|
|
39
|
+
expect(html).not.toContain('undefined');
|
|
40
|
+
});
|
|
41
|
+
it('should parse inline markdown in tab content', () => {
|
|
42
|
+
const markdown = '::: tabs\n::: tab MD\n**Bold** and *italic*\n::: end-tab\n::: end-tabs';
|
|
43
|
+
const html = new MarkdownProcessor([new TabProcessor()]).process(markdown);
|
|
44
|
+
expect(html).toContain('<strong>Bold</strong>');
|
|
45
|
+
expect(html).toContain('<em>italic</em>');
|
|
46
|
+
});
|
|
47
|
+
it('should handle all supported variants', () => {
|
|
48
|
+
const variants = ['primary', 'secondary', 'tertiary', 'info', 'warning', 'danger', 'error', 'success', 'highlight', 'neutral'];
|
|
49
|
+
for (const variant of variants) {
|
|
50
|
+
const markdown = `::: tabs\n::: tab T\n[!${variant.toUpperCase()}]\nContent\n::: end-tab\n::: end-tabs`;
|
|
51
|
+
const html = new MarkdownProcessor([new TabProcessor()]).process(markdown);
|
|
52
|
+
expect(html).toContain(`class="tab-item ${variant}"`);
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
it('should ignore unknown variants and keep them as content', () => {
|
|
56
|
+
const markdown = '::: tabs\n::: tab T\n[!UNKNOWN]\nContent\n::: end-tab\n::: end-tabs';
|
|
57
|
+
const html = new MarkdownProcessor([new TabProcessor()]).process(markdown);
|
|
58
|
+
expect(html).toContain('class="tab-item"');
|
|
59
|
+
expect(html).toContain('[!UNKNOWN]');
|
|
60
|
+
});
|
|
61
|
+
it('should not match tabs without end marker', () => {
|
|
62
|
+
const markdown = '::: tabs\n::: tab T\nContent\n::: end-tab';
|
|
63
|
+
const html = new MarkdownProcessor([new TabProcessor()]).process(markdown);
|
|
64
|
+
expect(html).not.toContain('class="tabs"');
|
|
65
|
+
});
|
|
66
|
+
describe('Nesting', () => {
|
|
67
|
+
it('should render text, blockquote and code block together in a tab', () => {
|
|
68
|
+
const markdown = [
|
|
69
|
+
'::: tabs',
|
|
70
|
+
'::: tab Mixed',
|
|
71
|
+
'Some introductory text.',
|
|
72
|
+
'',
|
|
73
|
+
'> [!INFO]',
|
|
74
|
+
'> A note for the reader.',
|
|
75
|
+
'',
|
|
76
|
+
'```ts',
|
|
77
|
+
'console.log("hello");',
|
|
78
|
+
'```',
|
|
79
|
+
'::: end-tab',
|
|
80
|
+
'::: end-tabs'
|
|
81
|
+
].join('\n');
|
|
82
|
+
const html = new MarkdownProcessor([
|
|
83
|
+
new TabProcessor(),
|
|
84
|
+
new BlockquoteProcessor(),
|
|
85
|
+
new CodeBlockProcessor()
|
|
86
|
+
]).process(markdown);
|
|
87
|
+
expect(html).toContain('class="tabs"');
|
|
88
|
+
expect(html).toContain('Some introductory text.');
|
|
89
|
+
expect(html).toContain('class="blockquote-info"');
|
|
90
|
+
expect(html).toContain('A note for the reader.');
|
|
91
|
+
expect(html).toContain('console.log');
|
|
92
|
+
});
|
|
93
|
+
it('should render a complex document with all processors', () => {
|
|
94
|
+
const markdown = [
|
|
95
|
+
'> [!INFO]',
|
|
96
|
+
'> Top-level info blockquote.',
|
|
97
|
+
'',
|
|
98
|
+
'::: tabs',
|
|
99
|
+
'::: tab Overview',
|
|
100
|
+
'This is the overview.',
|
|
101
|
+
'::: end-tab',
|
|
102
|
+
'',
|
|
103
|
+
'::: tab Details',
|
|
104
|
+
'> [!WARNING]',
|
|
105
|
+
'> Warning in details tab.',
|
|
106
|
+
'',
|
|
107
|
+
'```ts',
|
|
108
|
+
'const x = 1;',
|
|
109
|
+
'```',
|
|
110
|
+
'::: end-tab',
|
|
111
|
+
'::: end-tabs'
|
|
112
|
+
].join('\n');
|
|
113
|
+
const html = new MarkdownProcessor([
|
|
114
|
+
new TabProcessor(),
|
|
115
|
+
new BlockquoteProcessor(),
|
|
116
|
+
new CodeBlockProcessor(),
|
|
117
|
+
new CalloutProcessor(),
|
|
118
|
+
new SplitProcessor()
|
|
119
|
+
]).process(markdown);
|
|
120
|
+
expect(html).toContain('class="blockquote-info"');
|
|
121
|
+
expect(html).toContain('Top-level info blockquote.');
|
|
122
|
+
expect(html).toContain('class="tabs"');
|
|
123
|
+
expect(html).toContain('This is the overview.');
|
|
124
|
+
expect(html).toContain('class="blockquote-warning"');
|
|
125
|
+
expect(html).toContain('Warning in details tab.');
|
|
126
|
+
expect(html).toContain('const x = 1;');
|
|
127
|
+
});
|
|
128
|
+
});
|
|
129
|
+
});
|
|
130
|
+
//# sourceMappingURL=TabProcessor.Test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TabProcessor.Test.js","sourceRoot":"","sources":["../../../src/Processing/Processors/TabProcessor.Test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC1B,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QACxC,MAAM,QAAQ,GAAG,wGAAwG,CAAC;QAC1H,MAAM,IAAI,GAAG,IAAI,iBAAiB,CAAC,CAAC,IAAI,YAAY,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAE3E,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;QACvC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAChC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAChC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;QACpC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC5C,MAAM,QAAQ,GAAG,yFAAyF,CAAC;QAC3G,MAAM,IAAI,GAAG,IAAI,iBAAiB,CAAC,CAAC,IAAI,YAAY,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAE3E,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;QAC3C,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;QAC3C,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;QACrC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACvC,MAAM,QAAQ,GAAG,sIAAsI,CAAC;QACxJ,MAAM,IAAI,GAAG,IAAI,iBAAiB,CAAC,CAAC,IAAI,YAAY,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAE3E,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,uBAAuB,CAAC,CAAC;QAChD,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,0BAA0B,CAAC,CAAC;QACnD,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,0BAA0B,CAAC,CAAC;QACnD,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,6BAA6B,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACpD,MAAM,QAAQ,GAAG,+DAA+D,CAAC;QACjF,MAAM,IAAI,GAAG,IAAI,iBAAiB,CAAC,CAAC,IAAI,YAAY,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAE3E,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;QAC3C,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC;QAC9C,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACnD,MAAM,QAAQ,GAAG,wEAAwE,CAAC;QAC1F,MAAM,IAAI,GAAG,IAAI,iBAAiB,CAAC,CAAC,IAAI,YAAY,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAE3E,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,uBAAuB,CAAC,CAAC;QAChD,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC5C,MAAM,QAAQ,GAAG,CAAC,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;QAE/H,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC7B,MAAM,QAAQ,GAAG,0BAA0B,OAAO,CAAC,WAAW,EAAE,uCAAuC,CAAC;YACxG,MAAM,IAAI,GAAG,IAAI,iBAAiB,CAAC,CAAC,IAAI,YAAY,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YAE3E,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,mBAAmB,OAAO,GAAG,CAAC,CAAC;QAC1D,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;QAC/D,MAAM,QAAQ,GAAG,qEAAqE,CAAC;QACvF,MAAM,IAAI,GAAG,IAAI,iBAAiB,CAAC,CAAC,IAAI,YAAY,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAE3E,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;QAC3C,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAChD,MAAM,QAAQ,GAAG,2CAA2C,CAAC;QAC7D,MAAM,IAAI,GAAG,IAAI,iBAAiB,CAAC,CAAC,IAAI,YAAY,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAE3E,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE;QACrB,EAAE,CAAC,iEAAiE,EAAE,GAAG,EAAE;YACvE,MAAM,QAAQ,GAAG;gBACb,UAAU;gBACV,eAAe;gBACf,yBAAyB;gBACzB,EAAE;gBACF,WAAW;gBACX,0BAA0B;gBAC1B,EAAE;gBACF,OAAO;gBACP,uBAAuB;gBACvB,KAAK;gBACL,aAAa;gBACb,cAAc;aACjB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAEb,MAAM,IAAI,GAAG,IAAI,iBAAiB,CAAC;gBAC/B,IAAI,YAAY,EAAE;gBAClB,IAAI,mBAAmB,EAAE;gBACzB,IAAI,kBAAkB,EAAE;aAC3B,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YAErB,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;YACvC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,yBAAyB,CAAC,CAAC;YAClD,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,yBAAyB,CAAC,CAAC;YAClD,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,wBAAwB,CAAC,CAAC;YACjD,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;YAC5D,MAAM,QAAQ,GAAG;gBACb,WAAW;gBACX,8BAA8B;gBAC9B,EAAE;gBACF,UAAU;gBACV,kBAAkB;gBAClB,uBAAuB;gBACvB,aAAa;gBACb,EAAE;gBACF,iBAAiB;gBACjB,cAAc;gBACd,2BAA2B;gBAC3B,EAAE;gBACF,OAAO;gBACP,cAAc;gBACd,KAAK;gBACL,aAAa;gBACb,cAAc;aACjB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAEb,MAAM,IAAI,GAAG,IAAI,iBAAiB,CAAC;gBAC/B,IAAI,YAAY,EAAE;gBAClB,IAAI,mBAAmB,EAAE;gBACzB,IAAI,kBAAkB,EAAE;gBACxB,IAAI,gBAAgB,EAAE;gBACtB,IAAI,cAAc,EAAE;aACvB,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YAErB,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,yBAAyB,CAAC,CAAC;YAClD,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAC;YACrD,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;YACvC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,uBAAuB,CAAC,CAAC;YAChD,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAC;YACrD,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,yBAAyB,CAAC,CAAC;YAClD,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
+
import type { TokenizerAndRendererExtension, Tokens } from 'marked';
|
|
1
2
|
import { BaseProcessor } from './Abstracts/BaseProcessor.js';
|
|
2
|
-
import type { Tokens, TokenizerAndRendererExtension } from 'marked';
|
|
3
3
|
type TabVariant = 'primary' | 'secondary' | 'tertiary' | 'info' | 'warning' | 'danger' | 'error' | 'success' | 'highlight' | 'neutral';
|
|
4
4
|
export interface ITabsToken extends Tokens.Generic {
|
|
5
5
|
type: 'tabs';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TabProcessor.d.ts","sourceRoot":"","sources":["../../../src/Processing/Processors/TabProcessor.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"TabProcessor.d.ts","sourceRoot":"","sources":["../../../src/Processing/Processors/TabProcessor.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAA+B,6BAA6B,EAAiB,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhH,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAI7D,KAAK,UAAU,GAAK,SAAS,GAAG,WAAW,GAAG,UAAU,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,CAAC;AAQzI,MAAM,WAAW,UAAW,SAAQ,MAAM,CAAC,OAAO;IAC9C,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;CAC1B;AAED,MAAM,WAAW,SAAU,SAAQ,MAAM,CAAC,OAAO;IAC7C,IAAI,EAAE,KAAK,CAAC;IACZ,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,UAAU,CAAC;CACxB;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,YAAa,SAAQ,aAAa;IAE3C,IAAoB,SAAS,IAAI,6BAA6B,CAe7D;CAEJ"}
|
|
@@ -42,7 +42,8 @@ export class TabProcessor extends BaseProcessor {
|
|
|
42
42
|
},
|
|
43
43
|
renderer(token) {
|
|
44
44
|
return TabRenderer.render(this.parser, token);
|
|
45
|
-
}
|
|
45
|
+
},
|
|
46
|
+
childTokens: ['tabs']
|
|
46
47
|
};
|
|
47
48
|
}
|
|
48
49
|
}
|
|
@@ -51,7 +52,7 @@ export class TabProcessor extends BaseProcessor {
|
|
|
51
52
|
*/
|
|
52
53
|
class TabTokenizer {
|
|
53
54
|
static tokenize(lexer, src) {
|
|
54
|
-
const match = (/^::: tabs\n([\s\S]+?)\n::: end-tabs/
|
|
55
|
+
const match = (/^::: tabs\n([\s\S]+?)\n::: end-tabs/).exec(src);
|
|
55
56
|
if (!match) {
|
|
56
57
|
return undefined;
|
|
57
58
|
}
|
|
@@ -71,10 +72,11 @@ class TabTokenizer {
|
|
|
71
72
|
}
|
|
72
73
|
}
|
|
73
74
|
const content = rawLines.join('\n').trim();
|
|
75
|
+
const tokens = lexer.blockTokens(content);
|
|
74
76
|
tabs.push({
|
|
75
77
|
type: 'tab',
|
|
76
78
|
raw: tabMatch[0],
|
|
77
|
-
tokens
|
|
79
|
+
tokens,
|
|
78
80
|
id: `tab-${index++}`,
|
|
79
81
|
title: tabMatch[1].trim(),
|
|
80
82
|
content,
|
|
@@ -101,7 +103,7 @@ class TabRenderer {
|
|
|
101
103
|
</li>`).join('')}
|
|
102
104
|
</ul>
|
|
103
105
|
${token.tabs.map((tab) => `
|
|
104
|
-
<div class="tab-content${tab.variant ? ` ${tab.variant}` : ''}" id="${tab.id}">${tab.
|
|
106
|
+
<div class="tab-content${tab.variant ? ` ${tab.variant}` : ''}" id="${tab.id}">${parser.parse(tab.tokens ?? [])}
|
|
105
107
|
</div>`).join('')}
|
|
106
108
|
</div>
|
|
107
109
|
`.trim();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TabProcessor.js","sourceRoot":"","sources":["../../../src/Processing/Processors/TabProcessor.ts"],"names":[],"mappings":"AAAA,kBAAkB;
|
|
1
|
+
{"version":3,"file":"TabProcessor.js","sourceRoot":"","sources":["../../../src/Processing/Processors/TabProcessor.ts"],"names":[],"mappings":"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"}
|