@breadstone-tools/markdowner-core 0.0.32 → 0.0.34

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 (80) hide show
  1. package/Index.d.ts +11 -7
  2. package/Index.d.ts.map +1 -1
  3. package/Index.js +8 -15
  4. package/Index.js.map +1 -1
  5. package/Process/MarkdownProcessor.d.ts.map +1 -1
  6. package/Process/MarkdownProcessor.js +20 -17
  7. package/Process/MarkdownProcessor.js.map +1 -1
  8. package/Process/Processors/Abstracts/BaseProcessor.d.ts +11 -6
  9. package/Process/Processors/Abstracts/BaseProcessor.d.ts.map +1 -1
  10. package/Process/Processors/Abstracts/BaseProcessor.js +6 -13
  11. package/Process/Processors/Abstracts/BaseProcessor.js.map +1 -1
  12. package/Process/Processors/BlockquoteProcessor.Test.js +19 -21
  13. package/Process/Processors/BlockquoteProcessor.Test.js.map +1 -1
  14. package/Process/Processors/BlockquoteProcessor.d.ts +13 -7
  15. package/Process/Processors/BlockquoteProcessor.d.ts.map +1 -1
  16. package/Process/Processors/BlockquoteProcessor.js +48 -42
  17. package/Process/Processors/BlockquoteProcessor.js.map +1 -1
  18. package/Process/Processors/CalloutProcessor.d.ts +23 -4
  19. package/Process/Processors/CalloutProcessor.d.ts.map +1 -1
  20. package/Process/Processors/CalloutProcessor.js +60 -36
  21. package/Process/Processors/CalloutProcessor.js.map +1 -1
  22. package/Process/Processors/CodeBlockProcessor.d.ts +17 -3
  23. package/Process/Processors/CodeBlockProcessor.d.ts.map +1 -1
  24. package/Process/Processors/CodeBlockProcessor.js +54 -35
  25. package/Process/Processors/CodeBlockProcessor.js.map +1 -1
  26. package/Process/Processors/Interfaces/IProcessor.d.ts +2 -2
  27. package/Process/Processors/Interfaces/IProcessor.d.ts.map +1 -1
  28. package/Process/Processors/Interfaces/IProcessor.js +1 -2
  29. package/Process/Processors/Interfaces/IProcessor.js.map +1 -1
  30. package/Process/Processors/SplitProcessor.d.ts +49 -0
  31. package/Process/Processors/SplitProcessor.d.ts.map +1 -0
  32. package/Process/Processors/SplitProcessor.js +123 -0
  33. package/Process/Processors/SplitProcessor.js.map +1 -0
  34. package/Process/Processors/TabProcessor.d.ts +36 -4
  35. package/Process/Processors/TabProcessor.d.ts.map +1 -1
  36. package/Process/Processors/TabProcessor.js +84 -49
  37. package/Process/Processors/TabProcessor.js.map +1 -1
  38. package/Process/Processors/Utils.js +2 -5
  39. package/Process/Processors/Utils.js.map +1 -1
  40. package/Processing/MarkdownProcessor.d.ts +46 -0
  41. package/Processing/MarkdownProcessor.d.ts.map +1 -0
  42. package/Processing/MarkdownProcessor.js +92 -0
  43. package/Processing/MarkdownProcessor.js.map +1 -0
  44. package/Processing/Processors/Abstracts/BaseProcessor.d.ts +60 -0
  45. package/Processing/Processors/Abstracts/BaseProcessor.d.ts.map +1 -0
  46. package/Processing/Processors/Abstracts/BaseProcessor.js +71 -0
  47. package/Processing/Processors/Abstracts/BaseProcessor.js.map +1 -0
  48. package/Processing/Processors/BlockquoteProcessor.Test.d.ts +2 -0
  49. package/Processing/Processors/BlockquoteProcessor.Test.d.ts.map +1 -0
  50. package/Processing/Processors/BlockquoteProcessor.Test.js +36 -0
  51. package/Processing/Processors/BlockquoteProcessor.Test.js.map +1 -0
  52. package/Processing/Processors/BlockquoteProcessor.d.ts +25 -0
  53. package/Processing/Processors/BlockquoteProcessor.d.ts.map +1 -0
  54. package/Processing/Processors/BlockquoteProcessor.js +67 -0
  55. package/Processing/Processors/BlockquoteProcessor.js.map +1 -0
  56. package/Processing/Processors/CalloutProcessor.d.ts +29 -0
  57. package/Processing/Processors/CalloutProcessor.d.ts.map +1 -0
  58. package/Processing/Processors/CalloutProcessor.js +68 -0
  59. package/Processing/Processors/CalloutProcessor.js.map +1 -0
  60. package/Processing/Processors/CodeBlockProcessor.d.ts +24 -0
  61. package/Processing/Processors/CodeBlockProcessor.d.ts.map +1 -0
  62. package/Processing/Processors/CodeBlockProcessor.js +65 -0
  63. package/Processing/Processors/CodeBlockProcessor.js.map +1 -0
  64. package/Processing/Processors/Interfaces/IProcessor.d.ts +9 -0
  65. package/Processing/Processors/Interfaces/IProcessor.d.ts.map +1 -0
  66. package/Processing/Processors/Interfaces/IProcessor.js +3 -0
  67. package/Processing/Processors/Interfaces/IProcessor.js.map +1 -0
  68. package/Processing/Processors/SplitProcessor.d.ts +47 -0
  69. package/Processing/Processors/SplitProcessor.d.ts.map +1 -0
  70. package/Processing/Processors/SplitProcessor.js +113 -0
  71. package/Processing/Processors/SplitProcessor.js.map +1 -0
  72. package/Processing/Processors/TabProcessor.d.ts +43 -0
  73. package/Processing/Processors/TabProcessor.d.ts.map +1 -0
  74. package/Processing/Processors/TabProcessor.js +110 -0
  75. package/Processing/Processors/TabProcessor.js.map +1 -0
  76. package/Templating/Html.d.ts +2 -0
  77. package/Templating/Html.d.ts.map +1 -0
  78. package/Templating/Html.js +11 -0
  79. package/Templating/Html.js.map +1 -0
  80. package/package.json +4 -4
