Module flamingo-carotene-webpack-svg-sprite

This module simplifies the setup, generating and using svg sprites for icons in the Flamingo Carotene environment. During the build step of Flamingo Carotene we use external-svg-sprite-loader webpack module to extract all required svg files into an single svg sprite.

How to setup

1. npm

npm i -D flamingo-carotene-webpack-svg-sprite

2. In your pug

In your base template file you'll need to include the svgIconSprite.pug from this module.

include ~flamingo-carotene-webpack-svg-sprite/dist/svgIconSprite

3. In your sass

If you would like to style your icons then you'll need to @import this in your main index.[sass|scss] file.

@import '~flamingo-carotene-webpack-svg-sprite/dist/svgIconSprite'

4. Register sprite behavior and require svg files

Create app/js/svgIconSprite.js file and import this in your index.js file:

import behavior from './behavior'
import svgIconSpriteBehavior from 'flamingo-carotene-webpack-svg-sprite/dist/svgIconSprite.behavior'

behavior.registerBehaviorClasses({
  svgIconSpriteBehavior: svgIconSpriteBehavior
});

import './svgIconSprite/*.svg'

The import './svgIconSprite/*.svg' is the setup for external-svg-sprite-loader webpack module, which collects all svg files in all js files in your project and extracts them into single svgIconSprite.svg file. All svg icons should live in frontend/src/app/js/svgIconSprite/*.js

How to use

pug

Parameter name Description
$iconName Here you should provide the file name of the svg icon you would like to use.

For example if you have chevron.svg in your svg icons folder then you can use this icon like this in your pug:

+svgIcon('chevron')

You could use this as a normal pug mixin and pass any attribute you would like.

sass

After correctly setting it up, this module provides a sass mixin called +svgSpriteIcon with following parameters:

Parameter name Default value Description
$width false Width in px can be provided
$height false Height in px can be provided
$userRatio false Useful if you would like to have the icon scaled based on the ratio

For example this will style element with class name .myLogo, with 25px width and 25px height and svg filled red:

.myLogo
  +svgSpriteIcon(25, 25)
    fill: red

What is $useRatio for?

If turned on, the wrapping element will get padding-top with percentage based ratio calculated from the provided width and height.