feat(notes): render macroplan code blocks as a delivery plan grid
All checks were successful
CI / verify (push) Successful in 2m9s

Follows the tikz pattern: the fence emits a base64 placeholder, then
the post-render hook lazily imports the parser and grid (separate
chunks) and mounts the grid only when a placeholder exists. Mono font
forced on the block because the flag-stacking math assumes Fira Code.
This commit is contained in:
Julien Calixte
2026-07-08 00:01:21 +02:00
parent 70f9a6b718
commit 1b6c7542d7
9 changed files with 154 additions and 6 deletions

View File

@@ -95,6 +95,37 @@ const markdownItTikzExtractor = (md: MarkdownIt) => {
}
}
const markdownItMacroplanExtractor = (md: MarkdownIt) => {
const defaultFence =
md.renderer.rules.fence ||
function (
tokens: Array<Token>,
index: number,
options: Options,
_: unknown,
self: Renderer
) {
return self.renderToken(tokens, index, options)
}
md.renderer.rules.fence = function (
tokens: Array<Token>,
index: number,
options: Options,
env: unknown,
self: Renderer
) {
const token = tokens[index]
if (token.info.trim() === "macroplan") {
const encoded = encodeUTF8ToBase64(token.content)
return `<div class="macroplan-block" data-macroplan-source="${encoded}"><span class="macroplan-loading">Rendering macroplan…</span></div>\n`
}
return defaultFence(tokens, index, options, env, self)
}
}
const slugger = new GithubSlugger()
let tabGroupCounter = 0
@@ -107,6 +138,7 @@ const md = new MarkdownIt({
})
.use(markdownItMermaidExtractor)
.use(markdownItTikzExtractor)
.use(markdownItMacroplanExtractor)
.use(html5Media)
.use(blockEmbedPlugin, {
youtube: {