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

icon-sprite

v0.1.2

Published

Combines svg icons into a single sprite file.

Downloads

10

Readme

Icon Sprite

npm Github Actions License: MIT

This package contains functions which allow a dev to build an icon sprite from a folder of svg icons and export it to a single icon sprite svg file.

  • Best used inside an npm script for now.
  • The majority of the original icons' SVG code is kept intact, so it's up to the dev to format the original icon files. (See below).
  • The svg file name is used to create the symbol id. So a filename of up-arrow can be referenced in html using #up-arrow. (See below).

Installation

npm install -D icon-sprite

Usage

At the moment, the package is intended to be used inside a custom node script file, though could also be used in a build process. In addition to the documentation below, the repo contains a demo folder for reference.

Exports

The package exports two functions. One to build the icon sprite as a string, and one to export it to a file:

import { buildSprite, exportSpriteToFile } from 'icon-sprite';

const sprite = await buildSprite('absolute-path-to-folder-containing-icons');
exportSpriteToFile(sprite, 'absolute-path-to-file.svg');

// Directory of sprite file and input icons cannot be the same, as
// buildSprite imports all svgs from the folder.

Script Example

Folder Structure:

src
  assets
    icons
      source

scripts
  icon-sprite.ts|js

package.json

icon-sprite.ts|js:

import path from 'path';
import { buildSprite, exportSpriteToFile } from 'icon-sprite';

const sourceFolderPath = path.resolve(__dirname, '../src/assets/icons/source');
const spriteFilePath = path.resolve(__dirname, '../src/assets/icons/icon-sprite.svg');

const spriteString = await buildSprite(sourceFolderPath);

exportSpriteToFile(spriteString, spriteFilePath);

package.json

I'm using @digitak/esrun instead of ts-node. Standard js file with node command is also fine.

{
  "scripts": {
    "icon-sprite": "esrun ./scripts/icon-sprite.ts"
  }
}

SVG Code

When combining the svg files,

  • The xmlns attribute is removed
  • <svg></svg> is replaced with <symbol></symbol>
  • The svg file-name is added to the symbol as: id="file-name"

The source/original icon svgs must be formatted like so:

  • It's typically best to remove the height and width attributes so the svg can be sized from CSS.
  • Make sure the xmlns attr is exactly xmlns="http://www.w3.org/2000/svg
  • Other elements than <path> inside the svg should be fine

Input:

<!-- Original icon file: up-arrow.svg -->
<!-- Setting fill="currentColor" is often useful -->
<svg viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg">
  <path
    d="..."
    fill="..."
    other-attr="..."
  />
</svg>

Output:

The outputted file is formatted using Prettier.

<svg xmlns="http://www.w3.org/2000/svg">
  <defs>
    <symbol id="up-arrow" viewBox="0 0 32 32">
      <path
        d="..."
        fill="..."
        other-attr="..."
      />
    </symbol>
    ... other icons converted to <symbol>
  </defs>
</svg>

Referencing SVGs

<svg><use href="path-to-sprite-file.svg#up-arrow"></use></svg>