@breadstone-tools/markdowner-core 0.0.231 → 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
package/Index.d.ts CHANGED
@@ -1,12 +1,22 @@
1
1
  export { MarkdownProcessor } from './Processing/MarkdownProcessor.js';
2
- export type { IProcessor } from './Processing/Processors/Interfaces/IProcessor.js';
3
2
  export { BaseProcessor } from './Processing/Processors/Abstracts/BaseProcessor.js';
3
+ export type { IProcessor } from './Processing/Processors/Interfaces/IProcessor.js';
4
4
  export { BlockquoteProcessor } from './Processing/Processors/BlockquoteProcessor.js';
5
- export { CodeBlockProcessor } from './Processing/Processors/CodeBlockProcessor.js';
6
- export type { ITabToken, ITabsToken } from './Processing/Processors/TabProcessor.js';
7
- export { TabProcessor } from './Processing/Processors/TabProcessor.js';
8
- export type { ICalloutToken } from './Processing/Processors/CalloutProcessor.js';
5
+ export type { IBlockquoteToken } from './Processing/Processors/BlockquoteProcessor.js';
6
+ export { ButtonProcessor } from './Processing/Processors/ButtonProcessor.js';
7
+ export type { IButtonToken } from './Processing/Processors/ButtonProcessor.js';
9
8
  export { CalloutProcessor } from './Processing/Processors/CalloutProcessor.js';
10
- export type { ISplitToken, ISplitsToken } from './Processing/Processors/SplitProcessor.js';
9
+ export type { ICalloutToken } from './Processing/Processors/CalloutProcessor.js';
10
+ export { CardProcessor } from './Processing/Processors/CardProcessor.js';
11
+ export type { ICardToken } from './Processing/Processors/CardProcessor.js';
12
+ export { CodeBlockProcessor } from './Processing/Processors/CodeBlockProcessor.js';
13
+ export type { ICodeBlockToken } from './Processing/Processors/CodeBlockProcessor.js';
14
+ export { DetailsProcessor } from './Processing/Processors/DetailsProcessor.js';
15
+ export type { IDetailsToken } from './Processing/Processors/DetailsProcessor.js';
11
16
  export { SplitProcessor } from './Processing/Processors/SplitProcessor.js';
17
+ export type { ISplitsToken, ISplitToken } from './Processing/Processors/SplitProcessor.js';
18
+ export { StepsProcessor } from './Processing/Processors/StepsProcessor.js';
19
+ export type { IStepsToken, IStepToken } from './Processing/Processors/StepsProcessor.js';
20
+ export { TabProcessor } from './Processing/Processors/TabProcessor.js';
21
+ export type { ITabsToken, ITabToken } from './Processing/Processors/TabProcessor.js';
12
22
  //# sourceMappingURL=Index.d.ts.map
