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

bem-utils

v0.4.1

Published

Sugar for writing BEM-style classNames and CSS

Downloads

48

Readme

BEM Utils

Table of Contents

Installation

npm install bem-utils

bem-utils adds some sugar to writing out BEM-style classNames and CSS through the use of tagged template strings. BEM is great for your codebase, but it's hard to read and annoying to write. This module attempts to make both of the aforementioned actually kind of fun :)

Getting Started

Start by importing the module and setting the block for the classNames or cssText you want to generate. bem-utils has two main methods -- classNames(...) and css(...):

import BEM from 'bem-utils'
const BLOCK = 'Button'
let { classNames: cx, css } = BEM(BLOCK)

classNames

Basic

Blocks and Elements

The @ symbol can be used to produce Block+Element classNames:

cx`@`
// -> Button

cx`@content`
// -> Button__content

cx`@content/text`
// -> Button__content__text
Modifiers

You may include any number of comma-separated modifiers following a trailing whitespace:

cx`@ default`
// -> Button--default

cx`@ big, active`
// -> Button--big Button--active

cx`@content dark outlined`
// -> Button__content--dark--outlined

cx`@content/text large, purple`
// -> Button__content__text--large Button__content__text--purple

Advanced

Blocks and Elements

When +@ is used at the start of the classString, the block+element className will always be printed in addition to modifier classNames:

cx`+@ default`
// -> Button Button--default

cx`+@content dark outlined`
// -> Button__content Button__content--dark--outlined

cx`+@content/text large, purple`
// -> Button__content__text Button__content__text--large Button__content__text--purple
Modifiers

If the leading +@ or @ is omitted, modifiers will be applied to the block:

cx`default`
// -> Button--default

cx`big, active`
// -> Button--big Button--active

cx`big, active, dark outlined`
// -> Button--big Button--active Button--dark--outlined

CSS

css`

.default ${`
  color: #000;
`}

.default .content .icon.pink ${`
  color: #fff;
  background: pink;
  border-radius: 4px 8px;
`}

.default.big span .text:hover .purple ${`
  color: purple;
  text-align: center;
  text-decoration: none;
`}

`

The code above outputs the following css:

.Button--default {
  color: #000;
}

.Button--default .Button__content .Button__content__icon--pink {
  color: #fff;
  background: pink;
  border-radius: 4px 8px;
}

.Button--default--big span .Button__text:hover .Button__text__purple {
  color: purple;
  text-align: center;
  text-decoration: none;
}