UNPKG

@xt0rted/expressive-code-file-icons

Version:

Add Visual Studio Code file icons to Expressive Code frames

44 lines 1.77 kB
import { addClassName, select, setProperty } from "@expressive-code/core/hast"; import { iconForFile } from "./icons.js"; import { isTerminal } from "./utils.js"; export function pluginFileIcons({ iconClass, titleClass } = {}) { return { name: "File icons", hooks: { preprocessMetadata({ codeBlock }) { const { metaOptions, props } = codeBlock; props.icon = metaOptions.getString("icon") ?? props.icon; props.noIcon = metaOptions.getBoolean("no-icon") ?? props.noIcon; }, postprocessRenderedBlock: async ({ codeBlock, renderData }) => { if (codeBlock.props.noIcon) { return; } if (isTerminal(renderData.blockAst)) { return; } const titleText = codeBlock.props["title"]; // Comes from the frames plugin if (!titleText) { return; } const iconSvgElement = await iconForFile(titleText, codeBlock.language, codeBlock.props.icon); if (!iconSvgElement) { return; } setProperty(iconSvgElement, "aria-hidden", "true"); if (iconClass) { addClassName(iconSvgElement, iconClass); } const title = select("figcaption > .title", renderData.blockAst); if (!title) { return; } title.children?.unshift(iconSvgElement); if (titleClass) { addClassName(title, titleClass); } }, }, }; } //# sourceMappingURL=index.js.map