@pinkpixel/marzipan 1.1.0 → 1.1.2

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 (130) hide show
  1. package/README.md +72 -37
  2. package/dist/_basePickBy-D4kyG5Tu.js +152 -0
  3. package/dist/_basePickBy-D4kyG5Tu.js.map +1 -0
  4. package/dist/_baseUniq-s5uZhHMt.js +615 -0
  5. package/dist/_baseUniq-s5uZhHMt.js.map +1 -0
  6. package/dist/arc-Cd2Fw3V6.js +84 -0
  7. package/dist/arc-Cd2Fw3V6.js.map +1 -0
  8. package/dist/architectureDiagram-VXUJARFQ-ylT61Lln.js +4663 -0
  9. package/dist/architectureDiagram-VXUJARFQ-ylT61Lln.js.map +1 -0
  10. package/dist/blockDiagram-VD42YOAC-CoIxLSyQ.js +2257 -0
  11. package/dist/blockDiagram-VD42YOAC-CoIxLSyQ.js.map +1 -0
  12. package/dist/c4Diagram-YG6GDRKO-CsQimMM6.js +1581 -0
  13. package/dist/c4Diagram-YG6GDRKO-CsQimMM6.js.map +1 -0
  14. package/dist/channel-0tZUlnqz.js +6 -0
  15. package/dist/channel-0tZUlnqz.js.map +1 -0
  16. package/dist/chunk-4BX2VUAB-DVkBhLxy.js +9 -0
  17. package/dist/chunk-4BX2VUAB-DVkBhLxy.js.map +1 -0
  18. package/dist/chunk-55IACEB6-CVQcegI-.js +9 -0
  19. package/dist/chunk-55IACEB6-CVQcegI-.js.map +1 -0
  20. package/dist/chunk-B4BG7PRW-DPUTNckV.js +1376 -0
  21. package/dist/chunk-B4BG7PRW-DPUTNckV.js.map +1 -0
  22. package/dist/chunk-DI55MBZ5-F7DI2N9R.js +1371 -0
  23. package/dist/chunk-DI55MBZ5-F7DI2N9R.js.map +1 -0
  24. package/dist/chunk-FMBD7UC4-C3wNpU7V.js +20 -0
  25. package/dist/chunk-FMBD7UC4-C3wNpU7V.js.map +1 -0
  26. package/dist/chunk-QN33PNHL-BOdqrixJ.js +20 -0
  27. package/dist/chunk-QN33PNHL-BOdqrixJ.js.map +1 -0
  28. package/dist/chunk-QZHKN3VN-BFPNdgmW.js +16 -0
  29. package/dist/chunk-QZHKN3VN-BFPNdgmW.js.map +1 -0
  30. package/dist/chunk-TZMSLE5B-BZuxNW58.js +65 -0
  31. package/dist/chunk-TZMSLE5B-BZuxNW58.js.map +1 -0
  32. package/dist/classDiagram-2ON5EDUG-CiRjpBEe.js +17 -0
  33. package/dist/classDiagram-2ON5EDUG-CiRjpBEe.js.map +1 -0
  34. package/dist/classDiagram-v2-WZHVMYZB-CiRjpBEe.js +17 -0
  35. package/dist/classDiagram-v2-WZHVMYZB-CiRjpBEe.js.map +1 -0
  36. package/dist/clone-Bm_onhkP.js +9 -0
  37. package/dist/clone-Bm_onhkP.js.map +1 -0
  38. package/dist/cose-bilkent-S5V4N54A-D9xMKgKB.js +2609 -0
  39. package/dist/cose-bilkent-S5V4N54A-D9xMKgKB.js.map +1 -0
  40. package/dist/dagre-6UL2VRFP-BhIQJjaK.js +445 -0
  41. package/dist/dagre-6UL2VRFP-BhIQJjaK.js.map +1 -0
  42. package/dist/diagram-PSM6KHXK-h4YEzD1S.js +532 -0
  43. package/dist/diagram-PSM6KHXK-h4YEzD1S.js.map +1 -0
  44. package/dist/diagram-QEK2KX5R-spuV0akZ.js +218 -0
  45. package/dist/diagram-QEK2KX5R-spuV0akZ.js.map +1 -0
  46. package/dist/diagram-S2PKOQOG-CQx-wsyw.js +143 -0
  47. package/dist/diagram-S2PKOQOG-CQx-wsyw.js.map +1 -0
  48. package/dist/erDiagram-Q2GNP2WA-Cqkjjf2a.js +842 -0
  49. package/dist/erDiagram-Q2GNP2WA-Cqkjjf2a.js.map +1 -0
  50. package/dist/flowDiagram-NV44I4VS-mCXE9u9b.js +1621 -0
  51. package/dist/flowDiagram-NV44I4VS-mCXE9u9b.js.map +1 -0
  52. package/dist/ganttDiagram-JELNMOA3-Bz1GBIHE.js +2671 -0
  53. package/dist/ganttDiagram-JELNMOA3-Bz1GBIHE.js.map +1 -0
  54. package/dist/gitGraphDiagram-V2S2FVAM-Be01Oq15.js +700 -0
  55. package/dist/gitGraphDiagram-V2S2FVAM-Be01Oq15.js.map +1 -0
  56. package/dist/graph-DVWVTM7e.js +248 -0
  57. package/dist/graph-DVWVTM7e.js.map +1 -0
  58. package/dist/index-kKw24iiA.js +34 -0
  59. package/dist/index-kKw24iiA.js.map +1 -0
  60. package/dist/index.d.ts +0 -11
  61. package/dist/index.d.ts.map +1 -1
  62. package/dist/index.js +270 -277
  63. package/dist/index.js.map +1 -1
  64. package/dist/infoDiagram-HS3SLOUP-joTtnw9j.js +25 -0
  65. package/dist/infoDiagram-HS3SLOUP-joTtnw9j.js.map +1 -0
  66. package/dist/journeyDiagram-XKPGCS4Q-CMVu7VEd.js +835 -0
  67. package/dist/journeyDiagram-XKPGCS4Q-CMVu7VEd.js.map +1 -0
  68. package/dist/kanban-definition-3W4ZIXB7-CfanK5Eg.js +720 -0
  69. package/dist/kanban-definition-3W4ZIXB7-CfanK5Eg.js.map +1 -0
  70. package/dist/katex-Cj93GM5Y.js +11605 -0
  71. package/dist/katex-Cj93GM5Y.js.map +1 -0
  72. package/dist/layout-BC8VSiQq.js +1336 -0
  73. package/dist/layout-BC8VSiQq.js.map +1 -0
  74. package/dist/linear-GV5CIa17.js +260 -0
  75. package/dist/linear-GV5CIa17.js.map +1 -0
  76. package/dist/marzipan.d.ts +1 -2
  77. package/dist/marzipan.d.ts.map +1 -1
  78. package/dist/marzipan.js +1 -19
  79. package/dist/marzipan.js.map +1 -1
  80. package/dist/mermaid.core-cSWK5aGH.js +15302 -0
  81. package/dist/mermaid.core-cSWK5aGH.js.map +1 -0
  82. package/dist/mindmap-definition-VGOIOE7T-Vu_RTZar.js +785 -0
  83. package/dist/mindmap-definition-VGOIOE7T-Vu_RTZar.js.map +1 -0
  84. package/dist/parser.d.ts.map +1 -1
  85. package/dist/parser.js +6 -5
  86. package/dist/parser.js.map +1 -1
  87. package/dist/pieDiagram-ADFJNKIX-BUcd1l-6.js +162 -0
  88. package/dist/pieDiagram-ADFJNKIX-BUcd1l-6.js.map +1 -0
  89. package/dist/plugins/accentSwatchPlugin.d.ts +1 -1
  90. package/dist/plugins/accentSwatchPlugin.d.ts.map +1 -1
  91. package/dist/plugins/accentSwatchPlugin.js +162 -81
  92. package/dist/plugins/accentSwatchPlugin.js.map +1 -1
  93. package/dist/plugins/block-handles.d.ts +10 -2
  94. package/dist/plugins/block-handles.d.ts.map +1 -1
  95. package/dist/plugins/block-handles.js +77 -51
  96. package/dist/plugins/block-handles.js.map +1 -1
  97. package/dist/plugins/index.d.ts +0 -2
  98. package/dist/plugins/index.d.ts.map +1 -1
  99. package/dist/plugins/index.js +27 -29
  100. package/dist/plugins/index.js.map +1 -1
  101. package/dist/plugins/mermaidPlugin.js +1 -1
  102. package/dist/plugins/tinyHighlight.d.ts.map +1 -1
  103. package/dist/plugins/tinyHighlight.js +34 -22
  104. package/dist/plugins/tinyHighlight.js.map +1 -1
  105. package/dist/quadrantDiagram-AYHSOK5B-B1ekOH99.js +1023 -0
  106. package/dist/quadrantDiagram-AYHSOK5B-B1ekOH99.js.map +1 -0
  107. package/dist/requirementDiagram-UZGBJVZJ-BNcVcwNf.js +851 -0
  108. package/dist/requirementDiagram-UZGBJVZJ-BNcVcwNf.js.map +1 -0
  109. package/dist/sankeyDiagram-TZEHDZUN-BpHcdj5K.js +811 -0
  110. package/dist/sankeyDiagram-TZEHDZUN-BpHcdj5K.js.map +1 -0
  111. package/dist/sequenceDiagram-WL72ISMW-D5UyNvsv.js +2512 -0
  112. package/dist/sequenceDiagram-WL72ISMW-D5UyNvsv.js.map +1 -0
  113. package/dist/stateDiagram-FKZM4ZOC-C8DBscXu.js +264 -0
  114. package/dist/stateDiagram-FKZM4ZOC-C8DBscXu.js.map +1 -0
  115. package/dist/stateDiagram-v2-4FDKWEC3-CHqwUDPY.js +17 -0
  116. package/dist/stateDiagram-v2-4FDKWEC3-CHqwUDPY.js.map +1 -0
  117. package/dist/timeline-definition-IT6M3QCI-Dtg0oJbr.js +796 -0
  118. package/dist/timeline-definition-IT6M3QCI-Dtg0oJbr.js.map +1 -0
  119. package/dist/treemap-GDKQZRPO-rbQo3Em-.js +17926 -0
  120. package/dist/treemap-GDKQZRPO-rbQo3Em-.js.map +1 -0
  121. package/dist/xychartDiagram-PRI3JC2R-uNpgYSnV.js +1341 -0
  122. package/dist/xychartDiagram-PRI3JC2R-uNpgYSnV.js.map +1 -0
  123. package/docs/.vitepress/config.ts +1 -1
  124. package/docs/README.md +6 -8
  125. package/docs/TABLE_OF_CONTENTS.md +4 -1
  126. package/docs/api.md +262 -202
  127. package/docs/index.md +22 -19
  128. package/docs/plugins.md +27 -23
  129. package/package.json +1 -1
  130. package/docs/block-handles.md +0 -325
