Socket
Socket
Sign inDemoInstall

@emotion/sheet

Package Overview
Dependencies
0
Maintainers
4
Versions
38
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

    @emotion/sheet

emotion's stylesheet


Version published
Weekly downloads
10M
decreased by-1.95%
Maintainers
4
Created
Weekly downloads
 

Package description

What is @emotion/sheet?

The @emotion/sheet package is part of the Emotion library, which is a popular CSS-in-JS library that allows developers to write CSS styles with JavaScript. The @emotion/sheet package provides a low-level utility for managing style sheets. It is used internally by Emotion to insert styles into the DOM, but it can also be used directly for more control over how styles are inserted.

What are @emotion/sheet's main functionalities?

Creating and inserting a style sheet

This feature allows you to create a new style sheet and insert CSS rules into it. The 'speedy' option enables faster insertion of rules by using CSSOM APIs.

{"import { StyleSheet } from '@emotion/sheet';\nconst sheet = new StyleSheet({ speedy: true });\nsheet.insert('.css-12345 { color: hotpink; }');"}

Flushing styles

This feature allows you to remove all rules from the style sheet. This can be useful for cleaning up styles in server-side rendering or during hot module replacement in development.

{"import { StyleSheet } from '@emotion/sheet';\nconst sheet = new StyleSheet({ speedy: true });\nsheet.insert('.css-12345 { color: hotpink; }');\nsheet.flush();"}

Other packages similar to @emotion/sheet

Readme

Source

@emotion/sheet

A StyleSheet for css-in-js libraries

yarn add @emotion/sheet
import { StyleSheet } from '@emotion/sheet'

const sheet = new StyleSheet({ key: '', container: document.head })

sheet.insert('html { color: hotpink; }')

Note: This is not useful for server-side rendering, you should implement SSR seperately

StyleSheet

Options

type Options = {
  nonce?: string
  key: string
  container: Node
  speedy?: boolean
  prepend?: boolean
}
nonce

A nonce that will be set on each style tag that the sheet inserts for Content Security Policies.

container

A DOM Node that the sheet will insert all of it's style tags into, this is useful for inserting styles into iframes.

key

This will be set as the value of the data-emotion attribute on the style tags that get inserted. This is useful to identify different sheets.

speedy

This defines how rules are inserted. If it is true, rules will be inserted with insertRule which is very fast but doesn't allow rules to be edited in DevTools. If it is false, rules will be inserted by appending text nodes to style elements which is much slower than insertRule but allows rules to be edited in DevTools. By default, speedy is enabled in production and disabled in development.

prepend

Deprecated: Please use insertionPoint option instead.

This defines where rules are inserted into the container. By default they are appended but this can be changed by using prepend: true option.

insertionPoint

This defines specific dom node after which the rules are inserted into the container. You can use a meta tag to specify the specific location:

const head = document.querySelector('head')

// <meta name="emotion-insertion-point" content="">
const emotionInsertionPoint = document.createElement('meta')
emotionInsertionPoint.setAttribute('name', 'emotion-insertion-point')
emotionInsertionPoint.setAttribute('content', '')

head.appendChild(emotionInsertionPoint)

// the emotion sheets should be inserted right after the meta tag
const cache = createCache({
  key: 'my-app',
  insertionPoint: emotionInsertionPoint
})

function App() {
  return (
    <CacheProvider value={cache}>
      <Main />
    </CacheProvider>
  )
}

Methods

insert

This method inserts a single rule into the document. It must be a single rule otherwise an error will be thrown in speedy mode which is enabled by default in production.

flush

This method will remove all style tags that were inserted into the document.

hydrate

This method moves given style elements into sheet's container and put them into internal tags collection. It's can be used for SSRed styles.

Example with all options

import { StyleSheet } from '@emotion/sheet'

const container = document.createElement('div')

document.head.appendChild(container)

const sheet = new StyleSheet({
  nonce: 'some-nonce',
  key: 'some-key',
  container
})

sheet.insert('html { color: hotpink; }')

sheet.flush()

Thanks

This StyleSheet is based on glamor's StyleSheet written by Sunil Pai. ❤️

FAQs

Last updated on 27 Oct 2022

Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc