npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

astro-m2dx-image

v0.1.0

Published

Astro components for using @astrojs/image in MDX

Downloads

35

Readme

astro-m2dx-image

Astro components wrapping @astrojs/image for easier use in MDX files.

Have a look at the blog post to learn more, how to work with optimized images in Astro MDX.

Content

What is this?

This package is a source distribution of Astro components, which ease working with images as they usually appear in markdown files, i.e.

  • local images referenced by absolute file paths (relative paths are supported through the use of astro-m2dx normalizePaths-feature)
  • no additional attributes besides alt, src and title (art direction through the class attribute can be implemented through astro-m2dx :style-directives

When should I use this?

If you use Astro MDX to generate a site from Markdown files and you want to use optimized images through regular markdown image syntax, i.e. ![Alt text](./my-url.jpg).

The components do not rely on astro-m2dx, but are only tested in the context of it and are best used together with it.

Install

This package is ESM only. In Node.js (version 12.20+, 14.14+, or 16.0+), install with npm:

npm install astro-m2dx-image

Use

Simple use of Image

The simplest (and least effective) use is, to simply map markdown images to the provided image component in a _components.ts

import { Image } from 'astro-m2dx-image';

export const components = {
  img: Image,
};

Do not forget to enable exportComponents and normalizePaths in your astro-m2dx configuration.

This will give you an optimized image with all the default settings, probably it is not optimized at all, but you could take the image component as a basis to implement your own default settings.

Simple use of Picture

Doing the same as above, but with the Picture component will give you access to next generation image formats 'avif' and 'webp'.

import { Picture } from 'astro-m2dx-image';

export const components = {
  img: Picture,
};

Custom Picture component

You can easily implement a custom component, by defining some default properties

---
import { Picture, PictureProps } from 'astro-m2dx-image';

const props = Astro.props as PictureProps;

const customProps: PictureProps = {
  aspectRatio: 1,
  loading: props.class?.includes('eager') ? 'eager' : undefined,
  position: 'attention',
  sizes: '(min-width: 360px) 240px, 100vw',
  widths: [240, 480],
  ...props,
};
---

<Picture {...customProps} />

For the property loading, you can see a typical pattern, that I use for art direction: I usually derive some properties from classes, that I attach to images, using astro-m2dx :style-directive

![My fantastic hero image](./hero.jpg):style{.eager}

Callback

If you have the need to compute some props based on all defined props including a resolved src property, you can configure a callback function (props: PictureProps) => PictureProps, that can set any property.

A typical use case would be, to limit the aspect ratio to some boundaries.

Detailed Introduction

For a detailed introduction, have a look at the astro-m2dx blog post "Working with images".