react-image-designer

Design dynamic, progressively loaded images with React.

Usage no npm install needed!

<script type="module">
  import reactImageDesigner from 'https://cdn.skypack.dev/react-image-designer';
</script>

README

React Image Designer

Build Status

Known Vulnerabilities

Features

- Can be background-image, or src. Just specify they base element tag in props.
- Loads only if visible in window.
- Support for srcset and sizes.
- Placeholder present until src image is loaded (blank by default)
- Can set custom timeout to delay src image load

background

this project is influenced heavily by react-progressive-image. However, it appears they are no longer making updates to it (at least not new features), and I needed something similar that had options to generate background-images, use dynamic base element types, and handle children. I also prefer a simplified syntax.

Install

yarn

$ yarn add react-image-designer

npm

$ npm install react-image-designer

The UMD build is also available on unpkg:

<script src="https://unpkg.com/react-image-designer/umd/react-image-designer.min.js"></script>

If you use the UMD build you can find the library on window.__RID.

Props

| Name | Type | Required | Description | Default | | -- | -- | -- | -- | -- | | src | string | true | source of main image | required - no default | | placeholder | string | false | source of placeholder images | "" | | style | obj | false | inline styles for component | {} | | className | string | false | class for the base element | "" | | id | string | false | id for the base element | "" | | contain | boolean | false | if background-size is 'contain' (else 'cover') | false | | repeat | boolean | false | if image repeats (background images only) | false | | position | string | false | background-position style string | browser default | | children | React Children | false | any string, html, or react element to embed | "" | | alt | string | false | string for alt attribute if img tag | src | | tag | string | false | html element type for img (e.g. - img, div, figure etc.) | "img" | | srcset | string | false | srcset | "" | | sizes | string | false | sizes for srcset | "" | | noImage | boolean | false | if true, no image is used (for text only) | false | | timeout | number | false | delay in milliseconds before src is loaded | 0 | | lazy | boolean | false | if img should be lazy-loaded | true |

Simple

<ImageDesigner
  src={img.src}
  placeholder={img.placeholder}
  style={{
    height: "auto",
    margin: "auto"
  }}
/>

With Caption (as background-image)

<ImageDesigner
  src={img.src}
  srcset={img.srcset}
  sizes={img.sizes}
  placeholder={img.placeholder}
  id={["img", i].join("-")}
  className={imgClass}
  tag="div"
>
  <div
    className={captionClass}
    dangerouslySetInnerHTML={{
      __html: tryDecode(img.caption)
    }}
  />
</ImageDesigner>

Try Things Live

to test the options, git clone this repo, put some images in the 'imgs' directory, and set-up your configuration somewhere in the 'src' directory. Then run yarn start ./relative/path/from/src/to/configuration or npm run start ./relative/path/from/src/to/configuration. There is an example provided. To run it locally, execute yarn start ./dev-scripts/example or npm run start ./dev-scripts/example.

Contributing

clone, install, tinker, submit. Thanks!