@@ -1,59 +1,94 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.TabProcessor = void 0;
4
- const BaseProcessor_js_1 = require("./Abstracts/BaseProcessor.js");
1
+ import { BaseProcessor } from './Abstracts/BaseProcessor.js';
2
+ const KNOWN_VARIANTS = new Set([
3
+ 'primary', 'secondary', 'tertiary',
4
+ 'info', 'warning', 'danger', 'error',
5
+ 'success', 'highlight', 'neutral'
6
+ ]);
5
7
  /**
6
- * Processor for custom tabs with content.
8
+ * A processor that transforms `:::tabs` blocks into tabbed layout structures.
9
+ * Each tab may include a title, content, and an optional variant using `[!TYPE]`.
10
+ *
11
+ * Supported variants: `primary`, `secondary`, `tertiary`, `info`, `warning`, `danger`, `error`, `success`, `highlight`, `neutral`.
12
+ *
13
+ * @example
14
+ * ```markdown
15
+ * ::: tabs
16
+ * ::: tab Tab 1
17
+ * [!INFO]
18
+ * Content for the first tab.
19
+ * ::: end-tab
20
+ *
21
+ * ::: tab Tab 2
22
+ * [!WARNING]
23
+ * Content for the second tab.
24
+ * ::: end-tab
25
+ * ::: end-tabs
26
+ * ```
27
+ *
28
+ * @public
7
29
  */
