diff --git a/src/hooks/useMarkdown.hook.ts b/src/hooks/useMarkdown.hook.ts index d9e8109..61ea501 100644 --- a/src/hooks/useMarkdown.hook.ts +++ b/src/hooks/useMarkdown.hook.ts @@ -1,3 +1,4 @@ +import type { MarkdownItTabData, MarkdownItTabInfo } from "@mdit/plugin-tab" import { tab } from "@mdit/plugin-tab" import markdownItKatex from "@vscode/markdown-it-katex" import GithubSlugger from "github-slugger" @@ -50,6 +51,10 @@ const markdownItMermaidExtractor = (md: MarkdownIt) => { const slugger = new GithubSlugger() +let tabGroupCounter = 0 +let currentTabGroup = 0 +let currentTabActiveSet = false + const md = new MarkdownIt({ typographer: true, quotes: ["«\xA0", "\xA0»", "‹\xA0", "\xA0›"] @@ -70,7 +75,20 @@ const md = new MarkdownIt({ .use(MarkdownItGitHubAlerts) .use(markdownItTablerIcons) .use(tab, { - name: "tabs" + name: "tabs", + openRender: (info: MarkdownItTabInfo) => { + currentTabGroup = ++tabGroupCounter + currentTabActiveSet = info.active >= 0 + return '
\n' + }, + closeRender: () => "
\n", + tabOpenRender: (data: MarkdownItTabData) => { + const isChecked = data.isActive || (!currentTabActiveSet && data.index === 0) + const checked = isChecked ? " checked" : "" + const title = data.title.replace(/"/g, """) + return `\n
\n` + }, + tabCloseRender: () => "
\n" }) .use(markdownItAnchor, { slugify: (s: string) => slugger.slug(s)