@breadstone-tools/markdowner-core 0.0.231 → 0.0.233
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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CalloutProcessor.js","sourceRoot":"","sources":["../../../src/Processing/Processors/CalloutProcessor.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"CalloutProcessor.js","sourceRoot":"","sources":["../../../src/Processing/Processors/CalloutProcessor.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAI7D,MAAM,cAAc,GAAG,IAAI,GAAG,CAAiB;IAC3C,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS;CACrG,CAAC,CAAC;AAUH;;;;;;;;;;;;;GAaG;AACH,MAAM,OAAO,gBAAiB,SAAQ,aAAa;IAE/C,IAAoB,SAAS;QACzB,OAAO;YACH,IAAI,EAAE,SAAS;YACf,KAAK,EAAE,OAAO;YACd,KAAK,CAAC,GAAW;gBACb,OAAO,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC;YACzC,CAAC;YACD,SAAS,CAAsB,GAAW;gBACtC,OAAO,gBAAgB,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YACtD,CAAC;YACD,QAAQ,CAAqB,KAAqB;gBAC9C,OAAO,eAAe,CAAC,MAAM,CAAC,KAAsB,EAAE,IAAI,CAAC,CAAC;YAChE,CAAC;SACJ,CAAC;IACN,CAAC;CAEJ;AAED,MAAM,gBAAgB;IAEX,MAAM,CAAC,QAAQ,CAAC,GAAW,EAAE,KAAY;QAC5C,MAAM,KAAK,GAAG,CAAC,6CAA6C,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACxE,IAAI,CAAC,KAAK,EAAE,CAAC;YACT,OAAO,SAAS,CAAC;QACrB,CAAC;QAED,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAoB,CAAC;QACzD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YAC/B,OAAO,SAAS,CAAC;QACrB,CAAC;QAED,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;QAC/B,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAEhC,MAAM,aAAa,GAAG,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAEjD,OAAO;YACH,IAAI,EAAE,SAAS;YACf,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;YACb,OAAO;YACP,KAAK;YACL,MAAM,EAAE,aAAa;SACxB,CAAC;IACN,CAAC;CAEJ;AAED,MAAM,eAAe;IAEV,MAAM,CAAC,MAAM,CAAC,KAAoB,EAAE,QAAsB;QAC7D,MAAM,OAAO,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QAC3C,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK;YACrB,CAAC,CAAC,8BAA8B,KAAK,CAAC,KAAK,QAAQ;YACnD,CAAC,CAAC,EAAE,CAAC;QAET,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;QAEvD,OAAO,eAAe,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,KAAK,GAAG,IAAI,QAAQ,CAAC;IACrE,CAAC;CAEJ"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CardProcessor.Test.d.ts","sourceRoot":"","sources":["../../../src/Processing/Processors/CardProcessor.Test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { marked } from 'marked';
|
|
2
|
+
import { describe, expect, it } from 'vitest';
|
|
3
|
+
import { CardProcessor } from './CardProcessor';
|
|
4
|
+
describe('CardProcessor', () => {
|
|
5
|
+
function parse(md) {
|
|
6
|
+
const processor = new CardProcessor();
|
|
7
|
+
marked.use({ extensions: [processor.extension] });
|
|
8
|
+
return marked.parse(md).trim();
|
|
9
|
+
}
|
|
10
|
+
it('should parse a card with header and content', () => {
|
|
11
|
+
const md = `::: card Joy Theme
|
|
12
|
+
The Joy theme uses warm magenta accents.
|
|
13
|
+
::: end-card`;
|
|
14
|
+
const result = parse(md);
|
|
15
|
+
expect(result).toContain('class="md-card neutral"');
|
|
16
|
+
expect(result).toContain('Joy Theme');
|
|
17
|
+
expect(result).toContain('warm magenta accents');
|
|
18
|
+
});
|
|
19
|
+
it('should parse a card with header and sub-header', () => {
|
|
20
|
+
const md = `::: card Joy Theme | Warm and playful
|
|
21
|
+
Some content here.
|
|
22
|
+
::: end-card`;
|
|
23
|
+
const result = parse(md);
|
|
24
|
+
expect(result).toContain('Joy Theme');
|
|
25
|
+
expect(result).toContain('Warm and playful');
|
|
26
|
+
expect(result).toContain('Some content here.');
|
|
27
|
+
});
|
|
28
|
+
it('should parse a card with header, sub-header, and variant', () => {
|
|
29
|
+
const md = `::: card Warning | Be careful | warning
|
|
30
|
+
This is important content.
|
|
31
|
+
::: end-card`;
|
|
32
|
+
const result = parse(md);
|
|
33
|
+
expect(result).toContain('class="md-card warning"');
|
|
34
|
+
expect(result).toContain('Warning');
|
|
35
|
+
expect(result).toContain('Be careful');
|
|
36
|
+
});
|
|
37
|
+
it('should default unknown variant to neutral', () => {
|
|
38
|
+
const md = `::: card Test | Sub | unknown
|
|
39
|
+
Content.
|
|
40
|
+
::: end-card`;
|
|
41
|
+
const result = parse(md);
|
|
42
|
+
expect(result).toContain('class="md-card neutral"');
|
|
43
|
+
});
|
|
44
|
+
it('should handle markdown content inside card', () => {
|
|
45
|
+
const md = `::: card Features
|
|
46
|
+
- Feature A
|
|
47
|
+
- Feature B
|
|
48
|
+
- **Bold feature**
|
|
49
|
+
::: end-card`;
|
|
50
|
+
const result = parse(md);
|
|
51
|
+
expect(result).toContain('<li>');
|
|
52
|
+
expect(result).toContain('Feature A');
|
|
53
|
+
expect(result).toContain('<strong>Bold feature</strong>');
|
|
54
|
+
});
|
|
55
|
+
it('should handle multiple cards independently', () => {
|
|
56
|
+
const md = `::: card Card One
|
|
57
|
+
Content one.
|
|
58
|
+
::: end-card
|
|
59
|
+
|
|
60
|
+
::: card Card Two
|
|
61
|
+
Content two.
|
|
62
|
+
::: end-card`;
|
|
63
|
+
const result = parse(md);
|
|
64
|
+
const cardCount = (result.match(/class="md-card/g) ?? []).length;
|
|
65
|
+
expect(cardCount).toBe(2);
|
|
66
|
+
});
|
|
67
|
+
it('should not match non-card syntax', () => {
|
|
68
|
+
const md = 'Normal paragraph text.';
|
|
69
|
+
const result = parse(md);
|
|
70
|
+
expect(result).not.toContain('md-card');
|
|
71
|
+
});
|
|
72
|
+
});
|
|
73
|
+
//# sourceMappingURL=CardProcessor.Test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CardProcessor.Test.js","sourceRoot":"","sources":["../../../src/Processing/Processors/CardProcessor.Test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { TokenizerAndRendererExtension, Tokens } from 'marked';
|
|
2
|
+
import { BaseProcessor } from './Abstracts/BaseProcessor.js';
|
|
3
|
+
type CardVariant = 'primary' | 'secondary' | 'tertiary' | 'info' | 'warning' | 'danger' | 'error' | 'success' | 'highlight' | 'neutral';
|
|
4
|
+
export interface ICardToken extends Tokens.Generic {
|
|
5
|
+
type: 'md_card';
|
|
6
|
+
raw: string;
|
|
7
|
+
header: string;
|
|
8
|
+
subHeader: string;
|
|
9
|
+
variant: CardVariant;
|
|
10
|
+
tokens: Array<Tokens.Generic>;
|
|
11
|
+
content: string;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* A processor that transforms `:::card` blocks into card layout elements.
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```markdown
|
|
18
|
+
* ::: card Joy Theme | Warm and playful | primary
|
|
19
|
+
* The Joy theme uses magenta accents with high-contrast surfaces.
|
|
20
|
+
* Perfect for consumer-facing applications.
|
|
21
|
+
* ::: end-card
|
|
22
|
+
*
|
|
23
|
+
* ::: card Memphis Theme | Bold and geometric
|
|
24
|
+
* Pastel-geometric palette for playful interfaces.
|
|
25
|
+
* ::: end-card
|
|
26
|
+
* ```
|
|
27
|
+
*
|
|
28
|
+
* Format: `::: card Header | Sub-Header | variant`
|
|
29
|
+
* - `Header` (required): The card title
|
|
30
|
+
* - `Sub-Header` (optional): A sub-heading
|
|
31
|
+
* - `variant` (optional): One of the known variants, defaults to `neutral`
|
|
32
|
+
*
|
|
33
|
+
* @public
|
|
34
|
+
*/
|
|
35
|
+
export declare class CardProcessor extends BaseProcessor {
|
|
36
|
+
get extension(): TokenizerAndRendererExtension;
|
|
37
|
+
}
|
|
38
|
+
export {};
|
|
39
|
+
//# sourceMappingURL=CardProcessor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CardProcessor.d.ts","sourceRoot":"","sources":["../../../src/Processing/Processors/CardProcessor.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,WAAW,GAAK,SAAS,GAAG,WAAW,GAAG,UAAU,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,CAAC;AAQ1I,MAAM,WAAW,UAAW,SAAQ,MAAM,CAAC,OAAO;IAC9C,IAAI,EAAE,SAAS,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,WAAW,CAAC;IACrB,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC9B,OAAO,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,qBAAa,aAAc,SAAQ,aAAa;IAE5C,IAAoB,SAAS,IAAI,6BAA6B,CAe7D;CAEJ"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
// #region Imports
|
|
2
|
+
import { html } from '../../Templating/Html.js';
|
|
3
|
+
import { BaseProcessor } from './Abstracts/BaseProcessor.js';
|
|
4
|
+
const KNOWN_VARIANTS = new Set([
|
|
5
|
+
'primary', 'secondary', 'tertiary',
|
|
6
|
+
'info', 'warning', 'danger', 'error',
|
|
7
|
+
'success', 'highlight', 'neutral'
|
|
8
|
+
]);
|
|
9
|
+
/**
|
|
10
|
+
* A processor that transforms `:::card` blocks into card layout elements.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```markdown
|
|
14
|
+
* ::: card Joy Theme | Warm and playful | primary
|
|
15
|
+
* The Joy theme uses magenta accents with high-contrast surfaces.
|
|
16
|
+
* Perfect for consumer-facing applications.
|
|
17
|
+
* ::: end-card
|
|
18
|
+
*
|
|
19
|
+
* ::: card Memphis Theme | Bold and geometric
|
|
20
|
+
* Pastel-geometric palette for playful interfaces.
|
|
21
|
+
* ::: end-card
|
|
22
|
+
* ```
|
|
23
|
+
*
|
|
24
|
+
* Format: `::: card Header | Sub-Header | variant`
|
|
25
|
+
* - `Header` (required): The card title
|
|
26
|
+
* - `Sub-Header` (optional): A sub-heading
|
|
27
|
+
* - `variant` (optional): One of the known variants, defaults to `neutral`
|
|
28
|
+
*
|
|
29
|
+
* @public
|
|
30
|
+
*/
|
|
31
|
+
export class CardProcessor extends BaseProcessor {
|
|
32
|
+
get extension() {
|
|
33
|
+
return {
|
|
34
|
+
name: 'md_card',
|
|
35
|
+
level: 'block',
|
|
36
|
+
start(src) {
|
|
37
|
+
return (/^::: card /).exec(src)?.index;
|
|
38
|
+
},
|
|
39
|
+
tokenizer(src) {
|
|
40
|
+
return CardTokenizer.tokenize(this.lexer, src);
|
|
41
|
+
},
|
|
42
|
+
renderer(token) {
|
|
43
|
+
return CardRenderer.render(this.parser, token);
|
|
44
|
+
},
|
|
45
|
+
childTokens: ['tokens']
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* @private
|
|
51
|
+
*/
|
|
52
|
+
class CardTokenizer {
|
|
53
|
+
static tokenize(lexer, src) {
|
|
54
|
+
const match = (/^::: card (.+?)\n([\s\S]+?)\n::: end-card/).exec(src);
|
|
55
|
+
if (!match) {
|
|
56
|
+
return undefined;
|
|
57
|
+
}
|
|
58
|
+
const headerLine = match[1].trim();
|
|
59
|
+
const parts = headerLine.split('|').map((s) => s.trim());
|
|
60
|
+
const header = parts[0] ?? 'Card';
|
|
61
|
+
const subHeader = parts[1] ?? '';
|
|
62
|
+
const rawVariant = (parts[2] ?? 'neutral').toLowerCase();
|
|
63
|
+
const variant = KNOWN_VARIANTS.has(rawVariant) ? rawVariant : 'neutral';
|
|
64
|
+
const content = match[2].trim();
|
|
65
|
+
const tokens = lexer.blockTokens(content);
|
|
66
|
+
return {
|
|
67
|
+
type: 'md_card',
|
|
68
|
+
raw: match[0],
|
|
69
|
+
header,
|
|
70
|
+
subHeader,
|
|
71
|
+
variant,
|
|
72
|
+
tokens,
|
|
73
|
+
content
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* @private
|
|
79
|
+
*/
|
|
80
|
+
class CardRenderer {
|
|
81
|
+
static render(parser, token) {
|
|
82
|
+
const subHeaderHtml = token.subHeader
|
|
83
|
+
? `<p class="card-sub-header">${token.subHeader}</p>`
|
|
84
|
+
: '';
|
|
85
|
+
return html `
|
|
86
|
+
<div class="md-card ${token.variant}">
|
|
87
|
+
<div class="card-header">
|
|
88
|
+
<h6>${token.header}</h6>
|
|
89
|
+
${subHeaderHtml}
|
|
90
|
+
</div>
|
|
91
|
+
<div class="card-content">${parser.parse(token.tokens ?? [])}</div>
|
|
92
|
+
</div>
|
|
93
|
+
`.trim();
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=CardProcessor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CardProcessor.js","sourceRoot":"","sources":["../../../src/Processing/Processors/CardProcessor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CodeBlockProcessor.Test.d.ts","sourceRoot":"","sources":["../../../src/Processing/Processors/CodeBlockProcessor.Test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,114 @@
|
|
|
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
|
+
import { TabProcessor } from './TabProcessor';
|
|
7
|
+
describe('CodeBlockProcessor', () => {
|
|
8
|
+
it('should render a basic code block', () => {
|
|
9
|
+
const markdown = '```ts\nconst x = 1;\n```';
|
|
10
|
+
const html = new MarkdownProcessor([new CodeBlockProcessor()]).process(markdown);
|
|
11
|
+
expect(html).toContain('<pre><code class="language-ts">');
|
|
12
|
+
expect(html).toContain('const x = 1;');
|
|
13
|
+
});
|
|
14
|
+
it('should render a code block with filename metadata', () => {
|
|
15
|
+
const markdown = '```ts name="example.ts"\nconst x = 1;\n```';
|
|
16
|
+
const html = new MarkdownProcessor([new CodeBlockProcessor()]).process(markdown);
|
|
17
|
+
expect(html).toContain('<div class="code-filename">example.ts</div>');
|
|
18
|
+
expect(html).toContain('class="language-ts"');
|
|
19
|
+
});
|
|
20
|
+
it('should render a code block with highlight lines', () => {
|
|
21
|
+
const markdown = '```ts {1,3-4}\nconst a = 1;\nconst b = 2;\nconst c = 3;\nconst d = 4;\n```';
|
|
22
|
+
const html = new MarkdownProcessor([new CodeBlockProcessor()]).process(markdown);
|
|
23
|
+
expect(html).toContain('data-lines="1,3-4"');
|
|
24
|
+
});
|
|
25
|
+
it('should render a code block with filename and highlights', () => {
|
|
26
|
+
const markdown = '```ts name="app.ts" {2}\nconst a = 1;\nconst b = 2;\n```';
|
|
27
|
+
const html = new MarkdownProcessor([new CodeBlockProcessor()]).process(markdown);
|
|
28
|
+
expect(html).toContain('<div class="code-filename">app.ts</div>');
|
|
29
|
+
expect(html).toContain('data-lines="2"');
|
|
30
|
+
expect(html).toContain('class="language-ts"');
|
|
31
|
+
});
|
|
32
|
+
it('should use plaintext when no language is specified', () => {
|
|
33
|
+
const markdown = '```\nsome text\n```';
|
|
34
|
+
const html = new MarkdownProcessor([new CodeBlockProcessor()]).process(markdown);
|
|
35
|
+
expect(html).toContain('class="language-plaintext"');
|
|
36
|
+
});
|
|
37
|
+
it('should escape HTML in code content to prevent XSS', () => {
|
|
38
|
+
const markdown = '```html\n<script>alert("xss")</script>\n```';
|
|
39
|
+
const html = new MarkdownProcessor([new CodeBlockProcessor()]).process(markdown);
|
|
40
|
+
expect(html).not.toContain('<script>');
|
|
41
|
+
expect(html).toContain('<script>');
|
|
42
|
+
});
|
|
43
|
+
it('should escape HTML in filename metadata', () => {
|
|
44
|
+
const markdown = '```ts name="<img onerror=alert(1)>"\nconst x = 1;\n```';
|
|
45
|
+
const html = new MarkdownProcessor([new CodeBlockProcessor()]).process(markdown);
|
|
46
|
+
expect(html).not.toContain('<img');
|
|
47
|
+
expect(html).toContain('<img');
|
|
48
|
+
});
|
|
49
|
+
it('should escape ampersands in code content', () => {
|
|
50
|
+
const markdown = '```\na && b\n```';
|
|
51
|
+
const html = new MarkdownProcessor([new CodeBlockProcessor()]).process(markdown);
|
|
52
|
+
expect(html).toContain('a && b');
|
|
53
|
+
});
|
|
54
|
+
describe('Nesting', () => {
|
|
55
|
+
it('should render a code block inside a tab', () => {
|
|
56
|
+
const markdown = [
|
|
57
|
+
'::: tabs',
|
|
58
|
+
'::: tab TypeScript',
|
|
59
|
+
'```ts',
|
|
60
|
+
'const x = 42;',
|
|
61
|
+
'```',
|
|
62
|
+
'::: end-tab',
|
|
63
|
+
'::: end-tabs'
|
|
64
|
+
].join('\n');
|
|
65
|
+
const html = new MarkdownProcessor([
|
|
66
|
+
new TabProcessor(),
|
|
67
|
+
new CodeBlockProcessor()
|
|
68
|
+
]).process(markdown);
|
|
69
|
+
expect(html).toContain('class="tabs"');
|
|
70
|
+
expect(html).toContain('class="language-ts"');
|
|
71
|
+
expect(html).toContain('const x = 42;');
|
|
72
|
+
});
|
|
73
|
+
it('should render code blocks in different splits', () => {
|
|
74
|
+
const markdown = [
|
|
75
|
+
'::: splits',
|
|
76
|
+
'::: split Before',
|
|
77
|
+
'```ts',
|
|
78
|
+
'const old = true;',
|
|
79
|
+
'```',
|
|
80
|
+
'::: end-split',
|
|
81
|
+
'',
|
|
82
|
+
'::: split After',
|
|
83
|
+
'```ts',
|
|
84
|
+
'const updated = true;',
|
|
85
|
+
'```',
|
|
86
|
+
'::: end-split',
|
|
87
|
+
'::: end-splits'
|
|
88
|
+
].join('\n');
|
|
89
|
+
const html = new MarkdownProcessor([
|
|
90
|
+
new SplitProcessor(),
|
|
91
|
+
new CodeBlockProcessor()
|
|
92
|
+
]).process(markdown);
|
|
93
|
+
expect(html).toContain('class="splits"');
|
|
94
|
+
expect(html).toContain('const old = true;');
|
|
95
|
+
expect(html).toContain('const updated = true;');
|
|
96
|
+
});
|
|
97
|
+
it('should render a code block inside a callout', () => {
|
|
98
|
+
const markdown = [
|
|
99
|
+
'::: info Example',
|
|
100
|
+
'```ts',
|
|
101
|
+
'const x = 1;',
|
|
102
|
+
'```',
|
|
103
|
+
':::'
|
|
104
|
+
].join('\n');
|
|
105
|
+
const html = new MarkdownProcessor([
|
|
106
|
+
new CalloutProcessor(),
|
|
107
|
+
new CodeBlockProcessor()
|
|
108
|
+
]).process(markdown);
|
|
109
|
+
expect(html).toContain('class="callout info"');
|
|
110
|
+
expect(html).toContain('const x = 1;');
|
|
111
|
+
});
|
|
112
|
+
});
|
|
113
|
+
});
|
|
114
|
+
//# sourceMappingURL=CodeBlockProcessor.Test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CodeBlockProcessor.Test.js","sourceRoot":"","sources":["../../../src/Processing/Processors/CodeBlockProcessor.Test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,16 @@
|
|
|
1
|
-
import { BaseProcessor } from './Abstracts/BaseProcessor.js';
|
|
2
1
|
import type { TokenizerAndRendererExtension, Tokens } from 'marked';
|
|
2
|
+
import { BaseProcessor } from './Abstracts/BaseProcessor.js';
|
|
3
|
+
export interface ICodeBlockToken extends Tokens.Generic {
|
|
4
|
+
type: 'code';
|
|
5
|
+
raw: string;
|
|
6
|
+
text: string;
|
|
7
|
+
lang?: string;
|
|
8
|
+
meta?: {
|
|
9
|
+
lang: string;
|
|
10
|
+
fileName?: string;
|
|
11
|
+
highlights?: string;
|
|
12
|
+
};
|
|
13
|
+
}
|
|
3
14
|
/**
|
|
4
15
|
* A processor that transforms fenced code blocks with extended metadata
|
|
5
16
|
* (language, filename, highlighted lines).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CodeBlockProcessor.d.ts","sourceRoot":"","sources":["../../../src/Processing/Processors/CodeBlockProcessor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"CodeBlockProcessor.d.ts","sourceRoot":"","sources":["../../../src/Processing/Processors/CodeBlockProcessor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAgB,6BAA6B,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAClF,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAgB7D,MAAM,WAAW,eAAgB,SAAQ,MAAM,CAAC,OAAO;IACnD,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE;QACH,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,UAAU,CAAC,EAAE,MAAM,CAAC;KACvB,CAAC;CACL;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,kBAAmB,SAAQ,aAAa;IAEjD,IAAoB,SAAS,IAAI,6BAA6B,CAQ7D;IAEe,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI;CAK1D"}
|
|
@@ -1,4 +1,17 @@
|
|
|
1
1
|
import { BaseProcessor } from './Abstracts/BaseProcessor.js';
|
|
2
|
+
/**
|
|
3
|
+
* Escapes HTML special characters to prevent XSS.
|
|
4
|
+
*
|
|
5
|
+
* @param text - The raw text to escape.
|
|
6
|
+
* @returns The escaped HTML string.
|
|
7
|
+
*/
|
|
8
|
+
function escapeHtml(text) {
|
|
9
|
+
return text
|
|
10
|
+
.replace(/&/g, '&')
|
|
11
|
+
.replace(/</g, '<')
|
|
12
|
+
.replace(/>/g, '>')
|
|
13
|
+
.replace(/"/g, '"');
|
|
14
|
+
}
|
|
2
15
|
/**
|
|
3
16
|
* A processor that transforms fenced code blocks with extended metadata
|
|
4
17
|
* (language, filename, highlighted lines).
|
|
@@ -50,16 +63,16 @@ class CodeBlockTokenizer {
|
|
|
50
63
|
}
|
|
51
64
|
class CodeBlockRenderer {
|
|
52
65
|
static render(token) {
|
|
53
|
-
const lang = token.meta?.lang ?? 'plaintext';
|
|
66
|
+
const lang = escapeHtml(token.meta?.lang ?? 'plaintext');
|
|
54
67
|
const file = token.meta?.fileName;
|
|
55
68
|
const lines = token.meta?.highlights;
|
|
56
69
|
const filenameBlock = file
|
|
57
|
-
? `<div class="code-filename">${file}</div>\n`
|
|
70
|
+
? `<div class="code-filename">${escapeHtml(file)}</div>\n`
|
|
58
71
|
: '';
|
|
59
72
|
const highlightAttr = lines
|
|
60
|
-
? ` data-lines="${lines}"`
|
|
73
|
+
? ` data-lines="${escapeHtml(lines)}"`
|
|
61
74
|
: '';
|
|
62
|
-
return `${filenameBlock}<pre><code class="language-${lang}"${highlightAttr}>${token.text}</code></pre>`;
|
|
75
|
+
return `${filenameBlock}<pre><code class="language-${lang}"${highlightAttr}>${escapeHtml(token.text)}</code></pre>`;
|
|
63
76
|
}
|
|
64
77
|
}
|
|
65
78
|
//# sourceMappingURL=CodeBlockProcessor.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CodeBlockProcessor.js","sourceRoot":"","sources":["../../../src/Processing/Processors/CodeBlockProcessor.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"CodeBlockProcessor.js","sourceRoot":"","sources":["../../../src/Processing/Processors/CodeBlockProcessor.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAE7D;;;;;GAKG;AACH,SAAS,UAAU,CAAC,IAAY;IAC5B,OAAO,IAAI;SACN,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AACjC,CAAC;AAcD;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,OAAO,kBAAmB,SAAQ,aAAa;IAEjD,IAAoB,SAAS;QACzB,OAAO;YACH,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,OAAO;YACd,QAAQ,CAAqB,KAAqB;gBAC9C,OAAO,iBAAiB,CAAC,MAAM,CAAC,KAAwB,CAAC,CAAC;YAC9D,CAAC;SACJ,CAAC;IACN,CAAC;IAEe,UAAU,CAAC,KAAqB;QAC5C,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAAC,OAAO;QAAC,CAAC;QACtC,kBAAkB,CAAC,MAAM,CAAC,KAAwB,CAAC,CAAC;IACxD,CAAC;CAEJ;AAED,MAAM,kBAAkB;IAEb,MAAM,CAAC,MAAM,CAAC,KAAsB;QACvC,MAAM,KAAK,GAAG,CAAC,kDAAkD,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;QAC1F,IAAI,CAAC,KAAK,EAAE,CAAC;YAAC,OAAO;QAAC,CAAC;QAEvB,MAAM,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,CAAC,GAAG,KAAK,CAAC;QAE7C,KAAK,CAAC,IAAI,GAAG;YACT,IAAI;YACJ,QAAQ;YACR,UAAU;SACb,CAAC;QAEF,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,uCAAuC;IAC9D,CAAC;CAEJ;AAED,MAAM,iBAAiB;IAEZ,MAAM,CAAC,MAAM,CAAC,KAAsB;QACvC,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,IAAI,WAAW,CAAC,CAAC;QACzD,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC;QAClC,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC;QAErC,MAAM,aAAa,GAAG,IAAI;YACtB,CAAC,CAAC,8BAA8B,UAAU,CAAC,IAAI,CAAC,UAAU;YAC1D,CAAC,CAAC,EAAE,CAAC;QAET,MAAM,aAAa,GAAG,KAAK;YACvB,CAAC,CAAC,gBAAgB,UAAU,CAAC,KAAK,CAAC,GAAG;YACtC,CAAC,CAAC,EAAE,CAAC;QAET,OAAO,GAAG,aAAa,8BAA8B,IAAI,IAAI,aAAa,IAAI,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC;IACxH,CAAC;CAEJ"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DetailsProcessor.Test.d.ts","sourceRoot":"","sources":["../../../src/Processing/Processors/DetailsProcessor.Test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { marked } from 'marked';
|
|
2
|
+
import { describe, expect, it } from 'vitest';
|
|
3
|
+
import { DetailsProcessor } from './DetailsProcessor';
|
|
4
|
+
describe('DetailsProcessor', () => {
|
|
5
|
+
function parse(md) {
|
|
6
|
+
const processor = new DetailsProcessor();
|
|
7
|
+
marked.use({ extensions: [processor.extension] });
|
|
8
|
+
return marked.parse(md).trim();
|
|
9
|
+
}
|
|
10
|
+
it('should parse a details block', () => {
|
|
11
|
+
const md = `::: details What are design tokens?
|
|
12
|
+
Design tokens are the atoms of the design system.
|
|
13
|
+
::: end-details`;
|
|
14
|
+
const result = parse(md);
|
|
15
|
+
expect(result).toContain('<details');
|
|
16
|
+
expect(result).toContain('What are design tokens?');
|
|
17
|
+
expect(result).toContain('Design tokens are the atoms of the design system.');
|
|
18
|
+
});
|
|
19
|
+
it('should render summary and content', () => {
|
|
20
|
+
const md = `::: details FAQ Title
|
|
21
|
+
Answer content here.
|
|
22
|
+
::: end-details`;
|
|
23
|
+
const result = parse(md);
|
|
24
|
+
expect(result).toContain('<summary');
|
|
25
|
+
expect(result).toContain('FAQ Title');
|
|
26
|
+
expect(result).toContain('class="details-content"');
|
|
27
|
+
});
|
|
28
|
+
it('should return undefined for non-matching input', () => {
|
|
29
|
+
const md = 'Normal paragraph text.';
|
|
30
|
+
const result = parse(md);
|
|
31
|
+
expect(result).not.toContain('<details');
|
|
32
|
+
});
|
|
33
|
+
it('should handle markdown content inside details', () => {
|
|
34
|
+
const md = `::: details Click to expand
|
|
35
|
+
**Bold content** with a [link](https://example.com).
|
|
36
|
+
|
|
37
|
+
- Item 1
|
|
38
|
+
- Item 2
|
|
39
|
+
::: end-details`;
|
|
40
|
+
const result = parse(md);
|
|
41
|
+
expect(result).toContain('<strong>Bold content</strong>');
|
|
42
|
+
expect(result).toContain('<li>');
|
|
43
|
+
});
|
|
44
|
+
it('should handle multiple details blocks independently', () => {
|
|
45
|
+
const md = `::: details First question
|
|
46
|
+
First answer.
|
|
47
|
+
::: end-details
|
|
48
|
+
|
|
49
|
+
::: details Second question
|
|
50
|
+
Second answer.
|
|
51
|
+
::: end-details`;
|
|
52
|
+
const result = parse(md);
|
|
53
|
+
const detailsCount = (result.match(/<details/g) ?? []).length;
|
|
54
|
+
expect(detailsCount).toBe(2);
|
|
55
|
+
});
|
|
56
|
+
});
|
|
57
|
+
//# sourceMappingURL=DetailsProcessor.Test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DetailsProcessor.Test.js","sourceRoot":"","sources":["../../../src/Processing/Processors/DetailsProcessor.Test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAE9B,SAAS,KAAK,CAAC,EAAU;QACrB,MAAM,SAAS,GAAG,IAAI,gBAAgB,EAAE,CAAC;QACzC,MAAM,CAAC,GAAG,CAAC,EAAE,UAAU,EAAE,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QAElD,OAAQ,MAAM,CAAC,KAAK,CAAC,EAAE,CAAY,CAAC,IAAI,EAAE,CAAC;IAC/C,CAAC;IAED,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACpC,MAAM,EAAE,GAAG;;gBAEH,CAAC;QAET,MAAM,MAAM,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;QACzB,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QACrC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,yBAAyB,CAAC,CAAC;QACpD,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,mDAAmD,CAAC,CAAC;IAClF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QACzC,MAAM,EAAE,GAAG;;gBAEH,CAAC;QAET,MAAM,MAAM,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;QACzB,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QACrC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;QACtC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,yBAAyB,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACtD,MAAM,EAAE,GAAG,wBAAwB,CAAC;QACpC,MAAM,MAAM,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;QACzB,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACrD,MAAM,EAAE,GAAG;;;;;gBAKH,CAAC;QAET,MAAM,MAAM,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;QACzB,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,+BAA+B,CAAC,CAAC;QAC1D,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;QAC3D,MAAM,EAAE,GAAG;;;;;;gBAMH,CAAC;QAET,MAAM,MAAM,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;QACzB,MAAM,YAAY,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;QAC9D,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;AAEP,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { TokenizerAndRendererExtension, Tokens } from 'marked';
|
|
2
|
+
import { BaseProcessor } from './Abstracts/BaseProcessor.js';
|
|
3
|
+
export interface IDetailsToken extends Tokens.Generic {
|
|
4
|
+
type: 'details';
|
|
5
|
+
raw: string;
|
|
6
|
+
title: string;
|
|
7
|
+
tokens: Array<Tokens.Generic>;
|
|
8
|
+
content: string;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* A processor that transforms `:::details` blocks into collapsible/expandable sections.
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```markdown
|
|
15
|
+
* ::: details What are design tokens?
|
|
16
|
+
* Design tokens are the visual design atoms of the design system - specifically,
|
|
17
|
+
* they are named entities that store visual design attributes such as colors,
|
|
18
|
+
* typography, spacing, and more.
|
|
19
|
+
* ::: end-details
|
|
20
|
+
* ```
|
|
21
|
+
*
|
|
22
|
+
* @public
|
|
23
|
+
*/
|
|
24
|
+
export declare class DetailsProcessor extends BaseProcessor {
|
|
25
|
+
get extension(): TokenizerAndRendererExtension;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=DetailsProcessor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DetailsProcessor.d.ts","sourceRoot":"","sources":["../../../src/Processing/Processors/DetailsProcessor.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,aAAc,SAAQ,MAAM,CAAC,OAAO;IACjD,IAAI,EAAE,SAAS,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC9B,OAAO,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;;;;;GAaG;AACH,qBAAa,gBAAiB,SAAQ,aAAa;IAE/C,IAAoB,SAAS,IAAI,6BAA6B,CAe7D;CAEJ"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
// #region Imports
|
|
2
|
+
import { html } from '../../Templating/Html.js';
|
|
3
|
+
import { BaseProcessor } from './Abstracts/BaseProcessor.js';
|
|
4
|
+
/**
|
|
5
|
+
* A processor that transforms `:::details` blocks into collapsible/expandable sections.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```markdown
|
|
9
|
+
* ::: details What are design tokens?
|
|
10
|
+
* Design tokens are the visual design atoms of the design system - specifically,
|
|
11
|
+
* they are named entities that store visual design attributes such as colors,
|
|
12
|
+
* typography, spacing, and more.
|
|
13
|
+
* ::: end-details
|
|
14
|
+
* ```
|
|
15
|
+
*
|
|
16
|
+
* @public
|
|
17
|
+
*/
|
|
18
|
+
export class DetailsProcessor extends BaseProcessor {
|
|
19
|
+
get extension() {
|
|
20
|
+
return {
|
|
21
|
+
name: 'details',
|
|
22
|
+
level: 'block',
|
|
23
|
+
start(src) {
|
|
24
|
+
return (/^::: details/).exec(src)?.index;
|
|
25
|
+
},
|
|
26
|
+
tokenizer(src) {
|
|
27
|
+
return DetailsTokenizer.tokenize(this.lexer, src);
|
|
28
|
+
},
|
|
29
|
+
renderer(token) {
|
|
30
|
+
return DetailsRenderer.render(this.parser, token);
|
|
31
|
+
},
|
|
32
|
+
childTokens: ['tokens']
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* @private
|
|
38
|
+
*/
|
|
39
|
+
class DetailsTokenizer {
|
|
40
|
+
static tokenize(lexer, src) {
|
|
41
|
+
const match = (/^::: details (.+?)\n([\s\S]+?)\n::: end-details/).exec(src);
|
|
42
|
+
if (!match) {
|
|
43
|
+
return undefined;
|
|
44
|
+
}
|
|
45
|
+
const content = match[2].trim();
|
|
46
|
+
const tokens = lexer.blockTokens(content);
|
|
47
|
+
return {
|
|
48
|
+
type: 'details',
|
|
49
|
+
raw: match[0],
|
|
50
|
+
title: match[1].trim(),
|
|
51
|
+
tokens,
|
|
52
|
+
content
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* @private
|
|
58
|
+
*/
|
|
59
|
+
class DetailsRenderer {
|
|
60
|
+
static render(parser, token) {
|
|
61
|
+
return html `
|
|
62
|
+
<details class="details">
|
|
63
|
+
<summary class="details-summary">${token.title}</summary>
|
|
64
|
+
<div class="details-content">${parser.parse(token.tokens ?? [])}</div>
|
|
65
|
+
</details>
|
|
66
|
+
`.trim();
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=DetailsProcessor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DetailsProcessor.js","sourceRoot":"","sources":["../../../src/Processing/Processors/DetailsProcessor.ts"],"names":[],"mappings":"AAAA,kBAAkB;AAGlB,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAY7D;;;;;;;;;;;;;GAaG;AACH,MAAM,OAAO,gBAAiB,SAAQ,aAAa;IAE/C,IAAoB,SAAS;QACzB,OAAO;YACH,IAAI,EAAE,SAAS;YACf,KAAK,EAAE,OAAO;YACd,KAAK,CAAC,GAAW;gBACb,OAAO,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC;YAC7C,CAAC;YACD,SAAS,CAAsB,GAAW;gBACtC,OAAO,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YACtD,CAAC;YACD,QAAQ,CAAqB,KAAqB;gBAC9C,OAAO,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,KAAsB,CAAC,CAAC;YACvE,CAAC;YACD,WAAW,EAAE,CAAC,QAAQ,CAAC;SAC1B,CAAC;IACN,CAAC;CAEJ;AAED;;GAEG;AACH,MAAM,gBAAgB;IAEX,MAAM,CAAC,QAAQ,CAAC,KAAY,EAAE,GAAW;QAC5C,MAAM,KAAK,GAAG,CAAC,iDAAiD,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC5E,IAAI,CAAC,KAAK,EAAE,CAAC;YACT,OAAO,SAAS,CAAC;QACrB,CAAC;QAED,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAChC,MAAM,MAAM,GAAG,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAE1C,OAAO;YACH,IAAI,EAAE,SAAS;YACf,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;YACb,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;YACtB,MAAM;YACN,OAAO;SACV,CAAC;IACN,CAAC;CAEJ;AAED;;GAEG;AACH,MAAM,eAAe;IAEV,MAAM,CAAC,MAAM,CAAC,MAAc,EAAE,KAAoB;QACrD,OAAO,IAAI,CAAA;;mDAEgC,KAAK,CAAC,KAAK;+CACf,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC;;SAEtE,CAAC,IAAI,EAAE,CAAC;IACb,CAAC;CAEJ"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SplitProcessor.Test.d.ts","sourceRoot":"","sources":["../../../src/Processing/Processors/SplitProcessor.Test.ts"],"names":[],"mappings":""}
|