@@ -1,27 +1,39 @@
1
- function p(e) {
1
+ function m(e) {
2
2
  return e.replace(/[&<>"']/g, (t) => ({ "&": "&amp;", "<": "&lt;", ">": "&gt;", '"': "&quot;", "'": "&#39;" })[t]);
3
3
  }
4
4
  function f(e, t) {
5
- let n = p(e);
6
- for (const { pattern: a, cls: l } of t)
7
- n = n.replace(a, (c) => `<span class="tok ${l}">${p(c)}</span>`);
8
- return n;
5
+ const c = [];
6
+ for (const { pattern: s, cls: n } of t) {
7
+ const p = new RegExp(s.source, s.flags);
8
+ let l;
9
+ for (; (l = p.exec(e)) !== null && (c.push({ start: l.index, end: l.index + l[0].length, cls: n }), !!p.global); )
10
+ l[0].length === 0 && p.lastIndex++;
11
+ }
12
+ c.sort((s, n) => s.start - n.start || n.end - n.start - (s.end - s.start));
13
+ const i = [];
14
+ let g = 0;
15
+ for (const s of c)
16
+ s.start >= g && (i.push(s), g = s.end);
17
+ let o = "", r = 0;
18
+ for (const s of i)
19
+ s.start > r && (o += m(e.slice(r, s.start))), o += `<span class="tok ${s.cls}">${m(e.slice(s.start, s.end))}</span>`, r = s.end;
20
+ return r < e.length && (o += m(e.slice(r))), o;
9
21
  }
10
- const g = String.raw`\b(abstract|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|false|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|true|try|typeof|var|void|while|with|yield)\b`, d = String.raw`\b(string|number|boolean|any|unknown|never|void|null|undefined|Record|Partial|Readonly|Array|Promise|Map|Set)\b`, r = {
22
+ const u = String.raw`\b(abstract|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|false|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|true|try|typeof|var|void|while|with|yield)\b`, h = String.raw`\b(string|number|boolean|any|unknown|never|void|null|undefined|Record|Partial|Readonly|Array|Promise|Map|Set)\b`, a = {
11
23
  js: [
12
24
  { pattern: /\/\/.*/g, cls: "com" },
13
25
  { pattern: /\/\*[\s\S]*?\*\//g, cls: "com" },
14
26
  { pattern: /(['"`])(?:\\.|(?!\1)[\s\S])*\1/g, cls: "str" },
15
27
  { pattern: /\b\d[\d_]*(?:\.[\d_]+)?\b/g, cls: "num" },
16
- { pattern: new RegExp(g, "g"), cls: "kw" }
28
+ { pattern: new RegExp(u, "g"), cls: "kw" }
17
29
  ],
18
30
  ts: [
19
31
  { pattern: /\/\/.*/g, cls: "com" },
20
32
  { pattern: /\/\*[\s\S]*?\*\//g, cls: "com" },
21
33
  { pattern: /(['"`])(?:\\.|(?!\1)[\s\S])*\1/g, cls: "str" },
22
34
  { pattern: new RegExp("\\b\\d[\\d_]*(?:\\.[\\d_]+)?\\b", "g"), cls: "num" },
23
- { pattern: new RegExp(g, "g"), cls: "kw" },
24
- { pattern: new RegExp(d, "g"), cls: "type" }
35
+ { pattern: new RegExp(u, "g"), cls: "kw" },
36
+ { pattern: new RegExp(h, "g"), cls: "type" }
25
37
  ],
26
38
  json: [
27
39
  { pattern: /"(?:\\.|[^"])*"(?=\s*:)/g, cls: "prop" },
@@ -65,29 +77,29 @@ const g = String.raw`\b(abstract|await|break|case|catch|class|const|continue|deb
65
77
  { pattern: /\*[^*]+\*/g, cls: "em" }
66
78
  ]
67
79
  };
68
- function h(e) {
80
+ function d(e) {
69
81
  const t = e.replace(/^language-/, "").toLowerCase();
70
- return t === "ts" || t === "tsx" ? r.ts : t === "js" || t === "jsx" || t === "mjs" || t === "cjs" ? r.js : t === "json" ? r.json : t === "html" || t === "xml" ? r.html : t === "css" ? r.css : t === "bash" || t === "sh" || t === "shell" ? r.bash : t === "ini" || t === "conf" ? r.ini : t === "md" || t === "markdown" ? r.md : [];
82
+ return t === "ts" || t === "tsx" || t === "typescript" ? a.ts : t === "js" || t === "jsx" || t === "mjs" || t === "cjs" || t === "javascript" ? a.js : t === "json" || t === "jsonc" ? a.json : t === "html" || t === "xml" || t === "svg" ? a.html : t === "css" || t === "scss" || t === "less" ? a.css : t === "bash" || t === "sh" || t === "shell" || t === "zsh" || t === "fish" ? a.bash : t === "ini" || t === "conf" || t === "toml" ? a.ini : t === "md" || t === "markdown" ? a.md : [];
71
83
  }
72
84
  function w() {
73
85
  return (e) => {
74
86
  const t = e.options.hooks?.afterPreviewRender;
75
- e.options.hooks = e.options.hooks || {}, e.options.hooks.afterPreviewRender = (n, a) => {
76
- t?.(n, a), n.querySelectorAll('pre code[class*="language-"]').forEach((c) => {
77
- const s = c;
78
- if (s.dataset.hl === "1") return;
79
- const i = [...s.classList].find((u) => u.startsWith("language-")), o = h(i);
80
- if (!o.length) {
81
- s.dataset.hl = "1";
87
+ e.options.hooks = e.options.hooks || {}, e.options.hooks.afterPreviewRender = (c, i) => {
88
+ t?.(c, i), c.querySelectorAll('pre code[class*="language-"]').forEach((o) => {
89
+ const r = o;
90
+ if (r.dataset.hl === "1") return;
91
+ const s = [...r.classList].find((l) => l.startsWith("language-")), n = d(s);
92
+ if (!n.length) {
93
+ r.dataset.hl = "1";
82
94
  return;
83
95
  }
84
- const m = s.textContent || "";
85
- s.innerHTML = f(m, o), s.closest("pre")?.classList.add("marzipan-highlight"), s.dataset.hl = "1";
96
+ const p = r.textContent || "";
97
+ r.innerHTML = f(p, n), r.closest("pre")?.classList.add("marzipan-highlight"), r.dataset.hl = "1";
86
98
  });
87
99
  };
88
100
  };
89
101
  }
90
- const b = `
102
+ const k = `
91
103
  .marzipan-highlight { line-height: 1.5; overflow: auto; border-radius: 8px; }
92
104
  .tok.kw { color: var(--mz-k, #c678dd); font-weight: 600; }
93
105
  .tok.type { color: var(--mz-t, #56b6c2); }
@@ -104,6 +116,6 @@ const b = `
104
116
  `;
105
117
  export {
106
118
  w as tinyHighlightPlugin,
107
- b as tinyHighlightStyles
119
+ k as tinyHighlightStyles
108
120
  };
109
121
  //# sourceMappingURL=tinyHighlight.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tinyHighlight.js","sources":["../../src/plugins/tinyHighlight.ts"],"sourcesContent":["// plugins/tinyHighlight.ts\n// A tiny, regex-based highlighter for common languages. Zero deps.\n// Not spec-perfect; tuned for readability and speed.\n\nexport type MarzipanLike = {\n options: { hooks?: { afterPreviewRender?: (root: HTMLElement, editor: any) => void } };\n};\n\ntype Rule = { pattern: RegExp; cls: string };\n\nfunction escHtml(s: string) {\n return s.replace(/[&<>\"']/g, m => ({ '&': '&amp;', '<': '&lt;', '>': '&gt;', '\"': '&quot;', \"'\": '&#39;' }[m]!));\n}\n\nfunction applyRules(code: string, rules: Rule[]) {\n // Protect code by escaping, then re-inject spans via token placeholders\n let html = escHtml(code);\n // Run longer-span rules first (comments/strings), then keywords/numbers.\n for (const { pattern, cls } of rules) {\n html = html.replace(pattern, (m) => `<span class=\"tok ${cls}\">${escHtml(m)}</span>`);\n }\n return html;\n}\n\nconst JS_WORDS = String.raw`\\b(abstract|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|false|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|true|try|typeof|var|void|while|with|yield)\\b`;\nconst TYPES = String.raw`\\b(string|number|boolean|any|unknown|never|void|null|undefined|Record|Partial|Readonly|Array|Promise|Map|Set)\\b`;\n\nconst rulesByLang: Record<string, Rule[]> = {\n js: [\n { pattern: /\\/\\/.*/g, cls: 'com' },\n { pattern: /\\/\\*[\\s\\S]*?\\*\\//g, cls: 'com' },\n { pattern: /(['\"`])(?:\\\\.|(?!\\1)[\\s\\S])*\\1/g, cls: 'str' },\n { pattern: /\\b\\d[\\d_]*(?:\\.[\\d_]+)?\\b/g, cls: 'num' },\n { pattern: new RegExp(JS_WORDS, 'g'), cls: 'kw' },\n ],\n ts: [\n { pattern: /\\/\\/.*/g, cls: 'com' },\n { pattern: /\\/\\*[\\s\\S]*?\\*\\//g, cls: 'com' },\n { pattern: /(['\"`])(?:\\\\.|(?!\\1)[\\s\\S])*\\1/g, cls: 'str' },\n { pattern: new RegExp(`\\\\b\\\\d[\\\\d_]*(?:\\\\.[\\\\d_]+)?\\\\b`, 'g'), cls: 'num' },\n { pattern: new RegExp(JS_WORDS, 'g'), cls: 'kw' },\n { pattern: new RegExp(TYPES, 'g'), cls: 'type' },\n ],\n json: [\n { pattern: /\"(?:\\\\.|[^\"])*\"(?=\\s*:)/g, cls: 'prop' },\n { pattern: /\"(?:\\\\.|[^\"])*\"/g, cls: 'str' },\n { pattern: /\\b(true|false|null)\\b/g, cls: 'kw' },\n { pattern: /-?\\b\\d[\\d.]*\\b/g, cls: 'num' },\n ],\n css: [\n { pattern: /\\/\\*[\\s\\S]*?\\*\\//g, cls: 'com' },\n { pattern: /#[0-9a-fA-F]{3,8}\\b/g, cls: 'num' },\n { pattern: /\\b\\d+(\\.\\d+)?(px|em|rem|%|vh|vw)\\b/g, cls: 'num' },\n { pattern: /:[a-z-]+(?=\\s*:)/g, cls: 'prop' },\n { pattern: /\\b(var|calc|clamp)\\b/g, cls: 'kw' },\n ],\n html: [\n { pattern: /<!--[\\s\\S]*?-->/g, cls: 'com' },\n { pattern: /<\\/?[a-zA-Z][\\w:-]*/g, cls: 'tag' },\n { pattern: /\\s+[a-zA-Z_:][\\w:.-]*(?==)/g, cls: 'attr' },\n { pattern: /\"[^\"]*\"|'[^']*'/g, cls: 'str' },\n { pattern: /\\/?>/g, cls: 'tag' },\n ],\n bash: [\n { pattern: /#.*/g, cls: 'com' },\n { pattern: /\\$[A-Za-z_]\\w*/g, cls: 'var' },\n { pattern: /(['\"`])(?:\\\\.|(?!\\1)[\\s\\S])*\\1/g, cls: 'str' },\n { pattern: /^\\s*[a-zA-Z][\\w-]*/gm, cls: 'kw' },\n { pattern: /\\b\\d+\\b/g, cls: 'num' },\n ],\n ini: [\n { pattern: /;.*/g, cls: 'com' },\n { pattern: /^\\s*\\[[^\\]]+\\]/gm, cls: 'kw' },\n { pattern: /^\\s*[A-Za-z0-9_.-]+\\s*(?==)/gm, cls: 'prop' },\n { pattern: /=\\s*\".*?\"|=\\s*'.*?'|=\\s*\\S+/g, cls: 'str' },\n ],\n md: [\n { pattern: /^###[^\\n]+/gm, cls: 'kw' },\n { pattern: /^##[^\\n]+/gm, cls: 'kw' },\n { pattern: /^#[^\\n]+/gm, cls: 'kw' },\n { pattern: /`[^`]+`/g, cls: 'code' },\n { pattern: /\\*\\*[^*]+\\*\\*/g, cls: 'strong' },\n { pattern: /\\*[^*]+\\*/g, cls: 'em' },\n ]\n};\n\nfunction langToRules(langClass: string): Rule[] {\n const lang = langClass.replace(/^language-/, '').toLowerCase();\n if (lang === 'ts' || lang === 'tsx') return rulesByLang.ts;\n if (lang === 'js' || lang === 'jsx' || lang === 'mjs' || lang === 'cjs') return rulesByLang.js;\n if (lang === 'json') return rulesByLang.json;\n if (lang === 'html' || lang === 'xml') return rulesByLang.html;\n if (lang === 'css') return rulesByLang.css;\n if (lang === 'bash' || lang === 'sh' || lang === 'shell') return rulesByLang.bash;\n if (lang === 'ini' || lang === 'conf') return rulesByLang.ini;\n if (lang === 'md' || lang === 'markdown') return rulesByLang.md;\n return []; // unknown -> no-op\n}\n\nexport function tinyHighlightPlugin() {\n return (editor: MarzipanLike) => {\n const prev = editor.options.hooks?.afterPreviewRender;\n editor.options.hooks = editor.options.hooks || {};\n editor.options.hooks.afterPreviewRender = (root: HTMLElement, e: any) => {\n prev?.(root, e);\n\n const blocks = root.querySelectorAll('pre code[class*=\"language-\"]');\n blocks.forEach((codeEl) => {\n const el = codeEl as HTMLElement;\n if (el.dataset.hl === '1') return;\n const cls = [...el.classList].find(c => c.startsWith('language-'))!;\n const rules = langToRules(cls);\n if (!rules.length) { el.dataset.hl = '1'; return; }\n\n const src = el.textContent || '';\n (el as HTMLElement).innerHTML = applyRules(src, rules);\n (el.closest('pre') as HTMLElement)?.classList.add('marzipan-highlight');\n el.dataset.hl = '1';\n });\n };\n };\n}\n\n// Optional styles — include once in your app:\nexport const tinyHighlightStyles = `\n.marzipan-highlight { line-height: 1.5; overflow: auto; border-radius: 8px; }\n.tok.kw { color: var(--mz-k, #c678dd); font-weight: 600; }\n.tok.type { color: var(--mz-t, #56b6c2); }\n.tok.prop { color: var(--mz-p, #e5c07b); }\n.tok.num { color: var(--mz-n, #d19a66); }\n.tok.str { color: var(--mz-s, #98c379); }\n.tok.com { color: var(--mz-c, #7f848e); font-style: italic; }\n.tok.tag { color: var(--mz-tag, #e06c75); }\n.tok.attr { color: var(--mz-attr, #61afef); }\n.tok.var { color: var(--mz-var, #61afef); }\n.tok.code { color: var(--mz-code, #e5c07b); }\n.tok.strong { font-weight: 700; }\n.tok.em { font-style: italic; }\n`;"],"names":["escHtml","s","m","applyRules","code","rules","html","pattern","cls","JS_WORDS","TYPES","rulesByLang","langToRules","langClass","lang","tinyHighlightPlugin","editor","prev","root","e","codeEl","el","c","src","tinyHighlightStyles"],"mappings":"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"}
1
+ {"version":3,"file":"tinyHighlight.js","sources":["../../src/plugins/tinyHighlight.ts"],"sourcesContent":["// plugins/tinyHighlight.ts\n// A tiny, regex-based highlighter for common languages. Zero deps.\n// Not spec-perfect; tuned for readability and speed.\n\nexport type MarzipanLike = {\n options: { hooks?: { afterPreviewRender?: (root: HTMLElement, editor: any) => void } };\n};\n\ntype Rule = { pattern: RegExp; cls: string };\n\nfunction escHtml(s: string) {\n return s.replace(/[&<>\"']/g, m => ({ '&': '&amp;', '<': '&lt;', '>': '&gt;', '\"': '&quot;', \"'\": '&#39;' }[m]!));\n}\n\nfunction applyRules(code: string, rules: Rule[]) {\n // Collect all matches from raw (unescaped) source\n type Match = { start: number; end: number; cls: string };\n const matches: Match[] = [];\n\n for (const { pattern, cls } of rules) {\n const re = new RegExp(pattern.source, pattern.flags);\n let m: RegExpExecArray | null;\n while ((m = re.exec(code)) !== null) {\n matches.push({ start: m.index, end: m.index + m[0].length, cls });\n if (!re.global) break;\n if (m[0].length === 0) { re.lastIndex++; }\n }\n }\n\n // Sort by position; longer matches first for ties at same start\n matches.sort((a, b) => a.start - b.start || (b.end - b.start) - (a.end - a.start));\n\n // Filter overlapping: earlier/longer match wins\n const kept: Match[] = [];\n let cursor = 0;\n for (const m of matches) {\n if (m.start >= cursor) {\n kept.push(m);\n cursor = m.end;\n }\n }\n\n // Build HTML: escape plain text, wrap matched segments in spans\n let html = '';\n let pos = 0;\n for (const m of kept) {\n if (m.start > pos) html += escHtml(code.slice(pos, m.start));\n html += `<span class=\"tok ${m.cls}\">${escHtml(code.slice(m.start, m.end))}</span>`;\n pos = m.end;\n }\n if (pos < code.length) html += escHtml(code.slice(pos));\n\n return html;\n}\n\nconst JS_WORDS = String.raw`\\b(abstract|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|false|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|true|try|typeof|var|void|while|with|yield)\\b`;\nconst TYPES = String.raw`\\b(string|number|boolean|any|unknown|never|void|null|undefined|Record|Partial|Readonly|Array|Promise|Map|Set)\\b`;\n\nconst rulesByLang: Record<string, Rule[]> = {\n js: [\n { pattern: /\\/\\/.*/g, cls: 'com' },\n { pattern: /\\/\\*[\\s\\S]*?\\*\\//g, cls: 'com' },\n { pattern: /(['\"`])(?:\\\\.|(?!\\1)[\\s\\S])*\\1/g, cls: 'str' },\n { pattern: /\\b\\d[\\d_]*(?:\\.[\\d_]+)?\\b/g, cls: 'num' },\n { pattern: new RegExp(JS_WORDS, 'g'), cls: 'kw' },\n ],\n ts: [\n { pattern: /\\/\\/.*/g, cls: 'com' },\n { pattern: /\\/\\*[\\s\\S]*?\\*\\//g, cls: 'com' },\n { pattern: /(['\"`])(?:\\\\.|(?!\\1)[\\s\\S])*\\1/g, cls: 'str' },\n { pattern: new RegExp(`\\\\b\\\\d[\\\\d_]*(?:\\\\.[\\\\d_]+)?\\\\b`, 'g'), cls: 'num' },\n { pattern: new RegExp(JS_WORDS, 'g'), cls: 'kw' },\n { pattern: new RegExp(TYPES, 'g'), cls: 'type' },\n ],\n json: [\n { pattern: /\"(?:\\\\.|[^\"])*\"(?=\\s*:)/g, cls: 'prop' },\n { pattern: /\"(?:\\\\.|[^\"])*\"/g, cls: 'str' },\n { pattern: /\\b(true|false|null)\\b/g, cls: 'kw' },\n { pattern: /-?\\b\\d[\\d.]*\\b/g, cls: 'num' },\n ],\n css: [\n { pattern: /\\/\\*[\\s\\S]*?\\*\\//g, cls: 'com' },\n { pattern: /#[0-9a-fA-F]{3,8}\\b/g, cls: 'num' },\n { pattern: /\\b\\d+(\\.\\d+)?(px|em|rem|%|vh|vw)\\b/g, cls: 'num' },\n { pattern: /:[a-z-]+(?=\\s*:)/g, cls: 'prop' },\n { pattern: /\\b(var|calc|clamp)\\b/g, cls: 'kw' },\n ],\n html: [\n { pattern: /<!--[\\s\\S]*?-->/g, cls: 'com' },\n { pattern: /<\\/?[a-zA-Z][\\w:-]*/g, cls: 'tag' },\n { pattern: /\\s+[a-zA-Z_:][\\w:.-]*(?==)/g, cls: 'attr' },\n { pattern: /\"[^\"]*\"|'[^']*'/g, cls: 'str' },\n { pattern: /\\/?>/g, cls: 'tag' },\n ],\n bash: [\n { pattern: /#.*/g, cls: 'com' },\n { pattern: /\\$[A-Za-z_]\\w*/g, cls: 'var' },\n { pattern: /(['\"`])(?:\\\\.|(?!\\1)[\\s\\S])*\\1/g, cls: 'str' },\n { pattern: /^\\s*[a-zA-Z][\\w-]*/gm, cls: 'kw' },\n { pattern: /\\b\\d+\\b/g, cls: 'num' },\n ],\n ini: [\n { pattern: /;.*/g, cls: 'com' },\n { pattern: /^\\s*\\[[^\\]]+\\]/gm, cls: 'kw' },\n { pattern: /^\\s*[A-Za-z0-9_.-]+\\s*(?==)/gm, cls: 'prop' },\n { pattern: /=\\s*\".*?\"|=\\s*'.*?'|=\\s*\\S+/g, cls: 'str' },\n ],\n md: [\n { pattern: /^###[^\\n]+/gm, cls: 'kw' },\n { pattern: /^##[^\\n]+/gm, cls: 'kw' },\n { pattern: /^#[^\\n]+/gm, cls: 'kw' },\n { pattern: /`[^`]+`/g, cls: 'code' },\n { pattern: /\\*\\*[^*]+\\*\\*/g, cls: 'strong' },\n { pattern: /\\*[^*]+\\*/g, cls: 'em' },\n ]\n};\n\nfunction langToRules(langClass: string): Rule[] {\n const lang = langClass.replace(/^language-/, '').toLowerCase();\n if (lang === 'ts' || lang === 'tsx' || lang === 'typescript') return rulesByLang.ts;\n if (lang === 'js' || lang === 'jsx' || lang === 'mjs' || lang === 'cjs' || lang === 'javascript') return rulesByLang.js;\n if (lang === 'json' || lang === 'jsonc') return rulesByLang.json;\n if (lang === 'html' || lang === 'xml' || lang === 'svg') return rulesByLang.html;\n if (lang === 'css' || lang === 'scss' || lang === 'less') return rulesByLang.css;\n if (lang === 'bash' || lang === 'sh' || lang === 'shell' || lang === 'zsh' || lang === 'fish') return rulesByLang.bash;\n if (lang === 'ini' || lang === 'conf' || lang === 'toml') return rulesByLang.ini;\n if (lang === 'md' || lang === 'markdown') return rulesByLang.md;\n return []; // unknown -> no-op\n}\n\nexport function tinyHighlightPlugin() {\n return (editor: MarzipanLike) => {\n const prev = editor.options.hooks?.afterPreviewRender;\n editor.options.hooks = editor.options.hooks || {};\n editor.options.hooks.afterPreviewRender = (root: HTMLElement, e: any) => {\n prev?.(root, e);\n\n const blocks = root.querySelectorAll('pre code[class*=\"language-\"]');\n blocks.forEach((codeEl) => {\n const el = codeEl as HTMLElement;\n if (el.dataset.hl === '1') return;\n const cls = [...el.classList].find(c => c.startsWith('language-'))!;\n const rules = langToRules(cls);\n if (!rules.length) { el.dataset.hl = '1'; return; }\n\n const src = el.textContent || '';\n (el as HTMLElement).innerHTML = applyRules(src, rules);\n (el.closest('pre') as HTMLElement)?.classList.add('marzipan-highlight');\n el.dataset.hl = '1';\n });\n };\n };\n}\n\n// Optional styles — include once in your app:\nexport const tinyHighlightStyles = `\n.marzipan-highlight { line-height: 1.5; overflow: auto; border-radius: 8px; }\n.tok.kw { color: var(--mz-k, #c678dd); font-weight: 600; }\n.tok.type { color: var(--mz-t, #56b6c2); }\n.tok.prop { color: var(--mz-p, #e5c07b); }\n.tok.num { color: var(--mz-n, #d19a66); }\n.tok.str { color: var(--mz-s, #98c379); }\n.tok.com { color: var(--mz-c, #7f848e); font-style: italic; }\n.tok.tag { color: var(--mz-tag, #e06c75); }\n.tok.attr { color: var(--mz-attr, #61afef); }\n.tok.var { color: var(--mz-var, #61afef); }\n.tok.code { color: var(--mz-code, #e5c07b); }\n.tok.strong { font-weight: 700; }\n.tok.em { font-style: italic; }\n`;"],"names":["escHtml","s","m","applyRules","code","rules","matches","pattern","cls","re","a","b","kept","cursor","html","pos","JS_WORDS","TYPES","rulesByLang","langToRules","langClass","lang","tinyHighlightPlugin","editor","prev","root","e","codeEl","el","c","src","tinyHighlightStyles"],"mappings":"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"}