New Research: Supply Chain Attack on Axios Pulls Malicious Dependency from npm.Details →
Socket
Book a DemoSign in
Socket

powerstyl

Package Overview
Dependencies
Maintainers
1
Versions
15
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

powerstyl

A way to style elements in vanilla JavaScript

latest
Source
npmnpm
Version
1.3.0
Version published
Maintainers
1
Created
Source

powerstyl

A way to style elements in vanilla JavaScript.

Installation

npm install powerstyl

Getting Started

import { styled, updateStyle } from "powerstyl";
const Button = styled("button", { type: "global" })`
  font-size: 1em;
  padding: 0.2em 0.5em;
  border-radius: 0.2em;
  color: black;
  border: none;
  cursor: pointer;
  background-color: ${(e) => (e.count % 2 ? "rgb(10 240 220)" : "rgb(150, 240, 20)")};
  &:hover {
    background-color: ${(e) => (e.count % 2 ? "rgb(10 230 200)" : "rgb(150, 230, 0)")};
  }
`;
const ButtonLg = styled(Button, { type: "global" })`
  font-size: 1.2em;
`;
const button = ButtonLg();
button.count = 0;
button.append("Click me");
button.addEventListener("click", () => {
  button.count++;
  updateStyle(button);
});
document.body.appendChild(button);
Result

First updated:

<head>
  <style>
    [data-ps="4606c706"] {
      font-size: 1em;
      padding: 0.2em 0.5em;
      border-radius: 0.2em;
      color: black;
      border: none;
      cursor: pointer;
      background-color: rgb(150, 240, 20);
      font-size: 1.2em;
    }
    [data-ps="4606c706"]:hover {
      background-color: rgb(150, 230, 0);
    }
  </style>
</head>
<body>
  <button data-ps="4606c706">Click me</button>
</body>

After clicked:

<head>
  <style>
    [data-ps="4606c706"] {
      font-size: 1em;
      padding: 0.2em 0.5em;
      border-radius: 0.2em;
      color: black;
      border: none;
      cursor: pointer;
      background-color: rgb(150, 240, 20);
      font-size: 1.2em;
    }
    [data-ps="4606c706"]:hover {
      background-color: rgb(150, 230, 0);
    }
    [data-ps="f99b399b"] {
      font-size: 1em;
      padding: 0.2em 0.5em;
      border-radius: 0.2em;
      color: black;
      border: none;
      cursor: pointer;
      background-color: rgb(10 240 220);
      font-size: 1.2em;
    }
    [data-ps="f99b399b"]:hover {
      background-color: rgb(10 230 200);
    }
  </style>
</head>
<body>
  <button data-ps="f99b399b">Click me</button>
</body>

API Reference

styled

Create a function to create styled elements.

styled(tag, { type, manager });

Parameters

  • tag: An element tag name, custom element constructor, or function returns a element instance.
  • options
    • type: Style application type ('global', 'scoped', 'adopted' or 'inline').
    • manager: Style manager, used to update DOM and application styles.

updateStyle

Updates the style of an element created by styled.

If there are no functions in the template literals, calling updateStyle is a no-op.

It should be placed where the state is updated.

updateStyle(element);

mixin

Combines multiple style definitions into a single component, enabling composable styles.

It is useful for creating reusable atomic styles.

mixin(styler0, ...stylers);

Parameters

  • styler0: The first style definition.
  • stylers: The rest of the style definitions.

Parameters

  • element: The element whose style needs to be updated which created by styled function

Style Application

Global

Styles applied globally.

const MyComponent = styled("div", {
  type: "global",
})`
  /* root styles */
  &:hover {
    /* hover styles */
  }
`;
MyComponent();
<head>
  <style>
    [data-ps="11201b20"] {
      /* root styles */
    }
    [data-ps="11201b20"]:hover {
      /* hover styles */
    }
  </style>
</head>
<body>
  <div data-ps="11201b20"></div>
</body>

Scoped

Styles applied within a scope.

const MyComponent = styled("div", { type: "scoped" })`
  /* root styles */
  &:hover {
    /* hover styles */
  }
`;
MyComponent();
<div>
  <style>
    @scope {
      :scope {
        /* root styles */
      }
      :scope:hover {
        /* hover styles */
      }
    }
  </style>
</div>

Adopted

Styles applied within a opened shadow root.

const MyComponent = styled("element-with-shadow-root", { type: "adopted" })`
  /* host styles */
  &:hover {
    /* hover styles */
  }
`;
MyComponent();
:host {
  /* host styles */
}
:host(:hover) {
  /* hover styles */
}

Inline

Styles applied directly as inline styles to the element.

const MyComponent = styled("div", { type: "inline" })`
  /* inline styles */
`;
MyComponent();
<div style="/* inline styles */"></div>

Style Mixins

import { styled, mixin } from "powerstyl";

const Radius = styled()`
  border-radius: 0.2em;
`;

const Outline = styled()`
  outline: 1.5px solid black;
  border: none;
`;

const PrimaryButton = styled(
  mixin(
    styled("button")`
      font-size: 1.2em;
      cursor: pointer;
    `,
    Radius,
    Outline,
  ),
)`
  background-color: rgb(150, 240, 20);
`;

const button = PrimaryButton();
font-size: 1.2em;
cursor: pointer;

border-radius: 0.2em;

outline: 1.5px solid black;
border: none;

background-color: rgb(150, 240, 20);

Keywords

powerstyl

FAQs

Package last updated on 23 Jan 2026

Did you know?

Socket

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