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

stylesmith

v0.1.0

Published

[![Build Status](https://travis-ci.org/andywer/stylesmith.svg?branch=master)](https://travis-ci.org/andywer/stylesmith) [![Code Climate](https://codeclimate.com/github/andywer/stylesmith/badges/gpa.svg)](https://codeclimate.com/github/andywer/stylesmith)

Downloads

4

Readme

Stylesmith

Build Status Code Climate

Stylesmith is a small zero-dependency library to use ES6 tagged template strings for component styling.

It's primary purpose is to be used alongside with React.js and Radium.

Inspired by React: CSS in JS and Radium's enhanced style objects (':hover', '@media' keys and similar).

Usage with React / Radium

import React, { Component } from 'react'
import style from 'stylesmith'
import { colors } from './my-theme'

/*
 * You can use any JS variable in the template string style.
 * Pass strings or numbers as style rule values.
 * Pass an object to merge its styles.
 */
const buttonStyle = style`
  background: ${colors.green}
  color: ${colors.white}
  margin: 10 20

  :hover {
    background: ${colors.blue}
  }

  @media print {
    display: none
  }
`

export default class Button extends Component {
  render () {
    return (
      <button style={buttonStyle}>{this.props.children}</button>
    )
  }
}

Installation

Using NPM:

npm install --save stylesmith

Using JSPM:

jspm install stylesmith

What happens here?

style`
  margin: 10
  color: ${color.white}

  :hover {
    text-decoration: underline
    ${anotherStyle}
  }
`

// returns this object:

{
  margin: 10,
  color: color.white,
  ':hover': Object.assign({
    'text-decoration': 'underline'
  }, anotherStyle)
}

Looks much friendlier, doesn't it? And no more CSS class name crazyness! The styles you define here are only applied to the elements you render with the style property set to it.

Why would I need that?

As vjeux points out in his popular talk React: CSS in JS, CSS styling comes with some built-in troubles. Some of them can pretty easy be come over by using a pre-processor like SASS or LESS (like variables).

But other problems persist and cannot easily be solved using stylesheets, such as the fact that CSS only knows one global scope. So you have to be very careful how to write your CSS selectors in order to not have them style things they are not supposed to and avoid naming clashes.

React's inline style objects provide a simple, yet powerful solution for the problem. Radium extends the concept by introducing nested ':hover', ':active', '@media', ... objects.

The only problem is now that these objects tend to look quite unpleasant. Using ES6 template strings you can now write them just as a block of CSS rules and insert ${variable} where you need to.

Proper styling, easy and powerful. And you do not even have to preprocess your styles anymore!

License

Licensed under the terms of the MIT license. See file LICENSE for details.