@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.
Files changed (77) hide show
  1. package/Index.d.ts +16 -6
  2. package/Index.d.ts.map +1 -1
  3. package/Index.js +6 -2
  4. package/Index.js.map +1 -1
  5. package/Processing/Processors/BlockquoteProcessor.Test.js +87 -2
  6. package/Processing/Processors/BlockquoteProcessor.Test.js.map +1 -1
  7. package/Processing/Processors/BlockquoteProcessor.d.ts +11 -2
  8. package/Processing/Processors/BlockquoteProcessor.d.ts.map +1 -1
  9. package/Processing/Processors/BlockquoteProcessor.js +7 -7
  10. package/Processing/Processors/BlockquoteProcessor.js.map +1 -1
  11. package/Processing/Processors/ButtonProcessor.Test.d.ts +2 -0
  12. package/Processing/Processors/ButtonProcessor.Test.d.ts.map +1 -0
  13. package/Processing/Processors/ButtonProcessor.Test.js +59 -0
  14. package/Processing/Processors/ButtonProcessor.Test.js.map +1 -0
  15. package/Processing/Processors/ButtonProcessor.d.ts +37 -0
  16. package/Processing/Processors/ButtonProcessor.d.ts.map +1 -0
  17. package/Processing/Processors/ButtonProcessor.js +80 -0
  18. package/Processing/Processors/ButtonProcessor.js.map +1 -0
  19. package/Processing/Processors/CalloutProcessor.Test.d.ts +2 -0
  20. package/Processing/Processors/CalloutProcessor.Test.d.ts.map +1 -0
  21. package/Processing/Processors/CalloutProcessor.Test.js +90 -0
  22. package/Processing/Processors/CalloutProcessor.Test.js.map +1 -0
  23. package/Processing/Processors/CalloutProcessor.d.ts +1 -1
  24. package/Processing/Processors/CalloutProcessor.d.ts.map +1 -1
  25. package/Processing/Processors/CalloutProcessor.js +5 -5
  26. package/Processing/Processors/CalloutProcessor.js.map +1 -1
  27. package/Processing/Processors/CardProcessor.Test.d.ts +2 -0
  28. package/Processing/Processors/CardProcessor.Test.d.ts.map +1 -0
  29. package/Processing/Processors/CardProcessor.Test.js +73 -0
  30. package/Processing/Processors/CardProcessor.Test.js.map +1 -0
  31. package/Processing/Processors/CardProcessor.d.ts +39 -0
  32. package/Processing/Processors/CardProcessor.d.ts.map +1 -0
  33. package/Processing/Processors/CardProcessor.js +96 -0
  34. package/Processing/Processors/CardProcessor.js.map +1 -0
  35. package/Processing/Processors/CodeBlockProcessor.Test.d.ts +2 -0
  36. package/Processing/Processors/CodeBlockProcessor.Test.d.ts.map +1 -0
  37. package/Processing/Processors/CodeBlockProcessor.Test.js +114 -0
  38. package/Processing/Processors/CodeBlockProcessor.Test.js.map +1 -0
  39. package/Processing/Processors/CodeBlockProcessor.d.ts +12 -1
  40. package/Processing/Processors/CodeBlockProcessor.d.ts.map +1 -1
  41. package/Processing/Processors/CodeBlockProcessor.js +17 -4
  42. package/Processing/Processors/CodeBlockProcessor.js.map +1 -1
  43. package/Processing/Processors/DetailsProcessor.Test.d.ts +2 -0
  44. package/Processing/Processors/DetailsProcessor.Test.d.ts.map +1 -0
  45. package/Processing/Processors/DetailsProcessor.Test.js +57 -0
  46. package/Processing/Processors/DetailsProcessor.Test.js.map +1 -0
  47. package/Processing/Processors/DetailsProcessor.d.ts +27 -0
  48. package/Processing/Processors/DetailsProcessor.d.ts.map +1 -0
  49. package/Processing/Processors/DetailsProcessor.js +69 -0
  50. package/Processing/Processors/DetailsProcessor.js.map +1 -0
  51. package/Processing/Processors/SplitProcessor.Test.d.ts +2 -0
  52. package/Processing/Processors/SplitProcessor.Test.d.ts.map +1 -0
  53. package/Processing/Processors/SplitProcessor.Test.js +82 -0
  54. package/Processing/Processors/SplitProcessor.Test.js.map +1 -0
  55. package/Processing/Processors/SplitProcessor.d.ts +1 -1
  56. package/Processing/Processors/SplitProcessor.d.ts.map +1 -1
  57. package/Processing/Processors/SplitProcessor.js +8 -6
  58. package/Processing/Processors/SplitProcessor.js.map +1 -1
  59. package/Processing/Processors/StepsProcessor.Test.d.ts +2 -0
  60. package/Processing/Processors/StepsProcessor.Test.d.ts.map +1 -0
  61. package/Processing/Processors/StepsProcessor.Test.js +77 -0
  62. package/Processing/Processors/StepsProcessor.Test.js.map +1 -0
  63. package/Processing/Processors/StepsProcessor.d.ts +43 -0
  64. package/Processing/Processors/StepsProcessor.d.ts.map +1 -0
  65. package/Processing/Processors/StepsProcessor.js +102 -0
  66. package/Processing/Processors/StepsProcessor.js.map +1 -0
  67. package/Processing/Processors/TabProcessor.Test.d.ts +2 -0
  68. package/Processing/Processors/TabProcessor.Test.d.ts.map +1 -0
  69. package/Processing/Processors/TabProcessor.Test.js +130 -0
  70. package/Processing/Processors/TabProcessor.Test.js.map +1 -0
  71. package/Processing/Processors/TabProcessor.d.ts +1 -1
  72. package/Processing/Processors/TabProcessor.d.ts.map +1 -1
  73. package/Processing/Processors/TabProcessor.js +6 -4
  74. package/Processing/Processors/TabProcessor.js.map +1 -1
  75. package/Templating/Html.js +1 -1
  76. package/Templating/Html.js.map +1 -1
  77. package/package.json +2 -3
