astro-d2
Version:
Astro integration and remark plugin to transform D2 Markdown code blocks into diagrams.
103 lines (100 loc) • 3.25 kB
text/typescript
import { z } from 'astro/zod'
export const AstroD2ConfigSchema = z
.object({
/**
* Whether to add an appendix to the diagrams with tooltips or links.
*
* @default false
* @see https://d2lang.com/tour/interactive/
*/
appendix: z.boolean().default(false),
/**
* Defines the fonts to use for the generated diagrams.
*
* @see https://d2lang.com/tour/fonts/
*/
fonts: z
.object({
/**
* The relative path from the project's root to the .ttf font file to use for the regular font.
*/
regular: z.string().optional(),
/**
* The relative path from the project's root to the .ttf font file to use for the italic font.
*/
italic: z.string().optional(),
/**
* The relative path from the project's root to the .ttf font file to use for the bold font.
*/
bold: z.string().optional(),
})
.optional(),
/**
* Defines if the SVG diagrams should be inlined in the HTML output.
*
* By default, the diagrams are rendered using the `<img>` tag.
*/
inline: z.boolean().default(false),
/**
* Defines the layout engine to use to generate the diagrams.
*
* @default 'dagre'
* @see https://d2lang.com/tour/layouts#layout-engines
*/
layout: z.union([z.literal('dagre'), z.literal('elk'), z.literal('tala')]).default('dagre'),
/**
* The name of the output directory containing the generated diagrams relative to the `public/` directory.
*
* @default 'd2'
*/
output: z.string().default('d2'),
/**
* The padding (in pixels) around the rendered diagrams.
*
* @default 100
*/
pad: z.number().default(100),
/**
* Whether to render the diagrams as if they were sketched by hand.
*
* @default false
*/
sketch: z.boolean().default(false),
/**
* Whether the Astro D2 integration should skip the generation of diagrams.
*
* This is useful to disable generating diagrams when deploying on platforms that do not have the D2 binary
* available. This will require you to build and commit the diagrams before deploying your site.
*
* @default false
*/
skipGeneration: z.boolean().default(false),
/**
* The themes to use for the generated diagrams.
*
* @see https://d2lang.com/tour/themes
*/
theme: z
.object({
/**
* The dark theme to use for the diagrams when the user's system preference is set to dark mode.
*
* To disable the dark theme and have all diagrams look the same, set this option to `false`.
*
* @default '200'
* @see https://d2lang.com/tour/themes
*/
dark: z.union([z.string(), z.literal(false)]).default('200'),
/**
* The default theme to use for the diagrams.
*
* @default '0'
* @see https://d2lang.com/tour/themes
*/
default: z.string().default('0'),
})
.default({}),
})
.default({})
export type AstroD2UserConfig = z.input<typeof AstroD2ConfigSchema>
export type AstroD2Config = z.output<typeof AstroD2ConfigSchema>