8
- class TabProcessor extends BaseProcessor_js_1.BaseProcessor {
9
- walkTokens(token) {
10
- if (token.type !== 'blockquote') {
11
- return;
12
- }
13
- const tabsRegex = /^::: tabs\n([\s\S]+?)\n::: end-tabs/m;
14
- const tabRegex = /^::: tab (.+)\n([\s\S]+?)\n::: end-tab/m;
15
- const tabsMatch = tabsRegex.exec(token.raw);
16
- if (tabsMatch) {
17
- const tabsContent = tabsMatch[1];
18
- const tabs = new Array();
19
- let tabMatch = null;
20
- let index = 0;
21
- while ((tabMatch = tabRegex.exec(tabsContent)) !== null) {
22
- tabs.push({
23
- title: tabMatch[1].trim(),
24
- content: tabMatch[2].trim(),
25
- id: `tab-${index++}`
26
- });
30
+ export class TabProcessor extends BaseProcessor {
31
+ get extension() {
32
+ return {
33
+ name: 'tabs',
34
+ level: 'block',
35
+ start(src) {
36
+ return (/^::: tabs/).exec(src)?.index;
37
+ },
38
+ tokenizer(src) {
39
+ return TabTokenizer.tokenize(src);
40
+ },
41
+ renderer(token) {
42
+ return TabRenderer.render(token);
27
43
  }
28
- Object.assign(token, {
29
- type: 'tabs',
30
- meta: {
31
- tabs
44
+ };
45
+ }
46
+ }
47
+ class TabTokenizer {
48
+ static tokenize(src) {
49
+ const match = (/^::: tabs\n([\s\S]+?)\n::: end-tabs/m).exec(src);
50
+ if (!match) {
51
+ return undefined;
52
+ }
53
+ const tabRegex = /^::: tab (.+?)\n([\s\S]+?)\n::: end-tab/gm;
54
+ const tabs = [];
55
+ let tabMatch = null;
56
+ let index = 0;
57
+ while ((tabMatch = tabRegex.exec(match[1])) !== null) {
58
+ const rawLines = tabMatch[2].trim().split('\n');
59
+ let variant = undefined;
60
+ const variantMatch = (/^\[\!(\w+)\]/).exec(rawLines[0]);
61
+ if (variantMatch) {
62
+ const v = variantMatch[1].toLowerCase();
63
+ if (KNOWN_VARIANTS.has(v)) {
64
+ variant = v;
65
+ rawLines.shift(); // Remove variant line
32
66
  }
67
+ }
68
+ const content = rawLines.join('\n').trim();
69
+ tabs.push({
70
+ id: `tab-${index++}`,
71
+ title: tabMatch[1].trim(),
72
+ content,
73
+ variant
33
74
  });
34
- token.tokens?.splice(0, token.tokens.length); // Clear the token's children
35
75
  }
76
+ return {
77
+ type: 'tabs',
78
+ raw: match[0],
79
+ tabs
80
+ };
36
81
  }
37
- get extensions() {
38
- return [
39
- {
40
- name: 'tabs',
41
- level: 'block',
42
- renderer(meta) {
43
- const tabList = meta.tabs
44
- .map((tab, index) => `<li class="tab-item" data-tab="tab-${index}">${tab.title}</li>`)
45
- .join('');
46
- const tabContents = meta.tabs
47
- .map((tab, index) => `<div class="tab-content" id="tab-${index}">${tab.content}</div>`)
48
- .join('');
49
- return `<div class="tabs">
50
- <ul class="tab-list">${tabList}</ul>
51
- ${tabContents}
52
- </div>`;
53
- }
54
- }
55
- ];
82
+ }
83
+ class TabRenderer {
84
+ static render(token) {
85
+ const headers = token.tabs
86
+ .map((tab) => `<li class="tab-item${tab.variant ? ` ${tab.variant}` : ''}" data-tab="${tab.id}">${tab.title}</li>`)
87
+ .join('');
88
+ const bodies = token.tabs
89
+ .map((tab) => `<div class="tab-content${tab.variant ? ` ${tab.variant}` : ''}" id="${tab.id}">${tab.content}</div>`)
90
+ .join('');
91
+ return `<div class="tabs"><ul class="tab-list">${headers}</ul>${bodies}</div>`;
56
92
  }
57
93
  }
58
- exports.TabProcessor = TabProcessor;
59
94
  //# sourceMappingURL=TabProcessor.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TabProcessor.js","sourceRoot":"","sources":["../../../src/Process/Processors/TabProcessor.ts"],"names":[],"mappings":";;;AAAA,mEAA6D;AAS7D;;GAEG;AACH,MAAa,YAAa,SAAQ,gCAAa;IAE3B,UAAU,CAAC,KAAqB;QAC5C,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YAC9B,OAAO;QACX,CAAC;QAED,MAAM,SAAS,GAAG,sCAAsC,CAAC;QACzD,MAAM,QAAQ,GAAG,yCAAyC,CAAC;QAE3D,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC5C,IAAI,SAAS,EAAE,CAAC;YACZ,MAAM,WAAW,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;YACjC,MAAM,IAAI,GAAG,IAAI,KAAK,EAAY,CAAC;YACnC,IAAI,QAAQ,GAAG,IAAI,CAAC;YACpB,IAAI,KAAK,GAAG,CAAC,CAAC;YAEd,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;gBACtD,IAAI,CAAC,IAAI,CAAC;oBACN,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;oBACzB,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;oBAC3B,EAAE,EAAE,OAAO,KAAK,EAAE,EAAE;iBACvB,CAAC,CAAC;YACP,CAAC;YAED,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE;gBACjB,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE;oBACF,IAAI;iBACP;aACJ,CAAC,CAAC;YAEH,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,6BAA6B;QAC/E,CAAC;IACL,CAAC;IAED,IAAoB,UAAU;QAC1B,OAAO;YACH;gBACI,IAAI,EAAE,MAAM;gBACZ,KAAK,EAAE,OAAO;gBACd,QAAQ,CAAqB,IAAoB;oBAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI;yBACpB,GAAG,CACA,CAAC,GAAa,EAAE,KAAa,EAAE,EAAE,CAAC,sCAAsC,KAAK,KAAK,GAAG,CAAC,KAAK,OAAO,CACrG;yBACA,IAAI,CAAC,EAAE,CAAC,CAAC;oBACd,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI;yBACxB,GAAG,CACA,CAAC,GAAa,EAAE,KAAa,EAAE,EAAE,CAAC,oCAAoC,KAAK,KAAK,GAAG,CAAC,OAAO,QAAQ,CACtG;yBACA,IAAI,CAAC,EAAE,CAAC,CAAC;oBAEd,OAAO;6CACkB,OAAO;wBAC5B,WAAW;2BACR,CAAC;gBACZ,CAAC;aACJ;SACJ,CAAC;IACN,CAAC;CAEJ;AA9DD,oCA8DC"}
1
+ {"version":3,"file":"TabProcessor.js","sourceRoot":"","sources":["../../../src/Process/Processors/TabProcessor.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,6 @@
1
- "use strict";
2
1
  // #region Imports
3
- Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.TokenUtils = void 0;
5
2
  // #endregion
6
- var TokenUtils;
3
+ export var TokenUtils;
7
4
  (function (TokenUtils) {
8
5
  function setTokenMeta(token, meta) {
9
6
  Object.assign(token, { meta });
@@ -13,5 +10,5 @@ var TokenUtils;
13
10
  return token.meta;
14
11
  }
15
12
  TokenUtils.getTokenMeta = getTokenMeta;
16
- })(TokenUtils || (exports.TokenUtils = TokenUtils = {}));
13
+ })(TokenUtils || (TokenUtils = {}));
17
14
  //# sourceMappingURL=Utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Utils.js","sourceRoot":"","sources":["../../../src/Process/Processors/Utils.ts"],"names":[],"mappings":";AAAA,kBAAkB;;;AAIlB,aAAa;AAEb,IAAiB,UAAU,CAU1B;AAVD,WAAiB,UAAU;IAEvB,SAAgB,YAAY,CAAI,KAAqB,EAAE,IAAO;QAC1D,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IACnC,CAAC;IAFe,uBAAY,eAE3B,CAAA;IAED,SAAgB,YAAY,CAAI,KAAqB;QACjD,OAAO,KAAK,CAAC,IAAS,CAAC;IAC3B,CAAC;IAFe,uBAAY,eAE3B,CAAA;AAEL,CAAC,EAVgB,UAAU,0BAAV,UAAU,QAU1B"}
1
+ {"version":3,"file":"Utils.js","sourceRoot":"","sources":["../../../src/Process/Processors/Utils.ts"],"names":[],"mappings":"AAAA,kBAAkB;AAIlB,aAAa;AAEb,MAAM,KAAW,UAAU,CAU1B;AAVD,WAAiB,UAAU;IAEvB,SAAgB,YAAY,CAAI,KAAqB,EAAE,IAAO;QAC1D,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IACnC,CAAC;IAFe,uBAAY,eAE3B,CAAA;IAED,SAAgB,YAAY,CAAI,KAAqB;QACjD,OAAO,KAAK,CAAC,IAAS,CAAC;IAC3B,CAAC;IAFe,uBAAY,eAE3B,CAAA;AAEL,CAAC,EAVgB,UAAU,KAAV,UAAU,QAU1B"}
@@ -0,0 +1,46 @@
1
+ import { type MarkedOptions } from 'marked';
2
+ import type { IProcessor } from './Processors/Interfaces/IProcessor.js';
3
+ /**
4
+ * Main processor for Markdown content.
5
+ * Orchestrates processors and integrates them with `marked`.
6
+ *
7
+ * @public
8
+ */
9
+ export declare class MarkdownProcessor {
10
+ private _processors;
11
+ /**
12
+ * Constructs a new MarkdownProcessor.
13
+ */
14
+ constructor(processors?: Array<IProcessor>);
15
+ /**
16
+ * Adds a custom processor to the manager.
17
+ *
18
+ * @public
19
+ * @param processor - The processor to add.
20
+ */
21
+ addProcessor(processor: IProcessor): void;
22
+ /**
23
+ * Removes a custom processor from the manager.
24
+ *
25
+ * @public
26
+ * @param processor - The processor to remove.
27
+ */
28
+ removeProcessor(processor: IProcessor): void;
29
+ /**
30
+ * Processes Markdown content into HTML.
31
+ *
32
+ * @public
33
+ * @param markdown - The Markdown content to process.
34
+ * @returns The resulting HTML string.
35
+ */
36
+ process(markdown: string, options?: Omit<MarkedOptions, 'async'>): string;
37
+ /**
38
+ * Processes Markdown content into HTML asynchronously.
39
+ *
40
+ * @public
41
+ * @param markdown - The Markdown content to process.
42
+ * @returns A promise that resolves to the resulting HTML string.
43
+ */
44
+ processAsync(markdown: string, options?: Omit<MarkedOptions, 'async'>): Promise<string>;
45
+ }
46
+ //# sourceMappingURL=MarkdownProcessor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MarkdownProcessor.d.ts","sourceRoot":"","sources":["../../src/Processing/MarkdownProcessor.ts"],"names":[],"mappings":"AAEA,OAAO,EAAgC,KAAK,aAAa,EAAE,MAAM,QAAQ,CAAC;AAK1E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uCAAuC,CAAC;AAKxE;;;;;GAKG;AACH,qBAAa,iBAAiB;IAI1B,OAAO,CAAC,WAAW,CAAyB;IAM5C;;OAEG;gBACgB,UAAU,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC;IAkBjD;;;;;OAKG;IACI,YAAY,CAAC,SAAS,EAAE,UAAU,GAAG,IAAI;IAIhD;;;;;OAKG;IACI,eAAe,CAAC,SAAS,EAAE,UAAU,GAAG,IAAI;IAInD;;;;;;OAMG;IACI,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,GAAG,MAAM;IAiBhF;;;;;;OAMG;IACI,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;CAajG"}
@@ -0,0 +1,92 @@
1
+ // #region Imports
2
+ import { Marked } from 'marked';
3
+ import { BlockquoteProcessor } from './Processors/BlockquoteProcessor.js';
4
+ import { CodeBlockProcessor } from './Processors/CodeBlockProcessor.js';
5
+ import { TabProcessor } from './Processors/TabProcessor.js';
6
+ import { CalloutProcessor } from './Processors/CalloutProcessor.js';
7
+ import { SplitProcessor } from './Processors/SplitProcessor.js';
8
+ // #endregion
9
+ /**
10
+ * Main processor for Markdown content.
11
+ * Orchestrates processors and integrates them with `marked`.
12
+ *
13
+ * @public
14
+ */
15
+ export class MarkdownProcessor {
16
+ // #region Fields
17
+ _processors = [];
18
+ // #endregion
19
+ // #region Ctor
20
+ /**
21
+ * Constructs a new MarkdownProcessor.
22
+ */
23
+ constructor(processors) {
24
+ this._processors = [];
25
+ if (!processors?.length) {
26
+ this._processors.push(new BlockquoteProcessor());
27
+ this._processors.push(new CalloutProcessor());
28
+ this._processors.push(new CodeBlockProcessor());
29
+ this._processors.push(new TabProcessor());
30
+ this._processors.push(new SplitProcessor());
31
+ }
32
+ this._processors.push(...processors ?? []);
33
+ }
34
+ // #endregion
35
+ // #region Methods
36
+ /**
37
+ * Adds a custom processor to the manager.
38
+ *
39
+ * @public
40
+ * @param processor - The processor to add.
41
+ */
42
+ addProcessor(processor) {
43
+ this._processors.push(processor);
44
+ }
45
+ /**
46
+ * Removes a custom processor from the manager.
47
+ *
48
+ * @public
49
+ * @param processor - The processor to remove.
50
+ */
51
+ removeProcessor(processor) {
52
+ this._processors = this._processors.filter((p) => p !== processor);
53
+ }
54
+ /**
55
+ * Processes Markdown content into HTML.
56
+ *
57
+ * @public
58
+ * @param markdown - The Markdown content to process.
59
+ * @returns The resulting HTML string.
60
+ */
61
+ process(markdown, options) {
62
+ const extensions = this._processors.map((p) => ({
63
+ // eslint-disable-next-line @typescript-eslint/unbound-method
64
+ walkTokens: p.walkTokens,
65
+ extensions: [p.extension]
66
+ }));
67
+ const html = new Marked()
68
+ .use(...extensions)
69
+ .parse(markdown, {
70
+ async: false,
71
+ ...options
72
+ });
73
+ return html;
74
+ }
75
+ /**
76
+ * Processes Markdown content into HTML asynchronously.
77
+ *
78
+ * @public
79
+ * @param markdown - The Markdown content to process.
80
+ * @returns A promise that resolves to the resulting HTML string.
81
+ */
82
+ processAsync(markdown, options) {
83
+ const html = new Marked()
84
+ .use(...this._processors)
85
+ .parse(markdown, {
86
+ async: true,
87
+ ...options
88
+ });
89
+ return html;
90
+ }
91
+ }
92
+ //# sourceMappingURL=MarkdownProcessor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MarkdownProcessor.js","sourceRoot":"","sources":["../../src/Processing/MarkdownProcessor.ts"],"names":[],"mappings":"AAAA,kBAAkB;AAElB,OAAO,EAAE,MAAM,EAA4C,MAAM,QAAQ,CAAC;AAC1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAC1E,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAEpE,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAEhE,aAAa;AAEb;;;;;GAKG;AACH,MAAM,OAAO,iBAAiB;IAE1B,iBAAiB;IAET,WAAW,GAAsB,EAAE,CAAC;IAE5C,aAAa;IAEb,eAAe;IAEf;;OAEG;IACH,YAAmB,UAA8B;QAC7C,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;QAEtB,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC;YACtB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,mBAAmB,EAAE,CAAC,CAAC;YACjD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,gBAAgB,EAAE,CAAC,CAAC;YAC9C,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,kBAAkB,EAAE,CAAC,CAAC;YAChD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,YAAY,EAAE,CAAC,CAAC;YAC1C,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,cAAc,EAAE,CAAC,CAAC;QAChD,CAAC;QAED,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,UAAU,IAAI,EAAE,CAAC,CAAC;IAC/C,CAAC;IAED,aAAa;IAEb,kBAAkB;IAElB;;;;;OAKG;IACI,YAAY,CAAC,SAAqB;QACrC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACrC,CAAC;IAED;;;;;OAKG;IACI,eAAe,CAAC,SAAqB;QACxC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC;IACvE,CAAC;IAED;;;;;;OAMG;IACI,OAAO,CAAC,QAAgB,EAAE,OAAsC;QACnE,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAkB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC7D,6DAA6D;YAC7D,UAAU,EAAE,CAAC,CAAC,UAAU;YACxB,UAAU,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;SAC5B,CAAC,CAAC,CAAC;QAEJ,MAAM,IAAI,GAAG,IAAI,MAAM,EAAE;aACpB,GAAG,CAAC,GAAG,UAAU,CAAC;aAClB,KAAK,CAAC,QAAQ,EAAE;YACb,KAAK,EAAE,KAAK;YACZ,GAAG,OAAO;SACb,CAAC,CAAC;QAEP,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;;;;OAMG;IACI,YAAY,CAAC,QAAgB,EAAE,OAAsC;QACxE,MAAM,IAAI,GAAG,IAAI,MAAM,EAAE;aACpB,GAAG,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC;aACxB,KAAK,CAAC,QAAQ,EAAE;YACb,KAAK,EAAE,IAAI;YACX,GAAG,OAAO;SACb,CAAC,CAAC;QAEP,OAAO,IAAI,CAAC;IAChB,CAAC;CAIJ"}
@@ -0,0 +1,60 @@
1
+ import type { IProcessor } from '../Interfaces/IProcessor.js';
2
+ import type { MarkedExtension, TokenizerAndRendererExtension, Tokens } from 'marked';
3
+ /**
4
+ * Abstract base class for custom Markdown processors.
5
+ */
6
+ export declare abstract class BaseProcessor implements MarkedExtension, IProcessor {
7
+ /**
8
+ * @public
9
+ * @abstract
10
+ * @readonly
11
+ */
12
+ abstract get extension(): TokenizerAndRendererExtension;
13
+ /**
14
+ * Override this method to provide custom hooks for processing tokens.
15
+ *
16
+ * @public
17
+ * @readonly
18
+ * @returns An object containing hooks for processing tokens.
19
+ */
20
+ get hooks(): MarkedExtension['hooks'];
21
+ /**
22
+ * Preprocesses the Markdown content before rendering.
23
+ *
24
+ * @public
25
+ * @param markdown - The Markdown content to preprocess.
26
+ * @returns The preprocessed Markdown content.
27
+ */
28
+ preprocess(markdown: string): string;
29
+ /**
30
+ * Postprocessing the HTML content after rendering.
31
+ *
32
+ * @public
33
+ * @param html - The HTML content to postprocess.
34
+ * @returns The postprocessed HTML content.
35
+ */
36
+ postprocess(html: string): string;
37
+ /**
38
+ * Processes all tokens.
39
+ *
40
+ * @public
41
+ * @param tokens - The tokens to process.
42
+ * @returns The processed tokens.
43
+ */
44
+ processAllTokens(tokens: Array<Tokens.Generic>): Array<Tokens.Generic>;
45
+ /**
46
+ * Override this method to process tokens.
47
+ *
48
+ * @public
49
+ * @param token - The token to process.
50
+ */
51
+ walkTokens?(_token: Tokens.Generic): void;
52
+ /**
53
+ * Minifies HTML by removing all newlines and unnecessary whitespaces.
54
+ *
55
+ * @param html - The raw HTML string to minify.
56
+ * @returns A minified HTML string.
57
+ */
58
+ protected minifyHTML(html: string): string;
59
+ }
60
+ //# sourceMappingURL=BaseProcessor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BaseProcessor.d.ts","sourceRoot":"","sources":["../../../../src/Processing/Processors/Abstracts/BaseProcessor.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,KAAK,EAAE,eAAe,EAAE,6BAA6B,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAIrF;;GAEG;AACH,8BAAsB,aAAc,YAAW,eAAe,EAAE,UAAU;IAItE;;;;OAIG;IACH,aAAoB,SAAS,IAAI,6BAA6B,CAAC;IAE/D;;;;;;OAMG;IACH,IAAW,KAAK,IAAI,eAAe,CAAC,OAAO,CAAC,CAM3C;IAMD;;;;;;OAMG;IACI,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAI3C;;;;;;OAMG;IACI,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAIxC;;;;;;OAMG;IACI,gBAAgB,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC;IAI7E;;;;;OAKG;IACI,UAAU,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI;IAIhD;;;;;OAKG;IACH,SAAS,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;CAM7C"}
@@ -0,0 +1,71 @@
1
+ // #region Imports
2
+ // #endregion
3
+ /**
4
+ * Abstract base class for custom Markdown processors.
5
+ */
6
+ export class BaseProcessor {
7
+ /**
8
+ * Override this method to provide custom hooks for processing tokens.
9
+ *
10
+ * @public
11
+ * @readonly
12
+ * @returns An object containing hooks for processing tokens.
13
+ */
14
+ get hooks() {
15
+ return {
16
+ processAllTokens: (tokens) => this.processAllTokens(tokens),
17
+ preprocess: (markdown) => this.preprocess(markdown),
18
+ postprocess: (html) => this.postprocess(html)
19
+ };
20
+ }
21
+ // #endregion
22
+ // #region Methods
23
+ /**
24
+ * Preprocesses the Markdown content before rendering.
25
+ *
26
+ * @public
27
+ * @param markdown - The Markdown content to preprocess.
28
+ * @returns The preprocessed Markdown content.
29
+ */
30
+ preprocess(markdown) {
31
+ return markdown;
32
+ }
33
+ /**
34
+ * Postprocessing the HTML content after rendering.
35
+ *
36
+ * @public
37
+ * @param html - The HTML content to postprocess.
38
+ * @returns The postprocessed HTML content.
39
+ */
40
+ postprocess(html) {
41
+ return html;
42
+ }
43
+ /**
44
+ * Processes all tokens.
45
+ *
46
+ * @public
47
+ * @param tokens - The tokens to process.
48
+ * @returns The processed tokens.
49
+ */
50
+ processAllTokens(tokens) {
51
+ return tokens;
52
+ }
53
+ /**
54
+ * Override this method to process tokens.
55
+ *
56
+ * @public
57
+ * @param token - The token to process.
58
+ */
59
+ walkTokens(_token) {
60
+ }
61
+ /**
62
+ * Minifies HTML by removing all newlines and unnecessary whitespaces.
63
+ *
64
+ * @param html - The raw HTML string to minify.
65
+ * @returns A minified HTML string.
66
+ */
67
+ minifyHTML(html) {
68
+ return html.replace(/\s+/g, ' ').trim();
69
+ }
70
+ }
71
+ //# sourceMappingURL=BaseProcessor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BaseProcessor.js","sourceRoot":"","sources":["../../../../src/Processing/Processors/Abstracts/BaseProcessor.ts"],"names":[],"mappings":"AAAA,kBAAkB;AAKlB,aAAa;AAEb;;GAEG;AACH,MAAM,OAAgB,aAAa;IAW/B;;;;;;OAMG;IACH,IAAW,KAAK;QACZ,OAAO;YACH,gBAAgB,EAAE,CAAC,MAA6B,EAAE,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;YAClF,UAAU,EAAE,CAAC,QAAgB,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;YAC3D,WAAW,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;SACxD,CAAC;IACN,CAAC;IAED,aAAa;IAEb,kBAAkB;IAElB;;;;;;OAMG;IACI,UAAU,CAAC,QAAgB;QAC9B,OAAO,QAAQ,CAAC;IACpB,CAAC;IAED;;;;;;OAMG;IACI,WAAW,CAAC,IAAY;QAC3B,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;;;;OAMG;IACI,gBAAgB,CAAC,MAA6B;QACjD,OAAO,MAAM,CAAC;IAClB,CAAC;IAED;;;;;OAKG;IACI,UAAU,CAAE,MAAsB;IAEzC,CAAC;IAED;;;;;OAKG;IACO,UAAU,CAAC,IAAY;QAC7B,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IAC5C,CAAC;CAIJ"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=BlockquoteProcessor.Test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BlockquoteProcessor.Test.d.ts","sourceRoot":"","sources":["../../../src/Processing/Processors/BlockquoteProcessor.Test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,36 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { BlockquoteProcessor } from './BlockquoteProcessor';
3
+ import { MarkdownProcessor } from '../MarkdownProcessor';
4
+ describe('BlockquoteProcessor', () => {
5
+ it('should render a blockquote with [!INFO] syntax', () => {
6
+ const markdown = '> [!INFO]\n> Highlights information that users should take into account.';
7
+ const html = new MarkdownProcessor([new BlockquoteProcessor()]).process(markdown);
8
+ expect(html)
9
+ .toBe('<blockquote class="blockquote-info"><strong>Info:</strong>Highlights information that users should take into account.</blockquote>');
10
+ });
11
+ it('should render a blockquote with [!WARNING] syntax', () => {
12
+ const markdown = '> [!WARNING]\n> Critical content demanding immediate user attention.';
13
+ const html = new MarkdownProcessor([new BlockquoteProcessor()]).process(markdown);
14
+ expect(html)
15
+ .toBe('<blockquote class="blockquote-warning"><strong>Warning:</strong>Critical content demanding immediate user attention.</blockquote>');
16
+ });
17
+ it('should render a blockquote with [!DANGER] syntax', () => {
18
+ const markdown = '> [!DANGER]\n> Severe warnings for users.';
19
+ const html = new MarkdownProcessor([new BlockquoteProcessor()]).process(markdown);
20
+ expect(html)
21
+ .toBe('<blockquote class="blockquote-danger"><strong>Danger:</strong>Severe warnings for users.</blockquote>');
22
+ });
23
+ it('should render a blockquote with [!SUCCESS] syntax', () => {
24
+ const markdown = '> [!SUCCESS]\n> Optional information for successful actions.';
25
+ const html = new MarkdownProcessor([new BlockquoteProcessor()]).process(markdown);
26
+ expect(html)
27
+ .toBe('<blockquote class="blockquote-success"><strong>Success:</strong>Optional information for successful actions.</blockquote>');
28
+ });
29
+ it('should render a default blockquote when no type is specified', () => {
30
+ const markdown = '> This is a default blockquote with no headline.';
31
+ const html = new MarkdownProcessor([new BlockquoteProcessor()]).process(markdown);
32
+ expect(html)
33
+ .toBe('<blockquote>This is a default blockquote with no headline.</blockquote>');
34
+ });
35
+ });
36
+ //# sourceMappingURL=BlockquoteProcessor.Test.js.map
@@ -0,0 +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"}
@@ -0,0 +1,25 @@
1
+ import { BaseProcessor } from './Abstracts/BaseProcessor.js';
2
+ import type { Tokens, TokenizerAndRendererExtension } from 'marked';
3
+ /**
4
+ * A processor that transforms blockquotes using the `[!TYPE]` syntax into styled callouts.
5
+ *
6
+ * Supported types: `info`, `warning`, `danger`, `success`. Fallback: `default`.
7
+ *
8
+ * @example
9
+ * ```markdown
10
+ * > [!INFO]
11
+ * > This is an informational message.
12
+ *
13
+ * > [!WARNING] Pay attention!
14
+ * > Critical instructions follow.
15
+ *
16
+ * > Just a normal blockquote.
17
+ * ```
18
+ *
19
+ * @public
20
+ */
21
+ export declare class BlockquoteProcessor extends BaseProcessor {
22
+ get extension(): TokenizerAndRendererExtension;
23
+ walkTokens(token: Tokens.Generic): void;
24
+ }
25
+ //# sourceMappingURL=BlockquoteProcessor.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,67 @@
1
+ import { BaseProcessor } from './Abstracts/BaseProcessor.js';
2
+ const KNOWN_VARIANTS = new Set([
3
+ 'primary', 'secondary', 'tertiary', 'info', 'warning', 'danger', 'error', 'success', 'highlight', 'neutral'
4
+ ]);
5
+ /**
6
+ * A processor that transforms blockquotes using the `[!TYPE]` syntax into styled callouts.
7
+ *
8
+ * Supported types: `info`, `warning`, `danger`, `success`. Fallback: `default`.
9
+ *
10
+ * @example
11
+ * ```markdown
12
+ * > [!INFO]
13
+ * > This is an informational message.
14
+ *
15
+ * > [!WARNING] Pay attention!
16
+ * > Critical instructions follow.
17
+ *
18
+ * > Just a normal blockquote.
19
+ * ```
20
+ *
21
+ * @public
22
+ */
23
+ export class BlockquoteProcessor extends BaseProcessor {
24
+ get extension() {
25
+ return {
26
+ name: 'blockquote',
27
+ level: 'block',
28
+ renderer(token) {
29
+ return BlockquoteRenderer.render(token);
30
+ }
31
+ };
32
+ }
33
+ walkTokens(token) {
34
+ if (token.type !== 'blockquote') {
35
+ return;
36
+ }
37
+ BlockquoteTokenizer.enrich(token);
38
+ }
39
+ }
40
+ class BlockquoteTokenizer {
41
+ static enrich(token) {
42
+ const text = token.text.trim();
43
+ const match = (/^\[!(PRIMARY|SECONDARY|TERTIARY|INFO|WARNING|DANGER|ERROR|SUCCESS|HIGHLIGHT|NEUTRAL)\]\s*(.*)$/i).exec(text);
44
+ if (match) {
45
+ const variant = match[1].toLowerCase();
46
+ const content = match[2].trim();
47
+ token.variant = KNOWN_VARIANTS.has(variant)
48
+ ? variant
49
+ : 'neutral';
50
+ token.content = content;
51
+ }
52
+ else {
53
+ token.variant = 'neutral';
54
+ token.content = text;
55
+ }
56
+ }
57
+ }
58
+ class BlockquoteRenderer {
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>`;
65
+ }
66
+ }
67
+ //# sourceMappingURL=BlockquoteProcessor.js.map
@@ -0,0 +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"}