@@ -1 +1 @@
1
- {"version":3,"file":"CalloutProcessor.js","sourceRoot":"","sources":["../../../src/Processing/Processors/CalloutProcessor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAK7D,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,kFAAkF,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC;YACjH,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,8CAA8C,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACzE,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,CAAC,IAAI,EAAE,CAAC;QAC9B,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAEhC,MAAM,aAAa,GAAG,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QAElD,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,CAAC,CAAC;QAEjD,OAAO,eAAe,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,KAAK,GAAG,IAAI,QAAQ,CAAC;IACrE,CAAC;CAEJ"}
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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=CardProcessor.Test.d.ts.map
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=CodeBlockProcessor.Test.d.ts.map
@@ -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('&lt;script&gt;');
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('&lt;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 &amp;&amp; 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;AAC7D,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,EAAgB,MAAM,QAAQ,CAAC;AAclF;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,kBAAmB,SAAQ,aAAa;IAEjD,IAAoB,SAAS,IAAI,6BAA6B,CAQ7D;IAEe,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI;CAK1D"}
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, '&amp;')
11
+ .replace(/</g, '&lt;')
12
+ .replace(/>/g, '&gt;')
13
+ .replace(/"/g, '&quot;');
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":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAe7D;;;;;;;;;;;;;;;;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,KAAK,CAAC,IAAI,EAAE,IAAI,IAAI,WAAW,CAAC;QAC7C,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,IAAI,UAAU;YAC9C,CAAC,CAAC,EAAE,CAAC;QAET,MAAM,aAAa,GAAG,KAAK;YACvB,CAAC,CAAC,gBAAgB,KAAK,GAAG;YAC1B,CAAC,CAAC,EAAE,CAAC;QAET,OAAO,GAAG,aAAa,8BAA8B,IAAI,IAAI,aAAa,IAAI,KAAK,CAAC,IAAI,eAAe,CAAC;IAC5G,CAAC;CAEJ"}
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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=DetailsProcessor.Test.d.ts.map
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=SplitProcessor.Test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SplitProcessor.Test.d.ts","sourceRoot":"","sources":["../../../src/Processing/Processors/SplitProcessor.Test.ts"],"names":[],"mappings":""}