A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://www.npmjs.com/package/recma-mdx-html-override below:

recma-mdx-html-override - npm

This package is a unified (recma) plugin that allows selected raw HTML elements to be overridden via MDX components.

unified is a project that transforms content with abstract syntax trees (ASTs) using the new parser micromark. recma adds support for producing a javascript code by transforming esast which stands for Ecma Script Abstract Syntax Tree (AST) that is used in production of compiled source for the MDX.

Use this plugin when you need to override specific raw HTML elements in MDX using MDXComponents.

In MDX, it's easy to override elements created with Markdown syntax—like ![alt](image.png) for images or ## Heading for headings. However, elements written using raw HTML, such as <img src="image.png" alt="alt"> or <h2>Heading</h2>, cannot be overridden in the same way. recma-mdx-html-override bridges this gap, making it possible to override raw HTML elements just like their Markdown counterparts.

recma-mdx-html-override visits the ESAST elements and focuses on Literals (those starting with lowercase letters or/and contains hypen) in ESAST to make them overridable via MDXComponents. Basically, recma-mdx-html-override modifies Literal parameters in the jsx/jsxs call expressions by converting them to _components.[literal], ensuring they can be overridden. You can find information about valid JSX identifiers (identifiers, wrapper and html tags) that can be passed into MDXComponents and whether they are Literals or a References to an Identifier in @mdx-js/mdx documentation.

If a html raw element is in the content with markdown ("md") format and if the plugin pipeline contains rehype-raw, then the html raw element is already overridable by default via MDXComponents. recma-mdx-html-override is mostly useful for the content in MDX ("mdx") format.

This package is suitable for ESM only. In Node.js (version 18+), install with npm:

npm install recma-mdx-html-override

or

yarn add recma-mdx-html-override

Say we have the following file, example.mdx,

# Hi

<img src="image.png" alt="picture" />

And our module, example.js, looks as follows:

import { read } from "to-vfile";
import { compile } from "@mdx-js/mdx";
import recmaMdxHtmlOverride from "recma-mdx-html-override";

main();

async function main() {
  const source = await read("example.mdx");

  const compiledSource = await compile(source, {
    recmaPlugins: [[recmaMdxHtmlOverride, {tags: "img"}]],
  });

  return String(compiledSource);
}

Now, running node example.js produces the compiled source like below:

function _createMdxContent(props) {
  const _components = {
    h1: "h1",
+   img: "img",
    ...props.components
  };
  return _jsxs(_Fragment, {
    children: [_jsx(_components.h1, {
      children: "Hi"
-   }), "\\n", _jsx("img", {
+   }), "\\n", _jsx(_components.img, {
      src: "image.png",
      alt: "picture"
    })]
  });
}

This allows the img component to be overridden via MDX components: { img: (props) => {/* custom rendering */} }.

There is one option.

export type HtmlOverrideOptions = {
  tags?: string | string[]; // default is undefined
};

It is a string | string[] option to specify which HTML elements should be made overridable in MDX.

Altough it is optional, the plugin will be effectless if you don't provide the option. recma-mdx-html-override makes only the tags defined via tags option overridable.

use(recmaMdxHtmlOverride, {tags: "video"} as HtmlOverrideOptions);

This makes <video /> elements overridable via MDX components.

This plugin modifies only the ESAST (EcmaScript Abstract Syntax Tree) as explained.

This package is fully typed with TypeScript. The plugin options is exported as HtmlOverrideOptions.

This plugin works with unified version 6+. It is compatible with mdx version 3+.

Use of recma-mdx-html-override does not involve user content so there are no openings for cross-site scripting (XSS) attacks.

I like to contribute the Unified / Remark / MDX ecosystem, so I recommend you to have a look my plugins.

MIT License © ipikuka


RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4