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

@zauberware/react-svg-assets

v0.10.2

Published

A simple SVG asset provider for React (^16.3.0) .. or better (^16.6.0).

Downloads

5

Readme

Official SVG logo

react-svg-assets

A simple SVG asset provider for React (^16.3.0) .. or better (^16.6.0).

Getting Started

Why?

At our company we always start with "Why?", so why should this component be used? The problem we faced was that every display component we created, that contained icons in any way, had many, many imports relative to our assests. Sometimes we have apps and sites with a lot of icons in menus or as bulletpoints a.s.o.

To keep your asset management in order, we created a higher-order component with context and the possibility to defined an iconset. This allows you to wrap your component with our Icon provider and you can easily use your icons wherever you need them, just by name.

Prequisites

This module depends on the Context API as introduced in React 16.3.0. You can read more about the Context API in the official documentation.

Installation

npm install @zauberware/react-svg-assets

Usage

This package does not contain an predefined icon set, so your SVGs must be defined before using the Provider. The icon set shall be function which returns a complete set or a single icon by name, this approach is giving us a higher flexibility when we try to display conditional or dynamic icons.

You can also use the withIcons HOC (Higher-Order-Component), if you need your icons outside the IconProvider or if you don't use the Provider pattern.

For testing purposes and for the example project you can import a minimal IconFile and use the 'default' identifier as the Icon property.

# pseudo
import { IconProvider, icons } from '@zauberware/react-svg-assets';

<IconProvider icons={icons}>
  <Icon icon={'default'} />
</IconProvider>

For more conveniece 'styled-compenets' are included. You can override the theme values and inject your custom theme via props. Common use cases like 'rotate' or different sizes, can also be controlled via props.

main.js

import React from 'react';
import ReactDOM from 'react-dom';
import { IconProvider } from '@zauberware/react-svg-assets';
import './index.css';
import App from './App';
import myIcons from './myIcons'

ReactDOM.render(
  <IconProvider icons={myIcons}>
    <App />
  </IconProvider>
  , document.getElementById('root'));

myIcons.js

import MyIcon from './path-to-my-assets/icon.svg'

export default (_icon) => {
  const icons = {
    'myIconName': MyIcon,
  }
  return _icon ? icons[_icon] : icons
}

App.js

import React, { Component } from 'react';
import { Icon } from '@zauberware/react-svg-assets'

class App extends Component {
  render() {
    return (
      <main>
        <Icon icon="myIconName" />
      </main>
    );
  }
}

export default App;

Basic Styles & theme

Add to your theme file.

theme.js

const theme = {

  icons: {
    display: 'flex',
    sizes: ['14px', '18px', '24px', '32px']  
  }
}

export default theme

Icon properties

  // rotate by degrees
  <Icon icon="default" rotate="90" />

  // add padding
  <Icon icon="default" padding="5px" />
  
  // change cursor to pointer
  <Icon icon="default" clickable />

  // default size is 18px; mini: 14px, medium: 24px, large: 32px
  <Icon icon="default" mini|medium|large />

  // render size level from theme props
  <Icon icon="default" size={2} />

  // render fixed width or height for viewport of icon
  <Icon icon="default" width='100px' height='180px' />

Have a look at our example project under /examples.

Todos

  • Testing

Default Icon

The default icon 'letter z' is designed by Freepik from www.flaticon.com