diff --git a/docs/getting-started/authoring.mdx b/docs/getting-started/authoring.mdx
index 8080e236..c7b9a84f 100644
--- a/docs/getting-started/authoring.mdx
+++ b/docs/getting-started/authoring.mdx
@@ -56,7 +56,7 @@ title: Authoring
Result (with double quotes)
-
+
diff --git a/src/components/mdx/Img/rehypeImg.ts b/src/components/mdx/Img/rehypeImg.ts
index ebfb5a5e..f8e60fab 100644
--- a/src/components/mdx/Img/rehypeImg.ts
+++ b/src/components/mdx/Img/rehypeImg.ts
@@ -1,12 +1,33 @@
+import resolveMdxUrl from '@/utils/resolveMdxUrl'
import type { Root } from 'hast'
import { visit } from 'unist-util-visit'
+import type { MdxJsxAttribute } from 'mdast-util-mdx-jsx'
+
// https://unifiedjs.com/learn/guide/create-a-rehype-plugin/
-export function rehypeImg() {
- return (tree: Root) => {
+export function rehypeImg(
+ relFilePath: Parameters[1],
+ MDX_BASEURL: Parameters[2],
+) {
+ return () => (tree: Root) => {
visit(tree, null, function (node) {
// console.log(node)
- if (node.type === 'mdxJsxFlowElement' && node.name === 'img') node.name = 'Img' // map HTML to React component
+ if (node.type === 'mdxJsxFlowElement' && node.name === 'img') {
+ node.name = 'Img' // map HTML to React component
+
+ //
+ // Resolve relative URLs
+ //
+
+ const srcAttr = (
+ node.attributes.filter(({ type }) => type === 'mdxJsxAttribute') as MdxJsxAttribute[]
+ ).find((attr) => attr.name === 'src')
+
+ if (srcAttr) {
+ const src = srcAttr.value
+ if (typeof src === 'string') srcAttr.value = resolveMdxUrl(src, relFilePath, MDX_BASEURL)
+ }
+ }
})
}
}
diff --git a/src/utils/docs.tsx b/src/utils/docs.tsx
index 3f4ac8ab..386a157d 100644
--- a/src/utils/docs.tsx
+++ b/src/utils/docs.tsx
@@ -142,14 +142,6 @@ async function _getDocs(
// inline images
//
- content = content.replace(
- /(src="|\()(.+?\.(?:png|jpe?g|gif|webp|avif))("|\))/g, // https://regexper.com/#%2F%28src%3D%22%7C%5C%28%29%28.%2B%3F%5C.%28%3F%3Apng%7Cjpe%3Fg%7Cgif%7Cwebp%7Cavif%29%29%28%22%7C%5C%29%29%2Fg
- (_input, prefix: string, src: string, suffix: string) => {
- const url = resolveMdxUrl(src, relFilePath, MDX_BASEURL)
- return `${prefix}${url}${suffix}`
- },
- )
-
const boxes: string[] = []
const tableOfContents: DocToC[] = []
@@ -159,7 +151,7 @@ async function _getDocs(
mdxOptions: {
remarkPlugins: [remarkGFM],
rehypePlugins: [
- rehypeImg,
+ rehypeImg(relFilePath, MDX_BASEURL),
rehypeDetails,
rehypeSummary,
rehypeGha,