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

react-werkzeug

v1.0.14

Published

Collection of components

Downloads

19

Readme

react-werkzeug

react-werkzeug is a comprehensive React component library designed to provide developers with a set of powerful and easy-to-use components that enhance user experiences and performance in web applications. The package currently includes a ProgressiveImage component, with plans to expand and add more useful components in the future.

Installation

npm i react-werkzeug

Progressive Image Component

The ProgressiveImage component is a React component that provides a smooth transition when loading images. It displays a placeholder image first and then replaces it with the actual image once it's loaded. Additionally, it handles error cases and displays an error message when the image fails to load.

Import components

import { ProgressiveImage } from "react-werkzeug";

Example Usage

Here's an example of how to use the ProgressiveImage component:

import { ProgressiveImage } from 'react-werkzeug';

const App = () => {
    return (
        <div>
            {/* Example with custom placeholder image */}
            <ProgressiveImage src="https://example.com/large-image.jpg" placeholderSrc="https://example.com/placeholder.jpg" alt="Large Image" width="800" height="600" className="custom-image" />

            {/* Example with default placeholder image */}
            <ProgressiveImage src="https://example.com/another-image.jpg" alt="Another Image" width="400" height="300" />
        </div>
    );
};

export default App;

In this example, we import the ProgressiveImage component and use it twice in the App component. The first instance uses a custom placeholder image, while the second instance uses the default placeholder image. The width and height props define the aspect ratio of the image, and the className prop allows us to apply additional CSS classes to the container div. The alt prop provides alternative text for the images, which is essential for accessibility.

Props

The ProgressiveImage component accepts the following props:

  • placeholderSrc: (Optional) The URL of the placeholder image to be displayed while the actual image is loading. If not provided, a default placeholder image will be used.
  • src: The URL of the actual image to be loaded and displayed.
  • alt: (Optional) The alternative text for the image, used for accessibility purposes.
  • width: (Optional) The width of the image in pixels or any valid CSS width value. Default is "auto".
  • height: (Optional) The height of the image in pixels or any valid CSS height value. Default is "auto".
  • className: (Optional) Additional CSS class name(s) to be applied to the container div.
  • imgClassName: (Optional) Additional CSS class name(s) to be applied to the img element.
  • ...restProps: (Optional) Any other props you want to pass to the underlying div element.

useRef

ProgressiveImage uses forwardRef to forward your refs

How to Customize Styling

The ProgressiveImage component offers a straightforward way to customize its styling by utilizing the styles prop. This prop allows you to override the default styling by providing your own style definitions.

Default Styles Object (defaultStyles)

Here's the defaultStyles object that you can reference to customize different parts of the ProgressiveImage component:

defaultStyles: {
  // img (default styling)
  img: {
    width: "100%",
    maxWidth: "100%",
    height: "auto"
  },
  loading: {
    filter: "blur(5px)",
    clipPath: "inset(0)",
  },
  loaded: {
    filter: "blur(0px)",
    transition: "filter 0.5s ease-in-out",
  },
  // .progressive-image (default styling)
  wrapper: {
    position: "relative",
    overflow: "hidden",
  },
  // .progressive-image__error-message (default styling)
  error: {
    position: "absolute",
    inset: 0,
    display: "flex",
    justifyContent: "center",
    alignItems: "center",
    fontSize: "1rem",
    textTransform: "uppercase",
    color: "gray",
    letterSpacing: "0.2em",
    textAlign: "center",
    width: "100%",
    height: "100%",
    backgroundColor: "#f9f9f9",
  }
}

Example

Here's an example of how to change the styling of the ProgressiveImage component:

<ProgressiveImage
    src="https://example.com/large-image.jpg"
    placeholderSrc="https://example.com/placeholder.jpg"
    alt="Large Image"
    width="800"
    height="600"
    className="custom-image"
    styles={{
        img: { borderRadius: '50%' },
        loading: { filter: 'blur(20px)' },
        loaded: { transition: 'filter 0.3s ease' },
        wrapper: { backgroundColor: '#123456' },
        error: { backgroundColor: '#654321' }
    }}
/>

Known Bugs

Transitioning the Image Itself

If you attempt to transition the <img> element itself, you may encounter some issues. This is because the loaded state includes a transition: "filter 0.5s ease-in-out" property. Applying your own transition can lead to unexpected behavior.

Workaround

One possible workaround is to use the !important declaration to override the existing transition.

Changelog for Version 1.0.14

  • Made sure that the error message is displayed in front of the image.
  • Added better error messages
  • After the image has been loaded or failed to load, the blurred styling will vanish.

Changelog for Version 1.0.13

  • If the placeholderSrc is not defined, the defaultPlaceholder will be used instead. Only if the final src cannot be found, the error message will be displayed on top of the placeholderSrc or the defaultPlaceholder.

Changelog for Version 1.0.10-beta

  • Converted the project to TypeScript

Changelog for Version 1.0.8

  • Added BEM (Block Element Modifier) methodology for classNames to enhance maintainability and readability of CSS classes.
  • Added support for a style object prop, allowing developers to customize various visual aspects of the ProgressiveImage component using inline styles.
  • Introduced the imgClassName prop, which allows users to apply additional CSS class names specifically to the <img> element for more targeted styling.
  • Added the ability to set the loading attribute of the <img> element using the loading prop. This enables the use of the "lazy" loading attribute, which defers loading of the image until it enters the viewport, enhancing performance.
  • Default width and height props have been removed, and they now default to "auto". This provides more flexibility when using the ProgressiveImage component within various layout contexts.

Developers can take advantage of these new features and improvements to further enhance the usability, performance, and styling capabilities of the ProgressiveImage component in their React applications.

As always, feedback and contributions are welcome as we continue to refine and expand the react-werkzeug library. Thank you for your support!