package/Index.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"Index.d.ts","sourceRoot":"","sources":["../src/Index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,YAAY,EAAE,UAAU,EAAE,MAAM,kDAAkD,CAAC;AACnF,OAAO,EAAE,aAAa,EAAE,MAAM,oDAAoD,CAAC;AAGnF,OAAO,EAAE,mBAAmB,EAAE,MAAM,gDAAgD,CAAC;AACrF,OAAO,EAAE,kBAAkB,EAAE,MAAM,+CAA+C,CAAC;AACnF,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,yCAAyC,CAAC;AACrF,OAAO,EAAE,YAAY,EAAE,MAAM,yCAAyC,CAAC;AACvE,YAAY,EAAE,aAAa,EAAE,MAAM,6CAA6C,CAAC;AACjF,OAAO,EAAE,gBAAgB,EAAE,MAAM,6CAA6C,CAAC;AAC/E,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,2CAA2C,CAAC;AAC3F,OAAO,EAAE,cAAc,EAAE,MAAM,2CAA2C,CAAC"}
1
+ {"version":3,"file":"Index.d.ts","sourceRoot":"","sources":["../src/Index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,oDAAoD,CAAC;AACnF,YAAY,EAAE,UAAU,EAAE,MAAM,kDAAkD,CAAC;AAGnF,OAAO,EAAE,mBAAmB,EAAE,MAAM,gDAAgD,CAAC;AACrF,YAAY,EAAE,gBAAgB,EAAE,MAAM,gDAAgD,CAAC;AACvF,OAAO,EAAE,eAAe,EAAE,MAAM,4CAA4C,CAAC;AAC7E,YAAY,EAAE,YAAY,EAAE,MAAM,4CAA4C,CAAC;AAC/E,OAAO,EAAE,gBAAgB,EAAE,MAAM,6CAA6C,CAAC;AAC/E,YAAY,EAAE,aAAa,EAAE,MAAM,6CAA6C,CAAC;AACjF,OAAO,EAAE,aAAa,EAAE,MAAM,0CAA0C,CAAC;AACzE,YAAY,EAAE,UAAU,EAAE,MAAM,0CAA0C,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,+CAA+C,CAAC;AACnF,YAAY,EAAE,eAAe,EAAE,MAAM,+CAA+C,CAAC;AACrF,OAAO,EAAE,gBAAgB,EAAE,MAAM,6CAA6C,CAAC;AAC/E,YAAY,EAAE,aAAa,EAAE,MAAM,6CAA6C,CAAC;AACjF,OAAO,EAAE,cAAc,EAAE,MAAM,2CAA2C,CAAC;AAC3E,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,2CAA2C,CAAC;AAC3F,OAAO,EAAE,cAAc,EAAE,MAAM,2CAA2C,CAAC;AAC3E,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,2CAA2C,CAAC;AACzF,OAAO,EAAE,YAAY,EAAE,MAAM,yCAAyC,CAAC;AACvE,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC"}
package/Index.js CHANGED
@@ -2,8 +2,12 @@ export { MarkdownProcessor } from './Processing/MarkdownProcessor.js';
2
2
  export { BaseProcessor } from './Processing/Processors/Abstracts/BaseProcessor.js';
3
3
  // Processors
4
4
  export { BlockquoteProcessor } from './Processing/Processors/BlockquoteProcessor.js';
5
- export { CodeBlockProcessor } from './Processing/Processors/CodeBlockProcessor.js';
6
- export { TabProcessor } from './Processing/Processors/TabProcessor.js';
5
+ export { ButtonProcessor } from './Processing/Processors/ButtonProcessor.js';
7
6
  export { CalloutProcessor } from './Processing/Processors/CalloutProcessor.js';
7
+ export { CardProcessor } from './Processing/Processors/CardProcessor.js';
8
+ export { CodeBlockProcessor } from './Processing/Processors/CodeBlockProcessor.js';
9
+ export { DetailsProcessor } from './Processing/Processors/DetailsProcessor.js';
8
10
  export { SplitProcessor } from './Processing/Processors/SplitProcessor.js';
11
+ export { StepsProcessor } from './Processing/Processors/StepsProcessor.js';
12
+ export { TabProcessor } from './Processing/Processors/TabProcessor.js';
9
13
  //# sourceMappingURL=Index.js.map
package/Index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"Index.js","sourceRoot":"","sources":["../src/Index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAEtE,OAAO,EAAE,aAAa,EAAE,MAAM,oDAAoD,CAAC;AAEnF,aAAa;AACb,OAAO,EAAE,mBAAmB,EAAE,MAAM,gDAAgD,CAAC;AACrF,OAAO,EAAE,kBAAkB,EAAE,MAAM,+CAA+C,CAAC;AAEnF,OAAO,EAAE,YAAY,EAAE,MAAM,yCAAyC,CAAC;AAEvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,6CAA6C,CAAC;AAE/E,OAAO,EAAE,cAAc,EAAE,MAAM,2CAA2C,CAAC"}
1
+ {"version":3,"file":"Index.js","sourceRoot":"","sources":["../src/Index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,oDAAoD,CAAC;AAGnF,aAAa;AACb,OAAO,EAAE,mBAAmB,EAAE,MAAM,gDAAgD,CAAC;AAErF,OAAO,EAAE,eAAe,EAAE,MAAM,4CAA4C,CAAC;AAE7E,OAAO,EAAE,gBAAgB,EAAE,MAAM,6CAA6C,CAAC;AAE/E,OAAO,EAAE,aAAa,EAAE,MAAM,0CAA0C,CAAC;AAEzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,+CAA+C,CAAC;AAEnF,OAAO,EAAE,gBAAgB,EAAE,MAAM,6CAA6C,CAAC;AAE/E,OAAO,EAAE,cAAc,EAAE,MAAM,2CAA2C,CAAC;AAE3E,OAAO,EAAE,cAAc,EAAE,MAAM,2CAA2C,CAAC;AAE3E,OAAO,EAAE,YAAY,EAAE,MAAM,yCAAyC,CAAC"}
@@ -1,6 +1,8 @@
1
- import { describe, it, expect } from 'vitest';
2
- import { BlockquoteProcessor } from './BlockquoteProcessor';
1
+ import { describe, expect, it } from 'vitest';
3
2
  import { MarkdownProcessor } from '../MarkdownProcessor';
3
+ import { BlockquoteProcessor } from './BlockquoteProcessor';
4
+ import { SplitProcessor } from './SplitProcessor';
5
+ import { TabProcessor } from './TabProcessor';
4
6
  describe('BlockquoteProcessor', () => {
5
7
  it('should render a blockquote with [!INFO] syntax', () => {
6
8
  const markdown = '> [!INFO]\n> Highlights information that users should take into account.';
@@ -32,5 +34,88 @@ describe('BlockquoteProcessor', () => {
32
34
  expect(html)
33
35
  .toBe('<blockquote>This is a default blockquote with no headline.</blockquote>');
34
36
  });
37
+ it('should render all supported variant types', () => {
38
+ const variants = ['primary', 'secondary', 'tertiary', 'info', 'warning', 'danger', 'error', 'success', 'highlight'];
39
+ for (const variant of variants) {
40
+ const markdown = `> [!${variant.toUpperCase()}]\n> Content.`;
41
+ const html = new MarkdownProcessor([new BlockquoteProcessor()]).process(markdown);
42
+ const capitalized = variant.charAt(0).toUpperCase() + variant.slice(1);
43
+ expect(html).toBe(`<blockquote class="blockquote-${variant}"><strong>${capitalized}:</strong>Content.</blockquote>`);
44
+ }
45
+ });
46
+ it('should handle multi-line blockquote content', () => {
47
+ const markdown = '> [!INFO]\n> Line one.\n> Line two.';
48
+ const html = new MarkdownProcessor([new BlockquoteProcessor()]).process(markdown);
49
+ expect(html).toContain('blockquote-info');
50
+ expect(html).toContain('Line one.');
51
+ });
52
+ it('should render neutral variant without class for plain blockquotes', () => {
53
+ const markdown = '> Just text.';
54
+ const html = new MarkdownProcessor([new BlockquoteProcessor()]).process(markdown);
55
+ expect(html).not.toContain('class=');
56
+ expect(html).toContain('<blockquote>');
57
+ });
58
+ describe('Nesting', () => {
59
+ it('should render a blockquote with variant inside a tab', () => {
60
+ const markdown = [
61
+ '::: tabs',
62
+ '::: tab Tab 1',
63
+ '> [!WARNING]',
64
+ '> This is a warning inside a tab.',
65
+ '::: end-tab',
66
+ '::: end-tabs'
67
+ ].join('\n');
68
+ const html = new MarkdownProcessor([
69
+ new TabProcessor(),
70
+ new BlockquoteProcessor()
71
+ ]).process(markdown);
72
+ expect(html).toContain('class="tabs"');
73
+ expect(html).toContain('class="blockquote-warning"');
74
+ expect(html).toContain('<strong>Warning:</strong>');
75
+ expect(html).toContain('This is a warning inside a tab.');
76
+ });
77
+ it('should render a plain blockquote inside a tab', () => {
78
+ const markdown = [
79
+ '::: tabs',
80
+ '::: tab Quote Tab',
81
+ '> Just a plain blockquote.',
82
+ '::: end-tab',
83
+ '::: end-tabs'
84
+ ].join('\n');
85
+ const html = new MarkdownProcessor([
86
+ new TabProcessor(),
87
+ new BlockquoteProcessor()
88
+ ]).process(markdown);
89
+ expect(html).toContain('class="tabs"');
90
+ expect(html).toContain('<blockquote>');
91
+ expect(html).toContain('Just a plain blockquote.');
92
+ });
93
+ it('should render blockquotes with different variants in separate splits', () => {
94
+ const markdown = [
95
+ '::: splits',
96
+ '::: split Do',
97
+ '[!SUCCESS]',
98
+ '> [!SUCCESS]',
99
+ '> This is correct.',
100
+ '::: end-split',
101
+ '',
102
+ '::: split Dont',
103
+ '[!DANGER]',
104
+ '> [!DANGER]',
105
+ '> This is wrong.',
106
+ '::: end-split',
107
+ '::: end-splits'
108
+ ].join('\n');
109
+ const html = new MarkdownProcessor([
110
+ new SplitProcessor(),
111
+ new BlockquoteProcessor()
112
+ ]).process(markdown);
113
+ expect(html).toContain('class="splits"');
114
+ expect(html).toContain('class="blockquote-success"');
115
+ expect(html).toContain('class="blockquote-danger"');
116
+ expect(html).toContain('This is correct.');
117
+ expect(html).toContain('This is wrong.');
118
+ });
119
+ });
35
120
  });
36
121
  //# sourceMappingURL=BlockquoteProcessor.Test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"BlockquoteProcessor.Test.js","sourceRoot":"","sources":["../../../src/Processing/Processors/BlockquoteProcessor.Test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAEzD,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACjC,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACtD,MAAM,QAAQ,GAAG,0EAA0E,CAAC;QAC5F,MAAM,IAAI,GAAG,IAAI,iBAAiB,CAAC,CAAC,IAAI,mBAAmB,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAElF,MAAM,CAAC,IAAI,CAAC;aACP,IAAI,CAAC,oIAAoI,CAAC,CAAC;IACpJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;QACzD,MAAM,QAAQ,GAAG,sEAAsE,CAAC;QACxF,MAAM,IAAI,GAAG,IAAI,iBAAiB,CAAC,CAAC,IAAI,mBAAmB,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAElF,MAAM,CAAC,IAAI,CAAC;aACP,IAAI,CAAC,mIAAmI,CAAC,CAAC;IACnJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QACxD,MAAM,QAAQ,GAAG,2CAA2C,CAAC;QAC7D,MAAM,IAAI,GAAG,IAAI,iBAAiB,CAAC,CAAC,IAAI,mBAAmB,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAElF,MAAM,CAAC,IAAI,CAAC;aACP,IAAI,CAAC,uGAAuG,CAAC,CAAC;IACvH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;QACzD,MAAM,QAAQ,GAAG,8DAA8D,CAAC;QAChF,MAAM,IAAI,GAAG,IAAI,iBAAiB,CAAC,CAAC,IAAI,mBAAmB,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAElF,MAAM,CAAC,IAAI,CAAC;aACP,IAAI,CAAC,2HAA2H,CAAC,CAAC;IAC3I,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;QACpE,MAAM,QAAQ,GAAG,kDAAkD,CAAC;QACpE,MAAM,IAAI,GAAG,IAAI,iBAAiB,CAAC,CAAC,IAAI,mBAAmB,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAElF,MAAM,CAAC,IAAI,CAAC;aACP,IAAI,CAAC,yEAAyE,CAAC,CAAC;IACzF,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"BlockquoteProcessor.Test.js","sourceRoot":"","sources":["../../../src/Processing/Processors/BlockquoteProcessor.Test.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,17 @@
1
+ import type { TokenizerAndRendererExtension, Tokens } from 'marked';
1
2
  import { BaseProcessor } from './Abstracts/BaseProcessor.js';
2
- import type { Tokens, TokenizerAndRendererExtension } from 'marked';
3
+ type BlockquoteVariant = 'primary' | 'secondary' | 'tertiary' | 'info' | 'warning' | 'danger' | 'error' | 'success' | 'highlight' | 'neutral';
4
+ export interface IBlockquoteToken extends Tokens.Generic {
5
+ type: 'blockquote';
6
+ raw: string;
7
+ text: string;
8
+ variant: BlockquoteVariant;
9
+ content: string;
10
+ }
3
11
  /**
4
12
  * A processor that transforms blockquotes using the `[!TYPE]` syntax into styled callouts.
5
13
  *
6
- * Supported types: `info`, `warning`, `danger`, `success`. Fallback: `default`.
14
+ * Supported types: `info`, `warning`, `danger`, `success`. Fallback: `neutral`.
7
15
  *
8
16
  * @example
9
17
  * ```markdown
@@ -22,4 +30,5 @@ export declare class BlockquoteProcessor extends BaseProcessor {
22
30
  get extension(): TokenizerAndRendererExtension;
23
31
  walkTokens(token: Tokens.Generic): void;
24
32
  }
33
+ export {};
25
34
  //# sourceMappingURL=BlockquoteProcessor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"BlockquoteProcessor.d.ts","sourceRoot":"","sources":["../../../src/Processing/Processors/BlockquoteProcessor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,KAAK,EAAE,MAAM,EAAgB,6BAA6B,EAAE,MAAM,QAAQ,CAAC;AAgBlF;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,mBAAoB,SAAQ,aAAa;IAElD,IAAoB,SAAS,IAAI,6BAA6B,CAQ7D;IAEe,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI;CAQ1D"}
1
+ {"version":3,"file":"BlockquoteProcessor.d.ts","sourceRoot":"","sources":["../../../src/Processing/Processors/BlockquoteProcessor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAgB,6BAA6B,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAClF,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAE7D,KAAK,iBAAiB,GAAK,SAAS,GAAG,WAAW,GAAG,UAAU,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,CAAC;AAMhJ,MAAM,WAAW,gBAAiB,SAAQ,MAAM,CAAC,OAAO;IACpD,IAAI,EAAE,YAAY,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,iBAAiB,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,mBAAoB,SAAQ,aAAa;IAElD,IAAoB,SAAS,IAAI,6BAA6B,CAQ7D;IAEe,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI;CAQ1D"}
@@ -5,7 +5,7 @@ const KNOWN_VARIANTS = new Set([
5
5
  /**
6
6
  * A processor that transforms blockquotes using the `[!TYPE]` syntax into styled callouts.
7
7
  *
8
- * Supported types: `info`, `warning`, `danger`, `success`. Fallback: `default`.
8
+ * Supported types: `info`, `warning`, `danger`, `success`. Fallback: `neutral`.
9
9
  *
10
10
  * @example
11
11
  * ```markdown
@@ -40,7 +40,7 @@ export class BlockquoteProcessor extends BaseProcessor {
40
40
  class BlockquoteTokenizer {
41
41
  static enrich(token) {
42
42
  const text = token.text.trim();
43
- const match = (/^\[!(PRIMARY|SECONDARY|TERTIARY|INFO|WARNING|DANGER|ERROR|SUCCESS|HIGHLIGHT|NEUTRAL)\]\s*(.*)$/i).exec(text);
43
+ const match = (/^\[!(PRIMARY|SECONDARY|TERTIARY|INFO|WARNING|DANGER|ERROR|SUCCESS|HIGHLIGHT|NEUTRAL)\][ \t]*([\s\S]*)$/im).exec(text);
44
44
  if (match) {
45
45
  const variant = match[1].toLowerCase();
46
46
  const content = match[2].trim();
@@ -57,11 +57,11 @@ class BlockquoteTokenizer {
57
57
  }
58
58
  class BlockquoteRenderer {
59
59
  static render(token) {
60
- const variantClass = `class="blockquote ${token.variant}"`;
61
- const label = token.variant !== 'neutral'
62
- ? `<strong>${token.variant.charAt(0).toUpperCase() + token.variant.slice(1)}:</strong> `
63
- : '';
64
- return `<blockquote${variantClass}>${label}${token.content}</blockquote>`;
60
+ if (token.variant === 'neutral') {
61
+ return `<blockquote>${token.content}</blockquote>`;
62
+ }
63
+ const label = `<strong>${token.variant.charAt(0).toUpperCase() + token.variant.slice(1)}:</strong>`;
64
+ return `<blockquote class="blockquote-${token.variant}">${label}${token.content}</blockquote>`;
65
65
  }
66
66
  }
67
67
  //# sourceMappingURL=BlockquoteProcessor.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"BlockquoteProcessor.js","sourceRoot":"","sources":["../../../src/Processing/Processors/BlockquoteProcessor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAK7D,MAAM,cAAc,GAAG,IAAI,GAAG,CAAoB;IAC9C,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS;CAC9G,CAAC,CAAC;AAUH;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,OAAO,mBAAoB,SAAQ,aAAa;IAElD,IAAoB,SAAS;QACzB,OAAO;YACH,IAAI,EAAE,YAAY;YAClB,KAAK,EAAE,OAAO;YACd,QAAQ,CAAqB,KAAqB;gBAC9C,OAAO,kBAAkB,CAAC,MAAM,CAAC,KAAyB,CAAC,CAAC;YAChE,CAAC;SACJ,CAAC;IACN,CAAC;IAEe,UAAU,CAAC,KAAqB;QAC5C,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YAC9B,OAAO;QACX,CAAC;QAED,mBAAmB,CAAC,MAAM,CAAC,KAAyB,CAAC,CAAC;IAC1D,CAAC;CAEJ;AAED,MAAM,mBAAmB;IAEd,MAAM,CAAC,MAAM,CAAC,KAAuB;QACxC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAG,CAAC,iGAAiG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE7H,IAAI,KAAK,EAAE,CAAC;YACR,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAuB,CAAC;YAC5D,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAEhC,KAAK,CAAC,OAAO,GAAG,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC;gBACvC,CAAC,CAAC,OAAO;gBACT,CAAC,CAAC,SAAS,CAAC;YAChB,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;QAC5B,CAAC;aAAM,CAAC;YACJ,KAAK,CAAC,OAAO,GAAG,SAAS,CAAC;YAC1B,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC;QACzB,CAAC;IACL,CAAC;CAEJ;AAED,MAAM,kBAAkB;IAEb,MAAM,CAAC,MAAM,CAAC,KAAuB;QACxC,MAAM,YAAY,GAAG,qBAAqB,KAAK,CAAC,OAAO,GAAG,CAAC;QAC3D,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,KAAK,SAAS;YACrC,CAAC,CAAC,WAAW,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa;YACxF,CAAC,CAAC,EAAE,CAAC;QAET,OAAO,cAAc,YAAY,IAAI,KAAK,GAAG,KAAK,CAAC,OAAO,eAAe,CAAC;IAC9E,CAAC;CAEJ"}
1
+ {"version":3,"file":"BlockquoteProcessor.js","sourceRoot":"","sources":["../../../src/Processing/Processors/BlockquoteProcessor.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAI7D,MAAM,cAAc,GAAG,IAAI,GAAG,CAAoB;IAC9C,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS;CAC9G,CAAC,CAAC;AAUH;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,OAAO,mBAAoB,SAAQ,aAAa;IAElD,IAAoB,SAAS;QACzB,OAAO;YACH,IAAI,EAAE,YAAY;YAClB,KAAK,EAAE,OAAO;YACd,QAAQ,CAAqB,KAAqB;gBAC9C,OAAO,kBAAkB,CAAC,MAAM,CAAC,KAAyB,CAAC,CAAC;YAChE,CAAC;SACJ,CAAC;IACN,CAAC;IAEe,UAAU,CAAC,KAAqB;QAC5C,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YAC9B,OAAO;QACX,CAAC;QAED,mBAAmB,CAAC,MAAM,CAAC,KAAyB,CAAC,CAAC;IAC1D,CAAC;CAEJ;AAED,MAAM,mBAAmB;IAEd,MAAM,CAAC,MAAM,CAAC,KAAuB;QACxC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAG,CAAC,0GAA0G,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEtI,IAAI,KAAK,EAAE,CAAC;YACR,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAuB,CAAC;YAC5D,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAEhC,KAAK,CAAC,OAAO,GAAG,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC;gBACvC,CAAC,CAAC,OAAO;gBACT,CAAC,CAAC,SAAS,CAAC;YAChB,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;QAC5B,CAAC;aAAM,CAAC;YACJ,KAAK,CAAC,OAAO,GAAG,SAAS,CAAC;YAC1B,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC;QACzB,CAAC;IACL,CAAC;CAEJ;AAED,MAAM,kBAAkB;IAEb,MAAM,CAAC,MAAM,CAAC,KAAuB;QACxC,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YAC9B,OAAO,eAAe,KAAK,CAAC,OAAO,eAAe,CAAC;QACvD,CAAC;QAED,MAAM,KAAK,GAAG,WAAW,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC;QAEpG,OAAO,iCAAiC,KAAK,CAAC,OAAO,KAAK,KAAK,GAAG,KAAK,CAAC,OAAO,eAAe,CAAC;IACnG,CAAC;CAEJ"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ButtonProcessor.Test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ButtonProcessor.Test.d.ts","sourceRoot":"","sources":["../../../src/Processing/Processors/ButtonProcessor.Test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,59 @@
1
+ import { marked } from 'marked';
2
+ import { describe, expect, it } from 'vitest';
3
+ import { ButtonProcessor } from './ButtonProcessor';
4
+ describe('ButtonProcessor', () => {
5
+ function parse(md) {
6
+ const processor = new ButtonProcessor();
7
+ marked.use({ extensions: [processor.extension] });
8
+ return marked.parse(md).trim();
9
+ }
10
+ it('should parse a button with label only', () => {
11
+ const md = `::: button Click me
12
+ :::`;
13
+ const result = parse(md);
14
+ expect(result).toContain('class="md-button primary solid"');
15
+ expect(result).toContain('href="#"');
16
+ expect(result).toContain('Click me');
17
+ });
18
+ it('should parse a button with label and href', () => {
19
+ const md = `::: button Get Started | /getStarted
20
+ :::`;
21
+ const result = parse(md);
22
+ expect(result).toContain('href="/getStarted"');
23
+ expect(result).toContain('Get Started');
24
+ });
25
+ it('should parse a button with label, href, and variant', () => {
26
+ const md = `::: button Danger Zone | /danger | danger
27
+ :::`;
28
+ const result = parse(md);
29
+ expect(result).toContain('class="md-button danger solid"');
30
+ expect(result).toContain('href="/danger"');
31
+ expect(result).toContain('Danger Zone');
32
+ });
33
+ it('should parse a button with all properties', () => {
34
+ const md = `::: button Learn More | /docs | secondary | soft
35
+ :::`;
36
+ const result = parse(md);
37
+ expect(result).toContain('class="md-button secondary soft"');
38
+ expect(result).toContain('href="/docs"');
39
+ expect(result).toContain('Learn More');
40
+ });
41
+ it('should default unknown variant to primary', () => {
42
+ const md = `::: button Test | # | unknown
43
+ :::`;
44
+ const result = parse(md);
45
+ expect(result).toContain('class="md-button primary solid"');
46
+ });
47
+ it('should default unknown appearance to solid', () => {
48
+ const md = `::: button Test | # | primary | ghost
49
+ :::`;
50
+ const result = parse(md);
51
+ expect(result).toContain('class="md-button primary solid"');
52
+ });
53
+ it('should not match non-button syntax', () => {
54
+ const md = 'Just a paragraph.';
55
+ const result = parse(md);
56
+ expect(result).not.toContain('md-button');
57
+ });
58
+ });
59
+ //# sourceMappingURL=ButtonProcessor.Test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ButtonProcessor.Test.js","sourceRoot":"","sources":["../../../src/Processing/Processors/ButtonProcessor.Test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ import type { TokenizerAndRendererExtension, Tokens } from 'marked';
2
+ import { BaseProcessor } from './Abstracts/BaseProcessor.js';
3
+ type ButtonVariant = 'primary' | 'secondary' | 'tertiary' | 'info' | 'warning' | 'danger' | 'error' | 'success' | 'highlight' | 'neutral';
4
+ type ButtonAppearance = 'solid' | 'soft' | 'plain';
5
+ export interface IButtonToken extends Tokens.Generic {
6
+ type: 'md_button';
7
+ raw: string;
8
+ label: string;
9
+ href: string;
10
+ variant: ButtonVariant;
11
+ appearance: ButtonAppearance;
12
+ }
13
+ /**
14
+ * A processor that transforms `:::button` blocks into clickable button elements.
15
+ *
16
+ * @example
17
+ * ```markdown
18
+ * ::: button Get Started | /getStarted | primary | soft
19
+ * :::
20
+ *
21
+ * ::: button Learn More | /docs
22
+ * :::
23
+ * ```
24
+ *
25
+ * Format: `::: button Label | href | variant | appearance`
26
+ * - `Label` (required): The button text
27
+ * - `href` (optional): The link target, defaults to `#`
28
+ * - `variant` (optional): One of the known variants, defaults to `primary`
29
+ * - `appearance` (optional): One of `solid`, `soft`, `plain`, defaults to `solid`
30
+ *
31
+ * @public
32
+ */
33
+ export declare class ButtonProcessor extends BaseProcessor {
34
+ get extension(): TokenizerAndRendererExtension;
35
+ }
36
+ export {};
37
+ //# sourceMappingURL=ButtonProcessor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ButtonProcessor.d.ts","sourceRoot":"","sources":["../../../src/Processing/Processors/ButtonProcessor.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAgB,6BAA6B,EAAiB,MAAM,EAAE,MAAM,QAAQ,CAAC;AACjG,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAI7D,KAAK,aAAa,GAAK,SAAS,GAAG,WAAW,GAAG,UAAU,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,CAAC;AAQ5I,KAAK,gBAAgB,GAAK,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC;AAMrD,MAAM,WAAW,YAAa,SAAQ,MAAM,CAAC,OAAO;IAChD,IAAI,EAAE,WAAW,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,aAAa,CAAC;IACvB,UAAU,EAAE,gBAAgB,CAAC;CAChC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,eAAgB,SAAQ,aAAa;IAE9C,IAAoB,SAAS,IAAI,6BAA6B,CAc7D;CAEJ"}
@@ -0,0 +1,80 @@
1
+ // #region Imports
2
+ import { BaseProcessor } from './Abstracts/BaseProcessor.js';
3
+ const KNOWN_VARIANTS = new Set([
4
+ 'primary', 'secondary', 'tertiary',
5
+ 'info', 'warning', 'danger', 'error',
6
+ 'success', 'highlight', 'neutral'
7
+ ]);
8
+ const KNOWN_APPEARANCES = new Set([
9
+ 'solid', 'soft', 'plain'
10
+ ]);
11
+ /**
12
+ * A processor that transforms `:::button` blocks into clickable button elements.
13
+ *
14
+ * @example
15
+ * ```markdown
16
+ * ::: button Get Started | /getStarted | primary | soft
17
+ * :::
18
+ *
19
+ * ::: button Learn More | /docs
20
+ * :::
21
+ * ```
22
+ *
23
+ * Format: `::: button Label | href | variant | appearance`
24
+ * - `Label` (required): The button text
25
+ * - `href` (optional): The link target, defaults to `#`
26
+ * - `variant` (optional): One of the known variants, defaults to `primary`
27
+ * - `appearance` (optional): One of `solid`, `soft`, `plain`, defaults to `solid`
28
+ *
29
+ * @public
30
+ */
31
+ export class ButtonProcessor extends BaseProcessor {
32
+ get extension() {
33
+ return {
34
+ name: 'md_button',
35
+ level: 'block',
36
+ start(src) {
37
+ return (/^::: button /).exec(src)?.index;
38
+ },
39
+ tokenizer(src) {
40
+ return ButtonTokenizer.tokenize(src);
41
+ },
42
+ renderer(token) {
43
+ return ButtonRenderer.render(token);
44
+ }
45
+ };
46
+ }
47
+ }
48
+ /**
49
+ * @private
50
+ */
51
+ class ButtonTokenizer {
52
+ static tokenize(src) {
53
+ const match = (/^::: button (.+?)\n:::/).exec(src);
54
+ if (!match) {
55
+ return undefined;
56
+ }
57
+ const parts = match[1].split('|').map((s) => s.trim());
58
+ const label = parts[0] ?? 'Button';
59
+ const href = parts[1] ?? '#';
60
+ const rawVariant = (parts[2] ?? 'primary').toLowerCase();
61
+ const rawAppearance = (parts[3] ?? 'solid').toLowerCase();
62
+ return {
63
+ type: 'md_button',
64
+ raw: match[0],
65
+ label,
66
+ href,
67
+ variant: KNOWN_VARIANTS.has(rawVariant) ? rawVariant : 'primary',
68
+ appearance: KNOWN_APPEARANCES.has(rawAppearance) ? rawAppearance : 'solid'
69
+ };
70
+ }
71
+ }
72
+ /**
73
+ * @private
74
+ */
75
+ class ButtonRenderer {
76
+ static render(token) {
77
+ return `<a class="md-button ${token.variant} ${token.appearance}" href="${token.href}">${token.label}</a>`;
78
+ }
79
+ }
80
+ //# sourceMappingURL=ButtonProcessor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ButtonProcessor.js","sourceRoot":"","sources":["../../../src/Processing/Processors/ButtonProcessor.ts"],"names":[],"mappings":"AAAA,kBAAkB;AAGlB,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAM7D,MAAM,cAAc,GAAG,IAAI,GAAG,CAAgB;IAC1C,SAAS,EAAE,WAAW,EAAE,UAAU;IAClC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO;IACpC,SAAS,EAAE,WAAW,EAAE,SAAS;CACpC,CAAC,CAAC;AAIH,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAmB;IAChD,OAAO,EAAE,MAAM,EAAE,OAAO;CAC3B,CAAC,CAAC;AAWH;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,OAAO,eAAgB,SAAQ,aAAa;IAE9C,IAAoB,SAAS;QACzB,OAAO;YACH,IAAI,EAAE,WAAW;YACjB,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,eAAe,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YACzC,CAAC;YACD,QAAQ,CAAqB,KAAqB;gBAC9C,OAAO,cAAc,CAAC,MAAM,CAAC,KAAqB,CAAC,CAAC;YACxD,CAAC;SACJ,CAAC;IACN,CAAC;CAEJ;AAED;;GAEG;AACH,MAAM,eAAe;IAEV,MAAM,CAAC,QAAQ,CAAC,GAAW;QAC9B,MAAM,KAAK,GAAG,CAAC,wBAAwB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACnD,IAAI,CAAC,KAAK,EAAE,CAAC;YACT,OAAO,SAAS,CAAC;QACrB,CAAC;QAED,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QACvD,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC;QACnC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC;QAC7B,MAAM,UAAU,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,WAAW,EAAmB,CAAC;QAC1E,MAAM,aAAa,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,WAAW,EAAsB,CAAC;QAE9E,OAAO;YACH,IAAI,EAAE,WAAW;YACjB,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;YACb,KAAK;YACL,IAAI;YACJ,OAAO,EAAE,cAAc,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS;YAChE,UAAU,EAAE,iBAAiB,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO;SAC7E,CAAC;IACN,CAAC;CAEJ;AAED;;GAEG;AACH,MAAM,cAAc;IAET,MAAM,CAAC,MAAM,CAAC,KAAmB;QACpC,OAAO,uBAAuB,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,UAAU,WAAW,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,KAAK,MAAM,CAAC;IAC/G,CAAC;CAEJ"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=CalloutProcessor.Test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CalloutProcessor.Test.d.ts","sourceRoot":"","sources":["../../../src/Processing/Processors/CalloutProcessor.Test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,90 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { MarkdownProcessor } from '../MarkdownProcessor';
3
+ import { CalloutProcessor } from './CalloutProcessor';
4
+ import { SplitProcessor } from './SplitProcessor';
5
+ import { TabProcessor } from './TabProcessor';
6
+ describe('CalloutProcessor', () => {
7
+ it('should render a callout with variant and title', () => {
8
+ const markdown = '::: warning Be cautious!\nThis is a warning box.\n:::';
9
+ const html = new MarkdownProcessor([new CalloutProcessor()]).process(markdown);
10
+ expect(html).toContain('class="callout warning"');
11
+ expect(html).toContain('<div class="callout-title">Be cautious!</div>');
12
+ expect(html).toContain('This is a warning box.');
13
+ });
14
+ it('should render a callout without title', () => {
15
+ const markdown = '::: info\nSome information here.\n:::';
16
+ const html = new MarkdownProcessor([new CalloutProcessor()]).process(markdown);
17
+ expect(html).toContain('class="callout info"');
18
+ expect(html).not.toContain('callout-title');
19
+ expect(html).toContain('Some information here.');
20
+ });
21
+ it('should render all supported variants', () => {
22
+ const variants = ['primary', 'secondary', 'tertiary', 'info', 'warning', 'danger', 'success', 'highlight', 'neutral'];
23
+ for (const variant of variants) {
24
+ const markdown = `::: ${variant} Title\nContent.\n:::`;
25
+ const html = new MarkdownProcessor([new CalloutProcessor()]).process(markdown);
26
+ expect(html).toContain(`class="callout ${variant}"`);
27
+ }
28
+ });
29
+ it('should not match unknown variants', () => {
30
+ const markdown = '::: unknown Title\nContent.\n:::';
31
+ const html = new MarkdownProcessor([new CalloutProcessor()]).process(markdown);
32
+ expect(html).not.toContain('class="callout unknown"');
33
+ });
34
+ it('should parse inline markdown in content', () => {
35
+ const markdown = '::: info Note\nThis has **bold** text.\n:::';
36
+ const html = new MarkdownProcessor([new CalloutProcessor()]).process(markdown);
37
+ expect(html).toContain('<strong>bold</strong>');
38
+ });
39
+ it('should handle callout after other content', () => {
40
+ const markdown = 'Some paragraph.\n\n::: danger Alert\nDangerous content.\n:::';
41
+ const html = new MarkdownProcessor([new CalloutProcessor()]).process(markdown);
42
+ expect(html).toContain('<p>Some paragraph.</p>');
43
+ expect(html).toContain('class="callout danger"');
44
+ });
45
+ describe('Nesting', () => {
46
+ it('should render a callout inside a tab', () => {
47
+ const markdown = [
48
+ '::: tabs',
49
+ '::: tab Info Tab',
50
+ '::: info Important',
51
+ 'This is important information.',
52
+ ':::',
53
+ '::: end-tab',
54
+ '::: end-tabs'
55
+ ].join('\n');
56
+ const html = new MarkdownProcessor([
57
+ new TabProcessor(),
58
+ new CalloutProcessor()
59
+ ]).process(markdown);
60
+ expect(html).toContain('class="tabs"');
61
+ expect(html).toContain('class="callout info"');
62
+ expect(html).toContain('This is important information.');
63
+ });
64
+ it('should render callouts in different splits', () => {
65
+ const markdown = [
66
+ '::: splits',
67
+ '::: split Left',
68
+ '::: warning Heads up',
69
+ 'Warning content here.',
70
+ ':::',
71
+ '::: end-split',
72
+ '',
73
+ '::: split Right',
74
+ '::: success Done',
75
+ 'Success content here.',
76
+ ':::',
77
+ '::: end-split',
78
+ '::: end-splits'
79
+ ].join('\n');
80
+ const html = new MarkdownProcessor([
81
+ new SplitProcessor(),
82
+ new CalloutProcessor()
83
+ ]).process(markdown);
84
+ expect(html).toContain('class="splits"');
85
+ expect(html).toContain('class="callout warning"');
86
+ expect(html).toContain('class="callout success"');
87
+ });
88
+ });
89
+ });
90
+ //# sourceMappingURL=CalloutProcessor.Test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CalloutProcessor.Test.js","sourceRoot":"","sources":["../../../src/Processing/Processors/CalloutProcessor.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 CalloutVariant = 'primary' | 'secondary' | 'tertiary' | 'info' | 'warning' | 'danger' | 'success' | 'highlight' | 'neutral';
4
4
  export interface ICalloutToken extends Tokens.Generic {
5
5
  type: 'callout';
@@ -1 +1 @@
1
- {"version":3,"file":"CalloutProcessor.d.ts","sourceRoot":"","sources":["../../../src/Processing/Processors/CalloutProcessor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,EAAsC,MAAM,QAAQ,CAAC;AAExG,KAAK,cAAc,GAAK,SAAS,GAAG,WAAW,GAAG,UAAU,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,CAAC;AAMnI,MAAM,WAAW,aAAc,SAAQ,MAAM,CAAC,OAAO;IACjD,IAAI,EAAE,SAAS,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,cAAc,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;CACjC;AAED;;;;;;;;;;;;;GAaG;AACH,qBAAa,gBAAiB,SAAQ,aAAa;IAE/C,IAAoB,SAAS,IAAI,6BAA6B,CAc7D;CAEJ"}
1
+ {"version":3,"file":"CalloutProcessor.d.ts","sourceRoot":"","sources":["../../../src/Processing/Processors/CalloutProcessor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAuB,6BAA6B,EAAiB,MAAM,EAAE,MAAM,QAAQ,CAAC;AACxG,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAE7D,KAAK,cAAc,GAAK,SAAS,GAAG,WAAW,GAAG,UAAU,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,CAAC;AAMnI,MAAM,WAAW,aAAc,SAAQ,MAAM,CAAC,OAAO;IACjD,IAAI,EAAE,SAAS,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,cAAc,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;CACjC;AAED;;;;;;;;;;;;;GAaG;AACH,qBAAa,gBAAiB,SAAQ,aAAa;IAE/C,IAAoB,SAAS,IAAI,6BAA6B,CAc7D;CAEJ"}
@@ -22,7 +22,7 @@ export class CalloutProcessor extends BaseProcessor {
22
22
  name: 'callout',
23
23
  level: 'block',
24
24
  start(src) {
25
- return (/^::: (primary|secondary|tertiary|info|warning|danger|success|highlight|neutral)/i).exec(src)?.index;
25
+ return (/^::: \w+/).exec(src)?.index;
26
26
  },
27
27
  tokenizer(src) {
28
28
  return CalloutTokenizer.tokenize(src, this.lexer);
@@ -35,7 +35,7 @@ export class CalloutProcessor extends BaseProcessor {
35
35
  }
36
36
  class CalloutTokenizer {
37
37
  static tokenize(src, lexer) {
38
- const match = (/^::: (\w+)(?:\s+([^\n]+))?\n([\s\S]+?)\n:::/m).exec(src);
38
+ const match = (/^::: (\w+)(?:\s+([^\n]+))?\n([\s\S]+?)\n:::/).exec(src);
39
39
  if (!match) {
40
40
  return undefined;
41
41
  }
@@ -43,9 +43,9 @@ class CalloutTokenizer {
43
43
  if (!KNOWN_VARIANTS.has(variant)) {
44
44
  return undefined;
45
45
  }
46
- const title = match[2].trim();
46
+ const title = match[2]?.trim();
47
47
  const content = match[3].trim();
48
- const contentTokens = lexer.inlineTokens(content);
48
+ const contentTokens = lexer.blockTokens(content);
49
49
  return {
50
50
  type: 'callout',
51
51
  raw: match[0],
@@ -61,7 +61,7 @@ class CalloutRenderer {
61
61
  const title = token.title
62
62
  ? `<div class="callout-title">${token.title}</div>`
63
63
  : '';
64
- const body = renderer.parser.parse(token.tokens);
64
+ const body = renderer.parser.parse(token.tokens ?? []);
65
65
  return `<div class="${classes.join(' ')}">${title}${body}</div>`;
66
66
  }
67
67
  }