@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.
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
@@ -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":"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"}
@@ -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,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,KAAK,EAA+B,6BAA6B,EAAiB,MAAM,EAAE,MAAM,QAAQ,CAAC;AAIhH,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,CAc7D;CAEJ"}
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/m).exec(src);
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: lexer.inline(content),
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.parse(split.title)}</h6>
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;AAElB,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAO7D,MAAM,cAAc,GAAG,IAAI,GAAG,CAAe;IACzC,SAAS,EAAE,WAAW,EAAE,UAAU;IAClC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO;IACpC,SAAS,EAAE,WAAW,EAAE,SAAS;CACpC,CAAC,CAAC;AAgBH;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,OAAO,cAAe,SAAQ,aAAa;IAE7C,IAAoB,SAAS;QACzB,OAAO;YACH,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,OAAO;YACd,KAAK,CAAC,GAAW;gBACb,OAAO,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC;YAC5C,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,KAAqB,CAAC,CAAC;YACpE,CAAC;SACJ,CAAC;IACN,CAAC;CAEJ;AAED;;GAEG;AACH,MAAM,cAAc;IAET,MAAM,CAAC,QAAQ,CAAC,KAAY,EAAE,GAAW;QAC5C,MAAM,KAAK,GAAG,CAAC,0CAA0C,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACrE,IAAI,CAAC,KAAK,EAAE,CAAC;YACT,OAAO,SAAS,CAAC;QACrB,CAAC;QAED,MAAM,UAAU,GAAG,+CAA+C,CAAC;QACnE,MAAM,MAAM,GAAuB,EAAE,CAAC;QACtC,IAAI,UAAU,GAA2B,IAAI,CAAC;QAC9C,IAAI,KAAK,GAAG,CAAC,CAAC;QAEd,OAAO,CAAC,UAAU,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YACvD,MAAM,QAAQ,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAClD,IAAI,OAAO,GAA6B,SAAS,CAAC;YAElD,MAAM,YAAY,GAAG,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;YACxD,IAAI,YAAY,EAAE,CAAC;gBACf,MAAM,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,WAAW,EAAkB,CAAC;gBACxD,IAAI,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;oBACxB,OAAO,GAAG,CAAC,CAAC;oBACZ,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,sBAAsB;gBAC5C,CAAC;YACL,CAAC;YAED,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;YAE3C,MAAM,CAAC,IAAI,CAAC;gBACR,IAAI,EAAE,OAAO;gBACb,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC;gBAClB,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC;gBAC7B,EAAE,EAAE,SAAS,KAAK,EAAE,EAAE;gBACtB,KAAK,EAAE,KAAK,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBAC/C,OAAO,EAAE,OAAO;gBAChB,OAAO,EAAE,OAAO;aACnB,CAAC,CAAC;QACP,CAAC;QAED,OAAO;YACH,IAAI,EAAE,QAAQ;YACd,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;YACb,MAAM,EAAE,MAAM;SACjB,CAAC;IACN,CAAC;CAEJ;AAED;;GAEG;AACH,MAAM,aAAa;IAER,MAAM,CAAC,MAAM,CAAC,MAAc,EAAE,KAAmB;QACpD,OAAO;;cAED,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC;oCACN,KAAK,CAAC,OAAO;0BACvB,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC;;sBAE7B,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC;;;aAGnC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;;SAEd,CAAC,IAAI,EAAE,CAAC;IACb,CAAC;CAEJ"}
1
+ {"version":3,"file":"SplitProcessor.js","sourceRoot":"","sources":["../../../src/Processing/Processors/SplitProcessor.ts"],"names":[],"mappings":"AAAA,kBAAkB;AAGlB,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAM7D,MAAM,cAAc,GAAG,IAAI,GAAG,CAAe;IACzC,SAAS,EAAE,WAAW,EAAE,UAAU;IAClC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO;IACpC,SAAS,EAAE,WAAW,EAAE,SAAS;CACpC,CAAC,CAAC;AAgBH;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,OAAO,cAAe,SAAQ,aAAa;IAE7C,IAAoB,SAAS;QACzB,OAAO;YACH,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,OAAO;YACd,KAAK,CAAC,GAAW;gBACb,OAAO,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC;YAC5C,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,KAAqB,CAAC,CAAC;YACpE,CAAC;YACD,WAAW,EAAE,CAAC,QAAQ,CAAC;SAC1B,CAAC;IACN,CAAC;CAEJ;AAED;;GAEG;AACH,MAAM,cAAc;IAET,MAAM,CAAC,QAAQ,CAAC,KAAY,EAAE,GAAW;QAC5C,MAAM,KAAK,GAAG,CAAC,yCAAyC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACpE,IAAI,CAAC,KAAK,EAAE,CAAC;YACT,OAAO,SAAS,CAAC;QACrB,CAAC;QAED,MAAM,UAAU,GAAG,+CAA+C,CAAC;QACnE,MAAM,MAAM,GAAuB,EAAE,CAAC;QACtC,IAAI,UAAU,GAA2B,IAAI,CAAC;QAC9C,IAAI,KAAK,GAAG,CAAC,CAAC;QAEd,OAAO,CAAC,UAAU,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YACvD,MAAM,QAAQ,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAClD,IAAI,OAAO,GAA6B,SAAS,CAAC;YAElD,MAAM,YAAY,GAAG,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;YACxD,IAAI,YAAY,EAAE,CAAC;gBACf,MAAM,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,WAAW,EAAkB,CAAC;gBACxD,IAAI,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;oBACxB,OAAO,GAAG,CAAC,CAAC;oBACZ,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,sBAAsB;gBAC5C,CAAC;YACL,CAAC;YAED,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;YAE3C,MAAM,MAAM,GAAG,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YAE1C,MAAM,CAAC,IAAI,CAAC;gBACR,IAAI,EAAE,OAAO;gBACb,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC;gBAClB,MAAM;gBACN,EAAE,EAAE,SAAS,KAAK,EAAE,EAAE;gBACtB,KAAK,EAAE,KAAK,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBAC/C,OAAO,EAAE,OAAO;gBAChB,OAAO,EAAE,OAAO;aACnB,CAAC,CAAC;QACP,CAAC;QAED,OAAO;YACH,IAAI,EAAE,QAAQ;YACd,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;YACb,MAAM,EAAE,MAAM;SACjB,CAAC;IACN,CAAC;CAEJ;AAED;;GAEG;AACH,MAAM,aAAa;IAER,MAAM,CAAC,MAAM,CAAC,MAAc,EAAE,KAAmB;QACpD,OAAO;;cAED,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC;mCACP,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE;0BACjD,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC;;sBAEnC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC;;;aAGzC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;;SAEd,CAAC,IAAI,EAAE,CAAC;IACb,CAAC;CAEJ"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=StepsProcessor.Test.d.ts.map
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=TabProcessor.Test.d.ts.map
@@ -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":"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"}
@@ -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":"AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,KAAK,EAAgB,MAAM,EAAE,6BAA6B,EAAgC,MAAM,QAAQ,CAAC;AAIhH,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,CAc7D;CAEJ"}
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/m).exec(src);
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: [], // Inline tokens can be added if needed
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.content}
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":"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"}
1
+ {"version":3,"file":"TabProcessor.js","sourceRoot":"","sources":["../../../src/Processing/Processors/TabProcessor.ts"],"names":[],"mappings":"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"}