remark-d2 v0.2.3
remark-d2
A remark plugin that turns d2 code blocks into diagrams in Markdown files.
https://github.com/mech-a/remark-d2/assets/11798509/e6c6276f-8839-46af-b29e-243f31cdce24
Features
Fast resizing and titling: metadata tags like width, position, and title are compiled:
┎─────── abbrev. ───────┒
```d2 w=150px;position=center;a="test"
d2->is->fast
```
becomes:
<img alt="test" position="center" width="150px" src="/d2/docs/features/0.svg" />width,wheight,hposition,ptitle,talt,a
Change default d2 compile settings and default image attributes easily
const output = await remark()
.use(remarkD2, {
defaultD2Opts: ["-t 101", "--dark-theme 200"],
// "Orange Creamsicle" on light mode,
// "Dark Mauve" on dark mode
defaultImageAttrs: {
title: "Wow, colors!",
alt: "Colorful Diagram",
width: "700px",
},
})
.processSync(file);gets you
Try changing color modes and see!
Installation
Ensure that you have d2 installed and accessible on your PATH. Then, install using your favorite package manager:
npm install remark-d2
Usage
In your unified or remark toolchain, you can include the plugin. Note that the VFile passed in must have a path.
import { remark } from "remark";
import remarkD2 from "remark-d2";
import { VFile } from "vfile";
import { readFileSync } from "node:fs";
const file = new VFile({
path: "docs/intro.md",
value: readFileSync("docs/intro.md"),
});
const output = await remark().use(remarkD2).processSync(file);
console.log(output.toString());Integrations
remark-d2 is compatible with Docusaurus out of the box. However, as Docusaurus does not currently support ES Modules, to install remark-d2 follow the workaround mentioned in the Docusaurus docs:
// in `docusaurus.config.js`
// wrap your config in a function:
async function createConfig() {
// import the plugin here
const d2 = (await import("remark-d2")).default;
// return your config
return {
title: ...,
tagline: ...,
presets: [ // install here or in plugin config
[
'@docusaurus/preset-classic', // or any other preset
{
docs: {
remarkPlugins; [d2], // works out of the box
},
},
],
],
}
};
// export the function (will be automatically called)
module.exports = createConfigConfiguration
Options can be passed in as a parameter in .use. They should be in an Object form.
compilePath- Relative path where d2 diagrams are exported in respective folders
- default:
static/d2, compatible with Docusaurus
ext- File extension for d2 diagrams: currently only
svgorpng- Note that
pngis slower and does not support automatic light/dark mode
- Note that
- default:
svg
- File extension for d2 diagrams: currently only
linkPath- Path prepended to the relative file path in the image URL
- Useful if your build system removes the parent folder reference
assets/orstatic/
- Useful if your build system removes the parent folder reference
- default:
/d2, compatible with Docusaurus
- Path prepended to the relative file path in the image URL
defaultD2Opts- Options passed to d2 CLI. See
man d2for more. - default:
["-t=100", "--dark-theme=200"]
- Options passed to d2 CLI. See
htmlImage- If
true, replace all code blocks with HTML<img />tags instead of Markdown images- If a code block has metadata, regardless of
htmlImage's value, it will be an HTML image
- If a code block has metadata, regardless of
- default:
false
- If
defaultImageAttrs- Default attributes for images
- Only the keys
titleandaltapply to both Markdown and HTML images. All other attributes are only used if it is an HTML image.
- Only the keys
- default:
{ alt: "d2 diagram" }
- Default attributes for images