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

@olasearch/styled

v1.0.3

Published

Simple CSS in JS style for React

Downloads

3

Readme

React styled for Ola Search

Inspiration - https://github.com/jxnblk/cxs

  1. Made it compatible with react-frame-component
  2. Check for document context and appends style tag
  3. If no document is provided, parent document is selected

fast af css-in-js in 0.7kb

import styled from '@olasearch/styled'
const className = styled('div')((props) => ({
  color: props.color
}))

cxs is a minimal css-in-js solution that uses an atomic css approach to maximize performance and deduplication

Features

  • 0.7 KB
  • Zero dependencies
  • High performance
  • Style encapsulation
  • Deduplicates repeated styles
  • Dead-code elimination
  • Framework independent
  • Media queries
  • Pseudoclasses
  • Nesting
  • No CSS files
  • No tagged template literals
  • Optional React component API

Install

npm install @olasearch/styled

Usage

cxs works with any framework, but this example uses React for demonstration purposes.

import React from 'react'
import cxs from 'cxs'

const Box = (props) => {
  return (
    <div {...props} className={className} />
  )
}

const className = cxs({
  padding: '32px',
  backgroundColor: 'tomato'
})

export default Box

Pseudoclasses

const className = cxs({
  color: 'tomato',
  ':hover': {
    color: 'black'
  }
})

Media Queries

const className = cxs({
  fontSize: '32px',
  '@media screen and (min-width: 40em)': {
    fontSize: '48px'
  }
})

Child Selectors

const className = cxs({
  color: 'black',
  ' > a': {
    color: 'tomato'
  }
})

Static/Server-Side Rendering

For Node.js environments, use the css() method to return the static CSS string after rendering a view.

import React from 'react'
import ReactDOMServer from 'react-dom/server'
import cxs from 'cxs'
import App from './App'

const html = ReactDOMServer.renderToString(<App />)
const css = cxs.css()

const doc = `<!DOCTYPE html>
<style>${css}</style>
${html}
`

// Reset the cache for the next render
cxs.reset()

Note: cxs does not currently have a mechanism for rehydrating styles on the client, so use with caution in universal JavaScript applications.

React Components

cxs also has an alternative higher order component API for creating styled React components, similar to the styled-components API.

import cxs from 'cxs/component'

const Heading = cxs('h1')({
  margin: 0,
  fontSize: '32px',
  lineHeight: 1.25
})

Extending components

To extend a cxs component, pass it to the component creator function.

const Button = cxs('button')({
  color: 'white',
  backgroundColor: 'blue'
})

const TomatoButton = cxs(Button)({
  backgroundColor: 'tomato'
})

Other components

Any component can be passed to cxs to add styles.

import { Link } from 'react-router'

const MyLink = cxs(Link)({
  color: 'tomato'
})

Note: components must accept className as a prop to work with cxs.

Functional styles

cxs components can also handle dynamic styling based on props by passing a function as an argument

const Heading = cxs('h1')(props => ({
  color: props.color
}))

Removing style props

To remove style props from the rendered HTML element, use the prop-types package to define propTypes on a component. cxs/component will remove any prop that matches a key from the propTypes object.

import cxs from 'cxs/component'
import PropTypes from 'prop-types'

const Heading = cxs('h2')(props => ({
  fontSize: props.big ? '48px' : '32px'
}))

Heading.propTypes = {
  big: PropTypes.bool
}

styled-system

Style utility functions, like those in styled-system, can be used with cxs/component.

import cxs from 'cxs/component'
import {
  space,
  color
} from 'styled-system'

const Heading = cxs('h2')(space, color)

Theming

Theming is supported with the <ThemeProvider> component.

import React from 'react'
import ThemeProvider from 'cxs/ThemeProvider'
import theme from './theme'

const App = props => (
  <ThemeProvider theme={theme}>
    <Heading>
      Hello
    </Heading>
  </ThemeProvider>
)
import cxs from 'cxs/component'

const Heading = cxs('h2')(props => ({
  fontSize: props.theme.fontSizes[4] + 'px',
  color: props.theme.blue
}))

API

cxs(...styles)

Accepts styles objects or functions that return style objects and returns a className string.

cxs.css()

Returns the rendered CSS string for static and server-side rendering.

cxs.reset()

Resets the cache for server-side rendering

cxs/component

A styled-components-like API for creating React components with cxs.


Vendor prefixes

cxs does not handle vendor prefixing to keep the module size at a minimum.

Previous Versions

For previous versions of cxs, see the v3 branch or v4 branch

MIT License