This plugin allows you to:
enhanced:img
library from @sveltejs/enhanced-img
.loading
, fetchpriority
, and decoding
) to images directly in markdown (image by image) or through the plugin configuration (to all images).Special thanks to https://github.com/mattjennings/mdsvex-relative-images, for the inspiration.
Feel free to open a PR or an issue if you have any suggestions or feature requests!
Lucas |
Augustin C. |
James Antony Francis Manley |
npm install --save-dev @lzinga/mdsvex-enhanced-images
(or the equivalent pnmp / yarn / bun commands)
Configure the package in your mdsvex config.
import enhancedImage from 'mdsvex-enhanced-images';
const config = {
extensions: ['.svelte', '.md'],
preprocess: [
mdsvex({
extensions: ['.md'],
remarkPlugins: [[
enhancedImage,
{
// Optional: attributes to add to **all** `img` tags
attributes: {
fetchpriority: "auto", // browser's default
loading: "eager", // browser's default
decoding: "auto", // browser's default
class: "test-decoration test-shadow" // add classes to all images
},
// Optional: imagetools directives to add to **all** `img` tags
// see https://github.com/JonasKruckenberg/imagetools/blob/main/docs/directives.md#format
imagetoolsDirectives:{
tint: "rgba(10,33,127)",
blur: 10,
}
}
]]
})
],
kit: {
adapter: adapter()
}
};
Now you can add images like
### Image With Space Local Folder

### Image no space, local folder

### Image no space, lib folder

You can also individually add css classes and extra attribute to images:
### Image with css classes:

### Image with more attributes (here, loading=lazy):

### Image with imagetools directives

and in the page the images get replaced with the component like so.
<enhanced:img src={importedImage} alt="Image With Space Local Folder"></enhanced:img>
and in the HTML it appears like
<picture>
<!--[-->
<source srcset="/@imagetools/43b0240cd054a16b2f8a777b81bc4080b1acf480 64w, /@imagetools/158187b3c4aa0009b5a8dab06fd646564597d12f 128w" type="image/avif" />
<source srcset="/@imagetools/7dfbb97480e17bfd34ea5b9bf456e0904ac39232 64w, /@imagetools/51b34cea801d67387212057d7d251b64e3bcf3b5 128w" type="image/webp" />
<source srcset="/@imagetools/749bd9a6a3c3e0aebf61154883f9a65b72404e47 64w, /@imagetools/0de3b0f0f739a05f1b5c3bde640e029bd344ccf8 128w" type="image/png" />
<!--]-->
<img src="/@imagetools/0de3b0f0f739a05f1b5c3bde640e029bd344ccf8" alt="abc" width="128" height="128" />
</picture>