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

bembam

v1.0.4

Published

A tiny tool for easily building BEM class names in JavaScript.

Downloads

24

Readme

Bembam

A tiny tool for easily building BEM class names in JavaScript.

Usage

const disabled = true;
const isOn = false;
const className = bembam("block", "other-name") // block name and any additional class names
  .mod("green") // unconditional modifier
  .mod("disabled", disabled) // conditional modifier
  .mod("on", "off", isOn); // conditional modifier with disabled class name

const elName = className.el("element"); // block__element

className.toString(); // returns "block other-name block--green block--off"

With React:

class Zoo extends React.Component {
  render() {
    const {disabled, open, className} = this.props;
    const cn = bembam("zoo", className)
      .mod("disabled", disabled)
      .mod("open", open)
      .mod("awesome");

    return (
      <div className={cn.toString()}>
        <button className={cn.el("dog")}>Woof!</button>
        <button className={cn.el("cat")}>Meow</button>
      </div>
    );
  }
}

Methods

bembam(blockName:String [, ...otherNames:String]) -> BemBam

Creates a bembam instance. Takes the blockname and any number of additional classnames. Falsy classnames will be ignored.

#mod(modifierName:String [, disabledModifierName:String], conditional:Bool) -> BemBam

Adds the modifier name to the bembam instance if conditional is either not defined or truthy. The modifier will be rendered as blockName--modifierName in the result string. If three arguments are passed, the final argument is the conditional and the second argument is used as the modifier name if the condition is falsy. Falsy modifier names will be ignored. Returns the original BemBam instance for chaining.

#el(elementName:String) -> String

Returns an element string based on the block name and passed element name. The return value will have the format: blockName__elementName. Falsy element names will throw errors.

#toString() -> String

Renders the class names and modifiers into a single class string with classnames seperated by spaces.